/* Generated by Cython 0.13 on Sun Jan 30 11:58:18 2011 */

#define PY_SSIZE_T_CLEAN
#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#else

#include <stddef.h> /* For offsetof */
#ifndef offsetof
#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif

#if !defined(WIN32) && !defined(MS_WINDOWS)
  #ifndef __stdcall
    #define __stdcall
  #endif
  #ifndef __cdecl
    #define __cdecl
  #endif
  #ifndef __fastcall
    #define __fastcall
  #endif
#endif

#ifndef DL_IMPORT
  #define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
  #define DL_EXPORT(t) t
#endif

#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif

#if PY_VERSION_HEX < 0x02040000
  #define METH_COEXIST 0
  #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
  #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
#endif

#if PY_VERSION_HEX < 0x02050000
  typedef int Py_ssize_t;
  #define PY_SSIZE_T_MAX INT_MAX
  #define PY_SSIZE_T_MIN INT_MIN
  #define PY_FORMAT_SIZE_T ""
  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
  #define PyInt_AsSsize_t(o)   PyInt_AsLong(o)
  #define PyNumber_Index(o)    PyNumber_Int(o)
  #define PyIndex_Check(o)     PyNumber_Check(o)
  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
#endif

#if PY_VERSION_HEX < 0x02060000
  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
  #define PyVarObject_HEAD_INIT(type, size) \
          PyObject_HEAD_INIT(type) size,
  #define PyType_Modified(t)

  typedef struct {
     void *buf;
     PyObject *obj;
     Py_ssize_t len;
     Py_ssize_t itemsize;
     int readonly;
     int ndim;
     char *format;
     Py_ssize_t *shape;
     Py_ssize_t *strides;
     Py_ssize_t *suboffsets;
     void *internal;
  } Py_buffer;

  #define PyBUF_SIMPLE 0
  #define PyBUF_WRITABLE 0x0001
  #define PyBUF_FORMAT 0x0004
  #define PyBUF_ND 0x0008
  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)

#endif

#if PY_MAJOR_VERSION < 3
  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
#endif

#if PY_MAJOR_VERSION >= 3
  #define Py_TPFLAGS_CHECKTYPES 0
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif

#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif

#if PY_MAJOR_VERSION >= 3
  #define PyBaseString_Type            PyUnicode_Type
  #define PyStringObject               PyUnicodeObject
  #define PyString_Type                PyUnicode_Type
  #define PyString_Check               PyUnicode_Check
  #define PyString_CheckExact          PyUnicode_CheckExact
#endif

#if PY_VERSION_HEX < 0x02060000
  #define PyBytesObject                PyStringObject
  #define PyBytes_Type                 PyString_Type
  #define PyBytes_Check                PyString_Check
  #define PyBytes_CheckExact           PyString_CheckExact
  #define PyBytes_FromString           PyString_FromString
  #define PyBytes_FromStringAndSize    PyString_FromStringAndSize
  #define PyBytes_FromFormat           PyString_FromFormat
  #define PyBytes_DecodeEscape         PyString_DecodeEscape
  #define PyBytes_AsString             PyString_AsString
  #define PyBytes_AsStringAndSize      PyString_AsStringAndSize
  #define PyBytes_Size                 PyString_Size
  #define PyBytes_AS_STRING            PyString_AS_STRING
  #define PyBytes_GET_SIZE             PyString_GET_SIZE
  #define PyBytes_Repr                 PyString_Repr
  #define PyBytes_Concat               PyString_Concat
  #define PyBytes_ConcatAndDel         PyString_ConcatAndDel
  #define PySet_Check(obj)             PyObject_TypeCheck(obj, &PySet_Type)
  #define PyFrozenSet_Check(obj)       PyObject_TypeCheck(obj, &PyFrozenSet_Type)
#endif

#ifndef PySet_CheckExact
#  define PySet_CheckExact(obj)          (Py_TYPE(obj) == &PySet_Type)
#endif

#if PY_MAJOR_VERSION >= 3
  #define PyInt_Type                   PyLong_Type
  #define PyInt_Check(op)              PyLong_Check(op)
  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
  #define PyInt_FromString             PyLong_FromString
  #define PyInt_FromUnicode            PyLong_FromUnicode
  #define PyInt_FromLong               PyLong_FromLong
  #define PyInt_FromSize_t             PyLong_FromSize_t
  #define PyInt_FromSsize_t            PyLong_FromSsize_t
  #define PyInt_AsLong                 PyLong_AsLong
  #define PyInt_AS_LONG                PyLong_AS_LONG
  #define PyInt_AsSsize_t              PyLong_AsSsize_t
  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
#endif

#if PY_MAJOR_VERSION >= 3
  #define PyBoolObject PyLongObject
#endif


#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#else
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
#endif

#if PY_MAJOR_VERSION >= 3
  #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func))
#endif

#if PY_VERSION_HEX < 0x02050000
  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
#else
  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
#endif

#if PY_VERSION_HEX < 0x02050000
  #define __Pyx_NAMESTR(n) ((char *)(n))
  #define __Pyx_DOCSTR(n)  ((char *)(n))
#else
  #define __Pyx_NAMESTR(n) (n)
  #define __Pyx_DOCSTR(n)  (n)
#endif

#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif

#if defined(WIN32) || defined(MS_WINDOWS)
#define _USE_MATH_DEFINES
#endif
#include <math.h>
#define __PYX_HAVE_API__zmq__core__message
#include "errno.h"
#include "string.h"
#include "zmq_compat.h"
#include "zmq.h"
#include "zmq_utils.h"
#include "pyversion_compat.h"
#include "stdio.h"
#include "pythread.h"

/* inline attribute */
#ifndef CYTHON_INLINE
  #if defined(__GNUC__)
    #define CYTHON_INLINE __inline__
  #elif defined(_MSC_VER)
    #define CYTHON_INLINE __inline
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_INLINE inline
  #else
    #define CYTHON_INLINE 
  #endif
#endif

/* unused attribute */
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
#     define CYTHON_UNUSED __attribute__ ((__unused__)) 
#   else
#     define CYTHON_UNUSED
#   endif
# elif defined(__ICC) || defined(__INTEL_COMPILER)
#   define CYTHON_UNUSED __attribute__ ((__unused__)) 
# else
#   define CYTHON_UNUSED 
# endif
#endif

typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/


/* Type Conversion Predeclarations */

#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s)
#define __Pyx_PyBytes_AsUString(s)   ((unsigned char*) PyBytes_AsString(s))

#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);

static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);

#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))


#ifdef __GNUC__
/* Test for GCC > 2.95 */
#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 
#define likely(x)   __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#else /* __GNUC__ > 2 ... */
#define likely(x)   (x)
#define unlikely(x) (x)
#endif /* __GNUC__ > 2 ... */
#else /* __GNUC__ */
#define likely(x)   (x)
#define unlikely(x) (x)
#endif /* __GNUC__ */
    
static PyObject *__pyx_m;
static PyObject *__pyx_b;
static PyObject *__pyx_empty_tuple;
static PyObject *__pyx_empty_bytes;
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm= __FILE__;
static const char *__pyx_filename;


static const char *__pyx_f[] = {
  "message.pyx",
  "buffers.pxd",
  "bool.pxd",
};

/* Type declarations */

/* "/tmp/zmq/core/message.pxd":32
 * #-----------------------------------------------------------------------------
 * 
 * cdef class MessageTracker(object):             # <<<<<<<<<<<<<<
 *     """A class for tracking if 0MQ is done using one or more messages."""
 * 
 */

struct __pyx_obj_3zmq_4core_7message_MessageTracker {
  PyObject_HEAD
  PyObject *queues;
  PyObject *peers;
};

/* "/tmp/zmq/core/message.pxd":39
 * 
 * 
 * cdef class Message:             # <<<<<<<<<<<<<<
 *     """A Message class for non-copy send/recvs."""
 * 
 */

struct __pyx_obj_3zmq_4core_7message_Message {
  PyObject_HEAD
  struct __pyx_vtabstruct_3zmq_4core_7message_Message *__pyx_vtab;
  zmq_msg_t zmq_msg;
  PyObject *_data;
  PyObject *_buffer;
  PyObject *_bytes;
  int _failed_init;
  PyObject *tracker_queue;
  PyObject *tracker;
};


/* "/tmp/zmq/core/message.pyx":178
 * 
 * 
 * cdef class Message:             # <<<<<<<<<<<<<<
 *     """Message(data=None, track=False)
 * 
 */

struct __pyx_vtabstruct_3zmq_4core_7message_Message {
  struct __pyx_obj_3zmq_4core_7message_Message *(*fast_copy)(struct __pyx_obj_3zmq_4core_7message_Message *);
  PyObject *(*_getbuffer)(struct __pyx_obj_3zmq_4core_7message_Message *);
};
static struct __pyx_vtabstruct_3zmq_4core_7message_Message *__pyx_vtabptr_3zmq_4core_7message_Message;

#ifndef CYTHON_REFNANNY
  #define CYTHON_REFNANNY 0
#endif

#if CYTHON_REFNANNY
  typedef struct {
    void (*INCREF)(void*, PyObject*, int);
    void (*DECREF)(void*, PyObject*, int);
    void (*GOTREF)(void*, PyObject*, int);
    void (*GIVEREF)(void*, PyObject*, int);
    void* (*SetupContext)(const char*, int, const char*);
    void (*FinishContext)(void**);
  } __Pyx_RefNannyAPIStruct;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
  static __Pyx_RefNannyAPIStruct * __Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule((char *)modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
  end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
  }
  #define __Pyx_RefNannySetupContext(name)           void *__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
  #define __Pyx_RefNannyFinishContext()           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
  #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0)
#else
  #define __Pyx_RefNannySetupContext(name)
  #define __Pyx_RefNannyFinishContext()
  #define __Pyx_INCREF(r) Py_INCREF(r)
  #define __Pyx_DECREF(r) Py_DECREF(r)
  #define __Pyx_GOTREF(r)
  #define __Pyx_GIVEREF(r)
  #define __Pyx_XDECREF(r) Py_XDECREF(r)
#endif /* CYTHON_REFNANNY */
#define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0)
#define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0)

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/


static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}


#define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                    __Pyx_GetItemInt_List_Fast(o, i) : \
                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
    if (likely(o != Py_None)) {
        if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
            PyObject *r = PyList_GET_ITEM(o, i);
            Py_INCREF(r);
            return r;
        }
        else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
            PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
            Py_INCREF(r);
            return r;
        }
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                    __Pyx_GetItemInt_Tuple_Fast(o, i) : \
                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
    if (likely(o != Py_None)) {
        if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, i);
            Py_INCREF(r);
            return r;
        }
        else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
            PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
            Py_INCREF(r);
            return r;
        }
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}


#define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
                                                    __Pyx_GetItemInt_Fast(o, i) : \
                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))

static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
    PyObject *r;
    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
        r = PyList_GET_ITEM(o, i);
        Py_INCREF(r);
    }
    else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
        r = PyTuple_GET_ITEM(o, i);
        Py_INCREF(r);
    }
    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) {
        r = PySequence_GetItem(o, i);
    }
    else {
        r = __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
    }
    return r;
}

static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
    const char* function_name, int kw_allowed); /*proto*/

#if PY_VERSION_HEX < 0x02050000
#ifndef PyAnySet_CheckExact

#define PyAnySet_CheckExact(ob) \
    ((ob)->ob_type == &PySet_Type || \
     (ob)->ob_type == &PyFrozenSet_Type)

#define PySet_New(iterable) \
    PyObject_CallFunctionObjArgs((PyObject *)&PySet_Type, (iterable), NULL)

#define Pyx_PyFrozenSet_New(iterable) \
    PyObject_CallFunctionObjArgs((PyObject *)&PyFrozenSet_Type, (iterable), NULL)

#define PySet_Size(anyset) \
    PyObject_Size((anyset))

#define PySet_Contains(anyset, key) \
    PySequence_Contains((anyset), (key))

#define PySet_Pop(set) \
    PyObject_CallMethod(set, (char *)"pop", NULL)

static CYTHON_INLINE int PySet_Clear(PyObject *set) {
    PyObject *ret = PyObject_CallMethod(set, (char *)"clear", NULL);
    if (!ret) return -1;
    Py_DECREF(ret); return 0;
}

static CYTHON_INLINE int PySet_Discard(PyObject *set, PyObject *key) {
    PyObject *ret = PyObject_CallMethod(set, (char *)"discard", (char *)"O", key);
    if (!ret) return -1;
    Py_DECREF(ret); return 0;
}

static CYTHON_INLINE int PySet_Add(PyObject *set, PyObject *key) {
    PyObject *ret = PyObject_CallMethod(set, (char *)"add", (char *)"O", key);
    if (!ret) return -1;
    Py_DECREF(ret); return 0;
}

#endif /* PyAnySet_CheckExact (<= Py2.4) */

#if PY_VERSION_HEX < 0x02040000
#ifndef Py_SETOBJECT_H
#define Py_SETOBJECT_H

static PyTypeObject *__Pyx_PySet_Type = NULL;
static PyTypeObject *__Pyx_PyFrozenSet_Type = NULL;

#define PySet_Type (*__Pyx_PySet_Type)
#define PyFrozenSet_Type (*__Pyx_PyFrozenSet_Type)

#define PyAnySet_Check(ob) \
    (PyAnySet_CheckExact(ob) || \
     PyType_IsSubtype((ob)->ob_type, &PySet_Type) || \
     PyType_IsSubtype((ob)->ob_type, &PyFrozenSet_Type))

#define PyFrozenSet_CheckExact(ob) ((ob)->ob_type == &PyFrozenSet_Type)

static int __Pyx_Py23SetsImport(void) {
    PyObject *sets=0, *Set=0, *ImmutableSet=0;

    sets = PyImport_ImportModule((char *)"sets");
    if (!sets) goto bad;
    Set = PyObject_GetAttrString(sets, (char *)"Set");
    if (!Set) goto bad;
    ImmutableSet = PyObject_GetAttrString(sets, (char *)"ImmutableSet");
    if (!ImmutableSet) goto bad;
    Py_DECREF(sets);

    __Pyx_PySet_Type       = (PyTypeObject*) Set;
    __Pyx_PyFrozenSet_Type = (PyTypeObject*) ImmutableSet;

    return 0;

 bad:
    Py_XDECREF(sets);
    Py_XDECREF(Set);
    Py_XDECREF(ImmutableSet);
    return -1;
}

#else
static int __Pyx_Py23SetsImport(void) { return 0; }
#endif /* !Py_SETOBJECT_H */
#endif /* < Py2.4  */
#endif /* < Py2.5  */

static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name, PyObject* kw_name); /*proto*/

static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/

static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/

static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/

#ifndef __PYX_FORCE_INIT_THREADS
  #if PY_VERSION_HEX < 0x02040200
    #define __PYX_FORCE_INIT_THREADS 1
  #else
    #define __PYX_FORCE_INIT_THREADS 0
  #endif
#endif

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/

static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);

static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);

static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);

static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);

static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);

static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);

static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);

static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);

static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *);

static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);

static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);

static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);

static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);

static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);

static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);

static void __Pyx_WriteUnraisable(const char *name); /*proto*/

static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /*proto*/

static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/

static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, long size, int strict);  /*proto*/

static PyObject *__Pyx_ImportModule(const char *name); /*proto*/

static void __Pyx_AddTraceback(const char *funcname); /*proto*/

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
/* Module declarations from zmq.core.czmq */

/* Module declarations from cpython.version */

/* Module declarations from cpython.ref */

/* Module declarations from cpython.exc */

/* Module declarations from cpython.module */

/* Module declarations from cpython.mem */

/* Module declarations from cpython.tuple */

/* Module declarations from cpython.list */

/* Module declarations from libc.stdio */

/* Module declarations from cpython.object */

/* Module declarations from cpython.sequence */

/* Module declarations from cpython.mapping */

/* Module declarations from cpython.iterator */

/* Module declarations from cpython.type */

/* Module declarations from cpython.number */

/* Module declarations from cpython.int */

/* Module declarations from __builtin__ */

/* Module declarations from cpython.bool */

static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0;
/* Module declarations from cpython.long */

/* Module declarations from cpython.float */

/* Module declarations from cpython.complex */

/* Module declarations from cpython.string */

/* Module declarations from cpython.unicode */

/* Module declarations from cpython.dict */

/* Module declarations from cpython.instance */

/* Module declarations from cpython.function */

/* Module declarations from cpython.method */

/* Module declarations from cpython.weakref */

/* Module declarations from cpython.getargs */

/* Module declarations from cpython.pythread */

/* Module declarations from cpython.cobject */

/* Module declarations from cpython.oldbuffer */

/* Module declarations from cpython.set */

/* Module declarations from cpython.buffer */

/* Module declarations from cpython.bytes */

/* Module declarations from cpython.pycapsule */

/* Module declarations from cpython */

/* Module declarations from buffers */

