diff options
Diffstat (limited to 'Python')
45 files changed, 11813 insertions, 8768 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index ad53ba3585..e0607ba9ae 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -86,6 +86,15 @@ static char *AugAssign_fields[]={ "op", "value", }; +static PyTypeObject *AnnAssign_type; +_Py_IDENTIFIER(annotation); +_Py_IDENTIFIER(simple); +static char *AnnAssign_fields[]={ + "target", + "annotation", + "value", + "simple", +}; static PyTypeObject *For_type; _Py_IDENTIFIER(iter); _Py_IDENTIFIER(orelse); @@ -285,6 +294,18 @@ _Py_IDENTIFIER(s); static char *Str_fields[]={ "s", }; +static PyTypeObject *FormattedValue_type; +_Py_IDENTIFIER(conversion); +_Py_IDENTIFIER(format_spec); +static char *FormattedValue_fields[]={ + "value", + "conversion", + "format_spec", +}; +static PyTypeObject *JoinedStr_type; +static char *JoinedStr_fields[]={ + "values", +}; static PyTypeObject *Bytes_type; static char *Bytes_fields[]={ "s", @@ -294,6 +315,10 @@ static char *NameConstant_fields[]={ "value", }; static PyTypeObject *Ellipsis_type; +static PyTypeObject *Constant_type; +static char *Constant_fields[]={ + "value", +}; static PyTypeObject *Attribute_type; _Py_IDENTIFIER(attr); _Py_IDENTIFIER(ctx); @@ -410,10 +435,12 @@ static PyTypeObject *NotIn_type; static PyTypeObject *comprehension_type; static PyObject* ast2obj_comprehension(void*); _Py_IDENTIFIER(ifs); +_Py_IDENTIFIER(is_async); static char *comprehension_fields[]={ "target", "iter", "ifs", + "is_async", }; static PyTypeObject *excepthandler_type; static char *excepthandler_attributes[] = { @@ -450,7 +477,6 @@ static char *arg_attributes[] = { "col_offset", }; _Py_IDENTIFIER(arg); -_Py_IDENTIFIER(annotation); static char *arg_fields[]={ "arg", "annotation", @@ -697,6 +723,7 @@ static PyObject* ast2obj_object(void *o) return (PyObject*)o; } #define ast2obj_singleton ast2obj_object +#define ast2obj_constant ast2obj_object #define ast2obj_identifier ast2obj_object #define ast2obj_string ast2obj_object #define ast2obj_bytes ast2obj_object @@ -734,6 +761,19 @@ static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena) return 0; } +static int obj2ast_constant(PyObject* obj, PyObject** out, PyArena* arena) +{ + if (obj) { + if (PyArena_AddPyObject(arena, obj) < 0) { + *out = NULL; + return -1; + } + Py_INCREF(obj); + } + *out = obj; + return 0; +} + static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena) { if (!PyUnicode_CheckExact(obj) && obj != Py_None) { @@ -769,7 +809,7 @@ static int obj2ast_int(PyObject* obj, int* out, PyArena* arena) return 1; } - i = (int)PyLong_AsLong(obj); + i = _PyLong_AsInt(obj); if (i == -1 && PyErr_Occurred()) return 1; *out = i; @@ -843,6 +883,8 @@ static int init_types(void) if (!Assign_type) return 0; AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3); if (!AugAssign_type) return 0; + AnnAssign_type = make_type("AnnAssign", stmt_type, AnnAssign_fields, 4); + if (!AnnAssign_type) return 0; For_type = make_type("For", stmt_type, For_fields, 4); if (!For_type) return 0; AsyncFor_type = make_type("AsyncFor", stmt_type, AsyncFor_fields, 4); @@ -917,6 +959,11 @@ static int init_types(void) if (!Num_type) return 0; Str_type = make_type("Str", expr_type, Str_fields, 1); if (!Str_type) return 0; + FormattedValue_type = make_type("FormattedValue", expr_type, + FormattedValue_fields, 3); + if (!FormattedValue_type) return 0; + JoinedStr_type = make_type("JoinedStr", expr_type, JoinedStr_fields, 1); + if (!JoinedStr_type) return 0; Bytes_type = make_type("Bytes", expr_type, Bytes_fields, 1); if (!Bytes_type) return 0; NameConstant_type = make_type("NameConstant", expr_type, @@ -924,6 +971,8 @@ static int init_types(void) if (!NameConstant_type) return 0; Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0); if (!Ellipsis_type) return 0; + Constant_type = make_type("Constant", expr_type, Constant_fields, 1); + if (!Constant_type) return 0; Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3); if (!Attribute_type) return 0; Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3); @@ -1101,7 +1150,7 @@ static int init_types(void) NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL); if (!NotIn_singleton) return 0; comprehension_type = make_type("comprehension", &AST_type, - comprehension_fields, 3); + comprehension_fields, 4); if (!comprehension_type) return 0; if (!add_attributes(comprehension_type, NULL, 0)) return 0; excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0); @@ -1370,6 +1419,34 @@ AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int } stmt_ty +AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int + lineno, int col_offset, PyArena *arena) +{ + stmt_ty p; + if (!target) { + PyErr_SetString(PyExc_ValueError, + "field target is required for AnnAssign"); + return NULL; + } + if (!annotation) { + PyErr_SetString(PyExc_ValueError, + "field annotation is required for AnnAssign"); + return NULL; + } + p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = AnnAssign_kind; + p->v.AnnAssign.target = target; + p->v.AnnAssign.annotation = annotation; + p->v.AnnAssign.value = value; + p->v.AnnAssign.simple = simple; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +stmt_ty For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int lineno, int col_offset, PyArena *arena) { @@ -2063,6 +2140,42 @@ Str(string s, int lineno, int col_offset, PyArena *arena) } expr_ty +FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno, + int col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for FormattedValue"); + return NULL; + } + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = FormattedValue_kind; + p->v.FormattedValue.value = value; + p->v.FormattedValue.conversion = conversion; + p->v.FormattedValue.format_spec = format_spec; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty +JoinedStr(asdl_seq * values, int lineno, int col_offset, PyArena *arena) +{ + expr_ty p; + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = JoinedStr_kind; + p->v.JoinedStr.values = values; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty Bytes(bytes s, int lineno, int col_offset, PyArena *arena) { expr_ty p; @@ -2114,6 +2227,25 @@ Ellipsis(int lineno, int col_offset, PyArena *arena) } expr_ty +Constant(constant value, int lineno, int col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for Constant"); + return NULL; + } + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = Constant_kind; + p->v.Constant.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena) { @@ -2315,7 +2447,8 @@ Index(expr_ty value, PyArena *arena) } comprehension_ty -comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena) +comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, int is_async, + PyArena *arena) { comprehension_ty p; if (!target) { @@ -2334,6 +2467,7 @@ comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena) p->target = target; p->iter = iter; p->ifs = ifs; + p->is_async = is_async; return p; } @@ -2648,6 +2782,30 @@ ast2obj_stmt(void* _o) goto failed; Py_DECREF(value); break; + case AnnAssign_kind: + result = PyType_GenericNew(AnnAssign_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_expr(o->v.AnnAssign.target); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_target, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_expr(o->v.AnnAssign.annotation); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_expr(o->v.AnnAssign.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->v.AnnAssign.simple); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_simple, value) == -1) + goto failed; + Py_DECREF(value); + break; case For_kind: result = PyType_GenericNew(For_type, NULL, NULL); if (!result) goto failed; @@ -3164,6 +3322,34 @@ ast2obj_expr(void* _o) goto failed; Py_DECREF(value); break; + case FormattedValue_kind: + result = PyType_GenericNew(FormattedValue_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_expr(o->v.FormattedValue.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->v.FormattedValue.conversion); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_conversion, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_expr(o->v.FormattedValue.format_spec); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_format_spec, value) == -1) + goto failed; + Py_DECREF(value); + break; + case JoinedStr_kind: + result = PyType_GenericNew(JoinedStr_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_list(o->v.JoinedStr.values, ast2obj_expr); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_values, value) == -1) + goto failed; + Py_DECREF(value); + break; case Bytes_kind: result = PyType_GenericNew(Bytes_type, NULL, NULL); if (!result) goto failed; @@ -3186,6 +3372,15 @@ ast2obj_expr(void* _o) result = PyType_GenericNew(Ellipsis_type, NULL, NULL); if (!result) goto failed; break; + case Constant_kind: + result = PyType_GenericNew(Constant_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_constant(o->v.Constant.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + break; case Attribute_kind: result = PyType_GenericNew(Attribute_type, NULL, NULL); if (!result) goto failed; @@ -3531,6 +3726,11 @@ ast2obj_comprehension(void* _o) if (_PyObject_SetAttrId(result, &PyId_ifs, value) == -1) goto failed; Py_DECREF(value); + value = ast2obj_int(o->is_async); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_is_async, value) == -1) + goto failed; + Py_DECREF(value); return result; failed: Py_XDECREF(value); @@ -4458,6 +4658,64 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)AnnAssign_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + expr_ty target; + expr_ty annotation; + expr_ty value; + int simple; + + if (_PyObject_HasAttrId(obj, &PyId_target)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_target); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &target, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign"); + return 1; + } + if (_PyObject_HasAttrId(obj, &PyId_annotation)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_annotation); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &annotation, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign"); + return 1; + } + if (exists_not_none(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + value = NULL; + } + if (_PyObject_HasAttrId(obj, &PyId_simple)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_simple); + if (tmp == NULL) goto failed; + res = obj2ast_int(tmp, &simple, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign"); + return 1; + } + *out = AnnAssign(target, annotation, value, simple, lineno, col_offset, + arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)For_type); if (isinstance == -1) { return 1; @@ -6205,6 +6463,90 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)FormattedValue_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + expr_ty value; + int conversion; + expr_ty format_spec; + + if (_PyObject_HasAttrId(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue"); + return 1; + } + if (exists_not_none(obj, &PyId_conversion)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_conversion); + if (tmp == NULL) goto failed; + res = obj2ast_int(tmp, &conversion, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + conversion = 0; + } + if (exists_not_none(obj, &PyId_format_spec)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_format_spec); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &format_spec, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + format_spec = NULL; + } + *out = FormattedValue(value, conversion, format_spec, lineno, + col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + isinstance = PyObject_IsInstance(obj, (PyObject*)JoinedStr_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + asdl_seq* values; + + if (_PyObject_HasAttrId(obj, &PyId_values)) { + int res; + Py_ssize_t len; + Py_ssize_t i; + tmp = _PyObject_GetAttrId(obj, &PyId_values); + if (tmp == NULL) goto failed; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name); + goto failed; + } + len = PyList_GET_SIZE(tmp); + values = _Py_asdl_seq_new(len, arena); + if (values == NULL) goto failed; + for (i = 0; i < len; i++) { + expr_ty value; + res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); + if (res != 0) goto failed; + if (len != PyList_GET_SIZE(tmp)) { + PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration"); + goto failed; + } + asdl_seq_SET(values, i, value); + } + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr"); + return 1; + } + *out = JoinedStr(values, lineno, col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)Bytes_type); if (isinstance == -1) { return 1; @@ -6259,6 +6601,28 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)Constant_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + constant value; + + if (_PyObject_HasAttrId(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_constant(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant"); + return 1; + } + *out = Constant(value, lineno, col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type); if (isinstance == -1) { return 1; @@ -6987,6 +7351,7 @@ obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena) expr_ty target; expr_ty iter; asdl_seq* ifs; + int is_async; if (_PyObject_HasAttrId(obj, &PyId_target)) { int res; @@ -7038,7 +7403,18 @@ obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension"); return 1; } - *out = comprehension(target, iter, ifs, arena); + if (_PyObject_HasAttrId(obj, &PyId_is_async)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_is_async); + if (tmp == NULL) goto failed; + res = obj2ast_int(tmp, &is_async, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension"); + return 1; + } + *out = comprehension(target, iter, ifs, is_async, arena); return 0; failed: Py_XDECREF(tmp); @@ -7502,6 +7878,8 @@ PyInit__ast(void) NULL; if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) < 0) return NULL; + if (PyDict_SetItemString(d, "AnnAssign", (PyObject*)AnnAssign_type) < 0) + return NULL; if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return NULL; if (PyDict_SetItemString(d, "AsyncFor", (PyObject*)AsyncFor_type) < 0) return NULL; @@ -7562,12 +7940,18 @@ PyInit__ast(void) if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return NULL; if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return NULL; if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return NULL; + if (PyDict_SetItemString(d, "FormattedValue", + (PyObject*)FormattedValue_type) < 0) return NULL; + if (PyDict_SetItemString(d, "JoinedStr", (PyObject*)JoinedStr_type) < 0) + return NULL; if (PyDict_SetItemString(d, "Bytes", (PyObject*)Bytes_type) < 0) return NULL; if (PyDict_SetItemString(d, "NameConstant", (PyObject*)NameConstant_type) < 0) return NULL; if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0) return NULL; + if (PyDict_SetItemString(d, "Constant", (PyObject*)Constant_type) < 0) + return NULL; if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) < 0) return NULL; if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) < 0) diff --git a/Python/_warnings.c b/Python/_warnings.c index 978bad135c..40f5c8ecfc 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -40,12 +40,11 @@ check_matched(PyObject *obj, PyObject *arg) A NULL return value can mean false or an error. */ static PyObject * -get_warnings_attr(const char *attr) +get_warnings_attr(const char *attr, int try_import) { static PyObject *warnings_str = NULL; PyObject *all_modules; - PyObject *warnings_module; - int result; + PyObject *warnings_module, *obj; if (warnings_str == NULL) { warnings_str = PyUnicode_InternFromString("warnings"); @@ -53,15 +52,34 @@ get_warnings_attr(const char *attr) return NULL; } - all_modules = PyImport_GetModuleDict(); - result = PyDict_Contains(all_modules, warnings_str); - if (result == -1 || result == 0) - return NULL; + /* don't try to import after the start of the Python finallization */ + if (try_import && _Py_Finalizing == NULL) { + warnings_module = PyImport_Import(warnings_str); + if (warnings_module == NULL) { + /* Fallback to the C implementation if we cannot get + the Python implementation */ + PyErr_Clear(); + return NULL; + } + } + else { + all_modules = PyImport_GetModuleDict(); - warnings_module = PyDict_GetItem(all_modules, warnings_str); - if (!PyObject_HasAttrString(warnings_module, attr)) + warnings_module = PyDict_GetItem(all_modules, warnings_str); + if (warnings_module == NULL) return NULL; - return PyObject_GetAttrString(warnings_module, attr); + + Py_INCREF(warnings_module); + } + + if (!PyObject_HasAttrString(warnings_module, attr)) { + Py_DECREF(warnings_module); + return NULL; + } + + obj = PyObject_GetAttrString(warnings_module, attr); + Py_DECREF(warnings_module); + return obj; } @@ -70,7 +88,7 @@ get_once_registry(void) { PyObject *registry; - registry = get_warnings_attr("onceregistry"); + registry = get_warnings_attr("onceregistry", 0); if (registry == NULL) { if (PyErr_Occurred()) return NULL; @@ -87,7 +105,7 @@ get_default_action(void) { PyObject *default_action; - default_action = get_warnings_attr("defaultaction"); + default_action = get_warnings_attr("defaultaction", 0); if (default_action == NULL) { if (PyErr_Occurred()) { return NULL; @@ -110,7 +128,7 @@ get_filter(PyObject *category, PyObject *text, Py_ssize_t lineno, Py_ssize_t i; PyObject *warnings_filters; - warnings_filters = get_warnings_attr("filters"); + warnings_filters = get_warnings_attr("filters", 0); if (warnings_filters == NULL) { if (PyErr_Occurred()) return NULL; @@ -287,8 +305,8 @@ update_registry(PyObject *registry, PyObject *text, PyObject *category, } static void -show_warning(PyObject *filename, int lineno, PyObject *text, PyObject - *category, PyObject *sourceline) +show_warning(PyObject *filename, int lineno, PyObject *text, + PyObject *category, PyObject *sourceline) { PyObject *f_stderr; PyObject *name; @@ -359,10 +377,64 @@ error: PyErr_Clear(); } +static int +call_show_warning(PyObject *category, PyObject *text, PyObject *message, + PyObject *filename, int lineno, PyObject *lineno_obj, + PyObject *sourceline, PyObject *source) +{ + PyObject *show_fn, *msg, *res, *warnmsg_cls = NULL; + + /* If the source parameter is set, try to get the Python implementation. + The Python implementation is able to log the traceback where the source + was allocated, whereas the C implementation doesnt. */ + show_fn = get_warnings_attr("_showwarnmsg", source != NULL); + if (show_fn == NULL) { + if (PyErr_Occurred()) + return -1; + show_warning(filename, lineno, text, category, sourceline); + return 0; + } + + if (!PyCallable_Check(show_fn)) { + PyErr_SetString(PyExc_TypeError, + "warnings._showwarnmsg() must be set to a callable"); + goto error; + } + + warnmsg_cls = get_warnings_attr("WarningMessage", 0); + if (warnmsg_cls == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "unable to get warnings.WarningMessage"); + goto error; + } + + msg = PyObject_CallFunctionObjArgs(warnmsg_cls, message, category, + filename, lineno_obj, Py_None, Py_None, source, + NULL); + Py_DECREF(warnmsg_cls); + if (msg == NULL) + goto error; + + res = PyObject_CallFunctionObjArgs(show_fn, msg, NULL); + Py_DECREF(show_fn); + Py_DECREF(msg); + + if (res == NULL) + return -1; + + Py_DECREF(res); + return 0; + +error: + Py_XDECREF(show_fn); + return -1; +} + static PyObject * warn_explicit(PyObject *category, PyObject *message, PyObject *filename, int lineno, - PyObject *module, PyObject *registry, PyObject *sourceline) + PyObject *module, PyObject *registry, PyObject *sourceline, + PyObject *source) { PyObject *key = NULL, *text = NULL, *result = NULL, *lineno_obj = NULL; PyObject *item = NULL; @@ -470,31 +542,9 @@ warn_explicit(PyObject *category, PyObject *message, if (rc == 1) /* Already warned for this module. */ goto return_none; if (rc == 0) { - PyObject *show_fxn = get_warnings_attr("showwarning"); - if (show_fxn == NULL) { - if (PyErr_Occurred()) - goto cleanup; - show_warning(filename, lineno, text, category, sourceline); - } - else { - PyObject *res; - - if (!PyCallable_Check(show_fxn)) { - PyErr_SetString(PyExc_TypeError, - "warnings.showwarning() must be set to a " - "callable"); - Py_DECREF(show_fxn); - goto cleanup; - } - - res = PyObject_CallFunctionObjArgs(show_fxn, message, category, - filename, lineno_obj, - NULL); - Py_DECREF(show_fxn); - Py_XDECREF(res); - if (res == NULL) - goto cleanup; - } + if (call_show_warning(category, text, message, filename, lineno, + lineno_obj, sourceline, source) < 0) + goto cleanup; } else /* if (rc == -1) */ goto cleanup; @@ -738,7 +788,8 @@ get_category(PyObject *message, PyObject *category) } static PyObject * -do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) +do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level, + PyObject *source) { PyObject *filename, *module, *registry, *res; int lineno; @@ -747,7 +798,7 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) return NULL; res = warn_explicit(category, message, filename, lineno, module, registry, - NULL); + NULL, source); Py_DECREF(filename); Py_DECREF(registry); Py_DECREF(module); @@ -757,25 +808,27 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) static PyObject * warnings_warn(PyObject *self, PyObject *args, PyObject *kwds) { - static char *kw_list[] = { "message", "category", "stacklevel", 0 }; - PyObject *message, *category = NULL; + static char *kw_list[] = {"message", "category", "stacklevel", + "source", NULL}; + PyObject *message, *category = NULL, *source = NULL; Py_ssize_t stack_level = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|On:warn", kw_list, - &message, &category, &stack_level)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OnO:warn", kw_list, + &message, &category, &stack_level, &source)) return NULL; category = get_category(message, category); if (category == NULL) return NULL; - return do_warn(message, category, stack_level); + return do_warn(message, category, stack_level, source); } static PyObject * warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) { static char *kwd_list[] = {"message", "category", "filename", "lineno", - "module", "registry", "module_globals", 0}; + "module", "registry", "module_globals", + "source", 0}; PyObject *message; PyObject *category; PyObject *filename; @@ -783,10 +836,11 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) PyObject *module = NULL; PyObject *registry = NULL; PyObject *module_globals = NULL; + PyObject *sourceobj = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOO:warn_explicit", + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOOO:warn_explicit", kwd_list, &message, &category, &filename, &lineno, &module, - ®istry, &module_globals)) + ®istry, &module_globals, &sourceobj)) return NULL; if (module_globals) { @@ -842,14 +896,14 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) /* Handle the warning. */ returned = warn_explicit(category, message, filename, lineno, module, - registry, source_line); + registry, source_line, sourceobj); Py_DECREF(source_list); return returned; } standard_call: return warn_explicit(category, message, filename, lineno, module, - registry, NULL); + registry, NULL, sourceobj); } static PyObject * @@ -864,14 +918,14 @@ warnings_filters_mutated(PyObject *self, PyObject *args) static int warn_unicode(PyObject *category, PyObject *message, - Py_ssize_t stack_level) + Py_ssize_t stack_level, PyObject *source) { PyObject *res; if (category == NULL) category = PyExc_RuntimeWarning; - res = do_warn(message, category, stack_level); + res = do_warn(message, category, stack_level, source); if (res == NULL) return -1; Py_DECREF(res); @@ -879,12 +933,28 @@ warn_unicode(PyObject *category, PyObject *message, return 0; } +static int +_PyErr_WarnFormatV(PyObject *source, + PyObject *category, Py_ssize_t stack_level, + const char *format, va_list vargs) +{ + PyObject *message; + int res; + + message = PyUnicode_FromFormatV(format, vargs); + if (message == NULL) + return -1; + + res = warn_unicode(category, message, stack_level, source); + Py_DECREF(message); + return res; +} + int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...) { - int ret; - PyObject *message; + int res; va_list vargs; #ifdef HAVE_STDARG_PROTOTYPES @@ -892,25 +962,38 @@ PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, #else va_start(vargs); #endif - message = PyUnicode_FromFormatV(format, vargs); - if (message != NULL) { - ret = warn_unicode(category, message, stack_level); - Py_DECREF(message); - } - else - ret = -1; + res = _PyErr_WarnFormatV(NULL, category, stack_level, format, vargs); va_end(vargs); - return ret; + return res; } int +PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level, + const char *format, ...) +{ + int res; + va_list vargs; + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, format); +#else + va_start(vargs); +#endif + res = _PyErr_WarnFormatV(source, PyExc_ResourceWarning, + stack_level, format, vargs); + va_end(vargs); + return res; +} + + +int PyErr_WarnEx(PyObject *category, const char *text, Py_ssize_t stack_level) { int ret; PyObject *message = PyUnicode_FromString(text); if (message == NULL) return -1; - ret = warn_unicode(category, message, stack_level); + ret = warn_unicode(category, message, stack_level, NULL); Py_DECREF(message); return ret; } @@ -921,7 +1004,7 @@ PyErr_WarnEx(PyObject *category, const char *text, Py_ssize_t stack_level) #undef PyErr_Warn PyAPI_FUNC(int) -PyErr_Warn(PyObject *category, char *text) +PyErr_Warn(PyObject *category, const char *text) { return PyErr_WarnEx(category, text, 1); } @@ -936,7 +1019,7 @@ PyErr_WarnExplicitObject(PyObject *category, PyObject *message, if (category == NULL) category = PyExc_RuntimeWarning; res = warn_explicit(category, message, filename, lineno, - module, registry, NULL); + module, registry, NULL, NULL); if (res == NULL) return -1; Py_DECREF(res); @@ -1000,7 +1083,7 @@ PyErr_WarnExplicitFormat(PyObject *category, if (message != NULL) { PyObject *res; res = warn_explicit(category, message, filename, lineno, - module, registry, NULL); + module, registry, NULL, NULL); Py_DECREF(message); if (res != NULL) { Py_DECREF(res); diff --git a/Python/asdl.c b/Python/asdl.c index df387b2119..c211078118 100644 --- a/Python/asdl.c +++ b/Python/asdl.c @@ -9,14 +9,14 @@ _Py_asdl_seq_new(Py_ssize_t size, PyArena *arena) /* check size is sane */ if (size < 0 || - (size && (((size_t)size - 1) > (PY_SIZE_MAX / sizeof(void *))))) { + (size && (((size_t)size - 1) > (SIZE_MAX / sizeof(void *))))) { PyErr_NoMemory(); return NULL; } n = (size ? (sizeof(void *) * (size - 1)) : 0); /* check if size can be added safely */ - if (n > PY_SIZE_MAX - sizeof(asdl_seq)) { + if (n > SIZE_MAX - sizeof(asdl_seq)) { PyErr_NoMemory(); return NULL; } @@ -40,14 +40,14 @@ _Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena) /* check size is sane */ if (size < 0 || - (size && (((size_t)size - 1) > (PY_SIZE_MAX / sizeof(void *))))) { + (size && (((size_t)size - 1) > (SIZE_MAX / sizeof(void *))))) { PyErr_NoMemory(); return NULL; } n = (size ? (sizeof(void *) * (size - 1)) : 0); /* check if size can be added safely */ - if (n > PY_SIZE_MAX - sizeof(asdl_seq)) { + if (n > SIZE_MAX - sizeof(asdl_seq)) { PyErr_NoMemory(); return NULL; } diff --git a/Python/ast.c b/Python/ast.c index 6da33f73a0..76daf6f446 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -132,6 +132,52 @@ validate_arguments(arguments_ty args) } static int +validate_constant(PyObject *value) +{ + if (value == Py_None || value == Py_Ellipsis) + return 1; + + if (PyLong_CheckExact(value) + || PyFloat_CheckExact(value) + || PyComplex_CheckExact(value) + || PyBool_Check(value) + || PyUnicode_CheckExact(value) + || PyBytes_CheckExact(value)) + return 1; + + if (PyTuple_CheckExact(value) || PyFrozenSet_CheckExact(value)) { + PyObject *it; + + it = PyObject_GetIter(value); + if (it == NULL) + return 0; + + while (1) { + PyObject *item = PyIter_Next(it); + if (item == NULL) { + if (PyErr_Occurred()) { + Py_DECREF(it); + return 0; + } + break; + } + + if (!validate_constant(item)) { + Py_DECREF(it); + Py_DECREF(item); + return 0; + } + Py_DECREF(item); + } + + Py_DECREF(it); + return 1; + } + + return 0; +} + +static int validate_expr(expr_ty exp, expr_context_ty ctx) { int check_ctx = 1; @@ -240,6 +286,14 @@ validate_expr(expr_ty exp, expr_context_ty ctx) return validate_expr(exp->v.Call.func, Load) && validate_exprs(exp->v.Call.args, Load, 0) && validate_keywords(exp->v.Call.keywords); + case Constant_kind: + if (!validate_constant(exp->v.Constant.value)) { + PyErr_Format(PyExc_TypeError, + "got an invalid type in Constant: %s", + Py_TYPE(exp->v.Constant.value)->tp_name); + return 0; + } + return 1; case Num_kind: { PyObject *n = exp->v.Num.n; if (!PyLong_CheckExact(n) && !PyFloat_CheckExact(n) && @@ -257,6 +311,14 @@ validate_expr(expr_ty exp, expr_context_ty ctx) } return 1; } + case JoinedStr_kind: + return validate_exprs(exp->v.JoinedStr.values, Load, 0); + case FormattedValue_kind: + if (validate_expr(exp->v.FormattedValue.value, Load) == 0) + return 0; + if (exp->v.FormattedValue.format_spec) + return validate_expr(exp->v.FormattedValue.format_spec, Load); + return 1; case Bytes_kind: { PyObject *b = exp->v.Bytes.s; if (!PyBytes_CheckExact(b)) { @@ -335,6 +397,17 @@ validate_stmt(stmt_ty stmt) case AugAssign_kind: return validate_expr(stmt->v.AugAssign.target, Store) && validate_expr(stmt->v.AugAssign.value, Load); + case AnnAssign_kind: + if (stmt->v.AnnAssign.target->kind != Name_kind && + stmt->v.AnnAssign.simple) { + PyErr_SetString(PyExc_TypeError, + "AnnAssign with simple non-Name target"); + return 0; + } + return validate_expr(stmt->v.AnnAssign.target, Store) && + (!stmt->v.AnnAssign.value || + validate_expr(stmt->v.AnnAssign.value, Load)) && + validate_expr(stmt->v.AnnAssign.annotation, Load); case For_kind: return validate_expr(stmt->v.For.target, Store) && validate_expr(stmt->v.For.iter, Load) && @@ -413,8 +486,8 @@ validate_stmt(stmt_ty stmt) case Import_kind: return validate_nonempty_seq(stmt->v.Import.names, "names", "Import"); case ImportFrom_kind: - if (stmt->v.ImportFrom.level < -1) { - PyErr_SetString(PyExc_ValueError, "ImportFrom level less than -1"); + if (stmt->v.ImportFrom.level < 0) { + PyErr_SetString(PyExc_ValueError, "Negative ImportFrom level"); return 0; } return validate_nonempty_seq(stmt->v.ImportFrom.names, "names", "ImportFrom"); @@ -512,8 +585,7 @@ PyAST_Validate(mod_ty mod) /* Data structure used internally */ struct compiling { - char *c_encoding; /* source encoding */ - PyArena *c_arena; /* arena for allocating memeory */ + PyArena *c_arena; /* Arena for allocating memory. */ PyObject *c_filename; /* filename */ PyObject *c_normalize; /* Normalization function from unicodedata. */ PyObject *c_normalize_args; /* Normalization argument tuple. */ @@ -535,9 +607,7 @@ static stmt_ty ast_for_for_stmt(struct compiling *, const node *, int); static expr_ty ast_for_call(struct compiling *, const node *, expr_ty); static PyObject *parsenumber(struct compiling *, const char *); -static PyObject *parsestr(struct compiling *, const node *n, int *bytesmode); -static PyObject *parsestrplus(struct compiling *, const node *n, - int *bytesmode); +static expr_ty parsestrplus(struct compiling *, const node *n); #define COMP_GENEXP 0 #define COMP_LISTCOMP 1 @@ -701,23 +771,11 @@ PyAST_FromNodeObject(const node *n, PyCompilerFlags *flags, c.c_arena = arena; /* borrowed reference */ c.c_filename = filename; - c.c_normalize = c.c_normalize_args = NULL; - if (flags && flags->cf_flags & PyCF_SOURCE_IS_UTF8) { - c.c_encoding = "utf-8"; - if (TYPE(n) == encoding_decl) { -#if 0 - ast_error(c, n, "encoding declaration in Unicode string"); - goto out; -#endif - n = CHILD(n, 0); - } - } else if (TYPE(n) == encoding_decl) { - c.c_encoding = STR(n); + c.c_normalize = NULL; + c.c_normalize_args = NULL; + + if (TYPE(n) == encoding_decl) n = CHILD(n, 0); - } else { - /* PEP 3120 */ - c.c_encoding = "utf-8"; - } k = 0; switch (TYPE(n)) { @@ -864,7 +922,7 @@ get_operator(const node *n) } } -static const char* FORBIDDEN[] = { +static const char * const FORBIDDEN[] = { "None", "True", "False", @@ -880,8 +938,28 @@ forbidden_name(struct compiling *c, identifier name, const node *n, ast_error(c, n, "assignment to keyword"); return 1; } + if (PyUnicode_CompareWithASCIIString(name, "async") == 0 || + PyUnicode_CompareWithASCIIString(name, "await") == 0) + { + PyObject *message = PyUnicode_FromString( + "'async' and 'await' will become reserved keywords" + " in Python 3.7"); + if (message == NULL) { + return 1; + } + if (PyErr_WarnExplicitObject( + PyExc_DeprecationWarning, + message, + c->c_filename, + LINENO(n), + NULL, + NULL) < 0) + { + return 1; + } + } if (full_checks) { - const char **p; + const char * const *p; for (p = FORBIDDEN; *p; p++) { if (PyUnicode_CompareWithASCIIString(name, *p) == 0) { ast_error(c, n, "assignment to keyword"); @@ -943,13 +1021,8 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) s = e->v.List.elts; break; case Tuple_kind: - if (asdl_seq_LEN(e->v.Tuple.elts)) { - e->v.Tuple.ctx = ctx; - s = e->v.Tuple.elts; - } - else { - expr_name = "()"; - } + e->v.Tuple.ctx = ctx; + s = e->v.Tuple.elts; break; case Lambda_kind: expr_name = "lambda"; @@ -986,6 +1059,8 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) case Num_kind: case Str_kind: case Bytes_kind: + case JoinedStr_kind: + case FormattedValue_kind: expr_name = "literal"; break; case NameConstant_kind: @@ -1259,16 +1334,20 @@ ast_for_arguments(struct compiling *c, const node *n) and varargslist (lambda definition). parameters: '(' [typedargslist] ')' - typedargslist: ((tfpdef ['=' test] ',')* - ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] - | '**' tfpdef) - | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) + typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) tfpdef: NAME [':' test] - varargslist: ((vfpdef ['=' test] ',')* - ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] - | '**' vfpdef) - | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) + varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] + ) vfpdef: NAME + */ int i, j, k, nposargs = 0, nkwonlyargs = 0; int nposdefaults = 0, found_default = 0; @@ -1370,7 +1449,8 @@ ast_for_arguments(struct compiling *c, const node *n) i += 2; /* the name and the comma */ break; case STAR: - if (i+1 >= NCH(n)) { + if (i+1 >= NCH(n) || + (i+2 == NCH(n) && TYPE(CHILD(n, i+1)) == COMMA)) { ast_error(c, CHILD(n, i), "named arguments must follow bare *"); return NULL; @@ -1687,14 +1767,21 @@ static int count_comp_fors(struct compiling *c, const node *n) { int n_fors = 0; + int is_async; count_comp_for: + is_async = 0; n_fors++; REQ(n, comp_for); - if (NCH(n) == 5) - n = CHILD(n, 4); - else + if (TYPE(CHILD(n, 0)) == ASYNC) { + is_async = 1; + } + if (NCH(n) == (5 + is_async)) { + n = CHILD(n, 4 + is_async); + } + else { return n_fors; + } count_comp_iter: REQ(n, comp_iter); n = CHILD(n, 0); @@ -1757,14 +1844,19 @@ ast_for_comprehension(struct compiling *c, const node *n) asdl_seq *t; expr_ty expression, first; node *for_ch; + int is_async = 0; REQ(n, comp_for); - for_ch = CHILD(n, 1); + if (TYPE(CHILD(n, 0)) == ASYNC) { + is_async = 1; + } + + for_ch = CHILD(n, 1 + is_async); t = ast_for_exprlist(c, for_ch, Store); if (!t) return NULL; - expression = ast_for_expr(c, CHILD(n, 3)); + expression = ast_for_expr(c, CHILD(n, 3 + is_async)); if (!expression) return NULL; @@ -1772,19 +1864,20 @@ ast_for_comprehension(struct compiling *c, const node *n) (x for x, in ...) has 1 element in t, but still requires a Tuple. */ first = (expr_ty)asdl_seq_GET(t, 0); if (NCH(for_ch) == 1) - comp = comprehension(first, expression, NULL, c->c_arena); + comp = comprehension(first, expression, NULL, + is_async, c->c_arena); else - comp = comprehension(Tuple(t, Store, first->lineno, first->col_offset, - c->c_arena), - expression, NULL, c->c_arena); + comp = comprehension(Tuple(t, Store, first->lineno, + first->col_offset, c->c_arena), + expression, NULL, is_async, c->c_arena); if (!comp) return NULL; - if (NCH(n) == 5) { + if (NCH(n) == (5 + is_async)) { int j, n_ifs; asdl_seq *ifs; - n = CHILD(n, 4); + n = CHILD(n, 4 + is_async); n_ifs = count_comp_ifs(c, n); if (n_ifs == -1) return NULL; @@ -1993,7 +2086,6 @@ ast_for_atom(struct compiling *c, const node *n) | '...' | 'None' | 'True' | 'False' */ node *ch = CHILD(n, 0); - int bytesmode = 0; switch (TYPE(ch)) { case NAME: { @@ -2015,7 +2107,7 @@ ast_for_atom(struct compiling *c, const node *n) return Name(name, Load, LINENO(n), n->n_col_offset, c->c_arena); } case STRING: { - PyObject *str = parsestrplus(c, n, &bytesmode); + expr_ty str = parsestrplus(c, n); if (!str) { const char *errtype = NULL; if (PyErr_ExceptionMatches(PyExc_UnicodeError)) @@ -2032,6 +2124,7 @@ ast_for_atom(struct compiling *c, const node *n) PyOS_snprintf(buf, sizeof(buf), "(%s) %s", errtype, s); Py_DECREF(errstr); } else { + PyErr_Clear(); PyOS_snprintf(buf, sizeof(buf), "(%s) unknown error", errtype); } ast_error(c, n, buf); @@ -2041,14 +2134,7 @@ ast_for_atom(struct compiling *c, const node *n) } return NULL; } - if (PyArena_AddPyObject(c->c_arena, str) < 0) { - Py_DECREF(str); - return NULL; - } - if (bytesmode) - return Bytes(str, LINENO(n), n->n_col_offset, c->c_arena); - else - return Str(str, LINENO(n), n->n_col_offset, c->c_arena); + return str; } case NUMBER: { PyObject *pynum = parsenumber(c, STR(ch)); @@ -2805,8 +2891,9 @@ static stmt_ty ast_for_expr_stmt(struct compiling *c, const node *n) { REQ(n, expr_stmt); - /* expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) - | ('=' (yield_expr|testlist))*) + /* expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) + annassign: ':' test ['=' test] testlist_star_expr: (test|star_expr) (',' test|star_expr)* [','] augassign: '+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=' @@ -2858,6 +2945,76 @@ ast_for_expr_stmt(struct compiling *c, const node *n) return AugAssign(expr1, newoperator, expr2, LINENO(n), n->n_col_offset, c->c_arena); } + else if (TYPE(CHILD(n, 1)) == annassign) { + expr_ty expr1, expr2, expr3; + node *ch = CHILD(n, 0); + node *deep, *ann = CHILD(n, 1); + int simple = 1; + + /* we keep track of parens to qualify (x) as expression not name */ + deep = ch; + while (NCH(deep) == 1) { + deep = CHILD(deep, 0); + } + if (NCH(deep) > 0 && TYPE(CHILD(deep, 0)) == LPAR) { + simple = 0; + } + expr1 = ast_for_testlist(c, ch); + if (!expr1) { + return NULL; + } + switch (expr1->kind) { + case Name_kind: + if (forbidden_name(c, expr1->v.Name.id, n, 0)) { + return NULL; + } + expr1->v.Name.ctx = Store; + break; + case Attribute_kind: + if (forbidden_name(c, expr1->v.Attribute.attr, n, 1)) { + return NULL; + } + expr1->v.Attribute.ctx = Store; + break; + case Subscript_kind: + expr1->v.Subscript.ctx = Store; + break; + case List_kind: + ast_error(c, ch, + "only single target (not list) can be annotated"); + return NULL; + case Tuple_kind: + ast_error(c, ch, + "only single target (not tuple) can be annotated"); + return NULL; + default: + ast_error(c, ch, + "illegal target for annotation"); + return NULL; + } + + if (expr1->kind != Name_kind) { + simple = 0; + } + ch = CHILD(ann, 1); + expr2 = ast_for_expr(c, ch); + if (!expr2) { + return NULL; + } + if (NCH(ann) == 2) { + return AnnAssign(expr1, expr2, NULL, simple, + LINENO(n), n->n_col_offset, c->c_arena); + } + else { + ch = CHILD(ann, 3); + expr3 = ast_for_expr(c, ch); + if (!expr3) { + return NULL; + } + return AnnAssign(expr1, expr2, expr3, simple, + LINENO(n), n->n_col_offset, c->c_arena); + } + } else { int i; asdl_seq *targets; @@ -2992,9 +3149,6 @@ ast_for_flow_stmt(struct compiling *c, const node *n) "unexpected flow_stmt: %d", TYPE(ch)); return NULL; } - - PyErr_SetString(PyExc_SystemError, "unhandled flow statement"); - return NULL; } static alias_ty @@ -3208,14 +3362,14 @@ ast_for_import_stmt(struct compiling *c, const node *n) alias_ty import_alias = alias_for_import_name(c, n, 1); if (!import_alias) return NULL; - asdl_seq_SET(aliases, 0, import_alias); + asdl_seq_SET(aliases, 0, import_alias); } else { for (i = 0; i < NCH(n); i += 2) { alias_ty import_alias = alias_for_import_name(c, CHILD(n, i), 1); if (!import_alias) return NULL; - asdl_seq_SET(aliases, i / 2, import_alias); + asdl_seq_SET(aliases, i / 2, import_alias); } } if (mod != NULL) @@ -3881,7 +4035,7 @@ ast_for_stmt(struct compiling *c, const node *n) } static PyObject * -parsenumber(struct compiling *c, const char *s) +parsenumber_raw(struct compiling *c, const char *s) { const char *end; long x; @@ -3924,6 +4078,31 @@ parsenumber(struct compiling *c, const char *s) } static PyObject * +parsenumber(struct compiling *c, const char *s) +{ + char *dup, *end; + PyObject *res = NULL; + + assert(s != NULL); + + if (strchr(s, '_') == NULL) { + return parsenumber_raw(c, s); + } + /* Create a duplicate without underscores. */ + dup = PyMem_Malloc(strlen(s) + 1); + end = dup; + for (; *s; s++) { + if (*s != '_') { + *end++ = *s; + } + } + *end = '\0'; + res = parsenumber_raw(c, dup); + PyMem_Free(dup); + return res; +} + +static PyObject * decode_utf8(struct compiling *c, const char **sPtr, const char *end) { const char *s, *t; @@ -3935,84 +4114,862 @@ decode_utf8(struct compiling *c, const char **sPtr, const char *end) } static PyObject * -decode_unicode(struct compiling *c, const char *s, size_t len, int rawmode, const char *encoding) +decode_unicode_with_escapes(struct compiling *c, const char *s, size_t len) { PyObject *v, *u; char *buf; char *p; const char *end; - if (encoding == NULL) { - u = NULL; - } else { - /* check for integer overflow */ - if (len > PY_SIZE_MAX / 6) - return NULL; - /* "ä" (2 bytes) may become "\U000000E4" (10 bytes), or 1:5 - "\ä" (3 bytes) may become "\u005c\U000000E4" (16 bytes), or ~1:6 */ - u = PyBytes_FromStringAndSize((char *)NULL, len * 6); - if (u == NULL) - return NULL; - p = buf = PyBytes_AsString(u); - end = s + len; - while (s < end) { - if (*s == '\\') { - *p++ = *s++; - if (*s & 0x80) { - strcpy(p, "u005c"); - p += 5; - } + /* check for integer overflow */ + if (len > SIZE_MAX / 6) + return NULL; + /* "ä" (2 bytes) may become "\U000000E4" (10 bytes), or 1:5 + "\ä" (3 bytes) may become "\u005c\U000000E4" (16 bytes), or ~1:6 */ + u = PyBytes_FromStringAndSize((char *)NULL, len * 6); + if (u == NULL) + return NULL; + p = buf = PyBytes_AsString(u); + end = s + len; + while (s < end) { + if (*s == '\\') { + *p++ = *s++; + if (*s & 0x80) { + strcpy(p, "u005c"); + p += 5; } - if (*s & 0x80) { /* XXX inefficient */ - PyObject *w; - int kind; - void *data; - Py_ssize_t len, i; - w = decode_utf8(c, &s, end); - if (w == NULL) { - Py_DECREF(u); - return NULL; + } + if (*s & 0x80) { /* XXX inefficient */ + PyObject *w; + int kind; + void *data; + Py_ssize_t len, i; + w = decode_utf8(c, &s, end); + if (w == NULL) { + Py_DECREF(u); + return NULL; + } + kind = PyUnicode_KIND(w); + data = PyUnicode_DATA(w); + len = PyUnicode_GET_LENGTH(w); + for (i = 0; i < len; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + sprintf(p, "\\U%08x", chr); + p += 10; + } + /* Should be impossible to overflow */ + assert(p - buf <= Py_SIZE(u)); + Py_DECREF(w); + } else { + *p++ = *s++; + } + } + len = p - buf; + s = buf; + + v = PyUnicode_DecodeUnicodeEscape(s, len, NULL); + Py_XDECREF(u); + return v; +} + +/* Compile this expression in to an expr_ty. Add parens around the + expression, in order to allow leading spaces in the expression. */ +static expr_ty +fstring_compile_expr(const char *expr_start, const char *expr_end, + struct compiling *c, const node *n) + +{ + int all_whitespace = 1; + int kind; + void *data; + PyCompilerFlags cf; + mod_ty mod; + char *str; + PyObject *o; + Py_ssize_t len; + Py_ssize_t i; + + assert(expr_end >= expr_start); + assert(*(expr_start-1) == '{'); + assert(*expr_end == '}' || *expr_end == '!' || *expr_end == ':'); + + /* We know there are no escapes here, because backslashes are not allowed, + and we know it's utf-8 encoded (per PEP 263). But, in order to check + that each char is not whitespace, we need to decode it to unicode. + Which is unfortunate, but such is life. */ + + /* If the substring is all whitespace, it's an error. We need to catch + this here, and not when we call PyParser_ASTFromString, because turning + the expression '' in to '()' would go from being invalid to valid. */ + /* Note that this code says an empty string is all whitespace. That's + important. There's a test for it: f'{}'. */ + o = PyUnicode_DecodeUTF8(expr_start, expr_end-expr_start, NULL); + if (o == NULL) + return NULL; + len = PyUnicode_GET_LENGTH(o); + kind = PyUnicode_KIND(o); + data = PyUnicode_DATA(o); + for (i = 0; i < len; i++) { + if (!Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, i))) { + all_whitespace = 0; + break; + } + } + Py_DECREF(o); + if (all_whitespace) { + ast_error(c, n, "f-string: empty expression not allowed"); + return NULL; + } + + /* Reuse len to be the length of the utf-8 input string. */ + len = expr_end - expr_start; + /* Allocate 3 extra bytes: open paren, close paren, null byte. */ + str = PyMem_RawMalloc(len + 3); + if (str == NULL) + return NULL; + + str[0] = '('; + memcpy(str+1, expr_start, len); + str[len+1] = ')'; + str[len+2] = 0; + + cf.cf_flags = PyCF_ONLY_AST; + mod = PyParser_ASTFromString(str, "<fstring>", + Py_eval_input, &cf, c->c_arena); + PyMem_RawFree(str); + if (!mod) + return NULL; + return mod->v.Expression.body; +} + +/* Return -1 on error. + + Return 0 if we reached the end of the literal. + + Return 1 if we haven't reached the end of the literal, but we want + the caller to process the literal up to this point. Used for + doubled braces. +*/ +static int +fstring_find_literal(const char **str, const char *end, int raw, + PyObject **literal, int recurse_lvl, + struct compiling *c, const node *n) +{ + /* Get any literal string. It ends when we hit an un-doubled left + brace (which isn't part of a unicode name escape such as + "\N{EULER CONSTANT}"), or the end of the string. */ + + const char *literal_start = *str; + const char *literal_end; + int in_named_escape = 0; + int result = 0; + + assert(*literal == NULL); + for (; *str < end; (*str)++) { + char ch = **str; + if (!in_named_escape && ch == '{' && (*str)-literal_start >= 2 && + *(*str-2) == '\\' && *(*str-1) == 'N') { + in_named_escape = 1; + } else if (in_named_escape && ch == '}') { + in_named_escape = 0; + } else if (ch == '{' || ch == '}') { + /* Check for doubled braces, but only at the top level. If + we checked at every level, then f'{0:{3}}' would fail + with the two closing braces. */ + if (recurse_lvl == 0) { + if (*str+1 < end && *(*str+1) == ch) { + /* We're going to tell the caller that the literal ends + here, but that they should continue scanning. But also + skip over the second brace when we resume scanning. */ + literal_end = *str+1; + *str += 2; + result = 1; + goto done; + } + + /* Where a single '{' is the start of a new expression, a + single '}' is not allowed. */ + if (ch == '}') { + ast_error(c, n, "f-string: single '}' is not allowed"); + return -1; } - kind = PyUnicode_KIND(w); - data = PyUnicode_DATA(w); - len = PyUnicode_GET_LENGTH(w); - for (i = 0; i < len; i++) { - Py_UCS4 chr = PyUnicode_READ(kind, data, i); - sprintf(p, "\\U%08x", chr); - p += 10; + } + /* We're either at a '{', which means we're starting another + expression; or a '}', which means we're at the end of this + f-string (for a nested format_spec). */ + break; + } + } + literal_end = *str; + assert(*str <= end); + assert(*str == end || **str == '{' || **str == '}'); +done: + if (literal_start != literal_end) { + if (raw) + *literal = PyUnicode_DecodeUTF8Stateful(literal_start, + literal_end-literal_start, + NULL, NULL); + else + *literal = decode_unicode_with_escapes(c, literal_start, + literal_end-literal_start); + if (!*literal) + return -1; + } + return result; +} + +/* Forward declaration because parsing is recursive. */ +static expr_ty +fstring_parse(const char **str, const char *end, int raw, int recurse_lvl, + struct compiling *c, const node *n); + +/* Parse the f-string at *str, ending at end. We know *str starts an + expression (so it must be a '{'). Returns the FormattedValue node, + which includes the expression, conversion character, and + format_spec expression. + + Note that I don't do a perfect job here: I don't make sure that a + closing brace doesn't match an opening paren, for example. It + doesn't need to error on all invalid expressions, just correctly + find the end of all valid ones. Any errors inside the expression + will be caught when we parse it later. */ +static int +fstring_find_expr(const char **str, const char *end, int raw, int recurse_lvl, + expr_ty *expression, struct compiling *c, const node *n) +{ + /* Return -1 on error, else 0. */ + + const char *expr_start; + const char *expr_end; + expr_ty simple_expression; + expr_ty format_spec = NULL; /* Optional format specifier. */ + int conversion = -1; /* The conversion char. -1 if not specified. */ + + /* 0 if we're not in a string, else the quote char we're trying to + match (single or double quote). */ + char quote_char = 0; + + /* If we're inside a string, 1=normal, 3=triple-quoted. */ + int string_type = 0; + + /* Keep track of nesting level for braces/parens/brackets in + expressions. */ + Py_ssize_t nested_depth = 0; + + /* Can only nest one level deep. */ + if (recurse_lvl >= 2) { + ast_error(c, n, "f-string: expressions nested too deeply"); + return -1; + } + + /* The first char must be a left brace, or we wouldn't have gotten + here. Skip over it. */ + assert(**str == '{'); + *str += 1; + + expr_start = *str; + for (; *str < end; (*str)++) { + char ch; + + /* Loop invariants. */ + assert(nested_depth >= 0); + assert(*str >= expr_start && *str < end); + if (quote_char) + assert(string_type == 1 || string_type == 3); + else + assert(string_type == 0); + + ch = **str; + /* Nowhere inside an expression is a backslash allowed. */ + if (ch == '\\') { + /* Error: can't include a backslash character, inside + parens or strings or not. */ + ast_error(c, n, "f-string expression part " + "cannot include a backslash"); + return -1; + } + if (quote_char) { + /* We're inside a string. See if we're at the end. */ + /* This code needs to implement the same non-error logic + as tok_get from tokenizer.c, at the letter_quote + label. To actually share that code would be a + nightmare. But, it's unlikely to change and is small, + so duplicate it here. Note we don't need to catch all + of the errors, since they'll be caught when parsing the + expression. We just need to match the non-error + cases. Thus we can ignore \n in single-quoted strings, + for example. Or non-terminated strings. */ + if (ch == quote_char) { + /* Does this match the string_type (single or triple + quoted)? */ + if (string_type == 3) { + if (*str+2 < end && *(*str+1) == ch && *(*str+2) == ch) { + /* We're at the end of a triple quoted string. */ + *str += 2; + string_type = 0; + quote_char = 0; + continue; + } + } else { + /* We're at the end of a normal string. */ + quote_char = 0; + string_type = 0; + continue; } - /* Should be impossible to overflow */ - assert(p - buf <= Py_SIZE(u)); - Py_DECREF(w); + } + } else if (ch == '\'' || ch == '"') { + /* Is this a triple quoted string? */ + if (*str+2 < end && *(*str+1) == ch && *(*str+2) == ch) { + string_type = 3; + *str += 2; } else { - *p++ = *s++; + /* Start of a normal string. */ + string_type = 1; + } + /* Start looking for the end of the string. */ + quote_char = ch; + } else if (ch == '[' || ch == '{' || ch == '(') { + nested_depth++; + } else if (nested_depth != 0 && + (ch == ']' || ch == '}' || ch == ')')) { + nested_depth--; + } else if (ch == '#') { + /* Error: can't include a comment character, inside parens + or not. */ + ast_error(c, n, "f-string expression part cannot include '#'"); + return -1; + } else if (nested_depth == 0 && + (ch == '!' || ch == ':' || ch == '}')) { + /* First, test for the special case of "!=". Since '=' is + not an allowed conversion character, nothing is lost in + this test. */ + if (ch == '!' && *str+1 < end && *(*str+1) == '=') { + /* This isn't a conversion character, just continue. */ + continue; } + /* Normal way out of this loop. */ + break; + } else { + /* Just consume this char and loop around. */ } - len = p - buf; - s = buf; } - if (rawmode) - v = PyUnicode_DecodeRawUnicodeEscape(s, len, NULL); - else - v = PyUnicode_DecodeUnicodeEscape(s, len, NULL); - Py_XDECREF(u); - return v; + expr_end = *str; + /* If we leave this loop in a string or with mismatched parens, we + don't care. We'll get a syntax error when compiling the + expression. But, we can produce a better error message, so + let's just do that.*/ + if (quote_char) { + ast_error(c, n, "f-string: unterminated string"); + return -1; + } + if (nested_depth) { + ast_error(c, n, "f-string: mismatched '(', '{', or '['"); + return -1; + } + + if (*str >= end) + goto unexpected_end_of_string; + + /* Compile the expression as soon as possible, so we show errors + related to the expression before errors related to the + conversion or format_spec. */ + simple_expression = fstring_compile_expr(expr_start, expr_end, c, n); + if (!simple_expression) + return -1; + + /* Check for a conversion char, if present. */ + if (**str == '!') { + *str += 1; + if (*str >= end) + goto unexpected_end_of_string; + + conversion = **str; + *str += 1; + + /* Validate the conversion. */ + if (!(conversion == 's' || conversion == 'r' + || conversion == 'a')) { + ast_error(c, n, "f-string: invalid conversion character: " + "expected 's', 'r', or 'a'"); + return -1; + } + } + + /* Check for the format spec, if present. */ + if (*str >= end) + goto unexpected_end_of_string; + if (**str == ':') { + *str += 1; + if (*str >= end) + goto unexpected_end_of_string; + + /* Parse the format spec. */ + format_spec = fstring_parse(str, end, raw, recurse_lvl+1, c, n); + if (!format_spec) + return -1; + } + + if (*str >= end || **str != '}') + goto unexpected_end_of_string; + + /* We're at a right brace. Consume it. */ + assert(*str < end); + assert(**str == '}'); + *str += 1; + + /* And now create the FormattedValue node that represents this + entire expression with the conversion and format spec. */ + *expression = FormattedValue(simple_expression, conversion, + format_spec, LINENO(n), n->n_col_offset, + c->c_arena); + if (!*expression) + return -1; + + return 0; + +unexpected_end_of_string: + ast_error(c, n, "f-string: expecting '}'"); + return -1; } -/* s is a Python string literal, including the bracketing quote characters, - * and r &/or b prefixes (if any), and embedded escape sequences (if any). - * parsestr parses it, and returns the decoded Python string object. - */ -static PyObject * -parsestr(struct compiling *c, const node *n, int *bytesmode) +/* Return -1 on error. + + Return 0 if we have a literal (possible zero length) and an + expression (zero length if at the end of the string. + + Return 1 if we have a literal, but no expression, and we want the + caller to call us again. This is used to deal with doubled + braces. + + When called multiple times on the string 'a{{b{0}c', this function + will return: + + 1. the literal 'a{' with no expression, and a return value + of 1. Despite the fact that there's no expression, the return + value of 1 means we're not finished yet. + + 2. the literal 'b' and the expression '0', with a return value of + 0. The fact that there's an expression means we're not finished. + + 3. literal 'c' with no expression and a return value of 0. The + combination of the return value of 0 with no expression means + we're finished. +*/ +static int +fstring_find_literal_and_expr(const char **str, const char *end, int raw, + int recurse_lvl, PyObject **literal, + expr_ty *expression, + struct compiling *c, const node *n) +{ + int result; + + assert(*literal == NULL && *expression == NULL); + + /* Get any literal string. */ + result = fstring_find_literal(str, end, raw, literal, recurse_lvl, c, n); + if (result < 0) + goto error; + + assert(result == 0 || result == 1); + + if (result == 1) + /* We have a literal, but don't look at the expression. */ + return 1; + + if (*str >= end || **str == '}') + /* We're at the end of the string or the end of a nested + f-string: no expression. The top-level error case where we + expect to be at the end of the string but we're at a '}' is + handled later. */ + return 0; + + /* We must now be the start of an expression, on a '{'. */ + assert(**str == '{'); + + if (fstring_find_expr(str, end, raw, recurse_lvl, expression, c, n) < 0) + goto error; + + return 0; + +error: + Py_CLEAR(*literal); + return -1; +} + +#define EXPRLIST_N_CACHED 64 + +typedef struct { + /* Incrementally build an array of expr_ty, so be used in an + asdl_seq. Cache some small but reasonably sized number of + expr_ty's, and then after that start dynamically allocating, + doubling the number allocated each time. Note that the f-string + f'{0}a{1}' contains 3 expr_ty's: 2 FormattedValue's, and one + Str for the literal 'a'. So you add expr_ty's about twice as + fast as you add exressions in an f-string. */ + + Py_ssize_t allocated; /* Number we've allocated. */ + Py_ssize_t size; /* Number we've used. */ + expr_ty *p; /* Pointer to the memory we're actually + using. Will point to 'data' until we + start dynamically allocating. */ + expr_ty data[EXPRLIST_N_CACHED]; +} ExprList; + +#ifdef NDEBUG +#define ExprList_check_invariants(l) +#else +static void +ExprList_check_invariants(ExprList *l) +{ + /* Check our invariants. Make sure this object is "live", and + hasn't been deallocated. */ + assert(l->size >= 0); + assert(l->p != NULL); + if (l->size <= EXPRLIST_N_CACHED) + assert(l->data == l->p); +} +#endif + +static void +ExprList_Init(ExprList *l) +{ + l->allocated = EXPRLIST_N_CACHED; + l->size = 0; + + /* Until we start allocating dynamically, p points to data. */ + l->p = l->data; + + ExprList_check_invariants(l); +} + +static int +ExprList_Append(ExprList *l, expr_ty exp) +{ + ExprList_check_invariants(l); + if (l->size >= l->allocated) { + /* We need to alloc (or realloc) the memory. */ + Py_ssize_t new_size = l->allocated * 2; + + /* See if we've ever allocated anything dynamically. */ + if (l->p == l->data) { + Py_ssize_t i; + /* We're still using the cached data. Switch to + alloc-ing. */ + l->p = PyMem_RawMalloc(sizeof(expr_ty) * new_size); + if (!l->p) + return -1; + /* Copy the cached data into the new buffer. */ + for (i = 0; i < l->size; i++) + l->p[i] = l->data[i]; + } else { + /* Just realloc. */ + expr_ty *tmp = PyMem_RawRealloc(l->p, sizeof(expr_ty) * new_size); + if (!tmp) { + PyMem_RawFree(l->p); + l->p = NULL; + return -1; + } + l->p = tmp; + } + + l->allocated = new_size; + assert(l->allocated == 2 * l->size); + } + + l->p[l->size++] = exp; + + ExprList_check_invariants(l); + return 0; +} + +static void +ExprList_Dealloc(ExprList *l) +{ + ExprList_check_invariants(l); + + /* If there's been an error, or we've never dynamically allocated, + do nothing. */ + if (!l->p || l->p == l->data) { + /* Do nothing. */ + } else { + /* We have dynamically allocated. Free the memory. */ + PyMem_RawFree(l->p); + } + l->p = NULL; + l->size = -1; +} + +static asdl_seq * +ExprList_Finish(ExprList *l, PyArena *arena) +{ + asdl_seq *seq; + + ExprList_check_invariants(l); + + /* Allocate the asdl_seq and copy the expressions in to it. */ + seq = _Py_asdl_seq_new(l->size, arena); + if (seq) { + Py_ssize_t i; + for (i = 0; i < l->size; i++) + asdl_seq_SET(seq, i, l->p[i]); + } + ExprList_Dealloc(l); + return seq; +} + +/* The FstringParser is designed to add a mix of strings and + f-strings, and concat them together as needed. Ultimately, it + generates an expr_ty. */ +typedef struct { + PyObject *last_str; + ExprList expr_list; +} FstringParser; + +#ifdef NDEBUG +#define FstringParser_check_invariants(state) +#else +static void +FstringParser_check_invariants(FstringParser *state) +{ + if (state->last_str) + assert(PyUnicode_CheckExact(state->last_str)); + ExprList_check_invariants(&state->expr_list); +} +#endif + +static void +FstringParser_Init(FstringParser *state) +{ + state->last_str = NULL; + ExprList_Init(&state->expr_list); + FstringParser_check_invariants(state); +} + +static void +FstringParser_Dealloc(FstringParser *state) +{ + FstringParser_check_invariants(state); + + Py_XDECREF(state->last_str); + ExprList_Dealloc(&state->expr_list); +} + +/* Make a Str node, but decref the PyUnicode object being added. */ +static expr_ty +make_str_node_and_del(PyObject **str, struct compiling *c, const node* n) +{ + PyObject *s = *str; + *str = NULL; + assert(PyUnicode_CheckExact(s)); + if (PyArena_AddPyObject(c->c_arena, s) < 0) { + Py_DECREF(s); + return NULL; + } + return Str(s, LINENO(n), n->n_col_offset, c->c_arena); +} + +/* Add a non-f-string (that is, a regular literal string). str is + decref'd. */ +static int +FstringParser_ConcatAndDel(FstringParser *state, PyObject *str) +{ + FstringParser_check_invariants(state); + + assert(PyUnicode_CheckExact(str)); + + if (PyUnicode_GET_LENGTH(str) == 0) { + Py_DECREF(str); + return 0; + } + + if (!state->last_str) { + /* We didn't have a string before, so just remember this one. */ + state->last_str = str; + } else { + /* Concatenate this with the previous string. */ + PyUnicode_AppendAndDel(&state->last_str, str); + if (!state->last_str) + return -1; + } + FstringParser_check_invariants(state); + return 0; +} + +/* Parse an f-string. The f-string is in *str to end, with no + 'f' or quotes. */ +static int +FstringParser_ConcatFstring(FstringParser *state, const char **str, + const char *end, int raw, int recurse_lvl, + struct compiling *c, const node *n) +{ + FstringParser_check_invariants(state); + + /* Parse the f-string. */ + while (1) { + PyObject *literal = NULL; + expr_ty expression = NULL; + + /* If there's a zero length literal in front of the + expression, literal will be NULL. If we're at the end of + the f-string, expression will be NULL (unless result == 1, + see below). */ + int result = fstring_find_literal_and_expr(str, end, raw, recurse_lvl, + &literal, &expression, + c, n); + if (result < 0) + return -1; + + /* Add the literal, if any. */ + if (!literal) { + /* Do nothing. Just leave last_str alone (and possibly + NULL). */ + } else if (!state->last_str) { + state->last_str = literal; + literal = NULL; + } else { + /* We have a literal, concatenate it. */ + assert(PyUnicode_GET_LENGTH(literal) != 0); + if (FstringParser_ConcatAndDel(state, literal) < 0) + return -1; + literal = NULL; + } + assert(!state->last_str || + PyUnicode_GET_LENGTH(state->last_str) != 0); + + /* We've dealt with the literal now. It can't be leaked on further + errors. */ + assert(literal == NULL); + + /* See if we should just loop around to get the next literal + and expression, while ignoring the expression this + time. This is used for un-doubling braces, as an + optimization. */ + if (result == 1) + continue; + + if (!expression) + /* We're done with this f-string. */ + break; + + /* We know we have an expression. Convert any existing string + to a Str node. */ + if (!state->last_str) { + /* Do nothing. No previous literal. */ + } else { + /* Convert the existing last_str literal to a Str node. */ + expr_ty str = make_str_node_and_del(&state->last_str, c, n); + if (!str || ExprList_Append(&state->expr_list, str) < 0) + return -1; + } + + if (ExprList_Append(&state->expr_list, expression) < 0) + return -1; + } + + /* If recurse_lvl is zero, then we must be at the end of the + string. Otherwise, we must be at a right brace. */ + + if (recurse_lvl == 0 && *str < end-1) { + ast_error(c, n, "f-string: unexpected end of string"); + return -1; + } + if (recurse_lvl != 0 && **str != '}') { + ast_error(c, n, "f-string: expecting '}'"); + return -1; + } + + FstringParser_check_invariants(state); + return 0; +} + +/* Convert the partial state reflected in last_str and expr_list to an + expr_ty. The expr_ty can be a Str, or a JoinedStr. */ +static expr_ty +FstringParser_Finish(FstringParser *state, struct compiling *c, + const node *n) +{ + asdl_seq *seq; + + FstringParser_check_invariants(state); + + /* If we're just a constant string with no expressions, return + that. */ + if(state->expr_list.size == 0) { + if (!state->last_str) { + /* Create a zero length string. */ + state->last_str = PyUnicode_FromStringAndSize(NULL, 0); + if (!state->last_str) + goto error; + } + return make_str_node_and_del(&state->last_str, c, n); + } + + /* Create a Str node out of last_str, if needed. It will be the + last node in our expression list. */ + if (state->last_str) { + expr_ty str = make_str_node_and_del(&state->last_str, c, n); + if (!str || ExprList_Append(&state->expr_list, str) < 0) + goto error; + } + /* This has already been freed. */ + assert(state->last_str == NULL); + + seq = ExprList_Finish(&state->expr_list, c->c_arena); + if (!seq) + goto error; + + /* If there's only one expression, return it. Otherwise, we need + to join them together. */ + if (seq->size == 1) + return seq->elements[0]; + + return JoinedStr(seq, LINENO(n), n->n_col_offset, c->c_arena); + +error: + FstringParser_Dealloc(state); + return NULL; +} + +/* Given an f-string (with no 'f' or quotes) that's in *str and ends + at end, parse it into an expr_ty. Return NULL on error. Adjust + str to point past the parsed portion. */ +static expr_ty +fstring_parse(const char **str, const char *end, int raw, int recurse_lvl, + struct compiling *c, const node *n) +{ + FstringParser state; + + FstringParser_Init(&state); + if (FstringParser_ConcatFstring(&state, str, end, raw, recurse_lvl, + c, n) < 0) { + FstringParser_Dealloc(&state); + return NULL; + } + + return FstringParser_Finish(&state, c, n); +} + +/* n is a Python string literal, including the bracketing quote + characters, and r, b, u, &/or f prefixes (if any), and embedded + escape sequences (if any). parsestr parses it, and sets *result to + decoded Python string object. If the string is an f-string, set + *fstr and *fstrlen to the unparsed string object. Return 0 if no + errors occurred. +*/ +static int +parsestr(struct compiling *c, const node *n, int *bytesmode, int *rawmode, + PyObject **result, const char **fstr, Py_ssize_t *fstrlen) { size_t len; const char *s = STR(n); int quote = Py_CHARMASK(*s); - int rawmode = 0; - int need_encoding; + int fmode = 0; + *bytesmode = 0; + *rawmode = 0; + *result = NULL; + *fstr = NULL; if (Py_ISALPHA(quote)) { - while (!*bytesmode || !rawmode) { + while (!*bytesmode || !*rawmode) { if (quote == 'b' || quote == 'B') { quote = *++s; *bytesmode = 1; @@ -4022,114 +4979,169 @@ parsestr(struct compiling *c, const node *n, int *bytesmode) } else if (quote == 'r' || quote == 'R') { quote = *++s; - rawmode = 1; + *rawmode = 1; + } + else if (quote == 'f' || quote == 'F') { + quote = *++s; + fmode = 1; } else { break; } } } + if (fmode && *bytesmode) { + PyErr_BadInternalCall(); + return -1; + } if (quote != '\'' && quote != '\"') { PyErr_BadInternalCall(); - return NULL; + return -1; } + /* Skip the leading quote char. */ s++; len = strlen(s); if (len > INT_MAX) { PyErr_SetString(PyExc_OverflowError, "string to parse is too long"); - return NULL; + return -1; } if (s[--len] != quote) { + /* Last quote char must match the first. */ PyErr_BadInternalCall(); - return NULL; + return -1; } if (len >= 4 && s[0] == quote && s[1] == quote) { + /* A triple quoted string. We've already skipped one quote at + the start and one at the end of the string. Now skip the + two at the start. */ s += 2; len -= 2; + /* And check that the last two match. */ if (s[--len] != quote || s[--len] != quote) { PyErr_BadInternalCall(); - return NULL; + return -1; } } - if (!*bytesmode && !rawmode) { - return decode_unicode(c, s, len, rawmode, c->c_encoding); + + if (fmode) { + /* Just return the bytes. The caller will parse the resulting + string. */ + *fstr = s; + *fstrlen = len; + return 0; } + + /* Not an f-string. */ + /* Avoid invoking escape decoding routines if possible. */ + *rawmode = *rawmode || strchr(s, '\\') == NULL; if (*bytesmode) { - /* Disallow non-ascii characters (but not escapes) */ + /* Disallow non-ASCII characters. */ const char *ch; for (ch = s; *ch; ch++) { if (Py_CHARMASK(*ch) >= 0x80) { ast_error(c, n, "bytes can only contain ASCII " "literal characters."); - return NULL; + return -1; } } + if (*rawmode) + *result = PyBytes_FromStringAndSize(s, len); + else + *result = PyBytes_DecodeEscape(s, len, NULL, /* ignored */ 0, NULL); + } else { + if (*rawmode) + *result = PyUnicode_DecodeUTF8Stateful(s, len, NULL, NULL); + else + *result = decode_unicode_with_escapes(c, s, len); } - need_encoding = (!*bytesmode && c->c_encoding != NULL && - strcmp(c->c_encoding, "utf-8") != 0); - if (rawmode || strchr(s, '\\') == NULL) { - if (need_encoding) { - PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL); - if (u == NULL || !*bytesmode) - return u; - v = PyUnicode_AsEncodedString(u, c->c_encoding, NULL); - Py_DECREF(u); - return v; - } else if (*bytesmode) { - return PyBytes_FromStringAndSize(s, len); - } else if (strcmp(c->c_encoding, "utf-8") == 0) { - return PyUnicode_FromStringAndSize(s, len); - } else { - return PyUnicode_DecodeLatin1(s, len, NULL); - } - } - return PyBytes_DecodeEscape(s, len, NULL, 1, - need_encoding ? c->c_encoding : NULL); + return *result == NULL ? -1 : 0; } -/* Build a Python string object out of a STRING+ atom. This takes care of - * compile-time literal catenation, calling parsestr() on each piece, and - * pasting the intermediate results together. - */ -static PyObject * -parsestrplus(struct compiling *c, const node *n, int *bytesmode) +/* Accepts a STRING+ atom, and produces an expr_ty node. Run through + each STRING atom, and process it as needed. For bytes, just + concatenate them together, and the result will be a Bytes node. For + normal strings and f-strings, concatenate them together. The result + will be a Str node if there were no f-strings; a FormattedValue + node if there's just an f-string (with no leading or trailing + literals), or a JoinedStr node if there are multiple f-strings or + any literals involved. */ +static expr_ty +parsestrplus(struct compiling *c, const node *n) { - PyObject *v; + int bytesmode = 0; + PyObject *bytes_str = NULL; int i; - REQ(CHILD(n, 0), STRING); - v = parsestr(c, CHILD(n, 0), bytesmode); - if (v != NULL) { - /* String literal concatenation */ - for (i = 1; i < NCH(n); i++) { - PyObject *s; - int subbm = 0; - s = parsestr(c, CHILD(n, i), &subbm); - if (s == NULL) - goto onError; - if (*bytesmode != subbm) { - ast_error(c, n, "cannot mix bytes and nonbytes literals"); - Py_DECREF(s); - goto onError; - } - if (PyBytes_Check(v) && PyBytes_Check(s)) { - PyBytes_ConcatAndDel(&v, s); - if (v == NULL) - goto onError; - } - else { - PyObject *temp = PyUnicode_Concat(v, s); - Py_DECREF(s); - Py_DECREF(v); - v = temp; - if (v == NULL) - goto onError; + + FstringParser state; + FstringParser_Init(&state); + + for (i = 0; i < NCH(n); i++) { + int this_bytesmode; + int this_rawmode; + PyObject *s; + const char *fstr; + Py_ssize_t fstrlen = -1; /* Silence a compiler warning. */ + + REQ(CHILD(n, i), STRING); + if (parsestr(c, CHILD(n, i), &this_bytesmode, &this_rawmode, &s, + &fstr, &fstrlen) != 0) + goto error; + + /* Check that we're not mixing bytes with unicode. */ + if (i != 0 && bytesmode != this_bytesmode) { + ast_error(c, n, "cannot mix bytes and nonbytes literals"); + Py_DECREF(s); + goto error; + } + bytesmode = this_bytesmode; + + if (fstr != NULL) { + int result; + assert(s == NULL && !bytesmode); + /* This is an f-string. Parse and concatenate it. */ + result = FstringParser_ConcatFstring(&state, &fstr, fstr+fstrlen, + this_rawmode, 0, c, n); + if (result < 0) + goto error; + } else { + assert(bytesmode ? PyBytes_CheckExact(s) : + PyUnicode_CheckExact(s)); + + /* A string or byte string. */ + assert(s != NULL && fstr == NULL); + if (bytesmode) { + /* For bytes, concat as we go. */ + if (i == 0) { + /* First time, just remember this value. */ + bytes_str = s; + } else { + PyBytes_ConcatAndDel(&bytes_str, s); + if (!bytes_str) + goto error; + } + } else { + assert(s != NULL && fstr == NULL); + /* This is a regular string. Concatenate it. */ + if (FstringParser_ConcatAndDel(&state, s) < 0) + goto error; } } } - return v; + if (bytesmode) { + /* Just return the bytes object and we're done. */ + if (PyArena_AddPyObject(c->c_arena, bytes_str) < 0) + goto error; + return Bytes(bytes_str, LINENO(n), n->n_col_offset, c->c_arena); + } + + /* We're not a bytes string, bytes_str should never have been set. */ + assert(bytes_str == NULL); + + return FstringParser_Finish(&state, c, n); - onError: - Py_XDECREF(v); +error: + Py_XDECREF(bytes_str); + FstringParser_Dealloc(&state); return NULL; } diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 9f5db2afe1..cee013f57b 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -21,16 +21,18 @@ Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the values for Py_FileSystemDefaultEncoding! */ -#ifdef HAVE_MBCS -const char *Py_FileSystemDefaultEncoding = "mbcs"; +#if defined(__APPLE__) +const char *Py_FileSystemDefaultEncoding = "utf-8"; int Py_HasFileSystemDefaultEncoding = 1; -#elif defined(__APPLE__) +#elif defined(MS_WINDOWS) +/* may be changed by initfsencoding(), but should never be free()d */ const char *Py_FileSystemDefaultEncoding = "utf-8"; int Py_HasFileSystemDefaultEncoding = 1; #else const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */ int Py_HasFileSystemDefaultEncoding = 0; #endif +const char *Py_FileSystemDefaultEncodeErrors = "surrogateescape"; _Py_IDENTIFIER(__builtins__); _Py_IDENTIFIER(__dict__); @@ -52,7 +54,7 @@ _Py_IDENTIFIER(stderr); static PyObject * builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) { - PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *cell; + PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns, *none; PyObject *cls = NULL; Py_ssize_t nargs; int isclass = 0; /* initialize to prevent gcc warning */ @@ -155,16 +157,8 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) } } else { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (pargs == NULL) { - Py_DECREF(prep); - Py_DECREF(meta); - Py_XDECREF(mkw); - Py_DECREF(bases); - return NULL; - } - ns = PyEval_CallObjectWithKeywords(prep, pargs, mkw); - Py_DECREF(pargs); + PyObject *pargs[2] = {name, bases}; + ns = _PyObject_FastCallDict(prep, pargs, 2, mkw); Py_DECREF(prep); } if (ns == NULL) { @@ -173,19 +167,13 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) Py_DECREF(bases); return NULL; } - cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns, + none = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns, NULL, 0, NULL, 0, NULL, 0, NULL, PyFunction_GET_CLOSURE(func)); - if (cell != NULL) { - PyObject *margs; - margs = PyTuple_Pack(3, name, bases, ns); - if (margs != NULL) { - cls = PyEval_CallObjectWithKeywords(meta, margs, mkw); - Py_DECREF(margs); - } - if (cls != NULL && PyCell_Check(cell)) - PyCell_Set(cell, cls); - Py_DECREF(cell); + if (none != NULL) { + PyObject *margs[3] = {name, bases, ns}; + cls = _PyObject_FastCallDict(meta, margs, 3, mkw); + Py_DECREF(none); } Py_DECREF(ns); Py_DECREF(meta); @@ -331,7 +319,7 @@ builtin_any(PyObject *module, PyObject *iterable) Py_DECREF(it); return NULL; } - if (cmp == 1) { + if (cmp > 0) { Py_DECREF(it); Py_RETURN_TRUE; } @@ -469,6 +457,7 @@ filter_next(filterobject *lz) PyObject *it = lz->it; long ok; PyObject *(*iternext)(PyObject *); + int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type; iternext = *Py_TYPE(it)->tp_iternext; for (;;) { @@ -476,12 +465,11 @@ filter_next(filterobject *lz) if (item == NULL) return NULL; - if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) { + if (checktrue) { ok = PyObject_IsTrue(item); } else { PyObject *good; - good = PyObject_CallFunctionObjArgs(lz->func, - item, NULL); + good = PyObject_CallFunctionObjArgs(lz->func, item, NULL); if (good == NULL) { Py_DECREF(item); return NULL; @@ -1168,26 +1156,43 @@ map_traverse(mapobject *lz, visitproc visit, void *arg) static PyObject * map_next(mapobject *lz) { - PyObject *val; - PyObject *argtuple; - PyObject *result; - Py_ssize_t numargs, i; + PyObject *small_stack[5]; + PyObject **stack; + Py_ssize_t niters, nargs, i; + PyObject *result = NULL; - numargs = PyTuple_Size(lz->iters); - argtuple = PyTuple_New(numargs); - if (argtuple == NULL) - return NULL; + niters = PyTuple_GET_SIZE(lz->iters); + if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) { + stack = small_stack; + } + else { + stack = PyMem_Malloc(niters * sizeof(stack[0])); + if (stack == NULL) { + PyErr_NoMemory(); + return NULL; + } + } - for (i=0 ; i<numargs ; i++) { - val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i)); + nargs = 0; + for (i=0; i < niters; i++) { + PyObject *it = PyTuple_GET_ITEM(lz->iters, i); + PyObject *val = Py_TYPE(it)->tp_iternext(it); if (val == NULL) { - Py_DECREF(argtuple); - return NULL; + goto exit; } - PyTuple_SET_ITEM(argtuple, i, val); + stack[i] = val; + nargs++; + } + + result = _PyObject_FastCall(lz->func, stack, nargs); + +exit: + for (i=0; i < nargs; i++) { + Py_DECREF(stack[i]); + } + if (stack != small_stack) { + PyMem_Free(stack); } - result = PyObject_Call(lz->func, argtuple, NULL); - Py_DECREF(argtuple); return result; } @@ -1779,7 +1784,7 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) if (do_flush == -1) return NULL; else if (do_flush) { - tmp = _PyObject_CallMethodId(file, &PyId_flush, ""); + tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL); if (tmp == NULL) return NULL; else @@ -1845,7 +1850,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) } /* First of all, flush stderr */ - tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); + tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL); if (tmp == NULL) PyErr_Clear(); else @@ -1854,7 +1859,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) /* We should only use (GNU) readline if Python's sys.stdin and sys.stdout are the same as C's stdin and stdout, because we need to pass it those. */ - tmp = _PyObject_CallMethodId(fin, &PyId_fileno, ""); + tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL); if (tmp == NULL) { PyErr_Clear(); tty = 0; @@ -1867,7 +1872,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) tty = fd == fileno(stdin) && isatty(fd); } if (tty) { - tmp = _PyObject_CallMethodId(fout, &PyId_fileno, ""); + tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL); if (tmp == NULL) { PyErr_Clear(); tty = 0; @@ -1902,7 +1907,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) stdin_errors_str = _PyUnicode_AsString(stdin_errors); if (!stdin_encoding_str || !stdin_errors_str) goto _readline_errors; - tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); + tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL); if (tmp == NULL) PyErr_Clear(); else @@ -1929,9 +1934,8 @@ builtin_input_impl(PyObject *module, PyObject *prompt) Py_CLEAR(stringpo); if (po == NULL) goto _readline_errors; - promptstr = PyBytes_AsString(po); - if (promptstr == NULL) - goto _readline_errors; + assert(PyBytes_Check(po)); + promptstr = PyBytes_AS_STRING(po); } else { po = NULL; @@ -1983,7 +1987,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0) return NULL; } - tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); + tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL); if (tmp == NULL) PyErr_Clear(); else @@ -2087,10 +2091,11 @@ PyDoc_STRVAR(builtin_sorted__doc__, static PyObject * builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) { - PyObject *newlist, *v, *seq, *keyfunc=NULL, *newargs; + PyObject *newlist, *v, *seq, *keyfunc=NULL, **newargs; PyObject *callable; static char *kwlist[] = {"iterable", "key", "reverse", 0}; int reverse; + Py_ssize_t nargs; /* args 1-3 should match listsort in Objects/listobject.c */ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted", @@ -2107,15 +2112,9 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - newargs = PyTuple_GetSlice(args, 1, 4); - if (newargs == NULL) { - Py_DECREF(newlist); - Py_DECREF(callable); - return NULL; - } - - v = PyObject_Call(callable, newargs, kwds); - Py_DECREF(newargs); + newargs = &PyTuple_GET_ITEM(args, 1); + nargs = PyTuple_GET_SIZE(args) - 1; + v = _PyObject_FastCallDict(callable, newargs, nargs, kwds); Py_DECREF(callable); if (v == NULL) { Py_DECREF(newlist); @@ -2710,10 +2709,10 @@ _PyBuiltin_Init(void) SETBUILTIN("zip", &PyZip_Type); debug = PyBool_FromLong(Py_OptimizeFlag == 0); if (PyDict_SetItemString(dict, "__debug__", debug) < 0) { - Py_XDECREF(debug); + Py_DECREF(debug); return NULL; } - Py_XDECREF(debug); + Py_DECREF(debug); return mod; #undef ADD_TO_ALL diff --git a/Python/ceval.c b/Python/ceval.c index e9d0cbb976..82cc9a2835 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -15,87 +15,12 @@ #include "dictobject.h" #include "frameobject.h" #include "opcode.h" +#include "pydtrace.h" #include "setobject.h" #include "structmember.h" #include <ctype.h> -#ifndef WITH_TSC - -#define READ_TIMESTAMP(var) - -#else - -typedef unsigned long long uint64; - -/* PowerPC support. - "__ppc__" appears to be the preprocessor definition to detect on OS X, whereas - "__powerpc__" appears to be the correct one for Linux with GCC -*/ -#if defined(__ppc__) || defined (__powerpc__) - -#define READ_TIMESTAMP(var) ppc_getcounter(&var) - -static void -ppc_getcounter(uint64 *v) -{ - unsigned long tbu, tb, tbu2; - - loop: - asm volatile ("mftbu %0" : "=r" (tbu) ); - asm volatile ("mftb %0" : "=r" (tb) ); - asm volatile ("mftbu %0" : "=r" (tbu2)); - if (__builtin_expect(tbu != tbu2, 0)) goto loop; - - /* The slightly peculiar way of writing the next lines is - compiled better by GCC than any other way I tried. */ - ((long*)(v))[0] = tbu; - ((long*)(v))[1] = tb; -} - -#elif defined(__i386__) - -/* this is for linux/x86 (and probably any other GCC/x86 combo) */ - -#define READ_TIMESTAMP(val) \ - __asm__ __volatile__("rdtsc" : "=A" (val)) - -#elif defined(__x86_64__) - -/* for gcc/x86_64, the "A" constraint in DI mode means *either* rax *or* rdx; - not edx:eax as it does for i386. Since rdtsc puts its result in edx:eax - even in 64-bit mode, we need to use "a" and "d" for the lower and upper - 32-bit pieces of the result. */ - -#define READ_TIMESTAMP(val) do { \ - unsigned int h, l; \ - __asm__ __volatile__("rdtsc" : "=a" (l), "=d" (h)); \ - (val) = ((uint64)l) | (((uint64)h) << 32); \ - } while(0) - - -#else - -#error "Don't know how to implement timestamp counter for this architecture" - -#endif - -void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1, - uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1) -{ - uint64 intr, inst, loop; - PyThreadState *tstate = PyThreadState_Get(); - if (!tstate->interp->tscdump) - return; - intr = intr1 - intr0; - inst = inst1 - inst0 - intr; - loop = loop1 - loop0 - intr; - fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n", - opcode, ticked, inst, loop); -} - -#endif - /* Turn this on if your compiler chokes on the big switch: */ /* #define CASE_TOO_BIG 1 */ @@ -108,24 +33,13 @@ void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1, typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *); /* Forward declarations */ -#ifdef WITH_TSC -static PyObject * call_function(PyObject ***, int, uint64*, uint64*); -#else -static PyObject * call_function(PyObject ***, int); -#endif -static PyObject * fast_function(PyObject *, PyObject ***, int, int, int); -static PyObject * do_call(PyObject *, PyObject ***, int, int); -static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int); -static PyObject * update_keyword_args(PyObject *, int, PyObject ***, - PyObject *); -static PyObject * update_star_args(int, int, PyObject *, PyObject ***); -static PyObject * load_args(PyObject ***, int); -#define CALL_FLAG_VAR 1 -#define CALL_FLAG_KW 2 +static PyObject * call_function(PyObject ***, Py_ssize_t, PyObject *); +static PyObject * fast_function(PyObject *, PyObject **, Py_ssize_t, PyObject *); +static PyObject * do_call_core(PyObject *, PyObject *, PyObject *); #ifdef LLTRACE static int lltrace; -static int prtrace(PyObject *, char *); +static int prtrace(PyObject *, const char *); #endif static int call_trace(Py_tracefunc, PyObject *, PyThreadState *, PyFrameObject *, @@ -137,14 +51,18 @@ static void call_exc_trace(Py_tracefunc, PyObject *, PyThreadState *, PyFrameObject *); static int maybe_call_line_trace(Py_tracefunc, PyObject *, PyThreadState *, PyFrameObject *, int *, int *, int *); +static void maybe_dtrace_line(PyFrameObject *, int *, int *, int *); +static void dtrace_function_entry(PyFrameObject *); +static void dtrace_function_return(PyFrameObject *); static PyObject * cmp_outcome(int, PyObject *, PyObject *); +static PyObject * import_name(PyFrameObject *, PyObject *, PyObject *, PyObject *); static PyObject * import_from(PyObject *, PyObject *); static int import_all_from(PyObject *, PyObject *); static void format_exc_check_arg(PyObject *, const char *, PyObject *); static void format_exc_unbound(PyCodeObject *co, int oparg); static PyObject * unicode_concatenate(PyObject *, PyObject *, - PyFrameObject *, unsigned char *); + PyFrameObject *, const _Py_CODEUNIT *); static PyObject * special_lookup(PyObject *, _Py_Identifier *); #define NAME_ERROR_MSG \ @@ -796,11 +714,18 @@ PyEval_EvalFrame(PyFrameObject *f) { PyObject * PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) { + PyThreadState *tstate = PyThreadState_GET(); + return tstate->interp->eval_frame(f, throwflag); +} + +PyObject * +_PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) +{ #ifdef DXPAIRS int lastopcode = 0; #endif PyObject **stack_pointer; /* Next free slot in value stack */ - unsigned char *next_instr; + const _Py_CODEUNIT *next_instr; int opcode; /* Current opcode */ int oparg; /* Current opcode argument, if any */ enum why_code why; /* Reason for block stack unwind */ @@ -818,7 +743,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) time it is tested. */ int instr_ub = -1, instr_lb = 0, instr_prev = -1; - unsigned char *first_instr; + const _Py_CODEUNIT *first_instr; PyObject *names; PyObject *consts; @@ -886,24 +811,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* Import the static jump table */ #include "opcode_targets.h" -/* This macro is used when several opcodes defer to the same implementation - (e.g. SETUP_LOOP, SETUP_FINALLY) */ -#define TARGET_WITH_IMPL(op, impl) \ - TARGET_##op: \ - opcode = op; \ - if (HAS_ARG(op)) \ - oparg = NEXTARG(); \ - case op: \ - goto impl; \ - #define TARGET(op) \ TARGET_##op: \ - opcode = op; \ - if (HAS_ARG(op)) \ - oparg = NEXTARG(); \ case op: - #define DISPATCH() \ { \ if (!_Py_atomic_load_relaxed(&eval_breaker)) { \ @@ -915,18 +826,20 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #ifdef LLTRACE #define FAST_DISPATCH() \ { \ - if (!lltrace && !_Py_TracingPossible) { \ + if (!lltrace && !_Py_TracingPossible && !PyDTrace_LINE_ENABLED()) { \ f->f_lasti = INSTR_OFFSET(); \ - goto *opcode_targets[*next_instr++]; \ + NEXTOPARG(); \ + goto *opcode_targets[opcode]; \ } \ goto fast_next_opcode; \ } #else #define FAST_DISPATCH() \ { \ - if (!_Py_TracingPossible) { \ + if (!_Py_TracingPossible && !PyDTrace_LINE_ENABLED()) { \ f->f_lasti = INSTR_OFFSET(); \ - goto *opcode_targets[*next_instr++]; \ + NEXTOPARG(); \ + goto *opcode_targets[opcode]; \ } \ goto fast_next_opcode; \ } @@ -935,10 +848,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #else #define TARGET(op) \ case op: -#define TARGET_WITH_IMPL(op, impl) \ - /* silence compiler warnings about `impl` unused */ \ - if (0) goto impl; \ - case op: + #define DISPATCH() continue #define FAST_DISPATCH() goto fast_next_opcode #endif @@ -952,70 +862,33 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #define GETITEM(v, i) PyTuple_GetItem((v), (i)) #endif -#ifdef WITH_TSC -/* Use Pentium timestamp counter to mark certain events: - inst0 -- beginning of switch statement for opcode dispatch - inst1 -- end of switch statement (may be skipped) - loop0 -- the top of the mainloop - loop1 -- place where control returns again to top of mainloop - (may be skipped) - intr1 -- beginning of long interruption - intr2 -- end of long interruption - - Many opcodes call out to helper C functions. In some cases, the - time in those functions should be counted towards the time for the - opcode, but not in all cases. For example, a CALL_FUNCTION opcode - calls another Python function; there's no point in charge all the - bytecode executed by the called function to the caller. - - It's hard to make a useful judgement statically. In the presence - of operator overloading, it's impossible to tell if a call will - execute new Python code or not. - - It's a case-by-case judgement. I'll use intr1 for the following - cases: - - IMPORT_STAR - IMPORT_FROM - CALL_FUNCTION (and friends) - - */ - uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0; - int ticked = 0; - - READ_TIMESTAMP(inst0); - READ_TIMESTAMP(inst1); - READ_TIMESTAMP(loop0); - READ_TIMESTAMP(loop1); - - /* shut up the compiler */ - opcode = 0; -#endif - /* Code access macros */ -#define INSTR_OFFSET() ((int)(next_instr - first_instr)) -#define NEXTOP() (*next_instr++) -#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2]) -#define PEEKARG() ((next_instr[2]<<8) + next_instr[1]) -#define JUMPTO(x) (next_instr = first_instr + (x)) -#define JUMPBY(x) (next_instr += (x)) +/* The integer overflow is checked by an assertion below. */ +#define INSTR_OFFSET() (sizeof(_Py_CODEUNIT) * (int)(next_instr - first_instr)) +#define NEXTOPARG() do { \ + _Py_CODEUNIT word = *next_instr; \ + opcode = _Py_OPCODE(word); \ + oparg = _Py_OPARG(word); \ + next_instr++; \ + } while (0) +#define JUMPTO(x) (next_instr = first_instr + (x) / sizeof(_Py_CODEUNIT)) +#define JUMPBY(x) (next_instr += (x) / sizeof(_Py_CODEUNIT)) /* OpCode prediction macros Some opcodes tend to come in pairs thus making it possible to predict the second code when the first is run. For example, - COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And, - those opcodes are often followed by a POP_TOP. + COMPARE_OP is often followed by POP_JUMP_IF_FALSE or POP_JUMP_IF_TRUE. Verifying the prediction costs a single high-speed test of a register variable against a constant. If the pairing was good, then the processor's own internal branch predication has a high likelihood of success, resulting in a nearly zero-overhead transition to the next opcode. A successful prediction saves a trip through the eval-loop - including its two unpredictable branches, the HAS_ARG test and the - switch-case. Combined with the processor's internal branch prediction, - a successful PREDICT has the effect of making the two opcodes run as if - they were a single new opcode with the bodies combined. + including its unpredictable switch-case branch. Combined with the + processor's internal branch prediction, a successful PREDICT has the + effect of making the two opcodes run as if they were a single new opcode + with the bodies combined. If collecting opcode statistics, your choices are to either keep the predictions turned-on and interpret the results as if some opcodes @@ -1030,13 +903,19 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #if defined(DYNAMIC_EXECUTION_PROFILE) || USE_COMPUTED_GOTOS #define PREDICT(op) if (0) goto PRED_##op -#define PREDICTED(op) PRED_##op: -#define PREDICTED_WITH_ARG(op) PRED_##op: #else -#define PREDICT(op) if (*next_instr == op) goto PRED_##op -#define PREDICTED(op) PRED_##op: next_instr++ -#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3 +#define PREDICT(op) \ + do{ \ + _Py_CODEUNIT word = *next_instr; \ + opcode = _Py_OPCODE(word); \ + if (opcode == op){ \ + oparg = _Py_OPARG(word); \ + next_instr++; \ + goto PRED_##op; \ + } \ + } while(0) #endif +#define PREDICTED(op) PRED_##op: /* Stack manipulation macros */ @@ -1100,7 +979,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } #define UNWIND_EXCEPT_HANDLER(b) \ - { \ + do { \ PyObject *type, *value, *traceback; \ assert(STACK_LEVEL() >= (b)->b_level + 3); \ while (STACK_LEVEL() > (b)->b_level + 3) { \ @@ -1116,7 +995,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) Py_XDECREF(type); \ Py_XDECREF(value); \ Py_XDECREF(traceback); \ - } + } while(0) /* Start of code */ @@ -1160,21 +1039,24 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } } + if (PyDTrace_FUNCTION_ENTRY_ENABLED()) + dtrace_function_entry(f); + co = f->f_code; names = co->co_names; consts = co->co_consts; fastlocals = f->f_localsplus; freevars = f->f_localsplus + co->co_nlocals; - first_instr = (unsigned char*) PyBytes_AS_STRING(co->co_code); - /* An explanation is in order for the next line. - - f->f_lasti now refers to the index of the last instruction - executed. You might think this was obvious from the name, but - this wasn't always true before 2.3! PyFrame_New now sets - f->f_lasti to -1 (i.e. the index *before* the first instruction) - and YIELD_VALUE doesn't fiddle with f_lasti any more. So this - does work. Promise. - YIELD_FROM sets f_lasti to itself, in order to repeated yield + assert(PyBytes_Check(co->co_code)); + assert(PyBytes_GET_SIZE(co->co_code) <= INT_MAX); + assert(PyBytes_GET_SIZE(co->co_code) % sizeof(_Py_CODEUNIT) == 0); + assert(_Py_IS_ALIGNED(PyBytes_AS_STRING(co->co_code), sizeof(_Py_CODEUNIT))); + first_instr = (_Py_CODEUNIT *) PyBytes_AS_STRING(co->co_code); + /* + f->f_lasti refers to the index of the last instruction, + unless it's -1 in which case next_instr should be first_instr. + + YIELD_FROM sets f_lasti to itself, in order to repeatedly yield multiple values. When the PREDICT() macros are enabled, some opcode pairs follow in @@ -1183,15 +1065,20 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) were a single new opcode; accordingly,f->f_lasti will point to the first code in the pair (for instance, GET_ITER followed by FOR_ITER is effectively a single opcode and f->f_lasti will point - at to the beginning of the combined pair.) + to the beginning of the combined pair.) */ - next_instr = first_instr + f->f_lasti + 1; + assert(f->f_lasti >= -1); + next_instr = first_instr; + if (f->f_lasti >= 0) { + assert(f->f_lasti % sizeof(_Py_CODEUNIT) == 0); + next_instr += f->f_lasti / sizeof(_Py_CODEUNIT) + 1; + } stack_pointer = f->f_stacktop; assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ f->f_executing = 1; - if (co->co_flags & (CO_GENERATOR | CO_COROUTINE)) { + if (co->co_flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) { if (!throwflag && f->f_exc_type != NULL && f->f_exc_type != Py_None) { /* We were in an except handler when we left, restore the exception state which was put aside @@ -1219,23 +1106,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif for (;;) { -#ifdef WITH_TSC - if (inst1 == 0) { - /* Almost surely, the opcode executed a break - or a continue, preventing inst1 from being set - on the way out of the loop. - */ - READ_TIMESTAMP(inst1); - loop1 = inst1; - } - dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1, - intr0, intr1); - ticked = 0; - inst1 = 0; - intr0 = 0; - intr1 = 0; - READ_TIMESTAMP(loop0); -#endif assert(stack_pointer >= f->f_valuestack); /* else underflow */ assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */ assert(!PyErr_Occurred()); @@ -1249,14 +1119,11 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) Py_MakePendingCalls() above. */ if (_Py_atomic_load_relaxed(&eval_breaker)) { - if (*next_instr == SETUP_FINALLY) { + if (_Py_OPCODE(*next_instr) == SETUP_FINALLY) { /* Make the last opcode before a try: finally: block uninterruptible. */ goto fast_next_opcode; } -#ifdef WITH_TSC - ticked = 1; -#endif if (_Py_atomic_load_relaxed(&pendingcalls_to_do)) { if (Py_MakePendingCalls() < 0) goto error; @@ -1296,6 +1163,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) fast_next_opcode: f->f_lasti = INSTR_OFFSET(); + if (PyDTrace_LINE_ENABLED()) + maybe_dtrace_line(f, &instr_lb, &instr_ub, &instr_prev); + /* line-by-line tracing support */ if (_Py_TracingPossible && @@ -1322,11 +1192,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* Extract opcode and argument */ - opcode = NEXTOP(); - oparg = 0; /* allows oparg to be stored in a register because - it doesn't have to be remembered across a full loop */ - if (HAS_ARG(opcode)) - oparg = NEXTARG(); + NEXTOPARG(); dispatch_opcode: #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS @@ -1351,9 +1217,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } #endif - /* Main switch on opcode */ - READ_TIMESTAMP(inst0); - switch (opcode) { /* BEWARE! @@ -1377,6 +1240,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) FAST_DISPATCH(); } + PREDICTED(LOAD_CONST); TARGET(LOAD_CONST) { PyObject *value = GETITEM(consts, oparg); Py_INCREF(value); @@ -1384,7 +1248,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) FAST_DISPATCH(); } - PREDICTED_WITH_ARG(STORE_FAST); + PREDICTED(STORE_FAST); TARGET(STORE_FAST) { PyObject *value = POP(); SETLOCAL(oparg, value); @@ -1863,6 +1727,61 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(STORE_ANNOTATION) { + _Py_IDENTIFIER(__annotations__); + PyObject *ann_dict; + PyObject *ann = POP(); + PyObject *name = GETITEM(names, oparg); + int err; + if (f->f_locals == NULL) { + PyErr_Format(PyExc_SystemError, + "no locals found when storing annotation"); + Py_DECREF(ann); + goto error; + } + /* first try to get __annotations__ from locals... */ + if (PyDict_CheckExact(f->f_locals)) { + ann_dict = _PyDict_GetItemId(f->f_locals, + &PyId___annotations__); + if (ann_dict == NULL) { + PyErr_SetString(PyExc_NameError, + "__annotations__ not found"); + Py_DECREF(ann); + goto error; + } + Py_INCREF(ann_dict); + } + else { + PyObject *ann_str = _PyUnicode_FromId(&PyId___annotations__); + if (ann_str == NULL) { + Py_DECREF(ann); + goto error; + } + ann_dict = PyObject_GetItem(f->f_locals, ann_str); + if (ann_dict == NULL) { + if (PyErr_ExceptionMatches(PyExc_KeyError)) { + PyErr_SetString(PyExc_NameError, + "__annotations__ not found"); + } + Py_DECREF(ann); + goto error; + } + } + /* ...if succeeded, __annotations__[name] = ann */ + if (PyDict_CheckExact(ann_dict)) { + err = PyDict_SetItem(ann_dict, name, ann); + } + else { + err = PyObject_SetItem(ann_dict, name, ann); + } + Py_DECREF(ann_dict); + Py_DECREF(ann); + if (err != 0) { + goto error; + } + DISPATCH(); + } + TARGET(DELETE_SUBSCR) { PyObject *sub = TOP(); PyObject *container = SECOND(); @@ -2006,6 +1925,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } SET_TOP(awaitable); + PREDICT(LOAD_CONST); DISPATCH(); } @@ -2016,41 +1936,52 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *aiter = TOP(); PyTypeObject *type = Py_TYPE(aiter); - if (type->tp_as_async != NULL) - getter = type->tp_as_async->am_anext; + if (PyAsyncGen_CheckExact(aiter)) { + awaitable = type->tp_as_async->am_anext(aiter); + if (awaitable == NULL) { + goto error; + } + } else { + if (type->tp_as_async != NULL){ + getter = type->tp_as_async->am_anext; + } - if (getter != NULL) { - next_iter = (*getter)(aiter); - if (next_iter == NULL) { + if (getter != NULL) { + next_iter = (*getter)(aiter); + if (next_iter == NULL) { + goto error; + } + } + else { + PyErr_Format( + PyExc_TypeError, + "'async for' requires an iterator with " + "__anext__ method, got %.100s", + type->tp_name); goto error; } - } - else { - PyErr_Format( - PyExc_TypeError, - "'async for' requires an iterator with " - "__anext__ method, got %.100s", - type->tp_name); - goto error; - } - awaitable = _PyCoro_GetAwaitableIter(next_iter); - if (awaitable == NULL) { - PyErr_Format( - PyExc_TypeError, - "'async for' received an invalid object " - "from __anext__: %.100s", - Py_TYPE(next_iter)->tp_name); + awaitable = _PyCoro_GetAwaitableIter(next_iter); + if (awaitable == NULL) { + PyErr_Format( + PyExc_TypeError, + "'async for' received an invalid object " + "from __anext__: %.100s", + Py_TYPE(next_iter)->tp_name); - Py_DECREF(next_iter); - goto error; - } else - Py_DECREF(next_iter); + Py_DECREF(next_iter); + goto error; + } else { + Py_DECREF(next_iter); + } + } PUSH(awaitable); + PREDICT(LOAD_CONST); DISPATCH(); } + PREDICTED(GET_AWAITABLE); TARGET(GET_AWAITABLE) { PyObject *iterable = TOP(); PyObject *iter = _PyCoro_GetAwaitableIter(iterable); @@ -2078,21 +2009,22 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) goto error; } + PREDICT(LOAD_CONST); DISPATCH(); } TARGET(YIELD_FROM) { PyObject *v = POP(); - PyObject *reciever = TOP(); + PyObject *receiver = TOP(); int err; - if (PyGen_CheckExact(reciever) || PyCoro_CheckExact(reciever)) { - retval = _PyGen_Send((PyGenObject *)reciever, v); + if (PyGen_CheckExact(receiver) || PyCoro_CheckExact(receiver)) { + retval = _PyGen_Send((PyGenObject *)receiver, v); } else { _Py_IDENTIFIER(send); if (v == Py_None) - retval = Py_TYPE(reciever)->tp_iternext(reciever); + retval = Py_TYPE(receiver)->tp_iternext(receiver); else - retval = _PyObject_CallMethodIdObjArgs(reciever, &PyId_send, v, NULL); + retval = _PyObject_CallMethodIdObjArgs(receiver, &PyId_send, v, NULL); } Py_DECREF(v); if (retval == NULL) { @@ -2103,7 +2035,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) err = _PyGen_FetchStopIterationValue(&val); if (err < 0) goto error; - Py_DECREF(reciever); + Py_DECREF(receiver); SET_TOP(val); DISPATCH(); } @@ -2111,12 +2043,23 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) f->f_stacktop = stack_pointer; why = WHY_YIELD; /* and repeat... */ - f->f_lasti--; + f->f_lasti -= sizeof(_Py_CODEUNIT); goto fast_yield; } TARGET(YIELD_VALUE) { retval = POP(); + + if (co->co_flags & CO_ASYNC_GENERATOR) { + PyObject *w = _PyAsyncGenValueWrapperNew(retval); + Py_DECREF(retval); + if (w == NULL) { + retval = NULL; + goto error; + } + retval = w; + } + f->f_stacktop = stack_pointer; why = WHY_YIELD; goto fast_yield; @@ -2133,6 +2076,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + PREDICTED(POP_BLOCK); TARGET(POP_BLOCK) { PyTryBlock *b = PyFrame_BlockPop(f); UNWIND_BLOCK(b); @@ -2249,7 +2193,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(UNPACK_SEQUENCE); + PREDICTED(UNPACK_SEQUENCE); TARGET(UNPACK_SEQUENCE) { PyObject *seq = POP(), *item, **items; if (PyTuple_CheckExact(seq) && @@ -2358,7 +2302,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } else { v = PyObject_GetItem(locals, name); - if (v == NULL && _PyErr_OCCURRED()) { + if (v == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); @@ -2398,26 +2342,33 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *name = GETITEM(names, oparg); PyObject *v; if (PyDict_CheckExact(f->f_globals) - && PyDict_CheckExact(f->f_builtins)) { + && PyDict_CheckExact(f->f_builtins)) + { v = _PyDict_LoadGlobal((PyDictObject *)f->f_globals, (PyDictObject *)f->f_builtins, name); if (v == NULL) { - if (!_PyErr_OCCURRED()) + if (!_PyErr_OCCURRED()) { + /* _PyDict_LoadGlobal() returns NULL without raising + * an exception if the key doesn't exist */ format_exc_check_arg(PyExc_NameError, NAME_ERROR_MSG, name); + } goto error; } Py_INCREF(v); } else { /* Slow-path if globals or builtins is not a dict */ + + /* namespace 1: globals */ v = PyObject_GetItem(f->f_globals, name); if (v == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); + /* namespace 2: builtins */ v = PyObject_GetItem(f->f_builtins, name); if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) @@ -2477,7 +2428,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } else { value = PyObject_GetItem(locals, name); - if (value == NULL && PyErr_Occurred()) { + if (value == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); @@ -2516,6 +2467,24 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(BUILD_STRING) { + PyObject *str; + PyObject *empty = PyUnicode_New(0, 0); + if (empty == NULL) { + goto error; + } + str = _PyUnicode_JoinArray(empty, stack_pointer - oparg, oparg); + Py_DECREF(empty); + if (str == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + Py_DECREF(item); + } + PUSH(str); + DISPATCH(); + } + TARGET(BUILD_TUPLE) { PyObject *tup = PyTuple_New(oparg); if (tup == NULL) @@ -2540,13 +2509,14 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - TARGET_WITH_IMPL(BUILD_TUPLE_UNPACK, _build_list_unpack) - TARGET(BUILD_LIST_UNPACK) - _build_list_unpack: { - int convert_to_tuple = opcode == BUILD_TUPLE_UNPACK; - int i; + TARGET(BUILD_TUPLE_UNPACK_WITH_CALL) + TARGET(BUILD_TUPLE_UNPACK) + TARGET(BUILD_LIST_UNPACK) { + int convert_to_tuple = opcode != BUILD_LIST_UNPACK; + Py_ssize_t i; PyObject *sum = PyList_New(0); PyObject *return_value; + if (sum == NULL) goto error; @@ -2555,6 +2525,16 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) none_val = _PyList_Extend((PyListObject *)sum, PEEK(i)); if (none_val == NULL) { + if (opcode == BUILD_TUPLE_UNPACK_WITH_CALL && + PyErr_ExceptionMatches(PyExc_TypeError)) { + PyObject *func = PEEK(1 + oparg); + PyErr_Format(PyExc_TypeError, + "%.200s%.200s argument after * " + "must be an iterable, not %.200s", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func), + PEEK(i)->ob_type->tp_name); + } Py_DECREF(sum); goto error; } @@ -2599,7 +2579,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } TARGET(BUILD_SET_UNPACK) { - int i; + Py_ssize_t i; PyObject *sum = PySet_New(NULL); if (sum == NULL) goto error; @@ -2618,7 +2598,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } TARGET(BUILD_MAP) { - int i; + Py_ssize_t i; PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg); if (map == NULL) goto error; @@ -2641,87 +2621,162 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - TARGET_WITH_IMPL(BUILD_MAP_UNPACK_WITH_CALL, _build_map_unpack) - TARGET(BUILD_MAP_UNPACK) - _build_map_unpack: { - int with_call = opcode == BUILD_MAP_UNPACK_WITH_CALL; - int num_maps; - int i; - PyObject *sum = PyDict_New(); - if (sum == NULL) + TARGET(SETUP_ANNOTATIONS) { + _Py_IDENTIFIER(__annotations__); + int err; + PyObject *ann_dict; + if (f->f_locals == NULL) { + PyErr_Format(PyExc_SystemError, + "no locals found when setting up annotations"); goto error; - if (with_call) { - num_maps = oparg & 0xff; } - else { - num_maps = oparg; + /* check if __annotations__ in locals()... */ + if (PyDict_CheckExact(f->f_locals)) { + ann_dict = _PyDict_GetItemId(f->f_locals, + &PyId___annotations__); + if (ann_dict == NULL) { + /* ...if not, create a new one */ + ann_dict = PyDict_New(); + if (ann_dict == NULL) { + goto error; + } + err = _PyDict_SetItemId(f->f_locals, + &PyId___annotations__, ann_dict); + Py_DECREF(ann_dict); + if (err != 0) { + goto error; + } + } } - - for (i = num_maps; i > 0; i--) { - PyObject *arg = PEEK(i); - if (with_call) { - PyObject *intersection = _PyDictView_Intersect(sum, arg); - - if (intersection == NULL) { - if (PyErr_ExceptionMatches(PyExc_AttributeError) || - !PyMapping_Check(arg)) { - int function_location = (oparg>>8) & 0xff; - PyObject *func = ( - PEEK(function_location + num_maps)); - PyErr_Format(PyExc_TypeError, - "%.200s%.200s argument after ** " - "must be a mapping, not %.200s", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func), - arg->ob_type->tp_name); - } - Py_DECREF(sum); + else { + /* do the same if locals() is not a dict */ + PyObject *ann_str = _PyUnicode_FromId(&PyId___annotations__); + if (ann_str == NULL) { + break; + } + ann_dict = PyObject_GetItem(f->f_locals, ann_str); + if (ann_dict == NULL) { + if (!PyErr_ExceptionMatches(PyExc_KeyError)) { goto error; } - - if (PySet_GET_SIZE(intersection)) { - Py_ssize_t idx = 0; - PyObject *key; - int function_location = (oparg>>8) & 0xff; - PyObject *func = PEEK(function_location + num_maps); - Py_hash_t hash; - _PySet_NextEntry(intersection, &idx, &key, &hash); - if (!PyUnicode_Check(key)) { - PyErr_Format(PyExc_TypeError, - "%.200s%.200s keywords must be strings", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func)); - } else { - PyErr_Format(PyExc_TypeError, - "%.200s%.200s got multiple " - "values for keyword argument '%U'", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func), - key); - } - Py_DECREF(intersection); - Py_DECREF(sum); + PyErr_Clear(); + ann_dict = PyDict_New(); + if (ann_dict == NULL) { + goto error; + } + err = PyObject_SetItem(f->f_locals, ann_str, ann_dict); + Py_DECREF(ann_dict); + if (err != 0) { goto error; } - Py_DECREF(intersection); } + else { + Py_DECREF(ann_dict); + } + } + DISPATCH(); + } + + TARGET(BUILD_CONST_KEY_MAP) { + Py_ssize_t i; + PyObject *map; + PyObject *keys = TOP(); + if (!PyTuple_CheckExact(keys) || + PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) { + PyErr_SetString(PyExc_SystemError, + "bad BUILD_CONST_KEY_MAP keys argument"); + goto error; + } + map = _PyDict_NewPresized((Py_ssize_t)oparg); + if (map == NULL) { + goto error; + } + for (i = oparg; i > 0; i--) { + int err; + PyObject *key = PyTuple_GET_ITEM(keys, oparg - i); + PyObject *value = PEEK(i + 1); + err = PyDict_SetItem(map, key, value); + if (err != 0) { + Py_DECREF(map); + goto error; + } + } + + Py_DECREF(POP()); + while (oparg--) { + Py_DECREF(POP()); + } + PUSH(map); + DISPATCH(); + } + TARGET(BUILD_MAP_UNPACK) { + Py_ssize_t i; + PyObject *sum = PyDict_New(); + if (sum == NULL) + goto error; + + for (i = oparg; i > 0; i--) { + PyObject *arg = PEEK(i); if (PyDict_Update(sum, arg) < 0) { if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - if (with_call) { - int function_location = (oparg>>8) & 0xff; - PyObject *func = PEEK(function_location + num_maps); - PyErr_Format(PyExc_TypeError, - "%.200s%.200s argument after ** " - "must be a mapping, not %.200s", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func), - arg->ob_type->tp_name); + PyErr_Format(PyExc_TypeError, + "'%.200s' object is not a mapping", + arg->ob_type->tp_name); + } + Py_DECREF(sum); + goto error; + } + } + + while (oparg--) + Py_DECREF(POP()); + PUSH(sum); + DISPATCH(); + } + + TARGET(BUILD_MAP_UNPACK_WITH_CALL) { + Py_ssize_t i; + PyObject *sum = PyDict_New(); + if (sum == NULL) + goto error; + + for (i = oparg; i > 0; i--) { + PyObject *arg = PEEK(i); + if (_PyDict_MergeEx(sum, arg, 2) < 0) { + PyObject *func = PEEK(2 + oparg); + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_TypeError, + "%.200s%.200s argument after ** " + "must be a mapping, not %.200s", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func), + arg->ob_type->tp_name); + } + else if (PyErr_ExceptionMatches(PyExc_KeyError)) { + PyObject *exc, *val, *tb; + PyErr_Fetch(&exc, &val, &tb); + if (val && PyTuple_Check(val) && PyTuple_GET_SIZE(val) == 1) { + PyObject *key = PyTuple_GET_ITEM(val, 0); + if (!PyUnicode_Check(key)) { + PyErr_Format(PyExc_TypeError, + "%.200s%.200s keywords must be strings", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func)); + } else { + PyErr_Format(PyExc_TypeError, + "%.200s%.200s got multiple " + "values for keyword argument '%U'", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func), + key); + } + Py_XDECREF(exc); + Py_XDECREF(val); + Py_XDECREF(tb); } else { - PyErr_Format(PyExc_TypeError, - "'%.200s' object is not a mapping", - arg->ob_type->tp_name); + PyErr_Restore(exc, val, tb); } } Py_DECREF(sum); @@ -2729,7 +2784,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } } - while (num_maps--) + while (oparg--) Py_DECREF(POP()); PUSH(sum); DISPATCH(); @@ -2778,45 +2833,13 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } TARGET(IMPORT_NAME) { - _Py_IDENTIFIER(__import__); PyObject *name = GETITEM(names, oparg); - PyObject *func = _PyDict_GetItemId(f->f_builtins, &PyId___import__); - PyObject *from, *level, *args, *res; - if (func == NULL) { - PyErr_SetString(PyExc_ImportError, - "__import__ not found"); - goto error; - } - Py_INCREF(func); - from = POP(); - level = TOP(); - if (PyLong_AsLong(level) != -1 || PyErr_Occurred()) - args = PyTuple_Pack(5, - name, - f->f_globals, - f->f_locals == NULL ? - Py_None : f->f_locals, - from, - level); - else - args = PyTuple_Pack(4, - name, - f->f_globals, - f->f_locals == NULL ? - Py_None : f->f_locals, - from); + PyObject *fromlist = POP(); + PyObject *level = TOP(); + PyObject *res; + res = import_name(f, name, fromlist, level); Py_DECREF(level); - Py_DECREF(from); - if (args == NULL) { - Py_DECREF(func); - STACKADJ(-1); - goto error; - } - READ_TIMESTAMP(intr0); - res = PyEval_CallObject(func, args); - READ_TIMESTAMP(intr1); - Py_DECREF(args); - Py_DECREF(func); + Py_DECREF(fromlist); SET_TOP(res); if (res == NULL) goto error; @@ -2835,9 +2858,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) "no locals found during 'import *'"); goto error; } - READ_TIMESTAMP(intr0); err = import_all_from(locals, from); - READ_TIMESTAMP(intr1); PyFrame_LocalsToFast(f, 0); Py_DECREF(from); if (err != 0) @@ -2849,9 +2870,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *name = GETITEM(names, oparg); PyObject *from = TOP(); PyObject *res; - READ_TIMESTAMP(intr0); res = import_from(from, name); - READ_TIMESTAMP(intr1); PUSH(res); if (res == NULL) goto error; @@ -2863,7 +2882,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) FAST_DISPATCH(); } - PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE); + PREDICTED(POP_JUMP_IF_FALSE); TARGET(POP_JUMP_IF_FALSE) { PyObject *cond = POP(); int err; @@ -2887,7 +2906,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE); + PREDICTED(POP_JUMP_IF_TRUE); TARGET(POP_JUMP_IF_TRUE) { PyObject *cond = POP(); int err; @@ -2964,7 +2983,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(JUMP_ABSOLUTE); + PREDICTED(JUMP_ABSOLUTE); TARGET(JUMP_ABSOLUTE) { JUMPTO(oparg); #if FAST_LOOPS @@ -2990,6 +3009,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (iter == NULL) goto error; PREDICT(FOR_ITER); + PREDICT(CALL_FUNCTION); DISPATCH(); } @@ -3018,10 +3038,11 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (iter == NULL) goto error; } + PREDICT(LOAD_CONST); DISPATCH(); } - PREDICTED_WITH_ARG(FOR_ITER); + PREDICTED(FOR_ITER); TARGET(FOR_ITER) { /* before: [iter]; after: [iter, iter()] *or* [] */ PyObject *iter = TOP(); @@ -3043,6 +3064,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) STACKADJ(-1); Py_DECREF(iter); JUMPBY(oparg); + PREDICT(POP_BLOCK); DISPATCH(); } @@ -3059,10 +3081,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) goto fast_block_end; } - TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally) - TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally) - TARGET(SETUP_FINALLY) - _setup_finally: { + TARGET(SETUP_LOOP) + TARGET(SETUP_EXCEPT) + TARGET(SETUP_FINALLY) { /* NOTE: If you add any new block-setup opcodes that are not try/except/finally handlers, you may need to update the PyGen_NeedsFinalizing() function. @@ -3093,6 +3114,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (res == NULL) goto error; PUSH(res); + PREDICT(GET_AWAITABLE); DISPATCH(); } @@ -3241,178 +3263,135 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + PREDICTED(CALL_FUNCTION); TARGET(CALL_FUNCTION) { PyObject **sp, *res; PCALL(PCALL_ALL); sp = stack_pointer; -#ifdef WITH_TSC - res = call_function(&sp, oparg, &intr0, &intr1); -#else - res = call_function(&sp, oparg); -#endif + res = call_function(&sp, oparg, NULL); stack_pointer = sp; PUSH(res); - if (res == NULL) + if (res == NULL) { goto error; + } DISPATCH(); } - TARGET_WITH_IMPL(CALL_FUNCTION_VAR, _call_function_var_kw) - TARGET_WITH_IMPL(CALL_FUNCTION_KW, _call_function_var_kw) - TARGET(CALL_FUNCTION_VAR_KW) - _call_function_var_kw: { - int na = oparg & 0xff; - int nk = (oparg>>8) & 0xff; - int flags = (opcode - CALL_FUNCTION) & 3; - int n = na + 2 * nk; - PyObject **pfunc, *func, **sp, *res; + TARGET(CALL_FUNCTION_KW) { + PyObject **sp, *res, *names; + + names = POP(); + assert(PyTuple_CheckExact(names) && PyTuple_GET_SIZE(names) <= oparg); PCALL(PCALL_ALL); - if (flags & CALL_FLAG_VAR) - n++; - if (flags & CALL_FLAG_KW) - n++; - pfunc = stack_pointer - n - 1; - func = *pfunc; - - if (PyMethod_Check(func) - && PyMethod_GET_SELF(func) != NULL) { - PyObject *self = PyMethod_GET_SELF(func); - Py_INCREF(self); - func = PyMethod_GET_FUNCTION(func); - Py_INCREF(func); - Py_SETREF(*pfunc, self); - na++; - /* n++; */ - } else - Py_INCREF(func); sp = stack_pointer; - READ_TIMESTAMP(intr0); - res = ext_do_call(func, &sp, flags, na, nk); - READ_TIMESTAMP(intr1); + res = call_function(&sp, oparg, names); stack_pointer = sp; - Py_DECREF(func); - - while (stack_pointer > pfunc) { - PyObject *o = POP(); - Py_DECREF(o); - } PUSH(res); - if (res == NULL) - goto error; - DISPATCH(); - } + Py_DECREF(names); - TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function) - TARGET(MAKE_FUNCTION) - _make_function: { - int posdefaults = oparg & 0xff; - int kwdefaults = (oparg>>8) & 0xff; - int num_annotations = (oparg >> 16) & 0x7fff; - - PyObject *qualname = POP(); /* qualname */ - PyObject *code = POP(); /* code object */ - PyObject *func = PyFunction_NewWithQualName(code, f->f_globals, qualname); - Py_DECREF(code); - Py_DECREF(qualname); - - if (func == NULL) + if (res == NULL) { goto error; - - if (opcode == MAKE_CLOSURE) { - PyObject *closure = POP(); - if (PyFunction_SetClosure(func, closure) != 0) { - /* Can't happen unless bytecode is corrupt. */ - Py_DECREF(func); - Py_DECREF(closure); - goto error; - } - Py_DECREF(closure); } + DISPATCH(); + } - if (num_annotations > 0) { - Py_ssize_t name_ix; - PyObject *names = POP(); /* names of args with annotations */ - PyObject *anns = PyDict_New(); - if (anns == NULL) { - Py_DECREF(func); - Py_DECREF(names); - goto error; - } - name_ix = PyTuple_Size(names); - assert(num_annotations == name_ix+1); - while (name_ix > 0) { - PyObject *name, *value; - int err; - --name_ix; - name = PyTuple_GET_ITEM(names, name_ix); - value = POP(); - err = PyDict_SetItem(anns, name, value); - Py_DECREF(value); - if (err != 0) { - Py_DECREF(anns); - Py_DECREF(func); - Py_DECREF(names); + TARGET(CALL_FUNCTION_EX) { + PyObject *func, *callargs, *kwargs = NULL, *result; + PCALL(PCALL_ALL); + if (oparg & 0x01) { + kwargs = POP(); + if (!PyDict_CheckExact(kwargs)) { + PyObject *d = PyDict_New(); + if (d == NULL) goto error; - } - } - Py_DECREF(names); - - if (PyFunction_SetAnnotations(func, anns) != 0) { - /* Can't happen unless - PyFunction_SetAnnotations changes. */ - Py_DECREF(anns); - Py_DECREF(func); - goto error; - } - Py_DECREF(anns); - } - - /* XXX Maybe this should be a separate opcode? */ - if (kwdefaults > 0) { - PyObject *defs = PyDict_New(); - if (defs == NULL) { - Py_DECREF(func); - goto error; - } - while (--kwdefaults >= 0) { - PyObject *v = POP(); /* default value */ - PyObject *key = POP(); /* kw only arg name */ - int err = PyDict_SetItem(defs, key, v); - Py_DECREF(v); - Py_DECREF(key); - if (err != 0) { - Py_DECREF(defs); - Py_DECREF(func); + if (PyDict_Update(d, kwargs) != 0) { + Py_DECREF(d); + /* PyDict_Update raises attribute + * error (percolated from an attempt + * to get 'keys' attribute) instead of + * a type error if its second argument + * is not a mapping. + */ + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + func = SECOND(); + PyErr_Format(PyExc_TypeError, + "%.200s%.200s argument after ** " + "must be a mapping, not %.200s", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func), + kwargs->ob_type->tp_name); + } + Py_DECREF(kwargs); goto error; } + Py_DECREF(kwargs); + kwargs = d; } - if (PyFunction_SetKwDefaults(func, defs) != 0) { - /* Can't happen unless - PyFunction_SetKwDefaults changes. */ - Py_DECREF(func); - Py_DECREF(defs); - goto error; - } - Py_DECREF(defs); + assert(PyDict_CheckExact(kwargs)); } - if (posdefaults > 0) { - PyObject *defs = PyTuple_New(posdefaults); - if (defs == NULL) { - Py_DECREF(func); + callargs = POP(); + func = TOP(); + if (!PyTuple_CheckExact(callargs)) { + if (Py_TYPE(callargs)->tp_iter == NULL && + !PySequence_Check(callargs)) { + PyErr_Format(PyExc_TypeError, + "%.200s%.200s argument after * " + "must be an iterable, not %.200s", + PyEval_GetFuncName(func), + PyEval_GetFuncDesc(func), + callargs->ob_type->tp_name); + Py_DECREF(callargs); goto error; } - while (--posdefaults >= 0) - PyTuple_SET_ITEM(defs, posdefaults, POP()); - if (PyFunction_SetDefaults(func, defs) != 0) { - /* Can't happen unless - PyFunction_SetDefaults changes. */ - Py_DECREF(defs); - Py_DECREF(func); + Py_SETREF(callargs, PySequence_Tuple(callargs)); + if (callargs == NULL) { goto error; } - Py_DECREF(defs); } - PUSH(func); + assert(PyTuple_CheckExact(callargs)); + + result = do_call_core(func, callargs, kwargs); + Py_DECREF(func); + Py_DECREF(callargs); + Py_XDECREF(kwargs); + + SET_TOP(result); + if (result == NULL) { + goto error; + } + DISPATCH(); + } + + TARGET(MAKE_FUNCTION) { + PyObject *qualname = POP(); + PyObject *codeobj = POP(); + PyFunctionObject *func = (PyFunctionObject *) + PyFunction_NewWithQualName(codeobj, f->f_globals, qualname); + + Py_DECREF(codeobj); + Py_DECREF(qualname); + if (func == NULL) { + goto error; + } + + if (oparg & 0x08) { + assert(PyTuple_CheckExact(TOP())); + func ->func_closure = POP(); + } + if (oparg & 0x04) { + assert(PyDict_CheckExact(TOP())); + func->func_annotations = POP(); + } + if (oparg & 0x02) { + assert(PyDict_CheckExact(TOP())); + func->func_kwdefaults = POP(); + } + if (oparg & 0x01) { + assert(PyTuple_CheckExact(TOP())); + func->func_defaults = POP(); + } + + PUSH((PyObject *)func); DISPATCH(); } @@ -3434,9 +3413,68 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(FORMAT_VALUE) { + /* Handles f-string value formatting. */ + PyObject *result; + PyObject *fmt_spec; + PyObject *value; + PyObject *(*conv_fn)(PyObject *); + int which_conversion = oparg & FVC_MASK; + int have_fmt_spec = (oparg & FVS_MASK) == FVS_HAVE_SPEC; + + fmt_spec = have_fmt_spec ? POP() : NULL; + value = POP(); + + /* See if any conversion is specified. */ + switch (which_conversion) { + case FVC_STR: conv_fn = PyObject_Str; break; + case FVC_REPR: conv_fn = PyObject_Repr; break; + case FVC_ASCII: conv_fn = PyObject_ASCII; break; + + /* Must be 0 (meaning no conversion), since only four + values are allowed by (oparg & FVC_MASK). */ + default: conv_fn = NULL; break; + } + + /* If there's a conversion function, call it and replace + value with that result. Otherwise, just use value, + without conversion. */ + if (conv_fn != NULL) { + result = conv_fn(value); + Py_DECREF(value); + if (result == NULL) { + Py_XDECREF(fmt_spec); + goto error; + } + value = result; + } + + /* If value is a unicode object, and there's no fmt_spec, + then we know the result of format(value) is value + itself. In that case, skip calling format(). I plan to + move this optimization in to PyObject_Format() + itself. */ + if (PyUnicode_CheckExact(value) && fmt_spec == NULL) { + /* Do nothing, just transfer ownership to result. */ + result = value; + } else { + /* Actually call format(). */ + result = PyObject_Format(value, fmt_spec); + Py_DECREF(value); + Py_XDECREF(fmt_spec); + if (result == NULL) { + goto error; + } + } + + PUSH(result); + DISPATCH(); + } + TARGET(EXTENDED_ARG) { - opcode = NEXTOP(); - oparg = oparg<<16 | NEXTARG(); + int oldoparg = oparg; + NEXTOPARG(); + oparg |= oldoparg << 8; goto dispatch_opcode; } @@ -3463,7 +3501,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) assert(0); error: - READ_TIMESTAMP(inst1); assert(why == WHY_NOT); why = WHY_EXCEPTION; @@ -3567,7 +3604,6 @@ fast_block_end: if (why != WHY_NOT) break; - READ_TIMESTAMP(loop1); assert(!PyErr_Occurred()); @@ -3586,7 +3622,7 @@ fast_block_end: assert((retval != NULL) ^ (PyErr_Occurred() != NULL)); fast_yield: - if (co->co_flags & (CO_GENERATOR | CO_COROUTINE)) { + if (co->co_flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) { /* The purpose of this block is to put aside the generator's exception state and restore that of the calling frame. If the current @@ -3597,9 +3633,11 @@ fast_yield: state came into existence in this frame. (An uncaught exception would have why == WHY_EXCEPTION, and we wouldn't be here). */ int i; - for (i = 0; i < f->f_iblock; i++) - if (f->f_blockstack[i].b_type == EXCEPT_HANDLER) + for (i = 0; i < f->f_iblock; i++) { + if (f->f_blockstack[i].b_type == EXCEPT_HANDLER) { break; + } + } if (i == f->f_iblock) /* We did not create this exception. */ restore_and_clear_exc_state(tstate, f); @@ -3640,6 +3678,8 @@ fast_yield: /* pop frame */ exit_eval_frame: + if (PyDTrace_FUNCTION_RETURN_ENABLED()) + dtrace_function_return(f); Py_LeaveRecursiveCall(); f->f_executing = 0; tstate->frame = f->f_back; @@ -3710,12 +3750,12 @@ format_missing(const char *kind, PyCodeObject *co, PyObject *names) } static void -missing_arguments(PyCodeObject *co, int missing, int defcount, +missing_arguments(PyCodeObject *co, Py_ssize_t missing, Py_ssize_t defcount, PyObject **fastlocals) { - int i, j = 0; - int start, end; - int positional = defcount != -1; + Py_ssize_t i, j = 0; + Py_ssize_t start, end; + int positional = (defcount != -1); const char *kind = positional ? "positional" : "keyword-only"; PyObject *missing_names; @@ -3748,33 +3788,39 @@ missing_arguments(PyCodeObject *co, int missing, int defcount, } static void -too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlocals) +too_many_positional(PyCodeObject *co, Py_ssize_t given, Py_ssize_t defcount, + PyObject **fastlocals) { int plural; - int kwonly_given = 0; - int i; + Py_ssize_t kwonly_given = 0; + Py_ssize_t i; PyObject *sig, *kwonly_sig; + Py_ssize_t co_argcount = co->co_argcount; assert((co->co_flags & CO_VARARGS) == 0); /* Count missing keyword-only args. */ - for (i = co->co_argcount; i < co->co_argcount + co->co_kwonlyargcount; i++) - if (GETLOCAL(i) != NULL) + for (i = co_argcount; i < co_argcount + co->co_kwonlyargcount; i++) { + if (GETLOCAL(i) != NULL) { kwonly_given++; + } + } if (defcount) { - int atleast = co->co_argcount - defcount; + Py_ssize_t atleast = co_argcount - defcount; plural = 1; - sig = PyUnicode_FromFormat("from %d to %d", atleast, co->co_argcount); + sig = PyUnicode_FromFormat("from %zd to %zd", atleast, co_argcount); } else { - plural = co->co_argcount != 1; - sig = PyUnicode_FromFormat("%d", co->co_argcount); + plural = (co_argcount != 1); + sig = PyUnicode_FromFormat("%zd", co_argcount); } if (sig == NULL) return; if (kwonly_given) { - const char *format = " positional argument%s (and %d keyword-only argument%s)"; - kwonly_sig = PyUnicode_FromFormat(format, given != 1 ? "s" : "", kwonly_given, - kwonly_given != 1 ? "s" : ""); + const char *format = " positional argument%s (and %zd keyword-only argument%s)"; + kwonly_sig = PyUnicode_FromFormat(format, + given != 1 ? "s" : "", + kwonly_given, + kwonly_given != 1 ? "s" : ""); if (kwonly_sig == NULL) { Py_DECREF(sig); return; @@ -3786,7 +3832,7 @@ too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlo assert(kwonly_sig != NULL); } PyErr_Format(PyExc_TypeError, - "%U() takes %U positional argument%s but %d%U %s given", + "%U() takes %U positional argument%s but %zd%U %s given", co->co_name, sig, plural ? "s" : "", @@ -3803,20 +3849,22 @@ too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlo static PyObject * _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, - PyObject **args, int argcount, PyObject **kws, int kwcount, - PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure, + PyObject **args, Py_ssize_t argcount, + PyObject **kwnames, PyObject **kwargs, + Py_ssize_t kwcount, int kwstep, + PyObject **defs, Py_ssize_t defcount, + PyObject *kwdefs, PyObject *closure, PyObject *name, PyObject *qualname) { PyCodeObject* co = (PyCodeObject*)_co; PyFrameObject *f; PyObject *retval = NULL; PyObject **fastlocals, **freevars; - PyThreadState *tstate = PyThreadState_GET(); + PyThreadState *tstate; PyObject *x, *u; - int total_args = co->co_argcount + co->co_kwonlyargcount; - int i; - int n = argcount; - PyObject *kwdict = NULL; + const Py_ssize_t total_args = co->co_argcount + co->co_kwonlyargcount; + Py_ssize_t i, n; + PyObject *kwdict; if (globals == NULL) { PyErr_SetString(PyExc_SystemError, @@ -3824,36 +3872,50 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, return NULL; } + /* Create the frame */ + tstate = PyThreadState_GET(); assert(tstate != NULL); - assert(globals != NULL); f = PyFrame_New(tstate, co, globals, locals); - if (f == NULL) + if (f == NULL) { return NULL; - + } fastlocals = f->f_localsplus; freevars = f->f_localsplus + co->co_nlocals; - /* Parse arguments. */ + /* Create a dictionary for keyword parameters (**kwags) */ if (co->co_flags & CO_VARKEYWORDS) { kwdict = PyDict_New(); if (kwdict == NULL) goto fail; i = total_args; - if (co->co_flags & CO_VARARGS) + if (co->co_flags & CO_VARARGS) { i++; + } SETLOCAL(i, kwdict); } - if (argcount > co->co_argcount) + else { + kwdict = NULL; + } + + /* Copy positional arguments into local variables */ + if (argcount > co->co_argcount) { n = co->co_argcount; + } + else { + n = argcount; + } for (i = 0; i < n; i++) { x = args[i]; Py_INCREF(x); SETLOCAL(i, x); } + + /* Pack other positional arguments into the *args argument */ if (co->co_flags & CO_VARARGS) { u = PyTuple_New(argcount - n); - if (u == NULL) + if (u == NULL) { goto fail; + } SETLOCAL(total_args, u); for (i = n; i < argcount; i++) { x = args[i]; @@ -3861,69 +3923,82 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, PyTuple_SET_ITEM(u, i-n, x); } } - for (i = 0; i < kwcount; i++) { + + /* Handle keyword arguments passed as two strided arrays */ + kwcount *= kwstep; + for (i = 0; i < kwcount; i += kwstep) { PyObject **co_varnames; - PyObject *keyword = kws[2*i]; - PyObject *value = kws[2*i + 1]; - int j; + PyObject *keyword = kwnames[i]; + PyObject *value = kwargs[i]; + Py_ssize_t j; + if (keyword == NULL || !PyUnicode_Check(keyword)) { PyErr_Format(PyExc_TypeError, "%U() keywords must be strings", co->co_name); goto fail; } + /* Speed hack: do raw pointer compares. As names are normally interned this should almost always hit. */ co_varnames = ((PyTupleObject *)(co->co_varnames))->ob_item; for (j = 0; j < total_args; j++) { - PyObject *nm = co_varnames[j]; - if (nm == keyword) + PyObject *name = co_varnames[j]; + if (name == keyword) { goto kw_found; + } } + /* Slow fallback, just in case */ for (j = 0; j < total_args; j++) { - PyObject *nm = co_varnames[j]; - int cmp = PyObject_RichCompareBool( - keyword, nm, Py_EQ); - if (cmp > 0) + PyObject *name = co_varnames[j]; + int cmp = PyObject_RichCompareBool( keyword, name, Py_EQ); + if (cmp > 0) { goto kw_found; - else if (cmp < 0) + } + else if (cmp < 0) { goto fail; + } } + if (j >= total_args && kwdict == NULL) { PyErr_Format(PyExc_TypeError, - "%U() got an unexpected " - "keyword argument '%S'", - co->co_name, - keyword); + "%U() got an unexpected keyword argument '%S'", + co->co_name, keyword); goto fail; } + if (PyDict_SetItem(kwdict, keyword, value) == -1) { goto fail; } continue; + kw_found: if (GETLOCAL(j) != NULL) { PyErr_Format(PyExc_TypeError, - "%U() got multiple " - "values for argument '%S'", - co->co_name, - keyword); + "%U() got multiple values for argument '%S'", + co->co_name, keyword); goto fail; } Py_INCREF(value); SETLOCAL(j, value); } + + /* Check the number of positional arguments */ if (argcount > co->co_argcount && !(co->co_flags & CO_VARARGS)) { too_many_positional(co, argcount, defcount, fastlocals); goto fail; } + + /* Add missing positional arguments (copy default values from defs) */ if (argcount < co->co_argcount) { - int m = co->co_argcount - defcount; - int missing = 0; - for (i = argcount; i < m; i++) - if (GETLOCAL(i) == NULL) + Py_ssize_t m = co->co_argcount - defcount; + Py_ssize_t missing = 0; + for (i = argcount; i < m; i++) { + if (GETLOCAL(i) == NULL) { missing++; + } + } if (missing) { missing_arguments(co, missing, defcount, fastlocals); goto fail; @@ -3940,8 +4015,10 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, } } } + + /* Add missing keyword arguments (copy default values from kwdefs) */ if (co->co_kwonlyargcount > 0) { - int missing = 0; + Py_ssize_t missing = 0; for (i = co->co_argcount; i < total_args; i++) { PyObject *name; if (GETLOCAL(i) != NULL) @@ -3982,13 +4059,16 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, goto fail; SETLOCAL(co->co_nlocals + i, c); } + + /* Copy closure variables to free variables */ for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) { PyObject *o = PyTuple_GET_ITEM(closure, i); Py_INCREF(o); freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o; } - if (co->co_flags & (CO_GENERATOR | CO_COROUTINE)) { + /* Handle generator/coroutine/asynchronous generator */ + if (co->co_flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) { PyObject *gen; PyObject *coro_wrapper = tstate->coroutine_wrapper; int is_coro = co->co_flags & CO_COROUTINE; @@ -4013,6 +4093,8 @@ _PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals, * and return that as the value. */ if (is_coro) { gen = PyCoro_New(f, name, qualname); + } else if (co->co_flags & CO_ASYNC_GENERATOR) { + gen = PyAsyncGen_New(f, name, qualname); } else { gen = PyGen_NewWithQualName(f, name, qualname); } @@ -4052,8 +4134,10 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) { return _PyEval_EvalCodeWithName(_co, globals, locals, - args, argcount, kws, kwcount, - defs, defcount, kwdefs, closure, + args, argcount, + kws, kws + 1, kwcount, 2, + defs, defcount, + kwdefs, closure, NULL, NULL); } @@ -4312,7 +4396,7 @@ Error: #ifdef LLTRACE static int -prtrace(PyObject *v, char *str) +prtrace(PyObject *v, const char *str) { printf("%s ", str); if (PyObject_Print(v, stdout, 0) != 0) @@ -4489,6 +4573,38 @@ _PyEval_GetCoroutineWrapper(void) return tstate->coroutine_wrapper; } +void +_PyEval_SetAsyncGenFirstiter(PyObject *firstiter) +{ + PyThreadState *tstate = PyThreadState_GET(); + + Py_XINCREF(firstiter); + Py_XSETREF(tstate->async_gen_firstiter, firstiter); +} + +PyObject * +_PyEval_GetAsyncGenFirstiter(void) +{ + PyThreadState *tstate = PyThreadState_GET(); + return tstate->async_gen_firstiter; +} + +void +_PyEval_SetAsyncGenFinalizer(PyObject *finalizer) +{ + PyThreadState *tstate = PyThreadState_GET(); + + Py_XINCREF(finalizer); + Py_XSETREF(tstate->async_gen_finalizer, finalizer); +} + +PyObject * +_PyEval_GetAsyncGenFinalizer(void) +{ + PyThreadState *tstate = PyThreadState_GET(); + return tstate->async_gen_finalizer; +} + PyObject * PyEval_GetBuiltins(void) { @@ -4561,10 +4677,8 @@ PyEval_MergeCompilerFlags(PyCompilerFlags *cf) The arg must be a tuple or NULL. The kw must be a dict or NULL. */ PyObject * -PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) +PyEval_CallObjectWithKeywords(PyObject *func, PyObject *args, PyObject *kwargs) { - PyObject *result; - #ifdef Py_DEBUG /* PyEval_CallObjectWithKeywords() must not be called with an exception set. It raises a new exception if parameters are invalid or if @@ -4572,30 +4686,23 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) assert(!PyErr_Occurred()); #endif - if (arg == NULL) { - arg = PyTuple_New(0); - if (arg == NULL) - return NULL; + if (args == NULL) { + return _PyObject_FastCallDict(func, NULL, 0, kwargs); } - else if (!PyTuple_Check(arg)) { + + if (!PyTuple_Check(args)) { PyErr_SetString(PyExc_TypeError, "argument list must be a tuple"); return NULL; } - else - Py_INCREF(arg); - if (kw != NULL && !PyDict_Check(kw)) { + if (kwargs != NULL && !PyDict_Check(kwargs)) { PyErr_SetString(PyExc_TypeError, "keyword list must be a dictionary"); - Py_DECREF(arg); return NULL; } - result = PyObject_Call(func, arg, kw); - Py_DECREF(arg); - - return result; + return PyObject_Call(func, args, kwargs); } const char * @@ -4624,21 +4731,6 @@ PyEval_GetFuncDesc(PyObject *func) return " object"; } -static void -err_args(PyObject *func, int flags, int nargs) -{ - if (flags & METH_NOARGS) - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%d given)", - ((PyCFunctionObject *)func)->m_ml->ml_name, - nargs); - else - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%d given)", - ((PyCFunctionObject *)func)->m_ml->ml_name, - nargs); -} - #define C_TRACE(x, call) \ if (tstate->use_tracing && tstate->c_profilefunc) { \ if (call_trace(tstate->c_profilefunc, tstate->c_profileobj, \ @@ -4671,60 +4763,25 @@ if (tstate->use_tracing && tstate->c_profilefunc) { \ } static PyObject * -call_function(PyObject ***pp_stack, int oparg -#ifdef WITH_TSC - , uint64* pintr0, uint64* pintr1 -#endif - ) +call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) { - int na = oparg & 0xff; - int nk = (oparg>>8) & 0xff; - int n = na + 2 * nk; - PyObject **pfunc = (*pp_stack) - n - 1; + PyObject **pfunc = (*pp_stack) - oparg - 1; PyObject *func = *pfunc; PyObject *x, *w; + Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames); + Py_ssize_t nargs = oparg - nkwargs; + PyObject **stack; /* Always dispatch PyCFunction first, because these are presumed to be the most frequent callable object. */ - if (PyCFunction_Check(func) && nk == 0) { - int flags = PyCFunction_GET_FLAGS(func); + if (PyCFunction_Check(func)) { PyThreadState *tstate = PyThreadState_GET(); PCALL(PCALL_CFUNCTION); - if (flags & (METH_NOARGS | METH_O)) { - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - if (flags & METH_NOARGS && na == 0) { - C_TRACE(x, (*meth)(self,NULL)); - x = _Py_CheckFunctionResult(func, x, NULL); - } - else if (flags & METH_O && na == 1) { - PyObject *arg = EXT_POP(*pp_stack); - C_TRACE(x, (*meth)(self,arg)); - Py_DECREF(arg); - - x = _Py_CheckFunctionResult(func, x, NULL); - } - else { - err_args(func, flags, na); - x = NULL; - } - } - else { - PyObject *callargs; - callargs = load_args(pp_stack, na); - if (callargs != NULL) { - READ_TIMESTAMP(*pintr0); - C_TRACE(x, PyCFunction_Call(func,callargs,NULL)); - READ_TIMESTAMP(*pintr1); - Py_XDECREF(callargs); - } - else { - x = NULL; - } - } + stack = (*pp_stack) - nargs - nkwargs; + C_TRACE(x, _PyCFunction_FastCallKeywords(func, stack, nargs, kwnames)); } else { if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { @@ -4736,21 +4793,26 @@ call_function(PyObject ***pp_stack, int oparg func = PyMethod_GET_FUNCTION(func); Py_INCREF(func); Py_SETREF(*pfunc, self); - na++; - n++; - } else + nargs++; + } + else { Py_INCREF(func); - READ_TIMESTAMP(*pintr0); - if (PyFunction_Check(func)) - x = fast_function(func, pp_stack, n, na, nk); - else - x = do_call(func, pp_stack, na, nk); - READ_TIMESTAMP(*pintr1); - Py_DECREF(func); + } + + stack = (*pp_stack) - nargs - nkwargs; + + if (PyFunction_Check(func)) { + x = fast_function(func, stack, nargs, kwnames); + } + else { + x = _PyObject_FastCallKeywords(func, stack, nargs, kwnames); + } - assert((x != NULL) ^ (PyErr_Occurred() != NULL)); + Py_DECREF(func); } + assert((x != NULL) ^ (PyErr_Occurred() != NULL)); + /* Clear the stack of the function object. Also removes the arguments in case they weren't consumed already (fast_function() and err_args() leave them on the stack). @@ -4761,7 +4823,6 @@ call_function(PyObject ***pp_stack, int oparg PCALL(PCALL_POP); } - assert((x != NULL) ^ (PyErr_Occurred() != NULL)); return x; } @@ -4774,257 +4835,197 @@ call_function(PyObject ***pp_stack, int oparg done before evaluating the frame. */ +static PyObject* +_PyFunction_FastCall(PyCodeObject *co, PyObject **args, Py_ssize_t nargs, + PyObject *globals) +{ + PyFrameObject *f; + PyThreadState *tstate = PyThreadState_GET(); + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + + PCALL(PCALL_FASTER_FUNCTION); + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + + fastlocals = f->f_localsplus; + + for (i = 0; i < nargs; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + + return result; +} + static PyObject * -fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk) +fast_function(PyObject *func, PyObject **stack, + Py_ssize_t nargs, PyObject *kwnames) { PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); PyObject *globals = PyFunction_GET_GLOBALS(func); PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func); - PyObject *name = ((PyFunctionObject *)func) -> func_name; - PyObject *qualname = ((PyFunctionObject *)func) -> func_qualname; - PyObject **d = NULL; - int nd = 0; + PyObject *kwdefs, *closure, *name, *qualname; + PyObject **d; + Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames); + Py_ssize_t nd; + + assert(PyFunction_Check(func)); + assert(nargs >= 0); + assert(kwnames == NULL || PyTuple_CheckExact(kwnames)); + assert((nargs == 0 && nkwargs == 0) || stack != NULL); + /* kwnames must only contains str strings, no subclass, and all keys must + be unique */ PCALL(PCALL_FUNCTION); PCALL(PCALL_FAST_FUNCTION); - if (argdefs == NULL && co->co_argcount == n && - co->co_kwonlyargcount == 0 && nk==0 && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - PyFrameObject *f; - PyObject *retval = NULL; - PyThreadState *tstate = PyThreadState_GET(); - PyObject **fastlocals, **stack; - int i; - - PCALL(PCALL_FASTER_FUNCTION); - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) - return NULL; - fastlocals = f->f_localsplus; - stack = (*pp_stack) - n; - - for (i = 0; i < n; i++) { - Py_INCREF(*stack); - fastlocals[i] = *stack++; + if (co->co_kwonlyargcount == 0 && nkwargs == 0 && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) + { + if (argdefs == NULL && co->co_argcount == nargs) { + return _PyFunction_FastCall(co, stack, nargs, globals); + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + stack = &PyTuple_GET_ITEM(argdefs, 0); + return _PyFunction_FastCall(co, stack, Py_SIZE(argdefs), globals); } - retval = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return retval; } + + kwdefs = PyFunction_GET_KW_DEFAULTS(func); + closure = PyFunction_GET_CLOSURE(func); + name = ((PyFunctionObject *)func) -> func_name; + qualname = ((PyFunctionObject *)func) -> func_qualname; + if (argdefs != NULL) { d = &PyTuple_GET_ITEM(argdefs, 0); nd = Py_SIZE(argdefs); } - return _PyEval_EvalCodeWithName((PyObject*)co, globals, - (PyObject *)NULL, (*pp_stack)-n, na, - (*pp_stack)-2*nk, nk, d, nd, kwdefs, - PyFunction_GET_CLOSURE(func), - name, qualname); + else { + d = NULL; + nd = 0; + } + return _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL, + stack, nargs, + nkwargs ? &PyTuple_GET_ITEM(kwnames, 0) : NULL, + stack + nargs, + nkwargs, 1, + d, (int)nd, kwdefs, + closure, name, qualname); } -static PyObject * -update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack, - PyObject *func) +PyObject * +_PyFunction_FastCallKeywords(PyObject *func, PyObject **stack, + Py_ssize_t nargs, PyObject *kwnames) { - PyObject *kwdict = NULL; - if (orig_kwdict == NULL) - kwdict = PyDict_New(); - else { - kwdict = PyDict_Copy(orig_kwdict); - Py_DECREF(orig_kwdict); - } - if (kwdict == NULL) - return NULL; - while (--nk >= 0) { - int err; - PyObject *value = EXT_POP(*pp_stack); - PyObject *key = EXT_POP(*pp_stack); - if (PyDict_GetItem(kwdict, key) != NULL) { - PyErr_Format(PyExc_TypeError, - "%.200s%s got multiple values " - "for keyword argument '%U'", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func), - key); - Py_DECREF(key); - Py_DECREF(value); - Py_DECREF(kwdict); - return NULL; - } - err = PyDict_SetItem(kwdict, key, value); - Py_DECREF(key); - Py_DECREF(value); - if (err) { - Py_DECREF(kwdict); - return NULL; - } - } - return kwdict; + return fast_function(func, stack, nargs, kwnames); } -static PyObject * -update_star_args(int nstack, int nstar, PyObject *stararg, - PyObject ***pp_stack) +PyObject * +_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, + PyObject *kwargs) { - PyObject *callargs, *w; + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *kwdefs, *closure, *name, *qualname; + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd, nk; + PyObject *result; - callargs = PyTuple_New(nstack + nstar); - if (callargs == NULL) { - return NULL; - } - if (nstar) { - int i; - for (i = 0; i < nstar; i++) { - PyObject *a = PyTuple_GET_ITEM(stararg, i); - Py_INCREF(a); - PyTuple_SET_ITEM(callargs, nstack + i, a); + assert(func != NULL); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + assert(kwargs == NULL || PyDict_Check(kwargs)); + + PCALL(PCALL_FUNCTION); + PCALL(PCALL_FAST_FUNCTION); + + if (co->co_kwonlyargcount == 0 && + (kwargs == NULL || PyDict_Size(kwargs) == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) + { + /* Fast paths */ + if (argdefs == NULL && co->co_argcount == nargs) { + return _PyFunction_FastCall(co, args, nargs, globals); + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + return _PyFunction_FastCall(co, args, Py_SIZE(argdefs), globals); } } - while (--nstack >= 0) { - w = EXT_POP(*pp_stack); - PyTuple_SET_ITEM(callargs, nstack, w); - } - return callargs; -} -static PyObject * -load_args(PyObject ***pp_stack, int na) -{ - PyObject *args = PyTuple_New(na); - PyObject *w; + if (kwargs != NULL) { + Py_ssize_t pos, i; + nk = PyDict_Size(kwargs); - if (args == NULL) - return NULL; - while (--na >= 0) { - w = EXT_POP(*pp_stack); - PyTuple_SET_ITEM(args, na, w); + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + return NULL; + } + + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + nk = 0; } - return args; -} -static PyObject * -do_call(PyObject *func, PyObject ***pp_stack, int na, int nk) -{ - PyObject *callargs = NULL; - PyObject *kwdict = NULL; - PyObject *result = NULL; + kwdefs = PyFunction_GET_KW_DEFAULTS(func); + closure = PyFunction_GET_CLOSURE(func); + name = ((PyFunctionObject *)func) -> func_name; + qualname = ((PyFunctionObject *)func) -> func_qualname; - if (nk > 0) { - kwdict = update_keyword_args(NULL, nk, pp_stack, func); - if (kwdict == NULL) - goto call_fail; + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); } - callargs = load_args(pp_stack, na); - if (callargs == NULL) - goto call_fail; -#ifdef CALL_PROFILE - /* At this point, we have to look at the type of func to - update the call stats properly. Do it here so as to avoid - exposing the call stats machinery outside ceval.c - */ - if (PyFunction_Check(func)) - PCALL(PCALL_FUNCTION); - else if (PyMethod_Check(func)) - PCALL(PCALL_METHOD); - else if (PyType_Check(func)) - PCALL(PCALL_TYPE); - else if (PyCFunction_Check(func)) - PCALL(PCALL_CFUNCTION); - else - PCALL(PCALL_OTHER); -#endif - if (PyCFunction_Check(func)) { - PyThreadState *tstate = PyThreadState_GET(); - C_TRACE(result, PyCFunction_Call(func, callargs, kwdict)); + else { + d = NULL; + nd = 0; } - else - result = PyObject_Call(func, callargs, kwdict); -call_fail: - Py_XDECREF(callargs); - Py_XDECREF(kwdict); + + result = _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL, + args, nargs, + k, k + 1, nk, 2, + d, nd, kwdefs, + closure, name, qualname); + Py_XDECREF(kwtuple); return result; } static PyObject * -ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk) +do_call_core(PyObject *func, PyObject *callargs, PyObject *kwdict) { - int nstar = 0; - PyObject *callargs = NULL; - PyObject *stararg = NULL; - PyObject *kwdict = NULL; - PyObject *result = NULL; - - if (flags & CALL_FLAG_KW) { - kwdict = EXT_POP(*pp_stack); - if (!PyDict_Check(kwdict)) { - PyObject *d; - d = PyDict_New(); - if (d == NULL) - goto ext_call_fail; - if (PyDict_Update(d, kwdict) != 0) { - Py_DECREF(d); - /* PyDict_Update raises attribute - * error (percolated from an attempt - * to get 'keys' attribute) instead of - * a type error if its second argument - * is not a mapping. - */ - if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_TypeError, - "%.200s%.200s argument after ** " - "must be a mapping, not %.200s", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func), - kwdict->ob_type->tp_name); - } - goto ext_call_fail; - } - Py_DECREF(kwdict); - kwdict = d; - } - } - if (nk > 0) { - kwdict = update_keyword_args(kwdict, nk, pp_stack, func); - if (kwdict == NULL) - goto ext_call_fail; - } - - if (flags & CALL_FLAG_VAR) { - stararg = EXT_POP(*pp_stack); - if (!PyTuple_Check(stararg)) { - PyObject *t = NULL; - if (Py_TYPE(stararg)->tp_iter == NULL && - !PySequence_Check(stararg)) { - PyErr_Format(PyExc_TypeError, - "%.200s%.200s argument after * " - "must be an iterable, not %.200s", - PyEval_GetFuncName(func), - PyEval_GetFuncDesc(func), - stararg->ob_type->tp_name); - goto ext_call_fail; - } - t = PySequence_Tuple(stararg); - if (t == NULL) { - goto ext_call_fail; - } - Py_DECREF(stararg); - stararg = t; - } - nstar = PyTuple_GET_SIZE(stararg); - } - callargs = update_star_args(na, nstar, stararg, pp_stack); - if (callargs == NULL) - goto ext_call_fail; #ifdef CALL_PROFILE /* At this point, we have to look at the type of func to update the call stats properly. Do it here so as to avoid @@ -5041,17 +5042,16 @@ ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk) else PCALL(PCALL_OTHER); #endif + if (PyCFunction_Check(func)) { + PyObject *result; PyThreadState *tstate = PyThreadState_GET(); C_TRACE(result, PyCFunction_Call(func, callargs, kwdict)); + return result; + } + else { + return PyObject_Call(func, callargs, kwdict); } - else - result = PyObject_Call(func, callargs, kwdict); -ext_call_fail: - Py_XDECREF(callargs); - Py_XDECREF(kwdict); - Py_XDECREF(stararg); - return result; } /* Extract a slice index from a PyLong or an object with the @@ -5141,6 +5141,46 @@ cmp_outcome(int op, PyObject *v, PyObject *w) } static PyObject * +import_name(PyFrameObject *f, PyObject *name, PyObject *fromlist, PyObject *level) +{ + _Py_IDENTIFIER(__import__); + PyObject *import_func, *res; + PyObject* stack[5]; + + import_func = _PyDict_GetItemId(f->f_builtins, &PyId___import__); + if (import_func == NULL) { + PyErr_SetString(PyExc_ImportError, "__import__ not found"); + return NULL; + } + + /* Fast path for not overloaded __import__. */ + if (import_func == PyThreadState_GET()->interp->import_func) { + int ilevel = _PyLong_AsInt(level); + if (ilevel == -1 && PyErr_Occurred()) { + return NULL; + } + res = PyImport_ImportModuleLevelObject( + name, + f->f_globals, + f->f_locals == NULL ? Py_None : f->f_locals, + fromlist, + ilevel); + return res; + } + + Py_INCREF(import_func); + + stack[0] = name; + stack[1] = f->f_globals; + stack[2] = f->f_locals == NULL ? Py_None : f->f_locals; + stack[3] = fromlist; + stack[4] = level; + res = _PyObject_FastCall(import_func, stack, 5); + Py_DECREF(import_func); + return res; +} + +static PyObject * import_from(PyObject *v, PyObject *name) { PyObject *x; @@ -5276,7 +5316,7 @@ format_exc_unbound(PyCodeObject *co, int oparg) static PyObject * unicode_concatenate(PyObject *v, PyObject *w, - PyFrameObject *f, unsigned char *next_instr) + PyFrameObject *f, const _Py_CODEUNIT *next_instr) { PyObject *res; if (Py_REFCNT(v) == 2) { @@ -5286,10 +5326,11 @@ unicode_concatenate(PyObject *v, PyObject *w, * 'variable'. We try to delete the variable now to reduce * the refcnt to 1. */ - switch (*next_instr) { + int opcode, oparg; + NEXTOPARG(); + switch (opcode) { case STORE_FAST: { - int oparg = PEEKARG(); PyObject **fastlocals = f->f_localsplus; if (GETLOCAL(oparg) == v) SETLOCAL(oparg, NULL); @@ -5299,7 +5340,7 @@ unicode_concatenate(PyObject *v, PyObject *w, { PyObject **freevars = (f->f_localsplus + f->f_code->co_nlocals); - PyObject *c = freevars[PEEKARG()]; + PyObject *c = freevars[oparg]; if (PyCell_GET(c) == v) PyCell_Set(c, NULL); break; @@ -5307,7 +5348,7 @@ unicode_concatenate(PyObject *v, PyObject *w, case STORE_NAME: { PyObject *names = f->f_code->co_names; - PyObject *name = GETITEM(names, PEEKARG()); + PyObject *name = GETITEM(names, oparg); PyObject *locals = f->f_locals; if (PyDict_CheckExact(locals) && PyDict_GetItem(locals, name) == v) { @@ -5367,3 +5408,79 @@ _Py_GetDXProfile(PyObject *self, PyObject *args) } #endif + +Py_ssize_t +_PyEval_RequestCodeExtraIndex(freefunc free) +{ + PyThreadState *tstate = PyThreadState_Get(); + Py_ssize_t new_index; + + if (tstate->co_extra_user_count == MAX_CO_EXTRA_USERS - 1) { + return -1; + } + new_index = tstate->co_extra_user_count++; + tstate->co_extra_freefuncs[new_index] = free; + return new_index; +} + +static void +dtrace_function_entry(PyFrameObject *f) +{ + char* filename; + char* funcname; + int lineno; + + filename = PyUnicode_AsUTF8(f->f_code->co_filename); + funcname = PyUnicode_AsUTF8(f->f_code->co_name); + lineno = PyCode_Addr2Line(f->f_code, f->f_lasti); + + PyDTrace_FUNCTION_ENTRY(filename, funcname, lineno); +} + +static void +dtrace_function_return(PyFrameObject *f) +{ + char* filename; + char* funcname; + int lineno; + + filename = PyUnicode_AsUTF8(f->f_code->co_filename); + funcname = PyUnicode_AsUTF8(f->f_code->co_name); + lineno = PyCode_Addr2Line(f->f_code, f->f_lasti); + + PyDTrace_FUNCTION_RETURN(filename, funcname, lineno); +} + +/* DTrace equivalent of maybe_call_line_trace. */ +static void +maybe_dtrace_line(PyFrameObject *frame, + int *instr_lb, int *instr_ub, int *instr_prev) +{ + int line = frame->f_lineno; + char *co_filename, *co_name; + + /* If the last instruction executed isn't in the current + instruction window, reset the window. + */ + if (frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub) { + PyAddrPair bounds; + line = _PyCode_CheckLineNumber(frame->f_code, frame->f_lasti, + &bounds); + *instr_lb = bounds.ap_lower; + *instr_ub = bounds.ap_upper; + } + /* If the last instruction falls at the start of a line or if + it represents a jump backwards, update the frame's line + number and call the trace function. */ + if (frame->f_lasti == *instr_lb || frame->f_lasti < *instr_prev) { + frame->f_lineno = line; + co_filename = PyUnicode_AsUTF8(frame->f_code->co_filename); + if (!co_filename) + co_filename = "?"; + co_name = PyUnicode_AsUTF8(frame->f_code->co_name); + if (!co_name) + co_name = "?"; + PyDTrace_LINE(co_filename, co_name, line); + } + *instr_prev = frame->f_lasti; +} diff --git a/Python/ceval_gil.h b/Python/ceval_gil.h index 8d38ee9dfc..a3b450bd5c 100644 --- a/Python/ceval_gil.h +++ b/Python/ceval_gil.h @@ -178,7 +178,7 @@ static void drop_gil(PyThreadState *tstate) /* Sub-interpreter support: threads might have been switched under our feet using PyThreadState_Swap(). Fix the GIL last holder variable so that our heuristics work. */ - _Py_atomic_store_relaxed(&gil_last_holder, (Py_uintptr_t)tstate); + _Py_atomic_store_relaxed(&gil_last_holder, (uintptr_t)tstate); } MUTEX_LOCK(gil_mutex); @@ -240,7 +240,7 @@ _ready: _Py_ANNOTATE_RWLOCK_ACQUIRED(&gil_locked, /*is_write=*/1); if (tstate != (PyThreadState*)_Py_atomic_load_relaxed(&gil_last_holder)) { - _Py_atomic_store_relaxed(&gil_last_holder, (Py_uintptr_t)tstate); + _Py_atomic_store_relaxed(&gil_last_holder, (uintptr_t)tstate); ++gil_switch_number; } diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h index 4e2b1f1fe8..c88deef33f 100644 --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -93,8 +93,9 @@ builtin_format(PyObject *module, PyObject *args) PyObject *format_spec = NULL; if (!PyArg_ParseTuple(args, "O|U:format", - &value, &format_spec)) + &value, &format_spec)) { goto exit; + } return_value = builtin_format_impl(module, value, format_spec); exit: @@ -119,8 +120,9 @@ builtin_chr(PyObject *module, PyObject *arg) PyObject *return_value = NULL; int i; - if (!PyArg_Parse(arg, "i:chr", &i)) + if (!PyArg_Parse(arg, "i:chr", &i)) { goto exit; + } return_value = builtin_chr_impl(module, i); exit: @@ -146,7 +148,7 @@ PyDoc_STRVAR(builtin_compile__doc__, "in addition to any features explicitly specified."); #define BUILTIN_COMPILE_METHODDEF \ - {"compile", (PyCFunction)builtin_compile, METH_VARARGS|METH_KEYWORDS, builtin_compile__doc__}, + {"compile", (PyCFunction)builtin_compile, METH_FASTCALL, builtin_compile__doc__}, static PyObject * builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, @@ -154,10 +156,11 @@ builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, int optimize); static PyObject * -builtin_compile(PyObject *module, PyObject *args, PyObject *kwargs) +builtin_compile(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; - static char *_keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", NULL}; + static const char * const _keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", NULL}; + static _PyArg_Parser _parser = {"OO&s|iii:compile", _keywords, 0}; PyObject *source; PyObject *filename; const char *mode; @@ -165,9 +168,10 @@ builtin_compile(PyObject *module, PyObject *args, PyObject *kwargs) int dont_inherit = 0; int optimize = -1; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO&s|iii:compile", _keywords, - &source, PyUnicode_FSDecoder, &filename, &mode, &flags, &dont_inherit, &optimize)) + if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, + &source, PyUnicode_FSDecoder, &filename, &mode, &flags, &dont_inherit, &optimize)) { goto exit; + } return_value = builtin_compile_impl(module, source, filename, mode, flags, dont_inherit, optimize); exit: @@ -195,8 +199,9 @@ builtin_divmod(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "divmod", 2, 2, - &x, &y)) + &x, &y)) { goto exit; + } return_value = builtin_divmod_impl(module, x, y); exit: @@ -232,8 +237,9 @@ builtin_eval(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "eval", 1, 3, - &source, &globals, &locals)) + &source, &globals, &locals)) { goto exit; + } return_value = builtin_eval_impl(module, source, globals, locals); exit: @@ -269,8 +275,9 @@ builtin_exec(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "exec", 1, 3, - &source, &globals, &locals)) + &source, &globals, &locals)) { goto exit; + } return_value = builtin_exec_impl(module, source, globals, locals); exit: @@ -321,8 +328,9 @@ builtin_hasattr(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, - &obj, &name)) + &obj, &name)) { goto exit; + } return_value = builtin_hasattr_impl(module, obj, name); exit: @@ -366,8 +374,9 @@ builtin_setattr(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "setattr", 3, 3, - &obj, &name, &value)) + &obj, &name, &value)) { goto exit; + } return_value = builtin_setattr_impl(module, obj, name, value); exit: @@ -397,8 +406,9 @@ builtin_delattr(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "delattr", 2, 2, - &obj, &name)) + &obj, &name)) { goto exit; + } return_value = builtin_delattr_impl(module, obj, name); exit: @@ -506,8 +516,9 @@ builtin_pow(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "pow", 2, 3, - &x, &y, &z)) + &x, &y, &z)) { goto exit; + } return_value = builtin_pow_impl(module, x, y, z); exit: @@ -540,8 +551,9 @@ builtin_input(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "input", 0, 1, - &prompt)) + &prompt)) { goto exit; + } return_value = builtin_input_impl(module, prompt); exit: @@ -584,8 +596,9 @@ builtin_sum(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "sum", 1, 2, - &iterable, &start)) + &iterable, &start)) { goto exit; + } return_value = builtin_sum_impl(module, iterable, start); exit: @@ -618,8 +631,9 @@ builtin_isinstance(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, - &obj, &class_or_tuple)) + &obj, &class_or_tuple)) { goto exit; + } return_value = builtin_isinstance_impl(module, obj, class_or_tuple); exit: @@ -652,11 +666,12 @@ builtin_issubclass(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, - &cls, &class_or_tuple)) + &cls, &class_or_tuple)) { goto exit; + } return_value = builtin_issubclass_impl(module, cls, class_or_tuple); exit: return return_value; } -/*[clinic end generated code: output=9031270b64c794b8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=63483deb75805f7c input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h index 05d79ac41b..b3460b061d 100644 --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -89,8 +89,9 @@ _imp__fix_co_filename(PyObject *module, PyObject *args) PyObject *path; if (!PyArg_ParseTuple(args, "O!U:_fix_co_filename", - &PyCode_Type, &code, &path)) + &PyCode_Type, &code, &path)) { goto exit; + } return_value = _imp__fix_co_filename_impl(module, code, path); exit: @@ -142,8 +143,9 @@ _imp_init_frozen(PyObject *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:init_frozen", &name)) + if (!PyArg_Parse(arg, "U:init_frozen", &name)) { goto exit; + } return_value = _imp_init_frozen_impl(module, name); exit: @@ -168,8 +170,9 @@ _imp_get_frozen_object(PyObject *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:get_frozen_object", &name)) + if (!PyArg_Parse(arg, "U:get_frozen_object", &name)) { goto exit; + } return_value = _imp_get_frozen_object_impl(module, name); exit: @@ -194,8 +197,9 @@ _imp_is_frozen_package(PyObject *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:is_frozen_package", &name)) + if (!PyArg_Parse(arg, "U:is_frozen_package", &name)) { goto exit; + } return_value = _imp_is_frozen_package_impl(module, name); exit: @@ -220,8 +224,9 @@ _imp_is_builtin(PyObject *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:is_builtin", &name)) + if (!PyArg_Parse(arg, "U:is_builtin", &name)) { goto exit; + } return_value = _imp_is_builtin_impl(module, name); exit: @@ -246,8 +251,9 @@ _imp_is_frozen(PyObject *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:is_frozen", &name)) + if (!PyArg_Parse(arg, "U:is_frozen", &name)) { goto exit; + } return_value = _imp_is_frozen_impl(module, name); exit: @@ -277,8 +283,9 @@ _imp_create_dynamic(PyObject *module, PyObject *args) if (!PyArg_UnpackTuple(args, "create_dynamic", 1, 2, - &spec, &file)) + &spec, &file)) { goto exit; + } return_value = _imp_create_dynamic_impl(module, spec, file); exit: @@ -308,8 +315,9 @@ _imp_exec_dynamic(PyObject *module, PyObject *mod) int _return_value; _return_value = _imp_exec_dynamic_impl(module, mod); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -337,8 +345,9 @@ _imp_exec_builtin(PyObject *module, PyObject *mod) int _return_value; _return_value = _imp_exec_builtin_impl(module, mod); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -352,4 +361,4 @@ exit: #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=90ad6e5833e6170d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d24d7f73702a907f input=a9049054013a1b77]*/ diff --git a/Python/compile.c b/Python/compile.c index 93f47e0220..c0c81e1228 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -29,6 +29,7 @@ #include "code.h" #include "symtable.h" #include "opcode.h" +#include "wordcode_helpers.h" #define DEFAULT_BLOCK_SIZE 16 #define DEFAULT_BLOCKS 8 @@ -43,7 +44,6 @@ struct instr { unsigned i_jabs : 1; unsigned i_jrel : 1; - unsigned i_hasarg : 1; unsigned char i_opcode; int i_oparg; struct basicblock_ *i_target; /* target block (if jump instruction) */ @@ -171,7 +171,6 @@ static int compiler_addop(struct compiler *, int); static int compiler_addop_o(struct compiler *, int, PyObject *, PyObject *); static int compiler_addop_i(struct compiler *, int, Py_ssize_t); static int compiler_addop_j(struct compiler *, int, basicblock *, int); -static basicblock *compiler_use_new_block(struct compiler *); static int compiler_error(struct compiler *, const char *); static int compiler_nameop(struct compiler *, identifier, expr_context_ty); @@ -180,6 +179,7 @@ static int compiler_visit_stmt(struct compiler *, stmt_ty); static int compiler_visit_keyword(struct compiler *, keyword_ty); static int compiler_visit_expr(struct compiler *, expr_ty); static int compiler_augassign(struct compiler *, stmt_ty); +static int compiler_annassign(struct compiler *, stmt_ty); static int compiler_visit_slice(struct compiler *, slice_ty, expr_context_ty); @@ -196,12 +196,22 @@ static int expr_constant(struct compiler *, expr_ty); static int compiler_with(struct compiler *, stmt_ty, int); static int compiler_async_with(struct compiler *, stmt_ty, int); static int compiler_async_for(struct compiler *, stmt_ty); -static int compiler_call_helper(struct compiler *c, Py_ssize_t n, +static int compiler_call_helper(struct compiler *c, int n, asdl_seq *args, asdl_seq *keywords); static int compiler_try_except(struct compiler *, stmt_ty); static int compiler_set_qualname(struct compiler *); +static int compiler_sync_comprehension_generator( + struct compiler *c, + asdl_seq *generators, int gen_index, + expr_ty elt, expr_ty val, int type); + +static int compiler_async_comprehension_generator( + struct compiler *c, + asdl_seq *generators, int gen_index, + expr_ty elt, expr_ty val, int type); + static PyCodeObject *assemble(struct compiler *, int addNone); static PyObject *__doc__; @@ -477,9 +487,9 @@ compiler_unit_check(struct compiler_unit *u) { basicblock *block; for (block = u->u_blocks; block != NULL; block = block->b_list) { - assert((void *)block != (void *)0xcbcbcbcb); - assert((void *)block != (void *)0xfbfbfbfb); - assert((void *)block != (void *)0xdbdbdbdb); + assert((uintptr_t)block != 0xcbcbcbcbU); + assert((uintptr_t)block != 0xfbfbfbfbU); + assert((uintptr_t)block != 0xdbdbdbdbU); if (block->b_instr != NULL) { assert(block->b_ialloc > 0); assert(block->b_iused > 0); @@ -523,6 +533,7 @@ compiler_enter_scope(struct compiler *c, identifier name, int scope_type, void *key, int lineno) { struct compiler_unit *u; + basicblock *block; u = (struct compiler_unit *)PyObject_Malloc(sizeof( struct compiler_unit)); @@ -620,8 +631,11 @@ compiler_enter_scope(struct compiler *c, identifier name, c->u = u; c->c_nestlevel++; - if (compiler_use_new_block(c) == NULL) + + block = compiler_new_block(c); + if (block == NULL) return 0; + c->u->u_curblock = block; if (u->u_scope_type != COMPILER_SCOPE_MODULE) { if (!compiler_set_qualname(c)) @@ -731,6 +745,7 @@ compiler_set_qualname(struct compiler *c) return 1; } + /* Allocate a new block and return a pointer to it. Returns NULL on error. */ @@ -755,16 +770,6 @@ compiler_new_block(struct compiler *c) } static basicblock * -compiler_use_new_block(struct compiler *c) -{ - basicblock *block = compiler_new_block(c); - if (block == NULL) - return NULL; - c->u->u_curblock = block; - return block; -} - -static basicblock * compiler_next_block(struct compiler *c) { basicblock *block = compiler_new_block(c); @@ -810,7 +815,7 @@ compiler_next_instr(struct compiler *c, basicblock *b) oldsize = b->b_ialloc * sizeof(struct instr); newsize = oldsize << 1; - if (oldsize > (PY_SIZE_MAX >> 1)) { + if (oldsize > (SIZE_MAX >> 1)) { PyErr_NoMemory(); return -1; } @@ -939,6 +944,8 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return -1; case IMPORT_STAR: return -1; + case SETUP_ANNOTATIONS: + return 0; case YIELD_VALUE: return 0; case YIELD_FROM: @@ -976,16 +983,19 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) case BUILD_TUPLE: case BUILD_LIST: case BUILD_SET: + case BUILD_STRING: return 1-oparg; case BUILD_LIST_UNPACK: case BUILD_TUPLE_UNPACK: + case BUILD_TUPLE_UNPACK_WITH_CALL: case BUILD_SET_UNPACK: case BUILD_MAP_UNPACK: - return 1 - oparg; case BUILD_MAP_UNPACK_WITH_CALL: - return 1 - (oparg & 0xFF); + return 1 - oparg; case BUILD_MAP: return 1 - 2*oparg; + case BUILD_CONST_KEY_MAP: + return -oparg; case LOAD_ATTR: return 0; case COMPARE_OP: @@ -1023,22 +1033,20 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return -1; case DELETE_FAST: return 0; + case STORE_ANNOTATION: + return -1; case RAISE_VARARGS: return -oparg; -#define NARGS(o) (((o) % 256) + 2*(((o) / 256) % 256)) case CALL_FUNCTION: - return -NARGS(oparg); - case CALL_FUNCTION_VAR: + return -oparg; case CALL_FUNCTION_KW: - return -NARGS(oparg)-1; - case CALL_FUNCTION_VAR_KW: - return -NARGS(oparg)-2; + return -oparg-1; + case CALL_FUNCTION_EX: + return - ((oparg & 0x01) != 0) - ((oparg & 0x02) != 0); case MAKE_FUNCTION: - return -1 -NARGS(oparg) - ((oparg >> 16) & 0xffff); - case MAKE_CLOSURE: - return -2 - NARGS(oparg) - ((oparg >> 16) & 0xffff); -#undef NARGS + return -1 - ((oparg & 0x01) != 0) - ((oparg & 0x02) != 0) - + ((oparg & 0x04) != 0) - ((oparg & 0x08) != 0); case BUILD_SLICE: if (oparg == 3) return -2; @@ -1066,6 +1074,10 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return 1; case GET_YIELD_FROM_ITER: return 0; + case FORMAT_VALUE: + /* If there's a fmt_spec on the stack, we go from 2->1, + else 1->1. */ + return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0; default: return PY_INVALID_STACK_EFFECT; } @@ -1082,13 +1094,14 @@ compiler_addop(struct compiler *c, int opcode) basicblock *b; struct instr *i; int off; + assert(!HAS_ARG(opcode)); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) return 0; b = c->u->u_curblock; i = &b->b_instr[off]; i->i_opcode = opcode; - i->i_hasarg = 0; + i->i_oparg = 0; if (opcode == RETURN_VALUE) b->b_return = 1; compiler_set_lineno(c, off); @@ -1165,10 +1178,15 @@ compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) struct instr *i; int off; - /* Integer arguments are limit to 16-bit. There is an extension for 32-bit - integer arguments. */ - assert((-2147483647-1) <= oparg); - assert(oparg <= 2147483647); + /* oparg value is unsigned, but a signed C int is usually used to store + it in the C code (like Python/ceval.c). + + Limit to 32-bit signed C int (rather than INT_MAX) for portability. + + The argument of a concrete bytecode instruction is limited to 8-bit. + EXTENDED_ARG is used for 16, 24, and 32-bit arguments. */ + assert(HAS_ARG(opcode)); + assert(0 <= oparg && oparg <= 2147483647); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) @@ -1176,7 +1194,6 @@ compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) i = &c->u->u_curblock->b_instr[off]; i->i_opcode = opcode; i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int); - i->i_hasarg = 1; compiler_set_lineno(c, off); return 1; } @@ -1187,6 +1204,7 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) struct instr *i; int off; + assert(HAS_ARG(opcode)); assert(b != NULL); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) @@ -1194,7 +1212,6 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) i = &c->u->u_curblock->b_instr[off]; i->i_opcode = opcode; i->i_target = b; - i->i_hasarg = 1; if (absolute) i->i_jabs = 1; else @@ -1203,22 +1220,12 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) return 1; } -/* The distinction between NEW_BLOCK and NEXT_BLOCK is subtle. (I'd - like to find better names.) NEW_BLOCK() creates a new block and sets - it as the current block. NEXT_BLOCK() also creates an implicit jump - from the current block to the new block. -*/ +/* NEXT_BLOCK() creates an implicit jump from the current block + to the new block. -/* The returns inside these macros make it impossible to decref objects - created in the local function. Local objects should use the arena. + The returns inside this macro make it impossible to decref objects + created in the local function. Local objects should use the arena. */ - - -#define NEW_BLOCK(C) { \ - if (compiler_use_new_block((C)) == NULL) \ - return 0; \ -} - #define NEXT_BLOCK(C) { \ if (compiler_next_block((C)) == NULL) \ return 0; \ @@ -1241,6 +1248,15 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) return 0; \ } +/* Same as ADDOP_O, but steals a reference. */ +#define ADDOP_N(C, OP, O, TYPE) { \ + if (!compiler_addop_o((C), (OP), (C)->u->u_ ## TYPE, (O))) { \ + Py_DECREF((O)); \ + return 0; \ + } \ + Py_DECREF((O)); \ +} + #define ADDOP_NAME(C, OP, O, TYPE) { \ if (!compiler_addop_name((C), (OP), (C)->u->u_ ## TYPE, (O))) \ return 0; \ @@ -1309,10 +1325,110 @@ compiler_isdocstring(stmt_ty s) { if (s->kind != Expr_kind) return 0; - return s->v.Expr.value->kind == Str_kind; + if (s->v.Expr.value->kind == Str_kind) + return 1; + if (s->v.Expr.value->kind == Constant_kind) + return PyUnicode_CheckExact(s->v.Expr.value->v.Constant.value); + return 0; +} + +static int +is_const(expr_ty e) +{ + switch (e->kind) { + case Constant_kind: + case Num_kind: + case Str_kind: + case Bytes_kind: + case Ellipsis_kind: + case NameConstant_kind: + return 1; + default: + return 0; + } +} + +static PyObject * +get_const_value(expr_ty e) +{ + switch (e->kind) { + case Constant_kind: + return e->v.Constant.value; + case Num_kind: + return e->v.Num.n; + case Str_kind: + return e->v.Str.s; + case Bytes_kind: + return e->v.Bytes.s; + case Ellipsis_kind: + return Py_Ellipsis; + case NameConstant_kind: + return e->v.NameConstant.value; + default: + assert(!is_const(e)); + return NULL; + } +} + +/* Search if variable annotations are present statically in a block. */ + +static int +find_ann(asdl_seq *stmts) +{ + int i, j, res = 0; + stmt_ty st; + + for (i = 0; i < asdl_seq_LEN(stmts); i++) { + st = (stmt_ty)asdl_seq_GET(stmts, i); + switch (st->kind) { + case AnnAssign_kind: + return 1; + case For_kind: + res = find_ann(st->v.For.body) || + find_ann(st->v.For.orelse); + break; + case AsyncFor_kind: + res = find_ann(st->v.AsyncFor.body) || + find_ann(st->v.AsyncFor.orelse); + break; + case While_kind: + res = find_ann(st->v.While.body) || + find_ann(st->v.While.orelse); + break; + case If_kind: + res = find_ann(st->v.If.body) || + find_ann(st->v.If.orelse); + break; + case With_kind: + res = find_ann(st->v.With.body); + break; + case AsyncWith_kind: + res = find_ann(st->v.AsyncWith.body); + break; + case Try_kind: + for (j = 0; j < asdl_seq_LEN(st->v.Try.handlers); j++) { + excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET( + st->v.Try.handlers, j); + if (find_ann(handler->v.ExceptHandler.body)) { + return 1; + } + } + res = find_ann(st->v.Try.body) || + find_ann(st->v.Try.finalbody) || + find_ann(st->v.Try.orelse); + break; + default: + res = 0; + } + if (res) { + break; + } + } + return res; } -/* Compile a sequence of statements, checking for a docstring. */ +/* Compile a sequence of statements, checking for a docstring + and for annotations. */ static int compiler_body(struct compiler *c, asdl_seq *stmts) @@ -1320,6 +1436,19 @@ compiler_body(struct compiler *c, asdl_seq *stmts) int i = 0; stmt_ty st; + /* Set current line number to the line number of first statement. + This way line number for SETUP_ANNOTATIONS will always + coincide with the line number of first "real" statement in module. + If body is empy, then lineno will be set later in assemble. */ + if (c->u->u_scope_type == COMPILER_SCOPE_MODULE && + !c->u->u_lineno && asdl_seq_LEN(stmts)) { + st = (stmt_ty)asdl_seq_GET(stmts, 0); + c->u->u_lineno = st->lineno; + } + /* Every annotated class and module should have __annotations__. */ + if (find_ann(stmts)) { + ADDOP(c, SETUP_ANNOTATIONS); + } if (!asdl_seq_LEN(stmts)) return 1; st = (stmt_ty)asdl_seq_GET(stmts, 0); @@ -1357,6 +1486,9 @@ compiler_mod(struct compiler *c, mod_ty mod) } break; case Interactive_kind: + if (find_ann(mod->v.Interactive.body)) { + ADDOP(c, SETUP_ANNOTATIONS); + } c->c_interactive = 1; VISIT_SEQ_IN_SCOPE(c, stmt, mod->v.Interactive.body); @@ -1426,53 +1558,50 @@ compiler_lookup_arg(PyObject *dict, PyObject *name) } static int -compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t args, PyObject *qualname) +compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t flags, PyObject *qualname) { Py_ssize_t i, free = PyCode_GetNumFree(co); if (qualname == NULL) qualname = co->co_name; - if (free == 0) { - ADDOP_O(c, LOAD_CONST, (PyObject*)co, consts); - ADDOP_O(c, LOAD_CONST, qualname, consts); - ADDOP_I(c, MAKE_FUNCTION, args); - return 1; - } - for (i = 0; i < free; ++i) { - /* Bypass com_addop_varname because it will generate - LOAD_DEREF but LOAD_CLOSURE is needed. - */ - PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i); - int arg, reftype; - - /* Special case: If a class contains a method with a - free variable that has the same name as a method, - the name will be considered free *and* local in the - class. It should be handled by the closure, as - well as by the normal name loookup logic. - */ - reftype = get_ref_type(c, name); - if (reftype == CELL) - arg = compiler_lookup_arg(c->u->u_cellvars, name); - else /* (reftype == FREE) */ - arg = compiler_lookup_arg(c->u->u_freevars, name); - if (arg == -1) { - fprintf(stderr, - "lookup %s in %s %d %d\n" - "freevars of %s: %s\n", - PyUnicode_AsUTF8(PyObject_Repr(name)), - PyUnicode_AsUTF8(c->u->u_name), - reftype, arg, - PyUnicode_AsUTF8(co->co_name), - PyUnicode_AsUTF8(PyObject_Repr(co->co_freevars))); - Py_FatalError("compiler_make_closure()"); + if (free) { + for (i = 0; i < free; ++i) { + /* Bypass com_addop_varname because it will generate + LOAD_DEREF but LOAD_CLOSURE is needed. + */ + PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i); + int arg, reftype; + + /* Special case: If a class contains a method with a + free variable that has the same name as a method, + the name will be considered free *and* local in the + class. It should be handled by the closure, as + well as by the normal name loookup logic. + */ + reftype = get_ref_type(c, name); + if (reftype == CELL) + arg = compiler_lookup_arg(c->u->u_cellvars, name); + else /* (reftype == FREE) */ + arg = compiler_lookup_arg(c->u->u_freevars, name); + if (arg == -1) { + fprintf(stderr, + "lookup %s in %s %d %d\n" + "freevars of %s: %s\n", + PyUnicode_AsUTF8(PyObject_Repr(name)), + PyUnicode_AsUTF8(c->u->u_name), + reftype, arg, + PyUnicode_AsUTF8(co->co_name), + PyUnicode_AsUTF8(PyObject_Repr(co->co_freevars))); + Py_FatalError("compiler_make_closure()"); + } + ADDOP_I(c, LOAD_CLOSURE, arg); } - ADDOP_I(c, LOAD_CLOSURE, arg); + flags |= 0x08; + ADDOP_I(c, BUILD_TUPLE, free); } - ADDOP_I(c, BUILD_TUPLE, free); ADDOP_O(c, LOAD_CONST, (PyObject*)co, consts); ADDOP_O(c, LOAD_CONST, qualname, consts); - ADDOP_I(c, MAKE_CLOSURE, args); + ADDOP_I(c, MAKE_FUNCTION, flags); return 1; } @@ -1494,26 +1623,60 @@ static int compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs, asdl_seq *kw_defaults) { - /* Return the number of defaults + 1. - Returns 0 on error. - */ - int i, default_count = 0; + /* Push a dict of keyword-only default values. + + Return 0 on error, -1 if no dict pushed, 1 if a dict is pushed. + */ + int i; + PyObject *keys = NULL; + for (i = 0; i < asdl_seq_LEN(kwonlyargs); i++) { arg_ty arg = asdl_seq_GET(kwonlyargs, i); expr_ty default_ = asdl_seq_GET(kw_defaults, i); if (default_) { PyObject *mangled = _Py_Mangle(c->u->u_private, arg->arg); - if (!mangled) - return 0; - ADDOP_O(c, LOAD_CONST, mangled, consts); - Py_DECREF(mangled); + if (!mangled) { + goto error; + } + if (keys == NULL) { + keys = PyList_New(1); + if (keys == NULL) { + Py_DECREF(mangled); + return 0; + } + PyList_SET_ITEM(keys, 0, mangled); + } + else { + int res = PyList_Append(keys, mangled); + Py_DECREF(mangled); + if (res == -1) { + goto error; + } + } if (!compiler_visit_expr(c, default_)) { - return 0; + goto error; } - default_count++; } } - return default_count + 1; + if (keys != NULL) { + Py_ssize_t default_count = PyList_GET_SIZE(keys); + PyObject *keys_tuple = PyList_AsTuple(keys); + Py_DECREF(keys); + if (keys_tuple == NULL) { + return 0; + } + ADDOP_N(c, LOAD_CONST, keys_tuple, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, default_count); + assert(default_count > 0); + return 1; + } + else { + return -1; + } + +error: + Py_XDECREF(keys); + return 0; } static int @@ -1556,11 +1719,10 @@ static int compiler_visit_annotations(struct compiler *c, arguments_ty args, expr_ty returns) { - /* Push arg annotations and a list of the argument names. Return the # - of items pushed + 1. The expressions are evaluated out-of-order wrt the - source code. + /* Push arg annotation dict. + The expressions are evaluated out-of-order wrt the source code. - More than 2^16-1 annotations is a SyntaxError. Returns 0 on error. + Return 0 on error, -1 if no dict pushed, 1 if a dict is pushed. */ static identifier return_str; PyObject *names; @@ -1592,32 +1754,20 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, } len = PyList_GET_SIZE(names); - if (len > 65534) { - /* len must fit in 16 bits, and len is incremented below */ - PyErr_SetString(PyExc_SyntaxError, - "too many annotations"); - goto error; - } if (len) { - /* convert names to a tuple and place on stack */ - PyObject *elt; - Py_ssize_t i; - PyObject *s = PyTuple_New(len); - if (!s) - goto error; - for (i = 0; i < len; i++) { - elt = PyList_GET_ITEM(names, i); - Py_INCREF(elt); - PyTuple_SET_ITEM(s, i, elt); + PyObject *keytuple = PyList_AsTuple(names); + Py_DECREF(names); + if (keytuple == NULL) { + return 0; } - ADDOP_O(c, LOAD_CONST, s, consts); - Py_DECREF(s); - len++; /* include the just-pushed tuple */ + ADDOP_N(c, LOAD_CONST, keytuple, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, len); + return 1; + } + else { + Py_DECREF(names); + return -1; } - Py_DECREF(names); - - /* We just checked that len <= 65535, see above */ - return Py_SAFE_DOWNCAST(len + 1, Py_ssize_t, int); error: Py_DECREF(names); @@ -1625,6 +1775,36 @@ error: } static int +compiler_visit_defaults(struct compiler *c, arguments_ty args) +{ + VISIT_SEQ(c, expr, args->defaults); + ADDOP_I(c, BUILD_TUPLE, asdl_seq_LEN(args->defaults)); + return 1; +} + +static Py_ssize_t +compiler_default_arguments(struct compiler *c, arguments_ty args) +{ + Py_ssize_t funcflags = 0; + if (args->defaults && asdl_seq_LEN(args->defaults) > 0) { + if (!compiler_visit_defaults(c, args)) + return -1; + funcflags |= 0x01; + } + if (args->kwonlyargs) { + int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, + args->kw_defaults); + if (res == 0) { + return -1; + } + else if (res > 0) { + funcflags |= 0x02; + } + } + return funcflags; +} + +static int compiler_function(struct compiler *c, stmt_ty s, int is_async) { PyCodeObject *co; @@ -1635,12 +1815,11 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) asdl_seq* decos; asdl_seq *body; stmt_ty st; - Py_ssize_t i, n, arglength; - int docstring, kw_default_count = 0; - int num_annotations; + Py_ssize_t i, n, funcflags; + int docstring; + int annotations; int scope_type; - if (is_async) { assert(s->kind == AsyncFunctionDef_kind); @@ -1665,30 +1844,32 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) if (!compiler_decorators(c, decos)) return 0; - if (args->defaults) - VISIT_SEQ(c, expr, args->defaults); - if (args->kwonlyargs) { - int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, - args->kw_defaults); - if (res == 0) - return 0; - kw_default_count = res - 1; + + funcflags = compiler_default_arguments(c, args); + if (funcflags == -1) { + return 0; } - num_annotations = compiler_visit_annotations(c, args, returns); - if (num_annotations == 0) + + annotations = compiler_visit_annotations(c, args, returns); + if (annotations == 0) { return 0; - num_annotations--; - assert((num_annotations & 0xFFFF) == num_annotations); + } + else if (annotations > 0) { + funcflags |= 0x04; + } - if (!compiler_enter_scope(c, name, - scope_type, (void *)s, - s->lineno)) + if (!compiler_enter_scope(c, name, scope_type, (void *)s, s->lineno)) { return 0; + } st = (stmt_ty)asdl_seq_GET(body, 0); docstring = compiler_isdocstring(st); - if (docstring && c->c_optimize < 2) - first_const = st->v.Expr.value->v.Str.s; + if (docstring && c->c_optimize < 2) { + if (st->v.Expr.value->kind == Constant_kind) + first_const = st->v.Expr.value->v.Constant.value; + else + first_const = st->v.Expr.value->v.Str.s; + } if (compiler_add_o(c, c->u->u_consts, first_const) < 0) { compiler_exit_scope(c); return 0; @@ -1712,12 +1893,7 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) return 0; } - arglength = asdl_seq_LEN(args->defaults); - arglength |= kw_default_count << 8; - arglength |= num_annotations << 16; - if (is_async) - co->co_flags |= CO_COROUTINE; - compiler_make_closure(c, co, arglength, qualname); + compiler_make_closure(c, co, funcflags, qualname); Py_DECREF(qualname); Py_DECREF(co); @@ -1792,7 +1968,7 @@ compiler_class(struct compiler *c, stmt_ty s) return 0; } if (c->u->u_ste->ste_needs_class_closure) { - /* return the (empty) __class__ cell */ + /* store __classcell__ into class namespace */ str = PyUnicode_InternFromString("__class__"); if (str == NULL) { compiler_exit_scope(c); @@ -1805,15 +1981,20 @@ compiler_class(struct compiler *c, stmt_ty s) return 0; } assert(i == 0); - /* Return the cell where to store __class__ */ + ADDOP_I(c, LOAD_CLOSURE, i); + str = PyUnicode_InternFromString("__classcell__"); + if (!str || !compiler_nameop(c, str, Store)) { + Py_XDECREF(str); + compiler_exit_scope(c); + return 0; + } + Py_DECREF(str); } else { + /* This happens when nobody references the cell. */ assert(PyDict_Size(c->u->u_cellvars) == 0); - /* This happens when nobody references the cell. Return None. */ - ADDOP_O(c, LOAD_CONST, Py_None, consts); } - ADDOP_IN_SCOPE(c, RETURN_VALUE); /* create the code object */ co = assemble(c, 1); } @@ -1877,8 +2058,7 @@ compiler_lambda(struct compiler *c, expr_ty e) PyCodeObject *co; PyObject *qualname; static identifier name; - int kw_default_count = 0; - Py_ssize_t arglength; + Py_ssize_t funcflags; arguments_ty args = e->v.Lambda.args; assert(e->kind == Lambda_kind); @@ -1888,14 +2068,11 @@ compiler_lambda(struct compiler *c, expr_ty e) return 0; } - if (args->defaults) - VISIT_SEQ(c, expr, args->defaults); - if (args->kwonlyargs) { - int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, - args->kw_defaults); - if (res == 0) return 0; - kw_default_count = res - 1; + funcflags = compiler_default_arguments(c, args); + if (funcflags == -1) { + return 0; } + if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA, (void *)e, e->lineno)) return 0; @@ -1921,9 +2098,7 @@ compiler_lambda(struct compiler *c, expr_ty e) if (co == NULL) return 0; - arglength = asdl_seq_LEN(args->defaults); - arglength |= kw_default_count << 8; - compiler_make_closure(c, co, arglength, qualname); + compiler_make_closure(c, co, funcflags, qualname); Py_DECREF(qualname); Py_DECREF(co); @@ -2002,14 +2177,14 @@ compiler_for(struct compiler *c, stmt_ty s) static int compiler_async_for(struct compiler *c, stmt_ty s) { - static PyObject *stopiter_error = NULL; + _Py_IDENTIFIER(StopAsyncIteration); + basicblock *try, *except, *end, *after_try, *try_cleanup, *after_loop, *after_loop_else; - if (stopiter_error == NULL) { - stopiter_error = PyUnicode_InternFromString("StopAsyncIteration"); - if (stopiter_error == NULL) - return 0; + PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration); + if (stop_aiter_error == NULL) { + return 0; } try = compiler_new_block(c); @@ -2051,7 +2226,7 @@ compiler_async_for(struct compiler *c, stmt_ty s) compiler_use_next_block(c, except); ADDOP(c, DUP_TOP); - ADDOP_O(c, LOAD_GLOBAL, stopiter_error, names); + ADDOP_O(c, LOAD_GLOBAL, stop_aiter_error, names); ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH); ADDOP_JABS(c, POP_JUMP_IF_FALSE, try_cleanup); @@ -2599,6 +2774,25 @@ compiler_assert(struct compiler *c, stmt_ty s) } static int +compiler_visit_stmt_expr(struct compiler *c, expr_ty value) +{ + if (c->c_interactive && c->c_nestlevel <= 1) { + VISIT(c, expr, value); + ADDOP(c, PRINT_EXPR); + return 1; + } + + if (is_const(value)) { + /* ignore constant statement */ + return 1; + } + + VISIT(c, expr, value); + ADDOP(c, POP_TOP); + return 1; +} + +static int compiler_visit_stmt(struct compiler *c, stmt_ty s) { Py_ssize_t i, n; @@ -2617,6 +2811,9 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s) if (c->u->u_ste->ste_type != FunctionBlock) return compiler_error(c, "'return' outside function"); if (s->v.Return.value) { + if (c->u->u_ste->ste_coroutine && c->u->u_ste->ste_generator) + return compiler_error( + c, "'return' with value in async generator"); VISIT(c, expr, s->v.Return.value); } else @@ -2638,6 +2835,8 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s) break; case AugAssign_kind: return compiler_augassign(c, s); + case AnnAssign_kind: + return compiler_annassign(c, s); case For_kind: return compiler_for(c, s); case While_kind: @@ -2668,16 +2867,7 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s) case Nonlocal_kind: break; case Expr_kind: - if (c->c_interactive && c->c_nestlevel <= 1) { - VISIT(c, expr, s->v.Expr.value); - ADDOP(c, PRINT_EXPR); - } - else if (s->v.Expr.value->kind != Str_kind && - s->v.Expr.value->kind != Num_kind) { - VISIT(c, expr, s->v.Expr.value); - ADDOP(c, POP_TOP); - } - break; + return compiler_visit_stmt_expr(c, s->v.Expr.value); case Pass_kind: break; case Break_kind: @@ -3079,9 +3269,53 @@ compiler_set(struct compiler *c, expr_ty e) } static int +are_all_items_const(asdl_seq *seq, Py_ssize_t begin, Py_ssize_t end) +{ + Py_ssize_t i; + for (i = begin; i < end; i++) { + expr_ty key = (expr_ty)asdl_seq_GET(seq, i); + if (key == NULL || !is_const(key)) + return 0; + } + return 1; +} + +static int +compiler_subdict(struct compiler *c, expr_ty e, Py_ssize_t begin, Py_ssize_t end) +{ + Py_ssize_t i, n = end - begin; + PyObject *keys, *key; + if (n > 1 && are_all_items_const(e->v.Dict.keys, begin, end)) { + for (i = begin; i < end; i++) { + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); + } + keys = PyTuple_New(n); + if (keys == NULL) { + return 0; + } + for (i = begin; i < end; i++) { + key = get_const_value((expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); + Py_INCREF(key); + PyTuple_SET_ITEM(keys, i - begin, key); + } + ADDOP_N(c, LOAD_CONST, keys, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, n); + } + else { + for (i = begin; i < end; i++) { + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); + } + ADDOP_I(c, BUILD_MAP, n); + } + return 1; +} + +static int compiler_dict(struct compiler *c, expr_ty e) { - Py_ssize_t i, n, containers, elements; + Py_ssize_t i, n, elements; + int containers; int is_unpacking = 0; n = asdl_seq_LEN(e->v.Dict.values); containers = 0; @@ -3089,7 +3323,8 @@ compiler_dict(struct compiler *c, expr_ty e) for (i = 0; i < n; i++) { is_unpacking = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i) == NULL; if (elements == 0xFFFF || (elements && is_unpacking)) { - ADDOP_I(c, BUILD_MAP, elements); + if (!compiler_subdict(c, e, i - elements, i)) + return 0; containers++; elements = 0; } @@ -3098,13 +3333,12 @@ compiler_dict(struct compiler *c, expr_ty e) containers++; } else { - VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); - VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); elements++; } } if (elements || containers == 0) { - ADDOP_I(c, BUILD_MAP, elements); + if (!compiler_subdict(c, e, n - elements, n)) + return 0; containers++; } /* If there is more than one dict, they need to be merged into a new @@ -3173,28 +3407,124 @@ compiler_call(struct compiler *c, expr_ty e) e->v.Call.keywords); } +static int +compiler_joined_str(struct compiler *c, expr_ty e) +{ + VISIT_SEQ(c, expr, e->v.JoinedStr.values); + ADDOP_I(c, BUILD_STRING, asdl_seq_LEN(e->v.JoinedStr.values)); + return 1; +} + +/* Used to implement f-strings. Format a single value. */ +static int +compiler_formatted_value(struct compiler *c, expr_ty e) +{ + /* Our oparg encodes 2 pieces of information: the conversion + character, and whether or not a format_spec was provided. + + Convert the conversion char to 2 bits: + None: 000 0x0 FVC_NONE + !s : 001 0x1 FVC_STR + !r : 010 0x2 FVC_REPR + !a : 011 0x3 FVC_ASCII + + next bit is whether or not we have a format spec: + yes : 100 0x4 + no : 000 0x0 + */ + + int oparg; + + /* Evaluate the expression to be formatted. */ + VISIT(c, expr, e->v.FormattedValue.value); + + switch (e->v.FormattedValue.conversion) { + case 's': oparg = FVC_STR; break; + case 'r': oparg = FVC_REPR; break; + case 'a': oparg = FVC_ASCII; break; + case -1: oparg = FVC_NONE; break; + default: + PyErr_SetString(PyExc_SystemError, + "Unrecognized conversion character"); + return 0; + } + if (e->v.FormattedValue.format_spec) { + /* Evaluate the format spec, and update our opcode arg. */ + VISIT(c, expr, e->v.FormattedValue.format_spec); + oparg |= FVS_HAVE_SPEC; + } + + /* And push our opcode and oparg */ + ADDOP_I(c, FORMAT_VALUE, oparg); + return 1; +} + +static int +compiler_subkwargs(struct compiler *c, asdl_seq *keywords, Py_ssize_t begin, Py_ssize_t end) +{ + Py_ssize_t i, n = end - begin; + keyword_ty kw; + PyObject *keys, *key; + assert(n > 0); + if (n > 1) { + for (i = begin; i < end; i++) { + kw = asdl_seq_GET(keywords, i); + VISIT(c, expr, kw->value); + } + keys = PyTuple_New(n); + if (keys == NULL) { + return 0; + } + for (i = begin; i < end; i++) { + key = ((keyword_ty) asdl_seq_GET(keywords, i))->arg; + Py_INCREF(key); + PyTuple_SET_ITEM(keys, i - begin, key); + } + ADDOP_N(c, LOAD_CONST, keys, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, n); + } + else { + /* a for loop only executes once */ + for (i = begin; i < end; i++) { + kw = asdl_seq_GET(keywords, i); + ADDOP_O(c, LOAD_CONST, kw->arg, consts); + VISIT(c, expr, kw->value); + } + ADDOP_I(c, BUILD_MAP, n); + } + return 1; +} + /* shared code between compiler_call and compiler_class */ static int compiler_call_helper(struct compiler *c, - Py_ssize_t n, /* Args already pushed */ + int n, /* Args already pushed */ asdl_seq *args, asdl_seq *keywords) { - int code = 0; - Py_ssize_t nelts, i, nseen, nkw; + Py_ssize_t i, nseen, nelts, nkwelts; + int mustdictunpack = 0; /* the number of tuples and dictionaries on the stack */ Py_ssize_t nsubargs = 0, nsubkwargs = 0; - nkw = 0; - nseen = 0; /* the number of positional arguments on the stack */ nelts = asdl_seq_LEN(args); + nkwelts = asdl_seq_LEN(keywords); + + for (i = 0; i < nkwelts; i++) { + keyword_ty kw = asdl_seq_GET(keywords, i); + if (kw->arg == NULL) { + mustdictunpack = 1; + break; + } + } + + nseen = n; /* the number of positional arguments on the stack */ for (i = 0; i < nelts; i++) { expr_ty elt = asdl_seq_GET(args, i); if (elt->kind == Starred_kind) { /* A star-arg. If we've seen positional arguments, - pack the positional arguments into a - tuple. */ + pack the positional arguments into a tuple. */ if (nseen) { ADDOP_I(c, BUILD_TUPLE, nseen); nseen = 0; @@ -3203,92 +3533,78 @@ compiler_call_helper(struct compiler *c, VISIT(c, expr, elt->v.Starred.value); nsubargs++; } - else if (nsubargs) { - /* We've seen star-args already, so we - count towards items-to-pack-into-tuple. */ - VISIT(c, expr, elt); - nseen++; - } else { - /* Positional arguments before star-arguments - are left on the stack. */ VISIT(c, expr, elt); - n++; + nseen++; } } - if (nseen) { - /* Pack up any trailing positional arguments. */ - ADDOP_I(c, BUILD_TUPLE, nseen); - nsubargs++; - } - if (nsubargs) { - code |= 1; + + /* Same dance again for keyword arguments */ + if (nsubargs || mustdictunpack) { + if (nseen) { + /* Pack up any trailing positional arguments. */ + ADDOP_I(c, BUILD_TUPLE, nseen); + nsubargs++; + } if (nsubargs > 1) { /* If we ended up with more than one stararg, we need to concatenate them into a single sequence. */ - ADDOP_I(c, BUILD_LIST_UNPACK, nsubargs); + ADDOP_I(c, BUILD_TUPLE_UNPACK_WITH_CALL, nsubargs); } - } - - /* Same dance again for keyword arguments */ - nseen = 0; /* the number of keyword arguments on the stack following */ - nelts = asdl_seq_LEN(keywords); - for (i = 0; i < nelts; i++) { - keyword_ty kw = asdl_seq_GET(keywords, i); - if (kw->arg == NULL) { - /* A keyword argument unpacking. */ - if (nseen) { - ADDOP_I(c, BUILD_MAP, nseen); - nseen = 0; + else if (nsubargs == 0) { + ADDOP_I(c, BUILD_TUPLE, 0); + } + nseen = 0; /* the number of keyword arguments on the stack following */ + for (i = 0; i < nkwelts; i++) { + keyword_ty kw = asdl_seq_GET(keywords, i); + if (kw->arg == NULL) { + /* A keyword argument unpacking. */ + if (nseen) { + if (!compiler_subkwargs(c, keywords, i - nseen, i)) + return 0; + nsubkwargs++; + nseen = 0; + } + VISIT(c, expr, kw->value); nsubkwargs++; } - VISIT(c, expr, kw->value); - nsubkwargs++; - } - else if (nsubkwargs) { - /* A keyword argument and we already have a dict. */ - ADDOP_O(c, LOAD_CONST, kw->arg, consts); - VISIT(c, expr, kw->value); - nseen++; + else { + nseen++; + } } - else { - /* keyword argument */ - VISIT(c, keyword, kw) - nkw++; + if (nseen) { + /* Pack up any trailing keyword arguments. */ + if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts)) + return 0; + nsubkwargs++; } - } - if (nseen) { - /* Pack up any trailing keyword arguments. */ - ADDOP_I(c, BUILD_MAP, nseen); - nsubkwargs++; - } - if (nsubkwargs) { - code |= 2; if (nsubkwargs > 1) { /* Pack it all up */ - int function_pos = n + (code & 1) + 2 * nkw + 1; - ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs | (function_pos << 8)); + ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs); } + ADDOP_I(c, CALL_FUNCTION_EX, nsubkwargs > 0); + return 1; } - assert(n < 1<<8); - assert(nkw < 1<<24); - n |= nkw << 8; - - switch (code) { - case 0: - ADDOP_I(c, CALL_FUNCTION, n); - break; - case 1: - ADDOP_I(c, CALL_FUNCTION_VAR, n); - break; - case 2: - ADDOP_I(c, CALL_FUNCTION_KW, n); - break; - case 3: - ADDOP_I(c, CALL_FUNCTION_VAR_KW, n); - break; + else if (nkwelts) { + PyObject *names; + VISIT_SEQ(c, keyword, keywords); + names = PyTuple_New(nkwelts); + if (names == NULL) { + return 0; + } + for (i = 0; i < nkwelts; i++) { + keyword_ty kw = asdl_seq_GET(keywords, i); + Py_INCREF(kw->arg); + PyTuple_SET_ITEM(names, i, kw->arg); + } + ADDOP_N(c, LOAD_CONST, names, consts); + ADDOP_I(c, CALL_FUNCTION_KW, n + nelts + nkwelts); + return 1; + } + else { + ADDOP_I(c, CALL_FUNCTION, n + nelts); + return 1; } - return 1; } @@ -3307,11 +3623,28 @@ compiler_call_helper(struct compiler *c, - iterate over the generator sequence instead of using recursion */ + static int compiler_comprehension_generator(struct compiler *c, asdl_seq *generators, int gen_index, expr_ty elt, expr_ty val, int type) { + comprehension_ty gen; + gen = (comprehension_ty)asdl_seq_GET(generators, gen_index); + if (gen->is_async) { + return compiler_async_comprehension_generator( + c, generators, gen_index, elt, val, type); + } else { + return compiler_sync_comprehension_generator( + c, generators, gen_index, elt, val, type); + } +} + +static int +compiler_sync_comprehension_generator(struct compiler *c, + asdl_seq *generators, int gen_index, + expr_ty elt, expr_ty val, int type) +{ /* generate code for the iterator, then each of the ifs, and then write to the element */ @@ -3398,20 +3731,167 @@ compiler_comprehension_generator(struct compiler *c, } static int +compiler_async_comprehension_generator(struct compiler *c, + asdl_seq *generators, int gen_index, + expr_ty elt, expr_ty val, int type) +{ + _Py_IDENTIFIER(StopAsyncIteration); + + comprehension_ty gen; + basicblock *anchor, *skip, *if_cleanup, *try, + *after_try, *except, *try_cleanup; + Py_ssize_t i, n; + + PyObject *stop_aiter_error = _PyUnicode_FromId(&PyId_StopAsyncIteration); + if (stop_aiter_error == NULL) { + return 0; + } + + try = compiler_new_block(c); + after_try = compiler_new_block(c); + try_cleanup = compiler_new_block(c); + except = compiler_new_block(c); + skip = compiler_new_block(c); + if_cleanup = compiler_new_block(c); + anchor = compiler_new_block(c); + + if (skip == NULL || if_cleanup == NULL || anchor == NULL || + try == NULL || after_try == NULL || + except == NULL || after_try == NULL) { + return 0; + } + + gen = (comprehension_ty)asdl_seq_GET(generators, gen_index); + + if (gen_index == 0) { + /* Receive outermost iter as an implicit argument */ + c->u->u_argcount = 1; + ADDOP_I(c, LOAD_FAST, 0); + } + else { + /* Sub-iter - calculate on the fly */ + VISIT(c, expr, gen->iter); + ADDOP(c, GET_AITER); + ADDOP_O(c, LOAD_CONST, Py_None, consts); + ADDOP(c, YIELD_FROM); + } + + compiler_use_next_block(c, try); + + + ADDOP_JREL(c, SETUP_EXCEPT, except); + if (!compiler_push_fblock(c, EXCEPT, try)) + return 0; + + ADDOP(c, GET_ANEXT); + ADDOP_O(c, LOAD_CONST, Py_None, consts); + ADDOP(c, YIELD_FROM); + VISIT(c, expr, gen->target); + ADDOP(c, POP_BLOCK); + compiler_pop_fblock(c, EXCEPT, try); + ADDOP_JREL(c, JUMP_FORWARD, after_try); + + + compiler_use_next_block(c, except); + ADDOP(c, DUP_TOP); + ADDOP_O(c, LOAD_GLOBAL, stop_aiter_error, names); + ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH); + ADDOP_JABS(c, POP_JUMP_IF_FALSE, try_cleanup); + + ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); + ADDOP(c, POP_EXCEPT); /* for SETUP_EXCEPT */ + ADDOP_JABS(c, JUMP_ABSOLUTE, anchor); + + + compiler_use_next_block(c, try_cleanup); + ADDOP(c, END_FINALLY); + + compiler_use_next_block(c, after_try); + + n = asdl_seq_LEN(gen->ifs); + for (i = 0; i < n; i++) { + expr_ty e = (expr_ty)asdl_seq_GET(gen->ifs, i); + VISIT(c, expr, e); + ADDOP_JABS(c, POP_JUMP_IF_FALSE, if_cleanup); + NEXT_BLOCK(c); + } + + if (++gen_index < asdl_seq_LEN(generators)) + if (!compiler_comprehension_generator(c, + generators, gen_index, + elt, val, type)) + return 0; + + /* only append after the last for generator */ + if (gen_index >= asdl_seq_LEN(generators)) { + /* comprehension specific code */ + switch (type) { + case COMP_GENEXP: + VISIT(c, expr, elt); + ADDOP(c, YIELD_VALUE); + ADDOP(c, POP_TOP); + break; + case COMP_LISTCOMP: + VISIT(c, expr, elt); + ADDOP_I(c, LIST_APPEND, gen_index + 1); + break; + case COMP_SETCOMP: + VISIT(c, expr, elt); + ADDOP_I(c, SET_ADD, gen_index + 1); + break; + case COMP_DICTCOMP: + /* With 'd[k] = v', v is evaluated before k, so we do + the same. */ + VISIT(c, expr, val); + VISIT(c, expr, elt); + ADDOP_I(c, MAP_ADD, gen_index + 1); + break; + default: + return 0; + } + + compiler_use_next_block(c, skip); + } + compiler_use_next_block(c, if_cleanup); + ADDOP_JABS(c, JUMP_ABSOLUTE, try); + compiler_use_next_block(c, anchor); + ADDOP(c, POP_TOP); + + return 1; +} + +static int compiler_comprehension(struct compiler *c, expr_ty e, int type, identifier name, asdl_seq *generators, expr_ty elt, expr_ty val) { PyCodeObject *co = NULL; - expr_ty outermost_iter; + comprehension_ty outermost; PyObject *qualname = NULL; + int is_async_function = c->u->u_ste->ste_coroutine; + int is_async_generator = 0; - outermost_iter = ((comprehension_ty) - asdl_seq_GET(generators, 0))->iter; + outermost = (comprehension_ty) asdl_seq_GET(generators, 0); if (!compiler_enter_scope(c, name, COMPILER_SCOPE_COMPREHENSION, (void *)e, e->lineno)) + { goto error; + } + + is_async_generator = c->u->u_ste->ste_coroutine; + + if (is_async_generator && !is_async_function) { + if (e->lineno > c->u->u_lineno) { + c->u->u_lineno = e->lineno; + c->u->u_lineno_set = 0; + } + compiler_error(c, "asynchronous comprehension outside of " + "an asynchronous function"); + goto error_in_scope; + } if (type != COMP_GENEXP) { int op; @@ -3454,9 +3934,24 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type, Py_DECREF(qualname); Py_DECREF(co); - VISIT(c, expr, outermost_iter); - ADDOP(c, GET_ITER); + VISIT(c, expr, outermost->iter); + + if (outermost->is_async) { + ADDOP(c, GET_AITER); + ADDOP_O(c, LOAD_CONST, Py_None, consts); + ADDOP(c, YIELD_FROM); + } else { + ADDOP(c, GET_ITER); + } + ADDOP_I(c, CALL_FUNCTION, 1); + + if (is_async_generator && type != COMP_GENEXP) { + ADDOP(c, GET_AWAITABLE); + ADDOP_O(c, LOAD_CONST, Py_None, consts); + ADDOP(c, YIELD_FROM); + } + return 1; error_in_scope: compiler_exit_scope(c); @@ -3531,7 +4026,6 @@ compiler_dictcomp(struct compiler *c, expr_ty e) static int compiler_visit_keyword(struct compiler *c, keyword_ty k) { - ADDOP_O(c, LOAD_CONST, k->arg, consts); VISIT(c, expr, k->value); return 1; } @@ -3549,6 +4043,8 @@ expr_constant(struct compiler *c, expr_ty e) switch (e->kind) { case Ellipsis_kind: return 1; + case Constant_kind: + return PyObject_IsTrue(e->v.Constant.value); case Num_kind: return PyObject_IsTrue(e->v.Num.n); case Str_kind: @@ -3592,9 +4088,9 @@ expr_constant(struct compiler *c, expr_ty e) BLOCK finally: if an exception was raised: - exc = copy of (exception, instance, traceback) + exc = copy of (exception, instance, traceback) else: - exc = (None, None, None) + exc = (None, None, None) if not (await exit(*exc)): raise */ @@ -3794,8 +4290,6 @@ compiler_visit_expr(struct compiler *c, expr_ty e) case Yield_kind: if (c->u->u_ste->ste_type != FunctionBlock) return compiler_error(c, "'yield' outside function"); - if (c->u->u_scope_type == COMPILER_SCOPE_ASYNC_FUNCTION) - return compiler_error(c, "'yield' inside async function"); if (e->v.Yield.value) { VISIT(c, expr, e->v.Yield.value); } @@ -3820,11 +4314,8 @@ compiler_visit_expr(struct compiler *c, expr_ty e) if (c->u->u_ste->ste_type != FunctionBlock) return compiler_error(c, "'await' outside function"); - if (c->u->u_scope_type == COMPILER_SCOPE_COMPREHENSION) - return compiler_error( - c, "'await' expressions in comprehensions are not supported"); - - if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION) + if (c->u->u_scope_type != COMPILER_SCOPE_ASYNC_FUNCTION && + c->u->u_scope_type != COMPILER_SCOPE_COMPREHENSION) return compiler_error(c, "'await' outside async function"); VISIT(c, expr, e->v.Await.value); @@ -3836,12 +4327,19 @@ compiler_visit_expr(struct compiler *c, expr_ty e) return compiler_compare(c, e); case Call_kind: return compiler_call(c, e); + case Constant_kind: + ADDOP_O(c, LOAD_CONST, e->v.Constant.value, consts); + break; case Num_kind: ADDOP_O(c, LOAD_CONST, e->v.Num.n, consts); break; case Str_kind: ADDOP_O(c, LOAD_CONST, e->v.Str.s, consts); break; + case JoinedStr_kind: + return compiler_joined_str(c, e); + case FormattedValue_kind: + return compiler_formatted_value(c, e); case Bytes_kind: ADDOP_O(c, LOAD_CONST, e->v.Bytes.s, consts); break; @@ -3976,6 +4474,144 @@ compiler_augassign(struct compiler *c, stmt_ty s) } static int +check_ann_expr(struct compiler *c, expr_ty e) +{ + VISIT(c, expr, e); + ADDOP(c, POP_TOP); + return 1; +} + +static int +check_annotation(struct compiler *c, stmt_ty s) +{ + /* Annotations are only evaluated in a module or class. */ + if (c->u->u_scope_type == COMPILER_SCOPE_MODULE || + c->u->u_scope_type == COMPILER_SCOPE_CLASS) { + return check_ann_expr(c, s->v.AnnAssign.annotation); + } + return 1; +} + +static int +check_ann_slice(struct compiler *c, slice_ty sl) +{ + switch(sl->kind) { + case Index_kind: + return check_ann_expr(c, sl->v.Index.value); + case Slice_kind: + if (sl->v.Slice.lower && !check_ann_expr(c, sl->v.Slice.lower)) { + return 0; + } + if (sl->v.Slice.upper && !check_ann_expr(c, sl->v.Slice.upper)) { + return 0; + } + if (sl->v.Slice.step && !check_ann_expr(c, sl->v.Slice.step)) { + return 0; + } + break; + default: + PyErr_SetString(PyExc_SystemError, + "unexpected slice kind"); + return 0; + } + return 1; +} + +static int +check_ann_subscr(struct compiler *c, slice_ty sl) +{ + /* We check that everything in a subscript is defined at runtime. */ + Py_ssize_t i, n; + + switch (sl->kind) { + case Index_kind: + case Slice_kind: + if (!check_ann_slice(c, sl)) { + return 0; + } + break; + case ExtSlice_kind: + n = asdl_seq_LEN(sl->v.ExtSlice.dims); + for (i = 0; i < n; i++) { + slice_ty subsl = (slice_ty)asdl_seq_GET(sl->v.ExtSlice.dims, i); + switch (subsl->kind) { + case Index_kind: + case Slice_kind: + if (!check_ann_slice(c, subsl)) { + return 0; + } + break; + case ExtSlice_kind: + default: + PyErr_SetString(PyExc_SystemError, + "extended slice invalid in nested slice"); + return 0; + } + } + break; + default: + PyErr_Format(PyExc_SystemError, + "invalid subscript kind %d", sl->kind); + return 0; + } + return 1; +} + +static int +compiler_annassign(struct compiler *c, stmt_ty s) +{ + expr_ty targ = s->v.AnnAssign.target; + PyObject* mangled; + + assert(s->kind == AnnAssign_kind); + + /* We perform the actual assignment first. */ + if (s->v.AnnAssign.value) { + VISIT(c, expr, s->v.AnnAssign.value); + VISIT(c, expr, targ); + } + switch (targ->kind) { + case Name_kind: + /* If we have a simple name in a module or class, store annotation. */ + if (s->v.AnnAssign.simple && + (c->u->u_scope_type == COMPILER_SCOPE_MODULE || + c->u->u_scope_type == COMPILER_SCOPE_CLASS)) { + mangled = _Py_Mangle(c->u->u_private, targ->v.Name.id); + if (!mangled) { + return 0; + } + VISIT(c, expr, s->v.AnnAssign.annotation); + /* ADDOP_N decrefs its argument */ + ADDOP_N(c, STORE_ANNOTATION, mangled, names); + } + break; + case Attribute_kind: + if (!s->v.AnnAssign.value && + !check_ann_expr(c, targ->v.Attribute.value)) { + return 0; + } + break; + case Subscript_kind: + if (!s->v.AnnAssign.value && + (!check_ann_expr(c, targ->v.Subscript.value) || + !check_ann_subscr(c, targ->v.Subscript.slice))) { + return 0; + } + break; + default: + PyErr_Format(PyExc_SystemError, + "invalid node type (%d) for annotated assignment", + targ->kind); + return 0; + } + /* Annotation is evaluated last. */ + if (!s->v.AnnAssign.simple && !check_annotation(c, s)) { + return 0; + } + return 1; +} + +static int compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b) { struct fblockinfo *f; @@ -4273,7 +4909,7 @@ assemble_init(struct assembler *a, int nblocks, int firstlineno) a->a_lnotab = PyBytes_FromStringAndSize(NULL, DEFAULT_LNOTAB_SIZE); if (!a->a_lnotab) return 0; - if ((size_t)nblocks > PY_SIZE_MAX / sizeof(basicblock *)) { + if ((size_t)nblocks > SIZE_MAX / sizeof(basicblock *)) { PyErr_NoMemory(); return 0; } @@ -4295,18 +4931,6 @@ assemble_free(struct assembler *a) PyObject_Free(a->a_postorder); } -/* Return the size of a basic block in bytes. */ - -static int -instrsize(struct instr *instr) -{ - if (!instr->i_hasarg) - return 1; /* 1 byte for the opcode*/ - if (instr->i_oparg > 0xffff) - return 6; /* 1 (opcode) + 1 (EXTENDED_ARG opcode) + 2 (oparg) + 2(oparg extended) */ - return 3; /* 1 (opcode) + 2 (oparg) */ -} - static int blocksize(basicblock *b) { @@ -4314,7 +4938,7 @@ blocksize(basicblock *b) int size = 0; for (i = 0; i < b->b_iused; i++) - size += instrsize(&b->b_instr[i]); + size += instrsize(b->b_instr[i].i_oparg); return size; } @@ -4329,11 +4953,10 @@ assemble_lnotab(struct assembler *a, struct instr *i) Py_ssize_t len; unsigned char *lnotab; - d_bytecode = a->a_offset - a->a_lineno_off; + d_bytecode = (a->a_offset - a->a_lineno_off) * sizeof(_Py_CODEUNIT); d_lineno = i->i_lineno - a->a_lineno; assert(d_bytecode >= 0); - assert(d_lineno >= 0); if(d_bytecode == 0 && d_lineno == 0) return 1; @@ -4363,9 +4986,21 @@ assemble_lnotab(struct assembler *a, struct instr *i) d_bytecode -= ncodes * 255; a->a_lnotab_off += ncodes * 2; } - assert(d_bytecode <= 255); - if (d_lineno > 255) { - int j, nbytes, ncodes = d_lineno / 255; + assert(0 <= d_bytecode && d_bytecode <= 255); + + if (d_lineno < -128 || 127 < d_lineno) { + int j, nbytes, ncodes, k; + if (d_lineno < 0) { + k = -128; + /* use division on positive numbers */ + ncodes = (-d_lineno) / 128; + } + else { + k = 127; + ncodes = d_lineno / 127; + } + d_lineno -= ncodes * k; + assert(ncodes >= 1); nbytes = a->a_lnotab_off + 2 * ncodes; len = PyBytes_GET_SIZE(a->a_lnotab); if (nbytes >= len) { @@ -4383,15 +5018,15 @@ assemble_lnotab(struct assembler *a, struct instr *i) lnotab = (unsigned char *) PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off; *lnotab++ = d_bytecode; - *lnotab++ = 255; + *lnotab++ = k; d_bytecode = 0; for (j = 1; j < ncodes; j++) { *lnotab++ = 0; - *lnotab++ = 255; + *lnotab++ = k; } - d_lineno -= ncodes * 255; a->a_lnotab_off += ncodes * 2; } + assert(-128 <= d_lineno && d_lineno <= 127); len = PyBytes_GET_SIZE(a->a_lnotab); if (a->a_lnotab_off + 2 >= len) { @@ -4423,38 +5058,23 @@ assemble_lnotab(struct assembler *a, struct instr *i) static int assemble_emit(struct assembler *a, struct instr *i) { - int size, arg = 0, ext = 0; + int size, arg = 0; Py_ssize_t len = PyBytes_GET_SIZE(a->a_bytecode); - char *code; + _Py_CODEUNIT *code; - size = instrsize(i); - if (i->i_hasarg) { - arg = i->i_oparg; - ext = arg >> 16; - } + arg = i->i_oparg; + size = instrsize(arg); if (i->i_lineno && !assemble_lnotab(a, i)) return 0; - if (a->a_offset + size >= len) { + if (a->a_offset + size >= len / (int)sizeof(_Py_CODEUNIT)) { if (len > PY_SSIZE_T_MAX / 2) return 0; if (_PyBytes_Resize(&a->a_bytecode, len * 2) < 0) return 0; } - code = PyBytes_AS_STRING(a->a_bytecode) + a->a_offset; + code = (_Py_CODEUNIT *)PyBytes_AS_STRING(a->a_bytecode) + a->a_offset; a->a_offset += size; - if (size == 6) { - assert(i->i_hasarg); - *code++ = (char)EXTENDED_ARG; - *code++ = ext & 0xff; - *code++ = ext >> 8; - arg &= 0xffff; - } - *code++ = i->i_opcode; - if (i->i_hasarg) { - assert(size == 3 || size == 6); - *code++ = arg & 0xff; - *code++ = arg >> 8; - } + write_op_arg(code, i->i_opcode, arg, size); return 1; } @@ -4462,7 +5082,7 @@ static void assemble_jump_offsets(struct assembler *a, struct compiler *c) { basicblock *b; - int bsize, totsize, extended_arg_count = 0, last_extended_arg_count; + int bsize, totsize, extended_arg_recompile; int i; /* Compute the size of each block and fixup jump args. @@ -4475,27 +5095,27 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) b->b_offset = totsize; totsize += bsize; } - last_extended_arg_count = extended_arg_count; - extended_arg_count = 0; + extended_arg_recompile = 0; for (b = c->u->u_blocks; b != NULL; b = b->b_list) { bsize = b->b_offset; for (i = 0; i < b->b_iused; i++) { struct instr *instr = &b->b_instr[i]; + int isize = instrsize(instr->i_oparg); /* Relative jumps are computed relative to the instruction pointer after fetching the jump instruction. */ - bsize += instrsize(instr); - if (instr->i_jabs) + bsize += isize; + if (instr->i_jabs || instr->i_jrel) { instr->i_oparg = instr->i_target->b_offset; - else if (instr->i_jrel) { - int delta = instr->i_target->b_offset - bsize; - instr->i_oparg = delta; + if (instr->i_jrel) { + instr->i_oparg -= bsize; + } + instr->i_oparg *= sizeof(_Py_CODEUNIT); + if (instrsize(instr->i_oparg) != isize) { + extended_arg_recompile = 1; + } } - else - continue; - if (instr->i_oparg > 0xffff) - extended_arg_count++; } } @@ -4505,7 +5125,7 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) The issue is that in the first loop blocksize() is called which calls instrsize() which requires i_oparg be set - appropriately. There is a bootstrap problem because + appropriately. There is a bootstrap problem because i_oparg is calculated in the second loop above. So we loop until we stop seeing new EXTENDED_ARGs. @@ -4513,7 +5133,7 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) ones in jump instructions. So this should converge fairly quickly. */ - } while (last_extended_arg_count != extended_arg_count); + } while (extended_arg_recompile); } static PyObject * @@ -4549,8 +5169,12 @@ compute_code_flags(struct compiler *c) flags |= CO_NEWLOCALS | CO_OPTIMIZED; if (ste->ste_nested) flags |= CO_NESTED; - if (ste->ste_generator) + if (ste->ste_generator && !ste->ste_coroutine) flags |= CO_GENERATOR; + if (!ste->ste_generator && ste->ste_coroutine) + flags |= CO_COROUTINE; + if (ste->ste_generator && ste->ste_coroutine) + flags |= CO_ASYNC_GENERATOR; if (ste->ste_varargs) flags |= CO_VARARGS; if (ste->ste_varkeywords) @@ -4659,9 +5283,9 @@ dump_instr(const struct instr *i) char arg[128]; *arg = '\0'; - if (i->i_hasarg) + if (HAS_ARG(i->i_opcode)) { sprintf(arg, "arg: %d ", i->i_oparg); - + } fprintf(stderr, "line: %d, opcode: %d %s%s%s\n", i->i_lineno, i->i_opcode, arg, jabs, jrel); } @@ -4711,7 +5335,7 @@ assemble(struct compiler *c, int addNone) /* Set firstlineno if it wasn't explicitly set. */ if (!c->u->u_firstlineno) { - if (entryblock && entryblock->b_instr) + if (entryblock && entryblock->b_instr && entryblock->b_instr->i_lineno) c->u->u_firstlineno = entryblock->b_instr->i_lineno; else c->u->u_firstlineno = 1; @@ -4733,7 +5357,7 @@ assemble(struct compiler *c, int addNone) if (_PyBytes_Resize(&a.a_lnotab, a.a_lnotab_off) < 0) goto error; - if (_PyBytes_Resize(&a.a_bytecode, a.a_offset) < 0) + if (_PyBytes_Resize(&a.a_bytecode, a.a_offset * sizeof(_Py_CODEUNIT)) < 0) goto error; co = makecode(c, &a); @@ -4749,4 +5373,3 @@ PyAST_Compile(mod_ty mod, const char *filename, PyCompilerFlags *flags, { return PyAST_CompileEx(mod, filename, flags, -1, arena); } - diff --git a/Python/condvar.h b/Python/condvar.h index ced910fbea..9a71b17738 100644 --- a/Python/condvar.h +++ b/Python/condvar.h @@ -89,7 +89,7 @@ do { /* TODO: add overflow and truncation checks */ \ /* return 0 for success, 1 on timeout, -1 on error */ Py_LOCAL_INLINE(int) -PyCOND_TIMEDWAIT(PyCOND_T *cond, PyMUTEX_T *mut, PY_LONG_LONG us) +PyCOND_TIMEDWAIT(PyCOND_T *cond, PyMUTEX_T *mut, long long us) { int r; struct timespec ts; @@ -270,7 +270,7 @@ PyCOND_WAIT(PyCOND_T *cv, PyMUTEX_T *cs) } Py_LOCAL_INLINE(int) -PyCOND_TIMEDWAIT(PyCOND_T *cv, PyMUTEX_T *cs, PY_LONG_LONG us) +PyCOND_TIMEDWAIT(PyCOND_T *cv, PyMUTEX_T *cs, long long us) { return _PyCOND_WAIT_MS(cv, cs, (DWORD)(us/1000)); } @@ -363,7 +363,7 @@ PyCOND_WAIT(PyCOND_T *cv, PyMUTEX_T *cs) * 2 to indicate that we don't know. */ Py_LOCAL_INLINE(int) -PyCOND_TIMEDWAIT(PyCOND_T *cv, PyMUTEX_T *cs, PY_LONG_LONG us) +PyCOND_TIMEDWAIT(PyCOND_T *cv, PyMUTEX_T *cs, long long us) { return SleepConditionVariableSRW(cv, cs, (DWORD)(us/1000), 0) ? 2 : -1; } diff --git a/Python/dtoa.c b/Python/dtoa.c index 3da546ed07..efcadc31e9 100644 --- a/Python/dtoa.c +++ b/Python/dtoa.c @@ -151,18 +151,9 @@ #endif -#if defined(HAVE_UINT32_T) && defined(HAVE_INT32_T) -typedef PY_UINT32_T ULong; -typedef PY_INT32_T Long; -#else -#error "Failed to find an exact-width 32-bit integer type" -#endif - -#if defined(HAVE_UINT64_T) -#define ULLong PY_UINT64_T -#else -#undef ULLong -#endif +typedef uint32_t ULong; +typedef int32_t Long; +typedef uint64_t ULLong; #undef DEBUG #ifdef Py_DEBUG @@ -457,13 +448,8 @@ static Bigint * multadd(Bigint *b, int m, int a) /* multiply by m and add a */ { int i, wds; -#ifdef ULLong ULong *x; ULLong carry, y; -#else - ULong carry, *x, y; - ULong xi, z; -#endif Bigint *b1; wds = b->wds; @@ -471,17 +457,9 @@ multadd(Bigint *b, int m, int a) /* multiply by m and add a */ i = 0; carry = a; do { -#ifdef ULLong y = *x * (ULLong)m + carry; carry = y >> 32; *x++ = (ULong)(y & FFFFFFFF); -#else - xi = *x; - y = (xi & 0xffff) * m + carry; - z = (xi >> 16) * m + (y >> 16); - carry = z >> 16; - *x++ = (z << 16) + (y & 0xffff); -#endif } while(++i < wds); if (carry) { @@ -642,12 +620,7 @@ mult(Bigint *a, Bigint *b) int k, wa, wb, wc; ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0; ULong y; -#ifdef ULLong ULLong carry, z; -#else - ULong carry, z; - ULong z2; -#endif if ((!a->x[0] && a->wds == 1) || (!b->x[0] && b->wds == 1)) { c = Balloc(0); @@ -679,7 +652,6 @@ mult(Bigint *a, Bigint *b) xb = b->x; xbe = xb + wb; xc0 = c->x; -#ifdef ULLong for(; xb < xbe; xc0++) { if ((y = *xb++)) { x = xa; @@ -694,39 +666,6 @@ mult(Bigint *a, Bigint *b) *xc = (ULong)carry; } } -#else - for(; xb < xbe; xb++, xc0++) { - if (y = *xb & 0xffff) { - x = xa; - xc = xc0; - carry = 0; - do { - z = (*x & 0xffff) * y + (*xc & 0xffff) + carry; - carry = z >> 16; - z2 = (*x++ >> 16) * y + (*xc >> 16) + carry; - carry = z2 >> 16; - Storeinc(xc, z2, z); - } - while(x < xae); - *xc = carry; - } - if (y = *xb >> 16) { - x = xa; - xc = xc0; - carry = 0; - z2 = *xc; - do { - z = (*x & 0xffff) * y + (*xc >> 16) + carry; - carry = z >> 16; - Storeinc(xc, z, z2); - z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry; - carry = z2 >> 16; - } - while(x < xae); - *xc = z2; - } - } -#endif for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ; c->wds = wc; return c; @@ -747,7 +686,7 @@ pow5mult(Bigint *b, int k) { Bigint *b1, *p5, *p51; int i; - static int p05[3] = { 5, 25, 125 }; + static const int p05[3] = { 5, 25, 125 }; if ((i = k & 3)) { b = multadd(b, p05[i-1], 0); @@ -803,7 +742,7 @@ pow5mult(Bigint *b, int k) { Bigint *b1, *p5, *p51; int i; - static int p05[3] = { 5, 25, 125 }; + static const int p05[3] = { 5, 25, 125 }; if ((i = k & 3)) { b = multadd(b, p05[i-1], 0); @@ -935,12 +874,7 @@ diff(Bigint *a, Bigint *b) Bigint *c; int i, wa, wb; ULong *xa, *xae, *xb, *xbe, *xc; -#ifdef ULLong ULLong borrow, y; -#else - ULong borrow, y; - ULong z; -#endif i = cmp(a,b); if (!i) { @@ -971,7 +905,6 @@ diff(Bigint *a, Bigint *b) xbe = xb + wb; xc = c->x; borrow = 0; -#ifdef ULLong do { y = (ULLong)*xa++ - *xb++ - borrow; borrow = y >> 32 & (ULong)1; @@ -983,23 +916,6 @@ diff(Bigint *a, Bigint *b) borrow = y >> 32 & (ULong)1; *xc++ = (ULong)(y & FFFFFFFF); } -#else - do { - y = (*xa & 0xffff) - (*xb & 0xffff) - borrow; - borrow = (y & 0x10000) >> 16; - z = (*xa++ >> 16) - (*xb++ >> 16) - borrow; - borrow = (z & 0x10000) >> 16; - Storeinc(xc, z, y); - } - while(xb < xbe); - while(xa < xae) { - y = (*xa & 0xffff) - borrow; - borrow = (y & 0x10000) >> 16; - z = (*xa++ >> 16) - borrow; - borrow = (z & 0x10000) >> 16; - Storeinc(xc, z, y); - } -#endif while(!*--xc) wa--; c->wds = wa; @@ -1244,12 +1160,7 @@ quorem(Bigint *b, Bigint *S) { int n; ULong *bx, *bxe, q, *sx, *sxe; -#ifdef ULLong ULLong borrow, carry, y, ys; -#else - ULong borrow, carry, y, ys; - ULong si, z, zs; -#endif n = S->wds; #ifdef DEBUG @@ -1271,23 +1182,11 @@ quorem(Bigint *b, Bigint *S) borrow = 0; carry = 0; do { -#ifdef ULLong ys = *sx++ * (ULLong)q + carry; carry = ys >> 32; y = *bx - (ys & FFFFFFFF) - borrow; borrow = y >> 32 & (ULong)1; *bx++ = (ULong)(y & FFFFFFFF); -#else - si = *sx++; - ys = (si & 0xffff) * q + carry; - zs = (si >> 16) * q + (ys >> 16); - carry = zs >> 16; - y = (*bx & 0xffff) - (ys & 0xffff) - borrow; - borrow = (y & 0x10000) >> 16; - z = (*bx >> 16) - (zs & 0xffff) - borrow; - borrow = (z & 0x10000) >> 16; - Storeinc(bx, z, y); -#endif } while(sx <= sxe); if (!*bxe) { @@ -1304,23 +1203,11 @@ quorem(Bigint *b, Bigint *S) bx = b->x; sx = S->x; do { -#ifdef ULLong ys = *sx++ + carry; carry = ys >> 32; y = *bx - (ys & FFFFFFFF) - borrow; borrow = y >> 32 & (ULong)1; *bx++ = (ULong)(y & FFFFFFFF); -#else - si = *sx++; - ys = (si & 0xffff) + carry; - zs = (si >> 16) + (ys >> 16); - carry = zs >> 16; - y = (*bx & 0xffff) - (ys & 0xffff) - borrow; - borrow = (y & 0x10000) >> 16; - z = (*bx >> 16) - (zs & 0xffff) - borrow; - borrow = (z & 0x10000) >> 16; - Storeinc(bx, z, y); -#endif } while(sx <= sxe); bx = b->x; @@ -2315,7 +2202,7 @@ rv_alloc(int i) } static char * -nrv_alloc(char *s, char **rve, int n) +nrv_alloc(const char *s, char **rve, int n) { char *rv, *t; diff --git a/Python/dtrace_stubs.c b/Python/dtrace_stubs.c new file mode 100644 index 0000000000..d051363640 --- /dev/null +++ b/Python/dtrace_stubs.c @@ -0,0 +1,24 @@ +#include <Python.h> +#include "pydtrace.h" + +#ifndef WITH_DTRACE +extern inline void PyDTrace_LINE(const char *arg0, const char *arg1, int arg2); +extern inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char *arg1, int arg2); +extern inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char *arg1, int arg2); +extern inline void PyDTrace_GC_START(int arg0); +extern inline void PyDTrace_GC_DONE(int arg0); +extern inline void PyDTrace_INSTANCE_NEW_START(int arg0); +extern inline void PyDTrace_INSTANCE_NEW_DONE(int arg0); +extern inline void PyDTrace_INSTANCE_DELETE_START(int arg0); +extern inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0); + +extern inline int PyDTrace_LINE_ENABLED(void); +extern inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void); +extern inline int PyDTrace_FUNCTION_RETURN_ENABLED(void); +extern inline int PyDTrace_GC_START_ENABLED(void); +extern inline int PyDTrace_GC_DONE_ENABLED(void); +extern inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void); +extern inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void); +extern inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void); +extern inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void); +#endif diff --git a/Python/dynload_win.c b/Python/dynload_win.c index f2c796e94d..05050cf41d 100644 --- a/Python/dynload_win.c +++ b/Python/dynload_win.c @@ -24,12 +24,10 @@ void _Py_DeactivateActCtx(ULONG_PTR cookie); #define PYD_DEBUG_SUFFIX "" #endif -#define STRINGIZE2(x) #x -#define STRINGIZE(x) STRINGIZE2(x) #ifdef PYD_PLATFORM_TAG -#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" STRINGIZE(PY_MAJOR_VERSION) STRINGIZE(PY_MINOR_VERSION) "-" PYD_PLATFORM_TAG ".pyd" +#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) "-" PYD_PLATFORM_TAG ".pyd" #else -#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" STRINGIZE(PY_MAJOR_VERSION) STRINGIZE(PY_MINOR_VERSION) ".pyd" +#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) ".pyd" #endif #define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd" @@ -43,7 +41,7 @@ const char *_PyImport_DynLoadFiletab[] = { /* Case insensitive string compare, to avoid any dependencies on particular C RTL implementations */ -static int strcasecmp (char *string1, char *string2) +static int strcasecmp (const char *string1, const char *string2) { int first, second; diff --git a/Python/errors.c b/Python/errors.c index e151cab17c..13ae6b4561 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -52,6 +52,20 @@ PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback) Py_XDECREF(oldtraceback); } +static PyObject* +_PyErr_CreateException(PyObject *exception, PyObject *value) +{ + if (value == NULL || value == Py_None) { + return _PyObject_CallNoArg(exception); + } + else if (PyTuple_Check(value)) { + return PyObject_Call(exception, value, NULL); + } + else { + return _PyObject_CallArg1(exception, value); + } +} + void PyErr_SetObject(PyObject *exception, PyObject *value) { @@ -66,6 +80,7 @@ PyErr_SetObject(PyObject *exception, PyObject *value) exception); return; } + Py_XINCREF(value); exc_value = tstate->exc_value; if (exc_value != NULL && exc_value != Py_None) { @@ -73,28 +88,21 @@ PyErr_SetObject(PyObject *exception, PyObject *value) Py_INCREF(exc_value); if (value == NULL || !PyExceptionInstance_Check(value)) { /* We must normalize the value right now */ - PyObject *args, *fixed_value; + PyObject *fixed_value; - /* Issue #23571: PyEval_CallObject() must not be called with an + /* Issue #23571: functions must not be called with an exception set */ PyErr_Clear(); - if (value == NULL || value == Py_None) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } - else - args = PyTuple_Pack(1, value); - fixed_value = args ? - PyEval_CallObject(exception, args) : NULL; - Py_XDECREF(args); + fixed_value = _PyErr_CreateException(exception, value); Py_XDECREF(value); - if (fixed_value == NULL) + if (fixed_value == NULL) { return; + } + value = fixed_value; } + /* Avoid reference cycles through the context chain. This is O(chain length) but context chains are usually very short. Sensitive readers may try @@ -110,7 +118,8 @@ PyErr_SetObject(PyObject *exception, PyObject *value) o = context; } PyException_SetContext(value, exc_value); - } else { + } + else { Py_DECREF(exc_value); } } @@ -258,25 +267,15 @@ PyErr_NormalizeException(PyObject **exc, PyObject **val, PyObject **tb) class. */ if (!inclass || !is_subclass) { - PyObject *args, *res; + PyObject *fixed_value; - if (value == Py_None) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; + fixed_value = _PyErr_CreateException(type, value); + if (fixed_value == NULL) { + goto finally; } - else - args = PyTuple_Pack(1, value); - if (args == NULL) - goto finally; - res = PyEval_CallObject(type, args); - Py_DECREF(args); - if (res == NULL) - goto finally; Py_DECREF(value); - value = res; + value = fixed_value; } /* if the class of the instance doesn't exactly match the class of the type, believe the instance @@ -698,51 +697,61 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename( #endif /* MS_WINDOWS */ PyObject * -PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) +PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg, + PyObject *name, PyObject *path) { - PyObject *args, *kwargs, *error; + int issubclass; + PyObject *kwargs, *error; - if (msg == NULL) + issubclass = PyObject_IsSubclass(exception, PyExc_ImportError); + if (issubclass < 0) { return NULL; - - args = PyTuple_New(1); - if (args == NULL) + } + else if (!issubclass) { + PyErr_SetString(PyExc_TypeError, "expected a subclass of ImportError"); return NULL; + } - kwargs = PyDict_New(); - if (kwargs == NULL) { - Py_DECREF(args); + if (msg == NULL) { + PyErr_SetString(PyExc_TypeError, "expected a message argument"); return NULL; } if (name == NULL) { name = Py_None; } - if (path == NULL) { path = Py_None; } - Py_INCREF(msg); - PyTuple_SET_ITEM(args, 0, msg); - - if (PyDict_SetItemString(kwargs, "name", name) < 0) + kwargs = PyDict_New(); + if (kwargs == NULL) { + return NULL; + } + if (PyDict_SetItemString(kwargs, "name", name) < 0) { goto done; - if (PyDict_SetItemString(kwargs, "path", path) < 0) + } + if (PyDict_SetItemString(kwargs, "path", path) < 0) { goto done; + } - error = PyObject_Call(PyExc_ImportError, args, kwargs); + error = _PyObject_FastCallDict(exception, &msg, 1, kwargs); if (error != NULL) { PyErr_SetObject((PyObject *)Py_TYPE(error), error); Py_DECREF(error); } done: - Py_DECREF(args); Py_DECREF(kwargs); return NULL; } +PyObject * +PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) +{ + return PyErr_SetImportErrorSubclass(PyExc_ImportError, msg, name, path); +} + void _PyErr_BadInternalCall(const char *filename, int lineno) { diff --git a/Python/fileutils.c b/Python/fileutils.c index 23eed71321..e3bfb0c502 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -44,7 +44,7 @@ _Py_device_encoding(int fd) #endif int valid; _Py_BEGIN_SUPPRESS_IPH - valid = _PyVerify_fd(fd) && isatty(fd); + valid = isatty(fd); _Py_END_SUPPRESS_IPH if (!valid) Py_RETURN_NONE; @@ -104,23 +104,24 @@ check_force_ascii(void) char *loc; #if defined(HAVE_LANGINFO_H) && defined(CODESET) char *codeset, **alias; - char encoding[100]; + char encoding[20]; /* longest name: "iso_646.irv_1991\0" */ int is_ascii; unsigned int i; char* ascii_aliases[] = { "ascii", + /* Aliases from Lib/encodings/aliases.py */ "646", - "ansi-x3.4-1968", - "ansi-x3-4-1968", - "ansi-x3.4-1986", + "ansi_x3.4_1968", + "ansi_x3.4_1986", + "ansi_x3_4_1968", "cp367", "csascii", "ibm367", - "iso646-us", - "iso-646.irv-1991", - "iso-ir-6", + "iso646_us", + "iso_646.irv_1991", + "iso_ir_6", "us", - "us-ascii", + "us_ascii", NULL }; #endif @@ -613,13 +614,9 @@ _Py_fstat_noraise(int fd, struct _Py_stat_struct *status) HANDLE h; int type; - if (!_PyVerify_fd(fd)) - h = INVALID_HANDLE_VALUE; - else { - _Py_BEGIN_SUPPRESS_IPH - h = (HANDLE)_get_osfhandle(fd); - _Py_END_SUPPRESS_IPH - } + _Py_BEGIN_SUPPRESS_IPH + h = (HANDLE)_get_osfhandle(fd); + _Py_END_SUPPRESS_IPH if (h == INVALID_HANDLE_VALUE) { /* errno is already set by _get_osfhandle, but we also set @@ -683,6 +680,10 @@ _Py_fstat(int fd, struct _Py_stat_struct *status) { int res; +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + Py_BEGIN_ALLOW_THREADS res = _Py_fstat_noraise(fd, status); Py_END_ALLOW_THREADS @@ -738,12 +739,6 @@ get_inheritable(int fd, int raise) HANDLE handle; DWORD flags; - if (!_PyVerify_fd(fd)) { - if (raise) - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } - _Py_BEGIN_SUPPRESS_IPH handle = (HANDLE)_get_osfhandle(fd); _Py_END_SUPPRESS_IPH @@ -794,7 +789,7 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) int request; int err; #endif - int flags; + int flags, new_flags; int res; #endif @@ -815,12 +810,6 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) } #ifdef MS_WINDOWS - if (!_PyVerify_fd(fd)) { - if (raise) - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } - _Py_BEGIN_SUPPRESS_IPH handle = (HANDLE)_get_osfhandle(fd); _Py_END_SUPPRESS_IPH @@ -885,10 +874,18 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) return -1; } - if (inheritable) - flags &= ~FD_CLOEXEC; - else - flags |= FD_CLOEXEC; + if (inheritable) { + new_flags = flags & ~FD_CLOEXEC; + } + else { + new_flags = flags | FD_CLOEXEC; + } + + if (new_flags == flags) { + /* FD_CLOEXEC flag already set/cleared: nothing to do */ + return 0; + } + res = fcntl(fd, F_SETFD, flags); if (res < 0) { if (raise) @@ -1169,19 +1166,15 @@ _Py_read(int fd, void *buf, size_t count) int err; int async_err = 0; +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + /* _Py_read() must not be called with an exception set, otherwise the * caller may think that read() was interrupted by a signal and the signal * handler raised an exception. */ assert(!PyErr_Occurred()); - if (!_PyVerify_fd(fd)) { - /* save/restore errno because PyErr_SetFromErrno() can modify it */ - err = errno; - PyErr_SetFromErrno(PyExc_OSError); - errno = err; - return -1; - } - #ifdef MS_WINDOWS if (count > INT_MAX) { /* On Windows, the count parameter of read() is an int */ @@ -1235,16 +1228,6 @@ _Py_write_impl(int fd, const void *buf, size_t count, int gil_held) int err; int async_err = 0; - if (!_PyVerify_fd(fd)) { - if (gil_held) { - /* save/restore errno because PyErr_SetFromErrno() can modify it */ - err = errno; - PyErr_SetFromErrno(PyExc_OSError); - errno = err; - } - return -1; - } - _Py_BEGIN_SUPPRESS_IPH #ifdef MS_WINDOWS if (count > 32767 && isatty(fd)) { @@ -1324,6 +1307,10 @@ _Py_write_impl(int fd, const void *buf, size_t count, int gil_held) Py_ssize_t _Py_write(int fd, const void *buf, size_t count) { +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + /* _Py_write() must not be called with an exception set, otherwise the * caller may think that write() was interrupted by a signal and the signal * handler raised an exception. */ @@ -1473,10 +1460,9 @@ _Py_dup(int fd) DWORD ftype; #endif - if (!_PyVerify_fd(fd)) { - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif #ifdef MS_WINDOWS _Py_BEGIN_SUPPRESS_IPH @@ -1600,84 +1586,3 @@ error: return -1; } #endif - -#if defined _MSC_VER && _MSC_VER >= 1400 && _MSC_VER < 1900 -/* Legacy implementation of _PyVerify_fd while transitioning to - * MSVC 14.0. This should eventually be removed. (issue23524) - */ - -/* Microsoft CRT in VS2005 and higher will verify that a filehandle is - * valid and raise an assertion if it isn't. - * Normally, an invalid fd is likely to be a C program error and therefore - * an assertion can be useful, but it does contradict the POSIX standard - * which for write(2) states: - * "Otherwise, -1 shall be returned and errno set to indicate the error." - * "[EBADF] The fildes argument is not a valid file descriptor open for - * writing." - * Furthermore, python allows the user to enter any old integer - * as a fd and should merely raise a python exception on error. - * The Microsoft CRT doesn't provide an official way to check for the - * validity of a file descriptor, but we can emulate its internal behaviour - * by using the exported __pinfo data member and knowledge of the - * internal structures involved. - * The structures below must be updated for each version of visual studio - * according to the file internal.h in the CRT source, until MS comes - * up with a less hacky way to do this. - * (all of this is to avoid globally modifying the CRT behaviour using - * _set_invalid_parameter_handler() and _CrtSetReportMode()) - */ -/* The actual size of the structure is determined at runtime. - * Only the first items must be present. - */ -typedef struct { - intptr_t osfhnd; - char osfile; -} my_ioinfo; - -extern __declspec(dllimport) char * __pioinfo[]; -#define IOINFO_L2E 5 -#define IOINFO_ARRAYS 64 -#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) -#define _NHANDLE_ (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS) -#define FOPEN 0x01 -#define _NO_CONSOLE_FILENO (intptr_t)-2 - -/* This function emulates what the windows CRT does to validate file handles */ -int -_PyVerify_fd(int fd) -{ - const int i1 = fd >> IOINFO_L2E; - const int i2 = fd & ((1 << IOINFO_L2E) - 1); - - static size_t sizeof_ioinfo = 0; - - /* Determine the actual size of the ioinfo structure, - * as used by the CRT loaded in memory - */ - if (sizeof_ioinfo == 0 && __pioinfo[0] != NULL) { - sizeof_ioinfo = _msize(__pioinfo[0]) / IOINFO_ARRAY_ELTS; - } - if (sizeof_ioinfo == 0) { - /* This should not happen... */ - goto fail; - } - - /* See that it isn't a special CLEAR fileno */ - if (fd != _NO_CONSOLE_FILENO) { - /* Microsoft CRT would check that 0<=fd<_nhandle but we can't do that. Instead - * we check pointer validity and other info - */ - if (0 <= i1 && i1 < IOINFO_ARRAYS && __pioinfo[i1] != NULL) { - /* finally, check that the file is open */ - my_ioinfo* info = (my_ioinfo*)(__pioinfo[i1] + i2 * sizeof_ioinfo); - if (info->osfile & FOPEN) { - return 1; - } - } - } - fail: - errno = EBADF; - return 0; -} - -#endif /* defined _MSC_VER && _MSC_VER >= 1400 && _MSC_VER < 1900 */ diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 617d58b207..a2c2b3627c 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -32,14 +32,20 @@ invalid_comma_type(Py_UCS4 presentation_type) { if (presentation_type > 32 && presentation_type < 128) PyErr_Format(PyExc_ValueError, - "Cannot specify ',' with '%c'.", + "Cannot specify ',' or '_' with '%c'.", (char)presentation_type); else PyErr_Format(PyExc_ValueError, - "Cannot specify ',' with '\\x%x'.", + "Cannot specify ',' or '_' with '\\x%x'.", (unsigned int)presentation_type); } +static void +invalid_comma_and_underscore(void) +{ + PyErr_Format(PyExc_ValueError, "Cannot specify both ',' and '_'."); +} + /* get_integer consumes 0 or more decimal digit characters from an input string, updates *result with the corresponding positive @@ -48,16 +54,17 @@ invalid_comma_type(Py_UCS4 presentation_type) returns -1 on error. */ static int -get_integer(PyObject *str, Py_ssize_t *pos, Py_ssize_t end, +get_integer(PyObject *str, Py_ssize_t *ppos, Py_ssize_t end, Py_ssize_t *result) { - Py_ssize_t accumulator, digitval; + Py_ssize_t accumulator, digitval, pos = *ppos; int numdigits; + int kind = PyUnicode_KIND(str); + void *data = PyUnicode_DATA(str); + accumulator = numdigits = 0; - for (;;(*pos)++, numdigits++) { - if (*pos >= end) - break; - digitval = Py_UNICODE_TODECIMAL(PyUnicode_READ_CHAR(str, *pos)); + for (; pos < end; pos++, numdigits++) { + digitval = Py_UNICODE_TODECIMAL(PyUnicode_READ(kind, data, pos)); if (digitval < 0) break; /* @@ -69,10 +76,12 @@ get_integer(PyObject *str, Py_ssize_t *pos, Py_ssize_t end, if (accumulator > (PY_SSIZE_T_MAX - digitval) / 10) { PyErr_Format(PyExc_ValueError, "Too many decimal digits in format string"); + *ppos = pos; return -1; } accumulator = accumulator * 10 + digitval; } + *ppos = pos; *result = accumulator; return numdigits; } @@ -105,6 +114,14 @@ is_sign_element(Py_UCS4 c) } } +/* Locale type codes. LT_NO_LOCALE must be zero. */ +enum LocaleType { + LT_NO_LOCALE = 0, + LT_DEFAULT_LOCALE, + LT_UNDERSCORE_LOCALE, + LT_UNDER_FOUR_LOCALE, + LT_CURRENT_LOCALE +}; typedef struct { Py_UCS4 fill_char; @@ -112,7 +129,7 @@ typedef struct { int alternate; Py_UCS4 sign; Py_ssize_t width; - int thousands_separators; + enum LocaleType thousands_separators; Py_ssize_t precision; Py_UCS4 type; } InternalFormatSpec; @@ -150,9 +167,11 @@ parse_internal_render_format_spec(PyObject *format_spec, char default_align) { Py_ssize_t pos = start; + int kind = PyUnicode_KIND(format_spec); + void *data = PyUnicode_DATA(format_spec); /* end-pos is used throughout this code to specify the length of the input string */ -#define READ_spec(index) PyUnicode_READ_CHAR(format_spec, index) +#define READ_spec(index) PyUnicode_READ(kind, data, index) Py_ssize_t consumed; int align_specified = 0; @@ -163,7 +182,7 @@ parse_internal_render_format_spec(PyObject *format_spec, format->alternate = 0; format->sign = '\0'; format->width = -1; - format->thousands_separators = 0; + format->thousands_separators = LT_NO_LOCALE; format->precision = -1; format->type = default_type; @@ -218,9 +237,22 @@ parse_internal_render_format_spec(PyObject *format_spec, /* Comma signifies add thousands separators */ if (end-pos && READ_spec(pos) == ',') { - format->thousands_separators = 1; + format->thousands_separators = LT_DEFAULT_LOCALE; + ++pos; + } + /* Underscore signifies add thousands separators */ + if (end-pos && READ_spec(pos) == '_') { + if (format->thousands_separators != LT_NO_LOCALE) { + invalid_comma_and_underscore(); + return 0; + } + format->thousands_separators = LT_UNDERSCORE_LOCALE; ++pos; } + if (end-pos && READ_spec(pos) == ',') { + invalid_comma_and_underscore(); + return 0; + } /* Parse field precision */ if (end-pos && READ_spec(pos) == '.') { @@ -270,6 +302,16 @@ parse_internal_render_format_spec(PyObject *format_spec, case '\0': /* These are allowed. See PEP 378.*/ break; + case 'b': + case 'o': + case 'x': + case 'X': + /* Underscores are allowed in bin/oct/hex. See PEP 515. */ + if (format->thousands_separators == LT_UNDERSCORE_LOCALE) { + /* Every four digits, not every three, in bin/oct/hex. */ + format->thousands_separators = LT_UNDER_FOUR_LOCALE; + break; + } default: invalid_comma_type(format->type); return 0; @@ -346,13 +388,6 @@ fill_padding(_PyUnicodeWriter *writer, /*********** common routines for numeric formatting *********************/ /************************************************************************/ -/* Locale type codes. */ -enum LocaleType { - LT_CURRENT_LOCALE, - LT_DEFAULT_LOCALE, - LT_NO_LOCALE -}; - /* Locale info needed for formatting integers and the part of floats before and including the decimal. Note that locales only support 8-bit chars, not unicode. */ @@ -404,13 +439,15 @@ parse_number(PyObject *s, Py_ssize_t pos, Py_ssize_t end, Py_ssize_t *n_remainder, int *has_decimal) { Py_ssize_t remainder; + int kind = PyUnicode_KIND(s); + void *data = PyUnicode_DATA(s); - while (pos<end && Py_ISDIGIT(PyUnicode_READ_CHAR(s, pos))) + while (pos<end && Py_ISDIGIT(PyUnicode_READ(kind, data, pos))) ++pos; remainder = pos; /* Does remainder start with a decimal point? */ - *has_decimal = pos<end && PyUnicode_READ_CHAR(s, remainder) == '.'; + *has_decimal = pos<end && PyUnicode_READ(kind, data, remainder) == '.'; /* Skip the decimal point. */ if (*has_decimal) @@ -658,12 +695,12 @@ fill_number(_PyUnicodeWriter *writer, const NumberFieldWidths *spec, return 0; } -static char no_grouping[1] = {CHAR_MAX}; +static const char no_grouping[1] = {CHAR_MAX}; /* Find the decimal point character(s?), thousands_separator(s?), and grouping description, either for the current locale if type is - LT_CURRENT_LOCALE, a hard-coded locale if LT_DEFAULT_LOCALE, or - none if LT_NO_LOCALE. */ + LT_CURRENT_LOCALE, a hard-coded locale if LT_DEFAULT_LOCALE or + LT_UNDERSCORE_LOCALE/LT_UNDER_FOUR_LOCALE, or none if LT_NO_LOCALE. */ static int get_locale_info(enum LocaleType type, LocaleInfo *locale_info) { @@ -684,13 +721,19 @@ get_locale_info(enum LocaleType type, LocaleInfo *locale_info) break; } case LT_DEFAULT_LOCALE: + case LT_UNDERSCORE_LOCALE: + case LT_UNDER_FOUR_LOCALE: locale_info->decimal_point = PyUnicode_FromOrdinal('.'); - locale_info->thousands_sep = PyUnicode_FromOrdinal(','); + locale_info->thousands_sep = PyUnicode_FromOrdinal( + type == LT_DEFAULT_LOCALE ? ',' : '_'); if (!locale_info->decimal_point || !locale_info->thousands_sep) return -1; - locale_info->grouping = "\3"; /* Group every 3 characters. The + if (type != LT_UNDER_FOUR_LOCALE) + locale_info->grouping = "\3"; /* Group every 3 characters. The (implicit) trailing 0 means repeat infinitely. */ + else + locale_info->grouping = "\4"; /* Bin/oct/hex group every four. */ break; case LT_NO_LOCALE: locale_info->decimal_point = PyUnicode_FromOrdinal('.'); @@ -937,9 +980,7 @@ format_long_internal(PyObject *value, const InternalFormatSpec *format, /* Determine the grouping, separator, and decimal point, if any. */ if (get_locale_info(format->type == 'n' ? LT_CURRENT_LOCALE : - (format->thousands_separators ? - LT_DEFAULT_LOCALE : - LT_NO_LOCALE), + format->thousands_separators, &locale) == -1) goto done; @@ -1084,9 +1125,7 @@ format_float_internal(PyObject *value, /* Determine the grouping, separator, and decimal point, if any. */ if (get_locale_info(format->type == 'n' ? LT_CURRENT_LOCALE : - (format->thousands_separators ? - LT_DEFAULT_LOCALE : - LT_NO_LOCALE), + format->thousands_separators, &locale) == -1) goto done; @@ -1262,9 +1301,7 @@ format_complex_internal(PyObject *value, /* Determine the grouping, separator, and decimal point, if any. */ if (get_locale_info(format->type == 'n' ? LT_CURRENT_LOCALE : - (format->thousands_separators ? - LT_DEFAULT_LOCALE : - LT_NO_LOCALE), + format->thousands_separators, &locale) == -1) goto done; diff --git a/Python/frozen.c b/Python/frozen.c index 676f395488..7e04f3ca02 100644 --- a/Python/frozen.c +++ b/Python/frozen.c @@ -14,17 +14,15 @@ the appropriate bytes from M___main__.c. */ static unsigned char M___hello__[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,20,0,0,0,100,2,0,90,1,0, - 101,2,0,100,0,0,131,1,0,1,100,1,0,83,40,3, - 0,0,0,117,12,0,0,0,72,101,108,108,111,32,119,111, - 114,108,100,33,78,84,40,3,0,0,0,117,4,0,0,0, - 84,114,117,101,117,11,0,0,0,105,110,105,116,105,97,108, - 105,122,101,100,117,5,0,0,0,112,114,105,110,116,40,0, - 0,0,0,40,0,0,0,0,40,0,0,0,0,117,7,0, - 0,0,102,108,97,103,46,112,121,117,8,0,0,0,60,109, - 111,100,117,108,101,62,1,0,0,0,115,2,0,0,0,6, - 1, + 227,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,64,0,0,0,115,16,0,0,0,100,0,90,0,101,1, + 100,1,131,1,1,0,100,2,83,0,41,3,84,122,12,72, + 101,108,108,111,32,119,111,114,108,100,33,78,41,2,218,11, + 105,110,105,116,105,97,108,105,122,101,100,218,5,112,114,105, + 110,116,169,0,114,3,0,0,0,114,3,0,0,0,250,22, + 46,47,84,111,111,108,115,47,102,114,101,101,122,101,47,102, + 108,97,103,46,112,121,218,8,60,109,111,100,117,108,101,62, + 1,0,0,0,115,2,0,0,0,4,1, }; #define SIZE (int)sizeof(M___hello__) diff --git a/Python/frozenmain.c b/Python/frozenmain.c index de8bd35453..769b33d0ee 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -99,7 +99,9 @@ Py_FrozenMain(int argc, char **argv) #ifdef MS_WINDOWS PyWinFreeze_ExeTerm(); #endif - Py_Finalize(); + if (Py_FinalizeEx() < 0) { + sts = 120; + } error: PyMem_RawFree(argv_copy); diff --git a/Python/future.c b/Python/future.c index 163f87f673..75f210769e 100644 --- a/Python/future.c +++ b/Python/future.c @@ -79,7 +79,10 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) i = 0; first = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); - if (first->kind == Expr_kind && first->v.Expr.value->kind == Str_kind) + if (first->kind == Expr_kind + && (first->v.Expr.value->kind == Str_kind + || (first->v.Expr.value->kind == Constant_kind + && PyUnicode_CheckExact(first->v.Expr.value->v.Constant.value)))) i++; diff --git a/Python/getargs.c b/Python/getargs.c index 8aab067865..43656eb2aa 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -18,16 +18,28 @@ int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, const char *, char **, va_list); +int _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *, + struct _PyArg_Parser *, ...); +int _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *, + struct _PyArg_Parser *, va_list); + #ifdef HAVE_DECLSPEC_DLL /* Export functions */ -PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, char *, ...); -PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, char *, ...); +PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, const char *, ...); +PyAPI_FUNC(int) _PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, + struct _PyArg_Parser *parser, ...); +PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, const char *, ...); PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywords_SizeT(PyObject *, PyObject *, const char *, char **, ...); PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); -PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, char *, va_list); +PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, const char *, va_list); PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *, PyObject *, const char *, char **, va_list); + +PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *, PyObject *, + struct _PyArg_Parser *, ...); +PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *, PyObject *, + struct _PyArg_Parser *, va_list); #endif #define FLAG_COMPAT 1 @@ -56,18 +68,24 @@ typedef struct { /* Forward */ static int vgetargs1(PyObject *, const char *, va_list *, int); static void seterror(Py_ssize_t, const char *, int *, const char *, const char *); -static char *convertitem(PyObject *, const char **, va_list *, int, int *, - char *, size_t, freelist_t *); -static char *converttuple(PyObject *, const char **, va_list *, int, - int *, char *, size_t, int, freelist_t *); -static char *convertsimple(PyObject *, const char **, va_list *, int, char *, - size_t, freelist_t *); -static Py_ssize_t convertbuffer(PyObject *, void **p, char **); -static int getbuffer(PyObject *, Py_buffer *, char**); +static const char *convertitem(PyObject *, const char **, va_list *, int, int *, + char *, size_t, freelist_t *); +static const char *converttuple(PyObject *, const char **, va_list *, int, + int *, char *, size_t, int, freelist_t *); +static const char *convertsimple(PyObject *, const char **, va_list *, int, + char *, size_t, freelist_t *); +static Py_ssize_t convertbuffer(PyObject *, void **p, const char **); +static int getbuffer(PyObject *, Py_buffer *, const char**); static int vgetargskeywords(PyObject *, PyObject *, const char *, char **, va_list *, int); -static char *skipitem(const char **, va_list *, int); +static int vgetargskeywordsfast(PyObject *, PyObject *, + struct _PyArg_Parser *, va_list *, int); +static int vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, + PyObject *keywords, PyObject *kwnames, + struct _PyArg_Parser *parser, + va_list *p_va, int flags); +static const char *skipitem(const char **, va_list *, int); int PyArg_Parse(PyObject *args, const char *format, ...) @@ -82,7 +100,7 @@ PyArg_Parse(PyObject *args, const char *format, ...) } int -_PyArg_Parse_SizeT(PyObject *args, char *format, ...) +_PyArg_Parse_SizeT(PyObject *args, const char *format, ...) { int retval; va_list va; @@ -107,7 +125,7 @@ PyArg_ParseTuple(PyObject *args, const char *format, ...) } int -_PyArg_ParseTuple_SizeT(PyObject *args, char *format, ...) +_PyArg_ParseTuple_SizeT(PyObject *args, const char *format, ...) { int retval; va_list va; @@ -123,20 +141,26 @@ int PyArg_VaParse(PyObject *args, const char *format, va_list va) { va_list lva; + int retval; - Py_VA_COPY(lva, va); + va_copy(lva, va); - return vgetargs1(args, format, &lva, 0); + retval = vgetargs1(args, format, &lva, 0); + va_end(lva); + return retval; } int -_PyArg_VaParse_SizeT(PyObject *args, char *format, va_list va) +_PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va) { va_list lva; + int retval; - Py_VA_COPY(lva, va); + va_copy(lva, va); - return vgetargs1(args, format, &lva, FLAG_SIZE_T); + retval = vgetargs1(args, format, &lva, FLAG_SIZE_T); + va_end(lva); + return retval; } @@ -208,7 +232,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) int endfmt = 0; const char *formatsave = format; Py_ssize_t i, len; - char *msg; + const char *msg; int compat = flags & FLAG_COMPAT; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; freelist_t freelist; @@ -394,7 +418,12 @@ seterror(Py_ssize_t iarg, const char *msg, int *levels, const char *fname, PyOS_snprintf(p, sizeof(buf) - (p - buf), " %.256s", msg); message = buf; } - PyErr_SetString(PyExc_TypeError, message); + if (msg[0] == '(') { + PyErr_SetString(PyExc_SystemError, message); + } + else { + PyErr_SetString(PyExc_TypeError, message); + } } @@ -416,7 +445,7 @@ seterror(Py_ssize_t iarg, const char *msg, int *levels, const char *fname, and msgbuf is returned. */ -static char * +static const char * converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, int *levels, char *msgbuf, size_t bufsize, int toplevel, freelist_t *freelist) @@ -474,7 +503,7 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, format = *p_format; for (i = 0; i < n; i++) { - char *msg; + const char *msg; PyObject *item; item = PySequence_GetItem(arg, i); if (item == NULL) { @@ -501,11 +530,11 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, /* Convert a single item. */ -static char * +static const char * convertitem(PyObject *arg, const char **p_format, va_list *p_va, int flags, int *levels, char *msgbuf, size_t bufsize, freelist_t *freelist) { - char *msg; + const char *msg; const char *format = *p_format; if (*format == '(' /* ')' */) { @@ -530,7 +559,7 @@ convertitem(PyObject *arg, const char **p_format, va_list *p_va, int flags, /* Format an error message generated by convertsimple(). */ -static char * +static const char * converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize) { assert(expected != NULL); @@ -572,7 +601,7 @@ float_argument_error(PyObject *arg) When you add new format codes, please don't forget poor skipitem() below. */ -static char * +static const char * convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, char *msgbuf, size_t bufsize, freelist_t *freelist) { @@ -752,14 +781,13 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, break; } -#ifdef HAVE_LONG_LONG - case 'L': {/* PY_LONG_LONG */ - PY_LONG_LONG *p = va_arg( *p_va, PY_LONG_LONG * ); - PY_LONG_LONG ival; + case 'L': {/* long long */ + long long *p = va_arg( *p_va, long long * ); + long long ival; if (float_argument_error(arg)) RETURN_ERR_OCCURRED; ival = PyLong_AsLongLong(arg); - if (ival == (PY_LONG_LONG)-1 && PyErr_Occurred()) + if (ival == (long long)-1 && PyErr_Occurred()) RETURN_ERR_OCCURRED; else *p = ival; @@ -767,8 +795,8 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } case 'K': { /* long long sized bitfield */ - unsigned PY_LONG_LONG *p = va_arg(*p_va, unsigned PY_LONG_LONG *); - unsigned PY_LONG_LONG ival; + unsigned long long *p = va_arg(*p_va, unsigned long long *); + unsigned long long ival; if (PyLong_Check(arg)) ival = PyLong_AsUnsignedLongLongMask(arg); else @@ -776,7 +804,6 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, *p = ival; break; } -#endif case 'f': {/* float */ float *p = va_arg(*p_va, float *); @@ -857,7 +884,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, case 'y': {/* any bytes-like object */ void **p = (void **)va_arg(*p_va, char **); - char *buf; + const char *buf; Py_ssize_t count; if (*format == '*') { if (getbuffer(arg, (Py_buffer*)p, &buf) < 0) @@ -904,7 +931,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, PyBuffer_FillInfo(p, arg, sarg, len, 1, 0); } else { /* any bytes-like object */ - char *buf; + const char *buf; if (getbuffer(arg, p, &buf) < 0) return converterr(buf, arg, msgbuf, bufsize); } @@ -934,7 +961,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } else { /* read-only bytes-like object */ /* XXX Really? */ - char *buf; + const char *buf; Py_ssize_t count = convertbuffer(arg, p, &buf); if (count < 0) return converterr(buf, arg, msgbuf, bufsize); @@ -1051,35 +1078,25 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, return converterr("(AsCharBuffer failed)", arg, msgbuf, bufsize); } - else { - PyObject *u; - - /* Convert object to Unicode */ - u = PyUnicode_FromObject(arg); - if (u == NULL) - return converterr( - "string or unicode or text buffer", - arg, msgbuf, bufsize); - + else if (PyUnicode_Check(arg)) { /* Encode object; use default error handling */ - s = PyUnicode_AsEncodedString(u, + s = PyUnicode_AsEncodedString(arg, encoding, NULL); - Py_DECREF(u); if (s == NULL) return converterr("(encoding failed)", arg, msgbuf, bufsize); - if (!PyBytes_Check(s)) { - Py_DECREF(s); - return converterr( - "(encoder failed to return bytes)", - arg, msgbuf, bufsize); - } + assert(PyBytes_Check(s)); size = PyBytes_GET_SIZE(s); ptr = PyBytes_AS_STRING(s); if (ptr == NULL) ptr = ""; } + else { + return converterr( + recode_strings ? "str" : "str, bytes or bytearray", + arg, msgbuf, bufsize); + } /* Write output; output is guaranteed to be 0-terminated */ if (*format == '#') { @@ -1129,7 +1146,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } else { if (size + 1 > BUFFER_LEN) { Py_DECREF(s); - PyErr_Format(PyExc_TypeError, + PyErr_Format(PyExc_ValueError, "encoded string too long " "(%zd, maximum length %zd)", (Py_ssize_t)size, (Py_ssize_t)(BUFFER_LEN-1)); @@ -1283,7 +1300,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } static Py_ssize_t -convertbuffer(PyObject *arg, void **p, char **errmsg) +convertbuffer(PyObject *arg, void **p, const char **errmsg) { PyBufferProcs *pb = Py_TYPE(arg)->tp_as_buffer; Py_ssize_t count; @@ -1305,7 +1322,7 @@ convertbuffer(PyObject *arg, void **p, char **errmsg) } static int -getbuffer(PyObject *arg, Py_buffer *view, char **errmsg) +getbuffer(PyObject *arg, Py_buffer *view, const char **errmsg) { if (PyObject_GetBuffer(arg, view, PyBUF_SIMPLE) != 0) { *errmsg = "bytes-like object"; @@ -1391,9 +1408,10 @@ PyArg_VaParseTupleAndKeywords(PyObject *args, return 0; } - Py_VA_COPY(lva, va); + va_copy(lva, va); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0); + va_end(lva); return retval; } @@ -1415,10 +1433,138 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args, return 0; } - Py_VA_COPY(lva, va); + va_copy(lva, va); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, FLAG_SIZE_T); + va_end(lva); + return retval; +} + +int +_PyArg_ParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, + struct _PyArg_Parser *parser, ...) +{ + int retval; + va_list va; + + if ((args == NULL || !PyTuple_Check(args)) || + (keywords != NULL && !PyDict_Check(keywords)) || + parser == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + + va_start(va, parser); + retval = vgetargskeywordsfast(args, keywords, parser, &va, 0); + va_end(va); + return retval; +} + +int +_PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, + struct _PyArg_Parser *parser, ...) +{ + int retval; + va_list va; + + if ((args == NULL || !PyTuple_Check(args)) || + (keywords != NULL && !PyDict_Check(keywords)) || + parser == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + + va_start(va, parser); + retval = vgetargskeywordsfast(args, keywords, parser, &va, FLAG_SIZE_T); + va_end(va); + return retval; +} + +int +_PyArg_ParseStack(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, + struct _PyArg_Parser *parser, ...) +{ + int retval; + va_list va; + + if ((kwnames != NULL && !PyTuple_Check(kwnames)) || + parser == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + + va_start(va, parser); + retval = vgetargskeywordsfast_impl(args, nargs, NULL, kwnames, parser, &va, 0); + va_end(va); + return retval; +} + +int +_PyArg_ParseStack_SizeT(PyObject **args, Py_ssize_t nargs, PyObject *kwnames, + struct _PyArg_Parser *parser, ...) +{ + int retval; + va_list va; + + if ((kwnames != NULL && !PyTuple_Check(kwnames)) || + parser == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + + va_start(va, parser); + retval = vgetargskeywordsfast_impl(args, nargs, NULL, kwnames, parser, &va, FLAG_SIZE_T); + va_end(va); + return retval; +} + + +int +_PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, + struct _PyArg_Parser *parser, va_list va) +{ + int retval; + va_list lva; + + if ((args == NULL || !PyTuple_Check(args)) || + (keywords != NULL && !PyDict_Check(keywords)) || + parser == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + + va_copy(lva, va); + + retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0); + va_end(lva); + return retval; +} + +int +_PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, + struct _PyArg_Parser *parser, va_list va) +{ + int retval; + va_list lva; + + if ((args == NULL || !PyTuple_Check(args)) || + (keywords != NULL && !PyDict_Check(keywords)) || + parser == NULL) + { + PyErr_BadInternalCall(); + return 0; + } + + va_copy(lva, va); + + retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T); + va_end(lva); return retval; } @@ -1448,7 +1594,8 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, const char *fname, *msg, *custom_msg, *keyword; int min = INT_MAX; int max = INT_MAX; - int i, len; + int i, pos, len; + int skip = 0; Py_ssize_t nargs, nkeywords; PyObject *current_arg; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; @@ -1476,9 +1623,17 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, custom_msg++; } + /* scan kwlist and count the number of positional-only parameters */ + for (pos = 0; kwlist[pos] && !*kwlist[pos]; pos++) { + } /* scan kwlist and get greatest possible nbr of args */ - for (len=0; kwlist[len]; len++) - continue; + for (len = pos; kwlist[len]; len++) { + if (!*kwlist[len]) { + PyErr_SetString(PyExc_SystemError, + "Empty keyword parameter name"); + return cleanreturn(0, &freelist); + } + } if (len > STATIC_FREELIST_ENTRIES) { freelist.entries = PyMem_NEW(freelistentry_t, len); @@ -1507,7 +1662,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, keyword = kwlist[i]; if (*format == '|') { if (min != INT_MAX) { - PyErr_SetString(PyExc_RuntimeError, + PyErr_SetString(PyExc_SystemError, "Invalid format string (| specified twice)"); return cleanreturn(0, &freelist); } @@ -1516,14 +1671,14 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, format++; if (max != INT_MAX) { - PyErr_SetString(PyExc_RuntimeError, + PyErr_SetString(PyExc_SystemError, "Invalid format string ($ before |)"); return cleanreturn(0, &freelist); } } if (*format == '$') { if (max != INT_MAX) { - PyErr_SetString(PyExc_RuntimeError, + PyErr_SetString(PyExc_SystemError, "Invalid format string ($ specified twice)"); return cleanreturn(0, &freelist); } @@ -1531,6 +1686,17 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, max = i; format++; + if (max < pos) { + PyErr_SetString(PyExc_SystemError, + "Empty parameter name after $"); + return cleanreturn(0, &freelist); + } + if (skip) { + /* Now we know the minimal and the maximal numbers of + * positional arguments and can raise an exception with + * informative message (see below). */ + break; + } if (max < nargs) { PyErr_Format(PyExc_TypeError, "Function takes %s %d positional arguments" @@ -1541,66 +1707,90 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, } } if (IS_END_OF_FORMAT(*format)) { - PyErr_Format(PyExc_RuntimeError, + PyErr_Format(PyExc_SystemError, "More keyword list entries (%d) than " "format specifiers (%d)", len, i); return cleanreturn(0, &freelist); } - current_arg = NULL; - if (nkeywords) { - current_arg = PyDict_GetItemString(keywords, keyword); - } - if (current_arg) { - --nkeywords; - if (i < nargs) { - /* arg present in tuple and in dict */ - PyErr_Format(PyExc_TypeError, - "Argument given by name ('%s') " - "and position (%d)", - keyword, i+1); - return cleanreturn(0, &freelist); + if (!skip) { + current_arg = NULL; + if (nkeywords && i >= pos) { + current_arg = PyDict_GetItemString(keywords, keyword); + if (!current_arg && PyErr_Occurred()) { + return cleanreturn(0, &freelist); + } } - } - else if (nkeywords && PyErr_Occurred()) - return cleanreturn(0, &freelist); - else if (i < nargs) - current_arg = PyTuple_GET_ITEM(args, i); - - if (current_arg) { - msg = convertitem(current_arg, &format, p_va, flags, - levels, msgbuf, sizeof(msgbuf), &freelist); - if (msg) { - seterror(i+1, msg, levels, fname, custom_msg); - return cleanreturn(0, &freelist); + if (current_arg) { + --nkeywords; + if (i < nargs) { + /* arg present in tuple and in dict */ + PyErr_Format(PyExc_TypeError, + "Argument given by name ('%s') " + "and position (%d)", + keyword, i+1); + return cleanreturn(0, &freelist); + } + } + else if (i < nargs) + current_arg = PyTuple_GET_ITEM(args, i); + + if (current_arg) { + msg = convertitem(current_arg, &format, p_va, flags, + levels, msgbuf, sizeof(msgbuf), &freelist); + if (msg) { + seterror(i+1, msg, levels, fname, custom_msg); + return cleanreturn(0, &freelist); + } + continue; } - continue; - } - if (i < min) { - PyErr_Format(PyExc_TypeError, "Required argument " - "'%s' (pos %d) not found", - keyword, i+1); - return cleanreturn(0, &freelist); + if (i < min) { + if (i < pos) { + assert (min == INT_MAX); + assert (max == INT_MAX); + skip = 1; + /* At that moment we still don't know the minimal and + * the maximal numbers of positional arguments. Raising + * an exception is deferred until we encounter | and $ + * or the end of the format. */ + } + else { + PyErr_Format(PyExc_TypeError, "Required argument " + "'%s' (pos %d) not found", + keyword, i+1); + return cleanreturn(0, &freelist); + } + } + /* current code reports success when all required args + * fulfilled and no keyword args left, with no further + * validation. XXX Maybe skip this in debug build ? + */ + if (!nkeywords && !skip) { + return cleanreturn(1, &freelist); + } } - /* current code reports success when all required args - * fulfilled and no keyword args left, with no further - * validation. XXX Maybe skip this in debug build ? - */ - if (!nkeywords) - return cleanreturn(1, &freelist); /* We are into optional args, skip thru to any remaining * keyword args */ msg = skipitem(&format, p_va, flags); if (msg) { - PyErr_Format(PyExc_RuntimeError, "%s: '%s'", msg, + PyErr_Format(PyExc_SystemError, "%s: '%s'", msg, format); return cleanreturn(0, &freelist); } } + if (skip) { + PyErr_Format(PyExc_TypeError, + "Function takes %s %d positional arguments" + " (%d given)", + (Py_MIN(pos, min) < i) ? "at least" : "exactly", + Py_MIN(pos, min), nargs); + return cleanreturn(0, &freelist); + } + if (!IS_END_OF_FORMAT(*format) && (*format != '|') && (*format != '$')) { - PyErr_Format(PyExc_RuntimeError, + PyErr_Format(PyExc_SystemError, "more argument specifiers than keyword list entries " "(remaining format:'%s')", format); return cleanreturn(0, &freelist); @@ -1618,7 +1808,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, return cleanreturn(0, &freelist); } for (i = 0; i < len; i++) { - if (!PyUnicode_CompareWithASCIIString(key, kwlist[i])) { + if (*kwlist[i] && !PyUnicode_CompareWithASCIIString(key, kwlist[i])) { match = 1; break; } @@ -1637,7 +1827,388 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, } -static char * +/* List of static parsers. */ +static struct _PyArg_Parser *static_arg_parsers = NULL; + +static int +parser_init(struct _PyArg_Parser *parser) +{ + const char * const *keywords; + const char *format, *msg; + int i, len, min, max, nkw; + PyObject *kwtuple; + + assert(parser->format != NULL); + assert(parser->keywords != NULL); + if (parser->kwtuple != NULL) { + return 1; + } + + /* grab the function name or custom error msg first (mutually exclusive) */ + parser->fname = strchr(parser->format, ':'); + if (parser->fname) { + parser->fname++; + parser->custom_msg = NULL; + } + else { + parser->custom_msg = strchr(parser->format,';'); + if (parser->custom_msg) + parser->custom_msg++; + } + + keywords = parser->keywords; + /* scan keywords and count the number of positional-only parameters */ + for (i = 0; keywords[i] && !*keywords[i]; i++) { + } + parser->pos = i; + /* scan keywords and get greatest possible nbr of args */ + for (; keywords[i]; i++) { + if (!*keywords[i]) { + PyErr_SetString(PyExc_SystemError, + "Empty keyword parameter name"); + return 0; + } + } + len = i; + + min = max = INT_MAX; + format = parser->format; + for (i = 0; i < len; i++) { + if (*format == '|') { + if (min != INT_MAX) { + PyErr_SetString(PyExc_SystemError, + "Invalid format string (| specified twice)"); + return 0; + } + if (max != INT_MAX) { + PyErr_SetString(PyExc_SystemError, + "Invalid format string ($ before |)"); + return 0; + } + min = i; + format++; + } + if (*format == '$') { + if (max != INT_MAX) { + PyErr_SetString(PyExc_SystemError, + "Invalid format string ($ specified twice)"); + return 0; + } + if (i < parser->pos) { + PyErr_SetString(PyExc_SystemError, + "Empty parameter name after $"); + return 0; + } + max = i; + format++; + } + if (IS_END_OF_FORMAT(*format)) { + PyErr_Format(PyExc_SystemError, + "More keyword list entries (%d) than " + "format specifiers (%d)", len, i); + return 0; + } + + msg = skipitem(&format, NULL, 0); + if (msg) { + PyErr_Format(PyExc_SystemError, "%s: '%s'", msg, + format); + return 0; + } + } + parser->min = Py_MIN(min, len); + parser->max = Py_MIN(max, len); + + if (!IS_END_OF_FORMAT(*format) && (*format != '|') && (*format != '$')) { + PyErr_Format(PyExc_SystemError, + "more argument specifiers than keyword list entries " + "(remaining format:'%s')", format); + return 0; + } + + nkw = len - parser->pos; + kwtuple = PyTuple_New(nkw); + if (kwtuple == NULL) { + return 0; + } + keywords = parser->keywords + parser->pos; + for (i = 0; i < nkw; i++) { + PyObject *str = PyUnicode_FromString(keywords[i]); + if (str == NULL) { + Py_DECREF(kwtuple); + return 0; + } + PyUnicode_InternInPlace(&str); + PyTuple_SET_ITEM(kwtuple, i, str); + } + parser->kwtuple = kwtuple; + + assert(parser->next == NULL); + parser->next = static_arg_parsers; + static_arg_parsers = parser; + return 1; +} + +static void +parser_clear(struct _PyArg_Parser *parser) +{ + Py_CLEAR(parser->kwtuple); +} + +static PyObject* +find_keyword(PyObject *kwnames, PyObject **kwstack, PyObject *key) +{ + Py_ssize_t i, nkwargs; + + nkwargs = PyTuple_GET_SIZE(kwnames); + for (i=0; i < nkwargs; i++) { + PyObject *kwname = PyTuple_GET_ITEM(kwnames, i); + + /* ptr==ptr should match in most cases since keyword keys + should be interned strings */ + if (kwname == key) { + return kwstack[i]; + } + if (!PyUnicode_Check(kwname)) { + /* ignore non-string keyword keys: + an error will be raised above */ + continue; + } + if (_PyUnicode_EQ(kwname, key)) { + return kwstack[i]; + } + } + return NULL; +} + +static int +vgetargskeywordsfast_impl(PyObject **args, Py_ssize_t nargs, + PyObject *keywords, PyObject *kwnames, + struct _PyArg_Parser *parser, + va_list *p_va, int flags) +{ + PyObject *kwtuple; + char msgbuf[512]; + int levels[32]; + const char *format; + const char *msg; + PyObject *keyword; + int i, pos, len; + Py_ssize_t nkeywords; + PyObject *current_arg; + freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; + freelist_t freelist; + PyObject **kwstack = NULL; + + freelist.entries = static_entries; + freelist.first_available = 0; + freelist.entries_malloced = 0; + + assert(keywords == NULL || PyDict_Check(keywords)); + assert(kwnames == NULL || PyTuple_Check(kwnames)); + assert((keywords != NULL || kwnames != NULL) + || (keywords == NULL && kwnames == NULL)); + assert(parser != NULL); + assert(p_va != NULL); + + if (!parser_init(parser)) { + return 0; + } + + kwtuple = parser->kwtuple; + pos = parser->pos; + len = pos + PyTuple_GET_SIZE(kwtuple); + + if (len > STATIC_FREELIST_ENTRIES) { + freelist.entries = PyMem_NEW(freelistentry_t, len); + if (freelist.entries == NULL) { + PyErr_NoMemory(); + return 0; + } + freelist.entries_malloced = 1; + } + + if (keywords != NULL) { + nkeywords = PyDict_Size(keywords); + } + else if (kwnames != NULL) { + nkeywords = PyTuple_GET_SIZE(kwnames); + kwstack = args + nargs; + } + else { + nkeywords = 0; + } + if (nargs + nkeywords > len) { + PyErr_Format(PyExc_TypeError, + "%s%s takes at most %d argument%s (%zd given)", + (parser->fname == NULL) ? "function" : parser->fname, + (parser->fname == NULL) ? "" : "()", + len, + (len == 1) ? "" : "s", + nargs + nkeywords); + return cleanreturn(0, &freelist); + } + if (parser->max < nargs) { + PyErr_Format(PyExc_TypeError, + "Function takes %s %d positional arguments (%d given)", + (parser->min != INT_MAX) ? "at most" : "exactly", + parser->max, nargs); + return cleanreturn(0, &freelist); + } + + format = parser->format; + /* convert tuple args and keyword args in same loop, using kwtuple to drive process */ + for (i = 0; i < len; i++) { + keyword = (i >= pos) ? PyTuple_GET_ITEM(kwtuple, i - pos) : NULL; + if (*format == '|') { + format++; + } + if (*format == '$') { + format++; + } + assert(!IS_END_OF_FORMAT(*format)); + + current_arg = NULL; + if (nkeywords && i >= pos) { + if (keywords != NULL) { + current_arg = PyDict_GetItem(keywords, keyword); + if (!current_arg && PyErr_Occurred()) { + return cleanreturn(0, &freelist); + } + } + else { + current_arg = find_keyword(kwnames, kwstack, keyword); + } + } + if (current_arg) { + --nkeywords; + if (i < nargs) { + /* arg present in tuple and in dict */ + PyErr_Format(PyExc_TypeError, + "Argument given by name ('%U') " + "and position (%d)", + keyword, i+1); + return cleanreturn(0, &freelist); + } + } + else if (i < nargs) { + current_arg = args[i]; + } + + if (current_arg) { + msg = convertitem(current_arg, &format, p_va, flags, + levels, msgbuf, sizeof(msgbuf), &freelist); + if (msg) { + seterror(i+1, msg, levels, parser->fname, parser->custom_msg); + return cleanreturn(0, &freelist); + } + continue; + } + + if (i < parser->min) { + /* Less arguments than required */ + if (i < pos) { + PyErr_Format(PyExc_TypeError, + "Function takes %s %d positional arguments" + " (%d given)", + (Py_MIN(pos, parser->min) < parser->max) ? "at least" : "exactly", + Py_MIN(pos, parser->min), nargs); + } + else { + PyErr_Format(PyExc_TypeError, "Required argument " + "'%U' (pos %d) not found", + keyword, i+1); + } + return cleanreturn(0, &freelist); + } + /* current code reports success when all required args + * fulfilled and no keyword args left, with no further + * validation. XXX Maybe skip this in debug build ? + */ + if (!nkeywords) { + return cleanreturn(1, &freelist); + } + + /* We are into optional args, skip thru to any remaining + * keyword args */ + msg = skipitem(&format, p_va, flags); + assert(msg == NULL); + } + + assert(IS_END_OF_FORMAT(*format) || (*format == '|') || (*format == '$')); + + /* make sure there are no extraneous keyword arguments */ + if (nkeywords > 0) { + if (keywords != NULL) { + PyObject *key, *value; + Py_ssize_t pos = 0; + while (PyDict_Next(keywords, &pos, &key, &value)) { + int match; + if (!PyUnicode_Check(key)) { + PyErr_SetString(PyExc_TypeError, + "keywords must be strings"); + return cleanreturn(0, &freelist); + } + match = PySequence_Contains(kwtuple, key); + if (match <= 0) { + if (!match) { + PyErr_Format(PyExc_TypeError, + "'%U' is an invalid keyword " + "argument for this function", + key); + } + return cleanreturn(0, &freelist); + } + } + } + else { + Py_ssize_t j, nkwargs; + + nkwargs = PyTuple_GET_SIZE(kwnames); + for (j=0; j < nkwargs; j++) { + PyObject *key = PyTuple_GET_ITEM(kwnames, j); + int match; + + if (!PyUnicode_Check(key)) { + PyErr_SetString(PyExc_TypeError, + "keywords must be strings"); + return cleanreturn(0, &freelist); + } + + match = PySequence_Contains(kwtuple, key); + if (match <= 0) { + if (!match) { + PyErr_Format(PyExc_TypeError, + "'%U' is an invalid keyword " + "argument for this function", + key); + } + return cleanreturn(0, &freelist); + } + } + } + } + + return cleanreturn(1, &freelist); +} + +static int +vgetargskeywordsfast(PyObject *args, PyObject *keywords, + struct _PyArg_Parser *parser, va_list *p_va, int flags) +{ + PyObject **stack; + Py_ssize_t nargs; + + assert(args != NULL && PyTuple_Check(args)); + + stack = &PyTuple_GET_ITEM(args, 0); + nargs = PyTuple_GET_SIZE(args); + return vgetargskeywordsfast_impl(stack, nargs, keywords, NULL, + parser, p_va, flags); +} + + +static const char * skipitem(const char **p_format, va_list *p_va, int flags) { const char *format = *p_format; @@ -1658,10 +2229,8 @@ skipitem(const char **p_format, va_list *p_va, int flags) case 'I': /* int sized bitfield */ case 'l': /* long int */ case 'k': /* long int sized bitfield */ -#ifdef HAVE_LONG_LONG - case 'L': /* PY_LONG_LONG */ - case 'K': /* PY_LONG_LONG sized bitfield */ -#endif + case 'L': /* long long */ + case 'K': /* long long sized bitfield */ case 'n': /* Py_ssize_t */ case 'f': /* float */ case 'd': /* double */ @@ -1673,7 +2242,9 @@ skipitem(const char **p_format, va_list *p_va, int flags) case 'Y': /* string object */ case 'U': /* unicode string object */ { - (void) va_arg(*p_va, void *); + if (p_va != NULL) { + (void) va_arg(*p_va, void *); + } break; } @@ -1681,7 +2252,9 @@ skipitem(const char **p_format, va_list *p_va, int flags) case 'e': /* string with encoding */ { - (void) va_arg(*p_va, const char *); + if (p_va != NULL) { + (void) va_arg(*p_va, const char *); + } if (!(*format == 's' || *format == 't')) /* after 'e', only 's' and 't' is allowed */ goto err; @@ -1696,12 +2269,16 @@ skipitem(const char **p_format, va_list *p_va, int flags) case 'Z': /* unicode string or None */ case 'w': /* buffer, read-write */ { - (void) va_arg(*p_va, char **); + if (p_va != NULL) { + (void) va_arg(*p_va, char **); + } if (*format == '#') { - if (flags & FLAG_SIZE_T) - (void) va_arg(*p_va, Py_ssize_t *); - else - (void) va_arg(*p_va, int *); + if (p_va != NULL) { + if (flags & FLAG_SIZE_T) + (void) va_arg(*p_va, Py_ssize_t *); + else + (void) va_arg(*p_va, int *); + } format++; } else if ((c == 's' || c == 'z' || c == 'y') && *format == '*') { format++; @@ -1713,24 +2290,30 @@ skipitem(const char **p_format, va_list *p_va, int flags) { if (*format == '!') { format++; - (void) va_arg(*p_va, PyTypeObject*); - (void) va_arg(*p_va, PyObject **); + if (p_va != NULL) { + (void) va_arg(*p_va, PyTypeObject*); + (void) va_arg(*p_va, PyObject **); + } } else if (*format == '&') { typedef int (*converter)(PyObject *, void *); - (void) va_arg(*p_va, converter); - (void) va_arg(*p_va, void *); + if (p_va != NULL) { + (void) va_arg(*p_va, converter); + (void) va_arg(*p_va, void *); + } format++; } else { - (void) va_arg(*p_va, PyObject **); + if (p_va != NULL) { + (void) va_arg(*p_va, PyObject **); + } } break; } case '(': /* bypass tuple, not handled at all previously */ { - char *msg; + const char *msg; for (;;) { if (*format==')') break; @@ -1766,16 +2349,9 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m PyObject **o; va_list vargs; -#ifdef HAVE_STDARG_PROTOTYPES - va_start(vargs, max); -#else - va_start(vargs); -#endif - assert(min >= 0); assert(min <= max); if (!PyTuple_Check(args)) { - va_end(vargs); PyErr_SetString(PyExc_SystemError, "PyArg_UnpackTuple() argument list is not a tuple"); return 0; @@ -1793,9 +2369,10 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m "unpacked tuple should have %s%zd elements," " but has %zd", (min == max ? "" : "at least "), min, l); - va_end(vargs); return 0; } + if (l == 0) + return 1; if (l > max) { if (name != NULL) PyErr_Format( @@ -1808,9 +2385,14 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m "unpacked tuple should have %s%zd elements," " but has %zd", (min == max ? "" : "at most "), max, l); - va_end(vargs); return 0; } + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, max); +#else + va_start(vargs); +#endif for (i = 0; i < l; i++) { o = va_arg(vargs, PyObject **); *o = PyTuple_GET_ITEM(args, i); @@ -1860,6 +2442,19 @@ _PyArg_NoPositional(const char *funcname, PyObject *args) return 0; } +void +_PyArg_Fini(void) +{ + struct _PyArg_Parser *tmp, *s = static_arg_parsers; + while (s) { + tmp = s->next; + s->next = NULL; + parser_clear(s); + s = tmp; + } + static_arg_parsers = NULL; +} + #ifdef __cplusplus }; #endif diff --git a/Python/graminit.c b/Python/graminit.c index 8212b2a584..f2584e0a2a 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -204,11 +204,13 @@ static arc arcs_9_6[2] = { {32, 7}, {0, 6}, }; -static arc arcs_9_7[2] = { +static arc arcs_9_7[3] = { {30, 12}, {34, 3}, + {0, 7}, }; -static arc arcs_9_8[1] = { +static arc arcs_9_8[2] = { + {32, 13}, {0, 8}, }; static arc arcs_9_9[2] = { @@ -221,35 +223,39 @@ static arc arcs_9_10[3] = { {0, 10}, }; static arc arcs_9_11[3] = { - {30, 13}, - {32, 14}, + {30, 14}, + {32, 15}, {0, 11}, }; static arc arcs_9_12[3] = { {32, 7}, - {31, 15}, + {31, 16}, {0, 12}, }; -static arc arcs_9_13[2] = { - {32, 14}, +static arc arcs_9_13[1] = { {0, 13}, }; static arc arcs_9_14[2] = { - {30, 16}, + {32, 15}, + {0, 14}, +}; +static arc arcs_9_15[3] = { + {30, 17}, {34, 3}, + {0, 15}, }; -static arc arcs_9_15[1] = { +static arc arcs_9_16[1] = { {26, 6}, }; -static arc arcs_9_16[3] = { - {32, 14}, - {31, 17}, - {0, 16}, +static arc arcs_9_17[3] = { + {32, 15}, + {31, 18}, + {0, 17}, }; -static arc arcs_9_17[1] = { - {26, 13}, +static arc arcs_9_18[1] = { + {26, 14}, }; -static state states_9[18] = { +static state states_9[19] = { {3, arcs_9_0}, {3, arcs_9_1}, {3, arcs_9_2}, @@ -257,17 +263,18 @@ static state states_9[18] = { {1, arcs_9_4}, {4, arcs_9_5}, {2, arcs_9_6}, - {2, arcs_9_7}, - {1, arcs_9_8}, + {3, arcs_9_7}, + {2, arcs_9_8}, {2, arcs_9_9}, {3, arcs_9_10}, {3, arcs_9_11}, {3, arcs_9_12}, - {2, arcs_9_13}, + {1, arcs_9_13}, {2, arcs_9_14}, - {1, arcs_9_15}, - {3, arcs_9_16}, - {1, arcs_9_17}, + {3, arcs_9_15}, + {1, arcs_9_16}, + {3, arcs_9_17}, + {1, arcs_9_18}, }; static arc arcs_10_0[1] = { {23, 1}, @@ -319,11 +326,13 @@ static arc arcs_11_6[2] = { {32, 7}, {0, 6}, }; -static arc arcs_11_7[2] = { +static arc arcs_11_7[3] = { {36, 12}, {34, 3}, + {0, 7}, }; -static arc arcs_11_8[1] = { +static arc arcs_11_8[2] = { + {32, 13}, {0, 8}, }; static arc arcs_11_9[2] = { @@ -336,35 +345,39 @@ static arc arcs_11_10[3] = { {0, 10}, }; static arc arcs_11_11[3] = { - {36, 13}, - {32, 14}, + {36, 14}, + {32, 15}, {0, 11}, }; static arc arcs_11_12[3] = { {32, 7}, - {31, 15}, + {31, 16}, {0, 12}, }; -static arc arcs_11_13[2] = { - {32, 14}, +static arc arcs_11_13[1] = { {0, 13}, }; static arc arcs_11_14[2] = { - {36, 16}, + {32, 15}, + {0, 14}, +}; +static arc arcs_11_15[3] = { + {36, 17}, {34, 3}, + {0, 15}, }; -static arc arcs_11_15[1] = { +static arc arcs_11_16[1] = { {26, 6}, }; -static arc arcs_11_16[3] = { - {32, 14}, - {31, 17}, - {0, 16}, +static arc arcs_11_17[3] = { + {32, 15}, + {31, 18}, + {0, 17}, }; -static arc arcs_11_17[1] = { - {26, 13}, +static arc arcs_11_18[1] = { + {26, 14}, }; -static state states_11[18] = { +static state states_11[19] = { {3, arcs_11_0}, {3, arcs_11_1}, {3, arcs_11_2}, @@ -372,17 +385,18 @@ static state states_11[18] = { {1, arcs_11_4}, {4, arcs_11_5}, {2, arcs_11_6}, - {2, arcs_11_7}, - {1, arcs_11_8}, + {3, arcs_11_7}, + {2, arcs_11_8}, {2, arcs_11_9}, {3, arcs_11_10}, {3, arcs_11_11}, {3, arcs_11_12}, - {2, arcs_11_13}, + {1, arcs_11_13}, {2, arcs_11_14}, - {1, arcs_11_15}, - {3, arcs_11_16}, - {1, arcs_11_17}, + {3, arcs_11_15}, + {1, arcs_11_16}, + {3, arcs_11_17}, + {1, arcs_11_18}, }; static arc arcs_12_0[1] = { {23, 1}, @@ -445,54 +459,77 @@ static state states_15[2] = { static arc arcs_16_0[1] = { {47, 1}, }; -static arc arcs_16_1[3] = { +static arc arcs_16_1[4] = { {48, 2}, - {31, 3}, + {49, 3}, + {31, 4}, {0, 1}, }; -static arc arcs_16_2[2] = { - {49, 4}, - {9, 4}, +static arc arcs_16_2[1] = { + {0, 2}, }; static arc arcs_16_3[2] = { - {49, 5}, - {47, 5}, + {50, 2}, + {9, 2}, }; -static arc arcs_16_4[1] = { - {0, 4}, +static arc arcs_16_4[2] = { + {50, 5}, + {47, 5}, }; static arc arcs_16_5[2] = { - {31, 3}, + {31, 4}, {0, 5}, }; static state states_16[6] = { {1, arcs_16_0}, - {3, arcs_16_1}, - {2, arcs_16_2}, + {4, arcs_16_1}, + {1, arcs_16_2}, {2, arcs_16_3}, - {1, arcs_16_4}, + {2, arcs_16_4}, {2, arcs_16_5}, }; -static arc arcs_17_0[2] = { +static arc arcs_17_0[1] = { + {27, 1}, +}; +static arc arcs_17_1[1] = { + {26, 2}, +}; +static arc arcs_17_2[2] = { + {31, 3}, + {0, 2}, +}; +static arc arcs_17_3[1] = { + {26, 4}, +}; +static arc arcs_17_4[1] = { + {0, 4}, +}; +static state states_17[5] = { + {1, arcs_17_0}, + {1, arcs_17_1}, + {2, arcs_17_2}, + {1, arcs_17_3}, + {1, arcs_17_4}, +}; +static arc arcs_18_0[2] = { {26, 1}, - {50, 1}, + {51, 1}, }; -static arc arcs_17_1[2] = { +static arc arcs_18_1[2] = { {32, 2}, {0, 1}, }; -static arc arcs_17_2[3] = { +static arc arcs_18_2[3] = { {26, 1}, - {50, 1}, + {51, 1}, {0, 2}, }; -static state states_17[3] = { - {2, arcs_17_0}, - {2, arcs_17_1}, - {3, arcs_17_2}, +static state states_18[3] = { + {2, arcs_18_0}, + {2, arcs_18_1}, + {3, arcs_18_2}, }; -static arc arcs_18_0[13] = { - {51, 1}, +static arc arcs_19_0[13] = { {52, 1}, {53, 1}, {54, 1}, @@ -505,60 +542,51 @@ static arc arcs_18_0[13] = { {61, 1}, {62, 1}, {63, 1}, -}; -static arc arcs_18_1[1] = { - {0, 1}, -}; -static state states_18[2] = { - {13, arcs_18_0}, - {1, arcs_18_1}, -}; -static arc arcs_19_0[1] = { {64, 1}, }; static arc arcs_19_1[1] = { - {65, 2}, -}; -static arc arcs_19_2[1] = { - {0, 2}, + {0, 1}, }; -static state states_19[3] = { - {1, arcs_19_0}, +static state states_19[2] = { + {13, arcs_19_0}, {1, arcs_19_1}, - {1, arcs_19_2}, }; static arc arcs_20_0[1] = { - {66, 1}, + {65, 1}, }; static arc arcs_20_1[1] = { - {0, 1}, + {66, 2}, +}; +static arc arcs_20_2[1] = { + {0, 2}, }; -static state states_20[2] = { +static state states_20[3] = { {1, arcs_20_0}, {1, arcs_20_1}, + {1, arcs_20_2}, }; -static arc arcs_21_0[5] = { +static arc arcs_21_0[1] = { {67, 1}, - {68, 1}, - {69, 1}, - {70, 1}, - {71, 1}, }; static arc arcs_21_1[1] = { {0, 1}, }; static state states_21[2] = { - {5, arcs_21_0}, + {1, arcs_21_0}, {1, arcs_21_1}, }; -static arc arcs_22_0[1] = { +static arc arcs_22_0[5] = { + {68, 1}, + {69, 1}, + {70, 1}, + {71, 1}, {72, 1}, }; static arc arcs_22_1[1] = { {0, 1}, }; static state states_22[2] = { - {1, arcs_22_0}, + {5, arcs_22_0}, {1, arcs_22_1}, }; static arc arcs_23_0[1] = { @@ -574,142 +602,133 @@ static state states_23[2] = { static arc arcs_24_0[1] = { {74, 1}, }; -static arc arcs_24_1[2] = { - {9, 2}, +static arc arcs_24_1[1] = { {0, 1}, }; -static arc arcs_24_2[1] = { - {0, 2}, -}; -static state states_24[3] = { +static state states_24[2] = { {1, arcs_24_0}, - {2, arcs_24_1}, - {1, arcs_24_2}, + {1, arcs_24_1}, }; static arc arcs_25_0[1] = { - {49, 1}, + {75, 1}, }; -static arc arcs_25_1[1] = { +static arc arcs_25_1[2] = { + {9, 2}, {0, 1}, }; -static state states_25[2] = { +static arc arcs_25_2[1] = { + {0, 2}, +}; +static state states_25[3] = { {1, arcs_25_0}, - {1, arcs_25_1}, + {2, arcs_25_1}, + {1, arcs_25_2}, }; static arc arcs_26_0[1] = { - {75, 1}, + {50, 1}, }; -static arc arcs_26_1[2] = { +static arc arcs_26_1[1] = { + {0, 1}, +}; +static state states_26[2] = { + {1, arcs_26_0}, + {1, arcs_26_1}, +}; +static arc arcs_27_0[1] = { + {76, 1}, +}; +static arc arcs_27_1[2] = { {26, 2}, {0, 1}, }; -static arc arcs_26_2[2] = { - {76, 3}, +static arc arcs_27_2[2] = { + {77, 3}, {0, 2}, }; -static arc arcs_26_3[1] = { +static arc arcs_27_3[1] = { {26, 4}, }; -static arc arcs_26_4[1] = { +static arc arcs_27_4[1] = { {0, 4}, }; -static state states_26[5] = { - {1, arcs_26_0}, - {2, arcs_26_1}, - {2, arcs_26_2}, - {1, arcs_26_3}, - {1, arcs_26_4}, +static state states_27[5] = { + {1, arcs_27_0}, + {2, arcs_27_1}, + {2, arcs_27_2}, + {1, arcs_27_3}, + {1, arcs_27_4}, }; -static arc arcs_27_0[2] = { - {77, 1}, +static arc arcs_28_0[2] = { {78, 1}, + {79, 1}, }; -static arc arcs_27_1[1] = { +static arc arcs_28_1[1] = { {0, 1}, }; -static state states_27[2] = { - {2, arcs_27_0}, - {1, arcs_27_1}, +static state states_28[2] = { + {2, arcs_28_0}, + {1, arcs_28_1}, }; -static arc arcs_28_0[1] = { - {79, 1}, +static arc arcs_29_0[1] = { + {80, 1}, }; -static arc arcs_28_1[1] = { - {80, 2}, +static arc arcs_29_1[1] = { + {81, 2}, }; -static arc arcs_28_2[1] = { +static arc arcs_29_2[1] = { {0, 2}, }; -static state states_28[3] = { - {1, arcs_28_0}, - {1, arcs_28_1}, - {1, arcs_28_2}, +static state states_29[3] = { + {1, arcs_29_0}, + {1, arcs_29_1}, + {1, arcs_29_2}, }; -static arc arcs_29_0[1] = { - {76, 1}, +static arc arcs_30_0[1] = { + {77, 1}, }; -static arc arcs_29_1[3] = { - {81, 2}, +static arc arcs_30_1[3] = { {82, 2}, + {83, 2}, {12, 3}, }; -static arc arcs_29_2[4] = { - {81, 2}, +static arc arcs_30_2[4] = { {82, 2}, + {83, 2}, {12, 3}, - {79, 4}, + {80, 4}, }; -static arc arcs_29_3[1] = { - {79, 4}, +static arc arcs_30_3[1] = { + {80, 4}, }; -static arc arcs_29_4[3] = { +static arc arcs_30_4[3] = { {33, 5}, {13, 6}, - {83, 5}, + {84, 5}, }; -static arc arcs_29_5[1] = { +static arc arcs_30_5[1] = { {0, 5}, }; -static arc arcs_29_6[1] = { - {83, 7}, +static arc arcs_30_6[1] = { + {84, 7}, }; -static arc arcs_29_7[1] = { +static arc arcs_30_7[1] = { {15, 5}, }; -static state states_29[8] = { - {1, arcs_29_0}, - {3, arcs_29_1}, - {4, arcs_29_2}, - {1, arcs_29_3}, - {3, arcs_29_4}, - {1, arcs_29_5}, - {1, arcs_29_6}, - {1, arcs_29_7}, -}; -static arc arcs_30_0[1] = { - {23, 1}, -}; -static arc arcs_30_1[2] = { - {85, 2}, - {0, 1}, -}; -static arc arcs_30_2[1] = { - {23, 3}, -}; -static arc arcs_30_3[1] = { - {0, 3}, -}; -static state states_30[4] = { +static state states_30[8] = { {1, arcs_30_0}, - {2, arcs_30_1}, - {1, arcs_30_2}, + {3, arcs_30_1}, + {4, arcs_30_2}, {1, arcs_30_3}, + {3, arcs_30_4}, + {1, arcs_30_5}, + {1, arcs_30_6}, + {1, arcs_30_7}, }; static arc arcs_31_0[1] = { - {12, 1}, + {23, 1}, }; static arc arcs_31_1[2] = { - {85, 2}, + {86, 2}, {0, 1}, }; static arc arcs_31_2[1] = { @@ -725,37 +744,45 @@ static state states_31[4] = { {1, arcs_31_3}, }; static arc arcs_32_0[1] = { - {84, 1}, + {12, 1}, }; static arc arcs_32_1[2] = { - {32, 2}, + {86, 2}, {0, 1}, }; -static arc arcs_32_2[2] = { - {84, 1}, - {0, 2}, +static arc arcs_32_2[1] = { + {23, 3}, }; -static state states_32[3] = { +static arc arcs_32_3[1] = { + {0, 3}, +}; +static state states_32[4] = { {1, arcs_32_0}, {2, arcs_32_1}, - {2, arcs_32_2}, + {1, arcs_32_2}, + {1, arcs_32_3}, }; static arc arcs_33_0[1] = { - {86, 1}, + {85, 1}, }; static arc arcs_33_1[2] = { - {32, 0}, + {32, 2}, {0, 1}, }; -static state states_33[2] = { +static arc arcs_33_2[2] = { + {85, 1}, + {0, 2}, +}; +static state states_33[3] = { {1, arcs_33_0}, {2, arcs_33_1}, + {2, arcs_33_2}, }; static arc arcs_34_0[1] = { - {23, 1}, + {87, 1}, }; static arc arcs_34_1[2] = { - {81, 0}, + {32, 0}, {0, 1}, }; static state states_34[2] = { @@ -763,19 +790,15 @@ static state states_34[2] = { {2, arcs_34_1}, }; static arc arcs_35_0[1] = { - {87, 1}, -}; -static arc arcs_35_1[1] = { - {23, 2}, + {23, 1}, }; -static arc arcs_35_2[2] = { - {32, 1}, - {0, 2}, +static arc arcs_35_1[2] = { + {82, 0}, + {0, 1}, }; -static state states_35[3] = { +static state states_35[2] = { {1, arcs_35_0}, - {1, arcs_35_1}, - {2, arcs_35_2}, + {2, arcs_35_1}, }; static arc arcs_36_0[1] = { {88, 1}, @@ -796,97 +819,76 @@ static arc arcs_37_0[1] = { {89, 1}, }; static arc arcs_37_1[1] = { - {26, 2}, + {23, 2}, }; static arc arcs_37_2[2] = { + {32, 1}, + {0, 2}, +}; +static state states_37[3] = { + {1, arcs_37_0}, + {1, arcs_37_1}, + {2, arcs_37_2}, +}; +static arc arcs_38_0[1] = { + {90, 1}, +}; +static arc arcs_38_1[1] = { + {26, 2}, +}; +static arc arcs_38_2[2] = { {32, 3}, {0, 2}, }; -static arc arcs_37_3[1] = { +static arc arcs_38_3[1] = { {26, 4}, }; -static arc arcs_37_4[1] = { +static arc arcs_38_4[1] = { {0, 4}, }; -static state states_37[5] = { - {1, arcs_37_0}, - {1, arcs_37_1}, - {2, arcs_37_2}, - {1, arcs_37_3}, - {1, arcs_37_4}, +static state states_38[5] = { + {1, arcs_38_0}, + {1, arcs_38_1}, + {2, arcs_38_2}, + {1, arcs_38_3}, + {1, arcs_38_4}, }; -static arc arcs_38_0[9] = { - {90, 1}, +static arc arcs_39_0[9] = { {91, 1}, {92, 1}, {93, 1}, {94, 1}, + {95, 1}, {19, 1}, {18, 1}, {17, 1}, - {95, 1}, + {96, 1}, }; -static arc arcs_38_1[1] = { +static arc arcs_39_1[1] = { {0, 1}, }; -static state states_38[2] = { - {9, arcs_38_0}, - {1, arcs_38_1}, +static state states_39[2] = { + {9, arcs_39_0}, + {1, arcs_39_1}, }; -static arc arcs_39_0[1] = { +static arc arcs_40_0[1] = { {21, 1}, }; -static arc arcs_39_1[3] = { +static arc arcs_40_1[3] = { {19, 2}, - {94, 2}, - {92, 2}, -}; -static arc arcs_39_2[1] = { - {0, 2}, -}; -static state states_39[3] = { - {1, arcs_39_0}, - {3, arcs_39_1}, - {1, arcs_39_2}, -}; -static arc arcs_40_0[1] = { - {96, 1}, -}; -static arc arcs_40_1[1] = { - {26, 2}, + {95, 2}, + {93, 2}, }; static arc arcs_40_2[1] = { - {27, 3}, -}; -static arc arcs_40_3[1] = { - {28, 4}, -}; -static arc arcs_40_4[3] = { - {97, 1}, - {98, 5}, - {0, 4}, -}; -static arc arcs_40_5[1] = { - {27, 6}, -}; -static arc arcs_40_6[1] = { - {28, 7}, -}; -static arc arcs_40_7[1] = { - {0, 7}, + {0, 2}, }; -static state states_40[8] = { +static state states_40[3] = { {1, arcs_40_0}, - {1, arcs_40_1}, + {3, arcs_40_1}, {1, arcs_40_2}, - {1, arcs_40_3}, - {3, arcs_40_4}, - {1, arcs_40_5}, - {1, arcs_40_6}, - {1, arcs_40_7}, }; static arc arcs_41_0[1] = { - {99, 1}, + {97, 1}, }; static arc arcs_41_1[1] = { {26, 2}, @@ -897,8 +899,9 @@ static arc arcs_41_2[1] = { static arc arcs_41_3[1] = { {28, 4}, }; -static arc arcs_41_4[2] = { - {98, 5}, +static arc arcs_41_4[3] = { + {98, 1}, + {99, 5}, {0, 4}, }; static arc arcs_41_5[1] = { @@ -915,7 +918,7 @@ static state states_41[8] = { {1, arcs_41_1}, {1, arcs_41_2}, {1, arcs_41_3}, - {2, arcs_41_4}, + {3, arcs_41_4}, {1, arcs_41_5}, {1, arcs_41_6}, {1, arcs_41_7}, @@ -924,258 +927,270 @@ static arc arcs_42_0[1] = { {100, 1}, }; static arc arcs_42_1[1] = { - {65, 2}, + {26, 2}, }; static arc arcs_42_2[1] = { - {101, 3}, + {27, 3}, }; static arc arcs_42_3[1] = { - {9, 4}, + {28, 4}, }; -static arc arcs_42_4[1] = { - {27, 5}, +static arc arcs_42_4[2] = { + {99, 5}, + {0, 4}, }; static arc arcs_42_5[1] = { - {28, 6}, + {27, 6}, }; -static arc arcs_42_6[2] = { - {98, 7}, - {0, 6}, +static arc arcs_42_6[1] = { + {28, 7}, }; static arc arcs_42_7[1] = { - {27, 8}, -}; -static arc arcs_42_8[1] = { - {28, 9}, -}; -static arc arcs_42_9[1] = { - {0, 9}, + {0, 7}, }; -static state states_42[10] = { +static state states_42[8] = { {1, arcs_42_0}, {1, arcs_42_1}, {1, arcs_42_2}, {1, arcs_42_3}, - {1, arcs_42_4}, + {2, arcs_42_4}, {1, arcs_42_5}, - {2, arcs_42_6}, + {1, arcs_42_6}, {1, arcs_42_7}, - {1, arcs_42_8}, - {1, arcs_42_9}, }; static arc arcs_43_0[1] = { - {102, 1}, + {101, 1}, }; static arc arcs_43_1[1] = { - {27, 2}, + {66, 2}, }; static arc arcs_43_2[1] = { - {28, 3}, + {102, 3}, }; -static arc arcs_43_3[2] = { - {103, 4}, - {104, 5}, +static arc arcs_43_3[1] = { + {9, 4}, }; static arc arcs_43_4[1] = { - {27, 6}, + {27, 5}, }; static arc arcs_43_5[1] = { - {27, 7}, + {28, 6}, }; -static arc arcs_43_6[1] = { - {28, 8}, +static arc arcs_43_6[2] = { + {99, 7}, + {0, 6}, }; static arc arcs_43_7[1] = { - {28, 9}, + {27, 8}, }; -static arc arcs_43_8[4] = { - {103, 4}, - {98, 10}, - {104, 5}, - {0, 8}, +static arc arcs_43_8[1] = { + {28, 9}, }; static arc arcs_43_9[1] = { {0, 9}, }; -static arc arcs_43_10[1] = { - {27, 11}, -}; -static arc arcs_43_11[1] = { - {28, 12}, -}; -static arc arcs_43_12[2] = { - {104, 5}, - {0, 12}, -}; -static state states_43[13] = { +static state states_43[10] = { {1, arcs_43_0}, {1, arcs_43_1}, {1, arcs_43_2}, - {2, arcs_43_3}, + {1, arcs_43_3}, {1, arcs_43_4}, {1, arcs_43_5}, - {1, arcs_43_6}, + {2, arcs_43_6}, {1, arcs_43_7}, - {4, arcs_43_8}, + {1, arcs_43_8}, {1, arcs_43_9}, - {1, arcs_43_10}, - {1, arcs_43_11}, - {2, arcs_43_12}, }; static arc arcs_44_0[1] = { - {105, 1}, + {103, 1}, }; static arc arcs_44_1[1] = { - {106, 2}, + {27, 2}, }; -static arc arcs_44_2[2] = { - {32, 1}, - {27, 3}, +static arc arcs_44_2[1] = { + {28, 3}, }; -static arc arcs_44_3[1] = { - {28, 4}, +static arc arcs_44_3[2] = { + {104, 4}, + {105, 5}, }; static arc arcs_44_4[1] = { - {0, 4}, + {27, 6}, +}; +static arc arcs_44_5[1] = { + {27, 7}, +}; +static arc arcs_44_6[1] = { + {28, 8}, +}; +static arc arcs_44_7[1] = { + {28, 9}, +}; +static arc arcs_44_8[4] = { + {104, 4}, + {99, 10}, + {105, 5}, + {0, 8}, +}; +static arc arcs_44_9[1] = { + {0, 9}, +}; +static arc arcs_44_10[1] = { + {27, 11}, +}; +static arc arcs_44_11[1] = { + {28, 12}, +}; +static arc arcs_44_12[2] = { + {105, 5}, + {0, 12}, }; -static state states_44[5] = { +static state states_44[13] = { {1, arcs_44_0}, {1, arcs_44_1}, - {2, arcs_44_2}, - {1, arcs_44_3}, + {1, arcs_44_2}, + {2, arcs_44_3}, {1, arcs_44_4}, + {1, arcs_44_5}, + {1, arcs_44_6}, + {1, arcs_44_7}, + {4, arcs_44_8}, + {1, arcs_44_9}, + {1, arcs_44_10}, + {1, arcs_44_11}, + {2, arcs_44_12}, }; static arc arcs_45_0[1] = { - {26, 1}, + {106, 1}, }; -static arc arcs_45_1[2] = { - {85, 2}, - {0, 1}, +static arc arcs_45_1[1] = { + {107, 2}, }; -static arc arcs_45_2[1] = { - {107, 3}, +static arc arcs_45_2[2] = { + {32, 1}, + {27, 3}, }; static arc arcs_45_3[1] = { - {0, 3}, + {28, 4}, +}; +static arc arcs_45_4[1] = { + {0, 4}, }; -static state states_45[4] = { +static state states_45[5] = { {1, arcs_45_0}, - {2, arcs_45_1}, - {1, arcs_45_2}, + {1, arcs_45_1}, + {2, arcs_45_2}, {1, arcs_45_3}, + {1, arcs_45_4}, }; static arc arcs_46_0[1] = { - {108, 1}, + {26, 1}, }; static arc arcs_46_1[2] = { - {26, 2}, + {86, 2}, {0, 1}, }; -static arc arcs_46_2[2] = { - {85, 3}, - {0, 2}, +static arc arcs_46_2[1] = { + {108, 3}, }; static arc arcs_46_3[1] = { - {23, 4}, -}; -static arc arcs_46_4[1] = { - {0, 4}, + {0, 3}, }; -static state states_46[5] = { +static state states_46[4] = { {1, arcs_46_0}, {2, arcs_46_1}, - {2, arcs_46_2}, + {1, arcs_46_2}, {1, arcs_46_3}, - {1, arcs_46_4}, }; -static arc arcs_47_0[2] = { - {3, 1}, - {2, 2}, +static arc arcs_47_0[1] = { + {109, 1}, }; -static arc arcs_47_1[1] = { +static arc arcs_47_1[2] = { + {26, 2}, {0, 1}, }; -static arc arcs_47_2[1] = { - {109, 3}, +static arc arcs_47_2[2] = { + {86, 3}, + {0, 2}, }; static arc arcs_47_3[1] = { - {6, 4}, + {23, 4}, }; -static arc arcs_47_4[2] = { - {6, 4}, - {110, 1}, +static arc arcs_47_4[1] = { + {0, 4}, }; static state states_47[5] = { - {2, arcs_47_0}, - {1, arcs_47_1}, - {1, arcs_47_2}, + {1, arcs_47_0}, + {2, arcs_47_1}, + {2, arcs_47_2}, {1, arcs_47_3}, - {2, arcs_47_4}, + {1, arcs_47_4}, }; static arc arcs_48_0[2] = { - {111, 1}, - {112, 2}, + {3, 1}, + {2, 2}, }; -static arc arcs_48_1[2] = { - {96, 3}, +static arc arcs_48_1[1] = { {0, 1}, }; static arc arcs_48_2[1] = { - {0, 2}, + {110, 3}, }; static arc arcs_48_3[1] = { - {111, 4}, -}; -static arc arcs_48_4[1] = { - {98, 5}, + {6, 4}, }; -static arc arcs_48_5[1] = { - {26, 2}, +static arc arcs_48_4[2] = { + {6, 4}, + {111, 1}, }; -static state states_48[6] = { +static state states_48[5] = { {2, arcs_48_0}, - {2, arcs_48_1}, + {1, arcs_48_1}, {1, arcs_48_2}, {1, arcs_48_3}, - {1, arcs_48_4}, - {1, arcs_48_5}, + {2, arcs_48_4}, }; static arc arcs_49_0[2] = { - {111, 1}, - {114, 1}, + {112, 1}, + {113, 2}, }; -static arc arcs_49_1[1] = { +static arc arcs_49_1[2] = { + {97, 3}, {0, 1}, }; -static state states_49[2] = { - {2, arcs_49_0}, - {1, arcs_49_1}, +static arc arcs_49_2[1] = { + {0, 2}, }; -static arc arcs_50_0[1] = { - {115, 1}, +static arc arcs_49_3[1] = { + {112, 4}, }; -static arc arcs_50_1[2] = { - {35, 2}, - {27, 3}, +static arc arcs_49_4[1] = { + {99, 5}, }; -static arc arcs_50_2[1] = { - {27, 3}, +static arc arcs_49_5[1] = { + {26, 2}, }; -static arc arcs_50_3[1] = { - {26, 4}, +static state states_49[6] = { + {2, arcs_49_0}, + {2, arcs_49_1}, + {1, arcs_49_2}, + {1, arcs_49_3}, + {1, arcs_49_4}, + {1, arcs_49_5}, +}; +static arc arcs_50_0[2] = { + {112, 1}, + {115, 1}, }; -static arc arcs_50_4[1] = { - {0, 4}, +static arc arcs_50_1[1] = { + {0, 1}, }; -static state states_50[5] = { - {1, arcs_50_0}, - {2, arcs_50_1}, - {1, arcs_50_2}, - {1, arcs_50_3}, - {1, arcs_50_4}, +static state states_50[2] = { + {2, arcs_50_0}, + {1, arcs_50_1}, }; static arc arcs_51_0[1] = { - {115, 1}, + {116, 1}, }; static arc arcs_51_1[2] = { {35, 2}, @@ -1185,7 +1200,7 @@ static arc arcs_51_2[1] = { {27, 3}, }; static arc arcs_51_3[1] = { - {113, 4}, + {26, 4}, }; static arc arcs_51_4[1] = { {0, 4}, @@ -1201,108 +1216,120 @@ static arc arcs_52_0[1] = { {116, 1}, }; static arc arcs_52_1[2] = { - {117, 0}, - {0, 1}, + {35, 2}, + {27, 3}, }; -static state states_52[2] = { +static arc arcs_52_2[1] = { + {27, 3}, +}; +static arc arcs_52_3[1] = { + {114, 4}, +}; +static arc arcs_52_4[1] = { + {0, 4}, +}; +static state states_52[5] = { {1, arcs_52_0}, {2, arcs_52_1}, + {1, arcs_52_2}, + {1, arcs_52_3}, + {1, arcs_52_4}, }; static arc arcs_53_0[1] = { - {118, 1}, + {117, 1}, }; static arc arcs_53_1[2] = { - {119, 0}, + {118, 0}, {0, 1}, }; static state states_53[2] = { {1, arcs_53_0}, {2, arcs_53_1}, }; -static arc arcs_54_0[2] = { - {120, 1}, - {121, 2}, +static arc arcs_54_0[1] = { + {119, 1}, +}; +static arc arcs_54_1[2] = { + {120, 0}, + {0, 1}, }; -static arc arcs_54_1[1] = { - {118, 2}, +static state states_54[2] = { + {1, arcs_54_0}, + {2, arcs_54_1}, }; -static arc arcs_54_2[1] = { +static arc arcs_55_0[2] = { + {121, 1}, + {122, 2}, +}; +static arc arcs_55_1[1] = { + {119, 2}, +}; +static arc arcs_55_2[1] = { {0, 2}, }; -static state states_54[3] = { - {2, arcs_54_0}, - {1, arcs_54_1}, - {1, arcs_54_2}, +static state states_55[3] = { + {2, arcs_55_0}, + {1, arcs_55_1}, + {1, arcs_55_2}, }; -static arc arcs_55_0[1] = { - {107, 1}, +static arc arcs_56_0[1] = { + {108, 1}, }; -static arc arcs_55_1[2] = { - {122, 0}, +static arc arcs_56_1[2] = { + {123, 0}, {0, 1}, }; -static state states_55[2] = { - {1, arcs_55_0}, - {2, arcs_55_1}, +static state states_56[2] = { + {1, arcs_56_0}, + {2, arcs_56_1}, }; -static arc arcs_56_0[10] = { - {123, 1}, +static arc arcs_57_0[10] = { {124, 1}, {125, 1}, {126, 1}, {127, 1}, {128, 1}, {129, 1}, - {101, 1}, - {120, 2}, - {130, 3}, + {130, 1}, + {102, 1}, + {121, 2}, + {131, 3}, }; -static arc arcs_56_1[1] = { +static arc arcs_57_1[1] = { {0, 1}, }; -static arc arcs_56_2[1] = { - {101, 1}, +static arc arcs_57_2[1] = { + {102, 1}, }; -static arc arcs_56_3[2] = { - {120, 1}, +static arc arcs_57_3[2] = { + {121, 1}, {0, 3}, }; -static state states_56[4] = { - {10, arcs_56_0}, - {1, arcs_56_1}, - {1, arcs_56_2}, - {2, arcs_56_3}, -}; -static arc arcs_57_0[1] = { - {33, 1}, -}; -static arc arcs_57_1[1] = { - {107, 2}, -}; -static arc arcs_57_2[1] = { - {0, 2}, -}; -static state states_57[3] = { - {1, arcs_57_0}, +static state states_57[4] = { + {10, arcs_57_0}, {1, arcs_57_1}, {1, arcs_57_2}, + {2, arcs_57_3}, }; static arc arcs_58_0[1] = { - {131, 1}, + {33, 1}, }; -static arc arcs_58_1[2] = { - {132, 0}, - {0, 1}, +static arc arcs_58_1[1] = { + {108, 2}, }; -static state states_58[2] = { +static arc arcs_58_2[1] = { + {0, 2}, +}; +static state states_58[3] = { {1, arcs_58_0}, - {2, arcs_58_1}, + {1, arcs_58_1}, + {1, arcs_58_2}, }; static arc arcs_59_0[1] = { - {133, 1}, + {132, 1}, }; static arc arcs_59_1[2] = { - {134, 0}, + {133, 0}, {0, 1}, }; static state states_59[2] = { @@ -1310,10 +1337,10 @@ static state states_59[2] = { {2, arcs_59_1}, }; static arc arcs_60_0[1] = { - {135, 1}, + {134, 1}, }; static arc arcs_60_1[2] = { - {136, 0}, + {135, 0}, {0, 1}, }; static state states_60[2] = { @@ -1321,23 +1348,22 @@ static state states_60[2] = { {2, arcs_60_1}, }; static arc arcs_61_0[1] = { - {137, 1}, + {136, 1}, }; -static arc arcs_61_1[3] = { - {138, 0}, - {139, 0}, +static arc arcs_61_1[2] = { + {137, 0}, {0, 1}, }; static state states_61[2] = { {1, arcs_61_0}, - {3, arcs_61_1}, + {2, arcs_61_1}, }; static arc arcs_62_0[1] = { - {140, 1}, + {138, 1}, }; static arc arcs_62_1[3] = { - {141, 0}, - {142, 0}, + {139, 0}, + {140, 0}, {0, 1}, }; static state states_62[2] = { @@ -1345,528 +1371,545 @@ static state states_62[2] = { {3, arcs_62_1}, }; static arc arcs_63_0[1] = { - {143, 1}, + {141, 1}, +}; +static arc arcs_63_1[3] = { + {142, 0}, + {143, 0}, + {0, 1}, +}; +static state states_63[2] = { + {1, arcs_63_0}, + {3, arcs_63_1}, }; -static arc arcs_63_1[6] = { +static arc arcs_64_0[1] = { + {144, 1}, +}; +static arc arcs_64_1[6] = { {33, 0}, {11, 0}, - {144, 0}, {145, 0}, {146, 0}, + {147, 0}, {0, 1}, }; -static state states_63[2] = { - {1, arcs_63_0}, - {6, arcs_63_1}, +static state states_64[2] = { + {1, arcs_64_0}, + {6, arcs_64_1}, }; -static arc arcs_64_0[4] = { - {141, 1}, +static arc arcs_65_0[4] = { {142, 1}, - {147, 1}, - {148, 2}, + {143, 1}, + {148, 1}, + {149, 2}, }; -static arc arcs_64_1[1] = { - {143, 2}, +static arc arcs_65_1[1] = { + {144, 2}, }; -static arc arcs_64_2[1] = { +static arc arcs_65_2[1] = { {0, 2}, }; -static state states_64[3] = { - {4, arcs_64_0}, - {1, arcs_64_1}, - {1, arcs_64_2}, +static state states_65[3] = { + {4, arcs_65_0}, + {1, arcs_65_1}, + {1, arcs_65_2}, }; -static arc arcs_65_0[1] = { - {149, 1}, +static arc arcs_66_0[1] = { + {150, 1}, }; -static arc arcs_65_1[2] = { +static arc arcs_66_1[2] = { {34, 2}, {0, 1}, }; -static arc arcs_65_2[1] = { - {143, 3}, +static arc arcs_66_2[1] = { + {144, 3}, }; -static arc arcs_65_3[1] = { +static arc arcs_66_3[1] = { {0, 3}, }; -static state states_65[4] = { - {1, arcs_65_0}, - {2, arcs_65_1}, - {1, arcs_65_2}, - {1, arcs_65_3}, -}; -static arc arcs_66_0[2] = { - {150, 1}, - {151, 2}, +static state states_66[4] = { + {1, arcs_66_0}, + {2, arcs_66_1}, + {1, arcs_66_2}, + {1, arcs_66_3}, }; -static arc arcs_66_1[1] = { - {151, 2}, +static arc arcs_67_0[2] = { + {151, 1}, + {152, 2}, }; -static arc arcs_66_2[2] = { +static arc arcs_67_1[1] = { {152, 2}, +}; +static arc arcs_67_2[2] = { + {153, 2}, {0, 2}, }; -static state states_66[3] = { - {2, arcs_66_0}, - {1, arcs_66_1}, - {2, arcs_66_2}, +static state states_67[3] = { + {2, arcs_67_0}, + {1, arcs_67_1}, + {2, arcs_67_2}, }; -static arc arcs_67_0[10] = { +static arc arcs_68_0[10] = { {13, 1}, - {154, 2}, - {156, 3}, + {155, 2}, + {157, 3}, {23, 4}, - {159, 4}, - {160, 5}, - {82, 4}, - {161, 4}, + {160, 4}, + {161, 5}, + {83, 4}, {162, 4}, {163, 4}, + {164, 4}, }; -static arc arcs_67_1[3] = { - {49, 6}, - {153, 6}, +static arc arcs_68_1[3] = { + {50, 6}, + {154, 6}, {15, 4}, }; -static arc arcs_67_2[2] = { - {153, 7}, - {155, 4}, +static arc arcs_68_2[2] = { + {154, 7}, + {156, 4}, }; -static arc arcs_67_3[2] = { - {157, 8}, - {158, 4}, +static arc arcs_68_3[2] = { + {158, 8}, + {159, 4}, }; -static arc arcs_67_4[1] = { +static arc arcs_68_4[1] = { {0, 4}, }; -static arc arcs_67_5[2] = { - {160, 5}, +static arc arcs_68_5[2] = { + {161, 5}, {0, 5}, }; -static arc arcs_67_6[1] = { +static arc arcs_68_6[1] = { {15, 4}, }; -static arc arcs_67_7[1] = { - {155, 4}, +static arc arcs_68_7[1] = { + {156, 4}, }; -static arc arcs_67_8[1] = { - {158, 4}, +static arc arcs_68_8[1] = { + {159, 4}, }; -static state states_67[9] = { - {10, arcs_67_0}, - {3, arcs_67_1}, - {2, arcs_67_2}, - {2, arcs_67_3}, - {1, arcs_67_4}, - {2, arcs_67_5}, - {1, arcs_67_6}, - {1, arcs_67_7}, - {1, arcs_67_8}, -}; -static arc arcs_68_0[2] = { +static state states_68[9] = { + {10, arcs_68_0}, + {3, arcs_68_1}, + {2, arcs_68_2}, + {2, arcs_68_3}, + {1, arcs_68_4}, + {2, arcs_68_5}, + {1, arcs_68_6}, + {1, arcs_68_7}, + {1, arcs_68_8}, +}; +static arc arcs_69_0[2] = { {26, 1}, - {50, 1}, + {51, 1}, }; -static arc arcs_68_1[3] = { - {164, 2}, +static arc arcs_69_1[3] = { + {165, 2}, {32, 3}, {0, 1}, }; -static arc arcs_68_2[1] = { +static arc arcs_69_2[1] = { {0, 2}, }; -static arc arcs_68_3[3] = { +static arc arcs_69_3[3] = { {26, 4}, - {50, 4}, + {51, 4}, {0, 3}, }; -static arc arcs_68_4[2] = { +static arc arcs_69_4[2] = { {32, 3}, {0, 4}, }; -static state states_68[5] = { - {2, arcs_68_0}, - {3, arcs_68_1}, - {1, arcs_68_2}, - {3, arcs_68_3}, - {2, arcs_68_4}, +static state states_69[5] = { + {2, arcs_69_0}, + {3, arcs_69_1}, + {1, arcs_69_2}, + {3, arcs_69_3}, + {2, arcs_69_4}, }; -static arc arcs_69_0[3] = { +static arc arcs_70_0[3] = { {13, 1}, - {154, 2}, - {81, 3}, + {155, 2}, + {82, 3}, }; -static arc arcs_69_1[2] = { +static arc arcs_70_1[2] = { {14, 4}, {15, 5}, }; -static arc arcs_69_2[1] = { - {165, 6}, +static arc arcs_70_2[1] = { + {166, 6}, }; -static arc arcs_69_3[1] = { +static arc arcs_70_3[1] = { {23, 5}, }; -static arc arcs_69_4[1] = { +static arc arcs_70_4[1] = { {15, 5}, }; -static arc arcs_69_5[1] = { +static arc arcs_70_5[1] = { {0, 5}, }; -static arc arcs_69_6[1] = { - {155, 5}, +static arc arcs_70_6[1] = { + {156, 5}, }; -static state states_69[7] = { - {3, arcs_69_0}, - {2, arcs_69_1}, - {1, arcs_69_2}, - {1, arcs_69_3}, - {1, arcs_69_4}, - {1, arcs_69_5}, - {1, arcs_69_6}, +static state states_70[7] = { + {3, arcs_70_0}, + {2, arcs_70_1}, + {1, arcs_70_2}, + {1, arcs_70_3}, + {1, arcs_70_4}, + {1, arcs_70_5}, + {1, arcs_70_6}, }; -static arc arcs_70_0[1] = { - {166, 1}, +static arc arcs_71_0[1] = { + {167, 1}, }; -static arc arcs_70_1[2] = { +static arc arcs_71_1[2] = { {32, 2}, {0, 1}, }; -static arc arcs_70_2[2] = { - {166, 1}, +static arc arcs_71_2[2] = { + {167, 1}, {0, 2}, }; -static state states_70[3] = { - {1, arcs_70_0}, - {2, arcs_70_1}, - {2, arcs_70_2}, +static state states_71[3] = { + {1, arcs_71_0}, + {2, arcs_71_1}, + {2, arcs_71_2}, }; -static arc arcs_71_0[2] = { +static arc arcs_72_0[2] = { {26, 1}, {27, 2}, }; -static arc arcs_71_1[2] = { +static arc arcs_72_1[2] = { {27, 2}, {0, 1}, }; -static arc arcs_71_2[3] = { +static arc arcs_72_2[3] = { {26, 3}, - {167, 4}, + {168, 4}, {0, 2}, }; -static arc arcs_71_3[2] = { - {167, 4}, +static arc arcs_72_3[2] = { + {168, 4}, {0, 3}, }; -static arc arcs_71_4[1] = { +static arc arcs_72_4[1] = { {0, 4}, }; -static state states_71[5] = { - {2, arcs_71_0}, - {2, arcs_71_1}, - {3, arcs_71_2}, - {2, arcs_71_3}, - {1, arcs_71_4}, +static state states_72[5] = { + {2, arcs_72_0}, + {2, arcs_72_1}, + {3, arcs_72_2}, + {2, arcs_72_3}, + {1, arcs_72_4}, }; -static arc arcs_72_0[1] = { +static arc arcs_73_0[1] = { {27, 1}, }; -static arc arcs_72_1[2] = { +static arc arcs_73_1[2] = { {26, 2}, {0, 1}, }; -static arc arcs_72_2[1] = { +static arc arcs_73_2[1] = { {0, 2}, }; -static state states_72[3] = { - {1, arcs_72_0}, - {2, arcs_72_1}, - {1, arcs_72_2}, +static state states_73[3] = { + {1, arcs_73_0}, + {2, arcs_73_1}, + {1, arcs_73_2}, }; -static arc arcs_73_0[2] = { - {107, 1}, - {50, 1}, +static arc arcs_74_0[2] = { + {108, 1}, + {51, 1}, }; -static arc arcs_73_1[2] = { +static arc arcs_74_1[2] = { {32, 2}, {0, 1}, }; -static arc arcs_73_2[3] = { - {107, 1}, - {50, 1}, +static arc arcs_74_2[3] = { + {108, 1}, + {51, 1}, {0, 2}, }; -static state states_73[3] = { - {2, arcs_73_0}, - {2, arcs_73_1}, - {3, arcs_73_2}, +static state states_74[3] = { + {2, arcs_74_0}, + {2, arcs_74_1}, + {3, arcs_74_2}, }; -static arc arcs_74_0[1] = { +static arc arcs_75_0[1] = { {26, 1}, }; -static arc arcs_74_1[2] = { +static arc arcs_75_1[2] = { {32, 2}, {0, 1}, }; -static arc arcs_74_2[2] = { +static arc arcs_75_2[2] = { {26, 1}, {0, 2}, }; -static state states_74[3] = { - {1, arcs_74_0}, - {2, arcs_74_1}, - {2, arcs_74_2}, +static state states_75[3] = { + {1, arcs_75_0}, + {2, arcs_75_1}, + {2, arcs_75_2}, }; -static arc arcs_75_0[3] = { +static arc arcs_76_0[3] = { {26, 1}, {34, 2}, - {50, 3}, + {51, 3}, }; -static arc arcs_75_1[4] = { +static arc arcs_76_1[4] = { {27, 4}, - {164, 5}, + {165, 5}, {32, 6}, {0, 1}, }; -static arc arcs_75_2[1] = { - {107, 7}, +static arc arcs_76_2[1] = { + {108, 7}, }; -static arc arcs_75_3[3] = { - {164, 5}, +static arc arcs_76_3[3] = { + {165, 5}, {32, 6}, {0, 3}, }; -static arc arcs_75_4[1] = { +static arc arcs_76_4[1] = { {26, 7}, }; -static arc arcs_75_5[1] = { +static arc arcs_76_5[1] = { {0, 5}, }; -static arc arcs_75_6[3] = { +static arc arcs_76_6[3] = { {26, 8}, - {50, 8}, + {51, 8}, {0, 6}, }; -static arc arcs_75_7[3] = { - {164, 5}, +static arc arcs_76_7[3] = { + {165, 5}, {32, 9}, {0, 7}, }; -static arc arcs_75_8[2] = { +static arc arcs_76_8[2] = { {32, 6}, {0, 8}, }; -static arc arcs_75_9[3] = { +static arc arcs_76_9[3] = { {26, 10}, {34, 11}, {0, 9}, }; -static arc arcs_75_10[1] = { +static arc arcs_76_10[1] = { {27, 12}, }; -static arc arcs_75_11[1] = { - {107, 13}, +static arc arcs_76_11[1] = { + {108, 13}, }; -static arc arcs_75_12[1] = { +static arc arcs_76_12[1] = { {26, 13}, }; -static arc arcs_75_13[2] = { +static arc arcs_76_13[2] = { {32, 9}, {0, 13}, }; -static state states_75[14] = { - {3, arcs_75_0}, - {4, arcs_75_1}, - {1, arcs_75_2}, - {3, arcs_75_3}, - {1, arcs_75_4}, - {1, arcs_75_5}, - {3, arcs_75_6}, - {3, arcs_75_7}, - {2, arcs_75_8}, - {3, arcs_75_9}, - {1, arcs_75_10}, - {1, arcs_75_11}, - {1, arcs_75_12}, - {2, arcs_75_13}, -}; -static arc arcs_76_0[1] = { - {168, 1}, -}; -static arc arcs_76_1[1] = { +static state states_76[14] = { + {3, arcs_76_0}, + {4, arcs_76_1}, + {1, arcs_76_2}, + {3, arcs_76_3}, + {1, arcs_76_4}, + {1, arcs_76_5}, + {3, arcs_76_6}, + {3, arcs_76_7}, + {2, arcs_76_8}, + {3, arcs_76_9}, + {1, arcs_76_10}, + {1, arcs_76_11}, + {1, arcs_76_12}, + {2, arcs_76_13}, +}; +static arc arcs_77_0[1] = { + {169, 1}, +}; +static arc arcs_77_1[1] = { {23, 2}, }; -static arc arcs_76_2[2] = { +static arc arcs_77_2[2] = { {13, 3}, {27, 4}, }; -static arc arcs_76_3[2] = { +static arc arcs_77_3[2] = { {14, 5}, {15, 6}, }; -static arc arcs_76_4[1] = { +static arc arcs_77_4[1] = { {28, 7}, }; -static arc arcs_76_5[1] = { +static arc arcs_77_5[1] = { {15, 6}, }; -static arc arcs_76_6[1] = { +static arc arcs_77_6[1] = { {27, 4}, }; -static arc arcs_76_7[1] = { +static arc arcs_77_7[1] = { {0, 7}, }; -static state states_76[8] = { - {1, arcs_76_0}, - {1, arcs_76_1}, - {2, arcs_76_2}, - {2, arcs_76_3}, - {1, arcs_76_4}, - {1, arcs_76_5}, - {1, arcs_76_6}, - {1, arcs_76_7}, +static state states_77[8] = { + {1, arcs_77_0}, + {1, arcs_77_1}, + {2, arcs_77_2}, + {2, arcs_77_3}, + {1, arcs_77_4}, + {1, arcs_77_5}, + {1, arcs_77_6}, + {1, arcs_77_7}, }; -static arc arcs_77_0[1] = { - {169, 1}, +static arc arcs_78_0[1] = { + {170, 1}, }; -static arc arcs_77_1[2] = { +static arc arcs_78_1[2] = { {32, 2}, {0, 1}, }; -static arc arcs_77_2[2] = { - {169, 1}, +static arc arcs_78_2[2] = { + {170, 1}, {0, 2}, }; -static state states_77[3] = { - {1, arcs_77_0}, - {2, arcs_77_1}, - {2, arcs_77_2}, +static state states_78[3] = { + {1, arcs_78_0}, + {2, arcs_78_1}, + {2, arcs_78_2}, }; -static arc arcs_78_0[3] = { +static arc arcs_79_0[3] = { {26, 1}, {34, 2}, {33, 2}, }; -static arc arcs_78_1[3] = { - {164, 3}, +static arc arcs_79_1[3] = { + {165, 3}, {31, 2}, {0, 1}, }; -static arc arcs_78_2[1] = { +static arc arcs_79_2[1] = { {26, 3}, }; -static arc arcs_78_3[1] = { +static arc arcs_79_3[1] = { {0, 3}, }; -static state states_78[4] = { - {3, arcs_78_0}, - {3, arcs_78_1}, - {1, arcs_78_2}, - {1, arcs_78_3}, +static state states_79[4] = { + {3, arcs_79_0}, + {3, arcs_79_1}, + {1, arcs_79_2}, + {1, arcs_79_3}, }; -static arc arcs_79_0[2] = { - {164, 1}, - {171, 1}, +static arc arcs_80_0[2] = { + {165, 1}, + {172, 1}, }; -static arc arcs_79_1[1] = { +static arc arcs_80_1[1] = { {0, 1}, }; -static state states_79[2] = { - {2, arcs_79_0}, - {1, arcs_79_1}, +static state states_80[2] = { + {2, arcs_80_0}, + {1, arcs_80_1}, }; -static arc arcs_80_0[1] = { - {100, 1}, +static arc arcs_81_0[2] = { + {21, 1}, + {101, 2}, }; -static arc arcs_80_1[1] = { - {65, 2}, +static arc arcs_81_1[1] = { + {101, 2}, }; -static arc arcs_80_2[1] = { - {101, 3}, +static arc arcs_81_2[1] = { + {66, 3}, }; -static arc arcs_80_3[1] = { - {111, 4}, +static arc arcs_81_3[1] = { + {102, 4}, }; -static arc arcs_80_4[2] = { - {170, 5}, - {0, 4}, +static arc arcs_81_4[1] = { + {112, 5}, }; -static arc arcs_80_5[1] = { +static arc arcs_81_5[2] = { + {171, 6}, {0, 5}, }; -static state states_80[6] = { - {1, arcs_80_0}, - {1, arcs_80_1}, - {1, arcs_80_2}, - {1, arcs_80_3}, - {2, arcs_80_4}, - {1, arcs_80_5}, +static arc arcs_81_6[1] = { + {0, 6}, }; -static arc arcs_81_0[1] = { - {96, 1}, +static state states_81[7] = { + {2, arcs_81_0}, + {1, arcs_81_1}, + {1, arcs_81_2}, + {1, arcs_81_3}, + {1, arcs_81_4}, + {2, arcs_81_5}, + {1, arcs_81_6}, }; -static arc arcs_81_1[1] = { - {113, 2}, +static arc arcs_82_0[1] = { + {97, 1}, +}; +static arc arcs_82_1[1] = { + {114, 2}, }; -static arc arcs_81_2[2] = { - {170, 3}, +static arc arcs_82_2[2] = { + {171, 3}, {0, 2}, }; -static arc arcs_81_3[1] = { +static arc arcs_82_3[1] = { {0, 3}, }; -static state states_81[4] = { - {1, arcs_81_0}, - {1, arcs_81_1}, - {2, arcs_81_2}, - {1, arcs_81_3}, +static state states_82[4] = { + {1, arcs_82_0}, + {1, arcs_82_1}, + {2, arcs_82_2}, + {1, arcs_82_3}, }; -static arc arcs_82_0[1] = { +static arc arcs_83_0[1] = { {23, 1}, }; -static arc arcs_82_1[1] = { +static arc arcs_83_1[1] = { {0, 1}, }; -static state states_82[2] = { - {1, arcs_82_0}, - {1, arcs_82_1}, +static state states_83[2] = { + {1, arcs_83_0}, + {1, arcs_83_1}, }; -static arc arcs_83_0[1] = { - {173, 1}, +static arc arcs_84_0[1] = { + {174, 1}, }; -static arc arcs_83_1[2] = { - {174, 2}, +static arc arcs_84_1[2] = { + {175, 2}, {0, 1}, }; -static arc arcs_83_2[1] = { +static arc arcs_84_2[1] = { {0, 2}, }; -static state states_83[3] = { - {1, arcs_83_0}, - {2, arcs_83_1}, - {1, arcs_83_2}, +static state states_84[3] = { + {1, arcs_84_0}, + {2, arcs_84_1}, + {1, arcs_84_2}, }; -static arc arcs_84_0[2] = { - {76, 1}, +static arc arcs_85_0[2] = { + {77, 1}, {9, 2}, }; -static arc arcs_84_1[1] = { +static arc arcs_85_1[1] = { {26, 2}, }; -static arc arcs_84_2[1] = { +static arc arcs_85_2[1] = { {0, 2}, }; -static state states_84[3] = { - {2, arcs_84_0}, - {1, arcs_84_1}, - {1, arcs_84_2}, +static state states_85[3] = { + {2, arcs_85_0}, + {1, arcs_85_1}, + {1, arcs_85_2}, }; -static dfa dfas[85] = { +static dfa dfas[86] = { {256, "single_input", 0, 3, states_0, - "\004\050\340\000\002\000\000\000\005\237\204\003\131\002\010\001\000\140\110\224\017\041"}, + "\004\050\340\000\002\000\000\000\012\076\011\007\262\004\020\002\000\300\220\050\037\102"}, {257, "file_input", 0, 2, states_1, - "\204\050\340\000\002\000\000\000\005\237\204\003\131\002\010\001\000\140\110\224\017\041"}, + "\204\050\340\000\002\000\000\000\012\076\011\007\262\004\020\002\000\300\220\050\037\102"}, {258, "eval_input", 0, 3, states_2, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, {259, "decorator", 0, 7, states_3, "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {260, "decorators", 0, 2, states_4, @@ -1879,179 +1922,181 @@ static dfa dfas[85] = { "\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {264, "parameters", 0, 4, states_8, "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {265, "typedargslist", 0, 18, states_9, + {265, "typedargslist", 0, 19, states_9, "\000\000\200\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {266, "tfpdef", 0, 4, states_10, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {267, "varargslist", 0, 18, states_11, + {267, "varargslist", 0, 19, states_11, "\000\000\200\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {268, "vfpdef", 0, 2, states_12, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {269, "stmt", 0, 2, states_13, - "\000\050\340\000\002\000\000\000\005\237\204\003\131\002\010\001\000\140\110\224\017\041"}, + "\000\050\340\000\002\000\000\000\012\076\011\007\262\004\020\002\000\300\220\050\037\102"}, {270, "simple_stmt", 0, 4, states_14, - "\000\040\200\000\002\000\000\000\005\237\204\003\000\000\010\001\000\140\110\224\017\040"}, + "\000\040\200\000\002\000\000\000\012\076\011\007\000\000\020\002\000\300\220\050\037\100"}, {271, "small_stmt", 0, 2, states_15, - "\000\040\200\000\002\000\000\000\005\237\204\003\000\000\010\001\000\140\110\224\017\040"}, + "\000\040\200\000\002\000\000\000\012\076\011\007\000\000\020\002\000\300\220\050\037\100"}, {272, "expr_stmt", 0, 6, states_16, - "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {273, "testlist_star_expr", 0, 3, states_17, - "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {274, "augassign", 0, 2, states_18, - "\000\000\000\000\000\000\370\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {275, "del_stmt", 0, 3, states_19, - "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {276, "pass_stmt", 0, 2, states_20, - "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {277, "flow_stmt", 0, 2, states_21, - "\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\040"}, - {278, "break_stmt", 0, 2, states_22, - "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"}, - {279, "continue_stmt", 0, 2, states_23, + "\000\040\200\000\002\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {273, "annassign", 0, 5, states_17, + "\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {274, "testlist_star_expr", 0, 3, states_18, + "\000\040\200\000\002\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {275, "augassign", 0, 2, states_19, + "\000\000\000\000\000\000\360\377\001\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {276, "del_stmt", 0, 3, states_20, + "\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {277, "pass_stmt", 0, 2, states_21, + "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {278, "flow_stmt", 0, 2, states_22, + "\000\000\000\000\000\000\000\000\000\036\000\000\000\000\000\000\000\000\000\000\000\100"}, + {279, "break_stmt", 0, 2, states_23, "\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"}, - {280, "return_stmt", 0, 3, states_24, + {280, "continue_stmt", 0, 2, states_24, "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000"}, - {281, "yield_stmt", 0, 2, states_25, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040"}, - {282, "raise_stmt", 0, 5, states_26, + {281, "return_stmt", 0, 3, states_25, "\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"}, - {283, "import_stmt", 0, 2, states_27, - "\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\000"}, - {284, "import_name", 0, 3, states_28, - "\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000"}, - {285, "import_from", 0, 8, states_29, + {282, "yield_stmt", 0, 2, states_26, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\100"}, + {283, "raise_stmt", 0, 5, states_27, "\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000"}, - {286, "import_as_name", 0, 4, states_30, + {284, "import_stmt", 0, 2, states_28, + "\000\000\000\000\000\000\000\000\000\040\001\000\000\000\000\000\000\000\000\000\000\000"}, + {285, "import_name", 0, 3, states_29, + "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"}, + {286, "import_from", 0, 8, states_30, + "\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000"}, + {287, "import_as_name", 0, 4, states_31, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {287, "dotted_as_name", 0, 4, states_31, + {288, "dotted_as_name", 0, 4, states_32, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {288, "import_as_names", 0, 3, states_32, + {289, "import_as_names", 0, 3, states_33, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {289, "dotted_as_names", 0, 2, states_33, + {290, "dotted_as_names", 0, 2, states_34, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {290, "dotted_name", 0, 2, states_34, + {291, "dotted_name", 0, 2, states_35, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {291, "global_stmt", 0, 3, states_35, - "\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000"}, - {292, "nonlocal_stmt", 0, 3, states_36, + {292, "global_stmt", 0, 3, states_36, "\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"}, - {293, "assert_stmt", 0, 5, states_37, + {293, "nonlocal_stmt", 0, 3, states_37, "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000"}, - {294, "compound_stmt", 0, 2, states_38, - "\000\010\140\000\000\000\000\000\000\000\000\000\131\002\000\000\000\000\000\000\000\001"}, - {295, "async_stmt", 0, 3, states_39, + {294, "assert_stmt", 0, 5, states_38, + "\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000"}, + {295, "compound_stmt", 0, 2, states_39, + "\000\010\140\000\000\000\000\000\000\000\000\000\262\004\000\000\000\000\000\000\000\002"}, + {296, "async_stmt", 0, 3, states_40, "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {296, "if_stmt", 0, 8, states_40, - "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"}, - {297, "while_stmt", 0, 8, states_41, - "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, - {298, "for_stmt", 0, 10, states_42, + {297, "if_stmt", 0, 8, states_41, + "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"}, + {298, "while_stmt", 0, 8, states_42, "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"}, - {299, "try_stmt", 0, 13, states_43, - "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"}, - {300, "with_stmt", 0, 5, states_44, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"}, - {301, "with_item", 0, 4, states_45, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {302, "except_clause", 0, 5, states_46, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000"}, - {303, "suite", 0, 5, states_47, - "\004\040\200\000\002\000\000\000\005\237\204\003\000\000\010\001\000\140\110\224\017\040"}, - {304, "test", 0, 6, states_48, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {305, "test_nocond", 0, 2, states_49, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {306, "lambdef", 0, 5, states_50, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000"}, - {307, "lambdef_nocond", 0, 5, states_51, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000"}, - {308, "or_test", 0, 2, states_52, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\001\000\140\110\224\017\000"}, - {309, "and_test", 0, 2, states_53, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\001\000\140\110\224\017\000"}, - {310, "not_test", 0, 3, states_54, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\001\000\140\110\224\017\000"}, - {311, "comparison", 0, 2, states_55, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {312, "comp_op", 0, 4, states_56, - "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\371\007\000\000\000\000\000"}, - {313, "star_expr", 0, 3, states_57, + {299, "for_stmt", 0, 10, states_43, + "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"}, + {300, "try_stmt", 0, 13, states_44, + "\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"}, + {301, "with_stmt", 0, 5, states_45, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"}, + {302, "with_item", 0, 4, states_46, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {303, "except_clause", 0, 5, states_47, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"}, + {304, "suite", 0, 5, states_48, + "\004\040\200\000\002\000\000\000\012\076\011\007\000\000\020\002\000\300\220\050\037\100"}, + {305, "test", 0, 6, states_49, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {306, "test_nocond", 0, 2, states_50, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {307, "lambdef", 0, 5, states_51, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000"}, + {308, "lambdef_nocond", 0, 5, states_52, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000"}, + {309, "or_test", 0, 2, states_53, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\002\000\300\220\050\037\000"}, + {310, "and_test", 0, 2, states_54, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\002\000\300\220\050\037\000"}, + {311, "not_test", 0, 3, states_55, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\002\000\300\220\050\037\000"}, + {312, "comparison", 0, 2, states_56, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {313, "comp_op", 0, 4, states_57, + "\000\000\000\000\000\000\000\000\000\000\000\000\100\000\000\362\017\000\000\000\000\000"}, + {314, "star_expr", 0, 3, states_58, "\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {314, "expr", 0, 2, states_58, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {315, "xor_expr", 0, 2, states_59, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {316, "and_expr", 0, 2, states_60, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {317, "shift_expr", 0, 2, states_61, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {318, "arith_expr", 0, 2, states_62, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {319, "term", 0, 2, states_63, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {320, "factor", 0, 3, states_64, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {321, "power", 0, 4, states_65, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\224\017\000"}, - {322, "atom_expr", 0, 3, states_66, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\100\224\017\000"}, - {323, "atom", 0, 9, states_67, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\224\017\000"}, - {324, "testlist_comp", 0, 5, states_68, - "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {325, "trailer", 0, 7, states_69, - "\000\040\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\004\000\000"}, - {326, "subscriptlist", 0, 3, states_70, - "\000\040\200\010\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {327, "subscript", 0, 5, states_71, - "\000\040\200\010\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {328, "sliceop", 0, 3, states_72, + {315, "expr", 0, 2, states_59, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {316, "xor_expr", 0, 2, states_60, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {317, "and_expr", 0, 2, states_61, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {318, "shift_expr", 0, 2, states_62, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {319, "arith_expr", 0, 2, states_63, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {320, "term", 0, 2, states_64, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {321, "factor", 0, 3, states_65, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {322, "power", 0, 4, states_66, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\200\050\037\000"}, + {323, "atom_expr", 0, 3, states_67, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\200\050\037\000"}, + {324, "atom", 0, 9, states_68, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\050\037\000"}, + {325, "testlist_comp", 0, 5, states_69, + "\000\040\200\000\002\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {326, "trailer", 0, 7, states_70, + "\000\040\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\010\000\000"}, + {327, "subscriptlist", 0, 3, states_71, + "\000\040\200\010\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {328, "subscript", 0, 5, states_72, + "\000\040\200\010\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {329, "sliceop", 0, 3, states_73, "\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {329, "exprlist", 0, 3, states_73, - "\000\040\200\000\002\000\000\000\000\000\004\000\000\000\000\000\000\140\110\224\017\000"}, - {330, "testlist", 0, 3, states_74, - "\000\040\200\000\000\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {331, "dictorsetmaker", 0, 14, states_75, - "\000\040\200\000\006\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {332, "classdef", 0, 8, states_76, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"}, - {333, "arglist", 0, 3, states_77, - "\000\040\200\000\006\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {334, "argument", 0, 4, states_78, - "\000\040\200\000\006\000\000\000\000\000\004\000\000\000\010\001\000\140\110\224\017\000"}, - {335, "comp_iter", 0, 2, states_79, - "\000\000\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000\000\000\000\000\000"}, - {336, "comp_for", 0, 6, states_80, - "\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"}, - {337, "comp_if", 0, 4, states_81, - "\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"}, - {338, "encoding_decl", 0, 2, states_82, + {330, "exprlist", 0, 3, states_74, + "\000\040\200\000\002\000\000\000\000\000\010\000\000\000\000\000\000\300\220\050\037\000"}, + {331, "testlist", 0, 3, states_75, + "\000\040\200\000\000\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {332, "dictorsetmaker", 0, 14, states_76, + "\000\040\200\000\006\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {333, "classdef", 0, 8, states_77, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"}, + {334, "arglist", 0, 3, states_78, + "\000\040\200\000\006\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {335, "argument", 0, 4, states_79, + "\000\040\200\000\006\000\000\000\000\000\010\000\000\000\020\002\000\300\220\050\037\000"}, + {336, "comp_iter", 0, 2, states_80, + "\000\000\040\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000\000"}, + {337, "comp_for", 0, 7, states_81, + "\000\000\040\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"}, + {338, "comp_if", 0, 4, states_82, + "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"}, + {339, "encoding_decl", 0, 2, states_83, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {339, "yield_expr", 0, 3, states_83, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040"}, - {340, "yield_arg", 0, 3, states_84, - "\000\040\200\000\000\000\000\000\000\020\004\000\000\000\010\001\000\140\110\224\017\000"}, + {340, "yield_expr", 0, 3, states_84, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\100"}, + {341, "yield_arg", 0, 3, states_85, + "\000\040\200\000\000\000\000\000\000\040\010\000\000\000\020\002\000\300\220\050\037\000"}, }; -static label labels[175] = { +static label labels[176] = { {0, "EMPTY"}, {256, 0}, {4, 0}, {270, 0}, - {294, 0}, + {295, 0}, {257, 0}, {269, 0}, {0, 0}, {258, 0}, - {330, 0}, + {331, 0}, {259, 0}, {49, 0}, - {290, 0}, + {291, 0}, {7, 0}, - {333, 0}, + {334, 0}, {8, 0}, {260, 0}, {261, 0}, - {332, 0}, + {333, 0}, {263, 0}, {262, 0}, {55, 0}, @@ -2059,9 +2104,9 @@ static label labels[175] = { {1, 0}, {264, 0}, {51, 0}, - {304, 0}, + {305, 0}, {11, 0}, - {303, 0}, + {304, 0}, {265, 0}, {266, 0}, {22, 0}, @@ -2073,17 +2118,18 @@ static label labels[175] = { {271, 0}, {13, 0}, {272, 0}, - {275, 0}, {276, 0}, {277, 0}, - {283, 0}, - {291, 0}, + {278, 0}, + {284, 0}, {292, 0}, {293, 0}, - {273, 0}, + {294, 0}, {274, 0}, - {339, 0}, - {313, 0}, + {273, 0}, + {275, 0}, + {340, 0}, + {314, 0}, {36, 0}, {37, 0}, {38, 0}, @@ -2098,37 +2144,37 @@ static label labels[175] = { {46, 0}, {48, 0}, {1, "del"}, - {329, 0}, + {330, 0}, {1, "pass"}, - {278, 0}, {279, 0}, {280, 0}, - {282, 0}, {281, 0}, + {283, 0}, + {282, 0}, {1, "break"}, {1, "continue"}, {1, "return"}, {1, "raise"}, {1, "from"}, - {284, 0}, {285, 0}, + {286, 0}, {1, "import"}, - {289, 0}, + {290, 0}, {23, 0}, {52, 0}, - {288, 0}, - {286, 0}, - {1, "as"}, + {289, 0}, {287, 0}, + {1, "as"}, + {288, 0}, {1, "global"}, {1, "nonlocal"}, {1, "assert"}, - {296, 0}, {297, 0}, {298, 0}, {299, 0}, {300, 0}, - {295, 0}, + {301, 0}, + {296, 0}, {1, "if"}, {1, "elif"}, {1, "else"}, @@ -2136,26 +2182,26 @@ static label labels[175] = { {1, "for"}, {1, "in"}, {1, "try"}, - {302, 0}, + {303, 0}, {1, "finally"}, {1, "with"}, - {301, 0}, - {314, 0}, + {302, 0}, + {315, 0}, {1, "except"}, {5, 0}, {6, 0}, - {308, 0}, - {306, 0}, - {305, 0}, + {309, 0}, {307, 0}, + {306, 0}, + {308, 0}, {1, "lambda"}, - {309, 0}, - {1, "or"}, {310, 0}, + {1, "or"}, + {311, 0}, {1, "and"}, {1, "not"}, - {311, 0}, {312, 0}, + {313, 0}, {20, 0}, {21, 0}, {27, 0}, @@ -2164,54 +2210,54 @@ static label labels[175] = { {28, 0}, {28, 0}, {1, "is"}, - {315, 0}, - {18, 0}, {316, 0}, - {32, 0}, + {18, 0}, {317, 0}, - {19, 0}, + {32, 0}, {318, 0}, + {19, 0}, + {319, 0}, {33, 0}, {34, 0}, - {319, 0}, + {320, 0}, {14, 0}, {15, 0}, - {320, 0}, + {321, 0}, {17, 0}, {24, 0}, {47, 0}, {31, 0}, - {321, 0}, {322, 0}, - {54, 0}, {323, 0}, - {325, 0}, + {54, 0}, {324, 0}, + {326, 0}, + {325, 0}, {9, 0}, {10, 0}, {25, 0}, - {331, 0}, + {332, 0}, {26, 0}, {2, 0}, {3, 0}, {1, "None"}, {1, "True"}, {1, "False"}, - {336, 0}, - {326, 0}, + {337, 0}, {327, 0}, {328, 0}, + {329, 0}, {1, "class"}, - {334, 0}, {335, 0}, - {337, 0}, + {336, 0}, {338, 0}, + {339, 0}, {1, "yield"}, - {340, 0}, + {341, 0}, }; grammar _PyParser_Grammar = { - 85, + 86, dfas, - {175, labels}, + {176, labels}, 256 }; diff --git a/Python/import.c b/Python/import.c index 7e947ec2fc..dfdd9409e5 100644 --- a/Python/import.c +++ b/Python/import.c @@ -38,14 +38,6 @@ module _imp #include "clinic/import.c.h" -/*[python input] -class fs_unicode_converter(CConverter): - type = 'PyObject *' - converter = 'PyUnicode_FSDecoder' - -[python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=9d6786230166006e]*/ - /* Initialize things */ void @@ -320,7 +312,7 @@ PyImport_GetModuleDict(void) /* List of names to clear in sys */ -static char* sys_deletes[] = { +static const char * const sys_deletes[] = { "path", "argv", "ps1", "ps2", "last_type", "last_value", "last_traceback", "path_hooks", "path_importer_cache", "meta_path", @@ -330,7 +322,7 @@ static char* sys_deletes[] = { NULL }; -static char* sys_files[] = { +static const char * const sys_files[] = { "stdin", "__stdin__", "stdout", "__stdout__", "stderr", "__stderr__", @@ -347,7 +339,7 @@ PyImport_Cleanup(void) PyInterpreterState *interp = PyThreadState_GET()->interp; PyObject *modules = interp->modules; PyObject *weaklist = NULL; - char **p; + const char * const *p; if (modules == NULL) return; /* Already done */ @@ -883,10 +875,8 @@ update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname) if (PyUnicode_Compare(co->co_filename, oldname)) return; - tmp = co->co_filename; - co->co_filename = newname; - Py_INCREF(co->co_filename); - Py_DECREF(tmp); + Py_INCREF(newname); + Py_XSETREF(co->co_filename, newname); constants = co->co_consts; n = PyTuple_GET_SIZE(constants); @@ -1087,6 +1077,10 @@ _imp_create_builtin(PyObject *module, PyObject *spec) } else { /* Remember pointer to module init function. */ def = PyModule_GetDef(mod); + if (def == NULL) { + Py_DECREF(name); + return NULL; + } def->m_base.m_init = p->initfunc; if (_PyImport_FixupExtensionObject(mod, name, name) < 0) { Py_DECREF(name); @@ -1332,10 +1326,8 @@ remove_importlib_frames(void) (always_trim || PyUnicode_CompareWithASCIIString(code->co_name, remove_frames) == 0)) { - PyObject *tmp = *outer_link; - *outer_link = next; Py_XINCREF(next); - Py_DECREF(tmp); + Py_XSETREF(*outer_link, next); prev_link = outer_link; } else { @@ -1348,61 +1340,170 @@ done: } -PyObject * -PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, - PyObject *locals, PyObject *given_fromlist, - int level) +static PyObject * +resolve_name(PyObject *name, PyObject *globals, int level) { - _Py_IDENTIFIER(__import__); _Py_IDENTIFIER(__spec__); - _Py_IDENTIFIER(_initializing); _Py_IDENTIFIER(__package__); _Py_IDENTIFIER(__path__); _Py_IDENTIFIER(__name__); - _Py_IDENTIFIER(_find_and_load); - _Py_IDENTIFIER(_handle_fromlist); - _Py_IDENTIFIER(_lock_unlock_module); - _Py_static_string(single_dot, "."); - PyObject *abs_name = NULL; - PyObject *builtins_import = NULL; - PyObject *final_mod = NULL; - PyObject *mod = NULL; + _Py_IDENTIFIER(parent); + PyObject *abs_name; PyObject *package = NULL; - PyObject *globals = NULL; - PyObject *fromlist = NULL; + PyObject *spec; PyInterpreterState *interp = PyThreadState_GET()->interp; - int has_from; + Py_ssize_t last_dot; + PyObject *base; + int level_up; - /* Make sure to use default values so as to not have - PyObject_CallMethodObjArgs() truncate the parameter list because of a - NULL argument. */ - if (given_globals == NULL) { - globals = PyDict_New(); - if (globals == NULL) { + if (globals == NULL) { + PyErr_SetString(PyExc_KeyError, "'__name__' not in globals"); + goto error; + } + if (!PyDict_Check(globals)) { + PyErr_SetString(PyExc_TypeError, "globals must be a dict"); + goto error; + } + package = _PyDict_GetItemId(globals, &PyId___package__); + if (package == Py_None) { + package = NULL; + } + spec = _PyDict_GetItemId(globals, &PyId___spec__); + + if (package != NULL) { + Py_INCREF(package); + if (!PyUnicode_Check(package)) { + PyErr_SetString(PyExc_TypeError, "package must be a string"); + goto error; + } + else if (spec != NULL && spec != Py_None) { + int equal; + PyObject *parent = _PyObject_GetAttrId(spec, &PyId_parent); + if (parent == NULL) { + goto error; + } + + equal = PyObject_RichCompareBool(package, parent, Py_EQ); + Py_DECREF(parent); + if (equal < 0) { + goto error; + } + else if (equal == 0) { + if (PyErr_WarnEx(PyExc_ImportWarning, + "__package__ != __spec__.parent", 1) < 0) { + goto error; + } + } + } + } + else if (spec != NULL && spec != Py_None) { + package = _PyObject_GetAttrId(spec, &PyId_parent); + if (package == NULL) { + goto error; + } + else if (!PyUnicode_Check(package)) { + PyErr_SetString(PyExc_TypeError, + "__spec__.parent must be a string"); goto error; } } else { - /* Only have to care what given_globals is if it will be used - for something. */ - if (level > 0 && !PyDict_Check(given_globals)) { - PyErr_SetString(PyExc_TypeError, "globals must be a dict"); + if (PyErr_WarnEx(PyExc_ImportWarning, + "can't resolve package from __spec__ or __package__, " + "falling back on __name__ and __path__", 1) < 0) { goto error; } - globals = given_globals; - Py_INCREF(globals); + + package = _PyDict_GetItemId(globals, &PyId___name__); + if (package == NULL) { + PyErr_SetString(PyExc_KeyError, "'__name__' not in globals"); + goto error; + } + + Py_INCREF(package); + if (!PyUnicode_Check(package)) { + PyErr_SetString(PyExc_TypeError, "__name__ must be a string"); + goto error; + } + + if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) { + Py_ssize_t dot; + + if (PyUnicode_READY(package) < 0) { + goto error; + } + + dot = PyUnicode_FindChar(package, '.', + 0, PyUnicode_GET_LENGTH(package), -1); + if (dot == -2) { + goto error; + } + + if (dot >= 0) { + PyObject *substr = PyUnicode_Substring(package, 0, dot); + if (substr == NULL) { + goto error; + } + Py_SETREF(package, substr); + } + } + } + + last_dot = PyUnicode_GET_LENGTH(package); + if (last_dot == 0) { + PyErr_SetString(PyExc_ImportError, + "attempted relative import with no known parent package"); + goto error; + } + else if (PyDict_GetItem(interp->modules, package) == NULL) { + PyErr_Format(PyExc_SystemError, + "Parent module %R not loaded, cannot perform relative " + "import", package); + goto error; } - if (given_fromlist == NULL) { - fromlist = PyList_New(0); - if (fromlist == NULL) { + for (level_up = 1; level_up < level; level_up += 1) { + last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1); + if (last_dot == -2) { + goto error; + } + else if (last_dot == -1) { + PyErr_SetString(PyExc_ValueError, + "attempted relative import beyond top-level " + "package"); goto error; } } - else { - fromlist = given_fromlist; - Py_INCREF(fromlist); + + base = PyUnicode_Substring(package, 0, last_dot); + Py_DECREF(package); + if (base == NULL || PyUnicode_GET_LENGTH(name) == 0) { + return base; } + + abs_name = PyUnicode_FromFormat("%U.%U", base, name); + Py_DECREF(base); + return abs_name; + + error: + Py_XDECREF(package); + return NULL; +} + +PyObject * +PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, + PyObject *locals, PyObject *fromlist, + int level) +{ + _Py_IDENTIFIER(_find_and_load); + _Py_IDENTIFIER(_handle_fromlist); + PyObject *abs_name = NULL; + PyObject *final_mod = NULL; + PyObject *mod = NULL; + PyObject *package = NULL; + PyInterpreterState *interp = PyThreadState_GET()->interp; + int has_from; + if (name == NULL) { PyErr_SetString(PyExc_ValueError, "Empty module name"); goto error; @@ -1415,140 +1516,44 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, PyErr_SetString(PyExc_TypeError, "module name must be a string"); goto error; } - else if (PyUnicode_READY(name) < 0) { + if (PyUnicode_READY(name) < 0) { goto error; } if (level < 0) { PyErr_SetString(PyExc_ValueError, "level must be >= 0"); goto error; } - else if (level > 0) { - package = _PyDict_GetItemId(globals, &PyId___package__); - if (package != NULL && package != Py_None) { - Py_INCREF(package); - if (!PyUnicode_Check(package)) { - PyErr_SetString(PyExc_TypeError, "package must be a string"); - goto error; - } - } - else { - package = _PyDict_GetItemId(globals, &PyId___name__); - if (package == NULL) { - PyErr_SetString(PyExc_KeyError, "'__name__' not in globals"); - goto error; - } - else if (!PyUnicode_Check(package)) { - PyErr_SetString(PyExc_TypeError, "__name__ must be a string"); - goto error; - } - Py_INCREF(package); - if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) { - PyObject *partition = NULL; - PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot); - if (borrowed_dot == NULL) { - goto error; - } - partition = PyUnicode_RPartition(package, borrowed_dot); - Py_DECREF(package); - if (partition == NULL) { - goto error; - } - package = PyTuple_GET_ITEM(partition, 0); - Py_INCREF(package); - Py_DECREF(partition); - } - } - - if (PyDict_GetItem(interp->modules, package) == NULL) { - PyErr_Format(PyExc_SystemError, - "Parent module %R not loaded, cannot perform relative " - "import", package); + if (level > 0) { + abs_name = resolve_name(name, globals, level); + if (abs_name == NULL) goto error; - } } else { /* level == 0 */ if (PyUnicode_GET_LENGTH(name) == 0) { PyErr_SetString(PyExc_ValueError, "Empty module name"); goto error; } - package = Py_None; - Py_INCREF(package); - } - - if (level > 0) { - Py_ssize_t last_dot = PyUnicode_GET_LENGTH(package); - PyObject *base = NULL; - int level_up = 1; - - for (level_up = 1; level_up < level; level_up += 1) { - last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1); - if (last_dot == -2) { - goto error; - } - else if (last_dot == -1) { - PyErr_SetString(PyExc_ValueError, - "attempted relative import beyond top-level " - "package"); - goto error; - } - } - - base = PyUnicode_Substring(package, 0, last_dot); - if (base == NULL) - goto error; - - if (PyUnicode_GET_LENGTH(name) > 0) { - PyObject *borrowed_dot, *seq = NULL; - - borrowed_dot = _PyUnicode_FromId(&single_dot); - seq = PyTuple_Pack(2, base, name); - Py_DECREF(base); - if (borrowed_dot == NULL || seq == NULL) { - goto error; - } - - abs_name = PyUnicode_Join(borrowed_dot, seq); - Py_DECREF(seq); - if (abs_name == NULL) { - goto error; - } - } - else { - abs_name = base; - } - } - else { abs_name = name; Py_INCREF(abs_name); } -#ifdef WITH_THREAD - _PyImport_AcquireLock(); -#endif - /* From this point forward, goto error_with_unlock! */ - /* XXX interp->builtins_copy is NULL in subinterpreter! */ - builtins_import = _PyDict_GetItemId(interp->builtins_copy ? - interp->builtins_copy : - interp->builtins, &PyId___import__); - if (builtins_import == NULL) { - PyErr_SetString(PyExc_ImportError, "__import__ not found"); - goto error_with_unlock; - } - Py_INCREF(builtins_import); - mod = PyDict_GetItem(interp->modules, abs_name); if (mod == Py_None) { PyObject *msg = PyUnicode_FromFormat("import of %R halted; " "None in sys.modules", abs_name); if (msg != NULL) { - PyErr_SetImportError(msg, abs_name, NULL); + PyErr_SetImportErrorSubclass(PyExc_ModuleNotFoundError, msg, + abs_name, NULL); Py_DECREF(msg); } mod = NULL; - goto error_with_unlock; + goto error; } else if (mod != NULL) { + _Py_IDENTIFIER(__spec__); + _Py_IDENTIFIER(_initializing); + _Py_IDENTIFIER(_lock_unlock_module); PyObject *value = NULL; PyObject *spec; int initializing = 0; @@ -1571,91 +1576,83 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, Py_DECREF(value); if (initializing == -1) PyErr_Clear(); - } - if (initializing > 0) { - /* _bootstrap._lock_unlock_module() releases the import lock */ - value = _PyObject_CallMethodIdObjArgs(interp->importlib, - &PyId__lock_unlock_module, abs_name, - NULL); - if (value == NULL) - goto error; - Py_DECREF(value); - } - else { + if (initializing > 0) { #ifdef WITH_THREAD - if (_PyImport_ReleaseLock() < 0) { - PyErr_SetString(PyExc_RuntimeError, "not holding the import lock"); - goto error; - } + _PyImport_AcquireLock(); #endif + /* _bootstrap._lock_unlock_module() releases the import lock */ + value = _PyObject_CallMethodIdObjArgs(interp->importlib, + &PyId__lock_unlock_module, abs_name, + NULL); + if (value == NULL) + goto error; + Py_DECREF(value); + } } } else { +#ifdef WITH_THREAD + _PyImport_AcquireLock(); +#endif /* _bootstrap._find_and_load() releases the import lock */ mod = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__find_and_load, abs_name, - builtins_import, NULL); + interp->import_func, NULL); if (mod == NULL) { goto error; } } - /* From now on we don't hold the import lock anymore. */ - has_from = PyObject_IsTrue(fromlist); - if (has_from < 0) - goto error; + has_from = 0; + if (fromlist != NULL && fromlist != Py_None) { + has_from = PyObject_IsTrue(fromlist); + if (has_from < 0) + goto error; + } if (!has_from) { - if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) { - PyObject *front = NULL; - PyObject *partition = NULL; - PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot); - - if (borrowed_dot == NULL) { - goto error; - } + Py_ssize_t len = PyUnicode_GET_LENGTH(name); + if (level == 0 || len > 0) { + Py_ssize_t dot; - partition = PyUnicode_Partition(name, borrowed_dot); - if (partition == NULL) { + dot = PyUnicode_FindChar(name, '.', 0, len, 1); + if (dot == -2) { goto error; } - if (PyUnicode_GET_LENGTH(PyTuple_GET_ITEM(partition, 1)) == 0) { + if (dot == -1) { /* No dot in module name, simple exit */ - Py_DECREF(partition); final_mod = mod; Py_INCREF(mod); goto error; } - front = PyTuple_GET_ITEM(partition, 0); - Py_INCREF(front); - Py_DECREF(partition); - if (level == 0) { - final_mod = PyObject_CallFunctionObjArgs(builtins_import, front, NULL); + PyObject *front = PyUnicode_Substring(name, 0, dot); + if (front == NULL) { + goto error; + } + + final_mod = PyImport_ImportModuleLevelObject(front, NULL, NULL, NULL, 0); Py_DECREF(front); } else { - Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) - - PyUnicode_GET_LENGTH(front); + Py_ssize_t cut_off = len - dot; Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name); PyObject *to_return = PyUnicode_Substring(abs_name, 0, abs_name_len - cut_off); - Py_DECREF(front); if (to_return == NULL) { goto error; } final_mod = PyDict_GetItem(interp->modules, to_return); + Py_DECREF(to_return); if (final_mod == NULL) { PyErr_Format(PyExc_KeyError, "%R not in sys.modules as expected", to_return); + goto error; } - else { - Py_INCREF(final_mod); - } - Py_DECREF(to_return); + Py_INCREF(final_mod); } } else { @@ -1666,24 +1663,14 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, else { final_mod = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__handle_fromlist, mod, - fromlist, builtins_import, + fromlist, interp->import_func, NULL); } - goto error; - error_with_unlock: -#ifdef WITH_THREAD - if (_PyImport_ReleaseLock() < 0) { - PyErr_SetString(PyExc_RuntimeError, "not holding the import lock"); - } -#endif error: Py_XDECREF(abs_name); - Py_XDECREF(builtins_import); Py_XDECREF(mod); Py_XDECREF(package); - Py_XDECREF(globals); - Py_XDECREF(fromlist); if (final_mod == NULL) remove_importlib_frames(); return final_mod; @@ -1959,19 +1946,15 @@ exec_builtin_or_dynamic(PyObject *mod) { def = PyModule_GetDef(mod); if (def == NULL) { - if (PyErr_Occurred()) { - return -1; - } return 0; } + state = PyModule_GetState(mod); - if (PyErr_Occurred()) { - return -1; - } if (state) { /* Already initialized; skip reload */ return 0; } + return PyModule_ExecDef(mod, def); } diff --git a/Python/importdl.c b/Python/importdl.c index 1aa585d5e8..ac03289c4d 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -23,8 +23,8 @@ extern dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix, const char *pathname, FILE *fp); #endif -static const char *ascii_only_prefix = "PyInit"; -static const char *nonascii_prefix = "PyInitU"; +static const char * const ascii_only_prefix = "PyInit"; +static const char * const nonascii_prefix = "PyInitU"; /* Get the variable part of a module's export symbol name. * Returns a bytes instance. For non-ASCII-named modules, the name is diff --git a/Python/importlib.h b/Python/importlib.h index a5fc936a28..7497f2288d 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1,1988 +1,1824 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,64,0,0,0,115,169,2,0,0,100,0,0,90,0,0, - 100,1,0,97,1,0,100,2,0,100,3,0,132,0,0,90, - 2,0,100,4,0,100,5,0,132,0,0,90,3,0,71,100, - 6,0,100,7,0,132,0,0,100,7,0,131,2,0,90,4, - 0,105,0,0,90,5,0,105,0,0,90,6,0,71,100,8, - 0,100,9,0,132,0,0,100,9,0,101,7,0,131,3,0, - 90,8,0,71,100,10,0,100,11,0,132,0,0,100,11,0, - 131,2,0,90,9,0,71,100,12,0,100,13,0,132,0,0, - 100,13,0,131,2,0,90,10,0,71,100,14,0,100,15,0, - 132,0,0,100,15,0,131,2,0,90,11,0,100,16,0,100, - 17,0,132,0,0,90,12,0,100,18,0,100,19,0,132,0, - 0,90,13,0,100,20,0,100,21,0,132,0,0,90,14,0, - 100,22,0,100,23,0,100,24,0,100,25,0,132,0,1,90, - 15,0,100,26,0,100,27,0,132,0,0,90,16,0,100,28, - 0,100,29,0,132,0,0,90,17,0,100,30,0,100,31,0, - 132,0,0,90,18,0,100,32,0,100,33,0,132,0,0,90, - 19,0,71,100,34,0,100,35,0,132,0,0,100,35,0,131, - 2,0,90,20,0,71,100,36,0,100,37,0,132,0,0,100, - 37,0,131,2,0,90,21,0,100,38,0,100,1,0,100,39, - 0,100,1,0,100,40,0,100,41,0,132,0,2,90,22,0, - 101,23,0,131,0,0,90,24,0,100,1,0,100,1,0,100, - 42,0,100,43,0,132,2,0,90,25,0,100,44,0,100,45, - 0,100,46,0,100,47,0,132,0,1,90,26,0,100,48,0, - 100,49,0,132,0,0,90,27,0,100,50,0,100,51,0,132, - 0,0,90,28,0,100,52,0,100,53,0,132,0,0,90,29, - 0,100,54,0,100,55,0,132,0,0,90,30,0,100,56,0, - 100,57,0,132,0,0,90,31,0,100,58,0,100,59,0,132, - 0,0,90,32,0,71,100,60,0,100,61,0,132,0,0,100, - 61,0,131,2,0,90,33,0,71,100,62,0,100,63,0,132, - 0,0,100,63,0,131,2,0,90,34,0,71,100,64,0,100, - 65,0,132,0,0,100,65,0,131,2,0,90,35,0,100,66, - 0,100,67,0,132,0,0,90,36,0,100,68,0,100,69,0, - 132,0,0,90,37,0,100,1,0,100,70,0,100,71,0,132, - 1,0,90,38,0,100,72,0,100,73,0,132,0,0,90,39, - 0,100,74,0,90,40,0,101,40,0,100,75,0,23,90,41, - 0,100,76,0,100,77,0,132,0,0,90,42,0,100,78,0, - 100,79,0,132,0,0,90,43,0,100,1,0,100,80,0,100, - 81,0,100,82,0,132,2,0,90,44,0,100,83,0,100,84, - 0,132,0,0,90,45,0,100,85,0,100,86,0,132,0,0, - 90,46,0,100,1,0,100,1,0,102,0,0,100,80,0,100, - 87,0,100,88,0,132,4,0,90,47,0,100,89,0,100,90, - 0,132,0,0,90,48,0,100,91,0,100,92,0,132,0,0, - 90,49,0,100,93,0,100,94,0,132,0,0,90,50,0,100, - 1,0,83,41,95,97,83,1,0,0,67,111,114,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,105,109,112,111,114,116,46,10,10,84,104,105,115,32,109, - 111,100,117,108,101,32,105,115,32,78,79,84,32,109,101,97, - 110,116,32,116,111,32,98,101,32,100,105,114,101,99,116,108, - 121,32,105,109,112,111,114,116,101,100,33,32,73,116,32,104, - 97,115,32,98,101,101,110,32,100,101,115,105,103,110,101,100, - 32,115,117,99,104,10,116,104,97,116,32,105,116,32,99,97, - 110,32,98,101,32,98,111,111,116,115,116,114,97,112,112,101, - 100,32,105,110,116,111,32,80,121,116,104,111,110,32,97,115, - 32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,32,111,102,32,105,109,112,111,114,116,46,32,65, - 115,10,115,117,99,104,32,105,116,32,114,101,113,117,105,114, - 101,115,32,116,104,101,32,105,110,106,101,99,116,105,111,110, - 32,111,102,32,115,112,101,99,105,102,105,99,32,109,111,100, - 117,108,101,115,32,97,110,100,32,97,116,116,114,105,98,117, - 116,101,115,32,105,110,32,111,114,100,101,114,32,116,111,10, - 119,111,114,107,46,32,79,110,101,32,115,104,111,117,108,100, - 32,117,115,101,32,105,109,112,111,114,116,108,105,98,32,97, - 115,32,116,104,101,32,112,117,98,108,105,99,45,102,97,99, - 105,110,103,32,118,101,114,115,105,111,110,32,111,102,32,116, - 104,105,115,32,109,111,100,117,108,101,46,10,10,78,99,2, - 0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,67, - 0,0,0,115,92,0,0,0,120,66,0,100,1,0,100,2, - 0,100,3,0,100,4,0,103,4,0,68,93,46,0,125,2, - 0,116,0,0,124,1,0,124,2,0,131,2,0,114,19,0, - 116,1,0,124,0,0,124,2,0,116,2,0,124,1,0,124, - 2,0,131,2,0,131,3,0,1,113,19,0,87,124,0,0, - 106,3,0,106,4,0,124,1,0,106,3,0,131,1,0,1, - 100,5,0,83,41,6,122,47,83,105,109,112,108,101,32,115, - 117,98,115,116,105,116,117,116,101,32,102,111,114,32,102,117, - 110,99,116,111,111,108,115,46,117,112,100,97,116,101,95,119, - 114,97,112,112,101,114,46,218,10,95,95,109,111,100,117,108, - 101,95,95,218,8,95,95,110,97,109,101,95,95,218,12,95, - 95,113,117,97,108,110,97,109,101,95,95,218,7,95,95,100, - 111,99,95,95,78,41,5,218,7,104,97,115,97,116,116,114, - 218,7,115,101,116,97,116,116,114,218,7,103,101,116,97,116, - 116,114,218,8,95,95,100,105,99,116,95,95,218,6,117,112, - 100,97,116,101,41,3,90,3,110,101,119,90,3,111,108,100, - 218,7,114,101,112,108,97,99,101,169,0,114,10,0,0,0, - 250,29,60,102,114,111,122,101,110,32,105,109,112,111,114,116, - 108,105,98,46,95,98,111,111,116,115,116,114,97,112,62,218, - 5,95,119,114,97,112,27,0,0,0,115,8,0,0,0,0, - 2,25,1,15,1,29,1,114,12,0,0,0,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,16,0,0,0,116,0,0,116,1,0,131,1,0,124, - 0,0,131,1,0,83,41,1,78,41,2,218,4,116,121,112, - 101,218,3,115,121,115,41,1,218,4,110,97,109,101,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,11,95, - 110,101,119,95,109,111,100,117,108,101,35,0,0,0,115,2, - 0,0,0,0,1,114,16,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, - 58,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, - 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,100,8,0,83,41,9, - 218,13,95,77,97,110,97,103,101,82,101,108,111,97,100,122, - 63,77,97,110,97,103,101,115,32,116,104,101,32,112,111,115, - 115,105,98,108,101,32,99,108,101,97,110,45,117,112,32,111, - 102,32,115,121,115,46,109,111,100,117,108,101,115,32,102,111, - 114,32,108,111,97,100,95,109,111,100,117,108,101,40,41,46, - 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, - 0,67,0,0,0,115,13,0,0,0,124,1,0,124,0,0, - 95,0,0,100,0,0,83,41,1,78,41,1,218,5,95,110, - 97,109,101,41,2,218,4,115,101,108,102,114,15,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 8,95,95,105,110,105,116,95,95,43,0,0,0,115,2,0, - 0,0,0,1,122,22,95,77,97,110,97,103,101,82,101,108, - 111,97,100,46,95,95,105,110,105,116,95,95,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,25,0,0,0,124,0,0,106,0,0,116,1,0,106, - 2,0,107,6,0,124,0,0,95,3,0,100,0,0,83,41, - 1,78,41,4,114,18,0,0,0,114,14,0,0,0,218,7, - 109,111,100,117,108,101,115,218,10,95,105,115,95,114,101,108, - 111,97,100,41,1,114,19,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,9,95,95,101,110,116, - 101,114,95,95,46,0,0,0,115,2,0,0,0,0,1,122, - 23,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95, - 95,101,110,116,101,114,95,95,99,1,0,0,0,0,0,0, - 0,2,0,0,0,11,0,0,0,71,0,0,0,115,77,0, - 0,0,116,0,0,100,1,0,100,2,0,132,0,0,124,1, - 0,68,131,1,0,131,1,0,114,73,0,124,0,0,106,1, - 0,12,114,73,0,121,17,0,116,2,0,106,3,0,124,0, - 0,106,4,0,61,87,110,18,0,4,116,5,0,107,10,0, - 114,72,0,1,1,1,89,110,1,0,88,100,0,0,83,41, - 3,78,99,1,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,115,0,0,0,115,27,0,0,0,124,0,0,93, - 17,0,125,1,0,124,1,0,100,0,0,107,9,0,86,1, - 113,3,0,100,0,0,83,41,1,78,114,10,0,0,0,41, - 2,218,2,46,48,218,3,97,114,103,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,250,9,60,103,101,110,101, - 120,112,114,62,50,0,0,0,115,2,0,0,0,6,0,122, - 41,95,77,97,110,97,103,101,82,101,108,111,97,100,46,95, - 95,101,120,105,116,95,95,46,60,108,111,99,97,108,115,62, - 46,60,103,101,110,101,120,112,114,62,41,6,218,3,97,110, - 121,114,22,0,0,0,114,14,0,0,0,114,21,0,0,0, - 114,18,0,0,0,218,8,75,101,121,69,114,114,111,114,41, - 2,114,19,0,0,0,218,4,97,114,103,115,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,218,8,95,95,101, - 120,105,116,95,95,49,0,0,0,115,10,0,0,0,0,1, - 35,1,3,1,17,1,13,1,122,22,95,77,97,110,97,103, - 101,82,101,108,111,97,100,46,95,95,101,120,105,116,95,95, - 78,41,7,114,1,0,0,0,114,0,0,0,0,114,2,0, - 0,0,114,3,0,0,0,114,20,0,0,0,114,23,0,0, - 0,114,30,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,17,0,0,0,39, - 0,0,0,115,8,0,0,0,12,2,6,2,12,3,12,3, - 114,17,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,64,0,0,0,115,16,0,0,0,101, - 0,0,90,1,0,100,0,0,90,2,0,100,1,0,83,41, - 2,218,14,95,68,101,97,100,108,111,99,107,69,114,114,111, - 114,78,41,3,114,1,0,0,0,114,0,0,0,0,114,2, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,31,0,0,0,64,0,0,0, - 115,2,0,0,0,12,1,114,31,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,82,0,0,0,101,0,0,90,1,0,100,0,0,90, - 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, - 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, - 100,6,0,100,7,0,132,0,0,90,6,0,100,8,0,100, - 9,0,132,0,0,90,7,0,100,10,0,100,11,0,132,0, - 0,90,8,0,100,12,0,83,41,13,218,11,95,77,111,100, - 117,108,101,76,111,99,107,122,169,65,32,114,101,99,117,114, - 115,105,118,101,32,108,111,99,107,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,119,104,105,99,104,32,105, - 115,32,97,98,108,101,32,116,111,32,100,101,116,101,99,116, - 32,100,101,97,100,108,111,99,107,115,10,32,32,32,32,40, - 101,46,103,46,32,116,104,114,101,97,100,32,49,32,116,114, - 121,105,110,103,32,116,111,32,116,97,107,101,32,108,111,99, - 107,115,32,65,32,116,104,101,110,32,66,44,32,97,110,100, - 32,116,104,114,101,97,100,32,50,32,116,114,121,105,110,103, - 32,116,111,10,32,32,32,32,116,97,107,101,32,108,111,99, - 107,115,32,66,32,116,104,101,110,32,65,41,46,10,32,32, - 32,32,99,2,0,0,0,0,0,0,0,2,0,0,0,2, - 0,0,0,67,0,0,0,115,70,0,0,0,116,0,0,106, - 1,0,131,0,0,124,0,0,95,2,0,116,0,0,106,1, - 0,131,0,0,124,0,0,95,3,0,124,1,0,124,0,0, - 95,4,0,100,0,0,124,0,0,95,5,0,100,1,0,124, - 0,0,95,6,0,100,1,0,124,0,0,95,7,0,100,0, - 0,83,41,2,78,233,0,0,0,0,41,8,218,7,95,116, - 104,114,101,97,100,90,13,97,108,108,111,99,97,116,101,95, - 108,111,99,107,218,4,108,111,99,107,218,6,119,97,107,101, - 117,112,114,15,0,0,0,218,5,111,119,110,101,114,218,5, - 99,111,117,110,116,218,7,119,97,105,116,101,114,115,41,2, - 114,19,0,0,0,114,15,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,20,0,0,0,74,0, - 0,0,115,12,0,0,0,0,1,15,1,15,1,9,1,9, - 1,9,1,122,20,95,77,111,100,117,108,101,76,111,99,107, - 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, - 0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,88, - 0,0,0,116,0,0,106,1,0,131,0,0,125,1,0,124, - 0,0,106,2,0,125,2,0,120,60,0,116,3,0,106,4, - 0,124,2,0,131,1,0,125,3,0,124,3,0,100,0,0, - 107,8,0,114,55,0,100,1,0,83,124,3,0,106,2,0, - 125,2,0,124,2,0,124,1,0,107,2,0,114,24,0,100, - 2,0,83,113,24,0,87,100,0,0,83,41,3,78,70,84, - 41,5,114,34,0,0,0,218,9,103,101,116,95,105,100,101, - 110,116,114,37,0,0,0,218,12,95,98,108,111,99,107,105, - 110,103,95,111,110,218,3,103,101,116,41,4,114,19,0,0, - 0,90,2,109,101,218,3,116,105,100,114,35,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,12, - 104,97,115,95,100,101,97,100,108,111,99,107,82,0,0,0, - 115,18,0,0,0,0,2,12,1,9,1,3,1,15,1,12, - 1,4,1,9,1,12,1,122,24,95,77,111,100,117,108,101, - 76,111,99,107,46,104,97,115,95,100,101,97,100,108,111,99, - 107,99,1,0,0,0,0,0,0,0,2,0,0,0,16,0, - 0,0,67,0,0,0,115,210,0,0,0,116,0,0,106,1, - 0,131,0,0,125,1,0,124,0,0,116,2,0,124,1,0, - 60,122,173,0,120,166,0,124,0,0,106,3,0,143,124,0, - 1,124,0,0,106,4,0,100,1,0,107,2,0,115,68,0, - 124,0,0,106,5,0,124,1,0,107,2,0,114,96,0,124, - 1,0,124,0,0,95,5,0,124,0,0,4,106,4,0,100, - 2,0,55,2,95,4,0,100,3,0,83,124,0,0,106,6, - 0,131,0,0,114,124,0,116,7,0,100,4,0,124,0,0, - 22,131,1,0,130,1,0,124,0,0,106,8,0,106,9,0, - 100,5,0,131,1,0,114,157,0,124,0,0,4,106,10,0, - 100,2,0,55,2,95,10,0,87,100,6,0,81,82,88,124, - 0,0,106,8,0,106,9,0,131,0,0,1,124,0,0,106, - 8,0,106,11,0,131,0,0,1,113,28,0,87,87,100,6, - 0,116,2,0,124,1,0,61,88,100,6,0,83,41,7,122, - 185,10,32,32,32,32,32,32,32,32,65,99,113,117,105,114, - 101,32,116,104,101,32,109,111,100,117,108,101,32,108,111,99, - 107,46,32,32,73,102,32,97,32,112,111,116,101,110,116,105, - 97,108,32,100,101,97,100,108,111,99,107,32,105,115,32,100, - 101,116,101,99,116,101,100,44,10,32,32,32,32,32,32,32, - 32,97,32,95,68,101,97,100,108,111,99,107,69,114,114,111, - 114,32,105,115,32,114,97,105,115,101,100,46,10,32,32,32, - 32,32,32,32,32,79,116,104,101,114,119,105,115,101,44,32, - 116,104,101,32,108,111,99,107,32,105,115,32,97,108,119,97, - 121,115,32,97,99,113,117,105,114,101,100,32,97,110,100,32, - 84,114,117,101,32,105,115,32,114,101,116,117,114,110,101,100, - 46,10,32,32,32,32,32,32,32,32,114,33,0,0,0,233, - 1,0,0,0,84,122,23,100,101,97,100,108,111,99,107,32, - 100,101,116,101,99,116,101,100,32,98,121,32,37,114,70,78, - 41,12,114,34,0,0,0,114,40,0,0,0,114,41,0,0, - 0,114,35,0,0,0,114,38,0,0,0,114,37,0,0,0, - 114,44,0,0,0,114,31,0,0,0,114,36,0,0,0,218, - 7,97,99,113,117,105,114,101,114,39,0,0,0,218,7,114, - 101,108,101,97,115,101,41,2,114,19,0,0,0,114,43,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,46,0,0,0,94,0,0,0,115,32,0,0,0,0, - 6,12,1,10,1,3,1,3,1,10,1,30,1,9,1,15, - 1,4,1,12,1,16,1,18,1,22,2,13,1,21,2,122, - 19,95,77,111,100,117,108,101,76,111,99,107,46,97,99,113, - 117,105,114,101,99,1,0,0,0,0,0,0,0,2,0,0, - 0,10,0,0,0,67,0,0,0,115,157,0,0,0,116,0, - 0,106,1,0,131,0,0,125,1,0,124,0,0,106,2,0, - 143,129,0,1,124,0,0,106,3,0,124,1,0,107,3,0, - 114,49,0,116,4,0,100,1,0,131,1,0,130,1,0,124, - 0,0,106,5,0,100,2,0,107,4,0,115,70,0,116,6, - 0,130,1,0,124,0,0,4,106,5,0,100,3,0,56,2, - 95,5,0,124,0,0,106,5,0,100,2,0,107,2,0,114, - 146,0,100,0,0,124,0,0,95,3,0,124,0,0,106,7, - 0,114,146,0,124,0,0,4,106,7,0,100,3,0,56,2, - 95,7,0,124,0,0,106,8,0,106,9,0,131,0,0,1, - 87,100,0,0,81,82,88,100,0,0,83,41,4,78,122,31, - 99,97,110,110,111,116,32,114,101,108,101,97,115,101,32,117, - 110,45,97,99,113,117,105,114,101,100,32,108,111,99,107,114, - 33,0,0,0,114,45,0,0,0,41,10,114,34,0,0,0, - 114,40,0,0,0,114,35,0,0,0,114,37,0,0,0,218, - 12,82,117,110,116,105,109,101,69,114,114,111,114,114,38,0, - 0,0,218,14,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,114,39,0,0,0,114,36,0,0,0,114,47,0,0, - 0,41,2,114,19,0,0,0,114,43,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,47,0,0, - 0,119,0,0,0,115,22,0,0,0,0,1,12,1,10,1, - 15,1,12,1,21,1,15,1,15,1,9,1,9,1,15,1, - 122,19,95,77,111,100,117,108,101,76,111,99,107,46,114,101, - 108,101,97,115,101,99,1,0,0,0,0,0,0,0,1,0, - 0,0,4,0,0,0,67,0,0,0,115,25,0,0,0,100, - 1,0,106,0,0,124,0,0,106,1,0,116,2,0,124,0, - 0,131,1,0,131,2,0,83,41,2,78,122,23,95,77,111, - 100,117,108,101,76,111,99,107,40,123,33,114,125,41,32,97, - 116,32,123,125,41,3,218,6,102,111,114,109,97,116,114,15, - 0,0,0,218,2,105,100,41,1,114,19,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,95, - 95,114,101,112,114,95,95,132,0,0,0,115,2,0,0,0, - 0,1,122,20,95,77,111,100,117,108,101,76,111,99,107,46, - 95,95,114,101,112,114,95,95,78,41,9,114,1,0,0,0, - 114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,114, - 20,0,0,0,114,44,0,0,0,114,46,0,0,0,114,47, - 0,0,0,114,52,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,32,0,0, - 0,68,0,0,0,115,12,0,0,0,12,4,6,2,12,8, - 12,12,12,25,12,13,114,32,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, - 115,70,0,0,0,101,0,0,90,1,0,100,0,0,90,2, - 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, - 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,100, - 6,0,100,7,0,132,0,0,90,6,0,100,8,0,100,9, - 0,132,0,0,90,7,0,100,10,0,83,41,11,218,16,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,122, - 86,65,32,115,105,109,112,108,101,32,95,77,111,100,117,108, - 101,76,111,99,107,32,101,113,117,105,118,97,108,101,110,116, - 32,102,111,114,32,80,121,116,104,111,110,32,98,117,105,108, - 100,115,32,119,105,116,104,111,117,116,10,32,32,32,32,109, - 117,108,116,105,45,116,104,114,101,97,100,105,110,103,32,115, - 117,112,112,111,114,116,46,99,2,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, - 0,124,1,0,124,0,0,95,0,0,100,1,0,124,0,0, - 95,1,0,100,0,0,83,41,2,78,114,33,0,0,0,41, - 2,114,15,0,0,0,114,38,0,0,0,41,2,114,19,0, - 0,0,114,15,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,20,0,0,0,140,0,0,0,115, - 4,0,0,0,0,1,9,1,122,25,95,68,117,109,109,121, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,202,1,0,0,100,0,90,0,100,1, + 97,1,100,2,100,3,132,0,90,2,100,4,100,5,132,0, + 90,3,105,0,90,4,105,0,90,5,71,0,100,6,100,7, + 132,0,100,7,101,6,131,3,90,7,71,0,100,8,100,9, + 132,0,100,9,131,2,90,8,71,0,100,10,100,11,132,0, + 100,11,131,2,90,9,71,0,100,12,100,13,132,0,100,13, + 131,2,90,10,100,14,100,15,132,0,90,11,100,16,100,17, + 132,0,90,12,100,18,100,19,132,0,90,13,100,20,100,21, + 156,1,100,22,100,23,132,2,90,14,100,24,100,25,132,0, + 90,15,100,26,100,27,132,0,90,16,100,28,100,29,132,0, + 90,17,100,30,100,31,132,0,90,18,71,0,100,32,100,33, + 132,0,100,33,131,2,90,19,71,0,100,34,100,35,132,0, + 100,35,131,2,90,20,100,1,100,1,100,36,156,2,100,37, + 100,38,132,2,90,21,101,22,131,0,90,23,100,92,100,39, + 100,40,132,1,90,24,100,41,100,42,156,1,100,43,100,44, + 132,2,90,25,100,45,100,46,132,0,90,26,100,47,100,48, + 132,0,90,27,100,49,100,50,132,0,90,28,100,51,100,52, + 132,0,90,29,100,53,100,54,132,0,90,30,100,55,100,56, + 132,0,90,31,71,0,100,57,100,58,132,0,100,58,131,2, + 90,32,71,0,100,59,100,60,132,0,100,60,131,2,90,33, + 71,0,100,61,100,62,132,0,100,62,131,2,90,34,100,63, + 100,64,132,0,90,35,100,65,100,66,132,0,90,36,100,93, + 100,67,100,68,132,1,90,37,100,69,100,70,132,0,90,38, + 100,71,90,39,101,39,100,72,23,0,90,40,100,73,100,74, + 132,0,90,41,100,75,100,76,132,0,90,42,100,94,100,78, + 100,79,132,1,90,43,100,80,100,81,132,0,90,44,100,82, + 100,83,132,0,90,45,100,1,100,1,102,0,100,77,102,4, + 100,84,100,85,132,1,90,46,100,86,100,87,132,0,90,47, + 100,88,100,89,132,0,90,48,100,90,100,91,132,0,90,49, + 100,1,83,0,41,95,97,83,1,0,0,67,111,114,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,105,109,112,111,114,116,46,10,10,84,104,105,115,32, + 109,111,100,117,108,101,32,105,115,32,78,79,84,32,109,101, + 97,110,116,32,116,111,32,98,101,32,100,105,114,101,99,116, + 108,121,32,105,109,112,111,114,116,101,100,33,32,73,116,32, + 104,97,115,32,98,101,101,110,32,100,101,115,105,103,110,101, + 100,32,115,117,99,104,10,116,104,97,116,32,105,116,32,99, + 97,110,32,98,101,32,98,111,111,116,115,116,114,97,112,112, + 101,100,32,105,110,116,111,32,80,121,116,104,111,110,32,97, + 115,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,32,111,102,32,105,109,112,111,114,116,46,32, + 65,115,10,115,117,99,104,32,105,116,32,114,101,113,117,105, + 114,101,115,32,116,104,101,32,105,110,106,101,99,116,105,111, + 110,32,111,102,32,115,112,101,99,105,102,105,99,32,109,111, + 100,117,108,101,115,32,97,110,100,32,97,116,116,114,105,98, + 117,116,101,115,32,105,110,32,111,114,100,101,114,32,116,111, + 10,119,111,114,107,46,32,79,110,101,32,115,104,111,117,108, + 100,32,117,115,101,32,105,109,112,111,114,116,108,105,98,32, + 97,115,32,116,104,101,32,112,117,98,108,105,99,45,102,97, + 99,105,110,103,32,118,101,114,115,105,111,110,32,111,102,32, + 116,104,105,115,32,109,111,100,117,108,101,46,10,10,78,99, + 2,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0, + 67,0,0,0,115,60,0,0,0,120,40,100,6,68,0,93, + 32,125,2,116,0,124,1,124,2,131,2,114,6,116,1,124, + 0,124,2,116,2,124,1,124,2,131,2,131,3,1,0,113, + 6,87,0,124,0,106,3,106,4,124,1,106,3,131,1,1, + 0,100,5,83,0,41,7,122,47,83,105,109,112,108,101,32, + 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, + 117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95, + 119,114,97,112,112,101,114,46,218,10,95,95,109,111,100,117, + 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, + 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, + 100,111,99,95,95,78,41,4,114,0,0,0,0,114,1,0, + 0,0,114,2,0,0,0,114,3,0,0,0,41,5,218,7, + 104,97,115,97,116,116,114,218,7,115,101,116,97,116,116,114, + 218,7,103,101,116,97,116,116,114,218,8,95,95,100,105,99, + 116,95,95,218,6,117,112,100,97,116,101,41,3,90,3,110, + 101,119,90,3,111,108,100,218,7,114,101,112,108,97,99,101, + 169,0,114,10,0,0,0,250,29,60,102,114,111,122,101,110, + 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, + 115,116,114,97,112,62,218,5,95,119,114,97,112,27,0,0, + 0,115,8,0,0,0,0,2,10,1,10,1,22,1,114,12, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,116, + 1,131,1,124,0,131,1,83,0,41,1,78,41,2,218,4, + 116,121,112,101,218,3,115,121,115,41,1,218,4,110,97,109, + 101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,11,95,110,101,119,95,109,111,100,117,108,101,35,0,0, + 0,115,2,0,0,0,0,1,114,16,0,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,64,0, + 0,0,115,12,0,0,0,101,0,90,1,100,0,90,2,100, + 1,83,0,41,2,218,14,95,68,101,97,100,108,111,99,107, + 69,114,114,111,114,78,41,3,114,1,0,0,0,114,0,0, + 0,0,114,2,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,17,0,0,0, + 47,0,0,0,115,2,0,0,0,8,1,114,17,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,64,0,0,0,115,56,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, + 100,5,132,0,90,5,100,6,100,7,132,0,90,6,100,8, + 100,9,132,0,90,7,100,10,100,11,132,0,90,8,100,12, + 83,0,41,13,218,11,95,77,111,100,117,108,101,76,111,99, + 107,122,169,65,32,114,101,99,117,114,115,105,118,101,32,108, + 111,99,107,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,119,104,105,99,104,32,105,115,32,97,98,108,101, + 32,116,111,32,100,101,116,101,99,116,32,100,101,97,100,108, + 111,99,107,115,10,32,32,32,32,40,101,46,103,46,32,116, + 104,114,101,97,100,32,49,32,116,114,121,105,110,103,32,116, + 111,32,116,97,107,101,32,108,111,99,107,115,32,65,32,116, + 104,101,110,32,66,44,32,97,110,100,32,116,104,114,101,97, + 100,32,50,32,116,114,121,105,110,103,32,116,111,10,32,32, + 32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116, + 104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0, + 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, + 0,115,48,0,0,0,116,0,106,1,131,0,124,0,95,2, + 116,0,106,1,131,0,124,0,95,3,124,1,124,0,95,4, + 100,0,124,0,95,5,100,1,124,0,95,6,100,1,124,0, + 95,7,100,0,83,0,41,2,78,233,0,0,0,0,41,8, + 218,7,95,116,104,114,101,97,100,90,13,97,108,108,111,99, + 97,116,101,95,108,111,99,107,218,4,108,111,99,107,218,6, + 119,97,107,101,117,112,114,15,0,0,0,218,5,111,119,110, + 101,114,218,5,99,111,117,110,116,218,7,119,97,105,116,101, + 114,115,41,2,218,4,115,101,108,102,114,15,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, + 95,95,105,110,105,116,95,95,57,0,0,0,115,12,0,0, + 0,0,1,10,1,10,1,6,1,6,1,6,1,122,20,95, 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,19,0,0,0,124,0,0, - 4,106,0,0,100,1,0,55,2,95,0,0,100,2,0,83, - 41,3,78,114,45,0,0,0,84,41,1,114,38,0,0,0, - 41,1,114,19,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,46,0,0,0,144,0,0,0,115, - 4,0,0,0,0,1,15,1,122,24,95,68,117,109,109,121, - 77,111,100,117,108,101,76,111,99,107,46,97,99,113,117,105, - 114,101,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,46,0,0,0,124,0,0,106, - 0,0,100,1,0,107,2,0,114,27,0,116,1,0,100,2, - 0,131,1,0,130,1,0,124,0,0,4,106,0,0,100,3, - 0,56,2,95,0,0,100,0,0,83,41,4,78,114,33,0, - 0,0,122,31,99,97,110,110,111,116,32,114,101,108,101,97, - 115,101,32,117,110,45,97,99,113,117,105,114,101,100,32,108, - 111,99,107,114,45,0,0,0,41,2,114,38,0,0,0,114, - 48,0,0,0,41,1,114,19,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,47,0,0,0,148, - 0,0,0,115,6,0,0,0,0,1,15,1,12,1,122,24, - 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, - 46,114,101,108,101,97,115,101,99,1,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,67,0,0,0,115,25,0, - 0,0,100,1,0,106,0,0,124,0,0,106,1,0,116,2, - 0,124,0,0,131,1,0,131,2,0,83,41,2,78,122,28, + 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, + 2,0,0,0,67,0,0,0,115,64,0,0,0,116,0,106, + 1,131,0,125,1,124,0,106,2,125,2,120,44,116,3,106, + 4,124,2,131,1,125,3,124,3,100,0,107,8,114,38,100, + 1,83,0,124,3,106,2,125,2,124,2,124,1,107,2,114, + 16,100,2,83,0,113,16,87,0,100,0,83,0,41,3,78, + 70,84,41,5,114,20,0,0,0,218,9,103,101,116,95,105, + 100,101,110,116,114,23,0,0,0,218,12,95,98,108,111,99, + 107,105,110,103,95,111,110,218,3,103,101,116,41,4,114,26, + 0,0,0,90,2,109,101,218,3,116,105,100,114,21,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,12,104,97,115,95,100,101,97,100,108,111,99,107,65,0, + 0,0,115,18,0,0,0,0,2,8,1,6,1,2,1,10, + 1,8,1,4,1,6,1,8,1,122,24,95,77,111,100,117, + 108,101,76,111,99,107,46,104,97,115,95,100,101,97,100,108, + 111,99,107,99,1,0,0,0,0,0,0,0,2,0,0,0, + 16,0,0,0,67,0,0,0,115,168,0,0,0,116,0,106, + 1,131,0,125,1,124,0,116,2,124,1,60,0,122,138,120, + 132,124,0,106,3,143,96,1,0,124,0,106,4,100,1,107, + 2,115,48,124,0,106,5,124,1,107,2,114,72,124,1,124, + 0,95,5,124,0,4,0,106,4,100,2,55,0,2,0,95, + 4,100,3,83,0,124,0,106,6,131,0,114,92,116,7,100, + 4,124,0,22,0,131,1,130,1,124,0,106,8,106,9,100, + 5,131,1,114,118,124,0,4,0,106,10,100,2,55,0,2, + 0,95,10,87,0,100,6,81,0,82,0,88,0,124,0,106, + 8,106,9,131,0,1,0,124,0,106,8,106,11,131,0,1, + 0,113,20,87,0,87,0,100,6,116,2,124,1,61,0,88, + 0,100,6,83,0,41,7,122,185,10,32,32,32,32,32,32, + 32,32,65,99,113,117,105,114,101,32,116,104,101,32,109,111, + 100,117,108,101,32,108,111,99,107,46,32,32,73,102,32,97, + 32,112,111,116,101,110,116,105,97,108,32,100,101,97,100,108, + 111,99,107,32,105,115,32,100,101,116,101,99,116,101,100,44, + 10,32,32,32,32,32,32,32,32,97,32,95,68,101,97,100, + 108,111,99,107,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,46,10,32,32,32,32,32,32,32,32,79,116,104, + 101,114,119,105,115,101,44,32,116,104,101,32,108,111,99,107, + 32,105,115,32,97,108,119,97,121,115,32,97,99,113,117,105, + 114,101,100,32,97,110,100,32,84,114,117,101,32,105,115,32, + 114,101,116,117,114,110,101,100,46,10,32,32,32,32,32,32, + 32,32,114,19,0,0,0,233,1,0,0,0,84,122,23,100, + 101,97,100,108,111,99,107,32,100,101,116,101,99,116,101,100, + 32,98,121,32,37,114,70,78,41,12,114,20,0,0,0,114, + 28,0,0,0,114,29,0,0,0,114,21,0,0,0,114,24, + 0,0,0,114,23,0,0,0,114,32,0,0,0,114,17,0, + 0,0,114,22,0,0,0,218,7,97,99,113,117,105,114,101, + 114,25,0,0,0,218,7,114,101,108,101,97,115,101,41,2, + 114,26,0,0,0,114,31,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,34,0,0,0,77,0, + 0,0,115,32,0,0,0,0,6,8,1,8,1,2,1,2, + 1,8,1,20,1,6,1,14,1,4,1,8,1,12,1,12, + 1,24,2,10,1,18,2,122,19,95,77,111,100,117,108,101, + 76,111,99,107,46,97,99,113,117,105,114,101,99,1,0,0, + 0,0,0,0,0,2,0,0,0,10,0,0,0,67,0,0, + 0,115,122,0,0,0,116,0,106,1,131,0,125,1,124,0, + 106,2,143,98,1,0,124,0,106,3,124,1,107,3,114,34, + 116,4,100,1,131,1,130,1,124,0,106,5,100,2,107,4, + 115,48,116,6,130,1,124,0,4,0,106,5,100,3,56,0, + 2,0,95,5,124,0,106,5,100,2,107,2,114,108,100,0, + 124,0,95,3,124,0,106,7,114,108,124,0,4,0,106,7, + 100,3,56,0,2,0,95,7,124,0,106,8,106,9,131,0, + 1,0,87,0,100,0,81,0,82,0,88,0,100,0,83,0, + 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, + 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, + 108,111,99,107,114,19,0,0,0,114,33,0,0,0,41,10, + 114,20,0,0,0,114,28,0,0,0,114,21,0,0,0,114, + 23,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114, + 111,114,114,24,0,0,0,218,14,65,115,115,101,114,116,105, + 111,110,69,114,114,111,114,114,25,0,0,0,114,22,0,0, + 0,114,35,0,0,0,41,2,114,26,0,0,0,114,31,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,35,0,0,0,102,0,0,0,115,22,0,0,0,0, + 1,8,1,8,1,10,1,8,1,14,1,14,1,10,1,6, + 1,6,1,14,1,122,19,95,77,111,100,117,108,101,76,111, + 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, + 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, + 18,0,0,0,100,1,106,0,124,0,106,1,116,2,124,0, + 131,1,131,2,83,0,41,2,78,122,23,95,77,111,100,117, + 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, + 123,125,41,3,218,6,102,111,114,109,97,116,114,15,0,0, + 0,218,2,105,100,41,1,114,26,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,8,95,95,114, + 101,112,114,95,95,115,0,0,0,115,2,0,0,0,0,1, + 122,20,95,77,111,100,117,108,101,76,111,99,107,46,95,95, + 114,101,112,114,95,95,78,41,9,114,1,0,0,0,114,0, + 0,0,0,114,2,0,0,0,114,3,0,0,0,114,27,0, + 0,0,114,32,0,0,0,114,34,0,0,0,114,35,0,0, + 0,114,40,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,18,0,0,0,51, + 0,0,0,115,12,0,0,0,8,4,4,2,8,8,8,12, + 8,25,8,13,114,18,0,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,48, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, + 10,83,0,41,11,218,16,95,68,117,109,109,121,77,111,100, + 117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,108, + 101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,113, + 117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,116, + 104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,111, + 117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,114, + 101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,99, + 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, + 67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,100, + 1,124,0,95,1,100,0,83,0,41,2,78,114,19,0,0, + 0,41,2,114,15,0,0,0,114,24,0,0,0,41,2,114, + 26,0,0,0,114,15,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,27,0,0,0,123,0,0, + 0,115,4,0,0,0,0,1,6,1,122,25,95,68,117,109, + 109,121,77,111,100,117,108,101,76,111,99,107,46,95,95,105, + 110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,18,0,0,0,124, + 0,4,0,106,0,100,1,55,0,2,0,95,0,100,2,83, + 0,41,3,78,114,33,0,0,0,84,41,1,114,24,0,0, + 0,41,1,114,26,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,34,0,0,0,127,0,0,0, + 115,4,0,0,0,0,1,14,1,122,24,95,68,117,109,109, + 121,77,111,100,117,108,101,76,111,99,107,46,97,99,113,117, + 105,114,101,99,1,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,36,0,0,0,124,0,106, + 0,100,1,107,2,114,18,116,1,100,2,131,1,130,1,124, + 0,4,0,106,0,100,3,56,0,2,0,95,0,100,0,83, + 0,41,4,78,114,19,0,0,0,122,31,99,97,110,110,111, + 116,32,114,101,108,101,97,115,101,32,117,110,45,97,99,113, + 117,105,114,101,100,32,108,111,99,107,114,33,0,0,0,41, + 2,114,24,0,0,0,114,36,0,0,0,41,1,114,26,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,35,0,0,0,131,0,0,0,115,6,0,0,0,0, + 1,10,1,8,1,122,24,95,68,117,109,109,121,77,111,100, + 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, + 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,115,18,0,0,0,100,1,106,0,124,0,106, + 1,116,2,124,0,131,1,131,2,83,0,41,2,78,122,28, 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, - 40,123,33,114,125,41,32,97,116,32,123,125,41,3,114,50, - 0,0,0,114,15,0,0,0,114,51,0,0,0,41,1,114, - 19,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,52,0,0,0,153,0,0,0,115,2,0,0, + 40,123,33,114,125,41,32,97,116,32,123,125,41,3,114,38, + 0,0,0,114,15,0,0,0,114,39,0,0,0,41,1,114, + 26,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,40,0,0,0,136,0,0,0,115,2,0,0, 0,0,1,122,25,95,68,117,109,109,121,77,111,100,117,108, 101,76,111,99,107,46,95,95,114,101,112,114,95,95,78,41, 8,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0, - 114,3,0,0,0,114,20,0,0,0,114,46,0,0,0,114, - 47,0,0,0,114,52,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,53,0, - 0,0,136,0,0,0,115,10,0,0,0,12,2,6,2,12, - 4,12,4,12,5,114,53,0,0,0,99,0,0,0,0,0, + 114,3,0,0,0,114,27,0,0,0,114,34,0,0,0,114, + 35,0,0,0,114,40,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,41,0, + 0,0,119,0,0,0,115,10,0,0,0,8,2,4,2,8, + 4,8,4,8,5,114,41,0,0,0,99,0,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, - 52,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,100,2,0,132,0,0,90,3,0,100,3,0,100, - 4,0,132,0,0,90,4,0,100,5,0,100,6,0,132,0, - 0,90,5,0,100,7,0,83,41,8,218,18,95,77,111,100, + 36,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,100,3,100,4,132,0,90,4,100,5,100,6, + 132,0,90,5,100,7,83,0,41,8,218,18,95,77,111,100, 117,108,101,76,111,99,107,77,97,110,97,103,101,114,99,2, 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, - 0,0,0,115,22,0,0,0,124,1,0,124,0,0,95,0, - 0,100,0,0,124,0,0,95,1,0,100,0,0,83,41,1, - 78,41,2,114,18,0,0,0,218,5,95,108,111,99,107,41, - 2,114,19,0,0,0,114,15,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,20,0,0,0,159, - 0,0,0,115,4,0,0,0,0,1,9,1,122,27,95,77, - 111,100,117,108,101,76,111,99,107,77,97,110,97,103,101,114, - 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, - 0,0,1,0,0,0,10,0,0,0,67,0,0,0,115,53, - 0,0,0,122,22,0,116,0,0,124,0,0,106,1,0,131, - 1,0,124,0,0,95,2,0,87,100,0,0,116,3,0,106, - 4,0,131,0,0,1,88,124,0,0,106,2,0,106,5,0, - 131,0,0,1,100,0,0,83,41,1,78,41,6,218,16,95, - 103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,114, - 18,0,0,0,114,55,0,0,0,218,4,95,105,109,112,218, - 12,114,101,108,101,97,115,101,95,108,111,99,107,114,46,0, - 0,0,41,1,114,19,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,23,0,0,0,163,0,0, - 0,115,8,0,0,0,0,1,3,1,22,2,11,1,122,28, - 95,77,111,100,117,108,101,76,111,99,107,77,97,110,97,103, - 101,114,46,95,95,101,110,116,101,114,95,95,99,1,0,0, - 0,0,0,0,0,3,0,0,0,1,0,0,0,79,0,0, - 0,115,17,0,0,0,124,0,0,106,0,0,106,1,0,131, - 0,0,1,100,0,0,83,41,1,78,41,2,114,55,0,0, - 0,114,47,0,0,0,41,3,114,19,0,0,0,114,29,0, - 0,0,90,6,107,119,97,114,103,115,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,30,0,0,0,170,0, - 0,0,115,2,0,0,0,0,1,122,27,95,77,111,100,117, - 108,101,76,111,99,107,77,97,110,97,103,101,114,46,95,95, - 101,120,105,116,95,95,78,41,6,114,1,0,0,0,114,0, - 0,0,0,114,2,0,0,0,114,20,0,0,0,114,23,0, - 0,0,114,30,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,54,0,0,0, - 157,0,0,0,115,6,0,0,0,12,2,12,4,12,7,114, - 54,0,0,0,99,1,0,0,0,0,0,0,0,3,0,0, - 0,11,0,0,0,3,0,0,0,115,139,0,0,0,100,1, - 0,125,1,0,121,17,0,116,0,0,136,0,0,25,131,0, - 0,125,1,0,87,110,18,0,4,116,1,0,107,10,0,114, - 43,0,1,1,1,89,110,1,0,88,124,1,0,100,1,0, - 107,8,0,114,135,0,116,2,0,100,1,0,107,8,0,114, - 83,0,116,3,0,136,0,0,131,1,0,125,1,0,110,12, - 0,116,4,0,136,0,0,131,1,0,125,1,0,135,0,0, - 102,1,0,100,2,0,100,3,0,134,0,0,125,2,0,116, - 5,0,106,6,0,124,1,0,124,2,0,131,2,0,116,0, - 0,136,0,0,60,124,1,0,83,41,4,122,109,71,101,116, - 32,111,114,32,99,114,101,97,116,101,32,116,104,101,32,109, - 111,100,117,108,101,32,108,111,99,107,32,102,111,114,32,97, - 32,103,105,118,101,110,32,109,111,100,117,108,101,32,110,97, - 109,101,46,10,10,32,32,32,32,83,104,111,117,108,100,32, - 111,110,108,121,32,98,101,32,99,97,108,108,101,100,32,119, - 105,116,104,32,116,104,101,32,105,109,112,111,114,116,32,108, - 111,99,107,32,116,97,107,101,110,46,78,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,19,0,0,0, - 115,11,0,0,0,116,0,0,136,0,0,61,100,0,0,83, - 41,1,78,41,1,218,13,95,109,111,100,117,108,101,95,108, - 111,99,107,115,41,1,218,1,95,41,1,114,15,0,0,0, - 114,10,0,0,0,114,11,0,0,0,218,2,99,98,190,0, - 0,0,115,2,0,0,0,0,1,122,28,95,103,101,116,95, - 109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99, - 97,108,115,62,46,99,98,41,7,114,59,0,0,0,114,28, - 0,0,0,114,34,0,0,0,114,53,0,0,0,114,32,0, - 0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101, - 102,41,3,114,15,0,0,0,114,35,0,0,0,114,61,0, - 0,0,114,10,0,0,0,41,1,114,15,0,0,0,114,11, - 0,0,0,114,56,0,0,0,176,0,0,0,115,24,0,0, - 0,0,4,6,1,3,1,17,1,13,1,5,1,12,1,12, - 1,15,2,12,1,18,2,22,1,114,56,0,0,0,99,1, - 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, - 0,0,0,115,71,0,0,0,116,0,0,124,0,0,131,1, - 0,125,1,0,116,1,0,106,2,0,131,0,0,1,121,14, - 0,124,1,0,106,3,0,131,0,0,1,87,110,18,0,4, - 116,4,0,107,10,0,114,56,0,1,1,1,89,110,11,0, - 88,124,1,0,106,5,0,131,0,0,1,100,1,0,83,41, - 2,97,21,1,0,0,82,101,108,101,97,115,101,32,116,104, - 101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,32, - 108,111,99,107,44,32,97,110,100,32,97,99,113,117,105,114, - 101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,32, - 116,104,101,10,32,32,32,32,109,111,100,117,108,101,32,108, + 0,0,0,115,16,0,0,0,124,1,124,0,95,0,100,0, + 124,0,95,1,100,0,83,0,41,1,78,41,2,218,5,95, + 110,97,109,101,218,5,95,108,111,99,107,41,2,114,26,0, + 0,0,114,15,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,27,0,0,0,142,0,0,0,115, + 4,0,0,0,0,1,6,1,122,27,95,77,111,100,117,108, + 101,76,111,99,107,77,97,110,97,103,101,114,46,95,95,105, + 110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,0, + 0,0,10,0,0,0,67,0,0,0,115,42,0,0,0,122, + 16,116,0,124,0,106,1,131,1,124,0,95,2,87,0,100, + 0,116,3,106,4,131,0,1,0,88,0,124,0,106,2,106, + 5,131,0,1,0,100,0,83,0,41,1,78,41,6,218,16, + 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, + 114,43,0,0,0,114,44,0,0,0,218,4,95,105,109,112, + 218,12,114,101,108,101,97,115,101,95,108,111,99,107,114,34, + 0,0,0,41,1,114,26,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,9,95,95,101,110,116, + 101,114,95,95,146,0,0,0,115,8,0,0,0,0,1,2, + 1,16,2,10,1,122,28,95,77,111,100,117,108,101,76,111, + 99,107,77,97,110,97,103,101,114,46,95,95,101,110,116,101, + 114,95,95,99,1,0,0,0,0,0,0,0,3,0,0,0, + 1,0,0,0,79,0,0,0,115,14,0,0,0,124,0,106, + 0,106,1,131,0,1,0,100,0,83,0,41,1,78,41,2, + 114,44,0,0,0,114,35,0,0,0,41,3,114,26,0,0, + 0,218,4,97,114,103,115,90,6,107,119,97,114,103,115,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, + 95,95,101,120,105,116,95,95,153,0,0,0,115,2,0,0, + 0,0,1,122,27,95,77,111,100,117,108,101,76,111,99,107, + 77,97,110,97,103,101,114,46,95,95,101,120,105,116,95,95, + 78,41,6,114,1,0,0,0,114,0,0,0,0,114,2,0, + 0,0,114,27,0,0,0,114,48,0,0,0,114,50,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,42,0,0,0,140,0,0,0,115,6, + 0,0,0,8,2,8,4,8,7,114,42,0,0,0,99,1, + 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,3, + 0,0,0,115,106,0,0,0,100,1,125,1,121,14,116,0, + 136,0,25,0,131,0,125,1,87,0,110,20,4,0,116,1, + 107,10,114,38,1,0,1,0,1,0,89,0,110,2,88,0, + 124,1,100,1,107,8,114,102,116,2,100,1,107,8,114,66, + 116,3,136,0,131,1,125,1,110,8,116,4,136,0,131,1, + 125,1,135,0,102,1,100,2,100,3,132,8,125,2,116,5, + 106,6,124,1,124,2,131,2,116,0,136,0,60,0,124,1, + 83,0,41,4,122,109,71,101,116,32,111,114,32,99,114,101, + 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, - 109,111,100,117,108,101,32,110,97,109,101,46,10,32,32,32, - 32,84,104,105,115,32,105,115,32,117,115,101,100,32,116,111, - 32,101,110,115,117,114,101,32,97,32,109,111,100,117,108,101, - 32,105,115,32,99,111,109,112,108,101,116,101,108,121,32,105, - 110,105,116,105,97,108,105,122,101,100,44,32,105,110,32,116, - 104,101,10,32,32,32,32,101,118,101,110,116,32,105,116,32, - 105,115,32,98,101,105,110,103,32,105,109,112,111,114,116,101, - 100,32,98,121,32,97,110,111,116,104,101,114,32,116,104,114, - 101,97,100,46,10,10,32,32,32,32,83,104,111,117,108,100, - 32,111,110,108,121,32,98,101,32,99,97,108,108,101,100,32, - 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,32, - 108,111,99,107,32,116,97,107,101,110,46,78,41,6,114,56, - 0,0,0,114,57,0,0,0,114,58,0,0,0,114,46,0, - 0,0,114,31,0,0,0,114,47,0,0,0,41,2,114,15, - 0,0,0,114,35,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,19,95,108,111,99,107,95,117, - 110,108,111,99,107,95,109,111,100,117,108,101,195,0,0,0, - 115,14,0,0,0,0,7,12,1,10,1,3,1,14,1,13, - 3,5,2,114,63,0,0,0,99,1,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,79,0,0,0,115,13,0, - 0,0,124,0,0,124,1,0,124,2,0,142,0,0,83,41, - 1,97,46,1,0,0,114,101,109,111,118,101,95,105,109,112, - 111,114,116,108,105,98,95,102,114,97,109,101,115,32,105,110, - 32,105,109,112,111,114,116,46,99,32,119,105,108,108,32,97, - 108,119,97,121,115,32,114,101,109,111,118,101,32,115,101,113, - 117,101,110,99,101,115,10,32,32,32,32,111,102,32,105,109, - 112,111,114,116,108,105,98,32,102,114,97,109,101,115,32,116, - 104,97,116,32,101,110,100,32,119,105,116,104,32,97,32,99, - 97,108,108,32,116,111,32,116,104,105,115,32,102,117,110,99, - 116,105,111,110,10,10,32,32,32,32,85,115,101,32,105,116, - 32,105,110,115,116,101,97,100,32,111,102,32,97,32,110,111, - 114,109,97,108,32,99,97,108,108,32,105,110,32,112,108,97, - 99,101,115,32,119,104,101,114,101,32,105,110,99,108,117,100, - 105,110,103,32,116,104,101,32,105,109,112,111,114,116,108,105, - 98,10,32,32,32,32,102,114,97,109,101,115,32,105,110,116, - 114,111,100,117,99,101,115,32,117,110,119,97,110,116,101,100, - 32,110,111,105,115,101,32,105,110,116,111,32,116,104,101,32, - 116,114,97,99,101,98,97,99,107,32,40,101,46,103,46,32, - 119,104,101,110,32,101,120,101,99,117,116,105,110,103,10,32, - 32,32,32,109,111,100,117,108,101,32,99,111,100,101,41,10, - 32,32,32,32,114,10,0,0,0,41,3,218,1,102,114,29, - 0,0,0,90,4,107,119,100,115,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,218,25,95,99,97,108,108,95, - 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, - 118,101,100,214,0,0,0,115,2,0,0,0,0,8,114,65, - 0,0,0,218,9,118,101,114,98,111,115,105,116,121,114,45, - 0,0,0,99,1,0,0,0,1,0,0,0,3,0,0,0, - 4,0,0,0,71,0,0,0,115,75,0,0,0,116,0,0, - 106,1,0,106,2,0,124,1,0,107,5,0,114,71,0,124, - 0,0,106,3,0,100,6,0,131,1,0,115,43,0,100,3, - 0,124,0,0,23,125,0,0,116,4,0,124,0,0,106,5, - 0,124,2,0,140,0,0,100,4,0,116,0,0,106,6,0, - 131,1,1,1,100,5,0,83,41,7,122,61,80,114,105,110, - 116,32,116,104,101,32,109,101,115,115,97,103,101,32,116,111, - 32,115,116,100,101,114,114,32,105,102,32,45,118,47,80,89, - 84,72,79,78,86,69,82,66,79,83,69,32,105,115,32,116, - 117,114,110,101,100,32,111,110,46,250,1,35,250,7,105,109, - 112,111,114,116,32,122,2,35,32,90,4,102,105,108,101,78, - 41,2,114,67,0,0,0,114,68,0,0,0,41,7,114,14, + 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, + 32,32,83,104,111,117,108,100,32,111,110,108,121,32,98,101, + 32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,101, + 32,105,109,112,111,114,116,32,108,111,99,107,32,116,97,107, + 101,110,46,78,99,1,0,0,0,0,0,0,0,1,0,0, + 0,2,0,0,0,19,0,0,0,115,10,0,0,0,116,0, + 136,0,61,0,100,0,83,0,41,1,78,41,1,218,13,95, + 109,111,100,117,108,101,95,108,111,99,107,115,41,1,218,1, + 95,41,1,114,15,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,2,99,98,173,0,0,0,115,2,0,0,0,0, + 1,122,28,95,103,101,116,95,109,111,100,117,108,101,95,108, + 111,99,107,46,60,108,111,99,97,108,115,62,46,99,98,41, + 7,114,51,0,0,0,218,8,75,101,121,69,114,114,111,114, + 114,20,0,0,0,114,41,0,0,0,114,18,0,0,0,218, + 8,95,119,101,97,107,114,101,102,90,3,114,101,102,41,3, + 114,15,0,0,0,114,21,0,0,0,114,53,0,0,0,114, + 10,0,0,0,41,1,114,15,0,0,0,114,11,0,0,0, + 114,45,0,0,0,159,0,0,0,115,24,0,0,0,0,4, + 4,1,2,1,14,1,14,1,6,1,8,1,8,1,10,2, + 8,1,12,2,16,1,114,45,0,0,0,99,1,0,0,0, + 0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,0, + 115,62,0,0,0,116,0,124,0,131,1,125,1,116,1,106, + 2,131,0,1,0,121,12,124,1,106,3,131,0,1,0,87, + 0,110,20,4,0,116,4,107,10,114,48,1,0,1,0,1, + 0,89,0,110,10,88,0,124,1,106,5,131,0,1,0,100, + 1,83,0,41,2,97,21,1,0,0,82,101,108,101,97,115, + 101,32,116,104,101,32,103,108,111,98,97,108,32,105,109,112, + 111,114,116,32,108,111,99,107,44,32,97,110,100,32,97,99, + 113,117,105,114,101,115,32,116,104,101,110,32,114,101,108,101, + 97,115,101,32,116,104,101,10,32,32,32,32,109,111,100,117, + 108,101,32,108,111,99,107,32,102,111,114,32,97,32,103,105, + 118,101,110,32,109,111,100,117,108,101,32,110,97,109,101,46, + 10,32,32,32,32,84,104,105,115,32,105,115,32,117,115,101, + 100,32,116,111,32,101,110,115,117,114,101,32,97,32,109,111, + 100,117,108,101,32,105,115,32,99,111,109,112,108,101,116,101, + 108,121,32,105,110,105,116,105,97,108,105,122,101,100,44,32, + 105,110,32,116,104,101,10,32,32,32,32,101,118,101,110,116, + 32,105,116,32,105,115,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,32,98,121,32,97,110,111,116,104,101,114, + 32,116,104,114,101,97,100,46,10,10,32,32,32,32,83,104, + 111,117,108,100,32,111,110,108,121,32,98,101,32,99,97,108, + 108,101,100,32,119,105,116,104,32,116,104,101,32,105,109,112, + 111,114,116,32,108,111,99,107,32,116,97,107,101,110,46,78, + 41,6,114,45,0,0,0,114,46,0,0,0,114,47,0,0, + 0,114,34,0,0,0,114,17,0,0,0,114,35,0,0,0, + 41,2,114,15,0,0,0,114,21,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,19,95,108,111, + 99,107,95,117,110,108,111,99,107,95,109,111,100,117,108,101, + 178,0,0,0,115,14,0,0,0,0,7,8,1,8,1,2, + 1,12,1,14,3,6,2,114,56,0,0,0,99,1,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,79,0,0, + 0,115,10,0,0,0,124,0,124,1,124,2,142,1,83,0, + 41,1,97,46,1,0,0,114,101,109,111,118,101,95,105,109, + 112,111,114,116,108,105,98,95,102,114,97,109,101,115,32,105, + 110,32,105,109,112,111,114,116,46,99,32,119,105,108,108,32, + 97,108,119,97,121,115,32,114,101,109,111,118,101,32,115,101, + 113,117,101,110,99,101,115,10,32,32,32,32,111,102,32,105, + 109,112,111,114,116,108,105,98,32,102,114,97,109,101,115,32, + 116,104,97,116,32,101,110,100,32,119,105,116,104,32,97,32, + 99,97,108,108,32,116,111,32,116,104,105,115,32,102,117,110, + 99,116,105,111,110,10,10,32,32,32,32,85,115,101,32,105, + 116,32,105,110,115,116,101,97,100,32,111,102,32,97,32,110, + 111,114,109,97,108,32,99,97,108,108,32,105,110,32,112,108, + 97,99,101,115,32,119,104,101,114,101,32,105,110,99,108,117, + 100,105,110,103,32,116,104,101,32,105,109,112,111,114,116,108, + 105,98,10,32,32,32,32,102,114,97,109,101,115,32,105,110, + 116,114,111,100,117,99,101,115,32,117,110,119,97,110,116,101, + 100,32,110,111,105,115,101,32,105,110,116,111,32,116,104,101, + 32,116,114,97,99,101,98,97,99,107,32,40,101,46,103,46, + 32,119,104,101,110,32,101,120,101,99,117,116,105,110,103,10, + 32,32,32,32,109,111,100,117,108,101,32,99,111,100,101,41, + 10,32,32,32,32,114,10,0,0,0,41,3,218,1,102,114, + 49,0,0,0,90,4,107,119,100,115,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,25,95,99,97,108,108, + 95,119,105,116,104,95,102,114,97,109,101,115,95,114,101,109, + 111,118,101,100,197,0,0,0,115,2,0,0,0,0,8,114, + 58,0,0,0,114,33,0,0,0,41,1,218,9,118,101,114, + 98,111,115,105,116,121,99,1,0,0,0,1,0,0,0,3, + 0,0,0,5,0,0,0,71,0,0,0,115,54,0,0,0, + 116,0,106,1,106,2,124,1,107,5,114,50,124,0,106,3, + 100,6,131,1,115,30,100,3,124,0,23,0,125,0,116,4, + 124,0,106,5,124,2,142,0,116,0,106,6,100,4,141,2, + 1,0,100,5,83,0,41,7,122,61,80,114,105,110,116,32, + 116,104,101,32,109,101,115,115,97,103,101,32,116,111,32,115, + 116,100,101,114,114,32,105,102,32,45,118,47,80,89,84,72, + 79,78,86,69,82,66,79,83,69,32,105,115,32,116,117,114, + 110,101,100,32,111,110,46,250,1,35,250,7,105,109,112,111, + 114,116,32,122,2,35,32,41,1,90,4,102,105,108,101,78, + 41,2,114,60,0,0,0,114,61,0,0,0,41,7,114,14, 0,0,0,218,5,102,108,97,103,115,218,7,118,101,114,98, 111,115,101,218,10,115,116,97,114,116,115,119,105,116,104,218, - 5,112,114,105,110,116,114,50,0,0,0,218,6,115,116,100, - 101,114,114,41,3,218,7,109,101,115,115,97,103,101,114,66, - 0,0,0,114,29,0,0,0,114,10,0,0,0,114,10,0, + 5,112,114,105,110,116,114,38,0,0,0,218,6,115,116,100, + 101,114,114,41,3,218,7,109,101,115,115,97,103,101,114,59, + 0,0,0,114,49,0,0,0,114,10,0,0,0,114,10,0, 0,0,114,11,0,0,0,218,16,95,118,101,114,98,111,115, - 101,95,109,101,115,115,97,103,101,225,0,0,0,115,8,0, - 0,0,0,2,18,1,15,1,10,1,114,75,0,0,0,99, + 101,95,109,101,115,115,97,103,101,208,0,0,0,115,8,0, + 0,0,0,2,12,1,10,1,8,1,114,68,0,0,0,99, 1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 3,0,0,0,115,35,0,0,0,135,0,0,102,1,0,100, - 1,0,100,2,0,134,0,0,125,1,0,116,0,0,124,1, - 0,136,0,0,131,2,0,1,124,1,0,83,41,3,122,49, - 68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,114, - 105,102,121,32,116,104,101,32,110,97,109,101,100,32,109,111, - 100,117,108,101,32,105,115,32,98,117,105,108,116,45,105,110, - 46,99,2,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,19,0,0,0,115,55,0,0,0,124,1,0,116,0, - 0,106,1,0,107,7,0,114,42,0,116,2,0,100,1,0, - 106,3,0,124,1,0,131,1,0,100,2,0,124,1,0,131, - 1,1,130,1,0,136,0,0,124,0,0,124,1,0,131,2, - 0,83,41,3,78,122,29,123,33,114,125,32,105,115,32,110, - 111,116,32,97,32,98,117,105,108,116,45,105,110,32,109,111, - 100,117,108,101,114,15,0,0,0,41,4,114,14,0,0,0, - 218,20,98,117,105,108,116,105,110,95,109,111,100,117,108,101, - 95,110,97,109,101,115,218,11,73,109,112,111,114,116,69,114, - 114,111,114,114,50,0,0,0,41,2,114,19,0,0,0,218, - 8,102,117,108,108,110,97,109,101,41,1,218,3,102,120,110, - 114,10,0,0,0,114,11,0,0,0,218,25,95,114,101,113, - 117,105,114,101,115,95,98,117,105,108,116,105,110,95,119,114, - 97,112,112,101,114,235,0,0,0,115,8,0,0,0,0,1, - 15,1,18,1,9,1,122,52,95,114,101,113,117,105,114,101, - 115,95,98,117,105,108,116,105,110,46,60,108,111,99,97,108, - 115,62,46,95,114,101,113,117,105,114,101,115,95,98,117,105, - 108,116,105,110,95,119,114,97,112,112,101,114,41,1,114,12, - 0,0,0,41,2,114,79,0,0,0,114,80,0,0,0,114, - 10,0,0,0,41,1,114,79,0,0,0,114,11,0,0,0, - 218,17,95,114,101,113,117,105,114,101,115,95,98,117,105,108, - 116,105,110,233,0,0,0,115,6,0,0,0,0,2,18,5, - 13,1,114,81,0,0,0,99,1,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,3,0,0,0,115,35,0,0, - 0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0, - 125,1,0,116,0,0,124,1,0,136,0,0,131,2,0,1, - 124,1,0,83,41,3,122,47,68,101,99,111,114,97,116,111, - 114,32,116,111,32,118,101,114,105,102,121,32,116,104,101,32, - 110,97,109,101,100,32,109,111,100,117,108,101,32,105,115,32, - 102,114,111,122,101,110,46,99,2,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,19,0,0,0,115,55,0,0, - 0,116,0,0,106,1,0,124,1,0,131,1,0,115,42,0, - 116,2,0,100,1,0,106,3,0,124,1,0,131,1,0,100, - 2,0,124,1,0,131,1,1,130,1,0,136,0,0,124,0, - 0,124,1,0,131,2,0,83,41,3,78,122,27,123,33,114, - 125,32,105,115,32,110,111,116,32,97,32,102,114,111,122,101, - 110,32,109,111,100,117,108,101,114,15,0,0,0,41,4,114, - 57,0,0,0,218,9,105,115,95,102,114,111,122,101,110,114, - 77,0,0,0,114,50,0,0,0,41,2,114,19,0,0,0, - 114,78,0,0,0,41,1,114,79,0,0,0,114,10,0,0, + 3,0,0,0,115,26,0,0,0,135,0,102,1,100,1,100, + 2,132,8,125,1,116,0,124,1,136,0,131,2,1,0,124, + 1,83,0,41,3,122,49,68,101,99,111,114,97,116,111,114, + 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, + 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98, + 117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,19,0,0,0,115,38,0, + 0,0,124,1,116,0,106,1,107,7,114,28,116,2,100,1, + 106,3,124,1,131,1,124,1,100,2,141,2,130,1,136,0, + 124,0,124,1,131,2,83,0,41,3,78,122,29,123,33,114, + 125,32,105,115,32,110,111,116,32,97,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,41,1,114,15,0,0, + 0,41,4,114,14,0,0,0,218,20,98,117,105,108,116,105, + 110,95,109,111,100,117,108,101,95,110,97,109,101,115,218,11, + 73,109,112,111,114,116,69,114,114,111,114,114,38,0,0,0, + 41,2,114,26,0,0,0,218,8,102,117,108,108,110,97,109, + 101,41,1,218,3,102,120,110,114,10,0,0,0,114,11,0, + 0,0,218,25,95,114,101,113,117,105,114,101,115,95,98,117, + 105,108,116,105,110,95,119,114,97,112,112,101,114,218,0,0, + 0,115,8,0,0,0,0,1,10,1,10,1,8,1,122,52, + 95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,105, + 110,46,60,108,111,99,97,108,115,62,46,95,114,101,113,117, + 105,114,101,115,95,98,117,105,108,116,105,110,95,119,114,97, + 112,112,101,114,41,1,114,12,0,0,0,41,2,114,72,0, + 0,0,114,73,0,0,0,114,10,0,0,0,41,1,114,72, + 0,0,0,114,11,0,0,0,218,17,95,114,101,113,117,105, + 114,101,115,95,98,117,105,108,116,105,110,216,0,0,0,115, + 6,0,0,0,0,2,12,5,10,1,114,74,0,0,0,99, + 1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 3,0,0,0,115,26,0,0,0,135,0,102,1,100,1,100, + 2,132,8,125,1,116,0,124,1,136,0,131,2,1,0,124, + 1,83,0,41,3,122,47,68,101,99,111,114,97,116,111,114, + 32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110, + 97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,102, + 114,111,122,101,110,46,99,2,0,0,0,0,0,0,0,2, + 0,0,0,4,0,0,0,19,0,0,0,115,38,0,0,0, + 116,0,106,1,124,1,131,1,115,28,116,2,100,1,106,3, + 124,1,131,1,124,1,100,2,141,2,130,1,136,0,124,0, + 124,1,131,2,83,0,41,3,78,122,27,123,33,114,125,32, + 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, + 109,111,100,117,108,101,41,1,114,15,0,0,0,41,4,114, + 46,0,0,0,218,9,105,115,95,102,114,111,122,101,110,114, + 70,0,0,0,114,38,0,0,0,41,2,114,26,0,0,0, + 114,71,0,0,0,41,1,114,72,0,0,0,114,10,0,0, 0,114,11,0,0,0,218,24,95,114,101,113,117,105,114,101, 115,95,102,114,111,122,101,110,95,119,114,97,112,112,101,114, - 246,0,0,0,115,8,0,0,0,0,1,15,1,18,1,9, + 229,0,0,0,115,8,0,0,0,0,1,10,1,10,1,8, 1,122,50,95,114,101,113,117,105,114,101,115,95,102,114,111, 122,101,110,46,60,108,111,99,97,108,115,62,46,95,114,101, 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, - 97,112,112,101,114,41,1,114,12,0,0,0,41,2,114,79, - 0,0,0,114,83,0,0,0,114,10,0,0,0,41,1,114, - 79,0,0,0,114,11,0,0,0,218,16,95,114,101,113,117, - 105,114,101,115,95,102,114,111,122,101,110,244,0,0,0,115, - 6,0,0,0,0,2,18,5,13,1,114,84,0,0,0,99, + 97,112,112,101,114,41,1,114,12,0,0,0,41,2,114,72, + 0,0,0,114,76,0,0,0,114,10,0,0,0,41,1,114, + 72,0,0,0,114,11,0,0,0,218,16,95,114,101,113,117, + 105,114,101,115,95,102,114,111,122,101,110,227,0,0,0,115, + 6,0,0,0,0,2,12,5,10,1,114,77,0,0,0,99, 2,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 67,0,0,0,115,81,0,0,0,116,0,0,124,1,0,124, - 0,0,131,2,0,125,2,0,124,1,0,116,1,0,106,2, - 0,107,6,0,114,67,0,116,1,0,106,2,0,124,1,0, - 25,125,3,0,116,3,0,124,2,0,124,3,0,131,2,0, - 1,116,1,0,106,2,0,124,1,0,25,83,116,4,0,124, - 2,0,131,1,0,83,100,1,0,83,41,2,122,128,76,111, - 97,100,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,32,105,110,116,111,32,115,121,115, - 46,109,111,100,117,108,101,115,32,97,110,100,32,114,101,116, - 117,114,110,32,105,116,46,10,10,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,108,111,97, - 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,32, - 105,110,115,116,101,97,100,46,10,10,32,32,32,32,78,41, - 5,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, - 100,101,114,114,14,0,0,0,114,21,0,0,0,218,5,95, - 101,120,101,99,218,5,95,108,111,97,100,41,4,114,19,0, - 0,0,114,78,0,0,0,218,4,115,112,101,99,218,6,109, - 111,100,117,108,101,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, - 108,101,95,115,104,105,109,0,1,0,0,115,12,0,0,0, - 0,6,15,1,15,1,13,1,13,1,11,2,114,90,0,0, - 0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,0, - 0,0,67,0,0,0,115,6,1,0,0,116,0,0,124,0, - 0,100,1,0,100,0,0,131,3,0,125,1,0,116,1,0, - 124,1,0,100,2,0,131,2,0,114,71,0,121,17,0,124, - 1,0,106,2,0,124,0,0,131,1,0,83,87,110,18,0, - 4,116,3,0,107,10,0,114,70,0,1,1,1,89,110,1, - 0,88,121,13,0,124,0,0,106,4,0,125,2,0,87,110, - 18,0,4,116,5,0,107,10,0,114,104,0,1,1,1,89, - 110,23,0,88,124,2,0,100,0,0,107,9,0,114,127,0, - 116,6,0,124,2,0,131,1,0,83,121,13,0,124,0,0, - 106,7,0,125,3,0,87,110,24,0,4,116,5,0,107,10, - 0,114,166,0,1,1,1,100,3,0,125,3,0,89,110,1, - 0,88,121,13,0,124,0,0,106,8,0,125,4,0,87,110, - 59,0,4,116,5,0,107,10,0,114,241,0,1,1,1,124, - 1,0,100,0,0,107,8,0,114,221,0,100,4,0,106,9, - 0,124,3,0,131,1,0,83,100,5,0,106,9,0,124,3, - 0,124,1,0,131,2,0,83,89,110,17,0,88,100,6,0, - 106,9,0,124,3,0,124,4,0,131,2,0,83,100,0,0, - 83,41,7,78,218,10,95,95,108,111,97,100,101,114,95,95, - 218,11,109,111,100,117,108,101,95,114,101,112,114,250,1,63, - 122,13,60,109,111,100,117,108,101,32,123,33,114,125,62,122, - 20,60,109,111,100,117,108,101,32,123,33,114,125,32,40,123, - 33,114,125,41,62,122,23,60,109,111,100,117,108,101,32,123, - 33,114,125,32,102,114,111,109,32,123,33,114,125,62,41,10, - 114,6,0,0,0,114,4,0,0,0,114,92,0,0,0,218, - 9,69,120,99,101,112,116,105,111,110,218,8,95,95,115,112, - 101,99,95,95,218,14,65,116,116,114,105,98,117,116,101,69, - 114,114,111,114,218,22,95,109,111,100,117,108,101,95,114,101, - 112,114,95,102,114,111,109,95,115,112,101,99,114,1,0,0, - 0,218,8,95,95,102,105,108,101,95,95,114,50,0,0,0, - 41,5,114,89,0,0,0,218,6,108,111,97,100,101,114,114, - 88,0,0,0,114,15,0,0,0,218,8,102,105,108,101,110, - 97,109,101,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,218,12,95,109,111,100,117,108,101,95,114,101,112,114, - 16,1,0,0,115,46,0,0,0,0,2,18,1,15,4,3, - 1,17,1,13,1,5,1,3,1,13,1,13,1,5,2,12, - 1,10,4,3,1,13,1,13,1,11,1,3,1,13,1,13, - 1,12,1,13,2,21,2,114,101,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,52,0,0,0,101,0,0,90,1,0,100,0,0,90, - 2,0,100,1,0,100,2,0,132,0,0,90,3,0,100,3, - 0,100,4,0,132,0,0,90,4,0,100,5,0,100,6,0, - 132,0,0,90,5,0,100,7,0,83,41,8,218,17,95,105, - 110,115,116,97,108,108,101,100,95,115,97,102,101,108,121,99, - 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, - 67,0,0,0,115,25,0,0,0,124,1,0,124,0,0,95, - 0,0,124,1,0,106,1,0,124,0,0,95,2,0,100,0, - 0,83,41,1,78,41,3,218,7,95,109,111,100,117,108,101, - 114,95,0,0,0,218,5,95,115,112,101,99,41,2,114,19, - 0,0,0,114,89,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,20,0,0,0,54,1,0,0, - 115,4,0,0,0,0,1,9,1,122,26,95,105,110,115,116, + 67,0,0,0,115,64,0,0,0,116,0,124,1,124,0,131, + 2,125,2,124,1,116,1,106,2,107,6,114,52,116,1,106, + 2,124,1,25,0,125,3,116,3,124,2,124,3,131,2,1, + 0,116,1,106,2,124,1,25,0,83,0,110,8,116,4,124, + 2,131,1,83,0,100,1,83,0,41,2,122,128,76,111,97, + 100,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,32,105,110,116,111,32,115,121,115,46, + 109,111,100,117,108,101,115,32,97,110,100,32,114,101,116,117, + 114,110,32,105,116,46,10,10,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,108,111,97,100, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,78,41,5, + 218,16,115,112,101,99,95,102,114,111,109,95,108,111,97,100, + 101,114,114,14,0,0,0,218,7,109,111,100,117,108,101,115, + 218,5,95,101,120,101,99,218,5,95,108,111,97,100,41,4, + 114,26,0,0,0,114,71,0,0,0,218,4,115,112,101,99, + 218,6,109,111,100,117,108,101,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,17,95,108,111,97,100,95,109, + 111,100,117,108,101,95,115,104,105,109,239,0,0,0,115,12, + 0,0,0,0,6,10,1,10,1,10,1,10,1,12,2,114, + 84,0,0,0,99,1,0,0,0,0,0,0,0,5,0,0, + 0,35,0,0,0,67,0,0,0,115,218,0,0,0,116,0, + 124,0,100,1,100,0,131,3,125,1,116,1,124,1,100,2, + 131,2,114,54,121,10,124,1,106,2,124,0,131,1,83,0, + 4,0,116,3,107,10,114,52,1,0,1,0,1,0,89,0, + 110,2,88,0,121,10,124,0,106,4,125,2,87,0,110,20, + 4,0,116,5,107,10,114,84,1,0,1,0,1,0,89,0, + 110,18,88,0,124,2,100,0,107,9,114,102,116,6,124,2, + 131,1,83,0,121,10,124,0,106,7,125,3,87,0,110,24, + 4,0,116,5,107,10,114,136,1,0,1,0,1,0,100,3, + 125,3,89,0,110,2,88,0,121,10,124,0,106,8,125,4, + 87,0,110,52,4,0,116,5,107,10,114,200,1,0,1,0, + 1,0,124,1,100,0,107,8,114,184,100,4,106,9,124,3, + 131,1,83,0,110,12,100,5,106,9,124,3,124,1,131,2, + 83,0,89,0,110,14,88,0,100,6,106,9,124,3,124,4, + 131,2,83,0,100,0,83,0,41,7,78,218,10,95,95,108, + 111,97,100,101,114,95,95,218,11,109,111,100,117,108,101,95, + 114,101,112,114,250,1,63,122,13,60,109,111,100,117,108,101, + 32,123,33,114,125,62,122,20,60,109,111,100,117,108,101,32, + 123,33,114,125,32,40,123,33,114,125,41,62,122,23,60,109, + 111,100,117,108,101,32,123,33,114,125,32,102,114,111,109,32, + 123,33,114,125,62,41,10,114,6,0,0,0,114,4,0,0, + 0,114,86,0,0,0,218,9,69,120,99,101,112,116,105,111, + 110,218,8,95,95,115,112,101,99,95,95,218,14,65,116,116, + 114,105,98,117,116,101,69,114,114,111,114,218,22,95,109,111, + 100,117,108,101,95,114,101,112,114,95,102,114,111,109,95,115, + 112,101,99,114,1,0,0,0,218,8,95,95,102,105,108,101, + 95,95,114,38,0,0,0,41,5,114,83,0,0,0,218,6, + 108,111,97,100,101,114,114,82,0,0,0,114,15,0,0,0, + 218,8,102,105,108,101,110,97,109,101,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,12,95,109,111,100,117, + 108,101,95,114,101,112,114,255,0,0,0,115,46,0,0,0, + 0,2,12,1,10,4,2,1,10,1,14,1,6,1,2,1, + 10,1,14,1,6,2,8,1,8,4,2,1,10,1,14,1, + 10,1,2,1,10,1,14,1,8,1,12,2,18,2,114,95, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,64,0,0,0,115,36,0,0,0,101,0,90, + 1,100,0,90,2,100,1,100,2,132,0,90,3,100,3,100, + 4,132,0,90,4,100,5,100,6,132,0,90,5,100,7,83, + 0,41,8,218,17,95,105,110,115,116,97,108,108,101,100,95, + 115,97,102,101,108,121,99,2,0,0,0,0,0,0,0,2, + 0,0,0,2,0,0,0,67,0,0,0,115,18,0,0,0, + 124,1,124,0,95,0,124,1,106,1,124,0,95,2,100,0, + 83,0,41,1,78,41,3,218,7,95,109,111,100,117,108,101, + 114,89,0,0,0,218,5,95,115,112,101,99,41,2,114,26, + 0,0,0,114,83,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,27,0,0,0,37,1,0,0, + 115,4,0,0,0,0,1,6,1,122,26,95,105,110,115,116, 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,105, 110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,100, - 1,0,124,0,0,106,0,0,95,1,0,124,0,0,106,2, - 0,116,3,0,106,4,0,124,0,0,106,0,0,106,5,0, - 60,100,0,0,83,41,2,78,84,41,6,114,104,0,0,0, - 218,13,95,105,110,105,116,105,97,108,105,122,105,110,103,114, - 103,0,0,0,114,14,0,0,0,114,21,0,0,0,114,15, - 0,0,0,41,1,114,19,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,23,0,0,0,58,1, - 0,0,115,4,0,0,0,0,4,12,1,122,27,95,105,110, - 115,116,97,108,108,101,100,95,115,97,102,101,108,121,46,95, - 95,101,110,116,101,114,95,95,99,1,0,0,0,0,0,0, - 0,3,0,0,0,17,0,0,0,71,0,0,0,115,121,0, - 0,0,122,101,0,124,0,0,106,0,0,125,2,0,116,1, - 0,100,1,0,100,2,0,132,0,0,124,1,0,68,131,1, - 0,131,1,0,114,78,0,121,17,0,116,2,0,106,3,0, - 124,2,0,106,4,0,61,87,113,100,0,4,116,5,0,107, - 10,0,114,74,0,1,1,1,89,113,100,0,88,110,22,0, - 116,6,0,100,3,0,124,2,0,106,4,0,124,2,0,106, - 7,0,131,3,0,1,87,100,0,0,100,4,0,124,0,0, - 106,0,0,95,8,0,88,100,0,0,83,41,5,78,99,1, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, - 0,0,0,115,27,0,0,0,124,0,0,93,17,0,125,1, - 0,124,1,0,100,0,0,107,9,0,86,1,113,3,0,100, - 0,0,83,41,1,78,114,10,0,0,0,41,2,114,24,0, - 0,0,114,25,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,26,0,0,0,68,1,0,0,115, - 2,0,0,0,6,0,122,45,95,105,110,115,116,97,108,108, - 101,100,95,115,97,102,101,108,121,46,95,95,101,120,105,116, - 95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,122,18,105,109,112,111,114,116,32,123,33, - 114,125,32,35,32,123,33,114,125,70,41,9,114,104,0,0, - 0,114,27,0,0,0,114,14,0,0,0,114,21,0,0,0, - 114,15,0,0,0,114,28,0,0,0,114,75,0,0,0,114, - 99,0,0,0,114,105,0,0,0,41,3,114,19,0,0,0, - 114,29,0,0,0,114,88,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,30,0,0,0,65,1, - 0,0,115,18,0,0,0,0,1,3,1,9,1,25,1,3, - 1,17,1,13,1,8,2,26,2,122,26,95,105,110,115,116, - 97,108,108,101,100,95,115,97,102,101,108,121,46,95,95,101, - 120,105,116,95,95,78,41,6,114,1,0,0,0,114,0,0, - 0,0,114,2,0,0,0,114,20,0,0,0,114,23,0,0, - 0,114,30,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,102,0,0,0,52, - 1,0,0,115,6,0,0,0,12,2,12,4,12,7,114,102, - 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 8,0,0,0,64,0,0,0,115,172,0,0,0,101,0,0, - 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, - 2,0,100,3,0,100,4,0,100,3,0,100,5,0,100,3, - 0,100,6,0,100,7,0,132,0,3,90,4,0,100,8,0, - 100,9,0,132,0,0,90,5,0,100,10,0,100,11,0,132, - 0,0,90,6,0,101,7,0,100,12,0,100,13,0,132,0, - 0,131,1,0,90,8,0,101,8,0,106,9,0,100,14,0, - 100,13,0,132,0,0,131,1,0,90,8,0,101,7,0,100, - 15,0,100,16,0,132,0,0,131,1,0,90,10,0,101,7, - 0,100,17,0,100,18,0,132,0,0,131,1,0,90,11,0, - 101,11,0,106,9,0,100,19,0,100,18,0,132,0,0,131, - 1,0,90,11,0,100,3,0,83,41,20,218,10,77,111,100, - 117,108,101,83,112,101,99,97,208,5,0,0,84,104,101,32, - 115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,111, - 114,32,97,32,109,111,100,117,108,101,44,32,117,115,101,100, - 32,102,111,114,32,108,111,97,100,105,110,103,46,10,10,32, - 32,32,32,65,32,109,111,100,117,108,101,39,115,32,115,112, - 101,99,32,105,115,32,116,104,101,32,115,111,117,114,99,101, - 32,102,111,114,32,105,110,102,111,114,109,97,116,105,111,110, - 32,97,98,111,117,116,32,116,104,101,32,109,111,100,117,108, - 101,46,32,32,70,111,114,10,32,32,32,32,100,97,116,97, - 32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104, - 32,116,104,101,32,109,111,100,117,108,101,44,32,105,110,99, - 108,117,100,105,110,103,32,115,111,117,114,99,101,44,32,117, - 115,101,32,116,104,101,32,115,112,101,99,39,115,10,32,32, - 32,32,108,111,97,100,101,114,46,10,10,32,32,32,32,96, - 110,97,109,101,96,32,105,115,32,116,104,101,32,97,98,115, - 111,108,117,116,101,32,110,97,109,101,32,111,102,32,116,104, - 101,32,109,111,100,117,108,101,46,32,32,96,108,111,97,100, - 101,114,96,32,105,115,32,116,104,101,32,108,111,97,100,101, - 114,10,32,32,32,32,116,111,32,117,115,101,32,119,104,101, - 110,32,108,111,97,100,105,110,103,32,116,104,101,32,109,111, - 100,117,108,101,46,32,32,96,112,97,114,101,110,116,96,32, - 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116, - 104,101,10,32,32,32,32,112,97,99,107,97,103,101,32,116, - 104,101,32,109,111,100,117,108,101,32,105,115,32,105,110,46, - 32,32,84,104,101,32,112,97,114,101,110,116,32,105,115,32, - 100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101, - 32,110,97,109,101,46,10,10,32,32,32,32,96,105,115,95, - 112,97,99,107,97,103,101,96,32,100,101,116,101,114,109,105, - 110,101,115,32,105,102,32,116,104,101,32,109,111,100,117,108, - 101,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32, - 97,32,112,97,99,107,97,103,101,32,111,114,10,32,32,32, - 32,110,111,116,46,32,32,79,110,32,109,111,100,117,108,101, - 115,32,116,104,105,115,32,105,115,32,114,101,102,108,101,99, - 116,101,100,32,98,121,32,116,104,101,32,96,95,95,112,97, - 116,104,95,95,96,32,97,116,116,114,105,98,117,116,101,46, - 10,10,32,32,32,32,96,111,114,105,103,105,110,96,32,105, - 115,32,116,104,101,32,115,112,101,99,105,102,105,99,32,108, - 111,99,97,116,105,111,110,32,117,115,101,100,32,98,121,32, - 116,104,101,32,108,111,97,100,101,114,32,102,114,111,109,32, - 119,104,105,99,104,32,116,111,10,32,32,32,32,108,111,97, - 100,32,116,104,101,32,109,111,100,117,108,101,44,32,105,102, - 32,116,104,97,116,32,105,110,102,111,114,109,97,116,105,111, - 110,32,105,115,32,97,118,97,105,108,97,98,108,101,46,32, - 32,87,104,101,110,32,102,105,108,101,110,97,109,101,32,105, - 115,10,32,32,32,32,115,101,116,44,32,111,114,105,103,105, - 110,32,119,105,108,108,32,109,97,116,99,104,46,10,10,32, - 32,32,32,96,104,97,115,95,108,111,99,97,116,105,111,110, - 96,32,105,110,100,105,99,97,116,101,115,32,116,104,97,116, - 32,97,32,115,112,101,99,39,115,32,34,111,114,105,103,105, - 110,34,32,114,101,102,108,101,99,116,115,32,97,32,108,111, - 99,97,116,105,111,110,46,10,32,32,32,32,87,104,101,110, - 32,116,104,105,115,32,105,115,32,84,114,117,101,44,32,96, - 95,95,102,105,108,101,95,95,96,32,97,116,116,114,105,98, - 117,116,101,32,111,102,32,116,104,101,32,109,111,100,117,108, - 101,32,105,115,32,115,101,116,46,10,10,32,32,32,32,96, - 99,97,99,104,101,100,96,32,105,115,32,116,104,101,32,108, - 111,99,97,116,105,111,110,32,111,102,32,116,104,101,32,99, - 97,99,104,101,100,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,44,32,105,102,32,97,110,121,46,32,32,73,116, - 10,32,32,32,32,99,111,114,114,101,115,112,111,110,100,115, - 32,116,111,32,116,104,101,32,96,95,95,99,97,99,104,101, - 100,95,95,96,32,97,116,116,114,105,98,117,116,101,46,10, - 10,32,32,32,32,96,115,117,98,109,111,100,117,108,101,95, - 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, - 96,32,105,115,32,116,104,101,32,115,101,113,117,101,110,99, - 101,32,111,102,32,112,97,116,104,32,101,110,116,114,105,101, - 115,32,116,111,10,32,32,32,32,115,101,97,114,99,104,32, - 119,104,101,110,32,105,109,112,111,114,116,105,110,103,32,115, - 117,98,109,111,100,117,108,101,115,46,32,32,73,102,32,115, - 101,116,44,32,105,115,95,112,97,99,107,97,103,101,32,115, - 104,111,117,108,100,32,98,101,10,32,32,32,32,84,114,117, - 101,45,45,97,110,100,32,70,97,108,115,101,32,111,116,104, - 101,114,119,105,115,101,46,10,10,32,32,32,32,80,97,99, - 107,97,103,101,115,32,97,114,101,32,115,105,109,112,108,121, - 32,109,111,100,117,108,101,115,32,116,104,97,116,32,40,109, - 97,121,41,32,104,97,118,101,32,115,117,98,109,111,100,117, - 108,101,115,46,32,32,73,102,32,97,32,115,112,101,99,10, - 32,32,32,32,104,97,115,32,97,32,110,111,110,45,78,111, - 110,101,32,118,97,108,117,101,32,105,110,32,96,115,117,98, - 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, - 99,97,116,105,111,110,115,96,44,32,116,104,101,32,105,109, - 112,111,114,116,10,32,32,32,32,115,121,115,116,101,109,32, - 119,105,108,108,32,99,111,110,115,105,100,101,114,32,109,111, - 100,117,108,101,115,32,108,111,97,100,101,100,32,102,114,111, - 109,32,116,104,101,32,115,112,101,99,32,97,115,32,112,97, - 99,107,97,103,101,115,46,10,10,32,32,32,32,79,110,108, - 121,32,102,105,110,100,101,114,115,32,40,115,101,101,32,105, - 109,112,111,114,116,108,105,98,46,97,98,99,46,77,101,116, - 97,80,97,116,104,70,105,110,100,101,114,32,97,110,100,10, - 32,32,32,32,105,109,112,111,114,116,108,105,98,46,97,98, - 99,46,80,97,116,104,69,110,116,114,121,70,105,110,100,101, - 114,41,32,115,104,111,117,108,100,32,109,111,100,105,102,121, - 32,77,111,100,117,108,101,83,112,101,99,32,105,110,115,116, - 97,110,99,101,115,46,10,10,32,32,32,32,218,6,111,114, - 105,103,105,110,78,218,12,108,111,97,100,101,114,95,115,116, - 97,116,101,218,10,105,115,95,112,97,99,107,97,103,101,99, - 3,0,0,0,3,0,0,0,6,0,0,0,2,0,0,0, - 67,0,0,0,115,79,0,0,0,124,1,0,124,0,0,95, - 0,0,124,2,0,124,0,0,95,1,0,124,3,0,124,0, - 0,95,2,0,124,4,0,124,0,0,95,3,0,124,5,0, - 114,48,0,103,0,0,110,3,0,100,0,0,124,0,0,95, - 4,0,100,1,0,124,0,0,95,5,0,100,0,0,124,0, - 0,95,6,0,100,0,0,83,41,2,78,70,41,7,114,15, - 0,0,0,114,99,0,0,0,114,107,0,0,0,114,108,0, - 0,0,218,26,115,117,98,109,111,100,117,108,101,95,115,101, - 97,114,99,104,95,108,111,99,97,116,105,111,110,115,218,13, - 95,115,101,116,95,102,105,108,101,97,116,116,114,218,7,95, - 99,97,99,104,101,100,41,6,114,19,0,0,0,114,15,0, - 0,0,114,99,0,0,0,114,107,0,0,0,114,108,0,0, - 0,114,109,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,20,0,0,0,116,1,0,0,115,14, - 0,0,0,0,2,9,1,9,1,9,1,9,1,21,3,9, - 1,122,19,77,111,100,117,108,101,83,112,101,99,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,2, - 0,0,0,4,0,0,0,67,0,0,0,115,147,0,0,0, - 100,1,0,106,0,0,124,0,0,106,1,0,131,1,0,100, - 2,0,106,0,0,124,0,0,106,2,0,131,1,0,103,2, - 0,125,1,0,124,0,0,106,3,0,100,0,0,107,9,0, - 114,76,0,124,1,0,106,4,0,100,3,0,106,0,0,124, - 0,0,106,3,0,131,1,0,131,1,0,1,124,0,0,106, - 5,0,100,0,0,107,9,0,114,116,0,124,1,0,106,4, - 0,100,4,0,106,0,0,124,0,0,106,5,0,131,1,0, - 131,1,0,1,100,5,0,106,0,0,124,0,0,106,6,0, - 106,7,0,100,6,0,106,8,0,124,1,0,131,1,0,131, - 2,0,83,41,7,78,122,9,110,97,109,101,61,123,33,114, - 125,122,11,108,111,97,100,101,114,61,123,33,114,125,122,11, - 111,114,105,103,105,110,61,123,33,114,125,122,29,115,117,98, - 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, - 99,97,116,105,111,110,115,61,123,125,122,6,123,125,40,123, - 125,41,122,2,44,32,41,9,114,50,0,0,0,114,15,0, - 0,0,114,99,0,0,0,114,107,0,0,0,218,6,97,112, - 112,101,110,100,114,110,0,0,0,218,9,95,95,99,108,97, - 115,115,95,95,114,1,0,0,0,218,4,106,111,105,110,41, - 2,114,19,0,0,0,114,29,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,52,0,0,0,128, - 1,0,0,115,16,0,0,0,0,1,15,1,21,1,15,1, - 25,1,15,1,12,1,13,1,122,19,77,111,100,117,108,101, - 83,112,101,99,46,95,95,114,101,112,114,95,95,99,2,0, - 0,0,0,0,0,0,3,0,0,0,11,0,0,0,67,0, - 0,0,115,145,0,0,0,124,0,0,106,0,0,125,2,0, - 121,107,0,124,0,0,106,1,0,124,1,0,106,1,0,107, - 2,0,111,114,0,124,0,0,106,2,0,124,1,0,106,2, - 0,107,2,0,111,114,0,124,0,0,106,3,0,124,1,0, - 106,3,0,107,2,0,111,114,0,124,2,0,124,1,0,106, - 0,0,107,2,0,111,114,0,124,0,0,106,4,0,124,1, - 0,106,4,0,107,2,0,111,114,0,124,0,0,106,5,0, - 124,1,0,106,5,0,107,2,0,83,87,110,22,0,4,116, - 6,0,107,10,0,114,140,0,1,1,1,100,1,0,83,89, - 110,1,0,88,100,0,0,83,41,2,78,70,41,7,114,110, - 0,0,0,114,15,0,0,0,114,99,0,0,0,114,107,0, - 0,0,218,6,99,97,99,104,101,100,218,12,104,97,115,95, - 108,111,99,97,116,105,111,110,114,96,0,0,0,41,3,114, - 19,0,0,0,90,5,111,116,104,101,114,90,4,115,109,115, - 108,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 218,6,95,95,101,113,95,95,138,1,0,0,115,20,0,0, - 0,0,1,9,1,3,1,18,1,18,1,18,1,15,1,18, - 1,20,1,13,1,122,17,77,111,100,117,108,101,83,112,101, - 99,46,95,95,101,113,95,95,99,1,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,85,0, - 0,0,124,0,0,106,0,0,100,0,0,107,8,0,114,78, - 0,124,0,0,106,1,0,100,0,0,107,9,0,114,78,0, - 124,0,0,106,2,0,114,78,0,116,3,0,100,0,0,107, - 8,0,114,57,0,116,4,0,130,1,0,116,3,0,106,5, - 0,124,0,0,106,1,0,131,1,0,124,0,0,95,0,0, - 124,0,0,106,0,0,83,41,1,78,41,6,114,112,0,0, - 0,114,107,0,0,0,114,111,0,0,0,218,19,95,98,111, - 111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,108, - 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, - 69,114,114,111,114,90,11,95,103,101,116,95,99,97,99,104, - 101,100,41,1,114,19,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,116,0,0,0,150,1,0, - 0,115,12,0,0,0,0,2,15,1,24,1,12,1,6,1, - 21,1,122,17,77,111,100,117,108,101,83,112,101,99,46,99, - 97,99,104,101,100,99,2,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,124, - 1,0,124,0,0,95,0,0,100,0,0,83,41,1,78,41, - 1,114,112,0,0,0,41,2,114,19,0,0,0,114,116,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,116,0,0,0,159,1,0,0,115,2,0,0,0,0, - 2,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,46,0,0,0,124,0,0,106,0, - 0,100,1,0,107,8,0,114,35,0,124,0,0,106,1,0, - 106,2,0,100,2,0,131,1,0,100,3,0,25,83,124,0, - 0,106,1,0,83,100,1,0,83,41,4,122,32,84,104,101, + 0,0,3,0,0,0,67,0,0,0,115,28,0,0,0,100, + 1,124,0,106,0,95,1,124,0,106,2,116,3,106,4,124, + 0,106,0,106,5,60,0,100,0,83,0,41,2,78,84,41, + 6,114,98,0,0,0,218,13,95,105,110,105,116,105,97,108, + 105,122,105,110,103,114,97,0,0,0,114,14,0,0,0,114, + 79,0,0,0,114,15,0,0,0,41,1,114,26,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 48,0,0,0,41,1,0,0,115,4,0,0,0,0,4,8, + 1,122,27,95,105,110,115,116,97,108,108,101,100,95,115,97, + 102,101,108,121,46,95,95,101,110,116,101,114,95,95,99,1, + 0,0,0,0,0,0,0,3,0,0,0,17,0,0,0,71, + 0,0,0,115,98,0,0,0,122,82,124,0,106,0,125,2, + 116,1,100,1,100,2,132,0,124,1,68,0,131,1,131,1, + 114,64,121,14,116,2,106,3,124,2,106,4,61,0,87,0, + 113,80,4,0,116,5,107,10,114,60,1,0,1,0,1,0, + 89,0,113,80,88,0,110,16,116,6,100,3,124,2,106,4, + 124,2,106,7,131,3,1,0,87,0,100,0,100,4,124,0, + 106,0,95,8,88,0,100,0,83,0,41,5,78,99,1,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,0, + 0,0,115,22,0,0,0,124,0,93,14,125,1,124,1,100, + 0,107,9,86,0,1,0,113,2,100,0,83,0,41,1,78, + 114,10,0,0,0,41,2,90,2,46,48,90,3,97,114,103, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,250, + 9,60,103,101,110,101,120,112,114,62,51,1,0,0,115,2, + 0,0,0,4,0,122,45,95,105,110,115,116,97,108,108,101, + 100,95,115,97,102,101,108,121,46,95,95,101,120,105,116,95, + 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, + 120,112,114,62,122,18,105,109,112,111,114,116,32,123,33,114, + 125,32,35,32,123,33,114,125,70,41,9,114,98,0,0,0, + 218,3,97,110,121,114,14,0,0,0,114,79,0,0,0,114, + 15,0,0,0,114,54,0,0,0,114,68,0,0,0,114,93, + 0,0,0,114,99,0,0,0,41,3,114,26,0,0,0,114, + 49,0,0,0,114,82,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,50,0,0,0,48,1,0, + 0,115,18,0,0,0,0,1,2,1,6,1,18,1,2,1, + 14,1,14,1,8,2,20,2,122,26,95,105,110,115,116,97, + 108,108,101,100,95,115,97,102,101,108,121,46,95,95,101,120, + 105,116,95,95,78,41,6,114,1,0,0,0,114,0,0,0, + 0,114,2,0,0,0,114,27,0,0,0,114,48,0,0,0, + 114,50,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,96,0,0,0,35,1, + 0,0,115,6,0,0,0,8,2,8,4,8,7,114,96,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,64,0,0,0,115,114,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,2,100,2,100,3, + 156,3,100,4,100,5,132,2,90,4,100,6,100,7,132,0, + 90,5,100,8,100,9,132,0,90,6,101,7,100,10,100,11, + 132,0,131,1,90,8,101,8,106,9,100,12,100,11,132,0, + 131,1,90,8,101,7,100,13,100,14,132,0,131,1,90,10, + 101,7,100,15,100,16,132,0,131,1,90,11,101,11,106,9, + 100,17,100,16,132,0,131,1,90,11,100,2,83,0,41,18, + 218,10,77,111,100,117,108,101,83,112,101,99,97,208,5,0, + 0,84,104,101,32,115,112,101,99,105,102,105,99,97,116,105, + 111,110,32,102,111,114,32,97,32,109,111,100,117,108,101,44, + 32,117,115,101,100,32,102,111,114,32,108,111,97,100,105,110, + 103,46,10,10,32,32,32,32,65,32,109,111,100,117,108,101, + 39,115,32,115,112,101,99,32,105,115,32,116,104,101,32,115, + 111,117,114,99,101,32,102,111,114,32,105,110,102,111,114,109, + 97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32, + 109,111,100,117,108,101,46,32,32,70,111,114,10,32,32,32, + 32,100,97,116,97,32,97,115,115,111,99,105,97,116,101,100, + 32,119,105,116,104,32,116,104,101,32,109,111,100,117,108,101, + 44,32,105,110,99,108,117,100,105,110,103,32,115,111,117,114, + 99,101,44,32,117,115,101,32,116,104,101,32,115,112,101,99, + 39,115,10,32,32,32,32,108,111,97,100,101,114,46,10,10, + 32,32,32,32,96,110,97,109,101,96,32,105,115,32,116,104, + 101,32,97,98,115,111,108,117,116,101,32,110,97,109,101,32, + 111,102,32,116,104,101,32,109,111,100,117,108,101,46,32,32, + 96,108,111,97,100,101,114,96,32,105,115,32,116,104,101,32, + 108,111,97,100,101,114,10,32,32,32,32,116,111,32,117,115, + 101,32,119,104,101,110,32,108,111,97,100,105,110,103,32,116, + 104,101,32,109,111,100,117,108,101,46,32,32,96,112,97,114, + 101,110,116,96,32,105,115,32,116,104,101,32,110,97,109,101, + 32,111,102,32,116,104,101,10,32,32,32,32,112,97,99,107, + 97,103,101,32,116,104,101,32,109,111,100,117,108,101,32,105, + 115,32,105,110,46,32,32,84,104,101,32,112,97,114,101,110, + 116,32,105,115,32,100,101,114,105,118,101,100,32,102,114,111, + 109,32,116,104,101,32,110,97,109,101,46,10,10,32,32,32, + 32,96,105,115,95,112,97,99,107,97,103,101,96,32,100,101, + 116,101,114,109,105,110,101,115,32,105,102,32,116,104,101,32, + 109,111,100,117,108,101,32,105,115,32,99,111,110,115,105,100, + 101,114,101,100,32,97,32,112,97,99,107,97,103,101,32,111, + 114,10,32,32,32,32,110,111,116,46,32,32,79,110,32,109, + 111,100,117,108,101,115,32,116,104,105,115,32,105,115,32,114, + 101,102,108,101,99,116,101,100,32,98,121,32,116,104,101,32, + 96,95,95,112,97,116,104,95,95,96,32,97,116,116,114,105, + 98,117,116,101,46,10,10,32,32,32,32,96,111,114,105,103, + 105,110,96,32,105,115,32,116,104,101,32,115,112,101,99,105, + 102,105,99,32,108,111,99,97,116,105,111,110,32,117,115,101, + 100,32,98,121,32,116,104,101,32,108,111,97,100,101,114,32, + 102,114,111,109,32,119,104,105,99,104,32,116,111,10,32,32, + 32,32,108,111,97,100,32,116,104,101,32,109,111,100,117,108, + 101,44,32,105,102,32,116,104,97,116,32,105,110,102,111,114, + 109,97,116,105,111,110,32,105,115,32,97,118,97,105,108,97, + 98,108,101,46,32,32,87,104,101,110,32,102,105,108,101,110, + 97,109,101,32,105,115,10,32,32,32,32,115,101,116,44,32, + 111,114,105,103,105,110,32,119,105,108,108,32,109,97,116,99, + 104,46,10,10,32,32,32,32,96,104,97,115,95,108,111,99, + 97,116,105,111,110,96,32,105,110,100,105,99,97,116,101,115, + 32,116,104,97,116,32,97,32,115,112,101,99,39,115,32,34, + 111,114,105,103,105,110,34,32,114,101,102,108,101,99,116,115, + 32,97,32,108,111,99,97,116,105,111,110,46,10,32,32,32, + 32,87,104,101,110,32,116,104,105,115,32,105,115,32,84,114, + 117,101,44,32,96,95,95,102,105,108,101,95,95,96,32,97, + 116,116,114,105,98,117,116,101,32,111,102,32,116,104,101,32, + 109,111,100,117,108,101,32,105,115,32,115,101,116,46,10,10, + 32,32,32,32,96,99,97,99,104,101,100,96,32,105,115,32, + 116,104,101,32,108,111,99,97,116,105,111,110,32,111,102,32, + 116,104,101,32,99,97,99,104,101,100,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,44,32,105,102,32,97,110,121, + 46,32,32,73,116,10,32,32,32,32,99,111,114,114,101,115, + 112,111,110,100,115,32,116,111,32,116,104,101,32,96,95,95, + 99,97,99,104,101,100,95,95,96,32,97,116,116,114,105,98, + 117,116,101,46,10,10,32,32,32,32,96,115,117,98,109,111, + 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, + 116,105,111,110,115,96,32,105,115,32,116,104,101,32,115,101, + 113,117,101,110,99,101,32,111,102,32,112,97,116,104,32,101, + 110,116,114,105,101,115,32,116,111,10,32,32,32,32,115,101, + 97,114,99,104,32,119,104,101,110,32,105,109,112,111,114,116, + 105,110,103,32,115,117,98,109,111,100,117,108,101,115,46,32, + 32,73,102,32,115,101,116,44,32,105,115,95,112,97,99,107, + 97,103,101,32,115,104,111,117,108,100,32,98,101,10,32,32, + 32,32,84,114,117,101,45,45,97,110,100,32,70,97,108,115, + 101,32,111,116,104,101,114,119,105,115,101,46,10,10,32,32, + 32,32,80,97,99,107,97,103,101,115,32,97,114,101,32,115, + 105,109,112,108,121,32,109,111,100,117,108,101,115,32,116,104, + 97,116,32,40,109,97,121,41,32,104,97,118,101,32,115,117, + 98,109,111,100,117,108,101,115,46,32,32,73,102,32,97,32, + 115,112,101,99,10,32,32,32,32,104,97,115,32,97,32,110, + 111,110,45,78,111,110,101,32,118,97,108,117,101,32,105,110, + 32,96,115,117,98,109,111,100,117,108,101,95,115,101,97,114, + 99,104,95,108,111,99,97,116,105,111,110,115,96,44,32,116, + 104,101,32,105,109,112,111,114,116,10,32,32,32,32,115,121, + 115,116,101,109,32,119,105,108,108,32,99,111,110,115,105,100, + 101,114,32,109,111,100,117,108,101,115,32,108,111,97,100,101, + 100,32,102,114,111,109,32,116,104,101,32,115,112,101,99,32, + 97,115,32,112,97,99,107,97,103,101,115,46,10,10,32,32, + 32,32,79,110,108,121,32,102,105,110,100,101,114,115,32,40, + 115,101,101,32,105,109,112,111,114,116,108,105,98,46,97,98, + 99,46,77,101,116,97,80,97,116,104,70,105,110,100,101,114, + 32,97,110,100,10,32,32,32,32,105,109,112,111,114,116,108, + 105,98,46,97,98,99,46,80,97,116,104,69,110,116,114,121, + 70,105,110,100,101,114,41,32,115,104,111,117,108,100,32,109, + 111,100,105,102,121,32,77,111,100,117,108,101,83,112,101,99, + 32,105,110,115,116,97,110,99,101,115,46,10,10,32,32,32, + 32,78,41,3,218,6,111,114,105,103,105,110,218,12,108,111, + 97,100,101,114,95,115,116,97,116,101,218,10,105,115,95,112, + 97,99,107,97,103,101,99,3,0,0,0,3,0,0,0,6, + 0,0,0,2,0,0,0,67,0,0,0,115,54,0,0,0, + 124,1,124,0,95,0,124,2,124,0,95,1,124,3,124,0, + 95,2,124,4,124,0,95,3,124,5,114,32,103,0,110,2, + 100,0,124,0,95,4,100,1,124,0,95,5,100,0,124,0, + 95,6,100,0,83,0,41,2,78,70,41,7,114,15,0,0, + 0,114,93,0,0,0,114,103,0,0,0,114,104,0,0,0, + 218,26,115,117,98,109,111,100,117,108,101,95,115,101,97,114, + 99,104,95,108,111,99,97,116,105,111,110,115,218,13,95,115, + 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97, + 99,104,101,100,41,6,114,26,0,0,0,114,15,0,0,0, + 114,93,0,0,0,114,103,0,0,0,114,104,0,0,0,114, + 105,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,27,0,0,0,99,1,0,0,115,14,0,0, + 0,0,2,6,1,6,1,6,1,6,1,14,3,6,1,122, + 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, + 105,116,95,95,99,1,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,102,0,0,0,100,1, + 106,0,124,0,106,1,131,1,100,2,106,0,124,0,106,2, + 131,1,103,2,125,1,124,0,106,3,100,0,107,9,114,52, + 124,1,106,4,100,3,106,0,124,0,106,3,131,1,131,1, + 1,0,124,0,106,5,100,0,107,9,114,80,124,1,106,4, + 100,4,106,0,124,0,106,5,131,1,131,1,1,0,100,5, + 106,0,124,0,106,6,106,7,100,6,106,8,124,1,131,1, + 131,2,83,0,41,7,78,122,9,110,97,109,101,61,123,33, + 114,125,122,11,108,111,97,100,101,114,61,123,33,114,125,122, + 11,111,114,105,103,105,110,61,123,33,114,125,122,29,115,117, + 98,109,111,100,117,108,101,95,115,101,97,114,99,104,95,108, + 111,99,97,116,105,111,110,115,61,123,125,122,6,123,125,40, + 123,125,41,122,2,44,32,41,9,114,38,0,0,0,114,15, + 0,0,0,114,93,0,0,0,114,103,0,0,0,218,6,97, + 112,112,101,110,100,114,106,0,0,0,218,9,95,95,99,108, + 97,115,115,95,95,114,1,0,0,0,218,4,106,111,105,110, + 41,2,114,26,0,0,0,114,49,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,40,0,0,0, + 111,1,0,0,115,16,0,0,0,0,1,10,1,14,1,10, + 1,18,1,10,1,8,1,10,1,122,19,77,111,100,117,108, + 101,83,112,101,99,46,95,95,114,101,112,114,95,95,99,2, + 0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,67, + 0,0,0,115,102,0,0,0,124,0,106,0,125,2,121,70, + 124,0,106,1,124,1,106,1,107,2,111,76,124,0,106,2, + 124,1,106,2,107,2,111,76,124,0,106,3,124,1,106,3, + 107,2,111,76,124,2,124,1,106,0,107,2,111,76,124,0, + 106,4,124,1,106,4,107,2,111,76,124,0,106,5,124,1, + 106,5,107,2,83,0,4,0,116,6,107,10,114,96,1,0, + 1,0,1,0,100,1,83,0,88,0,100,0,83,0,41,2, + 78,70,41,7,114,106,0,0,0,114,15,0,0,0,114,93, + 0,0,0,114,103,0,0,0,218,6,99,97,99,104,101,100, + 218,12,104,97,115,95,108,111,99,97,116,105,111,110,114,90, + 0,0,0,41,3,114,26,0,0,0,90,5,111,116,104,101, + 114,90,4,115,109,115,108,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,6,95,95,101,113,95,95,121,1, + 0,0,115,20,0,0,0,0,1,6,1,2,1,12,1,12, + 1,12,1,10,1,12,1,12,1,14,1,122,17,77,111,100, + 117,108,101,83,112,101,99,46,95,95,101,113,95,95,99,1, + 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, + 0,0,0,115,58,0,0,0,124,0,106,0,100,0,107,8, + 114,52,124,0,106,1,100,0,107,9,114,52,124,0,106,2, + 114,52,116,3,100,0,107,8,114,38,116,4,130,1,116,3, + 106,5,124,0,106,1,131,1,124,0,95,0,124,0,106,0, + 83,0,41,1,78,41,6,114,108,0,0,0,114,103,0,0, + 0,114,107,0,0,0,218,19,95,98,111,111,116,115,116,114, + 97,112,95,101,120,116,101,114,110,97,108,218,19,78,111,116, + 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, + 90,11,95,103,101,116,95,99,97,99,104,101,100,41,1,114, + 26,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,112,0,0,0,133,1,0,0,115,12,0,0, + 0,0,2,10,1,16,1,8,1,4,1,14,1,122,17,77, + 111,100,117,108,101,83,112,101,99,46,99,97,99,104,101,100, + 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,115,10,0,0,0,124,1,124,0,95,0, + 100,0,83,0,41,1,78,41,1,114,108,0,0,0,41,2, + 114,26,0,0,0,114,112,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,112,0,0,0,142,1, + 0,0,115,2,0,0,0,0,2,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,38, + 0,0,0,124,0,106,0,100,1,107,8,114,28,124,0,106, + 1,106,2,100,2,131,1,100,3,25,0,83,0,110,6,124, + 0,106,1,83,0,100,1,83,0,41,4,122,32,84,104,101, 32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100, 117,108,101,39,115,32,112,97,114,101,110,116,46,78,218,1, - 46,114,33,0,0,0,41,3,114,110,0,0,0,114,15,0, + 46,114,19,0,0,0,41,3,114,106,0,0,0,114,15,0, 0,0,218,10,114,112,97,114,116,105,116,105,111,110,41,1, - 114,19,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,218,6,112,97,114,101,110,116,163,1,0,0, - 115,6,0,0,0,0,3,15,1,20,2,122,17,77,111,100, + 114,26,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,6,112,97,114,101,110,116,146,1,0,0, + 115,6,0,0,0,0,3,10,1,18,2,122,17,77,111,100, 117,108,101,83,112,101,99,46,112,97,114,101,110,116,99,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,67, - 0,0,0,115,7,0,0,0,124,0,0,106,0,0,83,41, - 1,78,41,1,114,111,0,0,0,41,1,114,19,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, - 117,0,0,0,171,1,0,0,115,2,0,0,0,0,2,122, - 23,77,111,100,117,108,101,83,112,101,99,46,104,97,115,95, - 108,111,99,97,116,105,111,110,99,2,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,19,0, - 0,0,116,0,0,124,1,0,131,1,0,124,0,0,95,1, - 0,100,0,0,83,41,1,78,41,2,218,4,98,111,111,108, - 114,111,0,0,0,41,2,114,19,0,0,0,218,5,118,97, - 108,117,101,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,114,117,0,0,0,175,1,0,0,115,2,0,0,0, - 0,2,41,12,114,1,0,0,0,114,0,0,0,0,114,2, - 0,0,0,114,3,0,0,0,114,20,0,0,0,114,52,0, - 0,0,114,118,0,0,0,218,8,112,114,111,112,101,114,116, - 121,114,116,0,0,0,218,6,115,101,116,116,101,114,114,123, - 0,0,0,114,117,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,106,0,0, - 0,79,1,0,0,115,20,0,0,0,12,35,6,2,15,1, - 15,11,12,10,12,12,18,9,21,4,18,8,18,4,114,106, - 0,0,0,114,107,0,0,0,114,109,0,0,0,99,2,0, - 0,0,2,0,0,0,6,0,0,0,15,0,0,0,67,0, - 0,0,115,217,0,0,0,116,0,0,124,1,0,100,1,0, - 131,2,0,114,110,0,116,1,0,100,2,0,107,8,0,114, - 33,0,116,2,0,130,1,0,116,1,0,106,3,0,125,4, - 0,124,3,0,100,2,0,107,8,0,114,70,0,124,4,0, - 124,0,0,100,3,0,124,1,0,131,1,1,83,124,3,0, - 114,82,0,103,0,0,110,3,0,100,2,0,125,5,0,124, - 4,0,124,0,0,100,3,0,124,1,0,100,4,0,124,5, - 0,131,1,2,83,124,3,0,100,2,0,107,8,0,114,192, - 0,116,0,0,124,1,0,100,5,0,131,2,0,114,186,0, - 121,19,0,124,1,0,106,4,0,124,0,0,131,1,0,125, - 3,0,87,113,192,0,4,116,5,0,107,10,0,114,182,0, - 1,1,1,100,2,0,125,3,0,89,113,192,0,88,110,6, - 0,100,6,0,125,3,0,116,6,0,124,0,0,124,1,0, - 100,7,0,124,2,0,100,5,0,124,3,0,131,2,2,83, - 41,8,122,53,82,101,116,117,114,110,32,97,32,109,111,100, - 117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,111, - 110,32,118,97,114,105,111,117,115,32,108,111,97,100,101,114, - 32,109,101,116,104,111,100,115,46,90,12,103,101,116,95,102, - 105,108,101,110,97,109,101,78,114,99,0,0,0,114,110,0, - 0,0,114,109,0,0,0,70,114,107,0,0,0,41,7,114, - 4,0,0,0,114,119,0,0,0,114,120,0,0,0,218,23, - 115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,108, - 111,99,97,116,105,111,110,114,109,0,0,0,114,77,0,0, - 0,114,106,0,0,0,41,6,114,15,0,0,0,114,99,0, - 0,0,114,107,0,0,0,114,109,0,0,0,114,128,0,0, - 0,90,6,115,101,97,114,99,104,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,85,0,0,0,180,1,0, - 0,115,34,0,0,0,0,2,15,1,12,1,6,1,9,2, - 12,1,16,1,18,1,15,1,7,2,12,1,15,1,3,1, - 19,1,13,1,14,3,6,2,114,85,0,0,0,99,3,0, - 0,0,0,0,0,0,8,0,0,0,53,0,0,0,67,0, - 0,0,115,118,1,0,0,121,13,0,124,0,0,106,0,0, - 125,3,0,87,110,18,0,4,116,1,0,107,10,0,114,33, - 0,1,1,1,89,110,17,0,88,124,3,0,100,0,0,107, - 9,0,114,50,0,124,3,0,83,124,0,0,106,2,0,125, - 4,0,124,1,0,100,0,0,107,8,0,114,105,0,121,13, - 0,124,0,0,106,3,0,125,1,0,87,110,18,0,4,116, - 1,0,107,10,0,114,104,0,1,1,1,89,110,1,0,88, - 121,13,0,124,0,0,106,4,0,125,5,0,87,110,24,0, - 4,116,1,0,107,10,0,114,144,0,1,1,1,100,0,0, - 125,5,0,89,110,1,0,88,124,2,0,100,0,0,107,8, - 0,114,218,0,124,5,0,100,0,0,107,8,0,114,212,0, - 121,13,0,124,1,0,106,5,0,125,2,0,87,113,218,0, - 4,116,1,0,107,10,0,114,208,0,1,1,1,100,0,0, - 125,2,0,89,113,218,0,88,110,6,0,124,5,0,125,2, - 0,121,13,0,124,0,0,106,6,0,125,6,0,87,110,24, - 0,4,116,1,0,107,10,0,114,1,1,1,1,1,100,0, - 0,125,6,0,89,110,1,0,88,121,19,0,116,7,0,124, - 0,0,106,8,0,131,1,0,125,7,0,87,110,24,0,4, - 116,1,0,107,10,0,114,47,1,1,1,1,100,0,0,125, - 7,0,89,110,1,0,88,116,9,0,124,4,0,124,1,0, - 100,1,0,124,2,0,131,2,1,125,3,0,124,5,0,100, - 0,0,107,8,0,114,87,1,100,2,0,110,3,0,100,3, - 0,124,3,0,95,10,0,124,6,0,124,3,0,95,11,0, - 124,7,0,124,3,0,95,12,0,124,3,0,83,41,4,78, - 114,107,0,0,0,70,84,41,13,114,95,0,0,0,114,96, - 0,0,0,114,1,0,0,0,114,91,0,0,0,114,98,0, - 0,0,90,7,95,79,82,73,71,73,78,218,10,95,95,99, - 97,99,104,101,100,95,95,218,4,108,105,115,116,218,8,95, - 95,112,97,116,104,95,95,114,106,0,0,0,114,111,0,0, - 0,114,116,0,0,0,114,110,0,0,0,41,8,114,89,0, - 0,0,114,99,0,0,0,114,107,0,0,0,114,88,0,0, - 0,114,15,0,0,0,90,8,108,111,99,97,116,105,111,110, - 114,116,0,0,0,114,110,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,17,95,115,112,101,99, - 95,102,114,111,109,95,109,111,100,117,108,101,209,1,0,0, - 115,72,0,0,0,0,2,3,1,13,1,13,1,5,2,12, - 1,4,2,9,1,12,1,3,1,13,1,13,2,5,1,3, - 1,13,1,13,1,11,1,12,1,12,1,3,1,13,1,13, - 1,14,2,6,1,3,1,13,1,13,1,11,1,3,1,19, - 1,13,1,11,2,21,1,27,1,9,1,9,1,114,132,0, - 0,0,218,8,111,118,101,114,114,105,100,101,70,99,2,0, - 0,0,1,0,0,0,5,0,0,0,59,0,0,0,67,0, - 0,0,115,54,2,0,0,124,2,0,115,30,0,116,0,0, - 124,1,0,100,1,0,100,0,0,131,3,0,100,0,0,107, - 8,0,114,67,0,121,16,0,124,0,0,106,1,0,124,1, - 0,95,2,0,87,110,18,0,4,116,3,0,107,10,0,114, - 66,0,1,1,1,89,110,1,0,88,124,2,0,115,97,0, - 116,0,0,124,1,0,100,2,0,100,0,0,131,3,0,100, - 0,0,107,8,0,114,221,0,124,0,0,106,4,0,125,3, - 0,124,3,0,100,0,0,107,8,0,114,187,0,124,0,0, - 106,5,0,100,0,0,107,9,0,114,187,0,116,6,0,100, - 0,0,107,8,0,114,151,0,116,7,0,130,1,0,116,6, - 0,106,8,0,125,4,0,124,4,0,106,9,0,124,4,0, - 131,1,0,125,3,0,124,0,0,106,5,0,124,3,0,95, - 10,0,121,13,0,124,3,0,124,1,0,95,11,0,87,110, - 18,0,4,116,3,0,107,10,0,114,220,0,1,1,1,89, - 110,1,0,88,124,2,0,115,251,0,116,0,0,124,1,0, - 100,3,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 32,1,121,16,0,124,0,0,106,12,0,124,1,0,95,13, - 0,87,110,18,0,4,116,3,0,107,10,0,114,31,1,1, - 1,1,89,110,1,0,88,121,13,0,124,0,0,124,1,0, - 95,14,0,87,110,18,0,4,116,3,0,107,10,0,114,65, - 1,1,1,1,89,110,1,0,88,124,2,0,115,96,1,116, - 0,0,124,1,0,100,4,0,100,0,0,131,3,0,100,0, - 0,107,8,0,114,148,1,124,0,0,106,5,0,100,0,0, - 107,9,0,114,148,1,121,16,0,124,0,0,106,5,0,124, - 1,0,95,15,0,87,110,18,0,4,116,3,0,107,10,0, - 114,147,1,1,1,1,89,110,1,0,88,124,0,0,106,16, - 0,114,50,2,124,2,0,115,187,1,116,0,0,124,1,0, - 100,5,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 224,1,121,16,0,124,0,0,106,17,0,124,1,0,95,18, - 0,87,110,18,0,4,116,3,0,107,10,0,114,223,1,1, - 1,1,89,110,1,0,88,124,2,0,115,254,1,116,0,0, - 124,1,0,100,6,0,100,0,0,131,3,0,100,0,0,107, - 8,0,114,50,2,124,0,0,106,19,0,100,0,0,107,9, - 0,114,50,2,121,16,0,124,0,0,106,19,0,124,1,0, - 95,20,0,87,110,18,0,4,116,3,0,107,10,0,114,49, - 2,1,1,1,89,110,1,0,88,124,1,0,83,41,7,78, - 114,1,0,0,0,114,91,0,0,0,218,11,95,95,112,97, - 99,107,97,103,101,95,95,114,131,0,0,0,114,98,0,0, - 0,114,129,0,0,0,41,21,114,6,0,0,0,114,15,0, - 0,0,114,1,0,0,0,114,96,0,0,0,114,99,0,0, - 0,114,110,0,0,0,114,119,0,0,0,114,120,0,0,0, - 218,16,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,218,7,95,95,110,101,119,95,95,90,5,95,112,97, - 116,104,114,91,0,0,0,114,123,0,0,0,114,134,0,0, - 0,114,95,0,0,0,114,131,0,0,0,114,117,0,0,0, - 114,107,0,0,0,114,98,0,0,0,114,116,0,0,0,114, - 129,0,0,0,41,5,114,88,0,0,0,114,89,0,0,0, - 114,133,0,0,0,114,99,0,0,0,114,135,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,18, - 95,105,110,105,116,95,109,111,100,117,108,101,95,97,116,116, - 114,115,254,1,0,0,115,92,0,0,0,0,4,30,1,3, - 1,16,1,13,1,5,2,30,1,9,1,12,2,15,1,12, - 1,6,1,9,2,15,1,12,1,3,1,13,1,13,1,5, - 2,30,1,3,1,16,1,13,1,5,2,3,1,13,1,13, - 1,5,2,30,1,15,1,3,1,16,1,13,1,5,2,9, - 1,30,1,3,1,16,1,13,1,5,2,30,1,15,1,3, - 1,16,1,13,1,5,1,114,137,0,0,0,99,1,0,0, - 0,0,0,0,0,2,0,0,0,5,0,0,0,67,0,0, - 0,115,129,0,0,0,100,1,0,125,1,0,116,0,0,124, - 0,0,106,1,0,100,2,0,131,2,0,114,45,0,124,0, - 0,106,1,0,106,2,0,124,0,0,131,1,0,125,1,0, - 110,40,0,116,0,0,124,0,0,106,1,0,100,3,0,131, - 2,0,114,85,0,116,3,0,106,4,0,100,4,0,116,5, - 0,100,5,0,100,6,0,131,2,1,1,124,1,0,100,1, - 0,107,8,0,114,112,0,116,6,0,124,0,0,106,7,0, - 131,1,0,125,1,0,116,8,0,124,0,0,124,1,0,131, - 2,0,1,124,1,0,83,41,7,122,43,67,114,101,97,116, - 101,32,97,32,109,111,100,117,108,101,32,98,97,115,101,100, - 32,111,110,32,116,104,101,32,112,114,111,118,105,100,101,100, - 32,115,112,101,99,46,78,218,13,99,114,101,97,116,101,95, - 109,111,100,117,108,101,218,11,101,120,101,99,95,109,111,100, - 117,108,101,122,87,115,116,97,114,116,105,110,103,32,105,110, - 32,80,121,116,104,111,110,32,51,46,54,44,32,108,111,97, - 100,101,114,115,32,100,101,102,105,110,105,110,103,32,101,120, - 101,99,95,109,111,100,117,108,101,40,41,32,109,117,115,116, - 32,97,108,115,111,32,100,101,102,105,110,101,32,99,114,101, - 97,116,101,95,109,111,100,117,108,101,40,41,90,10,115,116, - 97,99,107,108,101,118,101,108,233,2,0,0,0,41,9,114, - 4,0,0,0,114,99,0,0,0,114,138,0,0,0,218,9, - 95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,218, - 18,68,101,112,114,101,99,97,116,105,111,110,87,97,114,110, - 105,110,103,114,16,0,0,0,114,15,0,0,0,114,137,0, - 0,0,41,2,114,88,0,0,0,114,89,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,16,109, - 111,100,117,108,101,95,102,114,111,109,95,115,112,101,99,58, - 2,0,0,115,20,0,0,0,0,3,6,1,18,3,21,1, - 18,1,9,2,13,1,12,1,15,1,13,1,114,144,0,0, - 0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,149,0,0,0,124,0,0,106,0, - 0,100,1,0,107,8,0,114,21,0,100,2,0,110,6,0, - 124,0,0,106,0,0,125,1,0,124,0,0,106,1,0,100, - 1,0,107,8,0,114,95,0,124,0,0,106,2,0,100,1, - 0,107,8,0,114,73,0,100,3,0,106,3,0,124,1,0, - 131,1,0,83,100,4,0,106,3,0,124,1,0,124,0,0, - 106,2,0,131,2,0,83,110,50,0,124,0,0,106,4,0, - 114,123,0,100,5,0,106,3,0,124,1,0,124,0,0,106, - 1,0,131,2,0,83,100,6,0,106,3,0,124,0,0,106, - 0,0,124,0,0,106,1,0,131,2,0,83,100,1,0,83, - 41,7,122,38,82,101,116,117,114,110,32,116,104,101,32,114, - 101,112,114,32,116,111,32,117,115,101,32,102,111,114,32,116, - 104,101,32,109,111,100,117,108,101,46,78,114,93,0,0,0, - 122,13,60,109,111,100,117,108,101,32,123,33,114,125,62,122, - 20,60,109,111,100,117,108,101,32,123,33,114,125,32,40,123, - 33,114,125,41,62,122,23,60,109,111,100,117,108,101,32,123, - 33,114,125,32,102,114,111,109,32,123,33,114,125,62,122,18, - 60,109,111,100,117,108,101,32,123,33,114,125,32,40,123,125, - 41,62,41,5,114,15,0,0,0,114,107,0,0,0,114,99, - 0,0,0,114,50,0,0,0,114,117,0,0,0,41,2,114, - 88,0,0,0,114,15,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,97,0,0,0,76,2,0, - 0,115,16,0,0,0,0,3,30,1,15,1,15,1,13,2, - 22,2,9,1,19,2,114,97,0,0,0,99,2,0,0,0, - 0,0,0,0,4,0,0,0,12,0,0,0,67,0,0,0, - 115,253,0,0,0,124,0,0,106,0,0,125,2,0,116,1, - 0,106,2,0,131,0,0,1,116,3,0,124,2,0,131,1, - 0,143,208,0,1,116,4,0,106,5,0,106,6,0,124,2, - 0,131,1,0,124,1,0,107,9,0,114,89,0,100,1,0, - 106,7,0,124,2,0,131,1,0,125,3,0,116,8,0,124, - 3,0,100,2,0,124,2,0,131,1,1,130,1,0,124,0, - 0,106,9,0,100,3,0,107,8,0,114,163,0,124,0,0, - 106,10,0,100,3,0,107,8,0,114,140,0,116,8,0,100, - 4,0,100,2,0,124,0,0,106,0,0,131,1,1,130,1, - 0,116,11,0,124,0,0,124,1,0,100,5,0,100,6,0, - 131,2,1,1,124,1,0,83,116,11,0,124,0,0,124,1, - 0,100,5,0,100,6,0,131,2,1,1,116,12,0,124,0, - 0,106,9,0,100,7,0,131,2,0,115,219,0,124,0,0, - 106,9,0,106,13,0,124,2,0,131,1,0,1,110,16,0, - 124,0,0,106,9,0,106,14,0,124,1,0,131,1,0,1, - 87,100,3,0,81,82,88,116,4,0,106,5,0,124,2,0, - 25,83,41,8,122,51,69,120,101,99,117,116,101,32,116,104, - 101,32,115,112,101,99,32,105,110,32,97,110,32,101,120,105, - 115,116,105,110,103,32,109,111,100,117,108,101,39,115,32,110, - 97,109,101,115,112,97,99,101,46,122,30,109,111,100,117,108, - 101,32,123,33,114,125,32,110,111,116,32,105,110,32,115,121, - 115,46,109,111,100,117,108,101,115,114,15,0,0,0,78,122, - 14,109,105,115,115,105,110,103,32,108,111,97,100,101,114,114, - 133,0,0,0,84,114,139,0,0,0,41,15,114,15,0,0, - 0,114,57,0,0,0,218,12,97,99,113,117,105,114,101,95, - 108,111,99,107,114,54,0,0,0,114,14,0,0,0,114,21, - 0,0,0,114,42,0,0,0,114,50,0,0,0,114,77,0, - 0,0,114,99,0,0,0,114,110,0,0,0,114,137,0,0, - 0,114,4,0,0,0,218,11,108,111,97,100,95,109,111,100, - 117,108,101,114,139,0,0,0,41,4,114,88,0,0,0,114, - 89,0,0,0,114,15,0,0,0,218,3,109,115,103,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,86,0, - 0,0,93,2,0,0,115,32,0,0,0,0,2,9,1,10, - 1,13,1,24,1,15,1,18,1,15,1,15,1,21,2,19, - 1,4,1,19,1,18,4,19,2,23,1,114,86,0,0,0, - 99,1,0,0,0,0,0,0,0,2,0,0,0,27,0,0, - 0,67,0,0,0,115,3,1,0,0,124,0,0,106,0,0, - 106,1,0,124,0,0,106,2,0,131,1,0,1,116,3,0, - 106,4,0,124,0,0,106,2,0,25,125,1,0,116,5,0, - 124,1,0,100,1,0,100,0,0,131,3,0,100,0,0,107, - 8,0,114,96,0,121,16,0,124,0,0,106,0,0,124,1, - 0,95,6,0,87,110,18,0,4,116,7,0,107,10,0,114, - 95,0,1,1,1,89,110,1,0,88,116,5,0,124,1,0, - 100,2,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 197,0,121,56,0,124,1,0,106,8,0,124,1,0,95,9, - 0,116,10,0,124,1,0,100,3,0,131,2,0,115,175,0, - 124,0,0,106,2,0,106,11,0,100,4,0,131,1,0,100, - 5,0,25,124,1,0,95,9,0,87,110,18,0,4,116,7, - 0,107,10,0,114,196,0,1,1,1,89,110,1,0,88,116, - 5,0,124,1,0,100,6,0,100,0,0,131,3,0,100,0, - 0,107,8,0,114,255,0,121,13,0,124,0,0,124,1,0, - 95,12,0,87,110,18,0,4,116,7,0,107,10,0,114,254, - 0,1,1,1,89,110,1,0,88,124,1,0,83,41,7,78, - 114,91,0,0,0,114,134,0,0,0,114,131,0,0,0,114, - 121,0,0,0,114,33,0,0,0,114,95,0,0,0,41,13, - 114,99,0,0,0,114,146,0,0,0,114,15,0,0,0,114, - 14,0,0,0,114,21,0,0,0,114,6,0,0,0,114,91, - 0,0,0,114,96,0,0,0,114,1,0,0,0,114,134,0, - 0,0,114,4,0,0,0,114,122,0,0,0,114,95,0,0, - 0,41,2,114,88,0,0,0,114,89,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,218,25,95,108, - 111,97,100,95,98,97,99,107,119,97,114,100,95,99,111,109, - 112,97,116,105,98,108,101,118,2,0,0,115,40,0,0,0, - 0,4,19,2,16,1,24,1,3,1,16,1,13,1,5,1, - 24,1,3,4,12,1,15,1,29,1,13,1,5,1,24,1, - 3,1,13,1,13,1,5,1,114,148,0,0,0,99,1,0, - 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, - 0,0,115,159,0,0,0,124,0,0,106,0,0,100,0,0, - 107,9,0,114,43,0,116,1,0,124,0,0,106,0,0,100, - 1,0,131,2,0,115,43,0,116,2,0,124,0,0,131,1, - 0,83,116,3,0,124,0,0,131,1,0,125,1,0,116,4, - 0,124,1,0,131,1,0,143,75,0,1,124,0,0,106,0, - 0,100,0,0,107,8,0,114,122,0,124,0,0,106,5,0, - 100,0,0,107,8,0,114,138,0,116,6,0,100,2,0,100, - 3,0,124,0,0,106,7,0,131,1,1,130,1,0,110,16, - 0,124,0,0,106,0,0,106,8,0,124,1,0,131,1,0, - 1,87,100,0,0,81,82,88,116,9,0,106,10,0,124,0, - 0,106,7,0,25,83,41,4,78,114,139,0,0,0,122,14, - 109,105,115,115,105,110,103,32,108,111,97,100,101,114,114,15, - 0,0,0,41,11,114,99,0,0,0,114,4,0,0,0,114, - 148,0,0,0,114,144,0,0,0,114,102,0,0,0,114,110, - 0,0,0,114,77,0,0,0,114,15,0,0,0,114,139,0, - 0,0,114,14,0,0,0,114,21,0,0,0,41,2,114,88, - 0,0,0,114,89,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,14,95,108,111,97,100,95,117, - 110,108,111,99,107,101,100,147,2,0,0,115,20,0,0,0, - 0,2,15,2,18,1,10,2,12,1,13,1,15,1,15,1, - 24,3,23,5,114,149,0,0,0,99,1,0,0,0,0,0, - 0,0,1,0,0,0,9,0,0,0,67,0,0,0,115,47, - 0,0,0,116,0,0,106,1,0,131,0,0,1,116,2,0, - 124,0,0,106,3,0,131,1,0,143,15,0,1,116,4,0, - 124,0,0,131,1,0,83,87,100,1,0,81,82,88,100,1, - 0,83,41,2,122,191,82,101,116,117,114,110,32,97,32,110, - 101,119,32,109,111,100,117,108,101,32,111,98,106,101,99,116, - 44,32,108,111,97,100,101,100,32,98,121,32,116,104,101,32, - 115,112,101,99,39,115,32,108,111,97,100,101,114,46,10,10, - 32,32,32,32,84,104,101,32,109,111,100,117,108,101,32,105, - 115,32,110,111,116,32,97,100,100,101,100,32,116,111,32,105, - 116,115,32,112,97,114,101,110,116,46,10,10,32,32,32,32, - 73,102,32,97,32,109,111,100,117,108,101,32,105,115,32,97, - 108,114,101,97,100,121,32,105,110,32,115,121,115,46,109,111, - 100,117,108,101,115,44,32,116,104,97,116,32,101,120,105,115, - 116,105,110,103,32,109,111,100,117,108,101,32,103,101,116,115, - 10,32,32,32,32,99,108,111,98,98,101,114,101,100,46,10, - 10,32,32,32,32,78,41,5,114,57,0,0,0,114,145,0, - 0,0,114,54,0,0,0,114,15,0,0,0,114,149,0,0, - 0,41,1,114,88,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,87,0,0,0,170,2,0,0, - 115,6,0,0,0,0,9,10,1,16,1,114,87,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,64,0,0,0,115,205,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, - 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,6, - 0,100,4,0,100,4,0,100,5,0,100,6,0,132,2,0, - 131,1,0,90,7,0,101,6,0,100,4,0,100,7,0,100, - 8,0,132,1,0,131,1,0,90,8,0,101,6,0,100,9, - 0,100,10,0,132,0,0,131,1,0,90,9,0,101,6,0, - 100,11,0,100,12,0,132,0,0,131,1,0,90,10,0,101, - 6,0,101,11,0,100,13,0,100,14,0,132,0,0,131,1, - 0,131,1,0,90,12,0,101,6,0,101,11,0,100,15,0, - 100,16,0,132,0,0,131,1,0,131,1,0,90,13,0,101, - 6,0,101,11,0,100,17,0,100,18,0,132,0,0,131,1, - 0,131,1,0,90,14,0,101,6,0,101,15,0,131,1,0, - 90,16,0,100,4,0,83,41,19,218,15,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,122,144,77,101,116,97, - 32,112,97,116,104,32,105,109,112,111,114,116,32,102,111,114, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 115,46,10,10,32,32,32,32,65,108,108,32,109,101,116,104, - 111,100,115,32,97,114,101,32,101,105,116,104,101,114,32,99, - 108,97,115,115,32,111,114,32,115,116,97,116,105,99,32,109, - 101,116,104,111,100,115,32,116,111,32,97,118,111,105,100,32, - 116,104,101,32,110,101,101,100,32,116,111,10,32,32,32,32, - 105,110,115,116,97,110,116,105,97,116,101,32,116,104,101,32, - 99,108,97,115,115,46,10,10,32,32,32,32,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,16,0,0,0,100,1,0,106,0,0,124,0,0,106, - 1,0,131,1,0,83,41,2,122,115,82,101,116,117,114,110, - 32,114,101,112,114,32,102,111,114,32,116,104,101,32,109,111, - 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,101,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,84,104,101,32,105,109, - 112,111,114,116,32,109,97,99,104,105,110,101,114,121,32,100, - 111,101,115,32,116,104,101,32,106,111,98,32,105,116,115,101, - 108,102,46,10,10,32,32,32,32,32,32,32,32,122,24,60, - 109,111,100,117,108,101,32,123,33,114,125,32,40,98,117,105, - 108,116,45,105,110,41,62,41,2,114,50,0,0,0,114,1, - 0,0,0,41,1,114,89,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,92,0,0,0,195,2, - 0,0,115,2,0,0,0,0,7,122,27,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,46,109,111,100,117,108, - 101,95,114,101,112,114,78,99,4,0,0,0,0,0,0,0, - 4,0,0,0,5,0,0,0,67,0,0,0,115,58,0,0, - 0,124,2,0,100,0,0,107,9,0,114,16,0,100,0,0, - 83,116,0,0,106,1,0,124,1,0,131,1,0,114,50,0, - 116,2,0,124,1,0,124,0,0,100,1,0,100,2,0,131, - 2,1,83,100,0,0,83,100,0,0,83,41,3,78,114,107, - 0,0,0,122,8,98,117,105,108,116,45,105,110,41,3,114, - 57,0,0,0,90,10,105,115,95,98,117,105,108,116,105,110, - 114,85,0,0,0,41,4,218,3,99,108,115,114,78,0,0, - 0,218,4,112,97,116,104,218,6,116,97,114,103,101,116,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,9, - 102,105,110,100,95,115,112,101,99,204,2,0,0,115,10,0, - 0,0,0,2,12,1,4,1,15,1,19,2,122,25,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,105, - 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,67,0,0,0,115,41,0,0, - 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, - 125,3,0,124,3,0,100,1,0,107,9,0,114,37,0,124, - 3,0,106,1,0,83,100,1,0,83,41,2,122,175,70,105, - 110,100,32,116,104,101,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,73,102,32,39,112,97,116,104,39,32,105,115,32,101,118, - 101,114,32,115,112,101,99,105,102,105,101,100,32,116,104,101, - 110,32,116,104,101,32,115,101,97,114,99,104,32,105,115,32, - 99,111,110,115,105,100,101,114,101,100,32,97,32,102,97,105, - 108,117,114,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, - 114,154,0,0,0,114,99,0,0,0,41,4,114,151,0,0, - 0,114,78,0,0,0,114,152,0,0,0,114,88,0,0,0, + 0,0,0,115,6,0,0,0,124,0,106,0,83,0,41,1, + 78,41,1,114,107,0,0,0,41,1,114,26,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,113, + 0,0,0,154,1,0,0,115,2,0,0,0,0,2,122,23, + 77,111,100,117,108,101,83,112,101,99,46,104,97,115,95,108, + 111,99,97,116,105,111,110,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,14,0,0, + 0,116,0,124,1,131,1,124,0,95,1,100,0,83,0,41, + 1,78,41,2,218,4,98,111,111,108,114,107,0,0,0,41, + 2,114,26,0,0,0,218,5,118,97,108,117,101,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,113,0,0, + 0,158,1,0,0,115,2,0,0,0,0,2,41,12,114,1, + 0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,0, + 0,0,114,27,0,0,0,114,40,0,0,0,114,114,0,0, + 0,218,8,112,114,111,112,101,114,116,121,114,112,0,0,0, + 218,6,115,101,116,116,101,114,114,119,0,0,0,114,113,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,102,0,0,0,62,1,0,0,115, + 20,0,0,0,8,35,4,2,4,1,14,11,8,10,8,12, + 12,9,14,4,12,8,12,4,114,102,0,0,0,41,2,114, + 103,0,0,0,114,105,0,0,0,99,2,0,0,0,2,0, + 0,0,6,0,0,0,14,0,0,0,67,0,0,0,115,154, + 0,0,0,116,0,124,1,100,1,131,2,114,74,116,1,100, + 2,107,8,114,22,116,2,130,1,116,1,106,3,125,4,124, + 3,100,2,107,8,114,48,124,4,124,0,124,1,100,3,141, + 2,83,0,124,3,114,56,103,0,110,2,100,2,125,5,124, + 4,124,0,124,1,124,5,100,4,141,3,83,0,124,3,100, + 2,107,8,114,138,116,0,124,1,100,5,131,2,114,134,121, + 14,124,1,106,4,124,0,131,1,125,3,87,0,113,138,4, + 0,116,5,107,10,114,130,1,0,1,0,1,0,100,2,125, + 3,89,0,113,138,88,0,110,4,100,6,125,3,116,6,124, + 0,124,1,124,2,124,3,100,7,141,4,83,0,41,8,122, + 53,82,101,116,117,114,110,32,97,32,109,111,100,117,108,101, + 32,115,112,101,99,32,98,97,115,101,100,32,111,110,32,118, + 97,114,105,111,117,115,32,108,111,97,100,101,114,32,109,101, + 116,104,111,100,115,46,90,12,103,101,116,95,102,105,108,101, + 110,97,109,101,78,41,1,114,93,0,0,0,41,2,114,93, + 0,0,0,114,106,0,0,0,114,105,0,0,0,70,41,2, + 114,103,0,0,0,114,105,0,0,0,41,7,114,4,0,0, + 0,114,115,0,0,0,114,116,0,0,0,218,23,115,112,101, + 99,95,102,114,111,109,95,102,105,108,101,95,108,111,99,97, + 116,105,111,110,114,105,0,0,0,114,70,0,0,0,114,102, + 0,0,0,41,6,114,15,0,0,0,114,93,0,0,0,114, + 103,0,0,0,114,105,0,0,0,114,124,0,0,0,90,6, + 115,101,97,114,99,104,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,78,0,0,0,163,1,0,0,115,34, + 0,0,0,0,2,10,1,8,1,4,1,6,2,8,1,12, + 1,12,1,6,1,8,2,8,1,10,1,2,1,14,1,14, + 1,12,3,4,2,114,78,0,0,0,99,3,0,0,0,0, + 0,0,0,8,0,0,0,53,0,0,0,67,0,0,0,115, + 56,1,0,0,121,10,124,0,106,0,125,3,87,0,110,20, + 4,0,116,1,107,10,114,30,1,0,1,0,1,0,89,0, + 110,14,88,0,124,3,100,0,107,9,114,44,124,3,83,0, + 124,0,106,2,125,4,124,1,100,0,107,8,114,90,121,10, + 124,0,106,3,125,1,87,0,110,20,4,0,116,1,107,10, + 114,88,1,0,1,0,1,0,89,0,110,2,88,0,121,10, + 124,0,106,4,125,5,87,0,110,24,4,0,116,1,107,10, + 114,124,1,0,1,0,1,0,100,0,125,5,89,0,110,2, + 88,0,124,2,100,0,107,8,114,184,124,5,100,0,107,8, + 114,180,121,10,124,1,106,5,125,2,87,0,113,184,4,0, + 116,1,107,10,114,176,1,0,1,0,1,0,100,0,125,2, + 89,0,113,184,88,0,110,4,124,5,125,2,121,10,124,0, + 106,6,125,6,87,0,110,24,4,0,116,1,107,10,114,218, + 1,0,1,0,1,0,100,0,125,6,89,0,110,2,88,0, + 121,14,116,7,124,0,106,8,131,1,125,7,87,0,110,26, + 4,0,116,1,107,10,144,1,114,4,1,0,1,0,1,0, + 100,0,125,7,89,0,110,2,88,0,116,9,124,4,124,1, + 124,2,100,1,141,3,125,3,124,5,100,0,107,8,144,1, + 114,34,100,2,110,2,100,3,124,3,95,10,124,6,124,3, + 95,11,124,7,124,3,95,12,124,3,83,0,41,4,78,41, + 1,114,103,0,0,0,70,84,41,13,114,89,0,0,0,114, + 90,0,0,0,114,1,0,0,0,114,85,0,0,0,114,92, + 0,0,0,90,7,95,79,82,73,71,73,78,218,10,95,95, + 99,97,99,104,101,100,95,95,218,4,108,105,115,116,218,8, + 95,95,112,97,116,104,95,95,114,102,0,0,0,114,107,0, + 0,0,114,112,0,0,0,114,106,0,0,0,41,8,114,83, + 0,0,0,114,93,0,0,0,114,103,0,0,0,114,82,0, + 0,0,114,15,0,0,0,90,8,108,111,99,97,116,105,111, + 110,114,112,0,0,0,114,106,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,17,95,115,112,101, + 99,95,102,114,111,109,95,109,111,100,117,108,101,192,1,0, + 0,115,72,0,0,0,0,2,2,1,10,1,14,1,6,2, + 8,1,4,2,6,1,8,1,2,1,10,1,14,2,6,1, + 2,1,10,1,14,1,10,1,8,1,8,1,2,1,10,1, + 14,1,12,2,4,1,2,1,10,1,14,1,10,1,2,1, + 14,1,16,1,10,2,14,1,20,1,6,1,6,1,114,128, + 0,0,0,70,41,1,218,8,111,118,101,114,114,105,100,101, + 99,2,0,0,0,1,0,0,0,5,0,0,0,59,0,0, + 0,67,0,0,0,115,212,1,0,0,124,2,115,20,116,0, + 124,1,100,1,100,0,131,3,100,0,107,8,114,54,121,12, + 124,0,106,1,124,1,95,2,87,0,110,20,4,0,116,3, + 107,10,114,52,1,0,1,0,1,0,89,0,110,2,88,0, + 124,2,115,74,116,0,124,1,100,2,100,0,131,3,100,0, + 107,8,114,166,124,0,106,4,125,3,124,3,100,0,107,8, + 114,134,124,0,106,5,100,0,107,9,114,134,116,6,100,0, + 107,8,114,110,116,7,130,1,116,6,106,8,125,4,124,4, + 106,9,124,4,131,1,125,3,124,0,106,5,124,3,95,10, + 121,10,124,3,124,1,95,11,87,0,110,20,4,0,116,3, + 107,10,114,164,1,0,1,0,1,0,89,0,110,2,88,0, + 124,2,115,186,116,0,124,1,100,3,100,0,131,3,100,0, + 107,8,114,220,121,12,124,0,106,12,124,1,95,13,87,0, + 110,20,4,0,116,3,107,10,114,218,1,0,1,0,1,0, + 89,0,110,2,88,0,121,10,124,0,124,1,95,14,87,0, + 110,20,4,0,116,3,107,10,114,250,1,0,1,0,1,0, + 89,0,110,2,88,0,124,2,144,1,115,20,116,0,124,1, + 100,4,100,0,131,3,100,0,107,8,144,1,114,68,124,0, + 106,5,100,0,107,9,144,1,114,68,121,12,124,0,106,5, + 124,1,95,15,87,0,110,22,4,0,116,3,107,10,144,1, + 114,66,1,0,1,0,1,0,89,0,110,2,88,0,124,0, + 106,16,144,1,114,208,124,2,144,1,115,100,116,0,124,1, + 100,5,100,0,131,3,100,0,107,8,144,1,114,136,121,12, + 124,0,106,17,124,1,95,18,87,0,110,22,4,0,116,3, + 107,10,144,1,114,134,1,0,1,0,1,0,89,0,110,2, + 88,0,124,2,144,1,115,160,116,0,124,1,100,6,100,0, + 131,3,100,0,107,8,144,1,114,208,124,0,106,19,100,0, + 107,9,144,1,114,208,121,12,124,0,106,19,124,1,95,20, + 87,0,110,22,4,0,116,3,107,10,144,1,114,206,1,0, + 1,0,1,0,89,0,110,2,88,0,124,1,83,0,41,7, + 78,114,1,0,0,0,114,85,0,0,0,218,11,95,95,112, + 97,99,107,97,103,101,95,95,114,127,0,0,0,114,92,0, + 0,0,114,125,0,0,0,41,21,114,6,0,0,0,114,15, + 0,0,0,114,1,0,0,0,114,90,0,0,0,114,93,0, + 0,0,114,106,0,0,0,114,115,0,0,0,114,116,0,0, + 0,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,218,7,95,95,110,101,119,95,95,90,5,95,112, + 97,116,104,114,85,0,0,0,114,119,0,0,0,114,130,0, + 0,0,114,89,0,0,0,114,127,0,0,0,114,113,0,0, + 0,114,103,0,0,0,114,92,0,0,0,114,112,0,0,0, + 114,125,0,0,0,41,5,114,82,0,0,0,114,83,0,0, + 0,114,129,0,0,0,114,93,0,0,0,114,131,0,0,0, 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 11,102,105,110,100,95,109,111,100,117,108,101,213,2,0,0, - 115,4,0,0,0,0,9,18,1,122,27,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95, - 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,4,0,0,0,67,0,0,0,115,67,0,0,0, - 124,1,0,106,0,0,116,1,0,106,2,0,107,7,0,114, - 51,0,116,3,0,100,1,0,106,4,0,124,1,0,106,0, - 0,131,1,0,100,2,0,124,1,0,106,0,0,131,1,1, - 130,1,0,116,5,0,116,6,0,106,7,0,124,1,0,131, - 2,0,83,41,3,122,24,67,114,101,97,116,101,32,97,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,122, - 29,123,33,114,125,32,105,115,32,110,111,116,32,97,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,114,15, - 0,0,0,41,8,114,15,0,0,0,114,14,0,0,0,114, - 76,0,0,0,114,77,0,0,0,114,50,0,0,0,114,65, - 0,0,0,114,57,0,0,0,90,14,99,114,101,97,116,101, - 95,98,117,105,108,116,105,110,41,2,114,19,0,0,0,114, - 88,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,138,0,0,0,225,2,0,0,115,8,0,0, - 0,0,3,18,1,21,1,12,1,122,29,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,46,99,114,101,97,116, - 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,67,0,0,0,115,20,0, - 0,0,116,0,0,116,1,0,106,2,0,124,1,0,131,2, - 0,1,100,1,0,83,41,2,122,22,69,120,101,99,32,97, + 18,95,105,110,105,116,95,109,111,100,117,108,101,95,97,116, + 116,114,115,237,1,0,0,115,92,0,0,0,0,4,20,1, + 2,1,12,1,14,1,6,2,20,1,6,1,8,2,10,1, + 8,1,4,1,6,2,10,1,8,1,2,1,10,1,14,1, + 6,2,20,1,2,1,12,1,14,1,6,2,2,1,10,1, + 14,1,6,2,24,1,12,1,2,1,12,1,16,1,6,2, + 8,1,24,1,2,1,12,1,16,1,6,2,24,1,12,1, + 2,1,12,1,16,1,6,1,114,133,0,0,0,99,1,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,82,0,0,0,100,1,125,1,116,0,124,0,106, + 1,100,2,131,2,114,30,124,0,106,1,106,2,124,0,131, + 1,125,1,110,20,116,0,124,0,106,1,100,3,131,2,114, + 50,116,3,100,4,131,1,130,1,124,1,100,1,107,8,114, + 68,116,4,124,0,106,5,131,1,125,1,116,6,124,0,124, + 1,131,2,1,0,124,1,83,0,41,5,122,43,67,114,101, + 97,116,101,32,97,32,109,111,100,117,108,101,32,98,97,115, + 101,100,32,111,110,32,116,104,101,32,112,114,111,118,105,100, + 101,100,32,115,112,101,99,46,78,218,13,99,114,101,97,116, + 101,95,109,111,100,117,108,101,218,11,101,120,101,99,95,109, + 111,100,117,108,101,122,66,108,111,97,100,101,114,115,32,116, + 104,97,116,32,100,101,102,105,110,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,109,117,115,116,32,97,108, + 115,111,32,100,101,102,105,110,101,32,99,114,101,97,116,101, + 95,109,111,100,117,108,101,40,41,41,7,114,4,0,0,0, + 114,93,0,0,0,114,134,0,0,0,114,70,0,0,0,114, + 16,0,0,0,114,15,0,0,0,114,133,0,0,0,41,2, + 114,82,0,0,0,114,83,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,16,109,111,100,117,108, + 101,95,102,114,111,109,95,115,112,101,99,41,2,0,0,115, + 18,0,0,0,0,3,4,1,12,3,14,1,12,1,8,2, + 8,1,10,1,10,1,114,136,0,0,0,99,1,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, + 115,110,0,0,0,124,0,106,0,100,1,107,8,114,14,100, + 2,110,4,124,0,106,0,125,1,124,0,106,1,100,1,107, + 8,114,68,124,0,106,2,100,1,107,8,114,52,100,3,106, + 3,124,1,131,1,83,0,113,106,100,4,106,3,124,1,124, + 0,106,2,131,2,83,0,110,38,124,0,106,4,114,90,100, + 5,106,3,124,1,124,0,106,1,131,2,83,0,110,16,100, + 6,106,3,124,0,106,0,124,0,106,1,131,2,83,0,100, + 1,83,0,41,7,122,38,82,101,116,117,114,110,32,116,104, + 101,32,114,101,112,114,32,116,111,32,117,115,101,32,102,111, + 114,32,116,104,101,32,109,111,100,117,108,101,46,78,114,87, + 0,0,0,122,13,60,109,111,100,117,108,101,32,123,33,114, + 125,62,122,20,60,109,111,100,117,108,101,32,123,33,114,125, + 32,40,123,33,114,125,41,62,122,23,60,109,111,100,117,108, + 101,32,123,33,114,125,32,102,114,111,109,32,123,33,114,125, + 62,122,18,60,109,111,100,117,108,101,32,123,33,114,125,32, + 40,123,125,41,62,41,5,114,15,0,0,0,114,103,0,0, + 0,114,93,0,0,0,114,38,0,0,0,114,113,0,0,0, + 41,2,114,82,0,0,0,114,15,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,91,0,0,0, + 58,2,0,0,115,16,0,0,0,0,3,20,1,10,1,10, + 1,12,2,16,2,6,1,16,2,114,91,0,0,0,99,2, + 0,0,0,0,0,0,0,4,0,0,0,12,0,0,0,67, + 0,0,0,115,186,0,0,0,124,0,106,0,125,2,116,1, + 106,2,131,0,1,0,116,3,124,2,131,1,143,148,1,0, + 116,4,106,5,106,6,124,2,131,1,124,1,107,9,114,62, + 100,1,106,7,124,2,131,1,125,3,116,8,124,3,124,2, + 100,2,141,2,130,1,124,0,106,9,100,3,107,8,114,114, + 124,0,106,10,100,3,107,8,114,96,116,8,100,4,124,0, + 106,0,100,2,141,2,130,1,116,11,124,0,124,1,100,5, + 100,6,141,3,1,0,124,1,83,0,116,11,124,0,124,1, + 100,5,100,6,141,3,1,0,116,12,124,0,106,9,100,7, + 131,2,115,154,124,0,106,9,106,13,124,2,131,1,1,0, + 110,12,124,0,106,9,106,14,124,1,131,1,1,0,87,0, + 100,3,81,0,82,0,88,0,116,4,106,5,124,2,25,0, + 83,0,41,8,122,70,69,120,101,99,117,116,101,32,116,104, + 101,32,115,112,101,99,39,115,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,32,105,110,32,97,110,32, + 101,120,105,115,116,105,110,103,32,109,111,100,117,108,101,39, + 115,32,110,97,109,101,115,112,97,99,101,46,122,30,109,111, + 100,117,108,101,32,123,33,114,125,32,110,111,116,32,105,110, + 32,115,121,115,46,109,111,100,117,108,101,115,41,1,114,15, + 0,0,0,78,122,14,109,105,115,115,105,110,103,32,108,111, + 97,100,101,114,84,41,1,114,129,0,0,0,114,135,0,0, + 0,41,15,114,15,0,0,0,114,46,0,0,0,218,12,97, + 99,113,117,105,114,101,95,108,111,99,107,114,42,0,0,0, + 114,14,0,0,0,114,79,0,0,0,114,30,0,0,0,114, + 38,0,0,0,114,70,0,0,0,114,93,0,0,0,114,106, + 0,0,0,114,133,0,0,0,114,4,0,0,0,218,11,108, + 111,97,100,95,109,111,100,117,108,101,114,135,0,0,0,41, + 4,114,82,0,0,0,114,83,0,0,0,114,15,0,0,0, + 218,3,109,115,103,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,80,0,0,0,75,2,0,0,115,32,0, + 0,0,0,2,6,1,8,1,10,1,16,1,10,1,12,1, + 10,1,10,1,14,2,14,1,4,1,14,1,12,4,14,2, + 22,1,114,80,0,0,0,99,1,0,0,0,0,0,0,0, + 2,0,0,0,27,0,0,0,67,0,0,0,115,206,0,0, + 0,124,0,106,0,106,1,124,0,106,2,131,1,1,0,116, + 3,106,4,124,0,106,2,25,0,125,1,116,5,124,1,100, + 1,100,0,131,3,100,0,107,8,114,76,121,12,124,0,106, + 0,124,1,95,6,87,0,110,20,4,0,116,7,107,10,114, + 74,1,0,1,0,1,0,89,0,110,2,88,0,116,5,124, + 1,100,2,100,0,131,3,100,0,107,8,114,154,121,40,124, + 1,106,8,124,1,95,9,116,10,124,1,100,3,131,2,115, + 130,124,0,106,2,106,11,100,4,131,1,100,5,25,0,124, + 1,95,9,87,0,110,20,4,0,116,7,107,10,114,152,1, + 0,1,0,1,0,89,0,110,2,88,0,116,5,124,1,100, + 6,100,0,131,3,100,0,107,8,114,202,121,10,124,0,124, + 1,95,12,87,0,110,20,4,0,116,7,107,10,114,200,1, + 0,1,0,1,0,89,0,110,2,88,0,124,1,83,0,41, + 7,78,114,85,0,0,0,114,130,0,0,0,114,127,0,0, + 0,114,117,0,0,0,114,19,0,0,0,114,89,0,0,0, + 41,13,114,93,0,0,0,114,138,0,0,0,114,15,0,0, + 0,114,14,0,0,0,114,79,0,0,0,114,6,0,0,0, + 114,85,0,0,0,114,90,0,0,0,114,1,0,0,0,114, + 130,0,0,0,114,4,0,0,0,114,118,0,0,0,114,89, + 0,0,0,41,2,114,82,0,0,0,114,83,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,25, + 95,108,111,97,100,95,98,97,99,107,119,97,114,100,95,99, + 111,109,112,97,116,105,98,108,101,100,2,0,0,115,40,0, + 0,0,0,4,14,2,12,1,16,1,2,1,12,1,14,1, + 6,1,16,1,2,4,8,1,10,1,22,1,14,1,6,1, + 16,1,2,1,10,1,14,1,6,1,114,140,0,0,0,99, + 1,0,0,0,0,0,0,0,2,0,0,0,11,0,0,0, + 67,0,0,0,115,118,0,0,0,124,0,106,0,100,0,107, + 9,114,30,116,1,124,0,106,0,100,1,131,2,115,30,116, + 2,124,0,131,1,83,0,116,3,124,0,131,1,125,1,116, + 4,124,1,131,1,143,54,1,0,124,0,106,0,100,0,107, + 8,114,84,124,0,106,5,100,0,107,8,114,96,116,6,100, + 2,124,0,106,7,100,3,141,2,130,1,110,12,124,0,106, + 0,106,8,124,1,131,1,1,0,87,0,100,0,81,0,82, + 0,88,0,116,9,106,10,124,0,106,7,25,0,83,0,41, + 4,78,114,135,0,0,0,122,14,109,105,115,115,105,110,103, + 32,108,111,97,100,101,114,41,1,114,15,0,0,0,41,11, + 114,93,0,0,0,114,4,0,0,0,114,140,0,0,0,114, + 136,0,0,0,114,96,0,0,0,114,106,0,0,0,114,70, + 0,0,0,114,15,0,0,0,114,135,0,0,0,114,14,0, + 0,0,114,79,0,0,0,41,2,114,82,0,0,0,114,83, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,14,95,108,111,97,100,95,117,110,108,111,99,107, + 101,100,129,2,0,0,115,20,0,0,0,0,2,10,2,12, + 1,8,2,8,1,10,1,10,1,10,1,16,3,22,5,114, + 141,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, + 0,9,0,0,0,67,0,0,0,115,38,0,0,0,116,0, + 106,1,131,0,1,0,116,2,124,0,106,3,131,1,143,10, + 1,0,116,4,124,0,131,1,83,0,81,0,82,0,88,0, + 100,1,83,0,41,2,122,191,82,101,116,117,114,110,32,97, + 32,110,101,119,32,109,111,100,117,108,101,32,111,98,106,101, + 99,116,44,32,108,111,97,100,101,100,32,98,121,32,116,104, + 101,32,115,112,101,99,39,115,32,108,111,97,100,101,114,46, + 10,10,32,32,32,32,84,104,101,32,109,111,100,117,108,101, + 32,105,115,32,110,111,116,32,97,100,100,101,100,32,116,111, + 32,105,116,115,32,112,97,114,101,110,116,46,10,10,32,32, + 32,32,73,102,32,97,32,109,111,100,117,108,101,32,105,115, + 32,97,108,114,101,97,100,121,32,105,110,32,115,121,115,46, + 109,111,100,117,108,101,115,44,32,116,104,97,116,32,101,120, + 105,115,116,105,110,103,32,109,111,100,117,108,101,32,103,101, + 116,115,10,32,32,32,32,99,108,111,98,98,101,114,101,100, + 46,10,10,32,32,32,32,78,41,5,114,46,0,0,0,114, + 137,0,0,0,114,42,0,0,0,114,15,0,0,0,114,141, + 0,0,0,41,1,114,82,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,81,0,0,0,152,2, + 0,0,115,6,0,0,0,0,9,8,1,12,1,114,81,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,64,0,0,0,115,136,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,101,4,100,2,100,3,132,0, + 131,1,90,5,101,6,100,19,100,5,100,6,132,1,131,1, + 90,7,101,6,100,20,100,7,100,8,132,1,131,1,90,8, + 101,6,100,9,100,10,132,0,131,1,90,9,101,6,100,11, + 100,12,132,0,131,1,90,10,101,6,101,11,100,13,100,14, + 132,0,131,1,131,1,90,12,101,6,101,11,100,15,100,16, + 132,0,131,1,131,1,90,13,101,6,101,11,100,17,100,18, + 132,0,131,1,131,1,90,14,101,6,101,15,131,1,90,16, + 100,4,83,0,41,21,218,15,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,122,144,77,101,116,97,32,112,97, + 116,104,32,105,109,112,111,114,116,32,102,111,114,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,46,10, + 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, + 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, + 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, + 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, + 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, + 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, + 115,115,46,10,10,32,32,32,32,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,12, + 0,0,0,100,1,106,0,124,0,106,1,131,1,83,0,41, + 2,122,115,82,101,116,117,114,110,32,114,101,112,114,32,102, + 111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 46,32,32,84,104,101,32,105,109,112,111,114,116,32,109,97, + 99,104,105,110,101,114,121,32,100,111,101,115,32,116,104,101, + 32,106,111,98,32,105,116,115,101,108,102,46,10,10,32,32, + 32,32,32,32,32,32,122,24,60,109,111,100,117,108,101,32, + 123,33,114,125,32,40,98,117,105,108,116,45,105,110,41,62, + 41,2,114,38,0,0,0,114,1,0,0,0,41,1,114,83, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,86,0,0,0,177,2,0,0,115,2,0,0,0, + 0,7,122,27,66,117,105,108,116,105,110,73,109,112,111,114, + 116,101,114,46,109,111,100,117,108,101,95,114,101,112,114,78, + 99,4,0,0,0,0,0,0,0,4,0,0,0,5,0,0, + 0,67,0,0,0,115,46,0,0,0,124,2,100,0,107,9, + 114,12,100,0,83,0,116,0,106,1,124,1,131,1,114,38, + 116,2,124,1,124,0,100,1,100,2,141,3,83,0,110,4, + 100,0,83,0,100,0,83,0,41,3,78,122,8,98,117,105, + 108,116,45,105,110,41,1,114,103,0,0,0,41,3,114,46, + 0,0,0,90,10,105,115,95,98,117,105,108,116,105,110,114, + 78,0,0,0,41,4,218,3,99,108,115,114,71,0,0,0, + 218,4,112,97,116,104,218,6,116,97,114,103,101,116,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,9,102, + 105,110,100,95,115,112,101,99,186,2,0,0,115,10,0,0, + 0,0,2,8,1,4,1,10,1,16,2,122,25,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,102,105,110, + 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,30,0,0,0, + 124,0,106,0,124,1,124,2,131,2,125,3,124,3,100,1, + 107,9,114,26,124,3,106,1,83,0,100,1,83,0,41,2, + 122,175,70,105,110,100,32,116,104,101,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,32,32,32,32,73,102,32,39,112,97,116,104,39,32,105, + 115,32,101,118,101,114,32,115,112,101,99,105,102,105,101,100, + 32,116,104,101,110,32,116,104,101,32,115,101,97,114,99,104, + 32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97, + 32,102,97,105,108,117,114,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,41,2,114,146,0,0,0,114,93,0,0,0,41,4, + 114,143,0,0,0,114,71,0,0,0,114,144,0,0,0,114, + 82,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, + 195,2,0,0,115,4,0,0,0,0,9,12,1,122,27,66, + 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,102, + 105,110,100,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 46,0,0,0,124,1,106,0,116,1,106,2,107,7,114,34, + 116,3,100,1,106,4,124,1,106,0,131,1,124,1,106,0, + 100,2,141,2,130,1,116,5,116,6,106,7,124,1,131,2, + 83,0,41,3,122,24,67,114,101,97,116,101,32,97,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,122,29, + 123,33,114,125,32,105,115,32,110,111,116,32,97,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,41,1,114, + 15,0,0,0,41,8,114,15,0,0,0,114,14,0,0,0, + 114,69,0,0,0,114,70,0,0,0,114,38,0,0,0,114, + 58,0,0,0,114,46,0,0,0,90,14,99,114,101,97,116, + 101,95,98,117,105,108,116,105,110,41,2,114,26,0,0,0, + 114,82,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,134,0,0,0,207,2,0,0,115,8,0, + 0,0,0,3,12,1,12,1,10,1,122,29,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,99,114,101,97, + 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,16, + 0,0,0,116,0,116,1,106,2,124,1,131,2,1,0,100, + 1,83,0,41,2,122,22,69,120,101,99,32,97,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,78,41,3, + 114,58,0,0,0,114,46,0,0,0,90,12,101,120,101,99, + 95,98,117,105,108,116,105,110,41,2,114,26,0,0,0,114, + 83,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,135,0,0,0,215,2,0,0,115,2,0,0, + 0,0,3,122,27,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,101,120,101,99,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2, + 122,57,82,101,116,117,114,110,32,78,111,110,101,32,97,115, 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 78,41,3,114,65,0,0,0,114,57,0,0,0,90,12,101, - 120,101,99,95,98,117,105,108,116,105,110,41,2,114,19,0, - 0,0,114,89,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,139,0,0,0,233,2,0,0,115, - 2,0,0,0,0,3,122,27,66,117,105,108,116,105,110,73, - 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, - 83,41,2,122,57,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,101, - 32,99,111,100,101,32,111,98,106,101,99,116,115,46,78,114, - 10,0,0,0,41,2,114,151,0,0,0,114,78,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 8,103,101,116,95,99,111,100,101,238,2,0,0,115,2,0, - 0,0,0,4,122,24,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,56, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, - 100,111,32,110,111,116,32,104,97,118,101,32,115,111,117,114, - 99,101,32,99,111,100,101,46,78,114,10,0,0,0,41,2, - 114,151,0,0,0,114,78,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,10,103,101,116,95,115, - 111,117,114,99,101,244,2,0,0,115,2,0,0,0,0,4, + 115,32,100,111,32,110,111,116,32,104,97,118,101,32,99,111, + 100,101,32,111,98,106,101,99,116,115,46,78,114,10,0,0, + 0,41,2,114,143,0,0,0,114,71,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,8,103,101, + 116,95,99,111,100,101,220,2,0,0,115,2,0,0,0,0, + 4,122,24,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,83,0,41,2,122,56,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,115,32,100,111,32, + 110,111,116,32,104,97,118,101,32,115,111,117,114,99,101,32, + 99,111,100,101,46,78,114,10,0,0,0,41,2,114,143,0, + 0,0,114,71,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,10,103,101,116,95,115,111,117,114, + 99,101,226,2,0,0,115,2,0,0,0,0,4,122,26,66, + 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,103, + 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,83,0,41,2,122,52,82,101,116,117,114, + 110,32,70,97,108,115,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,97,114,101,32, + 110,101,118,101,114,32,112,97,99,107,97,103,101,115,46,70, + 114,10,0,0,0,41,2,114,143,0,0,0,114,71,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,105,0,0,0,232,2,0,0,115,2,0,0,0,0,4, 122,26,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,46,103,101,116,95,115,111,117,114,99,101,99,2,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,4,0,0,0,100,1,0,83,41,2,122,52,82,101, - 116,117,114,110,32,70,97,108,115,101,32,97,115,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, - 114,101,32,110,101,118,101,114,32,112,97,99,107,97,103,101, - 115,46,70,114,10,0,0,0,41,2,114,151,0,0,0,114, - 78,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,109,0,0,0,250,2,0,0,115,2,0,0, - 0,0,4,122,26,66,117,105,108,116,105,110,73,109,112,111, - 114,116,101,114,46,105,115,95,112,97,99,107,97,103,101,41, - 17,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0, - 114,3,0,0,0,218,12,115,116,97,116,105,99,109,101,116, - 104,111,100,114,92,0,0,0,218,11,99,108,97,115,115,109, - 101,116,104,111,100,114,154,0,0,0,114,155,0,0,0,114, - 138,0,0,0,114,139,0,0,0,114,81,0,0,0,114,156, - 0,0,0,114,157,0,0,0,114,109,0,0,0,114,90,0, - 0,0,114,146,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,150,0,0,0, - 186,2,0,0,115,30,0,0,0,12,7,6,2,18,9,3, - 1,21,8,3,1,18,11,18,8,18,5,3,1,21,5,3, - 1,21,5,3,1,21,5,114,150,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,64,0,0, - 0,115,211,0,0,0,101,0,0,90,1,0,100,0,0,90, - 2,0,100,1,0,90,3,0,101,4,0,100,2,0,100,3, - 0,132,0,0,131,1,0,90,5,0,101,6,0,100,4,0, - 100,4,0,100,5,0,100,6,0,132,2,0,131,1,0,90, - 7,0,101,6,0,100,4,0,100,7,0,100,8,0,132,1, - 0,131,1,0,90,8,0,101,6,0,100,9,0,100,10,0, - 132,0,0,131,1,0,90,9,0,101,4,0,100,11,0,100, - 12,0,132,0,0,131,1,0,90,10,0,101,6,0,100,13, - 0,100,14,0,132,0,0,131,1,0,90,11,0,101,6,0, - 101,12,0,100,15,0,100,16,0,132,0,0,131,1,0,131, - 1,0,90,13,0,101,6,0,101,12,0,100,17,0,100,18, - 0,132,0,0,131,1,0,131,1,0,90,14,0,101,6,0, - 101,12,0,100,19,0,100,20,0,132,0,0,131,1,0,131, - 1,0,90,15,0,100,4,0,83,41,21,218,14,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,122,142,77,101,116, - 97,32,112,97,116,104,32,105,109,112,111,114,116,32,102,111, - 114,32,102,114,111,122,101,110,32,109,111,100,117,108,101,115, - 46,10,10,32,32,32,32,65,108,108,32,109,101,116,104,111, - 100,115,32,97,114,101,32,101,105,116,104,101,114,32,99,108, - 97,115,115,32,111,114,32,115,116,97,116,105,99,32,109,101, - 116,104,111,100,115,32,116,111,32,97,118,111,105,100,32,116, - 104,101,32,110,101,101,100,32,116,111,10,32,32,32,32,105, - 110,115,116,97,110,116,105,97,116,101,32,116,104,101,32,99, - 108,97,115,115,46,10,10,32,32,32,32,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, - 115,16,0,0,0,100,1,0,106,0,0,124,0,0,106,1, - 0,131,1,0,83,41,2,122,115,82,101,116,117,114,110,32, - 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,112, - 111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,111, - 101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,108, - 102,46,10,10,32,32,32,32,32,32,32,32,122,22,60,109, - 111,100,117,108,101,32,123,33,114,125,32,40,102,114,111,122, - 101,110,41,62,41,2,114,50,0,0,0,114,1,0,0,0, - 41,1,218,1,109,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,114,92,0,0,0,12,3,0,0,115,2,0, - 0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,46,109,111,100,117,108,101,95,114,101,112,114, - 78,99,4,0,0,0,0,0,0,0,4,0,0,0,5,0, - 0,0,67,0,0,0,115,42,0,0,0,116,0,0,106,1, - 0,124,1,0,131,1,0,114,34,0,116,2,0,124,1,0, - 124,0,0,100,1,0,100,2,0,131,2,1,83,100,0,0, - 83,100,0,0,83,41,3,78,114,107,0,0,0,90,6,102, - 114,111,122,101,110,41,3,114,57,0,0,0,114,82,0,0, - 0,114,85,0,0,0,41,4,114,151,0,0,0,114,78,0, - 0,0,114,152,0,0,0,114,153,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,154,0,0,0, - 21,3,0,0,115,6,0,0,0,0,2,15,1,19,2,122, - 24,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 102,105,110,100,95,115,112,101,99,99,3,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,23, - 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,114, - 19,0,124,0,0,83,100,1,0,83,41,2,122,93,70,105, - 110,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, + 114,46,105,115,95,112,97,99,107,97,103,101,41,2,78,78, + 41,1,78,41,17,114,1,0,0,0,114,0,0,0,0,114, + 2,0,0,0,114,3,0,0,0,218,12,115,116,97,116,105, + 99,109,101,116,104,111,100,114,86,0,0,0,218,11,99,108, + 97,115,115,109,101,116,104,111,100,114,146,0,0,0,114,147, + 0,0,0,114,134,0,0,0,114,135,0,0,0,114,74,0, + 0,0,114,148,0,0,0,114,149,0,0,0,114,105,0,0, + 0,114,84,0,0,0,114,138,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 142,0,0,0,168,2,0,0,115,30,0,0,0,8,7,4, + 2,12,9,2,1,12,8,2,1,12,11,12,8,12,5,2, + 1,14,5,2,1,14,5,2,1,14,5,114,142,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,140,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,101,4,100,2,100,3,132,0,131,1, + 90,5,101,6,100,21,100,5,100,6,132,1,131,1,90,7, + 101,6,100,22,100,7,100,8,132,1,131,1,90,8,101,6, + 100,9,100,10,132,0,131,1,90,9,101,4,100,11,100,12, + 132,0,131,1,90,10,101,6,100,13,100,14,132,0,131,1, + 90,11,101,6,101,12,100,15,100,16,132,0,131,1,131,1, + 90,13,101,6,101,12,100,17,100,18,132,0,131,1,131,1, + 90,14,101,6,101,12,100,19,100,20,132,0,131,1,131,1, + 90,15,100,4,83,0,41,23,218,14,70,114,111,122,101,110, + 73,109,112,111,114,116,101,114,122,142,77,101,116,97,32,112, + 97,116,104,32,105,109,112,111,114,116,32,102,111,114,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,115,46,10,10, + 32,32,32,32,65,108,108,32,109,101,116,104,111,100,115,32, + 97,114,101,32,101,105,116,104,101,114,32,99,108,97,115,115, + 32,111,114,32,115,116,97,116,105,99,32,109,101,116,104,111, + 100,115,32,116,111,32,97,118,111,105,100,32,116,104,101,32, + 110,101,101,100,32,116,111,10,32,32,32,32,105,110,115,116, + 97,110,116,105,97,116,101,32,116,104,101,32,99,108,97,115, + 115,46,10,10,32,32,32,32,99,1,0,0,0,0,0,0, + 0,1,0,0,0,2,0,0,0,67,0,0,0,115,12,0, + 0,0,100,1,106,0,124,0,106,1,131,1,83,0,41,2, + 122,115,82,101,116,117,114,110,32,114,101,112,114,32,102,111, + 114,32,116,104,101,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, + 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, + 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, + 32,32,32,32,32,122,22,60,109,111,100,117,108,101,32,123, + 33,114,125,32,40,102,114,111,122,101,110,41,62,41,2,114, + 38,0,0,0,114,1,0,0,0,41,1,218,1,109,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,86,0, + 0,0,250,2,0,0,115,2,0,0,0,0,7,122,26,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111, + 100,117,108,101,95,114,101,112,114,78,99,4,0,0,0,0, + 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115, + 34,0,0,0,116,0,106,1,124,1,131,1,114,26,116,2, + 124,1,124,0,100,1,100,2,141,3,83,0,110,4,100,0, + 83,0,100,0,83,0,41,3,78,90,6,102,114,111,122,101, + 110,41,1,114,103,0,0,0,41,3,114,46,0,0,0,114, + 75,0,0,0,114,78,0,0,0,41,4,114,143,0,0,0, + 114,71,0,0,0,114,144,0,0,0,114,145,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,146, + 0,0,0,3,3,0,0,115,6,0,0,0,0,2,10,1, + 16,2,122,24,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, + 0,0,0,0,0,3,0,0,0,2,0,0,0,67,0,0, + 0,115,18,0,0,0,116,0,106,1,124,1,131,1,114,14, + 124,0,83,0,100,1,83,0,41,2,122,93,70,105,110,100, + 32,97,32,102,114,111,122,101,110,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,2,114,46,0,0, + 0,114,75,0,0,0,41,3,114,143,0,0,0,114,71,0, + 0,0,114,144,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,147,0,0,0,10,3,0,0,115, + 2,0,0,0,0,7,122,26,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, + 41,2,122,42,85,115,101,32,100,101,102,97,117,108,116,32, + 115,101,109,97,110,116,105,99,115,32,102,111,114,32,109,111, + 100,117,108,101,32,99,114,101,97,116,105,111,110,46,78,114, + 10,0,0,0,41,2,114,143,0,0,0,114,82,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 134,0,0,0,19,3,0,0,115,0,0,0,0,122,28,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,99,114, + 101,97,116,101,95,109,111,100,117,108,101,99,1,0,0,0, + 0,0,0,0,3,0,0,0,4,0,0,0,67,0,0,0, + 115,64,0,0,0,124,0,106,0,106,1,125,1,116,2,106, + 3,124,1,131,1,115,36,116,4,100,1,106,5,124,1,131, + 1,124,1,100,2,141,2,130,1,116,6,116,2,106,7,124, + 1,131,2,125,2,116,8,124,2,124,0,106,9,131,2,1, + 0,100,0,83,0,41,3,78,122,27,123,33,114,125,32,105, + 115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,41,1,114,15,0,0,0,41,10,114,89, + 0,0,0,114,15,0,0,0,114,46,0,0,0,114,75,0, + 0,0,114,70,0,0,0,114,38,0,0,0,114,58,0,0, + 0,218,17,103,101,116,95,102,114,111,122,101,110,95,111,98, + 106,101,99,116,218,4,101,120,101,99,114,7,0,0,0,41, + 3,114,83,0,0,0,114,15,0,0,0,218,4,99,111,100, + 101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,135,0,0,0,23,3,0,0,115,12,0,0,0,0,2, + 8,1,10,1,10,1,8,1,12,1,122,26,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,101,120,101,99,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,0, + 116,0,124,0,124,1,131,2,83,0,41,1,122,95,76,111, + 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,57, - 0,0,0,114,82,0,0,0,41,3,114,151,0,0,0,114, - 78,0,0,0,114,152,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,155,0,0,0,28,3,0, - 0,115,2,0,0,0,0,7,122,26,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,102,105,110,100,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 0,83,41,2,122,42,85,115,101,32,100,101,102,97,117,108, - 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, - 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, - 78,114,10,0,0,0,41,2,114,151,0,0,0,114,88,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,138,0,0,0,37,3,0,0,115,0,0,0,0,122, - 28,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 99,114,101,97,116,101,95,109,111,100,117,108,101,99,1,0, - 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, - 0,0,115,92,0,0,0,124,0,0,106,0,0,106,1,0, - 125,1,0,116,2,0,106,3,0,124,1,0,131,1,0,115, - 54,0,116,4,0,100,1,0,106,5,0,124,1,0,131,1, - 0,100,2,0,124,1,0,131,1,1,130,1,0,116,6,0, - 116,2,0,106,7,0,124,1,0,131,2,0,125,2,0,116, - 8,0,124,2,0,124,0,0,106,9,0,131,2,0,1,100, - 0,0,83,41,3,78,122,27,123,33,114,125,32,105,115,32, - 110,111,116,32,97,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,114,15,0,0,0,41,10,114,95,0,0,0,114, - 15,0,0,0,114,57,0,0,0,114,82,0,0,0,114,77, - 0,0,0,114,50,0,0,0,114,65,0,0,0,218,17,103, - 101,116,95,102,114,111,122,101,110,95,111,98,106,101,99,116, - 218,4,101,120,101,99,114,7,0,0,0,41,3,114,89,0, - 0,0,114,15,0,0,0,218,4,99,111,100,101,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,139,0,0, - 0,41,3,0,0,115,12,0,0,0,0,2,12,1,15,1, - 18,1,9,1,18,1,122,26,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,101,120,101,99,95,109,111,100,117, - 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,67,0,0,0,115,13,0,0,0,116,0,0,124, - 0,0,124,1,0,131,2,0,83,41,1,122,95,76,111,97, - 100,32,97,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, - 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, - 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,41,1,114,90, - 0,0,0,41,2,114,151,0,0,0,114,78,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,146, - 0,0,0,50,3,0,0,115,2,0,0,0,0,7,122,26, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108, - 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 13,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, - 83,41,1,122,45,82,101,116,117,114,110,32,116,104,101,32, - 99,111,100,101,32,111,98,106,101,99,116,32,102,111,114,32, - 116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,46,41,2,114,57,0,0,0,114,162,0,0,0,41,2, - 114,151,0,0,0,114,78,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,156,0,0,0,59,3, - 0,0,115,2,0,0,0,0,4,122,23,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,111, - 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, - 41,2,122,54,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,102,114,111,122,101,110,32,109,111,100,117,108,101, - 115,32,100,111,32,110,111,116,32,104,97,118,101,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,10,0,0,0, - 41,2,114,151,0,0,0,114,78,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,157,0,0,0, - 65,3,0,0,115,2,0,0,0,0,4,122,25,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95, - 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,13,0,0,0, - 116,0,0,106,1,0,124,1,0,131,1,0,83,41,1,122, - 46,82,101,116,117,114,110,32,84,114,117,101,32,105,102,32, - 116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,41, - 2,114,57,0,0,0,90,17,105,115,95,102,114,111,122,101, - 110,95,112,97,99,107,97,103,101,41,2,114,151,0,0,0, - 114,78,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,114,109,0,0,0,71,3,0,0,115,2,0, - 0,0,0,4,122,25,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,46,105,115,95,112,97,99,107,97,103,101,41, - 16,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0, - 114,3,0,0,0,114,158,0,0,0,114,92,0,0,0,114, - 159,0,0,0,114,154,0,0,0,114,155,0,0,0,114,138, - 0,0,0,114,139,0,0,0,114,146,0,0,0,114,84,0, - 0,0,114,156,0,0,0,114,157,0,0,0,114,109,0,0, - 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,160,0,0,0,3,3,0,0,115,30, - 0,0,0,12,7,6,2,18,9,3,1,21,6,3,1,18, - 8,18,4,18,9,18,9,3,1,21,5,3,1,21,5,3, - 1,114,160,0,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,46,0,0,0, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, - 0,100,5,0,132,0,0,90,5,0,100,6,0,83,41,7, - 218,18,95,73,109,112,111,114,116,76,111,99,107,67,111,110, - 116,101,120,116,122,36,67,111,110,116,101,120,116,32,109,97, - 110,97,103,101,114,32,102,111,114,32,116,104,101,32,105,109, - 112,111,114,116,32,108,111,99,107,46,99,1,0,0,0,0, - 0,0,0,1,0,0,0,1,0,0,0,67,0,0,0,115, - 14,0,0,0,116,0,0,106,1,0,131,0,0,1,100,1, - 0,83,41,2,122,24,65,99,113,117,105,114,101,32,116,104, - 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, - 2,114,57,0,0,0,114,145,0,0,0,41,1,114,19,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,23,0,0,0,84,3,0,0,115,2,0,0,0,0, - 2,122,28,95,73,109,112,111,114,116,76,111,99,107,67,111, - 110,116,101,120,116,46,95,95,101,110,116,101,114,95,95,99, - 4,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0, - 67,0,0,0,115,14,0,0,0,116,0,0,106,1,0,131, - 0,0,1,100,1,0,83,41,2,122,60,82,101,108,101,97, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,114, + 84,0,0,0,41,2,114,143,0,0,0,114,71,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 138,0,0,0,32,3,0,0,115,2,0,0,0,0,7,122, + 26,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,10,0,0,0,116,0,106,1,124,1,131,1,83,0,41, + 1,122,45,82,101,116,117,114,110,32,116,104,101,32,99,111, + 100,101,32,111,98,106,101,99,116,32,102,111,114,32,116,104, + 101,32,102,114,111,122,101,110,32,109,111,100,117,108,101,46, + 41,2,114,46,0,0,0,114,154,0,0,0,41,2,114,143, + 0,0,0,114,71,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,148,0,0,0,41,3,0,0, + 115,2,0,0,0,0,4,122,23,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,103,101,116,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2, + 122,54,82,101,116,117,114,110,32,78,111,110,101,32,97,115, + 32,102,114,111,122,101,110,32,109,111,100,117,108,101,115,32, + 100,111,32,110,111,116,32,104,97,118,101,32,115,111,117,114, + 99,101,32,99,111,100,101,46,78,114,10,0,0,0,41,2, + 114,143,0,0,0,114,71,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,149,0,0,0,47,3, + 0,0,115,2,0,0,0,0,4,122,25,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,103,101,116,95,115,111, + 117,114,99,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,10,0,0,0,116,0, + 106,1,124,1,131,1,83,0,41,1,122,46,82,101,116,117, + 114,110,32,84,114,117,101,32,105,102,32,116,104,101,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,32,105,115,32, + 97,32,112,97,99,107,97,103,101,46,41,2,114,46,0,0, + 0,90,17,105,115,95,102,114,111,122,101,110,95,112,97,99, + 107,97,103,101,41,2,114,143,0,0,0,114,71,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 105,0,0,0,53,3,0,0,115,2,0,0,0,0,4,122, + 25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 105,115,95,112,97,99,107,97,103,101,41,2,78,78,41,1, + 78,41,16,114,1,0,0,0,114,0,0,0,0,114,2,0, + 0,0,114,3,0,0,0,114,150,0,0,0,114,86,0,0, + 0,114,151,0,0,0,114,146,0,0,0,114,147,0,0,0, + 114,134,0,0,0,114,135,0,0,0,114,138,0,0,0,114, + 77,0,0,0,114,148,0,0,0,114,149,0,0,0,114,105, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,152,0,0,0,241,2,0,0, + 115,30,0,0,0,8,7,4,2,12,9,2,1,12,6,2, + 1,12,8,12,4,12,9,12,9,2,1,14,5,2,1,14, + 5,2,1,114,152,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,64,0,0,0,115,32,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 83,0,41,7,218,18,95,73,109,112,111,114,116,76,111,99, + 107,67,111,110,116,101,120,116,122,36,67,111,110,116,101,120, + 116,32,109,97,110,97,103,101,114,32,102,111,114,32,116,104, + 101,32,105,109,112,111,114,116,32,108,111,99,107,46,99,1, + 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,67, + 0,0,0,115,12,0,0,0,116,0,106,1,131,0,1,0, + 100,1,83,0,41,2,122,24,65,99,113,117,105,114,101,32, + 116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,46, + 78,41,2,114,46,0,0,0,114,137,0,0,0,41,1,114, + 26,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,48,0,0,0,66,3,0,0,115,2,0,0, + 0,0,2,122,28,95,73,109,112,111,114,116,76,111,99,107, + 67,111,110,116,101,120,116,46,95,95,101,110,116,101,114,95, + 95,99,4,0,0,0,0,0,0,0,4,0,0,0,1,0, + 0,0,67,0,0,0,115,12,0,0,0,116,0,106,1,131, + 0,1,0,100,1,83,0,41,2,122,60,82,101,108,101,97, 115,101,32,116,104,101,32,105,109,112,111,114,116,32,108,111, 99,107,32,114,101,103,97,114,100,108,101,115,115,32,111,102, 32,97,110,121,32,114,97,105,115,101,100,32,101,120,99,101, - 112,116,105,111,110,115,46,78,41,2,114,57,0,0,0,114, - 58,0,0,0,41,4,114,19,0,0,0,90,8,101,120,99, + 112,116,105,111,110,115,46,78,41,2,114,46,0,0,0,114, + 47,0,0,0,41,4,114,26,0,0,0,90,8,101,120,99, 95,116,121,112,101,90,9,101,120,99,95,118,97,108,117,101, 90,13,101,120,99,95,116,114,97,99,101,98,97,99,107,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,30, - 0,0,0,88,3,0,0,115,2,0,0,0,0,2,122,27, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,50, + 0,0,0,70,3,0,0,115,2,0,0,0,0,2,122,27, 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101, 120,116,46,95,95,101,120,105,116,95,95,78,41,6,114,1, 0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,0, - 0,0,114,23,0,0,0,114,30,0,0,0,114,10,0,0, + 0,0,114,48,0,0,0,114,50,0,0,0,114,10,0,0, 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 114,165,0,0,0,80,3,0,0,115,6,0,0,0,12,2, - 6,2,12,4,114,165,0,0,0,99,3,0,0,0,0,0, - 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,88, - 0,0,0,124,1,0,106,0,0,100,1,0,124,2,0,100, - 2,0,24,131,2,0,125,3,0,116,1,0,124,3,0,131, - 1,0,124,2,0,107,0,0,114,52,0,116,2,0,100,3, - 0,131,1,0,130,1,0,124,3,0,100,4,0,25,125,4, - 0,124,0,0,114,84,0,100,5,0,106,3,0,124,4,0, - 124,0,0,131,2,0,83,124,4,0,83,41,6,122,50,82, - 101,115,111,108,118,101,32,97,32,114,101,108,97,116,105,118, - 101,32,109,111,100,117,108,101,32,110,97,109,101,32,116,111, - 32,97,110,32,97,98,115,111,108,117,116,101,32,111,110,101, - 46,114,121,0,0,0,114,45,0,0,0,122,50,97,116,116, - 101,109,112,116,101,100,32,114,101,108,97,116,105,118,101,32, - 105,109,112,111,114,116,32,98,101,121,111,110,100,32,116,111, - 112,45,108,101,118,101,108,32,112,97,99,107,97,103,101,114, - 33,0,0,0,122,5,123,125,46,123,125,41,4,218,6,114, - 115,112,108,105,116,218,3,108,101,110,218,10,86,97,108,117, - 101,69,114,114,111,114,114,50,0,0,0,41,5,114,15,0, - 0,0,218,7,112,97,99,107,97,103,101,218,5,108,101,118, - 101,108,90,4,98,105,116,115,90,4,98,97,115,101,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,13,95, - 114,101,115,111,108,118,101,95,110,97,109,101,93,3,0,0, - 115,10,0,0,0,0,2,22,1,18,1,12,1,10,1,114, - 171,0,0,0,99,3,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,67,0,0,0,115,47,0,0,0,124,0, - 0,106,0,0,124,1,0,124,2,0,131,2,0,125,3,0, - 124,3,0,100,0,0,107,8,0,114,34,0,100,0,0,83, - 116,1,0,124,1,0,124,3,0,131,2,0,83,41,1,78, - 41,2,114,155,0,0,0,114,85,0,0,0,41,4,218,6, - 102,105,110,100,101,114,114,15,0,0,0,114,152,0,0,0, - 114,99,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99, - 95,108,101,103,97,99,121,102,3,0,0,115,8,0,0,0, - 0,3,18,1,12,1,4,1,114,173,0,0,0,99,3,0, - 0,0,0,0,0,0,9,0,0,0,27,0,0,0,67,0, - 0,0,115,42,1,0,0,116,0,0,106,1,0,100,1,0, - 107,9,0,114,41,0,116,0,0,106,1,0,12,114,41,0, - 116,2,0,106,3,0,100,2,0,116,4,0,131,2,0,1, - 124,0,0,116,0,0,106,5,0,107,6,0,125,3,0,120, - 235,0,116,0,0,106,1,0,68,93,220,0,125,4,0,116, - 6,0,131,0,0,143,90,0,1,121,13,0,124,4,0,106, - 7,0,125,5,0,87,110,51,0,4,116,8,0,107,10,0, - 114,148,0,1,1,1,116,9,0,124,4,0,124,0,0,124, - 1,0,131,3,0,125,6,0,124,6,0,100,1,0,107,8, - 0,114,144,0,119,66,0,89,110,19,0,88,124,5,0,124, - 0,0,124,1,0,124,2,0,131,3,0,125,6,0,87,100, - 1,0,81,82,88,124,6,0,100,1,0,107,9,0,114,66, - 0,124,3,0,12,114,26,1,124,0,0,116,0,0,106,5, - 0,107,6,0,114,26,1,116,0,0,106,5,0,124,0,0, - 25,125,7,0,121,13,0,124,7,0,106,10,0,125,8,0, - 87,110,22,0,4,116,8,0,107,10,0,114,2,1,1,1, - 1,124,6,0,83,89,113,30,1,88,124,8,0,100,1,0, - 107,8,0,114,19,1,124,6,0,83,124,8,0,83,113,66, - 0,124,6,0,83,113,66,0,87,100,1,0,83,100,1,0, - 83,41,3,122,23,70,105,110,100,32,97,32,109,111,100,117, - 108,101,39,115,32,108,111,97,100,101,114,46,78,122,22,115, - 121,115,46,109,101,116,97,95,112,97,116,104,32,105,115,32, - 101,109,112,116,121,41,11,114,14,0,0,0,218,9,109,101, - 116,97,95,112,97,116,104,114,141,0,0,0,114,142,0,0, - 0,218,13,73,109,112,111,114,116,87,97,114,110,105,110,103, - 114,21,0,0,0,114,165,0,0,0,114,154,0,0,0,114, - 96,0,0,0,114,173,0,0,0,114,95,0,0,0,41,9, - 114,15,0,0,0,114,152,0,0,0,114,153,0,0,0,90, - 9,105,115,95,114,101,108,111,97,100,114,172,0,0,0,114, - 154,0,0,0,114,88,0,0,0,114,89,0,0,0,114,95, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,218,10,95,102,105,110,100,95,115,112,101,99,111,3, - 0,0,115,48,0,0,0,0,2,25,1,16,4,15,1,16, - 1,10,1,3,1,13,1,13,1,18,1,12,1,8,2,25, - 1,12,2,22,1,13,1,3,1,13,1,13,4,9,2,12, - 1,4,2,7,2,8,2,114,176,0,0,0,99,3,0,0, - 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, - 0,115,185,0,0,0,116,0,0,124,0,0,116,1,0,131, - 2,0,115,42,0,116,2,0,100,1,0,106,3,0,116,4, - 0,124,0,0,131,1,0,131,1,0,131,1,0,130,1,0, - 124,2,0,100,2,0,107,0,0,114,66,0,116,5,0,100, - 3,0,131,1,0,130,1,0,124,2,0,100,2,0,107,4, - 0,114,150,0,116,0,0,124,1,0,116,1,0,131,2,0, - 115,108,0,116,2,0,100,4,0,131,1,0,130,1,0,110, - 42,0,124,1,0,116,6,0,106,7,0,107,7,0,114,150, - 0,100,5,0,125,3,0,116,8,0,124,3,0,106,3,0, - 124,1,0,131,1,0,131,1,0,130,1,0,124,0,0,12, - 114,181,0,124,2,0,100,2,0,107,2,0,114,181,0,116, - 5,0,100,6,0,131,1,0,130,1,0,100,7,0,83,41, - 8,122,28,86,101,114,105,102,121,32,97,114,103,117,109,101, - 110,116,115,32,97,114,101,32,34,115,97,110,101,34,46,122, - 31,109,111,100,117,108,101,32,110,97,109,101,32,109,117,115, - 116,32,98,101,32,115,116,114,44,32,110,111,116,32,123,125, - 114,33,0,0,0,122,18,108,101,118,101,108,32,109,117,115, - 116,32,98,101,32,62,61,32,48,122,31,95,95,112,97,99, - 107,97,103,101,95,95,32,110,111,116,32,115,101,116,32,116, - 111,32,97,32,115,116,114,105,110,103,122,61,80,97,114,101, - 110,116,32,109,111,100,117,108,101,32,123,33,114,125,32,110, - 111,116,32,108,111,97,100,101,100,44,32,99,97,110,110,111, - 116,32,112,101,114,102,111,114,109,32,114,101,108,97,116,105, - 118,101,32,105,109,112,111,114,116,122,17,69,109,112,116,121, - 32,109,111,100,117,108,101,32,110,97,109,101,78,41,9,218, - 10,105,115,105,110,115,116,97,110,99,101,218,3,115,116,114, - 218,9,84,121,112,101,69,114,114,111,114,114,50,0,0,0, - 114,13,0,0,0,114,168,0,0,0,114,14,0,0,0,114, - 21,0,0,0,218,11,83,121,115,116,101,109,69,114,114,111, - 114,41,4,114,15,0,0,0,114,169,0,0,0,114,170,0, - 0,0,114,147,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,218,13,95,115,97,110,105,116,121,95, - 99,104,101,99,107,151,3,0,0,115,24,0,0,0,0,2, - 15,1,27,1,12,1,12,1,12,1,15,1,15,1,15,1, - 6,2,21,1,19,1,114,181,0,0,0,122,16,78,111,32, - 109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123, - 33,114,125,99,2,0,0,0,0,0,0,0,8,0,0,0, - 12,0,0,0,67,0,0,0,115,40,1,0,0,100,0,0, - 125,2,0,124,0,0,106,0,0,100,1,0,131,1,0,100, - 2,0,25,125,3,0,124,3,0,114,175,0,124,3,0,116, - 1,0,106,2,0,107,7,0,114,59,0,116,3,0,124,1, - 0,124,3,0,131,2,0,1,124,0,0,116,1,0,106,2, - 0,107,6,0,114,85,0,116,1,0,106,2,0,124,0,0, - 25,83,116,1,0,106,2,0,124,3,0,25,125,4,0,121, - 13,0,124,4,0,106,4,0,125,2,0,87,110,61,0,4, - 116,5,0,107,10,0,114,174,0,1,1,1,116,6,0,100, - 3,0,23,106,7,0,124,0,0,124,3,0,131,2,0,125, - 5,0,116,8,0,124,5,0,100,4,0,124,0,0,131,1, - 1,100,0,0,130,2,0,89,110,1,0,88,116,9,0,124, - 0,0,124,2,0,131,2,0,125,6,0,124,6,0,100,0, - 0,107,8,0,114,232,0,116,8,0,116,6,0,106,7,0, - 124,0,0,131,1,0,100,4,0,124,0,0,131,1,1,130, - 1,0,110,12,0,116,10,0,124,6,0,131,1,0,125,7, - 0,124,3,0,114,36,1,116,1,0,106,2,0,124,3,0, - 25,125,4,0,116,11,0,124,4,0,124,0,0,106,0,0, - 100,1,0,131,1,0,100,5,0,25,124,7,0,131,3,0, - 1,124,7,0,83,41,6,78,114,121,0,0,0,114,33,0, - 0,0,122,23,59,32,123,33,114,125,32,105,115,32,110,111, - 116,32,97,32,112,97,99,107,97,103,101,114,15,0,0,0, - 114,140,0,0,0,41,12,114,122,0,0,0,114,14,0,0, - 0,114,21,0,0,0,114,65,0,0,0,114,131,0,0,0, - 114,96,0,0,0,218,8,95,69,82,82,95,77,83,71,114, - 50,0,0,0,114,77,0,0,0,114,176,0,0,0,114,149, - 0,0,0,114,5,0,0,0,41,8,114,15,0,0,0,218, - 7,105,109,112,111,114,116,95,114,152,0,0,0,114,123,0, - 0,0,90,13,112,97,114,101,110,116,95,109,111,100,117,108, - 101,114,147,0,0,0,114,88,0,0,0,114,89,0,0,0, + 114,157,0,0,0,62,3,0,0,115,6,0,0,0,8,2, + 4,2,8,4,114,157,0,0,0,99,3,0,0,0,0,0, + 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,64, + 0,0,0,124,1,106,0,100,1,124,2,100,2,24,0,131, + 2,125,3,116,1,124,3,131,1,124,2,107,0,114,36,116, + 2,100,3,131,1,130,1,124,3,100,4,25,0,125,4,124, + 0,114,60,100,5,106,3,124,4,124,0,131,2,83,0,124, + 4,83,0,41,6,122,50,82,101,115,111,108,118,101,32,97, + 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, + 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, + 108,117,116,101,32,111,110,101,46,114,117,0,0,0,114,33, + 0,0,0,122,50,97,116,116,101,109,112,116,101,100,32,114, + 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,98, + 101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,32, + 112,97,99,107,97,103,101,114,19,0,0,0,122,5,123,125, + 46,123,125,41,4,218,6,114,115,112,108,105,116,218,3,108, + 101,110,218,10,86,97,108,117,101,69,114,114,111,114,114,38, + 0,0,0,41,5,114,15,0,0,0,218,7,112,97,99,107, + 97,103,101,218,5,108,101,118,101,108,90,4,98,105,116,115, + 90,4,98,97,115,101,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,13,95,114,101,115,111,108,118,101,95, + 110,97,109,101,75,3,0,0,115,10,0,0,0,0,2,16, + 1,12,1,8,1,8,1,114,163,0,0,0,99,3,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, + 0,115,34,0,0,0,124,0,106,0,124,1,124,2,131,2, + 125,3,124,3,100,0,107,8,114,24,100,0,83,0,116,1, + 124,1,124,3,131,2,83,0,41,1,78,41,2,114,147,0, + 0,0,114,78,0,0,0,41,4,218,6,102,105,110,100,101, + 114,114,15,0,0,0,114,144,0,0,0,114,93,0,0,0, 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 23,95,102,105,110,100,95,97,110,100,95,108,111,97,100,95, - 117,110,108,111,99,107,101,100,171,3,0,0,115,42,0,0, - 0,0,1,6,1,19,1,6,1,15,1,13,2,15,1,11, - 1,13,1,3,1,13,1,13,1,22,1,26,1,15,1,12, - 1,30,2,12,1,6,2,13,1,29,1,114,184,0,0,0, - 99,2,0,0,0,0,0,0,0,2,0,0,0,10,0,0, - 0,67,0,0,0,115,37,0,0,0,116,0,0,124,0,0, - 131,1,0,143,18,0,1,116,1,0,124,0,0,124,1,0, - 131,2,0,83,87,100,1,0,81,82,88,100,1,0,83,41, - 2,122,54,70,105,110,100,32,97,110,100,32,108,111,97,100, - 32,116,104,101,32,109,111,100,117,108,101,44,32,97,110,100, - 32,114,101,108,101,97,115,101,32,116,104,101,32,105,109,112, - 111,114,116,32,108,111,99,107,46,78,41,2,114,54,0,0, - 0,114,184,0,0,0,41,2,114,15,0,0,0,114,183,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,218,14,95,102,105,110,100,95,97,110,100,95,108,111,97, - 100,198,3,0,0,115,4,0,0,0,0,2,13,1,114,185, - 0,0,0,114,33,0,0,0,99,3,0,0,0,0,0,0, - 0,5,0,0,0,4,0,0,0,67,0,0,0,115,166,0, - 0,0,116,0,0,124,0,0,124,1,0,124,2,0,131,3, - 0,1,124,2,0,100,1,0,107,4,0,114,46,0,116,1, - 0,124,0,0,124,1,0,124,2,0,131,3,0,125,0,0, - 116,2,0,106,3,0,131,0,0,1,124,0,0,116,4,0, - 106,5,0,107,7,0,114,84,0,116,6,0,124,0,0,116, - 7,0,131,2,0,83,116,4,0,106,5,0,124,0,0,25, - 125,3,0,124,3,0,100,2,0,107,8,0,114,152,0,116, - 2,0,106,8,0,131,0,0,1,100,3,0,106,9,0,124, - 0,0,131,1,0,125,4,0,116,10,0,124,4,0,100,4, - 0,124,0,0,131,1,1,130,1,0,116,11,0,124,0,0, - 131,1,0,1,124,3,0,83,41,5,97,50,1,0,0,73, - 109,112,111,114,116,32,97,110,100,32,114,101,116,117,114,110, - 32,116,104,101,32,109,111,100,117,108,101,32,98,97,115,101, - 100,32,111,110,32,105,116,115,32,110,97,109,101,44,32,116, - 104,101,32,112,97,99,107,97,103,101,32,116,104,101,32,99, - 97,108,108,32,105,115,10,32,32,32,32,98,101,105,110,103, - 32,109,97,100,101,32,102,114,111,109,44,32,97,110,100,32, - 116,104,101,32,108,101,118,101,108,32,97,100,106,117,115,116, - 109,101,110,116,46,10,10,32,32,32,32,84,104,105,115,32, - 102,117,110,99,116,105,111,110,32,114,101,112,114,101,115,101, - 110,116,115,32,116,104,101,32,103,114,101,97,116,101,115,116, - 32,99,111,109,109,111,110,32,100,101,110,111,109,105,110,97, - 116,111,114,32,111,102,32,102,117,110,99,116,105,111,110,97, - 108,105,116,121,10,32,32,32,32,98,101,116,119,101,101,110, - 32,105,109,112,111,114,116,95,109,111,100,117,108,101,32,97, - 110,100,32,95,95,105,109,112,111,114,116,95,95,46,32,84, - 104,105,115,32,105,110,99,108,117,100,101,115,32,115,101,116, - 116,105,110,103,32,95,95,112,97,99,107,97,103,101,95,95, - 32,105,102,10,32,32,32,32,116,104,101,32,108,111,97,100, - 101,114,32,100,105,100,32,110,111,116,46,10,10,32,32,32, - 32,114,33,0,0,0,78,122,40,105,109,112,111,114,116,32, - 111,102,32,123,125,32,104,97,108,116,101,100,59,32,78,111, - 110,101,32,105,110,32,115,121,115,46,109,111,100,117,108,101, - 115,114,15,0,0,0,41,12,114,181,0,0,0,114,171,0, - 0,0,114,57,0,0,0,114,145,0,0,0,114,14,0,0, - 0,114,21,0,0,0,114,185,0,0,0,218,11,95,103,99, - 100,95,105,109,112,111,114,116,114,58,0,0,0,114,50,0, - 0,0,114,77,0,0,0,114,63,0,0,0,41,5,114,15, - 0,0,0,114,169,0,0,0,114,170,0,0,0,114,89,0, - 0,0,114,74,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,186,0,0,0,204,3,0,0,115, - 28,0,0,0,0,9,16,1,12,1,18,1,10,1,15,1, - 13,1,13,1,12,1,10,1,6,1,9,1,18,1,10,1, - 114,186,0,0,0,99,3,0,0,0,0,0,0,0,6,0, - 0,0,17,0,0,0,67,0,0,0,115,239,0,0,0,116, - 0,0,124,0,0,100,1,0,131,2,0,114,235,0,100,2, - 0,124,1,0,107,6,0,114,83,0,116,1,0,124,1,0, - 131,1,0,125,1,0,124,1,0,106,2,0,100,2,0,131, - 1,0,1,116,0,0,124,0,0,100,3,0,131,2,0,114, - 83,0,124,1,0,106,3,0,124,0,0,106,4,0,131,1, - 0,1,120,149,0,124,1,0,68,93,141,0,125,3,0,116, - 0,0,124,0,0,124,3,0,131,2,0,115,90,0,100,4, - 0,106,5,0,124,0,0,106,6,0,124,3,0,131,2,0, - 125,4,0,121,17,0,116,7,0,124,2,0,124,4,0,131, - 2,0,1,87,113,90,0,4,116,8,0,107,10,0,114,230, - 0,1,125,5,0,1,122,47,0,116,9,0,124,5,0,131, - 1,0,106,10,0,116,11,0,131,1,0,114,209,0,124,5, - 0,106,12,0,124,4,0,107,2,0,114,209,0,119,90,0, - 130,0,0,87,89,100,5,0,100,5,0,125,5,0,126,5, - 0,88,113,90,0,88,113,90,0,87,124,0,0,83,41,6, - 122,238,70,105,103,117,114,101,32,111,117,116,32,119,104,97, - 116,32,95,95,105,109,112,111,114,116,95,95,32,115,104,111, - 117,108,100,32,114,101,116,117,114,110,46,10,10,32,32,32, - 32,84,104,101,32,105,109,112,111,114,116,95,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,97,32,99,97,108,108, - 97,98,108,101,32,119,104,105,99,104,32,116,97,107,101,115, - 32,116,104,101,32,110,97,109,101,32,111,102,32,109,111,100, - 117,108,101,32,116,111,10,32,32,32,32,105,109,112,111,114, - 116,46,32,73,116,32,105,115,32,114,101,113,117,105,114,101, - 100,32,116,111,32,100,101,99,111,117,112,108,101,32,116,104, - 101,32,102,117,110,99,116,105,111,110,32,102,114,111,109,32, - 97,115,115,117,109,105,110,103,32,105,109,112,111,114,116,108, - 105,98,39,115,10,32,32,32,32,105,109,112,111,114,116,32, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,105, - 115,32,100,101,115,105,114,101,100,46,10,10,32,32,32,32, - 114,131,0,0,0,250,1,42,218,7,95,95,97,108,108,95, - 95,122,5,123,125,46,123,125,78,41,13,114,4,0,0,0, - 114,130,0,0,0,218,6,114,101,109,111,118,101,218,6,101, - 120,116,101,110,100,114,188,0,0,0,114,50,0,0,0,114, - 1,0,0,0,114,65,0,0,0,114,77,0,0,0,114,178, - 0,0,0,114,71,0,0,0,218,15,95,69,82,82,95,77, - 83,71,95,80,82,69,70,73,88,114,15,0,0,0,41,6, - 114,89,0,0,0,218,8,102,114,111,109,108,105,115,116,114, - 183,0,0,0,218,1,120,90,9,102,114,111,109,95,110,97, - 109,101,90,3,101,120,99,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,218,16,95,104,97,110,100,108,101,95, - 102,114,111,109,108,105,115,116,228,3,0,0,115,34,0,0, - 0,0,10,15,1,12,1,12,1,13,1,15,1,16,1,13, - 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,3, - 1,26,1,114,194,0,0,0,99,1,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,72,0, - 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, - 0,124,1,0,100,2,0,107,8,0,114,68,0,124,0,0, - 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, - 114,68,0,124,1,0,106,1,0,100,5,0,131,1,0,100, - 6,0,25,125,1,0,124,1,0,83,41,7,122,167,67,97, - 108,99,117,108,97,116,101,32,119,104,97,116,32,95,95,112, - 97,99,107,97,103,101,95,95,32,115,104,111,117,108,100,32, - 98,101,46,10,10,32,32,32,32,95,95,112,97,99,107,97, - 103,101,95,95,32,105,115,32,110,111,116,32,103,117,97,114, - 97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,102, - 105,110,101,100,32,111,114,32,99,111,117,108,100,32,98,101, - 32,115,101,116,32,116,111,32,78,111,110,101,10,32,32,32, - 32,116,111,32,114,101,112,114,101,115,101,110,116,32,116,104, - 97,116,32,105,116,115,32,112,114,111,112,101,114,32,118,97, - 108,117,101,32,105,115,32,117,110,107,110,111,119,110,46,10, - 10,32,32,32,32,114,134,0,0,0,78,114,1,0,0,0, - 114,131,0,0,0,114,121,0,0,0,114,33,0,0,0,41, - 2,114,42,0,0,0,114,122,0,0,0,41,2,218,7,103, - 108,111,98,97,108,115,114,169,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,218,17,95,99,97,108, - 99,95,95,95,112,97,99,107,97,103,101,95,95,4,4,0, - 0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1, - 19,1,114,196,0,0,0,99,5,0,0,0,0,0,0,0, - 9,0,0,0,5,0,0,0,67,0,0,0,115,227,0,0, - 0,124,4,0,100,1,0,107,2,0,114,27,0,116,0,0, - 124,0,0,131,1,0,125,5,0,110,54,0,124,1,0,100, - 2,0,107,9,0,114,45,0,124,1,0,110,3,0,105,0, - 0,125,6,0,116,1,0,124,6,0,131,1,0,125,7,0, - 116,0,0,124,0,0,124,7,0,124,4,0,131,3,0,125, - 5,0,124,3,0,115,207,0,124,4,0,100,1,0,107,2, - 0,114,122,0,116,0,0,124,0,0,106,2,0,100,3,0, - 131,1,0,100,1,0,25,131,1,0,83,124,0,0,115,132, - 0,124,5,0,83,116,3,0,124,0,0,131,1,0,116,3, - 0,124,0,0,106,2,0,100,3,0,131,1,0,100,1,0, - 25,131,1,0,24,125,8,0,116,4,0,106,5,0,124,5, - 0,106,6,0,100,2,0,116,3,0,124,5,0,106,6,0, - 131,1,0,124,8,0,24,133,2,0,25,25,83,110,16,0, - 116,7,0,124,5,0,124,3,0,116,0,0,131,3,0,83, - 100,2,0,83,41,4,97,215,1,0,0,73,109,112,111,114, - 116,32,97,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,84,104,101,32,39,103,108,111,98,97,108,115,39,32,97, - 114,103,117,109,101,110,116,32,105,115,32,117,115,101,100,32, - 116,111,32,105,110,102,101,114,32,119,104,101,114,101,32,116, - 104,101,32,105,109,112,111,114,116,32,105,115,32,111,99,99, - 117,114,114,105,110,103,32,102,114,111,109,10,32,32,32,32, - 116,111,32,104,97,110,100,108,101,32,114,101,108,97,116,105, - 118,101,32,105,109,112,111,114,116,115,46,32,84,104,101,32, - 39,108,111,99,97,108,115,39,32,97,114,103,117,109,101,110, - 116,32,105,115,32,105,103,110,111,114,101,100,46,32,84,104, - 101,10,32,32,32,32,39,102,114,111,109,108,105,115,116,39, - 32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102, - 105,101,115,32,119,104,97,116,32,115,104,111,117,108,100,32, - 101,120,105,115,116,32,97,115,32,97,116,116,114,105,98,117, - 116,101,115,32,111,110,32,116,104,101,32,109,111,100,117,108, - 101,10,32,32,32,32,98,101,105,110,103,32,105,109,112,111, - 114,116,101,100,32,40,101,46,103,46,32,96,96,102,114,111, - 109,32,109,111,100,117,108,101,32,105,109,112,111,114,116,32, - 60,102,114,111,109,108,105,115,116,62,96,96,41,46,32,32, - 84,104,101,32,39,108,101,118,101,108,39,10,32,32,32,32, - 97,114,103,117,109,101,110,116,32,114,101,112,114,101,115,101, - 110,116,115,32,116,104,101,32,112,97,99,107,97,103,101,32, - 108,111,99,97,116,105,111,110,32,116,111,32,105,109,112,111, - 114,116,32,102,114,111,109,32,105,110,32,97,32,114,101,108, - 97,116,105,118,101,10,32,32,32,32,105,109,112,111,114,116, - 32,40,101,46,103,46,32,96,96,102,114,111,109,32,46,46, - 112,107,103,32,105,109,112,111,114,116,32,109,111,100,96,96, - 32,119,111,117,108,100,32,104,97,118,101,32,97,32,39,108, - 101,118,101,108,39,32,111,102,32,50,41,46,10,10,32,32, - 32,32,114,33,0,0,0,78,114,121,0,0,0,41,8,114, - 186,0,0,0,114,196,0,0,0,218,9,112,97,114,116,105, - 116,105,111,110,114,167,0,0,0,114,14,0,0,0,114,21, - 0,0,0,114,1,0,0,0,114,194,0,0,0,41,9,114, - 15,0,0,0,114,195,0,0,0,218,6,108,111,99,97,108, - 115,114,192,0,0,0,114,170,0,0,0,114,89,0,0,0, - 90,8,103,108,111,98,97,108,115,95,114,169,0,0,0,90, - 7,99,117,116,95,111,102,102,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,10,95,95,105,109,112,111,114, - 116,95,95,19,4,0,0,115,26,0,0,0,0,11,12,1, - 15,2,24,1,12,1,18,1,6,3,12,1,23,1,6,1, - 4,4,35,3,40,2,114,199,0,0,0,99,1,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, - 115,53,0,0,0,116,0,0,106,1,0,124,0,0,131,1, - 0,125,1,0,124,1,0,100,0,0,107,8,0,114,43,0, - 116,2,0,100,1,0,124,0,0,23,131,1,0,130,1,0, - 116,3,0,124,1,0,131,1,0,83,41,2,78,122,25,110, - 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,32,110,97,109,101,100,32,41,4,114,150,0,0,0,114, - 154,0,0,0,114,77,0,0,0,114,149,0,0,0,41,2, - 114,15,0,0,0,114,88,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,18,95,98,117,105,108, - 116,105,110,95,102,114,111,109,95,110,97,109,101,54,4,0, - 0,115,8,0,0,0,0,1,15,1,12,1,16,1,114,200, - 0,0,0,99,2,0,0,0,0,0,0,0,12,0,0,0, - 12,0,0,0,67,0,0,0,115,74,1,0,0,124,1,0, - 97,0,0,124,0,0,97,1,0,116,2,0,116,1,0,131, - 1,0,125,2,0,120,123,0,116,1,0,106,3,0,106,4, - 0,131,0,0,68,93,106,0,92,2,0,125,3,0,125,4, - 0,116,5,0,124,4,0,124,2,0,131,2,0,114,40,0, - 124,3,0,116,1,0,106,6,0,107,6,0,114,91,0,116, - 7,0,125,5,0,110,27,0,116,0,0,106,8,0,124,3, - 0,131,1,0,114,40,0,116,9,0,125,5,0,110,3,0, - 113,40,0,116,10,0,124,4,0,124,5,0,131,2,0,125, - 6,0,116,11,0,124,6,0,124,4,0,131,2,0,1,113, - 40,0,87,116,1,0,106,3,0,116,12,0,25,125,7,0, - 120,73,0,100,5,0,68,93,65,0,125,8,0,124,8,0, - 116,1,0,106,3,0,107,7,0,114,206,0,116,13,0,124, - 8,0,131,1,0,125,9,0,110,13,0,116,1,0,106,3, - 0,124,8,0,25,125,9,0,116,14,0,124,7,0,124,8, - 0,124,9,0,131,3,0,1,113,170,0,87,121,16,0,116, - 13,0,100,2,0,131,1,0,125,10,0,87,110,24,0,4, - 116,15,0,107,10,0,114,25,1,1,1,1,100,3,0,125, - 10,0,89,110,1,0,88,116,14,0,124,7,0,100,2,0, - 124,10,0,131,3,0,1,116,13,0,100,4,0,131,1,0, - 125,11,0,116,14,0,124,7,0,100,4,0,124,11,0,131, - 3,0,1,100,3,0,83,41,6,122,250,83,101,116,117,112, - 32,105,109,112,111,114,116,108,105,98,32,98,121,32,105,109, - 112,111,114,116,105,110,103,32,110,101,101,100,101,100,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, - 97,110,100,32,105,110,106,101,99,116,105,110,103,32,116,104, - 101,109,10,32,32,32,32,105,110,116,111,32,116,104,101,32, - 103,108,111,98,97,108,32,110,97,109,101,115,112,97,99,101, - 46,10,10,32,32,32,32,65,115,32,115,121,115,32,105,115, - 32,110,101,101,100,101,100,32,102,111,114,32,115,121,115,46, - 109,111,100,117,108,101,115,32,97,99,99,101,115,115,32,97, - 110,100,32,95,105,109,112,32,105,115,32,110,101,101,100,101, - 100,32,116,111,32,108,111,97,100,32,98,117,105,108,116,45, - 105,110,10,32,32,32,32,109,111,100,117,108,101,115,44,32, - 116,104,111,115,101,32,116,119,111,32,109,111,100,117,108,101, - 115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,99, - 105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,10, - 10,32,32,32,32,114,141,0,0,0,114,34,0,0,0,78, - 114,62,0,0,0,41,1,114,141,0,0,0,41,16,114,57, - 0,0,0,114,14,0,0,0,114,13,0,0,0,114,21,0, - 0,0,218,5,105,116,101,109,115,114,177,0,0,0,114,76, - 0,0,0,114,150,0,0,0,114,82,0,0,0,114,160,0, - 0,0,114,132,0,0,0,114,137,0,0,0,114,1,0,0, - 0,114,200,0,0,0,114,5,0,0,0,114,77,0,0,0, - 41,12,218,10,115,121,115,95,109,111,100,117,108,101,218,11, - 95,105,109,112,95,109,111,100,117,108,101,90,11,109,111,100, - 117,108,101,95,116,121,112,101,114,15,0,0,0,114,89,0, - 0,0,114,99,0,0,0,114,88,0,0,0,90,11,115,101, - 108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,116, - 105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,110, - 95,109,111,100,117,108,101,90,13,116,104,114,101,97,100,95, - 109,111,100,117,108,101,90,14,119,101,97,107,114,101,102,95, - 109,111,100,117,108,101,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,218,6,95,115,101,116,117,112,61,4,0, - 0,115,50,0,0,0,0,9,6,1,6,3,12,1,28,1, - 15,1,15,1,9,1,15,1,9,2,3,1,15,1,17,3, - 13,1,13,1,15,1,15,2,13,1,20,3,3,1,16,1, - 13,2,11,1,16,3,12,1,114,204,0,0,0,99,2,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, - 0,0,115,87,0,0,0,116,0,0,124,0,0,124,1,0, - 131,2,0,1,116,1,0,106,2,0,106,3,0,116,4,0, - 131,1,0,1,116,1,0,106,2,0,106,3,0,116,5,0, - 131,1,0,1,100,1,0,100,2,0,108,6,0,125,2,0, - 124,2,0,97,7,0,124,2,0,106,8,0,116,1,0,106, - 9,0,116,10,0,25,131,1,0,1,100,2,0,83,41,3, - 122,50,73,110,115,116,97,108,108,32,105,109,112,111,114,116, - 108,105,98,32,97,115,32,116,104,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112, - 111,114,116,46,114,33,0,0,0,78,41,11,114,204,0,0, - 0,114,14,0,0,0,114,174,0,0,0,114,113,0,0,0, - 114,150,0,0,0,114,160,0,0,0,218,26,95,102,114,111, - 122,101,110,95,105,109,112,111,114,116,108,105,98,95,101,120, - 116,101,114,110,97,108,114,119,0,0,0,218,8,95,105,110, - 115,116,97,108,108,114,21,0,0,0,114,1,0,0,0,41, - 3,114,202,0,0,0,114,203,0,0,0,114,205,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, - 206,0,0,0,108,4,0,0,115,12,0,0,0,0,2,13, - 2,16,1,16,3,12,1,6,1,114,206,0,0,0,41,51, - 114,3,0,0,0,114,119,0,0,0,114,12,0,0,0,114, - 16,0,0,0,114,17,0,0,0,114,59,0,0,0,114,41, - 0,0,0,114,48,0,0,0,114,31,0,0,0,114,32,0, - 0,0,114,53,0,0,0,114,54,0,0,0,114,56,0,0, - 0,114,63,0,0,0,114,65,0,0,0,114,75,0,0,0, - 114,81,0,0,0,114,84,0,0,0,114,90,0,0,0,114, - 101,0,0,0,114,102,0,0,0,114,106,0,0,0,114,85, - 0,0,0,218,6,111,98,106,101,99,116,90,9,95,80,79, - 80,85,76,65,84,69,114,132,0,0,0,114,137,0,0,0, - 114,144,0,0,0,114,97,0,0,0,114,86,0,0,0,114, - 148,0,0,0,114,149,0,0,0,114,87,0,0,0,114,150, - 0,0,0,114,160,0,0,0,114,165,0,0,0,114,171,0, - 0,0,114,173,0,0,0,114,176,0,0,0,114,181,0,0, - 0,114,191,0,0,0,114,182,0,0,0,114,184,0,0,0, - 114,185,0,0,0,114,186,0,0,0,114,194,0,0,0,114, - 196,0,0,0,114,199,0,0,0,114,200,0,0,0,114,204, - 0,0,0,114,206,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,218,8,60,109, - 111,100,117,108,101,62,8,0,0,0,115,96,0,0,0,6, - 17,6,2,12,8,12,4,19,20,6,2,6,3,22,4,19, - 68,19,21,19,19,12,19,12,19,12,11,18,8,12,11,12, - 12,12,16,12,36,19,27,19,101,24,26,9,3,18,45,18, - 60,12,18,12,17,12,25,12,29,12,23,12,16,19,73,19, - 77,19,13,12,9,12,9,15,40,12,17,6,1,10,2,12, - 27,12,6,18,24,12,32,12,15,24,35,12,7,12,47, + 17,95,102,105,110,100,95,115,112,101,99,95,108,101,103,97, + 99,121,84,3,0,0,115,8,0,0,0,0,3,12,1,8, + 1,4,1,114,165,0,0,0,99,3,0,0,0,0,0,0, + 0,10,0,0,0,27,0,0,0,67,0,0,0,115,244,0, + 0,0,116,0,106,1,125,3,124,3,100,1,107,8,114,22, + 116,2,100,2,131,1,130,1,124,3,115,38,116,3,106,4, + 100,3,116,5,131,2,1,0,124,0,116,0,106,6,107,6, + 125,4,120,190,124,3,68,0,93,178,125,5,116,7,131,0, + 143,72,1,0,121,10,124,5,106,8,125,6,87,0,110,42, + 4,0,116,9,107,10,114,118,1,0,1,0,1,0,116,10, + 124,5,124,0,124,1,131,3,125,7,124,7,100,1,107,8, + 114,114,119,54,89,0,110,14,88,0,124,6,124,0,124,1, + 124,2,131,3,125,7,87,0,100,1,81,0,82,0,88,0, + 124,7,100,1,107,9,114,54,124,4,12,0,114,228,124,0, + 116,0,106,6,107,6,114,228,116,0,106,6,124,0,25,0, + 125,8,121,10,124,8,106,11,125,9,87,0,110,20,4,0, + 116,9,107,10,114,206,1,0,1,0,1,0,124,7,83,0, + 88,0,124,9,100,1,107,8,114,222,124,7,83,0,113,232, + 124,9,83,0,113,54,124,7,83,0,113,54,87,0,100,1, + 83,0,100,1,83,0,41,4,122,21,70,105,110,100,32,97, + 32,109,111,100,117,108,101,39,115,32,115,112,101,99,46,78, + 122,53,115,121,115,46,109,101,116,97,95,112,97,116,104,32, + 105,115,32,78,111,110,101,44,32,80,121,116,104,111,110,32, + 105,115,32,108,105,107,101,108,121,32,115,104,117,116,116,105, + 110,103,32,100,111,119,110,122,22,115,121,115,46,109,101,116, + 97,95,112,97,116,104,32,105,115,32,101,109,112,116,121,41, + 12,114,14,0,0,0,218,9,109,101,116,97,95,112,97,116, + 104,114,70,0,0,0,218,9,95,119,97,114,110,105,110,103, + 115,218,4,119,97,114,110,218,13,73,109,112,111,114,116,87, + 97,114,110,105,110,103,114,79,0,0,0,114,157,0,0,0, + 114,146,0,0,0,114,90,0,0,0,114,165,0,0,0,114, + 89,0,0,0,41,10,114,15,0,0,0,114,144,0,0,0, + 114,145,0,0,0,114,166,0,0,0,90,9,105,115,95,114, + 101,108,111,97,100,114,164,0,0,0,114,146,0,0,0,114, + 82,0,0,0,114,83,0,0,0,114,89,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,10,95, + 102,105,110,100,95,115,112,101,99,93,3,0,0,115,54,0, + 0,0,0,2,6,1,8,2,8,3,4,1,12,5,10,1, + 10,1,8,1,2,1,10,1,14,1,12,1,8,1,8,2, + 22,1,8,2,16,1,10,1,2,1,10,1,14,4,6,2, + 8,1,6,2,6,2,8,2,114,170,0,0,0,99,3,0, + 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, + 0,0,115,140,0,0,0,116,0,124,0,116,1,131,2,115, + 28,116,2,100,1,106,3,116,4,124,0,131,1,131,1,131, + 1,130,1,124,2,100,2,107,0,114,44,116,5,100,3,131, + 1,130,1,124,2,100,2,107,4,114,114,116,0,124,1,116, + 1,131,2,115,72,116,2,100,4,131,1,130,1,110,42,124, + 1,115,86,116,6,100,5,131,1,130,1,110,28,124,1,116, + 7,106,8,107,7,114,114,100,6,125,3,116,9,124,3,106, + 3,124,1,131,1,131,1,130,1,124,0,12,0,114,136,124, + 2,100,2,107,2,114,136,116,5,100,7,131,1,130,1,100, + 8,83,0,41,9,122,28,86,101,114,105,102,121,32,97,114, + 103,117,109,101,110,116,115,32,97,114,101,32,34,115,97,110, + 101,34,46,122,31,109,111,100,117,108,101,32,110,97,109,101, + 32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,111, + 116,32,123,125,114,19,0,0,0,122,18,108,101,118,101,108, + 32,109,117,115,116,32,98,101,32,62,61,32,48,122,31,95, + 95,112,97,99,107,97,103,101,95,95,32,110,111,116,32,115, + 101,116,32,116,111,32,97,32,115,116,114,105,110,103,122,54, + 97,116,116,101,109,112,116,101,100,32,114,101,108,97,116,105, + 118,101,32,105,109,112,111,114,116,32,119,105,116,104,32,110, + 111,32,107,110,111,119,110,32,112,97,114,101,110,116,32,112, + 97,99,107,97,103,101,122,61,80,97,114,101,110,116,32,109, + 111,100,117,108,101,32,123,33,114,125,32,110,111,116,32,108, + 111,97,100,101,100,44,32,99,97,110,110,111,116,32,112,101, + 114,102,111,114,109,32,114,101,108,97,116,105,118,101,32,105, + 109,112,111,114,116,122,17,69,109,112,116,121,32,109,111,100, + 117,108,101,32,110,97,109,101,78,41,10,218,10,105,115,105, + 110,115,116,97,110,99,101,218,3,115,116,114,218,9,84,121, + 112,101,69,114,114,111,114,114,38,0,0,0,114,13,0,0, + 0,114,160,0,0,0,114,70,0,0,0,114,14,0,0,0, + 114,79,0,0,0,218,11,83,121,115,116,101,109,69,114,114, + 111,114,41,4,114,15,0,0,0,114,161,0,0,0,114,162, + 0,0,0,114,139,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,13,95,115,97,110,105,116,121, + 95,99,104,101,99,107,140,3,0,0,115,28,0,0,0,0, + 2,10,1,18,1,8,1,8,1,8,1,10,1,10,1,4, + 1,10,2,10,1,4,2,14,1,14,1,114,175,0,0,0, + 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, + 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, + 0,8,0,0,0,12,0,0,0,67,0,0,0,115,220,0, + 0,0,100,0,125,2,124,0,106,0,100,1,131,1,100,2, + 25,0,125,3,124,3,114,134,124,3,116,1,106,2,107,7, + 114,42,116,3,124,1,124,3,131,2,1,0,124,0,116,1, + 106,2,107,6,114,62,116,1,106,2,124,0,25,0,83,0, + 116,1,106,2,124,3,25,0,125,4,121,10,124,4,106,4, + 125,2,87,0,110,50,4,0,116,5,107,10,114,132,1,0, + 1,0,1,0,116,6,100,3,23,0,106,7,124,0,124,3, + 131,2,125,5,116,8,124,5,124,0,100,4,141,2,100,0, + 130,2,89,0,110,2,88,0,116,9,124,0,124,2,131,2, + 125,6,124,6,100,0,107,8,114,172,116,8,116,6,106,7, + 124,0,131,1,124,0,100,4,141,2,130,1,110,8,116,10, + 124,6,131,1,125,7,124,3,114,216,116,1,106,2,124,3, + 25,0,125,4,116,11,124,4,124,0,106,0,100,1,131,1, + 100,5,25,0,124,7,131,3,1,0,124,7,83,0,41,6, + 78,114,117,0,0,0,114,19,0,0,0,122,23,59,32,123, + 33,114,125,32,105,115,32,110,111,116,32,97,32,112,97,99, + 107,97,103,101,41,1,114,15,0,0,0,233,2,0,0,0, + 41,12,114,118,0,0,0,114,14,0,0,0,114,79,0,0, + 0,114,58,0,0,0,114,127,0,0,0,114,90,0,0,0, + 218,8,95,69,82,82,95,77,83,71,114,38,0,0,0,218, + 19,77,111,100,117,108,101,78,111,116,70,111,117,110,100,69, + 114,114,111,114,114,170,0,0,0,114,141,0,0,0,114,5, + 0,0,0,41,8,114,15,0,0,0,218,7,105,109,112,111, + 114,116,95,114,144,0,0,0,114,119,0,0,0,90,13,112, + 97,114,101,110,116,95,109,111,100,117,108,101,114,139,0,0, + 0,114,82,0,0,0,114,83,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,23,95,102,105,110, + 100,95,97,110,100,95,108,111,97,100,95,117,110,108,111,99, + 107,101,100,163,3,0,0,115,42,0,0,0,0,1,4,1, + 14,1,4,1,10,1,10,2,10,1,10,1,10,1,2,1, + 10,1,14,1,16,1,20,1,10,1,8,1,20,2,8,1, + 4,2,10,1,22,1,114,180,0,0,0,99,2,0,0,0, + 0,0,0,0,2,0,0,0,10,0,0,0,67,0,0,0, + 115,30,0,0,0,116,0,124,0,131,1,143,12,1,0,116, + 1,124,0,124,1,131,2,83,0,81,0,82,0,88,0,100, + 1,83,0,41,2,122,54,70,105,110,100,32,97,110,100,32, + 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, + 32,97,110,100,32,114,101,108,101,97,115,101,32,116,104,101, + 32,105,109,112,111,114,116,32,108,111,99,107,46,78,41,2, + 114,42,0,0,0,114,180,0,0,0,41,2,114,15,0,0, + 0,114,179,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,14,95,102,105,110,100,95,97,110,100, + 95,108,111,97,100,190,3,0,0,115,4,0,0,0,0,2, + 10,1,114,181,0,0,0,114,19,0,0,0,99,3,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,120,0,0,0,116,0,124,0,124,1,124,2,131,3, + 1,0,124,2,100,1,107,4,114,32,116,1,124,0,124,1, + 124,2,131,3,125,0,116,2,106,3,131,0,1,0,124,0, + 116,4,106,5,107,7,114,60,116,6,124,0,116,7,131,2, + 83,0,116,4,106,5,124,0,25,0,125,3,124,3,100,2, + 107,8,114,108,116,2,106,8,131,0,1,0,100,3,106,9, + 124,0,131,1,125,4,116,10,124,4,124,0,100,4,141,2, + 130,1,116,11,124,0,131,1,1,0,124,3,83,0,41,5, + 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, + 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, + 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, + 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, + 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, + 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, + 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, + 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, + 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, + 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, + 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, + 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, + 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, + 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, + 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, + 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, + 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, + 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, + 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, + 46,10,10,32,32,32,32,114,19,0,0,0,78,122,40,105, + 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116, + 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, + 109,111,100,117,108,101,115,41,1,114,15,0,0,0,41,12, + 114,175,0,0,0,114,163,0,0,0,114,46,0,0,0,114, + 137,0,0,0,114,14,0,0,0,114,79,0,0,0,114,181, + 0,0,0,218,11,95,103,99,100,95,105,109,112,111,114,116, + 114,47,0,0,0,114,38,0,0,0,114,178,0,0,0,114, + 56,0,0,0,41,5,114,15,0,0,0,114,161,0,0,0, + 114,162,0,0,0,114,83,0,0,0,114,67,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,182, + 0,0,0,196,3,0,0,115,28,0,0,0,0,9,12,1, + 8,1,12,1,8,1,10,1,10,1,10,1,8,1,8,1, + 4,1,6,1,12,1,8,1,114,182,0,0,0,99,3,0, + 0,0,0,0,0,0,6,0,0,0,17,0,0,0,67,0, + 0,0,115,164,0,0,0,116,0,124,0,100,1,131,2,114, + 160,100,2,124,1,107,6,114,58,116,1,124,1,131,1,125, + 1,124,1,106,2,100,2,131,1,1,0,116,0,124,0,100, + 3,131,2,114,58,124,1,106,3,124,0,106,4,131,1,1, + 0,120,100,124,1,68,0,93,92,125,3,116,0,124,0,124, + 3,131,2,115,64,100,4,106,5,124,0,106,6,124,3,131, + 2,125,4,121,14,116,7,124,2,124,4,131,2,1,0,87, + 0,113,64,4,0,116,8,107,10,114,154,1,0,125,5,1, + 0,122,20,124,5,106,9,124,4,107,2,114,136,119,64,130, + 0,87,0,89,0,100,5,100,5,125,5,126,5,88,0,113, + 64,88,0,113,64,87,0,124,0,83,0,41,6,122,238,70, + 105,103,117,114,101,32,111,117,116,32,119,104,97,116,32,95, + 95,105,109,112,111,114,116,95,95,32,115,104,111,117,108,100, + 32,114,101,116,117,114,110,46,10,10,32,32,32,32,84,104, + 101,32,105,109,112,111,114,116,95,32,112,97,114,97,109,101, + 116,101,114,32,105,115,32,97,32,99,97,108,108,97,98,108, + 101,32,119,104,105,99,104,32,116,97,107,101,115,32,116,104, + 101,32,110,97,109,101,32,111,102,32,109,111,100,117,108,101, + 32,116,111,10,32,32,32,32,105,109,112,111,114,116,46,32, + 73,116,32,105,115,32,114,101,113,117,105,114,101,100,32,116, + 111,32,100,101,99,111,117,112,108,101,32,116,104,101,32,102, + 117,110,99,116,105,111,110,32,102,114,111,109,32,97,115,115, + 117,109,105,110,103,32,105,109,112,111,114,116,108,105,98,39, + 115,10,32,32,32,32,105,109,112,111,114,116,32,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,32,105,115,32,100, + 101,115,105,114,101,100,46,10,10,32,32,32,32,114,127,0, + 0,0,250,1,42,218,7,95,95,97,108,108,95,95,122,5, + 123,125,46,123,125,78,41,10,114,4,0,0,0,114,126,0, + 0,0,218,6,114,101,109,111,118,101,218,6,101,120,116,101, + 110,100,114,184,0,0,0,114,38,0,0,0,114,1,0,0, + 0,114,58,0,0,0,114,178,0,0,0,114,15,0,0,0, + 41,6,114,83,0,0,0,218,8,102,114,111,109,108,105,115, + 116,114,179,0,0,0,218,1,120,90,9,102,114,111,109,95, + 110,97,109,101,90,3,101,120,99,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,16,95,104,97,110,100,108, + 101,95,102,114,111,109,108,105,115,116,221,3,0,0,115,32, + 0,0,0,0,10,10,1,8,1,8,1,10,1,10,1,12, + 1,10,1,10,1,14,1,2,1,14,1,16,4,10,1,2, + 1,24,1,114,189,0,0,0,99,1,0,0,0,0,0,0, + 0,3,0,0,0,6,0,0,0,67,0,0,0,115,150,0, + 0,0,124,0,106,0,100,1,131,1,125,1,124,0,106,0, + 100,2,131,1,125,2,124,1,100,3,107,9,114,84,124,2, + 100,3,107,9,114,78,124,1,124,2,106,1,107,3,114,78, + 116,2,106,3,100,4,124,1,155,2,100,5,124,2,106,1, + 155,2,100,6,157,5,116,4,100,7,100,8,141,3,1,0, + 124,1,83,0,110,62,124,2,100,3,107,9,114,100,124,2, + 106,1,83,0,110,46,116,2,106,3,100,9,116,4,100,7, + 100,8,141,3,1,0,124,0,100,10,25,0,125,1,100,11, + 124,0,107,7,114,146,124,1,106,5,100,12,131,1,100,13, + 25,0,125,1,124,1,83,0,41,14,122,167,67,97,108,99, + 117,108,97,116,101,32,119,104,97,116,32,95,95,112,97,99, + 107,97,103,101,95,95,32,115,104,111,117,108,100,32,98,101, + 46,10,10,32,32,32,32,95,95,112,97,99,107,97,103,101, + 95,95,32,105,115,32,110,111,116,32,103,117,97,114,97,110, + 116,101,101,100,32,116,111,32,98,101,32,100,101,102,105,110, + 101,100,32,111,114,32,99,111,117,108,100,32,98,101,32,115, + 101,116,32,116,111,32,78,111,110,101,10,32,32,32,32,116, + 111,32,114,101,112,114,101,115,101,110,116,32,116,104,97,116, + 32,105,116,115,32,112,114,111,112,101,114,32,118,97,108,117, + 101,32,105,115,32,117,110,107,110,111,119,110,46,10,10,32, + 32,32,32,114,130,0,0,0,114,89,0,0,0,78,122,32, + 95,95,112,97,99,107,97,103,101,95,95,32,33,61,32,95, + 95,115,112,101,99,95,95,46,112,97,114,101,110,116,32,40, + 122,4,32,33,61,32,250,1,41,233,3,0,0,0,41,1, + 90,10,115,116,97,99,107,108,101,118,101,108,122,89,99,97, + 110,39,116,32,114,101,115,111,108,118,101,32,112,97,99,107, + 97,103,101,32,102,114,111,109,32,95,95,115,112,101,99,95, + 95,32,111,114,32,95,95,112,97,99,107,97,103,101,95,95, + 44,32,102,97,108,108,105,110,103,32,98,97,99,107,32,111, + 110,32,95,95,110,97,109,101,95,95,32,97,110,100,32,95, + 95,112,97,116,104,95,95,114,1,0,0,0,114,127,0,0, + 0,114,117,0,0,0,114,19,0,0,0,41,6,114,30,0, + 0,0,114,119,0,0,0,114,167,0,0,0,114,168,0,0, + 0,114,169,0,0,0,114,118,0,0,0,41,3,218,7,103, + 108,111,98,97,108,115,114,161,0,0,0,114,82,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 17,95,99,97,108,99,95,95,95,112,97,99,107,97,103,101, + 95,95,252,3,0,0,115,30,0,0,0,0,7,10,1,10, + 1,8,1,18,1,22,2,10,1,6,1,8,1,8,2,6, + 2,10,1,8,1,8,1,14,1,114,193,0,0,0,99,5, + 0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,67, + 0,0,0,115,170,0,0,0,124,4,100,1,107,2,114,18, + 116,0,124,0,131,1,125,5,110,36,124,1,100,2,107,9, + 114,30,124,1,110,2,105,0,125,6,116,1,124,6,131,1, + 125,7,116,0,124,0,124,7,124,4,131,3,125,5,124,3, + 115,154,124,4,100,1,107,2,114,86,116,0,124,0,106,2, + 100,3,131,1,100,1,25,0,131,1,83,0,113,166,124,0, + 115,96,124,5,83,0,113,166,116,3,124,0,131,1,116,3, + 124,0,106,2,100,3,131,1,100,1,25,0,131,1,24,0, + 125,8,116,4,106,5,124,5,106,6,100,2,116,3,124,5, + 106,6,131,1,124,8,24,0,133,2,25,0,25,0,83,0, + 110,12,116,7,124,5,124,3,116,0,131,3,83,0,100,2, + 83,0,41,4,97,215,1,0,0,73,109,112,111,114,116,32, + 97,32,109,111,100,117,108,101,46,10,10,32,32,32,32,84, + 104,101,32,39,103,108,111,98,97,108,115,39,32,97,114,103, + 117,109,101,110,116,32,105,115,32,117,115,101,100,32,116,111, + 32,105,110,102,101,114,32,119,104,101,114,101,32,116,104,101, + 32,105,109,112,111,114,116,32,105,115,32,111,99,99,117,114, + 114,105,110,103,32,102,114,111,109,10,32,32,32,32,116,111, + 32,104,97,110,100,108,101,32,114,101,108,97,116,105,118,101, + 32,105,109,112,111,114,116,115,46,32,84,104,101,32,39,108, + 111,99,97,108,115,39,32,97,114,103,117,109,101,110,116,32, + 105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,10, + 32,32,32,32,39,102,114,111,109,108,105,115,116,39,32,97, + 114,103,117,109,101,110,116,32,115,112,101,99,105,102,105,101, + 115,32,119,104,97,116,32,115,104,111,117,108,100,32,101,120, + 105,115,116,32,97,115,32,97,116,116,114,105,98,117,116,101, + 115,32,111,110,32,116,104,101,32,109,111,100,117,108,101,10, + 32,32,32,32,98,101,105,110,103,32,105,109,112,111,114,116, + 101,100,32,40,101,46,103,46,32,96,96,102,114,111,109,32, + 109,111,100,117,108,101,32,105,109,112,111,114,116,32,60,102, + 114,111,109,108,105,115,116,62,96,96,41,46,32,32,84,104, + 101,32,39,108,101,118,101,108,39,10,32,32,32,32,97,114, + 103,117,109,101,110,116,32,114,101,112,114,101,115,101,110,116, + 115,32,116,104,101,32,112,97,99,107,97,103,101,32,108,111, + 99,97,116,105,111,110,32,116,111,32,105,109,112,111,114,116, + 32,102,114,111,109,32,105,110,32,97,32,114,101,108,97,116, + 105,118,101,10,32,32,32,32,105,109,112,111,114,116,32,40, + 101,46,103,46,32,96,96,102,114,111,109,32,46,46,112,107, + 103,32,105,109,112,111,114,116,32,109,111,100,96,96,32,119, + 111,117,108,100,32,104,97,118,101,32,97,32,39,108,101,118, + 101,108,39,32,111,102,32,50,41,46,10,10,32,32,32,32, + 114,19,0,0,0,78,114,117,0,0,0,41,8,114,182,0, + 0,0,114,193,0,0,0,218,9,112,97,114,116,105,116,105, + 111,110,114,159,0,0,0,114,14,0,0,0,114,79,0,0, + 0,114,1,0,0,0,114,189,0,0,0,41,9,114,15,0, + 0,0,114,192,0,0,0,218,6,108,111,99,97,108,115,114, + 187,0,0,0,114,162,0,0,0,114,83,0,0,0,90,8, + 103,108,111,98,97,108,115,95,114,161,0,0,0,90,7,99, + 117,116,95,111,102,102,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,10,95,95,105,109,112,111,114,116,95, + 95,23,4,0,0,115,26,0,0,0,0,11,8,1,10,2, + 16,1,8,1,12,1,4,3,8,1,20,1,4,1,6,4, + 26,3,32,2,114,196,0,0,0,99,1,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,116,0,106,1,124,0,131,1,125,1,124,1,100, + 0,107,8,114,30,116,2,100,1,124,0,23,0,131,1,130, + 1,116,3,124,1,131,1,83,0,41,2,78,122,25,110,111, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,41,4,114,142,0,0,0,114,146, + 0,0,0,114,70,0,0,0,114,141,0,0,0,41,2,114, + 15,0,0,0,114,82,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,18,95,98,117,105,108,116, + 105,110,95,102,114,111,109,95,110,97,109,101,58,4,0,0, + 115,8,0,0,0,0,1,10,1,8,1,12,1,114,197,0, + 0,0,99,2,0,0,0,0,0,0,0,12,0,0,0,12, + 0,0,0,67,0,0,0,115,244,0,0,0,124,1,97,0, + 124,0,97,1,116,2,116,1,131,1,125,2,120,86,116,1, + 106,3,106,4,131,0,68,0,93,72,92,2,125,3,125,4, + 116,5,124,4,124,2,131,2,114,28,124,3,116,1,106,6, + 107,6,114,62,116,7,125,5,110,18,116,0,106,8,124,3, + 131,1,114,28,116,9,125,5,110,2,113,28,116,10,124,4, + 124,5,131,2,125,6,116,11,124,6,124,4,131,2,1,0, + 113,28,87,0,116,1,106,3,116,12,25,0,125,7,120,54, + 100,5,68,0,93,46,125,8,124,8,116,1,106,3,107,7, + 114,144,116,13,124,8,131,1,125,9,110,10,116,1,106,3, + 124,8,25,0,125,9,116,14,124,7,124,8,124,9,131,3, + 1,0,113,120,87,0,121,12,116,13,100,2,131,1,125,10, + 87,0,110,24,4,0,116,15,107,10,114,206,1,0,1,0, + 1,0,100,3,125,10,89,0,110,2,88,0,116,14,124,7, + 100,2,124,10,131,3,1,0,116,13,100,4,131,1,125,11, + 116,14,124,7,100,4,124,11,131,3,1,0,100,3,83,0, + 41,6,122,250,83,101,116,117,112,32,105,109,112,111,114,116, + 108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103, + 32,110,101,101,100,101,100,32,98,117,105,108,116,45,105,110, + 32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,106, + 101,99,116,105,110,103,32,116,104,101,109,10,32,32,32,32, + 105,110,116,111,32,116,104,101,32,103,108,111,98,97,108,32, + 110,97,109,101,115,112,97,99,101,46,10,10,32,32,32,32, + 65,115,32,115,121,115,32,105,115,32,110,101,101,100,101,100, + 32,102,111,114,32,115,121,115,46,109,111,100,117,108,101,115, + 32,97,99,99,101,115,115,32,97,110,100,32,95,105,109,112, + 32,105,115,32,110,101,101,100,101,100,32,116,111,32,108,111, + 97,100,32,98,117,105,108,116,45,105,110,10,32,32,32,32, + 109,111,100,117,108,101,115,44,32,116,104,111,115,101,32,116, + 119,111,32,109,111,100,117,108,101,115,32,109,117,115,116,32, + 98,101,32,101,120,112,108,105,99,105,116,108,121,32,112,97, + 115,115,101,100,32,105,110,46,10,10,32,32,32,32,114,167, + 0,0,0,114,20,0,0,0,78,114,55,0,0,0,41,1, + 114,167,0,0,0,41,16,114,46,0,0,0,114,14,0,0, + 0,114,13,0,0,0,114,79,0,0,0,218,5,105,116,101, + 109,115,114,171,0,0,0,114,69,0,0,0,114,142,0,0, + 0,114,75,0,0,0,114,152,0,0,0,114,128,0,0,0, + 114,133,0,0,0,114,1,0,0,0,114,197,0,0,0,114, + 5,0,0,0,114,70,0,0,0,41,12,218,10,115,121,115, + 95,109,111,100,117,108,101,218,11,95,105,109,112,95,109,111, + 100,117,108,101,90,11,109,111,100,117,108,101,95,116,121,112, + 101,114,15,0,0,0,114,83,0,0,0,114,93,0,0,0, + 114,82,0,0,0,90,11,115,101,108,102,95,109,111,100,117, + 108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101, + 90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, + 90,13,116,104,114,101,97,100,95,109,111,100,117,108,101,90, + 14,119,101,97,107,114,101,102,95,109,111,100,117,108,101,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,6, + 95,115,101,116,117,112,65,4,0,0,115,50,0,0,0,0, + 9,4,1,4,3,8,1,20,1,10,1,10,1,6,1,10, + 1,6,2,2,1,10,1,14,3,10,1,10,1,10,1,10, + 2,10,1,16,3,2,1,12,1,14,2,10,1,12,3,8, + 1,114,201,0,0,0,99,2,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,67,0,0,0,115,66,0,0,0, + 116,0,124,0,124,1,131,2,1,0,116,1,106,2,106,3, + 116,4,131,1,1,0,116,1,106,2,106,3,116,5,131,1, + 1,0,100,1,100,2,108,6,125,2,124,2,97,7,124,2, + 106,8,116,1,106,9,116,10,25,0,131,1,1,0,100,2, + 83,0,41,3,122,50,73,110,115,116,97,108,108,32,105,109, + 112,111,114,116,108,105,98,32,97,115,32,116,104,101,32,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, + 32,105,109,112,111,114,116,46,114,19,0,0,0,78,41,11, + 114,201,0,0,0,114,14,0,0,0,114,166,0,0,0,114, + 109,0,0,0,114,142,0,0,0,114,152,0,0,0,218,26, + 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, + 98,95,101,120,116,101,114,110,97,108,114,115,0,0,0,218, + 8,95,105,110,115,116,97,108,108,114,79,0,0,0,114,1, + 0,0,0,41,3,114,199,0,0,0,114,200,0,0,0,114, + 202,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,203,0,0,0,112,4,0,0,115,12,0,0, + 0,0,2,10,2,12,1,12,3,8,1,4,1,114,203,0, + 0,0,41,2,78,78,41,1,78,41,2,78,114,19,0,0, + 0,41,50,114,3,0,0,0,114,115,0,0,0,114,12,0, + 0,0,114,16,0,0,0,114,51,0,0,0,114,29,0,0, + 0,114,36,0,0,0,114,17,0,0,0,114,18,0,0,0, + 114,41,0,0,0,114,42,0,0,0,114,45,0,0,0,114, + 56,0,0,0,114,58,0,0,0,114,68,0,0,0,114,74, + 0,0,0,114,77,0,0,0,114,84,0,0,0,114,95,0, + 0,0,114,96,0,0,0,114,102,0,0,0,114,78,0,0, + 0,218,6,111,98,106,101,99,116,90,9,95,80,79,80,85, + 76,65,84,69,114,128,0,0,0,114,133,0,0,0,114,136, + 0,0,0,114,91,0,0,0,114,80,0,0,0,114,140,0, + 0,0,114,141,0,0,0,114,81,0,0,0,114,142,0,0, + 0,114,152,0,0,0,114,157,0,0,0,114,163,0,0,0, + 114,165,0,0,0,114,170,0,0,0,114,175,0,0,0,90, + 15,95,69,82,82,95,77,83,71,95,80,82,69,70,73,88, + 114,177,0,0,0,114,180,0,0,0,114,181,0,0,0,114, + 182,0,0,0,114,189,0,0,0,114,193,0,0,0,114,196, + 0,0,0,114,197,0,0,0,114,201,0,0,0,114,203,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,8,60,109,111,100,117,108,101,62, + 8,0,0,0,115,94,0,0,0,4,17,4,2,8,8,8, + 7,4,2,4,3,16,4,14,68,14,21,14,19,8,19,8, + 19,8,11,14,8,8,11,8,12,8,16,8,36,14,27,14, + 101,16,26,6,3,10,45,14,60,8,17,8,17,8,25,8, + 29,8,23,8,16,14,73,14,77,14,13,8,9,8,9,10, + 47,8,20,4,1,8,2,8,27,8,6,10,25,8,31,8, + 27,18,35,8,7,8,47, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 5ee843a463..0afe7dea94 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,625 +1,561 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_external[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,244,2,0,0,100,0,0,90,0,0, - 100,96,0,90,1,0,100,97,0,90,2,0,101,2,0,101, - 1,0,23,90,3,0,100,4,0,100,5,0,132,0,0,90, - 4,0,100,6,0,100,7,0,132,0,0,90,5,0,100,8, - 0,100,9,0,132,0,0,90,6,0,100,10,0,100,11,0, - 132,0,0,90,7,0,100,12,0,100,13,0,132,0,0,90, - 8,0,100,14,0,100,15,0,132,0,0,90,9,0,100,16, - 0,100,17,0,132,0,0,90,10,0,100,18,0,100,19,0, - 132,0,0,90,11,0,100,20,0,100,21,0,132,0,0,90, - 12,0,100,22,0,100,23,0,100,24,0,132,1,0,90,13, - 0,101,14,0,101,13,0,106,15,0,131,1,0,90,16,0, - 100,25,0,106,17,0,100,26,0,100,27,0,131,2,0,100, - 28,0,23,90,18,0,101,19,0,106,20,0,101,18,0,100, - 27,0,131,2,0,90,21,0,100,29,0,90,22,0,100,30, - 0,90,23,0,100,31,0,103,1,0,90,24,0,100,32,0, - 103,1,0,90,25,0,101,25,0,4,90,26,0,90,27,0, - 100,33,0,100,34,0,100,33,0,100,35,0,100,36,0,132, - 1,1,90,28,0,100,37,0,100,38,0,132,0,0,90,29, - 0,100,39,0,100,40,0,132,0,0,90,30,0,100,41,0, - 100,42,0,132,0,0,90,31,0,100,43,0,100,44,0,132, - 0,0,90,32,0,100,45,0,100,46,0,100,47,0,100,48, - 0,132,0,1,90,33,0,100,49,0,100,50,0,132,0,0, - 90,34,0,100,51,0,100,52,0,132,0,0,90,35,0,100, - 33,0,100,33,0,100,33,0,100,53,0,100,54,0,132,3, - 0,90,36,0,100,33,0,100,33,0,100,33,0,100,55,0, - 100,56,0,132,3,0,90,37,0,100,57,0,100,57,0,100, - 58,0,100,59,0,132,2,0,90,38,0,100,60,0,100,61, - 0,132,0,0,90,39,0,101,40,0,131,0,0,90,41,0, - 100,33,0,100,62,0,100,33,0,100,63,0,101,41,0,100, - 64,0,100,65,0,132,1,2,90,42,0,71,100,66,0,100, - 67,0,132,0,0,100,67,0,131,2,0,90,43,0,71,100, - 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,44, - 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,44, - 0,131,3,0,90,45,0,71,100,72,0,100,73,0,132,0, - 0,100,73,0,131,2,0,90,46,0,71,100,74,0,100,75, - 0,132,0,0,100,75,0,101,46,0,101,45,0,131,4,0, - 90,47,0,71,100,76,0,100,77,0,132,0,0,100,77,0, - 101,46,0,101,44,0,131,4,0,90,48,0,103,0,0,90, - 49,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, - 46,0,101,44,0,131,4,0,90,50,0,71,100,80,0,100, - 81,0,132,0,0,100,81,0,131,2,0,90,51,0,71,100, - 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,52, - 0,71,100,84,0,100,85,0,132,0,0,100,85,0,131,2, - 0,90,53,0,71,100,86,0,100,87,0,132,0,0,100,87, - 0,131,2,0,90,54,0,100,33,0,100,88,0,100,89,0, - 132,1,0,90,55,0,100,90,0,100,91,0,132,0,0,90, - 56,0,100,92,0,100,93,0,132,0,0,90,57,0,100,94, - 0,100,95,0,132,0,0,90,58,0,100,33,0,83,41,98, - 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, - 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, - 84,104,105,115,32,109,111,100,117,108,101,32,105,115,32,78, - 79,84,32,109,101,97,110,116,32,116,111,32,98,101,32,100, - 105,114,101,99,116,108,121,32,105,109,112,111,114,116,101,100, - 33,32,73,116,32,104,97,115,32,98,101,101,110,32,100,101, - 115,105,103,110,101,100,32,115,117,99,104,10,116,104,97,116, - 32,105,116,32,99,97,110,32,98,101,32,98,111,111,116,115, - 116,114,97,112,112,101,100,32,105,110,116,111,32,80,121,116, - 104,111,110,32,97,115,32,116,104,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112, - 111,114,116,46,32,65,115,10,115,117,99,104,32,105,116,32, - 114,101,113,117,105,114,101,115,32,116,104,101,32,105,110,106, - 101,99,116,105,111,110,32,111,102,32,115,112,101,99,105,102, - 105,99,32,109,111,100,117,108,101,115,32,97,110,100,32,97, - 116,116,114,105,98,117,116,101,115,32,105,110,32,111,114,100, - 101,114,32,116,111,10,119,111,114,107,46,32,79,110,101,32, - 115,104,111,117,108,100,32,117,115,101,32,105,109,112,111,114, - 116,108,105,98,32,97,115,32,116,104,101,32,112,117,98,108, - 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111, - 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, - 46,10,10,218,3,119,105,110,218,6,99,121,103,119,105,110, - 218,6,100,97,114,119,105,110,99,0,0,0,0,0,0,0, - 0,1,0,0,0,3,0,0,0,3,0,0,0,115,88,0, - 0,0,116,0,0,106,1,0,106,2,0,116,3,0,131,1, - 0,114,72,0,116,0,0,106,1,0,106,2,0,116,4,0, - 131,1,0,114,45,0,100,1,0,137,0,0,110,6,0,100, - 2,0,137,0,0,135,0,0,102,1,0,100,3,0,100,4, - 0,134,0,0,125,0,0,110,12,0,100,5,0,100,4,0, - 132,0,0,125,0,0,124,0,0,83,41,6,78,90,12,80, - 89,84,72,79,78,67,65,83,69,79,75,115,12,0,0,0, - 80,89,84,72,79,78,67,65,83,69,79,75,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0, - 0,115,13,0,0,0,136,0,0,116,0,0,106,1,0,107, - 6,0,83,41,1,122,53,84,114,117,101,32,105,102,32,102, - 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, - 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, - 115,101,110,115,105,116,105,118,101,108,121,46,41,2,218,3, - 95,111,115,90,7,101,110,118,105,114,111,110,169,0,41,1, - 218,3,107,101,121,114,4,0,0,0,250,38,60,102,114,111, - 122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98, - 111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97, - 108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,37, - 0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,107, - 101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,111, - 99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,115, - 101,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,83,0,0,0,115,4,0,0,0,100,1,0,83,41, - 2,122,53,84,114,117,101,32,105,102,32,102,105,108,101,110, - 97,109,101,115,32,109,117,115,116,32,98,101,32,99,104,101, - 99,107,101,100,32,99,97,115,101,45,105,110,115,101,110,115, - 105,116,105,118,101,108,121,46,70,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,7,0,0,0,41,0,0,0,115,2,0,0,0, - 0,2,41,5,218,3,115,121,115,218,8,112,108,97,116,102, - 111,114,109,218,10,115,116,97,114,116,115,119,105,116,104,218, - 27,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, - 86,69,95,80,76,65,84,70,79,82,77,83,218,35,95,67, - 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, - 80,76,65,84,70,79,82,77,83,95,83,84,82,95,75,69, - 89,41,1,114,7,0,0,0,114,4,0,0,0,41,1,114, - 5,0,0,0,114,6,0,0,0,218,16,95,109,97,107,101, - 95,114,101,108,97,120,95,99,97,115,101,30,0,0,0,115, - 14,0,0,0,0,1,18,1,18,1,9,2,6,2,21,4, - 12,3,114,13,0,0,0,99,1,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, - 0,116,0,0,124,0,0,131,1,0,100,1,0,64,106,1, - 0,100,2,0,100,3,0,131,2,0,83,41,4,122,42,67, - 111,110,118,101,114,116,32,97,32,51,50,45,98,105,116,32, - 105,110,116,101,103,101,114,32,116,111,32,108,105,116,116,108, - 101,45,101,110,100,105,97,110,46,108,3,0,0,0,255,127, - 255,127,3,0,233,4,0,0,0,218,6,108,105,116,116,108, - 101,41,2,218,3,105,110,116,218,8,116,111,95,98,121,116, - 101,115,41,1,218,1,120,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,218,7,95,119,95,108,111,110,103,47, - 0,0,0,115,2,0,0,0,0,2,114,19,0,0,0,99, - 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, - 0,0,100,1,0,131,2,0,83,41,2,122,47,67,111,110, - 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32, - 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, - 32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0, - 0,41,2,114,16,0,0,0,218,10,102,114,111,109,95,98, - 121,116,101,115,41,1,90,9,105,110,116,95,98,121,116,101, - 115,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,7,95,114,95,108,111,110,103,52,0,0,0,115,2,0, - 0,0,0,2,114,21,0,0,0,99,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,71,0,0,0,115,26, - 0,0,0,116,0,0,106,1,0,100,1,0,100,2,0,132, - 0,0,124,0,0,68,131,1,0,131,1,0,83,41,3,122, - 31,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, - 32,111,115,46,112,97,116,104,46,106,111,105,110,40,41,46, - 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,83,0,0,0,115,37,0,0,0,103,0,0,124,0,0, - 93,27,0,125,1,0,124,1,0,114,6,0,124,1,0,106, - 0,0,116,1,0,131,1,0,145,2,0,113,6,0,83,114, - 4,0,0,0,41,2,218,6,114,115,116,114,105,112,218,15, - 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,41, - 2,218,2,46,48,218,4,112,97,114,116,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,250,10,60,108,105,115, - 116,99,111,109,112,62,59,0,0,0,115,2,0,0,0,9, - 1,122,30,95,112,97,116,104,95,106,111,105,110,46,60,108, - 111,99,97,108,115,62,46,60,108,105,115,116,99,111,109,112, - 62,41,2,218,8,112,97,116,104,95,115,101,112,218,4,106, - 111,105,110,41,1,218,10,112,97,116,104,95,112,97,114,116, - 115,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,10,95,112,97,116,104,95,106,111,105,110,57,0,0,0, - 115,4,0,0,0,0,2,15,1,114,30,0,0,0,99,1, - 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, - 0,0,0,115,134,0,0,0,116,0,0,116,1,0,131,1, - 0,100,1,0,107,2,0,114,52,0,124,0,0,106,2,0, - 116,3,0,131,1,0,92,3,0,125,1,0,125,2,0,125, - 3,0,124,1,0,124,3,0,102,2,0,83,120,69,0,116, - 4,0,124,0,0,131,1,0,68,93,55,0,125,4,0,124, - 4,0,116,1,0,107,6,0,114,65,0,124,0,0,106,5, - 0,124,4,0,100,2,0,100,1,0,131,1,1,92,2,0, - 125,1,0,125,3,0,124,1,0,124,3,0,102,2,0,83, - 113,65,0,87,100,3,0,124,0,0,102,2,0,83,41,4, - 122,32,82,101,112,108,97,99,101,109,101,110,116,32,102,111, - 114,32,111,115,46,112,97,116,104,46,115,112,108,105,116,40, - 41,46,233,1,0,0,0,90,8,109,97,120,115,112,108,105, - 116,218,0,41,6,218,3,108,101,110,114,23,0,0,0,218, - 10,114,112,97,114,116,105,116,105,111,110,114,27,0,0,0, - 218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,108, - 105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,110, - 116,218,1,95,218,4,116,97,105,108,114,18,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,11, - 95,112,97,116,104,95,115,112,108,105,116,63,0,0,0,115, - 16,0,0,0,0,2,18,1,24,1,10,1,19,1,12,1, - 27,1,14,1,114,40,0,0,0,99,1,0,0,0,0,0, - 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,13, - 0,0,0,116,0,0,106,1,0,124,0,0,131,1,0,83, - 41,1,122,126,83,116,97,116,32,116,104,101,32,112,97,116, - 104,46,10,10,32,32,32,32,77,97,100,101,32,97,32,115, - 101,112,97,114,97,116,101,32,102,117,110,99,116,105,111,110, - 32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105, - 101,114,32,116,111,32,111,118,101,114,114,105,100,101,32,105, - 110,32,101,120,112,101,114,105,109,101,110,116,115,10,32,32, - 32,32,40,101,46,103,46,32,99,97,99,104,101,32,115,116, - 97,116,32,114,101,115,117,108,116,115,41,46,10,10,32,32, - 32,32,41,2,114,3,0,0,0,90,4,115,116,97,116,41, - 1,114,37,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,218,10,95,112,97,116,104,95,115,116,97, - 116,75,0,0,0,115,2,0,0,0,0,7,114,41,0,0, - 0,99,2,0,0,0,0,0,0,0,3,0,0,0,11,0, - 0,0,67,0,0,0,115,58,0,0,0,121,16,0,116,0, - 0,124,0,0,131,1,0,125,2,0,87,110,22,0,4,116, - 1,0,107,10,0,114,40,0,1,1,1,100,1,0,83,89, - 110,1,0,88,124,2,0,106,2,0,100,2,0,64,124,1, - 0,107,2,0,83,41,3,122,49,84,101,115,116,32,119,104, - 101,116,104,101,114,32,116,104,101,32,112,97,116,104,32,105, - 115,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,101,32,116,121,112,101,46,70,105,0,240,0,0, - 41,3,114,41,0,0,0,218,7,79,83,69,114,114,111,114, - 218,7,115,116,95,109,111,100,101,41,3,114,37,0,0,0, - 218,4,109,111,100,101,90,9,115,116,97,116,95,105,110,102, - 111,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,85,0,0,0,115,10,0,0,0,0,2,3, - 1,16,1,13,1,9,1,114,45,0,0,0,99,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,64,0,0,0,115,248,1,0,0,100,0,90,0,100,91, + 90,1,100,92,90,2,101,2,101,1,23,0,90,3,100,4, + 100,5,132,0,90,4,100,6,100,7,132,0,90,5,100,8, + 100,9,132,0,90,6,100,10,100,11,132,0,90,7,100,12, + 100,13,132,0,90,8,100,14,100,15,132,0,90,9,100,16, + 100,17,132,0,90,10,100,18,100,19,132,0,90,11,100,20, + 100,21,132,0,90,12,100,93,100,23,100,24,132,1,90,13, + 101,14,101,13,106,15,131,1,90,16,100,25,106,17,100,26, + 100,27,131,2,100,28,23,0,90,18,101,19,106,20,101,18, + 100,27,131,2,90,21,100,29,90,22,100,30,90,23,100,31, + 103,1,90,24,100,32,103,1,90,25,101,25,4,0,90,26, + 90,27,100,94,100,33,100,34,156,1,100,35,100,36,132,3, + 90,28,100,37,100,38,132,0,90,29,100,39,100,40,132,0, + 90,30,100,41,100,42,132,0,90,31,100,43,100,44,132,0, + 90,32,100,45,100,46,132,0,90,33,100,47,100,48,132,0, + 90,34,100,95,100,49,100,50,132,1,90,35,100,96,100,51, + 100,52,132,1,90,36,100,97,100,54,100,55,132,1,90,37, + 100,56,100,57,132,0,90,38,101,39,131,0,90,40,100,98, + 100,33,101,40,100,58,156,2,100,59,100,60,132,3,90,41, + 71,0,100,61,100,62,132,0,100,62,131,2,90,42,71,0, + 100,63,100,64,132,0,100,64,131,2,90,43,71,0,100,65, + 100,66,132,0,100,66,101,43,131,3,90,44,71,0,100,67, + 100,68,132,0,100,68,131,2,90,45,71,0,100,69,100,70, + 132,0,100,70,101,45,101,44,131,4,90,46,71,0,100,71, + 100,72,132,0,100,72,101,45,101,43,131,4,90,47,103,0, + 90,48,71,0,100,73,100,74,132,0,100,74,101,45,101,43, + 131,4,90,49,71,0,100,75,100,76,132,0,100,76,131,2, + 90,50,71,0,100,77,100,78,132,0,100,78,131,2,90,51, + 71,0,100,79,100,80,132,0,100,80,131,2,90,52,71,0, + 100,81,100,82,132,0,100,82,131,2,90,53,100,99,100,83, + 100,84,132,1,90,54,100,85,100,86,132,0,90,55,100,87, + 100,88,132,0,90,56,100,89,100,90,132,0,90,57,100,33, + 83,0,41,100,97,94,1,0,0,67,111,114,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, + 116,46,10,10,84,104,105,115,32,109,111,100,117,108,101,32, + 105,115,32,78,79,84,32,109,101,97,110,116,32,116,111,32, + 98,101,32,100,105,114,101,99,116,108,121,32,105,109,112,111, + 114,116,101,100,33,32,73,116,32,104,97,115,32,98,101,101, + 110,32,100,101,115,105,103,110,101,100,32,115,117,99,104,10, + 116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,98, + 111,111,116,115,116,114,97,112,112,101,100,32,105,110,116,111, + 32,80,121,116,104,111,110,32,97,115,32,116,104,101,32,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, + 32,105,109,112,111,114,116,46,32,65,115,10,115,117,99,104, + 32,105,116,32,114,101,113,117,105,114,101,115,32,116,104,101, + 32,105,110,106,101,99,116,105,111,110,32,111,102,32,115,112, + 101,99,105,102,105,99,32,109,111,100,117,108,101,115,32,97, + 110,100,32,97,116,116,114,105,98,117,116,101,115,32,105,110, + 32,111,114,100,101,114,32,116,111,10,119,111,114,107,46,32, + 79,110,101,32,115,104,111,117,108,100,32,117,115,101,32,105, + 109,112,111,114,116,108,105,98,32,97,115,32,116,104,101,32, + 112,117,98,108,105,99,45,102,97,99,105,110,103,32,118,101, + 114,115,105,111,110,32,111,102,32,116,104,105,115,32,109,111, + 100,117,108,101,46,10,10,218,3,119,105,110,218,6,99,121, + 103,119,105,110,218,6,100,97,114,119,105,110,99,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,3,0,0, + 0,115,60,0,0,0,116,0,106,1,106,2,116,3,131,1, + 114,48,116,0,106,1,106,2,116,4,131,1,114,30,100,1, + 137,0,110,4,100,2,137,0,135,0,102,1,100,3,100,4, + 132,8,125,0,110,8,100,5,100,4,132,0,125,0,124,0, + 83,0,41,6,78,90,12,80,89,84,72,79,78,67,65,83, + 69,79,75,115,12,0,0,0,80,89,84,72,79,78,67,65, + 83,69,79,75,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,19,0,0,0,115,10,0,0,0,136,0, + 116,0,106,1,107,6,83,0,41,1,122,53,84,114,117,101, + 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, + 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, + 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, + 46,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, + 110,169,0,41,1,218,3,107,101,121,114,4,0,0,0,250, + 38,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, + 105,98,46,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,62,218,11,95,114,101,108,97,120,95, + 99,97,115,101,37,0,0,0,115,2,0,0,0,0,2,122, + 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, + 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, + 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, + 100,1,83,0,41,2,122,53,84,114,117,101,32,105,102,32, + 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, + 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, + 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,7,0,0,0,41,0,0,0, + 115,2,0,0,0,0,2,41,5,218,3,115,121,115,218,8, + 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, + 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, + 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, + 83,218,35,95,67,65,83,69,95,73,78,83,69,78,83,73, + 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,83, + 84,82,95,75,69,89,41,1,114,7,0,0,0,114,4,0, + 0,0,41,1,114,5,0,0,0,114,6,0,0,0,218,16, + 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, + 30,0,0,0,115,14,0,0,0,0,1,12,1,12,1,6, + 2,4,2,14,4,8,3,114,13,0,0,0,99,1,0,0, 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,13,0,0,0,116,0,0,124,0,0,100,1,0,131, - 2,0,83,41,2,122,31,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, - 115,102,105,108,101,46,105,0,128,0,0,41,1,114,45,0, - 0,0,41,1,114,37,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,12,95,112,97,116,104,95, - 105,115,102,105,108,101,94,0,0,0,115,2,0,0,0,0, - 2,114,46,0,0,0,99,1,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,115,31,0,0,0, - 124,0,0,115,18,0,116,0,0,106,1,0,131,0,0,125, - 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, - 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, - 46,105,0,64,0,0,41,3,114,3,0,0,0,218,6,103, - 101,116,99,119,100,114,45,0,0,0,41,1,114,37,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,11,95,112,97,116,104,95,105,115,100,105,114,99,0,0, - 0,115,6,0,0,0,0,2,6,1,12,1,114,48,0,0, - 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, - 0,0,0,17,0,0,0,67,0,0,0,115,193,0,0,0, - 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, - 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, - 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, - 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, - 4,0,121,61,0,116,7,0,106,8,0,124,4,0,100,3, - 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, - 124,1,0,131,1,0,1,87,100,4,0,81,82,88,116,2, - 0,106,10,0,124,3,0,124,0,0,131,2,0,1,87,110, - 59,0,4,116,11,0,107,10,0,114,188,0,1,1,1,121, - 17,0,116,2,0,106,12,0,124,3,0,131,1,0,1,87, - 110,18,0,4,116,11,0,107,10,0,114,180,0,1,1,1, - 89,110,1,0,88,130,0,0,89,110,1,0,88,100,4,0, - 83,41,5,122,162,66,101,115,116,45,101,102,102,111,114,116, - 32,102,117,110,99,116,105,111,110,32,116,111,32,119,114,105, - 116,101,32,100,97,116,97,32,116,111,32,97,32,112,97,116, - 104,32,97,116,111,109,105,99,97,108,108,121,46,10,32,32, - 32,32,66,101,32,112,114,101,112,97,114,101,100,32,116,111, - 32,104,97,110,100,108,101,32,97,32,70,105,108,101,69,120, - 105,115,116,115,69,114,114,111,114,32,105,102,32,99,111,110, - 99,117,114,114,101,110,116,32,119,114,105,116,105,110,103,32, - 111,102,32,116,104,101,10,32,32,32,32,116,101,109,112,111, - 114,97,114,121,32,102,105,108,101,32,105,115,32,97,116,116, - 101,109,112,116,101,100,46,122,5,123,125,46,123,125,105,182, - 1,0,0,90,2,119,98,78,41,13,218,6,102,111,114,109, - 97,116,218,2,105,100,114,3,0,0,0,90,4,111,112,101, - 110,90,6,79,95,69,88,67,76,90,7,79,95,67,82,69, - 65,84,90,8,79,95,87,82,79,78,76,89,218,3,95,105, - 111,218,6,70,105,108,101,73,79,218,5,119,114,105,116,101, - 218,7,114,101,112,108,97,99,101,114,42,0,0,0,90,6, - 117,110,108,105,110,107,41,6,114,37,0,0,0,218,4,100, - 97,116,97,114,44,0,0,0,90,8,112,97,116,104,95,116, - 109,112,90,2,102,100,218,4,102,105,108,101,114,4,0,0, - 0,114,4,0,0,0,114,6,0,0,0,218,13,95,119,114, - 105,116,101,95,97,116,111,109,105,99,106,0,0,0,115,26, - 0,0,0,0,5,24,1,9,1,33,1,3,3,21,1,20, - 1,20,1,13,1,3,1,17,1,13,1,5,1,114,57,0, - 0,0,105,23,13,0,0,233,2,0,0,0,114,15,0,0, - 0,115,2,0,0,0,13,10,90,11,95,95,112,121,99,97, - 99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,121, - 122,4,46,112,121,99,78,218,12,111,112,116,105,109,105,122, + 0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,0, + 106,1,100,2,100,3,131,2,83,0,41,4,122,42,67,111, + 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105, + 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101, + 45,101,110,100,105,97,110,46,108,3,0,0,0,255,127,255, + 127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,101, + 41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,101, + 115,41,1,218,1,120,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,7,95,119,95,108,111,110,103,47,0, + 0,0,115,2,0,0,0,0,2,114,19,0,0,0,99,1, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,115,12,0,0,0,116,0,106,1,124,0,100,1, + 131,2,83,0,41,2,122,47,67,111,110,118,101,114,116,32, + 52,32,98,121,116,101,115,32,105,110,32,108,105,116,116,108, + 101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,105, + 110,116,101,103,101,114,46,114,15,0,0,0,41,2,114,16, + 0,0,0,218,10,102,114,111,109,95,98,121,116,101,115,41, + 1,90,9,105,110,116,95,98,121,116,101,115,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,7,95,114,95, + 108,111,110,103,52,0,0,0,115,2,0,0,0,0,2,114, + 21,0,0,0,99,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,71,0,0,0,115,20,0,0,0,116,0, + 106,1,100,1,100,2,132,0,124,0,68,0,131,1,131,1, + 83,0,41,3,122,31,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,106,111, + 105,110,40,41,46,99,1,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,83,0,0,0,115,26,0,0,0,103, + 0,124,0,93,18,125,1,124,1,114,4,124,1,106,0,116, + 1,131,1,145,2,113,4,83,0,114,4,0,0,0,41,2, + 218,6,114,115,116,114,105,112,218,15,112,97,116,104,95,115, + 101,112,97,114,97,116,111,114,115,41,2,218,2,46,48,218, + 4,112,97,114,116,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,250,10,60,108,105,115,116,99,111,109,112,62, + 59,0,0,0,115,2,0,0,0,6,1,122,30,95,112,97, + 116,104,95,106,111,105,110,46,60,108,111,99,97,108,115,62, + 46,60,108,105,115,116,99,111,109,112,62,41,2,218,8,112, + 97,116,104,95,115,101,112,218,4,106,111,105,110,41,1,218, + 10,112,97,116,104,95,112,97,114,116,115,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,10,95,112,97,116, + 104,95,106,111,105,110,57,0,0,0,115,4,0,0,0,0, + 2,10,1,114,30,0,0,0,99,1,0,0,0,0,0,0, + 0,5,0,0,0,5,0,0,0,67,0,0,0,115,96,0, + 0,0,116,0,116,1,131,1,100,1,107,2,114,36,124,0, + 106,2,116,3,131,1,92,3,125,1,125,2,125,3,124,1, + 124,3,102,2,83,0,120,50,116,4,124,0,131,1,68,0, + 93,38,125,4,124,4,116,1,107,6,114,46,124,0,106,5, + 124,4,100,1,100,2,141,2,92,2,125,1,125,3,124,1, + 124,3,102,2,83,0,113,46,87,0,100,3,124,0,102,2, + 83,0,41,4,122,32,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,115,112, + 108,105,116,40,41,46,233,1,0,0,0,41,1,90,8,109, + 97,120,115,112,108,105,116,218,0,41,6,218,3,108,101,110, + 114,23,0,0,0,218,10,114,112,97,114,116,105,116,105,111, + 110,114,27,0,0,0,218,8,114,101,118,101,114,115,101,100, + 218,6,114,115,112,108,105,116,41,5,218,4,112,97,116,104, + 90,5,102,114,111,110,116,218,1,95,218,4,116,97,105,108, + 114,18,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,11,95,112,97,116,104,95,115,112,108,105, + 116,63,0,0,0,115,16,0,0,0,0,2,12,1,16,1, + 8,1,14,1,8,1,18,1,12,1,114,40,0,0,0,99, + 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, + 67,0,0,0,115,10,0,0,0,116,0,106,1,124,0,131, + 1,83,0,41,1,122,126,83,116,97,116,32,116,104,101,32, + 112,97,116,104,46,10,10,32,32,32,32,77,97,100,101,32, + 97,32,115,101,112,97,114,97,116,101,32,102,117,110,99,116, + 105,111,110,32,116,111,32,109,97,107,101,32,105,116,32,101, + 97,115,105,101,114,32,116,111,32,111,118,101,114,114,105,100, + 101,32,105,110,32,101,120,112,101,114,105,109,101,110,116,115, + 10,32,32,32,32,40,101,46,103,46,32,99,97,99,104,101, + 32,115,116,97,116,32,114,101,115,117,108,116,115,41,46,10, + 10,32,32,32,32,41,2,114,3,0,0,0,90,4,115,116, + 97,116,41,1,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,10,95,112,97,116,104,95, + 115,116,97,116,75,0,0,0,115,2,0,0,0,0,7,114, + 41,0,0,0,99,2,0,0,0,0,0,0,0,3,0,0, + 0,11,0,0,0,67,0,0,0,115,48,0,0,0,121,12, + 116,0,124,0,131,1,125,2,87,0,110,20,4,0,116,1, + 107,10,114,32,1,0,1,0,1,0,100,1,83,0,88,0, + 124,2,106,2,100,2,64,0,124,1,107,2,83,0,41,3, + 122,49,84,101,115,116,32,119,104,101,116,104,101,114,32,116, + 104,101,32,112,97,116,104,32,105,115,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,121, + 112,101,46,70,105,0,240,0,0,41,3,114,41,0,0,0, + 218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,111, + 100,101,41,3,114,37,0,0,0,218,4,109,111,100,101,90, + 9,115,116,97,116,95,105,110,102,111,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,18,95,112,97,116,104, + 95,105,115,95,109,111,100,101,95,116,121,112,101,85,0,0, + 0,115,10,0,0,0,0,2,2,1,12,1,14,1,6,1, + 114,45,0,0,0,99,1,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,10,0,0,0,116, + 0,124,0,100,1,131,2,83,0,41,2,122,31,82,101,112, + 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, + 112,97,116,104,46,105,115,102,105,108,101,46,105,0,128,0, + 0,41,1,114,45,0,0,0,41,1,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,12, + 95,112,97,116,104,95,105,115,102,105,108,101,94,0,0,0, + 115,2,0,0,0,0,2,114,46,0,0,0,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,22,0,0,0,124,0,115,12,116,0,106,1,131,0, + 125,0,116,2,124,0,100,1,131,2,83,0,41,2,122,30, + 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, + 111,115,46,112,97,116,104,46,105,115,100,105,114,46,105,0, + 64,0,0,41,3,114,3,0,0,0,218,6,103,101,116,99, + 119,100,114,45,0,0,0,41,1,114,37,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,11,95, + 112,97,116,104,95,105,115,100,105,114,99,0,0,0,115,6, + 0,0,0,0,2,4,1,8,1,114,48,0,0,0,233,182, + 1,0,0,99,3,0,0,0,0,0,0,0,6,0,0,0, + 17,0,0,0,67,0,0,0,115,162,0,0,0,100,1,106, + 0,124,0,116,1,124,0,131,1,131,2,125,3,116,2,106, + 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106, + 6,66,0,124,2,100,2,64,0,131,3,125,4,121,50,116, + 7,106,8,124,4,100,3,131,2,143,16,125,5,124,5,106, + 9,124,1,131,1,1,0,87,0,100,4,81,0,82,0,88, + 0,116,2,106,10,124,3,124,0,131,2,1,0,87,0,110, + 58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,121, + 14,116,2,106,12,124,3,131,1,1,0,87,0,110,20,4, + 0,116,11,107,10,114,148,1,0,1,0,1,0,89,0,110, + 2,88,0,130,0,89,0,110,2,88,0,100,4,83,0,41, + 5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,102, + 117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,101, + 32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,32, + 97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,32, + 66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,104, + 97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,115, + 116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,117, + 114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,102, + 32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,97, + 114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,109, + 112,116,101,100,46,122,5,123,125,46,123,125,105,182,1,0, + 0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,116, + 218,2,105,100,114,3,0,0,0,90,4,111,112,101,110,90, + 6,79,95,69,88,67,76,90,7,79,95,67,82,69,65,84, + 90,8,79,95,87,82,79,78,76,89,218,3,95,105,111,218, + 6,70,105,108,101,73,79,218,5,119,114,105,116,101,218,7, + 114,101,112,108,97,99,101,114,42,0,0,0,90,6,117,110, + 108,105,110,107,41,6,114,37,0,0,0,218,4,100,97,116, + 97,114,44,0,0,0,90,8,112,97,116,104,95,116,109,112, + 90,2,102,100,218,4,102,105,108,101,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,13,95,119,114,105,116, + 101,95,97,116,111,109,105,99,106,0,0,0,115,26,0,0, + 0,0,5,16,1,6,1,26,1,2,3,14,1,20,1,16, + 1,14,1,2,1,14,1,14,1,6,1,114,58,0,0,0, + 105,50,13,0,0,233,2,0,0,0,114,15,0,0,0,115, + 2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,104, + 101,95,95,122,4,111,112,116,45,122,3,46,112,121,122,4, + 46,112,121,99,78,41,1,218,12,111,112,116,105,109,105,122, 97,116,105,111,110,99,2,0,0,0,1,0,0,0,11,0, - 0,0,6,0,0,0,67,0,0,0,115,87,1,0,0,124, - 1,0,100,1,0,107,9,0,114,76,0,116,0,0,106,1, - 0,100,2,0,116,2,0,131,2,0,1,124,2,0,100,1, - 0,107,9,0,114,58,0,100,3,0,125,3,0,116,3,0, - 124,3,0,131,1,0,130,1,0,124,1,0,114,70,0,100, - 4,0,110,3,0,100,5,0,125,2,0,116,4,0,124,0, - 0,131,1,0,92,2,0,125,4,0,125,5,0,124,5,0, - 106,5,0,100,6,0,131,1,0,92,3,0,125,6,0,125, - 7,0,125,8,0,116,6,0,106,7,0,106,8,0,125,9, - 0,124,9,0,100,1,0,107,8,0,114,154,0,116,9,0, - 100,7,0,131,1,0,130,1,0,100,4,0,106,10,0,124, - 6,0,114,172,0,124,6,0,110,3,0,124,8,0,124,7, - 0,124,9,0,103,3,0,131,1,0,125,10,0,124,2,0, - 100,1,0,107,8,0,114,241,0,116,6,0,106,11,0,106, - 12,0,100,8,0,107,2,0,114,229,0,100,4,0,125,2, - 0,110,12,0,116,6,0,106,11,0,106,12,0,125,2,0, - 116,13,0,124,2,0,131,1,0,125,2,0,124,2,0,100, - 4,0,107,3,0,114,63,1,124,2,0,106,14,0,131,0, - 0,115,42,1,116,15,0,100,9,0,106,16,0,124,2,0, - 131,1,0,131,1,0,130,1,0,100,10,0,106,16,0,124, - 10,0,116,17,0,124,2,0,131,3,0,125,10,0,116,18, - 0,124,4,0,116,19,0,124,10,0,116,20,0,100,8,0, - 25,23,131,3,0,83,41,11,97,254,2,0,0,71,105,118, - 101,110,32,116,104,101,32,112,97,116,104,32,116,111,32,97, - 32,46,112,121,32,102,105,108,101,44,32,114,101,116,117,114, - 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, - 115,32,46,112,121,99,32,102,105,108,101,46,10,10,32,32, - 32,32,84,104,101,32,46,112,121,32,102,105,108,101,32,100, - 111,101,115,32,110,111,116,32,110,101,101,100,32,116,111,32, - 101,120,105,115,116,59,32,116,104,105,115,32,115,105,109,112, - 108,121,32,114,101,116,117,114,110,115,32,116,104,101,32,112, - 97,116,104,32,116,111,32,116,104,101,10,32,32,32,32,46, - 112,121,99,32,102,105,108,101,32,99,97,108,99,117,108,97, - 116,101,100,32,97,115,32,105,102,32,116,104,101,32,46,112, - 121,32,102,105,108,101,32,119,101,114,101,32,105,109,112,111, - 114,116,101,100,46,10,10,32,32,32,32,84,104,101,32,39, - 111,112,116,105,109,105,122,97,116,105,111,110,39,32,112,97, - 114,97,109,101,116,101,114,32,99,111,110,116,114,111,108,115, - 32,116,104,101,32,112,114,101,115,117,109,101,100,32,111,112, - 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, - 32,111,102,10,32,32,32,32,116,104,101,32,98,121,116,101, - 99,111,100,101,32,102,105,108,101,46,32,73,102,32,39,111, - 112,116,105,109,105,122,97,116,105,111,110,39,32,105,115,32, - 110,111,116,32,78,111,110,101,44,32,116,104,101,32,115,116, - 114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116, - 105,111,110,10,32,32,32,32,111,102,32,116,104,101,32,97, - 114,103,117,109,101,110,116,32,105,115,32,116,97,107,101,110, - 32,97,110,100,32,118,101,114,105,102,105,101,100,32,116,111, - 32,98,101,32,97,108,112,104,97,110,117,109,101,114,105,99, - 32,40,101,108,115,101,32,86,97,108,117,101,69,114,114,111, - 114,10,32,32,32,32,105,115,32,114,97,105,115,101,100,41, - 46,10,10,32,32,32,32,84,104,101,32,100,101,98,117,103, - 95,111,118,101,114,114,105,100,101,32,112,97,114,97,109,101, - 116,101,114,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,73,102,32,100,101,98,117,103,95,111,118,101,114, - 114,105,100,101,32,105,115,32,110,111,116,32,78,111,110,101, - 44,10,32,32,32,32,97,32,84,114,117,101,32,118,97,108, - 117,101,32,105,115,32,116,104,101,32,115,97,109,101,32,97, - 115,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,116,111,32,116,104,101,32, - 101,109,112,116,121,32,115,116,114,105,110,103,10,32,32,32, - 32,119,104,105,108,101,32,97,32,70,97,108,115,101,32,118, - 97,108,117,101,32,105,115,32,101,113,117,105,118,97,108,101, - 110,116,32,116,111,32,115,101,116,116,105,110,103,32,39,111, - 112,116,105,109,105,122,97,116,105,111,110,39,32,116,111,32, - 39,49,39,46,10,10,32,32,32,32,73,102,32,115,121,115, - 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, - 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, - 101,32,116,104,101,110,32,78,111,116,73,109,112,108,101,109, - 101,110,116,101,100,69,114,114,111,114,32,105,115,32,114,97, - 105,115,101,100,46,10,10,32,32,32,32,78,122,70,116,104, - 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,59,32,117,115,101,32,39,111, - 112,116,105,109,105,122,97,116,105,111,110,39,32,105,110,115, - 116,101,97,100,122,50,100,101,98,117,103,95,111,118,101,114, - 114,105,100,101,32,111,114,32,111,112,116,105,109,105,122,97, - 116,105,111,110,32,109,117,115,116,32,98,101,32,115,101,116, - 32,116,111,32,78,111,110,101,114,32,0,0,0,114,31,0, - 0,0,218,1,46,122,36,115,121,115,46,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, - 116,97,103,32,105,115,32,78,111,110,101,233,0,0,0,0, - 122,24,123,33,114,125,32,105,115,32,110,111,116,32,97,108, - 112,104,97,110,117,109,101,114,105,99,122,7,123,125,46,123, - 125,123,125,41,21,218,9,95,119,97,114,110,105,110,103,115, - 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, - 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, - 69,114,114,111,114,114,40,0,0,0,114,34,0,0,0,114, - 8,0,0,0,218,14,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,218,9,99,97,99,104,101,95,116,97,103,218, - 19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, - 114,114,111,114,114,28,0,0,0,218,5,102,108,97,103,115, - 218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,218, - 7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,69, - 114,114,111,114,114,49,0,0,0,218,4,95,79,80,84,114, - 30,0,0,0,218,8,95,80,89,67,65,67,72,69,218,17, - 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, - 83,41,11,114,37,0,0,0,90,14,100,101,98,117,103,95, - 111,118,101,114,114,105,100,101,114,59,0,0,0,218,7,109, - 101,115,115,97,103,101,218,4,104,101,97,100,114,39,0,0, - 0,90,4,98,97,115,101,218,3,115,101,112,218,4,114,101, - 115,116,90,3,116,97,103,90,15,97,108,109,111,115,116,95, - 102,105,108,101,110,97,109,101,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,218,17,99,97,99,104,101,95,102, - 114,111,109,95,115,111,117,114,99,101,254,0,0,0,115,46, - 0,0,0,0,18,12,1,9,1,7,1,12,1,6,1,12, - 1,18,1,18,1,24,1,12,1,12,1,12,1,36,1,12, - 1,18,1,9,2,12,1,12,1,12,1,12,1,21,1,21, - 1,114,81,0,0,0,99,1,0,0,0,0,0,0,0,8, - 0,0,0,5,0,0,0,67,0,0,0,115,62,1,0,0, - 116,0,0,106,1,0,106,2,0,100,1,0,107,8,0,114, - 30,0,116,3,0,100,2,0,131,1,0,130,1,0,116,4, - 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, - 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, - 3,0,124,3,0,116,5,0,107,3,0,114,102,0,116,6, - 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, - 131,1,0,130,1,0,124,2,0,106,8,0,100,4,0,131, - 1,0,125,4,0,124,4,0,100,11,0,107,7,0,114,153, - 0,116,6,0,100,7,0,106,7,0,124,2,0,131,1,0, - 131,1,0,130,1,0,110,125,0,124,4,0,100,6,0,107, - 2,0,114,22,1,124,2,0,106,9,0,100,4,0,100,5, - 0,131,2,0,100,12,0,25,125,5,0,124,5,0,106,10, - 0,116,11,0,131,1,0,115,223,0,116,6,0,100,8,0, - 106,7,0,116,11,0,131,1,0,131,1,0,130,1,0,124, - 5,0,116,12,0,116,11,0,131,1,0,100,1,0,133,2, - 0,25,125,6,0,124,6,0,106,13,0,131,0,0,115,22, - 1,116,6,0,100,9,0,106,7,0,124,5,0,131,1,0, - 131,1,0,130,1,0,124,2,0,106,14,0,100,4,0,131, - 1,0,100,10,0,25,125,7,0,116,15,0,124,1,0,124, - 7,0,116,16,0,100,10,0,25,23,131,2,0,83,41,13, - 97,110,1,0,0,71,105,118,101,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,97,32,46,112,121,99,46,32,102, - 105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,32, - 102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46, - 112,121,99,32,102,105,108,101,32,100,111,101,115,32,110,111, - 116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,59, - 32,116,104,105,115,32,115,105,109,112,108,121,32,114,101,116, - 117,114,110,115,32,116,104,101,32,112,97,116,104,32,116,111, - 10,32,32,32,32,116,104,101,32,46,112,121,32,102,105,108, - 101,32,99,97,108,99,117,108,97,116,101,100,32,116,111,32, - 99,111,114,114,101,115,112,111,110,100,32,116,111,32,116,104, - 101,32,46,112,121,99,32,102,105,108,101,46,32,32,73,102, - 32,112,97,116,104,32,100,111,101,115,10,32,32,32,32,110, - 111,116,32,99,111,110,102,111,114,109,32,116,111,32,80,69, - 80,32,51,49,52,55,47,52,56,56,32,102,111,114,109,97, - 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, - 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, - 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, - 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, - 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,78,122,36,115,121,115,46,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, - 97,103,32,105,115,32,78,111,110,101,122,37,123,125,32,110, - 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, - 100,105,114,101,99,116,111,114,121,32,105,110,32,123,33,114, - 125,114,60,0,0,0,114,58,0,0,0,233,3,0,0,0, - 122,33,101,120,112,101,99,116,101,100,32,111,110,108,121,32, - 50,32,111,114,32,51,32,100,111,116,115,32,105,110,32,123, - 33,114,125,122,57,111,112,116,105,109,105,122,97,116,105,111, - 110,32,112,111,114,116,105,111,110,32,111,102,32,102,105,108, - 101,110,97,109,101,32,100,111,101,115,32,110,111,116,32,115, - 116,97,114,116,32,119,105,116,104,32,123,33,114,125,122,52, - 111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118, - 101,108,32,123,33,114,125,32,105,115,32,110,111,116,32,97, - 110,32,97,108,112,104,97,110,117,109,101,114,105,99,32,118, - 97,108,117,101,114,61,0,0,0,62,2,0,0,0,114,58, - 0,0,0,114,82,0,0,0,233,254,255,255,255,41,17,114, - 8,0,0,0,114,66,0,0,0,114,67,0,0,0,114,68, - 0,0,0,114,40,0,0,0,114,75,0,0,0,114,73,0, - 0,0,114,49,0,0,0,218,5,99,111,117,110,116,114,36, - 0,0,0,114,10,0,0,0,114,74,0,0,0,114,33,0, - 0,0,114,72,0,0,0,218,9,112,97,114,116,105,116,105, - 111,110,114,30,0,0,0,218,15,83,79,85,82,67,69,95, - 83,85,70,70,73,88,69,83,41,8,114,37,0,0,0,114, - 78,0,0,0,90,16,112,121,99,97,99,104,101,95,102,105, - 108,101,110,97,109,101,90,7,112,121,99,97,99,104,101,90, - 9,100,111,116,95,99,111,117,110,116,114,59,0,0,0,90, - 9,111,112,116,95,108,101,118,101,108,90,13,98,97,115,101, - 95,102,105,108,101,110,97,109,101,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,17,115,111,117,114,99,101, - 95,102,114,111,109,95,99,97,99,104,101,42,1,0,0,115, - 44,0,0,0,0,9,18,1,12,1,18,1,18,1,12,1, - 9,1,15,1,15,1,12,1,9,1,15,1,12,1,22,1, - 15,1,9,1,12,1,22,1,12,1,9,1,12,1,19,1, - 114,87,0,0,0,99,1,0,0,0,0,0,0,0,5,0, - 0,0,12,0,0,0,67,0,0,0,115,164,0,0,0,116, - 0,0,124,0,0,131,1,0,100,1,0,107,2,0,114,22, - 0,100,2,0,83,124,0,0,106,1,0,100,3,0,131,1, - 0,92,3,0,125,1,0,125,2,0,125,3,0,124,1,0, - 12,115,81,0,124,3,0,106,2,0,131,0,0,100,7,0, - 100,8,0,133,2,0,25,100,6,0,107,3,0,114,85,0, - 124,0,0,83,121,16,0,116,3,0,124,0,0,131,1,0, - 125,4,0,87,110,40,0,4,116,4,0,116,5,0,102,2, - 0,107,10,0,114,143,0,1,1,1,124,0,0,100,2,0, - 100,9,0,133,2,0,25,125,4,0,89,110,1,0,88,116, - 6,0,124,4,0,131,1,0,114,160,0,124,4,0,83,124, - 0,0,83,41,10,122,188,67,111,110,118,101,114,116,32,97, - 32,98,121,116,101,99,111,100,101,32,102,105,108,101,32,112, - 97,116,104,32,116,111,32,97,32,115,111,117,114,99,101,32, - 112,97,116,104,32,40,105,102,32,112,111,115,115,105,98,108, - 101,41,46,10,10,32,32,32,32,84,104,105,115,32,102,117, - 110,99,116,105,111,110,32,101,120,105,115,116,115,32,112,117, - 114,101,108,121,32,102,111,114,32,98,97,99,107,119,97,114, - 100,115,45,99,111,109,112,97,116,105,98,105,108,105,116,121, - 32,102,111,114,10,32,32,32,32,80,121,73,109,112,111,114, - 116,95,69,120,101,99,67,111,100,101,77,111,100,117,108,101, - 87,105,116,104,70,105,108,101,110,97,109,101,115,40,41,32, - 105,110,32,116,104,101,32,67,32,65,80,73,46,10,10,32, - 32,32,32,114,61,0,0,0,78,114,60,0,0,0,114,82, - 0,0,0,114,31,0,0,0,90,2,112,121,233,253,255,255, - 255,233,255,255,255,255,114,89,0,0,0,41,7,114,33,0, - 0,0,114,34,0,0,0,218,5,108,111,119,101,114,114,87, - 0,0,0,114,68,0,0,0,114,73,0,0,0,114,46,0, - 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, - 97,116,104,114,80,0,0,0,114,38,0,0,0,90,9,101, - 120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,101, - 95,112,97,116,104,114,4,0,0,0,114,4,0,0,0,114, - 6,0,0,0,218,15,95,103,101,116,95,115,111,117,114,99, - 101,102,105,108,101,75,1,0,0,115,20,0,0,0,0,7, - 18,1,4,1,24,1,35,1,4,1,3,1,16,1,19,1, - 21,1,114,93,0,0,0,99,1,0,0,0,0,0,0,0, - 1,0,0,0,11,0,0,0,67,0,0,0,115,92,0,0, - 0,124,0,0,106,0,0,116,1,0,116,2,0,131,1,0, - 131,1,0,114,59,0,121,14,0,116,3,0,124,0,0,131, - 1,0,83,87,113,88,0,4,116,4,0,107,10,0,114,55, - 0,1,1,1,89,113,88,0,88,110,29,0,124,0,0,106, - 0,0,116,1,0,116,5,0,131,1,0,131,1,0,114,84, - 0,124,0,0,83,100,0,0,83,100,0,0,83,41,1,78, - 41,6,218,8,101,110,100,115,119,105,116,104,218,5,116,117, - 112,108,101,114,86,0,0,0,114,81,0,0,0,114,68,0, - 0,0,114,76,0,0,0,41,1,218,8,102,105,108,101,110, - 97,109,101,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,218,11,95,103,101,116,95,99,97,99,104,101,100,94, - 1,0,0,115,16,0,0,0,0,1,21,1,3,1,14,1, - 13,1,8,1,21,1,4,2,114,97,0,0,0,99,1,0, - 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, - 0,0,115,60,0,0,0,121,19,0,116,0,0,124,0,0, - 131,1,0,106,1,0,125,1,0,87,110,24,0,4,116,2, - 0,107,10,0,114,45,0,1,1,1,100,1,0,125,1,0, - 89,110,1,0,88,124,1,0,100,2,0,79,125,1,0,124, - 1,0,83,41,3,122,51,67,97,108,99,117,108,97,116,101, - 32,116,104,101,32,109,111,100,101,32,112,101,114,109,105,115, - 115,105,111,110,115,32,102,111,114,32,97,32,98,121,116,101, - 99,111,100,101,32,102,105,108,101,46,105,182,1,0,0,233, - 128,0,0,0,41,3,114,41,0,0,0,114,43,0,0,0, - 114,42,0,0,0,41,2,114,37,0,0,0,114,44,0,0, + 0,0,6,0,0,0,67,0,0,0,115,244,0,0,0,124, + 1,100,1,107,9,114,52,116,0,106,1,100,2,116,2,131, + 2,1,0,124,2,100,1,107,9,114,40,100,3,125,3,116, + 3,124,3,131,1,130,1,124,1,114,48,100,4,110,2,100, + 5,125,2,116,4,106,5,124,0,131,1,125,0,116,6,124, + 0,131,1,92,2,125,4,125,5,124,5,106,7,100,6,131, + 1,92,3,125,6,125,7,125,8,116,8,106,9,106,10,125, + 9,124,9,100,1,107,8,114,114,116,11,100,7,131,1,130, + 1,100,4,106,12,124,6,114,126,124,6,110,2,124,8,124, + 7,124,9,103,3,131,1,125,10,124,2,100,1,107,8,114, + 172,116,8,106,13,106,14,100,8,107,2,114,164,100,4,125, + 2,110,8,116,8,106,13,106,14,125,2,116,15,124,2,131, + 1,125,2,124,2,100,4,107,3,114,224,124,2,106,16,131, + 0,115,210,116,17,100,9,106,18,124,2,131,1,131,1,130, + 1,100,10,106,18,124,10,116,19,124,2,131,3,125,10,116, + 20,124,4,116,21,124,10,116,22,100,8,25,0,23,0,131, + 3,83,0,41,11,97,254,2,0,0,71,105,118,101,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, + 121,32,102,105,108,101,44,32,114,101,116,117,114,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,105,116,115,32,46, + 112,121,99,32,102,105,108,101,46,10,10,32,32,32,32,84, + 104,101,32,46,112,121,32,102,105,108,101,32,100,111,101,115, + 32,110,111,116,32,110,101,101,100,32,116,111,32,101,120,105, + 115,116,59,32,116,104,105,115,32,115,105,109,112,108,121,32, + 114,101,116,117,114,110,115,32,116,104,101,32,112,97,116,104, + 32,116,111,32,116,104,101,10,32,32,32,32,46,112,121,99, + 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, + 32,97,115,32,105,102,32,116,104,101,32,46,112,121,32,102, + 105,108,101,32,119,101,114,101,32,105,109,112,111,114,116,101, + 100,46,10,10,32,32,32,32,84,104,101,32,39,111,112,116, + 105,109,105,122,97,116,105,111,110,39,32,112,97,114,97,109, + 101,116,101,114,32,99,111,110,116,114,111,108,115,32,116,104, + 101,32,112,114,101,115,117,109,101,100,32,111,112,116,105,109, + 105,122,97,116,105,111,110,32,108,101,118,101,108,32,111,102, + 10,32,32,32,32,116,104,101,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,46,32,73,102,32,39,111,112,116,105, + 109,105,122,97,116,105,111,110,39,32,105,115,32,110,111,116, + 32,78,111,110,101,44,32,116,104,101,32,115,116,114,105,110, + 103,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110, + 10,32,32,32,32,111,102,32,116,104,101,32,97,114,103,117, + 109,101,110,116,32,105,115,32,116,97,107,101,110,32,97,110, + 100,32,118,101,114,105,102,105,101,100,32,116,111,32,98,101, + 32,97,108,112,104,97,110,117,109,101,114,105,99,32,40,101, + 108,115,101,32,86,97,108,117,101,69,114,114,111,114,10,32, + 32,32,32,105,115,32,114,97,105,115,101,100,41,46,10,10, + 32,32,32,32,84,104,101,32,100,101,98,117,103,95,111,118, + 101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,114, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 73,102,32,100,101,98,117,103,95,111,118,101,114,114,105,100, + 101,32,105,115,32,110,111,116,32,78,111,110,101,44,10,32, + 32,32,32,97,32,84,114,117,101,32,118,97,108,117,101,32, + 105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,115, + 101,116,116,105,110,103,32,39,111,112,116,105,109,105,122,97, + 116,105,111,110,39,32,116,111,32,116,104,101,32,101,109,112, + 116,121,32,115,116,114,105,110,103,10,32,32,32,32,119,104, + 105,108,101,32,97,32,70,97,108,115,101,32,118,97,108,117, + 101,32,105,115,32,101,113,117,105,118,97,108,101,110,116,32, + 116,111,32,115,101,116,116,105,110,103,32,39,111,112,116,105, + 109,105,122,97,116,105,111,110,39,32,116,111,32,39,49,39, + 46,10,10,32,32,32,32,73,102,32,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,32,116, + 104,101,110,32,78,111,116,73,109,112,108,101,109,101,110,116, + 101,100,69,114,114,111,114,32,105,115,32,114,97,105,115,101, + 100,46,10,10,32,32,32,32,78,122,70,116,104,101,32,100, + 101,98,117,103,95,111,118,101,114,114,105,100,101,32,112,97, + 114,97,109,101,116,101,114,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,59,32,117,115,101,32,39,111,112,116,105, + 109,105,122,97,116,105,111,110,39,32,105,110,115,116,101,97, + 100,122,50,100,101,98,117,103,95,111,118,101,114,114,105,100, + 101,32,111,114,32,111,112,116,105,109,105,122,97,116,105,111, + 110,32,109,117,115,116,32,98,101,32,115,101,116,32,116,111, + 32,78,111,110,101,114,32,0,0,0,114,31,0,0,0,218, + 1,46,122,36,115,121,115,46,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, + 32,105,115,32,78,111,110,101,233,0,0,0,0,122,24,123, + 33,114,125,32,105,115,32,110,111,116,32,97,108,112,104,97, + 110,117,109,101,114,105,99,122,7,123,125,46,123,125,123,125, + 41,23,218,9,95,119,97,114,110,105,110,103,115,218,4,119, + 97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,110, + 87,97,114,110,105,110,103,218,9,84,121,112,101,69,114,114, + 111,114,114,3,0,0,0,218,6,102,115,112,97,116,104,114, + 40,0,0,0,114,34,0,0,0,114,8,0,0,0,218,14, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, + 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, + 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,28, + 0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,105, + 109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110, + 117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,50, + 0,0,0,218,4,95,79,80,84,114,30,0,0,0,218,8, + 95,80,89,67,65,67,72,69,218,17,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,41,11,114,37,0, + 0,0,90,14,100,101,98,117,103,95,111,118,101,114,114,105, + 100,101,114,60,0,0,0,218,7,109,101,115,115,97,103,101, + 218,4,104,101,97,100,114,39,0,0,0,90,4,98,97,115, + 101,218,3,115,101,112,218,4,114,101,115,116,90,3,116,97, + 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, + 109,101,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, + 117,114,99,101,6,1,0,0,115,48,0,0,0,0,18,8, + 1,6,1,6,1,8,1,4,1,8,1,12,1,10,1,12, + 1,16,1,8,1,8,1,8,1,24,1,8,1,12,1,6, + 2,8,1,8,1,8,1,8,1,14,1,14,1,114,83,0, + 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, + 0,0,0,67,0,0,0,115,230,0,0,0,116,0,106,1, + 106,2,100,1,107,8,114,20,116,3,100,2,131,1,130,1, + 116,4,106,5,124,0,131,1,125,0,116,6,124,0,131,1, + 92,2,125,1,125,2,116,6,124,1,131,1,92,2,125,1, + 125,3,124,3,116,7,107,3,114,78,116,8,100,3,106,9, + 116,7,124,0,131,2,131,1,130,1,124,2,106,10,100,4, + 131,1,125,4,124,4,100,11,107,7,114,112,116,8,100,7, + 106,9,124,2,131,1,131,1,130,1,110,86,124,4,100,6, + 107,2,114,198,124,2,106,11,100,4,100,5,131,2,100,12, + 25,0,125,5,124,5,106,12,116,13,131,1,115,160,116,8, + 100,8,106,9,116,13,131,1,131,1,130,1,124,5,116,14, + 116,13,131,1,100,1,133,2,25,0,125,6,124,6,106,15, + 131,0,115,198,116,8,100,9,106,9,124,5,131,1,131,1, + 130,1,124,2,106,16,100,4,131,1,100,10,25,0,125,7, + 116,17,124,1,124,7,116,18,100,10,25,0,23,0,131,2, + 83,0,41,13,97,110,1,0,0,71,105,118,101,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, + 99,46,32,102,105,108,101,44,32,114,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,105,116,115,32, + 46,112,121,32,102,105,108,101,46,10,10,32,32,32,32,84, + 104,101,32,46,112,121,99,32,102,105,108,101,32,100,111,101, + 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, + 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, + 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, + 104,32,116,111,10,32,32,32,32,116,104,101,32,46,112,121, + 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, + 32,116,111,32,99,111,114,114,101,115,112,111,110,100,32,116, + 111,32,116,104,101,32,46,112,121,99,32,102,105,108,101,46, + 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, + 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, + 111,32,80,69,80,32,51,49,52,55,47,52,56,56,32,102, + 111,114,109,97,116,44,32,86,97,108,117,101,69,114,114,111, + 114,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100, + 46,32,73,102,10,32,32,32,32,115,121,115,46,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, + 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, + 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 46,10,10,32,32,32,32,78,122,36,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,122,37, + 123,125,32,110,111,116,32,98,111,116,116,111,109,45,108,101, + 118,101,108,32,100,105,114,101,99,116,111,114,121,32,105,110, + 32,123,33,114,125,114,61,0,0,0,114,59,0,0,0,233, + 3,0,0,0,122,33,101,120,112,101,99,116,101,100,32,111, + 110,108,121,32,50,32,111,114,32,51,32,100,111,116,115,32, + 105,110,32,123,33,114,125,122,57,111,112,116,105,109,105,122, + 97,116,105,111,110,32,112,111,114,116,105,111,110,32,111,102, + 32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110, + 111,116,32,115,116,97,114,116,32,119,105,116,104,32,123,33, + 114,125,122,52,111,112,116,105,109,105,122,97,116,105,111,110, + 32,108,101,118,101,108,32,123,33,114,125,32,105,115,32,110, + 111,116,32,97,110,32,97,108,112,104,97,110,117,109,101,114, + 105,99,32,118,97,108,117,101,114,62,0,0,0,62,2,0, + 0,0,114,59,0,0,0,114,84,0,0,0,233,254,255,255, + 255,41,19,114,8,0,0,0,114,68,0,0,0,114,69,0, + 0,0,114,70,0,0,0,114,3,0,0,0,114,67,0,0, + 0,114,40,0,0,0,114,77,0,0,0,114,75,0,0,0, + 114,50,0,0,0,218,5,99,111,117,110,116,114,36,0,0, + 0,114,10,0,0,0,114,76,0,0,0,114,33,0,0,0, + 114,74,0,0,0,218,9,112,97,114,116,105,116,105,111,110, + 114,30,0,0,0,218,15,83,79,85,82,67,69,95,83,85, + 70,70,73,88,69,83,41,8,114,37,0,0,0,114,80,0, + 0,0,90,16,112,121,99,97,99,104,101,95,102,105,108,101, + 110,97,109,101,90,7,112,121,99,97,99,104,101,90,9,100, + 111,116,95,99,111,117,110,116,114,60,0,0,0,90,9,111, + 112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,102, + 105,108,101,110,97,109,101,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,17,115,111,117,114,99,101,95,102, + 114,111,109,95,99,97,99,104,101,51,1,0,0,115,46,0, + 0,0,0,9,12,1,8,1,10,1,12,1,12,1,8,1, + 6,1,10,1,10,1,8,1,6,1,10,1,8,1,16,1, + 10,1,6,1,8,1,16,1,8,1,6,1,8,1,14,1, + 114,89,0,0,0,99,1,0,0,0,0,0,0,0,5,0, + 0,0,12,0,0,0,67,0,0,0,115,128,0,0,0,116, + 0,124,0,131,1,100,1,107,2,114,16,100,2,83,0,124, + 0,106,1,100,3,131,1,92,3,125,1,125,2,125,3,124, + 1,12,0,115,58,124,3,106,2,131,0,100,7,100,8,133, + 2,25,0,100,6,107,3,114,62,124,0,83,0,121,12,116, + 3,124,0,131,1,125,4,87,0,110,36,4,0,116,4,116, + 5,102,2,107,10,114,110,1,0,1,0,1,0,124,0,100, + 2,100,9,133,2,25,0,125,4,89,0,110,2,88,0,116, + 6,124,4,131,1,114,124,124,4,83,0,124,0,83,0,41, + 10,122,188,67,111,110,118,101,114,116,32,97,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,32,112,97,116,104,32, + 116,111,32,97,32,115,111,117,114,99,101,32,112,97,116,104, + 32,40,105,102,32,112,111,115,115,105,98,108,101,41,46,10, + 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, + 111,110,32,101,120,105,115,116,115,32,112,117,114,101,108,121, + 32,102,111,114,32,98,97,99,107,119,97,114,100,115,45,99, + 111,109,112,97,116,105,98,105,108,105,116,121,32,102,111,114, + 10,32,32,32,32,80,121,73,109,112,111,114,116,95,69,120, + 101,99,67,111,100,101,77,111,100,117,108,101,87,105,116,104, + 70,105,108,101,110,97,109,101,115,40,41,32,105,110,32,116, + 104,101,32,67,32,65,80,73,46,10,10,32,32,32,32,114, + 62,0,0,0,78,114,61,0,0,0,114,84,0,0,0,114, + 31,0,0,0,90,2,112,121,233,253,255,255,255,233,255,255, + 255,255,114,91,0,0,0,41,7,114,33,0,0,0,114,34, + 0,0,0,218,5,108,111,119,101,114,114,89,0,0,0,114, + 70,0,0,0,114,75,0,0,0,114,46,0,0,0,41,5, + 218,13,98,121,116,101,99,111,100,101,95,112,97,116,104,114, + 82,0,0,0,114,38,0,0,0,90,9,101,120,116,101,110, + 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, + 104,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, + 101,85,1,0,0,115,20,0,0,0,0,7,12,1,4,1, + 16,1,26,1,4,1,2,1,12,1,18,1,18,1,114,95, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 11,0,0,0,67,0,0,0,115,74,0,0,0,124,0,106, + 0,116,1,116,2,131,1,131,1,114,46,121,8,116,3,124, + 0,131,1,83,0,4,0,116,4,107,10,114,42,1,0,1, + 0,1,0,89,0,113,70,88,0,110,24,124,0,106,0,116, + 1,116,5,131,1,131,1,114,66,124,0,83,0,110,4,100, + 0,83,0,100,0,83,0,41,1,78,41,6,218,8,101,110, + 100,115,119,105,116,104,218,5,116,117,112,108,101,114,88,0, + 0,0,114,83,0,0,0,114,70,0,0,0,114,78,0,0, + 0,41,1,218,8,102,105,108,101,110,97,109,101,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,11,95,103, + 101,116,95,99,97,99,104,101,100,104,1,0,0,115,16,0, + 0,0,0,1,14,1,2,1,8,1,14,1,8,1,14,1, + 6,2,114,99,0,0,0,99,1,0,0,0,0,0,0,0, + 2,0,0,0,11,0,0,0,67,0,0,0,115,52,0,0, + 0,121,14,116,0,124,0,131,1,106,1,125,1,87,0,110, + 24,4,0,116,2,107,10,114,38,1,0,1,0,1,0,100, + 1,125,1,89,0,110,2,88,0,124,1,100,2,79,0,125, + 1,124,1,83,0,41,3,122,51,67,97,108,99,117,108,97, + 116,101,32,116,104,101,32,109,111,100,101,32,112,101,114,109, + 105,115,115,105,111,110,115,32,102,111,114,32,97,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,46,105,182,1,0, + 0,233,128,0,0,0,41,3,114,41,0,0,0,114,43,0, + 0,0,114,42,0,0,0,41,2,114,37,0,0,0,114,44, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,10,95,99,97,108,99,95,109,111,100,101,116,1, + 0,0,115,12,0,0,0,0,2,2,1,14,1,14,1,10, + 3,8,1,114,101,0,0,0,99,1,0,0,0,0,0,0, + 0,3,0,0,0,11,0,0,0,3,0,0,0,115,68,0, + 0,0,100,6,135,0,102,1,100,2,100,3,132,9,125,1, + 121,10,116,0,106,1,125,2,87,0,110,28,4,0,116,2, + 107,10,114,52,1,0,1,0,1,0,100,4,100,5,132,0, + 125,2,89,0,110,2,88,0,124,2,124,1,136,0,131,2, + 1,0,124,1,83,0,41,7,122,252,68,101,99,111,114,97, + 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, + 97,116,32,116,104,101,32,109,111,100,117,108,101,32,98,101, + 105,110,103,32,114,101,113,117,101,115,116,101,100,32,109,97, + 116,99,104,101,115,32,116,104,101,32,111,110,101,32,116,104, + 101,10,32,32,32,32,108,111,97,100,101,114,32,99,97,110, + 32,104,97,110,100,108,101,46,10,10,32,32,32,32,84,104, + 101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116, + 32,40,115,101,108,102,41,32,109,117,115,116,32,100,101,102, + 105,110,101,32,95,110,97,109,101,32,119,104,105,99,104,32, + 116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109, + 101,110,116,32,105,115,10,32,32,32,32,99,111,109,112,97, + 114,101,100,32,97,103,97,105,110,115,116,46,32,73,102,32, + 116,104,101,32,99,111,109,112,97,114,105,115,111,110,32,102, + 97,105,108,115,32,116,104,101,110,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, + 10,10,32,32,32,32,78,99,2,0,0,0,0,0,0,0, + 4,0,0,0,4,0,0,0,31,0,0,0,115,66,0,0, + 0,124,1,100,0,107,8,114,16,124,0,106,0,125,1,110, + 32,124,0,106,0,124,1,107,3,114,48,116,1,100,1,124, + 0,106,0,124,1,102,2,22,0,124,1,100,2,141,2,130, + 1,136,0,124,0,124,1,102,2,124,2,158,2,124,3,142, + 1,83,0,41,3,78,122,30,108,111,97,100,101,114,32,102, + 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110, + 100,108,101,32,37,115,41,1,218,4,110,97,109,101,41,2, + 114,102,0,0,0,218,11,73,109,112,111,114,116,69,114,114, + 111,114,41,4,218,4,115,101,108,102,114,102,0,0,0,218, + 4,97,114,103,115,90,6,107,119,97,114,103,115,41,1,218, + 6,109,101,116,104,111,100,114,4,0,0,0,114,6,0,0, + 0,218,19,95,99,104,101,99,107,95,110,97,109,101,95,119, + 114,97,112,112,101,114,136,1,0,0,115,12,0,0,0,0, + 1,8,1,8,1,10,1,4,1,18,1,122,40,95,99,104, + 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, + 62,46,95,99,104,101,99,107,95,110,97,109,101,95,119,114, + 97,112,112,101,114,99,2,0,0,0,0,0,0,0,3,0, + 0,0,7,0,0,0,83,0,0,0,115,60,0,0,0,120, + 40,100,5,68,0,93,32,125,2,116,0,124,1,124,2,131, + 2,114,6,116,1,124,0,124,2,116,2,124,1,124,2,131, + 2,131,3,1,0,113,6,87,0,124,0,106,3,106,4,124, + 1,106,3,131,1,1,0,100,0,83,0,41,6,78,218,10, + 95,95,109,111,100,117,108,101,95,95,218,8,95,95,110,97, + 109,101,95,95,218,12,95,95,113,117,97,108,110,97,109,101, + 95,95,218,7,95,95,100,111,99,95,95,41,4,114,108,0, + 0,0,114,109,0,0,0,114,110,0,0,0,114,111,0,0, + 0,41,5,218,7,104,97,115,97,116,116,114,218,7,115,101, + 116,97,116,116,114,218,7,103,101,116,97,116,116,114,218,8, + 95,95,100,105,99,116,95,95,218,6,117,112,100,97,116,101, + 41,3,90,3,110,101,119,90,3,111,108,100,114,55,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,10,95,99,97,108,99,95,109,111,100,101,106,1,0,0, - 115,12,0,0,0,0,2,3,1,19,1,13,1,11,3,10, - 1,114,99,0,0,0,218,9,118,101,114,98,111,115,105,116, - 121,114,31,0,0,0,99,1,0,0,0,1,0,0,0,3, - 0,0,0,4,0,0,0,71,0,0,0,115,75,0,0,0, - 116,0,0,106,1,0,106,2,0,124,1,0,107,5,0,114, - 71,0,124,0,0,106,3,0,100,6,0,131,1,0,115,43, - 0,100,3,0,124,0,0,23,125,0,0,116,4,0,124,0, - 0,106,5,0,124,2,0,140,0,0,100,4,0,116,0,0, - 106,6,0,131,1,1,1,100,5,0,83,41,7,122,61,80, - 114,105,110,116,32,116,104,101,32,109,101,115,115,97,103,101, - 32,116,111,32,115,116,100,101,114,114,32,105,102,32,45,118, - 47,80,89,84,72,79,78,86,69,82,66,79,83,69,32,105, - 115,32,116,117,114,110,101,100,32,111,110,46,250,1,35,250, - 7,105,109,112,111,114,116,32,122,2,35,32,114,56,0,0, - 0,78,41,2,114,101,0,0,0,114,102,0,0,0,41,7, - 114,8,0,0,0,114,69,0,0,0,218,7,118,101,114,98, - 111,115,101,114,10,0,0,0,218,5,112,114,105,110,116,114, - 49,0,0,0,218,6,115,116,100,101,114,114,41,3,114,77, - 0,0,0,114,100,0,0,0,218,4,97,114,103,115,114,4, - 0,0,0,114,4,0,0,0,114,6,0,0,0,218,16,95, - 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,118, - 1,0,0,115,8,0,0,0,0,2,18,1,15,1,10,1, - 114,107,0,0,0,99,1,0,0,0,0,0,0,0,3,0, - 0,0,11,0,0,0,3,0,0,0,115,84,0,0,0,100, - 1,0,135,0,0,102,1,0,100,2,0,100,3,0,134,1, - 0,125,1,0,121,13,0,116,0,0,106,1,0,125,2,0, - 87,110,30,0,4,116,2,0,107,10,0,114,66,0,1,1, - 1,100,4,0,100,5,0,132,0,0,125,2,0,89,110,1, - 0,88,124,2,0,124,1,0,136,0,0,131,2,0,1,124, - 1,0,83,41,6,122,252,68,101,99,111,114,97,116,111,114, - 32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32, - 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, - 32,114,101,113,117,101,115,116,101,100,32,109,97,116,99,104, - 101,115,32,116,104,101,32,111,110,101,32,116,104,101,10,32, - 32,32,32,108,111,97,100,101,114,32,99,97,110,32,104,97, - 110,100,108,101,46,10,10,32,32,32,32,84,104,101,32,102, - 105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,115, - 101,108,102,41,32,109,117,115,116,32,100,101,102,105,110,101, - 32,95,110,97,109,101,32,119,104,105,99,104,32,116,104,101, - 32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116, - 32,105,115,10,32,32,32,32,99,111,109,112,97,114,101,100, - 32,97,103,97,105,110,115,116,46,32,73,102,32,116,104,101, - 32,99,111,109,112,97,114,105,115,111,110,32,102,97,105,108, - 115,32,116,104,101,110,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,78,99,2,0,0,0,0,0,0,0,4,0,0, - 0,5,0,0,0,31,0,0,0,115,89,0,0,0,124,1, - 0,100,0,0,107,8,0,114,24,0,124,0,0,106,0,0, - 125,1,0,110,46,0,124,0,0,106,0,0,124,1,0,107, - 3,0,114,70,0,116,1,0,100,1,0,124,0,0,106,0, - 0,124,1,0,102,2,0,22,100,2,0,124,1,0,131,1, - 1,130,1,0,136,0,0,124,0,0,124,1,0,124,2,0, - 124,3,0,142,2,0,83,41,3,78,122,30,108,111,97,100, - 101,114,32,102,111,114,32,37,115,32,99,97,110,110,111,116, - 32,104,97,110,100,108,101,32,37,115,218,4,110,97,109,101, - 41,2,114,108,0,0,0,218,11,73,109,112,111,114,116,69, - 114,114,111,114,41,4,218,4,115,101,108,102,114,108,0,0, - 0,114,106,0,0,0,90,6,107,119,97,114,103,115,41,1, - 218,6,109,101,116,104,111,100,114,4,0,0,0,114,6,0, - 0,0,218,19,95,99,104,101,99,107,95,110,97,109,101,95, - 119,114,97,112,112,101,114,134,1,0,0,115,12,0,0,0, - 0,1,12,1,12,1,15,1,6,1,25,1,122,40,95,99, - 104,101,99,107,95,110,97,109,101,46,60,108,111,99,97,108, - 115,62,46,95,99,104,101,99,107,95,110,97,109,101,95,119, - 114,97,112,112,101,114,99,2,0,0,0,0,0,0,0,3, - 0,0,0,7,0,0,0,83,0,0,0,115,92,0,0,0, - 120,66,0,100,1,0,100,2,0,100,3,0,100,4,0,103, - 4,0,68,93,46,0,125,2,0,116,0,0,124,1,0,124, - 2,0,131,2,0,114,19,0,116,1,0,124,0,0,124,2, - 0,116,2,0,124,1,0,124,2,0,131,2,0,131,3,0, - 1,113,19,0,87,124,0,0,106,3,0,106,4,0,124,1, - 0,106,3,0,131,1,0,1,100,0,0,83,41,5,78,218, - 10,95,95,109,111,100,117,108,101,95,95,218,8,95,95,110, - 97,109,101,95,95,218,12,95,95,113,117,97,108,110,97,109, - 101,95,95,218,7,95,95,100,111,99,95,95,41,5,218,7, - 104,97,115,97,116,116,114,218,7,115,101,116,97,116,116,114, - 218,7,103,101,116,97,116,116,114,218,8,95,95,100,105,99, - 116,95,95,218,6,117,112,100,97,116,101,41,3,90,3,110, - 101,119,90,3,111,108,100,114,54,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,6,0,0,0,218,5,95,119,114, - 97,112,145,1,0,0,115,8,0,0,0,0,1,25,1,15, - 1,29,1,122,26,95,99,104,101,99,107,95,110,97,109,101, - 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,41, - 3,218,10,95,98,111,111,116,115,116,114,97,112,114,122,0, - 0,0,218,9,78,97,109,101,69,114,114,111,114,41,3,114, - 111,0,0,0,114,112,0,0,0,114,122,0,0,0,114,4, - 0,0,0,41,1,114,111,0,0,0,114,6,0,0,0,218, - 11,95,99,104,101,99,107,95,110,97,109,101,126,1,0,0, - 115,14,0,0,0,0,8,21,7,3,1,13,1,13,2,17, - 5,13,1,114,125,0,0,0,99,2,0,0,0,0,0,0, - 0,5,0,0,0,4,0,0,0,67,0,0,0,115,84,0, - 0,0,124,0,0,106,0,0,124,1,0,131,1,0,92,2, - 0,125,2,0,125,3,0,124,2,0,100,1,0,107,8,0, - 114,80,0,116,1,0,124,3,0,131,1,0,114,80,0,100, - 2,0,125,4,0,116,2,0,106,3,0,124,4,0,106,4, - 0,124,3,0,100,3,0,25,131,1,0,116,5,0,131,2, - 0,1,124,2,0,83,41,4,122,155,84,114,121,32,116,111, + 218,5,95,119,114,97,112,147,1,0,0,115,8,0,0,0, + 0,1,10,1,10,1,22,1,122,26,95,99,104,101,99,107, + 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, + 119,114,97,112,41,1,78,41,3,218,10,95,98,111,111,116, + 115,116,114,97,112,114,117,0,0,0,218,9,78,97,109,101, + 69,114,114,111,114,41,3,114,106,0,0,0,114,107,0,0, + 0,114,117,0,0,0,114,4,0,0,0,41,1,114,106,0, + 0,0,114,6,0,0,0,218,11,95,99,104,101,99,107,95, + 110,97,109,101,128,1,0,0,115,14,0,0,0,0,8,14, + 7,2,1,10,1,14,2,14,5,10,1,114,120,0,0,0, + 99,2,0,0,0,0,0,0,0,5,0,0,0,4,0,0, + 0,67,0,0,0,115,60,0,0,0,124,0,106,0,124,1, + 131,1,92,2,125,2,125,3,124,2,100,1,107,8,114,56, + 116,1,124,3,131,1,114,56,100,2,125,4,116,2,106,3, + 124,4,106,4,124,3,100,3,25,0,131,1,116,5,131,2, + 1,0,124,2,83,0,41,4,122,155,84,114,121,32,116,111, 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, @@ -632,1354 +568,1291 @@ const unsigned char _Py_M__importlib_external[] = { 10,32,32,32,32,78,122,44,78,111,116,32,105,109,112,111, 114,116,105,110,103,32,100,105,114,101,99,116,111,114,121,32, 123,125,58,32,109,105,115,115,105,110,103,32,95,95,105,110, - 105,116,95,95,114,61,0,0,0,41,6,218,11,102,105,110, - 100,95,108,111,97,100,101,114,114,33,0,0,0,114,62,0, - 0,0,114,63,0,0,0,114,49,0,0,0,218,13,73,109, - 112,111,114,116,87,97,114,110,105,110,103,41,5,114,110,0, + 105,116,95,95,114,62,0,0,0,41,6,218,11,102,105,110, + 100,95,108,111,97,100,101,114,114,33,0,0,0,114,63,0, + 0,0,114,64,0,0,0,114,50,0,0,0,218,13,73,109, + 112,111,114,116,87,97,114,110,105,110,103,41,5,114,104,0, 0,0,218,8,102,117,108,108,110,97,109,101,218,6,108,111, 97,100,101,114,218,8,112,111,114,116,105,111,110,115,218,3, 109,115,103,114,4,0,0,0,114,4,0,0,0,114,6,0, 0,0,218,17,95,102,105,110,100,95,109,111,100,117,108,101, - 95,115,104,105,109,154,1,0,0,115,10,0,0,0,0,10, - 21,1,24,1,6,1,29,1,114,132,0,0,0,99,4,0, - 0,0,0,0,0,0,11,0,0,0,19,0,0,0,67,0, - 0,0,115,240,1,0,0,105,0,0,125,4,0,124,2,0, - 100,1,0,107,9,0,114,31,0,124,2,0,124,4,0,100, - 2,0,60,110,6,0,100,3,0,125,2,0,124,3,0,100, - 1,0,107,9,0,114,59,0,124,3,0,124,4,0,100,4, - 0,60,124,0,0,100,1,0,100,5,0,133,2,0,25,125, - 5,0,124,0,0,100,5,0,100,6,0,133,2,0,25,125, - 6,0,124,0,0,100,6,0,100,7,0,133,2,0,25,125, - 7,0,124,5,0,116,0,0,107,3,0,114,168,0,100,8, - 0,106,1,0,124,2,0,124,5,0,131,2,0,125,8,0, - 116,2,0,100,9,0,124,8,0,131,2,0,1,116,3,0, - 124,8,0,124,4,0,141,1,0,130,1,0,110,119,0,116, - 4,0,124,6,0,131,1,0,100,5,0,107,3,0,114,229, - 0,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, - 116,2,0,100,9,0,124,8,0,131,2,0,1,116,5,0, - 124,8,0,131,1,0,130,1,0,110,58,0,116,4,0,124, - 7,0,131,1,0,100,5,0,107,3,0,114,31,1,100,11, - 0,106,1,0,124,2,0,131,1,0,125,8,0,116,2,0, - 100,9,0,124,8,0,131,2,0,1,116,5,0,124,8,0, - 131,1,0,130,1,0,124,1,0,100,1,0,107,9,0,114, - 226,1,121,20,0,116,6,0,124,1,0,100,12,0,25,131, - 1,0,125,9,0,87,110,18,0,4,116,7,0,107,10,0, - 114,83,1,1,1,1,89,110,62,0,88,116,8,0,124,6, - 0,131,1,0,124,9,0,107,3,0,114,145,1,100,13,0, - 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, - 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, - 4,0,141,1,0,130,1,0,121,18,0,124,1,0,100,14, - 0,25,100,15,0,64,125,10,0,87,110,18,0,4,116,7, - 0,107,10,0,114,183,1,1,1,1,89,110,43,0,88,116, - 8,0,124,7,0,131,1,0,124,10,0,107,3,0,114,226, - 1,116,3,0,100,13,0,106,1,0,124,2,0,131,1,0, - 124,4,0,141,1,0,130,1,0,124,0,0,100,7,0,100, - 1,0,133,2,0,25,83,41,16,97,122,1,0,0,86,97, - 108,105,100,97,116,101,32,116,104,101,32,104,101,97,100,101, - 114,32,111,102,32,116,104,101,32,112,97,115,115,101,100,45, - 105,110,32,98,121,116,101,99,111,100,101,32,97,103,97,105, - 110,115,116,32,115,111,117,114,99,101,95,115,116,97,116,115, - 32,40,105,102,10,32,32,32,32,103,105,118,101,110,41,32, - 97,110,100,32,114,101,116,117,114,110,105,110,103,32,116,104, - 101,32,98,121,116,101,99,111,100,101,32,116,104,97,116,32, - 99,97,110,32,98,101,32,99,111,109,112,105,108,101,100,32, - 98,121,32,99,111,109,112,105,108,101,40,41,46,10,10,32, - 32,32,32,65,108,108,32,111,116,104,101,114,32,97,114,103, - 117,109,101,110,116,115,32,97,114,101,32,117,115,101,100,32, - 116,111,32,101,110,104,97,110,99,101,32,101,114,114,111,114, - 32,114,101,112,111,114,116,105,110,103,46,10,10,32,32,32, - 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, - 114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32, - 109,97,103,105,99,32,110,117,109,98,101,114,32,105,115,32, - 105,110,99,111,114,114,101,99,116,32,111,114,32,116,104,101, - 32,98,121,116,101,99,111,100,101,32,105,115,10,32,32,32, - 32,102,111,117,110,100,32,116,111,32,98,101,32,115,116,97, - 108,101,46,32,69,79,70,69,114,114,111,114,32,105,115,32, - 114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32, - 100,97,116,97,32,105,115,32,102,111,117,110,100,32,116,111, - 32,98,101,10,32,32,32,32,116,114,117,110,99,97,116,101, - 100,46,10,10,32,32,32,32,78,114,108,0,0,0,122,10, - 60,98,121,116,101,99,111,100,101,62,114,37,0,0,0,114, - 14,0,0,0,233,8,0,0,0,233,12,0,0,0,122,30, - 98,97,100,32,109,97,103,105,99,32,110,117,109,98,101,114, - 32,105,110,32,123,33,114,125,58,32,123,33,114,125,122,2, - 123,125,122,43,114,101,97,99,104,101,100,32,69,79,70,32, - 119,104,105,108,101,32,114,101,97,100,105,110,103,32,116,105, - 109,101,115,116,97,109,112,32,105,110,32,123,33,114,125,122, - 48,114,101,97,99,104,101,100,32,69,79,70,32,119,104,105, - 108,101,32,114,101,97,100,105,110,103,32,115,105,122,101,32, - 111,102,32,115,111,117,114,99,101,32,105,110,32,123,33,114, - 125,218,5,109,116,105,109,101,122,26,98,121,116,101,99,111, - 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32, - 123,33,114,125,218,4,115,105,122,101,108,3,0,0,0,255, - 127,255,127,3,0,41,9,218,12,77,65,71,73,67,95,78, - 85,77,66,69,82,114,49,0,0,0,114,107,0,0,0,114, - 109,0,0,0,114,33,0,0,0,218,8,69,79,70,69,114, - 114,111,114,114,16,0,0,0,218,8,75,101,121,69,114,114, - 111,114,114,21,0,0,0,41,11,114,55,0,0,0,218,12, - 115,111,117,114,99,101,95,115,116,97,116,115,114,108,0,0, - 0,114,37,0,0,0,90,11,101,120,99,95,100,101,116,97, - 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, - 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, - 105,122,101,114,77,0,0,0,218,12,115,111,117,114,99,101, - 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115, - 105,122,101,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, - 116,101,99,111,100,101,95,104,101,97,100,101,114,171,1,0, - 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, - 12,1,10,1,16,1,16,1,16,1,12,1,18,1,13,1, - 18,1,18,1,15,1,13,1,15,1,18,1,15,1,13,1, - 12,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, - 13,1,15,1,3,1,18,1,13,1,5,2,18,1,15,1, - 9,1,114,143,0,0,0,99,4,0,0,0,0,0,0,0, - 5,0,0,0,6,0,0,0,67,0,0,0,115,112,0,0, - 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, - 116,2,0,124,4,0,116,3,0,131,2,0,114,75,0,116, - 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, - 2,0,107,9,0,114,71,0,116,5,0,106,6,0,124,4, - 0,124,3,0,131,2,0,1,124,4,0,83,116,7,0,100, - 3,0,106,8,0,124,2,0,131,1,0,100,4,0,124,1, - 0,100,5,0,124,2,0,131,1,2,130,1,0,100,2,0, - 83,41,6,122,60,67,111,109,112,105,108,101,32,98,121,116, - 101,99,111,100,101,32,97,115,32,114,101,116,117,114,110,101, - 100,32,98,121,32,95,118,97,108,105,100,97,116,101,95,98, - 121,116,101,99,111,100,101,95,104,101,97,100,101,114,40,41, - 46,122,21,99,111,100,101,32,111,98,106,101,99,116,32,102, - 114,111,109,32,123,33,114,125,78,122,23,78,111,110,45,99, - 111,100,101,32,111,98,106,101,99,116,32,105,110,32,123,33, - 114,125,114,108,0,0,0,114,37,0,0,0,41,9,218,7, - 109,97,114,115,104,97,108,90,5,108,111,97,100,115,218,10, - 105,115,105,110,115,116,97,110,99,101,218,10,95,99,111,100, - 101,95,116,121,112,101,114,107,0,0,0,218,4,95,105,109, - 112,90,16,95,102,105,120,95,99,111,95,102,105,108,101,110, - 97,109,101,114,109,0,0,0,114,49,0,0,0,41,5,114, - 55,0,0,0,114,108,0,0,0,114,91,0,0,0,114,92, - 0,0,0,218,4,99,111,100,101,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,17,95,99,111,109,112,105, - 108,101,95,98,121,116,101,99,111,100,101,226,1,0,0,115, - 16,0,0,0,0,2,15,1,15,1,13,1,12,1,16,1, - 4,2,18,1,114,149,0,0,0,114,61,0,0,0,99,3, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,76,0,0,0,116,0,0,116,1,0,131,1, - 0,125,3,0,124,3,0,106,2,0,116,3,0,124,1,0, - 131,1,0,131,1,0,1,124,3,0,106,2,0,116,3,0, - 124,2,0,131,1,0,131,1,0,1,124,3,0,106,2,0, - 116,4,0,106,5,0,124,0,0,131,1,0,131,1,0,1, - 124,3,0,83,41,1,122,80,67,111,109,112,105,108,101,32, - 97,32,99,111,100,101,32,111,98,106,101,99,116,32,105,110, - 116,111,32,98,121,116,101,99,111,100,101,32,102,111,114,32, - 119,114,105,116,105,110,103,32,111,117,116,32,116,111,32,97, - 32,98,121,116,101,45,99,111,109,112,105,108,101,100,10,32, - 32,32,32,102,105,108,101,46,41,6,218,9,98,121,116,101, - 97,114,114,97,121,114,137,0,0,0,218,6,101,120,116,101, - 110,100,114,19,0,0,0,114,144,0,0,0,90,5,100,117, - 109,112,115,41,4,114,148,0,0,0,114,135,0,0,0,114, - 142,0,0,0,114,55,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,17,95,99,111,100,101,95, - 116,111,95,98,121,116,101,99,111,100,101,238,1,0,0,115, - 10,0,0,0,0,3,12,1,19,1,19,1,22,1,114,152, - 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,89,0,0,0,100,1,0, - 100,2,0,108,0,0,125,1,0,116,1,0,106,2,0,124, - 0,0,131,1,0,106,3,0,125,2,0,124,1,0,106,4, - 0,124,2,0,131,1,0,125,3,0,116,1,0,106,5,0, - 100,2,0,100,3,0,131,2,0,125,4,0,124,4,0,106, - 6,0,124,0,0,106,6,0,124,3,0,100,1,0,25,131, - 1,0,131,1,0,83,41,4,122,121,68,101,99,111,100,101, - 32,98,121,116,101,115,32,114,101,112,114,101,115,101,110,116, - 105,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32, - 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,115, - 116,114,105,110,103,46,10,10,32,32,32,32,85,110,105,118, - 101,114,115,97,108,32,110,101,119,108,105,110,101,32,115,117, - 112,112,111,114,116,32,105,115,32,117,115,101,100,32,105,110, - 32,116,104,101,32,100,101,99,111,100,105,110,103,46,10,32, - 32,32,32,114,61,0,0,0,78,84,41,7,218,8,116,111, - 107,101,110,105,122,101,114,51,0,0,0,90,7,66,121,116, - 101,115,73,79,90,8,114,101,97,100,108,105,110,101,90,15, - 100,101,116,101,99,116,95,101,110,99,111,100,105,110,103,90, - 25,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108, - 105,110,101,68,101,99,111,100,101,114,218,6,100,101,99,111, - 100,101,41,5,218,12,115,111,117,114,99,101,95,98,121,116, - 101,115,114,153,0,0,0,90,21,115,111,117,114,99,101,95, - 98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8, - 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, - 101,95,100,101,99,111,100,101,114,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101, - 95,115,111,117,114,99,101,248,1,0,0,115,10,0,0,0, - 0,5,12,1,18,1,15,1,18,1,114,157,0,0,0,114, - 129,0,0,0,218,26,115,117,98,109,111,100,117,108,101,95, - 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, - 99,2,0,0,0,2,0,0,0,9,0,0,0,19,0,0, - 0,67,0,0,0,115,89,1,0,0,124,1,0,100,1,0, - 107,8,0,114,73,0,100,2,0,125,1,0,116,0,0,124, - 2,0,100,3,0,131,2,0,114,73,0,121,19,0,124,2, - 0,106,1,0,124,0,0,131,1,0,125,1,0,87,110,18, - 0,4,116,2,0,107,10,0,114,72,0,1,1,1,89,110, - 1,0,88,116,3,0,106,4,0,124,0,0,124,2,0,100, - 4,0,124,1,0,131,2,1,125,4,0,100,5,0,124,4, - 0,95,5,0,124,2,0,100,1,0,107,8,0,114,194,0, - 120,73,0,116,6,0,131,0,0,68,93,58,0,92,2,0, - 125,5,0,125,6,0,124,1,0,106,7,0,116,8,0,124, - 6,0,131,1,0,131,1,0,114,128,0,124,5,0,124,0, - 0,124,1,0,131,2,0,125,2,0,124,2,0,124,4,0, - 95,9,0,80,113,128,0,87,100,1,0,83,124,3,0,116, - 10,0,107,8,0,114,23,1,116,0,0,124,2,0,100,6, - 0,131,2,0,114,32,1,121,19,0,124,2,0,106,11,0, - 124,0,0,131,1,0,125,7,0,87,110,18,0,4,116,2, - 0,107,10,0,114,4,1,1,1,1,89,113,32,1,88,124, - 7,0,114,32,1,103,0,0,124,4,0,95,12,0,110,9, - 0,124,3,0,124,4,0,95,12,0,124,4,0,106,12,0, - 103,0,0,107,2,0,114,85,1,124,1,0,114,85,1,116, - 13,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, - 4,0,106,12,0,106,14,0,124,8,0,131,1,0,1,124, - 4,0,83,41,8,97,61,1,0,0,82,101,116,117,114,110, - 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, - 97,115,101,100,32,111,110,32,97,32,102,105,108,101,32,108, - 111,99,97,116,105,111,110,46,10,10,32,32,32,32,84,111, - 32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116, - 104,101,32,109,111,100,117,108,101,32,105,115,32,97,32,112, - 97,99,107,97,103,101,44,32,115,101,116,10,32,32,32,32, - 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, - 95,108,111,99,97,116,105,111,110,115,32,116,111,32,97,32, - 108,105,115,116,32,111,102,32,100,105,114,101,99,116,111,114, - 121,32,112,97,116,104,115,46,32,32,65,110,10,32,32,32, - 32,101,109,112,116,121,32,108,105,115,116,32,105,115,32,115, - 117,102,102,105,99,105,101,110,116,44,32,116,104,111,117,103, - 104,32,105,116,115,32,110,111,116,32,111,116,104,101,114,119, - 105,115,101,32,117,115,101,102,117,108,32,116,111,32,116,104, - 101,10,32,32,32,32,105,109,112,111,114,116,32,115,121,115, - 116,101,109,46,10,10,32,32,32,32,84,104,101,32,108,111, - 97,100,101,114,32,109,117,115,116,32,116,97,107,101,32,97, - 32,115,112,101,99,32,97,115,32,105,116,115,32,111,110,108, - 121,32,95,95,105,110,105,116,95,95,40,41,32,97,114,103, - 46,10,10,32,32,32,32,78,122,9,60,117,110,107,110,111, - 119,110,62,218,12,103,101,116,95,102,105,108,101,110,97,109, - 101,218,6,111,114,105,103,105,110,84,218,10,105,115,95,112, - 97,99,107,97,103,101,114,61,0,0,0,41,15,114,117,0, - 0,0,114,159,0,0,0,114,109,0,0,0,114,123,0,0, - 0,218,10,77,111,100,117,108,101,83,112,101,99,90,13,95, - 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103, - 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108, - 101,95,108,111,97,100,101,114,115,114,94,0,0,0,114,95, - 0,0,0,114,129,0,0,0,218,9,95,80,79,80,85,76, - 65,84,69,114,161,0,0,0,114,158,0,0,0,114,40,0, - 0,0,218,6,97,112,112,101,110,100,41,9,114,108,0,0, - 0,90,8,108,111,99,97,116,105,111,110,114,129,0,0,0, - 114,158,0,0,0,218,4,115,112,101,99,218,12,108,111,97, - 100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,105, - 120,101,115,114,161,0,0,0,90,7,100,105,114,110,97,109, - 101,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,101, - 95,108,111,99,97,116,105,111,110,9,2,0,0,115,60,0, - 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, - 5,8,24,1,9,3,12,1,22,1,21,1,15,1,9,1, - 5,2,4,3,12,2,15,1,3,1,19,1,13,1,5,2, - 6,1,12,2,9,1,15,1,6,1,16,1,16,2,114,169, - 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,64,0,0,0,115,121,0,0,0,101,0,0, - 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, - 2,0,90,4,0,100,3,0,90,5,0,100,4,0,90,6, - 0,101,7,0,100,5,0,100,6,0,132,0,0,131,1,0, - 90,8,0,101,7,0,100,7,0,100,8,0,132,0,0,131, - 1,0,90,9,0,101,7,0,100,9,0,100,9,0,100,10, - 0,100,11,0,132,2,0,131,1,0,90,10,0,101,7,0, - 100,9,0,100,12,0,100,13,0,132,1,0,131,1,0,90, - 11,0,100,9,0,83,41,14,218,21,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,122, - 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, - 114,32,102,111,114,32,109,111,100,117,108,101,115,32,100,101, - 99,108,97,114,101,100,32,105,110,32,116,104,101,32,87,105, - 110,100,111,119,115,32,114,101,103,105,115,116,114,121,46,122, - 59,83,111,102,116,119,97,114,101,92,80,121,116,104,111,110, - 92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,115, - 95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,101, - 115,92,123,102,117,108,108,110,97,109,101,125,122,65,83,111, - 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, - 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, - 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, - 102,117,108,108,110,97,109,101,125,92,68,101,98,117,103,70, - 99,2,0,0,0,0,0,0,0,2,0,0,0,11,0,0, - 0,67,0,0,0,115,67,0,0,0,121,23,0,116,0,0, - 106,1,0,116,0,0,106,2,0,124,1,0,131,2,0,83, - 87,110,37,0,4,116,3,0,107,10,0,114,62,0,1,1, - 1,116,0,0,106,1,0,116,0,0,106,4,0,124,1,0, - 131,2,0,83,89,110,1,0,88,100,0,0,83,41,1,78, - 41,5,218,7,95,119,105,110,114,101,103,90,7,79,112,101, - 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69, - 78,84,95,85,83,69,82,114,42,0,0,0,90,18,72,75, - 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, - 41,2,218,3,99,108,115,114,5,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,6,0,0,0,218,14,95,111,112, - 101,110,95,114,101,103,105,115,116,114,121,87,2,0,0,115, - 8,0,0,0,0,2,3,1,23,1,13,1,122,36,87,105, + 95,115,104,105,109,156,1,0,0,115,10,0,0,0,0,10, + 14,1,16,1,4,1,22,1,114,127,0,0,0,99,4,0, + 0,0,0,0,0,0,11,0,0,0,22,0,0,0,67,0, + 0,0,115,136,1,0,0,105,0,125,4,124,2,100,1,107, + 9,114,22,124,2,124,4,100,2,60,0,110,4,100,3,125, + 2,124,3,100,1,107,9,114,42,124,3,124,4,100,4,60, + 0,124,0,100,1,100,5,133,2,25,0,125,5,124,0,100, + 5,100,6,133,2,25,0,125,6,124,0,100,6,100,7,133, + 2,25,0,125,7,124,5,116,0,107,3,114,124,100,8,106, + 1,124,2,124,5,131,2,125,8,116,2,106,3,100,9,124, + 8,131,2,1,0,116,4,124,8,102,1,124,4,142,1,130, + 1,110,86,116,5,124,6,131,1,100,5,107,3,114,168,100, + 10,106,1,124,2,131,1,125,8,116,2,106,3,100,9,124, + 8,131,2,1,0,116,6,124,8,131,1,130,1,110,42,116, + 5,124,7,131,1,100,5,107,3,114,210,100,11,106,1,124, + 2,131,1,125,8,116,2,106,3,100,9,124,8,131,2,1, + 0,116,6,124,8,131,1,130,1,124,1,100,1,107,9,144, + 1,114,124,121,16,116,7,124,1,100,12,25,0,131,1,125, + 9,87,0,110,22,4,0,116,8,107,10,144,1,114,2,1, + 0,1,0,1,0,89,0,110,50,88,0,116,9,124,6,131, + 1,124,9,107,3,144,1,114,52,100,13,106,1,124,2,131, + 1,125,8,116,2,106,3,100,9,124,8,131,2,1,0,116, + 4,124,8,102,1,124,4,142,1,130,1,121,16,124,1,100, + 14,25,0,100,15,64,0,125,10,87,0,110,22,4,0,116, + 8,107,10,144,1,114,90,1,0,1,0,1,0,89,0,110, + 34,88,0,116,9,124,7,131,1,124,10,107,3,144,1,114, + 124,116,4,100,13,106,1,124,2,131,1,102,1,124,4,142, + 1,130,1,124,0,100,7,100,1,133,2,25,0,83,0,41, + 16,97,122,1,0,0,86,97,108,105,100,97,116,101,32,116, + 104,101,32,104,101,97,100,101,114,32,111,102,32,116,104,101, + 32,112,97,115,115,101,100,45,105,110,32,98,121,116,101,99, + 111,100,101,32,97,103,97,105,110,115,116,32,115,111,117,114, + 99,101,95,115,116,97,116,115,32,40,105,102,10,32,32,32, + 32,103,105,118,101,110,41,32,97,110,100,32,114,101,116,117, + 114,110,105,110,103,32,116,104,101,32,98,121,116,101,99,111, + 100,101,32,116,104,97,116,32,99,97,110,32,98,101,32,99, + 111,109,112,105,108,101,100,32,98,121,32,99,111,109,112,105, + 108,101,40,41,46,10,10,32,32,32,32,65,108,108,32,111, + 116,104,101,114,32,97,114,103,117,109,101,110,116,115,32,97, + 114,101,32,117,115,101,100,32,116,111,32,101,110,104,97,110, + 99,101,32,101,114,114,111,114,32,114,101,112,111,114,116,105, + 110,103,46,10,10,32,32,32,32,73,109,112,111,114,116,69, + 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119, + 104,101,110,32,116,104,101,32,109,97,103,105,99,32,110,117, + 109,98,101,114,32,105,115,32,105,110,99,111,114,114,101,99, + 116,32,111,114,32,116,104,101,32,98,121,116,101,99,111,100, + 101,32,105,115,10,32,32,32,32,102,111,117,110,100,32,116, + 111,32,98,101,32,115,116,97,108,101,46,32,69,79,70,69, + 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119, + 104,101,110,32,116,104,101,32,100,97,116,97,32,105,115,32, + 102,111,117,110,100,32,116,111,32,98,101,10,32,32,32,32, + 116,114,117,110,99,97,116,101,100,46,10,10,32,32,32,32, + 78,114,102,0,0,0,122,10,60,98,121,116,101,99,111,100, + 101,62,114,37,0,0,0,114,14,0,0,0,233,8,0,0, + 0,233,12,0,0,0,122,30,98,97,100,32,109,97,103,105, + 99,32,110,117,109,98,101,114,32,105,110,32,123,33,114,125, + 58,32,123,33,114,125,122,2,123,125,122,43,114,101,97,99, + 104,101,100,32,69,79,70,32,119,104,105,108,101,32,114,101, + 97,100,105,110,103,32,116,105,109,101,115,116,97,109,112,32, + 105,110,32,123,33,114,125,122,48,114,101,97,99,104,101,100, + 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, + 110,103,32,115,105,122,101,32,111,102,32,115,111,117,114,99, + 101,32,105,110,32,123,33,114,125,218,5,109,116,105,109,101, + 122,26,98,121,116,101,99,111,100,101,32,105,115,32,115,116, + 97,108,101,32,102,111,114,32,123,33,114,125,218,4,115,105, + 122,101,108,3,0,0,0,255,127,255,127,3,0,41,10,218, + 12,77,65,71,73,67,95,78,85,77,66,69,82,114,50,0, + 0,0,114,118,0,0,0,218,16,95,118,101,114,98,111,115, + 101,95,109,101,115,115,97,103,101,114,103,0,0,0,114,33, + 0,0,0,218,8,69,79,70,69,114,114,111,114,114,16,0, + 0,0,218,8,75,101,121,69,114,114,111,114,114,21,0,0, + 0,41,11,114,56,0,0,0,218,12,115,111,117,114,99,101, + 95,115,116,97,116,115,114,102,0,0,0,114,37,0,0,0, + 90,11,101,120,99,95,100,101,116,97,105,108,115,90,5,109, + 97,103,105,99,90,13,114,97,119,95,116,105,109,101,115,116, + 97,109,112,90,8,114,97,119,95,115,105,122,101,114,79,0, + 0,0,218,12,115,111,117,114,99,101,95,109,116,105,109,101, + 218,11,115,111,117,114,99,101,95,115,105,122,101,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,25,95,118, + 97,108,105,100,97,116,101,95,98,121,116,101,99,111,100,101, + 95,104,101,97,100,101,114,173,1,0,0,115,76,0,0,0, + 0,11,4,1,8,1,10,3,4,1,8,1,8,1,12,1, + 12,1,12,1,8,1,12,1,12,1,14,1,12,1,10,1, + 12,1,10,1,12,1,10,1,12,1,8,1,10,1,2,1, + 16,1,16,1,6,2,14,1,10,1,12,1,12,1,2,1, + 16,1,16,1,6,2,14,1,12,1,6,1,114,139,0,0, + 0,99,4,0,0,0,0,0,0,0,5,0,0,0,5,0, + 0,0,67,0,0,0,115,82,0,0,0,116,0,106,1,124, + 0,131,1,125,4,116,2,124,4,116,3,131,2,114,58,116, + 4,106,5,100,1,124,2,131,2,1,0,124,3,100,2,107, + 9,114,52,116,6,106,7,124,4,124,3,131,2,1,0,124, + 4,83,0,110,20,116,8,100,3,106,9,124,2,131,1,124, + 1,124,2,100,4,141,3,130,1,100,2,83,0,41,5,122, + 60,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, + 101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121, + 32,95,118,97,108,105,100,97,116,101,95,98,121,116,101,99, + 111,100,101,95,104,101,97,100,101,114,40,41,46,122,21,99, + 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, + 123,33,114,125,78,122,23,78,111,110,45,99,111,100,101,32, + 111,98,106,101,99,116,32,105,110,32,123,33,114,125,41,2, + 114,102,0,0,0,114,37,0,0,0,41,10,218,7,109,97, + 114,115,104,97,108,90,5,108,111,97,100,115,218,10,105,115, + 105,110,115,116,97,110,99,101,218,10,95,99,111,100,101,95, + 116,121,112,101,114,118,0,0,0,114,133,0,0,0,218,4, + 95,105,109,112,90,16,95,102,105,120,95,99,111,95,102,105, + 108,101,110,97,109,101,114,103,0,0,0,114,50,0,0,0, + 41,5,114,56,0,0,0,114,102,0,0,0,114,93,0,0, + 0,114,94,0,0,0,218,4,99,111,100,101,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,17,95,99,111, + 109,112,105,108,101,95,98,121,116,101,99,111,100,101,228,1, + 0,0,115,16,0,0,0,0,2,10,1,10,1,12,1,8, + 1,12,1,6,2,10,1,114,145,0,0,0,114,62,0,0, + 0,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,67,0,0,0,115,56,0,0,0,116,0,116,1,131, + 1,125,3,124,3,106,2,116,3,124,1,131,1,131,1,1, + 0,124,3,106,2,116,3,124,2,131,1,131,1,1,0,124, + 3,106,2,116,4,106,5,124,0,131,1,131,1,1,0,124, + 3,83,0,41,1,122,80,67,111,109,112,105,108,101,32,97, + 32,99,111,100,101,32,111,98,106,101,99,116,32,105,110,116, + 111,32,98,121,116,101,99,111,100,101,32,102,111,114,32,119, + 114,105,116,105,110,103,32,111,117,116,32,116,111,32,97,32, + 98,121,116,101,45,99,111,109,112,105,108,101,100,10,32,32, + 32,32,102,105,108,101,46,41,6,218,9,98,121,116,101,97, + 114,114,97,121,114,132,0,0,0,218,6,101,120,116,101,110, + 100,114,19,0,0,0,114,140,0,0,0,90,5,100,117,109, + 112,115,41,4,114,144,0,0,0,114,130,0,0,0,114,138, + 0,0,0,114,56,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,17,95,99,111,100,101,95,116, + 111,95,98,121,116,101,99,111,100,101,240,1,0,0,115,10, + 0,0,0,0,3,8,1,14,1,14,1,16,1,114,148,0, + 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,4, + 0,0,0,67,0,0,0,115,62,0,0,0,100,1,100,2, + 108,0,125,1,116,1,106,2,124,0,131,1,106,3,125,2, + 124,1,106,4,124,2,131,1,125,3,116,1,106,5,100,2, + 100,3,131,2,125,4,124,4,106,6,124,0,106,6,124,3, + 100,1,25,0,131,1,131,1,83,0,41,4,122,121,68,101, + 99,111,100,101,32,98,121,116,101,115,32,114,101,112,114,101, + 115,101,110,116,105,110,103,32,115,111,117,114,99,101,32,99, + 111,100,101,32,97,110,100,32,114,101,116,117,114,110,32,116, + 104,101,32,115,116,114,105,110,103,46,10,10,32,32,32,32, + 85,110,105,118,101,114,115,97,108,32,110,101,119,108,105,110, + 101,32,115,117,112,112,111,114,116,32,105,115,32,117,115,101, + 100,32,105,110,32,116,104,101,32,100,101,99,111,100,105,110, + 103,46,10,32,32,32,32,114,62,0,0,0,78,84,41,7, + 218,8,116,111,107,101,110,105,122,101,114,52,0,0,0,90, + 7,66,121,116,101,115,73,79,90,8,114,101,97,100,108,105, + 110,101,90,15,100,101,116,101,99,116,95,101,110,99,111,100, + 105,110,103,90,25,73,110,99,114,101,109,101,110,116,97,108, + 78,101,119,108,105,110,101,68,101,99,111,100,101,114,218,6, + 100,101,99,111,100,101,41,5,218,12,115,111,117,114,99,101, + 95,98,121,116,101,115,114,149,0,0,0,90,21,115,111,117, + 114,99,101,95,98,121,116,101,115,95,114,101,97,100,108,105, + 110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101, + 119,108,105,110,101,95,100,101,99,111,100,101,114,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,13,100,101, + 99,111,100,101,95,115,111,117,114,99,101,250,1,0,0,115, + 10,0,0,0,0,5,8,1,12,1,10,1,12,1,114,153, + 0,0,0,41,2,114,124,0,0,0,218,26,115,117,98,109, + 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, + 97,116,105,111,110,115,99,2,0,0,0,2,0,0,0,9, + 0,0,0,19,0,0,0,67,0,0,0,115,18,1,0,0, + 124,1,100,1,107,8,114,60,100,2,125,1,116,0,124,2, + 100,3,131,2,114,70,121,14,124,2,106,1,124,0,131,1, + 125,1,87,0,113,70,4,0,116,2,107,10,114,56,1,0, + 1,0,1,0,89,0,113,70,88,0,110,10,116,3,106,4, + 124,1,131,1,125,1,116,5,106,6,124,0,124,2,124,1, + 100,4,141,3,125,4,100,5,124,4,95,7,124,2,100,1, + 107,8,114,156,120,54,116,8,131,0,68,0,93,40,92,2, + 125,5,125,6,124,1,106,9,116,10,124,6,131,1,131,1, + 114,108,124,5,124,0,124,1,131,2,125,2,124,2,124,4, + 95,11,80,0,113,108,87,0,100,1,83,0,124,3,116,12, + 107,8,114,222,116,0,124,2,100,6,131,2,114,228,121,14, + 124,2,106,13,124,0,131,1,125,7,87,0,110,20,4,0, + 116,2,107,10,114,208,1,0,1,0,1,0,89,0,113,228, + 88,0,124,7,114,228,103,0,124,4,95,14,110,6,124,3, + 124,4,95,14,124,4,106,14,103,0,107,2,144,1,114,14, + 124,1,144,1,114,14,116,15,124,1,131,1,100,7,25,0, + 125,8,124,4,106,14,106,16,124,8,131,1,1,0,124,4, + 83,0,41,8,97,61,1,0,0,82,101,116,117,114,110,32, + 97,32,109,111,100,117,108,101,32,115,112,101,99,32,98,97, + 115,101,100,32,111,110,32,97,32,102,105,108,101,32,108,111, + 99,97,116,105,111,110,46,10,10,32,32,32,32,84,111,32, + 105,110,100,105,99,97,116,101,32,116,104,97,116,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,97,32,112,97, + 99,107,97,103,101,44,32,115,101,116,10,32,32,32,32,115, + 117,98,109,111,100,117,108,101,95,115,101,97,114,99,104,95, + 108,111,99,97,116,105,111,110,115,32,116,111,32,97,32,108, + 105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121, + 32,112,97,116,104,115,46,32,32,65,110,10,32,32,32,32, + 101,109,112,116,121,32,108,105,115,116,32,105,115,32,115,117, + 102,102,105,99,105,101,110,116,44,32,116,104,111,117,103,104, + 32,105,116,115,32,110,111,116,32,111,116,104,101,114,119,105, + 115,101,32,117,115,101,102,117,108,32,116,111,32,116,104,101, + 10,32,32,32,32,105,109,112,111,114,116,32,115,121,115,116, + 101,109,46,10,10,32,32,32,32,84,104,101,32,108,111,97, + 100,101,114,32,109,117,115,116,32,116,97,107,101,32,97,32, + 115,112,101,99,32,97,115,32,105,116,115,32,111,110,108,121, + 32,95,95,105,110,105,116,95,95,40,41,32,97,114,103,46, + 10,10,32,32,32,32,78,122,9,60,117,110,107,110,111,119, + 110,62,218,12,103,101,116,95,102,105,108,101,110,97,109,101, + 41,1,218,6,111,114,105,103,105,110,84,218,10,105,115,95, + 112,97,99,107,97,103,101,114,62,0,0,0,41,17,114,112, + 0,0,0,114,155,0,0,0,114,103,0,0,0,114,3,0, + 0,0,114,67,0,0,0,114,118,0,0,0,218,10,77,111, + 100,117,108,101,83,112,101,99,90,13,95,115,101,116,95,102, + 105,108,101,97,116,116,114,218,27,95,103,101,116,95,115,117, + 112,112,111,114,116,101,100,95,102,105,108,101,95,108,111,97, + 100,101,114,115,114,96,0,0,0,114,97,0,0,0,114,124, + 0,0,0,218,9,95,80,79,80,85,76,65,84,69,114,157, + 0,0,0,114,154,0,0,0,114,40,0,0,0,218,6,97, + 112,112,101,110,100,41,9,114,102,0,0,0,90,8,108,111, + 99,97,116,105,111,110,114,124,0,0,0,114,154,0,0,0, + 218,4,115,112,101,99,218,12,108,111,97,100,101,114,95,99, + 108,97,115,115,218,8,115,117,102,102,105,120,101,115,114,157, + 0,0,0,90,7,100,105,114,110,97,109,101,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,23,115,112,101, + 99,95,102,114,111,109,95,102,105,108,101,95,108,111,99,97, + 116,105,111,110,11,2,0,0,115,62,0,0,0,0,12,8, + 4,4,1,10,2,2,1,14,1,14,1,8,2,10,8,16, + 1,6,3,8,1,16,1,14,1,10,1,6,1,6,2,4, + 3,8,2,10,1,2,1,14,1,14,1,6,2,4,1,8, + 2,6,1,12,1,6,1,12,1,12,2,114,165,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,80,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,90,4,100,3,90,5,100,4, + 90,6,101,7,100,5,100,6,132,0,131,1,90,8,101,7, + 100,7,100,8,132,0,131,1,90,9,101,7,100,14,100,10, + 100,11,132,1,131,1,90,10,101,7,100,15,100,12,100,13, + 132,1,131,1,90,11,100,9,83,0,41,16,218,21,87,105, 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, - 114,121,99,2,0,0,0,0,0,0,0,6,0,0,0,16, - 0,0,0,67,0,0,0,115,143,0,0,0,124,0,0,106, - 0,0,114,21,0,124,0,0,106,1,0,125,2,0,110,9, - 0,124,0,0,106,2,0,125,2,0,124,2,0,106,3,0, - 100,1,0,124,1,0,100,2,0,116,4,0,106,5,0,100, - 0,0,100,3,0,133,2,0,25,131,0,2,125,3,0,121, - 47,0,124,0,0,106,6,0,124,3,0,131,1,0,143,25, - 0,125,4,0,116,7,0,106,8,0,124,4,0,100,4,0, - 131,2,0,125,5,0,87,100,0,0,81,82,88,87,110,22, - 0,4,116,9,0,107,10,0,114,138,0,1,1,1,100,0, - 0,83,89,110,1,0,88,124,5,0,83,41,5,78,114,128, - 0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,110, - 114,82,0,0,0,114,32,0,0,0,41,10,218,11,68,69, - 66,85,71,95,66,85,73,76,68,218,18,82,69,71,73,83, - 84,82,89,95,75,69,89,95,68,69,66,85,71,218,12,82, - 69,71,73,83,84,82,89,95,75,69,89,114,49,0,0,0, - 114,8,0,0,0,218,7,118,101,114,115,105,111,110,114,173, - 0,0,0,114,171,0,0,0,90,10,81,117,101,114,121,86, - 97,108,117,101,114,42,0,0,0,41,6,114,172,0,0,0, - 114,128,0,0,0,90,12,114,101,103,105,115,116,114,121,95, - 107,101,121,114,5,0,0,0,90,4,104,107,101,121,218,8, - 102,105,108,101,112,97,116,104,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,218,16,95,115,101,97,114,99,104, - 95,114,101,103,105,115,116,114,121,94,2,0,0,115,22,0, - 0,0,0,2,9,1,12,2,9,1,15,1,22,1,3,1, - 18,1,29,1,13,1,9,1,122,38,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, - 78,99,4,0,0,0,0,0,0,0,8,0,0,0,14,0, - 0,0,67,0,0,0,115,158,0,0,0,124,0,0,106,0, - 0,124,1,0,131,1,0,125,4,0,124,4,0,100,0,0, - 107,8,0,114,31,0,100,0,0,83,121,14,0,116,1,0, - 124,4,0,131,1,0,1,87,110,22,0,4,116,2,0,107, - 10,0,114,69,0,1,1,1,100,0,0,83,89,110,1,0, - 88,120,81,0,116,3,0,131,0,0,68,93,70,0,92,2, - 0,125,5,0,125,6,0,124,4,0,106,4,0,116,5,0, - 124,6,0,131,1,0,131,1,0,114,80,0,116,6,0,106, - 7,0,124,1,0,124,5,0,124,1,0,124,4,0,131,2, - 0,100,1,0,124,4,0,131,2,1,125,7,0,124,7,0, - 83,113,80,0,87,100,0,0,83,41,2,78,114,160,0,0, - 0,41,8,114,179,0,0,0,114,41,0,0,0,114,42,0, - 0,0,114,163,0,0,0,114,94,0,0,0,114,95,0,0, - 0,114,123,0,0,0,218,16,115,112,101,99,95,102,114,111, - 109,95,108,111,97,100,101,114,41,8,114,172,0,0,0,114, - 128,0,0,0,114,37,0,0,0,218,6,116,97,114,103,101, - 116,114,178,0,0,0,114,129,0,0,0,114,168,0,0,0, - 114,166,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 6,0,0,0,218,9,102,105,110,100,95,115,112,101,99,109, - 2,0,0,115,26,0,0,0,0,2,15,1,12,1,4,1, - 3,1,14,1,13,1,9,1,22,1,21,1,9,1,15,1, - 9,1,122,31,87,105,110,100,111,119,115,82,101,103,105,115, - 116,114,121,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,3,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,67,0,0,0,115,45,0,0,0,124,0,0, - 106,0,0,124,1,0,124,2,0,131,2,0,125,3,0,124, - 3,0,100,1,0,107,9,0,114,37,0,124,3,0,106,1, - 0,83,100,1,0,83,100,1,0,83,41,2,122,108,70,105, - 110,100,32,109,111,100,117,108,101,32,110,97,109,101,100,32, - 105,110,32,116,104,101,32,114,101,103,105,115,116,114,121,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,32,32,32,32,78,41,2,114,182,0, - 0,0,114,129,0,0,0,41,4,114,172,0,0,0,114,128, - 0,0,0,114,37,0,0,0,114,166,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,6,0,0,0,218,11,102,105, - 110,100,95,109,111,100,117,108,101,125,2,0,0,115,8,0, - 0,0,0,7,18,1,12,1,7,2,122,33,87,105,110,100, + 100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,102, + 105,110,100,101,114,32,102,111,114,32,109,111,100,117,108,101, + 115,32,100,101,99,108,97,114,101,100,32,105,110,32,116,104, + 101,32,87,105,110,100,111,119,115,32,114,101,103,105,115,116, + 114,121,46,122,59,83,111,102,116,119,97,114,101,92,80,121, + 116,104,111,110,92,80,121,116,104,111,110,67,111,114,101,92, + 123,115,121,115,95,118,101,114,115,105,111,110,125,92,77,111, + 100,117,108,101,115,92,123,102,117,108,108,110,97,109,101,125, + 122,65,83,111,102,116,119,97,114,101,92,80,121,116,104,111, + 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, + 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, + 101,115,92,123,102,117,108,108,110,97,109,101,125,92,68,101, + 98,117,103,70,99,2,0,0,0,0,0,0,0,2,0,0, + 0,11,0,0,0,67,0,0,0,115,50,0,0,0,121,14, + 116,0,106,1,116,0,106,2,124,1,131,2,83,0,4,0, + 116,3,107,10,114,44,1,0,1,0,1,0,116,0,106,1, + 116,0,106,4,124,1,131,2,83,0,88,0,100,0,83,0, + 41,1,78,41,5,218,7,95,119,105,110,114,101,103,90,7, + 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, + 82,82,69,78,84,95,85,83,69,82,114,42,0,0,0,90, + 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, + 73,78,69,41,2,218,3,99,108,115,114,5,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,14, + 95,111,112,101,110,95,114,101,103,105,115,116,114,121,91,2, + 0,0,115,8,0,0,0,0,2,2,1,14,1,14,1,122, + 36,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, + 70,105,110,100,101,114,46,95,111,112,101,110,95,114,101,103, + 105,115,116,114,121,99,2,0,0,0,0,0,0,0,6,0, + 0,0,16,0,0,0,67,0,0,0,115,112,0,0,0,124, + 0,106,0,114,14,124,0,106,1,125,2,110,6,124,0,106, + 2,125,2,124,2,106,3,124,1,100,1,116,4,106,5,100, + 0,100,2,133,2,25,0,22,0,100,3,141,2,125,3,121, + 38,124,0,106,6,124,3,131,1,143,18,125,4,116,7,106, + 8,124,4,100,4,131,2,125,5,87,0,100,0,81,0,82, + 0,88,0,87,0,110,20,4,0,116,9,107,10,114,106,1, + 0,1,0,1,0,100,0,83,0,88,0,124,5,83,0,41, + 5,78,122,5,37,100,46,37,100,114,59,0,0,0,41,2, + 114,123,0,0,0,90,11,115,121,115,95,118,101,114,115,105, + 111,110,114,32,0,0,0,41,10,218,11,68,69,66,85,71, + 95,66,85,73,76,68,218,18,82,69,71,73,83,84,82,89, + 95,75,69,89,95,68,69,66,85,71,218,12,82,69,71,73, + 83,84,82,89,95,75,69,89,114,50,0,0,0,114,8,0, + 0,0,218,12,118,101,114,115,105,111,110,95,105,110,102,111, + 114,169,0,0,0,114,167,0,0,0,90,10,81,117,101,114, + 121,86,97,108,117,101,114,42,0,0,0,41,6,114,168,0, + 0,0,114,123,0,0,0,90,12,114,101,103,105,115,116,114, + 121,95,107,101,121,114,5,0,0,0,90,4,104,107,101,121, + 218,8,102,105,108,101,112,97,116,104,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,16,95,115,101,97,114, + 99,104,95,114,101,103,105,115,116,114,121,98,2,0,0,115, + 22,0,0,0,0,2,6,1,8,2,6,1,6,1,22,1, + 2,1,12,1,26,1,14,1,6,1,122,38,87,105,110,100, 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, - 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, - 114,0,0,0,114,113,0,0,0,114,115,0,0,0,114,116, - 0,0,0,114,176,0,0,0,114,175,0,0,0,114,174,0, - 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, - 173,0,0,0,114,179,0,0,0,114,182,0,0,0,114,183, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,114,170,0,0,0,75,2,0,0, - 115,20,0,0,0,12,2,6,3,6,3,6,2,6,2,18, - 7,18,15,3,1,21,15,3,1,114,170,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, - 0,0,0,115,70,0,0,0,101,0,0,90,1,0,100,0, - 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, - 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, - 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, - 0,100,9,0,132,0,0,90,7,0,100,10,0,83,41,11, - 218,13,95,76,111,97,100,101,114,66,97,115,105,99,115,122, - 83,66,97,115,101,32,99,108,97,115,115,32,111,102,32,99, - 111,109,109,111,110,32,99,111,100,101,32,110,101,101,100,101, - 100,32,98,121,32,98,111,116,104,32,83,111,117,114,99,101, - 76,111,97,100,101,114,32,97,110,100,10,32,32,32,32,83, - 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, - 100,101,114,46,99,2,0,0,0,0,0,0,0,5,0,0, - 0,3,0,0,0,67,0,0,0,115,88,0,0,0,116,0, - 0,124,0,0,106,1,0,124,1,0,131,1,0,131,1,0, - 100,1,0,25,125,2,0,124,2,0,106,2,0,100,2,0, - 100,1,0,131,2,0,100,3,0,25,125,3,0,124,1,0, - 106,3,0,100,2,0,131,1,0,100,4,0,25,125,4,0, - 124,3,0,100,5,0,107,2,0,111,87,0,124,4,0,100, - 5,0,107,3,0,83,41,6,122,141,67,111,110,99,114,101, - 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, - 101,114,46,105,115,95,112,97,99,107,97,103,101,32,98,121, - 32,99,104,101,99,107,105,110,103,32,105,102,10,32,32,32, - 32,32,32,32,32,116,104,101,32,112,97,116,104,32,114,101, - 116,117,114,110,101,100,32,98,121,32,103,101,116,95,102,105, - 108,101,110,97,109,101,32,104,97,115,32,97,32,102,105,108, - 101,110,97,109,101,32,111,102,32,39,95,95,105,110,105,116, - 95,95,46,112,121,39,46,114,31,0,0,0,114,60,0,0, - 0,114,61,0,0,0,114,58,0,0,0,218,8,95,95,105, - 110,105,116,95,95,41,4,114,40,0,0,0,114,159,0,0, - 0,114,36,0,0,0,114,34,0,0,0,41,5,114,110,0, - 0,0,114,128,0,0,0,114,96,0,0,0,90,13,102,105, - 108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105, - 108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,161,0,0,0,144,2,0,0,115,8, - 0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111, - 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, - 99,107,97,103,101,99,2,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, - 1,0,83,41,2,122,42,85,115,101,32,100,101,102,97,117, - 108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114, - 32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110, - 46,78,114,4,0,0,0,41,2,114,110,0,0,0,114,166, + 114,46,95,115,101,97,114,99,104,95,114,101,103,105,115,116, + 114,121,78,99,4,0,0,0,0,0,0,0,8,0,0,0, + 14,0,0,0,67,0,0,0,115,120,0,0,0,124,0,106, + 0,124,1,131,1,125,4,124,4,100,0,107,8,114,22,100, + 0,83,0,121,12,116,1,124,4,131,1,1,0,87,0,110, + 20,4,0,116,2,107,10,114,54,1,0,1,0,1,0,100, + 0,83,0,88,0,120,58,116,3,131,0,68,0,93,48,92, + 2,125,5,125,6,124,4,106,4,116,5,124,6,131,1,131, + 1,114,64,116,6,106,7,124,1,124,5,124,1,124,4,131, + 2,124,4,100,1,141,3,125,7,124,7,83,0,113,64,87, + 0,100,0,83,0,41,2,78,41,1,114,156,0,0,0,41, + 8,114,175,0,0,0,114,41,0,0,0,114,42,0,0,0, + 114,159,0,0,0,114,96,0,0,0,114,97,0,0,0,114, + 118,0,0,0,218,16,115,112,101,99,95,102,114,111,109,95, + 108,111,97,100,101,114,41,8,114,168,0,0,0,114,123,0, + 0,0,114,37,0,0,0,218,6,116,97,114,103,101,116,114, + 174,0,0,0,114,124,0,0,0,114,164,0,0,0,114,162, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108, - 101,152,2,0,0,115,0,0,0,0,122,27,95,76,111,97, - 100,101,114,66,97,115,105,99,115,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, - 3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0, - 0,124,0,0,106,0,0,124,1,0,106,1,0,131,1,0, - 125,2,0,124,2,0,100,1,0,107,8,0,114,54,0,116, - 2,0,100,2,0,106,3,0,124,1,0,106,1,0,131,1, - 0,131,1,0,130,1,0,116,4,0,106,5,0,116,6,0, - 124,2,0,124,1,0,106,7,0,131,3,0,1,100,1,0, - 83,41,3,122,19,69,120,101,99,117,116,101,32,116,104,101, - 32,109,111,100,117,108,101,46,78,122,52,99,97,110,110,111, - 116,32,108,111,97,100,32,109,111,100,117,108,101,32,123,33, - 114,125,32,119,104,101,110,32,103,101,116,95,99,111,100,101, - 40,41,32,114,101,116,117,114,110,115,32,78,111,110,101,41, - 8,218,8,103,101,116,95,99,111,100,101,114,114,0,0,0, - 114,109,0,0,0,114,49,0,0,0,114,123,0,0,0,218, - 25,95,99,97,108,108,95,119,105,116,104,95,102,114,97,109, - 101,115,95,114,101,109,111,118,101,100,218,4,101,120,101,99, - 114,120,0,0,0,41,3,114,110,0,0,0,218,6,109,111, - 100,117,108,101,114,148,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,11,101,120,101,99,95,109, - 111,100,117,108,101,155,2,0,0,115,10,0,0,0,0,2, - 18,1,12,1,9,1,15,1,122,25,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,0, - 106,1,0,124,0,0,124,1,0,131,2,0,83,41,1,78, - 41,2,114,123,0,0,0,218,17,95,108,111,97,100,95,109, - 111,100,117,108,101,95,115,104,105,109,41,2,114,110,0,0, - 0,114,128,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,218,11,108,111,97,100,95,109,111,100,117, - 108,101,163,2,0,0,115,2,0,0,0,0,1,122,25,95, - 76,111,97,100,101,114,66,97,115,105,99,115,46,108,111,97, - 100,95,109,111,100,117,108,101,78,41,8,114,114,0,0,0, - 114,113,0,0,0,114,115,0,0,0,114,116,0,0,0,114, - 161,0,0,0,114,187,0,0,0,114,192,0,0,0,114,194, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,114,185,0,0,0,139,2,0,0, - 115,10,0,0,0,12,3,6,2,12,8,12,3,12,8,114, - 185,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,64,0,0,0,115,106,0,0,0,101,0, - 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, - 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, - 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, - 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, - 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, - 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, - 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, - 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, - 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, - 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, - 116,104,97,116,32,114,101,116,117,114,110,115,32,116,104,101, - 32,109,111,100,105,102,105,99,97,116,105,111,110,32,116,105, - 109,101,32,40,97,110,32,105,110,116,41,32,102,111,114,32, - 116,104,101,10,32,32,32,32,32,32,32,32,115,112,101,99, - 105,102,105,101,100,32,112,97,116,104,44,32,119,104,101,114, - 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, - 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, - 32,73,79,69,114,114,111,114,32,119,104,101,110,32,116,104, - 101,32,112,97,116,104,32,99,97,110,110,111,116,32,98,101, - 32,104,97,110,100,108,101,100,46,10,32,32,32,32,32,32, - 32,32,78,41,1,218,7,73,79,69,114,114,111,114,41,2, - 114,110,0,0,0,114,37,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,218,10,112,97,116,104,95, - 109,116,105,109,101,169,2,0,0,115,2,0,0,0,0,6, - 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, - 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,19, - 0,0,0,100,1,0,124,0,0,106,0,0,124,1,0,131, - 1,0,105,1,0,83,41,2,97,170,1,0,0,79,112,116, - 105,111,110,97,108,32,109,101,116,104,111,100,32,114,101,116, - 117,114,110,105,110,103,32,97,32,109,101,116,97,100,97,116, - 97,32,100,105,99,116,32,102,111,114,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,112,97,116,104,10,32,32, - 32,32,32,32,32,32,116,111,32,98,121,32,116,104,101,32, - 112,97,116,104,32,40,115,116,114,41,46,10,32,32,32,32, - 32,32,32,32,80,111,115,115,105,98,108,101,32,107,101,121, - 115,58,10,32,32,32,32,32,32,32,32,45,32,39,109,116, - 105,109,101,39,32,40,109,97,110,100,97,116,111,114,121,41, - 32,105,115,32,116,104,101,32,110,117,109,101,114,105,99,32, - 116,105,109,101,115,116,97,109,112,32,111,102,32,108,97,115, - 116,32,115,111,117,114,99,101,10,32,32,32,32,32,32,32, - 32,32,32,99,111,100,101,32,109,111,100,105,102,105,99,97, - 116,105,111,110,59,10,32,32,32,32,32,32,32,32,45,32, - 39,115,105,122,101,39,32,40,111,112,116,105,111,110,97,108, - 41,32,105,115,32,116,104,101,32,115,105,122,101,32,105,110, - 32,98,121,116,101,115,32,111,102,32,116,104,101,32,115,111, - 117,114,99,101,32,99,111,100,101,46,10,10,32,32,32,32, - 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, - 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, - 111,119,115,32,116,104,101,32,108,111,97,100,101,114,32,116, - 111,32,114,101,97,100,32,98,121,116,101,99,111,100,101,32, - 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,82, - 97,105,115,101,115,32,73,79,69,114,114,111,114,32,119,104, - 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, - 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, - 32,32,32,32,32,32,32,114,135,0,0,0,41,1,114,197, - 0,0,0,41,2,114,110,0,0,0,114,37,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, - 112,97,116,104,95,115,116,97,116,115,177,2,0,0,115,2, - 0,0,0,0,11,122,23,83,111,117,114,99,101,76,111,97, - 100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,4, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,16,0,0,0,124,0,0,106,0,0,124,2, - 0,124,3,0,131,2,0,83,41,1,122,228,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, - 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, - 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, - 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, - 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, - 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, - 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, - 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, - 100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,32, - 32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,97, - 116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,32, - 111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,116, - 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, - 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, - 41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,110, - 0,0,0,114,92,0,0,0,90,10,99,97,99,104,101,95, - 112,97,116,104,114,55,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,15,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,190,2,0,0,115,2,0, - 0,0,0,8,122,28,83,111,117,114,99,101,76,111,97,100, - 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, - 100,101,99,3,0,0,0,0,0,0,0,3,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, - 41,2,122,150,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, - 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, - 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, - 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, - 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, - 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, - 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, - 46,10,32,32,32,32,32,32,32,32,78,114,4,0,0,0, - 41,3,114,110,0,0,0,114,37,0,0,0,114,55,0,0, + 0,0,218,9,102,105,110,100,95,115,112,101,99,113,2,0, + 0,115,26,0,0,0,0,2,10,1,8,1,4,1,2,1, + 12,1,14,1,6,1,16,1,14,1,6,1,8,1,8,1, + 122,31,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,67,0,0,0,115,36,0,0,0,124,0,106,0,124, + 1,124,2,131,2,125,3,124,3,100,1,107,9,114,28,124, + 3,106,1,83,0,110,4,100,1,83,0,100,1,83,0,41, + 2,122,108,70,105,110,100,32,109,111,100,117,108,101,32,110, + 97,109,101,100,32,105,110,32,116,104,101,32,114,101,103,105, + 115,116,114,121,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, + 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, + 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, + 41,2,114,178,0,0,0,114,124,0,0,0,41,4,114,168, + 0,0,0,114,123,0,0,0,114,37,0,0,0,114,162,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,218,11,102,105,110,100,95,109,111,100,117,108,101,129,2, + 0,0,115,8,0,0,0,0,7,12,1,8,1,8,2,122, + 33,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, + 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,41,2,78,78,41,1,78,41,12,114,109,0,0,0, + 114,108,0,0,0,114,110,0,0,0,114,111,0,0,0,114, + 172,0,0,0,114,171,0,0,0,114,170,0,0,0,218,11, + 99,108,97,115,115,109,101,116,104,111,100,114,169,0,0,0, + 114,175,0,0,0,114,178,0,0,0,114,179,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,166,0,0,0,79,2,0,0,115,20,0,0, + 0,8,2,4,3,4,3,4,2,4,2,12,7,12,15,2, + 1,12,15,2,1,114,166,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115, + 48,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, + 100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7, + 100,10,83,0,41,11,218,13,95,76,111,97,100,101,114,66, + 97,115,105,99,115,122,83,66,97,115,101,32,99,108,97,115, + 115,32,111,102,32,99,111,109,109,111,110,32,99,111,100,101, + 32,110,101,101,100,101,100,32,98,121,32,98,111,116,104,32, + 83,111,117,114,99,101,76,111,97,100,101,114,32,97,110,100, + 10,32,32,32,32,83,111,117,114,99,101,108,101,115,115,70, + 105,108,101,76,111,97,100,101,114,46,99,2,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,115, + 64,0,0,0,116,0,124,0,106,1,124,1,131,1,131,1, + 100,1,25,0,125,2,124,2,106,2,100,2,100,1,131,2, + 100,3,25,0,125,3,124,1,106,3,100,2,131,1,100,4, + 25,0,125,4,124,3,100,5,107,2,111,62,124,4,100,5, + 107,3,83,0,41,6,122,141,67,111,110,99,114,101,116,101, + 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, + 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, + 46,105,115,95,112,97,99,107,97,103,101,32,98,121,32,99, + 104,101,99,107,105,110,103,32,105,102,10,32,32,32,32,32, + 32,32,32,116,104,101,32,112,97,116,104,32,114,101,116,117, + 114,110,101,100,32,98,121,32,103,101,116,95,102,105,108,101, + 110,97,109,101,32,104,97,115,32,97,32,102,105,108,101,110, + 97,109,101,32,111,102,32,39,95,95,105,110,105,116,95,95, + 46,112,121,39,46,114,31,0,0,0,114,61,0,0,0,114, + 62,0,0,0,114,59,0,0,0,218,8,95,95,105,110,105, + 116,95,95,41,4,114,40,0,0,0,114,155,0,0,0,114, + 36,0,0,0,114,34,0,0,0,41,5,114,104,0,0,0, + 114,123,0,0,0,114,98,0,0,0,90,13,102,105,108,101, + 110,97,109,101,95,98,97,115,101,90,9,116,97,105,108,95, + 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,157,0,0,0,148,2,0,0,115,8,0,0, + 0,0,3,18,1,16,1,14,1,122,24,95,76,111,97,100, + 101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107, + 97,103,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, + 0,41,2,122,42,85,115,101,32,100,101,102,97,117,108,116, + 32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109, + 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, + 114,4,0,0,0,41,2,114,104,0,0,0,114,162,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,199,0,0,0,200,2,0,0,115,0,0,0,0,122,21, - 83,111,117,114,99,101,76,111,97,100,101,114,46,115,101,116, - 95,100,97,116,97,99,2,0,0,0,0,0,0,0,5,0, - 0,0,16,0,0,0,67,0,0,0,115,105,0,0,0,124, - 0,0,106,0,0,124,1,0,131,1,0,125,2,0,121,19, - 0,124,0,0,106,1,0,124,2,0,131,1,0,125,3,0, - 87,110,58,0,4,116,2,0,107,10,0,114,94,0,1,125, - 4,0,1,122,26,0,116,3,0,100,1,0,100,2,0,124, - 1,0,131,1,1,124,4,0,130,2,0,87,89,100,3,0, - 100,3,0,125,4,0,126,4,0,88,110,1,0,88,116,4, - 0,124,3,0,131,1,0,83,41,4,122,52,67,111,110,99, - 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, - 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, - 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, - 101,116,95,100,97,116,97,40,41,114,108,0,0,0,78,41, - 5,114,159,0,0,0,218,8,103,101,116,95,100,97,116,97, - 114,42,0,0,0,114,109,0,0,0,114,157,0,0,0,41, - 5,114,110,0,0,0,114,128,0,0,0,114,37,0,0,0, - 114,155,0,0,0,218,3,101,120,99,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,218,10,103,101,116,95,115, - 111,117,114,99,101,207,2,0,0,115,14,0,0,0,0,2, - 15,1,3,1,19,1,18,1,9,1,31,1,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,218,9,95,111,112,116,105,109,105,122,101, - 114,31,0,0,0,99,3,0,0,0,1,0,0,0,4,0, - 0,0,9,0,0,0,67,0,0,0,115,34,0,0,0,116, - 0,0,106,1,0,116,2,0,124,1,0,124,2,0,100,1, - 0,100,2,0,100,3,0,100,4,0,124,3,0,131,4,2, - 83,41,5,122,130,82,101,116,117,114,110,32,116,104,101,32, - 99,111,100,101,32,111,98,106,101,99,116,32,99,111,109,112, - 105,108,101,100,32,102,114,111,109,32,115,111,117,114,99,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,39, - 100,97,116,97,39,32,97,114,103,117,109,101,110,116,32,99, - 97,110,32,98,101,32,97,110,121,32,111,98,106,101,99,116, - 32,116,121,112,101,32,116,104,97,116,32,99,111,109,112,105, - 108,101,40,41,32,115,117,112,112,111,114,116,115,46,10,32, - 32,32,32,32,32,32,32,114,190,0,0,0,218,12,100,111, - 110,116,95,105,110,104,101,114,105,116,84,114,70,0,0,0, - 41,3,114,123,0,0,0,114,189,0,0,0,218,7,99,111, - 109,112,105,108,101,41,4,114,110,0,0,0,114,55,0,0, - 0,114,37,0,0,0,114,204,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,218,14,115,111,117,114, - 99,101,95,116,111,95,99,111,100,101,217,2,0,0,115,4, - 0,0,0,0,5,21,1,122,27,83,111,117,114,99,101,76, - 111,97,100,101,114,46,115,111,117,114,99,101,95,116,111,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,10,0,0, - 0,43,0,0,0,67,0,0,0,115,174,1,0,0,124,0, - 0,106,0,0,124,1,0,131,1,0,125,2,0,100,1,0, - 125,3,0,121,16,0,116,1,0,124,2,0,131,1,0,125, - 4,0,87,110,24,0,4,116,2,0,107,10,0,114,63,0, - 1,1,1,100,1,0,125,4,0,89,110,202,0,88,121,19, - 0,124,0,0,106,3,0,124,2,0,131,1,0,125,5,0, - 87,110,18,0,4,116,4,0,107,10,0,114,103,0,1,1, - 1,89,110,162,0,88,116,5,0,124,5,0,100,2,0,25, - 131,1,0,125,3,0,121,19,0,124,0,0,106,6,0,124, - 4,0,131,1,0,125,6,0,87,110,18,0,4,116,7,0, - 107,10,0,114,159,0,1,1,1,89,110,106,0,88,121,34, - 0,116,8,0,124,6,0,100,3,0,124,5,0,100,4,0, - 124,1,0,100,5,0,124,4,0,131,1,3,125,7,0,87, - 110,24,0,4,116,9,0,116,10,0,102,2,0,107,10,0, - 114,220,0,1,1,1,89,110,45,0,88,116,11,0,100,6, - 0,124,4,0,124,2,0,131,3,0,1,116,12,0,124,7, - 0,100,4,0,124,1,0,100,7,0,124,4,0,100,8,0, - 124,2,0,131,1,3,83,124,0,0,106,6,0,124,2,0, - 131,1,0,125,8,0,124,0,0,106,13,0,124,8,0,124, - 2,0,131,2,0,125,9,0,116,11,0,100,9,0,124,2, - 0,131,2,0,1,116,14,0,106,15,0,12,114,170,1,124, - 4,0,100,1,0,107,9,0,114,170,1,124,3,0,100,1, - 0,107,9,0,114,170,1,116,16,0,124,9,0,124,3,0, - 116,17,0,124,8,0,131,1,0,131,3,0,125,6,0,121, - 36,0,124,0,0,106,18,0,124,2,0,124,4,0,124,6, - 0,131,3,0,1,116,11,0,100,10,0,124,4,0,131,2, - 0,1,87,110,18,0,4,116,2,0,107,10,0,114,169,1, - 1,1,1,89,110,1,0,88,124,9,0,83,41,11,122,190, - 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101, - 99,116,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,46,10,10,32,32,32,32,32,32,32,32,82,101,97,100, - 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, - 114,101,113,117,105,114,101,115,32,112,97,116,104,95,115,116, - 97,116,115,32,116,111,32,98,101,32,105,109,112,108,101,109, - 101,110,116,101,100,46,32,84,111,32,119,114,105,116,101,10, - 32,32,32,32,32,32,32,32,98,121,116,101,99,111,100,101, - 44,32,115,101,116,95,100,97,116,97,32,109,117,115,116,32, - 97,108,115,111,32,98,101,32,105,109,112,108,101,109,101,110, - 116,101,100,46,10,10,32,32,32,32,32,32,32,32,78,114, - 135,0,0,0,114,140,0,0,0,114,108,0,0,0,114,37, - 0,0,0,122,13,123,125,32,109,97,116,99,104,101,115,32, - 123,125,114,91,0,0,0,114,92,0,0,0,122,19,99,111, - 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, - 125,122,10,119,114,111,116,101,32,123,33,114,125,41,19,114, - 159,0,0,0,114,81,0,0,0,114,68,0,0,0,114,198, - 0,0,0,114,196,0,0,0,114,16,0,0,0,114,201,0, - 0,0,114,42,0,0,0,114,143,0,0,0,114,109,0,0, - 0,114,138,0,0,0,114,107,0,0,0,114,149,0,0,0, - 114,207,0,0,0,114,8,0,0,0,218,19,100,111,110,116, - 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, - 152,0,0,0,114,33,0,0,0,114,200,0,0,0,41,10, - 114,110,0,0,0,114,128,0,0,0,114,92,0,0,0,114, - 141,0,0,0,114,91,0,0,0,218,2,115,116,114,55,0, - 0,0,218,10,98,121,116,101,115,95,100,97,116,97,114,155, - 0,0,0,90,11,99,111,100,101,95,111,98,106,101,99,116, + 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,156, + 2,0,0,115,0,0,0,0,122,27,95,76,111,97,100,101, + 114,66,97,115,105,99,115,46,99,114,101,97,116,101,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,56,0,0,0,124, + 0,106,0,124,1,106,1,131,1,125,2,124,2,100,1,107, + 8,114,36,116,2,100,2,106,3,124,1,106,1,131,1,131, + 1,130,1,116,4,106,5,116,6,124,2,124,1,106,7,131, + 3,1,0,100,1,83,0,41,3,122,19,69,120,101,99,117, + 116,101,32,116,104,101,32,109,111,100,117,108,101,46,78,122, + 52,99,97,110,110,111,116,32,108,111,97,100,32,109,111,100, + 117,108,101,32,123,33,114,125,32,119,104,101,110,32,103,101, + 116,95,99,111,100,101,40,41,32,114,101,116,117,114,110,115, + 32,78,111,110,101,41,8,218,8,103,101,116,95,99,111,100, + 101,114,109,0,0,0,114,103,0,0,0,114,50,0,0,0, + 114,118,0,0,0,218,25,95,99,97,108,108,95,119,105,116, + 104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,100, + 218,4,101,120,101,99,114,115,0,0,0,41,3,114,104,0, + 0,0,218,6,109,111,100,117,108,101,114,144,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,11, + 101,120,101,99,95,109,111,100,117,108,101,159,2,0,0,115, + 10,0,0,0,0,2,12,1,8,1,6,1,10,1,122,25, + 95,76,111,97,100,101,114,66,97,115,105,99,115,46,101,120, + 101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,12, + 0,0,0,116,0,106,1,124,0,124,1,131,2,83,0,41, + 1,122,26,84,104,105,115,32,109,111,100,117,108,101,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,41,2,114, + 118,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, + 108,101,95,115,104,105,109,41,2,114,104,0,0,0,114,123, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,167, + 2,0,0,115,2,0,0,0,0,2,122,25,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,108,111,97,100,95,109, + 111,100,117,108,101,78,41,8,114,109,0,0,0,114,108,0, + 0,0,114,110,0,0,0,114,111,0,0,0,114,157,0,0, + 0,114,183,0,0,0,114,188,0,0,0,114,190,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,181,0,0,0,143,2,0,0,115,10,0, + 0,0,8,3,4,2,8,8,8,3,8,8,114,181,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,64,0,0,0,115,74,0,0,0,101,0,90,1,100, + 0,90,2,100,1,100,2,132,0,90,3,100,3,100,4,132, + 0,90,4,100,5,100,6,132,0,90,5,100,7,100,8,132, + 0,90,6,100,9,100,10,132,0,90,7,100,18,100,12,156, + 1,100,13,100,14,132,2,90,8,100,15,100,16,132,0,90, + 9,100,17,83,0,41,19,218,12,83,111,117,114,99,101,76, + 111,97,100,101,114,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,8,0,0,0,116, + 0,130,1,100,1,83,0,41,2,122,178,79,112,116,105,111, + 110,97,108,32,109,101,116,104,111,100,32,116,104,97,116,32, + 114,101,116,117,114,110,115,32,116,104,101,32,109,111,100,105, + 102,105,99,97,116,105,111,110,32,116,105,109,101,32,40,97, + 110,32,105,110,116,41,32,102,111,114,32,116,104,101,10,32, + 32,32,32,32,32,32,32,115,112,101,99,105,102,105,101,100, + 32,112,97,116,104,44,32,119,104,101,114,101,32,112,97,116, + 104,32,105,115,32,97,32,115,116,114,46,10,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,78,41,1, + 218,7,73,79,69,114,114,111,114,41,2,114,104,0,0,0, + 114,37,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, + 174,2,0,0,115,2,0,0,0,0,6,122,23,83,111,117, + 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109, + 116,105,109,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,67,0,0,0,115,14,0,0,0,100,1, + 124,0,106,0,124,1,131,1,105,1,83,0,41,2,97,170, + 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, + 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, + 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,112, + 97,116,104,10,32,32,32,32,32,32,32,32,116,111,32,98, + 121,32,116,104,101,32,112,97,116,104,32,40,115,116,114,41, + 46,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, + 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, + 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, + 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, + 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, + 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, + 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, + 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, + 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, + 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, + 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, + 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, + 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,114,130,0, + 0,0,41,1,114,193,0,0,0,41,2,114,104,0,0,0, + 114,37,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115, + 182,2,0,0,115,2,0,0,0,0,11,122,23,83,111,117, + 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, + 116,97,116,115,99,4,0,0,0,0,0,0,0,4,0,0, + 0,3,0,0,0,67,0,0,0,115,12,0,0,0,124,0, + 106,0,124,2,124,3,131,2,83,0,41,1,122,228,79,112, + 116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,104, + 105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,32, + 40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,108, + 101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, + 10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101, + 110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111, + 100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,101, + 32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,115,46,10,10,32,32,32, + 32,32,32,32,32,84,104,101,32,115,111,117,114,99,101,32, + 112,97,116,104,32,105,115,32,110,101,101,100,101,100,32,105, + 110,32,111,114,100,101,114,32,116,111,32,99,111,114,114,101, + 99,116,108,121,32,116,114,97,110,115,102,101,114,32,112,101, + 114,109,105,115,115,105,111,110,115,10,32,32,32,32,32,32, + 32,32,41,1,218,8,115,101,116,95,100,97,116,97,41,4, + 114,104,0,0,0,114,94,0,0,0,90,10,99,97,99,104, + 101,95,112,97,116,104,114,56,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,15,95,99,97,99, + 104,101,95,98,121,116,101,99,111,100,101,195,2,0,0,115, + 2,0,0,0,0,8,122,28,83,111,117,114,99,101,76,111, + 97,100,101,114,46,95,99,97,99,104,101,95,98,121,116,101, + 99,111,100,101,99,3,0,0,0,0,0,0,0,3,0,0, + 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, + 83,0,41,2,122,150,79,112,116,105,111,110,97,108,32,109, + 101,116,104,111,100,32,119,104,105,99,104,32,119,114,105,116, + 101,115,32,100,97,116,97,32,40,98,121,116,101,115,41,32, + 116,111,32,97,32,102,105,108,101,32,112,97,116,104,32,40, + 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32, + 32,73,109,112,108,101,109,101,110,116,105,110,103,32,116,104, + 105,115,32,109,101,116,104,111,100,32,97,108,108,111,119,115, + 32,102,111,114,32,116,104,101,32,119,114,105,116,105,110,103, + 32,111,102,32,98,121,116,101,99,111,100,101,32,102,105,108, + 101,115,46,10,32,32,32,32,32,32,32,32,78,114,4,0, + 0,0,41,3,114,104,0,0,0,114,37,0,0,0,114,56, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,195,0,0,0,205,2,0,0,115,0,0,0,0, + 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,115, + 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0, + 5,0,0,0,16,0,0,0,67,0,0,0,115,82,0,0, + 0,124,0,106,0,124,1,131,1,125,2,121,14,124,0,106, + 1,124,2,131,1,125,3,87,0,110,48,4,0,116,2,107, + 10,114,72,1,0,125,4,1,0,122,20,116,3,100,1,124, + 1,100,2,141,2,124,4,130,2,87,0,89,0,100,3,100, + 3,125,4,126,4,88,0,110,2,88,0,116,4,124,3,131, + 1,83,0,41,4,122,52,67,111,110,99,114,101,116,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, + 103,101,116,95,115,111,117,114,99,101,46,122,39,115,111,117, + 114,99,101,32,110,111,116,32,97,118,97,105,108,97,98,108, + 101,32,116,104,114,111,117,103,104,32,103,101,116,95,100,97, + 116,97,40,41,41,1,114,102,0,0,0,78,41,5,114,155, + 0,0,0,218,8,103,101,116,95,100,97,116,97,114,42,0, + 0,0,114,103,0,0,0,114,153,0,0,0,41,5,114,104, + 0,0,0,114,123,0,0,0,114,37,0,0,0,114,151,0, + 0,0,218,3,101,120,99,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,10,103,101,116,95,115,111,117,114, + 99,101,212,2,0,0,115,14,0,0,0,0,2,10,1,2, + 1,14,1,16,1,4,1,28,1,122,23,83,111,117,114,99, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,114,31,0,0,0,41,1,218,9,95,111,112,116,105, + 109,105,122,101,99,3,0,0,0,1,0,0,0,4,0,0, + 0,8,0,0,0,67,0,0,0,115,22,0,0,0,116,0, + 106,1,116,2,124,1,124,2,100,1,100,2,124,3,100,3, + 141,6,83,0,41,4,122,130,82,101,116,117,114,110,32,116, + 104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,99, + 111,109,112,105,108,101,100,32,102,114,111,109,32,115,111,117, + 114,99,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,39,100,97,116,97,39,32,97,114,103,117,109,101,110, + 116,32,99,97,110,32,98,101,32,97,110,121,32,111,98,106, + 101,99,116,32,116,121,112,101,32,116,104,97,116,32,99,111, + 109,112,105,108,101,40,41,32,115,117,112,112,111,114,116,115, + 46,10,32,32,32,32,32,32,32,32,114,186,0,0,0,84, + 41,2,218,12,100,111,110,116,95,105,110,104,101,114,105,116, + 114,72,0,0,0,41,3,114,118,0,0,0,114,185,0,0, + 0,218,7,99,111,109,112,105,108,101,41,4,114,104,0,0, + 0,114,56,0,0,0,114,37,0,0,0,114,200,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,218, + 14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,222, + 2,0,0,115,4,0,0,0,0,5,12,1,122,27,83,111, + 117,114,99,101,76,111,97,100,101,114,46,115,111,117,114,99, + 101,95,116,111,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,10,0,0,0,43,0,0,0,67,0,0,0,115,94, + 1,0,0,124,0,106,0,124,1,131,1,125,2,100,1,125, + 3,121,12,116,1,124,2,131,1,125,4,87,0,110,24,4, + 0,116,2,107,10,114,50,1,0,1,0,1,0,100,1,125, + 4,89,0,110,162,88,0,121,14,124,0,106,3,124,2,131, + 1,125,5,87,0,110,20,4,0,116,4,107,10,114,86,1, + 0,1,0,1,0,89,0,110,126,88,0,116,5,124,5,100, + 2,25,0,131,1,125,3,121,14,124,0,106,6,124,4,131, + 1,125,6,87,0,110,20,4,0,116,7,107,10,114,134,1, + 0,1,0,1,0,89,0,110,78,88,0,121,20,116,8,124, + 6,124,5,124,1,124,4,100,3,141,4,125,7,87,0,110, + 24,4,0,116,9,116,10,102,2,107,10,114,180,1,0,1, + 0,1,0,89,0,110,32,88,0,116,11,106,12,100,4,124, + 4,124,2,131,3,1,0,116,13,124,7,124,1,124,4,124, + 2,100,5,141,4,83,0,124,0,106,6,124,2,131,1,125, + 8,124,0,106,14,124,8,124,2,131,2,125,9,116,11,106, + 12,100,6,124,2,131,2,1,0,116,15,106,16,12,0,144, + 1,114,90,124,4,100,1,107,9,144,1,114,90,124,3,100, + 1,107,9,144,1,114,90,116,17,124,9,124,3,116,18,124, + 8,131,1,131,3,125,6,121,30,124,0,106,19,124,2,124, + 4,124,6,131,3,1,0,116,11,106,12,100,7,124,4,131, + 2,1,0,87,0,110,22,4,0,116,2,107,10,144,1,114, + 88,1,0,1,0,1,0,89,0,110,2,88,0,124,9,83, + 0,41,8,122,190,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 73,110,115,112,101,99,116,76,111,97,100,101,114,46,103,101, + 116,95,99,111,100,101,46,10,10,32,32,32,32,32,32,32, + 32,82,101,97,100,105,110,103,32,111,102,32,98,121,116,101, + 99,111,100,101,32,114,101,113,117,105,114,101,115,32,112,97, + 116,104,95,115,116,97,116,115,32,116,111,32,98,101,32,105, + 109,112,108,101,109,101,110,116,101,100,46,32,84,111,32,119, + 114,105,116,101,10,32,32,32,32,32,32,32,32,98,121,116, + 101,99,111,100,101,44,32,115,101,116,95,100,97,116,97,32, + 109,117,115,116,32,97,108,115,111,32,98,101,32,105,109,112, + 108,101,109,101,110,116,101,100,46,10,10,32,32,32,32,32, + 32,32,32,78,114,130,0,0,0,41,3,114,136,0,0,0, + 114,102,0,0,0,114,37,0,0,0,122,13,123,125,32,109, + 97,116,99,104,101,115,32,123,125,41,3,114,102,0,0,0, + 114,93,0,0,0,114,94,0,0,0,122,19,99,111,100,101, + 32,111,98,106,101,99,116,32,102,114,111,109,32,123,125,122, + 10,119,114,111,116,101,32,123,33,114,125,41,20,114,155,0, + 0,0,114,83,0,0,0,114,70,0,0,0,114,194,0,0, + 0,114,192,0,0,0,114,16,0,0,0,114,197,0,0,0, + 114,42,0,0,0,114,139,0,0,0,114,103,0,0,0,114, + 134,0,0,0,114,118,0,0,0,114,133,0,0,0,114,145, + 0,0,0,114,203,0,0,0,114,8,0,0,0,218,19,100, + 111,110,116,95,119,114,105,116,101,95,98,121,116,101,99,111, + 100,101,114,148,0,0,0,114,33,0,0,0,114,196,0,0, + 0,41,10,114,104,0,0,0,114,123,0,0,0,114,94,0, + 0,0,114,137,0,0,0,114,93,0,0,0,218,2,115,116, + 114,56,0,0,0,218,10,98,121,116,101,115,95,100,97,116, + 97,114,151,0,0,0,90,11,99,111,100,101,95,111,98,106, + 101,99,116,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,184,0,0,0,230,2,0,0,115,78,0,0,0, + 0,7,10,1,4,1,2,1,12,1,14,1,10,2,2,1, + 14,1,14,1,6,2,12,1,2,1,14,1,14,1,6,2, + 2,1,4,1,4,1,12,1,18,1,6,2,8,1,6,1, + 6,1,2,1,8,1,10,1,12,1,12,1,20,1,10,1, + 6,1,10,1,2,1,14,1,16,1,16,1,6,1,122,21, + 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,78,114,91,0,0,0,41,10,114,109,0, + 0,0,114,108,0,0,0,114,110,0,0,0,114,193,0,0, + 0,114,194,0,0,0,114,196,0,0,0,114,195,0,0,0, + 114,199,0,0,0,114,203,0,0,0,114,184,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,191,0,0,0,172,2,0,0,115,14,0,0, + 0,8,2,8,8,8,13,8,10,8,7,8,10,14,8,114, + 191,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,0,0,0,0,115,80,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, + 90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0, + 90,6,101,7,135,0,102,1,100,8,100,9,132,8,131,1, + 90,8,101,7,100,10,100,11,132,0,131,1,90,9,100,12, + 100,13,132,0,90,10,135,0,90,11,100,14,83,0,41,15, + 218,10,70,105,108,101,76,111,97,100,101,114,122,103,66,97, + 115,101,32,102,105,108,101,32,108,111,97,100,101,114,32,99, + 108,97,115,115,32,119,104,105,99,104,32,105,109,112,108,101, + 109,101,110,116,115,32,116,104,101,32,108,111,97,100,101,114, + 32,112,114,111,116,111,99,111,108,32,109,101,116,104,111,100, + 115,32,116,104,97,116,10,32,32,32,32,114,101,113,117,105, + 114,101,32,102,105,108,101,32,115,121,115,116,101,109,32,117, + 115,97,103,101,46,99,3,0,0,0,0,0,0,0,3,0, + 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, + 1,124,0,95,0,124,2,124,0,95,1,100,1,83,0,41, + 2,122,75,67,97,99,104,101,32,116,104,101,32,109,111,100, + 117,108,101,32,110,97,109,101,32,97,110,100,32,116,104,101, + 32,112,97,116,104,32,116,111,32,116,104,101,32,102,105,108, + 101,32,102,111,117,110,100,32,98,121,32,116,104,101,10,32, + 32,32,32,32,32,32,32,102,105,110,100,101,114,46,78,41, + 2,114,102,0,0,0,114,37,0,0,0,41,3,114,104,0, + 0,0,114,123,0,0,0,114,37,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,182,0,0,0, + 31,3,0,0,115,4,0,0,0,0,3,6,1,122,19,70, + 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, + 95,95,99,2,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,24,0,0,0,124,0,106,0, + 124,1,106,0,107,2,111,22,124,0,106,1,124,1,106,1, + 107,2,83,0,41,1,78,41,2,218,9,95,95,99,108,97, + 115,115,95,95,114,115,0,0,0,41,2,114,104,0,0,0, + 218,5,111,116,104,101,114,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,6,95,95,101,113,95,95,37,3, + 0,0,115,4,0,0,0,0,1,12,1,122,17,70,105,108, + 101,76,111,97,100,101,114,46,95,95,101,113,95,95,99,1, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,115,20,0,0,0,116,0,124,0,106,1,131,1, + 116,0,124,0,106,2,131,1,65,0,83,0,41,1,78,41, + 3,218,4,104,97,115,104,114,102,0,0,0,114,37,0,0, + 0,41,1,114,104,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,8,95,95,104,97,115,104,95, + 95,41,3,0,0,115,2,0,0,0,0,1,122,19,70,105, + 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, + 95,99,2,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,3,0,0,0,115,16,0,0,0,116,0,116,1,124, + 0,131,2,106,2,124,1,131,1,83,0,41,1,122,100,76, + 111,97,100,32,97,32,109,111,100,117,108,101,32,102,114,111, + 109,32,97,32,102,105,108,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,41,3,218,5,115,117,112,101,114,114,207,0,0, + 0,114,190,0,0,0,41,2,114,104,0,0,0,114,123,0, + 0,0,41,1,114,208,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,190,0,0,0,44,3,0,0,115,2,0,0, + 0,0,10,122,22,70,105,108,101,76,111,97,100,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,6,0,0,0,124,0,106,0,83,0,41,1,122,58,82, + 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, + 101,32,97,115,32,102,111,117,110,100,32,98,121,32,116,104, + 101,32,102,105,110,100,101,114,46,41,1,114,37,0,0,0, + 41,2,114,104,0,0,0,114,123,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,155,0,0,0, + 56,3,0,0,115,2,0,0,0,0,3,122,23,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,99,2,0,0,0,0,0,0,0,3,0,0, + 0,9,0,0,0,67,0,0,0,115,32,0,0,0,116,0, + 106,1,124,1,100,1,131,2,143,10,125,2,124,2,106,2, + 131,0,83,0,81,0,82,0,88,0,100,2,83,0,41,3, + 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, + 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, + 97,119,32,98,121,116,101,115,46,218,1,114,78,41,3,114, + 52,0,0,0,114,53,0,0,0,90,4,114,101,97,100,41, + 3,114,104,0,0,0,114,37,0,0,0,114,57,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, - 188,0,0,0,225,2,0,0,115,78,0,0,0,0,7,15, - 1,6,1,3,1,16,1,13,1,11,2,3,1,19,1,13, - 1,5,2,16,1,3,1,19,1,13,1,5,2,3,1,9, - 1,12,1,13,1,19,1,5,2,9,1,7,1,15,1,6, - 1,7,1,15,1,18,1,13,1,22,1,12,1,9,1,15, - 1,3,1,19,1,17,1,13,1,5,1,122,21,83,111,117, - 114,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, - 100,101,78,114,89,0,0,0,41,10,114,114,0,0,0,114, - 113,0,0,0,114,115,0,0,0,114,197,0,0,0,114,198, - 0,0,0,114,200,0,0,0,114,199,0,0,0,114,203,0, - 0,0,114,207,0,0,0,114,188,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,195,0,0,0,167,2,0,0,115,14,0,0,0,12,2, - 12,8,12,13,12,10,12,7,12,10,18,8,114,195,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,0,0,0,0,115,112,0,0,0,101,0,0,90,1, - 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, - 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, - 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, - 0,101,7,0,135,0,0,102,1,0,100,8,0,100,9,0, - 134,0,0,131,1,0,90,8,0,101,7,0,100,10,0,100, - 11,0,132,0,0,131,1,0,90,9,0,100,12,0,100,13, - 0,132,0,0,90,10,0,135,0,0,83,41,14,218,10,70, - 105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32, - 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, - 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, - 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, - 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, - 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, - 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, - 101,46,99,3,0,0,0,0,0,0,0,3,0,0,0,2, - 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, - 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,1, - 0,83,41,2,122,75,67,97,99,104,101,32,116,104,101,32, - 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, - 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, - 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, - 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, - 46,78,41,2,114,108,0,0,0,114,37,0,0,0,41,3, - 114,110,0,0,0,114,128,0,0,0,114,37,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,186, - 0,0,0,26,3,0,0,115,4,0,0,0,0,3,9,1, - 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,105, - 110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,34,0,0,0,124, - 0,0,106,0,0,124,1,0,106,0,0,107,2,0,111,33, - 0,124,0,0,106,1,0,124,1,0,106,1,0,107,2,0, - 83,41,1,78,41,2,218,9,95,95,99,108,97,115,115,95, - 95,114,120,0,0,0,41,2,114,110,0,0,0,218,5,111, - 116,104,101,114,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,218,6,95,95,101,113,95,95,32,3,0,0,115, - 4,0,0,0,0,1,18,1,122,17,70,105,108,101,76,111, - 97,100,101,114,46,95,95,101,113,95,95,99,1,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,26,0,0,0,116,0,0,124,0,0,106,1,0,131,1, - 0,116,0,0,124,0,0,106,2,0,131,1,0,65,83,41, - 1,78,41,3,218,4,104,97,115,104,114,108,0,0,0,114, - 37,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,218,8,95,95,104,97, - 115,104,95,95,36,3,0,0,115,2,0,0,0,0,1,122, - 19,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, - 115,104,95,95,99,2,0,0,0,0,0,0,0,2,0,0, - 0,3,0,0,0,3,0,0,0,115,22,0,0,0,116,0, - 0,116,1,0,124,0,0,131,2,0,106,2,0,124,1,0, - 131,1,0,83,41,1,122,100,76,111,97,100,32,97,32,109, - 111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,108, - 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, - 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, - 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,41,3,218,5, - 115,117,112,101,114,114,211,0,0,0,114,194,0,0,0,41, - 2,114,110,0,0,0,114,128,0,0,0,41,1,114,212,0, - 0,0,114,4,0,0,0,114,6,0,0,0,114,194,0,0, - 0,39,3,0,0,115,2,0,0,0,0,10,122,22,70,105, - 108,101,76,111,97,100,101,114,46,108,111,97,100,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,7,0,0,0,124,0, - 0,106,0,0,83,41,1,122,58,82,101,116,117,114,110,32, - 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, - 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, - 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, - 101,114,46,41,1,114,37,0,0,0,41,2,114,110,0,0, - 0,114,128,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,159,0,0,0,51,3,0,0,115,2, - 0,0,0,0,3,122,23,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, - 0,0,0,0,0,0,0,3,0,0,0,9,0,0,0,67, - 0,0,0,115,42,0,0,0,116,0,0,106,1,0,124,1, - 0,100,1,0,131,2,0,143,17,0,125,2,0,124,2,0, - 106,2,0,131,0,0,83,87,100,2,0,81,82,88,100,2, - 0,83,41,3,122,39,82,101,116,117,114,110,32,116,104,101, - 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, - 97,115,32,114,97,119,32,98,121,116,101,115,46,218,1,114, - 78,41,3,114,51,0,0,0,114,52,0,0,0,90,4,114, - 101,97,100,41,3,114,110,0,0,0,114,37,0,0,0,114, - 56,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,201,0,0,0,56,3,0,0,115,4,0,0, - 0,0,2,21,1,122,19,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,100,97,116,97,41,11,114,114,0,0, - 0,114,113,0,0,0,114,115,0,0,0,114,116,0,0,0, - 114,186,0,0,0,114,214,0,0,0,114,216,0,0,0,114, - 125,0,0,0,114,194,0,0,0,114,159,0,0,0,114,201, - 0,0,0,114,4,0,0,0,114,4,0,0,0,41,1,114, - 212,0,0,0,114,6,0,0,0,114,211,0,0,0,21,3, - 0,0,115,14,0,0,0,12,3,6,2,12,6,12,4,12, - 3,24,12,18,5,114,211,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115, - 64,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, - 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,100,8,0,100,9,0,132,0,1,90,6,0, - 100,10,0,83,41,11,218,16,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,122,62,67,111,110,99,114,101, - 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,83,111,117,114,99,101,76,111,97,100,101, - 114,32,117,115,105,110,103,32,116,104,101,32,102,105,108,101, - 32,115,121,115,116,101,109,46,99,2,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,67,0,0,0,115,34,0, - 0,0,116,0,0,124,1,0,131,1,0,125,2,0,100,1, - 0,124,2,0,106,1,0,100,2,0,124,2,0,106,2,0, - 105,2,0,83,41,3,122,33,82,101,116,117,114,110,32,116, - 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, - 116,104,101,32,112,97,116,104,46,114,135,0,0,0,114,136, + 197,0,0,0,61,3,0,0,115,4,0,0,0,0,2,14, + 1,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,100,97,116,97,78,41,12,114,109,0,0,0,114,108, + 0,0,0,114,110,0,0,0,114,111,0,0,0,114,182,0, + 0,0,114,210,0,0,0,114,212,0,0,0,114,120,0,0, + 0,114,190,0,0,0,114,155,0,0,0,114,197,0,0,0, + 90,13,95,95,99,108,97,115,115,99,101,108,108,95,95,114, + 4,0,0,0,114,4,0,0,0,41,1,114,208,0,0,0, + 114,6,0,0,0,114,207,0,0,0,26,3,0,0,115,14, + 0,0,0,8,3,4,2,8,6,8,4,8,3,16,12,12, + 5,114,207,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,64,0,0,0,115,46,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, + 156,1,100,8,100,9,132,2,90,6,100,10,83,0,41,11, + 218,16,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,122,62,67,111,110,99,114,101,116,101,32,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,83, + 111,117,114,99,101,76,111,97,100,101,114,32,117,115,105,110, + 103,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, + 109,46,99,2,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,67,0,0,0,115,22,0,0,0,116,0,124,1, + 131,1,125,2,124,2,106,1,124,2,106,2,100,1,156,2, + 83,0,41,2,122,33,82,101,116,117,114,110,32,116,104,101, + 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104, + 101,32,112,97,116,104,46,41,2,114,130,0,0,0,114,131, 0,0,0,41,3,114,41,0,0,0,218,8,115,116,95,109, 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114, - 110,0,0,0,114,37,0,0,0,114,209,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,6,0,0,0,114,198,0, - 0,0,66,3,0,0,115,4,0,0,0,0,2,12,1,122, + 104,0,0,0,114,37,0,0,0,114,205,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,194,0, + 0,0,71,3,0,0,115,4,0,0,0,0,2,8,1,122, 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0, 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, - 0,115,34,0,0,0,116,0,0,124,1,0,131,1,0,125, - 4,0,124,0,0,106,1,0,124,2,0,124,3,0,100,1, - 0,124,4,0,131,2,1,83,41,2,78,218,5,95,109,111, - 100,101,41,2,114,99,0,0,0,114,199,0,0,0,41,5, - 114,110,0,0,0,114,92,0,0,0,114,91,0,0,0,114, - 55,0,0,0,114,44,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,200,0,0,0,71,3,0, - 0,115,4,0,0,0,0,2,12,1,122,32,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,114,221,0,0, - 0,105,182,1,0,0,99,3,0,0,0,1,0,0,0,9, - 0,0,0,17,0,0,0,67,0,0,0,115,53,1,0,0, - 116,0,0,124,1,0,131,1,0,92,2,0,125,4,0,125, - 5,0,103,0,0,125,6,0,120,54,0,124,4,0,114,80, - 0,116,1,0,124,4,0,131,1,0,12,114,80,0,116,0, - 0,124,4,0,131,1,0,92,2,0,125,4,0,125,7,0, - 124,6,0,106,2,0,124,7,0,131,1,0,1,113,27,0, - 87,120,132,0,116,3,0,124,6,0,131,1,0,68,93,118, - 0,125,7,0,116,4,0,124,4,0,124,7,0,131,2,0, - 125,4,0,121,17,0,116,5,0,106,6,0,124,4,0,131, - 1,0,1,87,113,94,0,4,116,7,0,107,10,0,114,155, - 0,1,1,1,119,94,0,89,113,94,0,4,116,8,0,107, - 10,0,114,211,0,1,125,8,0,1,122,25,0,116,9,0, - 100,1,0,124,4,0,124,8,0,131,3,0,1,100,2,0, - 83,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, - 113,94,0,88,113,94,0,87,121,33,0,116,10,0,124,1, - 0,124,2,0,124,3,0,131,3,0,1,116,9,0,100,3, - 0,124,1,0,131,2,0,1,87,110,53,0,4,116,8,0, - 107,10,0,114,48,1,1,125,8,0,1,122,21,0,116,9, - 0,100,1,0,124,1,0,124,8,0,131,3,0,1,87,89, - 100,2,0,100,2,0,125,8,0,126,8,0,88,110,1,0, - 88,100,2,0,83,41,4,122,27,87,114,105,116,101,32,98, - 121,116,101,115,32,100,97,116,97,32,116,111,32,97,32,102, - 105,108,101,46,122,27,99,111,117,108,100,32,110,111,116,32, - 99,114,101,97,116,101,32,123,33,114,125,58,32,123,33,114, - 125,78,122,12,99,114,101,97,116,101,100,32,123,33,114,125, - 41,11,114,40,0,0,0,114,48,0,0,0,114,165,0,0, - 0,114,35,0,0,0,114,30,0,0,0,114,3,0,0,0, - 90,5,109,107,100,105,114,218,15,70,105,108,101,69,120,105, - 115,116,115,69,114,114,111,114,114,42,0,0,0,114,107,0, - 0,0,114,57,0,0,0,41,9,114,110,0,0,0,114,37, - 0,0,0,114,55,0,0,0,114,221,0,0,0,218,6,112, - 97,114,101,110,116,114,96,0,0,0,114,29,0,0,0,114, - 25,0,0,0,114,202,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,199,0,0,0,76,3,0, - 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, - 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, - 16,1,27,1,3,1,16,1,17,1,18,2,122,25,83,111, - 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,115, - 101,116,95,100,97,116,97,78,41,7,114,114,0,0,0,114, - 113,0,0,0,114,115,0,0,0,114,116,0,0,0,114,198, - 0,0,0,114,200,0,0,0,114,199,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,219,0,0,0,62,3,0,0,115,8,0,0,0,12, - 2,6,2,12,5,12,5,114,219,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,46,0,0,0,101,0,0,90,1,0,100,0,0,90, - 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, - 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, - 100,6,0,83,41,7,218,20,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,122,45,76,111, - 97,100,101,114,32,119,104,105,99,104,32,104,97,110,100,108, - 101,115,32,115,111,117,114,99,101,108,101,115,115,32,102,105, - 108,101,32,105,109,112,111,114,116,115,46,99,2,0,0,0, - 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, - 115,76,0,0,0,124,0,0,106,0,0,124,1,0,131,1, - 0,125,2,0,124,0,0,106,1,0,124,2,0,131,1,0, - 125,3,0,116,2,0,124,3,0,100,1,0,124,1,0,100, - 2,0,124,2,0,131,1,2,125,4,0,116,3,0,124,4, - 0,100,1,0,124,1,0,100,3,0,124,2,0,131,1,2, - 83,41,4,78,114,108,0,0,0,114,37,0,0,0,114,91, - 0,0,0,41,4,114,159,0,0,0,114,201,0,0,0,114, - 143,0,0,0,114,149,0,0,0,41,5,114,110,0,0,0, - 114,128,0,0,0,114,37,0,0,0,114,55,0,0,0,114, - 210,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,188,0,0,0,109,3,0,0,115,8,0,0, - 0,0,1,15,1,15,1,24,1,122,29,83,111,117,114,99, + 0,115,24,0,0,0,116,0,124,1,131,1,125,4,124,0, + 106,1,124,2,124,3,124,4,100,1,141,3,83,0,41,2, + 78,41,1,218,5,95,109,111,100,101,41,2,114,101,0,0, + 0,114,195,0,0,0,41,5,114,104,0,0,0,114,94,0, + 0,0,114,93,0,0,0,114,56,0,0,0,114,44,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,196,0,0,0,76,3,0,0,115,4,0,0,0,0,2, + 8,1,122,32,83,111,117,114,99,101,70,105,108,101,76,111, + 97,100,101,114,46,95,99,97,99,104,101,95,98,121,116,101, + 99,111,100,101,105,182,1,0,0,41,1,114,217,0,0,0, + 99,3,0,0,0,1,0,0,0,9,0,0,0,17,0,0, + 0,67,0,0,0,115,250,0,0,0,116,0,124,1,131,1, + 92,2,125,4,125,5,103,0,125,6,120,40,124,4,114,56, + 116,1,124,4,131,1,12,0,114,56,116,0,124,4,131,1, + 92,2,125,4,125,7,124,6,106,2,124,7,131,1,1,0, + 113,18,87,0,120,108,116,3,124,6,131,1,68,0,93,96, + 125,7,116,4,124,4,124,7,131,2,125,4,121,14,116,5, + 106,6,124,4,131,1,1,0,87,0,113,68,4,0,116,7, + 107,10,114,118,1,0,1,0,1,0,119,68,89,0,113,68, + 4,0,116,8,107,10,114,162,1,0,125,8,1,0,122,18, + 116,9,106,10,100,1,124,4,124,8,131,3,1,0,100,2, + 83,0,100,2,125,8,126,8,88,0,113,68,88,0,113,68, + 87,0,121,28,116,11,124,1,124,2,124,3,131,3,1,0, + 116,9,106,10,100,3,124,1,131,2,1,0,87,0,110,48, + 4,0,116,8,107,10,114,244,1,0,125,8,1,0,122,20, + 116,9,106,10,100,1,124,1,124,8,131,3,1,0,87,0, + 89,0,100,2,100,2,125,8,126,8,88,0,110,2,88,0, + 100,2,83,0,41,4,122,27,87,114,105,116,101,32,98,121, + 116,101,115,32,100,97,116,97,32,116,111,32,97,32,102,105, + 108,101,46,122,27,99,111,117,108,100,32,110,111,116,32,99, + 114,101,97,116,101,32,123,33,114,125,58,32,123,33,114,125, + 78,122,12,99,114,101,97,116,101,100,32,123,33,114,125,41, + 12,114,40,0,0,0,114,48,0,0,0,114,161,0,0,0, + 114,35,0,0,0,114,30,0,0,0,114,3,0,0,0,90, + 5,109,107,100,105,114,218,15,70,105,108,101,69,120,105,115, + 116,115,69,114,114,111,114,114,42,0,0,0,114,118,0,0, + 0,114,133,0,0,0,114,58,0,0,0,41,9,114,104,0, + 0,0,114,37,0,0,0,114,56,0,0,0,114,217,0,0, + 0,218,6,112,97,114,101,110,116,114,98,0,0,0,114,29, + 0,0,0,114,25,0,0,0,114,198,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,195,0,0, + 0,81,3,0,0,115,42,0,0,0,0,2,12,1,4,2, + 16,1,12,1,14,2,14,1,10,1,2,1,14,1,14,2, + 6,1,16,3,6,1,8,1,20,1,2,1,12,1,16,1, + 16,2,8,1,122,25,83,111,117,114,99,101,70,105,108,101, + 76,111,97,100,101,114,46,115,101,116,95,100,97,116,97,78, + 41,7,114,109,0,0,0,114,108,0,0,0,114,110,0,0, + 0,114,111,0,0,0,114,194,0,0,0,114,196,0,0,0, + 114,195,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,215,0,0,0,67,3, + 0,0,115,8,0,0,0,8,2,4,2,8,5,8,5,114, + 215,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,64,0,0,0,115,32,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, + 90,4,100,4,100,5,132,0,90,5,100,6,83,0,41,7, + 218,20,83,111,117,114,99,101,108,101,115,115,70,105,108,101, + 76,111,97,100,101,114,122,45,76,111,97,100,101,114,32,119, + 104,105,99,104,32,104,97,110,100,108,101,115,32,115,111,117, + 114,99,101,108,101,115,115,32,102,105,108,101,32,105,109,112, + 111,114,116,115,46,99,2,0,0,0,0,0,0,0,5,0, + 0,0,5,0,0,0,67,0,0,0,115,48,0,0,0,124, + 0,106,0,124,1,131,1,125,2,124,0,106,1,124,2,131, + 1,125,3,116,2,124,3,124,1,124,2,100,1,141,3,125, + 4,116,3,124,4,124,1,124,2,100,2,141,3,83,0,41, + 3,78,41,2,114,102,0,0,0,114,37,0,0,0,41,2, + 114,102,0,0,0,114,93,0,0,0,41,4,114,155,0,0, + 0,114,197,0,0,0,114,139,0,0,0,114,145,0,0,0, + 41,5,114,104,0,0,0,114,123,0,0,0,114,37,0,0, + 0,114,56,0,0,0,114,206,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,184,0,0,0,116, + 3,0,0,115,8,0,0,0,0,1,10,1,10,1,14,1, + 122,29,83,111,117,114,99,101,108,101,115,115,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,122, + 39,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, + 116,104,101,114,101,32,105,115,32,110,111,32,115,111,117,114, + 99,101,32,99,111,100,101,46,78,114,4,0,0,0,41,2, + 114,104,0,0,0,114,123,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,199,0,0,0,122,3, + 0,0,115,2,0,0,0,0,2,122,31,83,111,117,114,99, 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,46, - 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, - 0,0,100,1,0,83,41,2,122,39,82,101,116,117,114,110, - 32,78,111,110,101,32,97,115,32,116,104,101,114,101,32,105, - 115,32,110,111,32,115,111,117,114,99,101,32,99,111,100,101, - 46,78,114,4,0,0,0,41,2,114,110,0,0,0,114,128, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,203,0,0,0,115,3,0,0,115,2,0,0,0, - 0,2,122,31,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,78,41,6,114,114,0,0,0,114,113,0,0,0, - 114,115,0,0,0,114,116,0,0,0,114,188,0,0,0,114, - 203,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,224,0,0,0,105,3,0, - 0,115,6,0,0,0,12,2,6,2,12,6,114,224,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,64,0,0,0,115,136,0,0,0,101,0,0,90,1, - 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, - 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, - 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, - 0,100,8,0,100,9,0,132,0,0,90,7,0,100,10,0, - 100,11,0,132,0,0,90,8,0,100,12,0,100,13,0,132, - 0,0,90,9,0,100,14,0,100,15,0,132,0,0,90,10, - 0,100,16,0,100,17,0,132,0,0,90,11,0,101,12,0, - 100,18,0,100,19,0,132,0,0,131,1,0,90,13,0,100, - 20,0,83,41,21,218,19,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,122,93,76,111,97,100, - 101,114,32,102,111,114,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,84, - 104,101,32,99,111,110,115,116,114,117,99,116,111,114,32,105, - 115,32,100,101,115,105,103,110,101,100,32,116,111,32,119,111, - 114,107,32,119,105,116,104,32,70,105,108,101,70,105,110,100, - 101,114,46,10,10,32,32,32,32,99,3,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,22, - 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, - 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,108, - 0,0,0,114,37,0,0,0,41,3,114,110,0,0,0,114, - 108,0,0,0,114,37,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,186,0,0,0,132,3,0, - 0,115,4,0,0,0,0,1,9,1,122,28,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,34,0, - 0,0,124,0,0,106,0,0,124,1,0,106,0,0,107,2, - 0,111,33,0,124,0,0,106,1,0,124,1,0,106,1,0, - 107,2,0,83,41,1,78,41,2,114,212,0,0,0,114,120, - 0,0,0,41,2,114,110,0,0,0,114,213,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,214, - 0,0,0,136,3,0,0,115,4,0,0,0,0,1,18,1, - 122,26,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,26,0,0,0,116,0,0,124,0,0,106,1,0,131, - 1,0,116,0,0,124,0,0,106,2,0,131,1,0,65,83, - 41,1,78,41,3,114,215,0,0,0,114,108,0,0,0,114, - 37,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,114,216,0,0,0,140, - 3,0,0,115,2,0,0,0,0,1,122,28,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,67,0,0,0,115,47,0, - 0,0,116,0,0,106,1,0,116,2,0,106,3,0,124,1, - 0,131,2,0,125,2,0,116,4,0,100,1,0,124,1,0, - 106,5,0,124,0,0,106,6,0,131,3,0,1,124,2,0, - 83,41,2,122,38,67,114,101,97,116,101,32,97,110,32,117, - 110,105,116,105,97,108,105,122,101,100,32,101,120,116,101,110, - 115,105,111,110,32,109,111,100,117,108,101,122,38,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, - 114,125,32,108,111,97,100,101,100,32,102,114,111,109,32,123, - 33,114,125,41,7,114,123,0,0,0,114,189,0,0,0,114, - 147,0,0,0,90,14,99,114,101,97,116,101,95,100,121,110, - 97,109,105,99,114,107,0,0,0,114,108,0,0,0,114,37, - 0,0,0,41,3,114,110,0,0,0,114,166,0,0,0,114, - 191,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,187,0,0,0,143,3,0,0,115,10,0,0, - 0,0,2,6,1,15,1,6,1,16,1,122,33,69,120,116, + 103,101,116,95,115,111,117,114,99,101,78,41,6,114,109,0, + 0,0,114,108,0,0,0,114,110,0,0,0,114,111,0,0, + 0,114,184,0,0,0,114,199,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, + 220,0,0,0,112,3,0,0,115,6,0,0,0,8,2,4, + 2,8,6,114,220,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,64,0,0,0,115,92,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 100,7,132,0,90,6,100,8,100,9,132,0,90,7,100,10, + 100,11,132,0,90,8,100,12,100,13,132,0,90,9,100,14, + 100,15,132,0,90,10,100,16,100,17,132,0,90,11,101,12, + 100,18,100,19,132,0,131,1,90,13,100,20,83,0,41,21, + 218,19,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,122,93,76,111,97,100,101,114,32,102,111, + 114,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,115,46,10,10,32,32,32,32,84,104,101,32,99,111, + 110,115,116,114,117,99,116,111,114,32,105,115,32,100,101,115, + 105,103,110,101,100,32,116,111,32,119,111,114,107,32,119,105, + 116,104,32,70,105,108,101,70,105,110,100,101,114,46,10,10, + 32,32,32,32,99,3,0,0,0,0,0,0,0,3,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,100,0,83,0,41,1, + 78,41,2,114,102,0,0,0,114,37,0,0,0,41,3,114, + 104,0,0,0,114,102,0,0,0,114,37,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,182,0, + 0,0,139,3,0,0,115,4,0,0,0,0,1,6,1,122, + 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,24,0,0,0,124,0,106,0,124,1,106,0,107, + 2,111,22,124,0,106,1,124,1,106,1,107,2,83,0,41, + 1,78,41,2,114,208,0,0,0,114,115,0,0,0,41,2, + 114,104,0,0,0,114,209,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,210,0,0,0,143,3, + 0,0,115,4,0,0,0,0,1,12,1,122,26,69,120,116, 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, - 0,0,0,115,45,0,0,0,116,0,0,106,1,0,116,2, - 0,106,3,0,124,1,0,131,2,0,1,116,4,0,100,1, - 0,124,0,0,106,5,0,124,0,0,106,6,0,131,3,0, - 1,100,2,0,83,41,3,122,30,73,110,105,116,105,97,108, - 105,122,101,32,97,110,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,122,40,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,101, - 120,101,99,117,116,101,100,32,102,114,111,109,32,123,33,114, - 125,78,41,7,114,123,0,0,0,114,189,0,0,0,114,147, - 0,0,0,90,12,101,120,101,99,95,100,121,110,97,109,105, - 99,114,107,0,0,0,114,108,0,0,0,114,37,0,0,0, - 41,2,114,110,0,0,0,114,191,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,6,0,0,0,114,192,0,0,0, - 151,3,0,0,115,6,0,0,0,0,2,19,1,6,1,122, - 31,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, - 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,3,0,0,0,115,48,0,0,0,116,0,0,124,0,0, - 106,1,0,131,1,0,100,1,0,25,137,0,0,116,2,0, - 135,0,0,102,1,0,100,2,0,100,3,0,134,0,0,116, - 3,0,68,131,1,0,131,1,0,83,41,4,122,49,82,101, - 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, - 31,0,0,0,99,1,0,0,0,0,0,0,0,2,0,0, - 0,4,0,0,0,51,0,0,0,115,31,0,0,0,124,0, - 0,93,21,0,125,1,0,136,0,0,100,0,0,124,1,0, - 23,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, - 186,0,0,0,78,114,4,0,0,0,41,2,114,24,0,0, + 46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,20,0,0, + 0,116,0,124,0,106,1,131,1,116,0,124,0,106,2,131, + 1,65,0,83,0,41,1,78,41,3,114,211,0,0,0,114, + 102,0,0,0,114,37,0,0,0,41,1,114,104,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, + 212,0,0,0,147,3,0,0,115,2,0,0,0,0,1,122, + 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,95,95,104,97,115,104,95,95,99,2,0, + 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, + 0,0,115,36,0,0,0,116,0,106,1,116,2,106,3,124, + 1,131,2,125,2,116,0,106,4,100,1,124,1,106,5,124, + 0,106,6,131,3,1,0,124,2,83,0,41,2,122,38,67, + 114,101,97,116,101,32,97,110,32,117,110,105,116,105,97,108, + 105,122,101,100,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,122,38,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,123,33,114,125,32,108,111,97, + 100,101,100,32,102,114,111,109,32,123,33,114,125,41,7,114, + 118,0,0,0,114,185,0,0,0,114,143,0,0,0,90,14, + 99,114,101,97,116,101,95,100,121,110,97,109,105,99,114,133, + 0,0,0,114,102,0,0,0,114,37,0,0,0,41,3,114, + 104,0,0,0,114,162,0,0,0,114,187,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,183,0, + 0,0,150,3,0,0,115,10,0,0,0,0,2,4,1,10, + 1,6,1,12,1,122,33,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,99,114,101,97,116, + 101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,36,0, + 0,0,116,0,106,1,116,2,106,3,124,1,131,2,1,0, + 116,0,106,4,100,1,124,0,106,5,124,0,106,6,131,3, + 1,0,100,2,83,0,41,3,122,30,73,110,105,116,105,97, + 108,105,122,101,32,97,110,32,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,122,40,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,32,123,33,114,125,32, + 101,120,101,99,117,116,101,100,32,102,114,111,109,32,123,33, + 114,125,78,41,7,114,118,0,0,0,114,185,0,0,0,114, + 143,0,0,0,90,12,101,120,101,99,95,100,121,110,97,109, + 105,99,114,133,0,0,0,114,102,0,0,0,114,37,0,0, + 0,41,2,114,104,0,0,0,114,187,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,188,0,0, + 0,158,3,0,0,115,6,0,0,0,0,2,14,1,6,1, + 122,31,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,3,0,0,0,115,36,0,0,0,116,0,124,0,106, + 1,131,1,100,1,25,0,137,0,116,2,135,0,102,1,100, + 2,100,3,132,8,116,3,68,0,131,1,131,1,83,0,41, + 4,122,49,82,101,116,117,114,110,32,84,114,117,101,32,105, + 102,32,116,104,101,32,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,32,105,115,32,97,32,112,97,99,107, + 97,103,101,46,114,31,0,0,0,99,1,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,51,0,0,0,115,26, + 0,0,0,124,0,93,18,125,1,136,0,100,0,124,1,23, + 0,107,2,86,0,1,0,113,2,100,1,83,0,41,2,114, + 182,0,0,0,78,114,4,0,0,0,41,2,114,24,0,0, 0,218,6,115,117,102,102,105,120,41,1,218,9,102,105,108, 101,95,110,97,109,101,114,4,0,0,0,114,6,0,0,0, - 250,9,60,103,101,110,101,120,112,114,62,160,3,0,0,115, - 2,0,0,0,6,1,122,49,69,120,116,101,110,115,105,111, + 250,9,60,103,101,110,101,120,112,114,62,167,3,0,0,115, + 2,0,0,0,4,1,122,49,69,120,116,101,110,115,105,111, 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, 97,99,107,97,103,101,46,60,108,111,99,97,108,115,62,46, 60,103,101,110,101,120,112,114,62,41,4,114,40,0,0,0, 114,37,0,0,0,218,3,97,110,121,218,18,69,88,84,69, 78,83,73,79,78,95,83,85,70,70,73,88,69,83,41,2, - 114,110,0,0,0,114,128,0,0,0,114,4,0,0,0,41, - 1,114,227,0,0,0,114,6,0,0,0,114,161,0,0,0, - 157,3,0,0,115,6,0,0,0,0,2,19,1,18,1,122, + 114,104,0,0,0,114,123,0,0,0,114,4,0,0,0,41, + 1,114,223,0,0,0,114,6,0,0,0,114,157,0,0,0, + 164,3,0,0,115,6,0,0,0,0,2,14,1,12,1,122, 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,99, 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, + 67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,122, 63,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, 117,108,101,32,99,97,110,110,111,116,32,99,114,101,97,116, 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46, - 78,114,4,0,0,0,41,2,114,110,0,0,0,114,128,0, + 78,114,4,0,0,0,41,2,114,104,0,0,0,114,123,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,188,0,0,0,163,3,0,0,115,2,0,0,0,0, + 0,114,184,0,0,0,170,3,0,0,115,2,0,0,0,0, 2,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,0,83,41,2,122, + 67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,122, 53,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, 115,32,104,97,118,101,32,110,111,32,115,111,117,114,99,101, - 32,99,111,100,101,46,78,114,4,0,0,0,41,2,114,110, - 0,0,0,114,128,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,114,203,0,0,0,167,3,0,0, + 32,99,111,100,101,46,78,114,4,0,0,0,41,2,114,104, + 0,0,0,114,123,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,199,0,0,0,174,3,0,0, 115,2,0,0,0,0,2,122,30,69,120,116,101,110,115,105, 111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116, 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,7,0,0, - 0,124,0,0,106,0,0,83,41,1,122,58,82,101,116,117, - 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,116, - 104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,97, - 115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,102, - 105,110,100,101,114,46,41,1,114,37,0,0,0,41,2,114, - 110,0,0,0,114,128,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,114,159,0,0,0,171,3,0, - 0,115,2,0,0,0,0,3,122,32,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,78,41,14,114,114,0, - 0,0,114,113,0,0,0,114,115,0,0,0,114,116,0,0, - 0,114,186,0,0,0,114,214,0,0,0,114,216,0,0,0, - 114,187,0,0,0,114,192,0,0,0,114,161,0,0,0,114, - 188,0,0,0,114,203,0,0,0,114,125,0,0,0,114,159, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,114,225,0,0,0,124,3,0,0, - 115,20,0,0,0,12,6,6,2,12,4,12,4,12,3,12, - 8,12,6,12,6,12,4,12,4,114,225,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64, - 0,0,0,115,130,0,0,0,101,0,0,90,1,0,100,0, - 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, - 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, - 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, - 0,100,9,0,132,0,0,90,7,0,100,10,0,100,11,0, - 132,0,0,90,8,0,100,12,0,100,13,0,132,0,0,90, - 9,0,100,14,0,100,15,0,132,0,0,90,10,0,100,16, - 0,100,17,0,132,0,0,90,11,0,100,18,0,100,19,0, - 132,0,0,90,12,0,100,20,0,83,41,21,218,14,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,97,38,1,0, - 0,82,101,112,114,101,115,101,110,116,115,32,97,32,110,97, - 109,101,115,112,97,99,101,32,112,97,99,107,97,103,101,39, - 115,32,112,97,116,104,46,32,32,73,116,32,117,115,101,115, - 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, - 10,32,32,32,32,116,111,32,102,105,110,100,32,105,116,115, - 32,112,97,114,101,110,116,32,109,111,100,117,108,101,44,32, - 97,110,100,32,102,114,111,109,32,116,104,101,114,101,32,105, - 116,32,108,111,111,107,115,32,117,112,32,116,104,101,32,112, - 97,114,101,110,116,39,115,10,32,32,32,32,95,95,112,97, - 116,104,95,95,46,32,32,87,104,101,110,32,116,104,105,115, - 32,99,104,97,110,103,101,115,44,32,116,104,101,32,109,111, - 100,117,108,101,39,115,32,111,119,110,32,112,97,116,104,32, - 105,115,32,114,101,99,111,109,112,117,116,101,100,44,10,32, - 32,32,32,117,115,105,110,103,32,112,97,116,104,95,102,105, - 110,100,101,114,46,32,32,70,111,114,32,116,111,112,45,108, - 101,118,101,108,32,109,111,100,117,108,101,115,44,32,116,104, - 101,32,112,97,114,101,110,116,32,109,111,100,117,108,101,39, - 115,32,112,97,116,104,10,32,32,32,32,105,115,32,115,121, - 115,46,112,97,116,104,46,99,4,0,0,0,0,0,0,0, - 4,0,0,0,2,0,0,0,67,0,0,0,115,52,0,0, - 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, - 95,1,0,116,2,0,124,0,0,106,3,0,131,0,0,131, - 1,0,124,0,0,95,4,0,124,3,0,124,0,0,95,5, - 0,100,0,0,83,41,1,78,41,6,218,5,95,110,97,109, - 101,218,5,95,112,97,116,104,114,95,0,0,0,218,16,95, - 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,218, - 17,95,108,97,115,116,95,112,97,114,101,110,116,95,112,97, - 116,104,218,12,95,112,97,116,104,95,102,105,110,100,101,114, - 41,4,114,110,0,0,0,114,108,0,0,0,114,37,0,0, - 0,218,11,112,97,116,104,95,102,105,110,100,101,114,114,4, - 0,0,0,114,4,0,0,0,114,6,0,0,0,114,186,0, - 0,0,184,3,0,0,115,8,0,0,0,0,1,9,1,9, - 1,21,1,122,23,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,105,110,105,116,95,95,99,1,0,0, - 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, - 0,115,53,0,0,0,124,0,0,106,0,0,106,1,0,100, - 1,0,131,1,0,92,3,0,125,1,0,125,2,0,125,3, - 0,124,2,0,100,2,0,107,2,0,114,43,0,100,6,0, - 83,124,1,0,100,5,0,102,2,0,83,41,7,122,62,82, - 101,116,117,114,110,115,32,97,32,116,117,112,108,101,32,111, - 102,32,40,112,97,114,101,110,116,45,109,111,100,117,108,101, - 45,110,97,109,101,44,32,112,97,114,101,110,116,45,112,97, - 116,104,45,97,116,116,114,45,110,97,109,101,41,114,60,0, - 0,0,114,32,0,0,0,114,8,0,0,0,114,37,0,0, - 0,90,8,95,95,112,97,116,104,95,95,41,2,114,8,0, - 0,0,114,37,0,0,0,41,2,114,232,0,0,0,114,34, - 0,0,0,41,4,114,110,0,0,0,114,223,0,0,0,218, - 3,100,111,116,90,2,109,101,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,218,23,95,102,105,110,100,95,112, - 97,114,101,110,116,95,112,97,116,104,95,110,97,109,101,115, - 190,3,0,0,115,8,0,0,0,0,2,27,1,12,2,4, - 3,122,38,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,102,105,110,100,95,112,97,114,101,110,116,95,112, - 97,116,104,95,110,97,109,101,115,99,1,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,38, - 0,0,0,124,0,0,106,0,0,131,0,0,92,2,0,125, - 1,0,125,2,0,116,1,0,116,2,0,106,3,0,124,1, - 0,25,124,2,0,131,2,0,83,41,1,78,41,4,114,239, - 0,0,0,114,119,0,0,0,114,8,0,0,0,218,7,109, - 111,100,117,108,101,115,41,3,114,110,0,0,0,90,18,112, - 97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109, - 101,90,14,112,97,116,104,95,97,116,116,114,95,110,97,109, - 101,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,234,0,0,0,200,3,0,0,115,4,0,0,0,0,1, - 18,1,122,31,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,103,101,116,95,112,97,114,101,110,116,95,112, - 97,116,104,99,1,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,118,0,0,0,116,0,0, - 124,0,0,106,1,0,131,0,0,131,1,0,125,1,0,124, - 1,0,124,0,0,106,2,0,107,3,0,114,111,0,124,0, - 0,106,3,0,124,0,0,106,4,0,124,1,0,131,2,0, - 125,2,0,124,2,0,100,0,0,107,9,0,114,102,0,124, - 2,0,106,5,0,100,0,0,107,8,0,114,102,0,124,2, - 0,106,6,0,114,102,0,124,2,0,106,6,0,124,0,0, - 95,7,0,124,1,0,124,0,0,95,2,0,124,0,0,106, - 7,0,83,41,1,78,41,8,114,95,0,0,0,114,234,0, - 0,0,114,235,0,0,0,114,236,0,0,0,114,232,0,0, - 0,114,129,0,0,0,114,158,0,0,0,114,233,0,0,0, - 41,3,114,110,0,0,0,90,11,112,97,114,101,110,116,95, - 112,97,116,104,114,166,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108, - 99,117,108,97,116,101,204,3,0,0,115,16,0,0,0,0, - 2,18,1,15,1,21,3,27,1,9,1,12,1,9,1,122, - 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,114,101,99,97,108,99,117,108,97,116,101,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,16,0,0,0,116,0,0,124,0,0,106,1,0,131, - 0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101, - 114,114,241,0,0,0,41,1,114,110,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,6,0,0,0,218,8,95,95, - 105,116,101,114,95,95,217,3,0,0,115,2,0,0,0,0, - 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,6,0,0, + 0,124,0,106,0,83,0,41,1,122,58,82,101,116,117,114, + 110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, + 101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,115, + 32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,105, + 110,100,101,114,46,41,1,114,37,0,0,0,41,2,114,104, + 0,0,0,114,123,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,155,0,0,0,178,3,0,0, + 115,2,0,0,0,0,3,122,32,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,102,105,108,101,110,97,109,101,78,41,14,114,109,0,0, + 0,114,108,0,0,0,114,110,0,0,0,114,111,0,0,0, + 114,182,0,0,0,114,210,0,0,0,114,212,0,0,0,114, + 183,0,0,0,114,188,0,0,0,114,157,0,0,0,114,184, + 0,0,0,114,199,0,0,0,114,120,0,0,0,114,155,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,221,0,0,0,131,3,0,0,115, + 20,0,0,0,8,6,4,2,8,4,8,4,8,3,8,8, + 8,6,8,6,8,4,8,4,114,221,0,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, + 0,0,115,96,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, + 0,90,5,100,6,100,7,132,0,90,6,100,8,100,9,132, + 0,90,7,100,10,100,11,132,0,90,8,100,12,100,13,132, + 0,90,9,100,14,100,15,132,0,90,10,100,16,100,17,132, + 0,90,11,100,18,100,19,132,0,90,12,100,20,100,21,132, + 0,90,13,100,22,83,0,41,23,218,14,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,101, + 112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115, + 112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112, + 97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104, + 101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32, + 32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97, + 114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100, + 32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108, + 111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101, + 110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95, + 95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104, + 97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108, + 101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32, + 114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32, + 117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101, + 114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101, + 108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112, + 97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112, + 97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112, + 97,116,104,46,99,4,0,0,0,0,0,0,0,4,0,0, + 0,2,0,0,0,67,0,0,0,115,36,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,116,2,124,0,106,3, + 131,0,131,1,124,0,95,4,124,3,124,0,95,5,100,0, + 83,0,41,1,78,41,6,218,5,95,110,97,109,101,218,5, + 95,112,97,116,104,114,97,0,0,0,218,16,95,103,101,116, + 95,112,97,114,101,110,116,95,112,97,116,104,218,17,95,108, + 97,115,116,95,112,97,114,101,110,116,95,112,97,116,104,218, + 12,95,112,97,116,104,95,102,105,110,100,101,114,41,4,114, + 104,0,0,0,114,102,0,0,0,114,37,0,0,0,218,11, + 112,97,116,104,95,102,105,110,100,101,114,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,182,0,0,0,191, + 3,0,0,115,8,0,0,0,0,1,6,1,6,1,14,1, + 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, + 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,124,0,106,0,106,1,100,1,131,1,92,3,125, + 1,125,2,125,3,124,2,100,2,107,2,114,30,100,6,83, + 0,124,1,100,5,102,2,83,0,41,7,122,62,82,101,116, + 117,114,110,115,32,97,32,116,117,112,108,101,32,111,102,32, + 40,112,97,114,101,110,116,45,109,111,100,117,108,101,45,110, + 97,109,101,44,32,112,97,114,101,110,116,45,112,97,116,104, + 45,97,116,116,114,45,110,97,109,101,41,114,61,0,0,0, + 114,32,0,0,0,114,8,0,0,0,114,37,0,0,0,90, + 8,95,95,112,97,116,104,95,95,41,2,114,8,0,0,0, + 114,37,0,0,0,41,2,114,228,0,0,0,114,34,0,0, + 0,41,4,114,104,0,0,0,114,219,0,0,0,218,3,100, + 111,116,90,2,109,101,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,23,95,102,105,110,100,95,112,97,114, + 101,110,116,95,112,97,116,104,95,110,97,109,101,115,197,3, + 0,0,115,8,0,0,0,0,2,18,1,8,2,4,3,122, + 38,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, + 104,95,110,97,109,101,115,99,1,0,0,0,0,0,0,0, + 3,0,0,0,3,0,0,0,67,0,0,0,115,28,0,0, + 0,124,0,106,0,131,0,92,2,125,1,125,2,116,1,116, + 2,106,3,124,1,25,0,124,2,131,2,83,0,41,1,78, + 41,4,114,235,0,0,0,114,114,0,0,0,114,8,0,0, + 0,218,7,109,111,100,117,108,101,115,41,3,114,104,0,0, + 0,90,18,112,97,114,101,110,116,95,109,111,100,117,108,101, + 95,110,97,109,101,90,14,112,97,116,104,95,97,116,116,114, + 95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,230,0,0,0,207,3,0,0,115,4,0, + 0,0,0,1,12,1,122,31,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,103,101,116,95,112,97,114,101, + 110,116,95,112,97,116,104,99,1,0,0,0,0,0,0,0, + 3,0,0,0,3,0,0,0,67,0,0,0,115,80,0,0, + 0,116,0,124,0,106,1,131,0,131,1,125,1,124,1,124, + 0,106,2,107,3,114,74,124,0,106,3,124,0,106,4,124, + 1,131,2,125,2,124,2,100,0,107,9,114,68,124,2,106, + 5,100,0,107,8,114,68,124,2,106,6,114,68,124,2,106, + 6,124,0,95,7,124,1,124,0,95,2,124,0,106,7,83, + 0,41,1,78,41,8,114,97,0,0,0,114,230,0,0,0, + 114,231,0,0,0,114,232,0,0,0,114,228,0,0,0,114, + 124,0,0,0,114,154,0,0,0,114,229,0,0,0,41,3, + 114,104,0,0,0,90,11,112,97,114,101,110,116,95,112,97, + 116,104,114,162,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,12,95,114,101,99,97,108,99,117, + 108,97,116,101,211,3,0,0,115,16,0,0,0,0,2,12, + 1,10,1,14,3,18,1,6,1,8,1,6,1,122,27,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,114, + 101,99,97,108,99,117,108,97,116,101,99,1,0,0,0,0, 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 16,0,0,0,116,0,0,124,0,0,106,1,0,131,0,0, - 131,1,0,83,41,1,78,41,2,114,33,0,0,0,114,241, - 0,0,0,41,1,114,110,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,218,7,95,95,108,101,110, - 95,95,220,3,0,0,115,2,0,0,0,0,1,122,22,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, - 108,101,110,95,95,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, - 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,41, - 2,78,122,20,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,40,123,33,114,125,41,41,2,114,49,0,0,0,114, - 233,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,218,8,95,95,114,101, - 112,114,95,95,223,3,0,0,115,2,0,0,0,0,1,122, - 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,114,101,112,114,95,95,99,2,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0, - 0,0,124,1,0,124,0,0,106,0,0,131,0,0,107,6, - 0,83,41,1,78,41,1,114,241,0,0,0,41,2,114,110, - 0,0,0,218,4,105,116,101,109,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,12,95,95,99,111,110,116, - 97,105,110,115,95,95,226,3,0,0,115,2,0,0,0,0, - 1,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2, - 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, - 0,0,0,115,20,0,0,0,124,0,0,106,0,0,106,1, - 0,124,1,0,131,1,0,1,100,0,0,83,41,1,78,41, - 2,114,233,0,0,0,114,165,0,0,0,41,2,114,110,0, - 0,0,114,246,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,6,0,0,0,114,165,0,0,0,229,3,0,0,115, - 2,0,0,0,0,1,122,21,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,97,112,112,101,110,100,78,41,13, - 114,114,0,0,0,114,113,0,0,0,114,115,0,0,0,114, - 116,0,0,0,114,186,0,0,0,114,239,0,0,0,114,234, - 0,0,0,114,241,0,0,0,114,243,0,0,0,114,244,0, - 0,0,114,245,0,0,0,114,247,0,0,0,114,165,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,231,0,0,0,177,3,0,0,115,20, - 0,0,0,12,5,6,2,12,6,12,10,12,4,12,13,12, - 3,12,3,12,3,12,3,114,231,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, - 0,115,118,0,0,0,101,0,0,90,1,0,100,0,0,90, - 2,0,100,1,0,100,2,0,132,0,0,90,3,0,101,4, - 0,100,3,0,100,4,0,132,0,0,131,1,0,90,5,0, - 100,5,0,100,6,0,132,0,0,90,6,0,100,7,0,100, - 8,0,132,0,0,90,7,0,100,9,0,100,10,0,132,0, - 0,90,8,0,100,11,0,100,12,0,132,0,0,90,9,0, - 100,13,0,100,14,0,132,0,0,90,10,0,100,15,0,100, - 16,0,132,0,0,90,11,0,100,17,0,83,41,18,218,16, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 99,4,0,0,0,0,0,0,0,4,0,0,0,4,0,0, - 0,67,0,0,0,115,25,0,0,0,116,0,0,124,1,0, - 124,2,0,124,3,0,131,3,0,124,0,0,95,1,0,100, - 0,0,83,41,1,78,41,2,114,231,0,0,0,114,233,0, - 0,0,41,4,114,110,0,0,0,114,108,0,0,0,114,37, - 0,0,0,114,237,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,6,0,0,0,114,186,0,0,0,235,3,0,0, - 115,2,0,0,0,0,1,122,25,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,95,95,105,110,105,116, + 12,0,0,0,116,0,124,0,106,1,131,0,131,1,83,0, + 41,1,78,41,2,218,4,105,116,101,114,114,237,0,0,0, + 41,1,114,104,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,8,95,95,105,116,101,114,95,95, + 224,3,0,0,115,2,0,0,0,0,1,122,23,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,116, + 101,114,95,95,99,3,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,14,0,0,0,124,2, + 124,0,106,0,124,1,60,0,100,0,83,0,41,1,78,41, + 1,114,229,0,0,0,41,3,114,104,0,0,0,218,5,105, + 110,100,101,120,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,11,95,95,115,101,116,105, + 116,101,109,95,95,227,3,0,0,115,2,0,0,0,0,1, + 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,115,101,116,105,116,101,109,95,95,99,1,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, + 0,115,12,0,0,0,116,0,124,0,106,1,131,0,131,1, + 83,0,41,1,78,41,2,114,33,0,0,0,114,237,0,0, + 0,41,1,114,104,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,7,95,95,108,101,110,95,95, + 230,3,0,0,115,2,0,0,0,0,1,122,22,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,101, + 110,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,12,0,0,0,100,1,106, + 0,124,0,106,1,131,1,83,0,41,2,78,122,20,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,40,123,33,114, + 125,41,41,2,114,50,0,0,0,114,229,0,0,0,41,1, + 114,104,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,8,95,95,114,101,112,114,95,95,233,3, + 0,0,115,2,0,0,0,0,1,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,114,101,112,114, 95,95,99,2,0,0,0,0,0,0,0,2,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, - 0,0,124,1,0,106,1,0,131,1,0,83,41,2,122,115, - 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, - 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, - 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, - 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, - 32,32,32,122,25,60,109,111,100,117,108,101,32,123,33,114, - 125,32,40,110,97,109,101,115,112,97,99,101,41,62,41,2, - 114,49,0,0,0,114,114,0,0,0,41,2,114,172,0,0, - 0,114,191,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,218,11,109,111,100,117,108,101,95,114,101, - 112,114,238,3,0,0,115,2,0,0,0,0,7,122,28,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,0,83,41,2,78,84,114,4,0, - 0,0,41,2,114,110,0,0,0,114,128,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,6,0,0,0,114,161,0, - 0,0,247,3,0,0,115,2,0,0,0,0,1,122,27,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, - 4,0,0,0,100,1,0,83,41,2,78,114,32,0,0,0, - 114,4,0,0,0,41,2,114,110,0,0,0,114,128,0,0, + 0,0,0,67,0,0,0,115,12,0,0,0,124,1,124,0, + 106,0,131,0,107,6,83,0,41,1,78,41,1,114,237,0, + 0,0,41,2,114,104,0,0,0,218,4,105,116,101,109,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,12, + 95,95,99,111,110,116,97,105,110,115,95,95,236,3,0,0, + 115,2,0,0,0,0,1,122,27,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,95,99,111,110,116,97,105, + 110,115,95,95,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,0, + 106,0,106,1,124,1,131,1,1,0,100,0,83,0,41,1, + 78,41,2,114,229,0,0,0,114,161,0,0,0,41,2,114, + 104,0,0,0,114,244,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,161,0,0,0,239,3,0, + 0,115,2,0,0,0,0,1,122,21,95,78,97,109,101,115, + 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, + 41,14,114,109,0,0,0,114,108,0,0,0,114,110,0,0, + 0,114,111,0,0,0,114,182,0,0,0,114,235,0,0,0, + 114,230,0,0,0,114,237,0,0,0,114,239,0,0,0,114, + 241,0,0,0,114,242,0,0,0,114,243,0,0,0,114,245, + 0,0,0,114,161,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,227,0,0, + 0,184,3,0,0,115,22,0,0,0,8,5,4,2,8,6, + 8,10,8,4,8,13,8,3,8,3,8,3,8,3,8,3, + 114,227,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,64,0,0,0,115,80,0,0,0,101, + 0,90,1,100,0,90,2,100,1,100,2,132,0,90,3,101, + 4,100,3,100,4,132,0,131,1,90,5,100,5,100,6,132, + 0,90,6,100,7,100,8,132,0,90,7,100,9,100,10,132, + 0,90,8,100,11,100,12,132,0,90,9,100,13,100,14,132, + 0,90,10,100,15,100,16,132,0,90,11,100,17,83,0,41, + 18,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,99,4,0,0,0,0,0,0,0,4,0,0,0, + 4,0,0,0,67,0,0,0,115,18,0,0,0,116,0,124, + 1,124,2,124,3,131,3,124,0,95,1,100,0,83,0,41, + 1,78,41,2,114,227,0,0,0,114,229,0,0,0,41,4, + 114,104,0,0,0,114,102,0,0,0,114,37,0,0,0,114, + 233,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,182,0,0,0,245,3,0,0,115,2,0,0, + 0,0,1,122,25,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,2, + 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, + 0,0,0,115,12,0,0,0,100,1,106,0,124,1,106,1, + 131,1,83,0,41,2,122,115,82,101,116,117,114,110,32,114, + 101,112,114,32,102,111,114,32,116,104,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,101, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,84,104,101,32,105,109,112,111, + 114,116,32,109,97,99,104,105,110,101,114,121,32,100,111,101, + 115,32,116,104,101,32,106,111,98,32,105,116,115,101,108,102, + 46,10,10,32,32,32,32,32,32,32,32,122,25,60,109,111, + 100,117,108,101,32,123,33,114,125,32,40,110,97,109,101,115, + 112,97,99,101,41,62,41,2,114,50,0,0,0,114,109,0, + 0,0,41,2,114,168,0,0,0,114,187,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,11,109, + 111,100,117,108,101,95,114,101,112,114,248,3,0,0,115,2, + 0,0,0,0,7,122,28,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,109,111,100,117,108,101,95,114, + 101,112,114,99,2,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, + 0,41,2,78,84,114,4,0,0,0,41,2,114,104,0,0, + 0,114,123,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,157,0,0,0,1,4,0,0,115,2, + 0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, + 103,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, + 41,2,78,114,32,0,0,0,114,4,0,0,0,41,2,114, + 104,0,0,0,114,123,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,199,0,0,0,4,4,0, + 0,115,2,0,0,0,0,1,122,27,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,6,0,0,0,67,0,0,0,115,16,0,0,0,116, + 0,100,1,100,2,100,3,100,4,100,5,141,4,83,0,41, + 6,78,114,32,0,0,0,122,8,60,115,116,114,105,110,103, + 62,114,186,0,0,0,84,41,1,114,201,0,0,0,41,1, + 114,202,0,0,0,41,2,114,104,0,0,0,114,123,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,203,0,0,0,250,3,0,0,115,2,0,0,0,0,1, - 122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, - 0,0,0,0,0,0,2,0,0,0,6,0,0,0,67,0, - 0,0,115,22,0,0,0,116,0,0,100,1,0,100,2,0, - 100,3,0,100,4,0,100,5,0,131,3,1,83,41,6,78, - 114,32,0,0,0,122,8,60,115,116,114,105,110,103,62,114, - 190,0,0,0,114,205,0,0,0,84,41,1,114,206,0,0, - 0,41,2,114,110,0,0,0,114,128,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,6,0,0,0,114,188,0,0, - 0,253,3,0,0,115,2,0,0,0,0,1,122,25,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,103, - 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,0,83,41,2,122,42,85,115,101,32,100,101,102, - 97,117,108,116,32,115,101,109,97,110,116,105,99,115,32,102, - 111,114,32,109,111,100,117,108,101,32,99,114,101,97,116,105, - 111,110,46,78,114,4,0,0,0,41,2,114,110,0,0,0, - 114,166,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 6,0,0,0,114,187,0,0,0,0,4,0,0,115,0,0, - 0,0,122,30,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,99,114,101,97,116,101,95,109,111,100,117, - 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,0,0,83, - 41,1,78,114,4,0,0,0,41,2,114,110,0,0,0,114, - 191,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,192,0,0,0,3,4,0,0,115,2,0,0, - 0,0,1,122,28,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,32,0,0,0,116,0,0,100,1, - 0,124,0,0,106,1,0,131,2,0,1,116,2,0,106,3, - 0,124,0,0,124,1,0,131,2,0,83,41,2,122,98,76, - 111,97,100,32,97,32,110,97,109,101,115,112,97,99,101,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, - 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,122,38,110,97,109,101,115,112,97,99,101,32,109,111,100, - 117,108,101,32,108,111,97,100,101,100,32,119,105,116,104,32, - 112,97,116,104,32,123,33,114,125,41,4,114,107,0,0,0, - 114,233,0,0,0,114,123,0,0,0,114,193,0,0,0,41, - 2,114,110,0,0,0,114,128,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,114,194,0,0,0,6, - 4,0,0,115,4,0,0,0,0,7,16,1,122,28,95,78, + 114,184,0,0,0,7,4,0,0,115,2,0,0,0,0,1, + 122,25,95,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,83,0,41,2,122,42,85,115,101, + 32,100,101,102,97,117,108,116,32,115,101,109,97,110,116,105, + 99,115,32,102,111,114,32,109,111,100,117,108,101,32,99,114, + 101,97,116,105,111,110,46,78,114,4,0,0,0,41,2,114, + 104,0,0,0,114,162,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,183,0,0,0,10,4,0, + 0,115,0,0,0,0,122,30,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,99,114,101,97,116,101,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,0,83,0,41,1,78,114,4,0,0,0,41,2,114,104, + 0,0,0,114,187,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,188,0,0,0,13,4,0,0, + 115,2,0,0,0,0,1,122,28,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,101,120,101,99,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,116, + 0,106,1,100,1,124,0,106,2,131,2,1,0,116,0,106, + 3,124,0,124,1,131,2,83,0,41,2,122,98,76,111,97, + 100,32,97,32,110,97,109,101,115,112,97,99,101,32,109,111, + 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, + 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, + 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,122, + 38,110,97,109,101,115,112,97,99,101,32,109,111,100,117,108, + 101,32,108,111,97,100,101,100,32,119,105,116,104,32,112,97, + 116,104,32,123,33,114,125,41,4,114,118,0,0,0,114,133, + 0,0,0,114,229,0,0,0,114,189,0,0,0,41,2,114, + 104,0,0,0,114,123,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,190,0,0,0,16,4,0, + 0,115,6,0,0,0,0,7,6,1,8,1,122,28,95,78, 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,108, - 111,97,100,95,109,111,100,117,108,101,78,41,12,114,114,0, - 0,0,114,113,0,0,0,114,115,0,0,0,114,186,0,0, - 0,114,184,0,0,0,114,249,0,0,0,114,161,0,0,0, - 114,203,0,0,0,114,188,0,0,0,114,187,0,0,0,114, - 192,0,0,0,114,194,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,6,0,0,0,114,248,0, - 0,0,234,3,0,0,115,16,0,0,0,12,1,12,3,18, - 9,12,3,12,3,12,3,12,3,12,3,114,248,0,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,64,0,0,0,115,160,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,90,3,0,101,4,0,100, - 2,0,100,3,0,132,0,0,131,1,0,90,5,0,101,4, - 0,100,4,0,100,5,0,132,0,0,131,1,0,90,6,0, - 101,4,0,100,6,0,100,7,0,132,0,0,131,1,0,90, - 7,0,101,4,0,100,8,0,100,9,0,132,0,0,131,1, - 0,90,8,0,101,4,0,100,10,0,100,11,0,100,12,0, - 132,1,0,131,1,0,90,9,0,101,4,0,100,10,0,100, - 10,0,100,13,0,100,14,0,132,2,0,131,1,0,90,10, - 0,101,4,0,100,10,0,100,15,0,100,16,0,132,1,0, - 131,1,0,90,11,0,100,10,0,83,41,17,218,10,80,97, - 116,104,70,105,110,100,101,114,122,62,77,101,116,97,32,112, - 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,115, - 121,115,46,112,97,116,104,32,97,110,100,32,112,97,99,107, - 97,103,101,32,95,95,112,97,116,104,95,95,32,97,116,116, - 114,105,98,117,116,101,115,46,99,1,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,67,0,0,0,115,55,0, - 0,0,120,48,0,116,0,0,106,1,0,106,2,0,131,0, - 0,68,93,31,0,125,1,0,116,3,0,124,1,0,100,1, - 0,131,2,0,114,16,0,124,1,0,106,4,0,131,0,0, - 1,113,16,0,87,100,2,0,83,41,3,122,125,67,97,108, - 108,32,116,104,101,32,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,40,41,32,109,101,116,104,111,100, - 32,111,110,32,97,108,108,32,112,97,116,104,32,101,110,116, - 114,121,32,102,105,110,100,101,114,115,10,32,32,32,32,32, - 32,32,32,115,116,111,114,101,100,32,105,110,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,115,32,40,119,104,101,114,101,32,105,109,112, - 108,101,109,101,110,116,101,100,41,46,218,17,105,110,118,97, - 108,105,100,97,116,101,95,99,97,99,104,101,115,78,41,5, - 114,8,0,0,0,218,19,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,218,6,118,97,108,117, - 101,115,114,117,0,0,0,114,251,0,0,0,41,2,114,172, - 0,0,0,218,6,102,105,110,100,101,114,114,4,0,0,0, - 114,4,0,0,0,114,6,0,0,0,114,251,0,0,0,23, - 4,0,0,115,6,0,0,0,0,4,22,1,15,1,122,28, - 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, - 0,0,0,0,0,3,0,0,0,12,0,0,0,67,0,0, - 0,115,107,0,0,0,116,0,0,106,1,0,100,1,0,107, - 9,0,114,41,0,116,0,0,106,1,0,12,114,41,0,116, - 2,0,106,3,0,100,2,0,116,4,0,131,2,0,1,120, - 59,0,116,0,0,106,1,0,68,93,44,0,125,2,0,121, - 14,0,124,2,0,124,1,0,131,1,0,83,87,113,51,0, - 4,116,5,0,107,10,0,114,94,0,1,1,1,119,51,0, - 89,113,51,0,88,113,51,0,87,100,1,0,83,100,1,0, - 83,41,3,122,113,83,101,97,114,99,104,32,115,101,113,117, - 101,110,99,101,32,111,102,32,104,111,111,107,115,32,102,111, - 114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39, - 112,97,116,104,39,46,10,10,32,32,32,32,32,32,32,32, - 73,102,32,39,104,111,111,107,115,39,32,105,115,32,102,97, - 108,115,101,32,116,104,101,110,32,117,115,101,32,115,121,115, - 46,112,97,116,104,95,104,111,111,107,115,46,10,10,32,32, - 32,32,32,32,32,32,78,122,23,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, - 41,6,114,8,0,0,0,218,10,112,97,116,104,95,104,111, - 111,107,115,114,62,0,0,0,114,63,0,0,0,114,127,0, - 0,0,114,109,0,0,0,41,3,114,172,0,0,0,114,37, - 0,0,0,90,4,104,111,111,107,114,4,0,0,0,114,4, - 0,0,0,114,6,0,0,0,218,11,95,112,97,116,104,95, - 104,111,111,107,115,31,4,0,0,115,16,0,0,0,0,7, - 25,1,16,1,16,1,3,1,14,1,13,1,12,2,122,22, - 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, - 95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,3, - 0,0,0,19,0,0,0,67,0,0,0,115,123,0,0,0, - 124,1,0,100,1,0,107,2,0,114,53,0,121,16,0,116, - 0,0,106,1,0,131,0,0,125,1,0,87,110,22,0,4, - 116,2,0,107,10,0,114,52,0,1,1,1,100,2,0,83, - 89,110,1,0,88,121,17,0,116,3,0,106,4,0,124,1, - 0,25,125,2,0,87,110,46,0,4,116,5,0,107,10,0, - 114,118,0,1,1,1,124,0,0,106,6,0,124,1,0,131, - 1,0,125,2,0,124,2,0,116,3,0,106,4,0,124,1, - 0,60,89,110,1,0,88,124,2,0,83,41,3,122,210,71, + 111,97,100,95,109,111,100,117,108,101,78,41,12,114,109,0, + 0,0,114,108,0,0,0,114,110,0,0,0,114,182,0,0, + 0,114,180,0,0,0,114,247,0,0,0,114,157,0,0,0, + 114,199,0,0,0,114,184,0,0,0,114,183,0,0,0,114, + 188,0,0,0,114,190,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,246,0, + 0,0,244,3,0,0,115,16,0,0,0,8,1,8,3,12, + 9,8,3,8,3,8,3,8,3,8,3,114,246,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,106,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,101,4,100,2,100,3,132,0,131,1, + 90,5,101,4,100,4,100,5,132,0,131,1,90,6,101,4, + 100,6,100,7,132,0,131,1,90,7,101,4,100,8,100,9, + 132,0,131,1,90,8,101,4,100,17,100,11,100,12,132,1, + 131,1,90,9,101,4,100,18,100,13,100,14,132,1,131,1, + 90,10,101,4,100,19,100,15,100,16,132,1,131,1,90,11, + 100,10,83,0,41,20,218,10,80,97,116,104,70,105,110,100, + 101,114,122,62,77,101,116,97,32,112,97,116,104,32,102,105, + 110,100,101,114,32,102,111,114,32,115,121,115,46,112,97,116, + 104,32,97,110,100,32,112,97,99,107,97,103,101,32,95,95, + 112,97,116,104,95,95,32,97,116,116,114,105,98,117,116,101, + 115,46,99,1,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,67,0,0,0,115,42,0,0,0,120,36,116,0, + 106,1,106,2,131,0,68,0,93,22,125,1,116,3,124,1, + 100,1,131,2,114,12,124,1,106,4,131,0,1,0,113,12, + 87,0,100,2,83,0,41,3,122,125,67,97,108,108,32,116, + 104,101,32,105,110,118,97,108,105,100,97,116,101,95,99,97, + 99,104,101,115,40,41,32,109,101,116,104,111,100,32,111,110, + 32,97,108,108,32,112,97,116,104,32,101,110,116,114,121,32, + 102,105,110,100,101,114,115,10,32,32,32,32,32,32,32,32, + 115,116,111,114,101,100,32,105,110,32,115,121,115,46,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,115,32,40,119,104,101,114,101,32,105,109,112,108,101,109, + 101,110,116,101,100,41,46,218,17,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,78,41,5,114,8,0, + 0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,218,6,118,97,108,117,101,115,114, + 112,0,0,0,114,249,0,0,0,41,2,114,168,0,0,0, + 218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,249,0,0,0,34,4,0,0, + 115,6,0,0,0,0,4,16,1,10,1,122,28,80,97,116, + 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, + 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, + 0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,86, + 0,0,0,116,0,106,1,100,1,107,9,114,30,116,0,106, + 1,12,0,114,30,116,2,106,3,100,2,116,4,131,2,1, + 0,120,50,116,0,106,1,68,0,93,36,125,2,121,8,124, + 2,124,1,131,1,83,0,4,0,116,5,107,10,114,72,1, + 0,1,0,1,0,119,38,89,0,113,38,88,0,113,38,87, + 0,100,1,83,0,100,1,83,0,41,3,122,46,83,101,97, + 114,99,104,32,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,32,102,111,114,32,97,32,102,105,110,100,101,114,32, + 102,111,114,32,39,112,97,116,104,39,46,78,122,23,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,105,115,32, + 101,109,112,116,121,41,6,114,8,0,0,0,218,10,112,97, + 116,104,95,104,111,111,107,115,114,63,0,0,0,114,64,0, + 0,0,114,122,0,0,0,114,103,0,0,0,41,3,114,168, + 0,0,0,114,37,0,0,0,90,4,104,111,111,107,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,11,95, + 112,97,116,104,95,104,111,111,107,115,42,4,0,0,115,16, + 0,0,0,0,3,18,1,12,1,12,1,2,1,8,1,14, + 1,12,2,122,22,80,97,116,104,70,105,110,100,101,114,46, + 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, + 0,0,0,0,3,0,0,0,19,0,0,0,67,0,0,0, + 115,102,0,0,0,124,1,100,1,107,2,114,42,121,12,116, + 0,106,1,131,0,125,1,87,0,110,20,4,0,116,2,107, + 10,114,40,1,0,1,0,1,0,100,2,83,0,88,0,121, + 14,116,3,106,4,124,1,25,0,125,2,87,0,110,40,4, + 0,116,5,107,10,114,96,1,0,1,0,1,0,124,0,106, + 6,124,1,131,1,125,2,124,2,116,3,106,4,124,1,60, + 0,89,0,110,2,88,0,124,2,83,0,41,3,122,210,71, 101,116,32,116,104,101,32,102,105,110,100,101,114,32,102,111, 114,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, 32,102,114,111,109,32,115,121,115,46,112,97,116,104,95,105, @@ -1995,611 +1868,570 @@ const unsigned char _Py_M__importlib_external[] = { 101,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32, 32,114,32,0,0,0,78,41,7,114,3,0,0,0,114,47, 0,0,0,218,17,70,105,108,101,78,111,116,70,111,117,110, - 100,69,114,114,111,114,114,8,0,0,0,114,252,0,0,0, - 114,139,0,0,0,114,0,1,0,0,41,3,114,172,0,0, - 0,114,37,0,0,0,114,254,0,0,0,114,4,0,0,0, + 100,69,114,114,111,114,114,8,0,0,0,114,250,0,0,0, + 114,135,0,0,0,114,254,0,0,0,41,3,114,168,0,0, + 0,114,37,0,0,0,114,252,0,0,0,114,4,0,0,0, 114,4,0,0,0,114,6,0,0,0,218,20,95,112,97,116, 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 48,4,0,0,115,22,0,0,0,0,8,12,1,3,1,16, - 1,13,3,9,1,3,1,17,1,13,1,15,1,18,1,122, + 55,4,0,0,115,22,0,0,0,0,8,8,1,2,1,12, + 1,14,3,6,1,2,1,14,1,14,1,10,1,16,1,122, 31,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, 99,3,0,0,0,0,0,0,0,6,0,0,0,3,0,0, - 0,67,0,0,0,115,119,0,0,0,116,0,0,124,2,0, - 100,1,0,131,2,0,114,39,0,124,2,0,106,1,0,124, - 1,0,131,1,0,92,2,0,125,3,0,125,4,0,110,21, - 0,124,2,0,106,2,0,124,1,0,131,1,0,125,3,0, - 103,0,0,125,4,0,124,3,0,100,0,0,107,9,0,114, - 88,0,116,3,0,106,4,0,124,1,0,124,3,0,131,2, - 0,83,116,3,0,106,5,0,124,1,0,100,0,0,131,2, - 0,125,5,0,124,4,0,124,5,0,95,6,0,124,5,0, - 83,41,2,78,114,126,0,0,0,41,7,114,117,0,0,0, - 114,126,0,0,0,114,183,0,0,0,114,123,0,0,0,114, - 180,0,0,0,114,162,0,0,0,114,158,0,0,0,41,6, - 114,172,0,0,0,114,128,0,0,0,114,254,0,0,0,114, - 129,0,0,0,114,130,0,0,0,114,166,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,6,0,0,0,218,16,95, - 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,70, - 4,0,0,115,18,0,0,0,0,4,15,1,24,2,15,1, - 6,1,12,1,16,1,18,1,9,1,122,27,80,97,116,104, - 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, - 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, - 0,9,0,0,0,5,0,0,0,67,0,0,0,115,243,0, - 0,0,103,0,0,125,4,0,120,230,0,124,2,0,68,93, - 191,0,125,5,0,116,0,0,124,5,0,116,1,0,116,2, - 0,102,2,0,131,2,0,115,43,0,113,13,0,124,0,0, - 106,3,0,124,5,0,131,1,0,125,6,0,124,6,0,100, - 1,0,107,9,0,114,13,0,116,4,0,124,6,0,100,2, - 0,131,2,0,114,106,0,124,6,0,106,5,0,124,1,0, - 124,3,0,131,2,0,125,7,0,110,18,0,124,0,0,106, - 6,0,124,1,0,124,6,0,131,2,0,125,7,0,124,7, - 0,100,1,0,107,8,0,114,139,0,113,13,0,124,7,0, - 106,7,0,100,1,0,107,9,0,114,158,0,124,7,0,83, - 124,7,0,106,8,0,125,8,0,124,8,0,100,1,0,107, - 8,0,114,191,0,116,9,0,100,3,0,131,1,0,130,1, - 0,124,4,0,106,10,0,124,8,0,131,1,0,1,113,13, - 0,87,116,11,0,106,12,0,124,1,0,100,1,0,131,2, - 0,125,7,0,124,4,0,124,7,0,95,8,0,124,7,0, - 83,100,1,0,83,41,4,122,63,70,105,110,100,32,116,104, - 101,32,108,111,97,100,101,114,32,111,114,32,110,97,109,101, - 115,112,97,99,101,95,112,97,116,104,32,102,111,114,32,116, - 104,105,115,32,109,111,100,117,108,101,47,112,97,99,107,97, - 103,101,32,110,97,109,101,46,78,114,182,0,0,0,122,19, - 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, - 100,101,114,41,13,114,145,0,0,0,114,71,0,0,0,218, - 5,98,121,116,101,115,114,2,1,0,0,114,117,0,0,0, - 114,182,0,0,0,114,3,1,0,0,114,129,0,0,0,114, - 158,0,0,0,114,109,0,0,0,114,151,0,0,0,114,123, - 0,0,0,114,162,0,0,0,41,9,114,172,0,0,0,114, - 128,0,0,0,114,37,0,0,0,114,181,0,0,0,218,14, - 110,97,109,101,115,112,97,99,101,95,112,97,116,104,90,5, - 101,110,116,114,121,114,254,0,0,0,114,166,0,0,0,114, - 130,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,218,9,95,103,101,116,95,115,112,101,99,85,4, - 0,0,115,40,0,0,0,0,5,6,1,13,1,21,1,3, - 1,15,1,12,1,15,1,21,2,18,1,12,1,3,1,15, - 1,4,1,9,1,12,1,12,5,17,2,18,1,9,1,122, - 20,80,97,116,104,70,105,110,100,101,114,46,95,103,101,116, - 95,115,112,101,99,99,4,0,0,0,0,0,0,0,6,0, - 0,0,4,0,0,0,67,0,0,0,115,140,0,0,0,124, - 2,0,100,1,0,107,8,0,114,21,0,116,0,0,106,1, - 0,125,2,0,124,0,0,106,2,0,124,1,0,124,2,0, - 124,3,0,131,3,0,125,4,0,124,4,0,100,1,0,107, - 8,0,114,58,0,100,1,0,83,124,4,0,106,3,0,100, - 1,0,107,8,0,114,132,0,124,4,0,106,4,0,125,5, - 0,124,5,0,114,125,0,100,2,0,124,4,0,95,5,0, - 116,6,0,124,1,0,124,5,0,124,0,0,106,2,0,131, - 3,0,124,4,0,95,4,0,124,4,0,83,100,1,0,83, - 110,4,0,124,4,0,83,100,1,0,83,41,3,122,98,102, - 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, + 0,67,0,0,0,115,82,0,0,0,116,0,124,2,100,1, + 131,2,114,26,124,2,106,1,124,1,131,1,92,2,125,3, + 125,4,110,14,124,2,106,2,124,1,131,1,125,3,103,0, + 125,4,124,3,100,0,107,9,114,60,116,3,106,4,124,1, + 124,3,131,2,83,0,116,3,106,5,124,1,100,0,131,2, + 125,5,124,4,124,5,95,6,124,5,83,0,41,2,78,114, + 121,0,0,0,41,7,114,112,0,0,0,114,121,0,0,0, + 114,179,0,0,0,114,118,0,0,0,114,176,0,0,0,114, + 158,0,0,0,114,154,0,0,0,41,6,114,168,0,0,0, + 114,123,0,0,0,114,252,0,0,0,114,124,0,0,0,114, + 125,0,0,0,114,162,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,16,95,108,101,103,97,99, + 121,95,103,101,116,95,115,112,101,99,77,4,0,0,115,18, + 0,0,0,0,4,10,1,16,2,10,1,4,1,8,1,12, + 1,12,1,6,1,122,27,80,97,116,104,70,105,110,100,101, + 114,46,95,108,101,103,97,99,121,95,103,101,116,95,115,112, + 101,99,78,99,4,0,0,0,0,0,0,0,9,0,0,0, + 5,0,0,0,67,0,0,0,115,170,0,0,0,103,0,125, + 4,120,160,124,2,68,0,93,130,125,5,116,0,124,5,116, + 1,116,2,102,2,131,2,115,30,113,10,124,0,106,3,124, + 5,131,1,125,6,124,6,100,1,107,9,114,10,116,4,124, + 6,100,2,131,2,114,72,124,6,106,5,124,1,124,3,131, + 2,125,7,110,12,124,0,106,6,124,1,124,6,131,2,125, + 7,124,7,100,1,107,8,114,94,113,10,124,7,106,7,100, + 1,107,9,114,108,124,7,83,0,124,7,106,8,125,8,124, + 8,100,1,107,8,114,130,116,9,100,3,131,1,130,1,124, + 4,106,10,124,8,131,1,1,0,113,10,87,0,116,11,106, + 12,124,1,100,1,131,2,125,7,124,4,124,7,95,8,124, + 7,83,0,100,1,83,0,41,4,122,63,70,105,110,100,32, + 116,104,101,32,108,111,97,100,101,114,32,111,114,32,110,97, + 109,101,115,112,97,99,101,95,112,97,116,104,32,102,111,114, + 32,116,104,105,115,32,109,111,100,117,108,101,47,112,97,99, + 107,97,103,101,32,110,97,109,101,46,78,114,178,0,0,0, + 122,19,115,112,101,99,32,109,105,115,115,105,110,103,32,108, + 111,97,100,101,114,41,13,114,141,0,0,0,114,73,0,0, + 0,218,5,98,121,116,101,115,114,0,1,0,0,114,112,0, + 0,0,114,178,0,0,0,114,1,1,0,0,114,124,0,0, + 0,114,154,0,0,0,114,103,0,0,0,114,147,0,0,0, + 114,118,0,0,0,114,158,0,0,0,41,9,114,168,0,0, + 0,114,123,0,0,0,114,37,0,0,0,114,177,0,0,0, + 218,14,110,97,109,101,115,112,97,99,101,95,112,97,116,104, + 90,5,101,110,116,114,121,114,252,0,0,0,114,162,0,0, + 0,114,125,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,9,95,103,101,116,95,115,112,101,99, + 92,4,0,0,115,40,0,0,0,0,5,4,1,10,1,14, + 1,2,1,10,1,8,1,10,1,14,2,12,1,8,1,2, + 1,10,1,4,1,6,1,8,1,8,5,14,2,12,1,6, + 1,122,20,80,97,116,104,70,105,110,100,101,114,46,95,103, + 101,116,95,115,112,101,99,99,4,0,0,0,0,0,0,0, + 6,0,0,0,4,0,0,0,67,0,0,0,115,104,0,0, + 0,124,2,100,1,107,8,114,14,116,0,106,1,125,2,124, + 0,106,2,124,1,124,2,124,3,131,3,125,4,124,4,100, + 1,107,8,114,42,100,1,83,0,110,58,124,4,106,3,100, + 1,107,8,114,96,124,4,106,4,125,5,124,5,114,90,100, + 2,124,4,95,5,116,6,124,1,124,5,124,0,106,2,131, + 3,124,4,95,4,124,4,83,0,113,100,100,1,83,0,110, + 4,124,4,83,0,100,1,83,0,41,3,122,141,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,115,112,101,99,32, + 102,111,114,32,39,102,117,108,108,110,97,109,101,39,32,111, 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, - 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, - 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, - 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, + 97,116,104,39,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,115,101,97,114,99,104,32,105,115,32,98,97,115, + 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,115,32,97,110,100,32,115,121,115,46,112,97,116, 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 46,78,90,9,110,97,109,101,115,112,97,99,101,41,7,114, - 8,0,0,0,114,37,0,0,0,114,6,1,0,0,114,129, - 0,0,0,114,158,0,0,0,114,160,0,0,0,114,231,0, - 0,0,41,6,114,172,0,0,0,114,128,0,0,0,114,37, - 0,0,0,114,181,0,0,0,114,166,0,0,0,114,5,1, - 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, - 0,114,182,0,0,0,117,4,0,0,115,26,0,0,0,0, - 4,12,1,9,1,21,1,12,1,4,1,15,1,9,1,6, - 3,9,1,24,1,4,2,7,2,122,20,80,97,116,104,70, - 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99, - 3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 67,0,0,0,115,41,0,0,0,124,0,0,106,0,0,124, - 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, - 0,107,8,0,114,34,0,100,1,0,83,124,3,0,106,1, - 0,83,41,2,122,170,102,105,110,100,32,116,104,101,32,109, - 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, - 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, - 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, - 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 78,41,2,114,182,0,0,0,114,129,0,0,0,41,4,114, - 172,0,0,0,114,128,0,0,0,114,37,0,0,0,114,166, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,183,0,0,0,139,4,0,0,115,8,0,0,0, - 0,8,18,1,12,1,4,1,122,22,80,97,116,104,70,105, - 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, - 41,12,114,114,0,0,0,114,113,0,0,0,114,115,0,0, - 0,114,116,0,0,0,114,184,0,0,0,114,251,0,0,0, - 114,0,1,0,0,114,2,1,0,0,114,3,1,0,0,114, - 6,1,0,0,114,182,0,0,0,114,183,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,250,0,0,0,19,4,0,0,115,22,0,0,0, - 12,2,6,2,18,8,18,17,18,22,18,15,3,1,18,31, - 3,1,21,21,3,1,114,250,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, - 115,133,0,0,0,101,0,0,90,1,0,100,0,0,90,2, - 0,100,1,0,90,3,0,100,2,0,100,3,0,132,0,0, - 90,4,0,100,4,0,100,5,0,132,0,0,90,5,0,101, - 6,0,90,7,0,100,6,0,100,7,0,132,0,0,90,8, - 0,100,8,0,100,9,0,132,0,0,90,9,0,100,10,0, - 100,11,0,100,12,0,132,1,0,90,10,0,100,13,0,100, - 14,0,132,0,0,90,11,0,101,12,0,100,15,0,100,16, - 0,132,0,0,131,1,0,90,13,0,100,17,0,100,18,0, - 132,0,0,90,14,0,100,10,0,83,41,19,218,10,70,105, - 108,101,70,105,110,100,101,114,122,172,70,105,108,101,45,98, - 97,115,101,100,32,102,105,110,100,101,114,46,10,10,32,32, - 32,32,73,110,116,101,114,97,99,116,105,111,110,115,32,119, - 105,116,104,32,116,104,101,32,102,105,108,101,32,115,121,115, - 116,101,109,32,97,114,101,32,99,97,99,104,101,100,32,102, - 111,114,32,112,101,114,102,111,114,109,97,110,99,101,44,32, - 98,101,105,110,103,10,32,32,32,32,114,101,102,114,101,115, - 104,101,100,32,119,104,101,110,32,116,104,101,32,100,105,114, - 101,99,116,111,114,121,32,116,104,101,32,102,105,110,100,101, - 114,32,105,115,32,104,97,110,100,108,105,110,103,32,104,97, - 115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,46, - 10,10,32,32,32,32,99,2,0,0,0,0,0,0,0,5, - 0,0,0,5,0,0,0,7,0,0,0,115,122,0,0,0, - 103,0,0,125,3,0,120,52,0,124,2,0,68,93,44,0, - 92,2,0,137,0,0,125,4,0,124,3,0,106,0,0,135, - 0,0,102,1,0,100,1,0,100,2,0,134,0,0,124,4, - 0,68,131,1,0,131,1,0,1,113,13,0,87,124,3,0, - 124,0,0,95,1,0,124,1,0,112,79,0,100,3,0,124, - 0,0,95,2,0,100,6,0,124,0,0,95,3,0,116,4, - 0,131,0,0,124,0,0,95,5,0,116,4,0,131,0,0, - 124,0,0,95,6,0,100,5,0,83,41,7,122,154,73,110, - 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, - 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, - 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, - 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, - 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, - 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, - 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, - 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, - 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, - 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,51,0,0,0,115,27,0, - 0,0,124,0,0,93,17,0,125,1,0,124,1,0,136,0, - 0,102,2,0,86,1,113,3,0,100,0,0,83,41,1,78, - 114,4,0,0,0,41,2,114,24,0,0,0,114,226,0,0, - 0,41,1,114,129,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,228,0,0,0,168,4,0,0,115,2,0,0,0, - 6,0,122,38,70,105,108,101,70,105,110,100,101,114,46,95, - 95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,62, - 46,60,103,101,110,101,120,112,114,62,114,60,0,0,0,114, - 31,0,0,0,78,114,89,0,0,0,41,7,114,151,0,0, - 0,218,8,95,108,111,97,100,101,114,115,114,37,0,0,0, - 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, - 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, - 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, - 97,99,104,101,41,5,114,110,0,0,0,114,37,0,0,0, - 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, - 90,7,108,111,97,100,101,114,115,114,168,0,0,0,114,4, - 0,0,0,41,1,114,129,0,0,0,114,6,0,0,0,114, - 186,0,0,0,162,4,0,0,115,16,0,0,0,0,4,6, - 1,19,1,36,1,9,2,15,1,9,1,12,1,122,19,70, - 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, - 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,13,0,0,0,100,3,0,124, - 0,0,95,0,0,100,2,0,83,41,4,122,31,73,110,118, - 97,108,105,100,97,116,101,32,116,104,101,32,100,105,114,101, - 99,116,111,114,121,32,109,116,105,109,101,46,114,31,0,0, - 0,78,114,89,0,0,0,41,1,114,9,1,0,0,41,1, - 114,110,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 6,0,0,0,114,251,0,0,0,176,4,0,0,115,2,0, - 0,0,0,2,122,28,70,105,108,101,70,105,110,100,101,114, - 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, - 101,115,99,2,0,0,0,0,0,0,0,3,0,0,0,2, - 0,0,0,67,0,0,0,115,59,0,0,0,124,0,0,106, - 0,0,124,1,0,131,1,0,125,2,0,124,2,0,100,1, - 0,107,8,0,114,37,0,100,1,0,103,0,0,102,2,0, - 83,124,2,0,106,1,0,124,2,0,106,2,0,112,55,0, - 103,0,0,102,2,0,83,41,2,122,197,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, - 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, - 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, - 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, - 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, - 114,116,105,111,110,115,41,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 78,41,3,114,182,0,0,0,114,129,0,0,0,114,158,0, - 0,0,41,3,114,110,0,0,0,114,128,0,0,0,114,166, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,114,126,0,0,0,182,4,0,0,115,8,0,0,0, - 0,7,15,1,12,1,10,1,122,22,70,105,108,101,70,105, - 110,100,101,114,46,102,105,110,100,95,108,111,97,100,101,114, - 99,6,0,0,0,0,0,0,0,7,0,0,0,7,0,0, - 0,67,0,0,0,115,40,0,0,0,124,1,0,124,2,0, - 124,3,0,131,2,0,125,6,0,116,0,0,124,2,0,124, - 3,0,100,1,0,124,6,0,100,2,0,124,4,0,131,2, - 2,83,41,3,78,114,129,0,0,0,114,158,0,0,0,41, - 1,114,169,0,0,0,41,7,114,110,0,0,0,114,167,0, - 0,0,114,128,0,0,0,114,37,0,0,0,90,4,115,109, - 115,108,114,181,0,0,0,114,129,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,6,0,0,0,114,6,1,0,0, - 194,4,0,0,115,6,0,0,0,0,1,15,1,18,1,122, - 20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,116, - 95,115,112,101,99,78,99,3,0,0,0,0,0,0,0,14, - 0,0,0,15,0,0,0,67,0,0,0,115,234,1,0,0, - 100,1,0,125,3,0,124,1,0,106,0,0,100,2,0,131, - 1,0,100,3,0,25,125,4,0,121,34,0,116,1,0,124, - 0,0,106,2,0,112,49,0,116,3,0,106,4,0,131,0, - 0,131,1,0,106,5,0,125,5,0,87,110,24,0,4,116, - 6,0,107,10,0,114,85,0,1,1,1,100,10,0,125,5, - 0,89,110,1,0,88,124,5,0,124,0,0,106,7,0,107, - 3,0,114,120,0,124,0,0,106,8,0,131,0,0,1,124, - 5,0,124,0,0,95,7,0,116,9,0,131,0,0,114,153, - 0,124,0,0,106,10,0,125,6,0,124,4,0,106,11,0, - 131,0,0,125,7,0,110,15,0,124,0,0,106,12,0,125, - 6,0,124,4,0,125,7,0,124,7,0,124,6,0,107,6, - 0,114,45,1,116,13,0,124,0,0,106,2,0,124,4,0, - 131,2,0,125,8,0,120,100,0,124,0,0,106,14,0,68, - 93,77,0,92,2,0,125,9,0,125,10,0,100,5,0,124, - 9,0,23,125,11,0,116,13,0,124,8,0,124,11,0,131, - 2,0,125,12,0,116,15,0,124,12,0,131,1,0,114,208, - 0,124,0,0,106,16,0,124,10,0,124,1,0,124,12,0, - 124,8,0,103,1,0,124,2,0,131,5,0,83,113,208,0, - 87,116,17,0,124,8,0,131,1,0,125,3,0,120,123,0, - 124,0,0,106,14,0,68,93,112,0,92,2,0,125,9,0, - 125,10,0,116,13,0,124,0,0,106,2,0,124,4,0,124, - 9,0,23,131,2,0,125,12,0,116,18,0,100,6,0,106, - 19,0,124,12,0,131,1,0,100,7,0,100,3,0,131,1, - 1,1,124,7,0,124,9,0,23,124,6,0,107,6,0,114, - 55,1,116,15,0,124,12,0,131,1,0,114,55,1,124,0, - 0,106,16,0,124,10,0,124,1,0,124,12,0,100,8,0, - 124,2,0,131,5,0,83,113,55,1,87,124,3,0,114,230, - 1,116,18,0,100,9,0,106,19,0,124,8,0,131,1,0, - 131,1,0,1,116,20,0,106,21,0,124,1,0,100,8,0, - 131,2,0,125,13,0,124,8,0,103,1,0,124,13,0,95, - 22,0,124,13,0,83,100,8,0,83,41,11,122,102,84,114, - 121,32,116,111,32,102,105,110,100,32,97,32,115,112,101,99, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,32,109,111,100,117,108,101,46,32,32,82,101,116,117, - 114,110,115,32,116,104,101,10,32,32,32,32,32,32,32,32, - 109,97,116,99,104,105,110,103,32,115,112,101,99,44,32,111, - 114,32,78,111,110,101,32,105,102,32,110,111,116,32,102,111, - 117,110,100,46,70,114,60,0,0,0,114,58,0,0,0,114, - 31,0,0,0,114,186,0,0,0,122,9,116,114,121,105,110, - 103,32,123,125,114,100,0,0,0,78,122,25,112,111,115,115, - 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, - 111,114,32,123,125,114,89,0,0,0,41,23,114,34,0,0, - 0,114,41,0,0,0,114,37,0,0,0,114,3,0,0,0, - 114,47,0,0,0,114,220,0,0,0,114,42,0,0,0,114, - 9,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, - 101,114,7,0,0,0,114,12,1,0,0,114,90,0,0,0, - 114,11,1,0,0,114,30,0,0,0,114,8,1,0,0,114, - 46,0,0,0,114,6,1,0,0,114,48,0,0,0,114,107, - 0,0,0,114,49,0,0,0,114,123,0,0,0,114,162,0, - 0,0,114,158,0,0,0,41,14,114,110,0,0,0,114,128, - 0,0,0,114,181,0,0,0,90,12,105,115,95,110,97,109, - 101,115,112,97,99,101,90,11,116,97,105,108,95,109,111,100, - 117,108,101,114,135,0,0,0,90,5,99,97,99,104,101,90, - 12,99,97,99,104,101,95,109,111,100,117,108,101,90,9,98, - 97,115,101,95,112,97,116,104,114,226,0,0,0,114,167,0, - 0,0,90,13,105,110,105,116,95,102,105,108,101,110,97,109, - 101,90,9,102,117,108,108,95,112,97,116,104,114,166,0,0, + 46,10,32,32,32,32,32,32,32,32,78,90,9,110,97,109, + 101,115,112,97,99,101,41,7,114,8,0,0,0,114,37,0, + 0,0,114,4,1,0,0,114,124,0,0,0,114,154,0,0, + 0,114,156,0,0,0,114,227,0,0,0,41,6,114,168,0, + 0,0,114,123,0,0,0,114,37,0,0,0,114,177,0,0, + 0,114,162,0,0,0,114,3,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,178,0,0,0,124, + 4,0,0,115,26,0,0,0,0,6,8,1,6,1,14,1, + 8,1,6,1,10,1,6,1,4,3,6,1,16,1,6,2, + 6,2,122,20,80,97,116,104,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, + 0,4,0,0,0,3,0,0,0,67,0,0,0,115,30,0, + 0,0,124,0,106,0,124,1,124,2,131,2,125,3,124,3, + 100,1,107,8,114,24,100,1,83,0,124,3,106,1,83,0, + 41,2,122,170,102,105,110,100,32,116,104,101,32,109,111,100, + 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, + 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, + 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, + 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,78,41, + 2,114,178,0,0,0,114,124,0,0,0,41,4,114,168,0, + 0,0,114,123,0,0,0,114,37,0,0,0,114,162,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, - 114,182,0,0,0,199,4,0,0,115,68,0,0,0,0,3, - 6,1,19,1,3,1,34,1,13,1,11,1,15,1,10,1, - 9,2,9,1,9,1,15,2,9,1,6,2,12,1,18,1, - 22,1,10,1,15,1,12,1,32,4,12,2,22,1,22,1, - 25,1,16,1,12,1,29,1,6,1,19,1,18,1,12,1, - 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, - 0,9,0,0,0,13,0,0,0,67,0,0,0,115,11,1, - 0,0,124,0,0,106,0,0,125,1,0,121,31,0,116,1, - 0,106,2,0,124,1,0,112,33,0,116,1,0,106,3,0, - 131,0,0,131,1,0,125,2,0,87,110,33,0,4,116,4, - 0,116,5,0,116,6,0,102,3,0,107,10,0,114,75,0, - 1,1,1,103,0,0,125,2,0,89,110,1,0,88,116,7, - 0,106,8,0,106,9,0,100,1,0,131,1,0,115,112,0, - 116,10,0,124,2,0,131,1,0,124,0,0,95,11,0,110, - 111,0,116,10,0,131,0,0,125,3,0,120,90,0,124,2, - 0,68,93,82,0,125,4,0,124,4,0,106,12,0,100,2, - 0,131,1,0,92,3,0,125,5,0,125,6,0,125,7,0, - 124,6,0,114,191,0,100,3,0,106,13,0,124,5,0,124, - 7,0,106,14,0,131,0,0,131,2,0,125,8,0,110,6, - 0,124,5,0,125,8,0,124,3,0,106,15,0,124,8,0, - 131,1,0,1,113,128,0,87,124,3,0,124,0,0,95,11, - 0,116,7,0,106,8,0,106,9,0,116,16,0,131,1,0, - 114,7,1,100,4,0,100,5,0,132,0,0,124,2,0,68, - 131,1,0,124,0,0,95,17,0,100,6,0,83,41,7,122, - 68,70,105,108,108,32,116,104,101,32,99,97,99,104,101,32, - 111,102,32,112,111,116,101,110,116,105,97,108,32,109,111,100, - 117,108,101,115,32,97,110,100,32,112,97,99,107,97,103,101, - 115,32,102,111,114,32,116,104,105,115,32,100,105,114,101,99, - 116,111,114,121,46,114,0,0,0,0,114,60,0,0,0,122, - 5,123,125,46,123,125,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,83,0,0,0,115,28,0,0,0, - 104,0,0,124,0,0,93,18,0,125,1,0,124,1,0,106, - 0,0,131,0,0,146,2,0,113,6,0,83,114,4,0,0, - 0,41,1,114,90,0,0,0,41,2,114,24,0,0,0,90, - 2,102,110,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,250,9,60,115,101,116,99,111,109,112,62,17,5,0, - 0,115,2,0,0,0,9,0,122,41,70,105,108,101,70,105, - 110,100,101,114,46,95,102,105,108,108,95,99,97,99,104,101, - 46,60,108,111,99,97,108,115,62,46,60,115,101,116,99,111, - 109,112,62,78,41,18,114,37,0,0,0,114,3,0,0,0, - 90,7,108,105,115,116,100,105,114,114,47,0,0,0,114,1, - 1,0,0,218,15,80,101,114,109,105,115,115,105,111,110,69, - 114,114,111,114,218,18,78,111,116,65,68,105,114,101,99,116, - 111,114,121,69,114,114,111,114,114,8,0,0,0,114,9,0, - 0,0,114,10,0,0,0,114,10,1,0,0,114,11,1,0, - 0,114,85,0,0,0,114,49,0,0,0,114,90,0,0,0, - 218,3,97,100,100,114,11,0,0,0,114,12,1,0,0,41, - 9,114,110,0,0,0,114,37,0,0,0,90,8,99,111,110, - 116,101,110,116,115,90,21,108,111,119,101,114,95,115,117,102, - 102,105,120,95,99,111,110,116,101,110,116,115,114,246,0,0, - 0,114,108,0,0,0,114,238,0,0,0,114,226,0,0,0, - 90,8,110,101,119,95,110,97,109,101,114,4,0,0,0,114, - 4,0,0,0,114,6,0,0,0,114,14,1,0,0,244,4, - 0,0,115,34,0,0,0,0,2,9,1,3,1,31,1,22, - 3,11,3,18,1,18,7,9,1,13,1,24,1,6,1,27, - 2,6,1,17,1,9,1,18,1,122,22,70,105,108,101,70, - 105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,104, - 101,99,1,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,7,0,0,0,115,25,0,0,0,135,0,0,135,1, - 0,102,2,0,100,1,0,100,2,0,134,0,0,125,2,0, - 124,2,0,83,41,3,97,20,1,0,0,65,32,99,108,97, - 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, - 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, - 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, - 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, - 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, - 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, - 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, - 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, + 114,179,0,0,0,148,4,0,0,115,8,0,0,0,0,8, + 12,1,8,1,4,1,122,22,80,97,116,104,70,105,110,100, + 101,114,46,102,105,110,100,95,109,111,100,117,108,101,41,1, + 78,41,2,78,78,41,1,78,41,12,114,109,0,0,0,114, + 108,0,0,0,114,110,0,0,0,114,111,0,0,0,114,180, + 0,0,0,114,249,0,0,0,114,254,0,0,0,114,0,1, + 0,0,114,1,1,0,0,114,4,1,0,0,114,178,0,0, + 0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,248,0,0,0,30, + 4,0,0,115,22,0,0,0,8,2,4,2,12,8,12,13, + 12,22,12,15,2,1,12,31,2,1,12,23,2,1,114,248, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,64,0,0,0,115,90,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, + 4,100,4,100,5,132,0,90,5,101,6,90,7,100,6,100, + 7,132,0,90,8,100,8,100,9,132,0,90,9,100,19,100, + 11,100,12,132,1,90,10,100,13,100,14,132,0,90,11,101, + 12,100,15,100,16,132,0,131,1,90,13,100,17,100,18,132, + 0,90,14,100,10,83,0,41,20,218,10,70,105,108,101,70, + 105,110,100,101,114,122,172,70,105,108,101,45,98,97,115,101, + 100,32,102,105,110,100,101,114,46,10,10,32,32,32,32,73, + 110,116,101,114,97,99,116,105,111,110,115,32,119,105,116,104, + 32,116,104,101,32,102,105,108,101,32,115,121,115,116,101,109, + 32,97,114,101,32,99,97,99,104,101,100,32,102,111,114,32, + 112,101,114,102,111,114,109,97,110,99,101,44,32,98,101,105, + 110,103,10,32,32,32,32,114,101,102,114,101,115,104,101,100, + 32,119,104,101,110,32,116,104,101,32,100,105,114,101,99,116, + 111,114,121,32,116,104,101,32,102,105,110,100,101,114,32,105, + 115,32,104,97,110,100,108,105,110,103,32,104,97,115,32,98, + 101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,32, + 32,32,32,99,2,0,0,0,0,0,0,0,5,0,0,0, + 5,0,0,0,7,0,0,0,115,88,0,0,0,103,0,125, + 3,120,40,124,2,68,0,93,32,92,2,137,0,125,4,124, + 3,106,0,135,0,102,1,100,1,100,2,132,8,124,4,68, + 0,131,1,131,1,1,0,113,10,87,0,124,3,124,0,95, + 1,124,1,112,58,100,3,124,0,95,2,100,6,124,0,95, + 3,116,4,131,0,124,0,95,5,116,4,131,0,124,0,95, + 6,100,5,83,0,41,7,122,154,73,110,105,116,105,97,108, + 105,122,101,32,119,105,116,104,32,116,104,101,32,112,97,116, + 104,32,116,111,32,115,101,97,114,99,104,32,111,110,32,97, + 110,100,32,97,32,118,97,114,105,97,98,108,101,32,110,117, + 109,98,101,114,32,111,102,10,32,32,32,32,32,32,32,32, + 50,45,116,117,112,108,101,115,32,99,111,110,116,97,105,110, + 105,110,103,32,116,104,101,32,108,111,97,100,101,114,32,97, + 110,100,32,116,104,101,32,102,105,108,101,32,115,117,102,102, + 105,120,101,115,32,116,104,101,32,108,111,97,100,101,114,10, + 32,32,32,32,32,32,32,32,114,101,99,111,103,110,105,122, + 101,115,46,99,1,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,51,0,0,0,115,22,0,0,0,124,0,93, + 14,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, + 0,83,0,41,1,78,114,4,0,0,0,41,2,114,24,0, + 0,0,114,222,0,0,0,41,1,114,124,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,224,0,0,0,177,4,0, + 0,115,2,0,0,0,4,0,122,38,70,105,108,101,70,105, + 110,100,101,114,46,95,95,105,110,105,116,95,95,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 114,61,0,0,0,114,31,0,0,0,78,114,91,0,0,0, + 41,7,114,147,0,0,0,218,8,95,108,111,97,100,101,114, + 115,114,37,0,0,0,218,11,95,112,97,116,104,95,109,116, + 105,109,101,218,3,115,101,116,218,11,95,112,97,116,104,95, + 99,97,99,104,101,218,19,95,114,101,108,97,120,101,100,95, + 112,97,116,104,95,99,97,99,104,101,41,5,114,104,0,0, + 0,114,37,0,0,0,218,14,108,111,97,100,101,114,95,100, + 101,116,97,105,108,115,90,7,108,111,97,100,101,114,115,114, + 164,0,0,0,114,4,0,0,0,41,1,114,124,0,0,0, + 114,6,0,0,0,114,182,0,0,0,171,4,0,0,115,16, + 0,0,0,0,4,4,1,14,1,28,1,6,2,10,1,6, + 1,8,1,122,19,70,105,108,101,70,105,110,100,101,114,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,1,0,0,0,2,0,0,0,67,0,0,0,115,10,0, + 0,0,100,3,124,0,95,0,100,2,83,0,41,4,122,31, + 73,110,118,97,108,105,100,97,116,101,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,109,116,105,109,101,46,114, + 31,0,0,0,78,114,91,0,0,0,41,1,114,7,1,0, + 0,41,1,114,104,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,249,0,0,0,185,4,0,0, + 115,2,0,0,0,0,2,122,28,70,105,108,101,70,105,110, + 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, + 97,99,104,101,115,99,2,0,0,0,0,0,0,0,3,0, + 0,0,2,0,0,0,67,0,0,0,115,42,0,0,0,124, + 0,106,0,124,1,131,1,125,2,124,2,100,1,107,8,114, + 26,100,1,103,0,102,2,83,0,124,2,106,1,124,2,106, + 2,112,38,103,0,102,2,83,0,41,2,122,197,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, + 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, + 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, + 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, + 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, + 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, + 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,78,41,3,114,178,0,0,0,114,124,0,0,0,114, + 154,0,0,0,41,3,114,104,0,0,0,114,123,0,0,0, + 114,162,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,121,0,0,0,191,4,0,0,115,8,0, + 0,0,0,7,10,1,8,1,8,1,122,22,70,105,108,101, + 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, + 101,114,99,6,0,0,0,0,0,0,0,7,0,0,0,6, + 0,0,0,67,0,0,0,115,26,0,0,0,124,1,124,2, + 124,3,131,2,125,6,116,0,124,2,124,3,124,6,124,4, + 100,1,141,4,83,0,41,2,78,41,2,114,124,0,0,0, + 114,154,0,0,0,41,1,114,165,0,0,0,41,7,114,104, + 0,0,0,114,163,0,0,0,114,123,0,0,0,114,37,0, + 0,0,90,4,115,109,115,108,114,177,0,0,0,114,124,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,4,1,0,0,203,4,0,0,115,6,0,0,0,0, + 1,10,1,8,1,122,20,70,105,108,101,70,105,110,100,101, + 114,46,95,103,101,116,95,115,112,101,99,78,99,3,0,0, + 0,0,0,0,0,14,0,0,0,15,0,0,0,67,0,0, + 0,115,98,1,0,0,100,1,125,3,124,1,106,0,100,2, + 131,1,100,3,25,0,125,4,121,24,116,1,124,0,106,2, + 112,34,116,3,106,4,131,0,131,1,106,5,125,5,87,0, + 110,24,4,0,116,6,107,10,114,66,1,0,1,0,1,0, + 100,10,125,5,89,0,110,2,88,0,124,5,124,0,106,7, + 107,3,114,92,124,0,106,8,131,0,1,0,124,5,124,0, + 95,7,116,9,131,0,114,114,124,0,106,10,125,6,124,4, + 106,11,131,0,125,7,110,10,124,0,106,12,125,6,124,4, + 125,7,124,7,124,6,107,6,114,218,116,13,124,0,106,2, + 124,4,131,2,125,8,120,72,124,0,106,14,68,0,93,54, + 92,2,125,9,125,10,100,5,124,9,23,0,125,11,116,13, + 124,8,124,11,131,2,125,12,116,15,124,12,131,1,114,152, + 124,0,106,16,124,10,124,1,124,12,124,8,103,1,124,2, + 131,5,83,0,113,152,87,0,116,17,124,8,131,1,125,3, + 120,88,124,0,106,14,68,0,93,78,92,2,125,9,125,10, + 116,13,124,0,106,2,124,4,124,9,23,0,131,2,125,12, + 116,18,106,19,100,6,124,12,100,3,100,7,141,3,1,0, + 124,7,124,9,23,0,124,6,107,6,114,226,116,15,124,12, + 131,1,114,226,124,0,106,16,124,10,124,1,124,12,100,8, + 124,2,131,5,83,0,113,226,87,0,124,3,144,1,114,94, + 116,18,106,19,100,9,124,8,131,2,1,0,116,18,106,20, + 124,1,100,8,131,2,125,13,124,8,103,1,124,13,95,21, + 124,13,83,0,100,8,83,0,41,11,122,111,84,114,121,32, + 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,115,32,116,104,101,32,109,97, + 116,99,104,105,110,103,32,115,112,101,99,44,32,111,114,32, + 78,111,110,101,32,105,102,32,110,111,116,32,102,111,117,110, + 100,46,10,32,32,32,32,32,32,32,32,70,114,61,0,0, + 0,114,59,0,0,0,114,31,0,0,0,114,182,0,0,0, + 122,9,116,114,121,105,110,103,32,123,125,41,1,90,9,118, + 101,114,98,111,115,105,116,121,78,122,25,112,111,115,115,105, + 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, + 114,32,123,125,114,91,0,0,0,41,22,114,34,0,0,0, + 114,41,0,0,0,114,37,0,0,0,114,3,0,0,0,114, + 47,0,0,0,114,216,0,0,0,114,42,0,0,0,114,7, + 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, + 114,7,0,0,0,114,10,1,0,0,114,92,0,0,0,114, + 9,1,0,0,114,30,0,0,0,114,6,1,0,0,114,46, + 0,0,0,114,4,1,0,0,114,48,0,0,0,114,118,0, + 0,0,114,133,0,0,0,114,158,0,0,0,114,154,0,0, + 0,41,14,114,104,0,0,0,114,123,0,0,0,114,177,0, + 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, + 90,11,116,97,105,108,95,109,111,100,117,108,101,114,130,0, + 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, + 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, + 116,104,114,222,0,0,0,114,163,0,0,0,90,13,105,110, + 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, + 108,95,112,97,116,104,114,162,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,178,0,0,0,208, + 4,0,0,115,70,0,0,0,0,5,4,1,14,1,2,1, + 24,1,14,1,10,1,10,1,8,1,6,2,6,1,6,1, + 10,2,6,1,4,2,8,1,12,1,16,1,8,1,10,1, + 8,1,24,4,8,2,16,1,16,1,16,1,12,1,8,1, + 10,1,12,1,6,1,12,1,12,1,8,1,4,1,122,20, + 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,1,0,0,0,0,0,0,0,9,0,0, + 0,13,0,0,0,67,0,0,0,115,194,0,0,0,124,0, + 106,0,125,1,121,22,116,1,106,2,124,1,112,22,116,1, + 106,3,131,0,131,1,125,2,87,0,110,30,4,0,116,4, + 116,5,116,6,102,3,107,10,114,58,1,0,1,0,1,0, + 103,0,125,2,89,0,110,2,88,0,116,7,106,8,106,9, + 100,1,131,1,115,84,116,10,124,2,131,1,124,0,95,11, + 110,78,116,10,131,0,125,3,120,64,124,2,68,0,93,56, + 125,4,124,4,106,12,100,2,131,1,92,3,125,5,125,6, + 125,7,124,6,114,138,100,3,106,13,124,5,124,7,106,14, + 131,0,131,2,125,8,110,4,124,5,125,8,124,3,106,15, + 124,8,131,1,1,0,113,96,87,0,124,3,124,0,95,11, + 116,7,106,8,106,9,116,16,131,1,114,190,100,4,100,5, + 132,0,124,2,68,0,131,1,124,0,95,17,100,6,83,0, + 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, + 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, + 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, + 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, + 114,101,99,116,111,114,121,46,114,0,0,0,0,114,61,0, + 0,0,122,5,123,125,46,123,125,99,1,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,83,0,0,0,115,20, + 0,0,0,104,0,124,0,93,12,125,1,124,1,106,0,131, + 0,146,2,113,4,83,0,114,4,0,0,0,41,1,114,92, + 0,0,0,41,2,114,24,0,0,0,90,2,102,110,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,250,9,60, + 115,101,116,99,111,109,112,62,29,5,0,0,115,2,0,0, + 0,6,0,122,41,70,105,108,101,70,105,110,100,101,114,46, + 95,102,105,108,108,95,99,97,99,104,101,46,60,108,111,99, + 97,108,115,62,46,60,115,101,116,99,111,109,112,62,78,41, + 18,114,37,0,0,0,114,3,0,0,0,90,7,108,105,115, + 116,100,105,114,114,47,0,0,0,114,255,0,0,0,218,15, + 80,101,114,109,105,115,115,105,111,110,69,114,114,111,114,218, + 18,78,111,116,65,68,105,114,101,99,116,111,114,121,69,114, + 114,111,114,114,8,0,0,0,114,9,0,0,0,114,10,0, + 0,0,114,8,1,0,0,114,9,1,0,0,114,87,0,0, + 0,114,50,0,0,0,114,92,0,0,0,218,3,97,100,100, + 114,11,0,0,0,114,10,1,0,0,41,9,114,104,0,0, + 0,114,37,0,0,0,90,8,99,111,110,116,101,110,116,115, + 90,21,108,111,119,101,114,95,115,117,102,102,105,120,95,99, + 111,110,116,101,110,116,115,114,244,0,0,0,114,102,0,0, + 0,114,234,0,0,0,114,222,0,0,0,90,8,110,101,119, + 95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,12,1,0,0,0,5,0,0,115,34,0, + 0,0,0,2,6,1,2,1,22,1,20,3,10,3,12,1, + 12,7,6,1,10,1,16,1,4,1,18,2,4,1,14,1, + 6,1,12,1,122,22,70,105,108,101,70,105,110,100,101,114, + 46,95,102,105,108,108,95,99,97,99,104,101,99,1,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,7,0,0, + 0,115,18,0,0,0,135,0,135,1,102,2,100,1,100,2, + 132,8,125,2,124,2,83,0,41,3,97,20,1,0,0,65, + 32,99,108,97,115,115,32,109,101,116,104,111,100,32,119,104, + 105,99,104,32,114,101,116,117,114,110,115,32,97,32,99,108, + 111,115,117,114,101,32,116,111,32,117,115,101,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,10,32,32, + 32,32,32,32,32,32,119,104,105,99,104,32,119,105,108,108, + 32,114,101,116,117,114,110,32,97,110,32,105,110,115,116,97, + 110,99,101,32,117,115,105,110,103,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,108,111,97,100,101,114,115,32, + 97,110,100,32,116,104,101,32,112,97,116,104,10,32,32,32, + 32,32,32,32,32,99,97,108,108,101,100,32,111,110,32,116, + 104,101,32,99,108,111,115,117,114,101,46,10,10,32,32,32, + 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, - 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, - 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, - 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, - 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, - 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, - 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, - 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 19,0,0,0,115,43,0,0,0,116,0,0,124,0,0,131, - 1,0,115,30,0,116,1,0,100,1,0,100,2,0,124,0, - 0,131,1,1,130,1,0,136,0,0,124,0,0,136,1,0, - 140,1,0,83,41,3,122,45,80,97,116,104,32,104,111,111, - 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, - 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, - 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, - 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, - 111,114,116,101,100,114,37,0,0,0,41,2,114,48,0,0, - 0,114,109,0,0,0,41,1,114,37,0,0,0,41,2,114, - 172,0,0,0,114,13,1,0,0,114,4,0,0,0,114,6, - 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, - 111,114,95,70,105,108,101,70,105,110,100,101,114,29,5,0, - 0,115,6,0,0,0,0,2,12,1,18,1,122,54,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, - 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,114,4,0,0,0,41,3,114,172,0,0,0, - 114,13,1,0,0,114,19,1,0,0,114,4,0,0,0,41, - 2,114,172,0,0,0,114,13,1,0,0,114,6,0,0,0, - 218,9,112,97,116,104,95,104,111,111,107,19,5,0,0,115, - 4,0,0,0,0,10,21,6,122,20,70,105,108,101,70,105, - 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, - 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, - 0,0,0,115,16,0,0,0,100,1,0,106,0,0,124,0, - 0,106,1,0,131,1,0,83,41,2,78,122,16,70,105,108, - 101,70,105,110,100,101,114,40,123,33,114,125,41,41,2,114, - 49,0,0,0,114,37,0,0,0,41,1,114,110,0,0,0, + 108,111,115,117,114,101,32,105,115,32,110,111,116,32,97,32, + 100,105,114,101,99,116,111,114,121,44,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,115,10,32,32,32,32,32,32, + 32,32,114,97,105,115,101,100,46,10,10,32,32,32,32,32, + 32,32,32,99,1,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,19,0,0,0,115,34,0,0,0,116,0,124, + 0,131,1,115,20,116,1,100,1,124,0,100,2,141,2,130, + 1,136,0,124,0,102,1,136,1,158,2,142,0,83,0,41, + 3,122,45,80,97,116,104,32,104,111,111,107,32,102,111,114, + 32,105,109,112,111,114,116,108,105,98,46,109,97,99,104,105, + 110,101,114,121,46,70,105,108,101,70,105,110,100,101,114,46, + 122,30,111,110,108,121,32,100,105,114,101,99,116,111,114,105, + 101,115,32,97,114,101,32,115,117,112,112,111,114,116,101,100, + 41,1,114,37,0,0,0,41,2,114,48,0,0,0,114,103, + 0,0,0,41,1,114,37,0,0,0,41,2,114,168,0,0, + 0,114,11,1,0,0,114,4,0,0,0,114,6,0,0,0, + 218,24,112,97,116,104,95,104,111,111,107,95,102,111,114,95, + 70,105,108,101,70,105,110,100,101,114,41,5,0,0,115,6, + 0,0,0,0,2,8,1,12,1,122,54,70,105,108,101,70, + 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,46, + 60,108,111,99,97,108,115,62,46,112,97,116,104,95,104,111, + 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, + 114,114,4,0,0,0,41,3,114,168,0,0,0,114,11,1, + 0,0,114,17,1,0,0,114,4,0,0,0,41,2,114,168, + 0,0,0,114,11,1,0,0,114,6,0,0,0,218,9,112, + 97,116,104,95,104,111,111,107,31,5,0,0,115,4,0,0, + 0,0,10,14,6,122,20,70,105,108,101,70,105,110,100,101, + 114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,0, + 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, + 115,12,0,0,0,100,1,106,0,124,0,106,1,131,1,83, + 0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, + 40,123,33,114,125,41,41,2,114,50,0,0,0,114,37,0, + 0,0,41,1,114,104,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,243,0,0,0,49,5,0, + 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,114,101,112,114,95,95,41,1,78, + 41,15,114,109,0,0,0,114,108,0,0,0,114,110,0,0, + 0,114,111,0,0,0,114,182,0,0,0,114,249,0,0,0, + 114,127,0,0,0,114,179,0,0,0,114,121,0,0,0,114, + 4,1,0,0,114,178,0,0,0,114,12,1,0,0,114,180, + 0,0,0,114,18,1,0,0,114,243,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,5,1,0,0,162,4,0,0,115,20,0,0,0,8, + 7,4,2,8,14,8,4,4,2,8,12,8,5,10,48,8, + 31,12,18,114,5,1,0,0,99,4,0,0,0,0,0,0, + 0,6,0,0,0,11,0,0,0,67,0,0,0,115,146,0, + 0,0,124,0,106,0,100,1,131,1,125,4,124,0,106,0, + 100,2,131,1,125,5,124,4,115,66,124,5,114,36,124,5, + 106,1,125,4,110,30,124,2,124,3,107,2,114,56,116,2, + 124,1,124,2,131,2,125,4,110,10,116,3,124,1,124,2, + 131,2,125,4,124,5,115,84,116,4,124,1,124,2,124,4, + 100,3,141,3,125,5,121,36,124,5,124,0,100,2,60,0, + 124,4,124,0,100,1,60,0,124,2,124,0,100,4,60,0, + 124,3,124,0,100,5,60,0,87,0,110,20,4,0,116,5, + 107,10,114,140,1,0,1,0,1,0,89,0,110,2,88,0, + 100,0,83,0,41,6,78,218,10,95,95,108,111,97,100,101, + 114,95,95,218,8,95,95,115,112,101,99,95,95,41,1,114, + 124,0,0,0,90,8,95,95,102,105,108,101,95,95,90,10, + 95,95,99,97,99,104,101,100,95,95,41,6,218,3,103,101, + 116,114,124,0,0,0,114,220,0,0,0,114,215,0,0,0, + 114,165,0,0,0,218,9,69,120,99,101,112,116,105,111,110, + 41,6,90,2,110,115,114,102,0,0,0,90,8,112,97,116, + 104,110,97,109,101,90,9,99,112,97,116,104,110,97,109,101, + 114,124,0,0,0,114,162,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,14,95,102,105,120,95, + 117,112,95,109,111,100,117,108,101,55,5,0,0,115,34,0, + 0,0,0,2,10,1,10,1,4,1,4,1,8,1,8,1, + 12,2,10,1,4,1,14,1,2,1,8,1,8,1,8,1, + 12,1,14,2,114,23,1,0,0,99,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,116,0,116,1,106,2,131,0,102,2,125,0,116, + 3,116,4,102,2,125,1,116,5,116,6,102,2,125,2,124, + 0,124,1,124,2,103,3,83,0,41,1,122,95,82,101,116, + 117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,102, + 105,108,101,45,98,97,115,101,100,32,109,111,100,117,108,101, + 32,108,111,97,100,101,114,115,46,10,10,32,32,32,32,69, + 97,99,104,32,105,116,101,109,32,105,115,32,97,32,116,117, + 112,108,101,32,40,108,111,97,100,101,114,44,32,115,117,102, + 102,105,120,101,115,41,46,10,32,32,32,32,41,7,114,221, + 0,0,0,114,143,0,0,0,218,18,101,120,116,101,110,115, + 105,111,110,95,115,117,102,102,105,120,101,115,114,215,0,0, + 0,114,88,0,0,0,114,220,0,0,0,114,78,0,0,0, + 41,3,90,10,101,120,116,101,110,115,105,111,110,115,90,6, + 115,111,117,114,99,101,90,8,98,121,116,101,99,111,100,101, 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, - 245,0,0,0,37,5,0,0,115,2,0,0,0,0,1,122, - 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, - 112,114,95,95,41,15,114,114,0,0,0,114,113,0,0,0, - 114,115,0,0,0,114,116,0,0,0,114,186,0,0,0,114, - 251,0,0,0,114,132,0,0,0,114,183,0,0,0,114,126, - 0,0,0,114,6,1,0,0,114,182,0,0,0,114,14,1, - 0,0,114,184,0,0,0,114,20,1,0,0,114,245,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,6,0,0,0,114,7,1,0,0,153,4,0,0,115,20, - 0,0,0,12,7,6,2,12,14,12,4,6,2,12,12,12, - 5,15,45,12,31,18,18,114,7,1,0,0,99,4,0,0, - 0,0,0,0,0,6,0,0,0,11,0,0,0,67,0,0, - 0,115,195,0,0,0,124,0,0,106,0,0,100,1,0,131, - 1,0,125,4,0,124,0,0,106,0,0,100,2,0,131,1, - 0,125,5,0,124,4,0,115,99,0,124,5,0,114,54,0, - 124,5,0,106,1,0,125,4,0,110,45,0,124,2,0,124, - 3,0,107,2,0,114,84,0,116,2,0,124,1,0,124,2, - 0,131,2,0,125,4,0,110,15,0,116,3,0,124,1,0, - 124,2,0,131,2,0,125,4,0,124,5,0,115,126,0,116, - 4,0,124,1,0,124,2,0,100,3,0,124,4,0,131,2, - 1,125,5,0,121,44,0,124,5,0,124,0,0,100,2,0, - 60,124,4,0,124,0,0,100,1,0,60,124,2,0,124,0, - 0,100,4,0,60,124,3,0,124,0,0,100,5,0,60,87, - 110,18,0,4,116,5,0,107,10,0,114,190,0,1,1,1, - 89,110,1,0,88,100,0,0,83,41,6,78,218,10,95,95, - 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, - 95,95,114,129,0,0,0,90,8,95,95,102,105,108,101,95, - 95,90,10,95,95,99,97,99,104,101,100,95,95,41,6,218, - 3,103,101,116,114,129,0,0,0,114,224,0,0,0,114,219, - 0,0,0,114,169,0,0,0,218,9,69,120,99,101,112,116, - 105,111,110,41,6,90,2,110,115,114,108,0,0,0,90,8, - 112,97,116,104,110,97,109,101,90,9,99,112,97,116,104,110, - 97,109,101,114,129,0,0,0,114,166,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,6,0,0,0,218,14,95,102, - 105,120,95,117,112,95,109,111,100,117,108,101,43,5,0,0, - 115,34,0,0,0,0,2,15,1,15,1,6,1,6,1,12, - 1,12,1,18,2,15,1,6,1,21,1,3,1,10,1,10, - 1,10,1,14,1,13,2,114,25,1,0,0,99,0,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,55,0,0,0,116,0,0,116,1,0,106,2,0,131, - 0,0,102,2,0,125,0,0,116,3,0,116,4,0,102,2, - 0,125,1,0,116,5,0,116,6,0,102,2,0,125,2,0, - 124,0,0,124,1,0,124,2,0,103,3,0,83,41,1,122, - 95,82,101,116,117,114,110,115,32,97,32,108,105,115,116,32, - 111,102,32,102,105,108,101,45,98,97,115,101,100,32,109,111, - 100,117,108,101,32,108,111,97,100,101,114,115,46,10,10,32, - 32,32,32,69,97,99,104,32,105,116,101,109,32,105,115,32, - 97,32,116,117,112,108,101,32,40,108,111,97,100,101,114,44, - 32,115,117,102,102,105,120,101,115,41,46,10,32,32,32,32, - 41,7,114,225,0,0,0,114,147,0,0,0,218,18,101,120, - 116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,115, - 114,219,0,0,0,114,86,0,0,0,114,224,0,0,0,114, - 76,0,0,0,41,3,90,10,101,120,116,101,110,115,105,111, - 110,115,90,6,115,111,117,114,99,101,90,8,98,121,116,101, - 99,111,100,101,114,4,0,0,0,114,4,0,0,0,114,6, - 0,0,0,114,163,0,0,0,66,5,0,0,115,8,0,0, - 0,0,5,18,1,12,1,12,1,114,163,0,0,0,99,1, - 0,0,0,0,0,0,0,12,0,0,0,12,0,0,0,67, - 0,0,0,115,70,2,0,0,124,0,0,97,0,0,116,0, - 0,106,1,0,97,1,0,116,0,0,106,2,0,97,2,0, - 116,1,0,106,3,0,116,4,0,25,125,1,0,120,76,0, - 100,26,0,68,93,68,0,125,2,0,124,2,0,116,1,0, - 106,3,0,107,7,0,114,83,0,116,0,0,106,5,0,124, - 2,0,131,1,0,125,3,0,110,13,0,116,1,0,106,3, - 0,124,2,0,25,125,3,0,116,6,0,124,1,0,124,2, - 0,124,3,0,131,3,0,1,113,44,0,87,100,5,0,100, - 6,0,103,1,0,102,2,0,100,7,0,100,8,0,100,6, - 0,103,2,0,102,2,0,102,2,0,125,4,0,120,149,0, - 124,4,0,68,93,129,0,92,2,0,125,5,0,125,6,0, - 116,7,0,100,9,0,100,10,0,132,0,0,124,6,0,68, - 131,1,0,131,1,0,115,199,0,116,8,0,130,1,0,124, - 6,0,100,11,0,25,125,7,0,124,5,0,116,1,0,106, - 3,0,107,6,0,114,241,0,116,1,0,106,3,0,124,5, - 0,25,125,8,0,80,113,156,0,121,20,0,116,0,0,106, - 5,0,124,5,0,131,1,0,125,8,0,80,87,113,156,0, - 4,116,9,0,107,10,0,114,28,1,1,1,1,119,156,0, - 89,113,156,0,88,113,156,0,87,116,9,0,100,12,0,131, - 1,0,130,1,0,116,6,0,124,1,0,100,13,0,124,8, - 0,131,3,0,1,116,6,0,124,1,0,100,14,0,124,7, - 0,131,3,0,1,116,6,0,124,1,0,100,15,0,100,16, - 0,106,10,0,124,6,0,131,1,0,131,3,0,1,121,19, - 0,116,0,0,106,5,0,100,17,0,131,1,0,125,9,0, - 87,110,24,0,4,116,9,0,107,10,0,114,147,1,1,1, - 1,100,18,0,125,9,0,89,110,1,0,88,116,6,0,124, - 1,0,100,17,0,124,9,0,131,3,0,1,116,0,0,106, - 5,0,100,19,0,131,1,0,125,10,0,116,6,0,124,1, - 0,100,19,0,124,10,0,131,3,0,1,124,5,0,100,7, - 0,107,2,0,114,238,1,116,0,0,106,5,0,100,20,0, - 131,1,0,125,11,0,116,6,0,124,1,0,100,21,0,124, - 11,0,131,3,0,1,116,6,0,124,1,0,100,22,0,116, - 11,0,131,0,0,131,3,0,1,116,12,0,106,13,0,116, - 2,0,106,14,0,131,0,0,131,1,0,1,124,5,0,100, - 7,0,107,2,0,114,66,2,116,15,0,106,16,0,100,23, - 0,131,1,0,1,100,24,0,116,12,0,107,6,0,114,66, - 2,100,25,0,116,17,0,95,18,0,100,18,0,83,41,27, - 122,205,83,101,116,117,112,32,116,104,101,32,112,97,116,104, - 45,98,97,115,101,100,32,105,109,112,111,114,116,101,114,115, - 32,102,111,114,32,105,109,112,111,114,116,108,105,98,32,98, - 121,32,105,109,112,111,114,116,105,110,103,32,110,101,101,100, - 101,100,10,32,32,32,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,115,32,97,110,100,32,105,110,106,101, - 99,116,105,110,103,32,116,104,101,109,32,105,110,116,111,32, - 116,104,101,32,103,108,111,98,97,108,32,110,97,109,101,115, - 112,97,99,101,46,10,10,32,32,32,32,79,116,104,101,114, - 32,99,111,109,112,111,110,101,110,116,115,32,97,114,101,32, - 101,120,116,114,97,99,116,101,100,32,102,114,111,109,32,116, - 104,101,32,99,111,114,101,32,98,111,111,116,115,116,114,97, - 112,32,109,111,100,117,108,101,46,10,10,32,32,32,32,114, - 51,0,0,0,114,62,0,0,0,218,8,98,117,105,108,116, - 105,110,115,114,144,0,0,0,90,5,112,111,115,105,120,250, - 1,47,218,2,110,116,250,1,92,99,1,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,115,0,0,0,115,33, - 0,0,0,124,0,0,93,23,0,125,1,0,116,0,0,124, - 1,0,131,1,0,100,0,0,107,2,0,86,1,113,3,0, - 100,1,0,83,41,2,114,31,0,0,0,78,41,1,114,33, - 0,0,0,41,2,114,24,0,0,0,114,79,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,228, - 0,0,0,102,5,0,0,115,2,0,0,0,6,0,122,25, - 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46, - 60,103,101,110,101,120,112,114,62,114,61,0,0,0,122,30, - 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114, - 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,3, - 0,0,0,114,27,0,0,0,114,23,0,0,0,114,32,0, - 0,0,90,7,95,116,104,114,101,97,100,78,90,8,95,119, - 101,97,107,114,101,102,90,6,119,105,110,114,101,103,114,171, - 0,0,0,114,7,0,0,0,122,4,46,112,121,119,122,6, - 95,100,46,112,121,100,84,41,4,114,51,0,0,0,114,62, - 0,0,0,114,27,1,0,0,114,144,0,0,0,41,19,114, - 123,0,0,0,114,8,0,0,0,114,147,0,0,0,114,240, - 0,0,0,114,114,0,0,0,90,18,95,98,117,105,108,116, - 105,110,95,102,114,111,109,95,110,97,109,101,114,118,0,0, - 0,218,3,97,108,108,218,14,65,115,115,101,114,116,105,111, - 110,69,114,114,111,114,114,109,0,0,0,114,28,0,0,0, - 114,13,0,0,0,114,230,0,0,0,114,151,0,0,0,114, - 26,1,0,0,114,86,0,0,0,114,165,0,0,0,114,170, - 0,0,0,114,174,0,0,0,41,12,218,17,95,98,111,111, - 116,115,116,114,97,112,95,109,111,100,117,108,101,90,11,115, - 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, - 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, - 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, - 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, - 114,23,0,0,0,114,27,0,0,0,90,9,111,115,95,109, - 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, - 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, - 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, - 117,108,101,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,218,6,95,115,101,116,117,112,77,5,0,0,115,82, - 0,0,0,0,8,6,1,9,1,9,3,13,1,13,1,15, - 1,18,2,13,1,20,3,33,1,19,2,31,1,10,1,15, - 1,13,1,4,2,3,1,15,1,5,1,13,1,12,2,12, - 1,16,1,16,1,25,3,3,1,19,1,13,2,11,1,16, - 3,15,1,16,3,12,1,15,1,16,3,19,1,19,1,12, - 1,13,1,12,1,114,34,1,0,0,99,1,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 116,0,0,0,116,0,0,124,0,0,131,1,0,1,116,1, - 0,131,0,0,125,1,0,116,2,0,106,3,0,106,4,0, - 116,5,0,106,6,0,124,1,0,140,0,0,103,1,0,131, - 1,0,1,116,7,0,106,8,0,100,1,0,107,2,0,114, - 78,0,116,2,0,106,9,0,106,10,0,116,11,0,131,1, - 0,1,116,2,0,106,9,0,106,10,0,116,12,0,131,1, - 0,1,116,5,0,124,0,0,95,5,0,116,13,0,124,0, - 0,95,13,0,100,2,0,83,41,3,122,41,73,110,115,116, - 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, - 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, - 101,110,116,115,46,114,29,1,0,0,78,41,14,114,34,1, - 0,0,114,163,0,0,0,114,8,0,0,0,114,255,0,0, - 0,114,151,0,0,0,114,7,1,0,0,114,20,1,0,0, - 114,3,0,0,0,114,114,0,0,0,218,9,109,101,116,97, - 95,112,97,116,104,114,165,0,0,0,114,170,0,0,0,114, - 250,0,0,0,114,219,0,0,0,41,2,114,33,1,0,0, - 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, - 101,114,115,114,4,0,0,0,114,4,0,0,0,114,6,0, - 0,0,218,8,95,105,110,115,116,97,108,108,145,5,0,0, - 115,16,0,0,0,0,2,10,1,9,1,28,1,15,1,16, - 1,16,4,9,1,114,36,1,0,0,41,1,114,0,0,0, - 0,41,2,114,1,0,0,0,114,2,0,0,0,41,59,114, - 116,0,0,0,114,12,0,0,0,90,37,95,67,65,83,69, - 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, - 84,70,79,82,77,83,95,66,89,84,69,83,95,75,69,89, - 114,11,0,0,0,114,13,0,0,0,114,19,0,0,0,114, - 21,0,0,0,114,30,0,0,0,114,40,0,0,0,114,41, - 0,0,0,114,45,0,0,0,114,46,0,0,0,114,48,0, - 0,0,114,57,0,0,0,218,4,116,121,112,101,218,8,95, - 95,99,111,100,101,95,95,114,146,0,0,0,114,17,0,0, - 0,114,137,0,0,0,114,16,0,0,0,114,20,0,0,0, - 90,17,95,82,65,87,95,77,65,71,73,67,95,78,85,77, - 66,69,82,114,75,0,0,0,114,74,0,0,0,114,86,0, - 0,0,114,76,0,0,0,90,23,68,69,66,85,71,95,66, - 89,84,69,67,79,68,69,95,83,85,70,70,73,88,69,83, - 90,27,79,80,84,73,77,73,90,69,68,95,66,89,84,69, - 67,79,68,69,95,83,85,70,70,73,88,69,83,114,81,0, - 0,0,114,87,0,0,0,114,93,0,0,0,114,97,0,0, - 0,114,99,0,0,0,114,107,0,0,0,114,125,0,0,0, - 114,132,0,0,0,114,143,0,0,0,114,149,0,0,0,114, - 152,0,0,0,114,157,0,0,0,218,6,111,98,106,101,99, - 116,114,164,0,0,0,114,169,0,0,0,114,170,0,0,0, - 114,185,0,0,0,114,195,0,0,0,114,211,0,0,0,114, - 219,0,0,0,114,224,0,0,0,114,230,0,0,0,114,225, - 0,0,0,114,231,0,0,0,114,248,0,0,0,114,250,0, - 0,0,114,7,1,0,0,114,25,1,0,0,114,163,0,0, - 0,114,34,1,0,0,114,36,1,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,218, - 8,60,109,111,100,117,108,101,62,8,0,0,0,115,106,0, - 0,0,6,16,6,1,6,1,3,1,7,3,12,17,12,5, - 12,5,12,6,12,12,12,10,12,9,12,5,12,7,15,22, - 15,114,22,1,18,2,6,1,6,2,9,2,9,2,10,2, - 21,44,12,33,12,19,12,12,12,12,18,8,12,28,12,17, - 21,55,21,12,18,10,12,14,9,3,12,1,15,65,19,64, - 19,28,22,110,19,41,25,43,25,16,6,3,25,53,19,57, - 19,41,19,134,19,146,15,23,12,11,12,68, + 159,0,0,0,78,5,0,0,115,8,0,0,0,0,5,12, + 1,8,1,8,1,114,159,0,0,0,99,1,0,0,0,0, + 0,0,0,12,0,0,0,12,0,0,0,67,0,0,0,115, + 188,1,0,0,124,0,97,0,116,0,106,1,97,1,116,0, + 106,2,97,2,116,1,106,3,116,4,25,0,125,1,120,56, + 100,26,68,0,93,48,125,2,124,2,116,1,106,3,107,7, + 114,58,116,0,106,5,124,2,131,1,125,3,110,10,116,1, + 106,3,124,2,25,0,125,3,116,6,124,1,124,2,124,3, + 131,3,1,0,113,32,87,0,100,5,100,6,103,1,102,2, + 100,7,100,8,100,6,103,2,102,2,102,2,125,4,120,118, + 124,4,68,0,93,102,92,2,125,5,125,6,116,7,100,9, + 100,10,132,0,124,6,68,0,131,1,131,1,115,142,116,8, + 130,1,124,6,100,11,25,0,125,7,124,5,116,1,106,3, + 107,6,114,174,116,1,106,3,124,5,25,0,125,8,80,0, + 113,112,121,16,116,0,106,5,124,5,131,1,125,8,80,0, + 87,0,113,112,4,0,116,9,107,10,114,212,1,0,1,0, + 1,0,119,112,89,0,113,112,88,0,113,112,87,0,116,9, + 100,12,131,1,130,1,116,6,124,1,100,13,124,8,131,3, + 1,0,116,6,124,1,100,14,124,7,131,3,1,0,116,6, + 124,1,100,15,100,16,106,10,124,6,131,1,131,3,1,0, + 121,14,116,0,106,5,100,17,131,1,125,9,87,0,110,26, + 4,0,116,9,107,10,144,1,114,52,1,0,1,0,1,0, + 100,18,125,9,89,0,110,2,88,0,116,6,124,1,100,17, + 124,9,131,3,1,0,116,0,106,5,100,19,131,1,125,10, + 116,6,124,1,100,19,124,10,131,3,1,0,124,5,100,7, + 107,2,144,1,114,120,116,0,106,5,100,20,131,1,125,11, + 116,6,124,1,100,21,124,11,131,3,1,0,116,6,124,1, + 100,22,116,11,131,0,131,3,1,0,116,12,106,13,116,2, + 106,14,131,0,131,1,1,0,124,5,100,7,107,2,144,1, + 114,184,116,15,106,16,100,23,131,1,1,0,100,24,116,12, + 107,6,144,1,114,184,100,25,116,17,95,18,100,18,83,0, + 41,27,122,205,83,101,116,117,112,32,116,104,101,32,112,97, + 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,101, + 114,115,32,102,111,114,32,105,109,112,111,114,116,108,105,98, + 32,98,121,32,105,109,112,111,114,116,105,110,103,32,110,101, + 101,100,101,100,10,32,32,32,32,98,117,105,108,116,45,105, + 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, + 106,101,99,116,105,110,103,32,116,104,101,109,32,105,110,116, + 111,32,116,104,101,32,103,108,111,98,97,108,32,110,97,109, + 101,115,112,97,99,101,46,10,10,32,32,32,32,79,116,104, + 101,114,32,99,111,109,112,111,110,101,110,116,115,32,97,114, + 101,32,101,120,116,114,97,99,116,101,100,32,102,114,111,109, + 32,116,104,101,32,99,111,114,101,32,98,111,111,116,115,116, + 114,97,112,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,114,52,0,0,0,114,63,0,0,0,218,8,98,117,105, + 108,116,105,110,115,114,140,0,0,0,90,5,112,111,115,105, + 120,250,1,47,218,2,110,116,250,1,92,99,1,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, + 115,26,0,0,0,124,0,93,18,125,1,116,0,124,1,131, + 1,100,0,107,2,86,0,1,0,113,2,100,1,83,0,41, + 2,114,31,0,0,0,78,41,1,114,33,0,0,0,41,2, + 114,24,0,0,0,114,81,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,224,0,0,0,114,5, + 0,0,115,2,0,0,0,4,0,122,25,95,115,101,116,117, + 112,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, + 120,112,114,62,114,62,0,0,0,122,30,105,109,112,111,114, + 116,108,105,98,32,114,101,113,117,105,114,101,115,32,112,111, + 115,105,120,32,111,114,32,110,116,114,3,0,0,0,114,27, + 0,0,0,114,23,0,0,0,114,32,0,0,0,90,7,95, + 116,104,114,101,97,100,78,90,8,95,119,101,97,107,114,101, + 102,90,6,119,105,110,114,101,103,114,167,0,0,0,114,7, + 0,0,0,122,4,46,112,121,119,122,6,95,100,46,112,121, + 100,84,41,4,114,52,0,0,0,114,63,0,0,0,114,25, + 1,0,0,114,140,0,0,0,41,19,114,118,0,0,0,114, + 8,0,0,0,114,143,0,0,0,114,236,0,0,0,114,109, + 0,0,0,90,18,95,98,117,105,108,116,105,110,95,102,114, + 111,109,95,110,97,109,101,114,113,0,0,0,218,3,97,108, + 108,218,14,65,115,115,101,114,116,105,111,110,69,114,114,111, + 114,114,103,0,0,0,114,28,0,0,0,114,13,0,0,0, + 114,226,0,0,0,114,147,0,0,0,114,24,1,0,0,114, + 88,0,0,0,114,161,0,0,0,114,166,0,0,0,114,170, + 0,0,0,41,12,218,17,95,98,111,111,116,115,116,114,97, + 112,95,109,111,100,117,108,101,90,11,115,101,108,102,95,109, + 111,100,117,108,101,90,12,98,117,105,108,116,105,110,95,110, + 97,109,101,90,14,98,117,105,108,116,105,110,95,109,111,100, + 117,108,101,90,10,111,115,95,100,101,116,97,105,108,115,90, + 10,98,117,105,108,116,105,110,95,111,115,114,23,0,0,0, + 114,27,0,0,0,90,9,111,115,95,109,111,100,117,108,101, + 90,13,116,104,114,101,97,100,95,109,111,100,117,108,101,90, + 14,119,101,97,107,114,101,102,95,109,111,100,117,108,101,90, + 13,119,105,110,114,101,103,95,109,111,100,117,108,101,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,6,95, + 115,101,116,117,112,89,5,0,0,115,82,0,0,0,0,8, + 4,1,6,1,6,3,10,1,10,1,10,1,12,2,10,1, + 16,3,22,1,14,2,22,1,8,1,10,1,10,1,4,2, + 2,1,10,1,6,1,14,1,12,2,8,1,12,1,12,1, + 18,3,2,1,14,1,16,2,10,1,12,3,10,1,12,3, + 10,1,10,1,12,3,14,1,14,1,10,1,10,1,10,1, + 114,32,1,0,0,99,1,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,115,72,0,0,0,116, + 0,124,0,131,1,1,0,116,1,131,0,125,1,116,2,106, + 3,106,4,116,5,106,6,124,1,142,0,103,1,131,1,1, + 0,116,7,106,8,100,1,107,2,114,56,116,2,106,9,106, + 10,116,11,131,1,1,0,116,2,106,9,106,10,116,12,131, + 1,1,0,100,2,83,0,41,3,122,41,73,110,115,116,97, + 108,108,32,116,104,101,32,112,97,116,104,45,98,97,115,101, + 100,32,105,109,112,111,114,116,32,99,111,109,112,111,110,101, + 110,116,115,46,114,27,1,0,0,78,41,13,114,32,1,0, + 0,114,159,0,0,0,114,8,0,0,0,114,253,0,0,0, + 114,147,0,0,0,114,5,1,0,0,114,18,1,0,0,114, + 3,0,0,0,114,109,0,0,0,218,9,109,101,116,97,95, + 112,97,116,104,114,161,0,0,0,114,166,0,0,0,114,248, + 0,0,0,41,2,114,31,1,0,0,90,17,115,117,112,112, + 111,114,116,101,100,95,108,111,97,100,101,114,115,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,8,95,105, + 110,115,116,97,108,108,157,5,0,0,115,12,0,0,0,0, + 2,8,1,6,1,20,1,10,1,12,1,114,34,1,0,0, + 41,1,114,0,0,0,0,41,2,114,1,0,0,0,114,2, + 0,0,0,41,1,114,49,0,0,0,41,1,78,41,3,78, + 78,78,41,3,78,78,78,41,2,114,62,0,0,0,114,62, + 0,0,0,41,1,78,41,1,78,41,58,114,111,0,0,0, + 114,12,0,0,0,90,37,95,67,65,83,69,95,73,78,83, + 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, + 77,83,95,66,89,84,69,83,95,75,69,89,114,11,0,0, + 0,114,13,0,0,0,114,19,0,0,0,114,21,0,0,0, + 114,30,0,0,0,114,40,0,0,0,114,41,0,0,0,114, + 45,0,0,0,114,46,0,0,0,114,48,0,0,0,114,58, + 0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,100, + 101,95,95,114,142,0,0,0,114,17,0,0,0,114,132,0, + 0,0,114,16,0,0,0,114,20,0,0,0,90,17,95,82, + 65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114, + 77,0,0,0,114,76,0,0,0,114,88,0,0,0,114,78, + 0,0,0,90,23,68,69,66,85,71,95,66,89,84,69,67, + 79,68,69,95,83,85,70,70,73,88,69,83,90,27,79,80, + 84,73,77,73,90,69,68,95,66,89,84,69,67,79,68,69, + 95,83,85,70,70,73,88,69,83,114,83,0,0,0,114,89, + 0,0,0,114,95,0,0,0,114,99,0,0,0,114,101,0, + 0,0,114,120,0,0,0,114,127,0,0,0,114,139,0,0, + 0,114,145,0,0,0,114,148,0,0,0,114,153,0,0,0, + 218,6,111,98,106,101,99,116,114,160,0,0,0,114,165,0, + 0,0,114,166,0,0,0,114,181,0,0,0,114,191,0,0, + 0,114,207,0,0,0,114,215,0,0,0,114,220,0,0,0, + 114,226,0,0,0,114,221,0,0,0,114,227,0,0,0,114, + 246,0,0,0,114,248,0,0,0,114,5,1,0,0,114,23, + 1,0,0,114,159,0,0,0,114,32,1,0,0,114,34,1, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,8,60,109,111,100,117,108,101,62, + 8,0,0,0,115,108,0,0,0,4,16,4,1,4,1,2, + 1,6,3,8,17,8,5,8,5,8,6,8,12,8,10,8, + 9,8,5,8,7,10,22,10,122,16,1,12,2,4,1,4, + 2,6,2,6,2,8,2,16,45,8,34,8,19,8,12,8, + 12,8,28,8,17,10,55,10,12,10,10,8,14,6,3,4, + 1,14,67,14,64,14,29,16,110,14,41,18,45,18,16,4, + 3,18,53,14,60,14,42,14,127,0,5,14,127,0,22,10, + 23,8,11,8,68, }; diff --git a/Python/makeopcodetargets.py b/Python/makeopcodetargets.py index d9a085552f..023c9e6c9f 100755 --- a/Python/makeopcodetargets.py +++ b/Python/makeopcodetargets.py @@ -3,24 +3,34 @@ (for compilers supporting computed gotos or "labels-as-values", such as gcc). """ -# This code should stay compatible with Python 2.3, at least while -# some of the buildbots have Python 2.3 as their system Python. - -import imp import os +import sys -def find_module(modname): - """Finds and returns a module in the local dist/checkout. - """ - modpath = os.path.join( - os.path.dirname(os.path.dirname(__file__)), "Lib") - return imp.load_module(modname, *imp.find_module(modname, [modpath])) +try: + from importlib.machinery import SourceFileLoader +except ImportError: + import imp + + def find_module(modname): + """Finds and returns a module in the local dist/checkout. + """ + modpath = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "Lib") + return imp.load_module(modname, *imp.find_module(modname, [modpath])) +else: + def find_module(modname): + """Finds and returns a module in the local dist/checkout. + """ + modpath = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "Lib", modname + ".py") + return SourceFileLoader(modname, modpath).load_module() + def write_contents(f): """Write C code contents to the target file object. """ - opcode = find_module("opcode") + opcode = find_module('opcode') targets = ['_unknown_opcode'] * 256 for opname, op in opcode.opmap.items(): targets[op] = "TARGET_%s" % opname @@ -29,15 +39,17 @@ def write_contents(f): f.write("\n};\n") -if __name__ == "__main__": - import sys - assert len(sys.argv) < 3, "Too many arguments" +def main(): + if len(sys.argv) >= 3: + sys.exit("Too many arguments") if len(sys.argv) == 2: target = sys.argv[1] else: target = "Python/opcode_targets.h" - f = open(target, "w") - try: + with open(target, "w") as f: write_contents(f) - finally: - f.close() + print("Jump table written into %s" % target) + + +if __name__ == "__main__": + main() diff --git a/Python/marshal.c b/Python/marshal.c index 5b8de99192..87a4b240a4 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -130,7 +130,7 @@ w_string(const char *s, Py_ssize_t n, WFILE *p) m = p->end - p->ptr; if (p->fp != NULL) { if (n <= m) { - Py_MEMCPY(p->ptr, s, n); + memcpy(p->ptr, s, n); p->ptr += n; } else { @@ -140,7 +140,7 @@ w_string(const char *s, Py_ssize_t n, WFILE *p) } else { if (n <= m || w_reserve(p, n - m)) { - Py_MEMCPY(p->ptr, s, n); + memcpy(p->ptr, s, n); p->ptr += n; } } @@ -263,10 +263,10 @@ w_ref(PyObject *v, char *flag, WFILE *p) if (Py_REFCNT(v) == 1) return 0; - entry = _Py_hashtable_get_entry(p->hashtable, v); + entry = _Py_HASHTABLE_GET_ENTRY(p->hashtable, v); if (entry != NULL) { /* write the reference index to the stream */ - _Py_HASHTABLE_ENTRY_READ_DATA(p->hashtable, &w, sizeof(w), entry); + _Py_HASHTABLE_ENTRY_READ_DATA(p->hashtable, entry, w); /* we don't store "long" indices in the dict */ assert(0 <= w && w <= 0x7fffffff); w_byte(TYPE_REF, p); @@ -571,7 +571,8 @@ static int w_init_refs(WFILE *wf, int version) { if (version >= 3) { - wf->hashtable = _Py_hashtable_new(sizeof(int), _Py_hashtable_hash_ptr, + wf->hashtable = _Py_hashtable_new(sizeof(PyObject *), sizeof(int), + _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (wf->hashtable == NULL) { PyErr_NoMemory(); @@ -582,9 +583,13 @@ w_init_refs(WFILE *wf, int version) } static int -w_decref_entry(_Py_hashtable_entry_t *entry, void *Py_UNUSED(data)) +w_decref_entry(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, + void *Py_UNUSED(data)) { - Py_XDECREF(entry->key); + PyObject *entry_key; + + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, entry_key); + Py_XDECREF(entry_key); return 0; } @@ -643,7 +648,7 @@ typedef struct { PyObject *refs; /* a list */ } RFILE; -static char * +static const char * r_string(Py_ssize_t n, RFILE *p) { Py_ssize_t read = -1; @@ -729,7 +734,7 @@ r_byte(RFILE *p) c = getc(p->fp); } else { - char *ptr = r_string(1, p); + const char *ptr = r_string(1, p); if (ptr != NULL) c = *(unsigned char *) ptr; } @@ -740,9 +745,9 @@ static int r_short(RFILE *p) { short x = -1; - unsigned char *buffer; + const unsigned char *buffer; - buffer = (unsigned char *) r_string(2, p); + buffer = (const unsigned char *) r_string(2, p); if (buffer != NULL) { x = buffer[0]; x |= buffer[1] << 8; @@ -756,9 +761,9 @@ static long r_long(RFILE *p) { long x = -1; - unsigned char *buffer; + const unsigned char *buffer; - buffer = (unsigned char *) r_string(4, p); + buffer = (const unsigned char *) r_string(4, p); if (buffer != NULL) { x = buffer[0]; x |= (long)buffer[1] << 8; @@ -978,7 +983,8 @@ r_object(RFILE *p) case TYPE_FLOAT: { - char buf[256], *ptr; + char buf[256]; + const char *ptr; double dx; n = r_byte(p); if (n == EOF) { @@ -1001,9 +1007,9 @@ r_object(RFILE *p) case TYPE_BINARY_FLOAT: { - unsigned char *buf; + const unsigned char *buf; double x; - buf = (unsigned char *) r_string(8, p); + buf = (const unsigned char *) r_string(8, p); if (buf == NULL) break; x = _PyFloat_Unpack8(buf, 1); @@ -1016,7 +1022,8 @@ r_object(RFILE *p) case TYPE_COMPLEX: { - char buf[256], *ptr; + char buf[256]; + const char *ptr; Py_complex c; n = r_byte(p); if (n == EOF) { @@ -1053,15 +1060,15 @@ r_object(RFILE *p) case TYPE_BINARY_COMPLEX: { - unsigned char *buf; + const unsigned char *buf; Py_complex c; - buf = (unsigned char *) r_string(8, p); + buf = (const unsigned char *) r_string(8, p); if (buf == NULL) break; c.real = _PyFloat_Unpack8(buf, 1); if (c.real == -1.0 && PyErr_Occurred()) break; - buf = (unsigned char *) r_string(8, p); + buf = (const unsigned char *) r_string(8, p); if (buf == NULL) break; c.imag = _PyFloat_Unpack8(buf, 1); @@ -1074,7 +1081,7 @@ r_object(RFILE *p) case TYPE_STRING: { - char *ptr; + const char *ptr; n = r_long(p); if (PyErr_Occurred()) break; @@ -1119,7 +1126,7 @@ r_object(RFILE *p) } _read_ascii: { - char *ptr; + const char *ptr; ptr = r_string(n, p); if (ptr == NULL) break; @@ -1137,7 +1144,7 @@ r_object(RFILE *p) is_interned = 1; case TYPE_UNICODE: { - char *buffer; + const char *buffer; n = r_long(p); if (PyErr_Occurred()) @@ -1264,41 +1271,52 @@ r_object(RFILE *p) PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)"); break; } - v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); - if (type == TYPE_SET) { - R_REF(v); - } else { - /* must use delayed registration of frozensets because they must - * be init with a refcount of 1 - */ - idx = r_ref_reserve(flag, p); - if (idx < 0) - Py_CLEAR(v); /* signal error */ - } - if (v == NULL) - break; - for (i = 0; i < n; i++) { - v2 = r_object(p); - if ( v2 == NULL ) { - if (!PyErr_Occurred()) - PyErr_SetString(PyExc_TypeError, - "NULL object in marshal data for set"); - Py_DECREF(v); - v = NULL; + if (n == 0 && type == TYPE_FROZENSET) { + /* call frozenset() to get the empty frozenset singleton */ + v = PyObject_CallFunction((PyObject*)&PyFrozenSet_Type, NULL); + if (v == NULL) break; + R_REF(v); + retval = v; + } + else { + v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); + if (type == TYPE_SET) { + R_REF(v); + } else { + /* must use delayed registration of frozensets because they must + * be init with a refcount of 1 + */ + idx = r_ref_reserve(flag, p); + if (idx < 0) + Py_CLEAR(v); /* signal error */ } - if (PySet_Add(v, v2) == -1) { - Py_DECREF(v); - Py_DECREF(v2); - v = NULL; + if (v == NULL) break; + + for (i = 0; i < n; i++) { + v2 = r_object(p); + if ( v2 == NULL ) { + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_TypeError, + "NULL object in marshal data for set"); + Py_DECREF(v); + v = NULL; + break; + } + if (PySet_Add(v, v2) == -1) { + Py_DECREF(v); + Py_DECREF(v2); + v = NULL; + break; + } + Py_DECREF(v2); } - Py_DECREF(v2); + if (type != TYPE_SET) + v = r_ref_insert(v, idx, flag, p); + retval = v; } - if (type != TYPE_SET) - v = r_ref_insert(v, idx, flag, p); - retval = v; break; case TYPE_CODE: diff --git a/Python/modsupport.c b/Python/modsupport.c index 0d093711f5..aabee8fa59 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -260,13 +260,12 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) return PyLong_FromUnsignedLong(n); } -#ifdef HAVE_LONG_LONG case 'L': - return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG)); + return PyLong_FromLongLong((long long)va_arg(*p_va, long long)); case 'K': - return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG)); -#endif + return PyLong_FromUnsignedLongLong((long long)va_arg(*p_va, unsigned long long)); + case 'u': { PyObject *v; @@ -318,7 +317,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) case 'U': /* XXX deprecated alias */ { PyObject *v; - char *str = va_arg(*p_va, char *); + const char *str = va_arg(*p_va, const char *); Py_ssize_t n; if (**p_format == '#') { ++*p_format; @@ -351,7 +350,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) case 'y': { PyObject *v; - char *str = va_arg(*p_va, char *); + const char *str = va_arg(*p_va, const char *); Py_ssize_t n; if (**p_format == '#') { ++*p_format; @@ -468,8 +467,7 @@ va_build_value(const char *format, va_list va, int flags) const char *f = format; int n = countformat(f, '\0'); va_list lva; - - Py_VA_COPY(lva, va); + PyObject *retval; if (n < 0) return NULL; @@ -477,9 +475,14 @@ va_build_value(const char *format, va_list va, int flags) Py_INCREF(Py_None); return Py_None; } - if (n == 1) - return do_mkvalue(&f, &lva, flags); - return do_mktuple(&f, &lva, '\0', n, flags); + va_copy(lva, va); + if (n == 1) { + retval = do_mkvalue(&f, &lva, flags); + } else { + retval = do_mktuple(&f, &lva, '\0', n, flags); + } + va_end(lva); + return retval; } diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c index 98429d4b42..a85790e1bf 100644 --- a/Python/mystrtoul.c +++ b/Python/mystrtoul.c @@ -17,7 +17,7 @@ * smallmax[base] is the largest unsigned long i such that * i * base doesn't overflow unsigned long. */ -static unsigned long smallmax[] = { +static const unsigned long smallmax[] = { 0, /* bases 0 and 1 are invalid */ 0, ULONG_MAX / 2, @@ -62,14 +62,14 @@ static unsigned long smallmax[] = { * Note that this is pessimistic if sizeof(long) > 4. */ #if SIZEOF_LONG == 4 -static int digitlimit[] = { +static const int digitlimit[] = { 0, 0, 32, 20, 16, 13, 12, 11, 10, 10, /* 0 - 9 */ 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, /* 10 - 19 */ 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, /* 20 - 29 */ 6, 6, 6, 6, 6, 6, 6}; /* 30 - 36 */ #elif SIZEOF_LONG == 8 /* [int(math.floor(math.log(2**64, i))) for i in range(2, 37)] */ -static int digitlimit[] = { +static const int digitlimit[] = { 0, 0, 64, 40, 32, 27, 24, 22, 21, 20, /* 0 - 9 */ 19, 18, 17, 17, 16, 16, 16, 15, 15, 15, /* 10 - 19 */ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, /* 20 - 29 */ diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 19259e1a71..72d24080d8 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -84,7 +84,7 @@ static void *opcode_targets[256] = { &&TARGET_WITH_CLEANUP_FINISH, &&TARGET_RETURN_VALUE, &&TARGET_IMPORT_STAR, - &&_unknown_opcode, + &&TARGET_SETUP_ANNOTATIONS, &&TARGET_YIELD_VALUE, &&TARGET_POP_BLOCK, &&TARGET_END_FINALLY, @@ -126,22 +126,22 @@ static void *opcode_targets[256] = { &&TARGET_LOAD_FAST, &&TARGET_STORE_FAST, &&TARGET_DELETE_FAST, - &&_unknown_opcode, + &&TARGET_STORE_ANNOTATION, &&_unknown_opcode, &&_unknown_opcode, &&TARGET_RAISE_VARARGS, &&TARGET_CALL_FUNCTION, &&TARGET_MAKE_FUNCTION, &&TARGET_BUILD_SLICE, - &&TARGET_MAKE_CLOSURE, + &&_unknown_opcode, &&TARGET_LOAD_CLOSURE, &&TARGET_LOAD_DEREF, &&TARGET_STORE_DEREF, &&TARGET_DELETE_DEREF, &&_unknown_opcode, - &&TARGET_CALL_FUNCTION_VAR, + &&_unknown_opcode, &&TARGET_CALL_FUNCTION_KW, - &&TARGET_CALL_FUNCTION_VAR_KW, + &&TARGET_CALL_FUNCTION_EX, &&TARGET_SETUP_WITH, &&TARGET_EXTENDED_ARG, &&TARGET_LIST_APPEND, @@ -154,10 +154,10 @@ static void *opcode_targets[256] = { &&TARGET_BUILD_TUPLE_UNPACK, &&TARGET_BUILD_SET_UNPACK, &&TARGET_SETUP_ASYNC_WITH, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_FORMAT_VALUE, + &&TARGET_BUILD_CONST_KEY_MAP, + &&TARGET_BUILD_STRING, + &&TARGET_BUILD_TUPLE_UNPACK_WITH_CALL, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/peephole.c b/Python/peephole.c index 4e657fa176..84eb2dbefd 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -8,8 +8,8 @@ #include "code.h" #include "symtable.h" #include "opcode.h" +#include "wordcode_helpers.h" -#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1])) #define UNCONDITIONAL_JUMP(op) (op==JUMP_ABSOLUTE || op==JUMP_FORWARD) #define CONDITIONAL_JUMP(op) (op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) @@ -17,22 +17,16 @@ || op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) #define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP) -#define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3)) -#define SETARG(arr, i, val) do { \ - assert(0 <= val && val <= 0xffff); \ - arr[i+2] = (unsigned char)(((unsigned int)val)>>8); \ - arr[i+1] = (unsigned char)(((unsigned int)val) & 255); \ -} while(0) -#define CODESIZE(op) (HAS_ARG(op) ? 3 : 1) -#define ISBASICBLOCK(blocks, start, bytes) \ - (blocks[start]==blocks[start+bytes-1]) +#define GETJUMPTGT(arr, i) (get_arg(arr, i) / sizeof(_Py_CODEUNIT) + \ + (ABSOLUTE_JUMP(_Py_OPCODE(arr[i])) ? 0 : i+1)) +#define ISBASICBLOCK(blocks, start, end) \ + (blocks[start]==blocks[end]) #define CONST_STACK_CREATE() { \ const_stack_size = 256; \ const_stack = PyMem_New(PyObject *, const_stack_size); \ - load_const_stack = PyMem_New(Py_ssize_t, const_stack_size); \ - if (!const_stack || !load_const_stack) { \ + if (!const_stack) { \ PyErr_NoMemory(); \ goto exitError; \ } \ @@ -41,27 +35,23 @@ #define CONST_STACK_DELETE() do { \ if (const_stack) \ PyMem_Free(const_stack); \ - if (load_const_stack) \ - PyMem_Free(load_const_stack); \ } while(0) -#define CONST_STACK_LEN() (const_stack_top + 1) +#define CONST_STACK_LEN() ((unsigned)(const_stack_top + 1)) #define CONST_STACK_PUSH_OP(i) do { \ PyObject *_x; \ - assert(codestr[i] == LOAD_CONST); \ - assert(PyList_GET_SIZE(consts) > GETARG(codestr, i)); \ - _x = PyList_GET_ITEM(consts, GETARG(codestr, i)); \ + assert(_Py_OPCODE(codestr[i]) == LOAD_CONST); \ + assert(PyList_GET_SIZE(consts) > (Py_ssize_t)get_arg(codestr, i)); \ + _x = PyList_GET_ITEM(consts, get_arg(codestr, i)); \ if (++const_stack_top >= const_stack_size) { \ const_stack_size *= 2; \ PyMem_Resize(const_stack, PyObject *, const_stack_size); \ - PyMem_Resize(load_const_stack, Py_ssize_t, const_stack_size); \ - if (!const_stack || !load_const_stack) { \ + if (!const_stack) { \ PyErr_NoMemory(); \ goto exitError; \ } \ } \ - load_const_stack[const_stack_top] = i; \ const_stack[const_stack_top] = _x; \ in_consts = 1; \ } while(0) @@ -70,22 +60,114 @@ const_stack_top = -1; \ } while(0) -#define CONST_STACK_TOP() \ - const_stack[const_stack_top] - #define CONST_STACK_LASTN(i) \ - &const_stack[const_stack_top - i + 1] + &const_stack[CONST_STACK_LEN() - i] #define CONST_STACK_POP(i) do { \ - assert(const_stack_top + 1 >= i); \ + assert(CONST_STACK_LEN() >= i); \ const_stack_top -= i; \ } while(0) -#define CONST_STACK_OP_LASTN(i) \ - ((const_stack_top >= i - 1) ? load_const_stack[const_stack_top - i + 1] : -1) +/* Scans back N consecutive LOAD_CONST instructions, skipping NOPs, + returns index of the Nth last's LOAD_CONST's EXTENDED_ARG prefix. + Callers are responsible to check CONST_STACK_LEN beforehand. +*/ +static Py_ssize_t +lastn_const_start(const _Py_CODEUNIT *codestr, Py_ssize_t i, Py_ssize_t n) +{ + assert(n > 0); + for (;;) { + i--; + assert(i >= 0); + if (_Py_OPCODE(codestr[i]) == LOAD_CONST) { + if (!--n) { + while (i > 0 && _Py_OPCODE(codestr[i-1]) == EXTENDED_ARG) { + i--; + } + return i; + } + } + else { + assert(_Py_OPCODE(codestr[i]) == NOP || + _Py_OPCODE(codestr[i]) == EXTENDED_ARG); + } + } +} + +/* Scans through EXTENDED ARGs, seeking the index of the effective opcode */ +static Py_ssize_t +find_op(const _Py_CODEUNIT *codestr, Py_ssize_t i) +{ + while (_Py_OPCODE(codestr[i]) == EXTENDED_ARG) { + i++; + } + return i; +} + +/* Given the index of the effective opcode, + scan back to construct the oparg with EXTENDED_ARG */ +static unsigned int +get_arg(const _Py_CODEUNIT *codestr, Py_ssize_t i) +{ + _Py_CODEUNIT word; + unsigned int oparg = _Py_OPARG(codestr[i]); + if (i >= 1 && _Py_OPCODE(word = codestr[i-1]) == EXTENDED_ARG) { + oparg |= _Py_OPARG(word) << 8; + if (i >= 2 && _Py_OPCODE(word = codestr[i-2]) == EXTENDED_ARG) { + oparg |= _Py_OPARG(word) << 16; + if (i >= 3 && _Py_OPCODE(word = codestr[i-3]) == EXTENDED_ARG) { + oparg |= _Py_OPARG(word) << 24; + } + } + } + return oparg; +} + +/* Fill the region with NOPs. */ +static void +fill_nops(_Py_CODEUNIT *codestr, Py_ssize_t start, Py_ssize_t end) +{ + memset(codestr + start, NOP, (end - start) * sizeof(_Py_CODEUNIT)); +} + +/* Given the index of the effective opcode, + attempt to replace the argument, taking into account EXTENDED_ARG. + Returns -1 on failure, or the new op index on success */ +static Py_ssize_t +set_arg(_Py_CODEUNIT *codestr, Py_ssize_t i, unsigned int oparg) +{ + unsigned int curarg = get_arg(codestr, i); + int curilen, newilen; + if (curarg == oparg) + return i; + curilen = instrsize(curarg); + newilen = instrsize(oparg); + if (curilen < newilen) { + return -1; + } + + write_op_arg(codestr + i + 1 - curilen, _Py_OPCODE(codestr[i]), oparg, newilen); + fill_nops(codestr, i + 1 - curilen + newilen, i + 1); + return i-curilen+newilen; +} +/* Attempt to write op/arg at end of specified region of memory. + Preceding memory in the region is overwritten with NOPs. + Returns -1 on failure, op index on success */ +static Py_ssize_t +copy_op_arg(_Py_CODEUNIT *codestr, Py_ssize_t i, unsigned char op, + unsigned int oparg, Py_ssize_t maxi) +{ + int ilen = instrsize(oparg); + if (i + ilen > maxi) { + return -1; + } + write_op_arg(codestr + maxi - ilen, op, oparg, ilen); + fill_nops(codestr, i, maxi - ilen); + return maxi - 1; +} -/* Replace LOAD_CONST c1. LOAD_CONST c2 ... LOAD_CONST cn BUILD_TUPLE n +/* Replace LOAD_CONST c1, LOAD_CONST c2 ... LOAD_CONST cn, BUILD_TUPLE n with LOAD_CONST (c1, c2, ... cn). The consts table must still be in list form so that the new constant (c1, c2, ... cn) can be appended. @@ -94,9 +176,10 @@ Also works for BUILD_LIST and BUILT_SET when followed by an "in" or "not in" test; for BUILD_SET it assembles a frozenset rather than a tuple. */ -static int -tuple_of_constants(unsigned char *codestr, Py_ssize_t n, - PyObject *consts, PyObject **objs) +static Py_ssize_t +fold_tuple_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t c_start, + Py_ssize_t opcode_end, unsigned char opcode, + PyObject *consts, PyObject **objs, int n) { PyObject *newconst, *constant; Py_ssize_t i, len_consts; @@ -106,9 +189,9 @@ tuple_of_constants(unsigned char *codestr, Py_ssize_t n, /* Buildup new tuple of constants */ newconst = PyTuple_New(n); - if (newconst == NULL) - return 0; - len_consts = PyList_GET_SIZE(consts); + if (newconst == NULL) { + return -1; + } for (i=0 ; i<n ; i++) { constant = objs[i]; Py_INCREF(constant); @@ -116,30 +199,26 @@ tuple_of_constants(unsigned char *codestr, Py_ssize_t n, } /* If it's a BUILD_SET, use the PyTuple we just built to create a - PyFrozenSet, and use that as the constant instead: */ - if (codestr[0] == BUILD_SET) { - PyObject *tuple = newconst; - newconst = PyFrozenSet_New(tuple); - Py_DECREF(tuple); - if (newconst == NULL) - return 0; + PyFrozenSet, and use that as the constant instead: */ + if (opcode == BUILD_SET) { + Py_SETREF(newconst, PyFrozenSet_New(newconst)); + if (newconst == NULL) { + return -1; + } } /* Append folded constant onto consts */ + len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); - return 0; + return -1; } Py_DECREF(newconst); - /* Write NOPs over old LOAD_CONSTS and - add a new LOAD_CONST newconst on top of the BUILD_TUPLE n */ - codestr[0] = LOAD_CONST; - SETARG(codestr, 0, len_consts); - return 1; + return copy_op_arg(codestr, c_start, LOAD_CONST, len_consts, opcode_end); } -/* Replace LOAD_CONST c1. LOAD_CONST c2 BINOP +/* Replace LOAD_CONST c1, LOAD_CONST c2, BINOP with LOAD_CONST binop(c1,c2) The consts table must still be in list form so that the new constant can be appended. @@ -149,20 +228,21 @@ tuple_of_constants(unsigned char *codestr, Py_ssize_t n, is below a threshold value. That keeps pyc files from becoming large in the presence of code like: (None,)*1000. */ -static int -fold_binops_on_constants(unsigned char *codestr, PyObject *consts, PyObject **objs) +static Py_ssize_t +fold_binops_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t c_start, + Py_ssize_t opcode_end, unsigned char opcode, + PyObject *consts, PyObject **objs) { PyObject *newconst, *v, *w; Py_ssize_t len_consts, size; - int opcode; /* Pre-conditions */ assert(PyList_CheckExact(consts)); + len_consts = PyList_GET_SIZE(consts); /* Create new constant */ v = objs[0]; w = objs[1]; - opcode = codestr[0]; switch (opcode) { case BINARY_POWER: newconst = PyNumber_Power(v, w, Py_None); @@ -208,50 +288,48 @@ fold_binops_on_constants(unsigned char *codestr, PyObject *consts, PyObject **ob PyErr_Format(PyExc_SystemError, "unexpected binary operation %d on a constant", opcode); - return 0; + return -1; } if (newconst == NULL) { - if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) + if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) { PyErr_Clear(); - return 0; + } + return -1; } size = PyObject_Size(newconst); if (size == -1) { - if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) - return 0; + if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) { + return -1; + } PyErr_Clear(); } else if (size > 20) { Py_DECREF(newconst); - return 0; + return -1; } /* Append folded constant into consts table */ - len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); - return 0; + return -1; } Py_DECREF(newconst); - /* Write NOP NOP NOP NOP LOAD_CONST newconst */ - codestr[-2] = LOAD_CONST; - SETARG(codestr, -2, len_consts); - return 1; + return copy_op_arg(codestr, c_start, LOAD_CONST, len_consts, opcode_end); } -static int -fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts, PyObject *v) +static Py_ssize_t +fold_unaryops_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t c_start, + Py_ssize_t opcode_end, unsigned char opcode, + PyObject *consts, PyObject *v) { PyObject *newconst; Py_ssize_t len_consts; - int opcode; /* Pre-conditions */ assert(PyList_CheckExact(consts)); - assert(codestr[0] == LOAD_CONST); + len_consts = PyList_GET_SIZE(consts); /* Create new constant */ - opcode = codestr[3]; switch (opcode) { case UNARY_NEGATIVE: newconst = PyNumber_Negative(v); @@ -267,35 +345,31 @@ fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts, PyObject *v PyErr_Format(PyExc_SystemError, "unexpected unary operation %d on a constant", opcode); - return 0; + return -1; } if (newconst == NULL) { - if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) + if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) { PyErr_Clear(); - return 0; + } + return -1; } /* Append folded constant into consts table */ - len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); PyErr_Clear(); - return 0; + return -1; } Py_DECREF(newconst); - /* Write NOP LOAD_CONST newconst */ - codestr[0] = NOP; - codestr[1] = LOAD_CONST; - SETARG(codestr, 1, len_consts); - return 1; + return copy_op_arg(codestr, c_start, LOAD_CONST, len_consts, opcode_end); } static unsigned int * -markblocks(unsigned char *code, Py_ssize_t len) +markblocks(_Py_CODEUNIT *code, Py_ssize_t len) { unsigned int *blocks = PyMem_New(unsigned int, len); - int i,j, opcode, blockcnt = 0; + int i, j, opcode, blockcnt = 0; if (blocks == NULL) { PyErr_NoMemory(); @@ -304,8 +378,8 @@ markblocks(unsigned char *code, Py_ssize_t len) memset(blocks, 0, len*sizeof(int)); /* Mark labels in the first pass */ - for (i=0 ; i<len ; i+=CODESIZE(opcode)) { - opcode = code[i]; + for (i = 0; i < len; i++) { + opcode = _Py_OPCODE(code[i]); switch (opcode) { case FOR_ITER: case JUMP_FORWARD: @@ -321,12 +395,13 @@ markblocks(unsigned char *code, Py_ssize_t len) case SETUP_WITH: case SETUP_ASYNC_WITH: j = GETJUMPTGT(code, i); + assert(j < len); blocks[j] = 1; break; } } /* Build block numbers in the second pass */ - for (i=0 ; i<len ; i++) { + for (i = 0; i < len; i++) { blockcnt += blocks[i]; /* increment blockcnt over labels */ blocks[i] = blockcnt; } @@ -337,33 +412,27 @@ markblocks(unsigned char *code, Py_ssize_t len) The consts object should still be in list form to allow new constants to be appended. - To keep the optimizer simple, it bails out (does nothing) for code that - has a length over 32,700, and does not calculate extended arguments. - That allows us to avoid overflow and sign issues. Likewise, it bails when - the lineno table has complex encoding for gaps >= 255. EXTENDED_ARG can - appear before MAKE_FUNCTION; in this case both opcodes are skipped. - EXTENDED_ARG preceding any other opcode causes the optimizer to bail. + To keep the optimizer simple, it bails when the lineno table has complex + encoding for gaps >= 255. Optimizations are restricted to simple transformations occurring within a single basic block. All transformations keep the code size the same or smaller. For those that reduce size, the gaps are initially filled with NOPs. Later those NOPs are removed and the jump addresses retargeted in - a single pass. Line numbering is adjusted accordingly. */ + a single pass. */ PyObject * PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - PyObject *lineno_obj) + PyObject *lnotab_obj) { - Py_ssize_t i, j, codelen; - int nops, h, adj; - int tgt, tgttgt, opcode; - unsigned char *codestr = NULL; - unsigned char *lineno; - int *addrmap = NULL; - int new_line, cum_orig_line, last_line; + Py_ssize_t h, i, nexti, op_start, codelen, tgt; + unsigned int j, nops; + unsigned char opcode, nextop; + _Py_CODEUNIT *codestr = NULL; + unsigned char *lnotab; + unsigned int cum_orig_offset, last_offset; Py_ssize_t tabsiz; PyObject **const_stack = NULL; - Py_ssize_t *load_const_stack = NULL; Py_ssize_t const_stack_top = -1; Py_ssize_t const_stack_size = 0; int in_consts = 0; /* whether we are in a LOAD_CONST sequence */ @@ -373,42 +442,30 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, if (PyErr_Occurred()) goto exitError; - /* Bypass optimization when the lineno table is too complex */ - assert(PyBytes_Check(lineno_obj)); - lineno = (unsigned char*)PyBytes_AS_STRING(lineno_obj); - tabsiz = PyBytes_GET_SIZE(lineno_obj); - if (memchr(lineno, 255, tabsiz) != NULL) + /* Bypass optimization when the lnotab table is too complex */ + assert(PyBytes_Check(lnotab_obj)); + lnotab = (unsigned char*)PyBytes_AS_STRING(lnotab_obj); + tabsiz = PyBytes_GET_SIZE(lnotab_obj); + assert(tabsiz == 0 || Py_REFCNT(lnotab_obj) == 1); + if (memchr(lnotab, 255, tabsiz) != NULL) { + /* 255 value are used for multibyte bytecode instructions */ goto exitUnchanged; + } + /* Note: -128 and 127 special values for line number delta are ok, + the peephole optimizer doesn't modify line numbers. */ - /* Avoid situations where jump retargeting could overflow */ assert(PyBytes_Check(code)); codelen = PyBytes_GET_SIZE(code); - if (codelen > 32700) - goto exitUnchanged; + assert(codelen % sizeof(_Py_CODEUNIT) == 0); /* Make a modifiable copy of the code string */ - codestr = (unsigned char *)PyMem_Malloc(codelen); + codestr = (_Py_CODEUNIT *)PyMem_Malloc(codelen); if (codestr == NULL) { PyErr_NoMemory(); goto exitError; } - codestr = (unsigned char *)memcpy(codestr, - PyBytes_AS_STRING(code), codelen); - - /* Verify that RETURN_VALUE terminates the codestring. This allows - the various transformation patterns to look ahead several - instructions without additional checks to make sure they are not - looking beyond the end of the code string. - */ - if (codestr[codelen-1] != RETURN_VALUE) - goto exitUnchanged; - - /* Mapping to new jump targets after NOPs are removed */ - addrmap = PyMem_New(int, codelen); - if (addrmap == NULL) { - PyErr_NoMemory(); - goto exitError; - } + memcpy(codestr, PyBytes_AS_STRING(code), codelen); + codelen /= sizeof(_Py_CODEUNIT); blocks = markblocks(codestr, codelen); if (blocks == NULL) @@ -417,9 +474,17 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, CONST_STACK_CREATE(); - for (i=0 ; i<codelen ; i += CODESIZE(codestr[i])) { - reoptimize_current: - opcode = codestr[i]; + for (i=find_op(codestr, 0) ; i<codelen ; i=nexti) { + opcode = _Py_OPCODE(codestr[i]); + op_start = i; + while (op_start >= 1 && _Py_OPCODE(codestr[op_start-1]) == EXTENDED_ARG) { + op_start--; + } + + nexti = i + 1; + while (nexti < codelen && _Py_OPCODE(codestr[nexti]) == EXTENDED_ARG) + nexti++; + nextop = nexti < codelen ? _Py_OPCODE(codestr[nexti]) : 0; if (!in_consts) { CONST_STACK_RESET(); @@ -430,14 +495,12 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Replace UNARY_NOT POP_JUMP_IF_FALSE with POP_JUMP_IF_TRUE */ case UNARY_NOT: - if (codestr[i+1] != POP_JUMP_IF_FALSE - || !ISBASICBLOCK(blocks,i,4)) - continue; - j = GETARG(codestr, i+1); - codestr[i] = POP_JUMP_IF_TRUE; - SETARG(codestr, i, j); - codestr[i+3] = NOP; - goto reoptimize_current; + if (nextop != POP_JUMP_IF_FALSE + || !ISBASICBLOCK(blocks, op_start, i + 1)) + break; + fill_nops(codestr, op_start, i + 1); + codestr[nexti] = PACKOPARG(POP_JUMP_IF_TRUE, _Py_OPARG(codestr[nexti])); + break; /* not a is b --> a is not b not a in b --> a not in b @@ -445,78 +508,76 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, not a not in b --> a in b */ case COMPARE_OP: - j = GETARG(codestr, i); - if (j < 6 || j > 9 || - codestr[i+3] != UNARY_NOT || - !ISBASICBLOCK(blocks,i,4)) - continue; - SETARG(codestr, i, (j^1)); - codestr[i+3] = NOP; + j = get_arg(codestr, i); + if (j < 6 || j > 9 || + nextop != UNARY_NOT || + !ISBASICBLOCK(blocks, op_start, i + 1)) + break; + codestr[i] = PACKOPARG(opcode, j^1); + fill_nops(codestr, i + 1, nexti + 1); break; /* Skip over LOAD_CONST trueconst - POP_JUMP_IF_FALSE xx. This improves - "while 1" performance. */ + POP_JUMP_IF_FALSE xx. This improves + "while 1" performance. */ case LOAD_CONST: CONST_STACK_PUSH_OP(i); - j = GETARG(codestr, i); - if (codestr[i+3] != POP_JUMP_IF_FALSE || - !ISBASICBLOCK(blocks,i,6) || - !PyObject_IsTrue(PyList_GET_ITEM(consts, j))) - continue; - memset(codestr+i, NOP, 6); - CONST_STACK_RESET(); + if (nextop != POP_JUMP_IF_FALSE || + !ISBASICBLOCK(blocks, op_start, i + 1) || + !PyObject_IsTrue(PyList_GET_ITEM(consts, get_arg(codestr, i)))) + break; + fill_nops(codestr, op_start, nexti + 1); + CONST_STACK_POP(1); break; - /* Try to fold tuples of constants (includes a case for lists and sets - which are only used for "in" and "not in" tests). + /* Try to fold tuples of constants (includes a case for lists + and sets which are only used for "in" and "not in" tests). Skip over BUILD_SEQN 1 UNPACK_SEQN 1. Replace BUILD_SEQN 2 UNPACK_SEQN 2 with ROT2. Replace BUILD_SEQN 3 UNPACK_SEQN 3 with ROT3 ROT2. */ case BUILD_TUPLE: case BUILD_LIST: case BUILD_SET: - j = GETARG(codestr, i); - if (j == 0) - break; - h = CONST_STACK_OP_LASTN(j); - assert((h >= 0 || CONST_STACK_LEN() < j)); - if (h >= 0 && j > 0 && j <= CONST_STACK_LEN() && - ((opcode == BUILD_TUPLE && - ISBASICBLOCK(blocks, h, i-h+3)) || - ((opcode == BUILD_LIST || opcode == BUILD_SET) && - codestr[i+3]==COMPARE_OP && - ISBASICBLOCK(blocks, h, i-h+6) && - (GETARG(codestr,i+3)==6 || - GETARG(codestr,i+3)==7))) && - tuple_of_constants(&codestr[i], j, consts, CONST_STACK_LASTN(j))) { - assert(codestr[i] == LOAD_CONST); - memset(&codestr[h], NOP, i - h); - CONST_STACK_POP(j); - CONST_STACK_PUSH_OP(i); - break; + j = get_arg(codestr, i); + if (j > 0 && CONST_STACK_LEN() >= j) { + h = lastn_const_start(codestr, op_start, j); + if ((opcode == BUILD_TUPLE && + ISBASICBLOCK(blocks, h, op_start)) || + ((opcode == BUILD_LIST || opcode == BUILD_SET) && + ((nextop==COMPARE_OP && + (_Py_OPARG(codestr[nexti]) == PyCmp_IN || + _Py_OPARG(codestr[nexti]) == PyCmp_NOT_IN)) || + nextop == GET_ITER) && ISBASICBLOCK(blocks, h, i + 1))) { + h = fold_tuple_on_constants(codestr, h, i + 1, opcode, + consts, CONST_STACK_LASTN(j), j); + if (h >= 0) { + CONST_STACK_POP(j); + CONST_STACK_PUSH_OP(h); + } + break; + } } - if (codestr[i+3] != UNPACK_SEQUENCE || - !ISBASICBLOCK(blocks,i,6) || - j != GETARG(codestr, i+3) || + if (nextop != UNPACK_SEQUENCE || + !ISBASICBLOCK(blocks, op_start, i + 1) || + j != get_arg(codestr, nexti) || opcode == BUILD_SET) - continue; - if (j == 1) { - memset(codestr+i, NOP, 6); + break; + if (j < 2) { + fill_nops(codestr, op_start, nexti + 1); } else if (j == 2) { - codestr[i] = ROT_TWO; - memset(codestr+i+1, NOP, 5); + codestr[op_start] = PACKOPARG(ROT_TWO, 0); + fill_nops(codestr, op_start + 1, nexti + 1); CONST_STACK_RESET(); } else if (j == 3) { - codestr[i] = ROT_THREE; - codestr[i+1] = ROT_TWO; - memset(codestr+i+2, NOP, 4); + codestr[op_start] = PACKOPARG(ROT_THREE, 0); + codestr[op_start + 1] = PACKOPARG(ROT_TWO, 0); + fill_nops(codestr, op_start + 2, nexti + 1); CONST_STACK_RESET(); } break; /* Fold binary ops on constants. - LOAD_CONST c1 LOAD_CONST c2 BINOP --> LOAD_CONST binop(c1,c2) */ + LOAD_CONST c1 LOAD_CONST c2 BINOP --> LOAD_CONST binop(c1,c2) */ case BINARY_POWER: case BINARY_MULTIPLY: case BINARY_TRUE_DIVIDE: @@ -530,35 +591,34 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case BINARY_AND: case BINARY_XOR: case BINARY_OR: - /* NOTE: LOAD_CONST is saved at `i-2` since it has an arg - while BINOP hasn't */ - h = CONST_STACK_OP_LASTN(2); - assert((h >= 0 || CONST_STACK_LEN() < 2)); - if (h >= 0 && - ISBASICBLOCK(blocks, h, i-h+1) && - fold_binops_on_constants(&codestr[i], consts, CONST_STACK_LASTN(2))) { - i -= 2; - memset(&codestr[h], NOP, i - h); - assert(codestr[i] == LOAD_CONST); - CONST_STACK_POP(2); - CONST_STACK_PUSH_OP(i); + if (CONST_STACK_LEN() < 2) + break; + h = lastn_const_start(codestr, op_start, 2); + if (ISBASICBLOCK(blocks, h, op_start)) { + h = fold_binops_on_constants(codestr, h, i + 1, opcode, + consts, CONST_STACK_LASTN(2)); + if (h >= 0) { + CONST_STACK_POP(2); + CONST_STACK_PUSH_OP(h); + } } break; /* Fold unary ops on constants. - LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */ + LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */ case UNARY_NEGATIVE: case UNARY_INVERT: case UNARY_POSITIVE: - h = CONST_STACK_OP_LASTN(1); - assert((h >= 0 || CONST_STACK_LEN() < 1)); - if (h >= 0 && - ISBASICBLOCK(blocks, h, i-h+1) && - fold_unaryops_on_constants(&codestr[i-3], consts, CONST_STACK_TOP())) { - i -= 2; - assert(codestr[i] == LOAD_CONST); - CONST_STACK_POP(1); - CONST_STACK_PUSH_OP(i); + if (CONST_STACK_LEN() < 1) + break; + h = lastn_const_start(codestr, op_start, 1); + if (ISBASICBLOCK(blocks, h, op_start)) { + h = fold_unaryops_on_constants(codestr, h, i + 1, opcode, + consts, *CONST_STACK_LASTN(1)); + if (h >= 0) { + CONST_STACK_POP(1); + CONST_STACK_PUSH_OP(h); + } } break; @@ -573,39 +633,36 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, x:JUMP_IF_FALSE_OR_POP y y:JUMP_IF_FALSE_OR_POP z --> x:JUMP_IF_FALSE_OR_POP z x:JUMP_IF_FALSE_OR_POP y y:JUMP_IF_TRUE_OR_POP z - --> x:POP_JUMP_IF_FALSE y+3 - where y+3 is the instruction following the second test. + --> x:POP_JUMP_IF_FALSE y+1 + where y+1 is the instruction following the second test. */ case JUMP_IF_FALSE_OR_POP: case JUMP_IF_TRUE_OR_POP: - tgt = GETJUMPTGT(codestr, i); - j = codestr[tgt]; + h = get_arg(codestr, i) / sizeof(_Py_CODEUNIT); + tgt = find_op(codestr, h); + + j = _Py_OPCODE(codestr[tgt]); if (CONDITIONAL_JUMP(j)) { - /* NOTE: all possible jumps here are - absolute! */ + /* NOTE: all possible jumps here are absolute. */ if (JUMPS_ON_TRUE(j) == JUMPS_ON_TRUE(opcode)) { - /* The second jump will be - taken iff the first is. */ - tgttgt = GETJUMPTGT(codestr, tgt); - /* The current opcode inherits - its target's stack behaviour */ - codestr[i] = j; - SETARG(codestr, i, tgttgt); - goto reoptimize_current; + /* The second jump will be taken iff the first is. + The current opcode inherits its target's + stack effect */ + h = set_arg(codestr, i, get_arg(codestr, tgt)); } else { - /* The second jump is not taken - if the first is (so jump past - it), and all conditional - jumps pop their argument when - they're not taken (so change - the first jump to pop its - argument when it's taken). */ - if (JUMPS_ON_TRUE(opcode)) - codestr[i] = POP_JUMP_IF_TRUE; - else - codestr[i] = POP_JUMP_IF_FALSE; - SETARG(codestr, i, (tgt + 3)); - goto reoptimize_current; + /* The second jump is not taken if the first is (so + jump past it), and all conditional jumps pop their + argument when they're not taken (so change the + first jump to pop its argument when it's taken). */ + h = set_arg(codestr, i, (tgt + 1) * sizeof(_Py_CODEUNIT)); + j = opcode == JUMP_IF_TRUE_OR_POP ? + POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE; + } + + if (h >= 0) { + nexti = h; + codestr[nexti] = PACKOPARG(j, _Py_OPARG(codestr[nexti])); + break; } } /* Intentional fallthrough */ @@ -622,73 +679,74 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case SETUP_FINALLY: case SETUP_WITH: case SETUP_ASYNC_WITH: - tgt = GETJUMPTGT(codestr, i); + h = GETJUMPTGT(codestr, i); + tgt = find_op(codestr, h); /* Replace JUMP_* to a RETURN into just a RETURN */ if (UNCONDITIONAL_JUMP(opcode) && - codestr[tgt] == RETURN_VALUE) { - codestr[i] = RETURN_VALUE; - memset(codestr+i+1, NOP, 2); - continue; + _Py_OPCODE(codestr[tgt]) == RETURN_VALUE) { + codestr[op_start] = PACKOPARG(RETURN_VALUE, 0); + fill_nops(codestr, op_start + 1, i + 1); + } else if (UNCONDITIONAL_JUMP(_Py_OPCODE(codestr[tgt]))) { + j = GETJUMPTGT(codestr, tgt); + if (opcode == JUMP_FORWARD) { /* JMP_ABS can go backwards */ + opcode = JUMP_ABSOLUTE; + } else if (!ABSOLUTE_JUMP(opcode)) { + if ((Py_ssize_t)j < i + 1) { + break; /* No backward relative jumps */ + } + j -= i + 1; /* Calc relative jump addr */ + } + j *= sizeof(_Py_CODEUNIT); + copy_op_arg(codestr, op_start, opcode, j, i + 1); } - if (!UNCONDITIONAL_JUMP(codestr[tgt])) - continue; - tgttgt = GETJUMPTGT(codestr, tgt); - if (opcode == JUMP_FORWARD) /* JMP_ABS can go backwards */ - opcode = JUMP_ABSOLUTE; - if (!ABSOLUTE_JUMP(opcode)) - tgttgt -= i + 3; /* Calc relative jump addr */ - if (tgttgt < 0) /* No backward relative jumps */ - continue; - codestr[i] = opcode; - SETARG(codestr, i, tgttgt); - break; - - case EXTENDED_ARG: - if (codestr[i+3] != MAKE_FUNCTION) - goto exitUnchanged; - /* don't visit MAKE_FUNCTION as GETARG will be wrong */ - i += 3; break; - /* Replace RETURN LOAD_CONST None RETURN with just RETURN */ - /* Remove unreachable JUMPs after RETURN */ + /* Remove unreachable ops after RETURN */ case RETURN_VALUE: - if (i+4 >= codelen) - continue; - if (codestr[i+4] == RETURN_VALUE && - ISBASICBLOCK(blocks,i,5)) - memset(codestr+i+1, NOP, 4); - else if (UNCONDITIONAL_JUMP(codestr[i+1]) && - ISBASICBLOCK(blocks,i,4)) - memset(codestr+i+1, NOP, 3); + h = i + 1; + while (h + 1 < codelen && ISBASICBLOCK(blocks, i, h + 1)) { + h++; + } + if (h > i + 1) { + fill_nops(codestr, i + 1, h + 1); + nexti = find_op(codestr, h); + } break; } } - /* Fixup linenotab */ - for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) { + /* Fixup lnotab */ + for (i = 0, nops = 0; i < codelen; i++) { assert(i - nops <= INT_MAX); - addrmap[i] = (int)(i - nops); - if (codestr[i] == NOP) + /* original code offset => new code offset */ + blocks[i] = i - nops; + if (_Py_OPCODE(codestr[i]) == NOP) nops++; } - cum_orig_line = 0; - last_line = 0; + cum_orig_offset = 0; + last_offset = 0; for (i=0 ; i < tabsiz ; i+=2) { - cum_orig_line += lineno[i]; - new_line = addrmap[cum_orig_line]; - assert (new_line - last_line < 255); - lineno[i] =((unsigned char)(new_line - last_line)); - last_line = new_line; + unsigned int offset_delta, new_offset; + cum_orig_offset += lnotab[i]; + assert(cum_orig_offset % sizeof(_Py_CODEUNIT) == 0); + new_offset = blocks[cum_orig_offset / sizeof(_Py_CODEUNIT)] * + sizeof(_Py_CODEUNIT); + offset_delta = new_offset - last_offset; + assert(offset_delta <= 255); + lnotab[i] = (unsigned char)offset_delta; + last_offset = new_offset; } /* Remove NOPs and fixup jump targets */ - for (i=0, h=0 ; i<codelen ; ) { - opcode = codestr[i]; + for (op_start = i = h = 0; i < codelen; i++, op_start = i) { + j = _Py_OPARG(codestr[i]); + while (_Py_OPCODE(codestr[i]) == EXTENDED_ARG) { + i++; + j = j<<8 | _Py_OPARG(codestr[i]); + } + opcode = _Py_OPCODE(codestr[i]); switch (opcode) { - case NOP: - i++; - continue; + case NOP:continue; case JUMP_ABSOLUTE: case CONTINUE_LOOP: @@ -696,8 +754,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case POP_JUMP_IF_TRUE: case JUMP_IF_FALSE_OR_POP: case JUMP_IF_TRUE_OR_POP: - j = addrmap[GETARG(codestr, i)]; - SETARG(codestr, i, j); + j = blocks[j / sizeof(_Py_CODEUNIT)] * sizeof(_Py_CODEUNIT); break; case FOR_ITER: @@ -707,34 +764,32 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case SETUP_FINALLY: case SETUP_WITH: case SETUP_ASYNC_WITH: - j = addrmap[GETARG(codestr, i) + i + 3] - addrmap[i] - 3; - SETARG(codestr, i, j); + j = blocks[j / sizeof(_Py_CODEUNIT) + i + 1] - blocks[i] - 1; + j *= sizeof(_Py_CODEUNIT); break; } - adj = CODESIZE(opcode); - while (adj--) - codestr[h++] = codestr[i++]; + nexti = i - op_start + 1; + if (instrsize(j) > nexti) + goto exitUnchanged; + /* If instrsize(j) < nexti, we'll emit EXTENDED_ARG 0 */ + write_op_arg(codestr + h, opcode, j, nexti); + h += nexti; } - assert(h + nops == codelen); + assert(h + (Py_ssize_t)nops == codelen); - code = PyBytes_FromStringAndSize((char *)codestr, h); CONST_STACK_DELETE(); - PyMem_Free(addrmap); - PyMem_Free(codestr); PyMem_Free(blocks); + code = PyBytes_FromStringAndSize((char *)codestr, h * sizeof(_Py_CODEUNIT)); + PyMem_Free(codestr); return code; exitError: code = NULL; exitUnchanged: - CONST_STACK_DELETE(); - if (blocks != NULL) - PyMem_Free(blocks); - if (addrmap != NULL) - PyMem_Free(addrmap); - if (codestr != NULL) - PyMem_Free(codestr); Py_XINCREF(code); + CONST_STACK_DELETE(); + PyMem_Free(blocks); + PyMem_Free(codestr); return code; } diff --git a/Python/pyhash.c b/Python/pyhash.c index 97cb54759b..57a2da715e 100644 --- a/Python/pyhash.c +++ b/Python/pyhash.c @@ -318,40 +318,37 @@ static PyHash_FuncDef PyHash_Func = {fnv, "fnv", 8 * SIZEOF_PY_HASH_T, Modified for Python by Christian Heimes: - C89 / MSVC compatibility - - PY_UINT64_T, PY_UINT32_T and PY_UINT8_T - _rotl64() on Windows - letoh64() fallback */ -typedef unsigned char PY_UINT8_T; - /* byte swap little endian to host endian * Endian conversion not only ensures that the hash function returns the same * value on all platforms. It is also required to for a good dispersion of * the hash values' least significant bits. */ #if PY_LITTLE_ENDIAN -# define _le64toh(x) ((PY_UINT64_T)(x)) +# define _le64toh(x) ((uint64_t)(x)) #elif defined(__APPLE__) # define _le64toh(x) OSSwapLittleToHostInt64(x) #elif defined(HAVE_LETOH64) # define _le64toh(x) le64toh(x) #else -# define _le64toh(x) (((PY_UINT64_T)(x) << 56) | \ - (((PY_UINT64_T)(x) << 40) & 0xff000000000000ULL) | \ - (((PY_UINT64_T)(x) << 24) & 0xff0000000000ULL) | \ - (((PY_UINT64_T)(x) << 8) & 0xff00000000ULL) | \ - (((PY_UINT64_T)(x) >> 8) & 0xff000000ULL) | \ - (((PY_UINT64_T)(x) >> 24) & 0xff0000ULL) | \ - (((PY_UINT64_T)(x) >> 40) & 0xff00ULL) | \ - ((PY_UINT64_T)(x) >> 56)) +# define _le64toh(x) (((uint64_t)(x) << 56) | \ + (((uint64_t)(x) << 40) & 0xff000000000000ULL) | \ + (((uint64_t)(x) << 24) & 0xff0000000000ULL) | \ + (((uint64_t)(x) << 8) & 0xff00000000ULL) | \ + (((uint64_t)(x) >> 8) & 0xff000000ULL) | \ + (((uint64_t)(x) >> 24) & 0xff0000ULL) | \ + (((uint64_t)(x) >> 40) & 0xff00ULL) | \ + ((uint64_t)(x) >> 56)) #endif #ifdef _MSC_VER # define ROTATE(x, b) _rotl64(x, b) #else -# define ROTATE(x, b) (PY_UINT64_T)( ((x) << (b)) | ( (x) >> (64 - (b))) ) +# define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) ) #endif #define HALF_ROUND(a,b,c,d,s,t) \ @@ -369,22 +366,22 @@ typedef unsigned char PY_UINT8_T; static Py_hash_t siphash24(const void *src, Py_ssize_t src_sz) { - PY_UINT64_T k0 = _le64toh(_Py_HashSecret.siphash.k0); - PY_UINT64_T k1 = _le64toh(_Py_HashSecret.siphash.k1); - PY_UINT64_T b = (PY_UINT64_T)src_sz << 56; - const PY_UINT64_T *in = (PY_UINT64_T*)src; + uint64_t k0 = _le64toh(_Py_HashSecret.siphash.k0); + uint64_t k1 = _le64toh(_Py_HashSecret.siphash.k1); + uint64_t b = (uint64_t)src_sz << 56; + const uint64_t *in = (uint64_t*)src; - PY_UINT64_T v0 = k0 ^ 0x736f6d6570736575ULL; - PY_UINT64_T v1 = k1 ^ 0x646f72616e646f6dULL; - PY_UINT64_T v2 = k0 ^ 0x6c7967656e657261ULL; - PY_UINT64_T v3 = k1 ^ 0x7465646279746573ULL; + uint64_t v0 = k0 ^ 0x736f6d6570736575ULL; + uint64_t v1 = k1 ^ 0x646f72616e646f6dULL; + uint64_t v2 = k0 ^ 0x6c7967656e657261ULL; + uint64_t v3 = k1 ^ 0x7465646279746573ULL; - PY_UINT64_T t; - PY_UINT8_T *pt; - PY_UINT8_T *m; + uint64_t t; + uint8_t *pt; + uint8_t *m; while (src_sz >= 8) { - PY_UINT64_T mi = _le64toh(*in); + uint64_t mi = _le64toh(*in); in += 1; src_sz -= 8; v3 ^= mi; @@ -393,13 +390,13 @@ siphash24(const void *src, Py_ssize_t src_sz) { } t = 0; - pt = (PY_UINT8_T *)&t; - m = (PY_UINT8_T *)in; + pt = (uint8_t *)&t; + m = (uint8_t *)in; switch (src_sz) { case 7: pt[6] = m[6]; case 6: pt[5] = m[5]; case 5: pt[4] = m[4]; - case 4: Py_MEMCPY(pt, m, sizeof(PY_UINT32_T)); break; + case 4: memcpy(pt, m, sizeof(uint32_t)); break; case 3: pt[2] = m[2]; case 2: pt[1] = m[1]; case 1: pt[0] = m[0]; diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index ce52990496..5b5cc2b55e 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -31,6 +31,9 @@ #ifdef MS_WINDOWS #undef BYTE #include "windows.h" + +extern PyTypeObject PyWindowsConsoleIO_Type; +#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type)) #endif _Py_IDENTIFIER(flush); @@ -90,6 +93,10 @@ int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */ int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */ +#ifdef MS_WINDOWS +int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */ +int Py_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */ +#endif PyThreadState *_Py_Finalizing = NULL; @@ -151,11 +158,17 @@ Py_SetStandardStreamEncoding(const char *encoding, const char *errors) return -3; } } +#ifdef MS_WINDOWS + if (_Py_StandardStreamEncoding) { + /* Overriding the stream encoding implies legacy streams */ + Py_LegacyWindowsStdioFlag = 1; + } +#endif return 0; } -/* Global initializations. Can be undone by Py_Finalize(). Don't - call this twice without an intervening Py_Finalize() call. When +/* Global initializations. Can be undone by Py_FinalizeEx(). Don't + call this twice without an intervening Py_FinalizeEx() call. When initializations fail, a fatal error is issued and the function does not return. On return, the first thread and interpreter state have been created. @@ -223,6 +236,8 @@ get_locale_encoding(void) return NULL; } return get_codec_name(codeset); +#elif defined(__ANDROID__) + return get_codec_name("UTF-8"); #else PyErr_SetNone(PyExc_NotImplementedError); return NULL; @@ -252,6 +267,11 @@ import_init(PyInterpreterState *interp, PyObject *sysmod) interp->importlib = importlib; Py_INCREF(interp->importlib); + interp->import_func = PyDict_GetItemString(interp->builtins, "__import__"); + if (interp->import_func == NULL) + Py_FatalError("Py_Initialize: __import__ not found"); + Py_INCREF(interp->import_func); + /* Import the _imp module */ impmod = PyInit_imp(); if (impmod == NULL) { @@ -314,6 +334,12 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) check its value further. */ if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p); +#ifdef MS_WINDOWS + if ((p = Py_GETENV("PYTHONLEGACYWINDOWSFSENCODING")) && *p != '\0') + Py_LegacyWindowsFSEncodingFlag = add_flag(Py_LegacyWindowsFSEncodingFlag, p); + if ((p = Py_GETENV("PYTHONLEGACYWINDOWSSTDIO")) && *p != '\0') + Py_LegacyWindowsStdioFlag = add_flag(Py_LegacyWindowsStdioFlag, p); +#endif _PyRandom_Init(); @@ -327,11 +353,11 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) (void) PyThreadState_Swap(tstate); #ifdef WITH_THREAD - /* We can't call _PyEval_FiniThreads() in Py_Finalize because + /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because destroying the GIL might fail when it is being referenced from another running thread (see issue #9901). Instead we destroy the previously created GIL here, which ensures - that we can call Py_Initialize / Py_Finalize multiple times. */ + that we can call Py_Initialize / Py_FinalizeEx multiple times. */ _PyEval_FiniThreads(); /* Auto-thread-state API */ @@ -477,28 +503,35 @@ file_is_closed(PyObject *fobj) return r > 0; } -static void +static int flush_std_files(void) { PyObject *fout = _PySys_GetObjectId(&PyId_stdout); PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); PyObject *tmp; + int status = 0; if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { - tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); - if (tmp == NULL) + tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL); + if (tmp == NULL) { PyErr_WriteUnraisable(fout); + status = -1; + } else Py_DECREF(tmp); } if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { - tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); - if (tmp == NULL) + tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL); + if (tmp == NULL) { PyErr_Clear(); + status = -1; + } else Py_DECREF(tmp); } + + return status; } /* Undo the effect of Py_Initialize(). @@ -515,14 +548,15 @@ flush_std_files(void) */ -void -Py_Finalize(void) +int +Py_FinalizeEx(void) { PyInterpreterState *interp; PyThreadState *tstate; + int status = 0; if (!initialized) - return; + return status; wait_for_thread_shutdown(); @@ -547,7 +581,9 @@ Py_Finalize(void) initialized = 0; /* Flush sys.stdout and sys.stderr */ - flush_std_files(); + if (flush_std_files() < 0) { + status = -1; + } /* Disable signal handling */ PyOS_FiniInterrupts(); @@ -564,19 +600,21 @@ Py_Finalize(void) * XXX but I'm unclear on exactly how that one happens. In any case, * XXX I haven't seen a real-life report of either of these. */ - PyGC_Collect(); + _PyGC_CollectIfEnabled(); #ifdef COUNT_ALLOCS /* With COUNT_ALLOCS, it helps to run GC multiple times: each collection might release some types from the type list, so they become garbage. */ - while (PyGC_Collect() > 0) + while (_PyGC_CollectIfEnabled() > 0) /* nothing */; #endif /* Destroy all modules */ PyImport_Cleanup(); /* Flush sys.stdout and sys.stderr (again, in case more was printed) */ - flush_std_files(); + if (flush_std_files() < 0) { + status = -1; + } /* Collect final garbage. This disposes of cycles created by * class definitions, for example. @@ -594,7 +632,7 @@ Py_Finalize(void) * XXX Python code getting called. */ #if 0 - PyGC_Collect(); + _PyGC_CollectIfEnabled(); #endif /* Disable tracemalloc after all Python objects have been destroyed, @@ -612,7 +650,7 @@ Py_Finalize(void) /* Debugging stuff */ #ifdef COUNT_ALLOCS - dump_counts(stdout); + dump_counts(stderr); #endif /* dump hash stats */ _PyHash_Fini(); @@ -655,6 +693,8 @@ Py_Finalize(void) PySlice_Fini(); _PyGC_Fini(); _PyRandom_Fini(); + _PyArg_Fini(); + PyAsyncGen_Fini(); /* Cleanup Unicode implementation */ _PyUnicode_Fini(); @@ -680,6 +720,7 @@ Py_Finalize(void) /* Delete current thread. After this, many C API calls become crashy. */ PyThreadState_Swap(NULL); + PyInterpreterState_Delete(interp); #ifdef Py_TRACE_REFS @@ -690,12 +731,22 @@ Py_Finalize(void) if (Py_GETENV("PYTHONDUMPREFS")) _Py_PrintReferenceAddresses(stderr); #endif /* Py_TRACE_REFS */ -#ifdef PYMALLOC_DEBUG - if (Py_GETENV("PYTHONMALLOCSTATS")) - _PyObject_DebugMallocStats(stderr); +#ifdef WITH_PYMALLOC + if (_PyMem_PymallocEnabled()) { + char *opt = Py_GETENV("PYTHONMALLOCSTATS"); + if (opt != NULL && *opt != '\0') + _PyObject_DebugMallocStats(stderr); + } #endif call_ll_exitfuncs(); + return status; +} + +void +Py_Finalize(void) +{ + Py_FinalizeEx(); } /* Create and initialize a new interpreter and thread, and return the @@ -721,6 +772,12 @@ Py_NewInterpreter(void) if (!initialized) Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); +#ifdef WITH_THREAD + /* Issue #10915, #15751: The GIL API doesn't work with multiple + interpreters: disable PyGILState_Check(). */ + _PyGILState_check_enabled = 0; +#endif + interp = PyInterpreterState_New(); if (interp == NULL) return NULL; @@ -777,7 +834,7 @@ Py_NewInterpreter(void) if (initstdio() < 0) Py_FatalError( - "Py_Initialize: can't initialize sys standard streams"); + "Py_Initialize: can't initialize sys standard streams"); initmain(interp); if (!Py_NoSiteFlag) initsite(); @@ -803,7 +860,7 @@ handle_error: frames, and that it is its interpreter's only remaining thread. It is a fatal error to violate these constraints. - (Py_Finalize() doesn't have these constraints -- it zaps + (Py_FinalizeEx() doesn't have these constraints -- it zaps everything, regardless.) Locking: as above. @@ -881,11 +938,17 @@ Py_GetPythonHome(void) static void initmain(PyInterpreterState *interp) { - PyObject *m, *d, *loader; + PyObject *m, *d, *loader, *ann_dict; m = PyImport_AddModule("__main__"); if (m == NULL) Py_FatalError("can't create __main__ module"); d = PyModule_GetDict(m); + ann_dict = PyDict_New(); + if ((ann_dict == NULL) || + (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) { + Py_FatalError("Failed to initialize __main__.__annotations__"); + } + Py_DECREF(ann_dict); if (PyDict_GetItemString(d, "__builtins__") == NULL) { PyObject *bimod = PyImport_ImportModule("builtins"); if (bimod == NULL) { @@ -921,6 +984,18 @@ initfsencoding(PyInterpreterState *interp) { PyObject *codec; +#ifdef MS_WINDOWS + if (Py_LegacyWindowsFSEncodingFlag) + { + Py_FileSystemDefaultEncoding = "mbcs"; + Py_FileSystemDefaultEncodeErrors = "replace"; + } + else + { + Py_FileSystemDefaultEncoding = "utf-8"; + Py_FileSystemDefaultEncodeErrors = "surrogatepass"; + } +#else if (Py_FileSystemDefaultEncoding == NULL) { Py_FileSystemDefaultEncoding = get_locale_encoding(); @@ -931,6 +1006,7 @@ initfsencoding(PyInterpreterState *interp) interp->fscodec_initialized = 1; return 0; } +#endif /* the encoding is mbcs, utf-8 or ascii */ codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding); @@ -969,9 +1045,12 @@ static int is_valid_fd(int fd) { int fd2; - if (fd < 0 || !_PyVerify_fd(fd)) + if (fd < 0) return 0; _Py_BEGIN_SUPPRESS_IPH + /* Prefer dup() over fstat(). fstat() can require input/output whereas + dup() doesn't, there is a low risk of EMFILE/ENFILE at Python + startup. */ fd2 = dup(fd); if (fd2 >= 0) close(fd2); @@ -982,8 +1061,8 @@ is_valid_fd(int fd) /* returns Py_None if the fd is not valid */ static PyObject* create_stdio(PyObject* io, - int fd, int write_mode, char* name, - char* encoding, char* errors) + int fd, int write_mode, const char* name, + const char* encoding, const char* errors) { PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; const char* mode; @@ -1013,7 +1092,8 @@ create_stdio(PyObject* io, mode = "rb"; buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi", fd, mode, buffering, - Py_None, Py_None, Py_None, 0); + Py_None, Py_None, /* encoding, errors */ + Py_None, 0); /* newline, closefd */ if (buf == NULL) goto error; @@ -1028,10 +1108,16 @@ create_stdio(PyObject* io, Py_INCREF(raw); } +#ifdef MS_WINDOWS + /* Windows console IO is always UTF-8 encoded */ + if (PyWindowsConsoleIO_Check(raw)) + encoding = "utf-8"; +#endif + text = PyUnicode_FromString(name); if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0) goto error; - res = _PyObject_CallMethodId(raw, &PyId_isatty, ""); + res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL); if (res == NULL) goto error; isatty = PyObject_IsTrue(res); @@ -1243,25 +1329,11 @@ initstdio(void) static void _Py_FatalError_DumpTracebacks(int fd) { - PyThreadState *tstate; - -#ifdef WITH_THREAD - /* PyGILState_GetThisThreadState() works even if the GIL was released */ - tstate = PyGILState_GetThisThreadState(); -#else - tstate = PyThreadState_GET(); -#endif - if (tstate == NULL) { - /* _Py_DumpTracebackThreads() requires the thread state to display - * frames */ - return; - } - fputc('\n', stderr); fflush(stderr); /* display the current Python stack */ - _Py_DumpTracebackThreads(fd, tstate->interp, tstate); + _Py_DumpTracebackThreads(fd, NULL, NULL); } /* Print the current exception (if an exception is set) with its traceback, @@ -1316,7 +1388,7 @@ _Py_FatalError_PrintExc(int fd) Py_XDECREF(tb); /* sys.stderr may be buffered: call sys.stderr.flush() */ - res = _PyObject_CallMethodId(ferr, &PyId_flush, ""); + res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL); if (res == NULL) PyErr_Clear(); else @@ -1388,7 +1460,7 @@ exit: /* Clean up and exit */ #ifdef WITH_THREAD -#include "pythread.h" +# include "pythread.h" #endif static void (*pyexitfunc)(void) = NULL; @@ -1426,7 +1498,7 @@ wait_for_thread_shutdown(void) PyErr_Clear(); return; } - result = _PyObject_CallMethodId(threading, &PyId__shutdown, ""); + result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL); if (result == NULL) { PyErr_WriteUnraisable(threading); } @@ -1462,7 +1534,9 @@ call_ll_exitfuncs(void) void Py_Exit(int sts) { - Py_Finalize(); + if (Py_FinalizeEx() < 0) { + sts = 120; + } exit(sts); } diff --git a/Python/pystate.c b/Python/pystate.c index 24e20c3e23..65c244e6f7 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -6,7 +6,7 @@ #define GET_TSTATE() \ ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) #define SET_TSTATE(value) \ - _Py_atomic_store_relaxed(&_PyThreadState_Current, (Py_uintptr_t)(value)) + _Py_atomic_store_relaxed(&_PyThreadState_Current, (uintptr_t)(value)) #define GET_INTERP_STATE() \ (GET_TSTATE()->interp) @@ -25,7 +25,7 @@ to avoid the expense of doing their own locking). #ifdef HAVE_DLFCN_H #include <dlfcn.h> #endif -#ifndef RTLD_LAZY +#if !HAVE_DECL_RTLD_LAZY #define RTLD_LAZY 1 #endif #endif @@ -34,6 +34,8 @@ to avoid the expense of doing their own locking). extern "C" { #endif +int _PyGILState_check_enabled = 1; + #ifdef WITH_THREAD #include "pythread.h" static PyThread_type_lock head_mutex = NULL; /* Protects interp->tstate_head */ @@ -45,7 +47,7 @@ static PyThread_type_lock head_mutex = NULL; /* Protects interp->tstate_head */ GILState implementation */ static PyInterpreterState *autoInterpreterState = NULL; -static int autoTLSkey = 0; +static int autoTLSkey = -1; #else #define HEAD_INIT() /* Nothing */ #define HEAD_LOCK() /* Nothing */ @@ -88,16 +90,15 @@ PyInterpreterState_New(void) interp->codecs_initialized = 0; interp->fscodec_initialized = 0; interp->importlib = NULL; + interp->import_func = NULL; + interp->eval_frame = _PyEval_EvalFrameDefault; #ifdef HAVE_DLOPEN -#ifdef RTLD_NOW +#if HAVE_DECL_RTLD_NOW interp->dlopenflags = RTLD_NOW; #else interp->dlopenflags = RTLD_LAZY; #endif #endif -#ifdef WITH_TSC - interp->tscdump = 0; -#endif HEAD_LOCK(); interp->next = interp_head; @@ -126,6 +127,7 @@ PyInterpreterState_Clear(PyInterpreterState *interp) Py_CLEAR(interp->builtins); Py_CLEAR(interp->builtins_copy); Py_CLEAR(interp->importlib); + Py_CLEAR(interp->import_func); } @@ -222,6 +224,10 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->coroutine_wrapper = NULL; tstate->in_coroutine_wrapper = 0; + tstate->co_extra_user_count = 0; + + tstate->async_gen_firstiter = NULL; + tstate->async_gen_finalizer = NULL; if (init) _PyThreadState_Init(tstate); @@ -402,6 +408,8 @@ PyThreadState_Clear(PyThreadState *tstate) Py_CLEAR(tstate->c_traceobj); Py_CLEAR(tstate->coroutine_wrapper); + Py_CLEAR(tstate->async_gen_firstiter); + Py_CLEAR(tstate->async_gen_finalizer); } @@ -451,10 +459,10 @@ PyThreadState_DeleteCurrent() if (tstate == NULL) Py_FatalError( "PyThreadState_DeleteCurrent: no current tstate"); - SET_TSTATE(NULL); + tstate_delete_common(tstate); if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) PyThread_delete_key_value(autoTLSkey); - tstate_delete_common(tstate); + SET_TSTATE(NULL); PyEval_ReleaseLock(); } #endif /* WITH_THREAD */ @@ -698,7 +706,7 @@ PyThreadState_IsCurrent(PyThreadState *tstate) } /* Internal initialization/finalization functions called by - Py_Initialize/Py_Finalize + Py_Initialize/Py_FinalizeEx */ void _PyGILState_Init(PyInterpreterState *i, PyThreadState *t) @@ -714,10 +722,17 @@ _PyGILState_Init(PyInterpreterState *i, PyThreadState *t) _PyGILState_NoteThreadState(t); } +PyInterpreterState * +_PyGILState_GetInterpreterStateUnsafe(void) +{ + return autoInterpreterState; +} + void _PyGILState_Fini(void) { PyThread_delete_key(autoTLSkey); + autoTLSkey = -1; autoInterpreterState = NULL; } @@ -786,8 +801,19 @@ PyGILState_GetThisThreadState(void) int PyGILState_Check(void) { - PyThreadState *tstate = GET_TSTATE(); - return tstate && (tstate == PyGILState_GetThisThreadState()); + PyThreadState *tstate; + + if (!_PyGILState_check_enabled) + return 1; + + if (autoTLSkey == -1) + return 1; + + tstate = GET_TSTATE(); + if (tstate == NULL) + return 0; + + return (tstate == PyGILState_GetThisThreadState()); } PyGILState_STATE diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 209c9086c8..64d0c52e48 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -370,6 +370,72 @@ PyOS_string_to_double(const char *s, return result; } +/* Remove underscores that follow the underscore placement rule from + the string and then call the `innerfunc` function on the result. + It should return a new object or NULL on exception. + + `what` is used for the error message emitted when underscores are detected + that don't follow the rule. `arg` is an opaque pointer passed to the inner + function. + + This is used to implement underscore-agnostic conversion for floats + and complex numbers. +*/ +PyObject * +_Py_string_to_number_with_underscores( + const char *s, Py_ssize_t orig_len, const char *what, PyObject *obj, void *arg, + PyObject *(*innerfunc)(const char *, Py_ssize_t, void *)) +{ + char prev; + const char *p, *last; + char *dup, *end; + PyObject *result; + + if (strchr(s, '_') == NULL) { + return innerfunc(s, orig_len, arg); + } + + dup = PyMem_Malloc(orig_len + 1); + end = dup; + prev = '\0'; + last = s + orig_len; + for (p = s; *p; p++) { + if (*p == '_') { + /* Underscores are only allowed after digits. */ + if (!(prev >= '0' && prev <= '9')) { + goto error; + } + } + else { + *end++ = *p; + /* Underscores are only allowed before digits. */ + if (prev == '_' && !(*p >= '0' && *p <= '9')) { + goto error; + } + } + prev = *p; + } + /* Underscores are not allowed at the end. */ + if (prev == '_') { + goto error; + } + /* No embedded NULs allowed. */ + if (p != last) { + goto error; + } + *end = '\0'; + result = innerfunc(dup, end - dup, arg); + PyMem_Free(dup); + return result; + + error: + PyMem_Free(dup); + PyErr_Format(PyExc_ValueError, + "could not convert string to %s: " + "%R", what, obj); + return NULL; +} + #ifdef PY_NO_SHORT_FLOAT_REPR /* Given a string that may have a decimal point in the current @@ -881,12 +947,12 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val, #define OFS_E 2 /* The lengths of these are known to the code below, so don't change them */ -static char *lc_float_strings[] = { +static const char * const lc_float_strings[] = { "inf", "nan", "e", }; -static char *uc_float_strings[] = { +static const char * const uc_float_strings[] = { "INF", "NAN", "E", @@ -925,7 +991,8 @@ static char * format_float_short(double d, char format_code, int mode, int precision, int always_add_sign, int add_dot_0_if_integer, - int use_alt_formatting, char **float_strings, int *type) + int use_alt_formatting, const char * const *float_strings, + int *type) { char *buf = NULL; char *p = NULL; @@ -1176,7 +1243,7 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val, int flags, int *type) { - char **float_strings = lc_float_strings; + const char * const *float_strings = lc_float_strings; int mode; /* Validate format_code, and map upper and lower case. Compute the diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 7fbf06e68a..1fc86c0a3e 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -431,7 +431,7 @@ static int parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, int *lineno, int *offset, PyObject **text) { - long hold; + int hold; PyObject *v; _Py_IDENTIFIER(msg); _Py_IDENTIFIER(filename); @@ -464,11 +464,11 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, v = _PyObject_GetAttrId(err, &PyId_lineno); if (!v) goto finally; - hold = PyLong_AsLong(v); + hold = _PyLong_AsInt(v); Py_DECREF(v); if (hold < 0 && PyErr_Occurred()) goto finally; - *lineno = (int)hold; + *lineno = hold; v = _PyObject_GetAttrId(err, &PyId_offset); if (!v) @@ -477,11 +477,11 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, *offset = -1; Py_DECREF(v); } else { - hold = PyLong_AsLong(v); + hold = _PyLong_AsInt(v); Py_DECREF(v); if (hold < 0 && PyErr_Occurred()) goto finally; - *offset = (int)hold; + *offset = hold; } v = _PyObject_GetAttrId(err, &PyId_text); @@ -630,8 +630,13 @@ PyErr_PrintEx(int set_sys_last_vars) } hook = _PySys_GetObjectId(&PyId_excepthook); if (hook) { - PyObject *args = PyTuple_Pack(3, exception, v, tb); - PyObject *result = PyEval_CallObject(hook, args); + PyObject* stack[3]; + PyObject *result; + + stack[0] = exception; + stack[1] = v; + stack[2] = tb; + result = _PyObject_FastCall(hook, stack, 3); if (result == NULL) { PyObject *exception2, *v2, *tb2; if (PyErr_ExceptionMatches(PyExc_SystemExit)) { @@ -660,7 +665,6 @@ PyErr_PrintEx(int set_sys_last_vars) Py_XDECREF(tb2); } Py_XDECREF(result); - Py_XDECREF(args); } else { PySys_WriteStderr("sys.excepthook is missing\n"); PyErr_Display(exception, v, tb); @@ -791,11 +795,11 @@ print_exception(PyObject *f, PyObject *value) PyErr_Clear(); } -static const char *cause_message = +static const char cause_message[] = "\nThe above exception was the direct cause " "of the following exception:\n\n"; -static const char *context_message = +static const char context_message[] = "\nDuring handling of the above exception, " "another exception occurred:\n\n"; @@ -946,7 +950,7 @@ flush_io(void) f = _PySys_GetObjectId(&PyId_stderr); if (f != NULL) { - r = _PyObject_CallMethodId(f, &PyId_flush, ""); + r = _PyObject_CallMethodId(f, &PyId_flush, NULL); if (r) Py_DECREF(r); else @@ -954,7 +958,7 @@ flush_io(void) } f = _PySys_GetObjectId(&PyId_stdout); if (f != NULL) { - r = _PyObject_CallMethodId(f, &PyId_flush, ""); + r = _PyObject_CallMethodId(f, &PyId_flush, NULL); if (r) Py_DECREF(r); else @@ -1144,8 +1148,8 @@ PyParser_ASTFromString(const char *s, const char *filename_str, int start, mod_ty PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, - int start, char *ps1, - char *ps2, PyCompilerFlags *flags, int *errcode, + int start, const char *ps1, + const char *ps2, PyCompilerFlags *flags, int *errcode, PyArena *arena) { mod_ty mod; @@ -1177,8 +1181,8 @@ PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, mod_ty PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc, - int start, char *ps1, - char *ps2, PyCompilerFlags *flags, int *errcode, + int start, const char *ps1, + const char *ps2, PyCompilerFlags *flags, int *errcode, PyArena *arena) { mod_ty mod; diff --git a/Python/pytime.c b/Python/pytime.c index 7f65824b47..3015a6be0b 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -7,6 +7,11 @@ #include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */ #endif +#define _PyTime_check_mul_overflow(a, b) \ + (assert(b > 0), \ + (_PyTime_t)(a) < _PyTime_MIN / (_PyTime_t)(b) \ + || _PyTime_MAX / (_PyTime_t)(b) < (_PyTime_t)(a)) + /* To millisecond (10^-3) */ #define SEC_TO_MS 1000 @@ -33,12 +38,12 @@ error_time_t_overflow(void) time_t _PyLong_AsTime_t(PyObject *obj) { -#if defined(HAVE_LONG_LONG) && SIZEOF_TIME_T == SIZEOF_LONG_LONG - PY_LONG_LONG val; +#if SIZEOF_TIME_T == SIZEOF_LONG_LONG + long long val; val = PyLong_AsLongLong(obj); #else long val; - assert(sizeof(time_t) <= sizeof(long)); + Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); val = PyLong_AsLong(obj); #endif if (val == -1 && PyErr_Occurred()) { @@ -52,58 +57,91 @@ _PyLong_AsTime_t(PyObject *obj) PyObject * _PyLong_FromTime_t(time_t t) { -#if defined(HAVE_LONG_LONG) && SIZEOF_TIME_T == SIZEOF_LONG_LONG - return PyLong_FromLongLong((PY_LONG_LONG)t); +#if SIZEOF_TIME_T == SIZEOF_LONG_LONG + return PyLong_FromLongLong((long long)t); #else - assert(sizeof(time_t) <= sizeof(long)); + Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); return PyLong_FromLong((long)t); #endif } +/* Round to nearest with ties going to nearest even integer + (_PyTime_ROUND_HALF_EVEN) */ +static double +_PyTime_RoundHalfEven(double x) +{ + double rounded = round(x); + if (fabs(x-rounded) == 0.5) + /* halfway case: round to even */ + rounded = 2.0*round(x/2.0); + return rounded; +} + +static double +_PyTime_Round(double x, _PyTime_round_t round) +{ + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + d = x; + if (round == _PyTime_ROUND_HALF_EVEN) + d = _PyTime_RoundHalfEven(d); + else if (round == _PyTime_ROUND_CEILING) + d = ceil(d); + else + d = floor(d); + return d; +} + static int -_PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, +_PyTime_DoubleToDenominator(double d, time_t *sec, long *numerator, double denominator, _PyTime_round_t round) { - assert(denominator <= LONG_MAX); - if (PyFloat_Check(obj)) { - double d, intpart, err; - /* volatile avoids unsafe optimization on float enabled by gcc -O3 */ - volatile double floatpart; + double intpart, err; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double floatpart; - d = PyFloat_AsDouble(obj); - floatpart = modf(d, &intpart); - if (floatpart < 0) { - floatpart = 1.0 + floatpart; - intpart -= 1.0; - } + floatpart = modf(d, &intpart); - floatpart *= denominator; - if (round == _PyTime_ROUND_CEILING) { - floatpart = ceil(floatpart); - if (floatpart >= denominator) { - floatpart = 0.0; - intpart += 1.0; - } - } - else { - floatpart = floor(floatpart); - } + floatpart *= denominator; + floatpart = _PyTime_Round(floatpart, round); + if (floatpart >= denominator) { + floatpart -= denominator; + intpart += 1.0; + } + else if (floatpart < 0) { + floatpart += denominator; + intpart -= 1.0; + } + assert(0.0 <= floatpart && floatpart < denominator); - *sec = (time_t)intpart; - err = intpart - (double)*sec; - if (err <= -1.0 || err >= 1.0) { - error_time_t_overflow(); - return -1; - } + *sec = (time_t)intpart; + *numerator = (long)floatpart; - *numerator = (long)floatpart; - return 0; + err = intpart - (double)*sec; + if (err <= -1.0 || err >= 1.0) { + error_time_t_overflow(); + return -1; + } + return 0; +} + +static int +_PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, + double denominator, _PyTime_round_t round) +{ + assert(denominator <= (double)LONG_MAX); + + if (PyFloat_Check(obj)) { + double d = PyFloat_AsDouble(obj); + return _PyTime_DoubleToDenominator(d, sec, numerator, + denominator, round); } else { *sec = _PyLong_AsTime_t(obj); + *numerator = 0; if (*sec == (time_t)-1 && PyErr_Occurred()) return -1; - *numerator = 0; return 0; } } @@ -112,13 +150,12 @@ int _PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round) { if (PyFloat_Check(obj)) { - double d, intpart, err; + double intpart, err; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; d = PyFloat_AsDouble(obj); - if (round == _PyTime_ROUND_CEILING) - d = ceil(d); - else - d = floor(d); + d = _PyTime_Round(d, round); (void)modf(d, &intpart); *sec = (time_t)intpart; @@ -141,14 +178,20 @@ int _PyTime_ObjectToTimespec(PyObject *obj, time_t *sec, long *nsec, _PyTime_round_t round) { - return _PyTime_ObjectToDenominator(obj, sec, nsec, 1e9, round); + int res; + res = _PyTime_ObjectToDenominator(obj, sec, nsec, 1e9, round); + assert(0 <= *nsec && *nsec < SEC_TO_NS); + return res; } int _PyTime_ObjectToTimeval(PyObject *obj, time_t *sec, long *usec, _PyTime_round_t round) { - return _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round); + int res; + res = _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round); + assert(0 <= *usec && *usec < SEC_TO_US); + return res; } static void @@ -162,21 +205,24 @@ _PyTime_t _PyTime_FromSeconds(int seconds) { _PyTime_t t; + t = (_PyTime_t)seconds; /* ensure that integer overflow cannot happen, int type should have 32 bits, whereas _PyTime_t type has at least 64 bits (SEC_TO_MS takes 30 bits). */ - assert((seconds >= 0 && seconds <= _PyTime_MAX / SEC_TO_NS) - || (seconds < 0 && seconds >= _PyTime_MIN / SEC_TO_NS)); - t = (_PyTime_t)seconds * SEC_TO_NS; + Py_BUILD_ASSERT(INT_MAX <= _PyTime_MAX / SEC_TO_NS); + Py_BUILD_ASSERT(INT_MIN >= _PyTime_MIN / SEC_TO_NS); + assert((t >= 0 && t <= _PyTime_MAX / SEC_TO_NS) + || (t < 0 && t >= _PyTime_MIN / SEC_TO_NS)); + t *= SEC_TO_NS; return t; } _PyTime_t -_PyTime_FromNanoseconds(PY_LONG_LONG ns) +_PyTime_FromNanoseconds(long long ns) { _PyTime_t t; - assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); - t = Py_SAFE_DOWNCAST(ns, PY_LONG_LONG, _PyTime_t); + Py_BUILD_ASSERT(sizeof(long long) <= sizeof(_PyTime_t)); + t = Py_SAFE_DOWNCAST(ns, long long, _PyTime_t); return t; } @@ -187,12 +233,15 @@ _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts, int raise) _PyTime_t t; int res = 0; - t = (_PyTime_t)ts->tv_sec * SEC_TO_NS; - if (t / SEC_TO_NS != ts->tv_sec) { + Py_BUILD_ASSERT(sizeof(ts->tv_sec) <= sizeof(_PyTime_t)); + t = (_PyTime_t)ts->tv_sec; + + if (_PyTime_check_mul_overflow(t, SEC_TO_NS)) { if (raise) _PyTime_overflow(); res = -1; } + t = t * SEC_TO_NS; t += ts->tv_nsec; @@ -206,12 +255,15 @@ _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv, int raise) _PyTime_t t; int res = 0; - t = (_PyTime_t)tv->tv_sec * SEC_TO_NS; - if (t / SEC_TO_NS != tv->tv_sec) { + Py_BUILD_ASSERT(sizeof(tv->tv_sec) <= sizeof(_PyTime_t)); + t = (_PyTime_t)tv->tv_sec; + + if (_PyTime_check_mul_overflow(t, SEC_TO_NS)) { if (raise) _PyTime_overflow(); res = -1; } + t = t * SEC_TO_NS; t += (_PyTime_t)tv->tv_usec * US_TO_NS; @@ -221,50 +273,52 @@ _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv, int raise) #endif static int -_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, - long to_nanoseconds) +_PyTime_FromFloatObject(_PyTime_t *t, double value, _PyTime_round_t round, + long unit_to_ns) { - if (PyFloat_Check(obj)) { - /* volatile avoids unsafe optimization on float enabled by gcc -O3 */ - volatile double d, err; + double err; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; - /* convert to a number of nanoseconds */ - d = PyFloat_AsDouble(obj); - d *= to_nanoseconds; + /* convert to a number of nanoseconds */ + d = value; + d *= (double)unit_to_ns; + d = _PyTime_Round(d, round); - if (round == _PyTime_ROUND_CEILING) - d = ceil(d); - else - d = floor(d); + *t = (_PyTime_t)d; + err = d - (double)*t; + if (fabs(err) >= 1.0) { + _PyTime_overflow(); + return -1; + } + return 0; +} - *t = (_PyTime_t)d; - err = d - (double)*t; - if (fabs(err) >= 1.0) { - _PyTime_overflow(); - return -1; - } - return 0; +static int +_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, + long unit_to_ns) +{ + if (PyFloat_Check(obj)) { + double d; + d = PyFloat_AsDouble(obj); + return _PyTime_FromFloatObject(t, d, round, unit_to_ns); } else { -#ifdef HAVE_LONG_LONG - PY_LONG_LONG sec; + long long sec; + Py_BUILD_ASSERT(sizeof(long long) <= sizeof(_PyTime_t)); + sec = PyLong_AsLongLong(obj); - assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); -#else - long sec; - sec = PyLong_AsLong(obj); - assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); -#endif if (sec == -1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) _PyTime_overflow(); return -1; } - *t = sec * to_nanoseconds; - if (*t / to_nanoseconds != sec) { + + if (_PyTime_check_mul_overflow(sec, unit_to_ns)) { _PyTime_overflow(); return -1; } + *t = sec * unit_to_ns; return 0; } } @@ -284,24 +338,28 @@ _PyTime_FromMillisecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t roun double _PyTime_AsSecondsDouble(_PyTime_t t) { - _PyTime_t sec, ns; - /* Divide using integers to avoid rounding issues on the integer part. - 1e-9 cannot be stored exactly in IEEE 64-bit. */ - sec = t / SEC_TO_NS; - ns = t % SEC_TO_NS; - return (double)sec + (double)ns * 1e-9; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + if (t % SEC_TO_NS == 0) { + _PyTime_t secs; + /* Divide using integers to avoid rounding issues on the integer part. + 1e-9 cannot be stored exactly in IEEE 64-bit. */ + secs = t / SEC_TO_NS; + d = (double)secs; + } + else { + d = (double)t; + d /= 1e9; + } + return d; } PyObject * _PyTime_AsNanosecondsObject(_PyTime_t t) { -#ifdef HAVE_LONG_LONG - assert(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t)); - return PyLong_FromLongLong((PY_LONG_LONG)t); -#else - assert(sizeof(long) >= sizeof(_PyTime_t)); - return PyLong_FromLong((long)t); -#endif + Py_BUILD_ASSERT(sizeof(long long) >= sizeof(_PyTime_t)); + return PyLong_FromLongLong((long long)t); } static _PyTime_t @@ -309,7 +367,20 @@ _PyTime_Divide(const _PyTime_t t, const _PyTime_t k, const _PyTime_round_t round) { assert(k > 1); - if (round == _PyTime_ROUND_CEILING) { + if (round == _PyTime_ROUND_HALF_EVEN) { + _PyTime_t x, r, abs_r; + x = t / k; + r = t % k; + abs_r = Py_ABS(r); + if (abs_r > k / 2 || (abs_r == k / 2 && (Py_ABS(x) & 1))) { + if (t >= 0) + x++; + else + x--; + } + return x; + } + else if (round == _PyTime_ROUND_CEILING) { if (t >= 0) return (t + k - 1) / k; else @@ -373,7 +444,7 @@ static int _PyTime_AsTimevalStruct_impl(_PyTime_t t, struct timeval *tv, _PyTime_round_t round, int raise) { - _PyTime_t secs; + _PyTime_t secs, secs2; int us; int res; @@ -386,7 +457,8 @@ _PyTime_AsTimevalStruct_impl(_PyTime_t t, struct timeval *tv, #endif tv->tv_usec = us; - if (res < 0 || (_PyTime_t)tv->tv_sec != secs) { + secs2 = (_PyTime_t)tv->tv_sec; + if (res < 0 || secs2 != secs) { if (raise) error_time_t_overflow(); return -1; @@ -424,6 +496,7 @@ _PyTime_AsTimevalTime_t(_PyTime_t t, time_t *p_secs, int *us, return 0; } + #if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) int _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts) @@ -437,13 +510,13 @@ _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts) secs -= 1; } ts->tv_sec = (time_t)secs; + assert(0 <= nsec && nsec < SEC_TO_NS); + ts->tv_nsec = nsec; + if ((_PyTime_t)ts->tv_sec != secs) { - _PyTime_overflow(); + error_time_t_overflow(); return -1; } - ts->tv_nsec = nsec; - - assert(0 <= ts->tv_nsec && ts->tv_nsec <= 999999999); return 0; } #endif @@ -557,19 +630,20 @@ _PyTime_GetSystemClockWithInfo(_PyTime_t *t, _Py_clock_info_t *info) return pygettimeofday(t, info, 1); } - static int pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) { #if defined(MS_WINDOWS) - ULONGLONG result; + ULONGLONG ticks; + _PyTime_t t; assert(info == NULL || raise); - result = GetTickCount64(); + ticks = GetTickCount64(); + Py_BUILD_ASSERT(sizeof(ticks) <= sizeof(_PyTime_t)); + t = (_PyTime_t)ticks; - *tp = result * MS_TO_NS; - if (*tp / MS_TO_NS != result) { + if (_PyTime_check_mul_overflow(t, MS_TO_NS)) { if (raise) { _PyTime_overflow(); return -1; @@ -577,6 +651,7 @@ pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) /* Hello, time traveler! */ assert(0); } + *tp = t * MS_TO_NS; if (info) { DWORD timeAdjustment, timeIncrement; @@ -689,8 +764,57 @@ _PyTime_Init(void) if (_PyTime_GetMonotonicClockWithInfo(&t, NULL) < 0) return -1; - /* check that _PyTime_FromSeconds() cannot overflow */ - assert(INT_MAX <= _PyTime_MAX / SEC_TO_NS); - assert(INT_MIN >= _PyTime_MIN / SEC_TO_NS); return 0; } + +int +_PyTime_localtime(time_t t, struct tm *tm) +{ +#ifdef MS_WINDOWS + int error; + + error = localtime_s(tm, &t); + if (error != 0) { + errno = error; + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#else /* !MS_WINDOWS */ + if (localtime_r(&t, tm) == NULL) { +#ifdef EINVAL + if (errno == 0) + errno = EINVAL; +#endif + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif /* MS_WINDOWS */ +} + +int +_PyTime_gmtime(time_t t, struct tm *tm) +{ +#ifdef MS_WINDOWS + int error; + + error = gmtime_s(tm, &t); + if (error != 0) { + errno = error; + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#else /* !MS_WINDOWS */ + if (gmtime_r(&t, tm) == NULL) { +#ifdef EINVAL + if (errno == 0) + errno = EINVAL; +#endif + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif /* MS_WINDOWS */ +} diff --git a/Python/random.c b/Python/random.c index f2ada5f0d8..6f9f711074 100644 --- a/Python/random.c +++ b/Python/random.c @@ -1,6 +1,9 @@ #include "Python.h" #ifdef MS_WINDOWS # include <windows.h> +/* All sample MSDN wincrypt programs include the header below. It is at least + * required with Min GW. */ +# include <wincrypt.h> #else # include <fcntl.h> # ifdef HAVE_SYS_STAT_H @@ -36,10 +39,9 @@ win32_urandom_init(int raise) return 0; error: - if (raise) + if (raise) { PyErr_SetFromWindowsErr(0); - else - Py_FatalError("Failed to initialize Windows random API (CryptoGen)"); + } return -1; } @@ -52,8 +54,9 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) if (hCryptProv == 0) { - if (win32_urandom_init(raise) == -1) + if (win32_urandom_init(raise) == -1) { return -1; + } } while (size > 0) @@ -62,11 +65,9 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) if (!CryptGenRandom(hCryptProv, (DWORD)chunk, buffer)) { /* CryptGenRandom() failed */ - if (raise) + if (raise) { PyErr_SetFromWindowsErr(0); - else - Py_FatalError("Failed to initialized the randomized hash " - "secret using CryptoGen)"); + } return -1; } buffer += chunk; @@ -83,29 +84,28 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) /* Fill buffer with size pseudo-random bytes generated by getentropy(). Return 0 on success, or raise an exception and return -1 on error. - If fatal is nonzero, call Py_FatalError() instead of raising an exception - on error. */ + If raise is zero, don't raise an exception on error. */ static int -py_getentropy(unsigned char *buffer, Py_ssize_t size, int fatal) +py_getentropy(char *buffer, Py_ssize_t size, int raise) { while (size > 0) { Py_ssize_t len = Py_MIN(size, 256); int res; - if (!fatal) { + if (raise) { Py_BEGIN_ALLOW_THREADS res = getentropy(buffer, len); Py_END_ALLOW_THREADS - - if (res < 0) { - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } } else { res = getentropy(buffer, len); - if (res < 0) - Py_FatalError("getentropy() failed"); + } + + if (res < 0) { + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + } + return -1; } buffer += len; @@ -128,25 +128,22 @@ py_getentropy(unsigned char *buffer, Py_ssize_t size, int fatal) getrandom() failed with EINTR and the Python signal handler raised an exception, or getrandom() failed with a different error. */ static int -py_getrandom(void *buffer, Py_ssize_t size, int raise) +py_getrandom(void *buffer, Py_ssize_t size, int blocking, int raise) { /* Is getrandom() supported by the running kernel? Set to 0 if getrandom() failed with ENOSYS or EPERM. Need Linux kernel 3.17 or newer, or Solaris 11.3 or newer */ static int getrandom_works = 1; - - /* getrandom() on Linux will block if called before the kernel has - * initialized the urandom entropy pool. This will cause Python - * to hang on startup if called very early in the boot process - - * see https://bugs.python.org/issue26839. To avoid this, use the - * GRND_NONBLOCK flag. */ - const int flags = GRND_NONBLOCK; + int flags; + char *dest; long n; if (!getrandom_works) { return 0; } + flags = blocking ? 0 : GRND_NONBLOCK; + dest = buffer; while (0 < size) { #ifdef sun /* Issue #26735: On Solaris, getrandom() is limited to returning up @@ -160,23 +157,23 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) #ifdef HAVE_GETRANDOM if (raise) { Py_BEGIN_ALLOW_THREADS - n = getrandom(buffer, n, flags); + n = getrandom(dest, n, flags); Py_END_ALLOW_THREADS } else { - n = getrandom(buffer, n, flags); + n = getrandom(dest, n, flags); } #else /* On Linux, use the syscall() function because the GNU libc doesn't - * expose the Linux getrandom() syscall yet. See: - * https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ + expose the Linux getrandom() syscall yet. See: + https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ if (raise) { Py_BEGIN_ALLOW_THREADS - n = syscall(SYS_getrandom, buffer, n, flags); + n = syscall(SYS_getrandom, dest, n, flags); Py_END_ALLOW_THREADS } else { - n = syscall(SYS_getrandom, buffer, n, flags); + n = syscall(SYS_getrandom, dest, n, flags); } #endif @@ -188,40 +185,33 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) getrandom_works = 0; return 0; } - if (errno == EAGAIN) { - /* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system - urandom is not initialiazed yet. In this case, fall back on - reading from /dev/urandom. - - Note: In this case the data read will not be random so - should not be used for cryptographic purposes. Retaining - the existing semantics for practical purposes. */ - getrandom_works = 0; + + /* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system urandom + is not initialiazed yet. For _PyRandom_Init(), we ignore their + error and fall back on reading /dev/urandom which never blocks, + even if the system urandom is not initialized yet. */ + if (errno == EAGAIN && !raise && !blocking) { return 0; } if (errno == EINTR) { - if (PyErr_CheckSignals()) { - if (!raise) { - Py_FatalError("getrandom() interrupted by a signal"); + if (raise) { + if (PyErr_CheckSignals()) { + return -1; } - return -1; } - /* retry getrandom() */ + /* retry getrandom() if it was interrupted by a signal */ continue; } if (raise) { PyErr_SetFromErrno(PyExc_OSError); } - else { - Py_FatalError("getrandom() failed"); - } return -1; } - buffer += n; + dest += n; size -= n; } return 1; @@ -238,64 +228,21 @@ static struct { /* Read 'size' random bytes from py_getrandom(). Fall back on reading from /dev/urandom if getrandom() is not available. - Call Py_FatalError() on error. */ -static void -dev_urandom_noraise(unsigned char *buffer, Py_ssize_t size) -{ - int fd; - Py_ssize_t n; - - assert (0 < size); - -#ifdef PY_GETRANDOM - if (py_getrandom(buffer, size, 0) == 1) { - return; - } - /* getrandom() failed with ENOSYS or EPERM, - fall back on reading /dev/urandom */ -#endif - - fd = _Py_open_noraise("/dev/urandom", O_RDONLY); - if (fd < 0) { - Py_FatalError("Failed to open /dev/urandom"); - } - - while (0 < size) - { - do { - n = read(fd, buffer, (size_t)size); - } while (n < 0 && errno == EINTR); - - if (n <= 0) { - /* read() failed or returned 0 bytes */ - Py_FatalError("Failed to read bytes from /dev/urandom"); - break; - } - buffer += n; - size -= n; - } - close(fd); -} - -/* Read 'size' random bytes from py_getrandom(). Fall back on reading from - /dev/urandom if getrandom() is not available. - - Return 0 on success. Raise an exception and return -1 on error. */ + Return 0 on success. Raise an exception (if raise is non-zero) and return -1 + on error. */ static int -dev_urandom_python(char *buffer, Py_ssize_t size) +dev_urandom(char *buffer, Py_ssize_t size, int blocking, int raise) { int fd; Py_ssize_t n; - struct _Py_stat_struct st; #ifdef PY_GETRANDOM int res; #endif - if (size <= 0) - return 0; + assert(size > 0); #ifdef PY_GETRANDOM - res = py_getrandom(buffer, size, 1); + res = py_getrandom(buffer, size, blocking, raise); if (res < 0) { return -1; } @@ -306,64 +253,90 @@ dev_urandom_python(char *buffer, Py_ssize_t size) fall back on reading /dev/urandom */ #endif - if (urandom_cache.fd >= 0) { - /* Does the fd point to the same thing as before? (issue #21207) */ - if (_Py_fstat_noraise(urandom_cache.fd, &st) - || st.st_dev != urandom_cache.st_dev - || st.st_ino != urandom_cache.st_ino) { - /* Something changed: forget the cached fd (but don't close it, - since it probably points to something important for some - third-party code). */ - urandom_cache.fd = -1; - } - } - if (urandom_cache.fd >= 0) - fd = urandom_cache.fd; - else { - fd = _Py_open("/dev/urandom", O_RDONLY); - if (fd < 0) { - if (errno == ENOENT || errno == ENXIO || - errno == ENODEV || errno == EACCES) - PyErr_SetString(PyExc_NotImplementedError, - "/dev/urandom (or equivalent) not found"); - /* otherwise, keep the OSError exception raised by _Py_open() */ - return -1; - } + + if (raise) { + struct _Py_stat_struct st; + if (urandom_cache.fd >= 0) { - /* urandom_fd was initialized by another thread while we were - not holding the GIL, keep it. */ - close(fd); - fd = urandom_cache.fd; + /* Does the fd point to the same thing as before? (issue #21207) */ + if (_Py_fstat_noraise(urandom_cache.fd, &st) + || st.st_dev != urandom_cache.st_dev + || st.st_ino != urandom_cache.st_ino) { + /* Something changed: forget the cached fd (but don't close it, + since it probably points to something important for some + third-party code). */ + urandom_cache.fd = -1; + } } + if (urandom_cache.fd >= 0) + fd = urandom_cache.fd; else { - if (_Py_fstat(fd, &st)) { - close(fd); + fd = _Py_open("/dev/urandom", O_RDONLY); + if (fd < 0) { + if (errno == ENOENT || errno == ENXIO || + errno == ENODEV || errno == EACCES) + PyErr_SetString(PyExc_NotImplementedError, + "/dev/urandom (or equivalent) not found"); + /* otherwise, keep the OSError exception raised by _Py_open() */ return -1; } + if (urandom_cache.fd >= 0) { + /* urandom_fd was initialized by another thread while we were + not holding the GIL, keep it. */ + close(fd); + fd = urandom_cache.fd; + } else { - urandom_cache.fd = fd; - urandom_cache.st_dev = st.st_dev; - urandom_cache.st_ino = st.st_ino; + if (_Py_fstat(fd, &st)) { + close(fd); + return -1; + } + else { + urandom_cache.fd = fd; + urandom_cache.st_dev = st.st_dev; + urandom_cache.st_ino = st.st_ino; + } } } - } - do { - n = _Py_read(fd, buffer, (size_t)size); - if (n == -1) { - return -1; - } - if (n == 0) { - PyErr_Format(PyExc_RuntimeError, - "Failed to read %zi bytes from /dev/urandom", - size); + do { + n = _Py_read(fd, buffer, (size_t)size); + if (n == -1) + return -1; + if (n == 0) { + PyErr_Format(PyExc_RuntimeError, + "Failed to read %zi bytes from /dev/urandom", + size); + return -1; + } + + buffer += n; + size -= n; + } while (0 < size); + } + else { + fd = _Py_open_noraise("/dev/urandom", O_RDONLY); + if (fd < 0) { return -1; } - buffer += n; - size -= n; - } while (0 < size); + while (0 < size) + { + do { + n = read(fd, buffer, (size_t)size); + } while (n < 0 && errno == EINTR); + + if (n <= 0) { + /* stop on error or if read(size) returned 0 */ + close(fd); + return -1; + } + buffer += n; + size -= n; + } + close(fd); + } return 0; } @@ -399,38 +372,71 @@ lcg_urandom(unsigned int x0, unsigned char *buffer, size_t size) } } -/* Fill buffer with size pseudo-random bytes from the operating system random - number generator (RNG). It is suitable for most cryptographic purposes - except long living private keys for asymmetric encryption. - - Return 0 on success, raise an exception and return -1 on error. */ -int -_PyOS_URandom(void *buffer, Py_ssize_t size) +/* If raise is zero: + - Don't raise exceptions on error + - Don't call PyErr_CheckSignals() on EINTR (retry directly the interrupted + syscall) + - Don't release the GIL to call syscalls. */ +static int +pyurandom(void *buffer, Py_ssize_t size, int blocking, int raise) { if (size < 0) { - PyErr_Format(PyExc_ValueError, - "negative argument not allowed"); + if (raise) { + PyErr_Format(PyExc_ValueError, + "negative argument not allowed"); + } return -1; } - if (size == 0) + + if (size == 0) { return 0; + } #ifdef MS_WINDOWS - return win32_urandom((unsigned char *)buffer, size, 1); + return win32_urandom((unsigned char *)buffer, size, raise); #elif defined(PY_GETENTROPY) - return py_getentropy(buffer, size, 0); + return py_getentropy(buffer, size, raise); #else - return dev_urandom_python((char*)buffer, size); + return dev_urandom(buffer, size, blocking, raise); #endif } +/* Fill buffer with size pseudo-random bytes from the operating system random + number generator (RNG). It is suitable for most cryptographic purposes + except long living private keys for asymmetric encryption. + + On Linux 3.17 and newer, the getrandom() syscall is used in blocking mode: + block until the system urandom entropy pool is initialized (128 bits are + collected by the kernel). + + Return 0 on success. Raise an exception and return -1 on error. */ +int +_PyOS_URandom(void *buffer, Py_ssize_t size) +{ + return pyurandom(buffer, size, 1, 1); +} + +/* Fill buffer with size pseudo-random bytes from the operating system random + number generator (RNG). It is not suitable for cryptographic purpose. + + On Linux 3.17 and newer (when getrandom() syscall is used), if the system + urandom is not initialized yet, the function returns "weak" entropy read + from /dev/urandom. + + Return 0 on success. Raise an exception and return -1 on error. */ +int +_PyOS_URandomNonblock(void *buffer, Py_ssize_t size) +{ + return pyurandom(buffer, size, 0, 1); +} + void _PyRandom_Init(void) { char *env; unsigned char *secret = (unsigned char *)&_Py_HashSecret.uc; Py_ssize_t secret_size = sizeof(_Py_HashSecret_t); - assert(secret_size == sizeof(_Py_HashSecret.uc)); + Py_BUILD_ASSERT(sizeof(_Py_HashSecret_t) == sizeof(_Py_HashSecret.uc)); if (_Py_HashSecret_Initialized) return; @@ -462,13 +468,17 @@ _PyRandom_Init(void) } } else { -#ifdef MS_WINDOWS - (void)win32_urandom(secret, secret_size, 0); -#elif defined(PY_GETENTROPY) - (void)py_getentropy(secret, secret_size, 1); -#else - dev_urandom_noraise(secret, secret_size); -#endif + int res; + + /* _PyRandom_Init() is called very early in the Python initialization + and so exceptions cannot be used (use raise=0). + + _PyRandom_Init() must not block Python initialization: call + pyurandom() is non-blocking mode (blocking=0): see the PEP 524. */ + res = pyurandom(secret, secret_size, 0, 0); + if (res < 0) { + Py_FatalError("failed to get random numbers to initialize Python"); + } } } diff --git a/Python/structmember.c b/Python/structmember.c index af0296d802..86d4c66ca7 100644 --- a/Python/structmember.c +++ b/Python/structmember.c @@ -74,14 +74,12 @@ PyMember_GetOne(const char *addr, PyMemberDef *l) PyErr_SetString(PyExc_AttributeError, l->name); Py_XINCREF(v); break; -#ifdef HAVE_LONG_LONG case T_LONGLONG: - v = PyLong_FromLongLong(*(PY_LONG_LONG *)addr); + v = PyLong_FromLongLong(*(long long *)addr); break; case T_ULONGLONG: - v = PyLong_FromUnsignedLongLong(*(unsigned PY_LONG_LONG *)addr); + v = PyLong_FromUnsignedLongLong(*(unsigned long long *)addr); break; -#endif /* HAVE_LONG_LONG */ case T_NONE: v = Py_None; Py_INCREF(v); @@ -266,27 +264,25 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) case T_STRING_INPLACE: PyErr_SetString(PyExc_TypeError, "readonly attribute"); return -1; -#ifdef HAVE_LONG_LONG case T_LONGLONG:{ - PY_LONG_LONG value; - *(PY_LONG_LONG*)addr = value = PyLong_AsLongLong(v); + long long value; + *(long long*)addr = value = PyLong_AsLongLong(v); if ((value == -1) && PyErr_Occurred()) return -1; break; } case T_ULONGLONG:{ - unsigned PY_LONG_LONG value; + unsigned long long value; /* ??? PyLong_AsLongLong accepts an int, but PyLong_AsUnsignedLongLong doesn't ??? */ if (PyLong_Check(v)) - *(unsigned PY_LONG_LONG*)addr = value = PyLong_AsUnsignedLongLong(v); + *(unsigned long long*)addr = value = PyLong_AsUnsignedLongLong(v); else - *(unsigned PY_LONG_LONG*)addr = value = PyLong_AsLong(v); - if ((value == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred()) + *(unsigned long long*)addr = value = PyLong_AsLong(v); + if ((value == (unsigned long long)-1) && PyErr_Occurred()) return -1; break; } -#endif /* HAVE_LONG_LONG */ default: PyErr_Format(PyExc_SystemError, "bad memberdescr type for %s", l->name); diff --git a/Python/symtable.c b/Python/symtable.c index 1591a20f50..bf30eccdab 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -6,16 +6,22 @@ /* error strings used for warnings */ #define GLOBAL_AFTER_ASSIGN \ -"name '%.400s' is assigned to before global declaration" +"name '%U' is assigned to before global declaration" #define NONLOCAL_AFTER_ASSIGN \ -"name '%.400s' is assigned to before nonlocal declaration" +"name '%U' is assigned to before nonlocal declaration" #define GLOBAL_AFTER_USE \ -"name '%.400s' is used prior to global declaration" +"name '%U' is used prior to global declaration" #define NONLOCAL_AFTER_USE \ -"name '%.400s' is used prior to nonlocal declaration" +"name '%U' is used prior to nonlocal declaration" + +#define GLOBAL_ANNOT \ +"annotated name '%U' can't be global" + +#define NONLOCAL_ANNOT \ +"annotated name '%U' can't be nonlocal" #define IMPORT_STAR_WARNING "import * only allowed at module level" @@ -63,6 +69,7 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_nested = 1; ste->ste_child_free = 0; ste->ste_generator = 0; + ste->ste_coroutine = 0; ste->ste_returns_value = 0; ste->ste_needs_class_closure = 0; @@ -160,7 +167,6 @@ PyTypeObject PySTEntry_Type = { }; static int symtable_analyze(struct symtable *st); -static int symtable_warn(struct symtable *st, char *msg, int lineno); static int symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block, void *ast, int lineno, int col_offset); @@ -378,7 +384,7 @@ error_at_directive(PySTEntryObject *ste, PyObject *name) PyLong_AsLong(PyTuple_GET_ITEM(data, 2))); return 0; - } + } } PyErr_SetString(PyExc_RuntimeError, "BUG: internal directive bookkeeping broken"); @@ -652,7 +658,7 @@ update_symbols(PyObject *symbols, PyObject *scopes, continue; } /* Handle global symbol */ - if (!PySet_Contains(bound, name)) { + if (bound && !PySet_Contains(bound, name)) { Py_DECREF(name); continue; /* it's a global */ } @@ -906,27 +912,6 @@ symtable_analyze(struct symtable *st) return r; } - -static int -symtable_warn(struct symtable *st, char *msg, int lineno) -{ - PyObject *message = PyUnicode_FromString(msg); - if (message == NULL) - return 0; - if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, message, st->st_filename, - lineno, NULL, NULL) < 0) { - Py_DECREF(message); - if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) { - PyErr_SetString(PyExc_SyntaxError, msg); - PyErr_SyntaxLocationObject(st->st_filename, st->st_cur->ste_lineno, - st->st_cur->ste_col_offset); - } - return 0; - } - Py_DECREF(message); - return 1; -} - /* symtable_enter_block() gets a reference via ste_new. This reference is released when the block is exited, via the DECREF in symtable_exit_block(). @@ -1201,6 +1186,43 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) VISIT_SEQ(st, expr, s->v.Assign.targets); VISIT(st, expr, s->v.Assign.value); break; + case AnnAssign_kind: + if (s->v.AnnAssign.target->kind == Name_kind) { + expr_ty e_name = s->v.AnnAssign.target; + long cur = symtable_lookup(st, e_name->v.Name.id); + if (cur < 0) { + VISIT_QUIT(st, 0); + } + if ((cur & (DEF_GLOBAL | DEF_NONLOCAL)) + && s->v.AnnAssign.simple) { + PyErr_Format(PyExc_SyntaxError, + cur & DEF_GLOBAL ? GLOBAL_ANNOT : NONLOCAL_ANNOT, + e_name->v.Name.id); + PyErr_SyntaxLocationObject(st->st_filename, + s->lineno, + s->col_offset); + VISIT_QUIT(st, 0); + } + if (s->v.AnnAssign.simple && + !symtable_add_def(st, e_name->v.Name.id, + DEF_ANNOT | DEF_LOCAL)) { + VISIT_QUIT(st, 0); + } + else { + if (s->v.AnnAssign.value + && !symtable_add_def(st, e_name->v.Name.id, DEF_LOCAL)) { + VISIT_QUIT(st, 0); + } + } + } + else { + VISIT(st, expr, s->v.AnnAssign.target); + } + VISIT(st, expr, s->v.AnnAssign.annotation); + if (s->v.AnnAssign.value) { + VISIT(st, expr, s->v.AnnAssign.value); + } + break; case AugAssign_kind: VISIT(st, expr, s->v.AugAssign.target); VISIT(st, expr, s->v.AugAssign.value); @@ -1258,21 +1280,21 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) long cur = symtable_lookup(st, name); if (cur < 0) VISIT_QUIT(st, 0); - if (cur & (DEF_LOCAL | USE)) { - char buf[256]; - char *c_name = _PyUnicode_AsString(name); - if (!c_name) - return 0; - if (cur & DEF_LOCAL) - PyOS_snprintf(buf, sizeof(buf), - GLOBAL_AFTER_ASSIGN, - c_name); - else - PyOS_snprintf(buf, sizeof(buf), - GLOBAL_AFTER_USE, - c_name); - if (!symtable_warn(st, buf, s->lineno)) - VISIT_QUIT(st, 0); + if (cur & (DEF_LOCAL | USE | DEF_ANNOT)) { + char* msg; + if (cur & USE) { + msg = GLOBAL_AFTER_USE; + } else if (cur & DEF_ANNOT) { + msg = GLOBAL_ANNOT; + } else { /* DEF_LOCAL */ + msg = GLOBAL_AFTER_ASSIGN; + } + PyErr_Format(PyExc_SyntaxError, + msg, name); + PyErr_SyntaxLocationObject(st->st_filename, + s->lineno, + s->col_offset); + VISIT_QUIT(st, 0); } if (!symtable_add_def(st, name, DEF_GLOBAL)) VISIT_QUIT(st, 0); @@ -1289,21 +1311,20 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) long cur = symtable_lookup(st, name); if (cur < 0) VISIT_QUIT(st, 0); - if (cur & (DEF_LOCAL | USE)) { - char buf[256]; - char *c_name = _PyUnicode_AsString(name); - if (!c_name) - return 0; - if (cur & DEF_LOCAL) - PyOS_snprintf(buf, sizeof(buf), - NONLOCAL_AFTER_ASSIGN, - c_name); - else - PyOS_snprintf(buf, sizeof(buf), - NONLOCAL_AFTER_USE, - c_name); - if (!symtable_warn(st, buf, s->lineno)) - VISIT_QUIT(st, 0); + if (cur & (DEF_LOCAL | USE | DEF_ANNOT)) { + char* msg; + if (cur & USE) { + msg = NONLOCAL_AFTER_USE; + } else if (cur & DEF_ANNOT) { + msg = NONLOCAL_ANNOT; + } else { /* DEF_LOCAL */ + msg = NONLOCAL_AFTER_ASSIGN; + } + PyErr_Format(PyExc_SyntaxError, msg, name); + PyErr_SyntaxLocationObject(st->st_filename, + s->lineno, + s->col_offset); + VISIT_QUIT(st, 0); } if (!symtable_add_def(st, name, DEF_NONLOCAL)) VISIT_QUIT(st, 0); @@ -1341,6 +1362,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) FunctionBlock, (void *)s, s->lineno, s->col_offset)) VISIT_QUIT(st, 0); + st->st_cur->ste_coroutine = 1; VISIT(st, arguments, s->v.AsyncFunctionDef.args); VISIT_SEQ(st, stmt, s->v.AsyncFunctionDef.body); if (!symtable_exit_block(st, s)) @@ -1436,7 +1458,7 @@ symtable_visit_expr(struct symtable *st, expr_ty e) break; case Await_kind: VISIT(st, expr, e->v.Await.value); - st->st_cur->ste_generator = 1; + st->st_cur->ste_coroutine = 1; break; case Compare_kind: VISIT(st, expr, e->v.Compare.left); @@ -1447,6 +1469,15 @@ symtable_visit_expr(struct symtable *st, expr_ty e) VISIT_SEQ(st, expr, e->v.Call.args); VISIT_SEQ_WITH_NULL(st, keyword, e->v.Call.keywords); break; + case FormattedValue_kind: + VISIT(st, expr, e->v.FormattedValue.value); + if (e->v.FormattedValue.format_spec) + VISIT(st, expr, e->v.FormattedValue.format_spec); + break; + case JoinedStr_kind: + VISIT_SEQ(st, expr, e->v.JoinedStr.values); + break; + case Constant_kind: case Num_kind: case Str_kind: case Bytes_kind: @@ -1647,6 +1678,9 @@ symtable_visit_comprehension(struct symtable *st, comprehension_ty lc) VISIT(st, expr, lc->target); VISIT(st, expr, lc->iter); VISIT_SEQ(st, expr, lc->ifs); + if (lc->is_async) { + st->st_cur->ste_coroutine = 1; + } return 1; } @@ -1699,6 +1733,9 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e, return 0; } st->st_cur->ste_generator = is_generator; + if (outermost->is_async) { + st->st_cur->ste_coroutine = 1; + } /* Outermost iter is received as an argument */ if (!symtable_implicit_arg(st, 0)) { symtable_exit_block(st, (void *)e); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index f688349efb..5dd0d10834 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -20,6 +20,7 @@ Data members: #include "pythread.h" #include "osdefs.h" +#include <locale.h> #ifdef MS_WINDOWS #define WIN32_LEAN_AND_MEAN @@ -33,7 +34,6 @@ extern const char *PyWin_DLLVersionString; #endif #ifdef HAVE_LANGINFO_H -#include <locale.h> #include <langinfo.h> #endif @@ -311,6 +311,23 @@ operating system filenames." ); static PyObject * +sys_getfilesystemencodeerrors(PyObject *self) +{ + if (Py_FileSystemDefaultEncodeErrors) + return PyUnicode_FromString(Py_FileSystemDefaultEncodeErrors); + PyErr_SetString(PyExc_RuntimeError, + "filesystem encoding is not initialized"); + return NULL; +} + +PyDoc_STRVAR(getfilesystemencodeerrors_doc, + "getfilesystemencodeerrors() -> string\n\ +\n\ +Return the error mode used to convert Unicode filenames in\n\ +operating system filenames." +); + +static PyObject * sys_intern(PyObject *self, PyObject *args) { PyObject *s; @@ -346,8 +363,10 @@ static PyObject *whatstrings[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static int trace_init(void) { - static char *whatnames[7] = {"call", "exception", "line", "return", - "c_call", "c_exception", "c_return"}; + static const char * const whatnames[7] = { + "call", "exception", "line", "return", + "c_call", "c_exception", "c_return" + }; PyObject *name; int i; for (i = 0; i < 7; ++i) { @@ -366,34 +385,25 @@ static PyObject * call_trampoline(PyObject* callback, PyFrameObject *frame, int what, PyObject *arg) { - PyObject *args; - PyObject *whatstr; PyObject *result; + PyObject *stack[3]; - args = PyTuple_New(3); - if (args == NULL) - return NULL; - if (PyFrame_FastToLocalsWithError(frame) < 0) + if (PyFrame_FastToLocalsWithError(frame) < 0) { return NULL; + } - Py_INCREF(frame); - whatstr = whatstrings[what]; - Py_INCREF(whatstr); - if (arg == NULL) - arg = Py_None; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, (PyObject *)frame); - PyTuple_SET_ITEM(args, 1, whatstr); - PyTuple_SET_ITEM(args, 2, arg); + stack[0] = (PyObject *)frame; + stack[1] = whatstrings[what]; + stack[2] = (arg != NULL) ? arg : Py_None; /* call the Python-level function */ - result = PyEval_CallObject(callback, args); + result = _PyObject_FastCall(callback, stack, 3); + PyFrame_LocalsToFast(frame, 1); - if (result == NULL) + if (result == NULL) { PyTraceBack_Here(frame); + } - /* cleanup */ - Py_DECREF(args); return result; } @@ -434,10 +444,7 @@ trace_trampoline(PyObject *self, PyFrameObject *frame, return -1; } if (result != Py_None) { - PyObject *temp = frame->f_trace; - frame->f_trace = NULL; - Py_XDECREF(temp); - frame->f_trace = result; + Py_XSETREF(frame->f_trace, result); } else { Py_DECREF(result); @@ -602,33 +609,6 @@ PyDoc_STRVAR(getswitchinterval_doc, #endif /* WITH_THREAD */ -#ifdef WITH_TSC -static PyObject * -sys_settscdump(PyObject *self, PyObject *args) -{ - int bool; - PyThreadState *tstate = PyThreadState_Get(); - - if (!PyArg_ParseTuple(args, "i:settscdump", &bool)) - return NULL; - if (bool) - tstate->interp->tscdump = 1; - else - tstate->interp->tscdump = 0; - Py_INCREF(Py_None); - return Py_None; - -} - -PyDoc_STRVAR(settscdump_doc, -"settscdump(bool)\n\ -\n\ -If true, tell the Python interpreter to dump VM measurements to\n\ -stderr. If false, turn off dump. The measurements are based on the\n\ -processor's time-stamp counter." -); -#endif /* TSC */ - static PyObject * sys_setrecursionlimit(PyObject *self, PyObject *args) { @@ -710,6 +690,113 @@ Return the wrapper for coroutine objects set by sys.set_coroutine_wrapper." ); +static PyTypeObject AsyncGenHooksType; + +PyDoc_STRVAR(asyncgen_hooks_doc, +"asyncgen_hooks\n\ +\n\ +A struct sequence providing information about asynhronous\n\ +generators hooks. The attributes are read only."); + +static PyStructSequence_Field asyncgen_hooks_fields[] = { + {"firstiter", "Hook to intercept first iteration"}, + {"finalizer", "Hook to intercept finalization"}, + {0} +}; + +static PyStructSequence_Desc asyncgen_hooks_desc = { + "asyncgen_hooks", /* name */ + asyncgen_hooks_doc, /* doc */ + asyncgen_hooks_fields , /* fields */ + 2 +}; + + +static PyObject * +sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw) +{ + static char *keywords[] = {"firstiter", "finalizer", NULL}; + PyObject *firstiter = NULL; + PyObject *finalizer = NULL; + + if (!PyArg_ParseTupleAndKeywords( + args, kw, "|OO", keywords, + &firstiter, &finalizer)) { + return NULL; + } + + if (finalizer && finalizer != Py_None) { + if (!PyCallable_Check(finalizer)) { + PyErr_Format(PyExc_TypeError, + "callable finalizer expected, got %.50s", + Py_TYPE(finalizer)->tp_name); + return NULL; + } + _PyEval_SetAsyncGenFinalizer(finalizer); + } + else if (finalizer == Py_None) { + _PyEval_SetAsyncGenFinalizer(NULL); + } + + if (firstiter && firstiter != Py_None) { + if (!PyCallable_Check(firstiter)) { + PyErr_Format(PyExc_TypeError, + "callable firstiter expected, got %.50s", + Py_TYPE(firstiter)->tp_name); + return NULL; + } + _PyEval_SetAsyncGenFirstiter(firstiter); + } + else if (firstiter == Py_None) { + _PyEval_SetAsyncGenFirstiter(NULL); + } + + Py_RETURN_NONE; +} + +PyDoc_STRVAR(set_asyncgen_hooks_doc, +"set_asyncgen_hooks(*, firstiter=None, finalizer=None)\n\ +\n\ +Set a finalizer for async generators objects." +); + +static PyObject * +sys_get_asyncgen_hooks(PyObject *self, PyObject *args) +{ + PyObject *res; + PyObject *firstiter = _PyEval_GetAsyncGenFirstiter(); + PyObject *finalizer = _PyEval_GetAsyncGenFinalizer(); + + res = PyStructSequence_New(&AsyncGenHooksType); + if (res == NULL) { + return NULL; + } + + if (firstiter == NULL) { + firstiter = Py_None; + } + + if (finalizer == NULL) { + finalizer = Py_None; + } + + Py_INCREF(firstiter); + PyStructSequence_SET_ITEM(res, 0, firstiter); + + Py_INCREF(finalizer); + PyStructSequence_SET_ITEM(res, 1, finalizer); + + return res; +} + +PyDoc_STRVAR(get_asyncgen_hooks_doc, +"get_asyncgen_hooks()\n\ +\n\ +Return a namedtuple of installed asynchronous generators hooks \ +(firstiter, finalizer)." +); + + static PyTypeObject Hash_InfoType; PyDoc_STRVAR(hash_info_doc, @@ -807,10 +894,11 @@ Return information about the running version of Windows as a named tuple.\n\ The members are named: major, minor, build, platform, service_pack,\n\ service_pack_major, service_pack_minor, suite_mask, and product_type. For\n\ backward compatibility, only the first 5 items are available by indexing.\n\ -All elements are numbers, except service_pack which is a string. Platform\n\ -may be 0 for win32s, 1 for Windows 9x/ME, 2 for Windows NT/2000/XP/Vista/7,\n\ -3 for Windows CE. Product_type may be 1 for a workstation, 2 for a domain\n\ -controller, 3 for a server." +All elements are numbers, except service_pack and platform_type which are\n\ +strings, and platform_version which is a 3-tuple. Platform is always 2.\n\ +Product_type may be 1 for a workstation, 2 for a domain controller, 3 for a\n\ +server. Platform_version is a 3-tuple containing a version number that is\n\ +intended for identifying the OS rather than feature detection." ); static PyTypeObject WindowsVersionType = {0, 0, 0, 0, 0, 0}; @@ -825,7 +913,7 @@ static PyStructSequence_Field windows_version_fields[] = { {"service_pack_minor", "Service Pack minor version number"}, {"suite_mask", "Bit mask identifying available product suites"}, {"product_type", "System product type"}, - {"_platform_version", "Diagnostic version number"}, + {"platform_version", "Diagnostic version number"}, {0} }; @@ -913,6 +1001,24 @@ sys_getwindowsversion(PyObject *self) #pragma warning(pop) +PyDoc_STRVAR(enablelegacywindowsfsencoding_doc, +"_enablelegacywindowsfsencoding()\n\ +\n\ +Changes the default filesystem encoding to mbcs:replace for consistency\n\ +with earlier versions of Python. See PEP 529 for more information.\n\ +\n\ +This is equivalent to defining the PYTHONLEGACYWINDOWSFSENCODING \n\ +environment variable before launching Python." +); + +static PyObject * +sys_enablelegacywindowsfsencoding(PyObject *self) +{ + Py_FileSystemDefaultEncoding = "mbcs"; + Py_FileSystemDefaultEncodeErrors = "replace"; + Py_RETURN_NONE; +} + #endif /* MS_WINDOWS */ #ifdef HAVE_DLOPEN @@ -1189,8 +1295,10 @@ static PyObject * sys_debugmallocstats(PyObject *self, PyObject *args) { #ifdef WITH_PYMALLOC - _PyObject_DebugMallocStats(stderr); - fputc('\n', stderr); + if (_PyMem_PymallocEnabled()) { + _PyObject_DebugMallocStats(stderr); + fputc('\n', stderr); + } #endif _PyObject_DebugTypeStats(stderr); @@ -1270,6 +1378,8 @@ static PyMethodDef sys_methods[] = { #endif {"getfilesystemencoding", (PyCFunction)sys_getfilesystemencoding, METH_NOARGS, getfilesystemencoding_doc}, + { "getfilesystemencodeerrors", (PyCFunction)sys_getfilesystemencodeerrors, + METH_NOARGS, getfilesystemencodeerrors_doc }, #ifdef Py_TRACE_REFS {"getobjects", _Py_GetObjects, METH_VARARGS}, #endif @@ -1285,6 +1395,8 @@ static PyMethodDef sys_methods[] = { #ifdef MS_WINDOWS {"getwindowsversion", (PyCFunction)sys_getwindowsversion, METH_NOARGS, getwindowsversion_doc}, + {"_enablelegacywindowsfsencoding", (PyCFunction)sys_enablelegacywindowsfsencoding, + METH_NOARGS, enablelegacywindowsfsencoding_doc }, #endif /* MS_WINDOWS */ {"intern", sys_intern, METH_VARARGS, intern_doc}, {"is_finalizing", sys_is_finalizing, METH_NOARGS, is_finalizing_doc}, @@ -1309,9 +1421,6 @@ static PyMethodDef sys_methods[] = { {"getprofile", sys_getprofile, METH_NOARGS, getprofile_doc}, {"setrecursionlimit", sys_setrecursionlimit, METH_VARARGS, setrecursionlimit_doc}, -#ifdef WITH_TSC - {"settscdump", sys_settscdump, METH_VARARGS, settscdump_doc}, -#endif {"settrace", sys_settrace, METH_O, settrace_doc}, {"gettrace", sys_gettrace, METH_NOARGS, gettrace_doc}, {"call_tracing", sys_call_tracing, METH_VARARGS, call_tracing_doc}, @@ -1321,6 +1430,10 @@ static PyMethodDef sys_methods[] = { set_coroutine_wrapper_doc}, {"get_coroutine_wrapper", sys_get_coroutine_wrapper, METH_NOARGS, get_coroutine_wrapper_doc}, + {"set_asyncgen_hooks", (PyCFunction)sys_set_asyncgen_hooks, + METH_VARARGS | METH_KEYWORDS, set_asyncgen_hooks_doc}, + {"get_asyncgen_hooks", sys_get_asyncgen_hooks, METH_NOARGS, + get_asyncgen_hooks_doc}, {NULL, NULL} /* sentinel */ }; @@ -1501,14 +1614,21 @@ version -- the version of this interpreter as a string\n\ version_info -- version information as a named tuple\n\ " ) -#ifdef MS_WINDOWS +#ifdef MS_COREDLL /* concatenating string here */ PyDoc_STR( "dllhandle -- [Windows only] integer handle of the Python DLL\n\ winver -- [Windows only] version number of the Python DLL\n\ " ) -#endif /* MS_WINDOWS */ +#endif /* MS_COREDLL */ +#ifdef MS_WINDOWS +/* concatenating string here */ +PyDoc_STR( +"_enablelegacywindowsfsencoding -- [Windows only] \n\ +" +) +#endif PyDoc_STR( "__stdin__ -- the original stdin; don't touch!\n\ __stdout__ -- the original stdout; don't touch!\n\ @@ -1680,15 +1800,11 @@ make_version_info(void) /* sys.implementation values */ #define NAME "cpython" const char *_PySys_ImplName = NAME; -#define QUOTE(arg) #arg -#define STRIFY(name) QUOTE(name) -#define MAJOR STRIFY(PY_MAJOR_VERSION) -#define MINOR STRIFY(PY_MINOR_VERSION) +#define MAJOR Py_STRINGIFY(PY_MAJOR_VERSION) +#define MINOR Py_STRINGIFY(PY_MINOR_VERSION) #define TAG NAME "-" MAJOR MINOR const char *_PySys_ImplCacheTag = TAG; #undef NAME -#undef QUOTE -#undef STRIFY #undef MAJOR #undef MINOR #undef TAG @@ -1733,6 +1849,16 @@ make_impl_info(PyObject *version_info) if (res < 0) goto error; +#ifdef MULTIARCH + value = PyUnicode_FromString(MULTIARCH); + if (value == NULL) + goto error; + res = PyDict_SetItemString(impl_info, "_multiarch", value); + Py_DECREF(value); + if (res < 0) + goto error; +#endif + /* dict ready */ ns = _PyNamespace_New(impl_info); @@ -1943,6 +2069,14 @@ _PySys_Init(void) SET_SYS_FROM_STRING("thread_info", PyThread_GetInfo()); #endif + /* initialize asyncgen_hooks */ + if (AsyncGenHooksType.tp_name == NULL) { + if (PyStructSequence_InitType2( + &AsyncGenHooksType, &asyncgen_hooks_desc) < 0) { + return NULL; + } + } + #undef SET_SYS_FROM_STRING #undef SET_SYS_FROM_STRING_BORROW if (PyErr_Occurred()) @@ -2039,7 +2173,7 @@ sys_update_path(int argc, wchar_t **argv) #endif #if defined(HAVE_REALPATH) wchar_t fullpath[MAXPATHLEN]; -#elif defined(MS_WINDOWS) && !defined(MS_WINCE) +#elif defined(MS_WINDOWS) wchar_t fullpath[MAX_PATH]; #endif @@ -2078,10 +2212,8 @@ sys_update_path(int argc, wchar_t **argv) #if SEP == '\\' /* Special case for MS filename syntax */ if (_HAVE_SCRIPT_ARGUMENT(argc, argv)) { wchar_t *q; -#if defined(MS_WINDOWS) && !defined(MS_WINCE) - /* This code here replaces the first element in argv with the full - path that it represents. Under CE, there are no relative paths so - the argument must be the full path anyway. */ +#if defined(MS_WINDOWS) + /* Replace the first element in argv with the full path. */ wchar_t *ptemp; if (GetFullPathNameW(argv0, Py_ARRAY_LENGTH(fullpath), @@ -2151,7 +2283,7 @@ PySys_SetArgv(int argc, wchar_t **argv) static int sys_pyfile_write_unicode(PyObject *unicode, PyObject *file) { - PyObject *writer = NULL, *args = NULL, *result = NULL; + PyObject *writer = NULL, *result = NULL; int err; if (file == NULL) @@ -2161,11 +2293,7 @@ sys_pyfile_write_unicode(PyObject *unicode, PyObject *file) if (writer == NULL) goto error; - args = PyTuple_Pack(1, unicode); - if (args == NULL) - goto error; - - result = PyEval_CallObject(writer, args); + result = _PyObject_CallArg1(writer, unicode); if (result == NULL) { goto error; } else { @@ -2177,7 +2305,6 @@ error: err = -1; finally: Py_XDECREF(writer); - Py_XDECREF(args); Py_XDECREF(result); return err; } diff --git a/Python/thread_nt.h b/Python/thread_nt.h index b29b1b6e3f..74a6ee8029 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -77,7 +77,7 @@ EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds) /* wait at least until the target */ DWORD now, target = GetTickCount() + milliseconds; while (mutex->locked) { - if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, (PY_LONG_LONG)milliseconds*1000) < 0) { + if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, (long long)milliseconds*1000) < 0) { result = WAIT_FAILED; break; } @@ -161,11 +161,7 @@ typedef struct { /* thunker to call adapt between the function type used by the system's thread start function and the internally used one. */ -#if defined(MS_WINCE) -static DWORD WINAPI -#else static unsigned __stdcall -#endif bootstrap(void *call) { callobj *obj = (callobj*)call; @@ -193,32 +189,18 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) return -1; obj->func = func; obj->arg = arg; -#if defined(MS_WINCE) - hThread = CreateThread(NULL, - Py_SAFE_DOWNCAST(_pythread_stacksize, Py_ssize_t, SIZE_T), - bootstrap, obj, 0, &threadID); -#else hThread = (HANDLE)_beginthreadex(0, Py_SAFE_DOWNCAST(_pythread_stacksize, Py_ssize_t, unsigned int), bootstrap, obj, 0, &threadID); -#endif if (hThread == 0) { -#if defined(MS_WINCE) - /* Save error in variable, to prevent PyThread_get_thread_ident - from clobbering it. */ - unsigned e = GetLastError(); - dprintf(("%ld: PyThread_start_new_thread failed, win32 error code %u\n", - PyThread_get_thread_ident(), e)); -#else /* I've seen errno == EAGAIN here, which means "there are * too many threads". */ int e = errno; dprintf(("%ld: PyThread_start_new_thread failed, errno %d\n", PyThread_get_thread_ident(), e)); -#endif threadID = (unsigned)-1; HeapFree(GetProcessHeap(), 0, obj); } @@ -249,11 +231,7 @@ PyThread_exit_thread(void) dprintf(("%ld: PyThread_exit_thread called\n", PyThread_get_thread_ident())); if (!initialized) exit(0); -#if defined(MS_WINCE) - ExitThread(0); -#else _endthreadex(0); -#endif } /* diff --git a/Python/traceback.c b/Python/traceback.c index 9e7fe3b5c6..9f8c568b08 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -320,7 +320,7 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) if (fob == NULL) { PyErr_Clear(); - res = _PyObject_CallMethodId(binary, &PyId_close, ""); + res = _PyObject_CallMethodId(binary, &PyId_close, NULL); Py_DECREF(binary); if (res) Py_DECREF(res); @@ -340,7 +340,7 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) break; } } - res = _PyObject_CallMethodId(fob, &PyId_close, ""); + res = _PyObject_CallMethodId(fob, &PyId_close, NULL); if (res) Py_DECREF(res); else @@ -418,6 +418,11 @@ tb_printinternal(PyTracebackObject *tb, PyObject *f, long limit) { int err = 0; long depth = 0; + PyObject *last_file = NULL; + int last_line = -1; + PyObject *last_name = NULL; + long cnt = 0; + PyObject *line; PyTracebackObject *tb1 = tb; while (tb1 != NULL) { depth++; @@ -425,16 +430,41 @@ tb_printinternal(PyTracebackObject *tb, PyObject *f, long limit) } while (tb != NULL && err == 0) { if (depth <= limit) { - err = tb_displayline(f, - tb->tb_frame->f_code->co_filename, - tb->tb_lineno, - tb->tb_frame->f_code->co_name); + if (last_file != NULL && + tb->tb_frame->f_code->co_filename == last_file && + last_line != -1 && tb->tb_lineno == last_line && + last_name != NULL && + tb->tb_frame->f_code->co_name == last_name) { + cnt++; + } else { + if (cnt > 3) { + line = PyUnicode_FromFormat( + " [Previous line repeated %d more times]\n", cnt-3); + err = PyFile_WriteObject(line, f, Py_PRINT_RAW); + Py_DECREF(line); + } + last_file = tb->tb_frame->f_code->co_filename; + last_line = tb->tb_lineno; + last_name = tb->tb_frame->f_code->co_name; + cnt = 0; + } + if (cnt < 3) + err = tb_displayline(f, + tb->tb_frame->f_code->co_filename, + tb->tb_lineno, + tb->tb_frame->f_code->co_name); } depth--; tb = tb->tb_next; if (err == 0) err = PyErr_CheckSignals(); } + if (cnt > 3) { + line = PyUnicode_FromFormat( + " [Previous line repeated %d more times]\n", cnt-3); + err = PyFile_WriteObject(line, f, Py_PRINT_RAW); + Py_DECREF(line); + } return err; } @@ -485,40 +515,26 @@ PyTraceBack_Print(PyObject *v, PyObject *f) This function is signal safe. */ -static void -reverse_string(char *text, const size_t len) -{ - char tmp; - size_t i, j; - if (len == 0) - return; - for (i=0, j=len-1; i < j; i++, j--) { - tmp = text[i]; - text[i] = text[j]; - text[j] = tmp; - } -} - -/* Format an integer in range [0; 999999] to decimal, - and write it into the file fd. - - This function is signal safe. */ - -static void -dump_decimal(int fd, int value) +void +_Py_DumpDecimal(int fd, unsigned long value) { - char buffer[7]; - int len; - if (value < 0 || 999999 < value) - return; - len = 0; + /* maximum number of characters required for output of %lld or %p. + We need at most ceil(log10(256)*SIZEOF_LONG_LONG) digits, + plus 1 for the null byte. 53/22 is an upper bound for log10(256). */ + char buffer[1 + (sizeof(unsigned long)*53-1) / 22 + 1]; + char *ptr, *end; + + end = &buffer[Py_ARRAY_LENGTH(buffer) - 1]; + ptr = end; + *ptr = '\0'; do { - buffer[len] = '0' + (value % 10); + --ptr; + assert(ptr >= buffer); + *ptr = '0' + (value % 10); value /= 10; - len++; } while (value); - reverse_string(buffer, len); - _Py_write_noraise(fd, buffer, len); + + _Py_write_noraise(fd, ptr, end - ptr); } /* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits, @@ -526,27 +542,31 @@ dump_decimal(int fd, int value) This function is signal safe. */ -static void -dump_hexadecimal(int fd, unsigned long value, int width) +void +_Py_DumpHexadecimal(int fd, unsigned long value, Py_ssize_t width) { - int len; - char buffer[sizeof(unsigned long) * 2 + 1]; - len = 0; + char buffer[sizeof(unsigned long) * 2 + 1], *ptr, *end; + const Py_ssize_t size = Py_ARRAY_LENGTH(buffer) - 1; + + if (width > size) + width = size; + /* it's ok if width is negative */ + + end = &buffer[size]; + ptr = end; + *ptr = '\0'; do { - buffer[len] = Py_hexdigits[value & 15]; + --ptr; + assert(ptr >= buffer); + *ptr = Py_hexdigits[value & 15]; value >>= 4; - len++; - } while (len < width || value); - reverse_string(buffer, len); - _Py_write_noraise(fd, buffer, len); -} - -/* Write an unicode object into the file fd using ascii+backslashreplace. + } while ((end - ptr) < width || value); - This function is signal safe. */ + _Py_write_noraise(fd, ptr, end - ptr); +} -static void -dump_ascii(int fd, PyObject *text) +void +_Py_DumpASCII(int fd, PyObject *text) { PyASCIIObject *ascii = (PyASCIIObject *)text; Py_ssize_t i, size; @@ -556,32 +576,36 @@ dump_ascii(int fd, PyObject *text) wchar_t *wstr = NULL; Py_UCS4 ch; + if (!PyUnicode_Check(text)) + return; + size = ascii->length; kind = ascii->state.kind; - if (ascii->state.compact) { + if (kind == PyUnicode_WCHAR_KIND) { + wstr = ((PyASCIIObject *)text)->wstr; + if (wstr == NULL) + return; + size = ((PyCompactUnicodeObject *)text)->wstr_length; + } + else if (ascii->state.compact) { if (ascii->state.ascii) data = ((PyASCIIObject*)text) + 1; else data = ((PyCompactUnicodeObject*)text) + 1; } - else if (kind != PyUnicode_WCHAR_KIND) { + else { data = ((PyUnicodeObject *)text)->data.any; if (data == NULL) return; } - else { - wstr = ((PyASCIIObject *)text)->wstr; - if (wstr == NULL) - return; - size = ((PyCompactUnicodeObject *)text)->wstr_length; - } if (MAX_STRING_LENGTH < size) { size = MAX_STRING_LENGTH; truncated = 1; } - else + else { truncated = 0; + } for (i=0; i < size; i++) { if (kind != PyUnicode_WCHAR_KIND) @@ -595,19 +619,20 @@ dump_ascii(int fd, PyObject *text) } else if (ch <= 0xff) { PUTS(fd, "\\x"); - dump_hexadecimal(fd, ch, 2); + _Py_DumpHexadecimal(fd, ch, 2); } else if (ch <= 0xffff) { PUTS(fd, "\\u"); - dump_hexadecimal(fd, ch, 4); + _Py_DumpHexadecimal(fd, ch, 4); } else { PUTS(fd, "\\U"); - dump_hexadecimal(fd, ch, 8); + _Py_DumpHexadecimal(fd, ch, 8); } } - if (truncated) + if (truncated) { PUTS(fd, "..."); + } } /* Write a frame into the file fd: "File "xxx", line xxx in xxx". @@ -626,7 +651,7 @@ dump_frame(int fd, PyFrameObject *frame) && PyUnicode_Check(code->co_filename)) { PUTS(fd, "\""); - dump_ascii(fd, code->co_filename); + _Py_DumpASCII(fd, code->co_filename); PUTS(fd, "\""); } else { PUTS(fd, "???"); @@ -635,14 +660,21 @@ dump_frame(int fd, PyFrameObject *frame) /* PyFrame_GetLineNumber() was introduced in Python 2.7.0 and 3.2.0 */ lineno = PyCode_Addr2Line(code, frame->f_lasti); PUTS(fd, ", line "); - dump_decimal(fd, lineno); + if (lineno >= 0) { + _Py_DumpDecimal(fd, (unsigned long)lineno); + } + else { + PUTS(fd, "???"); + } PUTS(fd, " in "); if (code != NULL && code->co_name != NULL - && PyUnicode_Check(code->co_name)) - dump_ascii(fd, code->co_name); - else + && PyUnicode_Check(code->co_name)) { + _Py_DumpASCII(fd, code->co_name); + } + else { PUTS(fd, "???"); + } PUTS(fd, "\n"); } @@ -698,7 +730,9 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) PUTS(fd, "Current thread 0x"); else PUTS(fd, "Thread 0x"); - dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(unsigned long)*2); + _Py_DumpHexadecimal(fd, + (unsigned long)tstate->thread_id, + sizeof(unsigned long) * 2); PUTS(fd, " (most recent call first):\n"); } @@ -710,11 +744,56 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) handlers if signals were received. */ const char* _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, - PyThreadState *current_thread) + PyThreadState *current_tstate) { PyThreadState *tstate; unsigned int nthreads; +#ifdef WITH_THREAD + if (current_tstate == NULL) { + /* _Py_DumpTracebackThreads() is called from signal handlers by + faulthandler. + + SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL are synchronous signals + and are thus delivered to the thread that caused the fault. Get the + Python thread state of the current thread. + + PyThreadState_Get() doesn't give the state of the thread that caused + the fault if the thread released the GIL, and so this function + cannot be used. Read the thread local storage (TLS) instead: call + PyGILState_GetThisThreadState(). */ + current_tstate = PyGILState_GetThisThreadState(); + } + + if (interp == NULL) { + if (current_tstate == NULL) { + interp = _PyGILState_GetInterpreterStateUnsafe(); + if (interp == NULL) { + /* We need the interpreter state to get Python threads */ + return "unable to get the interpreter state"; + } + } + else { + interp = current_tstate->interp; + } + } +#else + if (current_tstate == NULL) { + /* Call _PyThreadState_UncheckedGet() instead of PyThreadState_Get() + to not fail with a fatal error if the thread state is NULL. */ + current_tstate = _PyThreadState_UncheckedGet(); + } + + if (interp == NULL) { + if (current_tstate == NULL) { + /* We need the interpreter state to get Python threads */ + return "unable to get the interpreter state"; + } + interp = current_tstate->interp; + } +#endif + assert(interp != NULL); + /* Get the current interpreter from the current thread */ tstate = PyInterpreterState_ThreadHead(interp); if (tstate == NULL) @@ -732,7 +811,7 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, PUTS(fd, "...\n"); break; } - write_thread_id(fd, tstate, tstate == current_thread); + write_thread_id(fd, tstate, tstate == current_tstate); dump_traceback(fd, tstate, 0); tstate = PyThreadState_Next(tstate); nthreads++; diff --git a/Python/wordcode_helpers.h b/Python/wordcode_helpers.h new file mode 100644 index 0000000000..b0e3a91776 --- /dev/null +++ b/Python/wordcode_helpers.h @@ -0,0 +1,41 @@ +/* This file contains code shared by the compiler and the peephole + optimizer. + */ + +#ifdef WORDS_BIGENDIAN +# define PACKOPARG(opcode, oparg) ((_Py_CODEUNIT)(((opcode) << 8) | (oparg))) +#else +# define PACKOPARG(opcode, oparg) ((_Py_CODEUNIT)(((oparg) << 8) | (opcode))) +#endif + +/* Minimum number of code units necessary to encode instruction with + EXTENDED_ARGs */ +static int +instrsize(unsigned int oparg) +{ + return oparg <= 0xff ? 1 : + oparg <= 0xffff ? 2 : + oparg <= 0xffffff ? 3 : + 4; +} + +/* Spits out op/oparg pair using ilen bytes. codestr should be pointed at the + desired location of the first EXTENDED_ARG */ +static void +write_op_arg(_Py_CODEUNIT *codestr, unsigned char opcode, + unsigned int oparg, int ilen) +{ + switch (ilen) { + case 4: + *codestr++ = PACKOPARG(EXTENDED_ARG, (oparg >> 24) & 0xff); + case 3: + *codestr++ = PACKOPARG(EXTENDED_ARG, (oparg >> 16) & 0xff); + case 2: + *codestr++ = PACKOPARG(EXTENDED_ARG, (oparg >> 8) & 0xff); + case 1: + *codestr++ = PACKOPARG(opcode, oparg & 0xff); + break; + default: + assert(0); + } +} |