From 6493e8870447e10eec4313c371506c1a5634b520 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Thu, 15 Aug 2024 19:42:41 +0100 Subject: [PATCH 1/2] Add debug offsets for free threaded builds (GH-123041) (cherry picked from commit d7a3df91505faa56c51d169648253bd0d57ddae2) Co-authored-by: Pablo Galindo Salgado --- Include/internal/pycore_runtime.h | 51 +++++++++++++++++++++++++- Include/internal/pycore_runtime_init.h | 34 ++++++++++++++++- Python/pylifecycle.c | 2 +- Python/pystate.c | 4 +- 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h index d4ffd977940a02..d4291b87261ae0 100644 --- a/Include/internal/pycore_runtime.h +++ b/Include/internal/pycore_runtime.h @@ -44,6 +44,15 @@ struct _gilstate_runtime_state { /* Runtime audit hook state */ +#define _Py_Debug_Cookie "xdebugpy" + +#ifdef Py_GIL_DISABLED +# define _Py_Debug_gilruntimestate_enabled offsetof(struct _gil_runtime_state, enabled) +# define _Py_Debug_Free_Threaded 1 +#else +# define _Py_Debug_gilruntimestate_enabled 0 +# define _Py_Debug_Free_Threaded 0 +#endif typedef struct _Py_AuditHookEntry { struct _Py_AuditHookEntry *next; Py_AuditHookFunction hookCFunction; @@ -53,6 +62,7 @@ typedef struct _Py_AuditHookEntry { typedef struct _Py_DebugOffsets { char cookie[8]; uint64_t version; + uint64_t free_threaded; // Runtime state offset; struct _runtime_state { uint64_t size; @@ -71,6 +81,8 @@ typedef struct _Py_DebugOffsets { uint64_t sysdict; uint64_t builtins; uint64_t ceval_gil; + uint64_t gil_runtime_state; + uint64_t gil_runtime_state_enabled; uint64_t gil_runtime_state_locked; uint64_t gil_runtime_state_holder; } interpreter_state; @@ -122,20 +134,57 @@ typedef struct _Py_DebugOffsets { struct _type_object { uint64_t size; uint64_t tp_name; + uint64_t tp_repr; + uint64_t tp_flags; } type_object; // PyTuple object offset; struct _tuple_object { uint64_t size; uint64_t ob_item; + uint64_t ob_size; } tuple_object; + // PyList object offset; + struct _list_object { + uint64_t size; + uint64_t ob_item; + uint64_t ob_size; + } list_object; + + // PyDict object offset; + struct _dict_object { + uint64_t size; + uint64_t ma_keys; + uint64_t ma_values; + } dict_object; + + // PyFloat object offset; + struct _float_object { + uint64_t size; + uint64_t ob_fval; + } float_object; + + // PyLong object offset; + struct _long_object { + uint64_t size; + uint64_t lv_tag; + uint64_t ob_digit; + } long_object; + + // PyBytes object offset; + struct _bytes_object { + uint64_t size; + uint64_t ob_size; + uint64_t ob_sval; + } bytes_object; + // Unicode object offset; struct _unicode_object { uint64_t size; uint64_t state; uint64_t length; - size_t asciiobject_size; + uint64_t asciiobject_size; } unicode_object; // GC runtime state offset; diff --git a/Include/internal/pycore_runtime_init.h b/Include/internal/pycore_runtime_init.h index da2b8d5570de62..1746bbf0eec8b5 100644 --- a/Include/internal/pycore_runtime_init.h +++ b/Include/internal/pycore_runtime_init.h @@ -29,11 +29,12 @@ extern PyTypeObject _PyExc_MemoryError; /* The static initializers defined here should only be used in the runtime init code (in pystate.c and pylifecycle.c). */ -#define _PyRuntimeState_INIT(runtime) \ +#define _PyRuntimeState_INIT(runtime, debug_cookie) \ { \ .debug_offsets = { \ - .cookie = "xdebugpy", \ + .cookie = debug_cookie, \ .version = PY_VERSION_HEX, \ + .free_threaded = _Py_Debug_Free_Threaded, \ .runtime_state = { \ .size = sizeof(_PyRuntimeState), \ .finalizing = offsetof(_PyRuntimeState, _finalizing), \ @@ -49,6 +50,8 @@ extern PyTypeObject _PyExc_MemoryError; .sysdict = offsetof(PyInterpreterState, sysdict), \ .builtins = offsetof(PyInterpreterState, builtins), \ .ceval_gil = offsetof(PyInterpreterState, ceval.gil), \ + .gil_runtime_state = offsetof(PyInterpreterState, _gil), \ + .gil_runtime_state_enabled = _Py_Debug_gilruntimestate_enabled, \ .gil_runtime_state_locked = offsetof(PyInterpreterState, _gil.locked), \ .gil_runtime_state_holder = offsetof(PyInterpreterState, _gil.last_holder), \ }, \ @@ -90,10 +93,37 @@ extern PyTypeObject _PyExc_MemoryError; .type_object = { \ .size = sizeof(PyTypeObject), \ .tp_name = offsetof(PyTypeObject, tp_name), \ + .tp_repr = offsetof(PyTypeObject, tp_repr), \ + .tp_flags = offsetof(PyTypeObject, tp_flags), \ }, \ .tuple_object = { \ .size = sizeof(PyTupleObject), \ .ob_item = offsetof(PyTupleObject, ob_item), \ + .ob_size = offsetof(PyTupleObject, ob_base.ob_size), \ + }, \ + .list_object = { \ + .size = sizeof(PyListObject), \ + .ob_item = offsetof(PyListObject, ob_item), \ + .ob_size = offsetof(PyListObject, ob_base.ob_size), \ + }, \ + .dict_object = { \ + .size = sizeof(PyDictObject), \ + .ma_keys = offsetof(PyDictObject, ma_keys), \ + .ma_values = offsetof(PyDictObject, ma_values), \ + }, \ + .float_object = { \ + .size = sizeof(PyFloatObject), \ + .ob_fval = offsetof(PyFloatObject, ob_fval), \ + }, \ + .long_object = { \ + .size = sizeof(PyLongObject), \ + .lv_tag = offsetof(_PyLongValue, lv_tag), \ + .ob_digit = offsetof(_PyLongValue, ob_digit), \ + }, \ + .bytes_object = { \ + .size = sizeof(PyBytesObject), \ + .ob_size = offsetof(PyBytesObject, ob_base.ob_size), \ + .ob_sval = offsetof(PyBytesObject, ob_sval), \ }, \ .unicode_object = { \ .size = sizeof(PyUnicodeObject), \ diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 13bd62da4d0484..1701a1cd217440 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -103,7 +103,7 @@ _PyRuntimeState _PyRuntime #if defined(__linux__) && (defined(__GNUC__) || defined(__clang__)) __attribute__ ((section (".PyRuntime"))) #endif -= _PyRuntimeState_INIT(_PyRuntime); += _PyRuntimeState_INIT(_PyRuntime, _Py_Debug_Cookie); _Py_COMP_DIAG_POP static int runtime_initialized = 0; diff --git a/Python/pystate.c b/Python/pystate.c index f0452aa3cced45..66fd392c3e3ad0 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -389,7 +389,7 @@ _Py_COMP_DIAG_IGNORE_DEPR_DECLS Note that we initialize "initial" relative to _PyRuntime, to ensure pre-initialized pointers point to the active runtime state (and not "initial"). */ -static const _PyRuntimeState initial = _PyRuntimeState_INIT(_PyRuntime); +static const _PyRuntimeState initial = _PyRuntimeState_INIT(_PyRuntime, ""); _Py_COMP_DIAG_POP #define LOCKS_INIT(runtime) \ @@ -454,6 +454,8 @@ _PyRuntimeState_Init(_PyRuntimeState *runtime) // Py_Initialize() must be running again. // Reset to _PyRuntimeState_INIT. memcpy(runtime, &initial, sizeof(*runtime)); + // Preserve the cookie from the original runtime. + memcpy(runtime->debug_offsets.cookie, _Py_Debug_Cookie, 8); assert(!runtime->_initialized); } From 9531a3d2067ee55b7344c683ba540b1c5b4ca5fa Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Sun, 18 Aug 2024 16:38:00 +0200 Subject: [PATCH 2/2] Refresh ABI file --- Doc/data/python3.13.abi | 35185 +++++++++++++++++++------------------- 1 file changed, 17501 insertions(+), 17684 deletions(-) diff --git a/Doc/data/python3.13.abi b/Doc/data/python3.13.abi index 1b5643f31cb135..149ff4b91d5e2c 100644 --- a/Doc/data/python3.13.abi +++ b/Doc/data/python3.13.abi @@ -1,4 +1,4 @@ - + @@ -1104,6 +1104,7 @@ + @@ -1111,6 +1112,7 @@ + @@ -1659,7 +1661,7 @@ - + @@ -1677,2875 +1679,528 @@ - - + + - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - + + - - - + + + + + + + - + - - - + + + + + + + + - + + + - - - + + + + - - - + + + - - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + - - + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - + + + + - - - + + + + + - - - + + + + + + + + - - - - + + + + + + + + + - - - + + + - + + - - - - - + + + + - - - + + + + - - - + + - - - + + + + + + + - - - - + + + + + - - + + + + - - + + + + + - - - + + + - - - + + + + - - - + + + + - - - + + + - - - + + + + + - - - - + + + + + + + - - - + + - - - - - - - - - - - - + + + + - - - - - + + + + + + + - - - - - - - + + + - - + + + - - - + + - - - - - + + - - - - - + + + - - - + - - - + + - - - + - - - + + - - - - - - + + - - - - - - - - - - + - - - - - - + + + + + - - - - + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - + + + - - + + - - - - + + + - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + + - - - + + - - - + + + + - - - - - + + + + + + - - + + - - + + - - - - - - + + + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - + + + + - + + - + - - - - + + - - - - - - - - - - + - - - - + + - - + + - - - - + + - - + + - + + @@ -4553,303 +2208,262 @@ - + - + - + + + + - + - - + + + + + - - - - + - - + + - - + + - - + + - + - + + + + + + + + + + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - + - + - + - + - + + + + + + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - - - - @@ -4859,326 +2473,154 @@ - - - - - - + - + - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - - - - - - - + - - - - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - - + + - - + + - - + + - - - - - - - - - - + + + - + - + - - - - - - - + + - - - - + + + + + + - - - + + + + + + + + + + - - - - - + + + + + - - - - + + + + - - + + - - + + - + - + - - - - + @@ -5190,264 +2632,239 @@ - - + + - - - + + + - - - - - - - - + + + - + - + - - - - - - + + + + + + - - - - - - + + + + + + - + - + - - + + - - + + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - - - - - + - - + + - + - - - - + + - - + + - - - - - - + + + + + + - + - + - + - + - - + + - - + + - - - - - - - - - - - - - + + + + - + - + - + - + - - - + + + - - + + - - - + + + - - - + + + - + - - - - - @@ -5460,20 +2877,20 @@ - - - + + + - - + + - - + + @@ -5481,190 +2898,172 @@ - + - + - - - - - - - - - - - - - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + - - + + - + - + - - + + - + - - - + + + - - - + + + - - - + + + - - - + + + - + - - + + - - + + - + - + - - + + - - - - - - - + - + - - - - + + + + - + - + - + - + - + - + - + @@ -5672,21 +3071,16 @@ - - - - - - + - + - - - - + + + + @@ -5697,609 +3091,401 @@ - - + + - - + + - - + + - + - - - - + + + + - - + + - + - + - + - + - - - - - - - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - + - - + + - - + + - - - + + + - + - - + + - + - - + + - + - + - + - + - + - - - + + + - - - + + + - + - - - - + + + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - - - - + + + + + + - - - - - - + + + + + + - + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - + - - - + + + - - - + + + - - - + + + - + - + - - - + + + - - - - - - + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + - - - - - - + + + + + + + - - - - + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + + - + - + @@ -6308,28 +3494,28 @@ - + - + - - + + - - + + - - - + + + @@ -6338,394 +3524,198 @@ - - - - - - + - - + + - + - - + + - - - + + + - - - - - - - - - - - - - + - - + + - - - - - - - - - - + + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + - - + + - - - + + + - - - + + + - - - - - + + - - + + - - - - - - - + - - + + - - + + - - - - - - - - - - - + - - - + + + - - + + - - + + - - - - - - - - - - + + + + + - - - + + + - - + + - - - - - - - - - - - - - + + + - + - - - - + + + + - - + + - + - + - - + + - - - - - - - - + + - - - - - + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - - - + + + - + - + - + - + @@ -6735,139 +3725,69 @@ - - - - - - - - - - + + - - - + + + - - - - - + + - + - + - - + + - + - - - - - - - + + - - + + - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - + + - + - - - - - - - - - - + - - - - - - - - - - - - - - - - + @@ -6875,671 +3795,585 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + + + + + - - - + + + - + - + - + - - + + - - + + - - + + - + - + - - + + - + - + - - + + - - - - - - + - + - + - + - - - - + + - - - + + + + - - - - + + - - - - + + - - - - + + - - - - - + - - - + + - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - + - + - - + + - - + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - + - - - - - - - - + - - - + + + - + - - - - - - - + + + - - - - - - + + - + - - + + - - - - - - - + - - - - - - - + + - + + - - - - - - + - + - - - - - - - - - - + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + - + - - - + + + + - - - + + + + - - - + + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - + + - - - - + + + + - + - + - - + + - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + - - - + + + - - - + + + + - - - + + + + - - - - + + + - + + + + + + + - + + + - - + + + + + + - + + + + + + + + + + + - - - + + + + + + + + + + + + + + - - + + + + + + - + - - + + - - + + - - + + + + + + + + - - + + - - - + + + - + - - + + - + - - + + @@ -7547,424 +4381,881 @@ - - + + + + + + + + + + + + + + + - - + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + + + + + + + + + - + + + + + + - + - + + + + + + - + - + + + + + + + + + + + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + - + + + + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + - + + + + + - - - - + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + - - - - + + + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - - + + - + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + - - + + + + - + - - - + + + - - - + + + - + - - + + + + + - + - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + - + + + + + + + + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + - + - + @@ -7982,511 +5273,627 @@ - + - - - - - - - + + + + + + + - - - + + + + + + + - - - + + + - + + + + + + - + - + - + - + - - - - + + + - - - - + + + + + + + + + - + - - - + + + - - + + - - - - - + + + + - - - + + + - - - - - - + + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + + - - - + + + + + + + + - - + + - - + + - - + + - + - - + + - + - + - + - - - + + + - - - + + + - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + - - - - - - - - - - - - - - - - + - - - - + + + + + + - - - + + + + + + + + + + - - - - + + - - + + + + - - + + - + - + - + - - + + - + - - - - + + + + + + + + + + + + + + - - - + + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + - - - - + + + + - - - - + + + + + + + + + - - + + - + - - + + - + + + + + + + + - - - + + + - + + + + + + + + - - - + + + - + - - - + + + - + + + + + + + - - - + + + - + - - - + + + + + + + + + + + - - - - + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - + - + - - - + + + - - + + + + + + + + - - + + - - + + - - + + - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + - - + + - - + + - - + + - - - - + - + - + - + - + + + + - + - + - - - - - - - - - - + + + + + + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - + + + + + + + + + + + - - - + + + - + @@ -8494,8 +5901,8 @@ - - + + @@ -8504,19 +5911,19 @@ - - - - - - - - - + + + + + + + + + - - - + + + @@ -8524,1145 +5931,1395 @@ - - - - - - - - - + + + + + + + + + - - - + + + - - + + - + - + - + - + - - - - + + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - - - - - - + + + + + + + - - - + + + - + - - - - - - - - - + + + + + - - - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + + + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - - - - + + - - - + + + - - + + - - + + - - + + - - + + - - - - - - - - - - + + + + + - - - + + + + - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - + + - + - + - + - - + + - - - + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + + + + + - - - + + + - - - - - - + + + + + + - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + - - - - + + + + + - - - + + + + + - - - + + + + + + - - - - - + + + + + - - - + + + - - + + + + - - + + + + + + - - - + + + - - - - + + + + + - - - - + + + + + - - - - - + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + - - - - - + + + + + + + - - - - - + + + + - - - - + + + + - - - - + + + + + + + + - - - - - + + + + - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + + + + - - - + + + + + + + - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + + - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - - + + + - + - + - + - - - + + + + + + + + + + + + + - - - - - - - + + + + - + - - - + + + + + + + - - + + + + + + - - + + - - + + - + - - - - - - - + - + + - + - + + + + + + + - - - - - - - - - + + + + + + + + + + + + - + - - - + + + - + - - - - + + + + - - + + - - - + + + - - - + + + - - + - + + + + + + + + + - + - - + + - + + + + + + + + + + + + + - + - - - + + + + + + + + + + + + + + + + + - - + + - + - - - + + + - + - + - - - + + + - - + + - - - + + + - - + + - + - + + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - - + + + - - - - + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - + - - + + - - + + - - - + + + + + + + + + + + - + - - - - - + + + + + - - - + + + - - - + + + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - - + + + - - - - + + + + - - - + + + - - - - + + + + - + @@ -9670,1769 +7327,2210 @@ - - - - + + + + - - - + + + - - - + + + - - + + - - + + + + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + - - - - - - - - - - + + + + + + + + - + + + + + + + + + + + + + - - - - - + + + + + - - + + - - + + + + + + + + - - - + + + - + - - + + - - - + + + - - + - - + + - - - - - + + + + + + + + + + + + + - - + + - - + + - + - - + + - - - - + + + + - - + + - - + + - - - - + + + + - - - - + + + + - + - + - - + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + - - + + + + + + + + - - + + - + + + + + - + - + - - - + + + - - - - - - - - + + + + + + + + - + - + - - - + + + - - - - + + + + - + - - + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - - + + - + - - + + + + + + + + + + + + + + - - + + + + + + + - - + + + + + + + - - + + - - - + + + - - - - - + + + + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + - - - - + + - + - + - - - - - - + + + + + + - + - + + + + + + + + + - + - - + + - - - + + + - - - + + + - - - - + + + + - - + + - - + + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + + + + + + + + - + + + + + + + + - + - - + + - - - + + + - + - - - - - - + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + - - - - + + + + - + + + + + + + + + + - - - - - - - - + + + - - + + - + - + - + - + - + - + - + - - - - - - + + + + + + + + + + + - + - - + + - - - - - + + + + + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - - + + + - + - + - - - + + + - - - - + + + + - - - + + + - - + + + + + + + - - - + + + - - - + + + - - + + - + - + - - + + - - - - + + + + - - + + + + - - - + + - - - + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - + + - + + + + + - - + + - + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + - - + + + + + + + + + + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + - + + - + - + - + - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + + + + + + + + + + + + + + + + - + - + - + - + - + - + + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - + + + + + - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + - - + + - + + + + + + - + - + - - - + + + + + + + + - - + + - - + + - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + - - + - - - - + + + + - - - - + + + + + + + + + + + - + - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - + - + - - + + - - - - - - - - - + + + + + + + + + - - - + + + - + + + + + + + + + + - + @@ -11444,74 +9542,74 @@ - + - + - + - - - - - - - - - + - - - - + + + - - - + + + - + - - + + - - - + + + - - + + - + + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - + @@ -11519,7 +9617,7 @@ - + @@ -11528,18 +9626,19 @@ - - + + - + - + + - + @@ -11548,195 +9647,219 @@ - + - + - - - - + + + - + - - - - + + + + - - - - - - + + + + + - - + + - - - + + + - - - + + + + + + + - - - + + + - + - - + + - + - + - + - + - - - + + + + + + + + + + + - - + + - - - - - - + + + + + + + + + + + + + - + - + - - + + - - + + - - - + + + - - - - + + + + + - - - - - + + + + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + + - - + - + - + - + - - - + + + - - - + + + - + - - + + - - - - - + + + + + - - - + - + + + + + + + - - + + + + + - + @@ -11745,742 +9868,918 @@ - + - + - - + + - + - - + + + + + + - + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + - - + + + + + + + - - - - + + + + - - - + + + - + - - + + + + + + + - - + + - - - - - + + + + + - - - - - - - - - + + + - - - + + + - - + + - - - + + + - + - - - - - - - - - - + + - - - - - + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - - - - - + - + - + - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - + - - - - - + + + + + - + - - - - - - - + + + + + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - + + + + + + - - + + - + - - + + - - + + + + + + - - - + + + - + - + - - + + - - + + - - + + - - + + - + - + - - - + + + - - - - - - + + - + + + + + + + + + - - - + + + - - + + - + - + - + - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - + + + + - - - - - + + + - + + + + + - + - + - + - - + + + + + + + + + - + - - - + + + + + + + + + + + + + + + + + - - + + - + - - - + + + - - - + + + + + + + - - - - - - - + + + + + + + + + - + - - + + + + + + - + - - + + + + + + - - + + + + + + + + + + + + + - - - + + + - - - - + + + + - - + + - - + + + + + + + + + + - - + + + + + + + + - + - + - + - - - - - - + - - + + - - + + - - + + - + - - + + + + + + + - - - + + + - - - + + + + + + + + + + + - - + + - + - - - + + + - - - + + + - - + + - + - + - - + + - - + + - - - + + + + + + + - - - + + + + - - - - + + + - - - + + + - - - + + - - - - - - - - + + + + + + - - + + - - - - - + + + + + - - + + - - + + - + - + - + - + - + - + - + - - - - - + + + + + - - + + + + + + + + + + + + - - + + - - + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + - - + + - - + + - + + + + + + + + + + - + - + - + @@ -12492,796 +10791,836 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - + - - - - - - - - - - + - - + + - + + - + - + + + + - + + + + + + + + + + + - + - + - + - + + - + - + - + + - + - + - + - + + - + - + - + - + + - + - + - + + - + - + - + + - + - + - + - + + - + - + - + - + + + + + + + + + - + - - - - + - + + + + + + + + + + + + + + + - + - + - - + + + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - - - + + - - + + - - + + - - - + + + - - - - + + - - - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - + + - - - - + + + + + + + + - + - + - + - + - + + + + + + + - + - + + + + + + - + + + + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - + - + + + + - + - + - + - - + + + + - - + + + + - - + + - - + + - - + + + + - + + + + + - + - - - - - - - + - + + + + - + + + + - + + + + + + - + - + - + - + - + - + - - - - + + + + + + + + + + + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + - - + + - - + + - - - - + + - - - - + + - - + + + + - + - + - + - + - + - + - - - + - + - - + + + + - - + + + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + + + - - + + - - + + + + + + + + - - + + + + - + - - + + + + - - + + - - + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + @@ -13290,7 +11629,7 @@ - + @@ -13299,10 +11638,10 @@ - + - + @@ -13320,70 +11659,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13398,406 +11737,523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - + + + + + + - - + + - - - + + + - - + + - + - + - - + + - - - - - - - - - - - + - - + + - - - + + + - - + + - - - + + + - - + + - - - - - - - - - - - - + + - - + + + - - - + + + - - - + + - - - - - - - - - + + + + + + + + + - - - + + + - - + + - - + + - - + + - - - + + + - - - - - - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - + + + - - - - - + + - - - - - - - - - - - - - + - - - - + - - - - - - - - - - + - - - + + + + - - - + + - + + - - + + - + - + - + - + - - - + + + - - + + - - + + - - + + - - + + - - - - - - - - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + + + + + + - - - - - - + + + - + + + + + + + + + - - - - - + + - - - - - - - - - + + + + + + + + + + + + @@ -13809,1142 +12265,1135 @@ - - - - - - + + - + - + - + + - + - + - + + - + - + - + + - + - + - + + - + - + - + + - + - + + + + - + + - - - - + - + + - + - - - - + - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - - + + + + - + - - + + - + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - - - + + + + + - - + + - - - - - + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - - + + - + - - + + - + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - - - + + + + - - - - - + + + + + - + - - + + - + - - + + - + - - + + - - - + + + - - + + + + - - - + - - + + - + - - + + - - + + - - + + - + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - - + + - - - + + + - - + + - + - + - + - - + + - - - + + + - - + + - - - - - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - + - + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - + + - - - - - - + + + + + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - + + - + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - - + + + + - - + + - - + + - - - - + + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - - - - + + + + + - - + + - + - - - + + + - - - - + + + + - - - + + + - - + + @@ -14952,628 +13401,766 @@ - - + + + + + + + + - + - - - - - - + - - + + + + + + + - + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + - - + + - - + + - - + + - - + + - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + + + + - - + + + + + + + + + + + + + + + + + - + - + + - + - - + + - + + - + + + + - + - - + + + + + - - + + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + - + + + + - + + + + - + - + - - - - + - + - + + + + + + + - + - - - - + - + - - - - + + - - + + - - + + - - + + + + + + + + - + + + + + + + + - + - - - - - - - + - + + + + - + + + + - + - + - + - + - - - - - - - + - + + + - - - - + - - - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + + + - + - + - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - + - + - + - + - + - + - - + + + + + + + + + + + + + + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + - - + + - - - - + + - - + + - - + + + + + + + + + + + - + + @@ -15593,7 +14180,7 @@ - + @@ -15617,34 +14204,34 @@ - + - + - + - + - + - + - + - + @@ -15686,13 +14273,13 @@ - + - + - + @@ -15710,58 +14297,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15773,2189 +14360,2120 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - + - + - + + + + - + - - - - + + - - - - + + - - + + + + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - + + - + - + - + - - - - + + - - + + - - + + - - + + - - + + + + + + + + - + + - + - + - - - - - - - + - + + + - + - + - + - - - - - - + - + + - + - + - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + - - + + - - + + - + + - + - + - + - + - - - - - - - - - - - - + + - - + + - - - - + + - - + + - + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - + - + + + - + - + - + + - + - + - - - - + - - - - - - - - - - - - - + - + + - + - + - + - + - + + + + - + + + + - + + + + - + + + + - + - + - + - + - + - + - - - - + - + - - - - - - - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + + - + + - + - - - - + - + + + - + - - + + - + + - + + + + - + - + - - - - - + + + + - - + + - - + + - - + + - - + + - + + - - - - - - - - - - - - - + - + - + - - + + + + + + + - - + + - - + + - - + + - - + + - + - + - + - - - - + + - - + + - - + + - + + + + - + - - - - + + - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + + - - - - + - - + + - - + + - + + - - - - + - + + + + - + + - - - - - - - - - - + - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - - - - - - - + - + - + - + + + + - + - + - - + + - + - - - - - - - - - - + - + - + - + - + - + - + - + - - + + + + - + - + - + - - - - - - - - - - - - - - - - - - - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - + + - - + + - + - + - + - - - - + - + - + - - - - - - - + - - - - - - - - - - - - - - - - - + + - - + + - + - + - - - - - - + - - - - + + - + - + - - - - + + - + - + - - + + - + - + - - + + - + - + - + - - - - + - + - + - + + + + + + + - + - + - + - - - - + + - - - - + + - + - + + + + - + - + - + - + - + + + + - + - - - - + - + - + - + + + + + + + + + + + + + - + - + - + - - - - + - + - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - + + - + - - - - + - - + + - + - + - + + + + - + + - + - + + + + - + + - + - + - + - - - - - - - - - - - - - - - - + - - - - + + - + - - - - - - - + - - - - - - + + + - - + + - - + + - + - - + + - + + + - + - + - + - + - + - + - + - + - + @@ -17964,6518 +16482,7165 @@ - + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + - + - + + + + - + - - - - + + - - - - + + - - + + + + + - + - + + + + - + - + - - - - + - - - + + + - - + + - - + + - - + + + + - - + + - + + - + - + - + - + - + + + + - + - + - + - - + + + + + + + + - + - + - - + + + + + - + - + - + - + - + + + + - + - + - + - - - - + - + - + + - - - - + - - + + - - + + - - + + - - - - + + - - + + - + - + + + + - + - + - + - + - - + + + + - - + + - - + + + + - - + + - - + + - + + - + - + + + + - + + + + - + - + - + - - + + - - + + - - + + - - + + + + - + - + + + + - + + - + - + - + + + + - + - + - - + + - - + + + + - - + + - - + + + + + + + + - + - - - - + - - - - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - - - - + - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - - - - + - - - - + - - - - + - - - - + - + + + + + + + - + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - + - + - + - + - + - + - + + - + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - - - - - - - - - - - - + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - - - - + + - - + + - - + + - - + + - - + + + + + + + + - + - + - + - + + + + - + + + + - + - - - - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + + + - - + + - - + + + + - + - + - + - - + + - + - + + + + - + - + + + + - + - + + + + - + - - - - + - - + + - - + + + + - - + + - - + + + + - + - + - - - - + - - + + - + - + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - - - + + - - + + - - - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + + + + - - + + - - + + - - + + - - + + + + + - - + + - - + + - - + + + + + - - + + + + + - - + + + + + - - + + - - + + - - + + - - + + + + + + + + + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + + + + - - + + - - + + - - + + + + + - - + + + + + - - + + - - + + - - + + + + - - + + + + - - + + - - + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + + + - - + + + + - - + + + + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + - - + + - - + + + + - - + + - - + + + + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + + + + + + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + + - - + + - - + + + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + + - - + + - - + + + + + - - + + - - + + + + - - + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + + + + + + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + + + + + - - + + - - + + - - + + + + + - - + + - - + + - - + + + + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + - - + + + + - - + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + + + - - + + - - + + - - + + + + + - - + + - - + + - - + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - + + - + - - - - - - + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + + + - - + + - - + + - - + + - - + + + + + - - + + - - - - + + - - + + - - - - + + - - + + - - + + - - + + - - + + - - + + + + + - - + + - - + + + + + - - + + - - + + - - + + + + - - + + - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + - - + + - - + + - - + + + + + + - - + + - + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + - - - - + + + + - - - - + + - - - - + + - - - + + - - - + + + - - - - + + - - - + + + + - - + + + - - - - + + + + + - - - - - + + + + + + - - - + + - - - - + + + - - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + - - - - - - + + + + - - - - - - - - - - - - + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + - + - - - - + + + - - - - - - - + - - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - - + + + - - - - + + + + - + - - + + - - + + - - - + + + - + - - + + - + - - - + + + - - - - - + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + - - - + + + - + - + + + + + + - + - - + + - + + + + - + - - + + - - - + + + - - - + + + + + + + + + + + + - + + + + + + + - - - + + + + + + + + + + - - - + + + - - + + - - + + - - - + + + + + + - - - - + + - + - + - + - + - + - + - + - + - + @@ -24490,10 +23655,10 @@ - + - + @@ -24504,7 +23669,8 @@ - + + @@ -24512,10 +23678,10 @@ - + - + @@ -24524,26 +23690,13 @@ - - - - - - - - - - - - - - - + + - + - + @@ -24555,843 +23708,970 @@ - + - + + + + + + + + + + + + + + + + - - - - - - - + + + + - + - - + + - - + + - + - - - - - + + + + + - - - + - - + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - - - + + + + + + - - + + - - + + - - - - + + + + - - - + + + - + - + - - - - - + + + + + - + - - + + - - + + - + - + - + - - - - + + + + - - + + + + + + + + + + + + + + - - - - + + - + + + + + + + + - - + + + + + - - + + + - - - + + + + + + + - - - + + + - - - + + + - - + + + + + + + + + + + + + + + + + - - - + + + - - - - + + + + - + - - - + + + - - + + - - + + - - + + - - - - - - - - - - + + + + + + + + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + + + + + + + - - + + + + + + + + - - + + - - - + + + - + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - + + - + - - - + + + - - + + - - - + + + - + - - + + - + - - + + - + - - - + + + - - - + + + - - - + + + - - + + - + - - - - - + + + + + - - + + - - - + + + - - - - + + + + - - + + - + - - + + - - - - + + + + - - - + + + - + - - - - + + + + - + - - - + + + - + - - - - + + + + - + - - - - - + + + + + - + - - + + + + + + - - - - - + + + + + - - - - + + + + - - - + + + + + + + + - - - + + + - - - + + + - - - + + + - - + + + + + + + + + - - - - + + + + - - - + + + - - + + - - + + - + - + - - - + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - + - - - - + + + + + + + + + + + + - - - + + + + + + + + - - - + + + + + + + + - + - + - + - + - + - - + + - - + + - - + + - - + + - - - - + + + + - - - - - + + + + + - - + + - + - - + + - + - + - + - + - - - + + - + - - - - - - - - - + + + + + + + + + + + + + + - - - + + + - + - - + + + + + + - - + + - - + + - - + + + + + - - + + + + + - - + + - + - + - + - + - + - - + + - - - + + + - + - + - + + + + + - - + + - - + + - + + + + - + - - - + + + - - - - + + + + + + + + + + + - + + + + + + + + + - - - + + + - + - - + + - - + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + @@ -25406,594 +24686,599 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - - - + + + - - + + - - + + - - - + + + - - - + + + - + - - + + - - + + - + - + - + - - + + - + - + - - + + - - - - - - - - - + + + + + + + + + - - - + + + - - + + - + - - - - + + + + - - - + + + + + + + - - - - + + + + - - - + + + - - - - - - - - - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - + - - + + - + - + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - + - - - - + + + + - - - + + + - - - + + + - - + + - + - - + + - - + + - - + + - + - + - - + + - + - + - + - - - + + + - - - + + + - - - + + + - - + + - - - - - - - + + + + + + + + + - - - + + + - - - + + + - + - - + + - - + + - - - + + + - - + + - - - - + + + + - - + + - - - - - - - - - - - - - + + @@ -26016,64 +25301,66 @@ - + + + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - + - + + + + - + - + @@ -26082,572 +25369,660 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - - - + + + + + + + + + + + + - - - + + + - - + + - - - + + + + + + + - - + + + + + + - - + + - + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - - + + - - - - - - + + + + + + - - - - - + + + + + - - - + + + - + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - + - - - + + + - - + + - - - - - + + + + + - - - - + + + + - - + + - - + + - + - - - + + + + + + - - + + - - - + + + - - - + + + + + + + - + - - - - + + + + - - - - + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + - + - - - - + + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - - + + - + - - - + - + - + - - - + + + + + - + - - - - + + + + - - - - + + + + - + - - - - - + + + + + - - - - - + + + + + - + - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - + + + + + + + + - + - - - + + + + + + + + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - - + + - + - + - + - + - + - + - + - - - + + + + + + - - - + + + - - - - + + + + - - + + - - + + - + - - + + - + - + @@ -26656,482 +26031,569 @@ - + - + - + - - - - - - - - - + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - + - + - - - - + + - - + + - - + + - - + + + + + + + + + + + - - - + + + + + + + + + + + - - - + + + - + - + - + - - - - + + + + + + + + + + - - + + - - + + - - - - + + + + + - - - - + + + + - - - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - + + + - + - + - - - + - + - - - + + + - - - - - - - - + + + + + + + + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - + + + - - + + + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - + + + + + + - - + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - + - - + + - + - + - - - + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - + + + + + - - + + - - - - + + + + - + - - + + - - - + + + + + + - - + + @@ -27139,18 +26601,19 @@ - + - + - + + - + - + @@ -27165,27 +26628,24 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -27202,101 +26662,129 @@ + + + + + - + + + + + + + + + + - + - - + + - - - + + + - - + + - - - + + + + + + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - + - + - + - - + + - - + + - - - + + + + + + + + + + + + - - + + - + - + @@ -27305,106 +26793,139 @@ - + - - + + - + + + + + + - - - - + + + + - - + + - + - + - + - + - + - - + + + + + + + - - - + + + - - + + - - + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - + - - - - - + + + + + + + + + + + + + - - - + + + @@ -27412,635 +26933,700 @@ - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + + + - + - + - + + - + - + - - - - - - - - + + + + + - - - - + + + + - - - + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + - + - - - - + + + + - - - - - + + + + + - - - + + + - - + + - + - + - + - + - + - + - - - + + + - + - + - + + + + - + - - - - - - + + - + - + - - - - - - - + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + - - - + + + - - - - + - - - + + + - - - + + + - - - + + + - - - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - + - + - - + + - - + + - - + + - + - + + + + - + + + + + + - + - + + + + + + - - - + + + - - - + + + + + + + + + - - - - - + + + + + + + + - - + + - + - - - - + + + + - - + + - - + + - - - - + + + + - + - + - + - + - - - + + + - + - + - + + + + + + + - - - - + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - + - + - + - + - + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + - + @@ -28048,9 +27634,9 @@ - - - + + + @@ -28061,25 +27647,25 @@ - - - - + + + + - - + + - - + + - - - + + + @@ -28089,1147 +27675,1243 @@ - + - + - - + + - + - - - + + + - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + - - - - + + + + - - + + + + + + + + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - + + + + + + + + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + + + + + + + - + + + + + - - + + - - + + - - + + - - + + + + + + + + + - - + + - - + + - + - - - + + + - + - + - - + + - + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - + - + - - - + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - + - + - + + + + + - - + + - - + + - + - - + + - + - + - - + + - - - + + + - + - - + + - + - - + + - - + + - - + + - + - + - + - + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - + + + + - - - + + + - - + + - - + + + + + + + + - - + + - - + + - + - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - + - + - - + + + + + + + + + + + - - - - - + + + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + - - - + + - - + + - + - - + + + + + + + + + - - + + - - - + + + - - - + + + - - - + + + - + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + + + + - - - - + + + + - - + + - + - - + + - + - - - + + + - - - - - + + + + + - - - + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - + - - + + + + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - + - - + + - - - - + + + + - - + + - - + + - + - - - + + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - + @@ -29238,10 +28920,11 @@ - + - + + @@ -29270,301 +28953,435 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + - - - + + + + + + + + + - - - - + + + + - - - - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + - - + + - - + + - - - + + + - - - - - + + + + - + - + - - - - - - - - + + + + + + + + + + + + + - - - - - - + + - - + + - - - - + + + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - + - - + + - + + + + + + + + + + + - + + + + + + + + - + - + + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - - + + + - + - - - + + + - + - + - + - - + + - - + + - + - + - - - + + + - - + + - - - + + +