static CYTHON_INLINE int __pyx_f_7buffers_newstyle_available(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7buffers_memoryview_available(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7buffers_oldstyle_available(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7buffers_check_buffer(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer(PyObject *, int, int, void **, Py_ssize_t *, Py_ssize_t *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_r(PyObject *, void **, Py_ssize_t *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_w(PyObject *, void **, Py_ssize_t *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_3(void *, Py_ssize_t, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_2(void *, Py_ssize_t, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer(void *, Py_ssize_t, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_r(void *, Py_ssize_t); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_w(void *, Py_ssize_t); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject(PyObject *, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_r(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_w(PyObject *); /*proto*/
/* Module declarations from zmq.core.message */

static PyTypeObject *__pyx_ptype_3zmq_4core_7message_MessageTracker = 0;
static PyTypeObject *__pyx_ptype_3zmq_4core_7message_Message = 0;
static CYTHON_INLINE PyObject *__pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes(zmq_msg_t *); /*proto*/
static void __pyx_f_3zmq_4core_7message_free_python_msg(void *, void *); /*proto*/
#define __Pyx_MODULE_NAME "zmq.core.message"
int __pyx_module_is_main_zmq__core__message = 0;

/* Implementation of zmq.core.message */
static PyObject *__pyx_builtin_property;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_AttributeError;
static PyObject *__pyx_builtin_NotImplementedError;
static char __pyx_k_1[] = "Not a tracked message";
static char __pyx_k_2[] = "Require Queues or Messages, not %s";
static char __pyx_k_4[] = "Unicode objects not allowed. Only: str/bytes, buffer interfaces.";
static char __pyx_k_6[] = "%r does not provide a buffer interface.";
static char __pyx_k_7[] = "";
static char __pyx_k_8[] = "New style buffers not available.";
static char __pyx_k_9[] = "Old style buffers not available.";
static char __pyx_k_10[] = "0MQ Message related classes.";
static char __pyx_k_11[] = "zmq.core.error";
static char __pyx_k_12[] = "zmq.utils.strtypes";
static char __pyx_k_13[] = "MessageTracker.__init__ (line 95)";
static char __pyx_k_14[] = "MessageTracker.done (line 122)";
static char __pyx_k_15[] = "MessageTracker.wait (line 132)";
static char __pyx_k_16[] = "MessageTracker.old_wait (line 172)";
static char __pyx_k_17[] = "Message.__init__ (line 247)";
static char __pyx_k_18[] = "Message.__copy__ (line 260)";
static char __pyx_k_19[] = "Message.__str__ (line 296)";
static char __pyx_k_20[] = "Message.done (line 308)";
static char __pyx_k_21[] = "Message.wait (line 314)";
static char __pyx_k_22[] = "Message.buffer (line 350)";
static char __pyx_k_23[] = "Message.bytes (line 357)";
static char __pyx_k__B[] = "B";
static char __pyx_k__add[] = "add";
static char __pyx_k__buf[] = "buf";
static char __pyx_k__get[] = "get";
static char __pyx_k__len[] = "len";
static char __pyx_k__put[] = "put";
static char __pyx_k__char[] = "char";
static char __pyx_k__data[] = "data";
static char __pyx_k__done[] = "done";
static char __pyx_k__time[] = "time";
static char __pyx_k__wait[] = "wait";
static char __pyx_k__Empty[] = "Empty";
static char __pyx_k__Queue[] = "Queue";
static char __pyx_k___data[] = "_data";
static char __pyx_k__bytes[] = "bytes";
static char __pyx_k__dtype[] = "dtype";
static char __pyx_k__empty[] = "empty";
static char __pyx_k__peers[] = "peers";
static char __pyx_k__queue[] = "queue";
static char __pyx_k__shape[] = "shape";
static char __pyx_k__sleep[] = "sleep";
static char __pyx_k__track[] = "track";
static char __pyx_k___bytes[] = "_bytes";
static char __pyx_k__buffer[] = "buffer";
static char __pyx_k__decode[] = "decode";
static char __pyx_k__format[] = "format";
static char __pyx_k__queues[] = "queues";
static char __pyx_k__Message[] = "Message";
static char __pyx_k__NotDone[] = "NotDone";
static char __pyx_k____all__[] = "__all__";
static char __pyx_k____str__[] = "__str__";
static char __pyx_k___buffer[] = "_buffer";
static char __pyx_k__timeout[] = "timeout";
static char __pyx_k__tracker[] = "tracker";
static char __pyx_k__unicode[] = "unicode";
static char __pyx_k__zmq_msg[] = "zmq_msg";
static char __pyx_k__ZMQError[] = "ZMQError";
static char __pyx_k____copy__[] = "__copy__";
static char __pyx_k____init__[] = "__init__";
static char __pyx_k____main__[] = "__main__";
static char __pyx_k____test__[] = "__test__";
static char __pyx_k__itemsize[] = "itemsize";
static char __pyx_k__old_wait[] = "old_wait";
static char __pyx_k__property[] = "property";
static char __pyx_k__typecode[] = "typecode";
static char __pyx_k__TypeError[] = "TypeError";
static char __pyx_k__fast_copy[] = "fast_copy";
static char __pyx_k__ValueError[] = "ValueError";
static char __pyx_k___getbuffer[] = "_getbuffer";
static char __pyx_k__basestring[] = "basestring";
static char __pyx_k___failed_init[] = "_failed_init";
static char __pyx_k__tracker_queue[] = "tracker_queue";
static char __pyx_k__AttributeError[] = "AttributeError";
static char __pyx_k__MessageTracker[] = "MessageTracker";
static char __pyx_k__NotImplementedError[] = "NotImplementedError";
static PyObject *__pyx_kp_s_1;
static PyObject *__pyx_n_s_11;
static PyObject *__pyx_n_s_12;
static PyObject *__pyx_kp_u_13;
static PyObject *__pyx_kp_u_14;
static PyObject *__pyx_kp_u_15;
static PyObject *__pyx_kp_u_16;
static PyObject *__pyx_kp_u_17;
static PyObject *__pyx_kp_u_18;
static PyObject *__pyx_kp_u_19;
static PyObject *__pyx_kp_s_2;
static PyObject *__pyx_kp_u_20;
static PyObject *__pyx_kp_u_21;
static PyObject *__pyx_kp_u_22;
static PyObject *__pyx_kp_u_23;
static PyObject *__pyx_kp_s_4;
static PyObject *__pyx_kp_s_6;
static PyObject *__pyx_kp_s_7;
static PyObject *__pyx_kp_s_8;
static PyObject *__pyx_kp_s_9;
static PyObject *__pyx_n_s__AttributeError;
static PyObject *__pyx_n_s__B;
static PyObject *__pyx_n_s__Empty;
static PyObject *__pyx_n_s__Message;
static PyObject *__pyx_n_s__MessageTracker;
static PyObject *__pyx_n_s__NotDone;
static PyObject *__pyx_n_s__NotImplementedError;
static PyObject *__pyx_n_s__Queue;
static PyObject *__pyx_n_s__TypeError;
static PyObject *__pyx_n_s__ValueError;
static PyObject *__pyx_n_s__ZMQError;
static PyObject *__pyx_n_s____all__;
static PyObject *__pyx_n_s____copy__;
static PyObject *__pyx_n_s____init__;
static PyObject *__pyx_n_s____main__;
static PyObject *__pyx_n_s____str__;
static PyObject *__pyx_n_s____test__;
static PyObject *__pyx_n_s___buffer;
static PyObject *__pyx_n_s___bytes;
static PyObject *__pyx_n_s___data;
static PyObject *__pyx_n_s___failed_init;
static PyObject *__pyx_n_s___getbuffer;
static PyObject *__pyx_n_s__add;
static PyObject *__pyx_n_s__basestring;
static PyObject *__pyx_n_s__buf;
static PyObject *__pyx_n_s__buffer;
static PyObject *__pyx_n_s__bytes;
static PyObject *__pyx_n_s__char;
static PyObject *__pyx_n_s__data;
static PyObject *__pyx_n_s__decode;
static PyObject *__pyx_n_s__done;
static PyObject *__pyx_n_s__dtype;
static PyObject *__pyx_n_s__empty;
static PyObject *__pyx_n_s__fast_copy;
static PyObject *__pyx_n_s__format;
static PyObject *__pyx_n_s__get;
static PyObject *__pyx_n_s__itemsize;
static PyObject *__pyx_n_s__len;
static PyObject *__pyx_n_s__old_wait;
static PyObject *__pyx_n_s__peers;
static PyObject *__pyx_n_s__property;
static PyObject *__pyx_n_s__put;
static PyObject *__pyx_n_s__queue;
static PyObject *__pyx_n_s__queues;
static PyObject *__pyx_n_s__shape;
static PyObject *__pyx_n_s__sleep;
static PyObject *__pyx_n_s__time;
static PyObject *__pyx_n_s__timeout;
static PyObject *__pyx_n_s__track;
static PyObject *__pyx_n_s__tracker;
static PyObject *__pyx_n_s__tracker_queue;
static PyObject *__pyx_n_s__typecode;
static PyObject *__pyx_n_s__unicode;
static PyObject *__pyx_n_s__wait;
static PyObject *__pyx_n_s__zmq_msg;
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_neg_1;
static PyObject *__pyx_int_604800;
static PyObject *__pyx_k_3;
static PyObject *__pyx_k_5;

/* "/tmp/zmq/core/message.pyx":55
 * 
 * 
 * cdef void free_python_msg(void *data, void *hint) with gil:             # <<<<<<<<<<<<<<
 *     """A function for DECREF'ing Python based messages."""
 *     if hint != NULL:
 */

static  void __pyx_f_3zmq_4core_7message_free_python_msg(void *__pyx_v_data, void *__pyx_v_hint) {
  PyObject *__pyx_v_tracker_queue;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyGILState_STATE _save = PyGILState_Ensure();
  __Pyx_RefNannySetupContext("free_python_msg");
  __pyx_v_tracker_queue = Py_None; __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":57
 * cdef void free_python_msg(void *data, void *hint) with gil:
 *     """A function for DECREF'ing Python based messages."""
 *     if hint != NULL:             # <<<<<<<<<<<<<<
 *         tracker_queue = (<tuple>hint)[1]
 *         Py_DECREF(<object>hint)
 */
  __pyx_t_1 = (__pyx_v_hint != NULL);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":58
 *     """A function for DECREF'ing Python based messages."""
 *     if hint != NULL:
 *         tracker_queue = (<tuple>hint)[1]             # <<<<<<<<<<<<<<
 *         Py_DECREF(<object>hint)
 *         if isinstance(tracker_queue, Queue):
 */
    __pyx_t_2 = __Pyx_GetItemInt_Tuple(((PyObject *)__pyx_v_hint), 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_v_tracker_queue);
    __pyx_v_tracker_queue = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "/tmp/zmq/core/message.pyx":59
 *     if hint != NULL:
 *         tracker_queue = (<tuple>hint)[1]
 *         Py_DECREF(<object>hint)             # <<<<<<<<<<<<<<
 *         if isinstance(tracker_queue, Queue):
 *             # don't assert before DECREF:
 */
    Py_DECREF(((PyObject *)__pyx_v_hint));

    /* "/tmp/zmq/core/message.pyx":60
 *         tracker_queue = (<tuple>hint)[1]
 *         Py_DECREF(<object>hint)
 *         if isinstance(tracker_queue, Queue):             # <<<<<<<<<<<<<<
 *             # don't assert before DECREF:
 *             # assert tracker_queue.empty(), "somebody else wrote to my Queue!"
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__Queue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_tracker_queue, __pyx_t_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {

      /* "/tmp/zmq/core/message.pyx":63
 *             # don't assert before DECREF:
 *             # assert tracker_queue.empty(), "somebody else wrote to my Queue!"
 *             tracker_queue.put(0)             # <<<<<<<<<<<<<<
 *         tracker_queue = None
 * 
 */
      __pyx_t_2 = PyObject_GetAttr(__pyx_v_tracker_queue, __pyx_n_s__put); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L4;
    }
    __pyx_L4:;

    /* "/tmp/zmq/core/message.pyx":64
 *             # assert tracker_queue.empty(), "somebody else wrote to my Queue!"
 *             tracker_queue.put(0)
 *         tracker_queue = None             # <<<<<<<<<<<<<<
 * 
 * cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF(__pyx_v_tracker_queue);
    __pyx_v_tracker_queue = Py_None;
    goto __pyx_L3;
  }
  __pyx_L3:;

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_WriteUnraisable("zmq.core.message.free_python_msg");
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_tracker_queue);
  __Pyx_RefNannyFinishContext();
  PyGILState_Release(_save);
}

/* "/tmp/zmq/core/message.pyx":66
 *         tracker_queue = None
 * 
 * cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):             # <<<<<<<<<<<<<<
 *     """ Copy the data from a zmq_msg_t """
 *     cdef char *data_c = NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes(zmq_msg_t *__pyx_v_zmq_msg) {
  char *__pyx_v_data_c;
  Py_ssize_t __pyx_v_data_len_c;
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("copy_zmq_msg_bytes");

  /* "/tmp/zmq/core/message.pyx":68
 * cdef inline object copy_zmq_msg_bytes(zmq_msg_t *zmq_msg):
 *     """ Copy the data from a zmq_msg_t """
 *     cdef char *data_c = NULL             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t data_len_c
 *     with nogil:
 */
  __pyx_v_data_c = NULL;

  /* "/tmp/zmq/core/message.pyx":70
 *     cdef char *data_c = NULL
 *     cdef Py_ssize_t data_len_c
 *     with nogil:             # <<<<<<<<<<<<<<
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)
 */
  { PyThreadState *_save;
    Py_UNBLOCK_THREADS
    /*try:*/ {

      /* "/tmp/zmq/core/message.pyx":71
 *     cdef Py_ssize_t data_len_c
 *     with nogil:
 *         data_c = <char *>zmq_msg_data(zmq_msg)             # <<<<<<<<<<<<<<
 *         data_len_c = zmq_msg_size(zmq_msg)
 *     return PyBytes_FromStringAndSize(data_c, data_len_c)
 */
      __pyx_v_data_c = ((char *)zmq_msg_data(__pyx_v_zmq_msg));

      /* "/tmp/zmq/core/message.pyx":72
 *     with nogil:
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)             # <<<<<<<<<<<<<<
 *     return PyBytes_FromStringAndSize(data_c, data_len_c)
 * 
 */
      __pyx_v_data_len_c = zmq_msg_size(__pyx_v_zmq_msg);
    }

    /* "/tmp/zmq/core/message.pyx":70
 *     cdef char *data_c = NULL
 *     cdef Py_ssize_t data_len_c
 *     with nogil:             # <<<<<<<<<<<<<<
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)
 */
    /*finally:*/ {
      Py_BLOCK_THREADS
    }
  }

  /* "/tmp/zmq/core/message.pyx":73
 *         data_c = <char *>zmq_msg_data(zmq_msg)
 *         data_len_c = zmq_msg_size(zmq_msg)
 *     return PyBytes_FromStringAndSize(data_c, data_len_c)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)PyBytes_FromStringAndSize(__pyx_v_data_c, __pyx_v_data_len_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("zmq.core.message.copy_zmq_msg_bytes");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":95
 *     """
 * 
 *     def __init__(self, *towatch):             # <<<<<<<<<<<<<<
 *         """MessageTracker(*towatch)
 * 
 */

static int __pyx_pf_3zmq_4core_7message_14MessageTracker___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker___init__[] = "MessageTracker(*towatch)\n\n        Create a message tracker to track a set of mesages.\n\n        Parameters\n        ----------\n        *towatch : tuple of Queue, MessageTracker, Message instances.\n            This list of objects to track. This class can track the low-level\n            Queues used by the Message class, other MessageTrackers or \n            actual Messsages.\n        ";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__;
static int __pyx_pf_3zmq_4core_7message_14MessageTracker___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_towatch = 0;
  PyObject *__pyx_v_obj;
  int __pyx_r;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("__init__");
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_towatch = __pyx_args;
  __pyx_v_obj = Py_None; __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":107
 *             actual Messsages.
 *         """
 *         self.queues = set()             # <<<<<<<<<<<<<<
 *         self.peers = set()
 *         for obj in towatch:
 */
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->queues);
  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->queues));
  ((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->queues = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "/tmp/zmq/core/message.pyx":108
 *         """
 *         self.queues = set()
 *         self.peers = set()             # <<<<<<<<<<<<<<
 *         for obj in towatch:
 *             if isinstance(obj, Queue):
 */
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_GIVEREF(((PyObject *)__pyx_t_1));
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers);
  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers));
  ((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "/tmp/zmq/core/message.pyx":109
 *         self.queues = set()
 *         self.peers = set()
 *         for obj in towatch:             # <<<<<<<<<<<<<<
 *             if isinstance(obj, Queue):
 *                 self.queues.add(obj)
 */
  if (likely(((PyObject *)__pyx_v_towatch) != Py_None)) {
    __pyx_t_2 = 0; __pyx_t_1 = ((PyObject *)__pyx_v_towatch); __Pyx_INCREF(__pyx_t_1);
  } else {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  for (;;) {
    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
    __Pyx_DECREF(__pyx_v_obj);
    __pyx_v_obj = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "/tmp/zmq/core/message.pyx":110
 *         self.peers = set()
 *         for obj in towatch:
 *             if isinstance(obj, Queue):             # <<<<<<<<<<<<<<
 *                 self.queues.add(obj)
 *             elif isinstance(obj, MessageTracker):
 */
    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__Queue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {

      /* "/tmp/zmq/core/message.pyx":111
 *         for obj in towatch:
 *             if isinstance(obj, Queue):
 *                 self.queues.add(obj)             # <<<<<<<<<<<<<<
 *             elif isinstance(obj, MessageTracker):
 *                 self.peers.add(obj)
 */
      __pyx_t_5 = PySet_Add(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->queues), __pyx_v_obj); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L7;
    }

    /* "/tmp/zmq/core/message.pyx":112
 *             if isinstance(obj, Queue):
 *                 self.queues.add(obj)
 *             elif isinstance(obj, MessageTracker):             # <<<<<<<<<<<<<<
 *                 self.peers.add(obj)
 *             elif isinstance(obj, Message):
 */
    __pyx_t_4 = PyObject_TypeCheck(__pyx_v_obj, ((PyTypeObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_MessageTracker))); 
    if (__pyx_t_4) {

      /* "/tmp/zmq/core/message.pyx":113
 *                 self.queues.add(obj)
 *             elif isinstance(obj, MessageTracker):
 *                 self.peers.add(obj)             # <<<<<<<<<<<<<<
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:
 */
      __pyx_t_5 = PySet_Add(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers), __pyx_v_obj); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L7;
    }

    /* "/tmp/zmq/core/message.pyx":114
 *             elif isinstance(obj, MessageTracker):
 *                 self.peers.add(obj)
 *             elif isinstance(obj, Message):             # <<<<<<<<<<<<<<
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")
 */
    __pyx_t_4 = PyObject_TypeCheck(__pyx_v_obj, ((PyTypeObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_Message))); 
    if (__pyx_t_4) {

      /* "/tmp/zmq/core/message.pyx":115
 *                 self.peers.add(obj)
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:             # <<<<<<<<<<<<<<
 *                     raise ValueError("Not a tracked message")
 *                 self.peers.add(obj.tracker)
 */
      __pyx_t_3 = PyObject_GetAttr(__pyx_v_obj, __pyx_n_s__tracker); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = (!__pyx_t_4);
      if (__pyx_t_6) {

        /* "/tmp/zmq/core/message.pyx":116
 *             elif isinstance(obj, Message):
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")             # <<<<<<<<<<<<<<
 *                 self.peers.add(obj.tracker)
 *             else:
 */
        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
        PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_1));
        __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
        __pyx_t_7 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_Raise(__pyx_t_7, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        goto __pyx_L8;
      }
      __pyx_L8:;

      /* "/tmp/zmq/core/message.pyx":117
 *                 if not obj.tracker:
 *                     raise ValueError("Not a tracked message")
 *                 self.peers.add(obj.tracker)             # <<<<<<<<<<<<<<
 *             else:
 *                 raise TypeError("Require Queues or Messages, not %s"%type(obj))
 */
      __pyx_t_7 = PyObject_GetAttr(__pyx_v_obj, __pyx_n_s__tracker); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = PySet_Add(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers), __pyx_t_7); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7;
    }
    /*else*/ {

      /* "/tmp/zmq/core/message.pyx":119
 *                 self.peers.add(obj.tracker)
 *             else:
 *                 raise TypeError("Require Queues or Messages, not %s"%type(obj))             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
      __pyx_t_7 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_2), ((PyObject *)Py_TYPE(__pyx_v_obj))); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_7));
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_7));
      __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
      __pyx_t_7 = 0;
      __pyx_t_7 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_L7:;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.__init__");
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_towatch);
  __Pyx_DECREF(__pyx_v_obj);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":122
 * 
 *     @property
 *     def done(self):             # <<<<<<<<<<<<<<
 *         """Is 0MQ completely done with the messages being tracked."""
 *         for queue in self.queues:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_done(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker_done[] = "Is 0MQ completely done with the messages being tracked.";
static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_done(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_v_queue;
  PyObject *__pyx_v_pm;
  PyObject *__pyx_r = NULL;
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("done");
  __pyx_v_queue = Py_None; __Pyx_INCREF(Py_None);
  __pyx_v_pm = Py_None; __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":124
 *     def done(self):
 *         """Is 0MQ completely done with the messages being tracked."""
 *         for queue in self.queues:             # <<<<<<<<<<<<<<
 *             if queue.empty():
 *                 return False
 */
  __pyx_t_1 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->queues)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  for (;;) {
    {
      __pyx_t_3 = PyIter_Next(__pyx_t_2);
      if (!__pyx_t_3) {
        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF(__pyx_v_queue);
    __pyx_v_queue = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "/tmp/zmq/core/message.pyx":125
 *         """Is 0MQ completely done with the messages being tracked."""
 *         for queue in self.queues:
 *             if queue.empty():             # <<<<<<<<<<<<<<
 *                 return False
 *         for pm in self.peers:
 */
    __pyx_t_3 = PyObject_GetAttr(__pyx_v_queue, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_5) {

      /* "/tmp/zmq/core/message.pyx":126
 *         for queue in self.queues:
 *             if queue.empty():
 *                 return False             # <<<<<<<<<<<<<<
 *         for pm in self.peers:
 *             if not pm.done:
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L0;
      goto __pyx_L7;
    }
    __pyx_L7:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "/tmp/zmq/core/message.pyx":127
 *             if queue.empty():
 *                 return False
 *         for pm in self.peers:             # <<<<<<<<<<<<<<
 *             if not pm.done:
 *                 return False
 */
  __pyx_t_1 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  for (;;) {
    {
      __pyx_t_4 = PyIter_Next(__pyx_t_2);
      if (!__pyx_t_4) {
        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF(__pyx_v_pm);
    __pyx_v_pm = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "/tmp/zmq/core/message.pyx":128
 *                 return False
 *         for pm in self.peers:
 *             if not pm.done:             # <<<<<<<<<<<<<<
 *                 return False
 *         return True
 */
    __pyx_t_4 = PyObject_GetAttr(__pyx_v_pm, __pyx_n_s__done); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = (!__pyx_t_5);
    if (__pyx_t_6) {

      /* "/tmp/zmq/core/message.pyx":129
 *         for pm in self.peers:
 *             if not pm.done:
 *                 return False             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L0;
      goto __pyx_L10;
    }
    __pyx_L10:;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "/tmp/zmq/core/message.pyx":130
 *             if not pm.done:
 *                 return False
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     def wait(self, timeout=-1):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.done");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_queue);
  __Pyx_DECREF(__pyx_v_pm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":132
 *         return True
 * 
 *     def wait(self, timeout=-1):             # <<<<<<<<<<<<<<
 *         """mt.wait(timeout=-1)
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker_wait[] = "mt.wait(timeout=-1)\n\n        Wait until 0MQ is completely done with the messages, then return.\n\n        Parameters\n        ----------\n        timeout : int\n            Maximum time in (s) to wait before raising NotDone.\n\n        Returns\n        -------\n        Raises NotDone if `timeout` reached before I am done.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_v_tic;
  PyObject *__pyx_v_remaining;
  int __pyx_v_done;
  PyObject *__pyx_v_queue;
  PyObject *__pyx_v_toc;
  PyObject *__pyx_v_peer;
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__timeout,0};
  __Pyx_RefNannySetupContext("wait");
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_int_neg_1);
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__timeout);
        if (value) { values[0] = value; kw_args--; }
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "wait") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_timeout = values[0];
  } else {
    __pyx_v_timeout = ((PyObject *)__pyx_int_neg_1);
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: __pyx_v_timeout = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.wait");
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_v_tic = Py_None; __Pyx_INCREF(Py_None);
  __pyx_v_remaining = Py_None; __Pyx_INCREF(Py_None);
  __pyx_v_queue = Py_None; __Pyx_INCREF(Py_None);
  __pyx_v_toc = Py_None; __Pyx_INCREF(Py_None);
  __pyx_v_peer = Py_None; __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":146
 *         Raises NotDone if `timeout` reached before I am done.
 *         """
 *         tic = time.time()             # <<<<<<<<<<<<<<
 *         if timeout is False or timeout < 0:
 *             remaining = 3600*24*7 # a week
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_v_tic);
  __pyx_v_tic = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "/tmp/zmq/core/message.pyx":147
 *         """
 *         tic = time.time()
 *         if timeout is False or timeout < 0:             # <<<<<<<<<<<<<<
 *             remaining = 3600*24*7 # a week
 *         else:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = (__pyx_v_timeout == __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_3) {
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_timeout, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = __pyx_t_4;
  } else {
    __pyx_t_5 = __pyx_t_3;
  }
  if (__pyx_t_5) {

    /* "/tmp/zmq/core/message.pyx":148
 *         tic = time.time()
 *         if timeout is False or timeout < 0:
 *             remaining = 3600*24*7 # a week             # <<<<<<<<<<<<<<
 *         else:
 *             remaining = timeout
 */
    __Pyx_INCREF(__pyx_int_604800);
    __Pyx_DECREF(__pyx_v_remaining);
    __pyx_v_remaining = __pyx_int_604800;
    goto __pyx_L6;
  }
  /*else*/ {

    /* "/tmp/zmq/core/message.pyx":150
 *             remaining = 3600*24*7 # a week
 *         else:
 *             remaining = timeout             # <<<<<<<<<<<<<<
 *         done = False
 *         try:
 */
    __Pyx_INCREF(__pyx_v_timeout);
    __Pyx_DECREF(__pyx_v_remaining);
    __pyx_v_remaining = __pyx_v_timeout;
  }
  __pyx_L6:;

  /* "/tmp/zmq/core/message.pyx":151
 *         else:
 *             remaining = timeout
 *         done = False             # <<<<<<<<<<<<<<
 *         try:
 *             for queue in self.queues:
 */
  __pyx_v_done = 0;

  /* "/tmp/zmq/core/message.pyx":152
 *             remaining = timeout
 *         done = False
 *         try:             # <<<<<<<<<<<<<<
 *             for queue in self.queues:
 *                 if remaining < 0:
 */
  {
    PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
    __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
    __Pyx_XGOTREF(__pyx_save_exc_type);
    __Pyx_XGOTREF(__pyx_save_exc_value);
    __Pyx_XGOTREF(__pyx_save_exc_tb);
    /*try:*/ {

      /* "/tmp/zmq/core/message.pyx":153
 *         done = False
 *         try:
 *             for queue in self.queues:             # <<<<<<<<<<<<<<
 *                 if remaining < 0:
 *                     raise NotDone
 */
      __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->queues)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
      __Pyx_GOTREF(__pyx_t_1);
      for (;;) {
        {
          __pyx_t_2 = PyIter_Next(__pyx_t_1);
          if (!__pyx_t_2) {
            if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_v_queue);
        __pyx_v_queue = __pyx_t_2;
        __pyx_t_2 = 0;

        /* "/tmp/zmq/core/message.pyx":154
 *         try:
 *             for queue in self.queues:
 *                 if remaining < 0:             # <<<<<<<<<<<<<<
 *                     raise NotDone
 *                 queue.get(timeout=remaining)
 */
        __pyx_t_2 = PyObject_RichCompare(__pyx_v_remaining, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (__pyx_t_5) {

          /* "/tmp/zmq/core/message.pyx":155
 *             for queue in self.queues:
 *                 if remaining < 0:
 *                     raise NotDone             # <<<<<<<<<<<<<<
 *                 queue.get(timeout=remaining)
 *                 queue.put(0)
 */
          __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_Raise(__pyx_t_2, 0, 0);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
          goto __pyx_L17;
        }
        __pyx_L17:;

        /* "/tmp/zmq/core/message.pyx":156
 *                 if remaining < 0:
 *                     raise NotDone
 *                 queue.get(timeout=remaining)             # <<<<<<<<<<<<<<
 *                 queue.put(0)
 *                 toc = time.time()
 */
        __pyx_t_2 = PyObject_GetAttr(__pyx_v_queue, __pyx_n_s__get); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(((PyObject *)__pyx_t_7));
        if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__timeout), __pyx_v_remaining) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __pyx_t_8 = PyEval_CallObjectWithKeywords(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

        /* "/tmp/zmq/core/message.pyx":157
 *                     raise NotDone
 *                 queue.get(timeout=remaining)
 *                 queue.put(0)             # <<<<<<<<<<<<<<
 *                 toc = time.time()
 *                 remaining -= (toc-tic)
 */
        __pyx_t_8 = PyObject_GetAttr(__pyx_v_queue, __pyx_n_s__put); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        __pyx_t_2 = PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

        /* "/tmp/zmq/core/message.pyx":158
 *                 queue.get(timeout=remaining)
 *                 queue.put(0)
 *                 toc = time.time()             # <<<<<<<<<<<<<<
 *                 remaining -= (toc-tic)
 *                 tic = toc
 */
        __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__time); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_v_toc);
        __pyx_v_toc = __pyx_t_2;
        __pyx_t_2 = 0;

        /* "/tmp/zmq/core/message.pyx":159
 *                 queue.put(0)
 *                 toc = time.time()
 *                 remaining -= (toc-tic)             # <<<<<<<<<<<<<<
 *                 tic = toc
 *         except Empty:
 */
        __pyx_t_2 = PyNumber_Subtract(__pyx_v_toc, __pyx_v_tic); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7 = PyNumber_InPlaceSubtract(__pyx_v_remaining, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_v_remaining);
        __pyx_v_remaining = __pyx_t_7;
        __pyx_t_7 = 0;

        /* "/tmp/zmq/core/message.pyx":160
 *                 toc = time.time()
 *                 remaining -= (toc-tic)
 *                 tic = toc             # <<<<<<<<<<<<<<
 *         except Empty:
 *             raise NotDone
 */
        __Pyx_INCREF(__pyx_v_toc);
        __Pyx_DECREF(__pyx_v_tic);
        __pyx_v_tic = __pyx_v_toc;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_XDECREF(__pyx_save_exc_type); __pyx_save_exc_type = 0;
    __Pyx_XDECREF(__pyx_save_exc_value); __pyx_save_exc_value = 0;
    __Pyx_XDECREF(__pyx_save_exc_tb); __pyx_save_exc_tb = 0;
    goto __pyx_L14_try_end;
    __pyx_L7_error:;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "/tmp/zmq/core/message.pyx":161
 *                 remaining -= (toc-tic)
 *                 tic = toc
 *         except Empty:             # <<<<<<<<<<<<<<
 *             raise NotDone
 * 
 */
    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__Empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = PyErr_ExceptionMatches(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_9) {
      __Pyx_AddTraceback("zmq.core.message.MessageTracker.wait");
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_2);

      /* "/tmp/zmq/core/message.pyx":162
 *                 tic = toc
 *         except Empty:
 *             raise NotDone             # <<<<<<<<<<<<<<
 * 
 *         for peer in self.peers:
 */
      __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L8_exception_handled;
    }
    __pyx_L9_except_error:;
    __Pyx_XGIVEREF(__pyx_save_exc_type);
    __Pyx_XGIVEREF(__pyx_save_exc_value);
    __Pyx_XGIVEREF(__pyx_save_exc_tb);
    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
    goto __pyx_L1_error;
    __pyx_L8_exception_handled:;
    __Pyx_XGIVEREF(__pyx_save_exc_type);
    __Pyx_XGIVEREF(__pyx_save_exc_value);
    __Pyx_XGIVEREF(__pyx_save_exc_tb);
    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
    __pyx_L14_try_end:;
  }

  /* "/tmp/zmq/core/message.pyx":164
 *             raise NotDone
 * 
 *         for peer in self.peers:             # <<<<<<<<<<<<<<
 *             if remaining < 0:
 *                 raise NotDone
 */
  __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)__pyx_v_self)->peers)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  for (;;) {
    {
      __pyx_t_7 = PyIter_Next(__pyx_t_2);
      if (!__pyx_t_7) {
        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        break;
      }
      __Pyx_GOTREF(__pyx_t_7);
    }
    __Pyx_DECREF(__pyx_v_peer);
    __pyx_v_peer = __pyx_t_7;
    __pyx_t_7 = 0;

    /* "/tmp/zmq/core/message.pyx":165
 * 
 *         for peer in self.peers:
 *             if remaining < 0:             # <<<<<<<<<<<<<<
 *                 raise NotDone
 *             peer.wait(timeout=remaining)
 */
    __pyx_t_7 = PyObject_RichCompare(__pyx_v_remaining, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_5) {

      /* "/tmp/zmq/core/message.pyx":166
 *         for peer in self.peers:
 *             if remaining < 0:
 *                 raise NotDone             # <<<<<<<<<<<<<<
 *             peer.wait(timeout=remaining)
 *             toc = time.time()
 */
      __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_Raise(__pyx_t_7, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L22;
    }
    __pyx_L22:;

    /* "/tmp/zmq/core/message.pyx":167
 *             if remaining < 0:
 *                 raise NotDone
 *             peer.wait(timeout=remaining)             # <<<<<<<<<<<<<<
 *             toc = time.time()
 *             remaining -= (toc-tic)
 */
    __pyx_t_7 = PyObject_GetAttr(__pyx_v_peer, __pyx_n_s__wait); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__timeout), __pyx_v_remaining) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __pyx_t_8 = PyEval_CallObjectWithKeywords(__pyx_t_7, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "/tmp/zmq/core/message.pyx":168
 *                 raise NotDone
 *             peer.wait(timeout=remaining)
 *             toc = time.time()             # <<<<<<<<<<<<<<
 *             remaining -= (toc-tic)
 *             tic = toc
 */
    __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = PyObject_GetAttr(__pyx_t_8, __pyx_n_s__time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_v_toc);
    __pyx_v_toc = __pyx_t_8;
    __pyx_t_8 = 0;

    /* "/tmp/zmq/core/message.pyx":169
 *             peer.wait(timeout=remaining)
 *             toc = time.time()
 *             remaining -= (toc-tic)             # <<<<<<<<<<<<<<
 *             tic = toc
 * 
 */
    __pyx_t_8 = PyNumber_Subtract(__pyx_v_toc, __pyx_v_tic); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = PyNumber_InPlaceSubtract(__pyx_v_remaining, __pyx_t_8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_v_remaining);
    __pyx_v_remaining = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "/tmp/zmq/core/message.pyx":170
 *             toc = time.time()
 *             remaining -= (toc-tic)
 *             tic = toc             # <<<<<<<<<<<<<<
 * 
 *     def old_wait(self):
 */
    __Pyx_INCREF(__pyx_v_toc);
    __Pyx_DECREF(__pyx_v_tic);
    __pyx_v_tic = __pyx_v_toc;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.wait");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_tic);
  __Pyx_DECREF(__pyx_v_remaining);
  __Pyx_DECREF(__pyx_v_queue);
  __Pyx_DECREF(__pyx_v_toc);
  __Pyx_DECREF(__pyx_v_peer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":172
 *             tic = toc
 * 
 *     def old_wait(self):             # <<<<<<<<<<<<<<
 *         """If the new wait works, remove this method."""
 *         while not self.done:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_old_wait(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_14MessageTracker_old_wait[] = "If the new wait works, remove this method.";
static PyObject *__pyx_pf_3zmq_4core_7message_14MessageTracker_old_wait(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("old_wait");

  /* "/tmp/zmq/core/message.pyx":174
 *     def old_wait(self):
 *         """If the new wait works, remove this method."""
 *         while not self.done:             # <<<<<<<<<<<<<<
 *             time.sleep(.001)
 * 
 */
  while (1) {
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__done); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = (!__pyx_t_2);
    if (!__pyx_t_3) break;

    /* "/tmp/zmq/core/message.pyx":175
 *         """If the new wait works, remove this method."""
 *         while not self.done:
 *             time.sleep(.001)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__sleep); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyFloat_FromDouble(.001); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("zmq.core.message.MessageTracker.old_wait");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":200
 *     """
 * 
 *     def __cinit__(self, object data=None, track=False, **kwargs):             # <<<<<<<<<<<<<<
 *         cdef int rc
 *         cdef char *data_c = NULL
 */

static int __pyx_pf_3zmq_4core_7message_7Message___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_track = 0;
  PyObject *__pyx_v_kwargs = 0;
  int __pyx_v_rc;
  char *__pyx_v_data_c;
  Py_ssize_t __pyx_v_data_len_c;
  PyObject *__pyx_v_hint;
  int __pyx_r;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,&__pyx_n_s__track,0};
  __Pyx_RefNannySetupContext("__cinit__");
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return -1;
  __Pyx_GOTREF(__pyx_v_kwargs);
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = __pyx_k_3;
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data);
        if (value) { values[0] = value; kw_args--; }
      }
      case  1:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__track);
        if (value) { values[1] = value; kw_args--; }
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_data = values[0];
    __pyx_v_track = values[1];
  } else {
    __pyx_v_data = ((PyObject *)Py_None);
    __pyx_v_track = __pyx_k_3;
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: __pyx_v_track = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_AddTraceback("zmq.core.message.Message.__cinit__");
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_v_hint = Py_None; __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":202
 *     def __cinit__(self, object data=None, track=False, **kwargs):
 *         cdef int rc
 *         cdef char *data_c = NULL             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t data_len_c=0
 *         cdef object hint
 */
  __pyx_v_data_c = NULL;

  /* "/tmp/zmq/core/message.pyx":203
 *         cdef int rc
 *         cdef char *data_c = NULL
 *         cdef Py_ssize_t data_len_c=0             # <<<<<<<<<<<<<<
 *         cdef object hint
 * 
 */
  __pyx_v_data_len_c = 0;

  /* "/tmp/zmq/core/message.pyx":207
 * 
 *         # Save the data object in case the user wants the the data as a str.
 *         self._data = data             # <<<<<<<<<<<<<<
 *         self._failed_init = True  # bool switch for dealloc
 *         self._buffer = None       # buffer view of data
 */
  __Pyx_INCREF(__pyx_v_data);
  __Pyx_GIVEREF(__pyx_v_data);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data = __pyx_v_data;

  /* "/tmp/zmq/core/message.pyx":208
 *         # Save the data object in case the user wants the the data as a str.
 *         self._data = data
 *         self._failed_init = True  # bool switch for dealloc             # <<<<<<<<<<<<<<
 *         self._buffer = None       # buffer view of data
 *         self._bytes = None        # bytes copy of data
 */
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init = 1;

  /* "/tmp/zmq/core/message.pyx":209
 *         self._data = data
 *         self._failed_init = True  # bool switch for dealloc
 *         self._buffer = None       # buffer view of data             # <<<<<<<<<<<<<<
 *         self._bytes = None        # bytes copy of data
 * 
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer = Py_None;

  /* "/tmp/zmq/core/message.pyx":210
 *         self._failed_init = True  # bool switch for dealloc
 *         self._buffer = None       # buffer view of data
 *         self._bytes = None        # bytes copy of data             # <<<<<<<<<<<<<<
 * 
 *         # Queue and MessageTracker for monitoring when zmq is done with data:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes = Py_None;

  /* "/tmp/zmq/core/message.pyx":213
 * 
 *         # Queue and MessageTracker for monitoring when zmq is done with data:
 *         if track:             # <<<<<<<<<<<<<<
 *             self.tracker_queue = Queue()
 *             self.tracker = MessageTracker(self.tracker_queue)
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_track); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":214
 *         # Queue and MessageTracker for monitoring when zmq is done with data:
 *         if track:
 *             self.tracker_queue = Queue()             # <<<<<<<<<<<<<<
 *             self.tracker = MessageTracker(self.tracker_queue)
 *         else:
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__Queue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "/tmp/zmq/core/message.pyx":215
 *         if track:
 *             self.tracker_queue = Queue()
 *             self.tracker = MessageTracker(self.tracker_queue)             # <<<<<<<<<<<<<<
 *         else:
 *             self.tracker_queue = None
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    __Pyx_GIVEREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_MessageTracker)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L6;
  }
  /*else*/ {

    /* "/tmp/zmq/core/message.pyx":217
 *             self.tracker = MessageTracker(self.tracker_queue)
 *         else:
 *             self.tracker_queue = None             # <<<<<<<<<<<<<<
 *             self.tracker = None
 * 
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue = Py_None;

    /* "/tmp/zmq/core/message.pyx":218
 *         else:
 *             self.tracker_queue = None
 *             self.tracker = None             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(data, unicode):
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = Py_None;
  }
  __pyx_L6:;

  /* "/tmp/zmq/core/message.pyx":220
 *             self.tracker = None
 * 
 *         if isinstance(data, unicode):             # <<<<<<<<<<<<<<
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")
 * 
 */
  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__unicode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_data, __pyx_t_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":221
 * 
 *         if isinstance(data, unicode):
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")             # <<<<<<<<<<<<<<
 * 
 *         if data is None:
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_4));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_4));
    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_4));
    __pyx_t_3 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L7;
  }
  __pyx_L7:;

  /* "/tmp/zmq/core/message.pyx":223
 *             raise TypeError("Unicode objects not allowed. Only: str/bytes, buffer interfaces.")
 * 
 *         if data is None:             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 rc = zmq_msg_init(&self.zmq_msg)
 */
  __pyx_t_1 = (__pyx_v_data == Py_None);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":224
 * 
 *         if data is None:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:
 */
    { PyThreadState *_save;
      Py_UNBLOCK_THREADS
      /*try:*/ {

        /* "/tmp/zmq/core/message.pyx":225
 *         if data is None:
 *             with nogil:
 *                 rc = zmq_msg_init(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *             if rc != 0:
 *                 raise ZMQError()
 */
        __pyx_v_rc = zmq_msg_init((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));
      }

      /* "/tmp/zmq/core/message.pyx":224
 * 
 *         if data is None:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:
 */
      /*finally:*/ {
        Py_BLOCK_THREADS
      }
    }

    /* "/tmp/zmq/core/message.pyx":226
 *             with nogil:
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:             # <<<<<<<<<<<<<<
 *                 raise ZMQError()
 *             self._failed_init = False
 */
    __pyx_t_1 = (__pyx_v_rc != 0);
    if (__pyx_t_1) {

      /* "/tmp/zmq/core/message.pyx":227
 *                 rc = zmq_msg_init(&self.zmq_msg)
 *             if rc != 0:
 *                 raise ZMQError()             # <<<<<<<<<<<<<<
 *             self._failed_init = False
 *             return
 */
      __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_Raise(__pyx_t_2, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L12;
    }
    __pyx_L12:;

    /* "/tmp/zmq/core/message.pyx":228
 *             if rc != 0:
 *                 raise ZMQError()
 *             self._failed_init = False             # <<<<<<<<<<<<<<
 *             return
 *         else:
 */
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init = 0;

    /* "/tmp/zmq/core/message.pyx":229
 *                 raise ZMQError()
 *             self._failed_init = False
 *             return             # <<<<<<<<<<<<<<
 *         else:
 *             asbuffer_r(data, <void **>&data_c, &data_len_c)
 */
    __pyx_r = 0;
    goto __pyx_L0;
    goto __pyx_L8;
  }
  /*else*/ {

    /* "/tmp/zmq/core/message.pyx":231
 *             return
 *         else:
 *             asbuffer_r(data, <void **>&data_c, &data_len_c)             # <<<<<<<<<<<<<<
 *         # We INCREF the *original* Python object (not self) and pass it
 *         # as the hint below. This allows other copies of this Message
 */
    __pyx_t_2 = __pyx_f_7buffers_asbuffer_r(__pyx_v_data, ((void **)(&__pyx_v_data_c)), (&__pyx_v_data_len_c)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L8:;

  /* "/tmp/zmq/core/message.pyx":235
 *         # as the hint below. This allows other copies of this Message
 *         # object to take over the ref counting of data properly.
 *         hint = (data, self.tracker_queue)             # <<<<<<<<<<<<<<
 *         Py_INCREF(hint)
 *         with nogil:
 */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_data);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_data);
  __Pyx_GIVEREF(__pyx_v_data);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  __Pyx_GIVEREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  __Pyx_DECREF(__pyx_v_hint);
  __pyx_v_hint = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "/tmp/zmq/core/message.pyx":236
 *         # object to take over the ref counting of data properly.
 *         hint = (data, self.tracker_queue)
 *         Py_INCREF(hint)             # <<<<<<<<<<<<<<
 *         with nogil:
 *             rc = zmq_msg_init_data(
 */
  Py_INCREF(__pyx_v_hint);

  /* "/tmp/zmq/core/message.pyx":237
 *         hint = (data, self.tracker_queue)
 *         Py_INCREF(hint)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             rc = zmq_msg_init_data(
 *                 &self.zmq_msg, <void *>data_c, data_len_c,
 */
  { PyThreadState *_save;
    Py_UNBLOCK_THREADS
    /*try:*/ {

      /* "/tmp/zmq/core/message.pyx":241
 *                 &self.zmq_msg, <void *>data_c, data_len_c,
 *                 <zmq_free_fn *>free_python_msg, <void *>hint
 *             )             # <<<<<<<<<<<<<<
 *         if rc != 0:
 *             Py_DECREF(hint)
 */
      __pyx_v_rc = zmq_msg_init_data((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg), ((void *)__pyx_v_data_c), __pyx_v_data_len_c, ((zmq_free_fn *)__pyx_f_3zmq_4core_7message_free_python_msg), ((void *)__pyx_v_hint));
    }

    /* "/tmp/zmq/core/message.pyx":237
 *         hint = (data, self.tracker_queue)
 *         Py_INCREF(hint)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             rc = zmq_msg_init_data(
 *                 &self.zmq_msg, <void *>data_c, data_len_c,
 */
    /*finally:*/ {
      Py_BLOCK_THREADS
    }
  }

  /* "/tmp/zmq/core/message.pyx":242
 *                 <zmq_free_fn *>free_python_msg, <void *>hint
 *             )
 *         if rc != 0:             # <<<<<<<<<<<<<<
 *             Py_DECREF(hint)
 *             raise ZMQError()
 */
  __pyx_t_1 = (__pyx_v_rc != 0);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":243
 *             )
 *         if rc != 0:
 *             Py_DECREF(hint)             # <<<<<<<<<<<<<<
 *             raise ZMQError()
 *         self._failed_init = False
 */
    Py_DECREF(__pyx_v_hint);

    /* "/tmp/zmq/core/message.pyx":244
 *         if rc != 0:
 *             Py_DECREF(hint)
 *             raise ZMQError()             # <<<<<<<<<<<<<<
 *         self._failed_init = False
 * 
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L16;
  }
  __pyx_L16:;

  /* "/tmp/zmq/core/message.pyx":245
 *             Py_DECREF(hint)
 *             raise ZMQError()
 *         self._failed_init = False             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, object data=None, track=False):
 */
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init = 0;

  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("zmq.core.message.Message.__cinit__");
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_kwargs);
  __Pyx_DECREF(__pyx_v_hint);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":247
 *         self._failed_init = False
 * 
 *     def __init__(self, object data=None, track=False):             # <<<<<<<<<<<<<<
 *         """Enforce signature"""
 *         pass
 */

static int __pyx_pf_3zmq_4core_7message_7Message___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message___init__[] = "Enforce signature";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_7Message___init__;
static int __pyx_pf_3zmq_4core_7message_7Message___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_track = 0;
  int __pyx_r;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__data,&__pyx_n_s__track,0};
  __Pyx_RefNannySetupContext("__init__");
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = __pyx_k_5;
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data);
        if (value) { values[0] = value; kw_args--; }
      }
      case  1:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__track);
        if (value) { values[1] = value; kw_args--; }
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_data = values[0];
    __pyx_v_track = values[1];
  } else {
    __pyx_v_data = ((PyObject *)Py_None);
    __pyx_v_track = __pyx_k_5;
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  2: __pyx_v_track = PyTuple_GET_ITEM(__pyx_args, 1);
      case  1: __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("zmq.core.message.Message.__init__");
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":251
 *         pass
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         cdef int rc
 *         if self._failed_init:
 */

static void __pyx_pf_3zmq_4core_7message_7Message___dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pf_3zmq_4core_7message_7Message___dealloc__(PyObject *__pyx_v_self) {
  int __pyx_v_rc;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__dealloc__");

  /* "/tmp/zmq/core/message.pyx":253
 *     def __dealloc__(self):
 *         cdef int rc
 *         if self._failed_init:             # <<<<<<<<<<<<<<
 *             return
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 */
  if (((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_failed_init) {

    /* "/tmp/zmq/core/message.pyx":254
 *         cdef int rc
 *         if self._failed_init:
 *             return             # <<<<<<<<<<<<<<
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         rc = zmq_msg_close(&self.zmq_msg)
 */
    goto __pyx_L0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "/tmp/zmq/core/message.pyx":256
 *             return
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         rc = zmq_msg_close(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         if rc != 0:
 *             raise ZMQError()
 */
  __pyx_v_rc = zmq_msg_close((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg));

  /* "/tmp/zmq/core/message.pyx":257
 *         # This simply decreases the 0MQ ref-count of zmq_msg.
 *         rc = zmq_msg_close(&self.zmq_msg)
 *         if rc != 0:             # <<<<<<<<<<<<<<
 *             raise ZMQError()
 * 
 */
  __pyx_t_1 = (__pyx_v_rc != 0);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":258
 *         rc = zmq_msg_close(&self.zmq_msg)
 *         if rc != 0:
 *             raise ZMQError()             # <<<<<<<<<<<<<<
 * 
 *     def __copy__(self):
 */
    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L6;
  }
  __pyx_L6:;

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("zmq.core.message.Message.__dealloc__");
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "/tmp/zmq/core/message.pyx":260
 *             raise ZMQError()
 * 
 *     def __copy__(self):             # <<<<<<<<<<<<<<
 *         """Create a shallow copy of the message.
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message___copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message___copy__[] = "Create a shallow copy of the message.\n\n        This does not copy the contents of the Message, just the pointer.\n        This will increment the 0MQ ref count of the message, but not\n        the ref count of the Python object. That is only done once when\n        the Python is first turned into a 0MQ message.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message___copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__copy__");

  /* "/tmp/zmq/core/message.pyx":268
 *         the Python is first turned into a 0MQ message.
 *         """
 *         return self.fast_copy()             # <<<<<<<<<<<<<<
 * 
 *     cdef Message fast_copy(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_3zmq_4core_7message_Message *)((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->__pyx_vtab)->fast_copy(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("zmq.core.message.Message.__copy__");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":270
 *         return self.fast_copy()
 * 
 *     cdef Message fast_copy(self):             # <<<<<<<<<<<<<<
 *         """Fast, cdef'd version of shallow copy of the message."""
 *         cdef Message new_msg
 */

static  struct __pyx_obj_3zmq_4core_7message_Message *__pyx_f_3zmq_4core_7message_7Message_fast_copy(struct __pyx_obj_3zmq_4core_7message_Message *__pyx_v_self) {
  struct __pyx_obj_3zmq_4core_7message_Message *__pyx_v_new_msg;
  struct __pyx_obj_3zmq_4core_7message_Message *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("fast_copy");
  __pyx_v_new_msg = ((struct __pyx_obj_3zmq_4core_7message_Message *)Py_None); __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":273
 *         """Fast, cdef'd version of shallow copy of the message."""
 *         cdef Message new_msg
 *         new_msg = Message()             # <<<<<<<<<<<<<<
 *         # This does not copy the contents, but just increases the ref-count
 *         # of the zmq_msg by one.
 */
  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_3zmq_4core_7message_Message)), ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_v_new_msg));
  __pyx_v_new_msg = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "/tmp/zmq/core/message.pyx":276
 *         # This does not copy the contents, but just increases the ref-count
 *         # of the zmq_msg by one.
 *         zmq_msg_copy(&new_msg.zmq_msg, &self.zmq_msg)             # <<<<<<<<<<<<<<
 *         # Copy the ref to data so the copy won't create a copy when str is
 *         # called.
 */
  zmq_msg_copy((&__pyx_v_new_msg->zmq_msg), (&__pyx_v_self->zmq_msg));

  /* "/tmp/zmq/core/message.pyx":279
 *         # Copy the ref to data so the copy won't create a copy when str is
 *         # called.
 *         if self._data is not None:             # <<<<<<<<<<<<<<
 *             new_msg._data = self._data
 *         if self._buffer is not None:
 */
  __pyx_t_2 = (__pyx_v_self->_data != Py_None);
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":280
 *         # called.
 *         if self._data is not None:
 *             new_msg._data = self._data             # <<<<<<<<<<<<<<
 *         if self._buffer is not None:
 *             new_msg._buffer = self._buffer
 */
    __Pyx_INCREF(__pyx_v_self->_data);
    __Pyx_GIVEREF(__pyx_v_self->_data);
    __Pyx_GOTREF(__pyx_v_new_msg->_data);
    __Pyx_DECREF(__pyx_v_new_msg->_data);
    __pyx_v_new_msg->_data = __pyx_v_self->_data;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "/tmp/zmq/core/message.pyx":281
 *         if self._data is not None:
 *             new_msg._data = self._data
 *         if self._buffer is not None:             # <<<<<<<<<<<<<<
 *             new_msg._buffer = self._buffer
 *         if self._bytes is not None:
 */
  __pyx_t_2 = (__pyx_v_self->_buffer != Py_None);
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":282
 *             new_msg._data = self._data
 *         if self._buffer is not None:
 *             new_msg._buffer = self._buffer             # <<<<<<<<<<<<<<
 *         if self._bytes is not None:
 *             new_msg._bytes = self._bytes
 */
    __Pyx_INCREF(__pyx_v_self->_buffer);
    __Pyx_GIVEREF(__pyx_v_self->_buffer);
    __Pyx_GOTREF(__pyx_v_new_msg->_buffer);
    __Pyx_DECREF(__pyx_v_new_msg->_buffer);
    __pyx_v_new_msg->_buffer = __pyx_v_self->_buffer;
    goto __pyx_L4;
  }
  __pyx_L4:;

  /* "/tmp/zmq/core/message.pyx":283
 *         if self._buffer is not None:
 *             new_msg._buffer = self._buffer
 *         if self._bytes is not None:             # <<<<<<<<<<<<<<
 *             new_msg._bytes = self._bytes
 * 
 */
  __pyx_t_2 = (__pyx_v_self->_bytes != Py_None);
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":284
 *             new_msg._buffer = self._buffer
 *         if self._bytes is not None:
 *             new_msg._bytes = self._bytes             # <<<<<<<<<<<<<<
 * 
 *         # Message copies share the tracker and tracker_queue
 */
    __Pyx_INCREF(__pyx_v_self->_bytes);
    __Pyx_GIVEREF(__pyx_v_self->_bytes);
    __Pyx_GOTREF(__pyx_v_new_msg->_bytes);
    __Pyx_DECREF(__pyx_v_new_msg->_bytes);
    __pyx_v_new_msg->_bytes = __pyx_v_self->_bytes;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "/tmp/zmq/core/message.pyx":287
 * 
 *         # Message copies share the tracker and tracker_queue
 *         new_msg.tracker_queue = self.tracker_queue             # <<<<<<<<<<<<<<
 *         new_msg.tracker = self.tracker
 * 
 */
  __Pyx_INCREF(__pyx_v_self->tracker_queue);
  __Pyx_GIVEREF(__pyx_v_self->tracker_queue);
  __Pyx_GOTREF(__pyx_v_new_msg->tracker_queue);
  __Pyx_DECREF(__pyx_v_new_msg->tracker_queue);
  __pyx_v_new_msg->tracker_queue = __pyx_v_self->tracker_queue;

  /* "/tmp/zmq/core/message.pyx":288
 *         # Message copies share the tracker and tracker_queue
 *         new_msg.tracker_queue = self.tracker_queue
 *         new_msg.tracker = self.tracker             # <<<<<<<<<<<<<<
 * 
 *         return new_msg
 */
  __Pyx_INCREF(__pyx_v_self->tracker);
  __Pyx_GIVEREF(__pyx_v_self->tracker);
  __Pyx_GOTREF(__pyx_v_new_msg->tracker);
  __Pyx_DECREF(__pyx_v_new_msg->tracker);
  __pyx_v_new_msg->tracker = __pyx_v_self->tracker;

  /* "/tmp/zmq/core/message.pyx":290
 *         new_msg.tracker = self.tracker
 * 
 *         return new_msg             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_new_msg));
  __pyx_r = __pyx_v_new_msg;
  goto __pyx_L0;

  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("zmq.core.message.Message.fast_copy");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_DECREF((PyObject *)__pyx_v_new_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":292
 *         return new_msg
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         """Return the length of the message in bytes."""
 *         return <int>zmq_msg_size(&self.zmq_msg)
 */

static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message___len__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message___len__[] = "Return the length of the message in bytes.";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_7Message___len__;
static Py_ssize_t __pyx_pf_3zmq_4core_7message_7Message___len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannySetupContext("__len__");

  /* "/tmp/zmq/core/message.pyx":294
 *     def __len__(self):
 *         """Return the length of the message in bytes."""
 *         return <int>zmq_msg_size(&self.zmq_msg)             # <<<<<<<<<<<<<<
 * 
 *     def __str__(self):
 */
  __pyx_r = ((int)zmq_msg_size((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg)));
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":296
 *         return <int>zmq_msg_size(&self.zmq_msg)
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         """Return the str form of the message."""
 *         if isinstance(self._data, bytes):
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message___str__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message___str__[] = "Return the str form of the message.";
struct wrapperbase __pyx_wrapperbase_3zmq_4core_7message_7Message___str__;
static PyObject *__pyx_pf_3zmq_4core_7message_7Message___str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_v_b;
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__str__");
  __pyx_v_b = Py_None; __Pyx_INCREF(Py_None);

  /* "/tmp/zmq/core/message.pyx":298
 *     def __str__(self):
 *         """Return the str form of the message."""
 *         if isinstance(self._data, bytes):             # <<<<<<<<<<<<<<
 *             b = self._data
 *         else:
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":299
 *         """Return the str form of the message."""
 *         if isinstance(self._data, bytes):
 *             b = self._data             # <<<<<<<<<<<<<<
 *         else:
 *             b = self.bytes
 */
    __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data);
    __Pyx_DECREF(__pyx_v_b);
    __pyx_v_b = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_data;
    goto __pyx_L5;
  }
  /*else*/ {

    /* "/tmp/zmq/core/message.pyx":301
 *             b = self._data
 *         else:
 *             b = self.bytes             # <<<<<<<<<<<<<<
 *         if str is unicode:
 *             return b.decode()
 */
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_v_b);
    __pyx_v_b = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L5:;

  /* "/tmp/zmq/core/message.pyx":302
 *         else:
 *             b = self.bytes
 *         if str is unicode:             # <<<<<<<<<<<<<<
 *             return b.decode()
 *         else:
 */
  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (((PyObject*)&PyString_Type) == ((PyObject *)__pyx_t_1));
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":303
 *             b = self.bytes
 *         if str is unicode:
 *             return b.decode()             # <<<<<<<<<<<<<<
 *         else:
 *             return b
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyObject_GetAttr(__pyx_v_b, __pyx_n_s__decode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
    goto __pyx_L6;
  }
  /*else*/ {

    /* "/tmp/zmq/core/message.pyx":305
 *             return b.decode()
 *         else:
 *             return b             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_b);
    __pyx_r = __pyx_v_b;
    goto __pyx_L0;
  }
  __pyx_L6:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("zmq.core.message.Message.__str__");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_DECREF(__pyx_v_b);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":308
 * 
 *     @property
 *     def done(self):             # <<<<<<<<<<<<<<
 *         """Is 0MQ completely done with the message?"""
 *         if not self.tracker:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_done(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_done[] = "Is 0MQ completely done with the message?";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_done(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("done");

  /* "/tmp/zmq/core/message.pyx":310
 *     def done(self):
 *         """Is 0MQ completely done with the message?"""
 *         if not self.tracker:             # <<<<<<<<<<<<<<
 *             raise ValueError("Not a tracked message")
 *         return self.tracker.done
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":311
 *         """Is 0MQ completely done with the message?"""
 *         if not self.tracker:
 *             raise ValueError("Not a tracked message")             # <<<<<<<<<<<<<<
 *         return self.tracker.done
 * 
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "/tmp/zmq/core/message.pyx":312
 *         if not self.tracker:
 *             raise ValueError("Not a tracked message")
 *         return self.tracker.done             # <<<<<<<<<<<<<<
 * 
 *     def wait(self, timeout=-1):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyObject_GetAttr(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker, __pyx_n_s__done); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("zmq.core.message.Message.done");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":314
 *         return self.tracker.done
 * 
 *     def wait(self, timeout=-1):             # <<<<<<<<<<<<<<
 *         """m.wait(timeout=-1)
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_wait[] = "m.wait(timeout=-1)\n\n        Wait for 0MQ to be done with the message, or until timeout.\n        \n        Parameters\n        ----------\n        timeout : int\n            Maximum time in (s) to wait before raising NotDone.\n        \n        Raises NotDone if ``timeout`` reached before I am done.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_timeout = 0;
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__timeout,0};
  __Pyx_RefNannySetupContext("wait");
  if (unlikely(__pyx_kwds)) {
    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_int_neg_1);
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  0:
      if (kw_args > 0) {
        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__timeout);
        if (value) { values[0] = value; kw_args--; }
      }
    }
    if (unlikely(kw_args > 0)) {
      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "wait") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    }
    __pyx_v_timeout = values[0];
  } else {
    __pyx_v_timeout = ((PyObject *)__pyx_int_neg_1);
    switch (PyTuple_GET_SIZE(__pyx_args)) {
      case  1: __pyx_v_timeout = PyTuple_GET_ITEM(__pyx_args, 0);
      case  0: break;
      default: goto __pyx_L5_argtuple_error;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("zmq.core.message.Message.wait");
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;

  /* "/tmp/zmq/core/message.pyx":326
 *         Raises NotDone if ``timeout`` reached before I am done.
 *         """
 *         if not self.tracker:             # <<<<<<<<<<<<<<
 *             raise ValueError("Not a tracked message")
 *         return self.tracker.wait(timeout=timeout)
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "/tmp/zmq/core/message.pyx":327
 *         """
 *         if not self.tracker:
 *             raise ValueError("Not a tracked message")             # <<<<<<<<<<<<<<
 *         return self.tracker.wait(timeout=timeout)
 * 
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_1));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_1));
    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_1));
    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L6;
  }
  __pyx_L6:;

  /* "/tmp/zmq/core/message.pyx":328
 *         if not self.tracker:
 *             raise ValueError("Not a tracked message")
 *         return self.tracker.wait(timeout=timeout)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyObject_GetAttr(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker, __pyx_n_s__wait); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__timeout), __pyx_v_timeout) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_5 = PyEval_CallObjectWithKeywords(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("zmq.core.message.Message.wait");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":331
 * 
 * 
 *     cdef object _getbuffer(self):             # <<<<<<<<<<<<<<
 *         """Create a Python buffer/view of the message data.
 * 
 */

static  PyObject *__pyx_f_3zmq_4core_7message_7Message__getbuffer(struct __pyx_obj_3zmq_4core_7message_Message *__pyx_v_self) {
  char *__pyx_v_data_c;
  Py_ssize_t __pyx_v_data_len_c;
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("_getbuffer");

  /* "/tmp/zmq/core/message.pyx":337
 *         is accessed. Subsequent calls use a cached copy.
 *         """
 *         cdef char *data_c = NULL             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t data_len_c
 *         # read-only, because we don't want to allow
 */
  __pyx_v_data_c = NULL;

  /* "/tmp/zmq/core/message.pyx":341
 *         # read-only, because we don't want to allow
 *         # editing of the message in-place
 *         if self._data is None:             # <<<<<<<<<<<<<<
 *             # return buffer on input object, to preserve refcounting
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 */
  __pyx_t_1 = (__pyx_v_self->_data == Py_None);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":343
 *         if self._data is None:
 *             # return buffer on input object, to preserve refcounting
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 *             return frombuffer_r(data_c, data_len_c)
 */
    __pyx_v_data_c = ((char *)zmq_msg_data((&__pyx_v_self->zmq_msg)));

    /* "/tmp/zmq/core/message.pyx":344
 *             # return buffer on input object, to preserve refcounting
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 *             data_len_c = zmq_msg_size(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *             return frombuffer_r(data_c, data_len_c)
 *         else:
 */
    __pyx_v_data_len_c = zmq_msg_size((&__pyx_v_self->zmq_msg));

    /* "/tmp/zmq/core/message.pyx":345
 *             data_c = <char *>zmq_msg_data(&self.zmq_msg)
 *             data_len_c = zmq_msg_size(&self.zmq_msg)
 *             return frombuffer_r(data_c, data_len_c)             # <<<<<<<<<<<<<<
 *         else:
 *             return viewfromobject_r(self._data)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_frombuffer_r(__pyx_v_data_c, __pyx_v_data_len_c); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "/tmp/zmq/core/message.pyx":347
 *             return frombuffer_r(data_c, data_len_c)
 *         else:
 *             return viewfromobject_r(self._data)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_viewfromobject_r(__pyx_v_self->_data); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message._getbuffer");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":350
 * 
 *     @property
 *     def buffer(self):             # <<<<<<<<<<<<<<
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_buffer(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_buffer[] = "Get a read-only buffer view of the message contents.";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_buffer(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("buffer");

  /* "/tmp/zmq/core/message.pyx":352
 *     def buffer(self):
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:             # <<<<<<<<<<<<<<
 *             self._buffer = self._getbuffer()
 *         return self._buffer
 */
  __pyx_t_1 = (((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer == Py_None);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":353
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:
 *             self._buffer = self._getbuffer()             # <<<<<<<<<<<<<<
 *         return self._buffer
 * 
 */
    __pyx_t_2 = ((struct __pyx_vtabstruct_3zmq_4core_7message_Message *)((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->__pyx_vtab)->_getbuffer(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 353; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "/tmp/zmq/core/message.pyx":354
 *         if self._buffer is None:
 *             self._buffer = self._getbuffer()
 *         return self._buffer             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_buffer;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message.buffer");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pyx":357
 * 
 *     @property
 *     def bytes(self):             # <<<<<<<<<<<<<<
 *         """Get the message content as a Python str/bytes object.
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_bytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_3zmq_4core_7message_7Message_bytes[] = "Get the message content as a Python str/bytes object.\n\n        The first time this property is accessed, a copy of the message \n        contents is made. From then on that same copy of the message is\n        returned.\n        ";
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_bytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("bytes");

  /* "/tmp/zmq/core/message.pyx":364
 *         returned.
 *         """
 *         if self._bytes is None:             # <<<<<<<<<<<<<<
 *             self._bytes = copy_zmq_msg_bytes(&self.zmq_msg)
 *         return self._bytes
 */
  __pyx_t_1 = (((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes == Py_None);
  if (__pyx_t_1) {

    /* "/tmp/zmq/core/message.pyx":365
 *         """
 *         if self._bytes is None:
 *             self._bytes = copy_zmq_msg_bytes(&self.zmq_msg)             # <<<<<<<<<<<<<<
 *         return self._bytes
 * 
 */
    __pyx_t_2 = __pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes((&((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->zmq_msg)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
    __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
    ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "/tmp/zmq/core/message.pyx":366
 *         if self._bytes is None:
 *             self._bytes = copy_zmq_msg_bytes(&self.zmq_msg)
 *         return self._bytes             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->_bytes;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("zmq.core.message.Message.bytes");
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pxd":47
 *     cdef object _bytes     # A bytes/str copy of the message.
 *     cdef bint _failed_init # Flag to handle failed zmq_msg_init
 *     cdef public object tracker_queue  # Queue for use with zmq_free_fn.             # <<<<<<<<<<<<<<
 *     cdef public object tracker        # MessageTracker object.
 * 
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("__get__");
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("__set__");
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue = __pyx_v_value;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("__del__");
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker_queue = Py_None;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "/tmp/zmq/core/message.pxd":48
 *     cdef bint _failed_init # Flag to handle failed zmq_msg_init
 *     cdef public object tracker_queue  # Queue for use with zmq_free_fn.
 *     cdef public object tracker        # MessageTracker object.             # <<<<<<<<<<<<<<
 * 
 *     cdef Message fast_copy(self) # Create shallow copy of Message object.
 */

static PyObject *__pyx_pf_3zmq_4core_7message_7Message_7tracker___get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pf_3zmq_4core_7message_7Message_7tracker___get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannySetupContext("__get__");
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  __pyx_r = ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_7tracker___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_7tracker___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("__set__");
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = __pyx_v_value;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_3zmq_4core_7message_7Message_7tracker___del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pf_3zmq_4core_7message_7Message_7tracker___del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("__del__");
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  __Pyx_DECREF(((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker);
  ((struct __pyx_obj_3zmq_4core_7message_Message *)__pyx_v_self)->tracker = Py_None;

  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":74
 * 
 * 
 * cdef inline int newstyle_available():             # <<<<<<<<<<<<<<
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 6)
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_newstyle_available(void) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("newstyle_available");

  /* "zmq/utils/buffers.pxd":75
 * 
 * cdef inline int newstyle_available():
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 6)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int memoryview_available():
 */
  __pyx_t_1 = (PY_MAJOR_VERSION >= 3);
  if (!__pyx_t_1) {
    __pyx_t_2 = (PY_MAJOR_VERSION >= 2);
    if (__pyx_t_2) {
      __pyx_t_3 = (PY_MINOR_VERSION >= 6);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":77
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 6)
 * 
 * cdef inline int memoryview_available():             # <<<<<<<<<<<<<<
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 7)
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_memoryview_available(void) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("memoryview_available");

  /* "zmq/utils/buffers.pxd":78
 * 
 * cdef inline int memoryview_available():
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 7)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int oldstyle_available():
 */
  __pyx_t_1 = (PY_MAJOR_VERSION >= 3);
  if (!__pyx_t_1) {
    __pyx_t_2 = (PY_MAJOR_VERSION >= 2);
    if (__pyx_t_2) {
      __pyx_t_3 = (PY_MINOR_VERSION >= 7);
      __pyx_t_4 = __pyx_t_3;
    } else {
      __pyx_t_4 = __pyx_t_2;
    }
    __pyx_t_2 = __pyx_t_4;
  } else {
    __pyx_t_2 = __pyx_t_1;
  }
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":80
 *     return PY_MAJOR_VERSION >= 3 or (PY_MAJOR_VERSION >=2 and PY_MINOR_VERSION >= 7)
 * 
 * cdef inline int oldstyle_available():             # <<<<<<<<<<<<<<
 *     return PY_MAJOR_VERSION < 3
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_oldstyle_available(void) {
  int __pyx_r;
  __Pyx_RefNannySetupContext("oldstyle_available");

  /* "zmq/utils/buffers.pxd":81
 * 
 * cdef inline int oldstyle_available():
 *     return PY_MAJOR_VERSION < 3             # <<<<<<<<<<<<<<
 * 
 * cdef inline int check_buffer(object ob):
 */
  __pyx_r = (PY_MAJOR_VERSION < 3);
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":83
 *     return PY_MAJOR_VERSION < 3
 * 
 * cdef inline int check_buffer(object ob):             # <<<<<<<<<<<<<<
 *     """Version independent check for whether an object is a buffer.
 * 
 */

static CYTHON_INLINE int __pyx_f_7buffers_check_buffer(PyObject *__pyx_v_ob) {
  int __pyx_r;
  int __pyx_t_1;
  long __pyx_t_2;
  __Pyx_RefNannySetupContext("check_buffer");

  /* "zmq/utils/buffers.pxd":95
 *     int : 0 if no buffer interface, 3 if newstyle buffer interface, 2 if oldstyle.
 *     """
 *     if newstyle_available():             # <<<<<<<<<<<<<<
 *         if PyObject_CheckBuffer(ob):
 *             return 3
 */
  __pyx_t_1 = __pyx_f_7buffers_newstyle_available();
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":96
 *     """
 *     if newstyle_available():
 *         if PyObject_CheckBuffer(ob):             # <<<<<<<<<<<<<<
 *             return 3
 *     if oldstyle_available():
 */
    __pyx_t_1 = PyObject_CheckBuffer(__pyx_v_ob);
    if (__pyx_t_1) {

      /* "zmq/utils/buffers.pxd":97
 *     if newstyle_available():
 *         if PyObject_CheckBuffer(ob):
 *             return 3             # <<<<<<<<<<<<<<
 *     if oldstyle_available():
 *         return PyObject_CheckReadBuffer(ob) and 2
 */
      __pyx_r = 3;
      goto __pyx_L0;
      goto __pyx_L4;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "zmq/utils/buffers.pxd":98
 *         if PyObject_CheckBuffer(ob):
 *             return 3
 *     if oldstyle_available():             # <<<<<<<<<<<<<<
 *         return PyObject_CheckReadBuffer(ob) and 2
 *     return 0
 */
  __pyx_t_1 = __pyx_f_7buffers_oldstyle_available();
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":99
 *             return 3
 *     if oldstyle_available():
 *         return PyObject_CheckReadBuffer(ob) and 2             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    __pyx_t_1 = PyObject_CheckReadBuffer(__pyx_v_ob);
    if (__pyx_t_1) {
      __pyx_t_2 = 2;
    } else {
      __pyx_t_2 = __pyx_t_1;
    }
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;
    goto __pyx_L5;
  }
  __pyx_L5:;

  /* "zmq/utils/buffers.pxd":100
 *     if oldstyle_available():
 *         return PyObject_CheckReadBuffer(ob) and 2
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = 0;
  goto __pyx_L0;

  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":103
 * 
 * 
 * cdef inline object asbuffer(object ob, int writable, int format,             # <<<<<<<<<<<<<<
 *                             void **base, Py_ssize_t *size,
 *                             Py_ssize_t *itemsize):
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer(PyObject *__pyx_v_ob, int __pyx_v_writable, int __pyx_v_format, void **__pyx_v_base, Py_ssize_t *__pyx_v_size, Py_ssize_t *__pyx_v_itemsize) {
  void *__pyx_v_bptr;
  Py_ssize_t __pyx_v_blen;
  Py_ssize_t __pyx_v_bitemlen;
  PyObject *__pyx_v_bfmt = 0;
  Py_buffer __pyx_v_view;
  int __pyx_v_flags;
  int __pyx_v_mode;
  PyObject *__pyx_v_dtype;
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("asbuffer");
  __pyx_v_dtype = Py_None; __Pyx_INCREF(Py_None);

  /* "zmq/utils/buffers.pxd":130
 *     """
 * 
 *     cdef void *bptr = NULL             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t blen = 0, bitemlen = 0
 *     cdef str bfmt = None
 */
  __pyx_v_bptr = NULL;

  /* "zmq/utils/buffers.pxd":131
 * 
 *     cdef void *bptr = NULL
 *     cdef Py_ssize_t blen = 0, bitemlen = 0             # <<<<<<<<<<<<<<
 *     cdef str bfmt = None
 *     cdef Py_buffer view
 */
  __pyx_v_blen = 0;
  __pyx_v_bitemlen = 0;

  /* "zmq/utils/buffers.pxd":132
 *     cdef void *bptr = NULL
 *     cdef Py_ssize_t blen = 0, bitemlen = 0
 *     cdef str bfmt = None             # <<<<<<<<<<<<<<
 *     cdef Py_buffer view
 *     cdef int flags = PyBUF_SIMPLE
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_bfmt = ((PyObject *)Py_None);

  /* "zmq/utils/buffers.pxd":134
 *     cdef str bfmt = None
 *     cdef Py_buffer view
 *     cdef int flags = PyBUF_SIMPLE             # <<<<<<<<<<<<<<
 *     cdef int mode = 0
 * 
 */
  __pyx_v_flags = PyBUF_SIMPLE;

  /* "zmq/utils/buffers.pxd":135
 *     cdef Py_buffer view
 *     cdef int flags = PyBUF_SIMPLE
 *     cdef int mode = 0             # <<<<<<<<<<<<<<
 * 
 *     mode = check_buffer(ob)
 */
  __pyx_v_mode = 0;

  /* "zmq/utils/buffers.pxd":137
 *     cdef int mode = 0
 * 
 *     mode = check_buffer(ob)             # <<<<<<<<<<<<<<
 *     if mode == 0:
 *         raise TypeError("%r does not provide a buffer interface."%ob)
 */
  __pyx_v_mode = __pyx_f_7buffers_check_buffer(__pyx_v_ob);

  /* "zmq/utils/buffers.pxd":138
 * 
 *     mode = check_buffer(ob)
 *     if mode == 0:             # <<<<<<<<<<<<<<
 *         raise TypeError("%r does not provide a buffer interface."%ob)
 * 
 */
  __pyx_t_1 = (__pyx_v_mode == 0);
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":139
 *     mode = check_buffer(ob)
 *     if mode == 0:
 *         raise TypeError("%r does not provide a buffer interface."%ob)             # <<<<<<<<<<<<<<
 * 
 *     if mode == 3:
 */
    __pyx_t_2 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_6), __pyx_v_ob); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2));
    __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
    __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    goto __pyx_L3;
  }
  __pyx_L3:;

  /* "zmq/utils/buffers.pxd":141
 *         raise TypeError("%r does not provide a buffer interface."%ob)
 * 
 *     if mode == 3:             # <<<<<<<<<<<<<<
 *         flags = PyBUF_ANY_CONTIGUOUS
 *         if writable:
 */
  __pyx_t_1 = (__pyx_v_mode == 3);
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":142
 * 
 *     if mode == 3:
 *         flags = PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
 *         if writable:
 *             flags |= PyBUF_WRITABLE
 */
    __pyx_v_flags = PyBUF_ANY_CONTIGUOUS;

    /* "zmq/utils/buffers.pxd":143
 *     if mode == 3:
 *         flags = PyBUF_ANY_CONTIGUOUS
 *         if writable:             # <<<<<<<<<<<<<<
 *             flags |= PyBUF_WRITABLE
 *         if format:
 */
    if (__pyx_v_writable) {

      /* "zmq/utils/buffers.pxd":144
 *         flags = PyBUF_ANY_CONTIGUOUS
 *         if writable:
 *             flags |= PyBUF_WRITABLE             # <<<<<<<<<<<<<<
 *         if format:
 *             flags |= PyBUF_FORMAT
 */
      __pyx_v_flags |= PyBUF_WRITABLE;
      goto __pyx_L5;
    }
    __pyx_L5:;

    /* "zmq/utils/buffers.pxd":145
 *         if writable:
 *             flags |= PyBUF_WRITABLE
 *         if format:             # <<<<<<<<<<<<<<
 *             flags |= PyBUF_FORMAT
 *         PyObject_GetBuffer(ob, &view, flags)
 */
    if (__pyx_v_format) {

      /* "zmq/utils/buffers.pxd":146
 *             flags |= PyBUF_WRITABLE
 *         if format:
 *             flags |= PyBUF_FORMAT             # <<<<<<<<<<<<<<
 *         PyObject_GetBuffer(ob, &view, flags)
 *         bptr = view.buf
 */
      __pyx_v_flags |= PyBUF_FORMAT;
      goto __pyx_L6;
    }
    __pyx_L6:;

    /* "zmq/utils/buffers.pxd":147
 *         if format:
 *             flags |= PyBUF_FORMAT
 *         PyObject_GetBuffer(ob, &view, flags)             # <<<<<<<<<<<<<<
 *         bptr = view.buf
 *         blen = view.len
 */
    __pyx_t_4 = PyObject_GetBuffer(__pyx_v_ob, (&__pyx_v_view), __pyx_v_flags); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

    /* "zmq/utils/buffers.pxd":148
 *             flags |= PyBUF_FORMAT
 *         PyObject_GetBuffer(ob, &view, flags)
 *         bptr = view.buf             # <<<<<<<<<<<<<<
 *         blen = view.len
 *         if format:
 */
    __pyx_v_bptr = __pyx_v_view.buf;

    /* "zmq/utils/buffers.pxd":149
 *         PyObject_GetBuffer(ob, &view, flags)
 *         bptr = view.buf
 *         blen = view.len             # <<<<<<<<<<<<<<
 *         if format:
 *             if view.format != NULL:
 */
    __pyx_v_blen = __pyx_v_view.len;

    /* "zmq/utils/buffers.pxd":150
 *         bptr = view.buf
 *         blen = view.len
 *         if format:             # <<<<<<<<<<<<<<
 *             if view.format != NULL:
 *                 bfmt = view.format
 */
    if (__pyx_v_format) {

      /* "zmq/utils/buffers.pxd":151
 *         blen = view.len
 *         if format:
 *             if view.format != NULL:             # <<<<<<<<<<<<<<
 *                 bfmt = view.format
 *                 bitemlen = view.itemsize
 */
      __pyx_t_1 = (__pyx_v_view.format != NULL);
      if (__pyx_t_1) {

        /* "zmq/utils/buffers.pxd":152
 *         if format:
 *             if view.format != NULL:
 *                 bfmt = view.format             # <<<<<<<<<<<<<<
 *                 bitemlen = view.itemsize
 *         PyBuffer_Release(&view)
 */
        __pyx_t_2 = PyBytes_FromString(__pyx_v_view.format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
        __Pyx_GOTREF(((PyObject *)__pyx_t_2));
        __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
        __pyx_v_bfmt = ((PyObject *)__pyx_t_2);
        __pyx_t_2 = 0;

        /* "zmq/utils/buffers.pxd":153
 *             if view.format != NULL:
 *                 bfmt = view.format
 *                 bitemlen = view.itemsize             # <<<<<<<<<<<<<<
 *         PyBuffer_Release(&view)
 *     else: # oldstyle
 */
        __pyx_v_bitemlen = __pyx_v_view.itemsize;
        goto __pyx_L8;
      }
      __pyx_L8:;
      goto __pyx_L7;
    }
    __pyx_L7:;

    /* "zmq/utils/buffers.pxd":154
 *                 bfmt = view.format
 *                 bitemlen = view.itemsize
 *         PyBuffer_Release(&view)             # <<<<<<<<<<<<<<
 *     else: # oldstyle
 *         if writable:
 */
    PyBuffer_Release((&__pyx_v_view));
    goto __pyx_L4;
  }
  /*else*/ {

    /* "zmq/utils/buffers.pxd":156
 *         PyBuffer_Release(&view)
 *     else: # oldstyle
 *         if writable:             # <<<<<<<<<<<<<<
 *             PyObject_AsWriteBuffer(ob, &bptr, &blen)
 *         else:
 */
    if (__pyx_v_writable) {

      /* "zmq/utils/buffers.pxd":157
 *     else: # oldstyle
 *         if writable:
 *             PyObject_AsWriteBuffer(ob, &bptr, &blen)             # <<<<<<<<<<<<<<
 *         else:
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)
 */
      __pyx_t_4 = PyObject_AsWriteBuffer(__pyx_v_ob, (&__pyx_v_bptr), (&__pyx_v_blen)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      goto __pyx_L9;
    }
    /*else*/ {

      /* "zmq/utils/buffers.pxd":159
 *             PyObject_AsWriteBuffer(ob, &bptr, &blen)
 *         else:
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)             # <<<<<<<<<<<<<<
 *         if format:
 *             try: # numpy.ndarray
 */
      __pyx_t_4 = PyObject_AsReadBuffer(__pyx_v_ob, ((const void **)(&__pyx_v_bptr)), (&__pyx_v_blen)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    __pyx_L9:;

    /* "zmq/utils/buffers.pxd":160
 *         else:
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)
 *         if format:             # <<<<<<<<<<<<<<
 *             try: # numpy.ndarray
 *                 dtype = ob.dtype
 */
    if (__pyx_v_format) {

      /* "zmq/utils/buffers.pxd":161
 *             PyObject_AsReadBuffer(ob, <const_void **>&bptr, &blen)
 *         if format:
 *             try: # numpy.ndarray             # <<<<<<<<<<<<<<
 *                 dtype = ob.dtype
 *                 bfmt = dtype.char
 */
      {
        PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
        __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
        __Pyx_XGOTREF(__pyx_save_exc_type);
        __Pyx_XGOTREF(__pyx_save_exc_value);
        __Pyx_XGOTREF(__pyx_save_exc_tb);
        /*try:*/ {

          /* "zmq/utils/buffers.pxd":162
 *         if format:
 *             try: # numpy.ndarray
 *                 dtype = ob.dtype             # <<<<<<<<<<<<<<
 *                 bfmt = dtype.char
 *                 bitemlen = dtype.itemsize
 */
          __pyx_t_2 = PyObject_GetAttr(__pyx_v_ob, __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_v_dtype);
          __pyx_v_dtype = __pyx_t_2;
          __pyx_t_2 = 0;

          /* "zmq/utils/buffers.pxd":163
 *             try: # numpy.ndarray
 *                 dtype = ob.dtype
 *                 bfmt = dtype.char             # <<<<<<<<<<<<<<
 *                 bitemlen = dtype.itemsize
 *             except AttributeError:
 */
          __pyx_t_2 = PyObject_GetAttr(__pyx_v_dtype, __pyx_n_s__char); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_GOTREF(__pyx_t_2);
          if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(__pyx_t_2)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
          __pyx_v_bfmt = ((PyObject *)__pyx_t_2);
          __pyx_t_2 = 0;

          /* "zmq/utils/buffers.pxd":164
 *                 dtype = ob.dtype
 *                 bfmt = dtype.char
 *                 bitemlen = dtype.itemsize             # <<<<<<<<<<<<<<
 *             except AttributeError:
 *                 try: # array.array
 */
          __pyx_t_2 = PyObject_GetAttr(__pyx_v_dtype, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_bitemlen = __pyx_t_5;
        }
        __Pyx_XDECREF(__pyx_save_exc_type); __pyx_save_exc_type = 0;
        __Pyx_XDECREF(__pyx_save_exc_value); __pyx_save_exc_value = 0;
        __Pyx_XDECREF(__pyx_save_exc_tb); __pyx_save_exc_tb = 0;
        goto __pyx_L18_try_end;
        __pyx_L11_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

        /* "zmq/utils/buffers.pxd":165
 *                 bfmt = dtype.char
 *                 bitemlen = dtype.itemsize
 *             except AttributeError:             # <<<<<<<<<<<<<<
 *                 try: # array.array
 *                     bfmt = ob.typecode
 */
        __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
        if (__pyx_t_4) {
          __Pyx_AddTraceback("buffers.asbuffer");
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_6);

          /* "zmq/utils/buffers.pxd":166
 *                 bitemlen = dtype.itemsize
 *             except AttributeError:
 *                 try: # array.array             # <<<<<<<<<<<<<<
 *                     bfmt = ob.typecode
 *                     bitemlen = ob.itemsize
 */
          {
            PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
            __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
            __Pyx_XGOTREF(__pyx_save_exc_type);
            __Pyx_XGOTREF(__pyx_save_exc_value);
            __Pyx_XGOTREF(__pyx_save_exc_tb);
            /*try:*/ {

              /* "zmq/utils/buffers.pxd":167
 *             except AttributeError:
 *                 try: # array.array
 *                     bfmt = ob.typecode             # <<<<<<<<<<<<<<
 *                     bitemlen = ob.itemsize
 *                 except AttributeError:
 */
              __pyx_t_7 = PyObject_GetAttr(__pyx_v_ob, __pyx_n_s__typecode); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_GOTREF(__pyx_t_7);
              if (!(likely(PyString_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected str, got %.200s", Py_TYPE(__pyx_t_7)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
              __pyx_v_bfmt = ((PyObject *)__pyx_t_7);
              __pyx_t_7 = 0;

              /* "zmq/utils/buffers.pxd":168
 *                 try: # array.array
 *                     bfmt = ob.typecode
 *                     bitemlen = ob.itemsize             # <<<<<<<<<<<<<<
 *                 except AttributeError:
 *                     if isinstance(ob, bytes):
 */
              __pyx_t_7 = PyObject_GetAttr(__pyx_v_ob, __pyx_n_s__itemsize); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_GOTREF(__pyx_t_7);
              __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __pyx_v_bitemlen = __pyx_t_5;
            }
            __Pyx_XDECREF(__pyx_save_exc_type); __pyx_save_exc_type = 0;
            __Pyx_XDECREF(__pyx_save_exc_value); __pyx_save_exc_value = 0;
            __Pyx_XDECREF(__pyx_save_exc_tb); __pyx_save_exc_tb = 0;
            goto __pyx_L28_try_end;
            __pyx_L21_error:;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;

            /* "zmq/utils/buffers.pxd":169
 *                     bfmt = ob.typecode
 *                     bitemlen = ob.itemsize
 *                 except AttributeError:             # <<<<<<<<<<<<<<
 *                     if isinstance(ob, bytes):
 *                         bfmt = "B"
 */
            __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
            if (__pyx_t_4) {
              __Pyx_AddTraceback("buffers.asbuffer");
              if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L23_except_error;}
              __Pyx_GOTREF(__pyx_t_7);
              __Pyx_GOTREF(__pyx_t_8);
              __Pyx_GOTREF(__pyx_t_9);

              /* "zmq/utils/buffers.pxd":170
 *                     bitemlen = ob.itemsize
 *                 except AttributeError:
 *                     if isinstance(ob, bytes):             # <<<<<<<<<<<<<<
 *                         bfmt = "B"
 *                         bitemlen = 1
 */
              __pyx_t_1 = PyBytes_Check(__pyx_v_ob); 
              if (__pyx_t_1) {

                /* "zmq/utils/buffers.pxd":171
 *                 except AttributeError:
 *                     if isinstance(ob, bytes):
 *                         bfmt = "B"             # <<<<<<<<<<<<<<
 *                         bitemlen = 1
 *                     else:
 */
                __Pyx_INCREF(((PyObject *)__pyx_n_s__B));
                __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
                __pyx_v_bfmt = __pyx_n_s__B;

                /* "zmq/utils/buffers.pxd":172
 *                     if isinstance(ob, bytes):
 *                         bfmt = "B"
 *                         bitemlen = 1             # <<<<<<<<<<<<<<
 *                     else:
 *                         # nothing found
 */
                __pyx_v_bitemlen = 1;
                goto __pyx_L31;
              }
              /*else*/ {

                /* "zmq/utils/buffers.pxd":175
 *                     else:
 *                         # nothing found
 *                         bfmt = None             # <<<<<<<<<<<<<<
 *                         bitemlen = 0
 *     if base: base[0] = <void *>bptr
 */
                __Pyx_INCREF(Py_None);
                __Pyx_DECREF(((PyObject *)__pyx_v_bfmt));
                __pyx_v_bfmt = ((PyObject *)Py_None);

                /* "zmq/utils/buffers.pxd":176
 *                         # nothing found
 *                         bfmt = None
 *                         bitemlen = 0             # <<<<<<<<<<<<<<
 *     if base: base[0] = <void *>bptr
 *     if size: size[0] = <Py_ssize_t>blen
 */
                __pyx_v_bitemlen = 0;
              }
              __pyx_L31:;
              __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              goto __pyx_L22_exception_handled;
            }
            __pyx_L23_except_error:;
            __Pyx_XGIVEREF(__pyx_save_exc_type);
            __Pyx_XGIVEREF(__pyx_save_exc_value);
            __Pyx_XGIVEREF(__pyx_save_exc_tb);
            __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
            goto __pyx_L13_except_error;
            __pyx_L22_exception_handled:;
            __Pyx_XGIVEREF(__pyx_save_exc_type);
            __Pyx_XGIVEREF(__pyx_save_exc_value);
            __Pyx_XGIVEREF(__pyx_save_exc_tb);
            __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
            __pyx_L28_try_end:;
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L12_exception_handled;
        }
        __pyx_L13_except_error:;
        __Pyx_XGIVEREF(__pyx_save_exc_type);
        __Pyx_XGIVEREF(__pyx_save_exc_value);
        __Pyx_XGIVEREF(__pyx_save_exc_tb);
        __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
        goto __pyx_L1_error;
        __pyx_L12_exception_handled:;
        __Pyx_XGIVEREF(__pyx_save_exc_type);
        __Pyx_XGIVEREF(__pyx_save_exc_value);
        __Pyx_XGIVEREF(__pyx_save_exc_tb);
        __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
        __pyx_L18_try_end:;
      }
      goto __pyx_L10;
    }
    __pyx_L10:;
  }
  __pyx_L4:;

  /* "zmq/utils/buffers.pxd":177
 *                         bfmt = None
 *                         bitemlen = 0
 *     if base: base[0] = <void *>bptr             # <<<<<<<<<<<<<<
 *     if size: size[0] = <Py_ssize_t>blen
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen
 */
  __pyx_t_1 = (__pyx_v_base != 0);
  if (__pyx_t_1) {
    (__pyx_v_base[0]) = ((void *)__pyx_v_bptr);
    goto __pyx_L32;
  }
  __pyx_L32:;

  /* "zmq/utils/buffers.pxd":178
 *                         bitemlen = 0
 *     if base: base[0] = <void *>bptr
 *     if size: size[0] = <Py_ssize_t>blen             # <<<<<<<<<<<<<<
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen
 *     return bfmt
 */
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
    (__pyx_v_size[0]) = __pyx_v_blen;
    goto __pyx_L33;
  }
  __pyx_L33:;

  /* "zmq/utils/buffers.pxd":179
 *     if base: base[0] = <void *>bptr
 *     if size: size[0] = <Py_ssize_t>blen
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen             # <<<<<<<<<<<<<<
 *     return bfmt
 * 
 */
  __pyx_t_1 = (__pyx_v_itemsize != 0);
  if (__pyx_t_1) {
    (__pyx_v_itemsize[0]) = __pyx_v_bitemlen;
    goto __pyx_L34;
  }
  __pyx_L34:;

  /* "zmq/utils/buffers.pxd":180
 *     if size: size[0] = <Py_ssize_t>blen
 *     if itemsize: itemsize[0] = <Py_ssize_t>bitemlen
 *     return bfmt             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_bfmt));
  __pyx_r = ((PyObject *)__pyx_v_bfmt);
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("buffers.asbuffer");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bfmt);
  __Pyx_DECREF(__pyx_v_dtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":183
 * 
 * 
 * cdef inline object asbuffer_r(object ob, void **base, Py_ssize_t *size):             # <<<<<<<<<<<<<<
 *     """Wrapper for standard calls to asbuffer with a readonly buffer."""
 *     asbuffer(ob, 0, 0, base, size, NULL)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_r(PyObject *__pyx_v_ob, void **__pyx_v_base, Py_ssize_t *__pyx_v_size) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("asbuffer_r");

  /* "zmq/utils/buffers.pxd":185
 * cdef inline object asbuffer_r(object ob, void **base, Py_ssize_t *size):
 *     """Wrapper for standard calls to asbuffer with a readonly buffer."""
 *     asbuffer(ob, 0, 0, base, size, NULL)             # <<<<<<<<<<<<<<
 *     return ob
 * 
 */
  __pyx_t_1 = __pyx_f_7buffers_asbuffer(__pyx_v_ob, 0, 0, __pyx_v_base, __pyx_v_size, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/utils/buffers.pxd":186
 *     """Wrapper for standard calls to asbuffer with a readonly buffer."""
 *     asbuffer(ob, 0, 0, base, size, NULL)
 *     return ob             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.asbuffer_r");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":189
 * 
 * 
 * cdef inline object asbuffer_w(object ob, void **base, Py_ssize_t *size):             # <<<<<<<<<<<<<<
 *     """Wrapper for standard calls to asbuffer with a writable buffer."""
 *     asbuffer(ob, 1, 0, base, size, NULL)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_asbuffer_w(PyObject *__pyx_v_ob, void **__pyx_v_base, Py_ssize_t *__pyx_v_size) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("asbuffer_w");

  /* "zmq/utils/buffers.pxd":191
 * cdef inline object asbuffer_w(object ob, void **base, Py_ssize_t *size):
 *     """Wrapper for standard calls to asbuffer with a writable buffer."""
 *     asbuffer(ob, 1, 0, base, size, NULL)             # <<<<<<<<<<<<<<
 *     return ob
 * 
 */
  __pyx_t_1 = __pyx_f_7buffers_asbuffer(__pyx_v_ob, 1, 0, __pyx_v_base, __pyx_v_size, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "zmq/utils/buffers.pxd":192
 *     """Wrapper for standard calls to asbuffer with a writable buffer."""
 *     asbuffer(ob, 1, 0, base, size, NULL)
 *     return ob             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.asbuffer_w");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":198
 * #------------------------------------------------------------------------------
 * 
 * cdef inline object frombuffer_3(void *ptr, Py_ssize_t s, int readonly):             # <<<<<<<<<<<<<<
 *     """Python 3 version of frombuffer.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_3(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s, int __pyx_v_readonly) {
  Py_buffer __pyx_v_pybuf;
  Py_ssize_t *__pyx_v_shape;
  PyObject *__pyx_v_astr = 0;
  PyObject *__pyx_r = NULL;
  Py_ssize_t __pyx_t_1[1];
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("frombuffer_3");

  /* "zmq/utils/buffers.pxd":205
 *     """
 *     cdef Py_buffer pybuf
 *     cdef Py_ssize_t *shape = [s]             # <<<<<<<<<<<<<<
 *     cdef str astr=""
 *     if newstyle_available():
 */
  __pyx_t_1[0] = __pyx_v_s;
  __pyx_v_shape = __pyx_t_1;

  /* "zmq/utils/buffers.pxd":206
 *     cdef Py_buffer pybuf
 *     cdef Py_ssize_t *shape = [s]
 *     cdef str astr=""             # <<<<<<<<<<<<<<
 *     if newstyle_available():
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 */
  __Pyx_INCREF(((PyObject *)__pyx_kp_s_7));
  __pyx_v_astr = __pyx_kp_s_7;

  /* "zmq/utils/buffers.pxd":207
 *     cdef Py_ssize_t *shape = [s]
 *     cdef str astr=""
 *     if newstyle_available():             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 *         pybuf.format = "B"
 */
  __pyx_t_2 = __pyx_f_7buffers_newstyle_available();
  if (__pyx_t_2) {

    /* "zmq/utils/buffers.pxd":208
 *     cdef str astr=""
 *     if newstyle_available():
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)             # <<<<<<<<<<<<<<
 *         pybuf.format = "B"
 *         pybuf.shape = shape
 */
    __pyx_t_2 = PyBuffer_FillInfo((&__pyx_v_pybuf), ((PyObject *)__pyx_v_astr), __pyx_v_ptr, __pyx_v_s, __pyx_v_readonly, PyBUF_SIMPLE); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}

    /* "zmq/utils/buffers.pxd":209
 *     if newstyle_available():
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 *         pybuf.format = "B"             # <<<<<<<<<<<<<<
 *         pybuf.shape = shape
 *         return PyMemoryView_FromBuffer(&pybuf)
 */
    __pyx_v_pybuf.format = __pyx_k__B;

    /* "zmq/utils/buffers.pxd":210
 *         PyBuffer_FillInfo(&pybuf, astr, ptr, s, readonly, PyBUF_SIMPLE)
 *         pybuf.format = "B"
 *         pybuf.shape = shape             # <<<<<<<<<<<<<<
 *         return PyMemoryView_FromBuffer(&pybuf)
 *     else:
 */
    __pyx_v_pybuf.shape = __pyx_v_shape;

    /* "zmq/utils/buffers.pxd":211
 *         pybuf.format = "B"
 *         pybuf.shape = shape
 *         return PyMemoryView_FromBuffer(&pybuf)             # <<<<<<<<<<<<<<
 *     else:
 *         raise NotImplementedError("New style buffers not available.")
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyMemoryView_FromBuffer((&__pyx_v_pybuf)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "zmq/utils/buffers.pxd":213
 *         return PyMemoryView_FromBuffer(&pybuf)
 *     else:
 *         raise NotImplementedError("New style buffers not available.")             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_8));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_8));
    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_8));
    __pyx_t_4 = PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("buffers.frombuffer_3");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_astr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":216
 * 
 * 
 * cdef inline object frombuffer_2(void *ptr, Py_ssize_t s, int readonly):             # <<<<<<<<<<<<<<
 *     """Python 2 version of frombuffer.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_2(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s, int __pyx_v_readonly) {
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("frombuffer_2");

  /* "zmq/utils/buffers.pxd":222
 *     """
 * 
 *     if oldstyle_available():             # <<<<<<<<<<<<<<
 *         if readonly:
 *             return PyBuffer_FromMemory(ptr, s)
 */
  __pyx_t_1 = __pyx_f_7buffers_oldstyle_available();
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":223
 * 
 *     if oldstyle_available():
 *         if readonly:             # <<<<<<<<<<<<<<
 *             return PyBuffer_FromMemory(ptr, s)
 *         else:
 */
    if (__pyx_v_readonly) {

      /* "zmq/utils/buffers.pxd":224
 *     if oldstyle_available():
 *         if readonly:
 *             return PyBuffer_FromMemory(ptr, s)             # <<<<<<<<<<<<<<
 *         else:
 *             return PyBuffer_FromReadWriteMemory(ptr, s)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromMemory(__pyx_v_ptr, __pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
      goto __pyx_L4;
    }
    /*else*/ {

      /* "zmq/utils/buffers.pxd":226
 *             return PyBuffer_FromMemory(ptr, s)
 *         else:
 *             return PyBuffer_FromReadWriteMemory(ptr, s)             # <<<<<<<<<<<<<<
 *     else:
 *         raise NotImplementedError("Old style buffers not available.")
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromReadWriteMemory(__pyx_v_ptr, __pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "zmq/utils/buffers.pxd":228
 *             return PyBuffer_FromReadWriteMemory(ptr, s)
 *     else:
 *         raise NotImplementedError("Old style buffers not available.")             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)__pyx_kp_s_9));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_9));
    __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_9));
    __pyx_t_3 = PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("buffers.frombuffer_2");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":231
 * 
 * 
 * cdef inline object frombuffer(void *ptr, Py_ssize_t s, int readonly):             # <<<<<<<<<<<<<<
 *     """Create a Python Buffer/View of a C array.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s, int __pyx_v_readonly) {
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("frombuffer");

  /* "zmq/utils/buffers.pxd":248
 *     """
 *     # oldstyle first priority for now
 *     if oldstyle_available():             # <<<<<<<<<<<<<<
 *         return frombuffer_2(ptr, s, readonly)
 *     else:
 */
  __pyx_t_1 = __pyx_f_7buffers_oldstyle_available();
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":249
 *     # oldstyle first priority for now
 *     if oldstyle_available():
 *         return frombuffer_2(ptr, s, readonly)             # <<<<<<<<<<<<<<
 *     else:
 *         return frombuffer_3(ptr, s, readonly)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_frombuffer_2(__pyx_v_ptr, __pyx_v_s, __pyx_v_readonly); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "zmq/utils/buffers.pxd":251
 *         return frombuffer_2(ptr, s, readonly)
 *     else:
 *         return frombuffer_3(ptr, s, readonly)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7buffers_frombuffer_3(__pyx_v_ptr, __pyx_v_s, __pyx_v_readonly); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("buffers.frombuffer");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":254
 * 
 * 
 * cdef inline object frombuffer_r(void *ptr, Py_ssize_t s):             # <<<<<<<<<<<<<<
 *     """Wrapper for readonly view frombuffer."""
 *     return frombuffer(ptr, s, 1)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_r(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("frombuffer_r");

  /* "zmq/utils/buffers.pxd":256
 * cdef inline object frombuffer_r(void *ptr, Py_ssize_t s):
 *     """Wrapper for readonly view frombuffer."""
 *     return frombuffer(ptr, s, 1)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_frombuffer(__pyx_v_ptr, __pyx_v_s, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.frombuffer_r");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":259
 * 
 * 
 * cdef inline object frombuffer_w(void *ptr, Py_ssize_t s):             # <<<<<<<<<<<<<<
 *     """Wrapper for writable view frombuffer."""
 *     return frombuffer(ptr, s, 0)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_frombuffer_w(void *__pyx_v_ptr, Py_ssize_t __pyx_v_s) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("frombuffer_w");

  /* "zmq/utils/buffers.pxd":261
 * cdef inline object frombuffer_w(void *ptr, Py_ssize_t s):
 *     """Wrapper for writable view frombuffer."""
 *     return frombuffer(ptr, s, 0)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_frombuffer(__pyx_v_ptr, __pyx_v_s, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.frombuffer_w");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":268
 * #------------------------------------------------------------------------------
 * 
 * cdef inline object viewfromobject(object obj, int readonly):             # <<<<<<<<<<<<<<
 *     """Construct a Python Buffer/View object from another Python object.
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject(PyObject *__pyx_v_obj, int __pyx_v_readonly) {
  PyObject *__pyx_r = NULL;
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("viewfromobject");

  /* "zmq/utils/buffers.pxd":284
 *     Buffer/View of the original object.
 *     """
 *     if not memoryview_available():             # <<<<<<<<<<<<<<
 *         if readonly:
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)
 */
  __pyx_t_1 = (!__pyx_f_7buffers_memoryview_available());
  if (__pyx_t_1) {

    /* "zmq/utils/buffers.pxd":285
 *     """
 *     if not memoryview_available():
 *         if readonly:             # <<<<<<<<<<<<<<
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)
 *         else:
 */
    if (__pyx_v_readonly) {

      /* "zmq/utils/buffers.pxd":286
 *     if not memoryview_available():
 *         if readonly:
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)             # <<<<<<<<<<<<<<
 *         else:
 *             return PyBuffer_FromReadWriteObject(obj, 0, Py_END_OF_BUFFER)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromObject(__pyx_v_obj, 0, Py_END_OF_BUFFER); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
      goto __pyx_L4;
    }
    /*else*/ {

      /* "zmq/utils/buffers.pxd":288
 *             return PyBuffer_FromObject(obj, 0, Py_END_OF_BUFFER)
 *         else:
 *             return PyBuffer_FromReadWriteObject(obj, 0, Py_END_OF_BUFFER)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMemoryView_FromObject(obj)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = PyBuffer_FromReadWriteObject(__pyx_v_obj, 0, Py_END_OF_BUFFER); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
    }
    __pyx_L4:;
    goto __pyx_L3;
  }
  /*else*/ {

    /* "zmq/utils/buffers.pxd":290
 *             return PyBuffer_FromReadWriteObject(obj, 0, Py_END_OF_BUFFER)
 *     else:
 *         return PyMemoryView_FromObject(obj)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyMemoryView_FromObject(__pyx_v_obj); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("buffers.viewfromobject");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":293
 * 
 * 
 * cdef inline object viewfromobject_r(object obj):             # <<<<<<<<<<<<<<
 *     """Wrapper for readonly viewfromobject."""
 *     return viewfromobject(obj, 1)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_r(PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("viewfromobject_r");

  /* "zmq/utils/buffers.pxd":295
 * cdef inline object viewfromobject_r(object obj):
 *     """Wrapper for readonly viewfromobject."""
 *     return viewfromobject(obj, 1)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_viewfromobject(__pyx_v_obj, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.viewfromobject_r");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "zmq/utils/buffers.pxd":298
 * 
 * 
 * cdef inline object viewfromobject_w(object obj):             # <<<<<<<<<<<<<<
 *     """Wrapper for writable viewfromobject."""
 *     return viewfromobject(obj, 0)
 */

static CYTHON_INLINE PyObject *__pyx_f_7buffers_viewfromobject_w(PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("viewfromobject_w");

  /* "zmq/utils/buffers.pxd":300
 * cdef inline object viewfromobject_w(object obj):
 *     """Wrapper for writable viewfromobject."""
 *     return viewfromobject(obj, 0)             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7buffers_viewfromobject(__pyx_v_obj, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("buffers.viewfromobject_w");
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_tp_new_3zmq_4core_7message_MessageTracker(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p;
  PyObject *o = (*t->tp_alloc)(t, 0);
  if (!o) return 0;
  p = ((struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o);
  p->queues = ((PyObject *)Py_None); Py_INCREF(Py_None);
  p->peers = ((PyObject *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_3zmq_4core_7message_MessageTracker(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p = (struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o;
  Py_XDECREF(((PyObject *)p->queues));
  Py_XDECREF(((PyObject *)p->peers));
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_3zmq_4core_7message_MessageTracker(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p = (struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o;
  if (p->queues) {
    e = (*v)(p->queues, a); if (e) return e;
  }
  if (p->peers) {
    e = (*v)(p->peers, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_3zmq_4core_7message_MessageTracker(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_MessageTracker *p = (struct __pyx_obj_3zmq_4core_7message_MessageTracker *)o;
  PyObject* tmp;
  tmp = ((PyObject*)p->queues);
  p->queues = ((PyObject *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->peers);
  p->peers = ((PyObject *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_3zmq_4core_7message_MessageTracker[] = {
  {__Pyx_NAMESTR("done"), (PyCFunction)__pyx_pf_3zmq_4core_7message_14MessageTracker_done, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_14MessageTracker_done)},
  {__Pyx_NAMESTR("wait"), (PyCFunction)__pyx_pf_3zmq_4core_7message_14MessageTracker_wait, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_14MessageTracker_wait)},
  {__Pyx_NAMESTR("old_wait"), (PyCFunction)__pyx_pf_3zmq_4core_7message_14MessageTracker_old_wait, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_14MessageTracker_old_wait)},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_MessageTracker = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  #if PY_VERSION_HEX >= 0x02050000
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_MessageTracker = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_MessageTracker = {
  0, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_MessageTracker = {
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getreadbuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getwritebuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getsegcount*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getcharbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_getbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_releasebuffer*/
  #endif
};

PyTypeObject __pyx_type_3zmq_4core_7message_MessageTracker = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("zmq.core.message.MessageTracker"), /*tp_name*/
  sizeof(struct __pyx_obj_3zmq_4core_7message_MessageTracker), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_3zmq_4core_7message_MessageTracker, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_MessageTracker, /*tp_as_number*/
  &__pyx_tp_as_sequence_MessageTracker, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_MessageTracker, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_MessageTracker, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("MessageTracker(*towatch)\n\n    A class for tracking if 0MQ is done using one or more messages.\n\n    When you send a 0MQ mesage, it is not sent immeidately. The 0MQ IO thread\n    send the message at some later time. Often you want to know when 0MQ has\n    actually sent the message though. This is complicated by the fact that\n    a single 0MQ message can be sent multiple times using differen sockets.\n    This class allows you to track all of the 0MQ usages of a message.\n\n    Parameters\n    ----------\n    *towatch : tuple of Queue, MessageTracker, Message instances.\n        This list of objects to track. This class can track the low-level\n        Queues used by the Message class, other MessageTrackers or\n        actual Messsages.\n    "), /*tp_doc*/
  __pyx_tp_traverse_3zmq_4core_7message_MessageTracker, /*tp_traverse*/
  __pyx_tp_clear_3zmq_4core_7message_MessageTracker, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_3zmq_4core_7message_MessageTracker, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pf_3zmq_4core_7message_14MessageTracker___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_3zmq_4core_7message_MessageTracker, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};
static struct __pyx_vtabstruct_3zmq_4core_7message_Message __pyx_vtable_3zmq_4core_7message_Message;

static PyObject *__pyx_tp_new_3zmq_4core_7message_Message(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_3zmq_4core_7message_Message *p;
  PyObject *o = (*t->tp_alloc)(t, 0);
  if (!o) return 0;
  p = ((struct __pyx_obj_3zmq_4core_7message_Message *)o);
  p->__pyx_vtab = __pyx_vtabptr_3zmq_4core_7message_Message;
  p->_data = Py_None; Py_INCREF(Py_None);
  p->_buffer = Py_None; Py_INCREF(Py_None);
  p->_bytes = Py_None; Py_INCREF(Py_None);
  p->tracker_queue = Py_None; Py_INCREF(Py_None);
  p->tracker = Py_None; Py_INCREF(Py_None);
  if (__pyx_pf_3zmq_4core_7message_7Message___cinit__(o, a, k) < 0) {
    Py_DECREF(o); o = 0;
  }
  return o;
}

static void __pyx_tp_dealloc_3zmq_4core_7message_Message(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_Message *p = (struct __pyx_obj_3zmq_4core_7message_Message *)o;
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pf_3zmq_4core_7message_7Message___dealloc__(o);
    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_XDECREF(p->_data);
  Py_XDECREF(p->_buffer);
  Py_XDECREF(p->_bytes);
  Py_XDECREF(p->tracker_queue);
  Py_XDECREF(p->tracker);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_3zmq_4core_7message_Message(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_3zmq_4core_7message_Message *p = (struct __pyx_obj_3zmq_4core_7message_Message *)o;
  if (p->_data) {
    e = (*v)(p->_data, a); if (e) return e;
  }
  if (p->_buffer) {
    e = (*v)(p->_buffer, a); if (e) return e;
  }
  if (p->_bytes) {
    e = (*v)(p->_bytes, a); if (e) return e;
  }
  if (p->tracker_queue) {
    e = (*v)(p->tracker_queue, a); if (e) return e;
  }
  if (p->tracker) {
    e = (*v)(p->tracker, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_3zmq_4core_7message_Message(PyObject *o) {
  struct __pyx_obj_3zmq_4core_7message_Message *p = (struct __pyx_obj_3zmq_4core_7message_Message *)o;
  PyObject* tmp;
  tmp = ((PyObject*)p->_data);
  p->_data = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_buffer);
  p->_buffer = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_bytes);
  p->_bytes = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->tracker_queue);
  p->tracker_queue = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->tracker);
  p->tracker = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_3zmq_4core_7message_7Message_tracker_queue(PyObject *o, void *x) {
  return __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___get__(o);
}

static int __pyx_setprop_3zmq_4core_7message_7Message_tracker_queue(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___set__(o, v);
  }
  else {
    return __pyx_pf_3zmq_4core_7message_7Message_13tracker_queue___del__(o);
  }
}

static PyObject *__pyx_getprop_3zmq_4core_7message_7Message_tracker(PyObject *o, void *x) {
  return __pyx_pf_3zmq_4core_7message_7Message_7tracker___get__(o);
}

static int __pyx_setprop_3zmq_4core_7message_7Message_tracker(PyObject *o, PyObject *v, void *x) {
  if (v) {
    return __pyx_pf_3zmq_4core_7message_7Message_7tracker___set__(o, v);
  }
  else {
    return __pyx_pf_3zmq_4core_7message_7Message_7tracker___del__(o);
  }
}

static PyMethodDef __pyx_methods_3zmq_4core_7message_Message[] = {
  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message___copy__, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message___copy__)},
  {__Pyx_NAMESTR("done"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_done, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_done)},
  {__Pyx_NAMESTR("wait"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_wait, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_wait)},
  {__Pyx_NAMESTR("buffer"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_buffer, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_buffer)},
  {__Pyx_NAMESTR("bytes"), (PyCFunction)__pyx_pf_3zmq_4core_7message_7Message_bytes, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_3zmq_4core_7message_7Message_bytes)},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_3zmq_4core_7message_Message[] = {
  {(char *)"tracker_queue", __pyx_getprop_3zmq_4core_7message_7Message_tracker_queue, __pyx_setprop_3zmq_4core_7message_7Message_tracker_queue, 0, 0},
  {(char *)"tracker", __pyx_getprop_3zmq_4core_7message_7Message_tracker, __pyx_setprop_3zmq_4core_7message_7Message_tracker, 0, 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Message = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  #if PY_VERSION_HEX >= 0x02050000
  0, /*nb_index*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_Message = {
  __pyx_pf_3zmq_4core_7message_7Message___len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Message = {
  __pyx_pf_3zmq_4core_7message_7Message___len__, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_Message = {
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getreadbuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getwritebuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getsegcount*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getcharbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_getbuffer*/
  #endif
  #if PY_VERSION_HEX >= 0x02060000
  0, /*bf_releasebuffer*/
  #endif
};

PyTypeObject __pyx_type_3zmq_4core_7message_Message = {
  PyVarObject_HEAD_INIT(0, 0)
  __Pyx_NAMESTR("zmq.core.message.Message"), /*tp_name*/
  sizeof(struct __pyx_obj_3zmq_4core_7message_Message), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_3zmq_4core_7message_Message, /*tp_dealloc*/
  0, /*tp_print*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #else
  0, /*reserved*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Message, /*tp_as_number*/
  &__pyx_tp_as_sequence_Message, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Message, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pf_3zmq_4core_7message_7Message___str__, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Message, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  __Pyx_DOCSTR("Message(data=None, track=False)\n\n    A Message class for non-copy send/recvs.\n\n    This class is only needed if you want to do non-copying send and recvs.\n    When you pass a string to this class, like ``Message(s)``, the \n    ref-count of s is increased by two: once because Message saves s as \n    an instance attribute and another because a ZMQ message is created that\n    points to the buffer of s. This second ref-count increase makes sure\n    that s lives until all messages that use it have been sent. Once 0MQ\n    sends all the messages and it doesn't need the buffer of s, 0MQ will call\n    Py_DECREF(s).\n\n    Parameters\n    ----------\n\n    data : object, optional\n        any object that provides the buffer interface will be used to\n        construct the 0MQ message data.\n    "), /*tp_doc*/
  __pyx_tp_traverse_3zmq_4core_7message_Message, /*tp_traverse*/
  __pyx_tp_clear_3zmq_4core_7message_Message, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_3zmq_4core_7message_Message, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_3zmq_4core_7message_Message, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pf_3zmq_4core_7message_7Message___init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_3zmq_4core_7message_Message, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  #if PY_VERSION_HEX >= 0x02060000
  0, /*tp_version_tag*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    __Pyx_NAMESTR("message"),
    __Pyx_DOCSTR(__pyx_k_10), /* m_doc */
    -1, /* m_size */
    __pyx_methods /* m_methods */,
    NULL, /* m_reload */
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
  {&__pyx_n_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 1},
  {&__pyx_n_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 1},
  {&__pyx_kp_u_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 1, 0, 0},
  {&__pyx_kp_u_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 1, 0, 0},
  {&__pyx_kp_u_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 1, 0, 0},
  {&__pyx_kp_u_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 1, 0, 0},
  {&__pyx_kp_u_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 1, 0, 0},
  {&__pyx_kp_u_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 1, 0, 0},
  {&__pyx_kp_u_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 1, 0, 0},
  {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0},
  {&__pyx_kp_u_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 1, 0, 0},
  {&__pyx_kp_u_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 1, 0, 0},
  {&__pyx_kp_u_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 1, 0, 0},
  {&__pyx_kp_u_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 1, 0, 0},
  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
  {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0},
  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
  {&__pyx_n_s__AttributeError, __pyx_k__AttributeError, sizeof(__pyx_k__AttributeError), 0, 0, 1, 1},
  {&__pyx_n_s__B, __pyx_k__B, sizeof(__pyx_k__B), 0, 0, 1, 1},
  {&__pyx_n_s__Empty, __pyx_k__Empty, sizeof(__pyx_k__Empty), 0, 0, 1, 1},
  {&__pyx_n_s__Message, __pyx_k__Message, sizeof(__pyx_k__Message), 0, 0, 1, 1},
  {&__pyx_n_s__MessageTracker, __pyx_k__MessageTracker, sizeof(__pyx_k__MessageTracker), 0, 0, 1, 1},
  {&__pyx_n_s__NotDone, __pyx_k__NotDone, sizeof(__pyx_k__NotDone), 0, 0, 1, 1},
  {&__pyx_n_s__NotImplementedError, __pyx_k__NotImplementedError, sizeof(__pyx_k__NotImplementedError), 0, 0, 1, 1},
  {&__pyx_n_s__Queue, __pyx_k__Queue, sizeof(__pyx_k__Queue), 0, 0, 1, 1},
  {&__pyx_n_s__TypeError, __pyx_k__TypeError, sizeof(__pyx_k__TypeError), 0, 0, 1, 1},
  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
  {&__pyx_n_s__ZMQError, __pyx_k__ZMQError, sizeof(__pyx_k__ZMQError), 0, 0, 1, 1},
  {&__pyx_n_s____all__, __pyx_k____all__, sizeof(__pyx_k____all__), 0, 0, 1, 1},
  {&__pyx_n_s____copy__, __pyx_k____copy__, sizeof(__pyx_k____copy__), 0, 0, 1, 1},
  {&__pyx_n_s____init__, __pyx_k____init__, sizeof(__pyx_k____init__), 0, 0, 1, 1},
  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
  {&__pyx_n_s____str__, __pyx_k____str__, sizeof(__pyx_k____str__), 0, 0, 1, 1},
  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
  {&__pyx_n_s___buffer, __pyx_k___buffer, sizeof(__pyx_k___buffer), 0, 0, 1, 1},
  {&__pyx_n_s___bytes, __pyx_k___bytes, sizeof(__pyx_k___bytes), 0, 0, 1, 1},
  {&__pyx_n_s___data, __pyx_k___data, sizeof(__pyx_k___data), 0, 0, 1, 1},
  {&__pyx_n_s___failed_init, __pyx_k___failed_init, sizeof(__pyx_k___failed_init), 0, 0, 1, 1},
  {&__pyx_n_s___getbuffer, __pyx_k___getbuffer, sizeof(__pyx_k___getbuffer), 0, 0, 1, 1},
  {&__pyx_n_s__add, __pyx_k__add, sizeof(__pyx_k__add), 0, 0, 1, 1},
  {&__pyx_n_s__basestring, __pyx_k__basestring, sizeof(__pyx_k__basestring), 0, 0, 1, 1},
  {&__pyx_n_s__buf, __pyx_k__buf, sizeof(__pyx_k__buf), 0, 0, 1, 1},
  {&__pyx_n_s__buffer, __pyx_k__buffer, sizeof(__pyx_k__buffer), 0, 0, 1, 1},
  {&__pyx_n_s__bytes, __pyx_k__bytes, sizeof(__pyx_k__bytes), 0, 0, 1, 1},
  {&__pyx_n_s__char, __pyx_k__char, sizeof(__pyx_k__char), 0, 0, 1, 1},
  {&__pyx_n_s__data, __pyx_k__data, sizeof(__pyx_k__data), 0, 0, 1, 1},
  {&__pyx_n_s__decode, __pyx_k__decode, sizeof(__pyx_k__decode), 0, 0, 1, 1},
  {&__pyx_n_s__done, __pyx_k__done, sizeof(__pyx_k__done), 0, 0, 1, 1},
  {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
  {&__pyx_n_s__fast_copy, __pyx_k__fast_copy, sizeof(__pyx_k__fast_copy), 0, 0, 1, 1},
  {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1},
  {&__pyx_n_s__get, __pyx_k__get, sizeof(__pyx_k__get), 0, 0, 1, 1},
  {&__pyx_n_s__itemsize, __pyx_k__itemsize, sizeof(__pyx_k__itemsize), 0, 0, 1, 1},
  {&__pyx_n_s__len, __pyx_k__len, sizeof(__pyx_k__len), 0, 0, 1, 1},
  {&__pyx_n_s__old_wait, __pyx_k__old_wait, sizeof(__pyx_k__old_wait), 0, 0, 1, 1},
  {&__pyx_n_s__peers, __pyx_k__peers, sizeof(__pyx_k__peers), 0, 0, 1, 1},
  {&__pyx_n_s__property, __pyx_k__property, sizeof(__pyx_k__property), 0, 0, 1, 1},
  {&__pyx_n_s__put, __pyx_k__put, sizeof(__pyx_k__put), 0, 0, 1, 1},
  {&__pyx_n_s__queue, __pyx_k__queue, sizeof(__pyx_k__queue), 0, 0, 1, 1},
  {&__pyx_n_s__queues, __pyx_k__queues, sizeof(__pyx_k__queues), 0, 0, 1, 1},
  {&__pyx_n_s__shape, __pyx_k__shape, sizeof(__pyx_k__shape), 0, 0, 1, 1},
  {&__pyx_n_s__sleep, __pyx_k__sleep, sizeof(__pyx_k__sleep), 0, 0, 1, 1},
  {&__pyx_n_s__time, __pyx_k__time, sizeof(__pyx_k__time), 0, 0, 1, 1},
  {&__pyx_n_s__timeout, __pyx_k__timeout, sizeof(__pyx_k__timeout), 0, 0, 1, 1},
  {&__pyx_n_s__track, __pyx_k__track, sizeof(__pyx_k__track), 0, 0, 1, 1},
  {&__pyx_n_s__tracker, __pyx_k__tracker, sizeof(__pyx_k__tracker), 0, 0, 1, 1},
  {&__pyx_n_s__tracker_queue, __pyx_k__tracker_queue, sizeof(__pyx_k__tracker_queue), 0, 0, 1, 1},
  {&__pyx_n_s__typecode, __pyx_k__typecode, sizeof(__pyx_k__typecode), 0, 0, 1, 1},
  {&__pyx_n_s__unicode, __pyx_k__unicode, sizeof(__pyx_k__unicode), 0, 0, 1, 1},
  {&__pyx_n_s__wait, __pyx_k__wait, sizeof(__pyx_k__wait), 0, 0, 1, 1},
  {&__pyx_n_s__zmq_msg, __pyx_k__zmq_msg, sizeof(__pyx_k__zmq_msg), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_property = __Pyx_GetName(__pyx_b, __pyx_n_s__property); if (!__pyx_builtin_property) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_TypeError = __Pyx_GetName(__pyx_b, __pyx_n_s__TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_AttributeError = __Pyx_GetName(__pyx_b, __pyx_n_s__AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_builtin_NotImplementedError = __Pyx_GetName(__pyx_b, __pyx_n_s__NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  return 0;
  __pyx_L1_error:;
  return -1;
}

static int __Pyx_InitGlobals(void) {
  #if PY_VERSION_HEX < 0x02040000
  if (unlikely(__Pyx_Py23SetsImport() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  __pyx_int_604800 = PyInt_FromLong(604800); if (unlikely(!__pyx_int_604800)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  return 0;
  __pyx_L1_error:;
  return -1;
}

#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initmessage(void); /*proto*/
PyMODINIT_FUNC initmessage(void)
#else
PyMODINIT_FUNC PyInit_message(void); /*proto*/
PyMODINIT_FUNC PyInit_message(void)
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  #if CYTHON_REFNANNY
  void* __pyx_refnanny = NULL;
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
  if (!__Pyx_RefNanny) {
      PyErr_Clear();
      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
      if (!__Pyx_RefNanny)
          Py_FatalError("failed to import 'refnanny' module");
  }
  __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit_message(void)", __LINE__, __FILE__);
  #endif
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #ifdef __pyx_binding_PyCFunctionType_USED
  if (__pyx_binding_PyCFunctionType_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("message"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_10), 0, PYTHON_API_VERSION);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  #if PY_MAJOR_VERSION < 3
  Py_INCREF(__pyx_m);
  #endif
  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  /*--- Initialize various global constants etc. ---*/
  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__pyx_module_is_main_zmq__core__message) {
    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
  }
  /*--- Builtin init code ---*/
  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Global init code ---*/
  /*--- Function export code ---*/
  if (__Pyx_ExportFunction("copy_zmq_msg_bytes", (void (*)(void))__pyx_f_3zmq_4core_7message_copy_zmq_msg_bytes, "PyObject *(zmq_msg_t *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Type init code ---*/
  if (PyType_Ready(&__pyx_type_3zmq_4core_7message_MessageTracker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_MessageTracker, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__.doc = __pyx_doc_3zmq_4core_7message_14MessageTracker___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_14MessageTracker___init__;
    }
  }
  if (__Pyx_SetAttrString(__pyx_m, "MessageTracker", (PyObject *)&__pyx_type_3zmq_4core_7message_MessageTracker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_3zmq_4core_7message_MessageTracker = &__pyx_type_3zmq_4core_7message_MessageTracker;
  __pyx_vtabptr_3zmq_4core_7message_Message = &__pyx_vtable_3zmq_4core_7message_Message;
  #if PY_MAJOR_VERSION >= 3
  __pyx_vtable_3zmq_4core_7message_Message.fast_copy = (struct __pyx_obj_3zmq_4core_7message_Message *(*)(struct __pyx_obj_3zmq_4core_7message_Message *))__pyx_f_3zmq_4core_7message_7Message_fast_copy;
  __pyx_vtable_3zmq_4core_7message_Message._getbuffer = (PyObject *(*)(struct __pyx_obj_3zmq_4core_7message_Message *))__pyx_f_3zmq_4core_7message_7Message__getbuffer;
  #else
  *(void(**)(void))&__pyx_vtable_3zmq_4core_7message_Message.fast_copy = (void(*)(void))__pyx_f_3zmq_4core_7message_7Message_fast_copy;
  *(void(**)(void))&__pyx_vtable_3zmq_4core_7message_Message._getbuffer = (void(*)(void))__pyx_f_3zmq_4core_7message_7Message__getbuffer;
  #endif
  if (PyType_Ready(&__pyx_type_3zmq_4core_7message_Message) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_Message, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_7Message___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_7Message___init__.doc = __pyx_doc_3zmq_4core_7message_7Message___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_7Message___init__;
    }
  }
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_Message, "__len__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_7Message___len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_7Message___len__.doc = __pyx_doc_3zmq_4core_7message_7Message___len__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_7Message___len__;
    }
  }
  {
    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_3zmq_4core_7message_Message, "__str__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_3zmq_4core_7message_7Message___str__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_3zmq_4core_7message_7Message___str__.doc = __pyx_doc_3zmq_4core_7message_7Message___str__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_3zmq_4core_7message_7Message___str__;
    }
  }
  if (__Pyx_SetVtable(__pyx_type_3zmq_4core_7message_Message.tp_dict, __pyx_vtabptr_3zmq_4core_7message_Message) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (__Pyx_SetAttrString(__pyx_m, "Message", (PyObject *)&__pyx_type_3zmq_4core_7message_Message) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_ptype_3zmq_4core_7message_Message = &__pyx_type_3zmq_4core_7message_Message;
  /*--- Type import code ---*/
  __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), 0); if (unlikely(!__pyx_ptype_7cpython_4bool_bool)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  /*--- Function import code ---*/
  /*--- Execution code ---*/

  /* "/tmp/zmq/core/message.pyx":40
 * from czmq cimport *
 * 
 * import time             # <<<<<<<<<<<<<<
 * 
 * try:    # 3.x
 */
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__time), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__time, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "/tmp/zmq/core/message.pyx":42
 * import time
 * 
 * try:    # 3.x             # <<<<<<<<<<<<<<
 *     from queue import Queue, Empty
 * except: # 2.x
 */
  {
    PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
    __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
    __Pyx_XGOTREF(__pyx_save_exc_type);
    __Pyx_XGOTREF(__pyx_save_exc_value);
    __Pyx_XGOTREF(__pyx_save_exc_tb);
    /*try:*/ {

      /* "/tmp/zmq/core/message.pyx":43
 * 
 * try:    # 3.x
 *     from queue import Queue, Empty             # <<<<<<<<<<<<<<
 * except: # 2.x
 *     from Queue import Queue, Empty
 */
      __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_1));
      __Pyx_INCREF(((PyObject *)__pyx_n_s__Queue));
      PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__Queue));
      __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Queue));
      __Pyx_INCREF(((PyObject *)__pyx_n_s__Empty));
      PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_n_s__Empty));
      __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Empty));
      __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__queue), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(__pyx_t_1);
      if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Queue, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_GOTREF(__pyx_t_1);
      if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Empty, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L2_error;}
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_XDECREF(__pyx_save_exc_type); __pyx_save_exc_type = 0;
    __Pyx_XDECREF(__pyx_save_exc_value); __pyx_save_exc_value = 0;
    __Pyx_XDECREF(__pyx_save_exc_tb); __pyx_save_exc_tb = 0;
    goto __pyx_L9_try_end;
    __pyx_L2_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "/tmp/zmq/core/message.pyx":44
 * try:    # 3.x
 *     from queue import Queue, Empty
 * except: # 2.x             # <<<<<<<<<<<<<<
 *     from Queue import Queue, Empty
 * 
 */
    /*except:*/ {
      __Pyx_AddTraceback("zmq.core.message");
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_3);

      /* "/tmp/zmq/core/message.pyx":45
 *     from queue import Queue, Empty
 * except: # 2.x
 *     from Queue import Queue, Empty             # <<<<<<<<<<<<<<
 * 
 * from zmq.core.error import ZMQError, NotDone
 */
      __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
      __Pyx_INCREF(((PyObject *)__pyx_n_s__Queue));
      PyList_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_n_s__Queue));
      __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Queue));
      __Pyx_INCREF(((PyObject *)__pyx_n_s__Empty));
      PyList_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__Empty));
      __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Empty));
      __pyx_t_5 = __Pyx_Import(((PyObject *)__pyx_n_s__Queue), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__Queue); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_4);
      if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Queue, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__Empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_GOTREF(__pyx_t_4);
      if (PyObject_SetAttr(__pyx_m, __pyx_n_s__Empty, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L4_except_error;}
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L3_exception_handled;
    }
    __pyx_L4_except_error:;
    __Pyx_XGIVEREF(__pyx_save_exc_type);
    __Pyx_XGIVEREF(__pyx_save_exc_value);
    __Pyx_XGIVEREF(__pyx_save_exc_tb);
    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
    goto __pyx_L1_error;
    __pyx_L3_exception_handled:;
    __Pyx_XGIVEREF(__pyx_save_exc_type);
    __Pyx_XGIVEREF(__pyx_save_exc_value);
    __Pyx_XGIVEREF(__pyx_save_exc_tb);
    __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
    __pyx_L9_try_end:;
  }

  /* "/tmp/zmq/core/message.pyx":47
 *     from Queue import Queue, Empty
 * 
 * from zmq.core.error import ZMQError, NotDone             # <<<<<<<<<<<<<<
 * from zmq.utils.strtypes import bytes,unicode,basestring
 * 
 */
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__ZMQError));
  PyList_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_n_s__ZMQError));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__ZMQError));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__NotDone));
  PyList_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__NotDone));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__NotDone));
  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s_11), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__ZMQError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ZMQError, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__NotDone); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__NotDone, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "/tmp/zmq/core/message.pyx":48
 * 
 * from zmq.core.error import ZMQError, NotDone
 * from zmq.utils.strtypes import bytes,unicode,basestring             # <<<<<<<<<<<<<<
 * 
 * #-----------------------------------------------------------------------------
 */
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__bytes));
  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__bytes));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__bytes));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__unicode));
  PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_n_s__unicode));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__unicode));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__basestring));
  PyList_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_n_s__basestring));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__basestring));
  __pyx_t_3 = __Pyx_Import(((PyObject *)__pyx_n_s_12), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__bytes, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__unicode, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__basestring); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__basestring, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "/tmp/zmq/core/message.pyx":122
 * 
 *     @property
 *     def done(self):             # <<<<<<<<<<<<<<
 *         """Is 0MQ completely done with the messages being tracked."""
 *         for queue in self.queues:
 */
  __pyx_t_3 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_MessageTracker, __pyx_n_s__done); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_builtin_property, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_MessageTracker->tp_dict, __pyx_n_s__done, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_MessageTracker);

  /* "/tmp/zmq/core/message.pyx":200
 *     """
 * 
 *     def __cinit__(self, object data=None, track=False, **kwargs):             # <<<<<<<<<<<<<<
 *         cdef int rc
 *         cdef char *data_c = NULL
 */
  __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_k_3 = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "/tmp/zmq/core/message.pyx":247
 *         self._failed_init = False
 * 
 *     def __init__(self, object data=None, track=False):             # <<<<<<<<<<<<<<
 *         """Enforce signature"""
 *         pass
 */
  __pyx_t_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_k_5 = __pyx_t_3;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "/tmp/zmq/core/message.pyx":308
 * 
 *     @property
 *     def done(self):             # <<<<<<<<<<<<<<
 *         """Is 0MQ completely done with the message?"""
 *         if not self.tracker:
 */
  __pyx_t_3 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_Message, __pyx_n_s__done); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_builtin_property, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_Message->tp_dict, __pyx_n_s__done, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_Message);

  /* "/tmp/zmq/core/message.pyx":350
 * 
 *     @property
 *     def buffer(self):             # <<<<<<<<<<<<<<
 *         """Get a read-only buffer view of the message contents."""
 *         if self._buffer is None:
 */
  __pyx_t_3 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_Message, __pyx_n_s__buffer); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_builtin_property, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_Message->tp_dict, __pyx_n_s__buffer, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_Message);

  /* "/tmp/zmq/core/message.pyx":357
 * 
 *     @property
 *     def bytes(self):             # <<<<<<<<<<<<<<
 *         """Get the message content as a Python str/bytes object.
 * 
 */
  __pyx_t_3 = __Pyx_GetName((PyObject *)__pyx_ptype_3zmq_4core_7message_Message, __pyx_n_s__bytes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_Call(__pyx_builtin_property, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_3zmq_4core_7message_Message->tp_dict, __pyx_n_s__bytes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_3zmq_4core_7message_Message);

  /* "/tmp/zmq/core/message.pyx":369
 * 
 * 
 * __all__ = ['MessageTracker', 'Message']             # <<<<<<<<<<<<<<
 */
  __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__MessageTracker));
  PyList_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_n_s__MessageTracker));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__MessageTracker));
  __Pyx_INCREF(((PyObject *)__pyx_n_s__Message));
  PyList_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__Message));
  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__Message));
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____all__, ((PyObject *)__pyx_t_3)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;

  /* "/tmp/zmq/core/message.pyx":1
 * """0MQ Message related classes."""             # <<<<<<<<<<<<<<
 * 
 * #
 */
  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__MessageTracker); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_13), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__MessageTracker); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__done); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_14), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__MessageTracker); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__wait); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_15), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__MessageTracker); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__old_wait); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_16), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____init__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_17), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____copy__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_18), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s____str__); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_19), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__done); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_20), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__wait); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_21), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__buffer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_22), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Message); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__bytes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetAttrString(__pyx_t_2, "__doc__"); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_kp_u_23), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_3)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;

  /* "/Library/Python/2.5/site-packages/Cython-0.13-py2.5-macosx-10.6-i386.egg/Cython/Includes/cpython/type.pxd":2
 * 
 * cdef extern from "Python.h":             # <<<<<<<<<<<<<<
 *     # The C structure of the objects used to describe built-in types.
 * 
 */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  if (__pyx_m) {
    __Pyx_AddTraceback("init zmq.core.message");
    Py_DECREF(__pyx_m); __pyx_m = 0;
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init zmq.core.message");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if PY_MAJOR_VERSION < 3
  return;
  #else
  return __pyx_m;
  #endif
}

