From 8214006ba4da3d41ddc83c7df31db2442e4953f2 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Tue, 21 Sep 2021 15:10:34 +0100 Subject: [PATCH 01/22] Add insertion order bit-vector to dict values to allow dicts to share keys more freely. --- Include/cpython/dictobject.h | 3 +- Include/internal/pycore_dict.h | 8 + Lib/test/test_dict.py | 37 +---- Modules/_testcapimodule.c | 14 -- Objects/dictobject.c | 276 ++++++++++++++++++--------------- Python/ceval.c | 11 +- Tools/gdb/libpython.py | 5 +- 7 files changed, 171 insertions(+), 183 deletions(-) diff --git a/Include/cpython/dictobject.h b/Include/cpython/dictobject.h index 7c63374c566c7c..ba118788f7b1bc 100644 --- a/Include/cpython/dictobject.h +++ b/Include/cpython/dictobject.h @@ -3,6 +3,7 @@ #endif typedef struct _dictkeysobject PyDictKeysObject; +typedef struct _dictvalues PyDictValues; /* The ma_values pointer is NULL for a combined table * or points to an array of PyObject* for a split table @@ -24,7 +25,7 @@ typedef struct { If ma_values is not NULL, the table is splitted: keys are stored in ma_keys and values are stored in ma_values */ - PyObject **ma_values; + PyDictValues *ma_values; } PyDictObject; PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key, diff --git a/Include/internal/pycore_dict.h b/Include/internal/pycore_dict.h index 2becc30beb4d8d..d37ef71bbcad35 100644 --- a/Include/internal/pycore_dict.h +++ b/Include/internal/pycore_dict.h @@ -71,6 +71,14 @@ struct _dictkeysobject { see the DK_ENTRIES() macro */ }; +/* This must be no more than 16, for the order vector to fit in 64 bits */ +#define SHARED_KEYS_MAX_SIZE 16 + +struct _dictvalues { + uint64_t mv_order; + PyObject *values[1]; +}; + #define DK_LOG_SIZE(dk) ((dk)->dk_log2_size) #if SIZEOF_VOID_P > 4 #define DK_SIZE(dk) (((int64_t)1)<tp_name); - return NULL; - } - - return PyBool_FromLong(_PyDict_HasSplitTable((PyDictObject*)arg)); -} - /* Issue #4701: Check that PyObject_Hash implicitly calls * PyType_Ready if it hasn't already been called */ @@ -5680,7 +5667,6 @@ static PyMethodDef TestMethods[] = { {"test_list_api", test_list_api, METH_NOARGS}, {"test_dict_iteration", test_dict_iteration, METH_NOARGS}, {"dict_getitem_knownhash", dict_getitem_knownhash, METH_VARARGS}, - {"dict_hassplittable", dict_hassplittable, METH_O}, {"test_lazy_hash_inheritance", test_lazy_hash_inheritance,METH_NOARGS}, {"test_long_api", test_long_api, METH_NOARGS}, {"test_xincref_doesnt_leak",test_xincref_doesnt_leak, METH_NOARGS}, diff --git a/Objects/dictobject.c b/Objects/dictobject.c index ae0098be5b5478..b4507188d73e60 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -60,7 +60,6 @@ The DictObject can be in one of two forms. ma_values != NULL, dk_refcnt >= 1 Values are stored in the ma_values array. Only string (unicode) keys are allowed. - All dicts sharing same key must have same insertion order. There are four kinds of slots in the table (slot is index, and DK_ENTRIES(keys)[index] if index >= 0): @@ -96,9 +95,10 @@ dk_nentries to achieve amortized O(1). Since there are DKIX_DUMMY remains in dk_indices, we can't increment dk_usable even though dk_nentries is decremented. -In split table, inserting into pending entry is allowed only for dk_entries[ix] -where ix == mp->ma_used. Inserting into other index and deleting item cause -converting the dict to the combined table. +To preserve the order in a split table, a bit vector is used to record the +insertion order. When a key is inserted the bit vector is shifted up by 4 bits +and the index of the key is stored in the low 4 bits. +As a consequence of this, split keys have a maximum size of 16. */ /* PyDict_MINSIZE is the starting size for any new dict. @@ -445,7 +445,9 @@ static PyDictKeysObject empty_keys_struct = { DKIX_EMPTY, DKIX_EMPTY, DKIX_EMPTY, DKIX_EMPTY}, /* dk_indices */ }; -static PyObject *empty_values[1] = { NULL }; + +static PyDictValues empty_values_struct = { 0, { NULL }}; +#define empty_values (&empty_values_struct) #define Py_EMPTY_KEYS &empty_keys_struct @@ -458,6 +460,12 @@ static PyObject *empty_values[1] = { NULL }; # define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0)) #endif +static inline int +get_index_from_order(PyDictObject *mp, int i) +{ + int shift = (mp->ma_used-1-i)*4; + return (mp->ma_values->mv_order >> shift) & 15; +} int _PyDict_CheckConsistency(PyObject *op, int check_content) @@ -482,6 +490,9 @@ _PyDict_CheckConsistency(PyObject *op, int check_content) /* combined table */ CHECK(keys->dk_refcnt == 1); } + else { + CHECK(mp->ma_used <= SHARED_KEYS_MAX_SIZE); + } if (check_content) { PyDictKeyEntry *entries = DK_ENTRIES(keys); @@ -517,9 +528,14 @@ _PyDict_CheckConsistency(PyObject *op, int check_content) } if (splitted) { + CHECK(mp->ma_used <= SHARED_KEYS_MAX_SIZE); /* splitted table */ + int duplicate_check = 0; for (i=0; i < mp->ma_used; i++) { - CHECK(mp->ma_values[i] != NULL); + int index = get_index_from_order(mp, i); + CHECK((duplicate_check & (1<ma_values->values[index] != NULL); } } } @@ -576,9 +592,9 @@ new_keys_object(uint8_t log2_size) #endif dk->dk_refcnt = 1; dk->dk_log2_size = log2_size; - dk->dk_usable = usable; dk->dk_kind = DICT_KEYS_UNICODE; dk->dk_nentries = 0; + dk->dk_usable = usable; dk->dk_version = 0; memset(&dk->dk_indices[0], 0xff, es<mv_order = 0; for (i = 0; i < size; i++) { - values[i] = NULL; + values->values[i] = NULL; } return new_dict(keys, values); } @@ -829,7 +852,7 @@ _Py_dict_lookup(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject **valu *value_addr = NULL; } else if (kind == DICT_KEYS_SPLIT) { - *value_addr = mp->ma_values[ix]; + *value_addr = mp->ma_values->values[ix]; } else { *value_addr = DK_ENTRIES(dk)[ix].me_value; @@ -879,7 +902,7 @@ _Py_dict_lookup(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject **valu Py_UNREACHABLE(); found: if (dk->dk_kind == DICT_KEYS_SPLIT) { - *value_addr = mp->ma_values[ix]; + *value_addr = mp->ma_values->values[ix]; } else { *value_addr = ep0[ix].me_value; @@ -928,7 +951,7 @@ _PyDict_MaybeUntrack(PyObject *op) numentries = mp->ma_keys->dk_nentries; if (_PyDict_HasSplitTable(mp)) { for (i = 0; i < numentries; i++) { - if ((value = mp->ma_values[i]) == NULL) + if ((value = mp->ma_values->values[i]) == NULL) continue; if (_PyObject_GC_MAY_BE_TRACKED(value)) { assert(!_PyObject_GC_MAY_BE_TRACKED(ep0[i].me_key)); @@ -998,17 +1021,6 @@ insertdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject *value) MAINTAIN_TRACKING(mp, key, value); - /* When insertion order is different from shared key, we can't share - * the key anymore. Convert this instance to combine table. - */ - if (_PyDict_HasSplitTable(mp) && - ((ix >= 0 && old_value == NULL && mp->ma_used != ix) || - (ix == DKIX_EMPTY && mp->ma_used != mp->ma_keys->dk_nentries))) { - if (insertion_resize(mp) < 0) - goto Fail; - ix = DKIX_EMPTY; - } - if (ix == DKIX_EMPTY) { /* Insert into new slot. */ mp->ma_keys->dk_version = 0; @@ -1027,8 +1039,12 @@ insertdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject *value) ep->me_key = key; ep->me_hash = hash; if (mp->ma_values) { - assert (mp->ma_values[mp->ma_keys->dk_nentries] == NULL); - mp->ma_values[mp->ma_keys->dk_nentries] = value; + int index = mp->ma_keys->dk_nentries; + assert(index < SHARED_KEYS_MAX_SIZE); + assert((mp->ma_values->mv_order >> 60) == 0); + mp->ma_values->mv_order = (mp->ma_values->mv_order)<<4 | index; + assert (mp->ma_values->values[index] == NULL); + mp->ma_values->values[index] = value; } else { ep->me_value = value; @@ -1044,10 +1060,9 @@ insertdict(PyDictObject *mp, PyObject *key, Py_hash_t hash, PyObject *value) if (old_value != value) { if (_PyDict_HasSplitTable(mp)) { - mp->ma_values[ix] = value; + mp->ma_values->values[ix] = value; if (old_value == NULL) { - /* pending state */ - assert(ix == mp->ma_used); + mp->ma_values->mv_order = (mp->ma_values->mv_order << 4) | ix; mp->ma_used++; } } @@ -1136,7 +1151,7 @@ dictresize(PyDictObject *mp, uint8_t log2_newsize) { Py_ssize_t numentries; PyDictKeysObject *oldkeys; - PyObject **oldvalues; + PyDictValues *oldvalues; PyDictKeyEntry *oldentries, *newentries; if (log2_newsize >= SIZEOF_SIZE_T*8) { @@ -1173,13 +1188,14 @@ dictresize(PyDictObject *mp, uint8_t log2_newsize) * Note that values of split table is always dense. */ for (Py_ssize_t i = 0; i < numentries; i++) { - assert(oldvalues[i] != NULL); - PyDictKeyEntry *ep = &oldentries[i]; + int index = oldvalues->mv_order >> ((numentries-1-i)*4)&15; + assert(oldvalues->values[index] != NULL); + PyDictKeyEntry *ep = &oldentries[index]; PyObject *key = ep->me_key; Py_INCREF(key); newentries[i].me_key = key; newentries[i].me_hash = ep->me_hash; - newentries[i].me_value = oldvalues[i]; + newentries[i].me_value = oldvalues->values[index]; } dictkeys_decref(oldkeys); @@ -1238,9 +1254,12 @@ make_keys_shared(PyObject *op) if (!PyDict_CheckExact(op)) return NULL; + if (mp->ma_used > SHARED_KEYS_MAX_SIZE) { + return NULL; + } if (!_PyDict_HasSplitTable(mp)) { PyDictKeyEntry *ep0; - PyObject **values; + PyDictValues *values; assert(mp->ma_keys->dk_refcnt == 1); if (mp->ma_keys->dk_kind == DICT_KEYS_GENERAL) { return NULL; @@ -1260,14 +1279,29 @@ make_keys_shared(PyObject *op) "Not enough memory to allocate new values array"); return NULL; } - for (i = 0; i < size; i++) { - values[i] = ep0[i].me_value; + uint64_t order = 0; + for (i = 0; i < mp->ma_used; i++) { + order <<= 4; + order |= i; + assert(ep0[i].me_value != NULL); + values->values[i] = ep0[i].me_value; ep0[i].me_value = NULL; } + values->mv_order = order; + for (; i < size; i++) { + assert(ep0[i].me_value == NULL); + values->values[i] = NULL; + ep0[i].me_value = NULL; + } + if (mp->ma_keys->dk_nentries + mp->ma_keys->dk_usable > SHARED_KEYS_MAX_SIZE) { + assert(mp->ma_keys->dk_nentries <= SHARED_KEYS_MAX_SIZE); + mp->ma_keys->dk_usable = SHARED_KEYS_MAX_SIZE - mp->ma_keys->dk_nentries; + } mp->ma_keys->dk_kind = DICT_KEYS_SPLIT; mp->ma_values = values; } dictkeys_incref(mp->ma_keys); + ASSERT_CONSISTENT(mp); return mp->ma_keys; } @@ -1366,7 +1400,7 @@ _PyDict_GetItemHint(PyDictObject *mp, PyObject *key, if (ep->me_key == key) { if (mp->ma_keys->dk_kind == DICT_KEYS_SPLIT) { assert(mp->ma_values != NULL); - res = mp->ma_values[(size_t)hint]; + res = mp->ma_values->values[(size_t)hint]; } else { res = ep->me_value; @@ -1468,6 +1502,9 @@ _PyDict_GetItemStringWithError(PyObject *v, const char *key) /* Fast version of global value lookup (LOAD_GLOBAL). * Lookup in globals, then builtins. * + * + * + * * Raise an exception and return NULL if an error occurred (ex: computing the * key hash failed, key comparison failed, ...). Return NULL if the key doesn't * exist. Return the value if the key exists. @@ -1569,11 +1606,30 @@ delitem_common(PyDictObject *mp, Py_hash_t hash, Py_ssize_t ix, mp->ma_keys->dk_version = 0; mp->ma_version_tag = DICT_NEXT_VERSION(); ep = &DK_ENTRIES(mp->ma_keys)[ix]; - dictkeys_set_index(mp->ma_keys, hashpos, DKIX_DUMMY); - old_key = ep->me_key; - ep->me_key = NULL; - ep->me_value = NULL; - Py_DECREF(old_key); + if (mp->ma_values) { + assert(old_value == mp->ma_values->values[ix]); + mp->ma_values->values[ix] = NULL; + assert(ix < SHARED_KEYS_MAX_SIZE); + /* Update order */ + for (int i = 0;; i+= 4) { + assert (i < 64); + if (((mp->ma_values->mv_order >> i) & 15) == (uint64_t)ix) { + /* Remove 4 bits at ith position */ + uint64_t order = mp->ma_values->mv_order; + uint64_t high = order >> i >> 4 << i; + uint64_t low = order & ((((uint64_t)1)<ma_values->mv_order = high | low; + break; + } + } + } + else { + dictkeys_set_index(mp->ma_keys, hashpos, DKIX_DUMMY); + old_key = ep->me_key; + ep->me_key = NULL; + ep->me_value = NULL; + Py_DECREF(old_key); + } Py_DECREF(old_value); ASSERT_CONSISTENT(mp); @@ -1617,15 +1673,6 @@ _PyDict_DelItem_KnownHash(PyObject *op, PyObject *key, Py_hash_t hash) return -1; } - // Split table doesn't allow deletion. Combine it. - if (_PyDict_HasSplitTable(mp)) { - if (dictresize(mp, DK_LOG_SIZE(mp->ma_keys))) { - return -1; - } - ix = _Py_dict_lookup(mp, key, hash, &old_value); - assert(ix >= 0); - } - return delitem_common(mp, hash, ix, old_value); } @@ -1660,15 +1707,6 @@ _PyDict_DelItemIf(PyObject *op, PyObject *key, return -1; } - // Split table doesn't allow deletion. Combine it. - if (_PyDict_HasSplitTable(mp)) { - if (dictresize(mp, DK_LOG_SIZE(mp->ma_keys))) { - return -1; - } - ix = _Py_dict_lookup(mp, key, hash, &old_value); - assert(ix >= 0); - } - res = predicate(old_value); if (res == -1) return -1; @@ -1688,7 +1726,7 @@ PyDict_Clear(PyObject *op) { PyDictObject *mp; PyDictKeysObject *oldkeys; - PyObject **oldvalues; + PyDictValues *oldvalues; Py_ssize_t i, n; if (!PyDict_Check(op)) @@ -1708,7 +1746,7 @@ PyDict_Clear(PyObject *op) if (oldvalues != NULL) { n = oldkeys->dk_nentries; for (i = 0; i < n; i++) - Py_CLEAR(oldvalues[i]); + Py_CLEAR(oldvalues->values[i]); free_values(oldvalues); dictkeys_decref(oldkeys); } @@ -1738,11 +1776,12 @@ _PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, mp = (PyDictObject *)op; i = *ppos; if (mp->ma_values) { + assert(mp->ma_used <= SHARED_KEYS_MAX_SIZE); if (i < 0 || i >= mp->ma_used) return 0; - /* values of split table is always dense */ - entry_ptr = &DK_ENTRIES(mp->ma_keys)[i]; - value = mp->ma_values[i]; + int index = get_index_from_order(mp, i); + entry_ptr = &DK_ENTRIES(mp->ma_keys)[index]; + value = mp->ma_values->values[index]; assert(value != NULL); } else { @@ -1796,9 +1835,8 @@ PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) PyObject * _PyDict_Pop_KnownHash(PyObject *dict, PyObject *key, Py_hash_t hash, PyObject *deflt) { - Py_ssize_t ix, hashpos; - PyObject *old_value, *old_key; - PyDictKeyEntry *ep; + Py_ssize_t ix; + PyObject *old_value; PyDictObject *mp; assert(PyDict_Check(dict)); @@ -1823,29 +1861,9 @@ _PyDict_Pop_KnownHash(PyObject *dict, PyObject *key, Py_hash_t hash, PyObject *d _PyErr_SetKeyError(key); return NULL; } - - // Split table doesn't allow deletion. Combine it. - if (_PyDict_HasSplitTable(mp)) { - if (dictresize(mp, DK_LOG_SIZE(mp->ma_keys))) { - return NULL; - } - ix = _Py_dict_lookup(mp, key, hash, &old_value); - assert(ix >= 0); - } - - hashpos = lookdict_index(mp->ma_keys, hash, ix); - assert(hashpos >= 0); assert(old_value != NULL); - mp->ma_used--; - mp->ma_version_tag = DICT_NEXT_VERSION(); - mp->ma_keys->dk_version = 0; - dictkeys_set_index(mp->ma_keys, hashpos, DKIX_DUMMY); - ep = &DK_ENTRIES(mp->ma_keys)[ix]; - mp->ma_keys->dk_version = 0; - old_key = ep->me_key; - ep->me_key = NULL; - ep->me_value = NULL; - Py_DECREF(old_key); + Py_INCREF(old_value); + delitem_common(mp, hash, ix, old_value); ASSERT_CONSISTENT(mp); return old_value; @@ -1966,7 +1984,7 @@ _PyDict_FromKeys(PyObject *cls, PyObject *iterable, PyObject *value) static void dict_dealloc(PyDictObject *mp) { - PyObject **values = mp->ma_values; + PyDictValues *values = mp->ma_values; PyDictKeysObject *keys = mp->ma_keys; Py_ssize_t i, n; @@ -1976,7 +1994,7 @@ dict_dealloc(PyDictObject *mp) if (values != NULL) { if (values != empty_values) { for (i = 0, n = mp->ma_keys->dk_nentries; i < n; i++) { - Py_XDECREF(values[i]); + Py_XDECREF(values->values[i]); } free_values(values); } @@ -2165,7 +2183,7 @@ dict_keys(PyDictObject *mp) } ep = DK_ENTRIES(mp->ma_keys); if (mp->ma_values) { - value_ptr = mp->ma_values; + value_ptr = mp->ma_values->values; offset = sizeof(PyObject *); } else { @@ -2208,7 +2226,7 @@ dict_values(PyDictObject *mp) } ep = DK_ENTRIES(mp->ma_keys); if (mp->ma_values) { - value_ptr = mp->ma_values; + value_ptr = mp->ma_values->values; offset = sizeof(PyObject *); } else { @@ -2265,7 +2283,7 @@ dict_items(PyDictObject *mp) /* Nothing we do below makes any function calls. */ ep = DK_ENTRIES(mp->ma_keys); if (mp->ma_values) { - value_ptr = mp->ma_values; + value_ptr = mp->ma_values->values; offset = sizeof(PyObject *); } else { @@ -2534,7 +2552,7 @@ dict_merge(PyObject *a, PyObject *b, int override) key = entry->me_key; hash = entry->me_hash; if (other->ma_values) - value = other->ma_values[i]; + value = other->ma_values->values[i]; else value = entry->me_value; @@ -2677,7 +2695,7 @@ PyDict_Copy(PyObject *o) if (_PyDict_HasSplitTable(mp)) { PyDictObject *split_copy; Py_ssize_t size = USABLE_FRACTION(DK_SIZE(mp->ma_keys)); - PyObject **newvalues; + PyDictValues *newvalues; newvalues = new_values(size); if (newvalues == NULL) return PyErr_NoMemory(); @@ -2686,15 +2704,16 @@ PyDict_Copy(PyObject *o) free_values(newvalues); return NULL; } + newvalues->mv_order = mp->ma_values->mv_order; split_copy->ma_values = newvalues; split_copy->ma_keys = mp->ma_keys; split_copy->ma_used = mp->ma_used; split_copy->ma_version_tag = DICT_NEXT_VERSION(); dictkeys_incref(mp->ma_keys); for (i = 0, n = size; i < n; i++) { - PyObject *value = mp->ma_values[i]; + PyObject *value = mp->ma_values->values[i]; Py_XINCREF(value); - split_copy->ma_values[i] = value; + split_copy->ma_values->values[i] = value; } if (_PyObject_GC_IS_TRACKED(mp)) _PyObject_GC_TRACK(split_copy); @@ -2806,7 +2825,7 @@ dict_equal(PyDictObject *a, PyDictObject *b) PyDictKeyEntry *ep = &DK_ENTRIES(a->ma_keys)[i]; PyObject *aval; if (a->ma_values) - aval = a->ma_values[i]; + aval = a->ma_values->values[i]; else aval = ep->me_value; if (aval != NULL) { @@ -2993,8 +3012,11 @@ PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *defaultobj) ep->me_key = key; ep->me_hash = hash; if (_PyDict_HasSplitTable(mp)) { - assert(mp->ma_values[mp->ma_keys->dk_nentries] == NULL); - mp->ma_values[mp->ma_keys->dk_nentries] = value; + int index = mp->ma_keys->dk_nentries; + assert(index < SHARED_KEYS_MAX_SIZE); + assert(mp->ma_values->values[index] == NULL); + mp->ma_values->values[index] = value; + mp->ma_values->mv_order = (mp->ma_values->mv_order << 4) | index; } else { ep->me_value = value; @@ -3011,7 +3033,8 @@ PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *defaultobj) assert(ix == mp->ma_used); Py_INCREF(value); MAINTAIN_TRACKING(mp, key, value); - mp->ma_values[ix] = value; + mp->ma_values->values[ix] = value; + mp->ma_values->mv_order = (mp->ma_values->mv_order << 4) | ix; mp->ma_used++; mp->ma_version_tag = DICT_NEXT_VERSION(); } @@ -3159,7 +3182,7 @@ dict_traverse(PyObject *op, visitproc visit, void *arg) else { if (mp->ma_values != NULL) { for (i = 0; i < n; i++) { - Py_VISIT(mp->ma_values[i]); + Py_VISIT(mp->ma_values->values[i]); } } else { @@ -3677,8 +3700,9 @@ dictiter_iternextkey(dictiterobject *di) if (d->ma_values) { if (i >= d->ma_used) goto fail; - key = DK_ENTRIES(k)[i].me_key; - assert(d->ma_values[i] != NULL); + int index = get_index_from_order(d, i); + key = DK_ENTRIES(k)[index].me_key; + assert(d->ma_values->values[index] != NULL); } else { Py_ssize_t n = k->dk_nentries; @@ -3764,7 +3788,8 @@ dictiter_iternextvalue(dictiterobject *di) if (d->ma_values) { if (i >= d->ma_used) goto fail; - value = d->ma_values[i]; + int index = get_index_from_order(d, i); + value = d->ma_values->values[index]; assert(value != NULL); } else { @@ -3851,8 +3876,9 @@ dictiter_iternextitem(dictiterobject *di) if (d->ma_values) { if (i >= d->ma_used) goto fail; - key = DK_ENTRIES(d->ma_keys)[i].me_key; - value = d->ma_values[i]; + int index = get_index_from_order(d, i); + key = DK_ENTRIES(d->ma_keys)[index].me_key; + value = d->ma_values->values[index]; assert(value != NULL); } else { @@ -3968,8 +3994,9 @@ dictreviter_iternext(dictiterobject *di) goto fail; } if (d->ma_values) { - key = DK_ENTRIES(k)[i].me_key; - value = d->ma_values[i]; + int index = get_index_from_order(d, i); + key = DK_ENTRIES(k)[index].me_key; + value = d->ma_values->values[index]; assert (value != NULL); } else { @@ -4976,19 +5003,14 @@ _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, } if (value == NULL) { res = PyDict_DelItem(dict, key); - // Since key sharing dict doesn't allow deletion, PyDict_DelItem() - // always converts dict to combined form. - if ((cached = CACHED_KEYS(tp)) != NULL) { - CACHED_KEYS(tp) = NULL; - dictkeys_decref(cached); - } } else { int was_shared = (cached == ((PyDictObject *)dict)->ma_keys); res = PyDict_SetItem(dict, key, value); if (was_shared && (cached = CACHED_KEYS(tp)) != NULL && - cached != ((PyDictObject *)dict)->ma_keys) { + cached != ((PyDictObject *)dict)->ma_keys && + cached->dk_nentries <= SHARED_KEYS_MAX_SIZE) { /* PyDict_SetItem() may call dictresize and convert split table * into combined table. In such case, convert it to split * table again and update type's shared key only when this is @@ -5004,14 +5026,15 @@ _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, * a = C() */ if (cached->dk_refcnt == 1) { - CACHED_KEYS(tp) = make_keys_shared(dict); - } - else { - CACHED_KEYS(tp) = NULL; + PyDictKeysObject *new_cached = make_keys_shared(dict); + if (new_cached != NULL) { + CACHED_KEYS(tp) = new_cached; + dictkeys_decref(cached); + } + else if (PyErr_Occurred()) { + return -1; + } } - dictkeys_decref(cached); - if (CACHED_KEYS(tp) == NULL && PyErr_Occurred()) - return -1; } } } else { @@ -5028,6 +5051,7 @@ _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, res = PyDict_SetItem(dict, key, value); } } + ASSERT_CONSISTENT(dict); return res; } diff --git a/Python/ceval.c b/Python/ceval.c index ab692fd8ded157..16375e0586be01 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3629,7 +3629,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr DEOPT_IF(dict == NULL, LOAD_ATTR); assert(PyDict_CheckExact((PyObject *)dict)); DEOPT_IF(dict->ma_keys->dk_version != cache1->dk_version_or_hint, LOAD_ATTR); - res = dict->ma_values[cache0->index]; + res = dict->ma_values->values[cache0->index]; DEOPT_IF(res == NULL, LOAD_ATTR); STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); @@ -3735,15 +3735,16 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr DEOPT_IF(dict == NULL, STORE_ATTR); assert(PyDict_CheckExact((PyObject *)dict)); DEOPT_IF(dict->ma_keys->dk_version != cache1->dk_version_or_hint, STORE_ATTR); - /* Need to maintain ordering of dicts */ - DEOPT_IF(cache0->index > 0 && dict->ma_values[cache0->index-1] == NULL, STORE_ATTR); STAT_INC(STORE_ATTR, hit); record_cache_hit(cache0); + int index = cache0->index; STACK_SHRINK(1); PyObject *value = POP(); - PyObject *old_value = dict->ma_values[cache0->index]; - dict->ma_values[cache0->index] = value; + PyObject *old_value = dict->ma_values->values[index]; + dict->ma_values->values[index] = value; if (old_value == NULL) { + assert(index < 16); + dict->ma_values->mv_order = (dict->ma_values->mv_order << 4) | index; dict->ma_used++; } else { diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index c11b23e74b9bed..62eb1976b715f0 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -686,10 +686,13 @@ def iteritems(self): ''' keys = self.field('ma_keys') values = self.field('ma_values') + has_values = long(values) + if has_values: + values = values['values'] entries, nentries = self._get_entries(keys) for i in safe_range(nentries): ep = entries[i] - if long(values): + if has_values: pyop_value = PyObjectPtr.from_pyobject_ptr(values[i]) else: pyop_value = PyObjectPtr.from_pyobject_ptr(ep['me_value']) From 45c98142b748c71da4259473a63f54a3836259ea Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 23 Sep 2021 14:00:12 +0100 Subject: [PATCH 02/22] Add NEWS --- .../2021-09-23-14-00-05.bpo-40116.KaoeFs.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-23-14-00-05.bpo-40116.KaoeFs.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-09-23-14-00-05.bpo-40116.KaoeFs.rst b/Misc/NEWS.d/next/Core and Builtins/2021-09-23-14-00-05.bpo-40116.KaoeFs.rst new file mode 100644 index 00000000000000..24ce96376d87e9 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-09-23-14-00-05.bpo-40116.KaoeFs.rst @@ -0,0 +1,4 @@ +Change to the implementation of split dictionaries. Classes where the +instances differ either in the exact set of attributes, or in the order in +which those attributes are set, can still share keys. This should have no +observable effect on users of Python or the C-API. Patch by Mark Shannon. From c3de09e284cadeb9e04371a35a6b9fd73544fbc0 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 23 Sep 2021 14:22:21 +0100 Subject: [PATCH 03/22] Never change types' cached keys. It could invalidate inline attribute objects. --- Objects/dictobject.c | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index b4507188d73e60..fd0bf150676a07 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -5005,37 +5005,7 @@ _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, res = PyDict_DelItem(dict, key); } else { - int was_shared = (cached == ((PyDictObject *)dict)->ma_keys); res = PyDict_SetItem(dict, key, value); - if (was_shared && - (cached = CACHED_KEYS(tp)) != NULL && - cached != ((PyDictObject *)dict)->ma_keys && - cached->dk_nentries <= SHARED_KEYS_MAX_SIZE) { - /* PyDict_SetItem() may call dictresize and convert split table - * into combined table. In such case, convert it to split - * table again and update type's shared key only when this is - * the only dict sharing key with the type. - * - * This is to allow using shared key in class like this: - * - * class C: - * def __init__(self): - * # one dict resize happens - * self.a, self.b, self.c = 1, 2, 3 - * self.d, self.e, self.f = 4, 5, 6 - * a = C() - */ - if (cached->dk_refcnt == 1) { - PyDictKeysObject *new_cached = make_keys_shared(dict); - if (new_cached != NULL) { - CACHED_KEYS(tp) = new_cached; - dictkeys_decref(cached); - } - else if (PyErr_Occurred()) { - return -1; - } - } - } } } else { dict = *dictptr; From 58dd2a02fc98cac4959c8516ebafe9297cfe0aa5 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 23 Sep 2021 17:13:13 +0100 Subject: [PATCH 04/22] Lazily create object dictionaries. Work in progress. --- Include/cpython/object.h | 2 + Include/internal/pycore_dict.h | 2 + Include/internal/pycore_object.h | 9 + Include/object.h | 1 + Lib/test/test_descr.py | 10 +- Lib/test/test_gc.py | 29 ++- Lib/test/test_sys.py | 10 +- Objects/dictobject.c | 330 +++++++++++++++++++++++-------- Objects/object.c | 171 +++++++++++----- Objects/typeobject.c | 83 +++++--- Python/specialize.c | 4 +- 11 files changed, 462 insertions(+), 189 deletions(-) diff --git a/Include/cpython/object.h b/Include/cpython/object.h index 5ae6f367c6048a..cac00070bb7e72 100644 --- a/Include/cpython/object.h +++ b/Include/cpython/object.h @@ -270,6 +270,7 @@ struct _typeobject { destructor tp_finalize; vectorcallfunc tp_vectorcall; + Py_ssize_t tp_inline_values_offset; }; /* The *real* layout of a type object when allocated on the heap */ @@ -333,6 +334,7 @@ PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); PyAPI_FUNC(int) PyObject_CallFinalizerFromDealloc(PyObject *); +int _PyObject_DictEmpty(PyObject *); /* Same as PyObject_Generic{Get,Set}Attr, but passing the attributes dict as the last parameter. */ diff --git a/Include/internal/pycore_dict.h b/Include/internal/pycore_dict.h index d37ef71bbcad35..f082288dadfc74 100644 --- a/Include/internal/pycore_dict.h +++ b/Include/internal/pycore_dict.h @@ -101,6 +101,8 @@ extern uint64_t _pydict_global_version; #define DICT_NEXT_VERSION() (++_pydict_global_version) +PyObject *_PyObject_MakeDictFromInlineAttributes(PyObject *obj, PyDictValues *values); + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index 744b41ae5d90d6..86474103290599 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -181,6 +181,15 @@ extern int _Py_CheckSlotResult( extern PyObject* _PyType_AllocNoTrack(PyTypeObject *type, Py_ssize_t nitems); extern int _PyObject_InitializeDict(PyObject *obj); +extern int _PyObject_StoreInlineAttribute(PyObject *obj, PyDictValues *values, + PyObject *name, PyObject *value); +PyObject * _PyObject_GetInlineAttribute(PyObject *obj, PyDictValues *values, + PyObject *name); +PyDictValues ** _PyObject_ValuesPointer(PyObject *); +PyObject ** _PyObject_DictPointer(PyObject *); +int _PyObject_VisitInlineAttributes(PyObject *self, visitproc visit, void *arg); +void _PyObject_ClearInlineAttributes(PyObject *self); +void _PyObject_FreeInlineAttributes(PyObject *self); #ifdef __cplusplus } diff --git a/Include/object.h b/Include/object.h index 490cbffd5f1074..bd3f4080d107ed 100644 --- a/Include/object.h +++ b/Include/object.h @@ -333,6 +333,7 @@ given type object has a specified feature. */ #ifndef Py_LIMITED_API + /* Set if instances of the type object are treated as sequences for pattern matching */ #define Py_TPFLAGS_SEQUENCE (1 << 5) /* Set if instances of the type object are treated as mappings for pattern matching */ diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 9b919e7824445e..37bd35aa96d7b8 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -5500,17 +5500,19 @@ class A: class B(A): pass + #Shrink keys by repeatedly creating instances + [(A(), B()) for _ in range(20)] + a, b = A(), B() self.assertEqual(sys.getsizeof(vars(a)), sys.getsizeof(vars(b))) self.assertLess(sys.getsizeof(vars(a)), sys.getsizeof({"a":1})) - # Initial hash table can contain at most 5 elements. + # Initial hash table can contain only one or two elements. # Set 6 attributes to cause internal resizing. a.x, a.y, a.z, a.w, a.v, a.u = range(6) self.assertNotEqual(sys.getsizeof(vars(a)), sys.getsizeof(vars(b))) a2 = A() - self.assertEqual(sys.getsizeof(vars(a)), sys.getsizeof(vars(a2))) - self.assertLess(sys.getsizeof(vars(a)), sys.getsizeof({"a":1})) - b.u, b.v, b.w, b.t, b.s, b.r = range(6) + self.assertGreater(sys.getsizeof(vars(a)), sys.getsizeof(vars(a2))) + self.assertLess(sys.getsizeof(vars(a2)), sys.getsizeof({"a":1})) self.assertLess(sys.getsizeof(vars(b)), sys.getsizeof({"a":1})) diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index 6c28b2b677ceeb..5969b9a9d0cef5 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -444,7 +444,7 @@ def __getattr__(self, someattribute): # 0, thus mutating the trash graph as a side effect of merely asking # whether __del__ exists. This used to (before 2.3b1) crash Python. # Now __getattr__ isn't called. - self.assertEqual(gc.collect(), 4) + self.assertLessEqual(gc.collect(), 4) self.assertEqual(len(gc.garbage), garbagelen) def test_boom2(self): @@ -471,7 +471,7 @@ def __getattr__(self, someattribute): # there isn't a second time, so this simply cleans up the trash cycle. # We expect a, b, a.__dict__ and b.__dict__ (4 objects) to get # reclaimed this way. - self.assertEqual(gc.collect(), 4) + self.assertLessEqual(gc.collect(), 4) self.assertEqual(len(gc.garbage), garbagelen) def test_boom_new(self): @@ -491,7 +491,7 @@ def __getattr__(self, someattribute): gc.collect() garbagelen = len(gc.garbage) del a, b - self.assertEqual(gc.collect(), 4) + self.assertLessEqual(gc.collect(), 4) self.assertEqual(len(gc.garbage), garbagelen) def test_boom2_new(self): @@ -513,7 +513,7 @@ def __getattr__(self, someattribute): gc.collect() garbagelen = len(gc.garbage) del a, b - self.assertEqual(gc.collect(), 4) + self.assertLessEqual(gc.collect(), 4) self.assertEqual(len(gc.garbage), garbagelen) def test_get_referents(self): @@ -943,8 +943,8 @@ def getstats(): A() t = gc.collect() c, nc = getstats() - self.assertEqual(t, 2*N) # instance object & its dict - self.assertEqual(c - oldc, 2*N) + self.assertEqual(t, N) # instance objects + self.assertEqual(c - oldc, N) self.assertEqual(nc - oldnc, 0) # But Z() is not actually collected. @@ -964,8 +964,8 @@ def getstats(): Z() t = gc.collect() c, nc = getstats() - self.assertEqual(t, 2*N) - self.assertEqual(c - oldc, 2*N) + self.assertEqual(t, N) + self.assertEqual(c - oldc, N) self.assertEqual(nc - oldnc, 0) # The A() trash should have been reclaimed already but the @@ -974,8 +974,8 @@ def getstats(): zs.clear() t = gc.collect() c, nc = getstats() - self.assertEqual(t, 4) - self.assertEqual(c - oldc, 4) + self.assertLessEqual(t, 4) + self.assertLessEqual(c - oldc, 4) self.assertEqual(nc - oldnc, 0) gc.enable() @@ -1128,8 +1128,7 @@ def test_collect_generation(self): @cpython_only def test_collect_garbage(self): self.preclean() - # Each of these cause four objects to be garbage: Two - # Uncollectables and their instance dicts. + # Each of these cause two objects to be garbage: Uncollectable() Uncollectable() C1055820(666) @@ -1138,8 +1137,8 @@ def test_collect_garbage(self): if v[1] != "stop": continue info = v[2] - self.assertEqual(info["collected"], 2) - self.assertEqual(info["uncollectable"], 8) + self.assertEqual(info["collected"], 1) + self.assertEqual(info["uncollectable"], 4) # We should now have the Uncollectables in gc.garbage self.assertEqual(len(gc.garbage), 4) @@ -1156,7 +1155,7 @@ def test_collect_garbage(self): continue info = v[2] self.assertEqual(info["collected"], 0) - self.assertEqual(info["uncollectable"], 4) + self.assertLessEqual(info["uncollectable"], 4) # Uncollectables should be gone self.assertEqual(len(gc.garbage), 0) diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index e98803b48f6ac0..7c658394118752 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1397,7 +1397,7 @@ def delx(self): del self.__x check((1,2,3), vsize('') + 3*self.P) # type # static type: PyTypeObject - fmt = 'P2nPI13Pl4Pn9Pn11PIPP' + fmt = 'P2nPI13Pl4Pn9Pn12PIPP' s = vsize(fmt) check(int, s) # class @@ -1410,15 +1410,15 @@ def delx(self): del self.__x '5P') class newstyleclass(object): pass # Separate block for PyDictKeysObject with 8 keys and 5 entries - check(newstyleclass, s + calcsize(DICT_KEY_STRUCT_FORMAT) + 8 + 5*calcsize("n2P")) + check(newstyleclass, s + calcsize(DICT_KEY_STRUCT_FORMAT) + 32 + 21*calcsize("n2P")) # dict with shared keys - check(newstyleclass().__dict__, size('nQ2P') + 5*self.P) + check(newstyleclass().__dict__, size('nQ2P') + 15*self.P) o = newstyleclass() o.a = o.b = o.c = o.d = o.e = o.f = o.g = o.h = 1 # Separate block for PyDictKeysObject with 16 keys and 10 entries - check(newstyleclass, s + calcsize(DICT_KEY_STRUCT_FORMAT) + 16 + 10*calcsize("n2P")) + check(newstyleclass, s + calcsize(DICT_KEY_STRUCT_FORMAT) + 32 + 21*calcsize("n2P")) # dict with shared keys - check(newstyleclass().__dict__, size('nQ2P') + 10*self.P) + check(newstyleclass().__dict__, size('nQ2P') + 13*self.P) # unicode # each tuple contains a string and its expected character size # don't put any static strings here, as they may contain diff --git a/Objects/dictobject.c b/Objects/dictobject.c index fd0bf150676a07..366f6b68395f81 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -633,7 +633,7 @@ new_values(Py_ssize_t size) /* Consumes a reference to the keys object */ static PyObject * -new_dict(PyDictKeysObject *keys, PyDictValues *values) +new_dict(PyDictKeysObject *keys, PyDictValues *values, Py_ssize_t used, int free_values_on_failure) { PyDictObject *mp; assert(keys != NULL); @@ -652,7 +652,7 @@ new_dict(PyDictKeysObject *keys, PyDictValues *values) mp = PyObject_GC_New(PyDictObject, &PyDict_Type); if (mp == NULL) { dictkeys_decref(keys); - if (values != empty_values) { + if (free_values_on_failure) { free_values(values); } return NULL; @@ -660,12 +660,18 @@ new_dict(PyDictKeysObject *keys, PyDictValues *values) } mp->ma_keys = keys; mp->ma_values = values; - mp->ma_used = 0; + mp->ma_used = used; mp->ma_version_tag = DICT_NEXT_VERSION(); ASSERT_CONSISTENT(mp); return (PyObject *)mp; } +static inline Py_ssize_t +shared_keys_usable_size(PyDictKeysObject *keys) +{ + return keys->dk_nentries + keys->dk_usable; +} + /* Consumes a reference to the keys object */ static PyObject * new_dict_with_shared_keys(PyDictKeysObject *keys) @@ -673,7 +679,7 @@ new_dict_with_shared_keys(PyDictKeysObject *keys) PyDictValues *values; Py_ssize_t i, size; - size = USABLE_FRACTION(DK_SIZE(keys)); + size = shared_keys_usable_size(keys); values = new_values(size); if (values == NULL) { dictkeys_decref(keys); @@ -683,7 +689,7 @@ new_dict_with_shared_keys(PyDictKeysObject *keys) for (i = 0; i < size; i++) { values->values[i] = NULL; } - return new_dict(keys, values); + return new_dict(keys, values, 0, 1); } @@ -732,7 +738,7 @@ PyObject * PyDict_New(void) { dictkeys_incref(Py_EMPTY_KEYS); - return new_dict(Py_EMPTY_KEYS, empty_values); + return new_dict(Py_EMPTY_KEYS, empty_values, 0, 0); } /* Search index of hash table from offset of entry table */ @@ -997,6 +1003,39 @@ insertion_resize(PyDictObject *mp) return dictresize(mp, calculate_log2_keysize(GROWTH_RATE(mp))); } +static int +insert_into_dictkeys(PyDictKeysObject *keys, PyObject *name) +{ + assert(PyUnicode_CheckExact(name)); + Py_hash_t hash = ((PyASCIIObject *)name)->hash; + if (hash == -1) { + hash = PyUnicode_Type.tp_hash(name); + if (hash == -1) { + PyErr_Clear(); + return DKIX_EMPTY; + } + } + Py_ssize_t ix = dictkeys_stringlookup(keys, name, hash); + if (ix == DKIX_EMPTY) { + Py_INCREF(name); + if (keys->dk_usable <= 0) { + return DKIX_EMPTY; + } + /* Insert into new slot. */ + keys->dk_version = 0; + Py_ssize_t hashpos = find_empty_slot(keys, hash); + ix = keys->dk_nentries; + PyDictKeyEntry *ep = &DK_ENTRIES(keys)[ix]; + dictkeys_set_index(keys, hashpos, ix); + ep->me_key = name; + ep->me_hash = hash; + keys->dk_usable--; + keys->dk_nentries++; + } + assert (ix < SHARED_KEYS_MAX_SIZE); + return (int)ix; +} + /* Internal routine to insert a new item into the table. Used both by the internal resize routine and by the public insert routine. @@ -1143,8 +1182,7 @@ actually be smaller than the old one. If a table is split (its keys and hashes are shared, its values are not), then the values are temporarily copied into the table, it is resized as a combined table, then the me_value slots in the old table are NULLed out. -After resizing a table is always combined, -but can be resplit by make_keys_shared(). +After resizing a table is always combined. */ static int dictresize(PyDictObject *mp, uint8_t log2_newsize) @@ -1243,68 +1281,6 @@ dictresize(PyDictObject *mp, uint8_t log2_newsize) return 0; } -/* Returns NULL if unable to split table. - * A NULL return does not necessarily indicate an error */ -static PyDictKeysObject * -make_keys_shared(PyObject *op) -{ - Py_ssize_t i; - Py_ssize_t size; - PyDictObject *mp = (PyDictObject *)op; - - if (!PyDict_CheckExact(op)) - return NULL; - if (mp->ma_used > SHARED_KEYS_MAX_SIZE) { - return NULL; - } - if (!_PyDict_HasSplitTable(mp)) { - PyDictKeyEntry *ep0; - PyDictValues *values; - assert(mp->ma_keys->dk_refcnt == 1); - if (mp->ma_keys->dk_kind == DICT_KEYS_GENERAL) { - return NULL; - } - else if (mp->ma_used > mp->ma_keys->dk_nentries) { - /* Remove dummy keys */ - if (dictresize(mp, DK_LOG_SIZE(mp->ma_keys))) - return NULL; - } - assert(mp->ma_used == mp->ma_keys->dk_nentries); - /* Copy values into a new array */ - ep0 = DK_ENTRIES(mp->ma_keys); - size = USABLE_FRACTION(DK_SIZE(mp->ma_keys)); - values = new_values(size); - if (values == NULL) { - PyErr_SetString(PyExc_MemoryError, - "Not enough memory to allocate new values array"); - return NULL; - } - uint64_t order = 0; - for (i = 0; i < mp->ma_used; i++) { - order <<= 4; - order |= i; - assert(ep0[i].me_value != NULL); - values->values[i] = ep0[i].me_value; - ep0[i].me_value = NULL; - } - values->mv_order = order; - for (; i < size; i++) { - assert(ep0[i].me_value == NULL); - values->values[i] = NULL; - ep0[i].me_value = NULL; - } - if (mp->ma_keys->dk_nentries + mp->ma_keys->dk_usable > SHARED_KEYS_MAX_SIZE) { - assert(mp->ma_keys->dk_nentries <= SHARED_KEYS_MAX_SIZE); - mp->ma_keys->dk_usable = SHARED_KEYS_MAX_SIZE - mp->ma_keys->dk_nentries; - } - mp->ma_keys->dk_kind = DICT_KEYS_SPLIT; - mp->ma_values = values; - } - dictkeys_incref(mp->ma_keys); - ASSERT_CONSISTENT(mp); - return mp->ma_keys; -} - PyObject * _PyDict_NewPresized(Py_ssize_t minused) { @@ -1330,7 +1306,7 @@ _PyDict_NewPresized(Py_ssize_t minused) new_keys = new_keys_object(log2_newsize); if (new_keys == NULL) return NULL; - return new_dict(new_keys, NULL); + return new_dict(new_keys, NULL, 0, 0); } /* Note that, for historical reasons, PyDict_GetItem() suppresses all errors @@ -2694,7 +2670,7 @@ PyDict_Copy(PyObject *o) if (_PyDict_HasSplitTable(mp)) { PyDictObject *split_copy; - Py_ssize_t size = USABLE_FRACTION(DK_SIZE(mp->ma_keys)); + Py_ssize_t size = shared_keys_usable_size(mp->ma_keys); PyDictValues *newvalues; newvalues = new_values(size); if (newvalues == NULL) @@ -2742,7 +2718,7 @@ PyDict_Copy(PyObject *o) if (keys == NULL) { return NULL; } - PyDictObject *new = (PyDictObject *)new_dict(keys, NULL); + PyDictObject *new = (PyDictObject *)new_dict(keys, NULL, 0, 0); if (new == NULL) { /* In case of an error, `new_dict()` takes care of cleaning up `keys`. */ @@ -3206,20 +3182,22 @@ static PyObject *dictiter_new(PyDictObject *, PyTypeObject *); Py_ssize_t _PyDict_SizeOf(PyDictObject *mp) { - Py_ssize_t size, usable, res; + Py_ssize_t size, res; size = DK_SIZE(mp->ma_keys); - usable = USABLE_FRACTION(size); res = _PyObject_SIZE(Py_TYPE(mp)); - if (mp->ma_values) - res += usable * sizeof(PyObject*); + if (mp->ma_values) { + res += shared_keys_usable_size(mp->ma_keys) * sizeof(PyObject*); + } /* If the dictionary is split, the keys portion is accounted-for in the type object. */ - if (mp->ma_keys->dk_refcnt == 1) + if (mp->ma_keys->dk_refcnt == 1) { + Py_ssize_t usable = USABLE_FRACTION(size); res += (sizeof(PyDictKeysObject) + DK_IXSIZE(mp->ma_keys) * size + sizeof(PyDictKeyEntry) * usable); + } return res; } @@ -4921,11 +4899,14 @@ dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) PyDictKeysObject * _PyDict_NewKeysForClass(void) { - PyDictKeysObject *keys = new_keys_object(PyDict_LOG_MINSIZE); + PyDictKeysObject *keys = new_keys_object(5); /* log2(32) */ if (keys == NULL) { PyErr_Clear(); } else { + assert(keys->dk_nentries == 0); + /* Set to max size+1 as it will shrink by one before each new object */ + keys->dk_usable = SHARED_KEYS_MAX_SIZE; keys->dk_kind = DICT_KEYS_SPLIT; } return keys; @@ -4933,15 +4914,42 @@ _PyDict_NewKeysForClass(void) #define CACHED_KEYS(tp) (((PyHeapTypeObject*)tp)->ht_cached_keys) +static int +init_inline_values(PyObject *obj, PyTypeObject *tp) +{ + assert(tp->tp_flags & Py_TPFLAGS_HEAPTYPE); + assert(tp->tp_dictoffset > 0); + assert(tp->tp_inline_values_offset > 0); + PyDictKeysObject *keys = CACHED_KEYS(tp); + assert(keys != NULL); + if (keys->dk_usable > 1) { + keys->dk_usable--; + } + Py_ssize_t size = shared_keys_usable_size(keys); + assert(size > 0); + PyDictValues *values = new_values(size); + if (values == NULL) { + PyErr_NoMemory(); + return -1; + } + values->mv_order = 0; + for (int i = 0; i < size; i++) { + values->values[i] = NULL; + } + *((PyDictValues **)((char *)obj + tp->tp_inline_values_offset)) = values; + return 0; +} + int _PyObject_InitializeDict(PyObject *obj) { - PyObject **dictptr = _PyObject_GetDictPtr(obj); - if (dictptr == NULL) { + PyTypeObject *tp = Py_TYPE(obj); + if (tp->tp_dictoffset == 0) { return 0; } - assert(*dictptr == NULL); - PyTypeObject *tp = Py_TYPE(obj); + if (tp->tp_inline_values_offset) { + return init_inline_values(obj, tp); + } PyObject *dict; if (_PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE) && CACHED_KEYS(tp)) { dictkeys_incref(CACHED_KEYS(tp)); @@ -4953,15 +4961,160 @@ _PyObject_InitializeDict(PyObject *obj) if (dict == NULL) { return -1; } + PyObject **dictptr = _PyObject_DictPointer(obj); *dictptr = dict; return 0; } +static PyObject * +make_dict_from_inline_attributes(PyDictKeysObject *keys, PyDictValues *values) +{ + dictkeys_incref(keys); + Py_ssize_t used = 0; + for (Py_ssize_t i = 0; i < shared_keys_usable_size(keys); i++) { + used += values->values[i] != NULL; + } + return new_dict(keys, values, used, 0); +} + +PyObject * +_PyObject_MakeDictFromInlineAttributes(PyObject *obj, PyDictValues *values) +{ + assert(Py_TYPE(obj)->tp_inline_values_offset != 0); + PyDictKeysObject *keys = CACHED_KEYS(Py_TYPE(obj)); + return make_dict_from_inline_attributes(keys, values); +} + +int +_PyObject_StoreInlineAttribute(PyObject *obj, PyDictValues *values, + PyObject *name, PyObject *value) +{ + assert(PyUnicode_CheckExact(name)); + PyTypeObject *tp = Py_TYPE(obj); + PyDictKeysObject *keys = CACHED_KEYS(Py_TYPE(obj)); + assert(keys != NULL); + assert(values != NULL); + int ix = insert_into_dictkeys(keys, name); + if (ix == DKIX_EMPTY) { + if (value == NULL) { + PyErr_SetObject(PyExc_AttributeError, name); + return -1; + } + PyObject *dict = make_dict_from_inline_attributes(keys, values); + if (dict == NULL) { + return -1; + } + *((PyDictValues **)((char *)obj + tp->tp_inline_values_offset)) = NULL; + *((PyObject **) ((char *)obj + tp->tp_dictoffset)) = dict; + return PyDict_SetItem(dict, name, value); + } + PyObject *old_value = values->values[ix]; + Py_XINCREF(value); + values->values[ix] = value; + if (old_value == NULL) { + if (value == NULL) { + PyErr_SetObject(PyExc_AttributeError, name); + return -1; + } + values->mv_order = (values->mv_order << 4) | ix; + } + else { + Py_DECREF(old_value); + } + return 0; +} + + +PyObject * +_PyObject_GetInlineAttribute(PyObject *obj, PyDictValues *values, + PyObject *name) +{ + assert(PyUnicode_CheckExact(name)); + PyDictKeysObject *keys = CACHED_KEYS(Py_TYPE(obj)); + assert(keys != NULL); + Py_ssize_t ix = _PyDictKeys_StringLookup(keys, name); + if (ix == DKIX_EMPTY) { + return NULL; + } + PyObject *value = values->values[ix]; + Py_XINCREF(value); + return value; +} + +int +_PyObject_DictEmpty(PyObject *obj) +{ + PyTypeObject *tp = Py_TYPE(obj); + if (tp->tp_dictoffset == 0) { + return 1; + } + PyDictValues **values_ptr = _PyObject_ValuesPointer(obj); + if (values_ptr && *values_ptr) { + PyDictKeysObject *keys = CACHED_KEYS(tp); + for (Py_ssize_t i = 0; i < keys->dk_nentries; i++) { + if ((*values_ptr)->values[i] != NULL) { + return 0; + } + } + return 1; + } + PyObject **dictptr = _PyObject_DictPointer(obj); + PyObject *dict = *dictptr; + if (dict == NULL) { + return 1; + } + return ((PyDictObject *)dict)->ma_used == 0; +} + + +int +_PyObject_VisitInlineAttributes(PyObject *self, visitproc visit, void *arg) +{ + PyTypeObject *tp = Py_TYPE(self); + PyDictValues **values_ptr = _PyObject_ValuesPointer(self); + if (values_ptr == NULL || *values_ptr == NULL) { + return 0; + } + PyDictKeysObject *keys = CACHED_KEYS(tp); + for (Py_ssize_t i = 0; i < keys->dk_nentries; i++) { + Py_VISIT((*values_ptr)->values[i]); + } + return 0; +} + +void +_PyObject_ClearInlineAttributes(PyObject *self) +{ + PyTypeObject *tp = Py_TYPE(self); + PyDictValues **values_ptr = _PyObject_ValuesPointer(self); + if (values_ptr == NULL || *values_ptr == NULL) { + return; + } + PyDictKeysObject *keys = CACHED_KEYS(tp); + for (Py_ssize_t i = 0; i < keys->dk_nentries; i++) { + Py_CLEAR((*values_ptr)->values[i]); + } +} + +void +_PyObject_FreeInlineAttributes(PyObject *self) +{ + PyTypeObject *tp = Py_TYPE(self); + PyDictValues **values_ptr = _PyObject_ValuesPointer(self); + if (values_ptr == NULL || *values_ptr == NULL) { + return; + } + PyDictKeysObject *keys = CACHED_KEYS(tp); + for (Py_ssize_t i = 0; i < keys->dk_nentries; i++) { + Py_XDECREF((*values_ptr)->values[i]); + } + free_values(*values_ptr); +} PyObject * PyObject_GenericGetDict(PyObject *obj, void *context) { - PyObject **dictptr = _PyObject_GetDictPtr(obj); + PyObject **dictptr = _PyObject_DictPointer(obj); if (dictptr == NULL) { PyErr_SetString(PyExc_AttributeError, "This object has no __dict__"); @@ -4970,7 +5123,14 @@ PyObject_GenericGetDict(PyObject *obj, void *context) PyObject *dict = *dictptr; if (dict == NULL) { PyTypeObject *tp = Py_TYPE(obj); - if (_PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE) && CACHED_KEYS(tp)) { + PyDictValues **values_ptr = _PyObject_ValuesPointer(obj); + if (values_ptr && *values_ptr) { + *dictptr = dict = make_dict_from_inline_attributes(CACHED_KEYS(tp), *values_ptr); + if (dict != NULL) { + *values_ptr = NULL; + } + } + else if (_PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE) && CACHED_KEYS(tp)) { dictkeys_incref(CACHED_KEYS(tp)); *dictptr = dict = new_dict_with_shared_keys(CACHED_KEYS(tp)); } diff --git a/Objects/object.c b/Objects/object.c index 026262b5448495..cc3bc782321c9a 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -4,6 +4,7 @@ #include "Python.h" #include "pycore_ceval.h" // _Py_EnterRecursiveCall() #include "pycore_context.h" +#include "pycore_dict.h" #include "pycore_initconfig.h" #include "pycore_object.h" #include "pycore_pyerrors.h" @@ -1064,10 +1065,8 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) return -1; } -/* Helper to get a pointer to an object's __dict__ slot, if any */ - PyObject ** -_PyObject_GetDictPtr(PyObject *obj) +_PyObject_DictPointer(PyObject *obj) { Py_ssize_t dictoffset; PyTypeObject *tp = Py_TYPE(obj); @@ -1089,6 +1088,32 @@ _PyObject_GetDictPtr(PyObject *obj) return (PyObject **) ((char *)obj + dictoffset); } +/* Helper to get a pointer to an object's __dict__ slot, if any. + * Creates the dict from inline attributes if necessary. */ +PyObject ** +_PyObject_GetDictPtr(PyObject *obj) +{ + PyObject **dict_ptr = _PyObject_DictPointer(obj); + if (dict_ptr == NULL) { + return NULL; + } + if (*dict_ptr != NULL) { + return (PyObject **)dict_ptr; + } + PyDictValues **values_ptr = _PyObject_ValuesPointer(obj); + if (values_ptr == NULL || *values_ptr == NULL) { + return dict_ptr; + } + PyObject *dict = _PyObject_MakeDictFromInlineAttributes(obj, *values_ptr); + if (dict == NULL) { + PyErr_Clear(); + return NULL; + } + *values_ptr = NULL; + *dict_ptr = dict; + return dict_ptr; +} + PyObject * PyObject_SelfIter(PyObject *obj) { @@ -1135,7 +1160,7 @@ _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) } } - if (tp->tp_getattro != PyObject_GenericGetAttr || !PyUnicode_Check(name)) { + if (tp->tp_getattro != PyObject_GenericGetAttr || !PyUnicode_CheckExact(name)) { *method = PyObject_GetAttr(obj, name); return 0; } @@ -1155,23 +1180,34 @@ _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) } } } - - PyObject **dictptr = _PyObject_GetDictPtr(obj); - PyObject *dict; - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - PyObject *attr = PyDict_GetItemWithError(dict, name); + PyDictValues **values_ptr = _PyObject_ValuesPointer(obj); + if (values_ptr && *values_ptr) { + assert(*_PyObject_DictPointer(obj) == NULL); + PyObject *attr = _PyObject_GetInlineAttribute(obj, *values_ptr, name); if (attr != NULL) { - *method = Py_NewRef(attr); - Py_DECREF(dict); + *method = attr; Py_XDECREF(descr); return 0; } - Py_DECREF(dict); + } + else { + PyObject **dictptr = _PyObject_DictPointer(obj); + PyObject *dict; + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + PyObject *attr = PyDict_GetItemWithError(dict, name); + if (attr != NULL) { + *method = Py_NewRef(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + return 0; + } + Py_DECREF(dict); - if (PyErr_Occurred()) { - Py_XDECREF(descr); - return 0; + if (PyErr_Occurred()) { + Py_XDECREF(descr); + return 0; + } } } @@ -1199,6 +1235,17 @@ _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) return 0; } +PyDictValues ** +_PyObject_ValuesPointer(PyObject *obj) +{ + PyTypeObject *tp = Py_TYPE(obj); + Py_ssize_t offset = tp->tp_inline_values_offset; + if (offset == 0) { + return NULL; + } + return (PyDictValues **) ((char *)obj + offset); +} + /* Generic GetAttr functions - put these in your tp_[gs]etattro slot. */ PyObject * @@ -1246,25 +1293,46 @@ _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, goto done; } } - if (dict == NULL) { - /* Inline _PyObject_GetDictPtr */ - dictoffset = tp->tp_dictoffset; - if (dictoffset != 0) { - if (dictoffset < 0) { - Py_ssize_t tsize = Py_SIZE(obj); - if (tsize < 0) { - tsize = -tsize; + PyDictValues **values_ptr = _PyObject_ValuesPointer(obj); + if (values_ptr && *values_ptr) { + if (PyUnicode_CheckExact(name)) { + assert(*_PyObject_DictPointer(obj) == NULL); + res = _PyObject_GetInlineAttribute(obj, *values_ptr, name); + if (res != NULL) { + goto done; } - size_t size = _PyObject_VAR_SIZE(tp, tsize); - _PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX); - - dictoffset += (Py_ssize_t)size; - _PyObject_ASSERT(obj, dictoffset > 0); - _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0); } - dictptr = (PyObject **) ((char *)obj + dictoffset); - dict = *dictptr; + else { + dictptr = _PyObject_DictPointer(obj); + assert(dictptr != NULL && *dictptr == NULL); + *dictptr = dict = _PyObject_MakeDictFromInlineAttributes(obj, *values_ptr); + if (dict == NULL) { + res = NULL; + goto done; + } + *values_ptr = NULL; + } + } + else { + /* Inline _PyObject_DictPointer */ + dictoffset = tp->tp_dictoffset; + if (dictoffset != 0) { + if (dictoffset < 0) { + Py_ssize_t tsize = Py_SIZE(obj); + if (tsize < 0) { + tsize = -tsize; + } + size_t size = _PyObject_VAR_SIZE(tp, tsize); + _PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX); + + dictoffset += (Py_ssize_t)size; + _PyObject_ASSERT(obj, dictoffset > 0); + _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0); + } + dictptr = (PyObject **) ((char *)obj + dictoffset); + dict = *dictptr; + } } } if (dict != NULL) { @@ -1327,7 +1395,6 @@ _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name, PyTypeObject *tp = Py_TYPE(obj); PyObject *descr; descrsetfunc f; - PyObject **dictptr; int res = -1; if (!PyUnicode_Check(name)){ @@ -1353,30 +1420,30 @@ _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name, } } - /* XXX [Steve Dower] These are really noisy - worth it? */ - /*if (PyType_Check(obj) || PyModule_Check(obj)) { - if (value && PySys_Audit("object.__setattr__", "OOO", obj, name, value) < 0) - return -1; - if (!value && PySys_Audit("object.__delattr__", "OO", obj, name) < 0) - return -1; - }*/ - if (dict == NULL) { - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr == NULL) { - if (descr == NULL) { - PyErr_Format(PyExc_AttributeError, - "'%.100s' object has no attribute '%U'", - tp->tp_name, name); + PyDictValues **values_ptr = _PyObject_ValuesPointer(obj); + if (values_ptr && *values_ptr) { + res = _PyObject_StoreInlineAttribute(obj, *values_ptr, name, value); + } + else { + PyObject **dictptr = _PyObject_DictPointer(obj); + if (dictptr == NULL) { + if (descr == NULL) { + PyErr_Format(PyExc_AttributeError, + "'%.100s' object has no attribute '%U'", + tp->tp_name, name); + } + else { + PyErr_Format(PyExc_AttributeError, + "'%.50s' object attribute '%U' is read-only", + tp->tp_name, name); + } + goto done; } else { - PyErr_Format(PyExc_AttributeError, - "'%.50s' object attribute '%U' is read-only", - tp->tp_name, name); + res = _PyObjectDict_SetItem(tp, dictptr, name, value); } - goto done; } - res = _PyObjectDict_SetItem(tp, dictptr, name, value); } else { Py_INCREF(dict); diff --git a/Objects/typeobject.c b/Objects/typeobject.c index a81d071e31d23b..b7e3dc846d5d0f 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1232,8 +1232,15 @@ subtype_traverse(PyObject *self, visitproc visit, void *arg) assert(base); } + if (type->tp_inline_values_offset != base->tp_inline_values_offset) { + int err = _PyObject_VisitInlineAttributes(self, visit, arg); + if (err) { + return err; + } + } + if (type->tp_dictoffset != base->tp_dictoffset) { - PyObject **dictptr = _PyObject_GetDictPtr(self); + PyObject **dictptr = _PyObject_DictPointer(self); if (dictptr && *dictptr) Py_VISIT(*dictptr); } @@ -1293,8 +1300,11 @@ subtype_clear(PyObject *self) /* Clear the instance dict (if any), to break cycles involving only __dict__ slots (as in the case 'self.__dict__ is self'). */ + if (type->tp_inline_values_offset != base->tp_inline_values_offset) { + _PyObject_ClearInlineAttributes(self); + } if (type->tp_dictoffset != base->tp_dictoffset) { - PyObject **dictptr = _PyObject_GetDictPtr(self); + PyObject **dictptr = _PyObject_DictPointer(self); if (dictptr && *dictptr) Py_CLEAR(*dictptr); } @@ -1433,9 +1443,12 @@ subtype_dealloc(PyObject *self) assert(base); } - /* If we added a dict, DECREF it */ + /* If we added a dict, DECREF it, or free inline values. */ + if (type->tp_inline_values_offset != base->tp_inline_values_offset) { + _PyObject_FreeInlineAttributes(self); + } if (type->tp_dictoffset && !base->tp_dictoffset) { - PyObject **dictptr = _PyObject_GetDictPtr(self); + PyObject **dictptr = _PyObject_DictPointer(self); if (dictptr != NULL) { PyObject *dict = *dictptr; if (dict != NULL) { @@ -2159,7 +2172,6 @@ mro_internal(PyTypeObject *type, PyObject **p_old_mro) return 1; } - /* Calculate the best base amongst multiple base classes. This is the first one that's on the path to the "solid base". */ @@ -2230,6 +2242,10 @@ extra_ivars(PyTypeObject *type, PyTypeObject *base) return t_size != b_size || type->tp_itemsize != base->tp_itemsize; } + if (type->tp_inline_values_offset && base->tp_inline_values_offset == 0 && + type->tp_inline_values_offset + sizeof(PyDictValues *) == t_size && + type->tp_flags & Py_TPFLAGS_HEAPTYPE) + t_size -= sizeof(PyDictValues *); if (type->tp_weaklistoffset && base->tp_weaklistoffset == 0 && type->tp_weaklistoffset + sizeof(PyObject *) == t_size && type->tp_flags & Py_TPFLAGS_HEAPTYPE) @@ -2238,7 +2254,6 @@ extra_ivars(PyTypeObject *type, PyTypeObject *base) type->tp_dictoffset + sizeof(PyObject *) == t_size && type->tp_flags & Py_TPFLAGS_HEAPTYPE) t_size -= sizeof(PyObject *); - return t_size != b_size; } @@ -2258,6 +2273,7 @@ solid_base(PyTypeObject *type) } static void object_dealloc(PyObject *); +static PyObject *object_new(PyTypeObject *, PyObject *, PyObject *); static int object_init(PyObject *, PyObject *, PyObject *); static int update_slot(PyTypeObject *, PyObject *); static void fixup_slot_dispatchers(PyTypeObject *); @@ -2979,6 +2995,13 @@ type_new_descriptors(const type_new_ctx *ctx, PyTypeObject *type) type->tp_weaklistoffset = slotoffset; slotoffset += sizeof(PyObject *); } + if (type->tp_dictoffset > 0) { + type->tp_inline_values_offset = slotoffset; + slotoffset += sizeof(PyDictValues *); + } + else { + type->tp_inline_values_offset = 0; + } type->tp_basicsize = slotoffset; type->tp_itemsize = ctx->base->tp_itemsize; @@ -3181,7 +3204,7 @@ type_new_impl(type_new_ctx *ctx) // Put the proper slots in place fixup_slot_dispatchers(type); - if (type->tp_dictoffset) { + if (type->tp_dictoffset > 0) { PyHeapTypeObject *et = (PyHeapTypeObject*)type; et->ht_cached_keys = _PyDict_NewKeysForClass(); } @@ -3195,6 +3218,7 @@ type_new_impl(type_new_ctx *ctx) } assert(_PyType_CheckConsistency(type)); + return (PyObject *)type; error: @@ -4257,7 +4281,6 @@ type_traverse(PyTypeObject *type, visitproc visit, void *arg) static int type_clear(PyTypeObject *type) { - PyDictKeysObject *cached_keys; /* Because of type_is_gc(), the collector only calls this for heaptypes. */ _PyObject_ASSERT((PyObject *)type, type->tp_flags & Py_TPFLAGS_HEAPTYPE); @@ -4292,11 +4315,6 @@ type_clear(PyTypeObject *type) */ PyType_Modified(type); - cached_keys = ((PyHeapTypeObject *)type)->ht_cached_keys; - if (cached_keys != NULL) { - ((PyHeapTypeObject *)type)->ht_cached_keys = NULL; - _PyDictKeys_DecRef(cached_keys); - } if (type->tp_dict) { PyDict_Clear(type->tp_dict); } @@ -4618,6 +4636,7 @@ compatible_with_tp_base(PyTypeObject *child) child->tp_itemsize == parent->tp_itemsize && child->tp_dictoffset == parent->tp_dictoffset && child->tp_weaklistoffset == parent->tp_weaklistoffset && + child->tp_inline_values_offset == parent->tp_inline_values_offset && ((child->tp_flags & Py_TPFLAGS_HAVE_GC) == (parent->tp_flags & Py_TPFLAGS_HAVE_GC)) && (child->tp_dealloc == subtype_dealloc || @@ -4637,6 +4656,8 @@ same_slots_added(PyTypeObject *a, PyTypeObject *b) size += sizeof(PyObject *); if (a->tp_weaklistoffset == size && b->tp_weaklistoffset == size) size += sizeof(PyObject *); + if (a->tp_inline_values_offset == size && b->tp_inline_values_offset == size) + size += sizeof(PyObject *); /* Check slots compliance */ if (!(a->tp_flags & Py_TPFLAGS_HEAPTYPE) || @@ -4781,6 +4802,11 @@ object_set_class(PyObject *self, PyObject *value, void *closure) } if (compatible_for_assignment(oldto, newto, "__class__")) { + /* Changing the class will change the implicit dict keys, + * so we must materialize the dictionary first. */ + assert(oldto->tp_inline_values_offset == newto->tp_inline_values_offset); + _PyObject_GetDictPtr(self); + assert(_PyObject_ValuesPointer(self) == NULL || *_PyObject_ValuesPointer(self) == NULL); if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE) { Py_INCREF(newto); } @@ -4908,20 +4934,16 @@ _PyObject_GetState(PyObject *obj, int required) } { - PyObject **dict; - dict = _PyObject_GetDictPtr(obj); - /* It is possible that the object's dict is not initialized - yet. In this case, we will return None for the state. - We also return None if the dict is empty to make the behavior - consistent regardless whether the dict was initialized or not. - This make unit testing easier. */ - if (dict != NULL && *dict != NULL && PyDict_GET_SIZE(*dict)) { - state = *dict; + if (_PyObject_DictEmpty(obj)) { + state = Py_None; + Py_INCREF(state); } else { - state = Py_None; + state = PyObject_GenericGetDict(obj, NULL); + if (state == NULL) { + return NULL; + } } - Py_INCREF(state); } slotnames = _PyType_GetSlotNames(Py_TYPE(obj)); @@ -4933,12 +4955,18 @@ _PyObject_GetState(PyObject *obj, int required) assert(slotnames == Py_None || PyList_Check(slotnames)); if (required) { Py_ssize_t basicsize = PyBaseObject_Type.tp_basicsize; - if (Py_TYPE(obj)->tp_dictoffset) + if (Py_TYPE(obj)->tp_dictoffset) { basicsize += sizeof(PyObject *); - if (Py_TYPE(obj)->tp_weaklistoffset) + } + if (Py_TYPE(obj)->tp_weaklistoffset) { basicsize += sizeof(PyObject *); - if (slotnames != Py_None) + } + if (Py_TYPE(obj)->tp_inline_values_offset) { + basicsize += sizeof(PyDictValues *); + } + if (slotnames != Py_None) { basicsize += sizeof(PyObject *) * PyList_GET_SIZE(slotnames); + } if (Py_TYPE(obj)->tp_basicsize > basicsize) { Py_DECREF(slotnames); Py_DECREF(state); @@ -5708,6 +5736,7 @@ inherit_special(PyTypeObject *type, PyTypeObject *base) COPYVAL(tp_itemsize); COPYVAL(tp_weaklistoffset); COPYVAL(tp_dictoffset); + COPYVAL(tp_inline_values_offset); #undef COPYVAL /* Setup fast subclass flags */ diff --git a/Python/specialize.c b/Python/specialize.c index 1ab79bf3ea0c5d..2d09e29b4e15f7 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -4,6 +4,7 @@ #include "pycore_dict.h" #include "pycore_long.h" #include "pycore_moduleobject.h" +#include "pycore_object.h" #include "opcode.h" #include "structmember.h" // struct PyMemberDef, T_OFFSET_EX @@ -383,6 +384,7 @@ _Py_Quicken(PyCodeObject *code) { if (code->co_quickened) { return 0; } + return 0; Py_ssize_t size = PyBytes_GET_SIZE(code->co_code); int instr_count = (int)(size/sizeof(_Py_CODEUNIT)); if (instr_count > MAX_SIZE_TO_QUICKEN) { @@ -910,7 +912,7 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_OUT_OF_RANGE); goto fail; } - PyObject **owner_dictptr = _PyObject_GetDictPtr(owner); + PyObject **owner_dictptr = _PyObject_DictPointer(owner); int owner_has_dict = (owner_dictptr != NULL && *owner_dictptr != NULL); owner_dict = owner_has_dict ? (PyDictObject *)*owner_dictptr : NULL; // Make sure dict doesn't get GC-ed halfway. From 769183a45ffe056353848c220b517856e1abf35c Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 30 Sep 2021 17:23:50 +0100 Subject: [PATCH 05/22] Restore specialization for inline attributes. --- Include/opcode.h | 19 ++++--- Lib/opcode.py | 1 + Python/ceval.c | 70 ++++++++++++----------- Python/opcode_targets.h | 16 +++--- Python/specialize.c | 121 +++++++++++++++++++--------------------- 5 files changed, 111 insertions(+), 116 deletions(-) diff --git a/Include/opcode.h b/Include/opcode.h index 27895255947837..f52ba5dbf79330 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -158,15 +158,16 @@ extern "C" { #define LOAD_METHOD_CACHED 80 #define LOAD_METHOD_CLASS 81 #define LOAD_METHOD_MODULE 87 -#define STORE_ATTR_ADAPTIVE 88 -#define STORE_ATTR_SPLIT_KEYS 120 -#define STORE_ATTR_SLOT 122 -#define STORE_ATTR_WITH_HINT 123 -#define LOAD_FAST__LOAD_FAST 127 -#define STORE_FAST__LOAD_FAST 128 -#define LOAD_FAST__LOAD_CONST 134 -#define LOAD_CONST__LOAD_FAST 140 -#define STORE_FAST__STORE_FAST 143 +#define LOAD_METHOD_NO_DICT 88 +#define STORE_ATTR_ADAPTIVE 120 +#define STORE_ATTR_SPLIT_KEYS 122 +#define STORE_ATTR_SLOT 123 +#define STORE_ATTR_WITH_HINT 127 +#define LOAD_FAST__LOAD_FAST 128 +#define STORE_FAST__LOAD_FAST 134 +#define LOAD_FAST__LOAD_CONST 140 +#define LOAD_CONST__LOAD_FAST 143 +#define STORE_FAST__STORE_FAST 149 #ifdef NEED_OPCODE_JUMP_TABLES static uint32_t _PyOpcode_RelativeJump[8] = { 0U, diff --git a/Lib/opcode.py b/Lib/opcode.py index 5d356746888757..527fef7397d81c 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -242,6 +242,7 @@ def jabs_op(name, op): "LOAD_METHOD_CACHED", "LOAD_METHOD_CLASS", "LOAD_METHOD_MODULE", + "LOAD_METHOD_NO_DICT", "STORE_ATTR_ADAPTIVE", "STORE_ATTR_SPLIT_KEYS", "STORE_ATTR_SLOT", diff --git a/Python/ceval.c b/Python/ceval.c index 16375e0586be01..8d90d11876727f 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3615,6 +3615,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr } TARGET(LOAD_ATTR_SPLIT_KEYS): { + /* TO DO: rename instruction */ assert(cframe.use_tracing == 0); PyObject *owner = TOP(); PyObject *res; @@ -3625,11 +3626,10 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr assert(cache1->tp_version != 0); DEOPT_IF(tp->tp_version_tag != cache1->tp_version, LOAD_ATTR); assert(tp->tp_dictoffset > 0); - PyDictObject *dict = *(PyDictObject **)(((char *)owner) + tp->tp_dictoffset); - DEOPT_IF(dict == NULL, LOAD_ATTR); - assert(PyDict_CheckExact((PyObject *)dict)); - DEOPT_IF(dict->ma_keys->dk_version != cache1->dk_version_or_hint, LOAD_ATTR); - res = dict->ma_values->values[cache0->index]; + assert(tp->tp_inline_values_offset > 0); + PyDictValues *values = *(PyDictValues **)(((char *)owner) + tp->tp_inline_values_offset); + DEOPT_IF(values == NULL, LOAD_ATTR); + res = values->values[cache0->index]; DEOPT_IF(res == NULL, LOAD_ATTR); STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); @@ -3722,6 +3722,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr } TARGET(STORE_ATTR_SPLIT_KEYS): { + /* TO DO: rename instruction */ assert(cframe.use_tracing == 0); PyObject *owner = TOP(); PyTypeObject *tp = Py_TYPE(owner); @@ -3731,31 +3732,23 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr assert(cache1->tp_version != 0); DEOPT_IF(tp->tp_version_tag != cache1->tp_version, STORE_ATTR); assert(tp->tp_dictoffset > 0); - PyDictObject *dict = *(PyDictObject **)(((char *)owner) + tp->tp_dictoffset); - DEOPT_IF(dict == NULL, STORE_ATTR); - assert(PyDict_CheckExact((PyObject *)dict)); - DEOPT_IF(dict->ma_keys->dk_version != cache1->dk_version_or_hint, STORE_ATTR); + assert(tp->tp_inline_values_offset > 0); + PyDictValues *values = *(PyDictValues **)(((char *)owner) + tp->tp_inline_values_offset); + DEOPT_IF(values == NULL, STORE_ATTR); STAT_INC(STORE_ATTR, hit); record_cache_hit(cache0); int index = cache0->index; STACK_SHRINK(1); PyObject *value = POP(); - PyObject *old_value = dict->ma_values->values[index]; - dict->ma_values->values[index] = value; + PyObject *old_value = values->values[index]; + values->values[index] = value; if (old_value == NULL) { assert(index < 16); - dict->ma_values->mv_order = (dict->ma_values->mv_order << 4) | index; - dict->ma_used++; + values->mv_order = (values->mv_order << 4) | index; } else { Py_DECREF(old_value); } - /* Ensure dict is GC tracked if it needs to be */ - if (!_PyObject_GC_IS_TRACKED(dict) && _PyObject_GC_MAY_BE_TRACKED(value)) { - _PyObject_GC_TRACK(dict); - } - /* PEP 509 */ - dict->ma_version_tag = DICT_NEXT_VERSION(); Py_DECREF(owner); DISPATCH(); } @@ -4470,21 +4463,31 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr _PyObjectCache *cache2 = &caches[-2].obj; DEOPT_IF(self_cls->tp_version_tag != cache1->tp_version, LOAD_METHOD); - assert(cache1->dk_version_or_hint != 0); - assert(cache1->tp_version != 0); - assert(self_cls->tp_dictoffset >= 0); - assert(Py_TYPE(self_cls)->tp_dictoffset > 0); - - // inline version of _PyObject_GetDictPtr for offset >= 0 - PyObject *dict = self_cls->tp_dictoffset != 0 ? - *(PyObject **) ((char *)self + self_cls->tp_dictoffset) : NULL; - - // Ensure self.__dict__ didn't modify keys. - // Don't care if self has no dict, it could be builtin or __slots__. - DEOPT_IF(dict != NULL && - ((PyDictObject *)dict)->ma_keys->dk_version != - cache1->dk_version_or_hint, LOAD_METHOD); + assert(self_cls->tp_dictoffset > 0); + assert(self_cls->tp_inline_values_offset > 0); + PyDictObject *dict = *(PyDictObject **)(((char *)self) + self_cls->tp_dictoffset); + DEOPT_IF(dict != NULL, LOAD_METHOD); + DEOPT_IF(((PyHeapTypeObject *)self_cls)->ht_cached_keys->dk_version != cache1->dk_version_or_hint, LOAD_METHOD); + STAT_INC(LOAD_METHOD, hit); + record_cache_hit(cache0); + PyObject *res = cache2->obj; + assert(res != NULL); + assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)); + Py_INCREF(res); + SET_TOP(res); + PUSH(self); + DISPATCH(); + } + TARGET(LOAD_METHOD_NO_DICT): { + PyObject *self = TOP(); + PyTypeObject *self_cls = Py_TYPE(self); + SpecializedCacheEntry *caches = GET_CACHE(); + _PyAdaptiveEntry *cache0 = &caches[0].adaptive; + _PyAttrCache *cache1 = &caches[-1].attr; + _PyObjectCache *cache2 = &caches[-2].obj; + DEOPT_IF(self_cls->tp_version_tag != cache1->tp_version, LOAD_METHOD); + assert(self_cls->tp_dictoffset == 0); STAT_INC(LOAD_METHOD, hit); record_cache_hit(cache0); PyObject *res = cache2->obj; @@ -4526,7 +4529,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, InterpreterFrame *frame, int thr record_cache_hit(cache0); PyObject *res = cache2->obj; assert(res != NULL); - assert(_PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)); Py_INCREF(res); SET_TOP(NULL); Py_DECREF(cls); diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index f3bfae545bcd48..8a20d42f0bc211 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -87,7 +87,7 @@ static void *opcode_targets[256] = { &&TARGET_SETUP_ANNOTATIONS, &&TARGET_YIELD_VALUE, &&TARGET_LOAD_METHOD_MODULE, - &&TARGET_STORE_ATTR_ADAPTIVE, + &&TARGET_LOAD_METHOD_NO_DICT, &&TARGET_POP_EXCEPT, &&TARGET_STORE_NAME, &&TARGET_DELETE_NAME, @@ -119,36 +119,36 @@ static void *opcode_targets[256] = { &&TARGET_IS_OP, &&TARGET_CONTAINS_OP, &&TARGET_RERAISE, - &&TARGET_STORE_ATTR_SPLIT_KEYS, + &&TARGET_STORE_ATTR_ADAPTIVE, &&TARGET_JUMP_IF_NOT_EXC_MATCH, + &&TARGET_STORE_ATTR_SPLIT_KEYS, &&TARGET_STORE_ATTR_SLOT, - &&TARGET_STORE_ATTR_WITH_HINT, &&TARGET_LOAD_FAST, &&TARGET_STORE_FAST, &&TARGET_DELETE_FAST, + &&TARGET_STORE_ATTR_WITH_HINT, &&TARGET_LOAD_FAST__LOAD_FAST, - &&TARGET_STORE_FAST__LOAD_FAST, &&TARGET_GEN_START, &&TARGET_RAISE_VARARGS, &&TARGET_CALL_FUNCTION, &&TARGET_MAKE_FUNCTION, &&TARGET_BUILD_SLICE, - &&TARGET_LOAD_FAST__LOAD_CONST, + &&TARGET_STORE_FAST__LOAD_FAST, &&TARGET_MAKE_CELL, &&TARGET_LOAD_CLOSURE, &&TARGET_LOAD_DEREF, &&TARGET_STORE_DEREF, &&TARGET_DELETE_DEREF, - &&TARGET_LOAD_CONST__LOAD_FAST, + &&TARGET_LOAD_FAST__LOAD_CONST, &&TARGET_CALL_FUNCTION_KW, &&TARGET_CALL_FUNCTION_EX, - &&TARGET_STORE_FAST__STORE_FAST, + &&TARGET_LOAD_CONST__LOAD_FAST, &&TARGET_EXTENDED_ARG, &&TARGET_LIST_APPEND, &&TARGET_SET_ADD, &&TARGET_MAP_ADD, &&TARGET_LOAD_CLASSDEREF, - &&_unknown_opcode, + &&TARGET_STORE_FAST__STORE_FAST, &&_unknown_opcode, &&_unknown_opcode, &&TARGET_MATCH_CLASS, diff --git a/Python/specialize.c b/Python/specialize.c index 2d09e29b4e15f7..bee14b3a55c920 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -384,7 +384,6 @@ _Py_Quicken(PyCodeObject *code) { if (code->co_quickened) { return 0; } - return 0; Py_ssize_t size = PyBytes_GET_SIZE(code->co_code); int instr_count = (int)(size/sizeof(_Py_CODEUNIT)); if (instr_count > MAX_SIZE_TO_QUICKEN) { @@ -464,6 +463,7 @@ specialize_module_load_attr( PyObject *value = NULL; PyObject *getattr; _Py_IDENTIFIER(__getattr__); + assert(owner->ob_type->tp_inline_values_offset == 0); PyDictObject *dict = (PyDictObject *)m->md_dict; if (dict == NULL) { SPECIALIZATION_FAIL(opcode, SPEC_FAIL_NO_DICT); @@ -604,10 +604,9 @@ specialize_dict_access( // We found an instance with a __dict__. PyDictObject *dict = (PyDictObject *)*dictptr; PyDictKeysObject *keys = dict->ma_keys; - if ((type->tp_flags & Py_TPFLAGS_HEAPTYPE) - && keys == ((PyHeapTypeObject*)type)->ht_cached_keys - ) { - // Keys are shared + if (type->tp_inline_values_offset && dict == NULL) { + // Virtual dictionary + assert(type->tp_inline_values_offset > 0); assert(PyUnicode_CheckExact(name)); Py_ssize_t index = _PyDictKeys_StringLookup(keys, name); assert (index != DKIX_ERROR); @@ -615,12 +614,6 @@ specialize_dict_access( SPECIALIZATION_FAIL(base_op, SPEC_FAIL_OUT_OF_RANGE); return 0; } - uint32_t keys_version = _PyDictKeys_GetVersionForCurrentState(keys); - if (keys_version == 0) { - SPECIALIZATION_FAIL(base_op, SPEC_FAIL_OUT_OF_VERSIONS); - return 0; - } - cache1->dk_version_or_hint = keys_version; cache1->tp_version = type->tp_version_tag; cache0->index = (uint16_t)index; *instr = _Py_MAKECODEUNIT(split_op, _Py_OPARG(*instr)); @@ -877,6 +870,27 @@ load_method_fail_kind(DesciptorClassification kind) } #endif +static int +specialize_class_load_method(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, + _PyAttrCache *cache1, _PyObjectCache *cache2) +{ + + PyObject *descr = NULL; + DesciptorClassification kind = 0; + kind = analyze_descriptor((PyTypeObject *)owner, name, &descr, 0); + switch (kind) { + case METHOD: + case NON_DESCRIPTOR: + cache1->tp_version = ((PyTypeObject *)owner)->tp_version_tag; + cache2->obj = descr; + *instr = _Py_MAKECODEUNIT(LOAD_METHOD_CLASS, _Py_OPARG(*instr)); + return 0; + default: + SPECIALIZATION_FAIL(LOAD_METHOD, load_method_fail_kind(kind)); + return -1; + } +} + // Please collect stats carefully before and after modifying. A subtle change // can cause a significant drop in cache hits. A possible test is // python.exe -m test_typing test_re test_dis test_zlib. @@ -888,7 +902,6 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, _PyObjectCache *cache2 = &cache[-2].obj; PyTypeObject *owner_cls = Py_TYPE(owner); - PyDictObject *owner_dict = NULL; if (PyModule_CheckExact(owner)) { int err = specialize_module_load_attr(owner, instr, name, cache0, cache1, LOAD_METHOD, LOAD_METHOD_MODULE); @@ -902,9 +915,12 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, return -1; } } - if (Py_TYPE(owner_cls)->tp_dictoffset < 0) { - SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_OUT_OF_RANGE); - goto fail; + if (PyType_Check(owner)) { + int err = specialize_class_load_method(owner, instr, name, cache1, cache2); + if (err) { + goto fail; + } + goto success; } // Technically this is fine for bound method calls, but it's uncommon and // slightly slower at runtime to get dict. @@ -912,66 +928,45 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_OUT_OF_RANGE); goto fail; } - PyObject **owner_dictptr = _PyObject_DictPointer(owner); - int owner_has_dict = (owner_dictptr != NULL && *owner_dictptr != NULL); - owner_dict = owner_has_dict ? (PyDictObject *)*owner_dictptr : NULL; - // Make sure dict doesn't get GC-ed halfway. - Py_XINCREF(owner_dict); - // Check for classmethods. - int owner_is_class = PyType_Check(owner); - owner_cls = owner_is_class ? (PyTypeObject *)owner : owner_cls; - - if ((owner_cls->tp_flags & Py_TPFLAGS_VALID_VERSION_TAG) == 0 || - owner_cls->tp_version_tag == 0) { - SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_OUT_OF_VERSIONS); - goto fail; - } PyObject *descr = NULL; DesciptorClassification kind = 0; kind = analyze_descriptor(owner_cls, name, &descr, 0); - // Store the version right away, in case it's modified halfway through. - cache1->tp_version = owner_cls->tp_version_tag; - assert(descr != NULL || kind == ABSENT || kind == GETSET_OVERRIDDEN); if (kind != METHOD) { SPECIALIZATION_FAIL(LOAD_METHOD, load_method_fail_kind(kind)); goto fail; } - // If o.__dict__ changes, the method might be found in o.__dict__ - // instead of old type lookup. So record o.__dict__'s keys. - uint32_t keys_version = UINT32_MAX; - if (owner_has_dict) { - // _PyDictKeys_GetVersionForCurrentState isn't accurate for - // custom dict subclasses at the moment. - if (!PyDict_CheckExact(owner_dict)) { - SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_DICT_SUBCLASS); + if (owner_cls->tp_inline_values_offset) { + PyObject **owner_dictptr = _PyObject_DictPointer(owner); + assert(owner_dictptr); + if (*owner_dictptr) { + SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_IS_ATTR); goto fail; } - assert(PyUnicode_CheckExact(name)); - Py_hash_t hash = PyObject_Hash(name); - if (hash == -1) { - return -1; - } - PyObject *value = NULL; - if (!owner_is_class) { - // Instance methods shouldn't be in o.__dict__. That makes - // it an attribute. - Py_ssize_t ix = _Py_dict_lookup(owner_dict, name, hash, &value); - assert(ix != DKIX_ERROR); - if (ix != DKIX_EMPTY) { - SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_IS_ATTR); - goto fail; - } + PyDictKeysObject *keys = ((PyHeapTypeObject *)owner_cls)->ht_cached_keys; + Py_ssize_t index = _PyDictKeys_StringLookup(keys, name); + if (index != DKIX_EMPTY) { + SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_IS_ATTR); + goto fail; } - keys_version = _PyDictKeys_GetVersionForCurrentState(owner_dict->ma_keys); + uint32_t keys_version = _PyDictKeys_GetVersionForCurrentState(keys); if (keys_version == 0) { - SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_VERSIONS); + SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_OUT_OF_VERSIONS); goto fail; } - // Fall through. - } // Else owner is maybe a builtin with no dict, or __slots__. Doesn't matter. - + cache1->dk_version_or_hint = keys_version; + *instr = _Py_MAKECODEUNIT(LOAD_METHOD_CACHED, _Py_OPARG(*instr)); + } + else { + if (owner_cls->tp_dictoffset == 0) { + *instr = _Py_MAKECODEUNIT(LOAD_METHOD_NO_DICT, _Py_OPARG(*instr)); + } + else { + SPECIALIZATION_FAIL(LOAD_METHOD, SPEC_FAIL_IS_ATTR); + goto fail; + } + } /* `descr` is borrowed. This is safe for methods (even inherited ones from * super classes!) as long as tp_version_tag is validated for two main reasons: * @@ -986,19 +981,15 @@ _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, * PyType_Modified usages in typeobject.c). The MCACHE has been * working since Python 2.6 and it's battle-tested. */ + cache1->tp_version = owner_cls->tp_version_tag; cache2->obj = descr; - cache1->dk_version_or_hint = keys_version; - *instr = _Py_MAKECODEUNIT(owner_is_class ? LOAD_METHOD_CLASS : - LOAD_METHOD_CACHED, _Py_OPARG(*instr)); // Fall through. success: - Py_XDECREF(owner_dict); STAT_INC(LOAD_METHOD, specialization_success); assert(!PyErr_Occurred()); cache0->counter = saturating_start(); return 0; fail: - Py_XDECREF(owner_dict); STAT_INC(LOAD_METHOD, specialization_failure); assert(!PyErr_Occurred()); cache_backoff(cache0); From 1e6cd1fd7126254e4e63d0be3e2779210f02befc Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 30 Sep 2021 18:20:26 +0100 Subject: [PATCH 06/22] Turn on stats --- Include/internal/pycore_code.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 0b127ed28993b7..ea938433fb7b4c 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -309,9 +309,9 @@ int _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *na int _Py_Specialize_BinarySubscr(PyObject *sub, PyObject *container, _Py_CODEUNIT *instr); int _Py_Specialize_BinaryAdd(PyObject *sub, PyObject *container, _Py_CODEUNIT *instr); -#define PRINT_SPECIALIZATION_STATS 0 -#define PRINT_SPECIALIZATION_STATS_DETAILED 0 -#define PRINT_SPECIALIZATION_STATS_TO_FILE 0 +#define PRINT_SPECIALIZATION_STATS 1 +#define PRINT_SPECIALIZATION_STATS_DETAILED 1 +#define PRINT_SPECIALIZATION_STATS_TO_FILE 1 #ifdef Py_DEBUG #define COLLECT_SPECIALIZATION_STATS 1 From a8fbb34584079fd20f7ca2cf168e7b2a9a58b757 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 1 Oct 2021 10:12:31 +0100 Subject: [PATCH 07/22] Fix specialization of LOAD/STORE_ATTR. --- Python/specialize.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Python/specialize.c b/Python/specialize.c index bee14b3a55c920..28f7571d90e1fd 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -597,15 +597,10 @@ specialize_dict_access( } if (type->tp_dictoffset > 0) { PyObject **dictptr = (PyObject **) ((char *)owner + type->tp_dictoffset); - if (*dictptr == NULL || !PyDict_CheckExact(*dictptr)) { - SPECIALIZATION_FAIL(base_op, SPEC_FAIL_NO_DICT); - return 0; - } - // We found an instance with a __dict__. PyDictObject *dict = (PyDictObject *)*dictptr; - PyDictKeysObject *keys = dict->ma_keys; if (type->tp_inline_values_offset && dict == NULL) { // Virtual dictionary + PyDictKeysObject *keys = ((PyHeapTypeObject *)type)->ht_cached_keys; assert(type->tp_inline_values_offset > 0); assert(PyUnicode_CheckExact(name)); Py_ssize_t index = _PyDictKeys_StringLookup(keys, name); @@ -620,6 +615,11 @@ specialize_dict_access( return 0; } else { + if (dict == NULL || !PyDict_CheckExact(dict)) { + SPECIALIZATION_FAIL(base_op, SPEC_FAIL_NO_DICT); + return 0; + } + // We found an instance with a __dict__. PyObject *value = NULL; Py_ssize_t hint = _PyDict_GetItemHint(dict, name, -1, &value); From 37d8cc6091f886af70ddce5bbb09a2528204115f Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 1 Oct 2021 10:57:42 +0100 Subject: [PATCH 08/22] Turn off stats. --- Include/internal/pycore_code.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index ea938433fb7b4c..0b127ed28993b7 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -309,9 +309,9 @@ int _Py_Specialize_LoadMethod(PyObject *owner, _Py_CODEUNIT *instr, PyObject *na int _Py_Specialize_BinarySubscr(PyObject *sub, PyObject *container, _Py_CODEUNIT *instr); int _Py_Specialize_BinaryAdd(PyObject *sub, PyObject *container, _Py_CODEUNIT *instr); -#define PRINT_SPECIALIZATION_STATS 1 -#define PRINT_SPECIALIZATION_STATS_DETAILED 1 -#define PRINT_SPECIALIZATION_STATS_TO_FILE 1 +#define PRINT_SPECIALIZATION_STATS 0 +#define PRINT_SPECIALIZATION_STATS_DETAILED 0 +#define PRINT_SPECIALIZATION_STATS_TO_FILE 0 #ifdef Py_DEBUG #define COLLECT_SPECIALIZATION_STATS 1 From 0e022f9ee33c55eeb1a8ada87f5b35d32c9b052d Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 4 Oct 2021 15:22:16 +0100 Subject: [PATCH 09/22] Don't update shared keys version for deletion of value. --- Objects/dictobject.c | 2 +- Objects/typeobject.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 366f6b68395f81..b83d639f7c4bb2 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -1579,7 +1579,6 @@ delitem_common(PyDictObject *mp, Py_hash_t hash, Py_ssize_t ix, assert(hashpos >= 0); mp->ma_used--; - mp->ma_keys->dk_version = 0; mp->ma_version_tag = DICT_NEXT_VERSION(); ep = &DK_ENTRIES(mp->ma_keys)[ix]; if (mp->ma_values) { @@ -1600,6 +1599,7 @@ delitem_common(PyDictObject *mp, Py_hash_t hash, Py_ssize_t ix, } } else { + mp->ma_keys->dk_version = 0; dictkeys_set_index(mp->ma_keys, hashpos, DKIX_DUMMY); old_key = ep->me_key; ep->me_key = NULL; diff --git a/Objects/typeobject.c b/Objects/typeobject.c index b7e3dc846d5d0f..39f886b674b4d2 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3204,7 +3204,8 @@ type_new_impl(type_new_ctx *ctx) // Put the proper slots in place fixup_slot_dispatchers(type); - if (type->tp_dictoffset > 0) { + if (type->tp_inline_values_offset) { + assert(type->tp_dictoffset > 0); PyHeapTypeObject *et = (PyHeapTypeObject*)type; et->ht_cached_keys = _PyDict_NewKeysForClass(); } @@ -3574,7 +3575,8 @@ PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) if (PyType_Ready(type) < 0) goto fail; - if (type->tp_dictoffset) { + if (type->tp_inline_values_offset) { + assert(type->tp_dictoffset > 0); res->ht_cached_keys = _PyDict_NewKeysForClass(); } From ddd2e2cc7af5b4850c0534870a02028fc19f8099 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 6 Oct 2021 12:13:38 +0100 Subject: [PATCH 10/22] Merge main into inline-attributes-with-opt --- .github/workflows/build.yml | 12 +- Doc/c-api/call.rst | 2 +- Doc/c-api/init.rst | 6 +- Doc/c-api/init_config.rst | 4 +- Doc/distributing/index.rst | 10 +- Doc/distutils/apiref.rst | 8 +- Doc/faq/design.rst | 2 +- Doc/faq/gui.rst | 2 +- Doc/faq/installed.rst | 2 +- Doc/includes/sqlite3/text_factory.py | 4 +- Doc/install/index.rst | 8 +- Doc/installing/index.rst | 12 +- Doc/library/argparse.rst | 2 +- Doc/library/ast.rst | 4 +- Doc/library/asyncio-dev.rst | 2 +- Doc/library/asyncio-platforms.rst | 2 +- Doc/library/base64.rst | 2 +- Doc/library/cgi.rst | 2 +- Doc/library/codecs.rst | 2 +- Doc/library/ctypes.rst | 6 +- Doc/library/curses.rst | 2 +- Doc/library/dis.rst | 2 +- Doc/library/doctest.rst | 21 +- Doc/library/enum.rst | 4 +- Doc/library/fileinput.rst | 2 +- Doc/library/functions.rst | 13 +- Doc/library/hashlib.rst | 4 +- Doc/library/importlib.metadata.rst | 2 +- Doc/library/intro.rst | 2 +- Doc/library/ipaddress.rst | 6 +- Doc/library/logging.config.rst | 2 +- Doc/library/logging.rst | 2 +- Doc/library/mmap.rst | 2 +- Doc/library/multiprocessing.rst | 16 +- Doc/library/multiprocessing.shared_memory.rst | 27 + Doc/library/operator.rst | 11 + Doc/library/os.rst | 2 +- Doc/library/platform.rst | 6 +- Doc/library/plistlib.rst | 2 +- Doc/library/profile.rst | 2 +- Doc/library/reprlib.rst | 8 + Doc/library/select.rst | 4 +- Doc/library/signal.rst | 35 +- Doc/library/site.rst | 10 +- Doc/library/socket.rst | 6 +- Doc/library/sqlite3.rst | 6 +- Doc/library/ssl.rst | 2 +- Doc/library/stat.rst | 6 +- Doc/library/sysconfig.rst | 4 +- Doc/library/test.rst | 8 +- Doc/library/time.rst | 35 +- Doc/library/timeit.rst | 2 +- Doc/library/tkinter.ttk.rst | 2 +- Doc/library/types.rst | 4 +- Doc/library/urllib.request.rst | 16 +- Doc/library/webbrowser.rst | 2 +- Doc/license.rst | 2 +- Doc/reference/compound_stmts.rst | 10 +- Doc/reference/datamodel.rst | 2 +- Doc/reference/import.rst | 2 +- Doc/tools/rstlint.py | 2 +- Doc/tutorial/appetite.rst | 2 +- Doc/tutorial/modules.rst | 3 +- Doc/using/cmdline.rst | 10 +- Doc/using/configure.rst | 2 +- Doc/using/mac.rst | 24 +- Doc/using/unix.rst | 1 + Doc/whatsnew/2.0.rst | 2 +- Doc/whatsnew/2.7.rst | 8 +- Doc/whatsnew/3.1.rst | 8 +- Doc/whatsnew/3.10.rst | 14 +- Doc/whatsnew/3.11.rst | 185 +- Doc/whatsnew/3.9.rst | 2 +- Grammar/python.gram | 2 +- Include/cpython/initconfig.h | 1 + Include/cpython/pytime.h | 89 +- Include/cpython/unicodeobject.h | 2 +- Include/internal/pycore_fileutils.h | 15 + Include/internal/pycore_import.h | 7 + Include/internal/pycore_object.h | 2 +- Include/internal/pycore_pathconfig.h | 1 + Include/internal/pycore_pyerrors.h | 6 + Include/internal/pycore_pylifecycle.h | 1 + Include/internal/pycore_pystate.h | 11 + Include/opcode.h | 1 + Include/patchlevel.h | 4 +- Include/pythread.h | 8 +- Lib/__phello__.foo.py | 1 - Lib/__phello__/__init__.py | 7 + Lib/__phello__/ham/__init__.py | 0 Lib/__phello__/ham/eggs.py | 0 Lib/__phello__/spam.py | 7 + Lib/_osx_support.py | 2 +- Lib/contextlib.py | 16 +- Lib/difflib.py | 40 - Lib/distutils/command/check.py | 2 +- Lib/distutils/msvc9compiler.py | 2 +- Lib/distutils/unixccompiler.py | 3 +- Lib/ensurepip/__init__.py | 8 +- .../_bundled/pip-21.2.3-py3-none-any.whl | Bin 1563443 -> 0 bytes .../_bundled/pip-21.2.4-py3-none-any.whl | Bin 0 -> 1555100 bytes ...whl => setuptools-58.1.0-py3-none-any.whl} | Bin 819017 -> 816725 bytes Lib/graphlib.py | 2 +- Lib/idlelib/idle_test/test_config_key.py | 2 +- Lib/idlelib/idle_test/test_query.py | 2 +- Lib/idlelib/pyshell.py | 7 + Lib/idlelib/run.py | 7 + Lib/importlib/_bootstrap.py | 57 +- Lib/inspect.py | 2 +- Lib/msilib/schema.py | 2 +- Lib/operator.py | 7 + Lib/pkgutil.py | 2 +- Lib/pydoc_data/topics.py | 867 ++- Lib/reprlib.py | 24 +- Lib/shutil.py | 59 +- Lib/tarfile.py | 9 + Lib/test/_test_multiprocessing.py | 182 +- Lib/test/ann_module5.py | 10 + Lib/test/ann_module6.py | 7 + Lib/test/lock_tests.py | 36 + Lib/test/support/__init__.py | 4 +- Lib/test/support/import_helper.py | 67 +- Lib/test/test_builtin.py | 2 +- Lib/test/test_capi.py | 31 + Lib/test/test_contextlib.py | 34 + Lib/test/test_contextlib_async.py | 111 + Lib/test/test_datetime.py | 92 +- Lib/test/test_decimal.py | 2 +- Lib/test/test_embed.py | 19 +- Lib/test/test_exceptions.py | 1 + Lib/test/test_format.py | 30 +- Lib/test/test_frozen.py | 28 + Lib/test/test_importlib/frozen/test_finder.py | 163 +- Lib/test/test_importlib/frozen/test_loader.py | 13 +- .../source/test_source_encoding.py | 2 +- Lib/test/test_json/test_speedups.py | 9 + Lib/test/test_math.py | 18 +- Lib/test/test_operator.py | 12 + Lib/test/test_reprlib.py | 7 + Lib/test/test_shutil.py | 40 + Lib/test/test_syntax.py | 13 +- Lib/test/test_sys.py | 10 + Lib/test/test_tarfile.py | 14 + Lib/test/test_threading.py | 33 + Lib/test/test_time.py | 49 +- Lib/test/test_tokenize.py | 2 +- Lib/test/test_traceback.py | 13 + Lib/test/test_typing.py | 31 +- Lib/test/test_winconsoleio.py | 11 +- Lib/test/test_winreg.py | 2 +- Lib/test/test_xml_etree.py | 13 +- Lib/test/test_zipfile.py | 21 +- Lib/threading.py | 70 +- Lib/traceback.py | 27 +- Lib/typing.py | 29 +- Lib/unittest/async_case.py | 19 +- Lib/unittest/case.py | 10 +- Lib/unittest/test/test_async_case.py | 206 +- Lib/urllib/request.py | 15 +- Lib/zipfile.py | 4 +- Makefile.pre.in | 111 +- Misc/NEWS.d/3.10.0a4.rst | 2 +- Misc/NEWS.d/3.11.0a1.rst | 5098 +++++++++++++++++ Misc/NEWS.d/3.5.0a1.rst | 2 +- Misc/NEWS.d/3.6.4rc1.rst | 2 +- Misc/NEWS.d/3.7.0a3.rst | 2 +- Misc/NEWS.d/3.7.0a4.rst | 2 +- Misc/NEWS.d/3.8.0a1.rst | 2 +- Misc/NEWS.d/3.8.0b1.rst | 2 +- Misc/NEWS.d/3.9.0a1.rst | 2 +- Misc/NEWS.d/3.9.0b1.rst | 2 +- .../2021-05-24-03-31-17.bpo-41282.L8nP44.rst | 3 - .../2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst | 2 - .../2021-06-19-11-50-03.bpo-43298.9ircMb.rst | 1 - .../2021-06-30-02-32-46.bpo-44535.M9iN4-.rst | 1 - .../2021-07-19-01-09-56.bpo-44340.JNeOf4.rst | 2 - .../2021-08-26-13-10-46.bpo-45019.e0mo49.rst | 3 - .../2021-09-09-16-45-26.bpo-45067.mFmY92.rst | 5 - .../2021-09-11-06-05-23.bpo-45163.q7xT93.rst | 1 - .../2021-09-14-00-47-57.bpo-45188.MNbo_T.rst | 3 - .../2021-09-14-10-07-23.bpo-45020._VGGPv.rst | 4 - .../2021-09-16-18-00-43.bpo-45220.TgbkvW.rst | 3 - .../2020-12-23-01-28-50.bpo-42035.S9eUm0.rst | 1 - .../2021-05-04-17-43-39.bpo-44029.ayX4PR.rst | 9 - .../2021-05-05-19-04-50.bpo-43795.9Ojj73.rst | 2 - .../2021-05-10-14-34-22.bpo-44094.HayXZO.rst | 4 - .../2021-05-12-12-24-45.bpo-44113.DcgOqE.rst | 14 - .../2021-05-19-15-09-47.bpo-43795.WAHRxt.rst | 1 - .../2021-05-31-11-31-13.bpo-44263.8mIOfV.rst | 4 - .../2021-06-03-00-59-48.bpo-39573.-elHTJ.rst | 3 - .../2021-06-10-15-22-31.bpo-44378.jGYakF.rst | 3 - .../2021-06-15-16-28-18.bpo-43795.fy0AXK.rst | 3 - .../2021-06-22-17-00-06.bpo-40939.CGB0I5.rst | 1 - .../2021-06-23-10-31-45.bpo-39947.je_HMo.rst | 20 - .../2021-06-23-12-12-04.bpo-44441.3p14JB.rst | 4 - .../2021-06-28-23-44-47.bpo-44530.qij7YC.rst | 4 - .../2021-07-20-16-21-06.bpo-42747.rRxjUY.rst | 4 - .../2021-07-27-17-29-12.bpo-44751.4qmbDG.rst | 1 - .../2021-07-29-16-04-28.bpo-41103.hiKKcF.rst | 2 - .../2021-08-02-20-49-36.bpo-42035.HTBcZt.rst | 2 - .../2021-08-31-15-21-36.bpo-45061.ZH0HVe.rst | 3 - .../2021-09-03-15-53-43.bpo-45094.tinXwL.rst | 2 - .../2021-09-16-18-05-20.bpo-45116.WxXewl.rst | 3 - .../2018-05-11-12-44-03.bpo-33346.ZgBkvB.rst | 3 - .../2019-12-21-14-18-32.bpo-39091.dOexgQ.rst | 1 - .../2020-06-02-13-21-14.bpo-11105.wceryW.rst | 3 - .../2021-01-13-19-34-41.bpo-28146.AZBBkH.rst | 1 - .../2021-03-22-17-50-30.bpo-17792._zssjS.rst | 1 - .../2021-04-02-15-02-16.bpo-43693.l3Ureu.rst | 4 - .../2021-04-17-16-08-00.bpo-43879.zkyJgh.rst | 1 - .../2021-04-18-18-07-33.bpo-43833.oChkCi.rst | 4 - .../2021-04-23-03-46-45.bpo-43918.nNDY3S.rst | 1 - .../2021-04-30-15-48-36.bpo-40222.j3VxeX.rst | 7 - .../2021-05-04-01-01-04.bpo-43822.9VeCg0.rst | 2 - .../2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst | 2 - .../2021-05-08-19-54-57.bpo-28307.7ysaVW.rst | 3 - .../2021-05-10-18-49-13.bpo-26110.EQzqqA.rst | 3 - .../2021-05-11-21-52-44.bpo-44110.VqbAsB.rst | 1 - .../2021-05-12-14-26-16.bpo-44114.p-WfAE.rst | 1 - .../2021-05-14-20-03-32.bpo-44032.OzT1ob.rst | 2 - .../2021-05-15-17-30-57.bpo-44143.7UTS6H.rst | 2 - .../2021-05-17-20-44-45.bpo-44156.8KSp9l.rst | 1 - .../2021-05-18-11-27-02.bpo-44168.mgB-rt.rst | 2 - .../2021-05-19-20-33-36.bpo-44180.mQVaAs.rst | 3 - .../2021-05-20-12-43-04.bpo-44187.3lk0L1.rst | 3 - .../2021-05-21-01-42-45.bpo-44184.9qOptC.rst | 3 - .../2021-05-21-20-53-49.bpo-43693.-NN3J_.rst | 3 - .../2021-05-21-21-16-03.bpo-44201.bGaSjt.rst | 3 - .../2021-05-25-18-20-10.bpo-44232.DMcCCf.rst | 4 - .../2021-05-26-19-10-47.bpo-43693.1KSG9u.rst | 5 - .../2021-05-27-17-34-29.bpo-43667.ND9jP3.rst | 2 - .../2021-05-30-16-37-47.bpo-43413.vYFPPC.rst | 4 - .../2021-06-03-22-51-50.bpo-44305.66dVDG.rst | 2 - .../2021-06-05-02-34-57.bpo-44304._MAoPc.rst | 2 - .../2021-06-06-00-29-14.bpo-44317.xPPhcZ.rst | 1 - .../2021-06-07-15-13-44.bpo-43693.c_zDeY.rst | 4 - .../2021-06-08-01-13-47.bpo-44335.GQTTkl.rst | 2 - .../2021-06-08-10-22-46.bpo-44337.RTjmIt.rst | 11 - .../2021-06-08-22-49-06.bpo-44349.xgEgeA.rst | 1 - .../2021-06-09-22-56-59.bpo-44368.vgT0Cx.rst | 1 - .../2021-06-10-10-06-18.bpo-44338.c4Myr4.rst | 7 - .../2021-06-10-16-10-39.bpo-44313.34RjI8.rst | 4 - .../2021-06-11-17-37-15.bpo-44376.zhM1UW.rst | 1 - .../2021-06-11-18-17-42.bpo-44396.Z9EKim.rst | 2 - .../2021-06-13-23-12-18.bpo-44409.eW4LS-.rst | 2 - .../2021-06-18-22-08-25.bpo-44456.L0Rhko.rst | 2 - .../2021-06-19-12-41-13.bpo-44297.F53vHj.rst | 3 - .../2021-06-20-10-53-21.bpo-12022.SW240M.rst | 4 - .../2021-06-21-11-19-54.bpo-44472.Vvm1yn.rst | 1 - .../2021-06-22-10-55-23.bpo-44486.wct-9X.rst | 2 - .../2021-06-22-19-08-19.bpo-44483.eq2f7T.rst | 2 - .../2021-06-29-11-49-29.bpo-44523.67-ZIP.rst | 3 - .../2021-07-01-11-59-34.bpo-44490.xY80VR.rst | 2 - .../2021-07-02-22-54-41.bpo-44553.l9YqGg.rst | 2 - .../2021-07-03-00-20-39.bpo-43908.YHuV_s.rst | 3 - .../2021-07-04-17-41-47.bpo-41486.DiM24a.rst | 3 - .../2021-07-04-23-38-51.bpo-44562.QdeRQo.rst | 2 - .../2021-07-06-15-27-11.bpo-43950.LhL2-q.rst | 6 - .../2021-07-06-22-22-15.bpo-44490.BJxPbZ.rst | 3 - .../2021-07-07-16-05-35.bpo-43895.JFjR0-.rst | 4 - .../2021-07-08-12-18-56.bpo-44584.qKnSqV.rst | 3 - .../2021-07-09-12-08-17.bpo-44590.a2ntVX.rst | 5 - .../2021-07-12-04-06-57.bpo-41972.nDX5k_.rst | 1 - .../2021-07-13-17-47-32.bpo-42073.9wopiC.rst | 2 - .../2021-07-13-20-22-12.bpo-44606.S3Bv2w.rst | 1 - .../2021-07-13-23-19-41.bpo-44589.59OH8T.rst | 2 - .../2021-07-14-10-31-10.bpo-26280.cgpM4B.rst | 9 - .../2021-07-14-13-54-07.bpo-44635.7ZMAdB.rst | 1 - .../2021-07-16-01-01-11.bpo-44611.LcfHN-.rst | 2 - .../2021-07-16-09-36-12.bpo-44636.ZWebi8.rst | 1 - .../2021-07-16-09-59-13.bpo-44646.Yb6s05.rst | 2 - .../2021-07-16-20-25-37.bpo-44655.I3wRjL.rst | 2 - .../2021-07-16-21-35-14.bpo-44655.95I7M6.rst | 2 - .../2021-07-17-13-41-58.bpo-44662.q22kWR.rst | 3 - .../2021-07-17-14-20-59.bpo-44661.BQbXiH.rst | 2 - .../2021-07-17-21-04-04.bpo-44633.5-zKeI.rst | 2 - .../2021-07-19-19-53-46.bpo-44676.WgIMvh.rst | 2 - .../2021-07-19-20-49-06.bpo-44653.WcqGyI.rst | 1 - .../2021-07-21-15-26-56.bpo-44698.DA4_0o.rst | 1 - .../2021-07-23-01-52-13.bpo-44717.-vVmAh.rst | 1 - .../2021-07-23-15-17-01.bpo-44725.qcuKaa.rst | 1 - .../2021-07-26-15-27-03.bpo-44732.IxObt3.rst | 1 - .../2021-07-27-11-14-22.bpo-34013.SjLFe-.rst | 3 - .../2021-07-31-12-12-57.bpo-44792.mOReTW.rst | 1 - .../2021-08-04-11-37-38.bpo-44821.67YHGI.rst | 2 - .../2021-08-05-17-42-03.bpo-44838.r_Lkj_.rst | 2 - .../2021-08-05-17-49-55.bpo-44826.zQsyK5.rst | 9 - .../2021-08-07-01-26-12.bpo-44856.9rk3li.rst | 1 - .../2021-08-07-21-39-19.bpo-25782.B22lMx.rst | 1 - .../2021-08-09-14-29-52.bpo-33930.--5LQ-.rst | 2 - .../2021-08-09-16-16-03.bpo-44872.OKRlhK.rst | 1 - .../2021-08-09-19-05-20.bpo-44874.oOcfU4.rst | 1 - .../2021-08-11-12-03-52.bpo-44878.nEhjLi.rst | 2 - .../2021-08-11-14-12-41.bpo-44878.pAbBfc.rst | 2 - .../2021-08-11-15-39-57.bpo-44885.i4noUO.rst | 2 - .../2021-08-11-16-46-27.bpo-44890.PwNg8N.rst | 1 - .../2021-08-11-20-45-02.bpo-44889.2T3nTn.rst | 8 - .../2021-08-12-14-00-57.bpo-44900.w2gpwy.rst | 7 - .../2021-08-14-20-13-21.bpo-44895.Ic9m90.rst | 2 - .../2021-08-15-10-39-06.bpo-44698.lITKNc.rst | 2 - .../2021-08-16-11-36-02.bpo-44914.6Lgrx3.rst | 5 - .../2021-08-16-23-16-17.bpo-44929.qpMEky.rst | 2 - .../2021-08-18-11-14-38.bpo-44945.CO3s77.rst | 7 - .../2021-08-18-19-09-28.bpo-44947.mcvGdS.rst | 2 - .../2021-08-19-14-43-24.bpo-44954.dLn3lg.rst | 2 - .../2021-08-22-12-28-50.bpo-24234.n3oTdx.rst | 3 - .../2021-08-23-10-36-55.bpo-24234.MGVUQi.rst | 3 - .../2021-08-23-19-55-08.bpo-44962.J00ftt.rst | 1 - .../2021-08-25-23-07-10.bpo-44963.5EET8y.rst | 2 - .../2021-08-25-23-17-32.bpo-45000.XjmyLl.rst | 2 - .../2021-08-26-18-44-03.bpo-45018.pu8H9L.rst | 1 - .../2021-08-31-11-09-52.bpo-45012.ueeOcx.rst | 2 - .../2021-08-31-17-44-51.bpo-45020.ZPI_3L.rst | 3 - .../2021-09-01-16-55-43.bpo-45056.7AK2d9.rst | 1 - .../2021-09-01-19-21-48.bpo-34561.uMAVA-.rst | 1 - .../2021-09-01-23-55-49.bpo-45083.cLi9G3.rst | 3 - .../2021-09-02-01-28-01.bpo-37330.QDjM_l.rst | 4 - .../2021-09-03-12-35-17.bpo-41031.yPSJEs.rst | 1 - ...2021-09-03-16-18-10.bpo-1514420.2Lumpj.rst | 1 - .../2021-09-06-21-52-45.bpo-45123.8Eh9iI.rst | 3 - .../2021-09-07-00-21-04.bpo-44348.f8w_Td.rst | 8 - .../2021-09-07-17-10-16.bpo-45121.iG-Hsf.rst | 2 - .../2021-09-08-00-30-09.bpo-44050.mFI15u.rst | 3 + .../2021-09-08-08-29-41.bpo-44959.OSwwPf.rst | 1 - .../2021-09-09-10-32-33.bpo-44219.WiYyjz.rst | 5 - .../2021-09-09-15-05-17.bpo-45155.JRw9TG.rst | 3 - .../2021-09-14-09-23-59.bpo-45167.CPSSoV.rst | 1 - .../2021-09-14-10-02-12.bpo-45190.ZFRgSj.rst | 1 - .../2021-09-20-10-02-12.bpo-24076.ZFgFSj.rst | 1 - .../2021-09-29-12-02-39.bpo-45324.BTQElX.rst | 3 + .../2021-10-01-09-06-54.bpo-45020.Cj5VQN.rst | 5 + .../2018-05-19-15-59-29.bpo-33479.4cLlxo.rst | 4 - .../2020-01-30-05-18-48.bpo-39498.Nu3sFL.rst | 1 - .../2020-03-21-01-19-28.bpo-21760.CqofIc.rst | 2 - .../2020-08-21-22-59-37.bpo-41576.7a6CQR.rst | 1 - .../2020-08-24-13-35-04.bpo-41621.nqaw9G.rst | 1 - .../2020-09-03-13-37-19.bpo-41706._zXWOR.rst | 2 - .../2021-05-03-22-08-08.bpo-44025.gcB7iP.rst | 1 - .../2021-05-07-12-27-09.bpo-43558.UGhA8R.rst | 2 - .../2021-05-08-09-48-05.bpo-44072.fb2x5I.rst | 2 - .../2021-05-17-20-03-47.bpo-41963.eUz9_o.rst | 1 - .../2021-05-23-09-11-28.bpo-44195.1bqkOs.rst | 2 - .../2021-05-26-11-16-33.bpo-42392.oxRx6E.rst | 2 - .../2021-06-06-14-12-00.bpo-44322.K0PHfE.rst | 2 - .../2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst | 2 - .../2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst | 2 - .../2021-06-18-06-44-45.bpo-44453.3PIkj2.rst | 1 - .../2021-06-18-18-04-53.bpo-27752.NEByNk.rst | 1 - .../2021-06-21-15-46-32.bpo-13814.LDcslu.rst | 1 - .../2021-06-23-15-21-36.bpo-39452.o_I-6d.rst | 4 - .../2021-06-24-14-37-16.bpo-43066.Ti7ahX.rst | 2 - .../2021-06-26-17-41-06.bpo-40620.PAYDrB.rst | 2 - .../2021-06-28-12-13-48.bpo-38062.9Ehp9O.rst | 1 - .../2021-07-02-14-02-29.bpo-44544._5_aCz.rst | 4 - .../2021-07-03-18-25-17.bpo-44558.0pTknl.rst | 2 - .../2021-07-12-11-39-20.bpo-44613.DIXNzc.rst | 1 - .../2021-07-13-22-25-13.bpo-44631.qkGwe4.rst | 1 - .../2021-07-15-11-19-03.bpo-42958.gC5IHM.rst | 2 - .../2021-07-18-22-26-02.bpo-44651.SjT9iY.rst | 1 - .../2021-07-18-22-43-14.bpo-44561.T7HpWm.rst | 3 - .../2021-07-20-21-03-18.bpo-30511.eMFkRi.rst | 2 - .../2021-07-22-08-28-03.bpo-35183.p9BWTB.rst | 1 - .../2021-07-25-23-04-15.bpo-44693.JuCbNq.rst | 2 - .../2021-07-26-23-48-31.bpo-44740.zMFGMV.rst | 2 - .../2021-08-09-19-58-45.bpo-36700.WPNW5f.rst | 3 - .../2021-08-11-18-02-06.bpo-33479.rCe4c5.rst | 2 - .../2021-08-13-19-08-03.bpo-44903.aJuvQF.rst | 3 - .../2021-08-13-20-17-59.bpo-16580.MZ_iK9.rst | 2 - .../2021-08-19-15-53-08.bpo-44957.imqrh3.rst | 3 - .../2021-09-08-17-20-19.bpo-45024.dkNPNi.rst | 4 - .../2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst | 2 - .../2021-05-09-09-02-09.bpo-44010.TaLe9x.rst | 5 - .../2021-05-27-13-39-43.bpo-41611.liNQqj.rst | 1 - .../2021-05-27-18-22-46.bpo-41611.jOKpfc.rst | 1 - .../2021-06-08-03-04-51.bpo-40468.tUCGUb.rst | 4 - .../2021-06-10-00-50-02.bpo-33962.ikAUNg.rst | 2 - .../2021-06-11-17-43-39.bpo-40128.7vDN3U.rst | 3 - .../2021-09-15-03-20-06.bpo-45193.G61_GV.rst | 1 - .../2017-09-20-14-43-03.bpo-29298._78CSN.rst | 2 - .../2018-04-24-14-25-07.bpo-33349.Y_0LIr.rst | 1 - .../2019-02-26-09-31-59.bpo-26228.wyrHKc.rst | 1 - .../2019-05-08-15-14-32.bpo-16379.rN5JVe.rst | 2 - .../2019-06-03-23-53-25.bpo-27513.qITN7d.rst | 3 - .../2019-09-25-13-54-41.bpo-30256.wBkzox.rst | 1 - .../2019-11-12-18-59-33.bpo-38741.W7IYkq.rst | 1 - .../2020-01-16-23-41-16.bpo-38840.VzzYZz.rst | 1 - .../2020-01-25-12-58-20.bpo-37022.FUZI25.rst | 1 - .../2020-04-24-20-39-38.bpo-34990.3SmL9M.rst | 2 - .../2020-05-21-01-42-32.bpo-40563.fDn5bP.rst | 1 - .../2020-05-25-23-58-29.bpo-5846.O9BIfm.rst | 14 - .../2020-07-01-17-42-41.bpo-41137.AnqbP-.rst | 1 - .../2020-07-13-23-46-59.bpo-32695.tTqqXe.rst | 2 - .../2020-07-26-18-17-30.bpo-41402.YRkVkp.rst | 1 - .../2020-07-30-14-37-15.bpo-20684.qV35GU.rst | 2 - .../2020-09-10-07-23-24.bpo-41730.DyKFi9.rst | 1 - .../2020-10-01-21-46-34.bpo-40956._tvsZ7.rst | 1 - .../2020-10-11-20-23-48.bpo-37449.f-t3V6.rst | 1 - .../2020-10-18-09-42-53.bpo-40497.CRz2sG.rst | 4 - .../2020-12-08-01-08-58.bpo-41818.zO8vV7.rst | 1 - .../2021-01-13-00-02-44.bpo-42862.Z6ACLN.rst | 4 - .../2021-01-16-18-36-00.bpo-33809.BiMK6V.rst | 2 - .../2021-01-25-21-24-55.bpo-43024.vAUrIi.rst | 1 - .../2021-01-31-18-24-54.bpo-43086.2_P-SH.rst | 3 - .../2021-02-02-20-11-14.bpo-42971.OpVoFu.rst | 2 - .../2021-02-04-23-16-03.bpo-30077.v6TqAi.rst | 1 - .../2021-02-15-21-17-46.bpo-43232.awc4yZ.rst | 2 - .../2021-02-15-22-14-31.bpo-43234.F-vKAT.rst | 3 - .../2021-02-25-08-32-06.bpo-43318.bZJw6V.rst | 1 - .../2021-03-03-13-32-37.bpo-43392.QQumou.rst | 4 - .../2021-03-24-09-40-02.bpo-43612.vMGZ4y.rst | 5 - .../2021-03-29-00-23-30.bpo-43650.v01tic.rst | 2 - .../2021-03-30-08-39-08.bpo-43666.m72tlH.rst | 6 - .../2021-04-15-12-02-17.bpo-43853.XXCVAp.rst | 7 - .../2021-04-29-00-48-00.bpo-28528.JLAVWj.rst | 2 - .../2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst | 3 - .../2021-05-01-15-43-37.bpo-44002.KLT_wd.rst | 5 - .../2021-05-02-13-54-25.bpo-38352.N9MlhV.rst | 2 - .../2021-05-03-10-07-43.bpo-44018.VDyW8f.rst | 1 - .../2021-05-03-19-59-14.bpo-40465.1tB4Y0.rst | 1 - .../2021-05-05-11-44-49.bpo-36515.uOSa3q.rst | 2 - .../2021-05-06-16-01-55.bpo-44059.GF5r6O.rst | 1 - .../2021-05-07-08-39-23.bpo-44061.MvElG6.rst | 2 - .../2021-05-09-03-26-31.bpo-44081.A-Mrto.rst | 2 - .../2021-05-09-22-52-34.bpo-44089.IoANsN.rst | 2 - .../2021-05-10-17-45-00.bpo-44098._MoxuZ.rst | 5 - .../2021-05-12-16-43-21.bpo-38908.nM2_rO.rst | 5 - .../2021-05-13-19-07-28.bpo-37788.adeFcf.rst | 1 - .../2021-05-13-19-44-38.bpo-44077.04b2a4.rst | 3 - .../2021-05-14-16-06-02.bpo-44095.v_pLwY.rst | 2 - .../2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst | 3 - .../2021-05-16-02-24-23.bpo-44142.t-XU8k.rst | 2 - .../2021-05-16-11-57-38.bpo-44150.xAhhik.rst | 1 - .../2021-05-16-17-48-24.bpo-33433.MyzO71.rst | 1 - .../2021-05-17-07-24-24.bpo-44154.GRI5bf.rst | 1 - .../2021-05-17-21-05-06.bpo-4928.Ot2yjO.rst | 1 - .../2021-05-18-00-17-21.bpo-27334.32EJZi.rst | 2 - .../2021-05-21-12-12-35.bpo-43643.GWnmcF.rst | 1 - .../2021-05-21-21-23-43.bpo-44210.5afQ3K.rst | 1 - .../2021-05-25-23-26-38.bpo-43216.xTUyyX.rst | 6 - .../2021-05-26-13-15-51.bpo-44241.TBqej8.rst | 2 - .../2021-05-26-13-34-37.bpo-33693.3okzdo.rst | 1 - .../2021-05-26-14-50-06.bpo-38693.NkMacJ.rst | 1 - .../2021-05-26-22-04-40.bpo-44235.qFBYpp.rst | 1 - .../2021-05-28-09-43-33.bpo-44258.nh5F7R.rst | 1 - .../2021-05-29-01-05-43.bpo-44254.f06xDm.rst | 2 - .../2021-05-30-13-32-09.bpo-44260.ROEbVd.rst | 2 - .../2021-05-31-04-51-02.bpo-43858.r7LOu6.rst | 1 - .../2021-05-31-11-28-03.bpo-44246.nhmt-v.rst | 3 - .../2021-05-31-11-34-56.bpo-44246.yHAkF0.rst | 7 - .../2021-06-07-10-26-14.bpo-44242.MKeMCQ.rst | 2 - .../2021-06-08-17-47-38.bpo-44339.9JwMSc.rst | 3 - .../2021-06-09-08-32-39.bpo-44357.70Futb.rst | 1 - .../2021-06-09-10-08-32.bpo-35800.3hmkWw.rst | 2 - .../2021-06-10-07-26-12.bpo-44351.rvyf2v.rst | 2 - .../2021-06-10-08-35-38.bpo-44356.6oDFhO.rst | 1 - .../2021-06-10-15-06-47.bpo-44342.qqkGlj.rst | 1 - .../2021-06-10-20-07-32.bpo-44362.oVOMfd.rst | 2 - .../2021-06-10-21-53-46.bpo-34266.k3fxnm.rst | 1 - .../2021-06-12-10-08-14.bpo-44395.PcW6Sx.rst | 2 - .../2021-06-12-21-25-35.bpo-27827.TMWh1i.rst | 2 - .../2021-06-12-22-58-20.bpo-44389.WTRnoC.rst | 1 - .../2021-06-13-00-16-56.bpo-37880.5bTrkw.rst | 3 - .../2021-06-14-14-19-11.bpo-38291.ee4cSX.rst | 1 - .../2021-06-14-23-28-17.bpo-44422.BlWOgv.rst | 3 - .../2021-06-15-13-51-25.bpo-42972.UnyYo1.rst | 2 - .../2021-06-16-16-52-14.bpo-44434.SQS4Pg.rst | 4 - .../2021-06-17-15-01-51.bpo-44439.1S7QhT.rst | 3 - .../2021-06-17-22-39-34.bpo-44446.qwdRic.rst | 1 - .../2021-06-19-21-52-27.bpo-44464.U2oa-a.rst | 2 - .../2021-06-20-07-14-46.bpo-44458.myqCQ0.rst | 1 - .../2021-06-20-14-03-18.bpo-41546.lO1jXU.rst | 1 - .../2021-06-20-19-01-11.bpo-44404.McfrYB.rst | 1 - .../2021-06-21-10-46-58.bpo-44471.2QjXv_.rst | 5 - .../2021-06-21-12-43-04.bpo-44466.NSm6mv.rst | 2 - .../2021-06-22-08-43-04.bpo-44482.U9GznK.rst | 2 - .../2021-06-22-16-45-48.bpo-43977.bamAGF.rst | 3 - .../2021-06-23-01-33-01.bpo-44491.tiOlr5.rst | 3 - .../2021-06-23-19-02-00.bpo-44468.-klV5-.rst | 2 - .../2021-06-24-19-16-20.bpo-42892.qvRNhI.rst | 1 - .../2021-06-26-12-27-14.bpo-44516.BVyX_y.rst | 1 - .../2021-06-29-07-27-08.bpo-43625.ZlAxhp.rst | 2 - .../2021-06-29-21-17-17.bpo-44461.acqRnV.rst | 1 - .../2021-06-30-11-34-35.bpo-44539.nP0Xi4.rst | 1 - .../2021-06-30-13-29-49.bpo-34798.t7FCa0.rst | 1 - .../2021-07-02-18-17-56.bpo-44554.aBUmJo.rst | 1 - .../2021-07-04-11-33-34.bpo-41249.sHdwBE.rst | 2 - .../2021-07-04-21-16-53.bpo-44558.cm7Slv.rst | 2 - .../2021-07-05-18-13-25.bpo-44566.o51Bd1.rst | 1 - .../2021-07-08-12-22-54.bpo-44569.KZ02v9.rst | 3 - .../2021-07-09-07-14-37.bpo-41928.Q1jMrr.rst | 4 - .../2021-07-10-19-55-13.bpo-42799.ad4tq8.rst | 4 - .../2021-07-13-09-01-33.bpo-44608.R3IcM1.rst | 2 - .../2021-07-15-16-51-32.bpo-44648.2o49TB.rst | 3 - .../2021-07-16-08-57-27.bpo-44638.EwYKne.rst | 1 - .../2021-07-16-13-40-31.bpo-40897.aveAre.rst | 2 - .../2021-07-19-14-04-42.bpo-44524.Nbf2JC.rst | 2 - .../2021-07-19-18-45-00.bpo-44678.YMEAu0.rst | 1 - .../2021-07-19-22-43-15.bpo-44353.HF81_Q.rst | 2 - .../2021-07-20-00-11-47.bpo-44682.3m2qVV.rst | 2 - .../2021-07-20-18-34-16.bpo-44353.ATuYq4.rst | 2 - .../2021-07-20-19-35-49.bpo-44686.ucCGhu.rst | 1 - .../2021-07-20-21-51-35.bpo-42854.ThuDMI.rst | 3 - .../2021-07-20-22-03-24.bpo-44690.tV7Zjg.rst | 1 - .../2021-07-20-23-28-26.bpo-44688.buFgz3.rst | 2 - .../2021-07-21-10-43-22.bpo-44666.CEThkv.rst | 2 - .../2021-07-21-23-16-30.bpo-44704.iqHLxQ.rst | 1 - .../2021-07-22-21-25-56.bpo-40321.gBlFmw.rst | 2 + .../2021-07-24-02-17-59.bpo-44720.shU5Qm.rst | 1 - .../2021-07-25-08-17-55.bpo-42378.WIhUZK.rst | 4 - .../2021-07-27-12-06-19.bpo-44747.epUzZz.rst | 2 - .../2021-07-27-22-11-29.bpo-44752._bvbrZ.rst | 2 - .../2021-07-28-22-53-18.bpo-44771.BvLdnU.rst | 5 - .../2021-07-30-23-27-30.bpo-44667.tu0Xrv.rst | 4 - .../2021-07-31-08-45-31.bpo-44784.fIMIDS.rst | 2 - .../2021-07-31-20-28-20.bpo-44793.woaQSg.rst | 2 - .../2021-08-01-19-49-09.bpo-27275.QsvE0k.rst | 3 - .../2021-08-02-14-37-32.bpo-44806.wOW_Qn.rst | 2 - .../2021-08-03-20-37-45.bpo-44801.i49Aug.rst | 3 - .../2021-08-04-12-29-00.bpo-44822.zePNXA.rst | 3 - .../2021-08-05-14-59-39.bpo-44839.MURNL9.rst | 4 - .../2021-08-05-18-20-17.bpo-44524.9T1tfe.rst | 2 - .../2021-08-06-09-43-50.bpo-44605.q4YSBZ.rst | 1 - .../2021-08-06-13-00-28.bpo-44849.O78F_f.rst | 4 - .../2021-08-06-19-15-52.bpo-44581.oFDBTB.rst | 1 - .../2021-08-07-17-28-56.bpo-44859.CCopjk.rst | 8 - .../2021-08-07-22-51-32.bpo-44860.PTvRrU.rst | 2 - .../2021-08-09-13-17-10.bpo-38956.owWLNv.rst | 1 - .../2021-08-10-16-57-10.bpo-44524.dk9QX4.rst | 2 - .../2021-08-12-16-22-16.bpo-41322.utscTd.rst | 3 - .../2021-08-14-00-55-16.bpo-44911.uk3hYk.rst | 1 - .../2021-08-17-16-01-44.bpo-44935.roUl0G.rst | 2 - .../2021-08-19-15-03-54.bpo-44955.1mxFQS.rst | 5 - .../2021-08-19-23-49-10.bpo-42255.ofe3ms.rst | 3 - .../2021-08-23-21-39-59.bpo-37596.ojRcwB.rst | 2 - .../2021-08-25-10-28-49.bpo-43613.WkYmI0.rst | 3 - .../2021-08-25-20-18-31.bpo-39218.BlO6jW.rst | 1 - .../2021-08-26-09-54-14.bpo-45010.Cn23bQ.rst | 2 - .../2021-08-26-16-25-48.bpo-45001.tn_dKp.rst | 2 - .../2021-08-27-19-01-23.bpo-45030.tAmBbY.rst | 1 - .../2021-08-27-23-40-51.bpo-43913.Uo1Gt5.rst | 8 - .../2021-08-28-13-00-12.bpo-45021.rReeaj.rst | 1 - .../2021-08-29-14-49-22.bpo-41620.WJ6PFL.rst | 3 - .../2021-08-30-13-55-09.bpo-31299.9QzjZs.rst | 1 - .../2021-09-01-15-27-00.bpo-45075.9xUpvt.rst | 5 - .../2021-09-02-00-18-32.bpo-40360.9nmMtB.rst | 3 - .../2021-09-02-00-47-14.bpo-45085.mMnaDv.rst | 10 - .../2021-09-02-12-42-25.bpo-45081.tOjJ1k.rst | 2 - .../2021-09-05-13-15-08.bpo-25894.zjbi2f.rst | 4 - .../2021-09-05-20-33-25.bpo-45034.62NLD5.rst | 2 - .../2021-09-05-21-37-28.bpo-30856.jj86y0.rst | 6 - .../2021-09-07-09-13-27.bpo-45124.Kw5AUs.rst | 5 - .../2021-09-07-14-27-39.bpo-45129.vXH0gw.rst | 6 - .../2021-09-07-16-33-51.bpo-45132.WI9zQY.rst | 5 - .../2021-09-08-01-19-31.bpo-20499.tSxx8Y.rst | 1 - .../2021-09-08-13-19-29.bpo-38371.y1kEfP.rst | 2 - .../2021-09-10-13-20-53.bpo-45162.2Jh-lq.rst | 6 - .../2021-09-11-10-45-12.bpo-35474.tEY3SD.rst | 3 - .../2021-09-11-14-41-02.bpo-44987.Mt8DiX.rst | 2 - .../2021-09-11-17-46-20.bpo-45173.UptGAn.rst | 7 - .../2021-09-11-18-44-40.bpo-21302.QxHRpR.rst | 2 - .../2021-09-13-14-28-49.bpo-45168.Z1mfW4.rst | 1 - .../2021-09-13-19-32-58.bpo-42135.1ZAHqR.rst | 3 - .../2021-09-16-19-02-14.bpo-45225.xmKV4i.rst | 1 - .../2021-09-17-09-59-33.bpo-45228.WV1dcT.rst | 1 - .../2021-09-17-15-58-53.bpo-45183.Vv_vch.rst | 3 - .../2021-09-17-16-55-37.bpo-45235.sXnmPA.rst | 2 - .../2021-09-18-13-14-57.bpo-36674.a2k5Zb.rst | 2 - .../2021-10-01-23-07-02.bpo-45343.ixmctD.rst | 1 + .../2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst | 2 - .../2021-05-08-11-50-46.bpo-43124.2CTM6M.rst | 2 - .../2021-06-29-02-45-53.bpo-44394.A220N1.rst | 3 - .../2021-06-29-23-40-22.bpo-41180.uTWHv_.rst | 5 - .../2021-07-25-20-04-54.bpo-44600.0WMldg.rst | 1 - .../2021-08-29-12-39-44.bpo-42278.jvmQz_.rst | 2 - .../2019-09-25-18-10-10.bpo-30256.A5i76Q.rst | 2 - .../2020-10-25-19-20-26.bpo-35753.2LT-hO.rst | 2 - .../2021-05-04-18-10-57.bpo-42083.EMS2TK.rst | 2 - .../2021-05-07-15-46-04.bpo-31904.8dk3la.rst | 1 - .../2021-05-14-14-13-44.bpo-44131.YPizoC.rst | 2 - .../2021-06-02-17-41-42.bpo-43921.xP7yZ4.rst | 2 - .../2021-06-03-03-29-34.bpo-43921.nwH1FS.rst | 3 - .../2021-06-09-15-32-05.bpo-44364.zu9Zee.rst | 1 - .../2021-06-10-11-19-43.bpo-44363.-K9jD0.rst | 2 - .../2021-06-18-15-19-35.bpo-44451.aj5pqE.rst | 3 - .../2021-06-21-17-53-41.bpo-44287.YON57s.rst | 4 - .../2021-06-26-18-37-36.bpo-44515.e9fO6f.rst | 2 - .../2021-07-16-14-02-33.bpo-44647.5LzqIy.rst | 4 - .../2021-07-17-11-41-20.bpo-42095.kCB7oj.rst | 2 - .../2021-07-22-16-38-39.bpo-44708.SYNaac.rst | 2 - .../2021-07-24-20-09-15.bpo-44734.KKsNOV.rst | 1 - .../2021-08-06-00-07-15.bpo-40928.aIwb6G.rst | 2 - .../2021-08-06-18-36-04.bpo-44852.sUL8YX.rst | 2 - .../2021-08-13-12-11-06.bpo-44891.T9_mBT.rst | 2 - .../2021-08-18-18-30-12.bpo-44949.VE5ENv.rst | 2 - .../2021-08-26-14-20-44.bpo-45011.mQZdXU.rst | 3 - .../2021-08-27-22-37-19.bpo-25130.ig4oJe.rst | 1 - .../2021-08-30-11-54-14.bpo-45042.QMz3X8.rst | 1 - .../2021-09-01-17-17-44.bpo-44895.kV7H77.rst | 5 - .../2021-09-06-19-00-29.bpo-45052.yrOK3J.rst | 7 - .../2021-09-08-13-01-37.bpo-44860.qXd0kx.rst | 2 - .../2021-09-13-00-28-17.bpo-45156.8oomV3.rst | 2 - .../2021-09-14-13-16-18.bpo-45195.EyQR1G.rst | 3 - .../2021-09-14-14-54-04.bpo-45185.qFx5I6.rst | 1 - .../2021-09-16-17-22-35.bpo-45128.Jz6fl2.rst | 2 - .../2020-02-25-18-22-09.bpo-20291.AyrDiZ.rst | 1 - .../2021-05-08-13-57-00.bpo-44074.F09kCK.rst | 1 - .../2021-07-01-22-21-25.bpo-43425.t65len.rst | 3 - .../2021-08-22-11-45-31.bpo-44978.QupKV3.rst | 1 - .../2021-08-26-11-57-31.bpo-44967.UT1RMV.rst | 1 - .../2021-09-14-11-44-26.bpo-44786.DU0LC0.rst | 1 - .../2020-04-13-15-20-28.bpo-40263.1KKEbu.rst | 3 - .../2021-01-01-21-21-03.bpo-42686.G_f-TC.rst | 1 - .../2021-06-06-16-36-13.bpo-41299.Rg-vb_.rst | 1 - .../2021-07-07-21-07-18.bpo-44582.4Mm6Hh.rst | 2 - .../2021-07-13-15-32-49.bpo-44572.gXvhDc.rst | 1 - .../2021-08-06-10-11-07.bpo-44848.ib3Jcz.rst | 1 - .../2021-08-27-23-50-02.bpo-45007.NIBlVG.rst | 1 - .../2021-09-03-18-05-21.bpo-45022.bgpD_r.rst | 1 - .../2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst | 1 - .../2021-05-24-21-15-41.bpo-43109.npKJ9c.rst | 2 - .../2021-07-12-15-42-02.bpo-41972.yUjE8j.rst | 2 - .../2021-07-20-22-27-01.bpo-44689.mmT_xH.rst | 5 - .../2021-08-06-10-08-41.bpo-44848.0uYXsE.rst | 1 - .../2021-08-27-16-55-10.bpo-34602.ZjHsYJ.rst | 3 - .../2021-08-30-00-04-10.bpo-45007.pixqUB.rst | 1 - Modules/_datetimemodule.c | 2 +- Modules/_decimal/tests/bench.py | 5 +- Modules/_decimal/tests/deccheck.py | 2 +- Modules/_decimal/tests/formathelper.py | 2 +- Modules/_io/bufferedio.c | 8 +- Modules/_math.c | 2 +- Modules/_operator.c | 28 +- Modules/_queuemodule.c | 33 +- Modules/_sqlite/cursor.c | 45 +- Modules/_sqlite/statement.c | 32 +- Modules/_sqlite/statement.h | 2 +- Modules/_ssl.c | 36 +- Modules/_testcapimodule.c | 45 +- Modules/_testmultiphase.c | 22 + Modules/_threadmodule.c | 9 +- Modules/_tracemalloc.c | 2 +- Modules/arraymodule.c | 4 +- Modules/clinic/_queuemodule.c.h | 10 +- Modules/clinic/arraymodule.c.h | 4 +- Modules/faulthandler.c | 2 +- Modules/gcmodule.c | 4 +- Modules/getpath.c | 74 +- Modules/hashlib.h | 2 +- Modules/mathmodule.c | 11 +- Modules/pyexpat.c | 2 +- Modules/selectmodule.c | 31 +- Modules/signalmodule.c | 20 +- Modules/socketmodule.c | 22 +- Modules/termios.c | 2 +- Modules/timemodule.c | 197 +- Modules/zlibmodule.c | 2 +- Objects/boolobject.c | 4 +- Objects/codeobject.c | 16 +- Objects/frameobject.c | 8 +- Objects/genobject.c | 2 +- Objects/object.c | 3 +- Objects/setobject.c | 2 +- Objects/tupleobject.c | 19 +- Objects/unicodeobject.c | 53 +- PC/getpathp.c | 87 +- PCbuild/_freeze_module.vcxproj | 33 +- PCbuild/_freeze_module.vcxproj.filters | 15 + PCbuild/pcbuild.proj | 7 +- PCbuild/regen.targets | 4 +- Parser/asdl_c.py | 2 +- Parser/parser.c | 6 +- Parser/pegen.c | 16 +- Parser/pegen.h | 2 +- Parser/string_parser.c | 4 +- Programs/_freeze_module.c | 6 + Python/Python-tokenize.c | 2 +- Python/bltinmodule.c | 3 +- Python/ceval.c | 477 +- Python/clinic/import.c.h | 70 +- Python/compile.c | 2 +- Python/fileutils.c | 104 +- Python/formatter_unicode.c | 26 +- Python/frozen.c | 42 +- Python/import.c | 339 +- Python/initconfig.c | 10 +- Python/makeopcodetargets.py | 1 + Python/opcode_targets.h | 2 +- Python/pathconfig.c | 31 +- Python/preconfig.c | 10 +- Python/pylifecycle.c | 10 + Python/pytime.c | 533 +- Python/sysmodule.c | 12 +- Python/thread_nt.h | 59 +- Python/thread_pthread.h | 98 +- Python/traceback.c | 4 +- README.rst | 2 +- Tools/peg_generator/pegen/parser.py | 2 +- Tools/scripts/freeze_modules.py | 133 +- Tools/scripts/generate_opcode_h.py | 2 +- Tools/scripts/generate_stdlib_module_names.py | 3 + Tools/scripts/update_file.py | 50 +- Tools/stringbench/stringbench.py | 2 +- aclocal.m4 | 344 ++ configure | 333 +- configure.ac | 15 +- pyconfig.h.in | 12 +- setup.py | 4 +- 707 files changed, 10302 insertions(+), 3192 deletions(-) delete mode 100644 Lib/__phello__.foo.py create mode 100644 Lib/__phello__/__init__.py create mode 100644 Lib/__phello__/ham/__init__.py create mode 100644 Lib/__phello__/ham/eggs.py create mode 100644 Lib/__phello__/spam.py delete mode 100644 Lib/ensurepip/_bundled/pip-21.2.3-py3-none-any.whl create mode 100644 Lib/ensurepip/_bundled/pip-21.2.4-py3-none-any.whl rename Lib/ensurepip/_bundled/{setuptools-57.4.0-py3-none-any.whl => setuptools-58.1.0-py3-none-any.whl} (80%) create mode 100644 Lib/test/ann_module5.py create mode 100644 Lib/test/ann_module6.py create mode 100644 Misc/NEWS.d/3.11.0a1.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-05-24-03-31-17.bpo-41282.L8nP44.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-06-19-11-50-03.bpo-43298.9ircMb.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-07-19-01-09-56.bpo-44340.JNeOf4.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-08-26-13-10-46.bpo-45019.e0mo49.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-09-09-16-45-26.bpo-45067.mFmY92.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-09-11-06-05-23.bpo-45163.q7xT93.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-09-14-00-47-57.bpo-45188.MNbo_T.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-09-14-10-07-23.bpo-45020._VGGPv.rst delete mode 100644 Misc/NEWS.d/next/Build/2021-09-16-18-00-43.bpo-45220.TgbkvW.rst delete mode 100644 Misc/NEWS.d/next/C API/2020-12-23-01-28-50.bpo-42035.S9eUm0.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-05-04-17-43-39.bpo-44029.ayX4PR.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-05-10-14-34-22.bpo-44094.HayXZO.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-05-12-12-24-45.bpo-44113.DcgOqE.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-05-19-15-09-47.bpo-43795.WAHRxt.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-05-31-11-31-13.bpo-44263.8mIOfV.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-03-00-59-48.bpo-39573.-elHTJ.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-10-15-22-31.bpo-44378.jGYakF.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-15-16-28-18.bpo-43795.fy0AXK.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-22-17-00-06.bpo-40939.CGB0I5.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-23-10-31-45.bpo-39947.je_HMo.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-23-12-12-04.bpo-44441.3p14JB.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-06-28-23-44-47.bpo-44530.qij7YC.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-07-20-16-21-06.bpo-42747.rRxjUY.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-07-27-17-29-12.bpo-44751.4qmbDG.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-07-29-16-04-28.bpo-41103.hiKKcF.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-08-02-20-49-36.bpo-42035.HTBcZt.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-08-31-15-21-36.bpo-45061.ZH0HVe.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-09-03-15-53-43.bpo-45094.tinXwL.rst delete mode 100644 Misc/NEWS.d/next/C API/2021-09-16-18-05-20.bpo-45116.WxXewl.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2018-05-11-12-44-03.bpo-33346.ZgBkvB.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2019-12-21-14-18-32.bpo-39091.dOexgQ.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-06-02-13-21-14.bpo-11105.wceryW.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-03-22-17-50-30.bpo-17792._zssjS.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-04-02-15-02-16.bpo-43693.l3Ureu.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-04-17-16-08-00.bpo-43879.zkyJgh.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-04-18-18-07-33.bpo-43833.oChkCi.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-04-23-03-46-45.bpo-43918.nNDY3S.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-04-30-15-48-36.bpo-40222.j3VxeX.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-08-19-54-57.bpo-28307.7ysaVW.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-10-18-49-13.bpo-26110.EQzqqA.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-11-21-52-44.bpo-44110.VqbAsB.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-14-20-03-32.bpo-44032.OzT1ob.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-17-20-44-45.bpo-44156.8KSp9l.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-18-11-27-02.bpo-44168.mgB-rt.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-19-20-33-36.bpo-44180.mQVaAs.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-20-12-43-04.bpo-44187.3lk0L1.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-21-01-42-45.bpo-44184.9qOptC.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-21-20-53-49.bpo-43693.-NN3J_.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-21-21-16-03.bpo-44201.bGaSjt.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-25-18-20-10.bpo-44232.DMcCCf.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-26-19-10-47.bpo-43693.1KSG9u.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-27-17-34-29.bpo-43667.ND9jP3.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-05-30-16-37-47.bpo-43413.vYFPPC.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-03-22-51-50.bpo-44305.66dVDG.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-05-02-34-57.bpo-44304._MAoPc.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-06-00-29-14.bpo-44317.xPPhcZ.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-07-15-13-44.bpo-43693.c_zDeY.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-08-01-13-47.bpo-44335.GQTTkl.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-08-10-22-46.bpo-44337.RTjmIt.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-08-22-49-06.bpo-44349.xgEgeA.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-09-22-56-59.bpo-44368.vgT0Cx.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-10-10-06-18.bpo-44338.c4Myr4.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-10-16-10-39.bpo-44313.34RjI8.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-11-17-37-15.bpo-44376.zhM1UW.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-11-18-17-42.bpo-44396.Z9EKim.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-13-23-12-18.bpo-44409.eW4LS-.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-18-22-08-25.bpo-44456.L0Rhko.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-19-12-41-13.bpo-44297.F53vHj.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-20-10-53-21.bpo-12022.SW240M.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-21-11-19-54.bpo-44472.Vvm1yn.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-22-10-55-23.bpo-44486.wct-9X.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-22-19-08-19.bpo-44483.eq2f7T.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-29-11-49-29.bpo-44523.67-ZIP.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-01-11-59-34.bpo-44490.xY80VR.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-02-22-54-41.bpo-44553.l9YqGg.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-03-00-20-39.bpo-43908.YHuV_s.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-04-17-41-47.bpo-41486.DiM24a.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-04-23-38-51.bpo-44562.QdeRQo.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-06-15-27-11.bpo-43950.LhL2-q.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-06-22-22-15.bpo-44490.BJxPbZ.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-07-16-05-35.bpo-43895.JFjR0-.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-08-12-18-56.bpo-44584.qKnSqV.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-09-12-08-17.bpo-44590.a2ntVX.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-12-04-06-57.bpo-41972.nDX5k_.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-13-17-47-32.bpo-42073.9wopiC.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-13-20-22-12.bpo-44606.S3Bv2w.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-13-23-19-41.bpo-44589.59OH8T.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-14-10-31-10.bpo-26280.cgpM4B.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-14-13-54-07.bpo-44635.7ZMAdB.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-16-01-01-11.bpo-44611.LcfHN-.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-16-09-36-12.bpo-44636.ZWebi8.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-16-09-59-13.bpo-44646.Yb6s05.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-16-20-25-37.bpo-44655.I3wRjL.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-16-21-35-14.bpo-44655.95I7M6.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-17-13-41-58.bpo-44662.q22kWR.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-17-14-20-59.bpo-44661.BQbXiH.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-17-21-04-04.bpo-44633.5-zKeI.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-19-19-53-46.bpo-44676.WgIMvh.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-19-20-49-06.bpo-44653.WcqGyI.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-21-15-26-56.bpo-44698.DA4_0o.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-23-01-52-13.bpo-44717.-vVmAh.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-23-15-17-01.bpo-44725.qcuKaa.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-26-15-27-03.bpo-44732.IxObt3.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-27-11-14-22.bpo-34013.SjLFe-.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-07-31-12-12-57.bpo-44792.mOReTW.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-04-11-37-38.bpo-44821.67YHGI.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-05-17-42-03.bpo-44838.r_Lkj_.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-05-17-49-55.bpo-44826.zQsyK5.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-07-01-26-12.bpo-44856.9rk3li.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-07-21-39-19.bpo-25782.B22lMx.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-09-14-29-52.bpo-33930.--5LQ-.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-09-16-16-03.bpo-44872.OKRlhK.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-09-19-05-20.bpo-44874.oOcfU4.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-11-12-03-52.bpo-44878.nEhjLi.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-11-14-12-41.bpo-44878.pAbBfc.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-11-15-39-57.bpo-44885.i4noUO.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-11-16-46-27.bpo-44890.PwNg8N.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-11-20-45-02.bpo-44889.2T3nTn.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-12-14-00-57.bpo-44900.w2gpwy.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-14-20-13-21.bpo-44895.Ic9m90.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-15-10-39-06.bpo-44698.lITKNc.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-16-11-36-02.bpo-44914.6Lgrx3.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-16-23-16-17.bpo-44929.qpMEky.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-18-11-14-38.bpo-44945.CO3s77.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-18-19-09-28.bpo-44947.mcvGdS.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-19-14-43-24.bpo-44954.dLn3lg.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-22-12-28-50.bpo-24234.n3oTdx.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-23-10-36-55.bpo-24234.MGVUQi.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-23-19-55-08.bpo-44962.J00ftt.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-25-23-07-10.bpo-44963.5EET8y.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-25-23-17-32.bpo-45000.XjmyLl.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-26-18-44-03.bpo-45018.pu8H9L.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-31-11-09-52.bpo-45012.ueeOcx.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-08-31-17-44-51.bpo-45020.ZPI_3L.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-01-16-55-43.bpo-45056.7AK2d9.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-01-19-21-48.bpo-34561.uMAVA-.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-01-23-55-49.bpo-45083.cLi9G3.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-02-01-28-01.bpo-37330.QDjM_l.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-03-12-35-17.bpo-41031.yPSJEs.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-03-16-18-10.bpo-1514420.2Lumpj.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-06-21-52-45.bpo-45123.8Eh9iI.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-07-00-21-04.bpo-44348.f8w_Td.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-07-17-10-16.bpo-45121.iG-Hsf.rst create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-08-00-30-09.bpo-44050.mFI15u.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-08-08-29-41.bpo-44959.OSwwPf.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-09-10-32-33.bpo-44219.WiYyjz.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-09-15-05-17.bpo-45155.JRw9TG.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-14-09-23-59.bpo-45167.CPSSoV.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-14-10-02-12.bpo-45190.ZFRgSj.rst delete mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-20-10-02-12.bpo-24076.ZFgFSj.rst create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-09-29-12-02-39.bpo-45324.BTQElX.rst create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-10-01-09-06-54.bpo-45020.Cj5VQN.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2018-05-19-15-59-29.bpo-33479.4cLlxo.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2020-01-30-05-18-48.bpo-39498.Nu3sFL.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2020-03-21-01-19-28.bpo-21760.CqofIc.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2020-08-21-22-59-37.bpo-41576.7a6CQR.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2020-08-24-13-35-04.bpo-41621.nqaw9G.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2020-09-03-13-37-19.bpo-41706._zXWOR.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-05-23-09-11-28.bpo-44195.1bqkOs.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-05-26-11-16-33.bpo-42392.oxRx6E.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-06-14-12-00.bpo-44322.K0PHfE.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-18-06-44-45.bpo-44453.3PIkj2.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-18-18-04-53.bpo-27752.NEByNk.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-21-15-46-32.bpo-13814.LDcslu.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-23-15-21-36.bpo-39452.o_I-6d.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-24-14-37-16.bpo-43066.Ti7ahX.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-26-17-41-06.bpo-40620.PAYDrB.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-06-28-12-13-48.bpo-38062.9Ehp9O.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-02-14-02-29.bpo-44544._5_aCz.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-03-18-25-17.bpo-44558.0pTknl.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-12-11-39-20.bpo-44613.DIXNzc.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-13-22-25-13.bpo-44631.qkGwe4.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-15-11-19-03.bpo-42958.gC5IHM.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-18-22-26-02.bpo-44651.SjT9iY.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-18-22-43-14.bpo-44561.T7HpWm.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-20-21-03-18.bpo-30511.eMFkRi.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-22-08-28-03.bpo-35183.p9BWTB.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-25-23-04-15.bpo-44693.JuCbNq.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-07-26-23-48-31.bpo-44740.zMFGMV.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-08-09-19-58-45.bpo-36700.WPNW5f.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-08-11-18-02-06.bpo-33479.rCe4c5.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-08-13-19-08-03.bpo-44903.aJuvQF.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-08-13-20-17-59.bpo-16580.MZ_iK9.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-08-19-15-53-08.bpo-44957.imqrh3.rst delete mode 100644 Misc/NEWS.d/next/Documentation/2021-09-08-17-20-19.bpo-45024.dkNPNi.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-05-09-09-02-09.bpo-44010.TaLe9x.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-05-27-13-39-43.bpo-41611.liNQqj.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-05-27-18-22-46.bpo-41611.jOKpfc.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-06-08-03-04-51.bpo-40468.tUCGUb.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-06-10-00-50-02.bpo-33962.ikAUNg.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-06-11-17-43-39.bpo-40128.7vDN3U.rst delete mode 100644 Misc/NEWS.d/next/IDLE/2021-09-15-03-20-06.bpo-45193.G61_GV.rst delete mode 100644 Misc/NEWS.d/next/Library/2017-09-20-14-43-03.bpo-29298._78CSN.rst delete mode 100644 Misc/NEWS.d/next/Library/2018-04-24-14-25-07.bpo-33349.Y_0LIr.rst delete mode 100644 Misc/NEWS.d/next/Library/2019-02-26-09-31-59.bpo-26228.wyrHKc.rst delete mode 100644 Misc/NEWS.d/next/Library/2019-05-08-15-14-32.bpo-16379.rN5JVe.rst delete mode 100644 Misc/NEWS.d/next/Library/2019-06-03-23-53-25.bpo-27513.qITN7d.rst delete mode 100644 Misc/NEWS.d/next/Library/2019-09-25-13-54-41.bpo-30256.wBkzox.rst delete mode 100644 Misc/NEWS.d/next/Library/2019-11-12-18-59-33.bpo-38741.W7IYkq.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-01-16-23-41-16.bpo-38840.VzzYZz.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-01-25-12-58-20.bpo-37022.FUZI25.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-04-24-20-39-38.bpo-34990.3SmL9M.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-05-21-01-42-32.bpo-40563.fDn5bP.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-05-25-23-58-29.bpo-5846.O9BIfm.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-07-01-17-42-41.bpo-41137.AnqbP-.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-07-13-23-46-59.bpo-32695.tTqqXe.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-07-26-18-17-30.bpo-41402.YRkVkp.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-07-30-14-37-15.bpo-20684.qV35GU.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-10-01-21-46-34.bpo-40956._tvsZ7.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-10-11-20-23-48.bpo-37449.f-t3V6.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-10-18-09-42-53.bpo-40497.CRz2sG.rst delete mode 100644 Misc/NEWS.d/next/Library/2020-12-08-01-08-58.bpo-41818.zO8vV7.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-01-13-00-02-44.bpo-42862.Z6ACLN.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-01-16-18-36-00.bpo-33809.BiMK6V.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-01-25-21-24-55.bpo-43024.vAUrIi.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-01-31-18-24-54.bpo-43086.2_P-SH.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-02-02-20-11-14.bpo-42971.OpVoFu.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-02-04-23-16-03.bpo-30077.v6TqAi.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-02-15-21-17-46.bpo-43232.awc4yZ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-02-15-22-14-31.bpo-43234.F-vKAT.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-02-25-08-32-06.bpo-43318.bZJw6V.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-03-03-13-32-37.bpo-43392.QQumou.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-03-24-09-40-02.bpo-43612.vMGZ4y.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-04-15-12-02-17.bpo-43853.XXCVAp.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-01-15-43-37.bpo-44002.KLT_wd.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-03-19-59-14.bpo-40465.1tB4Y0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-09-03-26-31.bpo-44081.A-Mrto.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-13-19-44-38.bpo-44077.04b2a4.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-16-02-24-23.bpo-44142.t-XU8k.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-16-11-57-38.bpo-44150.xAhhik.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-17-21-05-06.bpo-4928.Ot2yjO.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-18-00-17-21.bpo-27334.32EJZi.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-21-12-12-35.bpo-43643.GWnmcF.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-21-21-23-43.bpo-44210.5afQ3K.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-25-23-26-38.bpo-43216.xTUyyX.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-26-13-15-51.bpo-44241.TBqej8.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-26-13-34-37.bpo-33693.3okzdo.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-26-14-50-06.bpo-38693.NkMacJ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-26-22-04-40.bpo-44235.qFBYpp.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-28-09-43-33.bpo-44258.nh5F7R.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-29-01-05-43.bpo-44254.f06xDm.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-30-13-32-09.bpo-44260.ROEbVd.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-31-04-51-02.bpo-43858.r7LOu6.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-31-11-28-03.bpo-44246.nhmt-v.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-05-31-11-34-56.bpo-44246.yHAkF0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-07-10-26-14.bpo-44242.MKeMCQ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-08-17-47-38.bpo-44339.9JwMSc.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-09-08-32-39.bpo-44357.70Futb.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-09-10-08-32.bpo-35800.3hmkWw.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-10-07-26-12.bpo-44351.rvyf2v.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-10-08-35-38.bpo-44356.6oDFhO.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-10-15-06-47.bpo-44342.qqkGlj.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-10-20-07-32.bpo-44362.oVOMfd.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-10-21-53-46.bpo-34266.k3fxnm.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-12-10-08-14.bpo-44395.PcW6Sx.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-12-21-25-35.bpo-27827.TMWh1i.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-12-22-58-20.bpo-44389.WTRnoC.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-13-00-16-56.bpo-37880.5bTrkw.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-14-14-19-11.bpo-38291.ee4cSX.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-14-23-28-17.bpo-44422.BlWOgv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-15-13-51-25.bpo-42972.UnyYo1.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-16-16-52-14.bpo-44434.SQS4Pg.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-17-15-01-51.bpo-44439.1S7QhT.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-17-22-39-34.bpo-44446.qwdRic.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-19-21-52-27.bpo-44464.U2oa-a.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-20-07-14-46.bpo-44458.myqCQ0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-20-14-03-18.bpo-41546.lO1jXU.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-20-19-01-11.bpo-44404.McfrYB.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-21-10-46-58.bpo-44471.2QjXv_.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-21-12-43-04.bpo-44466.NSm6mv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-22-08-43-04.bpo-44482.U9GznK.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-22-16-45-48.bpo-43977.bamAGF.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-23-01-33-01.bpo-44491.tiOlr5.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-23-19-02-00.bpo-44468.-klV5-.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-24-19-16-20.bpo-42892.qvRNhI.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-26-12-27-14.bpo-44516.BVyX_y.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-29-07-27-08.bpo-43625.ZlAxhp.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-29-21-17-17.bpo-44461.acqRnV.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-30-11-34-35.bpo-44539.nP0Xi4.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-06-30-13-29-49.bpo-34798.t7FCa0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-02-18-17-56.bpo-44554.aBUmJo.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-04-11-33-34.bpo-41249.sHdwBE.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-04-21-16-53.bpo-44558.cm7Slv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-05-18-13-25.bpo-44566.o51Bd1.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-08-12-22-54.bpo-44569.KZ02v9.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-09-07-14-37.bpo-41928.Q1jMrr.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-10-19-55-13.bpo-42799.ad4tq8.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-13-09-01-33.bpo-44608.R3IcM1.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-15-16-51-32.bpo-44648.2o49TB.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-16-08-57-27.bpo-44638.EwYKne.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-16-13-40-31.bpo-40897.aveAre.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-19-14-04-42.bpo-44524.Nbf2JC.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-19-18-45-00.bpo-44678.YMEAu0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-19-22-43-15.bpo-44353.HF81_Q.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-20-00-11-47.bpo-44682.3m2qVV.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-20-18-34-16.bpo-44353.ATuYq4.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-20-19-35-49.bpo-44686.ucCGhu.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-20-21-51-35.bpo-42854.ThuDMI.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-20-22-03-24.bpo-44690.tV7Zjg.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-20-23-28-26.bpo-44688.buFgz3.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-21-10-43-22.bpo-44666.CEThkv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-21-23-16-30.bpo-44704.iqHLxQ.rst create mode 100644 Misc/NEWS.d/next/Library/2021-07-22-21-25-56.bpo-40321.gBlFmw.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-24-02-17-59.bpo-44720.shU5Qm.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-25-08-17-55.bpo-42378.WIhUZK.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-27-12-06-19.bpo-44747.epUzZz.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-27-22-11-29.bpo-44752._bvbrZ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-28-22-53-18.bpo-44771.BvLdnU.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-30-23-27-30.bpo-44667.tu0Xrv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-31-08-45-31.bpo-44784.fIMIDS.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-07-31-20-28-20.bpo-44793.woaQSg.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-01-19-49-09.bpo-27275.QsvE0k.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-02-14-37-32.bpo-44806.wOW_Qn.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-03-20-37-45.bpo-44801.i49Aug.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-04-12-29-00.bpo-44822.zePNXA.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-05-14-59-39.bpo-44839.MURNL9.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-05-18-20-17.bpo-44524.9T1tfe.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-06-09-43-50.bpo-44605.q4YSBZ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-06-19-15-52.bpo-44581.oFDBTB.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-07-17-28-56.bpo-44859.CCopjk.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-07-22-51-32.bpo-44860.PTvRrU.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-09-13-17-10.bpo-38956.owWLNv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-10-16-57-10.bpo-44524.dk9QX4.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-12-16-22-16.bpo-41322.utscTd.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-14-00-55-16.bpo-44911.uk3hYk.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-17-16-01-44.bpo-44935.roUl0G.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-19-15-03-54.bpo-44955.1mxFQS.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-19-23-49-10.bpo-42255.ofe3ms.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-23-21-39-59.bpo-37596.ojRcwB.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-25-10-28-49.bpo-43613.WkYmI0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-25-20-18-31.bpo-39218.BlO6jW.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-26-09-54-14.bpo-45010.Cn23bQ.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-26-16-25-48.bpo-45001.tn_dKp.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-27-19-01-23.bpo-45030.tAmBbY.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-27-23-40-51.bpo-43913.Uo1Gt5.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-28-13-00-12.bpo-45021.rReeaj.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-29-14-49-22.bpo-41620.WJ6PFL.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-08-30-13-55-09.bpo-31299.9QzjZs.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-01-15-27-00.bpo-45075.9xUpvt.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-02-00-18-32.bpo-40360.9nmMtB.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-02-00-47-14.bpo-45085.mMnaDv.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-02-12-42-25.bpo-45081.tOjJ1k.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-05-13-15-08.bpo-25894.zjbi2f.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-05-20-33-25.bpo-45034.62NLD5.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-05-21-37-28.bpo-30856.jj86y0.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-07-09-13-27.bpo-45124.Kw5AUs.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-07-14-27-39.bpo-45129.vXH0gw.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-07-16-33-51.bpo-45132.WI9zQY.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-08-01-19-31.bpo-20499.tSxx8Y.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-08-13-19-29.bpo-38371.y1kEfP.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-10-13-20-53.bpo-45162.2Jh-lq.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-11-10-45-12.bpo-35474.tEY3SD.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-11-14-41-02.bpo-44987.Mt8DiX.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-11-17-46-20.bpo-45173.UptGAn.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-11-18-44-40.bpo-21302.QxHRpR.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-13-14-28-49.bpo-45168.Z1mfW4.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-13-19-32-58.bpo-42135.1ZAHqR.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-16-19-02-14.bpo-45225.xmKV4i.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-17-09-59-33.bpo-45228.WV1dcT.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-17-15-58-53.bpo-45183.Vv_vch.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-17-16-55-37.bpo-45235.sXnmPA.rst delete mode 100644 Misc/NEWS.d/next/Library/2021-09-18-13-14-57.bpo-36674.a2k5Zb.rst create mode 100644 Misc/NEWS.d/next/Library/2021-10-01-23-07-02.bpo-45343.ixmctD.rst delete mode 100644 Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst delete mode 100644 Misc/NEWS.d/next/Security/2021-05-08-11-50-46.bpo-43124.2CTM6M.rst delete mode 100644 Misc/NEWS.d/next/Security/2021-06-29-02-45-53.bpo-44394.A220N1.rst delete mode 100644 Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst delete mode 100644 Misc/NEWS.d/next/Security/2021-07-25-20-04-54.bpo-44600.0WMldg.rst delete mode 100644 Misc/NEWS.d/next/Security/2021-08-29-12-39-44.bpo-42278.jvmQz_.rst delete mode 100644 Misc/NEWS.d/next/Tests/2019-09-25-18-10-10.bpo-30256.A5i76Q.rst delete mode 100644 Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-05-14-14-13-44.bpo-44131.YPizoC.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-02-17-41-42.bpo-43921.xP7yZ4.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-03-03-29-34.bpo-43921.nwH1FS.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-09-15-32-05.bpo-44364.zu9Zee.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-10-11-19-43.bpo-44363.-K9jD0.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-18-15-19-35.bpo-44451.aj5pqE.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-21-17-53-41.bpo-44287.YON57s.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-06-26-18-37-36.bpo-44515.e9fO6f.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-07-16-14-02-33.bpo-44647.5LzqIy.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-07-17-11-41-20.bpo-42095.kCB7oj.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-07-22-16-38-39.bpo-44708.SYNaac.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-07-24-20-09-15.bpo-44734.KKsNOV.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-06-00-07-15.bpo-40928.aIwb6G.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-06-18-36-04.bpo-44852.sUL8YX.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-13-12-11-06.bpo-44891.T9_mBT.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-18-18-30-12.bpo-44949.VE5ENv.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-26-14-20-44.bpo-45011.mQZdXU.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-27-22-37-19.bpo-25130.ig4oJe.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-08-30-11-54-14.bpo-45042.QMz3X8.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-01-17-17-44.bpo-44895.kV7H77.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-06-19-00-29.bpo-45052.yrOK3J.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-08-13-01-37.bpo-44860.qXd0kx.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-13-00-28-17.bpo-45156.8oomV3.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-14-13-16-18.bpo-45195.EyQR1G.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-14-14-54-04.bpo-45185.qFx5I6.rst delete mode 100644 Misc/NEWS.d/next/Tests/2021-09-16-17-22-35.bpo-45128.Jz6fl2.rst delete mode 100644 Misc/NEWS.d/next/Tools-Demos/2020-02-25-18-22-09.bpo-20291.AyrDiZ.rst delete mode 100644 Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst delete mode 100644 Misc/NEWS.d/next/Tools-Demos/2021-07-01-22-21-25.bpo-43425.t65len.rst delete mode 100644 Misc/NEWS.d/next/Tools-Demos/2021-08-22-11-45-31.bpo-44978.QupKV3.rst delete mode 100644 Misc/NEWS.d/next/Tools-Demos/2021-08-26-11-57-31.bpo-44967.UT1RMV.rst delete mode 100644 Misc/NEWS.d/next/Tools-Demos/2021-09-14-11-44-26.bpo-44786.DU0LC0.rst delete mode 100644 Misc/NEWS.d/next/Windows/2020-04-13-15-20-28.bpo-40263.1KKEbu.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-06-06-16-36-13.bpo-41299.Rg-vb_.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-07-07-21-07-18.bpo-44582.4Mm6Hh.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-07-13-15-32-49.bpo-44572.gXvhDc.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-08-06-10-11-07.bpo-44848.ib3Jcz.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-08-27-23-50-02.bpo-45007.NIBlVG.rst delete mode 100644 Misc/NEWS.d/next/Windows/2021-09-03-18-05-21.bpo-45022.bgpD_r.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-03-29-21-11-23.bpo-34932.f3Hdyd.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-05-24-21-15-41.bpo-43109.npKJ9c.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-07-12-15-42-02.bpo-41972.yUjE8j.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-07-20-22-27-01.bpo-44689.mmT_xH.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-08-06-10-08-41.bpo-44848.0uYXsE.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-08-27-16-55-10.bpo-34602.ZjHsYJ.rst delete mode 100644 Misc/NEWS.d/next/macOS/2021-08-30-00-04-10.bpo-45007.pixqUB.rst diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1ed35b57593d6b..ec3acf77563f7e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -85,7 +85,9 @@ jobs: - name: Check limited ABI symbols run: make check-limited-abi - name: Check Autoconf version 2.69 - run: grep "Generated by GNU Autoconf 2.69" configure + run: | + grep "Generated by GNU Autoconf 2.69" configure + grep "PKG_PROG_PKG_CONFIG" aclocal.m4 build_win32: name: 'Windows (x86)' @@ -126,8 +128,12 @@ jobs: PYTHONSTRICTEXTENSIONBUILD: 1 steps: - uses: actions/checkout@v2 + - name: Prepare homebrew environment variables + run: | + echo "LDFLAGS=-L$(brew --prefix tcl-tk)/lib" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=$(brew --prefix openssl@1.1)/lib/pkgconfig:$(brew --prefix tcl-tk)/lib/pkgconfig" >> $GITHUB_ENV - name: Configure CPython - run: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-dev + run: ./configure --with-pydebug --prefix=/opt/python-dev - name: Build CPython run: make -j4 - name: Display build info @@ -267,4 +273,4 @@ jobs: - name: Display build info run: make pythoninfo - name: Tests - run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu -x test_ctypes test_crypt test_decimal test_faulthandler test_interpreters test___all__ test_idle test_tix test_tk test_ttk_guionly test_ttk_textonly" + run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu -x test_ctypes test_crypt test_decimal test_faulthandler test_interpreters test___all__ test_idle test_tix test_tk test_ttk_guionly test_ttk_textonly test_multiprocessing_fork test_multiprocessing_forkserver test_multiprocessing_spawn" diff --git a/Doc/c-api/call.rst b/Doc/c-api/call.rst index 31dc9c8031fdb6..739b5e97d15150 100644 --- a/Doc/c-api/call.rst +++ b/Doc/c-api/call.rst @@ -185,7 +185,7 @@ Object Calling API Various functions are available for calling a Python object. Each converts its arguments to a convention supported by the called object – either *tp_call* or vectorcall. -In order to do as litle conversion as possible, pick one that best fits +In order to do as little conversion as possible, pick one that best fits the format of data you have available. The following table summarizes the available functions; diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index 2fcbcc8d77be45..77036726b0a923 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -486,7 +486,7 @@ Process-wide parameters (set by :c:func:`Py_SetProgramName` above) and some environment variables. The returned string consists of a series of directory names separated by a platform dependent delimiter character. The delimiter character is ``':'`` - on Unix and Mac OS X, ``';'`` on Windows. The returned string points into + on Unix and macOS, ``';'`` on Windows. The returned string points into static storage; the caller should not modify its value. The list :data:`sys.path` is initialized with this value on interpreter startup; it can be (and usually is) modified later to change the search path for loading @@ -518,7 +518,7 @@ Process-wide parameters default search path but uses the one provided instead. This is useful if Python is embedded by an application that has full knowledge of the location of all modules. The path components should be separated by the platform - dependent delimiter character, which is ``':'`` on Unix and Mac OS X, ``';'`` + dependent delimiter character, which is ``':'`` on Unix and macOS, ``';'`` on Windows. This also causes :data:`sys.executable` to be set to the program @@ -561,7 +561,7 @@ Process-wide parameters Return the platform identifier for the current platform. On Unix, this is formed from the "official" name of the operating system, converted to lower case, followed by the major revision number; e.g., for Solaris 2.x, which is - also known as SunOS 5.x, the value is ``'sunos5'``. On Mac OS X, it is + also known as SunOS 5.x, the value is ``'sunos5'``. On macOS, it is ``'darwin'``. On Windows, it is ``'win'``. The returned string points into static storage; the caller should not modify its value. The value is available to Python code as ``sys.platform``. diff --git a/Doc/c-api/init_config.rst b/Doc/c-api/init_config.rst index 2e52679ebc5b5d..989660caeda06e 100644 --- a/Doc/c-api/init_config.rst +++ b/Doc/c-api/init_config.rst @@ -22,7 +22,7 @@ There are two kinds of configuration: * The :ref:`Isolated Configuration ` can be used to embed Python into an application. It isolates Python from the system. For example, environments variables are ignored, the LC_CTYPE locale is left unchanged and - no signal handler is registred. + no signal handler is registered. The :c:func:`Py_RunMain` function can be used to write a customized Python program. @@ -706,7 +706,7 @@ PyConfig * Otherwise, use the :term:`locale encoding`: ``nl_langinfo(CODESET)`` result. - At Python statup, the encoding name is normalized to the Python codec + At Python startup, the encoding name is normalized to the Python codec name. For example, ``"ANSI_X3.4-1968"`` is replaced with ``"ascii"``. See also the :c:member:`~PyConfig.filesystem_errors` member. diff --git a/Doc/distributing/index.rst b/Doc/distributing/index.rst index 56a0a2eaef7be1..136cf4e77b1543 100644 --- a/Doc/distributing/index.rst +++ b/Doc/distributing/index.rst @@ -31,7 +31,7 @@ installing other Python projects, refer to the Key terms ========= -* the `Python Packaging Index `__ is a public +* the `Python Package Index `__ is a public repository of open source licensed packages made available for use by other Python users * the `Python Packaging Authority @@ -101,7 +101,7 @@ by invoking the ``pip`` module at the command line:: .. note:: - For POSIX users (including Mac OS X and Linux users), these instructions + For POSIX users (including macOS and Linux users), these instructions assume the use of a :term:`virtual environment`. For Windows users, these instructions assume that the option to @@ -127,14 +127,14 @@ involved in creating and publishing a project: * `Project structure`_ * `Building and packaging the project`_ -* `Uploading the project to the Python Packaging Index`_ +* `Uploading the project to the Python Package Index`_ * `The .pypirc file`_ .. _Project structure: \ https://packaging.python.org/tutorials/packaging-projects/#packaging-python-projects .. _Building and packaging the project: \ https://packaging.python.org/tutorials/packaging-projects/#creating-the-package-files -.. _Uploading the project to the Python Packaging Index: \ +.. _Uploading the project to the Python Package Index: \ https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives .. _The .pypirc file: \ https://packaging.python.org/specifications/pypirc/ @@ -150,7 +150,7 @@ These are quick answers or links for some common tasks. This isn't an easy topic, but here are a few tips: -* check the Python Packaging Index to see if the name is already in use +* check the Python Package Index to see if the name is already in use * check popular hosting sites like GitHub, Bitbucket, etc to see if there is already a project with that name * check what comes up in a web search for the name you're considering diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index b65492fb2323f7..18a4aac4f70895 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -373,7 +373,7 @@ This module provides the following functions. compiler object under Unix---if you supply a value for *compiler*, *plat* is ignored. - .. % Is the posix/nt only thing still true? Mac OS X seems to work, and + .. % Is the posix/nt only thing still true? macOS seems to work, and .. % returns a UnixCCompiler instance. How to document this... hmm. @@ -1119,11 +1119,11 @@ other utility module. For non-POSIX platforms, currently just returns ``sys.platform``. - For Mac OS X systems the OS version reflects the minimal version on which + For macOS systems the OS version reflects the minimal version on which binaries will run (that is, the value of ``MACOSX_DEPLOYMENT_TARGET`` during the build of Python), not the OS version of the current system. - For universal binary builds on Mac OS X the architecture value reflects + For universal binary builds on macOS the architecture value reflects the universal binary status instead of the architecture of the current processor. For 32-bit universal binaries the architecture is ``fat``, for 64-bit universal binaries the architecture is ``fat64``, and @@ -1132,7 +1132,7 @@ other utility module. a 3-way universal build (ppc, i386, x86_64) and ``intel`` is used for a universal build with the i386 and x86_64 architectures - Examples of returned values on Mac OS X: + Examples of returned values on macOS: * ``macosx-10.3-ppc`` diff --git a/Doc/faq/design.rst b/Doc/faq/design.rst index 720b1e496eb848..0437b59d55da6e 100644 --- a/Doc/faq/design.rst +++ b/Doc/faq/design.rst @@ -714,7 +714,7 @@ Why don't generators support the with statement? For technical reasons, a generator used directly as a context manager would not work correctly. When, as is most common, a generator is used as an iterator run to completion, no closing is needed. When it is, wrap -it as "contextlib.closing(generator)" in the 'with' statment. +it as "contextlib.closing(generator)" in the 'with' statement. Why are colons required for the if/while/def/class statements? diff --git a/Doc/faq/gui.rst b/Doc/faq/gui.rst index 145283d072d40c..86c56d957cdfec 100644 --- a/Doc/faq/gui.rst +++ b/Doc/faq/gui.rst @@ -23,7 +23,7 @@ install (since it comes included with most `binary distributions `_ of Python) and use. For more info about Tk, including pointers to the source, see the `Tcl/Tk home page `_. Tcl/Tk is fully portable to the -Mac OS X, Windows, and Unix platforms. +macOS, Windows, and Unix platforms. Depending on what platform(s) you are aiming at, there are also several alternatives. A `list of cross-platform diff --git a/Doc/faq/installed.rst b/Doc/faq/installed.rst index 42296533e26f32..16c9a74daffb1d 100644 --- a/Doc/faq/installed.rst +++ b/Doc/faq/installed.rst @@ -29,7 +29,7 @@ there are several possible ways it could have gotten there. * Some Windows machines also have Python installed. At this writing we're aware of computers from Hewlett-Packard and Compaq that include Python. Apparently some of HP/Compaq's administrative tools are written in Python. -* Many Unix-compatible operating systems, such as Mac OS X and some Linux +* Many Unix-compatible operating systems, such as macOS and some Linux distributions, have Python installed by default; it's included in the base installation. diff --git a/Doc/includes/sqlite3/text_factory.py b/Doc/includes/sqlite3/text_factory.py index a857a155cdd4ff..c0d87cd559118c 100644 --- a/Doc/includes/sqlite3/text_factory.py +++ b/Doc/includes/sqlite3/text_factory.py @@ -3,9 +3,9 @@ con = sqlite3.connect(":memory:") cur = con.cursor() -AUSTRIA = "\xd6sterreich" +AUSTRIA = "Österreich" -# by default, rows are returned as Unicode +# by default, rows are returned as str cur.execute("select ?", (AUSTRIA,)) row = cur.fetchone() assert row[0] == AUSTRIA diff --git a/Doc/install/index.rst b/Doc/install/index.rst index dbe9c1e1c5d4dd..7f7be117009887 100644 --- a/Doc/install/index.rst +++ b/Doc/install/index.rst @@ -206,7 +206,7 @@ directory. If you don't choose an installation directory---i.e., if you just run ``setup.py install``\ ---then the :command:`install` command installs to the standard location for third-party Python modules. This location varies by platform and -by how you built/installed Python itself. On Unix (and Mac OS X, which is also +by how you built/installed Python itself. On Unix (and macOS, which is also Unix-based), it also depends on whether the module distribution being installed is pure Python or contains extensions ("non-pure"): @@ -236,7 +236,7 @@ Notes: :file:`{prefix}` and :file:`{exec-prefix}` stand for the directories that Python is installed to, and where it finds its libraries at run-time. They are always -the same under Windows, and very often the same under Unix and Mac OS X. You +the same under Windows, and very often the same under Unix and macOS. You can find out what your Python installation uses for :file:`{prefix}` and :file:`{exec-prefix}` by running Python in interactive mode and typing a few simple commands. Under Unix, just type ``python`` at the shell prompt. Under @@ -312,7 +312,7 @@ install into it. It is enabled with a simple option:: Files will be installed into subdirectories of :data:`site.USER_BASE` (written as :file:`{userbase}` hereafter). This scheme installs pure Python modules and extension modules in the same location (also known as :data:`site.USER_SITE`). -Here are the values for UNIX, including Mac OS X: +Here are the values for UNIX, including macOS: =============== =========================================================== Type of file Installation directory @@ -735,7 +735,7 @@ Location and names of config files ---------------------------------- The names and locations of the configuration files vary slightly across -platforms. On Unix and Mac OS X, the three configuration files (in the order +platforms. On Unix and macOS, the three configuration files (in the order they are processed) are: +--------------+----------------------------------------------------------+-------+ diff --git a/Doc/installing/index.rst b/Doc/installing/index.rst index 31e9b0bde07244..4bacc7ba0c2cf2 100644 --- a/Doc/installing/index.rst +++ b/Doc/installing/index.rst @@ -44,7 +44,7 @@ Key terms ``venv``. It allows virtual environments to be used on versions of Python prior to 3.4, which either don't provide ``venv`` at all, or aren't able to automatically install ``pip`` into created environments. -* The `Python Packaging Index `__ is a public +* The `Python Package Index `__ is a public repository of open source licensed packages made available for use by other Python users. * the `Python Packaging Authority @@ -78,13 +78,13 @@ The standard packaging tools are all designed to be used from the command line. The following command will install the latest version of a module and its -dependencies from the Python Packaging Index:: +dependencies from the Python Package Index:: python -m pip install SomePackage .. note:: - For POSIX users (including Mac OS X and Linux users), the examples in + For POSIX users (including macOS and Linux users), the examples in this guide assume the use of a :term:`virtual environment`. For Windows users, the examples in this guide assume that the option to @@ -163,7 +163,7 @@ rather than attempting to install them with ``pip``. ... work with multiple versions of Python installed in parallel? ---------------------------------------------------------------- -On Linux, Mac OS X, and other POSIX systems, use the versioned Python commands +On Linux, macOS, and other POSIX systems, use the versioned Python commands in combination with the ``-m`` switch to run the appropriate copy of ``pip``:: @@ -225,8 +225,8 @@ users being expected to compile extension modules from source as part of the installation process. With the introduction of support for the binary ``wheel`` format, and the -ability to publish wheels for at least Windows and Mac OS X through the -Python Packaging Index, this problem is expected to diminish over time, +ability to publish wheels for at least Windows and macOS through the +Python Package Index, this problem is expected to diminish over time, as users are more regularly able to install pre-built extensions rather than needing to build them themselves. diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index ac8a2fd6195f40..2edf84e5f0444c 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -1109,7 +1109,7 @@ Anything with more interesting error-handling or resource management should be done downstream after the arguments are parsed. For example, JSON or YAML conversions have complex error cases that require -better reporting than can be given by the ``type`` keyword. An +better reporting than can be given by the ``type`` keyword. A :exc:`~json.JSONDecodeError` would not be well formatted and a :exc:`FileNotFound` exception would not be handled at all. diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index e21151bd4ef792..e29b5e88d71d41 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -1266,7 +1266,7 @@ Pattern matching the pattern matches the subject. ``body`` contains a list of nodes to execute if the pattern matches and - the result of evaluating the guard expression is truthy. + the result of evaluating the guard expression is true. .. doctest:: @@ -1920,7 +1920,7 @@ and classes for traversing abstract syntax trees: If source contains a null character ('\0'), :exc:`ValueError` is raised. .. warning:: - Note that succesfully parsing souce code into an AST object doesn't + Note that successfully parsing source code into an AST object doesn't guarantee that the source code provided is valid Python code that can be executed as the compilation step can raise further :exc:`SyntaxError` exceptions. For instance, the source ``return 42`` generates a valid diff --git a/Doc/library/asyncio-dev.rst b/Doc/library/asyncio-dev.rst index 02a00033152aba..77f1128de50c95 100644 --- a/Doc/library/asyncio-dev.rst +++ b/Doc/library/asyncio-dev.rst @@ -57,7 +57,7 @@ When the debug mode is enabled: * The execution time of the I/O selector is logged if it takes too long to perform an I/O operation. -* Callbacks taking longer than 100ms are logged. The +* Callbacks taking longer than 100 milliseconds are logged. The :attr:`loop.slow_callback_duration` attribute can be used to set the minimum execution duration in seconds that is considered "slow". diff --git a/Doc/library/asyncio-platforms.rst b/Doc/library/asyncio-platforms.rst index 390ee1969d096f..50ad8a2ab70324 100644 --- a/Doc/library/asyncio-platforms.rst +++ b/Doc/library/asyncio-platforms.rst @@ -63,7 +63,7 @@ All event loops on Windows do not support the following methods: methods are not supported. The resolution of the monotonic clock on Windows is usually around 15.6 -msec. The best resolution is 0.5 msec. The resolution depends on the +milliseconds. The best resolution is 0.5 milliseconds. The resolution depends on the hardware (availability of `HPET `_) and on the Windows configuration. diff --git a/Doc/library/base64.rst b/Doc/library/base64.rst index 29e52ad48e1159..4ff038c8d29f1a 100644 --- a/Doc/library/base64.rst +++ b/Doc/library/base64.rst @@ -154,7 +154,7 @@ The modern interface provides: This version does not allow the digit 0 (zero) to the letter O (oh) and digit 1 (one) to either the letter I (eye) or letter L (el) mappings, all these characters are included in the Extended Hex Alphabet and are not - interchangable. + interchangeable. .. versionadded:: 3.10 diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index 1494fa7d52407a..c151f04dfb8d01 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -89,7 +89,7 @@ To get at submitted form data, use the :class:`FieldStorage` class. If the form contains non-ASCII characters, use the *encoding* keyword parameter set to the value of the encoding defined for the document. It is usually contained in the META tag in the HEAD section of the HTML document or by the -:mailheader:`Content-Type` header). This reads the form contents from the +:mailheader:`Content-Type` header. This reads the form contents from the standard input or the environment (depending on the value of various environment variables set according to the CGI standard). Since it may consume standard input, it should be instantiated only once. diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 9ea689acd8bbb3..949288b7c6d9b7 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -926,7 +926,7 @@ it's a device to determine the storage layout of the encoded bytes, and vanishes once the byte sequence has been decoded into a string; as a ``ZERO WIDTH NO-BREAK SPACE`` it's a normal character that will be decoded like any other. -There's another encoding that is able to encoding the full range of Unicode +There's another encoding that is able to encode the full range of Unicode characters: UTF-8. UTF-8 is an 8-bit encoding, which means there are no issues with byte order in UTF-8. Each byte in a UTF-8 byte sequence consists of two parts: marker bits (the most significant bits) and payload bits. The marker bits diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index 0c1a93cdce4dbe..87c9c66edd67c9 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -20,7 +20,7 @@ ctypes tutorial Note: The code samples in this tutorial use :mod:`doctest` to make sure that they actually work. Since some code samples behave differently under Linux, -Windows, or Mac OS X, they contain doctest directives in comments. +Windows, or macOS, they contain doctest directives in comments. Note: Some code samples reference the ctypes :class:`c_int` type. On platforms where ``sizeof(long) == sizeof(int)`` it is an alias to :class:`c_long`. @@ -80,7 +80,7 @@ the library by creating an instance of CDLL by calling the constructor:: >>> -.. XXX Add section for Mac OS X. +.. XXX Add section for macOS. .. _ctypes-accessing-functions-from-loaded-dlls: @@ -1287,7 +1287,7 @@ Here are some examples:: 'libbz2.so.1.0' >>> -On OS X, :func:`find_library` tries several predefined naming schemes and paths +On macOS, :func:`find_library` tries several predefined naming schemes and paths to locate the library, and returns a full pathname if successful:: >>> from ctypes.util import find_library diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst index efbece437af2dd..37e822c0e2b207 100644 --- a/Doc/library/curses.rst +++ b/Doc/library/curses.rst @@ -368,7 +368,7 @@ The module :mod:`curses` defines the following functions: Set the maximum time in milliseconds that can elapse between press and release events in order for them to be recognized as a click, and return the previous - interval value. The default value is 200 msec, or one fifth of a second. + interval value. The default value is 200 milliseconds, or one fifth of a second. .. function:: mousemask(mousemask) diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index 9b683083f6b622..9958dea5587f17 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -725,7 +725,7 @@ iterations of the loop. of the stack and sets the ``f_lasti`` attribute of the frame with that value. Then pops the next exception from the stack uses it to restore the current exception. Finally it re-raises the originally popped exception. - Used in excpetion handler cleanup. + Used in exception handler cleanup. .. versionadded:: 3.11 diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst index a77322f83acbde..0bbb640bea26b1 100644 --- a/Doc/library/doctest.rst +++ b/Doc/library/doctest.rst @@ -485,25 +485,24 @@ Some details you should read once, but won't need to remember: .. index:: single: ^ (caret); marker -* For some :exc:`SyntaxError`\ s, Python displays the character position of the - syntax error, using a ``^`` marker:: +* For some exceptions, Python displays the position of the error using ``^`` + markers and tildes:: - >>> 1 1 + >>> 1 + None File "", line 1 - 1 1 - ^ - SyntaxError: invalid syntax + 1 + None + ~~^~~~~~ + TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' Since the lines showing the position of the error come before the exception type and detail, they are not checked by doctest. For example, the following test would pass, even though it puts the ``^`` marker in the wrong location:: - >>> 1 1 - Traceback (most recent call last): + >>> 1 + None File "", line 1 - 1 1 - ^ - SyntaxError: invalid syntax + 1 + None + ^~~~~~~~ + TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' .. _option-flags-and-directives: diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index f28505a6d2ccf8..86bf705af77e71 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -651,8 +651,8 @@ Data Types --------------- -Utilites and Decorators ------------------------ +Utilities and Decorators +------------------------ .. class:: auto diff --git a/Doc/library/fileinput.rst b/Doc/library/fileinput.rst index ae31341a9e63ee..2a2c1b3c2b921c 100644 --- a/Doc/library/fileinput.rst +++ b/Doc/library/fileinput.rst @@ -50,7 +50,7 @@ You can control how files are opened by providing an opening hook via the *openhook* parameter to :func:`fileinput.input` or :class:`FileInput()`. The hook must be a function that takes two arguments, *filename* and *mode*, and returns an accordingly opened file-like object. If *encoding* and/or *errors* -are specified, they will be passed to the hook as aditional keyword arguments. +are specified, they will be passed to the hook as additional keyword arguments. This module provides a :func:`hook_compressed` to support compressed files. The following function is the primary interface of this module: diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index a8fc7023d11953..a651d8829cd29c 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1345,8 +1345,8 @@ are always available. They are listed here in alphabetical order. coercion rules for binary arithmetic operators apply. For :class:`int` operands, the result has the same type as the operands (after coercion) unless the second argument is negative; in that case, all arguments are - converted to float and a float result is delivered. For example, ``10**2`` - returns ``100``, but ``10**-2`` returns ``0.01``. + converted to float and a float result is delivered. For example, ``pow(10, 2)`` + returns ``100``, but ``pow(10, -2)`` returns ``0.01``. For :class:`int` operands *base* and *exp*, if *mod* is present, *mod* must also be of integer type and *mod* must be nonzero. If *mod* is present and @@ -1592,6 +1592,15 @@ are always available. They are listed here in alphabetical order. compare equal --- this is helpful for sorting in multiple passes (for example, sort by department, then by salary grade). + The sort algorithm uses only ``<`` comparisons between items. While + defining an :meth:`~object.__lt__` method will suffice for sorting, + :PEP:`8` recommends that all six :ref:`rich comparisons + ` be implemented. This will help avoid bugs when using + the same data with other ordering tools such as :func:`max` that rely + on a different underlying method. Implementing all six comparisons + also helps avoid confusion for mixed type comparisons which can call + reflected the :meth:`~object.__gt__` method. + For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`. .. decorator:: staticmethod diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index 37addee6cda809..77b35fd1d766c8 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -376,10 +376,10 @@ Constructor functions also accept the following tree hashing parameters: * *depth*: maximal depth of tree (1 to 255, 255 if unlimited, 1 in sequential mode). -* *leaf_size*: maximal byte length of leaf (0 to 2**32-1, 0 if unlimited or in +* *leaf_size*: maximal byte length of leaf (0 to ``2**32-1``, 0 if unlimited or in sequential mode). -* *node_offset*: node offset (0 to 2**64-1 for BLAKE2b, 0 to 2**48-1 for +* *node_offset*: node offset (0 to ``2**64-1`` for BLAKE2b, 0 to ``2**48-1`` for BLAKE2s, 0 for the first, leftmost, leaf, or in sequential mode). * *node_depth*: node depth (0 to 255, 0 for leaves, or in sequential mode). diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index c43457a3850678..58c582d7124137 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -255,7 +255,7 @@ function:: Package distributions --------------------- -A convience method to resolve the distribution or +A convenience method to resolve the distribution or distributions (in the case of a namespace package) for top-level Python packages or modules:: diff --git a/Doc/library/intro.rst b/Doc/library/intro.rst index 8567e4d1d08920..5bb33b9c10cc03 100644 --- a/Doc/library/intro.rst +++ b/Doc/library/intro.rst @@ -58,5 +58,5 @@ Notes on availability operating system. * If not separately noted, all functions that claim "Availability: Unix" are - supported on Mac OS X, which builds on a Unix core. + supported on macOS, which builds on a Unix core. diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst index 2ab4dd83ad4dee..74d922d29db69c 100644 --- a/Doc/library/ipaddress.rst +++ b/Doc/library/ipaddress.rst @@ -41,7 +41,7 @@ IP addresses, networks and interfaces: Return an :class:`IPv4Address` or :class:`IPv6Address` object depending on the IP address passed as argument. Either IPv4 or IPv6 addresses may be - supplied; integers less than 2**32 will be considered to be IPv4 by default. + supplied; integers less than ``2**32`` will be considered to be IPv4 by default. A :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or IPv6 address. @@ -56,7 +56,7 @@ IP addresses, networks and interfaces: Return an :class:`IPv4Network` or :class:`IPv6Network` object depending on the IP address passed as argument. *address* is a string or integer representing the IP network. Either IPv4 or IPv6 networks may be supplied; - integers less than 2**32 will be considered to be IPv4 by default. *strict* + integers less than ``2**32`` will be considered to be IPv4 by default. *strict* is passed to :class:`IPv4Network` or :class:`IPv6Network` constructor. A :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or IPv6 address, or if the network has host bits set. @@ -70,7 +70,7 @@ IP addresses, networks and interfaces: Return an :class:`IPv4Interface` or :class:`IPv6Interface` object depending on the IP address passed as argument. *address* is a string or integer representing the IP address. Either IPv4 or IPv6 addresses may be supplied; - integers less than 2**32 will be considered to be IPv4 by default. A + integers less than ``2**32`` will be considered to be IPv4 by default. A :exc:`ValueError` is raised if *address* does not represent a valid IPv4 or IPv6 address. diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst index d3478a94345f0a..5a3e686802ea83 100644 --- a/Doc/library/logging.config.rst +++ b/Doc/library/logging.config.rst @@ -168,7 +168,7 @@ in :mod:`logging` itself) and defining handlers which are declared either in :func:`listen` socket and sending a configuration which runs whatever code the attacker wants to have executed in the victim's process. This is especially easy to do if the default port is used, but not hard even if a - different port is used). To avoid the risk of this happening, use the + different port is used. To avoid the risk of this happening, use the ``verify`` argument to :func:`listen` to prevent unrecognised configurations from being applied. diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 9b35d4daef5779..ee0276aadcf3d0 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -1364,7 +1364,7 @@ with the :mod:`warnings` module. The proposal which described this feature for inclusion in the Python standard library. - `Original Python logging package `_ + `Original Python logging package `_ This is the original source for the :mod:`logging` package. The version of the package available from this site is suitable for use with Python 1.5.2, 2.1.x and 2.2.x, which do not include the :mod:`logging` package in the standard diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst index d9825b47c71333..da174753361b2f 100644 --- a/Doc/library/mmap.rst +++ b/Doc/library/mmap.rst @@ -102,7 +102,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length To ensure validity of the created memory mapping the file specified by the descriptor *fileno* is internally automatically synchronized - with physical backing store on Mac OS X and OpenVMS. + with physical backing store on macOS and OpenVMS. This example shows a simple way of using :class:`~mmap.mmap`:: diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index 41cd40ae8ae2d3..f3d725b822529e 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -412,7 +412,7 @@ For example:: multiple_results = [pool.apply_async(os.getpid, ()) for i in range(4)] print([res.get(timeout=1) for res in multiple_results]) - # make a single worker sleep for 10 secs + # make a single worker sleep for 10 seconds res = pool.apply_async(time.sleep, (10,)) try: print(res.get(timeout=1)) @@ -783,7 +783,7 @@ For an example of the usage of queues for interprocess communication see multithreading/multiprocessing semantics, this number is not reliable. Note that this may raise :exc:`NotImplementedError` on Unix platforms like - Mac OS X where ``sem_getvalue()`` is not implemented. + macOS where ``sem_getvalue()`` is not implemented. .. method:: empty() @@ -1030,7 +1030,13 @@ Miscellaneous The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'`` or ``None``. ``'fork'`` is the default on Unix, while ``'spawn'`` is - the default on Windows. + the default on Windows and macOS. + +.. versionchanged:: 3.8 + + On macOS, the *spawn* start method is now the default. The *fork* start + method should be considered unsafe as it can lead to crashes of the + subprocess. See :issue:`33725`. .. versionadded:: 3.4 @@ -1235,7 +1241,7 @@ object -- see :ref:`multiprocessing-managers`. first argument is named *block*, as is consistent with :meth:`Lock.acquire`. .. note:: - On Mac OS X, this is indistinguishable from :class:`Semaphore` because + On macOS, this is indistinguishable from :class:`Semaphore` because ``sem_getvalue()`` is not implemented on that platform. .. class:: Condition([lock]) @@ -1374,7 +1380,7 @@ object -- see :ref:`multiprocessing-managers`. .. note:: - On Mac OS X, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with + On macOS, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with a timeout will emulate that function's behavior using a sleeping loop. .. note:: diff --git a/Doc/library/multiprocessing.shared_memory.rst b/Doc/library/multiprocessing.shared_memory.rst index cba576a29e2e2b..2ba42b7e579a77 100644 --- a/Doc/library/multiprocessing.shared_memory.rst +++ b/Doc/library/multiprocessing.shared_memory.rst @@ -342,3 +342,30 @@ behind it: >>> c.shm.close() >>> c.shm.unlink() +The following examples demonstrates that ``ShareableList`` +(and underlying ``SharedMemory``) objects +can be pickled and unpickled if needed. +Note, that it will still be the same shared object. +This happens, because the deserialized object has +the same unique name and is just attached to an existing +object with the same name (if the object is still alive): + + >>> import pickle + >>> from multiprocessing import shared_memory + >>> sl = shared_memory.ShareableList(range(10)) + >>> list(sl) + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + >>> deserialized_sl = pickle.loads(pickle.dumps(sl)) + >>> list(deserialized_sl) + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + >>> sl[0] = -1 + >>> deserialized_sl[1] = -2 + >>> list(sl) + [-1, -2, 2, 3, 4, 5, 6, 7, 8, 9] + >>> list(deserialized_sl) + [-1, -2, 2, 3, 4, 5, 6, 7, 8, 9] + + >>> sl.shm.close() + >>> sl.shm.unlink() diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst index 0cdba68f3770ed..35e9b49ea8bcca 100644 --- a/Doc/library/operator.rst +++ b/Doc/library/operator.rst @@ -250,6 +250,17 @@ Operations which work with sequences (some of them with mappings too) include: .. versionadded:: 3.4 + +The following operation works with callables: + +.. function:: call(obj, /, *args, **kwargs) + __call__(obj, /, *args, **kwargs) + + Return ``obj(*args, **kwargs)``. + + .. versionadded:: 3.11 + + The :mod:`operator` module also defines tools for generalized attribute and item lookups. These are useful for making fast field extractors as arguments for :func:`map`, :func:`sorted`, :meth:`itertools.groupby`, or other functions that diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 768771ee3e3e42..3bfefc6bcd57dc 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -2789,7 +2789,7 @@ features: String that uniquely identifies the type of the filesystem that contains the file. - On Mac OS systems, the following attributes may also be available: + On macOS systems, the following attributes may also be available: .. attribute:: st_rsize diff --git a/Doc/library/platform.rst b/Doc/library/platform.rst index bb9fc45df233bf..a0eece6c4d8aa0 100644 --- a/Doc/library/platform.rst +++ b/Doc/library/platform.rst @@ -225,13 +225,13 @@ Windows Platform .. versionadded:: 3.8 -Mac OS Platform ---------------- +macOS Platform +-------------- .. function:: mac_ver(release='', versioninfo=('','',''), machine='') - Get Mac OS version information and return it as tuple ``(release, versioninfo, + Get macOS version information and return it as tuple ``(release, versioninfo, machine)`` with *versioninfo* being a tuple ``(version, dev_stage, non_release_version)``. diff --git a/Doc/library/plistlib.rst b/Doc/library/plistlib.rst index ce6d4a85bf5e9d..5ded9661f08014 100644 --- a/Doc/library/plistlib.rst +++ b/Doc/library/plistlib.rst @@ -133,7 +133,7 @@ The following classes are available: encoded data, which contains UID (see PList manual). It has one attribute, :attr:`data`, which can be used to retrieve the int value - of the UID. :attr:`data` must be in the range `0 <= data < 2**64`. + of the UID. :attr:`data` must be in the range ``0 <= data < 2**64``. .. versionadded:: 3.8 diff --git a/Doc/library/profile.rst b/Doc/library/profile.rst index 774d46d0e96247..cf324a57e79fdf 100644 --- a/Doc/library/profile.rst +++ b/Doc/library/profile.rst @@ -622,7 +622,7 @@ procedure can be used to obtain a better constant for a given platform (see The method executes the number of Python calls given by the argument, directly and again under the profiler, measuring the time for both. It then computes the hidden overhead per profiler event, and returns that as a float. For example, -on a 1.8Ghz Intel Core i5 running Mac OS X, and using Python's time.process_time() as +on a 1.8Ghz Intel Core i5 running macOS, and using Python's time.process_time() as the timer, the magical number is about 4.04e-6. The object of this exercise is to get a fairly consistent result. If your diff --git a/Doc/library/reprlib.rst b/Doc/library/reprlib.rst index 1a0c1b0dcd1aa9..4b37c5ba60f4e6 100644 --- a/Doc/library/reprlib.rst +++ b/Doc/library/reprlib.rst @@ -76,6 +76,14 @@ size limits for the representations of different object types, and methods which format specific object types. +.. attribute:: Repr.fillvalue + + This string is displayed for recursive references. It defaults to + ``...``. + + .. versionadded:: 3.11 + + .. attribute:: Repr.maxlevel Depth limit on the creation of recursive representations. The default is ``6``. diff --git a/Doc/library/select.rst b/Doc/library/select.rst index a354187c266c7f..46b5ff8b6d5863 100644 --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -534,7 +534,7 @@ https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | :const:`KQ_FILTER_PROC` | Watch for events on a process id | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_NETDEV` | Watch for events on a network device | - | | [not available on Mac OS X] | + | | [not available on macOS] | +---------------------------+---------------------------------------------+ | :const:`KQ_FILTER_SIGNAL` | Returns whenever the watched signal is | | | delivered to the process | @@ -626,7 +626,7 @@ https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2 | :const:`KQ_NOTE_TRACKERR` | unable to attach to a child | +----------------------------+--------------------------------------------+ - :const:`KQ_FILTER_NETDEV` filter flags (not available on Mac OS X): + :const:`KQ_FILTER_NETDEV` filter flags (not available on macOS): +----------------------------+--------------------------------------------+ | Constant | Meaning | diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst index 84a569d03eb293..63821866a012bb 100644 --- a/Doc/library/signal.rst +++ b/Doc/library/signal.rst @@ -68,10 +68,34 @@ Module contents signal (SIG*), handler (:const:`SIG_DFL`, :const:`SIG_IGN`) and sigmask (:const:`SIG_BLOCK`, :const:`SIG_UNBLOCK`, :const:`SIG_SETMASK`) related constants listed below were turned into - :class:`enums `. + :class:`enums ` (:class:`Signals`, :class:`Handlers` and :class:`Sigmasks` respectively). :func:`getsignal`, :func:`pthread_sigmask`, :func:`sigpending` and :func:`sigwait` functions return human-readable - :class:`enums `. + :class:`enums ` as :class:`Signals` objects. + + +The signal module defines three enums: + +.. class:: Signals + + :class:`enum.IntEnum` collection of SIG* constants and the CTRL_* constants. + + .. versionadded:: 3.5 + +.. class:: Handlers + + :class:`enum.IntEnum` collection the constants :const:`SIG_DFL` and :const:`SIG_IGN`. + + .. versionadded:: 3.5 + +.. class:: Sigmasks + + :class:`enum.IntEnum` collection the constants :const:`SIG_BLOCK`, :const:`SIG_UNBLOCK` and :const:`SIG_SETMASK`. + + Availability: Unix. See the man page :manpage:`sigprocmask(3)` and + :manpage:`pthread_sigmask(3)` for further information. + + .. versionadded:: 3.5 The variables defined in the :mod:`signal` module are: @@ -618,8 +642,8 @@ The :mod:`signal` module defines the following functions: .. _signal-example: -Example -------- +Examples +-------- Here is a minimal example program. It uses the :func:`alarm` function to limit the time spent waiting to open a file; this is useful if the file is for a @@ -631,7 +655,8 @@ be sent, and the handler raises an exception. :: import signal, os def handler(signum, frame): - print('Signal handler called with signal', signum) + signame = signal.Signals(signum).name + print(f'Signal handler called with signal {signame} ({signum})') raise OSError("Couldn't open device!") # Set the signal handler and a 5-second alarm diff --git a/Doc/library/site.rst b/Doc/library/site.rst index 2e3646f6a74f80..e2ad3c48f9754e 100644 --- a/Doc/library/site.rst +++ b/Doc/library/site.rst @@ -32,7 +32,7 @@ It starts by constructing up to four directories from a head and a tail part. For the head part, it uses ``sys.prefix`` and ``sys.exec_prefix``; empty heads are skipped. For the tail part, it uses the empty string and then :file:`lib/site-packages` (on Windows) or -:file:`lib/python{X.Y}/site-packages` (on Unix and Macintosh). For each +:file:`lib/python{X.Y}/site-packages` (on Unix and macOS). For each of the distinct head-tail combinations, it sees if it refers to an existing directory, and if so, adds it to ``sys.path`` and also inspects the newly added path for configuration files. @@ -176,8 +176,8 @@ Module contents Path to the user site-packages for the running Python. Can be ``None`` if :func:`getusersitepackages` hasn't been called yet. Default value is - :file:`~/.local/lib/python{X.Y}/site-packages` for UNIX and non-framework Mac - OS X builds, :file:`~/Library/Python/{X.Y}/lib/python/site-packages` for Mac + :file:`~/.local/lib/python{X.Y}/site-packages` for UNIX and non-framework + macOS builds, :file:`~/Library/Python/{X.Y}/lib/python/site-packages` for macOS framework builds, and :file:`{%APPDATA%}\\Python\\Python{XY}\\site-packages` on Windows. This directory is a site directory, which means that :file:`.pth` files in it will be processed. @@ -187,8 +187,8 @@ Module contents Path to the base directory for the user site-packages. Can be ``None`` if :func:`getuserbase` hasn't been called yet. Default value is - :file:`~/.local` for UNIX and Mac OS X non-framework builds, - :file:`~/Library/Python/{X.Y}` for Mac framework builds, and + :file:`~/.local` for UNIX and macOS non-framework builds, + :file:`~/Library/Python/{X.Y}` for macOS framework builds, and :file:`{%APPDATA%}\\Python` for Windows. This value is used by Distutils to compute the installation directories for scripts, data files, Python modules, etc. for the :ref:`user installation scheme `. diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index d668c6b7972717..27ad5c7fd1d91f 100755 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -516,7 +516,7 @@ Constants .. data:: AF_LINK - .. availability:: BSD, OSX. + .. availability:: BSD, macOS. .. versionadded:: 3.4 @@ -827,8 +827,8 @@ The :mod:`socket` module also offers various network-related services: .. function:: gethostbyname_ex(hostname) Translate a host name to IPv4 address format, extended interface. Return a - triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the primary - host name responding to the given *ip_address*, *aliaslist* is a (possibly + triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the host's + primary host name, *aliaslist* is a (possibly empty) list of alternative host names for the same address, and *ipaddrlist* is a list of IPv4 addresses for the same interface on the same host (often but not always a single address). :func:`gethostbyname_ex` does not support IPv6 name diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 9c9c7f1eb52573..eaea7ae390b972 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -537,8 +537,8 @@ Connection Objects Using this attribute you can control what objects are returned for the ``TEXT`` data type. By default, this attribute is set to :class:`str` and the - :mod:`sqlite3` module will return Unicode objects for ``TEXT``. If you want to - return bytestrings instead, you can set it to :class:`bytes`. + :mod:`sqlite3` module will return :class:`str` objects for ``TEXT``. + If you want to return :class:`bytes` instead, you can set it to :class:`bytes`. You can also set it to any other callable that accepts a single bytestring parameter and returns the resulting object. @@ -1132,7 +1132,7 @@ committed: .. rubric:: Footnotes .. [#f1] The sqlite3 module is not built with loadable extension support by - default, because some platforms (notably Mac OS X) have SQLite + default, because some platforms (notably macOS) have SQLite libraries which are compiled without this feature. To get loadable extension support, you must pass the :option:`--enable-loadable-sqlite-extensions` option to configure. diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 21077e0f4b42be..c1167416e528df 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -18,7 +18,7 @@ This module provides access to Transport Layer Security (often known as "Secure Sockets Layer") encryption and peer authentication facilities for network sockets, both client-side and server-side. This module uses the OpenSSL -library. It is available on all modern Unix systems, Windows, Mac OS X, and +library. It is available on all modern Unix systems, Windows, macOS, and probably additional platforms, as long as OpenSSL is installed on that platform. .. note:: diff --git a/Doc/library/stat.rst b/Doc/library/stat.rst index f48a0a9faa6b0c..98219eaee97619 100644 --- a/Doc/library/stat.rst +++ b/Doc/library/stat.rst @@ -372,11 +372,11 @@ The following flags can be used in the *flags* argument of :func:`os.chflags`: .. data:: UF_COMPRESSED - The file is stored compressed (Mac OS X 10.6+). + The file is stored compressed (macOS 10.6+). .. data:: UF_HIDDEN - The file should not be displayed in a GUI (Mac OS X 10.5+). + The file should not be displayed in a GUI (macOS 10.5+). .. data:: SF_ARCHIVED @@ -398,7 +398,7 @@ The following flags can be used in the *flags* argument of :func:`os.chflags`: The file is a snapshot file. -See the \*BSD or Mac OS systems man page :manpage:`chflags(2)` for more information. +See the \*BSD or macOS systems man page :manpage:`chflags(2)` for more information. On Windows, the following file attribute constants are available for use when testing bits in the ``st_file_attributes`` member returned by :func:`os.stat`. diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst index 2de55d86c38f48..6327318eb108da 100644 --- a/Doc/library/sysconfig.rst +++ b/Doc/library/sysconfig.rst @@ -74,7 +74,7 @@ places. Python currently supports seven schemes: -- *posix_prefix*: scheme for POSIX platforms like Linux or Mac OS X. This is +- *posix_prefix*: scheme for POSIX platforms like Linux or macOS. This is the default scheme used when Python or a component is installed. - *posix_home*: scheme for POSIX platforms used when a *home* option is used upon installation. This scheme is used when a component is installed through @@ -225,7 +225,7 @@ Other functions - win-amd64 (64bit Windows on AMD64, aka x86_64, Intel64, and EM64T) - win32 (all others - specifically, sys.platform is returned) - Mac OS X can return: + macOS can return: - macosx-10.6-ppc - macosx-10.4-ppc64 diff --git a/Doc/library/test.rst b/Doc/library/test.rst index 64d767e98fbb42..a8dc35476fc9bd 100644 --- a/Doc/library/test.rst +++ b/Doc/library/test.rst @@ -684,8 +684,8 @@ The :mod:`test.support` module defines the following functions: .. decorator:: requires_mac_version(*min_version) - Decorator for the minimum version when running test on Mac OS X. If the - MAC OS X version is less than the minimum, raise :exc:`unittest.SkipTest`. + Decorator for the minimum version when running test on macOS. If the + macOS version is less than the minimum, raise :exc:`unittest.SkipTest`. .. decorator:: requires_IEEE_754 @@ -1249,7 +1249,7 @@ The :mod:`test.support.threading_helper` module provides support for threading t Context manager catching :class:`threading.Thread` exception using :func:`threading.excepthook`. - Attributes set when an exception is catched: + Attributes set when an exception is caught: * ``exc_type`` * ``exc_value`` @@ -1458,7 +1458,7 @@ The :mod:`test.support.os_helper` module provides support for os tests. .. function:: unlink(filename) Call :func:`os.unlink` on *filename*. On Windows platforms, this is - wrapped with a wait loop that checks for the existence fo the file. + wrapped with a wait loop that checks for the existence of the file. :mod:`test.support.import_helper` --- Utilities for import tests diff --git a/Doc/library/time.rst b/Doc/library/time.rst index 34cb28f1a3cd3e..0f880910c6ee68 100644 --- a/Doc/library/time.rst +++ b/Doc/library/time.rst @@ -351,22 +351,37 @@ Functions Suspend execution of the calling thread for the given number of seconds. The argument may be a floating point number to indicate a more precise sleep - time. The actual suspension time may be less than that requested because any - caught signal will terminate the :func:`sleep` following execution of that - signal's catching routine. Also, the suspension time may be longer than - requested by an arbitrary amount because of the scheduling of other activity - in the system. + time. + + If the sleep is interrupted by a signal and no exception is raised by the + signal handler, the sleep is restarted with a recomputed timeout. + + The suspension time may be longer than requested by an arbitrary amount, + because of the scheduling of other activity in the system. + + On Windows, if *secs* is zero, the thread relinquishes the remainder of its + time slice to any other thread that is ready to run. If there are no other + threads ready to run, the function returns immediately, and the thread + continues execution. + + Unix implementation: + + * Use ``clock_nanosleep()`` if available (resolution: 1 nanosecond); + * Or use ``nanosleep()`` if available (resolution: 1 nanosecond); + * Or use ``select()`` (resolution: 1 microsecond). + + On Windows, a waitable timer is used (resolution: 100 nanosecond). If *secs* is + zero, ``Sleep(0)`` is used. + + .. versionchanged:: 3.11 + On Unix, the ``clock_nanosleep()`` and ``nanosleep()`` functions are now + used if available. On Windows, a waitable timer is now used. .. versionchanged:: 3.5 The function now sleeps at least *secs* even if the sleep is interrupted by a signal, except if the signal handler raises an exception (see :pep:`475` for the rationale). - .. versionchanged:: 3.11 - In Unix operating systems, the ``clock_nanosleep()`` function is now - used, if available: it allows to sleep for an interval specified with - nanosecond precision. - .. index:: single: % (percent); datetime format diff --git a/Doc/library/timeit.rst b/Doc/library/timeit.rst index d4e8b749db4808..7f1c41d46399ed 100644 --- a/Doc/library/timeit.rst +++ b/Doc/library/timeit.rst @@ -233,7 +233,7 @@ Where the following options are understood: .. cmdoption:: -u, --unit=U - specify a time unit for timer output; can select nsec, usec, msec, or sec + specify a time unit for timer output; can select ``nsec``, ``usec``, ``msec``, or ``sec`` .. versionadded:: 3.5 diff --git a/Doc/library/tkinter.ttk.rst b/Doc/library/tkinter.ttk.rst index 6967d7509657b3..2db4c0f9143f64 100644 --- a/Doc/library/tkinter.ttk.rst +++ b/Doc/library/tkinter.ttk.rst @@ -759,7 +759,7 @@ ones inherited from :class:`ttk.Widget`. Platform-specific notes ^^^^^^^^^^^^^^^^^^^^^^^ -* On MacOS X, toplevel windows automatically include a built-in size grip +* On macOS, toplevel windows automatically include a built-in size grip by default. Adding a :class:`Sizegrip` is harmless, since the built-in grip will just mask the widget. diff --git a/Doc/library/types.rst b/Doc/library/types.rst index 88fe47a8d4a7fb..2314b02c7449c0 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -243,7 +243,7 @@ Standard names are defined for the following types: .. note:: A future version of Python may stop setting this attribute by default. - To guard against this potential change, preferrably read from the + To guard against this potential change, preferably read from the :attr:`__spec__` attribute instead or use ``getattr(module, "__loader__", None)`` if you explicitly need to use this attribute. @@ -268,7 +268,7 @@ Standard names are defined for the following types: .. note:: A future version of Python may stop setting this attribute by default. - To guard against this potential change, preferrably read from the + To guard against this potential change, preferably read from the :attr:`__spec__` attribute instead or use ``getattr(module, "__package__", None)`` if you explicitly need to use this attribute. diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst index 130c7d694e8a6a..099d74b2d5eab1 100644 --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -169,8 +169,8 @@ The :mod:`urllib.request` module defines the following functions: This helper function returns a dictionary of scheme to proxy server URL mappings. It scans the environment for variables named ``_proxy``, in a case insensitive approach, for all operating systems first, and when it - cannot find it, looks for proxy information from Mac OSX System - Configuration for Mac OS X and Windows Systems Registry for Windows. + cannot find it, looks for proxy information from System + Configuration for macOS and Windows Systems Registry for Windows. If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. @@ -303,8 +303,8 @@ The following classes are provided: the list of proxies from the environment variables ``_proxy``. If no proxy environment variables are set, then in a Windows environment proxy settings are obtained from the registry's - Internet Settings section, and in a Mac OS X environment proxy information - is retrieved from the OS X System Configuration Framework. + Internet Settings section, and in a macOS environment proxy information + is retrieved from the System Configuration Framework. To disable autodetected proxy pass an empty dictionary. @@ -655,7 +655,7 @@ OpenerDirector Objects optional *timeout* parameter specifies a timeout in seconds for blocking operations like the connection attempt (if not specified, the global default timeout setting will be used). The timeout feature actually works only for - HTTP, HTTPS and FTP connections). + HTTP, HTTPS and FTP connections. .. method:: OpenerDirector.error(proto, *args) @@ -879,6 +879,12 @@ HTTPRedirectHandler Objects response. +.. method:: HTTPRedirectHandler.http_error_308(req, fp, code, msg, hdrs) + + The same as :meth:`http_error_301`, but called for the 'permanent redirect' + response. + + .. _http-cookie-processor: HTTPCookieProcessor Objects diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst index 27e0b51ccf8965..19b3c463bb8174 100644 --- a/Doc/library/webbrowser.rst +++ b/Doc/library/webbrowser.rst @@ -169,7 +169,7 @@ Notes: Only on Windows platforms. (3) - Only on Mac OS X platform. + Only on macOS platform. .. versionadded:: 3.3 Support for Chrome/Chromium has been added. diff --git a/Doc/license.rst b/Doc/license.rst index c36ab3212a104d..cd03411d6c94aa 100644 --- a/Doc/license.rst +++ b/Doc/license.rst @@ -655,7 +655,7 @@ OpenSSL The modules :mod:`hashlib`, :mod:`posix`, :mod:`ssl`, :mod:`crypt` use the OpenSSL library for added performance if made available by the -operating system. Additionally, the Windows and Mac OS X installers for +operating system. Additionally, the Windows and macOS installers for Python may include a copy of the OpenSSL libraries, so we include a copy of the OpenSSL license here:: diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 8afcadbfbcf6b0..5936cdf5ffc304 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -585,8 +585,8 @@ Here's an overview of the logical flow of a match statement: #. If the pattern succeeds, the corresponding guard (if present) is evaluated. In this case all name bindings are guaranteed to have happened. - * If the guard evaluates as truthy or missing, the ``block`` inside ``case_block`` is - executed. + * If the guard evaluates as true or is missing, the ``block`` inside + ``case_block`` is executed. * Otherwise, the next ``case_block`` is attempted as described above. @@ -637,10 +637,10 @@ The logical flow of a ``case`` block with a ``guard`` follows: #. If the pattern succeeded, evaluate the ``guard``. - * If the ``guard`` condition evaluates to "truthy", the case block is + * If the ``guard`` condition evaluates as true, the case block is selected. - * If the ``guard`` condition evaluates to "falsy", the case block is not + * If the ``guard`` condition evaluates as false, the case block is not selected. * If the ``guard`` raises an exception during evaluation, the exception @@ -1055,7 +1055,7 @@ subject value: patterns using the :data:`~object.__match_args__` attribute on the class ``name_or_attr`` before matching: - I. The equivalent of ``getattr(cls, "__match_args__", ()))`` is called. + I. The equivalent of ``getattr(cls, "__match_args__", ())`` is called. * If this raises an exception, the exception bubbles up. diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 181e445bb7bc6e..f1334f047d4b73 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1558,7 +1558,7 @@ Basic customization This is intended to provide protection against a denial-of-service caused by carefully-chosen inputs that exploit the worst case performance of a - dict insertion, O(n^2) complexity. See + dict insertion, O(n\ :sup:`2`) complexity. See http://www.ocert.org/advisories/ocert-2011-003.html for details. Changing hash values affects the iteration order of sets. diff --git a/Doc/reference/import.rst b/Doc/reference/import.rst index 39fcba015b6947..69e2a947274497 100644 --- a/Doc/reference/import.rst +++ b/Doc/reference/import.rst @@ -605,7 +605,7 @@ the module. ``__file__`` is optional (if set, value must be a string). It indicates the pathname of the file from which the module was loaded (if - loaded from a file), or the pathname of the shared libray file + loaded from a file), or the pathname of the shared library file for extension modules loaded dynamically from a shared library. It might be missing for certain types of modules, such as C modules that are statically linked into the interpreter, and the diff --git a/Doc/tools/rstlint.py b/Doc/tools/rstlint.py index 91aed80b1e9a6c..045b7d7c945df5 100755 --- a/Doc/tools/rstlint.py +++ b/Doc/tools/rstlint.py @@ -256,7 +256,7 @@ def hide_comments(lines): """Tool to remove comments from given lines. It yields empty lines in place of comments, so line numbers are - still meaningfull. + still meaningful. """ in_multiline_comment = False for line in lines: diff --git a/Doc/tutorial/appetite.rst b/Doc/tutorial/appetite.rst index 26e5168ab51a7a..3fa68097ee3665 100644 --- a/Doc/tutorial/appetite.rst +++ b/Doc/tutorial/appetite.rst @@ -23,7 +23,7 @@ You could write a Unix shell script or Windows batch files for some of these tasks, but shell scripts are best at moving around files and changing text data, not well-suited for GUI applications or games. You could write a C/C++/Java program, but it can take a lot of development time to get even a first-draft -program. Python is simpler to use, available on Windows, Mac OS X, and Unix +program. Python is simpler to use, available on Windows, macOS, and Unix operating systems, and will help you get the job done more quickly. Python is simple to use, but it is a real programming language, offering much diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst index a495c50cbde880..f1d4957e37eb11 100644 --- a/Doc/tutorial/modules.rst +++ b/Doc/tutorial/modules.rst @@ -191,7 +191,8 @@ named :file:`spam.py` in a list of directories given by the variable file is specified). * :envvar:`PYTHONPATH` (a list of directory names, with the same syntax as the shell variable :envvar:`PATH`). -* The installation-dependent default. +* The installation-dependent default (by convention including a + ``site-packages`` directory, handled by the :mod:`site` module). .. note:: On file systems which support symlinks, the directory containing the input diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst index 2398ab0d0cf262..23a645a036aedf 100644 --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -322,7 +322,7 @@ Miscellaneous options Hash randomization is intended to provide protection against a denial-of-service caused by carefully-chosen inputs that exploit the worst - case performance of a dict construction, O(n^2) complexity. See + case performance of a dict construction, O(n\ :sup:`2`) complexity. See http://www.ocert.org/advisories/ocert-2011-003.html for details. :envvar:`PYTHONHASHSEED` allows you to set a fixed value for the hash @@ -477,7 +477,7 @@ Miscellaneous options * ``-X no_debug_ranges`` disables the inclusion of the tables mapping extra location information (end line, start column offset and end column offset) to every instruction in code objects. This is useful when smaller code - objects and pyc files are desired as well as supressing the extra visual + objects and pyc files are desired as well as suppressing the extra visual location indicators when the interpreter displays tracebacks. See also :envvar:`PYTHONNODEBUGRANGES`. * ``-X frozen_modules`` determines whether or not frozen modules are @@ -656,7 +656,7 @@ conflict. .. envvar:: PYTHONCASEOK If this is set, Python ignores case in :keyword:`import` statements. This - only works on Windows and OS X. + only works on Windows and macOS. .. envvar:: PYTHONDONTWRITEBYTECODE @@ -739,7 +739,7 @@ conflict. If this environment variable is set, ``sys.argv[0]`` will be set to its value instead of the value got through the C runtime. Only works on - Mac OS X. + macOS. .. envvar:: PYTHONWARNINGS @@ -959,7 +959,7 @@ conflict. If this variable is set, it disables the inclusion of the tables mapping extra location information (end line, start column offset and end column offset) to every instruction in code objects. This is useful when smaller - code objects and pyc files are desired as well as supressing the extra visual + code objects and pyc files are desired as well as suppressing the extra visual location indicators when the interpreter displays tracebacks. .. versionadded:: 3.11 diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index a545d5a9372ac0..a59bee4ccf0f6e 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -553,7 +553,7 @@ Built-in modules have no ``__file__`` attribute:: File "", line 1, in AttributeError: module 'sys' has no attribute '__file__' -Other C extensions are built as dynamic libraires, like the ``_asyncio`` module. +Other C extensions are built as dynamic libraries, like the ``_asyncio`` module. They are built with the ``Py_BUILD_CORE_MODULE`` macro defined. Example on Linux x86-64:: diff --git a/Doc/using/mac.rst b/Doc/using/mac.rst index ead71e1b079b3b..2f132a96bef082 100644 --- a/Doc/using/mac.rst +++ b/Doc/using/mac.rst @@ -1,14 +1,14 @@ .. _using-on-mac: -*************************** -Using Python on a Macintosh -*************************** +********************* +Using Python on a Mac +********************* :Author: Bob Savage -Python on a Macintosh running Mac OS X is in principle very similar to Python on +Python on a Mac running macOS is in principle very similar to Python on any other Unix platform, but there are a number of additional features such as the IDE and the Package Manager that are worth pointing out. @@ -17,7 +17,7 @@ the IDE and the Package Manager that are worth pointing out. Getting and Installing MacPython ================================ -Mac OS X 10.8 comes with Python 2.7 pre-installed by Apple. If you wish, you +macOS since version 10.8 comes with Python 2.7 pre-installed by Apple. If you wish, you are invited to install the most recent version of Python 3 from the Python website (https://www.python.org). A current "universal binary" build of Python, which runs natively on the Mac's new Intel and legacy PPC CPU's, is available @@ -54,12 +54,12 @@ section on running Python scripts from the Unix shell. How to run a Python script -------------------------- -Your best way to get started with Python on Mac OS X is through the IDLE +Your best way to get started with Python on macOS is through the IDLE integrated development environment, see section :ref:`ide` and use the Help menu when the IDE is running. If you want to run Python scripts from the Terminal window command line or from -the Finder you first need an editor to create your script. Mac OS X comes with a +the Finder you first need an editor to create your script. macOS comes with a number of standard Unix command line editors, :program:`vim` and :program:`emacs` among them. If you want a more Mac-like editor, :program:`BBEdit` or :program:`TextWrangler` from Bare Bones Software (see @@ -87,7 +87,7 @@ To run your script from the Finder you have two options: Running scripts with a GUI -------------------------- -With older versions of Python, there is one Mac OS X quirk that you need to be +With older versions of Python, there is one macOS quirk that you need to be aware of: programs that talk to the Aqua window manager (in other words, anything that has a GUI) need to be run in a special way. Use :program:`pythonw` instead of :program:`python` to start such scripts. @@ -98,7 +98,7 @@ With Python 3.9, you can use either :program:`python` or :program:`pythonw`. Configuration ------------- -Python on OS X honors all standard Unix environment variables such as +Python on macOS honors all standard Unix environment variables such as :envvar:`PYTHONPATH`, but setting these variables for programs started from the Finder is non-standard as the Finder does not read your :file:`.profile` or :file:`.cshrc` at startup. You need to create a file @@ -148,10 +148,10 @@ X by Apple, and the latest version can be downloaded and installed from https://www.activestate.com; it can also be built from source. *wxPython* is another popular cross-platform GUI toolkit that runs natively on -Mac OS X. Packages and documentation are available from https://www.wxpython.org. +macOS. Packages and documentation are available from https://www.wxpython.org. -*PyQt* is another popular cross-platform GUI toolkit that runs natively on Mac -OS X. More information can be found at +*PyQt* is another popular cross-platform GUI toolkit that runs natively on +macOS. More information can be found at https://riverbankcomputing.com/software/pyqt/intro. diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst index 1d1fa8bd85d7ed..0a1834453a0ee8 100644 --- a/Doc/using/unix.rst +++ b/Doc/using/unix.rst @@ -162,6 +162,7 @@ Custom OpenSSL $ pushd openssl-VERSION $ ./config \ --prefix=/usr/local/custom-openssl \ + --libdir=lib \ --openssldir=/etc/ssl $ make -j1 depend $ make -j8 diff --git a/Doc/whatsnew/2.0.rst b/Doc/whatsnew/2.0.rst index c0a6692049788b..0e1cf1fd0ce46c 100644 --- a/Doc/whatsnew/2.0.rst +++ b/Doc/whatsnew/2.0.rst @@ -791,7 +791,7 @@ Previously the Python virtual machine used 16-bit numbers in its bytecode, limiting the size of source files. In particular, this affected the maximum size of literal lists and dictionaries in Python source; occasionally people who are generating Python code would run into this limit. A patch by Charles G. -Waldman raises the limit from ``2^16`` to ``2^{32}``. +Waldman raises the limit from ``2**16`` to ``2**32``. Three new convenience functions intended for adding constants to a module's dictionary at module initialization time were added: :func:`PyModule_AddObject`, diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst index d19c8e01ad8a00..abb65222ddd3d0 100644 --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -953,12 +953,12 @@ Several performance enhancements have been added: considered and traversed by the collector. (Contributed by Antoine Pitrou; :issue:`4688`.) -* Long integers are now stored internally either in base 2**15 or in base - 2**30, the base being determined at build time. Previously, they - were always stored in base 2**15. Using base 2**30 gives +* Long integers are now stored internally either in base ``2**15`` or in base + ``2**30``, the base being determined at build time. Previously, they + were always stored in base ``2**15``. Using base ``2**30`` gives significant performance improvements on 64-bit machines, but benchmark results on 32-bit machines have been mixed. Therefore, - the default is to use base 2**30 on 64-bit machines and base 2**15 + the default is to use base ``2**30`` on 64-bit machines and base ``2**15`` on 32-bit machines; on Unix, there's a new configure option :option:`!--enable-big-digits` that can be used to override this default. diff --git a/Doc/whatsnew/3.1.rst b/Doc/whatsnew/3.1.rst index 919fbeeb2ad857..f1e6d0c4f3dd68 100644 --- a/Doc/whatsnew/3.1.rst +++ b/Doc/whatsnew/3.1.rst @@ -474,12 +474,12 @@ Build and C API Changes Changes to Python's build process and to the C API include: -* Integers are now stored internally either in base 2**15 or in base - 2**30, the base being determined at build time. Previously, they - were always stored in base 2**15. Using base 2**30 gives +* Integers are now stored internally either in base ``2**15`` or in base + ``2**30``, the base being determined at build time. Previously, they + were always stored in base ``2**15``. Using base ``2**30`` gives significant performance improvements on 64-bit machines, but benchmark results on 32-bit machines have been mixed. Therefore, - the default is to use base 2**30 on 64-bit machines and base 2**15 + the default is to use base ``2**30`` on 64-bit machines and base ``2**15`` on 32-bit machines; on Unix, there's a new configure option ``--enable-big-digits`` that can be used to override this default. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index d1a1cb45dea1f7..b063255bc3e9e4 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -883,7 +883,12 @@ Other Language Changes collisions when creating dictionaries and sets containing multiple NaNs. (Contributed by Raymond Hettinger in :issue:`43475`.) -* A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting the :const:`__debug__` constant. (Contributed by Dong-hee Na in :issue:`45000`.) +* A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting + the :const:`__debug__` constant. (Contributed by Dong-hee Na in :issue:`45000`.) + +* :exc:`SyntaxError` exceptions now have ``end_lineno`` and + ``end_offset`` attributes. They will be ``None`` if not determined. + (Contributed by Pablo Galindo in :issue:`43914`.) New Modules =========== @@ -1578,7 +1583,7 @@ Deprecated * Currently Python accepts numeric literals immediately followed by keywords, for example ``0in x``, ``1or x``, ``0if 1else 2``. It allows confusing - and ambigious expressions like ``[0x1for x in y]`` (which can be + and ambiguous expressions like ``[0x1for x in y]`` (which can be interpreted as ``[0x1 for x in y]`` or ``[0x1f or x in y]``). Starting in this release, a deprecation warning is raised if the numeric literal is immediately followed by one of keywords :keyword:`and`, :keyword:`else`, @@ -1915,7 +1920,7 @@ Changes in the Python API if the *globals* dictionary has no ``"__builtins__"`` key, rather than using ``{"None": None}`` as builtins: same behavior as :func:`eval` and :func:`exec` functions. Defining a function with ``def function(...): ...`` - in Python is not affected, globals cannot be overriden with this syntax: it + in Python is not affected, globals cannot be overridden with this syntax: it also inherits the current builtins. (Contributed by Victor Stinner in :issue:`42990`.) @@ -2305,3 +2310,6 @@ Removed These functions were undocumented, excluded from the limited C API, and were only used internally by the compiler. (Contributed by Victor Stinner in :issue:`43244`.) + +* The ``PyThreadState.use_tracing`` member has been removed to optimize Python. + (Contributed by Mark Shannon in :issue:`43760`.) diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index acc00d867d00c8..ff376d231bafa8 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -205,6 +205,14 @@ math Dickinson in :issue:`44339`.) +operator +-------- + +* A new function ``operator.call`` has been added, such that + ``operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)``. + (Contributed by Antony Lee in :issue:`44019`.) + + os -- @@ -231,12 +239,28 @@ sqlite3 (Contributed by Aviv Palivoda, Daniel Shahaf, and Erlend E. Aasland in :issue:`16379`.) +threading +--------- + +* On Unix, if the ``sem_clockwait()`` function is available in the C library + (glibc 2.30 and newer), the :meth:`threading.Lock.acquire` method now uses + the monotonic clock (:data:`time.CLOCK_MONOTONIC`) for the timeout, rather + than using the system clock (:data:`time.CLOCK_REALTIME`), to not be affected + by system clock changes. + (Contributed by Livius and Victor Stinner in :issue:`41710`.) + time ---- -* In Unix operating systems, :func:`time.sleep` now uses the - ``clock_nanosleep()`` function, if available, which allows to sleep for an - interval specified with nanosecond precision. +* On Unix, :func:`time.sleep` now uses the ``clock_nanosleep()`` or + ``nanosleep()`` function, if available, which has a resolution of 1 nanosecond + (10\ :sup:`-9` seconds), rather than using ``select()`` which has a resolution + of 1 microsecond (10\ :sup:`-6` seconds). + (Contributed by Livius and Victor Stinner in :issue:`21302`.) + +* On Windows, :func:`time.sleep` now uses a waitable timer which has a + resolution of 100 nanoseconds (10\ :sup:`-7` seconds). Previously, it had + a resolution of 1 millisecond (10\ :sup:`-3` seconds). (Contributed by Livius and Victor Stinner in :issue:`21302`.) unicodedata @@ -245,6 +269,68 @@ unicodedata * The Unicode database has been updated to version 14.0.0. (:issue:`45190`). +Optimizations +============= + +* Compiler now optimizes simple C-style formatting with literal format + containing only format codes ``%s``, ``%r`` and ``%a`` and makes it as + fast as corresponding f-string expression. + (Contributed by Serhiy Storchaka in :issue:`28307`.) + +* "Zero-cost" exceptions are implemented. The cost of ``try`` statements is + almost eliminated when no exception is raised. + (Contributed by Mark Shannon in :issue:`40222`.) + +* Method calls with keywords are now faster due to bytecode + changes which avoid creating bound method instances. Previously, this + optimization was applied only to method calls with purely positional + arguments. + (Contributed by Ken Jin and Mark Shannon in :issue:`26110`, based on ideas + implemented in PyPy.) + +* Pure ASCII strings are now normalized in constant time by :func:`unicodedata.normalize`. + (Contributed by Dong-hee Na in :issue:`44987`.) + + +CPython bytecode changes +======================== + +* Added a new :opcode:`CALL_METHOD_KW` opcode. Calls a method in a similar + fashion as :opcode:`CALL_METHOD`, but also supports keyword arguments. Works + in tandem with :opcode:`LOAD_METHOD`. + + +Deprecated +========== + +* The :mod:`lib2to3` package is now deprecated and may not be able to parse + Python 3.10 or newer. See the :pep:`617` (New PEG parser for CPython). + (Contributed by Victor Stinner in :issue:`40360`.) + +* :class:`webbrowser.MacOSX` is deprecated and will be removed in Python 3.13. + It is untested and undocumented and also not used by webbrowser itself. + (Contributed by Dong-hee Na in :issue:`42255`.) + +* The behavior of returning a value from a :class:`~unittest.TestCase` and + :class:`~unittest.IsolatedAsyncioTestCase` test methods (other than the + default ``None`` value), is now deprecated. + +* Deprecated the following :mod:`unittest` functions, scheduled for removal in + Python 3.13: + + * :func:`unittest.findTestCases` + * :func:`unittest.makeSuite` + * :func:`unittest.getTestCaseNames` + + Use :class:`~unittest.TestLoader` method instead: + + * :meth:`unittest.TestLoader.loadTestsFromModule` + * :meth:`unittest.TestLoader.loadTestsFromTestCase` + * :meth:`unittest.TestLoader.getTestCaseNames` + + (Contributed by Erlend E. Aasland in :issue:`5846`.) + + Removed ======= @@ -318,81 +404,6 @@ Removed deprecated since Python 3.2. (Contributed by Hugo van Kemenade in :issue:`45173`.) - -Optimizations -============= - -* Compiler now optimizes simple C-style formatting with literal format - containing only format codes ``%s``, ``%r`` and ``%a`` and makes it as - fast as corresponding f-string expression. - (Contributed by Serhiy Storchaka in :issue:`28307`.) - -* "Zero-cost" exceptions are implemented. The cost of ``try`` statements is - almost eliminated when no exception is raised. - (Contributed by Mark Shannon in :issue:`40222`.) - -* Method calls with keywords are now faster due to bytecode - changes which avoid creating bound method instances. Previously, this - optimization was applied only to method calls with purely positional - arguments. - (Contributed by Ken Jin and Mark Shannon in :issue:`26110`, based on ideas - implemented in PyPy.) - -* :file:`.pdbrc` is now read with ``'utf-8'`` encoding. - -* Pure ASCII strings are now normalized in constant time by :func:`unicodedata.normalize`. - (Contributed by Dong-hee Na in :issue:`44987`.) - - -CPython bytecode changes -======================== - -* Added a new :opcode:`CALL_METHOD_KW` opcode. Calls a method in a similar - fashion as :opcode:`CALL_METHOD`, but also supports keyword arguments. Works - in tandem with :opcode:`LOAD_METHOD`. - - -Build Changes -============= - -* CPython can now be built with the ThinLTO option via ``--with-lto=thin``. - (Contributed by Dong-hee Na and Brett Holman in :issue:`44340`.) - - -Deprecated -========== - -* The :mod:`lib2to3` package is now deprecated and may not be able to parse - Python 3.10 or newer. See the :pep:`617` (New PEG parser for CPython). - (Contributed by Victor Stinner in :issue:`40360`.) - -* :class:`webbrowser.MacOSX` is deprecated and will be removed in Python 3.13. - It is untested and undocumented and also not used by webbrowser itself. - (Contributed by Dong-hee Na in :issue:`42255`.) - -* The behavior of returning a value from a :class:`~unittest.TestCase` and - :class:`~unittest.IsolatedAsyncioTestCase` test methods (other than the - default ``None`` value), is now deprecated. - -* Deprecated the following :mod:`unittest` functions, scheduled for removal in - Python 3.13: - - * :func:`unittest.findTestCases` - * :func:`unittest.makeSuite` - * :func:`unittest.getTestCaseNames` - - Use :class:`~unittest.TestLoader` method instead: - - * :meth:`unittest.TestLoader.loadTestsFromModule` - * :meth:`unittest.TestLoader.loadTestsFromTestCase` - * :meth:`unittest.TestLoader.getTestCaseNames` - - (Contributed by Erlend E. Aasland in :issue:`5846`.) - - -Removed -======= - * The :func:`@asyncio.coroutine ` :term:`decorator` enabling legacy generator-based coroutines to be compatible with async/await code. The function has been deprecated since Python 3.8 and the removal was @@ -430,18 +441,30 @@ Changes in the Python API how universal newlines works. (Contributed by Victor Stinner in :issue:`37330`.) +* The :mod:`pdb` module now reads the :file:`.pdbrc` configuration file with + the ``'utf-8'`` encoding. + (Contributed by Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి) in :issue:`41137`.) + + +Build Changes +============= + +* CPython can now be built with the ThinLTO option via ``--with-lto=thin``. + (Contributed by Dong-hee Na and Brett Holman in :issue:`44340`.) + C API Changes ============= + +New Features +------------ + * Add a new :c:func:`PyType_GetName` function to get type's short name. (Contributed by Hai Shi in :issue:`42035`.) * Add a new :c:func:`PyType_GetQualName` function to get type's qualified name. (Contributed by Hai Shi in :issue:`42035`.) -New Features ------------- - Porting to Python 3.11 ---------------------- diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index f1725e7df02204..941fae5fb87813 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -671,7 +671,7 @@ time On AIX, :func:`~time.thread_time` is now implemented with ``thread_cputime()`` which has nanosecond resolution, rather than -``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms. +``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 milliseconds. (Contributed by Batuhan Taskaya in :issue:`40192`) sys diff --git a/Grammar/python.gram b/Grammar/python.gram index 97114b20f5dc64..4443a5fda7c245 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -1057,7 +1057,7 @@ invalid_arguments: RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, PyPegen_last_item(b, comprehension_ty)->target, "Generator expression must be parenthesized") } | a=NAME b='=' expression for_if_clauses { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?")} - | a=args for_if_clauses { _PyPegen_nonparen_genexp_in_call(p, a) } + | a=args b=for_if_clauses { _PyPegen_nonparen_genexp_in_call(p, a, b) } | args ',' a=expression b=for_if_clauses { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, asdl_seq_GET(b, b->size-1)->target, "Generator expression must be parenthesized") } | a=args ',' args { _PyPegen_arguments_parsing_error(p, a) } diff --git a/Include/cpython/initconfig.h b/Include/cpython/initconfig.h index 65d52c45783f18..05641001bcd749 100644 --- a/Include/cpython/initconfig.h +++ b/Include/cpython/initconfig.h @@ -184,6 +184,7 @@ typedef struct PyConfig { /* --- Path configuration outputs ----------- */ int module_search_paths_set; PyWideStringList module_search_paths; + wchar_t *stdlib_dir; wchar_t *executable; wchar_t *base_executable; wchar_t *prefix; diff --git a/Include/cpython/pytime.h b/Include/cpython/pytime.h index b0453884398cbf..f32148aa8448d8 100644 --- a/Include/cpython/pytime.h +++ b/Include/cpython/pytime.h @@ -1,3 +1,46 @@ +// The _PyTime_t API is written to use timestamp and timeout values stored in +// various formats and to read clocks. +// +// The _PyTime_t type is an integer to support directly common arithmetic +// operations like t1 + t2. +// +// The _PyTime_t API supports a resolution of 1 nanosecond. The _PyTime_t type +// is signed to support negative timestamps. The supported range is around +// [-292.3 years; +292.3 years]. Using the Unix epoch (January 1st, 1970), the +// supported date range is around [1677-09-21; 2262-04-11]. +// +// Formats: +// +// * seconds +// * seconds as a floating pointer number (C double) +// * milliseconds (10^-3 seconds) +// * microseconds (10^-6 seconds) +// * 100 nanoseconds (10^-7 seconds) +// * nanoseconds (10^-9 seconds) +// * timeval structure, 1 microsecond resolution (10^-6 seconds) +// * timespec structure, 1 nanosecond resolution (10^-9 seconds) +// +// Integer overflows are detected and raise OverflowError. Conversion to a +// resolution worse than 1 nanosecond is rounded correctly with the requested +// rounding mode. There are 4 rounding modes: floor (towards -inf), ceiling +// (towards +inf), half even and up (away from zero). +// +// Some functions clamp the result in the range [_PyTime_MIN; _PyTime_MAX], so +// the caller doesn't have to handle errors and doesn't need to hold the GIL. +// For example, _PyTime_Add(t1, t2) computes t1+t2 and clamp the result on +// overflow. +// +// Clocks: +// +// * System clock +// * Monotonic clock +// * Performance counter +// +// Operations like (t * k / q) with integers are implemented in a way to reduce +// the risk of integer overflow. Such operation is used to convert a clock +// value expressed in ticks with a frequency to _PyTime_t, like +// QueryPerformanceCounter() with QueryPerformanceFrequency(). + #ifndef Py_LIMITED_API #ifndef Py_PYTIME_H #define Py_PYTIME_H @@ -14,8 +57,11 @@ extern "C" { store a duration, and so indirectly a date (related to another date, like UNIX epoch). */ typedef int64_t _PyTime_t; +// _PyTime_MIN nanoseconds is around -292.3 years #define _PyTime_MIN INT64_MIN +// _PyTime_MAX nanoseconds is around +292.3 years #define _PyTime_MAX INT64_MAX +#define _SIZEOF_PYTIME_T 8 typedef enum { /* Round towards minus infinity (-inf). @@ -114,13 +160,21 @@ PyAPI_FUNC(_PyTime_t) _PyTime_AsMicroseconds(_PyTime_t t, /* Convert timestamp to a number of nanoseconds (10^-9 seconds). */ PyAPI_FUNC(_PyTime_t) _PyTime_AsNanoseconds(_PyTime_t t); +#ifdef MS_WINDOWS +// Convert timestamp to a number of 100 nanoseconds (10^-7 seconds). +PyAPI_FUNC(_PyTime_t) _PyTime_As100Nanoseconds(_PyTime_t t, + _PyTime_round_t round); +#endif + /* Convert timestamp to a number of nanoseconds (10^-9 seconds) as a Python int object. */ PyAPI_FUNC(PyObject *) _PyTime_AsNanosecondsObject(_PyTime_t t); +#ifndef MS_WINDOWS /* Create a timestamp from a timeval structure. Raise an exception and return -1 on overflow, return 0 on success. */ PyAPI_FUNC(int) _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv); +#endif /* Convert a timestamp to a timeval structure (microsecond resolution). tv_usec is always positive. @@ -130,8 +184,9 @@ PyAPI_FUNC(int) _PyTime_AsTimeval(_PyTime_t t, struct timeval *tv, _PyTime_round_t round); -/* Similar to _PyTime_AsTimeval(), but don't raise an exception on error. */ -PyAPI_FUNC(int) _PyTime_AsTimeval_noraise(_PyTime_t t, +/* Similar to _PyTime_AsTimeval() but don't raise an exception on overflow. + On overflow, clamp tv_sec to _PyTime_t min/max. */ +PyAPI_FUNC(void) _PyTime_AsTimeval_clamp(_PyTime_t t, struct timeval *tv, _PyTime_round_t round); @@ -156,9 +211,18 @@ PyAPI_FUNC(int) _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts); tv_nsec is always positive. Raise an exception and return -1 on error, return 0 on success. */ PyAPI_FUNC(int) _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts); + +/* Similar to _PyTime_AsTimespec() but don't raise an exception on overflow. + On overflow, clamp tv_sec to _PyTime_t min/max. */ +PyAPI_FUNC(void) _PyTime_AsTimespec_clamp(_PyTime_t t, struct timespec *ts); #endif + +// Compute t1 + t2. Clamp to [_PyTime_MIN; _PyTime_MAX] on overflow. +PyAPI_FUNC(_PyTime_t) _PyTime_Add(_PyTime_t t1, _PyTime_t t2); + /* Compute ticks * mul / div. + Clamp to [_PyTime_MIN; _PyTime_MAX] on overflow. The caller must ensure that ((div - 1) * mul) cannot overflow. */ PyAPI_FUNC(_PyTime_t) _PyTime_MulDiv(_PyTime_t ticks, _PyTime_t mul, @@ -175,8 +239,8 @@ typedef struct { /* Get the current time from the system clock. If the internal clock fails, silently ignore the error and return 0. - On integer overflow, silently ignore the overflow and truncated the clock to - _PyTime_MIN or _PyTime_MAX. + On integer overflow, silently ignore the overflow and clamp the clock to + [_PyTime_MIN; _PyTime_MAX]. Use _PyTime_GetSystemClockWithInfo() to check for failure. */ PyAPI_FUNC(_PyTime_t) _PyTime_GetSystemClock(void); @@ -195,8 +259,8 @@ PyAPI_FUNC(int) _PyTime_GetSystemClockWithInfo( results of consecutive calls is valid. If the internal clock fails, silently ignore the error and return 0. - On integer overflow, silently ignore the overflow and truncated the clock to - _PyTime_MIN or _PyTime_MAX. + On integer overflow, silently ignore the overflow and clamp the clock to + [_PyTime_MIN; _PyTime_MAX]. Use _PyTime_GetMonotonicClockWithInfo() to check for failure. */ PyAPI_FUNC(_PyTime_t) _PyTime_GetMonotonicClock(void); @@ -226,8 +290,8 @@ PyAPI_FUNC(int) _PyTime_gmtime(time_t t, struct tm *tm); measure a short duration. If the internal clock fails, silently ignore the error and return 0. - On integer overflow, silently ignore the overflow and truncated the clock to - _PyTime_MIN or _PyTime_MAX. + On integer overflow, silently ignore the overflow and clamp the clock to + [_PyTime_MIN; _PyTime_MAX]. Use _PyTime_GetPerfCounterWithInfo() to check for failure. */ PyAPI_FUNC(_PyTime_t) _PyTime_GetPerfCounter(void); @@ -242,6 +306,15 @@ PyAPI_FUNC(int) _PyTime_GetPerfCounterWithInfo( _PyTime_t *t, _Py_clock_info_t *info); + +// Create a deadline. +// Pseudo code: _PyTime_GetMonotonicClock() + timeout. +PyAPI_FUNC(_PyTime_t) _PyDeadline_Init(_PyTime_t timeout); + +// Get remaining time from a deadline. +// Pseudo code: deadline - _PyTime_GetMonotonicClock(). +PyAPI_FUNC(_PyTime_t) _PyDeadline_Get(_PyTime_t deadline); + #ifdef __cplusplus } #endif diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h index 95b76cecd6f4f2..b40e2ea1011f5c 100644 --- a/Include/cpython/unicodeobject.h +++ b/Include/cpython/unicodeobject.h @@ -416,7 +416,7 @@ enum PyUnicode_Kind { /* Fast check to determine whether an object is ready. Equivalent to - PyUnicode_IS_COMPACT(op) || ((PyUnicodeObject*)(op))->data.any) */ + PyUnicode_IS_COMPACT(op) || ((PyUnicodeObject*)(op))->data.any */ #define PyUnicode_IS_READY(op) (((PyASCIIObject*)op)->state.ready) diff --git a/Include/internal/pycore_fileutils.h b/Include/internal/pycore_fileutils.h index c1c9244a1bc7c4..8491ed9b5ffe20 100644 --- a/Include/internal/pycore_fileutils.h +++ b/Include/internal/pycore_fileutils.h @@ -10,6 +10,12 @@ extern "C" { #include /* struct lconv */ +// This is used after getting NULL back from Py_DecodeLocale(). +#define DECODE_LOCALE_ERR(NAME, LEN) \ + ((LEN) == (size_t)-2) \ + ? _PyStatus_ERR("cannot decode " NAME) \ + : _PyStatus_NO_MEMORY() + PyAPI_DATA(int) _Py_HasFileSystemDefaultEncodeErrors; PyAPI_FUNC(int) _Py_DecodeUTF8Ex( @@ -33,6 +39,9 @@ PyAPI_FUNC(wchar_t*) _Py_DecodeUTF8_surrogateescape( Py_ssize_t arglen, size_t *wlen); +extern int +_Py_wstat(const wchar_t *, struct stat *); + PyAPI_FUNC(int) _Py_GetForceASCII(void); /* Reset "force ASCII" mode (if it was initialized). @@ -65,6 +74,12 @@ extern int _Py_EncodeNonUnicodeWchar_InPlace( Py_ssize_t size); #endif +extern wchar_t * _Py_join_relfile(const wchar_t *dirname, + const wchar_t *relfile); +extern int _Py_add_relfile(wchar_t *dirname, + const wchar_t *relfile, + size_t bufsize); + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_import.h b/Include/internal/pycore_import.h index e21ed0a7a06a2a..6439b7369fb593 100644 --- a/Include/internal/pycore_import.h +++ b/Include/internal/pycore_import.h @@ -10,6 +10,13 @@ extern PyStatus _PyImport_ReInitLock(void); #endif extern PyObject* _PyImport_BootstrapImp(PyThreadState *tstate); +struct _module_alias { + const char *name; /* ASCII encoded string */ + const char *orig; /* ASCII encoded string */ +}; + +extern const struct _module_alias * _PyImport_FrozenAliases; + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index 86474103290599..d8edf07bfb4a6f 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -168,7 +168,7 @@ _PyObject_IS_GC(PyObject *obj) // Fast inlined version of PyType_IS_GC() #define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) -// Usage: assert(_Py_CheckSlotResult(obj, "__getitem__", result != NULL))); +// Usage: assert(_Py_CheckSlotResult(obj, "__getitem__", result != NULL)); extern int _Py_CheckSlotResult( PyObject *obj, const char *slot_name, diff --git a/Include/internal/pycore_pathconfig.h b/Include/internal/pycore_pathconfig.h index 15447f54490fb4..a258aab2397660 100644 --- a/Include/internal/pycore_pathconfig.h +++ b/Include/internal/pycore_pathconfig.h @@ -13,6 +13,7 @@ typedef struct _PyPathConfig { wchar_t *program_full_path; wchar_t *prefix; wchar_t *exec_prefix; + wchar_t *stdlib_dir; /* Set by Py_SetPath(), or computed by _PyConfig_InitPathConfig() */ wchar_t *module_search_path; /* Python program name */ diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h index a5e97fe23fb05e..0f4d41c7e0bab8 100644 --- a/Include/internal/pycore_pyerrors.h +++ b/Include/internal/pycore_pyerrors.h @@ -90,6 +90,12 @@ extern PyObject* _Py_Offer_Suggestions(PyObject* exception); PyAPI_FUNC(Py_ssize_t) _Py_UTF8_Edit_Cost(PyObject *str_a, PyObject *str_b, Py_ssize_t max_cost); +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalRefcountErrorFunc( + const char *func, + const char *message); + +#define _Py_FatalRefcountError(message) _Py_FatalRefcountErrorFunc(__func__, message) + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h index 524be9d4cbb940..4f12fef8d65466 100644 --- a/Include/internal/pycore_pylifecycle.h +++ b/Include/internal/pycore_pylifecycle.h @@ -122,6 +122,7 @@ PyAPI_FUNC(PyStatus) _Py_PreInitializeFromConfig( const PyConfig *config, const struct _PyArgv *args); +PyAPI_FUNC(wchar_t *) _Py_GetStdlibDir(void); PyAPI_FUNC(int) _Py_HandleSystemExit(int *exitcode_p); diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 4b894f3eff4967..aef318989aa6e5 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -30,6 +30,17 @@ _Py_IsMainInterpreter(PyInterpreterState *interp) } +static inline const PyConfig * +_Py_GetMainConfig(void) +{ + PyInterpreterState *interp = _PyRuntime.interpreters.main; + if (interp == NULL) { + return NULL; + } + return _PyInterpreterState_GetConfig(interp); +} + + /* Only handle signals on the main thread of the main interpreter. */ static inline int _Py_ThreadCanHandleSignals(PyInterpreterState *interp) diff --git a/Include/opcode.h b/Include/opcode.h index f52ba5dbf79330..92a364c7594af2 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -168,6 +168,7 @@ extern "C" { #define LOAD_FAST__LOAD_CONST 140 #define LOAD_CONST__LOAD_FAST 143 #define STORE_FAST__STORE_FAST 149 +#define DO_TRACING 255 #ifdef NEED_OPCODE_JUMP_TABLES static uint32_t _PyOpcode_RelativeJump[8] = { 0U, diff --git a/Include/patchlevel.h b/Include/patchlevel.h index f37c4d48e37607..591b41736f338e 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -20,10 +20,10 @@ #define PY_MINOR_VERSION 11 #define PY_MICRO_VERSION 0 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA -#define PY_RELEASE_SERIAL 0 +#define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "3.11.0a0" +#define PY_VERSION "3.11.0a1+" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Include/pythread.h b/Include/pythread.h index bb9d86412218ad..1a6092c4ad0be2 100644 --- a/Include/pythread.h +++ b/Include/pythread.h @@ -61,9 +61,11 @@ PyAPI_FUNC(int) _PyThread_at_fork_reinit(PyThread_type_lock *lock); convert microseconds to nanoseconds. */ # define PY_TIMEOUT_MAX (LLONG_MAX / 1000) #elif defined (NT_THREADS) - /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */ -# if 0xFFFFFFFFLL * 1000 < LLONG_MAX -# define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000) + // WaitForSingleObject() accepts timeout in milliseconds in the range + // [0; 0xFFFFFFFE] (DWORD type). INFINITE value (0xFFFFFFFF) means no + // timeout. 0xFFFFFFFE milliseconds is around 49.7 days. +# if 0xFFFFFFFELL * 1000 < LLONG_MAX +# define PY_TIMEOUT_MAX (0xFFFFFFFELL * 1000) # else # define PY_TIMEOUT_MAX LLONG_MAX # endif diff --git a/Lib/__phello__.foo.py b/Lib/__phello__.foo.py deleted file mode 100644 index 8e8623ee1daacb..00000000000000 --- a/Lib/__phello__.foo.py +++ /dev/null @@ -1 +0,0 @@ -# This file exists as a helper for the test.test_frozen module. diff --git a/Lib/__phello__/__init__.py b/Lib/__phello__/__init__.py new file mode 100644 index 00000000000000..d37bd2766ac1c6 --- /dev/null +++ b/Lib/__phello__/__init__.py @@ -0,0 +1,7 @@ +initialized = True + +def main(): + print("Hello world!") + +if __name__ == '__main__': + main() diff --git a/Lib/__phello__/ham/__init__.py b/Lib/__phello__/ham/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/Lib/__phello__/ham/eggs.py b/Lib/__phello__/ham/eggs.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/Lib/__phello__/spam.py b/Lib/__phello__/spam.py new file mode 100644 index 00000000000000..d37bd2766ac1c6 --- /dev/null +++ b/Lib/__phello__/spam.py @@ -0,0 +1,7 @@ +initialized = True + +def main(): + print("Hello world!") + +if __name__ == '__main__': + main() diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py index 326b36d6116314..aa66c8b9f4189f 100644 --- a/Lib/_osx_support.py +++ b/Lib/_osx_support.py @@ -481,7 +481,7 @@ def customize_compiler(_config_vars): This customization is performed when the first extension module build is requested - in distutils.sysconfig.customize_compiler). + in distutils.sysconfig.customize_compiler. """ # Find a compiler to use for extension module builds diff --git a/Lib/contextlib.py b/Lib/contextlib.py index 8343d7e5196713..d90ca5d8ef9886 100644 --- a/Lib/contextlib.py +++ b/Lib/contextlib.py @@ -191,6 +191,14 @@ class _AsyncGeneratorContextManager( ): """Helper for @asynccontextmanager decorator.""" + def __call__(self, func): + @wraps(func) + async def inner(*args, **kwds): + async with self.__class__(self.func, self.args, self.kwds): + return await func(*args, **kwds) + + return inner + async def __aenter__(self): # do not keep args and kwds alive unnecessarily # they are only needed for recreation, which is not possible anymore @@ -545,10 +553,10 @@ def _fix_exception_context(new_exc, old_exc): # Context may not be correct, so find the end of the chain while 1: exc_context = new_exc.__context__ - if exc_context is old_exc: + if exc_context is None or exc_context is old_exc: # Context is already set correctly (see issue 20317) return - if exc_context is None or exc_context is frame_exc: + if exc_context is frame_exc: break new_exc = exc_context # Change the end of the chain to point to the exception @@ -685,10 +693,10 @@ def _fix_exception_context(new_exc, old_exc): # Context may not be correct, so find the end of the chain while 1: exc_context = new_exc.__context__ - if exc_context is old_exc: + if exc_context is None or exc_context is old_exc: # Context is already set correctly (see issue 20317) return - if exc_context is None or exc_context is frame_exc: + if exc_context is frame_exc: break new_exc = exc_context # Change the end of the chain to point to the exception diff --git a/Lib/difflib.py b/Lib/difflib.py index 0dda80d3875739..480bad2224c8e1 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -115,38 +115,6 @@ class SequenceMatcher: case. SequenceMatcher is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear. - - Methods: - - __init__(isjunk=None, a='', b='') - Construct a SequenceMatcher. - - set_seqs(a, b) - Set the two sequences to be compared. - - set_seq1(a) - Set the first sequence to be compared. - - set_seq2(b) - Set the second sequence to be compared. - - find_longest_match(alo=0, ahi=None, blo=0, bhi=None) - Find longest matching block in a[alo:ahi] and b[blo:bhi]. - - get_matching_blocks() - Return list of triples describing matching subsequences. - - get_opcodes() - Return list of 5-tuples describing how to turn a into b. - - ratio() - Return a measure of the sequences' similarity (float in [0,1]). - - quick_ratio() - Return an upper bound on .ratio() relatively quickly. - - real_quick_ratio() - Return an upper bound on ratio() very quickly. """ def __init__(self, isjunk=None, a='', b='', autojunk=True): @@ -837,14 +805,6 @@ class Differ: + 4. Complicated is better than complex. ? ++++ ^ ^ + 5. Flat is better than nested. - - Methods: - - __init__(linejunk=None, charjunk=None) - Construct a text differencer, with optional filters. - - compare(a, b) - Compare two sequences of lines; generate the resulting delta. """ def __init__(self, linejunk=None, charjunk=None): diff --git a/Lib/distutils/command/check.py b/Lib/distutils/command/check.py index ada250064678ee..73a30f3afd84a3 100644 --- a/Lib/distutils/command/check.py +++ b/Lib/distutils/command/check.py @@ -83,7 +83,7 @@ def check_metadata(self): name, version, URL Recommended fields: - (author and author_email) or (maintainer and maintainer_email)) + (author and author_email) or (maintainer and maintainer_email) Warns if any are missing. """ diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py index 6934e964abd69b..a7976fbe3ed924 100644 --- a/Lib/distutils/msvc9compiler.py +++ b/Lib/distutils/msvc9compiler.py @@ -673,7 +673,7 @@ def manifest_get_embed_info(self, target_desc, ld_args): # If a manifest should be embedded, return a tuple of # (manifest_filename, resource_id). Returns None if no manifest # should be embedded. See http://bugs.python.org/issue7833 for why - # we want to avoid any manifest for extension modules if we can) + # we want to avoid any manifest for extension modules if we can. for arg in ld_args: if arg.startswith("/MANIFESTFILE:"): temp_manifest = arg.split(":", 1)[1] diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py index f0792de74a1a48..d00c48981eb6d6 100644 --- a/Lib/distutils/unixccompiler.py +++ b/Lib/distutils/unixccompiler.py @@ -215,7 +215,8 @@ def library_dir_option(self, dir): return "-L" + dir def _is_gcc(self, compiler_name): - return "gcc" in compiler_name or "g++" in compiler_name + # clang uses same syntax for rpath as gcc + return any(name in compiler_name for name in ("gcc", "g++", "clang")) def runtime_library_dir_option(self, dir): # XXX Hackish, at the very least. See Python bug #445902: diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 651f876e24bc8b..94f1b6604cb7ab 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -10,8 +10,8 @@ __all__ = ["version", "bootstrap"] _PACKAGE_NAMES = ('setuptools', 'pip') -_SETUPTOOLS_VERSION = "57.4.0" -_PIP_VERSION = "21.2.3" +_SETUPTOOLS_VERSION = "58.1.0" +_PIP_VERSION = "21.2.4" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), ("pip", _PIP_VERSION, "py3"), @@ -41,7 +41,7 @@ def _find_packages(path): # comparison since this case should not happen. filenames = sorted(filenames) for filename in filenames: - # filename is like 'pip-20.2.3-py2.py3-none-any.whl' + # filename is like 'pip-21.2.4-py3-none-any.whl' if not filename.endswith(".whl"): continue for name in _PACKAGE_NAMES: @@ -51,7 +51,7 @@ def _find_packages(path): else: continue - # Extract '20.2.2' from 'pip-20.2.2-py2.py3-none-any.whl' + # Extract '21.2.4' from 'pip-21.2.4-py3-none-any.whl' version = filename.removeprefix(prefix).partition('-')[0] wheel_path = os.path.join(path, filename) packages[name] = _Package(version, None, wheel_path) diff --git a/Lib/ensurepip/_bundled/pip-21.2.3-py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.2.3-py3-none-any.whl deleted file mode 100644 index d417df63d9ec1933c4204682b9931aa385f2b187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1563443 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

rCssi!kO4wr;`PHdL*0h9uv6 zG7#Rznk}^l!>67J?AompS*TT!py&cOvaLpKIucw*RugiqGnIue%OHS*EZQO*Ht6`E zo*n!6f%i>W&sg=*b%VL7pP!+8hd7czASoo*@i}qfoJa=>%jZa605OD?Ju}jD1w{p4 z&O}en8t#K8#B>$(ZbVop^GgoXADpe$z5RR0Gu~FylsLm(nvaHH!XR;ohV?omVt`uN$>e7t^=z}0R#KnZ{Z#UH!2NeRZN zjx5}ixO8>$@p^Xex6z_gYA}F?6R&`Hv|!6>STY;P<@NoP{k928;`RT$#%9w#rocWN zi!;0P7l062|2Ue!2l#hK*W3C2uMaWuZdU*H@9E+<>iF^MVdSh~aPvZ6UM`kDdq$6Z zjNDv&>`uOnwQgXqJd=EvI2wM(J_S=|v@i-RFv_vb6HryKn z28ALlh7K284OAw90l%4Gh(uIx7es78?bI_P@}?eA-p|~a_B}BwXU3~)f+|Izc;H|t zF2;gXqR2!w@Da1QwSR(ik3<>{C^b}{N^TxkL2E|wND7h#l%B2=$Q=IPbDF-(Z*d3G z58w8ktK!TO_a-7MF2b+~G+h>=6y9-8m!+*jrCECPXB?sz3Crh90?`0H2f#;^M`-wUCu zW=wI6@70TQK#1S0cAY*rhs%|oR}Ty+K9jZRiy5Otq2{!7T^cZti}P;iSX}2#)GV$l zTIAaA!vU2kt0?o(M`on;#vNq*0DB3|9sgerxCt8&LS`NyOLEGnfF`VB&BM0=2{%cv zO1`VUPSCyOnM^a!_8eh0yCtD;&v%8xOf53K0d~7T^@slmEG+j;L!V=7`6OaHsR3O6 zMT=b&8TeP&jWYxCzJIoZFFnq0>0F*(r-0-y0R_wGJ$~_aK|z@%he-YAZXQ?a@9?wO z*9an}JkQgkq`VIdY0?VrCf4)UTf}xh;Ec%mDjY7vnRE<_193%6Nv@ajELpm$P1chU zBg$>`vTBASCbm%Spx9DNFoB1hQu7IDXQss$Y-)H<0a_f(^5J4F>KmF;d&!xE`+(~F zsybS4n2mq4DC+?tk6e*hj~-pn#zJDCDBx_3+aRDhoIUa=z!r5ZnvE8iYZf?b$NhV- zh?T7l(DP_EeL|3Pb?2s@V4a!>RtU2DY{Sbxssb{CtC%7^bzT)10w!^G$9*jB?V>Rt zo_at4M@5HBibu?8O{2p$3mp7UwrEe3{IE;@B)%miov=lY#Ztp-Nk#LpeX3;DrL>oK zip1MaE**LgS}Fo7Oh7O!<7fo>4m!Oto-)?=YGfW&gBD1~={VGV)WEb$U5YSHQ>e2{ zQg0pOG~q7UJ_6dKs{lWsW8lG7n*oSR&cb)ZwIi@xjl)n&5f-sB7Sx%8CP#lFj7S5L zO5-=)WyU_b0bc2T2t}vI+ud(tSc$;4tznOdKte3@owwU)mK{zBM@s~MIb7poa|kuA zn|M}hVYDFNxos!Z{Q%$~S)+MiVmgdQ4Nje#4a*|=Jk0O7{t)~lMHuGlrO|`D1wS?+ zp;5ZplK?LmtPu%Ex9tY19;&3_bq=$t^Ns+m61?6)X5MM3+L#?%v$!5Wh#IuFZPC^X zYy122x8Ts4m-2vJs#oH7lT#l=&q(;431f8^rM>~nXOdXv_xOEBzGsjK;0r_iXT7!C zYdCLn&U1^|i+Xpvq`>@3Op?iCqRs0p@j7Qoi~pqVm_`l~7;U7#!%KR#XDYq3z)ts! zU@k0;&t?WPWIut9QMU|M5=9zQ1m?{Fa6h~8HQf=3X24l035j`F-kjsGseR$@t_r^GN?2%D`aN&K zi3DTgP+*>-ng1il^V4}>V)g^$<+h-CU086v@LAg&8t=q^8CZx{{|I!(fpFdfzm1=^ z_sZ*C^lGorf?GIhmvHT#Fl44GsD<^Eg>8@INFhDl=Rv*Yy@pp#bl$N)u3XKKVYypE zI2t$Eo%;|0DLwi^{6^~Vz4Y<+KF|X?MZ zHD6Z~(Ug)9V+U7eh*->iZ7tUQ^-({6sA#O$bG4U4i1++-?c;MFRi;r>V-I0Ml#DkQ zx`)2i1gy9(=5k+B*^pHXiM{MXVl$r2?F2ou!q=57KzRZ8Q+#L0Q#XfMM}Z4WhG5{( z+;kx!7%e=?q3e+%P~tzJz?{UYbWd%1h1>(rQrjjYsvC{QK>V<{UyLe2I7l%(*3Ji3 za!K#=Q}ZHS09?34bToplQNuT9i~fuY0g&fZcYW`4qD7!SL#}PKnI(hRhE0W1#LfZ4 z2bIF8R^wbc)kbfzx-Em!`;CI)QJVBUOlt}gh!=StT^c0!if|=1 zuU+Anyn>SZt509tPdpn2p9sKt*A8N|H*+8u6SUE^$arTG$Ypy~Iu>bZizM4X@KWI* zAQVy(-LF9@Gm6iaIV)&x$m2dG}*3ma5K%9#z zl+)o3s_0)^r-_yl`Us$FsdL$-&B?&Qco>b99$+GVXy@bHrWPrCM!czaCrIqY+n)W( zcEWR!ihbni){$h-}e*&`T07F6n$s`@SJcBlDw#X>CrkEw7O_iHhsKA_{ z4rVGE!Tks#k!H=HL+Hk?3dmWUH7{&jT$DZ!`Zf-v%xWo6*eK>uB?2?&0S#K zOeCG<(p5QPYvUW(tGyK&J&aU9!=>5{Ei~?{cQRre2B4xZaOZsIxz78*PfO6uCf#n> zqM^65*ayJV+4ixEL}2cn$lfJ@0h(1eefh>mJt$MbwD;z?8cbA_U^! zS7^novP$6!=hdDq=?kAQ-2)oJuvkiDs7%vMRysN$a!oWuz38E~3-xJ$NYk2#4VIjJ z_`}ObSXRp23)qpka&$mlz!bJ#ZbLuQ1g<&P4tC$4eZ9Q#aFxgo7LE`Ec?9}5EW?sl zh5z6#)vU{rA_6r?CZ4M%zDXeW_Vt;zq#I!&Q*f%As>R=;;m>m~u^ zpwSvIr>&b1=A*J-B6<_KQSqG4qo0)L3H2jX&!8H-qcDpz*bYG2xr}KOCXR8yZ5^3T z_^(w8+%Z%duoE^nD-v|H8CHdVdp{oG#ho!i)|d7C6pGsiz>B+ik=i05{RNEYQ5!5O}GiLw&-$WfGHN>C&Dt3BL=5u zR}Q=-#RT@L)~RpTCplik!fqq~WNP#ln}M1txlfH8nS(cNV%1J>d#5N!hR$#$t!GCb zdjoz0lc6E(gjF-VNY#T-Z2)6sCU0um+Y6$E{bdm>Wmm)5qB!!?(?w)(m6BKBre=ityE%U>!c)c z)A{Bpc}$Sp7GcceiG^90O<^jmF8Yic%f`70W(MVs=P-DsfaiLbhYnjAEYv_}Nc|WEh16eXyTb2W<9#_&UcXO@OV- zmTlYavRzNvwr$(CZQHhuF5Bv|ZT0k>n23q{M$CN4pOAU-#M)~!4;jy+LZzKikluop z@$h$D(77PU$)3^M(=fuR1h2xGK?bVIDl?$R&-LzRyRW-f@%Zk$6H&|f&1MUbg)Cvw zrE4uDlF|zz(kQWvg_~ej(fQcudm-qD`8QWLAFhon>g8eRZ(^bu-r_SB+V&AMK0ij<&JWx zPH8#&o$*;y9-9KYs((yZe=TQ7O*WbZW3$X-EUMY_MMuKyC+Cj``}(_v4k1+=4RTFm zHo#oDO_3-B$i@kb~*_1f{F?09*f~r zH#thd1rJFr&`fBhO3iOxNuB$swTmtkLj0nA?R(ER?>F^_+JtcRQaF7EM&KT>+tVd? zLlsa^A=NGgsbRX4M7rG-HE?!Uuf5&dQB|HVYB1ZGHPs0ObYZA!kEeF<2NZ`7kAwwd z_IuwSj5cHT``;e`t*URZ2JWtN+shbYrRKf4$6TWuUpqHeA5Hcfd_`xdEfF)rr`<$^ z*d+_z-sCZ%V*;atq1V(3F_#c#N`{dGsCX;=0l-9TC&!FZ*OM@X9xP5TTMW0I>T+;F z0U9@DATfbD>pObS`5vU79E3_m_x4QlMN6}mnAJu4$}ek(_Kih?Gr}#w`3Lmngod#i z!k9)fImlZ2=c)m(Tg>B4-|KG*8mjQ#8^)jg8|D|cG%|t-0jN|;$Dr0f=U{1bQC*CI z35Izb7Yy#})d~WatI6cj&+0fXSZ$xp@Dcvv3_~KinI2l}Fx*w6B1iamM0G%-_Kh(& zGv`yHTA=Az^aCiwtw;%X?@)=bAK^d0?jdKHoDR*1>@Mi#BUx+QO?aMuN<>3Q!#Xv; zq9P+BKUVJIWg%Cj?<7`rG7D8Am^d^cdu;^}YJO6{CK4kk@FKZ1#sX4I+3%Ji`~%3e;`9{B$(ZSGOf!tLo8%c+P7?|93+OI$`TU;# z{-oe+Mik$uDXQ zd-^yfWo1sUe0AEajBl?=JG*M>=)*(E%&3yYl~{hs&-nM>j8y{%WohdBxK?dyLWAJ| ziWlqy%onnABiL#oNu?Ao=@#=qfRM;PM6uZ&ynluSie1eAe|R>DA{ti$jRrU`U8U0TY`C3?DB9Aj{;}45(8{rk%3!aJ>aonOnz+0$ zPh@-7%dzo-{{~)lIqd(PpTAf#^(iRwPSkI*_J}0%I#Vn_#^Jl`YLmuL`Nm-D{mfZ^ z$r$wBb?zolQ!+a>%&F;8V6gydOO_s9MbEOJbIC4XFt~Kmb+HA3X@dW~{-jXl_U5uBDMCg> zGqz)Vc&AD$vo5sv!?eFZxxF6qNxJr`xu+_S@P}EVDkWY?&4a2VI~S=HlCF4&DCB1S z`C34PNi2-x)YMF>xp4=ydHYm72;J?y16BxBEbMQSaPetjLEj2ELt*83x{URKxFmI# zp2Wdgt!pBcd@HCOv@y?AsNLu;4+xW|L{h|PHCyAXJB3q&-nXzuEfDB*I5md8i*JRthl2h|FV zG{~c;psAyn67!Ur#_i*rRAVG_?Am%mvyyyJOOdL}PcCU7Jy{uM^yn{ODHYV?y0*l- z$%4Y?5{E(lp0H9HQ{!QIS^dbs$qJyxY_X+4a=w@O(dz`bqT&sMY!>Qg13-uA->Odw zhD6XB(nvlJl-OF}ED_8C0XccD1# zX80l#zMyp>j%c&!774+G%JW>+`J;pjhKtNiH&OVE1#a}EOokr1I~dUk01P`0;~|3Q zatEllSw7*ykm3Wh4W7b`!4#-+iFo%H4&l)1)+vViyQw!8DN=Rs0DJ?oaU-eGr6^sU zb3<%~9N{tiRk4>vAX+w4cwR!T3iyq=xMZR+%0hxVIpn}=^X9^YZGfYyaT*gCV$m++ zHgE*2@k5XCy5}5CU?U~O!EFuwhRAJz(CUIw)b^-10>D}kbHQ|L6~Jk7(+ERlk8QIo zy(ipCxHYC}VaeVYwde$+0&bZm*&MJkHVf)nT{sF(XD(juN@iJ$FbfDrcD&;Ua?@^4 ze=lbjnjx77lU0qh-r}6ciGU;kevfH(4%FQ|1=7my1%tg9{e|i6%Z|sr-pyh`%oN%y zkByXoR**sX4 z>BUwemV2IhE6N{0)dmZ~$oBIbHaw?EmRX^q0Usff^QUg>Ec-e+}P^5 z0n6Aenm>Rij#tOSeAS3wsE&jsysO>{wm-Ls1qQ7J%^3@<;Sb3!>QT1PdDOv4aaPnT zq6am)rfP?juyN1R6{E@XnM0RB;@oLqW^AwHWiT=grG*3f1>7<`R04uiLoovaYS`2S z%oM19U`hIQX7zpyXssZ;3VC{8X<3L`%E!sr@TXF95U%`-sxa3(m?z4R-xt&Oei6U0 zrOv=f-L(Q`C4~^I0j%||Ev8m@YpWkf54SCk-bIz8_8TbKAUFXz3*EC3HEXY<`?6Gt z^6>;J#CxfL8s-StC3Ow(c6^^>Lt5fwdh#|R*v-TOa?P|_(P`rR|DD7s#O)^w3pw1Z%nCQi{OfP|?A>GpbkkPHX z!n!9e>A@hCdy(}A!r3TT<->y+89Pzn(Rk=u4$8JFHpx*0&FxDWLZ$w;hA8oZ0s2BI z!0(4@7kj$tg`8A{2ToE43g}5<#H*tNK|7@!aPUJ7+3JQQZ6^f>C>eNLDbGuo*be9h zNbMqkX%eqBdIgY;ic>LEA+tjHkU^+`CV+;jzsg+FR1_!a-Mx)E1GVr?tV6N77?Drd zg|l%>Z`D~t2Jp36Bgm0$f$fBY^g4-#rlRkGD5wSFeSQBqn_#p(s#bsvXRG+S_$QxdZ99Y!7#6fiq1Y3m#PvUaMbZ-$7{>3RUPKB09F4qG|iEpeE z>r?%nwL)cOcv3$mfrXBCUH1=A*b@|(8r9FSf*dWrMjXWDCGYB=+N`{m$L(GJ3^&QM zK-I3wfISeis9&2TVv91eCX+r*{k3|+z%8%=kTkXkAq>7u*iE$$4r@fFk4SwDg5m3EPSS1iW| zRE>19+`JQS9?o|%&R2nfhd6>s(DO$sY{6}r_0*OxOB13eSf!1w$MnG5C0nX!0V7s) zR%pce))0EPA+K!btYnr|3gKG7U<%a`x<<;rZxaQ&rf-Swe=BqA*@@3 zxFkA$@DexQI=?=2V!e9K^Yx*(+5Lvj5qc5HZ3e0tss{C|QMIeLG;n)oh8`)D@kH&n zwlr8O{pteAySO$R)AtF#7RIz!a3M@7UqMB(Q?wbl7nrDsV(95b5K8S|h$JWs2VO1a zfra&B_cntJI&0kBEeaUfy2Mf#Pz0zYI#VcxHwk%0Mv3G_6Y)vstg_GF0CqZgKz&$E zbr!_L06;u@VF!{1$Gf=3?cb+UEvB|47$ybC;5%_rONz6XpY*R(-!0=MoU!cbq-JVa zd{RAfKFWN4PWWD>`M}!g3+mL9(sZ2c+OUKUYyr)Z0eY$B)5J3lZqw+z9vexU?RTma z9kDcBmu}g)6aL_yi|1(r`r4$I4T9cDe=l>?AOFCJkkoRiDFBM=Nl?u&x3JX$fn|BCw!!g>1Q_5q7@iH zd0+Rw;rz_2l;AZD}YjH-VS>~jQRHQ9dtKjqSs0b$IN@1 z?Ucmv8WF=1nz|IKo*DD~3>XHy88n8mYpk@VU)}n4CrFT`z5gN-zC}T5+yv%^R1sp2 z%?d{Lh6xNdXSv5gsH23wTa|_16=I4-a3tB#*eOzZ2x+D$+K7@|!mQv_K|+kl(^(c! z7lhCzA-d7*?}|XK9Am6pTN5^K)@!igW|r~(ikvbCV7Sv$K$Zim{c z$gswmkWrkcQoO;b;pCDy(GJ1-pLec}mgheFu?kd9&}|biGN)&5R@X4F^fxTY&?ipa z{eSn11{nue>8V9HiaPb<>H0-Jlf;U4sYUQ+78US|iJHa+f!Z3{(@>-fS_RE0&1MXH~>{V)9?}df3=lDx8rDgs)B2 z6k77x&ZlY+*Ql%|p)8wVr?U~n(n@t~qGP=pc!#%`7pcvA84c2{scJ%uXl1Llz04C< z$#~E-LQsFk;9mxnfBv)8{;rMJzjL$NdH(G&eQ+muA+)^b7b<@cY`H$MIgz8o6!gUX zu$Tn2V`wDJVh^BmEm}iZCybye3^FSStQ7ms)Sj zr<>2%@<_4c3i7WYGfkhj9QTM}Cks8~yLFm$k;1ZvfwBvM^!_MMXO6%~MEwDBE%bC= zcOOTGNdtAVV{(*#C8;kyf1>)KJf)f(@x>Uiz9_4NSmtV(RigA{^L&01Xd>L@_rEu( zEdo3vKb=Cz1TeeyW{AM%yz|?@Q|Jk#Rtm)_C){|7{>;|R!Ws%gGKPT0f#=@Qx-X6{ zX8s1?%i7FSSc%MuOI;55nG8iOOQrG{CFD9Q6$4x(YkP77;(>-BHU-+77MVbA9&}hP)v8+o}6K%|>LrJ1m3T z)0e>Ck0%l@IS)})xR#;BoXeK|08}Xw6bv>A9{;!ld{cDMbO9bFY*ZX4NO`Y9DYHcA z%f`TCX`oEuT#2=%hekQWru%A!FmmHe0@QH5yC-1YeO<;?4Fj?E=3mbP6Rk!BHSluk zK0$;DT)y*78taU*4D)#jc*3{K&L*NOF9D4T2d8>ZP6>9*#f)kaPbfKfls2)r(+ItS z++vju^n;vwtkl&1kaHSXY$iL=2$iHBKn?qW93$C?$u8)|J!#-mi5P^7)Hy(+yx5 z&1(7vZDG`<)|DYLV5&!%9dlc&8aM0iOpnO2NoW{Mzgu7ayh*RX$)Q?*;k~wDEs0>$ zPGOyGqYu9cnbOIx6#pdik4inocDtP$Kh9%`jj>1Tb(IrGJwB(dc~+!oG@eHqX)SM% z@Y`S9an7jM2$BH|Hl#fmMqZ@l`J(h%2*Mz#P2h@Y-k`rq(3sU(c~tj&y`KM&;sdz2 z0++<4>m}FPj|&Z0>2WKrz=s|%4U`3{`NhQ7wUb}WjsEcj0AcFAq*D^jk6AZ5|22B0 zwU4!6!^!4xX3?2MwyIr^QW4GRS*_CT;SO^i zlpiXQEW9@5F4n$xIAT;zb{iRWE~(3xJ2{i9bSi>kyOWJcnlA*H835BD2b`dcF}rCW zBf>=-W%RocSp;WNUlP0#Wi)1d8>;w~4S2uZf}oR|Kb2UE=Hu&C9#m2Fm!w|kHkjz!0L+?tQO=8Jnt zHncr9+a+Uk$WA7g86JfkX56o0%bl^&G2TH z##`bTxq|CRNJ8U;WWuAD-OF5URCv{(mk+zUCsJ6&=UelbuRcel-K6!iS>d8+*?`t> z*SL%mA67-|>t#?rIGJycOZ$jfT)eN%WJ^(ymzn9s{j-)`fTOs75$b(%c2*L2i6@u2 z!cfrV^3`b>g9Y!R=1_=&hf*LM+)lB zX>c^pT-mh9JDlQx>+_Hym zLcSda^Y2v)Joh~G{rx!9nD)be-vsB37lkjtQ`PL^0MJQWF*gtTdW`b3+VMmL68ldw+7`VFk(?KpA*@vXU+(uv85KY3HW@@)#_^@??}B}Wq5pg zM`SMr^$W+vbS5GGJK`P3ZN>5{I0fATFRr69A!yu_D_OIt%fF3@ijS>OIkElN1W26* z7ny*Aqx`NwTjn!wJw=jYk;<*8Yt5v`r+nof<)Y6%F1eXpUH*c)61+6&;B`|6%PVlZ zO6T6>qrnrH5><`<6QDPKrt4`1&{r}hiOeM;0K+UjZ|qPf9hdmjN2hCcr`+FCuLhsn z0{!mOWHy zzbjjaWr|vhv-&$A-(6TX!AQiC^e7bfQ8Emy7C`Mh?!gppbjgF#(zCOo7i_tws8C^? z($I~Z=v#tyCO>2I%_m>R=V`?=`*84k>r^nv#$gCtYow%(D!E@qOe)p~y%U+Ri-#n> z<}u46XOs%bpps<`eA(cpLyrV8A9IMYa2@Zt%=x)qqa+~r`MAuLtDuou$#a(d;FljO zD4+fEcQH>c@cnwSZG(l?i}qJn%&>3y>^i(Trw$x<4V*V{6SUV5&?}L+nBxWRQDWtE z5(EBvI$A`KVLCUSYKCW>;=L5>>$J$&Q+LVV-33QR_Ml@Jk4d{M(UxbrJ)p5Ni*+Ge zNUkx{Jf)P6d+NeXSA^=5?YH8?bPMZB;eH-ECfVd!bvYWSYOd^CRC0oAt z!6xmIT58jV`j5Q0p{DGjE;GHh(}B7> zd6|?RRms^@-BnXy?SskgGYKokR{$Becp2duiNx}-b zN*Qs?3*n9O9>Y~qc z=Ic>nygb$|=_7$b%SAdN+3S#W0Rq3|@gBp=N)a)tej-GHt5lO*JW`XNFv~WbDnZ$f zF{R?n%#9X;dX4I7?l(=naMgLv6$}J6SIuGOiRgB~CXKBn{*d)ciaGsYk0STg*4mHh zmQdR;M0=UUzA3+2PKd3t2F)7M=r#MXRG}r<76r>&VDguw>F}AfcW}j-nzeu|kU%#0 zd8o_k3&%J9v2=k4iNT^`LBP)B-}`}ENv`U}rn`Q34+tf8?Lh+q-Jbkf7;DkhHl*4#wP?NJ6ig6(?RR=%TiuUa-C%0tIWK0OCVFvut-l*`hF}*UrX){xJ{&RU zMrVjW;;?1ZAYy^UZ*<8BntIM{3C}jix*;pnP)1j*V5?AN==(HP@xKTiOc)NQ(03#d zS|3)(^-}npvGn}$s<$%*Cn)06(eqgP1_jdJDD~@l=p@n)&VLVatM>Kb>RbY_q;~4Z z0Xrc8&mrq~kz;FIL1vC#YAOwRI#iFD&oEbP95w2ccJ-y6~g^1ui(6g?(Wgv+DF z;RxiccR>xqpd+UN0WPLWmu9lrKwA1!Rv zlQG)fE|HS&%9eU8*aSd*X-nP8a&Z3h+9^w{RI65bb$J=fZj0;vRa9J@l-1K84QwWb z17kX=Vgi^kuiP1c7^pTn;xpa3lshP|=rnnd_A9gakY_J71d}s*eg~2#PMD7bxHpXZ zH0VP-!D9mHbxJbOOq}s2vwmD07MIHx+4sj1d=tQr)Ncy-JkHPpiK6|M)&KKN?@Jq4 zXG$Rtb?%jThS#FkfZeh*TK*Td$NKHB&PX=42go{L75(J?rhu+(_z2a_Bg{CeKueV$ zprS!%HdmHLC;qv#hb^S>lmAFc{{o3JcM!N;swz6b4;;TwA=eoj^DhJM9 znX`Y8`)zl+6ybwEA=96BBg{o@S%#8ttH0RZqe@ho!`=*mIP&@2!4EVK>pn^P8DImYX`)fT##`T5)9P@~#B34xXv3qh<>1`fj3@ ziuQI}(sSe+aJGwvESn-wJn>gxFR+61lLp8^f}RY@-ir0>qr2^1u(?Oh(~in95mbrU zFsA+m&pVXv1DsN{!Edp;-Xud^YtAGqKhi1uB7NA0|z2yjM9b+lcn{ zAN_W~=zTx`E$`txr5I{pcek9-^~8e2JuJQL@mOB)$yVysJOY?SJ3bo?D0S<$Hj7Jt zt9nXH6E2*nkUK6MAxPdbw=aa=1wR@w@Kf4Z$4x)deX#piDB98|4*Ahxy`x=hE1Vh_ zT#u*f-c{gVT2zeBxrTQtwIixMpOJI8>R}t@dl-@z`cyn@FY{_ToEIT7VtkcWRIE_e z$T`})nI3k4j?1XWrN7uH@bO3AQ-Gt}`>W81^;@MeYxkGwsS4UxPEy0G_QDUS9c2Q$F9sl* z#FO2Y&+?DaO2lj0fzZbEbJOdc4ZfyR zE@I~z+q=KJXQ#OgJhR#Fg){RzTYTizv}SYjwD+fGwPeWD%deeW`Mim5nL$(a_a0~& zP6(4lQ6P>#2Ze8|p_7P5)fDJUV0|>To)dRa7+6B93^^xc;G?=v(}}o+xG=T%Zv*}= zvyeQ850rG^6!N0KCyBXAbr-?~PWOQl4Z8!6Jx#Wpr%oroZD>Aa$RXIA9m}#C138wA zh_1C0&E1dD;BP71h~V>@q77g4+1_b#$)*-qUoFqL0PwG_!C`v*jAbUIjPa)_jeUd= ze?D!nzQ)_I$GS{|&RZ4Qm9n}??+hYsM)Yeq+pSOBW0nYKgXoDCmj;B(-&2>#9c<5} zB%BEasSd}FKu#%$7YJnI{EAdiwM^&t8#qd5g!73l@CjIPR?u%eQIACxQ(Z#j#2)YY zg|&by*OZzl2H`15Q*8xL>F-A2?M?ieA%`e70;hwZ2Z|sJS8SVA?Qei4$&W1)sBlmO zMlQS=-onxZSiOzxEl5Y1Peo4b&sZ4G?zBjx-j>EWWOv(gfgS#t>g9EhPC>W^k2uUfwVgm5Rei95D?z~6Yp>~b@_*O)M{?U{j2o$MNIHF zz(-3{RP}YgED~h^%##2op?PY6fzZX;nprBMSMGFdeZS5oB*`kJv~z&|)*?COcQ%uV zHm>F#F4?>lZTA1MS*s+iPDxR~F2tD$*}ChhE)4zhD2en805auuDb)|MNJ-i7kS(6|?4D>_j60yZ6vM{cxG zKy#wsR|dB&xR?^dr6(^>7jVtJNOBQZ4PGAo1_s2X+@2G6b_egB6ZSRqkSf~mzv{U- zgp83@3J)(gite-t!8p^v?^!p+fB@ld#UxU_82Gi`HZ5l9r~TS|{n8}wT%AUJ$C%E- z!1A+NZ$tryRZh!<=$z7Y4Y+7q_LW{Nq^}+InrV}gOnI%lG#u^wO6ygEuffOs_*X7Z z$h{AN6(52=Sf$I+O3VZnkrvn)7@pU!t?GddE-HaR~A z!UEDe+V?APwFDdD%hn!{dKE-C~9`!S?&X7p#N-e*O2kIm+H+Nd~r799Lk7@Yq5 z#Ya}1(3;EqkNDp7=fPjLkB5LX{LaD(6bIY&hiph~8Ig~PyqE#0&iQB4eETX70)bas?1S}4JmXtYh*M}M@@6nm!FUp>mV;XuTf!%aa?9U;Q*&v&HWuBY z9)_jJp|Z#fW$=nK?RR76ViU$m<7S@V;WWJ(eTK~J&8K*L1aWKco;$@+rIKlmaO?$q znDN)tVCOYP2?p1%>5e5XsA`jK=lU~;x3-O0b-$6?if%7A+mS)XI`Y@2D;#_8ird7T z-yN-q+J0e<>+yM{?Bv~FPva>gV4uDmeKSJ&d30!Glm)dR&)4-3xG+0w4E4Xx44Oe?_12v85-gSbtt&uUQoFL1TtadG*sm%Ks$_iaXeh4t0w+-BgU8tP zg%RT_$B{#!c>anF;M$)Err|q-*-jwQ=8dX~BGAoYI?2yF!$1)P*&p@KO=5;Tj(^F&b~Uey{Je zuc3}PIZ{|?!^L7dq_V(U*&&?lsQW1)3yxHA&HbJ>N6K0oA<@O6T}eW2GR3*voSd^1 z7cNK>WNeyjT^@;q12n!*4V`tQQ`MY)b_N?8%F`(k{;eE84_?e4a$yL}^@M$^Xdep` zT8#7Gjt4zlgbU{AW*0mt^9F`ZwGD592K2{~Eq^?OcspgDig;L>k+agxfyDQtHmMui zl>fOI^*iK{0tA-YU@FQGzvAT5@J{hcD1k8g%nsr zlI;RIS`=)SJ;Vqv79L79e`vlo1W6oAGP6sD71<@Kf$hHB7)1$|a!DNTpv8YJFUk6@ zl~HpCC)%mdpL;&ooPD8P+G(vbI5cVci)KDjd29srR@JC95C5>;aEn`_p3cblDMr*o z<<=;TeBpaEh+Q^BD4wXQjWR0P1P%K5c;~WKM$VCU5}PSB=Gz)QOc_16#CLj) zZYi$+@R!i}seH5BAlfk808vtab=lydH=+;{IP(nI5%6CUs7F&*BVX`#KMa7sxANjm zKU;tB!SBR!KSHInFu2Nv3IIdFl+R5FgKe!M35BGv{uMJ21~83=7m%1Y{K+Q*)q;?= z!QRewxT^`!k{M$S3yeO!W-TL&%aogb)p`}@VRmmQ$umU+98P2-?nfEl^3g)K=r;Hw zoUwGZ6io4!6YT&>5|`s^)ss5@N{x7&sQ6wa1S(RBN zQAGoGSWTn+1Cyr%fy{*L)y>A28fNP=-fl0yAbCnR8&@4oG3)4SrozXMv&dn*iFtvi zcS4eLC6?Ti=w&15)Rd!MXh+Ej%-uQfN%BQO=*<`nzpTn#WK{7`aB>nLg+L%~u#>kM zH)F?y(R?s&gd92~hldO7v(x9D@y&+)PLziCl&zR4$nEU(WLEH9MX;89T{9S(4MMsX zJBu~vzIhpqFW1R33%&DfPLkG4po`Eym*{1?tMe~*U;jL547cr#3!i8+j^*NwR|6HV zzM&B!3_~Q()A(xs1ob*rW!_>)^z^a@vJJH|~#OBkE$_53vnp)~~>|EcEUh za$1IC=HFPsKF;m-E!^_xmE`yION&TlsyFfjz?WNs5x@)XdFe|`rXasw&H@} z^B!t;L*T|2`F2&y`xzv8lr;0#CAjJv{J(irlFG=cjDL0M>q!4U9@WLk(Ae74=|4k@ zy0-lmJDMM2!e0O<6)k2JK@=Yx1apn`60yaCo8^nizp({>%f>{BymCZu;cuU_#6pn? z7gQKDlu_d8M{e~8dsHTDZIE?3|jGZRXCJfrhtN zwI{H&-uB*srFcM0;6W~x&14;&gjlW2V7D?5_eaxn}fN}XWJSliHirVnh>- z*L}N$Q&{^un0Gw~LO(k0==s_6_*zBkc|VL zyOf<6Ogy-AfAAr6OFrmXBZzMGBN6hlr#o^-6N*h zY(!L<%(CMkZ#Q9@C2{+k7p5R+5QtMahJ=`1?gDYByZ@OrmsB+5j*G~GbWNe*ngud^ zE6i+MaoU63hJSyNbxnW15gl;B75s^ka z@W5`XoVIzpT3;dL2&NjtePX!S-WMI=OXarA$-ryiN zSrjF+MSqbwF~xqs>YEdH%Vz?kNdBGOG*W61lBdZ=wOuogg=x3-X^B|9orFP8zn1^5`K-=8ZGZs%8y8W>891@>8+wtK3~0 z48?{CF*y->SUdL2tr{%Dt*;ZWy+S&?@@yP=qIcjcrZ#fESjTs}&@DgNryff?{*sR~ zjK+i?e^199a!rsbyM49XQrO5Z)vwPuE*BC4Q`ReiX8qfg^w4`Z;^==XPM z9{0Lj9HNU1-+;dr4oBRx$ezQ>i-1dG{T!Qf`(@|YIVKORI9ypj zo&iVxdTS7w@(4SU^@G~Gp-=k70nb+<_VbP5zi)Mm=8}b393Y?|eITHJ{pUaqmJSU6 zLIp0SPIiVi|4A79@05Y7-T%!QjPhFBAGW3K!9EEz5TLb{w=F_CG-ivsX-|W?J8Yeg zPP>>#%M>KiaVwHaS5b}MpPcmHdM2PrD$147HGD80N*w+9^T+csVYIDsORi>R<}@Gu z%e%RHRaZBCvaj+p|6>1JZ*8Tl`FZJrihg8`*k?M1uuJle9 z538uFrPj9sKE{EjTG~cc3haH4hCA$iRWjXQ+5WCB-3UThaD6|!uA;goC*obHx5u42 zYT&xCZ8X`W-3gj{ZP32XJ{j%bht-D7BcFEMeBp(gMycveoROwnD$X%T4e=P&COey|zqpfggTWE>8ve z{k=Ou}w7G=e=sw za-GY!N5`gG7%Q$Y6Z+@wg2`2O?f;6%>s_{5nkL(nGW*+fe>rBnBd73m+Aj7q^xO&m zXt#y^b2h!sMXP}{w-5O2=67t9FNo$mvu2f2$K{ndfBn3hcWy_h)NU1>p9N?AQIY2x z(}XG?tPDVe%{e=+<3#_J(A25%L&@~a<?uo;Y+gIfP2Kei8bmV<^8OPcqLJE! z9x17UXVB$-`d^4NUu9K?==S!D--zCVr8M9xhDFH+p z&>uiL1tuKM6QM%DSFo$qDA`ev2J4RjQ5`Dl4OKigG6CNhW<6w6kJxRwi2Z~xnkQfr zq%3psm7l&=KZ`8xa4_dX8F}}S`za0DO7?7q2$X>6lV6#(|48151$OlsQA)(IZv_}1OpolPphwJ7I=$dH8 z3EA3)(qS@LIl8!*inWzL>Yzy@8JUy?&oJ;e`G^_hBbC;XM~!V!3%a ztQ#NP!p3l%z@F75b`0_=q-zBytd0_UEYx+1)9N`m38%Kk5do;i5r1bVbIFD}CPh%~Ummqj(C*u+aWSNvz(4c~oqn4J zyL5L8@cgsPP9(D0e&aguS6+ZenmYxvx7P(x6JPgpqc%srweAiY>FNa%Ne6mimZGY| zbK|^#x%E>wDKlZqC3e7^+EbCFNe@`irPp5VsXU`JsDa$)YQ&hb2-wB2rYYaM-z~|F z@+6?n%p2uXcSD>_1D)luT^(@ld(x3Ga|bJ)@GdcxnNn5UZ+gXNmBIG}%&!qm;euykV`Om* z$q8z55zG%oHE0RM5cWuFxH4{lO&M5}%q9pgDw=HTC1D0WJqUT`I zEt4H=tB8(-9bwh3Te#00+ZwMW8L_XjO0car(O^>=BMNLCSoN2TXYiHM!l|R*b7|!+ zdfCk#b|QdDb0t7-&!1Q-Gf-bseLrWI=ccZXXauMv!loqi**nR;yRXSHt2~Q445KeO z2u~^nkPjMoDl-$>krv*pq(;vH+@qUWe$h4Xr|E(bx6T@*Y0+&uj+MXHW+BzWEV(@S zy{9~E>lSY;%AK(v9p*1MjXaOw<36p8ewLKLV_)elR z3W;wjh#0kaa{f>*h0J6G6Pv#w?@l5CsrVVp!M#)v1SkU7_f+uF>Q}$;N_21g1~644 zy}Re_4%)u+RXv$A_80UGutQhUK7yJx_FdOa4lJ~nE|1#2e?U=}9LSyld{DL>%TW~1 za443+;io2x06IJi4n2IVgS|xO3aUvNs{?E4plN^7r8VHsG~=mm!N^Ggx%YaRzf*9T z!pzAlA0cjk)%2j}R58c`Bv^!xl-IeXm?0Y-*4J$pU>Y*`-OK9QlD$1(1E;~?zTEAC ziF|Syi0CD=+o_e%>jx_PDkj&!0wRymT0>l2C-9#U#bqC1KwUbnXrFE4|#W^33&oh_i7?;ic7Ba zAkpv85#nbMLDdh$uik4?C`V{GurRf zK)Q(wvS_weno%1>f2ftyG<+J?kD0bqY}GqF)?u(mQU~LIT@M4LYnuXl(Mrwoz`)62 zz0Capsv)$-OtnUFwUAOMI$=sJs7irmx`32gbRAsmDtIc@uXS`pV0;lF^OtjWK&iD)spK3jYx0jqpCN19+wA69w?W# z18ixaEGy|z4>9OmR05%E8=j31>c00A>QgmkA=WduXOD3fNWHry3=oBLi~uF{7?$)j zxl9Z(!v4RYN&z-YNh^*wpl+8!_3TY7Ob1D^4j_Vn2fhkmPfqFp8*%%!t-|>yXXN+G zJf0j;2#B%o!%n~d43U!Y`@=Fh35=TsZfhY>U|3+cFsVFvgZ|Fs?nzcD(_oO_A(4z5 zaxC0wIny~}Q~0JTE}@Av8W!9O5zOu8^Z*-Cgg6&PUy4>!lHWon8@12P>Adciz-A~C zwPs@A{h=N)CX$I%BSz{q#&2pMdxhrk4yy^>;ag5I?igLR4_r!N0t18eIt3_Wu>g|B zfKNDH;vLCT31NQh>^anXy`){@(!m>-!A){xfujtDQFQi1ZM=vT#F2*>37zJb!J4C^j_kR!DmdDGolMI^Mr{X zst`k+`0Ao%ZirM4R**-Bvqw8_<_!vVq=MyMHD08KR9xo7dO>JT>qn8VlzZ+3%AwC9 z9P*Z%fYHtkv2G~#SuZRRE+Nz$(v2plF+4O8Qc3iTxD;Q-?H|7KT4qGfk23ey8>D8f zay$$q$LsU899d4vX6o~r@2VJ5`j}}QB)k&fFhCHn+&cPQ;Ww8XDb%kA0tfN)A$ZC8 zWXbC(j;Se=n@My-Nkt2H~7{RV)dGdt^y%|%b;Tz33G z_yHfHHPO_3S=xH}lVUtqemGBL;3!uYTz9`Q^_6^-mz*hgW=o;wZX8Gn#6M2;48SeEICY4fK)x0MX3yx2f~} zcYN4I;#rud>M_C(`H~i>nzw^#5Ck>f31i@8he+hH(S~stD!1$Y)$JEV&xl4`Wijf% z*TEtKYXGpXTZ<3eoE4JO+ISGst_z?+n+3%r0xkp2E38ogQK>RDsi7L%l$c^CMF`&F zy=e__RCwO_wI_i4_Sa9*ZQpKd1?v#h^3-O6=!=M>Az+4(p~)Yh!1s=_nRcG((4qlo z2{9W#(;D~r%4KE~!f(?!E^>ICHUScGQwD{#v4(0uq;RdkjiR>}?5r3Wp1{fL3Akm$viz%0QH2#KeXlb+aXPb4JxrKlw166@Lx5ah4 zX-c=s%^h%^iS@#80O}yyGxBfLrL+Yxe_VlgUt4it^pbi>sM?JA81d2Eh?_B3FS{4! zxh&EEnBpq8J(3(iBPcThK+(mr-VUI!KpZv;u%2k#6HOx*4wVV_V({`M%o(o^><}&> z0WoDWnsTi*Q;#S#b@4K9 zX!mp`#+(cjQ6Q|?4oh;$Jd3}#+BB&9xB9K_kpe+wJ`}v?Kp}N2#s#>nxxxk8OaRfo zXckZL?F*|yXO1jf*)x0MrPHhJe|g|B+&dsb!bS7=0W8wtgem7tpEt#XAg5iEcOBN` zQg-rkh@<+BA_fil@Q|@F*B#yFImR~aCnPo&a=NA>5}rh%CrZJtge^Tl&}@xKX|1}! zT$5S_pDKk{eO_@t<-&M61BtfPli}QPEipnhXWNpNJ*4?+IwP)JZ z49A7(aK=8eq_t;CBFbH_&1C_cz~2z0I^HpQ@`*PW$A!9R+&B3{6TF(}UVl=l)~b^= zknQP3SW`r)J{ZKJxI}%ws63Cc3~)JI^Jg9GWxmAw56%b5wl%A;$#Tu|0BG7xnN>vP zNHVK{y- zN3kQ-Rf^<2pt^zxv^~+La`eQOH}}Co_x_sSldb>L6L+TX=h#t!2Re%iqn%t)rs?bJ z{4nS{fMJ18cIX?cBG#g2vAwQc8%Lt4Iq_I3uWwdx;|#Njas_)6rj zkcYN~)7=GiAP)6>Xe|Gw#<2l7Fht$(aR;EE=UnEXo>s;V$<#Aio0v~YXAW(cyIUog zYCT^u69jEN`>;lz(DSR!GQbi zu;9oKD3khE{tH7bD4|5H`>UcEKd%waSG!->EG;#^$B29qSECkr;p;7ybZIcEp7`c& zHNKq>UR6Y9xI!#M+2V^Pp(5vUAfD!rEdAM2G1Zp#d8lEd;oO@QHp##TuDik!hG&u> z1v>uso8vr;&@^)-g8a4~hS6J=t1J?~1ll#|&CRo@PQ=h;a;{aqc~Y*dD~wLY(=B z7BJ3a5%`m{`Zo8>D<<9c^-$4K)Yb{hApS{NMH?s)AcR%8TQSTPjF`ThQO?oleC!ED z%QB%&-)qZvuW7Ih*gu z7Gb1DTn^|>Y*G+)6!4DRT>eV%phSDy0G87P2lT2EGcHTB#v)H3cvO+UVXCI4_ck5{ z-jOpYWPRegV#bq-oP|GPdZidsI!XwjdviU zRvUFmTuiQ1cR(uYIc`~ceg&l@U8s({?b#Hd+g#O z7B4={xKq~#EK@-+JD9>~r8;Nx#HO87fZvLhhK(mxLIh03C^Iwl1cU)rhTmgS;VFxn zrUXOqR%|bGC(*;;}8x)KN~5Sepp zbd2_1TEr@?U{Ir5205ZiuS5$&wOCukpux`si7X|$9|+oe#L6bbjHC`?VlDt48p6&ZV-`>as7D1Y z64e?q#ey8k4o#~5JS;{k?i|eYt;%K7kO3)6aT-w8^{ndGdcYp!u{mhc)IYZ*Nm9c} zx=*s&B!!Z+z2U3AjXR8k(?qZ1^lj#yzS){TLJ&FiSu4HrOaR^aH2ncji0J{xOUDKE zi?z0CE*|A6+zXi_+}CxAdl2hKtPW1MgWAALfAh-9Z3?8@!KZ*GkmlCm1%g(Ien23F z-I_f)uqQ<1l)RXJnZ0`voPIi6UaR0P*xUoSBKnxuS7+tU!&qUB-M^kVJv(-jLd|OX zDd?6RqP(wbXzMpwC2#@q8Zeb{acVQ4&SPBq#gm)4|2?4E3|NrRlZFRev~dMvI_gv| zZJIV+1dr-&z;VNnZDYHJPCdxMgv-{c+>z8-p{t$wXSf;2uDh8o8JED7`}{UM+J=K8 z`IoOM+a{BncP3m|jWP>1X(}7EfIv7Twv%MTREZe{v}b4wwiZ$K%6zwcA7>gnzOuYw z2_Umlyl#2y;+Yo^^<&IWrjs&U>dh|QczsU~$A3@D5e1RN@U)GJu)e1sm>rM6z^n+? zM^ELnYza{H(@M*f;1BIThIT!Q>*R5tFzzw1Ua@;TNlpde%*Xx;`@n7a%{l|q>tQy0 zI}=s}buSkeGRxxP_p?CxoUt8%c`LL3cs|ezSDNdm>3nt5FElr?sV3#eZ+ogcC&?UY=b8UyF&Gq<)*UaM`c9f!bu zPFq-C!Xf+XDfa}H^U2t|POoHP1#Gq{E=uTS=2CBp1CLm3KQ+&=1u-6-1`#NH`j8eI zCtG%yO&9a3DczJ-%4KoDrs-T+qD(@=NYEFQ->lra_XX+*4>iKx^qx~Y4cHt{j^@SL zuSQ7!F}+=o3L2vZE~rgV!uE4Jb>gPv4!eX0gxo2JX<|EWl>Q6M5UwROYtoWW1xz35 zS1kv3ugm)5ito@PbFrk;=^+Dtpb`pK&=a{A6szm++NBlVGm;fhw{#Nz+KzbR-+kVV zxl%`vxa${~_sITI!(95H4bkRVAi=R2f2yfgcVB5!|LP|T%^?5CFB}dn`%7;PaK!=t z%NxS>5nsl3HEgAIXSxukv`~hCg>8hVwWUYru9O6yv z@7vzTL1isiTdI+fZuU5yX?R;)Bz4YWSsQt-;E&}9tHiy%^c1SR(y@0N00<8=oR$ZD zzSB7{HESFkoY33lV?t5z7als_P+PiNLac*cFLHT`?^!~M$4kyFdm7w1x!ECMFWX$0 z=AU(o^(hCE#oPue9%;cd0!;5i_;$E2UI+_#;35O}Ff(+HFHQ+F%8nrQjC79VS0XNZPGTBCB$_?U<*q=;4Dc1w{iSe??jr;#C3+wOUS4FN7U6z!w9 zxH(+FMB_O^7eT+wWf9Uqkr+$%cWxE5y(l1$Cji;QB zmv-u;)3k_$JWU(PhdHnme(*q#bek)%69K`C*hLCl2V|8(236Dp;^qze4Iw&7gGm(` z(^0$UO43uRBerdCHTU}-Sj!fMZ&IOZe4E=Vw`XrkwMb% zu`H%dZ*du6VQLgu%S;xCBy}7@-*4Aeh)EC&w{x!c87&~HQ=wkW)q)ll{(Q~vr~e=yCJ2}nMiba5Lun#NqGD_1Al2(*|jFw$xate|+xYh}a8X^>(5 z)j)`ZI{u!YRLK(F-nRtf-YnD$c6y{D8ABk?kewOndbJ-S{<@Fouf`* zIaC4_=X0S!!#SM*l(&L2{F&dPpG`BVVpnxQ*QtLfRe&kPeOd#KNRrV#mp%>JYb&xP znS^ffhPA&%bcM08Rxb$IV{PsLUvt|Z`@KV}5nTNORFen56lfKoL~;$Qs@E2jwiBsv zzw%@jH4=2<5>zlAi+ti8Vw3x@K`K{CH`yvylLI&x-^#6QCV*LDz>^J**!Q%v2L)q+ zT{mMg<*Wu&-x~QUQ?=8zYXJx?;Y6evr*i2I;sU1k0@~_mu7a^jOBvrctt8!BJp%Zq zvIZo=CGJvalUx~AFajyH*?V0Zb1T66VMNM@=uT>PkP8mH$po(`WY@RhvwEEuQjXO-ES$!~))8}!lU}r24xmqT=hx53s(OWajf0z|9xB<_}D+@FLnc6NM zr3*lR*V__vi1qM@!!0$# zQ>mcDQEB9TLh9|;OEyYDrz?Xvo}t3jg(LL#U?#?TEbYNe$My-28`nqJuR-rIR3)_+ z7Qvb3G)t*|yhqO0l^3H8m+{vG^bmEiK=KyyosDs_eZXq=scx{he|J1MfKr`|t=oLL zI}3>+4j3bFoE5*PyUNIQoYMyz`QmSf7uypha+Q3ixmyK3h?|G;jQY7jo#ULOTkZ>{ za|JMEb$@@L+>ffCaePMqMPP@3jX~+LRTbH?yC6qr3AHf%JgGf+UJmC;E(7|De-8CS z*Rg5*2_-f-s#4x6>Jio~#vs@1rWY7BozL;ZBbSYB{M3W#-iDfuThX>Cm-_Ue>Smu+ z_3@j+I_Aq0262PQb*v_*94>znA!)C%r(HoGOS|ckQp+3V2Za5+h(rY3Ybsv6FxVYP zAWr*dA&BW{6uh06o}ax1i2NG%ebT>URDoj-AD1^a|ZNJzX`^K*2 zbE4JERH(9Pu=XwK@)KM5sIAP?B^Q6xCa0W7a<7-@3KW1tsoy9YxUzrOTlm!BWB`50~&VCGa zgYYvaU)51MtK>a#kDW?oyq$(28N=VIg^<2R45Q!yK9H!j z8{7v>>EVwwD?{ThA9?#R3au`k_kK@i51kLOz|G|0@oa!Goj!4YA|N>$oQ9A5 z+R)xZ&P?ojUyVWT^em7(f-XEiM0c}g*CdoJcD!F{u2XY&Z~Mp(+@VkA)^^31v{EEd zB(Po@kSMStJ?N<>mis#X8sTtRj^_EgE*>qGSBJal`2szNcj`{Am!KM9=Ub)$1J1cY zkgA6fjIwrE{*sq(z&mG|I8RPupj^=e2hM#tf{cx4sG<83z&HZBM4}A({uNJ4 z>Q&j3-=7FmPF8%3HE;dDV#0b!BuwtRtfMKZ1K9=RdtUjv_jIW6Ko5MPDaNg>cJC1Q zms{v^bMDW1zLUx<*v+PgdT4R$(rf&QLd;``=f_Qf<*NPGsrh+{FtG2njtqmlLe7J|0p!k>#gu1z>am06(?0I>7n zPWn?2z$%c%$D>HBB z+T?O-X*;WI7?WyriyAWG0He4t^=b98btc#jZI$~3i&nn+yQ>+IKTxi zg@8|_Z|oxD=wp)-nwP2AxbR$IMWu!#w4F{Tn<_3BV!H?V>kG~O9PyMHoEi|DUt_JR z%7t$3PAuMxAs1Emv&?ugXeYNkO-!R4b?R1yR|9RdvPRM}$nZ_NNrfAjB?Tl5wP_4} zRXYX+dEbV*2DJMvhcflRo4}PO6Zc5SyM^>1OUFH_KYx9nfxD#iPYqeKW-OzLxpaVS zpqouE;@uD4;-1s)Ab7~Gz*|F&KVaEHw zDwj*yCN+_fp2nds{~|40xd=kvf}=51%Il2pCUs;}<0UPSdGrD)L08zr5NS?dbkS)M zD;*Q8ow`iBq0}hLEqzTZDsTyt>#RH$Q zL=_kT1dVsgrHnK5%6@htsAdp7vV3F+np)?=z*A8(etHjIBrUccvZ?Zb4KT7iqy~=h zdrDSH9f{KrNTm?t*qd?G(y%}+_{V=9YnJ2ULuRbA!uEg_9MM(V z-dJcw^Wn8J*A6Wj_AaTFEBA=F6&CkpfU`7B6TIcrhTY`LaFNH)geWQOXZHbdDjV{t z`piP%cJ#{VQGmOaVOmAI7Evz3fu$g0K>i4wD8JnLb>X}l6+v6Nh#tWYvh=+QsTy56 zUm4>$Az4z^4h`t6-80J3C~0;;iO#nwy#Vfr!wBw!_*IlbrC8&r3ImyYDP`w{BQIS; zPrtV;%sAjT?6mX29EbXdSvsDYm?z|x_Cw{NLl_C3kk7)7$sI69aA{3Z+-~ig_5mJG zP4OU{c#wOB3LAhxQH!{VgGDmx(ZmqL@dIlFqb$$JHGQhP|Lkd|Bqxxze*mpvzJwjU z!5vV-9ATmgnR8{)1R1rvc=U)E4-w@$D$#&RLE(v~e$q?e34l&eF>w7mfd1>RBjY`9 zaZpQ$*mKPj4c;2q_772p1%ViYPymi}&)H_af4$_uQ^+x*Ar~7H$!_$%Y45nhz3Jtt z>@3BJqd~@$MgZXZP%gA2DfAw{qm=1MT$J1J5+{nEsguC!Vi95@1Ad^bq%T5)z-tk| z6TNz%G8hxHa4&77 zPSpbhF;dYntle&7Q0S+H7L@B4uGN+W0ES>Oy19=b*+Npx;XxkMHKOJWR0c5n7>^sk z&>*Fc{&eUgW`I8enWaTeH0CJ@zHJ`-@fnK^;sZe`Pf5r=!a+o#H|KV4esb`0*As>V ztW@y*PInO!cGW`z@SP_#&JHZd-T;=q{NQlTk&j``a9YQVl4K8M+TBlKhIyG#^>W$j!v7MojTv2SY9M`c|T!CHvLQrEC#nj-i5p( zH#BNlQmnc#cm{;A;8oXfHsO9dQ;~Fnc5jFri@RLr0lbcpFH0j7Q|}=6$)t*}>{eGW zxBX_4fOi4?4>eI&_tQlUdtSdKyXylq#&>IJ--2+fb;=rOa$R~aCABI-Gl1h0YH+VP z8il2Qb|0UnhMZs&^WXT2r}*RpO!+%=Kt%M}bornydC?ren1*(c9p0*ghK9v(+wi84 zHK-y}Gt$=UtNy30zANRBys>e{v~oeuRO_mZ$+q)F$(Y5mrQ$K`c*xM3= z{I!S}UGhw`6@vq_KVJ84VSr$pN0_2Cl{U+V+4`(Ljm}ieCVjGorR?@7+c?txSd$7 z0%NS`M@Tyh*P2aBDG~|iDtG~Qn%&f|`Xff+k~f|EY zvUNI-(YiQo&|nS{Wi<;6}uU$~Dz26c6J#g;M`4C_h_Ogg)4L?sh{qr;X=~ zoI&}i(Qr=!AU^Gq3g0T6&of*plNdK5%!oOry5Q=nhq>U1zaIJo(?K2+~ z`3swUM&=`GO}rT1q+cj;%u&e`kl(dqsG;m6HveRdKGKcL!lNUx{h(riBZ7ff!OxFd zPbEJQ6M7|Fs32;h_mj}c9=qiSLW0d^L~#xA*zME_0eS6xpNyopZJz*K0AMgd>s znZ^J!Jol>{?-MnKSzxl`z8hK2&fE>tx{;i8EvS17(afDkdnXbO;Y>fdIRMQ^G@rE4a%(WX^h zpYOd{i|d%BFp9Pd7F;Nqv0FL&T>z+@Bop1bqe$PcR`Z#MCd@TF*-AU_*o{q0PT?m> zjvukqi0`Dfm-HFueYX}OVqCV}`Tc089^OU#*v7mDlz>F^7THRjZ<~_|nnrPVEzR^D z&i&ZvrX?sQ??~QAe3zkOx)vdX4*L#44r4`Qq})ZJc?{`YsYvkCzX1Sex{)F;g#7u- zy*gVW)PVbAqBRPiD)sH0$8?VyHof#MV9nfIZ|zXb&tr1abwO>S%`qT?My-CO$^|<} z+ZEo3aW`|)PMVnbAK6 z+>RkIJk&lD{%RgT5!M%mO=>@S8i;t2cE0vI*XylX6Js!4>(w^)JC~f?ISSpaI8T5m z5s83BJ4f^QKLQ_-GUE2iX^yBGfUN3QzshW^M3SiRbGe*7_wUS(1l9F`g)RDUFQs#k zgW-2IKA9OIm2Y4b@(Id3Yb~Vm7Wv=lz+lzBW9p{V7G%;rCWj^a6Wy++g?o=$ZDHvf zpK}yRB$wx<&=s9lNJgj_avYIcOYOP8Fq-&(g9XB66|wWKY@ux>503=YkjWw6{5|eS zMmoq5(J)j9&wq71!ovA6)z_wjN;?hKZ6)Iwg*2(XA`=#$QRw;OtFkz1D&A(~1b-SW ztxh2g3};{>-;$sDC>`zXgwoW3H>8pRJ9SBlt)1Ff*+r{kkguFZn7%CG=qNVe{iM*_ zkn3H&jfk|}mz!_@@*#9^lkqi)Le8yDOgfb>6xIU$I0+I+PR8#ES@6Q7bED9NxQZ4? z`ITszTAdOc1b|!)84OpY{(#{blX$Hc89qDVxy62Zl60d_i)(tc>82*&Qi3^3!pzF ztmkoc{XjqSwiE!*RrV>$FL>LMK+1N1Kn&_^9L3;jdUTqWJdk4O!SYBRSTd!j+*GFw zqgrnw_l(kv&+|kB>xDsu+$vB}6zN3-Ppd;xp`HZrFb8fE; z+eFrJ3<$ue1c8RjA1)TUxro@37{zou&Qug(b@vDu3Nhx!Tx0;Vzx`bQ0sQ~QFlql2 zhWWn{M=NuK|Ab@ee}{G%{!ZL+p#1;fnE!{l{|zcHt6f+evLS!#o^nFKQ^C1?0r=AZ z4<_OK%`U#W{D$aPzB&|Pj5&(`=d!53<2@U1q%N~C73`D>OKne_yZMqGd8skZ%$O`B#{l?~MQDsV?9gKH^z~iT_-og4uQmNh#GUx(zs}P(EpsOKl00rdOUD35z0aZiFKqQ&PBo}XkjXyg~IT*RbFd$)JtRU-eJV& zEBg7QlnjQqz@(aKu-hh@2TH0|07$tb5rKSaj1f$#N#|{f{4OGq zRu@gThbD3BjkhhQo>=leR-x&vrFne{RGUT1@>zs1CW1(P$9$lG?>>k;!YN8nP|=hM zdB95n5X13uhP#%h+Fig=*JXU6ndbnWRE zGDg1(AFb6W@#z?B_62*H{mlACqa^=J;MWk?H8XbuTn`r7d8-I$4+cvI}r~AkU=3PbRe7%EvjBDPZOPhx1 zIoSc{3NvrY9C7Aj?x%ex`kijBv~YREnu8LCeaTY+M7tHtI{JVis$|FfaHGqX}gNFH{hFU_ z<_l(08xs3|*qIo&zG&y3UNb>~e_|p06i%2)aHfS+aBr6)PjnbA@>lM5x`$nteCg9^ ziar4ycUT?ckEf{eiNxcuB8hJFA_kC&%!jAmbgA&_lDSwDxSy3m+J&vv^+^8PI|-Lp z)xZ!hMD8p@m+*kV3AhXzn?*_O*vlrYsW7dep;yt4qTxh=_n+_vo6&4-lllrHc^7vA9)H@~yI;Z$O~tUfjvP?XDvFtkFCx{|JEOZsmGkveodH1?8iu|3q|`-9$YPK%;*M`NB-H zFmdssqB!}9F0>%ON*$Ce71C7>#OiRj_G{3Fpm`ix7K}&c8MX@(%{Xca{qonFUAp5q zQ<3SoZGHV;mBUQj&Pnb+006_1008v=!=v9&-^R$?NZ-lW@wW_krFCJuHS*`jrtfDk zBqX2HPyY}^IMTAVEc0*l+>(lQDZd^Blk?Uh{XslTD%l&wtM9KUxMfOg;+2@R?n{5q z;q}b#I%I8>MA%uZ!Moz1K%tE`F|uG9{M@2T8#rBX>h$K|1G$}IRD zpHe?^&SY9YXAs0iTpm-dr!lI${H+uytDwF~ZX!Uxpp}}`SGBmT>Y+@QctNyQXBC=&D4gh*}=R&0xXBx@mq~D3a zaWCjyLw{K%3f~QsI=o+2=p8Zjjs4xj*!i96PjY^j4wu$*i{7KgPxc32x>Agzghc`O5+P&eDH|FX z-Bs{0cI|p5TBFcPei@~W%TCzM%YR(JU-US=Qx#o)UqR~Is)dR5dY0kCnCa(H0fFJQ zf{Z$5^5+;U7&e1DGWX5j;e&I+V=7eDwPJpYwrA^9Bpc=&qdvYsxHy7y*)TuNIYb^B zEew+{A_okvI7E&4^Y!sZb)e34ZXO|v+=#NZ=Y(i^LKh8c&VMH^3O2)Rh=$L;ABD{R zNdC!AU@H8#ABZ;U`*Hnm_-^v?F;sPz%Qq#*%lY$id3=>@l-5t*NxreCGR&t|)RG?K zu0r-{kXNYbJ`~=e9qd8IK64@2*!j4J`cr0lxYXB9=H3~$==O1MP1dad9Pvga6D zwmEsbraI`NP;+Y0)S0B)t#!RvYIN#*p$f5=CTj5fUkkbTts#qyC*7~;DM6whpz=05 zLpbZ>7*8NG^aqJfh! zF5=u39zz^UoWm6MHBLJHst#%6wufFK7vMjirf#DM!0{obnr6-Lfc|7>HgEr2UZgrf*PkZ*8k&U*T*phgvX(nD=IAZ3Y7 zW-(dqE5v%ztMCiBp+X}Uf<_3UWXeM0(gm&CP>{Ut^*WQNYxC=~nXFYHNS^&Lui zeCM1S+#Y3=0F^K<%=?v1ffw58ktJZ6Ee8ff2Cwo-Ci6?;={h+{Ij|tgt|7q~X%+?P zR?pIaX6FVuY>aiB;252XbafrIjCNx!u!b5?)557GQ>A~^YYzKrH6VuH?d)GR=Hf;R za4rlOZi2(47I5lCU?8D$X+ze}FsOhMiC1=mpjnD^iB4e)@*;cD_6ri7{J6Z4H0eiV ze=2w9RZvn~lE2_sa^icTGo|uYmm}-OONJ!(CCvH3nP82gI0Dgt8{-K506 zg#dU%-N}bc3i1s*zh{6L$U=ASRXpZl+i`JDOEwTSBGpijz(oGYOk_y;;$09|7`E?L3c*XJMqct>TWvQ`<(+;T*&q zTmyDr%Qy_e7XXaffSTV|#KAYUT2Q>?>>dvLs}=q2$JA8_N%10uemtIpo#lH!l~Fpq(>PWIk2q57Pzhz^JNQ*yRa(IFjkPwhL*|;g`PJ_> z=otVNlPz0|;%EWgHi^!8ZJaQs!lj8ZJjEi43T9#1UYqgq8AevB3-a*oGWE$4`WjFe z0UJxJ`WboV%W(sIbbbU%cJvtFDLe^vl*>L@Vgf=Dcnh&Sh}?VLa%qEgd5YdG!9*uM z<}_G)>u+@kp>0f@WWG?riI8J zy!imquzhE3>%=s+Lw6F}g`$KCIzRf}ObE!aK~RDzeT(aZcIo(~!YWX}7gu?gBz6-x z95A6{szq`5Y31C|n9RFE1p-G;Ns~xG<6w(Uk&|{;E!e>Gch#w?0R+H-%hXQp@x{!u zo>*O?*U>Ua6jH z^Q!6g)8;naAY^a9l6nR7gyuYMy%2cIWbnZQlOjFj07_s86J+-8rV2w70UbQQY_`Mxv!amEKb7`MMp!i0B5HbeOZ zTIz6RVUuT$v}OlZ#{4?&=>t?$SL}Z7j)i^=>HRi}tGIyL6|fGzb|d?rq$1~@1&gf6 z7P(Iu&B~;vdD@GJ8@HhiPPzM*KL^;J@mF8V?*HzGw#%RX#mAOIzAl=rCg29qJ6!<( zUtH)=FpJUizpjPa<1yoGV!&-UpMFm5>cFa~^r_2O}VpIF|@8yuGrhvOWT5e?>K zzPH2)v?AtAOw3HGS=2(=u(`&wOmkZkbYj<&we6i+2;}LTwYzK}MtPn{oG8{HP6BR4 zIQW4IyqmxVWS8BwJN!;$HTX0FHRW@g9)0`kz|b&aXjL}6icNdG3ud#PrkLdA1ay%o+!x0baUdNTklm;NmUU0*Barh0O$lj*-lJ;Vt zTF-cm7=H5DMvWR;B@ozikTt1UqsX7yKOwhc(3#rliGlU+?@0?U2^<~o#YNpD%{7w^ zJteIw4czA~B@e`al=IBi^_3C1E()g*1~OmsRlxH-3#%P2ZpqQRs*V=HWVi^+oIz4T zDg^j*sZEZfF|{>NegxAad9kxdRPf692ZbsH1&MH=s&Fw%WiU1eRxtsqwog~vGTNre zJ1!c0bja(SDaL2tp3debN`yaW&WJf>a2dJr59;s};2*a?s*=vuTSp$DK_ z^x>V!S> zE=$%HGa1WJu&x&*h0Q_w8E`vWAdNIN#C}FV!}*AXX>r4m6>hU>F7Za5i{5m;7g+6a0 zs#R4ZFQ)-BeGFwJ{rPT;Rm4kPd%Ey&GYy^j1ZdOLQukw|i@#(c5^t4MKpRdkCw{c(6~H!J^x43b;LirP2P%V;YoOJt z`d96QP-X!UOG9#-#Bre!%9l^RLf% zZSNn>kMV?G4CC)`x)|pZUr#ADU)-+}(%M!vBR0Ihkp4RizdL*gW`G3%P-+PPK=VJu zVodZ6oopT4{|kuuT2>o-j9-H-d;-1#oO3nT+zke9Td*?9`xsy!{SxmOGgnpN6cLjeip{7O0I}vrdhCE7G(-;bpoSkGa8TD`oFnAG+N*9RTFSjE zF!Px$)t%LqS6adLTyJ0MTVB}M7t>5It+y}Z`|URyyeVIVDT%Oeb-cr8k=w`yrB62j zix$OhiZ_O^drsDkGkv|OJc#1%mYC&ePFwYCMw4BoZ&6#(Y2K?<_A zc319&TwpU9C*XXOUaTEeWv&?MDW`l}LzTN|DjRtJdD|PR0=ljvZvBDSEZCITyuf;Q zE@F?9cVa!a1e}#c zDm?h-BNCG~Umi^~Y$9N(m*~wx7P4l}Vvr6$k~MnKcqPbAJX}Dl*{~L&Fu<@5d7cRz zpEu=RD_%xOtxsx>?HA;M^=(Cr-5n)T3>Deu8Ru#bpzr zJ8A!h`@DDnW_$;|yN1~ZC#`lFmCUzS#qzx1O0P9n>fTLZDW^u4&I6TWDGu70F|L(p zWC@w${(%hF)Iw#u;f(=-e@*Dx>w*`SbQ*6$87?IHM$v+|-CgCGD+OWD7`AyYHIpww z-u#VUfK-GD<^Yz9bXDOXG~#{6>MqWpOOG|>(Nk&R4?jh_(5|!$hM-hWI&QhsV0|y$ z%V{(KEn#yJU-wuQFOMciZnG0}JWReIk1*bnCx*OdG9g&4{8|3sFg@fvD4(Kje3 z$tPK}+oQjZ)C29V?etnPcwWgHYyOnSf_B4X0tqjmA&iH~fEjIh1fpYgOICvQGdnx0 z^^jM{c%U~pgC}azMMW<+(Q^=76yOhS08$r_9bfY?~F}G z6FxTpf6QeRN?^_-IQs9R8R-oV^IwpGvFh|2uv1sfui`PQ_DU9Y@apuU(M)zLb&U+Qd&GN?+UY{3&(jQ$63s^gAy>*5+0A6uS zC9$fHM3ge!b(GSNN^e{tmh#?tK1cf(S#w;X83h?F#yNZqJ&L%-nMPqwr$(CZQHhO z+qSK$Uv3NLPF zArf5(oQ_+1L-o-MkLJ_~+RSSN>D?vdn9K|vwTauR59|_u+jvS@>4=-|C%fH95)yCh z?VX-8!4p{5Ru8Cy9h<(bk-G3`6WnF0WwF7dJ=tWNi&1{bmnr$AYPE>BU}c>= zws1^se+Y(A$$uMGQMI?w4-dcU`@xH$ig}6@PzbO2;;#A7@6oX;imn}ty&4)Rjlk+T zIgHyQWmR_q0C(!!GR>zd1hjG4nf~bd6Z)l~QSXBeL_AMW0MwJ7Bgf(zwAqy`34*Xa z75e^JF~6?`yw*kmI&Va0-#0N+v=ZjMA+&d6W=4KtV0$9=uH`eG2}4t%$mC#@3+@_G zOe_T&=7w-*&6vrZbsCVce*Rtr++v7|$^_Ll1-?}mz586iDc#9dO zs!?`8JXE3St7vpWKPx~+7xe~<^0b*Q*dN(+EzluyKSVyJ?}lyC13&!!Jv>5}c?(tC z@~{FEmvp`2>eWXnHn8!@U1#8zeDRl>#LCji>xnq-<~M1K+R65-#NSXSc&L)}58SCW2QwHK0Tp{7VW zckX>Rz!HFqFNZ~|9Q8-k#3rZ*7X!S=eni$&oK0wukTgs_S;mK0oAS2w-4r0&wbd4@ z0IP+J%@mqmV*;bF6$!1}S!kCYM64f+Nze_`{~w{^E4#1?4&=^v`zh0!3)+U*1MUxvrJWWz!&D*)^%5oR-1&;-nn-jque zuG}kDg4d7U_cr?P+>Sm9=hTst@;qgDuI2dOl+8#z&ffD9_aweS zkuh?~B>suKa}yR`N5zYO7&N3ZuAF$c<~0ONmuK6Bc5FvKIleDC1lM_!;(O&Ysehl)*V>H$eswVqL^qX3DRl zwgBwB=#F)i*6!yXi`Kz$o{QoN3~K)cC(|7iJiigmbYFAyO)j|XrniGeSum@u;maUC zj)?5G4g29%5rVW`M$f%q|HabV5@utef_r;YQb9}C>1ekEzw4WGonee+WFp4X!F6f$ z+6d8N4y($)=pS|?D^5cw*&o%O2MmY{=7e@vr+ueVb=UBi+ha}e>76>|Xj3uAS@p#E zjd99@v|415DMF4m2K;Sp8Ss}&icdkQo|vaizKTGXHWgxe3yB)v`hK*6x1&PYr<>HN zY52{mv=_8D`iW{%D|GFBlt`P53R0|MYt$t~p}kR8=-x7e#e<1+W_}u%p-b?;58I*d zl@<1ZUoffKphZiV){HBt7=u8_fQJIMz6x#BR*tDf{2WA0w3pbKk?^rlvH*&M{Mafu z&iH6j+N@D|nzW2n3j|_+Y&-YB9}$z?yT+0HOE&147rlN$S!jyFQz9IUsfV1WvrY%P z=(nI=O7o=4VF-!mwIlCJ!;$c1+cnCqHZm~Ogd%5yi%1V>$i87x3{81Oz5!{nM6!oh zWUB4)!D>rxfvD)6gA+fDPfk1vChS|qjR*MZLJLOST8vllIjdxgmRz_f{f6!Vd&Er zrQku}gVt3`ZNn}X)iG+2(-3xH0Pt&!N!t>d+edR(s1rdwGEjwjt8dKC)z*%20#j=d z8j{b3b7eKKeNe`SL_16V#5jD?HB?#Jh4Ug#=o}M>Ecl39;X-P$J}|FiG+})e6_mSB zL2bCBNGl*u3cW^8GsZCH4}KQfMl9{oELpe(cdk>5N(D7-M7EU!@-z2^H-8;G%x3i&JZc+&#PU3287H;fS z7nvkiE=27$PIg4iH{SeMM_h>3Jp#Q0{%U&Nw_loEnC(Xe`yL++$c7xgM^8b#C}ovt zV{nqBu~E_~7AFiu;dN-NA?xx!c&Vw{z#Ef-HM1>TEt04e)CQ?^m=Og`F1C~YqsC(E zsT_1Cg@xiPVPdy*DXy_%Vlal8X!oM2qFq65jdMS3Bcy`kD%0bV?Me3Bv-UtU;5dWJ zsYjSw)lp%I8!TcbfRTnN$+|YV0amj=%TtKaT#eY+jlwL}d~;0ALm9w1samJCR4%K+ zm~w(#=g>KZOAAOdL3ctDkhoZvH@q-jTqqCW(#ODB6*b(_hG2o$%8lCG(v(XNa+DGA zQzTR;XPJR+vix8~O?{}F8jnQPU=A!^G0KPaTN&BDtelYYJFlD z4xmc%Kp~(N4KpFMW*s%-S$NWpO zwr!AmfYBR#w<+b0gHhU%fc(-L?SfophJG!$>Z~$iyuA| zXtadjA4NA0>hXY#H&5Y2oZCu@@Dv~fIpKa&{XP~pg%%A!!PQ{b;@rQuD63G6b4VMS znDBgBATYh^HiO?`*5VYdsu{?N5lF$wzzx*WCUAoJ-PWP_5dh?j$69cPQ!oUvus5W` zh!>evJ_^;T<@tI1&N=3>a=3=c;@6ntUBZPEnhMH>U&yc z=%wYY_Gr>C)zD;6g3a@*hKClpn%+f`*gY~;;KFxL7Er}BO+c!ew&n`zNyeFkO6=*4 z6ktpMF3XD~km&EUNY*VdfePH*}S7emk?ZtKQpJLQXVK|szseqw64QW7^o-WZ8 zxT>idQ7>{a6+1;PVHNOnju#0G;sGZenB_T%&DtG;S~ffh5=VIGk_F=e>H&yku9Gt+ zCQ|7M!Z%K{IyDgJGdte4HEOeapqXLGu1$g&*}vl`YbRMPDhl6Ima$e$Rc%>Z-g z@2%3m7=4h%(Bcb3aSP^;XuwZZQ6_{eGLEmB?qEV2tTME(&!!2DKsHsil$Ly z;0g@1Qaw+V*UEj8`lqf4*x zEqU9p?eC?5QC>>pzMzYyV@GAg4rZ zP-M)VeWxuP;8-^N+B)3UdMH0K^k?UeZVM5{vz9rI#eakSK89Ctv3+un+QB%iLmEBY zj{c3Z&V?Hou0b;W_pPTsu#C5~PRxiY*ZNo2 z?=UnB`Y)lbo04#0{Popk8^^M!%I{Ir8bp<`MlJhCjh<|`cdDuC5wV2YTmLjok7O5$ zCVPsPkKp)-EvG2)@?bG0*YX0h!f)G*F| zf#q2Hf$-PS>#*I+Lyf~R`mIXgwvPW9Yi?*#h6Jv8xLWZ9(xNPR-rFp8>c>=v8qKIvuCWuizf>Ai!1)|@1I%GY@mp{|#2`|wX=!WHTy;BIjIQdWqY6w9H>sLg zD_MWnuxN48I44`Da~t5v$fQ`T2dOMN04gkc5xhTB1L0u2LpO$YS12$&ZcQCovMlg4 zF#%ci)0?$;)dgGr9&%+8To-5Q!@;sDAR06*3?8M`W4|(`3cj`nQMl`Nih>E zDR-n^G4U%2fP%7a_D6wHP?dU9DN&I$uXmi#+NGAsfdzU_veOQDmTlP4`o=?0=|}wW zUV?m+y$V?Z#P>zTiU)Qpb5SkIC(9~yUw65rYjqLx$R-`9JoS3)LjY0SKFFf^sbJyD zJ{FfLTOpp$B= zF6thuxUylNQ+9Gg4Rk-fdrI4>s9H5!{b^~xz?{t)D}Cx zH8k%Sv0enl9I+=XE+Jr)pWA+ZWtIqr^xFUil&e%^O$DYJAy=RUOo?F3 z=7P*~y@G|p=ro5~rQ9?TD^fLS0Q}HQT}PMMPN%>L)|o9mZUrM$pc| z@(T)F-ouSEEO9936q5V=MeoJhEK_}l7(Ar0Uv5DT!Xrj@0K@X_&LcOdz0>Y7Y5=#>+9Ii{ zRU)9>fo`_5vWJhJsAR~nte#K=?*h1xeBF!Y;g`DGMEiK;@UZ}Xy9 zd_&Mp%-q&upipxl4hn)zvDtM9g8?yDmlj~XXu);~w>GxK(GM8L8T*jOAJO{oF1H;~ zZlca`m+>GizU5I)=?Ys*;Uh)sti$200u3!U2RmU5$vJ5!9BHl5w)c#ek^B3%Q|+yk zu1#{cTE<5DyC)61*`X`Z!DF@Qoj?`7W7FK8i$sXcMG-pCld?&qWIG7Ua z%wVSC>Z0K3(((oMOlVtJCfqX;$RRGL}{iNfy|4xR``nL8J2a1WQIw?oSyU3#-kc*>%LFF37l51xf`l#7<$HK+)+lBJMC*J%M{Ay1+|A|UhZ@4FcSr4YxGE-Q16dUkwz zSkkI?hf$+JW*EAJp?d9$HYl&ZB0y2K1o0DRloMBEdH`s|qXc{M%+lU3`3i2orgK5= z>KS0&7Ej&b44CUCBJZ_>-@~Fe!s(lNpwuK&ZA++&6|li?zy~aP8t{I&!mQadXV8`+ z1>Npv0%Zr&HqpP0MUJIUwL=OLGF_`-4hPItG)pi9_jve8Gx3e*sL5B2d{2QQ!eOx< z!m*ekw8^yj_TQn=>mRbVeGT_bOr4h2=o?X5t@oGs%+3P*V`%mtL2pna=$^^M_W8Y(Rw}0 z6I9NF*oDXFCGkY9q`VLsW=91%&%{GTQw?V#cGpbX)8>zBTdHoEb?V#)$k0iv z*)$Dh2y?6KC9W+2wG;7(8S_l1-74K#^2nf`5MCxcNbxrlO7^sUi(Db@oF<^K1AW5j z6b=-3kyRftn;!FF5c@*_T+kUq+(SJ)QM21=)*6I25*bM5-pb`41_M8O-rYHKr?Z$k zUcm~IsiN7^2cto$mPE}JtC~5qLqB=b@|2SYk?SJkbQ!*UPT=tk78Bz}4F@R|Ma(Nv zz4S_UF=ri4iN6|+;IrHA4f?k%L2ehEm}7OL;Zek-FIqk%{b>1@QpnUW+tjMINx-R@ zjoDIV?vH8kwz8HjWcH=Sdxu+@zH+=aP{AtgkClsAN_?xNPU%n&L9->b3hksy%eZ}; zg7)@a$ZCGRnr6=nwK{2?i0F%t)rE{#a|hMcSG&vAc4sdytku946zGvcGDu@t`cxGz z+jLUu<=}etBh~A@0`*SZ`H(&dX|JXO8?&?XI()e~-JOu7BTf0Q0cBRD4?5f=yaNG- zh`{((QH;c_RrK6NK{?^xDYl>c9Tf~A@{O|)Zi5@4PBaZ%riGve>q8qbrpN*-8aVh_ z&s`)a-)WAFP*r<>bys-;=Rcd^MH(x0a_w zISP0?6?u$u-zrk;sd%WCH2drQ8QE-zn{75}YUhARJJtR2Rnn*oa+^$7R!q&d&CO`@ z0xLhR^MzAM$3b9Tfr*F48#WBCRL=xeR>d~JYn^*Xp!RfXxf7dn|;nFoDEMn_)GP=@h)r^LSJ zf2E1jz=(v`ez&QMfw>#Dh&+`jXr-5( zV02>Z4T&1d`u>C`L1(%RImE(U#xDE={1vKO(T|w^wYW|g!1eU# zvC|wEXWNO9<3B)s_$+EQHX6`;^eS?bSE=t4RPvO=As%3`N;h9z26?t&@XYd}Y9wbo z=~t0H8wt@#OU`tALX;p!8LKKUXMcb?$YP(NN@WEHRm0rHoQVh?Q`P-sFbk;9@I!Pc1#jFR0ADWWA_ooth(0nl7_~mZcs7TQ?#xhAR4L;vPNOA@*qyMl$v9u z1Z)-cMb$=$m{JPt)}9WhOS8Saa!5V8f|0LD41$IOfW6b71;9r6r?cSgh95-YFck7_ zkUHFSV>=1?!0!LzDBy1Jh}e9r1>m87c7PzRED|mZt$O5ncrdn50({@1jBOc ztcg`IJgFGiZX{I9h!P1OYO_|~Y{begX~tXK(@^@M)qt;3ySsS2* zg;i~Ehx-?=Wor*ieZ?FQBeb@TT7py#Q%v^V8Y|4-s{jEm6hEs0eYGkby?yL{2A}e4 zSluI~{oixZGa*H~HDm@SkW^!*)Wq^5(lXy5P{?CucVrwH4sPtQx;eYS;9U~J+r$Q* zX=4|mmPV?~&~b7u%YPqJPVIKTs}951(=9VVjehUMgj}L+GV8YB9PuuaM+~blPhma& z&J(_m-=3Anwz(!rd9>0T2P^BJAAYSeXw7&JJ3PESoWEd@gXZUhI45t(yKw}wL^tt_ z32SF3m$00mH<3wVD8w4#v+mF(V_ltXf06Km^|L1LE!gEy?1q}dDNeBS&U$tmD zIN7^dn*0wwT&b3}^HCeB-(KbqJjN-Zl2oH4x9_6L1xMWSi;eq{SFR;99z1AdLP!>n zMnH?&$IA~KKoS8dr|eaFs>J@zygQv%XMIcMrdE2X#y>&e>oxXy{-FLAzorwz+O3LVdC+TQO1zd9rQ13j zt{A;?Udeo|Do<+R`-rFM<#e16{H7dWL_{n{zx#_taQY4KSv?_v*0~2`C~_0r$f?_q zUIZb2i(1Vu`#{x8VRkM67cX>f@v`(J+UPo4hs-!c!SRWlWVFUK1Cy_^VsyK(cLThT zMXY`fAx$Ivr(@`F)pzPysqeA=I-S+u+C9+MA4MNJgM#IPyh-r5XHmN?oMz&h^a@8I z{c5F%j|G=%AYCMKj3&v=k66|oyg~svVl&gUG*E`3Zy$i-G8OD-6|JWv;WZ8Lz6f&r zLJbxk3M+uHMeN*wob${*U+R~j9*GSAVONR_mbjyv)*{a{%WPIvW)6rq9Fwx_JVEKD zfZ_MPJOGB3bdTJHrjPtH?VLcjp})wXoA`}V*;#ekNyT|+1UV)Wx2-Q2Ux?^PWovUR z+Lcf|t~yE*A;oe~0rBDsPuEsF38_ek9w(9r(J_4%JdPh>T;30HH3Etb?Pn738hp^# z`j>b_PFufgZS_Xubr~X>6orT?5s4G+6Xt}JgKFa*O)%fS$fbaCW+p3A8D1J=7t|&K zS=N`=CWs(8%qG0&F?@Wg=U&VrN^ohZWuSMWt#ylU@7^KzjX7^$N#{Wvs)-Fq4#_Z2 zJ+|BH5HxUWwodY677Viph$WG@$EoBO4407D5|!8pTEm(7+!67nfO4CwqnOs!4Js{S zn7*G1#jV^jQJ&P;CzFCv5_oVbgn4>D?Q1-c7ATg(Dm&Rg*EadzclM5Aj zqahxhII$^vg*~}-;w)NK)gFXSNbYLc#5<$gi5RRQLxgL1TgU*HJ43k}A}X3dQ(Kvb z7fSj3%(M?x9~)MqwzY@YR#lPYnfMH$aOezWNgVHiGd9in)`|l_(9D-6x#r0eX%+31 z{H!MkKecU%)q~ZQpdBOX9}WGY;PP4jOFS8P(zKGMo< z>In@NtzLN-zzK}j=zSPup4uPEEI*1ihIO?5K0lrku8B?rf%HTjrQUu&9X6HXa!rhf(Tm`v@0&*4NpyGQhDe zkTtffM{_uRsKbp_nKtcTy`f|@}*tJ2% zKSZ~b4+H}SPtez1fvML1>=okL;SYq>xdL>%7&|HeHQ2GOFb-gw+rUBBAgd@YNFXw4 z+Fg%sd4$IbxJGyt<1!fi>BFCTp|_cZBj?ps74);ltdSJbK2=F2vL@Rxsv9RviwRZv zM8$UXsn(iJ`8WS*BeiyHD?5)&FjMWaM$Smso=80?8xt}nr3x^)jSNs%fMe5@#8IP0 zou>Q7YEt7c0H4cr9rqaodNKbr@6W6b6FH&fYp5%MyNs)@6_rt;d^RcxU}M{o#utGU z{K@C~UC7prj|e_oUC3Lwek(}~SX0|JMj;a5Dq?IVlnx|ZI;ldWGngpGGR?b+MJ>Ai z83j-07{Ed+UlU{&`&7`Onyj0&dK1d4BNpru?cdUs&(2DS z2XZoEflCIWw|X+=JqMzs*GJR0F#mO}&mt#gY_^WS& zrq_jg-pG~Q$;!LP8o-2ipy~(N?mR* zUHoUw&}Ru=$hy39zX3z729rjK9AjNh3X54pNVSS61|5>Qqa=Kb`IU>aFsT<&mbVAw zDva%2=a;9QRyf_wwKIB$n^MQNGZr*LM8!OIL zpfZ+=Sq~5~`SfpgP{bagxdR*9=R7f+ew3sW^4cby-$lE5G&gq>gE5|ndDjN8o4g%- z1_z)#-G65K1Vh~fQj&=!!Za*j2VkEB;s?rGTv@~asjKL<&}1ML5p=H7S5fF%W9dj| z!>*DHI!Q&hL1dLk(W<}MHOk!8)$Px3mbXBx!ooBwJb-p3$Ow!d5QT9n!L~v<)-rVB zbWrYSg*2KdwvvfuqnJ;yh28#YRP(8;q(Kmh7UrHyG?UeA=>y^(P1FcyDH9z9O`&kG zq!&-FIDiUHb^~ivTHKL8N+xd`8u)=xDlH3)+KQ(kWB(|y{R6$fcq5UL!*BSlh6QC) zx8)d3fRgNEJR;CFELUW?I1~K&cN0ip0aPnX-_WOD|uvH-?^%1id zVw|T7nRyG^_W1zuke8HLR9X=6DhN?d;+u&CGH9?Q)`^?8ahFn(Eaup8>!hw5N8G}Q zJ2cr4sN2moB+lemai)A2nYa4+xr+W@ulqig(ig^fQSIO#R#vZRoW;BGObsdFEW)24zE8p47+4t)FTS7Lbpqq-WTSy0Hwd&0dRS@OgMjIFhO`j8SExNO zaMmb*5}hGvf~YLRr{~+@+4FHW{Ign4z77o#F)S2=t>we&$1C(Qe?#zdxJIwIlQ%i? zT(hg3WMe5WDGXQ?nm}y4$4YDR-m94|LHA`#8VI@13eb$}iZ`!>x@IU>4h<$Q8uaNq z_h%OOYkA%O`74LT?W^YE49yP}wPH6m=hR3`J24aWO@UG_@YW zR#aBjGDjyz1?##QMDeaCH-@ zM~NECUWJQ)!Jf&g!$z{^bmLf*D%aJy2T_%F?rEXBi01V-$SvF^Css9g!Ct-a8hStIeE=0I0)>gDKZ^i4>e}-cY0w1XjT_@DkR>Z4> z@~v0Eyuo7^<}dDQ$m}RB(Pi`+gH0{+$S z{dT_*BVl=-{6)k}#vJ4nja;6N6^IyrX>OgxnN34{Y+EZXN$zmQ@~RD+*=k}|oO{ay z5|4ySqWzaXG8h65q!1~OeK+R{T{>&}>pl4+|7U5~mE&h`69^T2D2_v>Qd6dfjo9KR z{C~Ff(?pHb!oUCkwow1|w%*Cq!QSa#(CxpS?-R8>>m4x!KlXo~T97bgMN=95sDaRx zG6V`sNMA~_2wqDUt)8tvw{dg4LVw@p&P%u{72~^(YY#a}R_ES)pPW}g)&);u2BTV< z5nax72`U;DdkeMHU3^z3$d25&ZQYl{aF^(Nf((6R!TG(v*6^4-c#L@9Fpk*jef4e^ z*XWJ`iUy^EFFD8eH>v5Xj)fQ(y}AUBoDgr4|=LBcG}T{Z z0)LG6h^utMP)KVXgtGy$sPz@F%7mTf-1hkvKGyYJTj;O@VVYaG@& zszv2$nHI+PGI4$%c%47jkv2rMdRzu?Uty__Hlgbzx&|~-4ljz=Y0)Y9RdGb= zgy_^N0syc1w#K1*Np}t7?6Nu-kkU^jWmMF<&_;UgCc)lOq1|LM))Db4Fx-RTjdZyo z;Epdzel@d0)Osgc0^tcC386C+u!I>89GqZj0NbRR^K+8qaM;bKO^hGDs+lG6d!$;s zV}CV_3-|D{;*S5bP4LOrQa2mfG0#NH;PAjz9`e-dv5V%(A#|eLihDT2yFUdErj7#k z`GbyZs<9V$x{eHAEZtM42|`HtHaO!Jua=nLo>&%SQ*z8*>THkMCb{4F|7{J(&M-mN zqN`MG$$Y#0S;~E$&ios(?Z;6?2lqxIxjW=?E%9}qdBy;wUJ`+5IB*=W0}cLhMqz2R z$8c)HJ?~9|YBBYp<%TXNC-j)CnN?!#V7jldYD{QpH{TD%DWE6M0Q4t>1v3!MXXoR0 zCM^<&QlD?}m-h+ikt~KF{apO;SB|aAoh0k1`m^GMCt191Q;P97WMZJ2fkw|})0L6h z=I~ch=RJ$$M-13RcNXZr;sB(>;MAV|t5$-%rvBqE*ngf!wL^iqcMt%8mw%!z^M6s) z{TDXvYUyNZYij56-+>q>>U;LvYzThv3BQ4>dL%MvOW}aQfbdsQX4DKQg4>4hf&>do zlV-w+P?Dssu)lZQN=+h^aytZ53M}J* zx`Ja+U{c6xYD$=omi>>AGZ&H%4HmW-cO`rhs!DTxf`0?k5Rzk{C^b&glmey8$@wsl z!BPr%6djEFI|^V=eBj^uKE4p`tjY>N47ol`Bw4TDdP|ASIawPt<>Z;RYS$Yh0KdmO-RR%X3t5i@^+@(>oH zHsk-~x@1olp|_|#?{8J0Z5QtA!;1t~rZz+$Akbq4QB=eggJ`?Eoki<*+%)J_>Y|Xu z77yu7`FRC~F6WocN=3=LvC1AL4&b>kwybZjW&X7;H36Nn`ApuQLZ8TTcqzv`&2VqP zzehy`;AC8y=8;LpWVAl7C43L2mf3T^8JHPi-$&#Qe}(Pk?N#h!RP)YWeoqckQo^0i zBi!P>5TvUeDEYIS(w%hqAl~XGqkbJV6mHJ7y2234lUzPM+nA*#HF-z=a6C*jrs@f(q~EIB=Uzn9f!wtc$TiS8FD1 z6RB}ZXT>)49cRbV>ESNu$Mwa@kT%Vt8^gf=>zJq<>FF);~%jnUs-(T%+*ly?@kkNpZnyF&>@Ekv5Tp zsU!tTqOnej>cN$@Od3u=<~~znYU@KV`pgPPMv-1ysd11%AOWeeVHg_XUw|E*^)yQz z!@7nKhn-MQ18=?3Q`Ww3Obf`MWZjS$`-$!$W?X%zM1GE-7Mkda*+_mvMLAR$#f%K* zh@ksYR6~Fxa*jYWtzrJ;=*C`p%nAO^Te%)yx)V0tOwBLiEg-XY9Bo27b>j2-Nkzn; zG%!juP;Q2sPJRsl`|^^>i~H3M%6T2F3vGeqGr}Tz--pYg*k0!g+h#Bj=kDz*lFX_GcmIApVcC&yB%vMp*m5&R(h?AG_7l_w;}6y+rjMrRpcJ>-K-~xo1VCvr#>#_g{4PSZze9 zs-Bn0&Y;=mQUy|=_tKG{QJGNP5lvG5Zx+A%&Fga55 zzX)6fwti{7kyK8&M*jwfm0B))Sgyae7C5=K8Feu-Y)H=3)bsxUL*Z6!TAidC9Bf5_ z_mM*aoE7lQ&1RBFasLHGy`Y&_*5vUO+6OeE-z;PIW5qaIKy9H(w#ICqum+2&j)CL# z+#9)MeroG6-0!kskg1cRs^;|$9ubOQ~5fH}v*|)!;Ryy3K zWU9GgoBxRYqEy}Y@ht{l58ji&ob1RmI`4qZ&<>ReX5KxhDVIl>7a$G=Z}S;{#$Ilt zfUQe8S&FN{s#@9qj9!>Zv%@FF$nr38g?u*5#RYFfJ2oC0_%dlD%CyKn0^QSViCL`~ zL!+fbv5>WmN8iZweax=hOiL-Ct(#uLgyM^0-Clja>`|>#j>C#+4rs^|5?uI=I9I|N z(1eHZT&ZO8xOMVH6r~^ExDj z-dU>2!zQ4`uey%&qTfn3)F!0HIf2N1e)}W0l;uf_w{AgSxDZc@MKS^5u^A;`K$h{x zsilo){_a-bi$5Z*vvXG_2G2WSXOszFr3dG0U=9PrYX>L!8kwT1@Pdy6DZq#fDXMCjk#1Q!&vl zj+DJMhR6$EjGow+^cvqK-6Hlh7ems~h+2}nzo&~*zwh(3d>vCLPJz=JzXOCIm+pKy^M$0g&4^FZ zLdXZ0+JL#``g(;VAG{_w=F7(C%`*UYopC5Pq&y+IGG+{&HXdNZPk(HEdljuvKQI0%b zEW>Hk%UB5t^NYMh0Z&&}NGnURvUZ@*KCyHyYw;SlM8>9*i#)|MTt|$m00&8{8!$Pb zNdfLJi;~EDi$t+jq8(gX2tjDLS~vVNb@kJ?05=cE8GH*MxGoJb;P6yG0P^sRLI>e1 zZPA}V;p|EsOa=XNku|H`*JRzJrx=|>y@a4$W*$f?A?!&DUlJ5J^gts?`?ySo7z&A0 z$kXZS3@isZg`^Z4>@H@ffK3M2^J{`BOF)w_V`2+zw6+gNJljd|>!z@bWF{^f@nQUP zTCh&i5oS_$`U>;o+;m~;0YQV7N|%tJj*bAn-tkul{trsl6{)({BKu25Q$|ay0;6Lc z*apr`lbp^u2I%XIMD!ydvDXIR6%Yn)mv2D0y-B{&eU-S*Y4-{9!o{vJO+WG`5IXC= zKS2}Pv2ll#f9*H%GJ}!nt2@ge91U_7{e0Fjcc~o(MvojO*?adw@;im94&szjz706A zsE&{uJ%9Au>O|tfR_|YT-z}TKK|@Ld_~`(l;mvN*^+`7J3_;OZ-ZM28>!K1s$X}z_ zUL68~szTidLqhHw#eZ;+A4F&#Pcoio~EL2b%rUE>1f!0_BNEdVzcg7v(tx@(`_6l(b4x z<8)2MU;M(-J-vt)5BDso7zS5EC-e9+5KzHvh&Kju<`q|n)#Crr zi!qtKLP)v`Qzf+o@HF!u!!V&SIoNd{74On3>%Y@C9yFP4xRFex25~ zQ!X_h+WY%F81L*T8F(34A#lzSk-vZM_J5C$L+5j{vpW<@dT&Ycv4SGP?}=^iGm*vsk(}@vrcggBPf{y3V+M5Kbh1Ytw@^$c(jy@p6uLd% zrV|Poxx;g&(eM(?Xz{ki7Puy0Yl_TbSen0H=~~I~7pM7>^MgRqcK7(Y@bk?o6=nH~ zMEGfcS9diM3Dwb1av~}m;DWQOuta7;(?e%Q!JHY`ZK*okG^&wC$}ObXRT33V{Tq2Pd6Vk z(y+m%UJKpBGTpQeQ#gKXSG)+1Dc%7;GhZHkQV39+e^iHY2t<(O?E0J^0GGjB6H+L# zpNR~F!uqCOQ;UiyI5gu5Co=f+T5~}#YNranJmU}}Tc=pf*O9T>}cb zh`Y-U_W(n4YZUy(aBYIDN^kqiAlDzMW~)?r?F2baVSjenH*F(NdE?ykvLX`Gqd)TWM4!u?#~ z9wMv1qBWE$K$RP+)P|jlHu9L;i~DAbhq-sd+C{=8Lh!isB0^vuiW52jpF8;46q=!= zRuq1}*WkvexsGa@c07MPs>7(TDFlCP2!1@#N4MmG+$CdYMsrBD#>y3=6zwEPHdS@@}nxj4)Mz>_^6w+cKmVFK6JcPd(~>V*ue`VbrpPOd@_Cgq53N z;FM>W%iNp>gTcem0vJCL4gVYgDGm+E#D(=<@IZ4Hw5>-xvHtW0{d# zi*M-Lw9h$>Ye$32XM_k!T(K*?c$Wj8i5$JFk8uYqKdhXI&sY>IUh17tz)34W=5`mK zWe1#w$3}o33_^#zal$Y-6bT-&Ryl)fi^rk&v}$L#MbRE`bN1;R0Tf@W$wRI#f%~c+ z*r%>`7~q58^WYpU;^N@~0rU8-gFT_%H4a2BwJc$~vY&T=31JI^-e%T@#d^NvNPQnB zWz(3YS2RMnZ;uHArQeAYfMj0#;9WjJ3bPB_s%^e{rO7`K4@rg(fze5;kTU3s7sq~! zvdY|87bSG2mY`_#7iQLdzBPRkDgc1v6USgXgnR*LP$OwvBUl3IkjUf>M=sUiIE)+H zTcDm5WMSXM#s$(dY7j{P-8#mNFwOY;M%2Iu>?WEM_Ris{AJg#zz>HBfz8!sxYp*|laytEP?~HG!;X!${5XN|l?)3Un z$yi-f1;(I{4BTyFBOaQt{`h*xkkE_J%)&^<8xxb64j><^#GHB#pakGXBS_U|n;k5X z@NWf11`PS=#d->~%I?imx2e=uI|mSoF@N_r`+xo_{gavgSArn^|Diek%WbrA{(sT7 zgC}&<_5lF^aR13x|KK72TlVAseB8#~{GT*sn7>LX-9`PKL=#STrQBzR=h-56vgziqLCxhmK1ktK+BBQ&(lMgE zPEla7|1*8X0fm+EehJG4^AO)olluy|DT8?os`vRqp6YN8MEZ_ev4x(1xR!$e$C{9V zFgKD=#R(|Nq~*B^Geni;eCvxKVnnM&zECa8WYdhbd+*X~l+RL#B|R^$fzKBiJ?RC; z)gk|E9}v)<;=BL#`W2!-yj8=Gf$llr4R}$=_{~o}zR1SF{GYco7SHXz9sYj118SeY zha$@)9FJ%uK*o5L!;KpykPA~q%Lup97CGZ_?O}<7gSEUl%Wj&DMC`~Z!VfZeak7_; zp(e$8cK_l`&t(nh9pMv=nNDsm(r}biADix3+I~Ojmr?|IfN22AGIu`4{Fn z@~<%P{x5}L=-^;t>Ga=aOJC*gxPP^A4SJ4`)-@)C0~r|&Am(FQm9mZ*)`+%_4yoJgjaDv(VeY6}|yT=?qp z$n_6F64RQnj;9)L>#a9Low!_v*8%Kk;4sl6gUkXYp%V@WF{MpTP&jH#0N=#X9I0A? z#llL-m^2Dk5_y~R0!ULnxws8CLeb=( z-dBUQC2dIP8jM>T7(9RQQ#ifjbf2SkHc`a=Ga|+%j^U<5eDz3{PK|82@ zeXL^5p|L##rspH?jz-ciM&*u%2Z7I{Gr_*hjsNldFg0opw=!r3oGIkLL>8Qp)!29^ zszS#ip7@?AA7&>rOYnJPqVLi+@i%4kyl&?43QRFq-cR>C;39q1OhJ3@{aY8Qk%jH; zf@x98d6jv*@I|Fq-BC`X?6pjGVGHU=$9ZQ`z$%Q+m>k2*j}-1+qP}ncCupI zwr$&4v28n9v6Gv9?)!M>w6^cZ{F#5Vjha=Xdhb;|_q3x2mNUnNNqUGcF;c<;ctg5D z>-SVjDz+P&jZZ?S>j0A!{H0Y;DsqK+Yz01=Qq7<6^{0qjO`bQp)n-oW67Mu^xLjd6 zMdMDlIqOl_h8MK|j<>Pyk=QMOcBk17jr0kH^CarQ_^>7Y`@WPSe$-;@8#>Q>panQ6i zx+iYyG{oB}Fywa}$duZbURFuO61Pn0p6N7nS(;3C(=D>@C!AOHk)bp23&+AE)!W;q zq7_LWdeT=W&F<$+E8m=Kk|Y*fwI$8W*p0qPn^kl`Y{}6c**DoibYSuGlX(;?8Uv>3 zmA($Tju24>F^^-iRbrDU;bAApT9Od!gw5N7#r;Fuwyj#A0p8tcq2FV|Xc{VXACkwR zU^_309=RqrxSF$_A)rhG!JoimR1SN2bBaeuDOIU_xF;a#BW)wJdk+fjrRzlLmHQH_ zRcwZ-Ox5w%S~t6qvbd_|qU^=4_Rim4US4cL?g`Wf9F}tGUqJ+z|Q8pmdDIMYN{1uq73HQd5j7@#+pn=-{Z2kMLf|LaFl z2S{WNjG^=k+$+YIiSQ_bWshVyi>bbad|IYsyKARPHB*PVd$;tDLf$%Q$KH6Vp=hVf z+ee*7EpLCX0b80Z9Zc|{a<9Iw`lz<{;ldE-+xsUjuBoDyY-smO(Gm2#m7LPdtXm?( zIEO#uJDuqTAT_uS6_W{1Xc^0Vw)}4>U`KXC%eNwkRxnqdkDc=WDP}^Bt42? z8iW*#XH%+j(5&Y1YSW2AK)sOXY4&Q(YW(1Y-^)3-9DY}{S+|_Pzb>Lp^P*4!F2-|p_4K3USGfTI2B9DMYCZo=>>E{8Ry;J5(# zG3@B}=Gd<=RiZx9Uz7{&zK*oI@W_)ZWw)G#p@+s&2JQk> ziN?XyEJ=oLW*Xx#4<+JvQgwqTzPa7-JD+b~TXv;*eA2tm!e@})l+J`sIkLN5l!^l6 zrk3%@0`4St>L~*Kg|#0@@j%fNEcV;iaJzV(^yRsP7aEj;4OXI&(Yj-sI2}b0iGOe; z9cji3kY6y4xqlH2sud`oR{T!9C8t)bNo|;f7-GAndl!(k+7JVCHpTv|)D78nbrUSF z5z-Z{L?8;pV8oJ7lA!EL@aSjad-w|Pl*88d;bB6Rs>2PH=t;^?F`zXn=W%n^Y~&qf zCqn?~9|-+y&2zTk*$I^M=EQ6XwdXVg6q(}zqPKi@n11$h;W|&t_=AcLQj+eML z>H3RcG4Eu=%cJ`e6KN1D7Au%N|26`z_y@a}x&-!wQ6ykQj|E9o-f}fYiNw31RGzNN6SwoE5Ms2wHhD zBei}#*7G%dBHT*HunL45q=Etf`Gv84#P^Oed@eRJ`WDEodkCLkzwMK~&VnX{UD8yr zmV9a9u+m&RlCszYwE;ku<*v;i8ZcFHq^MBQ_|9?yZ%DomMLCT`AsKSA2c5n{Jueb* zsYp0cOf(p!LI&hFgsT(Q_GW|MpM&+v*6bGJoQTavpWw;Rvw@o#Vx(wfgq~UnF+iR< zc7Vt?g(6Azf{jW*2evxzLj*F1ufi6>C!aS1W#)&b(_*F1=`nOEtC4$|jKihJ!UZ$u zWX|X)0Lv0Vl8EDS%>-K0V=UBaMKa|o9@GZfC2WASDf63Zz0puHI`!C?r=>Z6D;J21 zWd7^CDo1IEKSlGifq=~ln#SXxOcMNp2rKdQp%8ye0)qnjC8Yv}_P8q~NtE?t>Qe2t zs|90Pory|`$@^WwnE_T(*MILV)kcKYq(EfQILU2Ls zr_jTd{!NVZcB%Wb*YwrOh4Tb+r@=F9viD#@;tH8M(a*}t#J`82o!L(&dRBzHptnbl ztT%D}jjD)Oh5k=?;EoUY0pfV_vwJ#Fp5jcQ(WaXDZR~Q3la+;DEKa$S`qFYc_|a-& zvB@KIDYQMmeXlD7QU%#uPAQg7I-zCc@xqYpm8R19a43q1eh=#;3^J#~S1cQo4-B7T z!Ydp4J}A2@R->(ey6zFkDYc{42k!97Y`}SLGwQlI5FIR}Oln)6(sSNa5#gEGYC2#l z3d&y;20dx2lu;JDI`^1IoxV_qjWft=&vX$L34Hbo&xvOzW^u<%9b-ih0%Ok|I!vMP z=8KWyb`BH_7Ssx;45fAGMqYHzDdGdViYKAhh}daaHu`^DH4nIg$*66eypN$vV(QkA_dFUXTYu?%<)kxsAH+g(|wivU0irCpz z?a^GU5;iES%x*~!r4)JEF>gccD zpG0xGKYgUhbW9B(I`aBCFXFF}tn;2P2YbbjPUrt z`-Ee+eIkG1p>2O&Yx#!i$XtA1PxtW*qHoOH=US% zs6cuI;T!*t!MH@hOn8Lz`d)%^+e~>G;u@6i9*HE}j#7h@t4Ye@YXZZ@LxxU_%-b$M zU{9$}ENjR>13|-8nWAEONeP1B%wvT1w6#A}6kwhu8~vBrS{)1;^+s0S&57Z#StrmX zyK6a|{vu0lE$%_|tcv(D;eA(VHI1_-T1((}j=2xFc#59W5ed2{rHr`YE2lHNPi-mt z|1*<nvFl`J^i%qdS3@?oE!aQhT!v{yFYea3tLp8i}(czvJ`RiioBwz_@T%H2=-nu6R0vjEtq2m-yz$jus2*Ma_~hH^>fH5v2PVx%SdG zg#nuEY7r%EF?(?6dr!^HS*Qdd-^#>aq1D8U#cVIoo*-UZm%JI)oJMlZ_2eOW-NhXr z0@6EL?--;m;I4yNOr972K*hwL@69JHs%KIpHP&u4+U6~8;&~7-R>Xk!vNuda0y?^wz0g}%Rru}44lKNnk;VcOYp7gxMX!_d`sVC#x z;uuPiqWnGq3*>&g&se9RM;ik*3FQ%N*EEIk1H8j7aUv1daLR>P%*iOyx@ zFQZx)-X??Qlsy&iOyv5&IN>utsbn?>hVDgq9e&rKffMm>J@R|L8gmnG{+CGI1;SUx z_No*!=hTqID{K=;_9q!bEK<3ngP_3SKKj16Q)luVaXpCw8wS&3Jnd9(BONQ7R6#v> z_uW_Bbls#=mmZH}#~Pow4$}R#H1_GA){O_BT4tW;69cE9FTS zLO0>^<8KQWn5VPYVM!w{AN zt+pBM-u$Ob;2gjAbWP_pzH&`T3&y01(KK$>3ohiM*yg7uiz?-Oqg2r5iHw&`v@o1m zf)JBRr#7a}S)MBPNf2H0XpsZGaM&;B4uS_R!_{>h(J00>V|TKo&?4t)&Y5N?6FzLV zy*a3d8bI4!VFP?b(x{JAA^4}F$SE}slq~V*k4))S9YNp+2F`v1J+k0FvJS{D*95lu z-50g&5(qB2rbJrNWIH4n=mmVrDUSlt*N*!+4H#+5?5%RJ1VvVg~wD*bBB9 zOO8J5;==dKQ8SNKt(7?Y3)(HgA7JV)PM-|a9=Dj%z26fhjK;-GE_0f$eg@de5;-6v z6yW1v9VR+^X&?GGNe<33;H9<5?w{Qe-GYgDI23kUS<@{4_>e4*&g5HJ^rXEkAchp+ zEY)jsghqx3Q6BR7Me(mJ-t5`zB3#O|@QD*K${ru85);xnA~mENq_;Pkt7>K2(`eQl z&8Urox2kEDY?7k3;$^}@?s+Dlz=y|;;N91Z*fXk`9a?q6h_4o%%Vu?P4M2`|)S7TK zIDl47@EA|)8Sm?!DlL?g;DHh0NPs)m?MNASzb%vh@>tBX2#OPes-v?u+Q znaQzOW#Teb_Kz9qx~#>-*J+h}0^7!vtJ0hUSqC%Pe1NFMdIb_@Vv3-U!M!e9;ue?A z;y#32gCgYn63%xqRx7qK9<)%TS6Or%-LGxCww`h?>dB%&DJZ8-ihM&SaSk>Q@U2WX zzLP?EAy73Jy8k|XfM;M?fP7w{O?cK!M|uCb6zB|e$y{iGgSjLA;Zic3x!Rf z7GqEz(sRaj**e8y+hGY>VQx`8^a>0F+2jT-sA(}6dvKrk`kg~l+Rm5pB9}B+^;A>2 zXS2I!r89w1`q6PCcl2}0)UP|y>DArbrqrBzxHGA(CsIkOlC7H~jpvjE0Y#bODFZoa z+EgeNHo;RO97b0mB+Po@?h1--1#rM=OTsQFQd2VB@J@HaC0!T%DHr5f(eSH%16f!? zE)H~o^)GJUR4?@Q3wR;f^LnV$wfiwC5gI{9cTj((y>8LnB=`N}3h)XZ>`06+XDxooGpJY4B4lGx+zB&V{ zO$qmcKM7bo-G1gy!+G6*75F>rFHgyK9RGuX1S|c} zIQ%f(;2(HFPUb){Ugi|caRY*Uw8andrv{Lwh7(UsPm_7^ZU-q}&z6_&i82dAp=0Wv zo*teFQVlf7>rSH`w-iVkcX?W7;d`IRy@lsOe}o(FIC_*xZyKT2ICCm^Lsm-(oco+^ zn#yCUILQ8Luoq}BPk@wE-`4rRn}gj^8*Uo)I0hAO+wFt&s0Tt0-7=;FG~3)diek-F zSg3Lx+2KPCpK}(7s^Gs~ZLEdp#jDF8KP0==_(3x?@I;X6LlnXa{ zq+z~cLX%T_-Usv(G-vE-onUr7ODkn-w>lCAT(q|wA1QPAKE6$DD4TvX(Jxe3%eERb zT=gO8e{8Uvj;jwSNcxkoi{Q$+Bdhoz#yr+Z2u!;|R=N$kM(+!n^RQx$-mdTi#9Ri_ z7Lie0X)<5_!at0WR+l&FyY|ta?rSzIOHPH3L9X8K;-!%eY>I1V;&DDMt&crUOUA;@ zAfG2gJP4k3lli;*oXa4u36-1&4&;k~gIn@-NW-ncC>ej}Yb`UH+n+ksowadPkN(Wj z0lo8p@r~V6D9t^|13*DT=Y=5y`~aOvFAth=wG){z4ZyuvYylS8i2VSSB^a3c=0 zHOCAg^bbIcsV|`at}$vSoWK7GtmdEl`M)(DCbmX)#um2!FoV%a3U=%C2%|gkFK}ef zBy0GT`1zDbUglz@5>W*;UQmdR3DD}WuEtmdJ)hGO5P2+1ABS1KZr}HOsbRm%n}U^1 z(lUJH7Gr}YJ^ZfdIu@dRqDw(G?;QHq(jt>lR?35Y!ghqt;HL(P7ra z3VbY?^-NqmGfw*BRjtP%m3v^catDn&;DzjDof&Mw8eLk1o^kzsTg7QlO{0<_I7h51 z(3r(k(#paYlESLv0!ea#mz`1ZJQj(!uMmcOYy#10Djvb6;Nm*KbpZQKKExG3so=>= z4q2JFMZuBpdTuGpr|>R71uQ7YBJ|jmVUPd?mBxH)eQuc>OR9G4}8 z9~C%~;q<$Ax+4%&6WHP?ywjAnDIXf|Oi?g_Z?jES^?u2nv%TqjTD$AIlsf1UsU>AH zcEG`Vqd}2u za-U||liO-mzj7&`IR|g6Rg}S2ksxj7%r>+T4KnhOHW%~efe3q5Gq@_6b!t(ez620xJ+jpiM9ANfzV-}ozA zLR-iUL4w-|Et-=;o_u#)8I4>K?n{wxN^SaH}hIs+N=qA`4qA zEYSWN@@phr|3<9%yW(>mlf{IZ_T{)Nq@H@%i&Nq?f_EtkUYXjtr0VeaVE42q$ZdKByg zJ~PFFO6aELxFyr(a-97>hzx)81d8^i+ulu+$L)f-YDD2vLzspwYgy#ZJ@uuYogj*| zXjYqXNt^5I>zj!$R-$r`h_@Z{H>P*kK&5KeaY4nK&U%WIIVC2u$uD!3!ZCRH%2mSO z+mb5iTx}gw&ySR~nCB+)EUA9nZCxN^0|{N(UsGKazEPH86Kq^NMm%5t13Z+w>6kr3 z004BN0RRyEOC*|FSerO`I60fx{G_*Jb(??WC2msxiD(Mx^A(qYwQ}2u`!)r2GC5!b5xIw z#AC2Yn?FoBnobusszx*<-W@i_cH{T`BWQ%&$r23@)IG3YAZAQSldFXn;y|T<flVx-Hdawi-q6R_l%r?{ zL5}6VF=sU^neE(fb?d>R_JBA#V2nC$xn@Q%Vv0o)*Nnc=@3ZsQ`? z>nk(eM$DZCOedebbTu5v5qqDYiF`U0fjq^e#Y8}IPlBv&4uW#{Ow{<`vv>-2fJ~4Y zc#N`Z#GvqNXLCY2acu+k@gj?f{sh&{z#{@vt@ypO7Du{kAo`A#HR`2tIn=R!=_DR6?z|V+dl=s+k&HirN^}0uo0H&(QkvI9OPIg1}q@L&}HrEv4(+OStXbq@4=HZ&gvKl5pM zoGS`AW|@ z4i(1J9OekULJ#DS{V-&Ng+ovj2@i8$9Q~GQ&!Y@jZE-q|O&T!9g9dZ2taVJji}Exp z$yl^vktwtL&M{vPrV<;KTUd|{WvD1W2>qGGejOHeOF}iW3Ze_R4&=H@GaXjZe1qjB zgReyc+ZTw@$_xvQOioii_&&wox4j)H|l>d?OBj1y>P$Mzh;hx>Xw@4 z8AI10!_jn6MIwg5coRv;<(}=2%xDYo-3*e)!{ehT!A3xZ>)Ir@t$&_&aw-K)G?bx^ zib5e%y8A0=xk^Den!ko1Og;Zg81rqkzoV23m42t5d;5N!VC^E}j_9cJ1l6bn<^A#e z_>SqcF`lpmOzz<0WB5c4Nh~IMi;iAy%`J?XJg`m}lbawL;Vxp9f->4mk^~Z zRklv@V*Sl~#)IL3B8&9{f(9q4~6^nna|4lci+(K#95|(p-pz!5xM)(^DobP&Afsu zr1U=ZW{sEyY&H>8z(19qV1y)f|L{$!pdhq0lfFZ;9_ zk(9kqfq~s3M!Y2f$8u)Zn`m$$H`<3?kkwld=dOXSvyXyO`9(CP?;}1%icYgy1{B2P65EMnf{mvjM~TVZtGL<37i68jSkxr~QjB%Y;y zZxnRa(Ydql4g^I);hn*S%~aQ5qQ#V@YzK|8fKwHb;y_I!EHvNYu4ceM6qK?8km_*! z@gDm~E|9w&g-^|$soGF=e!+*JrsT2Hk?y2GC!ZI&p&WmjSm{~#@iz}LNjyz@*zz5$ zTa0tXE4V6P!j1VQH`CWI(3zM``zwWJ^fR3~V~6LdRl9x$S`=by z?`jI(7v~k!40g4O`6i}02lz#C@XV@{bW%ohW8q7;8t(!(`JKxS#Z}wNg+7HVGz0?b zIl2^kOj4s z@J+YbYo{k07HMN`O=RGD*d}VZaL=82NQ{|c`WyJaTSCVVF>Q+%?m0i?ZL z0-H<5i+~pZH&v*c6r|(yIh(vBT5U5bCCNd7O_x_i!;^r_8)9N3-O zA~ZsgwP+VR|Df*M-uIgb$IrKk2N^8SgVg@NL~TKq5Y_^Nm#ECETJ{E|pH4N6M~Gq8 zV-KcuJui#{mAA-|?K?EEl`J0QqoMC)>SWAXH9asOG#stb7qW# zlmD|4qQfmJNbCm=>iI#3vH#_m%&aX8jsD@&)MV^7S$`U=zrN^yKvjX7HsRUq_Xj{R z$zWlqvj$`xAtOLZ6gq<_6i6sKJ04oyLJAIbyt0eE-SR0>@6TRT)hje(-d9=gf>4hm{Om^Jr%s`}^pmzzcF4hnyjb(C;{UqnrADYMC* zXH-V+v^VU(oW6*wMzg{-;qcjn?iA0VwAB#o7uq zKWSVO?Xbz*1Fg_lXs@m@^LXJ?;>=9;XeU3uU#R+M&!RiN|BzwuZPZRWvT$HUiyXeA zK8d`vX3!e5W_>Y~acj`b>dvS^t(Ef%RmV|pv5q?42O>P2I%9-Fyh4UbR_Z;KZf)$& zJY(eAKe?$-A8@OAQfyycVx0wHBvES;ed{(VNfwr{<%!--S*y8pg9$tuZ7 zDa=XrH7#<0|237LTjjFf&9Gkd_m3IlWeKwcF-&ooYU#WVgkP7(no} zwDEcjSH$8lhqxiNoPTahg9Xn-7jGX=mMA3v&ww^PuOG006^AcE?BW!<8YzU;NRkx8 zGYW%g>+xaZ_k-_H)pwd6AwpqnqPEd>Mf`{0y8^-e4VK6OrhzFmcJh^x z*T0|grf?tyDA-m>`CD!MyjI7(p?k7itRUFQAO+-eI+u5rPq>rBSM`)$TK3xeBz;pV zgkl@YHy%aX9Yj`kvA=4JcCLDP`2&)39BX@HGm7GIIpc zhe3`zw+3N+aTf~|2*{cs4V${h&1#YGQlEL#?*9nL4Y!xle)n?q)(akXAUF)!(3&K{ zK(434G+de-)O*ztST=1nMPN}k5||;=t1`IK!!)!Mv>?4M^T8N^s88(j4AO>}D7$oh)bCBf=)^yjbNO> z4ajR!`vt$thMUH^-NKWcZLx)lXLZ9^L9Wk<^D0o;gxvcpT^Qqq|1B2QvOS9yHT)Z* zv|C@kv6caIWqI{e2^+yNW(&`Lqzt51V&tWa$Z$f77{x6s;qw8*a{)Z5C%Oz2_7{7# z>+Bye-9}I?PXpwa0mU?W;}-(Z)Xyf$YNW2ez+=^_H09qM@;dvJ&HlQ#p_j$Z+f*nj zx;I`3lmSHfja4`DvEjU{F(2~pF61xy1R`@}S$p!7(9{A-dsn|PpG=qXr|m>jxCRQ$ zy*jkQ=6tfi67rzXkxl0jJIXLuV3+-q*cTi&I+ZkcnqjBC6g5~yQHu`3gK%?3#0qXQ zl|}_9ytY60$p?;+VHY62>h1rG1m^GIlIOhs56+da>ym^1qhVe|{&yX-xq*}Ue~RS) zPmkzt&!-HA3~04t_&3f#BZFmRxk$VbE)a3GNqWtiSdpZ>O?U3Qr<2G;DrFNbFU=ps zli((&)9c!uOe1NXy=C7udE)g}!PL2bvn0uKtjO2xedZ$a?Dc5)74M)jmEm26(w6n$ zBCR{FJaTOnaxj~f;ay47%^TS`sX@9#v0rNVUf5e)}m|^`PqAF|BMo~O-nJ{`c(xRhcv0DV4(Mkvp2an+;zD(b)+bQDB0iM=< zsOBNsK3M@K38TAAvEEPWiPL0A1>94#TV4flB5LGj2nmoPhB3piu16m88#SRso_J zz}g)D;8n4Z8=MXr)=qn1T1}eL#B9Cqx;8G%*ixfKN>%pka^Jy@#Kbwtos=awg%K*3$ zEU+I#3rjcUP?4X$*0`sxs?3pWLL0$7R;E%pPDL0ivJHA9wGU&GAj!4%K{K1WS+@>6 zM{QvF1BB)ANYL0Cih^Lv8B-(P%t7A46I2!*Ogkq~d>%29-hym7*m=0Jvy*`9HFz&( z%TrNtCrZ-R9Z@)T6+_Dp0p@_!TUxD9gY1y0I z1ds13XS~Xl@UNPMSe=;7T3Ui1wdu2=5re~Lj4-Fds(D-My4MLxZzyt^pTPE-FlkOL zhj<W zC@c-@BrpMo6_82VC=$ZO0YHcIDaKL=lhZ*i2#ESV45Gd-0NyJ?UoVqAZh2`B%ZrRi zsxMn1bXGND;onmei(0l;Ud(B#{|58r6>-z$*Z9r-X>K1GkX63|tdp#IR_`{k#?OTT zXnA1o(~+P!1+H2TIydmBVBnyd^8q%u%#p=~7z2i?j5q#jA<10cxf%k=^}rRzw^#SN zUYR#93$blHXqtJmsGvFuTkVb_r4?d0Bd=FMJQ5VicZY#=XgdRt=|Y*aU!A11C`Iq` zR9KW9b9a-ftZNwNGM1;uf*uMjU)gFcSg9kH_|ww9>`{3aoB}*;T)>6oOMw?;nIt(` zz22Z&4b!vMf97dOp}kmV=D6YrsnTG#2{yF{S_`+vxH3 zWa-5TGgkb>NvELABSuDiR`N=m#;PAjE`!2jkO3nzx@g7 z!3A&mTK0{j@l1jVnRhK>pbKhC7AU@gH5wk+D6!{8!>!fg&Xyw_5%7a$0yBZr}hUen!>g1ga6Vq~j=hA`^ z$5xbPQ($lpd(v3fsDDD2`jPypI($^(P=Yr9$+PX+fHE+Gd1;g72rSj>wWI!;H!VCYIJ)JGbp zcN!q;lqz3S#cx{?e;cGLft~cG81xHHMvnt$nOENm_RQM@>r7`Zr_I6E5HI{mZe?jLS4UcoN&|Kldr-hdQM${yRu5$U%4UtS(l7A^>;pLy!n35EhO&Nnyb z7N-fkmkWqfDXtXiFT`sS9k_~wjSloI4k^y7jp(QuXwB`Evzqk!m}4tAUX{y(9cPiA z*OGPM7!CV(WsH(el{(Or($XYH1OH|Yd6jG*6Qylt{uMY?jVjacZCTbo(3e#b@8p)h>{9RVc2Q& zLv%4*jV(b12~JY@anFHaxBnyrqiIe|ttE8DLMe}TdEN70dKez0HBxQ-v<$Y22{=dFBLt7X<@e^`sC&J5egWcS0uF{)1mGh+@U_Ipa~d*Bff14 z-H%W1U@Rl#pbTfBp>^1MG0WkL{g?pZb>quW!k%%^GV2Mx7FXv2yay8yJu@ z93NacJ-wL`g7(5Al35eTGp)A6OdG|FVmwkcyBfYpxV}PENlQaWdn*8>7byaiK+yynWusxED1V5B|&L8==dWmYG3}U4B|!> z4k9(~739JUBLz~D;L(&$@`DND`@oYK;pSCTZ;4=j@mX#^4XVF9hjn0k!D!@76V!+S zU9>M^88hQaYL1}#Da>yvP5cYT9yuLpq|&oVb;-IPIX2~n$#khGe@sDBk1~)5>IdNC zx(GU1CdwY^!AmO1c@zBX_$>c|VPA0qu{E|Pr#Y%?P zyl)_sm;kyR{5)6EB!Xop-ZB!EIY;}`+ef00X9bzVzxCib@!2TSLMKIwfs;o^*^O}h z$8ThYNOv=vk%02;PVd|M^;{xu$LBsab%)|lQjPeea8+4Ee1*DZ27C&Vlu9rNZ8RgY ztH~B`NaX83hgM*`^73vENjXm3D@ zN_=7l?SQbB0U#i^Pq!#%l|Bc$Lr+l~a>2HAV8QjS1Thg4{6Jq%nMTCCH73~-L7}dX?q+yA zm5$UyS-2E$q-GoqdSSA;pKA4u(79^Gi(9r0(Qinf%s3Wx}hf^1d75OEMv1|k^EPrQV7CdPvh-h>G#G%OjMf?}3<$&@DOG1+83_6T1W zOh5?=_%0a(y*z~)6^*EYSsCqg;C0#N)-Ui!JNd;lz7*c_0iIQlaFq!S)E}OSaqe)K zbi_N%NaMmif%-rV>wSvi0;I$mXjM^0WIYfW)dO!&?112qR@2kb9k+B6O6_=m8`g5VW$^vj^JGeSc)!}P z29~fe3&;}`mB%_)a;GK4u+t3lhO}q9<3=vrC1+WmMe)&XewCqSPy>c1Ko1SnnNC!b z8B>EZg$k>gP`rU4yHGvxFPP?S*E>cV*8y4Uk3~LE<&Ep(MIe>=mkEHAH#pq%scO+j z;5S4pzA?_jY1z)*osTnq$T8)(QGqyQshUvM_s<*z)IgzuTz;qW zF#4HQ0ljsKQ86T$!rrqKmMlVd^7Ht}hXf%*_NFK1EK_C%KlHM~!kaEtORU5blUXv) zwXSXv7EN&VhkAIwxX%lgKan<5F!HEmmnsoX-*rh@xK@>zDZXu;8x^2Z{>P8+_ z3UywGVcqz}Sft9K9|CPJkY1AH8~EcuZ5HFQw3^gO`?T8w>OY{_f@d3)YKX~L zx$ZnuHEPkrGRk5-*pGnQ-G1Q_GedzK@6i2alWE>tv(xT5kL$GD;%_T#QNBZ~?a?cx zAN&Q@2OF9jwz3A1PzC-S6YA)c2{{w#b42}oV%ohJNlkPJikuMxY|Er7+5O5UA`-Zf zXA}oZP&SD@(L%S4GPcZ@vQm(k72AJa^q3Ag;0-62_jl;qYC;rSD?^Z`87CrC2dhQ4 zjD0GN{I?8P9T&KE{*`p0M*EC8GtSHi+wJSoQFZh(W@Jep4J55S%{!iqS;Man30So% zHO`+|=j-*bNnkN#w3XDA1q^c6ZP;M> z_2ZLhB(v#Ni$0VrG3N5}tDAJ%Oi7P5QFW7OI+G9&sP_Xb}F*(G= zu{TSiQGudgqoz`M3)&rf1=klQ2djnpk&-hw)0P`Nq2pg6LVPb*R6Bqc$k+~`(Ud72 z?45D)-QK>Yk)Z;*@F?~E30}Lz42tjAWw1GY)zka53#%f>LwjiB6MAP2HpR_hNC)>c z9Kl5tE|dLp+CFNdPyx+aMC!X$ zK-($YQb$s)b^a$6%asC|s_S|Qe`*TGJQIdhSHJS=e+D2d-OL>K{X)7;x8@N<0nmJn z3mg3*v>9Xn7#B~VS&0-;Ka+EAv6Al?n+S=@Q;n0(8T{%L_HKJ#3>x)7DM$0^L|+;h z99ko=6ic3;Evq&C1q8Zu%uvx5X6`csm19J6;Kg=u#+7#rct?s$5vcmP zd1P+2a|Y^bx50_%8g9{L>t|n;oK63PCRn3}dD@(A1*0gmW}%I$-(e_IZ~=H*iJA@k ziU8jt(By%U+#f#_7Zv-)7A50`J&R<2R;1G`6?c`v3;q~qf?zr-g*(_~-08!a;159) zW+yEt^RNj2ybySeo_!yByzUMgEM=o1vXf)bAz2n8J;CtM%_}HXMLjqrH4Tzw_jI=R zslw$r9OhEUkQ$v-Wkk4^5B#BI4hnluIxVRBVyP5nLo*&!Wb7&I;955=5Uxi$S9vX(RY4N=>4V)Qgyq_F%Zd@jgV$Ox*d;|-Y6O+u&?4Ai;tq8cBpXJ&J06n=M7 zCZcR*iSV5=PR*bk(Po8C@9bcvN$_zq%0rJEx&13H->v|@3Yk65F^Z~LfsMAff0+fo z3VG1BVi_(m!CTNwDuq}a2}o2^p2sYY{ClBD9w8lOAb~OibU&1wntRR_{I81w%Y~~y z=uQ8C5F1aaZ8YXnMPkl9ig{0H-4%_}P+V&%HK@Pj?VDkinGN zD3rw}6`AU0emg>WNCwHwx(#s1iVZB~?cBy$)1YD&Pn1F|lkS*`DFR)5FxzKlU34g6 zb?+Ix6}!YGbM|SWYm(09*NAx6ua#G?ZoEo-S?xR19i^qhS!} z4gP1*KmUy%a&t@WOL>tV`W?yWany>z$ee3%9J@G%9V|wry3~wr$(CZQEw0ZQHi-G6y}T%{*NGq8z5pM?13cISfG_r!{qppT+&YOtoeX3gMf9>ay(k`a=m>*J1y z23Q+$o$)F_?6z z!L_oHKyxFuwWm)U967GbrNX{|_J|$!N}!Q;F^?pi^zv5xz@#-Wj^^4jDH*{0j8(vL zRFgB(M!h&q9NKz=8k&}He(S`0M%C>SN`Y953|8AGn)JDOMKpi@fbBX|@B8*%=dk&a7#}$}%R~$S zG4b&5eC6c057DY*(VRC_wTd(wJ$Q5v0J`&^z3m=>>76;TPdR5c9*F| z;&irHy4@e4#jbj^u1TkvWg2YbE@ifqRaRy7OiK3me(q1uMLd<*X!z+if40y>rn~>k zEUB2PC9!2ohd+LyM51bS*3V3Na)4yd+-bgQE*G)y99vIzCsNVYOnNrWYOr(;t zxf6yBhc?4%+H~#n9cX(UtPQb3*Cc9fI5oAeNt z83>i2OMa#;DQ~Qg-sZpoxmg`WuIkc zXQuVys+05;;8jj-)80kt4qD3BN>LCa|L}PjI{@nNFm*BjOE0!RsOoCO_=SDznD??L zwLia*(HHhBY<4zK!3a;z9c1YZW0G1M5A0{#+>9r*7@nL~R8?0&ICALwhdjDW?dBQ0vqYs}J|pyBT_nA^z=s0S=GlZ8d82ZJ1IxzZzw*~aV3+b+c0bu7V( zVdjf<

a20r%YzD&p}}-8`Rt7&#G&3XowBk(&W#5$gG*QCC3eq@tjH5rCU%o0F5J zg5ei(wba+A`_8|&Oj8l63=cjdJ(PgZ-?SW)fxunxOkd#ZUB@(bl-^9%{QCw^WhA&e z{eIgsR4ijzbYboOE6j?abHa$H2o#-=P(&_|*wTSs(bDpp{z>!}G>BSxhiG+F`QL!K zas2#ba^>QsX`m8_qrG$9dJXA)zCtHd23fpmJs04O&vehJf@q!JDyK{&da`?L7;8F+my z)P^)PF5P`9K;#X8#ZX{)G%~~6l7i&WYMPB51;h9+Qp_a~mD>JhWEmw$bx9ayn0Pm1 zwpe2X`df7??Br22tX?|QF8q{Rv;?*yKslx;?BHx!#!E7Lrtt|>SNa5*;+N|6dVDW( z-{~koAr&!puS0~7V4qngnt39spG=o)$`8t5qP(X1@wY)H@Fd+VDNxQzDfs}B8BKSbSpZXg!EGbhFpD|1Hk&R~JXiv7r+L+iV&m5sw1 z*!2v~2HijIIRL&)NEMG58=rGm&X$t1C87z3OH!>+HN+pyIDnW$MCnF?tj6# zi3awdLh{*=yop)(^Unxm>43wHp!M-`pO6R`+yozdMhS-Ex;ztz+Czo$0L$m? zACv>%V2EPlnaG0uS)|MdtobW(0`J)(XUU%ZJ#_>zxcCi)@Wwy{iQ1nWN#3NrMO^oY zHE4tQ9Hp^3vNgE550t{5k<#)@eBD5c38`&%Al`cxEk8t%Vt~m|=FHekI-ESMfV&8W zq;^3>K!x!GjPoG2WYk49(X3rKh{FxxO(kkedj6^V!Vb#0huSrle^kjBfTx43Ad2*iy^Y~WczXb)BOG#woy7`ahF_ho?N~l50c(2JmhX? z>t;n$^2qL>TmhE#!D-tE+IUGVYnwy)K>4TCMHf4nV*!jC_+^5-*K|Soh3(+kV*Sy> z{^HgJoX$6jVQ3=Bs-e>!Rjj@j?(^TR!+rD)WT1r1zK){NKDwDU5T;Q%B0S} zOrGnh3-hJ2iE9TSSjq)7=8}0QHI#bQpl}Cx5GLRWDI?MI5&E9;%ESV)wIKMT2RDJe zx*&ggN*91~yw^7;;zR@m(F+)!se*r???_Khk1Rfj2hH5i)}vEgA3*HK`g(x)1yO1_ zM5>yzpWKcj&4)EEfdZ_*!3==qgcF63Ane0GmHO`&rx%hCKrC_)Y@-P_Wc}JzEl>_T zWk;-VJS(h#zU51^tDkZrZidZS(p&2Hmn#-pnJVo#95opg8|AQuf_EZyL)rhjfDDbD zEHBdhMxjRVm+8*n%PV&Z<_KLmN~8mqQ%p3}I}})si4LS3Pb1Jg>Xm_BS~9&Wr**uL ztR^1;U-mZ*b?8O}IEIdkVB7{@jyj~ z^`Qi+5p#M-hBLeN^%Jx4k4W>G#+Fkpgvaq7PP)4Iw8~!Lo@_yx@6{RO)ssI}w9l zmgV&4zW2$=@EaXtd{E6%XV*W7J{BYR@;@Tm?afWU~p*~BC`DTHBsw;udgmAO4 zKh*^ia7c*Hqpe{pFn?%I;aCf|BZIGfya04AxiA(#aR9R@w#fIe0cL^cW0q>P_YUK* zKGy!2feg3{wOfhd3ZULW{fkDXxu#DY4@mj$`+K|7G0;oa!y??^%*!@N zT}IJdKr2XwIBC|s~CEy#?w}g4fTp!=X$vwAbfQa5Ix+# z6}tPx3sPwBpvhhK2A@1iV4pd~Y3J(>5x*SQHC&Jm9tF3BOlBimuEoq_P_SUaxkF(a zn0yOEqEsMwj{U$*j`e)dMce88&#pZfVL26_^pjO{P%kmu=k4>&G4gj_)n8C!st!Eh z@+SyTi8j{OG0ejxi>}5ghGcOnOmY?8_;Cy`m;2-WQFbQB+uQF;CdTkt>4iQ(tW9Q( zgoJj`xh4J?S0@lH#sVov&Z;gugIgNtqpDH!9B|t+ib;uQ7t)j6Gk#BB2!Ta-fka{m z`I8qknvn~FX7>3nL3~oLQvr#R0fz}PNi^ezr<@|RAiXl#1l-^jR)h&DDKCFE55pq| z8l#-R(vdKzWBWvSgjHi8{s)>{ZqrkTa4__@YO4fmXYc6}x9+2+gf3Pi6hN9@FOTO$ zPWET~nF%ZSWJ^}Ev-Go+xv|QYxpA*i0=_6g-rI+ym!jE$gpJn-(Y&J3-qOF|aZJSbq5EK4Hsu zO@0dn9)QV_Rik!4$z6Y^rDh0wkg?u{0-0}*=lcyjUG1Wsuh;vdwa&+{H{V>C#q_ld zv5|l_b=zv)1cRoC3p`Ld#}*3qYp+0y@kZ9fOht_1&Y1CiOsz$Xgb?RG*GBsyQh}&q5iiK411NDsf6}hMhm}tT}@=02V zbb~YY11s&74Ir@EgPdFYPBT#fl7B`nn@JMC-QXl=UEn0A%Y42y_VUmFVgJ26zZsL3 zQb*`9^&??E`ht$-EFwF(sj^sElVeUCjonS#y+#?bkKAV+uGRGM`v7ma1;t67q;QnL zjul{4Y6owXkD?&O6cKgZjfALsGgAi6;72s0-!aYp3mBiP&$vN$xnlzozF$P3S*5({ zLSn)I6}Ezb*YbG#aQGGX5jU9g=Q!N3M>D!8d^Q(P6sRc~fV?(+*&AJ(?(s+v4?xt%6`Kbxo6BB}eKBFb!L%YRQ?>Oe-_xJo*j0B2K@>w$_ zyVJzH026?!Bocy?!qHkX?PM$lB&NcZ>t3T&J!Z;afKoD%>hcEtK~VxmAk&`%TQX(b zWN9JL2af1K2Frl1uoH?aT~p-u_LL^d2%;6NRZ5p-ENw&n{0 z%XZRQ>E$;3TF>}sF(ZI2u^TC(ayW6F41s|zV3p%|dY`xt8)Bt#GK{>R_S-P+p0~s1 zTZVQ&r3=&dt?ms^F)?1c3Md!|8k8yI`D+NFb3z0t4W~;f9mEh=-~PyRI<>RnQ*G3r z(aaWL;@+ozfoDy?158KWr{P;vc&x3lIa#~vOuB%E2vE3!wL-_$>4`b=rKH?0%bqKi z%8mp57n;UwptB$#PbaxN*V15zVLsn)KaFkQTt$g$N4OZ+h-0@=2)1K3z-KDddO{+t z-}a;JGGm1e&hxUb%ojIHim{!5NvVTo{6`S!4Bbhq{prZnV|vRiO3Enp7QDe>hx~eP z8`uT&C1uV!2gI0;&M-V0>Q43Klnz8=fuDCg#$B}2Ww@31aP*@&rSU;(OJetVePjdI z{_X{Rmu;_q*BtY|Z6^;<9_!&dQot2TO@RAeS=OQriTDq+E4oRQAjFVpy z_IOWH4O1bi?lbi`#E>JfzCj4_LmoBjUveBFH{^_j!UCB?>>o#w;k)C*nxM^!e1D0MCxe#z5J9 zWG(Sc+h_z9r#1D{$K;72g#7K6K7$h;jz-XBF1F45k_2~pW9L%*3044MD%0sW;OSPC zO?Rw`&XFt1-Oc;M9-MQ@G&NWQQ`6zyZsScaaxs${Nf$@(p8(Wq)BjiiJ?0%?naH{Sm7^Pl0wQb9W;||tiZLxU z`mxg~AZP^825czRgCLh49GqkYr4Nryd9bWQpXFpe-$!Vd?UO)Pt`u9(1koIGr%mHV zPr3cWj)D~07pLSdY^rja3D#t>5uL{E(*=@qZUS*xKPkaIywLEAM(3o(<>TS-E*S+L z2P>JornY`0&)+>F%upj79k}XOs!Qi`3@p)_MtcUZDZpL1XD>4%aeSAyPXux39khOK z?rKI4=Uwvq8yzN@>w@Pgc8xp8Clc)IUO2<4N8vIt#{u#JDs}f(GI>mCOX<=^-ZUKw zI}oan!sKYRavpq%xe0VHsf*G$Qm~P?^2QGO(qwjqAGB<_QyC~pud}rR7%?8!;3QTr zh>29l;5b$?`Is|PKhqyh1vL%Oku)gVK9SuHE~=wP(X3kEjfdtcT&e4E(RiX4;oISc z$K*w)KgMaZ&%lh8mX**ay#}h7e%-%|4wu#vW1hU^3r?kz^5p*nFOJWD=BJkJ4M0Y! zv=60JI1aw~9-sZKjwAfjiEU5-u3HA=+~foo?tk$^f;a)rUC*4iWy=p=Hw(dQa1+V0 z)GOZFa=!eYr`ie&2P!Cw7#cb%{s!Ju2OX)e~b)}kCch_!1~#| z8bmt@7Q3u39r?f-LCBSs19knq54JC+u?pFF%;oUCyQ7BUgM#Soub#p}{>5ebIl=EQ zzQQj*i{6j2R65TUtHWMS&mJfvFd64x*4voXSVR8MRB+I|S20|N@Mh{2I6vgCHq$f` z{{ahVATEOM>AKM>d z2J`mZjp{HxGeDHn*YhFyN=CcH3PH>SC1hLY zdD{b-2OKzz02d?{Ba?t2-i&(UAq0v5j)9G?W!wtgF!tYA<<>Y$QQ#Z)3=NO|A zXJ(gfcYau61F$d(HY~FO#uu+WVhZ9-@cMROD%IseLU@<_ed9LZkE-CJ%;=JO28_1- z%Peaizq~D!E`F5!KjrG=RP(p5G+{u=nRi+$ofsL4?@~))nTal^^s54JK{;6FZqjJP zE>@r-b8Ye2esT<4b6U+fAT&hj9F>F!4P>)C70GGAU)92%es+ln1I823tt~wF?R`dD zyFQ35r0gn5joI-#1`_C5)fJHbZ<-ZP3hdpu^5C+1>Q zFgMh3>jCU@b_2TQav3b37Z-!xW8%7RaKo%%{o~CnZ}naP))sbh5-#NBsBqK*Kbnix z#Wn7`b3(1GRkyH#F`VS8h|JIG0;2olqAdNas(QavEWFVkkH%w{Sp!K;xQt=cOn&7g^Au=O$vLGzPPT5{SlPS>~&+9ljlr_;3;k5F1vGuh$AoW@sPtg8_) z-*y!rH-?pNVHcY2#G1{^q*{tGr@T_`IVKz6GKy$B{)tSJnhH(L#Ux zL&YK41~6+C3v_|WVJk`!W@G$hLO3V54qj7P@lIzkr6EZeYTNrF08X_hI{)!2l+%*A z2+V=;h{&$7w$%6sbj1s*Y;)xO;gW-Mc>NT17G2~82fk5teOh<|kuyHEB{;22xBF}qrONUB> zx5aMyg8VtH2B~@Otp5|f&@5a`Oqbo9q+bt6ssFSF;a5esi z)doMxM$e{U1VHUZCnwA2i)9SKnEGCDl8ayx1wVnA;#U@dSOp@Fv&&f zHB0e{r!9-nh2iLFkg}xnDAUz0qKO~Fo9UB1^*HnGE_p?t6>Q)fq~1=6wDUvu=W*k##4O_EAzeiuQYX4Dxgz zSzC$YuN!Hm?dsW`8+6r-8fSg2D@=*QxgZE$WhXw7B5|#Q@p;Xea8<*Csc!K7GCm~G z%-s{;1l_sLSb0yJUl!gh@-egp6O`GE!`>|x>|dtBgZXO?Md#7Qzn!*wi*~+g^UAS{ zRjtRBMH`21DqCM=tzHI>$)$tP8z?8mG#uZ^qIL%$n?C}DqFR6JoVsIO#S3fSKdY^j zUnx2VN0q+_GV4-hW2da8m28}3rryCvhbMbn$NR25kd^Q;P|suhzgppUkBfA-cW+U* z{?f}pV*^bVNg8t}-663HlE>(;$r3`u4pDIPG-K2k@BMTLms(yjW7abegVU)%d` z5t_(ono^a~WKqSiMxS78JkI}1=5F;oD%@*gS?p}PDGDGiT3~hIdOmw6`qvnStYL9K z20fhilTY-`F4f7inQzos|VwnoNQ{}D1bC+%1S(jyPwfbQ(YZ8hz_0|djg=tS2yL|#b}7d@5f zGmMa|rP=llSyVQ6ThRg?f4=$X-Ucx|pA{v@6a)uAAF7GdI76}=m04jk4DXZ27;VMb z^TS~7jSk7{mw~OY612kcp0WBz%Sm1$litp;qDvl_)dn@+MqD-4rP-F*1ogAMkv(z7 z^wH7X+nlN%=NRk+7n8tv&V_C9pHS}cYpe$2?iK>|)Lq>PB28ESS~7=%i(~LT3g9Ln z>Ur4>b77{y7=Lf3zQ-MS>C2-?oM!eh`>rL1IHP$TV4`O4=`nR5(r6BR5m`wblrul- zM$d6q?#v*Stn-?B(2LXtReL-}CgFrEUL!M}`b34uwWT4@lx{7ZX^bkH)o2TsHV`Q= zrH2m`SSDcm7A*a6OD?GGF zv0ysSa%8llzfJAD($-mHPKr>-WrB7sBw}YPKutYY@CDavbp7JfA)AAm${^_neH|Wm z!HYFX?!aj1+Ky5+sJsvSG%{1+~++=ZVhxbMD0$PPWujl?Vr*w}t z&tPwVXatfPeM#$;2l2%N365vYb*VMte#3>p$1avsIWgt$wWY;q3uv1eKoa@dEZz@? zr}JZY&g#2&b(62KXf7bP(Dh-T!I!M_49dpm-P`uO$QGEQ>1XOA@Hhpa(TqP$!#O6j ze^ycA=)xt??#Jw*s~!Zd00}VSHxzP_(@3@0ZnvUo)1A^y)>#&OH?3Ln8?H#94vW7+ zH#%OZn_XKt|8Pvf-ZN_gr%{cwegbUN1+!>F2?=1(DI)46jk<)mjH!7HrEl|FW;9am zVoU?Y<)|{1I^xq|m{XEDpD2l|anTArGMMQBoB%+tHJ% z+W;%*)##24uoDN3K{HheLUz5yp}E={65>2eiFjQNwt_fCxM~ti%n6znp1Bm6vFB3V z4->gmhQwIu3NP0pOU@?dA%wFx_&ZvgkINOYPE*~<8&l44Ri!&{x7%r$7D#mc;WZ65 zSV31pNPqYzbJ*WM3egiJ&PZ$@=YW4cE}EWH9nJQ_LIbEfD;G!D%*nA``$x-mWdspH zRNSzAat^!;9ZvIje+$0*psk(S3&1Lf?R03?)-$W>cqM356C;>;{>mW&g&>iXy1 zu)V#zBT_~kF95gb8x07lMVhN@4SXfRL>_yqqHs(BCk&UeZRc+jdbHaNeWlWMX9e9V zByQ@j>~HX`%h5Y{3aV;ipE*ROwkSEvMf06dZPtE1wLKH8xPtO&&%}y^7>KhG3>gKF z;2qxOrliBMt2igDkEh$R<9dpD6P+3i8BM?*3_Z;g?-cjNmOMo@;++rU<;>|O+iJy~ zAvVLc>5H`cVRqlHn^RX`pn;_xf%O6Cbo3t=u{`BFT8XyS0+{pb=A$H3yr$%s7eF?4 zBQeLk(-YQ=9H{_7_9_VMvK7{+T*B|64^|>D=#kDk%F9`~T~|vdvN^!Q<*2;{7jx=D ziiZH>6WM)0giLpr0dCE(yWZjB1kBvh@T9&PnopK8%J~m_-a^ zwNp~&WyRIR)p%l@WK)Qum=)ceB}rbLB;uWn&ak6rC>Ua-8egTE}wCkaEtP8QRFx}xS0B&TRXK#5oxg93XXpQcMX7AjvDhMUtSH5Kz1m&W8H zFI7}Qk&S6YEaPUiZ|02#yqGa`SnNq;f|DNt3qBr=u%$E?Twp7cvSBfoK`?0$hJi6w zZ?ms1CvhIZ_aC7*imXM_+Ch6TVf*<;fTko_PXKw*;b7L&+F>%}s}$)lSD^s*!1)Lj zJL?lnIXmY;DsW8Q0x4S>?NN}RYzGy=Uqj)DS{C-U4|l^0oU@$J%uDd^!G@) z_cm5gD$qzu)U{Kj@!a;lu68?0&ik?zSF_$BCk+wylNU^YB1;DNK(#k1#x}#?ldDRo z_RUMC7I#ZAs~Z*L!^iDEL=SgN(QdA3(JC`9E+#hKbeWc)WwJq=NW>VA62svvI$n|z zJf#fg-pSjghlk>?#{y(S0*TsGb1`PEEVMz7>~~J1bJcGQ&C*$ zNlS|iEtSyX&$zK@(|6 z)19ihVYesadxa~61@C>rN(uus&*x}ENHxIb;o3LpS46k(7`FSos9{N||4S_b{SK^c zjU3NPC=_Ip5t42Wq=~VWNm%m$a6HHOgltsgef+i{PTjD25Hk&a~I)??mB7A=POqX2GgUWnX@j&;z{?8ZE!1i^g;9 z3N2si+_w_`q>Bpf*{JD|YkB!Xfpgkw><#{^2j*%~Wq-eU>P^~`$>Az_>rFb6sjq30 z%>HPHxx*>q1{sXTe8Z>wbK)Rjh2k;PY+y*dCzzM|5;xHyI zVZ*k1)gF}ub!5Zo{W5>PJl$#33F+tRFMLqUMt=A*XBN|VEdQ{m!K@k;Ll}?2qOh=s z21>lLq9XKef$f>jD2{;l0wQW10(+X_bd>Z9u(qF=;9kaYhu9x_R0E7lE&^MmSS6sP zvh?u@BXvdE2E|rCd16ic5Yxq5c&%pdfXwY4md>+Lvap2knzWzeL4Bg>Xwv!Jua*(X zrth+=HI?3wy8)}gZxh8iX5G+>jgp6MZuHCQCaT-Wrs2GWVbvqB@`(i4w*{Th%QcDU zMd*{M(R3Ebjl>%`HpwtS^e}4bnbEwf{a>(kMrmR5!5Nzrj8y`{5Z9|6xOTFl@6oys zTu51s#vJkMa+{3H=SqI`^vw6_x3e6RFI>RXz82WsQ&&tm7^2XpF78{wRl|t7FXB#q zj_u>cmUWAxH!mj%jbfPT(L&_7AChQ*&Cah@2Pl<|st8X|{S)wiKlZ;MBRaL;F30GX zMnU#p9^28_$=S}y*4D~V*TC7_%IH5=uxcAN8=~;uY`eZ`<8XxX@l%aJXyg%1Fmc0x zhXru;0#&2=P4vwZ*R;k|B0t?sS_)li4M$pjul+^sjvI}p({U-83RvJSrZY1Rg>1Vn z#Y$9h-)~&zThKMXTt38q(5SDn!Ib|V8Xp>=)T&50%-YxrKq6}>4;;W1teq)Wfv<}- zKR`>J1t@4&uWS!ZvzSm#n!jGpQv%yq1Sv*)+G~|UN>=R|K4#mgM^zo;XemEIFp||d zBwo^06v1US_X_|AfI*f!MVZb}kMCZn_Nk2OC=di1gD3M4XI@3kZkds`HlU=yOXJ!)qWnT31 zYUyfsYZ6EDZGS_i!e`|Ie*Mi*jQ0RrpGNOjhYQ2Fx`a*s45|g+)fwom^`Zai4k6x4 zl5jZt$zhgvY*5QbnoiG)rVlKqm6xVK&>qNhhRJ_Q;8=oZ>SN%A|9~>RDE15|O9U(3nR|i@0U+8p;qR#c~l&|OQTs-53;OD83)fimJm6}hg&cw zTm<`PlxM=J3R`tG3$A(X04SrZ`X=^}JG^4dnl8sTMJDW$h$r09nsop)Fz^?fN;HIb zf{A(gB^rlU#h}1xP)I(dYTX`kPG8Z&x$Q5N@)~rA8A)e0RO)G`K1Rqj#Z1JLT0tt6 zAi*^4W$~ch_fdJl=IGW)Vxv?*?!weIVlHYJ)FudBu)GXUvyPC07Lccfgkth^YG4>> zO>OQhKth43*sC%uCmutFLoLC5L+!QN&H`gxZZ?h~6KWy#p=Cfxxoo}y#;7KK4&Tr` zufLGjPRx=QgHJNso*RFKPjxsC(Fkl%nvCJn)q83j0dC|gqYsCDEv`61_MwK}F5=x} zw~5ZfDIfZ`Aj&6p+G+7GutS$$o4LQBH_~{HWWx>c9cC!zMVQ-n!S;+@WH4>7`i_*y zUs@Sv+=|V91Z~X8BO%-JUjwaR^$QqYYXNmH((C>i+?xRf2-RLau)wgs!7WwH7Nn2H z^m!iN494uOQ*YCt^Bf^VR2HRM?gI4$ee-lFq0Tw~mI>y<&yd(j(q8fUFKIS}w>oic zOXN4@>oDI$R>HeH{7a_|DIWeGaS)vs&j%7M7f-HoMZ0FnqVcCl4dWYTY$I^;H|Uq% z4E$(Gp9Cs!@p&7w`Ox0p38K?Pi6&&!Gm!UXI<9~e&z)d3jK9re=dm~>U;&LY)=e(5 zx$hDVqPnI|#50ViQpPt*pxZ1vo;wy{i7zcf9OFT%fqD5`(<8@;Ta0dEQA<^?hZaqLy`gEI3Hp(~BHpc+ z>P*zUzZBptcYE~4G*g}8+>`JprGKKU%*aOHA8|MYXS;I;O}udrv~Iasj!KqwOw@}K zl*pqLuD_6~U>hW{~$=XGTm7^h6W0;w(ZT$ONV{0m3jgGEYmz%c_=;PX%st;pp z2QpU6!Ha=%o3*L$QQh6=Quts??3KZwsmj&w{eP2z~>seyI{RV2moI zV07+y*5d-@r@rfCUUHQdu&XRkoWckTE0*oL?-qu!gi@-d~RDT}MAzT*n^L2DwCu2g9T5Wz@+swH)p3y5J> z-~CbG_fA>i4OwS^8&i{)pj_aq7SBP_mRQ=-#nlRl!ZT<_szDG%GLbAerL6j~Kvk<4 z5D#$WU{xrbD0HAc`ACq1PCG+QDp5Yb1woBrHb6u*ZN{pqoF_0ez+EcV71VYsnmCVI z;u26aZRDgAnOHl)RNAQP2&@9oi&0UJP{&(D+i;TSVO%BPn}E>JfeFO#6qWOWP*`)} zZsY5ze}tr1F6Km<@qZeZqSNxH;FTXJK3`BXkt)EcLi1z^*SgbQ{Fn{s+@5>^jb3Q| zSCbXlpQA+Fcm0_sZwG;}nfg@!DA+b&spV+O_s!Hc{5j7)_02pyDQi1zDc>+5fmhz9 z_&2R?G`F!Q&-AJs%BTTvVQ+*HhK2C(7n+QB%mg%o#riKX!VFREp}P+;M$kBb99uWA zI9Cg>_gi*foE6QN|M(yOSxj$VI0ce_G ziHJy`_5OND;9l-UoC5k8lJUO*G{L*y2StfjoGOY4!N|~4ry0nVB&nFogRtz3_gh>E zkAce*+_oUjtDhG?u459=r9=a?-Ky4jj4?NUS~)d-dKHo+F)-w+#nrPquES5{M_I;#j`$Jm73 zNm{+>cW4pk52Jhb5w?kYgcp*AC2rT+8fa7(;QUV&;`kZKf-YJ`?Ci_waNRnsXuzbp zp}^h2nT*s1E9#=8pwMz&pR&l;yLH`8J=_8GTT3U?#et=R%t{zmOMiy@-azsPhGgG( zb6rfFqfj(rXyD%N?pMJeM?}BzT*lpRgOO)lH!185ZQlEWk&63?&kkco|#yWn^Y_uxmU7t z0*sM`2d4=sVoApS=)l&REe@O(Wpp<~!FJOg|EP7BjX&Jfl3K=!7(vf{<8eA&@Wz$Z z+8M$L3gvEc0Kc0PqGs<+=9KTWijOZn8zds2;j&4HFCy~{RsD1Jv4ge8!#xVY_Z&qXu^MZ06o?ETaLq=~RTWPjF$>*0FYY6Z}qj63JHVJ-P zWECm%4|XGO6FJNdvV$W7m~70B_Zl5Wi?3h*wMX|o;HxShCqO{~;#|Z+T@fIvfl&j^ zP6{bjD5t5kG)GF$C4xsbpP(2SX02g$yn_3ziUF9ssvO}waNcuBTGt<8kmCXt;Lp92 zA75UldpewpBLQ6}ji1!+RvWzu3N$=Qhgbri-X($qodGXeCO@W(+vjVLfWo^9*rb<7 z2bxJW(GDKF!m|O^ohcQyo>31!FgY@&b$E5m(vX3yzBf^&7M94M&1h74^7~hx)`_ZWs_M2Ddp9#W05h?w*(-PpYF@l8 zPakdc0tmK^GfMb(QFnmxNt{9LoI7~hUS~YEnWv6We&LmxW1Pt72o6v`A%m0lk%gey zL-RJ2Yd`=i9Yto1P^<(zL{wB>9{C+U;IBaBpN3Y*{`3o`D~4(wKF@0EIC4509&uS& zWWXwRHtDf~wG;A09IfiK#Dv}ow)%&Pp5;B!h@9X*JEKtWq8}7s70Vp!*ZjJRdm6FcsyFRPzxzVXr!9dxwyJo6fqA75KyRT>z4s3__DmIMz zVn+_aR>0y*B-R6be7+>G(km-DPnCBu3cjnI!Rd5|by$*$z;-q6XTOny1DEr1FqjVX z82*QNb5wADSZ61l)?5(}2=W^qXOq*xFtaYnFI-c zwuz~P)`1>PsA;?>|7H=4^dq*&FOO;@I3IF zC~ba-Ouk7v;^2-G-hAI2`sL8s2|`l4?jzjL*%bu&$t|3Z5T?C3jAN1B6ec zXGJJ+L?Uz8;zQC3xTL1N|ESozD2I=r@y*)xK9e`z>i&+}gTBEa+}nPiF;b$n-g0?G z5^_-lHyeTS#q;9l|=6ufkGH32c;zR za-F?K@SqpQ6-Mz1i(6$R6zbmiD8t~dp@tF82-bdGg~JLG+yS%q!DfZ7!rMUrFYWJl zpX3>HsiLXV(HX6`>9a`^TRKCJlh=o|V9$px8!}rzdv|(GA~6vLM-c{N-r5*t)-Xb6 zx4^>gWaMq>=)~v7#y)K%1%dVZlgEsSz4wY;6bzm}4b6q}VHO@Eg)(A(f${txm(pkQ zggwe&@?Br=Q`t1n%eHB$@1NZxB#bQ+c|lA};HHa>?k~K7SR+v#ABY|B4wi#vkS!jL zjeO&bQ={lr*pud0N|a%@$x|o{?-QW-nG9T$?a`73+JNir(ixw^BY6^qb=_Q!wX$%( zy06z5vhh||cPXw%5f&aV^I~RAL*d}QGw9&w zb5e3L^M6fM5b}K*ay=`;uQb6+7KuYr@}7=AXK?K#JqWC%PW3-TX(m&x68|D zYjj)&J%y#c$G{a^P5PpsQiZ2t_*2Hp#dW8gxzJO|N6lIbh5J7lSxJf(Vzg$H*p7Xw zeTbA;t==W(Ua8Ohlx3%>qK$l4nA?}dlP6jNH0~A1b`bS4R7L{T=;MMCWx*O(n2(%+ z${PzeM~{6s<}L{)*hvz(;_BmM$yTkS9IDC=PCp z#_Fs>9haD9o9XsR+G3FE;VrbNb1Y@v{Uj3tecDE0va-{ox^CL!gp!7+1m&CY1M>DI z3J%JuTnbDobpc6&i1JJ#k0BOpl2vBPSI5iZA|4(ARelmKrfzgmjCW^{{wEhV zw7ObG6RJCO1JEdjjl7P6KHFV52iDzkzp)YE!lil=#|GDQ*4t9 zJ?h^qOkJq)M!vaNI&H^~<6RKbj`%}VaanOpkGP)e9H%9Y&(&LRORGnqRM|0xC3lzQ zD8o$Arbge!XuqtF{p#X6=+U%5ZLi&5f-eqzegygF>FNPdg+Uj`njyHxH4=sl4-t(k zpr)5gma@oC#UV?FqcF4mVvzW9kh@4SVW8V!nAhO4*3*cX{Nwzk0_kH%*+x9d#;hmp zFM))MSd`2tj!w%|y-H1a8t5(LSgi8JQasbdf=DB-MGs{GTKNCbbxu*DL|u|D+qQAb zwr$(CZS$6G>y~ZXwr$&(`e&ZHr~5S@b7k&zPV9&;{C@IxLdv{=9SsV?&sn(@7_Oev zn2-Yjv*Wxpo2(W6W2S;h@}^95ZnFYG5N17rMT>-}(wR5u>yKY5S;G*iIMRyDgtcgn zRjH+${eKji?BaH4{@4w|FKNq_d5H5BVwSVBziE{qQb~2&k^+bj5K&OIvyKX6>k1{u zJIy};d6;WiIMQgjigS!PQ(aKtBBB~ykQmd00iO}w(qrMktQ(!uoBmK}v%7{XJvX7e zbowvm2_F>zCUSx}n8nMY0uOOi5ekb}_{&3!7i$ZpaX35Fq2+nvs~BU5Wv7q0AH_CQ z7#xGM^6>MBc+P^{P1<7hCk2!WeZBx%oexr^3$>2ZS|4(-!ge~%9SAwj%?&mL@vj7J zIH|JeyGj{#lHgg|{~>YFWq`up0Nd=)b9F0|o4$ZmixD_Ah%nd#ig)K81`)bGJckM_ zjF+y%3IyoKQV8L!z~i{owi;8bGNr67vdI#^?L=rhf^rB|PnH79SCy`VYrrbB9zD&D zlro+-`q4Eu{9FzeaAD@r86{+u@*;CU`$ZGz_Hz_KG%-HgVdGnUx6zYR63-QJrhIPw zQdg;3Hv?OP_|B&!ds87KA^TVnFgc1VF>zCY%?^(LDrf(R8NiBz(P`sfl_Il;uitaM ztPY9&)DN;Sv_tqtHuQMQf@mfNpd(r&f@1-E?PAN!7xCm=*1Len^BARI7**+xAEyl6q@!%~6~EHmU(?bX5`Hl0*@ z&1DB|G)ocM5QLj3Eo z8Lt|nTc|Yn^iw5ymT3xFHEC^}@w>l(_o|8*r!Z^BA)(m}u4!AtFviqm`PniW*|Qh} zN6b_FssA;7-!xgb}4Ho29&|(K3h5Vgd<7|+!%Y8mIFcoQ0 zRGz6n^|~uA^Gy1={&?0yQs+(d_nthonGT{MCR(i=>pL(7?f~O^0~Z663)6%mAD*9m z{jNps7`$H0?gG}`X!=?c2TMoJqT%3W9kw!(fAr=Q4CGve#P%^<-%olPt~&=r-@xwD zkU9UhQY{q5m5V@_`XypXp#Y%^=5oUhaAgdpYPUoso(;Ws&^wO$Qt^`L1HzhpwDykoU{mck z1Wk2jqmoz6s5Lj*KmkevvOcNpX!1;*Vt`OMb+-ggza@5wQrqUB3*G$mp|%Q(^p>ih z_@ZDH^H8&zfy#;oD{~O~6&zJ$hYF%K06w_p?G=rS75E<=jm}xl%e%Pp_p(2U?Y3QT^+@p%`~EGs>J!y;vIyhp0xK#KPzXXrw=wO$#$hh9DmNT zT8lgEpGOQ=&X{wCU|i?U0oQqe($@j1d&lr){H;*LpkVA@sYN=rce(hn7qmUWP-Oc< zr}02`mG_?<&r>ryTtayqsPZuh5(HBt#!)+|0TnEryx?{Fm+5H;FpoQFLA|S>{IESu zZ-fZ*p&zf%ALydoJ42Diq3caD(3Cp@o`>!~_wScl)*4Pu?6w7;MIK_$_8;_k-k$7y zKRR}P_G0}wy#vym5z}8i!1wlUn{?Tz(yjW1)S`9L=s3U2g1*{Go++(kW~~Q$Ou@Qd%~ihz1e*ZswQGN0-CsQcwxpN8 zCSH5OHEkhF?l%Ah?*67SOUw?jm9iyIvsC>(gcq;t=YR8C|5_ePQ@^91e|nezK9T?H zzVd_szJdDp7-{mmnf^UV{*TT~7u)}M`u-p8_3Bp<-~6rSv+ex}NRC%+w?1U&AOYXu z5b<<@DzrfwghU{LMX46Ps$Y)aOsMZVd-DC5ic1pivT0fQhy#}8&qN)=ggbe{92Y?7 zoa@}pU=ksrDmBH-XViJHD%l?hB7lH{hl77DK~hW)CbK%0-GsDaZG^wZJyc$H#VYiaChh5eLLO?I{du4csNN# zr_0f!z1+R{S2G-Bw-Y_Gtz^i#(OSfS_HUJ);F(t7vB_Wx!j7?c5M8ON>u|^3=^l%#) zsJUeT!D)vfJcGsRG(4Y}%_^tbV5{j50q0nTuFk z*2dJ0m}@6)?@t@Um@|!((EM06r8vAqpE+1Z{!a+%(#0HRQpzy~M)S?yQBd|sQ!URo zGCKWa1wA`l!Sjn8AE>QU4su$+fd-bQsm$P>k?J!U>_k>-x`FujF+9OaxW5$!C39q9 zBMkOl7ZbLjld^FO0l6%tYTmD0Wp_B0wb*|pDR7Tu+_%968Bbuo$sxkOJYs31Ww?SJlx9MGAtrZzziL|DwyS)OC zP8Z0WdU?p^J_b#uAY#*WO2m|Ck_4&7v|ZojOu+24epbd*7FO~znLHW+W_j`bsv4F&EA43{`Z+4RVqPjsooC{9LoA!$? z^OkJZel)eNf|j`v&7c;7)hD3OVNW5;sI%A3Wx@(p7x2P|F)Wn*Q2MG(TJRV^F64Pr z$b}pP3wENK6V!&BX2@{HZ0cD@BN@uk`uU8=Y!S-xk5pRMjPd1t*Li$Gc)+*@An$ddzG%ZyLyOjX`Nqu%4f-F*eiyJFEy=2S89h7JCN)$KL3SWHXGO2EaCYq{+4s z?9INxbPk8`0JE(FqlSYK2S5%I82=FG&{XbgNK!5lQ%1MxxvXeLKuj&acxWk7#$ zpe7Z4>HRFNbR#Vk14nPUw%*=*Ck<2-@2Pr-bAJ&5PgvParlnAu6zTQBy^YDCh7m4d zCz|lO6(FkmIt}9iLh~#hg2uqg*e)@+7@?HOM$FO4Y-%tUOH+})QwPAhQxEC(k|QW) zMJj3?8RplMAp3d&V<;nZ@w;Am+;uqYsSe{HT=9^$a>L>ivH)#X{*r-GTb@c+A1Rpl z2bix3dky`+Xl(S)r!&hHob@IAxzV+Nal@@g)q3vz}SvKyVpO8x9Hjp{b=!`*G3Q zRhN>~_vr)?!$Jv;L&H@zr*KF?bk?QM-Yj$-jcC!Rsi_Q9Od$~svsm6`Y@w%~f(~Mb zX9&EnvFM7#POx$JAdsJI4v)n5ReyTs)sYDV=BSy+5_O?-(pUSL0&!uKbsTNHh!yjy z|D_dQw08=cgS^4o_$w@uT-2cC@tDtK(oXp~qVLy9Kn+ifM7~?}`AMTSy@608Z}O87 z?#ieAJXnT;;d`9`nU}2>1RK6Ng-Z<0%ZLMXA^tIujp&S65d4ECE5ASR(hrg7`0cy7 zRvi*=!U&ERu7<5sW>mly-X!e(dph(^uj_!^g84t8o)!nXz(}S1IK^>7lg*>T10qoAToKXC{7W5%~vg01b$4}pEH*%RE^@%a$yilLa8 zP6w8@Y0`S{L4IS3B-Vq#L3mkH?fmi89rU;&)ji(PI`O3LEve3Qje)*8ozwUB^lrd{ z_Ow-|OSY0Z|7&EeyQ0ur1&RZ(SX+S8j<=T}E1*uJj&2CdDKyEYSPNbO04I+*kWN|A z*d;jY z?&;WBo14RlXHyYv`XVXdDDswJOAhGs&`DFw(Omp159T^ic_G8%iU7+}e`+>X#*=M^ zA>VaS?sOfq;MXp>w_`eOan0BHmUGc}JBo~}F0w$i5$N)g*zDMh3hYVCwX*m3F3YMB z8HZO0{vM6R4`H{PA%?SqJqBDxhd3lGh@>#&4QX!Dg(nF8rW@l`gOGkI7WD&TT^`=# z(wgLbXT1VK7`PHOLfwcx(N zoyE05!@n=jrYk%Sje50HesYjr*0+|Vx_-nMb{Y0x1r@?0m5Y@R0y0o;UyX~+R?0|Z zoX@8ZtesxZmkD6bt-`&32Q3c&bAFR-h>#02uJ(XD(o@1-%Zg4t(*= z3Z8@hwfo>nAV?oJSk>dS5eC-5how;*=PR0Yrolnbq+J)znbr~RO<1bOx)OD1_Zr!#8h4!kdE5&K2!yY_ z&0c&=-d4uWlD1B+JE@AAC763)pFub?qbYU-fi`!;UPg z6vv*`v20+gCq`QQ3U1^{!w=Yl ztY%=h!HV$pd*RzF@eSu*wdArkm!HH9oTQ0xv56~M4Xu{9_*>sLU&OEI8g29A<5pxm z7nALx<4=I*#JRoY^>R(E+QbT1q)Q#F2?I{VZPoE%{(4=AO6$2=AY<|fwb?xEme1oy zT8TZ7xei&Ch65K0>^Kc8-Jw+v>Q?iqk#Q1H<(?B88uWQ|G4b0ropr?4v$Z+xJ8h@C zJ$+vhIgv}NJ864=u@<>jbJ~AfIa{GAo&yK&&qsz>9w#$KjuCfI0SU@crg0Zf)B3gL z%QLj|7*=t!BF*}l&IJ2YVK{%Uz=#v|r*kjw5cRM`0V-$$Tg5T4rcLu-;lI5Y@FXHX zs51z%8U5-em=lQvZCa1Jxxms=ytOQioRv_uePnu-_l9SOA?>=!Q&!IhR|;zCIbla= zwFau!=Q%h2zY={(K~41421xV}2925yN7l_94Ki6B!=|$Uhq$@x)C93Ycb5Uo*L&v|EO2n)Zz-)9hariKXN-21AqKH5BZv055=1S>Fjy z6=WanP(Y*e8CoX4X9bIW^1|KlDf(pWxEgGv5XS8Zw-nhTkE)@iqBo1we<{-nHY2=o z9>hhN5TJ+fztY03DH&Uoa_vhqLn$w7?aS5G!6nEwhwUy>ufoQPoOuy>_=yirG+|g@+{WXao&v|DTWlor5rIMY?OU|>kKn(Z6@kjLJ9AbvL zj_2Bd<^2rCF^U$hwD-PKSpICD)a4M&# z%2I!Tq5UJm2~o*M@-Le9NtpBTSR>GME?UEwseQqYnU9lKUI~F+`3qMbk>59!AnwP< zWW3Wx60d+O9-vPw69TbU%41a#O_a?g<24$x$&52(@PUP+nxF9Tbk{@d8hQVYuNel4 zN5K>6^QuMVn70ii1a>55NcJW1w@A~oqs6}xL?VaO_HUr2cdM}cm(+Eu02l(eyixdt z7fDYAOLj>kkVCLj7_1bpV-~3gg*5ZK49Z>1emrM{G5WIp6l{U<>?e zYE1(8R6AwzA&x1T3^aL!GkaI%e)V@C;h)&Fd+YZp;?+1Pm+yj{Tked59Q4lJZw@=0 zrYu!Q=&07fROV$W3zYEkL81+cCm%g&A_7_I)0kH`+^vP+mo}az=WUxGzyCIWw;L1! z;UNG3t5Vnc9la>N@NqxAWf+uzP#cd7LQu|H&8Su@`4^n}0tB;2 zHVt#IB*}|RpF3`Fc1R{25@DEth8l-$-X~n>j1mcaq1`t{WE1%`O{bb7DcK}1*`26Y z5u4CmWG`0JR`n<>YLAa35(x{53&?Y6HZCoiefWdjjabZ zOA@o{+lF za0;S}l)HCL1|@7FEwk@m4a^`Dp9f-qR};!|Xjn6=v2g^1MP+r7^tjOAv+*kf#7BYg z=nAoF0GC@ZP=d&hgq8ggRrX%Ef?}~wrviQsv}o88n_lC!;p<^dMX{nT9oj;W)5rk) zzKKNx^dunDr&0Ep+T=zn43=(Hg+Ms4W{rTJ!0bImenB~&qolS9(BW@hH zqS5!v($%Ga*nqTZk!(&NZfHkSZW7dE3aNl_i^UaWkm>*zYt%C z4NuHciP4NlRf17C%9oA^a`_V*W6Te9TWP>y)%U@5%AG922fm2}HOeggFD2PuYrMgl zE?D1FJCT@=-1-??r;L5EQL*QB-Vf8D2giz1`AM#G5v+Zpmnzj!Pk$%%eyk|r>?(!O zRJ&gH%&BTLkU~Mzpm)F7uwIeyY8zWT z3DIQrND^}>iAN|pt`kZ7`Vh=eMI-yvLgf4X==@xU|L?RSQ%U|z+AOBL@17q|T$R&x zXmoz7+_O7JqK}(4CCIp))6B#5lQ_}O4+-r`XD7{gb-*MNG+dd`iK_^3D;%}`*1a8Hl}I5Jay zhB2}NtL+j2XHngRhp?lOCN2y8V?_CMI1z1olVn}#H8=#aME@Vm0iMQI_*BA+tbU?dpIWKQ&nh(oOI8lp_=uJ#P>@CsEY?3<>0DC`X940$G9l%(I!&0;nmncV8y7dE#Q9^u`yD%YyYgBFA#-R=6@m4+~ z)G*$mD|!Yv81`*f|4X7Qo$WqT4|v&QG4E_O9VJV;J&10#X2FyKwcU?8DKLP*Kt$Ea(#(Cg^>8CZMhn2R^Sh1`|gkB=;+G?(`55 zXkzYS=d2(t#d{W@)@U{l4&UL>a7=a%+C0LDAyI6xe-qN;FOM#QJ|@EGzysWQ&kL5i|!hoC+& z2berF-Aq$3GGgORz8H)d@z~U}c~*pc*nn@CzV+u(gHG@L5=Bhk+Wt}KW}%3?+H`G! z$}I&(J@YN6@L6ICVF%#DCqy_?)iK9v z{DgP*_I?u2H$HnWHF&$t9sew2MqE?#5!EwJ6c(-A_Xg-YlBEDB2o^87AvDZJj3*_X zuH7~o)>^IS>+!m{PxlA;ysBj41re6o^lHQ?)2Tp2HGScA%#Y7oD5dV#mJh&A;`@Gp z{_92VQjijh={Hqs1oS^4Ra}jn==Ag~Y%QGi^nNdKJ_>Sjf($S{iMO~J_6W#6bAyR$ zz<<%<4O<1*sOZ<0#WoP{7PJtMhk~=4Kfjx?dru3ENcqJX#0t@pVB8@I^C>CxEetfI zYDYx`Fo8;h3woEBn-4dA?Esp|RzXAH2Ef!nXi}+y1Z~Y>7~H7AXcWZuwW;ZE3|A%% z84?1^9IiS!Fkp8!$HcR7LjvnA2@miV4JA)PrS>kD;QKVuTmIc1zw1AK%G@=JaXV=x z&Kwx#t0>Qa_Sc4Y@X7x#Uj6578ya{T z82ra+*QBZwxxtCxqqq7)@T_=QtC8AGTl5&DbsbV1Qhy}{A!s#GS4v%$kY)XT!9_e) zm+iSwEZ?)5BKqKPd@5eRvhGRr?xyv^)f=|ECRO$E`qY@UUkCP#MeV$*JI=D*iYrc*`JH zitkib-wf&UAD}S<{$H_j&4!{ zAjHio{IE5zOGj(8?;M`C2|S-Qni!?QN1q`^)26v6bF*}^OooHWfY!A>w@M8Bdxvc& z+nVF6>sPGP)LjFfb^pm31oUh(SZ6`bjEls`-dYDZ5PDnI1FL=5JFk)*hO+ z=0`+*I0aK+12HJgN@6WOk3+3Nwsd(RejPqNhm2KhWbq-h^6G6hs%6!LbJNO`4?WqZ zr9ulRGUP{Zq1@o_>Fe7d9vK@Q^17Stzk7k0<6>vT0w*ta9O?^s7r*sjnl5h3JJZhg zxo))BLAEUKH}6#As9G!#ym9L%I5#LLc*y%)=ZohfsWcN6kzoAJr!RjJ+?HBwoc&Wy z;Ec{crc(WuVBiI!_@JZdPosaqN)ZE14ic0~i&j=J+sO93v7RmBD$}ifW7}ZCQI0X^ zQre9n_BBTLcmM$_LYI)iq!;weN~JNGhgdx2vTOLGRPocCaYFm?mn892Uz!i%nSIC_ zytTI8<@#d6rl1r0I6WhrYl5EGyE#VVZ|CE}l48j?rzmPDWioV_oZZe!pOpDMFQs1wdbx%OLmjov+!5irQ- zO`f(Rr*bE&)`~_VUZmN3Uk5(m%wK`%N`5Cfe!ZK`!bvaX-r0T&a|t3crQO>4{I+U# zyPKnuQF5cA9_?_YxauUib(-G$ky49x-V2T?`8P}=bfMd3;p_LnJ)M<`+yL_ZD_dw&?c(hgf9mGo0p6^I5 z>QN>4VPjM~-{d3ps0gOE*wLue865dSThVhJl9x?DdNt6P#6MW~PnX+(0bH(DZHm@S zO6BjGknoZRf?2YCh~@B7uwv)@Lw=@QA)R520nVXNDHXs_p{ ziR?RZP^s2CnlLo~C&deq(Ylin_h2~{|UJsK>|JS(G zN^Q70Tth@*q=I4+Wj-Ql4gGEr2E2c36Ez7~0FZAyCaV<{yXl0ba1=JY$_8=vOoPIi zub-6MZB9C#d#Zsk!m$(1j+Yrvr<*;*$LIC(y_C6f*I`DN^93)hNCaePXF^8(w0JrI zh1P^(N<4gB+agJQbTSGHK{x+l-4#5@=Dk9^SclDG4yj z{YRreS>Ibh*~FOQ=l<>^RVWjlH|yc-{_gQD=xm49@8=?juN&H&TmSZu26`v52uNO{ zZfGd7UOd8j@)2v$7S>%@TDT${l)p`EpJ~S*j_B~M{*NhiHIX~sW;bYDXo_m#+-cBS zi&&y0G|OEtn5nS4gUip{D>&O{mwd-^t4kAqZvd&W`?mpWPbXha2c(%*5wdKCrMw)Y z1e}+)qv=tae9S5zl@4Pqbe@hH0FL=Jz@0TTR}HJ+STLzowL1{hxN~2tsfR*+y*_l2 zdUqwWo^d~revkh$idu&1GMpwEA0!%g`V93Dkm{dLAHW{ETQ_C9pU;8Md%W9YE`kk^ zGYF!ugUpwi%D8`qkQwsc^9=n_E7~!-!YDVA*xlzK=$_wmTp6QMtc$SxZaGjlg{ z{>2Az^V3P$(4Y5Sxei;ldO=06)k`JN4QS#uYVngl#x;ke5YA8LEnoh_2=HT1`wncxoyjb z4{H7AUxSOW)!hs=CLzuN!lM=#gWfx&#C9 zfYE_b&_Ojy1a{py>(L)#qk4S^vCLnc)-$(lg=SV^(UF)CL9O>_8egZ(xa zfRkdb3%WITDfK}Ov0397fDlYyU*h@}xT;h9*0!9MN80SRZiL3I$C-wr^Ib zr&5@2QZS%CLHZ4ey*At=*!>Y#<$# z3Zy2%n3F_ZQVko9-pvv_ln9+nT_Tb?r5}3)$`i*= zkq%YN4U}&L zmj}8XZloLshGRx}8`tYhs98v%xkjx!rHN#zLgx5Mc5AgG1xt36Rj)7_L%+ac3UCNA zL$lEC0FqtoHfPeyhS_LV0}ynqZw*)ePec%^NxN#8!bD$OP;()aj)Xmvc-koWs!?1a zT3bAb6Esc&tp=K9tOHFE)Gf_@nBnZ4*g>t0d*mLor=dKu^d*5MjYJb@5omil*M zKmMdDUIPF&g0jJRJIWsd`smPXFh|ffJ6xZGe^rpBpFKZ&3%^xB4Q5Wy(4nY@9`u@d z+!Cqc@gl_y zJk{c&(iw^f2R`mH%qOiEci^~qM3JKPRmX^Xm@%~X3Tn|7{S;rw6inXE`JxBUe=edO zl+Ab@P#EdcKdSNhir3+zK-UXR`^@zN zxOV+&)d|Ieq4U&aL!j6Hv;(yPu1@gmswt;gR7DmPC2TuFV0d5$STTriqEP*I*>Pg6 zVu-2O%0s6LBuCC@{i=QyN{~W=&s^UR=ucv^^}Q*)@0)YS36iM7^nO_kBy|j@Qbr!p z(Q^%gW66_dJwe`|h|Eg#&eqXk;O%%zQ9;R*8CXIqwHjr(8GG~=P_X8ma3JP`W{XRA z@ubwI2Y_J)0C5bhWR}2C`MkqY3hn+^(4C@Os5nu}`pClq*HK?$nt|f4-Mwj`sVS9j zvhuTOCLbv_Kk?!bzJNk#yFdfp5EPJ>!6Jm9`}_Sk4RUl|h+a6?Lkw{zc2R2pR{afB z-QfOQv`m!m>LBXoQE>Utp@@}mnh^XrEJXp&cf@G;Wf=E&#DwNK2pVh75vRVN?)0Fr<(?`uq9x%Pq8FOK?%n95xS1EG|aFiLv)s((PO$mHr5Q*b^KK03Vg8e z@YHq->&x$_zy=DLm0>~irU>qm_xkewe+dXlu#*5V#w-R8$s*xrjnyd#5NPYOONlA< z=t|}HP4dH%2kq#YLprXAvgO1&Q9~~gWylSll zN+n2N7KsA~WJy_5;lSr~+DseVZTE)_uAy{&DsQFqdn+1MPWz%S0$BSL6NQyYQ%Ko z_Pf=JGvG(K80@raE~uwxId)*n#v5fE<}Hz1=GOb`S^&~KmVs~OGdk+uM@I6=82;Cw z9cpRzirM}9@^Wk*>Yww7YrK%+(^ zM)rNe`!UZyYVC}|U{B3nq95j`EdCC*tFf-28)V%H2p1AWrJn9{yqraYQ4h`F7KBKM z5)5}q1+4YY70_VYM*$zBPf%>!=HFWer^L3>YvmQ=P;O2*r`DV zc$Pm#degv6hcm~0xX;>@S5R<}A#KmhkXWu><-b|DbkJq5a{i?g`3SsZJ{a}{oASvae89eP4iucO^d%M?lG|^DfPRe* z#1_Z>ZFHJpZ!l;a7O+}M#UpGw7pDNTk>QLEB#1@#~%}C?c-w|=hqka z@w*x~zBUjWiF#Y;a3Z+~C^_lBt|F(nDaTK<3X3HsD~Ff}c=6E1l(;t(P?sT?3o2!* z0BdIzUqtG((k8BvG|kAAf-p@%7tIOwunzb!E9Gt)Ay-kz=kEOp=Obh}PT6oh2^L-- zD=$}Ak=)rpFC~(dgJ#@!C6#}>!wbC7jq^HWx_;zrY%PQHIFU+AE%x6$WO}$nl7*@2 z4sRf3FN|ZZ_`1fG?mS9=j6L~*9gn3B5};TcBPO>Paru*Wr+m?-tNJ3+w@j`EtS@$L4Z)zDe zTecjG4!?hEvWHzmIU*F(z-x&PAn#RLqJ}l9w00V#E8Rt#_@}P7fc;;t6^vB_+j88f zlE@LgCR0$Gb?9LO?eQuBCexX!R*qXs{3Jb&vlVTDJ;VJ=*?K#T`us&xpjgb9q-%a* zglG-Jflq)w_;U>B@14wl2~=3+jxR^^E&R-8EZ9rXpD_Sdl*))7J_$E=B}|-lG0N;N zw|lm`3|-q`edUOmUYk1j^=l&~8nz(i>10v8cSB)r z1;81+EXX{ex36iIoe+}4t@2tQugYYb>$r~8avNI~2Pm$@7htb%D2k!7=1?Lr#t=r` zhO1Ixjsv)+@g@TeIxk55gSDJpEsgzkv$VOhbiDa2MFQ2%>iAY=)45E$+G-5l zT&bb%J%g(tPIv5N`1(3amXe;a=jQEzH=HU(wYjAn033JN@M3Xpo#3`D*owIreR1I5 zX;Qsjc>|T-2Ew=SIT3}aV7Odg0tPvUr>n$`AWXrD!TCh&ecPS>os0gf1HX^NZqe2v z4dLyPD;s|SJ$gyWv{L8UjC+thT~Tg2`t$JI{yKBA3y}E@FUW?h&MfXWLxESqc}V6G zwmZXB7rBg(y`&{>ODNK4n?A?F#E&mxL#~bg7mEFr^1RP+#2c~%93=fBW(=x~49)(3T{;DrgFBwWQT!(yUK2IUSNEbwDqPz zV3}(W@j;oq`d!vHsK`oh4MCD#m2#U^fzIKTjPvd-(ikgbLv;8X`j=LU_vW^sV?&gb5rL@NAI3hXY5M(r>=u8QjZ9l==WXJ^O5=}@5sJ}qMb{sM29MhKY|WL@W>$g+ zE26iD#I#K}Glc;MgKgP|mA^TMIxq!84$Nm;n}+Us$6Z;}x!85#zb!#LMSTJ09Tv9e zlDD}rEYR<{d}mF6i48bg)=gA_`>?|`y6Wy*fWBco^Xr$RAmF7%$C>?9Ygh%@?Zdtc z<~Q%JYe(e6KHnRCIFncQJsrZZT_Qg2oLS(#kw#89(=iujbm6y>g+%PBh3ve5m>;Z1cerZe^oD+bVx3 z58HkM3>QbLzoWEI>lo1u5zVtPW4Xt$j9s)yd#GzJ@jCOvWc}_?SckI4bvhtu7e(;2 zwdk9`pWHKsJA@MnnM@Mm3MMXq26YAYRHlQAkhM{wcO3+48d*G^v%~FCe zA`Kaxfy3lxo9~Y|T5kQ|6%0x1qR|AEK{CJo8_RjLh0~+?*JSAUD}&~>sMYyK6q6+^m}puAP-%IOqs30W+d zk85I5s`zYe#|uqs-@i2RC_kU#5%Dq=(MBPvQf-zYb^5e)#_E+%mZVFTFI87ZL-VJh zZ8nh?m3qDuRhbPdRf(E^-|q{^Elo0=%5X5Wr}mTpbNWS_@kKl;GDS-rr+rnH|F)wE z-zGAw<0Q{9app#@kpu zn!Y-kRJ@(SWA`a%K^eBeJUtLuvF(#-y{GUF+qP}nwr$(CZQD9!Tc>Q- ztxozT-GBOhC+lG+Yi7+c#y7OiW&9a2&X{Q9&Y$T8Q5GEkNp5#!<$)epcHgwMt3ExS zc#x-WVB)RAoK z@veR(O&I?;pds6%5PNtZ%NU7}EJ4-pG`JHh=`;ZZbEzT}pzDBD*m4tM{R;wYQG11C z7%L3HW^I-L|HG;a&gNGb-1ps;{vv>x^^h#?b4gq(HThIh)C!k440Lp)2sTlT*a{V3 zxa;E;Vl0Xbix`38jYxvrI3S-i!wi-aMMPGShbLAd^{NNDxaq_hpMGv!;;fyD4NUpo zh{g$`BZ+$hMTWaX)UhHnY0VFX`eb6;Kn;i`;sO0uSuxyzsnXSj%MsOy3o z!U1!53TX$hT$l&P8+dtcC|(k~<%dmciNC=&(a6_XD8%Ag2N+>k^04h5SYwI0V%#$$ z0v-l9HA}1m+>+-(={VlidH0cUZYX`coD7ff5k46hJNF-fb3&w=j>X8JDObxV4e>Ht zBYsexC|KLE4(z3dY1p3MMZb^omXf5dHKD*{9~kz1;eM;tIbt3jmm!(Yo`E)xeX$#W zZFVN;w1zrNzQfU|Z#VYHsdmEya~U))kLI1eTmZ?Fsbz38J+5QWhrKR5JAE=XotKy# zH#W)hj}}fIlBBwGm9^rfX&_>K6EkBm?d(>1bq?jgJUs3XP9`>Gn-?iGxv*KlSwfm{ zB#R{tDvLDYC-$GSTi@+0`&+k72l{9+g+BBqNsGU)%uF4S65Kv^J5}e^KY9`0KuqRFEbMH5ul(cxP7&kc{{)=k z$G5Jlti)!mMg0QA#N~l4ywJLOxY)g*XdK*BtVB|hS9Gzj`*vaUh$9zkV_Lzn?L`;N zDID3EveV2$Cs#<&P$u3SGf<|+;uycOrcM;<$Kp@}>m*ue41NjccuX2G6LBUfcY!BH zjv8qk)67m&)zJsl<>~%u3OXho(JL9hJ+ilVL_mJKCKi*CQm$$-PyCq^jAfhc#mkd0 zCXBM~1Rk@@zmBT)&=$HTK~?6ta~5fFCIel7jOs`Wof<=9a$5D22N2!ZXM6I0{}gY7 zB`n^&$5yR0i|s}fV<$3q==VfoU=-Jh88_$&1W5WFN!+g|K2Tpd=uo%l-y&)}Mtt{{ z!FAEjy$IUPcdVN&OE6wFl6=Z0G6mM;q#j=paPg6jrgM#(jhDq(P)8jER;go`yVY$Y zUu}Owx8p_w`T_a~2To85N9`t^!oDia>o%&fj$_V*{jg^MyAUi{qa}`~r zz!b~8Ls5KFb$cSAgjc$p!-WvKL$_J<@0O469K4{C)njpq*@F!_ORFaUgSDfgOf`(k zpz<*KMg5uC^+5_;l zrVoLLf32U$ueW9-<7Dl|}z6qYO2u(ir25q(^1irz9LN?{TMXoBu*T}Yx~RIdy- zHf|`=!v5HHCm$lCGBq*g6axVi@54Je`@7Fq0|Npdhe@XSnhdu`UDi5v5hZe{+VBvB zAacTp_M*2WlBw|Kk*1qC#(D7e`g{3-X8^(Ul;Ud@)%@#>jQfO!QzeYnYIvqMOpGm= z{d~rtDLkT6AQeW5DDZJbTA91SLX`3j_5%DO2`$HgYVA;v?np5sQ&sEOti72pyM{-T zk(n0jP_T>0i3nS`Lw+_wTC<8kfJhN85qsjns2v6cLrdjcQGf~26Yc>}0C)5UVtu#O z5G}W}lDDW#T>LY#z2yD!A38X3+e)mJK_wSh02~7tSvr0f#d36b6f4B5 zb}8PsIbJ-Z?-#k0_wW{r@7NK@1Qv!sD1{+P=u4GS8qW|IAXJ@F6Casm1vUu+EO7^J z>5!z5y_J|HZ8_mg4sgClHrsbhNTOW?6<8jzfDAWWP0HuoLBrfi9rK7BVZ^#dy8Hb){2k{Y|XW%fEMs8y0D<=S$5q;vC9*l zKQjc5o)!s&`(G!W5ZB7ldO}F7liO3Inm=GQ<|W1g=$=9dBrAG@LJ29I#qn$|Us#(z z2`6uvAf`R{XcGbhE>3%H)o`vjxy+b&_dLSc3=p5Ue)j_Ur3L^(6;f98J9v8scrm&2 z4gj)MxRIfaz5GpAb_f|hGc&82k2Ra_n9yZZKKH+ zH4m1*R~r?72&U50{|IDc2m*+X zJdSw-AQ&kT)m~Rfc0K7?r~D<%f}oF~c)<~!R=To!j_B7!Cw>gP=0IdUAK(w{4h2ML zrHa^cNoBsh5y(*mF#%AQGQm?24lKYSFpxXK^MX4XqbIH zS(wPp8H}&RJod`hF(A3Kn1;VmZ(HFEu(*MU8|t2YBl=)(b7B7`;UF_6XIG&*tHfBsfZLu$!4IyO^eR<_%OU^c{imKr$7)MxhaiXh+Ubp`+Q6I z=@fv>*1*W)%pio>CUo75Al6zWru4(~J)9xJwFi);Xj2?uO6(8L!aMOwAsP+`*z}O_ z&T=TE&&v1jzhs!5Ayxocq-L$U1yl)9kw!%^7VY865a8C*oFB8yRp~d$c8J~*i(V2; zNHuu4gtO>R=%2Tw*ET(3D-nwO1;yJ=7&tL@Tjgm61)}42ApYio?VR0U>P)e7^sq(;p8KHByzZib_(a_zbG)9oyf(){S3ml znIy>lsBeKNC@UCx_E#)I2Zdnbjm7C71TPgp%`(!!6L3wm?A$AypnqL3@#)sGb%jht z$}9an{>+b^TO_f_fooX3mdh-FLpthQe3~oZuxF*@V_+77o+sP_O_zbF0LlXC*q|hJ z;xg3;1C=`!MTYBHfekqEi`LsD?ecTA()1F|>4BEZTYJfpo-y0>X55U=IF8sEX_VyG zHo+lVo2_!QkcdXi)+fEyGw(Pk*6mvJpooI0W{yUa*0<3y9k~MU*l1g;cYej5KCNlN zVViD4$8plUINkY6Z5T>tUNWiDy_Wn_N;IUJ;63ca#Ngmp6?Ph01Lf0&AMt=cbJ1|M88A#AiT`yp2@Cc z*3=Pr_9w-tL&~UXIzfX~1`1#u$oR@x2J~-}Jb?<`rP09~F}fpl)X_?&@}CV()|!^9 zDO2W(iMa?<0Xcyhu%{TdZZ*=<2<`~cZzn=6(4gM55(g*>vXbF=SSq~GtAbsjURkh^ zmLM>ZTS*s^XS#KdwyI)Ap?A0zCZ;!qHKqwn+2?ySDU5mkXflcO#4dYshJol;YR=1g z1+854l(7CaujVtZoh_4qD0wf>yA z4PFPRY|PXb`g+sSu=)O1LNU0N=BsX0(#+&oc-f2jQ%!mV>C^D8 zowGC#C+ASmNO|*HONvFX&8fa^U{WqJ5~T36@iM#O?_%t|;L<9hbJ@>^Ot z>pZB+B9(}Aa2_-R@PaFbfeUM7Nsc2(s=Ml81|p^Pf~x0?4r3w7bXsHp&U?X`8$kfP z%n$V9VU2As{k6J$yEU0NcZ~xdF)KsX=QVYdC_ut-0PmL5cZe!|R9v!@K9Kp7v$5NH zwdm$6i^KOQNG7R!Z!33d)L`G0H!ftuO9im|O7pHyk6zinoRbg03?h zo{EPUAl~@D9iS9@5ohhE471Uz{(!ReXoa=rpQE51JB1PpoG*328+3l&vw^hup_waA zfPC+6`lD?#p+;#k%S@JUk0}N2GpMu#;x8IV=HwmSpJKwa$-c<}gV6pEYs+AsSiVEV z9j|X;4Q{|CpJiWx^w=@WkuEe;K9fn1>Q;lC)BO`oKp*@#YFZR^2<}?72Q?SZ>EAFm z8(c;@Za?#rE7mHmU_JX%&z3i@w1_!mDpT?l? zEu+&6Hj?wb2TXZ)$SeM}7M(9J1XffhSLWN z>sv~w&8XW+b?U>H+`(djHV>vV!zgE87R<1MY%h<<4A?~}EXi=ht_NHNhZ#9G0yh;v zz9?hB=#;nqL4;|lJc)sJwW{>pPOY!`gXQAZMxK3RoFgX$z5ysc<1JLxn`Lb-hSEl- zO~%;f41vTQkKH{)AC7>+l`40vgi@M2*)J7JE?k#p)ONqquJ;mJ4$RiXsZH{4Nw=zN zck3OSHP6IQ?@sO24~a2UF*9$3=eWEMO!P#4=?$iFg^Gr{F6Tf8eCy}gfKOf~Gvi~q zNr>p{@O%4Wf#bnXm?txXPn@Sug((hizwI!P29TZ}p>-W*=Rb=`)lN2KMSfkGy*dB@ zME~bz^1mOcMs~K&j&}dGo*d!6`CU&o{`xfi_Bh5heD5sv-f?gJMcUG~Sbs;^NhIl& z&zhFGNrdi$YAUkAMhw=GpC6NuA|b`(bE`#OfU!*kHmq6bLzK|0Y17RjBVD_(g+jd^ z?M}m4ESsV-$y8;dO{L+0vD&K2-`_9B;&Ay8wLS+TFHS_0*}iThpY@JQtwb0;xBk?1 zmXZ%s*8UZ}AB$U&X)(E~1!I?H3&-U%y!FtyPQBP{BeZ&2WuviMR2jI+vspgN+l98k z{ElCNQ2Kcn+a7dY6#VhtUFHdY>DuuA>IfFS^$Bny9=22%iy${ZKEpN(2`AyF3E%`< zce{AOvTl-P!o3{lGtH(y>-yrEp{u+?J?k~LlUxTnRa z2YKVxLv7gW>BJDM2B(*fzG)M0D7@aE5F%-8x5`uYFg$%_W(tYP=c#0n5(87U+uana zD9ywL9n6W&6q_fO6WMu~uCuG+6#Ybk;!#W@MP%eBpV1=o&I7W&233`mOH`Vwug7FN zt}+uFrH9hh8ePA=Kme)BHO3+B$J8c#KaW0_Pf8D<#5zFbcPuw6r77{3HY$!Ws10&| zJ~(OYB{b!v;}FZ+EH*uRjUUwx(pt#bzd}ycE-`@bM~8(jh`|lviS}(4Z{c#x_e>(9Y2=`B;8DY0}t$X%d4I~Rjz!U@)+n$#{SYCQq7 zsw|VXHzE!G@e>tENubnj{9Y&iiCBew;YsWXRfrgUy&2Q#0xT*8&yxzRU$-11mdmmZ zA}z0~Acu#maGUj*Bk=QJ;z!%UGx>dPUDcq=HmFLmU zURC?Fk6#nNSwV)_uqlrb@ycr>X^zuD7x9UvqIM+AOV|e&*DT#9yQVZz*oxrK&Z*f1 zz-=GN|K~{uBrR&)acg$J;>CCW+Zs%PsR~Kl7M&=7O1!o_t(64Yfd@c@k1?Kq@6OKt ziIOB9(2gXWw{oscNYAlJ}6LLeBzJ99+Vnr*n&VaF{8S5 zn@$w;x+*dtX9rT7@HwrNdGK+*%Ystxr-%p`8YO*uqsURLb;~kAe)=77u4NJ_Mf%zV zY^qT?*9P_F3_tdmF<`RxbCtO%4b52MCK8trFGrGqmslM(3%~;>7B)kTArQ9<=O3kE z11S5U1~Q%&bu3}^>Y5!uy&2Fr->Z~;Yr4MKkNvP!C{n<>eZQNI0{Cuby&lvmFk=TJ zZ+J!{CFwR3SZ2YZRnz#K+SAf-IZ0EVA5V3k%cLL^Y1t`^iCr?Lx<2N-zVn_0wEP%@ znYJ!Kw0tmqCpUl;$TyL>@p-ywyh9!?_rZ1xwdM%iP1DTn9nX;Tz^348F8_)aUDDx6 zM|JG0;zO!p@i5xkV(sTe)@U4T6$uoXlDrBL4jE?V48Xw!{JB}4Ndx&NNfI&rNX%Q4 z{Q^_Z^#k6*`Y&}QwXgxW1j%%;1G_a8({FEFbUz+&xO~hdF}nIZG$$;&$aG2Hx+`>9 zw&2V=|F98;fo?p-NbIJ{9SoFImp^Zqf?BC0S}rxM;_y>jhxrXWAqk}0br=gz1!(}4 znjSkTLE82$@SyR#nmVG$1e&EoMy-d&pNSK0lm;aTVB&1~!2{r2W_i4D$ivf%B%nwF zU8O`ClDOg>1Nvxz98iIFw?E5uf4&o}P%x&t9DPxkn?6FOSoGxlbHb_Z)>O01l)lzU2X(&r9m=K6iPGk?Y1Z0c=@q$tn z*frp!>u;&j{uVVtvdX(Ll zI$OZ9f3xyeeby3!N)Gpsritk`XdfjJquqUdz%Dh0WbKi=^)ZavWBo#3AJ%Qu>gA$y z=U@eZr4!nFwuJ0CFF+1?zay)J+(UqxUK0G7saoG?cYrXSHrKcKt$HqOrrE@$iBtLU zqkMC&4S42=yui&_5W*#vrnsotIuzso13(`PmVm{`E`DzDPvF#3YWUS`2q{tO=65%i zXyiESkZ$lvvT+~ClJU} zR+hp>dhc_uu5AD_gQlW3x!?QGVfsLi^r!~^9Vb={qG zQIs=bHJyNwvl1v=s}ZfuWSB-U$N@_EEp5_~HROw<;ZL2E z`U8VUv(^BwZ^j*KU#47lGB@p9T~|rjYFbZ}OMkc6Dh;RoKF`j6`9_%O1NH(jCREvG zLOuRzlS@FhMX2g(sEMUjigK!AVtSyQ<%=PQ7h>khb>YTx-uu4J4Zq|E2xD6p8em=z zK+H}Q4fB?mrlpTZ3H%PmmU8%8{x@EYx+(Sf!gJwoV5L?Id#b30sNOC8Jf)RlLBpu$ z8PqM1;qcSWK%0DMRMhls@xnju9P2jAEkmSNh?tYl_1_%Ur&p5{#o_tJaKqf}q~^Nl zs4md3;D*bCMp9qw7g)~BnkHe{BR-u;vMo!CFroYUx(+Q(1vq^MXsU;d{({BrkI8W9 zJS57%#DiLKfCPlXUd9X1_8Z9JkF-rPkpX!);T0IAR?;dMo^%d&?Wip!rV4#2k{o6g zvy?>xoci(31#7&UOq07-Lq@C-Ju-XvH)WPrm)rY?&wTG|LmQ%(Y$U!vo()}}u{C-! z+kj)a=CD28GI18T#PyHjn$^{FdjOxRahSXimqb!(jg+0LZ$XI(yOpjK@ArthU6klB zCw@L56)+}8cu@GybjYA`H7M1xi2iM1@wSK5s3Mh3^zWSi z3ar|@=WVJv6}(CdL267}ad%y+e66bI1?)lPFcXY?EK0ncvde2YKQN4Da5VXE$*)01 zgWL#7+R4cHnNy(n7jv`qgMIW^IyClJ+1DNIT`A1Al(%O_mGc7=d}1tkprmAuAy-9u zf2cMbt}-tft5Fw&sKu}iH)RW_a;~Kxiz!2VSRf)P7z+_HGN>~$h7BFaZCQL$NXedj z+$ZvhBy$s*OkqWyS1|8X!z!kI&pPKB`7}{(Cmo4uNCHL>LKiz9Kor6xPrwsYCf@S- z%JK7j&fJ@{8eNih$~Bp-Hd`sgw>?U%_DH7lWor4OCFbjXcR9a|-pZ4!j~GDgJf2yqb6O`W53-v6{;ezc$2O&} zCpk3Ub&r9XCiM3THp3N4PS$U&r`ifC`)rf?x9`YlY;G`>h#F%l!%obiU3g3q<-PDy z4CGO(@ic1cG*ua+6<;bzb6F(gb)*eA7t%hEG>6pb?a45<8|t#2oIrkCIiO_p7S!O3 z_1ewqQ!_c>v`B~)aOK5%*hKKN?6u9W;2|Pe@68b5fCR8(7h+yz@GjH?7Z_Dz z;dslnh`CxqKA#9{WC~3h2X!&hCXRS-%yTKtiBqba3Pq%-=bs&~UbIhyLBWfl13vrZ zwgD6j@WwvD_l^C*>BauCUMe`ZlCA}w%&c@Fm~f+JK#+=PnDxN1xzOmD$KlJ1fUbSy zkTSK4U5GxIx#eZl zd0kxQrJVxyHj-)PwjEjG9U4f7#~3)@PQ*D(BX%%UkFOdEc9JsYuOPx3b1|VCg`0}^ zI(}s1i4u+p)IZjm?A|=}x>CwCA+IWc97iS6ry{$U>=#?89i{C*nXH0=_gYuKbfkHe z<`F2~yn6}$&4u&e#SOa9iAbP4N&9+MaMhBk3v&S3Bmk;K*2376vM^U9{ET&s*=Qj{i8!k}A>|wBjU*4CnJ~ zepX<6hzY@N%Jbj+v%-FV&umqpQb;uD=mkUQ?d46Ecs~sPyX>)X&zHi^_c#6wyHo@i z;rcpQ7VEH(#PHk(u_eIC$Hw6PN3^285Q$MCV@dc3@@KvzMA0oW`r~C}^i&qF6^X{N z4^!*38WPSz!M<6g#cW^JI_;0la;>_h>uGgSX`jqzv($0KE(4;Q_~cIdp?plLgK_{j z8f8Uqjbklaant5wC>)9ud{v-@$Q64(RB8@8GY{}kvMroEB7^+?OgsSYZIsx2b*a$&w8+m6FuhK!d=7bxa&?cv%kA znEgDbpCl;EZC`I-05%s)X;b9@MFNPh+_7OLh+-b}!me^6e%U=94Wg@9z_4@loT0ymh;viol60w@er=w3guSBS7j7;yrlg z8~1x_VeNUg3G#SoDiy4ryQ|De7Qyp|t)A=_^z{NBQAEsuK&F1>f1o9H0#c1mx8(Mozl6nK zKz_6eZVR-fLpY%-{e@i_ke)uU7@UM0NT=U$Lcx4l(M+(4b9voH#lP&3*1Cj`ae*>O z>{sR1F%;gKTm+rG931Y2~^if?hn|fOy#48 zXrP7rMPMl#NKY$F64>{Lw-*G7hIO90t~J(0x4GTM)j9B1x}u!RpmbVb5ueJT!-CT> zV61GxGiDOfat0+`XxfqG4hbn+Is9ee{u#9RQ>Od+%W0BQh0%baJaw^hn<>|G_mok~ ztlFpk3VvwzwQ-tS&!76D{Yac5!P;dIZ0xAGMp{2nSJ{8+>Q%s3i zT-8Wa}C1Itg?x@Sh-;Ik%{C0c7*)5OAEi4ERk>boG+#ENDx24`>raY5`WjY zwH|blg+TW4&PJlCGq6GY4>_1j&fntWyw*KQ*`$GMl_WhN)vGRQo#;rX!Y*Ve65Hu1 z-@|G$x)?xXTVUt|>}&ulmDM?Nj!VC2D(YT46KVk=EPVrU$WFP0LPk?Bk1lw`8QfU_ zS56=1kr8FllqVhPn&bn{-RgY%PD9(Nzn=?3m}*QDQY!iRFtS3&z|9v29KRhv5H1e* zlp6G7OsJk=YVgek8{pJ_nWJ&k!x0<4srhmDkkcb-^2_6>eMPgWmus`v9U9H+k3EhP zduL}1n~cUt-Ol&n^5%K@Q{!DGN%cQuCMlgM($R{Ox&cX#)!P>ozi;kqN2_M*0Z9GS%H9(MJvPQS#U4^#) zao+S}g(Dp@vQO`72i{QgeJ$5gL)_cj4U}L8LjH(CL$nv(5T2{KQ|O+V`^;pdO^Fn;_ zLh$Am7S;?>5!4bjhhT3vK0=bM*-x~FMZA}q2h;YiCo@=_Q;p}tlv!wPORA%g$0JZb zi%FKNg@jQzOR16F^i+UG2+{Si`bff3$_*NxJUPTp2AcaaLIo!*@7Uulil=`kobN>~ zKoo1#P@e8wvpzPQI}xQ2OCrExDGM@7p&ctE#6hlQq^sKMvt&87CIG04ouy`}UL#VN zV$Q1JVvU1jn0Sr7HIS=lons?`3~C$%#!J{bp_PlxX6yAdteUoX(DSq~F1DL?Jz0H- zX=h4hupo)6ZdGWy^s~{jG*ep2k7)phOjcDfEiz|u2siS?EbZ8_Sp$&t9}ZM6VqdlW ziP~cw@6h^o$ZPJZSF9ZAK`2#9fM#i2?!gYQA!AD}xg*qp>6$wU5>s8fiMz;?xCCjgZRKa*Sb zR?7+K|B^V3)6?x+X1lj2yiE{+#ANa@=E17Lo;9r(h zq9^rEXYV-Qf45atxs4oe^7)(0Ym)Mh2coQky zWHyU*sP(5w;k+zCxg1(6KKN_LRB+}n8ag{b#E2Gv{H5&OT)+1MAkjpc&+{)YL(7zP zWHIz%TO%09vNV!%NaqCkr>Co3ty11)qMLaFG)05CodETt%l=+Qg!dV8)!h4f{zgaV zxDvc-*d1%99*5Z$`6baEZYIdA_XT$*-iReI z2t)}(RzN0IGg2|hpk2ued8W|cUY&r?Lvbs7Tq+R%8ijdz6k#F6K@>}j;U^b7`{L*` zGI&HFHy<9@5v{^h1++h%4I5lHIF5H^mQs&+U;ed{Qw(Izh01}~mT9E9<`_lTv;QTTk9&2Tn99A`7UGJnv#yN_AobGd z<+JYg9caEF2O7qT4+XB2z3%%T;tAZ}9pqNvz3fPx3v6W?gZ=}4+487TNjLFmg`Ybq z`a_X#ZOa-vW58R=9`(VxT_Jl!*)+^=V{8oBWWd~4FJguk?FS^)nm}k(Ph2{wd>N*M zEy$gh&f7DJH=d#@MP}q9Q1?gRJh&AD4?X<>Ag1` z9F>3FqtnXF#DmCzO_Q%a`Q>FhOuD-S@pXaWh-UqCP8Zwb7n@H%D!+NZMo`0KMUAI{ zVfyn$<$>AgE#cQsUgBqc!$ryy&6lU2iMAJ8dhgY=_7+fVjbXv`1F30Q!O$wdpIv z23Kc}UG>IoXMHbRkB`iYflSsFs*>PujxQ@W_QRd%;n*sJ%h0xDDkV0DDt!#EBMN$q z|9?&!NF^vspWh@-wHW{a>VHfd1AF`5eo&`hnfprTpW`Nb<9A+VH*hMiQld7a$yA4@ z(G6!SlY@*mM*`D?a<(ElR3f@kFs#7FV)lkloKMk%dRZ4>JibfAC2?*>@)J>kaDLaq z*;E*qc-?1B!esjbWFc4_?Yem)jPT>_0F;)Nj#2L!n1WwaiGMC9x%PQN-dTky^T6c;&q#4bERBd;9)6lq^najqSG5Gd%aLzq3?Dq{Hq3`S7 zKJb{s4v7FdF<@FXnc>PYWL%g4h#5H4Dy%^-|8F~ZsHL;Z2TQSEqoot=k8dIug3%pak50k@CB z2RGcBlKY!1tba47ajLw{JJ~%uTkhZHMI8+bTU!7;`=Fm)wI+Aou8W3vtuSS@eMbf8 zcWWYF_9J4i=ka2Y=aqmuvYL39UWE5=>)_Zfa-l58ugJduCWGtl|WS(&f@+Q$+z^0mf)0s&5QW5ny1B zFgo*-*%Q?C9hN82ZWgPSoaJVgnU(pV)?>Q~5`S%}WY`id&kher;{{$X(wjhGFZ5am zl0ZnUgTKIjA9k0Ew_hq?2-%s7v>)*dGkuLV=z?ie;q|ROED}BXOuzajP^3OQKQj>p zhl@9o@Hu*jWyyjBG@Wk1M7Q;o+%K|~CYShZcLG2DOh-06Ckr;HF2TRz+L5lhNft^8 zJp{>g6mkXNem$9f$DKEmo%sQLt8Y)I5!3nJxL*UNbzC^EHmoo!H2aPr-Gb1DvFaJ5 zZg5yGA4i%Gg2L>A9}KAzYRM zu}Cyj_W*8<9KA!o8XlgA&RHou39-lLh~)ZX=zeC+N$aSYK4Fb4*Vv;Ri_gpjH#Vm~Ippdd4zKEep>^gH%*I^w+))M$`TGoe4hbY?i2I2EaY$12UeqLHh53N>2s zwISgGk`5I#;Ht39nQ*R0 zK~A1CQjM_(I{5`nHQEoEV*MZzPa-)xR99S1#sfuSGSiA>pfSo6+) zWB_?#(W&x6gkiEhODlOVFm-vc@OUqU91G+EXFVfca#VDw-1;W=;||&OhNeQ0Ou~B> z-=b-Bn||PJK%{1*cHs{}xg_)E9cxDfxmscGfX}}OPxLUN4fw{z%woaGWxAkyGdYW& zlM+X2<6MFZaQ)GM^C(*A&fpD>0NPS(k^0I+Fq{o&a+tk8j}u8^bGd4}ZCf!nD8x4=pclbFQ0pa8Pj7VipiX#NLbXmluzK`*{={s(a&-pGAP8LO1l^6 z!wmrYKY`$4PjLk1rcC0a>I-gXrd_nkh)-kr%kf`t&l;h@jIUeaT=!Yr6q4 z{mn}1+5Qxj4QZTVEu@zuh0jIc{!@9yE4P8~gyp;niZ8omPoRK|CqfCSgNwES6LPHB zg|XEaj$e6@5)yL}DpRwTvm00_GMcZ*!vof6H?s_*Z#Yk{Y1Gol?yHizuz2r?8k*r2 z^tQiX(xOPeE$NfmO_Jo2nmK9$It>{QYH81)7l%r)t%{^*o{)KZs{sbthvThk4<5da z%wH7Q`EvV)%llJ)%kdCRffL(}-Z@~XiGtD$dFD_p$VxN8384=OYb3-rKqD(F=oyQt|=efL544q{%iC!Y`!b zsX2dHO&9+APyFc0n+5f|zL2^!=b~xwzXdT&GA5C zTyF~>(Iazht8!H9s0My*$H*GBpb4DAVH1R0ut+a5F)^|+48`s+Z>W2k`@e<8Od1vYnq6AA0epFshh{U)ha$Z>xP5*)vZf+IcbJLnXJat8m6zo*VdS3n`EyP0hfgR_+sg;=)&2*1ryE8$=hU(Ndyjnk4i|^7%j*M6$-iZcqf-c% z&B98Ou_u$|`+8JmWr6oNOv=@aqWJ6w3r>rfEngb`8Ntd9iG>-=jnBp`%tgJDgVsVO z@U|Jg6Cb)!B)LlTv{T2>a5@DAXVA}Vx*at&-laA7&W;Wvlo#8GKi5-UFXMZ-7@riA zULHW7qM*Du8fg@Fcf)qkT|QmSW|bZyl+gb?*d+H!g-}~bPmpg*hmA}D?Id0pUX5A! z;f`_1zZanaTR;~sQ`|GgFQ+oo__%!8r1KdaKVD^W}!*8)_W$hHU1#(~DuW<*z{NZK2 zM0K|&Dmj!Y$0}5yip6)S7+s&|rLYeLUXcaA!$a?IxPnl-w5s}H!$!Wdfx_>GN&1z1 z9YcweR&4?f5HYbd0V*s>dKYK+pRjWEyoj%}hjU}{Z9ULu z&;78Le${;BT>~3-#cA|(aC@znFR?G&;5?Tf=;6Nzh64>s_T0XCHKsB|uj_Xq-yKOY zZZH9rpoc$hI&w4T`***N_|(`;i=)5E!0#GJmPxXiRLyVt+TFku&J97 zJtHSn)3dxcAo}9;W<&%A;~FYAlWF!X(5Y z)#kzH_Vr}N(Wrg4#LXZtKb`Iz&49aK6``SKJr1H8-NH z2AbLTd2PdqJ=#q9Mjo_Pzf))`ziZWAsEx3_TQ>|roooajX7Tqg$?VT7ug-(l#bc?S z002^Q@Khfah*8mlDUl^O_riJWbX4mfF^Q-+FY&gUJTNz5U`#zq9iMG&^r`j82qjuE zI#T4*P+R3IQntJ+TW0*A4>>Q`Stv92Fj)kCxq7U++Mb&UtcQ`h6Rc(Sc(|uA7Cw2q zH6Mqi`!SG$G*m~UY|Dv?`zQy?EpJ#wTRmc*>!~%=mOwSJz6}+-EGQm3)}8Wbz#9cIM$R zt<4^@?4Rbf;~qFLPN=9nLJ%9kNy%+G6R|Z-9gL&$5E)@ywDPQU>zl^axALDIcqDNM z%CWt-3ZAaWD}NFWOv(9DFS=E%+l2g-a`x#yYRr67d(H)32)3YUZfpK)GVW6y?B41Y zA2h7$N|~>YL7OmZ>nL${GVyxVH~GUm-MvFi)iX|f^)$`c+l;b0s+4?{{^9`2S@F(z z7W&A_MYW$kqZ@~sU^xHxDIPt7Ym{Yq*fi@s%i>jO^|H{vwZj1 zKdfLOepc(pie@{qPG;RO7VK8mr&8hkP2IeUEL3RR@SzL2O{5JTgTR{3<#lz;yRp$p z7tOoS4c&nG8d85p?{!!(`DFH=9;~m`O^?^d^WJOqSFOwKN+O}_bd=a!ob>jSw$b@R z4{|BFq_2vrn=d_X2;s?{2QwOW5sF;YK-2$g>Kj~<`{ucTa2tX*WS{_EAWG|_^%u#w*t+TYCw9?fU`d+#$b7_G; zvdSXMFSB@B@98+QLc9mb#?$-ljT}1(P-!sqB|Vq?Tj(;TkXE9>6W49okNx)&F4M*e z<#ek~%)N`kvZ2tgM7OBktWy?|Hk;lkm~Nov!Q6Mj8d|7qGzMJ$>zT28@G-uMmK_r1 zgE$stN$`V}JhM8d=I_)@m)qy8o8{o}zN%JD)>zF} z!aBZfqL=yBSNhf0_|yV_%6th#EglM5;78Z{kmWxMd^Dnm38%{n7mrLicR!24#Rv^QkE7kb2($eZsDUL2b;JLMxvMOcznx1sO!O&5O6 zUxRDM5X*|&GWeaF*x^E+-se5{X!k?=bocBvTV+k#-bo7gcMe&-TJbCOj6lr-J{hr= zw)4Z|*4ggy-htI-DlsZMH@VUD4^KK@O8HSWv>PC;SEuc>-%bwcZ_6QPn}wN^9d`JMB1=da>w#k6&2uC|0J;72)BW)Hs@|0)`UW~Um@OkG6W z;!qmc*UfM-V=X9l7E`lwG>RXVYjq6>#81h~5x>sQgoQLaJ1b9P1CuLre=pu&Qi4Li zYk|S_L<@^T3kS?OxtK2%41YT`Z|Hg?q(nb|5e$2zlZq$2^7uj-cSE#@71 z)J}pFxQR%m_c`Y{_1_gBeu@~q$2^oGKW1#si|P$g?@|O^+?W%c5Gf3UG3~z6ky5Pa zYN(Vi8Wj({S%SB4x6Gx37WP3=>TKOy*ngPN^a}uYswZ&AFdd zuIAj=m80pqg<9^M+m>{-e0=zaAso;sZ5HFxxIam@w&t*(>^}>!sC`wrq}lqf=uVZI zlc#P}q1nn`5pgs&LDA1!ev$aON`y`cG~>GD$ATTp5v>6?rF|4>T<1QY-O00;m`Rt8gF_*)Ry zCjbCCuK)lQ0001RX>c!Jc4cm4Z*nhWX>)XPZ!U0o?LGZ>+cuKF=e_(7Sm*9ZN@eDw z+mG|s?Ygns`ZclhY^S?>NmiysSY}L-T7vS&X8XV2d;lN_f|Bew$?d(<-KHi93#yt&MNWr@sqEH@Xy!y&o^Q(E#c#t%BbnTUCw$Wl~i zQf$rQG5kk=8H(RzsnQ}BPou}8j|JBBr?tVK5X5yc7t{D!I4&rExx%;xetys2vR@LKuJ3Fp85ZhT<_)n8DMjTTsN6M*6I(W*d(lU0z;B zF(Dfj<>XPu#nhwcyU%v^4tLf8VO`->o=K%dDgQA~OX%#$wTNec&^SH;G_&|p6s3qK zrG#%)fe2rgX_e-ap-{zXbs3iu!6d1w%JgJjHRxr~gI>D@fMRhj*0v7C?%|sFaqDpR zaEL(uvU~K){;MPLm#u??t-Yh&okOvIAfD~-ZSNlK?(f0VPhxBDZ{pY8z3ripKrLuT zUd>AE0ic;8C1pZnJCw44!fC-MshJ$7r|B5FmQUvKM2bmqAI9}LhDSD^7#JZgujvKOH%9XQy)UD$L?VGt#xe3APeY3a zjEgQQzKp(wS(s(e-D!ahRoHGZk;rNh(nbNgGNG1$3I>P>^c{PBEG}_SG8}^I`}Z6i zREjfRH~TdDny{dz<4hIM1C2t0Q?AAia5$`>)DQ=#gozLTo5uOI7{@TbX?mWe$O>b` z5NGWEp~p4#a09O?pc-^1iD<$c>xN(w%%ynp<ghW zdA_rCxHAIDw6nMMVh3vX3I+2hlR)Jj0)Ma}j>7|6OHhq1b5DxSGfnjDKM@M1wSZiDJQ6u-*r4e?u? z!H@y7IV~W7x)o{x_(r46@;oapL8c+|3<;XxMd$>i79A zdx3AD$lm_Ji>>Fo|Gl$~RNdVMI=;Vu58427X1xvgw~WV`1oDdqVxRtIId}iw?>8f| zm8I~pN$^ru^D?J}jR0ctOr4AjQBcCc)Vl-1J1up$5}>}OJB`6dqW<&4ADiR{(J9MW znJQWT6|0UR*|A0RD)h$%P?RiTVOcb|;wxPpc_>U}PgJGsH`n z{Gcfi#l}UB1KdGY(Jv)xK{7$XuUj?3AJ&GWoxLM?{%z;r5U_f=b#%0Ium?DmGD2Pf z2z|z`?Dc=xc>VXm+lOxk{pjJ~O@Hu%cnI$fkDiOc5B=9~lIV*!>+$+Op+qvEPg2Ez zN+}+~_vniOu01~XCl*mNOo2|cF*nQB5{%zmeld8xK6=~N(EgX-cY{=Nop5g^RAFn z|6OS5HpM~7sMuLMFz7|ZD1F$ z`a=Mq>mMJ(Ox`^e55s+Uh&ul%sGf4DRev?laNaN=(H1z7*hdxgGHq4y%2Ml*i<0gM zp>(vMrYYB`YF@W9byd{V7;7Y(hJR08#)a35*qrachj%1`g5TrbdpM&rm(Z zDH5ZOs$@;p6wQga1SA0|)xa}}tC%c2Vk2eU2=Xc(R~ec(Y|avE7<(rrH-jP@iXbpN zRm{sV&fl{*Z*<8sg5Y~a4Z(CEA)chCr;-?z(a~rlh?ZHQ2t5$E3SMKCcw80=jk>H# zXPNGiK_#sil(qf(wLO!<(t#EdT7zyIN<>jKuvFTD_Rs+UwiQ?nTK+J;)B@YEFw_-y zEVyhkC|*15sx6hbXd@1|k{6DBEn4O^tz--kk%>hvS-GavBxM2~>xJ}ugn>8*>JGv88WeKyk= zL~p&kKHBecQt2pX(pGlLpr2C-c0TuW9(=6+P;2y!6^{ z+w`cvp~hvuAU7qy0OftNKo=gv02Rs>e+G~Hhx*&8Ou#Cz-+rP;{Y}AA>@;%t>TpNf z3r<6>{=QbsfI&ds>00=Rwe;6`8vnDXJG4cQ4NOsUaa!Dh$7WBmVxG_xq*BlDkukCz zl2;&sP6`8MhaVeICP)ukLi{ZAqoP?NJ(-SXs8pX{OrhNFk1xbaeEjvd7rF#|fI=1q zd>{#fCI2Z7Nwv|_XpQil0t<6##`gt0>+e(G@w6U-7xZYqvn?WXqXkZOTq}ZJzSP@^uX-3pWB=RC(m(y8wZ5Kt<;}S=Y zN0|IgQ^@lx>bJhPZxMi%d}h8U%a{Ykq19}F`vxMSGOaYMS4aN{Vu|EYpmm})JS9q7 zHK9Uda~3Nl{dL(JK+UBm@|3*Mq&GDC120(LbI8l(7Pv-DLGA14vzJ|+74s}1-GlXU z)L`@L%lLXgnrx>_#DN%FwUdoRO($l#8Q3cDRVG7n1|(uWGs*yPe6u2XpA>LB(Q!5} zXN9V*oMzdSjCou>OFN`?CUeu|(bN(F{sv$Q?V_QO7cdlBy-IV(Vq*168F+dov{YWP zMchMj!D{X}rQ5KqcE~md2&L4}D9+oiZN0_k7F)u;Y~@*1j%mO`if8#HzQ8@4St&2l zVy?jSs`=A^vjQRHWJ2y=qUWQ|UTg4Jp%3j<)%E62Xp%3|=iRy0;Z^j~$no-E=jiBfqr0JsRO2$8 z;r#i`BpF)PuUoLrsRl@$_xn}F8sK+4oXHuo) zrZU4zG`9L|T|qg*LyNs{FyQD#oX(1Y)A(UAm7d2;``2u@*iWOFfok_2h9#sN_>$(e zldmpd{B~v!A`ndwf%zN5vRLnVHFSOJ`NJ5d)AS1H3RYZErqC-AptT<-&On1w;+iG~ zf|?e};Har%d7S8h8U%YR#JAB?QUvtE087H4;a7c#4EM11x`Kj-0VE`hQ76J3qq4|Y zk(dGbV$kzU@Q~q%1`ZqU*faDdOYw5xEC7wMAcklXqHz4Il4y$VP(#0(F{5D1HP5+Z z^IJuJMl~wSY!lu%1=?A-j_&3JjRH}cbIEjcrS&yhL`(!hBq}kIM!^^>E%{smF0`9) zH*a@;Z?vNQ)CJ~%i{096a^N|0<6q%uZGt0McFkMf&mye!_g}E4ys+NUUPlpm94$}jnFz){kvTDLc503 z_+3#B1409Yyvz{PnfoJL`9Ya*$c#t_n9 z1cpNCaMADvq}~ZJ5f&?Ofiuhw4>ahtA`eiVn<+r7?C1#(46l^{gSxkG%ZrlU;&P=v zQM}o_*;GTh!@yi;Pf}FtN+MO!<6-Iq_lrL5ptR}k4vNczs}2g*`HX|oXkHHr1~BEx zztgC+2=9!FJEK<|6sqFvM1I;aX|%3~1QeDsp~28@;Q!?#(js~z9Ohhh?koc-XYp7% zy+RMZ6S0JQ3ZCtty=`{$Wtjj8D1uwd=r+6ZIpm&|a@2=z2~ttG4JnZdQT zr`{wptzuwI_ry04_lio^{&TC2HcfbI*On6Oq-&><2uGJ8X~rDd-E6ygws!UH*Q2lh zxE3)x+08Wv^E|=ujQRLXPbhOF0M7@Iw=&KIU_i6u-CWhdMYMeA?p3s}r`X|>U$4gD z51T`U`la@g8hdL6W6Q=D*{~pgf2nDLJ=4wI$<~$Uo2$KKtGFx|F@4SCPK*x7f*bq6 z#6l7SA<5^k=n<2*{sC)Jnss(L0L+ zZE%HH|6Y8s$=Zhap*Cy_;$oxLaLFpRErLfjT#6nQx~mAWtP`3w0I1XbII?lyUU>dWHP7R13K0ZcVumETGnGUadw%EkakIWSd+y zDY?k!p=K!Z;I`BZz`8?T3{t5k;v6N;zZvZob=U1rP*kDv+P50)0t*|usKZH;wl%qm zFlsm@byhZf*SoGOu7;NBCGXvMh%mU<&xX|kQzq#7C55eqEsSiM&2=l1dr+cKWBtF zCdK|&gDV1RqdsUgxJq@hL0gS?8b4HsoK19OnmDlM0uuUA)!0~8=n$&1?jB(ee zbM`+FVB-d$lq5)qQm$h=I^2R0^yz|}Is#oM1(1Cuv(uqCHNC_izKTYt7OducpbD7K11&+btxa)QD&iGsRid+swkI;VqyG}cl=9r0REPD~N zP2WLkP(yb$mfkVC18^AAI%GU9Cv^CZVteAs z1h8sHD_1?nOJB53uM6bq7b)91q?9Uy4i2 zP(U%qDy`-^6V)Z1G%%rRHi?hGOjf*AiKm1c4nBrwcHC&_hFy)Dm^j9k;~!~@k5gwk zo@75rl-xr$#a1Xl-^5a;`9*QALj@UNKm~KtPE@nl|UHi~x=K&C^x-e5?;3H%DO-kc;`=vEaTHqrAn zw*tY60J~bb3*;f5QUAxBk8qnTQb9AC51X^%OSAw0 zc2bd8Y-<@^1!%KJ@8hJsF{9XoWt}%1q>w$K&&c8itIB?YW0Y8boTF$VT*Y zDiB%#mJn#m+du8|#x;ra0VB`J3!L{3R#o8wGi~k^;GBkeke1p{O9v|Gp7X|sPo?IC z!Lcz|f%kW*k_xam{O}9%j~MMVvS>ILoHpBE)pr<~nS!T!7kK zpXg~K=S_?No(C~zs`F+6W)_lHX(wyn6H}B`wD|^x z;!V>!C{%W9!;ZYoIjCm%{f$@dRN^{l-=Sl~Kwdcem-&)&sveqi&8*}eNqxFaK_n~Ol z4VifFyGY*w!!9P*U1ZNKqRnjrtB5+ z#s$;G)$oebu9R{3YlR5=fk3V1x`dsciXQc8pg5Ef^@lKJh0K)HG9>8_h5-;J;y?J& z4VN?@8Y2x*yG4!TuB$VgEsFiW2?05LEl4m*+hDTC_4PzZ(Xzl*&&8EWoA0$GPm_r9 zjr0eR&a~d|3Cv49>J6He_1F+#%4F@dX8#XL5O zftXWo?Y;RJgBf>O|ii`r?vFGvFH`oR(qXy~Ea*OuQR3@6HxW+Pd7^*3jbB6}^Ul zLB{lE!~=G5SbwhF*8vk!)hV9Zi7H6<1*6*shgGqiIkZ;kDX> zrPpt-T92gd&|BJ@83S&^QO(2&;Zy0sXr2{#r*()ah>Y%_%QS9Uir0_dHhSDRjen~i zH?k7kagY5&R=4W$lSYplr`>PU;YA4tZrf4+wAZcr`SfkmH+C*VK9gXd79P|mP$2<% zGe6XMw-x91Ea0XX(aFm}TNSqp#;X0aXO+Ve|0W%BkI4m_txDgZdmw({)7o_(%?a)7 zTHg)F(3MtHbUs&fx?PKgQ;^|N+z{q;b$9vTna;E4h3#+9Wf1frzpl@*I(ntPxbjzd zOud+wZDFcLyuHZw35)w46wWV6fP zs)fU5z;4#3C&Lw3nrsFd!yhd_3^R~fClDP+(py((Cw&Q2aHSyE3#BG;Yxq!5P;gDo zI^lgb{Iuz*n@+KY*V#Wnxr&(ifMaToMn{2mH#uth0g}w?v0a;c9)6s)>%Tj*V zZYR=~&@ZI+eJm1o9(*HY?v!?cZrxgnEuo;}9R65@YY487%yrzIn-i`UXbb4|XYWW} zO+|m&FJ2^mmQ}~u2um|3;=GmF%^wNhJGRxa_?S?t&{5MCj_IilLQ54k+z*9E`QBQJ zUBN75;nMnk5c?wF)@zIk@0&PK%$`XDYHLW}+k8oXrh9+Kd{V|4u1>(17Fl%;+)J#+ z@)XO3uM}DB3S3yPtE&qcQ5~ zjMb~7pVq(SphY@^SIGddz=q*RWHX#f=orQ!Gw(8aMNVA0$~~fgd0d8gp-g(^Z{AY* z=<*C2qJ)woHOo>wh>7LgemvmIf)JoS^rtUAR}>+2d|8wUhJUJKN?=9f!ka|^55_4| zLl@XIKG(_b5=qJU@y=i#G!qzVBpQcv+3@)0I6lBE=(@zy=xf>(c^ZAgCkz-{ry_=p znIUuo^dE>`s*3e*zy0dJ)}Qpu-JCMqtF*rIoi-_&yzsyIxi2w%w5NiPJ($A=ea%URU_+vd@`apN3K-3M z6D35UzB?d|xS6Urm$ZS72~W9Iho8wPz!D?^sA$U*xK*+9ZdRmuHKaMG&SaLYld~0x zj- z+|g|j=3&j`&}cfzsdpRrcGJ0Q)vcg46Q!?$O3V6$u;_CNP7Jdn2CJoUd#|du*|Q@S zSlP~p;sS=8K1U>?`cPvio&O)F5R?E={q&WtRo)#5~5C^ zefa7!EcVV!AnR4-y?sEmH3-g{#diY6!mrI4G9w{g+3Q;KHcLr;GcVnun_pLSX*dOo z*4a~)y}+bU4Ue}EE-C6{tt5Zwg7S#Y)?Pc(M9HeMNrCI?eh)U?b*vsV#{mwbrr)(_ z=Q_tTq%L2xx(aa*>2fQ|AaWr|7RGc>2+FV|E)$)5l!#1+a&U(_!^jK1yH%}>wU1K^ zX_JGq8(9wED0Md577d5IK2QQ#qx!b?$?<2|hIXL&EFo<`_up)P@n$gi*RcOa;U4t% z7rmiJ_1@d|Ts80lQ^;w`=GvuwJE=GL9 zuK)hLeOSZjd7!2m;r@Gj609nB7wlEsy%?g#NC1`U(@3CCDr}gRw-YnXx-9_{Vtk5Q z^K_iQ_h0}0je7gV02G}5>o>`p2>u3&6F{(J4aYPi`Uq0sM8MFAsH8GZjGV8$@f8$& zRYr+7`0@(P_okl9GMAZ!hKsacpLGzD2pk#Q!#((39XFZRVYz5qDPp8B31(&Vu#>09+r8lgZj-(43@LXQ9C9^moN+R+d9^9$u#cZAkD9pysBKD zv3{jZ@@Y(DMVE}x{Tk+*i@a05H?L0DzwIHt>bLMZR^v47u~B6{c&1;-ee(UL_;RB) z5{@qgQSWe|IK;qG#$94sckypqxuI6{Qa2#&BrpCEFK&<5KexTsAYr)`MD2}t*>B|f z59~O7LPfXhICIFxOZmQQi~3MplJSWj=vp1ppZH#E%A=xh1g|geFu>3e>)iidT1oCk z^pDSU!ZLjhe?~$6{yJ?=vO%BiIuJaGLE9UFrK^Jgo^ZfB*0qIZc1+Bx{)!+T=o_F- zw{?F=4+1Kd>kE0JN*zWE>OR1 zoWZj!U}!ur%xrW25jX!y(Dl507w=H)m+=_W0Pf&zTy)F^C0W?_VP)MhusCq0@j@Qc zzDzOGMpas3BG7HdgduV;fKbfl!Mks}nj0#41y=8bhE61st=+&CBeYyB5Sx)J&n%ujt`xNdtx^ zY3B!e#Fs}UoD{ZOvJQ?Hks6N?_73NVJL}e)5wJZP%z)k}|olC}GKd3nCg zXZ7+EgkP*)ei~0?dIR|Af+*wj8}yiJq!%}B18R`0yHT}wae0Hj7c})(FW;Q>%gd|m zCS~LCIo@WsZoSIQDmcBYDgZOWGI;oOomvn&o#KRSHAbI1#S2$HMHvFj;9 zZ7?ZNfnkf_OirUHu+#_KY8^-6PiGNoNC>{+&(fM#U#nh2p|jojY;2vlP8K=xt{0pq zxK1-ov4eQaE6^vn;rPH_DI18odLZzY2fX@JZ9IB3fgzcn;IY_8d0IYJkGOY_D7l?_ z^yKTOOQyhLH)02^kVs3X13A&jvv9+yVP5i1#RmHP8fz8)pPq71uboHGy#pS&&aR|cF_}=*BL0C~JdxFNde=7>Rt(&dk%I5?LS}ta zVSDGtS3ft)#7V+OK1*BbumVXoHE+=~tM@dl7n7t0ViK1V`a9av;Y=hI%D$6FWOL2L zS{F2NKvEXj+Q0>bNQ_KCl*9YI_4RiOr2o);_0D}fli3U!(5Z>-p~%_@=83xIREfuo z73H8GRpne7WB>!4sv0MjjQFnJx4^51;YEa4IZUBRNv>J^6eaWNO!fJ0HN4FLHySqo zI3&l$2rn$<_)^`j=TdQ@_4Y7;MEs}f4LRwRn_I{i0w&#^lQ&~wMxsVTzv-Mr+*Sx) zS95{zk$zVz=4#|nGp4d;{}gk0GFQ_k!f1q(VKg#(FFZBw-}@g>O9KQH0000807zB_ zQ*;~1=70SF0JTR102lxO0B~t=FJE?LZe(wAFK~HqVRCb6Zf7oVdF*{{ciYC%==YqH z|A5jbC23QPBqwRBSiY5QInk|c`C3ZTK8i|0Bq$*Q0R|u?vrYQj@4W3R79=ez&+T(h z*v2A(-PzsQ+1c6Id3g|RJ=}^$#W>9`_oBsovh_!N^64iJqG>T+WJxqz&f>Cy*ZtWN z9^;$m#cWxomsj(sGwMdW+uM(~cDHx_6h&|2MHZd*qt~Nv7HOGC@wZ7iO{*#`@+hsM ztE5aWmeFMy=ksLTiza1~M8zZ;UB%^P(u?Lr6z9ummXsA#C@$u4nnUXdD29&CmRNXx z1(2#@GQW+>1j>)2xT=a#8Ux5^T#OdeB%jA~Y;uxjNfmYGSJ<7Xbt08oU21Ba#95T) z05FNvtLQeJUlogaR3_EDOh*W&2Zcu2Vk|vTC9-syN;?RFkWwMsMFm5_-u4iW=>-2K zG``v5B1@~Q9)cOC*uceN4$mumK1y<|2m|`OD5EOLG6a&s0BF#rk5mR4LMSuD?_4lO zt>0c1Q+G&!uF0azq2Xjq<1PSw)aZ}NXfA-T#-zxy;ueMp4d>$&hgR*$M4rO?_@cN; zXk<(Qc`=7xb8m1`W@fVGRdp4^FfIuFj6~=Hpggt)S7J}9IgmsO^D!$*YS$lhU-jeL z!|3Gr<>~ha?+&A*lj!ZcXwvdVO>X za8Hk^O@VfF2=!hfl-Gyvo_`BZ4xSyoIy(J(FM4@&`Ub(i1h@y$+k@$0vu-i5CF*&C#2e@1UW>*N1OTaa7PYJdO_k3csV1Zx3F*q6QDXgJHa*UOqp5 z`}cQ8-+X%-eS7@s#UVU=b_o4Dc=qa$TYK|&TAHs8j$Zeo7YDBozB#0d#{lRZm6Sey z|Lq|?f+i2(|Ibg4j^7}Do*%zCeFr}YKc~m(a%g(=;_%=VfIGqZ_Jr~zfBMN_0PA=#i1wo&KK-QC zYJK{N=0u7$ZAH&BSoc6cNPg1<*5tV2RXs^_Cd%Y}GJ^FLsj9$trc?O-=_mX5`N1CJ z@~HJO#m)h(&yz9-MgeOlp3TZ49$jHaM`Z#Jp)_>$(@(gs__Iozc#s!2S62KmqfX2-yLVSC9h z0V%jkF6PA+;PfUb=RD1RKW!l0y*yU8q_^#?aeJ}%0>A#xy7;MIs&*vaE; zb`@8u)&sQ))w}_cV~uhyL%(2!WBm?S??#WJR<8yB`VW8CQlPJJI-#03ul#ZbBL>0b zieI(1p2BuO?evKlP6#9Xy4%&uR!9c+^w|P;aC;{-m~h&Qww^|3ZFy2jj=dTCUX!LfJkua4L!S* zX`yo%jeyDF77y$QR|?8w5wed8Ne$$kIrI@$F3D1`?1@vwxoQu^DH;ke!FVnrk?CuV zsb0ajP^znnX`(O*QwV6A3L8O!pD$)|k)RoSJw&wM7pIAfk&$qF6L6dSG|7?bpF6Q2&*b#c}z%C=&)~&&hF~ z$SbGoxX$f81Ga#tu+8X4KewN}MwGow%WCet`A7T7arqQ?DX*pW@7qrfL5Og68rp@Y z7s$p%B(aA9jJ6;+Q|KTTgaYrQB9~6;BN=lkUgfaAm%Qr6c)mhfV{|z4=5m@UnG0FI z0YF0rPK-uN8F=iA=W!3$D^LosQ_aJO69s9Unq(G4Fk!nIGf#o-VK#xYtQjpFV_>J- z8sYAcrPl`iHI9!>+Tty}KQ4Z|{BaIQs7NITZyd0S3yY z=r}KD`RK`PJ{?{Dd4cS*U%@Pn5?IBTNk32KPpNqk26&Bs`U$Pj+a$g&lZg@(@GH#6 zEk4r~@Gxm=FDv~W&U`sDL|xsKE0X~&;FwsW29;$AZ8GNBj3fg66Zrcmxrj&C=E-t~ z6ifXDB7y}A6d>=^Z+Wd&hI$S2KD`8voRk_Ga+-NjWD4SBk&o!Ns&iY$GxZWifZGrV z!;u~VJ(ZVp@oG1sD-4&`nm|vl|qAI_8RUlSZH_25j*->h(9j7(5{rF;}svjX^zfe2xs*vZk+eWQ0Eu8Ms)fbG1fs;v#0BFV zosQm>0U>h8K0kQ|k2qx>gM#407 zOLr&DM@1>>Ks@RTABa>dD2ztX#6nKc(isLm7$>mwu~R(duKrSWgw$rz8>&E)2x|#% zERvrVnp5It1<&cwR6D=m+QnrnTtL?D=8JBhiPo>X5!E)-Z6=V03TtPtUT;03>vd?s zGSlCW&hjbkAMgj*@(rN1qY8F$z30<@g_@8Gr@hmX_FCPD>NxLc46QEd<$yY)ffUB( z6q$9pB6i$qikNfPt8X|XY@wL+7{3ThUcE)}rY8`rX1+?*|m>=cziE-x`^v!MQ zEpV%3tXeX=ApUw&&~N@aKgg+w)&TL3Y>dGr-d!N!Cyj%h6L| zONTkIR0hS5>jm{X)sJ4r^Ek6g1{xLZimq}(_eXW;iap|k|3eB;Rwm=`cgbi06m*k( z!}{^Y7T+b8$$PAEa-GgjNfFObWJ>slo|KctjE02YPjMCMFVE#-q=v}vQ2{Kv{jvHh z(DAE=ZPa**9(_=BnUOE1)I8s8m~Vf)NC`}wFP~>1#-GNQ^7D9>M@)J_3>?gwxOyUW`%uDtXU{ap7Ohr~)Ag^1=r^jjt0#2H=%Cg1`S}|Acjji|t_kyvXzuSiCnWoL6vR)E+i0cs`z}8u=p2 zUf^zcFj9*_5d;Z0^ksH{np6JD`X=ETvRp}_g>1Qouh}9WDMFf&?!rgcPu@x^lWB32 z&>UC%dzQfw!zL8B2`PY=$XvdH*?lFGP+eyJQm)E4zvP!@VY(nIcaf5Yj#z|2(jres z#W*ow7c-ZVaF0JwS4VyWX%4u9UOmf-(KX?Q0EnLmRX`6o?&v-IiMXviyMrREa_xt+77K5CF%EM0SkC=p*1{4>JbHcbx53ey zQ?AgT#_y~2pCX9hWf9LPzMYr+6vuT{!V~z{Jb{tgg$4_h*X4oI!Qo{)-y!0u8u0~^ zI0!R*3!mmyk55OU?O4d|BVYZ;N*Ro>xb8uD`Alk}@KPwPVh#d zCl{B5wjL@G@S=5z7u{Jenx;?%22Q9>K!j~XO{z`^v=ZR?d-|eANU|snyi;8K*tPU( za8`Ix7PGCCE{}21;UXq+Se53H1F{o3cEIqzW31Xbzck6m*|HxUq22`#++1G4fEN?d z%EW2L*EFVjtRNod^e?LB5aDp#O%)`WNd=8A9&-cYiQL8TZH=0Cx%&MX4rBPcLU43; zqpL#JQy3Uj2ubSasNe5LPx}s<%#Re0hbdhPjHp9B)u4@8nhfd_c0;SRB41z11b8I& zh9L1>S2A`pVRZ5(TMInvUnFoYPw|c`HW)_I@`2)L$>!#wOyX-YM@inNq-R5O%%mUe zt%7KGSyZR>X{rt65EWRAZfL*O08pkglU$Pc#bq*=DNz&Afl;;JPcytaEt825XuIn| zH3a}T$!eXl{rd+$j30g7ToljC7K7_#@$_OGNAta?{lgE7cJwF$X`utFsxt@vbhf*< zwR7I>!r$|55NQ@<*jn-m&3wcR1WI&2jMEfZf|jdTKrRP_Rel^7I_Gzy9v=*(#lb)u z;lQe&usSJ^TEMiBX9>&F9E~z^& zhu9@d=^&{_F_gq>Uo{|L1&8!B`h72Y(uBEYBxjE(ekEduu zOSXitym1NeE{+Z4?cH2FxF?&XFT+lcTPx{|6kh<#jftCgq z!twJFgm+%l^vBgGO$TsTN=g*7a1izjJS)?SPd`EF6?MA zBkJNiyt+oBqrX`Tm~4#_J#emzQ;m#F-O7}3aK&4CU9Qqn0Qnmri$@6ncwtVS4Y!G9 z?h{83vts^GEXUB`zAB>YB$?4ZufXW?1#jk4>;N){NnFu2DXiKm)tA1+mq4IS=Yv59 zt@V1*4C(`BiqZZyVMmAwZ9nO&ja97ChoUfv@UJr=NNGS+Si@)4ScwU7riEzd<%|Vt zTST&C)c_p$w;7Dv2*0saIZy-#=M_Q4BXUEH4wqE^OjFF(+ZHN`W$F3tjF92Y5>Gz1 z@RXA#HiOw2k$ofsM5&l8m(t17SX<-Lq{W82cwjBjdcsQpWk8z0>o{i{x2-6?DbjI; zw=M`kO*Fv1%;~n3ZrieSG_PPADbR#_abYaBLOqrx0t4&Jl0G8`z7T%kFQAD2ItcDM zhlYXd$eQ3{+KgQkRlvnrN-&m{(Z!OlrsC2gg{_G7CGf=-+VLUs=ZmCN_LgReqP>a- zWK?7xgb^uGKLiG~8R&*}eYOgQe=H!};9<7KBW#7w1N^e1mSfM*zb)fr8X)X2ofZrZ z%{+OGt%j2ZyxknE>gS4Ht_4W@FwxZAK`_f|O2zKuZOFFWpDYYpBb0ILZlgLc%jvpuVc^ImX{osZp4PlGV(m>w}^;w$R70m}g@c36zVx?N9VGtydJfV0Fl{$d2y`Bhom=4=Vrm-llny%g}sAS~~X7)vju6M}e}A<$tbF4?ptdLvn?IB?#l~!GqcSYJcaeM(Oai z76#|>H97`b(?b?+s29r6RDEtdcC<*TO@_(hot)PyOVUsdDB5PMX1FtoNgw2q1?g*P zPagMea)7ym37;Fc6#1Zc%836J5L`JLFG#1Mn(vSsA06Xhs2(Zw=uFJZ%$azj&@zWA z@%11_U)@*Mqu7eAuG2}HjHn~}LYx(NXckt67KX5>8J*&#hCc|)VG%LgBW)3zkV={8dWqg_5x-L2-|jF4SN=lB3!us#uR}?1 zig~if3Uy-^$Ubh|Yw^ccopOEDD#Hisc6a8+fPD#x9{T7aUL`d+3PWVfr+h153Y4?w zP?+4%w$h9)(QPKho4a(9l3s@~0j-f2iR0CJjOVo5lwFOM+~Ptx9*NbX@=Q<-AYZGL z%g8idVi!l{a)wxfM$k~b?`qna=XCKnPIiZ8zXG8R=v&#XH(pPOnSG8@&D@3!*x-c| zKI!v2zEXlyU&;0n&f)|CkH%jTWj0;ANvP=my&x^i8WXh-enVMGOa zXWc=uqWzDy+b>nT^{?$;U}M=aI}1r4P`%q9u(i{mhxBc>8V5s9qitWGjHZ7jDj5W` zh@&*mlX8Nrw4$yJ2AYo}d~vkcCz#&Ysw81S(Lt?{Oq7C~*8>#4utYiSPX;I#XEfKHHokx}3aO0h72Ww|Fg=&2gt{YD zxiz|R8Wn_mr8w=hX-yx2yh2u5^y^LWJRV&o?Iwsc8(O>H)FuxVHzGjvogrc6emow_ zn7bjYa=C1xbgM*Zx_qd#N2qnf-(tri*49t{e^9Kjdvb&Z^r`=lthhM65mp(hUcl{AjyQ zf~P^W+0HAJ!*cPzR#xM>YZ$Et)gWKPmR-y$NA;ghr^y(-O0%WjT9r4D)ost}uoD=I z)$t$kzRz*%43r}u|LN@K-E zg%W2eC<_hjbJf|t*IRwGkRHb@R5Da{)VLyJBtC>rW82__XI0Ozb+OfnSh#>5D9ob$ zAE513F^anGoRFFgN)q{?p&ecatBUoKGSRQ-3d}$?%ev7fICza%<2@J42Jdn}QHpN9 zLu8_Ql2l-hQL)Izh$9f)OI)+C`byOkZz+YY04;-SG>ENT`Pl_d>A<>QtF(!7Ug`N7 zv9uR`R<*Qh+;7#Od0-oHqm}3JWP*Y)+iR&NLqpwx|8{EwoG)f{`NwbV+9;!=t)T*t z2F9a6oTcZRtGe-RN7vjww_1gf$an&6+WobvV<~TU5%hRS0YW&Tg}*3)o$!hlPpKX| z4pR6dQ}2~|4C`0FgzU&CE~?KF&nxo6`)F6xNj*w&0AcYqImB}Ne_Id zwM^o&MW@csy~`u}^C)VnKLrWo>SF+m<7La1N*_eYPm2_IiaUM?+UNe9 zp>Z};;ySgL3KLvpw^jf#LGJ*xc~`>(7BNm{T%?8xEF^Axej|j64;kAQ5aMz#dc0#l zqF(JqJG=HnTrltqpa%D0kTqb77_p(;HKJPVZ}5aAU*ih**L`xKM?o;o=(~68ZK+oT zQV-2G8t(a}h_frfqJtI2ORsNrt?QQ}cW&HP9p63+Iu|oGi~ljkP9KWno`u$Z^EG5} zpl}khTC(uvQJ__XO)4ZZMc_SfJhonHECCzzV){m$QvdZ!xC{*xEgGv=4gpwYX#8kq zg@4@=D19;x8+5?QaC=Wo3mgMnxy7V8Jajl80XOH_NqByXZbX& zjujGRD-F^C;j)zYa<}nP1+-!lX4XXDfskEhIFN^ERYuEIiva%wN81TaGOOlE^W3vM zdxWmK5`|c(Hjg^Iv?n@%-gfejcse@T|&Y=rDZ zz8>LWhQ4n+O?o@t_~_{pN!p`R2W*=dp1W=dZJkr~B0c5Vy0RoeKqm8a)U^h5VliBVq^|DaVS{{Qy6!Ez)rnQ?-zvt7tZ@ywt-+D9qrX3messLr z>dVB%G{eWYtNW*X7e5Hb*&aE4I*_o~b+W8NcI#JhMXrl3ntM@8RcbQYuM;}A zvBuCo*l~nV?=s)eG|msnGS|FGTa;otQisT^u?ZmVF9Ni?0aVxTA3s;|fZ^JRhj)zA;Z0Ae-$X(UGjh8zC=c+zix9gOrn8J~3n11#?uhnqF}D`9qh<4E$sCGWQ!MyR<-(WxY`tsY&mSe-R*ANSu& zCj!fzc4}Hkfpw(1+pyf%by!Wuui9nlTfNg^juP_1;L>!(7ygx`I zcw3jE+LUL?+?SY6^w?ZMTnQ<8mDsN0eKJ~3I9J(`SQ?Q9M^+Tq?6}G%w5*yTmqT>R zSAM`w1V?w2GD7mjU9pSIikV0k57E;S{ye2CA%-0> zfDo5tw63EyN`?q^HK-o}A#Z+m^PPrG6sZ)%r&%oo}_SMYT%RhKut4NQ9`T+$;=rAHfg1Mj=!TVY$z9ZBz z?mFiF*K>2(j&^n*M~`=RT5v9Yz!yr}e3A5+E|GSfTcmZcRgb*`Q6H7yZ3Hlrnlx<*|Wm#rheVfG2!eIYz_ z-HV^IHdI|rw_6eQWG{k}A6VUYdd8C-ZUr79#UmfphvtQx!ATRy8%V>s9^hW1gK}Hg zPCGD7%I6>dlEul*X7@d8DyKERofebpC5{7a9TVkXcFhqu4VP%{Q|%xnwV1`vokG}VwpyXL+sR+Cvo=XXZs&i!SOHNQ0XziYG- zG$*_|r5ih8PLIz0|*ty}5>E7Ag+_JbIDk;a=>rT>Xis|xz70Ql? zsMvT%Ty4cf*!@+^et1ehz>3GN$P7-bHE_7nA=&GEWvB6sZ}+59__(ss3Nt;p1KN7g z7him_;S!VX6V2EZmAs$36jdcZttKi;{=ga?MKbqHT6|FS@F!==!0|3jDm-A$PtJEO zidslCGkGV;Mtw^05dcUAs}7EDNu5}*$iNg>Pced8b<@*1llvRij%hAdorm1|l$V?Vvg^u{S?CqN!58D|I-C4>osFv>$JbTXZlDYA zcA2SY&80h&XG&>)Rh8A(OCCiFdQDYB)FaH~9MXK6AJ4G}DQ^=i0D-5MY^WQ!mAB0Y zy^V%DvnGU@AHl3{S!9cLWaMMvifxCK=}@?$xkBI`Fygs&iuUH+nwf|}v!(B8|7f49 z)ReY#OtV`_S2hE5L(dGhyuKH-Pi|r<0qvN=962}MQ}xk44y_tEjARV^EWhv?n_rnr z9j{+XTnN-4Aw+7O;WcC9Zcm4B-BI|B0el54-gv9;*nyt(OmFE;E00hQM%HWKOZD()fWVk3!bXB0`#syzngaPjOKrU_K zrD&64qfbJYCGvO-gukX};53#;Aq=hbIBRu2gYEOPs!L8T#{bMV`}CgDJK+29dkFcw?er$Dc$<8sZrIRnV7A|Oyx)t3 zZ;MVX;AK*+k-8cYYacG~qz5u1ZWg@ya>@HSIUS{)MPqYznN zUr^3Dt5h0=YgK3FsH`?%Kan~LZ$_s^(hy}NP_}Ozjz>hg`;jy4vRctp*NIoz`1;2v ztMFg??(3Q!LMaL zkZjk*y-N8!ihTEkojFYoj=qz-2oD)F1j_zV$rpYSIHP?>*>ahZtnA;IOpp5Q1q?HI z9EeG~=)V+&wj$(ef!@@`F1`(t~q2MzBt$X9GHF(v)Vt5}eeJz7*$@YT4q+FXX z2-YVzFAJmn_@Az*ZIh1nb5gplqXM<1$gfQayL0CG-f53KY!n2Vf3>0G?L83Tl*ir| zU3lEa@ylbZzfBL>U67sxfymmH} zUdxzOcd@g-)Yq}io;`_J(@oM_tC&zDK>6IxQdH-qRfvf?qCquRKFQMwa zsP%XUHTy`*@B^`mKWQ!C@7>lf4GXw#I7m;?ZhWGnuzJQ~Ay=T~E zbPHYQG$hFN45moN-iSHJbisk;$*jo@1t9nxD!13>9Y^InP;M!W=Ua@ORCDqRtFvph z^x@0#`SeTG4^*|2Rt>T^O<8Vs>(l{p^|#lrM5Z1Wqj`L3xy_DoswzxA#|bC+&MBYo zw_3f3gGIrnSMyVLklJ~H5f~|HS$DN;2_5N2nD!3C>x$qqX2l%aO`&{_(;&e>iKT^& z*Bbhgqcu$HhunHpKQ)+vt7#>z09wpbXFBTO-)+9ZSfxL36$Dn%Jb6EVg&|3g2+6eJ z)0an43kKqbSHN_w@eCEHi@B7etkW_p60nH_aaCz)+meYfhMvEG*#Ncfn>p6|S1Xap zLsvThb6Rs~#t@1`ZY!d|nYvtbHFuuaWZ$4pVQ9|ssNqG*1^jTG717K9eXOkTC+7aN zj!q9>J6MzB;aQ%kB?mj*lU7evf?rQtj`T0lAVuOe*J2(6Te%_C#pxz*q%^m%(Xgec zF|hoOT*g#6OE-y3&L0=;!~_iG5U<)8l1soF*V8M-_j1F}icPhSfe-8Mf9}8=2K|7p zgKyF?9yEz*_b4upZCw+ye>v-BLTjiBu?zLtnEEsvhv@XCYhQg<#|d5I zSFJm(ID%i`{WN=4jF%F^%+5W=S|9)rQeNBa#HR)3E8H@%l@-)sHGhZLnXMP?u!zof^g_ogr2#|3)nIt5l+Tr6l z_Btm@i06E}J5NUov<9+*|J{qyqpI=&wjJqIjjbQX_`fav5B|^B>cMfjN(LO@UDa24 zwmazx|pE?I}^XCc#H_4zqs7-~>Z6~1m#Ll6ZO z;>)DvuWafjrpXZ`W{`;RhsVZMmsw@Tf4hkkKq$N*xlWE=J(Q8sWZF)jq}l- zblZx8F-7NIo2?l*44$dhWS@)~?DnGF-5P1YQ>&xRBtW%yo;7O)ngvGJ=h8h$k;}ew zbn`01L;rB+9|=;jv1^tg;bq_9U>n*j+kC|7Z%5tMhV6;zXyx4Jl4h&1EbbzmfKzE- zJ8pF`A?gkpC!^8Z)=pEribhc4wziRftIs*f4BnVY!jTmN!C*!P74eDF4UooK9t}8m z$9CgU_Jzq@Abwc598~&*Vlh`SSLbvZD=ep?28BdFIvAlEja;M72zvI%EtNsyK>rz`L>}q#4261TUG+Y znRsvJg@lKDyyL%+5OKQ=v{lzbym^KBy?)5s4$HFX);G*BcY<1RU{Y=AJCrpG%7W5v z`%$ZK0X3YvS7|7fDF){V?sTwE*Io3)aCCr158DYzvA(*nN%ZI2+*MH-%n;xBUN(U; zluvCd`mEZE=uTZpr=500*(R88bWuUn0IU{uX45E7P_apf40QB{>0KC}>LxKg{KsQ@ z_7Bbc_zwjNSs|aSImUS1Vj8?@0=Nd41&A(QYH%b~;nH@mx$$w#vb(0T5YBI8&khq_ z+LP)=wQ{o}m&K~SY&O`|4>{7^*=OVPJ^m_jOVbZK!-qeLb~{46-H(Kqer)|;VNguP z9|`j&xTro3ruvwbc|Y))m-qd^5AcYOUemvk`3HY~4Kf!VebaS?r8PR184Ft<=JNj* zfXRq2`kdz=ZL%%35KY#prmR^)` zx%`|<_OIsC?CEe2an2O$a!3o`V@`k$vbXZ}fUhWS7}rkfmbz`4*clw8L;XAT>w!}l zd%2-(E>|#?eN?kT10Jmq;xW4$#;h$$n7FZjQiVCf%G}=11WKtV+8vbRsX7StU0)KX z7f+t3x{svRu^e+c7`tr>g4~$oQfwy>MNCcs2+P%0O!7F2dl$XVB)^D8y>V}Md%N4) z+1~b57IG92TD?ujz{0-R-tbHSt+f56b=Iywi`p0UXJ>6p1`IGRFbHXTgg?gk4|EmH zTL5MCYmoL1zHBmza;U|X>+37fgl0y+8!;Q<1(%MlvjnpM%!^Tx*;>=fWR7VrlNEuw z+&iTJ=kZVSY$_XKQI3+N77y1`q2P*ay7#Evjjt%=<~7psB<*2iz;yUkOUYoz|D_U+ zW3?aC3p$QM_krn@7Xg<+?9@Rt26=9@wzivb{mxMxwfd5^ZV(PXH*);&!c}{OlqW=p z&7|Z}l8qhxgXvrUlyKE{ODoe2dntv14VgGSUSOm@lZwVq?~0Kl$j*xcxQorXjw;@` z&wZO@GuYoOnCvZQqM+R^uA1RB z2-yvBti@#r+UgquzY)5=t{t(Pw9Nveb9QsC>gq82Hc2?A_CWaax>i>q0=_EH#J6h; zTnw6CFXq^i47pz>ml)=%biz;*ve~XIi#nXoeqL()SP{h7S$M9Jabte2G}jT9FlFZ= zC#^5AILt^&tB{lGV)7`A*d?l#sN{%bxlayWgMRFD2q(v#& z*OK=$3UeM`s4Torb}<5WkxVeREoH4z!7day*znO%v>!z$39p-Q${b758nVv}fTZ$x zZG=Vv=+Rl^8n77o+nL9Q!zZT)&oDWUIR93Q%S&Q11c+H;#g3jS)dKul`S@9f#sCd~mR_PDS})83}l zP~}{qZy@A;f~5K)xmaA9fEy~&1R|Gi@C7cP!aA+jWE9cT_bpV0%r-gFiuFont=0K# z-1}_IPI@*cP_13xTOd}TQ(7B%7!;HU z1Qb-D5_1rKb14_M$hO7{x=U5QD)p?S5t-rL7UeajT(?4k0>8|QoYG`7Z+y>L+f_(W zn!q^ADoSnI9w(!M1B+rDj53{)c7sNa$-9LQAw}VejmvbtRLlqF6OL7FfH{j$ zK_ES-_#W}G|JX{5N*8xI87*=6k%RK`8N0XIcW6*jMKWb)?W&jc=6h7PqYRay5NT~p zh8cK5*<25(qfYK4>80c?c4tc7Ys3-Mo`K|)y1h!X1XimnCBlpFxq?R`Y9ns;jNtE` z2Sj*(0B*9YI(ACmNnNKh0Mdy<-oBbB)M=R38%`3~Hm->vP=@#@7$goe={g39 zW)w0hOxa{ifFUs`AW~%o!`(vq9+gE^ZDF7n*xbmI=U#|-H3jSZog0#`PrFeD3*Mt% zMY>vR<4pV+k?y%sn_(*B1alf|Wda(7RVuNjWUd`^fZ)gdFNqO=Op>MlOd_g>sWvl| zCpgfs9#FNc(BVZ;ezv!Jj$2&kaWDGPULX<;2D&jH01FvicW4BzjSBabqME@vf-a3S zWMn8PX&&`ue;YbSpa5txqe+SgB<9%kNJmF)*m_*=ED|qu6dmta+THSOv?e8{Mz0o_ z^%W7T@z@UyW=ooTB-67M?R3xhSvXqYnFAk@cOFLB{Gv0z=tT`UBPdm{drn3A*Vk=( zBV<@^6w6I|>6NdOvHVaR7je)Xh3wU(g`c=4iZ8`gHbHDO-MB= zH7o^HDBG1A=BJGdu1%@^$WG}N4iZJ)Mk`x5&M<^olE>K`Q@cuC^jTCreRcHaaPZ>j zm(jtSzemrHUmQlyzdd;K&EZKeI{fS5o9KUkcXA5PU%x(lb9xdTzl)x| zI(YLJf&xXJ9iD!F2&GQHJ&fKQ{_T{W1E?1YFur(x@ak1`dK|s{?#=V)=*`IyH1hqs zgST%F-}S8SyvCNE9Y(K@;pfrei{HVA!65q_kYKzYT&}xaLm9JpfH3y#jZaaRp*mf@W;yiGzUf;*+*mKb)lX{T)3CO6q5q1Kicc(oGufn_vK z$D}ZVjYvXM7mHH%7R-9;M?j|!`9xXWZc^5T_t!fo8lwdXj1$(;h-_^;-8y&h`iWx; zav-K3+9me)0~EBz7N=os_<>^=#xhtnkd?#44~AYsM$`0O<{fV)n&#d9D0$m|u7oEf zy(e0JY5=B7hUFssG<#|Yz7&ffr&5wYNNWjOx-31~Vyh&lY@~A3;KPIn7f?st^t7JX zT=J=$EnMW<PZf%nYhNzk&{R zM)+^DN5(NUS*GKpa`b4o8c0O-H@fG4&{&3t-3t?*Gp!9omF9?vS9CLyRo~%>rsHLBcG^8jgz6Ec zAgwJbaf&7bFA~V%TqTC!nSe#(>OuuzEH|?#F_b1yq*-bZ&VJ7YzG35eHq;t-e3!6TUuJNE-Buy2Lua z=+7?(sKfO|S32D2x3wd`IpqYBfmbnXBX}K29KUAJF*6Z5RffZ^S7Z{WnJ(eF);x&* z&1Lj1zsRri;ubb|T2OTGVWTlq4x~C*)79dF(1n{sx%^zVCfQRN+JA@zlcBUE_+7;jeMF)lWixdJEYR3A zUh=iY;dExSihSf8v)kh6Dj8iXMMsuQ=38X~Crsps9xzNXe~Q;swZ!b~ad4T#&T;sD zMx6J@Hr(~Rr_!zExaCR?zKR}BSN4BBZ-@mQW{4Y;Gku_*;l)J#?J_y(`} zGUC(D8;k)MC`T$CB{1o?`X2-3}G^QRk-%`ttvX~m$@>Xh33=5^+m%fMVVfvWbaB4MZCVdTNuh~cCcg7!s2z& zUPN)U;2S!A`hJiM>n~3jEppEV5t1q_y677EZ)$7)VersRu>~8n4YA^cg%P${)1%G$H z`r{Xmzx?9MuN?XO@TWz36K6HV@-|$5H^dcEbsq%G-}r~ zl|>BK>)$x<_b5=hedmcsMYG)ii?8BKC_r(sH$5;|tKUsX_3XJ8HmxXehbmvv_j{e~ zo!!U%e!m-aFqs!1EZXk&_#%97hi<<2{7ls@uOY;=g#KC|*a5}BHfy{d!C!GY38ea|u{Uk@rwE@k}pvXy?G9Fm57ecnTbU=m*UL5dHP-Q6k&Pa(C zJ#l*XgDm6Q|Eew{ucWdvp>1iz!IYgiuuf1+)JUZli@7y?xeC-*4^A*J%R}SM@#*0n zle12W89l`H_)x*nTUmH>m6&f|+xs6tL+9y2c~U1p_$jHE;#`UAF>0aGk=h!2oC=CE zgIcr5l+=?r^^A^$0>#3rg0ZACG_%iQ%y)wJHP&9PB9$3ve=io)1DJ#YC(RSWv@c8) zUtE;QO-k|6Pyrmjx732dyIWYPMNB>C9#{NmU^Dt zV)3RN17frb%xYXAC3jj6YnjR|#(1_@yX|m0P&@ZY``&@p<(jIDcYwi*6Bl|7pHkCf zi_hTbb}d-C!0#`!_%amF@U=GJPxBk#aI_5Nc6~O!kewCHGp{IaD{jA{vQAyyQG7vx zB1o6Vrhk3X@ePN%1F&Y{J)K}Ei3{!yJvjl-3kTXbt?+GAz(bfc4b_{g0W~h;Qqf9g z?omi#ieLcYdX`+{Le6s%KtqmT#D8l@)Lr6uvw*bvJ26C&TV^bStCn>~82p*^nt)Ss zYv^%GNu>vf5*+go7Pk z#TDK3Se1KGE7W#vnbzC1eg(U~iHKp#|Kbrk$v1Hb6|n-HzLagRI^iM_Bqg0zI8+r| zJEG6@(uf?+8CK5E5{*i=@zyp`nB*LY4(AeAkBa6(8}#I0sP}q6l-+foM5&ix}qQ^T%FS{h7oVXWB zR@`=N5NLGDAatHPJJS-Uxwx<`wYeVl6)IW@(yio7D#ZUR9$m+mjFr`qcI|N;F)(E& zMn>b4oD@sxWXYCc(g5A|qa>shyjPeJys|__1J+7ZJrT2O>N7%3twaSPmy%0UnXo`) zqu3&rWAw4PO>sd1sf>$+{Zv#aZRr$d5242U-YCg^F|AZ0@z@S`t1MB;3I=7kVo_mi zM+(~$((c&1hdB{&gj_nTxp_mCb8Rgtt$l{rihT8!om!ptnc=X@sr@i{Kss?ve5xyL zI<&}@-7Lncim#G*%yD|-47E^LTU%yWQvH4UyU^#u{S2%VqwC?q4EDa`LUDC2t?wL{hvmLxW zkR0ZeQ`mXe60v^04#!ilevp8LDI#s@%Ebw@S=m_HCPAcAs_*blcO|$=0W6m=Pa&SI z>fm{D*mO>*;r-DEAwG!oz(e$-y_czYUgR7xWRrHy-qoYI91{c1x?jx_?B2r!iD*&a0Pb)GDw1}F0Q=XhnV_Op?y zb{9cKG}9OdP^snQj!?a^tYT!ZWA`DW-nQXQ;yJX5;x(`sKDDw$NPL4(@)C;}XC%sC zRm`*qkWQyCfiQpB@@w|SMoF;-<yE#+74 zALG4Jd~nx?c7kLd{Me`J7Ej*uc`}{R{R$8<4!#CVLSUQYrv-?H7_L>SO6G=eepME? zZi1*&>oBh`XYxYM#BdUxQ{qdi=_(0a4m)(9Vhjrk1SDxoR`K6{U50RMwI=ym;v1ml z(-B_(A^}u7WU!_FvndhrSG`1cf|~l8ZP-i!j~_TS17S;$mn0?#s=1I32)WHB`C-=& z`@{Oo#dL~mIuV_ptM6PD__KNZrU)6bxtm}^huG9#{ZbBm#mI>$;3EGG6Psu?{Y z34;@|NP|AnSnlPe&zfq!oBw9(o=DvACFeyiYH|30mW+;q21Iv=8c;i2*DUhR02v|I zsBl65e#A4%!B0cLr-?HqCdiv@z1PGn%EVg1nk}qjT`N4eG(=h*{##ZUQ#c4H!exUa z3fOpJh&=}W)LZa(awan?NSiE~6>Jc|P4*n341p6CZTh>S>ClnJ#<@MVo^1pZqzY=i zc|z`KoW5%ls^FnhL4QND^y={^Se|R1b7x&32WfIHY$$CF$s#tj_*b{x$W5F!O{u%I z<@pVU^>lYy&v#hM4P?{2hS#s(dsw^8>-HYk?56AWe%ERP!arhM2AEf0iw+^7!L11* z!>Oul-#B*E-Jx$oqQlX7&JaDeXy32dleji7HO(ZFct?*)@9xgwHxQUl%L5-oL`K8l z_v52Hb~XAZjeJ4ldF5%qqf2D8)W-oI)CW*vO;@0Vnn^>mt;FNSWW#1@LsunF5~zK& zS;JgF=%ea)YISX1M^vo2V5+Z_{iwC>V~xmlPTFe-`>y(*+IqMvpzt!{C%5Vi_Cl>`gmz?Kqx{&4GODY0DyH6A5pF z6E--!`cjNG{LdeFdhpzc7G@qTh^ox1lqXDby%UneyY*cubT zqAMdP*K=A3!mVt$J-%NEfhP!OPzFO2QK=9#vYHE`MZ@TGnP6wAz(6NcY#t>R36F`; zd`W?qFfe`9XB%5ITIs;!;9*R;{DkUMtLo5DLbd2cbG-qMkv6@0O@#t))uBt%aXC)P zWc(r>%^Sjd3l+aiCq)whD_r}Y{OLb~^ZpTJtEU|8v#q{|OKwEu772U^p)2^C61(oX zNARI?a;=~VGI~n5{HP-&k8M`WFcf{qzv}fr!YKceEI%d!)cWOXde*RnHJG)_7(Z*5 zGJfu|oOQhqT++JU9hSAOdxxd%ZBYNQYuMk>@B`~(Fi9y(@~FtNM9iti$xn-2F5ro6 zu`ZV4^)`OX6*}FobuqGtQNFvFCuhz)s7sz27#am{Jp%0wKzPTXs_$OGUqxJQ2@KhV zr|7foUbJlo0>-w*O9&HWX=G$eBg(=o-NF^D$@B0jF&*X8-QN2k5$_0h?R+?ty= zoU~lsm)Bacp@y$L2y1Tig!()-9BEcmb1Sgh(7wg9x!?7ZJeMT5L@a7^^#Ds*)o-G% zGelZbT*_v-OZC?}c`HkZJ2@-j$3Bfei>(tZDc+hkiwA;iJG6~uD%PXXy}=G)mcs7xx1Dpbmu+m7cZ|RW+|clPnt;{R zL=s+7Cv3E5)Z2}_8tG3OWCVKvp@A#Dr`ONuEhXG(Lwa={TNq zOsX*&h`!e2M{`edP;rxQUlgzrP(70xHXmy=X_n(g(O~)kgn%Sb`Ih!ukw1O#$o77O z$wc4Bt%#C}Yuj|a3CzmkCLMb=vk{yBGd!9P4Cki(`G^L%;ja;{>mW)lez^yagRPGg zD3yqBp>%&=b3Q5;h}6Ks9yq9)OeT2rxxwj_r~zXiZ>K2cRI?-*!v>DVyX1=wh)%1y zcv2#bNE|xf$BrL60IyJdsQ_PF+&nsAzEtsv0Ct7@g+h?F@U3(QNy>B}E{lbvuu_2p zmQoKupBB`W8*)3fP(Mk?0j7tw-OD=}5j%!)+yROPgXde3_ri&(9G)=rOw3_~7fGe# zx9~=cu~!^MLa|w_MHa)NbbH4`B+TnkdQ;ZuQW8b%6g^94{lN_!%+RUULs_kcX=cS} zZBFfb1ERvut?DscZ@*euHfUpVLqq@qcQQv&|QNU z-iSkwolRLA_ljGLFM{(mZhUAS@8!$U|i_bA}aDrtpVtB8illE|^Xu%3M)3JgdQRtbm!zJt<(a48GrnAF*jO?uI zjD@}Yhqk9ZalBcUj?%fDoGT7V1^YTW`4dkp>W=}V1<)w!K$l)n5kxk}E1;IXhv~zZxQuVy7xfS&mV#G7O`y%E zI+Y(#L4$Rok%;dmwc>c?n~-KmrO;F@z>4->?YVOjS>e`db7{cZt+kQXDr;`+E&>e# zSt3=cm=lz#isMdD$GvrCpx9^zveVH8}Zvs1F3m4irhdLvdFP&kmJc=M=V5 zZB#eW!pz$a#nkh0GzD_lNB~296#7JR2*xdKc_n=!AsBVWJ-&TNIpd=dby+;&AWM|8 z4SN*S!>Hsc0Gx8GXyq2>WsxA(%{i?t^!1&(nlQXT`L%*gCi;pQGOrl|Rj|`E zNQ%?=y$TgLczy7%ho}hk##5$#)CwZlir~?M@aA*c z3cf+zC|%+VYeX}B)ivM+W>kkbStFp6k}405w*LltbXlzE_4W#b~4&J@$P7XpI` z`kG)f?Wp~b=ipJ){zv;^2jFedgOI|wUWa>wfg3gn@4X2&+#3JDPXI`m8~x)Sf%57j zjfP+PFxHjgey=O_fk5?#k+E7aad&Ctu2RNbr!eZM|}emgHpc>k#uEq=?Qnwj`^zkN*Y;Pn}-p(SySbsQq+mD z$Vc^lbbH*LkTATHd~ z(o$rzikRT4k{=kq^LDJliHVTwzg`(&Ok#ia=jl94I`ugDEY|`Me;_RiN6CY@rL~Ic zBvhb{(+ZWWsK1=X<0QJwiW1}BMwk|xt-k19uv$>C;$=}@_cu&}^9I^HswgDU_uS_3 zBszvRUzj#uW1HWoHcz)5o)OCC_CtV2yC8${k-6-qOWmnh9bj_oGYIifG|P z^{rO_$0E%+?j{~WdeLB#A+yUnP}8xA`c1I-4;L&d80P3|bNya(0NI=ZU1D7jyJ!l}yid!fSyWKyNvd}?!@u^+Z3m^t94X6cYPw!I$XrM2@ z2} zU)iTQU2CdXtvKlk$YlC1Trw8pO3V_6t?OI@^#LLLUvW?y$sT8CZEUN3-iyxK*cN}o zR`?sjm$&@KYNUPc@nHc5e1$;4UjhVw2@F2Re;g1EtG3a5*YOcQn{T?a+dQLt{@X_I zKWHNWo?Lf=hS{VS*8PrHsGOiWCY~4Nx{Pq&BzZywm9ZQ~>qMBilKs1QX6<$o3pA*y zR9lwZy@J;>i>Eex25-zS*#v|HX)IV-$=}q~z6Gx~Xxn@vlo_L^%zUKpj#%v;wN0uF zX+=k=W;B_McN^?Dvqg?d9-yS-3FX=CwEDfT_dehH-T!L&cMr@TsSsA{GYPctu+yVs z*8l3sX)D3w(Fj%p{J4nGqXjF>7iez$yN#J(8zCcSBB=O9|Ikg)lK@yir@ufeRJw_a z@eI1BER=QKCwE|B`-+Zy;hy!Lj$jSvlo}7KkxgKEiwf0=fnW{5;wqs=o%ouAK|CI7 zKT49v8kZ%;;v&|n50sB0G?Ai}x~26DN`gDc$HP8m2}rFJC$t+oeA>X5Od1s@=CNeK zSDYb!SfO|$D`zv>zAO`Rld}~T(CbzY^Jn@Gf9Ku*T_qq?;oaf4_@#&Cv$0=DVtQP0 z5su_RtvW_C^m;RzcN$~s9D0Q0+{1t94SxBZo1$bm?DzY?WZ3SI0!M2+8^mMrGNN{(|AA}d{D)}bD(8+^zrfd|& z@d4ZQ>vrvIOC|>vWl^xYx+2>ipOauHhZ!6JgfsBgj1?qWK_BAve zTh5Z`vnt@nhjDB1t@LPRY@ZX#Yx+Gm+G9~HOKy^Ef43XNshbmC9s+CYoLMZ>T)Hz) zE$@k`k~b_mOYYKGGbvSzi#t=&mZqd$ zaCa878VZVr(eRt8=eK#jpLs@{z%&E$`vZzuasp^4>q+W@$3^aE?(dU}{6+`&x!$(| z>m4MFJJ0z;YrV&)5Ul7TRVV0%0*~Fy-L~{dB_2iAACM?fw${-WNVKFh;vnycD3r3& zF^+b(bcP)TbH12iis1@Q&>4H142S=kra7ILenC-H!C=RVGPzt}K`X!mUI!x-OM=p! zkfRa+MI7Vt8ll+au_eQL*vUn4f;YFN{j|&0ltxnZC!cyv#dAQ*eASS6uoP%| z<=73Jos~e2^TdY{lH&u&&>2%%8HLU)TKkq-lx$S6tQM-+)3lc9Gl{2POZLO6mgqj* za+32sY>Wh)P8U;4Cxo>Olwveml;lTJ^~Ey?RTNepQprRk*1NZ5YP+cUodC-FH&5Q( zB|OECk$AkoJO2Ho@LgKJT{;TUle4{@bIixsQ7!bEczy>P(c9YD&fYnE=h1Y#XM4Nn zYvsta&gp@32*a*=sA*F_P7YULD-X;s*^ugFJXm8H5C$ zVGRx7R@{2q^3_Ar=%Y2A3{r`Uw%XgB^B{HNXB~wGCe|vnwQmF1=u)DVm~_PAk8G^V zsO<}8oy=qWVx{%H|sxCe5a z0jspvyggW0G!7Zn*W?`rzm45NPO{x?`Ixp^3xwU9#@C5Tu}StW!ALPE$45`su6BXb zkuy;pHpmn^A?JtnY`}qC=aUwO!`=6$V8uw}d=u)wg~|^e1c22#CX7a7b*TGcZ8b3t zYGXq<;S?@Y*Q~{&*+mm8T~s%CsD`)D~_-Dat#azP6>g^HFA%z_~S_6DPMD&~L=0A=A7&ku$R5$NGV$T1uig6s5 zzs>8fKCj2+>IHpIv-{hM{*Rk^#?3zhD;lQf&U60zRVx~u(|?=UUwvi~&1)`d?`MX8 zTh;$@bI-W>ePC6mWM&k|VzOqw|GjEOzbWPi`LbzVbw{y~YnmZ_f~gDi=mBdIQq>n- z5)}#P4_l^VH0{2OM@x0rQ(*}De4fUcWhXxvTqbi&sz6ok28d|p2|**nNvv&Kruw>_ z_GdaynGiXFxX6+=OtPG=B-So`L%SNXDYb{II}?tA@8FJo0ng6q=4zb0M>`y7HJ*n| znY?fy7*HEp@_eJ!UBy{`zT%Q458iK_O?%PGYMp8AZpO6NL#wHC`w|MC)u8!{J0k0ZjkqX0d*#rLFOq>wl%uYiQ-PzQD-|E#%7mM8iKx6wC(Avt5aof*AP>shDvK( zLPF!B;X2Dz2kPsr;SfktBXPyGR`|xrKn+|ydHpr_O~xvX7NyNO#9mW5SH$Hdu48t~ z@$PKvP6O^vM_DSM^C5L2yu+IhEaI#3fbU3R2=z#u1~j+w;90ODKcfWnNRnG%UW?t; zdti}g%V-Ce@va2oGZFU1W)R4w^RMk+{2JM}< zRby&2YvLW;<>TV&OTHXyw_U~k19pxAa@bWuf<+RR^7NtHyb*SG&o@x?p$)&@JaC8E zr~9?W&{4QSj27&ZqCL!#`8$(|aM)9^C(%ChAj_0Jx0vVq@ibvEVl84T?1I4FS?Jf1 zN`%Aq!!{HcUBzWQnu~2{UTa}ERB@V20~~%C8R>9{+Pud0vH4<}&gZzCIUhu&V=StX zV*K^trtW8R$rq6{Zb+EFltQ8Id(n;@gmzlkK{6bqQu$(9p_TPkt6s7yMpZJ(3qNaS zLrW__hhf#i_8_8~U1%IdvDa6uy5=s-s_jO;C#M-;4k(?h7Cuj;ltd~h7IWn8g)sH- zk>YDa*JMF=Oytk4Tp^Tuk^w);7U&E}jx;l4r_9YX*&!a!rfz0!^DP7IP&Zprap42vq^pWrnd;p?53YHmXqgO(>9uZ?z<2)S8A%Z7DoGa`}pz0sgU)SZI$`Cy26edS; zA?k(lf*b$dF1y*-oglHR>CTK-ja7?C7@C-)v<`<9SpkJCay^StfE8*~Brx|P5!#Ms za{DWuW>V1)SxhN z@Zw7h`dMFHdQq)p5q7d@O0;EqjLT{u43qLjTLWBom~qDH0OA)P0LsIY4NQB7Tj08( z0dC3w)hx>NO|tm1magnqo17C0rH^e|Ve~00ZIRd@i&1xs-GqWTOW^bX;~n@S zxJp&CZ$xdY8vG1Zf?-Xe2DJBcq^-hh2MyBF<`$Olbap%T``p(vQ40rQcr&)>#wl;b z7o%ur_i^-o`OoN&f7*6UotnHaU$c+D!UkqS!q9iyot@rJH&7H0X}Yj**pVMdy#eTB z0Q!Xo)C4&owa|D^M^HD_JDBzdcKzs!ZZGO!P|&>{++MT2FGF3dH~a@^_>Y^729USm zXm)lGN4|#sgT@23y#eh!-fToWUt;55eN^LL)*AoHA(>Ni5UZ|=+nmFZ#gr&wycn?` zge^ofyHWWZwxSV;g~il+%+X6MMy0|!ONawYTVZc1!+!L(6rokpb~*6^oai^h;q4gs zh!N0w(oc^)LBSRy_z9N9qwZ6M;V1di&J)DW)7}$6&eLwo)|R3>KH{X0Sjtr(19m(n z{-2DiUKHyFl5q<)tJ18h&G}GJL(=l6&S}lB*N+a+A0#g%w~SnbSg0cn58Lp&lW9}sbh)OJgF+m|%hp}hTt11blyiw-;-33q~96WpeqTlc1gspHf#=Rya z7x}_WqZF`eTi#08C}2QOt?iZq6sZCQFpxZ!phl6&k=y+%TotC_45>?zpU1w zKF6lDD#dcqA~NNCdN7*Bh|{W2Ple(qn5;XoGWZgd)X$$&mq@+gp1Ife9NZV=DJ7!8 zS2W(lzvRt-FL|jXZxHKv5i~L>)r6bG`3{GusF_^i@y+kEYu?xo# z)a#ZMS_*l{C@U(XQ83Bdg2M^~TSN>=#9<424lFb8zeSV!pA$`LFi3uCHpNLNd{u<20^fz{!ey`x zE?~`S44b+nd|yC+5Cpo?enw};6`gDs?d9p04_!*iK4&8*Pu3c?;}o(t#r}TeYG4=! z9Qm%Ax43j1GE6B~&5G@HwXc1goa!InZ#5GPWDaw8;-?*4c`oN9^|TfJv`BHSB%F7Y zxG{%qiQ-GtxuU%mzEvvS=$k@nQUpqiw$eN!^u*4b|ep*%-O=mf$QhL#~cDA=0@9*lnLTx)>Y0aRnYtc$z zZ?I_5;~-6&MtFhOmMtLb6!B!yZsn1!){F1AAGAaIFHB+gVlkabX;NIsg`_;1#AyaH z7q!Ha4iqaYj>1hsT@WtN=4y#=omhm%Vr9yvJ=UthlsIrILn29Hn-H-~&(5c*LNBoa zWofsBW5OIl|A$sA9kb$U8QsQ9$9xSC91L)!SF;MXR1tBi9&Wty@Yrqv;h=1ZH(FkF zco9K7K_V1-NcnGCk5(h<62NT(sEnKN*hZR<(-9}q)_IoHjg7J~!Zv(L;^BSGJtg;O zqm|TM09xbgW~YOSvKz55#+N!rcg6Eyhq`q#o?fXUf7J zt2OU6!FFt26Pyy&1t^^H&ZhIZ$~qFHeyuLv;>t(kaFP>q9XR=a2U4*+6seXCWOc|+ zz7&i(gIA#mN-*c*3-?WH5P>mZk*zGfR!1oW$vPT)I#dEQv~h#8L5LvOJ)a6H#U0rO zR?Di-Q|ZR2ki5WqFtCo`uBUL;RUuE9oylu!YDr&6`M_yvMKxyUeedAul9(TMZaB0_ zhqXE+?DTZVQMCr--q>PSxCDqf*V%Bp(rDjc2j?Ic1KG&+8DxOVyU6?e+Ou_0AMPHe zp)o-EdS7g}+o7}3B1bKq7-L+9{N_PG2vyX6-HjEu8fs3mB9E6t)1QaW57-@{%T89Y%L@aMlc3DAS1liOCp}%weDvoFb~Ai z*cb#S;=e)_r)fp!R5-no@H?=HKzcv7^C_O;sXY{NF zS!Sc&;7W1~lA@RE@8!YKt8iLka})H~zXG4ah)}vW z9XpV%f>p-1IyDb_cyT&+_6(93XebFNQf!y){tDw)I}Z&XNSifcET-&}NI}_Kpcvj+ zq%%3q_DlNJ>2fG=8k1`zmv*L&Lrf_&ciEKjDRyD9Hm#OM0~*841o~+XGR3 z_a*9H%X( ztQN|hqzbJ{HiU9%nlF-Cx0->5DoDy9#1v-8g+H89$XFGckygqd0f_WGNL>Cr;wPN- z)3~|h$t~;r;_{jUnWJ@erk+Cy2U(_yH2?>% z)2WX&w+cufwO^fe&S4v-tF_=0T}vCQpl<-#g39<^-RB^wuV|tHJgO!4m2Ps?2#E4caBkx2 zu%Y8`yiOnw-`j)^a{WFfm(glVePbx@89fEM$T2Xiq_lHm?y35c8^>;2DJVr694jwE zj>FHeRn&rXuCG$@;9*Dns@b$@SjSk?W+b*kT$<`l2E+oK5Mtn8MUNut?q1~YiC;+t9Nz()Zq4|FD9c(1GAi;nIZr@YAfZ*6BL`!@UCOg2FYkoJq?7g z0J|KDBs}4r+Tlu1R6~z`Zmz1))~$u*w>lE+M?)C@m4=1xQZe<2%U}!=A@+xHdFgER zY(%3syG~1mddH{)AtO<~I777a>QLFMO;J`xD1Lg1X*I))wAE@IT%ay)G;i>_L|X`Y z(WB!j8~mZc?7Wz!BJXLxPRlP#pf@nSI)|f9)>vB=-z2EA5WZ-SiWwSJvqzIhXhOZ@ zT%vLv6lb^bvf^&up=;FATCOV`vqhzS`^Ra#YGDjGIfK2m@jjS2*n}STP z>tmL@=cI0;0p|(EfVt~o*vM#dt zs_lBm$g@cK1=7#+52!mSijM@Ls~W2sqd9J2B|T3sQ6Uvq$rhkjJ5ww6(Ib0*#fF|k zu?*Om${E+UVO%Fma{ADmr^E65>ET70#MerLk4H<+<%^otsW``o!ct^DyV<`mWD4x# zcSXHhyQX^F&`C`#$_wn3(*CYlU`#FhHn32MS3qO?6vo4D)s$?ov!d|Tv~tl$+ik`X zTI4up7V7GVD)|EQp|PG@!e77&kTFwi10{?`Vou#!<1V;)95FX&6^w~m3iGXY>$9qb zk*olAXnr5>T`CBVMm;>3cV}?hnY$ny&Vv9kx)wV=mjgrkde}$jZk4 z;Dp*k`jQ&=!mug3rpkm_j7ZE4ku-(xlY)Ity^S)IHPzHqgOx991RZqrte^L>f5>^a zh9$)zRL}l9u(b*aJNG^Cfpx9&=_js%ejxmzU07jFnDO2BTn;%WJ4w$=Ad}AZy<|F_ zCgU`oCjiT~S&QL}m~W|_NH3{=6g@AdFk7&%f1Cyp~!&?2ivc4c=Us;=V~pv(78qa9=+e+f!{q2 zdj}6X%Y9(NZDUz=FhWA8qWNuM*{KyddlaFCr4Fx!HcsO)c@K#l8G}$Li^(SEU{(y$0E#7zG9ww2IQzGMb?fW&NCU>3p&rY?xgnQ|N3y8cbWF37JDwz@=&vIoQU=KTGioOT;k+DfN`thmY(c=z5CtM!~Wm*{_Fb}2T%Hszui4} z1v^}!n^FCj*cHC3xT|(#mIRwfM`|XjlxcrgTfUn8LYk?;R$NY71-2D_yTQTz4`%CR z+&5tB>M?aehAng!{iiuKr;J*07!ygpI%`Qi49%B%7g!bD1#7mJtUL3gT$sQ+rHgdl zG!M!?m^WlEoN<)R7Me|)|JV%hRmZCHnm2KNyU`4c73MvENH>=5Aw( zLx}dL`Fhjq^bDssIFZ+xz?)6t&G~PvO>XFD>g{U*2Xr$ZI4PB3xGvbe$r&i))IOvC zuRtTn!Gyf~OxGx00dYwJmqX!&g5ZTi-~HX<%&X$wE$y<2aHnJrPbcMzX}0uHC3Unp zj2WJyNaM)7Kb>1q-_UY!(@|C_#{gTGjdBV5@+c_Ux82go>o%XiI4l+BXmygXehKGk zV)OXJj~_pK61O~FaxfW2@H~1v8TQs=9j^=?;a#Kkk2V%=KF+4|9D`eP8f)%^6XLbR zQ?@=(1?LT=#0v&aVQb;viC&^1SpGIuD~>NkL~^zK_-Xs`iWle4WqhB~sAEFCSTQ*`g)BmGeIinn$YQL{EJe^KQkpeBW63h=eU*WD>v?7G=bxycsM z`ts{-k&+x$y=SWArwVA6K&JDV$;@C7jH)}Ww@E&dj1AM0{zOOdA%oW_rf?du`Ym#Y z(&%W*Z8pi6N0ST?*_bxa_Fvy1l)`Un#Ohw2L~{xoG_xH|EfoO45?{KL6J$|rhdCkV zPWgAwqz4o|x)U`|PL!)$5543{*@^X>Omsz7H?TN1$QIK%E4CbN;n4CgqmUFy*Fr2gJqbaNxY>MJ9%L5nKqEOhg^mgzu-udo`)qp5^w=*ErNU0lW9GFB3*VqK1 znoFQ=(mJS@(-jF|YHgQz_wX_N_s#C^;Wyvx+SV_nV4|kz4^))NO!KJWJZ~JgqhA_k zERD_R=;+I1c-l}n!$%FL-Nx~+D_j1-Z#i^H=z)!zv{M%pa=vHHa;vr@%pFFtA3|XX zb`C4Bb6AC)TF9|`L_|t4hH9%UB(A;zevNrY3T}}QM{`nhI%KFnEL{i>+fn_su=2ps z-o|d{dw~;2kG!rig55w!siwC4ijr2psHpXOH4An(cNXy7p}m5Ut!tM0(+)ITz71Zj zh^o?P-2xj(0z4`tGt0`GYLB&|Qj6!N1PqC!WU0SK?c$4h#XSpryH zntS7EWhVA?`~D>Uawt!gZxM@pnb#)FaDRd_TS_+y7`g4|(ahD1@u-j8Z4%TM6#0Nk zVQ>1A@_SUu<%8%GTILn{1~X=5w(E7dLi-^pLu{(N$An@1YCwDwSNIX(^yN~#|j>ULa7A4+vBN=dZ>bi&k8@{f))a68%@#ZP}< zeIKe}$Lx#t)aID4K*NG}jV%qSPRET!Jb9pQYQJKtW)n+luERwwj9F zr$l4OE5NEgpI>yDTUJ^mcJw%-`%VBtJRSq-0W+fDO0g|?C_W){=h*tn(MVAt3bV)% zNCL1jNc$juWX6UTVm=YMTTsd3wGW zCr+BW(*EI+yAem&K=ObhBt;y~oLf^430qbi4wO>KMs^!TJi3#oEg$a=hu8zWkxA+Tgw2C>q`9P-9D$v+QF=n8uZj zX01T5G$$qHjvbtlc2E&rq+_%TSDFM|JUSd4qSlde6<`j|eo}glm)zy2`u@B8>LPu& zq)ze0>1ciuaV+@LbPj9AO|G;1>hb=*tmEFs7oCkyKh?)hhjL3!Decr82891ECgWs5 zPty57d!U(zvu<0q2EO^<0r>$V~;xwczeg?^GG)L_;F8QC+JVRKNM-b1;9QA6}Z44Lg6Cfu& zfYQ#kBl%6Wn|>cIvSQ8wxbO(FtzRUin(7w4l6}~*{5uo?xAnGT*#Q;2W`Ulwj~#lG;7J$a{eS-O^zoBtv5#+9D#miCYS9#J z`>blTt+5V@x7vY}S~4qQa5eiaiVP7~4IPmbcg2OylrNq7<5>bHy6s=gBp{ZiV}zn7Jj_Vn)>@z?!!0%NLd z#~xQ%Ve(4fbCSLUM8b7nrU!fjgX~`lk<{}~+)133I393TYUY2?%u?~#!teqNHaB`9 zoG#~cYEj?_B$6E|NQ4mGG}D}Ah&a&m(Uk41CZlOt2Z5sqp%Gq5t>oQmr0dfCXS+Z2 z_n#kn4KdfUsws=}505|!g!N)h*n6kI^=+nBYN0e`LaRRY-5WFpUT_Q~oZYq-TCQYr zfvZRxrQ;Nl{RO9QKs4gdKo+Xd>fa8u9MZM$)ug_@jgRgY$7`s^>!$@Ay6FLM1@8{< zY&Y5ZT&RBFjgTYehfs(23}1e(s* z$Kv&~?cRJWYR%~NTVr5({Q6Yy9sPWbpZhw(aCi!-iont?GNURhf`%6k0#g;x*oEn) zrl9Ier>w7x66LpVbmL=ktp^yEH*LO0*w| z8ri<_2)69=$qz^7g9-%vFLM?+0v?h^`LzaByVa^qkA{vsxE(okTop6h{nt_9 zdH^xI#Vh2RDxxmX367T^50_hX7Dt;8kI|_CqgIqlE{P1I00d&c1em5zeB!c z-7VwFe0WT8ty|xFdAK% zcO|8WhA2a`K_|up&H=wno8a@mOXLToy>QpR7mBm$hzjwfcMIf8@4D|w{j0}wuHX#K z^5V_s+(zc%>qwb&w`|7Hp8@!VgjloEAdIzp&l;dQA9hhJqv+R6I z&e4+bv6v6Xqtoc+)%*gAM<-}wMj7Ixt&915R&3tCKgg3HR%pCd$t*=MMK_g+1oTf8)uie$L{~Mz~n`6%-rAj z?DGd-etG{QyX*|J4xpq%d!U29xgAn>cSxn(5fypSLHu-*jx6wwS>R_xt~R|Ifee^KV~izM!>*6D7;V zT2-Z`MD~>8_6w8A6TEP9UEHx}xx8O3f;XALfy9lQrxL(zJDSb9GEn@hX;|JkTJL;$ z+%Oj%%gzu9Uc?!q3)ZlIgZuNT4nTyD$Q&)0hwzY--iT>1>|%kaZ}xyh~?4-&pU0-Oj zPZt>aSE<}HL4bTKYZ|P|p%r7o^lW<%c0;WisLulKRVyJrv!~~OjU?<_g}MT<&HNcC z^l~^F%)PsDU)aJ!^G!Q?ivsMhJDR7HqFLdeee?#+L*G^j>GR;cSgYWF_!QZQFRFDJ zRcK=Gi2n^Js)d;wYFj-n?c=Fi?OMJn@F3N?Kod|_PR2U=KZS#0aViS}Wl(3{9R`)p z36W3uFa&0M4&20r7O0bf4pO8NJXq;3ODig2BNNWLCn7x@kJuxQ_l!MKZi%gH@auON z3Tqflvz7VYCdr$$j}Ju@l5iV zZ845$z-K4rZo ze_N&9M9F^$lE-8;XQd;i2r79WGb~5N>H61(9FQY4i=~W16!)oPnK!bLJsXZ%7P?wJ zZ+qFohk&SVnjzTjq{Tp5F-m+4xkvhJ22fCH1T@}7nFH2X0a$cw2Lh>0y*3EtI26?E zCS&PYk^ZzuDJrIJk(_QN*)0{a+Yv-)h2^V%JZ+$QCXP=|Dqz4%r#CA*YqAD+qSGuJ zr^(dL#Cv&>lID{!Lz+>{AZ9n9l9)-h&roVvyTQejV41wOOIi&(a|?1VRFph{I1FXT zb>?L{{Ksu9GnG^BB6U}s3D8)^c@%B$U<&BeOJ=Lrz0*@k`1HND?A@c8F3c;L`(b3P zf1OD`IcdC}Q@}&~Hl=T5h;F5gs;C-5;u0i@I}^Lz`1RLv^9Dk&8^8Qw_ao+x z{Q7I4E5%RaP&Z=ig>3unMjSu@SFDKyCY^DtwsjoK2DGumErhaw9vwAGAREWWl?7zL z%Zk|D(!G*S>3YkQ)Ow+}6%7_6ag8>y8CUd36xRWUz@;FPg5FsJ5>ByV7nMDPNr8oNtMnoihHOFB_uu(s7UFTZEzXj|`muY|`S zYi@ve>4qE8{ODuhS zR6F?C9NiEh^-&HjEQw|5e#q?_HQMa1Sb?Yx28Ca5N1Yy}S8B8xr9(~V(kguBguc5) zt3fJ1g(p?rn>U%%xSsMP;fpuW62V3U=XX7_k=rGM0LL5?QZ>>-4%Cws#xs{;2U24I^()UE!OYzR?;@vzMTuXB@uiLuR`gKm)vJC?te(Rv_N>CB{IY;4$GnWcRPU}Fl^&ZB{#~*MDI5AGrGH*t z>WoUAttgdKsl2Mxui?jdSX~z55g_}r7!Y$Xl`$^4kJZhpS=U)H9atqJ9{iMN&FH#< zvt}O})pq_&-qod5_$+FpHShUWZzrZ3zna|(EqAYLp>w(#M@}uZw_RDLq+P$oTgtG4 z;kUW06pg74;wE`CSi^I-h&XGj`e|anS!$eG=<_c*Z5#gLc{bml-Yo8urKY_H1pXdd z;#*;)F>Fqg42~rfibbQauu>~qfaI*e&_WauiUHAeX`a0up?aMR<;fx&;bSQGRK>Jy z1#P<-h8J{dI4VkUtBU`vp`TWSH_;)PFc47!2O3@>!TfZ%_Y{@%YJS0LdJ3BxaUhP$ zpcmHCgEA#Wtybof@rthKg+Ly@85iwwF?{pmS-a?ML=PUe|KBHf+8ezG@e18+1FK?0 zAg+zy7yy0)82Ar>Y1GiE!a!*-6_GZ=4kJAD)w!78jArI&uHXw*2jI2(`mtjt1pLsP zPppG0So2&Cu|Ov-ab$(7H`mlatoLIfJxRRZd@SS*0l=!$;V*6kM)oYJT!`SH)ri%$g z@(CJUXirSTuN9npgiTLOl)Ljh0j3}?x)RfmTfoxH^9>aw*aAg1ad<$sBVXhaHLQRJ zFlu2kop+T93o&vGLfe^JtQ@jQ!QfkN-2AT;FU623b6y<1em#HvI)D9o8e{0gXm?y> z5~SaXgGtO=+hM%gCC*E-5>jYI<&K9))>aE{q(=JTd#2JbfVU}J`5I&0fN;C@>gA3t z-inmHb-4S;droro*3+-O$0Q5H@Bj0~_j^zKul8Q<9_${zI4D)w zSYK!0d(Zp-_-^+}s6dYkJgY3Qp&(G-LM0w35S1k!GK#-F*xT#8+&kzjEBh%U^2K)t zD~o!xo>$wfS=*r1i3EQ&HHhm;Qw)2&RT_=WCTXE=852qO|LofwyDJd5yUF zgZ|C0$7%95HSJVIwbxBk(XJ*lN5Fx&eF?X>O#AGVshd#90R11z)_=TkMP`O>iQCho zsmC&ZK%AkvoN`sLq2=TMBQVQ4yvR$*R72dF%d?fJSeZb%)$8WApzk`$7JS3!{r(NM zd8MStqx&X1%pPas#boOBG?eHr8NN-#7}p9~J)r8SVl-*yzOo{9i&8K-C716!CHL-P zkS8-hdYynD*?5|j5o>zB5~%=zj9UPXv+47c)=+5AdwU$}Hl4-N(jj;-A&n=ktPBz+ zP^mt%=|F>np-yH0(sDor(>|7_(6g1!OZc(3X?5VK?x>Knh#eNLGf34rm*SXxbt}|$ z4kC)4Jg;xg{HTIERo$&aGU7v6xh7n!9E!ZW;}Q*?rk6Z9R+2mHLPvGR!HRcZyD8O= zOQ_@L`T|Am)2AS$yh8d^u}#r0;hCf@!SzZ3x92*`7G{h4g`Di*7JMM%`&?N<72&Td{i zs4(gOswrWa1nMEJq<{ftkB?c*NeWQn+hT?SG$at^)INUg6g(fA{}B{qbY)gE4w5~xkZYH960l*{JWy`1-X*;xDz+AF#;Xv57HITNU5 zhr!Lx0!{cC$W0fx)x8fQOUOpv>VgDb#upp!&~-Ff<U|VY)LPuB*)%ED-#u0^5jG( zlRr6e-1MwmGAAv{E|g9{Je{ZJm_IpreG0Ws(~IQo2-8=c1;Un5<|tjkphTxZp)^g_ z8-OUe-3y)3Xl@wq5D>hxK5>IOx z;a0a>owKp_W~*hC6x@+|A>87AT&WmSVgVLXao1ff){2cB*u*;Np#LcofZuQ{fuXTk?IHbG5^7Q)R@>_H zoC!$w59mvdL1tVZBdVnxpFJx#6r8+pTl8f$#C_}w(2iPYunXK_g|mdypeU{!tVCJr z0*T6#8C&8$wewI~s051N^!nsrlU5u)6%A^5^QgWytMS|NC(dmK+1ZHgbyL&S67&Yq z5@3p#1l?STVX=JD(HK_&Dor`7kdyKFWuCH-6)^0R{LQ=*DY>Sz^K=6$(K8qEPX%qt zCd2h{8;H|$Cm)-PNAehw&Rg>y&1$y0% zUM*%c_<&-KQ?5FBbC%vQEhX2|HGdh^$A`g-HA=fjN1fjB@?Ck;4%X{j-Huhv-3^T? zD^JJY#=GTip)DGl6_?L#%ix)j*$QJP7@}{Ur^y6)osw(KIE`mEGyEQ7G=8LjJ*%rusjD!v~Y0!2d&v2BaRsGkj!2#yczuy~~moCRfcd zqqGxU5Lr?cx&Jw3Va+)4w%r{YYI8h#lU^driQ|5eH#izMNp)YN!)L?GKxsU=X`WE? zwBg~0sl>L0Kqu^l0BV*gkGni7e9f_YNP(yhJA$xOP+gphT4+&Aw@wSg^mGyQymY8M zm*v53VxFEOYxKS27<1>?VvB z=FpwgKh6|ZDY?-K&v7kTc?6LcS~6D*g!*|1@?ly^gfpL@OK{UEgv-QxV8z`aZu{uC zWo?;jazwg=(0Iu>=OP`vIYj}1fSJon( zAD9)c9LwNqn`DFC@mRENWx;ra?80!AoWrq-!4mq5DS1?-Lpo!JeU`yNLhj=cl@0>u zeLbe8BtE&KC}&Z%cWRXnxf|Qzm-SyaQQ<_MuTq=F9{tk$B>xr9v0pZRwe#?-@;;+a zjH3l1v|#b`mj?nX#OlXgJfM?#Gp>!n)#)8>{GoaOXwc_Z5=EqCxUi4bn6n(}MX9ku zaXbhTs->*1w~<0ysAa3hknQqdSqd@!a*+PC7?FnxNQ$hDR?Zw=)sskhot$M0vW&Ab zIA!?|NH>EtRSL?iaEf6`#ith4;Fd=YS9q3`GB0psXx3{t)*2|-&RC~q)gfVcS;dZB zv5gH6E=ZltFbWX~DFiDj2j8%Pr5Z-Serq(Hr{}~(P@XqZnwz(@;z*sd9le;QFY;$7 zCQ(V!u@`PU8!3s?bR>YA@n{&g+6GcH#;^EDmq^ax_p!r8Q(VzBDMr9ZU*_m%ib-)c zOHDbgz}Zx42A;X?Sj&aKijgm!&adX#tVw6QO|%0V(0fUKUcf*1-dy6hl4g&VJ>a2h z;Fi>%K8%2TCdR-p?}3*AEkkXMt*@A0s@o#7dwh>)#vah=Swa3{QRwVp?&9dUd}fW> zMl;Cit>&WDtjM{^r3>9;#R-Kcom}9Hu+s@<)z-*+Gn&n_KHwbLAe9JcjYo4d!mIb= zRuwz#4OJ=GUIEO*tZ6{EnlYK{!nt&>6ee9`y*e8xe)x{TTrVh(Zm$Ye(2S;DhZi>*fjRk$_eK&At!>&JImqVTZv4|s*zf623ki^vxHb_B~^afC~oVmFX-j)R)vTC9Ck@aiM z#wZh?C8WzQx?G$!@=j>}G^&-H=R~^?A=?hbUSa5JkB#g?R=ta0xZWFxugj120cI>Za7#2mt7rSgvG?oG7v?II`pD zTM2r{oNUS^HQXov3R#b@9SOOig)D-lb$%-@qkPK|+PS^W{=1GODyG(LP1 zg)@};a^Ebr3m}rbNw2CBbLq{uwry1^(I9WDdTezv9BQ_@-c4P#wSl9+4c&wLms(E# z68nA^2^7g)R>wR=nyY5xa)fx%31RRi_gdx@ia*9`k{-`5eRF-F-x;^5ia_PwffAVF zQy|)J>fFs)=^z;qA}&^3*eO};!>`$XLFH~7iHkRDdDEaCl48#O8dqq4LjmGmlr$}t zc0}t%I5!Q3LBkUf)w`AYkx{{_k#4jv#&`3}%)WGI1G+Ywiy4)lN$#C;Dui)1Jx^73 zLpeBAX6pqUsNIz+lYcdo^`50SS)$jtV@XLba)AXS}COQ}8g820h%M107!bUN2=A zWt)F;cqd>g!t7>E&WRb!E;~zTv{bM@9(thSvT}@GfgT*rQeI0g=8bFQwfk3Xaq4ns z=`z+VG^Qnv>J^;a9U>IUhI*1oq)u5Dvs zxC&;9G(zP{eq11Pr5JS*&Bv{7P`1{z7>Hhs)cWM@$T1DGGj)VPxdGay>1>cq?2yJe!0jlqX{M*g9lfF6tO3vs0dvbkQ#0Q_-F#lx{U#h&r=Nj+gxuU z`}sCSL63HMAo?^iM4A=^Cuf>PXN#P=2S?#>r0q^zLll@484L-vsoa=pb9)zPGRD}% z$$az{WA1PodlsR2#OhFI*A(?Qz^K7Hb+I6*03rA&r27C;K&`(JI;m^akQQ7ZYWX2q zYzIgNQab?A}saL6AhMb{wSRHZfn7ev=5;`pgc$W7TL#GLwD zttsbKuo3N0@P}oW4MwCCoL4QC;b=H*sBHvzoJa!0(-hWc1&)+Y;08Jcu3C-wFHyxVxMeBO|@s1q}~jyLJkRK=EKr5Zu*4KQfjazjHOxd#4%D+*fo|ikF`R60GU+g z$rf=Vx=3>oTYirY%l$6Pf2Vo?kOQmL0KZp>_+Pgx6RY9=v9uo6G<}$nQ4@FDN|C0# zqbb9ZW1yr`m0ET+Y-gi)i%~OJ9VlN;L9^jG4G@-(Z*&x+AqUy%$^uGI_kTW4*$av~ z3g`3gbm;Ots{zB{&K4LXmCtmQ`4}0c1^g!cBQl1BPHoE+1{>F&f>H{uWmtNHwX74Ue#=0n#smNZ*?L zz`@SwXRFWfgG%d0@JZ~kN*E0a*JRY>DOS@O!7P*ib}}F?5uuJ?iSad|USBq-CgFqV zCJuzIWpZB6!?vshO3w=2pqDBYO$qH7E*)6`GY5aQaQoLtCt))PYT1u99-P4%*xh_F zJp?|aXi@}ZhY-+AN3y0E<+3DcLZjaLdOPZE_=)AYnyf)Wee~(NsSnGWtAD!Q{=%!v zg?J-S&5d<|r`Iyo-B@ow^s1J+ztmdh24g#Fa3zew%=PdaSH*8s8@~{M1}QVv*YQCc z{{XCp?J3@ITD6~Z2LiS2@pYni)JgZ*)u!9$jyq6u8}T6%Wg~(sQ))%5k6%7r_wn-G zo{N@G&A7g(M9O!2A)I(sOBngIjF2xv_~3p!FJ$~Kj-)%*ij4G{PoazFexaYpP3Y!3DLp5@BZvG&-#C)ul;QtzOGXN254s1M9W%Ydl&-2esfbb6-(@Gqy#LfN%l4kc9pwpfrL3- z4iO4e0Tj(PBdDdqjjMSKX=1!}=|me8h~Z&QMjSg7gtB(EYESBV-K?d(eI^ayH7%;J zGfVPP4tqtUVwOpFJV7uS4oR$AOjYiBMTZJw@ks`oWTEFJa2MrqaDT5Yqkk1gljT-w z=K9!G%vk<`L5pnD1#dnqr=^=XRhgF6wh&lu(6tea<3Kl3EGA7;QJie$HOBF&h<9s4 z`6H;V|N5uux*VXG8{L~;&@#VPkYY#qrz)L%)M&+ZgB3fYx>>;DW%of;TA`vc`fWRM zqPIH}#U|60_er6+4dJtJ6(orO%n(Zv{JApzETN+@!Y6_UZX7eFmk z$(5v3t;(2f+|_c}2&x#27GY}nGA7lj3KU_g*&-!Z(N6-!z1R{|!G0FveNEg_n4h_d z;$c5;-KvndVm@u^SI2IDm4|yx``$QSng6p+MC0&WR|OEZz4=R#=W6210Qe(^4-OL0 z6(NLcBB+e0TZt!p-5y_~x7Y1y#q8D$of{lTr8U*{mSh-AMSri&*hqJ9x%tI{TV7zl zO~1*L$t20m?)R%}Zpc2tZpcPm8)?@t2e?)M&rqz+Ku6p%t~|j}x||ZXH0Ya0`uw0c z+7*o3M~bD*SAKQz@_|vdYXsR=tohfHoafP12rU+0{xr+pBo}EiWP#GkH^uk!%y<}s z3t_WQPD~3J*FOU(`5p}Yp2-X?`QeCBSILF^?6RCDTCo8m37Gvh%|~Y=We85*h@4>> zn0<@sDcQW~%td}uqpsg!29S&|ldD2d36-NM+HJ5|2noQ^KH0Z8mM8@~i!N8HzSxL#M*zG#%@Z0@deWg{Sg98C!ZxNVhOvlkXXvkIeBt{gepCV;E2X$FHTz;6>j zQUiv4I?rY=rrT5p^Y6}InkduFM${m=+w}o9aCF-(4oe z_^OZ$1k}1QCIfJSZLW;z88(5BOe3{z#LFkU!F%vhZRMSke|hx*;j~~Wu{8zLEh6^f zN=#{)$LU;|(_q{u(#{D@(Tm?!5Jh80^tpphuc(crtw;7xdIPeTMrt;o+I!ZHFq_Z7 z?6*~<=(JMwQyjZM-%eHccoxj3-bHDs1u_-jE8H zFs-OCY#hwBomJCfr_)S^8AK&577H-ULgv^7j+mP~bLtWI#<{WE=5No8x0nEOw!1JV1mqrazDOrw>~g);)8E}oPl z&$IbHFDk69*GT#f)qP}h&I95|3*?Gru>cAwGc^&4iBc;5ZuA0$FU)z-)}?7CPE~$l z-6o&_XCC^o42ueT6dgIj@M)$yF81`6p~Kq78as%sIII8ps8h_Z#wqaE`3Q4$2?s&A zA~Qcg{n_Z9ojMrSKp%>uZ-F5m@f|X&n_bCXMtk20?4{8V(-p(eZS5PJg=GMLSq-4B z0#)XqB#j6ct{bg&Q29!eW^0+&W7*l}mvPjGVSNoQ(9*k*A{THPxMZM}xUJ(2hm?e> z4Y!M-jBf3y>F>BwAW_q%C^lgYK24_|+Ain!G<&%v7gXHFJ7@s|0Q8^j{?Ollez>Yn z?>@Xo;pC;|7JW0t>UQKlUsaTE{({gMIQ$&LWE+b&K7kcnOE+lcOi|Zr<79F=1cC{i z2hhaLXbu|%<9^K332wOY2+)CBOrkEd>g#N`*XwC*0a0b0ALrP#@pVJ58w;iW&Y%px zWP5>zXI4{gxjI}M!CJ24yQ5c(IVj8lVbSzU_>)~Ct3ZK@T_|%aP>rEnYgS%$Up**& z?9)_6+a}2nZ z{H&$nudp~Nhi^Tt(mvZ0GdoQKaI0-kBs^t}(!A4jTeYMPAmY2z`idXmhK8deK>^AL zAIzex7C*SHYpZ~6U-+=vcak{=9)#IERSkQ8@Z zQX?(*Icfa6QPbaK_xY1{^x^3=t|nfKVxdu*zu9Pdj?q|+<|Bu@K4 zQzuYSdof5Q0_b)R@O~8y^2IP!m2DZNL($_FvssoCmk!lI<^-AHoK5|-wEzQS#A3w@ z7zw)iUvZM~(G(bOm`Gbhv$`uA+v)w9WwO}R2*6R;#XMw-e~OA~k*AJMF7C$k436Rj z?7*w&Y@8)?R~#t$@j!$BMsBSccbzmQv<>Pilz0uV;?eI!|K`(S6;mGOf+(I3P!xTOs2FNXL&YD&MEslJ2n?yTXh5g!^?e5IeivW1h1?`+Fok4t_=GY^keot zNq3M;i3&eY-_5-cm^TPf6}rd{9S6qX^ml1Y_3vLo$ggcRC24w|iLWHtEG|3isttiy z_ z8yrA=RrBBc1r3Dwi=TL~R)*>uZ(J-+WWTSBZG5rAD~lwrPj~pJ+R+&)>G{5XY%0;E zXWzk-8NM}GX9}!Jb$MGBeY=hofL|kBMc2f7xH{a+cVIV*eBvI!^!A%$>=g$jPWXO z2rzO?vZ*3O;mw@Fi4D(mptV$2@q02ascBF$2Pw_O!%$`;zNLs`M`97FmF6f2-dLF+ z|HM%fF*3M#*Edk*h}|Z(6`#ZMn_{bxavq0evl>#f0z|D(Ehqs_LqdQ6gFy3aP zA$0*45VulJXokxHyLC(RaSd~yn_~Bl8?`ZLv=cJW2^sTvh#kgFi#nk4%-FCjQ5e<)|1$FA=TkQ{17HFG5vZjX{CL^i>!_bqTTjicAxt zuu0y3g6t?qAP3tW(fcW*${7urlc;4 zKJ5%g=c9S_^JoTg{CH8AmLAHhpBBm3vqgf^pS)g9RJ31_&0j{W!kOB#h+rnm9n;irDCi#u3&?I9BHiC?_8-s`NdulLGzMpJTf zz`E|MFTeQwvrjwjGwAG6)8bWqmwv0C6p8xbrwxxe2@S&@f?Zub^_Td>&6czudn)jwXB|J^Jn6!zirbH zKS*o&q*4cT2v#5?oQ_8lKDb`LKQOQA; zuzVm+W@L?7Vy0d!=6DN0ilP0Yz(6<$T(}eUqW=##!;SUzb)PGWkb`(1y~4DGBRIa^ zM^DmXkdN4+Zu#eZ6g@$Esuwfggt&vBwT}K+UsrzYvR+?-1H$Ae&{14m@O6Jmf;(z- z;NZC`=IJCFZ|&E=40T?hm>-qfDJzyATnm@c#LSIboY2a@iaS!>2Eg1+4=iv zqZNSKd+0;`{7ZQKYy`W9OTOan6==72c>%Nw_+ko}GSAQ{ko*>Lx(W;G!_P}hsYRfd z#teS7_Y&S1?cRG^JkXiKWlc|&A3S4Ub6-wV|5kXu_0`8;ONq6?5f}q>+?5crfiMLP13`w zx^!KOA{Ex{4i}Tz3NOwEYa}xEs4!)B4QWSQ-d*o zd-fYZ{-&l$cBj95NPQN%0^j46geAs6!w)MvZxb2S`;{;&M)Bpt@*t$E_8>n05(hzK zjP&t!i5LaF{k(D{Heu5vsSCSeM4x|I8WHt-waQdNtH@E$@{!*B?9{=`MTI_NxlO|@WNX?ryjdf2S%idL-i4-j8QAzNw5yRB`F(y;C!h>7K4eeSR$ z2Qlr8k8(_kN*zV0JvTsVz)Vo@#Ks-6x3rM=r7AJ2x7SdM;fE5qOBPEtONc!T$wgfX z=zSQ!Yui!J>p@sgbVoC}D2$5LeY+y-cnN=Dm%9WnZO?oahVAV`CR^EJZmw6H)^U4y z%B36H$lKii>0&eWk>#WH=O|9zOtVWJ z4+2I62_hOE(VR%2X4n*IPMLkDR2(1_A)Gxgd=i%~{~RP&1w#y`nmToW^Ish7c6D1w*(ov0jSDeLEGqnL#+YlEzC zL5xfj<2`5%u15G`NpSk!XW*kKvXp zg3X2{DyLd7+AMda9BJ0n42GKxJJ(rPjTP}`Z*)Bwh#YHbg}osvyl`Lvty&gVP27Ys za|Xn%1ZKT{AWg|yp;nF*^Y0q{*CnA^K$*2!H$dpM0&M=LqD7YY6%`cLDeSxY)D10p zV_e;Sh{+pYbNb`3E;(z2MfQTi&B!<1x)Xg@C^xU1Ju{G10+vp*Y!kdVD>?ql0GKS}+AJyzil`%wq+S>Q|5uO-$@T)VtC-k<;2V9O;QNy7J?f!80sHGLI)OI9o#sk zi{63lhnfxr$)?~LihVC-eV79g-WCEAXjMW?sBzq?yAz=m0QR$KKgCnCFTGr`hAP%i zeb1wH<$2V*W=>h+NRjyl(Y%JMQRM({)4%AJ9g41zUe z)L%;umo(XpxVGnbp(ADYkLaKI!C1rEzwqjvMKSKcr zMmvCWbc#V2@G4YmWW<699Ys{yWIibb4Uevr5nJ2X!!Xj&`vSA_qMfU9mcYF-I$vaq zBC3i3^A*cbVt9&yX->x+D}y7zTxoK9a?(hKKLS@V6&z#YUNNfBkyciPQ~_pd><8Cq zbR9!fI|VMeY+xP7p`-Dj+k4pitkFWh6LdIfJizO!E~WXz7uJDwN5nqAH3fH^@nOyy~gPD z`_1NhZ{q>*A~nOJv?KI0;wH8+VT4{#;iQ&=y46ur3Ne$g0ta>I)}HLjMz({hAI_-Y zP^Wp?f&Ga35sHaKD?^%xC+<0oVNs>yA&zEM>=soQ)`t4JO3Vt}AR0`^q{1r}zy}>%3%H05{rTkHFhAYxPRK=di3O3pZUjh;_9eXJc02I(@O6aFvm$*5J zJB;O=G=r+{ns2}wOP(qNvY!+@A9!3ey$Nfzj@!{B8z$pzR&U_fgFxCZH362HD{1wl zBb6@tg0CYfcf52W49AIO&5_1#hV>3Kfnk|ws-uiGrg&y{P_K8k7~^@*P`H+L?pbVt z@fA9uA(uU=>^;2v&{0ve!hW$pe=AI|B!(7Oe~$$%iDoe!=y#S^1%{NIz|I}g#8ZH( z5^cx2Zshc{X_NpRYGXd?xJ7&jk@z!mm`w1`DIGHF>+Tujb%W<@X=gsPH%ESVZX9Es zI(ySlKOam5XoKjN$7bC>!MwWHTK0){5`632e(1H&M-1{H42ND|{$8A>{Hhya>SC2! zk$5r1!R6^09O1xZ+Y#(2b__$}uy>=<#S63mrxr$->!QvFIbG!AWEO|J{m~ON zNK{bceooYPHb#vSN9*&qeoZfLw(u(j+S4BM1`I)voI|o;X*-z`Jb6^Eh0b;OT3GbO zJnQfc9>?vrx2s(627#HrhaA7ltS-U|k4f@_a1w;GQ92$H3UQ}Kuru>fT3}dqyi=R; zwHm$(x1gNhkE?o+6f_#shp_3S?@BM(?L9~Oc4XY>&C0}IvN(xm)AFvU}@9XFa0fMzjHRD{leRH=9ORc7wPq;j~N=|rjJH7l1)7lc*scF)JXc(zH6MY z@eUC|%83)Yd_19R#(~PEDU0jWO?FdL*-<`9aV7mWCn<$4rFVD=rNARmFz05lFn%Oe zGQ6ie$?E})BB?E=rRyCybC_*E@-@=#l_wU&&X=0Dps=EwVYQSI`qGYuOt17Hj}R<+ zp!MxJ|9&*TctK&1DLdk*lpxe=VuLtcFNr($v3Km|_zgyjuH6>}vD}}aULQ%^Tk)WT zsv<2Rxpage9~xDK^G;VU&6a0Y|+w;?UBNWwmf*wHO-M zDlfw8wE>vnW|m5R6*8X9!Y=8alF(FXJ7j=nNNRAswBJ!mSInrQUt~ogy4!%OevnBl zvPDk%jhN+)L3?O1PnXraK ze6phniwrwlYJ{;(`{Jx3DC5blbh;$^> zlb{~)L*zRr=7&-eR)wrk>LnA$Y<%^CY-pS~8qm4#^MrT?+zhsNQ_-dv%F|+zOL}`; z7!-O26>*d_X;9~spQQ7PZ1@=JluR%X5a}s_umBz={RI8~npTZK1+tj1Y&Ez^e50F` z#28h!84RUFRCGpqyK7AaE1(?Jy(!yoXhoDHsMpU!cBtG$tO9c5fbb@L9=2QYaqxft z4_3fSs??UN&a63pk`6MqJHuHXrl*VZbA3If=3A3DZT#psyV1o8w%q1hmZ6485)bV) zu77e8@9dzAkrG|u+3X-s$N?O-B(8p+_iG;??zE#VYOb%cPT>>Lze#+>omQ-k)xv!o zWJs6iDA}-=-I6YDZ2>eVpt_S~P7X}6uDcTRYaM{4)G$r!iU28rBfz};fByX08eCis zlk9EUA1=^-5m?gxfDFJGFBKZo2Fukz716A*iR(!{l6o!othgNF>NgVUWm(w}?ni(+ z7hX2S@tfg~MO2K3_&@v^j?eJVk7x06a=o*o*HHxyXi0%oQ`rL0?e%ulJdz?L0*#0A z5C02g=({dz(zaK1K-}tfENJk$6@mozU))w ztsYzzAbJebJnv#yyR;cwQ+HQS(_O^>U7#U%^VaJrrLa}7@ZNq3Bm&5HOK9%W2+VAh za;C9mv5a1RUQ}+tGyl@2)MGQzcVSXfb4z%)D0dcK`{`zg3M@m3+W@Va5FX$~AYU(; z(Uei~vzeXp+7L|aDlHlrq*|3ZP_fm>&$#*Sz<<&CI6Fy~T?2$JZY z3zbt;@x6mYsOm-XR&J5src*aXOPejtB@zVdx-Fvuu8*eo`Di#y$({~z$QIRV@W>8? z?Fpj&Gj#w-VJugmjS-vqb5+kELR~*8?@TvZhS*lH_FS=(ItPz6eic1J;;?5XHDX0; zUPEe{xPTb+gc?%J>8caaT}$@S=q2M#lJ@Codw^cza($C9W6qrUz~l{^ z3DFM;W~-{q)A1OZr0iDHD^pofDP|wLs(YmyW0jK@VJCgF9;{fy60YUv(!CcSzKH#VZ= zG#U(}^sHenVH4iJ!*Uck@rEI*jCOEp-l{lX98nRfoMOP!tF{fO(OYl8t08i0tmJ`_ zZYY-@HYPHYV`?&}#~CT@^mTh z4i%!2h)cg`v8y-f*Ql|#2N4jM(R+OE=s68!bbOl9Ny)cXyVGIw2v^l{bT7gjpddEM zorx;|!EszWy#0AmG zew0s0t#+7S@e$*&SxwcOHG@?{R~t>>)>~1dbU=`)yr#GPvoVssY4fR?H)e?yZb`j~ z3;b!NN7aapWdjnVa^lgAjO(mfs4afOn z=Y(NeVAN_#q{lUt`qaS#9cbO?NhWC(v8Tjp0+aqG=bYb#Zk(+hhrTirrml(z&aUWw z;4nL&=}q$x3B`QXj#r+ROxl{16r5(jfUOA#y44n^`mt7g>qO`IKW8q#U?9{v;bd zLVin{aeC#NArnkHrK-)s=~mRyY7vaDJnJv!(u^ZH4TPn1C@2gp>U|TUDn&-HVrGWb zb0!`5f@zXXRxB~rqb=7WE9r*BSa8@1-be6atp<9jyD`FcBhZ~&v3|(j(OK8e(OO^U*F-T_V0Z1h8 z4lp;iIA$w^V-D1a%PPP!5d9-QE8QulyAjvh~%&;cymvZH_B>`Zy+U8ZmXTN{P?(X)+ zgXq!L_U>^0s-mwnaiwCl z&Z{{v6ov&I3EkZD_dPdKTC9Q@GRxr(m#-zBXPl(lUfUF&T+M)0<&JvEs%-4# z8!iNBnx?!7^OTN#3fiRuZs}xpxK13$!#m7!0E;Huk_3g~A|nGrz>OuYj{x867H%oZ z;V9Z7je(314-Q{#Fj!E;2rh6m^7IDCcl;<`h^|?(t^q{2w^^N$mG+1Vo&=3mS(KuM zs}1ua^rOnoah5~MwH*HVKbva5G>Mec0$`!qYyWEoxZrV2i z@w(vAJ!2`Nxkct)&nSvD5kQLmh;IygT1EJllRYIFjxk&+aDqTe+H7!(sucs>k|%-$4_OuhrVY;v{8yRGDj8PY-L^~7 z4Jn2a#(Ko~j6g-O6X>}keR^w>|EQ~OyI1VsC5EOZ*FgzYt}SXA0$($;FVFHT-#?~r zp=#-mY{Oq}OzlEz-ToF)U7tfSWgHP6LXlOD_ zf?}BrImtdzgT@naa$*EOGQKI;PoC>(-4`8TQ_EUjo8tKDQ`cwI>LlmSFutPflf>08 zQH`rcpn@CWv58EAXYE)qZU&@Hv1pOx*`yRj9G1tcOl3c{?h3Wa#$_VBWvoY3IM-Dq zAj;LE+A!8g+Zc_QBU_;k+`&EvdS)zRw{+a%%YN(yO19e$?}S_ zFMoCUX53dO?h~bpl~pJHV*$1c!t>Z@Yt(YJCLFMV5%Lb1Ewlzm!z+&FU9Z*6$bJOy zkAuo7JUT4cm6w?q85R>=LPN7`)@*pKHCmgc7tm&-rA~2;Du1r5##??-E2Ocy__ZE6 zC#9~W&cns@+(eED9ej)FFf;a=jY8*grh0Ofv^#a~5=0hF$r$pC?tG9hM3pq>6`Xd+ z7_WSrO`Y^YBQitm-K!c~ySds<6m1zjw$kA$qYU!JN-4mMSd}voCxVFqUTC)Xc%US} zT7*0K0r6ZaY~RuW^eL|t-YOivmTiL78Dbp{rztFMaJs7 zP|noUe&`pe1kLxtMXEkNVl5@IF(do_k_fXtgHBGi4tF2zz{#N#-0@+fR_>KPMo30* z4rv|vjCz26-G|9(adKUMHv5QRvyai#Ssv_CX5R&ke=LS)y^ROsH^uPBANkvxAAjs^ zY;2TH6{hb5cm?N=b_N6)SlUmIogg7!;45wnUiQ4VJ$?;6fR`H&N*6^mn5-UsXX@_W zvrD`mh61D4Yfn?+W=so%eoHx_|K(tO0)QxVi`{+iaQM;bh_X2h#H5(jEx_@s9O2F- zB+&&yfio~Rg{9Yc1fYM`E7~Yn?y34^m(@j7`90VgkuDFv{L*`TyzpjzCEM_o`DK^4 z3Yj|Gf~w=Spo_$WA5nA;U$U*eUq=!d6 zB#EkpZ&}p~jj)arfWKb<+tIrpj*r$mUnZTi-Oks?Yw=3Ri|J@^kvElbb9c<~J@Uru z^>>XHEa1;b&{EC57|hGfLW`f@psl0cCdj{EFns2_1-666_mMwl^F(#$eMB1N=h=LJ zihVzBDBSiCI8rRqJL`y8c6*j4DDKd{u-;0kVa#n=UgA+95K z%Lo%&r!)36wRsB-M>l0&O~o+G?g#Ngi8ho(6#*N3HC5uGlatpSWjF~RGJ$!0d~(tX z0lrAzRRcdcX}o^duwXR-(z}fwO8A!-BRss(1ObYD(y+OT78P87cjt~(SET_*JvaHA zv%M7bAB`l%5_3K}9gRoxt6*QV!5q$|rM+GEd%ON{b#JY?pcTm4o-1VvmYim9DP${a zZzvEz5)BFG7$v&%Gk`PqJn4MUwYz^MUV1v`friP|(^0m#av(6!-Ohi*ZtMRAU)ex4 zqtVx^REt!z&1j~sC@nL9nIA}qY!Z~KztHqS%Q7^ijfh9z4B2?pW8qggzVHH8sde4! zM`2&gg`xBgZ==Mx9KRuWmmIqRT3THsl-hK&@{Ue7=a_$E5R={c<80iVmSqeMGa&&k zZ^8E>dHU00lv{RMO7D~?*SUd;7U>8ZqC<1$h|;K}`RMEl`vjzdxmx2FYOUhsO^a%B_m?aoOA zoZeCq#Se#D;Mgzdt=+7lU`qjd5R(`HQRn=hxRRD2$XcO+AOY?cE?wD)703J^V)?2pM< zn*>U<2lBMBPeL+&BL_4*r<37O3BT9}T28F!m$O;NxH@Cc4wKoDJ&bkhXqo8%qbn12 z`*B9`l$9e9nFNfc>IwxIvc7U)7Q&>06Zo^N5eMa2%+p*1^E+flExAVQOD()zCJY%r zZjN4y7KZ@H--D4@>xu_FTBT4TRelK@EvzZ>sIiwKQ3mP;6mrH}W58u_-Fz`UOpAHZ zY&06~;kmvZ^?K39MwBGc*I!5LNwhwUdWl=8(P%iA>2&uQi0oY1H`vN-;%fKKj8MaC zE$QjxDncW}A#8uXyS&Jp+}fdzmXvKvdpIA>$7#5SfuK&>%wS2Mr-mk6Iy7OZX##B2 zVTxg6a&mPm7Ly4SqqtfWynxu_t1N$0J<^aeZ{@tAvak1fJHq3z_c{F7`1Df@_YVI* zfFGYZ1bP+jj~dVZ3$MZdzW@B2Coi7i*RNk3kR>_(`S!)Zt35Yb!N$~_t6!r!e0SgsPbO`w;Za3($0r&RFr={QafB!Q$@4+-VYuS zU#wB!iV0YY0uaG!Jx}M9437zaLj@*ktjGjaswP3G8dfr?mGXn#k3xV+ty$s(Oi~5a zcx3#u1RpGBXbGwv<@6pi7aSOll+a$0);lnMC52EfULZ#V$Avw8^VWQUi>>f#tq zn|AbWGA^wmWntHUdbn-$g@! z63xgub%2|}fARcARcF7mY26G%TboY*5XL{{l52Q6{)f$<%8f=n&KB_v^N+TH)+`6f z$eN6&8NyEad?Wo8Tjd%=m$}iW}ePubn_@E<{gS(q|4vN9rIhxk>7ilfK+$} zRD7(7TQTpy$B8FZG$UVy2J1fs+IL?K04W9R*Bv`cnVXJVrq5iQZQU()P@g1(LRz|m zk`G_hZvk97DO&wpKNv^7|xWOa?Sg1W)$o`l3VB2+nt z{d2J!NuEx8LKYtBh4aQW&}=pan&_0I4JNO!Q88kv5g@bu8q>w!N`6 zAMTJ}=V*GCMPg6C1>!=Uo^8h$^ZBgUynp{3T3VdKx|!V9{EYSOa`a{t@95uK_miCn zpTQ0}Pq*$v6PA>9$3ed~@eD<6GtLth{%uIsREQ(#MrXc&!J0w|kOHw=ai%@qwJGv= zG<~D&@)Ki+M>Sh?fB&YBC?i5cPn|d>IC)TntUweb*Zza7%sn;u9eaXB3BR?wLo22^ z9=%DU7^fjdH@wSfgvK^4<7r_*!3!x#Q-VRplfreDaLcoC33juqhXwLS2YrU=DYm&( zQZ-Z6*@>>PM8c}HGS_P;w%V*ee2l&NL*1=PvEXHXxF~Je`;Hjk?ls$Y!Nh$s%kQKv zE+l>jqXIX)4sqKgaTTQ2d$@{_iwNTd9lcQ9D2d?x>mn?pQiZY4r(+pj2mpC$k3}X0 z!xOl-8_qx}m05Ih;`E(ufYDuZbath$rIcA5PJ`Tv$}QH=a-EQX<=U0?%(Deeal+Jf z4voNEDQ_J<*-`Nnww~<&bBE%rb7c&}ALyraq)0K56zN`dPvm@8BuU6_^okwBOq^b* zbT+~OAohOOm35Ft$5>AsdX3gq6s*ugkWohG)9pA%$A`GZksx%%L;^iv>dw7;zr-~0z!N+M zAv>F-IWh;-OL)fJ{8is*cdQ7z*ieV<1BqO{Q2_jl2 z+Kvw+PWkgB6RFQoG%`OMy|e7pIpR~Qqecm7pL8P=SlVLhOysNr_;5}nsI(g)+OU7d z-j6Dp%NZ?08X(L|llqsjJpg7EvAWs{M3KW{M&zW948$d1jtE zgMycB_&>;N!1LI1ZlgnmZAYocK=UrxO){Y#SW`zUgLesIz-hFPkI3ciZCTQFPYer* zwtR;V6!W72Y90uC_db%5wUh;z%lr_8i!>Rs>%Io)@<6y0!ltfPePuY|uzC7yPgJIC z+RW3dRk&*hf+AUdrV51ssZSN_qp@OdIMK=wX9lghk!ztA-x|y+kaZDjYP)z1v2}V| zRXo&>%zpB?7&ONRp2X@2P6R4s@v%?YQAYlZ&^E!-zZ=q zzB>+S`b+sj&g4Wu$&`ITSzn}}lp_$R(rkt#S-5Hkfs<4>Dz!Ts;HV9alC=U~jzDKR z_sMotvCP>1k9u^ZARS|QUHO_FHJ!uM6+{Y|;&3JlWr&EsK%&2v&M9gd#QR;grot26 z@nWKC@Y~{0+jKZ%juAk|+W z(H+h>)!|#O;ppsaG(g{#Qwbhv&UWK5=j~t=YoBC&{E`Gg3^snRjSMcMn z=ku@Bfl81*&WUOjU3m`j`Y^}eALan8dqVL5|2&w=2NSJ8q%`Oidbbd%0<8$OG%z}| zevoCUNHq>s@+9zkzi7ytk)}Mq(rB{TZc$|DeL(~#eXgJ*)smOpr+Z%?I^;~fIN1N@ z+rt2%8%;rGc`gQ4O}tFoBPa80_LOp#k3qIKmwk;Ux=!TovsRW7<;F%D=AphD1zAb?2O98)R`{q7`xq1{42VP5U4_M<0CR z9FeML$Yx+xH;i&hx51JnCpFEOQ48U37OBoQ3_S$l&=_>WWTuj~i)=<4 z(sXYzIZX2jbbuD|Q&`fp!zJN5lkXN=_osPk6FwY_${0a*Zvhp#ts$ooeML*etYG?3 zUKE`&$yn8$rpmg3H%g*hioPOxC|$PzK~EmEt!^cP2SmbU<{Ad5p1}(Xf*};*ilCi>Un4r_grQ|9fmV-)bi8X!r79^hjNlG&##5|jf=4ep!m2%_t^J}s>ss%+aqugjr z#R|1(>$D1}3kIPiHO{?G2t&Y_#}wT=o3<=Z8lb~r+UHiYT#WEEbt#ng_@zL_cs^OD zfo{nTD(oD_w*OMT95|nO^`W-}`Vv9njzmw=M-k!~hGXQ;vj)bcKU-jM_{q$(iU@JtURy^;pSGjM8o)S$6QFSqzI=9k>{y7F zx^iSHJvcU%>^go=p$bjR2A0P!{Il0PF1e`R0TM7Ht-B@0e=T`#ABhrtn5B}BCG&iH zkkf_wi`>3xi25|0 z`kr1$`MDrqlOdb)AbA-Y(6U_|gf*A-K57yzTcav#M0=z-Wlw4o;eSE`h8200nJK&L z!rstwy$bO(Xc(nntwl}Dbk&Ypt)tC{R{Q}xzs2ef#4-Ab(wO2a&KP{O1xx{pVt0#D zF^ll1^4r^`gs8@;#mpuVKeBB&BgKXU&NYus z^3B2+Ku!py z%&k|(GG7Xn;-}i}hNi@sO5D<37PV{j5ra<1vs&G?%LfeBDx$xx=t|8VR5k3P%wPF_ z+sz;zdR8~|!wtJ{D|EdzaJRaRy1{h)O&M!;RqZ%ZBt*>~9KWnZh?*NMj$ns&&iMO5 z%ieT^#OnP)T){Or$Q^VRFa`=w4^;A4p<+eYZ&Jvu@p- zS|@F#o%+B3XP9TRnMzN0wh(rGoT6cka-DHqE-d442@TYUn}6Fp`d9pV`Z|C8`uIKk zisKgk^ZGTtd3XH&ogJ+R&ZB!2%D53XN->t4kSN1!fs!y8-V!fYoUiCi+@K~KR%aTG zRh{98JB@gGXCwrR>C8_b4=t6{<$ZL^19b+$sx=uXUPAf!$1ot-FfEO_|FqdyQ0D{w zAy#Wr-%CXm>-!hhHdBl@4%)dLH)9q5b31O~cXnFbX3@t4OWY2%Tr0c>H%i3DjmT3n zi&ploR+9QAbdVH^(78x?KZ^#bwNythQAsCd%6k^`wHo%^UVCy*NwvNxtegHbYBZGpn!LkN!Po!=~ zQB8Y68Py-f0k9hrwhJ$7Mnj2Mgria8RyL+>bFU%;wSce}z9>x4RMtdzw(>OzNCtA6 z&M(t+YLCH6_H z-tI+C7R-Sxa(t($VyG&sli+G$Lr{`9N=Zoh_JDEEX&j^nViwAa++4q?iCJ#NLdgKc zgh9g0ka&doWGK%NXOuwXMrY%UbazPH9W#$~Fz(xc6nQt#EDtr#We-P|&9RbR+4c5Z zYxEnI$0z=@^Jze8=EwE2t?jE$G1Ncj}Ei>(p*N)<5%e5B8 z6G{0zSqD(#7j)JCwc#8xO=tDJj|Q(WUEgC~d#>5bps)4*+mYAfW{iI;oED=<4X7ED z%kPq6I8J*~G_9Zntbno>Dl}V|i2l5w;~#NS4Nv1jS*5f>1CkiUO?UK8Fu-h)57Isz z_5s_f5ygh@XTu?0EJW{G(JuiJN0QvXySvf)%6c>uWx|-3oXm zEU2#zhLLpOR3Q&zO`03b+)Pl|gebn-B(Fj^8Sj!!ZmVdq{b_W!NueCb#79CREW7I9 ziH>ll6@;Us2K>VP_0GwHVW!Y8j>y6Cgr#8SMd7Em#m_Rg-PA);Y{`pBf=eN9qfRSy zSFm;<#b4u7UG&{3cW|@vt~za<+0oViU*R1|KV`ltLi6vU+;eR^sxW^xBG{C z{m0+#9=x(6%w8LQ{W_IF<=C0K%kg@Hj^j(TY}TxD)OMDOZh1;>VK!<^#0NmXA#$sd z{r#S{*1uJhVj&VA1|*mdqb3k*MO|Z4{f>4>U~>LMZZ&f2YKu$ftaiH8nre0OvcROK z#FeqhHP}iwU%r{IvoDq6mBk2c-lI;~wa5w;VgY+k72m6_wd}wyGObksa_YC|HBsFL z6f`**MVCNV_y%JQV9hiSQmSofnc3!RD(m7yt*cq}Ei{5hdbtUZRC0ycTT)l|(n@xkPHz{v9H1knj>#xoM42d2p`g z$n=>5qN5%~mA0}=MP#d)r!(Wct;75>F1aP6sWJ#u#~uf?Sx#}(Z-SJau^k|qD(mXjBCyqi zxFRhhyi<>bU&6_(d}rK-gjYH=IwHh*>*_+7_FjMCMwuiKBl zfk(R=P8Ijp1M};V+t{N=&7^(W9=I(&dgL_81$UdiTyc7u^h!@QN>8lTADgdF+>XHJ zo;2UJuS(Z+ly~X;yzsFiAJlev@~a~>S{r6NI*%9J3v5KzMzU z4k+_`Jj7TaYc>RRiHj=!N*#+S-=f=<7GJV##$G#0!{icM97{X2+jQ^Fw9-rWcFh2E z2A`{3K;FTqfKdzv1RYHINBZ3Mozf@WLwVCLa$oiN)K>diLx zMw<2JT{VV?d2d6q8+NcV$%c!uR`40-4#7DE$>8uXPZ5JwB_{|n?)_GvN_WOulchGF zM@J1dD2RwqXeunz`=uxn<3FS1!KZBax20A7ErbZC*E?J{C6#%M*1&~&8myt&4 zZ`6H%1dpAD8c$XZ2#Hs4Nbm5^RlU*ZK_Im=qxiWr6eM}lZC`(dDJ~YXej)VEA_(Ny z&4oD9IvkW-&LQh=4KhwO5N!a1i*)ejWt!&9GK7M+qS^^Hqm(7Swdus>#}Ay`k29ns zl#HMq*(4QJWc>OQcNm@Caap@1MR!(|#LqJK>JhL{=gC;z75NJD=CYuUhx#c9>BzMGCd)(U{OoAv=t(jQkD zxxD3d2Qj_S zz5VA;_MW4wX;TuS!O2#U^UYmsmf1vufv9V>5y4*VT{hJU`muV?u6jK7{8e zhI~At+ z)m8mjUDbi2>yUkYk2<}mfBd>|Rmr~ZD1V%W&w~m6i8nQasWQ058Ak_Y3}**7@UO8+ z=lJ-wXo&ayTVwy7ge@5k*b0;NSG}RvZ>AKr!;6N4v?N@4vT4Dkt#5dx-7h{;f?@=e{si?8T0E;)e#zGy*wRHc4i z(3X*Q^^uqIGH?^&28^xllaa?m_GtDT8Gn2x0SEEehnv!4itPnKD3ftHg%EdW?|l%X z*R3>`wjOkm{%8ahkHEa4hT%8LBfPY9%u!@&G@xs{EL+^|V!K1eo)nB0QguPh=ejDHN_G3pO2r3J-vZc+=NkxrDxLonjg_-{pN$@ThOuI4zV&W@gjy-~^A9p~G_D#ZZPsnynBvri|Bsn1L2})Zj(qv9fqh7_*3VYa_wCz zRqQ&AYOsMUEALyQSX_A5wys$V)j{%l;BQzm9$g`&XeVdJ(6WLR5_Y)pd53P&=!Y-u z8KW>Dv`|(M!iG2Os&bq1Io2bCg*rKCrhsnxo^_4e=AoO%8n}7nH%8I0oxNhi&qE4G z&RUM5!pS@KXap&p&9J7!k~WI^I5#3th!Y>xSj{!un06XLa+j_cN}I2W-ahILYtqLm zA2izlVKD5`3|a1@;|0*9g^HG{Tl4&ib-KmBT-vWn4g;C#7W}=W1%VWA(^f)TUoBXA z;jzIMOA9H#+Q8?;$z~f3@Du>unaIsER=@myNx2p6$7Aq41D@M~AF+n`Yuh_py{HxP zS1t^1+BUA~NYIE9dGFr6adqqHC}}(1p)A*wvVbgaxdi;uzIOJcu0rcAuVA8EkUN7L)YPt8 zd5-H~tU2NRRaXC$*FbbO3m)lO9+S1#MkJWbTPw`U#PgCI%gzZG@#oO_B-r#}kU-ek z!6H=^ke9nijo1==z&bmya|R>_t25T$ zOCBlT921eioVlpXj9Gm;vPlnuW_Zx?O`rf?=f;V{m(YFcI}>gYlV~?lK=gUs@EUxn zncu{_eCk}sFK5xK81mR)zf5-<=IfgMeqnO)j4n2Kijga$oDED_SY9!*S?b!r-+Qz3 z!|G@<6a-UQ5KLo2@HMl++54DSF0YvZ0QGK&y(I+WPZ*v3*|7BO|TQCkYuZJ4>; zgYMs@ZW901>a=>0Mm>v^skgJ~Yy-Ltzg(nHxuPGK(N}v8r3a=<T zt@3bfgZQL$%tBtJM4h5jNO?e54XY{9XbCycv0Mc6Vzy4e5NeIuaVzOX-2yn8F0#}f zNx895+q=BmUNCMV89>by;lsL|A4C%xzuSM84 zp0S+94pDna(J7LmuC)W9QQA)EK4kM)OVx-Z8JB7z=V|#-x*AJ+i(@#{lf%3*xdQG; zPMz3IuI(hrFXdWUKgI*Y8eZN-KW?sIC(L2i9Go#S7&~fZkyw+pl&d-Nkl~ieD|1e1 zF)TgmN&eudZV5YV&9)bIgWdN03H)8Cl#NYZIS-g1_}9&jE>}qrZS3dsq?N8ek68L} z&_{vh!y4Xt)cQ4viQOIV2JG*=Z?>b}jGb9!wD4S4A8&K4387OpF11pEJ{HT8THnB^ zPg-yy2Dc(L*uGGEga;TR^bU882R-PL+}RaJlu&Jz=dI{CYnyBuWBui|#!_u*o#L)-vl`ZLzWK{>Es^{*OLYts%mb!DM zJ4ENiiNJ}A6Q)LJmFB)ss&Zbb3S7~z(sli+nr*=BLFtLM(Vn9y%a8rWW>DL!Scz<) zteZ)dcTJUgZF?t!p_b-7dbFwi4-S#Y7dFHPiou~M_D4Zk^GTr)e;KUylNMbNp(M0L z(|4-0UqbBIr4|W6YhAkE_}6P4Svj+ zQ##|~Dtla~w}IVT@Q@M`nr;tWs&8y;u=RRvrEW$2aP7ds(=hn$LwUC3TdsO5^~zpO zbEBL*7>Av{%UBVf@#xrPGfH+QnP%}}DN%*CtPmFV#ZR<7)Go5YH(0$> zcgCmC9Bif>?HNzhojc1bn`;~F|9~Z(N|CT`U74!h@=DcP+n|5!#nRH!*P&ovpJwR| ztNy~pgS z^?J2-Tc76I(wC2zjg^T~2TumygRDA>LM7L1YUQ8S+ zjD!5#5PeMFjh$$;zV`XL-*fx z#7+D9qNHQ(;C!p?41ad#s%>M2wp1ZUc&vplBM6yYh-{1oy^&5~<>>40A&oq(J z_PtJJujmyqSJd{sbbBSZ8=!TS>U>G!Y>tC4bqu@FJIDAHtQc6SW1r&OiQxbSjWA65$v6yoaE(r1A1g3= zMhA|YI(;iO4BLZN7~(7OBa;QJFI67;rQbgb!-H7W&5#2h6{&RrjioreY{3I>F5+G? z5SF=m27xglW}wgVRlPE95{~-i3J4V&ULiT)iRf4)9%F7c+QuVfn^p+D=gq2Qu)tE# z&8TLklFl^K}_w32Fj?qQ$UCpl>V8&zk@J7)Xs*x@8@o>5t#QeG%qST%O58QD~ ztX+k4nd6RqSywi;giVep+vwtfY5iU91Xx`Rp=f5^sDE(8Mxz=9PET6WFHA?c`P|>9 z?QaO^w!aTs;Pg#y#KTVt@1=Tp8Qg1IN0ZE&saJv{O6fNhFBPRCLR|(~erglrwS91y zf%K~Yzx(?kK>$>^LlbjU=I=4;^3tQFrRAln2cPQ@i5^oTp3>=5s?y*>Vvl^(9qf@hCxGb3hljwpK7Kw1|+MZ{75F4jH&Ku6o~!h7otz}7Tm?aRygRzES*`d>d%&(Spk}k{N0beXW=V6ef z2(C(ecQ#%{?OaU6pOn~%JHBdSh_qAVt)YzI&H`oVT-?m&=b-I`El|z`XM}WSY|ceo zyhZGb;|*xZQ&9K;73f2OS}t&sd`$}-qk@VHOyv#NQQ|rV9~yLpPJ{fe$6r}yo$qlP z^rA<+h*B-8=2h55sJn1Opm(*t7BIr>wYnS+cBJF6Dm36{r1=K)=zy;ENk zDfJ6Hr7cpHd7f37XO-t!ZD&FlLh>3fu(mD=tZh`~*QWZ~R$n_*WL?&Jfdgr-ij?Mg zN@=Y+Yi;q@?G;g=EmE2?rA;ZZWI$(`QaZAl4lmV-^=ho<+c_S=u3oEf3yK1>OVKKq z)i2`|uK~N0XP=OBfX4HQ> zsd}#@qv#;&M>HG08I7a+>=&Qgx(V6KP6iQJ9-2;6u|xp|I+%EkGx2(JG7}Ygg2