$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69083 - in sandbox/local/libs/local/params_name: . boost/detail/preprocessor boost/local boost/local/aux_ boost/local/aux_/function_macros boost/local/aux_/function_macros/code_ boost/local/aux_/preprocessor/sign
From: lorcaminiti_at_[hidden]
Date: 2011-02-20 12:30:15
Author: lcaminiti
Date: 2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
New Revision: 69083
URL: http://svn.boost.org/trac/boost/changeset/69083
Log:
Got the factorial example to compile with and without the variadic syntax :))
Added:
   sandbox/local/libs/local/params_name/04.cpp   (contents, props changed)
   sandbox/local/libs/local/params_name/05.cpp   (contents, props changed)
   sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/name.hpp   (contents, props changed)
   sandbox/local/libs/local/params_name/factorial.cpp   (contents, props changed)
   sandbox/local/libs/local/params_name/factorial_va.cpp   (contents, props changed)
Text files modified: 
   sandbox/local/libs/local/params_name/00.cpp                                                        | 285857 +++++++++++++++++++++++++++++++++++++-- 
   sandbox/local/libs/local/params_name/03.cpp                                                        |     2                                         
   sandbox/local/libs/local/params_name/boost/detail/preprocessor/nilseq.hpp                          |     4                                         
   sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/binding.hpp            |     8                                         
   sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/deduce_result_type.hpp |     4                                         
   sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/functor.hpp            |   153                                         
   sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/params.hpp                   |     7                                         
   sandbox/local/libs/local/params_name/boost/local/aux_/preprocessor/sign/params_any_bind.hpp        |     4                                         
   sandbox/local/libs/local/params_name/boost/local/aux_/symbol.hpp                                   |     8                                         
   sandbox/local/libs/local/params_name/boost/local/function.hpp                                      |     3                                         
   10 files changed, 269482 insertions(+), 16568 deletions(-)
Modified: sandbox/local/libs/local/params_name/00.cpp
==============================================================================
--- sandbox/local/libs/local/params_name/00.cpp	(original)
+++ sandbox/local/libs/local/params_name/00.cpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -1,746 +1,4 @@
-       
-namespace std {
-}
-typedef int ptrdiff_t;
-typedef unsigned int size_t;
-namespace std {
-  using ::ptrdiff_t;
-  using ::size_t;
-}
-       
-namespace std {
-  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); }
-  }
-}
-       
-namespace std {
-  template<typename _Tp>
-    inline void
-    swap(_Tp& __a, _Tp& __b)
-    {
-     
-      _Tp __tmp = (__a);
-      __a = (__b);
-      __b = (__tmp);
-    }
-}
-namespace std {
-  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); }
-}
-extern "C" {
-extern "C" {
-}
-extern "C" {
-}
-extern "C" {
-typedef signed char __int8_t ;
-typedef unsigned char __uint8_t ;
-typedef signed short __int16_t;
-typedef unsigned short __uint16_t;
-typedef __int16_t __int_least16_t;
-typedef __uint16_t __uint_least16_t;
-typedef signed int __int32_t;
-typedef unsigned int __uint32_t;
-typedef __int32_t __int_least32_t;
-typedef __uint32_t __uint_least32_t;
-typedef signed long long __int64_t;
-typedef unsigned long long __uint64_t;
-}
-typedef void *_LOCK_T;
-extern "C"
-{
-void __cygwin_lock_init(_LOCK_T *);
-void __cygwin_lock_init_recursive(_LOCK_T *);
-void __cygwin_lock_fini(_LOCK_T *);
-void __cygwin_lock_lock(_LOCK_T *);
-int __cygwin_lock_trylock(_LOCK_T *);
-void __cygwin_lock_unlock(_LOCK_T *);
-}
-typedef long _off_t;
-typedef short __dev_t;
-typedef unsigned short __uid_t;
-typedef unsigned short __gid_t;
-__extension__ typedef long long _off64_t;
-typedef long _fpos_t;
-typedef _off64_t _fpos64_t;
-typedef int _ssize_t;
-typedef unsigned int wint_t;
-typedef struct
-{
-  int __count;
-  union
-  {
-    wint_t __wch;
-    unsigned char __wchb[4];
-  } __value;
-} _mbstate_t;
-typedef _LOCK_T _flock_t;
-typedef void *_iconv_t;
-typedef long int __off_t;
-typedef int __pid_t;
-__extension__ typedef long long int __loff_t;
-typedef unsigned char u_char;
-typedef unsigned short u_short;
-typedef unsigned int u_int;
-typedef unsigned long u_long;
-typedef unsigned short ushort;
-typedef unsigned int uint;
-typedef unsigned long clock_t;
-typedef long time_t;
-struct timespec {
-  time_t tv_sec;
-  long tv_nsec;
-};
-struct itimerspec {
-  struct timespec it_interval;
-  struct timespec it_value;
-};
-typedef long daddr_t;
-typedef char * caddr_t;
-typedef int pid_t;
-typedef _ssize_t ssize_t;
-typedef unsigned short nlink_t;
-typedef long fd_mask;
-typedef struct _types_fd_set {
- fd_mask fds_bits[(((64)+(((sizeof (fd_mask) * 8))-1))/((sizeof (fd_mask) * 8)))];
-} _types_fd_set;
-typedef unsigned long clockid_t;
-typedef unsigned long timer_t;
-typedef unsigned long useconds_t;
-typedef long suseconds_t;
-extern "C"
-{
-typedef signed char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-typedef long long int64_t;
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long uint64_t;
-typedef signed char int_least8_t;
-typedef short int_least16_t;
-typedef int int_least32_t;
-typedef long long int_least64_t;
-typedef unsigned char uint_least8_t;
-typedef unsigned short uint_least16_t;
-typedef unsigned int uint_least32_t;
-typedef unsigned long long uint_least64_t;
-typedef signed char int_fast8_t;
-typedef int int_fast16_t;
-typedef int int_fast32_t;
-typedef long long int_fast64_t;
-typedef unsigned char uint_fast8_t;
-typedef unsigned int uint_fast16_t;
-typedef unsigned int uint_fast32_t;
-typedef unsigned long long uint_fast64_t;
-typedef int intptr_t;
-typedef unsigned int uintptr_t;
-typedef long long intmax_t;
-typedef unsigned long long uintmax_t;
-typedef struct timespec timespec_t;
-typedef struct timespec timestruc_t;
-typedef _off64_t off_t;
-typedef __loff_t loff_t;
-typedef short __dev16_t;
-typedef unsigned long __dev32_t;
-typedef __dev32_t dev_t;
-typedef long blksize_t;
-typedef long __blkcnt32_t;
-typedef long long __blkcnt64_t;
-typedef __blkcnt64_t blkcnt_t;
-typedef unsigned long fsblkcnt_t;
-typedef unsigned long fsfilcnt_t;
-typedef unsigned short __uid16_t;
-typedef unsigned long __uid32_t;
-typedef __uid32_t uid_t;
-typedef unsigned short __gid16_t;
-typedef unsigned long __gid32_t;
-typedef __gid32_t gid_t;
-typedef unsigned long __ino32_t;
-typedef unsigned long long __ino64_t;
-typedef __ino64_t ino_t;
-typedef unsigned long id_t;
-struct flock {
- short l_type;
- short l_whence;
- off_t l_start;
- off_t l_len;
- pid_t l_pid;
-};
-typedef long long key_t;
-typedef unsigned long vm_offset_t;
-typedef unsigned long vm_size_t;
-typedef void *vm_object_t;
-typedef unsigned char u_int8_t;
-typedef __uint16_t u_int16_t;
-typedef __uint32_t u_int32_t;
-typedef __uint64_t u_int64_t;
-typedef __int32_t register_t;
-typedef char *addr_t;
-typedef unsigned mode_t;
-typedef struct __pthread_t {char __dummy;} *pthread_t;
-typedef struct __pthread_mutex_t {char __dummy;} *pthread_mutex_t;
-typedef struct __pthread_key_t {char __dummy;} *pthread_key_t;
-typedef struct __pthread_attr_t {char __dummy;} *pthread_attr_t;
-typedef struct __pthread_mutexattr_t {char __dummy;} *pthread_mutexattr_t;
-typedef struct __pthread_condattr_t {char __dummy;} *pthread_condattr_t;
-typedef struct __pthread_cond_t {char __dummy;} *pthread_cond_t;
-typedef struct
-{
-  pthread_mutex_t mutex;
-  int state;
-}
-pthread_once_t;
-typedef struct __pthread_rwlock_t {char __dummy;} *pthread_rwlock_t;
-typedef struct __pthread_rwlockattr_t {char __dummy;} *pthread_rwlockattr_t;
-}
-extern char **environ;
-void __attribute__((__cdecl__)) _exit (int __status ) __attribute__ ((noreturn));
-int __attribute__((__cdecl__)) access (const char *__path, int __amode );
-unsigned __attribute__((__cdecl__)) alarm (unsigned __secs );
-int __attribute__((__cdecl__)) chdir (const char *__path );
-int __attribute__((__cdecl__)) chmod (const char *__path, mode_t __mode );
-int __attribute__((__cdecl__)) chown (const char *__path, uid_t __owner, gid_t __group );
-int __attribute__((__cdecl__)) chroot (const char *__path );
-int __attribute__((__cdecl__)) close (int __fildes );
-size_t __attribute__((__cdecl__)) confstr (int __name, char *__buf, size_t __len);
-char * __attribute__((__cdecl__)) ctermid (char *__s );
-char * __attribute__((__cdecl__)) cuserid (char *__s );
-int __attribute__((__cdecl__)) daemon (int nochdir, int noclose);
-int __attribute__((__cdecl__)) dup (int __fildes );
-int __attribute__((__cdecl__)) dup2 (int __fildes, int __fildes2 );
-int __attribute__((__cdecl__)) dup3 (int __fildes, int __fildes2, int flags);
-int __attribute__((__cdecl__)) eaccess (const char *__path, int __mode);
-void __attribute__((__cdecl__)) endusershell (void);
-int __attribute__((__cdecl__)) euidaccess (const char *__path, int __mode);
-int __attribute__((__cdecl__)) execl (const char *__path, const char *, ... );
-int __attribute__((__cdecl__)) execle (const char *__path, const char *, ... );
-int __attribute__((__cdecl__)) execlp (const char *__file, const char *, ... );
-int __attribute__((__cdecl__)) execv (const char *__path, char * const __argv[] );
-int __attribute__((__cdecl__)) execve (const char *__path, char * const __argv[], char * const __envp[] );
-int __attribute__((__cdecl__)) execvp (const char *__file, char * const __argv[] );
-int __attribute__((__cdecl__)) execvpe (const char *__file, char * const __argv[], char * const __envp[] );
-int __attribute__((__cdecl__)) faccessat (int __dirfd, const char *__path, int __mode, int __flags);
-int __attribute__((__cdecl__)) fchdir (int __fildes);
-int __attribute__((__cdecl__)) fchmod (int __fildes, mode_t __mode );
-int __attribute__((__cdecl__)) fchown (int __fildes, uid_t __owner, gid_t __group );
-int __attribute__((__cdecl__)) fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
-int __attribute__((__cdecl__)) fexecve (int __fd, char * const __argv[], char * const __envp[] );
-pid_t __attribute__((__cdecl__)) fork (void );
-long __attribute__((__cdecl__)) fpathconf (int __fd, int __name );
-int __attribute__((__cdecl__)) fsync (int __fd);
-int __attribute__((__cdecl__)) fdatasync (int __fd);
-char * __attribute__((__cdecl__)) getcwd (char *__buf, size_t __size );
-int __attribute__((__cdecl__)) getdomainname (char *__name, size_t __len);
-gid_t __attribute__((__cdecl__)) getegid (void );
-uid_t __attribute__((__cdecl__)) geteuid (void );
-gid_t __attribute__((__cdecl__)) getgid (void );
-int __attribute__((__cdecl__)) getgroups (int __gidsetsize, gid_t __grouplist[] );
-long __attribute__((__cdecl__)) gethostid (void);
-char * __attribute__((__cdecl__)) getlogin (void );
-int __attribute__((__cdecl__)) getlogin_r (char *name, size_t namesize);
-char * __attribute__((__cdecl__)) getpass (const char *__prompt);
-int __attribute__((__cdecl__)) getpagesize (void);
-int __attribute__((__cdecl__)) getpeereid (int, uid_t *, gid_t *);
-pid_t __attribute__((__cdecl__)) getpgid (pid_t);
-pid_t __attribute__((__cdecl__)) getpgrp (void );
-pid_t __attribute__((__cdecl__)) getpid (void );
-pid_t __attribute__((__cdecl__)) getppid (void );
-pid_t __attribute__((__cdecl__)) getsid (pid_t);
-uid_t __attribute__((__cdecl__)) getuid (void );
-char * __attribute__((__cdecl__)) getusershell (void);
-char * __attribute__((__cdecl__)) getwd (char *__buf );
-int __attribute__((__cdecl__)) iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
-int __attribute__((__cdecl__)) isatty (int __fildes );
-int __attribute__((__cdecl__)) lchown (const char *__path, uid_t __owner, gid_t __group );
-int __attribute__((__cdecl__)) link (const char *__path1, const char *__path2 );
-int __attribute__((__cdecl__)) linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags );
-int __attribute__((__cdecl__)) nice (int __nice_value );
-off_t __attribute__((__cdecl__)) lseek (int __fildes, off_t __offset, int __whence );
-int __attribute__((__cdecl__)) lockf (int __fd, int __cmd, off_t __len);
-long __attribute__((__cdecl__)) pathconf (const char *__path, int __name );
-int __attribute__((__cdecl__)) pause (void );
-int __attribute__((__cdecl__)) pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
-int __attribute__((__cdecl__)) pipe (int __fildes[2] );
-int __attribute__((__cdecl__)) pipe2 (int __fildes[2], int flags);
-ssize_t __attribute__((__cdecl__)) pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
-ssize_t __attribute__((__cdecl__)) pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
-_ssize_t __attribute__((__cdecl__)) read (int __fd, void *__buf, size_t __nbyte );
-int __attribute__((__cdecl__)) rresvport (int *__alport);
-int __attribute__((__cdecl__)) revoke (char *__path);
-int __attribute__((__cdecl__)) rmdir (const char *__path );
-int __attribute__((__cdecl__)) ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
-void * __attribute__((__cdecl__)) sbrk (ptrdiff_t __incr);
-int __attribute__((__cdecl__)) setegid (gid_t __gid );
-int __attribute__((__cdecl__)) seteuid (uid_t __uid );
-int __attribute__((__cdecl__)) setgid (gid_t __gid );
-int __attribute__((__cdecl__)) setgroups (int ngroups, const gid_t *grouplist );
-int __attribute__((__cdecl__)) setpgid (pid_t __pid, pid_t __pgid );
-int __attribute__((__cdecl__)) setpgrp (void );
-int __attribute__((__cdecl__)) setregid (gid_t __rgid, gid_t __egid);
-int __attribute__((__cdecl__)) setreuid (uid_t __ruid, uid_t __euid);
-pid_t __attribute__((__cdecl__)) setsid (void );
-int __attribute__((__cdecl__)) setuid (uid_t __uid );
-void __attribute__((__cdecl__)) setusershell (void);
-unsigned __attribute__((__cdecl__)) sleep (unsigned int __seconds );
-void __attribute__((__cdecl__)) swab (const void *, void *, ssize_t);
-long __attribute__((__cdecl__)) sysconf (int __name );
-pid_t __attribute__((__cdecl__)) tcgetpgrp (int __fildes );
-int __attribute__((__cdecl__)) tcsetpgrp (int __fildes, pid_t __pgrp_id );
-char * __attribute__((__cdecl__)) ttyname (int __fildes );
-int __attribute__((__cdecl__)) ttyname_r (int, char *, size_t);
-int __attribute__((__cdecl__)) unlink (const char *__path );
-int __attribute__((__cdecl__)) usleep (useconds_t __useconds);
-int __attribute__((__cdecl__)) vhangup (void );
-_ssize_t __attribute__((__cdecl__)) write (int __fd, const void *__buf, size_t __nbyte );
-extern "C" {
-extern int __attribute__((dllimport)) opterr;
-extern int __attribute__((dllimport)) optind;
-extern int __attribute__((dllimport)) optopt;
-extern int __attribute__((dllimport)) optreset;
-extern char __attribute__((dllimport)) *optarg;
-int getopt (int, char * const *, const char *);
-}
-pid_t __attribute__((__cdecl__)) vfork (void );
-int __attribute__((__cdecl__)) ftruncate (int __fd, off_t __length);
-int __attribute__((__cdecl__)) truncate (const char *, off_t __length);
-int __attribute__((__cdecl__)) getdtablesize (void);
-int __attribute__((__cdecl__)) setdtablesize (int);
-useconds_t __attribute__((__cdecl__)) ualarm (useconds_t __useconds, useconds_t __interval);
- int __attribute__((__cdecl__)) gethostname (char *__name, size_t __len);
-char * __attribute__((__cdecl__)) mktemp (char *);
-void __attribute__((__cdecl__)) sync (void);
-ssize_t __attribute__((__cdecl__)) readlink (const char *__path, char *__buf, size_t __buflen);
-ssize_t __attribute__((__cdecl__)) readlinkat (int __dirfd1, const char *__path, char *__buf, size_t __buflen);
-int __attribute__((__cdecl__)) symlink (const char *__name1, const char *__name2);
-int __attribute__((__cdecl__)) symlinkat (const char *, int, const char *);
-int __attribute__((__cdecl__)) unlinkat (int, const char *, int);
-}
-namespace boost{
-   __extension__ typedef long long long_long_type;
-   __extension__ typedef unsigned long long ulong_long_type;
-}
-namespace mpl_ { namespace aux {} }
-namespace boost { namespace mpl { using namespace mpl_;
-namespace aux { using namespace mpl_::aux; }
-}}
-namespace mpl_ {
-template< int N > struct int_;
-}
-namespace boost { namespace mpl { using ::mpl_::int_; } }
-namespace mpl_ {
-struct integral_c_tag { static const int value = 0; };
-}
-namespace boost { namespace mpl { using ::mpl_::integral_c_tag; } }
-namespace mpl_ {
-template< int N >
-struct int_
-{
-    static const int value = N;
-    typedef int_ type;
-    typedef int value_type;
-    typedef integral_c_tag tag;
-    typedef mpl_::int_< static_cast<int>((value + 1)) > next;
-    typedef mpl_::int_< static_cast<int>((value - 1)) > prior;
-    operator int() const { return static_cast<int>(this->value); }
-};
-template< int N >
-int const mpl_::int_< N >::value;
-}
-namespace boost { namespace mpl { namespace aux {
-template< typename F > struct template_arity;
-}}}
-namespace mpl_ {
-template< bool C_ > struct bool_;
-typedef bool_<true> true_;
-typedef bool_<false> false_;
-}
-namespace boost { namespace mpl { using ::mpl_::bool_; } }
-namespace boost { namespace mpl { using ::mpl_::true_; } }
-namespace boost { namespace mpl { using ::mpl_::false_; } }
-namespace mpl_ {
-template< bool C_ > struct bool_
-{
-    static const bool value = C_;
-    typedef integral_c_tag tag;
-    typedef bool_ type;
-    typedef bool value_type;
-    operator bool() const { return this->value; }
-};
-template< bool C_ >
-bool const bool_<C_>::value;
-}
-namespace mpl_ {
-template< typename T, T N > struct integral_c;
-}
-namespace boost { namespace mpl { using ::mpl_::integral_c; } }
-namespace mpl_ {
-template< typename T, T N >
-struct integral_c
-{
-    static const T value = N;
-    typedef integral_c type;
-    typedef T value_type;
-    typedef integral_c_tag tag;
-    typedef integral_c< T, static_cast<T>((value + 1)) > next;
-    typedef integral_c< T, static_cast<T>((value - 1)) > prior;
-    operator T() const { return static_cast<T>(this->value); }
-};
-template< typename T, T N >
-T const integral_c< T, N >::value;
-}
-namespace mpl_ {
-template< bool C >
-struct integral_c<bool, C>
-{
-    static const bool value = C;
-    typedef integral_c_tag tag;
-    typedef integral_c type;
-    typedef bool value_type;
-    operator bool() const { return this->value; }
-};
-}
-namespace boost{
-template <class T, T val>
-struct integral_constant : public mpl::integral_c<T, val>
-{
-   typedef integral_constant<T,val> type;
-};
-template<> struct integral_constant<bool,true> : public mpl::true_
-{
-   typedef integral_constant<bool,true> type;
-};
-template<> struct integral_constant<bool,false> : public mpl::false_
-{
-   typedef integral_constant<bool,false> type;
-};
-typedef integral_constant<bool,true> true_type;
-typedef integral_constant<bool,false> false_type;
-}
-namespace boost {
-template< typename T > struct is_reference : ::boost::integral_constant<bool,false> { };
-template< typename T > struct is_reference< T& > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-namespace type_traits {
-struct false_result
-{
-    template <typename T> struct result_
-    {
-        static const bool value = false;
-    };
-};
-}}
-namespace boost {
-namespace type_traits {
-template <class R>
-struct is_function_ptr_helper
-{
-    static const bool value = false;
-};
-template <class R >
-struct is_function_ptr_helper<R (*)()> { static const bool value = true; };
-template <class R >
-struct is_function_ptr_helper<R (*)( ...)> { static const bool value = true; };
-template <class R , class T0>
-struct is_function_ptr_helper<R (*)( T0)> { static const bool value = true; };
-template <class R , class T0>
-struct is_function_ptr_helper<R (*)( T0 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1>
-struct is_function_ptr_helper<R (*)( T0 , T1)> { static const bool value = true; };
-template <class R , class T0 , class T1>
-struct is_function_ptr_helper<R (*)( T0 , T1 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24)> { static const bool value = true; };
-template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_function_ptr_helper<R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...)> { static const bool value = true; };
-}
-}
-namespace boost {
-namespace detail {
-template<bool is_ref = true>
-struct is_function_chooser
-    : ::boost::type_traits::false_result
-{
-};
-template <>
-struct is_function_chooser<false>
-{
-    template< typename T > struct result_
-        : ::boost::type_traits::is_function_ptr_helper<T*>
-    {
-    };
-};
-template <typename T>
-struct is_function_impl
-    : is_function_chooser< ::boost::is_reference<T>::value >
-        ::template result_<T>
-{
-};
-}
-template< typename T > struct is_function : ::boost::integral_constant<bool,::boost::detail::is_function_impl<T>::value> { };
-}
-namespace boost
-{
-  template <bool B, class T = void>
-  struct enable_if_c {
-    typedef T type;
-  };
-  template <class T>
-  struct enable_if_c<false, T> {};
-  template <class Cond, class T = void>
-  struct enable_if : public enable_if_c<Cond::value, T> {};
-  template <bool B, class T>
-  struct lazy_enable_if_c {
-    typedef typename T::type type;
-  };
-  template <class T>
-  struct lazy_enable_if_c<false, T> {};
-  template <class Cond, class T>
-  struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
-  template <bool B, class T = void>
-  struct disable_if_c {
-    typedef T type;
-  };
-  template <class T>
-  struct disable_if_c<true, T> {};
-  template <class Cond, class T = void>
-  struct disable_if : public disable_if_c<Cond::value, T> {};
-  template <bool B, class T>
-  struct lazy_disable_if_c {
-    typedef typename T::type type;
-  };
-  template <class T>
-  struct lazy_disable_if_c<true, T> {};
-  template <class Cond, class T>
-  struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
-}
-namespace boost { namespace type_of {
-    template<typename T>
-        typename enable_if<is_function<T>, T&>::type
-        ensure_obj(T&);
-    template<typename T>
-        typename disable_if<is_function<T>, T&>::type
-        ensure_obj(const T&);
-}}
-namespace boost { namespace scope_exit { namespace aux {
-    template<int Dummy = 0>
-    struct declared
-    {
-        void* value;
-        static int const cmp2 = 0;
-        friend void operator>(int, declared const&) {}
-    };
-    struct undeclared { declared<> dummy[2]; };
-    template<int> struct resolve;
-    template<>
-    struct resolve<sizeof(declared<>)>
-    {
-        static const int cmp1 = 0;
-    };
-    template<>
-    struct resolve<sizeof(undeclared)>
-    {
-        template<int>
-        struct cmp1
-        {
-            static int const cmp2 = 0;
-        };
-    };
-} } }
-extern boost::scope_exit::aux::undeclared boost_scope_exit_args;
-namespace boost { namespace scope_exit { namespace aux {
-typedef void (*ref_tag)(int&);
-typedef void (*val_tag)(int );
-template<class T, class Tag> struct member;
-template<class T>
-struct member<T,ref_tag>
-{
-    T& value;
-};
-template<class T>
-struct member<T,val_tag>
-{
-    T value;
-};
-template<class T> inline T& deref(T* p, ref_tag) { return *p; }
-template<class T> inline T& deref(T& r, val_tag) { return r; }
-template<class T>
-struct wrapper
-{
-    typedef T type;
-};
-template<class T> wrapper<T> wrap(T&);
-} } }
 
-namespace boost { namespace local { namespace aux {
-template<typename T> struct add_pointed_const { typedef T type; };
-template<typename T> struct add_pointed_const<T*> { typedef T const* type; };
-template<typename T> struct add_pointed_const<T const*>
-    { typedef T const* type; };
-template<typename T> struct add_pointed_const<T* const>
-    { typedef T const* const type; };
-template<typename T> struct add_pointed_const<T const* const>
-    { typedef T const* const type; };
-}}}
-namespace boost {
-template< typename T > struct add_const { typedef T const type; };
-template< typename T > struct add_const<T&> { typedef T& type; };
-}
-namespace boost {
-template< typename T > struct add_cv { typedef T const volatile type; };
-template< typename T > struct add_cv<T&> { typedef T& type; };
-}
 
 
 
@@ -754,5817 +12,252461 @@
 
 
 
-namespace boost {
-template< typename T > struct remove_reference { typedef T type; };
-template< typename T > struct remove_reference<T&> { typedef T type; };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct add_pointer_impl
-{
-    typedef typename remove_reference<T>::type no_ref_type;
-    typedef no_ref_type* type;
-};
-}
-template< typename T > struct add_pointer { typedef typename boost::detail::add_pointer_impl<T>::type type; };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct add_reference_impl
-{
-    typedef T& type;
-};
-template< typename T > struct add_reference_impl<T&> { typedef T& type; };
-template<> struct add_reference_impl<void> { typedef void type; };
-template<> struct add_reference_impl<void const> { typedef void const type; };
-template<> struct add_reference_impl<void volatile> { typedef void volatile type; };
-template<> struct add_reference_impl<void const volatile> { typedef void const volatile type; };
-}
-template< typename T > struct add_reference { typedef typename boost::detail::add_reference_impl<T>::type type; };
-}
-namespace boost {
-template< typename T > struct add_volatile { typedef T volatile type; };
-template< typename T > struct add_volatile<T&> { typedef T& type; };
-}
-       
-namespace boost {
-template< typename T, typename U > struct is_same : ::boost::integral_constant<bool,false> { };
-template< typename T > struct is_same< T,T > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-namespace detail {
-template <typename T> struct cv_traits_imp {};
-template <typename T>
-struct cv_traits_imp<T*>
-{
-    static const bool is_const = false;
-    static const bool is_volatile = false;
-    typedef T unqualified_type;
-};
-template <typename T>
-struct cv_traits_imp<const T*>
-{
-    static const bool is_const = true;
-    static const bool is_volatile = false;
-    typedef T unqualified_type;
-};
-template <typename T>
-struct cv_traits_imp<volatile T*>
-{
-    static const bool is_const = false;
-    static const bool is_volatile = true;
-    typedef T unqualified_type;
-};
-template <typename T>
-struct cv_traits_imp<const volatile T*>
-{
-    static const bool is_const = true;
-    static const bool is_volatile = true;
-    typedef T unqualified_type;
-};
-}
-}
-namespace boost {
-   template< typename T > struct is_volatile : ::boost::integral_constant<bool,::boost::detail::cv_traits_imp<T*>::is_volatile> { };
-template< typename T > struct is_volatile< T& > : ::boost::integral_constant<bool,false> { };
-}
-       
-namespace mpl_ {
-template< std::size_t N > struct size_t;
-}
-namespace boost { namespace mpl { using ::mpl_::size_t; } }
-namespace mpl_ {
-template< std::size_t N >
-struct size_t
-{
-    static const std::size_t value = N;
-    typedef size_t type;
-    typedef std::size_t value_type;
-    typedef integral_c_tag tag;
-    typedef mpl_::size_t< static_cast<std::size_t>((value + 1)) > next;
-    typedef mpl_::size_t< static_cast<std::size_t>((value - 1)) > prior;
-    operator std::size_t() const { return static_cast<std::size_t>(this->value); }
-};
-template< std::size_t N >
-std::size_t const mpl_::size_t< N >::value;
-}
-       
-namespace boost {
-template <typename T> struct alignment_of;
-namespace detail {
-template <typename T>
-struct alignment_of_hack
-{
-    char c;
-    T t;
-    alignment_of_hack();
-};
-template <unsigned A, unsigned S>
-struct alignment_logic
-{
-    static const std::size_t value = A < S ? A : S;
-};
-template< typename T >
-struct alignment_of_impl
-{
-    static const std::size_t value = (::boost::detail::alignment_logic< sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T), sizeof(T) >::value);
-};
-}
-template< typename T > struct alignment_of : ::boost::integral_constant<std::size_t,::boost::detail::alignment_of_impl<T>::value> { };
-template <typename T>
-struct alignment_of<T&>
-    : alignment_of<T*>
-{
-};
-template<> struct alignment_of<void> : ::boost::integral_constant<std::size_t,0> { };
-template<> struct alignment_of<void const> : ::boost::integral_constant<std::size_t,0> { };
-template<> struct alignment_of<void volatile> : ::boost::integral_constant<std::size_t,0> { };
-template<> struct alignment_of<void const volatile> : ::boost::integral_constant<std::size_t,0> { };
-}
-namespace boost {
-template< typename T > struct is_void : ::boost::integral_constant<bool,false> { };
-template<> struct is_void< void > : ::boost::integral_constant<bool,true> { };
-template<> struct is_void< void const > : ::boost::integral_constant<bool,true> { };
-template<> struct is_void< void volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_void< void const volatile > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-template< typename T > struct is_integral : ::boost::integral_constant<bool,false> { };
-template<> struct is_integral< unsigned char > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned char const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned char volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned char const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< unsigned short > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned short const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned short volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned short const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< unsigned int > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned int const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned int volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned int const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< unsigned long > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned long const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned long volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< unsigned long const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< signed char > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed char const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed char volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed char const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< signed short > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed short const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed short volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed short const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< signed int > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed int const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed int volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed int const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< signed long > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed long const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed long volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< signed long const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< bool > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< bool const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< bool volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< bool const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< char > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< char const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< char volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< char const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< wchar_t > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< wchar_t const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< wchar_t volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< wchar_t const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< ::boost::ulong_long_type > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< ::boost::ulong_long_type const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< ::boost::ulong_long_type volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< ::boost::ulong_long_type const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_integral< ::boost::long_long_type > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< ::boost::long_long_type const > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< ::boost::long_long_type volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_integral< ::boost::long_long_type const volatile > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-template< typename T > struct is_float : ::boost::integral_constant<bool,false> { };
-template<> struct is_float< float > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< float const > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< float volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< float const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_float< double > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< double const > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< double volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< double const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_float< long double > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< long double const > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< long double volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_float< long double const volatile > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-namespace type_traits {
-template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>
-struct ice_or;
-template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
-struct ice_or
-{
-    static const bool value = true;
-};
-template <>
-struct ice_or<false, false, false, false, false, false, false>
-{
-    static const bool value = false;
-};
-}
-}
-namespace boost {
-namespace detail {
-template< typename T >
-struct is_arithmetic_impl
-{
-    static const bool value = (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_float<T>::value >::value);
-};
-}
-template< typename T > struct is_arithmetic : ::boost::integral_constant<bool,::boost::detail::is_arithmetic_impl<T>::value> { };
-}
-namespace boost {
-template< typename T > struct is_enum : ::boost::integral_constant<bool,__is_enum(T)> { };
-}
-namespace boost {
-namespace type_traits {
-template <typename T>
-struct is_mem_fun_pointer_impl
-{
-    static const bool value = false;
-};
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)() > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)( ...) > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)() const > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)() volatile > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)() const volatile > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)( ...) const > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)( ...) volatile > { static const bool value = true; };
-template <class R, class T >
-struct is_mem_fun_pointer_impl<R (T::*)( ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0) > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0) const > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0) volatile > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0) const volatile > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile > { static const bool value = true; };
-template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24>
-struct is_mem_fun_pointer_impl<R (T::*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile > { static const bool value = true; };
-}
-}
-       
-namespace boost {
-template< typename T > struct remove_cv { typedef typename boost::detail::cv_traits_imp<T*>::unqualified_type type; };
-template< typename T > struct remove_cv<T&> { typedef T& type; };
-template< typename T, std::size_t N > struct remove_cv<T const[N]> { typedef T type[N]; };
-template< typename T, std::size_t N > struct remove_cv<T volatile[N]> { typedef T type[N]; };
-template< typename T, std::size_t N > struct remove_cv<T const volatile[N]> { typedef T type[N]; };
-}
-namespace boost {
-template< typename T > struct is_member_function_pointer : ::boost::integral_constant<bool,::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value> { };
-}
-namespace boost {
-template< typename T > struct is_member_pointer : ::boost::integral_constant<bool,::boost::is_member_function_pointer<T>::value> { };
-template< typename T, typename U > struct is_member_pointer< U T::* > : ::boost::integral_constant<bool,true> { };
-template< typename T, typename U > struct is_member_pointer< U T::*const > : ::boost::integral_constant<bool,true> { };
-template< typename T, typename U > struct is_member_pointer< U T::*volatile > : ::boost::integral_constant<bool,true> { };
-template< typename T, typename U > struct is_member_pointer< U T::*const volatile > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-namespace type_traits {
-template <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true>
-struct ice_and;
-template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
-struct ice_and
-{
-    static const bool value = false;
-};
-template <>
-struct ice_and<true, true, true, true, true, true, true>
-{
-    static const bool value = true;
-};
-}
-}
-namespace boost {
-namespace type_traits {
-template <bool b>
-struct ice_not
-{
-    static const bool value = true;
-};
-template <>
-struct ice_not<true>
-{
-    static const bool value = false;
-};
-}
-}
-namespace boost {
-namespace detail {
-template< typename T > struct is_pointer_helper
-{
-    static const bool value = false;
-};
-template< typename T > struct is_pointer_helper<T*> { static const bool value = true; };
-template< typename T >
-struct is_pointer_impl
-{
-    static const bool value = (::boost::type_traits::ice_and< ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value , ::boost::type_traits::ice_not< ::boost::is_member_pointer<T>::value >::value >::value);
-};
-}
-template< typename T > struct is_pointer : ::boost::integral_constant<bool,::boost::detail::is_pointer_impl<T>::value> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct is_scalar_impl
-{
-   static const bool value = (::boost::type_traits::ice_or< ::boost::is_arithmetic<T>::value, ::boost::is_enum<T>::value, ::boost::is_pointer<T>::value, ::boost::is_member_pointer<T>::value >::value);
-};
-template <> struct is_scalar_impl<void>{ static const bool value = false; };
-template <> struct is_scalar_impl<void const>{ static const bool value = false; };
-template <> struct is_scalar_impl<void volatile>{ static const bool value = false; };
-template <> struct is_scalar_impl<void const volatile>{ static const bool value = false; };
-}
-template< typename T > struct is_scalar : ::boost::integral_constant<bool,::boost::detail::is_scalar_impl<T>::value> { };
-}
-       
-namespace boost {
-template< typename T > struct is_POD;
-namespace detail {
-template <typename T> struct is_pod_impl
-{
-    static const bool value = (::boost::type_traits::ice_or< ::boost::is_scalar<T>::value, ::boost::is_void<T>::value, __is_pod(T) >::value);
-};
-template <typename T, std::size_t sz>
-struct is_pod_impl<T[sz]>
-    : is_pod_impl<T>
-{
-};
-template<> struct is_pod_impl< void > { static const bool value = (true); };
-template<> struct is_pod_impl< void const > { static const bool value = (true); };
-template<> struct is_pod_impl< void volatile > { static const bool value = (true); };
-template<> struct is_pod_impl< void const volatile > { static const bool value = (true); };
-}
-template< typename T > struct is_POD : ::boost::integral_constant<bool,::boost::detail::is_pod_impl<T>::value> { };
-template< typename T > struct is_pod : ::boost::integral_constant<bool,::boost::detail::is_pod_impl<T>::value> { };
-}
-namespace boost {
-   template< typename T > struct is_const : ::boost::integral_constant<bool,::boost::detail::cv_traits_imp<T*>::is_const> { };
-template< typename T > struct is_const< T& > : ::boost::integral_constant<bool,false> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct has_trivial_assign_impl
-{
-   static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_assign(T) >::value, ::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value, ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value >::value);
-};
-}
-template< typename T > struct has_trivial_assign : ::boost::integral_constant<bool,::boost::detail::has_trivial_assign_impl<T>::value> { };
-}
-namespace boost {
-namespace detail{
-template <class T>
-struct has_nothrow_assign_imp{
-   static const bool value = (::boost::type_traits::ice_or< ::boost::has_trivial_assign<T>::value, (__has_nothrow_assign(T) && !is_volatile<T>::value) >::value);
-};
-}
-template< typename T > struct has_nothrow_assign : ::boost::integral_constant<bool,::boost::detail::has_nothrow_assign_imp<T>::value> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct has_trivial_ctor_impl
-{
-   static const bool value = (::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_constructor(T) >::value);
-};
-}
-template< typename T > struct has_trivial_constructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_ctor_impl<T>::value> { };
-template< typename T > struct has_trivial_default_constructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_ctor_impl<T>::value> { };
-}
-namespace boost {
-namespace detail{
-template <class T>
-struct has_nothrow_constructor_imp{
-   static const bool value = (::boost::type_traits::ice_or< ::boost::has_trivial_constructor<T>::value, __has_nothrow_constructor(T) >::value);
-};
-}
-template< typename T > struct has_nothrow_constructor : ::boost::integral_constant<bool,::boost::detail::has_nothrow_constructor_imp<T>::value> { };
-template< typename T > struct has_nothrow_default_constructor : ::boost::integral_constant<bool,::boost::detail::has_nothrow_constructor_imp<T>::value> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct has_trivial_copy_impl
-{
-   static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_or< ::boost::is_pod<T>::value, (__has_trivial_copy(T) && !is_reference<T>::value) >::value, ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value >::value);
-};
-}
-template< typename T > struct has_trivial_copy : ::boost::integral_constant<bool,::boost::detail::has_trivial_copy_impl<T>::value> { };
-template< typename T > struct has_trivial_copy_constructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_copy_impl<T>::value> { };
-}
-namespace boost {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning( disable : 4503 ) 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef __w64 unsigned int   uintptr_t;
+
+
+
+
+
+
+
+
+typedef char *  va_list;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+  
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+  
+ 
+
+
+
+
+
+
+
+ 
+  
+  
+ 
+
+
+
+
+
+
+
+ 
+  
+   
+  
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef __w64 unsigned int   size_t;
+
+
+
+
+
+
+typedef size_t rsize_t;
+
+
+
+
+
+
+
+
+typedef __w64 int            intptr_t;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef __w64 int            ptrdiff_t;
+
+
+
+
+
+
+
+
+
+
+typedef unsigned short wint_t;
+typedef unsigned short wctype_t;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+__declspec(deprecated("This name was supported during some Whidbey pre-releases. Instead, use the standard name errno_t.")) typedef int errcode;
+
+
+
+
+typedef int errno_t;
+
+
+
+typedef __w64 long __time32_t;   
+
+
+
+
+
+typedef __int64 __time64_t;     
+
+
+
+
+
+
+
+
+typedef __time64_t time_t;      
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct threadlocaleinfostruct;
+struct threadmbcinfostruct;
+typedef struct threadlocaleinfostruct * pthreadlocinfo;
+typedef struct threadmbcinfostruct * pthreadmbcinfo;
+struct __lc_time_data;
+
+typedef struct localeinfo_struct
+{
+    pthreadlocinfo locinfo;
+    pthreadmbcinfo mbcinfo;
+} _locale_tstruct, *_locale_t;
+
+
+typedef struct tagLC_ID {
+        unsigned short wLanguage;
+        unsigned short wCountry;
+        unsigned short wCodePage;
+} LC_ID, *LPLC_ID;
+
+
+
+
+typedef struct threadlocaleinfostruct {
+        int refcount;
+        unsigned int lc_codepage;
+        unsigned int lc_collate_cp;
+        unsigned long lc_handle[6]; 
+        LC_ID lc_id[6];
+        struct {
+            char *locale;
+            wchar_t *wlocale;
+            int *refcount;
+            int *wrefcount;
+        } lc_category[6];
+        int lc_clike;
+        int mb_cur_max;
+        int * lconv_intl_refcount;
+        int * lconv_num_refcount;
+        int * lconv_mon_refcount;
+        struct lconv * lconv;
+        int * ctype1_refcount;
+        unsigned short * ctype1;
+        const unsigned short * pctype;
+        const unsigned char * pclmap;
+        const unsigned char * pcumap;
+        struct __lc_time_data * lc_time_curr;
+} threadlocinfo;
+
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+
+
+		
+
+
+
+
+		
+
+ 
+  
+
+ 
+
+
+
+ 
+  
+ 
+
+ 
+  
+ 
+
+
+ 
+
+
+
+ 
+
+
+
+
+
+	
+
+
+		
+	
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+ 
+
+ 
+
+
+
+
+
+
+ 
+ 
+
+ 
+
+ 
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+ 
+
+
+
+
+
+ 
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma comment(lib,"libcpmt")
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+ 
+  
+
+
+   
+  
+ 
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+   
+
+
+
+    
+   
+
+ 
+
+
+ 
+  
+
+
+   
+  
+ 
+
+
+ 
+  
+
+
+   
+  
+ 
+
+
+ 
+  
+
+
+   
+  
+ 
+
+ 
+
+
+
+ 
+   
+
+
+     
+   
+ 
+
+
+    
+
+
+
+  
+
+
+
+		
+
+ 
+  
+  
+  
+
+
+
+
+  
+  
+  
+
+  
+
+
+
+
+
+
+
+   
+   
+   
+  
+
+  
+  
+  
+  
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+ 
+namespace std {
+typedef bool _Bool;
+}
+ 
+
+		
+
+
+
+
+
+		
+
+
+
+
+
+
+typedef __int64 _Longlong;
+typedef unsigned __int64 _ULonglong;
+
+		
+
+
+ 
+  
+ 
+
+
+
+
+
+		
+		
+
+
+
+
+
+
+ 
+namespace std {
+		
+
+
+#pragma warning(push)
+#pragma warning(disable:4412)
+class  _Lockit
+	{	
+public:
+  
+
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    explicit __thiscall _Lockit();	
+	explicit __thiscall _Lockit(int);	
+	__thiscall ~_Lockit();	
+    
+
+    static  void __cdecl _Lockit_ctor(int);
+    static  void __cdecl _Lockit_dtor(int);
+
+private:
+    static  void __cdecl _Lockit_ctor(_Lockit *);
+    static  void __cdecl _Lockit_ctor(_Lockit *, int);
+    static  void __cdecl _Lockit_dtor(_Lockit *);
+
+	 _Lockit(const _Lockit&);				
+	_Lockit&  operator=(const _Lockit&);	
+
+	int _Locktype;
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+class  _Mutex
+	{	
+public:
+
+  
+    
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    __thiscall _Mutex();
+	__thiscall ~_Mutex();
+	void __thiscall _Lock();
+	void __thiscall _Unlock();
+    
+
+private:
+    static  void __cdecl _Mutex_ctor(_Mutex *);
+    static  void __cdecl _Mutex_dtor(_Mutex *);
+    static  void __cdecl _Mutex_Lock(_Mutex *);
+    static  void __cdecl _Mutex_Unlock(_Mutex *);
+
+	 _Mutex(const _Mutex&);				
+	_Mutex&  operator=(const _Mutex&);	
+	void *_Mtx;
+
+  
+
+
+
+
+
+
+
+
+
+	};
+
+class  _Init_locks
+	{	
+public:
+
+ 
+    
+    
+
+
+
+
+
+
+
+
+
+    __thiscall _Init_locks();
+	__thiscall ~_Init_locks();
+    
+
+private:
+    static  void __cdecl _Init_locks_ctor(_Init_locks *);
+    static  void __cdecl _Init_locks_dtor(_Init_locks *);
+
+ 
+
+
+
+
+
+
+
+
+
+	};
+#pragma warning(pop)
+}
+ 
+
+
+
+
+
+		
+
+ void __cdecl _Atexit(void (__cdecl *)(void));
+
+typedef int _Mbstatet;
+
+
+
+
+
+  
+  
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern int * __cdecl _errno(void);
+
+
+errno_t __cdecl _set_errno(     int _Value);
+errno_t __cdecl _get_errno(     int * _Value);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern unsigned long  __cdecl __threadid(void);
+
+ extern uintptr_t __cdecl __threadhandle(void);
+
+
+
+
+}
+
+
+
+
+
+
+ 
+namespace std {
+using ::ptrdiff_t; using ::size_t;
+}
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct _iobuf {
+        char *_ptr;
+        int   _cnt;
+        char *_base;
+        int   _flag;
+        int   _file;
+        int   _charbuf;
+        int   _bufsiz;
+        char *_tmpfname;
+        };
+typedef struct _iobuf FILE;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FILE * __cdecl __iob_func(void);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef __int64 fpos_t;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  int __cdecl _filbuf(     FILE * _File );
+  int __cdecl _flsbuf(     int _Ch,      FILE * _File);
+
+
+
+
+  FILE * __cdecl _fsopen(       const char * _Filename,        const char * _Mode,      int _ShFlag);
+
+
+ void __cdecl clearerr(     FILE * _File);
+  errno_t __cdecl clearerr_s(     FILE * _File );
+  int __cdecl fclose(     FILE * _File);
+  int __cdecl _fcloseall(void);
+
+
+
+
+  FILE * __cdecl _fdopen(     int _FileHandle,        const char * _Mode);
+
+
+  int __cdecl feof(     FILE * _File);
+  int __cdecl ferror(     FILE * _File);
+  int __cdecl fflush(       FILE * _File);
+  int __cdecl fgetc(     FILE * _File);
+  int __cdecl _fgetchar(void);
+  int __cdecl fgetpos(     FILE * _File ,      fpos_t * _Pos);
+  char * __cdecl fgets(       char * _Buf,      int _MaxCount,      FILE * _File);
+
+
+
+
+  int __cdecl _fileno(     FILE * _File);
+
+
+
+
+
+
+
+  char * __cdecl _tempnam(         const char * _DirName,          const char * _FilePrefix);
+
+
+
+
+
+  int __cdecl _flushall(void);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "fopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   FILE * __cdecl fopen(       const char * _Filename,        const char * _Mode);
+
+  errno_t __cdecl fopen_s(                  FILE ** _File,        const char * _Filename,        const char * _Mode);
+
+  int __cdecl fprintf(     FILE * _File,         const char * _Format, ...);
+  int __cdecl fprintf_s(     FILE * _File,         const char * _Format, ...);
+  int __cdecl fputc(     int _Ch,      FILE * _File);
+  int __cdecl _fputchar(     int _Ch);
+  int __cdecl fputs(       const char * _Str,      FILE * _File);
+  size_t __cdecl fread(     void * _DstBuf,      size_t _ElementSize,      size_t _Count,      FILE * _File);
+  size_t __cdecl fread_s(     void * _DstBuf,      size_t _DstSize,      size_t _ElementSize,      size_t _Count,      FILE * _File);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "freopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   FILE * __cdecl freopen(       const char * _Filename,        const char * _Mode,      FILE * _File);
+
+  errno_t __cdecl freopen_s(                  FILE ** _File,        const char * _Filename,        const char * _Mode,      FILE * _OldFile);
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "fscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl fscanf(     FILE * _File,         const char * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_fscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _fscanf_l(     FILE * _File,         const char * _Format,        _locale_t _Locale, ...);
+
+  int __cdecl fscanf_s(     FILE * _File,         const char * _Format, ...);
+
+  int __cdecl _fscanf_s_l(     FILE * _File,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl fsetpos(     FILE * _File,      const fpos_t * _Pos);
+  int __cdecl fseek(     FILE * _File,      long _Offset,      int _Origin);
+  long __cdecl ftell(     FILE * _File);
+
+  int __cdecl _fseeki64(     FILE * _File,      __int64 _Offset,      int _Origin);
+  __int64 __cdecl _ftelli64(     FILE * _File);
+
+  size_t __cdecl fwrite(       const void * _Str,      size_t _Size,      size_t _Count,      FILE * _File);
+  int __cdecl getc(     FILE * _File);
+  int __cdecl getchar(void);
+  int __cdecl _getmaxstdio(void);
+
+ char * __cdecl gets_s(       char * _Buf,      rsize_t _Size);
+
+extern "C++" { template <size_t _Size> inline char * __cdecl gets_s(     char (&_Buffer)[_Size]) { return gets_s(_Buffer, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "gets_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl gets( char *_Buffer);
+ int __cdecl _getw(     FILE * _File);
+
+
+ void __cdecl perror(         const char * _ErrMsg);
+
+  int __cdecl _pclose(     FILE * _File);
+  FILE * __cdecl _popen(       const char * _Command,        const char * _Mode);
+  int __cdecl printf(        const char * _Format, ...);
+  int __cdecl printf_s(        const char * _Format, ...);
+  int __cdecl putc(     int _Ch,      FILE * _File);
+  int __cdecl putchar(     int _Ch);
+  int __cdecl puts(       const char * _Str);
+  int __cdecl _putw(     int _Word,      FILE * _File);
+
+
+  int __cdecl remove(       const char * _Filename);
+  int __cdecl rename(       const char * _OldFilename,        const char * _NewFilename);
+  int __cdecl _unlink(       const char * _Filename);
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_unlink" ". See online help for details."))   int __cdecl unlink(       const char * _Filename);
+
+
+ void __cdecl rewind(     FILE * _File);
+  int __cdecl _rmtmp(void);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "scanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl scanf(        const char * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_scanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _scanf_l(        const char * _Format,        _locale_t _Locale, ...);
+
+  int __cdecl scanf_s(        const char * _Format, ...);
+
+  int __cdecl _scanf_s_l(        const char * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "setvbuf" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void __cdecl setbuf(     FILE * _File,              char * _Buffer);
+  int __cdecl _setmaxstdio(     int _Max);
+  unsigned int __cdecl _set_output_format(     unsigned int _Format);
+  unsigned int __cdecl _get_output_format(void);
+  int __cdecl setvbuf(     FILE * _File,          char * _Buf,      int _Mode,      size_t _Size);
+  int __cdecl _snprintf_s(       char * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const char * _Format, ...);
+extern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template <size_t _Size> inline int __cdecl _snprintf_s(     char (&_Dest)[_Size],      size_t _Size,         const char * _Format, ...) { va_list _ArgList; ( _ArgList = (va_list)( &reinterpret_cast<const char &>(_Format) ) + ( (sizeof(_Format) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) ); return _vsnprintf_s(_Dest, _Size, _Size, _Format, _ArgList); } __pragma(warning(pop)); }
+  int __cdecl sprintf_s(       char * _DstBuf,      size_t _DstSize,         const char * _Format, ...);
+extern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template <size_t _Size> inline int __cdecl sprintf_s(     char (&_Dest)[_Size],         const char * _Format, ...) { va_list _ArgList; ( _ArgList = (va_list)( &reinterpret_cast<const char &>(_Format) ) + ( (sizeof(_Format) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) ); return vsprintf_s(_Dest, _Size, _Format, _ArgList); } __pragma(warning(pop)); }
+  int __cdecl _scprintf(        const char * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "sscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl sscanf(       const char * _Src,         const char * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_sscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _sscanf_l(       const char * _Src,         const char * _Format,        _locale_t _Locale, ...);
+
+  int __cdecl sscanf_s(       const char * _Src,         const char * _Format, ...);
+
+  int __cdecl _sscanf_s_l(       const char * _Src,         const char * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _snscanf(         const char * _Src,      size_t _MaxCount,         const char * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _snscanf_l(         const char * _Src,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _snscanf_s(         const char * _Src,      size_t _MaxCount,         const char * _Format, ...);
+  int __cdecl _snscanf_s_l(         const char * _Src,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpfile_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   FILE * __cdecl tmpfile(void);
+
+  errno_t __cdecl tmpfile_s(                FILE ** _File);
+  errno_t __cdecl tmpnam_s(       char * _Buf,      rsize_t _Size);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl tmpnam_s(       char (&_Buf)[_Size]) { return tmpnam_s(_Buf, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "tmpnam_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl tmpnam( char *_Buffer);
+  int __cdecl ungetc(     int _Ch,      FILE * _File);
+  int __cdecl vfprintf(     FILE * _File,         const char * _Format, va_list _ArgList);
+  int __cdecl vfprintf_s(     FILE * _File,         const char * _Format, va_list _ArgList);
+  int __cdecl vprintf(        const char * _Format, va_list _ArgList);
+  int __cdecl vprintf_s(        const char * _Format, va_list _ArgList);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "vsnprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl vsnprintf(     char * _DstBuf,      size_t _MaxCount,         const char * _Format, va_list _ArgList);
+  int __cdecl vsnprintf_s(       char * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const char * _Format, va_list _ArgList);
+  int __cdecl _vsnprintf_s(       char * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const char * _Format, va_list _ArgList);
+extern "C++" { template <size_t _Size> inline int __cdecl _vsnprintf_s(     char (&_Dest)[_Size],      size_t _Size,         const char * _Format, va_list _Args) { return _vsnprintf_s(_Dest, _Size, _Size, _Format, _Args); } }
+#pragma warning(push)
+#pragma warning(disable:4793)
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl _snprintf(     char *_Dest,      size_t _Count,         const char * _Format, ...); __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl _vsnprintf(     char *_Dest,      size_t _Count,         const char * _Format, va_list _Args);
+#pragma warning(pop)
+ int __cdecl vsprintf_s(       char * _DstBuf,      size_t _Size,         const char * _Format, va_list _ArgList);
+extern "C++" { template <size_t _Size> inline int __cdecl vsprintf_s(     char (&_Dest)[_Size],         const char * _Format, va_list _Args) { return vsprintf_s(_Dest, _Size, _Format, _Args); } }
+#pragma warning(push)
+#pragma warning(disable:4793)
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "sprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl sprintf( char *_Dest,  const char * _Format, ...); __declspec(deprecated("This function or variable may be unsafe. Consider using " "vsprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl vsprintf( char *_Dest,  const char * _Format, va_list _Args);
+#pragma warning(pop)
+  int __cdecl _vscprintf(        const char * _Format, va_list _ArgList);
+  int __cdecl _snprintf_c(     char * _DstBuf,      size_t _MaxCount,         const char * _Format, ...);
+  int __cdecl _vsnprintf_c(     char *_DstBuf,      size_t _MaxCount,         const char * _Format, va_list _ArgList);
+
+  int __cdecl _fprintf_p(     FILE * _File,         const char * _Format, ...);
+  int __cdecl _printf_p(        const char * _Format, ...);
+  int __cdecl _sprintf_p(       char * _Dst,      size_t _MaxCount,         const char * _Format, ...);
+  int __cdecl _vfprintf_p(     FILE * _File,         const char * _Format, va_list _ArgList);
+  int __cdecl _vprintf_p(        const char * _Format, va_list _ArgList);
+  int __cdecl _vsprintf_p(       char * _Dst,      size_t _MaxCount,         const char * _Format, va_list _ArgList);
+  int __cdecl _scprintf_p(        const char * _Format, ...);
+  int __cdecl _vscprintf_p(        const char * _Format, va_list _ArgList);
+ int __cdecl _set_printf_count_output(     int _Value);
+ int __cdecl _get_printf_count_output();
+
+  int __cdecl _printf_l(        const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _printf_p_l(        const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _printf_s_l(        const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vprintf_l(        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vprintf_p_l(        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vprintf_s_l(        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+
+  int __cdecl _fprintf_l(     FILE * _File,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _fprintf_p_l(     FILE * _File,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _fprintf_s_l(     FILE * _File,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vfprintf_l(     FILE * _File,        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vfprintf_p_l(     FILE * _File,        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vfprintf_s_l(     FILE * _File,        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_sprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _sprintf_l(     char * _DstBuf,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _sprintf_p_l(       char * _DstBuf,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _sprintf_s_l(       char * _DstBuf,      size_t _DstSize,         const char * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _vsprintf_l(     char * _DstBuf,        const char * _Format,        _locale_t, va_list _ArgList);
+  int __cdecl _vsprintf_p_l(       char * _DstBuf,      size_t _MaxCount,         const char* _Format,        _locale_t _Locale,  va_list _ArgList);
+  int __cdecl _vsprintf_s_l(       char * _DstBuf,      size_t _DstSize,         const char * _Format,        _locale_t _Locale, va_list _ArgList);
+
+  int __cdecl _scprintf_l(        const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _scprintf_p_l(        const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vscprintf_l(        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vscprintf_p_l(        const char * _Format,        _locale_t _Locale, va_list _ArgList);
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _snprintf_l(     char * _DstBuf,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _snprintf_c_l(     char * _DstBuf,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, ...);
+  int __cdecl _snprintf_s_l(       char * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _vsnprintf_l(     char * _DstBuf,      size_t _MaxCount,         const char * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vsnprintf_c_l(     char * _DstBuf,      size_t _MaxCount, const char *,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vsnprintf_s_l(       char * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const char* _Format,       _locale_t _Locale, va_list _ArgList);
+
+
+
+
+
+
+
+
+
+
+
+
+  FILE * __cdecl _wfsopen(       const wchar_t * _Filename,        const wchar_t * _Mode,      int _ShFlag);
+
+
+  wint_t __cdecl fgetwc(     FILE * _File);
+  wint_t __cdecl _fgetwchar(void);
+  wint_t __cdecl fputwc(       wchar_t _Ch,      FILE * _File);
+  wint_t __cdecl _fputwchar(       wchar_t _Ch);
+  wint_t __cdecl getwc(     FILE * _File);
+  wint_t __cdecl getwchar(void);
+  wint_t __cdecl putwc(       wchar_t _Ch,      FILE * _File);
+  wint_t __cdecl putwchar(       wchar_t _Ch);
+  wint_t __cdecl ungetwc(     wint_t _Ch,      FILE * _File);
+
+  wchar_t * __cdecl fgetws(       wchar_t * _Dst,      int _SizeInWords,      FILE * _File);
+  int __cdecl fputws(       const wchar_t * _Str,      FILE * _File);
+  wchar_t * __cdecl _getws_s(       wchar_t * _Str,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline wchar_t * __cdecl _getws_s(     wchar_t (&_String)[_Size]) { return _getws_s(_String, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_getws_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _getws( wchar_t *_String);
+  int __cdecl _putws(       const wchar_t * _Str);
+
+  int __cdecl fwprintf(     FILE * _File,         const wchar_t * _Format, ...);
+  int __cdecl fwprintf_s(     FILE * _File,         const wchar_t * _Format, ...);
+  int __cdecl wprintf(        const wchar_t * _Format, ...);
+  int __cdecl wprintf_s(        const wchar_t * _Format, ...);
+  int __cdecl _scwprintf(        const wchar_t * _Format, ...);
+  int __cdecl vfwprintf(     FILE * _File,         const wchar_t * _Format, va_list _ArgList);
+  int __cdecl vfwprintf_s(     FILE * _File,         const wchar_t * _Format, va_list _ArgList);
+  int __cdecl vwprintf(        const wchar_t * _Format, va_list _ArgList);
+  int __cdecl vwprintf_s(        const wchar_t * _Format, va_list _ArgList);
+
+ int __cdecl swprintf_s(       wchar_t * _Dst,      size_t _SizeInWords,         const wchar_t * _Format, ...);
+extern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template <size_t _Size> inline int __cdecl swprintf_s(     wchar_t (&_Dest)[_Size],         const wchar_t * _Format, ...) { va_list _ArgList; ( _ArgList = (va_list)( &reinterpret_cast<const char &>(_Format) ) + ( (sizeof(_Format) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) ); return vswprintf_s(_Dest, _Size, _Format, _ArgList); } __pragma(warning(pop)); }
+ int __cdecl vswprintf_s(       wchar_t * _Dst,      size_t _SizeInWords,         const wchar_t * _Format, va_list _ArgList);
+extern "C++" { template <size_t _Size> inline int __cdecl vswprintf_s(     wchar_t (&_Dest)[_Size],         const wchar_t * _Format, va_list _Args) { return vswprintf_s(_Dest, _Size, _Format, _Args); } }
+
+  int __cdecl _swprintf_c(       wchar_t * _DstBuf,      size_t _SizeInWords,         const wchar_t * _Format, ...);
+  int __cdecl _vswprintf_c(       wchar_t * _DstBuf,      size_t _SizeInWords,         const wchar_t * _Format, va_list _ArgList);
+
+  int __cdecl _snwprintf_s(       wchar_t * _DstBuf,      size_t _DstSizeInWords,      size_t _MaxCount,         const wchar_t * _Format, ...);
+extern "C++" { __pragma(warning(push)); __pragma(warning(disable: 4793)); template <size_t _Size> inline int __cdecl _snwprintf_s(     wchar_t (&_Dest)[_Size],      size_t _Count,         const wchar_t * _Format, ...) { va_list _ArgList; ( _ArgList = (va_list)( &reinterpret_cast<const char &>(_Format) ) + ( (sizeof(_Format) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) ); return _vsnwprintf_s(_Dest, _Size, _Count, _Format, _ArgList); } __pragma(warning(pop)); }
+  int __cdecl _vsnwprintf_s(       wchar_t * _DstBuf,      size_t _DstSizeInWords,      size_t _MaxCount,         const wchar_t * _Format, va_list _ArgList);
+extern "C++" { template <size_t _Size> inline int __cdecl _vsnwprintf_s(     wchar_t (&_Dest)[_Size],      size_t _Count,         const wchar_t * _Format, va_list _Args) { return _vsnwprintf_s(_Dest, _Size, _Count, _Format, _Args); } }
+#pragma warning(push)
+#pragma warning(disable:4793)
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl _snwprintf(     wchar_t *_Dest,      size_t _Count,         const wchar_t * _Format, ...); __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl _vsnwprintf(     wchar_t *_Dest,      size_t _Count,         const wchar_t * _Format, va_list _Args);
+#pragma warning(pop)
+
+  int __cdecl _fwprintf_p(     FILE * _File,         const wchar_t * _Format, ...);
+  int __cdecl _wprintf_p(        const wchar_t * _Format, ...);
+  int __cdecl _vfwprintf_p(     FILE * _File,         const wchar_t * _Format, va_list _ArgList);
+  int __cdecl _vwprintf_p(        const wchar_t * _Format, va_list _ArgList);
+  int __cdecl _swprintf_p(       wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format, ...);
+  int __cdecl _vswprintf_p(       wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format, va_list _ArgList);
+  int __cdecl _scwprintf_p(        const wchar_t * _Format, ...);
+  int __cdecl _vscwprintf_p(        const wchar_t * _Format, va_list _ArgList);
+
+  int __cdecl _wprintf_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _wprintf_p_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _wprintf_s_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vwprintf_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vwprintf_p_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vwprintf_s_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+
+  int __cdecl _fwprintf_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _fwprintf_p_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _fwprintf_s_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vfwprintf_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vfwprintf_p_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vfwprintf_s_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+
+  int __cdecl _swprintf_c_l(       wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _swprintf_p_l(       wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _swprintf_s_l(       wchar_t * _DstBuf,      size_t _DstSize,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vswprintf_c_l(       wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vswprintf_p_l(       wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vswprintf_s_l(       wchar_t * _DstBuf,      size_t _DstSize,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+
+  int __cdecl _scwprintf_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _scwprintf_p_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vscwprintf_p_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _snwprintf_l(     wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _snwprintf_s_l(       wchar_t * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_vsnwprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _vsnwprintf_l(     wchar_t * _DstBuf,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+  int __cdecl _vsnwprintf_s_l(       wchar_t * _DstBuf,      size_t _DstSize,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4141 4996 4793)
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_swprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS."))  int __cdecl _swprintf(     wchar_t *_Dest,         const wchar_t * _Format, ...); __declspec(deprecated("This function or variable may be unsafe. Consider using " "vswprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS."))  int __cdecl _vswprintf(     wchar_t *_Dest,         const wchar_t * _Format, va_list _Args);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "__swprintf_l_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS."))  int __cdecl __swprintf_l(     wchar_t *_Dest,         const wchar_t * _Format, _locale_t _Plocinfo, ...); __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vswprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS."))  int __cdecl __vswprintf_l(     wchar_t *_Dest,         const wchar_t * _Format, _locale_t _Plocinfo, va_list _Args
);
+#pragma warning(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning( push )
+#pragma warning( disable : 4793 4412 )
+static __inline int swprintf(wchar_t * _String, size_t _Count, const wchar_t * _Format, ...)
+{
+    va_list _Arglist;
+    int _Ret;
+    ( _Arglist = (va_list)( &reinterpret_cast<const char &>(_Format) ) + ( (sizeof(_Format) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) );
+    _Ret = _vswprintf_c_l(_String, _Count, _Format, 0, _Arglist);
+    ( _Arglist = (va_list)0 );
+    return _Ret;
+}
+#pragma warning( pop )
+
+#pragma warning( push )
+#pragma warning( disable : 4412 )
+static __inline int __cdecl vswprintf(wchar_t * _String, size_t _Count, const wchar_t * _Format, va_list _Ap)
+{
+    return _vswprintf_c_l(_String, _Count, _Format, 0, _Ap);
+}
+#pragma warning( pop )
+
+
+
+
+#pragma warning( push )
+#pragma warning( disable : 4793 4412 )
+static __inline int _swprintf_l(wchar_t * _String, size_t _Count, const wchar_t * _Format, _locale_t _Plocinfo, ...)
+{
+    va_list _Arglist;
+    int _Ret;
+    ( _Arglist = (va_list)( &reinterpret_cast<const char &>(_Plocinfo) ) + ( (sizeof(_Plocinfo) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) );
+    _Ret = _vswprintf_c_l(_String, _Count, _Format, _Plocinfo, _Arglist);
+    ( _Arglist = (va_list)0 );
+    return _Ret;
+}
+#pragma warning( pop )
+
+#pragma warning( push )
+#pragma warning( disable : 4412 )
+static __inline int __cdecl _vswprintf_l(wchar_t * _String, size_t _Count, const wchar_t * _Format, _locale_t _Plocinfo, va_list _Ap)
+{
+    return _vswprintf_c_l(_String, _Count, _Format, _Plocinfo, _Ap);
+}
+#pragma warning( pop )
+
+
+#pragma warning( push )
+#pragma warning( disable : 4996 )
+
+#pragma warning( push )
+#pragma warning( disable : 4793 4141 )
+extern "C++" __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "swprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __inline int swprintf(     wchar_t * _String,         const wchar_t * _Format, ...)
+{
+    va_list _Arglist;
+    ( _Arglist = (va_list)( &reinterpret_cast<const char &>(_Format) ) + ( (sizeof(_Format) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) );
+    int _Ret = _vswprintf(_String, _Format, _Arglist);
+    ( _Arglist = (va_list)0 );
+    return _Ret;
+}
+#pragma warning( pop )
+
+#pragma warning( push )
+#pragma warning( disable : 4141 )
+extern "C++" __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "vswprintf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __inline int __cdecl vswprintf(     wchar_t * _String,         const wchar_t * _Format, va_list _Ap)
+{
+    return _vswprintf(_String, _Format, _Ap);
+}
+#pragma warning( pop )
+
+#pragma warning( push )
+#pragma warning( disable : 4793 4141 )
+extern "C++" __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_swprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __inline int _swprintf_l(     wchar_t * _String,         const wchar_t * _Format, _locale_t _Plocinfo, ...)
+{
+    va_list _Arglist;
+    ( _Arglist = (va_list)( &reinterpret_cast<const char &>(_Plocinfo) ) + ( (sizeof(_Plocinfo) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) );
+    int _Ret = __vswprintf_l(_String, _Format, _Plocinfo, _Arglist);
+    ( _Arglist = (va_list)0 );
+    return _Ret;
+}
+#pragma warning( pop )
+
+#pragma warning( push )
+#pragma warning( disable : 4141 )
+extern "C++" __declspec(deprecated("swprintf has been changed to conform with the ISO C standard, adding an extra character count parameter. To use traditional Microsoft swprintf, set _CRT_NON_CONFORMING_SWPRINTFS.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_vswprintf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __inline int __cdecl _vswprintf_l(     wchar_t * _String,         const wchar_t * _Format, _locale_t _Plocinfo, va_list _Ap)
+{
+    return __vswprintf_l(_String, _Format, _Plocinfo, _Ap);
+}
+#pragma warning( pop )
+
+#pragma warning( pop )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  wchar_t * __cdecl _wtempnam(         const wchar_t * _Directory,          const wchar_t * _FilePrefix);
+
+
+
+
+
+  int __cdecl _vscwprintf(        const wchar_t * _Format, va_list _ArgList);
+  int __cdecl _vscwprintf_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "fwscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl fwscanf(     FILE * _File,         const wchar_t * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_fwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _fwscanf_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, ...);
+
+  int __cdecl fwscanf_s(     FILE * _File,         const wchar_t * _Format, ...);
+
+  int __cdecl _fwscanf_s_l(     FILE * _File,         const wchar_t * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "swscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl swscanf(       const wchar_t * _Src,         const wchar_t * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_swscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _swscanf_l(       const wchar_t * _Src,         const wchar_t * _Format,        _locale_t _Locale, ...);
+
+  int __cdecl swscanf_s(       const wchar_t *_Src,         const wchar_t * _Format, ...);
+
+  int __cdecl _swscanf_s_l(       const wchar_t * _Src,         const wchar_t * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _snwscanf(         const wchar_t * _Src,      size_t _MaxCount,         const wchar_t * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_snwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _snwscanf_l(         const wchar_t * _Src,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _snwscanf_s(         const wchar_t * _Src,      size_t _MaxCount,         const wchar_t * _Format, ...);
+  int __cdecl _snwscanf_s_l(         const wchar_t * _Src,      size_t _MaxCount,         const wchar_t * _Format,        _locale_t _Locale, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl wscanf(        const wchar_t * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _wscanf_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+
+  int __cdecl wscanf_s(        const wchar_t * _Format, ...);
+
+  int __cdecl _wscanf_s_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+
+  FILE * __cdecl _wfdopen(     int _FileHandle ,        const wchar_t * _Mode);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wfopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   FILE * __cdecl _wfopen(       const wchar_t * _Filename,        const wchar_t * _Mode);
+  errno_t __cdecl _wfopen_s(                  FILE ** _File,        const wchar_t * _Filename,        const wchar_t * _Mode);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wfreopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   FILE * __cdecl _wfreopen(       const wchar_t * _Filename,        const wchar_t * _Mode,      FILE * _OldFile);
+  errno_t __cdecl _wfreopen_s(                  FILE ** _File,        const wchar_t * _Filename,        const wchar_t * _Mode,      FILE * _OldFile);
+
+
+
+ void __cdecl _wperror(         const wchar_t * _ErrMsg);
+
+  FILE * __cdecl _wpopen(       const wchar_t *_Command,        const wchar_t * _Mode);
+  int __cdecl _wremove(       const wchar_t * _Filename);
+  errno_t __cdecl _wtmpnam_s(       wchar_t * _DstBuf,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wtmpnam_s(       wchar_t (&_Buffer)[_Size]) { return _wtmpnam_s(_Buffer, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wtmpnam_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wtmpnam( wchar_t *_Buffer);
+
+  wint_t __cdecl _fgetwc_nolock(     FILE * _File);
+  wint_t __cdecl _fputwc_nolock(       wchar_t _Ch,      FILE * _File);
+  wint_t __cdecl _ungetwc_nolock(     wint_t _Ch,      FILE * _File);
+
+
+
+
+
+
+
+inline wint_t __cdecl getwchar()
+        {return (fgetwc((&__iob_func()[0]))); }   
+inline wint_t __cdecl putwchar(wchar_t _C)
+        {return (fputwc(_C, (&__iob_func()[1]))); }       
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void __cdecl _lock_file(     FILE * _File);
+ void __cdecl _unlock_file(     FILE * _File);
+
+
+
+
+
+
+  int __cdecl _fclose_nolock(     FILE * _File);
+  int __cdecl _fflush_nolock(       FILE * _File);
+  size_t __cdecl _fread_nolock(     void * _DstBuf,      size_t _ElementSize,      size_t _Count,      FILE * _File);
+  size_t __cdecl _fread_nolock_s(     void * _DstBuf,      size_t _DstSize,      size_t _ElementSize,      size_t _Count,      FILE * _File);
+  int __cdecl _fseek_nolock(     FILE * _File,      long _Offset,      int _Origin);
+  long __cdecl _ftell_nolock(     FILE * _File);
+  int __cdecl _fseeki64_nolock(     FILE * _File,      __int64 _Offset,      int _Origin);
+  __int64 __cdecl _ftelli64_nolock(     FILE * _File);
+  size_t __cdecl _fwrite_nolock(       const void * _DstBuf,      size_t _Size,      size_t _Count,      FILE * _File);
+  int __cdecl _ungetc_nolock(     int _Ch,      FILE * _File);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_tempnam" ". See online help for details."))  char * __cdecl tempnam(         const char * _Directory,          const char * _FilePrefix);
+
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fcloseall" ". See online help for details."))   int __cdecl fcloseall(void);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fdopen" ". See online help for details."))   FILE * __cdecl fdopen(     int _FileHandle,         const char * _Format);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fgetchar" ". See online help for details."))   int __cdecl fgetchar(void);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fileno" ". See online help for details."))   int __cdecl fileno(     FILE * _File);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_flushall" ". See online help for details."))   int __cdecl flushall(void);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fputchar" ". See online help for details."))   int __cdecl fputchar(     int _Ch);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_getw" ". See online help for details."))   int __cdecl getw(     FILE * _File);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_putw" ". See online help for details."))   int __cdecl putw(     int _Ch,      FILE * _File);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_rmtmp" ". See online help for details."))   int __cdecl rmtmp(void);
+
+
+
+
+}
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+ 
+
+ 
+ 
+ 
+
+
+ 
+namespace std {
+using ::size_t; using ::fpos_t; using ::FILE;
+using ::clearerr; using ::fclose; using ::feof;
+using ::ferror; using ::fflush; using ::fgetc;
+using ::fgetpos; using ::fgets; using ::fopen;
+using ::fprintf; using ::fputc; using ::fputs;
+using ::fread; using ::freopen; using ::fscanf;
+using ::fseek; using ::fsetpos; using ::ftell;
+using ::fwrite; using ::getc; using ::getchar;
+using ::gets; using ::perror;
+using ::putc; using ::putchar;
+using ::printf; using ::puts; using ::remove;
+using ::rename; using ::rewind; using ::scanf;
+using ::setbuf; using ::setvbuf; using ::sprintf;
+using ::sscanf; using ::tmpfile; using ::tmpnam;
+using ::ungetc; using ::vfprintf; using ::vprintf;
+using ::vsprintf;
+}
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void *  __cdecl _memccpy(        void * _Dst,      const void * _Src,      int _Val,      size_t _MaxCount);
+  const void *  __cdecl memchr(          const void * _Buf ,      int _Val,      size_t _MaxCount);
+  int     __cdecl _memicmp(         const void * _Buf1,          const void * _Buf2,      size_t _Size);
+  int     __cdecl _memicmp_l(         const void * _Buf1,          const void * _Buf2,      size_t _Size,        _locale_t _Locale);
+         int     __cdecl memcmp(         const void * _Buf1,          const void * _Buf2,      size_t _Size);
+         void *  __cdecl memcpy(         void * _Dst,          const void * _Src,      size_t _Size);
+
+ errno_t  __cdecl memcpy_s(         void * _Dst,      rsize_t _DstSize,          const void * _Src,      rsize_t _MaxCount);
+
+        void *  __cdecl memset(         void * _Dst,      int _Val,      size_t _Size);
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_memccpy" ". See online help for details."))  void * __cdecl memccpy(       void * _Dst,          const void * _Src,      int _Val,      size_t _Size);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_memicmp" ". See online help for details."))   int __cdecl memicmp(         const void * _Buf1,          const void * _Buf2,      size_t _Size);
+
+
+
+
+        __declspec(deprecated("This function or variable may be unsafe. Consider using " "_strset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) char *  __cdecl _strset(         char * _Str,      int _Val);
+  errno_t __cdecl _strset_s(           char * _Dst,      size_t _DstSize,      int _Value);
+
+  errno_t __cdecl strcpy_s(       char * _Dst,      rsize_t _DstSize,        const char * _Src);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl strcpy_s(       char (&_Dest)[_Size],        const char * _Source) { return strcpy_s(_Dest, _Size, _Source); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl strcpy( char *_Dest,  const char * _Source);
+
+  errno_t __cdecl strcat_s(           char * _Dst,      rsize_t _DstSize,        const char * _Src);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl strcat_s(           char (&_Dest)[_Size],        const char * _Source) { return strcat_s(_Dest, _Size, _Source); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "strcat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl strcat( char *_Dest,  const char * _Source);
+         int     __cdecl strcmp(       const char * _Str1,        const char * _Str2);
+         size_t  __cdecl strlen(        const char * _Str);
+  size_t  __cdecl strnlen(          const char * _Str,      size_t _MaxCount);
+
+static __inline  size_t  __cdecl strnlen_s(          const char * _Str,      size_t _MaxCount)
+{
+    return strnlen(_Str, _MaxCount);
+}
+
+
+  errno_t __cdecl memmove_s(         void * _Dst,      rsize_t _DstSize,          const void * _Src,      rsize_t _MaxCount);
+
+
+
+
+
+  void *  __cdecl memmove(         void * _Dst,          const void * _Src,      size_t _Size);
+
+
+
+
+
+
+
+  char *  __cdecl _strdup(         const char * _Src);
+
+
+
+
+
+  const char *  __cdecl strchr(       const char * _Str,      int _Val);
+  int     __cdecl _stricmp(        const char * _Str1,         const char * _Str2);
+  int     __cdecl _strcmpi(        const char * _Str1,         const char * _Str2);
+  int     __cdecl _stricmp_l(        const char * _Str1,         const char * _Str2,        _locale_t _Locale);
+  int     __cdecl strcoll(        const char * _Str1,         const  char * _Str2);
+  int     __cdecl _strcoll_l(        const char * _Str1,         const char * _Str2,        _locale_t _Locale);
+  int     __cdecl _stricoll(        const char * _Str1,         const char * _Str2);
+  int     __cdecl _stricoll_l(        const char * _Str1,         const char * _Str2,        _locale_t _Locale);
+  int     __cdecl _strncoll  (       const char * _Str1,        const char * _Str2,      size_t _MaxCount);
+  int     __cdecl _strncoll_l(       const char * _Str1,        const char * _Str2,      size_t _MaxCount,        _locale_t _Locale);
+  int     __cdecl _strnicoll (       const char * _Str1,        const char * _Str2,      size_t _MaxCount);
+  int     __cdecl _strnicoll_l(       const char * _Str1,        const char * _Str2,      size_t _MaxCount,        _locale_t _Locale);
+  size_t  __cdecl strcspn(        const char * _Str,         const char * _Control);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   char *  __cdecl _strerror(         const char * _ErrMsg);
+  errno_t __cdecl _strerror_s(       char * _Buf,      size_t _SizeInBytes,          const char * _ErrMsg);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _strerror_s(     char (&_Buffer)[_Size],          const char * _ErrorMessage) { return _strerror_s(_Buffer, _Size, _ErrorMessage); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   char *  __cdecl strerror(     int);
+
+  errno_t __cdecl strerror_s(       char * _Buf,      size_t _SizeInBytes,      int _ErrNum);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl strerror_s(     char (&_Buffer)[_Size],      int _ErrorMessage) { return strerror_s(_Buffer, _Size, _ErrorMessage); } }
+  errno_t __cdecl _strlwr_s(           char * _Str,      size_t _Size);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _strlwr_s(           char (&_String)[_Size]) { return _strlwr_s(_String, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _strlwr( char *_String);
+  errno_t __cdecl _strlwr_s_l(           char * _Str,      size_t _Size,        _locale_t _Locale);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _strlwr_s_l(           char (&_String)[_Size],        _locale_t _Locale) { return _strlwr_s_l(_String, _Size, _Locale); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strlwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _strlwr_l(         char *_String,        _locale_t _Locale);
+
+  errno_t __cdecl strncat_s(           char * _Dst,      rsize_t _DstSize,        const char * _Src,      rsize_t _MaxCount);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl strncat_s(           char (&_Dest)[_Size],        const char * _Source,      size_t _Count) { return strncat_s(_Dest, _Size, _Source, _Count); } }
+#pragma warning(push)
+#pragma warning(disable:4609 6059)
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl strncat(           char *_Dest,        const char * _Source,      size_t _Count);
+#pragma warning(pop)
+
+
+
+  int     __cdecl strncmp(       const char * _Str1,        const char * _Str2,      size_t _MaxCount);
+
+  int     __cdecl _strnicmp(       const char * _Str1,        const char * _Str2,      size_t _MaxCount);
+  int     __cdecl _strnicmp_l(       const char * _Str1,        const char * _Str2,      size_t _MaxCount,        _locale_t _Locale);
+
+  errno_t __cdecl strncpy_s(       char * _Dst,      rsize_t _DstSize,          const char * _Src,      rsize_t _MaxCount);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl strncpy_s(     char (&_Dest)[_Size],        const char * _Source,      size_t _Count) { return strncpy_s(_Dest, _Size, _Source, _Count); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "strncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl strncpy(     char *_Dest,        const char * _Source,      size_t _Count);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char *  __cdecl _strnset(         char * _Str,      int _Val,      size_t _MaxCount);
+  errno_t __cdecl _strnset_s(           char * _Str,      size_t _Size,      int _Val,      size_t _MaxCount);
+  const char *  __cdecl strpbrk(       const char * _Str,        const char * _Control);
+  const char *  __cdecl strrchr(       const char * _Str,      int _Ch);
+ char *  __cdecl _strrev(         char * _Str);
+  size_t  __cdecl strspn(       const char * _Str,        const char * _Control);
+  const char *  __cdecl strstr(       const char * _Str,        const char * _SubStr);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "strtok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   char *  __cdecl strtok(           char * _Str,        const char * _Delim);
+
+  char *  __cdecl strtok_s(           char * _Str,        const char * _Delim,                        char ** _Context);
+
+  errno_t __cdecl _strupr_s(           char * _Str,      size_t _Size);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _strupr_s(           char (&_String)[_Size]) { return _strupr_s(_String, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _strupr( char *_String);
+  errno_t __cdecl _strupr_s_l(           char * _Str,      size_t _Size, _locale_t _Locale);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _strupr_s_l(           char (&_String)[_Size], _locale_t _Locale) { return _strupr_s_l(_String, _Size, _Locale); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_strupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _strupr_l(         char *_String,        _locale_t _Locale);
+  size_t  __cdecl strxfrm (       char * _Dst,        const char * _Src,      size_t _MaxCount);
+  size_t  __cdecl _strxfrm_l(       char * _Dst,        const char * _Src,      size_t _MaxCount,        _locale_t _Locale);
+
+
+extern "C++" {
+
+
+inline  char * __cdecl strchr(       char * _Str,      int _Ch)
+	{ return (char*)strchr((const char*)_Str, _Ch); }
+inline  char * __cdecl strpbrk(       char * _Str,        const char * _Control)
+	{ return (char*)strpbrk((const char*)_Str, _Control); }
+inline  char * __cdecl strrchr(       char * _Str,      int _Ch)
+	{ return (char*)strrchr((const char*)_Str, _Ch); }
+inline  char * __cdecl strstr(       char * _Str,        const char * _SubStr)
+	{ return (char*)strstr((const char*)_Str, _SubStr); }
+
+
+
+inline  void * __cdecl memchr(         void * _Pv,      int _C,      size_t _N)
+	{ return (void*)memchr((const void*)_Pv, _C, _N); }
+
+}
+
+
+
+
+
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strdup" ". See online help for details."))   char * __cdecl strdup(         const char * _Src);
+
+
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strcmpi" ". See online help for details."))   int __cdecl strcmpi(       const char * _Str1,        const char * _Str2);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_stricmp" ". See online help for details."))   int __cdecl stricmp(       const char * _Str1,        const char * _Str2);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strlwr" ". See online help for details."))  char * __cdecl strlwr(         char * _Str);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strnicmp" ". See online help for details."))   int __cdecl strnicmp(       const char * _Str1,        const char * _Str,      size_t _MaxCount);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strnset" ". See online help for details."))  char * __cdecl strnset(         char * _Str,      int _Val,      size_t _MaxCount);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strrev" ". See online help for details."))  char * __cdecl strrev(         char * _Str);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strset" ". See online help for details."))         char * __cdecl strset(         char * _Str,      int _Val);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_strupr" ". See online help for details."))  char * __cdecl strupr(         char * _Str);
+
+
+
+
+
+
+
+
+
+
+
+
+
+  wchar_t * __cdecl _wcsdup(       const wchar_t * _Str);
+
+
+
+
+
+
+  errno_t __cdecl wcscat_s(           wchar_t * _Dst,      rsize_t _DstSize, const wchar_t * _Src);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcscat_s(           wchar_t (&_Dest)[_Size],        const wchar_t * _Source) { return wcscat_s(_Dest, _Size, _Source); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl wcscat( wchar_t *_Dest,  const wchar_t * _Source);
+  const wchar_t * __cdecl wcschr(       const wchar_t * _Str, wchar_t _Ch);
+  int __cdecl wcscmp(       const wchar_t * _Str1,        const wchar_t * _Str2);
+
+  errno_t __cdecl wcscpy_s(       wchar_t * _Dst,      rsize_t _DstSize,        const wchar_t * _Src);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcscpy_s(     wchar_t (&_Dest)[_Size],        const wchar_t * _Source) { return wcscpy_s(_Dest, _Size, _Source); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcscpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl wcscpy( wchar_t *_Dest,  const wchar_t * _Source);
+  size_t __cdecl wcscspn(       const wchar_t * _Str,        const wchar_t * _Control);
+  size_t __cdecl wcslen(       const wchar_t * _Str);
+  size_t __cdecl wcsnlen(         const wchar_t * _Src,      size_t _MaxCount);
+
+static __inline  size_t __cdecl wcsnlen_s(         const wchar_t * _Src,      size_t _MaxCount)
+{
+    return wcsnlen(_Src, _MaxCount);
+}
+
+
+  errno_t __cdecl wcsncat_s(           wchar_t * _Dst,      rsize_t _DstSize,        const wchar_t * _Src,      rsize_t _MaxCount);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcsncat_s(           wchar_t (&_Dest)[_Size],        const wchar_t * _Source,      size_t _Count) { return wcsncat_s(_Dest, _Size, _Source, _Count); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncat_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl wcsncat(     wchar_t *_Dest,        const wchar_t * _Source,      size_t _Count);
+  int __cdecl wcsncmp(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount);
+
+  errno_t __cdecl wcsncpy_s(       wchar_t * _Dst,      rsize_t _DstSize,        const wchar_t * _Src,      rsize_t _MaxCount);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcsncpy_s(     wchar_t (&_Dest)[_Size],        const wchar_t * _Source,      size_t _Count) { return wcsncpy_s(_Dest, _Size, _Source, _Count); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsncpy_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl wcsncpy(     wchar_t *_Dest,        const wchar_t * _Source,      size_t _Count);
+  const wchar_t * __cdecl wcspbrk(       const wchar_t * _Str,        const wchar_t * _Control);
+  const wchar_t * __cdecl wcsrchr(       const wchar_t * _Str,      wchar_t _Ch);
+  size_t __cdecl wcsspn(       const wchar_t * _Str,        const wchar_t * _Control);
+  const wchar_t * __cdecl wcsstr(       const wchar_t * _Str,        const wchar_t * _SubStr);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstok_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   wchar_t * __cdecl wcstok(           wchar_t * _Str,        const wchar_t * _Delim);
+  wchar_t * __cdecl wcstok_s(           wchar_t * _Str,        const wchar_t * _Delim,                        wchar_t ** _Context);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   wchar_t * __cdecl _wcserror(     int _ErrNum);
+  errno_t __cdecl _wcserror_s(         wchar_t * _Buf,      size_t _SizeInWords,      int _ErrNum);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wcserror_s(     wchar_t (&_Buffer)[_Size],      int _Error) { return _wcserror_s(_Buffer, _Size, _Error); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "__wcserror_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   wchar_t * __cdecl __wcserror(         const wchar_t * _Str);
+  errno_t __cdecl __wcserror_s(         wchar_t * _Buffer,      size_t _SizeInWords,        const wchar_t * _ErrMsg);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl __wcserror_s(     wchar_t (&_Buffer)[_Size],        const wchar_t * _ErrorMessage) { return __wcserror_s(_Buffer, _Size, _ErrorMessage); } }
+
+  int __cdecl _wcsicmp(       const wchar_t * _Str1,        const wchar_t * _Str2);
+  int __cdecl _wcsicmp_l(       const wchar_t * _Str1,        const wchar_t * _Str2,        _locale_t _Locale);
+  int __cdecl _wcsnicmp(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount);
+  int __cdecl _wcsnicmp_l(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount,        _locale_t _Locale);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsnset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wcsnset(         wchar_t * _Str,        wchar_t _Val,      size_t _MaxCount);
+  errno_t __cdecl _wcsnset_s(           wchar_t * _Dst,      size_t _DstSizeInWords, wchar_t _Val,      size_t _MaxCount);
+ wchar_t * __cdecl _wcsrev(         wchar_t * _Str);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsset_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wcsset(         wchar_t * _Str, wchar_t _Val);
+  errno_t __cdecl _wcsset_s(           wchar_t * _Str,      size_t _SizeInWords, wchar_t _Val);
+
+  errno_t __cdecl _wcslwr_s(           wchar_t * _Str,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wcslwr_s(           wchar_t (&_String)[_Size]) { return _wcslwr_s(_String, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wcslwr( wchar_t *_String);
+  errno_t __cdecl _wcslwr_s_l(           wchar_t * _Str,      size_t _SizeInWords,        _locale_t _Locale);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wcslwr_s_l(           wchar_t (&_String)[_Size],        _locale_t _Locale) { return _wcslwr_s_l(_String, _Size, _Locale); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcslwr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wcslwr_l(         wchar_t *_String,        _locale_t _Locale);
+  errno_t __cdecl _wcsupr_s(           wchar_t * _Str,      size_t _Size);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wcsupr_s(           wchar_t (&_String)[_Size]) { return _wcsupr_s(_String, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wcsupr( wchar_t *_String);
+  errno_t __cdecl _wcsupr_s_l(           wchar_t * _Str,      size_t _Size,        _locale_t _Locale);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wcsupr_s_l(           wchar_t (&_String)[_Size],        _locale_t _Locale) { return _wcsupr_s_l(_String, _Size, _Locale); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcsupr_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wcsupr_l(         wchar_t *_String,        _locale_t _Locale);
+  size_t __cdecl wcsxfrm(       wchar_t * _Dst,        const wchar_t * _Src,      size_t _MaxCount);
+  size_t __cdecl _wcsxfrm_l(       wchar_t * _Dst,        const wchar_t *_Src,      size_t _MaxCount,        _locale_t _Locale);
+  int __cdecl wcscoll(       const wchar_t * _Str1,        const wchar_t * _Str2);
+  int __cdecl _wcscoll_l(       const wchar_t * _Str1,        const wchar_t * _Str2,        _locale_t _Locale);
+  int __cdecl _wcsicoll(       const wchar_t * _Str1,        const wchar_t * _Str2);
+  int __cdecl _wcsicoll_l(       const wchar_t * _Str1,        const wchar_t *_Str2,        _locale_t _Locale);
+  int __cdecl _wcsncoll(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount);
+  int __cdecl _wcsncoll_l(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount,        _locale_t _Locale);
+  int __cdecl _wcsnicoll(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount);
+  int __cdecl _wcsnicoll_l(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount,        _locale_t _Locale);
+
+
+
+
+extern "C++" {
+inline  wchar_t * __cdecl wcschr(       wchar_t *_Str, wchar_t _Ch)
+        {return ((wchar_t *)wcschr((const wchar_t *)_Str, _Ch)); }
+inline  wchar_t * __cdecl wcspbrk(       wchar_t *_Str,        const wchar_t *_Control)
+        {return ((wchar_t *)wcspbrk((const wchar_t *)_Str, _Control)); }
+inline  wchar_t * __cdecl wcsrchr(       wchar_t *_Str,      wchar_t _Ch)
+        {return ((wchar_t *)wcsrchr((const wchar_t *)_Str, _Ch)); }
+inline  wchar_t * __cdecl wcsstr(       wchar_t *_Str,        const wchar_t *_SubStr)
+        {return ((wchar_t *)wcsstr((const wchar_t *)_Str, _SubStr)); }
+}
+
+
+
+
+
+
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsdup" ". See online help for details."))   wchar_t * __cdecl wcsdup(       const wchar_t * _Str);
+
+
+
+
+
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsicmp" ". See online help for details."))   int __cdecl wcsicmp(       const wchar_t * _Str1,        const wchar_t * _Str2);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsnicmp" ". See online help for details."))   int __cdecl wcsnicmp(       const wchar_t * _Str1,        const wchar_t * _Str2,      size_t _MaxCount);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsnset" ". See online help for details."))  wchar_t * __cdecl wcsnset(         wchar_t * _Str,        wchar_t _Val,      size_t _MaxCount);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsrev" ". See online help for details."))  wchar_t * __cdecl wcsrev(         wchar_t * _Str);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsset" ". See online help for details."))  wchar_t * __cdecl wcsset(         wchar_t * _Str, wchar_t _Val);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcslwr" ". See online help for details."))  wchar_t * __cdecl wcslwr(         wchar_t * _Str);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsupr" ". See online help for details."))  wchar_t * __cdecl wcsupr(         wchar_t * _Str);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_wcsicoll" ". See online help for details."))   int __cdecl wcsicoll(       const wchar_t * _Str1,        const wchar_t * _Str2);
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+ 
+  
+namespace std {
+using ::size_t; using ::memchr; using ::memcmp;
+using ::memcpy; using ::memmove; using ::memset;
+using ::strcat; using ::strchr; using ::strcmp;
+using ::strcoll; using ::strcpy; using ::strcspn;
+using ::strerror; using ::strlen; using ::strncat;
+using ::strncmp; using ::strncpy; using ::strpbrk;
+using ::strrchr; using ::strspn; using ::strstr;
+using ::strtok; using ::strxfrm;
+}
+  
+ 
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef unsigned long _fsize_t; 
+
+
+
+
+
+struct _wfinddata32_t {
+        unsigned    attrib;
+        __time32_t  time_create;    
+        __time32_t  time_access;    
+        __time32_t  time_write;
+        _fsize_t    size;
+        wchar_t     name[260];
+};
+
+
+
+struct _wfinddata32i64_t {
+        unsigned    attrib;
+        __time32_t  time_create;    
+        __time32_t  time_access;    
+        __time32_t  time_write;
+        __int64     size;
+        wchar_t     name[260];
+};
+
+struct _wfinddata64i32_t {
+        unsigned    attrib;
+        __time64_t  time_create;    
+        __time64_t  time_access;    
+        __time64_t  time_write;
+        _fsize_t    size;
+        wchar_t     name[260];
+};
+
+struct _wfinddata64_t {
+        unsigned    attrib;
+        __time64_t  time_create;    
+        __time64_t  time_access;    
+        __time64_t  time_write;
+        __int64     size;
+        wchar_t     name[260];
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ const unsigned short * __cdecl __pctype_func(void);
+
+ extern const unsigned short *_pctype;
+
+
+
+
+
+
+
+
+
+
+ extern const unsigned short _wctype[];
+
+
+ const wctype_t * __cdecl __pwctype_func(void);
+
+ extern const wctype_t *_pwctype;
+
+
+
+
+
+
+
+
+
+
+
+
+                                
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  int __cdecl iswalpha(     wint_t _C);
+  int __cdecl _iswalpha_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswupper(     wint_t _C);
+  int __cdecl _iswupper_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswlower(     wint_t _C);
+  int __cdecl _iswlower_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswdigit(     wint_t _C);
+  int __cdecl _iswdigit_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswxdigit(     wint_t _C);
+  int __cdecl _iswxdigit_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswspace(     wint_t _C);
+  int __cdecl _iswspace_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswpunct(     wint_t _C);
+  int __cdecl _iswpunct_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswalnum(     wint_t _C);
+  int __cdecl _iswalnum_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswprint(     wint_t _C);
+  int __cdecl _iswprint_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswgraph(     wint_t _C);
+  int __cdecl _iswgraph_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswcntrl(     wint_t _C);
+  int __cdecl _iswcntrl_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl iswascii(     wint_t _C);
+  int __cdecl isleadbyte(     int _C);
+  int __cdecl _isleadbyte_l(     int _C,        _locale_t _Locale);
+
+  wint_t __cdecl towupper(     wint_t _C);
+  wint_t __cdecl _towupper_l(     wint_t _C,        _locale_t _Locale);
+  wint_t __cdecl towlower(     wint_t _C);
+  wint_t __cdecl _towlower_l(     wint_t _C,        _locale_t _Locale); 
+  int __cdecl iswctype(     wint_t _C,      wctype_t _Type);
+  int __cdecl _iswctype_l(     wint_t _C,      wctype_t _Type,        _locale_t _Locale);
+
+  int __cdecl __iswcsymf(     wint_t _C);
+  int __cdecl _iswcsymf_l(     wint_t _C,        _locale_t _Locale);
+  int __cdecl __iswcsym(     wint_t _C);
+  int __cdecl _iswcsym_l(     wint_t _C,        _locale_t _Locale);
+
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "iswctype" "instead. See online help for details."))  int __cdecl is_wctype(     wint_t _C,      wctype_t _Type);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+         wchar_t * __cdecl _wgetcwd(       wchar_t * _DstBuf,      int _SizeInWords);
+         wchar_t * __cdecl _wgetdcwd(     int _Drive,        wchar_t * _DstBuf,      int _SizeInWords);
+        wchar_t * __cdecl _wgetdcwd_nolock(     int _Drive,        wchar_t * _DstBuf,      int _SizeInWords);
+
+
+
+
+
+
+
+  int __cdecl _wchdir(       const wchar_t * _Path);
+  int __cdecl _wmkdir(       const wchar_t * _Path);
+  int __cdecl _wrmdir(       const wchar_t * _Path);
+
+
+
+
+
+
+  int __cdecl _waccess(       const wchar_t * _Filename,      int _AccessMode);
+  errno_t __cdecl _waccess_s(       const wchar_t * _Filename,      int _AccessMode);
+  int __cdecl _wchmod(       const wchar_t * _Filename,      int _Mode);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _wcreat(       const wchar_t * _Filename,      int _PermissionMode);
+  intptr_t __cdecl _wfindfirst32(       const wchar_t * _Filename,      struct _wfinddata32_t * _FindData);
+  int __cdecl _wfindnext32(     intptr_t _FindHandle,      struct _wfinddata32_t * _FindData);
+  int __cdecl _wunlink(       const wchar_t * _Filename);
+  int __cdecl _wrename(       const wchar_t * _NewFilename,        const wchar_t * _OldFilename);
+ errno_t __cdecl _wmktemp_s(           wchar_t * _TemplateName,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wmktemp_s(       wchar_t (&_TemplateName)[_Size]) { return _wmktemp_s(_TemplateName, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wmktemp_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wmktemp( wchar_t *_TemplateName);
+
+
+  intptr_t __cdecl _wfindfirst32i64(       const wchar_t * _Filename,      struct _wfinddata32i64_t * _FindData);
+  intptr_t __cdecl _wfindfirst64i32(       const wchar_t * _Filename,      struct _wfinddata64i32_t * _FindData);
+  intptr_t __cdecl _wfindfirst64(       const wchar_t * _Filename,      struct _wfinddata64_t * _FindData);
+  int __cdecl _wfindnext32i64(     intptr_t _FindHandle,      struct _wfinddata32i64_t * _FindData);
+  int __cdecl _wfindnext64i32(     intptr_t _FindHandle,      struct _wfinddata64i32_t * _FindData);
+  int __cdecl _wfindnext64(     intptr_t _FindHandle,      struct _wfinddata64_t * _FindData);
+
+
+  errno_t __cdecl _wsopen_s(     int * _FileHandle,        const wchar_t * _Filename,      int _OpenFlag,      int _ShareFlag,      int _PermissionFlag);
+
+
+
+
+
+
+
+
+
+extern "C++" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl _wopen(       const wchar_t * _Filename,      int _OpenFlag,      int _PermissionMode = 0);
+extern "C++" __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsopen_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  int __cdecl _wsopen(       const wchar_t * _Filename,      int _OpenFlag,      int _ShareFlag, int _PermissionMode = 0);
+
+
+
+
+
+
+
+
+
+
+  wchar_t * __cdecl _wsetlocale(     int _Category,          const wchar_t * _Locale);
+
+
+
+
+
+
+
+
+ intptr_t __cdecl _wexecl(       const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wexecle(       const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wexeclp(       const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wexeclpe(       const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wexecv(       const wchar_t * _Filename,        const wchar_t * const * _ArgList);
+ intptr_t __cdecl _wexecve(       const wchar_t * _Filename,        const wchar_t * const * _ArgList,
+                 const wchar_t * const * _Env);
+ intptr_t __cdecl _wexecvp(       const wchar_t * _Filename,        const wchar_t * const * _ArgList);
+ intptr_t __cdecl _wexecvpe(       const wchar_t * _Filename,        const wchar_t * const * _ArgList, 
+                 const wchar_t * const * _Env);
+ intptr_t __cdecl _wspawnl(     int _Mode,        const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wspawnle(     int _Mode,        const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wspawnlp(     int _Mode,        const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wspawnlpe(     int _Mode,        const wchar_t * _Filename,        const wchar_t * _ArgList, ...);
+ intptr_t __cdecl _wspawnv(     int _Mode,        const wchar_t * _Filename,        const wchar_t * const * _ArgList);
+ intptr_t __cdecl _wspawnve(     int _Mode,        const wchar_t * _Filename,        const wchar_t * const * _ArgList,
+                 const wchar_t * const * _Env);
+ intptr_t __cdecl _wspawnvp(     int _Mode,        const wchar_t * _Filename,        const wchar_t * const * _ArgList);
+ intptr_t __cdecl _wspawnvpe(     int _Mode,        const wchar_t * _Filename,        const wchar_t * const * _ArgList,
+                 const wchar_t * const * _Env);
+
+
+ int __cdecl _wsystem(         const wchar_t * _Command);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef unsigned short _ino_t;      
+
+
+typedef unsigned short ino_t;
+
+
+
+
+
+typedef unsigned int _dev_t;        
+
+
+typedef unsigned int dev_t;
+
+
+
+
+
+typedef long _off_t;                
+
+
+typedef long off_t;
+
+
+
+
+
+
+struct _stat32 {
+        _dev_t     st_dev;
+        _ino_t     st_ino;
+        unsigned short st_mode;
+        short      st_nlink;
+        short      st_uid;
+        short      st_gid;
+        _dev_t     st_rdev;
+        _off_t     st_size;
+        __time32_t st_atime;
+        __time32_t st_mtime;
+        __time32_t st_ctime;
+        };
+
+
+
+struct stat {
+        _dev_t     st_dev;
+        _ino_t     st_ino;
+        unsigned short st_mode;
+        short      st_nlink;
+        short      st_uid;
+        short      st_gid;
+        _dev_t     st_rdev;
+        _off_t     st_size;
+        time_t st_atime;
+        time_t st_mtime;
+        time_t st_ctime;
+        };
+
+
+
+
+
+struct _stat32i64 {
+        _dev_t     st_dev;
+        _ino_t     st_ino;
+        unsigned short st_mode;
+        short      st_nlink;
+        short      st_uid;
+        short      st_gid;
+        _dev_t     st_rdev;
+        __int64    st_size;
+        __time32_t st_atime;
+        __time32_t st_mtime;
+        __time32_t st_ctime;
+        };
+
+struct _stat64i32 {
+        _dev_t     st_dev;
+        _ino_t     st_ino;
+        unsigned short st_mode;
+        short      st_nlink;
+        short      st_uid;
+        short      st_gid;
+        _dev_t     st_rdev;
+        _off_t     st_size;
+        __time64_t st_atime;
+        __time64_t st_mtime;
+        __time64_t st_ctime;
+        };
+
+struct _stat64 {
+        _dev_t     st_dev;
+        _ino_t     st_ino;
+        unsigned short st_mode;
+        short      st_nlink;
+        short      st_uid;
+        short      st_gid;
+        _dev_t     st_rdev;
+        __int64    st_size;
+        __time64_t st_atime;
+        __time64_t st_mtime;
+        __time64_t st_ctime;
+        };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ int __cdecl _wstat32(       const wchar_t * _Name,      struct _stat32 * _Stat);
+
+
+ int __cdecl _wstat32i64(       const wchar_t * _Name,      struct _stat32i64 * _Stat);
+ int __cdecl _wstat64i32(       const wchar_t * _Name,      struct _stat64i32 * _Stat);
+ int __cdecl _wstat64(       const wchar_t * _Name,      struct _stat64 * _Stat);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  errno_t __cdecl _cgetws_s(       wchar_t * _Buffer, size_t _SizeInWords,      size_t * _SizeRead);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _cgetws_s(       wchar_t (&_Buffer)[_Size], size_t * _Size) { return _cgetws_s(_Buffer, _Size, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_cgetws_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _cgetws(         wchar_t *_Buffer);
+  wint_t __cdecl _getwch(void);
+  wint_t __cdecl _getwche(void);
+  wint_t __cdecl _putwch(wchar_t _WCh);
+  wint_t __cdecl _ungetwch(wint_t _WCh);
+  int __cdecl _cputws(       const wchar_t * _String);
+  int __cdecl _cwprintf(        const wchar_t * _Format, ...);
+  int __cdecl _cwprintf_s(        const wchar_t * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_cwscanf_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _cwscanf(        const wchar_t * _Format, ...);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_cwscanf_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))   int __cdecl _cwscanf_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _cwscanf_s(        const wchar_t * _Format, ...);
+  int __cdecl _cwscanf_s_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+  int __cdecl _vcwprintf(        const wchar_t *_Format, va_list _ArgList);
+  int __cdecl _vcwprintf_s(        const wchar_t *_Format, va_list _ArgList);
+
+  int __cdecl _cwprintf_p(        const wchar_t * _Format, ...);
+  int __cdecl _vcwprintf_p(        const wchar_t*  _Format, va_list _ArgList);
+
+ int __cdecl _cwprintf_l(       const  wchar_t * _Format,        _locale_t _Locale, ...);
+ int __cdecl _cwprintf_s_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+ int __cdecl _vcwprintf_l(        const wchar_t *_Format,        _locale_t _Locale, va_list _ArgList);
+ int __cdecl _vcwprintf_s_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+ int __cdecl _cwprintf_p_l(        const wchar_t * _Format,        _locale_t _Locale, ...);
+ int __cdecl _vcwprintf_p_l(        const wchar_t * _Format,        _locale_t _Locale, va_list _ArgList);
+
+ wint_t __cdecl _putwch_nolock(wchar_t _WCh);
+ wint_t __cdecl _getwch_nolock(void);
+ wint_t __cdecl _getwche_nolock(void);
+ wint_t __cdecl _ungetwch_nolock(wint_t _WCh);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  errno_t __cdecl _itow_s (     int _Val,        wchar_t * _DstBuf,      size_t _SizeInWords,      int _Radix);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _itow_s(     int _Value,      wchar_t (&_Dest)[_Size],      int _Radix) { return _itow_s(_Value, _Dest, _Size, _Radix); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_itow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _itow( int _Value,  wchar_t *_Dest,  int _Radix);
+  errno_t __cdecl _ltow_s (     long _Val,        wchar_t * _DstBuf,      size_t _SizeInWords,      int _Radix);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _ltow_s(     long _Value,      wchar_t (&_Dest)[_Size],      int _Radix) { return _ltow_s(_Value, _Dest, _Size, _Radix); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ltow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _ltow( long _Value,  wchar_t *_Dest,  int _Radix);
+  errno_t __cdecl _ultow_s (     unsigned long _Val,        wchar_t * _DstBuf,      size_t _SizeInWords,      int _Radix);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _ultow_s(     unsigned long _Value,      wchar_t (&_Dest)[_Size],      int _Radix) { return _ultow_s(_Value, _Dest, _Size, _Radix); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ultow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _ultow( unsigned long _Value,  wchar_t *_Dest,  int _Radix);
+  double __cdecl wcstod(       const wchar_t * _Str,                    wchar_t ** _EndPtr);
+  double __cdecl _wcstod_l(       const wchar_t *_Str,                    wchar_t ** _EndPtr,        _locale_t _Locale);
+  long   __cdecl wcstol(       const wchar_t *_Str,                    wchar_t ** _EndPtr, int _Radix);
+  long   __cdecl _wcstol_l(       const wchar_t *_Str,                    wchar_t **_EndPtr, int _Radix,        _locale_t _Locale);
+  unsigned long __cdecl wcstoul(       const wchar_t *_Str,                    wchar_t ** _EndPtr, int _Radix);
+  unsigned long __cdecl _wcstoul_l(       const wchar_t *_Str,                    wchar_t **_EndPtr, int _Radix,        _locale_t _Locale);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wdupenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wgetenv(       const wchar_t * _VarName);
+  errno_t __cdecl _wgetenv_s(     size_t * _ReturnSize,        wchar_t * _DstBuf,      size_t _DstSizeInWords,        const wchar_t * _VarName);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wgetenv_s(     size_t * _ReturnSize,      wchar_t (&_Dest)[_Size],        const wchar_t * _VarName) { return _wgetenv_s(_ReturnSize, _Dest, _Size, _VarName); } }
+  errno_t __cdecl _wdupenv_s(                     wchar_t **_Buffer,        size_t *_BufferSizeInWords,        const wchar_t *_VarName);
+
+
+
+
+  double __cdecl _wtof(       const wchar_t *_Str);
+  double __cdecl _wtof_l(       const wchar_t *_Str,        _locale_t _Locale);
+  int __cdecl _wtoi(       const wchar_t *_Str);
+  int __cdecl _wtoi_l(       const wchar_t *_Str,        _locale_t _Locale);
+  long __cdecl _wtol(       const wchar_t *_Str);
+  long __cdecl _wtol_l(       const wchar_t *_Str,        _locale_t _Locale);
+
+
+  errno_t __cdecl _i64tow_s(     __int64 _Val,        wchar_t * _DstBuf,      size_t _SizeInWords,      int _Radix);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_i65tow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) wchar_t * __cdecl _i64tow(     __int64 _Val,      wchar_t * _DstBuf,      int _Radix);
+  errno_t __cdecl _ui64tow_s(     unsigned __int64 _Val,        wchar_t * _DstBuf,      size_t _SizeInWords,      int _Radix);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ui64tow_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) wchar_t * __cdecl _ui64tow(     unsigned __int64 _Val,      wchar_t * _DstBuf,      int _Radix);
+  __int64   __cdecl _wtoi64(       const wchar_t *_Str);
+  __int64   __cdecl _wtoi64_l(       const wchar_t *_Str,        _locale_t _Locale);
+  __int64   __cdecl _wcstoi64(       const wchar_t * _Str,                    wchar_t ** _EndPtr,      int _Radix);
+  __int64   __cdecl _wcstoi64_l(       const wchar_t * _Str,                    wchar_t ** _EndPtr,      int _Radix,        _locale_t _Locale);
+  unsigned __int64  __cdecl _wcstoui64(       const wchar_t * _Str,                    wchar_t ** _EndPtr,      int _Radix);
+  unsigned __int64  __cdecl _wcstoui64_l(       const wchar_t *_Str ,                    wchar_t ** _EndPtr,      int _Radix,        _locale_t _Locale);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  wchar_t * __cdecl _wfullpath(         wchar_t * _FullPath,        const wchar_t * _Path,      size_t _SizeInWords);
+
+
+
+
+
+  errno_t __cdecl _wmakepath_s(       wchar_t * _PathResult,        size_t _SizeInWords,          const wchar_t * _Drive,          const wchar_t * _Dir,          const wchar_t * _Filename,
+                 const wchar_t * _Ext);        
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wmakepath_s(     wchar_t (&_ResultPath)[_Size],          const wchar_t * _Drive,          const wchar_t * _Dir,          const wchar_t * _Filename,          const wchar_t * _Ext) { return _wmakepath_s(_ResultPath, _Size, _Drive, _Dir, _Filename, _Ext); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wmakepath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void __cdecl _wmakepath( wchar_t *_ResultPath,  const wchar_t * _Drive,  const wchar_t * _Dir,  const wchar_t * _Filename,  const wchar_t * _Ext);
+
+
+
+
+  int    __cdecl _wputenv(       const wchar_t * _EnvString);
+  errno_t __cdecl _wputenv_s(       const wchar_t * _Name,        const wchar_t * _Value);
+ errno_t __cdecl _wsearchenv_s(       const wchar_t * _Filename,        const wchar_t * _EnvVar,        wchar_t * _ResultPath,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wsearchenv_s(       const wchar_t * _Filename,        const wchar_t * _EnvVar,      wchar_t (&_ResultPath)[_Size]) { return _wsearchenv_s(_Filename, _EnvVar, _ResultPath, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsearchenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void __cdecl _wsearchenv( const wchar_t * _Filename,  const wchar_t * _EnvVar,  wchar_t *_ResultPath);
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wsplitpath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void   __cdecl _wsplitpath(       const wchar_t * _FullPath,        wchar_t * _Drive,        wchar_t * _Dir,        wchar_t * _Filename,        wchar_t * _Ext);
+ errno_t __cdecl _wsplitpath_s(       const wchar_t * _FullPath, 
+		         wchar_t * _Drive,      size_t _DriveSizeInWords, 
+		         wchar_t * _Dir,      size_t _DirSizeInWords, 
+		         wchar_t * _Filename,      size_t _FilenameSizeInWords, 
+		         wchar_t * _Ext,      size_t _ExtSizeInWords);
+extern "C++" { template <size_t _DriveSize, size_t _DirSize, size_t _NameSize, size_t _ExtSize> inline errno_t __cdecl _wsplitpath_s(     const wchar_t *_Path,        wchar_t (&_Drive)[_DriveSize],        wchar_t (&_Dir)[_DirSize],        wchar_t (&_Name)[_NameSize],        wchar_t (&_Ext)[_ExtSize]) { return _wsplitpath_s(_Path, _Drive, _DriveSize, _Dir, _DirSize, _Name, _NameSize, _Ext, _ExtSize); } }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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;   
+        };
+
+
+
+
+
+
+ 
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wasctime_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wasctime(     const struct tm * _Tm);
+ errno_t __cdecl _wasctime_s(       wchar_t *_Buf,      size_t _SizeInWords,      const struct tm * _Tm);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wasctime_s(       wchar_t (&_Buffer)[_Size],      const struct tm * _Time) { return _wasctime_s(_Buffer, _Size, _Time); } }
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wctime32_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wctime32(     const __time32_t *_Time);
+ errno_t __cdecl _wctime32_s(       wchar_t* _Buf,      size_t _SizeInWords,      const __time32_t * _Time);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wctime32_s(       wchar_t (&_Buffer)[_Size],      const __time32_t * _Time) { return _wctime32_s(_Buffer, _Size, _Time); } }
+
+ size_t __cdecl wcsftime(       wchar_t * _Buf,      size_t _SizeInWords,         const wchar_t * _Format,       const struct tm * _Tm);
+ size_t __cdecl _wcsftime_l(       wchar_t * _Buf,      size_t _SizeInWords,         const wchar_t *_Format,      const struct tm *_Tm,        _locale_t _Locale);
+
+ errno_t __cdecl _wstrdate_s(       wchar_t * _Buf,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wstrdate_s(       wchar_t (&_Buffer)[_Size]) { return _wstrdate_s(_Buffer, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wstrdate_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wstrdate( wchar_t *_Buffer);
+
+ errno_t __cdecl _wstrtime_s(       wchar_t * _Buf,      size_t _SizeInWords);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wstrtime_s(       wchar_t (&_Buffer)[_Size]) { return _wstrtime_s(_Buffer, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wstrtime_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wstrtime( wchar_t *_Buffer);
+
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wctime64_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  wchar_t * __cdecl _wctime64(     const __time64_t * _Time);
+ errno_t __cdecl _wctime64_s(       wchar_t* _Buf,      size_t _SizeInWords,      const __time64_t *_Time);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wctime64_s(       wchar_t (&_Buffer)[_Size],      const __time64_t * _Time) { return _wctime64_s(_Buffer, _Size, _Time); } }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4996)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+static __inline wchar_t * __cdecl _wctime(const time_t * _Time)
+{
+#pragma warning( push )
+#pragma warning( disable : 4996 )
+    return _wctime64(_Time);
+#pragma warning( pop )
+}
+
+static __inline errno_t __cdecl _wctime_s(wchar_t *_Buffer, size_t _SizeInWords, const time_t * _Time)
+{
+    return _wctime64_s(_Buffer, _SizeInWords, _Time);
+}
+
+
+#pragma warning(pop)
+
+
+
+
+
+
+
+
+
+
+typedef int mbstate_t;
+typedef wchar_t _Wint_t;
+
+ wint_t __cdecl btowc(int);
+ size_t __cdecl mbrlen(           const char * _Ch,      size_t _SizeInBytes,
+                                     mbstate_t * _State);
+ size_t __cdecl mbrtowc(       wchar_t * _DstCh,            const char * _SrcCh,
+                                    size_t _SizeInBytes,        mbstate_t * _State);
+ errno_t __cdecl mbsrtowcs_s(       size_t* _Retval,          wchar_t * _Dst,      size_t _SizeInWords,                  const char ** _PSrc,      size_t _N,        mbstate_t * _State);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl mbsrtowcs_s(       size_t * _Retval,        wchar_t (&_Dest)[_Size],                  const char ** _PSource,      size_t _Count,        mbstate_t * _State) { return mbsrtowcs_s(_Retval, _Dest, _Size, _PSource, _Count, _State); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "mbsrtowcs_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl mbsrtowcs( wchar_t *_Dest,  const char ** _PSrc,  size_t _Count,  mbstate_t * _State);
+
+ errno_t __cdecl wcrtomb_s(       size_t * _Retval,          char * _Dst,
+             size_t _SizeInBytes,        wchar_t _Ch,        mbstate_t * _State);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcrtomb_s(       size_t * _Retval,          char (&_Dest)[_Size],        wchar_t _Source,        mbstate_t * _State) { return wcrtomb_s(_Retval, _Dest, _Size, _Source, _State); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcrtomb_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl wcrtomb( char *_Dest,  wchar_t _Source,  mbstate_t * _State);
+ errno_t __cdecl wcsrtombs_s(       size_t * _Retval,          char * _Dst,
+             size_t _SizeInBytes,                const wchar_t ** _Src,      size_t _Size,        mbstate_t * _State);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcsrtombs_s(       size_t * _Retval,          char (&_Dest)[_Size],                const wchar_t ** _PSrc,      size_t _Count,        mbstate_t * _State) { return wcsrtombs_s(_Retval, _Dest, _Size, _PSrc, _Count, _State); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcsrtombs_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl wcsrtombs( char *_Dest,  const wchar_t ** _PSource,  size_t _Count,  mbstate_t * _State);
+ int __cdecl wctob(     wint_t _WCh);
+
+
+
+
+
+
+
+  void *  __cdecl memmove(         void * _Dst,          const void * _Src,      size_t _MaxCount);
+
+ void *  __cdecl memcpy(         void * _Dst,          const void * _Src,      size_t _MaxCount);
+
+ errno_t __cdecl memcpy_s(         void * _Dst,      rsize_t _DstSize,          const void * _Src,      rsize_t _MaxCount);
+ errno_t __cdecl memmove_s(         void * _Dst,      rsize_t _DstSize,          const void * _Src,      rsize_t _MaxCount);
+
+__inline int __cdecl fwide(       FILE * _F, int _M)
+        {(void)_F; return (_M); }
+__inline int __cdecl mbsinit(       const mbstate_t *_P)
+        {return (_P == 0 || *_P == 0); }
+__inline const wchar_t * __cdecl wmemchr(       const wchar_t *_S,        wchar_t _C,      size_t _N)
+        {for (; 0 < _N; ++_S, --_N)
+                if (*_S == _C)
+                        return (const wchar_t *)(_S);
+        return (0); }
+__inline int __cdecl wmemcmp(       const wchar_t *_S1,        const wchar_t *_S2,      size_t _N)
+        {for (; 0 < _N; ++_S1, ++_S2, --_N)
+                if (*_S1 != *_S2)
+                        return (*_S1 < *_S2 ? -1 : +1);
+        return (0); }
+
+__inline  wchar_t * __cdecl wmemcpy(       wchar_t *_S1,          const wchar_t *_S2,      size_t _N)
+        {
+#pragma warning( push )
+#pragma warning( disable : 4996 6386 )
+            return (wchar_t *)memcpy(_S1, _S2, _N*sizeof(wchar_t));
+#pragma warning( pop )
+        }
+
+
+__inline errno_t __cdecl wmemcpy_s(         wchar_t *_S1,      rsize_t _N1,          const wchar_t *_S2, rsize_t _N)
+        {
+#pragma warning( push )
+#pragma warning( disable : 6386 )
+            return memcpy_s(_S1, _N1*sizeof(wchar_t), _S2, _N*sizeof(wchar_t));
+        }
+#pragma warning( pop )
+
+
+__inline  wchar_t * __cdecl wmemmove(         wchar_t *_S1,          const wchar_t *_S2,      size_t _N)
+        {
+#pragma warning( push )
+#pragma warning( disable : 4996 6386 )
+#pragma warning( disable : 6387)
+			
+            return (wchar_t *)memmove(_S1, _S2, _N*sizeof(wchar_t));
+#pragma warning( pop )
+        }
+
+
+__inline errno_t __cdecl wmemmove_s(         wchar_t *_S1,      rsize_t _N1,          const wchar_t *_S2,      rsize_t _N)
+        {
+#pragma warning( push )
+#pragma warning( disable : 6386 )
+            return memmove_s(_S1, _N1*sizeof(wchar_t), _S2, _N*sizeof(wchar_t));
+#pragma warning( pop )
+        }
+
+
+__inline wchar_t * __cdecl wmemset(       wchar_t *_S,        wchar_t _C,      size_t _N)
+        {
+            wchar_t *_Su = _S;
+            for (; 0 < _N; ++_Su, --_N)
+            {
+                *_Su = _C;
+            }
+            return (_S);
+        }
+
+
+extern "C++" {
+inline wchar_t * __cdecl wmemchr(       wchar_t *_S,        wchar_t _C,      size_t _N)
+        { return (wchar_t *)wmemchr((const wchar_t *)_S, _C, _N); }
+}
+
+
+
+
+}       
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+typedef mbstate_t _Mbstatet;
+
+ 
+namespace std {
+using ::mbstate_t; using ::size_t; using ::tm; 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 ::mbsrtowcs;
+using ::mbsinit; using ::putwc; using ::putwchar;
+using ::swprintf; using ::swscanf; using ::ungetwc;
+using ::vfwprintf; using ::vswprintf; using ::vwprintf;
+using ::wcrtomb; using ::wprintf; using ::wscanf;
+using ::wcsrtombs; using ::wcstol; using ::wcscat;
+using ::wcschr; using ::wcscmp; using ::wcscoll;
+using ::wcscpy; using ::wcscspn; using ::wcslen;
+using ::wcsncat; using ::wcsncmp; using ::wcsncpy;
+using ::wcspbrk; using ::wcsrchr; using ::wcsspn;
+using ::wcstod; using ::wcstoul; using ::wcsstr;
+using ::wcstok; using ::wcsxfrm; using ::wctob;
+using ::wmemchr; using ::wmemcmp; using ::wmemcpy;
+using ::wmemmove; using ::wmemset; using ::wcsftime;
+}
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+
+ 
+ 
+
+ 
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+		
+ 
+
+ 
+
+		
+
+
+
+
+ 
+ 
+
+ 
+ 
+
+
+
+
+  
+ 
+
+ 
+  
+  
+  
+ 
+
+		
+enum _Uninitialized
+	{	
+	_Noinit};
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern "C" {
+
+
+ 
+
+
+
+
+
+typedef void *_HFILE; 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef int (__cdecl * _CRT_REPORT_HOOK)(int, char *, int *);
+typedef int (__cdecl * _CRT_REPORT_HOOKW)(int, wchar_t *, int *);
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+typedef int (__cdecl * _CRT_ALLOC_HOOK)(int, void *, size_t, int, long, const unsigned char *, int);
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef void (__cdecl * _CRT_DUMP_CLIENT)(void *, size_t);
+
+
+
+
+
+
+
+struct _CrtMemBlockHeader;
+typedef struct _CrtMemState
+{
+        struct _CrtMemBlockHeader * pBlockHeader;
+        size_t lCounts[5];
+        size_t lSizes[5];
+        size_t lHighWaterCount;
+        size_t lTotalCount;
+} _CrtMemState;
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+extern "C++" {
+
+
+
+ 
+
+
+
+
+
+
+
+ 
+  void * __cdecl operator new[](size_t _Size);
+
+
+inline   void * __cdecl operator new(size_t _Size, int, const char *, int)
+        { return ::operator new(_Size); }
+
+inline   void* __cdecl operator new[](size_t _Size, int, const char *, int)
+        { return ::operator new[](_Size); }
+
+
+
+
+void __cdecl operator delete[](void *);
+
+inline void __cdecl operator delete(void * _P, int, const char *, int)
+        { ::operator delete(_P); }
+inline void __cdecl operator delete[](void * _P, int, const char *, int)
+        { ::operator delete[](_P); }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+
+ 
+
+
+
+
+typedef long streamoff;
+typedef int streamsize;
+ 
+
+
+
+
+
+extern   fpos_t _Fpz;
+extern   const streamoff _BADOFF;
+
+
+		
+template<class _Statetype>
+	class fpos
+	{	
+	typedef fpos<_Statetype> _Myt;
+
+public:
+	 fpos(streamoff _Off = 0)
+		: _Myoff(_Off), _Fpos(0), _Mystate(_Stz)
+		{	
+		}
+
+	 fpos(_Statetype _State, fpos_t _Fileposition)
+		: _Myoff(0), _Fpos(_Fileposition), _Mystate(_State)
+		{	
+		}
+
+	_Statetype  state() const
+		{	
+		return (_Mystate);
+		}
+
+	void  state(_Statetype _State)
+		{	
+		_Mystate = _State;
+		}
+
+	fpos_t  seekpos() const
+		{	
+		return (_Fpos);
+		}
+
+	 operator streamoff() const
+		{	
+		return (_Myoff + ((long)(_Fpos)));
+		}
+
+	streamoff  operator-(const _Myt& _Right) const
+		{	
+		return ((streamoff)*this - (streamoff)_Right);
+		}
+
+	_Myt&  operator+=(streamoff _Off)
+		{	
+		_Myoff += _Off;
+		return (*this);
+		}
+
+	_Myt&  operator-=(streamoff _Off)
+		{	
+		_Myoff -= _Off;
+		return (*this);
+		}
+
+	_Myt  operator+(streamoff _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Myt  operator-(streamoff _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	bool  operator==(const _Myt& _Right) const
+		{	
+		return ((streamoff)*this == (streamoff)_Right);
+		}
+
+	bool  operator!=(const _Myt& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+private:
+	 static const _Statetype _Stz;	
+	streamoff _Myoff;	
+	fpos_t _Fpos;	
+	_Statetype _Mystate;	
+	};
+
+	
+template<class _Statetype>
+	 const _Statetype fpos<_Statetype>::_Stz = _Statetype();
+
+ 
+
+ 
+ 
+
+typedef fpos<_Mbstatet> streampos;
+typedef streampos wstreampos;
+
+		
+struct _Unsecure_char_traits_tag
+	{
+	};
+struct _Secure_char_traits_tag
+	{
+	};
+
+		
+		
+		
+		
+		
+struct _Char_traits_base
+	{
+	typedef _Unsecure_char_traits_tag _Secure_char_traits;
+	};
+
+		
+		
+		
+template<class _Elem>
+	struct char_traits:
+		public _Char_traits_base
+	{	
+	typedef _Elem char_type;
+	typedef long int_type;
+	typedef streampos pos_type;
+	typedef streamoff off_type;
+	typedef _Mbstatet state_type;
+
+	static void __cdecl assign(_Elem& _Left, const _Elem& _Right)
+		{	
+		_Left = _Right;
+		}
+
+	static bool __cdecl eq(const _Elem& _Left, const _Elem& _Right)
+		{	
+		return (_Left == _Right);
+		}
+
+	static bool __cdecl lt(const _Elem& _Left, const _Elem& _Right)
+		{	
+		return (_Left < _Right);
+		}
+
+	static int __cdecl compare(const _Elem *_First1,
+		const _Elem *_First2, size_t _Count)
+		{	
+
+
+		for (; 0 < _Count; --_Count, ++_First1, ++_First2)
+			if (!eq(*_First1, *_First2))
+				return (lt(*_First1, *_First2) ? -1 : +1);
+		return (0);
+		}
+
+	static size_t __cdecl length(const _Elem *_First)
+		{	
+
+		size_t _Count;
+		for (_Count = 0; !eq(*_First, _Elem()); ++_First)
+			++_Count;
+		return (_Count);
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	static _Elem *__cdecl copy(_Elem *_First1,
+		const _Elem *_First2, size_t _Count)
+		{	
+		
+		return _Copy_s(_First1, _Count, _First2, _Count);
+		}
+
+	static _Elem *__cdecl _Copy_s(_Elem *_First1, size_t _Dest_size,
+		const _Elem *_First2, size_t _Count)
+		{	
+
+
+		{ if (!(_Dest_size >= _Count)) { ((void)0); ::_invalid_parameter_noinfo(); return (0); } };
+		_Elem *_Next = _First1;
+		for (; 0 < _Count; --_Count, ++_Next, ++_First2)
+			assign(*_Next, *_First2);
+		return (_First1);
+		}
+
+	static const _Elem *__cdecl find(const _Elem *_First,
+		size_t _Count, const _Elem& _Ch)
+		{	
+
+		for (; 0 < _Count; --_Count, ++_First)
+			if (eq(*_First, _Ch))
+				return (_First);
+		return (0);
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	static _Elem *__cdecl move(_Elem *_First1,
+		const _Elem *_First2, size_t _Count)
+		{	
+		
+		return _Move_s(_First1, _Count, _First2, _Count);
+		}
+
+	static _Elem *__cdecl _Move_s(_Elem *_First1, size_t _Dest_size,
+		const _Elem *_First2, size_t _Count)
+		{	
+
+
+		{ if (!(_Dest_size >= _Count)) { ((void)0); ::_invalid_parameter_noinfo(); return (0); } };
+		_Elem *_Next = _First1;
+		if (_First2 < _Next && _Next < _First2 + _Count)
+			for (_Next += _Count, _First2 += _Count; 0 < _Count; --_Count)
+				assign(*--_Next, *--_First2);
+		else
+			for (; 0 < _Count; --_Count, ++_Next, ++_First2)
+				assign(*_Next, *_First2);
+		return (_First1);
+		}
+
+	static _Elem *__cdecl assign(_Elem *_First,
+		size_t _Count, _Elem _Ch)
+		{	
+
+		_Elem *_Next = _First;
+		for (; 0 < _Count; --_Count, ++_Next)
+			assign(*_Next, _Ch);
+		return (_First);
+		}
+
+	static _Elem __cdecl to_char_type(const int_type& _Meta)
+		{	
+		return ((_Elem)_Meta);
+		}
+
+	static int_type __cdecl to_int_type(const _Elem& _Ch)
+		{	
+		return ((int_type)_Ch);
+		}
+
+	static bool __cdecl eq_int_type(const int_type& _Left,
+		const int_type& _Right)
+		{	
+		return (_Left == _Right);
+		}
+
+	static int_type __cdecl eof()
+		{	
+		return ((int_type)(-1));
+		}
+
+	static int_type __cdecl not_eof(const int_type& _Meta)
+		{	
+		return (_Meta != eof() ? (int_type)_Meta : (int_type)!eof());
+		}
+	};
+
+		
+template<> struct  char_traits<wchar_t>:
+	public _Char_traits_base
+	{	
+	typedef wchar_t _Elem;
+	typedef _Elem char_type;	
+	typedef wint_t int_type;
+	typedef streampos pos_type;
+	typedef streamoff off_type;
+	typedef _Mbstatet state_type;
+
+	static void __cdecl assign(_Elem& _Left, const _Elem& _Right)
+		{	
+		_Left = _Right;
+		}
+
+	static bool __cdecl eq(const _Elem& _Left, const _Elem& _Right)
+		{	
+		return (_Left == _Right);
+		}
+
+	static bool __cdecl lt(const _Elem& _Left, const _Elem& _Right)
+		{	
+		return (_Left < _Right);
+		}
+
+	static int __cdecl compare(const _Elem *_First1, const _Elem *_First2,
+		size_t _Count)
+		{	
+
+
+		return (::wmemcmp(_First1, _First2, _Count));
+		}
+
+	static size_t __cdecl length(const _Elem *_First)
+		{	
+
+		return (::wcslen(_First));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	static _Elem *__cdecl copy(_Elem *_First1, const _Elem *_First2,
+		size_t _Count)
+		{	
+		
+		return _Copy_s(_First1, _Count, _First2, _Count);
+		}
+
+	static _Elem *__cdecl _Copy_s(_Elem *_First1, size_t _Size_in_words, const _Elem *_First2,
+		size_t _Count)
+		{	
+
+
+		::wmemcpy_s((_First1), (_Size_in_words), (_First2), (_Count));
+		return _First1;
+		}
+
+	static const _Elem *__cdecl find(const _Elem *_First, size_t _Count,
+		const _Elem& _Ch)
+		{	
+
+		return ((const _Elem *)::wmemchr(_First, _Ch, _Count));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	static _Elem *__cdecl move(_Elem *_First1, const _Elem *_First2,
+		size_t _Count)
+		{	
+		
+		return _Move_s(_First1, _Count, _First2, _Count);
+		}
+
+	static _Elem *__cdecl _Move_s(_Elem *_First1, size_t _Size_in_words, const _Elem *_First2,
+		size_t _Count)
+		{	
+
+
+		::wmemmove_s((_First1), (_Size_in_words), (_First2), (_Count));
+		return (_Elem *)_First1;
+		}
+
+	static _Elem *__cdecl assign(_Elem *_First, size_t _Count, _Elem _Ch)
+		{	
+
+		return ((_Elem *)::wmemset(_First, _Ch, _Count));
+		}
+
+	static _Elem __cdecl to_char_type(const int_type& _Meta)
+		{	
+		return (_Meta);
+		}
+
+	static int_type __cdecl to_int_type(const _Elem& _Ch)
+		{	
+		return (_Ch);
+		}
+
+	static bool __cdecl eq_int_type(const int_type& _Left,
+		const int_type& _Right)
+		{	
+		return (_Left == _Right);
+		}
+
+	static int_type __cdecl eof()
+		{	
+		return ((wint_t)(0xFFFF));
+		}
+
+	static int_type __cdecl not_eof(const int_type& _Meta)
+		{	
+		return (_Meta != eof() ? _Meta : !eof());
+		}
+	};
+
+
+		
+template<> struct  char_traits<char>:
+	public _Char_traits_base
+	{	
+	typedef char _Elem;
+	typedef _Elem char_type;
+	typedef int int_type;
+	typedef streampos pos_type;
+	typedef streamoff off_type;
+	typedef _Mbstatet state_type;
+
+	static void __cdecl assign(_Elem& _Left, const _Elem& _Right)
+		{	
+		_Left = _Right;
+		}
+
+	static bool __cdecl eq(const _Elem& _Left, const _Elem& _Right)
+		{	
+		return (_Left == _Right);
+		}
+
+	static bool __cdecl lt(const _Elem& _Left, const _Elem& _Right)
+		{	
+		return (_Left < _Right);
+		}
+
+	static int __cdecl compare(const _Elem *_First1, const _Elem *_First2,
+		size_t _Count)
+		{	
+
+
+		return (::memcmp(_First1, _First2, _Count));
+		}
+
+	static size_t __cdecl length(const _Elem *_First)
+		{	
+
+		return (::strlen(_First));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	static _Elem *__cdecl copy(_Elem *_First1, const _Elem *_First2,
+		size_t _Count)
+		{	
+		
+		return _Copy_s(_First1, _Count, _First2, _Count);
+		}
+
+	static _Elem *__cdecl _Copy_s(_Elem *_First1, size_t _Size_in_bytes, const _Elem *_First2,
+		size_t _Count)
+		{	
+
+
+		::memcpy_s((_First1), (_Size_in_bytes), (_First2), (_Count));
+		return _First1;
+		}
+
+	static const _Elem *__cdecl find(const _Elem *_First, size_t _Count,
+		const _Elem& _Ch)
+		{	
+
+		return ((const _Elem *)::memchr(_First, _Ch, _Count));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	static _Elem *__cdecl move(_Elem *_First1, const _Elem *_First2,
+		size_t _Count)
+		{	
+		
+		return _Move_s(_First1, _Count, _First2, _Count);
+		}
+
+	static _Elem *__cdecl _Move_s(_Elem *_First1, size_t _Size_in_bytes, const _Elem *_First2,
+		size_t _Count)
+		{	
+
+
+		::memmove_s((_First1), (_Size_in_bytes), (_First2), (_Count));
+		return _First1;
+		}
+
+	static _Elem *__cdecl assign(_Elem *_First, size_t _Count, _Elem _Ch)
+		{	
+
+		return ((_Elem *)::memset(_First, _Ch, _Count));
+		}
+
+	static _Elem __cdecl to_char_type(const int_type& _Meta)
+		{	
+		return ((_Elem)_Meta);
+		}
+
+	static int_type __cdecl to_int_type(const _Elem& _Ch)
+		{	
+		return ((unsigned char)_Ch);
+		}
+
+	static bool __cdecl eq_int_type(const int_type& _Left,
+		const int_type& _Right)
+		{	
+		return (_Left == _Right);
+		}
+
+	static int_type __cdecl eof()
+		{	
+		return ((-1));
+		}
+
+	static int_type __cdecl not_eof(const int_type& _Meta)
+		{	
+		return (_Meta != eof() ? _Meta : !eof());
+		}
+	};
+
+		
+	template <class _Traits>
+	class _Inherits_from_char_traits_base
+	{
+		typedef char _True;
+		class _False { char _Dummy[2]; };
+		static _True _Inherits(_Char_traits_base);
+		static _False _Inherits(...);
+		static _Traits _Make_traits();
+
+	public:
+		enum { _Exists = sizeof(_Inherits(_Make_traits())) == sizeof(_True) };
+	};
+
+	template <class _Traits, bool _Inherits_from_char_traits_base>
+	class _Char_traits_category_helper
+	{
+	public:
+		typedef _Unsecure_char_traits_tag _Secure_char_traits;
+	};
+
+	
+	
+	template <class _Elem>
+	class _Char_traits_category_helper< char_traits<_Elem> , true>
+	{
+	public:
+		typedef _Secure_char_traits_tag _Secure_char_traits;
+	};
+
+	template <class _Traits>
+	class _Char_traits_category_helper<_Traits, true>
+	{
+	public:
+		typedef typename _Traits::_Secure_char_traits _Secure_char_traits;
+	};
+
+	template <class _Traits>
+	class _Char_traits_category
+	{
+	public:
+		typedef typename _Char_traits_category_helper<_Traits, _Inherits_from_char_traits_base<_Traits>::_Exists>::_Secure_char_traits _Secure_char_traits;
+	};
+
+	
+	
+	template<class _Traits> 
+	inline
+	typename _Char_traits_category<_Traits>::_Secure_char_traits _Char_traits_cat()
+	{
+		typename _Char_traits_category<_Traits>::_Secure_char_traits _Secure;
+		return (_Secure);
+	}
+
+	namespace _Traits_helper
+	{
+
+		
+	template<class _Traits>
+	inline
+	typename _Traits::char_type *copy_s(typename _Traits::char_type *_First1, size_t _Size,
+		const typename _Traits::char_type *_First2, size_t _Count)
+	{
+		return copy_s<_Traits>(_First1, _Size, _First2, _Count, _Char_traits_cat<_Traits>());
+	}
+
+	template<class _Traits>
+	inline
+	typename _Traits::char_type *copy_s(typename _Traits::char_type *_First1, size_t _Size,
+		const typename _Traits::char_type *_First2, size_t _Count, _Secure_char_traits_tag)
+	{
+		return _Traits::_Copy_s(_First1, _Size, _First2, _Count);
+	}
+
+	
+	template<class _Traits>
+	inline
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	typename _Traits::char_type *copy_s(typename _Traits::char_type *_First1, size_t _Size,
+		const typename _Traits::char_type *_First2, size_t _Count, _Unsecure_char_traits_tag)
+	{
+		return _Traits::copy(_First1, _First2, _Count);
+	}
+
+		
+	template<class _Traits>
+	inline
+	typename _Traits::char_type *move_s(typename _Traits::char_type *_First1, size_t _Size,
+		const typename _Traits::char_type *_First2, size_t _Count)
+	{
+		return move_s<_Traits>(_First1, _Size, _First2, _Count, _Char_traits_cat<_Traits>());
+	}
+
+	template<class _Traits>
+	inline
+	typename _Traits::char_type *move_s(typename _Traits::char_type *_First1, size_t _Size,
+		const typename _Traits::char_type *_First2, size_t _Count, _Secure_char_traits_tag)
+	{
+		return _Traits::_Move_s(_First1, _Size, _First2, _Count);
+	}
+
+	
+	template<class _Traits>
+	inline
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	typename _Traits::char_type *move_s(typename _Traits::char_type *_First1, size_t _Size,
+		const typename _Traits::char_type *_First2, size_t _Count, _Unsecure_char_traits_tag)
+	{
+		return _Traits::move(_First1, _First2, _Count);
+	}
+
+	} 
+
+		
+template<class _Ty>
+	class allocator;
+class ios_base;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_ios;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class istreambuf_iterator;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class ostreambuf_iterator;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_streambuf;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_istream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_ostream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_iostream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem>,
+	class _Alloc = allocator<_Elem> >
+	class basic_stringbuf;
+template<class _Elem,
+	class _Traits = char_traits<_Elem>,
+	class _Alloc = allocator<_Elem> >
+	class basic_istringstream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem>,
+	class _Alloc = allocator<_Elem> >
+	class basic_ostringstream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem>,
+	class _Alloc = allocator<_Elem> >
+	class basic_stringstream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_filebuf;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_ifstream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_ofstream;
+template<class _Elem,
+	class _Traits = char_traits<_Elem> >
+	class basic_fstream;
+
+ 
+
+
+
+
+
+
+
+
+
+
+		
+typedef basic_ios<char, char_traits<char> > ios;
+typedef basic_streambuf<char, char_traits<char> > streambuf;
+typedef basic_istream<char, char_traits<char> > istream;
+typedef basic_ostream<char, char_traits<char> > ostream;
+typedef basic_iostream<char, char_traits<char> > iostream;
+typedef basic_stringbuf<char, char_traits<char>,
+	allocator<char> > stringbuf;
+typedef basic_istringstream<char, char_traits<char>,
+	allocator<char> > istringstream;
+typedef basic_ostringstream<char, char_traits<char>,
+	allocator<char> > ostringstream;
+typedef basic_stringstream<char, char_traits<char>,
+	allocator<char> > stringstream;
+typedef basic_filebuf<char, char_traits<char> > filebuf;
+typedef basic_ifstream<char, char_traits<char> > ifstream;
+typedef basic_ofstream<char, char_traits<char> > ofstream;
+typedef basic_fstream<char, char_traits<char> > fstream;
+
+		
+typedef basic_ios<wchar_t, char_traits<wchar_t> > wios;
+typedef basic_streambuf<wchar_t, char_traits<wchar_t> >
+	wstreambuf;
+typedef basic_istream<wchar_t, char_traits<wchar_t> > wistream;
+typedef basic_ostream<wchar_t, char_traits<wchar_t> > wostream;
+typedef basic_iostream<wchar_t, char_traits<wchar_t> > wiostream;
+typedef basic_stringbuf<wchar_t, char_traits<wchar_t>,
+	allocator<wchar_t> > wstringbuf;
+typedef basic_istringstream<wchar_t, char_traits<wchar_t>,
+	allocator<wchar_t> > wistringstream;
+typedef basic_ostringstream<wchar_t, char_traits<wchar_t>,
+	allocator<wchar_t> > wostringstream;
+typedef basic_stringstream<wchar_t, char_traits<wchar_t>,
+	allocator<wchar_t> > wstringstream;
+typedef basic_filebuf<wchar_t, char_traits<wchar_t> > wfilebuf;
+typedef basic_ifstream<wchar_t, char_traits<wchar_t> > wifstream;
+typedef basic_ofstream<wchar_t, char_traits<wchar_t> > wofstream;
+typedef basic_fstream<wchar_t, char_traits<wchar_t> > wfstream;
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+		
+template<class _Ty> inline
+	void swap(_Ty& _Left, _Ty& _Right)
+	{	
+	_Ty _Tmp = _Left;
+	_Left = _Right, _Right = _Tmp;
+	}
+
+		
+template<class _Ty1,
+	class _Ty2> struct pair
+	{	
+	typedef pair<_Ty1, _Ty2> _Myt;
+	typedef _Ty1 first_type;
+	typedef _Ty2 second_type;
+
+	pair()
+		: first(_Ty1()), second(_Ty2())
+		{	
+		}
+
+	pair(const _Ty1& _Val1, const _Ty2& _Val2)
+		: first(_Val1), second(_Val2)
+		{	
+		}
+
+	template<class _Other1,
+		class _Other2>
+		pair(const pair<_Other1, _Other2>& _Right)
+		: first(_Right.first), second(_Right.second)
+		{	
+		}
+
+	void swap(_Myt& _Right)
+		{	
+		std::swap(first, _Right.first);
+		std::swap(second, _Right.second);
+		}
+
+	_Ty1 first;	
+	_Ty2 second;	
+	};
+
+		
+template<class _Ty1,
+	class _Ty2> inline
+	bool operator==(const pair<_Ty1, _Ty2>& _Left,
+		const pair<_Ty1, _Ty2>& _Right)
+	{	
+	return (_Left.first == _Right.first && _Left.second == _Right.second);
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	bool operator!=(const pair<_Ty1, _Ty2>& _Left,
+		const pair<_Ty1, _Ty2>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	bool operator<(const pair<_Ty1, _Ty2>& _Left,
+		const pair<_Ty1, _Ty2>& _Right)
+	{	
+	return (_Left.first < _Right.first ||
+		!(_Right.first < _Left.first) && _Left.second < _Right.second);
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	bool operator>(const pair<_Ty1, _Ty2>& _Left,
+		const pair<_Ty1, _Ty2>& _Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	bool operator<=(const pair<_Ty1, _Ty2>& _Left,
+		const pair<_Ty1, _Ty2>& _Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	bool operator>=(const pair<_Ty1, _Ty2>& _Left,
+		const pair<_Ty1, _Ty2>& _Right)
+	{	
+	return (!(_Left < _Right));
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	pair<_Ty1, _Ty2> make_pair(_Ty1 _Val1, _Ty2 _Val2)
+	{	
+	return (pair<_Ty1, _Ty2>(_Val1, _Val2));
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	void swap(pair<_Ty1, _Ty2>& _Left, pair<_Ty1, _Ty2>& _Right)
+	{	
+	_Left.swap(_Right);
+	}
+
+		
+	namespace rel_ops
+		{	
+template<class _Ty> inline
+	bool  operator!=(const _Ty& _Left, const _Ty& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Ty> inline
+	bool operator>(const _Ty& _Left, const _Ty& _Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _Ty> inline
+	bool operator<=(const _Ty& _Left, const _Ty& _Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _Ty> inline
+	bool operator>=(const _Ty& _Left, const _Ty& _Right)
+	{	
+	return (!(_Left < _Right));
+	}
+		}
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   
+   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+ 
+
+
+
+ 
+
+
+
+struct __type_info_node {
+    void *memPtr;
+    __type_info_node* next;
+};
+
+extern __type_info_node __type_info_root_node;
+
+class type_info {
+public:
+    virtual ~type_info();
+     bool  operator==(const type_info& rhs) const;
+     bool  operator!=(const type_info& rhs) const;
+     int  before(const type_info& rhs) const;
+     const char*  name(__type_info_node* __ptype_info_node = &__type_info_root_node) const;
+     const char*  raw_name() const;
+private:
+    void *_m_data;
+    char _m_d_name[1];
+     type_info(const type_info& rhs);
+    type_info&  operator=(const type_info& rhs);
+     static const char *__cdecl _Name_base(const type_info *,__type_info_node* __ptype_info_node);
+     static void __cdecl _Type_info_dtor(type_info *);
+};
+
+ 
+
+ namespace std {
+
+using ::type_info;
+
+ }
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+  
+
+
+
+
+ 
+ }
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+
+
+
+
+
+typedef void (__cdecl *terminate_function)();
+typedef void (__cdecl *terminate_handler)();
+typedef void (__cdecl *unexpected_function)();
+typedef void (__cdecl *unexpected_handler)();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct _EXCEPTION_POINTERS;
+
+typedef void (__cdecl *_se_translator_function)(unsigned int, struct _EXCEPTION_POINTERS*);
+
+
+ __declspec(noreturn) void __cdecl terminate(void);
+ void __cdecl unexpected(void);
+
+ int __cdecl _is_exception_typeof(     const type_info &_Type,      struct _EXCEPTION_POINTERS * _ExceptionPtr);
+
+
+
+ terminate_function __cdecl set_terminate(       terminate_function _NewPtFunc);
+extern "C"  terminate_function __cdecl _get_terminate(void);
+ unexpected_function __cdecl set_unexpected(       unexpected_function _NewPtFunc);
+extern "C"  unexpected_function __cdecl _get_unexpected(void);
+
+
+
+
+ _se_translator_function __cdecl _set_se_translator(       _se_translator_function _NewPtFunc);
+
+ bool __cdecl __uncaught_exception();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(pop)
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef struct _heapinfo {
+        int * _pentry;
+        size_t _size;
+        int _useflag;
+        } _HEAPINFO;
+
+
+
+
+
+
+extern __declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_amblksiz" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) unsigned int _amblksiz;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   __declspec(noalias) __declspec(restrict)         void * __cdecl calloc(     size_t _NumOfElements,      size_t _SizeOfElements);
+                     __declspec(noalias)                                                                             void   __cdecl free(       void * _Memory);
+   __declspec(noalias) __declspec(restrict)                                   void * __cdecl malloc(     size_t _Size);
+                     __declspec(noalias) __declspec(restrict)                                void * __cdecl realloc(       void * _Memory,      size_t _NewSize);
+                     __declspec(noalias) __declspec(restrict)                            void * __cdecl _recalloc(       void * _Memory,      size_t _Count,      size_t _Size);
+                     __declspec(noalias)                                                                             void   __cdecl _aligned_free(       void * _Memory);
+                     __declspec(noalias) __declspec(restrict)                                   void * __cdecl _aligned_malloc(     size_t _Size,      size_t _Alignment);
+                     __declspec(noalias) __declspec(restrict)                                   void * __cdecl _aligned_offset_malloc(     size_t _Size,      size_t _Alignment,      size_t _Offset);
+                     __declspec(noalias) __declspec(restrict)                                   void * __cdecl _aligned_realloc(       void * _Memory,      size_t _Size,      size_t _Alignment);
+                     __declspec(noalias) __declspec(restrict)                            void * __cdecl _aligned_recalloc(       void * _Memory,      size_t _Count,      size_t _Size,      size_t _Alignment);
+                     __declspec(noalias) __declspec(restrict)                                   void * __cdecl _aligned_offset_realloc(       void * _Memory,      size_t _Size,      size_t _Alignment,      size_t _Offset);
+                     __declspec(noalias) __declspec(restrict)                            void * __cdecl _aligned_offset_recalloc(       void * _Memory,      size_t _Count,      size_t _Size,      size_t _Alignment,      size_t _Offset);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ int     __cdecl _resetstkoflw (void);
+
+
+
+ unsigned long __cdecl _set_malloc_crt_max_wait(     unsigned long _NewValue);
+
+
+
+
+
+
+
+
+
+
+      void *  __cdecl _expand(     void * _Memory,      size_t _NewSize);
+  size_t  __cdecl _msize(     void * _Memory);
+
+
+
+
+
+
+   void *          __cdecl _alloca(     size_t _Size);
+  size_t  __cdecl _get_sbh_threshold(void);
+ int     __cdecl _set_sbh_threshold(     size_t _NewValue);
+ errno_t __cdecl _set_amblksiz(     size_t _Value);
+ errno_t __cdecl _get_amblksiz(     size_t * _Value);
+  int     __cdecl _heapadd(     void * _Memory,      size_t _Size);
+  int     __cdecl _heapchk(void);
+  int     __cdecl _heapmin(void);
+ int     __cdecl _heapset(     unsigned int _Fill);
+  int     __cdecl _heapwalk(     _HEAPINFO * _EntryInfo);
+ size_t  __cdecl _heapused(size_t * _Used, size_t * _Commit);
+
+ intptr_t __cdecl _get_heap_handle(void);
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef char __static_assert_t[ (sizeof(unsigned int) <= 8) ];
+
+
+__inline void *_MarkAllocaS(        void *_Ptr, unsigned int _Marker)
+{
+    if (_Ptr)
+    {
+        *((unsigned int*)_Ptr) = _Marker;
+        _Ptr = (char*)_Ptr + 8;
+    }
+    return _Ptr;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+__declspec(noalias) __inline void __cdecl _freea(       void * _Memory)
+{
+    unsigned int _Marker;
+    if (_Memory)
+    {
+        _Memory = (char*)_Memory - 8;
+        _Marker = *(unsigned int *)_Memory;
+        if (_Marker == 0xDDDD)
+        {
+            free(_Memory);
+        }
+
+        else if (_Marker != 0xCCCC)
+        {
+            ((void)0);
+        }
+
+    }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+ 
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef const char *__exString;
+extern "C" size_t __cdecl strlen(const char *);
+
+extern "C"  errno_t __cdecl strcpy_s(       char * _Dst,      size_t _DstSize,        const char * _Src);
+
+
+
+
+
+
+ namespace std {
+
+class  exception
+	{	
+public:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     exception();
+     exception(const char *const&);
+     exception(const char *const&, int);
+     exception(const exception&);
+    exception&  operator=(const exception&);
+    virtual  ~exception();
+    virtual const char *  what() const;
+
+private:
+	const char *_m_what;
+	int _m_doFree;
+	};
+
+using ::set_terminate; using ::terminate_handler; using ::terminate; using ::set_unexpected; using ::unexpected_handler; using ::unexpected;
+
+typedef void (__cdecl *_Prhand)(const exception&);
+
+
+
+
+
+ bool __cdecl uncaught_exception();
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+class bad_exception : public exception
+	{	
+public:
+	 bad_exception(const char *_Message = "bad exception")
+		throw ()
+		: exception(_Message)
+		{	
+		}
+
+	virtual  ~bad_exception() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+
+static const char * _bad_alloc_Message = "bad allocation";
+
+		
+class bad_alloc : public exception
+	{	
+public:
+	 bad_alloc(const char *_Message) throw ()
+		: exception(_Message)
+		{	
+		}
+
+	 bad_alloc() throw ()
+		: exception(_bad_alloc_Message, 1)
+		{	
+		}
+
+	virtual  ~bad_alloc() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ namespace std {
+
+class  bad_cast : public exception {
+public:
+
+
+
+
+
+
+
+
+
+
+     bad_cast(const char * _Message = "bad cast");
+     bad_cast(const bad_cast &);
+    virtual  ~bad_cast();
+
+};
+
+class  bad_typeid : public exception {
+public:
+
+
+
+
+
+
+
+
+
+
+     bad_typeid(const char * _Message = "bad typeid");
+     bad_typeid(const bad_typeid &);
+    virtual  ~bad_typeid();
+
+
+};
+
+class  __non_rtti_object : public bad_typeid {
+public:
+
+
+
+
+
+
+
+
+
+
+     __non_rtti_object(const char * _Message);
+     __non_rtti_object(const __non_rtti_object &);
+    virtual  ~__non_rtti_object();
+
+};
+
+ }
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost{
+
+
+
+
+   typedef long long long_long_type;
+   typedef unsigned long long ulong_long_type;
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< int N > struct int_;
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+struct integral_c_tag { static const int value = 0; };
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< int N >
+struct int_
+{
+    static const int value = N;
+
+
+
+
+
+    typedef int_ type;
+
+    typedef int value_type;
+    typedef integral_c_tag tag;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    typedef boost::mpl::int_< static_cast<int>((value + 1)) > next;
+    typedef boost::mpl::int_< static_cast<int>((value - 1)) > prior;
+
+
+    
+    
+    
+    
+    operator int() const { return static_cast<int>(this->value); } 
+};
+
+
+template< int N >
+int const boost::mpl::int_< N >::value;
+
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename F > struct template_arity;
+
+}}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< bool C_ > struct bool_;
+
+
+typedef bool_<true> true_;
+typedef bool_<false> false_;
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< bool C_ > struct bool_
+{
+    static const bool value = C_;
+    typedef integral_c_tag tag;
+    typedef bool_ type;
+    typedef bool value_type;
+    operator bool() const { return this->value; }
+};
+
+
+template< bool C_ >
+bool const bool_<C_>::value;
+
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+
+
+
+
+template< typename T, T N > struct integral_c;
+
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< typename T, T N >
+struct integral_c
+{
+    static const T value = N;
+
+
+
+
+
+    typedef integral_c type;
+
+    typedef T value_type;
+    typedef integral_c_tag tag;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    typedef integral_c< T, static_cast<T>((value + 1)) > next;
+    typedef integral_c< T, static_cast<T>((value - 1)) > prior;
+
+
+    
+    
+    
+    
+    operator T() const { return static_cast<T>(this->value); } 
+};
+
+
+template< typename T, T N >
+T const integral_c< T, N >::value;
+
+
+}}
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< bool C >
+struct integral_c<bool, C>
+{
+    static const bool value = C;
+    typedef integral_c_tag tag;
+    typedef integral_c type;
+    typedef bool value_type;
+    operator bool() const { return this->value; }
+};
+}}
+
+
+
+
+
+namespace boost{
+
+
+
+
+template <class T, T val>
+
+struct integral_constant : public mpl::integral_c<T, val>
+{
+   typedef integral_constant<T,val> type;
+};
+
+template<> struct integral_constant<bool,true> : public mpl::true_ 
+{
+
+
+
+
+
+
+
+   typedef integral_constant<bool,true> type;
+};
+template<> struct integral_constant<bool,false> : public mpl::false_ 
+{
+
+
+
+
+
+
+
+   typedef integral_constant<bool,false> type;
+};
+
+typedef integral_constant<bool,true> true_type;
+typedef integral_constant<bool,false> false_type;
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+template< typename T > struct is_lvalue_reference : ::boost::integral_constant<bool,false> {   }; 
+template< typename T > struct is_lvalue_reference< T& > : ::boost::integral_constant<bool,true> {  };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+template< typename T > struct is_rvalue_reference : ::boost::integral_constant<bool,false> {   }; 
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+typedef char yes_type;
+struct no_type
+{
+   char padding[8];
+};
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false>
+struct ice_or;
+
+template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
+struct ice_or
+{
+    static const bool value = true;
+};
+
+template <>
+struct ice_or<false, false, false, false, false, false, false>
+{
+    static const bool value = false;
+};
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+template <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true>
+struct ice_and;
+
+template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7>
+struct ice_and
+{
+    static const bool value = false;
+};
+
+template <>
+struct ice_and<true, true, true, true, true, true, true>
+{
+    static const bool value = true;
+};
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+template <bool b>
+struct ice_not
+{
+    static const bool value = true;
+};
+
+template <>
+struct ice_not<true>
+{
+    static const bool value = false;
+};
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+template <int b1, int b2>
+struct ice_eq
+{
+    static const bool value = (b1 == b2);
+};
+
+template <int b1, int b2>
+struct ice_ne
+{
+    static const bool value = (b1 != b2);
+};
+
+
+template <int b1, int b2> bool const ice_eq<b1,b2>::value;
+template <int b1, int b2> bool const ice_ne<b1,b2>::value;
+
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_reference_impl
+{
+   static const bool value = (::boost::type_traits::ice_or< ::boost::is_lvalue_reference<T>::value, ::boost::is_rvalue_reference<T>::value >::value);
+};
+
+} 
+
+template< typename T > struct is_reference : ::boost::integral_constant<bool,::boost::detail::is_reference_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+
+struct false_result
+{
+    template <typename T> struct result_
+    {
+        static const bool value = false;
+    };
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+
+
+no_type __cdecl is_function_ptr_tester(...);
+
+
+
+
+
+template <class R >
+yes_type is_function_ptr_tester(R (*)());
+
+template <class R >
+yes_type is_function_ptr_tester(R (*)( ...));
+
+
+template <class R >
+yes_type is_function_ptr_tester(R (__stdcall*)());
+template <class R >
+yes_type is_function_ptr_tester(R (__stdcall*)( ...));
+
+template <class R >
+yes_type is_function_ptr_tester(R (__fastcall*)());
+template <class R >
+yes_type is_function_ptr_tester(R (__fastcall*)( ...));
+
+template <class R >
+yes_type is_function_ptr_tester(R (__cdecl*)());
+template <class R >
+yes_type is_function_ptr_tester(R (__cdecl*)( ...));
+
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (*)( T0));
+
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (*)( T0 ...));
+
+
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 ...));
+
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 ...));
+
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0));
+template <class R , class T0 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 ...));
+
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1));
+
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 ...));
+
+
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 ...));
+
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 ...));
+
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1));
+template <class R , class T0 , class T1 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 ...));
+
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2));
+
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 ...));
+
+
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 ...));
+
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 ...));
+
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2));
+template <class R , class T0 , class T1 , class T2 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3));
+
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3));
+template <class R , class T0 , class T1 , class T2 , class T3 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__stdcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__fastcall*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+template <class R , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_function_ptr_tester(R (__cdecl*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+
+
+
+
+
+
+
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+namespace detail {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename T>
+struct is_function_impl
+{
+
+#pragma warning(push)
+#pragma warning(disable:6334)
+
+    static T* t;
+    static const bool value = sizeof(::boost::type_traits::is_function_ptr_tester(t)) == sizeof(::boost::type_traits::yes_type);
+
+#pragma warning(pop)
+
+};
+
+
+template <typename T>
+struct is_function_impl<T&> : public false_type
+{};
+
+
+
+
+} 
+
+
+
+
+
+
+template< typename T > struct is_function : ::boost::integral_constant<bool,::boost::detail::is_function_impl<T>::value> {   }; 
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost
+{
+ 
+  template <bool B, class T = void>
+  struct enable_if_c {
+    typedef T type;
+  };
+
+  template <class T>
+  struct enable_if_c<false, T> {};
+
+  template <class Cond, class T = void> 
+  struct enable_if : public enable_if_c<Cond::value, T> {};
+
+  template <bool B, class T>
+  struct lazy_enable_if_c {
+    typedef typename T::type type;
+  };
+
+  template <class T>
+  struct lazy_enable_if_c<false, T> {};
+
+  template <class Cond, class T> 
+  struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {};
+
+
+  template <bool B, class T = void>
+  struct disable_if_c {
+    typedef T type;
+  };
+
+  template <class T>
+  struct disable_if_c<true, T> {};
+
+  template <class Cond, class T = void> 
+  struct disable_if : public disable_if_c<Cond::value, T> {};
+
+  template <bool B, class T>
+  struct lazy_disable_if_c {
+    typedef typename T::type type;
+  };
+
+  template <class T>
+  struct lazy_disable_if_c<true, T> {};
+
+  template <class Cond, class T> 
+  struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {};
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost
+{
+    namespace type_of
+    {
+
+        
+
+        template<int N> struct the_counter;
+
+        template<typename T,int N = 5>
+        struct encode_counter
+        {
+            __if_exists(the_counter<N + 256>)
+            {
+                static const unsigned count=(encode_counter<T,N + 257>::count);
+            }
+            __if_not_exists(the_counter<N + 256>)
+            {
+                __if_exists(the_counter<N + 64>)
+                {
+                    static const unsigned count=(encode_counter<T,N + 65>::count);
+                }
+                __if_not_exists(the_counter<N + 64>)
+                {
+                    __if_exists(the_counter<N + 16>)
+                    {
+                        static const unsigned count=(encode_counter<T,N + 17>::count);
+                    }
+                    __if_not_exists(the_counter<N + 16>)
+                    {
+                        __if_exists(the_counter<N + 4>)
+                        {
+                            static const unsigned count=(encode_counter<T,N + 5>::count);
+                        }
+                        __if_not_exists(the_counter<N + 4>)
+                        {
+                            __if_exists(the_counter<N>)
+                            {
+                                static const unsigned count=(encode_counter<T,N + 1>::count);
+                            }
+                            __if_not_exists(the_counter<N>)
+                            {
+                                static const unsigned count=N;
+                                typedef the_counter<N> type;
+                            }
+                        }
+                    }
+                }
+            }
+        };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        struct msvc_extract_type_default_param {};
+
+        template<typename ID, typename T = msvc_extract_type_default_param>
+        struct msvc_extract_type;
+
+        template<typename ID>
+        struct msvc_extract_type<ID, msvc_extract_type_default_param> {
+            template<bool>
+            struct id2type_impl;
+
+            typedef id2type_impl<true> id2type;
+        };
+
+        template<typename ID, typename T>
+        struct msvc_extract_type : msvc_extract_type<ID,msvc_extract_type_default_param>
+        {
+            template<>
+            struct id2type_impl<true>  
+            {
+                typedef T type;
+            };
+            template<bool>
+            struct id2type_impl;
+
+            typedef id2type_impl<true> id2type;
+        };
+
+        template<typename T, typename ID>
+        struct msvc_register_type : msvc_extract_type<ID, T>
+        {
+        };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        template<int ID>
+        struct msvc_typeid_wrapper {
+            typedef typename msvc_extract_type<mpl::int_<ID> >::id2type id2type;
+            typedef typename id2type::type type;
+        };
+        
+        template<>
+        struct msvc_typeid_wrapper<1> {
+            typedef msvc_typeid_wrapper<1> type;
+        };
+        
+        template<>
+        struct msvc_typeid_wrapper<4> {
+            typedef msvc_typeid_wrapper<4> type;
+        };
+
+        
+        template<typename T>
+        struct encode_type
+        {
+            
+            static const unsigned value=(boost::type_of::encode_counter<T>::count);
+            
+            typedef typename msvc_register_type<T,mpl::int_<value> >::id2type type;
+            
+            static const unsigned next=value+1;
+            
+            ;
+        };
+
+        template<class T>
+        struct sizer
+        {
+            typedef char(*type)[encode_type<T>::value];
+        };
+
+        template<typename T> typename disable_if<
+            typename is_function<T>::type,
+            typename sizer<T>::type>::type encode_start(T const&);
+
+        template<typename T> typename enable_if<
+            typename is_function<T>::type,
+            typename sizer<T>::type>::type encode_start(T&);
+
+
+
+
+        template<typename Organizer, typename T>
+        msvc_register_type<T,Organizer> typeof_register_type(const T&,Organizer* =0);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace scope_exit { namespace aux {
+
+    
+    
+    
+    
+    template<int Dummy = 0>
+    struct declared
+    {
+        void* value;
+        static int const cmp2 = 0;
+        friend void operator>(int, declared const&) {}
+    };
+
+    struct undeclared { declared<> dummy[2]; };
+
+    template<int> struct resolve;
+
+    template<>
+    struct resolve<sizeof(declared<>)>
+    {
+        static const int cmp1 = 0;
+    };
+
+    template<>
+    struct resolve<sizeof(undeclared)>
+    {
+        template<int>
+        struct cmp1
+        {
+            static int const cmp2 = 0;
+        };
+    };
+} } }
+
+extern boost::scope_exit::aux::undeclared boost_scope_exit_args; 
+
+
+namespace boost { namespace scope_exit { namespace aux {
+
+typedef void (*ref_tag)(int&);
+typedef void (*val_tag)(int );
+
+template<class T, class Tag> struct member;
+
+template<class T>
+struct member<T,ref_tag>
+{
+    T& value;
+
+    member(T& ref) : value(ref) {}
+
+};
+
+template<class T>
+struct member<T,val_tag>
+{
+    T value;
+
+    member(T& val) : value(val) {}
+
+};
+
+template<class T> inline T& deref(T* p, ref_tag) { return *p; }
+template<class T> inline T& deref(T& r, val_tag) { return  r; }
+
+template<class T>
+struct wrapper
+{
+    typedef T type;
+};
+
+template<class T> wrapper<T> wrap(T&);
+
+} } }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    namespace boost { namespace scope_exit { namespace msvc_typeof_this
+    {
+        template<int ID>
+        struct msvc_typeid_wrapper {
+            typedef typename boost::type_of::msvc_extract_type<mpl::int_<ID> >::id2type id2type;
+            typedef typename id2type::type type;
+        };
+        template<>
+        struct msvc_typeid_wrapper<4> {
+            typedef msvc_typeid_wrapper<4> type;
+        };
+        template<typename T>
+        struct encode_type
+        {
+            static const unsigned value=(boost::type_of::encode_counter<T>::count);
+            typedef typename boost::type_of::msvc_register_type<T,mpl::int_<value> >::id2type type;
+            static const unsigned next=value+1;
+            ;
+        };
+        template<class T>
+        struct sizer
+        {
+            typedef char(*type)[encode_type<T>::value];
+        };
+        template<typename T> typename disable_if<
+            typename is_function<T>::type,
+            typename sizer<T>::type>::type encode_start(T const&);
+        template<typename T> typename enable_if<
+            typename is_function<T>::type,
+            typename sizer<T>::type>::type encode_start(T&);
+        template<typename Organizer, typename T>
+        boost::type_of::msvc_register_type<T,Organizer> typeof_register_type(const T&,Organizer* =0);
+
+    }}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(disable:4003)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local { namespace aux {
+
+
+
+
+
+
+template<typename T> struct add_pointed_const { typedef T type; };
+
+template<typename T> struct add_pointed_const<T*> { typedef T const* type; };
+
+template<typename T> struct add_pointed_const<T const*>
+    { typedef T const* type; };
+
+template<typename T> struct add_pointed_const<T* const>
+    { typedef T const* const type; };
+
+template<typename T> struct add_pointed_const<T const* const>
+    { typedef T const* const type; };
+
+}}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4181) 
+
+
+template< typename T > struct add_const { typedef T const type;  }; 
+
+
+#pragma warning(pop)
+
+
+
+template< typename T > struct add_const<T&> { typedef T& type; };
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4181) 
+
+
+template< typename T > struct add_cv { typedef T const volatile type;  }; 
+
+
+#pragma warning(pop)
+
+
+
+template< typename T > struct add_cv<T&> { typedef T& type; };
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename T>
+struct add_reference_rvalue_layer
+{
+    typedef T& type;
+};
+
+
+
+
+
+
+
+
+
+template <typename T>
+struct add_reference_impl
+{
+    typedef typename add_reference_rvalue_layer<T>::type type;
+};
+
+
+template< typename T > struct add_reference_impl<T&> { typedef T& type; };
+
+
+
+
+
+template<> struct add_reference_impl<void> { typedef void type; };
+
+template<> struct add_reference_impl<void const> { typedef void const type; };
+template<> struct add_reference_impl<void volatile> { typedef void volatile type; };
+template<> struct add_reference_impl<void const volatile> { typedef void const volatile type; };
+
+
+} 
+
+template< typename T > struct add_reference { typedef typename boost::detail::add_reference_impl<T>::type type;  }; 
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost{
+
+template< typename T > struct add_lvalue_reference { typedef typename boost::add_reference<T>::type type;  }; 
+
+
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+namespace detail{
+
+
+
+
+template <class T>
+struct remove_rvalue_ref
+{
+	typedef T type;
+};
+
+
+
+
+
+
+
+
+} 
+
+template< typename T > struct remove_reference { typedef typename boost::detail::remove_rvalue_ref<T>::type type;  }; 
+template< typename T > struct remove_reference<T&> { typedef T type; };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename T>
+struct add_pointer_impl
+{
+    typedef typename remove_reference<T>::type no_ref_type;
+    typedef no_ref_type* type;
+};
+
+
+
+} 
+
+template< typename T > struct add_pointer { typedef typename boost::detail::add_pointer_impl<T>::type type;  }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+template< typename T > struct is_void : ::boost::integral_constant<bool,false> {   }; 
+template<> struct is_void< void > : ::boost::integral_constant<bool,true> {   };
+
+
+template<> struct is_void< void const > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_void< void volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_void< void const volatile > : ::boost::integral_constant<bool,true> {   };
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace type_traits_detail {
+
+    template <typename T, bool b>
+    struct add_rvalue_reference_helper
+    { typedef T   type; };
+
+    template <typename T>
+    struct add_rvalue_reference_helper<T, true>
+    {
+
+
+
+        typedef T   type;
+
+    };
+
+    template <typename T>
+    struct add_rvalue_reference_imp
+    { 
+       typedef typename boost::type_traits_detail::add_rvalue_reference_helper
+                  <T, (!is_void<T>::value && !is_reference<T>::value) >::type type; 
+    };
+
+}
+
+template< typename T > struct add_rvalue_reference { typedef typename boost::type_traits_detail::add_rvalue_reference_imp<T>::type type;  }; 
+
+}  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4181) 
+
+
+template< typename T > struct add_volatile { typedef T volatile type;  }; 
+
+
+#pragma warning(pop)
+
+
+
+template< typename T > struct add_volatile<T&> { typedef T& type; };
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+template< typename T, typename U > struct is_same : ::boost::integral_constant<bool,false> {   }; 
+template< typename T > struct is_same< T,T > : ::boost::integral_constant<bool,true> {   };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< std::size_t N > struct size_t;
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< std::size_t N >
+struct size_t
+{
+    static const std::size_t value = N;
+
+
+
+
+
+    typedef size_t type;
+
+    typedef std::size_t value_type;
+    typedef integral_c_tag tag;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    typedef boost::mpl::size_t< static_cast<std::size_t>((value + 1)) > next;
+    typedef boost::mpl::size_t< static_cast<std::size_t>((value - 1)) > prior;
+
+
+    
+    
+    
+    
+    operator std::size_t() const { return static_cast<std::size_t>(this->value); } 
+};
+
+
+template< std::size_t N >
+std::size_t const boost::mpl::size_t< N >::value;
+
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable: 4121 4512) 
+
+
+
+
+
+namespace boost {
+
+template <typename T> struct alignment_of;
+
+
+namespace detail {
+
+
+#pragma warning(push)
+#pragma warning(disable:4324) 
+
+template <typename T>
+struct alignment_of_hack
+{
+    char c;
+    T t;
+    alignment_of_hack();
+};
+
+#pragma warning(pop)
+
+
+template <unsigned A, unsigned S>
+struct alignment_logic
+{
+    static const std::size_t value = A < S ? A : S;
+};
+
+
+template< typename T >
+struct alignment_of_impl
+{
+
+    
+    
+    
+    
+    
+    static const std::size_t value = (::boost::detail::alignment_logic< sizeof(::boost::detail::alignment_of_hack<T>) - sizeof(T), __alignof(T) >::value);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+};
+
+} 
+
+template< typename T > struct alignment_of : ::boost::integral_constant<std::size_t,::boost::detail::alignment_of_impl<T>::value> {   }; 
+
+
+
+
+template <typename T>
+struct alignment_of<T&>
+    : alignment_of<T*>
+{
+};
+
+
+
+
+
+
+
+
+
+
+template<> struct alignment_of<void> : ::boost::integral_constant<std::size_t,0> {   };
+
+template<> struct alignment_of<void const> : ::boost::integral_constant<std::size_t,0> {   };
+template<> struct alignment_of<void volatile> : ::boost::integral_constant<std::size_t,0> {   };
+template<> struct alignment_of<void const volatile> : ::boost::integral_constant<std::size_t,0> {   };
+
+
+} 
+
+
+
+
+
+#pragma warning(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename T > struct value_type_wknd
+{
+    typedef typename T::value_type type;
+};
+
+
+
+
+
+
+
+
+}}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+struct void_;
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+
+struct na
+{
+    typedef na type;
+    enum { value = 0 };
+};
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< typename T >
+struct is_na
+    : false_
+{
+
+
+
+};
+
+template<>
+struct is_na<na>
+    : true_
+{
+
+
+
+};
+
+template< typename T >
+struct is_not_na
+    : true_
+{
+
+
+
+};
+
+template<>
+struct is_not_na<na>
+    : false_
+{
+
+
+
+};
+
+
+template< typename T, typename U > struct if_na
+{
+    typedef T type;
+};
+
+template< typename U > struct if_na<na,U>
+{
+    typedef U type;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template< 
+      typename T = na
+    , typename Tag = void_
+    
+    >
+struct lambda;
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+
+
+template<
+      bool C
+    , typename T1
+    , typename T2
+    >
+struct if_c
+{
+    typedef T1 type;
+};
+
+template<
+      typename T1
+    , typename T2
+    >
+struct if_c<false,T1,T2>
+{
+    typedef T2 type;
+};
+
+
+
+template<
+      typename T1 = na
+    , typename T2 = na
+    , typename T3 = na
+    >
+struct if_
+{
+ private:
+    
+    typedef if_c<
+
+
+
+          static_cast<bool>(T1::value)
+
+        , T2
+        , T3
+        > almost_type_;
+ 
+ public:
+    typedef typename almost_type_::type type;
+    
+    
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<> struct if_<  na , na , na > { template<  typename T1 , typename T2 , typename T3 , typename T4 =na  , typename T5 =na  > struct apply : if_<  T1 , T2 , T3 > { }; }; template< typename Tag > struct lambda< if_<  na , na , na > , Tag  > { typedef false_ is_le; typedef if_<  na , na , na > result_; typedef if_<  na , na , na > type; };   
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+template< typename T > struct is_integral : ::boost::integral_constant<bool,false> {   }; 
+
+template<> struct is_integral< unsigned char > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned char const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned char volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned char const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< unsigned short > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned short const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned short volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned short const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< unsigned int > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned int const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned int volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned int const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< unsigned long > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned long const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned long volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< unsigned long const volatile > : ::boost::integral_constant<bool,true> {   };
+
+template<> struct is_integral< signed char > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed char const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed char volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed char const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< signed short > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed short const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed short volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed short const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< signed int > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed int const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed int volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed int const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< signed long > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed long const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed long volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< signed long const volatile > : ::boost::integral_constant<bool,true> {   };
+
+template<> struct is_integral< bool > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< bool const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< bool volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< bool const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< char > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< char const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< char volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< char const volatile > : ::boost::integral_constant<bool,true> {   };
+
+
+
+
+
+template<> struct is_integral< wchar_t > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< wchar_t const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< wchar_t volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< wchar_t const volatile > : ::boost::integral_constant<bool,true> {   };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<> struct is_integral< ::boost::ulong_long_type > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< ::boost::ulong_long_type const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< ::boost::ulong_long_type volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< ::boost::ulong_long_type const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_integral< ::boost::long_long_type > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< ::boost::long_long_type const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< ::boost::long_long_type volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_integral< ::boost::long_long_type const volatile > : ::boost::integral_constant<bool,true> {   };
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+template< typename T > struct is_float : ::boost::integral_constant<bool,false> {   }; 
+template<> struct is_float< float > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< float const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< float volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< float const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_float< double > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< double const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< double volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< double const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_float< long double > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< long double const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< long double volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_float< long double const volatile > : ::boost::integral_constant<bool,true> {   };
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+namespace detail {
+
+template< typename T >
+struct is_arithmetic_impl
+{ 
+    static const bool value = (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_float<T>::value >::value); 
+};
+
+} 
+
+
+
+
+
+
+template< typename T > struct is_arithmetic : ::boost::integral_constant<bool,::boost::detail::is_arithmetic_impl<T>::value> {   }; 
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template< typename T > struct is_enum : ::boost::integral_constant<bool,__is_enum(T)> {   }; 
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+template< typename T > struct is_array : ::boost::integral_constant<bool,false> {   }; 
+
+template< typename T, std::size_t N > struct is_array< T[N] > : ::boost::integral_constant<bool,true> {  };
+template< typename T, std::size_t N > struct is_array< T const[N] > : ::boost::integral_constant<bool,true> {  };
+template< typename T, std::size_t N > struct is_array< T volatile[N] > : ::boost::integral_constant<bool,true> {  };
+template< typename T, std::size_t N > struct is_array< T const volatile[N] > : ::boost::integral_constant<bool,true> {  };
+
+template< typename T > struct is_array< T[] > : ::boost::integral_constant<bool,true> {  };
+template< typename T > struct is_array< T const[] > : ::boost::integral_constant<bool,true> {  };
+template< typename T > struct is_array< T volatile[] > : ::boost::integral_constant<bool,true> {  };
+template< typename T > struct is_array< T const volatile[] > : ::boost::integral_constant<bool,true> {  };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace type_traits {
+
+no_type __cdecl is_mem_fun_pointer_tester(...);
+
+
+
+
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)() const volatile);
+
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( ...) const volatile);
+
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( ...) const volatile);
+
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( ...) const volatile);
+
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)());
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)() const volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...));
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) volatile);
+
+template <class R, class T >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( ...) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0) const volatile);
+
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 ...) const volatile);
+
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 ...) const volatile);
+
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 ...) const volatile);
+
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0) const volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...));
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) volatile);
+
+template <class R, class T , class T0 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1) const volatile);
+
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1) const volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...));
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) volatile);
+
+template <class R, class T , class T0 , class T1 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 ...) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__stdcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__fastcall T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24) const volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...));
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) volatile);
+
+template <class R, class T , class T0 , class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 , class T16 , class T17 , class T18 , class T19 , class T20 , class T21 , class T22 , class T23 , class T24 >
+yes_type is_mem_fun_pointer_tester(R (__cdecl T::*const volatile*)( T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 ...) const volatile);
+
+
+
+
+
+
+
+
+
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace detail {
+
+
+
+template <bool>
+struct is_mem_fun_pointer_select
+    : ::boost::type_traits::false_result
+{
+};
+
+template <>
+struct is_mem_fun_pointer_select<false>
+{
+    template <typename T> struct result_
+    {
+
+#pragma warning(push)
+#pragma warning(disable:6334)
+
+        static T* make_t;
+        typedef result_<T> self_type;
+
+        static const bool value = ( 1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t)) );
+
+#pragma warning(pop)
+
+    };
+};
+
+template <typename T>
+struct is_member_function_pointer_impl
+    : is_mem_fun_pointer_select<
+          ::boost::type_traits::ice_or<
+              ::boost::is_reference<T>::value
+            , ::boost::is_array<T>::value
+            >::value
+        >::template result_<T>
+{
+};
+
+
+template <typename T>
+struct is_member_function_pointer_impl<T&> : public false_type{};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<> struct is_member_function_pointer_impl< void > { static const bool value = (false); };
+
+template<> struct is_member_function_pointer_impl< void const > { static const bool value = (false); };
+template<> struct is_member_function_pointer_impl< void volatile > { static const bool value = (false); };
+template<> struct is_member_function_pointer_impl< void const volatile > { static const bool value = (false); };
+
+
+} 
+
+template< typename T > struct is_member_function_pointer : ::boost::integral_constant<bool,::boost::detail::is_member_function_pointer_impl<T>::value> {   }; 
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+template< typename T > struct is_member_pointer : ::boost::integral_constant<bool,::boost::is_member_function_pointer<T>::value> {   }; 
+template< typename T, typename U > struct is_member_pointer< U T::* > : ::boost::integral_constant<bool,true> {  };
+
+
+template< typename T, typename U > struct is_member_pointer< U T::*const > : ::boost::integral_constant<bool,true> {  };
+template< typename T, typename U > struct is_member_pointer< U T::*volatile > : ::boost::integral_constant<bool,true> {  };
+template< typename T, typename U > struct is_member_pointer< U T::*const volatile > : ::boost::integral_constant<bool,true> {  };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace detail {
+
+
+
+
+
+
+
+template <typename T> struct cv_traits_imp {};
+
+template <typename T>
+struct cv_traits_imp<T*>
+{
+    static const bool is_const = false;
+    static const bool is_volatile = false;
+    typedef T unqualified_type;
+};
+
+template <typename T>
+struct cv_traits_imp<const T*>
+{
+    static const bool is_const = true;
+    static const bool is_volatile = false;
+    typedef T unqualified_type;
+};
+
+template <typename T>
+struct cv_traits_imp<volatile T*>
+{
+    static const bool is_const = false;
+    static const bool is_volatile = true;
+    typedef T unqualified_type;
+};
+
+template <typename T>
+struct cv_traits_imp<const volatile T*>
+{
+    static const bool is_const = true;
+    static const bool is_volatile = true;
+    typedef T unqualified_type;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct rvalue_ref_filter_rem_cv
+{
+	typedef typename boost::detail::cv_traits_imp<T*>::unqualified_type type;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+template< typename T > struct remove_cv { typedef typename boost::detail::rvalue_ref_filter_rem_cv<T>::type type;  }; 
+template< typename T > struct remove_cv<T&> { typedef T& type; };
+
+template< typename T, std::size_t N > struct remove_cv<T const[N]> { typedef T type[N]; };
+template< typename T, std::size_t N > struct remove_cv<T volatile[N]> { typedef T type[N]; };
+template< typename T, std::size_t N > struct remove_cv<T const volatile[N]> { typedef T type[N]; };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+namespace detail {
+
+template< typename T > struct is_pointer_helper
+{
+    static const bool value = false;
+};
+
+
+
+
+
+
+
+
+template< typename T > struct is_pointer_helper<T*> { static const bool value = true; };
+
+
+
+template< typename T >
+struct is_pointer_impl
+{
+
+
+
+
+
+
+
+
+
+
+    static const bool value = (::boost::type_traits::ice_and< ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value , ::boost::type_traits::ice_not< ::boost::is_member_pointer<T>::value >::value >::value);
+
+};
+
+} 
+
+template< typename T > struct is_pointer : ::boost::integral_constant<bool,::boost::detail::is_pointer_impl<T>::value> {   }; 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_scalar_impl
+{ 
+   static const bool value = (::boost::type_traits::ice_or< ::boost::is_arithmetic<T>::value, ::boost::is_enum<T>::value, ::boost::is_pointer<T>::value, ::boost::is_member_pointer<T>::value >::value);
+};
+
+
+
+template <> struct is_scalar_impl<void>{ static const bool value = false; };
+
+template <> struct is_scalar_impl<void const>{ static const bool value = false; };
+template <> struct is_scalar_impl<void volatile>{ static const bool value = false; };
+template <> struct is_scalar_impl<void const volatile>{ static const bool value = false; };
+
+
+} 
+
+template< typename T > struct is_scalar : ::boost::integral_constant<bool,::boost::detail::is_scalar_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+template< typename T > struct is_POD;
+
+namespace detail {
+
+
+
+template <typename T> struct is_pod_impl
+{ 
+    static const bool value = (::boost::type_traits::ice_or< ::boost::is_scalar<T>::value, ::boost::is_void<T>::value, (__is_pod(T) && __has_trivial_constructor(T)) >::value);
+};
+
+
+template <typename T, std::size_t sz>
+struct is_pod_impl<T[sz]>
+    : is_pod_impl<T>
+{
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<> struct is_pod_impl< void > { static const bool value = (true); };
+
+
+template<> struct is_pod_impl< void const > { static const bool value = (true); };
+template<> struct is_pod_impl< void volatile > { static const bool value = (true); };
+template<> struct is_pod_impl< void const volatile > { static const bool value = (true); };
+
+
+} 
+
+template< typename T > struct is_POD : ::boost::integral_constant<bool,::boost::detail::is_pod_impl<T>::value> {   }; 
+template< typename T > struct is_pod : ::boost::integral_constant<bool,::boost::detail::is_pod_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost{
+
+
+template <bool x> struct STATIC_ASSERTION_FAILURE;
+
+template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
+
+
+template<int x> struct static_assert_test{};
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable: 4121) 
+
+
+namespace boost {
+
+
+
+namespace detail {
+
+class alignment_dummy;
+typedef void (*function_ptr)();
+typedef int (alignment_dummy::*member_ptr);
+typedef int (alignment_dummy::*member_function_ptr)();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <bool found, std::size_t target, class TestType>
+struct lower_alignment_helper
+{
+    typedef char type;
+    enum { value = true };
+};
+
+template <std::size_t target, class TestType>
+struct lower_alignment_helper<false,target,TestType>
+{
+    enum { value = (alignment_of<TestType>::value == target) };
+    typedef typename mpl::if_c<value, TestType, char>::type type;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename T>
+struct has_one_T
+{
+  T data;
+};
+
+template <std::size_t target>
+union lower_alignment
+{
+    enum { found0 = false };
+
+    typename lower_alignment_helper< found0,target,char >::type t0; enum { found1 = lower_alignment_helper<found0,target,char >::value }; typename lower_alignment_helper< found1,target,short >::type t1; enum { found2 = lower_alignment_helper<found1,target,short >::value }; typename lower_alignment_helper< found2,target,int >::type t2; enum { found3 = lower_alignment_helper<found2,target,int >::value }; typename lower_alignment_helper< found3,target,long >::type t3; enum { found4 = lower_alignment_helper<found3,target,long >::value }; typename lower_alignment_helper< found4,target,::boost::long_long_type >::type t4; enum { found5 = lower_alignment_helper<found4,target,::boost::long_long_type >::value }; typename lower_alignment_helper< found5,target,float >::type t5; enum { found6 = lower_alignment_helper<found5,target,float >::value }; typename lower_alignment_helper< found6,target,double >::type t6; enum { found7 = lower_alignment_helper<found6,target,double >::value }; typename lower_alignment_helper< fou
nd7,target,long double >::type t7; enum { found8 = lower_alignment_helper<found7,target,long double >::value }; typename lower_alignment_helper< found8,target,void* >::type t8; enum { found9 = lower_alignment_helper<found8,target,void* >::value }; typename lower_alignment_helper< found9,target,function_ptr >::type t9; enum { found10 = lower_alignment_helper<found9,target,function_ptr >::value }; typename lower_alignment_helper< found10,target,member_ptr >::type t10; enum { found11 = lower_alignment_helper<found10,target,member_ptr >::value }; typename lower_alignment_helper< found11,target,member_function_ptr >::type t11; enum { found12 = lower_alignment_helper<found11,target,member_function_ptr >::value }; typename lower_alignment_helper< found12,target,boost::detail::has_one_T< char > >::type t12; enum { found13 = lower_alignment_helper<found12,target,boost::detail::has_one_T< char > >::value }; typename lower_alignment_helper< found13,target,boost::detail::has_one_T< short > >::type t13; enum { found14 = 
lower_alignment_helper<found13,target,boost::detail::has_one_T< short > >::value }; typename lower_alignment_helper< found14,target,boost::detail::has_one_T< int > >::type t14; enum { found15 = lower_alignment_helper<found14,target,boost::detail::has_one_T< int > >::value }; typename lower_alignment_helper< found15,target,boost::detail::has_one_T< long > >::type t15; enum { found16 = lower_alignment_helper<found15,target,boost::detail::has_one_T< long > >::value }; typename lower_alignment_helper< found16,target,boost::detail::has_one_T< ::boost::long_long_type > >::type t16; enum { found17 = lower_alignment_helper<found16,target,boost::detail::has_one_T< ::boost::long_long_type > >::value }; typename lower_alignment_helper< found17,target,boost::detail::has_one_T< float > >::type t17; enum { found18 = lower_alignment_helper<found17,target,boost::detail::has_one_T< float > >::value }; typename lower_alignment_helper< found18,target,boost::detail::has_one_T< double > >::type t18; enum { found19 = lower_alignm
ent_helper<found18,target,boost::detail::has_one_T< double > >::value }; typename lower_alignment_helper< found19,target,boost::detail::has_one_T< long double > >::type t19; enum { found20 = lower_alignment_helper<found19,target,boost::detail::has_one_T< long double > >::value }; typename lower_alignment_helper< found20,target,boost::detail::has_one_T< void* > >::type t20; enum { found21 = lower_alignment_helper<found20,target,boost::detail::has_one_T< void* > >::value }; typename lower_alignment_helper< found21,target,boost::detail::has_one_T< function_ptr > >::type t21; enum { found22 = lower_alignment_helper<found21,target,boost::detail::has_one_T< function_ptr > >::value }; typename lower_alignment_helper< found22,target,boost::detail::has_one_T< member_ptr > >::type t22; enum { found23 = lower_alignment_helper<found22,target,boost::detail::has_one_T< member_ptr > >::value }; typename lower_alignment_helper< found23,target,boost::detail::has_one_T< member_function_ptr > >::type t23; enum { found24 = lowe
r_alignment_helper<found23,target,boost::detail::has_one_T< member_function_ptr > >::value };  
+};
+
+union max_align
+{
+    char t0; short t1; int t2; long t3; ::boost::long_long_type t4; float t5; double t6; long double t7; void* t8; function_ptr t9; member_ptr t10; member_function_ptr t11; boost::detail::has_one_T< char > t12; boost::detail::has_one_T< short > t13; boost::detail::has_one_T< int > t14; boost::detail::has_one_T< long > t15; boost::detail::has_one_T< ::boost::long_long_type > t16; boost::detail::has_one_T< float > t17; boost::detail::has_one_T< double > t18; boost::detail::has_one_T< long double > t19; boost::detail::has_one_T< void* > t20; boost::detail::has_one_T< function_ptr > t21; boost::detail::has_one_T< member_ptr > t22; boost::detail::has_one_T< member_function_ptr > t23;  
+};
+
+
+
+
+
+
+
+
+template<std::size_t TAlign, std::size_t Align>
+struct is_aligned
+{
+    static const bool value = (TAlign >= Align) & (TAlign % Align == 0);
+};
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+template<std::size_t Align>
+struct is_pod< ::boost::detail::lower_alignment<Align> >
+{
+        static const std::size_t value = true;
+};
+
+
+
+
+namespace detail{
+
+template <std::size_t Align>
+class type_with_alignment_imp
+{
+    typedef ::boost::detail::lower_alignment<Align> t1;
+    typedef typename mpl::if_c<
+          ::boost::detail::is_aligned< ::boost::alignment_of<t1>::value,Align >::value
+        , t1
+        , ::boost::detail::max_align
+        >::type align_t;
+
+    static const std::size_t found = alignment_of<align_t>::value;
+
+    typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)(found >= Align) >)> boost_static_assert_typedef_0;
+    typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)(found % Align == 0) >)> boost_static_assert_typedef_1;
+
+ public:
+    typedef align_t type;
+};
+
+}
+
+template <std::size_t Align>
+class type_with_alignment 
+  : public ::boost::detail::type_with_alignment_imp<Align>
+{
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace align {
+struct __declspec(align(8)) a8 { 
+   char m[8]; 
+   typedef a8 type;
+};
+struct __declspec(align(16)) a16 { 
+   char m[16]; 
+   typedef a16 type;
+};
+struct __declspec(align(32)) a32 { 
+   char m[32]; 
+   typedef a32 type;
+};
+struct __declspec(align(64)) a64 
+{ 
+   char m[64]; 
+   typedef a64 type;
+};
+struct __declspec(align(128)) a128 { 
+   char m[128]; 
+   typedef a128 type;
+};
+}
+
+template<> class type_with_alignment<8>  
+{ 
+   typedef mpl::if_c<
+      ::boost::alignment_of<boost::detail::max_align>::value < 8,
+      align::a8,
+      boost::detail::type_with_alignment_imp<8> >::type t1; 
+public: 
+   typedef t1::type type;
+};
+template<> class type_with_alignment<16> 
+{ 
+   typedef mpl::if_c<
+      ::boost::alignment_of<boost::detail::max_align>::value < 16,
+      align::a16,
+      boost::detail::type_with_alignment_imp<16> >::type t1; 
+public: 
+   typedef t1::type type;
+};
+template<> class type_with_alignment<32> 
+{ 
+   typedef mpl::if_c<
+      ::boost::alignment_of<boost::detail::max_align>::value < 32,
+      align::a32,
+      boost::detail::type_with_alignment_imp<32> >::type t1; 
+public: 
+   typedef t1::type type;
+};
+template<> class type_with_alignment<64> {
+   typedef mpl::if_c<
+      ::boost::alignment_of<boost::detail::max_align>::value < 64,
+      align::a64,
+      boost::detail::type_with_alignment_imp<64> >::type t1; 
+public: 
+   typedef t1::type type;
+};
+template<> class type_with_alignment<128> {
+   typedef mpl::if_c<
+      ::boost::alignment_of<boost::detail::max_align>::value < 128,
+      align::a128,
+      boost::detail::type_with_alignment_imp<128> >::type t1; 
+public: 
+   typedef t1::type type;
+};
+
+namespace detail {
+template<> struct is_pod_impl< ::boost::align::a8 > { static const bool value = (true); };
+template<> struct is_pod_impl< ::boost::align::a16 > { static const bool value = (true); };
+template<> struct is_pod_impl< ::boost::align::a32 > { static const bool value = (true); };
+template<> struct is_pod_impl< ::boost::align::a64 > { static const bool value = (true); };
+template<> struct is_pod_impl< ::boost::align::a128 > { static const bool value = (true); };
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+#pragma warning(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template<
+      typename C = na
+    , typename F1 = na
+    , typename F2 = na
+    >
+struct eval_if
+
+
+
+
+
+    : if_<C,F1,F2>::type
+{
+
+    
+};
+
+
+
+template<
+      bool C
+    , typename F1
+    , typename F2
+    >
+struct eval_if_c
+
+
+
+
+
+    : if_c<C,F1,F2>::type
+{
+
+};
+
+template<> struct eval_if<  na , na , na > { template<  typename T1 , typename T2 , typename T3 , typename T4 =na  , typename T5 =na  > struct apply : eval_if<  T1 , T2 , T3 > { }; }; template< typename Tag > struct lambda< eval_if<  na , na , na > , Tag  > { typedef false_ is_le; typedef eval_if<  na , na , na > result_; typedef eval_if<  na , na , na > type; };   
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+template<
+      typename T = na
+    >
+struct identity
+{
+    typedef T type;
+    
+};
+
+template<
+      typename T = na
+    >
+struct make_identity
+{
+    typedef identity<T> type;
+    
+};
+
+template<> struct identity<  na > { template<  typename T1 , typename T2 =na  , typename T3 =na  , typename T4 =na  , typename T5 =na  > struct apply : identity<  T1 > { }; }; template< typename Tag > struct lambda< identity<  na > , Tag  > { typedef false_ is_le; typedef identity<  na > result_; typedef identity<  na > type; };  
+template<> struct make_identity<  na > { template<  typename T1 , typename T2 =na  , typename T3 =na  , typename T4 =na  , typename T5 =na  > struct apply : make_identity<  T1 > { }; }; template< typename Tag > struct lambda< make_identity<  na > , Tag  > { typedef false_ is_le; typedef make_identity<  na > result_; typedef make_identity<  na > type; };  
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail { namespace aligned_storage {
+
+static const std::size_t alignment_of_max_align = ::boost::alignment_of<max_align>::value;
+
+
+
+
+template <
+      std::size_t size_
+    , std::size_t alignment_
+>
+struct aligned_storage_imp
+{
+    union data_t
+    {
+        char buf[size_];
+
+        typename mpl::eval_if_c<
+              alignment_ == std::size_t(-1)
+            , mpl::identity<detail::max_align>
+            , type_with_alignment<alignment_>
+            >::type align_;
+    } data_;
+    void* address() const { return const_cast<aligned_storage_imp*>(this); }
+};
+
+template< std::size_t alignment_ >
+struct aligned_storage_imp<0u,alignment_>
+{
+    
+    void* address() const { return 0; }
+};
+
+}} 
+
+template <
+      std::size_t size_
+    , std::size_t alignment_ = std::size_t(-1)
+>
+class aligned_storage : 
+
+   private 
+
+
+
+   detail::aligned_storage::aligned_storage_imp<size_, alignment_> 
+{
+ 
+public: 
+
+    typedef detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
+
+    static const std::size_t size = size_;
+    static const std::size_t alignment = ( alignment_ == std::size_t(-1) ? ::boost::detail::aligned_storage::alignment_of_max_align : alignment_ );
+
+
+
+
+
+
+
+
+
+
+public: 
+
+    aligned_storage(const aligned_storage&);
+    aligned_storage& operator=(const aligned_storage&);
+
+
+
+public: 
+
+    aligned_storage()
+    {
+    }
+
+    ~aligned_storage()
+    {
+    }
+
+public: 
+
+    void* address()
+    {
+        return static_cast<type*>(this)->address();
+    }
+
+
+
+    const void* address() const
+    {
+        return static_cast<const type*>(this)->address();
+    }
+
+
+
+
+
+
+
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <std::size_t size_, std::size_t alignment_>
+struct is_pod<boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >
+   : ::boost::integral_constant<bool,true>
+{ 
+    
+}; 
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+    template <typename T>
+    typename add_rvalue_reference<T>::type declval(); 
+
+}  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+    template <class T, class U = void, class V = void>
+    struct common_type
+    {
+    public:
+        typedef typename common_type<typename common_type<T, U>::type, V>::type type;
+    };
+
+
+
+
+    template<typename T>
+
+
+
+    struct common_type<T, void, void>
+
+
+    {
+        typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)(sizeof(T) > 0) >)> boost_static_assert_typedef_2;
+    public:
+        typedef T type;
+    };
+
+
+namespace type_traits_detail {
+
+    template <class T, class U>
+    struct common_type_2
+    {
+    private:
+        typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)(sizeof(T) > 0) >)> boost_static_assert_typedef_3;
+        typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)(sizeof(U) > 0) >)> boost_static_assert_typedef_4;
+        static bool declval_bool();  
+        static typename add_rvalue_reference<T>::type declval_T();  
+        static typename add_rvalue_reference<U>::type declval_U();  
+        static typename add_rvalue_reference<bool>::type declval_b();  
+
+
+
+
+
+
+
+
+
+
+
+    public:
+        typedef typename boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(declval_b() ? declval_T() : declval_U()))>::type type;
+
+    };
+
+    template <class T>
+    struct common_type_2<T, T>
+    {
+        typedef T type;
+    };
+    }
+
+
+
+
+
+    template <class T, class U>
+    struct common_type<T, U, void>
+
+    : type_traits_detail::common_type_2<T,U>
+    { };
+
+
+
+
+
+
+
+
+
+
+}  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+template <bool b, class T, class U>
+struct conditional : public mpl::if_c<b, T, U>
+{
+};
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+template< typename T > struct remove_bounds { typedef T type;  }; 
+
+
+template< typename T, std::size_t N > struct remove_bounds<T[N]> { typedef T type; };
+template< typename T, std::size_t N > struct remove_bounds<T const[N]> { typedef T const type; };
+template< typename T, std::size_t N > struct remove_bounds<T volatile[N]> { typedef T volatile type; };
+template< typename T, std::size_t N > struct remove_bounds<T const volatile[N]> { typedef T const volatile type; };
+
+template< typename T > struct remove_bounds<T[]> { typedef T type; };
+template< typename T > struct remove_bounds<T const[]> { typedef T const type; };
+template< typename T > struct remove_bounds<T volatile[]> { typedef T volatile type; };
+template< typename T > struct remove_bounds<T const volatile[]> { typedef T const volatile type; };
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost 
+{
+
+    template< class T >
+    struct decay
+    {
+    private:
+        typedef typename remove_reference<T>::type Ty;
+    public:
+        typedef typename mpl::eval_if< 
+            is_array<Ty>,
+            mpl::identity<typename remove_bounds<Ty>::type*>,
+            typename mpl::eval_if< 
+                is_function<Ty>,
+                add_pointer<Ty>,
+                mpl::identity<Ty>
+            >
+        >::type type;
+    };
+    
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+
+
+
+
+
+
+
+
+
+
+template <class T, std::size_t N>
+struct extent_imp
+{
+   static const std::size_t value = 0;
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T[R], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T const[R], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T volatile[R], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+
+template <class T, std::size_t R, std::size_t N>
+struct extent_imp<T const volatile[R], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T[R],0>
+{
+   static const std::size_t value = R;
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T const[R], 0>
+{
+   static const std::size_t value = R;
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T volatile[R], 0>
+{
+   static const std::size_t value = R;
+};
+
+template <class T, std::size_t R>
+struct extent_imp<T const volatile[R], 0>
+{
+   static const std::size_t value = R;
+};
+
+
+template <class T, std::size_t N>
+struct extent_imp<T[], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+template <class T, std::size_t N>
+struct extent_imp<T const[], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+template <class T, std::size_t N>
+struct extent_imp<T volatile[], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+template <class T, std::size_t N>
+struct extent_imp<T const volatile[], N>
+{
+   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
+};
+template <class T>
+struct extent_imp<T[], 0>
+{
+   static const std::size_t value = 0;
+};
+template <class T>
+struct extent_imp<T const[], 0>
+{
+   static const std::size_t value = 0;
+};
+template <class T>
+struct extent_imp<T volatile[], 0>
+{
+   static const std::size_t value = 0;
+};
+template <class T>
+struct extent_imp<T const volatile[], 0>
+{
+   static const std::size_t value = 0;
+};
+
+
+
+
+}   
+
+template <class T, std::size_t N = 0>
+struct extent
+   : public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>
+{
+
+
+
+
+    
+};
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace type_traits { namespace detail {
+
+
+
+template<class T>
+struct floating_point_promotion
+{
+    typedef T type;
+};
+
+template<>
+struct floating_point_promotion<float>
+{
+    typedef double type;
+};
+
+template<>
+struct floating_point_promotion<float const>
+{
+    typedef double const type;
+};
+
+template<>
+struct floating_point_promotion<float volatile>
+{
+    typedef double volatile type;
+};
+
+template<>
+struct floating_point_promotion<float const volatile>
+{
+    typedef double const volatile type;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} }
+
+template< typename T > struct floating_point_promotion { typedef typename boost::type_traits::detail::floating_point_promotion<T>::type type;  }; 
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+namespace detail {
+
+template<typename Function> struct function_traits_helper;
+
+template<typename R>
+struct function_traits_helper<R (*)(void)>
+{
+  static const unsigned arity = 0;
+  typedef R result_type;
+};
+
+template<typename R, typename T1>
+struct function_traits_helper<R (*)(T1)>
+{
+  static const unsigned arity = 1;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T1 argument_type;
+};
+
+template<typename R, typename T1, typename T2>
+struct function_traits_helper<R (*)(T1, T2)>
+{
+  static const unsigned arity = 2;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T1 first_argument_type;
+  typedef T2 second_argument_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3>
+struct function_traits_helper<R (*)(T1, T2, T3)>
+{
+  static const unsigned arity = 3;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4>
+struct function_traits_helper<R (*)(T1, T2, T3, T4)>
+{
+  static const unsigned arity = 4;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5)>
+{
+  static const unsigned arity = 5;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6)>
+{
+  static const unsigned arity = 6;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7)>
+{
+  static const unsigned arity = 7;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7, typename T8>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>
+{
+  static const unsigned arity = 8;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+  typedef T8 arg8_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7, typename T8, typename T9>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>
+{
+  static const unsigned arity = 9;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+  typedef T8 arg8_type;
+  typedef T9 arg9_type;
+};
+
+template<typename R, typename T1, typename T2, typename T3, typename T4,
+         typename T5, typename T6, typename T7, typename T8, typename T9,
+         typename T10>
+struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>
+{
+  static const unsigned arity = 10;
+  typedef R result_type;
+  typedef T1 arg1_type;
+  typedef T2 arg2_type;
+  typedef T3 arg3_type;
+  typedef T4 arg4_type;
+  typedef T5 arg5_type;
+  typedef T6 arg6_type;
+  typedef T7 arg7_type;
+  typedef T8 arg8_type;
+  typedef T9 arg9_type;
+  typedef T10 arg10_type;
+};
+
+} 
+
+template<typename Function>
+struct function_traits : 
+	public boost::detail::function_traits_helper<typename boost::add_pointer<Function>::type>
+{
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+  
+
+
+  
+
+
+
+
+
+
+
+
+
+
+
+namespace std {
+
+		
+ 
+
+
+
+
+typedef void (__cdecl * new_handler) ();
+
+ 
+
+ 
+struct nothrow_t
+	{	
+	};
+
+extern const nothrow_t nothrow;	
+ 
+
+		
+ new_handler __cdecl set_new_handler(new_handler)
+	throw ();	
+}
+
+		
+void __cdecl operator delete(void *) throw ();
+  void *__cdecl operator new(size_t _Size) throw (...);
+
+ 
+  
+inline void *__cdecl operator new(size_t, void *_Where) throw ()
+	{	
+	return (_Where);
+	}
+
+inline void __cdecl operator delete(void *, void *) throw ()
+	{	
+	}
+ 
+
+ 
+  
+inline void *__cdecl operator new[](size_t, void *_Where) throw ()
+	{	
+	return (_Where);
+	}
+
+inline void __cdecl operator delete[](void *, void *) throw ()
+	{	
+	}
+ 
+
+void __cdecl operator delete[](void *) throw ();	
+
+  void *__cdecl operator new[](size_t _Size)
+	throw (...);	
+
+ 
+  
+    void *__cdecl operator new(size_t _Size, const std::nothrow_t&)
+	throw ();
+
+    void *__cdecl operator new[](size_t _Size, const std::nothrow_t&)
+	throw ();	
+
+void __cdecl operator delete(void *, const std::nothrow_t&)
+	throw ();	
+
+void __cdecl operator delete[](void *, const std::nothrow_t&)
+	throw ();	
+ 
+
+
+
+ 
+using std::new_handler;
+ 
+
+
+  
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace detail {
+    template <class U, U x> 
+    struct test;
+
+    template <typename T>
+    struct has_new_operator_impl {
+        template<class U>
+        static type_traits::yes_type check_sig1(
+            U*, 
+            test<
+            void *(*)(std::size_t),
+                &U::operator new
+            >* = 0
+        );
+        template<class U>
+        static type_traits::no_type check_sig1(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig2(
+            U*, 
+            test<
+            void *(*)(std::size_t, const std::nothrow_t&),
+                &U::operator new
+            >* = 0
+        );
+        template<class U>
+        static type_traits::no_type check_sig2(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig3(
+            U*, 
+            test<
+            void *(*)(std::size_t, void*),
+                &U::operator new
+            >* = 0
+        );
+        template<class U>
+        static type_traits::no_type check_sig3(...);
+
+
+        template<class U>
+        static type_traits::yes_type check_sig4(
+            U*, 
+            test<
+            void *(*)(std::size_t),
+                &U::operator new[]
+            >* = 0
+        );
+        template<class U>
+        static type_traits::no_type check_sig4(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig5(
+            U*, 
+            test<
+            void *(*)(std::size_t, const std::nothrow_t&),
+                &U::operator new[]
+            >* = 0
+        );
+        template<class U>
+        static type_traits::no_type check_sig5(...);
+
+        template<class U>
+        static type_traits::yes_type check_sig6(
+            U*, 
+            test<
+            void *(*)(std::size_t, void*),
+                &U::operator new[]
+            >* = 0
+        );
+        template<class U>
+        static type_traits::no_type check_sig6(...);
+
+        
+        
+        
+
+
+
+
+
+
+
+            
+                #pragma warning(push)
+                #pragma warning(disable:6334)
+            
+
+            static const unsigned s1 = sizeof(check_sig1<T>(0));
+            static const unsigned s2 = sizeof(check_sig2<T>(0));
+            static const unsigned s3 = sizeof(check_sig3<T>(0));
+            static const unsigned s4 = sizeof(check_sig4<T>(0));
+            static const unsigned s5 = sizeof(check_sig5<T>(0));
+            static const unsigned s6 = sizeof(check_sig6<T>(0));
+
+            
+                #pragma warning(pop)
+            
+        
+        static const bool value = (::boost::type_traits::ice_or< (s1 == sizeof(type_traits::yes_type)), (s2 == sizeof(type_traits::yes_type)), (s3 == sizeof(type_traits::yes_type)), (s4 == sizeof(type_traits::yes_type)), (s5 == sizeof(type_traits::yes_type)), (s6 == sizeof(type_traits::yes_type)) >::value);
+    };
+} 
+
+template< typename T > struct has_new_operator : ::boost::integral_constant<bool,::boost::detail::has_new_operator_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+namespace detail{
+
+
+
+
+template <class T>
+struct is_const_rvalue_filter
+{
+
+
+
+	static const bool value = ::boost::detail::cv_traits_imp<T*>::is_const;
+
+};
+
+
+
+
+
+
+
+}
+
+
+template< typename T > struct is_const : ::boost::integral_constant<bool,::boost::detail::is_const_rvalue_filter<T>::value> {   }; 
+template< typename T > struct is_const< T& > : ::boost::integral_constant<bool,false> {  };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+template <class T>
+struct is_volatile_rval_filter
+{
+
+
+
+	static const bool value = ::boost::detail::cv_traits_imp<T*>::is_volatile;
+
+};
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+template< typename T > struct is_volatile : ::boost::integral_constant<bool,::boost::detail::is_volatile_rval_filter<T>::value> {   }; 
+template< typename T > struct is_volatile< T& > : ::boost::integral_constant<bool,false> {  };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_assign_impl
+{
+   static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_assign(T) >::value, ::boost::type_traits::ice_not< ::boost::is_const<T>::value >::value, ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value >::value);
+};
+
+} 
+
+template< typename T > struct has_trivial_assign : ::boost::integral_constant<bool,::boost::detail::has_trivial_assign_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct has_nothrow_assign_imp{
+   static const bool value = (::boost::type_traits::ice_or< ::boost::has_trivial_assign<T>::value, __has_nothrow_assign(T) >::value);
+};
+
+}
+
+template< typename T > struct has_nothrow_assign : ::boost::integral_constant<bool,::boost::detail::has_nothrow_assign_imp<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_ctor_impl
+{
+   static const bool value = (::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_constructor(T) >::value);
+};
+
+} 
+
+template< typename T > struct has_trivial_constructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_ctor_impl<T>::value> {   }; 
+template< typename T > struct has_trivial_default_constructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_ctor_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct has_nothrow_constructor_imp{
+   static const bool value = (::boost::type_traits::ice_or< ::boost::has_trivial_constructor<T>::value, __has_nothrow_constructor(T) >::value);
+};
+
+}
+
+template< typename T > struct has_nothrow_constructor : ::boost::integral_constant<bool,::boost::detail::has_nothrow_constructor_imp<T>::value> {   }; 
+template< typename T > struct has_nothrow_default_constructor : ::boost::integral_constant<bool,::boost::detail::has_nothrow_constructor_imp<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_copy_impl
+{
+   static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_copy(T) >::value, ::boost::type_traits::ice_not< ::boost::is_volatile<T>::value >::value >::value);
+};
+
+} 
+
+template< typename T > struct has_trivial_copy : ::boost::integral_constant<bool,::boost::detail::has_trivial_copy_impl<T>::value> {   }; 
+template< typename T > struct has_trivial_copy_constructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_copy_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+
+template <class T>
+struct has_nothrow_copy_imp{
+   static const bool value = (::boost::type_traits::ice_or< ::boost::has_trivial_copy<T>::value, __has_nothrow_copy(T) >::value);
+};
+
+}
+
+template< typename T > struct has_nothrow_copy : ::boost::integral_constant<bool,::boost::detail::has_nothrow_copy_imp<T>::value> {   }; 
+template< typename T > struct has_nothrow_copy_constructor : ::boost::integral_constant<bool,::boost::detail::has_nothrow_copy_imp<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct has_trivial_dtor_impl
+{
+   static const bool value = (::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_destructor(T) >::value);
+};
+
+} 
+
+template< typename T > struct has_trivial_destructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_dtor_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+template< typename T > struct has_nothrow_destructor : ::boost::integral_constant<bool,::boost::has_trivial_destructor<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+template< typename T > struct has_virtual_destructor : ::boost::integral_constant<bool,__has_virtual_destructor(T)> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace detail{
+
+
+template <class T>
+struct is_abstract_imp
+{
+   static const bool value = __is_abstract(T);
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+template< typename T > struct is_abstract : ::boost::integral_constant<bool,::boost::detail::is_abstract_imp<T>::value> {   }; 
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename B, typename D>
+struct is_base_and_derived_impl
+{
+    typedef typename remove_cv<B>::type ncvB;
+    typedef typename remove_cv<D>::type ncvD;
+
+    static const bool value = ((__is_base_of(B,D) && !is_same<B,D>::value) && ! ::boost::is_same<ncvB,ncvD>::value);
+};
+
+} 
+
+template< typename Base, typename Derived > struct is_base_and_derived : ::boost::integral_constant<bool,(::boost::detail::is_base_and_derived_impl<Base,Derived>::value)> {   }; 
+
+
+template< typename Base, typename Derived > struct is_base_and_derived< Base&,Derived > : ::boost::integral_constant<bool,false> {  };
+template< typename Base, typename Derived > struct is_base_and_derived< Base,Derived& > : ::boost::integral_constant<bool,false> {  };
+template< typename Base, typename Derived > struct is_base_and_derived< Base&,Derived& > : ::boost::integral_constant<bool,false> {  };
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename T>
+struct is_class_impl
+{
+    static const bool value = __is_class(T);
+};
+
+
+} 
+
+
+
+
+
+template< typename T > struct is_class : ::boost::integral_constant<bool,::boost::detail::is_class_impl<T>::value> {   }; 
+
+    
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+   namespace detail{
+      template <class B, class D>
+      struct is_base_of_imp
+      {
+          typedef typename remove_cv<B>::type ncvB;
+          typedef typename remove_cv<D>::type ncvD;
+          static const bool value = (::boost::type_traits::ice_or< (::boost::detail::is_base_and_derived_impl<ncvB,ncvD>::value), (::boost::type_traits::ice_and< ::boost::is_same<ncvB,ncvD>::value, ::boost::is_class<ncvB>::value>::value)>::value);
+      };
+   }
+
+template< typename Base, typename Derived > struct is_base_of : ::boost::integral_constant<bool,(::boost::detail::is_base_of_imp<Base, Derived>::value)> {   }; 
+
+
+template< typename Base, typename Derived > struct is_base_of< Base&,Derived > : ::boost::integral_constant<bool,false> {  };
+template< typename Base, typename Derived > struct is_base_of< Base,Derived& > : ::boost::integral_constant<bool,false> {  };
+template< typename Base, typename Derived > struct is_base_of< Base&,Derived& > : ::boost::integral_constant<bool,false> {  };
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace detail {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename From, typename To>
+struct is_convertible_basic_impl
+{
+    static ::boost::type_traits::no_type __cdecl _m_check(...);
+    static ::boost::type_traits::yes_type __cdecl _m_check(To);
+    static From _m_from;
+
+#pragma warning(push)
+#pragma warning(disable:4244)
+
+#pragma warning(disable:6334)
+
+
+    static const bool value = sizeof( _m_check(_m_from) ) == sizeof(::boost::type_traits::yes_type);
+
+#pragma warning(pop)
+
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template <typename From, typename To>
+struct is_convertible_impl
+{
+    typedef typename add_reference<From>::type ref_type;
+    static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_or< ::boost::detail::is_convertible_basic_impl<ref_type,To>::value, ::boost::is_void<To>::value >::value, ::boost::type_traits::ice_not< ::boost::is_array<To>::value >::value >::value);
+};
+
+
+template <bool trivial1, bool trivial2, bool abstract_target>
+struct is_convertible_impl_select
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef is_convertible_impl<From, To> type;
+   };
+};
+
+template <>
+struct is_convertible_impl_select<true, true, false>
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef true_type type;
+   };
+};
+
+template <>
+struct is_convertible_impl_select<false, false, true>
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <>
+struct is_convertible_impl_select<true, false, true>
+{
+   template <class From, class To>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <typename From, typename To>
+struct is_convertible_impl_dispatch_base
+{
+
+   typedef is_convertible_impl_select< 
+      ::boost::is_arithmetic<From>::value, 
+      ::boost::is_arithmetic<To>::value,
+
+      ::boost::is_abstract<To>::value
+
+
+
+   > selector;
+
+
+
+   typedef typename selector::template rebind<From, To> isc_binder;
+   typedef typename isc_binder::type type;
+};
+
+template <typename From, typename To>
+struct is_convertible_impl_dispatch 
+   : public is_convertible_impl_dispatch_base<From, To>::type
+{};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    template<> struct is_convertible_impl< void,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void,void const > { static const bool value = (true); }; template<> struct is_convertible_impl< void,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void,void const volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void const > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void const volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void volatile,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void volatile,void const > { static const bool value = (true); }; template<>
 struct is_convertible_impl< void volatile,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void volatile,void const volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void const > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void const volatile > { static const bool value = (true); };
+
+
+
+
+
+
+
+
+
+template< typename To > struct is_convertible_impl< void,To > { static const bool value = (false); };
+template< typename From > struct is_convertible_impl< From,void > { static const bool value = (true); };
+
+template< typename To > struct is_convertible_impl< void const,To > { static const bool value = (false); };
+template< typename To > struct is_convertible_impl< void volatile,To > { static const bool value = (false); };
+template< typename To > struct is_convertible_impl< void const volatile,To > { static const bool value = (false); };
+template< typename From > struct is_convertible_impl< From,void const > { static const bool value = (true); };
+template< typename From > struct is_convertible_impl< From,void volatile > { static const bool value = (true); };
+template< typename From > struct is_convertible_impl< From,void const volatile > { static const bool value = (true); };
+
+
+
+} 
+
+template< typename From, typename To > struct is_convertible : ::boost::integral_constant<bool,(::boost::detail::is_convertible_impl_dispatch<From,To>::value)> {   }; 
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+extern "C" {
+
+
+
+#pragma pack(push,8)
+
+
+		
+
+
+
+
+
+		
+
+
+
+
+
+
+		
+typedef union
+	{	
+	unsigned short _Word[8];
+	float _Float;
+	double _Double;
+	long double _Long_double;
+	} _Dconst;
+
+		
+void __cdecl _Feraise(int);
+
+		
+ double __cdecl _Cosh(double, double);
+ short __cdecl _Dtest(double *);
+ short __cdecl _Exp(double *, double, short);
+ double __cdecl _Sinh(double, double);
+extern   _Dconst _Denorm, _Hugeval, _Inf,
+	_Nan, _Snan;
+
+		
+ float __cdecl _FCosh(float, float);
+ short __cdecl _FDtest(float *);
+ short __cdecl _FExp(float *, float, short);
+ float __cdecl _FSinh(float, float);
+extern   _Dconst _FDenorm, _FInf, _FNan, _FSnan;
+
+		
+ long double __cdecl _LCosh(long double, long double);
+ short __cdecl _LDtest(long double *);
+ short __cdecl _LExp(long double *, long double, short);
+ long double __cdecl _LSinh(long double, long double);
+extern   _Dconst _LDenorm, _LInf, _LNan, _LSnan;
+
+}
+
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+struct _exception {
+        int type;       
+        char *name;     
+        double arg1;    
+        double arg2;    
+        double retval;  
+        } ;
+
+
+
+
+
+
+
+
+
+
+struct _complex {
+        double x,y; 
+        } ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern double _HUGE;
+
+
+
+
+
+
+
+
+
+
+
+
+        int     __cdecl abs(     int _X);
+        long    __cdecl labs(     long _X);
+
+
+        double  __cdecl acos(     double _X);
+        double  __cdecl asin(     double _X);
+        double  __cdecl atan(     double _X);
+        double  __cdecl atan2(     double _Y,      double _X);
+
+  double __cdecl _copysign (     double _Number,      double _Sign);
+  double __cdecl _chgsign (     double _X);
+
+
+        double  __cdecl cos(     double _X);
+        double  __cdecl cosh(     double _X);
+        double  __cdecl exp(     double _X);
+ double  __cdecl fabs(     double _X);
+        double  __cdecl fmod(     double _X,      double _Y);
+        double  __cdecl log(     double _X);
+        double  __cdecl log10(     double _X);
+        double  __cdecl pow(     double _X,      double _Y);
+        double  __cdecl sin(     double _X);
+        double  __cdecl sinh(     double _X);
+        double  __cdecl tan(     double _X);
+        double  __cdecl tanh(     double _X);
+        double  __cdecl sqrt(     double _X);
+
+
+ double  __cdecl atof(       const char *_String);
+ double  __cdecl _atof_l(       const char *_String,        _locale_t _Locale);
+
+
+ double  __cdecl _cabs(     struct _complex _Complex);
+ double  __cdecl ceil(     double _X);
+ double  __cdecl floor(     double _X);
+ double  __cdecl frexp(     double _X,      int * _Y);
+ double  __cdecl _hypot(     double _X,      double _Y);
+ double  __cdecl _j0(     double _X );
+ double  __cdecl _j1(     double _X );
+ double  __cdecl _jn(int _X,      double _Y);
+ double  __cdecl ldexp(     double _X,      int _Y);
+
+
+
+
+
+        int     __cdecl _matherr(     struct _exception * _Except);
+
+
+ double  __cdecl modf(     double _X,      double * _Y);
+
+ double  __cdecl _y0(     double _X);
+ double  __cdecl _y1(     double _X);
+ double  __cdecl _yn(     int _X,      double _Y);
+
+
+
+
+ int     __cdecl _set_SSE2_enable(     int _Flag);
+ float  __cdecl _hypotf(     float _X,      float _Y);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+inline long double acosl(     long double _X)
+        {return (acos((double)_X)); }
+inline long double asinl(     long double _X)
+        {return (asin((double)_X)); }
+inline long double atanl(     long double _X)
+        {return (atan((double)_X)); }
+inline long double atan2l(     long double _X,      long double _Y)
+        {return (atan2((double)_X, (double)_Y)); }
+inline long double ceill(     long double _X)
+        {return (ceil((double)_X)); }
+inline long double cosl(     long double _X)
+        {return (cos((double)_X)); }
+inline long double coshl(     long double _X)
+        {return (cosh((double)_X)); }
+inline long double expl(     long double _X)
+        {return (exp((double)_X)); }
+inline long double fabsl(     long double _X)
+        {return (fabs((double)_X)); }
+inline long double floorl(     long double _X)
+        {return (floor((double)_X)); }
+inline long double fmodl(     long double _X,      long double _Y)
+        {return (fmod((double)_X, (double)_Y)); }
+inline long double frexpl(     long double _X,      int *_Y)
+        {return (frexp((double)_X, _Y)); }
+inline long double ldexpl(     long double _X,      int _Y)
+        {return (ldexp((double)_X, _Y)); }
+inline long double logl(     long double _X)
+        {return (log((double)_X)); }
+inline long double log10l(     long double _X)
+        {return (log10((double)_X)); }
+inline long double modfl(     long double _X,      long double *_Y)
+        {double _Di, _Df = modf((double)_X, &_Di);
+        *_Y = (long double)_Di;
+        return (_Df); }
+inline long double powl(     long double _X,      long double _Y)
+        {return (pow((double)_X, (double)_Y)); }
+inline long double sinl(     long double _X)
+        {return (sin((double)_X)); }
+inline long double sinhl(     long double _X)
+        {return (sinh((double)_X)); }
+inline long double sqrtl(     long double _X)
+        {return (sqrt((double)_X)); }
+
+inline long double tanl(     long double _X)
+        {return (tan((double)_X)); }
+
+
+
+
+inline long double tanhl(     long double _X)
+        {return (tanh((double)_X)); }
+
+inline long double _chgsignl(     long double _Number)
+{
+    return _chgsign(static_cast<double>(_Number)); 
+}
+
+inline long double _copysignl(     long double _Number,      long double _Sign)
+{
+    return _copysign(static_cast<double>(_Number), static_cast<double>(_Sign)); 
+}
+
+inline float frexpf(     float _X,      int *_Y)
+        {return ((float)frexp((double)_X, _Y)); }
+
+
+inline float fabsf(     float _X)
+        {return ((float)fabs((double)_X)); }
+inline float ldexpf(     float _X,      int _Y)
+        {return ((float)ldexp((double)_X, _Y)); }
+
+inline float acosf(     float _X)
+        {return ((float)acos((double)_X)); }
+inline float asinf(     float _X)
+        {return ((float)asin((double)_X)); }
+inline float atanf(     float _X)
+        {return ((float)atan((double)_X)); }
+inline float atan2f(     float _X,      float _Y)
+        {return ((float)atan2((double)_X, (double)_Y)); }
+inline float ceilf(     float _X)
+        {return ((float)ceil((double)_X)); }
+inline float cosf(     float _X)
+        {return ((float)cos((double)_X)); }
+inline float coshf(     float _X)
+        {return ((float)cosh((double)_X)); }
+inline float expf(     float _X)
+        {return ((float)exp((double)_X)); }
+inline float floorf(     float _X)
+        {return ((float)floor((double)_X)); }
+inline float fmodf(     float _X,      float _Y)
+        {return ((float)fmod((double)_X, (double)_Y)); }
+inline float logf(     float _X)
+        {return ((float)log((double)_X)); }
+inline float log10f(     float _X)
+        {return ((float)log10((double)_X)); }
+inline float modff(     float _X,      float *_Y)
+        { double _Di, _Df = modf((double)_X, &_Di);
+        *_Y = (float)_Di;
+        return ((float)_Df); }
+inline float powf(     float _X,      float _Y)
+        {return ((float)pow((double)_X, (double)_Y)); }
+inline float sinf(     float _X)
+        {return ((float)sin((double)_X)); }
+inline float sinhf(     float _X)
+        {return ((float)sinh((double)_X)); }
+inline float sqrtf(     float _X)
+        {return ((float)sqrt((double)_X)); }
+inline float tanf(     float _X)
+        {return ((float)tan((double)_X)); }
+inline float tanhf(     float _X)
+        {return ((float)tanh((double)_X)); }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern double HUGE;
+
+
+
+
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_cabs" ". See online help for details."))  double  __cdecl cabs(     struct _complex _X);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_hypot" ". See online help for details."))  double  __cdecl hypot(     double _X,      double _Y);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_j0" ". See online help for details."))  double  __cdecl j0(     double _X);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_j1" ". See online help for details."))  double  __cdecl j1(     double _X);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_jn" ". See online help for details."))  double  __cdecl jn(     int _X,      double _Y);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_y0" ". See online help for details."))  double  __cdecl y0(     double _X);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_y1" ". See online help for details."))  double  __cdecl y1(     double _X);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_yn" ". See online help for details."))  double  __cdecl yn(     int _X,      double _Y);
+
+
+
+
+
+
+}
+
+extern "C++" {
+
+template<class _Ty> inline
+        _Ty _Pow_int(_Ty _X, int _Y)
+        {unsigned int _N;
+        if (_Y >= 0)
+                _N = (unsigned int)_Y;
+        else
+                _N = (unsigned int)(-_Y);
+        for (_Ty _Z = _Ty(1); ; _X *= _X)
+                {if ((_N & 1) != 0)
+                        _Z *= _X;
+                if ((_N >>= 1) == 0)
+                        return (_Y < 0 ? _Ty(1) / _Z : _Z); }}
+
+inline long __cdecl abs(     long _X)
+        {return (labs(_X)); }
+inline double __cdecl abs(     double _X)
+        {return (fabs(_X)); }
+inline double __cdecl pow(     double _X,      int _Y)
+        {return (_Pow_int(_X, _Y)); }
+inline float __cdecl abs(     float _X)
+        {return (fabsf(_X)); }
+inline float __cdecl acos(     float _X)
+        {return (acosf(_X)); }
+inline float __cdecl asin(     float _X)
+        {return (asinf(_X)); }
+inline float __cdecl atan(     float _X)
+        {return (atanf(_X)); }
+inline float __cdecl atan2(     float _Y,      float _X)
+        {return (atan2f(_Y, _X)); }
+inline float __cdecl ceil(     float _X)
+        {return (ceilf(_X)); }
+inline float __cdecl cos(     float _X)
+        {return (cosf(_X)); }
+inline float __cdecl cosh(     float _X)
+        {return (coshf(_X)); }
+inline float __cdecl exp(     float _X)
+        {return (expf(_X)); }
+inline float __cdecl fabs(     float _X)
+        {return (fabsf(_X)); }
+inline float __cdecl floor(     float _X)
+        {return (floorf(_X)); }
+inline float __cdecl fmod(     float _X,      float _Y)
+        {return (fmodf(_X, _Y)); }
+inline float __cdecl frexp(     float _X,      int * _Y)
+        {return (frexpf(_X, _Y)); }
+inline float __cdecl ldexp(     float _X,      int _Y)
+        {return (ldexpf(_X, _Y)); }
+inline float __cdecl log(     float _X)
+        {return (logf(_X)); }
+inline float __cdecl log10(     float _X)
+        {return (log10f(_X)); }
+inline float __cdecl modf(     float _X,      float * _Y)
+        {return (modff(_X, _Y)); }
+inline float __cdecl pow(     float _X,      float _Y)
+        {return (powf(_X, _Y)); }
+inline float __cdecl pow(     float _X,      int _Y)
+        {return (_Pow_int(_X, _Y)); }
+inline float __cdecl sin(     float _X)
+        {return (sinf(_X)); }
+inline float __cdecl sinh(     float _X)
+        {return (sinhf(_X)); }
+inline float __cdecl sqrt(     float _X)
+        {return (sqrtf(_X)); }
+inline float __cdecl tan(     float _X)
+        {return (tanf(_X)); }
+inline float __cdecl tanh(     float _X)
+        {return (tanhf(_X)); }
+inline long double __cdecl abs(     long double _X)
+        {return (fabsl(_X)); }
+inline long double __cdecl acos(     long double _X)
+        {return (acosl(_X)); }
+inline long double __cdecl asin(     long double _X)
+        {return (asinl(_X)); }
+inline long double __cdecl atan(     long double _X)
+        {return (atanl(_X)); }
+inline long double __cdecl atan2(     long double _Y,      long double _X)
+        {return (atan2l(_Y, _X)); }
+inline long double __cdecl ceil(     long double _X)
+        {return (ceill(_X)); }
+inline long double __cdecl cos(     long double _X)
+        {return (cosl(_X)); }
+inline long double __cdecl cosh(     long double _X)
+        {return (coshl(_X)); }
+inline long double __cdecl exp(     long double _X)
+        {return (expl(_X)); }
+inline long double __cdecl fabs(     long double _X)
+        {return (fabsl(_X)); }
+inline long double __cdecl floor(     long double _X)
+        {return (floorl(_X)); }
+inline long double __cdecl fmod(     long double _X,      long double _Y)
+        {return (fmodl(_X, _Y)); }
+inline long double __cdecl frexp(     long double _X,      int * _Y)
+        {return (frexpl(_X, _Y)); }
+inline long double __cdecl ldexp(     long double _X,      int _Y)
+        {return (ldexpl(_X, _Y)); }
+inline long double __cdecl log(     long double _X)
+        {return (logl(_X)); }
+inline long double __cdecl log10(     long double _X)
+        {return (log10l(_X)); }
+inline long double __cdecl modf(     long double _X,      long double * _Y)
+        {return (modfl(_X, _Y)); }
+inline long double __cdecl pow(     long double _X,      long double _Y)
+        {return (powl(_X, _Y)); }
+inline long double __cdecl pow(     long double _X,      int _Y)
+        {return (_Pow_int(_X, _Y)); }
+inline long double __cdecl sin(     long double _X)
+        {return (sinl(_X)); }
+inline long double __cdecl sinh(     long double _X)
+        {return (sinhl(_X)); }
+inline long double __cdecl sqrt(     long double _X)
+        {return (sqrtl(_X)); }
+inline long double __cdecl tan(     long double _X)
+        {return (tanl(_X)); }
+inline long double __cdecl tanh(     long double _X)
+        {return (tanhl(_X)); }
+
+}
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+namespace std {
+using ::acosf; using ::asinf;
+using ::atanf; using ::atan2f; using ::ceilf;
+using ::cosf; using ::coshf; using ::expf;
+using ::fabsf; using ::floorf; using ::fmodf;
+using ::frexpf; using ::ldexpf; using ::logf;
+using ::log10f; using ::modff; using ::powf;
+using ::sinf; using ::sinhf; using ::sqrtf;
+using ::tanf; using ::tanhf;
+
+using ::acosl; using ::asinl;
+using ::atanl; using ::atan2l; using ::ceill;
+using ::cosl; using ::coshl; using ::expl;
+using ::fabsl; using ::floorl; using ::fmodl;
+using ::frexpl; using ::ldexpl; using ::logl;
+using ::log10l; using ::modfl; using ::powl;
+using ::sinl; using ::sinhl; using ::sqrtl;
+using ::tanl; using ::tanhl;
+
+using ::abs;
+using ::acos; using ::asin;
+using ::atan; using ::atan2; using ::ceil;
+using ::cos; using ::cosh; using ::exp;
+using ::fabs; using ::floor; using ::fmod;
+using ::frexp; using ::ldexp; using ::log;
+using ::log10; using ::modf; using ::pow;
+using ::sin; using ::sinh; using ::sqrt;
+using ::tan; using ::tanh;
+
+}
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+ #pragma warning(disable: 4514)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef int (__cdecl * _onexit_t)(void);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef struct _div_t {
+        int quot;
+        int rem;
+} div_t;
+
+typedef struct _ldiv_t {
+        long quot;
+        long rem;
+} ldiv_t;
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(4)
+typedef struct {
+    unsigned char ld[10];
+} _LDOUBLE;
+#pragma pack()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef struct {
+        double x;
+} _CRT_DOUBLE;
+
+typedef struct {
+    float f;
+} _CRT_FLOAT;
+
+
+
+
+
+typedef struct {
+        
+
+
+        long double x;
+} _LONGDOUBLE;
+
+
+
+#pragma pack(4)
+typedef struct {
+    unsigned char ld12[12];
+} _LDBL12;
+#pragma pack()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern int __mb_cur_max;
+
+
+
+
+ int __cdecl ___mb_cur_max_func(void);
+ int __cdecl ___mb_cur_max_l_func(_locale_t);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef void (__cdecl *_purecall_handler)(void); 
+
+
+ _purecall_handler __cdecl _set_purecall_handler(       _purecall_handler _Handler);
+ _purecall_handler __cdecl _get_purecall_handler();
+
+
+
+extern "C++"
+{
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t); 
+
+
+ _invalid_parameter_handler __cdecl _set_invalid_parameter_handler(       _invalid_parameter_handler _Handler);
+ _invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
+
+
+
+extern "C++"
+{
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+ unsigned long * __cdecl __doserrno(void);
+
+
+errno_t __cdecl _set_doserrno(     unsigned long _Value);
+errno_t __cdecl _get_doserrno(     unsigned long * _Value);
+
+
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) char ** __cdecl __sys_errlist(void);
+
+
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "strerror" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) int * __cdecl __sys_nerr(void);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern int __argc;          
+ extern char ** __argv;      
+ extern wchar_t ** __wargv;  
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern char ** _environ;    
+ extern wchar_t ** _wenviron;    
+
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_pgmptr" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  extern char * _pgmptr;      
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_wpgmptr" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  extern wchar_t * _wpgmptr;  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+errno_t __cdecl _get_pgmptr(       char ** _Value);
+errno_t __cdecl _get_wpgmptr(       wchar_t ** _Value);
+
+
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_fmode" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  extern int _fmode;          
+
+
+
+
+
+ errno_t __cdecl _set_fmode(     int _Mode);
+ errno_t __cdecl _get_fmode(     int * _PMode);
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4141)
+
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_osplatform" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details."))	 extern unsigned int _osplatform;
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_osver" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details."))			 extern unsigned int _osver;
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_winver" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details."))		 extern unsigned int _winver;
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_winmajor" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details."))		 extern unsigned int _winmajor;
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_get_winminor" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) __declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details."))		 extern unsigned int _winminor;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(pop)
+
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details.")) errno_t __cdecl _get_osplatform(     unsigned int * _Value);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details.")) errno_t __cdecl _get_osver(     unsigned int * _Value);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details.")) errno_t __cdecl _get_winver(     unsigned int * _Value);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details.")) errno_t __cdecl _get_winmajor(     unsigned int * _Value);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "GetVersionEx" "instead. See online help for details.")) errno_t __cdecl _get_winminor(     unsigned int * _Value);
+
+
+
+
+
+
+extern "C++"
+{
+template <typename _CountofType, size_t _SizeOfArray>
+char (*__countof_helper( _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
+
+}
+
+
+
+
+
+
+
+ __declspec(noreturn) void __cdecl exit(     int _Code);
+ __declspec(noreturn) void __cdecl _exit(     int _Code);
+ void __cdecl abort(void);
+
+
+ unsigned int __cdecl _set_abort_behavior(     unsigned int _Flags,      unsigned int _Mask);
+
+
+
+
+
+
+
+
+        __int64    __cdecl _abs64(__int64);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        int    __cdecl atexit(void (__cdecl *)(void));
+
+
+
+
+
+
+   int    __cdecl atoi(       const char *_Str);
+  int    __cdecl _atoi_l(       const char *_Str,        _locale_t _Locale);
+  long   __cdecl atol(       const char *_Str);
+  long   __cdecl _atol_l(       const char *_Str,        _locale_t _Locale);
+
+
+
+  void * __cdecl bsearch_s(     const void * _Key,        const void * _Base, 
+             rsize_t _NumOfElements,      rsize_t _SizeOfElements,
+             int (__cdecl * _PtFuncCompare)(void *, const void *, const void *), void * _Context);
+
+  void * __cdecl bsearch(     const void * _Key,        const void * _Base, 
+             size_t _NumOfElements,      size_t _SizeOfElements,
+             int (__cdecl * _PtFuncCompare)(const void *, const void *));
+
+
+ void __cdecl qsort_s(       void * _Base, 
+             rsize_t _NumOfElements,      rsize_t _SizeOfElements,
+             int (__cdecl * _PtFuncCompare)(void *, const void *, const void *), void *_Context);
+
+ void __cdecl qsort(       void * _Base, 
+	     size_t _NumOfElements,      size_t _SizeOfElements, 
+             int (__cdecl * _PtFuncCompare)(const void *, const void *));
+
+         unsigned short __cdecl _byteswap_ushort(     unsigned short _Short);
+         unsigned long  __cdecl _byteswap_ulong (     unsigned long _Long);
+
+         unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 _Int64);
+
+  div_t  __cdecl div(     int _Numerator,      int _Denominator);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_dupenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl getenv(       const char * _VarName);
+
+  errno_t __cdecl getenv_s(     size_t * _ReturnSize,        char * _DstBuf,      rsize_t _DstSize,        const char * _VarName);
+
+extern "C++" { template <size_t _Size> inline errno_t __cdecl getenv_s(     size_t * _ReturnSize,      char (&_Dest)[_Size],        const char * _VarName) { return getenv_s(_ReturnSize, _Dest, _Size, _VarName); } }
+  errno_t __cdecl _dupenv_s(                     char **_PBuffer,        size_t * _PBufferSizeInBytes,        const char * _VarName);
+  errno_t __cdecl _itoa_s(     int _Value,        char * _DstBuf,      size_t _Size,      int _Radix);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _itoa_s(     int _Value,      char (&_Dest)[_Size],      int _Radix) { return _itoa_s(_Value, _Dest, _Size, _Radix); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_itoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _itoa( int _Value,  char *_Dest,  int _Radix);
+
+  errno_t __cdecl _i64toa_s(     __int64 _Val,        char * _DstBuf,      size_t _Size,      int _Radix);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_i64toa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) char * __cdecl _i64toa(     __int64 _Val,      char * _DstBuf,      int _Radix);
+  errno_t __cdecl _ui64toa_s(     unsigned __int64 _Val,        char * _DstBuf,      size_t _Size,      int _Radix);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ui64toa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) char * __cdecl _ui64toa(     unsigned __int64 _Val,      char * _DstBuf,      int _Radix);
+  __int64 __cdecl _atoi64(       const char * _String);
+  __int64 __cdecl _atoi64_l(       const char * _String,        _locale_t _Locale);
+  __int64 __cdecl _strtoi64(       const char * _String,                    char ** _EndPtr,      int _Radix);
+  __int64 __cdecl _strtoi64_l(       const char * _String,                    char ** _EndPtr,      int _Radix,        _locale_t _Locale);
+  unsigned __int64 __cdecl _strtoui64(       const char * _String,                    char ** _EndPtr,      int _Radix);
+  unsigned __int64 __cdecl _strtoui64_l(       const char * _String,                    char ** _EndPtr,      int  _Radix,        _locale_t _Locale);
+
+  ldiv_t __cdecl ldiv(     long _Numerator,      long _Denominator);
+
+extern "C++"
+{
+    inline ldiv_t  div(     long _A1,      long _A2)
+    {
+        return ldiv(_A1, _A2);
+    }
+}
+
+  errno_t __cdecl _ltoa_s(     long _Val,        char * _DstBuf,      size_t _Size,      int _Radix);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _ltoa_s(     long _Value,      char (&_Dest)[_Size],      int _Radix) { return _ltoa_s(_Value, _Dest, _Size, _Radix); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ltoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _ltoa( long _Value,  char *_Dest,  int _Radix);
+  int    __cdecl mblen(           const char * _Ch,      size_t _MaxCount);
+  int    __cdecl _mblen_l(           const char * _Ch,      size_t _MaxCount,        _locale_t _Locale);
+  size_t __cdecl _mbstrlen(       const char * _Str);
+  size_t __cdecl _mbstrlen_l(       const char *_Str,        _locale_t _Locale);
+  size_t __cdecl _mbstrnlen(         const char *_Str,      size_t _MaxCount);
+  size_t __cdecl _mbstrnlen_l(         const char *_Str,      size_t _MaxCount,        _locale_t _Locale);
+ int    __cdecl mbtowc(     wchar_t * _DstCh,            const char * _SrcCh,      size_t _SrcSizeInBytes);
+ int    __cdecl _mbtowc_l(     wchar_t * _DstCh,            const char * _SrcCh,      size_t _SrcSizeInBytes,        _locale_t _Locale);
+  errno_t __cdecl mbstowcs_s(       size_t * _PtNumOfCharConverted,          wchar_t * _DstBuf,      size_t _SizeInWords,          const char * _SrcBuf,      size_t _MaxCount );
+extern "C++" { template <size_t _Size> inline errno_t __cdecl mbstowcs_s(       size_t * _PtNumOfCharConverted,        wchar_t (&_Dest)[_Size],        const char * _Source,      size_t _MaxCount) { return mbstowcs_s(_PtNumOfCharConverted, _Dest, _Size, _Source, _MaxCount); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "mbstowcs_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl mbstowcs( wchar_t *_Dest,  const char * _Source,  size_t _MaxCount);
+
+  errno_t __cdecl _mbstowcs_s_l(       size_t * _PtNumOfCharConverted,          wchar_t * _DstBuf,      size_t _SizeInWords,          const char * _SrcBuf,      size_t _MaxCount,        _locale_t _Locale);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _mbstowcs_s_l(       size_t * _PtNumOfCharConverted,      wchar_t (&_Dest)[_Size],        const char * _Source,      size_t _MaxCount,        _locale_t _Locale) { return _mbstowcs_s_l(_PtNumOfCharConverted, _Dest, _Size, _Source, _MaxCount, _Locale); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_mbstowcs_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl _mbstowcs_l(       wchar_t *_Dest,        const char * _Source,      size_t _MaxCount,        _locale_t _Locale);
+
+  int    __cdecl rand(void);
+
+
+
+
+  int    __cdecl _set_error_mode(     int _Mode);
+
+ void   __cdecl srand(     unsigned int _Seed);
+  double __cdecl strtod(       const char * _Str,                    char ** _EndPtr);
+  double __cdecl _strtod_l(       const char * _Str,                    char ** _EndPtr,        _locale_t _Locale);
+  long   __cdecl strtol(       const char * _Str,                    char ** _EndPtr,      int _Radix );
+  long   __cdecl _strtol_l(       const char *_Str,                    char **_EndPtr,      int _Radix,        _locale_t _Locale);
+  unsigned long __cdecl strtoul(       const char * _Str,                    char ** _EndPtr,      int _Radix);
+  unsigned long __cdecl _strtoul_l(const char * _Str,                    char **_EndPtr,      int _Radix,        _locale_t _Locale);
+
+
+ int __cdecl system(         const char * _Command);
+
+  errno_t __cdecl _ultoa_s(     unsigned long _Val,        char * _DstBuf,      size_t _Size,      int _Radix);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _ultoa_s(     unsigned long _Value,      char (&_Dest)[_Size],      int _Radix) { return _ultoa_s(_Value, _Dest, _Size, _Radix); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_ultoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _ultoa( unsigned long _Value,  char *_Dest,  int _Radix);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "wctomb_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) int    __cdecl wctomb(         char * _MbCh,        wchar_t _WCh);
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_wctomb_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) int    __cdecl _wctomb_l(       char * _MbCh,        wchar_t _WCh,        _locale_t _Locale);
+
+  errno_t __cdecl wctomb_s(       int * _SizeConverted,          char * _MbCh,      rsize_t _SizeInBytes,        wchar_t _WCh);
+
+  errno_t __cdecl _wctomb_s_l(       int * _SizeConverted,          char * _MbCh,      size_t _SizeInBytes,        wchar_t _WCh,        _locale_t _Locale);
+  errno_t __cdecl wcstombs_s(       size_t * _PtNumOfCharConverted,          char * _Dst,      size_t _DstSizeInBytes,        const wchar_t * _Src,      size_t _MaxCountInBytes);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl wcstombs_s(       size_t * _PtNumOfCharConverted,        char (&_Dest)[_Size],        const wchar_t * _Source,      size_t _MaxCount) { return wcstombs_s(_PtNumOfCharConverted, _Dest, _Size, _Source, _MaxCount); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "wcstombs_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl wcstombs( char *_Dest,  const wchar_t * _Source,  size_t _MaxCount);
+  errno_t __cdecl _wcstombs_s_l(       size_t * _PtNumOfCharConverted,          char * _Dst,      size_t _DstSizeInBytes,        const wchar_t * _Src,      size_t _MaxCountInBytes,        _locale_t _Locale);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _wcstombs_s_l(       size_t * _PtNumOfCharConverted,        char (&_Dest)[_Size],        const wchar_t * _Source,      size_t _MaxCount,        _locale_t _Locale) { return _wcstombs_s_l(_PtNumOfCharConverted, _Dest, _Size, _Source, _MaxCount, _Locale); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_wcstombs_s_l" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  size_t __cdecl _wcstombs_l(       char *_Dest,        const wchar_t * _Source,      size_t _MaxCount,        _locale_t _Locale);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  char * __cdecl _fullpath(         char * _FullPath,        const char * _Path,      size_t _SizeInBytes);
+
+
+
+
+
+  errno_t __cdecl _ecvt_s(       char * _DstBuf,      size_t _Size,      double _Val,      int _NumOfDights,      int * _PtDec,      int * _PtSign);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _ecvt_s(     char (&_Dest)[_Size],      double _Value,      int _NumOfDigits,      int * _PtDec,      int * _PtSign) { return _ecvt_s(_Dest, _Size, _Value, _NumOfDigits, _PtDec, _PtSign); } }
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ecvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _ecvt(     double _Val,      int _NumOfDigits,      int * _PtDec,      int * _PtSign);
+  errno_t __cdecl _fcvt_s(       char * _DstBuf,      size_t _Size,      double _Val,      int _NumOfDec,      int * _PtDec,      int * _PtSign);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _fcvt_s(     char (&_Dest)[_Size],      double _Value,      int _NumOfDigits,      int * _PtDec,      int * _PtSign) { return _fcvt_s(_Dest, _Size, _Value, _NumOfDigits, _PtDec, _PtSign); } }
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  char * __cdecl _fcvt(     double _Val,      int _NumOfDec,      int * _PtDec,      int * _PtSign);
+ errno_t __cdecl _gcvt_s(       char * _DstBuf,      size_t _Size,      double _Val,      int _NumOfDigits);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _gcvt_s(     char (&_Dest)[_Size],      double _Value,      int _NumOfDigits) { return _gcvt_s(_Dest, _Size, _Value, _NumOfDigits); } }
+ __declspec(deprecated("This function or variable may be unsafe. Consider using " "_gcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.")) char * __cdecl _gcvt(     double _Val,      int _NumOfDigits,      char * _DstBuf);
+
+  int __cdecl _atodbl(     _CRT_DOUBLE * _Result,        char * _Str);
+  int __cdecl _atoldbl(     _LDOUBLE * _Result,        char * _Str);
+  int __cdecl _atoflt(     _CRT_FLOAT * _Result,        char * _Str);
+  int __cdecl _atodbl_l(     _CRT_DOUBLE * _Result,        char * _Str,        _locale_t _Locale);
+ int __cdecl _atoldbl_l(     _LDOUBLE * _Result,        char * _Str,        _locale_t _Locale);
+ int __cdecl _atoflt_l(     _CRT_FLOAT * _Result,        char * _Str,        _locale_t _Locale);
+         unsigned long __cdecl _lrotl(     unsigned long _Val,      int _Shift);
+         unsigned long __cdecl _lrotr(     unsigned long _Val,      int _Shift);
+  errno_t   __cdecl _makepath_s(       char * _PathResult,        size_t _Size,          const char * _Drive,          const char * _Dir,          const char * _Filename,
+                 const char * _Ext);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _makepath_s(     char (&_Path)[_Size],          const char * _Drive,          const char * _Dir,          const char * _Filename,          const char * _Ext) { return _makepath_s(_Path, _Size, _Drive, _Dir, _Filename, _Ext); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_makepath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void __cdecl _makepath( char *_Path,  const char * _Drive,  const char * _Dir,  const char * _Filename,  const char * _Ext);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        _onexit_t __cdecl _onexit(       _onexit_t _Func);
+
+        
+
+
+
+
+  int    __cdecl _putenv(       const char * _EnvString);
+  errno_t __cdecl _putenv_s(       const char * _Name,        const char * _Value);
+         unsigned int __cdecl _rotl(     unsigned int _Val,      int _Shift);
+
+         unsigned __int64 __cdecl _rotl64(     unsigned __int64 _Val,      int _Shift);
+
+         unsigned int __cdecl _rotr(     unsigned int _Val,      int _Shift);
+
+         unsigned __int64 __cdecl _rotr64(     unsigned __int64 _Val,      int _Shift);
+
+ errno_t __cdecl _searchenv_s(       const char * _Filename,        const char * _EnvVar,        char * _ResultPath,      size_t _SizeInBytes);
+extern "C++" { template <size_t _Size> inline errno_t __cdecl _searchenv_s(       const char * _Filename,        const char * _EnvVar,      char (&_ResultPath)[_Size]) { return _searchenv_s(_Filename, _EnvVar, _ResultPath, _Size); } }
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_searchenv_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void __cdecl _searchenv( const char * _Filename,  const char * _EnvVar,  char *_ResultPath);
+
+__declspec(deprecated("This function or variable may be unsafe. Consider using " "_splitpath_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))  void   __cdecl _splitpath(       const char * _FullPath,        char * _Drive,        char * _Dir,        char * _Filename,        char * _Ext);
+  errno_t  __cdecl _splitpath_s(       const char * _FullPath, 
+		         char * _Drive,      size_t _DriveSize, 
+		         char * _Dir,      size_t _DirSize, 
+		         char * _Filename,      size_t _FilenameSize, 
+		         char * _Ext,      size_t _ExtSize);
+extern "C++" { template <size_t _DriveSize, size_t _DirSize, size_t _NameSize, size_t _ExtSize> inline errno_t __cdecl _splitpath_s(     const char *_Dest,        char (&_Drive)[_DriveSize],        char (&_Dir)[_DirSize],        char (&_Name)[_NameSize],        char (&_Ext)[_ExtSize]) { return _splitpath_s(_Dest, _Drive, _DriveSize, _Dir, _DirSize, _Name, _NameSize, _Ext, _ExtSize); } }
+
+ void   __cdecl _swab(           char * _Buf1,            char * _Buf2, int _SizeInBytes);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "SetErrorMode" "instead. See online help for details."))  void __cdecl _seterrormode(     int _Mode);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "Beep" "instead. See online help for details."))  void __cdecl _beep(     unsigned _Frequency,      unsigned _Duration);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "Sleep" "instead. See online help for details."))  void __cdecl _sleep(     unsigned long _Duration);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable: 4141)  
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_ecvt" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ecvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))		  char * __cdecl ecvt(     double _Val,      int _NumOfDigits,      int * _PtDec,      int * _PtSign);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_fcvt" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))		  char * __cdecl fcvt(     double _Val,      int _NumOfDec,      int * _PtDec,      int * _PtSign);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_gcvt" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_fcvt_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))		 char * __cdecl gcvt(     double _Val,      int _NumOfDigits,      char * _DstBuf);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_itoa" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_itoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))		 char * __cdecl itoa(     int _Val,      char * _DstBuf,      int _Radix);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_ltoa" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ltoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))		 char * __cdecl ltoa(     long _Val,      char * _DstBuf,      int _Radix);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_putenv" ". See online help for details.")) 									  int    __cdecl putenv(       const char * _EnvString);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_swab" ". See online help for details."))										 void   __cdecl swab(           char * _Buf1,           char * _Buf2,      int _SizeInBytes);
+__declspec(deprecated("The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: " "_ultoa" ". See online help for details.")) __declspec(deprecated("This function or variable may be unsafe. Consider using " "_ultoa_s" " instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."))	 char * __cdecl ultoa(     unsigned long _Val,      char * _Dstbuf,      int _Radix);
+#pragma warning(pop)
+_onexit_t __cdecl onexit(       _onexit_t _Func);
+
+
+
+
+
+
+}
+
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+ 
+namespace std {
+using ::size_t; 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;
+}
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+struct _Unchecked_iterator_tag
+	{
+	};
+struct _Range_checked_iterator_tag
+	{
+	};
+
+		
+struct _Unchanged_checked_iterator_base_type_tag
+	{
+	};
+
+struct _Different_checked_iterator_base_type_tag
+	{
+	};
+
+		
+struct _Undefined_inner_type_tag
+	{
+	};
+
+		
+struct _Undefined_move_tag
+	{
+	};
+
+struct _Swap_move_tag
+	{
+	};
+
+		
+
+
+		
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+ 
+ 
+
+  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct _Container_base
+	{	
+	};
+
+
+
+
+
+
+
+
+
+
+
+   
+
+   
+
+
+
+struct _Iterator_base
+	{	
+	typedef _Unchecked_iterator_tag _Checked_iterator_category;
+	typedef _Unchanged_checked_iterator_base_type_tag _Checked_iterator_base_type;
+	typedef _Undefined_inner_type_tag _Inner_type;
+
+	
+	 _Iterator_base()
+		: _Mycont(0)
+		{
+		}
+
+	const _Container_base *_Mycont;
+
+	};
+
+   
+
+typedef _Iterator_base _Iterator_base_secure;
+
+   
+
+
+
+
+
+
+
+
+
+
+  
+ 
+
+
+
+		
+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
+	{	
+	};
+
+struct _Int_iterator_tag
+	{	
+	};
+
+struct _Float_iterator_tag
+	{	
+	};
+
+		
+struct _Nonscalar_ptr_iterator_tag
+	{	
+	};
+struct _Scalar_ptr_iterator_tag
+	{	
+	};
+
+		
+template<class _Category,
+	class _Ty,
+	class _Diff = ptrdiff_t,
+	class _Pointer = _Ty *,
+	class _Reference = _Ty&>
+		struct iterator
+			: public _Iterator_base
+
+	{	
+	typedef _Category iterator_category;
+	typedef _Ty value_type;
+	typedef _Diff difference_type;
+	typedef _Diff distance_type;	
+	typedef _Pointer pointer;
+	typedef _Reference reference;
+	};
+
+template<class _Category,
+	class _Ty,
+	class _Diff = ptrdiff_t,
+	class _Pointer = _Ty *,
+	class _Reference = _Ty&,
+	class _Base_class = _Iterator_base>
+		struct _Iterator_with_base
+			: public _Base_class
+
+	{	
+	typedef _Category iterator_category;
+	typedef _Ty value_type;
+	typedef _Diff difference_type;
+	typedef _Diff distance_type;	
+	typedef _Pointer pointer;
+	typedef _Reference reference;
+	};
+
+template<class _Ty,
+	class _Diff,
+	class _Pointer,
+	class _Reference>
+	struct _Bidit
+		: public _Iterator_base
+
+	{	
+	typedef bidirectional_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef _Diff difference_type;
+	typedef _Diff distance_type;	
+	typedef _Pointer pointer;
+	typedef _Reference reference;
+	};
+
+template<class _Ty,
+	class _Diff,
+	class _Pointer,
+	class _Reference>
+	struct _Ranit
+		: public _Iterator_base
+
+	{	
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef _Diff difference_type;
+	typedef _Diff distance_type;	
+	typedef _Pointer pointer;
+	typedef _Reference reference;
+	};
+
+template<class _Ty,
+	class _Diff,
+	class _Pointer,
+	class _Reference,
+	class _Base_class>
+	struct _Ranit_base
+		: public _Base_class
+
+	{	
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef _Diff difference_type;
+	typedef _Diff distance_type;	
+	typedef _Pointer pointer;
+	typedef _Reference reference;
+	};
+
+struct _Outit
+	: public iterator<output_iterator_tag, void, void,
+		void, void>
+	{	
+	};
+
+template <class _Base_class>
+struct _Outit_with_base
+	: public _Iterator_with_base<output_iterator_tag, void, void,
+		void, void, _Base_class>
+	{	
+	};
+
+		
+template<class _Iter>
+	struct iterator_traits
+	{	
+	typedef typename _Iter::iterator_category iterator_category;
+	typedef typename _Iter::value_type value_type;
+	typedef typename _Iter::difference_type difference_type;
+	typedef difference_type distance_type;	
+	typedef typename _Iter::pointer pointer;
+	typedef typename _Iter::reference reference;
+	};
+
+template<class _Ty>
+	struct iterator_traits<_Ty *>
+	{	
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef ptrdiff_t difference_type;
+	typedef ptrdiff_t distance_type;	
+	typedef _Ty *pointer;
+	typedef _Ty& reference;
+	};
+
+template<class _Ty>
+	struct iterator_traits<const _Ty *>
+	{	
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef ptrdiff_t difference_type;
+	typedef ptrdiff_t distance_type;	
+	typedef const _Ty *pointer;
+	typedef const _Ty& reference;
+	};
+
+template<> struct iterator_traits<_Bool>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef _Bool value_type;
+	typedef _Bool difference_type;
+	typedef _Bool distance_type;
+	typedef _Bool * pointer;
+	typedef _Bool& reference;
+	};
+
+template<> struct iterator_traits<char>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef char value_type;
+	typedef char difference_type;
+	typedef char distance_type;
+	typedef char * pointer;
+	typedef char& reference;
+	};
+
+template<> struct iterator_traits<signed char>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef signed char value_type;
+	typedef signed char difference_type;
+	typedef signed char distance_type;
+	typedef signed char * pointer;
+	typedef signed char& reference;
+	};
+
+template<> struct iterator_traits<unsigned char>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef unsigned char value_type;
+	typedef unsigned char difference_type;
+	typedef unsigned char distance_type;
+	typedef unsigned char * pointer;
+	typedef unsigned char& reference;
+	};
+
+ 
+template<> struct iterator_traits<wchar_t>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef wchar_t value_type;
+	typedef wchar_t difference_type;
+	typedef wchar_t distance_type;
+	typedef wchar_t * pointer;
+	typedef wchar_t& reference;
+	};
+ 
+
+template<> struct iterator_traits<short>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef short value_type;
+	typedef short difference_type;
+	typedef short distance_type;
+	typedef short * pointer;
+	typedef short& reference;
+	};
+
+template<> struct iterator_traits<unsigned short>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef unsigned short value_type;
+	typedef unsigned short difference_type;
+	typedef unsigned short distance_type;
+	typedef unsigned short * pointer;
+	typedef unsigned short& reference;
+	};
+
+template<> struct iterator_traits<int>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef int value_type;
+	typedef int difference_type;
+	typedef int distance_type;	
+	typedef int * pointer;
+	typedef int& reference;
+	};
+
+template<> struct iterator_traits<unsigned int>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef unsigned int value_type;
+	typedef unsigned int difference_type;
+	typedef unsigned int distance_type;	
+	typedef unsigned int * pointer;
+	typedef unsigned int& reference;
+	};
+
+template<> struct iterator_traits<long>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef long value_type;
+	typedef long difference_type;
+	typedef long distance_type;	
+	typedef long * pointer;
+	typedef long& reference;
+	};
+
+template<> struct iterator_traits<unsigned long>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef unsigned long value_type;
+	typedef unsigned long difference_type;
+	typedef unsigned long distance_type;	
+	typedef unsigned long * pointer;
+	typedef unsigned long& reference;
+	};
+
+template<> struct iterator_traits<double>
+	{
+	typedef _Float_iterator_tag iterator_category;
+	typedef double value_type;
+	typedef double difference_type;
+	typedef double distance_type;	
+	typedef double * pointer;
+	typedef double& reference;
+	};
+
+template<> struct iterator_traits<float>
+	{
+	typedef _Float_iterator_tag iterator_category;
+	typedef float value_type;
+	typedef float difference_type;
+	typedef float distance_type;	
+	typedef float * pointer;
+	typedef float& reference;
+	};
+
+ 
+template<> struct iterator_traits<__int64>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef __int64 value_type;
+	typedef __int64 difference_type;
+	typedef __int64 distance_type;	
+	typedef __int64 * pointer;
+	typedef __int64& reference;
+	};
+
+template<> struct iterator_traits<unsigned __int64>
+	{	
+	typedef _Int_iterator_tag iterator_category;
+	typedef unsigned __int64 value_type;
+	typedef unsigned __int64 difference_type;
+	typedef unsigned __int64 distance_type;	
+	typedef unsigned __int64 * pointer;
+	typedef unsigned __int64& reference;
+	};
+ 
+
+		
+template<class _Iter> inline
+	typename iterator_traits<_Iter>::iterator_category
+		__cdecl _Iter_cat(const _Iter&)
+	{	
+	typename iterator_traits<_Iter>::iterator_category _Cat;
+	return (_Cat);
+	}
+
+		
+		
+		
+template<class _Cat1, class _Cat2>
+	class _Iter_random_helper
+	{
+	public:
+		typedef forward_iterator_tag _Iter_random_cat;
+	};
+
+template<>
+	class _Iter_random_helper<random_access_iterator_tag, random_access_iterator_tag>
+	{
+	public:
+		typedef random_access_iterator_tag _Iter_random_cat;
+	};
+
+template<class _Cat1, class _Cat2, class _Cat3>
+	class _Iter_random_helper3
+	{
+	public:
+		typedef forward_iterator_tag _Iter_random_cat;
+	};
+
+template<>
+	class _Iter_random_helper3<random_access_iterator_tag, random_access_iterator_tag, random_access_iterator_tag>
+	{
+	public:
+		typedef random_access_iterator_tag _Iter_random_cat;
+	};
+
+template<class _Iter1, class _Iter2> inline
+	typename _Iter_random_helper<
+		typename iterator_traits<_Iter1>::iterator_category,
+		typename iterator_traits<_Iter2>::iterator_category>::_Iter_random_cat
+		__cdecl _Iter_random(const _Iter1&, const _Iter2&)
+	{	
+	typename _Iter_random_helper<
+		iterator_traits<_Iter1>::iterator_category, 
+		iterator_traits<_Iter2>::iterator_category>::_Iter_random_cat _Cat;
+	return (_Cat);
+	}
+
+template<class _Iter1, class _Iter2, class _Iter3> inline
+	typename _Iter_random_helper3<
+		typename iterator_traits<_Iter1>::iterator_category,
+		typename iterator_traits<_Iter2>::iterator_category,
+		typename iterator_traits<_Iter3>::iterator_category>::_Iter_random_cat
+		__cdecl _Iter_random(const _Iter1&, const _Iter2&, const _Iter3&)
+	{	
+	typename _Iter_random_helper3<
+		iterator_traits<_Iter1>::iterator_category, 
+		iterator_traits<_Iter2>::iterator_category,
+		iterator_traits<_Iter3>::iterator_category>::_Iter_random_cat _Cat;
+	return (_Cat);
+	}
+
+		
+		
+	template <bool _Cond, class _Ty1, class _Ty2>
+	class _If
+	{
+	public:
+		typedef _Ty2 _Result;
+	};
+
+	template <class _Ty1, class _Ty2>
+	class _If<true, _Ty1, _Ty2>
+	{
+	public:
+		typedef _Ty1 _Result;
+	};
+
+		
+	template <bool _Secure_validation>
+	class _Secure_validation_helper
+	{
+	public:
+		typedef _Unchecked_iterator_tag _Checked_iterator_category;
+	};
+
+	template <>
+	class _Secure_validation_helper<true>
+	{
+	public:
+		typedef _Range_checked_iterator_tag _Checked_iterator_category;
+	};
+
+
+		
+	template <class _Iter, bool _Inherits_from_iterator_base>
+	class _Checked_iterator_category_helper
+	{
+	public:
+		typedef _Unchecked_iterator_tag _Checked_cat;
+	};
+
+	template <class _Iter>
+	class _Checked_iterator_category_helper<_Iter, true>
+	{
+	public:
+		typedef typename _Iter::_Checked_iterator_category _Checked_cat;
+	};
+
+	template <class _Iter>
+	class _Checked_iterator_category
+	{
+	public:
+		typedef typename _Checked_iterator_category_helper<_Iter, __is_base_of(_Iterator_base, _Iter)>::_Checked_cat _Checked_cat;
+	};
+
+	template<class _Iter> 
+	inline
+	typename _Checked_iterator_category<_Iter>::_Checked_cat _Checked_cat(const _Iter&)
+	{
+		typename _Checked_iterator_category<_Iter>::_Checked_cat _Cat;
+		return (_Cat);
+	}
+
+		
+	template <class _Iter, bool _Inherits_from_iterator_base>
+	class _Checked_iterator_base_helper2
+	{
+	public:
+		typedef _Unchanged_checked_iterator_base_type_tag _Checked_iterator_base_type;
+	};
+
+	template <class _Iter>
+	class _Checked_iterator_base_helper2<_Iter, true>
+	{
+	public:
+		typedef typename _Iter::_Checked_iterator_base_type _Checked_iterator_base_type;
+	};
+
+	template <class _Iter, class _Base_type>
+	class _Checked_iterator_base_helper1
+	{
+	public:
+		typedef _Different_checked_iterator_base_type_tag _Base_type_tag;
+		typedef _Base_type _Checked_iterator_base_type;
+	};
+
+	template <class _Iter>
+	class _Checked_iterator_base_helper1<_Iter, _Unchanged_checked_iterator_base_type_tag>
+	{
+	public:
+		typedef _Unchanged_checked_iterator_base_type_tag _Base_type_tag;
+		typedef _Iter _Checked_iterator_base_type;
+	};
+
+	template <class _Iter>
+	class _Checked_iterator_base_helper
+	{
+	public:
+		typedef _Checked_iterator_base_helper2<_Iter, __is_base_of(_Iterator_base, _Iter)> _Base_helper2;
+		typedef _Checked_iterator_base_helper1<_Iter, typename  _Base_helper2::_Checked_iterator_base_type > _Base_helper1;
+
+		typedef typename _Base_helper1::_Base_type_tag _Checked_iterator_base_type_tag;
+		typedef typename _Base_helper1::_Checked_iterator_base_type _Checked_iterator_base_type;
+	};
+
+	template<class _Iter, class _Base_tag>
+	inline
+	typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type
+		__cdecl _Checked_base(const _Iter &_It, _Base_tag)
+	{
+		return _It._Checked_iterator_base();
+	}
+
+	template<class _Iter>
+	inline
+	typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type
+		__cdecl _Checked_base(const _Iter &_It, _Unchanged_checked_iterator_base_type_tag)
+	{
+		return _It;
+	}
+
+	template<class _Iter, class _Base_tag>
+	inline
+	typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type
+		__cdecl _Checked_base(_Iter &_It, _Base_tag)
+	{
+		return _It._Checked_iterator_base();
+	}
+
+	template<class _Iter>
+	inline
+	typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type
+		__cdecl _Checked_base(_Iter &_It, _Unchanged_checked_iterator_base_type_tag)
+	{
+		return _It;
+	}
+
+	template<class _Iter>
+	inline
+	typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type
+		__cdecl _Checked_base(const _Iter &_It)
+	{
+		typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type_tag _Base_tag;
+		return _Checked_base(_It, _Base_tag);
+	}
+
+	template<class _Iter>
+	inline
+	typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type
+		__cdecl _Checked_base(_Iter &_It)
+	{
+		typename _Checked_iterator_base_helper<_Iter>::_Checked_iterator_base_type_tag _Base_tag;
+		return _Checked_base(_It, _Base_tag);
+	}
+
+		
+
+	template<class _DstIter, class _BaseIter>
+	inline
+	void __cdecl _Checked_assign_from_base(_DstIter &_Dest, const _BaseIter &_Src)
+	{
+		_Dest._Checked_iterator_assign_from_base(_Src);
+	}
+
+	template<class _Iter>
+	inline
+	void __cdecl _Checked_assign_from_base(_Iter &_Dest, const _Iter &_Src)
+	{
+		_Dest = _Src;
+	}
+
+		
+ 
+ 
+ 
+
+	
+	template <class _Value>
+	class _Move_operation_category
+	{
+	public:
+		typedef _Undefined_move_tag _Move_cat;
+	};
+
+	template<class _Iter>
+	inline
+		typename _Move_operation_category<typename iterator_traits<_Iter>::value_type>::_Move_cat _Move_cat(const _Iter&)
+	{
+		typename _Move_operation_category<typename iterator_traits<_Iter>::value_type>::_Move_cat _Cat;
+		return (_Cat);
+	}
+
+		
+template<class _T1, class _T2, class _Checked_Cat1, class _Checked_Cat2>
+struct _Ptr_cat_with_checked_cat_helper
+	{
+	typedef _Nonscalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<class _T1,	class _T2>
+struct _Ptr_cat_helper
+	{
+	typedef typename _Ptr_cat_with_checked_cat_helper<_T1, _T2, 
+		typename _Checked_iterator_category<_T1>::_Checked_cat,
+		typename _Checked_iterator_category<_T2>::_Checked_cat>::_Ptr_cat _Ptr_cat;
+	};
+
+template<class _T1,	class _T2, class _Checked_Cat1>
+struct _Ptr_cat_with_checked_cat_helper<_T1, _T2, _Checked_Cat1, _Range_checked_iterator_tag>
+	{
+	typedef typename _Ptr_cat_helper<_T1, typename _T2::_Inner_type>::_Ptr_cat _Ptr_cat;
+	};
+
+template<class _T1,	class _T2, class _Checked_Cat2>
+struct _Ptr_cat_with_checked_cat_helper<_T1, _T2, _Range_checked_iterator_tag, _Checked_Cat2>
+	{
+	typedef typename _Ptr_cat_helper<typename _T1::_Inner_type, _T2>::_Ptr_cat _Ptr_cat;
+	};
+
+template<class _T1,	class _T2>
+struct _Ptr_cat_with_checked_cat_helper<_T1, _T2, _Range_checked_iterator_tag, _Range_checked_iterator_tag>
+	{
+	typedef typename _Ptr_cat_helper<typename _T1::_Inner_type, typename _T2::_Inner_type>::_Ptr_cat _Ptr_cat;
+	};
+
+template<class _T1>
+struct _Ptr_cat_helper<_T1, _Undefined_inner_type_tag>
+	{
+	typedef _Nonscalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<class _T2>
+struct _Ptr_cat_helper<_Undefined_inner_type_tag, _T2>
+	{
+	typedef _Nonscalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<_Undefined_inner_type_tag, _Undefined_inner_type_tag>
+	{
+	typedef _Nonscalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+		
+template<>
+struct _Ptr_cat_helper<_Bool *, _Bool *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const _Bool *, _Bool *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<char *, char *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const char *, char *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<signed char *, signed char *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const signed char *, signed char *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<unsigned char *, unsigned char *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const unsigned char *, unsigned char *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+ 
+
+template<>
+struct _Ptr_cat_helper<wchar_t *, wchar_t *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const wchar_t *, wchar_t *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+ 
+template<>
+struct _Ptr_cat_helper<short *, short *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const short *, short *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<unsigned short *, unsigned short *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const unsigned short *, unsigned short *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<int *, int *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const int *, int *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<unsigned int *, unsigned int *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const unsigned int *, unsigned int *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<long *, long *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const long *, long *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<unsigned long *, unsigned long *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const unsigned long *, unsigned long *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<float *, float *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const float *, float *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<double *, double *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const double *, double *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<long double *, long double *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const long double *, long double *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+ 
+
+template<>
+struct _Ptr_cat_helper<__int64 *, __int64 *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const __int64 *, __int64 *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<unsigned __int64 *, unsigned __int64 *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<>
+struct _Ptr_cat_helper<const unsigned __int64 *, unsigned __int64 *>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+ 
+
+template<class _Ty>
+struct _Ptr_cat_helper<_Ty **, _Ty **>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<class _Ty>
+struct _Ptr_cat_helper<_Ty **, const _Ty **>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<class _Ty>
+struct _Ptr_cat_helper<_Ty *const *, _Ty **>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+template<class _Ty>
+struct _Ptr_cat_helper<_Ty *const *, const _Ty **>
+	{	
+	typedef _Scalar_ptr_iterator_tag _Ptr_cat;
+	};
+
+
+template<class _T1, class _T2> inline 
+typename _Ptr_cat_helper<_T1, _T2>::_Ptr_cat __cdecl _Ptr_cat(_T1&, _T2&)
+	{
+	typename _Ptr_cat_helper<_T1, _T2>::_Ptr_cat _Cat;
+	return (_Cat);
+	}
+
+
+ 
+
+
+
+ 
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+
+ 
+
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+
+ 
+
+
+
+
+
+
+
+
+		
+
+template<class _Iter> inline
+	typename iterator_traits<_Iter>::value_type *__cdecl _Val_type(_Iter)
+	{	
+	return (0);
+	}
+
+		
+template<class _InIt,
+	class _Diff> inline
+	void __cdecl advance(_InIt& _Where, _Diff _Off)
+	{	
+	_Advance(_Where, _Off, _Iter_cat(_Where));
+	}
+
+template<class _InIt,
+	class _Diff> inline
+	void __cdecl _Advance(_InIt& _Where, _Diff _Off, input_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	for (; 0 < _Off; --_Off)
+		++_Where;
+	}
+
+template<class _FI,
+	class _Diff> inline
+	void __cdecl _Advance(_FI& _Where, _Diff _Off, forward_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	for (; 0 < _Off; --_Off)
+		++_Where;
+	}
+
+#pragma warning(push)
+#pragma warning(disable: 6295)
+template<class _BI,
+	class _Diff> inline
+	void __cdecl _Advance(_BI& _Where, _Diff _Off, bidirectional_iterator_tag)
+	{	
+	for (; 0 < _Off; --_Off)
+		++_Where;
+	for (; _Off < 0; ++_Off)
+		--_Where;
+	}
+#pragma warning(pop)
+
+template<class _RI,
+	class _Diff> inline
+	void __cdecl _Advance(_RI& _Where, _Diff _Off, random_access_iterator_tag)
+	{	
+	_Where += _Off;
+	}
+
+		
+
+template<class _Iter> inline
+	typename iterator_traits<_Iter>::difference_type
+		* __cdecl _Dist_type(_Iter)
+	{	
+	return (0);
+	}
+
+		
+template<class _InIt,
+	class _Diff> inline
+		void __cdecl _Distance2(_InIt _First, _InIt _Last, _Diff& _Off,
+			input_iterator_tag)
+	{	
+	for (; _First != _Last; ++_First)
+		++_Off;
+	}
+
+template<class _FwdIt,
+	class _Diff> inline
+		void __cdecl _Distance2(_FwdIt _First, _FwdIt _Last, _Diff& _Off,
+			forward_iterator_tag)
+	{	
+	for (; _First != _Last; ++_First)
+		++_Off;
+	}
+
+template<class _BidIt,
+	class _Diff> inline
+		void __cdecl _Distance2(_BidIt _First, _BidIt _Last, _Diff& _Off,
+			bidirectional_iterator_tag)
+	{	
+	for (; _First != _Last; ++_First)
+		++_Off;
+	}
+
+template<class _RanIt,
+	class _Diff> inline
+		void __cdecl _Distance2(_RanIt _First, _RanIt _Last, _Diff& _Off,
+			random_access_iterator_tag)
+	{	
+
+ 
+
+
+
+
+
+
+
+	_Off += _Last - _First;
+	}
+
+template<class _InIt> inline
+	typename iterator_traits<_InIt>::difference_type
+		__cdecl distance(_InIt _First, _InIt _Last)
+	{	
+	typename iterator_traits<_InIt>::difference_type _Off = 0;
+	_Distance2(_First, _Last, _Off, _Iter_cat(_First));
+	return (_Off);
+	}
+
+
+template<class _InIt,
+	class _Diff> inline
+		void __cdecl _Distance(_InIt _First, _InIt _Last, _Diff& _Off)
+	{	
+	_Distance2(_First, _Last, _Off, _Iter_cat(_First));
+	}
+
+		
+template<class _RanIt>
+	class reverse_iterator
+		: public _Iterator_base_secure
+	{	
+public:
+	typedef reverse_iterator<_RanIt> _Myt;
+	typedef typename iterator_traits<_RanIt>::iterator_category iterator_category;
+	typedef typename iterator_traits<_RanIt>::value_type value_type;
+	typedef typename iterator_traits<_RanIt>::difference_type difference_type;
+	typedef typename iterator_traits<_RanIt>::difference_type distance_type;	
+	typedef typename iterator_traits<_RanIt>::pointer pointer;
+	typedef typename iterator_traits<_RanIt>::reference reference;
+	typedef _RanIt iterator_type;
+
+	 reverse_iterator()
+		{	
+		}
+
+	explicit  reverse_iterator(_RanIt _Right)
+		: current(_Right)
+		{	
+		}
+
+	template<class _Other>
+		 reverse_iterator(const reverse_iterator<_Other>& _Right)
+		: current(_Right.base())
+		{	
+		}
+
+	_RanIt  base() const
+		{	
+		return (current);
+		}
+
+
+	typedef typename ::std:: _Checked_iterator_category<_RanIt>::_Checked_cat _Checked_iterator_category;
+	typedef reverse_iterator<typename _Checked_iterator_base_helper<_RanIt>::_Checked_iterator_base_type> _Checked_iterator_base_type;
+ 
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		typename _Checked_iterator_base_type _Base(::std:: _Checked_base(current));
+		return _Base;
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		::std:: _Checked_assign_from_base(current, _Base.base());
+	}
+
+
+	reference  operator*() const
+		{	
+		_RanIt _Tmp = current;
+		return (*--_Tmp);
+		}
+
+	pointer  operator->() const
+		{	
+		return (&**this);
+		}
+
+	_Myt&  operator++()
+		{	
+		--current;
+		return (*this);
+		}
+
+	_Myt  operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		--current;
+		return (_Tmp);
+		}
+
+	_Myt&  operator--()
+		{	
+		++current;
+		return (*this);
+		}
+
+	_Myt  operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		++current;
+		return (_Tmp);
+		}
+
+	template<class _Other>
+		bool  _Equal(const reverse_iterator<_Other>& _Right) const
+		{	
+		return (current == _Right.base());
+		}
+
+
+
+	_Myt&  operator+=(difference_type _Off)
+		{	
+		current -= _Off;
+		return (*this);
+		}
+
+	_Myt  operator+(difference_type _Off) const
+		{	
+		return (_Myt(current - _Off));
+		}
+
+	_Myt&  operator-=(difference_type _Off)
+		{	
+		current += _Off;
+		return (*this);
+		}
+
+	_Myt  operator-(difference_type _Off) const
+		{	
+		return (_Myt(current + _Off));
+		}
+
+	reference  operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+
+	template<class _Other>
+		bool  _Less(const reverse_iterator<_Other>& _Right) const
+		{	
+		return (_Right.base() < current);
+		}
+
+	template<class _Other>
+		difference_type  _Minus(const reverse_iterator<_Other>& _Right) const
+		{	
+		return (_Right.base() - current);
+		}
+
+protected:
+	_RanIt current;	
+	};
+
+		
+template<class _RanIt,
+	class _Diff> inline
+	reverse_iterator<_RanIt> __cdecl operator+(_Diff _Off,
+		const reverse_iterator<_RanIt>& _Right)
+	{	
+	return (_Right + _Off);
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	typename reverse_iterator<_RanIt1>::difference_type
+		__cdecl operator-(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (_Left._Minus(_Right));
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	bool __cdecl operator==(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (_Left._Equal(_Right));
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	bool __cdecl operator!=(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	bool __cdecl operator<(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (_Left._Less(_Right));
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	bool __cdecl operator>(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	bool __cdecl operator<=(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _RanIt1,
+	class _RanIt2> inline
+	bool __cdecl operator>=(const reverse_iterator<_RanIt1>& _Left,
+		const reverse_iterator<_RanIt2>& _Right)
+	{	
+	return (!(_Left < _Right));
+	}
+
+		
+template<class _BidIt,
+	class _Ty,
+	class _Reference = _Ty&,
+	class _Pointer = _Ty *,
+	class _Diff = ptrdiff_t>
+	class reverse_bidirectional_iterator
+		: public iterator<bidirectional_iterator_tag, _Ty, _Diff,
+			_Pointer, _Reference>
+	{	
+public:
+	typedef reverse_bidirectional_iterator<_BidIt, _Ty, _Reference,
+		_Pointer, _Diff> _Myt;
+	typedef _BidIt iterator_type;
+
+	 reverse_bidirectional_iterator()
+		{	
+		}
+
+	explicit  reverse_bidirectional_iterator(_BidIt _Right)
+		: current(_Right)
+		{	
+		}
+
+	_BidIt  base() const
+		{	
+		return (current);
+		}
+
+	_Reference  operator*() const
+		{	
+		_BidIt _Tmp = current;
+		return (*--_Tmp);
+		}
+
+	_Pointer  operator->() const
+		{       
+		_Reference _Tmp = **this;
+		return (&_Tmp);
+		}
+
+	_Myt&  operator++()
+		{	
+		--current;
+		return (*this);
+		}
+
+	_Myt  operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		--current;
+		return (_Tmp);
+		}
+
+	_Myt&  operator--()
+		{	
+		++current;
+		return (*this);
+		}
+
+	_Myt  operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		++current;
+		return (_Tmp);
+		}
+
+	bool  operator==(const _Myt& _Right) const
+		{	
+		return (current == _Right.current);
+		}
+
+	bool  operator!=(const _Myt& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+protected:
+	_BidIt current;	
+	};
+
+		
+template<class _BidIt,
+	class _BidIt2 = _BidIt>
+	class _Revbidit
+		: public iterator<
+			typename iterator_traits<_BidIt>::iterator_category,
+			typename iterator_traits<_BidIt>::value_type,
+			typename iterator_traits<_BidIt>::difference_type,
+			typename iterator_traits<_BidIt>::pointer,
+			typename iterator_traits<_BidIt>::reference>
+	{	
+public:
+	typedef _Revbidit<_BidIt, _BidIt2> _Myt;
+	typedef typename iterator_traits<_BidIt>::difference_type _Diff;
+	typedef typename iterator_traits<_BidIt>::pointer _Pointer;
+	typedef typename iterator_traits<_BidIt>::reference _Reference;
+	typedef _BidIt iterator_type;
+
+	 _Revbidit()
+		{	
+		}
+
+	explicit  _Revbidit(_BidIt _Right)
+		: current(_Right)
+		{	
+		}
+
+	 _Revbidit(const _Revbidit<_BidIt2>& _Other)
+		: current (_Other.base())
+		{	
+		}
+
+	_BidIt  base() const
+		{	
+		return (current);
+		}
+
+	_Reference  operator*() const
+		{	
+		_BidIt _Tmp = current;
+		return (*--_Tmp);
+		}
+
+	_Pointer  operator->() const
+		{	
+		_Reference _Tmp = **this;
+		return (&_Tmp);
+		}
+
+	_Myt&  operator++()
+		{	
+		--current;
+		return (*this);
+		}
+
+	_Myt  operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		--current;
+		return (_Tmp);
+		}
+
+	_Myt&  operator--()
+		{	
+		++current;
+		return (*this);
+		}
+
+	_Myt  operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		++current;
+		return (_Tmp);
+		}
+
+	bool  operator==(const _Myt& _Right) const
+		{	
+		return (current == _Right.current);
+		}
+
+	bool  operator!=(const _Myt& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+protected:
+	_BidIt current;
+	};
+
+		
+template<class _Elem,
+	class _Traits>
+	class istreambuf_iterator
+		: public _Iterator_with_base<input_iterator_tag,
+			_Elem, typename _Traits::off_type, _Elem *, _Elem&, _Iterator_base_secure>
+	{	
+	typedef istreambuf_iterator<_Elem, _Traits> _Myt;
+public:
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef basic_streambuf<_Elem, _Traits> streambuf_type;
+	typedef basic_istream<_Elem, _Traits> istream_type;
+	typedef typename traits_type::int_type int_type;
+
+	 istreambuf_iterator(streambuf_type *_Sb = 0) throw ()
+		: _Strbuf(_Sb), _Got(_Sb == 0)
+		{	
+		}
+
+	 istreambuf_iterator(istream_type& _Istr) throw ()
+		: _Strbuf(_Istr.rdbuf()), _Got(_Istr.rdbuf() == 0)
+		{	
+		}
+
+	_Elem  operator*() const
+		{	
+		if (!_Got)
+			((_Myt *)this)->_Peek();
+
+ 
+
+
+
+
+		return (_Val);
+		}
+
+	_Myt&  operator++()
+		{	
+
+ 
+
+
+
+
+		_Inc();
+		return (*this);
+		}
+
+	_Myt  operator++(int)
+		{	
+		if (!_Got)
+			_Peek();
+		_Myt _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	bool  equal(const _Myt& _Right) const
+		{	
+		if (!_Got)
+			((_Myt *)this)->_Peek();
+		if (!_Right._Got)
+			((_Myt *)&_Right)->_Peek();
+		return (_Strbuf == 0 && _Right._Strbuf == 0
+			|| _Strbuf != 0 && _Right._Strbuf != 0);
+		}
+
+private:
+	void  _Inc()
+		{	
+		if (_Strbuf == 0
+			|| traits_type::eq_int_type(traits_type::eof(),
+				_Strbuf->sbumpc()))
+			_Strbuf = 0, _Got = true;
+		else
+			_Got = false;
+		}
+
+	_Elem  _Peek()
+		{	
+		int_type _Meta;
+		if (_Strbuf == 0
+			|| traits_type::eq_int_type(traits_type::eof(),
+				_Meta = _Strbuf->sgetc()))
+			_Strbuf = 0;
+		else
+			_Val = traits_type::to_char_type(_Meta);
+		_Got = true;
+		return (_Val);
+		}
+
+	streambuf_type *_Strbuf;	
+	bool _Got;	
+	_Elem _Val;	
+	};
+
+		
+template<class _Elem,
+	class _Traits> inline
+	bool __cdecl operator==(
+		const istreambuf_iterator<_Elem, _Traits>& _Left,
+		const istreambuf_iterator<_Elem, _Traits>& _Right)
+	{	
+	return (_Left.equal(_Right));
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	bool __cdecl operator!=(
+		const istreambuf_iterator<_Elem, _Traits>& _Left,
+		const istreambuf_iterator<_Elem, _Traits>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+		
+template<class _Elem,
+	class _Traits>
+	class ostreambuf_iterator
+		: public _Outit_with_base<_Iterator_base_secure>
+	{	
+	typedef ostreambuf_iterator<_Elem, _Traits> _Myt;
+public:
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef basic_streambuf<_Elem, _Traits> streambuf_type;
+	typedef basic_ostream<_Elem, _Traits> ostream_type;
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+	 ostreambuf_iterator(streambuf_type *_Sb) throw ()
+		: _Failed(false), _Strbuf(_Sb)
+		{	
+		}
+
+	 ostreambuf_iterator(ostream_type& _Ostr) throw ()
+		: _Failed(false), _Strbuf(_Ostr.rdbuf())
+		{	
+		}
+
+	_Myt&  operator=(_Elem _Right)
+		{	
+		if (_Strbuf == 0
+			|| traits_type::eq_int_type(_Traits::eof(),
+				_Strbuf->sputc(_Right)))
+			_Failed = true;
+		return (*this);
+		}
+
+	_Myt&  operator*()
+		{	
+		return (*this);
+		}
+
+	_Myt&  operator++()
+		{	
+		return (*this);
+		}
+
+	_Myt&  operator++(int)
+		{	
+		return (*this);
+		}
+
+	bool  failed() const throw ()
+		{	
+		return (_Failed);
+		}
+
+private:
+	bool _Failed;	
+	streambuf_type *_Strbuf;	
+	};
+
+
+
+		
+template<class _InIt, class _OutIt, class _InOutItCat>
+inline
+	_OutIt __cdecl _Copy_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat, _Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	for (; _First != _Last; ++_Dest, ++_First)
+		*_Dest = *_First;
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt>
+inline
+	_OutIt __cdecl _Copy_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		random_access_iterator_tag, _Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last - _First);
+	_Copy_opt(_First, _Last, ::std:: _Checked_base(_Dest), 
+		forward_iterator_tag(), _Nonscalar_ptr_iterator_tag(), _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+template<class _InIt, class _OutIt, class _InOutItCat>
+inline
+	_OutIt __cdecl _Copy_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat, _Scalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+
+	ptrdiff_t _Off = _Last - _First;	
+	
+	_OutIt _Result = _Dest + _Off;
+	if (_Off > 0)
+		::memmove_s((&*_Dest), (_Off * sizeof (*_First)), (&*_First), (_Off * sizeof (*_First)));
+	return _Result;
+	}
+
+
+template<class _InIt, class _OutIt, class _InOutItCat, class _Ty> 
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt __cdecl _Copy_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat _First_dest_cat, _Ty _PtrCat, _Unchecked_iterator_tag)
+	{
+	return _Copy_opt(_First, _Last, _Dest, _First_dest_cat, _PtrCat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt __cdecl copy(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+	return (_Copy_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, 
+		_Iter_random(_First, _Dest), _Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+		
+template<class _InIt, class _OutIt, class _InOutItCat, class _MoveCatTy>
+inline
+	_OutIt __cdecl _Move_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat _First_dest_cat, _MoveCatTy, _Range_checked_iterator_tag)
+	{	
+	return _Copy_opt(_First, _Last, _Dest,
+		_First_dest_cat, _Ptr_cat(_First, _Dest), _Range_checked_iterator_tag());
+	}
+
+template<class _InIt, class _OutIt, class _InOutItCat>
+inline
+	_OutIt __cdecl _Move_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat, _Swap_move_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	for (; _First != _Last; ++_Dest, ++_First)
+		::std:: swap(*_Dest, *_First);
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt, class _InOutItCat>
+inline
+	_OutIt __cdecl _Move_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		random_access_iterator_tag, _Swap_move_tag _Move_cat, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last - _First);
+	_Move_opt(_First, _Last, ::std:: _Checked_base(_Dest),
+		forward_iterator_tag(), _Move_cat, _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+
+template<class _InIt, class _OutIt, class _InOutItCat, class _MoveCatTy> 
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt __cdecl _Move_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat _First_dest_cat, _MoveCatTy _Move_cat, _Unchecked_iterator_tag)
+	{
+	return _Move_opt(_First, _Last, _Dest, _First_dest_cat, _Move_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt, class _OutIt>
+inline
+	_OutIt __cdecl _Move(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+	return _Move_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+		_Iter_random(_First, _Dest), _Move_cat(_Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _BidIt1, class _BidIt2, class _InOutItCat>
+inline
+	_BidIt2 __cdecl _Copy_backward_opt(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest,
+		_InOutItCat, _Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	while (_First != _Last)
+		*--_Dest = *--_Last;
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt>
+inline
+	_OutIt __cdecl _Copy_backward_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		random_access_iterator_tag, _Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest - (_Last - _First);
+	_Copy_backward_opt(_First, _Last, ::std:: _Checked_base(_Dest),
+		forward_iterator_tag(), _Nonscalar_ptr_iterator_tag(), _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+template<class _InIt, class _OutIt, class _InOutItCat>
+inline
+	_OutIt __cdecl _Copy_backward_opt(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_InOutItCat, _Scalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+
+	ptrdiff_t _Off = _Last - _First;	
+	
+
+
+	_OutIt _Result = _Dest - _Off;
+	if (_Off > 0)
+		::memmove_s((&*_Result), (_Off * sizeof (*_First)), (&*_First), (_Off * sizeof (*_First)));
+	return _Result;
+	}
+
+
+template<class _BidIt1, class _BidIt2, class _InOutItCat, class _Ty>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_BidIt2 __cdecl _Copy_backward_opt(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest,
+		_InOutItCat _First_dest_cat, _Ty _PtrCat, _Unchecked_iterator_tag)
+	{
+	return _Copy_backward_opt(_First, _Last, _Dest,
+		_First_dest_cat, _PtrCat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _BidIt1,
+	class _BidIt2> inline
+	_BidIt2 __cdecl copy_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest)
+	{	
+	return _Copy_backward_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+		_Iter_random(_First, _Dest), _Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _BidIt1, class _BidIt2, class _InOutItCat, class _MoveCatTy>
+inline
+	_BidIt2 __cdecl _Move_backward_opt(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest,
+		_InOutItCat _First_dest_cat, _MoveCatTy, _Range_checked_iterator_tag)
+	{	
+	return _Copy_backward_opt(_First, _Last, _Dest,
+		_First_dest_cat, _Ptr_cat(_First, _Dest), _Range_checked_iterator_tag());
+	}
+
+template<class _BidIt1, class _BidIt2, class _InOutItCat>
+inline
+	_BidIt2 __cdecl _Move_backward_opt(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest,
+		_InOutItCat, _Swap_move_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	while (_First != _Last)
+		::std:: swap(*--_Dest, *--_Last);
+	return (_Dest);
+	}
+
+
+template<class _BidIt1, class _BidIt2>
+inline
+	_BidIt2 __cdecl _Move_backward_opt(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest,
+		random_access_iterator_tag, _Swap_move_tag _Move_cat, _Range_checked_iterator_tag)
+	{	
+	
+	_BidIt2 _Result = _Dest - (_Last - _First);
+	_Move_backward_opt(_First, _Last, ::std:: _Checked_base(_Dest),
+		forward_iterator_tag(), _Move_cat, _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+
+template<class _BidIt1, class _BidIt2, class _InOutItCat, class _MoveCatTy>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_BidIt2 __cdecl _Move_backward_opt(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest,
+		_InOutItCat _First_dest_cat, _MoveCatTy _Move_cat, _Unchecked_iterator_tag)
+	{
+	return _Move_backward_opt(_First, _Last, _Dest,
+		_First_dest_cat, _Move_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _BidIt1, class _BidIt2>
+inline
+	_BidIt2 __cdecl _Move_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest)
+	{	
+	return _Move_backward_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+		_Iter_random(_First, _Dest), _Move_cat(_Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1, class _InIt2, class _InItCats>
+inline
+	pair<_InIt1, _InIt2>
+		__cdecl _Mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+			_InItCats, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+
+	for (; _First1 != _Last1 && *_First1 == *_First2; )
+		++_First1, ++_First2;
+	return (pair<_InIt1, _InIt2>(_First1, _First2));
+	}
+
+
+template<class _InIt1, class _InIt2>
+inline
+	pair<_InIt1, _InIt2>
+		__cdecl _Mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+			random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_InIt2 _Last2 = _First2 + (_Last1 - _First1); (_Last2);
+	pair<_InIt1, typename ::std:: _Checked_iterator_base_helper<_InIt2>::_Checked_iterator_base_type> _Result =
+		_Mismatch(_First1, _Last1, ::std:: _Checked_base(_First2),
+			forward_iterator_tag(), _Range_checked_iterator_tag());
+	::std:: _Checked_assign_from_base(_First2, _Result.second);
+	return (pair<_InIt1, _InIt2>(_Result.first, _First2));
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _InItCats>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	pair<_InIt1, _InIt2>
+		__cdecl _Mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+			_InItCats _InIt_cats, _Unchecked_iterator_tag)
+	{
+	return _Mismatch(_First1, _Last1, _First2,
+		_InIt_cats, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1, class _InIt2>
+inline
+	pair<_InIt1, _InIt2>
+		__cdecl mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
+	{	
+
+	pair<typename ::std:: _Checked_iterator_base_helper<_InIt1>::_Checked_iterator_base_type, _InIt2> _Result =
+		_Mismatch(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+			_Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	::std:: _Checked_assign_from_base(_First1, _Result.first);
+	return (pair<_InIt1, _InIt2>(_First1, _Result.second));
+
+
+
+
+	}
+
+		
+template<class _InIt1, class _InIt2, class _Pr, class _InItCats>
+inline
+	pair<_InIt1, _InIt2>
+		__cdecl _Mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred,
+			_InItCats, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+
+
+	for (; _First1 != _Last1 && _Pred(*_First1, *_First2); )
+		++_First1, ++_First2;
+	return (pair<_InIt1, _InIt2>(_First1, _First2));
+	}
+
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	pair<_InIt1, _InIt2>
+		__cdecl _Mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred,
+			random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_InIt2 _Last2 = _First2 + (_Last1 - _First1); (_Last2);
+	pair<_InIt1, typename ::std:: _Checked_iterator_base_helper<_InIt2>::_Checked_iterator_base_type> _Result =
+		_Mismatch(_First1, _Last1, ::std:: _Checked_base(_First2), _Pred,
+			forward_iterator_tag(), _Range_checked_iterator_tag());
+	::std:: _Checked_assign_from_base(_First2, _Result.second);
+	return (pair<_InIt1, _InIt2>(_Result.first, _First2));
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _Pr, class _InItCats>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	pair<_InIt1, _InIt2>
+		__cdecl _Mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred,
+			_InItCats _InIt_cats, _Unchecked_iterator_tag)
+	{
+	return _Mismatch(_First1, _Last1, _First2, _Pred,
+		_InIt_cats, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	pair<_InIt1, _InIt2>
+		__cdecl mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred)
+	{	
+
+	pair<typename ::std:: _Checked_iterator_base_helper<_InIt1>::_Checked_iterator_base_type, _InIt2> _Result =
+		_Mismatch(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Pred,
+			_Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	::std:: _Checked_assign_from_base(_First1, _Result.first);
+	return (pair<_InIt1, _InIt2>(_First1, _Result.second));
+
+
+
+
+	}
+
+		
+template<class _InIt1, class _InIt2, class _InItCats>
+inline
+	bool __cdecl _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_InItCats, _Range_checked_iterator_tag)
+	{	
+	return (_Mismatch(_First1, _Last1, _First2,
+		forward_iterator_tag(), _Range_checked_iterator_tag()).first == _Last1);
+	}
+
+inline bool __cdecl _Equal(const char *_First1,
+	const char *_Last1, const char *_First2,
+	random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+ 
+
+
+
+
+
+	return (::memcmp(_First1, _First2, _Last1 - _First1) == 0);
+	}
+
+inline bool __cdecl _Equal(const signed char *_First1,
+	const signed char *_Last1, const signed char *_First2,
+	random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+ 
+
+
+
+
+
+	return (::memcmp(_First1, _First2, _Last1 - _First1) == 0);
+	}
+
+inline bool __cdecl _Equal(const unsigned char *_First1,
+	const unsigned char *_Last1, const unsigned char *_First2,
+	random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+ 
+
+
+
+
+
+	return (::memcmp(_First1, _First2, _Last1 - _First1) == 0);
+	}
+
+
+template<class _InIt1, class _InIt2>
+inline
+	bool __cdecl _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{
+	
+	_InIt2 _Last2 = _First2 + (_Last1 - _First1); (_Last2);
+	return _Equal(_First1, _Last1, ::std:: _Checked_base(_First2),
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _InItCats>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	bool __cdecl _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_InItCats _InIt_cats,_Unchecked_iterator_tag)
+	{
+	return _Equal(_First1, _Last1, _First2,
+		_InIt_cats, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1, class _InIt2>
+inline
+	bool __cdecl equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
+	{	
+	return _Equal(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+		_Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	}
+
+		
+template<class _InIt1, class _InIt2, class _Pr, class _InItCats>
+inline
+	bool __cdecl _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred,
+		_InItCats, _Range_checked_iterator_tag)
+	{	
+	return (_Mismatch(_First1, _Last1, _First2, _Pred,
+		forward_iterator_tag(), _Range_checked_iterator_tag()).first == _Last1);
+	}
+
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	bool __cdecl _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{
+	
+	_InIt2 _Last2 = _First2 + (_Last1 - _First1); (_Last2);
+	return _Equal(_First1, _Last1, ::std:: _Checked_base(_First2), _Pred,
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _Pr, class _InItCats>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	bool __cdecl _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred,
+		_InItCats _InIt_cats,_Unchecked_iterator_tag)
+	{
+	return _Equal(_First1, _Last1, _First2, _Pred,
+		_InIt_cats, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	bool __cdecl equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred)
+	{	
+	return _Equal(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Pred,
+		_Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	}
+
+		
+template<class _FwdIt, class _Ty> inline
+	void __cdecl _Fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
+	{	
+	;
+	for (; _First != _Last; ++_First)
+		*_First = _Val;
+	}
+
+inline void __cdecl _Fill(       char *_First, 
+	       char *_Last, int _Val)
+	{	
+	;
+	::memset(_First, _Val, _Last - _First);
+	}
+
+inline void __cdecl _Fill(       signed char *_First, 
+	       signed char *_Last, int _Val)
+	{	
+	;
+	::memset(_First, _Val, _Last - _First);
+	}
+
+inline void __cdecl _Fill(
+	       unsigned char *_First,
+	       unsigned char *_Last, int _Val)
+	{	
+	;
+	::memset(_First, _Val, _Last - _First);
+	}
+
+template<class _FwdIt, class _Ty> inline
+	void __cdecl fill(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
+	{	
+	_Fill(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val);
+	}
+
+		
+template<class _OutIt,
+	class _Diff,
+	class _Ty> inline
+	void __cdecl _Fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val,
+		_Range_checked_iterator_tag)
+	{	
+	for (; 0 < _Count; --_Count, ++_First)
+		*_First = _Val;
+	}
+
+inline void __cdecl _Fill_n(         char *_First, 
+		size_t _Count, int _Val, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	::memset(_First, _Val, _Count);
+	}
+
+inline void __cdecl _Fill_n(         signed char *_First, 
+		size_t _Count, int _Val, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	::memset(_First, _Val, _Count);
+	}
+
+inline void __cdecl _Fill_n(         unsigned char *_First, 
+		size_t _Count, int _Val, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	::memset(_First, _Val, _Count);
+	}
+
+template<class _OutIt, class _Diff, class _Ty, class _OutCat>
+inline
+	void __cdecl _Fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val,
+		_OutCat, _Range_checked_iterator_tag)
+	{
+		_Fill_n(_First, _Count, _Val, _Range_checked_iterator_tag());
+	}
+
+
+template<class _OutIt, class _Diff, class _Ty>
+inline
+	void __cdecl _Fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{
+		
+		_OutIt _Last = _First + _Count; (_Last);
+		_Fill_n(::std:: _Checked_base(_First), _Count, _Val,
+			_Range_checked_iterator_tag());
+	}
+
+
+
+template<class _OutIt, class _Diff, class _Ty, class _OutCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	void __cdecl _Fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val,
+		_OutCat _First_cat, _Unchecked_iterator_tag)
+	{
+		_Fill_n(_First, _Count, _Val, _First_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _OutIt,
+	class _Diff,
+	class _Ty> inline
+	void __cdecl fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val)
+	{	
+		_Fill_n(_First, _Count, _Val, _Iter_cat(_First), ::std:: _Checked_cat(_First));
+	}
+
+		
+template<class _InIt1, class _InIt2> inline
+	bool __cdecl _Lexicographical_compare(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2)
+	{	
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, ++_First2)
+		if (((*_First1) < (*_First2)))
+			return (true);
+		else if (*_First2 < *_First1)
+			return (false);
+	return (_First1 == _Last1 && _First2 != _Last2);
+	}
+
+template<class _InIt1, class _InIt2> inline
+	bool __cdecl lexicographical_compare(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2)
+	{	
+	return _Lexicographical_compare(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2));
+	}
+
+inline bool __cdecl lexicographical_compare(
+	const unsigned char *_First1, const unsigned char *_Last1,
+	const unsigned char *_First2, const unsigned char *_Last2)
+	{	
+	;
+	;
+	ptrdiff_t _Num1 = _Last1 - _First1;
+	ptrdiff_t _Num2 = _Last2 - _First2;
+	int _Ans = ::memcmp(_First1, _First2, _Num1 < _Num2 ? _Num1 : _Num2);
+	return (_Ans < 0 || _Ans == 0 && _Num1 < _Num2);
+	}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _Pr> inline
+	bool __cdecl _Lexicographical_compare(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _Pr _Pred)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, ++_First2)
+		if (_Pred(*_First1, *_First2))
+			return (true);
+		else if (_Pred(*_First2, *_First1))
+			return (false);
+	return (_First1 == _Last1 && _First2 != _Last2);
+	}
+
+template<class _InIt1, class _InIt2, class _Pr> inline
+	bool __cdecl lexicographical_compare(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _Pr _Pred)
+	{	
+	return _Lexicographical_compare(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Pred);
+	}
+
+ 
+  
+  
+ 
+
+ 
+  
+  
+  
+  
+ 
+
+
+
+
+		
+template<class _Ty> inline
+	const _Ty& (__cdecl max)(const _Ty& _Left, const _Ty& _Right)
+	{	
+	return (((_Left) < (_Right)) ? _Right : _Left);
+	}
+
+		
+template<class _Ty,
+	class _Pr> inline
+	const _Ty& (__cdecl max)(const _Ty& _Left, const _Ty& _Right, _Pr _Pred)
+	{	
+	return (_Pred(_Left, _Right) ? _Right : _Left);
+	}
+
+		
+template<class _Ty> inline
+	const _Ty& (__cdecl min)(const _Ty& _Left, const _Ty& _Right)
+	{	
+	return (((_Right) < (_Left)) ? _Right : _Left);
+	}
+
+		
+template<class _Ty,
+	class _Pr> inline
+	const _Ty& (__cdecl min)(const _Ty& _Left, const _Ty& _Right, _Pr _Pred)
+	{	
+	return (_Pred(_Right, _Left) ? _Right : _Left);
+	}
+
+  
+  
+
+}
+
+namespace stdext {
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt __cdecl unchecked_copy(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+		return (::std:: _Copy_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Ptr_cat(_First, _Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt __cdecl checked_copy(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+		return (::std:: _Copy_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _BidIt1,
+	class _BidIt2> inline
+	_BidIt2 __cdecl unchecked_copy_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest)
+	{	
+		return (::std:: _Copy_backward_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Ptr_cat(_First, _Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _BidIt1,
+	class _BidIt2> inline
+	_BidIt2 __cdecl checked_copy_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest)
+	{	
+		return (::std:: _Copy_backward_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt __cdecl _Unchecked_move(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+		return (::std:: _Move_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Move_cat(_Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt __cdecl _Checked_move(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+		return (::std:: _Move_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Move_cat(_Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _BidIt1,
+	class _BidIt2> inline
+	_BidIt2 __cdecl _Unchecked_move_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest)
+	{	
+		return (::std:: _Move_backward_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Move_cat(_Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _BidIt1,
+	class _BidIt2> inline
+	_BidIt2 __cdecl _Checked_move_backward(_BidIt1 _First, _BidIt1 _Last, _BidIt2 _Dest)
+	{	
+		return (::std:: _Move_backward_opt(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Move_cat(_Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _OutIt,
+	class _Diff,
+	class _Ty> inline
+	void __cdecl unchecked_fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val)
+	{	
+		::std:: _Fill_n(_First, _Count, _Val, ::std:: _Iter_cat(_First), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _OutIt,
+	class _Diff,
+	class _Ty> inline
+	void __cdecl checked_fill_n(_OutIt _First, _Diff _Count, const _Ty& _Val)
+	{	
+		::std:: _Fill_n(_First, _Count, _Val, ::std:: _Iter_cat(_First), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1, class _InIt2>
+inline
+	::std:: pair<_InIt1, _InIt2>
+		__cdecl unchecked_mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
+	{	
+
+	::std:: pair<typename ::std:: _Checked_iterator_base_helper<_InIt1>::_Checked_iterator_base_type, _InIt2> _Result =
+		::std:: _Mismatch(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Range_checked_iterator_tag());
+	::std:: _Checked_assign_from_base(_First1, _Result.first);
+	return (::std:: pair<_InIt1, _InIt2>(_First1, _Result.second));
+
+
+
+
+	}
+
+template<class _InIt1, class _InIt2>
+inline
+	::std:: pair<_InIt1, _InIt2>
+		__cdecl checked_mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
+	{	
+
+	::std:: pair<typename ::std:: _Checked_iterator_base_helper<_InIt1>::_Checked_iterator_base_type, _InIt2> _Result =
+		::std:: _Mismatch(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	::std:: _Checked_assign_from_base(_First1, _Result.first);
+	return (::std:: pair<_InIt1, _InIt2>(_First1, _Result.second));
+
+
+
+
+	}
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	::std:: pair<_InIt1, _InIt2>
+		__cdecl unchecked_mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred)
+	{	
+
+	::std:: pair<typename ::std:: _Checked_iterator_base_helper<_InIt1>::_Checked_iterator_base_type, _InIt2> _Result =
+		::std:: _Mismatch(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Pred,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Range_checked_iterator_tag());
+	::std:: _Checked_assign_from_base(_First1, _Result.first);
+	return (::std:: pair<_InIt1, _InIt2>(_First1, _Result.second));
+
+
+
+
+	}
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	::std:: pair<_InIt1, _InIt2>
+		__cdecl checked_mismatch(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred)
+	{	
+
+	::std:: pair<typename ::std:: _Checked_iterator_base_helper<_InIt1>::_Checked_iterator_base_type, _InIt2> _Result =
+		::std:: _Mismatch(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Pred,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	::std:: _Checked_assign_from_base(_First1, _Result.first);
+	return (::std:: pair<_InIt1, _InIt2>(_First1, _Result.second));
+
+
+
+
+	}
+
+template<class _InIt1, class _InIt2>
+inline
+	bool __cdecl unchecked_equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
+	{	
+	return ::std:: _Equal(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+		::std:: _Iter_random(_First1, _First2), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1, class _InIt2>
+inline
+	bool __cdecl checked_equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
+	{	
+	return ::std:: _Equal(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+		::std:: _Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	}
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	bool __cdecl unchecked_equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred)
+	{	
+	return ::std:: _Equal(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Pred,
+		::std:: _Iter_random(_First1, _First2), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1, class _InIt2, class _Pr>
+inline
+	bool __cdecl checked_equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _Pr _Pred)
+	{	
+	return ::std:: _Equal(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Pred,
+		::std:: _Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	}
+
+}
+
+
+
+ 
+ 
+
+ 
+ 
+
+ 
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern "C"
+ void __cdecl _invalid_parameter_noinfo(void);
+
+
+
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+ #pragma warning(disable: 4100)
+
+
+
+ 
+ 
+ 
+
+
+ 
+
+ 
+
+ 
+
+ 
+
+
+namespace std {
+		
+template<class _Ty> inline
+	_Ty  *_Allocate(size_t _Count, _Ty  *)
+	{	
+	if (_Count <= 0)
+		_Count = 0;
+	else if (((size_t)(-1) / _Count) < sizeof (_Ty))
+		throw std::bad_alloc(0);
+
+		
+	return ((_Ty  *)::operator new(_Count * sizeof (_Ty)));
+	}
+
+		
+template<class _T1,
+	class _T2> inline
+	void _Construct(_T1  *_Ptr, const _T2& _Val)
+	{	
+	void  *_Vptr = _Ptr;
+	::new (_Vptr) _T1(_Val);
+	}
+
+		
+template<class _Ty> inline
+	void _Destroy(_Ty  *_Ptr)
+	{	
+	(_Ptr)->~_Ty();
+	}
+
+template<> inline
+	void _Destroy(char  *)
+	{	
+	}
+
+template<> inline
+	void _Destroy(wchar_t  *)
+	{	
+	}
+
+
+		
+template<class _Ty>
+	struct _Allocator_base
+	{	
+	typedef _Ty value_type;
+	};
+
+		
+template<class _Ty>
+	struct _Allocator_base<const _Ty>
+	{	
+	typedef _Ty value_type;
+	};
+
+		
+template<class _Ty>
+	class allocator
+		: public _Allocator_base<_Ty>
+	{	
+public:
+	typedef _Allocator_base<_Ty> _Mybase;
+	typedef typename _Mybase::value_type value_type;
+	typedef value_type  *pointer;
+	typedef value_type & reference;
+	typedef const value_type  *const_pointer;
+	typedef const value_type & const_reference;
+
+	typedef size_t size_type;
+	typedef ptrdiff_t difference_type;
+
+	template<class _Other>
+		struct rebind
+		{	
+		typedef allocator<_Other> other;
+		};
+
+	pointer address(reference _Val) const
+		{	
+		return (&_Val);
+		}
+
+	const_pointer address(const_reference _Val) const
+		{	
+		return (&_Val);
+		}
+
+	allocator() throw ()
+		{	
+		}
+
+	allocator(const allocator<_Ty>&) throw ()
+		{	
+		}
+
+	template<class _Other>
+		allocator(const allocator<_Other>&) throw ()
+		{	
+		}
+
+	template<class _Other>
+		allocator<_Ty>& operator=(const allocator<_Other>&)
+		{	
+		return (*this);
+		}
+
+	void deallocate(pointer _Ptr, size_type)
+		{	
+		::operator delete(_Ptr);
+		}
+
+	pointer allocate(size_type _Count)
+		{	
+		return (_Allocate(_Count, (pointer)0));
+		}
+
+	pointer allocate(size_type _Count, const void  *)
+		{	
+		return (allocate(_Count));
+		}
+
+	void construct(pointer _Ptr, const _Ty& _Val)
+		{	
+		_Construct(_Ptr, _Val);
+		}
+
+	void destroy(pointer _Ptr)
+		{	
+		_Destroy(_Ptr);
+		}
+
+	size_t max_size() const throw ()
+		{	
+		size_t _Count = (size_t)(-1) / sizeof (_Ty);
+		return (0 < _Count ? _Count : 1);
+		}
+	};
+
+		
+template<class _Ty,
+	class _Other> inline
+	bool operator==(const allocator<_Ty>&, const allocator<_Other>&) throw ()
+	{	
+	return (true);
+	}
+
+template<class _Ty,
+	class _Other> inline
+	bool operator!=(const allocator<_Ty>&, const allocator<_Other>&) throw ()
+	{	
+	return (false);
+	}
+
+		
+template<> class  allocator<void>
+	{	
+public:
+	typedef void _Ty;
+	typedef _Ty  *pointer;
+	typedef const _Ty  *const_pointer;
+	typedef _Ty value_type;
+
+	template<class _Other>
+		struct rebind
+		{	
+		typedef allocator<_Other> other;
+		};
+
+	allocator() throw ()
+		{	
+		}
+
+	allocator(const allocator<_Ty>&) throw ()
+		{	
+		}
+
+	template<class _Other>
+		allocator(const allocator<_Other>&) throw ()
+		{	
+		}
+
+	template<class _Other>
+		allocator<_Ty>& operator=(const allocator<_Other>&)
+		{	
+		return (*this);
+		}
+	};
+
+		
+template<class _Ty,
+	class _Alloc> inline
+	void _Destroy_range(_Ty *_First, _Ty *_Last, _Alloc& _Al)
+	{	
+	_Destroy_range(_First, _Last, _Al, _Ptr_cat(_First, _Last));
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	void _Destroy_range(_Ty *_First, _Ty *_Last, _Alloc& _Al,
+		_Nonscalar_ptr_iterator_tag)
+	{	
+	for (; _First != _Last; ++_First)
+		_Al.destroy(_First);
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	void _Destroy_range(_Ty *_First, _Ty *_Last, _Alloc& _Al,
+		_Scalar_ptr_iterator_tag)
+	{	
+	}
+}
+
+
+  #pragma warning(default: 4100)
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+#pragma warning(disable:4412)
+
+
+ 
+ 
+
+namespace std {
+
+  #pragma warning(disable:4251)
+
+template<class _Elem,
+	class _Traits = char_traits<_Elem>,
+	class _Ax = allocator<_Elem> >
+	class basic_string;
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	class _String_const_iterator
+		: public _Ranit_base<_Elem, typename _Alloc::difference_type,
+			typename _Alloc::const_pointer, typename _Alloc::const_reference, _Iterator_base_secure>
+	{	
+public:
+	typedef _String_const_iterator<_Elem, _Traits, _Alloc> _Myt;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystring;
+
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Elem value_type;
+	typedef typename _Alloc::difference_type difference_type;
+	typedef typename _Alloc::const_pointer pointer;
+	typedef typename _Alloc::const_reference reference;
+
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+
+
+	typedef pointer _Checked_iterator_base_type;
+
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		return _Myptr;
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		this->_Myptr = _Base;
+	}
+
+
+	 _String_const_iterator()
+		{	
+		_Myptr = 0;
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+		 _String_const_iterator(pointer _Ptr, const _Container_base *_Pstring)
+			{	
+			{ if (!(_Pstring != 0 && _Ptr != 0 && ((_Mystring *)_Pstring)->_Myptr() <= _Ptr && _Ptr <= (((_Mystring *)_Pstring)->_Myptr() + ((_Mystring *)_Pstring)->_Mysize))) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			this->_Mycont = _Pstring;
+			_Myptr = _Ptr;
+			}
+
+ 
+
+
+
+
+
+
+
+
+
+	reference  operator*() const
+		{	
+
+ 
+
+
+
+
+
+
+
+
+
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			{ if (!(_Myptr < (((_Mystring *)this->_Mycont)->_Myptr() + ((_Mystring *)(this->_Mycont))->_Mysize))) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+ 
+
+		return (*_Myptr);
+		}
+
+	pointer  operator->() const
+		{	
+		return (&**this);
+		}
+
+	_Myt&  operator++()
+		{	
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			{ if (!(_Myptr < (((_Mystring *)this->_Mycont)->_Myptr() + ((_Mystring *)this->_Mycont)->_Mysize))) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+		++_Myptr;
+		return (*this);
+		}
+
+	_Myt  operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	_Myt&  operator--()
+		{	
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			{ if (!(_Myptr > ((_Mystring *)this->_Mycont)->_Myptr())) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+		--_Myptr;
+		return (*this);
+		}
+
+	_Myt  operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		--*this;
+		return (_Tmp);
+		}
+
+	_Myt&  operator+=(difference_type _Off)
+		{	
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			{ if (!(_Myptr + _Off <= (((_Mystring *)this->_Mycont)->_Myptr() + ((_Mystring *)this->_Mycont)->_Mysize) && _Myptr + _Off >= ((_Mystring *)this->_Mycont)->_Myptr())) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+		_Myptr += _Off;
+		return (*this);
+		}
+
+	_Myt  operator+(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Myt&  operator-=(difference_type _Off)
+		{	
+		return (*this += -_Off);
+		}
+
+	_Myt  operator-(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	difference_type  operator-(const _Myt& _Right) const
+		{	
+
+ 
+
+
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0 && this->_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+ 
+
+		return (_Myptr - _Right._Myptr);
+		}
+
+	reference  operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+
+	bool  operator==(const _Myt& _Right) const
+		{	
+
+ 
+
+
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0 && this->_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+ 
+
+		return (_Myptr == _Right._Myptr);
+		}
+
+	bool  operator!=(const _Myt& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+	bool  operator<(const _Myt& _Right) const
+		{	
+
+ 
+
+
+		if (this->_Mycont != ((const _Container_base *)-2))
+		{
+			{ if (!(this->_Mycont != 0 && this->_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		}
+ 
+
+		return (_Myptr < _Right._Myptr);
+		}
+
+	bool  operator>(const _Myt& _Right) const
+		{	
+		return (_Right < *this);
+		}
+
+	bool  operator<=(const _Myt& _Right) const
+		{	
+		return (!(_Right < *this));
+		}
+
+	bool  operator>=(const _Myt& _Right) const
+		{	
+		return (!(*this < _Right));
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+	static void __cdecl _Xlen()
+		{
+		_Mystring::_Xlen();
+		}
+
+	static void __cdecl _Xran()
+		{
+		_Mystring::_Xran();
+		}
+
+	static void __cdecl _Xinvarg()
+		{
+		_Mystring::_Xinvarg();
+		}
+
+	pointer _Myptr;	
+	};
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	_String_const_iterator<_Elem, _Traits, _Alloc> __cdecl operator+(
+		typename _String_const_iterator<_Elem, _Traits, _Alloc>
+			::difference_type _Off,
+		_String_const_iterator<_Elem, _Traits, _Alloc> _Next)
+	{	
+	return (_Next += _Off);
+	}
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	class _String_iterator
+		: public _String_const_iterator<_Elem, _Traits, _Alloc>
+	{	
+public:
+	typedef _String_iterator<_Elem, _Traits, _Alloc> _Myt;
+	typedef _String_const_iterator<_Elem, _Traits, _Alloc> _Mybase;
+
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Elem value_type;
+	typedef typename _Alloc::difference_type difference_type;
+	typedef typename _Alloc::pointer pointer;
+	typedef typename _Alloc::reference reference;
+
+	 _String_iterator()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+
+ 
+		 _String_iterator(pointer _Ptr, const _Container_base *_Pstring)
+			: _Mybase(_Ptr, _Pstring)
+			{	
+			}
+
+ 
+
+
+
+
+
+
+
+
+
+	typedef pointer _Checked_iterator_base_type;
+
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		return const_cast<pointer>(this->_Myptr);
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		this->_Myptr = _Base;
+	}
+
+
+	reference  operator*() const
+		{	
+		return ((reference)**(_Mybase *)this);
+		}
+
+	pointer  operator->() const
+		{	
+		return (&**this);
+		}
+
+	_Myt&  operator++()
+		{	
+		++(*(_Mybase *)this);
+		return (*this);
+		}
+
+	_Myt  operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	_Myt&  operator--()
+		{	
+		--(*(_Mybase *)this);
+		return (*this);
+		}
+
+	_Myt  operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		--*this;
+		return (_Tmp);
+		}
+
+	_Myt&  operator+=(difference_type _Off)
+		{	
+		(*(_Mybase *)this) += _Off;
+		return (*this);
+		}
+
+	_Myt  operator+(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Myt&  operator-=(difference_type _Off)
+		{	
+		return (*this += -_Off);
+		}
+
+	_Myt  operator-(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	difference_type  operator-(const _Mybase& _Right) const
+		{	
+		return ((_Mybase)*this - _Right);
+		}
+
+	reference  operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+	};
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	_String_iterator<_Elem, _Traits, _Alloc>  operator+(
+		typename _String_iterator<_Elem, _Traits, _Alloc>
+			::difference_type _Off,
+		_String_iterator<_Elem, _Traits, _Alloc> _Next)
+	{	
+	return (_Next += _Off);
+	}
+
+		
+class  _String_base
+		: public _Container_base
+	{	
+public:
+	 static void __cdecl _Xlen();	
+
+	 static void __cdecl _Xran();	
+
+	 static void __cdecl _Xinvarg();
+	};
+
+		
+template<class _Ty,
+	class _Alloc>
+	class _String_val
+		: public _String_base
+	{	
+protected:
+	typedef typename _Alloc::template
+		rebind<_Ty>::other _Alty;
+
+	 _String_val(_Alty _Al = _Alty())
+		: _Alval(_Al)
+		{	
+		}
+
+	_Alty _Alval;	
+	};
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Ax>
+	class basic_string
+		: public _String_val<_Elem, _Ax>
+	{	
+public:
+	typedef basic_string<_Elem, _Traits, _Ax> _Myt;
+	typedef _String_val<_Elem, _Ax> _Mybase;
+	typedef typename _Mybase::_Alty _Alloc;
+	typedef typename _Alloc::size_type size_type;
+	typedef typename _Alloc::difference_type _Dift;
+	typedef _Dift difference_type;
+	typedef typename _Alloc::pointer _Tptr;
+	typedef typename _Alloc::const_pointer _Ctptr;
+	typedef _Tptr pointer;
+	typedef _Ctptr const_pointer;
+	typedef typename _Alloc::reference _Reft;
+	typedef _Reft reference;
+	typedef typename _Alloc::const_reference const_reference;
+	typedef typename _Alloc::value_type value_type;
+
+  
+
+	typedef _String_iterator<_Elem, _Traits, _Alloc> iterator;
+	typedef _String_const_iterator<_Elem, _Traits, _Alloc> const_iterator;
+
+
+	friend class _String_const_iterator<_Elem, _Traits, _Alloc>;
+
+	typedef std::reverse_iterator<iterator> reverse_iterator;
+	typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+	 basic_string()
+		: _Mybase()
+		{	
+		_Tidy();
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+	explicit  basic_string(const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Tidy();
+		}
+
+	 basic_string(const _Myt& _Right)
+		: _Mybase(_Right._Alval)
+		{	
+		_Tidy();
+		assign(_Right, 0, npos);
+		}
+
+	 basic_string(const _Myt& _Right, size_type _Roff,
+		size_type _Count = npos)
+		: _Mybase()
+		{	
+		_Tidy();
+		assign(_Right, _Roff, _Count);
+		}
+
+	 basic_string(const _Myt& _Right, size_type _Roff, size_type _Count,
+		const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Tidy();
+		assign(_Right, _Roff, _Count);
+		}
+
+	 basic_string(const _Elem *_Ptr, size_type _Count)
+		: _Mybase()
+		{	
+		_Tidy();
+		assign(_Ptr, _Count);
+		}
+
+	 basic_string(const _Elem *_Ptr, size_type _Count, const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Tidy();
+		assign(_Ptr, _Count);
+		}
+
+	 basic_string(const _Elem *_Ptr)
+		: _Mybase()
+		{	
+		_Tidy();
+		assign(_Ptr);
+		}
+
+	 basic_string(const _Elem *_Ptr, const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Tidy();
+		assign(_Ptr);
+		}
+
+	 basic_string(size_type _Count, _Elem _Ch)
+		: _Mybase()
+		{	
+		_Tidy();
+		assign(_Count, _Ch);
+		}
+
+	 basic_string(size_type _Count, _Elem _Ch, const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Tidy();
+		assign(_Count, _Ch);
+		}
+
+	template<class _It>
+		 basic_string(_It _First, _It _Last)
+		: _Mybase()
+		{	
+		_Tidy();
+		_Construct(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _It>
+		 basic_string(_It _First, _It _Last, const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Tidy();
+		_Construct(_First, _Last, _Iter_cat(_First));
+		}
+
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	template<class _It>
+		void  _Construct(_It _Count,
+			_It _Ch, _Int_iterator_tag)
+		{	
+		assign((size_type)_Count, (_Elem)_Ch);
+		}
+
+	template<class _It>
+		void  _Construct(_It _First,
+			_It _Last, input_iterator_tag)
+		{	
+		try {
+		for (; _First != _Last; ++_First)
+			append((size_type)1, (_Elem)*_First);
+		} catch (...) {
+		_Tidy(true);
+		throw;
+		}
+		}
+
+	template<class _It>
+		void  _Construct(_It _First,
+			_It _Last, forward_iterator_tag)
+		{	
+
+
+
+
+
+
+
+		size_type _Count = 0;
+		_Distance(_First, _Last, _Count);
+		reserve(_Count);
+
+		try {
+		for (; _First != _Last; ++_First)
+			append((size_type)1, (_Elem)*_First);
+		} catch (...) {
+		_Tidy(true);
+		throw;
+		}
+		}
+
+	 basic_string(const_pointer _First, const_pointer _Last)
+		: _Mybase()
+		{	
+
+
+
+
+
+
+
+		_Tidy();
+		if (_First != _Last)
+			assign(&*_First, _Last - _First);
+		}
+
+	 basic_string(const_iterator _First, const_iterator _Last)
+		: _Mybase()
+		{	
+
+
+
+
+
+
+
+		_Tidy();
+		if (_First != _Last)
+			assign(&*_First, _Last - _First);
+		}
+
+	 ~basic_string()
+		{	
+		_Tidy(true);
+		}
+
+	typedef _Traits traits_type;
+	typedef _Alloc allocator_type;
+
+	 static const size_type npos;	
+
+	_Myt&  operator=(const _Myt& _Right)
+		{	
+		return (assign(_Right));
+		}
+
+	_Myt&  operator=(const _Elem *_Ptr)
+		{	
+		return (assign(_Ptr));
+		}
+
+	_Myt&  operator=(_Elem _Ch)
+		{	
+		return (assign(1, _Ch));
+		}
+
+	_Myt&  operator+=(const _Myt& _Right)
+		{	
+		return (append(_Right));
+		}
+
+	_Myt&  operator+=(const _Elem *_Ptr)
+		{	
+		return (append(_Ptr));
+		}
+
+	_Myt&  operator+=(_Elem _Ch)
+		{	
+		return (append((size_type)1, _Ch));
+		}
+
+	_Myt&  append(const _Myt& _Right)
+		{	
+		return (append(_Right, 0, npos));
+		}
+
+	_Myt&  append(const _Myt& _Right,
+		size_type _Roff, size_type _Count)
+		{	
+		if (_Right.size() < _Roff)
+			_String_base::_Xran();	
+		size_type _Num = _Right.size() - _Roff;
+		if (_Num < _Count)
+			_Count = _Num;	
+		if (npos - _Mysize <= _Count || _Mysize + _Count < _Mysize)
+			_String_base::_Xlen();	
+
+		if (0 < _Count && _Grow(_Num = _Mysize + _Count))
+			{	
+			_Traits_helper::copy_s<_Traits>(_Myptr() + _Mysize, _Myres - _Mysize,
+				_Right._Myptr() + _Roff, _Count);
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  append(const _Elem *_Ptr, size_type _Count)
+		{	
+		if (_Inside(_Ptr))
+			return (append(*this, _Ptr - _Myptr(), _Count));	
+		if (npos - _Mysize <= _Count || _Mysize + _Count < _Mysize)
+			_String_base::_Xlen();	
+
+		size_type _Num;
+		if (0 < _Count && _Grow(_Num = _Mysize + _Count))
+			{	
+			_Traits_helper::copy_s<_Traits>(_Myptr() + _Mysize, _Myres - _Mysize, _Ptr, _Count);
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  append(const _Elem *_Ptr)
+		{	
+		return (append(_Ptr, _Traits::length(_Ptr)));
+		}
+
+	_Myt&  append(size_type _Count, _Elem _Ch)
+		{	
+			if (npos - _Mysize <= _Count)
+			_String_base::_Xlen();	
+
+		size_type _Num;
+		if (0 < _Count && _Grow(_Num = _Mysize + _Count))
+			{	
+			_Chassign(_Mysize, _Count, _Ch);
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	template<class _It>
+		_Myt&  append(_It _First, _It _Last)
+		{	
+		return (_Append(_First, _Last, _Iter_cat(_First)));
+		}
+
+	template<class _It>
+		_Myt&  _Append(_It _Count, _It _Ch, _Int_iterator_tag)
+		{	
+		return (append((size_type)_Count, (_Elem)_Ch));
+		}
+
+	template<class _It>
+		_Myt&  _Append(_It _First, _It _Last, input_iterator_tag)
+		{	
+		return (replace(end(), end(), _First, _Last));
+		}
+
+	_Myt&  append(const_pointer _First, const_pointer _Last)
+		{	
+		return (replace(end(), end(), _First, _Last));
+		}
+
+	_Myt&  append(const_iterator _First, const_iterator _Last)
+		{	
+		return (replace(end(), end(), _First, _Last));
+		}
+
+	_Myt&  assign(const _Myt& _Right)
+		{	
+		return (assign(_Right, 0, npos));
+		}
+
+	_Myt&  assign(const _Myt& _Right,
+		size_type _Roff, size_type _Count)
+		{	
+		if (_Right.size() < _Roff)
+			_String_base::_Xran();	
+		size_type _Num = _Right.size() - _Roff;
+		if (_Count < _Num)
+			_Num = _Count;	
+
+		if (this == &_Right)
+			erase((size_type)(_Roff + _Num)), erase(0, _Roff);	
+		else if (_Grow(_Num))
+			{	
+			_Traits_helper::copy_s<_Traits>(_Myptr(), _Myres, _Right._Myptr() + _Roff, _Num);
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  assign(const _Elem *_Ptr, size_type _Num)
+		{	
+		if (_Inside(_Ptr))
+			return (assign(*this, _Ptr - _Myptr(), _Num));	
+
+		if (_Grow(_Num))
+			{	
+			_Traits_helper::copy_s<_Traits>(_Myptr(), _Myres, _Ptr, _Num);
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  assign(const _Elem *_Ptr)
+		{	
+		return (assign(_Ptr, _Traits::length(_Ptr)));
+		}
+
+	_Myt&  assign(size_type _Count, _Elem _Ch)
+		{	
+		if (_Count == npos)
+			_String_base::_Xlen();	
+
+		if (_Grow(_Count))
+			{	
+			_Chassign(0, _Count, _Ch);
+			_Eos(_Count);
+			}
+		return (*this);
+		}
+
+	template<class _It>
+		_Myt&  assign(_It _First, _It _Last)
+		{	
+		return (_Assign(_First, _Last, _Iter_cat(_First)));
+		}
+
+	template<class _It>
+		_Myt&  _Assign(_It _Count, _It _Ch, _Int_iterator_tag)
+		{	
+		return (assign((size_type)_Count, (_Elem)_Ch));
+		}
+
+	template<class _It>
+		_Myt&  _Assign(_It _First, _It _Last, input_iterator_tag)
+		{	
+		return (replace(begin(), end(), _First, _Last));
+		}
+
+	_Myt&  assign(const_pointer _First, const_pointer _Last)
+		{	
+		return (replace(begin(), end(), _First, _Last));
+		}
+
+	_Myt&  assign(const_iterator _First, const_iterator _Last)
+		{	
+		return (replace(begin(), end(), _First, _Last));
+		}
+
+	_Myt&  insert(size_type _Off, const _Myt& _Right)
+		{	
+		return (insert(_Off, _Right, 0, npos));
+		}
+
+	_Myt&  insert(size_type _Off,
+		const _Myt& _Right, size_type _Roff, size_type _Count)
+		{	
+		if (_Mysize < _Off || _Right.size() < _Roff)
+			_String_base::_Xran();	
+		size_type _Num = _Right.size() - _Roff;
+		if (_Num < _Count)
+			_Count = _Num;	
+		if (npos - _Mysize <= _Count)
+			_String_base::_Xlen();	
+
+		if (0 < _Count && _Grow(_Num = _Mysize + _Count))
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off, _Mysize - _Off);	
+			if (this == &_Right)
+				_Traits_helper::move_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+					_Myptr() + (_Off < _Roff ? _Roff + _Count : _Roff),
+						_Count);	
+			else
+				_Traits_helper::copy_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+					_Right._Myptr() + _Roff, _Count);	
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  insert(size_type _Off,
+		const _Elem *_Ptr, size_type _Count)
+		{	
+		if (_Inside(_Ptr))
+			return (insert(_Off, *this,
+				_Ptr - _Myptr(), _Count));	
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (npos - _Mysize <= _Count)
+			_String_base::_Xlen();	
+		size_type _Num;
+		if (0 < _Count && _Grow(_Num = _Mysize + _Count))
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off, _Mysize - _Off);	
+			_Traits_helper::copy_s<_Traits>(_Myptr() + _Off, _Myres - _Off, _Ptr, _Count);	
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  insert(size_type _Off, const _Elem *_Ptr)
+		{	
+		return (insert(_Off, _Ptr, _Traits::length(_Ptr)));
+		}
+
+	_Myt&  insert(size_type _Off,
+		size_type _Count, _Elem _Ch)
+		{	
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (npos - _Mysize <= _Count)
+			_String_base::_Xlen();	
+		size_type _Num;
+		if (0 < _Count && _Grow(_Num = _Mysize + _Count))
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off, _Mysize - _Off);	
+			_Chassign(_Off, _Count, _Ch);	
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	iterator  insert(iterator _Where)
+		{	
+		return (insert(_Where, _Elem()));
+		}
+
+	iterator  insert(iterator _Where, _Elem _Ch)
+		{	
+		size_type _Off = _Pdif(_Where, begin());
+		insert(_Off, 1, _Ch);
+		return (begin() + _Off);
+		}
+
+	void  insert(iterator _Where, size_type _Count, _Elem _Ch)
+		{	
+		size_type _Off = _Pdif(_Where, begin());
+		insert(_Off, _Count, _Ch);
+		}
+
+	template<class _It>
+		void  insert(iterator _Where, _It _First, _It _Last)
+		{	
+		_Insert(_Where, _First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _It>
+		void  _Insert(iterator _Where, _It _Count, _It _Ch,
+			_Int_iterator_tag)
+		{	
+		insert(_Where, (size_type)_Count, (_Elem)_Ch);
+		}
+
+	template<class _It>
+		void  _Insert(iterator _Where, _It _First, _It _Last,
+			input_iterator_tag)
+		{	
+		replace(_Where, _Where, _First, _Last);
+		}
+
+	void  insert(iterator _Where, const_pointer _First, const_pointer _Last)
+		{	
+		replace(_Where, _Where, _First, _Last);
+		}
+
+	void  insert(iterator _Where, const_iterator _First, const_iterator _Last)
+		{	
+		replace(_Where, _Where, _First, _Last);
+		}
+
+	_Myt&  erase(size_type _Off = 0,
+		size_type _Count = npos)
+		{	
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (_Mysize - _Off < _Count)
+			_Count = _Mysize - _Off;	
+		if (0 < _Count)
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off, _Myres - _Off, _Myptr() + _Off + _Count,
+				_Mysize - _Off - _Count);
+			size_type _Newsize = _Mysize - _Count;
+			_Eos(_Newsize);
+			}
+		return (*this);
+		}
+
+	iterator  erase(iterator _Where)
+		{	
+		size_type _Count = _Pdif(_Where, begin());
+		erase(_Count, 1);
+		return (iterator(_Myptr() + _Count, this));
+		}
+
+	iterator  erase(iterator _First, iterator _Last)
+		{	
+		size_type _Count = _Pdif(_First, begin());
+		erase(_Count, _Pdif(_Last, _First));
+		return (iterator(_Myptr() + _Count, this));
+		}
+
+	void  clear()
+		{	
+		erase(begin(), end());
+		}
+
+	_Myt&  replace(size_type _Off, size_type _N0, const _Myt& _Right)
+		{	
+		return (replace(_Off, _N0, _Right, 0, npos));
+		}
+
+	_Myt&  replace(size_type _Off,
+		size_type _N0, const _Myt& _Right, size_type _Roff, size_type _Count)
+		{	
+		if (_Mysize < _Off || _Right.size() < _Roff)
+			_String_base::_Xran();	
+		if (_Mysize - _Off < _N0)
+			_N0 = _Mysize - _Off;	
+		size_type _Num = _Right.size() - _Roff;
+		if (_Num < _Count)
+			_Count = _Num;	
+		if (npos - _Count <= _Mysize - _N0)
+			_String_base::_Xlen();	
+
+		size_type _Nm = _Mysize - _N0 - _Off;	
+		size_type _Newsize = _Mysize + _Count - _N0;
+		if (_Mysize < _Newsize)
+			_Grow(_Newsize);
+
+		if (this != &_Right)
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+			_Traits_helper::copy_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+				_Right._Myptr() + _Roff, _Count);	
+			}
+		else if (_Count <= _N0)
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+				_Myptr() + _Roff, _Count);	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+			}
+		else if (_Roff <= _Off)
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+				_Myptr() + _Roff, _Count);	
+			}
+		else if (_Off + _N0 <= _Roff)
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+				_Myptr() + (_Roff + _Count - _N0), _Count);	
+			}
+		else
+			{	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off, _Myres - _Off,
+				_Myptr() + _Roff, _N0);	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _N0, _Myres - _Off - _N0, _Myptr() + _Roff + _Count,
+				_Count - _N0);	
+			}
+
+		_Eos(_Newsize);
+		return (*this);
+		}
+
+	_Myt&  replace(size_type _Off,
+		size_type _N0, const _Elem *_Ptr, size_type _Count)
+		{	
+		if (_Inside(_Ptr))
+			return (replace(_Off, _N0, *this,
+				_Ptr - _Myptr(), _Count));	
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (_Mysize - _Off < _N0)
+			_N0 = _Mysize - _Off;	
+		if (npos - _Count <= _Mysize - _N0)
+			_String_base::_Xlen();	
+		size_type _Nm = _Mysize - _N0 - _Off;
+
+		if (_Count < _N0)
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+		size_type _Num;
+		if ((0 < _Count || 0 < _N0) && _Grow(_Num = _Mysize + _Count - _N0))
+			{	
+			if (_N0 < _Count)
+				_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+					_Myptr() + _Off + _N0, _Nm);	
+			_Traits_helper::copy_s<_Traits>(_Myptr() + _Off, _Myres - _Off, _Ptr, _Count);	
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  replace(size_type _Off, size_type _N0, const _Elem *_Ptr)
+		{	
+		return (replace(_Off, _N0, _Ptr, _Traits::length(_Ptr)));
+		}
+
+	_Myt&  replace(size_type _Off,
+		size_type _N0, size_type _Count, _Elem _Ch)
+		{	
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (_Mysize - _Off < _N0)
+			_N0 = _Mysize - _Off;	
+		if (npos - _Count <= _Mysize - _N0)
+			_String_base::_Xlen();	
+		size_type _Nm = _Mysize - _N0 - _Off;
+
+		if (_Count < _N0)
+			_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+				_Myptr() + _Off + _N0, _Nm);	
+		size_type _Num;
+		if ((0 < _Count || 0 < _N0) && _Grow(_Num = _Mysize + _Count - _N0))
+			{	
+			if (_N0 < _Count)
+				_Traits_helper::move_s<_Traits>(_Myptr() + _Off + _Count, _Myres - _Off - _Count,
+					_Myptr() + _Off + _N0, _Nm);	
+			_Chassign(_Off, _Count, _Ch);	
+			_Eos(_Num);
+			}
+		return (*this);
+		}
+
+	_Myt&  replace(iterator _First, iterator _Last, const _Myt& _Right)
+		{	
+		return (replace(
+			_Pdif(_First, begin()), _Pdif(_Last, _First), _Right));
+		}
+
+	_Myt&  replace(iterator _First, iterator _Last, const _Elem *_Ptr,
+		size_type _Count)
+		{	
+		return (replace(
+			_Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr, _Count));
+		}
+
+	_Myt&  replace(iterator _First, iterator _Last, const _Elem *_Ptr)
+		{	
+		return (replace(
+			_Pdif(_First, begin()), _Pdif(_Last, _First), _Ptr));
+		}
+
+	_Myt&  replace(iterator _First, iterator _Last,
+		size_type _Count, _Elem _Ch)
+		{	
+		return (replace(
+			_Pdif(_First, begin()), _Pdif(_Last, _First), _Count, _Ch));
+		}
+
+	template<class _It>
+		_Myt&  replace(iterator _First, iterator _Last,
+			_It _First2, _It _Last2)
+		{	
+		return (_Replace(_First, _Last,
+			_First2, _Last2, _Iter_cat(_First2)));
+		}
+
+	template<class _It>
+		_Myt&  _Replace(iterator _First, iterator _Last,
+			_It _Count, _It _Ch, _Int_iterator_tag)
+		{	
+		return (replace(_First, _Last, (size_type)_Count, (_Elem)_Ch));
+		}
+
+	template<class _It>
+		_Myt&  _Replace(iterator _First, iterator _Last,
+			_It _First2, _It _Last2, input_iterator_tag)
+		{	
+		_Myt _Right(_First2, _Last2);
+		replace(_First, _Last, _Right);
+		return (*this);
+		}
+
+	_Myt&  replace(iterator _First, iterator _Last,
+		const_pointer _First2, const_pointer _Last2)
+		{	
+		if (_First2 == _Last2)
+			erase(_Pdif(_First, begin()), _Pdif(_Last, _First));
+		else
+			replace(_Pdif(_First, begin()), _Pdif(_Last, _First),
+				&*_First2, _Last2 - _First2);
+		return (*this);
+		}
+
+	_Myt&  replace(iterator _First, iterator _Last,
+		const_iterator _First2, const_iterator _Last2)
+		{	
+		if (_First2 == _Last2)
+			erase(_Pdif(_First, begin()), _Pdif(_Last, _First));
+		else
+			replace(_Pdif(_First, begin()), _Pdif(_Last, _First),
+				&*_First2, _Last2 - _First2);
+		return (*this);
+		}
+
+	iterator  begin()
+		{	
+		return (iterator(_Myptr(), this));
+		}
+
+	const_iterator  begin() const
+		{	
+		return (const_iterator(_Myptr(), this));
+		}
+
+	iterator  end()
+		{	
+		return (iterator(_Myptr() + _Mysize, this));
+		}
+
+	const_iterator  end() const
+		{	
+		return (const_iterator(_Myptr() + _Mysize, this));
+		}
+
+	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()));
+		}
+
+	reference  at(size_type _Off)
+		{	
+		if (_Mysize <= _Off)
+			_String_base::_Xran();	
+		return (_Myptr()[_Off]);
+		}
+
+	const_reference  at(size_type _Off) const
+		{	
+		if (_Mysize <= _Off)
+			_String_base::_Xran();	
+		return (_Myptr()[_Off]);
+		}
+
+ 
+
+	reference  operator[](size_type _Off)
+		{	
+
+ 
+
+
+
+
+
+
+
+
+
+
+		{ if (!(_Off <= _Mysize)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (_Myptr()[_Off]);
+		}
+
+	const_reference  operator[](size_type _Off) const
+		{	
+
+ 
+
+
+
+
+
+
+
+
+
+
+		{ if (!(_Off <= _Mysize)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (_Myptr()[_Off]);
+		}
+
+ 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	void  push_back(_Elem _Ch)
+		{	
+		insert(end(), _Ch);
+		}
+
+	const _Elem * c_str() const
+		{	
+		return (_Myptr());
+		}
+
+	const _Elem * data() const
+		{	
+		return (c_str());
+		}
+
+	size_type  length() const
+		{	
+		return (_Mysize);
+		}
+
+	size_type  size() const
+		{	
+		return (_Mysize);
+		}
+
+	size_type  max_size() const
+		{	
+		size_type _Num = _Mybase::_Alval.max_size();
+		return (_Num <= 1 ? 1 : _Num - 1);
+		}
+
+	void  resize(size_type _Newsize)
+		{	
+		resize(_Newsize, _Elem());
+		}
+
+	void  resize(size_type _Newsize, _Elem _Ch)
+		{	
+		if (_Newsize <= _Mysize)
+			erase(_Newsize);
+		else
+			append(_Newsize - _Mysize, _Ch);
+		}
+
+	size_type  capacity() const
+		{	
+		return (_Myres);
+		}
+
+	void  reserve(size_type _Newcap = 0)
+		{	
+		if (_Mysize <= _Newcap && _Myres != _Newcap)
+			{	
+			size_type _Size = _Mysize;
+			if (_Grow(_Newcap, true))
+				_Eos(_Size);
+			}
+		}
+
+	bool  empty() const
+		{	
+		return (_Mysize == 0);
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	size_type  copy(_Elem *_Dest,
+		size_type _Count, size_type _Off = 0) const
+		{	
+		
+		return _Copy_s(_Dest, _Count, _Count, _Off);
+		}
+
+	size_type  _Copy_s(_Elem *_Dest, size_type _Dest_size,
+		size_type _Count, size_type _Off = 0) const
+		{	
+		;
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (_Mysize - _Off < _Count)
+			_Count = _Mysize - _Off;
+		_Traits_helper::copy_s<_Traits>(_Dest, _Dest_size, _Myptr() + _Off, _Count);
+		return (_Count);
+		}
+
+	void  swap(_Myt& _Right)
+		{	
+		if (_Mybase::_Alval == _Right._Alval)
+			{	
+
+ 
+
+
+
+			_Bxty _Tbx = _Bx;
+			_Bx = _Right._Bx, _Right._Bx = _Tbx;
+
+			size_type _Tlen = _Mysize;
+			_Mysize = _Right._Mysize, _Right._Mysize = _Tlen;
+
+			size_type _Tres = _Myres;
+			_Myres = _Right._Myres, _Right._Myres = _Tres;
+			}
+		else
+			{	
+			_Myt _Tmp = *this; *this = _Right, _Right = _Tmp;
+			}
+		}
+
+	size_type  find(const _Myt& _Right, size_type _Off = 0) const
+		{	
+		return (find(_Right._Myptr(), _Off, _Right.size()));
+		}
+
+	size_type  find(const _Elem *_Ptr,
+		size_type _Off, size_type _Count) const
+		{	
+		;
+		if (_Count == 0 && _Off <= _Mysize)
+			return (_Off);	
+
+		size_type _Nm;
+		if (_Off < _Mysize && _Count <= (_Nm = _Mysize - _Off))
+			{	
+			const _Elem *_Uptr, *_Vptr;
+			for (_Nm -= _Count - 1, _Vptr = _Myptr() + _Off;
+				(_Uptr = _Traits::find(_Vptr, _Nm, *_Ptr)) != 0;
+				_Nm -= _Uptr - _Vptr + 1, _Vptr = _Uptr + 1)
+				if (_Traits::compare(_Uptr, _Ptr, _Count) == 0)
+					return (_Uptr - _Myptr());	
+			}
+
+		return (npos);	
+		}
+
+	size_type  find(const _Elem *_Ptr, size_type _Off = 0) const
+		{	
+		return (find(_Ptr, _Off, _Traits::length(_Ptr)));
+		}
+
+	size_type  find(_Elem _Ch, size_type _Off = 0) const
+		{	
+		return (find((const _Elem *)&_Ch, _Off, 1));
+		}
+
+	size_type  rfind(const _Myt& _Right, size_type _Off = npos) const
+		{	
+		return (rfind(_Right._Myptr(), _Off, _Right.size()));
+		}
+
+	size_type  rfind(const _Elem *_Ptr,
+		size_type _Off, size_type _Count) const
+		{	
+		;
+		if (_Count == 0)
+			return (_Off < _Mysize ? _Off : _Mysize);	
+		if (_Count <= _Mysize)
+			{	
+			const _Elem *_Uptr = _Myptr() +
+				(_Off < _Mysize - _Count ? _Off : _Mysize - _Count);
+			for (; ; --_Uptr)
+				if (_Traits::eq(*_Uptr, *_Ptr)
+					&& _Traits::compare(_Uptr, _Ptr, _Count) == 0)
+					return (_Uptr - _Myptr());	
+				else if (_Uptr == _Myptr())
+					break;	
+			}
+
+		return (npos);	
+		}
+
+	size_type  rfind(const _Elem *_Ptr, size_type _Off = npos) const
+		{	
+		return (rfind(_Ptr, _Off, _Traits::length(_Ptr)));
+		}
+
+	size_type  rfind(_Elem _Ch, size_type _Off = npos) const
+		{	
+		return (rfind((const _Elem *)&_Ch, _Off, 1));
+		}
+
+	size_type  find_first_of(const _Myt& _Right,
+		size_type _Off = 0) const
+		{	
+		return (find_first_of(_Right._Myptr(), _Off, _Right.size()));
+		}
+
+	size_type  find_first_of(const _Elem *_Ptr,
+		size_type _Off, size_type _Count) const
+		{	
+		;
+		if (0 < _Count && _Off < _Mysize)
+			{	
+			const _Elem *const _Vptr = _Myptr() + _Mysize;
+			for (const _Elem *_Uptr = _Myptr() + _Off; _Uptr < _Vptr; ++_Uptr)
+				if (_Traits::find(_Ptr, _Count, *_Uptr) != 0)
+					return (_Uptr - _Myptr());	
+			}
+
+		return (npos);	
+		}
+
+	size_type  find_first_of(const _Elem *_Ptr, size_type _Off = 0) const
+		{	
+		return (find_first_of(_Ptr, _Off, _Traits::length(_Ptr)));
+		}
+
+	size_type  find_first_of(_Elem _Ch, size_type _Off = 0) const
+		{	
+		return (find((const _Elem *)&_Ch, _Off, 1));
+		}
+
+	size_type  find_last_of(const _Myt& _Right,
+		size_type _Off = npos) const
+		{	
+		return (find_last_of(_Right._Myptr(), _Off, _Right.size()));
+		}
+
+	size_type  find_last_of(const _Elem *_Ptr,
+		size_type _Off, size_type _Count) const
+		{	
+		;
+		if (0 < _Count && 0 < _Mysize)
+			for (const _Elem *_Uptr = _Myptr()
+				+ (_Off < _Mysize ? _Off : _Mysize - 1); ; --_Uptr)
+				if (_Traits::find(_Ptr, _Count, *_Uptr) != 0)
+					return (_Uptr - _Myptr());	
+				else if (_Uptr == _Myptr())
+					break;	
+
+		return (npos);	
+		}
+
+	size_type  find_last_of(const _Elem *_Ptr,
+		size_type _Off = npos) const
+		{	
+		return (find_last_of(_Ptr, _Off, _Traits::length(_Ptr)));
+		}
+
+	size_type  find_last_of(_Elem _Ch, size_type _Off = npos) const
+		{	
+		return (rfind((const _Elem *)&_Ch, _Off, 1));
+		}
+
+	size_type  find_first_not_of(const _Myt& _Right,
+		size_type _Off = 0) const
+		{	
+		return (find_first_not_of(_Right._Myptr(), _Off,
+			_Right.size()));
+		}
+
+	size_type  find_first_not_of(const _Elem *_Ptr,
+		size_type _Off, size_type _Count) const
+		{	
+		;
+		if (_Off < _Mysize)
+			{	
+			const _Elem *const _Vptr = _Myptr() + _Mysize;
+			for (const _Elem *_Uptr = _Myptr() + _Off; _Uptr < _Vptr; ++_Uptr)
+				if (_Traits::find(_Ptr, _Count, *_Uptr) == 0)
+					return (_Uptr - _Myptr());
+			}
+		return (npos);
+		}
+
+	size_type  find_first_not_of(const _Elem *_Ptr,
+		size_type _Off = 0) const
+		{	
+		return (find_first_not_of(_Ptr, _Off, _Traits::length(_Ptr)));
+		}
+
+	size_type  find_first_not_of(_Elem _Ch, size_type _Off = 0) const
+		{	
+		return (find_first_not_of((const _Elem *)&_Ch, _Off, 1));
+		}
+
+	size_type  find_last_not_of(const _Myt& _Right,
+		size_type _Off = npos) const
+		{	
+		return (find_last_not_of(_Right._Myptr(), _Off, _Right.size()));
+		}
+
+	size_type  find_last_not_of(const _Elem *_Ptr,
+		size_type _Off, size_type _Count) const
+		{	
+		;
+		if (0 < _Mysize)
+			for (const _Elem *_Uptr = _Myptr()
+				+ (_Off < _Mysize ? _Off : _Mysize - 1); ; --_Uptr)
+				if (_Traits::find(_Ptr, _Count, *_Uptr) == 0)
+					return (_Uptr - _Myptr());
+				else if (_Uptr == _Myptr())
+					break;
+		return (npos);
+		}
+
+	size_type  find_last_not_of(const _Elem *_Ptr,
+		size_type _Off = npos) const
+		{	
+		return (find_last_not_of(_Ptr, _Off, _Traits::length(_Ptr)));
+		}
+
+	size_type  find_last_not_of(_Elem _Ch, size_type _Off = npos) const
+		{	
+		return (find_last_not_of((const _Elem *)&_Ch, _Off, 1));
+		}
+
+	_Myt  substr(size_type _Off = 0, size_type _Count = npos) const
+		{	
+		return (_Myt(*this, _Off, _Count));
+		}
+
+	int  compare(const _Myt& _Right) const
+		{	
+		return (compare(0, _Mysize, _Right._Myptr(), _Right.size()));
+		}
+
+	int  compare(size_type _Off, size_type _N0,
+		const _Myt& _Right) const
+		{	
+		return (compare(_Off, _N0, _Right, 0, npos));
+		}
+
+	int  compare(size_type _Off,
+		size_type _N0, const _Myt& _Right,
+		size_type _Roff, size_type _Count) const
+		{	
+		if (_Right.size() < _Roff)
+			_String_base::_Xran();	
+		if (_Right._Mysize - _Roff < _Count)
+			_Count = _Right._Mysize - _Roff;	
+		return (compare(_Off, _N0, _Right._Myptr() + _Roff, _Count));
+		}
+
+	int  compare(const _Elem *_Ptr) const
+		{	
+		return (compare(0, _Mysize, _Ptr, _Traits::length(_Ptr)));
+		}
+
+	int  compare(size_type _Off, size_type _N0, const _Elem *_Ptr) const
+		{	
+		return (compare(_Off, _N0, _Ptr, _Traits::length(_Ptr)));
+		}
+
+	int  compare(size_type _Off,
+		size_type _N0, const _Elem *_Ptr, size_type _Count) const
+		{	
+		;
+		if (_Mysize < _Off)
+			_String_base::_Xran();	
+		if (_Mysize - _Off < _N0)
+			_N0 = _Mysize - _Off;	
+
+		size_type _Ans = _Traits::compare(_Myptr() + _Off, _Ptr,
+			_N0 < _Count ? _N0 : _Count);
+		return (_Ans != 0 ? (int)_Ans : _N0 < _Count ? -1
+			: _N0 == _Count ? 0 : +1);
+		}
+
+	allocator_type  get_allocator() const
+		{	
+		return (_Mybase::_Alval);
+		}
+
+	enum
+		{	
+		_BUF_SIZE = 16 / sizeof (_Elem) < 1 ? 1
+			: 16 / sizeof(_Elem)};
+
+protected:
+	enum
+		{	
+		_ALLOC_MASK = sizeof (_Elem) <= 1 ? 15
+			: sizeof (_Elem) <= 2 ? 7
+			: sizeof (_Elem) <= 4 ? 3
+			: sizeof (_Elem) <= 8 ? 1 : 0};
+
+	void  _Chassign(size_type _Off, size_type _Count, _Elem _Ch)
+		{	
+		if (_Count == 1)
+			_Traits::assign(*(_Myptr() + _Off), _Ch);
+		else
+			_Traits::assign(_Myptr() + _Off, _Count, _Ch);
+		}
+
+	void  _Copy(size_type _Newsize, size_type _Oldlen)
+		{	
+		size_type _Newres = _Newsize | _ALLOC_MASK;
+		if (max_size() < _Newres)
+			_Newres = _Newsize;	
+		else if (_Newres / 3 < _Myres / 2
+			&& _Myres <= max_size() - _Myres / 2)
+			_Newres = _Myres + _Myres / 2;	
+		_Elem *_Ptr = 0;
+
+		try {
+			_Ptr = _Mybase::_Alval.allocate(_Newres + 1);
+		} catch (...) {
+			_Newres = _Newsize;	
+			try {
+				_Ptr = _Mybase::_Alval.allocate(_Newres + 1);
+			} catch (...) {
+			_Tidy(true);	
+			throw;
+			}
+		}
+
+		if (0 < _Oldlen)
+			_Traits_helper::copy_s<_Traits>(_Ptr, _Newres + 1, _Myptr(), _Oldlen);	
+		_Tidy(true);
+		_Bx._Ptr = _Ptr;
+		_Myres = _Newres;
+		_Eos(_Oldlen);
+		}
+
+	void  _Eos(size_type _Newsize)
+		{	
+		_Traits::assign(_Myptr()[_Mysize = _Newsize], _Elem());
+		}
+
+	bool  _Grow(size_type _Newsize,
+		bool _Trim = false)
+		{	
+			if (max_size() < _Newsize)
+			_String_base::_Xlen();	
+		if (_Myres < _Newsize)
+			_Copy(_Newsize, _Mysize);	
+		else if (_Trim && _Newsize < _BUF_SIZE)
+			_Tidy(true,	
+				_Newsize < _Mysize ? _Newsize : _Mysize);
+		else if (_Newsize == 0)
+			_Eos(0);	
+		return (0 < _Newsize);	
+		}
+
+	bool  _Inside(const _Elem *_Ptr)
+		{	
+		;
+		if (_Ptr < _Myptr() || _Myptr() + _Mysize <= _Ptr)
+			return (false);	
+		else
+			return (true);
+		}
+
+	static size_type __cdecl _Pdif(const_iterator _P2,
+		const_iterator _P1)
+		{	
+		return ((_P2)._Myptr == 0 ? 0 : _P2 - _P1);
+		}
+
+	void  _Tidy(bool _Built = false,
+		size_type _Newsize = 0)
+		{	
+		if (!_Built)
+			;
+		else if (_BUF_SIZE <= _Myres)
+			{	
+			_Elem *_Ptr = _Bx._Ptr;
+			if (0 < _Newsize)
+				_Traits_helper::copy_s<_Traits>(_Bx._Buf, _BUF_SIZE, _Ptr, _Newsize);
+			_Mybase::_Alval.deallocate(_Ptr, _Myres + 1);
+			}
+		_Myres = _BUF_SIZE - 1;
+		_Eos(_Newsize);
+		}
+
+	union _Bxty
+		{	
+		_Elem _Buf[_BUF_SIZE];
+		_Elem *_Ptr;
+		} _Bx;
+
+	_Elem * _Myptr()
+		{	
+		return (_BUF_SIZE <= _Myres ? _Bx._Ptr : _Bx._Buf);
+		}
+
+	const _Elem * _Myptr() const
+		{	
+		return (_BUF_SIZE <= _Myres ? _Bx._Ptr : _Bx._Buf);
+		}
+
+	size_type _Mysize;	
+	size_type _Myres;	
+	};
+
+	
+template<class _Elem, class _Traits, class _Ax>
+	class _Move_operation_category<basic_string<_Elem, _Traits, _Ax> >
+	{
+	public:
+		typedef _Swap_move_tag _Move_cat;
+	};
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	 const typename basic_string<_Elem, _Traits, _Alloc>::size_type
+		basic_string<_Elem, _Traits, _Alloc>::npos =
+			(typename basic_string<_Elem, _Traits, _Alloc>::size_type)(-1);
+
+		
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	void __cdecl swap(basic_string<_Elem, _Traits, _Alloc>& _Left,
+		basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	_Left.swap(_Right);
+	}
+
+typedef basic_string<char, char_traits<char>, allocator<char> >
+	string;
+typedef basic_string<wchar_t, char_traits<wchar_t>,
+	allocator<wchar_t> > wstring;
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+ #pragma warning(default: 4251)
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+
+
+
+
+		
+class logic_error
+	: public std:: exception
+	{	
+public:
+	explicit  logic_error(const string& _Message)
+		: _Str(_Message)
+		{	
+		}
+
+	virtual  ~logic_error() throw ()
+		{	
+		}
+
+	virtual const char * what() const throw ()
+		{	
+		return (_Str.c_str());
+		}
+
+ 
+
+
+
+
+
+
+
+private:
+	string _Str;	
+	};
+
+		
+class domain_error
+	: public logic_error
+	{	
+public:
+	explicit  domain_error(const string& _Message)
+		: logic_error(_Message)
+		{	
+		}
+
+	virtual  ~domain_error() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+		
+class invalid_argument
+	: public logic_error
+	{	
+public:
+	explicit  invalid_argument(const string& _Message)
+		: logic_error(_Message)
+		{	
+		}
+
+	virtual  ~invalid_argument() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+		
+class length_error
+	: public logic_error
+	{	
+public:
+	explicit  length_error(const string& _Message)
+		: logic_error(_Message)
+		{	
+		}
+
+	virtual  ~length_error() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+		
+class out_of_range
+	: public logic_error
+	{	
+public:
+	explicit  out_of_range(const string& _Message)
+		: logic_error(_Message)
+		{	
+		}
+
+	virtual  ~out_of_range() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+		
+class runtime_error
+	: public std:: exception
+	{	
+public:
+	explicit  runtime_error(const string& _Message)
+		: _Str(_Message)
+		{	
+		}
+
+	virtual  ~runtime_error() throw ()
+		{	
+		}
+
+	virtual const char * what() const throw ()
+		{	
+		return (_Str.c_str());
+		}
+
+ 
+
+
+
+
+
+
+
+private:
+	string _Str;	
+	};
+
+		
+class overflow_error
+	: public runtime_error
+	{	
+public:
+	explicit  overflow_error(const string& _Message)
+		: runtime_error(_Message)
+		{	
+		}
+
+	virtual  ~overflow_error() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+		
+class underflow_error
+	: public runtime_error
+	{	
+public:
+	explicit  underflow_error(const string& _Message)
+		: runtime_error(_Message)
+		{	
+		}
+
+	virtual  ~underflow_error() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+		
+class range_error
+	: public runtime_error
+	{	
+public:
+	explicit  range_error(const string& _Message)
+		: runtime_error(_Message)
+		{	
+		}
+
+	virtual  ~range_error() throw ()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+	};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+struct _DebugHeapTag_t
+	{	
+	int _Type;
+	};
+}
+
+		
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   
+   
+   
+   
+  
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern "C" {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                                
+
+
+
+
+
+
+
+
+
+
+
+
+
+  int __cdecl _isctype(     int _C,      int _Type);
+  int __cdecl _isctype_l(     int _C,      int _Type,        _locale_t _Locale);
+   int __cdecl isalpha(     int _C);
+  int __cdecl _isalpha_l(     int _C,        _locale_t _Locale);
+   int __cdecl isupper(     int _C);
+  int __cdecl _isupper_l(     int _C,        _locale_t _Locale);
+   int __cdecl islower(     int _C);
+  int __cdecl _islower_l(     int _C,        _locale_t _Locale);
+   int __cdecl isdigit(     int _C);
+  int __cdecl _isdigit_l(     int _C,        _locale_t _Locale);
+  int __cdecl isxdigit(     int _C);
+  int __cdecl _isxdigit_l(     int _C,        _locale_t _Locale);
+   int __cdecl isspace(     int _C);
+  int __cdecl _isspace_l(     int _C,        _locale_t _Locale);
+  int __cdecl ispunct(     int _C);
+  int __cdecl _ispunct_l(     int _C,        _locale_t _Locale);
+   int __cdecl isalnum(     int _C);
+  int __cdecl _isalnum_l(     int _C,        _locale_t _Locale);
+  int __cdecl isprint(     int _C);
+  int __cdecl _isprint_l(     int _C,        _locale_t _Locale);
+  int __cdecl isgraph(     int _C);
+  int __cdecl _isgraph_l(     int _C,        _locale_t _Locale);
+  int __cdecl iscntrl(     int _C);
+  int __cdecl _iscntrl_l(     int _C,        _locale_t _Locale);
+   int __cdecl toupper(     int _C);
+   int __cdecl tolower(     int _C);
+   int __cdecl _tolower(     int _C);
+  int __cdecl _tolower_l(     int _C,        _locale_t _Locale);
+   int __cdecl _toupper(     int _C);
+  int __cdecl _toupper_l(     int _C,        _locale_t _Locale);
+  int __cdecl __isascii(     int _C);
+  int __cdecl __toascii(     int _C);
+  int __cdecl __iscsymf(     int _C);
+  int __cdecl __iscsym(     int _C);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+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;
+        };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  int __cdecl _configthreadlocale(     int _Flag);
+  char * __cdecl setlocale(     int _Category,          const char * _Locale);
+  struct lconv * __cdecl localeconv(void);
+  _locale_t __cdecl _get_current_locale(void);
+  _locale_t __cdecl _create_locale(     int _Category,        const char * _Locale);
+ void __cdecl _free_locale(       _locale_t _Locale);
+
+
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "_get_current_locale" "instead. See online help for details."))   _locale_t __cdecl __get_current_locale(void);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "_create_locale" "instead. See online help for details."))   _locale_t __cdecl __create_locale(     int _Category,        const char * _Locale);
+__declspec(deprecated("This function or variable has been superceded by newer library or operating system functionality. Consider using" "_free_locale" "instead. See online help for details."))  void __cdecl __free_locale(       _locale_t _Locale);
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+
+
+
+
+extern "C" {
+
+
+		
+
+
+
+
+
+
+
+
+
+
+
+		
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef struct _Collvec
+	{	
+	unsigned long _Hand;	
+	unsigned int _Page;		
+	} _Collvec;
+
+typedef struct _Ctypevec
+	{	
+	unsigned long _Hand;	
+	unsigned int _Page;		
+	const short *_Table;
+	int _Delfl;
+	} _Ctypevec;
+
+typedef struct _Cvtvec
+	{	
+	unsigned long _Hand;	
+	unsigned int _Page;		
+	} _Cvtvec;
+
+		
+ _Collvec __cdecl _Getcoll();
+ _Ctypevec __cdecl _Getctype();
+ _Cvtvec __cdecl _Getcvt();
+
+ int __cdecl _Getdateorder();
+
+ int __cdecl _Mbrtowc(       wchar_t *, const char *, size_t,
+	mbstate_t *, const _Cvtvec *);
+ float __cdecl _Stof(const char *,                     char **, long);
+ double __cdecl _Stod(const char *,                     char **, long);
+ long double __cdecl _Stold(const char *,                     char **, 
+  long);
+ int __cdecl _Strcoll(const char *, const char *,
+	const char *, const char *, const _Collvec *);
+ size_t __cdecl _Strxfrm(
+         char * _String1, 
+         char * _End1, const char *, const char *, const _Collvec *);
+ int __cdecl _Tolower(int, const _Ctypevec *);
+ int __cdecl _Toupper(int, const _Ctypevec *);
+ int __cdecl _Wcrtomb(     char *, wchar_t, mbstate_t *,
+	const _Cvtvec *);
+ int __cdecl _Wcscoll(const wchar_t *, const wchar_t *,
+	const wchar_t *, const wchar_t *, const _Collvec *);
+ size_t __cdecl _Wcsxfrm(
+         wchar_t *_String1, 
+         wchar_t *_End1, const wchar_t *, const wchar_t *, const _Collvec *);
+
+ short __cdecl _Getwctype(wchar_t, const _Ctypevec *);
+ const wchar_t * __cdecl _Getwctypes(const wchar_t *, const wchar_t *,
+	short*, const _Ctypevec*);
+ wchar_t __cdecl _Towlower(wchar_t, const _Ctypevec *);
+ wchar_t __cdecl _Towupper(wchar_t, const _Ctypevec *);
+
+}
+
+
+
+extern "C" {
+ void *__cdecl _Gettnames();
+ char *__cdecl _Getdays();
+ char *__cdecl _Getmonths();
+ size_t __cdecl _Strftime(
+       char *,      size_t _Maxsize, 
+          const char *,      const struct tm *, void *);
+}
+
+extern "C" {
+_locale_t __cdecl _GetLocaleForCP(unsigned int);
+}
+
+
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+#pragma warning(disable:4412)
+
+
+namespace std {
+
+		
+class  _Timevec
+	{	
+public:
+	 _Timevec(void *_Ptr = 0)
+		: _Timeptr(_Ptr)
+		{	
+		}
+
+	 _Timevec(const _Timevec& _Right)
+		{	
+		*this = _Right;
+		}
+
+	 ~_Timevec()
+		{	
+		free(_Timeptr);
+		}
+
+	_Timevec&  operator=(const _Timevec& _Right)
+		{	
+		_Timeptr = _Right._Timeptr;
+		((_Timevec *)&_Right)->_Timeptr = 0;
+		return (*this);
+		}
+
+	void * _Getptr() const
+		{	
+		return (_Timeptr);
+		}
+
+private:
+	void *_Timeptr;	
+	};
+
+		
+
+
+#pragma warning(push)
+#pragma warning(disable:4412)
+class  _Locinfo
+	{	
+public:
+	typedef ::_Collvec _Collvec;
+	typedef ::_Ctypevec _Ctypevec;
+	typedef ::_Cvtvec _Cvtvec;
+	typedef std::_Timevec _Timevec;
+
+    static  void __cdecl _Locinfo_ctor(_Locinfo *, const char *);
+    static  void __cdecl _Locinfo_ctor(_Locinfo *, int, const char *);
+    static  void __cdecl _Locinfo_dtor(_Locinfo *);
+    static  _Locinfo& __cdecl _Locinfo_Addcats(_Locinfo *, int, const char *);
+
+	 _Locinfo(const char *_Pch = "C")
+
+        : _Lock(0)
+
+        {
+        if (_Pch == 0)
+            throw runtime_error("bad locale name");
+        _Locinfo_ctor(this, _Pch);
+        }
+
+	 _Locinfo(int _I, const char *_Pch)
+
+        : _Lock(0)
+
+        {
+        if (_Pch == 0)
+            throw runtime_error("bad locale name");
+        _Locinfo_ctor(this, _I, _Pch);
+        }
+
+	 ~_Locinfo()
+        {
+        _Locinfo_dtor(this);
+        }
+
+	_Locinfo&  _Addcats(int _I, const char *_Pch)
+		{
+		if (_Pch == 0)
+			throw runtime_error("bad locale name");
+		return _Locinfo_Addcats(this, _I, _Pch);
+		}
+
+	string  _Getname() const
+		{	
+		return (_Newlocname);
+		}
+
+	_Collvec  _Getcoll() const
+		{	
+		return (::_Getcoll());
+		}
+
+	_Ctypevec  _Getctype() const
+		{	
+		return (::_Getctype());
+		}
+
+	_Cvtvec  _Getcvt() const
+		{	
+		return (::_Getcvt());
+		}
+
+	const lconv * _Getlconv() const
+		{	
+		return (localeconv());
+		}
+
+	_Timevec  _Gettnames() const
+		{	
+		return (_Timevec(::_Gettnames()));
+		}
+
+	const char * _Getdays() const
+		{	
+		const char *_Ptr = ::_Getdays();
+		if (_Ptr != 0)
+			{	
+			((_Locinfo *)this)->_Days = _Ptr;
+			free((void *)_Ptr);
+			}
+		return (_Days.size() != 0 ? _Days.c_str()
+			: ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday"
+				":Thu:Thursday:Fri:Friday:Sat:Saturday");
+		}
+
+	const char * _Getmonths() const
+		{	
+		const char *_Ptr = ::_Getmonths();
+		if (_Ptr != 0)
+			{	
+			((_Locinfo *)this)->_Months = _Ptr;
+			free((void *)_Ptr);
+			}
+		return (_Months.size() != 0 ? _Months.c_str()
+			: ":Jan:January:Feb:February:Mar:March"
+				":Apr:April:May:May:Jun:June"
+				":Jul:July:Aug:August:Sep:September"
+				":Oct:October:Nov:November:Dec:December");
+		}
+
+	const char * _Getfalse() const
+		{	
+		return ("false");
+		}
+
+	const char * _Gettrue() const
+		{	
+		return ("true");
+		}
+
+	int  _Getdateorder() const
+		{	
+		return ::_Getdateorder();
+		}
+
+private:
+
+
+
+
+
+	_Lockit _Lock;	
+
+	string _Days;	
+	string _Months;	
+	string _Oldlocname;	
+	string _Newlocname;	
+	};
+#pragma warning(pop)
+
+		
+template<class _Elem> inline
+	int __cdecl _LStrcoll(const _Elem *_First1, const _Elem *_Last1,
+		const _Elem *_First2, const _Elem *_Last2,
+			const _Locinfo::_Collvec *)
+	{	
+	for (; _First1 != _Last1 && _First2 != _Last2; ++_First1, ++_First2)
+		if (*_First1 < *_First2)
+			return (-1);	
+		else if (*_First2 < *_First1)
+			return (+1);	
+	return (_First2 != _Last2 ? -1 : _First1 != _Last1 ? +1 : 0);
+	}
+
+template<> inline
+	int __cdecl _LStrcoll(const char *_First1, const char *_Last1,
+		const char *_First2, const char *_Last2,
+			const _Locinfo::_Collvec *_Vector)
+	{	
+	return (_Strcoll(_First1, _Last1, _First2, _Last2, _Vector));
+	}
+
+template<> inline
+	int __cdecl _LStrcoll(const wchar_t *_First1, const wchar_t *_Last1,
+		const wchar_t *_First2, const wchar_t *_Last2,
+			const _Locinfo::_Collvec *_Vector)
+	{	
+	return (_Wcscoll(_First1, _Last1, _First2, _Last2, _Vector));
+	}
+
+		
+template<class _Elem> inline
+	size_t __cdecl _LStrxfrm(_Elem *_First1, _Elem *_Last1,
+		const _Elem *_First2, const _Elem *_Last2,
+			const _Locinfo::_Collvec *)
+	{	
+	size_t _Count = _Last2 - _First2;
+	if (_Count <= (size_t)(_Last1 - _First1))
+		::memcpy_s((_First1), ((_Last1 - _First1)* sizeof(_Elem)), (_First2), (_Count * sizeof (_Elem)));
+	return (_Count);
+	}
+
+template<> inline
+	size_t __cdecl _LStrxfrm(
+		       char *_First1, 
+		       char *_Last1,
+		const char *_First2, const char *_Last2,
+			const _Locinfo::_Collvec *_Vector)
+	{	
+	return (_Strxfrm(_First1, _Last1, _First2, _Last2, _Vector));
+	}
+
+template<> inline
+	size_t __cdecl _LStrxfrm(
+		       wchar_t *_First1, 
+		       wchar_t *_Last1,
+		const wchar_t *_First2, const wchar_t *_Last2,
+			const _Locinfo::_Collvec *_Vector)
+	{	
+	return (_Wcsxfrm(_First1, _Last1, _First2, _Last2, _Vector));
+	}
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+#pragma warning(disable:4412)
+
+
+namespace std {
+
+		
+template<class _Dummy>
+	class _Locbase
+	{	
+public:
+	 static const int collate = ((1 << (1)) >> 1);
+	 static const int ctype = ((1 << (2)) >> 1);
+	 static const int monetary = ((1 << (3)) >> 1);
+	 static const int numeric = ((1 << (4)) >> 1);
+	 static const int time = ((1 << (5)) >> 1);
+	 static const int messages = ((1 << (6)) >> 1);
+	 static const int all = (((1 << (7)) >> 1) - 1);
+	 static const int none = 0;
+	};
+
+template<class _Dummy>
+	const int _Locbase<_Dummy>::collate;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::ctype;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::monetary;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::numeric;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::time;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::messages;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::all;
+template<class _Dummy>
+	const int _Locbase<_Dummy>::none;
+
+		
+class locale;
+template<class _Facet>
+	const _Facet& __cdecl use_facet(const locale&);
+
+
+#pragma warning(push)
+#pragma warning(disable:4412)
+class  locale
+	: public _Locbase<int>
+	{	
+public:
+	typedef int category;
+
+			
+	class  id
+		{	
+	public:
+		 id(size_t _Val = 0)
+			: _Id(_Val)
+			{	
+			}
+
+		 operator size_t()
+			{	
+			if (_Id == 0)
+				{	
+				{ ::std:: _Lockit _Lock(0);
+					if (_Id == 0)
+						_Id = ++_Id_cnt;
+				}
+				}
+			return (_Id);
+			}
+
+	private:
+		 id(const id&);	
+		id&  operator=(const id&);	
+
+		size_t _Id;	
+		static  int& __cdecl _Id_cnt_func();
+
+
+
+		 static int _Id_cnt;	
+
+		};
+
+	class _Locimp;
+
+			
+	class  facet
+		{	
+		friend class locale;
+		friend class _Locimp;
+
+	public:
+		static size_t __cdecl _Getcat(const facet ** = 0)
+			{	
+			return ((size_t)(-1));
+			}
+
+		void  _Incref()
+			{	
+			{ ::std:: _Lockit _Lock(0);
+				if (_Refs < (size_t)(-1))
+					++_Refs;
+			}
+			}
+
+		facet * _Decref()
+			{	
+			{ ::std:: _Lockit _Lock(0);
+				if (0 < _Refs && _Refs < (size_t)(-1))
+					--_Refs;
+				return (_Refs == 0 ? this : 0);
+			}
+			}
+
+		void  _Register()
+			{
+			facet_Register(this);
+			}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		virtual  ~facet()
+			{	
+			}
+
+	protected:
+		explicit  facet(size_t _Initrefs = 0)
+			: _Refs(_Initrefs)
+			{	
+			}
+
+	private:
+		 static void __cdecl facet_Register(facet *);	
+
+		 facet(const facet&);	
+		facet&  operator=(const facet&);	
+
+		size_t _Refs;	
+		};
+
+			
+	class  _Locimp
+		: public facet
+		{	
+	protected:
+		 ~_Locimp()
+			{
+			_Locimp_dtor(this);
+			}
+
+	private:
+		static  void __cdecl _Locimp_dtor(_Locimp *); 
+		static  void __cdecl _Locimp_ctor(_Locimp *,const _Locimp&);	
+		static  void __cdecl _Locimp_Addfac(_Locimp *,facet *, size_t);	
+		friend class locale;
+
+		 _Locimp(bool _Transparent = false)
+			: locale::facet(1), _Facetvec(0), _Facetcount(0),
+				_Catmask(none), _Xparent(_Transparent), _Name("*")
+			{ }
+		
+		 _Locimp(const _Locimp& _Right)
+			: locale::facet(1), _Facetvec(0), _Facetcount(_Right._Facetcount),
+				_Catmask(_Right._Catmask), _Xparent(_Right._Xparent), _Name(_Right._Name)
+			{
+			_Locimp_ctor(this, _Right);
+			}
+		
+		void  _Addfac(facet *_Pfacet, size_t _Id)
+			{
+			_Locimp_Addfac(this, _Pfacet, _Id);
+			}
+
+		static  _Locimp *__cdecl _Makeloc(const _Locinfo&,
+			category, _Locimp *, const locale *);	
+
+		static  void __cdecl _Makewloc(const _Locinfo&,
+			category, _Locimp *, const locale *);	
+
+ 
+		static  void __cdecl _Makeushloc(const _Locinfo&,
+			category, _Locimp *, const locale *);	
+ 
+
+		static  void __cdecl _Makexloc(const _Locinfo&,
+			category, _Locimp *, const locale *);	
+
+		facet **_Facetvec;	
+		size_t _Facetcount;	
+		category _Catmask;	
+		bool _Xparent;	
+		string _Name;	
+
+		static  _Locimp *& __cdecl _Clocptr_func();	
+
+
+
+		 static _Locimp *_Clocptr;	
+
+private:
+		_Locimp&  operator=(const _Locimp&);	
+	
+		};
+
+	__declspec(deprecated("This is an obsolete part of the Standard C++ Library Implementation. Do not use it.")) locale&  _Addfac(facet *_Fac, size_t _Id,
+		size_t _Catmask)
+		{
+		if (1 < this->_Ptr->_Refs)
+			{	
+			this->_Ptr->_Decref();
+			this->_Ptr = new _Locimp(*this->_Ptr);
+			}
+		this->_Ptr->_Addfac(_Fac, _Id);
+
+		if (_Catmask != 0)
+			this->_Ptr->_Name = "*";
+		return (*this);
+		}
+
+	template<class _Elem,
+		class _Traits,
+		class _Alloc>
+		bool  operator()(const basic_string<_Elem, _Traits, _Alloc>& _Left,
+			const basic_string<_Elem, _Traits, _Alloc>& _Right) const
+		{	
+		const std::collate<_Elem>& _Coll_fac =
+			std::use_facet<std::collate<_Elem> >(*this);
+
+		return (_Coll_fac.compare(_Left.c_str(), _Left.c_str() + _Left.size(),
+			_Right.c_str(), _Right.c_str() + _Right.size()) < 0);
+		}
+
+	template<class _Facet>
+		locale  combine(const locale& _Loc) const
+		{	
+		_Facet *_Facptr;
+
+		try {
+			_Facptr = (_Facet *)&std::use_facet<_Facet>(_Loc);
+		} catch (...) {
+			throw runtime_error("locale::combine facet missing");
+		}
+
+		_Locimp *_Newimp = new _Locimp(*_Ptr);
+		_Newimp->_Addfac(_Facptr, _Facet::id);
+		_Newimp->_Catmask = 0;
+		_Newimp->_Name = "*";
+		return (locale(_Newimp));
+		}
+
+	template<class _Facet>
+		 locale(const locale& _Loc, const _Facet *_Facptr)
+			: _Ptr(new _Locimp(*_Loc._Ptr))
+		{	
+		if (_Facptr != 0)
+			{	
+			_Ptr->_Addfac((_Facet *)_Facptr, _Facet::id);
+			if (_Facet::_Getcat() != (size_t)(-1))
+				_Ptr->_Catmask = 0, _Ptr->_Name = "*";	
+			}
+		}
+
+
+	 locale() throw ()
+		: _Ptr(_Init())
+		{	
+		_Getgloballocale()->_Incref();
+		}
+
+	 locale(_Uninitialized)
+		{	
+		}
+
+	 locale(const locale& _Right) throw ()
+		: _Ptr(_Right._Ptr)
+		{	
+		_Ptr->_Incref();
+		}
+
+	 locale(const locale& _Loc, const locale& _Other,
+		category _Cat) 	
+		: _Ptr(new _Locimp(*_Loc._Ptr))
+		{	
+		try {
+			{ _Locinfo _Lobj(_Loc._Ptr->_Catmask, _Loc._Ptr->_Name.c_str());
+				_Locimp::_Makeloc(_Lobj._Addcats(_Cat & _Other._Ptr->_Catmask,
+					_Other._Ptr->_Name.c_str()), _Cat, _Ptr, &_Other);
+			}
+		} catch (...) {
+			delete (_Ptr->_Decref());
+			throw;
+		}
+		}
+
+	explicit  locale(const char *_Locname,
+		category _Cat = all) 	
+		: _Ptr(new _Locimp)
+		{	
+		try {
+		_Init();
+		{ _Locinfo _Lobj(_Cat, _Locname);
+			if (_Lobj._Getname().compare("*") == 0)
+				throw runtime_error("bad locale name");
+			_Locimp::_Makeloc(_Lobj, _Cat, _Ptr, 0);
+		}
+		} catch (...) {
+		delete (_Ptr->_Decref());
+		throw;
+		}
+		}
+
+	 locale(const locale& _Loc, const char * _Locname,
+		category _Cat) 	
+		: _Ptr(new _Locimp(*_Loc._Ptr))
+		{	
+		try {
+		{ _Locinfo _Lobj(_Loc._Ptr->_Catmask, _Loc._Ptr->_Name.c_str());
+			bool _Hadname = _Lobj._Getname().compare("*") != 0;
+			_Lobj._Addcats(_Cat, _Locname);
+
+			if (_Hadname && _Lobj._Getname().compare("*") == 0)
+				throw runtime_error("bad locale name");
+			_Locimp::_Makeloc(_Lobj, _Cat, _Ptr, 0);
+		}
+		} catch (...) {
+		delete (_Ptr->_Decref());
+		throw;
+		}
+		}
+
+	 ~locale() throw ()
+		{	
+		if (_Ptr != 0)
+			delete (_Ptr->_Decref());
+		}
+
+	locale&  operator=(const locale& _Right) throw ()
+		{	
+		if (_Ptr != _Right._Ptr)
+			{	
+			delete (_Ptr->_Decref());
+			_Ptr = _Right._Ptr;
+			_Ptr->_Incref();
+			}
+		return (*this);
+		}
+
+	string  name() const
+		{	
+		return (_Ptr->_Name);
+		}
+
+	const facet * _Getfacet(size_t _Id) const 	
+		{	
+		const facet *_Facptr = _Id < _Ptr->_Facetcount
+			? _Ptr->_Facetvec[_Id] : 0;	
+		if (_Facptr != 0 || !_Ptr->_Xparent)
+			return (_Facptr);	
+		else
+			{	
+			locale::_Locimp *_Ptr = _Getgloballocale();
+			return (_Id < _Ptr->_Facetcount
+				? _Ptr->_Facetvec[_Id]	
+				: 0);	
+			}
+		}
+
+
+	bool  operator==(const locale& _Loc) const
+		{	
+		return (_Ptr == _Loc._Ptr
+			|| name().compare("*") != 0 && name().compare(_Loc.name()) == 0);
+		}
+
+	bool  operator!=(const locale& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+	static  const locale& __cdecl classic();	
+
+	static  locale __cdecl global(const locale&);	
+
+	static  locale __cdecl empty();	
+
+private:
+	locale(_Locimp *_Ptrimp)
+		: _Ptr(_Ptrimp)
+		{	
+		}
+
+	static  _Locimp *__cdecl _Getgloballocale();
+	static  _Locimp *__cdecl _Init();	
+	static  void __cdecl _Setgloballocale(void *);
+
+	_Locimp *_Ptr;	
+	};
+#pragma warning(pop)
+
+		
+template<class _Facet>
+	struct _Facetptr
+	{	
+	 static const locale::facet *_Psave;
+	};
+
+template<class _Facet>
+	 const locale::facet *_Facetptr<_Facet>::_Psave = 0;
+
+template<class _Facet> inline __declspec(deprecated("This is an obsolete part of the Standard C++ Library Implementation. Do not use it."))
+	locale _Addfac(locale _Loc, const _Facet *_Facptr)
+		{	
+		return (_Loc._Addfac((_Facet *)_Facptr, _Facet::id,
+			_Facet::_Getcat()));
+		}
+
+  
+
+  
+
+
+template<class _Facet> inline
+	const _Facet& __cdecl use_facet(const locale& _Loc)
+	{	
+	{ ::std:: _Lockit _Lock(0);	
+		const locale::facet *_Psave =
+			_Facetptr<_Facet>::_Psave;	
+
+		size_t _Id = _Facet::id;
+		const locale::facet *_Pf = _Loc._Getfacet(_Id);
+
+		if (_Pf != 0)
+			;	
+		else if (_Psave != 0)
+			_Pf = _Psave;	
+		else if (_Facet::_Getcat(&_Psave) == (size_t)(-1))
+
+ 
+		throw bad_cast();	
+
+	
+
+
+
+		else
+			{	
+			_Pf = _Psave;
+			_Facetptr<_Facet>::_Psave = _Psave;
+
+			locale::facet *_Pfmod = (_Facet *)_Psave;
+			_Pfmod->_Incref();
+			_Pfmod->_Register();
+			}
+
+		return ((const _Facet&)(*_Pf));	
+	}
+	}
+
+template<class _Facet> inline __declspec(deprecated("This is an obsolete part of the Standard C++ Library Implementation. Do not use it."))
+	const _Facet& __cdecl use_facet(const locale& _Loc, const _Facet *,
+		bool = false)
+	{	
+	return use_facet<_Facet>(_Loc);
+	}
+
+		
+template<class _Elem,
+	class _InIt> inline
+	int __cdecl _Getloctxt(_InIt& _First, _InIt& _Last, size_t _Numfields,
+		const _Elem *_Ptr)
+	{	
+	for (size_t _Off = 0; _Ptr[_Off] != (_Elem)0; ++_Off)
+		if (_Ptr[_Off] == _Ptr[0])
+			++_Numfields;	
+	string _Str(_Numfields, '\0');	
+
+	int _Ans = -2;	
+	for (size_t _Column = 1; ; ++_Column, ++_First, _Ans = -1)
+		{	
+		bool  _Prefix = false;	
+		size_t _Off = 0;	
+		size_t _Field = 0;	
+
+		for (; _Field < _Numfields; ++_Field)
+			{	
+			for (; _Ptr[_Off] != (_Elem)0 && _Ptr[_Off] != _Ptr[0]; ++_Off)
+				;	
+
+			if (_Str[_Field] != '\0')
+				_Off += _Str[_Field];	
+			else if (_Ptr[_Off += _Column] == _Ptr[0]
+				|| _Ptr[_Off] == (_Elem)0)
+				{	
+				_Str[_Field] = (char)(_Column < 127
+					? _Column : 127);	
+				_Ans = (int)_Field;	
+				}
+			else if (_First == _Last || _Ptr[_Off] != *_First)
+				_Str[_Field] = (char)(_Column < 127
+					? _Column : 127);	
+			else
+				_Prefix = true;	
+			}
+
+		if (!_Prefix || _First == _Last)
+			break;	
+		}
+	return (_Ans);	
+	}
+
+		
+
+
+
+template<class _Elem> inline
+	char __cdecl _Maklocbyte(_Elem _Char,
+		const _Locinfo::_Cvtvec&)
+	{	
+	return ((char)(unsigned char)_Char);
+	}
+
+template<> inline
+	char __cdecl _Maklocbyte(wchar_t _Char,
+		const _Locinfo::_Cvtvec& _Cvt)
+	{	
+	char _Byte = '\0';
+	mbstate_t _Mbst1 = {0};
+	_Wcrtomb(&_Byte, _Char, &_Mbst1, &_Cvt);
+	return (_Byte);
+	}
+
+
+		
+
+
+
+template<class _Elem> inline
+	_Elem __cdecl _Maklocchr(char _Byte, _Elem *,
+		const _Locinfo::_Cvtvec&)
+	{	
+	return ((_Elem)(unsigned char)_Byte);
+	}
+
+template<> inline
+	wchar_t __cdecl _Maklocchr(char _Byte,          wchar_t *,
+		const _Locinfo::_Cvtvec& _Cvt)
+	{	
+	wchar_t _Wc = L'\0';
+	mbstate_t _Mbst1 = {0};
+	_Mbrtowc(&_Wc, &_Byte, 1, &_Mbst1, &_Cvt);
+	return (_Wc);
+	}
+
+
+		
+
+
+
+template<class _Elem> inline
+	_Elem *__cdecl _Maklocstr(const char *_Ptr, _Elem *,
+		const _Locinfo::_Cvtvec&)
+	{	
+	size_t _Count = ::strlen(_Ptr) + 1;
+	_Elem *_Ptrdest = new _Elem[_Count];
+
+#pragma warning(push)
+#pragma warning(disable: 6011)
+	
+	for (_Elem *_Ptrnext = _Ptrdest; 0 < _Count; --_Count, ++_Ptrnext, ++_Ptr)
+		*_Ptrnext = (_Elem)(unsigned char)*_Ptr;
+	return (_Ptrdest);
+#pragma warning(pop)
+	}
+
+template<> inline
+	wchar_t *__cdecl _Maklocstr(const char *_Ptr,          wchar_t *,
+		const _Locinfo::_Cvtvec& _Cvt)
+	{	
+	size_t _Count, _Count1;
+	size_t _Wchars;
+	const char *_Ptr1;
+	int _Bytes;
+	wchar_t _Wc;
+	mbstate_t _Mbst1 = {0};
+
+	_Count1 = ::strlen(_Ptr) + 1;
+	for (_Count = _Count1, _Wchars = 0, _Ptr1 = _Ptr; 0 < _Count;
+		_Count -= _Bytes, _Ptr1 += _Bytes, ++_Wchars)
+		if ((_Bytes = _Mbrtowc(&_Wc, _Ptr1, _Count, &_Mbst1, &_Cvt)) <= 0)
+			break;
+	++_Wchars;	
+
+	wchar_t *_Ptrdest = new wchar_t[_Wchars];
+	wchar_t *_Ptrnext = _Ptrdest;
+	mbstate_t _Mbst2 = {0};
+#pragma warning(push)
+#pragma warning(disable: 6011)
+	
+	for (; 0 < _Wchars;
+		_Count -= _Bytes, _Ptr += _Bytes, --_Wchars, ++_Ptrnext)
+		if ((_Bytes = _Mbrtowc(_Ptrnext, _Ptr, _Count1, &_Mbst2, &_Cvt)) <= 0)
+			break;
+	*_Ptrnext = L'\0';
+#pragma warning(pop)
+	return (_Ptrdest);
+	}
+
+
+		
+class  codecvt_base
+	: public locale::facet
+	{	
+public:
+	enum
+		{	
+		ok, partial, error, noconv};
+	typedef int result;
+
+	 codecvt_base(size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		}
+
+	bool  always_noconv() const throw ()
+		{	
+		return (do_always_noconv());
+		}
+
+	int  max_length() const throw ()
+		{	
+		return (do_max_length());
+		}
+
+	int  encoding() const throw ()
+		{	
+		return (do_encoding());
+		}
+
+	 ~codecvt_base()
+		{	
+		}
+
+protected:
+	virtual bool  do_always_noconv() const throw ()
+		{	
+		return (true);
+		}
+
+	virtual int  do_max_length() const throw ()
+		{	
+		return (1);
+		}
+
+	virtual int  do_encoding() const throw ()
+		{	
+		return (1);	
+		}
+	};
+
+		
+template<class _Elem,
+	class _Byte,
+	class _Statype>
+	class codecvt
+		: public codecvt_base
+	{	
+public:
+	typedef _Elem intern_type;
+	typedef _Byte extern_type;
+	typedef _Statype state_type;
+
+	result  in(_Statype& _State,
+		const _Byte *_First1, const _Byte *_Last1, const _Byte *& _Mid1,
+		_Elem *_First2, _Elem *_Last2, _Elem *& _Mid2) const
+		{	
+		return (do_in(_State,
+			_First1, _Last1, _Mid1, _First2, _Last2, _Mid2));
+		}
+
+	result  out(_Statype& _State,
+		const _Elem *_First1, const _Elem *_Last1, const _Elem *& _Mid1,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		return (do_out(_State,
+			_First1, _Last1, _Mid1, _First2, _Last2, _Mid2));
+		}
+
+	result  unshift(_Statype& _State,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		return (do_unshift(_State, _First2, _Last2, _Mid2));
+		}
+
+	int  length(const _Statype& _State, const _Byte *_First1,
+		const _Byte *_Last1, size_t _Count) const
+		{	
+		return (do_length(_State, _First1, _Last1, _Count));
+		}
+
+	 static locale::id id;	
+
+	explicit  codecvt(size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 codecvt(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new codecvt<_Elem, _Byte, _Statype>;
+		return (2);
+		}
+
+protected:
+	virtual  ~codecvt()
+		{	
+		}
+
+protected:
+	void  _Init(const _Locinfo&)
+		{	
+		}
+
+	virtual result  do_in(_Statype&,
+		const _Byte *_First1, const _Byte *, const _Byte *& _Mid1,
+		_Elem *_First2, _Elem *, _Elem *& _Mid2) const
+		{	
+		_Mid1 = _First1, _Mid2 = _First2;
+		return (noconv);	
+		}
+
+	virtual result  do_out(_Statype&,
+		const _Elem *_First1, const _Elem *, const _Elem *& _Mid1,
+		_Byte *_First2, _Byte *, _Byte *& _Mid2) const
+		{	
+		_Mid1 = _First1, _Mid2 = _First2;
+		return (noconv);	
+		}
+
+	virtual result  do_unshift(_Statype&,
+		_Byte *_First2, _Byte *, _Byte *&_Mid2) const
+		{	
+		_Mid2 = _First2;
+		return (noconv);	
+		}
+
+	virtual int  do_length(const _Statype&, const _Byte *_First1,
+		const _Byte *_Last1, size_t _Count) const
+		{	
+		return ((int)(_Count < (size_t)(_Last1 - _First1)
+			? _Count : _Last1 - _First1));	
+		}
+	};
+
+		
+template<class _Elem,
+	class _Byte,
+	class _Statype>
+	 locale::id codecvt<_Elem, _Byte, _Statype>::id;
+
+		
+template<> class  codecvt<wchar_t, char, _Mbstatet>
+	: public codecvt_base
+	{	
+public:
+	typedef wchar_t _Elem;
+	typedef char _Byte;
+	typedef _Mbstatet _Statype;
+	typedef _Elem intern_type;
+	typedef _Byte extern_type;
+	typedef _Statype state_type;
+
+	result  in(_Statype& _State,
+		const _Byte *_First1, const _Byte *_Last1, const _Byte *& _Mid1,
+		_Elem *_First2, _Elem *_Last2, _Elem *& _Mid2) const
+		{	
+		return (do_in(_State,
+			_First1, _Last1, _Mid1, _First2, _Last2, _Mid2));
+		}
+
+	result  out(_Statype& _State,
+		const _Elem *_First1, const _Elem *_Last1, const _Elem *& _Mid1,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		return (do_out(_State,
+			_First1, _Last1, _Mid1, _First2, _Last2, _Mid2));
+		}
+
+	result  unshift(_Statype& _State,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		return (do_unshift(_State,
+			_First2, _Last2, _Mid2));
+		}
+
+	int  length(const _Statype& _State, const _Byte *_First1,
+		const _Byte *_Last1, size_t _Count) const
+		{	
+		return (do_length(_State, _First1, _Last1, _Count));
+		}
+
+	static  locale::id& __cdecl _Id_func();
+
+
+
+	 static locale::id id;	
+
+
+	explicit  codecvt(size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 codecvt(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new codecvt<_Elem, _Byte, _Statype>;
+		return (2);
+		}
+
+protected:
+	virtual  ~codecvt()
+		{	
+		}
+
+protected:
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Cvt = _Lobj._Getcvt();
+		}
+
+	virtual result  do_in(_Statype& _State,
+		const _Byte *_First1, const _Byte *_Last1, const _Byte *& _Mid1,
+			_Elem *_First2, _Elem *_Last2, _Elem *& _Mid2) const
+		{	
+		;
+		;
+		_Mid1 = _First1, _Mid2 = _First2;
+		result _Ans = _Mid1 == _Last1 ? ok : partial;
+		int _Bytes;
+
+		while (_Mid1 != _Last1 && _Mid2 != _Last2)
+			switch (_Bytes = _Mbrtowc(_Mid2, _Mid1, _Last1 - _Mid1,
+				&_State, &_Cvt))
+			{	
+			case -2:	
+				_Mid1 = _Last1;
+				return (_Ans);
+
+			case -1:	
+				return (error);
+
+			case 0:	
+				if (*_Mid2 == (_Elem)0)
+					_Bytes = (int)::strlen(_Mid1) + 1;
+				
+
+			default:	
+				if (_Bytes == -3)
+					_Bytes = 0;	
+				_Mid1 += _Bytes;
+				++_Mid2;
+				_Ans = ok;
+			}
+		return (_Ans);
+		}
+
+	virtual result  do_out(_Statype& _State,
+		const _Elem *_First1, const _Elem *_Last1, const _Elem *& _Mid1,
+			_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		;
+		;
+		_Mid1 = _First1, _Mid2 = _First2;
+		result _Ans = _Mid1 == _Last1 ? ok : partial;
+		int _Bytes;
+
+		while (_Mid1 != _Last1 && _Mid2 != _Last2)
+			if (5 <= _Last2 - _Mid2)
+				if ((_Bytes = _Wcrtomb(_Mid2, *_Mid1,
+					&_State, &_Cvt)) < 0)
+					return (error);	
+				else
+					++_Mid1, _Mid2 += _Bytes, _Ans = ok;
+			else
+				{	
+				_Byte _Buf[5];
+				_Statype _Stsave = _State;
+
+				if ((_Bytes = _Wcrtomb(_Buf, *_Mid1,
+					&_State, &_Cvt)) < 0)
+					return (error);	
+				else if (_Last2 - _Mid2 < _Bytes)
+					{	
+					_State = _Stsave;
+					return (_Ans);
+					}
+				else
+					{	
+					::memcpy_s((_Mid2), (_Last2 - _Mid2), (_Buf), (_Bytes));
+					++_Mid1, _Mid2 += _Bytes, _Ans = ok;
+					}
+				}
+		return (_Ans);
+		}
+
+	virtual result  do_unshift(_Statype& _State,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		;
+		_Mid2 = _First2;
+		result _Ans = ok;
+		int _Bytes;
+		_Byte _Buf[5];
+		_Statype _Stsave = _State;
+
+		if ((_Bytes = _Wcrtomb(_Buf, L'\0', &_State, &_Cvt)) <= 0)
+			_Ans = error;	
+		else if (_Last2 - _Mid2 < --_Bytes)
+			{	
+			_State = _Stsave;
+			_Ans = partial;
+			}
+		else if (0 < _Bytes)
+			{	
+			::memcpy_s((_Mid2), (_Last2 - _Mid2), (_Buf), (_Bytes));
+			_Mid2 += _Bytes;
+			}
+		return (_Ans);
+		}
+
+	virtual int  do_length(const _Statype& _State, const _Byte *_First1,
+		const _Byte *_Last1, size_t _Count) const
+		{	
+		;
+		int _Wchars;
+		const _Byte *_Mid1;
+		_Statype _Mystate = _State;
+
+		for (_Wchars = 0, _Mid1 = _First1;
+			(size_t)_Wchars < _Count && _Mid1 != _Last1; )
+			{	
+			int _Bytes;
+			_Elem _Ch;
+
+			switch (_Bytes = _Mbrtowc(&_Ch, _Mid1, _Last1 - _Mid1,
+				&_Mystate, &_Cvt))
+				{	
+			case -2:	
+				return (_Wchars);
+
+			case -1:	
+				return (_Wchars);
+
+			case 0:	
+				if (_Ch == (_Elem)0)
+					_Bytes = (int)::strlen(_Mid1) + 1;
+				
+
+			default:	
+				if (_Bytes == -3)
+					_Bytes = 0;	
+				_Mid1 += _Bytes;
+				++_Wchars;
+				}
+			}
+		return (_Wchars);
+		}
+
+	virtual bool  do_always_noconv() const throw ()
+		{	
+		return (false);
+		}
+
+	virtual int  do_max_length() const throw ()
+		{	
+		return (5);
+		}
+
+	virtual int  do_encoding() const throw ()
+		{	
+		return (0);
+		}
+
+private:
+	_Locinfo::_Cvtvec _Cvt;	
+	};
+
+
+		
+template<> class  codecvt<unsigned short, char, _Mbstatet>
+	: public codecvt_base
+	{	
+public:
+	typedef unsigned short _Elem;
+	typedef char _Byte;
+	typedef _Mbstatet _Statype;
+	typedef _Elem intern_type;
+	typedef _Byte extern_type;
+	typedef _Statype state_type;
+
+	result  in(_Statype& _State,
+		const _Byte *_First1, const _Byte *_Last1, const _Byte *& _Mid1,
+		_Elem *_First2, _Elem *_Last2, _Elem *& _Mid2) const
+		{	
+		return (do_in(_State,
+			_First1, _Last1, _Mid1, _First2, _Last2, _Mid2));
+		}
+
+	result  out(_Statype& _State,
+		const _Elem *_First1, const _Elem *_Last1, const _Elem *& _Mid1,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		return (do_out(_State,
+			_First1, _Last1, _Mid1, _First2, _Last2, _Mid2));
+		}
+
+	result  unshift(_Statype& _State,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		return (do_unshift(_State,
+			_First2, _Last2, _Mid2));
+		}
+
+	int  length(const _Statype& _State, const _Byte *_First1,
+		const _Byte *_Last1, size_t _Count) const
+		{	
+		return (do_length(_State, _First1, _Last1, _Count));
+		}
+
+	static  locale::id& __cdecl _Id_func();
+
+
+
+	 static locale::id id;	
+
+
+	explicit  codecvt(size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 codecvt(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new codecvt<_Elem, _Byte, _Statype>;
+		return (2);
+		}
+
+protected:
+	virtual  ~codecvt()
+		{	
+		}
+
+protected:
+	 codecvt(const char *_Locname, size_t _Refs = 0)
+		: codecvt_base(_Refs)
+		{	
+		{ _Locinfo _Lobj(_Locname);
+			_Init(_Lobj);
+		}
+		}
+
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Cvt = _Lobj._Getcvt();
+		}
+
+	virtual result  do_in(_Statype& _State,
+		const _Byte *_First1, const _Byte *_Last1, const _Byte *& _Mid1,
+			_Elem *_First2, _Elem *_Last2, _Elem *& _Mid2) const
+		{	
+		;
+		;
+		_Mid1 = _First1, _Mid2 = _First2;
+		result _Ans = _Mid1 == _Last1 ? ok : partial;
+		int _Bytes;
+
+		while (_Mid1 != _Last1 && _Mid2 != _Last2)
+			switch (_Bytes = _Mbrtowc((wchar_t *)_Mid2, _Mid1, _Last1 - _Mid1,
+				&_State, &_Cvt))
+			{	
+			case -2:	
+				_Mid1 = _Last1;
+				return (_Ans);
+
+			case -1:	
+				return (error);
+
+			case 0:	
+				if (*_Mid2 == (_Elem)0)
+					_Bytes = (int)::strlen(_Mid1) + 1;
+				
+
+			default:	
+				if (_Bytes == -3)
+					_Bytes = 0;	
+				_Mid1 += _Bytes;
+				++_Mid2;
+				_Ans = ok;
+			}
+		return (_Ans);
+		}
+
+	virtual result  do_out(_Statype& _State,
+		const _Elem *_First1, const _Elem *_Last1, const _Elem *& _Mid1,
+			_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		;
+		;
+		_Mid1 = _First1, _Mid2 = _First2;
+		result _Ans = _Mid1 == _Last1 ? ok : partial;
+		int _Bytes;
+
+		while (_Mid1 != _Last1 && _Mid2 != _Last2)
+			if (5 <= _Last2 - _Mid2)
+				if ((_Bytes = _Wcrtomb(_Mid2, *_Mid1,
+					&_State, &_Cvt)) < 0)
+					return (error);	
+				else
+					++_Mid1, _Mid2 += _Bytes, _Ans = ok;
+			else
+				{	
+				_Byte _Buf[5];
+				_Statype _Stsave = _State;
+
+				if ((_Bytes = _Wcrtomb(_Buf, *_Mid1,
+					&_State, &_Cvt)) < 0)
+					return (error);	
+				else if (_Last2 - _Mid2 < _Bytes)
+					{	
+					_State = _Stsave;
+					return (_Ans);
+					}
+				else
+					{	
+					::memcpy_s((_Mid2), (_Last2 - _Mid2), (_Buf), (_Bytes));
+					++_Mid1, _Mid2 += _Bytes, _Ans = ok;
+					}
+				}
+		return (_Ans);
+		}
+
+	virtual result  do_unshift(_Statype& _State,
+		_Byte *_First2, _Byte *_Last2, _Byte *& _Mid2) const
+		{	
+		;
+		_Mid2 = _First2;
+		result _Ans = ok;
+		int _Bytes;
+		_Byte _Buf[5];
+		_Statype _Stsave = _State;
+
+		if ((_Bytes = _Wcrtomb(_Buf, L'\0', &_State, &_Cvt)) <= 0)
+			_Ans = error;	
+		else if (_Last2 - _Mid2 < --_Bytes)
+			{	
+			_State = _Stsave;
+			_Ans = partial;
+			}
+		else if (0 < _Bytes)
+			{	
+			::memcpy_s((_Mid2), (_Last2 - _Mid2), (_Buf), (_Bytes));
+			_Mid2 += _Bytes;
+			}
+		return (_Ans);
+		}
+
+	virtual int  do_length(const _Statype& _State, const _Byte *_First1,
+		const _Byte *_Last1, size_t _Count) const
+		{	
+		;
+		int _Wchars;
+		const _Byte *_Mid1;
+		_Statype _Mystate = _State;
+
+		for (_Wchars = 0, _Mid1 = _First1;
+			(size_t)_Wchars < _Count && _Mid1 != _Last1; )
+			{	
+			int _Bytes;
+			_Elem _Ch;
+
+			switch (_Bytes = _Mbrtowc((wchar_t *)&_Ch, _Mid1, _Last1 - _Mid1,
+				&_Mystate, &_Cvt))
+				{	
+			case -2:	
+				return (_Wchars);
+
+			case -1:	
+				return (_Wchars);
+
+			case 0:	
+				if (_Ch == (_Elem)0)
+					_Bytes = (int)::strlen(_Mid1) + 1;
+				
+
+			default:	
+				if (_Bytes == -3)
+					_Bytes = 0;	
+				_Mid1 += _Bytes;
+				++_Wchars;
+				}
+			}
+		return (_Wchars);
+		}
+
+	virtual bool  do_always_noconv() const throw ()
+		{	
+		return (false);
+		}
+
+	virtual int  do_max_length() const throw ()
+		{	
+		return (5);
+		}
+
+	virtual int  do_encoding() const throw ()
+		{	
+		return (0);
+		}
+
+private:
+	_Locinfo::_Cvtvec _Cvt;	
+	};
+
+
+		
+template<class _Elem,
+	class _Byte,
+	class _Statype>
+	class codecvt_byname
+		: public codecvt<_Elem, _Byte, _Statype>
+	{	
+public:
+	explicit  codecvt_byname(const char *_Locname, size_t _Refs = 0)
+		: codecvt<_Elem, _Byte, _Statype>(_Locname, _Refs)
+		{	
+		}
+
+protected:
+	virtual  ~codecvt_byname()
+		{	
+		}
+	};
+
+		
+struct  ctype_base
+	: public locale::facet
+	{	
+	enum
+		{	
+		alnum = 0x4|0x2|0x1|0x100, alpha = 0x2|0x1|0x100,
+		cntrl = 0x20, digit = 0x4, graph = 0x4|0x2|0x10|0x1|0x100,
+		lower = 0x2, print = 0x4|0x2|0x10|0x40|0x1|0x100|0x80,
+		punct = 0x10, space = 0x8|0x40|0x000, upper = 0x1,
+		xdigit = 0x80};
+	typedef short mask;	
+
+	 ctype_base(size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		}
+
+	 ~ctype_base()
+		{	
+		}
+
+protected:
+	static void __cdecl _Xran()
+		{	
+		throw out_of_range("out_of_range in ctype<T>");
+		}
+	};
+
+		
+template<class _Elem>
+	class ctype
+		: public ctype_base
+	{	
+public:
+	typedef _Elem char_type;
+
+	bool  is(mask _Maskval, _Elem _Ch) const
+		{	
+		return (do_is(_Maskval, _Ch));
+		}
+
+	const _Elem * is(const _Elem *_First, const _Elem *_Last,
+		mask *_Dest) const
+		{	
+		return (do_is(_First, _Last, _Dest));
+		}
+
+	const _Elem * scan_is(mask _Maskval, const _Elem *_First,
+		const _Elem *_Last) const
+		{	
+		return (do_scan_is(_Maskval, _First, _Last));
+		}
+
+	const _Elem * scan_not(mask _Maskval, const _Elem *_First,
+		const _Elem *_Last) const
+		{	
+		return (do_scan_not(_Maskval, _First, _Last));
+		}
+
+	_Elem  tolower(_Elem _Ch) const
+		{	
+		return (do_tolower(_Ch));
+		}
+
+	const _Elem * tolower(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_tolower(_First, _Last));
+		}
+
+	_Elem  toupper(_Elem _Ch) const
+		{	
+		return (do_toupper(_Ch));
+		}
+
+	const _Elem * toupper(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_toupper(_First, _Last));
+		}
+
+	_Elem  widen(char _Byte) const
+		{	
+		return (do_widen(_Byte));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const char * widen(const char *_First, const char *_Last,
+		_Elem *_Dest) const
+		{	
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_widen(_First, _Last, _Dest));
+#pragma warning(pop)
+		}
+
+	const char * _Widen_s(const char *_First, const char *_Last,
+		_Elem *_Dest, size_t _Dest_size) const
+		{	
+		return (_Do_widen_s(_First, _Last, _Dest, _Dest_size));
+		}
+
+	char  narrow(_Elem _Ch, char _Dflt = '\0') const
+		{	
+		return (do_narrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const _Elem * narrow(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,      char *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_narrow(_First, _Last, _Dflt, _Dest));
+#pragma warning(pop)
+		}
+
+	const _Elem * _Narrow_s(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,        char *_Dest, size_t _Dest_size) const
+		{	
+		return (_Do_narrow_s(_First, _Last, _Dflt, _Dest, _Dest_size));
+		}
+
+	 static locale::id id;	
+
+	explicit  ctype(size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 ctype(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new ctype<_Elem>;
+		return (2);
+		}
+
+protected:
+	virtual  ~ctype()
+		{	
+		if (_Ctype._Delfl)
+			free((void *)_Ctype._Table);
+		}
+
+protected:
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Ctype = _Lobj._Getctype();
+		}
+
+	virtual bool  do_is(mask _Maskval, _Elem _Ch) const
+		{	
+		return ((_Ctype._Table[(unsigned char)narrow(_Ch)]
+			& _Maskval) != 0);
+		}
+
+	virtual const _Elem * do_is(const _Elem *_First, const _Elem *_Last,
+		mask *_Dest) const
+		{	
+		;
+		;
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Ctype._Table[(unsigned char)narrow(*_First)];
+		return (_First);
+		}
+
+	virtual const _Elem * do_scan_is(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && !is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	virtual const _Elem * do_scan_not(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	virtual _Elem  do_tolower(_Elem _Ch) const
+		{	
+		unsigned char _Byte = (unsigned char)narrow(_Ch, '\0');
+		if (_Byte == '\0')
+			return (_Ch);
+		else
+			return (widen((char)_Tolower(_Byte, &_Ctype)));
+		}
+
+	virtual const _Elem * do_tolower(_Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			{	
+			unsigned char _Byte = (unsigned char)narrow(*_First, '\0');
+			if (_Byte != '\0')
+				*_First = (widen((char)_Tolower(_Byte, &_Ctype)));
+			}
+		return ((const _Elem *)_First);
+		}
+
+	virtual _Elem  do_toupper(_Elem _Ch) const
+		{	
+		unsigned char _Byte = (unsigned char)narrow(_Ch, '\0');
+		if (_Byte == '\0')
+			return (_Ch);
+		else
+			return (widen((char)_Toupper(_Byte, &_Ctype)));
+		}
+
+	virtual const _Elem * do_toupper(_Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			{	
+			unsigned char _Byte = (unsigned char)narrow(*_First, '\0');
+			if (_Byte != '\0')
+				*_First = (widen((char)_Toupper(_Byte, &_Ctype)));
+			}
+		return ((const _Elem *)_First);
+		}
+
+	virtual _Elem  do_widen(char _Byte) const
+		{	
+		return (_Maklocchr(_Byte, (_Elem *)0, _Cvt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const char * do_widen(const char *_First,
+		const char *_Last, _Elem *_Dest) const
+		{	
+		
+		return _Do_widen_s(_First, _Last, _Dest, _Last - _First);
+		}
+
+	virtual const char * _Do_widen_s(const char *_First,
+		const char *_Last, _Elem *_Dest, size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Maklocchr(*_First, (_Elem *)0, _Cvt);
+		return (_First);
+		}
+
+	char  _Donarrow(_Elem _Ch, char _Dflt) const
+		{	
+		char _Byte;
+		if (_Ch == (_Elem)0)
+			return ('\0');
+		else if ((_Byte = _Maklocbyte((_Elem)_Ch, _Cvt)) == '\0')
+			return (_Dflt);
+		else
+			return (_Byte);
+		}
+
+	virtual char  do_narrow(_Elem _Ch, char _Dflt) const
+		{	
+		return (_Donarrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const _Elem * do_narrow(const _Elem *_First,
+		const _Elem *_Last, char _Dflt,      char *_Dest) const
+		{	
+		
+		return _Do_narrow_s(_First, _Last, _Dflt, _Dest, _Last - _First);
+		}
+
+	virtual const _Elem * _Do_narrow_s(const _Elem *_First,
+		const _Elem *_Last, char _Dflt, 
+		       char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Donarrow(*_First, _Dflt);
+		return (_First);
+		}
+
+private:
+	_Locinfo::_Ctypevec _Ctype;	
+	_Locinfo::_Cvtvec _Cvt;		
+	};
+
+		
+template<class _Elem>
+	 locale::id ctype<_Elem>::id;
+
+		
+template<> class  ctype<char>
+	: public ctype_base
+	{	
+	typedef ctype<char> _Myt;
+
+public:
+	typedef char _Elem;
+	typedef _Elem char_type;
+
+	bool  is(mask _Maskval, _Elem _Ch) const
+		{	
+		return ((_Ctype._Table[(unsigned char)_Ch] & _Maskval) != 0);
+		}
+
+	const _Elem * is(const _Elem *_First,
+		const _Elem *_Last, mask *_Dest) const
+		{	
+		;
+		;
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Ctype._Table[(unsigned char)*_First];
+		return (_First);
+		}
+
+	const _Elem * scan_is(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && !is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	const _Elem * scan_not(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	_Elem  tolower(_Elem _Ch) const
+		{	
+		return (do_tolower(_Ch));
+		}
+
+	const _Elem * tolower(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_tolower(_First, _Last));
+		}
+
+	_Elem  toupper(_Elem _Ch) const
+		{	
+		return (do_toupper(_Ch));
+		}
+
+	const _Elem * toupper(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_toupper(_First, _Last));
+		}
+
+	_Elem  widen(char _Byte) const
+		{	
+		return (do_widen(_Byte));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const _Elem * widen(const char *_First, const char *_Last,
+		_Elem *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_widen(_First, _Last, _Dest));
+#pragma warning(pop)
+		}
+
+	const _Elem * _Widen_s(const char *_First, const char *_Last,
+		_Elem *_Dest, size_t _Dest_size) const
+		{	
+		return (_Do_widen_s(_First, _Last, _Dest, _Dest_size));
+		}
+
+	_Elem  narrow(_Elem _Ch, char _Dflt = '\0') const
+		{	
+		return (do_narrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const _Elem * narrow(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,      char *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_narrow(_First, _Last, _Dflt, _Dest));
+#pragma warning(pop)
+		}
+
+	const _Elem * _Narrow_s(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,        char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		return (_Do_narrow_s(_First, _Last, _Dflt, _Dest, _Dest_size));
+		}
+
+	static  locale::id& __cdecl _Id_func();
+
+
+
+	 static locale::id id;	
+
+
+	explicit  ctype(const mask *_Table = 0,
+		bool _Deletetable = false,
+		size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		if (_Table != 0)
+			{	
+			_Tidy();
+			_Ctype._Table = _Table;
+			_Ctype._Delfl = _Deletetable ? -1 : 0;
+			}
+		}
+
+	 ctype(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new ctype<_Elem>;
+		return (2);
+		}
+
+	 static const size_t table_size = 1 << 8;	
+
+protected:
+	virtual  ~ctype()
+		{	
+		_Tidy();
+		}
+
+protected:
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Ctype = _Lobj._Getctype();
+		}
+
+	void  _Tidy()
+		{	
+		if (0 < _Ctype._Delfl)
+			free((void *)_Ctype._Table);
+		else if (_Ctype._Delfl < 0)
+			delete[] (void *)_Ctype._Table;
+		}
+
+	virtual _Elem  do_tolower(_Elem _Ch) const
+		{	
+		return ((_Elem)_Tolower((unsigned char)_Ch, &_Ctype));
+		}
+
+	virtual const _Elem * do_tolower(_Elem *_First,
+		const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			*_First = (_Elem)_Tolower((unsigned char)*_First, &_Ctype);
+		return ((const _Elem *)_First);
+		}
+
+	virtual _Elem  do_toupper(_Elem _Ch) const
+		{	
+		return ((_Elem)_Toupper((unsigned char)_Ch, &_Ctype));
+		}
+
+	virtual const _Elem * do_toupper(_Elem *_First,
+		const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			*_First = (_Elem)_Toupper((unsigned char)*_First, &_Ctype);
+		return ((const _Elem *)_First);
+		}
+
+	virtual _Elem  do_widen(char _Byte) const
+		{	
+		return (_Byte);
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const _Elem * do_widen(const char *_First,
+		const char *_Last, _Elem *_Dest) const
+		{	
+		
+		return _Do_widen_s(_First, _Last, _Dest, _Last - _First);
+		}
+
+	virtual const _Elem * _Do_widen_s(const char *_First,
+		const char *_Last, _Elem *_Dest, size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		::memcpy_s((_Dest), (_Dest_size), (_First), (_Last - _First));
+		return (_Last);
+		}
+
+	virtual _Elem  do_narrow(_Elem _Ch, char) const
+		{	
+		return (_Ch);
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const _Elem * do_narrow(const _Elem *_First,
+		const _Elem *_Last, char _Dflt, 
+		     char *_Dest) const
+		{	
+		
+		return _Do_narrow_s(_First, _Last, _Dflt, _Dest, _Last - _First);
+		}
+
+	virtual const _Elem * _Do_narrow_s(const _Elem *_First,
+		const _Elem *_Last, char,        char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		::memcpy_s((_Dest), (_Dest_size), (_First), (_Last - _First));
+		return (_Last);
+		}
+
+	const mask * table() const throw ()
+		{	
+		return (_Ctype._Table);
+		}
+
+	static const mask *__cdecl classic_table() throw ()
+		{	
+		const _Myt& _Ctype_fac = use_facet<_Myt >(locale::classic());
+		return (_Ctype_fac.table());
+		}
+
+private:
+	_Locinfo::_Ctypevec _Ctype;	
+	};
+
+		
+template<> class  ctype<wchar_t>
+	: public ctype_base
+	{	
+	typedef ctype<wchar_t> _Myt;
+
+public:
+	typedef wchar_t _Elem;
+	typedef _Elem char_type;
+
+	bool  is(mask _Maskval, _Elem _Ch) const
+		{	
+		return (do_is(_Maskval, _Ch));
+		}
+
+	const _Elem * is(const _Elem *_First, const _Elem *_Last,
+		mask *_Dest) const
+		{	
+		return (do_is(_First, _Last, _Dest));
+		}
+
+	const _Elem * scan_is(mask _Maskval, const _Elem *_First,
+		const _Elem *_Last) const
+		{	
+		return (do_scan_is(_Maskval, _First, _Last));
+		}
+
+	const _Elem * scan_not(mask _Maskval, const _Elem *_First,
+		const _Elem *_Last) const
+		{	
+		return (do_scan_not(_Maskval, _First, _Last));
+		}
+
+	_Elem  tolower(_Elem _Ch) const
+		{	
+		return (do_tolower(_Ch));
+		}
+
+	const _Elem * tolower(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_tolower(_First, _Last));
+		}
+
+	_Elem  toupper(_Elem _Ch) const
+		{	
+		return (do_toupper(_Ch));
+		}
+
+	const _Elem * toupper(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_toupper(_First, _Last));
+		}
+
+	_Elem  widen(char _Byte) const
+		{	
+		return (do_widen(_Byte));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const char * widen(const char *_First, const char *_Last,
+		_Elem *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_widen(_First, _Last, _Dest));
+#pragma warning(pop)
+		}
+
+	const char * _Widen_s(const char *_First, const char *_Last,
+		_Elem *_Dest, size_t _Dest_size) const
+		{	
+		return (_Do_widen_s(_First, _Last, _Dest, _Dest_size));
+		}
+
+	char  narrow(_Elem _Ch, char _Dflt = '\0') const
+		{	
+		return (do_narrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const _Elem * narrow(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,      char *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_narrow(_First, _Last, _Dflt, _Dest));
+#pragma warning(pop)
+		}
+
+	const _Elem * _Narrow_s(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,        char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		return (_Do_narrow_s(_First, _Last, _Dflt, _Dest, _Dest_size));
+		}
+
+	static  locale::id& __cdecl _Id_func();
+
+
+
+	 static locale::id id;	
+
+
+	explicit  ctype(size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 ctype(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new ctype<_Elem>;
+		return (2);
+		}
+
+protected:
+	virtual  ~ctype()
+		{	
+		if (_Ctype._Delfl)
+			free((void *)_Ctype._Table);
+		}
+
+protected:
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Ctype = _Lobj._Getctype();
+		_Cvt = _Lobj._Getcvt();
+		}
+
+	virtual bool  do_is(mask _Maskval, _Elem _Ch) const
+		{	
+		return ((::_Getwctype(_Ch, &_Ctype) & _Maskval) != 0);
+		}
+
+	virtual const wchar_t * do_is(const _Elem *_First,
+		const _Elem *_Last, mask *_Dest) const
+		{	
+		;
+		;
+		return (::_Getwctypes(_First, _Last, _Dest, &_Ctype));
+		}
+
+	virtual const _Elem * do_scan_is(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && !is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	virtual const _Elem * do_scan_not(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	virtual _Elem  do_tolower(_Elem _Ch) const
+		{	
+		return (_Towlower(_Ch, &_Ctype));
+		}
+
+	virtual const _Elem * do_tolower(_Elem *_First,
+		const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			*_First = _Towlower(*_First, &_Ctype);
+		return ((const _Elem *)_First);
+		}
+
+	virtual _Elem  do_toupper(_Elem _Ch) const
+		{	
+		return (_Towupper(_Ch, &_Ctype));
+		}
+
+	virtual const _Elem * do_toupper(_Elem *_First,
+		const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			*_First = _Towupper(*_First, &_Ctype);
+		return ((const _Elem *)_First);
+		}
+
+	_Elem  _Dowiden(char _Byte) const
+		{	
+		mbstate_t _Mbst = {0};
+		wchar_t _Wc;
+		return (_Mbrtowc(&_Wc, &_Byte, 1, &_Mbst, &_Cvt) < 0
+			? (wchar_t)(wint_t)(0xFFFF) : _Wc);
+		}
+
+	virtual _Elem  do_widen(char _Byte) const
+		{	
+		return (_Dowiden(_Byte));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const char * do_widen(const char *_First,
+		const char *_Last, _Elem *_Dest) const
+		{	
+		
+		return _Do_widen_s(_First, _Last, _Dest, _Last - _First);
+		}
+
+	virtual const char * _Do_widen_s(const char *_First,
+		const char *_Last, _Elem *_Dest, size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Dowiden(*_First);
+		return (_First);
+		}
+
+	char  _Donarrow(_Elem _Ch, char _Dflt) const
+		{	
+		char _Buf[5];
+		mbstate_t _Mbst = {0};
+		return (_Wcrtomb(_Buf, _Ch, &_Mbst, &_Cvt) != 1
+			? _Dflt : _Buf[0]);
+		}
+
+	virtual char  do_narrow(_Elem _Ch, char _Dflt) const
+		{	
+		return (_Donarrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const _Elem * do_narrow(const _Elem *_First,
+		const _Elem *_Last, char _Dflt,  
+		     char *_Dest) const
+		{	
+		
+		return _Do_narrow_s(_First, _Last, _Dflt, _Dest, _Last - _First);
+		}
+
+	virtual const _Elem * _Do_narrow_s(const _Elem *_First,
+		const _Elem *_Last, char _Dflt, 
+		       char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Donarrow(*_First, _Dflt);
+		return (_First);
+		}
+
+private:
+	_Locinfo::_Ctypevec _Ctype;	
+	_Locinfo::_Cvtvec _Cvt;		
+	};
+
+
+		
+template<> class  ctype<unsigned short>
+	: public ctype_base
+	{	
+	typedef ctype<unsigned short> _Myt;
+
+public:
+	typedef unsigned short _Elem;
+	typedef _Elem char_type;
+
+	bool  is(mask _Maskval, _Elem _Ch) const
+		{	
+		return (do_is(_Maskval, _Ch));
+		}
+
+	const _Elem * is(const _Elem *_First, const _Elem *_Last,
+		mask *_Dest) const
+		{	
+		return (do_is(_First, _Last, _Dest));
+		}
+
+	const _Elem * scan_is(mask _Maskval, const _Elem *_First,
+		const _Elem *_Last) const
+		{	
+		return (do_scan_is(_Maskval, _First, _Last));
+		}
+
+	const _Elem * scan_not(mask _Maskval, const _Elem *_First,
+		const _Elem *_Last) const
+		{	
+		return (do_scan_not(_Maskval, _First, _Last));
+		}
+
+	_Elem  tolower(_Elem _Ch) const
+		{	
+		return (do_tolower(_Ch));
+		}
+
+	const _Elem * tolower(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_tolower(_First, _Last));
+		}
+
+	_Elem  toupper(_Elem _Ch) const
+		{	
+		return (do_toupper(_Ch));
+		}
+
+	const _Elem * toupper(_Elem *_First, const _Elem *_Last) const
+		{	
+		return (do_toupper(_First, _Last));
+		}
+
+	_Elem  widen(char _Byte) const
+		{	
+		return (do_widen(_Byte));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const char * widen(const char *_First, const char *_Last,
+		_Elem *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_widen(_First, _Last, _Dest));
+#pragma warning(pop)
+		}
+
+	const char * _Widen_s(const char *_First, const char *_Last,
+		_Elem *_Dest, size_t _Dest_size) const
+		{	
+		return (_Do_widen_s(_First, _Last, _Dest, _Dest_size));
+		}
+
+	char  narrow(_Elem _Ch, char _Dflt = '\0') const
+		{	
+		return (do_narrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	const _Elem * narrow(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,      char *_Dest) const
+		{	
+		
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return (do_narrow(_First, _Last, _Dflt, _Dest));
+#pragma warning(pop)
+		}
+
+	const _Elem * _Narrow_s(const _Elem *_First, const _Elem *_Last,
+		char _Dflt,        char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		return (_Do_narrow_s(_First, _Last, _Dflt, _Dest, _Dest_size));
+		}
+
+	static  locale::id& __cdecl _Id_func();
+
+
+
+	 static locale::id id;	
+
+
+	explicit  ctype(size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 ctype(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new ctype<_Elem>;
+		return (2);
+		}
+
+protected:
+	virtual  ~ctype()
+		{	
+		if (_Ctype._Delfl)
+			free((void *)_Ctype._Table);
+		}
+
+protected:
+	 ctype(const char *_Locname, size_t _Refs = 0)
+		: ctype_base(_Refs)
+		{	
+		{ _Locinfo _Lobj(_Locname);
+			_Init(_Lobj);
+		}
+		}
+
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Ctype = _Lobj._Getctype();
+		_Cvt = _Lobj._Getcvt();
+		}
+
+	virtual bool  do_is(mask _Maskval, _Elem _Ch) const
+		{	
+		return ((::_Getwctype(_Ch, &_Ctype) & _Maskval) != 0);
+		}
+
+	virtual const _Elem * do_is(const _Elem *_First,
+		const _Elem *_Last, mask *_Dest) const
+		{	
+		;
+		;
+		return ((const _Elem *)::_Getwctypes((const wchar_t *)_First,
+			(const wchar_t *)_Last, _Dest, &_Ctype));
+		}
+
+	virtual const _Elem * do_scan_is(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && !is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	virtual const _Elem * do_scan_not(mask _Maskval,
+		const _Elem *_First, const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last && is(_Maskval, *_First); ++_First)
+			;
+		return (_First);
+		}
+
+	virtual _Elem  do_tolower(_Elem _Ch) const
+		{	
+		return (_Towlower(_Ch, &_Ctype));
+		}
+
+	virtual const _Elem * do_tolower(_Elem *_First,
+		const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			*_First = _Towlower(*_First, &_Ctype);
+		return ((const _Elem *)_First);
+		}
+
+	virtual _Elem  do_toupper(_Elem _Ch) const
+		{	
+		return (_Towupper(_Ch, &_Ctype));
+		}
+
+	virtual const _Elem * do_toupper(_Elem *_First,
+		const _Elem *_Last) const
+		{	
+		;
+		for (; _First != _Last; ++_First)
+			*_First = _Towupper(*_First, &_Ctype);
+		return ((const _Elem *)_First);
+		}
+
+	_Elem  _Dowiden(char _Byte) const
+		{	
+		mbstate_t _Mbst = {0};
+		unsigned short _Wc;
+		return (_Mbrtowc((wchar_t *)&_Wc, &_Byte, 1, &_Mbst, &_Cvt) < 0
+			? (unsigned short)(wint_t)(0xFFFF) : _Wc);
+		}
+
+	virtual _Elem  do_widen(char _Byte) const
+		{	
+		return (_Dowiden(_Byte));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const char * do_widen(const char *_First,
+		const char *_Last, _Elem *_Dest) const
+		{	
+		
+		return _Do_widen_s(_First, _Last, _Dest, _Last - _First);
+		}
+
+	virtual const char * _Do_widen_s(const char *_First,
+		const char *_Last, _Elem *_Dest, size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Dowiden(*_First);
+		return (_First);
+		}
+
+	char  _Donarrow(_Elem _Ch, char _Dflt) const
+		{	
+		char _Buf[5];
+		mbstate_t _Mbst = {0};
+		return (_Wcrtomb(_Buf, _Ch, &_Mbst, &_Cvt) != 1
+			? _Dflt : _Buf[0]);
+		}
+
+	virtual char  do_narrow(_Elem _Ch, char _Dflt) const
+		{	
+		return (_Donarrow(_Ch, _Dflt));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual const _Elem * do_narrow(const _Elem *_First,
+		const _Elem *_Last, char _Dflt,      char *_Dest) const
+		{	
+		
+		return _Do_narrow_s(_First, _Last, _Dflt, _Dest, _Last - _First);
+		}
+
+	virtual const _Elem * _Do_narrow_s(const _Elem *_First,
+		const _Elem *_Last, char _Dflt, 
+		       char *_Dest, 
+		size_t _Dest_size) const
+		{	
+		;
+		;
+		{ if (!(_Dest_size >= (size_t)(_Last - _First))) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		for (; _First != _Last; ++_First, ++_Dest)
+			*_Dest = _Donarrow(*_First, _Dflt);
+		return (_First);
+		}
+
+private:
+	_Locinfo::_Ctypevec _Ctype;	
+	_Locinfo::_Cvtvec _Cvt;		
+	};
+
+
+		
+template<class _Elem>
+	class ctype_byname
+	: public ctype<_Elem>
+	{	
+public:
+	explicit  ctype_byname(const char *_Locname, size_t _Refs = 0)
+		: ctype<_Elem>(_Locname, _Refs)
+		{	
+		}
+
+protected:
+	virtual  ~ctype_byname()
+		{	
+		}
+	};
+
+		
+template<> class ctype_byname<char>
+	: public ctype<char>
+	{	
+public:
+	explicit  ctype_byname(const char *_Locname, size_t _Refs = 0)
+		: ctype<char>(_Locname, _Refs)
+		{	
+		}
+
+protected:
+	virtual  ~ctype_byname()
+		{	
+		}
+	};
+
+ 
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+#pragma warning(disable:4412)
+
+
+namespace std {
+
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+
+ 
+ 
+ 
+		
+template<class _Dummy>
+	class _Iosb
+	{	
+public:
+	enum _Dummy_enum {_Dummy_enum_val = 1};	
+
+	enum _Fmtflags
+		{	
+		_Fmtmask = 0xffff, _Fmtzero = 0};
+
+	static const _Fmtflags skipws = (_Fmtflags)0x0001;
+	static const _Fmtflags unitbuf = (_Fmtflags)0x0002;
+	static const _Fmtflags uppercase = (_Fmtflags)0x0004;
+	static const _Fmtflags showbase = (_Fmtflags)0x0008;
+	static const _Fmtflags showpoint = (_Fmtflags)0x0010;
+	static const _Fmtflags showpos = (_Fmtflags)0x0020;
+	static const _Fmtflags left = (_Fmtflags)0x0040;
+	static const _Fmtflags right = (_Fmtflags)0x0080;
+	static const _Fmtflags internal = (_Fmtflags)0x0100;
+	static const _Fmtflags dec = (_Fmtflags)0x0200;
+	static const _Fmtflags oct = (_Fmtflags)0x0400;
+	static const _Fmtflags hex = (_Fmtflags)0x0800;
+	static const _Fmtflags scientific = (_Fmtflags)0x1000;
+	static const _Fmtflags fixed = (_Fmtflags)0x2000;
+	static const _Fmtflags boolalpha = (_Fmtflags)0x4000;
+	static const _Fmtflags _Stdio = (_Fmtflags)0x8000;
+	static const _Fmtflags adjustfield = (_Fmtflags)(0x0040
+		| 0x0080 | 0x0100);
+	static const _Fmtflags basefield = (_Fmtflags)(0x0200
+		| 0x0400 | 0x0800);
+	static const _Fmtflags floatfield = (_Fmtflags)(0x1000
+		| 0x2000);
+
+	enum _Iostate
+		{	
+		_Statmask = 0x17};
+
+	static const _Iostate goodbit = (_Iostate)0x0;
+	static const _Iostate eofbit = (_Iostate)0x1;
+	static const _Iostate failbit = (_Iostate)0x2;
+	static const _Iostate badbit = (_Iostate)0x4;
+	static const _Iostate _Hardfail = (_Iostate)0x10;
+
+	enum _Openmode
+		{	
+		_Openmask = 0xff};
+
+	static const _Openmode in = (_Openmode)0x01;
+	static const _Openmode out = (_Openmode)0x02;
+	static const _Openmode ate = (_Openmode)0x04;
+	static const _Openmode app = (_Openmode)0x08;
+	static const _Openmode trunc = (_Openmode)0x10;
+	static const _Openmode _Nocreate = (_Openmode)0x40;
+	static const _Openmode _Noreplace = (_Openmode)0x80;
+	static const _Openmode binary = (_Openmode)0x20;
+
+	enum _Seekdir
+		{	
+		_Seekmask = 0x3};
+	static const _Seekdir beg = (_Seekdir)0;
+	static const _Seekdir cur = (_Seekdir)1;
+	static const _Seekdir end = (_Seekdir)2;
+
+	enum
+		{	
+		_Openprot = 0x40};
+	};
+
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::skipws;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::unitbuf;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::uppercase;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::showbase;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::showpoint;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::showpos;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::left;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::right;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::internal;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::dec;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::oct;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::hex;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::scientific;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::fixed;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::boolalpha;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::_Stdio;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::adjustfield;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::basefield;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Fmtflags _Iosb<_Dummy>::floatfield;
+
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::goodbit;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::eofbit;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::failbit;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::badbit;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Iostate _Iosb<_Dummy>::_Hardfail;
+
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::in;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::out;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::ate;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::app;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::trunc;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::_Nocreate;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::_Noreplace;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Openmode _Iosb<_Dummy>::binary;
+
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Seekdir _Iosb<_Dummy>::beg;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Seekdir _Iosb<_Dummy>::cur;
+template<class _Dummy>
+	const typename _Iosb<_Dummy>::_Seekdir _Iosb<_Dummy>::end;
+
+		
+class  ios_base
+	: public _Iosb<int>
+	{	
+public:
+	typedef int fmtflags;
+	typedef int iostate;
+	typedef int openmode;
+	typedef int seekdir;
+
+	typedef std::streamoff streamoff;
+	typedef std::streampos streampos;
+
+	enum event
+		{	
+		erase_event, imbue_event, copyfmt_event};
+
+	typedef void (__cdecl *event_callback)(event, ios_base&, int);
+	typedef unsigned int io_state, open_mode, seek_dir;
+
+			
+	class failure
+		: public runtime_error
+		{	
+	public:
+		explicit  failure(const string &_Message)
+			: runtime_error(_Message)
+			{	
+			}
+
+		virtual  ~failure() throw ()
+			{	
+			}
+
+
+
+
+
+
+
+
+
+
+		};
+
+			
+	class  Init
+		{	
+	public:
+		 Init()
+            {
+            _Init_ctor(this);
+            }
+
+		 ~Init()
+            {
+            _Init_dtor(this);
+            }
+
+	private:
+        static  void __cdecl _Init_ctor(Init *);
+        static  void __cdecl _Init_dtor(Init *);
+
+		 static int& __cdecl _Init_cnt_func();	
+
+
+
+		 static int _Init_cnt;	
+
+		};
+
+	ios_base&  operator=(const ios_base& _Right)
+		{	
+		if (this != &_Right)
+			{	
+			_Mystate = _Right._Mystate;
+			copyfmt(_Right);
+			}
+		return (*this);
+		}
+
+	 operator void *() const
+		{	
+		return (fail() ? 0 : (void *)this);
+		}
+
+	bool  operator!() const
+		{	
+		return (fail());
+		}
+
+    void  clear(iostate _State, bool _Reraise)
+        {	
+        _Mystate = (iostate)(_State & _Statmask);
+        if ((_Mystate & _Except) == 0)
+            ;
+        else if (_Reraise)
+            throw;
+        else if (_Mystate & _Except & badbit)
+            throw failure("ios_base::badbit set");
+        else if (_Mystate & _Except & failbit)
+            throw failure("ios_base::failbit set");
+        else
+            throw failure("ios_base::eofbit set");
+        }
+
+	void  clear(iostate _State = goodbit)
+		{	
+		clear(_State, false);
+		}
+
+	void  clear(io_state _State)
+		{	
+		clear((iostate)_State);
+		}
+
+	iostate  rdstate() const
+		{	
+		return (_Mystate);
+		}
+
+
+	void  setstate(iostate _State, bool _Exreraise)
+		{	
+		if (_State != goodbit)
+			clear((iostate)((int)rdstate() | (int)_State), _Exreraise);
+		}
+
+	void  setstate(iostate _State)
+		{	
+		if (_State != goodbit)
+			clear((iostate)((int)rdstate() | (int)_State), false);
+		}
+
+	void  setstate(io_state _State)
+		{	
+		setstate((iostate)_State);
+		}
+
+	bool  good() const
+		{	
+		return (rdstate() == goodbit);
+		}
+
+	bool  eof() const
+		{	
+		return ((int)rdstate() & (int)eofbit);
+		}
+
+	bool  fail() const
+		{	
+		return (((int)rdstate()
+			& ((int)badbit | (int)failbit)) != 0);
+		}
+
+	bool  bad() const
+		{	
+		return (((int)rdstate() & (int)badbit) != 0);
+		}
+
+	
+	
+	
+	iostate  exceptions() const
+		{	
+		return (_Except);
+		}
+
+	void  exceptions(iostate _Newexcept)
+		{	
+		_Except = (iostate)((int)_Newexcept & (int)_Statmask);
+		clear(_Mystate);
+		}
+
+	void  exceptions(io_state _State)
+		{	
+		exceptions((iostate)_State);
+		}
+
+	fmtflags  flags() const
+		{	
+		return (_Fmtfl);
+		}
+
+	fmtflags  flags(fmtflags _Newfmtflags)
+		{	
+		fmtflags _Oldfmtflags = _Fmtfl;
+		_Fmtfl = (fmtflags)((int)_Newfmtflags & (int)_Fmtmask);
+		return (_Oldfmtflags);
+		}
+
+	fmtflags  setf(fmtflags _Newfmtflags)
+		{	
+		ios_base::fmtflags _Oldfmtflags = _Fmtfl;
+		_Fmtfl = (fmtflags)((int)_Fmtfl
+			| (int)_Newfmtflags & (int)_Fmtmask);
+		return (_Oldfmtflags);
+		}
+
+	fmtflags  setf(fmtflags _Newfmtflags, fmtflags _Mask)
+		{	
+		ios_base::fmtflags _Oldfmtflags = _Fmtfl;
+		_Fmtfl = (fmtflags)(((int)_Fmtfl & (int)~_Mask)
+			| ((int)_Newfmtflags & (int)_Mask & (int)_Fmtmask));
+		return (_Oldfmtflags);
+		}
+
+	void  unsetf(fmtflags _Mask)
+		{	
+		_Fmtfl = (fmtflags)((int)_Fmtfl & (int)~_Mask);
+		}
+
+	streamsize  precision() const
+		{	
+		return (_Prec);
+		}
+
+	streamsize  precision(streamsize _Newprecision)
+		{	
+		streamsize _Oldprecision = _Prec;
+		_Prec = _Newprecision;
+		return (_Oldprecision);
+		}
+
+	streamsize  width() const
+		{	
+		return (_Wide);
+		}
+
+	streamsize  width(streamsize _Newwidth)
+		{	
+		streamsize _Oldwidth = _Wide;
+		_Wide = _Newwidth;
+		return (_Oldwidth);
+		}
+
+	locale  getloc() const
+		{	
+		return (*_Ploc);
+		}
+
+	locale  imbue(const locale& _Loc)
+        {	
+        locale _Oldlocale = *_Ploc;
+        *_Ploc = _Loc;
+        _Callfns(imbue_event);
+        return (_Oldlocale);
+        }
+
+	static int __cdecl xalloc()
+		{	
+		{ ::std:: _Lockit _Lock(2);	
+			return (_Index++);
+		}
+		}
+
+	long&  iword(int _Idx)
+		{	
+		return (_Findarr(_Idx)._Lo);
+		}
+
+	void *&  pword(int _Idx)
+		{	
+		return (_Findarr(_Idx)._Vp);
+		}
+
+	void  register_callback(event_callback _Pfn, int _Idx)
+        {	
+        _Calls = new _Fnarray(_Idx, _Pfn, _Calls);
+        }
+
+	ios_base&  copyfmt(const ios_base& _Other)
+        {	
+        if (this != &_Other)
+            {	
+            _Tidy();
+            *_Ploc = *_Other._Ploc;
+            _Fmtfl = _Other._Fmtfl;
+            _Prec = _Other._Prec;
+            _Wide = _Other._Wide;
+            _Iosarray *_Ptr = _Other._Arr;
+
+            for (_Arr = 0; _Ptr != 0; _Ptr = _Ptr->_Next)
+                if (_Ptr->_Lo != 0 || _Ptr->_Vp != 0)
+                    {	
+                    iword(_Ptr->_Index) = _Ptr->_Lo;
+                    pword(_Ptr->_Index) = _Ptr->_Vp;
+                    }
+
+            for (_Fnarray *_Q = _Other._Calls; _Q != 0; _Q = _Q->_Next)
+                register_callback(_Q->_Pfn, _Q->_Index);	
+
+            _Callfns(copyfmt_event);	
+            exceptions(_Other._Except);	
+            }
+        return (*this);
+        }
+
+
+	virtual  ~ios_base()
+        {
+        _Ios_base_dtor(this);
+        }
+
+	static bool __cdecl sync_with_stdio(bool _Newsync = true)
+		{	
+		{ ::std:: _Lockit _Lock(2);	
+			const bool _Oldsync = _Sync;
+			_Sync = _Newsync;
+			return (_Oldsync);
+		}
+		}
+
+	static  void __cdecl _Addstd(ios_base *);
+	size_t _Stdstr;	
+
+protected:
+	 ios_base()
+		{	
+		}
+
+	void  _Init()
+        {	
+        _Ploc = 0;
+        _Except = goodbit;
+        _Fmtfl = skipws | dec;
+        _Prec = 6;
+        _Wide = 0;
+        _Arr = 0;
+        _Calls = 0;
+        clear(goodbit);
+        _Ploc = new locale;
+        }
+
+private:
+			
+	struct _Iosarray
+		{	
+	public:
+		 _Iosarray(int _Idx, _Iosarray *_Link)
+			: _Next(_Link), _Index(_Idx), _Lo(0), _Vp(0)
+			{	
+			}
+
+		_Iosarray *_Next;	
+		int _Index;	
+		long _Lo;	
+		void *_Vp;	
+		};
+
+			
+	struct _Fnarray
+		{	
+		 _Fnarray(int _Idx, event_callback _Pnew, _Fnarray *_Link)
+			: _Next(_Link), _Index(_Idx), _Pfn(_Pnew)
+			{	
+			}
+
+		_Fnarray *_Next;	
+		int _Index;	
+		event_callback _Pfn;	
+		};
+
+	void  _Callfns(event _Ev)
+        {	
+        for (_Fnarray *_Ptr = _Calls; _Ptr != 0; _Ptr = _Ptr->_Next)
+            (*_Ptr->_Pfn)(_Ev, *this, _Ptr->_Index);
+        }
+
+	_Iosarray&  _Findarr(int _Idx)
+        {	
+        _Iosarray *_Ptr, *_Q;
+
+        for (_Ptr = _Arr, _Q = 0; _Ptr != 0; _Ptr = _Ptr->_Next)
+            if (_Ptr->_Index == _Idx)
+                return (*_Ptr);	
+            else if (_Q == 0 && _Ptr->_Lo == 0 && _Ptr->_Vp == 0)
+                _Q = _Ptr;	
+
+        if (_Q != 0)
+            {	
+            _Q->_Index = _Idx;
+            return (*_Q);
+            }
+
+        _Arr = new _Iosarray(_Idx, _Arr);	
+        return (*_Arr);
+        }
+
+	void __cdecl _Tidy()
+        {	
+        _Callfns(erase_event);
+        _Iosarray *_Q1, *_Q2;
+
+        for (_Q1 = _Arr; _Q1 != 0; _Q1 = _Q2)
+            _Q2 = _Q1->_Next, delete (_Q1);	
+        _Arr = 0;
+
+        _Fnarray *_Q3, *_Q4;
+        for (_Q3 = _Calls; _Q3 != 0; _Q3 = _Q4)
+            _Q4 = _Q3->_Next, delete (_Q3);	
+        _Calls = 0;
+        }
+
+    static  void __cdecl _Ios_base_dtor(ios_base *);
+
+	iostate _Mystate;	
+	iostate _Except;	
+	fmtflags _Fmtfl;	
+	streamsize _Prec;	
+	streamsize _Wide;	
+	_Iosarray *_Arr;	
+	_Fnarray *_Calls;	
+	locale *_Ploc;	
+
+
+
+
+
+	 static int _Index;	
+	 static bool _Sync;	
+
+    static  int& __cdecl _Index_func();
+    static  bool& __cdecl _Sync_func();
+	};
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+template<class _Elem,
+	class _Traits>
+	class basic_streambuf
+	{	
+
+	basic_streambuf(const basic_streambuf<_Elem, _Traits>&);	
+	basic_streambuf<_Elem, _Traits>&
+		operator=(const basic_streambuf<_Elem, _Traits>&);	
+
+
+protected:
+	basic_streambuf()
+		: _Plocale(new(locale))
+		{	
+		_Init();
+		}
+
+	basic_streambuf(_Uninitialized)
+		{	
+		}
+
+public:
+	typedef basic_streambuf<_Elem, _Traits> _Myt;
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+
+	virtual  ~basic_streambuf()
+		{	
+		delete (_Plocale);
+		}
+
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+
+	pos_type pubseekoff(off_type _Off, ios_base::seekdir _Way,
+		ios_base::openmode _Mode = ios_base::in | ios_base::out)
+		{	
+		return (seekoff(_Off, _Way, _Mode));
+		}
+
+	pos_type pubseekoff(off_type _Off, ios_base::seek_dir _Way,
+		ios_base::open_mode _Mode)
+		{	
+		return (pubseekoff(_Off, (ios_base::seekdir)_Way,
+			(ios_base::openmode)_Mode));
+		}
+
+	pos_type pubseekpos(pos_type _Pos,
+		ios_base::openmode _Mode = ios_base::in | ios_base::out)
+		{	
+		return (seekpos(_Pos, _Mode));
+		}
+
+	pos_type pubseekpos(pos_type _Pos, ios_base::open_mode _Mode)
+		{	
+		return (seekpos(_Pos, (ios_base::openmode)_Mode));
+		}
+
+	_Myt *pubsetbuf(_Elem *_Buffer, streamsize _Count)
+		{	
+		return (setbuf(_Buffer, _Count));
+		}
+
+	locale pubimbue(const locale &_Newlocale)
+		{	
+		locale _Oldlocale = *_Plocale;
+		imbue(_Newlocale);
+		*_Plocale = _Newlocale;
+		return (_Oldlocale);
+		}
+
+	locale getloc() const
+		{	
+		return (*_Plocale);
+		}
+
+	streamsize in_avail()
+		{	
+		streamsize _Res = _Gnavail();
+		return (0 < _Res ? _Res : showmanyc());
+		}
+
+	int pubsync()
+		{	
+		return (sync());
+		}
+
+	int_type sbumpc()
+		{	
+		return (0 < _Gnavail()
+			? _Traits::to_int_type(*_Gninc()) : uflow());
+		}
+
+	int_type sgetc()
+		{	
+		return (0 < _Gnavail()
+			? _Traits::to_int_type(*gptr()) : underflow());
+		}
+
+	streamsize _Sgetn_s(_Elem *_Ptr, size_t _Ptr_size, streamsize _Count)
+		{	
+		return _Xsgetn_s(_Ptr, _Ptr_size, _Count);
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	streamsize sgetn(_Elem *_Ptr, streamsize _Count)
+		{	
+#pragma warning(push)
+#pragma warning(disable:4996)
+		return xsgetn(_Ptr, _Count);
+#pragma warning(pop)
+		}
+
+	int_type snextc()
+		{	
+		return (1 < _Gnavail()
+			? _Traits::to_int_type(*_Gnpreinc())
+			: _Traits::eq_int_type(_Traits::eof(), sbumpc())
+				? _Traits::eof() : sgetc());
+		}
+
+	int_type sputbackc(_Elem _Ch)
+		{	
+		return (gptr() != 0 && eback() < gptr()
+			&& _Traits::eq(_Ch, gptr()[-1])
+			? _Traits::to_int_type(*_Gndec())
+			: pbackfail(_Traits::to_int_type(_Ch)));
+		}
+
+	void stossc()
+		{	
+		if (0 < _Gnavail())
+			_Gninc();
+		else
+			uflow();
+		}
+
+	int_type sungetc()
+		{	
+		return (gptr() != 0 && eback() < gptr()
+			? _Traits::to_int_type(*_Gndec()) : pbackfail());
+		}
+
+	int_type sputc(_Elem _Ch)
+		{	
+		return (0 < _Pnavail()
+			? _Traits::to_int_type(*_Pninc() = _Ch)
+			: overflow(_Traits::to_int_type(_Ch)));
+		}
+
+	streamsize sputn(const _Elem *_Ptr, streamsize _Count)
+		{	
+		return (xsputn(_Ptr, _Count));
+		}
+
+	void _Lock()
+		{	
+		_Mylock._Lock();
+		}
+
+	void _Unlock()
+		{	
+		_Mylock._Unlock();
+		}
+
+
+protected:
+	_Elem *eback() const
+		{	
+		return (*_IGfirst);
+		}
+
+	_Elem *gptr() const
+		{	
+		return (*_IGnext);
+		}
+
+	_Elem *pbase() const
+		{	
+		return (*_IPfirst);
+		}
+
+	_Elem *pptr() const
+		{	
+		return (*_IPnext);
+		}
+
+	_Elem *egptr() const
+		{	
+		return (*_IGnext + *_IGcount);
+		}
+
+	void gbump(int _Off)
+		{	
+		*_IGcount -= _Off;
+		*_IGnext += _Off;
+		}
+
+	void setg(_Elem *_First, _Elem *_Next, _Elem *_Last)
+		{	
+		*_IGfirst = _First;
+		*_IGnext = _Next;
+		*_IGcount = (int)(_Last - _Next);
+		}
+
+	_Elem *epptr() const
+		{	
+		return (*_IPnext + *_IPcount);
+		}
+
+	_Elem *_Gndec()
+		{	
+		++*_IGcount;
+		return (--*_IGnext);
+		}
+
+	_Elem *_Gninc()
+		{	
+		--*_IGcount;
+		return ((*_IGnext)++);
+		}
+
+	_Elem *_Gnpreinc()
+		{	
+		--*_IGcount;
+		return (++(*_IGnext));
+		}
+
+	streamsize _Gnavail() const
+		{	
+		return (*_IGnext != 0 ? *_IGcount : 0);
+		}
+
+	void pbump(int _Off)
+		{	
+		*_IPcount -= _Off;
+		*_IPnext += _Off;
+		}
+
+	void setp(_Elem *_First, _Elem *_Last)
+		{	
+		*_IPfirst = _First;
+		*_IPnext = _First;
+		*_IPcount = (int)(_Last - _First);
+		}
+
+	void setp(_Elem *_First, _Elem *_Next, _Elem *_Last)
+		{	
+		*_IPfirst = _First;
+		*_IPnext = _Next;
+		*_IPcount = (int)(_Last - _Next);
+		}
+
+	_Elem *_Pninc()
+		{	
+		--*_IPcount;
+		return ((*_IPnext)++);
+		}
+
+	streamsize _Pnavail() const
+		{	
+		return (*_IPnext != 0 ? *_IPcount : 0);
+		}
+
+	void _Init()
+		{	
+		_IGfirst = &_Gfirst, _IPfirst = &_Pfirst;
+		_IGnext = &_Gnext, _IPnext = &_Pnext;
+		_IGcount = &_Gcount, _IPcount = &_Pcount;
+		setp(0, 0), setg(0, 0, 0);
+		}
+
+	void _Init(_Elem **_Gf, _Elem **_Gn, int *_Gc,
+		_Elem **_Pf, _Elem **_Pn, int *_Pc)
+		{	
+		_IGfirst = _Gf, _IPfirst = _Pf;
+		_IGnext = _Gn, _IPnext = _Pn;
+		_IGcount = _Gc, _IPcount = _Pc;
+		}
+
+	virtual int_type  overflow(int_type = _Traits::eof())
+		{	
+		return (_Traits::eof());
+		}
+
+	virtual int_type  pbackfail(int_type = _Traits::eof())
+		{	
+		return (_Traits::eof());
+		}
+
+	virtual streamsize  showmanyc()
+		{	
+		return (0);
+		}
+
+	virtual int_type  underflow()
+		{	
+		return (_Traits::eof());
+		}
+
+	virtual int_type  uflow()
+		{	
+		return (_Traits::eq_int_type(_Traits::eof(), underflow())
+			? _Traits::eof() : _Traits::to_int_type(*_Gninc()));
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	virtual streamsize  xsgetn(_Elem * _Ptr,
+		streamsize _Count)
+		{	
+		
+		return _Xsgetn_s(_Ptr, (size_t)-1, _Count);
+		}
+
+	virtual streamsize  _Xsgetn_s(_Elem * _Ptr,
+		size_t _Ptr_size, streamsize _Count)
+		{	
+		int_type _Meta;
+		streamsize _Stream_size, _Size, _Copied;
+
+		for (_Copied = 0; 0 < _Count; )
+			if (0 < (_Stream_size = _Gnavail()))
+				{	
+				_Size = _Stream_size;
+				if (_Count < _Size)
+					_Size = _Count;
+				_Traits_helper::copy_s<_Traits>(_Ptr, _Ptr_size, gptr(), _Size);
+				_Ptr += _Size;
+				_Copied += _Size;
+				_Count -= _Size;
+				gbump((int)_Size);
+				}
+			else if (_Traits::eq_int_type(_Traits::eof(), _Meta = uflow()))
+				break;	
+			else
+				{	
+				*_Ptr++ = _Traits::to_char_type(_Meta);
+				++_Copied;
+				--_Count;
+				}
+
+		return (_Copied);
+		}
+
+	virtual streamsize  xsputn(const _Elem *_Ptr,
+		streamsize _Count)
+		{	
+		streamsize _Stream_size, _Size, _Copied;
+
+		for (_Copied = 0; 0 < _Count; )
+			if (0 < (_Stream_size = _Pnavail()))
+				{	
+				_Size = _Stream_size;
+				if (_Count < _Size)
+					_Size = _Count;
+				_Traits_helper::copy_s<_Traits>(pptr(), _Stream_size, _Ptr, _Size);
+				_Ptr += _Size;
+				_Copied += _Size;
+				_Count -= _Size;
+				pbump((int)_Size);
+				}
+			else if (_Traits::eq_int_type(_Traits::eof(),
+				overflow(_Traits::to_int_type(*_Ptr))))
+				break;	
+			else
+				{	
+				++_Ptr;
+				++_Copied;
+				--_Count;
+				}
+
+		return (_Copied);
+		}
+
+	virtual pos_type  seekoff(off_type, ios_base::seekdir,
+		ios_base::openmode = ios_base::in | ios_base::out)
+		{	
+		return (streampos(_BADOFF));
+		}
+
+	virtual pos_type  seekpos(pos_type,
+		ios_base::openmode = ios_base::in | ios_base::out)
+		{	
+		return (streampos(_BADOFF));
+		}
+
+	virtual _Myt * setbuf(_Elem *, streamsize)
+		{	
+		return (this);
+		}
+
+	virtual int  sync()
+		{	
+		return (0);
+		}
+
+	virtual void  imbue(const locale&)
+		{	
+		}
+
+private:
+	_Mutex _Mylock;	
+	_Elem *_Gfirst;	
+	_Elem *_Pfirst;	
+	_Elem **_IGfirst;	
+	_Elem **_IPfirst;	
+	_Elem *_Gnext;	
+	_Elem *_Pnext;	
+	_Elem **_IGnext;	
+	_Elem **_IPnext;	
+	int _Gcount;	
+	int _Pcount;	
+	int *_IGcount;	
+	int *_IPcount;	
+	locale *_Plocale;	
+	};
+
+ 
+
+
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+		
+
+
+extern "C" {
+
+extern  long __cdecl _Stolx(const char *,                     char **,
+	int, int *);
+extern  unsigned long __cdecl _Stoulx(const char *, 
+	                    char **, int, int *);
+extern  float __cdecl _Stofx(const char *,                     char **,
+	long, int *);
+extern  double __cdecl _Stodx(const char *,                     char **,
+	long, int *);
+extern  long double __cdecl _Stoldx(const char *, 
+	                    char **, long, int *);
+
+}
+
+
+
+
+  
+   
+   
+  
+
+namespace std {
+
+ 
+
+		
+template<class _Elem>
+	class numpunct
+		: public locale::facet
+	{	
+public:
+	typedef basic_string<_Elem, char_traits<_Elem>, allocator<_Elem> >
+		string_type;
+	typedef _Elem char_type;
+
+	 static locale::id id;	
+
+	_Elem  decimal_point() const
+		{	
+		return (do_decimal_point());
+		}
+
+	_Elem  thousands_sep() const
+		{	
+		return (do_thousands_sep());
+		}
+
+	string  grouping() const
+		{	
+		return (do_grouping());
+		}
+
+	string_type  falsename() const
+		{	
+		return (do_falsename());
+		}
+
+	string_type  truename() const
+		{	
+		return (do_truename());
+		}
+
+	explicit  numpunct(size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+			if (_Kseparator == 0)
+				_Kseparator =	
+					_Maklocchr(',', (_Elem *)0, _Lobj._Getcvt());
+		}
+		}
+
+	 numpunct(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new numpunct<_Elem>;
+		return (4);
+		}
+
+protected:
+	virtual  ~numpunct()
+		{	
+		_Tidy();
+		}
+
+protected:
+	 numpunct(const char *_Locname, size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		{ _Locinfo _Lobj(_Locname);
+			_Init(_Lobj);
+		}
+		}
+
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		const lconv *_Ptr = _Lobj._Getlconv();
+
+		_Grouping = 0;
+		_Falsename = 0;
+		_Truename = 0;
+
+		try {
+		_Grouping = _Maklocstr(_Ptr->grouping, (char *)0, _Lobj._Getcvt());
+		_Falsename = _Maklocstr(_Lobj._Getfalse(), (_Elem *)0, _Lobj._Getcvt());
+		_Truename = _Maklocstr(_Lobj._Gettrue(), (_Elem *)0, _Lobj._Getcvt());
+		} catch (...) {
+		_Tidy();
+		throw;
+		}
+
+		_Dp = _Maklocchr(_Ptr->decimal_point[0], (_Elem *)0, _Lobj._Getcvt());
+		_Kseparator =
+			_Maklocchr(_Ptr->thousands_sep[0], (_Elem *)0, _Lobj._Getcvt());
+		}
+
+	virtual _Elem  do_decimal_point() const
+		{	
+		return (_Dp);
+		}
+
+	virtual _Elem  do_thousands_sep() const
+		{	
+		return (_Kseparator);
+		}
+
+	virtual string  do_grouping() const
+		{	
+		return (string(_Grouping));
+		}
+
+	virtual string_type  do_falsename() const
+		{	
+		return (string_type(_Falsename));
+		}
+
+	virtual string_type  do_truename() const
+		{	
+		return (string_type(_Truename));
+		}
+
+private:
+	void  _Tidy()
+		{	
+		delete[] ((void *)_Grouping);
+		delete[] ((void *)_Falsename);
+		delete[] ((void *)_Truename);
+		}
+
+	const char *_Grouping;	
+	_Elem _Dp;	
+	_Elem _Kseparator;	
+	const _Elem *_Falsename;	
+	const _Elem *_Truename;	
+	};
+
+typedef numpunct<char> _Npc;
+typedef numpunct<wchar_t> _Npwc;
+
+		
+template<class _Elem>
+	class numpunct_byname
+		: public numpunct<_Elem>
+	{	
+public:
+	explicit  numpunct_byname(const char *_Locname, size_t _Refs = 0)
+		: numpunct<_Elem>(_Locname, _Refs)
+		{	
+		}
+
+protected:
+	virtual  ~numpunct_byname()
+		{	
+		}
+	};
+
+		
+template<class _Elem>
+	 locale::id numpunct<_Elem>::id;
+
+		
+template<class _Elem,
+	class _InIt = istreambuf_iterator<_Elem, char_traits<_Elem> > >
+	class num_get
+		: public locale::facet
+	{	
+public:
+	typedef numpunct<_Elem> _Mypunct;
+	typedef basic_string<_Elem, char_traits<_Elem>, allocator<_Elem> >
+		_Mystr;
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new num_get<_Elem, _InIt>;
+		return (4);
+		}
+
+	 static locale::id id;	
+
+protected:
+	virtual  ~num_get()
+		{	
+		}
+
+protected:
+	void _Init(const _Locinfo& _Lobj)
+		{	
+		_Cvt = _Lobj._Getcvt();
+		}
+
+	_Locinfo::_Cvtvec _Cvt;		
+
+public:
+	explicit  num_get(size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 num_get(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	typedef _Elem char_type;
+	typedef _InIt iter_type;
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase,	ios_base::iostate& _State,
+			_Bool& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase,	ios_base::iostate& _State,
+			unsigned short& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase,	ios_base::iostate& _State,
+			unsigned int& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			long& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			unsigned long& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+ 
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			__int64& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			unsigned __int64& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+ 
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			float& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			double& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			long double& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+	_InIt  get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			void *& _Val) const
+		{	
+		return (do_get(_First, _Last, _Iosbase, _State, _Val));
+		}
+
+protected:
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			_Bool& _Val) const
+		{	
+		;
+		int _Ans = -1;	
+
+		if (_Iosbase.flags() & ios_base::boolalpha)
+			{	
+			typedef typename _Mystr::size_type _Mystrsize;
+			const _Mypunct& _Punct_fac = use_facet<_Mypunct >(_Iosbase.getloc());
+			_Mystr _Str((_Mystrsize)1, (char_type)0);
+			_Str += _Punct_fac.falsename();
+			_Str += (char_type)0;
+			_Str += _Punct_fac.truename();	
+			_Ans = _Getloctxt(_First, _Last, (size_t)2, _Str.c_str());
+			}
+		else
+			{	
+			char _Ac[32], *_Ep;
+			int _Errno = 0;
+			const unsigned long _Ulo = ::_Stoulx(_Ac, &_Ep,
+				_Getifld(_Ac, _First, _Last, _Iosbase.flags(),
+					_Iosbase.getloc()), &_Errno);
+			if (_Ep != _Ac && _Errno == 0 && _Ulo <= 1)
+				_Ans = _Ulo;
+			}
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ans < 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans != 0;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			unsigned short& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+		int _Base = _Getifld(_Ac, _First, _Last, _Iosbase.flags(),
+			_Iosbase.getloc());	
+		char *_Ptr = _Ac[0] == '-' ? _Ac + 1 : _Ac;	
+		const unsigned long _Ans =
+			::_Stoulx(_Ptr, &_Ep, _Base, &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ptr || _Errno != 0 || 0xffff < _Ans)
+			_State |= ios_base::failbit;
+		else
+			_Val = (unsigned short)(_Ac[0] == '-'
+				? 0 -_Ans : _Ans);	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			unsigned int& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+		int _Base = _Getifld(_Ac, _First, _Last, _Iosbase.flags(),
+			_Iosbase.getloc());	
+		char *_Ptr = _Ac[0] == '-' ? _Ac + 1 : _Ac;	
+		const unsigned long _Ans =
+			::_Stoulx(_Ptr, &_Ep, _Base, &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ptr || _Errno != 0 || 0xffffffff < _Ans)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ac[0] == '-' ? 0 -_Ans : _Ans;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			long& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+		const long _Ans = ::_Stolx(_Ac, &_Ep,
+			_Getifld(_Ac, _First, _Last, _Iosbase.flags(),
+				_Iosbase.getloc()), &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			unsigned long& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+		const unsigned long _Ans = ::_Stoulx(_Ac, &_Ep,
+			_Getifld(_Ac, _First, _Last, _Iosbase.flags(),
+				_Iosbase.getloc()), &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+
+ 
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			__int64& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+		const __int64 _Ans = ::_strtoi64(_Ac, &_Ep, _Getifld(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()));	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			unsigned __int64& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+		const unsigned __int64 _Ans = ::_strtoui64(_Ac, &_Ep, _Getifld(_Ac, _First, _Last, _Iosbase.flags(), _Iosbase.getloc()));	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+ 
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			float& _Val) const
+		{	
+		;
+		char _Ac[8 + 36 + 16], *_Ep;
+		int _Errno = 0;
+		const float _Ans = ::_Stofx(_Ac, &_Ep,
+			_Getffld(_Ac, _First, _Last,
+				_Iosbase.getloc()), &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			double& _Val) const
+		{	
+		;
+		char _Ac[8 + 36 + 16], *_Ep;
+		int _Errno = 0;
+		const double _Ans = ::_Stodx(_Ac, &_Ep,
+			_Getffld(_Ac, _First, _Last,
+				_Iosbase.getloc()), &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			long double& _Val) const
+		{	
+		;
+		char _Ac[8 + 36 + 16], *_Ep;
+		int _Errno = 0;
+		const long double _Ans = ::_Stoldx(_Ac, &_Ep,
+			_Getffld(_Ac, _First, _Last,
+				_Iosbase.getloc()), &_Errno);	
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = _Ans;	
+		return (_First);
+		}
+
+	virtual _InIt  do_get(_InIt _First, _InIt _Last,
+		ios_base& _Iosbase, ios_base::iostate& _State,
+			void *& _Val) const
+		{	
+		;
+		char _Ac[32], *_Ep;
+		int _Errno = 0;
+
+ 
+		int _Base = _Getifld(_Ac, _First, _Last, ios_base::hex,
+			_Iosbase.getloc());	
+		const unsigned __int64 _Ans =
+			(sizeof (void *) == sizeof (unsigned long))
+				? (unsigned __int64)::_Stoulx(_Ac, &_Ep, _Base, &_Errno)
+				: ::_strtoui64(_Ac, &_Ep, _Base);
+
+ 
+
+
+
+
+
+		if (_First == _Last)
+			_State |= ios_base::eofbit;
+		if (_Ep == _Ac || _Errno != 0)
+			_State |= ios_base::failbit;
+		else
+			_Val = (void *)(uintptr_t)_Ans;	
+		return (_First);
+		}
+
+private:
+	int __cdecl _Getifld(     char *_Ac,
+		_InIt& _First, _InIt& _Last, ios_base::fmtflags _Basefield,
+			const locale& _Loc) const
+		{	
+		const _Mypunct& _Punct_fac = use_facet<_Mypunct >(_Loc);
+		const string _Grouping = _Punct_fac.grouping();
+		const _Elem _Kseparator = _Punct_fac.thousands_sep();
+		const _Elem _E0 = _Maklocchr('0', (_Elem *)0, _Cvt);
+		char *_Ptr = _Ac;
+
+		if (_First == _Last)
+			;	
+		else if (*_First == _Maklocchr('+', (_Elem *)0, _Cvt))
+			*_Ptr++ = '+', ++_First;	
+		else if (*_First == _Maklocchr('-', (_Elem *)0, _Cvt))
+			*_Ptr++ = '-', ++_First;	
+
+		_Basefield &= ios_base::basefield;
+		int _Base = _Basefield == ios_base::oct ? 8
+			: _Basefield == ios_base::hex ? 16
+			: _Basefield == ios_base::_Fmtzero ? 0 : 10;
+
+		bool _Seendigit = false;	
+		bool _Nonzero = false;	
+
+		if (_First != _Last && *_First == _E0)
+			{	
+			_Seendigit = true, ++_First;
+			if (_First != _Last && (*_First == _Maklocchr('x', (_Elem *)0, _Cvt)
+					|| *_First == _Maklocchr('X', (_Elem *)0, _Cvt))
+				&& (_Base == 0 || _Base == 16))
+				_Base = 16, _Seendigit = false, ++_First;
+			else if (_Base == 0)
+				_Base = 8;
+			}
+
+		int _Dlen = _Base == 0 || _Base == 10 ? 10
+			: _Base == 8 ? 8 : 16 + 6;
+		string _Groups((size_t)1, (char)_Seendigit);
+		size_t _Group = 0;
+
+		for (char *const _Pe = &_Ac[32 - 1];
+			_First != _Last; ++_First)
+			if (::memchr("0123456789abcdefABCDEF",
+				*_Ptr = _Maklocbyte((_Elem)*_First, _Cvt), _Dlen) != 0)
+				{	
+				if ((_Nonzero || *_Ptr != '0') && _Ptr < _Pe)
+					++_Ptr, _Nonzero = true;
+				_Seendigit = true;
+				if (_Groups[_Group] != 127)
+					++_Groups[_Group];
+				}
+			else if (_Groups[_Group] == '\0'
+				|| _Kseparator == (_Elem)0
+				|| *_First != _Kseparator)
+				break;	
+			else
+				{	
+				_Groups.append((string::size_type)1, '\0');
+				++_Group;
+				}
+
+		if (_Group == 0)
+			;	
+		else if ('\0' < _Groups[_Group])
+			++_Group;	
+		else
+			_Seendigit = false;	
+
+		for (const char *_Pg = _Grouping.c_str(); _Seendigit && 0 < _Group; )
+			if (*_Pg == 127)
+				break;	
+			else if (0 < --_Group && *_Pg != _Groups[_Group]
+				|| 0 == _Group && *_Pg < _Groups[_Group])
+				_Seendigit = false;	
+			else if ('\0' < _Pg[1])
+				++_Pg;	
+
+		if (_Seendigit && !_Nonzero)
+			*_Ptr++ = '0';	
+		else if (!_Seendigit)
+			_Ptr = _Ac;	
+		*_Ptr = '\0';
+		return (_Base);
+		}
+
+	int __cdecl _Getffld(     char *_Ac,
+		_InIt& _First, _InIt &_Last, const locale& _Loc) const
+		{	
+		const _Mypunct& _Punct_fac = use_facet<_Mypunct >(_Loc);
+		const string _Grouping = _Punct_fac.grouping();
+		const _Elem _E0 = _Maklocchr('0', (_Elem *)0, _Cvt);
+		char *_Ptr = _Ac;
+		bool _Bad = false;
+
+		if (_First == _Last)
+			;	
+		else if (*_First == _Maklocchr('+', (_Elem *)0, _Cvt))
+			*_Ptr++ = '+', ++_First;	
+		else if (*_First == _Maklocchr('-', (_Elem *)0, _Cvt))
+			*_Ptr++ = '-', ++_First;	
+
+		bool _Seendigit = false;	
+		int _Significant = 0;	
+		int _Pten = 0;	
+
+		if (*_Grouping.c_str() == 127 || *_Grouping.c_str() <= '\0')
+			for (; _First != _Last
+				&& _E0 <= *_First && *_First <= _E0 + 9;
+					_Seendigit = true, ++_First)
+				if (36 <= _Significant)
+					++_Pten;	
+				else if (*_First == _E0 && _Significant == 0)
+					;	
+				else
+					{	
+					*_Ptr++ = (char)((*_First - _E0) + '0');
+					++_Significant;
+					}
+		else
+			{	
+			const _Elem _Kseparator = _Punct_fac.thousands_sep();
+			string _Groups((size_t)1, '\0');
+			size_t _Group = 0;
+
+			for (; _First != _Last; ++_First)
+				if (_E0 <= *_First && *_First <= _E0 + 9)
+					{	
+					_Seendigit = true;
+					if (36 <= _Significant)
+						++_Pten;	
+					else if (*_First == _E0 && _Significant == 0)
+						;	
+					else
+						{	
+						*_Ptr++ = (char)((*_First - _E0) + '0');
+						++_Significant;
+						}
+					if (_Groups[_Group] != 127)
+						++_Groups[_Group];
+					}
+				else if (_Groups[_Group] == '\0'
+					|| _Kseparator == (_Elem)0
+					|| *_First != _Kseparator)
+					break;	
+				else
+					{	
+					_Groups.append((size_t)1, '\0');
+					++_Group;
+					}
+			if (_Group == 0)
+				;	
+			else if ('\0' < _Groups[_Group])
+				++_Group;	
+			else
+				_Bad = true;	
+
+			for (const char *_Pg = _Grouping.c_str();
+				!_Bad && 0 < _Group; )
+				if (*_Pg == 127)
+					break;	
+				else if (0 < --_Group && *_Pg != _Groups[_Group]
+					|| 0 == _Group && *_Pg < _Groups[_Group])
+					_Bad = true;	
+				else if ('\0' < _Pg[1])
+					++_Pg;	
+			}
+
+		if (_Seendigit && _Significant == 0)
+			*_Ptr++ = '0';	
+
+		if (_First != _Last && *_First == _Punct_fac.decimal_point())
+			*_Ptr++ = localeconv()->decimal_point[0], ++_First;	
+
+		if (_Significant == 0)
+			{	
+			for (; _First != _Last && *_First == _E0;
+				_Seendigit = true, ++_First)
+				--_Pten;	
+			if (_Pten < 0)
+				*_Ptr++ = '0', ++_Pten;	
+			}
+
+		for (; _First != _Last
+				&& _E0 <= *_First && *_First <= _E0 + 9;
+				_Seendigit = true, ++_First)
+			if (_Significant < 36)
+				{	
+				*_Ptr++ = (char)((*_First - _E0) + '0');
+				++_Significant;
+				}
+
+		if (_Seendigit && _First != _Last
+			&& (*_First == _Maklocchr('e', (_Elem *)0, _Cvt)
+				|| *_First == _Maklocchr('E', (_Elem *)0, _Cvt)))
+			{	
+			*_Ptr++ = 'e', ++_First;
+			_Seendigit = false, _Significant = 0;
+
+			if (_First == _Last)
+				;	
+			else if (*_First == _Maklocchr('+', (_Elem *)0, _Cvt))
+				*_Ptr++ = '+', ++_First;	
+			else if (*_First == _Maklocchr('-', (_Elem *)0, _Cvt))
+				*_Ptr++ = '-', ++_First;	
+			for (; _First != _Last && *_First == _E0; )
+				_Seendigit = true, ++_First;	
+			if (_Seendigit)
+				*_Ptr++ = '0';	
+			for (; _First != _Last
+				&& _E0 <= *_First && *_First <= _E0 + 9;
+				_Seendigit = true, ++_First)
+				if (_Significant < 8)
+					{	
+					*_Ptr++ = (char)((*_First - _E0) + '0');
+					++_Significant;
+					}
+			}
+
+		if (_Bad || !_Seendigit)
+			_Ptr = _Ac;	
+		*_Ptr = '\0';
+		return (_Pten);
+		}
+	};
+
+		
+template<class _Elem,
+	class _InIt>
+	 locale::id num_get<_Elem, _InIt>::id;
+
+		
+template<class _Elem,
+	class _OutIt = ostreambuf_iterator<_Elem, char_traits<_Elem> > >
+	class num_put
+		: public locale::facet
+	{	
+public:
+	typedef numpunct<_Elem> _Mypunct;
+	typedef basic_string<_Elem, char_traits<_Elem>, allocator<_Elem> >
+		_Mystr;
+
+	static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
+		{	
+		if (_Ppf != 0 && *_Ppf == 0)
+			*_Ppf = new num_put<_Elem, _OutIt>;
+		return (4);
+		}
+
+	 static locale::id id;	
+
+protected:
+	virtual  ~num_put()
+		{	
+		}
+
+protected:
+	void  _Init(const _Locinfo& _Lobj)
+		{	
+		_Cvt = _Lobj._Getcvt();
+		}
+
+	_Locinfo::_Cvtvec _Cvt;		
+
+public:
+	explicit  num_put(size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		{ _Locinfo _Lobj;
+			_Init(_Lobj);
+		}
+		}
+
+	 num_put(const _Locinfo& _Lobj, size_t _Refs = 0)
+		: locale::facet(_Refs)
+		{	
+		_Init(_Lobj);
+		}
+
+	typedef _Elem char_type;
+	typedef _OutIt iter_type;
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, _Bool _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, long _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, unsigned long _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+ 
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, __int64 _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, unsigned __int64 _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+ 
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, double _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, long double _Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+	_OutIt  put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, const void *_Val) const
+		{	
+		return (do_put(_Dest, _Iosbase, _Fill, _Val));
+		}
+
+protected:
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, _Bool _Val) const
+		{	
+		;
+		if (!(_Iosbase.flags() & ios_base::boolalpha))
+			return (do_put(_Dest, _Iosbase, _Fill, (long)_Val));
+		else
+			{	
+			const _Mypunct& _Punct_fac = use_facet<_Mypunct >(_Iosbase.getloc());
+			_Mystr _Str;
+			if (_Val)
+				_Str.assign(_Punct_fac.truename());
+			else
+				_Str.assign(_Punct_fac.falsename());
+
+			size_t _Fillcount = _Iosbase.width() <= 0
+				|| (size_t)_Iosbase.width() <= _Str.size()
+					? 0 : (size_t)_Iosbase.width() - _Str.size();
+
+			if ((_Iosbase.flags() & ios_base::adjustfield) != ios_base::left)
+				{	
+				_Dest = _Rep(_Dest, _Fill, _Fillcount);
+				_Fillcount = 0;
+				}
+			_Dest = _Put(_Dest, _Str.c_str(), _Str.size());	
+			_Iosbase.width(0);
+			return (_Rep(_Dest, _Fill, _Fillcount));	
+			}
+		}
+
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, long _Val) const
+		{	
+		const size_t _Buf_size = 2 * 32;
+		char _Buf[_Buf_size], _Fmt[6];
+		return (_Iput(_Dest, _Iosbase, _Fill, _Buf,
+			::sprintf_s(_Buf, _Buf_size, _Ifmt(_Fmt, "ld",
+				_Iosbase.flags()), _Val)));
+		}
+
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, unsigned long _Val) const
+		{	
+		const size_t _Buf_size = 2 * 32;
+		char _Buf[_Buf_size], _Fmt[6];
+		return (_Iput(_Dest, _Iosbase, _Fill, _Buf,
+			::sprintf_s(_Buf, _Buf_size, _Ifmt(_Fmt, "lu",
+				_Iosbase.flags()), _Val)));
+		}
+
+ 
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, __int64 _Val) const
+		{	
+		const size_t _Buf_size = 2 * 32;
+		char _Buf[_Buf_size], _Fmt[8];
+		return (_Iput(_Dest, _Iosbase, _Fill, _Buf,
+			::sprintf_s(_Buf, _Buf_size, _Ifmt(_Fmt, "Ld",
+				_Iosbase.flags()), _Val)));
+		}
+
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, unsigned __int64 _Val) const
+		{	
+		const size_t _Buf_size = 2 * 32;
+		char _Buf[_Buf_size], _Fmt[8];
+		return (_Iput(_Dest, _Iosbase, _Fill, _Buf,
+			::sprintf_s(_Buf, _Buf_size, _Ifmt(_Fmt, "Lu",
+				_Iosbase.flags()), _Val)));
+		}
+ 
+
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, double _Val) const
+		{	
+		const size_t _Buf_size = 8 + 36 + 64;
+		char _Buf[_Buf_size], _Fmt[8];
+		streamsize _Precision = _Iosbase.precision() <= 0
+			&& !(_Iosbase.flags() & ios_base::fixed)
+				? 6 : _Iosbase.precision();	
+		int _Significance = 36 < _Precision
+			? 36 : (int)_Precision;	
+		_Precision -= _Significance;
+		size_t _Beforepoint = 0;	
+		size_t _Afterpoint = 0;	
+
+		if ((_Iosbase.flags() & ios_base::floatfield) == ios_base::fixed)
+			{	
+			bool _Signed = _Val < 0;
+			if (_Signed)
+				_Val = -_Val;
+
+			for (; 1e35 <= _Val && _Beforepoint < 5000; _Beforepoint += 10)
+				_Val /= 1e10;	
+
+			if (0 < _Val)
+				for (; 10 <= _Precision && _Val <= 1e-35
+					&& _Afterpoint < 5000; _Afterpoint += 10)
+					{	
+					_Val *= 1e10;
+					_Precision -= 10;
+					}
+
+			if (_Signed)
+				_Val = -_Val;
+			}
+
+		return (_Fput(_Dest, _Iosbase, _Fill, _Buf,
+			_Beforepoint, _Afterpoint, _Precision,
+				::sprintf_s(_Buf, _Buf_size, _Ffmt(_Fmt, 0, _Iosbase.flags()),
+					_Significance, _Val)));	
+		}
+
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, long double _Val) const
+		{	
+		const size_t _Buf_size = 8 + 36 + 64;
+		char _Buf[_Buf_size], _Fmt[8];
+		streamsize _Precision = _Iosbase.precision() <= 0
+			&& !(_Iosbase.flags() & ios_base::fixed)
+				? 6 : _Iosbase.precision();	
+		int _Significance = 36 < _Precision
+			? 36 : (int)_Precision;	
+		_Precision -= _Significance;
+		size_t _Beforepoint = 0;	
+		size_t _Afterpoint = 0;	
+
+		if ((_Iosbase.flags() & ios_base::floatfield) == ios_base::fixed)
+			{	
+			bool _Signed = _Val < 0;
+			if (_Signed)
+				_Val = -_Val;
+
+			for (; 1e35 <= _Val && _Beforepoint < 5000; _Beforepoint += 10)
+				_Val /= 1e10;	
+
+			if (0 < _Val)
+				for (; 10 <= _Precision && _Val <= 1e-35
+					&& _Afterpoint < 5000; _Afterpoint += 10)
+					{	
+					_Val *= 1e10;
+					_Precision -= 10;
+					}
+
+			if (_Signed)
+				_Val = -_Val;
+			}
+
+		return (_Fput(_Dest, _Iosbase, _Fill, _Buf,
+			_Beforepoint, _Afterpoint, _Precision,
+				::sprintf_s(_Buf, _Buf_size, _Ffmt(_Fmt, 'L', _Iosbase.flags()),
+					_Significance, _Val)));	
+		}
+
+	virtual _OutIt  do_put(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, const void *_Val) const
+		{	
+		const size_t _Buf_size = 2 * 32;
+		char _Buf[_Buf_size];
+		return (_Iput(_Dest, _Iosbase, _Fill, _Buf,
+			::sprintf_s(_Buf, _Buf_size, "%p", _Val)));
+		}
+
+private:
+	char *__cdecl _Ffmt(     char *_Fmt,
+		char _Spec, ios_base::fmtflags _Flags) const
+		{	
+		char *_Ptr = _Fmt;
+		*_Ptr++ = '%';
+
+		if (_Flags & ios_base::showpos)
+			*_Ptr++ = '+';
+		if (_Flags & ios_base::showpoint)
+			*_Ptr++ = '#';
+		*_Ptr++ = '.';
+		*_Ptr++ = '*';	
+		if (_Spec != '\0')
+			*_Ptr++ = _Spec;	
+
+		ios_base::fmtflags _Ffl = _Flags & ios_base::floatfield;
+		*_Ptr++ = _Ffl == ios_base::fixed ? 'f'
+			: _Ffl == ios_base::scientific ? 'e' : 'g';	
+		*_Ptr = '\0';
+		return (_Fmt);
+		}
+
+	_OutIt __cdecl _Fput(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill, const char *_Buf,
+			size_t _Beforepoint, size_t _Afterpoint,
+				size_t _Trailing, size_t _Count) const
+		{	
+		;
+		const _Mypunct& _Punct_fac = use_facet<_Mypunct >(_Iosbase.getloc());
+		const string _Grouping = _Punct_fac.grouping();
+		const _Elem _Kseparator = _Punct_fac.thousands_sep();
+		string _Groupstring;
+		const _Elem _E0 = _Maklocchr('0', (_Elem *)0, _Cvt);
+		size_t _Prefix = _Buf[0] == '+' || _Buf[0] == '-' ? 1 : 0;
+
+		char _Enders[3];
+		_Enders[0] = ::localeconv()->decimal_point[0];
+		_Enders[1] = 'e';
+		_Enders[2] = '\0';
+
+		const char *_Eptr = (const char *)::memchr(_Buf,
+			'e', _Count);	
+		const char *_Pointptr = (const char *)::memchr(_Buf,
+			_Enders[0], _Count);	
+		if (_Pointptr == 0)
+			_Trailing = 0;
+
+		if (*_Grouping.c_str() != 127 && '\0' < *_Grouping.c_str())
+			{	
+			_Groupstring.append(_Buf, _Count);	
+			if (_Eptr == 0)
+				_Groupstring.append(_Trailing, '0');
+			else
+				{	
+				if (_Pointptr == 0)
+					{	
+					_Groupstring.append(_Beforepoint, '0');
+					_Beforepoint = 0;
+					}
+				_Groupstring.insert(_Eptr - _Buf, _Trailing, '0');
+				}
+			_Trailing = 0;
+
+			if (_Pointptr == 0)
+				_Groupstring.append(_Beforepoint, '0');
+			else
+				{	
+				_Groupstring.insert(_Pointptr - _Buf + 1, _Afterpoint, '0');
+				_Groupstring.insert(_Pointptr - _Buf, _Beforepoint, '0');
+				_Afterpoint = 0;
+				}
+			_Beforepoint = 0;
+
+			const char *_Pg = _Grouping.c_str();
+			size_t _Off = ::strcspn(&_Groupstring[0], &_Enders[0]);
+			while (*_Pg != 127 && '\0' < *_Pg
+				&& (size_t)*_Pg < _Off - _Prefix)
+				{	
+				_Groupstring.insert(_Off -= *_Pg, (size_t)1, '\0');
+				if ('\0' < _Pg[1])
+					++_Pg;	
+				}
+
+			_Buf = &_Groupstring[0];
+			_Trailing = 0;
+			_Count = _Groupstring.size();
+			}
+
+		size_t _Fillcount = _Beforepoint + _Afterpoint + _Trailing + _Count;
+		_Fillcount = _Iosbase.width() <= 0
+			|| (size_t)_Iosbase.width() <= _Fillcount
+				? 0 : (size_t)_Iosbase.width() - _Fillcount;
+		ios_base::fmtflags _Adjustfield =
+			_Iosbase.flags() & ios_base::adjustfield;
+		if (_Adjustfield != ios_base::left
+			&& _Adjustfield != ios_base::internal)
+			{	
+			_Dest = _Rep(_Dest, _Fill, _Fillcount);
+			_Fillcount = 0;
+			}
+		else if (_Adjustfield == ios_base::internal)
+			{	
+			if (0 < _Prefix)
+				{	
+				_Dest = _Putc(_Dest, _Buf, 1);
+				++_Buf, --_Count;
+				}
+			_Dest = _Rep(_Dest, _Fill, _Fillcount);
+			_Fillcount = 0;
+			}
+
+		_Pointptr = (const char *)::memchr(_Buf,
+			_Enders[0], _Count);	
+		if (_Pointptr != 0)
+			{	
+			size_t _Fracoffset = _Pointptr - _Buf + 1;
+			_Dest = _Putgrouped(_Dest, _Buf, _Fracoffset - 1, _Kseparator);
+			_Dest = _Rep(_Dest, _E0, _Beforepoint);
+			_Dest = _Rep(_Dest, _Punct_fac.decimal_point(), 1);
+			_Dest = _Rep(_Dest, _E0, _Afterpoint);
+			_Buf += _Fracoffset, _Count -= _Fracoffset;
+			}
+
+		_Eptr = (const char *)::memchr(_Buf,
+			'e', _Count);	
+		if (_Eptr != 0)
+			{	
+			size_t _Expoffset = _Eptr - _Buf + 1;
+			_Dest = _Putgrouped(_Dest, _Buf, _Expoffset - 1, _Kseparator);
+			_Dest = _Rep(_Dest, _E0, _Trailing), _Trailing = 0;
+			_Dest = _Putc(_Dest, _Iosbase.flags() & ios_base::uppercase
+				? "E" : "e", 1);
+			_Buf += _Expoffset, _Count -= _Expoffset;
+			}
+
+		_Dest = _Putgrouped(_Dest, _Buf, _Count,
+			_Kseparator);	
+		_Dest = _Rep(_Dest, _E0, _Trailing);	
+		_Iosbase.width(0);
+		return (_Rep(_Dest, _Fill, _Fillcount));	
+		}
+
+	char *__cdecl _Ifmt(     char *_Fmt,
+		const char *_Spec, ios_base::fmtflags _Flags) const
+		{	
+		char *_Ptr = _Fmt;
+		*_Ptr++ = '%';
+
+		if (_Flags & ios_base::showpos)
+			*_Ptr++ = '+';
+		if (_Flags & ios_base::showbase)
+			*_Ptr++ = '#';
+		if (_Spec[0] != 'L')
+			*_Ptr++ = _Spec[0];	
+		else
+			{	
+			*_Ptr++ = 'I';
+			*_Ptr++ = '6';
+			*_Ptr++ = '4';
+			}
+
+		ios_base::fmtflags _Basefield = _Flags & ios_base::basefield;
+		*_Ptr++ = _Basefield == ios_base::oct ? 'o'
+			: _Basefield != ios_base::hex ? _Spec[1]	
+			: _Flags & ios_base::uppercase ? 'X' : 'x';
+		*_Ptr = '\0';
+		return (_Fmt);
+		}
+
+	_OutIt __cdecl _Iput(_OutIt _Dest,
+		ios_base& _Iosbase, _Elem _Fill,        char *_Buf, size_t _Count) const
+		{	
+		;
+		const _Mypunct& _Punct_fac = use_facet<_Mypunct >(_Iosbase.getloc());
+		const string _Grouping = _Punct_fac.grouping();
+		const size_t _Prefix = *_Buf == '+' || *_Buf == '-' ? 1
+			: *_Buf == '0' && (_Buf[1] == 'x' || _Buf[1] == 'X') ? 2
+			: 0;
+
+		if (*_Grouping.c_str() != 127 && '\0' < *_Grouping.c_str())
+			{	
+			const char *_Pg = _Grouping.c_str();
+			size_t _Off = _Count;
+			while (*_Pg != 127 && '\0' < *_Pg
+				&& (size_t)*_Pg < _Off - _Prefix)
+				{	
+				_Off -= *_Pg;
+				::memmove_s((&_Buf[_Off + 1]), (_Count + 1 - _Off), (&_Buf[_Off]), (_Count + 1 - _Off));
+				_Buf[_Off] = '\0', ++_Count;
+				if ('\0' < _Pg[1])
+					++_Pg;	
+				}
+			}
+
+		size_t _Fillcount = _Iosbase.width() <= 0
+			|| (size_t)_Iosbase.width() <= _Count
+				? 0 : (size_t)_Iosbase.width() - _Count;
+
+		ios_base::fmtflags _Adjustfield =
+			_Iosbase.flags() & ios_base::adjustfield;
+		if (_Adjustfield != ios_base::left
+			&& _Adjustfield != ios_base::internal)
+			{	
+			_Dest = _Rep(_Dest, _Fill, _Fillcount);
+			_Fillcount = 0;
+			}
+		else if (_Adjustfield == ios_base::internal)
+			{	
+			_Dest = _Putc(_Dest, _Buf, _Prefix);	
+			_Buf += _Prefix, _Count -= _Prefix;
+			_Dest = _Rep(_Dest, _Fill, _Fillcount), _Fillcount = 0;
+			}
+
+		_Dest = _Putgrouped(_Dest, _Buf, _Count,
+			_Punct_fac.thousands_sep());	
+		_Iosbase.width(0);
+		return (_Rep(_Dest, _Fill, _Fillcount));	
+		}
+
+	_OutIt __cdecl _Put(_OutIt _Dest,
+		const _Elem *_Ptr, size_t _Count) const
+		{	
+		for (; 0 < _Count; --_Count, ++_Dest, ++_Ptr)
+			*_Dest = *_Ptr;
+		return (_Dest);
+		}
+
+	_OutIt __cdecl _Putc(_OutIt _Dest,
+		const char *_Ptr, size_t _Count) const
+		{	
+		for (; 0 < _Count; --_Count, ++_Dest, ++_Ptr)
+			*_Dest = _Maklocchr(*_Ptr, (_Elem *)0, _Cvt);
+		return (_Dest);
+		}
+
+	_OutIt __cdecl _Putgrouped(_OutIt _Dest,
+		const char *_Ptr, size_t _Count, _Elem _Kseparator) const
+		{	
+		for (; ; ++_Ptr, --_Count)
+			{	
+			const char *_Pend =
+				(const char *)::memchr(_Ptr, '\0', _Count);
+			size_t _Groupsize = _Pend != 0 ? _Pend - _Ptr : _Count;
+
+			_Dest = _Putc(_Dest, _Ptr, _Groupsize);
+			_Ptr += _Groupsize, _Count -= _Groupsize;
+			if (_Count == 0)
+				break;
+			if (_Kseparator != (_Elem)0)
+				_Dest = _Rep(_Dest, _Kseparator, 1);
+			}
+		return (_Dest);
+		}
+
+	_OutIt __cdecl _Rep(_OutIt _Dest,
+		_Elem _Ch, size_t _Count) const
+		{	
+		for (; 0 < _Count; --_Count, ++_Dest)
+			*_Dest = _Ch;
+		return (_Dest);
+		}
+	};
+
+		
+template<class _Elem,
+	class _OutIt>
+	 locale::id num_put<_Elem, _OutIt>::id;
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+template<class _Elem,
+	class _Traits>
+	class basic_ios
+		: public ios_base
+	{	
+public:
+	typedef basic_ios<_Elem, _Traits> _Myt;
+	typedef basic_ostream<_Elem, _Traits> _Myos;
+	typedef basic_streambuf<_Elem, _Traits> _Mysb;
+	typedef ctype<_Elem> _Ctype;
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+
+	explicit  basic_ios(_Mysb *_Strbuf)
+		{	
+		init(_Strbuf);
+		}
+
+	virtual  ~basic_ios()
+		{	
+		}
+
+	void  clear(iostate _State = goodbit, bool _Reraise = false)
+		{	
+		ios_base::clear((iostate)(_Mystrbuf == 0
+			? (int)_State | (int)badbit : (int)_State), _Reraise);
+		}
+
+	void  clear(io_state _State)
+		{	
+		clear((iostate)_State);
+		}
+
+	void  setstate(iostate _State, bool _Reraise = false)
+		{	
+		if (_State != goodbit)
+			clear((iostate)((int)rdstate() | (int)_State), _Reraise);
+		}
+
+	void  setstate(io_state _State)
+		{	
+		setstate((iostate)_State);
+		}
+
+	_Myt&  copyfmt(const _Myt& _Right)
+		{	
+		_Tiestr = _Right.tie();
+		_Fillch = _Right.fill();
+		ios_base::copyfmt(_Right);
+		return (*this);
+		}
+
+	_Myos * tie() const
+		{	
+		return (_Tiestr);
+		}
+
+	_Myos * tie(_Myos *_Newtie)
+		{	
+		_Myos *_Oldtie = _Tiestr;
+		_Tiestr = _Newtie;
+		return (_Oldtie);
+		}
+
+	_Mysb * rdbuf() const
+		{	
+		return (_Mystrbuf);
+		}
+
+	_Mysb * rdbuf(_Mysb *_Strbuf)
+		{	
+		_Mysb *_Oldstrbuf = _Mystrbuf;
+		_Mystrbuf = _Strbuf;
+		clear();
+		return (_Oldstrbuf);
+		}
+
+	locale  imbue(const locale& _Loc)
+		{	
+		locale _Oldlocale = ios_base::imbue(_Loc);
+		if (rdbuf() != 0)
+			rdbuf()->pubimbue(_Loc);
+		return (_Oldlocale);
+		}
+
+	_Elem  fill() const
+		{	
+		return (_Fillch);
+		}
+
+	_Elem  fill(_Elem _Newfill)
+		{	
+		_Elem _Oldfill = _Fillch;
+		_Fillch = _Newfill;
+		return (_Oldfill);
+		}
+
+	char  narrow(_Elem _Ch, char _Dflt = '\0') const
+		{	
+		const _Ctype& _Ctype_fac = use_facet<_Ctype >(getloc());
+		return (_Ctype_fac.narrow(_Ch, _Dflt));
+		}
+
+	_Elem  widen(char _Byte) const
+		{	
+		const _Ctype& _Ctype_fac = use_facet<_Ctype >(getloc());
+		return (_Ctype_fac.widen(_Byte));
+		}
+
+protected:
+	void  init(_Mysb *_Strbuf = 0,
+		bool _Isstd = false)
+		{	
+		_Init();	
+		_Mystrbuf = _Strbuf;
+		_Tiestr = 0;
+		_Fillch = widen(' ');
+
+		if (_Mystrbuf == 0)
+			setstate(badbit);
+
+		if (_Isstd)
+			_Addstd(this);	
+		else
+			_Stdstr = 0;
+		}
+
+	 basic_ios()
+		{	
+		}
+
+private:
+	 basic_ios(const _Myt&);	
+	_Myt&  operator=(const _Myt&);	
+
+	_Mysb *_Mystrbuf;	
+	_Myos *_Tiestr;	
+	_Elem _Fillch;	
+	};
+
+ 
+
+
+
+
+
+
+
+
+
+
+		
+inline ios_base& __cdecl boolalpha(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::boolalpha);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl dec(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::dec, ios_base::basefield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl fixed(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::fixed, ios_base::floatfield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl hex(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::hex, ios_base::basefield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl internal(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::internal, ios_base::adjustfield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl left(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::left, ios_base::adjustfield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl noboolalpha(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::boolalpha);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl noshowbase(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::showbase);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl noshowpoint(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::showpoint);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl noshowpos(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::showpos);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl noskipws(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::skipws);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl nounitbuf(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::unitbuf);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl nouppercase(ios_base& _Iosbase)
+	{	
+	_Iosbase.unsetf(ios_base::uppercase);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl oct(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::oct, ios_base::basefield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl right(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::right, ios_base::adjustfield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl scientific(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::scientific, ios_base::floatfield);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl showbase(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::showbase);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl showpoint(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::showpoint);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl showpos(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::showpos);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl skipws(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::skipws);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl unitbuf(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::unitbuf);
+	return (_Iosbase);
+	}
+
+inline ios_base& __cdecl uppercase(ios_base& _Iosbase)
+	{	
+	_Iosbase.setf(ios_base::uppercase);
+	return (_Iosbase);
+	}
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+
+ 
+ 
+
+ 
+
+
+
+ 
+
+
+
+ 
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits>
+	class basic_ostream
+		: virtual public basic_ios<_Elem, _Traits>
+	{	
+public:
+	typedef basic_ostream<_Elem, _Traits> _Myt;
+	typedef basic_ios<_Elem, _Traits> _Myios;
+	typedef basic_streambuf<_Elem, _Traits> _Mysb;
+	typedef ostreambuf_iterator<_Elem, _Traits> _Iter;
+	typedef num_put<_Elem, _Iter> _Nput;
+
+	explicit  basic_ostream(basic_streambuf<_Elem, _Traits> *_Strbuf,
+		bool _Isstd = false)
+		{	
+		_Myios::init(_Strbuf, _Isstd);
+		}
+
+	 basic_ostream(_Uninitialized)
+		{	
+		ios_base::_Addstd(this);
+		}
+
+	virtual  ~basic_ostream()
+		{	
+		}
+
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+
+	class _Sentry_base
+		{	
+	public:
+		 _Sentry_base(_Myt& _Ostr)
+			: _Myostr(_Ostr)
+			{	
+			if (_Myostr.rdbuf() != 0)
+				_Myostr.rdbuf()->_Lock();
+			}
+
+		 ~_Sentry_base()
+			{	
+			if (_Myostr.rdbuf() != 0)
+				_Myostr.rdbuf()->_Unlock();
+			}
+
+		_Myt& _Myostr;	
+		};
+
+	class sentry
+		: public _Sentry_base
+		{	
+	public:
+		explicit  sentry(_Myt& _Ostr)
+			: _Sentry_base(_Ostr)
+			{	
+			if (_Ostr.good() && _Ostr.tie() != 0)
+				_Ostr.tie()->flush();
+			_Ok = _Ostr.good();	
+			}
+
+		 ~sentry()
+			{	
+
+ 
+			if (!std:: uncaught_exception())
+				this->_Myostr._Osfx();
+			}
+
+ 
+
+
+
+
+		 operator bool() const
+			{	
+			return (_Ok);
+			}
+
+	private:
+		 sentry(const sentry&);	
+		sentry&  operator=(const sentry&);	
+
+		bool _Ok;	
+		};
+
+	bool  opfx()
+		{	
+		if (ios_base::good() && _Myios::tie() != 0)
+			_Myios::tie()->flush();
+		return (ios_base::good());
+		}
+
+	void  osfx()
+		{	
+		_Osfx();
+		}
+
+	void  _Osfx()
+		{	
+		try {
+		if (ios_base::flags() & ios_base::unitbuf)
+			flush();	
+		} catch (...) {
+		}
+		}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	_Myt&  operator<<(_Myt& (__cdecl *_Pfn)(_Myt&))
+		{	
+		;
+		return ((*_Pfn)(*this));
+		}
+
+	_Myt&  operator<<(_Myios& (__cdecl *_Pfn)(_Myios&))
+		{	
+		;
+		(*_Pfn)(*(_Myios *)this);
+		return (*this);
+		}
+
+	_Myt&  operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
+		{	
+		;
+		(*_Pfn)(*(ios_base *)this);
+		return (*this);
+		}
+
+	_Myt&  operator<<(_Bool _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(short _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+			ios_base::fmtflags _Bfl =
+				ios_base::flags() & ios_base::basefield;
+			long _Tmp = (_Bfl == ios_base::oct
+				|| _Bfl == ios_base::hex)
+				? (long)(unsigned short)_Val : (long)_Val;
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Tmp).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+        
+
+
+
+
+
+
+
+	_Myt&  operator<<(unsigned short _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), (unsigned long)_Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(int _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+			ios_base::fmtflags _Bfl =
+				ios_base::flags() & ios_base::basefield;
+			long _Tmp = (_Bfl == ios_base::oct
+				|| _Bfl == ios_base::hex)
+				? (long)(unsigned int)_Val : (long)_Val;
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Tmp).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(unsigned int __w64 _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), (unsigned long)_Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(long _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(unsigned long __w64 _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), (unsigned long)_Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+ 
+	_Myt&  operator<<(__int64 _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(unsigned __int64 _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+ 
+
+	_Myt&  operator<<(float _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), (double)_Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(double _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(long double _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(const void *_Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nput& _Nput_fac = use_facet<_Nput >(ios_base::getloc());
+
+			try {
+			if (_Nput_fac.put(_Iter(_Myios::rdbuf()), *this,
+				_Myios::fill(), _Val).failed())
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator<<(_Mysb *_Strbuf)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		bool _Copied = false;
+		const sentry _Ok(*this);
+
+		if (_Ok && _Strbuf != 0)
+			for (int_type _Meta = _Traits::eof(); ; _Copied = true)
+				{	
+				try {
+				_Meta = _Traits::eq_int_type(_Traits::eof(), _Meta)
+					? _Strbuf->sgetc() : _Strbuf->snextc();
+				} catch (...) {
+					_Myios::setstate(ios_base::failbit);
+					throw;
+				}
+
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					break;	
+
+				try {
+					if (_Traits::eq_int_type(_Traits::eof(),
+						_Myios::rdbuf()->sputc(
+							_Traits::to_char_type(_Meta))))
+						{	
+						_State |= ios_base::badbit;
+						break;
+						}
+				} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+				}
+
+		ios_base::width(0);
+		_Myios::setstate(_Strbuf == 0 ? ios_base::badbit
+			: !_Copied ? _State | ios_base::failbit : _State);
+		return (*this);
+		}
+
+	_Myt&  put(_Elem _Ch)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (!_Ok)
+			_State |= ios_base::badbit;
+		else
+			{	
+			try {
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Myios::rdbuf()->sputc(_Ch)))
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  write(const _Elem *_Str,
+		streamsize _Count)
+		{	
+		;
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (!_Ok)
+			_State |= ios_base::badbit;
+		else
+			{	
+			try {
+			if (_Myios::rdbuf()->sputn(_Str, _Count) != _Count)
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  flush()
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		if (!ios_base::fail() && _Myios::rdbuf()->pubsync() == -1)
+			_State |= ios_base::badbit;	
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  seekp(pos_type _Pos)
+		{	
+		if (!ios_base::fail()
+			&& (off_type)_Myios::rdbuf()->pubseekpos(_Pos,
+				ios_base::out) == _BADOFF)
+			_Myios::setstate(ios_base::failbit);
+		return (*this);
+		}
+
+	_Myt&  seekp(off_type _Off, ios_base::seekdir _Way)
+		{	
+		if (!ios_base::fail()
+			&& (off_type)_Myios::rdbuf()->pubseekoff(_Off, _Way,
+				ios_base::out) == _BADOFF)
+			_Myios::setstate(ios_base::failbit);
+		return (*this);
+		}
+
+	pos_type  tellp()
+		{	
+		if (!ios_base::fail())
+			return (_Myios::rdbuf()->pubseekoff(0,
+				ios_base::cur, ios_base::out));
+		else
+			return (pos_type(_BADOFF));
+		}
+	};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+		
+
+ template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>& __cdecl operator<<(
+		basic_ostream<_Elem, _Traits>& _Ostr, const char *_Val)
+	{	
+	ios_base::iostate _State = ios_base::goodbit;
+	streamsize _Count = (streamsize)::strlen(_Val);	
+	streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
+		? 0 : _Ostr.width() - _Count;
+	const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);
+
+	if (!_Ok)
+		_State |= ios_base::badbit;
+	else
+		{	
+		try {
+		const ctype<_Elem>& _Ctype_fac = use_facet<ctype<_Elem> >(_Ostr.getloc());
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+
+		for (; _State == ios_base::goodbit && 0 < _Count; --_Count, ++_Val)
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ctype_fac.widen(*_Val))))
+					_State |= ios_base::badbit;
+
+		if (_State == ios_base::goodbit)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+		_Ostr.width(0);
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>& __cdecl operator<<(
+		basic_ostream<_Elem, _Traits>& _Ostr, char _Ch)
+	{	
+	ios_base::iostate _State = ios_base::goodbit;
+	const typename basic_ostream<_Elem, _Traits>::sentry _Ok(_Ostr);
+
+	if (_Ok)
+		{	
+		const ctype<_Elem>& _Ctype_fac = use_facet<ctype<_Elem> >(_Ostr.getloc());
+		streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
+
+		try {
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; _State == ios_base::goodbit && 0 < _Pad;
+				--_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					_State |= ios_base::badbit;
+
+		if (_State == ios_base::goodbit
+			&& _Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ctype_fac.widen(_Ch))))
+			_State |= ios_base::badbit;
+
+		for (; _State == ios_base::goodbit && 0 < _Pad;
+			--_Pad)	
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ostr.fill())))
+				_State |= ios_base::badbit;
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.width(0);
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+template<class _Traits> inline
+	basic_ostream<char, _Traits>& __cdecl operator<<(
+		basic_ostream<char, _Traits>& _Ostr,
+		const char *_Val)
+	{	
+	typedef char _Elem;
+	typedef basic_ostream<_Elem, _Traits> _Myos;
+	ios_base::iostate _State = ios_base::goodbit;
+	streamsize _Count = (streamsize)_Traits::length(_Val);	
+	streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
+		? 0 : _Ostr.width() - _Count;
+	const typename _Myos::sentry _Ok(_Ostr);
+
+	if (!_Ok)
+		_State |= ios_base::badbit;
+	else
+		{	
+		try {
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+
+		if (_State == ios_base::goodbit
+			&& _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)
+			_State |= ios_base::badbit;
+
+		if (_State == ios_base::goodbit)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+		_Ostr.width(0);
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+template<class _Traits> inline
+	basic_ostream<char, _Traits>& __cdecl operator<<(
+		basic_ostream<char, _Traits>& _Ostr, char _Ch)
+	{	
+	typedef char _Elem;
+	typedef basic_ostream<_Elem, _Traits> _Myos;
+	ios_base::iostate _State = ios_base::goodbit;
+	const typename _Myos::sentry _Ok(_Ostr);
+
+	if (_Ok)
+		{	
+		streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
+
+		try {
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; _State == ios_base::goodbit && 0 < _Pad;
+				--_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					_State |= ios_base::badbit;
+
+		if (_State == ios_base::goodbit
+			&& _Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ch)))
+			_State |= ios_base::badbit;
+
+		for (; _State == ios_base::goodbit && 0 < _Pad;
+			--_Pad)	
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ostr.fill())))
+				_State |= ios_base::badbit;
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.width(0);
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>& __cdecl operator<<(
+		basic_ostream<_Elem, _Traits>& _Ostr, const _Elem *_Val)
+	{	
+	typedef basic_ostream<_Elem, _Traits> _Myos;
+	ios_base::iostate _State = ios_base::goodbit;
+	streamsize _Count = (streamsize)_Traits::length(_Val);	
+	streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
+		? 0 : _Ostr.width() - _Count;
+	const typename _Myos::sentry _Ok(_Ostr);
+
+	if (!_Ok)
+		_State |= ios_base::badbit;
+	else
+		{	
+		try {
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+
+		if (_State == ios_base::goodbit
+			&& _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)
+			_State |= ios_base::badbit;
+
+		if (_State == ios_base::goodbit)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+		_Ostr.width(0);
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>& __cdecl operator<<(
+		basic_ostream<_Elem, _Traits>& _Ostr, _Elem _Ch)
+	{	
+	typedef basic_ostream<_Elem, _Traits> _Myos;
+	ios_base::iostate _State = ios_base::goodbit;
+	const typename _Myos::sentry _Ok(_Ostr);
+
+	if (_Ok)
+		{	
+		streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
+
+		try {
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; _State == ios_base::goodbit && 0 < _Pad;
+				--_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					_State |= ios_base::badbit;
+
+		if (_State == ios_base::goodbit
+			&& _Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ch)))
+			_State |= ios_base::badbit;
+
+		for (; _State == ios_base::goodbit && 0 < _Pad;
+			--_Pad)	
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Ostr.rdbuf()->sputc(_Ostr.fill())))
+				_State |= ios_base::badbit;
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.width(0);
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+template<class _Traits> inline
+	basic_ostream<char, _Traits>& __cdecl operator<<(
+		basic_ostream<char, _Traits>& _Ostr, const signed char *_Val)
+	{	
+	return (_Ostr << (const char *)_Val);
+	}
+
+template<class _Traits> inline
+	basic_ostream<char, _Traits>& __cdecl operator<<(
+		basic_ostream<char, _Traits>& _Ostr, signed char _Ch)
+	{	
+	return (_Ostr << (char)_Ch);
+	}
+
+template<class _Traits> inline
+	basic_ostream<char, _Traits>& __cdecl operator<<(
+		basic_ostream<char, _Traits>& _Ostr, const unsigned char *_Val)
+	{	
+	return (_Ostr << (const char *)_Val);
+	}
+
+template<class _Traits> inline
+	basic_ostream<char, _Traits>& __cdecl operator<<(
+		basic_ostream<char, _Traits>& _Ostr, unsigned char _Ch)
+	{	
+	return (_Ostr << (char)_Ch);
+	}
+
+		
+template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>&
+		__cdecl endl(basic_ostream<_Elem, _Traits>& _Ostr)
+	{	
+	_Ostr.put(_Ostr.widen('\n'));
+	_Ostr.flush();
+	return (_Ostr);
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>&
+		__cdecl ends(basic_ostream<_Elem, _Traits>& _Ostr)
+	{	
+	_Ostr.put(_Elem());
+	return (_Ostr);
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	basic_ostream<_Elem, _Traits>&
+		__cdecl flush(basic_ostream<_Elem, _Traits>& _Ostr)
+	{	
+	_Ostr.flush();
+	return (_Ostr);
+	}
+
+ inline basic_ostream<char, char_traits<char> >&
+	__cdecl endl(basic_ostream<char, char_traits<char> >& _Ostr)
+	{	
+	_Ostr.put('\n');
+	_Ostr.flush();
+	return (_Ostr);
+	}
+
+ inline basic_ostream<wchar_t, char_traits<wchar_t> >&
+	__cdecl endl(basic_ostream<wchar_t,
+		char_traits<wchar_t> >& _Ostr)
+	{	
+	_Ostr.put('\n');
+	_Ostr.flush();
+	return (_Ostr);
+	}
+
+
+ inline basic_ostream<char, char_traits<char> >&
+	__cdecl ends(basic_ostream<char, char_traits<char> >& _Ostr)
+	{	
+	_Ostr.put('\0');
+	return (_Ostr);
+	}
+
+ inline basic_ostream<wchar_t, char_traits<wchar_t> >&
+	__cdecl ends(basic_ostream<wchar_t,
+		char_traits<wchar_t> >& _Ostr)
+	{	
+	_Ostr.put('\0');
+	return (_Ostr);
+	}
+
+
+ inline basic_ostream<char, char_traits<char> >&
+	__cdecl flush(basic_ostream<char, char_traits<char> >& _Ostr)
+	{	
+	_Ostr.flush();
+	return (_Ostr);
+	}
+
+ inline basic_ostream<wchar_t, char_traits<wchar_t> >&
+	__cdecl flush(basic_ostream<wchar_t,
+		char_traits<wchar_t> >& _Ostr)
+	{	
+	_Ostr.flush();
+	return (_Ostr);
+	}
+
+
+ 
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+template<class _Elem,
+	class _Traits>
+	class basic_istream
+		: virtual public basic_ios<_Elem, _Traits>
+	{	
+public:
+	typedef basic_istream<_Elem, _Traits> _Myt;
+	typedef basic_ios<_Elem, _Traits> _Myios;
+	typedef basic_streambuf<_Elem, _Traits> _Mysb;
+	typedef istreambuf_iterator<_Elem, _Traits> _Iter;
+	typedef ctype<_Elem> _Ctype;
+	typedef num_get<_Elem, _Iter> _Nget;
+
+
+	explicit  basic_istream(_Mysb *_Strbuf, bool _Isstd = false)
+		: _Chcount(0)
+		{	
+		_Myios::init(_Strbuf, _Isstd);
+		}
+
+	 basic_istream(_Uninitialized)
+		{	
+		ios_base::_Addstd(this);
+		}
+
+	virtual  ~basic_istream()
+		{	
+		}
+
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+
+		
+	class _Sentry_base
+		{	
+	public:
+		 _Sentry_base(_Myt& _Istr)
+			: _Myistr(_Istr)
+			{	
+			if (_Myistr.rdbuf() != 0)
+				_Myistr.rdbuf()->_Lock();
+			}
+
+		 ~_Sentry_base()
+			{	
+			if (_Myistr.rdbuf() != 0)
+				_Myistr.rdbuf()->_Unlock();
+			}
+
+		_Myt& _Myistr;	
+		};
+
+	class sentry
+		: public _Sentry_base
+		{	
+	public:
+		explicit  sentry(_Myt& _Istr, bool _Noskip = false)
+			: _Sentry_base(_Istr)
+			{	
+			_Ok = this->_Myistr._Ipfx(_Noskip);
+			}
+
+		 operator bool() const
+			{	
+			return (_Ok);
+			}
+
+	private:
+		 sentry(const sentry&);	
+		sentry&  operator=(const sentry&);	
+
+		bool _Ok;	
+		};
+
+	bool  _Ipfx(bool _Noskip = false)
+		{	
+		if (ios_base::good())
+			{	
+			if (_Myios::tie() != 0)
+				_Myios::tie()->flush();
+
+			if (!_Noskip && ios_base::flags() & ios_base::skipws)
+				{	
+				const _Ctype& _Ctype_fac = use_facet<_Ctype >(ios_base::getloc());
+
+				try {
+				int_type _Meta = _Myios::rdbuf()->sgetc();
+
+				for (; ; _Meta = _Myios::rdbuf()->snextc())
+					if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+						{	
+						_Myios::setstate(ios_base::eofbit);
+						break;
+						}
+					else if (!_Ctype_fac.is(_Ctype::space,
+						_Traits::to_char_type(_Meta)))
+						break;	
+				} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+				}
+
+			if (ios_base::good())
+				return (true);
+			}
+		_Myios::setstate(ios_base::failbit);
+		return (false);
+		}
+
+	bool  ipfx(bool _Noskip = false)
+		{	
+		return _Ipfx(_Noskip);
+		}
+
+	void  isfx()
+		{	
+		}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	_Myt&  operator>>(_Myt& (__cdecl *_Pfn)(_Myt&))
+		{	
+		;
+		return ((*_Pfn)(*this));
+		}
+
+	_Myt&  operator>>(_Myios& (__cdecl *_Pfn)(_Myios&))
+		{	
+		;
+		(*_Pfn)(*(_Myios *)this);
+		return (*this);
+		}
+
+	_Myt&  operator>>(ios_base& (__cdecl *_Pfn)(ios_base&))
+		{	
+		;
+		(*_Pfn)(*(ios_base *)this);
+		return (*this);
+		}
+
+	_Myt&  operator>>(_Bool& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(short& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			long _Tmp = 0;
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Tmp);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+
+			if (_State & ios_base::failbit
+				|| _Tmp < (-32768) || 32767 < _Tmp)
+				_State |= ios_base::failbit;
+			else
+				_Val = (short)_Tmp;
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+        
+
+
+
+
+
+
+
+	_Myt&  operator>>(unsigned short& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(int& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			long _Tmp = 0;
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Tmp);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+
+			if (_State & ios_base::failbit
+				|| _Tmp < (-2147483647 - 1) || 2147483647 < _Tmp)
+				_State |= ios_base::failbit;
+			else
+				_Val = _Tmp;
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(unsigned int& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(long& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(unsigned long __w64& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, (unsigned long)_Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+ 
+	_Myt&  operator>>(__int64& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(unsigned __int64& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+ 
+
+	_Myt&  operator>>(float& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(double& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(long double& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(void *& _Val)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const sentry _Ok(*this);
+
+		if (_Ok)
+			{	
+			const _Nget& _Nget_fac = use_facet<_Nget >(ios_base::getloc());
+
+			try {
+			_Nget_fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
+				*this, _State, _Val);
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  operator>>(_Mysb *_Strbuf)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		bool _Copied = false;
+		const sentry _Ok(*this);
+
+		if (_Ok && _Strbuf != 0)
+			{	
+			try {
+			int_type _Meta = _Myios::rdbuf()->sgetc();
+
+			for (; ; _Meta = _Myios::rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else
+					{	
+					try {
+						if (_Traits::eq_int_type(_Traits::eof(),
+							_Strbuf->sputc(_Traits::to_char_type(_Meta))))
+							break;
+					} catch (...) {
+						break;
+					}
+					_Copied = true;
+					}
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(!_Copied ? _State | ios_base::failbit : _State);
+		return (*this);
+		}
+
+	int_type  get()
+		{	
+		int_type _Meta = 0;
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (!_Ok)
+			_Meta = _Traits::eof();	
+		else
+			{	
+			try {
+			_Meta = _Myios::rdbuf()->sbumpc();
+
+			if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+				_State |= ios_base::eofbit | ios_base::failbit;	
+			else
+				++_Chcount;	
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (_Meta);
+		}
+
+	_Myt&  get(_Elem *_Str, streamsize _Count)
+		{	
+		return (get(_Str, _Count, _Myios::widen('\n')));
+		}
+
+	_Myt&  get(_Elem *_Str,
+		streamsize _Count, _Elem _Delim)
+		{	
+		;
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok && 0 < _Count)
+			{	
+			try {
+			int_type _Meta = _Myios::rdbuf()->sgetc();
+
+			for (; 0 < --_Count; _Meta = _Myios::rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else if (_Traits::to_char_type(_Meta) == _Delim)
+					break;	
+				else
+					{	
+					*_Str++ = _Traits::to_char_type(_Meta);
+					++_Chcount;
+					}
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_Chcount == 0
+			? _State | ios_base::failbit : _State);
+		*_Str = _Elem();	
+		return (*this);
+		}
+
+	_Myt&  get(_Elem& _Ch)
+		{	
+		int_type _Meta = get();
+		if (!_Traits::eq_int_type(_Traits::eof(), _Meta))
+			_Ch = _Traits::to_char_type(_Meta);
+		return (*this);
+		}
+
+	_Myt&  get(_Mysb& _Strbuf)
+		{	
+		return (get(_Strbuf, _Myios::widen('\n')));
+		}
+
+	_Myt&  get(_Mysb& _Strbuf, _Elem _Delim)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok)
+			{	
+			try {
+			int_type _Meta = _Myios::rdbuf()->sgetc();
+
+			for (; ; _Meta = _Myios::rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else
+					{	
+					try {
+						_Elem _Ch = _Traits::to_char_type(_Meta);
+						if (_Ch == _Delim
+							|| _Traits::eq_int_type(_Traits::eof(),
+								_Strbuf.sputc(_Ch)))
+							break;
+					} catch (...) {
+						break;
+					}
+					++_Chcount;
+					}
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		if (_Chcount == 0)
+			_State |= ios_base::failbit;
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  getline(_Elem *_Str, streamsize _Count)
+		{	
+		return (getline(_Str, _Count, _Myios::widen('\n')));
+		}
+
+	_Myt&  getline(_Elem *_Str,
+		streamsize _Count, _Elem _Delim)
+		{	
+		;
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok && 0 < _Count)
+			{	
+			int_type _Metadelim = _Traits::to_int_type(_Delim);
+
+			try {
+			int_type _Meta = _Myios::rdbuf()->sgetc();
+
+			for (; ; _Meta = _Myios::rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else if (_Meta == _Metadelim)
+					{	
+					++_Chcount;
+					_Myios::rdbuf()->sbumpc();
+					break;
+					}
+				else if (--_Count <= 0)
+					{	
+					_State |= ios_base::failbit;
+					break;
+					}
+				else
+					{	
+					++_Chcount;
+					*_Str++ = _Traits::to_char_type(_Meta);
+					}
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		*_Str = _Elem();	
+		_Myios::setstate(_Chcount == 0 ? _State | ios_base::failbit : _State);
+		return (*this);
+		}
+
+	_Myt&  ignore(streamsize _Count = 1,
+		int_type _Metadelim = _Traits::eof())
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok && 0 < _Count)
+			{	
+			try {
+			for (; ; )
+				{	
+				int_type _Meta;
+				if (_Count != 2147483647 && --_Count < 0)
+					break;	
+				else if (_Traits::eq_int_type(_Traits::eof(),
+					_Meta = _Myios::rdbuf()->sbumpc()))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else
+					{	
+					++_Chcount;
+					if (_Meta == _Metadelim)
+						break;	
+					}
+				}
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  _Read_s(_Elem *_Str, size_t _Str_size, streamsize _Count)
+		{	
+		;
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok)
+			{	
+			try {
+			const streamsize _Num = _Myios::rdbuf()->_Sgetn_s(_Str, _Str_size, _Count);
+			_Chcount += _Num;
+			if (_Num != _Count)
+				_State |= ios_base::eofbit | ios_base::failbit;	
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  read(_Elem *_Str, streamsize _Count)
+		{
+		return _Read_s(_Str, (size_t)-1, _Count);
+		}
+
+	streamsize  _Readsome_s(_Elem *_Str, size_t _Str_size, streamsize _Count)
+		{	
+		;
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+		streamsize _Num;
+
+		if (!_Ok)
+			_State |= ios_base::failbit;	
+		else if ((_Num = _Myios::rdbuf()->in_avail()) < 0)
+			_State |= ios_base::eofbit;	
+		else if (0 < _Num)
+			_Read_s(_Str, _Str_size, _Num < _Count ? _Num : _Count);	
+
+		_Myios::setstate(_State);
+		return (gcount());
+		}
+
+	__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	streamsize  readsome(_Elem *_Str, streamsize _Count)
+		{
+		return _Readsome_s(_Str, (size_t)-1, _Count);
+		}
+
+	int_type  peek()
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		int_type _Meta = 0;
+		const sentry _Ok(*this, true);
+
+		if (!_Ok)
+			_Meta = _Traits::eof();	
+		else
+			{	
+			try {
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Meta = _Myios::rdbuf()->sgetc()))
+				_State |= ios_base::eofbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (_Meta);
+		}
+
+	_Myt&  putback(_Elem _Ch)
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok)
+			{	
+			try {
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Myios::rdbuf()->sputbackc(_Ch)))
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	_Myt&  unget()
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		_Chcount = 0;
+		const sentry _Ok(*this, true);
+
+		if (_Ok)
+			{	
+			try {
+			if (_Traits::eq_int_type(_Traits::eof(),
+				_Myios::rdbuf()->sungetc()))
+				_State |= ios_base::badbit;
+			} catch (...) { _Myios::setstate(ios_base::badbit, true); }
+			}
+
+		_Myios::setstate(_State);
+		return (*this);
+		}
+
+	streamsize  gcount() const
+		{	
+		return (_Chcount);
+		}
+
+	int  sync()
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		int _Ans;
+
+		if (_Myios::rdbuf() == 0)
+			_Ans = -1;	
+		else if (_Myios::rdbuf()->pubsync() == -1)
+			{	
+			_State |= ios_base::badbit;
+			_Ans = -1;
+			}
+		else
+			_Ans = 0;	
+
+		_Myios::setstate(_State);
+		return (_Ans);
+		}
+
+	_Myt&  seekg(pos_type _Pos)
+		{	
+		if (!ios_base::fail()
+			&& (off_type)_Myios::rdbuf()->pubseekpos(_Pos,
+				ios_base::in) == _BADOFF)
+			_Myios::setstate(ios_base::failbit);
+		return (*this);
+		}
+
+	_Myt&  seekg(off_type _Off, ios_base::seekdir _Way)
+		{	
+		if (!ios_base::fail()
+			&& (off_type)_Myios::rdbuf()->pubseekoff(_Off, _Way,
+				ios_base::in) == _BADOFF)
+			_Myios::setstate(ios_base::failbit);
+		return (*this);
+		}
+
+	pos_type  tellg()
+		{	
+		if (!ios_base::fail())
+			return (_Myios::rdbuf()->pubseekoff(0,
+				ios_base::cur, ios_base::in));
+		else
+			return (pos_type(_BADOFF));
+		}
+
+private:
+	streamsize _Chcount;	
+	};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits>
+	class basic_iostream
+	: public basic_istream<_Elem, _Traits>,
+		public basic_ostream<_Elem, _Traits>
+	{	
+public:
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+
+	explicit  basic_iostream(basic_streambuf<_Elem, _Traits> *_Strbuf)
+		: basic_istream<_Elem, _Traits>(_Strbuf, false),
+			basic_ostream<_Elem, _Traits>(_Strbuf)
+		{	
+		}
+
+	virtual  ~basic_iostream()
+		{	
+		}
+	};
+
+ 
+
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits> inline
+	basic_istream<_Elem, _Traits>& __cdecl operator>>(
+		basic_istream<_Elem, _Traits>& _Istr, _Elem *_Str)
+	{	
+	;
+	typedef basic_istream<_Elem, _Traits> _Myis;
+	typedef ctype<_Elem> _Ctype;
+	ios_base::iostate _State = ios_base::goodbit;
+	_Elem *_Str0 = _Str;
+	const typename _Myis::sentry _Ok(_Istr);
+
+	if (_Ok)
+		{	
+		const _Ctype& _Ctype_fac = use_facet<_Ctype >(_Istr.getloc());
+
+		try {
+		streamsize _Count = 0 < _Istr.width() ? _Istr.width() : 2147483647;
+		typename _Myis::int_type _Meta = _Istr.rdbuf()->sgetc();
+		_Elem _Ch;
+		for (; 0 < --_Count; _Meta = _Istr.rdbuf()->snextc())
+			if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+				{	
+				_State |= ios_base::eofbit;
+				break;
+				}
+			else if (_Ctype_fac.is(_Ctype::space,
+				_Ch = _Traits::to_char_type(_Meta))
+					|| _Ch == _Elem())
+				break;	
+			else
+				*_Str++ = _Traits::to_char_type(_Meta);	
+		} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+		}
+
+	*_Str = _Elem();	
+	_Istr.width(0);
+	_Istr.setstate(_Str == _Str0 ? _State | ios_base::failbit : _State);
+	return (_Istr);
+	}
+
+template<class _Elem,
+	class _Traits> inline
+	basic_istream<_Elem, _Traits>& __cdecl  operator>>(
+		basic_istream<_Elem, _Traits>& _Istr, _Elem& _Ch)
+	{	
+	typedef basic_istream<_Elem, _Traits> _Myis;
+	typename _Myis::int_type _Meta;
+	ios_base::iostate _State = ios_base::goodbit;
+	const typename _Myis::sentry _Ok(_Istr);
+
+	if (_Ok)
+		{	
+		try {
+		_Meta = _Istr.rdbuf()->sbumpc();
+		if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+			_State |= ios_base::eofbit | ios_base::failbit;	
+		else
+			_Ch = _Traits::to_char_type(_Meta);	
+		} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+		}
+
+	_Istr.setstate(_State);
+	return (_Istr);
+	}
+
+template<class _Traits> inline
+	basic_istream<char, _Traits>& __cdecl  operator>>(
+		basic_istream<char, _Traits>& _Istr, signed char *_Str)
+	{	
+	return (_Istr >> (char *)_Str);
+	}
+
+template<class _Traits> inline
+	basic_istream<char, _Traits>& __cdecl  operator>>(
+		basic_istream<char, _Traits>& _Istr, signed char& _Ch)
+	{	
+	return (_Istr >> (char&)_Ch);
+	}
+
+template<class _Traits> inline
+	basic_istream<char, _Traits>& __cdecl  operator>>(
+		basic_istream<char, _Traits>& _Istr, unsigned char *_Str)
+	{	
+	return (_Istr >> (char *)_Str);
+	}
+
+template<class _Traits> inline
+	basic_istream<char, _Traits>& __cdecl  operator>>(
+		basic_istream<char, _Traits>& _Istr, unsigned char& _Ch)
+	{	
+	return (_Istr >> (char&)_Ch);
+	}
+
+		
+template<class _Elem,
+	class _Traits> inline
+	basic_istream<_Elem, _Traits>&
+		__cdecl ws(basic_istream<_Elem, _Traits>& _Istr)
+	{	
+	typedef basic_istream<_Elem, _Traits> _Myis;
+	typedef ctype<_Elem> _Ctype;
+
+	if (!_Istr.eof())
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const typename _Myis::sentry _Ok(_Istr, true);
+
+		if (_Ok)
+			{	
+			const _Ctype& _Ctype_fac = use_facet<_Ctype >(_Istr.getloc());
+
+			try {
+			for (typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc(); ;
+				_Meta = _Istr.rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else if (!_Ctype_fac.is(_Ctype::space,
+					_Traits::to_char_type(_Meta)))
+					break;	
+			} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+			}
+
+		_Istr.setstate(_State);
+		}
+	return (_Istr);
+	}
+
+ inline basic_istream<char, char_traits<char> >&
+	__cdecl ws(basic_istream<char, char_traits<char> >& _Istr)
+	{	
+	typedef char _Elem;
+	typedef char_traits<_Elem> _Traits;
+
+	if (!_Istr.eof())
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const basic_istream<_Elem, _Traits>::sentry _Ok(_Istr, true);
+
+		if (_Ok)
+			{	
+			const ctype<_Elem>& _Ctype_fac =
+				use_facet<ctype<_Elem> >(_Istr.getloc());
+
+			try {
+			for (_Traits::int_type _Meta = _Istr.rdbuf()->sgetc(); ;
+				_Meta = _Istr.rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else if (!_Ctype_fac.is(ctype<_Elem>::space,
+					_Traits::to_char_type(_Meta)))
+					break;	
+			} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+			}
+
+		_Istr.setstate(_State);
+		}
+	return (_Istr);
+	}
+
+ inline basic_istream<wchar_t, char_traits<wchar_t> >&
+	__cdecl ws(basic_istream<wchar_t, char_traits<wchar_t> >& _Istr)
+	{	
+	typedef wchar_t _Elem;
+	typedef char_traits<_Elem> _Traits;
+
+	if (!_Istr.eof())
+		{	
+		ios_base::iostate _State = ios_base::goodbit;
+		const basic_istream<_Elem, _Traits>::sentry _Ok(_Istr, true);
+
+		if (_Ok)
+			{	
+			const ctype<_Elem>& _Ctype_fac =
+				use_facet<ctype<_Elem> >(_Istr.getloc());
+
+			try {
+			for (_Traits::int_type _Meta = _Istr.rdbuf()->sgetc(); ;
+				_Meta = _Istr.rdbuf()->snextc())
+				if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+					{	
+					_State |= ios_base::eofbit;
+					break;
+					}
+				else if (!_Ctype_fac.is(ctype<_Elem>::space,
+					_Traits::to_char_type(_Meta)))
+					break;	
+			} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+			}
+
+		_Istr.setstate(_State);
+		}
+	return (_Istr);
+	}
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+ #pragma warning(disable: 4189)
+
+
+namespace std {
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_string<_Elem, _Traits, _Alloc> __cdecl operator+(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (basic_string<_Elem, _Traits, _Alloc>(_Left) += _Right);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_string<_Elem, _Traits, _Alloc> __cdecl operator+(
+		const _Elem *_Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (basic_string<_Elem, _Traits, _Alloc>(_Left) += _Right);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_string<_Elem, _Traits, _Alloc> __cdecl operator+(
+		const _Elem _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (basic_string<_Elem, _Traits, _Alloc>(1, _Left) += _Right);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_string<_Elem, _Traits, _Alloc> __cdecl operator+(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (basic_string<_Elem, _Traits, _Alloc>(_Left) += _Right);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_string<_Elem, _Traits, _Alloc> __cdecl operator+(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem _Right)
+	{	
+	return (basic_string<_Elem, _Traits, _Alloc>(_Left) += _Right);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator==(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (_Left.compare(_Right) == 0);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator==(
+		const _Elem * _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (_Right.compare(_Left) == 0);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator==(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (_Left.compare(_Right) == 0);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator!=(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator!=(
+		const _Elem *_Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator!=(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator<(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (_Left.compare(_Right) < 0);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator<(
+		const _Elem * _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (_Right.compare(_Left) > 0);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator<(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (_Left.compare(_Right) < 0);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator>(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator>(
+		const _Elem * _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator>(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator<=(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator<=(
+		const _Elem * _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator<=(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator>=(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (!(_Left < _Right));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator>=(
+		const _Elem * _Left,
+		const basic_string<_Elem, _Traits, _Alloc>& _Right)
+	{	
+	return (!(_Left < _Right));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	bool __cdecl operator>=(
+		const basic_string<_Elem, _Traits, _Alloc>& _Left,
+		const _Elem *_Right)
+	{	
+	return (!(_Left < _Right));
+	}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_istream<_Elem, _Traits>& __cdecl operator>>(
+		basic_istream<_Elem, _Traits>& _Istr,
+		basic_string<_Elem, _Traits, _Alloc>& _Str)
+	{	
+	typedef ctype<_Elem> _Ctype;
+	typedef basic_istream<_Elem, _Traits> _Myis;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
+	typedef typename _Mystr::size_type _Mysizt;
+
+	ios_base::iostate _State = ios_base::goodbit;
+	bool _Changed = false;
+	const typename _Myis::sentry _Ok(_Istr);
+
+	if (_Ok)
+		{	
+		const _Ctype& _Ctype_fac = use_facet<_Ctype >(_Istr.getloc());
+		_Str.erase();
+
+		try {
+		_Mysizt _Size = 0 < _Istr.width()
+			&& (_Mysizt)_Istr.width() < _Str.max_size()
+				? (_Mysizt)_Istr.width() : _Str.max_size();
+		typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();
+
+		for (; 0 < _Size; --_Size, _Meta = _Istr.rdbuf()->snextc())
+			if(_Traits::eq_int_type(_Traits::eof(), _Meta))
+				{	
+				_State |= ios_base::eofbit;
+				break;
+				}
+			else if (_Ctype_fac.is(_Ctype::space,
+				_Traits::to_char_type(_Meta)))
+				break;	
+			else
+				{	
+				_Str.append(1, _Traits::to_char_type(_Meta));
+				_Changed = true;
+				}
+		} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+		}
+
+	_Istr.width(0);
+	if (!_Changed)
+		_State |= ios_base::failbit;
+	_Istr.setstate(_State);
+	return (_Istr);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_istream<_Elem, _Traits>& __cdecl getline(
+		basic_istream<_Elem, _Traits>& _Istr,
+		basic_string<_Elem, _Traits, _Alloc>& _Str,
+		const _Elem _Delim)
+	{	
+	typedef basic_istream<_Elem, _Traits> _Myis;
+	ios_base::iostate _State = ios_base::goodbit;
+	bool _Changed = false;
+	const typename _Myis::sentry _Ok(_Istr, true);
+
+	if (_Ok)
+		{	
+		try {
+		_Str.erase();
+		const typename _Traits::int_type _Metadelim =
+			_Traits::to_int_type(_Delim);
+		typename _Traits::int_type _Meta = _Istr.rdbuf()->sgetc();
+
+		for (; ; _Meta = _Istr.rdbuf()->snextc())
+			if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+				{	
+				_State |= ios_base::eofbit;
+				break;
+				}
+			else if (_Traits::eq_int_type(_Meta, _Metadelim))
+				{	
+				_Changed = true;
+				_Istr.rdbuf()->sbumpc();
+				break;
+				}
+			else if (_Str.max_size() <= _Str.size())
+				{	
+				_State |= ios_base::failbit;
+				break;
+				}
+			else
+				{	
+				_Str += _Traits::to_char_type(_Meta);
+				_Changed = true;
+				}
+		} catch (...) { (_Istr).setstate(ios_base::badbit, true); }
+		}
+
+	if (!_Changed)
+		_State |= ios_base::failbit;
+	_Istr.setstate(_State);
+	return (_Istr);
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_istream<_Elem, _Traits>& __cdecl getline(
+		basic_istream<_Elem, _Traits>& _Istr,
+		basic_string<_Elem, _Traits, _Alloc>& _Str)
+	{	
+	return (getline(_Istr, _Str, _Istr.widen('\n')));
+	}
+
+template<class _Elem,
+	class _Traits,
+	class _Alloc> inline
+	basic_ostream<_Elem, _Traits>& __cdecl operator<<(
+		basic_ostream<_Elem, _Traits>& _Ostr,
+		const basic_string<_Elem, _Traits, _Alloc>& _Str)
+	{	
+	typedef basic_ostream<_Elem, _Traits> _Myos;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
+	typedef typename _Mystr::size_type _Mysizt;
+
+	ios_base::iostate _State = ios_base::goodbit;
+	_Mysizt _Size = _Str.size();
+	_Mysizt _Pad = _Ostr.width() <= 0 || (_Mysizt)_Ostr.width() <= _Size
+			? 0 : (_Mysizt)_Ostr.width() - _Size;
+	const typename _Myos::sentry _Ok(_Ostr);
+
+	if (!_Ok)
+		_State |= ios_base::badbit;
+	else
+		{	
+	try {
+		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+
+		if (_State == ios_base::goodbit)
+			for (_Mysizt _Count = 0; _Count < _Size; ++_Count)
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Str[_Count])))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+
+		if (_State == ios_base::goodbit)
+			for (; 0 < _Pad; --_Pad)	
+				if (_Traits::eq_int_type(_Traits::eof(),
+					_Ostr.rdbuf()->sputc(_Ostr.fill())))
+					{	
+					_State |= ios_base::badbit;
+					break;
+					}
+		_Ostr.width(0);
+		} catch (...) { (_Ostr).setstate(ios_base::badbit, true); }
+		}
+
+	_Ostr.setstate(_State);
+	return (_Ostr);
+	}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+ #pragma warning(default: 4189)
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+  #pragma warning(disable:4251)
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	class basic_stringbuf
+		: public basic_streambuf<_Elem, _Traits>
+	{	
+public:
+	typedef _Alloc allocator_type;
+	typedef basic_streambuf<_Elem, _Traits> _Mysb;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
+
+	explicit  basic_stringbuf(ios_base::openmode _Mode =
+		ios_base::in | ios_base::out)
+		{	
+		_Init(0, 0, _Getstate(_Mode));
+		}
+
+	explicit  basic_stringbuf(const _Mystr& _Str,
+		ios_base::openmode _Mode = ios_base::in | ios_base::out)
+		{	
+		_Init(_Str.c_str(), _Str.size(), _Getstate(_Mode));
+		}
+
+	virtual  ~basic_stringbuf()
+		{	
+		_Tidy();
+		}
+
+	enum
+		{	
+		_Allocated = 1,	
+		_Constant = 2,	
+		_Noread = 4,	
+		_Append = 8,	
+		_Atend = 16};	
+	typedef int _Strstate;
+
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+
+	_Mystr  str() const
+		{	
+		if (!(_Mystate & _Constant) && _Mysb::pptr() != 0)
+			{	
+			_Mystr _Str(_Mysb::pbase(), (_Seekhigh < _Mysb::pptr()
+				? _Mysb::pptr() : _Seekhigh) - _Mysb::pbase());
+			return (_Str);
+			}
+		else if (!(_Mystate & _Noread) && _Mysb::gptr() != 0)
+			{	
+			_Mystr _Str(_Mysb::eback(), _Mysb::egptr() - _Mysb::eback());
+			return (_Str);
+			}
+		else
+			{	
+			_Mystr _Nul;
+			return (_Nul);
+			}
+		}
+
+	void  str(const _Mystr& _Newstr)
+		{	
+		_Tidy();
+		_Init(_Newstr.c_str(), _Newstr.size(), _Mystate);
+		}
+
+protected:
+	virtual int_type  overflow(int_type _Meta = _Traits::eof())
+		{	
+		if (_Mystate & _Append
+			&& _Mysb::pptr() != 0 && _Mysb::pptr() < _Seekhigh)
+			_Mysb::setp(_Mysb::pbase(), _Seekhigh, _Mysb::epptr());
+
+		if (_Traits::eq_int_type(_Traits::eof(), _Meta))
+			return (_Traits::not_eof(_Meta));	
+		else if (_Mysb::pptr() != 0
+			&& _Mysb::pptr() < _Mysb::epptr())
+			{	
+			*_Mysb::_Pninc() = _Traits::to_char_type(_Meta);
+			return (_Meta);
+			}
+		else if (_Mystate & _Constant)
+			return (_Traits::eof());	
+		else
+			{	
+			size_t _Oldsize = _Mysb::pptr() == 0
+				? 0 : _Mysb::epptr() - _Mysb::eback();
+			size_t _Newsize = _Oldsize;
+			size_t _Inc = _Newsize / 2 < _MINSIZE
+				? _MINSIZE : _Newsize / 2;	
+			_Elem *_Ptr = 0;
+
+			while (0 < _Inc && 2147483647 - _Inc < _Newsize)
+				_Inc /= 2;	
+			if (0 < _Inc)
+				{	
+				_Newsize += _Inc;
+				_Ptr = _Al.allocate(_Newsize);
+				}
+
+			if (0 < _Oldsize)
+				_Traits_helper::copy_s<_Traits>(_Ptr, _Newsize, _Mysb::eback(), _Oldsize);
+			if (_Mystate & _Allocated)
+				_Al.deallocate(_Mysb::eback(), _Oldsize);
+			_Mystate |= _Allocated;
+
+			if (_Oldsize == 0)
+				{	
+				_Seekhigh = _Ptr;
+				_Mysb::setp(_Ptr, _Ptr + _Newsize);
+				if (_Mystate & _Noread)
+					_Mysb::setg(_Ptr, 0, _Ptr);
+				else
+					_Mysb::setg(_Ptr, _Ptr, _Ptr + 1);
+				}
+			else
+				{	
+				_Seekhigh = _Seekhigh - _Mysb::eback() + _Ptr;
+				_Mysb::setp(_Mysb::pbase() - _Mysb::eback() + _Ptr,
+					_Mysb::pptr() - _Mysb::eback() + _Ptr, _Ptr + _Newsize);
+				if (_Mystate & _Noread)
+					_Mysb::setg(_Ptr, 0, _Ptr);
+				else
+					_Mysb::setg(_Ptr,
+						_Mysb::gptr() - _Mysb::eback() + _Ptr,
+						_Mysb::pptr() + 1);
+				}
+
+			*_Mysb::_Pninc() = _Traits::to_char_type(_Meta);
+			return (_Meta);
+			}
+		}
+
+	virtual int_type  pbackfail(int_type _Meta = _Traits::eof())
+		{	
+		if (_Mysb::gptr() == 0
+			|| _Mysb::gptr() <= _Mysb::eback()
+			|| !_Traits::eq_int_type(_Traits::eof(), _Meta)
+			&& !_Traits::eq(_Traits::to_char_type(_Meta), _Mysb::gptr()[-1])
+			&& _Mystate & _Constant)
+			return (_Traits::eof());	
+		else
+			{	
+			_Mysb::gbump(-1);
+			if (!_Traits::eq_int_type(_Traits::eof(), _Meta))
+				*_Mysb::gptr() = _Traits::to_char_type(_Meta);
+			return (_Traits::not_eof(_Meta));
+			}
+		}
+
+	virtual int_type  underflow()
+		{	
+		if (_Mysb::gptr() == 0)
+			return (_Traits::eof());	
+		else if (_Mysb::gptr() < _Mysb::egptr())
+			return (_Traits::to_int_type(*_Mysb::gptr()));	
+		else if (_Mystate & _Noread || _Mysb::pptr() == 0
+			|| _Mysb::pptr() <= _Mysb::gptr() && _Seekhigh <= _Mysb::gptr())
+			return (_Traits::eof());	
+		else
+			{	
+			if (_Seekhigh < _Mysb::pptr())
+				_Seekhigh = _Mysb::pptr();
+			_Mysb::setg(_Mysb::eback(), _Mysb::gptr(), _Seekhigh);
+			return (_Traits::to_int_type(*_Mysb::gptr()));
+			}
+		}
+
+	virtual pos_type  seekoff(off_type _Off,
+		ios_base::seekdir _Way,
+		ios_base::openmode _Which = ios_base::in | ios_base::out)
+		{	
+		if (_Mysb::pptr() != 0 && _Seekhigh < _Mysb::pptr())
+			_Seekhigh = _Mysb::pptr();	
+
+		if (_Which & ios_base::in && _Mysb::gptr() != 0)
+			{	
+			if (_Way == ios_base::end)
+				_Off += (off_type)(_Seekhigh - _Mysb::eback());
+			else if (_Way == ios_base::cur
+				&& (_Which & ios_base::out) == 0)
+				_Off += (off_type)(_Mysb::gptr() - _Mysb::eback());
+			else if (_Way != ios_base::beg)
+				_Off = _BADOFF;
+
+			if (0 <= _Off && _Off <= _Seekhigh - _Mysb::eback())
+				{	
+				_Mysb::gbump((int)(_Mysb::eback() - _Mysb::gptr() + _Off));
+				if (_Which & ios_base::out && _Mysb::pptr() != 0)
+					_Mysb::setp(_Mysb::pbase(), _Mysb::gptr(),
+						_Mysb::epptr());	
+				}
+			else
+				_Off = _BADOFF;
+			}
+		else if (_Which & ios_base::out && _Mysb::pptr() != 0)
+			{	
+			if (_Way == ios_base::end)
+				_Off += (off_type)(_Seekhigh - _Mysb::eback());
+			else if (_Way == ios_base::cur)
+				_Off += (off_type)(_Mysb::pptr() - _Mysb::eback());
+			else if (_Way != ios_base::beg)
+				_Off = _BADOFF;
+
+			if (0 <= _Off && _Off <= _Seekhigh - _Mysb::eback())
+				_Mysb::pbump((int)(_Mysb::eback()
+					- _Mysb::pptr() + _Off));	
+			else
+				_Off = _BADOFF;
+			}
+		else
+			_Off = _BADOFF;	
+		return (pos_type(_Off));
+		}
+
+	virtual pos_type  seekpos(pos_type _Ptr,
+		ios_base::openmode _Mode = ios_base::in | ios_base::out)
+		{	
+		streamoff _Off = (streamoff)_Ptr;
+		if (_Mysb::pptr() != 0 && _Seekhigh < _Mysb::pptr())
+			_Seekhigh = _Mysb::pptr();	
+
+		if (_Off == _BADOFF)
+			;
+		else if (_Mode & ios_base::in && _Mysb::gptr() != 0)
+			{	
+			if (0 <= _Off && _Off <= _Seekhigh - _Mysb::eback())
+				{	
+				_Mysb::gbump((int)(_Mysb::eback() - _Mysb::gptr() + _Off));
+				if (_Mode & ios_base::out && _Mysb::pptr() != 0)
+					_Mysb::setp(_Mysb::pbase(), _Mysb::gptr(),
+						_Mysb::epptr());	
+				}
+			else
+				_Off = _BADOFF;
+			}
+		else if (_Mode & ios_base::out && _Mysb::pptr() != 0)
+			{	
+			if (0 <= _Off && _Off <= _Seekhigh - _Mysb::eback())
+				_Mysb::pbump((int)(_Mysb::eback()
+					- _Mysb::pptr() + _Off));	
+			else
+				_Off = _BADOFF;
+			}
+		else
+			_Off = _BADOFF;
+		return (streampos(_Off));
+		}
+
+	void  _Init(const _Elem *_Ptr,
+		size_t _Count, _Strstate _State)
+		{	
+		_Seekhigh = 0;
+		_Mystate = _State;
+
+		if (_Count != 0
+			&& (_Mystate & (_Noread | _Constant)) != (_Noread | _Constant))
+			{	
+			_Elem *_Pnew = _Al.allocate(_Count);
+			_Traits_helper::copy_s<_Traits>(_Pnew, _Count, _Ptr, _Count);
+			_Seekhigh = _Pnew + _Count;
+
+			if (!(_Mystate & _Noread))
+				_Mysb::setg(_Pnew, _Pnew,
+					_Pnew + _Count);	
+			if (!(_Mystate & _Constant))
+				{	
+				_Mysb::setp(_Pnew,
+					(_Mystate & _Atend) ? _Pnew + _Count : _Pnew,
+					_Pnew + _Count);
+				if (_Mysb::gptr() == 0)
+					_Mysb::setg(_Pnew, 0, _Pnew);
+				}
+			_Mystate |= _Allocated;
+			}
+		}
+
+	void  _Tidy()
+		{	
+		if (_Mystate & _Allocated)
+			_Al.deallocate(_Mysb::eback(),
+				(_Mysb::pptr() != 0 ? _Mysb::epptr()
+					: _Mysb::egptr()) - _Mysb::eback());
+		_Mysb::setg(0, 0, 0);
+		_Mysb::setp(0, 0);
+		_Seekhigh = 0;
+		_Mystate &= ~_Allocated;
+		}
+
+private:
+	enum
+		{	
+		_MINSIZE = 32};
+
+	_Strstate  _Getstate(ios_base::openmode _Mode)
+		{	
+		_Strstate _State = (_Strstate)0;
+		if (!(_Mode & ios_base::in))
+			_State |= _Noread;
+		if (!(_Mode & ios_base::out))
+			_State |= _Constant;
+		if (_Mode & ios_base::app)
+			_State |= _Append;
+		if (_Mode & ios_base::ate)
+			_State |= _Atend;
+		return (_State);
+		}
+
+	_Elem *_Seekhigh;	
+	_Strstate _Mystate;	
+	allocator_type _Al;	
+	};
+
+ 
+
+
+
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	class basic_istringstream
+		: public basic_istream<_Elem, _Traits>
+	{	
+public:
+	typedef _Alloc allocator_type;
+	typedef basic_stringbuf<_Elem, _Traits, _Alloc> _Mysb;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
+
+	explicit  basic_istringstream(ios_base::openmode _Mode = ios_base::in)
+		: basic_istream<_Elem, _Traits>(&_Stringbuffer),
+			_Stringbuffer(_Mode | ios_base::in)
+		{	
+		}
+
+	explicit  basic_istringstream(const _Mystr& _Str,
+		ios_base::openmode _Mode = ios_base::in)
+		: basic_istream<_Elem, _Traits>(&_Stringbuffer),
+			_Stringbuffer(_Str, _Mode | ios_base::in)
+		{	
+		}
+
+	virtual  ~basic_istringstream()
+		{	
+		}
+
+	_Mysb * rdbuf() const
+		{	
+		return ((_Mysb *)&_Stringbuffer);
+		}
+
+	_Mystr  str() const
+		{	
+		return (_Stringbuffer.str());
+		}
+
+	void  str(const _Mystr& _Newstr)
+		{	
+		_Stringbuffer.str(_Newstr);
+		}
+
+private:
+	_Mysb _Stringbuffer;	
+	};
+
+ 
+
+
+
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	class basic_ostringstream
+		: public basic_ostream<_Elem, _Traits>
+	{	
+public:
+	typedef _Alloc allocator_type;
+	typedef basic_stringbuf<_Elem, _Traits, _Alloc> _Mysb;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
+
+	explicit  basic_ostringstream(ios_base::openmode _Mode = ios_base::out)
+		: basic_ostream<_Elem, _Traits>(&_Stringbuffer),
+			_Stringbuffer(_Mode | ios_base::out)
+		{	
+		}
+
+	explicit  basic_ostringstream(const _Mystr& _Str,
+		ios_base::openmode _Mode = ios_base::out)
+		: basic_ostream<_Elem, _Traits>(&_Stringbuffer),
+			_Stringbuffer(_Str, _Mode | ios_base::out)
+		{	
+		}
+
+	virtual  ~basic_ostringstream()
+		{	
+		}
+
+	_Mysb * rdbuf() const
+		{	
+		return ((_Mysb *)&_Stringbuffer);
+		}
+
+	_Mystr  str() const
+		{	
+		return (_Stringbuffer.str());
+		}
+
+	void  str(const _Mystr& _Newstr)
+		{	
+		_Stringbuffer.str(_Newstr);
+		}
+
+private:
+	_Mysb _Stringbuffer;	
+	};
+
+ 
+
+
+
+
+
+
+
+
+
+
+		
+template<class _Elem,
+	class _Traits,
+	class _Alloc>
+	class basic_stringstream
+		: public basic_iostream<_Elem, _Traits>
+	{	
+public:
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef _Alloc allocator_type;
+	typedef typename _Traits::int_type int_type;
+	typedef typename _Traits::pos_type pos_type;
+	typedef typename _Traits::off_type off_type;
+	typedef basic_string<_Elem, _Traits, _Alloc> _Mystr;
+
+	explicit  basic_stringstream(ios_base::openmode _Mode =
+		ios_base::in | ios_base::out)
+		: basic_iostream<_Elem, _Traits>(&_Stringbuffer),
+			_Stringbuffer(_Mode)
+		{	
+		}
+
+	explicit  basic_stringstream(const _Mystr& _Str,
+		ios_base::openmode _Mode = ios_base::in | ios_base::out)
+		: basic_iostream<_Elem, _Traits>(&_Stringbuffer),
+			_Stringbuffer(_Str, _Mode)
+		{	
+		}
+
+	virtual  ~basic_stringstream()
+		{	
+		}
+
+	basic_stringbuf<_Elem, _Traits, _Alloc> * rdbuf() const
+		{	
+		return ((basic_stringbuf<_Elem, _Traits, _Alloc> *)&_Stringbuffer);
+		}
+
+	_Mystr  str() const
+		{	
+		return (_Stringbuffer.str());
+		}
+
+	void  str(const _Mystr& _Newstr)
+		{	
+		_Stringbuffer.str(_Newstr);
+		}
+
+private:
+	basic_stringbuf<_Elem, _Traits, _Alloc>
+		_Stringbuffer;	
+	};
+
+ 
+
+
+
+
+
+
+
+
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+ #pragma warning(disable: 4244)
+
+
+typedef struct _C_double_complex
+	{	
+	double _Val[2];
+	} _C_double_complex;
+
+typedef struct _C_float_complex
+	{	
+	float _Val[2];
+	} _C_float_complex;
+
+typedef struct _C_ldouble_complex
+	{	
+	long double _Val[2];
+	} _C_ldouble_complex;
+
+	
+ 
+ 
+
+namespace std {
+typedef ::_C_double_complex _Dcomplex_value;
+typedef ::_C_float_complex _Fcomplex_value;
+typedef ::_C_ldouble_complex _Lcomplex_value;
+
+
+
+		
+template<class _Ty>
+	class _Ctraits
+	{	
+public:
+	static _Ty __cdecl _Cosh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_Cosh((double)_Left, (double)_Right));
+		}
+
+	static short __cdecl _Exp(_Ty *_Pleft, _Ty _Right, short _Exponent)
+		{	
+		double _Tmp = (double)*_Pleft;
+		short _Ans = ::_Exp(&_Tmp, (double)_Right, _Exponent);
+		*_Pleft = (_Ty)_Tmp;
+		return (_Ans);
+		}
+
+	static _Ty __cdecl _Infv(_Ty)
+		{	
+		return (::_Inf._Double);
+		}
+
+	static bool __cdecl _Isinf(_Ty _Left)
+		{	
+		double _Tmp = (double)_Left;
+		return (::_Dtest(&_Tmp) == 1);
+		}
+
+	static bool __cdecl _Isnan(_Ty _Left)
+		{	
+		double _Tmp = (double)_Left;
+		return (::_Dtest(&_Tmp) == 2);
+		}
+
+	static _Ty __cdecl _Nanv(_Ty)
+		{	
+		return (::_Nan._Double);
+		}
+
+	static _Ty __cdecl _Sinh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_Sinh((double)_Left, (double)_Right));
+		}
+
+	static _Ty __cdecl atan2(_Ty _Yval, _Ty _Xval)
+		{	
+		return (::atan2((double)_Yval, (double)_Xval));
+		}
+
+	static _Ty __cdecl cos(_Ty _Left)
+		{	
+		return (::cos((double)_Left));
+		}
+
+	static _Ty __cdecl exp(_Ty _Left)
+		{	
+		return (::exp((double)_Left));
+		}
+
+	static _Ty __cdecl ldexp(_Ty _Left, int _Exponent)
+		{	
+		return (::ldexp((double)_Left, _Exponent));
+		}
+
+	static _Ty __cdecl log(_Ty _Left)
+		{	
+		return (::log((double)_Left));
+		}
+
+	static _Ty __cdecl pow(_Ty _Left, _Ty _Right)
+		{	
+		return (::pow((double)_Left, (double)_Right));
+		}
+
+	static _Ty __cdecl sin(_Ty _Left)
+		{	
+		return (::sin((double)_Left));
+		}
+
+	static _Ty __cdecl sqrt(_Ty _Left)
+		{	
+		return (::sqrt((double)_Left));
+		}
+
+	static _Ty __cdecl tan(_Ty _Left)
+		{	
+		return (::tan((double)_Left));
+		}
+	};
+
+		
+template<> class  _Ctraits<long double>
+	{	
+public:
+	typedef long double _Ty;
+
+	static _Ty __cdecl _Cosh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_LCosh(_Left, _Right));
+		}
+
+	static short __cdecl _Exp(_Ty *_Pleft, _Ty _Right, short _Exponent)
+		{	
+		return (::_LExp(_Pleft, _Right, _Exponent));
+		}
+
+	static _Ty __cdecl _Infv(_Ty)
+		{	
+		return (::_LInf._Long_double);
+		}
+
+	static bool __cdecl _Isinf(_Ty _Left)
+		{	
+		return (::_LDtest(&_Left) == 1);
+		}
+
+	static bool __cdecl _Isnan(_Ty _Left)
+		{	
+		return (::_LDtest(&_Left) == 2);
+		}
+
+	static _Ty __cdecl _Nanv(_Ty)
+		{	
+		return (::_LNan._Long_double);
+		}
+
+	static _Ty __cdecl _Sinh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_LSinh(_Left, _Right));
+		}
+
+	static _Ty __cdecl atan2(_Ty _Yval, _Ty _Xval)
+		{	
+		return (::atan2l(_Yval, _Xval));
+		}
+
+	static _Ty __cdecl cos(_Ty _Left)
+		{	
+		return (::cosl(_Left));
+		}
+
+	static _Ty __cdecl exp(_Ty _Left)
+		{	
+		return (::expl(_Left));
+		}
+
+	static _Ty __cdecl ldexp(_Ty _Left, int _Exponent)
+		{	
+		return (::ldexpl(_Left, _Exponent));
+		}
+
+	static _Ty __cdecl log(_Ty _Left)
+		{	
+		return (::logl(_Left));
+		}
+
+	static _Ty __cdecl pow(_Ty _Left, _Ty _Right)
+		{	
+		return (::powl(_Left, _Right));
+		}
+
+	static _Ty __cdecl sin(_Ty _Left)
+		{	
+		return (::sinl(_Left));
+		}
+
+	static _Ty __cdecl sqrt(_Ty _Left)
+		{	
+		return (::sqrtl(_Left));
+		}
+
+	static _Ty __cdecl tan(_Ty _Left)
+		{	
+		return (::tanl(_Left));
+		}
+	};
+
+		
+template<> class  _Ctraits<double>
+	{	
+public:
+	typedef double _Ty;
+
+	static _Ty __cdecl _Cosh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_Cosh(_Left, _Right));
+		}
+
+	static short __cdecl _Exp(_Ty *_Pleft, _Ty _Right, short _Exponent)
+		{	
+		return (::_Exp(_Pleft, _Right, _Exponent));
+		}
+
+	static _Ty __cdecl _Infv(_Ty)
+		{	
+		return (::_Inf._Double);
+		}
+
+	static bool __cdecl _Isinf(_Ty _Left)
+		{	
+		return (::_Dtest(&_Left) == 1);
+		}
+
+	static bool __cdecl _Isnan(_Ty _Left)
+		{	
+		return (::_Dtest(&_Left) == 2);
+		}
+
+	static _Ty __cdecl _Nanv(_Ty)
+		{	
+		return (::_Nan._Double);
+		}
+
+	static _Ty __cdecl _Sinh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_Sinh(_Left, _Right));
+		}
+
+	static _Ty __cdecl atan2(_Ty _Yval, _Ty _Xval)
+		{	
+		return (::atan2(_Yval, _Xval));
+		}
+
+	static _Ty __cdecl cos(_Ty _Left)
+		{	
+		return (::cos(_Left));
+		}
+
+	static _Ty __cdecl exp(_Ty _Left)
+		{	
+		return (::exp(_Left));
+		}
+
+	static _Ty __cdecl ldexp(_Ty _Left, int _Exponent)
+		{	
+		return (::ldexp(_Left, _Exponent));
+		}
+
+	static _Ty __cdecl log(_Ty _Left)
+		{	
+		return (::log(_Left));
+		}
+
+	static _Ty __cdecl pow(_Ty _Left, _Ty _Right)
+		{	
+		return (::pow(_Left, _Right));
+		}
+
+	static _Ty __cdecl sin(_Ty _Left)
+		{	
+		return (::sin(_Left));
+		}
+
+	static _Ty __cdecl sqrt(_Ty _Left)
+		{	
+		return (::sqrt(_Left));
+		}
+
+	static _Ty __cdecl tan(_Ty _Left)
+		{	
+		return (::tan(_Left));
+		}
+	};
+
+		
+template<> class  _Ctraits<float>
+	{	
+public:
+	typedef float _Ty;
+
+	static _Ty __cdecl _Cosh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_FCosh(_Left, _Right));
+		}
+
+	static short __cdecl _Exp(_Ty *_Pleft, _Ty _Right, short _Exponent)
+		{	
+		return (::_FExp(_Pleft, _Right, _Exponent));
+		}
+
+	static _Ty __cdecl _Infv(_Ty)
+		{	
+		return (::_FInf._Float);
+		}
+
+	static bool __cdecl _Isinf(_Ty _Left)
+		{	
+		return (::_FDtest(&_Left) == 1);
+		}
+
+	static bool __cdecl _Isnan(_Ty _Left)
+		{	
+		return (::_FDtest(&_Left) == 2);
+		}
+
+	static _Ty __cdecl _Nanv(_Ty)
+		{	
+		return (::_FNan._Float);
+		}
+
+	static _Ty __cdecl _Sinh(_Ty _Left, _Ty _Right)
+		{	
+		return (::_FSinh(_Left, _Right));
+		}
+
+	static _Ty __cdecl atan2(_Ty _Yval, _Ty _Xval)
+		{	
+		return (::atan2f(_Yval, _Xval));
+		}
+
+	static _Ty __cdecl cos(_Ty _Left)
+		{	
+		return (::cosf(_Left));
+		}
+
+	static _Ty __cdecl exp(_Ty _Left)
+		{	
+		return (::expf(_Left));
+		}
+
+	static _Ty __cdecl ldexp(_Ty _Left, int _Exponent)
+		{	
+		return (::ldexpf(_Left, _Exponent));
+		}
+
+	static _Ty __cdecl log(_Ty _Left)
+		{	
+		return (::logf(_Left));
+		}
+
+	static _Ty __cdecl pow(_Ty _Left, _Ty _Right)
+		{	
+		return (::powf(_Left, _Right));
+		}
+
+	static _Ty __cdecl sin(_Ty _Left)
+		{	
+		return (::sinf(_Left));
+		}
+
+	static _Ty __cdecl sqrt(_Ty _Left)
+		{	
+		return (::sqrtf(_Left));
+		}
+
+	static _Ty __cdecl tan(_Ty _Left)
+		{	
+		return (::tanf(_Left));
+		}
+	};
+
+template<class _Ty>
+	class complex;
+template<> class  complex<float>;
+template<> class  complex<double>;
+template<> class  complex<long double>;
+
+		
+template<class _Ty>
+	struct _Complex_value
+	{	
+	enum {_Re = 0, _Im = 1};
+	_Ty _Val[2];
+	};
+
+		
+template<class _Ty,
+	class _Valbase>
+	class _Complex_base
+		: public _Valbase
+	{	
+public:
+	typedef _Ctraits<_Ty> _Myctraits;
+	typedef _Complex_base<_Ty, _Valbase> _Myt;
+	typedef _Ty value_type;
+
+	_Complex_base(const _Ty& _Realval, const _Ty& _Imagval)
+		{	
+		this->_Val[0] = _Realval;
+		this->_Val[1] = _Imagval;
+		}
+
+	_Ty real(const _Ty& _Right)
+		{	
+		return (this->_Val[0] = _Right);
+		}
+
+	_Ty imag(const _Ty& _Right)
+		{	
+		return (this->_Val[1] = _Right);
+		}
+
+	_Ty real() const
+		{	
+		return (this->_Val[0]);
+		}
+
+	_Ty imag() const
+		{	
+		return (this->_Val[1]);
+		}
+
+protected:
+	template<class _Other> inline
+		void _Add(const complex<_Other>& _Right)
+		{	
+		this->_Val[0] = this->_Val[0] + (_Ty)_Right.real();
+		this->_Val[1] = this->_Val[1] + (_Ty)_Right.imag();
+		}
+
+	template<class _Other> inline
+		void _Sub(const complex<_Other>& _Right)
+		{	
+		this->_Val[0] = this->_Val[0] - (_Ty)_Right.real();
+		this->_Val[1] = this->_Val[1] - (_Ty)_Right.imag();
+		}
+
+	template<class _Other> inline
+		void _Mul(const complex<_Other>& _Right)
+		{	
+		_Ty _Rightreal = (_Ty)_Right.real();
+		_Ty _Rightimag = (_Ty)_Right.imag();
+
+		_Ty _Tmp = this->_Val[0] * _Rightreal
+			- this->_Val[1] * _Rightimag;
+		this->_Val[1] = this->_Val[0] * _Rightimag
+			+ this->_Val[1] * _Rightreal;
+		this->_Val[0] = _Tmp;
+		}
+
+	template<class _Other> inline
+		void _Div(const complex<_Other>& _Right)
+		{	
+		typedef _Ctraits<_Ty> _Myctraits;
+		_Ty _Rightreal = (_Ty)_Right.real();
+		_Ty _Rightimag = (_Ty)_Right.imag();
+
+		if (_Myctraits::_Isnan(_Rightreal) || _Myctraits::_Isnan(_Rightimag))
+			{	
+			this->_Val[0] = _Myctraits::_Nanv(_Rightreal);
+			this->_Val[1] = this->_Val[0];
+			}
+		else if ((_Rightimag < 0 ? -_Rightimag : +_Rightimag)
+			< (_Rightreal < 0 ? -_Rightreal : +_Rightreal))
+			{	
+			_Ty _Wr = _Rightimag / _Rightreal;
+			_Ty _Wd = _Rightreal + _Wr * _Rightimag;
+
+			if (_Myctraits::_Isnan(_Wd) || _Wd == 0)
+				{	
+				this->_Val[0] = _Myctraits::_Nanv(_Rightreal);
+				this->_Val[1] = this->_Val[0];
+				}
+			else
+				{	
+				_Ty _Tmp = (this->_Val[0]
+					+ this->_Val[1] * _Wr) / _Wd;
+				this->_Val[1] = (this->_Val[1]
+					- this->_Val[0] * _Wr) / _Wd;
+				this->_Val[0] = _Tmp;
+				}
+			}
+		else if (_Rightimag == 0)
+			{	
+			this->_Val[0] = _Myctraits::_Nanv(_Rightreal);
+			this->_Val[1] = this->_Val[0];
+			}
+		else
+			{	
+			_Ty _Wr = _Rightreal / _Rightimag;
+			_Ty _Wd = _Rightimag + _Wr * _Rightreal;
+
+			if (_Myctraits::_Isnan(_Wd) || _Wd == 0)
+				{	
+				this->_Val[0] = _Myctraits::_Nanv(_Rightreal);
+				this->_Val[1] = this->_Val[0];
+				}
+			else
+				{	
+				_Ty _Tmp = (this->_Val[0] * _Wr + this->_Val[1]) / _Wd;
+				this->_Val[1] = (this->_Val[1] * _Wr
+					- this->_Val[0]) / _Wd;
+				this->_Val[0] = _Tmp;
+				}
+			}
+		}
+	};
+
+		
+template<> class  complex<float>
+	: public _Complex_base<float, _Fcomplex_value>
+	{	
+public:
+	typedef float _Ty;
+	typedef complex<_Ty> _Myt;
+
+	explicit complex(const complex<double>&);	
+
+	explicit complex(const complex<long double>&);	
+
+	complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0)
+		: _Complex_base<float, _Fcomplex_value>(_Realval, _Imagval)
+		{	
+		}
+
+	complex(const _Fcomplex_value& _Right)
+		: _Complex_base<float, _Fcomplex_value>(_Right._Val[0],
+			_Right._Val[1])
+		{	
+		}
+
+	complex<_Ty>& operator=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Right;
+		this->_Val[1] = 0;
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] + _Right;
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] - _Right;
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] * _Right;
+		this->_Val[1] = _Val[1] * _Right;
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] / _Right;
+		this->_Val[1] = _Val[1] / _Right;
+		return (*this);
+		}
+
+	_Myt& operator=(const _Myt& _Right)
+		{   
+		this->_Val[0] = _Right.real();
+		this->_Val[1] = _Right.imag();
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Myt& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Myt& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Myt& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Myt& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator=(const complex<_Other>& _Right)
+		{	
+		_Val[0] = (_Ty)_Right._Val[0];
+		_Val[1] = (_Ty)_Right._Val[1];
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator+=(const complex<_Other>& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator-=(const complex<_Other>& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator*=(const complex<_Other>& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator/=(const complex<_Other>& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+	};
+
+		
+template<> class  complex<double>
+	: public _Complex_base<double, _Dcomplex_value>
+	{	
+public:
+	typedef double _Ty;
+	typedef complex<_Ty> _Myt;
+
+	complex(const complex<float>&);	
+
+	explicit complex(const complex<long double>&);	
+
+	complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0)
+		: _Complex_base<double, _Dcomplex_value>(_Realval, _Imagval)
+		{	
+		}
+
+	complex(const _Dcomplex_value& _Right)
+		: _Complex_base<double, _Dcomplex_value>(_Right._Val[0],
+			_Right._Val[1])
+		{	
+		}
+
+	complex<_Ty>& operator=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Right;
+		this->_Val[1] = 0;
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] + _Right;
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] - _Right;
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] * _Right;
+		this->_Val[1] = _Val[1] * _Right;
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] / _Right;
+		this->_Val[1] = _Val[1] / _Right;
+		return (*this);
+		}
+
+	_Myt& operator=(const _Myt& _Right)
+		{   
+		this->_Val[0] = _Right.real();
+		this->_Val[1] = _Right.imag();
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Myt& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Myt& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Myt& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Myt& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator=(const complex<_Other>& _Right)
+		{	
+		_Val[0] = (_Ty)_Right._Val[0];
+		_Val[1] = (_Ty)_Right._Val[1];
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator+=(const complex<_Other>& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator-=(const complex<_Other>& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator*=(const complex<_Other>& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator/=(const complex<_Other>& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+	};
+
+		
+template<> class  complex<long double>
+	: public _Complex_base<long double, _Lcomplex_value>
+	{	
+public:
+	typedef long double _Ty;
+	typedef complex<_Ty> _Myt;
+
+	complex(const complex<float>&);	
+
+	complex(const complex<double>&);	
+
+	complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0)
+		: _Complex_base<long double, _Lcomplex_value>(_Realval, _Imagval)
+		{	
+		}
+
+	complex(const _Lcomplex_value& _Right)
+		: _Complex_base<long double, _Lcomplex_value>(_Right._Val[0],
+			_Right._Val[1])
+		{	
+		}
+
+	complex<_Ty>& operator=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Right;
+		this->_Val[1] = 0;
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] + _Right;
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] - _Right;
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] * _Right;
+		this->_Val[1] = _Val[1] * _Right;
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Val[0] / _Right;
+		this->_Val[1] = _Val[1] / _Right;
+		return (*this);
+		}
+
+	_Myt& operator=(const _Myt& _Right)
+		{   
+		this->_Val[0] = _Right.real();
+		this->_Val[1] = _Right.imag();
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Myt& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Myt& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Myt& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Myt& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator=(const complex<_Other>& _Right)
+		{	
+		_Val[0] = (_Ty)_Right._Val[0];
+		_Val[1] = (_Ty)_Right._Val[1];
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator+=(const complex<_Other>& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator-=(const complex<_Other>& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator*=(const complex<_Other>& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator/=(const complex<_Other>& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+	};
+
+		
+inline
+	complex<float>::complex(const complex<double>& _Right)
+		: _Complex_base<float, _Fcomplex_value>(
+			(_Ty)_Right.real(), (_Ty)_Right.imag())
+	{	
+	}
+
+inline
+	complex<float>::complex(const complex<long double>& _Right)
+		: _Complex_base<float, _Fcomplex_value>(
+			(_Ty)_Right.real(), (_Ty)_Right.imag())
+	{	
+	}
+
+inline
+	complex<double>::complex(const complex<float>& _Right)
+		: _Complex_base<double, _Dcomplex_value>(
+			(_Ty)_Right.real(), (_Ty)_Right.imag())
+	{	
+	}
+
+inline
+	complex<double>::complex(const complex<long double>& _Right)
+		: _Complex_base<double, _Dcomplex_value>(
+			(_Ty)_Right.real(), (_Ty)_Right.imag())
+	{	
+	}
+
+inline
+	complex<long double>::complex(const complex<float>& _Right)
+		: _Complex_base<long double, _Lcomplex_value>(
+			(_Ty)_Right.real(), (_Ty)_Right.imag())
+	{	
+	}
+
+inline
+	complex<long double>::complex(const complex<double>& _Right)
+		: _Complex_base<long double, _Lcomplex_value>(
+			(_Ty)_Right.real(), (_Ty)_Right.imag())
+	{	
+	}
+
+		
+template<class _Ty>
+	class complex
+		: public _Complex_base<_Ty, _Complex_value<_Ty> >
+	{	
+public:
+	typedef complex<_Ty> _Myt;
+	typedef _Complex_base<_Ty, _Complex_value<_Ty> > _Mybase;
+
+	complex(const _Ty& _Realval = 0, const _Ty& _Imagval = 0)
+		: _Mybase(_Realval, _Imagval)
+		{	
+		}
+
+	_Myt& operator=(const _Ty& _Right)
+		{	
+		this->_Val[0] = _Right;
+		this->_Val[1] = 0;
+		return (*this);
+		}
+
+	template<class _Other>
+		complex(const complex<_Other>& _Right)
+		: _Mybase((_Ty)_Right.real(), (_Ty)_Right.imag())
+		{	
+		}
+
+	template<class _Other>
+		_Myt& operator=(const complex<_Other>& _Right)
+		{	
+		this->_Val[0] = (_Ty)_Right.real();
+		this->_Val[1] = (_Ty)_Right.imag();
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Ty& _Right)
+		{	
+		this->_Val[0] = this->_Val[0] + _Right;
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Ty& _Right)
+		{	
+		this->_Val[0] = this->_Val[0] - _Right;
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Ty& _Right)
+		{	
+		this->_Val[0] = this->_Val[0] * _Right;
+		this->_Val[1] = this->_Val[1] * _Right;
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Ty& _Right)
+		{	
+		this->_Val[0] = this->_Val[0] / _Right;
+		this->_Val[1] = this->_Val[1] / _Right;
+		return (*this);
+		}
+
+	_Myt& operator+=(const _Myt& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	_Myt& operator-=(const _Myt& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	_Myt& operator*=(const _Myt& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	_Myt& operator/=(const _Myt& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator+=(const complex<_Other>& _Right)
+		{	
+		this->_Add(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator-=(const complex<_Other>& _Right)
+		{	
+		this->_Sub(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator*=(const complex<_Other>& _Right)
+		{	
+		this->_Mul(_Right);
+		return (*this);
+		}
+
+	template<class _Other> inline
+		_Myt& operator/=(const complex<_Other>& _Right)
+		{	
+		this->_Div(_Right);
+		return (*this);
+		}
+	};
+
+ 
+ 
+ 
+ 
+
+#pragma once
+
+
+
+
+		
+template<class _Ty > inline
+	_Ty __cdecl imag(const complex<_Ty >& _Left)
+	{	
+	return (_Left.imag());
+	}
+
+		
+template<class _Ty > inline
+	_Ty __cdecl real(const complex<_Ty >& _Left)
+	{	
+	return (_Left.real());
+	}
+
+		
+template<class _Ty > inline
+	_Ty __cdecl _Fabs(const complex<_Ty >& _Left, int *_Pexp)
+	{	
+	*_Pexp = 0;
+	_Ty _Av = real(_Left);
+	_Ty _Bv = imag(_Left);
+
+	if (_Ctraits<_Ty >::_Isinf(_Av) || _Ctraits<_Ty >::_Isinf(_Bv))
+		return (_Ctraits<_Ty >::_Infv(_Bv));	
+	else if (_Ctraits<_Ty >::_Isnan(_Av))
+		return (_Av);	
+	else if (_Ctraits<_Ty >::_Isnan(_Bv))
+		return (_Bv);	
+	else
+		{	
+		if (_Av < 0)
+			_Av = -_Av;
+		if (_Bv < 0)
+			_Bv = -_Bv;
+		if (_Av < _Bv)
+			{	
+			_Ty _Tmp = _Av;
+			_Av = _Bv;
+			_Bv = _Tmp;
+			}
+
+		if (_Av == 0)
+			return (_Av);	
+		if (1 <= _Av)
+			*_Pexp = 2, _Av = _Av * (_Ty)0.25, _Bv = _Bv * (_Ty)0.25;
+		else
+			*_Pexp = -2, _Av = _Av * 4, _Bv = _Bv * 4;
+
+		_Ty _Tmp = _Av - _Bv;
+		if (_Tmp == _Av)
+			return (_Av);	
+		else if (_Bv < _Tmp)
+			{	
+			const _Ty _Qv = _Av / _Bv;
+			return (_Av + _Bv / (_Qv + _Ctraits<_Ty >::sqrt(_Qv * _Qv + 1)));
+			}
+		else
+			{	
+			static const _Ty _Root2 =
+				(_Ty)1.4142135623730950488016887242096981L;
+			static const _Ty _Oneplusroot2high =
+				(_Ty)(10125945.0 / 4194304.0);	
+			static const _Ty _Oneplusroot2low =
+				(_Ty)1.4341252375973918872420969807856967e-7L;
+
+			const _Ty _Qv = _Tmp / _Bv;
+			const _Ty _Rv = (_Qv + 2) * _Qv;
+			const _Ty _Sv = _Rv / (_Root2 + _Ctraits<_Ty >::sqrt(_Rv + 2))
+				+ _Oneplusroot2low + _Qv + _Oneplusroot2high;
+			return (_Av + _Bv / _Sv);
+			}
+		}
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator+(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp += _Right);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator+(const complex<_Ty >& _Left,
+		const _Ty& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	_Tmp.real(_Tmp.real() + _Right);
+	return (_Tmp);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator+(const _Ty& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp += _Right);
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator-(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp -= _Right);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator-(const complex<_Ty >& _Left,
+		const _Ty& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	_Tmp.real(_Tmp.real() - _Right);
+	return (_Tmp);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator-(const _Ty& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp -= _Right);
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator*(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp *= _Right);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator*(const complex<_Ty >& _Left,
+		const _Ty& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	_Tmp.real(_Tmp.real() * _Right);
+	_Tmp.imag(_Tmp.imag() * _Right);
+	return (_Tmp);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator*(const _Ty& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp *= _Right);
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator/(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp /= _Right);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator/(const complex<_Ty >& _Left,
+		const _Ty& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	_Tmp.real(_Tmp.real() / _Right);
+	_Tmp.imag(_Tmp.imag() / _Right);
+	return (_Tmp);
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator/(const _Ty& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	complex<_Ty > _Tmp(_Left);
+	return (_Tmp /= _Right);
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator+(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(_Left));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl operator-(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(-real(_Left), -imag(_Left)));
+	}
+
+		
+template<class _Ty > inline
+	bool __cdecl operator==(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	return (real(_Left) == real(_Right) && imag(_Left) == imag(_Right));
+	}
+
+template<class _Ty > inline
+	bool __cdecl operator==(const complex<_Ty >& _Left,
+		const _Ty& _Right)
+	{	
+	return (real(_Left) == _Right && imag(_Left) == 0);
+	}
+
+template<class _Ty > inline
+	bool __cdecl operator==(const _Ty& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	return (_Left == real(_Right) && 0 == imag(_Right));
+	}
+
+		
+template<class _Ty > inline
+	bool __cdecl operator!=(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Ty > inline
+	bool __cdecl operator!=(const complex<_Ty >& _Left,
+		const _Ty& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Ty > inline
+	bool __cdecl operator!=(const _Ty& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+		
+template<class _Ty > inline
+	_Ty __cdecl abs(const complex<_Ty >& _Left)
+	{	
+	int _Leftexp;
+	_Ty _Rho = _Fabs(_Left, &_Leftexp);	
+
+	if (_Leftexp == 0)
+		return (_Rho);	
+	else
+		return (_Ctraits<_Ty >::ldexp(_Rho, _Leftexp));	
+	}
+
+		
+template<class _Ty > inline
+	_Ty __cdecl arg(const complex<_Ty >& _Left)
+	{	
+	return (_Ctraits<_Ty >::atan2(imag(_Left), real(_Left)));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl conj(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(real(_Left), -imag(_Left)));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl cos(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(
+		_Ctraits<_Ty >::_Cosh(imag(_Left), _Ctraits<_Ty >::cos(real(_Left))),
+		-_Ctraits<_Ty >::_Sinh(imag(_Left),
+			_Ctraits<_Ty >::sin(real(_Left)))));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl cosh(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(
+		_Ctraits<_Ty >::_Cosh(real(_Left), _Ctraits<_Ty >::cos(imag(_Left))),
+		_Ctraits<_Ty >::_Sinh(real(_Left), _Ctraits<_Ty >::sin(imag(_Left)))));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl exp(const complex<_Ty >& _Left)
+	{	
+	_Ty _Real(real(_Left)), _Imag(real(_Left));
+	_Ctraits<_Ty >::_Exp(&_Real, _Ctraits<_Ty >::cos(imag(_Left)), 0);
+	_Ctraits<_Ty >::_Exp(&_Imag, _Ctraits<_Ty >::sin(imag(_Left)), 0);
+	return (complex<_Ty >(_Real, _Imag));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl log(const complex<_Ty >& _Left)
+	{	
+	_Ty _Theta = _Ctraits<_Ty >::atan2(imag(_Left), real(_Left));	
+
+	if (_Ctraits<_Ty >::_Isnan(_Theta))
+		return (complex<_Ty >(_Theta, _Theta));	
+	else
+		{	
+		static const _Ty _Cm = (_Ty)(22713.0L / 32768.0L);
+		static const _Ty _Cl =
+			(_Ty)1.4286068203094172321214581765680755e-6L;
+		int _Leftexp;
+		_Ty _Rho = _Fabs(_Left, &_Leftexp);	
+
+		_Ty _Leftn = (_Ty)_Leftexp;
+		complex<_Ty > _Tmp(
+			_Rho == 0 ? -_Ctraits<_Ty >::_Infv(_Rho)	
+			: _Ctraits<_Ty >::_Isinf(_Rho) ? _Rho	
+			: _Ctraits<_Ty >::log(_Rho) + _Leftn * _Cl + _Leftn * _Cm,
+				_Theta);
+		return (_Tmp);
+		}
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl log10(const complex<_Ty >& _Left)
+	{	
+	return (log(_Left) * (_Ty)0.43429448190325182765112891891660508L);
+	}
+
+		
+template<class _Ty > inline
+	_Ty __cdecl norm(const complex<_Ty >& _Left)
+	{	
+	return (real(_Left) * real(_Left) + imag(_Left) * imag(_Left));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl polar(const _Ty& _Rho, const _Ty& _Theta)
+	{	
+	return (complex<_Ty >(_Rho * _Ctraits<_Ty >::cos(_Theta),
+		_Rho * _Ctraits<_Ty >::sin(_Theta)));
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl polar(const _Ty& _Rho)
+	{	
+	return (complex<_Ty >(_Rho, (_Ty)0));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl pow(const complex<_Ty >& _Left, const _Ty& _Right)
+	{	
+	if (imag(_Left) == 0 && 0 < real(_Left))
+		return (complex<_Ty >(_Ctraits<_Ty >::pow(real(_Left), _Right)));
+	else
+		return (exp(_Right * log(_Left)));
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl pow(const complex<_Ty >& _Left, int _Right)
+	{	
+	complex<_Ty > _Tmp = _Left;
+	unsigned int _Count = _Right;
+
+	if (_Right < 0)
+		_Count = 0 - _Count;	
+
+	for (complex<_Ty > _Zv = complex<_Ty >(1); ; _Tmp *= _Tmp)
+		{	
+		if ((_Count & 1) != 0)
+			_Zv *= _Tmp;
+		if ((_Count >>= 1) == 0)
+			return (_Right < 0 ? complex<_Ty >(1) / _Zv : _Zv);
+		}
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl pow(const _Ty& _Left, const complex<_Ty >& _Right)
+	{	
+	if (imag(_Right) == 0)
+		return (complex<_Ty >(_Ctraits<_Ty >::pow(_Left, real(_Right))));
+	else if (0 < _Left)
+		return (exp(_Right * _Ctraits<_Ty >::log(_Left)));
+	else
+		return (exp(_Right * log(complex<_Ty >(_Left))));
+	}
+
+template<class _Ty > inline
+	complex<_Ty > __cdecl pow(const complex<_Ty >& _Left,
+		const complex<_Ty >& _Right)
+	{	
+	if (imag(_Right) == 0)
+		return (pow(_Left, real(_Right)));
+	else if (imag(_Left) == 0)
+		return (complex<_Ty >(pow(real(_Left), _Right)));
+	else
+		return (exp(_Right * log(_Left)));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl sin(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(
+		_Ctraits<_Ty >::_Cosh(imag(_Left), _Ctraits<_Ty >::sin(real(_Left))),
+		_Ctraits<_Ty >::_Sinh(imag(_Left), _Ctraits<_Ty >::cos(real(_Left)))));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl sinh(const complex<_Ty >& _Left)
+	{	
+	return (complex<_Ty >(
+		_Ctraits<_Ty >::_Sinh(real(_Left), _Ctraits<_Ty >::cos(imag(_Left))),
+		_Ctraits<_Ty >::_Cosh(real(_Left), _Ctraits<_Ty >::sin(imag(_Left)))));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl sqrt(const complex<_Ty >& _Left)
+	{	
+	int _Leftexp;
+	_Ty _Rho = _Fabs(_Left, &_Leftexp);	
+
+	if (_Leftexp == 0)
+		return (complex<_Ty >(_Rho, _Rho));	
+	else
+		{	
+		_Ty _Realmag = _Ctraits<_Ty >::ldexp(real(_Left) < 0
+			? - real(_Left) : real(_Left), -_Leftexp);
+		_Rho = _Ctraits<_Ty >::ldexp(_Ctraits<_Ty >::sqrt(
+			2 * (_Realmag + _Rho)), _Leftexp / 2 - 1);
+
+		if (0 <= real(_Left))
+			return (complex<_Ty >(_Rho, imag(_Left) / (2 * _Rho)));
+		else if (imag(_Left) < 0)
+			return (complex<_Ty >(-imag(_Left) / (2 * _Rho), -_Rho));
+		else
+			return (complex<_Ty >(imag(_Left) / (2 * _Rho), _Rho));
+		}
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl tanh(const complex<_Ty >& _Left)
+	{	
+	_Ty _Tv = _Ctraits<_Ty >::tan(imag(_Left));
+	_Ty _Sv = _Ctraits<_Ty >::_Sinh(real(_Left), (_Ty)(1));
+	_Ty _Bv = _Sv *((_Ty)(1) + _Tv * _Tv);
+	_Ty _Dv = (_Ty)(1) + _Bv * _Sv;
+	return (complex<_Ty >((_Ctraits<_Ty >::sqrt((_Ty)(1) + _Sv * _Sv))
+		* _Bv / _Dv, _Tv / _Dv));
+	}
+
+		
+template<class _Ty > inline
+	complex<_Ty > __cdecl tan(const complex<_Ty >& _Left)
+	{	
+	complex<_Ty > _Zv(tanh(complex<_Ty >(-imag(_Left), real(_Left))));
+	return (complex<_Ty >(imag(_Zv), -real(_Zv)));
+	}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+		
+template<class _Ty,
+	class _Elem,
+	class _Tr> inline
+	basic_istream<_Elem, _Tr>& __cdecl operator>>(
+		basic_istream<_Elem, _Tr>& _Istr, complex<_Ty>& _Right)
+	{	
+	typedef complex<_Ty> _Myt;
+	const ctype<_Elem>& _Ctype_fac = use_facet<ctype<_Elem> >(_Istr.getloc());
+	_Elem _Ch;
+	long double _Real, _Imag = 0;
+
+	if (_Istr >> _Ch && _Ch != _Ctype_fac.widen('('))
+		{	
+		_Istr.putback(_Ch);
+		_Istr >> _Real;
+		_Imag = 0;
+		}
+	else if (_Istr >> _Real >> _Ch && _Ch != _Ctype_fac.widen(','))
+		if (_Ch == _Ctype_fac.widen(')'))
+			_Imag = 0;	
+		else
+			{	
+			_Istr.putback(_Ch);
+			_Istr.setstate(ios_base::failbit);
+			}
+	else if (_Istr >> _Imag >> _Ch && _Ch != _Ctype_fac.widen(')'))
+			{	
+			_Istr.putback(_Ch);
+			_Istr.setstate(ios_base::failbit);
+			}
+
+	if (!_Istr.fail())
+		{	
+		_Ty _Tyreal((_Ty)_Real), _Tyimag((_Ty)_Imag);
+		_Right = _Myt(_Tyreal, _Tyimag);
+		}
+	return (_Istr);
+	}
+
+		
+template<class _Ty,
+	class _Elem,
+	class _Tr> inline
+	basic_ostream<_Elem, _Tr>& __cdecl operator<<(
+		basic_ostream<_Elem, _Tr>& _Ostr, const complex<_Ty>& _Right)
+	{	
+	const ctype<_Elem>& _Ctype_fac = use_facet<ctype<_Elem> >(_Ostr.getloc());
+	basic_ostringstream<_Elem, _Tr, allocator<_Elem> > _Sstr;
+
+	_Sstr.flags(_Ostr.flags());
+	_Sstr.imbue(_Ostr.getloc());
+	_Sstr.precision(_Ostr.precision());
+	_Sstr << _Ctype_fac.widen('(') << real(_Right)
+		<< _Ctype_fac.widen(',') << imag(_Right)
+		<< _Ctype_fac.widen(')');
+
+	basic_string<_Elem, _Tr, allocator<_Elem> > _Str = _Sstr.str();
+	return (_Ostr << _Str.c_str());
+	}
+
+ 
+
+
+}
+
+
+  #pragma warning(default: 4244)
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace detail{
+
+struct is_convertible_from_tester
+{
+   template <class T>
+   is_convertible_from_tester(const std::complex<T>&);
+};
+
+}
+
+template< typename T > struct is_complex : ::boost::integral_constant<bool,(::boost::is_convertible<T, boost::detail::is_convertible_from_tester>::value)> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T> 
+struct is_fundamental_impl
+    : ::boost::type_traits::ice_or< 
+          ::boost::is_arithmetic<T>::value
+        , ::boost::is_void<T>::value
+        >
+{ 
+};
+
+} 
+
+
+
+
+
+template< typename T > struct is_fundamental : ::boost::integral_constant<bool,::boost::detail::is_fundamental_impl<T>::value> {   }; 
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+namespace detail {
+
+template <typename T>
+struct is_compound_impl
+{
+   static const bool value = (::boost::type_traits::ice_not< ::boost::is_fundamental<T>::value >::value);
+};
+
+} 
+
+
+
+
+
+template< typename T > struct is_compound : ::boost::integral_constant<bool,::boost::detail::is_compound_impl<T>::value> {   }; 
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+
+
+
+#pragma warning(push)
+#pragma warning(disable:4624) 
+
+
+template <typename T>
+struct empty_helper_t1 : public T
+{
+    empty_helper_t1();  
+    int i[256];
+private:
+   
+   empty_helper_t1(const empty_helper_t1&);
+   empty_helper_t1& operator=(const empty_helper_t1&);
+};
+
+
+#pragma warning(pop)
+
+
+struct empty_helper_t2 { int i[256]; };
+
+
+
+template <typename T, bool is_a_class = false>
+struct empty_helper
+{
+    static const bool value = false;
+};
+
+template <typename T>
+struct empty_helper<T, true>
+{
+    static const bool value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2));
+};
+
+template <typename T>
+struct is_empty_impl
+{
+    typedef typename remove_cv<T>::type cvt;
+    static const bool value = ( ::boost::type_traits::ice_or< ::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value , __is_empty(cvt) >::value );
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<> struct is_empty_impl< void > { static const bool value = (false); };
+
+template<> struct is_empty_impl< void const > { static const bool value = (false); };
+template<> struct is_empty_impl< void volatile > { static const bool value = (false); };
+template<> struct is_empty_impl< void const volatile > { static const bool value = (false); };
+
+
+} 
+
+template< typename T > struct is_empty : ::boost::integral_constant<bool,::boost::detail::is_empty_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+template< typename T > struct is_floating_point : ::boost::integral_constant<bool,false> {   }; 
+template<> struct is_floating_point< float > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< float const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< float volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< float const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_floating_point< double > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< double const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< double volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< double const volatile > : ::boost::integral_constant<bool,true> {   };
+template<> struct is_floating_point< long double > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< long double const > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< long double volatile > : ::boost::integral_constant<bool,true> {   }; template<> struct is_floating_point< long double const volatile > : ::boost::integral_constant<bool,true> {   };
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail{
+
+template <typename T>
+struct is_member_object_pointer_impl
+{
+   static const bool value = (::boost::type_traits::ice_and< ::boost::is_member_pointer<T>::value, ::boost::type_traits::ice_not< ::boost::is_member_function_pointer<T>::value >::value >::value );
+};
+
+} 
+
+template< typename T > struct is_member_object_pointer : ::boost::integral_constant<bool,::boost::detail::is_member_object_pointer_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_object_impl
+{
+
+   static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value, ::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value, ::boost::type_traits::ice_not< ::boost::is_function<T>::value>::value >::value);
+
+
+
+
+
+
+
+};
+
+} 
+
+template< typename T > struct is_object : ::boost::integral_constant<bool,::boost::detail::is_object_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost{
+
+
+
+namespace detail{
+
+template <class T>
+struct is_polymorphic_imp1
+{
+
+
+
+   typedef typename remove_cv<T>::type ncvT;
+   struct d1 : public ncvT
+   {
+      d1();
+
+      ~d1()throw();
+
+      char padding[256];
+   private:
+      
+      d1(const d1&);
+      d1& operator=(const d1&);
+   };
+   struct d2 : public ncvT
+   {
+      d2();
+      virtual ~d2()throw();
+
+
+
+
+
+
+      char padding[256];
+   private:
+      
+      d2(const d2&);
+      d2& operator=(const d2&);
+   };
+
+   static const bool value = (sizeof(d2) == sizeof(d1));
+};
+
+template <class T>
+struct is_polymorphic_imp2
+{
+   static const bool value = false;
+};
+
+template <bool is_class>
+struct is_polymorphic_selector
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_polymorphic_imp2<T> type;
+   };
+};
+
+template <>
+struct is_polymorphic_selector<true>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_polymorphic_imp1<T> type;
+   };
+};
+
+template <class T>
+struct is_polymorphic_imp
+{
+   typedef is_polymorphic_selector< ::boost::is_class<T>::value> selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type imp_type;
+   static const bool value = imp_type::value;
+};
+
+} 
+
+template< typename T > struct is_polymorphic : ::boost::integral_constant<bool,::boost::detail::is_polymorphic_imp<T>::value> {   }; 
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+namespace detail{
+
+
+
+template <class T>
+struct is_signed_values
+{
+   
+   
+   
+   
+   
+   typedef typename remove_cv<T>::type no_cv_t;
+   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));
+   static const no_cv_t zero = (static_cast<no_cv_t>(0));
+};
+
+template <class T>
+struct is_signed_helper
+{
+   typedef typename remove_cv<T>::type no_cv_t;
+   static const bool value = (!(::boost::detail::is_signed_values<T>::minus_one > boost::detail::is_signed_values<T>::zero));
+};
+
+template <bool integral_type>
+struct is_signed_select_helper
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_signed_helper<T> type;
+   };
+};
+
+template <>
+struct is_signed_select_helper<false>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <class T>
+struct is_signed_imp
+{
+   typedef is_signed_select_helper< 
+      ::boost::type_traits::ice_or<
+         ::boost::is_integral<T>::value,
+         ::boost::is_enum<T>::value>::value 
+   > selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type type;
+
+
+
+   static const bool value = type::value;
+
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+template< typename T > struct is_signed : ::boost::integral_constant<bool,::boost::detail::is_signed_imp<T>::value> {   }; 
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T>
+struct is_stateless_impl
+{
+  static const bool value = (::boost::type_traits::ice_and< ::boost::has_trivial_constructor<T>::value, ::boost::has_trivial_copy<T>::value, ::boost::has_trivial_destructor<T>::value, ::boost::is_class<T>::value, ::boost::is_empty<T>::value >::value);
+};
+
+} 
+
+template< typename T > struct is_stateless : ::boost::integral_constant<bool,::boost::detail::is_stateless_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
+template <typename T> struct is_union_impl
+{
+   typedef typename remove_cv<T>::type cvt;
+   static const bool value = __is_union(cvt);
+};
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+template< typename T > struct is_union : ::boost::integral_constant<bool,::boost::detail::is_union_impl<T>::value> {   }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
 namespace detail{
+
+
+
+template <class T>
+struct is_unsigned_values
+{
+   
+   
+   
+   
+   
+   typedef typename remove_cv<T>::type no_cv_t;
+   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));
+   static const no_cv_t zero = (static_cast<no_cv_t>(0));
+};
+
+template <class T>
+struct is_ununsigned_helper
+{
+   static const bool value = (::boost::detail::is_unsigned_values<T>::minus_one > ::boost::detail::is_unsigned_values<T>::zero);
+};
+
+template <bool integral_type>
+struct is_ununsigned_select_helper
+{
+   template <class T>
+   struct rebind
+   {
+      typedef is_ununsigned_helper<T> type;
+   };
+};
+
+template <>
+struct is_ununsigned_select_helper<false>
+{
+   template <class T>
+   struct rebind
+   {
+      typedef false_type type;
+   };
+};
+
+template <class T>
+struct is_unsigned_imp
+{
+   typedef is_ununsigned_select_helper< 
+      ::boost::type_traits::ice_or<
+         ::boost::is_integral<T>::value,
+         ::boost::is_enum<T>::value>::value 
+   > selector;
+   typedef typename selector::template rebind<T> binder;
+   typedef typename binder::type type;
+   static const bool value = type::value;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
+
+
+
+
+template< typename T > struct is_unsigned : ::boost::integral_constant<bool,::boost::detail::is_unsigned_imp<T>::value> {   }; 
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< bool C_, typename T1, typename T2, typename T3, typename T4 >
+struct and_impl
+    : false_
+{
+};
+
+template< typename T1, typename T2, typename T3, typename T4 >
+struct and_impl< true,T1,T2,T3,T4 >
+    : and_impl<
+          T1::type::value
+        , T2, T3, T4
+        , true_
+        >
+{
+};
+
+template<>
+struct and_impl<
+          true
+        , true_, true_, true_, true_
+        >
+    : true_
+{
+};
+
+} 
+
+template<
+      typename T1 = na
+    , typename T2 = na
+    , typename T3 = true_, typename T4 = true_, typename T5 = true_
+    >
+struct and_
+
+    : aux::and_impl<
+          T1::type::value
+        , T2, T3, T4, T5
+        >
+
+{
+};
+
+template<> struct and_<  na , na > { template<  typename T1 , typename T2 , typename T3 =na  , typename T4 =na  , typename T5 =na  > struct apply : and_<  T1 , T2 > { }; };  template< typename Tag > struct lambda< and_<  na , na > , Tag  > { typedef false_ is_le; typedef and_<  na , na > result_; typedef and_<  na , na > type; };  
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< long C_ > 
+struct not_impl
+    : bool_<!C_>
+{
+};
+
+} 
+
+
+template<
+      typename T = na
+    >
+struct not_
+    : aux::not_impl<
+          T::type::value
+        >
+{
+    
+};
+
+template<> struct not_<  na > { template<  typename T1 , typename T2 =na  , typename T3 =na  , typename T4 =na  , typename T5 =na  > struct apply : not_<  T1 > { }; }; template< typename Tag > struct lambda< not_<  na > , Tag  > { typedef false_ is_le; typedef not_<  na > result_; typedef not_<  na > type; };   
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+namespace detail {
+
+
+
+#pragma warning( push )
+#pragma warning( disable : 4584 )
+
+
+
+
+template<typename Base, typename Derived, typename tag>
+struct is_virtual_base_of_impl
+{
+    static const bool value = false;
+};
+
+template<typename Base, typename Derived>
+struct is_virtual_base_of_impl<Base, Derived, mpl::true_>
+{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    struct boost_type_traits_internal_struct_X : Derived, virtual Base 
+    {
+       boost_type_traits_internal_struct_X();
+       boost_type_traits_internal_struct_X(const boost_type_traits_internal_struct_X&);
+       boost_type_traits_internal_struct_X& operator=(const boost_type_traits_internal_struct_X&);
+       ~boost_type_traits_internal_struct_X()throw();
+    };
+    struct boost_type_traits_internal_struct_Y : Derived 
+    {
+       boost_type_traits_internal_struct_Y();
+       boost_type_traits_internal_struct_Y(const boost_type_traits_internal_struct_Y&);
+       boost_type_traits_internal_struct_Y& operator=(const boost_type_traits_internal_struct_Y&);
+       ~boost_type_traits_internal_struct_Y()throw();
+    };
+
+    static const bool value = (sizeof(boost_type_traits_internal_struct_X)==sizeof(boost_type_traits_internal_struct_Y));
+};
+
+template<typename Base, typename Derived>
+struct is_virtual_base_of_impl2
+{
+   typedef typename mpl::and_<is_base_of<Base, Derived>, mpl::not_<is_same<Base, Derived> > >::type tag_type;
+   typedef is_virtual_base_of_impl<Base, Derived, tag_type> imp;
+   static const bool value = imp::value;
+};
+
+
+#pragma warning( pop )
+
+
+} 
+
+template< typename Base, typename Derived > struct is_virtual_base_of : ::boost::integral_constant<bool,(::boost::detail::is_virtual_base_of_impl2<Base,Derived>::value)> {   }; 
+
+
+template< typename Base, typename Derived > struct is_virtual_base_of< Base&,Derived > : ::boost::integral_constant<bool,false> {  };
+template< typename Base, typename Derived > struct is_virtual_base_of< Base,Derived& > : ::boost::integral_constant<bool,false> {  };
+template< typename Base, typename Derived > struct is_virtual_base_of< Base&,Derived& > : ::boost::integral_constant<bool,false> {  };
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+namespace detail {
+
 template <class T>
-struct has_nothrow_copy_imp{
-   static const bool value = (::boost::type_traits::ice_or< ::boost::has_trivial_copy<T>::value, (__has_nothrow_copy(T) && !is_volatile<T>::value && !is_reference<T>::value) >::value);
+struct make_unsigned_imp
+{
+   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)((::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value)) >)> boost_static_assert_typedef_5;
+
+   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)((::boost::type_traits::ice_not< ::boost::is_same< typename remove_cv<T>::type, bool>::value>::value)) >)> boost_static_assert_typedef_6;
+
+
+   typedef typename remove_cv<T>::type t_no_cv;
+   typedef typename mpl::if_c<
+      (::boost::type_traits::ice_and< 
+         ::boost::is_unsigned<T>::value,
+         ::boost::is_integral<T>::value,
+         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
+         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
+         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),
+      T,
+      typename mpl::if_c<
+         (::boost::type_traits::ice_and< 
+            ::boost::is_integral<T>::value,
+            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
+            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
+            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>
+         ::value),
+         typename mpl::if_<
+            is_same<t_no_cv, signed char>,
+            unsigned char,
+            typename mpl::if_<
+               is_same<t_no_cv, short>,
+               unsigned short,
+               typename mpl::if_<
+                  is_same<t_no_cv, int>,
+                  unsigned int,
+                  typename mpl::if_<
+                     is_same<t_no_cv, long>,
+                     unsigned long,
+
+                     boost::ulong_long_type
+
+
+
+
+
+                  >::type
+               >::type
+            >::type
+         >::type,
+         
+         typename mpl::if_c<
+            sizeof(t_no_cv) == sizeof(unsigned char),
+            unsigned char,
+            typename mpl::if_c<
+               sizeof(t_no_cv) == sizeof(unsigned short),
+               unsigned short,
+               typename mpl::if_c<
+                  sizeof(t_no_cv) == sizeof(unsigned int),
+                  unsigned int,
+                  typename mpl::if_c<
+                     sizeof(t_no_cv) == sizeof(unsigned long),
+                     unsigned long,
+
+                     boost::ulong_long_type
+
+
+
+
+
+                  >::type
+               >::type
+            >::type
+         >::type
+      >::type
+   >::type base_integer_type;
+   
+   
+   typedef typename mpl::if_<
+      is_const<T>,
+      typename add_const<base_integer_type>::type,
+      base_integer_type
+   >::type const_base_integer_type;
+   
+   
+   typedef typename mpl::if_<
+      is_volatile<T>,
+      typename add_volatile<const_base_integer_type>::type,
+      const_base_integer_type
+   >::type type;
 };
-}
-template< typename T > struct has_nothrow_copy : ::boost::integral_constant<bool,::boost::detail::has_nothrow_copy_imp<T>::value> { };
-template< typename T > struct has_nothrow_copy_constructor : ::boost::integral_constant<bool,::boost::detail::has_nothrow_copy_imp<T>::value> { };
-}
+
+
+} 
+
+template< typename T > struct make_unsigned { typedef typename boost::detail::make_unsigned_imp<T>::type type;  }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
+
 namespace detail {
-template <typename T>
-struct has_trivial_dtor_impl
-{
-   static const bool value = (::boost::type_traits::ice_or< ::boost::is_pod<T>::value, __has_trivial_destructor(T) >::value);
-};
-}
-template< typename T > struct has_trivial_destructor : ::boost::integral_constant<bool,::boost::detail::has_trivial_dtor_impl<T>::value> { };
-}
-namespace boost {
-template< typename T > struct has_nothrow_destructor : ::boost::integral_constant<bool,::boost::has_trivial_destructor<T>::value> { };
-}
-namespace boost {
-template< typename T > struct has_virtual_destructor : ::boost::integral_constant<bool,__has_virtual_destructor(T)> { };
-}
-namespace boost {
-namespace detail{
-template <class T>
-struct is_signed_values
-{
-   typedef typename remove_cv<T>::type no_cv_t;
-   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));
-   static const no_cv_t zero = (static_cast<no_cv_t>(0));
-};
-template <class T>
-struct is_signed_helper
-{
-   typedef typename remove_cv<T>::type no_cv_t;
-   static const bool value = (!(::boost::detail::is_signed_values<T>::minus_one > boost::detail::is_signed_values<T>::zero));
-};
-template <bool integral_type>
-struct is_signed_select_helper
-{
-   template <class T>
-   struct rebind
-   {
-      typedef is_signed_helper<T> type;
-   };
-};
-template <>
-struct is_signed_select_helper<false>
-{
-   template <class T>
-   struct rebind
-   {
-      typedef false_type type;
-   };
-};
-template <class T>
-struct is_signed_imp
-{
-   typedef is_signed_select_helper<
-      ::boost::type_traits::ice_or<
-         ::boost::is_integral<T>::value,
-         ::boost::is_enum<T>::value>::value
-   > selector;
-   typedef typename selector::template rebind<T> binder;
-   typedef typename binder::type type;
-   static const bool value = type::value;
-};
-}
-template< typename T > struct is_signed : ::boost::integral_constant<bool,::boost::detail::is_signed_imp<T>::value> { };
-}
-namespace boost {
-namespace detail{
-template <class T>
-struct is_unsigned_values
-{
-   typedef typename remove_cv<T>::type no_cv_t;
-   static const no_cv_t minus_one = (static_cast<no_cv_t>(-1));
-   static const no_cv_t zero = (static_cast<no_cv_t>(0));
-};
-template <class T>
-struct is_ununsigned_helper
-{
-   static const bool value = (::boost::detail::is_unsigned_values<T>::minus_one > ::boost::detail::is_unsigned_values<T>::zero);
-};
-template <bool integral_type>
-struct is_ununsigned_select_helper
-{
-   template <class T>
-   struct rebind
-   {
-      typedef is_ununsigned_helper<T> type;
-   };
-};
-template <>
-struct is_ununsigned_select_helper<false>
-{
-   template <class T>
-   struct rebind
-   {
-      typedef false_type type;
-   };
-};
+
 template <class T>
-struct is_unsigned_imp
+struct make_signed_imp
 {
-   typedef is_ununsigned_select_helper<
-      ::boost::type_traits::ice_or<
+   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)((::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value)) >)> boost_static_assert_typedef_7;
+
+   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)((::boost::type_traits::ice_not< ::boost::is_same< typename remove_cv<T>::type, bool>::value>::value)) >)> boost_static_assert_typedef_8;
+
+
+   typedef typename remove_cv<T>::type t_no_cv;
+   typedef typename mpl::if_c<
+      (::boost::type_traits::ice_and< 
+         ::boost::is_signed<T>::value,
          ::boost::is_integral<T>::value,
-         ::boost::is_enum<T>::value>::value
-   > selector;
-   typedef typename selector::template rebind<T> binder;
-   typedef typename binder::type type;
-   static const bool value = type::value;
+         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
+         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
+         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),
+      T,
+      typename mpl::if_c<
+         (::boost::type_traits::ice_and< 
+            ::boost::is_integral<T>::value,
+            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
+            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
+            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>
+         ::value),
+         typename mpl::if_<
+            is_same<t_no_cv, unsigned char>,
+            signed char,
+            typename mpl::if_<
+               is_same<t_no_cv, unsigned short>,
+               signed short,
+               typename mpl::if_<
+                  is_same<t_no_cv, unsigned int>,
+                  int,
+                  typename mpl::if_<
+                     is_same<t_no_cv, unsigned long>,
+                     long,
+
+                     boost::long_long_type
+
+
+
+
+
+                  >::type
+               >::type
+            >::type
+         >::type,
+         
+         typename mpl::if_c<
+            sizeof(t_no_cv) == sizeof(unsigned char),
+            signed char,
+            typename mpl::if_c<
+               sizeof(t_no_cv) == sizeof(unsigned short),
+               signed short,
+               typename mpl::if_c<
+                  sizeof(t_no_cv) == sizeof(unsigned int),
+                  int,
+                  typename mpl::if_c<
+                     sizeof(t_no_cv) == sizeof(unsigned long),
+                     long,
+
+                     boost::long_long_type
+
+
+
+
+
+                  >::type
+               >::type
+            >::type
+         >::type
+      >::type
+   >::type base_integer_type;
+   
+   
+   typedef typename mpl::if_<
+      is_const<T>,
+      typename add_const<base_integer_type>::type,
+      base_integer_type
+   >::type const_base_integer_type;
+   
+   
+   typedef typename mpl::if_<
+      is_volatile<T>,
+      typename add_volatile<const_base_integer_type>::type,
+      const_base_integer_type
+   >::type type;
 };
-}
-template< typename T > struct is_unsigned : ::boost::integral_constant<bool,::boost::detail::is_unsigned_imp<T>::value> { };
-}
+
+
+} 
+
+template< typename T > struct make_signed { typedef typename boost::detail::make_signed_imp<T>::type type;  }; 
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
+
+
+
 namespace detail{
-template <class T>
-struct is_abstract_imp
-{
-   static const bool value = __is_abstract(T);
-};
-}
-template< typename T > struct is_abstract : ::boost::integral_constant<bool,::boost::detail::is_abstract_imp<T>::value> { };
-}
-       
-namespace boost {
-template< typename T > struct is_array : ::boost::integral_constant<bool,false> { };
-template< typename T, std::size_t N > struct is_array< T[N] > : ::boost::integral_constant<bool,true> { };
-template< typename T, std::size_t N > struct is_array< T const[N] > : ::boost::integral_constant<bool,true> { };
-template< typename T, std::size_t N > struct is_array< T volatile[N] > : ::boost::integral_constant<bool,true> { };
-template< typename T, std::size_t N > struct is_array< T const volatile[N] > : ::boost::integral_constant<bool,true> { };
-template< typename T > struct is_array< T[] > : ::boost::integral_constant<bool,true> { };
-template< typename T > struct is_array< T const[] > : ::boost::integral_constant<bool,true> { };
-template< typename T > struct is_array< T volatile[] > : ::boost::integral_constant<bool,true> { };
-template< typename T > struct is_array< T const volatile[] > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-namespace detail {
-template <typename B, typename D>
-struct is_base_and_derived_impl
-{
-    typedef typename remove_cv<B>::type ncvB;
-    typedef typename remove_cv<D>::type ncvD;
-    static const bool value = ((__is_base_of(B,D) && !is_same<B,D>::value) && ! ::boost::is_same<ncvB,ncvD>::value);
-};
-}
-template< typename Base, typename Derived > struct is_base_and_derived : ::boost::integral_constant<bool,(::boost::detail::is_base_and_derived_impl<Base,Derived>::value)> { };
-template< typename Base, typename Derived > struct is_base_and_derived< Base&,Derived > : ::boost::integral_constant<bool,false> { };
-template< typename Base, typename Derived > struct is_base_and_derived< Base,Derived& > : ::boost::integral_constant<bool,false> { };
-template< typename Base, typename Derived > struct is_base_and_derived< Base&,Derived& > : ::boost::integral_constant<bool,false> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct is_class_impl
-{
-    static const bool value = __is_class(T);
-};
-}
-template< typename T > struct is_class : ::boost::integral_constant<bool,::boost::detail::is_class_impl<T>::value> { };
-}
-namespace boost {
-   namespace detail{
-      template <class B, class D>
-      struct is_base_of_imp
-      {
-          typedef typename remove_cv<B>::type ncvB;
-          typedef typename remove_cv<D>::type ncvD;
-          static const bool value = (::boost::type_traits::ice_or< (::boost::detail::is_base_and_derived_impl<ncvB,ncvD>::value), (::boost::type_traits::ice_and< ::boost::is_same<ncvB,ncvD>::value, ::boost::is_class<ncvB>::value>::value)>::value);
-      };
-   }
-template< typename Base, typename Derived > struct is_base_of : ::boost::integral_constant<bool,(::boost::detail::is_base_of_imp<Base, Derived>::value)> { };
-template< typename Base, typename Derived > struct is_base_of< Base&,Derived > : ::boost::integral_constant<bool,false> { };
-template< typename Base, typename Derived > struct is_base_of< Base,Derived& > : ::boost::integral_constant<bool,false> { };
-template< typename Base, typename Derived > struct is_base_of< Base&,Derived& > : ::boost::integral_constant<bool,false> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct is_fundamental_impl
-    : ::boost::type_traits::ice_or<
-          ::boost::is_arithmetic<T>::value
-        , ::boost::is_void<T>::value
-        >
-{
-};
-}
-template< typename T > struct is_fundamental : ::boost::integral_constant<bool,::boost::detail::is_fundamental_impl<T>::value> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct is_compound_impl
-{
-   static const bool value = (::boost::type_traits::ice_not< ::boost::is_fundamental<T>::value >::value);
-};
-}
-template< typename T > struct is_compound : ::boost::integral_constant<bool,::boost::detail::is_compound_impl<T>::value> { };
-}
-namespace boost {
-namespace type_traits {
-typedef char yes_type;
-struct no_type
-{
-   char padding[8];
-};
-}
-}
-namespace boost {
-namespace type_traits {
-template <int b1, int b2>
-struct ice_eq
-{
-    static const bool value = (b1 == b2);
-};
-template <int b1, int b2>
-struct ice_ne
-{
-    static const bool value = (b1 != b2);
-};
-template <int b1, int b2> bool const ice_eq<b1,b2>::value;
-template <int b1, int b2> bool const ice_ne<b1,b2>::value;
-}
-}
-namespace boost {
-namespace detail {
-struct any_conversion
-{
-    template <typename T> any_conversion(const volatile T&);
-    template <typename T> any_conversion(T&);
-};
-template <typename T> struct checker
-{
-    static boost::type_traits::no_type _m_check(any_conversion ...);
-    static boost::type_traits::yes_type _m_check(T, int);
-};
-template <typename From, typename To>
-struct is_convertible_basic_impl
-{
-    static From _m_from;
-    static bool const value = sizeof( detail::checker<To>::_m_check(_m_from, 0) )
-        == sizeof(::boost::type_traits::yes_type);
-};
-template <typename From, typename To>
-struct is_convertible_impl
-{
-    typedef typename add_reference<From>::type ref_type;
-    static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_or< ::boost::detail::is_convertible_basic_impl<ref_type,To>::value, ::boost::is_void<To>::value >::value, ::boost::type_traits::ice_not< ::boost::is_array<To>::value >::value >::value);
-};
-template <bool trivial1, bool trivial2, bool abstract_target>
-struct is_convertible_impl_select
-{
-   template <class From, class To>
-   struct rebind
-   {
-      typedef is_convertible_impl<From, To> type;
-   };
-};
-template <>
-struct is_convertible_impl_select<true, true, false>
-{
-   template <class From, class To>
-   struct rebind
-   {
-      typedef true_type type;
-   };
-};
-template <>
-struct is_convertible_impl_select<false, false, true>
-{
-   template <class From, class To>
-   struct rebind
-   {
-      typedef false_type type;
-   };
-};
-template <>
-struct is_convertible_impl_select<true, false, true>
-{
-   template <class From, class To>
-   struct rebind
-   {
-      typedef false_type type;
-   };
-};
-template <typename From, typename To>
-struct is_convertible_impl_dispatch_base
+
+template <class T, std::size_t N>
+struct rank_imp
 {
-   typedef is_convertible_impl_select<
-      ::boost::is_arithmetic<From>::value,
-      ::boost::is_arithmetic<To>::value,
-      ::boost::is_abstract<To>::value
-   > selector;
-   typedef typename selector::template rebind<From, To> isc_binder;
-   typedef typename isc_binder::type type;
+   static const std::size_t value = N;
 };
-template <typename From, typename To>
-struct is_convertible_impl_dispatch
-   : public is_convertible_impl_dispatch_base<From, To>::type
-{};
-    template<> struct is_convertible_impl< void,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void,void const > { static const bool value = (true); }; template<> struct is_convertible_impl< void,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void,void const volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void const > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const,void const volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void volatile,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void volatile,void const > { static const bool value = (true); }; template<>
 struct is_convertible_impl< void volatile,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void volatile,void const volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void const > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void volatile > { static const bool value = (true); }; template<> struct is_convertible_impl< void const volatile,void const volatile > { static const bool value = (true); };
-template< typename To > struct is_convertible_impl< void,To > { static const bool value = (false); };
-template< typename From > struct is_convertible_impl< From,void > { static const bool value = (true); };
-template< typename To > struct is_convertible_impl< void const,To > { static const bool value = (false); };
-template< typename To > struct is_convertible_impl< void volatile,To > { static const bool value = (false); };
-template< typename To > struct is_convertible_impl< void const volatile,To > { static const bool value = (false); };
-template< typename From > struct is_convertible_impl< From,void const > { static const bool value = (true); };
-template< typename From > struct is_convertible_impl< From,void volatile > { static const bool value = (true); };
-template< typename From > struct is_convertible_impl< From,void const volatile > { static const bool value = (true); };
-}
-template< typename From, typename To > struct is_convertible : ::boost::integral_constant<bool,(::boost::detail::is_convertible_impl_dispatch<From,To>::value)> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct empty_helper_t1 : public T
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T[R], N>
 {
-    empty_helper_t1();
-    int i[256];
-private:
-   empty_helper_t1(const empty_helper_t1&);
-   empty_helper_t1& operator=(const empty_helper_t1&);
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-struct empty_helper_t2 { int i[256]; };
-template <typename T, bool is_a_class = false>
-struct empty_helper
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T const[R], N>
 {
-    static const bool value = false;
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-template <typename T>
-struct empty_helper<T, true>
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T volatile[R], N>
 {
-    static const bool value = (sizeof(empty_helper_t1<T>) == sizeof(empty_helper_t2));
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-template <typename T>
-struct is_empty_impl
+
+template <class T, std::size_t R, std::size_t N>
+struct rank_imp<T const volatile[R], N>
 {
-    typedef typename remove_cv<T>::type cvt;
-    static const bool value = ( ::boost::type_traits::ice_or< ::boost::detail::empty_helper<cvt,::boost::is_class<T>::value>::value , __is_empty(cvt) >::value );
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-template<> struct is_empty_impl< void > { static const bool value = (false); };
-template<> struct is_empty_impl< void const > { static const bool value = (false); };
-template<> struct is_empty_impl< void volatile > { static const bool value = (false); };
-template<> struct is_empty_impl< void const volatile > { static const bool value = (false); };
-}
-template< typename T > struct is_empty : ::boost::integral_constant<bool,::boost::detail::is_empty_impl<T>::value> { };
-}
-namespace boost {
-template< typename T > struct is_floating_point : ::boost::integral_constant<bool,false> { };
-template<> struct is_floating_point< float > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< float const > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< float volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< float const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_floating_point< double > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< double const > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< double volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< double const volatile > : ::boost::integral_constant<bool,true> { };
-template<> struct is_floating_point< long double > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< long double const > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< long double volatile > : ::boost::integral_constant<bool,true> { }; template<> struct is_floating_point< long double const volatile > : ::boost::integral_constant<bool,true> { };
-}
-namespace boost {
-namespace detail{
-template <typename T>
-struct is_member_object_pointer_impl
+
+
+template <class T, std::size_t N>
+struct rank_imp<T[], N>
 {
-   static const bool value = (::boost::type_traits::ice_and< ::boost::is_member_pointer<T>::value, ::boost::type_traits::ice_not< ::boost::is_member_function_pointer<T>::value >::value >::value );
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-}
-template< typename T > struct is_member_object_pointer : ::boost::integral_constant<bool,::boost::detail::is_member_object_pointer_impl<T>::value> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct is_object_impl
+template <class T, std::size_t N>
+struct rank_imp<T const[], N>
 {
-   static const bool value = (::boost::type_traits::ice_and< ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value, ::boost::type_traits::ice_not< ::boost::is_void<T>::value>::value, ::boost::type_traits::ice_not< ::boost::is_function<T>::value>::value >::value);
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-}
-template< typename T > struct is_object : ::boost::integral_constant<bool,::boost::detail::is_object_impl<T>::value> { };
-}
-namespace boost{
-template< typename T > struct is_polymorphic : ::boost::integral_constant<bool,__is_polymorphic(T)> { };
-}
-namespace boost {
-namespace detail {
-template <typename T>
-struct is_stateless_impl
+template <class T, std::size_t N>
+struct rank_imp<T volatile[], N>
 {
-  static const bool value = (::boost::type_traits::ice_and< ::boost::has_trivial_constructor<T>::value, ::boost::has_trivial_copy<T>::value, ::boost::has_trivial_destructor<T>::value, ::boost::is_class<T>::value, ::boost::is_empty<T>::value >::value);
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
-}
-template< typename T > struct is_stateless : ::boost::integral_constant<bool,::boost::detail::is_stateless_impl<T>::value> { };
-}
-namespace boost {
-namespace detail {
-template <typename T> struct is_union_impl
+template <class T, std::size_t N>
+struct rank_imp<T const volatile[], N>
 {
-   static const bool value = __is_union(T);
+   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
 };
+
+
 }
-template< typename T > struct is_union : ::boost::integral_constant<bool,::boost::detail::is_union_impl<T>::value> { };
-}
-       
+
+
+
+
+
+
+template< typename T > struct rank : ::boost::integral_constant<std::size_t,(::boost::detail::rank_imp<T,0>::value)> {   }; 
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
-namespace detail{
-template <class T, std::size_t N>
-struct rank_imp
-{
-   static const std::size_t value = N;
-};
-template <class T, std::size_t R, std::size_t N>
-struct rank_imp<T[R], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t R, std::size_t N>
-struct rank_imp<T const[R], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t R, std::size_t N>
-struct rank_imp<T volatile[R], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t R, std::size_t N>
-struct rank_imp<T const volatile[R], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t N>
-struct rank_imp<T[], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t N>
-struct rank_imp<T const[], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t N>
-struct rank_imp<T volatile[], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-template <class T, std::size_t N>
-struct rank_imp<T const volatile[], N>
-{
-   static const std::size_t value = (::boost::detail::rank_imp<T, N+1>::value);
-};
-}
-template< typename T > struct rank : ::boost::integral_constant<std::size_t,(::boost::detail::rank_imp<T,0>::value)> { };
-}
-       
+
+template< typename T > struct remove_extent { typedef T type;  }; 
+
+
+template< typename T, std::size_t N > struct remove_extent<T[N]> { typedef T type; };
+template< typename T, std::size_t N > struct remove_extent<T const[N]> { typedef T const type; };
+template< typename T, std::size_t N > struct remove_extent<T volatile[N]> { typedef T volatile type; };
+template< typename T, std::size_t N > struct remove_extent<T const volatile[N]> { typedef T const volatile type; };
+
+template< typename T > struct remove_extent<T[]> { typedef T type; };
+template< typename T > struct remove_extent<T const[]> { typedef T const type; };
+template< typename T > struct remove_extent<T volatile[]> { typedef T volatile type; };
+template< typename T > struct remove_extent<T const volatile[]> { typedef T const volatile type; };
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
-namespace detail{
-template <class T, std::size_t N>
-struct extent_imp
-{
-   static const std::size_t value = 0;
-};
-template <class T, std::size_t R, std::size_t N>
-struct extent_imp<T[R], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t R, std::size_t N>
-struct extent_imp<T const[R], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t R, std::size_t N>
-struct extent_imp<T volatile[R], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t R, std::size_t N>
-struct extent_imp<T const volatile[R], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t R>
-struct extent_imp<T[R],0>
-{
-   static const std::size_t value = R;
-};
-template <class T, std::size_t R>
-struct extent_imp<T const[R], 0>
-{
-   static const std::size_t value = R;
-};
-template <class T, std::size_t R>
-struct extent_imp<T volatile[R], 0>
-{
-   static const std::size_t value = R;
-};
-template <class T, std::size_t R>
-struct extent_imp<T const volatile[R], 0>
-{
-   static const std::size_t value = R;
-};
-template <class T, std::size_t N>
-struct extent_imp<T[], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t N>
-struct extent_imp<T const[], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t N>
-struct extent_imp<T volatile[], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T, std::size_t N>
-struct extent_imp<T const volatile[], N>
-{
-   static const std::size_t value = (::boost::detail::extent_imp<T, N-1>::value);
-};
-template <class T>
-struct extent_imp<T[], 0>
-{
-   static const std::size_t value = 0;
-};
-template <class T>
-struct extent_imp<T const[], 0>
-{
-   static const std::size_t value = 0;
-};
-template <class T>
-struct extent_imp<T volatile[], 0>
+
+template< typename T > struct remove_all_extents { typedef T type;  }; 
+
+
+template< typename T, std::size_t N > struct remove_all_extents<T[N]> { typedef typename boost::remove_all_extents<T>::type type; };
+template< typename T, std::size_t N > struct remove_all_extents<T const[N]> { typedef typename boost::remove_all_extents<T const>::type type; };
+template< typename T, std::size_t N > struct remove_all_extents<T volatile[N]> { typedef typename boost::remove_all_extents<T volatile>::type type; };
+template< typename T, std::size_t N > struct remove_all_extents<T const volatile[N]> { typedef typename boost::remove_all_extents<T const volatile>::type type; };
+
+template< typename T > struct remove_all_extents<T[]> { typedef typename boost::remove_all_extents<T>::type type; };
+template< typename T > struct remove_all_extents<T const[]> { typedef typename boost::remove_all_extents<T const>::type type; };
+template< typename T > struct remove_all_extents<T volatile[]> { typedef typename boost::remove_all_extents<T volatile>::type type; };
+template< typename T > struct remove_all_extents<T const volatile[]> { typedef typename boost::remove_all_extents<T const volatile>::type type; };
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost {
+
+
+
+namespace detail {
+
+template <typename T, bool is_vol>
+struct remove_const_helper
 {
-   static const std::size_t value = 0;
+    typedef T type;
 };
-template <class T>
-struct extent_imp<T const volatile[], 0>
+
+template <typename T>
+struct remove_const_helper<T, true>
 {
-   static const std::size_t value = 0;
+    typedef T volatile type;
 };
-}
-template <class T, std::size_t N = 0>
-struct extent
-   : public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>
+
+
+template <typename T>
+struct remove_const_impl
 {
-   
+    typedef typename remove_const_helper<
+          typename cv_traits_imp<T*>::unqualified_type
+        , ::boost::is_volatile<T>::value
+        >::type type;
 };
-}
-       
-namespace boost {
-template< typename T > struct remove_bounds { typedef T type; };
-template< typename T, std::size_t N > struct remove_bounds<T[N]> { typedef T type; };
-template< typename T, std::size_t N > struct remove_bounds<T const[N]> { typedef T const type; };
-template< typename T, std::size_t N > struct remove_bounds<T volatile[N]> { typedef T volatile type; };
-template< typename T, std::size_t N > struct remove_bounds<T const volatile[N]> { typedef T const volatile type; };
-template< typename T > struct remove_bounds<T[]> { typedef T type; };
-template< typename T > struct remove_bounds<T const[]> { typedef T const type; };
-template< typename T > struct remove_bounds<T volatile[]> { typedef T volatile type; };
-template< typename T > struct remove_bounds<T const volatile[]> { typedef T const volatile type; };
-}
-       
-namespace boost {
-template< typename T > struct remove_extent { typedef T type; };
-template< typename T, std::size_t N > struct remove_extent<T[N]> { typedef T type; };
-template< typename T, std::size_t N > struct remove_extent<T const[N]> { typedef T const type; };
-template< typename T, std::size_t N > struct remove_extent<T volatile[N]> { typedef T volatile type; };
-template< typename T, std::size_t N > struct remove_extent<T const volatile[N]> { typedef T const volatile type; };
-template< typename T > struct remove_extent<T[]> { typedef T type; };
-template< typename T > struct remove_extent<T const[]> { typedef T const type; };
-template< typename T > struct remove_extent<T volatile[]> { typedef T volatile type; };
-template< typename T > struct remove_extent<T const volatile[]> { typedef T const volatile type; };
-}
-       
+
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+template< typename T > struct remove_const { typedef typename boost::detail::remove_const_impl<T>::type type;  }; 
+template< typename T > struct remove_const<T&> { typedef T& type; };
+
+template< typename T, std::size_t N > struct remove_const<T const[N]> { typedef T type[N]; };
+template< typename T, std::size_t N > struct remove_const<T const volatile[N]> { typedef T volatile type[N]; };
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
-template< typename T > struct remove_all_extents { typedef T type; };
-template< typename T, std::size_t N > struct remove_all_extents<T[N]> { typedef typename boost::remove_all_extents<T>::type type; };
-template< typename T, std::size_t N > struct remove_all_extents<T const[N]> { typedef typename boost::remove_all_extents<T const>::type type; };
-template< typename T, std::size_t N > struct remove_all_extents<T volatile[N]> { typedef typename boost::remove_all_extents<T volatile>::type type; };
-template< typename T, std::size_t N > struct remove_all_extents<T const volatile[N]> { typedef typename boost::remove_all_extents<T const volatile>::type type; };
-template< typename T > struct remove_all_extents<T[]> { typedef typename boost::remove_all_extents<T>::type type; };
-template< typename T > struct remove_all_extents<T const[]> { typedef typename boost::remove_all_extents<T const>::type type; };
-template< typename T > struct remove_all_extents<T volatile[]> { typedef typename boost::remove_all_extents<T volatile>::type type; };
-template< typename T > struct remove_all_extents<T const volatile[]> { typedef typename boost::remove_all_extents<T const volatile>::type type; };
-}
-       
+
+
+
+template< typename T > struct remove_pointer { typedef T type;  }; 
+template< typename T > struct remove_pointer<T*> { typedef T type; };
+template< typename T > struct remove_pointer<T* const> { typedef T type; };
+template< typename T > struct remove_pointer<T* volatile> { typedef T type; };
+template< typename T > struct remove_pointer<T* const volatile> { typedef T type; };
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
+
+
+
 namespace detail {
-template <typename T, bool is_vol>
-struct remove_const_helper
+
+template <typename T, bool is_const>
+struct remove_volatile_helper
 {
     typedef T type;
 };
+
 template <typename T>
-struct remove_const_helper<T, true>
+struct remove_volatile_helper<T,true>
 {
-    typedef T volatile type;
+    typedef T const type;
 };
+
 template <typename T>
-struct remove_const_impl
+struct remove_volatile_impl
 {
-    typedef typename remove_const_helper<
+    typedef typename remove_volatile_helper<
           typename cv_traits_imp<T*>::unqualified_type
-        , ::boost::is_volatile<T>::value
+        , ::boost::is_const<T>::value
         >::type type;
 };
-}
-template< typename T > struct remove_const { typedef typename boost::detail::remove_const_impl<T>::type type; };
-template< typename T > struct remove_const<T&> { typedef T& type; };
-template< typename T, std::size_t N > struct remove_const<T const[N]> { typedef T type[N]; };
-template< typename T, std::size_t N > struct remove_const<T const volatile[N]> { typedef T volatile type[N]; };
-}
-namespace boost {
-template< typename T > struct remove_pointer { typedef T type; };
-template< typename T > struct remove_pointer<T*> { typedef T type; };
-template< typename T > struct remove_pointer<T* const> { typedef T type; };
-template< typename T > struct remove_pointer<T* volatile> { typedef T type; };
-template< typename T > struct remove_pointer<T* const volatile> { typedef T type; };
-}
-       
+
+
+
+
+
+
+
+
+
+
+
+
+} 
+
+
+
+template< typename T > struct remove_volatile { typedef typename boost::detail::remove_volatile_impl<T>::type type;  }; 
+template< typename T > struct remove_volatile<T&> { typedef T& type; };
+
+template< typename T, std::size_t N > struct remove_volatile<T volatile[N]> { typedef T type[N]; };
+template< typename T, std::size_t N > struct remove_volatile<T const volatile[N]> { typedef T const type[N]; };
+
+
+
+
+
+
+
+
+} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
-namespace detail {
-template <typename T, bool is_const>
-struct remove_volatile_helper
-{
-    typedef T type;
-};
-template <typename T>
-struct remove_volatile_helper<T,true>
-{
-    typedef T const type;
-};
-template <typename T>
-struct remove_volatile_impl
-{
-    typedef typename remove_volatile_helper<
-          typename cv_traits_imp<T*>::unqualified_type
-        , ::boost::is_const<T>::value
-        >::type type;
-};
-}
-template< typename T > struct remove_volatile { typedef typename boost::detail::remove_volatile_impl<T>::type type; };
-template< typename T > struct remove_volatile<T&> { typedef T& type; };
-template< typename T, std::size_t N > struct remove_volatile<T volatile[N]> { typedef T type[N]; };
-template< typename T, std::size_t N > struct remove_volatile<T const volatile[N]> { typedef T const type[N]; };
-}
-namespace boost { namespace mpl { namespace aux {
-template< typename T > struct value_type_wknd
-{
-    typedef typename T::value_type type;
-};
-}}}
-namespace mpl_ {
-struct void_;
-}
-namespace boost { namespace mpl { using ::mpl_::void_; } }
-namespace mpl_ {
-struct na
-{
-    typedef na type;
-    enum { value = 0 };
-};
-}
-namespace boost { namespace mpl { using ::mpl_::na; } }
-namespace boost { namespace mpl {
-template< typename T >
-struct is_na
-    : false_
-{
-};
-template<>
-struct is_na<na>
-    : true_
-{
-};
-template< typename T >
-struct is_not_na
-    : true_
-{
-};
-template<>
-struct is_not_na<na>
-    : false_
-{
-};
-template< typename T, typename U > struct if_na
-{
-    typedef T type;
-};
-template< typename U > struct if_na<na,U>
-{
-    typedef U type;
-};
-}}
-namespace boost { namespace mpl {
-template<
-      typename T = na
-    , typename Tag = void_
-    , typename Arity = int_< aux::template_arity<T>::value >
-    >
-struct lambda;
-}}
-namespace boost { namespace mpl {
-template<
-      bool C
-    , typename T1
-    , typename T2
-    >
-struct if_c
+
+namespace type_traits { namespace detail {
+
+
+template <class T> struct need_promotion : boost::is_enum<T> {};
+
+
+template<> struct need_promotion<char              > : true_type {};
+template<> struct need_promotion<signed char       > : true_type {};
+template<> struct need_promotion<unsigned char     > : true_type {};
+template<> struct need_promotion<signed short int  > : true_type {};
+template<> struct need_promotion<unsigned short int> : true_type {};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<> struct need_promotion<boost::ulong_long_type> : integral_constant<bool, (sizeof(boost::ulong_long_type) < sizeof(int))> {};
+template<> struct need_promotion<boost::long_long_type> : integral_constant<bool, (sizeof(boost::long_long_type) < sizeof(int))> {};
+
+
+
+
+
+
+
+
+
+
+template<> struct need_promotion<wchar_t> : true_type {};
+
+
+
+
+
+template<> struct need_promotion<bool> : true_type {};
+
+
+
+
+template<int Index, int IsConst, int IsVolatile> struct promote_from_index;
+
+
+
+
+
+
+
+
+template<> struct promote_from_index<1,0,0> { typedef int type; }; template<> struct promote_from_index<1,0,1> { typedef int volatile type; }; template<> struct promote_from_index<1,1,0> { typedef int const type; }; template<> struct promote_from_index<1,1,1> { typedef int const volatile type; };
+template<> struct promote_from_index<2,0,0> { typedef unsigned int type; }; template<> struct promote_from_index<2,0,1> { typedef unsigned int volatile type; }; template<> struct promote_from_index<2,1,0> { typedef unsigned int const type; }; template<> struct promote_from_index<2,1,1> { typedef unsigned int const volatile type; };
+template<> struct promote_from_index<3,0,0> { typedef long type; }; template<> struct promote_from_index<3,0,1> { typedef long volatile type; }; template<> struct promote_from_index<3,1,0> { typedef long const type; }; template<> struct promote_from_index<3,1,1> { typedef long const volatile type; };
+template<> struct promote_from_index<4,0,0> { typedef unsigned long type; }; template<> struct promote_from_index<4,0,1> { typedef unsigned long volatile type; }; template<> struct promote_from_index<4,1,0> { typedef unsigned long const type; }; template<> struct promote_from_index<4,1,1> { typedef unsigned long const volatile type; };
+
+
+
+
+
+
+
+
+template<> struct promote_from_index<5,0,0> { typedef boost::long_long_type type; }; template<> struct promote_from_index<5,0,1> { typedef boost::long_long_type volatile type; }; template<> struct promote_from_index<5,1,0> { typedef boost::long_long_type const type; }; template<> struct promote_from_index<5,1,1> { typedef boost::long_long_type const volatile type; };
+template<> struct promote_from_index<6,0,0> { typedef boost::ulong_long_type type; }; template<> struct promote_from_index<6,0,1> { typedef boost::ulong_long_type volatile type; }; template<> struct promote_from_index<6,1,0> { typedef boost::ulong_long_type const type; }; template<> struct promote_from_index<6,1,1> { typedef boost::ulong_long_type const volatile type; };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+char (&promoted_index_tester(int))[1];
+char (&promoted_index_tester(unsigned int))[2];
+char (&promoted_index_tester(long))[3];
+char (&promoted_index_tester(unsigned long))[4];
+
+
+char (&promoted_index_tester(boost::long_long_type))[5];
+char (&promoted_index_tester(boost::ulong_long_type))[6];
+
+
+
+
+
+
+
+
+
+
+template<class T>
+struct promoted_index
 {
-    typedef T1 type;
+    static T testee; 
+    static const int value = sizeof(promoted_index_tester(+testee));
+    
 };
-template<
-      typename T1
-    , typename T2
-    >
-struct if_c<false,T1,T2>
+
+template<class T>
+struct integral_promotion_impl
 {
-    typedef T2 type;
+    typedef typename promote_from_index<
+        (boost::type_traits::detail::promoted_index<T>::value)
+      , (boost::is_const<T>::value)
+      , (boost::is_volatile<T>::value)
+      >::type type;
 };
-template<
-      typename T1 = na
-    , typename T2 = na
-    , typename T3 = na
-    >
-struct if_
+
+template<class T>
+struct integral_promotion
+  : boost::mpl::eval_if<
+        need_promotion<typename remove_cv<T>::type>
+      , integral_promotion_impl<T>
+      , boost::mpl::identity<T>
+      >
 {
- private:
-    typedef if_c<
-          static_cast<bool>(T1::value)
-        , T2
-        , T3
-        > almost_type_;
- public:
-    typedef typename almost_type_::type type;
-   
 };
-template<> struct if_< na , na , na > { template< typename T1 , typename T2 , typename T3 , typename T4 =na , typename T5 =na > struct apply : if_< T1 , T2 , T3 > { }; }; template< typename Tag > struct lambda< if_< na , na , na > , Tag , int_<-1> > { typedef false_ is_le; typedef if_< na , na , na > result_; typedef if_< na , na , na > type; }; namespace aux { template< typename T1 , typename T2 , typename T3 > struct template_arity< if_< T1 , T2 , T3 > > : int_<3> { }; template<> struct template_arity< if_< na , na , na > > : int_<-1> { }; }
-}}
-namespace boost{
-template <bool x> struct STATIC_ASSERTION_FAILURE;
-template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; };
-template<int x> struct static_assert_test{};
+
+} }
+
+template< typename T > struct integral_promotion { typedef typename boost::type_traits::detail::integral_promotion<T>::type type;  }; 
 }
-       
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost {
+
 namespace detail {
-class alignment_dummy;
-typedef void (*function_ptr)();
-typedef int (alignment_dummy::*member_ptr);
-typedef int (alignment_dummy::*member_function_ptr)();
-template <bool found, std::size_t target, class TestType>
-struct lower_alignment_helper
-{
-    typedef char type;
-    enum { value = true };
-};
-template <std::size_t target, class TestType>
-struct lower_alignment_helper<false,target,TestType>
-{
-    enum { value = (alignment_of<TestType>::value == target) };
-    typedef typename mpl::if_c<value, TestType, char>::type type;
-};
-template <typename T>
-struct has_one_T
-{
-  T data;
-};
-template <std::size_t target>
-union lower_alignment
-{
-    enum { found0 = false };
-    typename lower_alignment_helper< found0,target,char >::type t0; enum { found1 = lower_alignment_helper<found0,target,char >::value }; typename lower_alignment_helper< found1,target,short >::type t1; enum { found2 = lower_alignment_helper<found1,target,short >::value }; typename lower_alignment_helper< found2,target,int >::type t2; enum { found3 = lower_alignment_helper<found2,target,int >::value }; typename lower_alignment_helper< found3,target,long >::type t3; enum { found4 = lower_alignment_helper<found3,target,long >::value }; typename lower_alignment_helper< found4,target,::boost::long_long_type >::type t4; enum { found5 = lower_alignment_helper<found4,target,::boost::long_long_type >::value }; typename lower_alignment_helper< found5,target,float >::type t5; enum { found6 = lower_alignment_helper<found5,target,float >::value }; typename lower_alignment_helper< found6,target,double >::type t6; enum { found7 = lower_alignment_helper<found6,target,double >::value }; typename lower_alignment_helper< fou
nd7,target,long double >::type t7; enum { found8 = lower_alignment_helper<found7,target,long double >::value }; typename lower_alignment_helper< found8,target,void* >::type t8; enum { found9 = lower_alignment_helper<found8,target,void* >::value }; typename lower_alignment_helper< found9,target,function_ptr >::type t9; enum { found10 = lower_alignment_helper<found9,target,function_ptr >::value }; typename lower_alignment_helper< found10,target,member_ptr >::type t10; enum { found11 = lower_alignment_helper<found10,target,member_ptr >::value }; typename lower_alignment_helper< found11,target,member_function_ptr >::type t11; enum { found12 = lower_alignment_helper<found11,target,member_function_ptr >::value }; typename lower_alignment_helper< found12,target,boost::detail::has_one_T< char > >::type t12; enum { found13 = lower_alignment_helper<found12,target,boost::detail::has_one_T< char > >::value }; typename lower_alignment_helper< found13,target,boost::detail::has_one_T< short > >::type t13; enum { found14 = 
lower_alignment_helper<found13,target,boost::detail::has_one_T< short > >::value }; typename lower_alignment_helper< found14,target,boost::detail::has_one_T< int > >::type t14; enum { found15 = lower_alignment_helper<found14,target,boost::detail::has_one_T< int > >::value }; typename lower_alignment_helper< found15,target,boost::detail::has_one_T< long > >::type t15; enum { found16 = lower_alignment_helper<found15,target,boost::detail::has_one_T< long > >::value }; typename lower_alignment_helper< found16,target,boost::detail::has_one_T< ::boost::long_long_type > >::type t16; enum { found17 = lower_alignment_helper<found16,target,boost::detail::has_one_T< ::boost::long_long_type > >::value }; typename lower_alignment_helper< found17,target,boost::detail::has_one_T< float > >::type t17; enum { found18 = lower_alignment_helper<found17,target,boost::detail::has_one_T< float > >::value }; typename lower_alignment_helper< found18,target,boost::detail::has_one_T< double > >::type t18; enum { found19 = lower_alignm
ent_helper<found18,target,boost::detail::has_one_T< double > >::value }; typename lower_alignment_helper< found19,target,boost::detail::has_one_T< long double > >::type t19; enum { found20 = lower_alignment_helper<found19,target,boost::detail::has_one_T< long double > >::value }; typename lower_alignment_helper< found20,target,boost::detail::has_one_T< void* > >::type t20; enum { found21 = lower_alignment_helper<found20,target,boost::detail::has_one_T< void* > >::value }; typename lower_alignment_helper< found21,target,boost::detail::has_one_T< function_ptr > >::type t21; enum { found22 = lower_alignment_helper<found21,target,boost::detail::has_one_T< function_ptr > >::value }; typename lower_alignment_helper< found22,target,boost::detail::has_one_T< member_ptr > >::type t22; enum { found23 = lower_alignment_helper<found22,target,boost::detail::has_one_T< member_ptr > >::value }; typename lower_alignment_helper< found23,target,boost::detail::has_one_T< member_function_ptr > >::type t23; enum { found24 = lowe
r_alignment_helper<found23,target,boost::detail::has_one_T< member_function_ptr > >::value };
-};
-union max_align
-{
-    char t0; short t1; int t2; long t3; ::boost::long_long_type t4; float t5; double t6; long double t7; void* t8; function_ptr t9; member_ptr t10; member_function_ptr t11; boost::detail::has_one_T< char > t12; boost::detail::has_one_T< short > t13; boost::detail::has_one_T< int > t14; boost::detail::has_one_T< long > t15; boost::detail::has_one_T< ::boost::long_long_type > t16; boost::detail::has_one_T< float > t17; boost::detail::has_one_T< double > t18; boost::detail::has_one_T< long double > t19; boost::detail::has_one_T< void* > t20; boost::detail::has_one_T< function_ptr > t21; boost::detail::has_one_T< member_ptr > t22; boost::detail::has_one_T< member_function_ptr > t23;
-};
-template<std::size_t TAlign, std::size_t Align>
-struct is_aligned
-{
-    static const bool value = (TAlign >= Align) & (TAlign % Align == 0);
-};
-}
-template<std::size_t Align>
-struct is_pod< ::boost::detail::lower_alignment<Align> >
-{
-        static const std::size_t value = true;
-};
-namespace detail{
-template <std::size_t Align>
-class type_with_alignment_imp
-{
-    typedef ::boost::detail::lower_alignment<Align> t1;
-    typedef typename mpl::if_c<
-          ::boost::detail::is_aligned< ::boost::alignment_of<t1>::value,Align >::value
-        , t1
-        , ::boost::detail::max_align
-        >::type align_t;
-    static const std::size_t found = alignment_of<align_t>::value;
-    typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< ((found >= Align) == 0 ? false : true) >)> boost_static_assert_typedef_206;
-    typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< ((found % Align == 0) == 0 ? false : true) >)> boost_static_assert_typedef_207;
- public:
-    typedef align_t type;
-};
-}
-template <std::size_t Align>
-class type_with_alignment
-  : public ::boost::detail::type_with_alignment_imp<Align>
+
+template<class T>
+struct promote_impl
+  : integral_promotion<
+        typename floating_point_promotion<T>::type
+      >
 {
 };
-namespace align {
-struct __attribute__((__aligned__(2))) a2 {};
-struct __attribute__((__aligned__(4))) a4 {};
-struct __attribute__((__aligned__(8))) a8 {};
-struct __attribute__((__aligned__(16))) a16 {};
-struct __attribute__((__aligned__(32))) a32 {};
-}
-template<> class type_with_alignment<1> { public: typedef char type; };
-template<> class type_with_alignment<2> { public: typedef align::a2 type; };
-template<> class type_with_alignment<4> { public: typedef align::a4 type; };
-template<> class type_with_alignment<8> { public: typedef align::a8 type; };
-template<> class type_with_alignment<16> { public: typedef align::a16 type; };
-template<> class type_with_alignment<32> { public: typedef align::a32 type; };
-namespace detail {
-template<> struct is_pod_impl< ::boost::align::a2 > { static const bool value = (true); };
-template<> struct is_pod_impl< ::boost::align::a4 > { static const bool value = (true); };
-template<> struct is_pod_impl< ::boost::align::a8 > { static const bool value = (true); };
-template<> struct is_pod_impl< ::boost::align::a16 > { static const bool value = (true); };
-template<> struct is_pod_impl< ::boost::align::a32 > { static const bool value = (true); };
+
 }
+
+template< typename T > struct promote { typedef typename boost::detail::promote_impl<T>::type type;  }; 
 }
-namespace boost {
-namespace detail {
-template<typename Function> struct function_traits_helper;
-template<typename R>
-struct function_traits_helper<R (*)(void)>
-{
-  static const unsigned arity = 0;
-  typedef R result_type;
-};
-template<typename R, typename T1>
-struct function_traits_helper<R (*)(T1)>
-{
-  static const unsigned arity = 1;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T1 argument_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                
+
+
+
+
+
+
+
+namespace boost { namespace local { namespace aux {
+
+template<typename F, unsigned int defaults_count = 0> 
+struct abstract_function {}; 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    
+    
+>
+struct abstract_function<
+      R ()
+    , 0
+> {
+    
+    virtual R operator()() = 0;
 };
-template<typename R, typename T1, typename T2>
-struct function_traits_helper<R (*)(T1, T2)>
-{
-  static const unsigned arity = 2;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T1 first_argument_type;
-  typedef T2 second_argument_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0
+>
+struct abstract_function<
+      R ( A0)
+    , 0
+> {
+    
+    virtual R operator()( A0) = 0;
 };
-template<typename R, typename T1, typename T2, typename T3>
-struct function_traits_helper<R (*)(T1, T2, T3)>
-{
-  static const unsigned arity = 3;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0
+>
+struct abstract_function<
+      R ( A0)
+    , 1
+> {
+    
+    virtual R operator()( A0) = 0; virtual R operator()() = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4>
-struct function_traits_helper<R (*)(T1, T2, T3, T4)>
-{
-  static const unsigned arity = 4;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1
+>
+struct abstract_function<
+      R ( A0 , A1)
+    , 0
+> {
+    
+    virtual R operator()( A0 , A1) = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4,
-         typename T5>
-struct function_traits_helper<R (*)(T1, T2, T3, T4, T5)>
-{
-  static const unsigned arity = 5;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
-  typedef T5 arg5_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1
+>
+struct abstract_function<
+      R ( A0 , A1)
+    , 1
+> {
+    
+    virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4,
-         typename T5, typename T6>
-struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6)>
-{
-  static const unsigned arity = 6;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
-  typedef T5 arg5_type;
-  typedef T6 arg6_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1
+>
+struct abstract_function<
+      R ( A0 , A1)
+    , 2
+> {
+    
+    virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4,
-         typename T5, typename T6, typename T7>
-struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7)>
-{
-  static const unsigned arity = 7;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
-  typedef T5 arg5_type;
-  typedef T6 arg6_type;
-  typedef T7 arg7_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+struct abstract_function<
+      R ( A0 , A1 , A2)
+    , 0
+> {
+    
+    virtual R operator()( A0 , A1 , A2) = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4,
-         typename T5, typename T6, typename T7, typename T8>
-struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8)>
-{
-  static const unsigned arity = 8;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
-  typedef T5 arg5_type;
-  typedef T6 arg6_type;
-  typedef T7 arg7_type;
-  typedef T8 arg8_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+struct abstract_function<
+      R ( A0 , A1 , A2)
+    , 1
+> {
+    
+    virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4,
-         typename T5, typename T6, typename T7, typename T8, typename T9>
-struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9)>
-{
-  static const unsigned arity = 9;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
-  typedef T5 arg5_type;
-  typedef T6 arg6_type;
-  typedef T7 arg7_type;
-  typedef T8 arg8_type;
-  typedef T9 arg9_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+struct abstract_function<
+      R ( A0 , A1 , A2)
+    , 2
+> {
+    
+    virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
 };
-template<typename R, typename T1, typename T2, typename T3, typename T4,
-         typename T5, typename T6, typename T7, typename T8, typename T9,
-         typename T10>
-struct function_traits_helper<R (*)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>
-{
-  static const unsigned arity = 10;
-  typedef R result_type;
-  typedef T1 arg1_type;
-  typedef T2 arg2_type;
-  typedef T3 arg3_type;
-  typedef T4 arg4_type;
-  typedef T5 arg5_type;
-  typedef T6 arg6_type;
-  typedef T7 arg7_type;
-  typedef T8 arg8_type;
-  typedef T9 arg9_type;
-  typedef T10 arg10_type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+struct abstract_function<
+      R ( A0 , A1 , A2)
+    , 3
+> {
+    
+    virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
 };
-}
-template<typename Function>
-struct function_traits :
-   public detail::function_traits_helper<typename boost::add_pointer<Function>::type>
-{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3)
+    , 0
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3) = 0;
 };
-}
-       
-namespace boost { namespace mpl {
-template<
-      typename C = na
-    , typename F1 = na
-    , typename F2 = na
-    >
-struct eval_if
-{
-    typedef typename if_<C,F1,F2>::type f_;
-    typedef typename f_::type type;
-   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3)
+    , 1
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0;
 };
-template<
-      bool C
-    , typename F1
-    , typename F2
-    >
-struct eval_if_c
-{
-    typedef typename if_c<C,F1,F2>::type f_;
-    typedef typename f_::type type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3)
+    , 2
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0;
 };
-template<> struct eval_if< na , na , na > { template< typename T1 , typename T2 , typename T3 , typename T4 =na , typename T5 =na > struct apply : eval_if< T1 , T2 , T3 > { }; }; template< typename Tag > struct lambda< eval_if< na , na , na > , Tag , int_<-1> > { typedef false_ is_le; typedef eval_if< na , na , na > result_; typedef eval_if< na , na , na > type; }; namespace aux { template< typename T1 , typename T2 , typename T3 > struct template_arity< eval_if< T1 , T2 , T3 > > : int_<3> { }; template<> struct template_arity< eval_if< na , na , na > > : int_<-1> { }; }
-}}
-namespace boost { namespace mpl {
-template<
-      typename T = na
-    >
-struct identity
-{
-    typedef T type;
-   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3)
+    , 3
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
 };
-template<
-      typename T = na
-    >
-struct make_identity
-{
-    typedef identity<T> type;
-   
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3)
+    , 4
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
 };
-template<> struct identity< na > { template< typename T1 , typename T2 =na , typename T3 =na , typename T4 =na , typename T5 =na > struct apply : identity< T1 > { }; }; template< typename Tag > struct lambda< identity< na > , Tag , int_<-1> > { typedef false_ is_le; typedef identity< na > result_; typedef identity< na > type; }; namespace aux { template< typename T1 > struct template_arity< identity< T1 > > : int_<1> { }; template<> struct template_arity< identity< na > > : int_<-1> { }; }
-template<> struct make_identity< na > { template< typename T1 , typename T2 =na , typename T3 =na , typename T4 =na , typename T5 =na > struct apply : make_identity< T1 > { }; }; template< typename Tag > struct lambda< make_identity< na > , Tag , int_<-1> > { typedef false_ is_le; typedef make_identity< na > result_; typedef make_identity< na > type; }; namespace aux { template< typename T1 > struct template_arity< make_identity< T1 > > : int_<1> { }; template<> struct template_arity< make_identity< na > > : int_<-1> { }; }
-}}
-namespace boost {
-namespace detail { namespace aligned_storage {
-static const std::size_t alignment_of_max_align = ::boost::alignment_of<max_align>::value;
-template <
-      std::size_t size_
-    , std::size_t alignment_
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
-struct aligned_storage_imp
-{
-    union data_t
-    {
-        char buf[size_];
-        typename mpl::eval_if_c<
-              alignment_ == std::size_t(-1)
-            , mpl::identity<detail::max_align>
-            , type_with_alignment<alignment_>
-            >::type align_;
-    } data_;
-    void* address() const { return const_cast<aligned_storage_imp*>(this); }
-};
-template< std::size_t alignment_ >
-struct aligned_storage_imp<0u,alignment_>
-{
-    void* address() const { return 0; }
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 0
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0;
 };
-}}
-template <
-      std::size_t size_
-    , std::size_t alignment_ = std::size_t(-1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
-class aligned_storage :
-   private
-   detail::aligned_storage::aligned_storage_imp<size_, alignment_>
-{
-public:
-    typedef detail::aligned_storage::aligned_storage_imp<size_, alignment_> type;
-    static const std::size_t size = size_;
-    static const std::size_t alignment = ( alignment_ == std::size_t(-1) ? ::boost::detail::aligned_storage::alignment_of_max_align : alignment_ );
-private:
-    aligned_storage(const aligned_storage&);
-    aligned_storage& operator=(const aligned_storage&);
-public:
-    aligned_storage()
-    {
-    }
-    ~aligned_storage()
-    {
-    }
-public:
-    void* address()
-    {
-        return static_cast<type*>(this)->address();
-    }
-    const void* address() const
-    {
-        return static_cast<const type*>(this)->address();
-    }
-};
-template <std::size_t size_, std::size_t alignment_>
-struct is_pod<boost::detail::aligned_storage::aligned_storage_imp<size_,alignment_> >
-   : ::boost::integral_constant<bool,true>
-{
-   
-};
-}
-namespace boost {
-namespace type_traits { namespace detail {
-template<class T>
-struct floating_point_promotion
-{
-    typedef T type;
-};
-template<>
-struct floating_point_promotion<float>
-{
-    typedef double type;
-};
-template<>
-struct floating_point_promotion<float const>
-{
-    typedef double const type;
-};
-template<>
-struct floating_point_promotion<float volatile>
-{
-    typedef double volatile type;
-};
-template<>
-struct floating_point_promotion<float const volatile>
-{
-    typedef double const volatile type;
-};
-} }
-template< typename T > struct floating_point_promotion { typedef typename boost::type_traits::detail::floating_point_promotion<T>::type type; };
-}
-namespace boost {
-namespace type_traits { namespace detail {
-template <class T> struct need_promotion : boost::is_enum<T> {};
-template<> struct need_promotion<char > : true_type {};
-template<> struct need_promotion<signed char > : true_type {};
-template<> struct need_promotion<unsigned char > : true_type {};
-template<> struct need_promotion<signed short int > : true_type {};
-template<> struct need_promotion<unsigned short int> : true_type {};
-template<> struct need_promotion<boost::ulong_long_type> : integral_constant<bool, (sizeof(boost::ulong_long_type) < sizeof(int))> {};
-template<> struct need_promotion<boost::long_long_type> : integral_constant<bool, (sizeof(boost::long_long_type) < sizeof(int))> {};
-template<> struct need_promotion<wchar_t> : true_type {};
-template<> struct need_promotion<bool> : true_type {};
-template<int Index, int IsConst, int IsVolatile> struct promote_from_index;
-template<> struct promote_from_index<1,0,0> { typedef int type; }; template<> struct promote_from_index<1,0,1> { typedef int volatile type; }; template<> struct promote_from_index<1,1,0> { typedef int const type; }; template<> struct promote_from_index<1,1,1> { typedef int const volatile type; };
-template<> struct promote_from_index<2,0,0> { typedef unsigned int type; }; template<> struct promote_from_index<2,0,1> { typedef unsigned int volatile type; }; template<> struct promote_from_index<2,1,0> { typedef unsigned int const type; }; template<> struct promote_from_index<2,1,1> { typedef unsigned int const volatile type; };
-template<> struct promote_from_index<3,0,0> { typedef long type; }; template<> struct promote_from_index<3,0,1> { typedef long volatile type; }; template<> struct promote_from_index<3,1,0> { typedef long const type; }; template<> struct promote_from_index<3,1,1> { typedef long const volatile type; };
-template<> struct promote_from_index<4,0,0> { typedef unsigned long type; }; template<> struct promote_from_index<4,0,1> { typedef unsigned long volatile type; }; template<> struct promote_from_index<4,1,0> { typedef unsigned long const type; }; template<> struct promote_from_index<4,1,1> { typedef unsigned long const volatile type; };
-template<> struct promote_from_index<5,0,0> { typedef boost::long_long_type type; }; template<> struct promote_from_index<5,0,1> { typedef boost::long_long_type volatile type; }; template<> struct promote_from_index<5,1,0> { typedef boost::long_long_type const type; }; template<> struct promote_from_index<5,1,1> { typedef boost::long_long_type const volatile type; };
-template<> struct promote_from_index<6,0,0> { typedef boost::ulong_long_type type; }; template<> struct promote_from_index<6,0,1> { typedef boost::ulong_long_type volatile type; }; template<> struct promote_from_index<6,1,0> { typedef boost::ulong_long_type const type; }; template<> struct promote_from_index<6,1,1> { typedef boost::ulong_long_type const volatile type; };
-template<int N>
-struct sized_type_for_promotion
-{
-    typedef char (&type)[N];
-};
-sized_type_for_promotion<1>::type promoted_index_tester(int);
-sized_type_for_promotion<2>::type promoted_index_tester(unsigned int);
-sized_type_for_promotion<3>::type promoted_index_tester(long);
-sized_type_for_promotion<4>::type promoted_index_tester(unsigned long);
-sized_type_for_promotion<5>::type promoted_index_tester(boost::long_long_type);
-sized_type_for_promotion<6>::type promoted_index_tester(boost::ulong_long_type);
-template<class T>
-struct promoted_index
-{
-    static T testee;
-    static const int value = sizeof(promoted_index_tester(+testee));
-};
-template<class T>
-struct integral_promotion_impl
-{
-    typedef typename promote_from_index<
-        (boost::type_traits::detail::promoted_index<T>::value)
-      , (boost::is_const<T>::value)
-      , (boost::is_volatile<T>::value)
-      >::type type;
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 1
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0;
 };
-template<class T>
-struct integral_promotion
-  : boost::mpl::eval_if<
-        need_promotion<typename remove_cv<T>::type>
-      , integral_promotion_impl<T>
-      , boost::mpl::identity<T>
-      >
-{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 2
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0;
 };
-} }
-template< typename T > struct integral_promotion { typedef typename boost::type_traits::detail::integral_promotion<T>::type type; };
-}
-namespace boost {
-namespace detail {
-template<class T>
-struct promote_impl
-  : integral_promotion<
-        typename floating_point_promotion<T>::type
-      >
-{
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 3
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0;
 };
-}
-template< typename T > struct promote { typedef typename boost::detail::promote_impl<T>::type type; };
-}
-namespace boost {
-namespace detail {
-template <class T>
-struct make_unsigned_imp
-{
-   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (((::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value)) == 0 ? false : true) >)> boost_static_assert_typedef_39;
-   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (((::boost::type_traits::ice_not< ::boost::is_same< typename remove_cv<T>::type, bool>::value>::value)) == 0 ? false : true) >)> boost_static_assert_typedef_43;
-   typedef typename remove_cv<T>::type t_no_cv;
-   typedef typename mpl::if_c<
-      (::boost::type_traits::ice_and<
-         ::boost::is_unsigned<T>::value,
-         ::boost::is_integral<T>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),
-      T,
-      typename mpl::if_c<
-         (::boost::type_traits::ice_and<
-            ::boost::is_integral<T>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>
-         ::value),
-         typename mpl::if_<
-            is_same<t_no_cv, signed char>,
-            unsigned char,
-            typename mpl::if_<
-               is_same<t_no_cv, short>,
-               unsigned short,
-               typename mpl::if_<
-                  is_same<t_no_cv, int>,
-                  unsigned int,
-                  typename mpl::if_<
-                     is_same<t_no_cv, long>,
-                     unsigned long,
-                     boost::ulong_long_type
-                  >::type
-               >::type
-            >::type
-         >::type,
-         typename mpl::if_c<
-            sizeof(t_no_cv) == sizeof(unsigned char),
-            unsigned char,
-            typename mpl::if_c<
-               sizeof(t_no_cv) == sizeof(unsigned short),
-               unsigned short,
-               typename mpl::if_c<
-                  sizeof(t_no_cv) == sizeof(unsigned int),
-                  unsigned int,
-                  typename mpl::if_c<
-                     sizeof(t_no_cv) == sizeof(unsigned long),
-                     unsigned long,
-                     boost::ulong_long_type
-                  >::type
-               >::type
-            >::type
-         >::type
-      >::type
-   >::type base_integer_type;
-   typedef typename mpl::if_<
-      is_const<T>,
-      typename add_const<base_integer_type>::type,
-      base_integer_type
-   >::type const_base_integer_type;
-   typedef typename mpl::if_<
-      is_volatile<T>,
-      typename add_volatile<const_base_integer_type>::type,
-      const_base_integer_type
-   >::type type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 4
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
 };
-}
-template< typename T > struct make_unsigned { typedef typename boost::detail::make_unsigned_imp<T>::type type; };
-}
-namespace boost {
-namespace detail {
-template <class T>
-struct make_signed_imp
-{
-   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (((::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_enum<T>::value>::value)) == 0 ? false : true) >)> boost_static_assert_typedef_39;
-   typedef ::boost::static_assert_test< sizeof(::boost::STATIC_ASSERTION_FAILURE< (((::boost::type_traits::ice_not< ::boost::is_same< typename remove_cv<T>::type, bool>::value>::value)) == 0 ? false : true) >)> boost_static_assert_typedef_43;
-   typedef typename remove_cv<T>::type t_no_cv;
-   typedef typename mpl::if_c<
-      (::boost::type_traits::ice_and<
-         ::boost::is_signed<T>::value,
-         ::boost::is_integral<T>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-         ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value >::value),
-      T,
-      typename mpl::if_c<
-         (::boost::type_traits::ice_and<
-            ::boost::is_integral<T>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, char>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, wchar_t>::value>::value,
-            ::boost::type_traits::ice_not< ::boost::is_same<t_no_cv, bool>::value>::value>
-         ::value),
-         typename mpl::if_<
-            is_same<t_no_cv, unsigned char>,
-            signed char,
-            typename mpl::if_<
-               is_same<t_no_cv, unsigned short>,
-               signed short,
-               typename mpl::if_<
-                  is_same<t_no_cv, unsigned int>,
-                  int,
-                  typename mpl::if_<
-                     is_same<t_no_cv, unsigned long>,
-                     long,
-                     boost::long_long_type
-                  >::type
-               >::type
-            >::type
-         >::type,
-         typename mpl::if_c<
-            sizeof(t_no_cv) == sizeof(unsigned char),
-            signed char,
-            typename mpl::if_c<
-               sizeof(t_no_cv) == sizeof(unsigned short),
-               signed short,
-               typename mpl::if_c<
-                  sizeof(t_no_cv) == sizeof(unsigned int),
-                  int,
-                  typename mpl::if_c<
-                     sizeof(t_no_cv) == sizeof(unsigned long),
-                     long,
-                     boost::long_long_type
-                  >::type
-               >::type
-            >::type
-         >::type
-      >::type
-   >::type base_integer_type;
-   typedef typename mpl::if_<
-      is_const<T>,
-      typename add_const<base_integer_type>::type,
-      base_integer_type
-   >::type const_base_integer_type;
-   typedef typename mpl::if_<
-      is_volatile<T>,
-      typename add_volatile<const_base_integer_type>::type,
-      const_base_integer_type
-   >::type type;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+>
+struct abstract_function<
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 5
+> {
+    
+    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
 };
-}
-template< typename T > struct make_signed { typedef typename boost::detail::make_signed_imp<T>::type type; };
-}
-namespace boost
-{
-    template< class T >
-    struct decay
-    {
-    private:
-        typedef typename remove_reference<T>::type Ty;
-    public:
-        typedef typename mpl::eval_if<
-            is_array<Ty>,
-            mpl::identity<typename remove_bounds<Ty>::type*>,
-            typename mpl::eval_if<
-                is_function<Ty>,
-                add_pointer<Ty>,
-                mpl::identity<Ty>
-            >
-        >::type type;
-    };
-}
-       
-       
-namespace __gnu_cxx {
-  template<typename _Iterator, typename _Container>
-    class __normal_iterator;
-}
-namespace std {
-  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<class _Sp, class _Tp>
-    struct __traitand
-    {
-      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 {
-  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;
-    };
-}
-       
-extern "C" {
-typedef unsigned long __ULong;
-struct _reent;
-struct _Bigint
-{
-  struct _Bigint *_next;
-  int _k, _maxwds, _sign, _wds;
-  __ULong _x[1];
-};
-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;
-};
-struct _on_exit_args {
- void * _fnargs[32];
- void * _dso_handle[32];
- __ULong _fntypes;
- __ULong _is_cxa;
-};
-struct _atexit {
- struct _atexit *_next;
- int _ind;
- void (*_fns[32])(void);
-        struct _on_exit_args _on_exit_args;
-};
-struct __sbuf {
- unsigned char *_base;
- int _size;
-};
-struct __sFILE {
-  unsigned char *_p;
-  int _r;
-  int _w;
-  short _flags;
-  short _file;
-  struct __sbuf _bf;
-  int _lbfsize;
-  void * _cookie;
-  _ssize_t (__attribute__((__cdecl__)) * _read) (struct _reent *, void *, char *, int);
-  _ssize_t (__attribute__((__cdecl__)) * _write) (struct _reent *, void *, const char *, int);
-  _fpos_t (__attribute__((__cdecl__)) * _seek) (struct _reent *, void *, _fpos_t, int);
-  int (__attribute__((__cdecl__)) * _close) (struct _reent *, void *);
-  struct __sbuf _ub;
-  unsigned char *_up;
-  int _ur;
-  unsigned char _ubuf[3];
-  unsigned char _nbuf[1];
-  struct __sbuf _lb;
-  int _blksize;
-  int _offset;
-  struct _reent *_data;
-  _flock_t _lock;
-  _mbstate_t _mbstate;
-  int _flags2;
-};
-struct __sFILE64 {
-  unsigned char *_p;
-  int _r;
-  int _w;
-  short _flags;
-  short _file;
-  struct __sbuf _bf;
-  int _lbfsize;
-  struct _reent *_data;
-  void * _cookie;
-  _ssize_t (__attribute__((__cdecl__)) * _read) (struct _reent *, void *, char *, int);
-  _ssize_t (__attribute__((__cdecl__)) * _write) (struct _reent *, void *, const char *, int);
-  _fpos_t (__attribute__((__cdecl__)) * _seek) (struct _reent *, void *, _fpos_t, int);
-  int (__attribute__((__cdecl__)) * _close) (struct _reent *, void *);
-  struct __sbuf _ub;
-  unsigned char *_up;
-  int _ur;
-  unsigned char _ubuf[3];
-  unsigned char _nbuf[1];
-  struct __sbuf _lb;
-  int _blksize;
-  int _flags2;
-  _off64_t _offset;
-  _fpos64_t (__attribute__((__cdecl__)) * _seek64) (struct _reent *, void *, _fpos64_t, int);
-  _flock_t _lock;
-  _mbstate_t _mbstate;
-};
-typedef struct __sFILE64 __FILE;
-struct _glue
-{
-  struct _glue *_next;
-  int _niobs;
-  __FILE *_iobs;
-};
-struct _rand48 {
-  unsigned short _seed[3];
-  unsigned short _mult[3];
-  unsigned short _add;
-};
-struct _reent
-{
-  int _errno;
-  __FILE *_stdin, *_stdout, *_stderr;
-  int _inc;
-  char _emergency[25];
-  int _current_category;
-  const char *_current_locale;
-  int __sdidinit;
-  void (__attribute__((__cdecl__)) * __cleanup) (struct _reent *);
-  struct _Bigint *_result;
-  int _result_k;
-  struct _Bigint *_p5s;
-  struct _Bigint **_freelist;
-  int _cvtlen;
-  char *_cvtbuf;
-  union
-    {
-      struct
-        {
-          unsigned int _unused_rand;
-          char * _strtok_last;
-          char _asctime_buf[26];
-          struct __tm _localtime_buf;
-          int _gamma_signgam;
-          __extension__ unsigned long long _rand_next;
-          struct _rand48 _r48;
-          _mbstate_t _mblen_state;
-          _mbstate_t _mbtowc_state;
-          _mbstate_t _wctomb_state;
-          char _l64a_buf[8];
-          char _signal_buf[24];
-          int _getdate_err;
-          _mbstate_t _mbrlen_state;
-          _mbstate_t _mbrtowc_state;
-          _mbstate_t _mbsrtowcs_state;
-          _mbstate_t _wcrtomb_state;
-          _mbstate_t _wcsrtombs_state;
-   int _h_errno;
-        } _reent;
-      struct
-        {
-          unsigned char * _nextf[30];
-          unsigned int _nmalloc[30];
-        } _unused;
-    } _new;
-  struct _atexit *_atexit;
-  struct _atexit _atexit0;
-  void (**(_sig_func))(int);
-  struct _glue __sglue;
-  __FILE __sf[3];
-};
-extern struct _reent *_impure_ptr ;
-extern struct _reent *const _global_impure_ptr ;
-void _reclaim_reent (struct _reent *);
-  struct _reent * __attribute__((__cdecl__)) __getreent (void);
-}
-extern "C" {
-union __dmath
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl { namespace aux {
+
+typedef char (&no_tag)[1];
+typedef char (&yes_tag)[2];
+
+template< bool C_ > struct yes_no_tag
+{
+    typedef no_tag type;
+};
+
+template<> struct yes_no_tag<true>
+{
+    typedef yes_tag type;
+};
+
+
+template< long n > struct weighted_tag
+{
+
+    typedef char (&type)[n];
+
+
+
+
+};
+
+
+
+
+
+
+
+
+}}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace mpl {
+
+struct failed {};
+
+
+
+
+
+
+
+
+
+
+template< bool C >  struct assert        { typedef void* type; };
+template<>          struct assert<false> { typedef assert type; };
+
+template< bool C >
+int assertion_failed( typename assert<C>::type );
+
+template< bool C >
+struct assertion
 {
-  double d;
-  __ULong i[2];
+    static int failed( assert<false> );
 };
-union __fmath
+
+template<>
+struct assertion<true>
 {
-  float f;
-  __ULong i[1];
-};
-union __ldmath
-{
-  long double ld;
-  __ULong i[4];
-};
-extern double atan (double);
-extern double cos (double);
-extern double sin (double);
-extern double tan (double);
-extern double tanh (double);
-extern double frexp (double, int *);
-extern double modf (double, double *);
-extern double ceil (double);
-extern double fabs (double);
-extern double floor (double);
-extern double acos (double);
-extern double asin (double);
-extern double atan2 (double, double);
-extern double cosh (double);
-extern double sinh (double);
-extern double exp (double);
-extern double ldexp (double, int);
-extern double log (double);
-extern double log10 (double);
-extern double pow (double, double);
-extern double sqrt (double);
-extern double fmod (double, double);
-typedef float float_t;
-typedef double double_t;
-extern int __isinff (float x);
-extern int __isinfd (double x);
-extern int __isnanf (float x);
-extern int __isnand (double x);
-extern int __fpclassifyf (float x);
-extern int __fpclassifyd (double x);
-extern int __signbitf (float x);
-extern int __signbitd (double x);
-extern double infinity (void);
-extern double nan (const char *);
-extern int finite (double);
-extern double copysign (double, double);
-extern double logb (double);
-extern int ilogb (double);
-extern double asinh (double);
-extern double cbrt (double);
-extern double nextafter (double, double);
-extern double rint (double);
-extern double scalbn (double, int);
-extern double exp2 (double);
-extern double scalbln (double, long int);
-extern double tgamma (double);
-extern double nearbyint (double);
-extern long int lrint (double);
-extern long long int llrint (double);
-extern double round (double);
-extern long int lround (double);
-extern long long int llround (double);
-extern double trunc (double);
-extern double remquo (double, double, int *);
-extern double fdim (double, double);
-extern double fmax (double, double);
-extern double fmin (double, double);
-extern double fma (double, double, double);
-extern double log1p (double);
-extern double expm1 (double);
-extern double acosh (double);
-extern double atanh (double);
-extern double remainder (double, double);
-extern double gamma (double);
-extern double lgamma (double);
-extern double erf (double);
-extern double erfc (double);
-extern double log2 (double);
-extern double hypot (double, double);
-extern float atanf (float);
-extern float cosf (float);
-extern float sinf (float);
-extern float tanf (float);
-extern float tanhf (float);
-extern float frexpf (float, int *);
-extern float modff (float, float *);
-extern float ceilf (float);
-extern float fabsf (float);
-extern float floorf (float);
-extern float acosf (float);
-extern float asinf (float);
-extern float atan2f (float, float);
-extern float coshf (float);
-extern float sinhf (float);
-extern float expf (float);
-extern float ldexpf (float, int);
-extern float logf (float);
-extern float log10f (float);
-extern float powf (float, float);
-extern float sqrtf (float);
-extern float fmodf (float, float);
-extern float exp2f (float);
-extern float scalblnf (float, long int);
-extern float tgammaf (float);
-extern float nearbyintf (float);
-extern long int lrintf (float);
-extern long long llrintf (float);
-extern float roundf (float);
-extern long int lroundf (float);
-extern long long int llroundf (float);
-extern float truncf (float);
-extern float remquof (float, float, int *);
-extern float fdimf (float, float);
-extern float fmaxf (float, float);
-extern float fminf (float, float);
-extern float fmaf (float, float, float);
-extern float infinityf (void);
-extern float nanf (const char *);
-extern int finitef (float);
-extern float copysignf (float, float);
-extern float logbf (float);
-extern int ilogbf (float);
-extern float asinhf (float);
-extern float cbrtf (float);
-extern float nextafterf (float, float);
-extern float rintf (float);
-extern float scalbnf (float, int);
-extern float log1pf (float);
-extern float expm1f (float);
-extern float acoshf (float);
-extern float atanhf (float);
-extern float remainderf (float, float);
-extern float gammaf (float);
-extern float lgammaf (float);
-extern float erff (float);
-extern float erfcf (float);
-extern float log2f (float);
-extern float hypotf (float, float);
-extern long double rintl (long double);
-extern long int lrintl (long double);
-extern long long llrintl (long double);
-extern double cabs();
-extern double drem (double, double);
-extern void sincos (double, double *, double *);
-extern double gamma_r (double, int *);
-extern double lgamma_r (double, int *);
-extern double y0 (double);
-extern double y1 (double);
-extern double yn (int, double);
-extern double j0 (double);
-extern double j1 (double);
-extern double jn (int, double);
-extern float cabsf();
-extern float dremf (float, float);
-extern void sincosf (float, float *, float *);
-extern float gammaf_r (float, int *);
-extern float lgammaf_r (float, int *);
-extern float y0f (float);
-extern float y1f (float);
-extern float ynf (int, float);
-extern float j0f (float);
-extern float j1f (float);
-extern float jnf (int, float);
-extern double exp10 (double);
-extern double pow10 (double);
-extern float exp10f (float);
-extern float pow10f (float);
-extern int *__signgam (void);
-struct __exception
-{
-  int type;
-  char *name;
-  double arg1;
-  double arg2;
-  double retval;
-  int err;
-};
-extern int matherr (struct __exception *e);
-enum __fdlibm_version
-{
-  __fdlibm_ieee = -1,
-  __fdlibm_svid,
-  __fdlibm_xopen,
-  __fdlibm_posix
+    static int failed( void* );
 };
-extern __attribute__((dllimport)) enum __fdlibm_version __fdlib_version;
-}
-namespace std {
-  template<typename _Tp>
-    _Tp __cmath_power(_Tp, unsigned int);
-  template<typename _Tp>
-    inline _Tp
-    __pow_helper(_Tp __x, int __n)
-    {
-      return __n < 0
-        ? _Tp(1)/__cmath_power(__x, -__n)
-        : __cmath_power(__x, __n);
-    }
-  inline double
-  abs(double __x)
-  { return __builtin_fabs(__x); }
-  inline float
-  abs(float __x)
-  { return __builtin_fabsf(__x); }
-  inline long double
-  abs(long double __x)
-  { return __builtin_fabsl(__x); }
-  using ::acos;
-  inline float
-  acos(float __x)
-  { return __builtin_acosf(__x); }
-  inline long double
-  acos(long double __x)
-  { return __builtin_acosl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    acos(_Tp __x)
-    { return __builtin_acos(__x); }
-  using ::asin;
-  inline float
-  asin(float __x)
-  { return __builtin_asinf(__x); }
-  inline long double
-  asin(long double __x)
-  { return __builtin_asinl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    asin(_Tp __x)
-    { return __builtin_asin(__x); }
-  using ::atan;
-  inline float
-  atan(float __x)
-  { return __builtin_atanf(__x); }
-  inline long double
-  atan(long double __x)
-  { return __builtin_atanl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    atan(_Tp __x)
-    { return __builtin_atan(__x); }
-  using ::atan2;
-  inline float
-  atan2(float __y, float __x)
-  { return __builtin_atan2f(__y, __x); }
-  inline long double
-  atan2(long double __y, long double __x)
-  { return __builtin_atan2l(__y, __x); }
-  template<typename _Tp, typename _Up>
-    inline
-    typename __gnu_cxx::__promote_2<
-    typename __gnu_cxx::__enable_if<__traitand<__is_arithmetic<_Tp>,
-            __is_arithmetic<_Up> >::__value,
-        _Tp>::__type, _Up>::__type
-    atan2(_Tp __y, _Up __x)
-    {
-      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-      return atan2(__type(__y), __type(__x));
-    }
-  using ::ceil;
-  inline float
-  ceil(float __x)
-  { return __builtin_ceilf(__x); }
-  inline long double
-  ceil(long double __x)
-  { return __builtin_ceill(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    ceil(_Tp __x)
-    { return __builtin_ceil(__x); }
-  using ::cos;
-  inline float
-  cos(float __x)
-  { return __builtin_cosf(__x); }
-  inline long double
-  cos(long double __x)
-  { return __builtin_cosl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    cos(_Tp __x)
-    { return __builtin_cos(__x); }
-  using ::cosh;
-  inline float
-  cosh(float __x)
-  { return __builtin_coshf(__x); }
-  inline long double
-  cosh(long double __x)
-  { return __builtin_coshl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    cosh(_Tp __x)
-    { return __builtin_cosh(__x); }
-  using ::exp;
-  inline float
-  exp(float __x)
-  { return __builtin_expf(__x); }
-  inline long double
-  exp(long double __x)
-  { return __builtin_expl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    exp(_Tp __x)
-    { return __builtin_exp(__x); }
-  using ::fabs;
-  inline float
-  fabs(float __x)
-  { return __builtin_fabsf(__x); }
-  inline long double
-  fabs(long double __x)
-  { return __builtin_fabsl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    fabs(_Tp __x)
-    { return __builtin_fabs(__x); }
-  using ::floor;
-  inline float
-  floor(float __x)
-  { return __builtin_floorf(__x); }
-  inline long double
-  floor(long double __x)
-  { return __builtin_floorl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    floor(_Tp __x)
-    { return __builtin_floor(__x); }
-  using ::fmod;
-  inline float
-  fmod(float __x, float __y)
-  { return __builtin_fmodf(__x, __y); }
-  inline long double
-  fmod(long double __x, long double __y)
-  { return __builtin_fmodl(__x, __y); }
-  using ::frexp;
-  inline float
-  frexp(float __x, int* __exp)
-  { return __builtin_frexpf(__x, __exp); }
-  inline long double
-  frexp(long double __x, int* __exp)
-  { return __builtin_frexpl(__x, __exp); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    frexp(_Tp __x, int* __exp)
-    { return __builtin_frexp(__x, __exp); }
-  using ::ldexp;
-  inline float
-  ldexp(float __x, int __exp)
-  { return __builtin_ldexpf(__x, __exp); }
-  inline long double
-  ldexp(long double __x, int __exp)
-  { return __builtin_ldexpl(__x, __exp); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-  ldexp(_Tp __x, int __exp)
-  { return __builtin_ldexp(__x, __exp); }
-  using ::log;
-  inline float
-  log(float __x)
-  { return __builtin_logf(__x); }
-  inline long double
-  log(long double __x)
-  { return __builtin_logl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    log(_Tp __x)
-    { return __builtin_log(__x); }
-  using ::log10;
-  inline float
-  log10(float __x)
-  { return __builtin_log10f(__x); }
-  inline long double
-  log10(long double __x)
-  { return __builtin_log10l(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    log10(_Tp __x)
-    { return __builtin_log10(__x); }
-  using ::modf;
-  inline float
-  modf(float __x, float* __iptr)
-  { return __builtin_modff(__x, __iptr); }
-  inline long double
-  modf(long double __x, long double* __iptr)
-  { return __builtin_modfl(__x, __iptr); }
-  using ::pow;
-  inline float
-  pow(float __x, float __y)
-  { return __builtin_powf(__x, __y); }
-  inline long double
-  pow(long double __x, long double __y)
-  { return __builtin_powl(__x, __y); }
-  inline double
-  pow(double __x, int __i)
-  { return __builtin_powi(__x, __i); }
-  inline float
-  pow(float __x, int __n)
-  { return __builtin_powif(__x, __n); }
-  inline long double
-  pow(long double __x, int __n)
-  { return __builtin_powil(__x, __n); }
-  template<typename _Tp, typename _Up>
-    inline
-    typename __gnu_cxx::__promote_2<
-    typename __gnu_cxx::__enable_if<__traitand<__is_arithmetic<_Tp>,
-            __is_arithmetic<_Up> >::__value,
-        _Tp>::__type, _Up>::__type
-    pow(_Tp __x, _Up __y)
-    {
-      typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-      return pow(__type(__x), __type(__y));
-    }
-  using ::sin;
-  inline float
-  sin(float __x)
-  { return __builtin_sinf(__x); }
-  inline long double
-  sin(long double __x)
-  { return __builtin_sinl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    sin(_Tp __x)
-    { return __builtin_sin(__x); }
-  using ::sinh;
-  inline float
-  sinh(float __x)
-  { return __builtin_sinhf(__x); }
-  inline long double
-  sinh(long double __x)
-  { return __builtin_sinhl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    sinh(_Tp __x)
-    { return __builtin_sinh(__x); }
-  using ::sqrt;
-  inline float
-  sqrt(float __x)
-  { return __builtin_sqrtf(__x); }
-  inline long double
-  sqrt(long double __x)
-  { return __builtin_sqrtl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    sqrt(_Tp __x)
-    { return __builtin_sqrt(__x); }
-  using ::tan;
-  inline float
-  tan(float __x)
-  { return __builtin_tanf(__x); }
-  inline long double
-  tan(long double __x)
-  { return __builtin_tanl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    tan(_Tp __x)
-    { return __builtin_tan(__x); }
-  using ::tanh;
-  inline float
-  tanh(float __x)
-  { return __builtin_tanhf(__x); }
-  inline long double
-  tanh(long double __x)
-  { return __builtin_tanhl(__x); }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-        double>::__type
-    tanh(_Tp __x)
-    { return __builtin_tanh(__x); }
-}
-namespace __gnu_cxx {
-  template<typename _Tp>
-    inline int
-    __capture_fpclassify(_Tp __f) { return ((sizeof(__f) == sizeof(float)) ? __fpclassifyf(__f) : __fpclassifyd(__f)); }
-}
-namespace std {
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    fpclassify(_Tp __f)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return ::__gnu_cxx::__capture_fpclassify(__type(__f));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isfinite(_Tp __f)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isfinite(__type(__f));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isinf(_Tp __f)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isinf(__type(__f));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isnan(_Tp __f)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isnan(__type(__f));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isnormal(_Tp __f)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isnormal(__type(__f));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    signbit(_Tp __f)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_signbit(__type(__f));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isgreater(_Tp __f1, _Tp __f2)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isgreater(__type(__f1), __type(__f2));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isgreaterequal(_Tp __f1, _Tp __f2)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isgreaterequal(__type(__f1), __type(__f2));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isless(_Tp __f1, _Tp __f2)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isless(__type(__f1), __type(__f2));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    islessequal(_Tp __f1, _Tp __f2)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_islessequal(__type(__f1), __type(__f2));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    islessgreater(_Tp __f1, _Tp __f2)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_islessgreater(__type(__f1), __type(__f2));
-    }
-  template<typename _Tp>
-    inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
-        int>::__type
-    isunordered(_Tp __f1, _Tp __f2)
-    {
-      typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
-      return __builtin_isunordered(__type(__f1), __type(__f2));
-    }
-}
-namespace std {
-  template<typename _Tp>
-    inline _Tp
-    __cmath_power(_Tp __x, unsigned int __n)
-    {
-      _Tp __y = __n % 2 ? __x : _Tp(1);
-      while (__n >>= 1)
-        {
-          __x = __x * __x;
-          if (__n % 2)
-            __y = __y * __x;
-        }
-      return __y;
-    }
-}
-       
-       
-       
-       
-       
-namespace std {
-  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 __builtin_va_list __gnuc_va_list;
-extern "C" {
-struct tm;
-typedef _mbstate_t mbstate_t;
-wint_t __attribute__((__cdecl__)) btowc (int);
-int __attribute__((__cdecl__)) wctob (wint_t);
-size_t __attribute__((__cdecl__)) mbrlen (const char * , size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) mbrtowc (wchar_t * , const char * , size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) _mbrtowc_r (struct _reent *, wchar_t * , const char * , size_t, mbstate_t *);
-int __attribute__((__cdecl__)) mbsinit (const mbstate_t *);
-size_t __attribute__((__cdecl__)) mbsnrtowcs (wchar_t * , const char ** , size_t, size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) _mbsnrtowcs_r (struct _reent *, wchar_t * , const char ** , size_t, size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) mbsrtowcs (wchar_t * , const char ** , size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) _mbsrtowcs_r (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) wcrtomb (char * , wchar_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) _wcrtomb_r (struct _reent *, char * , wchar_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) wcsnrtombs (char * , const wchar_t ** , size_t, size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) _wcsnrtombs_r (struct _reent *, char * , const wchar_t ** , size_t, size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) wcsrtombs (char * , const wchar_t ** , size_t, mbstate_t *);
-size_t __attribute__((__cdecl__)) _wcsrtombs_r (struct _reent *, char * , const wchar_t ** , size_t, mbstate_t *);
-int __attribute__((__cdecl__)) wcscasecmp (const wchar_t *, const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcscat (wchar_t * , const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcschr (const wchar_t *, wchar_t);
-int __attribute__((__cdecl__)) wcscmp (const wchar_t *, const wchar_t *);
-int __attribute__((__cdecl__)) wcscoll (const wchar_t *, const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcscpy (wchar_t * , const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcpcpy (wchar_t * , const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcsdup (const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) _wcsdup_r (struct _reent *, const wchar_t * );
-size_t __attribute__((__cdecl__)) wcscspn (const wchar_t *, const wchar_t *);
-size_t __attribute__((__cdecl__)) wcsftime (wchar_t *, size_t, const wchar_t *, const struct tm *);
-size_t __attribute__((__cdecl__)) wcslcat (wchar_t *, const wchar_t *, size_t);
-size_t __attribute__((__cdecl__)) wcslcpy (wchar_t *, const wchar_t *, size_t);
-size_t __attribute__((__cdecl__)) wcslen (const wchar_t *);
-int __attribute__((__cdecl__)) wcsncasecmp (const wchar_t *, const wchar_t *, size_t);
-wchar_t *__attribute__((__cdecl__)) wcsncat (wchar_t * , const wchar_t * , size_t);
-int __attribute__((__cdecl__)) wcsncmp (const wchar_t *, const wchar_t *, size_t);
-wchar_t *__attribute__((__cdecl__)) wcsncpy (wchar_t * , const wchar_t * , size_t);
-wchar_t *__attribute__((__cdecl__)) wcpncpy (wchar_t * , const wchar_t * , size_t);
-size_t __attribute__((__cdecl__)) wcsnlen (const wchar_t *, size_t);
-wchar_t *__attribute__((__cdecl__)) wcspbrk (const wchar_t *, const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcsrchr (const wchar_t *, wchar_t);
-size_t __attribute__((__cdecl__)) wcsspn (const wchar_t *, const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcsstr (const wchar_t *, const wchar_t *);
-wchar_t *__attribute__((__cdecl__)) wcstok (wchar_t *, const wchar_t *, wchar_t **);
-double __attribute__((__cdecl__)) wcstod (const wchar_t *, wchar_t **);
-double __attribute__((__cdecl__)) _wcstod_r (struct _reent *, const wchar_t *, wchar_t **);
-float __attribute__((__cdecl__)) wcstof (const wchar_t *, wchar_t **);
-float __attribute__((__cdecl__)) _wcstof_r (struct _reent *, const wchar_t *, wchar_t **);
-int __attribute__((__cdecl__)) wcswidth (const wchar_t *, size_t);
-size_t __attribute__((__cdecl__)) wcsxfrm (wchar_t *, const wchar_t *, size_t);
-int __attribute__((__cdecl__)) wcwidth (const wchar_t);
-wchar_t *__attribute__((__cdecl__)) wmemchr (const wchar_t *, wchar_t, size_t);
-int __attribute__((__cdecl__)) wmemcmp (const wchar_t *, const wchar_t *, size_t);
-wchar_t *__attribute__((__cdecl__)) wmemcpy (wchar_t * , const wchar_t * , size_t);
-wchar_t *__attribute__((__cdecl__)) wmemmove (wchar_t *, const wchar_t *, size_t);
-wchar_t *__attribute__((__cdecl__)) wmemset (wchar_t *, wchar_t, size_t);
-long __attribute__((__cdecl__)) wcstol (const wchar_t *, wchar_t **, int);
-long long __attribute__((__cdecl__)) wcstoll (const wchar_t *, wchar_t **, int);
-unsigned long __attribute__((__cdecl__)) wcstoul (const wchar_t *, wchar_t **, int);
-unsigned long long __attribute__((__cdecl__)) wcstoull (const wchar_t *, wchar_t **, int);
-long __attribute__((__cdecl__)) _wcstol_r (struct _reent *, const wchar_t *, wchar_t **, int);
-long long __attribute__((__cdecl__)) _wcstoll_r (struct _reent *, const wchar_t *, wchar_t **, int);
-unsigned long __attribute__((__cdecl__)) _wcstoul_r (struct _reent *, const wchar_t *, wchar_t **, int);
-unsigned long long __attribute__((__cdecl__)) _wcstoull_r (struct _reent *, const wchar_t *, wchar_t **, int);
-wint_t __attribute__((__cdecl__)) fgetwc (__FILE *);
-wchar_t *__attribute__((__cdecl__)) fgetws (wchar_t *, int, __FILE *);
-wint_t __attribute__((__cdecl__)) fputwc (wchar_t, __FILE *);
-int __attribute__((__cdecl__)) fputws (const wchar_t *, __FILE *);
-int __attribute__((__cdecl__)) fwide (__FILE *, int);
-wint_t __attribute__((__cdecl__)) getwc (__FILE *);
-wint_t __attribute__((__cdecl__)) getwchar (void);
-wint_t __attribute__((__cdecl__)) putwc (wchar_t, __FILE *);
-wint_t __attribute__((__cdecl__)) putwchar (wchar_t);
-wint_t __attribute__((__cdecl__)) ungetwc (wint_t wc, __FILE *);
-wint_t __attribute__((__cdecl__)) _fgetwc_r (struct _reent *, __FILE *);
-wchar_t *__attribute__((__cdecl__)) _fgetws_r (struct _reent *, wchar_t *, int, __FILE *);
-wint_t __attribute__((__cdecl__)) _fputwc_r (struct _reent *, wchar_t, __FILE *);
-int __attribute__((__cdecl__)) _fputws_r (struct _reent *, const wchar_t *, __FILE *);
-int __attribute__((__cdecl__)) _fwide_r (struct _reent *, __FILE *, int);
-wint_t __attribute__((__cdecl__)) _getwc_r (struct _reent *, __FILE *);
-wint_t __attribute__((__cdecl__)) _getwchar_r (struct _reent *ptr);
-wint_t __attribute__((__cdecl__)) _putwc_r (struct _reent *, wchar_t, __FILE *);
-wint_t __attribute__((__cdecl__)) _putwchar_r (struct _reent *, wchar_t);
-wint_t __attribute__((__cdecl__)) _ungetwc_r (struct _reent *, wint_t wc, __FILE *);
-__FILE *__attribute__((__cdecl__)) open_wmemstream (wchar_t **, size_t *);
-__FILE *__attribute__((__cdecl__)) _open_wmemstream_r (struct _reent *, wchar_t **, size_t *);
-int __attribute__((__cdecl__)) fwprintf (__FILE *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) swprintf (wchar_t *, size_t, const wchar_t *, ...);
-int __attribute__((__cdecl__)) vfwprintf (__FILE *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) vswprintf (wchar_t *, size_t, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) vwprintf (const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) wprintf (const wchar_t *, ...);
-int __attribute__((__cdecl__)) _fwprintf_r (struct _reent *, __FILE *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) _swprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, ...);
-int __attribute__((__cdecl__)) _vfwprintf_r (struct _reent *, __FILE *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) _vswprintf_r (struct _reent *, wchar_t *, size_t, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) _vwprintf_r (struct _reent *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) _wprintf_r (struct _reent *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) fwscanf (__FILE *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) swscanf (const wchar_t *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) vfwscanf (__FILE *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) vswscanf (const wchar_t *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) vwscanf (const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) wscanf (const wchar_t *, ...);
-int __attribute__((__cdecl__)) _fwscanf_r (struct _reent *, __FILE *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) _swscanf_r (struct _reent *, const wchar_t *, const wchar_t *, ...);
-int __attribute__((__cdecl__)) _vfwscanf_r (struct _reent *, __FILE *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) _vswscanf_r (struct _reent *, const wchar_t *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) _vwscanf_r (struct _reent *, const wchar_t *, __gnuc_va_list);
-int __attribute__((__cdecl__)) _wscanf_r (struct _reent *, const wchar_t *, ...);
-}
-namespace std {
-  using ::mbstate_t;
-}
-namespace std {
-  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;
-  inline wchar_t*
-  wcschr(wchar_t* __p, wchar_t __c)
-  { return wcschr(const_cast<const wchar_t*>(__p), __c); }
-  using ::wcspbrk;
-  inline wchar_t*
-  wcspbrk(wchar_t* __s1, const wchar_t* __s2)
-  { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }
-  using ::wcsrchr;
-  inline wchar_t*
-  wcsrchr(wchar_t* __p, wchar_t __c)
-  { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }
-  using ::wcsstr;
-  inline wchar_t*
-  wcsstr(wchar_t* __s1, const wchar_t* __s2)
-  { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }
-  using ::wmemchr;
-  inline wchar_t*
-  wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
-  { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
-}
-namespace std {
-  typedef int64_t 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 std {
-  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;
-}
-#pragma GCC visibility push(default)
-extern "C++" {
-namespace std
+
+struct assert_
 {
-  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 {
-  void __verbose_terminate_handler ();
-}
-}
-#pragma GCC visibility pop
-       
-       
-namespace std {
-  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__));
-}
-       
-namespace __gnu_cxx {
-  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 {
-  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 {
-  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 {
-  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 {
-  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
+
+    template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};
+
+    static assert_ const arg;
+    enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };
+};
+
+
+
+
+bool operator==( failed, failed );
+bool operator!=( failed, failed );
+bool operator>( failed, failed );
+bool operator>=( failed, failed );
+bool operator<( failed, failed );
+bool operator<=( failed, failed );
+
+
+
+
+
+template< long x, long y, bool (*)(failed, failed) > 
+struct assert_relation {};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template< bool > struct assert_arg_pred_impl { typedef int type; };
+template<> struct assert_arg_pred_impl<true> { typedef void* type; };
+
+template< typename P > struct assert_arg_pred
 {
-  namespace __debug { }
-}
-namespace __gnu_debug
+    typedef typename P::type p_type;
+    typedef typename assert_arg_pred_impl< p_type::value >::type type;
+};
+
+template< typename P > struct assert_arg_pred_not
 {
-  using namespace std::__debug;
-}
-namespace std {
-  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 {
-  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);
-    }
-}
-       
-       
-extern "C" {
-typedef __FILE FILE;
-typedef _fpos64_t fpos_t;
+    typedef typename P::type p_type;
+    static const bool p = !p_type::value;
+    typedef typename assert_arg_pred_impl<p>::type type;
+};
+
+template< typename Pred >
+failed ************ (Pred::************ 
+      assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )
+    );
+
+template< typename Pred >
+failed ************ (boost::mpl::not_<Pred>::************ 
+      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )
+    );
+
+template< typename Pred >
+assert<false>
+assert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );
+
+template< typename Pred >
+assert<false>
+assert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+extern boost::scope_exit::aux::undeclared
+        boost_local_auxXargs;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+template<typename F, size_t defaults = 0> 
+struct function {}; 
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 extern "C" {
+
+
+ void __cdecl _wassert(       const wchar_t * _Message,        const wchar_t *_File,      unsigned _Line);
+
+
 }
-FILE * __attribute__((__cdecl__)) tmpfile (void);
-char * __attribute__((__cdecl__)) tmpnam (char *);
-int __attribute__((__cdecl__)) fclose (FILE *);
-int __attribute__((__cdecl__)) fflush (FILE *);
-FILE * __attribute__((__cdecl__)) freopen (const char *, const char *, FILE *);
-void __attribute__((__cdecl__)) setbuf (FILE *, char *);
-int __attribute__((__cdecl__)) setvbuf (FILE *, char *, int, size_t);
-int __attribute__((__cdecl__)) fprintf (FILE *, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) fscanf (FILE *, const char *, ...) __attribute__ ((__format__ (__scanf__, 2, 3)));
-int __attribute__((__cdecl__)) printf (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
-int __attribute__((__cdecl__)) scanf (const char *, ...) __attribute__ ((__format__ (__scanf__, 1, 2)));
-int __attribute__((__cdecl__)) sscanf (const char *, const char *, ...) __attribute__ ((__format__ (__scanf__, 2, 3)));
-int __attribute__((__cdecl__)) vfprintf (FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) vprintf (const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 1, 0)));
-int __attribute__((__cdecl__)) vsprintf (char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) fgetc (FILE *);
-char * __attribute__((__cdecl__)) fgets (char *, int, FILE *);
-int __attribute__((__cdecl__)) fputc (int, FILE *);
-int __attribute__((__cdecl__)) fputs (const char *, FILE *);
-int __attribute__((__cdecl__)) getc (FILE *);
-int __attribute__((__cdecl__)) getchar (void);
-char * __attribute__((__cdecl__)) gets (char *);
-int __attribute__((__cdecl__)) putc (int, FILE *);
-int __attribute__((__cdecl__)) putchar (int);
-int __attribute__((__cdecl__)) puts (const char *);
-int __attribute__((__cdecl__)) ungetc (int, FILE *);
-size_t __attribute__((__cdecl__)) fread (void *, size_t _size, size_t _n, FILE *);
-size_t __attribute__((__cdecl__)) fwrite (const void * , size_t _size, size_t _n, FILE *);
-int __attribute__((__cdecl__)) fgetpos (FILE *, fpos_t *);
-int __attribute__((__cdecl__)) fseek (FILE *, long, int);
-int __attribute__((__cdecl__)) fsetpos (FILE *, const fpos_t *);
-long __attribute__((__cdecl__)) ftell ( FILE *);
-void __attribute__((__cdecl__)) rewind (FILE *);
-void __attribute__((__cdecl__)) clearerr (FILE *);
-int __attribute__((__cdecl__)) feof (FILE *);
-int __attribute__((__cdecl__)) ferror (FILE *);
-void __attribute__((__cdecl__)) perror (const char *);
-FILE * __attribute__((__cdecl__)) fopen (const char *_name, const char *_type);
-int __attribute__((__cdecl__)) sprintf (char *, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) remove (const char *);
-int __attribute__((__cdecl__)) rename (const char *, const char *);
-int __attribute__((__cdecl__)) fseeko (FILE *, off_t, int);
-off_t __attribute__((__cdecl__)) ftello ( FILE *);
-int __attribute__((__cdecl__)) asiprintf (char **, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-char * __attribute__((__cdecl__)) asniprintf (char *, size_t *, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-char * __attribute__((__cdecl__)) asnprintf (char *, size_t *, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) asprintf (char **, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) diprintf (int, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) fcloseall (void);
-int __attribute__((__cdecl__)) fiprintf (FILE *, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) fiscanf (FILE *, const char *, ...) __attribute__ ((__format__ (__scanf__, 2, 3)));
-int __attribute__((__cdecl__)) iprintf (const char *, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
-int __attribute__((__cdecl__)) iscanf (const char *, ...) __attribute__ ((__format__ (__scanf__, 1, 2)));
-int __attribute__((__cdecl__)) siprintf (char *, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) siscanf (const char *, const char *, ...) __attribute__ ((__format__ (__scanf__, 2, 3)));
-int __attribute__((__cdecl__)) snprintf (char *, size_t, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) sniprintf (char *, size_t, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-char * __attribute__((__cdecl__)) tempnam (const char *, const char *);
-int __attribute__((__cdecl__)) vasiprintf (char **, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-char * __attribute__((__cdecl__)) vasniprintf (char *, size_t *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-char * __attribute__((__cdecl__)) vasnprintf (char *, size_t *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) vasprintf (char **, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) vdiprintf (int, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) vfiprintf (FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) vfiscanf (FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 2, 0)));
-int __attribute__((__cdecl__)) vfscanf (FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 2, 0)));
-int __attribute__((__cdecl__)) viprintf (const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 1, 0)));
-int __attribute__((__cdecl__)) viscanf (const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 1, 0)));
-int __attribute__((__cdecl__)) vscanf (const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 1, 0)));
-int __attribute__((__cdecl__)) vsiprintf (char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) vsiscanf (const char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 2, 0)));
-int __attribute__((__cdecl__)) vsniprintf (char *, size_t, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) vsnprintf (char *, size_t, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) vsscanf (const char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 2, 0)));
-FILE * __attribute__((__cdecl__)) fdopen (int, const char *);
-int __attribute__((__cdecl__)) fileno (FILE *);
-int __attribute__((__cdecl__)) getw (FILE *);
-int __attribute__((__cdecl__)) pclose (FILE *);
-FILE * __attribute__((__cdecl__)) popen (const char *, const char *);
-int __attribute__((__cdecl__)) putw (int, FILE *);
-void __attribute__((__cdecl__)) setbuffer (FILE *, char *, int);
-int __attribute__((__cdecl__)) setlinebuf (FILE *);
-int __attribute__((__cdecl__)) getc_unlocked (FILE *);
-int __attribute__((__cdecl__)) getchar_unlocked (void);
-void __attribute__((__cdecl__)) flockfile (FILE *);
-int __attribute__((__cdecl__)) ftrylockfile (FILE *);
-void __attribute__((__cdecl__)) funlockfile (FILE *);
-int __attribute__((__cdecl__)) putc_unlocked (int, FILE *);
-int __attribute__((__cdecl__)) putchar_unlocked (int);
-int __attribute__((__cdecl__)) dprintf (int, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-FILE * __attribute__((__cdecl__)) fmemopen (void *, size_t, const char *);
-FILE * __attribute__((__cdecl__)) open_memstream (char **, size_t *);
-int __attribute__((__cdecl__)) renameat (int, const char *, int, const char *);
-int __attribute__((__cdecl__)) vdprintf (int, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) _asiprintf_r (struct _reent *, char **, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-char * __attribute__((__cdecl__)) _asniprintf_r (struct _reent *, char *, size_t *, const char *, ...) __attribute__ ((__format__ (__printf__, 4, 5)));
-char * __attribute__((__cdecl__)) _asnprintf_r (struct _reent *, char *, size_t *, const char *, ...) __attribute__ ((__format__ (__printf__, 4, 5)));
-int __attribute__((__cdecl__)) _asprintf_r (struct _reent *, char **, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _diprintf_r (struct _reent *, int, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _dprintf_r (struct _reent *, int, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _fclose_r (struct _reent *, FILE *);
-int __attribute__((__cdecl__)) _fcloseall_r (struct _reent *);
-FILE * __attribute__((__cdecl__)) _fdopen_r (struct _reent *, int, const char *);
-int __attribute__((__cdecl__)) _fflush_r (struct _reent *, FILE *);
-int __attribute__((__cdecl__)) _fgetc_r (struct _reent *, FILE *);
-char * __attribute__((__cdecl__)) _fgets_r (struct _reent *, char *, int, FILE *);
-int __attribute__((__cdecl__)) _fgetpos_r (struct _reent *, FILE *, fpos_t *);
-int __attribute__((__cdecl__)) _fsetpos_r (struct _reent *, FILE *, const fpos_t *);
-int __attribute__((__cdecl__)) _fiprintf_r (struct _reent *, FILE *, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _fiscanf_r (struct _reent *, FILE *, const char *, ...) __attribute__ ((__format__ (__scanf__, 3, 4)));
-FILE * __attribute__((__cdecl__)) _fmemopen_r (struct _reent *, void *, size_t, const char *);
-FILE * __attribute__((__cdecl__)) _fopen_r (struct _reent *, const char *, const char *);
-FILE * __attribute__((__cdecl__)) _freopen_r (struct _reent *, const char *, const char *, FILE *);
-int __attribute__((__cdecl__)) _fprintf_r (struct _reent *, FILE *, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _fpurge_r (struct _reent *, FILE *);
-int __attribute__((__cdecl__)) _fputc_r (struct _reent *, int, FILE *);
-int __attribute__((__cdecl__)) _fputs_r (struct _reent *, const char *, FILE *);
-size_t __attribute__((__cdecl__)) _fread_r (struct _reent *, void *, size_t _size, size_t _n, FILE *);
-int __attribute__((__cdecl__)) _fscanf_r (struct _reent *, FILE *, const char *, ...) __attribute__ ((__format__ (__scanf__, 3, 4)));
-int __attribute__((__cdecl__)) _fseek_r (struct _reent *, FILE *, long, int);
-int __attribute__((__cdecl__)) _fseeko_r (struct _reent *, FILE *, _off_t, int);
-long __attribute__((__cdecl__)) _ftell_r (struct _reent *, FILE *);
-_off_t __attribute__((__cdecl__)) _ftello_r (struct _reent *, FILE *);
-void __attribute__((__cdecl__)) _rewind_r (struct _reent *, FILE *);
-size_t __attribute__((__cdecl__)) _fwrite_r (struct _reent *, const void * , size_t _size, size_t _n, FILE *);
-int __attribute__((__cdecl__)) _getc_r (struct _reent *, FILE *);
-int __attribute__((__cdecl__)) _getc_unlocked_r (struct _reent *, FILE *);
-int __attribute__((__cdecl__)) _getchar_r (struct _reent *);
-int __attribute__((__cdecl__)) _getchar_unlocked_r (struct _reent *);
-char * __attribute__((__cdecl__)) _gets_r (struct _reent *, char *);
-int __attribute__((__cdecl__)) _iprintf_r (struct _reent *, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) _iscanf_r (struct _reent *, const char *, ...) __attribute__ ((__format__ (__scanf__, 2, 3)));
-FILE * __attribute__((__cdecl__)) _open_memstream_r (struct _reent *, char **, size_t *);
-void __attribute__((__cdecl__)) _perror_r (struct _reent *, const char *);
-int __attribute__((__cdecl__)) _printf_r (struct _reent *, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-int __attribute__((__cdecl__)) _putc_r (struct _reent *, int, FILE *);
-int __attribute__((__cdecl__)) _putc_unlocked_r (struct _reent *, int, FILE *);
-int __attribute__((__cdecl__)) _putchar_unlocked_r (struct _reent *, int);
-int __attribute__((__cdecl__)) _putchar_r (struct _reent *, int);
-int __attribute__((__cdecl__)) _puts_r (struct _reent *, const char *);
-int __attribute__((__cdecl__)) _remove_r (struct _reent *, const char *);
-int __attribute__((__cdecl__)) _rename_r (struct _reent *, const char *_old, const char *_new);
-int __attribute__((__cdecl__)) _scanf_r (struct _reent *, const char *, ...) __attribute__ ((__format__ (__scanf__, 2, 3)));
-int __attribute__((__cdecl__)) _siprintf_r (struct _reent *, char *, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _siscanf_r (struct _reent *, const char *, const char *, ...) __attribute__ ((__format__ (__scanf__, 3, 4)));
-int __attribute__((__cdecl__)) _sniprintf_r (struct _reent *, char *, size_t, const char *, ...) __attribute__ ((__format__ (__printf__, 4, 5)));
-int __attribute__((__cdecl__)) _snprintf_r (struct _reent *, char *, size_t, const char *, ...) __attribute__ ((__format__ (__printf__, 4, 5)));
-int __attribute__((__cdecl__)) _sprintf_r (struct _reent *, char *, const char *, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-int __attribute__((__cdecl__)) _sscanf_r (struct _reent *, const char *, const char *, ...) __attribute__ ((__format__ (__scanf__, 3, 4)));
-char * __attribute__((__cdecl__)) _tempnam_r (struct _reent *, const char *, const char *);
-FILE * __attribute__((__cdecl__)) _tmpfile_r (struct _reent *);
-char * __attribute__((__cdecl__)) _tmpnam_r (struct _reent *, char *);
-int __attribute__((__cdecl__)) _ungetc_r (struct _reent *, int, FILE *);
-int __attribute__((__cdecl__)) _vasiprintf_r (struct _reent *, char **, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-char * __attribute__((__cdecl__)) _vasniprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 4, 0)));
-char * __attribute__((__cdecl__)) _vasnprintf_r (struct _reent*, char *, size_t *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 4, 0)));
-int __attribute__((__cdecl__)) _vasprintf_r (struct _reent *, char **, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vdiprintf_r (struct _reent *, int, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vdprintf_r (struct _reent *, int, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vfiprintf_r (struct _reent *, FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vfiscanf_r (struct _reent *, FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 3, 0)));
-int __attribute__((__cdecl__)) _vfprintf_r (struct _reent *, FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vfscanf_r (struct _reent *, FILE *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 3, 0)));
-int __attribute__((__cdecl__)) _viprintf_r (struct _reent *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) _viscanf_r (struct _reent *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 2, 0)));
-int __attribute__((__cdecl__)) _vprintf_r (struct _reent *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 2, 0)));
-int __attribute__((__cdecl__)) _vscanf_r (struct _reent *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 2, 0)));
-int __attribute__((__cdecl__)) _vsiprintf_r (struct _reent *, char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vsiscanf_r (struct _reent *, const char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 3, 0)));
-int __attribute__((__cdecl__)) _vsniprintf_r (struct _reent *, char *, size_t, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 4, 0)));
-int __attribute__((__cdecl__)) _vsnprintf_r (struct _reent *, char *, size_t, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 4, 0)));
-int __attribute__((__cdecl__)) _vsprintf_r (struct _reent *, char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__printf__, 3, 0)));
-int __attribute__((__cdecl__)) _vsscanf_r (struct _reent *, const char *, const char *, __gnuc_va_list) __attribute__ ((__format__ (__scanf__, 3, 0)));
-int __attribute__((__cdecl__)) fpurge (FILE *);
-ssize_t __attribute__((__cdecl__)) __getdelim (char **, size_t *, int, FILE *);
-ssize_t __attribute__((__cdecl__)) __getline (char **, size_t *, FILE *);
-int __attribute__((__cdecl__)) __srget_r (struct _reent *, FILE *);
-int __attribute__((__cdecl__)) __swbuf_r (struct _reent *, int, FILE *);
-FILE *__attribute__((__cdecl__)) funopen (const void * __cookie, int (*__readfn)(void * __c, char *__buf, int __n), int (*__writefn)(void * __c, const char *__buf, int __n), _fpos64_t (*__seekfn)(void * __c, _fpos64_t __off, int __whence), int (*__closefn)(void * __c));
-FILE *__attribute__((__cdecl__)) _funopen_r (struct _reent *, const void * __cookie, int (*__readfn)(void * __c, char *__buf, int __n), int (*__writefn)(void * __c, const char *__buf, int __n), _fpos64_t (*__seekfn)(void * __c, _fpos64_t __off, int __whence), int (*__closefn)(void * __c));
-typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n);
-typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf,
-     size_t __n);
-typedef int cookie_seek_function_t(void *__cookie, _off64_t *__off,
-       int __whence);
-typedef int cookie_close_function_t(void *__cookie);
-typedef struct
-{
-  cookie_read_function_t *read;
-  cookie_write_function_t *write;
-  cookie_seek_function_t *seek;
-  cookie_close_function_t *close;
-} cookie_io_functions_t;
-FILE *__attribute__((__cdecl__)) fopencookie (void *__cookie, const char *__mode, cookie_io_functions_t __functions);
-FILE *__attribute__((__cdecl__)) _fopencookie_r (struct _reent *, void *__cookie, const char *__mode, cookie_io_functions_t __functions);
-extern __inline__ __attribute__ ((__always_inline__)) int __sgetc_r(struct _reent *__ptr, FILE *__p);
-extern __inline__ __attribute__ ((__always_inline__)) int __sgetc_r(struct _reent *__ptr, FILE *__p)
-  {
-    int __c = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
-    if ((__p->_flags & 0x4000) && (__c == '\r'))
-      {
-      int __c2 = (--(__p)->_r < 0 ? __srget_r(__ptr, __p) : (int)(*(__p)->_p++));
-      if (__c2 == '\n')
-        __c = __c2;
-      else
-        ungetc(__c2, __p);
-      }
-    return __c;
-  }
-}
-namespace std {
-  using ::FILE;
-  using ::fpos_t;
-  using ::clearerr;
-  using ::fclose;
-  using ::feof;
-  using ::ferror;
-  using ::fflush;
-  using ::fgetc;
-  using ::fgetpos;
-  using ::fgets;
-  using ::fopen;
-  using ::fprintf;
-  using ::fputc;
-  using ::fputs;
-  using ::fread;
-  using ::freopen;
-  using ::fscanf;
-  using ::fseek;
-  using ::fsetpos;
-  using ::ftell;
-  using ::fwrite;
-  using ::getc;
-  using ::getchar;
-  using ::gets;
-  using ::perror;
-  using ::printf;
-  using ::putc;
-  using ::putchar;
-  using ::puts;
-  using ::remove;
-  using ::rename;
-  using ::rewind;
-  using ::scanf;
-  using ::setbuf;
-  using ::setvbuf;
-  using ::sprintf;
-  using ::sscanf;
-  using ::tmpfile;
-  using ::tmpnam;
-  using ::ungetc;
-  using ::vfprintf;
-  using ::vprintf;
-  using ::vsprintf;
-}
-       
-       
-namespace __gnu_cxx {
-  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;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+                
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    
+    
+>
+class function<
+      R ()
+    , 0
+> {
+    typedef aux::abstract_function<
+          R () 
+        , 0
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-  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)));
+
+    
+    
+    
+    inline R operator()() { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)(); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0
+>
+class function<
+      R ( A0)
+    , 0
+> {
+    typedef aux::abstract_function<
+          R ( A0) 
+        , 0
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-  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;
+
+    
+    
+    
+    inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0
+>
+class function<
+      R ( A0)
+    , 1
+> {
+    typedef aux::abstract_function<
+          R ( A0) 
+        , 1
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-  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;
+
+    
+    
+    
+    inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); } inline R operator()() { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)(); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1
+>
+class function<
+      R ( A0 , A1)
+    , 0
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1) 
+        , 0
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-}
-namespace std {
-  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>(((wint_t)-1)); }
-      static int_type
-      not_eof(const int_type& __c)
-      { return eq_int_type(__c, eof()) ? 0 : __c; }
-  };
-}
-       
-       
-       
-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_n_cs_precedes;
-  char int_n_sep_by_space;
-  char int_n_sign_posn;
-  char int_p_cs_precedes;
-  char int_p_sep_by_space;
-  char int_p_sign_posn;
-};
-char *__attribute__((__cdecl__)) setlocale (int category, const char *locale);
-struct lconv *__attribute__((__cdecl__)) localeconv (void);
-struct _reent;
-char *__attribute__((__cdecl__)) _setlocale_r (struct _reent *, int category, const char *locale);
-struct lconv *__attribute__((__cdecl__)) _localeconv_r (struct _reent *);
-}
-namespace std {
-  using ::lconv;
-  using ::setlocale;
-  using ::localeconv;
-}
-       
-namespace std {
-  typedef int* __c_locale;
-  inline int
-  __convert_from_v(const __c_locale&, char* __out,
-     const int __size __attribute__((__unused__)),
-     const char* __fmt, ...)
-  {
-    char* __old = std::setlocale(4, __null);
-    char* __sav = __null;
-    if (__builtin_strcmp(__old, "C"))
-      {
- const size_t __len = __builtin_strlen(__old) + 1;
- __sav = new char[__len];
- __builtin_memcpy(__sav, __old, __len);
- std::setlocale(4, "C");
-      }
-    __builtin_va_list __args;
-    __builtin_va_start(__args, __fmt);
-    const int __ret = __builtin_vsprintf(__out, __fmt, __args);
-    __builtin_va_end(__args);
-    if (__sav)
-      {
- std::setlocale(4, __sav);
- delete [] __sav;
-      }
-    return __ret;
-  }
-}
-       
-extern "C" {
-int __attribute__((__cdecl__)) isalnum (int __c);
-int __attribute__((__cdecl__)) isalpha (int __c);
-int __attribute__((__cdecl__)) iscntrl (int __c);
-int __attribute__((__cdecl__)) isdigit (int __c);
-int __attribute__((__cdecl__)) isgraph (int __c);
-int __attribute__((__cdecl__)) islower (int __c);
-int __attribute__((__cdecl__)) isprint (int __c);
-int __attribute__((__cdecl__)) ispunct (int __c);
-int __attribute__((__cdecl__)) isspace (int __c);
-int __attribute__((__cdecl__)) isupper (int __c);
-int __attribute__((__cdecl__)) isxdigit (int __c);
-int __attribute__((__cdecl__)) tolower (int __c);
-int __attribute__((__cdecl__)) toupper (int __c);
-int __attribute__((__cdecl__)) isblank (int __c);
-int __attribute__((__cdecl__)) isascii (int __c);
-int __attribute__((__cdecl__)) toascii (int __c);
-extern __attribute__((dllimport)) char *__ctype_ptr__;
-extern __attribute__((dllimport)) const char _ctype_[];
-}
-namespace std {
-  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 {
-  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;
-}
-       
-#pragma GCC visibility push(default)
-extern "C" {
-typedef unsigned long sigset_t;
-extern "C" {
-struct _fpstate
-{
-  unsigned long cw;
-  unsigned long sw;
-  unsigned long tag;
-  unsigned long ipoff;
-  unsigned long cssel;
-  unsigned long dataoff;
-  unsigned long datasel;
-  unsigned char _st[80];
-  unsigned long nxst;
-};
-struct ucontext
-{
-  unsigned long cr2;
-  unsigned long dr0;
-  unsigned long dr1;
-  unsigned long dr2;
-  unsigned long dr3;
-  unsigned long dr6;
-  unsigned long dr7;
-  struct _fpstate fpstate;
-  unsigned long gs;
-  unsigned long fs;
-  unsigned long es;
-  unsigned long ds;
-  unsigned long edi;
-  unsigned long esi;
-  unsigned long ebx;
-  unsigned long edx;
-  unsigned long ecx;
-  unsigned long eax;
-  unsigned long ebp;
-  unsigned long eip;
-  unsigned long cs;
-  unsigned long eflags;
-  unsigned long esp;
-  unsigned long ss;
-  unsigned char _internal;
-  unsigned long oldmask;
-};
-typedef union sigval
-{
-  int sival_int;
-  void *sival_ptr;
-} sigval_t;
-typedef struct sigevent
-{
-  sigval_t sigev_value;
-  int sigev_signo;
-  int sigev_notify;
-  void (*sigev_notify_function) (sigval_t);
-  pthread_attr_t *sigev_notify_attributes;
-} sigevent_t;
-#pragma pack(push,4)
-struct _sigcommune
-{
-  __uint32_t _si_code;
-  void *_si_read_handle;
-  void *_si_write_handle;
-  void *_si_process_handle;
-  __extension__ union
-  {
-    int _si_fd;
-    void *_si_pipe_fhandler;
-    char *_si_str;
-  };
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); }
+
+private:
+    abstract_function_type* ptr_;
 };
-typedef struct
-{
-  int si_signo;
-  int si_code;
-  pid_t si_pid;
-  uid_t si_uid;
-  int si_errno;
-  __extension__ union
-  {
-    __uint32_t __pad[32];
-    struct _sigcommune _si_commune;
-    __extension__ union
-    {
-      struct
-      {
- union
- {
-   struct
-   {
-     timer_t si_tid;
-     unsigned int si_overrun;
-   };
-   sigval_t si_sigval;
-   sigval_t si_value;
- };
-      };
-    };
-    __extension__ struct
-    {
-      int si_status;
-      clock_t si_utime;
-      clock_t si_stime;
-    };
-    void *si_addr;
-  };
-} siginfo_t;
-#pragma pack(pop)
-enum
-{
-  SI_USER = 0,
-  SI_ASYNCIO = 2,
-  SI_MESGQ,
-  SI_TIMER,
-  SI_QUEUE,
-  SI_KERNEL,
-  ILL_ILLOPC,
-  ILL_ILLOPN,
-  ILL_ILLADR,
-  ILL_ILLTRP,
-  ILL_PRVOPC,
-  ILL_PRVREG,
-  ILL_COPROC,
-  ILL_BADSTK,
-  FPE_INTDIV,
-  FPE_INTOVF,
-  FPE_FLTDIV,
-  FPE_FLTOVF,
-  FPE_FLTUND,
-  FPE_FLTRES,
-  FPE_FLTINV,
-  FPE_FLTSUB,
-  SEGV_MAPERR,
-  SEGV_ACCERR,
-  BUS_ADRALN,
-  BUS_ADRERR,
-  BUS_OBJERR,
-  CLD_EXITED,
-  CLD_KILLED,
-  CLD_DUMPED,
-  CLD_TRAPPED,
-  CLD_STOPPED,
-  CLD_CONTINUED
-};
-enum
-{
-  SIGEV_SIGNAL = 0,
-  SIGEV_NONE,
-  SIGEV_THREAD
-};
-typedef void (*_sig_func_ptr)(int);
-struct sigaction
-{
-  __extension__ union
-  {
-    _sig_func_ptr sa_handler;
-    void (*sa_sigaction) ( int, siginfo_t *, void * );
-  };
-  sigset_t sa_mask;
-  int sa_flags;
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1
+>
+class function<
+      R ( A0 , A1)
+    , 1
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1) 
+        , 1
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); }
+
+private:
+    abstract_function_type* ptr_;
 };
-int sigwait (const sigset_t *, int *);
-int sigwaitinfo (const sigset_t *, siginfo_t *);
-int sighold (int);
-int sigignore (int);
-int sigrelse (int);
-_sig_func_ptr sigset (int, _sig_func_ptr);
-int sigqueue(pid_t, int, const union sigval);
-int siginterrupt (int, int);
-extern const char __attribute__((dllimport)) *sys_sigabbrev[];
-}
-int __attribute__((__cdecl__)) sigprocmask (int how, const sigset_t *set, sigset_t *oset);
-int __attribute__((__cdecl__)) pthread_sigmask (int how, const sigset_t *set, sigset_t *oset);
-int __attribute__((__cdecl__)) kill (pid_t, int);
-int __attribute__((__cdecl__)) killpg (pid_t, int);
-int __attribute__((__cdecl__)) sigaction (int, const struct sigaction *, struct sigaction *);
-int __attribute__((__cdecl__)) sigaddset (sigset_t *, const int);
-int __attribute__((__cdecl__)) sigdelset (sigset_t *, const int);
-int __attribute__((__cdecl__)) sigismember (const sigset_t *, int);
-int __attribute__((__cdecl__)) sigfillset (sigset_t *);
-int __attribute__((__cdecl__)) sigemptyset (sigset_t *);
-int __attribute__((__cdecl__)) sigpending (sigset_t *);
-int __attribute__((__cdecl__)) sigsuspend (const sigset_t *);
-int __attribute__((__cdecl__)) sigpause (int);
-int __attribute__((__cdecl__)) pthread_kill (pthread_t thread, int sig);
-int __attribute__((__cdecl__)) sigwaitinfo (const sigset_t *set, siginfo_t *info);
-int __attribute__((__cdecl__)) sigtimedwait (const sigset_t *set, siginfo_t *info, const struct timespec *timeout);
-int __attribute__((__cdecl__)) sigwait (const sigset_t *set, int *sig);
-int __attribute__((__cdecl__)) sigqueue (pid_t pid, int signo, const union sigval value);
-}
-extern "C" {
-typedef int sig_atomic_t;
-struct _reent;
-_sig_func_ptr __attribute__((__cdecl__)) _signal_r (struct _reent *, int, _sig_func_ptr);
-int __attribute__((__cdecl__)) _raise_r (struct _reent *, int);
-_sig_func_ptr __attribute__((__cdecl__)) signal (int, _sig_func_ptr);
-int __attribute__((__cdecl__)) raise (int);
-}
-extern "C" {
-struct sched_param {
-  int sched_priority;
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1
+>
+class function<
+      R ( A0 , A1)
+    , 2
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1) 
+        , 2
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); } inline R operator()() { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)(); }
+
+private:
+    abstract_function_type* ptr_;
 };
-}
-extern "C" {
-int sched_setparam(
-  pid_t __pid,
-  const struct sched_param *__param
-);
-int sched_getparam(
-  pid_t __pid,
-  struct sched_param *__param
-);
-int sched_setscheduler(
-  pid_t __pid,
-  int __policy,
-  const struct sched_param *__param
-);
-int sched_getscheduler(
-  pid_t __pid
-);
-int sched_get_priority_max(
-  int __policy
-);
-int sched_get_priority_min(
-  int __policy
-);
-int sched_rr_get_interval(
-  pid_t __pid,
-  struct timespec *__interval
-);
-int sched_yield( void );
-}
-extern "C"
-{
-int pthread_attr_destroy (pthread_attr_t *);
-int pthread_attr_getdetachstate (const pthread_attr_t *, int *);
-int pthread_attr_getinheritsched (const pthread_attr_t *, int *);
-int pthread_attr_getschedparam (const pthread_attr_t *, struct sched_param *);
-int pthread_attr_getschedpolicy (const pthread_attr_t *, int *);
-int pthread_attr_getscope (const pthread_attr_t *, int *);
-int pthread_attr_init (pthread_attr_t *);
-int pthread_attr_setdetachstate (pthread_attr_t *, int);
-int pthread_attr_setinheritsched (pthread_attr_t *, int);
-int pthread_attr_setschedparam (pthread_attr_t *, const struct sched_param *);
-int pthread_attr_setschedpolicy (pthread_attr_t *, int);
-int pthread_attr_setscope (pthread_attr_t *, int);
-int pthread_attr_getstacksize (const pthread_attr_t *, size_t *);
-int pthread_attr_setstacksize (pthread_attr_t *, size_t);
-int pthread_cancel (pthread_t);
-typedef void (*__cleanup_routine_type) (void *);
-typedef struct _pthread_cleanup_handler
-{
-  __cleanup_routine_type function;
-  void *arg;
-  struct _pthread_cleanup_handler *next;
-} __pthread_cleanup_handler;
-void _pthread_cleanup_push (__pthread_cleanup_handler *handler);
-void _pthread_cleanup_pop (int execute);
-int pthread_cond_broadcast (pthread_cond_t *);
-int pthread_cond_destroy (pthread_cond_t *);
-int pthread_cond_init (pthread_cond_t *, const pthread_condattr_t *);
-int pthread_cond_signal (pthread_cond_t *);
-int pthread_cond_timedwait (pthread_cond_t *,
-       pthread_mutex_t *, const struct timespec *);
-int pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
-int pthread_condattr_destroy (pthread_condattr_t *);
-int pthread_condattr_getpshared (const pthread_condattr_t *, int *);
-int pthread_condattr_init (pthread_condattr_t *);
-int pthread_condattr_setpshared (pthread_condattr_t *, int);
-int pthread_create (pthread_t *, const pthread_attr_t *,
-      void *(*)(void *), void *);
-int pthread_detach (pthread_t);
-int pthread_equal (pthread_t, pthread_t);
-void pthread_exit (void *);
-int pthread_getschedparam (pthread_t, int *, struct sched_param *);
-void *pthread_getspecific (pthread_key_t);
-int pthread_join (pthread_t, void **);
-int pthread_key_create (pthread_key_t *, void (*)(void *));
-int pthread_key_delete (pthread_key_t);
-int pthread_mutex_destroy (pthread_mutex_t *);
-int pthread_mutex_getprioceiling (const pthread_mutex_t *, int *);
-int pthread_mutex_init (pthread_mutex_t *, const pthread_mutexattr_t *);
-int pthread_mutex_lock (pthread_mutex_t *);
-int pthread_mutex_setprioceiling (pthread_mutex_t *, int, int *);
-int pthread_mutex_trylock (pthread_mutex_t *);
-int pthread_mutex_unlock (pthread_mutex_t *);
-int pthread_mutexattr_destroy (pthread_mutexattr_t *);
-int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_getpshared (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_gettype (const pthread_mutexattr_t *, int *);
-int pthread_mutexattr_init (pthread_mutexattr_t *);
-int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *, int);
-int pthread_mutexattr_setprotocol (pthread_mutexattr_t *, int);
-int pthread_mutexattr_setpshared (pthread_mutexattr_t *, int);
-int pthread_mutexattr_settype (pthread_mutexattr_t *, int);
-int pthread_rwlock_destroy (pthread_rwlock_t *rwlock);
-int pthread_rwlock_init (pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);
-int pthread_rwlock_rdlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_wrlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock);
-int pthread_rwlock_unlock (pthread_rwlock_t *rwlock);
-int pthread_rwlockattr_init (pthread_rwlockattr_t *rwlockattr);
-int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr,
-       int *pshared);
-int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared);
-int pthread_rwlockattr_destroy (pthread_rwlockattr_t *rwlockattr);
-int pthread_once (pthread_once_t *, void (*)(void));
-int pthread_getconcurrency (void);
-int pthread_setconcurrency (int);
-pthread_t pthread_self (void);
-int pthread_setcancelstate (int, int *);
-int pthread_setcanceltype (int, int *);
-int pthread_setschedparam (pthread_t, int, const struct sched_param *);
-int pthread_setspecific (pthread_key_t, const void *);
-void pthread_testcancel (void);
-int pthread_suspend (pthread_t);
-int pthread_continue (pthread_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;
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 
 
@@ -6581,10182 +252483,17135 @@
 
 
 
-static inline int
-__gthread_active_p (void)
-{
-  return 1;
-}
-static inline int
-__gthread_once (__gthread_once_t *once, void (*func) (void))
-{
-  if (__gthread_active_p ())
-    return pthread_once (once, func);
-  else
-    return -1;
-}
-static inline int
-__gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
-{
-  return pthread_key_create (key, dtor);
-}
-static inline int
-__gthread_key_delete (__gthread_key_t key)
-{
-  return pthread_key_delete (key);
-}
-static inline void *
-__gthread_getspecific (__gthread_key_t key)
-{
-  return pthread_getspecific (key);
-}
-static inline int
-__gthread_setspecific (__gthread_key_t key, const void *ptr)
-{
-  return pthread_setspecific (key, ptr);
-}
-static inline int
-__gthread_mutex_lock (__gthread_mutex_t *mutex)
-{
-  if (__gthread_active_p ())
-    return pthread_mutex_lock (mutex);
-  else
-    return 0;
-}
-static inline int
-__gthread_mutex_trylock (__gthread_mutex_t *mutex)
-{
-  if (__gthread_active_p ())
-    return pthread_mutex_trylock (mutex);
-  else
-    return 0;
-}
-static inline int
-__gthread_mutex_unlock (__gthread_mutex_t *mutex)
-{
-  if (__gthread_active_p ())
-    return 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_unlock (__gthread_recursive_mutex_t *mutex)
-{
-  return __gthread_mutex_unlock (mutex);
-}
-static inline int
-__gthread_cond_broadcast (__gthread_cond_t *cond)
-{
-  return pthread_cond_broadcast (cond);
-}
-static inline int
-__gthread_cond_wait (__gthread_cond_t *cond, __gthread_mutex_t *mutex)
-{
-  return pthread_cond_wait (cond, mutex);
-}
-static inline int
-__gthread_cond_wait_recursive (__gthread_cond_t *cond,
-          __gthread_recursive_mutex_t *mutex)
-{
-  return __gthread_cond_wait (cond, mutex);
-}
-#pragma GCC visibility pop
-typedef int _Atomic_word;
-namespace __gnu_cxx {
-  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);
-  }
-}
-       
-       
-       
-#pragma GCC visibility push(default)
-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() { }
-}
-#pragma GCC visibility pop
-namespace __gnu_cxx {
-  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 {
-  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; }
-    };
-}
-       
-#pragma GCC visibility push(default)
-namespace __cxxabiv1
-{
-  class __forced_unwind
-  {
-    virtual ~__forced_unwind() throw();
-    virtual void __pure_dummy() = 0;
-  };
-}
-#pragma GCC visibility pop
-namespace std {
-  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 {
-  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 {
-  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));
-    }
-}
-       
-namespace std {
-  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)
- {
-   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 (__gnu_cxx::__exchange_and_add_dispatch(&this->_M_refcount, -1) <= 0)
-     _M_destroy(__a);
- }
- void
- _M_destroy(const _Alloc&) throw();
- _CharT*
- _M_refcopy() throw()
- {
-   __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)
-      {
- ;
-        const size_type __pos = __first - _M_ibegin();
- _M_mutate(__pos, __last - __first, size_type(0));
- _M_rep()->_M_set_leaked();
- return iterator(_M_data() + __pos);
-      }
-      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_refcopy(), _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 {
-  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_refcopy();
- _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_refcopy();
- 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_refcopy();
-      _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>
-     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()->_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 {
-  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 + 0 };
-    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 {
-  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 {
-  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 {
-  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 {
-  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&);
-}
-       
-       
-       
-extern "C" {
-typedef int wctype_t;
-typedef int wctrans_t;
-int __attribute__((__cdecl__)) iswalpha (wint_t);
-int __attribute__((__cdecl__)) iswalnum (wint_t);
-int __attribute__((__cdecl__)) iswblank (wint_t);
-int __attribute__((__cdecl__)) iswcntrl (wint_t);
-int __attribute__((__cdecl__)) iswctype (wint_t, wctype_t);
-int __attribute__((__cdecl__)) iswdigit (wint_t);
-int __attribute__((__cdecl__)) iswgraph (wint_t);
-int __attribute__((__cdecl__)) iswlower (wint_t);
-int __attribute__((__cdecl__)) iswprint (wint_t);
-int __attribute__((__cdecl__)) iswpunct (wint_t);
-int __attribute__((__cdecl__)) iswspace (wint_t);
-int __attribute__((__cdecl__)) iswupper (wint_t);
-int __attribute__((__cdecl__)) iswxdigit (wint_t);
-wint_t __attribute__((__cdecl__)) towctrans (wint_t, wctrans_t);
-wint_t __attribute__((__cdecl__)) towupper (wint_t);
-wint_t __attribute__((__cdecl__)) towlower (wint_t);
-wctrans_t __attribute__((__cdecl__)) wctrans (const char *);
-wctype_t __attribute__((__cdecl__)) wctype (const char *);
-}
-namespace std {
-  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 {
-  struct ctype_base
-  {
-    typedef const int* __to_type;
-    typedef char mask;
-    static const mask upper = 01;
-    static const mask lower = 02;
-    static const mask alpha = 01 | 02;
-    static const mask digit = 04;
-    static const mask xdigit = 0100 | 04;
-    static const mask space = 010;
-    static const mask print = 020 | 01 | 02 | 04 | 0200;
-    static const mask graph = 020 | 01 | 02 | 04;
-    static const mask cntrl = 040;
-    static const mask punct = 020;
-    static const mask alnum = 01 | 02 | 04;
-  };
-}
-       
-namespace std {
-  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 boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+class function<
+      R ( A0 , A1 , A2)
+    , 0
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2) 
+        , 0
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-}
-namespace std {
-  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, const streamsize __newlen,
-      const 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;
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+class function<
+      R ( A0 , A1 , A2)
+    , 1
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2) 
+        , 1
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-  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;
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+class function<
+      R ( A0 , A1 , A2)
+    , 2
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2) 
+        , 2
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-  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_widen_init() const
-      {
- char __tmp[sizeof(_M_widen)];
- for (size_t __i = 0; __i < sizeof(_M_widen); ++__i)
-   __tmp[__i] = __i;
- do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen);
- _M_widen_ok = 1;
- if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen)))
-   _M_widen_ok = 2;
-      }
-      void _M_narrow_init() const
-      {
- char __tmp[sizeof(_M_narrow)];
- for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i)
-   __tmp[__i] = __i;
- do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow);
- _M_narrow_ok = 1;
- if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow)))
-   _M_narrow_ok = 2;
- else
-   {
-     char __c;
-     do_narrow(__tmp, __tmp + 1, 1, &__c);
-     if (__c == 1)
-       _M_narrow_ok = 2;
-   }
-      }
-    };
-  template<>
-    const ctype<char>&
-    use_facet<ctype<char> >(const locale& __loc);
-  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<>
-    const ctype<wchar_t>&
-    use_facet<ctype<wchar_t> >(const locale& __loc);
-  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 {
-  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 && !this->is(__m, *__low))
-      ++__low;
-    return __low;
-  }
-  const char*
-  ctype<char>::
-  scan_not(mask __m, const char* __low, const char* __high) const
-  {
-    while (__low < __high && this->is(__m, *__low) != 0)
-      ++__low;
-    return __low;
-  }
-}
-namespace std {
-  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;
- }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
+template<typename R
+    ,
+     typename A0 , typename A1 , typename A2
+>
+class function<
+      R ( A0 , A1 , A2)
+    , 3
+> {
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2) 
+        , 3
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
     }
-  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& __xtrc) const;
-      template<typename _ValueT>
-        iter_type
-        _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
-         _ValueT& __v) 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, iter_type, ios_base&, ios_base::iostate&, long&) const;
-      virtual iter_type
-      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
-       unsigned short&) const;
-      virtual iter_type
-      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
-      unsigned int&) const;
-      virtual iter_type
-      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
-      unsigned long&) const;
-      virtual iter_type
-      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
-      long long&) const;
-      virtual iter_type
-      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
-      unsigned long long&) const;
-      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, ios_base&, char_type __fill, long __v) const;
-      virtual iter_type
-      do_put(iter_type, ios_base&, char_type __fill, unsigned long) const;
-      virtual iter_type
-      do_put(iter_type, ios_base&, char_type __fill, long long __v) const;
-      virtual iter_type
-      do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const;
-      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;
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); } inline R operator()() { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)(); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
-  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 {
-  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>(__np.grouping()[0]) > 0);
-      _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;
-        }
-      if (__testeof)
-        __err |= ios_base::eofbit;
-      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;
-     if (__gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
-       __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;
- const __unsigned_type __max = __negative
-   ? -__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)
-  __testfail = true;
-       else
-  {
-    __result *= __base;
-    __testfail |= __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)
-      __testfail = true;
-    else
-      {
-        __result *= __base;
-        __testfail |= __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 (!__testfail && (__sep_pos || __found_zero
-       || __found_grouping.size()))
-   __v = __negative ? -__result : __result;
- else
-   __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, 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
-            __err |= ios_base::failbit;
-        }
-      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;
-   size_t __n;
-   bool __testeof = __beg == __end;
-          for (__n = 0; !__testeof; ++__n)
-            {
-       const char_type __c = *__beg;
-       if (__testf)
-         {
-    if (__n < __lc->_M_falsename_size)
-      __testf = __c == __lc->_M_falsename[__n];
-    else
-      break;
-  }
-       if (__testt)
-         {
-    if (__n < __lc->_M_truename_size)
-      __testt = __c == __lc->_M_truename[__n];
-    else
-      break;
-  }
-       if (!__testf && !__testt)
-  break;
-       if (++__beg == __end)
-  __testeof = true;
-            }
-   if (__testf && __n == __lc->_M_falsename_size)
-     __v = false;
-   else if (__testt && __n == __lc->_M_truename_size)
-     __v = true;
-   else
-     __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, long& __v) const
-    { return _M_extract_int(__beg, __end, __io, __err, __v); }
-  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, unsigned short& __v) const
-    { return _M_extract_int(__beg, __end, __io, __err, __v); }
-  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, unsigned int& __v) const
-    { return _M_extract_int(__beg, __end, __io, __err, __v); }
-  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, unsigned long& __v) const
-    { return _M_extract_int(__beg, __end, __io, __err, __v); }
-  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 long& __v) const
-    { return _M_extract_int(__beg, __end, __io, __err, __v); }
-  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, unsigned long long& __v) const
-    { return _M_extract_int(__beg, __end, __io, __err, __v); }
-  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());
-      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());
-      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());
-      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);
-      if (!(__err & ios_base::failbit))
- __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);
- const bool __fixed = __io.flags() & ios_base::fixed;
- const int __max_exp =
-   __gnu_cxx::__numeric_traits<_ValueT>::__max_exponent10;
- const int __cs_size = __fixed ? __max_exp + __prec + 4
-                               : __max_digits * 2 + __prec;
- char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
- __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, __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))
-     {
-       _CharT* __cs
-  = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-       * __w));
-       _M_pad(__fill, __w, __io, __cs, __name, __len);
-       __name = __cs;
-     }
-   __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, long __v) const
-    { return _M_insert_int(__s, __io, __fill, __v); }
-  template<typename _CharT, typename _OutIter>
-    _OutIter
-    num_put<_CharT, _OutIter>::
-    do_put(iter_type __s, ios_base& __io, char_type __fill,
-           unsigned long __v) const
-    { return _M_insert_int(__s, __io, __fill, __v); }
-  template<typename _CharT, typename _OutIter>
-    _OutIter
-    num_put<_CharT, _OutIter>::
-    do_put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const
-    { return _M_insert_int(__s, __io, __fill, __v); }
-  template<typename _CharT, typename _OutIter>
-    _OutIter
-    num_put<_CharT, _OutIter>::
-    do_put(iter_type __s, ios_base& __io, char_type __fill,
-           unsigned long long __v) const
-    { return _M_insert_int(__s, __io, __fill, __v); }
-  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
-      | ios_base::internal);
-      __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,
-       const streamsize __newlen,
-       const 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)
- {
-   __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 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 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 {
-  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 {
-  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 {
-  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 {
-  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 {
-  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 {
-  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 {
-  template<typename _CharT, typename _Traits, typename _Alloc>
-    class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
-    {
-    public:
-      typedef _CharT char_type;
-      typedef _Traits traits_type;
-      typedef _Alloc allocator_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;
-      typedef basic_string<char_type, _Traits, _Alloc> __string_type;
-      typedef typename __string_type::size_type __size_type;
-    protected:
-      ios_base::openmode _M_mode;
-      __string_type _M_string;
-    public:
-      explicit
-      basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)
-      : __streambuf_type(), _M_mode(__mode), _M_string()
-      { }
-      explicit
-      basic_stringbuf(const __string_type& __str,
-        ios_base::openmode __mode = ios_base::in | ios_base::out)
-      : __streambuf_type(), _M_mode(), _M_string(__str.data(), __str.size())
-      { _M_stringbuf_init(__mode); }
-      __string_type
-      str() const
-      {
- __string_type __ret;
- if (this->pptr())
-   {
-     if (this->pptr() > this->egptr())
-       __ret = __string_type(this->pbase(), this->pptr());
-     else
-        __ret = __string_type(this->pbase(), this->egptr());
-   }
- else
-   __ret = _M_string;
- return __ret;
-      }
-      void
-      str(const __string_type& __s)
-      {
- _M_string.assign(__s.data(), __s.size());
- _M_stringbuf_init(_M_mode);
-      }
-    protected:
-      void
-      _M_stringbuf_init(ios_base::openmode __mode)
-      {
- _M_mode = __mode;
- __size_type __len = 0;
- if (_M_mode & (ios_base::ate | ios_base::app))
-   __len = _M_string.size();
- _M_sync(const_cast<char_type*>(_M_string.data()), 0, __len);
-      }
-      virtual streamsize
-      showmanyc()
-      {
- streamsize __ret = -1;
- if (_M_mode & ios_base::in)
-   {
-     _M_update_egptr();
-     __ret = this->egptr() - this->gptr();
-   }
- return __ret;
-      }
-      virtual int_type
-      underflow();
-      virtual int_type
-      pbackfail(int_type __c = traits_type::eof());
-      virtual int_type
-      overflow(int_type __c = traits_type::eof());
-      virtual __streambuf_type*
-      setbuf(char_type* __s, streamsize __n)
-      {
- if (__s && __n >= 0)
-   {
-     _M_string.clear();
-     _M_sync(__s, __n, 0);
-   }
- return this;
-      }
-      virtual pos_type
-      seekoff(off_type __off, ios_base::seekdir __way,
-       ios_base::openmode __mode = ios_base::in | ios_base::out);
-      virtual pos_type
-      seekpos(pos_type __sp,
-       ios_base::openmode __mode = ios_base::in | ios_base::out);
-      void
-      _M_sync(char_type* __base, __size_type __i, __size_type __o);
-      void
-      _M_update_egptr()
-      {
- const bool __testin = _M_mode & ios_base::in;
- if (this->pptr() && this->pptr() > this->egptr())
-   if (__testin)
-     this->setg(this->eback(), this->gptr(), this->pptr());
-   else
-     this->setg(this->pptr(), this->pptr(), this->pptr());
-      }
-    };
-  template<typename _CharT, typename _Traits, typename _Alloc>
-    class basic_istringstream : public basic_istream<_CharT, _Traits>
-    {
-    public:
-      typedef _CharT char_type;
-      typedef _Traits traits_type;
-      typedef _Alloc allocator_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_string<_CharT, _Traits, _Alloc> __string_type;
-      typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
-      typedef basic_istream<char_type, traits_type> __istream_type;
-    private:
-      __stringbuf_type _M_stringbuf;
-    public:
-      explicit
-      basic_istringstream(ios_base::openmode __mode = ios_base::in)
-      : __istream_type(), _M_stringbuf(__mode | ios_base::in)
-      { this->init(&_M_stringbuf); }
-      explicit
-      basic_istringstream(const __string_type& __str,
-     ios_base::openmode __mode = ios_base::in)
-      : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in)
-      { this->init(&_M_stringbuf); }
-      ~basic_istringstream()
-      { }
-      __stringbuf_type*
-      rdbuf() const
-      { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
-      __string_type
-      str() const
-      { return _M_stringbuf.str(); }
-      void
-      str(const __string_type& __s)
-      { _M_stringbuf.str(__s); }
-    };
-  template <typename _CharT, typename _Traits, typename _Alloc>
-    class basic_ostringstream : public basic_ostream<_CharT, _Traits>
-    {
-    public:
-      typedef _CharT char_type;
-      typedef _Traits traits_type;
-      typedef _Alloc allocator_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_string<_CharT, _Traits, _Alloc> __string_type;
-      typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
-      typedef basic_ostream<char_type, traits_type> __ostream_type;
-    private:
-      __stringbuf_type _M_stringbuf;
-    public:
-      explicit
-      basic_ostringstream(ios_base::openmode __mode = ios_base::out)
-      : __ostream_type(), _M_stringbuf(__mode | ios_base::out)
-      { this->init(&_M_stringbuf); }
-      explicit
-      basic_ostringstream(const __string_type& __str,
-     ios_base::openmode __mode = ios_base::out)
-      : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out)
-      { this->init(&_M_stringbuf); }
-      ~basic_ostringstream()
-      { }
-      __stringbuf_type*
-      rdbuf() const
-      { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
-      __string_type
-      str() const
-      { return _M_stringbuf.str(); }
-      void
-      str(const __string_type& __s)
-      { _M_stringbuf.str(__s); }
-    };
-  template <typename _CharT, typename _Traits, typename _Alloc>
-    class basic_stringstream : public basic_iostream<_CharT, _Traits>
-    {
-    public:
-      typedef _CharT char_type;
-      typedef _Traits traits_type;
-      typedef _Alloc allocator_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_string<_CharT, _Traits, _Alloc> __string_type;
-      typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
-      typedef basic_iostream<char_type, traits_type> __iostream_type;
-    private:
-      __stringbuf_type _M_stringbuf;
-    public:
-      explicit
-      basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)
-      : __iostream_type(), _M_stringbuf(__m)
-      { this->init(&_M_stringbuf); }
-      explicit
-      basic_stringstream(const __string_type& __str,
-    ios_base::openmode __m = ios_base::out | ios_base::in)
-      : __iostream_type(), _M_stringbuf(__str, __m)
-      { this->init(&_M_stringbuf); }
-      ~basic_stringstream()
-      { }
-      __stringbuf_type*
-      rdbuf() const
-      { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
-      __string_type
-      str() const
-      { return _M_stringbuf.str(); }
-      void
-      str(const __string_type& __s)
-      { _M_stringbuf.str(__s); }
-    };
-}
-       
-namespace std {
-  template <class _CharT, class _Traits, class _Alloc>
-    typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
-    basic_stringbuf<_CharT, _Traits, _Alloc>::
-    pbackfail(int_type __c)
-    {
-      int_type __ret = traits_type::eof();
-      if (this->eback() < this->gptr())
- {
-   const bool __testeof = traits_type::eq_int_type(__c, __ret);
-   if (!__testeof)
-     {
-       const bool __testeq = traits_type::eq(traits_type::
-          to_char_type(__c),
-          this->gptr()[-1]);
-       const bool __testout = this->_M_mode & ios_base::out;
-       if (__testeq || __testout)
-  {
-    this->gbump(-1);
-    if (!__testeq)
-      *this->gptr() = traits_type::to_char_type(__c);
-    __ret = __c;
-  }
-     }
-   else
-     {
-       this->gbump(-1);
-       __ret = traits_type::not_eof(__c);
-     }
- }
-      return __ret;
-    }
-  template <class _CharT, class _Traits, class _Alloc>
-    typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
-    basic_stringbuf<_CharT, _Traits, _Alloc>::
-    overflow(int_type __c)
-    {
-      const bool __testout = this->_M_mode & ios_base::out;
-      if (__builtin_expect(!__testout, false))
- return traits_type::eof();
-      const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof());
-      if (__builtin_expect(__testeof, false))
- return traits_type::not_eof(__c);
-      const __size_type __capacity = _M_string.capacity();
-      const __size_type __max_size = _M_string.max_size();
-      const bool __testput = this->pptr() < this->epptr();
-      if (__builtin_expect(!__testput && __capacity == __max_size, false))
- return traits_type::eof();
-      const char_type __conv = traits_type::to_char_type(__c);
-      if (!__testput)
- {
-   const __size_type __opt_len = std::max(__size_type(2 * __capacity),
-       __size_type(512));
-   const __size_type __len = std::min(__opt_len, __max_size);
-   __string_type __tmp;
-   __tmp.reserve(__len);
-   if (this->pbase())
-     __tmp.assign(this->pbase(), this->epptr() - this->pbase());
-   __tmp.push_back(__conv);
-   _M_string.swap(__tmp);
-   _M_sync(const_cast<char_type*>(_M_string.data()),
-    this->gptr() - this->eback(), this->pptr() - this->pbase());
- }
-      else
- *this->pptr() = __conv;
-      this->pbump(1);
-      return __c;
-    }
-  template <class _CharT, class _Traits, class _Alloc>
-    typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
-    basic_stringbuf<_CharT, _Traits, _Alloc>::
-    underflow()
-    {
-      int_type __ret = traits_type::eof();
-      const bool __testin = this->_M_mode & ios_base::in;
-      if (__testin)
- {
-   _M_update_egptr();
-   if (this->gptr() < this->egptr())
-     __ret = traits_type::to_int_type(*this->gptr());
- }
-      return __ret;
-    }
-  template <class _CharT, class _Traits, class _Alloc>
-    typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
-    basic_stringbuf<_CharT, _Traits, _Alloc>::
-    seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode)
-    {
-      pos_type __ret = pos_type(off_type(-1));
-      bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
-      bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
-      const bool __testboth = __testin && __testout && __way != ios_base::cur;
-      __testin &= !(__mode & ios_base::out);
-      __testout &= !(__mode & ios_base::in);
-      const char_type* __beg = __testin ? this->eback() : this->pbase();
-      if ((__beg || !__off) && (__testin || __testout || __testboth))
- {
-   _M_update_egptr();
-   off_type __newoffi = __off;
-   off_type __newoffo = __newoffi;
-   if (__way == ios_base::cur)
-     {
-       __newoffi += this->gptr() - __beg;
-       __newoffo += this->pptr() - __beg;
-     }
-   else if (__way == ios_base::end)
-     __newoffo = __newoffi += this->egptr() - __beg;
-   if ((__testin || __testboth)
-       && __newoffi >= 0
-       && this->egptr() - __beg >= __newoffi)
-     {
-       this->gbump((__beg + __newoffi) - this->gptr());
-       __ret = pos_type(__newoffi);
-     }
-   if ((__testout || __testboth)
-       && __newoffo >= 0
-       && this->egptr() - __beg >= __newoffo)
-     {
-       this->pbump((__beg + __newoffo) - this->pptr());
-       __ret = pos_type(__newoffo);
-     }
- }
-      return __ret;
-    }
-  template <class _CharT, class _Traits, class _Alloc>
-    typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
-    basic_stringbuf<_CharT, _Traits, _Alloc>::
-    seekpos(pos_type __sp, ios_base::openmode __mode)
-    {
-      pos_type __ret = pos_type(off_type(-1));
-      const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
-      const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
-      const char_type* __beg = __testin ? this->eback() : this->pbase();
-      if ((__beg || !off_type(__sp)) && (__testin || __testout))
- {
-   _M_update_egptr();
-   const off_type __pos(__sp);
-   const bool __testpos = (0 <= __pos
-      && __pos <= this->egptr() - __beg);
-   if (__testpos)
-     {
-       if (__testin)
-  this->gbump((__beg + __pos) - this->gptr());
-       if (__testout)
-                this->pbump((__beg + __pos) - this->pptr());
-       __ret = __sp;
-     }
- }
-      return __ret;
-    }
-  template <class _CharT, class _Traits, class _Alloc>
-    void
-    basic_stringbuf<_CharT, _Traits, _Alloc>::
-    _M_sync(char_type* __base, __size_type __i, __size_type __o)
-    {
-      const bool __testin = _M_mode & ios_base::in;
-      const bool __testout = _M_mode & ios_base::out;
-      char_type* __endg = __base + _M_string.size();
-      char_type* __endp = __base + _M_string.capacity();
-      if (__base != _M_string.data())
- {
-   __endg += __i;
-   __i = 0;
-   __endp = __endg;
- }
-      if (__testin)
- this->setg(__base, __base + __i, __endg);
-      if (__testout)
- {
-   this->setp(__base, __endp);
-   this->pbump(__o);
-   if (!__testin)
-     this->setg(__endg, __endg, __endg);
- }
-    }
-  extern template class basic_stringbuf<char>;
-  extern template class basic_istringstream<char>;
-  extern template class basic_ostringstream<char>;
-  extern template class basic_stringstream<char>;
-  extern template class basic_stringbuf<wchar_t>;
-  extern template class basic_istringstream<wchar_t>;
-  extern template class basic_ostringstream<wchar_t>;
-  extern template class basic_stringstream<wchar_t>;
-}
-namespace std {
-  template<typename _Tp> class complex;
-  template<> class complex<float>;
-  template<> class complex<double>;
-  template<> class complex<long double>;
-  template<typename _Tp> _Tp abs(const complex<_Tp>&);
-  template<typename _Tp> _Tp arg(const complex<_Tp>&);
-  template<typename _Tp> _Tp norm(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> conj(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> polar(const _Tp&, const _Tp& = 0);
-  template<typename _Tp> complex<_Tp> cos(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> cosh(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> exp(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> log(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> log10(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> pow(const complex<_Tp>&, int);
-  template<typename _Tp> complex<_Tp> pow(const complex<_Tp>&, const _Tp&);
-  template<typename _Tp> complex<_Tp> pow(const complex<_Tp>&,
-                                          const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> pow(const _Tp&, const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> sin(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> sinh(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> sqrt(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> tan(const complex<_Tp>&);
-  template<typename _Tp> complex<_Tp> tanh(const complex<_Tp>&);
-  template<typename _Tp>
-    struct complex
-    {
-      typedef _Tp value_type;
-      complex(const _Tp& = _Tp(), const _Tp & = _Tp());
-      template<typename _Up>
-        complex(const complex<_Up>&);
-      _Tp& real();
-      const _Tp& real() const;
-      _Tp& imag();
-      const _Tp& imag() const;
-      complex<_Tp>& operator=(const _Tp&);
-      complex<_Tp>& operator+=(const _Tp&);
-      complex<_Tp>& operator-=(const _Tp&);
-      complex<_Tp>& operator*=(const _Tp&);
-      complex<_Tp>& operator/=(const _Tp&);
-      template<typename _Up>
-        complex<_Tp>& operator=(const complex<_Up>&);
-      template<typename _Up>
-        complex<_Tp>& operator+=(const complex<_Up>&);
-      template<typename _Up>
-        complex<_Tp>& operator-=(const complex<_Up>&);
-      template<typename _Up>
-        complex<_Tp>& operator*=(const complex<_Up>&);
-      template<typename _Up>
-        complex<_Tp>& operator/=(const complex<_Up>&);
-      const complex& __rep() const;
-    private:
-      _Tp _M_real;
-      _Tp _M_imag;
-    };
-  template<typename _Tp>
-    inline _Tp&
-    complex<_Tp>::real() { return _M_real; }
-  template<typename _Tp>
-    inline const _Tp&
-    complex<_Tp>::real() const { return _M_real; }
-  template<typename _Tp>
-    inline _Tp&
-    complex<_Tp>::imag() { return _M_imag; }
-  template<typename _Tp>
-    inline const _Tp&
-    complex<_Tp>::imag() const { return _M_imag; }
-  template<typename _Tp>
-    inline
-    complex<_Tp>::complex(const _Tp& __r, const _Tp& __i)
-    : _M_real(__r), _M_imag(__i) { }
-  template<typename _Tp>
-    template<typename _Up>
-    inline
-    complex<_Tp>::complex(const complex<_Up>& __z)
-    : _M_real(__z.real()), _M_imag(__z.imag()) { }
-  template<typename _Tp>
-    complex<_Tp>&
-    complex<_Tp>::operator=(const _Tp& __t)
-    {
-     _M_real = __t;
-     _M_imag = _Tp();
-     return *this;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>&
-    complex<_Tp>::operator+=(const _Tp& __t)
-    {
-      _M_real += __t;
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>&
-    complex<_Tp>::operator-=(const _Tp& __t)
-    {
-      _M_real -= __t;
-      return *this;
-    }
-  template<typename _Tp>
-    complex<_Tp>&
-    complex<_Tp>::operator*=(const _Tp& __t)
-    {
-      _M_real *= __t;
-      _M_imag *= __t;
-      return *this;
-    }
-  template<typename _Tp>
-    complex<_Tp>&
-    complex<_Tp>::operator/=(const _Tp& __t)
-    {
-      _M_real /= __t;
-      _M_imag /= __t;
-      return *this;
-    }
-  template<typename _Tp>
-    template<typename _Up>
-    complex<_Tp>&
-    complex<_Tp>::operator=(const complex<_Up>& __z)
-    {
-      _M_real = __z.real();
-      _M_imag = __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    template<typename _Up>
-    complex<_Tp>&
-    complex<_Tp>::operator+=(const complex<_Up>& __z)
-    {
-      _M_real += __z.real();
-      _M_imag += __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    template<typename _Up>
-    complex<_Tp>&
-    complex<_Tp>::operator-=(const complex<_Up>& __z)
-    {
-      _M_real -= __z.real();
-      _M_imag -= __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    template<typename _Up>
-    complex<_Tp>&
-    complex<_Tp>::operator*=(const complex<_Up>& __z)
-    {
-      const _Tp __r = _M_real * __z.real() - _M_imag * __z.imag();
-      _M_imag = _M_real * __z.imag() + _M_imag * __z.real();
-      _M_real = __r;
-      return *this;
-    }
-  template<typename _Tp>
-    template<typename _Up>
-    complex<_Tp>&
-    complex<_Tp>::operator/=(const complex<_Up>& __z)
-    {
-      const _Tp __r = _M_real * __z.real() + _M_imag * __z.imag();
-      const _Tp __n = std::norm(__z);
-      _M_imag = (_M_imag * __z.real() - _M_real * __z.imag()) / __n;
-      _M_real = __r / __n;
-      return *this;
-    }
-  template<typename _Tp>
-    inline const complex<_Tp>&
-    complex<_Tp>::__rep() const { return *this; }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator+(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r += __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator+(const complex<_Tp>& __x, const _Tp& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r.real() += __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator+(const _Tp& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __y;
-      __r.real() += __x;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator-(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r -= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator-(const complex<_Tp>& __x, const _Tp& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r.real() -= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator-(const _Tp& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r(__x, -__y.imag());
-      __r.real() -= __y.real();
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator*(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r *= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator*(const complex<_Tp>& __x, const _Tp& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r *= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator*(const _Tp& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __y;
-      __r *= __x;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator/(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r /= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator/(const complex<_Tp>& __x, const _Tp& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r /= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator/(const _Tp& __x, const complex<_Tp>& __y)
-    {
-      complex<_Tp> __r = __x;
-      __r /= __y;
-      return __r;
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator+(const complex<_Tp>& __x)
-    { return __x; }
-  template<typename _Tp>
-    inline complex<_Tp>
-    operator-(const complex<_Tp>& __x)
-    { return complex<_Tp>(-__x.real(), -__x.imag()); }
-  template<typename _Tp>
-    inline bool
-    operator==(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    { return __x.real() == __y.real() && __x.imag() == __y.imag(); }
-  template<typename _Tp>
-    inline bool
-    operator==(const complex<_Tp>& __x, const _Tp& __y)
-    { return __x.real() == __y && __x.imag() == _Tp(); }
-  template<typename _Tp>
-    inline bool
-    operator==(const _Tp& __x, const complex<_Tp>& __y)
-    { return __x == __y.real() && _Tp() == __y.imag(); }
-  template<typename _Tp>
-    inline bool
-    operator!=(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    { return __x.real() != __y.real() || __x.imag() != __y.imag(); }
-  template<typename _Tp>
-    inline bool
-    operator!=(const complex<_Tp>& __x, const _Tp& __y)
-    { return __x.real() != __y || __x.imag() != _Tp(); }
-  template<typename _Tp>
-    inline bool
-    operator!=(const _Tp& __x, const complex<_Tp>& __y)
-    { return __x != __y.real() || _Tp() != __y.imag(); }
-  template<typename _Tp, typename _CharT, class _Traits>
-    basic_istream<_CharT, _Traits>&
-    operator>>(basic_istream<_CharT, _Traits>& __is, complex<_Tp>& __x)
-    {
-      _Tp __re_x, __im_x;
-      _CharT __ch;
-      __is >> __ch;
-      if (__ch == '(')
- {
-   __is >> __re_x >> __ch;
-   if (__ch == ',')
-     {
-       __is >> __im_x >> __ch;
-       if (__ch == ')')
-  __x = complex<_Tp>(__re_x, __im_x);
-       else
-  __is.setstate(ios_base::failbit);
-     }
-   else if (__ch == ')')
-     __x = __re_x;
-   else
-     __is.setstate(ios_base::failbit);
- }
-      else
- {
-   __is.putback(__ch);
-   __is >> __re_x;
-   __x = __re_x;
- }
-      return __is;
-    }
-  template<typename _Tp, typename _CharT, class _Traits>
-    basic_ostream<_CharT, _Traits>&
-    operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x)
-    {
-      basic_ostringstream<_CharT, _Traits> __s;
-      __s.flags(__os.flags());
-      __s.imbue(__os.getloc());
-      __s.precision(__os.precision());
-      __s << '(' << __x.real() << ',' << __x.imag() << ')';
-      return __os << __s.str();
-    }
-  template<typename _Tp>
-    inline _Tp&
-    real(complex<_Tp>& __z)
-    { return __z.real(); }
-  template<typename _Tp>
-    inline const _Tp&
-    real(const complex<_Tp>& __z)
-    { return __z.real(); }
-  template<typename _Tp>
-    inline _Tp&
-    imag(complex<_Tp>& __z)
-    { return __z.imag(); }
-  template<typename _Tp>
-    inline const _Tp&
-    imag(const complex<_Tp>& __z)
-    { return __z.imag(); }
-  template<typename _Tp>
-    inline _Tp
-    __complex_abs(const complex<_Tp>& __z)
-    {
-      _Tp __x = __z.real();
-      _Tp __y = __z.imag();
-      const _Tp __s = std::max(abs(__x), abs(__y));
-      if (__s == _Tp())
-        return __s;
-      __x /= __s;
-      __y /= __s;
-      return __s * sqrt(__x * __x + __y * __y);
-    }
-  template<typename _Tp>
-    inline _Tp
-    abs(const complex<_Tp>& __z) { return __complex_abs(__z); }
-  template<typename _Tp>
-    inline _Tp
-    __complex_arg(const complex<_Tp>& __z)
-    { return atan2(__z.imag(), __z.real()); }
-  template<typename _Tp>
-    inline _Tp
-    arg(const complex<_Tp>& __z) { return __complex_arg(__z); }
-  template<bool>
-    struct _Norm_helper
-    {
-      template<typename _Tp>
-        static inline _Tp _S_do_it(const complex<_Tp>& __z)
-        {
-          const _Tp __x = __z.real();
-          const _Tp __y = __z.imag();
-          return __x * __x + __y * __y;
-        }
-    };
-  template<>
-    struct _Norm_helper<true>
-    {
-      template<typename _Tp>
-        static inline _Tp _S_do_it(const complex<_Tp>& __z)
-        {
-          _Tp __res = std::abs(__z);
-          return __res * __res;
-        }
-    };
-  template<typename _Tp>
-    inline _Tp
-    norm(const complex<_Tp>& __z)
-    {
-      return _Norm_helper<__is_floating<_Tp>::__value
- && !0>::_S_do_it(__z);
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    polar(const _Tp& __rho, const _Tp& __theta)
-    { return complex<_Tp>(__rho * cos(__theta), __rho * sin(__theta)); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    conj(const complex<_Tp>& __z)
-    { return complex<_Tp>(__z.real(), -__z.imag()); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_cos(const complex<_Tp>& __z)
-    {
-      const _Tp __x = __z.real();
-      const _Tp __y = __z.imag();
-      return complex<_Tp>(cos(__x) * cosh(__y), -sin(__x) * sinh(__y));
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    cos(const complex<_Tp>& __z) { return __complex_cos(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_cosh(const complex<_Tp>& __z)
-    {
-      const _Tp __x = __z.real();
-      const _Tp __y = __z.imag();
-      return complex<_Tp>(cosh(__x) * cos(__y), sinh(__x) * sin(__y));
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    cosh(const complex<_Tp>& __z) { return __complex_cosh(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_exp(const complex<_Tp>& __z)
-    { return std::polar(exp(__z.real()), __z.imag()); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    exp(const complex<_Tp>& __z) { return __complex_exp(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_log(const complex<_Tp>& __z)
-    { return complex<_Tp>(log(std::abs(__z)), std::arg(__z)); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    log(const complex<_Tp>& __z) { return __complex_log(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    log10(const complex<_Tp>& __z)
-    { return std::log(__z) / log(_Tp(10.0)); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_sin(const complex<_Tp>& __z)
-    {
-      const _Tp __x = __z.real();
-      const _Tp __y = __z.imag();
-      return complex<_Tp>(sin(__x) * cosh(__y), cos(__x) * sinh(__y));
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    sin(const complex<_Tp>& __z) { return __complex_sin(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_sinh(const complex<_Tp>& __z)
-    {
-      const _Tp __x = __z.real();
-      const _Tp __y = __z.imag();
-      return complex<_Tp>(sinh(__x) * cos(__y), cosh(__x) * sin(__y));
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    sinh(const complex<_Tp>& __z) { return __complex_sinh(__z); }
-  template<typename _Tp>
-    complex<_Tp>
-    __complex_sqrt(const complex<_Tp>& __z)
-    {
-      _Tp __x = __z.real();
-      _Tp __y = __z.imag();
-      if (__x == _Tp())
-        {
-          _Tp __t = sqrt(abs(__y) / 2);
-          return complex<_Tp>(__t, __y < _Tp() ? -__t : __t);
-        }
-      else
-        {
-          _Tp __t = sqrt(2 * (std::abs(__z) + abs(__x)));
-          _Tp __u = __t / 2;
-          return __x > _Tp()
-            ? complex<_Tp>(__u, __y / __t)
-            : complex<_Tp>(abs(__y) / __t, __y < _Tp() ? -__u : __u);
-        }
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    sqrt(const complex<_Tp>& __z) { return __complex_sqrt(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_tan(const complex<_Tp>& __z)
-    { return std::sin(__z) / std::cos(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    tan(const complex<_Tp>& __z) { return __complex_tan(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_tanh(const complex<_Tp>& __z)
-    { return std::sinh(__z) / std::cosh(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    tanh(const complex<_Tp>& __z) { return __complex_tanh(__z); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    pow(const complex<_Tp>& __z, int __n)
-    { return std::__pow_helper(__z, __n); }
-  template<typename _Tp>
-    complex<_Tp>
-    pow(const complex<_Tp>& __x, const _Tp& __y)
-    {
-      if (__x == _Tp())
- return _Tp();
-      if (__x.imag() == _Tp() && __x.real() > _Tp())
-        return pow(__x.real(), __y);
-      complex<_Tp> __t = std::log(__x);
-      return std::polar(exp(__y * __t.real()), __y * __t.imag());
-    }
-  template<typename _Tp>
-    inline complex<_Tp>
-    __complex_pow(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    { return __x == _Tp() ? _Tp() : std::exp(__y * std::log(__x)); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    pow(const complex<_Tp>& __x, const complex<_Tp>& __y)
-    { return __complex_pow(__x, __y); }
-  template<typename _Tp>
-    inline complex<_Tp>
-    pow(const _Tp& __x, const complex<_Tp>& __y)
-    {
-      return __x > _Tp() ? std::polar(pow(__x, __y.real()),
-          __y.imag() * log(__x))
-                  : std::pow(complex<_Tp>(__x, _Tp()), __y);
-    }
-  template<>
-    struct complex<float>
-    {
-      typedef float value_type;
-      typedef __complex__ float _ComplexT;
-      complex(_ComplexT __z) : _M_value(__z) { }
-      complex(float = 0.0f, float = 0.0f);
-      explicit complex(const complex<double>&);
-      explicit complex(const complex<long double>&);
-      float& real();
-      const float& real() const;
-      float& imag();
-      const float& imag() const;
-      complex<float>& operator=(float);
-      complex<float>& operator+=(float);
-      complex<float>& operator-=(float);
-      complex<float>& operator*=(float);
-      complex<float>& operator/=(float);
-      template<typename _Tp>
-        complex<float>&operator=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<float>& operator+=(const complex<_Tp>&);
-      template<class _Tp>
-        complex<float>& operator-=(const complex<_Tp>&);
-      template<class _Tp>
-        complex<float>& operator*=(const complex<_Tp>&);
-      template<class _Tp>
-        complex<float>&operator/=(const complex<_Tp>&);
-      const _ComplexT& __rep() const { return _M_value; }
-    private:
-      _ComplexT _M_value;
-    };
-  inline float&
-  complex<float>::real()
-  { return __real__ _M_value; }
-  inline const float&
-  complex<float>::real() const
-  { return __real__ _M_value; }
-  inline float&
-  complex<float>::imag()
-  { return __imag__ _M_value; }
-  inline const float&
-  complex<float>::imag() const
-  { return __imag__ _M_value; }
-  inline
-  complex<float>::complex(float __r, float __i)
-  {
-    __real__ _M_value = __r;
-    __imag__ _M_value = __i;
-  }
-  inline complex<float>&
-  complex<float>::operator=(float __f)
-  {
-    __real__ _M_value = __f;
-    __imag__ _M_value = 0.0f;
-    return *this;
-  }
-  inline complex<float>&
-  complex<float>::operator+=(float __f)
-  {
-    __real__ _M_value += __f;
-    return *this;
-  }
-  inline complex<float>&
-  complex<float>::operator-=(float __f)
-  {
-    __real__ _M_value -= __f;
-    return *this;
-  }
-  inline complex<float>&
-  complex<float>::operator*=(float __f)
-  {
-    _M_value *= __f;
-    return *this;
-  }
-  inline complex<float>&
-  complex<float>::operator/=(float __f)
-  {
-    _M_value /= __f;
-    return *this;
-  }
-  template<typename _Tp>
-  inline complex<float>&
-  complex<float>::operator=(const complex<_Tp>& __z)
-  {
-    __real__ _M_value = __z.real();
-    __imag__ _M_value = __z.imag();
-    return *this;
-  }
-  template<typename _Tp>
-  inline complex<float>&
-  complex<float>::operator+=(const complex<_Tp>& __z)
-  {
-    __real__ _M_value += __z.real();
-    __imag__ _M_value += __z.imag();
-    return *this;
-  }
-  template<typename _Tp>
-    inline complex<float>&
-    complex<float>::operator-=(const complex<_Tp>& __z)
-    {
-     __real__ _M_value -= __z.real();
-     __imag__ _M_value -= __z.imag();
-     return *this;
-    }
-  template<typename _Tp>
-    inline complex<float>&
-    complex<float>::operator*=(const complex<_Tp>& __z)
-    {
-      _ComplexT __t;
-      __real__ __t = __z.real();
-      __imag__ __t = __z.imag();
-      _M_value *= __t;
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<float>&
-    complex<float>::operator/=(const complex<_Tp>& __z)
-    {
-      _ComplexT __t;
-      __real__ __t = __z.real();
-      __imag__ __t = __z.imag();
-      _M_value /= __t;
-      return *this;
-    }
-  template<>
-    struct complex<double>
-    {
-      typedef double value_type;
-      typedef __complex__ double _ComplexT;
-      complex(_ComplexT __z) : _M_value(__z) { }
-      complex(double = 0.0, double = 0.0);
-      complex(const complex<float>&);
-      explicit complex(const complex<long double>&);
-      double& real();
-      const double& real() const;
-      double& imag();
-      const double& imag() const;
-      complex<double>& operator=(double);
-      complex<double>& operator+=(double);
-      complex<double>& operator-=(double);
-      complex<double>& operator*=(double);
-      complex<double>& operator/=(double);
-      template<typename _Tp>
-        complex<double>& operator=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<double>& operator+=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<double>& operator-=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<double>& operator*=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<double>& operator/=(const complex<_Tp>&);
-      const _ComplexT& __rep() const { return _M_value; }
-    private:
-      _ComplexT _M_value;
-    };
-  inline double&
-  complex<double>::real()
-  { return __real__ _M_value; }
-  inline const double&
-  complex<double>::real() const
-  { return __real__ _M_value; }
-  inline double&
-  complex<double>::imag()
-  { return __imag__ _M_value; }
-  inline const double&
-  complex<double>::imag() const
-  { return __imag__ _M_value; }
-  inline
-  complex<double>::complex(double __r, double __i)
-  {
-    __real__ _M_value = __r;
-    __imag__ _M_value = __i;
-  }
-  inline complex<double>&
-  complex<double>::operator=(double __d)
-  {
-    __real__ _M_value = __d;
-    __imag__ _M_value = 0.0;
-    return *this;
-  }
-  inline complex<double>&
-  complex<double>::operator+=(double __d)
-  {
-    __real__ _M_value += __d;
-    return *this;
-  }
-  inline complex<double>&
-  complex<double>::operator-=(double __d)
-  {
-    __real__ _M_value -= __d;
-    return *this;
-  }
-  inline complex<double>&
-  complex<double>::operator*=(double __d)
-  {
-    _M_value *= __d;
-    return *this;
-  }
-  inline complex<double>&
-  complex<double>::operator/=(double __d)
-  {
-    _M_value /= __d;
-    return *this;
-  }
-  template<typename _Tp>
-    inline complex<double>&
-    complex<double>::operator=(const complex<_Tp>& __z)
-    {
-      __real__ _M_value = __z.real();
-      __imag__ _M_value = __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<double>&
-    complex<double>::operator+=(const complex<_Tp>& __z)
-    {
-      __real__ _M_value += __z.real();
-      __imag__ _M_value += __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<double>&
-    complex<double>::operator-=(const complex<_Tp>& __z)
-    {
-      __real__ _M_value -= __z.real();
-      __imag__ _M_value -= __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<double>&
-    complex<double>::operator*=(const complex<_Tp>& __z)
-    {
-      _ComplexT __t;
-      __real__ __t = __z.real();
-      __imag__ __t = __z.imag();
-      _M_value *= __t;
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<double>&
-    complex<double>::operator/=(const complex<_Tp>& __z)
-    {
-      _ComplexT __t;
-      __real__ __t = __z.real();
-      __imag__ __t = __z.imag();
-      _M_value /= __t;
-      return *this;
-    }
-  template<>
-    struct complex<long double>
-    {
-      typedef long double value_type;
-      typedef __complex__ long double _ComplexT;
-      complex(_ComplexT __z) : _M_value(__z) { }
-      complex(long double = 0.0L, long double = 0.0L);
-      complex(const complex<float>&);
-      complex(const complex<double>&);
-      long double& real();
-      const long double& real() const;
-      long double& imag();
-      const long double& imag() const;
-      complex<long double>& operator= (long double);
-      complex<long double>& operator+= (long double);
-      complex<long double>& operator-= (long double);
-      complex<long double>& operator*= (long double);
-      complex<long double>& operator/= (long double);
-      template<typename _Tp>
-        complex<long double>& operator=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<long double>& operator+=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<long double>& operator-=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<long double>& operator*=(const complex<_Tp>&);
-      template<typename _Tp>
-        complex<long double>& operator/=(const complex<_Tp>&);
-      const _ComplexT& __rep() const { return _M_value; }
-    private:
-      _ComplexT _M_value;
-    };
-  inline
-  complex<long double>::complex(long double __r, long double __i)
-  {
-    __real__ _M_value = __r;
-    __imag__ _M_value = __i;
-  }
-  inline long double&
-  complex<long double>::real()
-  { return __real__ _M_value; }
-  inline const long double&
-  complex<long double>::real() const
-  { return __real__ _M_value; }
-  inline long double&
-  complex<long double>::imag()
-  { return __imag__ _M_value; }
-  inline const long double&
-  complex<long double>::imag() const
-  { return __imag__ _M_value; }
-  inline complex<long double>&
-  complex<long double>::operator=(long double __r)
-  {
-    __real__ _M_value = __r;
-    __imag__ _M_value = 0.0L;
-    return *this;
-  }
-  inline complex<long double>&
-  complex<long double>::operator+=(long double __r)
-  {
-    __real__ _M_value += __r;
-    return *this;
-  }
-  inline complex<long double>&
-  complex<long double>::operator-=(long double __r)
-  {
-    __real__ _M_value -= __r;
-    return *this;
-  }
-  inline complex<long double>&
-  complex<long double>::operator*=(long double __r)
-  {
-    _M_value *= __r;
-    return *this;
-  }
-  inline complex<long double>&
-  complex<long double>::operator/=(long double __r)
-  {
-    _M_value /= __r;
-    return *this;
-  }
-  template<typename _Tp>
-    inline complex<long double>&
-    complex<long double>::operator=(const complex<_Tp>& __z)
-    {
-      __real__ _M_value = __z.real();
-      __imag__ _M_value = __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<long double>&
-    complex<long double>::operator+=(const complex<_Tp>& __z)
-    {
-      __real__ _M_value += __z.real();
-      __imag__ _M_value += __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<long double>&
-    complex<long double>::operator-=(const complex<_Tp>& __z)
-    {
-      __real__ _M_value -= __z.real();
-      __imag__ _M_value -= __z.imag();
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<long double>&
-    complex<long double>::operator*=(const complex<_Tp>& __z)
-    {
-      _ComplexT __t;
-      __real__ __t = __z.real();
-      __imag__ __t = __z.imag();
-      _M_value *= __t;
-      return *this;
-    }
-  template<typename _Tp>
-    inline complex<long double>&
-    complex<long double>::operator/=(const complex<_Tp>& __z)
-    {
-      _ComplexT __t;
-      __real__ __t = __z.real();
-      __imag__ __t = __z.imag();
-      _M_value /= __t;
-      return *this;
-    }
-  inline
-  complex<float>::complex(const complex<double>& __z)
-  : _M_value(__z.__rep()) { }
-  inline
-  complex<float>::complex(const complex<long double>& __z)
-  : _M_value(__z.__rep()) { }
-  inline
-  complex<double>::complex(const complex<float>& __z)
-  : _M_value(__z.__rep()) { }
-  inline
-  complex<double>::complex(const complex<long double>& __z)
-  : _M_value(__z.__rep()) { }
-  inline
-  complex<long double>::complex(const complex<float>& __z)
-  : _M_value(__z.__rep()) { }
-  inline
-  complex<long double>::complex(const complex<double>& __z)
-  : _M_value(__z.__rep()) { }
-  extern template istream& operator>>(istream&, complex<float>&);
-  extern template ostream& operator<<(ostream&, const complex<float>&);
-  extern template istream& operator>>(istream&, complex<double>&);
-  extern template ostream& operator<<(ostream&, const complex<double>&);
-  extern template istream& operator>>(istream&, complex<long double>&);
-  extern template ostream& operator<<(ostream&, const complex<long double>&);
-  extern template wistream& operator>>(wistream&, complex<float>&);
-  extern template wostream& operator<<(wostream&, const complex<float>&);
-  extern template wistream& operator>>(wistream&, complex<double>&);
-  extern template wostream& operator<<(wostream&, const complex<double>&);
-  extern template wistream& operator>>(wistream&, complex<long double>&);
-  extern template wostream& operator<<(wostream&, const complex<long double>&);
-}
-namespace __gnu_cxx {
-  template<typename _Tp, typename _Up>
-    struct __promote_2<std::complex<_Tp>, _Up>
-    {
-    public:
-      typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type;
-    };
-  template<typename _Tp, typename _Up>
-    struct __promote_2<_Tp, std::complex<_Up> >
-    {
-    public:
-      typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type;
-    };
-  template<typename _Tp, typename _Up>
-    struct __promote_2<std::complex<_Tp>, std::complex<_Up> >
-    {
-    public:
-      typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type;
-    };
-}
-namespace boost {
-namespace detail{
-struct is_convertible_from_tester
-{
-   template <class T>
-   is_convertible_from_tester(const std::complex<T>&);
-};
-}
-template< typename T > struct is_complex : ::boost::integral_constant<bool,(::boost::is_convertible<T, detail::is_convertible_from_tester>::value)> { };
-}
-extern boost::scope_exit::aux::undeclared
-        boost_local_auxXargs;
-namespace boost { namespace local { namespace aux {
-template<typename F, unsigned int defaults_count = 0>
-struct abstract_function {};
-template<typename R
-   
-   
->
-struct abstract_function<
-      R ()
-    , 0
-> {
-    virtual R operator()() = 0;
-};
-template<typename R
-    ,
-    typename A0
->
-struct abstract_function<
-      R ( A0)
-    , 0
-> {
-    virtual R operator()( A0) = 0;
-};
-template<typename R
-    ,
-    typename A0
->
-struct abstract_function<
-      R ( A0)
-    , 1
-> {
-    virtual R operator()( A0) = 0; virtual R operator()() = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1
->
-struct abstract_function<
-      R ( A0 , A1)
-    , 0
-> {
-    virtual R operator()( A0 , A1) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1
->
-struct abstract_function<
-      R ( A0 , A1)
-    , 1
-> {
-    virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1
->
-struct abstract_function<
-      R ( A0 , A1)
-    , 2
-> {
-    virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-struct abstract_function<
-      R ( A0 , A1 , A2)
-    , 0
-> {
-    virtual R operator()( A0 , A1 , A2) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-struct abstract_function<
-      R ( A0 , A1 , A2)
-    , 1
-> {
-    virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-struct abstract_function<
-      R ( A0 , A1 , A2)
-    , 2
-> {
-    virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-struct abstract_function<
-      R ( A0 , A1 , A2)
-    , 3
-> {
-    virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
-};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3
+     typename A0 , typename A1 , typename A2 , typename A3
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3)
     , 0
 > {
-    virtual R operator()( A0 , A1 , A2 , A3) = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3) 
+        , 0
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3
+     typename A0 , typename A1 , typename A2 , typename A3
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3)
     , 1
 > {
-    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3) 
+        , 1
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3
+     typename A0 , typename A1 , typename A2 , typename A3
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3)
     , 2
 > {
-    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3) 
+        , 2
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3
+     typename A0 , typename A1 , typename A2 , typename A3
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3)
     , 3
 > {
-    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3) 
+        , 3
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3
+     typename A0 , typename A1 , typename A2 , typename A3
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3)
     , 4
 > {
-    virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3) 
+        , 4
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); } inline R operator()() { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/lo
cal/aux_/function.hpp", 106), 0) ); return (*ptr_)(); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3 , A4)
     , 0
 > {
-    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3 , A4) 
+        , 0
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3 , a4); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3 , A4)
     , 1
 > {
-    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-struct abstract_function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 2
-> {
-    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-struct abstract_function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 3
-> {
-    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0;
-};
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-struct abstract_function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 4
-> {
-    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3 , A4) 
+        , 1
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); }
+
+private:
+    abstract_function_type* ptr_;
 };
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
-struct abstract_function<
+class function<
       R ( A0 , A1 , A2 , A3 , A4)
-    , 5
+    , 2
 > {
-    virtual R operator()( A0 , A1 , A2 , A3 , A4) = 0; virtual R operator()( A0 , A1 , A2 , A3) = 0; virtual R operator()( A0 , A1 , A2) = 0; virtual R operator()( A0 , A1) = 0; virtual R operator()( A0) = 0; virtual R operator()() = 0;
-};
-}}}
-namespace boost { namespace mpl { namespace aux {
-template< typename T > struct nested_type_wknd
-    : T::type
-{
-};
-}}}
-namespace boost { namespace mpl {
-namespace aux {
-template< long C_ >
-struct not_impl
-    : bool_<!C_>
-{
-};
-}
-template<
-      typename T = na
-    >
-struct not_
-    : aux::not_impl<
-          ::boost::mpl::aux::nested_type_wknd<T>::value
-        >
-{
-   
-};
-template<> struct not_< na > { template< typename T1 , typename T2 =na , typename T3 =na , typename T4 =na , typename T5 =na > struct apply : not_< T1 > { }; }; template< typename Tag > struct lambda< not_< na > , Tag , int_<-1> > { typedef false_ is_le; typedef not_< na > result_; typedef not_< na > type; }; namespace aux { template< typename T1 > struct template_arity< not_< T1 > > : int_<1> { }; template<> struct template_arity< not_< na > > : int_<-1> { }; }
-}}
-namespace boost { namespace mpl { namespace aux {
-typedef char (&no_tag)[1];
-typedef char (&yes_tag)[2];
-template< bool C_ > struct yes_no_tag
-{
-    typedef no_tag type;
-};
-template<> struct yes_no_tag<true>
-{
-    typedef yes_tag type;
-};
-template< long n > struct weighted_tag
-{
-    typedef char (&type)[n];
-};
-}}}
-       
-namespace mpl_ {
-struct failed {};
-template< bool C > struct assert { typedef void* type; };
-template<> struct assert<false> { typedef assert type; };
-template< bool C >
-int assertion_failed( typename assert<C>::type );
-template< bool C >
-struct assertion
-{
-    static int failed( assert<false> );
-};
-template<>
-struct assertion<true>
-{
-    static int failed( void* );
-};
-struct assert_
-{
-    template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};
-    static assert_ const arg;
-    enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };
-};
-boost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ );
-boost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ );
-boost::mpl::aux::weighted_tag<3>::type operator>( assert_, assert_ );
-boost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ );
-boost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ );
-boost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ );
-template< assert_::relations r, long x, long y > struct assert_relation {};
-template< bool > struct assert_arg_pred_impl { typedef int type; };
-template<> struct assert_arg_pred_impl<true> { typedef void* type; };
-template< typename P > struct assert_arg_pred
-{
-    typedef typename P::type p_type;
-    typedef typename assert_arg_pred_impl< p_type::value >::type type;
-};
-template< typename P > struct assert_arg_pred_not
-{
-    typedef typename P::type p_type;
-    enum { p = !p_type::value };
-    typedef typename assert_arg_pred_impl<p>::type type;
+    typedef aux::abstract_function<
+          R ( A0 , A1 , A2 , A3 , A4) 
+        , 2
+    > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); }
+
+private:
+    abstract_function_type* ptr_;
 };
-template< typename Pred >
-failed ************ (Pred::************
-      assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )
-    );
-template< typename Pred >
-failed ************ (boost::mpl::not_<Pred>::************
-      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )
-    );
-template< typename Pred >
-assert<false>
-assert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );
-template< typename Pred >
-assert<false>
-assert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );
-}
-namespace boost { namespace local {
-template<typename F, size_t defaults = 0>
-struct function {};
-}}
-       
-extern "C" {
-void __attribute__((__cdecl__)) __assert (const char *, int, const char *) __attribute__ ((__noreturn__));
-void __attribute__((__cdecl__)) __assert_func (const char *, int, const char *, const char *) __attribute__ ((__noreturn__));
-}
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost { namespace local {
+
 template<typename R
-   
-   
+    ,
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
 class function<
-      R ()
-    , 0
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 3
 > {
     typedef aux::abstract_function<
-          R ()
-        , 0
+          R ( A0 , A1 , A2 , A3 , A4) 
+        , 3
     > abstract_function_type;
+
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
     function& operator=(abstract_function_type& ref) {
         ptr_ = &ref;
         return *this;
     }
-    inline R operator()() { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)(); }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); }
+
 private:
     abstract_function_type* ptr_;
 };
-}}
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
 class function<
-      R ( A0)
-    , 0
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 4
 > {
     typedef aux::abstract_function<
-          R ( A0)
-        , 0
+          R ( A0 , A1 , A2 , A3 , A4) 
+        , 4
     > abstract_function_type;
+
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
     function& operator=(abstract_function_type& ref) {
         ptr_ = &ref;
         return *this;
     }
-    inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox
\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); }
+
 private:
     abstract_function_type* ptr_;
 };
-}}
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 namespace boost { namespace local {
+
 template<typename R
     ,
-    typename A0
+     typename A0 , typename A1 , typename A2 , typename A3 , typename A4
 >
 class function<
-      R ( A0)
-    , 1
+      R ( A0 , A1 , A2 , A3 , A4)
+    , 5
 > {
     typedef aux::abstract_function<
-          R ( A0)
-        , 1
+          R ( A0 , A1 , A2 , A3 , A4) 
+        , 5
     > abstract_function_type;
+
+public:
+     function(): ptr_() {} 
+    
+     function(abstract_function_type& ref): ptr_(&ref) {}
+    
+    function& operator=(abstract_function_type& ref) {
+        ptr_ = &ref;
+        return *this;
+    }
+
+    
+    
+    
+    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox
\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)( a0); } inline R operator()() { (void)( (!!(ptr_)) || (_wassert(L"ptr_", L"e:\\sandbox\\boost-sandbox\\local\\libs\\local\\params_name\\boost/local/aux_/function.hpp", 106), 0) ); return (*ptr_)(); }
+
+private:
+    abstract_function_type* ptr_;
+};
+
+}} 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+namespace std {
+
+		
+
+ extern  istream *_Ptr_cin;
+ extern  ostream *_Ptr_cout;
+ extern  ostream *_Ptr_cerr;
+ extern  ostream *_Ptr_clog;
+
+
+
+		
+class  _Winit {
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); } inline R operator()() { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)(); }
+	__thiscall _Winit();
+	__thiscall ~_Winit();
 private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1
->
-class function<
-      R ( A0 , A1)
-    , 0
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1)
-        , 0
-    > abstract_function_type;
+	 static int _Init_cnt;
+	};
+
+
+		
+
+ extern  wistream *_Ptr_wcin;
+ extern  wostream *_Ptr_wcout;
+ extern  wostream *_Ptr_wcerr;
+ extern  wostream *_Ptr_wclog;
+
+
+
+
+
+
+
+
+
+
+
+
+
+ extern  istream cin;
+ extern  ostream cout;
+ extern  ostream cerr;
+ extern  ostream clog;
+
+ extern  wistream wcin;
+ extern  wostream wcout;
+ extern  wostream wcerr;
+ extern  wostream wclog;
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+template<class _Container>
+	class back_insert_iterator
+		: public _Outit
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1
->
-class function<
-      R ( A0 , A1)
-    , 1
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1)
-        , 1
-    > abstract_function_type;
+	typedef _Container container_type;
+	typedef typename _Container::reference reference;
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+	explicit back_insert_iterator(_Container& _Cont)
+		: container(&_Cont)
+		{	
+		}
+
+	back_insert_iterator<_Container>& operator=(
+		typename _Container::const_reference _Val)
+		{	
+		container->push_back(_Val);
+		return (*this);
+		}
+
+	back_insert_iterator<_Container>& operator*()
+		{	
+		return (*this);
+		}
+
+	back_insert_iterator<_Container>& operator++()
+		{	
+		return (*this);
+		}
+
+	back_insert_iterator<_Container> operator++(int)
+		{	
+		return (*this);
+		}
+
+protected:
+	_Container *container;	
+	};
+
+		
+template<class _Container> inline
+	back_insert_iterator<_Container> back_inserter(_Container& _Cont)
+	{	
+	return (std::back_insert_iterator<_Container>(_Cont));
+	}
+
+		
+template<class _Container>
+	class front_insert_iterator
+		: public _Outit
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1
->
-class function<
-      R ( A0 , A1)
-    , 2
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1)
-        , 2
-    > abstract_function_type;
+	typedef _Container container_type;
+	typedef typename _Container::reference reference;
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+	explicit front_insert_iterator(_Container& _Cont)
+		: container(&_Cont)
+		{	
+		}
+
+	front_insert_iterator<_Container>& operator=(
+		typename _Container::const_reference _Val)
+		{	
+		container->push_front(_Val);
+		return (*this);
+		}
+
+	front_insert_iterator<_Container>& operator*()
+		{	
+		return (*this);
+		}
+
+	front_insert_iterator<_Container>& operator++()
+		{	
+		return (*this);
+		}
+
+	front_insert_iterator<_Container> operator++(int)
+		{	
+		return (*this);
+		}
+
+protected:
+	_Container *container;	
+	};
+
+		
+template<class _Container> inline
+	front_insert_iterator<_Container> front_inserter(_Container& _Cont)
+	{	
+	return (std::front_insert_iterator<_Container>(_Cont));
+	}
+
+		
+template<class _Container>
+	class insert_iterator
+		: public _Outit
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); } inline R operator()() { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)(); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-class function<
-      R ( A0 , A1 , A2)
-    , 0
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2)
-        , 0
-    > abstract_function_type;
+	typedef _Container container_type;
+	typedef typename _Container::reference reference;
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+	insert_iterator(_Container& _Cont, typename _Container::iterator _Where)
+		: container(&_Cont), iter(_Where)
+		{	
+		}
+
+	insert_iterator<_Container>& operator=(
+		typename _Container::const_reference _Val)
+		{	
+		iter = container->insert(iter, _Val);
+		++iter;
+		return (*this);
+		}
+
+	insert_iterator<_Container>& operator*()
+		{	
+		return (*this);
+		}
+
+	insert_iterator<_Container>& operator++()
+		{	
+		return (*this);
+		}
+
+	insert_iterator<_Container>& operator++(int)
+		{	
+		return (*this);
+		}
+
+protected:
+	_Container *container;	
+	typename _Container::iterator iter;	
+	};
+
+		
+template<class _Container,
+	class _Iter> inline
+	insert_iterator<_Container> inserter(_Container& _Cont, _Iter _Where)
+	{	
+	return (std::insert_iterator<_Container>(_Cont, _Where));
+	}
+
+		
+template<class _Ty,
+	class _Elem = char,
+	class _Traits = char_traits<_Elem>,
+	class _Diff = ptrdiff_t>
+	class istream_iterator
+		: public iterator<input_iterator_tag, _Ty, _Diff,
+			const _Ty *, const _Ty&>
+	{	
+	typedef istream_iterator<_Ty, _Elem, _Traits, _Diff> _Myt;
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-class function<
-      R ( A0 , A1 , A2)
-    , 1
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2)
-        , 1
-    > abstract_function_type;
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef basic_istream<_Elem, _Traits> istream_type;
+
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+
+	istream_iterator()
+		: _Myistr(0)
+		{	
+		}
+
+	istream_iterator(istream_type& _Istr)
+		: _Myistr(&_Istr)
+		{	
+		_Getval();
+		}
+
+	const _Ty& operator*() const
+		{	
+
+ 
+
+
+
+
+
+
+		{ if (!(_Myistr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (_Myval);
+		}
+
+	const _Ty *operator->() const
+		{	
+		return (&**this);
+		}
+
+	_Myt& operator++()
+		{	
+
+ 
+
+
+
+
+
+
+		{ if (!(_Myistr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		_Getval();
+		return (*this);
+		}
+
+	_Myt operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	bool _Equal(const _Myt& _Right) const
+		{	
+		return (_Myistr == _Right._Myistr);
+		}
+
+protected:
+	void _Getval()
+		{	
+		if (_Myistr != 0 && !(*_Myistr >> _Myval))
+			_Myistr = 0;
+		}
+
+	static void _Xran()
+		{	
+		throw out_of_range("invalid istream_iterator");
+		}
+
+	istream_type *_Myistr;	
+	_Ty _Myval;	
+	};
+
+		
+template<class _Ty,
+	class _Elem,
+	class _Traits,
+	class _Diff> inline
+	bool operator==(
+		const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Left,
+		const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Right)
+	{	
+	return (_Left._Equal(_Right));
+	}
+
+template<class _Ty,
+	class _Elem,
+	class _Traits,
+	class _Diff> inline
+	bool operator!=(
+		const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Left,
+		const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+		
+template<class _Ty,
+	class _Elem = char,
+	class _Traits = char_traits<_Elem> >
+	class ostream_iterator
+		: public _Outit
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-class function<
-      R ( A0 , A1 , A2)
-    , 2
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2)
-        , 2
-    > abstract_function_type;
+	typedef _Elem char_type;
+	typedef _Traits traits_type;
+	typedef basic_ostream<_Elem, _Traits> ostream_type;
+
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+
+	ostream_iterator(ostream_type& _Ostr,
+		const _Elem *_Delim = 0)
+		: _Myostr(&_Ostr), _Mydelim(_Delim)
+		{	
+		}
+
+	ostream_iterator<_Ty, _Elem, _Traits>& operator=(const _Ty& _Val)
+		{	
+		*_Myostr << _Val;
+		if (_Mydelim != 0)
+			*_Myostr << _Mydelim;
+
+ 
+
+
+
+
+
+
+		{ if (!(*_Myostr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (*this);
+		}
+
+	ostream_iterator<_Ty, _Elem, _Traits>& operator*()
+		{	
+		return (*this);
+		}
+
+	ostream_iterator<_Ty, _Elem, _Traits>& operator++()
+		{	
+		return (*this);
+		}
+
+	ostream_iterator<_Ty, _Elem, _Traits> operator++(int)
+		{	
+		return (*this);
+		}
+
+protected:
+	static void _Xran()
+		{	
+		throw out_of_range("invalid ostream_iterator");
+		}
+
+	const _Elem *_Mydelim;	
+	ostream_type *_Myostr;	
+	};
+
+}
+
+namespace stdext {
+
+
+template <class _Cont, class _Iter = typename _Cont::iterator>
+	class checked_iterator
+		: public ::std:: iterator<
+			typename ::std:: iterator_traits<_Iter>::iterator_category, 
+			typename ::std:: iterator_traits<_Iter>::value_type, 
+			typename ::std:: iterator_traits<_Iter>::difference_type, 
+			typename ::std:: iterator_traits<_Iter>::pointer, 
+			typename ::std:: iterator_traits<_Iter>::reference>
+	{
+	friend class checked_iterator;
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2
->
-class function<
-      R ( A0 , A1 , A2)
-    , 3
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2)
-        , 3
-    > abstract_function_type;
+	typedef checked_iterator<_Cont, _Iter> _Myt;
+	typedef typename ::std:: iterator_traits<_Iter>::difference_type difference_type;
+	typedef typename ::std:: iterator_traits<_Iter>::pointer pointer;
+	typedef typename ::std:: iterator_traits<_Iter>::reference reference;
+
+	typedef ::std:: _Range_checked_iterator_tag _Checked_iterator_category;
+	typedef _Iter _Inner_type;
+
+	typedef _Iter _Checked_iterator_base_type;
+ 
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		return _Current;
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		_Current = _Base;
+	}
+
+	
+
+	checked_iterator()
+		: _Mycont(0)
+	{
+	}
+
+	checked_iterator(_Cont& _C, _Iter _Ptr)
+		: _Mycont(&_C), _Current(_Ptr)
+	{
+	}
+
+	checked_iterator(const _Myt &_Right)
+		: _Mycont(_Right._Mycont), _Current(_Right._Current)
+	{
+	}
+
+	template <class Iter2>
+	checked_iterator(const checked_iterator<_Cont, Iter2> &_Right)
+		: _Mycont(_Right._Mycont), _Current(_Right._Current)
+	{
+	}
+
+	_Iter base() const
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current;
+	}
+
+	template <class Iter2>
+	bool operator==(const checked_iterator<_Cont, Iter2>& _Right) const
+	{
+		{ if (!(_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current == _Right._Current;
+	}
+
+	template <class Iter2>
+	bool operator!=(const checked_iterator<_Cont, Iter2>& _Right) const
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return !(*this == _Right);
+	}
+
+	template <class Iter2>
+	bool operator<(const checked_iterator<_Cont, Iter2>& _Right) const
+	{
+		{ if (!(_Mycont != 0 && _Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current < _Right._Current;
+	}
+
+	template <class Iter2>
+	bool operator>(const checked_iterator<_Cont, Iter2>& _Right) const
+	{
+		return _Right < *this;
+	}
+
+	template <class Iter2>
+	bool operator<=(const checked_iterator<_Cont, Iter2>& _Right) const
+	{
+		return !(_Right < *this);
+	}
+
+	template <class Iter2>
+	bool operator>=(const checked_iterator<_Cont, Iter2>& _Right) const
+	{
+		return !(*this < _Right);
+	}
+
+	reference operator*() const
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		{ if (!(_Current != _Mycont->end())) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return *_Current;
+	}
+
+	pointer operator->() const
+	{
+		return (&**this);
+	}
+
+	_Myt& operator++()
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		{ if (!(_Current != _Mycont->end())) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		++_Current;
+		return *this;
+	}
+
+	_Myt operator++(int)
+	{
+		_Myt _Tmp = *this;
+		++*this;
+		return _Tmp;
+	}
+
+	_Myt& operator--()
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		{ if (!(_Current != _Mycont->begin())) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		--_Current;
+		return *this;
+	}
+
+	_Myt operator--(int)
+	{
+		_Myt _Tmp = *this;
+		--*this;
+		return _Tmp;
+	}
+
+	
+
+	_Myt& operator+=(difference_type _Off)
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		{ if (!((_Mycont->end() - _Current) >= _Off && (_Mycont->begin() - _Current) <= _Off)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		_Current += _Off;
+		return *this;
+	}
+
+	_Myt operator+(difference_type _Off) const
+	{
+		_Myt _Tmp = *this;
+		return (_Tmp += _Off);
+	}
+
+	_Myt& operator-=(difference_type _Off)
+	{
+		return (*this += -_Off);
+	}
+
+	_Myt operator-(difference_type _Off) const
+	{
+		_Myt _Tmp = *this;
+		return (_Tmp -= _Off);
+	}
+
+	difference_type operator-(const _Myt& _Right) const
+	{
+		{ if (!(_Mycont != 0 && _Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current - _Right._Current;
+	}
+
+	reference operator[](difference_type _Off) const
+	{
+		{ if (!(_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		{ if (!((_Mycont->end() - _Current) > _Off && (_Mycont->begin() - _Current) <= _Off)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current[_Off];
+	}
+
+protected:
+	void _Xran() const
+	{	
+		throw ::std:: out_of_range("invalid checked_iterator<T> subscript");
+	}
+
+	void _Xinvarg() const
+	{	
+		throw ::std:: invalid_argument("invalid checked_iterator<T> argument");
+	}
+
+	_Cont *_Mycont; 
+	_Iter _Current; 
+	};
+
+
+template <class _Iterator>
+	class checked_array_iterator
+		: public ::std:: iterator<
+			typename ::std:: iterator_traits<_Iterator>::iterator_category, 
+			typename ::std:: iterator_traits<_Iterator>::value_type, 
+			typename ::std:: iterator_traits<_Iterator>::difference_type, 
+			typename ::std:: iterator_traits<_Iterator>::pointer, 
+			typename ::std:: iterator_traits<_Iterator>::reference>
+	{
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); } inline R operator()() { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)(); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3
->
-class function<
-      R ( A0 , A1 , A2 , A3)
-    , 0
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3)
-        , 0
-    > abstract_function_type;
+	typedef checked_array_iterator<_Iterator> _Myt;
+	typedef typename ::std:: iterator_traits<_Iterator>::difference_type difference_type;
+	typedef typename ::std:: iterator_traits<_Iterator>::pointer pointer;
+	typedef typename ::std:: iterator_traits<_Iterator>::reference reference;
+
+	typedef ::std:: _Range_checked_iterator_tag _Checked_iterator_category;
+	typedef _Iterator _Inner_type;
+
+	typedef _Iterator _Checked_iterator_base_type;
+ 
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		return _Mycont + _Current;
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		_Current = _Base - _Mycont;
+	}
+
+	
+
+	checked_array_iterator():
+		_Size(0), _Current(0)
+	{
+	}
+
+	checked_array_iterator(_Iterator _Cont, size_t _S, size_t _Index = 0)
+	{
+		{ if (!(_Index <= _S)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		_Mycont = _Cont;
+		_Size = _S;
+		_Current =_Index;
+	}
+
+	_Iterator base() const
+	{
+		return _Mycont + _Current;
+	}
+
+	size_t __Size() const
+	{
+		return _Size;
+	}
+
+	bool operator==(const _Myt& _Right) const
+	{
+		{ if (!(_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current == _Right._Current;
+	}
+
+	bool operator!=(const _Myt& _Right) const
+	{
+		return !(*this == _Right);
+	}
+
+	bool operator<(const _Myt& _Right) const
+	{
+		{ if (!(_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current < _Right._Current;
+	}
+
+	bool operator>(const _Myt& _Right) const
+	{
+		return _Right < *this;
+	}
+
+	bool operator<=(const _Myt& _Right) const
+	{
+		return !(_Right < *this);
+	}
+
+	bool operator>=(const _Myt& _Right) const
+	{
+		return !(*this < _Right);
+	}
+
+	reference operator*() const
+	{
+		{ if (!(_Current < _Size)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return *(_Mycont + _Current);
+	}
+
+	pointer operator->() const
+	{
+		return (&**this);
+	}
+
+	checked_array_iterator& operator++()
+	{
+		{ if (!(_Current < _Size)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		++_Current;
+		return *this;
+	}
+
+	_Myt operator++(int)
+	{
+		checked_array_iterator _Tmp = *this;
+		++*this;
+		return _Tmp;
+	}
+
+	_Myt& operator--()
+	{
+		{ if (!(_Current > 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		--_Current;
+		return *this;
+	}
+
+	_Myt operator--(int)
+	{
+		checked_array_iterator _Tmp = *this;
+		--*this;
+		return _Tmp;
+	}
+
+	
+
+	_Myt& operator+=(difference_type _Off)
+	{
+		{ if (!(_Current + _Off <= _Size && _Current + _Off >= 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		_Current += _Off;
+		return *this;
+	}
+
+	_Myt operator+(difference_type _Off) const
+	{
+		checked_array_iterator _Tmp = *this;
+		return (_Tmp += _Off);
+	}
+
+	_Myt& operator-=(difference_type _Off)
+	{
+		return (*this += -_Off);
+	}
+
+	_Myt operator-(difference_type _Off) const
+	{
+		checked_array_iterator _Tmp = *this;
+		return (_Tmp -= _Off);
+	}
+
+	difference_type operator-(const checked_array_iterator& _Right) const
+	{
+		{ if (!(_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return _Current - _Right._Current;
+	}
+
+	reference operator[](difference_type _Off) const
+	{
+		{ if (!(_Current + _Off < _Size && _Current + _Off > 0)) { ((void)0); ::_invalid_parameter_noinfo(); } };
+		return *(_Mycont + _Current + _Off);
+	}
+
+protected:
+	void _Xran() const
+	{	
+		throw ::std:: out_of_range("invalid checked_array_iterator<T> subscript");
+	}
+
+	void _Xinvarg() const
+	{	
+		throw ::std:: invalid_argument("invalid checked_array_iterator<T> argument");
+	}
+
+	_Iterator _Mycont; 
+	size_t _Current; 
+	size_t _Size; 
+	};
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+
+namespace std {
+
+		
+template<class _Ty> inline
+	pair<_Ty  *, ptrdiff_t>
+		get_temporary_buffer(ptrdiff_t _Count)
+	{	
+	_Ty  *_Pbuf;
+
+	if (_Count <= 0)
+		_Count = 0;
+	else if (((size_t)(-1) / _Count) < sizeof (_Ty))
+		throw std::bad_alloc(0);
+
+	for (_Pbuf = 0; 0 < _Count; _Count /= 2)
+		if ((_Pbuf = (_Ty  *)operator new(
+			(size_t)_Count * sizeof (_Ty), nothrow)) != 0)
+			break;
+
+	return (pair<_Ty  *, ptrdiff_t>(_Pbuf, _Count));
+	}
+
+		
+template<class _Ty> inline
+	void return_temporary_buffer(_Ty *_Pbuf)
+	{	
+	operator delete(_Pbuf);
+	}
+
+		
+template<class _InIt,
+	class _FwdIt> inline
+	_FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	_FwdIt _Next = _Dest;
+
+	try {
+	for (; _First != _Last; ++_Dest, ++_First)
+		_Construct(&*_Dest, *_First);
+	} catch (...) {
+	for (; _Next != _Dest; ++_Next)
+		_Destroy(&*_Next);
+	throw;
+	}
+	return (_Dest);
+	}
+
+template<class _Ty1,
+	class _Ty2> inline
+	_Ty2 _Uninit_copy(_Ty1 _First, _Ty1 _Last, _Ty2 _Dest,
+		_Scalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	size_t _Count = (size_t)(_Last - _First);
+	_Ty2 _Result = _Dest + _Count;
+	if (_Count > 0)
+		::memmove_s((&*_Dest), (_Count * sizeof (*_First)), (&*_First), (_Count * sizeof (*_First)));	
+	return _Result;
+	}
+
+
+template<class _Ty1, class _Ty2, class _Ty3>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_Ty2 _Uninit_copy(_Ty1 _First, _Ty1 _Last, _Ty2 _Dest, _Ty3 _Ptr_cat, _Unchecked_iterator_tag)
+	{
+	return _Uninit_copy(_First, _Last, _Dest, _Ptr_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _FwdIt> inline
+	_FwdIt uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest)
+	{	
+	return (_Uninit_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+		_Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+		
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al, _Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	_FwdIt _Next = _Dest;
+
+	try {
+	for (; _First != _Last; ++_Dest, ++_First)
+		_Al.construct(_Dest, *_First);
+	} catch (...) {
+	for (; _Next != _Dest; ++_Next)
+		_Al.destroy(_Next);
+	throw;
+	}
+	return (_Dest);
+	}
+
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc&, _Scalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	size_t _Count = (size_t)(_Last - _First);
+	_FwdIt _Result = _Dest + _Count;
+	if (_Count > 0)
+		::memmove_s((&*_Dest), (_Count * sizeof (*_First)), (&*_First), (_Count * sizeof (*_First)));	
+	return _Result;
+	}
+
+
+template<class _InIt, class _FwdIt, class _Alloc, class _Ty>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_FwdIt _Uninit_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc _Al, _Ty _Ptr_cat, _Unchecked_iterator_tag)
+	{
+	return _Uninit_copy(_First, _Last, _Dest, _Al, _Ptr_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt _Uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al)
+	{	
+	return (_Uninit_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Al,
+		_Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+		
+template<class _InIt, class _FwdIt, class _Alloc, class _MoveCatTy>
+inline
+	_FwdIt _Uninit_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al, _MoveCatTy, _Range_checked_iterator_tag)
+	{	
+	return ::stdext:: unchecked_uninitialized_copy(_First, _Last, _Dest, _Al);
+	}
+
+template<class _InIt, class _FwdIt, class _Alloc>
+inline
+	_FwdIt _Uninit_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al, _Swap_move_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	_FwdIt _Next = _Dest;
+	
+	typename _Alloc::value_type _Val;
+
+	try {
+	for (; _First != _Last; ++_Dest, ++_First)
+		{
+		_Al.construct(_Dest, _Val);
+		::std:: swap(*_Dest, *_First);
+		}
+	} catch (...) {
+	for (; _Next != _Dest; ++_Next)
+		_Al.destroy(_Next);
+	throw;
+	}
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _FwdIt, class _Alloc, class _MoveCatTy>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_FwdIt _Uninit_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc _Al, _MoveCatTy _Move_cat, _Unchecked_iterator_tag)
+	{
+	return _Uninit_move(_First, _Last, _Dest, _Al, _Move_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt, class _FwdIt, class _Alloc>
+inline
+	_FwdIt _Uninitialized_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al)
+	{	
+	return (_Uninit_move(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Al,
+		_Move_cat(_Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+    
+template<class _FwdIt,
+	class _Tval> inline
+	void _Uninit_fill(_FwdIt _First, _FwdIt _Last, const _Tval& _Val,
+		_Nonscalar_ptr_iterator_tag)
+	{	
+	;
+	_FwdIt _Next = _First;
+
+	try {
+	for (; _First != _Last; ++_First)
+		_Construct(&*_First, _Val);
+	} catch (...) {
+	for (; _Next != _First; ++_Next)
+		_Destroy(&*_Next);
+	throw;
+	}
+	}
+
+template<class _Ty,
+	class _Tval> inline
+	void _Uninit_fill(_Ty *_First, _Ty *_Last, const _Tval& _Val,
+		_Scalar_ptr_iterator_tag)
+	{	
+	std::fill(_First, _Last, _Val);
+	}
+
+template<class _FwdIt,
+	class _Tval> inline
+	void uninitialized_fill(_FwdIt _First, _FwdIt _Last, const _Tval& _Val)
+	{	
+	_Uninit_fill(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val, _Ptr_cat(_First, _First));
+	}
+
+		
+template<class _FwdIt,
+	class _Diff,
+	class _Tval> inline
+	void _Uninit_fill_n(_FwdIt _First, _Diff _Count, const _Tval& _Val,
+		_Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	_FwdIt _Next = _First;
+
+	try {
+	for (; 0 < _Count; --_Count, ++_First)
+		_Construct(&*_First, _Val);
+	} catch (...) {
+	for (; _Next != _First; ++_Next)
+		_Destroy(&*_Next);
+	throw;
+	}
+	}
+
+template<class _Ty,
+	class _Diff,
+	class _Tval> inline
+	void _Uninit_fill_n(_Ty *_First, _Diff _Count, const _Tval& _Val,
+		_Scalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	::stdext:: unchecked_fill_n(_First, _Count, _Val);
+	}
+
+
+template<class _FwdIt, class _Diff, class _Tval, class _Ty2>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	void _Uninit_fill_n(_FwdIt _First, _Diff _Count, const _Tval& _Val,
+		_Ty2 _Ptr_cat, _Unchecked_iterator_tag)
+	{
+	_Uninit_fill_n(_First, _Count, _Val, _Ptr_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval> inline
+	void uninitialized_fill_n(_FwdIt _First, _Diff _Count, const _Tval& _Val)
+	{	
+	_Uninit_fill_n(_First, _Count, _Val, _Ptr_cat(_First, _First), ::std:: _Checked_cat(_First));
+	}
+
+		
+template<class _FwdIt,
+	class _Diff,
+	class _Tval,
+	class _Alloc> inline
+	void _Uninit_fill_n(_FwdIt _First, _Diff _Count,
+		const _Tval& _Val, _Alloc& _Al, _Nonscalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+
+ 
+
+
+
+
+	_FwdIt _Next = _First;
+
+	try {
+	for (; 0 < _Count; --_Count, ++_First)
+		_Al.construct(_First, _Val);
+	} catch (...) {
+	for (; _Next != _First; ++_Next)
+		_Al.destroy(_Next);
+	throw;
+	}
+	}
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval,
+	class _Alloc> inline
+	void _Uninit_fill_n(_FwdIt _First, _Diff _Count,
+		const _Tval& _Val, _Alloc&, _Scalar_ptr_iterator_tag, _Range_checked_iterator_tag)
+	{	
+		::stdext:: unchecked_fill_n(_First, _Count, _Val);
+	}
+
+
+template<class _FwdIt, class _Diff, class _Tval, class _Alloc, class _Ty>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	void _Uninit_fill_n(_FwdIt _First, _Diff _Count,
+		const _Tval& _Val, _Alloc& _Al, _Ty _Ptr_cat, _Unchecked_iterator_tag)
+	{
+	_Uninit_fill_n(_First, _Count, _Val, _Al, _Ptr_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval,
+	class _Alloc> inline
+	void _Uninitialized_fill_n(_FwdIt _First, _Diff _Count,
+		const _Tval& _Val, _Alloc& _Al)
+	{	
+	_Uninit_fill_n(_First, _Count, _Val, _Al,
+		_Ptr_cat(_First, _First), ::std:: _Checked_cat(_First));
+	}
+
+		
+template<class _FwdIt,
+	class _Ty>
+	class raw_storage_iterator
+		: public _Outit
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); }
+	typedef _FwdIt iterator_type;	
+	typedef _FwdIt iter_type;	
+	typedef _Ty element_type;	
+
+	explicit raw_storage_iterator(_FwdIt _First)
+		: _Next(_First)
+		{	
+		}
+
+	raw_storage_iterator<_FwdIt, _Ty>& operator*()
+		{	
+		return (*this);
+		}
+
+	raw_storage_iterator<_FwdIt, _Ty>& operator=(const _Ty& _Val)
+		{	
+		_Construct(&*_Next, _Val);
+		return (*this);
+		}
+
+	raw_storage_iterator<_FwdIt, _Ty>& operator++()
+		{	
+		++_Next;
+		return (*this);
+		}
+
+	raw_storage_iterator<_FwdIt, _Ty> operator++(int)
+		{	
+		raw_storage_iterator<_FwdIt, _Ty> _Ans = *this;
+		++_Next;
+		return (_Ans);
+		}
+
 private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3
->
-class function<
-      R ( A0 , A1 , A2 , A3)
-    , 1
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3)
-        , 1
-    > abstract_function_type;
+	_FwdIt _Next;	
+	};
+
+		
+template<class _Ty>
+	class _Temp_iterator
+		: public _Outit
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); }
+	typedef _Ty  *_Pty;
+
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+
+	_Temp_iterator(ptrdiff_t _Count = 0)
+		{	
+		_Buf._Begin = 0;
+		_Buf._Current = 0;
+		_Buf._Hiwater = 0;
+		_Buf._Size = _Count;	
+		_Pbuf = &_Buf;
+		}
+
+	_Temp_iterator(const _Temp_iterator<_Ty>& _Right)
+		{	
+		_Buf._Begin = 0;	
+		_Buf._Current = 0;
+		_Buf._Hiwater = 0;
+		_Buf._Size = 0;
+		*this = _Right;
+		}
+
+	~_Temp_iterator()
+		{	
+		if (_Buf._Begin != 0)
+			{	
+			for (_Pty _Next = _Buf._Begin;
+				_Next != _Buf._Hiwater; ++_Next)
+				_Destroy(&*_Next);
+			std::return_temporary_buffer(_Buf._Begin);
+			}
+		}
+
+	_Temp_iterator<_Ty>& operator=(const _Temp_iterator<_Ty>& _Right)
+		{	
+		_Pbuf = _Right._Pbuf;
+		return (*this);
+		}
+
+	_Temp_iterator<_Ty>& operator=(const _Ty& _Val)
+		{	
+		if (_Pbuf->_Current < _Pbuf->_Hiwater)
+			*_Pbuf->_Current++ = _Val;	
+		else
+			{	
+			{ if (!((_Pbuf->_Current - _Pbuf->_Begin) < _Pbuf->_Size)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			_Pty _Ptr = &*_Pbuf->_Current;
+			_Construct(_Ptr, _Val);
+			_Pbuf->_Hiwater = ++_Pbuf->_Current;
+			}
+		return (*this);
+		}
+
+	_Temp_iterator<_Ty>& operator*()
+		{	
+		return (*this);
+		}
+
+	_Temp_iterator<_Ty>& operator++()
+		{	
+		return (*this);
+		}
+
+	_Temp_iterator<_Ty>& operator++(int)
+		{	
+		return (*this);
+		}
+
+	_Temp_iterator<_Ty>& _Init()
+		{	
+		_Pbuf->_Current = _Pbuf->_Begin;
+		return (*this);
+		}
+
+	_Pty _First() const
+		{	
+		return (_Pbuf->_Begin);
+		}
+
+	_Pty _Last() const
+		{	
+		return (_Pbuf->_Current);
+		}
+
+	ptrdiff_t _Maxlen()
+		{	
+		if (_Pbuf->_Begin == 0 && 0 < _Pbuf->_Size)
+			{	
+			pair<_Pty, ptrdiff_t> _Pair =
+				std::get_temporary_buffer<_Ty>(_Pbuf->_Size);
+
+			_Pbuf->_Begin = _Pair.first;
+			_Pbuf->_Current = _Pair.first;
+			_Pbuf->_Hiwater = _Pair.first;
+			_Pbuf->_Size = _Pair.second;
+			}
+		return (_Pbuf->_Size);
+		}
+
+	static void _Xinvarg()
+		{	
+		throw invalid_argument("invalid _Temp_iterator<T> argument");
+		}
+
 private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3
->
-class function<
-      R ( A0 , A1 , A2 , A3)
-    , 2
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3)
-        , 2
-    > abstract_function_type;
+	struct _Bufpar
+		{	
+		_Pty _Begin;	
+		_Pty _Current;	
+		_Pty _Hiwater;	
+		ptrdiff_t _Size;	
+		};
+	_Bufpar _Buf;	
+	_Bufpar *_Pbuf;	
+	};
+
+		
+template<class _Ty>
+	class auto_ptr;
+
+template<class _Ty>
+	struct auto_ptr_ref
+		{	
+	auto_ptr_ref(void *_Right)
+		: _Ref(_Right)
+		{	
+		}
+
+	void *_Ref;	
+	};
+
+template<class _Ty>
+	class auto_ptr
+		{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); }
+	typedef _Ty element_type;
+
+	explicit auto_ptr(_Ty *_Ptr = 0) throw ()
+		: _Myptr(_Ptr)
+		{	
+		}
+
+	auto_ptr(auto_ptr<_Ty>& _Right) throw ()
+		: _Myptr(_Right.release())
+		{	
+		}
+
+	auto_ptr(auto_ptr_ref<_Ty> _Right) throw ()
+		{	
+		_Ty **_Pptr = (_Ty **)_Right._Ref;
+		_Ty *_Ptr = *_Pptr;
+		*_Pptr = 0;	
+		_Myptr = _Ptr;	
+		}
+
+	template<class _Other>
+		operator auto_ptr<_Other>() throw ()
+		{	
+		return (auto_ptr<_Other>(*this));
+		}
+
+	template<class _Other>
+		operator auto_ptr_ref<_Other>() throw ()
+		{	
+		_Other *_Testptr = (_Ty *)_Myptr;	
+		auto_ptr_ref<_Other> _Ans(&_Myptr);
+		return (_Testptr != 0 ? _Ans : _Ans);
+		}
+
+	template<class _Other>
+		auto_ptr<_Ty>& operator=(auto_ptr<_Other>& _Right) throw ()
+		{	
+		reset(_Right.release());
+		return (*this);
+		}
+
+	template<class _Other>
+		auto_ptr(auto_ptr<_Other>& _Right) throw ()
+		: _Myptr(_Right.release())
+		{	
+		}
+
+	auto_ptr<_Ty>& operator=(auto_ptr<_Ty>& _Right) throw ()
+		{	
+		reset(_Right.release());
+		return (*this);
+		}
+
+	auto_ptr<_Ty>& operator=(auto_ptr_ref<_Ty> _Right) throw ()
+		{	
+		_Ty **_Pptr = (_Ty **)_Right._Ref;
+		_Ty *_Ptr = *_Pptr;
+		*_Pptr = 0;	
+		reset(_Ptr);	
+		return (*this);
+		}
+
+	~auto_ptr()
+		{	
+		delete (_Ty *)_Myptr;
+		}
+
+	_Ty& operator*() const throw ()
+		{	
+
+ 
+
+
+
+
+		;
+
+		return (*(_Ty *)_Myptr);
+		}
+
+	_Ty *operator->() const throw ()
+		{	
+		return (&**this);
+		}
+
+	_Ty *get() const throw ()
+		{	
+		return ((_Ty *)_Myptr);
+		}
+
+	_Ty *release() throw ()
+		{	
+		_Ty *_Tmp = (_Ty *)_Myptr;
+		_Myptr = 0;
+		return (_Tmp);
+		}
+
+	void reset(_Ty* _Ptr = 0)
+		{	
+		if (_Ptr != _Myptr)
+			delete (_Ty *)_Myptr;
+		_Myptr = _Ptr;
+		}
+
 private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3
->
-class function<
-      R ( A0 , A1 , A2 , A3)
-    , 3
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3)
-        , 3
-    > abstract_function_type;
+	const _Ty *_Myptr;	
+	};
+}
+
+namespace stdext {
+
+template<class _InIt,
+	class _FwdIt> inline
+	_FwdIt unchecked_uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest)
+	{	
+		return (::std:: _Uninit_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Ptr_cat(_First, _Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _FwdIt> inline
+	_FwdIt checked_uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest)
+	{	
+		return (::std:: _Uninit_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt unchecked_uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al)
+	{	
+		return (::std:: _Uninit_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Al,
+			::std:: _Ptr_cat(_First, _Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt checked_uninitialized_copy(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al)
+	{	
+		return (::std:: _Uninit_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Al,
+			::std:: _Ptr_cat(_First, _Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt _Unchecked_uninitialized_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al)
+	{	
+		return (::std:: _Uninit_move(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Al,
+			::std:: _Move_cat(_Dest), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _FwdIt,
+	class _Alloc> inline
+	_FwdIt _Checked_uninitialized_move(_InIt _First, _InIt _Last, _FwdIt _Dest,
+		_Alloc& _Al)
+	{	
+		return (::std:: _Uninit_move(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Al,
+			::std:: _Move_cat(_Dest), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval> inline
+	void unchecked_uninitialized_fill_n(_FwdIt _First, _Diff _Count, const _Tval& _Val)
+	{	
+		::std:: _Uninit_fill_n(_First, _Count, _Val, ::std:: _Ptr_cat(_First, _First), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval> inline
+	void checked_uninitialized_fill_n(_FwdIt _First, _Diff _Count, const _Tval& _Val)
+	{	
+		::std:: _Uninit_fill_n(_First, _Count, _Val, ::std:: _Ptr_cat(_First, _First), ::std:: _Checked_cat(_First));
+	}
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval,
+	class _Alloc> inline
+	void unchecked_uninitialized_fill_n(_FwdIt _First, _Diff _Count,
+		const _Tval& _Val, _Alloc& _Al)
+	{	
+		::std:: _Uninit_fill_n(_First, _Count, _Val, _Al,
+			::std:: _Ptr_cat(_First, _First), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _FwdIt,
+	class _Diff,
+	class _Tval,
+	class _Alloc> inline
+	void checked_uninitialized_fill_n(_FwdIt _First, _Diff _Count,
+		const _Tval& _Val, _Alloc& _Al)
+	{	
+		::std:: _Uninit_fill_n(_First, _Count, _Val, _Al,
+			::std:: _Ptr_cat(_First, _First), ::std:: _Checked_cat(_First));
+	}
+
+}
+
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+ #pragma warning(disable: 4244)
+
+
+namespace std {
+
+		
+const int _ISORT_MAX = 32;	
+
+		
+template<class _InIt,
+	class _Fn1> inline
+	_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
+	{	
+	;
+	;
+	typename ::std:: _Checked_iterator_base_helper<_InIt>::_Checked_iterator_base_type _ChkFirst(::std:: _Checked_base(_First));
+	typename ::std:: _Checked_iterator_base_helper<_InIt>::_Checked_iterator_base_type _ChkLast(::std:: _Checked_base(_Last));
+	for (; _ChkFirst != _ChkLast; ++_ChkFirst)
+		_Func(*_ChkFirst);
+	return (_Func);
+	}
+
+		
+template<class _InIt, class _Ty>
+inline
+	_InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val)
+	{	
+	;
+	for (; _First != _Last; ++_First)
+		if (*_First == _Val)
+			break;
+	return (_First);
+	}
+
+inline const char *_Find(const char *_First, const char *_Last, int _Val)
+	{	
+	;
+	_First = (const char *)::memchr(_First, _Val, _Last - _First);
+	return (_First == 0 ? _Last : _First);
+	}
+
+inline const signed char *_Find(const signed char *_First,
+	const signed char *_Last, int _Val)
+	{	
+	;
+	_First = (const signed char *)::memchr(_First, _Val,
+		_Last - _First);
+	return (_First == 0 ? _Last : _First);
+	}
+
+inline const unsigned char *_Find(const unsigned char *_First,
+	const unsigned char *_Last, int _Val)
+	{	
+	;
+	_First = (const unsigned char *)::memchr(_First, _Val,
+		_Last - _First);
+	return (_First == 0 ? _Last : _First);
+	}
+
+template<class _InIt, class _Ty>
+inline
+	_InIt find(_InIt _First, _InIt _Last, const _Ty& _Val)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Find(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val));
+	return (_First);
+	}
+
+		
+template<class _InIt,
+	class _Pr> inline
+	_InIt _Find_if(_InIt _First, _InIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	for (; _First != _Last; ++_First)
+		if (_Pred(*_First))
+			break;
+	return (_First);
+	}
+
+template<class _InIt,
+	class _Pr> inline
+	_InIt find_if(_InIt _First, _InIt _Last, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Find_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred));
+	return (_First);
+	}
+
+		
+template<class _FwdIt> inline
+	_FwdIt _Adjacent_find(_FwdIt _First, _FwdIt _Last)
+	{	
+	;
+	for (_FwdIt _Firstb; (_Firstb = _First) != _Last && ++_First != _Last; )
+		if (*_Firstb == *_First)
+			return (_Firstb);
+	return (_Last);
+	}
+
+template<class _FwdIt> inline
+	_FwdIt adjacent_find(_FwdIt _First, _FwdIt _Last)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Adjacent_find(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last)));
+	return (_First);
+	}
+
+		
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt _Adjacent_find(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	for (_FwdIt _Firstb; (_Firstb = _First) != _Last && ++_First != _Last; )
+		if (_Pred(*_Firstb, *_First))
+			return (_Firstb);
+	return (_Last);
+	}
+
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt adjacent_find(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Adjacent_find(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred));
+	return (_First);
+	}
+
+		
+template<class _InIt,
+	class _Ty> inline
+	typename iterator_traits<_InIt>::difference_type
+		_Count(_InIt _First, _InIt _Last, const _Ty& _Val)
+	{	
+	;
+	typename iterator_traits<_InIt>::difference_type _Cnt = 0;
+
+	for (; _First != _Last; ++_First)
+		if (*_First == _Val)
+			++_Cnt;
+	return (_Cnt);
+	}
+
+template<class _InIt,
+	class _Ty> inline
+	typename iterator_traits<_InIt>::difference_type
+		count(_InIt _First, _InIt _Last, const _Ty& _Val)
+	{	
+	return _Count(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val);
+	}
+
+		
+template<class _InIt,
+	class _Pr> inline
+	typename iterator_traits<_InIt>::difference_type
+		_Count_if(_InIt _First, _InIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	typename iterator_traits<_InIt>::difference_type _Count = 0;
+
+	for (; _First != _Last; ++_First)
+		if (_Pred(*_First))
+			++_Count;
+	return (_Count);
+	}
+
+template<class _InIt,
+	class _Pr> inline
+	typename iterator_traits<_InIt>::difference_type
+		count_if(_InIt _First, _InIt _Last, _Pr _Pred)
+	{	
+	return _Count_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred);
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Diff1,
+	class _Diff2> inline
+	_FwdIt1 _Search(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Diff1 *, _Diff2 *)
+	{	
+	;
+	;
+	_Diff1 _Count1 = 0;
+	_Distance(_First1, _Last1, _Count1);
+	_Diff2 _Count2 = 0;
+	_Distance(_First2, _Last2, _Count2);
+
+	for (; _Count2 <= _Count1; ++_First1, --_Count1)
+		{	
+		_FwdIt1 _Mid1 = _First1;
+		for (_FwdIt2 _Mid2 = _First2; ; ++_Mid1, ++_Mid2)
+			if (_Mid2 == _Last2)
+				return (_First1);
+			else if (!(*_Mid1 == *_Mid2))
+				break;
+		}
+	return (_Last1);
+	}
+
+template<class _FwdIt1,
+	class _FwdIt2> inline
+	_FwdIt1 search(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Search(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dist_type(_First1), _Dist_type(_First2)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Diff1,
+	class _Diff2,
+	class _Pr> inline
+	_FwdIt1 _Search(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred, _Diff1 *, _Diff2 *)
+	{	
+	;
+	;
+	;
+	_Diff1 _Count1 = 0;
+	_Distance(_First1, _Last1, _Count1);
+	_Diff2 _Count2 = 0;
+	_Distance(_First2, _Last2, _Count2);
+
+	for (; _Count2 <= _Count1; ++_First1, --_Count1)
+		{	
+		_FwdIt1 _Mid1 = _First1;
+		for (_FwdIt2 _Mid2 = _First2; ; ++_Mid1, ++_Mid2)
+			if (_Mid2 == _Last2)
+				return (_First1);
+			else if (!_Pred(*_Mid1, *_Mid2))
+				break;
+		}
+	return (_Last1);
+	}
+
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Pr> inline
+	_FwdIt1 search(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Search(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Pred, _Dist_type(_First1), _Dist_type(_First2)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _Diff2,
+	class _Ty> inline
+	_FwdIt1 _Search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_Diff2 _Count, const _Ty& _Val, forward_iterator_tag)
+	{	
+	;
+	_FwdIt1 _Mid1;
+
+	if (_Count == 0)
+		return (_First1);
+
+	for (;; _First1 = ++_Mid1)
+		{	
+		_Diff2 _Count1 = _Count;
+
+		for (; _First1 != _Last1; ++_First1)
+			if (*_First1 == _Val)
+				break;	
+
+		for (_Mid1 = _First1;; )
+			if (--_Count1 == 0)
+				return (_First1);	
+			else if (_Mid1 == _Last1 || !(*++_Mid1 == _Val))
+				break;
+		if (_Mid1 == _Last1)
+			return (_Last1);
+		}
+	}
+
+template<class _FwdIt1,
+	class _Diff2,
+	class _Ty> inline
+	_FwdIt1 _Search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_Diff2 _Count, const _Ty& _Val, random_access_iterator_tag)
+	{	
+	;
+	_FwdIt1 _Mid1;
+
+	if (_Count == 0)
+		return (_First1);
+
+	for (;; _First1 = ++_Mid1)
+		{	
+		_FwdIt1 _Oldfirst1 = _First1;
+		_Diff2 _Count1 = _Count;
+
+		for (;; _First1 += _Count)
+			if (_First1 == _Last1)
+				return (_Last1);	
+			else if (*_First1 == _Val)
+				break;	
+			else if (_Last1 - _First1 < _Count)
+				return (_Last1);	
+
+		if (_Oldfirst1 != _First1)
+			for (++_Oldfirst1; _Oldfirst1 != _First1; --_First1, --_Count1)
+				if (!(_First1[-1] == _Val))
+					break;	
+
+		for (_Mid1 = _First1;; )
+			if (--_Count1 == 0)
+				return (_First1);	
+			else if (_Mid1 == _Last1 || !(*++_Mid1 == _Val))
+				break;
+		if (_Mid1 == _Last1)
+			return (_Last1);
+		}
+	}
+
+template<class _FwdIt1,
+	class _Diff2,
+	class _Ty> inline
+	_FwdIt1 search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_Diff2 _Count, const _Ty& _Val)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Search_n(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _Count, _Val, _Iter_cat(_First1)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _Diff2,
+	class _Ty,
+	class _Pr> inline
+	_FwdIt1 _Search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_Diff2 _Count, const _Ty& _Val, _Pr _Pred, forward_iterator_tag)
+	{	
+	;
+	;
+	_FwdIt1 _Mid1;
+
+	if (_Count == 0)
+		return (_First1);
+
+	for (;; _First1 = ++_Mid1)
+		{	
+		_Diff2 _Count1 = _Count;
+
+		for (; _First1 != _Last1; ++_First1)
+			if (_Pred(*_First1, _Val))
+				break;	
+
+		for (_Mid1 = _First1;; )
+			if (--_Count1 == 0)
+				return (_First1);	
+			else if (_Mid1 == _Last1 || !_Pred(*++_Mid1, _Val))
+				break;
+		if (_Mid1 == _Last1)
+			return (_Last1);
+		}
+	}
+
+template<class _FwdIt1,
+	class _Diff2,
+	class _Ty,
+	class _Pr> inline
+	_FwdIt1 _Search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_Diff2 _Count, const _Ty& _Val, _Pr _Pred, random_access_iterator_tag)
+	{	
+	;
+	;
+	_FwdIt1 _Mid1;
+
+	if (_Count == 0)
+		return (_First1);
+
+	for (;; _First1 = ++_Mid1)
+		{	
+		_FwdIt1 _Oldfirst1 = _First1;
+		_Diff2 _Count1 = _Count;
+
+		for (;; _First1 += _Count)
+			if (_First1 == _Last1)
+				return (_Last1);	
+			else if (_Pred(*_First1, _Val))
+				break;	
+			else if (_Last1 - _First1 < _Count)
+				return (_Last1);	
+
+		if (_Oldfirst1 != _First1)
+			for (++_Oldfirst1; _Oldfirst1 != _First1; --_First1, --_Count1)
+				if (!_Pred(_First1[-1], _Val))
+					break;	
+
+		for (_Mid1 = _First1;; )
+			if (--_Count1 == 0)
+				return (_First1);	
+			else if (_Mid1 == _Last1 || !_Pred(*++_Mid1, _Val))
+				break;
+		if (_Mid1 == _Last1)
+			return (_Last1);
+		}
+	}
+
+template<class _FwdIt1,
+	class _Diff2,
+	class _Ty,
+	class _Pr> inline
+	_FwdIt1 search_n(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_Diff2 _Count, const _Ty& _Val, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Search_n(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _Count, _Val, _Pred, _Iter_cat(_First1)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Diff1,
+	class _Diff2> inline
+	_FwdIt1 _Find_end(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Diff1 *, _Diff2 *)
+	{	
+	;
+	;
+	_Diff1 _Count1 = 0;
+	_Distance(_First1, _Last1, _Count1);
+	_Diff2 _Count2 = 0;
+	_Distance(_First2, _Last2, _Count2);
+	_FwdIt1 _Ans = _Last1;
+
+	if (0 < _Count2)
+		for (; _Count2 <= _Count1; ++_First1, --_Count1)
+			{	
+			_FwdIt1 _Mid1 = _First1;
+			for (_FwdIt2 _Mid2 = _First2; ; ++_Mid1)
+				if (!(*_Mid1 == *_Mid2))
+					break;
+				else if (++_Mid2 == _Last2)
+					{	
+					_Ans = _First1;
+					break;
+					}
+			}
+	return (_Ans);
+	}
+
+template<class _FwdIt1,
+	class _FwdIt2> inline
+	_FwdIt1 find_end(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Find_end(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dist_type(_First1), _Dist_type(_First2)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Diff1,
+	class _Diff2,
+	class _Pr> inline
+	_FwdIt1 _Find_end(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred, _Diff1 *, _Diff2 *)
+	{	
+	;
+	;
+	;
+	_Diff1 _Count1 = 0;
+	_Distance(_First1, _Last1, _Count1);
+	_Diff2 _Count2 = 0;
+	_Distance(_First2, _Last2, _Count2);
+	_FwdIt1 _Ans = _Last1;
+
+	if (0 < _Count2)
+		for (; _Count2 <= _Count1; ++_First1, --_Count1)
+			{	
+			_FwdIt1 _Mid1 = _First1;
+			for (_FwdIt2 _Mid2 = _First2; ; ++_Mid1)
+				if (!_Pred(*_Mid1, *_Mid2))
+					break;
+				else if (++_Mid2 == _Last2)
+					{	
+					_Ans = _First1;
+					break;
+					}
+			}
+	return (_Ans);
+	}
+
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Pr> inline
+	_FwdIt1 find_end(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Find_end(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Pred, _Dist_type(_First1), _Dist_type(_First2)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2> inline
+	_FwdIt1 _Find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2)
+	{	
+	;
+	;
+	for (; _First1 != _Last1; ++_First1)
+		for (_FwdIt2 _Mid2 = _First2; _Mid2 != _Last2; ++_Mid2)
+			if (*_First1 == *_Mid2)
+				return (_First1);
+	return (_First1);
+	}
+
+template<class _FwdIt1,
+	class _FwdIt2> inline
+	_FwdIt1 find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2)
+	{	
+	;
+	;
+	::std:: _Checked_assign_from_base(_First1, _Find_first_of(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2)));
+	return _First1;
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Pr> inline
+	_FwdIt1 _Find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred)
+	{	
+	;
+	for (; _First1 != _Last1; ++_First1)
+		for (_FwdIt2 _Mid2 = _First2; _Mid2 != _Last2; ++_Mid2)
+			if (_Pred(*_First1, *_Mid2))
+				return (_First1);
+	return (_First1);
+	}
+
+template<class _FwdIt1,
+	class _FwdIt2,
+	class _Pr> inline
+	_FwdIt1 find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
+		_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First1, _Find_first_of(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Pred));
+	return (_First1);
+	}
+
+		
+template<class _FwdIt1,
+	class _FwdIt2> inline
+	void iter_swap(_FwdIt1 _Left, _FwdIt2 _Right)
+	{	
+	std::swap(*_Left, *_Right);
+	}
+
+		
+template<class _FwdIt1, class _FwdIt2, class _FwdItCats>
+inline
+	_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2,
+		_FwdItCats, _Range_checked_iterator_tag)
+	{	
+	;
+	for (; _First1 != _Last1; ++_First1, ++_First2)
+		std::iter_swap(_First1, _First2);
+	return (_First2);
+	}
+
+
+template<class _FwdIt1, class _FwdIt2>
+inline
+	_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_FwdIt2 _Result = _First2 + (_Last1 - _First1);
+	_Swap_ranges(_First1, _Last1, ::std:: _Checked_base(_First2),
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return (_Result);
+	}
+
+
+
+template<class _FwdIt1, class _FwdIt2, class _FwdItCats>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2,
+		_FwdItCats _Iter_cats, _Unchecked_iterator_tag)
+	{
+		return _Swap_ranges(_First1, _Last1, _First2, _Iter_cats, _Range_checked_iterator_tag());
+	}
+
+
+template<class _FwdIt1, class _FwdIt2>
+inline
+	_FwdIt2 swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2)
+	{
+		return _Swap_ranges(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+			_Iter_random(_First1, _First2), ::std:: _Checked_cat(_First2));
+	}
+
+		
+template<class _InIt, class _OutIt, class _Fn1, class _InOutItCat>
+inline
+	_OutIt _Transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func,
+		_InOutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First != _Last; ++_First, ++_Dest)
+		*_Dest = _Func(*_First);
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt, class _Fn1>
+inline
+	_OutIt _Transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last - _First);
+	_Transform(_First, _Last, ::std:: _Checked_base(_Dest), _Func,
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return (_Result);
+	}
+
+
+
+template<class _InIt, class _OutIt, class _Fn1, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func,
+		_InOutItCat _First_dest_cat, _Unchecked_iterator_tag)
+	{
+	return _Transform(_First, _Last, _Dest, _Func,
+		_First_dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt, class _OutIt, class _Fn1>
+inline
+	_OutIt transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func)
+	{
+	return _Transform(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Func,
+		_Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2, class _InItCats, class _InOutItCat>
+inline
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		_InItCats, _InOutItCat,
+		_Range_checked_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1; ++_First1, ++_First2, ++_Dest)
+		*_Dest = _Func(*_First1, *_First2);
+	return (_Dest);
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2>
+inline
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		random_access_iterator_tag, random_access_iterator_tag,
+		_Range_checked_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_InIt2 _Last2 = _First2 + (_Last1 - _First1); (_Last2);
+	_OutIt _Result = _Dest + (_Last1 - _First1);
+	_Transform(_First1, _Last1, ::std:: _Checked_base(_First2),
+		::std:: _Checked_base(_Dest), _Func,
+		forward_iterator_tag(), forward_iterator_tag(),
+		_Range_checked_iterator_tag(), _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2, class _InOutItCat>
+inline
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		random_access_iterator_tag, _InOutItCat,
+		_Range_checked_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_InIt2 _Last2 = _First2 + (_Last1 - _First1); (_Last2);
+	return _Transform(_First1, _Last1, ::std:: _Checked_base(_First2),
+		_Dest, _Func,
+		forward_iterator_tag(), forward_iterator_tag(),
+		_Range_checked_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2, class _InItCats>
+inline
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		_InItCats, random_access_iterator_tag,
+		_Range_checked_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last1 - _First1);
+	_Transform(_First1, _Last1, _First2,
+		::std:: _Checked_base(_Dest), _Func,
+		forward_iterator_tag(), forward_iterator_tag(),
+		_Range_checked_iterator_tag(), _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2, class _InItCats, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		_InItCats _InIt_cats, _InOutItCat _First_dest_cat,
+		_Unchecked_iterator_tag, _Unchecked_iterator_tag)
+	{
+		return _Transform(_First1, _Last1, _First2, _Dest, _Func,
+			_InIt_cats, _First_dest_cat,
+			_Range_checked_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2, class _InItCats, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		_InItCats _InIt_cats, _InOutItCat _First_dest_cat,
+		_Range_checked_iterator_tag, _Unchecked_iterator_tag)
+	{
+		return _Transform(_First1, _Last1, _First2, _Dest, _Func,
+			_InIt_cats, _First_dest_cat,
+			_Range_checked_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2, class _InItCats, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func,
+		_InItCats _InIt_cats, _InOutItCat _First_dest_cat,
+		_Unchecked_iterator_tag, _Range_checked_iterator_tag)
+	{
+		return _Transform(_First1, _Last1, _First2, _Dest, _Func,
+			_InIt_cats, _First_dest_cat,
+			_Range_checked_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2>
+inline
+	_OutIt transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func)
+	{
+	return _Transform(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Dest, _Func,
+		_Iter_random(_First1, _First2), _Iter_random(_First1, _Dest),
+		::std:: _Checked_cat(_First2), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _FwdIt,
+	class _Ty> inline
+	void _Replace(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Oldval, const _Ty& _Newval)
+	{	
+	;
+	for (; _First != _Last; ++_First)
+		if (*_First == _Oldval)
+			*_First = _Newval;
+	}
+
+template<class _FwdIt,
+	class _Ty> inline
+	void replace(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Oldval, const _Ty& _Newval)
+	{	
+	_Replace(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Oldval, _Newval);
+	}
+
+		
+template<class _FwdIt,
+	class _Pr,
+	class _Ty> inline
+	void _Replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
+	{	
+	;
+	;
+	for (; _First != _Last; ++_First)
+		if (_Pred(*_First))
+			*_First = _Val;
+	}
+
+template<class _FwdIt,
+	class _Pr,
+	class _Ty> inline
+	void replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
+	{	
+	_Replace_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred, _Val);
+	}
+
+		
+template<class _InIt, class _OutIt, class _Ty, class _InOutItCat>
+inline
+	_OutIt _Replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		const _Ty& _Oldval, const _Ty& _Newval,
+		_InOutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	for (; _First != _Last; ++_First, ++_Dest)
+		*_Dest = *_First == _Oldval ? _Newval : *_First;
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt, class _Ty>
+inline
+	_OutIt _Replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		const _Ty& _Oldval, const _Ty& _Newval,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last - _First);
+	_Replace_copy(_First, _Last, ::std:: _Checked_base(_Dest),
+		_Oldval, _Newval,
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return (_Result);
+	}
+
+
+
+template<class _InIt, class _OutIt, class _Ty, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		const _Ty& _Oldval, const _Ty& _Newval,
+		_InOutItCat _First_dest_cat, _Unchecked_iterator_tag)
+	{
+		return _Replace_copy(_First, _Last, _Dest, _Oldval, _Newval,
+			_First_dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		const _Ty& _Oldval, const _Ty& _Newval)
+	{	
+	return _Replace_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Oldval, _Newval,
+		_Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt, class _OutIt, class _Pr, class _Ty, class _InOutItCat>
+inline
+	_OutIt _Replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_Pr _Pred, const _Ty& _Val, _InOutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First != _Last; ++_First, ++_Dest)
+		*_Dest = _Pred(*_First) ? _Val : *_First;
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt, class _Pr, class _Ty>
+inline
+	_OutIt _Replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_Pr _Pred, const _Ty& _Val,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last - _First);
+	_Replace_copy_if(_First, _Last, ::std:: _Checked_base(_Dest),
+		_Pred, _Val,
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return (_Result);
+	}
+
+
+
+template<class _InIt, class _OutIt, class _Pr, class _Ty, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_Pr _Pred, const _Ty& _Val,
+		_InOutItCat _First_dest_cat, _Unchecked_iterator_tag)
+	{
+	return _Replace_copy_if(_First, _Last, _Dest, _Pred, _Val,
+		_First_dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr,
+	class _Ty> inline
+	_OutIt replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_Pr _Pred, const _Ty& _Val)
+	{	
+	return _Replace_copy_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred, _Val,
+		_Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _FwdIt,
+	class _Fn0> inline
+	void _Generate(_FwdIt _First, _FwdIt _Last, _Fn0 _Func)
+	{	
+	;
+	;
+	for (; _First != _Last; ++_First)
+		*_First = _Func();
+	}
+
+template<class _FwdIt,
+	class _Fn0> inline
+	void generate(_FwdIt _First, _FwdIt _Last, _Fn0 _Func)
+	{	
+	_Generate(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Func);
+	}
+
+		
+template<class _OutIt, class _Diff, class _Fn0, class _OutItCat>
+inline
+	void _Generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
+		_OutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	for (; 0 < _Count; --_Count, ++_Dest)
+		*_Dest = _Func();
+	}
+
+
+template<class _OutIt, class _Diff, class _Fn0>
+inline
+	void _Generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + _Count;
+	_Generate_n(::std:: _Checked_base(_Dest), _Count, _Func,
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	}
+
+
+
+template<class _OutIt, class _Diff, class _Fn0, class _OutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	void _Generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
+		_OutItCat _Dest_cat, _Unchecked_iterator_tag)
+	{
+	_Generate_n(_Dest, _Count, _Func, _Dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _OutIt,
+	class _Diff,
+	class _Fn0> inline
+	void generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func)
+	{	
+	_Generate_n(_Dest, _Count, _Func,
+		_Iter_cat(_Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt _Remove_copy(_InIt _First, _InIt _Last,
+		_OutIt _Dest, const _Ty& _Val, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	for (; _First != _Last; ++_First)
+		if (!(*_First == _Val))
+			*_Dest++ = *_First;
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt, class _Ty>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Remove_copy(_InIt _First, _InIt _Last,
+		_OutIt _Dest, const _Ty& _Val, _Unchecked_iterator_tag)
+	{
+		return _Remove_copy(_First, _Last, _Dest, _Val, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt remove_copy(_InIt _First, _InIt _Last,
+		_OutIt _Dest, const _Ty& _Val)
+	{	
+	return _Remove_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Val, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Remove_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First != _Last; ++_First)
+		if (!_Pred(*_First))
+			*_Dest++ = *_First;
+	return (_Dest);
+	}
+
+
+template<class _InIt, class _OutIt, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Remove_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+		return _Remove_copy_if(_First, _Last, _Dest, _Pred, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt remove_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)
+	{	
+	return _Remove_copy_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _FwdIt,
+	class _Ty> inline
+	_FwdIt remove(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
+	{	
+	_First = find(_First, _Last, _Val);
+	if (_First == _Last)
+		return (_First);	
+	else
+		{	
+		_FwdIt _First1 = _First;
+		return (::stdext:: unchecked_remove_copy(++_First1, _Last, _First, _Val));
+		}
+	}
+
+		
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt remove_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	_First = std::find_if(_First, _Last, _Pred);
+	if (_First == _Last)
+		return (_First);	
+	else
+		{	
+		_FwdIt _First1 = _First;
+		return (::stdext:: unchecked_remove_copy_if(++_First1, _Last, _First, _Pred));
+		}
+	}
+
+		
+template<class _FwdIt> inline
+	_FwdIt _Unique(_FwdIt _First, _FwdIt _Last)
+	{	
+	;
+	for (_FwdIt _Firstb; (_Firstb = _First) != _Last && ++_First != _Last; )
+		if (*_Firstb == *_First)
+			{	
+			for (; ++_First != _Last; )
+				if (!(*_Firstb == *_First))
+					*++_Firstb = *_First;
+			return (++_Firstb);
+			}
+	return (_Last);
+	}
+
+template<class _FwdIt> inline
+	_FwdIt unique(_FwdIt _First, _FwdIt _Last)
+	{	
+	::std:: _Checked_assign_from_base(_Last, _Unique(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last)));
+	return (_Last);
+	}
+
+		
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt _Unique(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	for (_FwdIt _Firstb; (_Firstb = _First) != _Last && ++_First != _Last; )
+		if (_Pred(*_Firstb, *_First))
+			{	
+			for (; ++_First != _Last; )
+				if (!_Pred(*_Firstb, *_First))
+					*++_Firstb = *_First;
+			return (++_Firstb);
+			}
+	return (_Last);
+	}
+
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt unique(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_Last, _Unique(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred));
+	return (_Last);
+	}
+
+		
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt _Unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Ty *, _Range_checked_iterator_tag)
+	{	
+	;
+	_Ty _Val = *_First;
+
+	for (*_Dest++ = _Val; ++_First != _Last; )
+		if (!(_Val == *_First))
+			_Val = *_First, *_Dest++ = _Val;
+	return (_Dest);
+	}
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt _Unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		input_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	return (_Unique_copy(_First, _Last, _Dest, _Val_type(_First), _Range_checked_iterator_tag()));
+	}
+
+template<class _FwdIt,
+	class _OutIt> inline
+	_OutIt _Unique_copy(_FwdIt _First, _FwdIt _Last, _OutIt _Dest,
+		forward_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	_FwdIt _Firstb = _First;
+	for (*_Dest++ = *_Firstb; ++_First != _Last; )
+		if (!(*_Firstb == *_First))
+			_Firstb = _First, *_Dest++ = *_Firstb;
+	return (_Dest);
+	}
+
+template<class _BidIt,
+	class _OutIt> inline
+	_OutIt _Unique_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		bidirectional_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	return (_Unique_copy(_First, _Last, _Dest, forward_iterator_tag(), _Range_checked_iterator_tag()));
+	}
+
+template<class _RanIt,
+	class _OutIt> inline
+	_OutIt _Unique_copy(_RanIt _First, _RanIt _Last, _OutIt _Dest,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	return (_Unique_copy(_First, _Last, _Dest, forward_iterator_tag(), _Range_checked_iterator_tag()));
+	}
+
+
+template<class _RanIt, class _OutIt, class _RanItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Unique_copy(_RanIt _First, _RanIt _Last, _OutIt _Dest,
+		_RanItCat _First_cat, _Unchecked_iterator_tag)
+	{
+		return _Unique_copy(_First, _Last, _Dest, _First_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+	return (_First == _Last ? _Dest :
+		_Unique_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Iter_cat(_First), ::std:: _Checked_cat(_Dest)));
+	}
+
+		
+template<class _InIt,
+	class _OutIt,
+	class _Ty,
+	class _Pr> inline
+	_OutIt _Unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred,
+		_Ty *, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	_Ty _Val = *_First;
+
+	for (*_Dest++ = _Val; ++_First != _Last; )
+		if (!_Pred(_Val, *_First))
+			_Val = *_First, *_Dest++ = _Val;
+	return (_Dest);
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred,
+		input_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	return (_Unique_copy(_First, _Last, _Dest, _Pred, _Val_type(_First)), _Range_checked_iterator_tag());
+	}
+
+template<class _FwdIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Unique_copy(_FwdIt _First, _FwdIt _Last, _OutIt _Dest, _Pr _Pred,
+		forward_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	_FwdIt _Firstb = _First;
+
+	for (*_Dest++ = *_Firstb; ++_First != _Last; )
+		if (!_Pred(*_Firstb, *_First))
+			_Firstb = _First, *_Dest++ = *_Firstb;
+	return (_Dest);
+	}
+
+template<class _BidIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Unique_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest, _Pr _Pred,
+		bidirectional_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	return (_Unique_copy(_First, _Last, _Dest, _Pred,
+		forward_iterator_tag(), _Range_checked_iterator_tag()));
+	}
+
+template<class _RanIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Unique_copy(_RanIt _First, _RanIt _Last, _OutIt _Dest, _Pr _Pred,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	return (_Unique_copy(_First, _Last, _Dest, _Pred,
+		forward_iterator_tag(), _Range_checked_iterator_tag()));
+	}
+
+
+template<class _RanIt, class _OutIt, class _Pr, class _RanItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Unique_copy(_RanIt _First, _RanIt _Last, _OutIt _Dest, _Pr _Pred,
+		_RanItCat _First_cat, _Unchecked_iterator_tag)
+	{
+		return _Unique_copy(_First, _Last, _Dest, _Pred, _First_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)
+	{	
+	return (_First == _Last ? _Dest
+		: _Unique_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred, _Iter_cat(_First), ::std:: _Checked_cat(_Dest)));
+	}
+
+		
+template<class _BidIt> inline
+	void _Reverse(_BidIt _First, _BidIt _Last, bidirectional_iterator_tag)
+	{	
+	for (; _First != _Last && _First != --_Last; ++_First)
+		std::iter_swap(_First, _Last);
+	}
+
+template<class _RanIt> inline
+	void _Reverse(_RanIt _First, _RanIt _Last, random_access_iterator_tag)
+	{	
+	;
+	for (; _First < _Last; ++_First)
+		std::iter_swap(_First, --_Last);
+	}
+
+template<class _BidIt> inline
+	void reverse(_BidIt _First, _BidIt _Last)
+	{	
+	_Reverse(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Iter_cat(_First));
+	}
+
+		
+template<class _BidIt, class _OutIt, class _InOutItCat>
+inline
+	_OutIt _Reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_InOutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	for (; _First != _Last; ++_Dest)
+		*_Dest = *--_Last;
+	return (_Dest);
+	}
+
+
+template<class _BidIt, class _OutIt>
+inline
+	_OutIt _Reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last - _First);
+	_Reverse_copy(_First, _Last, ::std:: _Checked_base(_Dest),
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return (_Result);
+	}
+
+
+
+template<class _BidIt, class _OutIt, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_InOutItCat _First_dest_cat, _Unchecked_iterator_tag)
+	{
+	return _Reverse_copy(_First, _Last, _Dest,
+		_First_dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _BidIt,
+	class _OutIt> inline
+	_OutIt reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest)
+	{	
+	return _Reverse_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _FwdIt> inline
+	void _Rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last,
+		forward_iterator_tag)
+	{	
+	for (_FwdIt _Next = _Mid; ; )
+		{	
+		std::iter_swap(_First, _Next);
+		if (++_First == _Mid)
+			if (++_Next == _Last)
+				break;	
+			else
+				_Mid = _Next;	
+		else if (++_Next == _Last)
+			_Next = _Mid;	
+		}
+	}
+
+template<class _BidIt> inline
+	void _Rotate(_BidIt _First, _BidIt _Mid, _BidIt _Last,
+		bidirectional_iterator_tag)
+	{	
+	std::reverse(_First, _Mid);
+	std::reverse(_Mid, _Last);
+	std::reverse(_First, _Last);
+	}
+
+template<class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	void _Rotate(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Diff *, _Ty *)
+	{	
+	;
+	;
+	_Diff _Shift = _Mid - _First;
+	_Diff _Count = _Last - _First;
+
+	for (_Diff _Factor = _Shift; _Factor != 0; )
+		{	
+		_Diff _Tmp = _Count % _Factor;
+		_Count = _Factor, _Factor = _Tmp;
+		}
+
+	if (_Count < _Last - _First)
+		for (; 0 < _Count; --_Count)
+			{	
+			_RanIt _Hole = _First + _Count;
+			_RanIt _Next = _Hole;
+			_Ty _Holeval = *_Hole;
+			_RanIt _Next1 = _Next + _Shift == _Last ? _First : _Next + _Shift;
+			while (_Next1 != _Hole)
+				{	
+				*_Next = *_Next1;
+				_Next = _Next1;
+				_Next1 = _Shift < _Last - _Next1 ? _Next1 + _Shift
+					: _First + (_Shift - (_Last - _Next1));
+				}
+			*_Next = _Holeval;
+			}
+	}
+
+template<class _RanIt> inline
+	void _Rotate(_RanIt _First, _RanIt _Mid, _RanIt _Last,
+			random_access_iterator_tag)
+	{	
+	_Rotate(_First, _Mid, _Last, _Dist_type(_First), _Val_type(_First));
+	}
+
+template<class _FwdIt> inline
+	void rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last)
+	{	
+	if (_First != _Mid && _Mid != _Last)
+		_Rotate(::std:: _Checked_base(_First), ::std:: _Checked_base(_Mid), ::std:: _Checked_base(_Last), _Iter_cat(_First));
+	}
+
+		
+template<class _FwdIt,
+	class _OutIt> inline
+	_OutIt _Rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last, _OutIt _Dest, _Range_checked_iterator_tag)
+	{	
+	_Dest = ::stdext:: unchecked_copy(_Mid, _Last, _Dest);
+	return (::stdext:: unchecked_copy(_First, _Mid, _Dest));
+	}
+
+
+template<class _FwdIt, class _OutIt>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last, _OutIt _Dest, _Unchecked_iterator_tag)
+	{
+		return _Rotate_copy(_First, _Mid, _Last, _Dest, _Range_checked_iterator_tag());
+	}
+
+
+template<class _FwdIt, class _OutIt>
+inline
+	_OutIt rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last, _OutIt _Dest)
+	{
+		return _Rotate_copy(_First, _Mid, _Last, _Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _RanIt,
+	class _Diff> inline
+	void _Random_shuffle(_RanIt _First, _RanIt _Last, _Diff *)
+	{	
+	;
+	const int _RANDOM_BITS = 15;	
+	const int _RANDOM_MAX = (1U << _RANDOM_BITS) - 1;
+
+	_RanIt _Next = _First;
+	for (unsigned long _Index = 2; ++_Next != _Last; ++_Index)
+		{	
+		unsigned long _Rm = _RANDOM_MAX;
+		unsigned long _Rn = ::rand() & _RANDOM_MAX;
+		for (; _Rm < _Index && _Rm != ~0UL;
+			_Rm = _Rm << _RANDOM_BITS | _RANDOM_MAX)
+			_Rn = _Rn << _RANDOM_BITS
+				| (::rand() & _RANDOM_MAX);	
+
+		std::iter_swap(_Next, _First + _Diff(_Rn % _Index));	
+		}
+	}
+
+template<class _RanIt> inline
+	void random_shuffle(_RanIt _First, _RanIt _Last)
+	{	
+	if (_First != _Last)
+		_Random_shuffle(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dist_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Fn1,
+	class _Diff> inline
+	void _Random_shuffle(_RanIt _First, _RanIt _Last, _Fn1& _Func, _Diff *)
+	{	
+	;
+	;
+	_RanIt _Next = _First;
+
+	for (_Diff _Index = 2; ++_Next != _Last; ++_Index)
+		std::iter_swap(_Next, _First + _Diff(_Func(_Index) % _Index));
+	}
+
+template<class _RanIt,
+	class _Fn1> inline
+	void random_shuffle(_RanIt _First, _RanIt _Last, _Fn1& _Func)
+	{	
+	if (_First != _Last)
+		_Random_shuffle(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Func, _Dist_type(_First));
+	}
+
+		
+template<class _BidIt,
+	class _Pr> inline
+	_BidIt _Partition(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	for (; ; ++_First)
+		{	
+		for (; _First != _Last && _Pred(*_First); ++_First)
+			;	
+		if (_First == _Last)
+			break;	
+
+		for (; _First != --_Last && !_Pred(*_Last); )
+			;	
+		if (_First == _Last)
+			break;	
+
+		std::iter_swap(_First, _Last);	
+		}
+	return (_First);
+	}
+
+template<class _BidIt,
+	class _Pr> inline
+	_BidIt partition(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Partition(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred));
+	return (_First);
+	}
+
+		
+template<class _BidIt,
+	class _Pr,
+	class _Diff,
+	class _Ty> inline
+	_BidIt _Stable_partition(_BidIt _First, _BidIt _Last, _Pr _Pred,
+		_Diff _Count, _Temp_iterator<_Ty>& _Tempbuf)
+	{	
+	if (_Count == 0)
+		return (_First);
+	else if (_Count == 1)
+		return (_Pred(*_First) ? _Last : _First);
+	else if (_Count <= _Tempbuf._Maxlen())
+		{	
+		_BidIt _Next = _First;
+		for (_Tempbuf._Init(); _First != _Last; ++_First)
+			if (_Pred(*_First))
+				*_Next++ = *_First;
+			else
+				*_Tempbuf++ = *_First;
+
+		::stdext:: unchecked_copy(_Tempbuf._First(), _Tempbuf._Last(), _Next);	
+		return (_Next);
+		}
+	else
+		{	
+		_BidIt _Mid = _First;
+		std::advance(_Mid, _Count / 2);
+
+		_BidIt _Left = _Stable_partition(_First, _Mid, _Pred,
+			_Count / 2, _Tempbuf);	
+		_BidIt _Right = _Stable_partition(_Mid, _Last, _Pred,
+			_Count - _Count / 2, _Tempbuf);	
+
+		_Diff _Count1 = 0;
+		_Distance(_Left, _Mid, _Count1);
+		_Diff _Count2 = 0;
+		_Distance(_Mid, _Right, _Count2);
+
+		return (_Buffered_rotate(_Left, _Mid, _Right,
+			_Count1, _Count2, _Tempbuf));	
+		}
+	}
+
+template<class _BidIt,
+	class _Pr,
+	class _Diff,
+	class _Ty> inline
+	_BidIt _Stable_partition(_BidIt _First, _BidIt _Last, _Pr _Pred,
+		_Diff *, _Ty *)
+	{	
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+	_Temp_iterator<_Ty> _Tempbuf(_Count);
+	return (_Stable_partition(_First, _Last, _Pred, _Count, _Tempbuf));
+	}
+
+template<class _BidIt,
+	class _Pr> inline
+	_BidIt stable_partition(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	if (_First != _Last)
+		{
+		::std:: _Checked_assign_from_base(_First, _Stable_partition(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred, _Dist_type(_First), _Val_type(_First)));
+		}
+	return _First;
+	}
+
+
+ 
+
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 
+ 
+ 
+
+		
+template<class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	void _Push_heap(_RanIt _First, _Diff _Hole,
+		_Diff _Top, _Ty _Val)
+	{	
+	for (_Diff _Idx = (_Hole - 1) / 2;
+		_Top < _Hole && ((*(_First + _Idx)) < (_Val));
+		_Idx = (_Hole - 1) / 2)
+		{	
+		*(_First + _Hole) = *(_First + _Idx);
+		_Hole = _Idx;
+		}
+
+	*(_First + _Hole) = _Val;	
+	}
+
+template<class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	void _Push_heap_0(_RanIt _First, _RanIt _Last, _Diff *, _Ty *)
+	{	
+	;
+	_Diff _Count = _Last - _First;
+	if (0 < _Count)
+		_Push_heap(_First, _Count, _Diff(0), _Ty(*_Last));
+	}
+
+template<class _RanIt> inline
+	void push_heap(_RanIt _First, _RanIt _Last)
+	{	
+
+ 
+
+
+
+
+
+	if (_First != _Last)
+ 
+
+		_Push_heap_0(::std:: _Checked_base(_First), ::std:: _Checked_base(--_Last),
+			_Dist_type(_First), _Val_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Push_heap(_RanIt _First, _Diff _Hole,
+		_Diff _Top, _Ty _Val, _Pr _Pred)
+	{	
+	for (_Diff _Idx = (_Hole - 1) / 2;
+		_Top < _Hole && _Pred(*(_First + _Idx), _Val);
+		_Idx = (_Hole - 1) / 2)
+		{	
+		*(_First + _Hole) = *(_First + _Idx);
+		_Hole = _Idx;
+		}
+
+	*(_First + _Hole) = _Val;	
+	}
+
+template<class _RanIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Push_heap_0(_RanIt _First, _RanIt _Last, _Pr _Pred, _Diff *, _Ty *)
+	{	
+	;
+	_Diff _Count = _Last - _First;
+	if (0 < _Count)
+		_Push_heap(_First, _Count, _Diff(0), _Ty(*_Last), _Pred);
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void push_heap(_RanIt _First, _RanIt _Last, _Pr _Pred)
+	{	
+
+ 
+
+
+
+
+
+	if (_First != _Last)
+ 
+
+		_Push_heap_0(::std:: _Checked_base(_First), ::std:: _Checked_base(--_Last), _Pred,
+			_Dist_type(_First), _Val_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	void _Adjust_heap(_RanIt _First, _Diff _Hole, _Diff _Bottom, _Ty _Val)
+	{	
+	_Diff _Top = _Hole;
+	_Diff _Idx = 2 * _Hole + 2;
+
+	for (; _Idx < _Bottom; _Idx = 2 * _Idx + 2)
+		{	
+		if (((*(_First + _Idx)) < (*(_First + (_Idx - 1)))))
+			--_Idx;
+		*(_First + _Hole) = *(_First + _Idx), _Hole = _Idx;
+		}
+
+	if (_Idx == _Bottom)
+		{	
+		*(_First + _Hole) = *(_First + (_Bottom - 1));
+		_Hole = _Bottom - 1;
+		}
+	_Push_heap(_First, _Hole, _Top, _Val);
+	}
+
+template<class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	void _Pop_heap(_RanIt _First, _RanIt _Last, _RanIt _Dest,
+		_Ty _Val, _Diff *)
+	{	
+	*_Dest = *_First;
+	_Adjust_heap(_First, _Diff(0), _Diff(_Last - _First), _Val);
+	}
+
+template<class _RanIt,
+	class _Ty> inline
+	void _Pop_heap_0(_RanIt _First, _RanIt _Last, _Ty *)
+	{	
+	_Pop_heap(_First, _Last - 1, _Last - 1,
+		_Ty(*(_Last - 1)), _Dist_type(_First));
+	}
+
+template<class _RanIt> inline
+	void pop_heap(_RanIt _First, _RanIt _Last)
+	{	
+	;
+	if (1 < _Last - _First)
+		_Pop_heap_0(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Adjust_heap(_RanIt _First, _Diff _Hole, _Diff _Bottom,
+		_Ty _Val, _Pr _Pred)
+	{	
+	_Diff _Top = _Hole;
+	_Diff _Idx = 2 * _Hole + 2;
+
+	for (; _Idx < _Bottom; _Idx = 2 * _Idx + 2)
+		{	
+		if (_Pred(*(_First + _Idx), *(_First + (_Idx - 1))))
+			--_Idx;
+		*(_First + _Hole) = *(_First + _Idx), _Hole = _Idx;
+		}
+
+	if (_Idx == _Bottom)
+		{	
+		*(_First + _Hole) = *(_First + (_Bottom - 1));
+		_Hole = _Bottom - 1;
+		}
+	_Push_heap(_First, _Hole, _Top, _Val, _Pred);
+	}
+
+template<class _RanIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Pop_heap(_RanIt _First, _RanIt _Last, _RanIt _Dest,
+		_Ty _Val, _Pr _Pred, _Diff *)
+	{	
+	*_Dest = *_First;
+	_Adjust_heap(_First, _Diff(0), _Diff(_Last - _First), _Val, _Pred);
+	}
+
+template<class _RanIt,
+	class _Ty,
+	class _Pr> inline
+	void _Pop_heap_0(_RanIt _First, _RanIt _Last, _Pr _Pred, _Ty *)
+	{	
+	_Pop_heap(_First, _Last - 1, _Last - 1,
+		_Ty(*(_Last - 1)), _Pred, _Dist_type(_First));
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void pop_heap(_RanIt _First, _RanIt _Last, _Pr _Pred)
+	{	
+	;
+	if (1 < _Last - _First)
+		_Pop_heap_0(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred, _Val_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	void _Make_heap(_RanIt _First, _RanIt _Last, _Diff *, _Ty *)
+	{	
+	_Diff _Bottom = _Last - _First;
+
+	for (_Diff _Hole = _Bottom / 2; 0 < _Hole; )
+		{	
+		--_Hole;
+		_Adjust_heap(_First, _Hole, _Bottom, _Ty(*(_First + _Hole)));
+		}
+	}
+
+template<class _RanIt> inline
+	void make_heap(_RanIt _First, _RanIt _Last)
+	{	
+	if (1 < _Last - _First)
+		_Make_heap(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last),
+			_Dist_type(_First), _Val_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Make_heap(_RanIt _First, _RanIt _Last, _Pr _Pred, _Diff *, _Ty *)
+	{	
+	_Diff _Bottom = _Last - _First;
+	for (_Diff _Hole = _Bottom / 2; 0 < _Hole; )
+		{	
+		--_Hole;
+		_Adjust_heap(_First, _Hole, _Bottom,
+			_Ty(*(_First + _Hole)), _Pred);
+		}
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void make_heap(_RanIt _First, _RanIt _Last, _Pr _Pred)
+	{	
+	if (1 < _Last - _First)
+		_Make_heap(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred,
+			_Dist_type(_First), _Val_type(_First));
+	}
+
+		
+template<class _RanIt> inline
+	void _Sort_heap(_RanIt _First, _RanIt _Last)
+	{	
+	;
+	for (; 1 < _Last - _First; --_Last)
+		std::pop_heap(_First, _Last);
+	}
+
+template<class _RanIt> inline
+	void sort_heap(_RanIt _First, _RanIt _Last)
+	{	
+	;
+	_Sort_heap(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last));
+	}
+
+		
+template<class _RanIt,
+	class _Pr> inline
+	void _Sort_heap(_RanIt _First, _RanIt _Last, _Pr _Pred)
+	{	
+	for (; 1 < _Last - _First; --_Last)
+		std::pop_heap(_First, _Last, _Pred);
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void sort_heap(_RanIt _First, _RanIt _Last, _Pr _Pred)
+	{	
+	;
+	_Sort_heap(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred);
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Diff> inline
+	_FwdIt _Lower_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Diff *)
+	{	
+	;
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+
+	for (; 0 < _Count; )
+		{	
+		_Diff _Count2 = _Count / 2;
+		_FwdIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+		;
+
+		if (((*_Mid) < (_Val)))
+			_First = ++_Mid, _Count -= _Count2 + 1;
+		else
+			_Count = _Count2;
+		}
+	return (_First);
+	}
+
+template<class _FwdIt,
+	class _Ty> inline
+	_FwdIt lower_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Lower_bound(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val, _Dist_type(_First)));
+	return _First;
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Diff,
+	class _Pr> inline
+	_FwdIt _Lower_bound(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred, _Diff *)
+	{	
+	;
+	;
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+	for (; 0 < _Count; )
+		{	
+		_Diff _Count2 = _Count / 2;
+		_FwdIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+		;
+
+		if (_Pred(*_Mid, _Val))
+			_First = ++_Mid, _Count -= _Count2 + 1;
+		else
+			_Count = _Count2;
+		}
+	return (_First);
+	}
+
+template<class _FwdIt,
+	class _Ty,
+	class _Pr> inline
+	_FwdIt lower_bound(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Lower_bound(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val, _Pred, _Dist_type(_First)));
+	return _First;
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Diff> inline
+	_FwdIt _Upper_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val, _Diff *)
+	{	
+	;
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+	for (; 0 < _Count; )
+		{	
+		_Diff _Count2 = _Count / 2;
+		_FwdIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+		;
+
+		if (!((_Val) < (*_Mid)))
+			_First = ++_Mid, _Count -= _Count2 + 1;
+		else
+			_Count = _Count2;
+		}
+	return (_First);
+	}
+
+template<class _FwdIt,
+	class _Ty> inline
+	_FwdIt upper_bound(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Upper_bound(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val, _Dist_type(_First)));
+	return _First;
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Diff,
+	class _Pr> inline
+	_FwdIt _Upper_bound(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred, _Diff *)
+	{	
+	;
+	;
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+	for (; 0 < _Count; )
+		{	
+		_Diff _Count2 = _Count / 2;
+		_FwdIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+		;
+
+		if (!_Pred(_Val, *_Mid))
+			_First = ++_Mid, _Count -= _Count2 + 1;
+		else
+			_Count = _Count2;
+		}
+	return (_First);
+	}
+
+template<class _FwdIt,
+	class _Ty,
+	class _Pr> inline
+	_FwdIt upper_bound(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Upper_bound(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Val, _Pred, _Dist_type(_First)));
+	return _First;
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Diff> inline
+	pair<_FwdIt, _FwdIt> _Equal_range(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Diff *)
+	{	
+	;
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+
+	for (; 0 < _Count; )
+		{	
+		_Diff _Count2 = _Count / 2;
+		_FwdIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+		;
+
+		if (((*_Mid) < (_Val)))
+			{	
+			_First = ++_Mid;
+			_Count -= _Count2 + 1;
+			}
+		else if (_Val < *_Mid)
+			_Count = _Count2;	
+		else
+			{	
+			_FwdIt _First2 = lower_bound(_First, _Mid, _Val);
+			std::advance(_First, _Count);
+			_FwdIt _Last2 = upper_bound(++_Mid, _First, _Val);
+			return (pair<_FwdIt, _FwdIt>(_First2, _Last2));
+			}
+		}
+
+	return (pair<_FwdIt, _FwdIt>(_First, _First));	
+	}
+
+template<class _FwdIt,
+	class _Ty> inline
+	pair<_FwdIt, _FwdIt> equal_range(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val)
+	{	
+	return (_Equal_range(_First, _Last, _Val, _Dist_type(_First)));
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Diff,
+	class _Pr> inline
+	pair<_FwdIt, _FwdIt> _Equal_range(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred, _Diff *)
+	{	
+	;
+	;
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+
+	for (; 0 < _Count; )
+		{	
+		_Diff _Count2 = _Count / 2;
+		_FwdIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+		;
+
+		if (_Pred(*_Mid, _Val))
+			{	
+			_First = ++_Mid;
+			_Count -= _Count2 + 1;
+			}
+		else if (_Pred(_Val, *_Mid))
+			_Count = _Count2;	
+		else
+			{	
+			_FwdIt _First2 = lower_bound(_First, _Mid, _Val, _Pred);
+			std::advance(_First, _Count);
+			_FwdIt _Last2 = upper_bound(++_Mid, _First, _Val, _Pred);
+			return (pair<_FwdIt, _FwdIt>(_First2, _Last2));
+			}
+		}
+
+	return (pair<_FwdIt, _FwdIt>(_First, _First));	
+	}
+
+template<class _FwdIt,
+	class _Ty,
+	class _Pr> inline
+	pair<_FwdIt, _FwdIt> equal_range(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred)
+	{	
+	return (_Equal_range(_First, _Last, _Val, _Pred, _Dist_type(_First)));
+	}
+
+		
+template<class _FwdIt,
+	class _Ty> inline
+	bool binary_search(_FwdIt _First, _FwdIt _Last, const _Ty& _Val)
+	{	
+	_First = std::lower_bound(_First, _Last, _Val);
+	return (_First != _Last && !(_Val < *_First));
+	}
+
+		
+template<class _FwdIt,
+	class _Ty,
+	class _Pr> inline
+	bool binary_search(_FwdIt _First, _FwdIt _Last,
+		const _Ty& _Val, _Pr _Pred)
+	{	
+	_First = std::lower_bound(_First, _Last, _Val, _Pred);
+	return (_First != _Last && !_Pred(_Val, *_First));
+	}
+
+		
+template<class _InIt1, class _InIt2, class _OutIt, class _InOutItCat>
+inline
+	_OutIt _Merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest,
+		_InOutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; ++_Dest)
+		if (((*_First2) < (*_First1)))
+			*_Dest = *_First2, ++_First2;
+		else
+			*_Dest = *_First1, ++_First1;
+
+	_Dest = ::stdext:: unchecked_copy(_First1, _Last1, _Dest);	
+	return (::stdext:: unchecked_copy(_First2, _Last2, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt>
+inline
+	_OutIt _Merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last1 - _First1) + (_Last2 - _First2);
+	_Merge(_First1, _Last1, _First2, _Last2, ::std:: _Checked_base(_Dest),
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _InOutItCat _First_dest_cat, _Unchecked_iterator_tag)
+	{
+	return _Merge(_First1, _Last1, _First2, _Last2, _Dest, _First_dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+	return _Merge(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+		_Iter_random(_First1, _First2, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr, class _InOutItCat>
+inline
+	_OutIt _Merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred,
+		_InOutItCat, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; ++_Dest)
+		if (_Pred(*_First2, *_First1))
+			*_Dest = *_First2, ++_First2;
+		else
+			*_Dest = *_First1, ++_First1;
+
+	_Dest = ::stdext:: unchecked_copy(_First1, _Last1, _Dest);	
+	return (::stdext:: unchecked_copy(_First2, _Last2, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
+inline
+	_OutIt _Merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred,
+		random_access_iterator_tag, _Range_checked_iterator_tag)
+	{	
+	
+	_OutIt _Result = _Dest + (_Last1 - _First1) + (_Last2 - _First2);
+	_Merge(_First1, _Last1, _First2, _Last2, ::std:: _Checked_base(_Dest), _Pred, 
+		forward_iterator_tag(), _Range_checked_iterator_tag());
+	return _Result;
+	}
+
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr, class _InOutItCat>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _InOutItCat _First_dest_cat, _Unchecked_iterator_tag)
+	{
+	return _Merge(_First1, _Last1, _First2, _Last2, _Dest, _Pred, _First_dest_cat, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+	return _Merge(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, _Pred,
+		_Iter_random(_First1, _First2, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _BidIt,
+	class _Diff,
+	class _Ty> inline
+	_BidIt _Buffered_rotate(_BidIt _First, _BidIt _Mid, _BidIt _Last,
+		_Diff _Count1, _Diff _Count2, _Temp_iterator<_Ty>& _Tempbuf)
+	{	
+	if (_Count1 <= _Count2 && _Count1 <= _Tempbuf._Maxlen())
+		{	
+		::stdext:: unchecked_copy(_First, _Mid, _Tempbuf._Init());
+		::stdext:: unchecked_copy(_Mid, _Last, _First);
+		return (::stdext:: unchecked_copy_backward(_Tempbuf._First(), _Tempbuf._Last(),
+			_Last));
+		}
+	else if (_Count2 <= _Tempbuf._Maxlen())
+		{	
+		::stdext:: unchecked_copy(_Mid, _Last, _Tempbuf._Init());
+		::stdext:: unchecked_copy_backward(_First, _Mid, _Last);
+		return (::stdext:: unchecked_copy(_Tempbuf._First(), _Tempbuf._Last(), _First));
+		}
+	else
+		{	
+		std::rotate(_First, _Mid, _Last);
+		std::advance(_First, _Count2);
+		return (_First);
+		}
+	}
+
+template<class _BidIt1,
+	class _BidIt2,
+	class _BidIt3> inline
+	_BidIt3 _Merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Range_checked_iterator_tag)
+	{	
+	for (; ; )
+		if (_First1 == _Last1)
+			return (::stdext:: unchecked_copy_backward(_First2, _Last2, _Dest));
+		else if (_First2 == _Last2)
+			return (::stdext:: unchecked_copy_backward(_First1, _Last1, _Dest));
+		else if (((*--_Last2) < (*--_Last1)))
+			*--_Dest = *_Last1, ++_Last2;
+		else
+			*--_Dest = *_Last2, ++_Last1;
+	}
+
+
+template<class _BidIt1, class _BidIt2, class _BidIt3>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_BidIt3 _Merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Unchecked_iterator_tag)
+	{
+		return _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, _Range_checked_iterator_tag());
+	}
+
+
+template<class _BidIt1, class _BidIt2, class _BidIt3>
+inline
+	_BidIt3 _Merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest)
+	{
+		return _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty> inline
+	void _Buffered_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last,
+		_Diff _Count1, _Diff _Count2,
+			_Temp_iterator<_Ty>& _Tempbuf)
+	{	
+	if (_Count1 + _Count2 == 2)
+		{	
+		if (((*_Mid) < (*_First)))
+			std::iter_swap(_First, _Mid);
+		}
+	else if (_Count1 <= _Count2 && _Count1 <= _Tempbuf._Maxlen())
+		{	
+		::stdext:: unchecked_copy(_First, _Mid, _Tempbuf._Init());
+		::stdext:: unchecked_merge(_Tempbuf._First(), _Tempbuf._Last(), _Mid, _Last, _First);
+		}
+	else if (_Count2 <= _Tempbuf._Maxlen())
+		{	
+		::stdext:: unchecked_copy(_Mid, _Last, _Tempbuf._Init());
+		::stdext:: _Unchecked_merge_backward(_First, _Mid,
+			_Tempbuf._First(), _Tempbuf._Last(), _Last);
+		}
+	else
+		{	
+		_BidIt _Firstn, _Lastn;
+		_Diff _Count1n, _Count2n;
+
+		if (_Count2 < _Count1)
+			{	
+			_Count1n = _Count1 / 2, _Count2n = 0;
+			_Firstn = _First;
+			std::advance(_Firstn, _Count1n);
+			_Lastn = std::lower_bound(_Mid, _Last, *_Firstn);
+			_Distance(_Mid, _Lastn, _Count2n);
+			}
+		else
+			{	
+			_Count1n = 0, _Count2n = _Count2 / 2;
+			_Lastn = _Mid;
+			std::advance(_Lastn, _Count2n);
+			_Firstn = std::upper_bound(_First, _Mid, *_Lastn);
+			_Distance(_First, _Firstn, _Count1n);
+			}
+
+		_BidIt _Midn = _Buffered_rotate(_Firstn, _Mid, _Lastn,
+			_Count1 - _Count1n, _Count2n, _Tempbuf);	
+		_Buffered_merge(_First, _Firstn, _Midn,
+			_Count1n, _Count2n, _Tempbuf);	
+		_Buffered_merge(_Midn, _Lastn, _Last,
+			_Count1 - _Count1n, _Count2 - _Count2n, _Tempbuf);
+		}
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty> inline
+	void _Inplace_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last,
+		_Diff *, _Ty *)
+	{	
+	;
+	;
+	_Diff _Count1 = 0;
+	_Distance(_First, _Mid, _Count1);
+	_Diff _Count2 = 0;
+	_Distance(_Mid, _Last, _Count2);
+	_Temp_iterator<_Ty> _Tempbuf(_Count1 < _Count2 ? _Count1 : _Count2);
+	_Buffered_merge(_First, _Mid, _Last,
+		_Count1, _Count2, _Tempbuf);
+	}
+
+template<class _BidIt> inline
+	void inplace_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last)
+	{	
+	if (_First != _Mid && _Mid != _Last)
+		_Inplace_merge(::std:: _Checked_base(_First), ::std:: _Checked_base(_Mid), ::std:: _Checked_base(_Last),
+			_Dist_type(_First), _Val_type(_First));
+	}
+
+		
+template<class _BidIt1,
+	class _BidIt2,
+	class _BidIt3,
+	class _Pr> inline
+	_BidIt3 _Merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	for (; ; )
+		if (_First1 == _Last1)
+			return (::stdext:: unchecked_copy_backward(_First2, _Last2, _Dest));
+		else if (_First2 == _Last2)
+			return (::stdext:: unchecked_copy_backward(_First1, _Last1, _Dest));
+		else if (_Pred(*--_Last2, *--_Last1))
+			*--_Dest = *_Last1, ++_Last2;
+		else
+			*--_Dest = *_Last2, ++_Last1;
+	}
+
+
+template<class _BidIt1, class _BidIt2, class _BidIt3, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_BidIt3 _Merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+		return _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, _Pred, _Unchecked_iterator_tag);
+	}
+
+
+template<class _BidIt1, class _BidIt2, class _BidIt3, class _Pr>
+inline
+	_BidIt3 _Merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Pr _Pred)
+	{
+		return _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Buffered_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last,
+		_Diff _Count1, _Diff _Count2,
+			_Temp_iterator<_Ty>& _Tempbuf, _Pr _Pred)
+	{	
+	if (_Count1 + _Count2 == 2)
+		{	
+		if (_Pred(*_Mid, *_First))
+			std::iter_swap(_First, _Mid);
+		}
+	else if (_Count1 <= _Count2 && _Count1 <= _Tempbuf._Maxlen())
+		{	
+		::stdext:: unchecked_copy(_First, _Mid, _Tempbuf._Init());
+		::stdext:: unchecked_merge(_Tempbuf._First(), _Tempbuf._Last(),
+			_Mid, _Last, _First, _Pred);
+		}
+	else if (_Count2 <= _Tempbuf._Maxlen())
+		{	
+		::stdext:: unchecked_copy(_Mid, _Last, _Tempbuf._Init());
+		::stdext:: _Unchecked_merge_backward(_First, _Mid, _Tempbuf._First(), _Tempbuf._Last(),
+			_Last, _Pred);
+		}
+	else
+		{	
+		_BidIt _Firstn, _Lastn;
+		_Diff _Count1n, _Count2n;
+		if (_Count2 < _Count1)
+			{	
+			_Count1n = _Count1 / 2, _Count2n = 0;
+			_Firstn = _First;
+			std::advance(_Firstn, _Count1n);
+			_Lastn = lower_bound(_Mid, _Last, *_Firstn, _Pred);
+			_Distance(_Mid, _Lastn, _Count2n);
+			}
+		else
+			{	
+			_Count1n = 0, _Count2n = _Count2 / 2;
+			_Lastn = _Mid;
+			std::advance(_Lastn, _Count2n);
+			_Firstn = upper_bound(_First, _Mid, *_Lastn, _Pred);
+			_Distance(_First, _Firstn, _Count1n);
+			}
+		_BidIt _Midn = _Buffered_rotate(_Firstn, _Mid, _Lastn,
+			_Count1 - _Count1n, _Count2n, _Tempbuf);	
+		_Buffered_merge(_First, _Firstn, _Midn,
+			_Count1n, _Count2n, _Tempbuf, _Pred);	
+		_Buffered_merge(_Midn, _Lastn, _Last,
+			_Count1 - _Count1n, _Count2 - _Count2n, _Tempbuf, _Pred);
+		}
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Inplace_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Pr _Pred,
+		_Diff *, _Ty *)
+	{	
+	;
+	;
+	_Diff _Count1 = 0;
+	_Distance(_First, _Mid, _Count1);
+	_Diff _Count2 = 0;
+	_Distance(_Mid, _Last, _Count2);
+	_Temp_iterator<_Ty> _Tempbuf(_Count1 < _Count2 ? _Count1 : _Count2);
+	_Buffered_merge(_First, _Mid, _Last,
+		_Count1, _Count2, _Tempbuf, _Pred);
+	}
+
+template<class _BidIt,
+	class _Pr> inline
+	void inplace_merge(_BidIt _First, _BidIt _Mid, _BidIt _Last, _Pr _Pred)
+	{	
+	if (_First != _Mid && _Mid != _Last)
+		_Inplace_merge(::std:: _Checked_base(_First), ::std:: _Checked_base(_Mid), ::std:: _Checked_base(_Last), _Pred,
+			_Dist_type(_First), _Val_type(_First));
+	}
+
+		
+template<class _BidIt,
+	class _Ty> inline
+	void _Insertion_sort1(_BidIt _First, _BidIt _Last, _Ty *)
+	{	
+	if (_First != _Last)
+		for (_BidIt _Next = _First; ++_Next != _Last; )
+			{	
+			_BidIt _Next1 = _Next;
+			_Ty _Val = *_Next;
+
+			if (((_Val) < (*_First)))
+				{	
+				::stdext:: unchecked_copy_backward(_First, _Next, ++_Next1);
+				*_First = _Val;
+				}
+			else
+				{	
+				for (_BidIt _First1 = _Next1;
+					((_Val) < (*--_First1));
+					_Next1 = _First1)
+					*_Next1 = *_First1;	
+				*_Next1 = _Val;	
+				}
+			}
+	}
+
+template<class _BidIt> inline
+	void _Insertion_sort(_BidIt _First, _BidIt _Last)
+	{	
+	_Insertion_sort1(_First, _Last, _Val_type(_First));
+	}
+
+template<class _RanIt> inline
+	void _Med3(_RanIt _First, _RanIt _Mid, _RanIt _Last)
+	{	
+	if (((*_Mid) < (*_First)))
+		std::iter_swap(_Mid, _First);
+	if (((*_Last) < (*_Mid)))
+		std::iter_swap(_Last, _Mid);
+	if (((*_Mid) < (*_First)))
+		std::iter_swap(_Mid, _First);
+	}
+
+template<class _RanIt> inline
+	void _Median(_RanIt _First, _RanIt _Mid, _RanIt _Last)
+	{	
+	if (40 < _Last - _First)
+		{	
+		size_t _Step = (_Last - _First + 1) / 8;
+		_Med3(_First, _First + _Step, _First + 2 * _Step);
+		_Med3(_Mid - _Step, _Mid, _Mid + _Step);
+		_Med3(_Last - 2 * _Step, _Last - _Step, _Last);
+		_Med3(_First + _Step, _Mid, _Last - _Step);
+		}
+	else
+		_Med3(_First, _Mid, _Last);
+	}
+
+template<class _RanIt> inline
+	pair<_RanIt, _RanIt> _Unguarded_partition(_RanIt _First, _RanIt _Last)
+	{	
+	_RanIt _Mid = _First + (_Last - _First) / 2;	
+	_Median(_First, _Mid, _Last - 1);
+	_RanIt _Pfirst = _Mid;
+	_RanIt _Plast = _Pfirst + 1;
+
+	while (_First < _Pfirst
+		&& !((*(_Pfirst - 1)) < (*_Pfirst))
+		&& !(*_Pfirst < *(_Pfirst - 1)))
+		--_Pfirst;
+	while (_Plast < _Last
+		&& !((*_Plast) < (*_Pfirst))
+		&& !(*_Pfirst < *_Plast))
+		++_Plast;
+
+	_RanIt _Gfirst = _Plast;
+	_RanIt _Glast = _Pfirst;
+
+	for (; ; )
+		{	
+		for (; _Gfirst < _Last; ++_Gfirst)
+			if (((*_Pfirst) < (*_Gfirst)))
+				;
+			else if (*_Gfirst < *_Pfirst)
+				break;
+			else
+				std::iter_swap(_Plast++, _Gfirst);
+		for (; _First < _Glast; --_Glast)
+			if (((*(_Glast - 1)) < (*_Pfirst)))
+				;
+			else if (*_Pfirst < *(_Glast - 1))
+				break;
+			else
+				std::iter_swap(--_Pfirst, _Glast - 1);
+		if (_Glast == _First && _Gfirst == _Last)
+			return (pair<_RanIt, _RanIt>(_Pfirst, _Plast));
+
+		if (_Glast == _First)
+			{	
+			if (_Plast != _Gfirst)
+				std::iter_swap(_Pfirst, _Plast);
+			++_Plast;
+			std::iter_swap(_Pfirst++, _Gfirst++);
+			}
+		else if (_Gfirst == _Last)
+			{	
+			if (--_Glast != --_Pfirst)
+				std::iter_swap(_Glast, _Pfirst);
+			std::iter_swap(_Pfirst, --_Plast);
+			}
+		else
+			std::iter_swap(_Gfirst++, --_Glast);
+		}
+	}
+
+template<class _RanIt,
+	class _Diff> inline
+	void _Sort(_RanIt _First, _RanIt _Last, _Diff _Ideal)
+	{	
+	_Diff _Count;
+	for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; )
+		{	
+		pair<_RanIt, _RanIt> _Mid = _Unguarded_partition(_First, _Last);
+		_Ideal /= 2, _Ideal += _Ideal / 2;	
+
+		if (_Mid.first - _First < _Last - _Mid.second)	
+			_Sort(_First, _Mid.first, _Ideal), _First = _Mid.second;
+		else
+			_Sort(_Mid.second, _Last, _Ideal), _Last = _Mid.first;
+		}
+
+	if (_ISORT_MAX < _Count)
+		{	
+		std::make_heap(_First, _Last);
+		std::sort_heap(_First, _Last);
+		}
+	else if (1 < _Count)
+		_Insertion_sort(_First, _Last);	
+	}
+
+template<class _RanIt> inline
+	void sort(_RanIt _First, _RanIt _Last)
+	{	
+	;
+	_Sort(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Last - _First);
+	}
+
+		
+template<class _BidIt,
+	class _Pr> inline
+	void _Insertion_sort(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	if (_First != _Last)
+		for (_BidIt _Next = _First; ++_Next != _Last; )
+			if (_Pred(*_Next, *_First))
+				{	
+				_BidIt _Next1 = _Next;
+				std::rotate(_First, _Next, ++_Next1);
+				}
+			else
+				{	
+				_BidIt _Dest = _Next;
+				for (_BidIt _Dest0 = _Dest;
+					_Pred(*_Next, *--_Dest0); )
+					_Dest = _Dest0;
+				if (_Dest != _Next)
+					{	
+					_BidIt _Next1 = _Next;
+					std::rotate(_Dest, _Next, ++_Next1);
+					}
+				}
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void _Med3(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred)
+	{	
+	if (_Pred(*_Mid, *_First))
+		std::iter_swap(_Mid, _First);
+	if (_Pred(*_Last, *_Mid))
+		std::iter_swap(_Last, _Mid);
+	if (_Pred(*_Mid, *_First))
+		std::iter_swap(_Mid, _First);
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void _Median(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred)
+	{	
+	if (40 < _Last - _First)
+		{	
+		size_t _Step = (_Last - _First + 1) / 8;
+		_Med3(_First, _First + _Step, _First + 2 * _Step, _Pred);
+		_Med3(_Mid - _Step, _Mid, _Mid + _Step, _Pred);
+		_Med3(_Last - 2 * _Step, _Last - _Step, _Last, _Pred);
+		_Med3(_First + _Step, _Mid, _Last - _Step, _Pred);
+		}
+	else
+		_Med3(_First, _Mid, _Last, _Pred);
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	pair<_RanIt, _RanIt> _Unguarded_partition(_RanIt _First, _RanIt _Last,
+		_Pr _Pred)
+	{	
+	_RanIt _Mid = _First + (_Last - _First) / 2;
+	_Median(_First, _Mid, _Last - 1, _Pred);
+	_RanIt _Pfirst = _Mid;
+	_RanIt _Plast = _Pfirst + 1;
+
+	while (_First < _Pfirst
+		&& !_Pred(*(_Pfirst - 1), *_Pfirst)
+		&& !_Pred(*_Pfirst, *(_Pfirst - 1)))
+		--_Pfirst;
+	while (_Plast < _Last
+		&& !_Pred(*_Plast, *_Pfirst)
+		&& !_Pred(*_Pfirst, *_Plast))
+		++_Plast;
+
+	_RanIt _Gfirst = _Plast;
+	_RanIt _Glast = _Pfirst;
+
+	for (; ; )
+		{	
+		for (; _Gfirst < _Last; ++_Gfirst)
+			if (_Pred(*_Pfirst, *_Gfirst))
+				;
+			else if (_Pred(*_Gfirst, *_Pfirst))
+				break;
+			else
+				std::iter_swap(_Plast++, _Gfirst);
+		for (; _First < _Glast; --_Glast)
+			if (_Pred(*(_Glast - 1), *_Pfirst))
+				;
+			else if (_Pred(*_Pfirst, *(_Glast - 1)))
+				break;
+			else
+				std::iter_swap(--_Pfirst, _Glast - 1);
+		if (_Glast == _First && _Gfirst == _Last)
+			return (pair<_RanIt, _RanIt>(_Pfirst, _Plast));
+
+		if (_Glast == _First)
+			{	
+			if (_Plast != _Gfirst)
+				std::iter_swap(_Pfirst, _Plast);
+			++_Plast;
+			std::iter_swap(_Pfirst++, _Gfirst++);
+			}
+		else if (_Gfirst == _Last)
+			{	
+			if (--_Glast != --_Pfirst)
+				std::iter_swap(_Glast, _Pfirst);
+			std::iter_swap(_Pfirst, --_Plast);
+			}
+		else
+			std::iter_swap(_Gfirst++, --_Glast);
+		}
+	}
+
+template<class _RanIt,
+	class _Diff,
+	class _Pr> inline
+	void _Sort(_RanIt _First, _RanIt _Last, _Diff _Ideal, _Pr _Pred)
+	{	
+	_Diff _Count;
+	for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; )
+		{	
+		pair<_RanIt, _RanIt> _Mid =
+			_Unguarded_partition(_First, _Last, _Pred);
+		_Ideal /= 2, _Ideal += _Ideal / 2;	
+
+		if (_Mid.first - _First < _Last - _Mid.second)	
+			_Sort(_First, _Mid.first, _Ideal, _Pred), _First = _Mid.second;
+		else
+			_Sort(_Mid.second, _Last, _Ideal, _Pred), _Last = _Mid.first;
+		}
+
+	if (_ISORT_MAX < _Count)
+		{	
+		std::make_heap(_First, _Last, _Pred);
+		std::sort_heap(_First, _Last, _Pred);
+		}
+	else if (1 < _Count)
+		_Insertion_sort(_First, _Last, _Pred);	
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void sort(_RanIt _First, _RanIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	_Sort(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Last - _First, _Pred);
+	}
+
+		
+template<class _BidIt,
+	class _OutIt,
+	class _Diff> inline
+	void _Chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Range_checked_iterator_tag)
+	{	
+	for (_Diff _Chunk2 = _Chunk * 2; _Chunk2 <= _Count; _Count -= _Chunk2)
+		{	
+		_BidIt _Mid1 = _First;
+		std::advance(_Mid1, _Chunk);
+		_BidIt _Mid2 = _Mid1;
+		std::advance(_Mid2, _Chunk);
+
+		_Dest = ::stdext:: unchecked_merge(_First, _Mid1, _Mid1, _Mid2, _Dest);
+		_First = _Mid2;
+		}
+
+	if (_Count <= _Chunk)
+		::stdext:: unchecked_copy(_First, _Last, _Dest);	
+	else
+		{	
+		_BidIt _Mid = _First;
+		std::advance(_Mid, _Chunk);
+
+		::stdext:: unchecked_merge(_First, _Mid, _Mid, _Last, _Dest);
+		}
+	}
+
+
+template<class _BidIt, class _OutIt, class _Diff>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	void _Chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Unchecked_iterator_tag)
+	{
+		_Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, _Range_checked_iterator_tag());
+	}
+
+
+template<class _BidIt, class _OutIt, class _Diff>
+inline
+	void _Chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count)
+	{
+		_Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty> inline
+	void _Buffered_merge_sort(_BidIt _First, _BidIt _Last, _Diff _Count,
+		_Temp_iterator<_Ty>& _Tempbuf)
+	{	
+	_BidIt _Mid = _First;
+	for (_Diff _Nleft = _Count; _ISORT_MAX <= _Nleft; _Nleft -= _ISORT_MAX)
+		{	
+		_BidIt _Midend = _Mid;
+		std::advance(_Midend, (int)_ISORT_MAX);
+
+		_Insertion_sort(_Mid, _Midend);
+		_Mid = _Midend;
+		}
+	_Insertion_sort(_Mid, _Last);	
+
+	for (_Diff _Chunk = _ISORT_MAX; _Chunk < _Count; _Chunk *= 2)
+		{	
+		::stdext:: _Unchecked_chunked_merge(_First, _Last, _Tempbuf._Init(),
+			_Chunk, _Count);
+		::stdext:: _Unchecked_chunked_merge(_Tempbuf._First(), _Tempbuf._Last(), _First,
+			_Chunk *= 2, _Count);
+		}
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty> inline
+	void _Stable_sort(_BidIt _First, _BidIt _Last, _Diff _Count,
+		_Temp_iterator<_Ty>& _Tempbuf)
+	{	
+	if (_Count <= _ISORT_MAX)
+		_Insertion_sort(_First, _Last);	
+	else
+		{	
+		_Diff _Count2 = (_Count + 1) / 2;
+		_BidIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+
+		if (_Count2 <= _Tempbuf._Maxlen())
+			{	
+			_Buffered_merge_sort(_First, _Mid, _Count2, _Tempbuf);
+			_Buffered_merge_sort(_Mid, _Last, _Count - _Count2, _Tempbuf);
+			}
+		else
+			{	
+			_Stable_sort(_First, _Mid, _Count2, _Tempbuf);
+			_Stable_sort(_Mid, _Last, _Count - _Count2, _Tempbuf);
+			}
+
+		_Buffered_merge(_First, _Mid, _Last,
+			_Count2, _Count - _Count2, _Tempbuf);	
+		}
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty> inline
+	void _Stable_sort(_BidIt _First, _BidIt _Last, _Diff *, _Ty *)
+	{	
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+	_Temp_iterator<_Ty> _Tempbuf((_Count + 1) / 2);
+	_Stable_sort(_First, _Last, _Count, _Tempbuf);
+	}
+
+template<class _BidIt> inline
+	void stable_sort(_BidIt _First, _BidIt _Last)
+	{	
+	;
+	if (_First != _Last)
+		{
+		_Stable_sort(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dist_type(_First), _Val_type(_First));
+		}
+	}
+
+		
+template<class _BidIt,
+	class _OutIt,
+	class _Diff,
+	class _Pr> inline
+	void _Chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	for (_Diff _Chunk2 = _Chunk * 2; _Chunk2 <= _Count; _Count -= _Chunk2)
+		{	
+		_BidIt _Mid1 = _First;
+		std::advance(_Mid1, _Chunk);
+		_BidIt _Mid2 = _Mid1;
+		std::advance(_Mid2, _Chunk);
+
+		_Dest = ::stdext:: unchecked_merge(_First, _Mid1, _Mid1, _Mid2, _Dest, _Pred);
+		_First = _Mid2;
+		}
+
+	if (_Count <= _Chunk)
+		::stdext:: unchecked_copy(_First, _Last, _Dest);	
+	else
+		{	
+		_BidIt _Mid1 = _First;
+		std::advance(_Mid1, _Chunk);
+
+		::stdext:: unchecked_merge(_First, _Mid1, _Mid1, _Last, _Dest, _Pred);
+		}
+	}
+
+
+template<class _BidIt, class _OutIt, class _Diff, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	void _Chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+		_Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, _Pred, _Range_checked_iterator_tag());
+	}
+
+
+template<class _BidIt, class _OutIt, class _Diff, class _Pr>
+inline
+	void _Chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Pr _Pred)
+	{
+		_Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Buffered_merge_sort(_BidIt _First, _BidIt _Last, _Diff _Count,
+		_Temp_iterator<_Ty>& _Tempbuf, _Pr _Pred)
+	{	
+	_BidIt _Mid = _First;
+	for (_Diff _Nleft = _Count; _ISORT_MAX <= _Nleft; _Nleft -= _ISORT_MAX)
+		{	
+		_BidIt _Midn = _Mid;
+		std::advance(_Midn, (int)_ISORT_MAX);
+
+		_Insertion_sort(_Mid, _Midn, _Pred);
+		_Mid = _Midn;
+		}
+	_Insertion_sort(_Mid, _Last, _Pred);	
+
+	for (_Diff _Chunk = _ISORT_MAX; _Chunk < _Count; _Chunk *= 2)
+		{	
+		::stdext:: _Unchecked_chunked_merge(_First, _Last, _Tempbuf._Init(),
+			_Chunk, _Count, _Pred);
+		::stdext:: _Unchecked_chunked_merge(_Tempbuf._First(), _Tempbuf._Last(), _First,
+			_Chunk *= 2, _Count, _Pred);
+		}
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Stable_sort(_BidIt _First, _BidIt _Last, _Diff _Count,
+		_Temp_iterator<_Ty>& _Tempbuf, _Pr _Pred)
+	{	
+	if (_Count <= _ISORT_MAX)
+		_Insertion_sort(_First, _Last, _Pred);	
+	else
+		{	
+		_Diff _Count2 = (_Count + 1) / 2;
+		_BidIt _Mid = _First;
+		std::advance(_Mid, _Count2);
+
+		if (_Count2 <= _Tempbuf._Maxlen())
+			{	
+			_Buffered_merge_sort(_First, _Mid, _Count2, _Tempbuf, _Pred);
+			_Buffered_merge_sort(_Mid, _Last, _Count - _Count2,
+				_Tempbuf, _Pred);
+			}
+		else
+			{	
+			_Stable_sort(_First, _Mid, _Count2, _Tempbuf, _Pred);
+			_Stable_sort(_Mid, _Last, _Count - _Count2, _Tempbuf, _Pred);
+			}
+
+		_Buffered_merge(_First, _Mid, _Last,
+			_Count2, _Count - _Count2, _Tempbuf, _Pred);	
+		}
+	}
+
+template<class _BidIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	void _Stable_sort(_BidIt _First, _BidIt _Last, _Diff *, _Ty *, _Pr _Pred)
+	{	
+	_Diff _Count = 0;
+	_Distance(_First, _Last, _Count);
+	_Temp_iterator<_Ty> _Tempbuf((_Count + 1) / 2);
+	_Stable_sort(_First, _Last, _Count, _Tempbuf, _Pred);
+	}
+
+template<class _BidIt,
+	class _Pr> inline
+	void stable_sort(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	if (_First != _Last)
+		{
+		_Stable_sort(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last),
+			_Dist_type(_First), _Val_type(_First), _Pred);
+		}
+	}
+
+		
+template<class _RanIt,
+	class _Ty> inline
+	void _Partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Ty *)
+	{	
+	;
+	;
+	std::make_heap(_First, _Mid);
+
+	for (_RanIt _Next = _Mid; _Next < _Last; ++_Next)
+		if (((*_Next) < (*_First)))
+			_Pop_heap(_First, _Mid, _Next, _Ty(*_Next),
+				_Dist_type(_First));	
+	std::sort_heap(_First, _Mid);
+	}
+
+template<class _RanIt> inline
+	void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last)
+	{	
+	_Partial_sort(::std:: _Checked_base(_First), ::std:: _Checked_base(_Mid), ::std:: _Checked_base(_Last), _Val_type(_First));
+	}
+
+		
+template<class _RanIt,
+	class _Ty,
+	class _Pr> inline
+	void _Partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last,
+		_Pr _Pred, _Ty *)
+	{	
+	;
+	;
+	;
+	std::make_heap(_First, _Mid, _Pred);
+
+	for (_RanIt _Next = _Mid; _Next < _Last; ++_Next)
+		if (_Pred(*_Next, *_First))
+			_Pop_heap(_First, _Mid, _Next, _Ty(*_Next), _Pred,
+				_Dist_type(_First));	
+	std::sort_heap(_First, _Mid, _Pred);
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void partial_sort(_RanIt _First, _RanIt _Mid, _RanIt _Last, _Pr _Pred)
+	{	
+	_Partial_sort(::std:: _Checked_base(_First), ::std:: _Checked_base(_Mid), ::std:: _Checked_base(_Last), _Pred, _Val_type(_First));
+	}
+
+		
+template<class _InIt,
+	class _RanIt,
+	class _Diff,
+	class _Ty> inline
+	_RanIt _Partial_sort_copy(_InIt _First1, _InIt _Last1,
+		_RanIt _First2, _RanIt _Last2, _Diff *, _Ty *)
+	{	
+	;
+	;
+	_RanIt _Mid2 = _First2;
+	for (; _First1 != _Last1 && _Mid2 != _Last2; ++_First1, ++_Mid2)
+		*_Mid2 = *_First1;	
+	std::make_heap(_First2, _Mid2);
+
+	for (; _First1 != _Last1; ++_First1)
+		if (((*_First1) < (*_First2)))
+			_Adjust_heap(_First2, _Diff(0), _Diff(_Mid2 - _First2),
+				_Ty(*_First1));	
+
+	std::sort_heap(_First2, _Mid2);
+	return (_Mid2);
+	}
+
+template<class _InIt,
+	class _RanIt> inline
+	_RanIt partial_sort_copy(_InIt _First1, _InIt _Last1,
+		_RanIt _First2, _RanIt _Last2)
+	{	
+	if (_First1 != _Last1 && _First2 != _Last2)
+        	::std:: _Checked_assign_from_base(_First2, _Partial_sort_copy(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dist_type(_First2), _Val_type(_First1)));
+	return (_First2);
+	}
+
+		
+template<class _InIt,
+	class _RanIt,
+	class _Diff,
+	class _Ty,
+	class _Pr> inline
+	_RanIt _Partial_sort_copy(_InIt _First1, _InIt _Last1,
+		_RanIt _First2, _RanIt _Last2, _Pr _Pred, _Diff *, _Ty *)
+	{	
+	;
+	;
+	;
+	_RanIt _Mid2 = _First2;
+	for (; _First1 != _Last1 && _Mid2 != _Last2; ++_First1, ++_Mid2)
+		*_Mid2 = *_First1;	
+	std::make_heap(_First2, _Mid2, _Pred);
+
+	for (; _First1 != _Last1; ++_First1)
+		if (_Pred(*_First1, *_First2))
+			_Adjust_heap(_First2, _Diff(0), _Diff(_Mid2 - _First2),
+				_Ty(*_First1), _Pred);	
+
+	std::sort_heap(_First2, _Mid2, _Pred);
+	return (_Mid2);
+	}
+
+template<class _InIt,
+	class _RanIt,
+	class _Pr> inline
+	_RanIt partial_sort_copy(_InIt _First1, _InIt _Last1,
+		_RanIt _First2, _RanIt _Last2, _Pr _Pred)
+	{	
+	if (_First1 != _Last1 && _First2 != _Last2)
+		::std:: _Checked_assign_from_base(_First2, _Partial_sort_copy(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Pred, _Dist_type(_First2), _Val_type(_First1)));
+	return (_First2);
+	}
+
+		
+template<class _RanIt> inline
+	void _Nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last)
+	{	
+	;
+	for (; _ISORT_MAX < _Last - _First; )
+		{	
+		pair<_RanIt, _RanIt> _Mid =
+			_Unguarded_partition(_First, _Last);
+
+		if (_Mid.second <= _Nth)
+			_First = _Mid.second;
+		else if (_Mid.first <= _Nth)
+			return;	
+		else
+			_Last = _Mid.first;
+		}
+
+	_Insertion_sort(_First, _Last);	
+	}
+
+template<class _RanIt> inline
+	void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last)
+	{	
+	_Nth_element(::std:: _Checked_base(_First), ::std:: _Checked_base(_Nth), ::std:: _Checked_base(_Last));
+	}
+
+		
+template<class _RanIt,
+	class _Pr> inline
+	void _Nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	for (; _ISORT_MAX < _Last - _First; )
+		{	
+		pair<_RanIt, _RanIt> _Mid =
+			_Unguarded_partition(_First, _Last, _Pred);
+
+		if (_Mid.second <= _Nth)
+			_First = _Mid.second;
+		else if (_Mid.first <= _Nth)
+			return;	
+		else
+			_Last = _Mid.first;
+		}
+
+	_Insertion_sort(_First, _Last, _Pred);	
+	}
+
+template<class _RanIt,
+	class _Pr> inline
+	void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Last, _Pr _Pred)
+	{	
+	_Nth_element(::std:: _Checked_base(_First), ::std:: _Checked_base(_Nth), ::std:: _Checked_base(_Last), _Pred);
+	}
+
+		
+template<class _InIt1,
+	class _InIt2> inline
+	bool _Includes(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2)
+	{	
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (((*_First2) < (*_First1)))
+			return (false);
+		else if (*_First1 < *_First2)
+			++_First1;
+		else
+			++_First1, ++_First2;
+	return (_First2 == _Last2);
+	}
+
+template<class _InIt1,
+	class _InIt2> inline
+	bool includes(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2)
+	{	
+	return _Includes(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _Pr> inline
+	bool _Includes(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _Pr _Pred)
+	{	
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (_Pred(*_First2, *_First1))
+			return (false);
+		else if (_Pred(*_First1, *_First2))
+			++_First1;
+		else
+			++_First1, ++_First2;
+	return (_First2 == _Last2);
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _Pr> inline
+	bool includes(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _Pr _Pred)
+	{	
+	return _Includes(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Pred);
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt _Set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (((*_First1) < (*_First2)))
+			*_Dest++ = *_First1, ++_First1;
+		else if (*_First2 < *_First1)
+			*_Dest++ = *_First2, ++_First2;
+		else
+			*_Dest++ = *_First1, ++_First1, ++_First2;
+	_Dest = ::stdext:: unchecked_copy(_First1, _Last1, _Dest);
+	return (::stdext:: unchecked_copy(_First2, _Last2, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Unchecked_iterator_tag)
+	{
+	return _Set_union(_First1, _Last1, _First2, _Last2, _Dest, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+	return _Set_union(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (_Pred(*_First1, *_First2))
+			*_Dest++ = *_First1, ++_First1;
+		else if (_Pred(*_First2, *_First1))
+			*_Dest++ = *_First2, ++_First2;
+		else
+			*_Dest++ = *_First1, ++_First1, ++_First2;
+	_Dest = ::stdext:: unchecked_copy(_First1, _Last1, _Dest);
+	return (::stdext:: unchecked_copy(_First2, _Last2, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+	return _Set_union(_First1, _Last1, _First2, _Last2, _Dest, _Pred, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+	return _Set_union(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt _Set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (((*_First1) < (*_First2)))
+			++_First1;
+		else if (*_First2 < *_First1)
+			++_First2;
+		else
+			*_Dest++ = *_First1++, ++_First2;
+	return (_Dest);
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Unchecked_iterator_tag)
+	{
+	return _Set_intersection(_First1, _Last1, _First2, _Last2, _Dest, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+	return _Set_intersection(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (_Pred(*_First1, *_First2))
+			++_First1;
+		else if (_Pred(*_First2, *_First1))
+			++_First2;
+		else
+			*_Dest++ = *_First1++, ++_First2;
+	return (_Dest);
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+	return _Set_intersection(_First1, _Last1, _First2, _Last2, _Dest, _Pred, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+	return _Set_intersection(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt _Set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (((*_First1) < (*_First2)))
+			*_Dest++ = *_First1, ++_First1;
+		else if (*_First2 < *_First1)
+			++_First2;
+		else
+			++_First1, ++_First2;
+	return (::stdext:: unchecked_copy(_First1, _Last1, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Unchecked_iterator_tag)
+	{
+	return _Set_difference(_First1, _Last1, _First2, _Last2, _Dest, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+	return _Set_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (_Pred(*_First1, *_First2))
+			*_Dest++ = *_First1, ++_First1;
+		else if (_Pred(*_First2, *_First1))
+			++_First2;
+		else
+			++_First1, ++_First2;
+	return (::stdext:: unchecked_copy(_First1, _Last1, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+	return _Set_difference(_First1, _Last1, _First2, _Last2, _Dest, _Pred, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+	return _Set_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt _Set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (((*_First1) < (*_First2)))
+			*_Dest++ = *_First1, ++_First1;
+		else if (*_First2 < *_First1)
+			*_Dest++ = *_First2, ++_First2;
+		else
+			++_First1, ++_First2;
+	_Dest = ::stdext:: unchecked_copy(_First1, _Last1, _Dest);
+	return (::stdext:: unchecked_copy(_First2, _Last2, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Unchecked_iterator_tag)
+	{
+	return _Set_symmetric_difference(_First1, _Last1, _First2, _Last2, _Dest, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+	return _Set_symmetric_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt _Set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Range_checked_iterator_tag)
+	{	
+	;
+	;
+	;
+	for (; _First1 != _Last1 && _First2 != _Last2; )
+		if (_Pred(*_First1, *_First2))
+			*_Dest++ = *_First1, ++_First1;
+		else if (_Pred(*_First2, *_First1))
+			*_Dest++ = *_First2, ++_First2;
+		else
+			++_First1, ++_First2;
+	_Dest = ::stdext:: unchecked_copy(_First1, _Last1, _Dest);
+	return (::stdext:: unchecked_copy(_First2, _Last2, _Dest));
+	}
+
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Pr>
+inline
+__declspec(deprecated("You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library"))
+	_OutIt _Set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred, _Unchecked_iterator_tag)
+	{
+	return _Set_symmetric_difference(_First1, _Last1, _First2, _Last2, _Dest, _Pred, _Range_checked_iterator_tag());
+	}
+
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+	return _Set_symmetric_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1),
+		::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2),
+		_Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+		
+template<class _FwdIt> inline
+	_FwdIt _Max_element(_FwdIt _First, _FwdIt _Last)
+	{	
+	;
+	_FwdIt _Found = _First;
+	if (_First != _Last)
+		for (; ++_First != _Last; )
+			if (((*_Found) < (*_First)))
+				_Found = _First;
+	return (_Found);
+	}
+
+template<class _FwdIt> inline
+	_FwdIt max_element(_FwdIt _First, _FwdIt _Last)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Max_element(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last)));
+	return (_First);
+	}
+
+		
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt _Max_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	_FwdIt _Found = _First;
+	if (_First != _Last)
+		for (; ++_First != _Last; )
+			if (_Pred(*_Found, *_First))
+				_Found = _First;
+	return (_Found);
+	}
+
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt max_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Max_element(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred));
+	return (_First);
+	}
+
+		
+template<class _FwdIt> inline
+	_FwdIt _Min_element(_FwdIt _First, _FwdIt _Last)
+	{	
+	;
+	_FwdIt _Found = _First;
+	if (_First != _Last)
+		for (; ++_First != _Last; )
+			if (((*_First) < (*_Found)))
+				_Found = _First;
+	return (_Found);
+	}
+
+template<class _FwdIt> inline
+	_FwdIt min_element(_FwdIt _First, _FwdIt _Last)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Min_element(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last)));
+	return (_First);
+	}
+
+		
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt _Min_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	_FwdIt _Found = _First;
+	if (_First != _Last)
+		for (; ++_First != _Last; )
+			if (_Pred(*_First, *_Found))
+				_Found = _First;
+	return (_Found);
+	}
+
+template<class _FwdIt,
+	class _Pr> inline
+	_FwdIt min_element(_FwdIt _First, _FwdIt _Last, _Pr _Pred)
+	{	
+	::std:: _Checked_assign_from_base(_First, _Min_element(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred));
+	return (_First);
+	}
+
+		
+template<class _BidIt> inline
+	bool _Next_permutation(_BidIt _First, _BidIt _Last)
+	{	
+	;
+	_BidIt _Next = _Last;
+	if (_First == _Last || _First == --_Next)
+		return (false);
+
+	for (; ; )
+		{	
+		_BidIt _Next1 = _Next;
+		if (((*--_Next) < (*_Next1)))
+			{	
+			_BidIt _Mid = _Last;
+			for (; !((*_Next) < (*--_Mid)); )
+				;
+			std::iter_swap(_Next, _Mid);
+			std::reverse(_Next1, _Last);
+			return (true);
+			}
+
+		if (_Next == _First)
+			{	
+			std::reverse(_First, _Last);
+			return (false);
+			}
+		}
+	}
+
+template<class _BidIt> inline
+	bool next_permutation(_BidIt _First, _BidIt _Last)
+	{	
+	return _Next_permutation(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last));
+	}
+
+		
+template<class _BidIt,
+	class _Pr> inline
+	bool _Next_permutation(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	_BidIt _Next = _Last;
+	if (_First == _Last || _First == --_Next)
+		return (false);
+
+	for (; ; )
+		{	
+		_BidIt _Next1 = _Next;
+		if (_Pred(*--_Next, *_Next1))
+			{	
+			_BidIt _Mid = _Last;
+			for (; !_Pred(*_Next, *--_Mid); )
+				;
+			std::iter_swap(_Next, _Mid);
+			std::reverse(_Next1, _Last);
+			return (true);
+			}
+
+		if (_Next == _First)
+			{	
+			std::reverse(_First, _Last);
+			return (false);
+			}
+		}
+	}
+
+template<class _BidIt,
+	class _Pr> inline
+	bool next_permutation(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	return _Next_permutation(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred);
+	}
+
+		
+template<class _BidIt> inline
+	bool _Prev_permutation(_BidIt _First, _BidIt _Last)
+	{	
+	;
+	_BidIt _Next = _Last;
+	if (_First == _Last || _First == --_Next)
+		return (false);
+	for (; ; )
+		{	
+		_BidIt _Next1 = _Next;
+		if (((*_Next1) < (*--_Next)))
+			{	
+			_BidIt _Mid = _Last;
+			for (; !((*--_Mid) < (*_Next)); )
+				;
+			std::iter_swap(_Next, _Mid);
+			std::reverse(_Next1, _Last);
+			return (true);
+			}
+
+		if (_Next == _First)
+			{	
+			std::reverse(_First, _Last);
+			return (false);
+			}
+		}
+	}
+
+template<class _BidIt> inline
+	bool prev_permutation(_BidIt _First, _BidIt _Last)
+	{	
+	return _Prev_permutation(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last));
+	}
+
+		
+template<class _BidIt,
+	class _Pr> inline
+	bool _Prev_permutation(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	;
+	;
+	_BidIt _Next = _Last;
+	if (_First == _Last || _First == --_Next)
+		return (false);
+
+	for (; ; )
+		{	
+		_BidIt _Next1 = _Next;
+		if (_Pred(*_Next1, *--_Next))
+			{	
+			_BidIt _Mid = _Last;
+			for (; !_Pred(*--_Mid, *_Next); )
+				;
+			std::iter_swap(_Next, _Mid);
+			std::reverse(_Next1, _Last);
+			return (true);
+			}
+
+		if (_Next == _First)
+			{	
+			std::reverse(_First, _Last);
+			return (false);
+			}
+		}
+	}
+
+template<class _BidIt,
+	class _Pr> inline
+	bool prev_permutation(_BidIt _First, _BidIt _Last, _Pr _Pred)
+	{	
+	return _Prev_permutation(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Pred);
+	}
+
+}
+
+namespace stdext {
+
+template<class _InIt, class _OutIt, class _Fn1>
+inline
+	_OutIt unchecked_transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func)
+	{
+		return ::std:: _Transform(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Func,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt, class _OutIt, class _Fn1>
+inline
+	_OutIt checked_transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func)
+	{
+		return ::std:: _Transform(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Func,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2>
+inline
+	_OutIt unchecked_transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func)
+	{
+		return ::std:: _Transform(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Dest, _Func,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Iter_random(_First1, _Dest), 
+			::std:: _Range_checked_iterator_tag(), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1, class _InIt2, class _OutIt, class _Fn2>
+inline
+	_OutIt checked_transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2,
+		_OutIt _Dest, _Fn2 _Func)
+	{
+		return ::std:: _Transform(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2, _Dest, _Func,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Iter_random(_First1, _Dest), 
+			::std:: _Checked_cat(_First2), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _FwdIt1, class _FwdIt2>
+inline
+	_FwdIt2 unchecked_swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2)
+	{
+		return ::std:: _Swap_ranges(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _FwdIt1, class _FwdIt2>
+inline
+	_FwdIt2 checked_swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2)
+	{
+		return ::std:: _Swap_ranges(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), _First2,
+			::std:: _Iter_random(_First1, _First2), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt unchecked_replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		const _Ty& _Oldval, const _Ty& _Newval)
+	{	
+		return ::std:: _Replace_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Oldval, _Newval,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt checked_replace_copy(_InIt _First, _InIt _Last, _OutIt _Dest,
+		const _Ty& _Oldval, const _Ty& _Newval)
+	{	
+		return ::std:: _Replace_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Oldval, _Newval,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr,
+	class _Ty> inline
+	_OutIt unchecked_replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_Pr _Pred, const _Ty& _Val)
+	{	
+		return ::std:: _Replace_copy_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred, _Val,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr,
+	class _Ty> inline
+	_OutIt checked_replace_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest,
+		_Pr _Pred, const _Ty& _Val)
+	{	
+		return ::std:: _Replace_copy_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred, _Val,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _OutIt,
+	class _Diff,
+	class _Fn0> inline
+	void unchecked_generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func)
+	{	
+		::std:: _Generate_n(_Dest, _Count, _Func,
+			_Iter_cat(_Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _OutIt,
+	class _Diff,
+	class _Fn0> inline
+	void checked_generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func)
+	{	
+		::std:: _Generate_n(_Dest, _Count, _Func,
+			_Iter_cat(_Dest),::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt unchecked_remove_copy(_InIt _First, _InIt _Last,
+		_OutIt _Dest, const _Ty& _Val)
+	{	
+		return ::std:: _Remove_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Val,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Ty> inline
+	_OutIt checked_remove_copy(_InIt _First, _InIt _Last,
+		_OutIt _Dest, const _Ty& _Val)
+	{	
+		return ::std:: _Remove_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Val,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_remove_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Remove_copy_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_remove_copy_if(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Remove_copy_if(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt unchecked_unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+	return (_First == _Last ? _Dest :
+		::std:: _Unique_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			_Iter_cat(_First), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _OutIt> inline
+	_OutIt checked_unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest)
+	{	
+	return (_First == _Last ? _Dest :
+		::std:: _Unique_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			_Iter_cat(_First), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)
+	{	
+	return (_First == _Last ? _Dest
+		: ::std:: _Unique_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred,
+			_Iter_cat(_First), ::std:: _Range_checked_iterator_tag()));
+	}
+
+template<class _InIt,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_unique_copy(_InIt _First, _InIt _Last, _OutIt _Dest, _Pr _Pred)
+	{	
+	return (_First == _Last ? _Dest
+		: ::std:: _Unique_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest, _Pred,
+			_Iter_cat(_First), ::std:: _Checked_cat(_Dest)));
+	}
+
+template<class _BidIt,
+	class _OutIt> inline
+	_OutIt unchecked_reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest)
+	{	
+		return ::std:: _Reverse_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _BidIt,
+	class _OutIt> inline
+	_OutIt checked_reverse_copy(_BidIt _First, _BidIt _Last, _OutIt _Dest)
+	{	
+		return ::std:: _Reverse_copy(::std:: _Checked_base(_First), ::std:: _Checked_base(_Last), _Dest,
+			::std:: _Iter_random(_First, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _FwdIt,
+	class _OutIt> inline
+	_OutIt unchecked_rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last, _OutIt _Dest)
+	{	
+		return ::std:: _Rotate_copy(_First, _Mid, _Last, _Dest, ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _FwdIt,
+	class _OutIt> inline
+	_OutIt checked_rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last, _OutIt _Dest)
+	{	
+		return ::std:: _Rotate_copy(_First, _Mid, _Last, _Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt unchecked_merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Merge(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Iter_random(_First1, _First2, _Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt checked_merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Merge(_First1, _Last1, _First2, _Last2, _Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Merge(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Iter_random(_First1, _First2,_Dest), ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_merge(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Merge(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Iter_random(_First1, _First2, _Dest), ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt1, class _BidIt2, class _BidIt3>
+inline
+	_BidIt3 _Unchecked_merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest)
+	{
+		return ::std:: _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _BidIt1, class _BidIt2, class _BidIt3>
+inline
+	_BidIt3 _Checked_merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest)
+	{
+		return ::std:: _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt1, class _BidIt2, class _BidIt3, class _Pr>
+inline
+	_BidIt3 _Unchecked_merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Pr _Pred)
+	{
+		return ::std:: _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, _Pred, ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _BidIt1, class _BidIt2, class _BidIt3, class _Pr>
+inline
+	_BidIt3 _Checked_merge_backward(_BidIt1 _First1, _BidIt1 _Last1,
+		_BidIt2 _First2, _BidIt2 _Last2, _BidIt3 _Dest, _Pr _Pred)
+	{
+		return ::std:: _Merge_backward(_First1, _Last1, _First2, _Last2, _Dest, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt, class _OutIt, class _Diff>
+inline
+	void _Unchecked_chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count)
+	{
+		::std:: _Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _BidIt, class _OutIt, class _Diff>
+inline
+	void _Checked_chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count)
+	{
+		::std:: _Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _BidIt, class _OutIt, class _Diff, class _Pr>
+inline
+	void _Unchecked_chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Pr _Pred)
+	{
+		::std:: _Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, _Pred, ::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _BidIt, class _OutIt, class _Diff, class _Pr>
+inline
+	void _Checked_chunked_merge(_BidIt _First, _BidIt _Last, _OutIt _Dest,
+		_Diff _Chunk, _Diff _Count, _Pr _Pred)
+	{
+		::std:: _Chunked_merge(_First, _Last, _Dest, _Chunk, _Count, _Pred, ::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt unchecked_set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_union(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt checked_set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_union(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_union(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_set_union(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_union(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt unchecked_set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_intersection(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt checked_set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_intersection(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_intersection(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_set_intersection(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_intersection(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt unchecked_set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt checked_set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_set_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt unchecked_set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_symmetric_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt> inline
+	_OutIt checked_set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest)
+	{	
+		return ::std:: _Set_symmetric_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest,
+			::std:: _Checked_cat(_Dest));
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt unchecked_set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_symmetric_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Range_checked_iterator_tag());
+	}
+
+template<class _InIt1,
+	class _InIt2,
+	class _OutIt,
+	class _Pr> inline
+	_OutIt checked_set_symmetric_difference(_InIt1 _First1, _InIt1 _Last1,
+		_InIt2 _First2, _InIt2 _Last2, _OutIt _Dest, _Pr _Pred)
+	{	
+		return ::std:: _Set_symmetric_difference(::std:: _Checked_base(_First1), ::std:: _Checked_base(_Last1), ::std:: _Checked_base(_First2), ::std:: _Checked_base(_Last2), _Dest, _Pred,
+			::std:: _Checked_cat(_Dest));
+	}
+
+}
+
+
+  #pragma warning(default: 4244)
+
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma once
+
+
+
+
+
+
+
+#pragma pack(push,8)
+#pragma warning(push,3)
+
+ #pragma warning(disable: 4244)
+
+
+namespace std {
+template<class _Ty,
+	class _Ax = allocator<_Ty> >
+	class vector;
+
+		
+template<class _Ty,
+	class _Alloc>
+	class _Vector_const_iterator
+		: public _Ranit<_Ty, typename _Alloc::difference_type,
+			typename _Alloc::const_pointer, typename _Alloc::const_reference>
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3
->
-class function<
-      R ( A0 , A1 , A2 , A3)
-    , 4
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3)
-        , 4
-    > abstract_function_type;
+	typedef _Vector_const_iterator<_Ty, _Alloc> _Myt;
+	typedef vector<_Ty, _Alloc> _Myvec;
+	typedef typename _Alloc::pointer _Tptr;
+
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef typename _Alloc::difference_type difference_type;
+	typedef typename _Alloc::const_pointer pointer;
+	typedef typename _Alloc::const_reference reference;
+
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+
+
+	typedef pointer _Checked_iterator_base_type;
+
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		return _Myptr;
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		this->_Myptr = const_cast<_Tptr>(_Base);
+	}
+
+
+	
+	
+	
+	
+	typedef _Tptr _Inner_type;
+
+	_Vector_const_iterator()
+		{	
+		_Myptr = 0;
+		}
+
+ 
+
+
+
+
+
+
+
+
+	_Vector_const_iterator(_Tptr _Ptr, const _Container_base *_Pvector)
+		{	
+		{ if (!(_Pvector != 0 && ((_Myvec *)_Pvector)->_Myfirst <= _Ptr && _Ptr <= ((_Myvec *)_Pvector)->_Mylast)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		this->_Mycont = _Pvector;
+		_Myptr = _Ptr;
+		}
+
+ 
+
+
+
+
+
+
+	reference operator*() const
+		{	
+
+ 
+
+
+
+
+
+
+
+
+ 		{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		{ if (!(_Myptr < ((_Myvec *)(this->_Mycont))->_Mylast)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (*_Myptr);
+		}
+
+	pointer operator->() const
+		{	
+		return (&**this);
+		}
+
+	_Myt& operator++()
+		{	
+		{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		{ if (!(_Myptr < ((_Myvec *)(this->_Mycont))->_Mylast)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		++_Myptr;
+		return (*this);
+		}
+
+	_Myt operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	_Myt& operator--()
+		{	
+		{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		{ if (!(_Myptr > ((_Myvec *)(this->_Mycont))->_Myfirst)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		--_Myptr;
+		return (*this);
+		}
+
+	_Myt operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		--*this;
+		return (_Tmp);
+		}
+
+	_Myt& operator+=(difference_type _Off)
+		{	
+		{ if (!(this->_Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		{ if (!(_Myptr + _Off <= ((_Myvec *)(this->_Mycont))->_Mylast && _Myptr + _Off >= ((_Myvec *)(this->_Mycont))->_Myfirst)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		_Myptr += _Off;
+		return (*this);
+		}
+
+	_Myt operator+(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Myt& operator-=(difference_type _Off)
+		{	
+		return (*this += -_Off);
+		}
+
+	_Myt operator-(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	difference_type operator-(const _Myt& _Right) const
+		{	
+
+ 
+
+
+		{ if (!(this->_Mycont != 0 && this->_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (_Myptr - _Right._Myptr);
+		}
+
+	reference operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+
+	bool operator==(const _Myt& _Right) const
+		{	
+
+ 
+
+
+		{ if (!(this->_Mycont != 0 && this->_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (_Myptr == _Right._Myptr);
+		}
+
+	bool operator!=(const _Myt& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+	bool operator<(const _Myt& _Right) const
+		{	
+
+ 
+
+
+		{ if (!(this->_Mycont != 0 && this->_Mycont == _Right._Mycont)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (_Myptr < _Right._Myptr);
+		}
+
+	bool operator>(const _Myt& _Right) const
+		{	
+		return (_Right < *this);
+		}
+
+	bool operator<=(const _Myt& _Right) const
+		{	
+		return (!(_Right < *this));
+		}
+
+	bool operator>=(const _Myt& _Right) const
+		{	
+		return (!(*this < _Right));
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+	static void _Xlen()
+		{	
+		throw length_error("vector<T> too long");
+		}
+
+	static void _Xran()
+		{	
+		throw out_of_range("invalid vector<T> subscript");
+		}
+
+	static void _Xinvarg()
+		{	
+		throw invalid_argument("invalid vector<T> argument");
+		}
+
+	_Tptr _Myptr;	
+	};
+
+template<class _Ty,
+	class _Alloc> inline
+	_Vector_const_iterator<_Ty, _Alloc> operator+(
+		typename _Vector_const_iterator<_Ty, _Alloc>::difference_type _Off,
+		_Vector_const_iterator<_Ty, _Alloc> _Next)
+	{	
+	return (_Next += _Off);
+	}
+
+		
+template<class _Ty,
+	class _Alloc>
+	class _Vector_iterator
+		: public _Vector_const_iterator<_Ty, _Alloc>
+		{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); } inline R operator()() { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)(); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-class function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 0
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3 , A4)
-        , 0
-    > abstract_function_type;
+	typedef _Vector_iterator<_Ty, _Alloc> _Myt;
+	typedef _Vector_const_iterator<_Ty, _Alloc> _Mybase;
+
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Ty value_type;
+	typedef typename _Alloc::difference_type difference_type;
+	typedef typename _Alloc::pointer pointer;
+	typedef typename _Alloc::reference reference;
+
+
+	typedef pointer _Checked_iterator_base_type;
+
+	_Checked_iterator_base_type _Checked_iterator_base() const
+	{
+		return this->_Myptr;
+	}
+
+	void _Checked_iterator_assign_from_base(_Checked_iterator_base_type _Base)
+	{
+		this->_Myptr = _Base;
+	}
+
+
+	_Vector_iterator()
+		{	
+		}
+
+ 
+
+
+
+
+
+
+	_Vector_iterator(pointer _Ptr, const _Container_base *_Pvector)
+		: _Mybase(_Ptr, _Pvector)
+		{	
+		}
+
+ 
+
+
+
+
+
+
+	reference operator*() const
+		{	
+		return ((reference)**(_Mybase *)this);
+		}
+
+	pointer operator->() const
+		{	
+		return (&**this);
+		}
+
+	_Myt& operator++()
+		{	
+		++(*(_Mybase *)this);
+		return (*this);
+		}
+
+	_Myt operator++(int)
+		{	
+		_Myt _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	_Myt& operator--()
+		{	
+		--(*(_Mybase *)this);
+		return (*this);
+		}
+
+	_Myt operator--(int)
+		{	
+		_Myt _Tmp = *this;
+		--*this;
+		return (_Tmp);
+		}
+
+	_Myt& operator+=(difference_type _Off)
+		{	
+		(*(_Mybase *)this) += _Off;
+		return (*this);
+		}
+
+	_Myt operator+(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Myt& operator-=(difference_type _Off)
+		{	
+		return (*this += -_Off);
+		}
+
+	_Myt operator-(difference_type _Off) const
+		{	
+		_Myt _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	difference_type operator-(const _Mybase& _Right) const
+		{	
+		return (*(_Mybase *)this - _Right);
+		}
+
+	reference operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+	};
+
+template<class _Ty,
+	class _Alloc> inline
+	_Vector_iterator<_Ty, _Alloc> operator+(
+		typename _Vector_iterator<_Ty, _Alloc>::difference_type _Off,
+		_Vector_iterator<_Ty, _Alloc> _Next)
+	{	
+	return (_Next += _Off);
+	}
+
+		
+template<class _Ty,
+	class _Alloc>
+	class _Vector_val
+		: public _Container_base
+	{	
+protected:
+	_Vector_val(_Alloc _Al = _Alloc())
+		: _Alval(_Al)
+		{	
+		}
+
+	typedef typename _Alloc::template
+		rebind<_Ty>::other _Alty;
+
+	_Alty _Alval;	
+	};
+
+		
+template<class _Ty,
+	class _Ax>
+	class vector
+		: public _Vector_val<_Ty, _Ax>
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3 , a4); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-class function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 1
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3 , A4)
-        , 1
-    > abstract_function_type;
+	typedef vector<_Ty, _Ax> _Myt;
+	typedef _Vector_val<_Ty, _Ax> _Mybase;
+	typedef typename _Mybase::_Alty _Alloc;
+	typedef _Alloc allocator_type;
+	typedef typename _Alloc::size_type size_type;
+	typedef typename _Alloc::difference_type _Dift;
+	typedef _Dift difference_type;
+	typedef typename _Alloc::pointer _Tptr;
+	typedef typename _Alloc::const_pointer _Ctptr;
+	typedef _Tptr pointer;
+	typedef _Ctptr const_pointer;
+	typedef typename _Alloc::reference _Reft;
+	typedef _Reft reference;
+	typedef typename _Alloc::const_reference const_reference;
+	typedef typename _Alloc::value_type value_type;
+
+  
+
+	typedef _Vector_iterator<_Ty, _Alloc> iterator;
+	typedef _Vector_const_iterator<_Ty, _Alloc> const_iterator;
+
+
+	friend class _Vector_const_iterator<_Ty, _Alloc>;
+
+	typedef std::reverse_iterator<iterator> reverse_iterator;
+	typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+	vector()
+		: _Mybase()
+		{	
+		_Buy(0);
+		}
+
+	explicit vector(const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Buy(0);
+		}
+
+	explicit vector(size_type _Count)
+		: _Mybase()
+		{	
+		_Construct_n(_Count, _Ty());
+		}
+
+	vector(size_type _Count, const _Ty& _Val)
+		: _Mybase()
+		{	
+		_Construct_n(_Count, _Val);
+		}
+
+	vector(size_type _Count, const _Ty& _Val, const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Construct_n(_Count, _Val);
+		}
+
+	vector(const _Myt& _Right)
+		: _Mybase(_Right._Alval)
+		{	
+		if (_Buy(_Right.size()))
+			try {
+			_Mylast = _Ucopy(_Right.begin(), _Right.end(), _Myfirst);
+			} catch (...) {
+			_Tidy();
+			throw;
+			}
+		}
+
+	template<class _Iter>
+		vector(_Iter _First, _Iter _Last)
+		: _Mybase()
+		{	
+		_Construct(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		vector(_Iter _First, _Iter _Last, const _Alloc& _Al)
+		: _Mybase(_Al)
+		{	
+		_Construct(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		void _Construct(_Iter _Count, _Iter _Val, _Int_iterator_tag)
+		{	
+		size_type _Size = (size_type)_Count;
+		_Construct_n(_Size, (_Ty)_Val);
+		}
+
+	template<class _Iter>
+		void _Construct(_Iter _First,
+			_Iter _Last, input_iterator_tag)
+		{	
+		_Buy(0);
+		try {
+		insert(begin(), _First, _Last);
+		} catch (...) {
+		_Tidy();
+		throw;
+		}
+		}
+
+	void _Construct_n(size_type _Count, const _Ty& _Val)
+		{	
+		if (_Buy(_Count))
+			{	
+			try {
+			_Mylast = _Ufill(_Myfirst, _Count, _Val);
+			} catch (...) {
+			_Tidy();
+			throw;
+			}
+			}
+		}
+
+	~vector()
+		{	
+		_Tidy();
+		}
+
+	_Myt& operator=(const _Myt& _Right)
+		{	
+		if (this != &_Right)
+			{	
+
+ 
+
+
+
+			if (_Right.size() == 0)
+				clear();	
+			else if (_Right.size() <= size())
+				{	
+				pointer _Ptr = ::stdext:: unchecked_copy(_Right._Myfirst, _Right._Mylast,
+					_Myfirst);	
+				_Destroy(_Ptr, _Mylast);	
+				_Mylast = _Myfirst + _Right.size();
+				}
+			else if (_Right.size() <= capacity())
+				{	
+				pointer _Ptr = _Right._Myfirst + size();
+				::stdext:: unchecked_copy(_Right._Myfirst, _Ptr, _Myfirst);
+				_Mylast = _Ucopy(_Ptr, _Right._Mylast, _Mylast);
+				}
+			else
+				{	
+				if (_Myfirst != 0)
+					{	
+					_Destroy(_Myfirst, _Mylast);
+					this->_Alval.deallocate(_Myfirst, _Myend - _Myfirst);
+					}
+				if (_Buy(_Right.size()))
+					_Mylast = _Ucopy(_Right._Myfirst, _Right._Mylast,
+						_Myfirst);
+				}
+			}
+		return (*this);
+		}
+
+	void reserve(size_type _Count)
+		{	
+		if (max_size() < _Count)
+			_Xlen();	
+		else if (capacity() < _Count)
+			{	
+			pointer _Ptr = this->_Alval.allocate(_Count);
+
+			try {
+			_Umove(begin(), end(), _Ptr);
+			} catch (...) {
+			this->_Alval.deallocate(_Ptr, _Count);
+			throw;
+			}
+
+			size_type _Size = size();
+			if (_Myfirst != 0)
+				{	
+				_Destroy(_Myfirst, _Mylast);
+				this->_Alval.deallocate(_Myfirst, _Myend - _Myfirst);
+				}
+
+ 
+
+
+
+			_Myend = _Ptr + _Count;
+			_Mylast = _Ptr + _Size;
+			_Myfirst = _Ptr;
+			}
+		}
+
+	size_type capacity() const
+		{	
+		return (_Myfirst == 0 ? 0 : _Myend - _Myfirst);
+		}
+
+ 
+	iterator begin()
+		{	
+		return (iterator(_Myfirst, this));
+		}
+
+	const_iterator begin() const
+		{	
+		return (const_iterator(_Myfirst, this));
+		}
+
+	iterator end()
+		{	
+		return (iterator(_Mylast, this));
+		}
+
+	const_iterator end() const
+		{	
+		return (const_iterator(_Mylast, this));
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	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()));
+		}
+
+	void resize(size_type _Newsize)
+		{	
+		resize(_Newsize, _Ty());
+		}
+
+	void resize(size_type _Newsize, _Ty _Val)
+		{	
+		if (size() < _Newsize)
+			_Insert_n(end(), _Newsize - size(), _Val);
+		else if (_Newsize < size())
+			erase(begin() + _Newsize, end());
+		}
+
+	size_type size() const
+		{	
+		return (_Myfirst == 0 ? 0 : _Mylast - _Myfirst);
+		}
+
+	size_type max_size() const
+		{	
+		return (this->_Alval.max_size());
+		}
+
+	bool empty() const
+		{	
+		return (size() == 0);
+		}
+
+	_Alloc get_allocator() const
+		{	
+		return (this->_Alval);
+		}
+
+	const_reference at(size_type _Pos) const
+		{	
+		if (size() <= _Pos)
+			_Xran();
+		return (*(begin() + _Pos));
+		}
+
+	reference at(size_type _Pos)
+		{	
+		if (size() <= _Pos)
+			_Xran();
+		return (*(begin() + _Pos));
+		}
+
+	const_reference operator[](size_type _Pos) const
+		{	
+
+ 
+
+
+
+
+
+
+		{ if (!(_Pos < size())) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+
+		return (*(_Myfirst + _Pos));
+		}
+
+	reference operator[](size_type _Pos)
+		{	
+
+ 
+
+
+
+
+
+
+		{ if (!(_Pos < size())) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+
+		return (*(_Myfirst + _Pos));
+		}
+
+	reference front()
+		{	
+		return (*begin());
+		}
+
+	const_reference front() const
+		{	
+		return (*begin());
+		}
+
+	reference back()
+		{	
+		return (*(end() - 1));
+		}
+
+	const_reference back() const
+		{	
+		return (*(end() - 1));
+		}
+
+	void push_back(const _Ty& _Val)
+		{	
+		if (size() < capacity())
+
+ 
+
+
+
+
+
+
+			_Mylast = _Ufill(_Mylast, 1, _Val);
+ 
+
+		else
+			insert(end(), _Val);
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+	void pop_back()
+		{	
+		if (!empty())
+			{	
+			_Destroy(_Mylast - 1, _Mylast);
+			--_Mylast;
+			}
+		}
+ 
+
+	template<class _Iter>
+		void assign(_Iter _First, _Iter _Last)
+		{	
+		_Assign(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		void _Assign(_Iter _Count, _Iter _Val, _Int_iterator_tag)
+		{	
+		_Assign_n((size_type)_Count, (_Ty)_Val);
+		}
+
+	template<class _Iter>
+		void _Assign(_Iter _First, _Iter _Last, input_iterator_tag)
+		{	
+		erase(begin(), end());
+		insert(begin(), _First, _Last);
+		}
+
+	void assign(size_type _Count, const _Ty& _Val)
+		{	
+		_Assign_n(_Count, _Val);
+		}
+
+	iterator insert(iterator _Where, const _Ty& _Val)
+		{	
+		size_type _Off = size() == 0 ? 0 : _Where - begin();
+		_Insert_n(_Where, (size_type)1, _Val);
+		return (begin() + _Off);
+		}
+
+	void insert(iterator _Where, size_type _Count, const _Ty& _Val)
+		{	
+		_Insert_n(_Where, _Count, _Val);
+		}
+
+	template<class _Iter>
+		void insert(iterator _Where, _Iter _First, _Iter _Last)
+		{	
+		_Insert(_Where, _First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		void _Insert(iterator _Where, _Iter _First, _Iter _Last,
+			_Int_iterator_tag)
+		{	
+		_Insert_n(_Where, (size_type)_First, (_Ty)_Last);
+		}
+
+	template<class _Iter>
+		void _Insert(iterator _Where, _Iter _First, _Iter _Last,
+			input_iterator_tag)
+		{	
+		for (; _First != _Last; ++_First, ++_Where)
+			_Where = insert(_Where, *_First);
+		}
+
+	template<class _Iter>
+		void _Insert(iterator _Where,
+			_Iter _First, _Iter _Last, forward_iterator_tag)
+		{	
+
+ 
+
+
+
+
+
+
+
+
+		size_type _Count = 0;
+		_Distance(_First, _Last, _Count);
+		size_type _Capacity = capacity();
+
+		if (_Count == 0)
+			;
+		else if (max_size() - size() < _Count)
+			_Xlen();	
+		else if (_Capacity < size() + _Count)
+			{	
+			_Capacity = max_size() - _Capacity / 2 < _Capacity
+				? 0 : _Capacity + _Capacity / 2;	
+			if (_Capacity < size() + _Count)
+				_Capacity = size() + _Count;
+			pointer _Newvec = this->_Alval.allocate(_Capacity);
+			pointer _Ptr = _Newvec;
+
+			try {
+			_Ptr = _Umove(_Myfirst, (_Where)._Myptr,
+				_Newvec);	
+			_Ptr = _Ucopy(_First, _Last, _Ptr);	
+			_Umove((_Where)._Myptr, _Mylast, _Ptr);	
+			} catch (...) {
+			_Destroy(_Newvec, _Ptr);
+			this->_Alval.deallocate(_Newvec, _Capacity);
+			throw;
+			}
+
+			_Count += size();
+			if (_Myfirst != 0)
+				{	
+				_Destroy(_Myfirst, _Mylast);
+				this->_Alval.deallocate(_Myfirst, _Myend - _Myfirst);
+				}
+
+ 
+
+
+
+			_Myend = _Newvec + _Capacity;
+			_Mylast = _Newvec + _Count;
+			_Myfirst = _Newvec;
+			}
+		else if ((size_type)(end() - _Where) < _Count)
+			{	
+			_Umove((_Where)._Myptr, _Mylast,
+				(_Where)._Myptr + _Count);	
+			_Iter _Mid = _First;
+			advance(_Mid, end() - _Where);
+
+			try {
+			_Ucopy(_Mid, _Last, _Mylast);	
+			} catch (...) {
+			_Destroy((_Where)._Myptr + _Count, _Mylast + _Count);
+			throw;
+			}
+
+			_Mylast += _Count;
+
+ 
+
+
+
+			::stdext:: unchecked_copy(_First, _Mid,
+				(_Where)._Myptr);	
+			}
+		else
+			{	
+			pointer _Oldend = _Mylast;
+			_Mylast = _Umove(_Oldend - _Count, _Oldend,
+				_Mylast);	
+			::stdext:: _Unchecked_move_backward((_Where)._Myptr, _Oldend - _Count,
+				_Oldend);	
+
+ 
+
+
+
+			::stdext:: unchecked_copy(_First, _Last,
+				(_Where)._Myptr);	
+			}
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+	iterator erase(iterator _Where)
+		{	
+		::stdext:: unchecked_copy((_Where)._Myptr + 1, _Mylast,
+			(_Where)._Myptr);
+		_Destroy(_Mylast - 1, _Mylast);
+		--_Mylast;
+		return (_Where);
+		}
+ 
+
+	iterator erase(iterator _First, iterator _Last)
+		{	
+		if (_First != _Last)
+			{	
+
+ 
+
+
+
+
+
+
+
+
+			pointer _Ptr = ::stdext:: unchecked_copy((_Last)._Myptr, _Mylast,
+				(_First)._Myptr);
+ 
+
+			_Destroy(_Ptr, _Mylast);
+			_Mylast = _Ptr;
+			}
+
+
+
+		return (_First);
+
+		}
+
+	void clear()
+		{	
+		erase(begin(), end());
+		}
+
+	void swap(_Myt& _Right)
+		{	
+		if (this->_Alval == _Right._Alval)
+			{	
+
+ 
+
+
+
+			std::swap(_Myfirst, _Right._Myfirst);
+			std::swap(_Mylast, _Right._Mylast);
+			std::swap(_Myend, _Right._Myend);
+			}
+		else
+			{	
+			_Myt _Ts = *this; *this = _Right, _Right = _Ts;
+			}
+		}
+
+protected:
+	void _Assign_n(size_type _Count, const _Ty& _Val)
+		{	
+		_Ty _Tmp = _Val;	
+		erase(begin(), end());
+		insert(begin(), _Count, _Tmp);
+		}
+
+	bool _Buy(size_type _Capacity)
+		{	
+		_Myfirst = 0, _Mylast = 0, _Myend = 0;
+		if (_Capacity == 0)
+			return (false);
+		else if (max_size() < _Capacity)
+			_Xlen();	
+		else
+			{	
+			_Myfirst = this->_Alval.allocate(_Capacity);
+			_Mylast = _Myfirst;
+			_Myend = _Myfirst + _Capacity;
+			}
+		return (true);
+		}
+
+	void _Destroy(pointer _First, pointer _Last)
+		{	
+		_Destroy_range(_First, _Last, this->_Alval);
+		}
+
+	void _Tidy()
+		{	
+		if (_Myfirst != 0)
+			{	
+
+ 
+
+
+
+			_Destroy(_Myfirst, _Mylast);
+			this->_Alval.deallocate(_Myfirst, _Myend - _Myfirst);
+			}
+		_Myfirst = 0, _Mylast = 0, _Myend = 0;
+		}
+
+	template<class _Iter>
+		pointer _Ucopy(_Iter _First, _Iter _Last, pointer _Ptr)
+		{	
+		return (::stdext:: unchecked_uninitialized_copy(_First, _Last,
+			_Ptr, this->_Alval));
+		}
+
+	template<class _Iter>
+		pointer _Umove(_Iter _First, _Iter _Last, pointer _Ptr)
+		{	
+		return (::stdext:: _Unchecked_uninitialized_move(_First, _Last,
+			_Ptr, this->_Alval));
+		}
+
+	void _Insert_n(iterator _Where,
+		size_type _Count, const _Ty& _Val)
+		{	
+
+ 
+
+
+
+
+
+		_Ty _Tmp = _Val;	
+		size_type _Capacity = capacity();
+
+		if (_Count == 0)
+			;
+		else if (max_size() - size() < _Count)
+			_Xlen();	
+		else if (_Capacity < size() + _Count)
+			{	
+			_Capacity = max_size() - _Capacity / 2 < _Capacity
+				? 0 : _Capacity + _Capacity / 2;	
+			if (_Capacity < size() + _Count)
+				_Capacity = size() + _Count;
+			pointer _Newvec = this->_Alval.allocate(_Capacity);
+			pointer _Ptr = _Newvec;
+
+			try {
+			_Ptr = _Umove(_Myfirst, (_Where)._Myptr,
+				_Newvec);	
+			_Ptr = _Ufill(_Ptr, _Count, _Tmp);	
+			_Umove((_Where)._Myptr, _Mylast, _Ptr);	
+			} catch (...) {
+			_Destroy(_Newvec, _Ptr);
+			this->_Alval.deallocate(_Newvec, _Capacity);
+			throw;
+			}
+
+			_Count += size();
+			if (_Myfirst != 0)
+				{	
+				_Destroy(_Myfirst, _Mylast);
+				this->_Alval.deallocate(_Myfirst, _Myend - _Myfirst);
+				}
+
+ 
+
+
+
+			_Myend = _Newvec + _Capacity;
+			_Mylast = _Newvec + _Count;
+			_Myfirst = _Newvec;
+			}
+		else if ((size_type)(_Mylast - (_Where)._Myptr) < _Count)
+			{	
+			_Umove((_Where)._Myptr, _Mylast,
+				(_Where)._Myptr + _Count);	
+
+			try {
+			_Ufill(_Mylast, _Count - (_Mylast - (_Where)._Myptr),
+				_Tmp);	
+			} catch (...) {
+			_Destroy((_Where)._Myptr + _Count, _Mylast + _Count);
+			throw;
+			}
+
+			_Mylast += _Count;
+
+ 
+
+
+
+			fill((_Where)._Myptr, _Mylast - _Count,
+				_Tmp);	
+			}
+		else
+			{	
+			pointer _Oldend = _Mylast;
+			_Mylast = _Umove(_Oldend - _Count, _Oldend,
+				_Mylast);	
+
+ 
+
+
+
+			::stdext:: _Unchecked_move_backward((_Where)._Myptr, _Oldend - _Count,
+				_Oldend);	
+			fill((_Where)._Myptr, (_Where)._Myptr + _Count,
+				_Tmp);	
+			}
+		}
+
+	pointer _Ufill(pointer _Ptr, size_type _Count, const _Ty &_Val)
+		{	
+		::stdext:: unchecked_uninitialized_fill_n(_Ptr, _Count, _Val, this->_Alval);
+		return (_Ptr + _Count);
+		}
+
+	static void _Xlen()
+		{	
+		throw length_error("vector<T> too long");
+		}
+
+	static void _Xran()
+		{	
+		throw out_of_range("invalid vector<T> subscript");
+		}
+
+	static void _Xinvarg()
+		{	
+		throw invalid_argument("invalid vector<T> argument");
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	pointer _Myfirst;	
+	pointer _Mylast;	
+	pointer _Myend;	
+	};
+
+	
+template <class _Ty, class _Ax>
+	class _Move_operation_category<vector<_Ty, _Ax> >
+	{
+	public:
+		typedef _Swap_move_tag _Move_cat;
+	};
+
+		
+template<class _Ty,
+	class _Alloc> inline
+	bool operator==(const vector<_Ty, _Alloc>& _Left,
+		const vector<_Ty, _Alloc>& _Right)
+	{	
+	return (_Left.size() == _Right.size()
+		&& equal(_Left.begin(), _Left.end(), _Right.begin()));
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	bool operator!=(const vector<_Ty, _Alloc>& _Left,
+		const vector<_Ty, _Alloc>& _Right)
+	{	
+	return (!(_Left == _Right));
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	bool operator<(const vector<_Ty, _Alloc>& _Left,
+		const vector<_Ty, _Alloc>& _Right)
+	{	
+	return (lexicographical_compare(_Left.begin(), _Left.end(),
+		_Right.begin(), _Right.end()));
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	bool operator>(const vector<_Ty, _Alloc>& _Left,
+		const vector<_Ty, _Alloc>& _Right)
+	{	
+	return (_Right < _Left);
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	bool operator<=(const vector<_Ty, _Alloc>& _Left,
+		const vector<_Ty, _Alloc>& _Right)
+	{	
+	return (!(_Right < _Left));
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	bool operator>=(const vector<_Ty, _Alloc>& _Left,
+		const vector<_Ty, _Alloc>& _Right)
+	{	
+	return (!(_Left < _Right));
+	}
+
+template<class _Ty,
+	class _Alloc> inline
+	void swap(vector<_Ty, _Alloc>& _Left, vector<_Ty, _Alloc>& _Right)
+	{	
+	_Left.swap(_Right);
+	}
+
+
+
+
+typedef unsigned _Vbase;	
+const int _VBITS = 8 * sizeof (_Vbase);	
+
+		
+template<class _MycontTy>
+	class _Vb_iter_base
+		: public _Ranit<_Bool, typename _MycontTy::difference_type,
+			bool *, bool>
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-class function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 2
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3 , A4)
-        , 2
-    > abstract_function_type;
+
+	typedef _Range_checked_iterator_tag _Checked_iterator_category;
+
+
+	_Vb_iter_base()
+		: _Myptr(0), _Myoff(0)
+		{	
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	_Vb_iter_base(const _Vb_iter_base<_MycontTy>& _Right)
+		: _Myptr(_Right._Myptr), _Myoff(_Right._Myoff)
+		{	
+		{ if (!(_Right._Mycont != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		this->_Mycont = _Right._Mycont;
+		}
+
+	_Vb_iter_base(_Vbase *_Ptr, _MycontTy *_Mypvbool)
+		: _Myptr(_Ptr), _Myoff(0)
+		{	
+		{ if (!(_Mypvbool != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		this->_Mycont = _Mypvbool;
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+	_Vbase *_Myptr;
+	typename _MycontTy::size_type _Myoff;
+
+	static void _Xlen()
+		{	
+		throw length_error("vector<bool> too long");
+			}
+
+	static void _Xran()
+		{	
+		throw out_of_range("invalid vector<bool> subscript");
+		}
+
+	static void _Xinvarg()
+		{	
+		throw invalid_argument("invalid vector<bool> argument");
+		}
+
+ 
+	_Vbase * _My_cont_begin() const
+		{
+			return (((_MycontTy *)this->_Mycont)->_Myvec.begin())._Myptr;
+		}
+
+	typename _MycontTy::size_type _My_actual_offset() const
+		{
+		_MycontTy::size_type _Off = this->_Myoff;
+		_Off += _VBITS * (this->_Myptr - _My_cont_begin());
+		return _Off;
+		}
+ 
+	};
+
+		
+template<class _MycontTy>
+	class _Vb_reference
+		: public _Vb_iter_base<_MycontTy>
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-class function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 3
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3 , A4)
-        , 3
-    > abstract_function_type;
+	_Vb_reference()
+		{	
+		}
+
+	_Vb_reference(const _Vb_iter_base<_MycontTy>& _Right)
+		: _Vb_iter_base<_MycontTy>(_Right)
+		{	
+		}
+
+	_Vb_reference& operator=(const _Vb_reference<_MycontTy>& _Right)
+		{	
+		return (*this = bool(_Right));
+		}
+
+	_Vb_reference<_MycontTy>& operator=(bool _Val)
+		{	
+		if (_Val)
+			*_Getptr() |= _Mask();
+		else
+			*_Getptr() &= ~_Mask();
+		return (*this);
+		}
+
+	void flip()
+		{	
+		*_Getptr() ^= _Mask();
+		}
+
+	bool operator~() const
+		{	
+		return (!bool(*this));
+		}
+
+	operator bool() const
+		{	
+		return ((*_Getptr() & _Mask()) != 0);
+		}
+
+	_Vbase *_Getptr() const
+		{	
+
+ 
+
+
+
+
+
+
+
+ 		{ if (!(this->_Mycont != 0 && this->_Myptr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		{ if (!(this->_My_actual_offset() < ((_MycontTy *)this->_Mycont)->_Mysize)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+ 
+
+		return (this->_Myptr);
+		}
+
+protected:
+	_Vbase _Mask() const
+		{	
+		return ((_Vbase)(1 << this->_Myoff));
+		}
+	};
+
+template<class _MycontTy>
+	void swap(_Vb_reference<_MycontTy> _Left, _Vb_reference<_MycontTy> _Right)
+	{	
+	bool _Val = _Left;
+	_Left = _Right;
+	_Right = _Val;
+	}
+
+		
+template<class _MycontTy>
+	class _Vb_const_iterator
+		: public _Vb_iter_base<_MycontTy>
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-class function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 4
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3 , A4)
-        , 4
-    > abstract_function_type;
+	typedef _Vb_reference<_MycontTy> _Reft;
+	typedef bool const_reference;
+
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Bool value_type;
+	typedef typename _MycontTy::size_type size_type;
+	typedef typename _MycontTy::difference_type difference_type;
+	typedef const_reference *pointer;
+	typedef const_reference reference;
+
+	_Vb_const_iterator()
+		{	
+		}
+
+ 
+	_Vb_const_iterator(const _Vbase *_Ptr, const _MycontTy *_Mypvbool)
+		: _Vb_iter_base<_MycontTy>((_Vbase *)_Ptr, (_MycontTy *)_Mypvbool)
+
+ 
+
+
+
+
+		{	
+		}
+
+	const_reference operator*() const
+		{	
+		return (_Reft(*this));
+		}
+
+	_Vb_const_iterator<_MycontTy>& operator++()
+		{	
+		_Inc();
+		return (*this);
+		}
+
+	_Vb_const_iterator<_MycontTy> operator++(int)
+		{	
+		_Vb_const_iterator<_MycontTy> _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	_Vb_const_iterator<_MycontTy>& operator--()
+		{	
+		_Dec();
+		return (*this);
+		}
+
+	_Vb_const_iterator<_MycontTy> operator--(int)
+		{	
+		_Vb_const_iterator<_MycontTy> _Tmp = *this;
+		--*this;
+		return (_Tmp);
+		}
+
+	_Vb_const_iterator<_MycontTy>& operator+=(difference_type _Off)
+		{	
+		if (_Off == 0)
+			return (*this); 
+		{ if (!(this->_Mycont != 0 && this->_Myptr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		if (_Off < 0)
+			{
+			{ if (!(this->_My_actual_offset() >= ((size_type)-_Off))) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			}
+		else
+			{
+			{ if (!((this->_My_actual_offset() + _Off) <= ((_MycontTy *)this->_Mycont)->_Mysize)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			}
+		if (_Off < 0 && this->_Myoff < 0 - (size_type)_Off)
+			{	
+			this->_Myoff += _Off;
+			this->_Myptr -= 1 + ((size_type)(-1) - this->_Myoff) / _VBITS;
+			this->_Myoff %= _VBITS;
+			}
+		else
+			{	
+			this->_Myoff += _Off;
+			this->_Myptr += this->_Myoff / _VBITS;
+			this->_Myoff %= _VBITS;
+			}
+		return (*this);
+		}
+
+	_Vb_const_iterator<_MycontTy> operator+(difference_type _Off) const
+		{	
+		_Vb_const_iterator<_MycontTy> _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Vb_const_iterator<_MycontTy>& operator-=(difference_type _Off)
+		{	
+		return (*this += -_Off);
+		}
+
+	_Vb_const_iterator<_MycontTy> operator-(difference_type _Off) const
+		{	
+		_Vb_const_iterator<_MycontTy> _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	difference_type operator-(
+		const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+
+ 
+
+
+
+		return (_VBITS * (this->_Myptr - _Right._Myptr)
+			+ (difference_type)this->_Myoff
+			- (difference_type)_Right._Myoff);
+		}
+
+	const_reference operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+
+	bool operator==(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+
+ 
+
+
+
+		return (this->_Myptr == _Right._Myptr
+			&& this->_Myoff == _Right._Myoff);
+		}
+
+	bool operator!=(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+		return (!(*this == _Right));
+		}
+
+	bool operator<(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+
+ 
+
+
+
+		return (this->_Myptr < _Right._Myptr
+			|| this->_Myptr == _Right._Myptr
+				&& this->_Myoff < _Right._Myoff);
+		}
+
+	bool operator>(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+		return (_Right < *this);
+		}
+
+	bool operator<=(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+		return (!(_Right < *this));
+		}
+
+	bool operator>=(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+		return (!(*this < _Right));
+		}
+
+protected:
+
+ 
+
+
+
+
+
+
+
+	void _Dec()
+		{	
+		if (this->_Myoff != 0)
+			{
+			--this->_Myoff;
+			}
+		else
+			{
+			{ if (!(this->_Mycont != 0 && this->_Myptr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			{ if (!(this->_Myptr > this->_My_cont_begin())) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+			--this->_Myptr;
+			this->_Myoff = _VBITS - 1;
+			}
+		}
+
+	void _Inc()
+		{	
+		{ if (!(this->_Mycont != 0 && this->_Myptr != 0)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		{ if (!((this->_My_actual_offset() + 1) <= ((_MycontTy *)this->_Mycont)->_Mysize)) { ((void)0); ::_invalid_parameter_noinfo(); } ; };
+		if (this->_Myoff < _VBITS - 1)
+			++this->_Myoff;
+		else
+			this->_Myoff = 0, ++this->_Myptr;
+		}
+	};
+
+template<class _MycontTy>
+	_Vb_const_iterator<_MycontTy> operator+(
+		typename _Vb_const_iterator<_MycontTy>::difference_type _Off,
+		_Vb_const_iterator<_MycontTy> _Right)
+		{	
+		return (_Right += _Off);
+		}
+
+	
+template<class _MycontTy>
+	class _Vb_iterator
+		: public _Vb_const_iterator<_MycontTy>
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-namespace boost { namespace local {
-template<typename R
-    ,
-    typename A0 , typename A1 , typename A2 , typename A3 , typename A4
->
-class function<
-      R ( A0 , A1 , A2 , A3 , A4)
-    , 5
-> {
-    typedef aux::abstract_function<
-          R ( A0 , A1 , A2 , A3 , A4)
-        , 5
-    > abstract_function_type;
+	typedef _Vb_reference<_MycontTy> _Reft;
+	typedef bool const_reference;
+
+	typedef random_access_iterator_tag iterator_category;
+	typedef _Bool value_type;
+	typedef typename _MycontTy::size_type size_type;
+	typedef typename _MycontTy::difference_type difference_type;
+	typedef _Reft *pointer;
+	typedef _Reft reference;
+
+	_Vb_iterator()
+		{	
+		}
+
+ 
+	_Vb_iterator(_Vbase *_Ptr, _MycontTy *_Mypvbool)
+		: _Vb_const_iterator<_MycontTy>(_Ptr, _Mypvbool)
+
+ 
+
+
+
+
+		{	
+		}
+
+	reference operator*() const
+		{	
+		return (_Reft(*this));
+		}
+
+	_Vb_iterator<_MycontTy>& operator++()
+		{	
+		++*(_Vb_const_iterator<_MycontTy> *)this;
+		return (*this);
+		}
+
+	_Vb_iterator<_MycontTy> operator++(int)
+		{	
+		_Vb_iterator<_MycontTy> _Tmp = *this;
+		++*this;
+		return (_Tmp);
+		}
+
+	_Vb_iterator<_MycontTy>& operator--()
+		{	
+		--*(_Vb_const_iterator<_MycontTy> *)this;
+		return (*this);
+		}
+
+	_Vb_iterator<_MycontTy> operator--(int)
+		{	
+		_Vb_iterator<_MycontTy> _Tmp = *this;
+		--*this;
+		return (_Tmp);
+		}
+
+	_Vb_iterator<_MycontTy>& operator+=(difference_type _Off)
+		{	
+		*(_Vb_const_iterator<_MycontTy> *)this += _Off;
+		return (*this);
+		}
+
+	_Vb_iterator<_MycontTy> operator+(difference_type _Off) const
+		{	
+		_Vb_iterator<_MycontTy> _Tmp = *this;
+		return (_Tmp += _Off);
+		}
+
+	_Vb_iterator<_MycontTy>& operator-=(difference_type _Off)
+		{	
+		return (*this += -_Off);
+		}
+
+	_Vb_iterator<_MycontTy> operator-(difference_type _Off) const
+		{	
+		_Vb_iterator<_MycontTy> _Tmp = *this;
+		return (_Tmp -= _Off);
+		}
+
+	difference_type operator-(const _Vb_const_iterator<_MycontTy>& _Right) const
+		{	
+		return (*(_Vb_const_iterator<_MycontTy> *)this - _Right);
+		}
+
+	reference operator[](difference_type _Off) const
+		{	
+		return (*(*this + _Off));
+		}
+	};
+
+template<class _MycontTy>
+	_Vb_iterator<_MycontTy> operator+(
+		typename _Vb_iterator<_MycontTy>::difference_type _Off,
+		_Vb_iterator<_MycontTy> _Right)
+		{	
+		return (_Right += _Off);
+		}
+
+		
+template<class _Alloc>
+	class vector<_Bool, _Alloc>
+		: public _Container_base
+	{	
 public:
-                   function(): ptr_() {}
-                   function(abstract_function_type& ref): ptr_(&ref) {}
-    function& operator=(abstract_function_type& ref) {
-        ptr_ = &ref;
-        return *this;
-    }
-    inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3 , A4 a4) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3 , a4); } inline R operator()( A0 a0 , A1 a1 , A2 a2 , A3 a3) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2 , a3); } inline R operator()( A0 a0 , A1 a1 , A2 a2) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1 , a2); } inline R operator()( A0 a0 , A1 a1) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0 , a1); } inline R operator()( A0 a0) { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp", 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)( a0); } inline R operator()() { ((ptr_) ? (void)0 : __assert_func ("./boost/local/aux_/function.hpp",
 106, __PRETTY_FUNCTION__, "ptr_")); return (*ptr_)(); }
-private:
-    abstract_function_type* ptr_;
-};
-}}
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id9(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id9))>::type boost_local_auxXresult_type9; typedef __typeof__(boost::type_of::ensure_obj(this)) se_this_type9; typedef void (*boost_se_tag_0_9)(int this_ ); typedef void (*boost_se_tag_1_9)(int c ); typedef void (*boost_se_tag_2_9)(int & d ); typedef void (*boost_se_tag_3_9)(int a ); typedef void (*boost_se_tag_4_9)(int & b ); typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(this, (boost_se_tag_0_9)0)))) boost_se_wrapped_t_0_9; typedef boost_se_wrapped_t_0_9::type boost_se_capture_t_0_9; typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(c, (boost_se_tag_1_9)0)))) boost_se_wrapped_t_1_9; typedef boost_se_wrapped_t_1_9::type boost_se_capture_t_1_9; typedef __typeof__(boos
t::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(& d, (boost_se_tag_2_9)0)))) boost_se_wrapped_t_2_9; typedef boost_se_wrapped_t_2_9::type boost_se_capture_t_2_9; typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(a, (boost_se_tag_3_9)0)))) boost_se_wrapped_t_3_9; typedef boost_se_wrapped_t_3_9::type boost_se_capture_t_3_9; typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(& b, (boost_se_tag_4_9)0)))) boost_se_wrapped_t_4_9; typedef boost_se_wrapped_t_4_9::type boost_se_capture_t_4_9; struct boost_se_params_t_9 { se_this_type9 se_this; typedef boost_se_capture_t_0_9 boost_se_param_t_0_9; typedef boost_se_capture_t_1_9 boost_se_param_t_1_9; typedef boost_se_capture_t_2_9 boost_se_param_t_2_9; typedef boost_se_capture_t_3_9 boost_se_param_t_3_9; typedef boost_se_capture_t_4_9 boost_se_param_t_4_9; boost::scope_exit::aux::member< boost_se_param_t_0_9, boost_se_tag_0_9 
> boost_se_param_0_9; boost::scope_exit::aux::member< boost_se_param_t_1_9, boost_se_tag_1_9 > boost_se_param_1_9; boost::scope_exit::aux::member< boost_se_param_t_2_9, boost_se_tag_2_9 > boost_se_param_2_9; boost::scope_exit::aux::member< boost_se_param_t_3_9, boost_se_tag_3_9 > boost_se_param_3_9; boost::scope_exit::aux::member< boost_se_param_t_4_9, boost_se_tag_4_9 > boost_se_param_4_9; } boost_local_auxXparams9 = { this , { boost::scope_exit::aux::deref(this, (boost_se_tag_0_9)0) } , { boost::scope_exit::aux::deref(c, (boost_se_tag_1_9)0) } , { boost::scope_exit::aux::deref(& d, (boost_se_tag_2_9)0) } , { boost::scope_exit::aux::deref(a, (boost_se_tag_3_9)0) } , { boost::scope_exit::aux::deref(& b, (boost_se_tag_4_9)0) } }; boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< sizeof(boost_local_auxXargs) >::cmp1<0>::cmp2 > boost_local_auxXargs; boost_local_auxXargs.value = &boost_local_auxXparams9; class boost_local_auxXfunctor9 : public ::boost::local::aux::abstract_function< boost_local_
auxXresult_type9 ( int x , double y ), 1> { typedef boost_local_auxXresult_type9 ( int x , double y ) boost_local_auxXfunction_type; public: explicit boost_local_auxXfunctor9(void* binds) : boost_local_auxXbinds(static_cast< boost_se_params_t_9*>(binds)) { boost_local_auxXinit_recursion(); } boost_local_auxXresult_type9 operator()( ::boost::function_traits< boost_local_auxXfunction_type>::arg1_type arg1 , ::boost::function_traits< boost_local_auxXfunction_type>::arg2_type arg2 ) { return boost_local_auxXbody( boost_local_auxXbinds-> boost_se_param_0_9.value , boost_local_auxXbinds-> boost_se_param_1_9.value , boost_local_auxXbinds-> boost_se_param_2_9.value , boost_local_auxXbinds-> boost_se_param_3_9.value , boost_local_auxXbinds-> se_this , arg1 , arg2 ); } boost_local_auxXresult_type9 operator()( ::boost::function_traits< boost_local_auxXfunction_type>::arg1_type arg1 ) { return boost_local_auxXbody( boost_local_auxXbinds-> boost_se_param_0_9.value , boost_local_auxXbinds-> boost_se_param_1_9.value , boos
t_local_auxXbinds-> boost_se_param_2_9.value , boost_local_auxXbinds-> boost_se_param_3_9.value , boost_local_auxXbinds-> se_this , arg1 ); } private: typedef ::boost::local::function<boost_local_auxXfunction_type, 1> boost_local_auxXfunctor_type; typedef ::boost::add_const< boost_se_params_t_9:: boost_se_param_t_0_9 >::type cXboost_local_auxXtypeof_type ; typedef ::boost::add_const< boost_se_params_t_9:: boost_se_param_t_1_9 >::type & dXboost_local_auxXtypeof_type ; typedef boost_se_params_t_9:: boost_se_param_t_2_9 aXboost_local_auxXtypeof_type ; typedef boost_se_params_t_9:: boost_se_param_t_3_9 & bXboost_local_auxXtypeof_type ; typeof ::contract::detail::add_pointed_const< se_this_type9 >::type thisXboost_local_auxXtypeof_type ; boost_se_params_t_9* boost_local_auxXbinds; boost_local_auxXresult_type9 boost_local_auxXbody( ::boost::add_const< boost_se_params_t_9:: boost_se_param_t_0_9 >::type c , ::boost::add_const< boost_se_params_t_9:: boost_se_param_t_1_9 >::type & d , boost_se_params_t_9:: boost_se_pa
ram_t_2_9 a , boost_se_params_t_9:: boost_se_param_t_3_9 & b , ::contract::detail::add_pointed_const< se_this_type9 >::type this_ , int x , double y = 1.23 )
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id11(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id11))>::type boost_local_auxXresult_type11; typedef __typeof__(boost::type_of::ensure_obj(this)) se_this_type11; typedef void (*boost_se_tag_0_11)(int this_ ); typedef void (*boost_se_tag_1_11)(int c ); typedef void (*boost_se_tag_2_11)(int & d ); typedef void (*boost_se_tag_3_11)(int a ); typedef void (*boost_se_tag_4_11)(int & b ); typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(this, (boost_se_tag_0_11)0)))) boost_se_wrapped_t_0_11; typedef boost_se_wrapped_t_0_11::type boost_se_capture_t_0_11; typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(c, (boost_se_tag_1_11)0)))) boost_se_wrapped_t_1_11; typedef boost_se_wrapped_t_1_11::type boost_se_capture_t_1_11; typede
f __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(& d, (boost_se_tag_2_11)0)))) boost_se_wrapped_t_2_11; typedef boost_se_wrapped_t_2_11::type boost_se_capture_t_2_11; typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(a, (boost_se_tag_3_11)0)))) boost_se_wrapped_t_3_11; typedef boost_se_wrapped_t_3_11::type boost_se_capture_t_3_11; typedef __typeof__(boost::type_of::ensure_obj(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(& b, (boost_se_tag_4_11)0)))) boost_se_wrapped_t_4_11; typedef boost_se_wrapped_t_4_11::type boost_se_capture_t_4_11; struct boost_se_params_t_11 { se_this_type11 se_this; typedef boost_se_capture_t_0_11 boost_se_param_t_0_11; typedef boost_se_capture_t_1_11 boost_se_param_t_1_11; typedef boost_se_capture_t_2_11 boost_se_param_t_2_11; typedef boost_se_capture_t_3_11 boost_se_param_t_3_11; typedef boost_se_capture_t_4_11 boost_se_param_t_4_11; boost::scope_exit::aux::member
< boost_se_param_t_0_11, boost_se_tag_0_11 > boost_se_param_0_11; boost::scope_exit::aux::member< boost_se_param_t_1_11, boost_se_tag_1_11 > boost_se_param_1_11; boost::scope_exit::aux::member< boost_se_param_t_2_11, boost_se_tag_2_11 > boost_se_param_2_11; boost::scope_exit::aux::member< boost_se_param_t_3_11, boost_se_tag_3_11 > boost_se_param_3_11; boost::scope_exit::aux::member< boost_se_param_t_4_11, boost_se_tag_4_11 > boost_se_param_4_11; } boost_local_auxXparams11 = { this , { boost::scope_exit::aux::deref(this, (boost_se_tag_0_11)0) } , { boost::scope_exit::aux::deref(c, (boost_se_tag_1_11)0) } , { boost::scope_exit::aux::deref(& d, (boost_se_tag_2_11)0) } , { boost::scope_exit::aux::deref(a, (boost_se_tag_3_11)0) } , { boost::scope_exit::aux::deref(& b, (boost_se_tag_4_11)0) } }; boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< sizeof(boost_local_auxXargs) >::cmp1<0>::cmp2 > boost_local_auxXargs; boost_local_auxXargs.value = &boost_local_auxXparams11; class boost_local_auxXfunctor
11 : public ::boost::local::aux::abstract_function< boost_local_auxXresult_type11 ( int x , double y ), 1> { typedef boost_local_auxXresult_type11 ( int x , double y ) boost_local_auxXfunction_type; public: explicit boost_local_auxXfunctor11(void* binds) : boost_local_auxXbinds(static_cast< boost_se_params_t_11*>(binds)) { boost_local_auxXinit_recursion(); } boost_local_auxXresult_type11 operator()( ::boost::function_traits< boost_local_auxXfunction_type>::arg1_type arg1 , ::boost::function_traits< boost_local_auxXfunction_type>::arg2_type arg2 ) { return boost_local_auxXbody( boost_local_auxXbinds-> boost_se_param_0_11.value , boost_local_auxXbinds-> boost_se_param_1_11.value , boost_local_auxXbinds-> boost_se_param_2_11.value , boost_local_auxXbinds-> boost_se_param_3_11.value , boost_local_auxXbinds-> se_this , arg1 , arg2 ); } boost_local_auxXresult_type11 operator()( ::boost::function_traits< boost_local_auxXfunction_type>::arg1_type arg1 ) { return boost_local_auxXbody( boost_local_auxXbinds-> boost_se
_param_0_11.value , boost_local_auxXbinds-> boost_se_param_1_11.value , boost_local_auxXbinds-> boost_se_param_2_11.value , boost_local_auxXbinds-> boost_se_param_3_11.value , boost_local_auxXbinds-> se_this , arg1 ); } private: typedef ::boost::local::function<boost_local_auxXfunction_type, 1> boost_local_auxXfunctor_type; typedef ::boost::add_const< boost_se_params_t_11:: boost_se_param_t_0_11 >::type cXboost_local_auxXtypeof_type ; typedef ::boost::add_const< boost_se_params_t_11:: boost_se_param_t_1_11 >::type & dXboost_local_auxXtypeof_type ; typedef boost_se_params_t_11:: boost_se_param_t_2_11 aXboost_local_auxXtypeof_type ; typedef boost_se_params_t_11:: boost_se_param_t_3_11 & bXboost_local_auxXtypeof_type ; typeof ::contract::detail::add_pointed_const< se_this_type11 >::type thisXboost_local_auxXtypeof_type ; boost_se_params_t_11* boost_local_auxXbinds; boost_local_auxXresult_type11 boost_local_auxXbody( ::boost::add_const< boost_se_params_t_11:: boost_se_param_t_0_11 >::type c , ::boost::add_const<
 boost_se_params_t_11:: boost_se_param_t_1_11 >::type & d , boost_se_params_t_11:: boost_se_param_t_2_11 a , boost_se_params_t_11:: boost_se_param_t_3_11 & b , ::contract::detail::add_pointed_const< se_this_type11 >::type this_ , int x , double y = 1.23 )
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id15(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id15))>::type boost_local_auxXresult_type15; boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< sizeof(boost_local_auxXargs) >::cmp1<0>::cmp2 > boost_local_auxXargs; class boost_local_auxXfunctor15 : public ::boost::local::aux::abstract_function< boost_local_auxXresult_type15 ( ), 0 > { typedef boost_local_auxXresult_type15 ( ) boost_local_auxXfunction_type; public: explicit boost_local_auxXfunctor15(void* binds) { boost_local_auxXinit_recursion(); } boost_local_auxXresult_type15 operator()( ) { return boost_local_auxXbody( ); } private: typedef ::boost::local::function<boost_local_auxXfunction_type, 0 > boost_local_auxXfunctor_type; boost_local_auxXresult_type15 boost_local_auxXbody( )
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id16(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id16))>::type boost_local_auxXresult_type16; boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< sizeof(boost_local_auxXargs) >::cmp1<0>::cmp2 > boost_local_auxXargs; class boost_local_auxXfunctor16 : public ::boost::local::aux::abstract_function< boost_local_auxXresult_type16 ( ), 0 > { typedef boost_local_auxXresult_type16 ( ) boost_local_auxXfunction_type; public: explicit boost_local_auxXfunctor16(void* binds) { boost_local_auxXinit_recursion(); } boost_local_auxXresult_type16 operator()( ) { return boost_local_auxXbody( ); } private: typedef ::boost::local::function<boost_local_auxXfunction_type, 0 > boost_local_auxXfunctor_type; boost_local_auxXresult_type16 boost_local_auxXbody( )
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id17(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id17))>::type boost_local_auxXresult_type17; boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< sizeof(boost_local_auxXargs) >::cmp1<0>::cmp2 > boost_local_auxXargs; class boost_local_auxXfunctor17 : public ::boost::local::aux::abstract_function< boost_local_auxXresult_type17 ( ), 0 > { typedef boost_local_auxXresult_type17 ( ) boost_local_auxXfunction_type; public: explicit boost_local_auxXfunctor17(void* binds) { boost_local_auxXinit_recursion(); } boost_local_auxXresult_type17 operator()( ) { return boost_local_auxXbody( ); } private: typedef ::boost::local::function<boost_local_auxXfunction_type, 0 > boost_local_auxXfunctor_type; boost_local_auxXresult_type17 boost_local_auxXbody( )
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id23(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id23))>::type boost_local_auxXresult_type23; ; struct ERROR_default_value_cannot_be_specified_as_the_first_element; typedef struct ERROR_default_value_cannot_be_specified_as_the_first_element23 : boost::mpl::assert_ { static boost::mpl::failed ************ (ERROR_default_value_cannot_be_specified_as_the_first_element::************ assert_arg()) () { return 0; } } mpl_assert_arg23; enum { mpl_assertion_in_line_23 = sizeof( boost::mpl::assertion_failed<(false)>( mpl_assert_arg23::assert_arg() ) ) } ;
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id26(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id26))>::type boost_local_auxXresult_type26; ; struct ERROR_default_value_cannot_be_specified_as_the_first_element; typedef struct ERROR_default_value_cannot_be_specified_as_the_first_element26 : boost::mpl::assert_ { static boost::mpl::failed ************ (ERROR_default_value_cannot_be_specified_as_the_first_element::************ assert_arg()) () { return 0; } } mpl_assert_arg26; enum { mpl_assertion_in_line_26 = sizeof( boost::mpl::assertion_failed<(false)>( mpl_assert_arg26::assert_arg() ) ) } ;
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id29(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id29))>::type boost_local_auxXresult_type29; ; struct ERROR_default_value_at_element_6_must_follow_an_unbound_parameter; typedef struct ERROR_default_value_at_element_6_must_follow_an_unbound_parameter29 : boost::mpl::assert_ { static boost::mpl::failed ************ (ERROR_default_value_at_element_6_must_follow_an_unbound_parameter::************ assert_arg()) () { return 0; } } mpl_assert_arg29; enum { mpl_assertion_in_line_29 = sizeof( boost::mpl::assertion_failed<(false)>( mpl_assert_arg29::assert_arg() ) ) } ;
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id31(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id31))>::type boost_local_auxXresult_type31; ; struct ERROR_default_value_at_element_6_must_follow_an_unbound_parameter; typedef struct ERROR_default_value_at_element_6_must_follow_an_unbound_parameter31 : boost::mpl::assert_ { static boost::mpl::failed ************ (ERROR_default_value_at_element_6_must_follow_an_unbound_parameter::************ assert_arg()) () { return 0; } } mpl_assert_arg31; enum { mpl_assertion_in_line_31 = sizeof( boost::mpl::assertion_failed<(false)>( mpl_assert_arg31::assert_arg() ) ) } ;
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id34(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id34))>::type boost_local_auxXresult_type34; ; struct ERROR_object_this_cannot_be_bound_multiple_times; typedef struct ERROR_object_this_cannot_be_bound_multiple_times34 : boost::mpl::assert_ { static boost::mpl::failed ************ (ERROR_object_this_cannot_be_bound_multiple_times::************ assert_arg()) () { return 0; } } mpl_assert_arg34; enum { mpl_assertion_in_line_34 = sizeof( boost::mpl::assertion_failed<(false)>( mpl_assert_arg34::assert_arg() ) ) } ;
-char& ERROR_missing_result_type_before_the_local_function_parameter_macro_id36(); typedef boost::function_tratis::result_type<__typeof__(boost::type_of::ensure_obj(ERROR_missing_result_type_before_the_local_function_parameter_macro_id36))>::type boost_local_auxXresult_type36; ; struct ERROR_object_this_cannot_be_bound_multiple_times; typedef struct ERROR_object_this_cannot_be_bound_multiple_times36 : boost::mpl::assert_ { static boost::mpl::failed ************ (ERROR_object_this_cannot_be_bound_multiple_times::************ assert_arg()) () { return 0; } } mpl_assert_arg36; enum { mpl_assertion_in_line_36 = sizeof( boost::mpl::assertion_failed<(false)>( mpl_assert_arg36::assert_arg() ) ) } ;
+	typedef typename _Alloc::size_type size_type;
+	typedef typename _Alloc::difference_type _Dift;
+	typedef std::vector<_Vbase,
+		typename _Alloc::template rebind<_Vbase>::other>
+			_Vbtype;
+	typedef std::vector<_Bool, _Alloc> _Myt;
+	typedef _Dift difference_type;
+	typedef _Bool _Ty;
+	typedef _Alloc allocator_type;
+
+	typedef _Vb_reference<_Myt> reference;
+	typedef bool const_reference;
+	typedef bool value_type;
+
+	typedef reference _Reft;
+	typedef _Vb_const_iterator<_Myt> const_iterator;
+	typedef _Vb_iterator<_Myt> iterator;
+
+	friend class _Vb_reference<_Myt>;
+	friend class _Vb_iter_base<_Myt>;
+	friend class _Vb_const_iterator<_Myt>;
+
+	typedef iterator pointer;
+	typedef const_iterator const_pointer;
+	typedef std::reverse_iterator<iterator> reverse_iterator;
+	typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+	vector()
+		: _Mysize(0), _Myvec()
+		{	
+		}
+
+	explicit vector(const _Alloc& _Al)
+		: _Mysize(0), _Myvec(_Al)
+		{	
+		}
+
+	explicit vector(size_type _Count, bool _Val = false)
+		: _Mysize(0), _Myvec(_Nw(_Count), (_Vbase)(_Val ? -1 : 0))
+		{	
+		_Trim(_Count);
+		}
+
+	vector(size_type _Count, bool _Val, const _Alloc& _Al)
+		: _Mysize(0), _Myvec(_Nw(_Count), (_Vbase)(_Val ? -1 : 0), _Al)
+		{	
+		_Trim(_Count);
+		}
+
+	template<class _Iter>
+		vector(_Iter _First, _Iter _Last)
+		: _Mysize(0), _Myvec()
+		{	
+		_BConstruct(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		vector(_Iter _First, _Iter _Last, const _Alloc& _Al)
+		: _Mysize(0), _Myvec(_Al)
+		{	
+		_BConstruct(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		void _BConstruct(_Iter _Count, _Iter _Val, _Int_iterator_tag)
+		{	
+		size_type _Num = (size_type)_Count;
+		_Myvec.assign(_Num, (_Ty)_Val ? -1 : 0);
+		_Trim(_Num);
+		}
+
+	template<class _Iter>
+		void _BConstruct(_Iter _First, _Iter _Last, input_iterator_tag)
+		{	
+		insert(begin(), _First, _Last);
+		}
+
+	~vector()
+		{	
+		_Mysize = 0;
+		}
+
+	void reserve(size_type _Count)
+		{	
+		_Myvec.reserve(_Nw(_Count));
+		}
+
+	size_type capacity() const
+		{	
+		return (_Myvec.capacity() * _VBITS);
+		}
+
+ 
+	iterator begin()
+		{	
+		return (iterator((_Myvec.begin())._Myptr, this));
+		}
+
+	const_iterator begin() const
+		{	
+		return (const_iterator((_Myvec.begin())._Myptr, this));
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+	iterator end()
+		{	
+		iterator _Tmp = begin();
+		if (0 < _Mysize)
+			_Tmp += _Mysize;
+		return (_Tmp);
+		}
+
+	const_iterator end() const
+		{	
+		const_iterator _Tmp = begin();
+		if (0 < _Mysize)
+			_Tmp += _Mysize;
+		return (_Tmp);
+		}
+
+	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()));
+		}
+
+	void resize(size_type _Newsize, bool _Val = false)
+		{	
+		if (size() < _Newsize)
+			_Insert_n(end(), _Newsize - size(), _Val);
+		else if (_Newsize < size())
+			erase(begin() + _Newsize, end());
+		}
+
+	size_type size() const
+		{	
+		return (_Mysize);
+		}
+
+	size_type max_size() const
+		{	
+		const size_type _Maxsize = _Myvec.max_size();
+		return (_Maxsize < (size_type)(-1) / _VBITS
+			? _Maxsize * _VBITS : (size_type)(-1));
+		}
+
+	bool empty() const
+		{	
+		return (size() == 0);
+		}
+
+	_Alloc get_allocator() const
+		{	
+		return (_Myvec.get_allocator());
+		}
+
+	const_reference at(size_type _Off) const
+		{	
+		if (size() <= _Off)
+			_Xran();
+		return (*(begin() + _Off));
+		}
+
+	reference at(size_type _Off)
+		{	
+		if (size() <= _Off)
+			_Xran();
+		return (*(begin() + _Off));
+		}
+
+	const_reference operator[](size_type _Off) const
+		{	
+		return (*(begin() + _Off));
+		}
+
+	reference operator[](size_type _Off)
+		{	
+		return (*(begin() + _Off));
+		}
+
+	reference front()
+		{	
+		return (*begin());
+		}
+
+	const_reference front() const
+		{	
+		return (*begin());
+		}
+
+	reference back()
+		{	
+		return (*(end() - 1));
+		}
+
+	const_reference back() const
+		{	
+		return (*(end() - 1));
+		}
+
+	void push_back(bool _Val)
+		{	
+		insert(end(), _Val);
+		}
+
+	void pop_back()
+		{	
+		if (!empty())
+			erase(end() - 1);
+		}
+
+	template<class _Iter>
+		void assign(_Iter _First, _Iter _Last)
+		{	
+		_Assign(_First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		void _Assign(_Iter _Count, _Iter _Val, _Int_iterator_tag)
+		{	
+		_Assign_n((size_type)_Count, (bool)_Val);
+		}
+
+	template<class _Iter>
+		void _Assign(_Iter _First, _Iter _Last, input_iterator_tag)
+		{	
+		erase(begin(), end());
+		insert(begin(), _First, _Last);
+		}
+
+	void assign(size_type _Count, bool _Val)
+		{	
+		_Assign_n(_Count, _Val);
+		}
+
+	iterator insert(iterator _Where, bool _Val)
+		{	
+		size_type _Off = _Where - begin();
+		_Insert_n(_Where, (size_type)1, _Val);
+		return (begin() + _Off);
+		}
+
+	void insert(iterator _Where, size_type _Count, bool _Val)
+		{	
+		_Insert_n(_Where, _Count, _Val);
+		}
+
+	template<class _Iter>
+		void insert(iterator _Where, _Iter _First, _Iter _Last)
+		{	
+		_Insert(_Where, _First, _Last, _Iter_cat(_First));
+		}
+
+	template<class _Iter>
+		void _Insert(iterator _Where, _Iter _Count, _Iter _Val,
+			_Int_iterator_tag)
+		{	
+		_Insert_n(_Where, (size_type)_Count, (bool)_Val);
+		}
+
+	template<class _Iter>
+		void _Insert(iterator _Where, _Iter _First, _Iter _Last,
+			input_iterator_tag)
+		{	
+		size_type _Off = _Where - begin();
+
+		for (; _First != _Last; ++_First, ++_Off)
+			insert(begin() + _Off, *_First);
+		}
+
+	template<class _Iter>
+		void _Insert(iterator _Where,
+			_Iter _First, _Iter _Last,
+			forward_iterator_tag)
+		{	
+
+ 
+
+
+
+
+
+		size_type _Count = 0;
+		_Distance(_First, _Last, _Count);
+
+		size_type _Off = _Insert_x(_Where, _Count);
+		std::copy(_First, _Last, begin() + _Off);
+		}
+
+	iterator erase(iterator _Where)
+		{	
+		size_type _Off = _Where - begin();
+
+ 
+
+
+
+
+
+
+		std::copy(_Where + 1, end(), _Where);
+ 
+
+		_Trim(_Mysize - 1);
+		return (begin() + _Off);
+		}
+
+	iterator erase(iterator _First, iterator _Last)
+		{	
+		size_type _Off = _First - begin();
+
+ 
+
+
+
+
+
+
+
+
+		iterator _Next = std::copy(_Last, end(), _First);
+		_Trim(_Next - begin());
+ 
+
+		return (begin() + _Off);
+		}
+
+	void clear()
+		{	
+		erase(begin(), end());
+		}
+
+	void flip()
+		{	
+		for (_Vbtype::iterator _Next = _Myvec.begin();
+			_Next != _Myvec.end(); ++_Next)
+			*_Next = (_Vbase)~*_Next;
+		_Trim(_Mysize);
+		}
+
+	void swap(_Myt& _Right)
+		{	
+
+ 
+
+
+
+		std::swap(_Mysize, _Right._Mysize);
+		_Myvec.swap(_Right._Myvec);
+		}
+
+	static void swap(reference _Left, reference _Right)
+		{	
+		bool _Val = _Left;
+		_Left = _Right;
+		_Right = _Val;
+		}
+
+
+protected:
+	void _Assign_n(size_type _Count, bool _Val)
+		{	
+		erase(begin(), end());
+		_Insert_n(begin(), _Count, _Val);
+		}
+
+	void _Insert_n(iterator _Where,
+		size_type _Count, bool _Val)
+		{	
+		size_type _Off = _Insert_x(_Where, _Count);
+		fill(begin() + _Off, begin() + (_Off + _Count), _Val);
+		}
+
+	size_type _Insert_x(iterator _Where, size_type _Count)
+		{	
+		size_type _Off = _Where - begin();
+
+ 
+
+
+
+
+
+		if (_Count == 0)
+			;
+		else if (max_size() - size() < _Count)
+			_Xlen();	
+		else
+			{	
+			_Myvec.resize(_Nw(size() + _Count), 0);
+			if (size() == 0)
+				_Mysize += _Count;
+			else
+				{	
+				iterator _Oldend = end();
+				_Mysize += _Count;
+				copy_backward(begin() + _Off, _Oldend, end());
+				}
+
+ 
+
+
+
+			}
+		return (_Off);
+		}
+
+	static size_type _Nw(size_type _Count)
+		{	
+		return ((_Count + _VBITS - 1) / _VBITS);
+		}
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	void _Trim(size_type _Size)
+		{	
+		if (max_size() < _Size)
+			_Xlen();	
+		size_type _Words = _Nw(_Size);
+
+		if (_Words < _Myvec.size())
+			_Myvec.erase(_Myvec.begin() + _Words, _Myvec.end());
+		_Mysize = _Size;
+		_Size %= _VBITS;
+		if (0 < _Size)
+			_Myvec[_Words - 1] &= (_Vbase)((1 << _Size) - 1);
+		}
+
+	void _Xlen() const
+		{	
+		throw length_error("vector<bool> too long");
+		}
+
+	void _Xran() const
+		{	
+		throw out_of_range("invalid vector<bool> subscript");
+		}
+
+	size_type _Mysize;	
+	_Vbtype _Myvec;	
+	};
+
+typedef vector<bool, allocator<bool> > _Bvector;
+}
+
+
+  #pragma warning(default: 4244)
+#pragma warning(pop)
+#pragma pack(pop)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+int main () {
+    std::ostringstream output;
+
+    int ERROR_missing_result_type_before_the_local_function_parameter_macro_id21(); typedef ::boost::function_traits<boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(ERROR_missing_result_type_before_the_local_function_parameter_macro_id21))>::type>::result_type boost_local_auxXresult_type21;  typedef void (*boost_se_tag_0_21)(int & output );   typedef boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(boost::scope_exit::aux::wrap( boost::scope_exit::aux::deref(& output, (boost_se_tag_0_21)0))))>::type boost_se_wrapped_t_0_21; typedef  boost_se_wrapped_t_0_21::type boost_se_capture_t_0_21;   struct boost_se_params_t_21 {  typedef boost_se_capture_t_0_21 boost_se_param_t_0_21;   boost::scope_exit::aux::member< boost_se_param_t_0_21, boost_se_tag_0_21 > boost_se_param_0_21;   } boost_local_auxXparams21 = {    boost::scope_exit::aux::deref(& output, (boost_se_tag_0_21)0)   }; boost::scope_exit::aux::declared< boost::scope_exit::aux::resolve< sizeof(boost_local_auxXa
rgs) >::cmp1<0>::cmp2 > boost_local_auxXargs; boost_local_auxXargs.value = &boost_local_auxXparams21; class boost_local_auxXfunctor21 : public ::boost::local::aux::abstract_function< boost_local_auxXresult_type21  (  int n  , bool recursion    ), 1> { typedef boost_local_auxXresult_type21 (boost_local_auxXfunction_type) (  int n  , bool recursion    ); public: explicit boost_local_auxXfunctor21( void* binding_data) : boost_local_auxXbinds(static_cast< boost_se_params_t_21*>(binding_data)) { boost_local_auxXinit_recursion(); } boost_local_auxXresult_type21 operator()(  ::boost::function_traits< boost_local_auxXfunction_type>::arg1_type arg1 , ::boost::function_traits< boost_local_auxXfunction_type>::arg2_type arg2   ) { return boost_local_auxXbody(    boost_local_auxXbinds-> boost_se_param_0_21.value     ,  arg1 , arg2   ); } boost_local_auxXresult_type21 operator()(  ::boost::function_traits< boost_local_auxXfunction_type>::arg1_type arg1   ) { return boost_local_auxXbody(    boost_local_auxXbinds-> boost_se
_param_0_21.value     ,  arg1   ); } private: typedef ::boost::local::function<boost_local_auxXfunction_type, 1> boost_local_auxXfunctor_type;  typedef boost_se_params_t_21:: boost_se_param_t_0_21 & outputXboost_local_auxXtypeof_type ;     boost_se_params_t_21* boost_local_auxXbinds; boost_local_auxXresult_type21 boost_local_auxXbody(      boost_se_params_t_21:: boost_se_param_t_0_21  & output      ,  int n   , bool recursion  =  false   ) {
+        int result = 0;
+
+        if (n < 2 ) result = 1;
+        else result = n * factorial(n - 1, true); 
+
+        if (!recursion) output << result << " ";
+        return result;
+    } public: boost_local_auxXfunctor_type factorial; private: void boost_local_auxXinit_recursion() { factorial = *this; } } boost_local_auxXfunctorXfactorial( boost_local_auxXargs.value); boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(boost_local_auxXfunctorXfactorial.factorial))>::type factorial( boost_local_auxXfunctorXfactorial);
+
+    std::vector<int> v(3);
+    v[0] = 1; v[1] = 4; v[2] = 7;
+    std::for_each(v.begin(), v.end(), factorial);
+
+    std::cout << output.str() << std::endl;
+    return 0;
+}
+
+
Modified: sandbox/local/libs/local/params_name/03.cpp
==============================================================================
--- sandbox/local/libs/local/params_name/03.cpp	(original)
+++ sandbox/local/libs/local/params_name/03.cpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -36,3 +36,5 @@
         bind a, const bind this, const bind& d)
 
 
+BOOST_LOCAL_FUNCTION_NAME(l)
+
Added: sandbox/local/libs/local/params_name/04.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/params_name/04.cpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,12 @@
+
+int main() {
+    struct x;
+    x xx, yy;
+    struct x {};
+
+    xx = yy;
+
+
+    return 0;
+}
+
Added: sandbox/local/libs/local/params_name/05.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/params_name/05.cpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,40 @@
+
+
+#include <boost/variadic_macro_data/VariadicMacroData.hpp> // Proposed lib.
+#include <boost/preprocessor.hpp>
+#include <boost/preprocessor/facilities/is_empty.hpp>
+    
+VMD_DATA_SIZE(1, 2) // 2
+VMD_DATA_SIZE(1)    // 1
+VMD_DATA_SIZE()     // 1 not 0 :((
+
+#define PP_VA_EAT(...) /* must expand to nothing */
+
+#define PP_VA_SIZE_1OR0_(maybe_empty) \
+        BOOST_PP_IIF(BOOST_PP_IS_EMPTY(maybe_empty (/*exapnd empty */) ), 0, 1)
+
+#define PP_VA_SIZE_(size, ...) \
+    BOOST_PP_IIF(BOOST_PP_EQUAL(size, 1), \
+        PP_VA_SIZE_1OR0_ \
+    , \
+        size PP_VA_EAT \
+    )(__VA_ARGS__ BOOST_PP_EMPTY)
+
+#define PP_VA_SIZE(...) PP_VA_SIZE_(VMD_DATA_SIZE(__VA_ARGS__), __VA_ARGS__)
+    
+PP_VA_SIZE(1, 2)    // 2
+PP_VA_SIZE(1)       // 1
+PP_VA_SIZE()        // 0 :))
+
+
+
+#define PP_VA_IS_EMPTY(...) BOOST_PP_IS_EMPTY(__VA_ARGS__ BOOST_PP_EMPTY())
+
+
+#define X(...) PP_VA_IS_EMPTY(__VA_ARGS__)
+
+X(1)
+X()
+
+
+
Modified: sandbox/local/libs/local/params_name/boost/detail/preprocessor/nilseq.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/detail/preprocessor/nilseq.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/detail/preprocessor/nilseq.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -11,6 +11,7 @@
 #include <boost/preprocessor/seq.hpp>
 #include <boost/preprocessor/arithmetic/dec.hpp>
 #include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/logical/not.hpp>
 #include <boost/preprocessor/control/iif.hpp>
 #include <boost/preprocessor/tuple/eat.hpp>
 
@@ -28,6 +29,9 @@
 #define BOOST_DETAIL_PP_NILSEQ_IS_NIL(nilseq) \
     BOOST_PP_EQUAL(BOOST_DETAIL_PP_NILSEQ_SIZE(nilseq), 0)
 
+#define BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(nilseq) \
+    BOOST_PP_NOT(BOOST_DETAIL_PP_NILSEQ_IS_NIL(nilseq))
+
 // Assume nilseq is not NIL and removes leading `(NIL)`.
 #define BOOST_DETAIL_PP_NILSEQ_TO_SEQ(nilseq) \
     BOOST_PP_SEQ_TAIL(nilseq)
Modified: sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/binding.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/binding.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/binding.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -18,11 +18,6 @@
 #include <boost/preprocessor/seq/for_each_i.hpp>
 #include <boost/preprocessor/cat.hpp>
 
-// Undefine local function bound args global variable. Actual declaration of
-// this variable is made using SFINAE mechanisms by each local function macro.
-extern boost::scope_exit::aux::undeclared
-        BOOST_LOCAL_AUX_SYMBOL_ARGS_VARIABLE_NAME;
-
 // PRIVATE //
 
 // Adapted from `BOOST_SCOPE_EXIT_AUX_IMPL()`.
@@ -36,7 +31,8 @@
     BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
             BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_TAG_DECL, \
             id, all_bind_nilseq) \
-    BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I(BOOST_SCOPE_EXIT_AUX_CAPTURE_DECL, \
+    BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
+            BOOST_SCOPE_EXIT_AUX_CAPTURE_DECL, \
             (id, typename_keyword), all_bind_nilseq) \
     /* binding class */ \
     struct BOOST_SCOPE_EXIT_AUX_PARAMS_T(id) { \
Modified: sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/deduce_result_type.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/deduce_result_type.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/deduce_result_type.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -12,8 +12,8 @@
         id, typename_keyword) \
     /* declare function expr with preceeding result type and no param */ \
     /* result type here */ BOOST_LOCAL_AUX_SYMBOL_DEDUCE_RESULT_TYPE(id)(); \
-    typedef boost::function_tratis::result_type<BOOST_TYPEOF( \
-            BOOST_LOCAL_AUX_SYMBOL_DEDUCE_RESULT_TYPE(id))>::type \
+    typedef ::boost::function_traits<BOOST_TYPEOF( \
+            BOOST_LOCAL_AUX_SYMBOL_DEDUCE_RESULT_TYPE(id))>::result_type \
             BOOST_LOCAL_AUX_SYMBOL_RESULT_TYPE(id);
 
 #endif // #include guard
Modified: sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/functor.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/functor.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/code_/functor.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -21,20 +21,22 @@
 #include <boost/detail/preprocessor/nilseq.hpp>
 #include <boost/preprocessor/punctuation/comma_if.hpp>
 #include <boost/preprocessor/logical/bitand.hpp>
-#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/logical/bitand.hpp>
 #include <boost/preprocessor/logical/bitor.hpp>
 #include <boost/preprocessor/logical/or.hpp>
 #include <boost/preprocessor/arithmetic/inc.hpp>
 #include <boost/preprocessor/facilities/empty.hpp>
 #include <boost/preprocessor/control/iif.hpp>
-#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
 #include <boost/preprocessor/tuple/eat.hpp>
 
 // PRIVATE //
 
 // Expand to the function type `R (A1, ...)`.
-#define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_F_(sign_params, id) \
+#define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_F_( \
+        sign_params, id, has_type, type_name) \
     BOOST_LOCAL_AUX_SYMBOL_RESULT_TYPE(id) \
+    BOOST_PP_EXPR_IIF(has_type, (type_name) ) \
     ( \
         BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                 BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_UNBIND_DECL, ~, \
@@ -43,99 +45,122 @@
 
 #define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_CALL_(z, \
         sign_params, \
-        unbind_params, \
-        const_bind_names, has_const_bind_this, \
-        bind_names, has_bind_this, \
+        unbinds, \
+        const_binds, has_const_bind_this, \
+        binds, has_bind_this, \
         id) \
     BOOST_LOCAL_AUX_SYMBOL_RESULT_TYPE(id) \
     operator()( \
             BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                 BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_UNBIND_ARG_DECL, \
-                ~, unbind_params) \
+                ~, unbinds) \
             ) { \
         /* just forward call to member function with local func name */ \
         return BOOST_LOCAL_AUX_SYMBOL_BODY_FUNCTION_NAME( \
             BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                     BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_MAYBECONST_BIND, \
                     (id, 0 /* no offset */), \
-                    const_bind_names) \
+                    const_binds) \
             /* pass plain binds */ \
-            BOOST_PP_COMMA_IF(BOOST_PP_NOT( \
-                    BOOST_DETAIL_PP_NILSEQ_IS_NIL(bind_names))) \
+            BOOST_PP_COMMA_IF( \
+                BOOST_PP_BITAND( \
+                      BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(const_binds) \
+                    , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(binds) \
+                ) \
+            ) \
             BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                     BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_MAYBECONST_BIND, \
                     (id \
                     /* offset param index of # of preceeding */ \
                     /* const-bind params (could be 0)*/ \
-                    , BOOST_DETAIL_PP_NILSEQ_SIZE(const_bind_names) \
+                    , BOOST_DETAIL_PP_NILSEQ_SIZE(const_binds) \
                     ), \
-                    bind_names) \
+                    binds) \
             /* pass bind `this` */ \
-            BOOST_PP_COMMA_IF(BOOST_PP_BITOR( \
-                    has_const_bind_this, has_bind_this)) \
+            BOOST_PP_COMMA_IF( \
+                BOOST_PP_BITAND( \
+                      BOOST_PP_BITOR( \
+                          BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(const_binds) \
+                        , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(binds) \
+                      ) \
+                    , BOOST_PP_BITOR(has_const_bind_this, has_bind_this) \
+                ) \
+            ) \
             BOOST_PP_EXPR_IIF( \
                     BOOST_PP_BITOR(has_const_bind_this, has_bind_this), \
                 BOOST_LOCAL_AUX_SYMBOL_BINDS_VARIABLE_NAME-> \
                 BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_THIS_NAME \
             ) \
             /* pass unbind params */ \
-            BOOST_PP_COMMA_IF(BOOST_DETAIL_PP_NILSEQ_SIZE(unbind_params)) \
+            BOOST_PP_COMMA_IF( \
+                BOOST_PP_BITAND( \
+                      BOOST_PP_BITOR( \
+                          BOOST_PP_BITOR( \
+                              BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(const_binds) \
+                            , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(binds) \
+                          ) \
+                        , BOOST_PP_BITOR(has_const_bind_this, has_bind_this) \
+                      ) \
+                    , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(unbinds) \
+                ) \
+            ) \
             BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                     BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_UNBIND_ARG_NAME, \
-                    ~, unbind_params) \
+                    ~, unbinds) \
         ); \
     }
 
 // Return unbind params but without last (default) params specified by count.
 #define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_UNBIND_REMOVE_LAST_N_(n, \
-        unbind_params) \
+        unbinds) \
     /* must use PP_SEQ instead of PP_NILSEQ so resulting seq is still nil */ \
     BOOST_PP_SEQ_FIRST_N(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE( \
-            unbind_params), n), unbind_params)
+            unbinds), n), unbinds)
 
 #define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_CALL_FOR_DEFAULTS_(z, \
-        n, params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+        n, params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
     BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_CALL_(z \
         , BOOST_PP_TUPLE_ELEM(7, 0, \
-                params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+                params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
         /* remove last n default params */ \
         , BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_UNBIND_REMOVE_LAST_N_( \
                 n, \
                 BOOST_PP_TUPLE_ELEM(7, 1, \
-                        params_unbind_constbind_hasconstthis_bind_hasthis_id)) \
+                    params_unbinds_constbinds_hasconstthis_binds_hasthis_id)) \
         , BOOST_PP_TUPLE_ELEM(7, 2, \
-                params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+                params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
         , BOOST_PP_TUPLE_ELEM(7, 3, \
-                params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+                params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
         , BOOST_PP_TUPLE_ELEM(7, 4, \
-                params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+                params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
         , BOOST_PP_TUPLE_ELEM(7, 5, \
-                params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+                params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
         , BOOST_PP_TUPLE_ELEM(7, 6, \
-                params_unbind_constbind_hasconstthis_bind_hasthis_id) \
+                params_unbinds_constbinds_hasconstthis_binds_hasthis_id) \
     )
 
 // Adapted from `BOOST_SCOPE_EXIT_AUX_IMPL()`.
-#define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_( \
-        sign_params, \
-        unbind_params, defaults_count, \
-        const_bind_names, has_const_bind_this, \
-        bind_names, has_bind_this, \
+#define BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_(sign_params, \
+        unbinds, defaults_count, \
+        const_binds, has_const_bind_this, \
+        binds, has_bind_this, \
         id, typename_keyword) \
     class BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_CLASS_NAME(id) :  \
             public ::boost::local::aux::abstract_function< \
-                    BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_F_(sign_params, id), \
+                    BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_F_( \
+                            sign_params, id, 0 /* no type */, ~), \
                     defaults_count> { \
-        typedef BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_F_(sign_params, id) \
-                BOOST_LOCAL_AUX_SYMBOL_FUNCTION_TYPE; \
+        typedef BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_F_(sign_params, id, \
+                1 /* has type */, BOOST_LOCAL_AUX_SYMBOL_FUNCTION_TYPE); \
     public: \
         /* constructor */ \
-        explicit BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_CLASS_NAME(id)(void* binds) \
-            BOOST_PP_EXPR_IF(BOOST_LOCAL_AUX_PP_SIGN_PARAMS_HAVE_ANY_BIND( \
-                    sign_params), \
+        explicit BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_CLASS_NAME(id)( \
+                void* binding_data) \
+            BOOST_PP_EXPR_IIF(BOOST_PP_EXPAND( /* expand for MSVC */ \
+                    BOOST_LOCAL_AUX_PP_SIGN_PARAMS_HAVE_ANY_BIND(sign_params)),\
                 /* member init (not a macro call) */ \
                 : BOOST_LOCAL_AUX_SYMBOL_BINDS_VARIABLE_NAME(static_cast< \
-                        BOOST_SCOPE_EXIT_AUX_PARAMS_T(id)*>(binds)) \
+                        BOOST_SCOPE_EXIT_AUX_PARAMS_T(id)*>(binding_data)) \
             ) \
         { \
             /* init needs func name so programmed later by `NAME` macro */ \
@@ -146,8 +171,8 @@
                 /* PP_INC to handle no dflt (EXPAND for MVSC) */ \
                 BOOST_PP_EXPAND(BOOST_PP_INC(defaults_count)), \
                 BOOST_LOCAL_AUX_FUNCTION_CODE_FUNCTOR_CALL_FOR_DEFAULTS_,\
-                (sign_params, unbind_params, const_bind_names, \
-                        has_const_bind_this, bind_names, has_bind_this, id)) \
+                (sign_params, unbinds, const_binds, \
+                        has_const_bind_this, binds, has_bind_this, id)) \
     private: \
         /* this type symbol cannot have ID postfix because it is used */ \
         /* the `NAME` macro (because this symbol is within functor class */ \
@@ -163,15 +188,15 @@
         BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                 BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_CONST_TYPEDEF, \
                 (id, typename_keyword, 0 /* no offset */), \
-                const_bind_names) \
+                const_binds) \
         /* bind typeof types */ \
         BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                 BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_TYPEDEF, \
                 ( id, typename_keyword, \
                   /* offset param index of # of preceeding */ \
                   /* const-bindparams (could be 0)*/ \
-                  BOOST_DETAIL_PP_NILSEQ_SIZE(const_bind_names)),\
-                bind_names) \
+                  BOOST_DETAIL_PP_NILSEQ_SIZE(const_binds)),\
+                binds) \
         /* this (const or not) bind type */ \
         BOOST_PP_EXPR_IIF(has_const_bind_this, \
             typeof \
@@ -203,20 +228,31 @@
                 BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                         BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_CONST_BIND_DECL, \
                         (id, typename_keyword, 0 /* no offset */), \
-                        const_bind_names) \
+                        const_binds) \
                 /* plain binds */ \
-                BOOST_PP_COMMA_IF(BOOST_PP_NOT( \
-                        BOOST_DETAIL_PP_NILSEQ_IS_NIL(bind_names))) \
+                BOOST_PP_COMMA_IF( \
+                    BOOST_PP_BITAND( \
+                          BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(const_binds) \
+                        , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(binds) \
+                    ) \
+                ) \
                 BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                         BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_BIND_DECL, \
                         ( id, typename_keyword, \
                           /* offset param index of # of preceeding */ \
                           /* const-bindparams (could be 0)*/ \
-                          BOOST_DETAIL_PP_NILSEQ_SIZE(const_bind_names) ),\
-                        bind_names) \
+                          BOOST_DETAIL_PP_NILSEQ_SIZE(const_binds) ),\
+                        binds) \
                 /* `this` bind */ \
-                BOOST_PP_COMMA_IF(BOOST_PP_BITOR( \
-                        has_const_bind_this, has_bind_this)) \
+                BOOST_PP_COMMA_IF( \
+                    BOOST_PP_BITAND( \
+                          BOOST_PP_BITOR( \
+                              BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(const_binds) \
+                            , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(binds) \
+                          ) \
+                        , BOOST_PP_BITOR(has_const_bind_this, has_bind_this) \
+                    ) \
+                ) \
                 BOOST_PP_EXPR_IIF(has_const_bind_this, \
                     typename_keyword ::contract::detail::add_pointed_const< \
                         BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_THIS_TYPE(id) \
@@ -227,10 +263,23 @@
                     BOOST_LOCAL_CONFIG_THIS_PARAM_NAME \
                 ) \
                 /* unbind params (last because they can have defaults) */ \
-                BOOST_PP_COMMA_IF(BOOST_DETAIL_PP_NILSEQ_SIZE(unbind_params)) \
+                BOOST_PP_COMMA_IF( \
+                    BOOST_PP_BITAND( \
+                          BOOST_PP_BITOR( \
+                              BOOST_PP_BITOR( \
+                                  BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL( \
+                                        const_binds) \
+                                , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(binds) \
+                              ) \
+                            , BOOST_PP_BITOR(has_const_bind_this, \
+                                    has_bind_this) \
+                          ) \
+                        , BOOST_DETAIL_PP_NILSEQ_IS_NOT_NIL(unbinds) \
+                    ) \
+                ) \
                 BOOST_DETAIL_PP_NILSEQ_FOR_EACH_I( \
                         BOOST_LOCAL_AUX_FUNCTION_CODE_PARAM_UNBIND_DECL_WITH_DEFAULT, \
-                        ~, unbind_params) \
+                        ~, unbinds) \
             ) /* end body function params */ \
             /* user local function definition `{ ... }` will follow here */ \
     /* `NAME` macro will close function class decl `};` here */ 
Added: sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/name.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/name.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_LOCAL_AUX_FUNCTION_NAME_HPP_
+#define BOOST_LOCAL_AUX_FUNCTION_NAME_HPP_
+
+#include "../symbol.hpp"
+// For BOOST_TYPEOF.
+#include "../scope_exit/scope_exit.hpp" // Use this lib's ScopeExit impl.
+
+// PRIVATE //
+
+#define BOOST_LOCAL_AUX_FUNCTION_NAME_(local_function_name, id) \
+    /* `PARAMS() { ... }` expandsion here -- still within functor class */ \
+    /* class functor ## __LINE__ { ... */ \
+    public: \
+        /* member var with function name for recursive calls (must be */ \
+        /* public because is it also used by this macro but outside */ \
+        /* the functor class to deduce the functor type */ \
+        BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_TYPE local_function_name; \
+    private: \
+        /* called by the constructor to init member variable for recursion */ \
+        void BOOST_LOCAL_AUX_SYMBOL_INIT_RECURSION_FUNCTION_NAME() { \
+            local_function_name = *this; \
+        } \
+    /* declares object for local class functor (but this functor cannot be */ \
+    /* passed as template parameter) */ \
+    } BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_OBJECT_NAME(local_function_name)( \
+            BOOST_LOCAL_AUX_SYMBOL_ARGS_VARIABLE_NAME.value); \
+    /* declares actual functor for the local function (of type */ \
+    /* local::function which can be passed as template parameter */ \
+    BOOST_TYPEOF(BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_OBJECT_NAME( \
+            local_function_name).local_function_name) local_function_name( \
+            BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_OBJECT_NAME(local_function_name));
+
+// PUBLIC //
+
+#define BOOST_LOCAL_AUX_FUNCTION_NAME(local_function_name) \
+    BOOST_LOCAL_AUX_FUNCTION_NAME_(local_function_name, __LINE__) \
+
+#endif // #include guard
+
+
Modified: sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/params.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/params.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/function_macros/params.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -5,11 +5,18 @@
 #include "code_/binding.hpp"
 #include "code_/functor.hpp"
 #include "code_/deduce_result_type.hpp"
+#include "../symbol.hpp"
+#include "../scope_exit/scope_exit.hpp" // Use this lib's ScopeExit impl.
 #include "../preprocessor/sign/parse_params.hpp"
 #include "../preprocessor/sign/params_error.hpp"
 #include <boost/mpl/assert.hpp>
 #include <boost/preprocessor/control/iif.hpp>
 
+// Undefine local function bound args global variable. Actual declaration of
+// this variable is made using SFINAE mechanisms by each local function macro.
+extern boost::scope_exit::aux::undeclared
+        BOOST_LOCAL_AUX_SYMBOL_ARGS_VARIABLE_NAME;
+
 // PRIVATE //
 
 #define BOOST_LOCAL_AUX_FUNCTION_PARAMS_OK_(sign_params, id, typename_keyword) \
Modified: sandbox/local/libs/local/params_name/boost/local/aux_/preprocessor/sign/params_any_bind.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/aux_/preprocessor/sign/params_any_bind.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/preprocessor/sign/params_any_bind.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -49,8 +49,8 @@
 // including `this` if bound (const or not).
 #define BOOST_LOCAL_AUX_PP_SIGN_PARAMS_ALL_BIND(params) \
     (BOOST_PP_NIL) \
-    BOOST_PP_EXPR_IIF(BOOST_LOCAL_AUX_PP_SIGN_PARAMS_HAVE_ANY_BIND_THIS( \
-            params), \
+    BOOST_PP_EXPR_IIF(BOOST_PP_EXPAND( /* expand for MSVC */ \
+            BOOST_LOCAL_AUX_PP_SIGN_PARAMS_HAVE_ANY_BIND_THIS(params)), \
         (this) /* never by reference because `&this` is not valid in C++ */ \
     ) \
     BOOST_PP_IIF(BOOST_LOCAL_AUX_PP_SIGN_PARAMS_HAVE_CONST_BIND(params), \
Modified: sandbox/local/libs/local/params_name/boost/local/aux_/symbol.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/aux_/symbol.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/aux_/symbol.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -8,6 +8,8 @@
 #ifndef BOOST_LOCAL_AUX_SYMBOL_HPP_
 #define BOOST_LOCAL_AUX_SYMBOL_HPP_
 
+/** @todo Remove any macro define here that is not use anywhere. */
+
 #include "../config.hpp"
 #include <boost/preprocessor/cat.hpp>
 
@@ -53,11 +55,9 @@
 #define BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_CLASS_NAME(id) \
     BOOST_LOCAL_AUX_INTERNAL_SYMBOL(BOOST_PP_CAT(functor, id))
 
-#define BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_OBJECT_NAME( \
-        local_function_name) \
+#define BOOST_LOCAL_AUX_SYMBOL_FUNCTOR_OBJECT_NAME(local_function_name) \
     BOOST_LOCAL_AUX_INTERNAL_SYMBOL(BOOST_PP_CAT(BOOST_PP_CAT( \
-            object, BOOST_LOCAL_AUX_SYMBOL_INFIX), \
-            local_function_name))
+            functor, BOOST_LOCAL_AUX_SYMBOL_INFIX), local_function_name))
 
 #define BOOST_LOCAL_AUX_SYMBOL_BINDS_VARIABLE_NAME \
     BOOST_LOCAL_AUX_INTERNAL_SYMBOL(binds)
Modified: sandbox/local/libs/local/params_name/boost/local/function.hpp
==============================================================================
--- sandbox/local/libs/local/params_name/boost/local/function.hpp	(original)
+++ sandbox/local/libs/local/params_name/boost/local/function.hpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -8,6 +8,7 @@
 #define BOOST_LOCAL_FUNCTION_HPP_
 
 #include "aux_/function_macros/params.hpp"
+#include "aux_/function_macros/name.hpp"
 #include <boost/preprocessor/facilities/empty.hpp>
 #include <boost/config.hpp> // Handle variadic macros.
 
@@ -39,7 +40,7 @@
 #endif // BOOST_NO_VARIADIC_MACROS
 
 #define BOOST_LOCAL_FUNCTION_NAME(name) \
-    name
+    BOOST_LOCAL_AUX_FUNCTION_NAME(name)
 
 namespace boost { namespace local {
 
Added: sandbox/local/libs/local/params_name/factorial.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/params_name/factorial.cpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,39 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+// Use recursion, default parameters, and bind by non-const reference.
+
+//[ factorial_cpp
+#include <boost/local/function.hpp>
+#include <iostream>
+#include <sstream>
+#include <algorithm>
+#include <vector>
+
+int main () {
+    std::ostringstream output;
+
+    int BOOST_LOCAL_FUNCTION_PARAMS( (int n) (bool recursion)(default false)
+            (bind& output) ) {
+        int result = 0;
+
+        if (n < 2 ) result = 1;
+        else result = n * factorial(n - 1, true); // Recursive call.
+
+        if (!recursion) output << result << " ";
+        return result;
+    } BOOST_LOCAL_FUNCTION_NAME(factorial)
+
+    std::vector<int> v(3);
+    v[0] = 1; v[1] = 4; v[2] = 7;
+    std::for_each(v.begin(), v.end(), factorial);
+
+    std::cout << output.str() << std::endl;
+    return 0;
+}
+//]
+
Added: sandbox/local/libs/local/params_name/factorial_va.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/params_name/factorial_va.cpp	2011-02-20 12:29:45 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,40 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+// Use recursion, default parameters, and bind by non-const reference
+// (syntax for variadic macros only).
+
+//[ factorial_va_cpp
+#include <boost/local/function.hpp>
+#include <iostream>
+#include <sstream>
+#include <algorithm>
+#include <vector>
+
+int main () {
+    std::ostringstream output;
+
+    int BOOST_LOCAL_FUNCTION_PARAMS(int n, bool recursion, default false,
+            bind& output) {
+        int result = 0;
+
+        if (n < 2 ) result = 1;
+        else result = n * factorial(n - 1, true); // Recursive call.
+
+        if (!recursion) output << result << " ";
+        return result;
+    } BOOST_LOCAL_FUNCTION_NAME(factorial)
+
+    std::vector<int> v(3);
+    v[0] = 1; v[1] = 4; v[2] = 7;
+    std::for_each(v.begin(), v.end(), factorial);
+
+    std::cout << output.str() << std::endl;
+    return 0;
+}
+//]
+