/* Runtime support code */

static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
    PyObject *result;
    result = PyObject_GetAttr(dict, name);
    if (!result)
        PyErr_SetObject(PyExc_NameError, name);
    return result;
}


static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
    PyObject *kwdict,
    const char* function_name,
    int kw_allowed)
{
    PyObject* key = 0;
    Py_ssize_t pos = 0;
    while (PyDict_Next(kwdict, &pos, &key, 0)) {
        #if PY_MAJOR_VERSION < 3
        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
        #else
        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key)))
        #endif
            goto invalid_keyword_type;
    }
    if ((!kw_allowed) && unlikely(key))
        goto invalid_keyword;
    return 1;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%s() keywords must be strings", function_name);
    return 0;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%s() got an unexpected keyword argument '%s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AS_STRING(kw_name));
        #endif
}

static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *number, *more_or_less;

    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    number = (num_expected == 1) ? "" : "s";
    PyErr_Format(PyExc_TypeError,
        #if PY_VERSION_HEX < 0x02050000
            "%s() takes %s %d positional argument%s (%d given)",
        #else
            "%s() takes %s %zd positional argument%s (%zd given)",
        #endif
        func_name, more_or_less, num_expected, number, num_found);
}

static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;

    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
        } else {
            #if PY_MAJOR_VERSION < 3
            if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
            #else
            if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
            #endif
                goto invalid_keyword_type;
            } else {
                for (name = first_kw_arg; *name; name++) {
                    #if PY_MAJOR_VERSION >= 3
                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
                        PyUnicode_Compare(**name, key) == 0) break;
                    #else
                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
                        _PyString_Eq(**name, key)) break;
                    #endif
                }
                if (*name) {
                    values[name-argnames] = value;
                } else {
                    /* unexpected keyword found */
                    for (name=argnames; name != first_kw_arg; name++) {
                        if (**name == key) goto arg_passed_twice;
                        #if PY_MAJOR_VERSION >= 3
                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
                        #else
                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
                            _PyString_Eq(**name, key)) goto arg_passed_twice;
                        #endif
                    }
                    if (kwds2) {
                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
                    } else {
                        goto invalid_keyword;
                    }
                }
            }
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%s() got an unexpected keyword argument '%s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *local_type, *local_value, *local_tb;
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
    if (unlikely(tstate->curexc_type))
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
        goto bad;
    #endif
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
    Py_INCREF(local_type);
    Py_INCREF(local_value);
    Py_INCREF(local_tb);
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    /* Make sure tstate is in a consistent state when we XDECREF
       these objects (XDECREF may run arbitrary code). */
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}


static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
}

static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}

static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
    PyObject *py_import = 0;
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    py_import = __Pyx_GetAttrString(__pyx_b, "__import__");
    if (!py_import)
        goto bad;
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    module = PyObject_CallFunctionObjArgs(py_import,
        name, global_dict, empty_dict, list, NULL);
bad:
    Py_XDECREF(empty_list);
    Py_XDECREF(py_import);
    Py_XDECREF(empty_dict);
    return module;
}

static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyThreadState *tstate = PyThreadState_GET();

    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}

static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
    PyThreadState *tstate = PyThreadState_GET();
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;

    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
}


#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
    Py_XINCREF(type);
    Py_XINCREF(value);
    Py_XINCREF(tb);
    /* First, check the traceback argument, replacing None with NULL. */
    if (tb == Py_None) {
        Py_DECREF(tb);
        tb = 0;
    }
    else if (tb != NULL && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto raise_error;
    }
    /* Next, replace a missing value with None */
    if (value == NULL) {
        value = Py_None;
        Py_INCREF(value);
    }
    #if PY_VERSION_HEX < 0x02050000
    if (!PyClass_Check(type))
    #else
    if (!PyType_Check(type))
    #endif
    {
        /* Raising an instance.  The value should be a dummy. */
        if (value != Py_None) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        /* Normalize to raise <class>, <instance> */
        Py_DECREF(value);
        value = type;
        #if PY_VERSION_HEX < 0x02050000
            if (PyInstance_Check(type)) {
                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
                Py_INCREF(type);
            }
            else {
                type = 0;
                PyErr_SetString(PyExc_TypeError,
                    "raise: exception must be an old-style class or instance");
                goto raise_error;
            }
        #else
            type = (PyObject*) Py_TYPE(type);
            Py_INCREF(type);
            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
                PyErr_SetString(PyExc_TypeError,
                    "raise: exception class must be a subclass of BaseException");
                goto raise_error;
            }
        #endif
    }

    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}

#else /* Python 3+ */

static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;

    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (!PyExceptionClass_Check(type)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }

    PyErr_SetObject(type, value);

    if (tb) {
        PyThreadState *tstate = PyThreadState_GET();
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
    }

bad:
    return;
}
#endif

static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned char" :
                    "value too large to convert to unsigned char");
            }
            return (unsigned char)-1;
        }
        return (unsigned char)val;
    }
    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned short" :
                    "value too large to convert to unsigned short");
            }
            return (unsigned short)-1;
        }
        return (unsigned short)val;
    }
    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(unsigned int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(unsigned int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to unsigned int" :
                    "value too large to convert to unsigned int");
            }
            return (unsigned int)-1;
        }
        return (unsigned int)val;
    }
    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
}

static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
    const char neg_one = (char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to char" :
                    "value too large to convert to char");
            }
            return (char)-1;
        }
        return (char)val;
    }
    return (char)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
    const short neg_one = (short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to short" :
                    "value too large to convert to short");
            }
            return (short)-1;
        }
        return (short)val;
    }
    return (short)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
    const int neg_one = (int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to int" :
                    "value too large to convert to int");
            }
            return (int)-1;
        }
        return (int)val;
    }
    return (int)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
    const signed char neg_one = (signed char)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed char) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed char)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed char" :
                    "value too large to convert to signed char");
            }
            return (signed char)-1;
        }
        return (signed char)val;
    }
    return (signed char)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
    const signed short neg_one = (signed short)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed short) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed short)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed short" :
                    "value too large to convert to signed short");
            }
            return (signed short)-1;
        }
        return (signed short)val;
    }
    return (signed short)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
    const signed int neg_one = (signed int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(signed int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(signed int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to signed int" :
                    "value too large to convert to signed int");
            }
            return (signed int)-1;
        }
        return (signed int)val;
    }
    return (signed int)__Pyx_PyInt_AsSignedLong(x);
}

static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject* x) {
    const int neg_one = (int)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
    if (sizeof(int) < sizeof(long)) {
        long val = __Pyx_PyInt_AsLong(x);
        if (unlikely(val != (long)(int)val)) {
            if (!unlikely(val == -1 && PyErr_Occurred())) {
                PyErr_SetString(PyExc_OverflowError,
                    (is_unsigned && unlikely(val < 0)) ?
                    "can't convert negative value to int" :
                    "value too large to convert to int");
            }
            return (int)-1;
        }
        return (int)val;
    }
    return (int)__Pyx_PyInt_AsLong(x);
}

static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to unsigned long");
            return (unsigned long)-1;
        }
        return (unsigned long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to unsigned long");
                return (unsigned long)-1;
            }
            return PyLong_AsUnsignedLong(x);
        } else {
            return PyLong_AsLong(x);
        }
    } else {
        unsigned long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (unsigned long)-1;
        val = __Pyx_PyInt_AsUnsignedLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to unsigned PY_LONG_LONG");
            return (unsigned PY_LONG_LONG)-1;
        }
        return (unsigned PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to unsigned PY_LONG_LONG");
                return (unsigned PY_LONG_LONG)-1;
            }
            return PyLong_AsUnsignedLongLong(x);
        } else {
            return PyLong_AsLongLong(x);
        }
    } else {
        unsigned PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (unsigned PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
    const long neg_one = (long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to long");
            return (long)-1;
        }
        return (long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to long");
                return (long)-1;
            }
            return PyLong_AsUnsignedLong(x);
        } else {
            return PyLong_AsLong(x);
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (long)-1;
        val = __Pyx_PyInt_AsLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to PY_LONG_LONG");
            return (PY_LONG_LONG)-1;
        }
        return (PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to PY_LONG_LONG");
                return (PY_LONG_LONG)-1;
            }
            return PyLong_AsUnsignedLongLong(x);
        } else {
            return PyLong_AsLongLong(x);
        }
    } else {
        PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
    const signed long neg_one = (signed long)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to signed long");
            return (signed long)-1;
        }
        return (signed long)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed long");
                return (signed long)-1;
            }
            return PyLong_AsUnsignedLong(x);
        } else {
            return PyLong_AsLong(x);
        }
    } else {
        signed long val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed long)-1;
        val = __Pyx_PyInt_AsSignedLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_VERSION_HEX < 0x03000000
    if (likely(PyInt_Check(x))) {
        long val = PyInt_AS_LONG(x);
        if (is_unsigned && unlikely(val < 0)) {
            PyErr_SetString(PyExc_OverflowError,
                            "can't convert negative value to signed PY_LONG_LONG");
            return (signed PY_LONG_LONG)-1;
        }
        return (signed PY_LONG_LONG)val;
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
            if (unlikely(Py_SIZE(x) < 0)) {
                PyErr_SetString(PyExc_OverflowError,
                                "can't convert negative value to signed PY_LONG_LONG");
                return (signed PY_LONG_LONG)-1;
            }
            return PyLong_AsUnsignedLongLong(x);
        } else {
            return PyLong_AsLongLong(x);
        }
    } else {
        signed PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Int(x);
        if (!tmp) return (signed PY_LONG_LONG)-1;
        val = __Pyx_PyInt_AsSignedLongLong(tmp);
        Py_DECREF(tmp);
        return val;
    }
}

static void __Pyx_WriteUnraisable(const char *name) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    #if PY_MAJOR_VERSION < 3
    ctx = PyString_FromString(name);
    #else
    ctx = PyUnicode_FromString(name);
    #endif
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
}

static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;

    d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__");
    if (!d) {
        PyErr_Clear();
        d = PyDict_New();
        if (!d)
            goto bad;
        Py_INCREF(d);
        if (PyModule_AddObject(__pyx_m, (char *)"__pyx_capi__", d) < 0)
            goto bad;
    }
    tmp.fp = f;
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    cobj = PyCapsule_New(tmp.p, sig, 0);
#else
    cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0);
#endif
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000 && !(PY_MAJOR_VERSION==3&&PY_MINOR_VERSION==0)
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItemString(dict, "__pyx_vtable__", ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

#ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
    long size, int strict)
{
    PyObject *py_module = 0;
    PyObject *result = 0;
    PyObject *py_name = 0;
    char warning[200];

    py_module = __Pyx_ImportModule(module_name);
    if (!py_module)
        goto bad;
    #if PY_MAJOR_VERSION < 3
    py_name = PyString_FromString(class_name);
    #else
    py_name = PyUnicode_FromString(class_name);
    #endif
    if (!py_name)
        goto bad;
    result = PyObject_GetAttr(py_module, py_name);
    Py_DECREF(py_name);
    py_name = 0;
    Py_DECREF(py_module);
    py_module = 0;
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError, 
            "%s.%s is not a type object",
            module_name, class_name);
        goto bad;
    }
    if (!strict && ((PyTypeObject *)result)->tp_basicsize > size) {
        PyOS_snprintf(warning, sizeof(warning), 
            "%s.%s size changed, may indicate binary incompatibility",
            module_name, class_name);
        #if PY_VERSION_HEX < 0x02050000
        PyErr_Warn(NULL, warning);
        #else
        PyErr_WarnEx(NULL, warning, 0);
        #endif
    }
    else if (((PyTypeObject *)result)->tp_basicsize != size) {
        PyErr_Format(PyExc_ValueError, 
            "%s.%s has the wrong size, try recompiling",
            module_name, class_name);
        goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(py_module);
    Py_XDECREF(result);
    return 0;
}
#endif

#ifndef __PYX_HAVE_RT_ImportModule
#define __PYX_HAVE_RT_ImportModule
static PyObject *__Pyx_ImportModule(const char *name) {
    PyObject *py_name = 0;
    PyObject *py_module = 0;

    #if PY_MAJOR_VERSION < 3
    py_name = PyString_FromString(name);
    #else
    py_name = PyUnicode_FromString(name);
    #endif
    if (!py_name)
        goto bad;
    py_module = PyImport_Import(py_name);
    Py_DECREF(py_name);
    return py_module;
bad:
    Py_XDECREF(py_name);
    return 0;
}
#endif

#include "compile.h"
#include "frameobject.h"
#include "traceback.h"

static void __Pyx_AddTraceback(const char *funcname) {
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    PyObject *py_globals = 0;
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;

    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(__pyx_filename);
    #else
    py_srcfile = PyUnicode_FromString(__pyx_filename);
    #endif
    if (!py_srcfile) goto bad;
    if (__pyx_clineno) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_globals = PyModule_GetDict(__pyx_m);
    if (!py_globals) goto bad;
    py_code = PyCode_New(
        0,            /*int argcount,*/
        #if PY_MAJOR_VERSION >= 3
        0,            /*int kwonlyargcount,*/
        #endif
        0,            /*int nlocals,*/
        0,            /*int stacksize,*/
        0,            /*int flags,*/
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple,  /*PyObject *consts,*/
        __pyx_empty_tuple,  /*PyObject *names,*/
        __pyx_empty_tuple,  /*PyObject *varnames,*/
        __pyx_empty_tuple,  /*PyObject *freevars,*/
        __pyx_empty_tuple,  /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        __pyx_lineno,   /*int firstlineno,*/
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    if (!py_code) goto bad;
    py_frame = PyFrame_New(
        PyThreadState_GET(), /*PyThreadState *tstate,*/
        py_code,             /*PyCodeObject *code,*/
        py_globals,          /*PyObject *globals,*/
        0                    /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    py_frame->f_lineno = __pyx_lineno;
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else  /* Python 3+ has unicode identifiers */
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        ++t;
    }
    return 0;
}

/* Type Conversion Functions */

static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}

static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
  PyNumberMethods *m;
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_VERSION_HEX < 0x03000000
  if (PyInt_Check(x) || PyLong_Check(x))
#else
  if (PyLong_Check(x))
#endif
    return Py_INCREF(x), x;
  m = Py_TYPE(x)->tp_as_number;
#if PY_VERSION_HEX < 0x03000000
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = PyNumber_Long(x);
  }
#else
  if (m && m->nb_int) {
    name = "int";
    res = PyNumber_Long(x);
  }
#endif
  if (res) {
#if PY_VERSION_HEX < 0x03000000
    if (!PyInt_Check(res) && !PyLong_Check(res)) {
#else
    if (!PyLong_Check(res)) {
#endif
      PyErr_Format(PyExc_TypeError,
                   "__%s__ returned non-%s (type %.200s)",
                   name, name, Py_TYPE(res)->tp_name);
      Py_DECREF(res);
      return NULL;
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}

static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject* x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}

static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
#if PY_VERSION_HEX < 0x02050000
   if (ival <= LONG_MAX)
       return PyInt_FromLong((long)ival);
   else {
       unsigned char *bytes = (unsigned char *) &ival;
       int one = 1; int little = (int)*(unsigned char*)&one;
       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
   }
#else
   return PyInt_FromSize_t(ival);
#endif
}

static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
       return (size_t)-1;
   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
       PyErr_SetString(PyExc_OverflowError,
                       "value too large to convert to size_t");
       return (size_t)-1;
   }
   return (size_t)val;
}


#endif /* Py_PYTHON_H */
