Upgrade Python to 3.9.1
Windows 7 support is dropped. Apple M1 support is added.
Bug: 176132632
Change-Id: I326b3bfaec04cac398b2e97fd48f910211adca39
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index bcf9456..5367cb3 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -4,54 +4,574 @@
#include "Python.h"
#include "Python-ast.h"
+#include "structmember.h" // PyMemberDef
-static PyTypeObject AST_type;
-static PyTypeObject *mod_type;
-static PyObject* ast2obj_mod(void*);
-static PyTypeObject *Module_type;
-_Py_IDENTIFIER(body);
-_Py_IDENTIFIER(type_ignores);
-static char *Module_fields[]={
+typedef struct {
+ int initialized;
+ PyObject *AST_type;
+ PyObject *Add_singleton;
+ PyObject *Add_type;
+ PyObject *And_singleton;
+ PyObject *And_type;
+ PyObject *AnnAssign_type;
+ PyObject *Assert_type;
+ PyObject *Assign_type;
+ PyObject *AsyncFor_type;
+ PyObject *AsyncFunctionDef_type;
+ PyObject *AsyncWith_type;
+ PyObject *Attribute_type;
+ PyObject *AugAssign_type;
+ PyObject *Await_type;
+ PyObject *BinOp_type;
+ PyObject *BitAnd_singleton;
+ PyObject *BitAnd_type;
+ PyObject *BitOr_singleton;
+ PyObject *BitOr_type;
+ PyObject *BitXor_singleton;
+ PyObject *BitXor_type;
+ PyObject *BoolOp_type;
+ PyObject *Break_type;
+ PyObject *Call_type;
+ PyObject *ClassDef_type;
+ PyObject *Compare_type;
+ PyObject *Constant_type;
+ PyObject *Continue_type;
+ PyObject *Del_singleton;
+ PyObject *Del_type;
+ PyObject *Delete_type;
+ PyObject *DictComp_type;
+ PyObject *Dict_type;
+ PyObject *Div_singleton;
+ PyObject *Div_type;
+ PyObject *Eq_singleton;
+ PyObject *Eq_type;
+ PyObject *ExceptHandler_type;
+ PyObject *Expr_type;
+ PyObject *Expression_type;
+ PyObject *FloorDiv_singleton;
+ PyObject *FloorDiv_type;
+ PyObject *For_type;
+ PyObject *FormattedValue_type;
+ PyObject *FunctionDef_type;
+ PyObject *FunctionType_type;
+ PyObject *GeneratorExp_type;
+ PyObject *Global_type;
+ PyObject *GtE_singleton;
+ PyObject *GtE_type;
+ PyObject *Gt_singleton;
+ PyObject *Gt_type;
+ PyObject *IfExp_type;
+ PyObject *If_type;
+ PyObject *ImportFrom_type;
+ PyObject *Import_type;
+ PyObject *In_singleton;
+ PyObject *In_type;
+ PyObject *Interactive_type;
+ PyObject *Invert_singleton;
+ PyObject *Invert_type;
+ PyObject *IsNot_singleton;
+ PyObject *IsNot_type;
+ PyObject *Is_singleton;
+ PyObject *Is_type;
+ PyObject *JoinedStr_type;
+ PyObject *LShift_singleton;
+ PyObject *LShift_type;
+ PyObject *Lambda_type;
+ PyObject *ListComp_type;
+ PyObject *List_type;
+ PyObject *Load_singleton;
+ PyObject *Load_type;
+ PyObject *LtE_singleton;
+ PyObject *LtE_type;
+ PyObject *Lt_singleton;
+ PyObject *Lt_type;
+ PyObject *MatMult_singleton;
+ PyObject *MatMult_type;
+ PyObject *Mod_singleton;
+ PyObject *Mod_type;
+ PyObject *Module_type;
+ PyObject *Mult_singleton;
+ PyObject *Mult_type;
+ PyObject *Name_type;
+ PyObject *NamedExpr_type;
+ PyObject *Nonlocal_type;
+ PyObject *NotEq_singleton;
+ PyObject *NotEq_type;
+ PyObject *NotIn_singleton;
+ PyObject *NotIn_type;
+ PyObject *Not_singleton;
+ PyObject *Not_type;
+ PyObject *Or_singleton;
+ PyObject *Or_type;
+ PyObject *Pass_type;
+ PyObject *Pow_singleton;
+ PyObject *Pow_type;
+ PyObject *RShift_singleton;
+ PyObject *RShift_type;
+ PyObject *Raise_type;
+ PyObject *Return_type;
+ PyObject *SetComp_type;
+ PyObject *Set_type;
+ PyObject *Slice_type;
+ PyObject *Starred_type;
+ PyObject *Store_singleton;
+ PyObject *Store_type;
+ PyObject *Sub_singleton;
+ PyObject *Sub_type;
+ PyObject *Subscript_type;
+ PyObject *Try_type;
+ PyObject *Tuple_type;
+ PyObject *TypeIgnore_type;
+ PyObject *UAdd_singleton;
+ PyObject *UAdd_type;
+ PyObject *USub_singleton;
+ PyObject *USub_type;
+ PyObject *UnaryOp_type;
+ PyObject *While_type;
+ PyObject *With_type;
+ PyObject *YieldFrom_type;
+ PyObject *Yield_type;
+ PyObject *__dict__;
+ PyObject *__doc__;
+ PyObject *__module__;
+ PyObject *_attributes;
+ PyObject *_fields;
+ PyObject *alias_type;
+ PyObject *annotation;
+ PyObject *arg;
+ PyObject *arg_type;
+ PyObject *args;
+ PyObject *argtypes;
+ PyObject *arguments_type;
+ PyObject *asname;
+ PyObject *ast;
+ PyObject *attr;
+ PyObject *bases;
+ PyObject *body;
+ PyObject *boolop_type;
+ PyObject *cause;
+ PyObject *cmpop_type;
+ PyObject *col_offset;
+ PyObject *comparators;
+ PyObject *comprehension_type;
+ PyObject *context_expr;
+ PyObject *conversion;
+ PyObject *ctx;
+ PyObject *decorator_list;
+ PyObject *defaults;
+ PyObject *elt;
+ PyObject *elts;
+ PyObject *end_col_offset;
+ PyObject *end_lineno;
+ PyObject *exc;
+ PyObject *excepthandler_type;
+ PyObject *expr_context_type;
+ PyObject *expr_type;
+ PyObject *finalbody;
+ PyObject *format_spec;
+ PyObject *func;
+ PyObject *generators;
+ PyObject *handlers;
+ PyObject *id;
+ PyObject *ifs;
+ PyObject *is_async;
+ PyObject *items;
+ PyObject *iter;
+ PyObject *key;
+ PyObject *keys;
+ PyObject *keyword_type;
+ PyObject *keywords;
+ PyObject *kind;
+ PyObject *kw_defaults;
+ PyObject *kwarg;
+ PyObject *kwonlyargs;
+ PyObject *left;
+ PyObject *level;
+ PyObject *lineno;
+ PyObject *lower;
+ PyObject *mod_type;
+ PyObject *module;
+ PyObject *msg;
+ PyObject *name;
+ PyObject *names;
+ PyObject *op;
+ PyObject *operand;
+ PyObject *operator_type;
+ PyObject *ops;
+ PyObject *optional_vars;
+ PyObject *orelse;
+ PyObject *posonlyargs;
+ PyObject *returns;
+ PyObject *right;
+ PyObject *simple;
+ PyObject *slice;
+ PyObject *step;
+ PyObject *stmt_type;
+ PyObject *tag;
+ PyObject *target;
+ PyObject *targets;
+ PyObject *test;
+ PyObject *type;
+ PyObject *type_comment;
+ PyObject *type_ignore_type;
+ PyObject *type_ignores;
+ PyObject *unaryop_type;
+ PyObject *upper;
+ PyObject *value;
+ PyObject *values;
+ PyObject *vararg;
+ PyObject *withitem_type;
+} astmodulestate;
+
+
+// Forward declaration
+static int init_types(astmodulestate *state);
+
+// bpo-41194, bpo-41261, bpo-41631: The _ast module uses a global state.
+static astmodulestate global_ast_state = {0};
+
+static astmodulestate*
+get_global_ast_state(void)
+{
+ astmodulestate* state = &global_ast_state;
+ if (!init_types(state)) {
+ return NULL;
+ }
+ return state;
+}
+
+static astmodulestate*
+get_ast_state(PyObject* Py_UNUSED(module))
+{
+ astmodulestate* state = get_global_ast_state();
+ // get_ast_state() must only be called after _ast module is imported,
+ // and astmodule_exec() calls init_types()
+ assert(state != NULL);
+ return state;
+}
+
+void _PyAST_Fini(void)
+{
+ astmodulestate* state = &global_ast_state;
+ Py_CLEAR(state->AST_type);
+ Py_CLEAR(state->Add_singleton);
+ Py_CLEAR(state->Add_type);
+ Py_CLEAR(state->And_singleton);
+ Py_CLEAR(state->And_type);
+ Py_CLEAR(state->AnnAssign_type);
+ Py_CLEAR(state->Assert_type);
+ Py_CLEAR(state->Assign_type);
+ Py_CLEAR(state->AsyncFor_type);
+ Py_CLEAR(state->AsyncFunctionDef_type);
+ Py_CLEAR(state->AsyncWith_type);
+ Py_CLEAR(state->Attribute_type);
+ Py_CLEAR(state->AugAssign_type);
+ Py_CLEAR(state->Await_type);
+ Py_CLEAR(state->BinOp_type);
+ Py_CLEAR(state->BitAnd_singleton);
+ Py_CLEAR(state->BitAnd_type);
+ Py_CLEAR(state->BitOr_singleton);
+ Py_CLEAR(state->BitOr_type);
+ Py_CLEAR(state->BitXor_singleton);
+ Py_CLEAR(state->BitXor_type);
+ Py_CLEAR(state->BoolOp_type);
+ Py_CLEAR(state->Break_type);
+ Py_CLEAR(state->Call_type);
+ Py_CLEAR(state->ClassDef_type);
+ Py_CLEAR(state->Compare_type);
+ Py_CLEAR(state->Constant_type);
+ Py_CLEAR(state->Continue_type);
+ Py_CLEAR(state->Del_singleton);
+ Py_CLEAR(state->Del_type);
+ Py_CLEAR(state->Delete_type);
+ Py_CLEAR(state->DictComp_type);
+ Py_CLEAR(state->Dict_type);
+ Py_CLEAR(state->Div_singleton);
+ Py_CLEAR(state->Div_type);
+ Py_CLEAR(state->Eq_singleton);
+ Py_CLEAR(state->Eq_type);
+ Py_CLEAR(state->ExceptHandler_type);
+ Py_CLEAR(state->Expr_type);
+ Py_CLEAR(state->Expression_type);
+ Py_CLEAR(state->FloorDiv_singleton);
+ Py_CLEAR(state->FloorDiv_type);
+ Py_CLEAR(state->For_type);
+ Py_CLEAR(state->FormattedValue_type);
+ Py_CLEAR(state->FunctionDef_type);
+ Py_CLEAR(state->FunctionType_type);
+ Py_CLEAR(state->GeneratorExp_type);
+ Py_CLEAR(state->Global_type);
+ Py_CLEAR(state->GtE_singleton);
+ Py_CLEAR(state->GtE_type);
+ Py_CLEAR(state->Gt_singleton);
+ Py_CLEAR(state->Gt_type);
+ Py_CLEAR(state->IfExp_type);
+ Py_CLEAR(state->If_type);
+ Py_CLEAR(state->ImportFrom_type);
+ Py_CLEAR(state->Import_type);
+ Py_CLEAR(state->In_singleton);
+ Py_CLEAR(state->In_type);
+ Py_CLEAR(state->Interactive_type);
+ Py_CLEAR(state->Invert_singleton);
+ Py_CLEAR(state->Invert_type);
+ Py_CLEAR(state->IsNot_singleton);
+ Py_CLEAR(state->IsNot_type);
+ Py_CLEAR(state->Is_singleton);
+ Py_CLEAR(state->Is_type);
+ Py_CLEAR(state->JoinedStr_type);
+ Py_CLEAR(state->LShift_singleton);
+ Py_CLEAR(state->LShift_type);
+ Py_CLEAR(state->Lambda_type);
+ Py_CLEAR(state->ListComp_type);
+ Py_CLEAR(state->List_type);
+ Py_CLEAR(state->Load_singleton);
+ Py_CLEAR(state->Load_type);
+ Py_CLEAR(state->LtE_singleton);
+ Py_CLEAR(state->LtE_type);
+ Py_CLEAR(state->Lt_singleton);
+ Py_CLEAR(state->Lt_type);
+ Py_CLEAR(state->MatMult_singleton);
+ Py_CLEAR(state->MatMult_type);
+ Py_CLEAR(state->Mod_singleton);
+ Py_CLEAR(state->Mod_type);
+ Py_CLEAR(state->Module_type);
+ Py_CLEAR(state->Mult_singleton);
+ Py_CLEAR(state->Mult_type);
+ Py_CLEAR(state->Name_type);
+ Py_CLEAR(state->NamedExpr_type);
+ Py_CLEAR(state->Nonlocal_type);
+ Py_CLEAR(state->NotEq_singleton);
+ Py_CLEAR(state->NotEq_type);
+ Py_CLEAR(state->NotIn_singleton);
+ Py_CLEAR(state->NotIn_type);
+ Py_CLEAR(state->Not_singleton);
+ Py_CLEAR(state->Not_type);
+ Py_CLEAR(state->Or_singleton);
+ Py_CLEAR(state->Or_type);
+ Py_CLEAR(state->Pass_type);
+ Py_CLEAR(state->Pow_singleton);
+ Py_CLEAR(state->Pow_type);
+ Py_CLEAR(state->RShift_singleton);
+ Py_CLEAR(state->RShift_type);
+ Py_CLEAR(state->Raise_type);
+ Py_CLEAR(state->Return_type);
+ Py_CLEAR(state->SetComp_type);
+ Py_CLEAR(state->Set_type);
+ Py_CLEAR(state->Slice_type);
+ Py_CLEAR(state->Starred_type);
+ Py_CLEAR(state->Store_singleton);
+ Py_CLEAR(state->Store_type);
+ Py_CLEAR(state->Sub_singleton);
+ Py_CLEAR(state->Sub_type);
+ Py_CLEAR(state->Subscript_type);
+ Py_CLEAR(state->Try_type);
+ Py_CLEAR(state->Tuple_type);
+ Py_CLEAR(state->TypeIgnore_type);
+ Py_CLEAR(state->UAdd_singleton);
+ Py_CLEAR(state->UAdd_type);
+ Py_CLEAR(state->USub_singleton);
+ Py_CLEAR(state->USub_type);
+ Py_CLEAR(state->UnaryOp_type);
+ Py_CLEAR(state->While_type);
+ Py_CLEAR(state->With_type);
+ Py_CLEAR(state->YieldFrom_type);
+ Py_CLEAR(state->Yield_type);
+ Py_CLEAR(state->__dict__);
+ Py_CLEAR(state->__doc__);
+ Py_CLEAR(state->__module__);
+ Py_CLEAR(state->_attributes);
+ Py_CLEAR(state->_fields);
+ Py_CLEAR(state->alias_type);
+ Py_CLEAR(state->annotation);
+ Py_CLEAR(state->arg);
+ Py_CLEAR(state->arg_type);
+ Py_CLEAR(state->args);
+ Py_CLEAR(state->argtypes);
+ Py_CLEAR(state->arguments_type);
+ Py_CLEAR(state->asname);
+ Py_CLEAR(state->ast);
+ Py_CLEAR(state->attr);
+ Py_CLEAR(state->bases);
+ Py_CLEAR(state->body);
+ Py_CLEAR(state->boolop_type);
+ Py_CLEAR(state->cause);
+ Py_CLEAR(state->cmpop_type);
+ Py_CLEAR(state->col_offset);
+ Py_CLEAR(state->comparators);
+ Py_CLEAR(state->comprehension_type);
+ Py_CLEAR(state->context_expr);
+ Py_CLEAR(state->conversion);
+ Py_CLEAR(state->ctx);
+ Py_CLEAR(state->decorator_list);
+ Py_CLEAR(state->defaults);
+ Py_CLEAR(state->elt);
+ Py_CLEAR(state->elts);
+ Py_CLEAR(state->end_col_offset);
+ Py_CLEAR(state->end_lineno);
+ Py_CLEAR(state->exc);
+ Py_CLEAR(state->excepthandler_type);
+ Py_CLEAR(state->expr_context_type);
+ Py_CLEAR(state->expr_type);
+ Py_CLEAR(state->finalbody);
+ Py_CLEAR(state->format_spec);
+ Py_CLEAR(state->func);
+ Py_CLEAR(state->generators);
+ Py_CLEAR(state->handlers);
+ Py_CLEAR(state->id);
+ Py_CLEAR(state->ifs);
+ Py_CLEAR(state->is_async);
+ Py_CLEAR(state->items);
+ Py_CLEAR(state->iter);
+ Py_CLEAR(state->key);
+ Py_CLEAR(state->keys);
+ Py_CLEAR(state->keyword_type);
+ Py_CLEAR(state->keywords);
+ Py_CLEAR(state->kind);
+ Py_CLEAR(state->kw_defaults);
+ Py_CLEAR(state->kwarg);
+ Py_CLEAR(state->kwonlyargs);
+ Py_CLEAR(state->left);
+ Py_CLEAR(state->level);
+ Py_CLEAR(state->lineno);
+ Py_CLEAR(state->lower);
+ Py_CLEAR(state->mod_type);
+ Py_CLEAR(state->module);
+ Py_CLEAR(state->msg);
+ Py_CLEAR(state->name);
+ Py_CLEAR(state->names);
+ Py_CLEAR(state->op);
+ Py_CLEAR(state->operand);
+ Py_CLEAR(state->operator_type);
+ Py_CLEAR(state->ops);
+ Py_CLEAR(state->optional_vars);
+ Py_CLEAR(state->orelse);
+ Py_CLEAR(state->posonlyargs);
+ Py_CLEAR(state->returns);
+ Py_CLEAR(state->right);
+ Py_CLEAR(state->simple);
+ Py_CLEAR(state->slice);
+ Py_CLEAR(state->step);
+ Py_CLEAR(state->stmt_type);
+ Py_CLEAR(state->tag);
+ Py_CLEAR(state->target);
+ Py_CLEAR(state->targets);
+ Py_CLEAR(state->test);
+ Py_CLEAR(state->type);
+ Py_CLEAR(state->type_comment);
+ Py_CLEAR(state->type_ignore_type);
+ Py_CLEAR(state->type_ignores);
+ Py_CLEAR(state->unaryop_type);
+ Py_CLEAR(state->upper);
+ Py_CLEAR(state->value);
+ Py_CLEAR(state->values);
+ Py_CLEAR(state->vararg);
+ Py_CLEAR(state->withitem_type);
+
+ state->initialized = 0;
+}
+
+static int init_identifiers(astmodulestate *state)
+{
+ if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return 0;
+ if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return 0;
+ if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return 0;
+ if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return 0;
+ if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return 0;
+ if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return 0;
+ if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return 0;
+ if ((state->args = PyUnicode_InternFromString("args")) == NULL) return 0;
+ if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return 0;
+ if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return 0;
+ if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return 0;
+ if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return 0;
+ if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return 0;
+ if ((state->body = PyUnicode_InternFromString("body")) == NULL) return 0;
+ if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return 0;
+ if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return 0;
+ if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return 0;
+ if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return 0;
+ if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return 0;
+ if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return 0;
+ if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return 0;
+ if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return 0;
+ if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return 0;
+ if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return 0;
+ if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return 0;
+ if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return 0;
+ if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return 0;
+ if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return 0;
+ if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return 0;
+ if ((state->func = PyUnicode_InternFromString("func")) == NULL) return 0;
+ if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return 0;
+ if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return 0;
+ if ((state->id = PyUnicode_InternFromString("id")) == NULL) return 0;
+ if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return 0;
+ if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return 0;
+ if ((state->items = PyUnicode_InternFromString("items")) == NULL) return 0;
+ if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return 0;
+ if ((state->key = PyUnicode_InternFromString("key")) == NULL) return 0;
+ if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return 0;
+ if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return 0;
+ if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return 0;
+ if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return 0;
+ if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return 0;
+ if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return 0;
+ if ((state->left = PyUnicode_InternFromString("left")) == NULL) return 0;
+ if ((state->level = PyUnicode_InternFromString("level")) == NULL) return 0;
+ if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return 0;
+ if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return 0;
+ if ((state->module = PyUnicode_InternFromString("module")) == NULL) return 0;
+ if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return 0;
+ if ((state->name = PyUnicode_InternFromString("name")) == NULL) return 0;
+ if ((state->names = PyUnicode_InternFromString("names")) == NULL) return 0;
+ if ((state->op = PyUnicode_InternFromString("op")) == NULL) return 0;
+ if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return 0;
+ if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return 0;
+ if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return 0;
+ if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return 0;
+ if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return 0;
+ if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return 0;
+ if ((state->right = PyUnicode_InternFromString("right")) == NULL) return 0;
+ if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return 0;
+ if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return 0;
+ if ((state->step = PyUnicode_InternFromString("step")) == NULL) return 0;
+ if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return 0;
+ if ((state->target = PyUnicode_InternFromString("target")) == NULL) return 0;
+ if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return 0;
+ if ((state->test = PyUnicode_InternFromString("test")) == NULL) return 0;
+ if ((state->type = PyUnicode_InternFromString("type")) == NULL) return 0;
+ if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return 0;
+ if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return 0;
+ if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return 0;
+ if ((state->value = PyUnicode_InternFromString("value")) == NULL) return 0;
+ if ((state->values = PyUnicode_InternFromString("values")) == NULL) return 0;
+ if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return 0;
+ return 1;
+};
+
+static PyObject* ast2obj_mod(astmodulestate *state, void*);
+static const char * const Module_fields[]={
"body",
"type_ignores",
};
-static PyTypeObject *Interactive_type;
-static char *Interactive_fields[]={
+static const char * const Interactive_fields[]={
"body",
};
-static PyTypeObject *Expression_type;
-static char *Expression_fields[]={
+static const char * const Expression_fields[]={
"body",
};
-static PyTypeObject *FunctionType_type;
-_Py_IDENTIFIER(argtypes);
-_Py_IDENTIFIER(returns);
-static char *FunctionType_fields[]={
+static const char * const FunctionType_fields[]={
"argtypes",
"returns",
};
-static PyTypeObject *Suite_type;
-static char *Suite_fields[]={
- "body",
-};
-static PyTypeObject *stmt_type;
-_Py_IDENTIFIER(lineno);
-_Py_IDENTIFIER(col_offset);
-_Py_IDENTIFIER(end_lineno);
-_Py_IDENTIFIER(end_col_offset);
-static char *stmt_attributes[] = {
+static const char * const stmt_attributes[] = {
"lineno",
"col_offset",
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_stmt(void*);
-static PyTypeObject *FunctionDef_type;
-_Py_IDENTIFIER(name);
-_Py_IDENTIFIER(args);
-_Py_IDENTIFIER(decorator_list);
-_Py_IDENTIFIER(type_comment);
-static char *FunctionDef_fields[]={
+static PyObject* ast2obj_stmt(astmodulestate *state, void*);
+static const char * const FunctionDef_fields[]={
"name",
"args",
"body",
@@ -59,8 +579,7 @@
"returns",
"type_comment",
};
-static PyTypeObject *AsyncFunctionDef_type;
-static char *AsyncFunctionDef_fields[]={
+static const char * const AsyncFunctionDef_fields[]={
"name",
"args",
"body",
@@ -68,414 +587,245 @@
"returns",
"type_comment",
};
-static PyTypeObject *ClassDef_type;
-_Py_IDENTIFIER(bases);
-_Py_IDENTIFIER(keywords);
-static char *ClassDef_fields[]={
+static const char * const ClassDef_fields[]={
"name",
"bases",
"keywords",
"body",
"decorator_list",
};
-static PyTypeObject *Return_type;
-_Py_IDENTIFIER(value);
-static char *Return_fields[]={
+static const char * const Return_fields[]={
"value",
};
-static PyTypeObject *Delete_type;
-_Py_IDENTIFIER(targets);
-static char *Delete_fields[]={
+static const char * const Delete_fields[]={
"targets",
};
-static PyTypeObject *Assign_type;
-static char *Assign_fields[]={
+static const char * const Assign_fields[]={
"targets",
"value",
"type_comment",
};
-static PyTypeObject *AugAssign_type;
-_Py_IDENTIFIER(target);
-_Py_IDENTIFIER(op);
-static char *AugAssign_fields[]={
+static const char * const AugAssign_fields[]={
"target",
"op",
"value",
};
-static PyTypeObject *AnnAssign_type;
-_Py_IDENTIFIER(annotation);
-_Py_IDENTIFIER(simple);
-static char *AnnAssign_fields[]={
+static const char * const AnnAssign_fields[]={
"target",
"annotation",
"value",
"simple",
};
-static PyTypeObject *For_type;
-_Py_IDENTIFIER(iter);
-_Py_IDENTIFIER(orelse);
-static char *For_fields[]={
+static const char * const For_fields[]={
"target",
"iter",
"body",
"orelse",
"type_comment",
};
-static PyTypeObject *AsyncFor_type;
-static char *AsyncFor_fields[]={
+static const char * const AsyncFor_fields[]={
"target",
"iter",
"body",
"orelse",
"type_comment",
};
-static PyTypeObject *While_type;
-_Py_IDENTIFIER(test);
-static char *While_fields[]={
+static const char * const While_fields[]={
"test",
"body",
"orelse",
};
-static PyTypeObject *If_type;
-static char *If_fields[]={
+static const char * const If_fields[]={
"test",
"body",
"orelse",
};
-static PyTypeObject *With_type;
-_Py_IDENTIFIER(items);
-static char *With_fields[]={
+static const char * const With_fields[]={
"items",
"body",
"type_comment",
};
-static PyTypeObject *AsyncWith_type;
-static char *AsyncWith_fields[]={
+static const char * const AsyncWith_fields[]={
"items",
"body",
"type_comment",
};
-static PyTypeObject *Raise_type;
-_Py_IDENTIFIER(exc);
-_Py_IDENTIFIER(cause);
-static char *Raise_fields[]={
+static const char * const Raise_fields[]={
"exc",
"cause",
};
-static PyTypeObject *Try_type;
-_Py_IDENTIFIER(handlers);
-_Py_IDENTIFIER(finalbody);
-static char *Try_fields[]={
+static const char * const Try_fields[]={
"body",
"handlers",
"orelse",
"finalbody",
};
-static PyTypeObject *Assert_type;
-_Py_IDENTIFIER(msg);
-static char *Assert_fields[]={
+static const char * const Assert_fields[]={
"test",
"msg",
};
-static PyTypeObject *Import_type;
-_Py_IDENTIFIER(names);
-static char *Import_fields[]={
+static const char * const Import_fields[]={
"names",
};
-static PyTypeObject *ImportFrom_type;
-_Py_IDENTIFIER(module);
-_Py_IDENTIFIER(level);
-static char *ImportFrom_fields[]={
+static const char * const ImportFrom_fields[]={
"module",
"names",
"level",
};
-static PyTypeObject *Global_type;
-static char *Global_fields[]={
+static const char * const Global_fields[]={
"names",
};
-static PyTypeObject *Nonlocal_type;
-static char *Nonlocal_fields[]={
+static const char * const Nonlocal_fields[]={
"names",
};
-static PyTypeObject *Expr_type;
-static char *Expr_fields[]={
+static const char * const Expr_fields[]={
"value",
};
-static PyTypeObject *Pass_type;
-static PyTypeObject *Break_type;
-static PyTypeObject *Continue_type;
-static PyTypeObject *expr_type;
-static char *expr_attributes[] = {
+static const char * const expr_attributes[] = {
"lineno",
"col_offset",
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_expr(void*);
-static PyTypeObject *BoolOp_type;
-_Py_IDENTIFIER(values);
-static char *BoolOp_fields[]={
+static PyObject* ast2obj_expr(astmodulestate *state, void*);
+static const char * const BoolOp_fields[]={
"op",
"values",
};
-static PyTypeObject *NamedExpr_type;
-static char *NamedExpr_fields[]={
+static const char * const NamedExpr_fields[]={
"target",
"value",
};
-static PyTypeObject *BinOp_type;
-_Py_IDENTIFIER(left);
-_Py_IDENTIFIER(right);
-static char *BinOp_fields[]={
+static const char * const BinOp_fields[]={
"left",
"op",
"right",
};
-static PyTypeObject *UnaryOp_type;
-_Py_IDENTIFIER(operand);
-static char *UnaryOp_fields[]={
+static const char * const UnaryOp_fields[]={
"op",
"operand",
};
-static PyTypeObject *Lambda_type;
-static char *Lambda_fields[]={
+static const char * const Lambda_fields[]={
"args",
"body",
};
-static PyTypeObject *IfExp_type;
-static char *IfExp_fields[]={
+static const char * const IfExp_fields[]={
"test",
"body",
"orelse",
};
-static PyTypeObject *Dict_type;
-_Py_IDENTIFIER(keys);
-static char *Dict_fields[]={
+static const char * const Dict_fields[]={
"keys",
"values",
};
-static PyTypeObject *Set_type;
-_Py_IDENTIFIER(elts);
-static char *Set_fields[]={
+static const char * const Set_fields[]={
"elts",
};
-static PyTypeObject *ListComp_type;
-_Py_IDENTIFIER(elt);
-_Py_IDENTIFIER(generators);
-static char *ListComp_fields[]={
+static const char * const ListComp_fields[]={
"elt",
"generators",
};
-static PyTypeObject *SetComp_type;
-static char *SetComp_fields[]={
+static const char * const SetComp_fields[]={
"elt",
"generators",
};
-static PyTypeObject *DictComp_type;
-_Py_IDENTIFIER(key);
-static char *DictComp_fields[]={
+static const char * const DictComp_fields[]={
"key",
"value",
"generators",
};
-static PyTypeObject *GeneratorExp_type;
-static char *GeneratorExp_fields[]={
+static const char * const GeneratorExp_fields[]={
"elt",
"generators",
};
-static PyTypeObject *Await_type;
-static char *Await_fields[]={
+static const char * const Await_fields[]={
"value",
};
-static PyTypeObject *Yield_type;
-static char *Yield_fields[]={
+static const char * const Yield_fields[]={
"value",
};
-static PyTypeObject *YieldFrom_type;
-static char *YieldFrom_fields[]={
+static const char * const YieldFrom_fields[]={
"value",
};
-static PyTypeObject *Compare_type;
-_Py_IDENTIFIER(ops);
-_Py_IDENTIFIER(comparators);
-static char *Compare_fields[]={
+static const char * const Compare_fields[]={
"left",
"ops",
"comparators",
};
-static PyTypeObject *Call_type;
-_Py_IDENTIFIER(func);
-static char *Call_fields[]={
+static const char * const Call_fields[]={
"func",
"args",
"keywords",
};
-static PyTypeObject *FormattedValue_type;
-_Py_IDENTIFIER(conversion);
-_Py_IDENTIFIER(format_spec);
-static char *FormattedValue_fields[]={
+static const char * const FormattedValue_fields[]={
"value",
"conversion",
"format_spec",
};
-static PyTypeObject *JoinedStr_type;
-static char *JoinedStr_fields[]={
+static const char * const JoinedStr_fields[]={
"values",
};
-static PyTypeObject *Constant_type;
-_Py_IDENTIFIER(kind);
-static char *Constant_fields[]={
+static const char * const Constant_fields[]={
"value",
"kind",
};
-static PyTypeObject *Attribute_type;
-_Py_IDENTIFIER(attr);
-_Py_IDENTIFIER(ctx);
-static char *Attribute_fields[]={
+static const char * const Attribute_fields[]={
"value",
"attr",
"ctx",
};
-static PyTypeObject *Subscript_type;
-_Py_IDENTIFIER(slice);
-static char *Subscript_fields[]={
+static const char * const Subscript_fields[]={
"value",
"slice",
"ctx",
};
-static PyTypeObject *Starred_type;
-static char *Starred_fields[]={
+static const char * const Starred_fields[]={
"value",
"ctx",
};
-static PyTypeObject *Name_type;
-_Py_IDENTIFIER(id);
-static char *Name_fields[]={
+static const char * const Name_fields[]={
"id",
"ctx",
};
-static PyTypeObject *List_type;
-static char *List_fields[]={
+static const char * const List_fields[]={
"elts",
"ctx",
};
-static PyTypeObject *Tuple_type;
-static char *Tuple_fields[]={
+static const char * const Tuple_fields[]={
"elts",
"ctx",
};
-static PyTypeObject *expr_context_type;
-static PyObject *Load_singleton, *Store_singleton, *Del_singleton,
-*AugLoad_singleton, *AugStore_singleton, *Param_singleton;
-static PyObject* ast2obj_expr_context(expr_context_ty);
-static PyTypeObject *Load_type;
-static PyTypeObject *Store_type;
-static PyTypeObject *Del_type;
-static PyTypeObject *AugLoad_type;
-static PyTypeObject *AugStore_type;
-static PyTypeObject *Param_type;
-static PyTypeObject *slice_type;
-static PyObject* ast2obj_slice(void*);
-static PyTypeObject *Slice_type;
-_Py_IDENTIFIER(lower);
-_Py_IDENTIFIER(upper);
-_Py_IDENTIFIER(step);
-static char *Slice_fields[]={
+static const char * const Slice_fields[]={
"lower",
"upper",
"step",
};
-static PyTypeObject *ExtSlice_type;
-_Py_IDENTIFIER(dims);
-static char *ExtSlice_fields[]={
- "dims",
-};
-static PyTypeObject *Index_type;
-static char *Index_fields[]={
- "value",
-};
-static PyTypeObject *boolop_type;
-static PyObject *And_singleton, *Or_singleton;
-static PyObject* ast2obj_boolop(boolop_ty);
-static PyTypeObject *And_type;
-static PyTypeObject *Or_type;
-static PyTypeObject *operator_type;
-static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
-*MatMult_singleton, *Div_singleton, *Mod_singleton, *Pow_singleton,
-*LShift_singleton, *RShift_singleton, *BitOr_singleton, *BitXor_singleton,
-*BitAnd_singleton, *FloorDiv_singleton;
-static PyObject* ast2obj_operator(operator_ty);
-static PyTypeObject *Add_type;
-static PyTypeObject *Sub_type;
-static PyTypeObject *Mult_type;
-static PyTypeObject *MatMult_type;
-static PyTypeObject *Div_type;
-static PyTypeObject *Mod_type;
-static PyTypeObject *Pow_type;
-static PyTypeObject *LShift_type;
-static PyTypeObject *RShift_type;
-static PyTypeObject *BitOr_type;
-static PyTypeObject *BitXor_type;
-static PyTypeObject *BitAnd_type;
-static PyTypeObject *FloorDiv_type;
-static PyTypeObject *unaryop_type;
-static PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
-*USub_singleton;
-static PyObject* ast2obj_unaryop(unaryop_ty);
-static PyTypeObject *Invert_type;
-static PyTypeObject *Not_type;
-static PyTypeObject *UAdd_type;
-static PyTypeObject *USub_type;
-static PyTypeObject *cmpop_type;
-static PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
-*Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
-*NotIn_singleton;
-static PyObject* ast2obj_cmpop(cmpop_ty);
-static PyTypeObject *Eq_type;
-static PyTypeObject *NotEq_type;
-static PyTypeObject *Lt_type;
-static PyTypeObject *LtE_type;
-static PyTypeObject *Gt_type;
-static PyTypeObject *GtE_type;
-static PyTypeObject *Is_type;
-static PyTypeObject *IsNot_type;
-static PyTypeObject *In_type;
-static PyTypeObject *NotIn_type;
-static PyTypeObject *comprehension_type;
-static PyObject* ast2obj_comprehension(void*);
-_Py_IDENTIFIER(ifs);
-_Py_IDENTIFIER(is_async);
-static char *comprehension_fields[]={
+static PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty);
+static PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty);
+static PyObject* ast2obj_operator(astmodulestate *state, operator_ty);
+static PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty);
+static PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty);
+static PyObject* ast2obj_comprehension(astmodulestate *state, void*);
+static const char * const comprehension_fields[]={
"target",
"iter",
"ifs",
"is_async",
};
-static PyTypeObject *excepthandler_type;
-static char *excepthandler_attributes[] = {
+static const char * const excepthandler_attributes[] = {
"lineno",
"col_offset",
"end_lineno",
"end_col_offset",
};
-static PyObject* ast2obj_excepthandler(void*);
-static PyTypeObject *ExceptHandler_type;
-_Py_IDENTIFIER(type);
-static char *ExceptHandler_fields[]={
+static PyObject* ast2obj_excepthandler(astmodulestate *state, void*);
+static const char * const ExceptHandler_fields[]={
"type",
"name",
"body",
};
-static PyTypeObject *arguments_type;
-static PyObject* ast2obj_arguments(void*);
-_Py_IDENTIFIER(posonlyargs);
-_Py_IDENTIFIER(vararg);
-_Py_IDENTIFIER(kwonlyargs);
-_Py_IDENTIFIER(kw_defaults);
-_Py_IDENTIFIER(kwarg);
-_Py_IDENTIFIER(defaults);
-static char *arguments_fields[]={
+static PyObject* ast2obj_arguments(astmodulestate *state, void*);
+static const char * const arguments_fields[]={
"posonlyargs",
"args",
"vararg",
@@ -484,53 +834,46 @@
"kwarg",
"defaults",
};
-static PyTypeObject *arg_type;
-static PyObject* ast2obj_arg(void*);
-static char *arg_attributes[] = {
+static PyObject* ast2obj_arg(astmodulestate *state, void*);
+static const char * const arg_attributes[] = {
"lineno",
"col_offset",
"end_lineno",
"end_col_offset",
};
-_Py_IDENTIFIER(arg);
-static char *arg_fields[]={
+static const char * const arg_fields[]={
"arg",
"annotation",
"type_comment",
};
-static PyTypeObject *keyword_type;
-static PyObject* ast2obj_keyword(void*);
-static char *keyword_fields[]={
+static PyObject* ast2obj_keyword(astmodulestate *state, void*);
+static const char * const keyword_attributes[] = {
+ "lineno",
+ "col_offset",
+ "end_lineno",
+ "end_col_offset",
+};
+static const char * const keyword_fields[]={
"arg",
"value",
};
-static PyTypeObject *alias_type;
-static PyObject* ast2obj_alias(void*);
-_Py_IDENTIFIER(asname);
-static char *alias_fields[]={
+static PyObject* ast2obj_alias(astmodulestate *state, void*);
+static const char * const alias_fields[]={
"name",
"asname",
};
-static PyTypeObject *withitem_type;
-static PyObject* ast2obj_withitem(void*);
-_Py_IDENTIFIER(context_expr);
-_Py_IDENTIFIER(optional_vars);
-static char *withitem_fields[]={
+static PyObject* ast2obj_withitem(astmodulestate *state, void*);
+static const char * const withitem_fields[]={
"context_expr",
"optional_vars",
};
-static PyTypeObject *type_ignore_type;
-static PyObject* ast2obj_type_ignore(void*);
-static PyTypeObject *TypeIgnore_type;
-_Py_IDENTIFIER(tag);
-static char *TypeIgnore_fields[]={
+static PyObject* ast2obj_type_ignore(astmodulestate *state, void*);
+static const char * const TypeIgnore_fields[]={
"lineno",
"tag",
};
-_Py_IDENTIFIER(_fields);
-_Py_IDENTIFIER(_attributes);
typedef struct {
PyObject_HEAD
@@ -541,14 +884,19 @@
ast_dealloc(AST_object *self)
{
/* bpo-31095: UnTrack is needed before calling any callbacks */
+ PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self);
Py_CLEAR(self->dict);
- Py_TYPE(self)->tp_free(self);
+ freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
+ assert(free_func != NULL);
+ free_func(self);
+ Py_DECREF(tp);
}
static int
ast_traverse(AST_object *self, visitproc visit, void *arg)
{
+ Py_VISIT(Py_TYPE(self));
Py_VISIT(self->dict);
return 0;
}
@@ -563,10 +911,15 @@
static int
ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
{
+ astmodulestate *state = get_global_ast_state();
+ if (state == NULL) {
+ return -1;
+ }
+
Py_ssize_t i, numfields = 0;
int res = -1;
PyObject *key, *value, *fields;
- if (_PyObject_LookupAttrId((PyObject*)Py_TYPE(self), &PyId__fields, &fields) < 0) {
+ if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
goto cleanup;
}
if (fields) {
@@ -580,7 +933,7 @@
if (numfields < PyTuple_GET_SIZE(args)) {
PyErr_Format(PyExc_TypeError, "%.400s constructor takes at most "
"%zd positional argument%s",
- Py_TYPE(self)->tp_name,
+ _PyType_Name(Py_TYPE(self)),
numfields, numfields == 1 ? "" : "s");
res = -1;
goto cleanup;
@@ -634,9 +987,13 @@
static PyObject *
ast_type_reduce(PyObject *self, PyObject *unused)
{
- _Py_IDENTIFIER(__dict__);
+ astmodulestate *state = get_global_ast_state();
+ if (state == NULL) {
+ return NULL;
+ }
+
PyObject *dict;
- if (_PyObject_LookupAttrId(self, &PyId___dict__, &dict) < 0) {
+ if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
return NULL;
}
if (dict) {
@@ -645,6 +1002,11 @@
return Py_BuildValue("O()", Py_TYPE(self));
}
+static PyMemberDef ast_type_members[] = {
+ {"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
+ {NULL} /* Sentinel */
+};
+
static PyMethodDef ast_type_methods[] = {
{"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
{NULL}
@@ -655,96 +1017,79 @@
{NULL}
};
-static PyTypeObject AST_type = {
- PyVarObject_HEAD_INIT(&PyType_Type, 0)
- "_ast.AST",
- sizeof(AST_object),
- 0,
- (destructor)ast_dealloc, /* tp_dealloc */
- 0, /* tp_vectorcall_offset */
- 0, /* tp_getattr */
- 0, /* tp_setattr */
- 0, /* tp_as_async */
- 0, /* tp_repr */
- 0, /* tp_as_number */
- 0, /* tp_as_sequence */
- 0, /* tp_as_mapping */
- 0, /* tp_hash */
- 0, /* tp_call */
- 0, /* tp_str */
- PyObject_GenericGetAttr, /* tp_getattro */
- PyObject_GenericSetAttr, /* tp_setattro */
- 0, /* tp_as_buffer */
- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */
- 0, /* tp_doc */
- (traverseproc)ast_traverse, /* tp_traverse */
- (inquiry)ast_clear, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- ast_type_methods, /* tp_methods */
- 0, /* tp_members */
- ast_type_getsets, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- offsetof(AST_object, dict),/* tp_dictoffset */
- (initproc)ast_type_init, /* tp_init */
- PyType_GenericAlloc, /* tp_alloc */
- PyType_GenericNew, /* tp_new */
- PyObject_GC_Del, /* tp_free */
+static PyType_Slot AST_type_slots[] = {
+ {Py_tp_dealloc, ast_dealloc},
+ {Py_tp_getattro, PyObject_GenericGetAttr},
+ {Py_tp_setattro, PyObject_GenericSetAttr},
+ {Py_tp_traverse, ast_traverse},
+ {Py_tp_clear, ast_clear},
+ {Py_tp_members, ast_type_members},
+ {Py_tp_methods, ast_type_methods},
+ {Py_tp_getset, ast_type_getsets},
+ {Py_tp_init, ast_type_init},
+ {Py_tp_alloc, PyType_GenericAlloc},
+ {Py_tp_new, PyType_GenericNew},
+ {Py_tp_free, PyObject_GC_Del},
+ {0, 0},
};
+static PyType_Spec AST_type_spec = {
+ "ast.AST",
+ sizeof(AST_object),
+ 0,
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
+ AST_type_slots
+};
-static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
+static PyObject *
+make_type(astmodulestate *state, const char *type, PyObject* base,
+ const char* const* fields, int num_fields, const char *doc)
{
- _Py_IDENTIFIER(__module__);
- _Py_IDENTIFIER(_ast);
PyObject *fnames, *result;
int i;
fnames = PyTuple_New(num_fields);
if (!fnames) return NULL;
for (i = 0; i < num_fields; i++) {
- PyObject *field = PyUnicode_FromString(fields[i]);
+ PyObject *field = PyUnicode_InternFromString(fields[i]);
if (!field) {
Py_DECREF(fnames);
return NULL;
}
PyTuple_SET_ITEM(fnames, i, field);
}
- result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}",
+ result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOs}",
type, base,
- _PyUnicode_FromId(&PyId__fields), fnames,
- _PyUnicode_FromId(&PyId___module__),
- _PyUnicode_FromId(&PyId__ast));
+ state->_fields, fnames,
+ state->__module__,
+ state->ast,
+ state->__doc__, doc);
Py_DECREF(fnames);
- return (PyTypeObject*)result;
+ return result;
}
-static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
+static int
+add_attributes(astmodulestate *state, PyObject *type, const char * const *attrs, int num_fields)
{
int i, result;
PyObject *s, *l = PyTuple_New(num_fields);
if (!l)
return 0;
for (i = 0; i < num_fields; i++) {
- s = PyUnicode_FromString(attrs[i]);
+ s = PyUnicode_InternFromString(attrs[i]);
if (!s) {
Py_DECREF(l);
return 0;
}
PyTuple_SET_ITEM(l, i, s);
}
- result = _PyObject_SetAttrId((PyObject*)type, &PyId__attributes, l) >= 0;
+ result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
Py_DECREF(l);
return result;
}
/* Conversion AST -> Python */
-static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
+static PyObject* ast2obj_list(astmodulestate *state, asdl_seq *seq, PyObject* (*func)(astmodulestate *state, void*))
{
Py_ssize_t i, n = asdl_seq_LEN(seq);
PyObject *result = PyList_New(n);
@@ -752,7 +1097,7 @@
if (!result)
return NULL;
for (i = 0; i < n; i++) {
- value = func(asdl_seq_GET(seq, i));
+ value = func(state, asdl_seq_GET(seq, i));
if (!value) {
Py_DECREF(result);
return NULL;
@@ -762,27 +1107,25 @@
return result;
}
-static PyObject* ast2obj_object(void *o)
+static PyObject* ast2obj_object(astmodulestate *Py_UNUSED(state), void *o)
{
if (!o)
o = Py_None;
Py_INCREF((PyObject*)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
-static PyObject* ast2obj_int(long b)
+static PyObject* ast2obj_int(astmodulestate *Py_UNUSED(state), long b)
{
return PyLong_FromLong(b);
}
/* Conversion Python -> AST */
-static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_object(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
{
if (obj == Py_None)
obj = NULL;
@@ -797,7 +1140,7 @@
return 0;
}
-static int obj2ast_constant(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_constant(astmodulestate *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena)
{
if (PyArena_AddPyObject(arena, obj) < 0) {
*out = NULL;
@@ -808,25 +1151,25 @@
return 0;
}
-static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_identifier(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
{
if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
return 1;
}
- return obj2ast_object(obj, out, arena);
+ return obj2ast_object(state, obj, out, arena);
}
-static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
+static int obj2ast_string(astmodulestate *state, PyObject* obj, PyObject** out, PyArena* arena)
{
if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
return 1;
}
- return obj2ast_object(obj, out, arena);
+ return obj2ast_object(state, obj, out, arena);
}
-static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
+static int obj2ast_int(astmodulestate* Py_UNUSED(state), PyObject* obj, int* out, PyArena* arena)
{
int i;
if (!PyLong_Check(obj)) {
@@ -841,16 +1184,13 @@
return 0;
}
-static int add_ast_fields(void)
+static int add_ast_fields(astmodulestate *state)
{
- PyObject *empty_tuple, *d;
- if (PyType_Ready(&AST_type) < 0)
- return -1;
- d = AST_type.tp_dict;
+ PyObject *empty_tuple;
empty_tuple = PyTuple_New(0);
if (!empty_tuple ||
- _PyDict_SetItemId(d, &PyId__fields, empty_tuple) < 0 ||
- _PyDict_SetItemId(d, &PyId__attributes, empty_tuple) < 0) {
+ PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
+ PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
Py_XDECREF(empty_tuple);
return -1;
}
@@ -859,359 +1199,717 @@
}
-static int init_types(void)
+static int init_types(astmodulestate *state)
{
- static int initialized;
- if (initialized) return 1;
- if (add_ast_fields() < 0) return 0;
- mod_type = make_type("mod", &AST_type, NULL, 0);
- if (!mod_type) return 0;
- if (!add_attributes(mod_type, NULL, 0)) return 0;
- Module_type = make_type("Module", mod_type, Module_fields, 2);
- if (!Module_type) return 0;
- Interactive_type = make_type("Interactive", mod_type, Interactive_fields,
- 1);
- if (!Interactive_type) return 0;
- Expression_type = make_type("Expression", mod_type, Expression_fields, 1);
- if (!Expression_type) return 0;
- FunctionType_type = make_type("FunctionType", mod_type,
- FunctionType_fields, 2);
- if (!FunctionType_type) return 0;
- Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
- if (!Suite_type) return 0;
- stmt_type = make_type("stmt", &AST_type, NULL, 0);
- if (!stmt_type) return 0;
- if (!add_attributes(stmt_type, stmt_attributes, 4)) return 0;
- FunctionDef_type = make_type("FunctionDef", stmt_type, FunctionDef_fields,
- 6);
- if (!FunctionDef_type) return 0;
- AsyncFunctionDef_type = make_type("AsyncFunctionDef", stmt_type,
- AsyncFunctionDef_fields, 6);
- if (!AsyncFunctionDef_type) return 0;
- ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 5);
- if (!ClassDef_type) return 0;
- Return_type = make_type("Return", stmt_type, Return_fields, 1);
- if (!Return_type) return 0;
- Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
- if (!Delete_type) return 0;
- Assign_type = make_type("Assign", stmt_type, Assign_fields, 3);
- 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, 5);
- if (!For_type) return 0;
- AsyncFor_type = make_type("AsyncFor", stmt_type, AsyncFor_fields, 5);
- if (!AsyncFor_type) return 0;
- While_type = make_type("While", stmt_type, While_fields, 3);
- if (!While_type) return 0;
- If_type = make_type("If", stmt_type, If_fields, 3);
- if (!If_type) return 0;
- With_type = make_type("With", stmt_type, With_fields, 3);
- if (!With_type) return 0;
- AsyncWith_type = make_type("AsyncWith", stmt_type, AsyncWith_fields, 3);
- if (!AsyncWith_type) return 0;
- Raise_type = make_type("Raise", stmt_type, Raise_fields, 2);
- if (!Raise_type) return 0;
- Try_type = make_type("Try", stmt_type, Try_fields, 4);
- if (!Try_type) return 0;
- Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
- if (!Assert_type) return 0;
- Import_type = make_type("Import", stmt_type, Import_fields, 1);
- if (!Import_type) return 0;
- ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields, 3);
- if (!ImportFrom_type) return 0;
- Global_type = make_type("Global", stmt_type, Global_fields, 1);
- if (!Global_type) return 0;
- Nonlocal_type = make_type("Nonlocal", stmt_type, Nonlocal_fields, 1);
- if (!Nonlocal_type) return 0;
- Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
- if (!Expr_type) return 0;
- Pass_type = make_type("Pass", stmt_type, NULL, 0);
- if (!Pass_type) return 0;
- Break_type = make_type("Break", stmt_type, NULL, 0);
- if (!Break_type) return 0;
- Continue_type = make_type("Continue", stmt_type, NULL, 0);
- if (!Continue_type) return 0;
- expr_type = make_type("expr", &AST_type, NULL, 0);
- if (!expr_type) return 0;
- if (!add_attributes(expr_type, expr_attributes, 4)) return 0;
- BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
- if (!BoolOp_type) return 0;
- NamedExpr_type = make_type("NamedExpr", expr_type, NamedExpr_fields, 2);
- if (!NamedExpr_type) return 0;
- BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
- if (!BinOp_type) return 0;
- UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
- if (!UnaryOp_type) return 0;
- Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
- if (!Lambda_type) return 0;
- IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
- if (!IfExp_type) return 0;
- Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
- if (!Dict_type) return 0;
- Set_type = make_type("Set", expr_type, Set_fields, 1);
- if (!Set_type) return 0;
- ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
- if (!ListComp_type) return 0;
- SetComp_type = make_type("SetComp", expr_type, SetComp_fields, 2);
- if (!SetComp_type) return 0;
- DictComp_type = make_type("DictComp", expr_type, DictComp_fields, 3);
- if (!DictComp_type) return 0;
- GeneratorExp_type = make_type("GeneratorExp", expr_type,
- GeneratorExp_fields, 2);
- if (!GeneratorExp_type) return 0;
- Await_type = make_type("Await", expr_type, Await_fields, 1);
- if (!Await_type) return 0;
- Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
- if (!Yield_type) return 0;
- YieldFrom_type = make_type("YieldFrom", expr_type, YieldFrom_fields, 1);
- if (!YieldFrom_type) return 0;
- Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
- if (!Compare_type) return 0;
- Call_type = make_type("Call", expr_type, Call_fields, 3);
- if (!Call_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;
- Constant_type = make_type("Constant", expr_type, Constant_fields, 2);
- 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);
- if (!Subscript_type) return 0;
- Starred_type = make_type("Starred", expr_type, Starred_fields, 2);
- if (!Starred_type) return 0;
- Name_type = make_type("Name", expr_type, Name_fields, 2);
- if (!Name_type) return 0;
- List_type = make_type("List", expr_type, List_fields, 2);
- if (!List_type) return 0;
- Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
- if (!Tuple_type) return 0;
- expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
- if (!expr_context_type) return 0;
- if (!add_attributes(expr_context_type, NULL, 0)) return 0;
- Load_type = make_type("Load", expr_context_type, NULL, 0);
- if (!Load_type) return 0;
- Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
- if (!Load_singleton) return 0;
- Store_type = make_type("Store", expr_context_type, NULL, 0);
- if (!Store_type) return 0;
- Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
- if (!Store_singleton) return 0;
- Del_type = make_type("Del", expr_context_type, NULL, 0);
- if (!Del_type) return 0;
- Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
- if (!Del_singleton) return 0;
- AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
- if (!AugLoad_type) return 0;
- AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
- if (!AugLoad_singleton) return 0;
- AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
- if (!AugStore_type) return 0;
- AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
- if (!AugStore_singleton) return 0;
- Param_type = make_type("Param", expr_context_type, NULL, 0);
- if (!Param_type) return 0;
- Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
- if (!Param_singleton) return 0;
- slice_type = make_type("slice", &AST_type, NULL, 0);
- if (!slice_type) return 0;
- if (!add_attributes(slice_type, NULL, 0)) return 0;
- Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
- if (!Slice_type) return 0;
- ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
- if (!ExtSlice_type) return 0;
- Index_type = make_type("Index", slice_type, Index_fields, 1);
- if (!Index_type) return 0;
- boolop_type = make_type("boolop", &AST_type, NULL, 0);
- if (!boolop_type) return 0;
- if (!add_attributes(boolop_type, NULL, 0)) return 0;
- And_type = make_type("And", boolop_type, NULL, 0);
- if (!And_type) return 0;
- And_singleton = PyType_GenericNew(And_type, NULL, NULL);
- if (!And_singleton) return 0;
- Or_type = make_type("Or", boolop_type, NULL, 0);
- if (!Or_type) return 0;
- Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
- if (!Or_singleton) return 0;
- operator_type = make_type("operator", &AST_type, NULL, 0);
- if (!operator_type) return 0;
- if (!add_attributes(operator_type, NULL, 0)) return 0;
- Add_type = make_type("Add", operator_type, NULL, 0);
- if (!Add_type) return 0;
- Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
- if (!Add_singleton) return 0;
- Sub_type = make_type("Sub", operator_type, NULL, 0);
- if (!Sub_type) return 0;
- Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
- if (!Sub_singleton) return 0;
- Mult_type = make_type("Mult", operator_type, NULL, 0);
- if (!Mult_type) return 0;
- Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
- if (!Mult_singleton) return 0;
- MatMult_type = make_type("MatMult", operator_type, NULL, 0);
- if (!MatMult_type) return 0;
- MatMult_singleton = PyType_GenericNew(MatMult_type, NULL, NULL);
- if (!MatMult_singleton) return 0;
- Div_type = make_type("Div", operator_type, NULL, 0);
- if (!Div_type) return 0;
- Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
- if (!Div_singleton) return 0;
- Mod_type = make_type("Mod", operator_type, NULL, 0);
- if (!Mod_type) return 0;
- Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
- if (!Mod_singleton) return 0;
- Pow_type = make_type("Pow", operator_type, NULL, 0);
- if (!Pow_type) return 0;
- Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
- if (!Pow_singleton) return 0;
- LShift_type = make_type("LShift", operator_type, NULL, 0);
- if (!LShift_type) return 0;
- LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
- if (!LShift_singleton) return 0;
- RShift_type = make_type("RShift", operator_type, NULL, 0);
- if (!RShift_type) return 0;
- RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
- if (!RShift_singleton) return 0;
- BitOr_type = make_type("BitOr", operator_type, NULL, 0);
- if (!BitOr_type) return 0;
- BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
- if (!BitOr_singleton) return 0;
- BitXor_type = make_type("BitXor", operator_type, NULL, 0);
- if (!BitXor_type) return 0;
- BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
- if (!BitXor_singleton) return 0;
- BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
- if (!BitAnd_type) return 0;
- BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
- if (!BitAnd_singleton) return 0;
- FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
- if (!FloorDiv_type) return 0;
- FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
- if (!FloorDiv_singleton) return 0;
- unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
- if (!unaryop_type) return 0;
- if (!add_attributes(unaryop_type, NULL, 0)) return 0;
- Invert_type = make_type("Invert", unaryop_type, NULL, 0);
- if (!Invert_type) return 0;
- Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
- if (!Invert_singleton) return 0;
- Not_type = make_type("Not", unaryop_type, NULL, 0);
- if (!Not_type) return 0;
- Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
- if (!Not_singleton) return 0;
- UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
- if (!UAdd_type) return 0;
- UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
- if (!UAdd_singleton) return 0;
- USub_type = make_type("USub", unaryop_type, NULL, 0);
- if (!USub_type) return 0;
- USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
- if (!USub_singleton) return 0;
- cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
- if (!cmpop_type) return 0;
- if (!add_attributes(cmpop_type, NULL, 0)) return 0;
- Eq_type = make_type("Eq", cmpop_type, NULL, 0);
- if (!Eq_type) return 0;
- Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
- if (!Eq_singleton) return 0;
- NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
- if (!NotEq_type) return 0;
- NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
- if (!NotEq_singleton) return 0;
- Lt_type = make_type("Lt", cmpop_type, NULL, 0);
- if (!Lt_type) return 0;
- Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
- if (!Lt_singleton) return 0;
- LtE_type = make_type("LtE", cmpop_type, NULL, 0);
- if (!LtE_type) return 0;
- LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
- if (!LtE_singleton) return 0;
- Gt_type = make_type("Gt", cmpop_type, NULL, 0);
- if (!Gt_type) return 0;
- Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
- if (!Gt_singleton) return 0;
- GtE_type = make_type("GtE", cmpop_type, NULL, 0);
- if (!GtE_type) return 0;
- GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
- if (!GtE_singleton) return 0;
- Is_type = make_type("Is", cmpop_type, NULL, 0);
- if (!Is_type) return 0;
- Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
- if (!Is_singleton) return 0;
- IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
- if (!IsNot_type) return 0;
- IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
- if (!IsNot_singleton) return 0;
- In_type = make_type("In", cmpop_type, NULL, 0);
- if (!In_type) return 0;
- In_singleton = PyType_GenericNew(In_type, NULL, NULL);
- if (!In_singleton) return 0;
- NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
- if (!NotIn_type) return 0;
- NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
- if (!NotIn_singleton) return 0;
- comprehension_type = make_type("comprehension", &AST_type,
- 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);
- if (!excepthandler_type) return 0;
- if (!add_attributes(excepthandler_type, excepthandler_attributes, 4))
+ if (state->initialized) return 1;
+ if (init_identifiers(state) < 0) return 0;
+ state->AST_type = PyType_FromSpec(&AST_type_spec);
+ if (!state->AST_type) return 0;
+ if (add_ast_fields(state) < 0) return 0;
+ state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
+ "mod = Module(stmt* body, type_ignore* type_ignores)\n"
+ " | Interactive(stmt* body)\n"
+ " | Expression(expr body)\n"
+ " | FunctionType(expr* argtypes, expr returns)");
+ if (!state->mod_type) return 0;
+ if (!add_attributes(state, state->mod_type, NULL, 0)) return 0;
+ state->Module_type = make_type(state, "Module", state->mod_type,
+ Module_fields, 2,
+ "Module(stmt* body, type_ignore* type_ignores)");
+ if (!state->Module_type) return 0;
+ state->Interactive_type = make_type(state, "Interactive", state->mod_type,
+ Interactive_fields, 1,
+ "Interactive(stmt* body)");
+ if (!state->Interactive_type) return 0;
+ state->Expression_type = make_type(state, "Expression", state->mod_type,
+ Expression_fields, 1,
+ "Expression(expr body)");
+ if (!state->Expression_type) return 0;
+ state->FunctionType_type = make_type(state, "FunctionType",
+ state->mod_type, FunctionType_fields,
+ 2,
+ "FunctionType(expr* argtypes, expr returns)");
+ if (!state->FunctionType_type) return 0;
+ state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
+ "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
+ " | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)\n"
+ " | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)\n"
+ " | Return(expr? value)\n"
+ " | Delete(expr* targets)\n"
+ " | Assign(expr* targets, expr value, string? type_comment)\n"
+ " | AugAssign(expr target, operator op, expr value)\n"
+ " | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
+ " | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
+ " | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
+ " | While(expr test, stmt* body, stmt* orelse)\n"
+ " | If(expr test, stmt* body, stmt* orelse)\n"
+ " | With(withitem* items, stmt* body, string? type_comment)\n"
+ " | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
+ " | Raise(expr? exc, expr? cause)\n"
+ " | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
+ " | Assert(expr test, expr? msg)\n"
+ " | Import(alias* names)\n"
+ " | ImportFrom(identifier? module, alias* names, int? level)\n"
+ " | Global(identifier* names)\n"
+ " | Nonlocal(identifier* names)\n"
+ " | Expr(expr value)\n"
+ " | Pass\n"
+ " | Break\n"
+ " | Continue");
+ if (!state->stmt_type) return 0;
+ if (!add_attributes(state, state->stmt_type, stmt_attributes, 4)) return 0;
+ if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
return 0;
- ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
- ExceptHandler_fields, 3);
- if (!ExceptHandler_type) return 0;
- arguments_type = make_type("arguments", &AST_type, arguments_fields, 7);
- if (!arguments_type) return 0;
- if (!add_attributes(arguments_type, NULL, 0)) return 0;
- arg_type = make_type("arg", &AST_type, arg_fields, 3);
- if (!arg_type) return 0;
- if (!add_attributes(arg_type, arg_attributes, 4)) return 0;
- keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
- if (!keyword_type) return 0;
- if (!add_attributes(keyword_type, NULL, 0)) return 0;
- alias_type = make_type("alias", &AST_type, alias_fields, 2);
- if (!alias_type) return 0;
- if (!add_attributes(alias_type, NULL, 0)) return 0;
- withitem_type = make_type("withitem", &AST_type, withitem_fields, 2);
- if (!withitem_type) return 0;
- if (!add_attributes(withitem_type, NULL, 0)) return 0;
- type_ignore_type = make_type("type_ignore", &AST_type, NULL, 0);
- if (!type_ignore_type) return 0;
- if (!add_attributes(type_ignore_type, NULL, 0)) return 0;
- TypeIgnore_type = make_type("TypeIgnore", type_ignore_type,
- TypeIgnore_fields, 2);
- if (!TypeIgnore_type) return 0;
- initialized = 1;
+ if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
+ -1)
+ return 0;
+ state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
+ FunctionDef_fields, 6,
+ "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
+ if (!state->FunctionDef_type) return 0;
+ if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
+ -1)
+ return 0;
+ if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
+ == -1)
+ return 0;
+ state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
+ state->stmt_type,
+ AsyncFunctionDef_fields, 6,
+ "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment)");
+ if (!state->AsyncFunctionDef_type) return 0;
+ if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
+ == -1)
+ return 0;
+ if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
+ Py_None) == -1)
+ return 0;
+ state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
+ ClassDef_fields, 5,
+ "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list)");
+ if (!state->ClassDef_type) return 0;
+ state->Return_type = make_type(state, "Return", state->stmt_type,
+ Return_fields, 1,
+ "Return(expr? value)");
+ if (!state->Return_type) return 0;
+ if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
+ return 0;
+ state->Delete_type = make_type(state, "Delete", state->stmt_type,
+ Delete_fields, 1,
+ "Delete(expr* targets)");
+ if (!state->Delete_type) return 0;
+ state->Assign_type = make_type(state, "Assign", state->stmt_type,
+ Assign_fields, 3,
+ "Assign(expr* targets, expr value, string? type_comment)");
+ if (!state->Assign_type) return 0;
+ if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
+ -1)
+ return 0;
+ state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
+ AugAssign_fields, 3,
+ "AugAssign(expr target, operator op, expr value)");
+ if (!state->AugAssign_type) return 0;
+ state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
+ AnnAssign_fields, 4,
+ "AnnAssign(expr target, expr annotation, expr? value, int simple)");
+ if (!state->AnnAssign_type) return 0;
+ if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
+ return 0;
+ state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
+ "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
+ if (!state->For_type) return 0;
+ if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
+ return 0;
+ state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
+ AsyncFor_fields, 5,
+ "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
+ if (!state->AsyncFor_type) return 0;
+ if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
+ -1)
+ return 0;
+ state->While_type = make_type(state, "While", state->stmt_type,
+ While_fields, 3,
+ "While(expr test, stmt* body, stmt* orelse)");
+ if (!state->While_type) return 0;
+ state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
+ "If(expr test, stmt* body, stmt* orelse)");
+ if (!state->If_type) return 0;
+ state->With_type = make_type(state, "With", state->stmt_type, With_fields,
+ 3,
+ "With(withitem* items, stmt* body, string? type_comment)");
+ if (!state->With_type) return 0;
+ if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
+ return 0;
+ state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
+ AsyncWith_fields, 3,
+ "AsyncWith(withitem* items, stmt* body, string? type_comment)");
+ if (!state->AsyncWith_type) return 0;
+ if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
+ == -1)
+ return 0;
+ state->Raise_type = make_type(state, "Raise", state->stmt_type,
+ Raise_fields, 2,
+ "Raise(expr? exc, expr? cause)");
+ if (!state->Raise_type) return 0;
+ if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
+ return 0;
+ state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
+ "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
+ if (!state->Try_type) return 0;
+ state->Assert_type = make_type(state, "Assert", state->stmt_type,
+ Assert_fields, 2,
+ "Assert(expr test, expr? msg)");
+ if (!state->Assert_type) return 0;
+ if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
+ return 0;
+ state->Import_type = make_type(state, "Import", state->stmt_type,
+ Import_fields, 1,
+ "Import(alias* names)");
+ if (!state->Import_type) return 0;
+ state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
+ ImportFrom_fields, 3,
+ "ImportFrom(identifier? module, alias* names, int? level)");
+ if (!state->ImportFrom_type) return 0;
+ if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
+ return 0;
+ state->Global_type = make_type(state, "Global", state->stmt_type,
+ Global_fields, 1,
+ "Global(identifier* names)");
+ if (!state->Global_type) return 0;
+ state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
+ Nonlocal_fields, 1,
+ "Nonlocal(identifier* names)");
+ if (!state->Nonlocal_type) return 0;
+ state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
+ 1,
+ "Expr(expr value)");
+ if (!state->Expr_type) return 0;
+ state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
+ "Pass");
+ if (!state->Pass_type) return 0;
+ state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
+ "Break");
+ if (!state->Break_type) return 0;
+ state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
+ 0,
+ "Continue");
+ if (!state->Continue_type) return 0;
+ state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
+ "expr = BoolOp(boolop op, expr* values)\n"
+ " | NamedExpr(expr target, expr value)\n"
+ " | BinOp(expr left, operator op, expr right)\n"
+ " | UnaryOp(unaryop op, expr operand)\n"
+ " | Lambda(arguments args, expr body)\n"
+ " | IfExp(expr test, expr body, expr orelse)\n"
+ " | Dict(expr* keys, expr* values)\n"
+ " | Set(expr* elts)\n"
+ " | ListComp(expr elt, comprehension* generators)\n"
+ " | SetComp(expr elt, comprehension* generators)\n"
+ " | DictComp(expr key, expr value, comprehension* generators)\n"
+ " | GeneratorExp(expr elt, comprehension* generators)\n"
+ " | Await(expr value)\n"
+ " | Yield(expr? value)\n"
+ " | YieldFrom(expr value)\n"
+ " | Compare(expr left, cmpop* ops, expr* comparators)\n"
+ " | Call(expr func, expr* args, keyword* keywords)\n"
+ " | FormattedValue(expr value, int? conversion, expr? format_spec)\n"
+ " | JoinedStr(expr* values)\n"
+ " | Constant(constant value, string? kind)\n"
+ " | Attribute(expr value, identifier attr, expr_context ctx)\n"
+ " | Subscript(expr value, expr slice, expr_context ctx)\n"
+ " | Starred(expr value, expr_context ctx)\n"
+ " | Name(identifier id, expr_context ctx)\n"
+ " | List(expr* elts, expr_context ctx)\n"
+ " | Tuple(expr* elts, expr_context ctx)\n"
+ " | Slice(expr? lower, expr? upper, expr? step)");
+ if (!state->expr_type) return 0;
+ if (!add_attributes(state, state->expr_type, expr_attributes, 4)) return 0;
+ if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
+ -1)
+ return 0;
+ state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
+ BoolOp_fields, 2,
+ "BoolOp(boolop op, expr* values)");
+ if (!state->BoolOp_type) return 0;
+ state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
+ NamedExpr_fields, 2,
+ "NamedExpr(expr target, expr value)");
+ if (!state->NamedExpr_type) return 0;
+ state->BinOp_type = make_type(state, "BinOp", state->expr_type,
+ BinOp_fields, 3,
+ "BinOp(expr left, operator op, expr right)");
+ if (!state->BinOp_type) return 0;
+ state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
+ UnaryOp_fields, 2,
+ "UnaryOp(unaryop op, expr operand)");
+ if (!state->UnaryOp_type) return 0;
+ state->Lambda_type = make_type(state, "Lambda", state->expr_type,
+ Lambda_fields, 2,
+ "Lambda(arguments args, expr body)");
+ if (!state->Lambda_type) return 0;
+ state->IfExp_type = make_type(state, "IfExp", state->expr_type,
+ IfExp_fields, 3,
+ "IfExp(expr test, expr body, expr orelse)");
+ if (!state->IfExp_type) return 0;
+ state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
+ 2,
+ "Dict(expr* keys, expr* values)");
+ if (!state->Dict_type) return 0;
+ state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
+ "Set(expr* elts)");
+ if (!state->Set_type) return 0;
+ state->ListComp_type = make_type(state, "ListComp", state->expr_type,
+ ListComp_fields, 2,
+ "ListComp(expr elt, comprehension* generators)");
+ if (!state->ListComp_type) return 0;
+ state->SetComp_type = make_type(state, "SetComp", state->expr_type,
+ SetComp_fields, 2,
+ "SetComp(expr elt, comprehension* generators)");
+ if (!state->SetComp_type) return 0;
+ state->DictComp_type = make_type(state, "DictComp", state->expr_type,
+ DictComp_fields, 3,
+ "DictComp(expr key, expr value, comprehension* generators)");
+ if (!state->DictComp_type) return 0;
+ state->GeneratorExp_type = make_type(state, "GeneratorExp",
+ state->expr_type, GeneratorExp_fields,
+ 2,
+ "GeneratorExp(expr elt, comprehension* generators)");
+ if (!state->GeneratorExp_type) return 0;
+ state->Await_type = make_type(state, "Await", state->expr_type,
+ Await_fields, 1,
+ "Await(expr value)");
+ if (!state->Await_type) return 0;
+ state->Yield_type = make_type(state, "Yield", state->expr_type,
+ Yield_fields, 1,
+ "Yield(expr? value)");
+ if (!state->Yield_type) return 0;
+ if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
+ return 0;
+ state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
+ YieldFrom_fields, 1,
+ "YieldFrom(expr value)");
+ if (!state->YieldFrom_type) return 0;
+ state->Compare_type = make_type(state, "Compare", state->expr_type,
+ Compare_fields, 3,
+ "Compare(expr left, cmpop* ops, expr* comparators)");
+ if (!state->Compare_type) return 0;
+ state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
+ 3,
+ "Call(expr func, expr* args, keyword* keywords)");
+ if (!state->Call_type) return 0;
+ state->FormattedValue_type = make_type(state, "FormattedValue",
+ state->expr_type,
+ FormattedValue_fields, 3,
+ "FormattedValue(expr value, int? conversion, expr? format_spec)");
+ if (!state->FormattedValue_type) return 0;
+ if (PyObject_SetAttr(state->FormattedValue_type, state->conversion,
+ Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
+ Py_None) == -1)
+ return 0;
+ state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
+ JoinedStr_fields, 1,
+ "JoinedStr(expr* values)");
+ if (!state->JoinedStr_type) return 0;
+ state->Constant_type = make_type(state, "Constant", state->expr_type,
+ Constant_fields, 2,
+ "Constant(constant value, string? kind)");
+ if (!state->Constant_type) return 0;
+ if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
+ return 0;
+ state->Attribute_type = make_type(state, "Attribute", state->expr_type,
+ Attribute_fields, 3,
+ "Attribute(expr value, identifier attr, expr_context ctx)");
+ if (!state->Attribute_type) return 0;
+ state->Subscript_type = make_type(state, "Subscript", state->expr_type,
+ Subscript_fields, 3,
+ "Subscript(expr value, expr slice, expr_context ctx)");
+ if (!state->Subscript_type) return 0;
+ state->Starred_type = make_type(state, "Starred", state->expr_type,
+ Starred_fields, 2,
+ "Starred(expr value, expr_context ctx)");
+ if (!state->Starred_type) return 0;
+ state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
+ 2,
+ "Name(identifier id, expr_context ctx)");
+ if (!state->Name_type) return 0;
+ state->List_type = make_type(state, "List", state->expr_type, List_fields,
+ 2,
+ "List(expr* elts, expr_context ctx)");
+ if (!state->List_type) return 0;
+ state->Tuple_type = make_type(state, "Tuple", state->expr_type,
+ Tuple_fields, 2,
+ "Tuple(expr* elts, expr_context ctx)");
+ if (!state->Tuple_type) return 0;
+ state->Slice_type = make_type(state, "Slice", state->expr_type,
+ Slice_fields, 3,
+ "Slice(expr? lower, expr? upper, expr? step)");
+ if (!state->Slice_type) return 0;
+ if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
+ return 0;
+ state->expr_context_type = make_type(state, "expr_context",
+ state->AST_type, NULL, 0,
+ "expr_context = Load | Store | Del");
+ if (!state->expr_context_type) return 0;
+ if (!add_attributes(state, state->expr_context_type, NULL, 0)) return 0;
+ state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
+ 0,
+ "Load");
+ if (!state->Load_type) return 0;
+ state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
+ NULL, NULL);
+ if (!state->Load_singleton) return 0;
+ state->Store_type = make_type(state, "Store", state->expr_context_type,
+ NULL, 0,
+ "Store");
+ if (!state->Store_type) return 0;
+ state->Store_singleton = PyType_GenericNew((PyTypeObject
+ *)state->Store_type, NULL, NULL);
+ if (!state->Store_singleton) return 0;
+ state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
+ "Del");
+ if (!state->Del_type) return 0;
+ state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
+ NULL, NULL);
+ if (!state->Del_singleton) return 0;
+ state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
+ "boolop = And | Or");
+ if (!state->boolop_type) return 0;
+ if (!add_attributes(state, state->boolop_type, NULL, 0)) return 0;
+ state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
+ "And");
+ if (!state->And_type) return 0;
+ state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
+ NULL, NULL);
+ if (!state->And_singleton) return 0;
+ state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
+ "Or");
+ if (!state->Or_type) return 0;
+ state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
+ NULL, NULL);
+ if (!state->Or_singleton) return 0;
+ state->operator_type = make_type(state, "operator", state->AST_type, NULL,
+ 0,
+ "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
+ if (!state->operator_type) return 0;
+ if (!add_attributes(state, state->operator_type, NULL, 0)) return 0;
+ state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
+ "Add");
+ if (!state->Add_type) return 0;
+ state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
+ NULL, NULL);
+ if (!state->Add_singleton) return 0;
+ state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
+ "Sub");
+ if (!state->Sub_type) return 0;
+ state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
+ NULL, NULL);
+ if (!state->Sub_singleton) return 0;
+ state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
+ "Mult");
+ if (!state->Mult_type) return 0;
+ state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
+ NULL, NULL);
+ if (!state->Mult_singleton) return 0;
+ state->MatMult_type = make_type(state, "MatMult", state->operator_type,
+ NULL, 0,
+ "MatMult");
+ if (!state->MatMult_type) return 0;
+ state->MatMult_singleton = PyType_GenericNew((PyTypeObject
+ *)state->MatMult_type, NULL,
+ NULL);
+ if (!state->MatMult_singleton) return 0;
+ state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
+ "Div");
+ if (!state->Div_type) return 0;
+ state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
+ NULL, NULL);
+ if (!state->Div_singleton) return 0;
+ state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
+ "Mod");
+ if (!state->Mod_type) return 0;
+ state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
+ NULL, NULL);
+ if (!state->Mod_singleton) return 0;
+ state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
+ "Pow");
+ if (!state->Pow_type) return 0;
+ state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
+ NULL, NULL);
+ if (!state->Pow_singleton) return 0;
+ state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
+ 0,
+ "LShift");
+ if (!state->LShift_type) return 0;
+ state->LShift_singleton = PyType_GenericNew((PyTypeObject
+ *)state->LShift_type, NULL,
+ NULL);
+ if (!state->LShift_singleton) return 0;
+ state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
+ 0,
+ "RShift");
+ if (!state->RShift_type) return 0;
+ state->RShift_singleton = PyType_GenericNew((PyTypeObject
+ *)state->RShift_type, NULL,
+ NULL);
+ if (!state->RShift_singleton) return 0;
+ state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
+ "BitOr");
+ if (!state->BitOr_type) return 0;
+ state->BitOr_singleton = PyType_GenericNew((PyTypeObject
+ *)state->BitOr_type, NULL, NULL);
+ if (!state->BitOr_singleton) return 0;
+ state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
+ 0,
+ "BitXor");
+ if (!state->BitXor_type) return 0;
+ state->BitXor_singleton = PyType_GenericNew((PyTypeObject
+ *)state->BitXor_type, NULL,
+ NULL);
+ if (!state->BitXor_singleton) return 0;
+ state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
+ 0,
+ "BitAnd");
+ if (!state->BitAnd_type) return 0;
+ state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
+ *)state->BitAnd_type, NULL,
+ NULL);
+ if (!state->BitAnd_singleton) return 0;
+ state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
+ NULL, 0,
+ "FloorDiv");
+ if (!state->FloorDiv_type) return 0;
+ state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
+ *)state->FloorDiv_type, NULL,
+ NULL);
+ if (!state->FloorDiv_singleton) return 0;
+ state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
+ "unaryop = Invert | Not | UAdd | USub");
+ if (!state->unaryop_type) return 0;
+ if (!add_attributes(state, state->unaryop_type, NULL, 0)) return 0;
+ state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
+ 0,
+ "Invert");
+ if (!state->Invert_type) return 0;
+ state->Invert_singleton = PyType_GenericNew((PyTypeObject
+ *)state->Invert_type, NULL,
+ NULL);
+ if (!state->Invert_singleton) return 0;
+ state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
+ "Not");
+ if (!state->Not_type) return 0;
+ state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
+ NULL, NULL);
+ if (!state->Not_singleton) return 0;
+ state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
+ "UAdd");
+ if (!state->UAdd_type) return 0;
+ state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
+ NULL, NULL);
+ if (!state->UAdd_singleton) return 0;
+ state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
+ "USub");
+ if (!state->USub_type) return 0;
+ state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
+ NULL, NULL);
+ if (!state->USub_singleton) return 0;
+ state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
+ "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
+ if (!state->cmpop_type) return 0;
+ if (!add_attributes(state, state->cmpop_type, NULL, 0)) return 0;
+ state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
+ "Eq");
+ if (!state->Eq_type) return 0;
+ state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
+ NULL, NULL);
+ if (!state->Eq_singleton) return 0;
+ state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
+ "NotEq");
+ if (!state->NotEq_type) return 0;
+ state->NotEq_singleton = PyType_GenericNew((PyTypeObject
+ *)state->NotEq_type, NULL, NULL);
+ if (!state->NotEq_singleton) return 0;
+ state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
+ "Lt");
+ if (!state->Lt_type) return 0;
+ state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
+ NULL, NULL);
+ if (!state->Lt_singleton) return 0;
+ state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
+ "LtE");
+ if (!state->LtE_type) return 0;
+ state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
+ NULL, NULL);
+ if (!state->LtE_singleton) return 0;
+ state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
+ "Gt");
+ if (!state->Gt_type) return 0;
+ state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
+ NULL, NULL);
+ if (!state->Gt_singleton) return 0;
+ state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
+ "GtE");
+ if (!state->GtE_type) return 0;
+ state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
+ NULL, NULL);
+ if (!state->GtE_singleton) return 0;
+ state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
+ "Is");
+ if (!state->Is_type) return 0;
+ state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
+ NULL, NULL);
+ if (!state->Is_singleton) return 0;
+ state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
+ "IsNot");
+ if (!state->IsNot_type) return 0;
+ state->IsNot_singleton = PyType_GenericNew((PyTypeObject
+ *)state->IsNot_type, NULL, NULL);
+ if (!state->IsNot_singleton) return 0;
+ state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
+ "In");
+ if (!state->In_type) return 0;
+ state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
+ NULL, NULL);
+ if (!state->In_singleton) return 0;
+ state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
+ "NotIn");
+ if (!state->NotIn_type) return 0;
+ state->NotIn_singleton = PyType_GenericNew((PyTypeObject
+ *)state->NotIn_type, NULL, NULL);
+ if (!state->NotIn_singleton) return 0;
+ state->comprehension_type = make_type(state, "comprehension",
+ state->AST_type,
+ comprehension_fields, 4,
+ "comprehension(expr target, expr iter, expr* ifs, int is_async)");
+ if (!state->comprehension_type) return 0;
+ if (!add_attributes(state, state->comprehension_type, NULL, 0)) return 0;
+ state->excepthandler_type = make_type(state, "excepthandler",
+ state->AST_type, NULL, 0,
+ "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
+ if (!state->excepthandler_type) return 0;
+ if (!add_attributes(state, state->excepthandler_type,
+ excepthandler_attributes, 4)) return 0;
+ if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
+ == -1)
+ return 0;
+ if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
+ Py_None) == -1)
+ return 0;
+ state->ExceptHandler_type = make_type(state, "ExceptHandler",
+ state->excepthandler_type,
+ ExceptHandler_fields, 3,
+ "ExceptHandler(expr? type, identifier? name, stmt* body)");
+ if (!state->ExceptHandler_type) return 0;
+ if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
+ return 0;
+ state->arguments_type = make_type(state, "arguments", state->AST_type,
+ arguments_fields, 7,
+ "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults, arg? kwarg, expr* defaults)");
+ if (!state->arguments_type) return 0;
+ if (!add_attributes(state, state->arguments_type, NULL, 0)) return 0;
+ if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
+ return 0;
+ state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
+ "arg(identifier arg, expr? annotation, string? type_comment)");
+ if (!state->arg_type) return 0;
+ if (!add_attributes(state, state->arg_type, arg_attributes, 4)) return 0;
+ if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
+ return 0;
+ state->keyword_type = make_type(state, "keyword", state->AST_type,
+ keyword_fields, 2,
+ "keyword(identifier? arg, expr value)");
+ if (!state->keyword_type) return 0;
+ if (!add_attributes(state, state->keyword_type, keyword_attributes, 4))
+ return 0;
+ if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
+ return 0;
+ if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
+ == -1)
+ return 0;
+ state->alias_type = make_type(state, "alias", state->AST_type,
+ alias_fields, 2,
+ "alias(identifier name, identifier? asname)");
+ if (!state->alias_type) return 0;
+ if (!add_attributes(state, state->alias_type, NULL, 0)) return 0;
+ if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
+ return 0;
+ state->withitem_type = make_type(state, "withitem", state->AST_type,
+ withitem_fields, 2,
+ "withitem(expr context_expr, expr? optional_vars)");
+ if (!state->withitem_type) return 0;
+ if (!add_attributes(state, state->withitem_type, NULL, 0)) return 0;
+ if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
+ == -1)
+ return 0;
+ state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
+ NULL, 0,
+ "type_ignore = TypeIgnore(int lineno, string tag)");
+ if (!state->type_ignore_type) return 0;
+ if (!add_attributes(state, state->type_ignore_type, NULL, 0)) return 0;
+ state->TypeIgnore_type = make_type(state, "TypeIgnore",
+ state->type_ignore_type,
+ TypeIgnore_fields, 2,
+ "TypeIgnore(int lineno, string tag)");
+ if (!state->TypeIgnore_type) return 0;
+ state->initialized = 1;
return 1;
}
-static int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
-static int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
-static int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
-static int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
- arena);
-static int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
-static int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
-static int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
-static int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
-static int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
-static int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
- arena);
-static int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
- arena);
-static int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
-static int obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena);
-static int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
-static int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
-static int obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena);
-static int obj2ast_type_ignore(PyObject* obj, type_ignore_ty* out, PyArena*
- arena);
+static int obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out,
+ PyArena* arena);
+static int obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out,
+ PyArena* arena);
+static int obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out,
+ PyArena* arena);
+static int obj2ast_expr_context(astmodulestate *state, PyObject* obj,
+ expr_context_ty* out, PyArena* arena);
+static int obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out,
+ PyArena* arena);
+static int obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty*
+ out, PyArena* arena);
+static int obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty*
+ out, PyArena* arena);
+static int obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out,
+ PyArena* arena);
+static int obj2ast_comprehension(astmodulestate *state, PyObject* obj,
+ comprehension_ty* out, PyArena* arena);
+static int obj2ast_excepthandler(astmodulestate *state, PyObject* obj,
+ excepthandler_ty* out, PyArena* arena);
+static int obj2ast_arguments(astmodulestate *state, PyObject* obj,
+ arguments_ty* out, PyArena* arena);
+static int obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out,
+ PyArena* arena);
+static int obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty*
+ out, PyArena* arena);
+static int obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out,
+ PyArena* arena);
+static int obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty*
+ out, PyArena* arena);
+static int obj2ast_type_ignore(astmodulestate *state, PyObject* obj,
+ type_ignore_ty* out, PyArena* arena);
mod_ty
Module(asdl_seq * body, asdl_seq * type_ignores, PyArena *arena)
@@ -1244,7 +1942,7 @@
mod_ty p;
if (!body) {
PyErr_SetString(PyExc_ValueError,
- "field body is required for Expression");
+ "field 'body' is required for Expression");
return NULL;
}
p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1261,7 +1959,7 @@
mod_ty p;
if (!returns) {
PyErr_SetString(PyExc_ValueError,
- "field returns is required for FunctionType");
+ "field 'returns' is required for FunctionType");
return NULL;
}
p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1273,18 +1971,6 @@
return p;
}
-mod_ty
-Suite(asdl_seq * body, PyArena *arena)
-{
- mod_ty p;
- p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
- if (!p)
- return NULL;
- p->kind = Suite_kind;
- p->v.Suite.body = body;
- return p;
-}
-
stmt_ty
FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
decorator_list, expr_ty returns, string type_comment, int lineno,
@@ -1293,12 +1979,12 @@
stmt_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for FunctionDef");
+ "field 'name' is required for FunctionDef");
return NULL;
}
if (!args) {
PyErr_SetString(PyExc_ValueError,
- "field args is required for FunctionDef");
+ "field 'args' is required for FunctionDef");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1327,12 +2013,12 @@
stmt_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for AsyncFunctionDef");
+ "field 'name' is required for AsyncFunctionDef");
return NULL;
}
if (!args) {
PyErr_SetString(PyExc_ValueError,
- "field args is required for AsyncFunctionDef");
+ "field 'args' is required for AsyncFunctionDef");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1360,7 +2046,7 @@
stmt_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for ClassDef");
+ "field 'name' is required for ClassDef");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1420,7 +2106,7 @@
stmt_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Assign");
+ "field 'value' is required for Assign");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1444,17 +2130,17 @@
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for AugAssign");
+ "field 'target' is required for AugAssign");
return NULL;
}
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for AugAssign");
+ "field 'op' is required for AugAssign");
return NULL;
}
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for AugAssign");
+ "field 'value' is required for AugAssign");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1479,12 +2165,12 @@
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for AnnAssign");
+ "field 'target' is required for AnnAssign");
return NULL;
}
if (!annotation) {
PyErr_SetString(PyExc_ValueError,
- "field annotation is required for AnnAssign");
+ "field 'annotation' is required for AnnAssign");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1510,12 +2196,12 @@
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for For");
+ "field 'target' is required for For");
return NULL;
}
if (!iter) {
PyErr_SetString(PyExc_ValueError,
- "field iter is required for For");
+ "field 'iter' is required for For");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1542,12 +2228,12 @@
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for AsyncFor");
+ "field 'target' is required for AsyncFor");
return NULL;
}
if (!iter) {
PyErr_SetString(PyExc_ValueError,
- "field iter is required for AsyncFor");
+ "field 'iter' is required for AsyncFor");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1573,7 +2259,7 @@
stmt_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for While");
+ "field 'test' is required for While");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1597,7 +2283,7 @@
stmt_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for If");
+ "field 'test' is required for If");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1698,7 +2384,7 @@
stmt_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for Assert");
+ "field 'test' is required for Assert");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1791,7 +2477,7 @@
stmt_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Expr");
+ "field 'value' is required for Expr");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1861,7 +2547,7 @@
expr_ty p;
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for BoolOp");
+ "field 'op' is required for BoolOp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1884,12 +2570,12 @@
expr_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for NamedExpr");
+ "field 'target' is required for NamedExpr");
return NULL;
}
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for NamedExpr");
+ "field 'value' is required for NamedExpr");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1912,17 +2598,17 @@
expr_ty p;
if (!left) {
PyErr_SetString(PyExc_ValueError,
- "field left is required for BinOp");
+ "field 'left' is required for BinOp");
return NULL;
}
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for BinOp");
+ "field 'op' is required for BinOp");
return NULL;
}
if (!right) {
PyErr_SetString(PyExc_ValueError,
- "field right is required for BinOp");
+ "field 'right' is required for BinOp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1946,12 +2632,12 @@
expr_ty p;
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for UnaryOp");
+ "field 'op' is required for UnaryOp");
return NULL;
}
if (!operand) {
PyErr_SetString(PyExc_ValueError,
- "field operand is required for UnaryOp");
+ "field 'operand' is required for UnaryOp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -1974,12 +2660,12 @@
expr_ty p;
if (!args) {
PyErr_SetString(PyExc_ValueError,
- "field args is required for Lambda");
+ "field 'args' is required for Lambda");
return NULL;
}
if (!body) {
PyErr_SetString(PyExc_ValueError,
- "field body is required for Lambda");
+ "field 'body' is required for Lambda");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2002,17 +2688,17 @@
expr_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for IfExp");
+ "field 'test' is required for IfExp");
return NULL;
}
if (!body) {
PyErr_SetString(PyExc_ValueError,
- "field body is required for IfExp");
+ "field 'body' is required for IfExp");
return NULL;
}
if (!orelse) {
PyErr_SetString(PyExc_ValueError,
- "field orelse is required for IfExp");
+ "field 'orelse' is required for IfExp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2071,7 +2757,7 @@
expr_ty p;
if (!elt) {
PyErr_SetString(PyExc_ValueError,
- "field elt is required for ListComp");
+ "field 'elt' is required for ListComp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2094,7 +2780,7 @@
expr_ty p;
if (!elt) {
PyErr_SetString(PyExc_ValueError,
- "field elt is required for SetComp");
+ "field 'elt' is required for SetComp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2117,12 +2803,12 @@
expr_ty p;
if (!key) {
PyErr_SetString(PyExc_ValueError,
- "field key is required for DictComp");
+ "field 'key' is required for DictComp");
return NULL;
}
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for DictComp");
+ "field 'value' is required for DictComp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2146,7 +2832,7 @@
expr_ty p;
if (!elt) {
PyErr_SetString(PyExc_ValueError,
- "field elt is required for GeneratorExp");
+ "field 'elt' is required for GeneratorExp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2169,7 +2855,7 @@
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Await");
+ "field 'value' is required for Await");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2208,7 +2894,7 @@
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for YieldFrom");
+ "field 'value' is required for YieldFrom");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2230,7 +2916,7 @@
expr_ty p;
if (!left) {
PyErr_SetString(PyExc_ValueError,
- "field left is required for Compare");
+ "field 'left' is required for Compare");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2254,7 +2940,7 @@
expr_ty p;
if (!func) {
PyErr_SetString(PyExc_ValueError,
- "field func is required for Call");
+ "field 'func' is required for Call");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2279,7 +2965,7 @@
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for FormattedValue");
+ "field 'value' is required for FormattedValue");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2320,7 +3006,7 @@
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Constant");
+ "field 'value' is required for Constant");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2343,17 +3029,17 @@
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Attribute");
+ "field 'value' is required for Attribute");
return NULL;
}
if (!attr) {
PyErr_SetString(PyExc_ValueError,
- "field attr is required for Attribute");
+ "field 'attr' is required for Attribute");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Attribute");
+ "field 'ctx' is required for Attribute");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2371,23 +3057,23 @@
}
expr_ty
-Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
+Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena *arena)
{
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Subscript");
+ "field 'value' is required for Subscript");
return NULL;
}
if (!slice) {
PyErr_SetString(PyExc_ValueError,
- "field slice is required for Subscript");
+ "field 'slice' is required for Subscript");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Subscript");
+ "field 'ctx' is required for Subscript");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2411,12 +3097,12 @@
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Starred");
+ "field 'value' is required for Starred");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Starred");
+ "field 'ctx' is required for Starred");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2439,12 +3125,12 @@
expr_ty p;
if (!id) {
PyErr_SetString(PyExc_ValueError,
- "field id is required for Name");
+ "field 'id' is required for Name");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Name");
+ "field 'ctx' is required for Name");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2467,7 +3153,7 @@
expr_ty p;
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for List");
+ "field 'ctx' is required for List");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2490,7 +3176,7 @@
expr_ty p;
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Tuple");
+ "field 'ctx' is required for Tuple");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2506,46 +3192,22 @@
return p;
}
-slice_ty
-Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
+expr_ty
+Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int col_offset,
+ int end_lineno, int end_col_offset, PyArena *arena)
{
- slice_ty p;
- p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
+ expr_ty p;
+ p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
if (!p)
return NULL;
p->kind = Slice_kind;
p->v.Slice.lower = lower;
p->v.Slice.upper = upper;
p->v.Slice.step = step;
- return p;
-}
-
-slice_ty
-ExtSlice(asdl_seq * dims, PyArena *arena)
-{
- slice_ty p;
- p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
- if (!p)
- return NULL;
- p->kind = ExtSlice_kind;
- p->v.ExtSlice.dims = dims;
- return p;
-}
-
-slice_ty
-Index(expr_ty value, PyArena *arena)
-{
- slice_ty p;
- if (!value) {
- PyErr_SetString(PyExc_ValueError,
- "field value is required for Index");
- return NULL;
- }
- p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
- if (!p)
- return NULL;
- p->kind = Index_kind;
- p->v.Index.value = value;
+ p->lineno = lineno;
+ p->col_offset = col_offset;
+ p->end_lineno = end_lineno;
+ p->end_col_offset = end_col_offset;
return p;
}
@@ -2556,12 +3218,12 @@
comprehension_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for comprehension");
+ "field 'target' is required for comprehension");
return NULL;
}
if (!iter) {
PyErr_SetString(PyExc_ValueError,
- "field iter is required for comprehension");
+ "field 'iter' is required for comprehension");
return NULL;
}
p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2619,7 +3281,7 @@
arg_ty p;
if (!arg) {
PyErr_SetString(PyExc_ValueError,
- "field arg is required for arg");
+ "field 'arg' is required for arg");
return NULL;
}
p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2636,12 +3298,13 @@
}
keyword_ty
-keyword(identifier arg, expr_ty value, PyArena *arena)
+keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
+ end_lineno, int end_col_offset, PyArena *arena)
{
keyword_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for keyword");
+ "field 'value' is required for keyword");
return NULL;
}
p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2649,6 +3312,10 @@
return NULL;
p->arg = arg;
p->value = value;
+ p->lineno = lineno;
+ p->col_offset = col_offset;
+ p->end_lineno = end_lineno;
+ p->end_col_offset = end_col_offset;
return p;
}
@@ -2658,7 +3325,7 @@
alias_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for alias");
+ "field 'name' is required for alias");
return NULL;
}
p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2675,7 +3342,7 @@
withitem_ty p;
if (!context_expr) {
PyErr_SetString(PyExc_ValueError,
- "field context_expr is required for withitem");
+ "field 'context_expr' is required for withitem");
return NULL;
}
p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2692,7 +3359,7 @@
type_ignore_ty p;
if (!tag) {
PyErr_SetString(PyExc_ValueError,
- "field tag is required for TypeIgnore");
+ "field 'tag' is required for TypeIgnore");
return NULL;
}
p = (type_ignore_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2706,67 +3373,63 @@
PyObject*
-ast2obj_mod(void* _o)
+ast2obj_mod(astmodulestate *state, void* _o)
{
mod_ty o = (mod_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
switch (o->kind) {
case Module_kind:
- result = PyType_GenericNew(Module_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Module_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.Module.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Module.type_ignores, ast2obj_type_ignore);
+ value = ast2obj_list(state, o->v.Module.type_ignores,
+ ast2obj_type_ignore);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_ignores, value) == -1)
+ if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Interactive_kind:
- result = PyType_GenericNew(Interactive_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Interactive_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.Interactive.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Expression_kind:
- result = PyType_GenericNew(Expression_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Expression_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Expression.body);
+ value = ast2obj_expr(state, o->v.Expression.body);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
break;
case FunctionType_kind:
- result = PyType_GenericNew(FunctionType_type, NULL, NULL);
+ tp = (PyTypeObject *)state->FunctionType_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.FunctionType.argtypes, ast2obj_expr);
+ value = ast2obj_list(state, o->v.FunctionType.argtypes, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_argtypes, value) == -1)
+ if (PyObject_SetAttr(result, state->argtypes, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.FunctionType.returns);
+ value = ast2obj_expr(state, o->v.FunctionType.returns);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
- goto failed;
- Py_DECREF(value);
- break;
- case Suite_kind:
- result = PyType_GenericNew(Suite_type, NULL, NULL);
- if (!result) goto failed;
- value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
- if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->returns, value) == -1)
goto failed;
Py_DECREF(value);
break;
@@ -2779,465 +3442,491 @@
}
PyObject*
-ast2obj_stmt(void* _o)
+ast2obj_stmt(astmodulestate *state, void* _o)
{
stmt_ty o = (stmt_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
switch (o->kind) {
case FunctionDef_kind:
- result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
+ tp = (PyTypeObject *)state->FunctionDef_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(o->v.FunctionDef.name);
+ value = ast2obj_identifier(state, o->v.FunctionDef.name);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+ if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arguments(o->v.FunctionDef.args);
+ value = ast2obj_arguments(state, o->v.FunctionDef.args);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+ if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.FunctionDef.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.FunctionDef.decorator_list, ast2obj_expr);
+ value = ast2obj_list(state, o->v.FunctionDef.decorator_list,
+ ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+ if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.FunctionDef.returns);
+ value = ast2obj_expr(state, o->v.FunctionDef.returns);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
+ if (PyObject_SetAttr(result, state->returns, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.FunctionDef.type_comment);
+ value = ast2obj_string(state, o->v.FunctionDef.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case AsyncFunctionDef_kind:
- result = PyType_GenericNew(AsyncFunctionDef_type, NULL, NULL);
+ tp = (PyTypeObject *)state->AsyncFunctionDef_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(o->v.AsyncFunctionDef.name);
+ value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+ if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arguments(o->v.AsyncFunctionDef.args);
+ value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+ if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.AsyncFunctionDef.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.AsyncFunctionDef.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.AsyncFunctionDef.decorator_list,
+ value = ast2obj_list(state, o->v.AsyncFunctionDef.decorator_list,
ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+ if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.AsyncFunctionDef.returns);
+ value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
+ if (PyObject_SetAttr(result, state->returns, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.AsyncFunctionDef.type_comment);
+ value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case ClassDef_kind:
- result = PyType_GenericNew(ClassDef_type, NULL, NULL);
+ tp = (PyTypeObject *)state->ClassDef_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(o->v.ClassDef.name);
+ value = ast2obj_identifier(state, o->v.ClassDef.name);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+ if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
+ value = ast2obj_list(state, o->v.ClassDef.bases, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_bases, value) == -1)
+ if (PyObject_SetAttr(result, state->bases, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ClassDef.keywords, ast2obj_keyword);
+ value = ast2obj_list(state, o->v.ClassDef.keywords, ast2obj_keyword);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
+ if (PyObject_SetAttr(result, state->keywords, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.ClassDef.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ClassDef.decorator_list, ast2obj_expr);
+ value = ast2obj_list(state, o->v.ClassDef.decorator_list, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
+ if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Return_kind:
- result = PyType_GenericNew(Return_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Return_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Return.value);
+ value = ast2obj_expr(state, o->v.Return.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Delete_kind:
- result = PyType_GenericNew(Delete_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Delete_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Delete.targets, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
+ if (PyObject_SetAttr(result, state->targets, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Assign_kind:
- result = PyType_GenericNew(Assign_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Assign_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Assign.targets, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
+ if (PyObject_SetAttr(result, state->targets, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.Assign.value);
+ value = ast2obj_expr(state, o->v.Assign.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.Assign.type_comment);
+ value = ast2obj_string(state, o->v.Assign.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case AugAssign_kind:
- result = PyType_GenericNew(AugAssign_type, NULL, NULL);
+ tp = (PyTypeObject *)state->AugAssign_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.AugAssign.target);
+ value = ast2obj_expr(state, o->v.AugAssign.target);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+ if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_operator(o->v.AugAssign.op);
+ value = ast2obj_operator(state, o->v.AugAssign.op);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+ if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.AugAssign.value);
+ value = ast2obj_expr(state, o->v.AugAssign.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case AnnAssign_kind:
- result = PyType_GenericNew(AnnAssign_type, NULL, NULL);
+ tp = (PyTypeObject *)state->AnnAssign_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.AnnAssign.target);
+ value = ast2obj_expr(state, o->v.AnnAssign.target);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+ if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.AnnAssign.annotation);
+ value = ast2obj_expr(state, o->v.AnnAssign.annotation);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
+ if (PyObject_SetAttr(result, state->annotation, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.AnnAssign.value);
+ value = ast2obj_expr(state, o->v.AnnAssign.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->v.AnnAssign.simple);
+ value = ast2obj_int(state, o->v.AnnAssign.simple);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_simple, value) == -1)
+ if (PyObject_SetAttr(result, state->simple, value) == -1)
goto failed;
Py_DECREF(value);
break;
case For_kind:
- result = PyType_GenericNew(For_type, NULL, NULL);
+ tp = (PyTypeObject *)state->For_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.For.target);
+ value = ast2obj_expr(state, o->v.For.target);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+ if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.For.iter);
+ value = ast2obj_expr(state, o->v.For.iter);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+ if (PyObject_SetAttr(result, state->iter, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.For.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.For.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.For.orelse, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+ if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.For.type_comment);
+ value = ast2obj_string(state, o->v.For.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case AsyncFor_kind:
- result = PyType_GenericNew(AsyncFor_type, NULL, NULL);
+ tp = (PyTypeObject *)state->AsyncFor_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.AsyncFor.target);
+ value = ast2obj_expr(state, o->v.AsyncFor.target);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+ if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.AsyncFor.iter);
+ value = ast2obj_expr(state, o->v.AsyncFor.iter);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+ if (PyObject_SetAttr(result, state->iter, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.AsyncFor.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.AsyncFor.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.AsyncFor.orelse, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.AsyncFor.orelse, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+ if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.AsyncFor.type_comment);
+ value = ast2obj_string(state, o->v.AsyncFor.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case While_kind:
- result = PyType_GenericNew(While_type, NULL, NULL);
+ tp = (PyTypeObject *)state->While_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.While.test);
+ value = ast2obj_expr(state, o->v.While.test);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+ if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.While.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.While.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.While.orelse, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+ if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
break;
case If_kind:
- result = PyType_GenericNew(If_type, NULL, NULL);
+ tp = (PyTypeObject *)state->If_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.If.test);
+ value = ast2obj_expr(state, o->v.If.test);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+ if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.If.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.If.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.If.orelse, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+ if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
break;
case With_kind:
- result = PyType_GenericNew(With_type, NULL, NULL);
+ tp = (PyTypeObject *)state->With_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.With.items, ast2obj_withitem);
+ value = ast2obj_list(state, o->v.With.items, ast2obj_withitem);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
+ if (PyObject_SetAttr(result, state->items, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.With.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.With.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.With.type_comment);
+ value = ast2obj_string(state, o->v.With.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case AsyncWith_kind:
- result = PyType_GenericNew(AsyncWith_type, NULL, NULL);
+ tp = (PyTypeObject *)state->AsyncWith_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.AsyncWith.items, ast2obj_withitem);
+ value = ast2obj_list(state, o->v.AsyncWith.items, ast2obj_withitem);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
+ if (PyObject_SetAttr(result, state->items, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.AsyncWith.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.AsyncWith.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.AsyncWith.type_comment);
+ value = ast2obj_string(state, o->v.AsyncWith.type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Raise_kind:
- result = PyType_GenericNew(Raise_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Raise_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Raise.exc);
+ value = ast2obj_expr(state, o->v.Raise.exc);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_exc, value) == -1)
+ if (PyObject_SetAttr(result, state->exc, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.Raise.cause);
+ value = ast2obj_expr(state, o->v.Raise.cause);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_cause, value) == -1)
+ if (PyObject_SetAttr(result, state->cause, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Try_kind:
- result = PyType_GenericNew(Try_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Try_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Try.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.Try.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Try.handlers, ast2obj_excepthandler);
+ value = ast2obj_list(state, o->v.Try.handlers, ast2obj_excepthandler);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_handlers, value) == -1)
+ if (PyObject_SetAttr(result, state->handlers, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Try.orelse, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.Try.orelse, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+ if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Try.finalbody, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.Try.finalbody, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_finalbody, value) == -1)
+ if (PyObject_SetAttr(result, state->finalbody, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Assert_kind:
- result = PyType_GenericNew(Assert_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Assert_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Assert.test);
+ value = ast2obj_expr(state, o->v.Assert.test);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+ if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.Assert.msg);
+ value = ast2obj_expr(state, o->v.Assert.msg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_msg, value) == -1)
+ if (PyObject_SetAttr(result, state->msg, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Import_kind:
- result = PyType_GenericNew(Import_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Import_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Import.names, ast2obj_alias);
+ value = ast2obj_list(state, o->v.Import.names, ast2obj_alias);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+ if (PyObject_SetAttr(result, state->names, value) == -1)
goto failed;
Py_DECREF(value);
break;
case ImportFrom_kind:
- result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
+ tp = (PyTypeObject *)state->ImportFrom_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(o->v.ImportFrom.module);
+ value = ast2obj_identifier(state, o->v.ImportFrom.module);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_module, value) == -1)
+ if (PyObject_SetAttr(result, state->module, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
+ value = ast2obj_list(state, o->v.ImportFrom.names, ast2obj_alias);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+ if (PyObject_SetAttr(result, state->names, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->v.ImportFrom.level);
+ value = ast2obj_int(state, o->v.ImportFrom.level);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_level, value) == -1)
+ if (PyObject_SetAttr(result, state->level, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Global_kind:
- result = PyType_GenericNew(Global_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Global_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
+ value = ast2obj_list(state, o->v.Global.names, ast2obj_identifier);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+ if (PyObject_SetAttr(result, state->names, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Nonlocal_kind:
- result = PyType_GenericNew(Nonlocal_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Nonlocal_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Nonlocal.names, ast2obj_identifier);
+ value = ast2obj_list(state, o->v.Nonlocal.names, ast2obj_identifier);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
+ if (PyObject_SetAttr(result, state->names, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Expr_kind:
- result = PyType_GenericNew(Expr_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Expr_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Expr.value);
+ value = ast2obj_expr(state, o->v.Expr.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Pass_kind:
- result = PyType_GenericNew(Pass_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Pass_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
break;
case Break_kind:
- result = PyType_GenericNew(Break_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Break_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
break;
case Continue_kind:
- result = PyType_GenericNew(Continue_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Continue_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
break;
}
- value = ast2obj_int(o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
return result;
@@ -3248,227 +3937,246 @@
}
PyObject*
-ast2obj_expr(void* _o)
+ast2obj_expr(astmodulestate *state, void* _o)
{
expr_ty o = (expr_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
switch (o->kind) {
case BoolOp_kind:
- result = PyType_GenericNew(BoolOp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->BoolOp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_boolop(o->v.BoolOp.op);
+ value = ast2obj_boolop(state, o->v.BoolOp.op);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+ if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
+ value = ast2obj_list(state, o->v.BoolOp.values, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
+ if (PyObject_SetAttr(result, state->values, value) == -1)
goto failed;
Py_DECREF(value);
break;
case NamedExpr_kind:
- result = PyType_GenericNew(NamedExpr_type, NULL, NULL);
+ tp = (PyTypeObject *)state->NamedExpr_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.NamedExpr.target);
+ value = ast2obj_expr(state, o->v.NamedExpr.target);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+ if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.NamedExpr.value);
+ value = ast2obj_expr(state, o->v.NamedExpr.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case BinOp_kind:
- result = PyType_GenericNew(BinOp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->BinOp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.BinOp.left);
+ value = ast2obj_expr(state, o->v.BinOp.left);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
+ if (PyObject_SetAttr(result, state->left, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_operator(o->v.BinOp.op);
+ value = ast2obj_operator(state, o->v.BinOp.op);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+ if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.BinOp.right);
+ value = ast2obj_expr(state, o->v.BinOp.right);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_right, value) == -1)
+ if (PyObject_SetAttr(result, state->right, value) == -1)
goto failed;
Py_DECREF(value);
break;
case UnaryOp_kind:
- result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->UnaryOp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_unaryop(o->v.UnaryOp.op);
+ value = ast2obj_unaryop(state, o->v.UnaryOp.op);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
+ if (PyObject_SetAttr(result, state->op, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.UnaryOp.operand);
+ value = ast2obj_expr(state, o->v.UnaryOp.operand);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_operand, value) == -1)
+ if (PyObject_SetAttr(result, state->operand, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Lambda_kind:
- result = PyType_GenericNew(Lambda_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Lambda_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_arguments(o->v.Lambda.args);
+ value = ast2obj_arguments(state, o->v.Lambda.args);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+ if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.Lambda.body);
+ value = ast2obj_expr(state, o->v.Lambda.body);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
break;
case IfExp_kind:
- result = PyType_GenericNew(IfExp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->IfExp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.IfExp.test);
+ value = ast2obj_expr(state, o->v.IfExp.test);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
+ if (PyObject_SetAttr(result, state->test, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.IfExp.body);
+ value = ast2obj_expr(state, o->v.IfExp.body);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.IfExp.orelse);
+ value = ast2obj_expr(state, o->v.IfExp.orelse);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
+ if (PyObject_SetAttr(result, state->orelse, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Dict_kind:
- result = PyType_GenericNew(Dict_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Dict_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Dict.keys, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_keys, value) == -1)
+ if (PyObject_SetAttr(result, state->keys, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Dict.values, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
+ if (PyObject_SetAttr(result, state->values, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Set_kind:
- result = PyType_GenericNew(Set_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Set_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Set.elts, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Set.elts, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
+ if (PyObject_SetAttr(result, state->elts, value) == -1)
goto failed;
Py_DECREF(value);
break;
case ListComp_kind:
- result = PyType_GenericNew(ListComp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->ListComp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.ListComp.elt);
+ value = ast2obj_expr(state, o->v.ListComp.elt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
+ if (PyObject_SetAttr(result, state->elt, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ListComp.generators, ast2obj_comprehension);
+ value = ast2obj_list(state, o->v.ListComp.generators,
+ ast2obj_comprehension);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+ if (PyObject_SetAttr(result, state->generators, value) == -1)
goto failed;
Py_DECREF(value);
break;
case SetComp_kind:
- result = PyType_GenericNew(SetComp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->SetComp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.SetComp.elt);
+ value = ast2obj_expr(state, o->v.SetComp.elt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
+ if (PyObject_SetAttr(result, state->elt, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.SetComp.generators, ast2obj_comprehension);
+ value = ast2obj_list(state, o->v.SetComp.generators,
+ ast2obj_comprehension);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+ if (PyObject_SetAttr(result, state->generators, value) == -1)
goto failed;
Py_DECREF(value);
break;
case DictComp_kind:
- result = PyType_GenericNew(DictComp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->DictComp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.DictComp.key);
+ value = ast2obj_expr(state, o->v.DictComp.key);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_key, value) == -1)
+ if (PyObject_SetAttr(result, state->key, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.DictComp.value);
+ value = ast2obj_expr(state, o->v.DictComp.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.DictComp.generators, ast2obj_comprehension);
+ value = ast2obj_list(state, o->v.DictComp.generators,
+ ast2obj_comprehension);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+ if (PyObject_SetAttr(result, state->generators, value) == -1)
goto failed;
Py_DECREF(value);
break;
case GeneratorExp_kind:
- result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
+ tp = (PyTypeObject *)state->GeneratorExp_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.GeneratorExp.elt);
+ value = ast2obj_expr(state, o->v.GeneratorExp.elt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
+ if (PyObject_SetAttr(result, state->elt, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.GeneratorExp.generators,
+ value = ast2obj_list(state, o->v.GeneratorExp.generators,
ast2obj_comprehension);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
+ if (PyObject_SetAttr(result, state->generators, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Await_kind:
- result = PyType_GenericNew(Await_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Await_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Await.value);
+ value = ast2obj_expr(state, o->v.Await.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Yield_kind:
- result = PyType_GenericNew(Yield_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Yield_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Yield.value);
+ value = ast2obj_expr(state, o->v.Yield.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case YieldFrom_kind:
- result = PyType_GenericNew(YieldFrom_type, NULL, NULL);
+ tp = (PyTypeObject *)state->YieldFrom_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.YieldFrom.value);
+ value = ast2obj_expr(state, o->v.YieldFrom.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Compare_kind:
- result = PyType_GenericNew(Compare_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Compare_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Compare.left);
+ value = ast2obj_expr(state, o->v.Compare.left);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
+ if (PyObject_SetAttr(result, state->left, value) == -1)
goto failed;
Py_DECREF(value);
{
@@ -3476,192 +4184,222 @@
value = PyList_New(n);
if (!value) goto failed;
for(i = 0; i < n; i++)
- PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
+ PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
}
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ops, value) == -1)
+ if (PyObject_SetAttr(result, state->ops, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Compare.comparators, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_comparators, value) == -1)
+ if (PyObject_SetAttr(result, state->comparators, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Call_kind:
- result = PyType_GenericNew(Call_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Call_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Call.func);
+ value = ast2obj_expr(state, o->v.Call.func);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_func, value) == -1)
+ if (PyObject_SetAttr(result, state->func, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Call.args, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Call.args, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+ if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
+ value = ast2obj_list(state, o->v.Call.keywords, ast2obj_keyword);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
+ if (PyObject_SetAttr(result, state->keywords, value) == -1)
goto failed;
Py_DECREF(value);
break;
case FormattedValue_kind:
- result = PyType_GenericNew(FormattedValue_type, NULL, NULL);
+ tp = (PyTypeObject *)state->FormattedValue_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.FormattedValue.value);
+ value = ast2obj_expr(state, o->v.FormattedValue.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->v.FormattedValue.conversion);
+ value = ast2obj_int(state, o->v.FormattedValue.conversion);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_conversion, value) == -1)
+ if (PyObject_SetAttr(result, state->conversion, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->v.FormattedValue.format_spec);
+ value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_format_spec, value) == -1)
+ if (PyObject_SetAttr(result, state->format_spec, value) == -1)
goto failed;
Py_DECREF(value);
break;
case JoinedStr_kind:
- result = PyType_GenericNew(JoinedStr_type, NULL, NULL);
+ tp = (PyTypeObject *)state->JoinedStr_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.JoinedStr.values, ast2obj_expr);
+ value = ast2obj_list(state, o->v.JoinedStr.values, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
+ if (PyObject_SetAttr(result, state->values, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Constant_kind:
- result = PyType_GenericNew(Constant_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Constant_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_constant(o->v.Constant.value);
+ value = ast2obj_constant(state, o->v.Constant.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.Constant.kind);
+ value = ast2obj_string(state, o->v.Constant.kind);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_kind, value) == -1)
+ if (PyObject_SetAttr(result, state->kind, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Attribute_kind:
- result = PyType_GenericNew(Attribute_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Attribute_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Attribute.value);
+ value = ast2obj_expr(state, o->v.Attribute.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(o->v.Attribute.attr);
+ value = ast2obj_identifier(state, o->v.Attribute.attr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_attr, value) == -1)
+ if (PyObject_SetAttr(result, state->attr, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(o->v.Attribute.ctx);
+ value = ast2obj_expr_context(state, o->v.Attribute.ctx);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+ if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Subscript_kind:
- result = PyType_GenericNew(Subscript_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Subscript_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Subscript.value);
+ value = ast2obj_expr(state, o->v.Subscript.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_slice(o->v.Subscript.slice);
+ value = ast2obj_expr(state, o->v.Subscript.slice);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_slice, value) == -1)
+ if (PyObject_SetAttr(result, state->slice, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(o->v.Subscript.ctx);
+ value = ast2obj_expr_context(state, o->v.Subscript.ctx);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+ if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Starred_kind:
- result = PyType_GenericNew(Starred_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Starred_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.Starred.value);
+ value = ast2obj_expr(state, o->v.Starred.value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(o->v.Starred.ctx);
+ value = ast2obj_expr_context(state, o->v.Starred.ctx);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+ if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Name_kind:
- result = PyType_GenericNew(Name_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Name_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_identifier(o->v.Name.id);
+ value = ast2obj_identifier(state, o->v.Name.id);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_id, value) == -1)
+ if (PyObject_SetAttr(result, state->id, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(o->v.Name.ctx);
+ value = ast2obj_expr_context(state, o->v.Name.ctx);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+ if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
Py_DECREF(value);
break;
case List_kind:
- result = PyType_GenericNew(List_type, NULL, NULL);
+ tp = (PyTypeObject *)state->List_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.List.elts, ast2obj_expr);
+ value = ast2obj_list(state, o->v.List.elts, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
+ if (PyObject_SetAttr(result, state->elts, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(o->v.List.ctx);
+ value = ast2obj_expr_context(state, o->v.List.ctx);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+ if (PyObject_SetAttr(result, state->ctx, value) == -1)
goto failed;
Py_DECREF(value);
break;
case Tuple_kind:
- result = PyType_GenericNew(Tuple_type, NULL, NULL);
+ tp = (PyTypeObject *)state->Tuple_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
+ value = ast2obj_list(state, o->v.Tuple.elts, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
+ if (PyObject_SetAttr(result, state->elts, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr_context(o->v.Tuple.ctx);
+ value = ast2obj_expr_context(state, o->v.Tuple.ctx);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
+ if (PyObject_SetAttr(result, state->ctx, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ break;
+ case Slice_kind:
+ tp = (PyTypeObject *)state->Slice_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
+ if (!result) goto failed;
+ value = ast2obj_expr(state, o->v.Slice.lower);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->lower, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ value = ast2obj_expr(state, o->v.Slice.upper);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->upper, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ value = ast2obj_expr(state, o->v.Slice.step);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->step, value) == -1)
goto failed;
Py_DECREF(value);
break;
}
- value = ast2obj_int(o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
return result;
@@ -3671,240 +4409,162 @@
return NULL;
}
-PyObject* ast2obj_expr_context(expr_context_ty o)
+PyObject* ast2obj_expr_context(astmodulestate *state, expr_context_ty o)
{
switch(o) {
case Load:
- Py_INCREF(Load_singleton);
- return Load_singleton;
+ Py_INCREF(state->Load_singleton);
+ return state->Load_singleton;
case Store:
- Py_INCREF(Store_singleton);
- return Store_singleton;
+ Py_INCREF(state->Store_singleton);
+ return state->Store_singleton;
case Del:
- Py_INCREF(Del_singleton);
- return Del_singleton;
- case AugLoad:
- Py_INCREF(AugLoad_singleton);
- return AugLoad_singleton;
- case AugStore:
- Py_INCREF(AugStore_singleton);
- return AugStore_singleton;
- case Param:
- Py_INCREF(Param_singleton);
- return Param_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown expr_context found");
- return NULL;
+ Py_INCREF(state->Del_singleton);
+ return state->Del_singleton;
}
+ Py_UNREACHABLE();
}
-PyObject*
-ast2obj_slice(void* _o)
-{
- slice_ty o = (slice_ty)_o;
- PyObject *result = NULL, *value = NULL;
- if (!o) {
- Py_RETURN_NONE;
- }
-
- switch (o->kind) {
- case Slice_kind:
- result = PyType_GenericNew(Slice_type, NULL, NULL);
- if (!result) goto failed;
- value = ast2obj_expr(o->v.Slice.lower);
- if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_lower, value) == -1)
- goto failed;
- Py_DECREF(value);
- value = ast2obj_expr(o->v.Slice.upper);
- if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_upper, value) == -1)
- goto failed;
- Py_DECREF(value);
- value = ast2obj_expr(o->v.Slice.step);
- if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_step, value) == -1)
- goto failed;
- Py_DECREF(value);
- break;
- case ExtSlice_kind:
- result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
- if (!result) goto failed;
- value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
- if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_dims, value) == -1)
- goto failed;
- Py_DECREF(value);
- break;
- case Index_kind:
- result = PyType_GenericNew(Index_type, NULL, NULL);
- if (!result) goto failed;
- value = ast2obj_expr(o->v.Index.value);
- if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
- goto failed;
- Py_DECREF(value);
- break;
- }
- return result;
-failed:
- Py_XDECREF(value);
- Py_XDECREF(result);
- return NULL;
-}
-
-PyObject* ast2obj_boolop(boolop_ty o)
+PyObject* ast2obj_boolop(astmodulestate *state, boolop_ty o)
{
switch(o) {
case And:
- Py_INCREF(And_singleton);
- return And_singleton;
+ Py_INCREF(state->And_singleton);
+ return state->And_singleton;
case Or:
- Py_INCREF(Or_singleton);
- return Or_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown boolop found");
- return NULL;
+ Py_INCREF(state->Or_singleton);
+ return state->Or_singleton;
}
+ Py_UNREACHABLE();
}
-PyObject* ast2obj_operator(operator_ty o)
+PyObject* ast2obj_operator(astmodulestate *state, operator_ty o)
{
switch(o) {
case Add:
- Py_INCREF(Add_singleton);
- return Add_singleton;
+ Py_INCREF(state->Add_singleton);
+ return state->Add_singleton;
case Sub:
- Py_INCREF(Sub_singleton);
- return Sub_singleton;
+ Py_INCREF(state->Sub_singleton);
+ return state->Sub_singleton;
case Mult:
- Py_INCREF(Mult_singleton);
- return Mult_singleton;
+ Py_INCREF(state->Mult_singleton);
+ return state->Mult_singleton;
case MatMult:
- Py_INCREF(MatMult_singleton);
- return MatMult_singleton;
+ Py_INCREF(state->MatMult_singleton);
+ return state->MatMult_singleton;
case Div:
- Py_INCREF(Div_singleton);
- return Div_singleton;
+ Py_INCREF(state->Div_singleton);
+ return state->Div_singleton;
case Mod:
- Py_INCREF(Mod_singleton);
- return Mod_singleton;
+ Py_INCREF(state->Mod_singleton);
+ return state->Mod_singleton;
case Pow:
- Py_INCREF(Pow_singleton);
- return Pow_singleton;
+ Py_INCREF(state->Pow_singleton);
+ return state->Pow_singleton;
case LShift:
- Py_INCREF(LShift_singleton);
- return LShift_singleton;
+ Py_INCREF(state->LShift_singleton);
+ return state->LShift_singleton;
case RShift:
- Py_INCREF(RShift_singleton);
- return RShift_singleton;
+ Py_INCREF(state->RShift_singleton);
+ return state->RShift_singleton;
case BitOr:
- Py_INCREF(BitOr_singleton);
- return BitOr_singleton;
+ Py_INCREF(state->BitOr_singleton);
+ return state->BitOr_singleton;
case BitXor:
- Py_INCREF(BitXor_singleton);
- return BitXor_singleton;
+ Py_INCREF(state->BitXor_singleton);
+ return state->BitXor_singleton;
case BitAnd:
- Py_INCREF(BitAnd_singleton);
- return BitAnd_singleton;
+ Py_INCREF(state->BitAnd_singleton);
+ return state->BitAnd_singleton;
case FloorDiv:
- Py_INCREF(FloorDiv_singleton);
- return FloorDiv_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown operator found");
- return NULL;
+ Py_INCREF(state->FloorDiv_singleton);
+ return state->FloorDiv_singleton;
}
+ Py_UNREACHABLE();
}
-PyObject* ast2obj_unaryop(unaryop_ty o)
+PyObject* ast2obj_unaryop(astmodulestate *state, unaryop_ty o)
{
switch(o) {
case Invert:
- Py_INCREF(Invert_singleton);
- return Invert_singleton;
+ Py_INCREF(state->Invert_singleton);
+ return state->Invert_singleton;
case Not:
- Py_INCREF(Not_singleton);
- return Not_singleton;
+ Py_INCREF(state->Not_singleton);
+ return state->Not_singleton;
case UAdd:
- Py_INCREF(UAdd_singleton);
- return UAdd_singleton;
+ Py_INCREF(state->UAdd_singleton);
+ return state->UAdd_singleton;
case USub:
- Py_INCREF(USub_singleton);
- return USub_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown unaryop found");
- return NULL;
+ Py_INCREF(state->USub_singleton);
+ return state->USub_singleton;
}
+ Py_UNREACHABLE();
}
-PyObject* ast2obj_cmpop(cmpop_ty o)
+PyObject* ast2obj_cmpop(astmodulestate *state, cmpop_ty o)
{
switch(o) {
case Eq:
- Py_INCREF(Eq_singleton);
- return Eq_singleton;
+ Py_INCREF(state->Eq_singleton);
+ return state->Eq_singleton;
case NotEq:
- Py_INCREF(NotEq_singleton);
- return NotEq_singleton;
+ Py_INCREF(state->NotEq_singleton);
+ return state->NotEq_singleton;
case Lt:
- Py_INCREF(Lt_singleton);
- return Lt_singleton;
+ Py_INCREF(state->Lt_singleton);
+ return state->Lt_singleton;
case LtE:
- Py_INCREF(LtE_singleton);
- return LtE_singleton;
+ Py_INCREF(state->LtE_singleton);
+ return state->LtE_singleton;
case Gt:
- Py_INCREF(Gt_singleton);
- return Gt_singleton;
+ Py_INCREF(state->Gt_singleton);
+ return state->Gt_singleton;
case GtE:
- Py_INCREF(GtE_singleton);
- return GtE_singleton;
+ Py_INCREF(state->GtE_singleton);
+ return state->GtE_singleton;
case Is:
- Py_INCREF(Is_singleton);
- return Is_singleton;
+ Py_INCREF(state->Is_singleton);
+ return state->Is_singleton;
case IsNot:
- Py_INCREF(IsNot_singleton);
- return IsNot_singleton;
+ Py_INCREF(state->IsNot_singleton);
+ return state->IsNot_singleton;
case In:
- Py_INCREF(In_singleton);
- return In_singleton;
+ Py_INCREF(state->In_singleton);
+ return state->In_singleton;
case NotIn:
- Py_INCREF(NotIn_singleton);
- return NotIn_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown cmpop found");
- return NULL;
+ Py_INCREF(state->NotIn_singleton);
+ return state->NotIn_singleton;
}
+ Py_UNREACHABLE();
}
PyObject*
-ast2obj_comprehension(void* _o)
+ast2obj_comprehension(astmodulestate *state, void* _o)
{
comprehension_ty o = (comprehension_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
- result = PyType_GenericNew(comprehension_type, NULL, NULL);
+ tp = (PyTypeObject *)state->comprehension_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_expr(o->target);
+ value = ast2obj_expr(state, o->target);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
+ if (PyObject_SetAttr(result, state->target, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->iter);
+ value = ast2obj_expr(state, o->iter);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
+ if (PyObject_SetAttr(result, state->iter, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->ifs, ast2obj_expr);
+ value = ast2obj_list(state, o->ifs, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_ifs, value) == -1)
+ if (PyObject_SetAttr(result, state->ifs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->is_async);
+ value = ast2obj_int(state, o->is_async);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_is_async, value) == -1)
+ if (PyObject_SetAttr(result, state->is_async, value) == -1)
goto failed;
Py_DECREF(value);
return result;
@@ -3915,53 +4575,54 @@
}
PyObject*
-ast2obj_excepthandler(void* _o)
+ast2obj_excepthandler(astmodulestate *state, void* _o)
{
excepthandler_ty o = (excepthandler_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
switch (o->kind) {
case ExceptHandler_kind:
- result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
+ tp = (PyTypeObject *)state->ExceptHandler_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_expr(o->v.ExceptHandler.type);
+ value = ast2obj_expr(state, o->v.ExceptHandler.type);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type, value) == -1)
+ if (PyObject_SetAttr(result, state->type, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(o->v.ExceptHandler.name);
+ value = ast2obj_identifier(state, o->v.ExceptHandler.name);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+ if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
+ value = ast2obj_list(state, o->v.ExceptHandler.body, ast2obj_stmt);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
+ if (PyObject_SetAttr(result, state->body, value) == -1)
goto failed;
Py_DECREF(value);
break;
}
- value = ast2obj_int(o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
return result;
@@ -3972,49 +4633,50 @@
}
PyObject*
-ast2obj_arguments(void* _o)
+ast2obj_arguments(astmodulestate *state, void* _o)
{
arguments_ty o = (arguments_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
- result = PyType_GenericNew(arguments_type, NULL, NULL);
+ tp = (PyTypeObject *)state->arguments_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_list(o->posonlyargs, ast2obj_arg);
+ value = ast2obj_list(state, o->posonlyargs, ast2obj_arg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_posonlyargs, value) == -1)
+ if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->args, ast2obj_arg);
+ value = ast2obj_list(state, o->args, ast2obj_arg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
+ if (PyObject_SetAttr(result, state->args, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arg(o->vararg);
+ value = ast2obj_arg(state, o->vararg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1)
+ if (PyObject_SetAttr(result, state->vararg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->kwonlyargs, ast2obj_arg);
+ value = ast2obj_list(state, o->kwonlyargs, ast2obj_arg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1)
+ if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->kw_defaults, ast2obj_expr);
+ value = ast2obj_list(state, o->kw_defaults, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1)
+ if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_arg(o->kwarg);
+ value = ast2obj_arg(state, o->kwarg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1)
+ if (PyObject_SetAttr(result, state->kwarg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_list(o->defaults, ast2obj_expr);
+ value = ast2obj_list(state, o->defaults, ast2obj_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1)
+ if (PyObject_SetAttr(result, state->defaults, value) == -1)
goto failed;
Py_DECREF(value);
return result;
@@ -4025,49 +4687,50 @@
}
PyObject*
-ast2obj_arg(void* _o)
+ast2obj_arg(astmodulestate *state, void* _o)
{
arg_ty o = (arg_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
- result = PyType_GenericNew(arg_type, NULL, NULL);
+ tp = (PyTypeObject *)state->arg_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_identifier(o->arg);
+ value = ast2obj_identifier(state, o->arg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
+ if (PyObject_SetAttr(result, state->arg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->annotation);
+ value = ast2obj_expr(state, o->annotation);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
+ if (PyObject_SetAttr(result, state->annotation, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->type_comment);
+ value = ast2obj_string(state, o->type_comment);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_type_comment, value) == -1)
+ if (PyObject_SetAttr(result, state->type_comment, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->lineno);
+ value = ast2obj_int(state, o->lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->col_offset);
+ value = ast2obj_int(state, o->col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->col_offset, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_lineno);
+ value = ast2obj_int(state, o->end_lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_lineno, value) < 0)
+ if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
goto failed;
Py_DECREF(value);
- value = ast2obj_int(o->end_col_offset);
+ value = ast2obj_int(state, o->end_col_offset);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_end_col_offset, value) < 0)
+ if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
return result;
@@ -4078,24 +4741,45 @@
}
PyObject*
-ast2obj_keyword(void* _o)
+ast2obj_keyword(astmodulestate *state, void* _o)
{
keyword_ty o = (keyword_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
- result = PyType_GenericNew(keyword_type, NULL, NULL);
+ tp = (PyTypeObject *)state->keyword_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_identifier(o->arg);
+ value = ast2obj_identifier(state, o->arg);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
+ if (PyObject_SetAttr(result, state->arg, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->value);
+ value = ast2obj_expr(state, o->value);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
+ if (PyObject_SetAttr(result, state->value, value) == -1)
+ goto failed;
+ Py_DECREF(value);
+ value = ast2obj_int(state, o->lineno);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->lineno, value) < 0)
+ goto failed;
+ Py_DECREF(value);
+ value = ast2obj_int(state, o->col_offset);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->col_offset, value) < 0)
+ goto failed;
+ Py_DECREF(value);
+ value = ast2obj_int(state, o->end_lineno);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
+ goto failed;
+ Py_DECREF(value);
+ value = ast2obj_int(state, o->end_col_offset);
+ if (!value) goto failed;
+ if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
goto failed;
Py_DECREF(value);
return result;
@@ -4106,24 +4790,25 @@
}
PyObject*
-ast2obj_alias(void* _o)
+ast2obj_alias(astmodulestate *state, void* _o)
{
alias_ty o = (alias_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
- result = PyType_GenericNew(alias_type, NULL, NULL);
+ tp = (PyTypeObject *)state->alias_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_identifier(o->name);
+ value = ast2obj_identifier(state, o->name);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
+ if (PyObject_SetAttr(result, state->name, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_identifier(o->asname);
+ value = ast2obj_identifier(state, o->asname);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_asname, value) == -1)
+ if (PyObject_SetAttr(result, state->asname, value) == -1)
goto failed;
Py_DECREF(value);
return result;
@@ -4134,24 +4819,25 @@
}
PyObject*
-ast2obj_withitem(void* _o)
+ast2obj_withitem(astmodulestate *state, void* _o)
{
withitem_ty o = (withitem_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
- result = PyType_GenericNew(withitem_type, NULL, NULL);
+ tp = (PyTypeObject *)state->withitem_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) return NULL;
- value = ast2obj_expr(o->context_expr);
+ value = ast2obj_expr(state, o->context_expr);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_context_expr, value) == -1)
+ if (PyObject_SetAttr(result, state->context_expr, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_expr(o->optional_vars);
+ value = ast2obj_expr(state, o->optional_vars);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_optional_vars, value) == -1)
+ if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
goto failed;
Py_DECREF(value);
return result;
@@ -4162,26 +4848,27 @@
}
PyObject*
-ast2obj_type_ignore(void* _o)
+ast2obj_type_ignore(astmodulestate *state, void* _o)
{
type_ignore_ty o = (type_ignore_ty)_o;
PyObject *result = NULL, *value = NULL;
+ PyTypeObject *tp;
if (!o) {
Py_RETURN_NONE;
}
-
switch (o->kind) {
case TypeIgnore_kind:
- result = PyType_GenericNew(TypeIgnore_type, NULL, NULL);
+ tp = (PyTypeObject *)state->TypeIgnore_type;
+ result = PyType_GenericNew(tp, NULL, NULL);
if (!result) goto failed;
- value = ast2obj_int(o->v.TypeIgnore.lineno);
+ value = ast2obj_int(state, o->v.TypeIgnore.lineno);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_lineno, value) == -1)
+ if (PyObject_SetAttr(result, state->lineno, value) == -1)
goto failed;
Py_DECREF(value);
- value = ast2obj_string(o->v.TypeIgnore.tag);
+ value = ast2obj_string(state, o->v.TypeIgnore.tag);
if (!value) goto failed;
- if (_PyObject_SetAttrId(result, &PyId_tag, value) == -1)
+ if (PyObject_SetAttr(result, state->tag, value) == -1)
goto failed;
Py_DECREF(value);
break;
@@ -4195,17 +4882,19 @@
int
-obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
+obj2ast_mod(astmodulestate *state, PyObject* obj, mod_ty* out, PyArena* arena)
{
int isinstance;
PyObject *tmp = NULL;
+ PyObject *tp;
if (obj == Py_None) {
*out = NULL;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Module_type);
+ tp = state->Module_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -4213,7 +4902,7 @@
asdl_seq* body;
asdl_seq* type_ignores;
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4225,7 +4914,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4233,7 +4922,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
@@ -4243,7 +4935,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_ignores, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_ignores, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4255,7 +4947,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Module field \"type_ignores\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Module field \"type_ignores\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4263,7 +4955,10 @@
if (type_ignores == NULL) goto failed;
for (i = 0; i < len; i++) {
type_ignore_ty val;
- res = obj2ast_type_ignore(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_type_ignore(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Module field \"type_ignores\" changed size during iteration");
@@ -4277,14 +4972,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Interactive_type);
+ tp = state->Interactive_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* body;
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4296,7 +4992,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4304,7 +5000,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
@@ -4318,14 +5017,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Expression_type);
+ tp = state->Expression_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty body;
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4334,7 +5034,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &body, arena);
+ res = obj2ast_expr(state, tmp, &body, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -4342,7 +5042,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionType_type);
+ tp = state->FunctionType_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -4350,7 +5051,7 @@
asdl_seq* argtypes;
expr_ty returns;
- if (_PyObject_LookupAttrId(obj, &PyId_argtypes, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->argtypes, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4362,7 +5063,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "FunctionType field \"argtypes\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "FunctionType field \"argtypes\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4370,7 +5071,10 @@
if (argtypes == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "FunctionType field \"argtypes\" changed size during iteration");
@@ -4380,7 +5084,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_returns, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4389,7 +5093,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &returns, arena);
+ res = obj2ast_expr(state, tmp, &returns, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -4397,47 +5101,6 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Suite_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- asdl_seq* body;
-
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
- return 1;
- }
- if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
- return 1;
- }
- else {
- int res;
- Py_ssize_t len;
- Py_ssize_t i;
- if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
- goto failed;
- }
- len = PyList_GET_SIZE(tmp);
- body = _Py_asdl_seq_new(len, arena);
- if (body == NULL) goto failed;
- for (i = 0; i < len; i++) {
- stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
- if (res != 0) goto failed;
- if (len != PyList_GET_SIZE(tmp)) {
- PyErr_SetString(PyExc_RuntimeError, "Suite field \"body\" changed size during iteration");
- goto failed;
- }
- asdl_seq_SET(body, i, val);
- }
- Py_CLEAR(tmp);
- }
- *out = Suite(body, arena);
- if (*out == NULL) goto failed;
- return 0;
- }
PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
failed:
@@ -4446,11 +5109,12 @@
}
int
-obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
+obj2ast_stmt(astmodulestate *state, PyObject* obj, stmt_ty* out, PyArena* arena)
{
int isinstance;
PyObject *tmp = NULL;
+ PyObject *tp;
int lineno;
int col_offset;
int end_lineno;
@@ -4460,7 +5124,7 @@
*out = NULL;
return 0;
}
- if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4469,11 +5133,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &lineno, arena);
+ res = obj2ast_int(state, tmp, &lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4482,11 +5146,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &col_offset, arena);
+ res = obj2ast_int(state, tmp, &col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4495,11 +5159,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_lineno, arena);
+ res = obj2ast_int(state, tmp, &end_lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4508,11 +5172,12 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_col_offset, arena);
+ res = obj2ast_int(state, tmp, &end_col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionDef_type);
+ tp = state->FunctionDef_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -4524,7 +5189,7 @@
expr_ty returns;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4533,11 +5198,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &name, arena);
+ res = obj2ast_identifier(state, tmp, &name, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4546,11 +5211,11 @@
}
else {
int res;
- res = obj2ast_arguments(tmp, &args, arena);
+ res = obj2ast_arguments(state, tmp, &args, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4562,7 +5227,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4570,7 +5235,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
@@ -4580,7 +5248,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_decorator_list, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4592,7 +5260,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4600,7 +5268,10 @@
if (decorator_list == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
@@ -4610,7 +5281,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_returns, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4619,11 +5290,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &returns, arena);
+ res = obj2ast_expr(state, tmp, &returns, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4632,7 +5303,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -4642,7 +5313,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFunctionDef_type);
+ tp = state->AsyncFunctionDef_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -4654,7 +5326,7 @@
expr_ty returns;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4663,11 +5335,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &name, arena);
+ res = obj2ast_identifier(state, tmp, &name, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4676,11 +5348,11 @@
}
else {
int res;
- res = obj2ast_arguments(tmp, &args, arena);
+ res = obj2ast_arguments(state, tmp, &args, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4692,7 +5364,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4700,7 +5372,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
@@ -4710,7 +5385,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_decorator_list, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4722,7 +5397,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4730,7 +5405,10 @@
if (decorator_list == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
@@ -4740,7 +5418,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_returns, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->returns, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4749,11 +5427,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &returns, arena);
+ res = obj2ast_expr(state, tmp, &returns, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4762,7 +5440,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -4772,7 +5450,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
+ tp = state->ClassDef_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -4783,7 +5462,7 @@
asdl_seq* body;
asdl_seq* decorator_list;
- if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4792,11 +5471,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &name, arena);
+ res = obj2ast_identifier(state, tmp, &name, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_bases, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->bases, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4808,7 +5487,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4816,7 +5495,10 @@
if (bases == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
@@ -4826,7 +5508,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_keywords, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4838,7 +5520,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4846,7 +5528,10 @@
if (keywords == NULL) goto failed;
for (i = 0; i < len; i++) {
keyword_ty val;
- res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_keyword(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
@@ -4856,7 +5541,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4868,7 +5553,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4876,7 +5561,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
@@ -4886,7 +5574,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_decorator_list, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->decorator_list, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4898,7 +5586,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4906,7 +5594,10 @@
if (decorator_list == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
@@ -4921,14 +5612,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Return_type);
+ tp = state->Return_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -4937,7 +5629,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -4946,14 +5638,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Delete_type);
+ tp = state->Delete_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* targets;
- if (_PyObject_LookupAttrId(obj, &PyId_targets, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -4965,7 +5658,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -4973,7 +5666,10 @@
if (targets == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
@@ -4988,7 +5684,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Assign_type);
+ tp = state->Assign_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -4997,7 +5694,7 @@
expr_ty value;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_targets, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->targets, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5009,7 +5706,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5017,7 +5714,10 @@
if (targets == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
@@ -5027,7 +5727,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5036,11 +5736,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5049,7 +5749,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5058,7 +5758,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)AugAssign_type);
+ tp = state->AugAssign_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5067,7 +5768,7 @@
operator_ty op;
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5076,11 +5777,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &target, arena);
+ res = obj2ast_expr(state, tmp, &target, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5089,11 +5790,11 @@
}
else {
int res;
- res = obj2ast_operator(tmp, &op, arena);
+ res = obj2ast_operator(state, tmp, &op, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5102,7 +5803,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5111,7 +5812,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)AnnAssign_type);
+ tp = state->AnnAssign_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5121,7 +5823,7 @@
expr_ty value;
int simple;
- if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5130,11 +5832,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &target, arena);
+ res = obj2ast_expr(state, tmp, &target, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_annotation, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5143,11 +5845,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &annotation, arena);
+ res = obj2ast_expr(state, tmp, &annotation, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5156,11 +5858,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_simple, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->simple, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5169,7 +5871,7 @@
}
else {
int res;
- res = obj2ast_int(tmp, &simple, arena);
+ res = obj2ast_int(state, tmp, &simple, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5178,7 +5880,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)For_type);
+ tp = state->For_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5189,7 +5892,7 @@
asdl_seq* orelse;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5198,11 +5901,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &target, arena);
+ res = obj2ast_expr(state, tmp, &target, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_iter, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5211,11 +5914,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &iter, arena);
+ res = obj2ast_expr(state, tmp, &iter, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5227,7 +5930,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5235,7 +5938,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
@@ -5245,7 +5951,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5257,7 +5963,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5265,7 +5971,10 @@
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
@@ -5275,7 +5984,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5284,7 +5993,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5293,7 +6002,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFor_type);
+ tp = state->AsyncFor_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5304,7 +6014,7 @@
asdl_seq* orelse;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5313,11 +6023,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &target, arena);
+ res = obj2ast_expr(state, tmp, &target, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_iter, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5326,11 +6036,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &iter, arena);
+ res = obj2ast_expr(state, tmp, &iter, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5342,7 +6052,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5350,7 +6060,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
@@ -5360,7 +6073,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5372,7 +6085,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5380,7 +6093,10 @@
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
@@ -5390,7 +6106,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5399,7 +6115,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5408,7 +6124,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
+ tp = state->While_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5417,7 +6134,7 @@
asdl_seq* body;
asdl_seq* orelse;
- if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5426,11 +6143,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &test, arena);
+ res = obj2ast_expr(state, tmp, &test, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5442,7 +6159,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5450,7 +6167,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
@@ -5460,7 +6180,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5472,7 +6192,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5480,7 +6200,10 @@
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
@@ -5495,7 +6218,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)If_type);
+ tp = state->If_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5504,7 +6228,7 @@
asdl_seq* body;
asdl_seq* orelse;
- if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5513,11 +6237,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &test, arena);
+ res = obj2ast_expr(state, tmp, &test, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5529,7 +6253,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5537,7 +6261,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
@@ -5547,7 +6274,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5559,7 +6286,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5567,7 +6294,10 @@
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
@@ -5582,7 +6312,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)With_type);
+ tp = state->With_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5591,7 +6322,7 @@
asdl_seq* body;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_items, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5603,7 +6334,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5611,7 +6342,10 @@
if (items == NULL) goto failed;
for (i = 0; i < len; i++) {
withitem_ty val;
- res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_withitem(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
@@ -5621,7 +6355,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5633,7 +6367,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5641,7 +6375,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
@@ -5651,7 +6388,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5660,7 +6397,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5669,7 +6406,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncWith_type);
+ tp = state->AsyncWith_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5678,7 +6416,7 @@
asdl_seq* body;
string type_comment;
- if (_PyObject_LookupAttrId(obj, &PyId_items, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->items, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5690,7 +6428,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5698,7 +6436,10 @@
if (items == NULL) goto failed;
for (i = 0; i < len; i++) {
withitem_ty val;
- res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_withitem(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
@@ -5708,7 +6449,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5720,7 +6461,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5728,7 +6469,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
@@ -5738,7 +6482,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5747,7 +6491,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5756,7 +6500,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
+ tp = state->Raise_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5764,7 +6509,7 @@
expr_ty exc;
expr_ty cause;
- if (_PyObject_LookupAttrId(obj, &PyId_exc, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->exc, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5773,11 +6518,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &exc, arena);
+ res = obj2ast_expr(state, tmp, &exc, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_cause, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->cause, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5786,7 +6531,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &cause, arena);
+ res = obj2ast_expr(state, tmp, &cause, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5795,7 +6540,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Try_type);
+ tp = state->Try_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5805,7 +6551,7 @@
asdl_seq* orelse;
asdl_seq* finalbody;
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5817,7 +6563,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5825,7 +6571,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
@@ -5835,7 +6584,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_handlers, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->handlers, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5847,7 +6596,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5855,7 +6604,10 @@
if (handlers == NULL) goto failed;
for (i = 0; i < len; i++) {
excepthandler_ty val;
- res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_excepthandler(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
@@ -5865,7 +6617,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5877,7 +6629,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5885,7 +6637,10 @@
if (orelse == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
@@ -5895,7 +6650,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_finalbody, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->finalbody, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5907,7 +6662,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5915,7 +6670,10 @@
if (finalbody == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
@@ -5930,7 +6688,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Assert_type);
+ tp = state->Assert_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -5938,7 +6697,7 @@
expr_ty test;
expr_ty msg;
- if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5947,11 +6706,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &test, arena);
+ res = obj2ast_expr(state, tmp, &test, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_msg, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->msg, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -5960,7 +6719,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &msg, arena);
+ res = obj2ast_expr(state, tmp, &msg, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -5969,14 +6728,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Import_type);
+ tp = state->Import_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* names;
- if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -5988,7 +6748,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -5996,7 +6756,10 @@
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
alias_ty val;
- res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_alias(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
@@ -6011,7 +6774,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)ImportFrom_type);
+ tp = state->ImportFrom_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6020,7 +6784,7 @@
asdl_seq* names;
int level;
- if (_PyObject_LookupAttrId(obj, &PyId_module, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->module, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -6029,11 +6793,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &module, arena);
+ res = obj2ast_identifier(state, tmp, &module, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6045,7 +6809,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6053,7 +6817,10 @@
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
alias_ty val;
- res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_alias(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
@@ -6063,7 +6830,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_level, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->level, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -6072,7 +6839,7 @@
}
else {
int res;
- res = obj2ast_int(tmp, &level, arena);
+ res = obj2ast_int(state, tmp, &level, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6081,14 +6848,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Global_type);
+ tp = state->Global_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* names;
- if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6100,7 +6868,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6108,7 +6876,10 @@
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
identifier val;
- res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_identifier(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
@@ -6123,14 +6894,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Nonlocal_type);
+ tp = state->Nonlocal_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* names;
- if (_PyObject_LookupAttrId(obj, &PyId_names, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->names, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6142,7 +6914,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6150,7 +6922,10 @@
if (names == NULL) goto failed;
for (i = 0; i < len; i++) {
identifier val;
- res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_identifier(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
@@ -6165,14 +6940,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Expr_type);
+ tp = state->Expr_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6181,7 +6957,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6190,7 +6966,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Pass_type);
+ tp = state->Pass_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6200,7 +6977,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Break_type);
+ tp = state->Break_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6210,7 +6988,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Continue_type);
+ tp = state->Continue_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6228,11 +7007,12 @@
}
int
-obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
+obj2ast_expr(astmodulestate *state, PyObject* obj, expr_ty* out, PyArena* arena)
{
int isinstance;
PyObject *tmp = NULL;
+ PyObject *tp;
int lineno;
int col_offset;
int end_lineno;
@@ -6242,7 +7022,7 @@
*out = NULL;
return 0;
}
- if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6251,11 +7031,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &lineno, arena);
+ res = obj2ast_int(state, tmp, &lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6264,11 +7044,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &col_offset, arena);
+ res = obj2ast_int(state, tmp, &col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -6277,11 +7057,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_lineno, arena);
+ res = obj2ast_int(state, tmp, &end_lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -6290,11 +7070,12 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_col_offset, arena);
+ res = obj2ast_int(state, tmp, &end_col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)BoolOp_type);
+ tp = state->BoolOp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6302,7 +7083,7 @@
boolop_ty op;
asdl_seq* values;
- if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6311,11 +7092,11 @@
}
else {
int res;
- res = obj2ast_boolop(tmp, &op, arena);
+ res = obj2ast_boolop(state, tmp, &op, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_values, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6327,7 +7108,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6335,7 +7116,10 @@
if (values == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
@@ -6350,7 +7134,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)NamedExpr_type);
+ tp = state->NamedExpr_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6358,7 +7143,7 @@
expr_ty target;
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6367,11 +7152,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &target, arena);
+ res = obj2ast_expr(state, tmp, &target, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6380,7 +7165,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6389,7 +7174,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)BinOp_type);
+ tp = state->BinOp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6398,7 +7184,7 @@
operator_ty op;
expr_ty right;
- if (_PyObject_LookupAttrId(obj, &PyId_left, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6407,11 +7193,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &left, arena);
+ res = obj2ast_expr(state, tmp, &left, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6420,11 +7206,11 @@
}
else {
int res;
- res = obj2ast_operator(tmp, &op, arena);
+ res = obj2ast_operator(state, tmp, &op, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_right, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->right, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6433,7 +7219,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &right, arena);
+ res = obj2ast_expr(state, tmp, &right, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6442,7 +7228,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)UnaryOp_type);
+ tp = state->UnaryOp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6450,7 +7237,7 @@
unaryop_ty op;
expr_ty operand;
- if (_PyObject_LookupAttrId(obj, &PyId_op, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->op, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6459,11 +7246,11 @@
}
else {
int res;
- res = obj2ast_unaryop(tmp, &op, arena);
+ res = obj2ast_unaryop(state, tmp, &op, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_operand, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->operand, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6472,7 +7259,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &operand, arena);
+ res = obj2ast_expr(state, tmp, &operand, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6481,7 +7268,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Lambda_type);
+ tp = state->Lambda_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6489,7 +7277,7 @@
arguments_ty args;
expr_ty body;
- if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6498,11 +7286,11 @@
}
else {
int res;
- res = obj2ast_arguments(tmp, &args, arena);
+ res = obj2ast_arguments(state, tmp, &args, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6511,7 +7299,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &body, arena);
+ res = obj2ast_expr(state, tmp, &body, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6520,7 +7308,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)IfExp_type);
+ tp = state->IfExp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6529,7 +7318,7 @@
expr_ty body;
expr_ty orelse;
- if (_PyObject_LookupAttrId(obj, &PyId_test, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->test, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6538,11 +7327,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &test, arena);
+ res = obj2ast_expr(state, tmp, &test, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6551,11 +7340,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &body, arena);
+ res = obj2ast_expr(state, tmp, &body, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_orelse, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->orelse, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6564,7 +7353,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &orelse, arena);
+ res = obj2ast_expr(state, tmp, &orelse, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6573,7 +7362,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Dict_type);
+ tp = state->Dict_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6581,7 +7371,7 @@
asdl_seq* keys;
asdl_seq* values;
- if (_PyObject_LookupAttrId(obj, &PyId_keys, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->keys, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6593,7 +7383,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6601,7 +7391,10 @@
if (keys == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
@@ -6611,7 +7404,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_values, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6623,7 +7416,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6631,7 +7424,10 @@
if (values == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
@@ -6646,14 +7442,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Set_type);
+ tp = state->Set_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* elts;
- if (_PyObject_LookupAttrId(obj, &PyId_elts, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6665,7 +7462,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6673,7 +7470,10 @@
if (elts == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
@@ -6687,7 +7487,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)ListComp_type);
+ tp = state->ListComp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6695,7 +7496,7 @@
expr_ty elt;
asdl_seq* generators;
- if (_PyObject_LookupAttrId(obj, &PyId_elt, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6704,11 +7505,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &elt, arena);
+ res = obj2ast_expr(state, tmp, &elt, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6720,7 +7521,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6728,7 +7529,10 @@
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_comprehension(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
@@ -6743,7 +7547,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)SetComp_type);
+ tp = state->SetComp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6751,7 +7556,7 @@
expr_ty elt;
asdl_seq* generators;
- if (_PyObject_LookupAttrId(obj, &PyId_elt, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6760,11 +7565,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &elt, arena);
+ res = obj2ast_expr(state, tmp, &elt, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6776,7 +7581,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6784,7 +7589,10 @@
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_comprehension(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
@@ -6799,7 +7607,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)DictComp_type);
+ tp = state->DictComp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6808,7 +7617,7 @@
expr_ty value;
asdl_seq* generators;
- if (_PyObject_LookupAttrId(obj, &PyId_key, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->key, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6817,11 +7626,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &key, arena);
+ res = obj2ast_expr(state, tmp, &key, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6830,11 +7639,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6846,7 +7655,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6854,7 +7663,10 @@
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_comprehension(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
@@ -6869,7 +7681,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type);
+ tp = state->GeneratorExp_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -6877,7 +7690,7 @@
expr_ty elt;
asdl_seq* generators;
- if (_PyObject_LookupAttrId(obj, &PyId_elt, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->elt, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6886,11 +7699,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &elt, arena);
+ res = obj2ast_expr(state, tmp, &elt, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_generators, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->generators, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6902,7 +7715,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -6910,7 +7723,10 @@
if (generators == NULL) goto failed;
for (i = 0; i < len; i++) {
comprehension_ty val;
- res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_comprehension(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
@@ -6925,14 +7741,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Await_type);
+ tp = state->Await_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6941,7 +7758,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6950,14 +7767,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
+ tp = state->Yield_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -6966,7 +7784,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -6975,14 +7793,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)YieldFrom_type);
+ tp = state->YieldFrom_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty value;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -6991,7 +7810,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7000,7 +7819,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Compare_type);
+ tp = state->Compare_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7009,7 +7829,7 @@
asdl_int_seq* ops;
asdl_seq* comparators;
- if (_PyObject_LookupAttrId(obj, &PyId_left, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->left, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7018,11 +7838,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &left, arena);
+ res = obj2ast_expr(state, tmp, &left, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ops, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ops, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7034,7 +7854,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7042,7 +7862,10 @@
if (ops == NULL) goto failed;
for (i = 0; i < len; i++) {
cmpop_ty val;
- res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_cmpop(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
@@ -7052,7 +7875,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_comparators, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->comparators, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7064,7 +7887,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7072,7 +7895,10 @@
if (comparators == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
@@ -7087,7 +7913,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Call_type);
+ tp = state->Call_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7096,7 +7923,7 @@
asdl_seq* args;
asdl_seq* keywords;
- if (_PyObject_LookupAttrId(obj, &PyId_func, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->func, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7105,11 +7932,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &func, arena);
+ res = obj2ast_expr(state, tmp, &func, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7121,7 +7948,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7129,7 +7956,10 @@
if (args == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
@@ -7139,7 +7969,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_keywords, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->keywords, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7151,7 +7981,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7159,7 +7989,10 @@
if (keywords == NULL) goto failed;
for (i = 0; i < len; i++) {
keyword_ty val;
- res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_keyword(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
@@ -7174,7 +8007,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)FormattedValue_type);
+ tp = state->FormattedValue_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7183,7 +8017,7 @@
int conversion;
expr_ty format_spec;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7192,11 +8026,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_conversion, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->conversion, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -7205,11 +8039,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &conversion, arena);
+ res = obj2ast_int(state, tmp, &conversion, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_format_spec, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->format_spec, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -7218,7 +8052,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &format_spec, arena);
+ res = obj2ast_expr(state, tmp, &format_spec, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7227,14 +8061,15 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)JoinedStr_type);
+ tp = state->JoinedStr_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
asdl_seq* values;
- if (_PyObject_LookupAttrId(obj, &PyId_values, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->values, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7246,7 +8081,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7254,7 +8089,10 @@
if (values == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
@@ -7269,7 +8107,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Constant_type);
+ tp = state->Constant_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7277,7 +8116,7 @@
constant value;
string kind;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7286,11 +8125,11 @@
}
else {
int res;
- res = obj2ast_constant(tmp, &value, arena);
+ res = obj2ast_constant(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_kind, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->kind, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -7299,7 +8138,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &kind, arena);
+ res = obj2ast_string(state, tmp, &kind, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7308,7 +8147,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type);
+ tp = state->Attribute_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7317,7 +8157,7 @@
identifier attr;
expr_context_ty ctx;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7326,11 +8166,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_attr, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->attr, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7339,11 +8179,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &attr, arena);
+ res = obj2ast_identifier(state, tmp, &attr, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7352,7 +8192,7 @@
}
else {
int res;
- res = obj2ast_expr_context(tmp, &ctx, arena);
+ res = obj2ast_expr_context(state, tmp, &ctx, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7361,16 +8201,17 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Subscript_type);
+ tp = state->Subscript_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
if (isinstance) {
expr_ty value;
- slice_ty slice;
+ expr_ty slice;
expr_context_ty ctx;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7379,11 +8220,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_slice, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->slice, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7392,11 +8233,11 @@
}
else {
int res;
- res = obj2ast_slice(tmp, &slice, arena);
+ res = obj2ast_expr(state, tmp, &slice, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7405,7 +8246,7 @@
}
else {
int res;
- res = obj2ast_expr_context(tmp, &ctx, arena);
+ res = obj2ast_expr_context(state, tmp, &ctx, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7414,7 +8255,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Starred_type);
+ tp = state->Starred_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7422,7 +8264,7 @@
expr_ty value;
expr_context_ty ctx;
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7431,11 +8273,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7444,7 +8286,7 @@
}
else {
int res;
- res = obj2ast_expr_context(tmp, &ctx, arena);
+ res = obj2ast_expr_context(state, tmp, &ctx, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7453,7 +8295,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Name_type);
+ tp = state->Name_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7461,7 +8304,7 @@
identifier id;
expr_context_ty ctx;
- if (_PyObject_LookupAttrId(obj, &PyId_id, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->id, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7470,11 +8313,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &id, arena);
+ res = obj2ast_identifier(state, tmp, &id, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7483,7 +8326,7 @@
}
else {
int res;
- res = obj2ast_expr_context(tmp, &ctx, arena);
+ res = obj2ast_expr_context(state, tmp, &ctx, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7492,7 +8335,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)List_type);
+ tp = state->List_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7500,7 +8344,7 @@
asdl_seq* elts;
expr_context_ty ctx;
- if (_PyObject_LookupAttrId(obj, &PyId_elts, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7512,7 +8356,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7520,7 +8364,10 @@
if (elts == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
@@ -7530,7 +8377,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7539,7 +8386,7 @@
}
else {
int res;
- res = obj2ast_expr_context(tmp, &ctx, arena);
+ res = obj2ast_expr_context(state, tmp, &ctx, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7548,7 +8395,8 @@
if (*out == NULL) goto failed;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)Tuple_type);
+ tp = state->Tuple_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -7556,7 +8404,7 @@
asdl_seq* elts;
expr_context_ty ctx;
- if (_PyObject_LookupAttrId(obj, &PyId_elts, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->elts, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7568,7 +8416,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -7576,7 +8424,10 @@
if (elts == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
@@ -7586,7 +8437,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ctx, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ctx, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -7595,7 +8446,7 @@
}
else {
int res;
- res = obj2ast_expr_context(tmp, &ctx, arena);
+ res = obj2ast_expr_context(state, tmp, &ctx, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -7604,6 +8455,60 @@
if (*out == NULL) goto failed;
return 0;
}
+ tp = state->Slice_type;
+ isinstance = PyObject_IsInstance(obj, tp);
+ if (isinstance == -1) {
+ return 1;
+ }
+ if (isinstance) {
+ expr_ty lower;
+ expr_ty upper;
+ expr_ty step;
+
+ if (_PyObject_LookupAttr(obj, state->lower, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL || tmp == Py_None) {
+ Py_CLEAR(tmp);
+ lower = NULL;
+ }
+ else {
+ int res;
+ res = obj2ast_expr(state, tmp, &lower, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->upper, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL || tmp == Py_None) {
+ Py_CLEAR(tmp);
+ upper = NULL;
+ }
+ else {
+ int res;
+ res = obj2ast_expr(state, tmp, &upper, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->step, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL || tmp == Py_None) {
+ Py_CLEAR(tmp);
+ step = NULL;
+ }
+ else {
+ int res;
+ res = obj2ast_expr(state, tmp, &step, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ *out = Slice(lower, upper, step, lineno, col_offset, end_lineno,
+ end_col_offset, arena);
+ if (*out == NULL) goto failed;
+ return 0;
+ }
PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
failed:
@@ -7612,11 +8517,12 @@
}
int
-obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
+obj2ast_expr_context(astmodulestate *state, PyObject* obj, expr_context_ty*
+ out, PyArena* arena)
{
int isinstance;
- isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
+ isinstance = PyObject_IsInstance(obj, state->Load_type);
if (isinstance == -1) {
return 1;
}
@@ -7624,7 +8530,7 @@
*out = Load;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Store_type);
+ isinstance = PyObject_IsInstance(obj, state->Store_type);
if (isinstance == -1) {
return 1;
}
@@ -7632,7 +8538,7 @@
*out = Store;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Del_type);
+ isinstance = PyObject_IsInstance(obj, state->Del_type);
if (isinstance == -1) {
return 1;
}
@@ -7640,176 +8546,18 @@
*out = Del;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)AugLoad_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- *out = AugLoad;
- return 0;
- }
- isinstance = PyObject_IsInstance(obj, (PyObject *)AugStore_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- *out = AugStore;
- return 0;
- }
- isinstance = PyObject_IsInstance(obj, (PyObject *)Param_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- *out = Param;
- return 0;
- }
PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
return 1;
}
int
-obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
+obj2ast_boolop(astmodulestate *state, PyObject* obj, boolop_ty* out, PyArena*
+ arena)
{
int isinstance;
- PyObject *tmp = NULL;
-
- if (obj == Py_None) {
- *out = NULL;
- return 0;
- }
- isinstance = PyObject_IsInstance(obj, (PyObject*)Slice_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- expr_ty lower;
- expr_ty upper;
- expr_ty step;
-
- if (_PyObject_LookupAttrId(obj, &PyId_lower, &tmp) < 0) {
- return 1;
- }
- if (tmp == NULL || tmp == Py_None) {
- Py_CLEAR(tmp);
- lower = NULL;
- }
- else {
- int res;
- res = obj2ast_expr(tmp, &lower, arena);
- if (res != 0) goto failed;
- Py_CLEAR(tmp);
- }
- if (_PyObject_LookupAttrId(obj, &PyId_upper, &tmp) < 0) {
- return 1;
- }
- if (tmp == NULL || tmp == Py_None) {
- Py_CLEAR(tmp);
- upper = NULL;
- }
- else {
- int res;
- res = obj2ast_expr(tmp, &upper, arena);
- if (res != 0) goto failed;
- Py_CLEAR(tmp);
- }
- if (_PyObject_LookupAttrId(obj, &PyId_step, &tmp) < 0) {
- return 1;
- }
- if (tmp == NULL || tmp == Py_None) {
- Py_CLEAR(tmp);
- step = NULL;
- }
- else {
- int res;
- res = obj2ast_expr(tmp, &step, arena);
- if (res != 0) goto failed;
- Py_CLEAR(tmp);
- }
- *out = Slice(lower, upper, step, arena);
- if (*out == NULL) goto failed;
- return 0;
- }
- isinstance = PyObject_IsInstance(obj, (PyObject*)ExtSlice_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- asdl_seq* dims;
-
- if (_PyObject_LookupAttrId(obj, &PyId_dims, &tmp) < 0) {
- return 1;
- }
- if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
- return 1;
- }
- else {
- int res;
- Py_ssize_t len;
- Py_ssize_t i;
- if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
- goto failed;
- }
- len = PyList_GET_SIZE(tmp);
- dims = _Py_asdl_seq_new(len, arena);
- if (dims == NULL) goto failed;
- for (i = 0; i < len; i++) {
- slice_ty val;
- res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &val, arena);
- if (res != 0) goto failed;
- if (len != PyList_GET_SIZE(tmp)) {
- PyErr_SetString(PyExc_RuntimeError, "ExtSlice field \"dims\" changed size during iteration");
- goto failed;
- }
- asdl_seq_SET(dims, i, val);
- }
- Py_CLEAR(tmp);
- }
- *out = ExtSlice(dims, arena);
- if (*out == NULL) goto failed;
- return 0;
- }
- isinstance = PyObject_IsInstance(obj, (PyObject*)Index_type);
- if (isinstance == -1) {
- return 1;
- }
- if (isinstance) {
- expr_ty value;
-
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
- return 1;
- }
- if (tmp == NULL) {
- PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
- return 1;
- }
- else {
- int res;
- res = obj2ast_expr(tmp, &value, arena);
- if (res != 0) goto failed;
- Py_CLEAR(tmp);
- }
- *out = Index(value, arena);
- if (*out == NULL) goto failed;
- return 0;
- }
-
- PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %R", obj);
- failed:
- Py_XDECREF(tmp);
- return 1;
-}
-
-int
-obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
-{
- int isinstance;
-
- isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
+ isinstance = PyObject_IsInstance(obj, state->And_type);
if (isinstance == -1) {
return 1;
}
@@ -7817,7 +8565,7 @@
*out = And;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Or_type);
+ isinstance = PyObject_IsInstance(obj, state->Or_type);
if (isinstance == -1) {
return 1;
}
@@ -7831,11 +8579,12 @@
}
int
-obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
+obj2ast_operator(astmodulestate *state, PyObject* obj, operator_ty* out,
+ PyArena* arena)
{
int isinstance;
- isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
+ isinstance = PyObject_IsInstance(obj, state->Add_type);
if (isinstance == -1) {
return 1;
}
@@ -7843,7 +8592,7 @@
*out = Add;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Sub_type);
+ isinstance = PyObject_IsInstance(obj, state->Sub_type);
if (isinstance == -1) {
return 1;
}
@@ -7851,7 +8600,7 @@
*out = Sub;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Mult_type);
+ isinstance = PyObject_IsInstance(obj, state->Mult_type);
if (isinstance == -1) {
return 1;
}
@@ -7859,7 +8608,7 @@
*out = Mult;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)MatMult_type);
+ isinstance = PyObject_IsInstance(obj, state->MatMult_type);
if (isinstance == -1) {
return 1;
}
@@ -7867,7 +8616,7 @@
*out = MatMult;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
+ isinstance = PyObject_IsInstance(obj, state->Div_type);
if (isinstance == -1) {
return 1;
}
@@ -7875,7 +8624,7 @@
*out = Div;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Mod_type);
+ isinstance = PyObject_IsInstance(obj, state->Mod_type);
if (isinstance == -1) {
return 1;
}
@@ -7883,7 +8632,7 @@
*out = Mod;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Pow_type);
+ isinstance = PyObject_IsInstance(obj, state->Pow_type);
if (isinstance == -1) {
return 1;
}
@@ -7891,7 +8640,7 @@
*out = Pow;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)LShift_type);
+ isinstance = PyObject_IsInstance(obj, state->LShift_type);
if (isinstance == -1) {
return 1;
}
@@ -7899,7 +8648,7 @@
*out = LShift;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)RShift_type);
+ isinstance = PyObject_IsInstance(obj, state->RShift_type);
if (isinstance == -1) {
return 1;
}
@@ -7907,7 +8656,7 @@
*out = RShift;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)BitOr_type);
+ isinstance = PyObject_IsInstance(obj, state->BitOr_type);
if (isinstance == -1) {
return 1;
}
@@ -7915,7 +8664,7 @@
*out = BitOr;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)BitXor_type);
+ isinstance = PyObject_IsInstance(obj, state->BitXor_type);
if (isinstance == -1) {
return 1;
}
@@ -7923,7 +8672,7 @@
*out = BitXor;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)BitAnd_type);
+ isinstance = PyObject_IsInstance(obj, state->BitAnd_type);
if (isinstance == -1) {
return 1;
}
@@ -7931,7 +8680,7 @@
*out = BitAnd;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)FloorDiv_type);
+ isinstance = PyObject_IsInstance(obj, state->FloorDiv_type);
if (isinstance == -1) {
return 1;
}
@@ -7945,11 +8694,12 @@
}
int
-obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
+obj2ast_unaryop(astmodulestate *state, PyObject* obj, unaryop_ty* out, PyArena*
+ arena)
{
int isinstance;
- isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
+ isinstance = PyObject_IsInstance(obj, state->Invert_type);
if (isinstance == -1) {
return 1;
}
@@ -7957,7 +8707,7 @@
*out = Invert;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Not_type);
+ isinstance = PyObject_IsInstance(obj, state->Not_type);
if (isinstance == -1) {
return 1;
}
@@ -7965,7 +8715,7 @@
*out = Not;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)UAdd_type);
+ isinstance = PyObject_IsInstance(obj, state->UAdd_type);
if (isinstance == -1) {
return 1;
}
@@ -7973,7 +8723,7 @@
*out = UAdd;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)USub_type);
+ isinstance = PyObject_IsInstance(obj, state->USub_type);
if (isinstance == -1) {
return 1;
}
@@ -7987,11 +8737,12 @@
}
int
-obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
+obj2ast_cmpop(astmodulestate *state, PyObject* obj, cmpop_ty* out, PyArena*
+ arena)
{
int isinstance;
- isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
+ isinstance = PyObject_IsInstance(obj, state->Eq_type);
if (isinstance == -1) {
return 1;
}
@@ -7999,7 +8750,7 @@
*out = Eq;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)NotEq_type);
+ isinstance = PyObject_IsInstance(obj, state->NotEq_type);
if (isinstance == -1) {
return 1;
}
@@ -8007,7 +8758,7 @@
*out = NotEq;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Lt_type);
+ isinstance = PyObject_IsInstance(obj, state->Lt_type);
if (isinstance == -1) {
return 1;
}
@@ -8015,7 +8766,7 @@
*out = Lt;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)LtE_type);
+ isinstance = PyObject_IsInstance(obj, state->LtE_type);
if (isinstance == -1) {
return 1;
}
@@ -8023,7 +8774,7 @@
*out = LtE;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Gt_type);
+ isinstance = PyObject_IsInstance(obj, state->Gt_type);
if (isinstance == -1) {
return 1;
}
@@ -8031,7 +8782,7 @@
*out = Gt;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)GtE_type);
+ isinstance = PyObject_IsInstance(obj, state->GtE_type);
if (isinstance == -1) {
return 1;
}
@@ -8039,7 +8790,7 @@
*out = GtE;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)Is_type);
+ isinstance = PyObject_IsInstance(obj, state->Is_type);
if (isinstance == -1) {
return 1;
}
@@ -8047,7 +8798,7 @@
*out = Is;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)IsNot_type);
+ isinstance = PyObject_IsInstance(obj, state->IsNot_type);
if (isinstance == -1) {
return 1;
}
@@ -8055,7 +8806,7 @@
*out = IsNot;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)In_type);
+ isinstance = PyObject_IsInstance(obj, state->In_type);
if (isinstance == -1) {
return 1;
}
@@ -8063,7 +8814,7 @@
*out = In;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject *)NotIn_type);
+ isinstance = PyObject_IsInstance(obj, state->NotIn_type);
if (isinstance == -1) {
return 1;
}
@@ -8077,7 +8828,8 @@
}
int
-obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
+obj2ast_comprehension(astmodulestate *state, PyObject* obj, comprehension_ty*
+ out, PyArena* arena)
{
PyObject* tmp = NULL;
expr_ty target;
@@ -8085,7 +8837,7 @@
asdl_seq* ifs;
int is_async;
- if (_PyObject_LookupAttrId(obj, &PyId_target, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->target, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8094,11 +8846,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &target, arena);
+ res = obj2ast_expr(state, tmp, &target, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_iter, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->iter, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8107,11 +8859,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &iter, arena);
+ res = obj2ast_expr(state, tmp, &iter, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_ifs, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->ifs, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8123,7 +8875,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8131,7 +8883,10 @@
if (ifs == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
@@ -8141,7 +8896,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_is_async, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->is_async, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8150,7 +8905,7 @@
}
else {
int res;
- res = obj2ast_int(tmp, &is_async, arena);
+ res = obj2ast_int(state, tmp, &is_async, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -8162,11 +8917,13 @@
}
int
-obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
+obj2ast_excepthandler(astmodulestate *state, PyObject* obj, excepthandler_ty*
+ out, PyArena* arena)
{
int isinstance;
PyObject *tmp = NULL;
+ PyObject *tp;
int lineno;
int col_offset;
int end_lineno;
@@ -8176,7 +8933,7 @@
*out = NULL;
return 0;
}
- if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8185,11 +8942,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &lineno, arena);
+ res = obj2ast_int(state, tmp, &lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8198,11 +8955,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &col_offset, arena);
+ res = obj2ast_int(state, tmp, &col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8211,11 +8968,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_lineno, arena);
+ res = obj2ast_int(state, tmp, &end_lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8224,11 +8981,12 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_col_offset, arena);
+ res = obj2ast_int(state, tmp, &end_col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type);
+ tp = state->ExceptHandler_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -8237,7 +8995,7 @@
identifier name;
asdl_seq* body;
- if (_PyObject_LookupAttrId(obj, &PyId_type, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8246,11 +9004,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &type, arena);
+ res = obj2ast_expr(state, tmp, &type, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8259,11 +9017,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &name, arena);
+ res = obj2ast_identifier(state, tmp, &name, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_body, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->body, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8275,7 +9033,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8283,7 +9041,10 @@
if (body == NULL) goto failed;
for (i = 0; i < len; i++) {
stmt_ty val;
- res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_stmt(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
@@ -8306,7 +9067,8 @@
}
int
-obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
+obj2ast_arguments(astmodulestate *state, PyObject* obj, arguments_ty* out,
+ PyArena* arena)
{
PyObject* tmp = NULL;
asdl_seq* posonlyargs;
@@ -8317,7 +9079,7 @@
arg_ty kwarg;
asdl_seq* defaults;
- if (_PyObject_LookupAttrId(obj, &PyId_posonlyargs, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->posonlyargs, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8329,7 +9091,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "arguments field \"posonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "arguments field \"posonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8337,7 +9099,10 @@
if (posonlyargs == NULL) goto failed;
for (i = 0; i < len; i++) {
arg_ty val;
- res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_arg(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "arguments field \"posonlyargs\" changed size during iteration");
@@ -8347,7 +9112,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_args, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->args, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8359,7 +9124,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8367,7 +9132,10 @@
if (args == NULL) goto failed;
for (i = 0; i < len; i++) {
arg_ty val;
- res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_arg(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
@@ -8377,7 +9145,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_vararg, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->vararg, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8386,11 +9154,11 @@
}
else {
int res;
- res = obj2ast_arg(tmp, &vararg, arena);
+ res = obj2ast_arg(state, tmp, &vararg, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_kwonlyargs, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->kwonlyargs, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8402,7 +9170,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8410,7 +9178,10 @@
if (kwonlyargs == NULL) goto failed;
for (i = 0; i < len; i++) {
arg_ty val;
- res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_arg(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
@@ -8420,7 +9191,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_kw_defaults, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->kw_defaults, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8432,7 +9203,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8440,7 +9211,10 @@
if (kw_defaults == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
@@ -8450,7 +9224,7 @@
}
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_kwarg, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->kwarg, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8459,11 +9233,11 @@
}
else {
int res;
- res = obj2ast_arg(tmp, &kwarg, arena);
+ res = obj2ast_arg(state, tmp, &kwarg, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_defaults, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->defaults, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8475,7 +9249,7 @@
Py_ssize_t len;
Py_ssize_t i;
if (!PyList_Check(tmp)) {
- PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", _PyType_Name(Py_TYPE(tmp)));
goto failed;
}
len = PyList_GET_SIZE(tmp);
@@ -8483,7 +9257,10 @@
if (defaults == NULL) goto failed;
for (i = 0; i < len; i++) {
expr_ty val;
- res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &val, arena);
+ PyObject *tmp2 = PyList_GET_ITEM(tmp, i);
+ Py_INCREF(tmp2);
+ res = obj2ast_expr(state, tmp2, &val, arena);
+ Py_DECREF(tmp2);
if (res != 0) goto failed;
if (len != PyList_GET_SIZE(tmp)) {
PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
@@ -8502,7 +9279,7 @@
}
int
-obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena)
+obj2ast_arg(astmodulestate *state, PyObject* obj, arg_ty* out, PyArena* arena)
{
PyObject* tmp = NULL;
identifier arg;
@@ -8513,7 +9290,7 @@
int end_lineno;
int end_col_offset;
- if (_PyObject_LookupAttrId(obj, &PyId_arg, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8522,11 +9299,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &arg, arena);
+ res = obj2ast_identifier(state, tmp, &arg, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_annotation, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->annotation, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8535,11 +9312,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &annotation, arena);
+ res = obj2ast_expr(state, tmp, &annotation, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_type_comment, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->type_comment, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8548,11 +9325,11 @@
}
else {
int res;
- res = obj2ast_string(tmp, &type_comment, arena);
+ res = obj2ast_string(state, tmp, &type_comment, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8561,11 +9338,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &lineno, arena);
+ res = obj2ast_int(state, tmp, &lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8574,11 +9351,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &col_offset, arena);
+ res = obj2ast_int(state, tmp, &col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8587,11 +9364,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_lineno, arena);
+ res = obj2ast_int(state, tmp, &end_lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_end_col_offset, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8600,7 +9377,7 @@
}
else {
int res;
- res = obj2ast_int(tmp, &end_col_offset, arena);
+ res = obj2ast_int(state, tmp, &end_col_offset, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -8613,13 +9390,18 @@
}
int
-obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
+obj2ast_keyword(astmodulestate *state, PyObject* obj, keyword_ty* out, PyArena*
+ arena)
{
PyObject* tmp = NULL;
identifier arg;
expr_ty value;
+ int lineno;
+ int col_offset;
+ int end_lineno;
+ int end_col_offset;
- if (_PyObject_LookupAttrId(obj, &PyId_arg, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->arg, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8628,11 +9410,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &arg, arena);
+ res = obj2ast_identifier(state, tmp, &arg, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_value, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->value, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8641,11 +9423,64 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &value, arena);
+ res = obj2ast_expr(state, tmp, &value, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- *out = keyword(arg, value, arena);
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from keyword");
+ return 1;
+ }
+ else {
+ int res;
+ res = obj2ast_int(state, tmp, &lineno, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->col_offset, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL) {
+ PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from keyword");
+ return 1;
+ }
+ else {
+ int res;
+ res = obj2ast_int(state, tmp, &col_offset, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->end_lineno, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL || tmp == Py_None) {
+ Py_CLEAR(tmp);
+ end_lineno = 0;
+ }
+ else {
+ int res;
+ res = obj2ast_int(state, tmp, &end_lineno, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ if (_PyObject_LookupAttr(obj, state->end_col_offset, &tmp) < 0) {
+ return 1;
+ }
+ if (tmp == NULL || tmp == Py_None) {
+ Py_CLEAR(tmp);
+ end_col_offset = 0;
+ }
+ else {
+ int res;
+ res = obj2ast_int(state, tmp, &end_col_offset, arena);
+ if (res != 0) goto failed;
+ Py_CLEAR(tmp);
+ }
+ *out = keyword(arg, value, lineno, col_offset, end_lineno, end_col_offset,
+ arena);
return 0;
failed:
Py_XDECREF(tmp);
@@ -8653,13 +9488,14 @@
}
int
-obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
+obj2ast_alias(astmodulestate *state, PyObject* obj, alias_ty* out, PyArena*
+ arena)
{
PyObject* tmp = NULL;
identifier name;
identifier asname;
- if (_PyObject_LookupAttrId(obj, &PyId_name, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->name, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8668,11 +9504,11 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &name, arena);
+ res = obj2ast_identifier(state, tmp, &name, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_asname, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->asname, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8681,7 +9517,7 @@
}
else {
int res;
- res = obj2ast_identifier(tmp, &asname, arena);
+ res = obj2ast_identifier(state, tmp, &asname, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -8693,13 +9529,14 @@
}
int
-obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena)
+obj2ast_withitem(astmodulestate *state, PyObject* obj, withitem_ty* out,
+ PyArena* arena)
{
PyObject* tmp = NULL;
expr_ty context_expr;
expr_ty optional_vars;
- if (_PyObject_LookupAttrId(obj, &PyId_context_expr, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->context_expr, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8708,11 +9545,11 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &context_expr, arena);
+ res = obj2ast_expr(state, tmp, &context_expr, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_optional_vars, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->optional_vars, &tmp) < 0) {
return 1;
}
if (tmp == NULL || tmp == Py_None) {
@@ -8721,7 +9558,7 @@
}
else {
int res;
- res = obj2ast_expr(tmp, &optional_vars, arena);
+ res = obj2ast_expr(state, tmp, &optional_vars, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -8733,17 +9570,20 @@
}
int
-obj2ast_type_ignore(PyObject* obj, type_ignore_ty* out, PyArena* arena)
+obj2ast_type_ignore(astmodulestate *state, PyObject* obj, type_ignore_ty* out,
+ PyArena* arena)
{
int isinstance;
PyObject *tmp = NULL;
+ PyObject *tp;
if (obj == Py_None) {
*out = NULL;
return 0;
}
- isinstance = PyObject_IsInstance(obj, (PyObject*)TypeIgnore_type);
+ tp = state->TypeIgnore_type;
+ isinstance = PyObject_IsInstance(obj, tp);
if (isinstance == -1) {
return 1;
}
@@ -8751,7 +9591,7 @@
int lineno;
string tag;
- if (_PyObject_LookupAttrId(obj, &PyId_lineno, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->lineno, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8760,11 +9600,11 @@
}
else {
int res;
- res = obj2ast_int(tmp, &lineno, arena);
+ res = obj2ast_int(state, tmp, &lineno, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
- if (_PyObject_LookupAttrId(obj, &PyId_tag, &tmp) < 0) {
+ if (_PyObject_LookupAttr(obj, state->tag, &tmp) < 0) {
return 1;
}
if (tmp == NULL) {
@@ -8773,7 +9613,7 @@
}
else {
int res;
- res = obj2ast_string(tmp, &tag, arena);
+ res = obj2ast_string(state, tmp, &tag, arena);
if (res != 0) goto failed;
Py_CLEAR(tmp);
}
@@ -8789,257 +9629,514 @@
}
-static struct PyModuleDef _astmodule = {
- PyModuleDef_HEAD_INIT, "_ast"
+static int
+astmodule_exec(PyObject *m)
+{
+ astmodulestate *state = get_ast_state(m);
+
+ if (!init_types(state)) {
+ return -1;
+ }
+ if (PyModule_AddObject(m, "AST", state->AST_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->AST_type);
+ if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
+ return -1;
+ }
+ if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
+ return -1;
+ }
+ if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
+ return -1;
+ }
+ if (PyModule_AddObject(m, "mod", state->mod_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->mod_type);
+ if (PyModule_AddObject(m, "Module", state->Module_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Module_type);
+ if (PyModule_AddObject(m, "Interactive", state->Interactive_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Interactive_type);
+ if (PyModule_AddObject(m, "Expression", state->Expression_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Expression_type);
+ if (PyModule_AddObject(m, "FunctionType", state->FunctionType_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->FunctionType_type);
+ if (PyModule_AddObject(m, "stmt", state->stmt_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->stmt_type);
+ if (PyModule_AddObject(m, "FunctionDef", state->FunctionDef_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->FunctionDef_type);
+ if (PyModule_AddObject(m, "AsyncFunctionDef", state->AsyncFunctionDef_type)
+ < 0) {
+ return -1;
+ }
+ Py_INCREF(state->AsyncFunctionDef_type);
+ if (PyModule_AddObject(m, "ClassDef", state->ClassDef_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->ClassDef_type);
+ if (PyModule_AddObject(m, "Return", state->Return_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Return_type);
+ if (PyModule_AddObject(m, "Delete", state->Delete_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Delete_type);
+ if (PyModule_AddObject(m, "Assign", state->Assign_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Assign_type);
+ if (PyModule_AddObject(m, "AugAssign", state->AugAssign_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->AugAssign_type);
+ if (PyModule_AddObject(m, "AnnAssign", state->AnnAssign_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->AnnAssign_type);
+ if (PyModule_AddObject(m, "For", state->For_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->For_type);
+ if (PyModule_AddObject(m, "AsyncFor", state->AsyncFor_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->AsyncFor_type);
+ if (PyModule_AddObject(m, "While", state->While_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->While_type);
+ if (PyModule_AddObject(m, "If", state->If_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->If_type);
+ if (PyModule_AddObject(m, "With", state->With_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->With_type);
+ if (PyModule_AddObject(m, "AsyncWith", state->AsyncWith_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->AsyncWith_type);
+ if (PyModule_AddObject(m, "Raise", state->Raise_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Raise_type);
+ if (PyModule_AddObject(m, "Try", state->Try_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Try_type);
+ if (PyModule_AddObject(m, "Assert", state->Assert_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Assert_type);
+ if (PyModule_AddObject(m, "Import", state->Import_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Import_type);
+ if (PyModule_AddObject(m, "ImportFrom", state->ImportFrom_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->ImportFrom_type);
+ if (PyModule_AddObject(m, "Global", state->Global_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Global_type);
+ if (PyModule_AddObject(m, "Nonlocal", state->Nonlocal_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Nonlocal_type);
+ if (PyModule_AddObject(m, "Expr", state->Expr_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Expr_type);
+ if (PyModule_AddObject(m, "Pass", state->Pass_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Pass_type);
+ if (PyModule_AddObject(m, "Break", state->Break_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Break_type);
+ if (PyModule_AddObject(m, "Continue", state->Continue_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Continue_type);
+ if (PyModule_AddObject(m, "expr", state->expr_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->expr_type);
+ if (PyModule_AddObject(m, "BoolOp", state->BoolOp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->BoolOp_type);
+ if (PyModule_AddObject(m, "NamedExpr", state->NamedExpr_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->NamedExpr_type);
+ if (PyModule_AddObject(m, "BinOp", state->BinOp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->BinOp_type);
+ if (PyModule_AddObject(m, "UnaryOp", state->UnaryOp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->UnaryOp_type);
+ if (PyModule_AddObject(m, "Lambda", state->Lambda_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Lambda_type);
+ if (PyModule_AddObject(m, "IfExp", state->IfExp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->IfExp_type);
+ if (PyModule_AddObject(m, "Dict", state->Dict_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Dict_type);
+ if (PyModule_AddObject(m, "Set", state->Set_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Set_type);
+ if (PyModule_AddObject(m, "ListComp", state->ListComp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->ListComp_type);
+ if (PyModule_AddObject(m, "SetComp", state->SetComp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->SetComp_type);
+ if (PyModule_AddObject(m, "DictComp", state->DictComp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->DictComp_type);
+ if (PyModule_AddObject(m, "GeneratorExp", state->GeneratorExp_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->GeneratorExp_type);
+ if (PyModule_AddObject(m, "Await", state->Await_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Await_type);
+ if (PyModule_AddObject(m, "Yield", state->Yield_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Yield_type);
+ if (PyModule_AddObject(m, "YieldFrom", state->YieldFrom_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->YieldFrom_type);
+ if (PyModule_AddObject(m, "Compare", state->Compare_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Compare_type);
+ if (PyModule_AddObject(m, "Call", state->Call_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Call_type);
+ if (PyModule_AddObject(m, "FormattedValue", state->FormattedValue_type) <
+ 0) {
+ return -1;
+ }
+ Py_INCREF(state->FormattedValue_type);
+ if (PyModule_AddObject(m, "JoinedStr", state->JoinedStr_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->JoinedStr_type);
+ if (PyModule_AddObject(m, "Constant", state->Constant_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Constant_type);
+ if (PyModule_AddObject(m, "Attribute", state->Attribute_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Attribute_type);
+ if (PyModule_AddObject(m, "Subscript", state->Subscript_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Subscript_type);
+ if (PyModule_AddObject(m, "Starred", state->Starred_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Starred_type);
+ if (PyModule_AddObject(m, "Name", state->Name_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Name_type);
+ if (PyModule_AddObject(m, "List", state->List_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->List_type);
+ if (PyModule_AddObject(m, "Tuple", state->Tuple_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Tuple_type);
+ if (PyModule_AddObject(m, "Slice", state->Slice_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Slice_type);
+ if (PyModule_AddObject(m, "expr_context", state->expr_context_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->expr_context_type);
+ if (PyModule_AddObject(m, "Load", state->Load_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Load_type);
+ if (PyModule_AddObject(m, "Store", state->Store_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Store_type);
+ if (PyModule_AddObject(m, "Del", state->Del_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Del_type);
+ if (PyModule_AddObject(m, "boolop", state->boolop_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->boolop_type);
+ if (PyModule_AddObject(m, "And", state->And_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->And_type);
+ if (PyModule_AddObject(m, "Or", state->Or_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Or_type);
+ if (PyModule_AddObject(m, "operator", state->operator_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->operator_type);
+ if (PyModule_AddObject(m, "Add", state->Add_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Add_type);
+ if (PyModule_AddObject(m, "Sub", state->Sub_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Sub_type);
+ if (PyModule_AddObject(m, "Mult", state->Mult_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Mult_type);
+ if (PyModule_AddObject(m, "MatMult", state->MatMult_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->MatMult_type);
+ if (PyModule_AddObject(m, "Div", state->Div_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Div_type);
+ if (PyModule_AddObject(m, "Mod", state->Mod_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Mod_type);
+ if (PyModule_AddObject(m, "Pow", state->Pow_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Pow_type);
+ if (PyModule_AddObject(m, "LShift", state->LShift_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->LShift_type);
+ if (PyModule_AddObject(m, "RShift", state->RShift_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->RShift_type);
+ if (PyModule_AddObject(m, "BitOr", state->BitOr_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->BitOr_type);
+ if (PyModule_AddObject(m, "BitXor", state->BitXor_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->BitXor_type);
+ if (PyModule_AddObject(m, "BitAnd", state->BitAnd_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->BitAnd_type);
+ if (PyModule_AddObject(m, "FloorDiv", state->FloorDiv_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->FloorDiv_type);
+ if (PyModule_AddObject(m, "unaryop", state->unaryop_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->unaryop_type);
+ if (PyModule_AddObject(m, "Invert", state->Invert_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Invert_type);
+ if (PyModule_AddObject(m, "Not", state->Not_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Not_type);
+ if (PyModule_AddObject(m, "UAdd", state->UAdd_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->UAdd_type);
+ if (PyModule_AddObject(m, "USub", state->USub_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->USub_type);
+ if (PyModule_AddObject(m, "cmpop", state->cmpop_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->cmpop_type);
+ if (PyModule_AddObject(m, "Eq", state->Eq_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Eq_type);
+ if (PyModule_AddObject(m, "NotEq", state->NotEq_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->NotEq_type);
+ if (PyModule_AddObject(m, "Lt", state->Lt_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Lt_type);
+ if (PyModule_AddObject(m, "LtE", state->LtE_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->LtE_type);
+ if (PyModule_AddObject(m, "Gt", state->Gt_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Gt_type);
+ if (PyModule_AddObject(m, "GtE", state->GtE_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->GtE_type);
+ if (PyModule_AddObject(m, "Is", state->Is_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->Is_type);
+ if (PyModule_AddObject(m, "IsNot", state->IsNot_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->IsNot_type);
+ if (PyModule_AddObject(m, "In", state->In_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->In_type);
+ if (PyModule_AddObject(m, "NotIn", state->NotIn_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->NotIn_type);
+ if (PyModule_AddObject(m, "comprehension", state->comprehension_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->comprehension_type);
+ if (PyModule_AddObject(m, "excepthandler", state->excepthandler_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->excepthandler_type);
+ if (PyModule_AddObject(m, "ExceptHandler", state->ExceptHandler_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->ExceptHandler_type);
+ if (PyModule_AddObject(m, "arguments", state->arguments_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->arguments_type);
+ if (PyModule_AddObject(m, "arg", state->arg_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->arg_type);
+ if (PyModule_AddObject(m, "keyword", state->keyword_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->keyword_type);
+ if (PyModule_AddObject(m, "alias", state->alias_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->alias_type);
+ if (PyModule_AddObject(m, "withitem", state->withitem_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->withitem_type);
+ if (PyModule_AddObject(m, "type_ignore", state->type_ignore_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->type_ignore_type);
+ if (PyModule_AddObject(m, "TypeIgnore", state->TypeIgnore_type) < 0) {
+ return -1;
+ }
+ Py_INCREF(state->TypeIgnore_type);
+ return 0;
+}
+
+static PyModuleDef_Slot astmodule_slots[] = {
+ {Py_mod_exec, astmodule_exec},
+ {0, NULL}
};
+
+static struct PyModuleDef _astmodule = {
+ PyModuleDef_HEAD_INIT,
+ .m_name = "_ast",
+ // The _ast module uses a global state (global_ast_state).
+ .m_size = 0,
+ .m_slots = astmodule_slots,
+};
+
PyMODINIT_FUNC
PyInit__ast(void)
{
- PyObject *m, *d;
- if (!init_types()) return NULL;
- m = PyModule_Create(&_astmodule);
- if (!m) return NULL;
- d = PyModule_GetDict(m);
- if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return NULL;
- if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0)
- return NULL;
- if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0)
- return NULL;
- if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type) <
- 0) return NULL;
- if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "FunctionType", (PyObject*)FunctionType_type) <
- 0) return NULL;
- if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type) <
- 0) return NULL;
- if (PyDict_SetItemString(d, "AsyncFunctionDef",
- (PyObject*)AsyncFunctionDef_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0) return
- 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;
- if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "AsyncWith", (PyObject*)AsyncWith_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Try", (PyObject*)Try_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Nonlocal", (PyObject*)Nonlocal_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "NamedExpr", (PyObject*)NamedExpr_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Set", (PyObject*)Set_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "SetComp", (PyObject*)SetComp_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "DictComp", (PyObject*)DictComp_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "GeneratorExp", (PyObject*)GeneratorExp_type) <
- 0) return NULL;
- if (PyDict_SetItemString(d, "Await", (PyObject*)Await_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "YieldFrom", (PyObject*)YieldFrom_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Call", (PyObject*)Call_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, "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)
- return NULL;
- if (PyDict_SetItemString(d, "Starred", (PyObject*)Starred_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "expr_context", (PyObject*)expr_context_type) <
- 0) return NULL;
- if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "MatMult", (PyObject*)MatMult_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "comprehension", (PyObject*)comprehension_type)
- < 0) return NULL;
- if (PyDict_SetItemString(d, "excepthandler", (PyObject*)excepthandler_type)
- < 0) return NULL;
- if (PyDict_SetItemString(d, "ExceptHandler", (PyObject*)ExceptHandler_type)
- < 0) return NULL;
- if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "arg", (PyObject*)arg_type) < 0) return NULL;
- if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return
- NULL;
- if (PyDict_SetItemString(d, "withitem", (PyObject*)withitem_type) < 0)
- return NULL;
- if (PyDict_SetItemString(d, "type_ignore", (PyObject*)type_ignore_type) <
- 0) return NULL;
- if (PyDict_SetItemString(d, "TypeIgnore", (PyObject*)TypeIgnore_type) < 0)
- return NULL;
- return m;
+ return PyModuleDef_Init(&_astmodule);
}
PyObject* PyAST_mod2obj(mod_ty t)
{
- if (!init_types())
+ astmodulestate *state = get_global_ast_state();
+ if (state == NULL) {
return NULL;
- return ast2obj_mod(t);
+ }
+ return ast2obj_mod(state, t);
}
/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
{
- PyObject *req_type[3];
- char *req_name[] = {"Module", "Expression", "Interactive"};
+ const char * const req_name[] = {"Module", "Expression", "Interactive"};
int isinstance;
if (PySys_Audit("compile", "OO", ast, Py_None) < 0) {
return NULL;
}
- req_type[0] = (PyObject*)Module_type;
- req_type[1] = (PyObject*)Expression_type;
- req_type[2] = (PyObject*)Interactive_type;
+ astmodulestate *state = get_global_ast_state();
+ PyObject *req_type[3];
+ req_type[0] = state->Module_type;
+ req_type[1] = state->Expression_type;
+ req_type[2] = state->Interactive_type;
assert(0 <= mode && mode <= 2);
- if (!init_types())
- return NULL;
-
isinstance = PyObject_IsInstance(ast, req_type[mode]);
if (isinstance == -1)
return NULL;
if (!isinstance) {
PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
- req_name[mode], Py_TYPE(ast)->tp_name);
+ req_name[mode], _PyType_Name(Py_TYPE(ast)));
return NULL;
}
mod_ty res = NULL;
- if (obj2ast_mod(ast, &res, arena) != 0)
+ if (obj2ast_mod(state, ast, &res, arena) != 0)
return NULL;
else
return res;
@@ -9047,9 +10144,11 @@
int PyAST_Check(PyObject* obj)
{
- if (!init_types())
+ astmodulestate *state = get_global_ast_state();
+ if (state == NULL) {
return -1;
- return PyObject_IsInstance(obj, (PyObject*)&AST_type);
+ }
+ return PyObject_IsInstance(obj, state->AST_type);
}
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 52a13df..91a78fe 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -1,6 +1,9 @@
#include "Python.h"
-#include "pycore_pystate.h"
-#include "frameobject.h"
+#include "pycore_initconfig.h"
+#include "pycore_interp.h" // PyInterpreterState.warnings
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h" // _PyThreadState_GET()
+#include "frameobject.h" // PyFrame_GetBack()
#include "clinic/_warnings.c.h"
#define MODULE_NAME "_warnings"
@@ -23,14 +26,17 @@
/* Forward declaration of the _warnings module definition. */
static struct PyModuleDef warningsmodule;
+_Py_IDENTIFIER(__name__);
+
/* Given a module object, get its per-module state. */
static WarningsState *
-_Warnings_GetState()
+warnings_get_state(void)
{
- PyThreadState *tstate = PyThreadState_GET();
+ PyThreadState *tstate = _PyThreadState_GET();
if (tstate == NULL) {
- PyErr_SetString(PyExc_RuntimeError,
- "_Warnings_GetState: could not identify current interpreter");
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "warnings_get_state: could not identify "
+ "current interpreter");
return NULL;
}
return &tstate->interp->warnings;
@@ -38,7 +44,7 @@
/* Clear the given warnings module state. */
static void
-_Warnings_ClearState(WarningsState *st)
+warnings_clear_state(WarningsState *st)
{
Py_CLEAR(st->filters);
Py_CLEAR(st->once_registry);
@@ -63,11 +69,14 @@
}
} else {
modname_obj = Py_None;
+ Py_INCREF(modname_obj);
}
/* This assumes the line number is zero for now. */
- return PyTuple_Pack(5, action_str, Py_None,
- category, modname_obj, _PyLong_Zero);
+ PyObject *filter = PyTuple_Pack(5, action_str, Py_None,
+ category, modname_obj, _PyLong_Zero);
+ Py_DECREF(modname_obj);
+ return filter;
}
#endif
@@ -108,7 +117,7 @@
/* Initialize the given warnings module state. */
static int
-_Warnings_InitState(WarningsState *st)
+warnings_init_state(WarningsState *st)
{
if (st->filters == NULL) {
st->filters = init_filters();
@@ -136,7 +145,7 @@
return 0;
error:
- _Warnings_ClearState(st);
+ warnings_clear_state(st);
return -1;
}
@@ -164,7 +173,7 @@
}
/* Otherwise assume a regex filter and call its match() method */
- result = _PyObject_CallMethodIdObjArgs(obj, &PyId_match, arg, NULL);
+ result = _PyObject_CallMethodIdOneArg(obj, &PyId_match, arg);
if (result == NULL)
return -1;
@@ -206,7 +215,7 @@
gone, then we can't even use PyImport_GetModule without triggering
an interpreter abort.
*/
- if (!_PyInterpreterState_GET_UNSAFE()->modules) {
+ if (!_PyInterpreterState_GET()->modules) {
return NULL;
}
warnings_module = PyImport_GetModule(warnings_str);
@@ -282,7 +291,7 @@
Py_ssize_t i;
PyObject *warnings_filters;
_Py_IDENTIFIER(filters);
- WarningsState *st = _Warnings_GetState();
+ WarningsState *st = warnings_get_state();
if (st == NULL) {
return NULL;
}
@@ -384,7 +393,7 @@
if (key == NULL)
return -1;
- WarningsState *st = _Warnings_GetState();
+ WarningsState *st = warnings_get_state();
if (st == NULL) {
return -1;
}
@@ -430,7 +439,7 @@
{
PyObject *module;
int kind;
- void *data;
+ const void *data;
Py_ssize_t len;
len = PyUnicode_GetLength(filename);
@@ -482,13 +491,13 @@
PyObject *f_stderr;
PyObject *name;
char lineno_str[128];
- _Py_IDENTIFIER(__name__);
PyOS_snprintf(lineno_str, sizeof(lineno_str), ":%d: ", lineno);
name = _PyObject_GetAttrId(category, &PyId___name__);
- if (name == NULL) /* XXX Can an object lack a '__name__' attribute? */
+ if (name == NULL) {
goto error;
+ }
f_stderr = _PySys_GetObjectId(&PyId_stderr);
if (f_stderr == NULL) {
@@ -514,7 +523,7 @@
/* Print " source_line\n" */
if (sourceline) {
int kind;
- void *data;
+ const void *data;
Py_ssize_t i, len;
Py_UCS4 ch;
PyObject *truncated;
@@ -590,7 +599,7 @@
if (msg == NULL)
goto error;
- res = PyObject_CallFunctionObjArgs(show_fn, msg, NULL);
+ res = PyObject_CallOneArg(show_fn, msg);
Py_DECREF(show_fn);
Py_DECREF(msg);
@@ -647,11 +656,11 @@
text = PyObject_Str(message);
if (text == NULL)
goto cleanup;
- category = (PyObject*)message->ob_type;
+ category = (PyObject*)Py_TYPE(message);
}
else {
text = message;
- message = PyObject_CallFunctionObjArgs(category, message, NULL);
+ message = PyObject_CallOneArg(category, message);
if (message == NULL)
goto cleanup;
}
@@ -703,7 +712,7 @@
if (_PyUnicode_EqualToASCIIString(action, "once")) {
if (registry == NULL || registry == Py_None) {
- WarningsState *st = _Warnings_GetState();
+ WarningsState *st = warnings_get_state();
if (st == NULL) {
goto cleanup;
}
@@ -756,7 +765,6 @@
{
static PyObject *importlib_string = NULL;
static PyObject *bootstrap_string = NULL;
- PyObject *filename;
int contains;
if (importlib_string == NULL) {
@@ -774,14 +782,21 @@
Py_INCREF(bootstrap_string);
}
- if (frame == NULL || frame->f_code == NULL ||
- frame->f_code->co_filename == NULL) {
+ if (frame == NULL) {
return 0;
}
- filename = frame->f_code->co_filename;
+
+ PyCodeObject *code = PyFrame_GetCode(frame);
+ PyObject *filename = code->co_filename;
+ Py_DECREF(code);
+
+ if (filename == NULL) {
+ return 0;
+ }
if (!PyUnicode_Check(filename)) {
return 0;
}
+
contains = PyUnicode_Contains(filename, importlib_string);
if (contains < 0) {
return 0;
@@ -803,7 +818,9 @@
next_external_frame(PyFrameObject *frame)
{
do {
- frame = frame->f_back;
+ PyFrameObject *back = PyFrame_GetBack(frame);
+ Py_DECREF(frame);
+ frame = back;
} while (frame != NULL && is_internal_frame(frame));
return frame;
@@ -816,16 +833,18 @@
PyObject **module, PyObject **registry)
{
_Py_IDENTIFIER(__warningregistry__);
- _Py_IDENTIFIER(__name__);
PyObject *globals;
/* Setup globals, filename and lineno. */
- PyFrameObject *f = _PyThreadState_GET()->frame;
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyFrameObject *f = PyThreadState_GetFrame(tstate);
// Stack level comparisons to Python code is off by one as there is no
// warnings-related stack level to avoid.
if (stack_level <= 0 || is_internal_frame(f)) {
while (--stack_level > 0 && f != NULL) {
- f = f->f_back;
+ PyFrameObject *back = PyFrame_GetBack(f);
+ Py_DECREF(f);
+ f = back;
}
}
else {
@@ -835,15 +854,18 @@
}
if (f == NULL) {
- globals = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ globals = _PyInterpreterState_GET()->sysdict;
*filename = PyUnicode_FromString("sys");
*lineno = 1;
}
else {
globals = f->f_globals;
- *filename = f->f_code->co_filename;
+ PyCodeObject *code = PyFrame_GetCode(f);
+ *filename = code->co_filename;
+ Py_DECREF(code);
Py_INCREF(*filename);
*lineno = PyFrame_GetLineNumber(f);
+ Py_DECREF(f);
}
*module = NULL;
@@ -855,7 +877,7 @@
if (*registry == NULL) {
int rc;
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
goto handle_error;
}
*registry = PyDict_New();
@@ -874,7 +896,7 @@
if (*module == Py_None || (*module != NULL && PyUnicode_Check(*module))) {
Py_INCREF(*module);
}
- else if (PyErr_Occurred()) {
+ else if (_PyErr_Occurred(tstate)) {
goto handle_error;
}
else {
@@ -903,7 +925,7 @@
return NULL;
if (rc == 1)
- category = (PyObject*)message->ob_type;
+ category = (PyObject*)Py_TYPE(message);
else if (category == NULL || category == Py_None)
category = PyExc_UserWarning;
@@ -966,7 +988,6 @@
{
_Py_IDENTIFIER(get_source);
_Py_IDENTIFIER(__loader__);
- _Py_IDENTIFIER(__name__);
PyObject *loader;
PyObject *module_name;
PyObject *get_source;
@@ -995,7 +1016,7 @@
return NULL;
}
/* Call get_source() to get the source code. */
- source = PyObject_CallFunctionObjArgs(get_source, module_name, NULL);
+ source = PyObject_CallOneArg(get_source, module_name);
Py_DECREF(get_source);
Py_DECREF(module_name);
if (!source) {
@@ -1064,7 +1085,7 @@
static PyObject *
warnings_filters_mutated(PyObject *self, PyObject *args)
{
- WarningsState *st = _Warnings_GetState();
+ WarningsState *st = warnings_get_state();
if (st == NULL) {
return NULL;
}
@@ -1126,6 +1147,23 @@
return res;
}
+static int
+_PyErr_WarnFormat(PyObject *source, PyObject *category, 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, category, stack_level, format, vargs);
+ va_end(vargs);
+ return res;
+}
+
int
PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level,
const char *format, ...)
@@ -1282,7 +1320,7 @@
int warned = 0;
PyObject *fn = get_warnings_attr(&PyId__warn_unawaited_coroutine, 1);
if (fn) {
- PyObject *res = PyObject_CallFunctionObjArgs(fn, coro, NULL);
+ PyObject *res = PyObject_CallOneArg(fn, coro);
Py_DECREF(fn);
if (res || PyErr_ExceptionMatches(PyExc_RuntimeWarning)) {
warned = 1;
@@ -1294,9 +1332,9 @@
PyErr_WriteUnraisable(coro);
}
if (!warned) {
- if (PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
- "coroutine '%.50S' was never awaited",
- ((PyCoroObject *)coro)->cr_qualname) < 0)
+ if (_PyErr_WarnFormat(coro, PyExc_RuntimeWarning, 1,
+ "coroutine '%S' was never awaited",
+ ((PyCoroObject *)coro)->cr_qualname) < 0)
{
PyErr_WriteUnraisable(coro);
}
@@ -1331,6 +1369,16 @@
};
+PyStatus
+_PyWarnings_InitState(PyThreadState *tstate)
+{
+ if (warnings_init_state(&tstate->interp->warnings) < 0) {
+ return _PyStatus_ERR("can't initialize warnings");
+ }
+ return _PyStatus_OK();
+}
+
+
PyMODINIT_FUNC
_PyWarnings_Init(void)
{
@@ -1341,11 +1389,11 @@
return NULL;
}
- WarningsState *st = _Warnings_GetState();
+ WarningsState *st = warnings_get_state();
if (st == NULL) {
goto error;
}
- if (_Warnings_InitState(st) < 0) {
+ if (warnings_init_state(st) < 0) {
goto error;
}
@@ -1368,7 +1416,7 @@
error:
if (st != NULL) {
- _Warnings_ClearState(st);
+ warnings_clear_state(st);
}
Py_DECREF(m);
return NULL;
@@ -1378,5 +1426,5 @@
void
_PyWarnings_Fini(PyInterpreterState *interp)
{
- _Warnings_ClearState(&interp->warnings);
+ warnings_clear_state(&interp->warnings);
}
diff --git a/Python/ast.c b/Python/ast.c
index 7c1d24d..c7ba4d9 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -59,31 +59,6 @@
}
static int
-validate_slice(slice_ty slice)
-{
- switch (slice->kind) {
- case Slice_kind:
- return (!slice->v.Slice.lower || validate_expr(slice->v.Slice.lower, Load)) &&
- (!slice->v.Slice.upper || validate_expr(slice->v.Slice.upper, Load)) &&
- (!slice->v.Slice.step || validate_expr(slice->v.Slice.step, Load));
- case ExtSlice_kind: {
- Py_ssize_t i;
- if (!validate_nonempty_seq(slice->v.ExtSlice.dims, "dims", "ExtSlice"))
- return 0;
- for (i = 0; i < asdl_seq_LEN(slice->v.ExtSlice.dims); i++)
- if (!validate_slice(asdl_seq_GET(slice->v.ExtSlice.dims, i)))
- return 0;
- return 1;
- }
- case Index_kind:
- return validate_expr(slice->v.Index.value, Load);
- default:
- PyErr_SetString(PyExc_SystemError, "unknown slice node");
- return 0;
- }
-}
-
-static int
validate_keywords(asdl_seq *keywords)
{
Py_ssize_t i;
@@ -115,12 +90,6 @@
return "Store";
case Del:
return "Del";
- case AugLoad:
- return "AugLoad";
- case AugStore:
- return "AugStore";
- case Param:
- return "Param";
default:
Py_UNREACHABLE();
}
@@ -197,6 +166,11 @@
return 1;
}
+ if (!PyErr_Occurred()) {
+ PyErr_Format(PyExc_TypeError,
+ "got an invalid type in Constant: %s",
+ _PyType_Name(Py_TYPE(value)));
+ }
return 0;
}
@@ -314,9 +288,6 @@
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;
@@ -331,10 +302,14 @@
case Attribute_kind:
return validate_expr(exp->v.Attribute.value, Load);
case Subscript_kind:
- return validate_slice(exp->v.Subscript.slice) &&
+ return validate_expr(exp->v.Subscript.slice, Load) &&
validate_expr(exp->v.Subscript.value, Load);
case Starred_kind:
return validate_expr(exp->v.Starred.value, ctx);
+ case Slice_kind:
+ return (!exp->v.Slice.lower || validate_expr(exp->v.Slice.lower, Load)) &&
+ (!exp->v.Slice.upper || validate_expr(exp->v.Slice.upper, Load)) &&
+ (!exp->v.Slice.step || validate_expr(exp->v.Slice.step, Load));
case List_kind:
return validate_exprs(exp->v.List.elts, ctx, 0);
case Tuple_kind:
@@ -567,9 +542,6 @@
case Expression_kind:
res = validate_expr(mod->v.Expression.body, Load);
break;
- case Suite_kind:
- PyErr_SetString(PyExc_ValueError, "Suite is not valid in the CPython compiler");
- break;
default:
PyErr_SetString(PyExc_SystemError, "impossible module node");
res = 0;
@@ -640,12 +612,11 @@
identifier; if so, normalize to NFKC. */
if (!PyUnicode_IS_ASCII(id)) {
PyObject *id2;
- _Py_IDENTIFIER(NFKC);
if (!c->c_normalize && !init_normalization(c)) {
Py_DECREF(id);
return NULL;
}
- PyObject *form = _PyUnicode_FromId(&PyId_NFKC);
+ PyObject *form = PyUnicode_InternFromString("NFKC");
if (form == NULL) {
Py_DECREF(id);
return NULL;
@@ -653,13 +624,14 @@
PyObject *args[2] = {form, id};
id2 = _PyObject_FastCall(c->c_normalize, args, 2);
Py_DECREF(id);
+ Py_DECREF(form);
if (!id2)
return NULL;
if (!PyUnicode_Check(id2)) {
PyErr_Format(PyExc_TypeError,
"unicodedata.normalize() must return a string, not "
"%.200s",
- Py_TYPE(id2)->tp_name);
+ _PyType_Name(Py_TYPE(id2)));
Py_DECREF(id2);
return NULL;
}
@@ -777,11 +749,8 @@
return l;
}
default: {
- char buf[128];
-
- sprintf(buf, "Non-statement found: %d %d",
- TYPE(n), NCH(n));
- Py_FatalError(buf);
+ _Py_FatalErrorFormat(__func__, "Non-statement found: %d %d",
+ TYPE(n), NCH(n));
}
}
Py_UNREACHABLE();
@@ -1148,14 +1117,7 @@
{
asdl_seq *s = NULL;
- /* The ast defines augmented store and load contexts, but the
- implementation here doesn't actually use them. The code may be
- a little more complex than necessary as a result. It also means
- that expressions in an augmented assignment have a Store context.
- Consider restructuring so that augmented assignment uses
- set_context(), too.
- */
- assert(ctx != AugStore && ctx != AugLoad);
+ /* Expressions in an augmented assignment have a Store context. */
switch (e->kind) {
case Attribute_kind:
@@ -1715,79 +1677,15 @@
}
static expr_ty
-ast_for_dotted_name(struct compiling *c, const node *n)
-{
- expr_ty e;
- identifier id;
- int lineno, col_offset;
- int i;
- node *ch;
-
- REQ(n, dotted_name);
-
- lineno = LINENO(n);
- col_offset = n->n_col_offset;
-
- ch = CHILD(n, 0);
- id = NEW_IDENTIFIER(ch);
- if (!id)
- return NULL;
- e = Name(id, Load, lineno, col_offset,
- ch->n_end_lineno, ch->n_end_col_offset, c->c_arena);
- if (!e)
- return NULL;
-
- for (i = 2; i < NCH(n); i+=2) {
- const node *child = CHILD(n, i);
- id = NEW_IDENTIFIER(child);
- if (!id)
- return NULL;
- e = Attribute(e, id, Load, lineno, col_offset,
- child->n_end_lineno, child->n_end_col_offset, c->c_arena);
- if (!e)
- return NULL;
- }
-
- return e;
-}
-
-static expr_ty
ast_for_decorator(struct compiling *c, const node *n)
{
- /* decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE */
- expr_ty d = NULL;
- expr_ty name_expr;
+ /* decorator: '@' namedexpr_test NEWLINE */
REQ(n, decorator);
REQ(CHILD(n, 0), AT);
- REQ(RCHILD(n, -1), NEWLINE);
+ REQ(CHILD(n, 2), NEWLINE);
- name_expr = ast_for_dotted_name(c, CHILD(n, 1));
- if (!name_expr)
- return NULL;
-
- if (NCH(n) == 3) { /* No arguments */
- d = name_expr;
- name_expr = NULL;
- }
- else if (NCH(n) == 5) { /* Call with no arguments */
- d = Call(name_expr, NULL, NULL,
- name_expr->lineno, name_expr->col_offset,
- CHILD(n, 3)->n_end_lineno, CHILD(n, 3)->n_end_col_offset,
- c->c_arena);
- if (!d)
- return NULL;
- name_expr = NULL;
- }
- else {
- d = ast_for_call(c, CHILD(n, 3), name_expr,
- CHILD(n, 1), CHILD(n, 2), CHILD(n, 4));
- if (!d)
- return NULL;
- name_expr = NULL;
- }
-
- return d;
+ return ast_for_expr(c, CHILD(n, 1));
}
static asdl_seq*
@@ -2561,7 +2459,7 @@
}
}
-static slice_ty
+static expr_ty
ast_for_slice(struct compiling *c, const node *n)
{
node *ch;
@@ -2575,13 +2473,7 @@
*/
ch = CHILD(n, 0);
if (NCH(n) == 1 && TYPE(ch) == test) {
- /* 'step' variable hold no significance in terms of being used over
- other vars */
- step = ast_for_expr(c, ch);
- if (!step)
- return NULL;
-
- return Index(step, c->c_arena);
+ return ast_for_expr(c, ch);
}
if (TYPE(ch) == test) {
@@ -2623,7 +2515,8 @@
}
}
- return Slice(lower, upper, step, c->c_arena);
+ return Slice(lower, upper, step, LINENO(n), n->n_col_offset,
+ n->n_end_lineno, n->n_end_col_offset, c->c_arena);
}
static expr_ty
@@ -2711,7 +2604,7 @@
REQ(CHILD(n, 2), RSQB);
n = CHILD(n, 1);
if (NCH(n) == 1) {
- slice_ty slc = ast_for_slice(c, CHILD(n, 0));
+ expr_ty slc = ast_for_slice(c, CHILD(n, 0));
if (!slc)
return NULL;
return Subscript(left_expr, slc, Load, LINENO(start), start->n_col_offset,
@@ -2719,47 +2612,27 @@
c->c_arena);
}
else {
- /* The grammar is ambiguous here. The ambiguity is resolved
- by treating the sequence as a tuple literal if there are
- no slice features.
- */
- Py_ssize_t j;
- slice_ty slc;
- expr_ty e;
- int simple = 1;
- asdl_seq *slices, *elts;
- slices = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
- if (!slices)
+ int j;
+ expr_ty slc, e;
+ asdl_seq *elts;
+ elts = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena);
+ if (!elts)
return NULL;
for (j = 0; j < NCH(n); j += 2) {
slc = ast_for_slice(c, CHILD(n, j));
if (!slc)
return NULL;
- if (slc->kind != Index_kind)
- simple = 0;
- asdl_seq_SET(slices, j / 2, slc);
- }
- if (!simple) {
- return Subscript(left_expr, ExtSlice(slices, c->c_arena),
- Load, LINENO(start), start->n_col_offset,
- n_copy->n_end_lineno, n_copy->n_end_col_offset, c->c_arena);
- }
- /* extract Index values and put them in a Tuple */
- elts = _Py_asdl_seq_new(asdl_seq_LEN(slices), c->c_arena);
- if (!elts)
- return NULL;
- for (j = 0; j < asdl_seq_LEN(slices); ++j) {
- slc = (slice_ty)asdl_seq_GET(slices, j);
- assert(slc->kind == Index_kind && slc->v.Index.value);
- asdl_seq_SET(elts, j, slc->v.Index.value);
+ asdl_seq_SET(elts, j / 2, slc);
}
e = Tuple(elts, Load, LINENO(n), n->n_col_offset,
- n->n_end_lineno, n->n_end_col_offset, c->c_arena);
+ n->n_end_lineno, n->n_end_col_offset,
+ c->c_arena);
if (!e)
return NULL;
- return Subscript(left_expr, Index(e, c->c_arena),
+ return Subscript(left_expr, e,
Load, LINENO(start), start->n_col_offset,
- n_copy->n_end_lineno, n_copy->n_end_col_offset, c->c_arena);
+ n_copy->n_end_lineno, n_copy->n_end_col_offset,
+ c->c_arena);
}
}
}
@@ -3163,7 +3036,8 @@
e = ast_for_expr(c, CHILD(ch, 1));
if (!e)
return NULL;
- kw = keyword(NULL, e, c->c_arena);
+ kw = keyword(NULL, e, chch->n_lineno, chch->n_col_offset,
+ e->end_lineno, e->end_col_offset, c->c_arena);
asdl_seq_SET(keywords, nkeywords++, kw);
ndoublestars++;
}
@@ -3197,8 +3071,7 @@
else {
/* a keyword argument */
keyword_ty kw;
- identifier key, tmp;
- int k;
+ identifier key;
// To remain LL(1), the grammar accepts any test (basically, any
// expression) in the keyword slot of a call site. So, we need
@@ -3242,18 +3115,12 @@
if (forbidden_name(c, key, chch, 1)) {
return NULL;
}
- for (k = 0; k < nkeywords; k++) {
- tmp = ((keyword_ty)asdl_seq_GET(keywords, k))->arg;
- if (tmp && !PyUnicode_Compare(tmp, key)) {
- ast_error(c, chch,
- "keyword argument repeated");
- return NULL;
- }
- }
e = ast_for_expr(c, CHILD(ch, 2));
if (!e)
return NULL;
- kw = keyword(key, e, c->c_arena);
+ kw = keyword(key, e, chch->n_lineno, chch->n_col_offset,
+ e->end_lineno, e->end_col_offset, c->c_arena);
+
if (!kw)
return NULL;
asdl_seq_SET(keywords, nkeywords++, kw);
@@ -3320,10 +3187,7 @@
expr1 = ast_for_testlist(c, ch);
if (!expr1)
return NULL;
- if(!set_context(c, expr1, Store, ch))
- return NULL;
- /* set_context checks that most expressions are not the left side.
- Augmented assignments can only have a name, a subscript, or an
+ /* Augmented assignments can only have a name, a subscript, or an
attribute on the left, though, so we have to explicitly check for
those. */
switch (expr1->kind) {
@@ -3332,10 +3196,16 @@
case Subscript_kind:
break;
default:
- ast_error(c, ch, "illegal expression for augmented assignment");
+ ast_error(c, ch, "'%s' is an illegal expression for augmented assignment",
+ get_expr_name(expr1));
return NULL;
}
+ /* set_context checks that most expressions are not the left side. */
+ if(!set_context(c, expr1, Store, ch)) {
+ return NULL;
+ }
+
ch = CHILD(n, 2);
if (TYPE(ch) == testlist)
expr2 = ast_for_testlist(c, ch);
@@ -3707,9 +3577,6 @@
"unexpected import name: %d", TYPE(n));
return NULL;
}
-
- PyErr_SetString(PyExc_SystemError, "unhandled import name condition");
- return NULL;
}
static stmt_ty
@@ -4747,7 +4614,7 @@
if (*s & 0x80) { /* XXX inefficient */
PyObject *w;
int kind;
- void *data;
+ const void *data;
Py_ssize_t len, i;
w = decode_utf8(c, &s, end);
if (w == NULL) {
@@ -4793,7 +4660,7 @@
size_t len)
{
const char *first_invalid_escape;
- PyObject *result = _PyBytes_DecodeEscape(s, len, NULL, 0, NULL,
+ PyObject *result = _PyBytes_DecodeEscape(s, len, NULL,
&first_invalid_escape);
if (result == NULL)
return NULL;
@@ -5289,7 +5156,7 @@
*str += 1;
/* If we're in = mode (detected by non-NULL expr_text), and have no format
- spec and no explict conversion, set the conversion to 'r'. */
+ spec and no explicit conversion, set the conversion to 'r'. */
if (*expr_text && format_spec == NULL && conversion == -1) {
conversion = 'r';
}
diff --git a/Python/ast_opt.c b/Python/ast_opt.c
index f2a2c25..ff786d6 100644
--- a/Python/ast_opt.c
+++ b/Python/ast_opt.c
@@ -19,6 +19,7 @@
return 0;
}
node->kind = Constant_kind;
+ node->v.Constant.kind = NULL;
node->v.Constant.value = val;
return 1;
}
@@ -35,7 +36,7 @@
}
static int
-fold_unaryop(expr_ty node, PyArena *arena, int optimize)
+fold_unaryop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{
expr_ty arg = node->v.UnaryOp.operand;
@@ -212,7 +213,7 @@
}
static int
-fold_binop(expr_ty node, PyArena *arena, int optimize)
+fold_binop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{
expr_ty lhs, rhs;
lhs = node->v.BinOp.left;
@@ -294,7 +295,7 @@
}
static int
-fold_tuple(expr_ty node, PyArena *arena, int optimize)
+fold_tuple(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{
PyObject *newval;
@@ -306,24 +307,20 @@
}
static int
-fold_subscr(expr_ty node, PyArena *arena, int optimize)
+fold_subscr(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{
PyObject *newval;
expr_ty arg, idx;
- slice_ty slice;
arg = node->v.Subscript.value;
- slice = node->v.Subscript.slice;
+ idx = node->v.Subscript.slice;
if (node->v.Subscript.ctx != Load ||
arg->kind != Constant_kind ||
- /* TODO: handle other types of slices */
- slice->kind != Index_kind ||
- slice->v.Index.value->kind != Constant_kind)
+ idx->kind != Constant_kind)
{
return 1;
}
- idx = slice->v.Index.value;
newval = PyObject_GetItem(arg->v.Constant.value, idx->v.Constant.value);
return make_const(node, newval, arena);
}
@@ -335,7 +332,7 @@
in "for" loop and comprehensions.
*/
static int
-fold_iter(expr_ty arg, PyArena *arena, int optimize)
+fold_iter(expr_ty arg, PyArena *arena, _PyASTOptimizeState *state)
{
PyObject *newval;
if (arg->kind == List_kind) {
@@ -368,7 +365,7 @@
}
static int
-fold_compare(expr_ty node, PyArena *arena, int optimize)
+fold_compare(expr_ty node, PyArena *arena, _PyASTOptimizeState *state)
{
asdl_int_seq *ops;
asdl_seq *args;
@@ -382,29 +379,28 @@
i = asdl_seq_LEN(ops) - 1;
int op = asdl_seq_GET(ops, i);
if (op == In || op == NotIn) {
- if (!fold_iter((expr_ty)asdl_seq_GET(args, i), arena, optimize)) {
+ if (!fold_iter((expr_ty)asdl_seq_GET(args, i), arena, state)) {
return 0;
}
}
return 1;
}
-static int astfold_mod(mod_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_stmt(stmt_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_expr(expr_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_keyword(keyword_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_slice(slice_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_arg(arg_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_withitem(withitem_ty node_, PyArena *ctx_, int optimize_);
-static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, int optimize_);
+static int astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
+static int astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state);
#define CALL(FUNC, TYPE, ARG) \
- if (!FUNC((ARG), ctx_, optimize_)) \
+ if (!FUNC((ARG), ctx_, state)) \
return 0;
#define CALL_OPT(FUNC, TYPE, ARG) \
- if ((ARG) != NULL && !FUNC((ARG), ctx_, optimize_)) \
+ if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
return 0;
#define CALL_SEQ(FUNC, TYPE, ARG) { \
@@ -412,7 +408,7 @@
asdl_seq *seq = (ARG); /* avoid variable capture */ \
for (i = 0; i < asdl_seq_LEN(seq); i++) { \
TYPE elt = (TYPE)asdl_seq_GET(seq, i); \
- if (elt != NULL && !FUNC(elt, ctx_, optimize_)) \
+ if (elt != NULL && !FUNC(elt, ctx_, state)) \
return 0; \
} \
}
@@ -422,13 +418,13 @@
asdl_int_seq *seq = (ARG); /* avoid variable capture */ \
for (i = 0; i < asdl_seq_LEN(seq); i++) { \
TYPE elt = (TYPE)asdl_seq_GET(seq, i); \
- if (!FUNC(elt, ctx_, optimize_)) \
+ if (!FUNC(elt, ctx_, state)) \
return 0; \
} \
}
static int
-astfold_body(asdl_seq *stmts, PyArena *ctx_, int optimize_)
+astfold_body(asdl_seq *stmts, PyArena *ctx_, _PyASTOptimizeState *state)
{
int docstring = _PyAST_GetDocString(stmts) != NULL;
CALL_SEQ(astfold_stmt, stmt_ty, stmts);
@@ -450,7 +446,7 @@
}
static int
-astfold_mod(mod_ty node_, PyArena *ctx_, int optimize_)
+astfold_mod(mod_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
switch (node_->kind) {
case Module_kind:
@@ -462,9 +458,6 @@
case Expression_kind:
CALL(astfold_expr, expr_ty, node_->v.Expression.body);
break;
- case Suite_kind:
- CALL_SEQ(astfold_stmt, stmt_ty, node_->v.Suite.body);
- break;
default:
break;
}
@@ -472,7 +465,7 @@
}
static int
-astfold_expr(expr_ty node_, PyArena *ctx_, int optimize_)
+astfold_expr(expr_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
switch (node_->kind) {
case BoolOp_kind:
@@ -551,12 +544,17 @@
break;
case Subscript_kind:
CALL(astfold_expr, expr_ty, node_->v.Subscript.value);
- CALL(astfold_slice, slice_ty, node_->v.Subscript.slice);
+ CALL(astfold_expr, expr_ty, node_->v.Subscript.slice);
CALL(fold_subscr, expr_ty, node_);
break;
case Starred_kind:
CALL(astfold_expr, expr_ty, node_->v.Starred.value);
break;
+ case Slice_kind:
+ CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.lower);
+ CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.upper);
+ CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.step);
+ break;
case List_kind:
CALL_SEQ(astfold_expr, expr_ty, node_->v.List.elts);
break;
@@ -565,8 +563,9 @@
CALL(fold_tuple, expr_ty, node_);
break;
case Name_kind:
- if (_PyUnicode_EqualToASCIIString(node_->v.Name.id, "__debug__")) {
- return make_const(node_, PyBool_FromLong(!optimize_), ctx_);
+ if (node_->v.Name.ctx == Load &&
+ _PyUnicode_EqualToASCIIString(node_->v.Name.id, "__debug__")) {
+ return make_const(node_, PyBool_FromLong(!state->optimize), ctx_);
}
break;
default:
@@ -576,35 +575,14 @@
}
static int
-astfold_slice(slice_ty node_, PyArena *ctx_, int optimize_)
-{
- switch (node_->kind) {
- case Slice_kind:
- CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.lower);
- CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.upper);
- CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.step);
- break;
- case ExtSlice_kind:
- CALL_SEQ(astfold_slice, slice_ty, node_->v.ExtSlice.dims);
- break;
- case Index_kind:
- CALL(astfold_expr, expr_ty, node_->v.Index.value);
- break;
- default:
- break;
- }
- return 1;
-}
-
-static int
-astfold_keyword(keyword_ty node_, PyArena *ctx_, int optimize_)
+astfold_keyword(keyword_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
CALL(astfold_expr, expr_ty, node_->value);
return 1;
}
static int
-astfold_comprehension(comprehension_ty node_, PyArena *ctx_, int optimize_)
+astfold_comprehension(comprehension_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
CALL(astfold_expr, expr_ty, node_->target);
CALL(astfold_expr, expr_ty, node_->iter);
@@ -615,7 +593,7 @@
}
static int
-astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_)
+astfold_arguments(arguments_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
CALL_SEQ(astfold_arg, arg_ty, node_->posonlyargs);
CALL_SEQ(astfold_arg, arg_ty, node_->args);
@@ -628,27 +606,33 @@
}
static int
-astfold_arg(arg_ty node_, PyArena *ctx_, int optimize_)
+astfold_arg(arg_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
- CALL_OPT(astfold_expr, expr_ty, node_->annotation);
+ if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+ CALL_OPT(astfold_expr, expr_ty, node_->annotation);
+ }
return 1;
}
static int
-astfold_stmt(stmt_ty node_, PyArena *ctx_, int optimize_)
+astfold_stmt(stmt_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
switch (node_->kind) {
case FunctionDef_kind:
CALL(astfold_arguments, arguments_ty, node_->v.FunctionDef.args);
CALL(astfold_body, asdl_seq, node_->v.FunctionDef.body);
CALL_SEQ(astfold_expr, expr_ty, node_->v.FunctionDef.decorator_list);
- CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns);
+ if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+ CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns);
+ }
break;
case AsyncFunctionDef_kind:
CALL(astfold_arguments, arguments_ty, node_->v.AsyncFunctionDef.args);
CALL(astfold_body, asdl_seq, node_->v.AsyncFunctionDef.body);
CALL_SEQ(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.decorator_list);
- CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns);
+ if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+ CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns);
+ }
break;
case ClassDef_kind:
CALL_SEQ(astfold_expr, expr_ty, node_->v.ClassDef.bases);
@@ -672,7 +656,9 @@
break;
case AnnAssign_kind:
CALL(astfold_expr, expr_ty, node_->v.AnnAssign.target);
- CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation);
+ if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
+ CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation);
+ }
CALL_OPT(astfold_expr, expr_ty, node_->v.AnnAssign.value);
break;
case For_kind:
@@ -731,7 +717,7 @@
}
static int
-astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, int optimize_)
+astfold_excepthandler(excepthandler_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
switch (node_->kind) {
case ExceptHandler_kind:
@@ -745,7 +731,7 @@
}
static int
-astfold_withitem(withitem_ty node_, PyArena *ctx_, int optimize_)
+astfold_withitem(withitem_ty node_, PyArena *ctx_, _PyASTOptimizeState *state)
{
CALL(astfold_expr, expr_ty, node_->context_expr);
CALL_OPT(astfold_expr, expr_ty, node_->optional_vars);
@@ -758,9 +744,9 @@
#undef CALL_INT_SEQ
int
-_PyAST_Optimize(mod_ty mod, PyArena *arena, int optimize)
+_PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state)
{
- int ret = astfold_mod(mod, arena, optimize);
+ int ret = astfold_mod(mod, arena, state);
assert(ret || PyErr_Occurred());
return ret;
}
diff --git a/Python/ast_unparse.c b/Python/ast_unparse.c
index af9604e..e699751 100644
--- a/Python/ast_unparse.c
+++ b/Python/ast_unparse.c
@@ -1,3 +1,4 @@
+#include <float.h> /* DBL_MAX_10_EXP */
#include <stdbool.h>
#include "Python.h"
#include "Python-ast.h"
@@ -6,6 +7,8 @@
static PyObject *_str_dbl_open_br;
static PyObject *_str_close_br;
static PyObject *_str_dbl_close_br;
+static PyObject *_str_inf;
+static PyObject *_str_replace_inf;
/* Forward declarations for recursion via helper functions. */
static PyObject *
@@ -15,9 +18,9 @@
static int
append_joinedstr(_PyUnicodeWriter *writer, expr_ty e, bool is_format_spec);
static int
-append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e, bool is_format_spec);
+append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e);
static int
-append_ast_slice(_PyUnicodeWriter *writer, slice_ty slice);
+append_ast_slice(_PyUnicodeWriter *writer, expr_ty e);
static int
append_charp(_PyUnicodeWriter *writer, const char *charp)
@@ -61,13 +64,28 @@
static int
append_repr(_PyUnicodeWriter *writer, PyObject *obj)
{
- int ret;
- PyObject *repr;
- repr = PyObject_Repr(obj);
+ PyObject *repr = PyObject_Repr(obj);
+
if (!repr) {
return -1;
}
- ret = _PyUnicodeWriter_WriteStr(writer, repr);
+
+ if ((PyFloat_CheckExact(obj) && Py_IS_INFINITY(PyFloat_AS_DOUBLE(obj))) ||
+ PyComplex_CheckExact(obj))
+ {
+ PyObject *new_repr = PyUnicode_Replace(
+ repr,
+ _str_inf,
+ _str_replace_inf,
+ -1
+ );
+ Py_DECREF(repr);
+ if (!new_repr) {
+ return -1;
+ }
+ repr = new_repr;
+ }
+ int ret = _PyUnicodeWriter_WriteStr(writer, repr);
Py_DECREF(repr);
return ret;
}
@@ -583,7 +601,7 @@
case JoinedStr_kind:
return append_joinedstr(writer, e, is_format_spec);
case FormattedValue_kind:
- return append_formattedvalue(writer, e, is_format_spec);
+ return append_formattedvalue(writer, e);
default:
PyErr_SetString(PyExc_SystemError,
"unknown expression kind inside f-string");
@@ -640,7 +658,7 @@
}
static int
-append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e, bool is_format_spec)
+append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e)
{
const char *conversion;
const char *outer_brace = "{";
@@ -698,6 +716,28 @@
}
static int
+append_ast_constant(_PyUnicodeWriter *writer, PyObject *constant)
+{
+ if (PyTuple_CheckExact(constant)) {
+ Py_ssize_t i, elem_count;
+
+ elem_count = PyTuple_GET_SIZE(constant);
+ APPEND_STR("(");
+ for (i = 0; i < elem_count; i++) {
+ APPEND_STR_IF(i > 0, ", ");
+ if (append_ast_constant(writer, PyTuple_GET_ITEM(constant, i)) < 0) {
+ return -1;
+ }
+ }
+
+ APPEND_STR_IF(elem_count == 1, ",");
+ APPEND_STR(")");
+ return 0;
+ }
+ return append_repr(writer, constant);
+}
+
+static int
append_ast_attribute(_PyUnicodeWriter *writer, expr_ty e)
{
const char *period;
@@ -718,79 +758,42 @@
}
static int
-append_ast_simple_slice(_PyUnicodeWriter *writer, slice_ty slice)
+append_ast_slice(_PyUnicodeWriter *writer, expr_ty e)
{
- if (slice->v.Slice.lower) {
- APPEND_EXPR(slice->v.Slice.lower, PR_TEST);
+ if (e->v.Slice.lower) {
+ APPEND_EXPR(e->v.Slice.lower, PR_TEST);
}
APPEND_STR(":");
- if (slice->v.Slice.upper) {
- APPEND_EXPR(slice->v.Slice.upper, PR_TEST);
+ if (e->v.Slice.upper) {
+ APPEND_EXPR(e->v.Slice.upper, PR_TEST);
}
- if (slice->v.Slice.step) {
+ if (e->v.Slice.step) {
APPEND_STR(":");
- APPEND_EXPR(slice->v.Slice.step, PR_TEST);
+ APPEND_EXPR(e->v.Slice.step, PR_TEST);
}
return 0;
}
static int
-append_ast_ext_slice(_PyUnicodeWriter *writer, slice_ty slice)
-{
- Py_ssize_t i, dims_count;
- dims_count = asdl_seq_LEN(slice->v.ExtSlice.dims);
- for (i = 0; i < dims_count; i++) {
- APPEND_STR_IF(i > 0, ", ");
- APPEND(slice, (slice_ty)asdl_seq_GET(slice->v.ExtSlice.dims, i));
- }
- APPEND_STR_IF(dims_count == 1, ",");
- return 0;
-}
-
-static int
-append_ast_index_slice(_PyUnicodeWriter *writer, slice_ty slice)
-{
- int level = PR_TUPLE;
- expr_ty value = slice->v.Index.value;
- if (value->kind == Tuple_kind) {
- for (Py_ssize_t i = 0; i < asdl_seq_LEN(value->v.Tuple.elts); i++) {
- expr_ty element = asdl_seq_GET(value->v.Tuple.elts, i);
- if (element->kind == Starred_kind) {
- ++level;
- break;
- }
- }
- }
- APPEND_EXPR(value, level);
- return 0;
-}
-
-static int
-append_ast_slice(_PyUnicodeWriter *writer, slice_ty slice)
-{
- switch (slice->kind) {
- case Slice_kind:
- return append_ast_simple_slice(writer, slice);
- case ExtSlice_kind:
- return append_ast_ext_slice(writer, slice);
- case Index_kind:
- return append_ast_index_slice(writer, slice);
- default:
- PyErr_SetString(PyExc_SystemError,
- "unexpected slice kind");
- return -1;
- }
-}
-
-static int
append_ast_subscript(_PyUnicodeWriter *writer, expr_ty e)
{
APPEND_EXPR(e->v.Subscript.value, PR_ATOM);
+ int level = PR_TUPLE;
+ expr_ty slice = e->v.Subscript.slice;
+ if (slice->kind == Tuple_kind) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(slice->v.Tuple.elts); i++) {
+ expr_ty element = asdl_seq_GET(slice->v.Tuple.elts, i);
+ if (element->kind == Starred_kind) {
+ ++level;
+ break;
+ }
+ }
+ }
APPEND_STR("[");
- APPEND(slice, e->v.Subscript.slice);
+ APPEND_EXPR(e->v.Subscript.slice, level);
APPEND_STR_FINISH("]");
}
@@ -837,7 +840,7 @@
{
APPEND_STR_IF(level > PR_TUPLE, "(");
APPEND_EXPR(e->v.NamedExpr.target, PR_ATOM);
- APPEND_STR(":=");
+ APPEND_STR(" := ");
APPEND_EXPR(e->v.NamedExpr.value, PR_ATOM);
APPEND_STR_IF(level > PR_TUPLE, ")");
return 0;
@@ -883,11 +886,15 @@
if (e->v.Constant.value == Py_Ellipsis) {
APPEND_STR_FINISH("...");
}
- return append_repr(writer, e->v.Constant.value);
+ if (e->v.Constant.kind != NULL
+ && -1 == _PyUnicodeWriter_WriteStr(writer, e->v.Constant.kind)) {
+ return -1;
+ }
+ return append_ast_constant(writer, e->v.Constant.value);
case JoinedStr_kind:
return append_joinedstr(writer, e, false);
case FormattedValue_kind:
- return append_formattedvalue(writer, e, false);
+ return append_formattedvalue(writer, e);
/* The following exprs can be assignment targets. */
case Attribute_kind:
return append_ast_attribute(writer, e);
@@ -895,6 +902,8 @@
return append_ast_subscript(writer, e);
case Starred_kind:
return append_ast_starred(writer, e);
+ case Slice_kind:
+ return append_ast_slice(writer, e);
case Name_kind:
return _PyUnicodeWriter_WriteStr(writer, e->v.Name.id);
case List_kind:
@@ -929,6 +938,14 @@
!(_str_dbl_close_br = PyUnicode_InternFromString("}}"))) {
return -1;
}
+ if (!_str_inf &&
+ !(_str_inf = PyUnicode_FromString("inf"))) {
+ return -1;
+ }
+ if (!_str_replace_inf &&
+ !(_str_replace_inf = PyUnicode_FromFormat("1e%d", 1 + DBL_MAX_10_EXP))) {
+ return -1;
+ }
return 0;
}
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index e42d5f2..199b09c 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -4,7 +4,9 @@
#include <ctype.h>
#include "ast.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
-#include "pycore_pystate.h"
+#include "pycore_object.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h" // _PyThreadState_GET()
#include "pycore_tupleobject.h"
_Py_IDENTIFIER(__builtins__);
@@ -29,7 +31,6 @@
{
Py_ssize_t i, j;
PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
- PyObject *stack[1] = {bases};
assert(PyTuple_Check(bases));
for (i = 0; i < nargs; i++) {
@@ -55,7 +56,7 @@
}
continue;
}
- new_base = _PyObject_FastCall(meth, stack, 1);
+ new_base = PyObject_CallOneArg(meth, bases);
Py_DECREF(meth);
if (!new_base) {
goto error;
@@ -169,7 +170,7 @@
/* else get the type of the first base */
else {
PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
- meta = (PyObject *) (base0->ob_type);
+ meta = (PyObject *)Py_TYPE(base0);
}
Py_INCREF(meta);
isclass = 1; /* meta is really a class */
@@ -202,7 +203,7 @@
}
else {
PyObject *pargs[2] = {name, bases};
- ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
+ ns = PyObject_VectorcallDict(prep, pargs, 2, mkw);
Py_DECREF(prep);
}
if (ns == NULL) {
@@ -228,7 +229,7 @@
}
}
PyObject *margs[3] = {name, bases, ns};
- cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
+ cls = PyObject_VectorcallDict(meta, margs, 3, mkw);
if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
PyObject *cell_cls = PyCell_GET(cell);
if (cell_cls != cls) {
@@ -488,7 +489,7 @@
}
Py_INCREF(hook);
- PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
+ PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
Py_DECREF(hook);
return retval;
}
@@ -574,7 +575,7 @@
ok = PyObject_IsTrue(item);
} else {
PyObject *good;
- good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
+ good = PyObject_CallOneArg(lz->func, item);
if (good == NULL) {
Py_DECREF(item);
return NULL;
@@ -816,6 +817,7 @@
goto error;
result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
+
Py_XDECREF(source_copy);
goto finally;
@@ -1001,13 +1003,13 @@
if (!PyDict_Check(globals)) {
PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
- globals->ob_type->tp_name);
+ Py_TYPE(globals)->tp_name);
return NULL;
}
if (!PyMapping_Check(locals)) {
PyErr_Format(PyExc_TypeError,
"locals must be a mapping or None, not %.100s",
- locals->ob_type->tp_name);
+ Py_TYPE(locals)->tp_name);
return NULL;
}
if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
@@ -1255,23 +1257,23 @@
{
PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
PyObject **stack;
- Py_ssize_t niters, nargs, i;
PyObject *result = NULL;
+ PyThreadState *tstate = _PyThreadState_GET();
- niters = PyTuple_GET_SIZE(lz->iters);
+ const Py_ssize_t 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();
+ _PyErr_NoMemory(tstate);
return NULL;
}
}
- nargs = 0;
- for (i=0; i < niters; i++) {
+ Py_ssize_t nargs = 0;
+ for (Py_ssize_t i=0; i < niters; i++) {
PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
PyObject *val = Py_TYPE(it)->tp_iternext(it);
if (val == NULL) {
@@ -1281,10 +1283,10 @@
nargs++;
}
- result = _PyObject_FastCall(lz->func, stack, nargs);
+ result = _PyObject_VectorcallTstate(tstate, lz->func, stack, nargs, NULL);
exit:
- for (i=0; i < nargs; i++) {
+ for (Py_ssize_t i=0; i < nargs; i++) {
Py_DECREF(stack[i]);
}
if (stack != small_stack) {
@@ -1382,11 +1384,11 @@
if (!PyIter_Check(it)) {
PyErr_Format(PyExc_TypeError,
"'%.200s' object is not an iterator",
- it->ob_type->tp_name);
+ Py_TYPE(it)->tp_name);
return NULL;
}
- res = (*it->ob_type->tp_iternext)(it);
+ res = (*Py_TYPE(it)->tp_iternext)(it);
if (res != NULL) {
return res;
} else if (nargs > 1) {
@@ -1589,10 +1591,15 @@
const int positional = PyTuple_Size(args) > 1;
int ret;
- if (positional)
+ if (positional) {
v = args;
- else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
+ }
+ else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) {
+ if (PyExceptionClass_Check(PyExc_TypeError)) {
+ PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
+ }
return NULL;
+ }
emptytuple = PyTuple_New(0);
if (emptytuple == NULL)
@@ -1625,7 +1632,7 @@
while (( item = PyIter_Next(it) )) {
/* get the value from the key function */
if (keyfunc != NULL) {
- val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
+ val = PyObject_CallOneArg(keyfunc, item);
if (val == NULL)
goto Fail_it_item;
}
@@ -1782,7 +1789,7 @@
else {
PyErr_Format(PyExc_TypeError,
"ord() expected string of length 1, but " \
- "%.200s found", c->ob_type->tp_name);
+ "%.200s found", Py_TYPE(c)->tp_name);
return NULL;
}
@@ -1821,8 +1828,9 @@
builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{
static const char * const _keywords[] = {"sep", "end", "file", "flush", 0};
- static struct _PyArg_Parser _parser = {"|OOOO:print", _keywords, 0};
- PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
+ static struct _PyArg_Parser _parser = {"|OOOp:print", _keywords, 0};
+ PyObject *sep = NULL, *end = NULL, *file = NULL;
+ int flush = 0;
int i, err;
if (kwnames != NULL &&
@@ -1849,7 +1857,7 @@
else if (sep && !PyUnicode_Check(sep)) {
PyErr_Format(PyExc_TypeError,
"sep must be None or a string, not %.200s",
- sep->ob_type->tp_name);
+ Py_TYPE(sep)->tp_name);
return NULL;
}
if (end == Py_None) {
@@ -1858,7 +1866,7 @@
else if (end && !PyUnicode_Check(end)) {
PyErr_Format(PyExc_TypeError,
"end must be None or a string, not %.200s",
- end->ob_type->tp_name);
+ Py_TYPE(end)->tp_name);
return NULL;
}
@@ -1884,18 +1892,11 @@
if (err)
return NULL;
- if (flush != NULL) {
- PyObject *tmp;
- int do_flush = PyObject_IsTrue(flush);
- if (do_flush == -1)
+ if (flush) {
+ PyObject *tmp = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
+ if (tmp == NULL)
return NULL;
- else if (do_flush) {
- tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
- if (tmp == NULL)
- return NULL;
- else
- Py_DECREF(tmp);
- }
+ Py_DECREF(tmp);
}
Py_RETURN_NONE;
@@ -1960,7 +1961,7 @@
}
/* First of all, flush stderr */
- tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
if (tmp == NULL)
PyErr_Clear();
else
@@ -1969,7 +1970,7 @@
/* 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, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(fin, &PyId_fileno);
if (tmp == NULL) {
PyErr_Clear();
tty = 0;
@@ -1982,7 +1983,7 @@
tty = fd == fileno(stdin) && isatty(fd);
}
if (tty) {
- tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno);
if (tmp == NULL) {
PyErr_Clear();
tty = 0;
@@ -2020,7 +2021,7 @@
stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
if (!stdin_encoding_str || !stdin_errors_str)
goto _readline_errors;
- tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
if (tmp == NULL)
PyErr_Clear();
else
@@ -2115,7 +2116,7 @@
if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
return NULL;
}
- tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
if (tmp == NULL)
PyErr_Clear();
else
@@ -2178,7 +2179,7 @@
if (ndigits == Py_None)
result = _PyObject_CallNoArg(round);
else
- result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
+ result = PyObject_CallOneArg(round, ndigits);
Py_DECREF(round);
return result;
}
@@ -2234,7 +2235,7 @@
}
assert(nargs >= 1);
- v = _PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
+ v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Py_DECREF(callable);
if (v == NULL) {
Py_DECREF(newlist);
@@ -2349,7 +2350,7 @@
return NULL;
return PyLong_FromLong(i_result);
}
- if (PyLong_CheckExact(item)) {
+ if (PyLong_CheckExact(item) || PyBool_Check(item)) {
long b = PyLong_AsLongAndOverflow(item, &overflow);
if (overflow == 0 &&
(i_result >= 0 ? (b <= LONG_MAX - i_result)
@@ -2391,20 +2392,16 @@
return PyFloat_FromDouble(f_result);
}
if (PyFloat_CheckExact(item)) {
- PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
f_result += PyFloat_AS_DOUBLE(item);
- PyFPE_END_PROTECT(f_result)
Py_DECREF(item);
continue;
}
- if (PyLong_CheckExact(item)) {
+ if (PyLong_Check(item)) {
long value;
int overflow;
value = PyLong_AsLongAndOverflow(item, &overflow);
if (!overflow) {
- PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
f_result += (double)value;
- PyFPE_END_PROTECT(f_result)
Py_DECREF(item);
continue;
}
@@ -2445,7 +2442,11 @@
empty = []
sum([[x] for x in range(10)], empty)
- would change the value of empty. */
+ would change the value of empty. In fact, using
+ in-place addition rather that binary addition for
+ any of the steps introduces subtle behavior changes:
+
+ https://bugs.python.org/issue18305 */
temp = PyNumber_Add(result, item);
Py_DECREF(result);
Py_DECREF(item);
@@ -2769,11 +2770,11 @@
PyObject *
-_PyBuiltin_Init(void)
+_PyBuiltin_Init(PyThreadState *tstate)
{
PyObject *mod, *dict, *debug;
- const PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
if (PyType_Ready(&PyFilter_Type) < 0 ||
PyType_Ready(&PyMap_Type) < 0 ||
diff --git a/Python/bootstrap_hash.c b/Python/bootstrap_hash.c
index eb2b6d0..a212f69 100644
--- a/Python/bootstrap_hash.c
+++ b/Python/bootstrap_hash.c
@@ -25,6 +25,16 @@
# include <sanitizer/msan_interface.h>
#endif
+#if defined(__APPLE__) && defined(__has_builtin)
+# if __has_builtin(__builtin_available)
+# define HAVE_GETENTRYPY_GETRANDOM_RUNTIME __builtin_available(macOS 10.12, iOS 10.10, tvOS 10.0, watchOS 3.0, *)
+# endif
+#endif
+#ifndef HAVE_GETENTRYPY_GETRANDOM_RUNTIME
+# define HAVE_GETENTRYPY_GETRANDOM_RUNTIME 1
+#endif
+
+
#ifdef Py_DEBUG
int _Py_HashSecret_Initialized = 0;
#else
@@ -163,7 +173,7 @@
}
/* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system urandom
- is not initialiazed yet. For _PyRandom_Init(), we ignore the
+ is not initialized yet. For _PyRandom_Init(), we ignore the
error and fall back on reading /dev/urandom which never blocks,
even if the system urandom is not initialized yet:
see the PEP 524. */
@@ -208,6 +218,16 @@
error.
getentropy() is retried if it failed with EINTR: interrupted by a signal. */
+
+#if defined(__APPLE__) && defined(__has_attribute) && __has_attribute(availability)
+static int
+py_getentropy(char *buffer, Py_ssize_t size, int raise)
+ __attribute__((availability(macos,introduced=10.12)))
+ __attribute__((availability(ios,introduced=10.0)))
+ __attribute__((availability(tvos,introduced=10.0)))
+ __attribute__((availability(watchos,introduced=3.0)));
+#endif
+
static int
py_getentropy(char *buffer, Py_ssize_t size, int raise)
{
@@ -498,19 +518,21 @@
#else
#if defined(PY_GETRANDOM) || defined(PY_GETENTROPY)
+ if (HAVE_GETENTRYPY_GETRANDOM_RUNTIME) {
#ifdef PY_GETRANDOM
- res = py_getrandom(buffer, size, blocking, raise);
+ res = py_getrandom(buffer, size, blocking, raise);
#else
- res = py_getentropy(buffer, size, raise);
+ res = py_getentropy(buffer, size, raise);
#endif
- if (res < 0) {
- return -1;
- }
- if (res == 1) {
- return 0;
- }
- /* getrandom() or getentropy() function is not available: failed with
- ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
+ if (res < 0) {
+ return -1;
+ }
+ if (res == 1) {
+ return 0;
+ }
+ /* getrandom() or getentropy() function is not available: failed with
+ ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
+ } /* end of availability block */
#endif
return dev_urandom(buffer, size, raise);
@@ -580,7 +602,7 @@
res = pyurandom(secret, secret_size, 0, 0);
if (res < 0) {
return _PyStatus_ERR("failed to get random numbers "
- "to initialize Python");
+ "to initialize Python");
}
}
return _PyStatus_OK();
diff --git a/Python/ceval.c b/Python/ceval.c
index 1873e37..91e879e 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -10,12 +10,17 @@
#define PY_LOCAL_AGGRESSIVE
#include "Python.h"
+#include "pycore_abstract.h" // _PyIndex_Check()
+#include "pycore_call.h"
#include "pycore_ceval.h"
#include "pycore_code.h"
+#include "pycore_initconfig.h"
#include "pycore_object.h"
#include "pycore_pyerrors.h"
#include "pycore_pylifecycle.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h" // _PyMem_IsPtrFreed()
+#include "pycore_pystate.h" // _PyInterpreterState_GET()
+#include "pycore_sysmodule.h"
#include "pycore_tupleobject.h"
#include "code.h"
@@ -24,7 +29,6 @@
#include "opcode.h"
#include "pydtrace.h"
#include "setobject.h"
-#include "structmember.h"
#include <ctype.h>
@@ -38,10 +42,7 @@
# error "ceval.c must be build with Py_BUILD_CORE define for best performance"
#endif
-/* Private API for the LOAD_METHOD opcode. */
-extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **);
-
-typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
+_Py_IDENTIFIER(__name__);
/* Forward declarations */
Py_LOCAL_INLINE(PyObject *) call_function(
@@ -70,7 +71,6 @@
static void dtrace_function_entry(PyFrameObject *);
static void dtrace_function_return(PyFrameObject *);
-static PyObject * cmp_outcome(PyThreadState *, int, PyObject *, PyObject *);
static PyObject * import_name(PyThreadState *, PyFrameObject *,
PyObject *, PyObject *, PyObject *);
static PyObject * import_from(PyThreadState *, PyObject *, PyObject *);
@@ -82,7 +82,7 @@
static PyObject * special_lookup(PyThreadState *, PyObject *, _Py_Identifier *);
static int check_args_iterable(PyThreadState *, PyObject *func, PyObject *vararg);
static void format_kwargs_error(PyThreadState *, PyObject *func, PyObject *kwargs);
-static void format_awaitable_error(PyThreadState *, PyTypeObject *, int);
+static void format_awaitable_error(PyThreadState *, PyTypeObject *, int, int);
#define NAME_ERROR_MSG \
"name '%.200s' is not defined"
@@ -122,129 +122,199 @@
static size_t opcache_global_misses = 0;
#endif
-#define GIL_REQUEST _Py_atomic_load_relaxed(&ceval->gil_drop_request)
+
+#ifndef NDEBUG
+/* Ensure that tstate is valid: sanity check for PyEval_AcquireThread() and
+ PyEval_RestoreThread(). Detect if tstate memory was freed. It can happen
+ when a thread continues to run after Python finalization, especially
+ daemon threads. */
+static int
+is_tstate_valid(PyThreadState *tstate)
+{
+ assert(!_PyMem_IsPtrFreed(tstate));
+ assert(!_PyMem_IsPtrFreed(tstate->interp));
+ return 1;
+}
+#endif
+
/* This can set eval_breaker to 0 even though gil_drop_request became
1. We believe this is all right because the eval loop will release
the GIL eventually anyway. */
-#define COMPUTE_EVAL_BREAKER(ceval) \
- _Py_atomic_store_relaxed( \
- &(ceval)->eval_breaker, \
- GIL_REQUEST | \
- _Py_atomic_load_relaxed(&(ceval)->signals_pending) | \
- _Py_atomic_load_relaxed(&(ceval)->pending.calls_to_do) | \
- (ceval)->pending.async_exc)
+static inline void
+COMPUTE_EVAL_BREAKER(PyInterpreterState *interp,
+ struct _ceval_runtime_state *ceval,
+ struct _ceval_state *ceval2)
+{
+ _Py_atomic_store_relaxed(&ceval2->eval_breaker,
+ _Py_atomic_load_relaxed(&ceval2->gil_drop_request)
+ | (_Py_atomic_load_relaxed(&ceval->signals_pending)
+ && _Py_ThreadCanHandleSignals(interp))
+ | (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)
+ && _Py_ThreadCanHandlePendingCalls())
+ | ceval2->pending.async_exc);
+}
-#define SET_GIL_DROP_REQUEST(ceval) \
- do { \
- _Py_atomic_store_relaxed(&(ceval)->gil_drop_request, 1); \
- _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
- } while (0)
-#define RESET_GIL_DROP_REQUEST(ceval) \
- do { \
- _Py_atomic_store_relaxed(&(ceval)->gil_drop_request, 0); \
- COMPUTE_EVAL_BREAKER(ceval); \
- } while (0)
+static inline void
+SET_GIL_DROP_REQUEST(PyInterpreterState *interp)
+{
+ struct _ceval_state *ceval2 = &interp->ceval;
+ _Py_atomic_store_relaxed(&ceval2->gil_drop_request, 1);
+ _Py_atomic_store_relaxed(&ceval2->eval_breaker, 1);
+}
-/* Pending calls are only modified under pending_lock */
-#define SIGNAL_PENDING_CALLS(ceval) \
- do { \
- _Py_atomic_store_relaxed(&(ceval)->pending.calls_to_do, 1); \
- _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
- } while (0)
-#define UNSIGNAL_PENDING_CALLS(ceval) \
- do { \
- _Py_atomic_store_relaxed(&(ceval)->pending.calls_to_do, 0); \
- COMPUTE_EVAL_BREAKER(ceval); \
- } while (0)
+static inline void
+RESET_GIL_DROP_REQUEST(PyInterpreterState *interp)
+{
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
+ _Py_atomic_store_relaxed(&ceval2->gil_drop_request, 0);
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
-#define SIGNAL_PENDING_SIGNALS(ceval) \
- do { \
- _Py_atomic_store_relaxed(&(ceval)->signals_pending, 1); \
- _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
- } while (0)
-#define UNSIGNAL_PENDING_SIGNALS(ceval) \
- do { \
- _Py_atomic_store_relaxed(&(ceval)->signals_pending, 0); \
- COMPUTE_EVAL_BREAKER(ceval); \
- } while (0)
+static inline void
+SIGNAL_PENDING_CALLS(PyInterpreterState *interp)
+{
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
+ _Py_atomic_store_relaxed(&ceval2->pending.calls_to_do, 1);
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
-#define SIGNAL_ASYNC_EXC(ceval) \
- do { \
- (ceval)->pending.async_exc = 1; \
- _Py_atomic_store_relaxed(&(ceval)->eval_breaker, 1); \
- } while (0)
-#define UNSIGNAL_ASYNC_EXC(ceval) \
- do { \
- (ceval)->pending.async_exc = 0; \
- COMPUTE_EVAL_BREAKER(ceval); \
- } while (0)
+static inline void
+UNSIGNAL_PENDING_CALLS(PyInterpreterState *interp)
+{
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
+ _Py_atomic_store_relaxed(&ceval2->pending.calls_to_do, 0);
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
+
+
+static inline void
+SIGNAL_PENDING_SIGNALS(PyInterpreterState *interp, int force)
+{
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
+ _Py_atomic_store_relaxed(&ceval->signals_pending, 1);
+ if (force) {
+ _Py_atomic_store_relaxed(&ceval2->eval_breaker, 1);
+ }
+ else {
+ /* eval_breaker is not set to 1 if thread_can_handle_signals() is false */
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+ }
+}
+
+
+static inline void
+UNSIGNAL_PENDING_SIGNALS(PyInterpreterState *interp)
+{
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
+ _Py_atomic_store_relaxed(&ceval->signals_pending, 0);
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
+
+
+static inline void
+SIGNAL_ASYNC_EXC(PyInterpreterState *interp)
+{
+ struct _ceval_state *ceval2 = &interp->ceval;
+ ceval2->pending.async_exc = 1;
+ _Py_atomic_store_relaxed(&ceval2->eval_breaker, 1);
+}
+
+
+static inline void
+UNSIGNAL_ASYNC_EXC(PyInterpreterState *interp)
+{
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
+ ceval2->pending.async_exc = 0;
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+}
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
-#include "pythread.h"
#include "ceval_gil.h"
+void _Py_NO_RETURN
+_Py_FatalError_TstateNULL(const char *func)
+{
+ _Py_FatalErrorFunc(func,
+ "the function must be called with the GIL held, "
+ "but the GIL is released "
+ "(the current Python thread state is NULL)");
+}
+
+
+int
+_PyEval_ThreadsInitialized(_PyRuntimeState *runtime)
+{
+ return gil_created(&runtime->ceval.gil);
+}
+
int
PyEval_ThreadsInitialized(void)
{
- return gil_created(&_PyRuntime.ceval.gil);
+ _PyRuntimeState *runtime = &_PyRuntime;
+ return _PyEval_ThreadsInitialized(runtime);
}
-void
-PyEval_InitThreads(void)
+PyStatus
+_PyEval_InitGIL(PyThreadState *tstate)
{
- _PyRuntimeState *runtime = &_PyRuntime;
- struct _ceval_runtime_state *ceval = &runtime->ceval;
- struct _gil_runtime_state *gil = &ceval->gil;
- if (gil_created(gil)) {
- return;
+ if (!_Py_IsMainInterpreter(tstate)) {
+ /* Currently, the GIL is shared by all interpreters,
+ and only the main interpreter is responsible to create
+ and destroy it. */
+ return _PyStatus_OK();
}
+ struct _gil_runtime_state *gil = &tstate->interp->runtime->ceval.gil;
+ assert(!gil_created(gil));
+
PyThread_init_thread();
create_gil(gil);
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- take_gil(ceval, tstate);
- struct _pending_calls *pending = &ceval->pending;
- pending->lock = PyThread_allocate_lock();
- if (pending->lock == NULL) {
- Py_FatalError("Can't initialize threads for pending calls");
- }
+ take_gil(tstate);
+
+ assert(gil_created(gil));
+ return _PyStatus_OK();
}
void
-_PyEval_FiniThreads(struct _ceval_runtime_state *ceval)
+_PyEval_FiniGIL(PyThreadState *tstate)
{
- struct _gil_runtime_state *gil = &ceval->gil;
+ if (!_Py_IsMainInterpreter(tstate)) {
+ /* Currently, the GIL is shared by all interpreters,
+ and only the main interpreter is responsible to create
+ and destroy it. */
+ return;
+ }
+
+ struct _gil_runtime_state *gil = &tstate->interp->runtime->ceval.gil;
if (!gil_created(gil)) {
+ /* First Py_InitializeFromConfig() call: the GIL doesn't exist
+ yet: do nothing. */
return;
}
destroy_gil(gil);
assert(!gil_created(gil));
-
- struct _pending_calls *pending = &ceval->pending;
- if (pending->lock != NULL) {
- PyThread_free_lock(pending->lock);
- pending->lock = NULL;
- }
}
-static inline void
-exit_thread_if_finalizing(_PyRuntimeState *runtime, PyThreadState *tstate)
+void
+PyEval_InitThreads(void)
{
- /* _Py_Finalizing is protected by the GIL */
- if (runtime->finalizing != NULL && !_Py_CURRENTLY_FINALIZING(runtime, tstate)) {
- drop_gil(&runtime->ceval, tstate);
- PyThread_exit_thread();
- }
+ /* Do nothing: kept for backward compatibility */
}
void
@@ -280,13 +350,10 @@
PyEval_AcquireLock(void)
{
_PyRuntimeState *runtime = &_PyRuntime;
- struct _ceval_runtime_state *ceval = &runtime->ceval;
PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- if (tstate == NULL) {
- Py_FatalError("PyEval_AcquireLock: current thread state is NULL");
- }
- take_gil(ceval, tstate);
- exit_thread_if_finalizing(runtime, tstate);
+ _Py_EnsureTstateNotNULL(tstate);
+
+ take_gil(tstate);
}
void
@@ -296,45 +363,49 @@
PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
/* This function must succeed when the current thread state is NULL.
We therefore avoid PyThreadState_Get() which dumps a fatal error
- in debug mode.
- */
- drop_gil(&runtime->ceval, tstate);
+ in debug mode. */
+ struct _ceval_runtime_state *ceval = &runtime->ceval;
+ struct _ceval_state *ceval2 = &tstate->interp->ceval;
+ drop_gil(ceval, ceval2, tstate);
+}
+
+void
+_PyEval_ReleaseLock(PyThreadState *tstate)
+{
+ struct _ceval_runtime_state *ceval = &tstate->interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &tstate->interp->ceval;
+ drop_gil(ceval, ceval2, tstate);
}
void
PyEval_AcquireThread(PyThreadState *tstate)
{
- if (tstate == NULL) {
- Py_FatalError("PyEval_AcquireThread: NULL new thread state");
- }
+ _Py_EnsureTstateNotNULL(tstate);
- _PyRuntimeState *runtime = &_PyRuntime;
- struct _ceval_runtime_state *ceval = &runtime->ceval;
+ take_gil(tstate);
- /* Check someone has called PyEval_InitThreads() to create the lock */
- assert(gil_created(&ceval->gil));
- take_gil(ceval, tstate);
- exit_thread_if_finalizing(runtime, tstate);
- if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
- Py_FatalError("PyEval_AcquireThread: non-NULL old thread state");
+ struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+ if (_PyThreadState_Swap(gilstate, tstate) != NULL) {
+ Py_FatalError("non-NULL old thread state");
}
}
void
PyEval_ReleaseThread(PyThreadState *tstate)
{
- if (tstate == NULL) {
- Py_FatalError("PyEval_ReleaseThread: NULL thread state");
- }
+ assert(is_tstate_valid(tstate));
- _PyRuntimeState *runtime = &_PyRuntime;
+ _PyRuntimeState *runtime = tstate->interp->runtime;
PyThreadState *new_tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
if (new_tstate != tstate) {
- Py_FatalError("PyEval_ReleaseThread: wrong thread state");
+ Py_FatalError("wrong thread state");
}
- drop_gil(&runtime->ceval, tstate);
+ struct _ceval_runtime_state *ceval = &runtime->ceval;
+ struct _ceval_state *ceval2 = &tstate->interp->ceval;
+ drop_gil(ceval, ceval2, tstate);
}
+#ifdef HAVE_FORK
/* This function is called from PyOS_AfterFork_Child to destroy all threads
* which are not running in the child process, and clear internal locks
* which might be held by those threads.
@@ -343,64 +414,60 @@
void
_PyEval_ReInitThreads(_PyRuntimeState *runtime)
{
- struct _ceval_runtime_state *ceval = &runtime->ceval;
- if (!gil_created(&ceval->gil)) {
+ PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+ _Py_EnsureTstateNotNULL(tstate);
+
+ struct _gil_runtime_state *gil = &runtime->ceval.gil;
+ if (!gil_created(gil)) {
return;
}
- recreate_gil(&ceval->gil);
- PyThreadState *current_tstate = _PyRuntimeState_GetThreadState(runtime);
- take_gil(ceval, current_tstate);
+ recreate_gil(gil);
- struct _pending_calls *pending = &ceval->pending;
- pending->lock = PyThread_allocate_lock();
- if (pending->lock == NULL) {
+ take_gil(tstate);
+
+ struct _pending_calls *pending = &tstate->interp->ceval.pending;
+ if (_PyThread_at_fork_reinit(&pending->lock) < 0) {
Py_FatalError("Can't initialize threads for pending calls");
}
/* Destroy all threads except the current one */
- _PyThreadState_DeleteExcept(runtime, current_tstate);
+ _PyThreadState_DeleteExcept(runtime, tstate);
}
+#endif
/* This function is used to signal that async exceptions are waiting to be
raised. */
void
-_PyEval_SignalAsyncExc(struct _ceval_runtime_state *ceval)
+_PyEval_SignalAsyncExc(PyThreadState *tstate)
{
- SIGNAL_ASYNC_EXC(ceval);
+ assert(is_tstate_valid(tstate));
+ SIGNAL_ASYNC_EXC(tstate->interp);
}
PyThreadState *
PyEval_SaveThread(void)
{
_PyRuntimeState *runtime = &_PyRuntime;
- struct _ceval_runtime_state *ceval = &runtime->ceval;
PyThreadState *tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
- if (tstate == NULL) {
- Py_FatalError("PyEval_SaveThread: NULL tstate");
- }
+ _Py_EnsureTstateNotNULL(tstate);
+
+ struct _ceval_runtime_state *ceval = &runtime->ceval;
+ struct _ceval_state *ceval2 = &tstate->interp->ceval;
assert(gil_created(&ceval->gil));
- drop_gil(ceval, tstate);
+ drop_gil(ceval, ceval2, tstate);
return tstate;
}
void
PyEval_RestoreThread(PyThreadState *tstate)
{
- _PyRuntimeState *runtime = &_PyRuntime;
- struct _ceval_runtime_state *ceval = &runtime->ceval;
+ _Py_EnsureTstateNotNULL(tstate);
- if (tstate == NULL) {
- Py_FatalError("PyEval_RestoreThread: NULL tstate");
- }
- assert(gil_created(&ceval->gil));
+ take_gil(tstate);
- int err = errno;
- take_gil(ceval, tstate);
- exit_thread_if_finalizing(runtime, tstate);
- errno = err;
-
- _PyThreadState_Swap(&runtime->gilstate, tstate);
+ struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+ _PyThreadState_Swap(gilstate, tstate);
}
@@ -427,12 +494,24 @@
*/
void
-_PyEval_SignalReceived(struct _ceval_runtime_state *ceval)
+_PyEval_SignalReceived(PyInterpreterState *interp)
{
+#ifdef MS_WINDOWS
+ // bpo-42296: On Windows, _PyEval_SignalReceived() is called from a signal
+ // handler which can run in a thread different than the Python thread, in
+ // which case _Py_ThreadCanHandleSignals() is wrong. Ignore
+ // _Py_ThreadCanHandleSignals() and always set eval_breaker to 1.
+ //
+ // The next eval_frame_handle_pending() call will call
+ // _Py_ThreadCanHandleSignals() to recompute eval_breaker.
+ int force = 1;
+#else
+ int force = 0;
+#endif
/* bpo-30703: Function called when the C signal handler of Python gets a
- signal. We cannot queue a callback using Py_AddPendingCall() since
+ signal. We cannot queue a callback using _PyEval_AddPendingCall() since
that function is not async-signal-safe. */
- SIGNAL_PENDING_SIGNALS(ceval);
+ SIGNAL_PENDING_SIGNALS(interp, force);
}
/* Push one item onto the queue while holding the lock. */
@@ -472,91 +551,96 @@
*/
int
-_PyEval_AddPendingCall(PyThreadState *tstate,
- struct _ceval_runtime_state *ceval,
+_PyEval_AddPendingCall(PyInterpreterState *interp,
int (*func)(void *), void *arg)
{
- struct _pending_calls *pending = &ceval->pending;
+ struct _pending_calls *pending = &interp->ceval.pending;
+
+ /* Ensure that _PyEval_InitPendingCalls() was called
+ and that _PyEval_FiniPendingCalls() is not called yet. */
+ assert(pending->lock != NULL);
PyThread_acquire_lock(pending->lock, WAIT_LOCK);
- if (pending->finishing) {
- PyThread_release_lock(pending->lock);
-
- PyObject *exc, *val, *tb;
- _PyErr_Fetch(tstate, &exc, &val, &tb);
- _PyErr_SetString(tstate, PyExc_SystemError,
- "Py_AddPendingCall: cannot add pending calls "
- "(Python shutting down)");
- _PyErr_Print(tstate);
- _PyErr_Restore(tstate, exc, val, tb);
- return -1;
- }
int result = _push_pending_call(pending, func, arg);
PyThread_release_lock(pending->lock);
/* signal main loop */
- SIGNAL_PENDING_CALLS(ceval);
+ SIGNAL_PENDING_CALLS(interp);
return result;
}
int
Py_AddPendingCall(int (*func)(void *), void *arg)
{
- _PyRuntimeState *runtime = &_PyRuntime;
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- return _PyEval_AddPendingCall(tstate, &runtime->ceval, func, arg);
+ /* Best-effort to support subinterpreters and calls with the GIL released.
+
+ First attempt _PyThreadState_GET() since it supports subinterpreters.
+
+ If the GIL is released, _PyThreadState_GET() returns NULL . In this
+ case, use PyGILState_GetThisThreadState() which works even if the GIL
+ is released.
+
+ Sadly, PyGILState_GetThisThreadState() doesn't support subinterpreters:
+ see bpo-10915 and bpo-15751.
+
+ Py_AddPendingCall() doesn't require the caller to hold the GIL. */
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (tstate == NULL) {
+ tstate = PyGILState_GetThisThreadState();
+ }
+
+ PyInterpreterState *interp;
+ if (tstate != NULL) {
+ interp = tstate->interp;
+ }
+ else {
+ /* Last resort: use the main interpreter */
+ interp = _PyRuntime.interpreters.main;
+ }
+ return _PyEval_AddPendingCall(interp, func, arg);
}
static int
-handle_signals(_PyRuntimeState *runtime)
+handle_signals(PyThreadState *tstate)
{
- /* Only handle signals on main thread. PyEval_InitThreads must
- * have been called already.
- */
- if (PyThread_get_thread_ident() != runtime->main_thread) {
- return 0;
- }
- /*
- * Ensure that the thread isn't currently running some other
- * interpreter.
- */
- PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
- if (interp != runtime->interpreters.main) {
+ assert(is_tstate_valid(tstate));
+ if (!_Py_ThreadCanHandleSignals(tstate->interp)) {
return 0;
}
- struct _ceval_runtime_state *ceval = &runtime->ceval;
- UNSIGNAL_PENDING_SIGNALS(ceval);
- if (_PyErr_CheckSignals() < 0) {
- SIGNAL_PENDING_SIGNALS(ceval); /* We're not done yet */
+ UNSIGNAL_PENDING_SIGNALS(tstate->interp);
+ if (_PyErr_CheckSignalsTstate(tstate) < 0) {
+ /* On failure, re-schedule a call to handle_signals(). */
+ SIGNAL_PENDING_SIGNALS(tstate->interp, 0);
return -1;
}
return 0;
}
static int
-make_pending_calls(_PyRuntimeState *runtime)
+make_pending_calls(PyThreadState *tstate)
{
- static int busy = 0;
+ assert(is_tstate_valid(tstate));
- /* only service pending calls on main thread */
- if (PyThread_get_thread_ident() != runtime->main_thread) {
+ /* only execute pending calls on main thread */
+ if (!_Py_ThreadCanHandlePendingCalls()) {
return 0;
}
/* don't perform recursive pending calls */
+ static int busy = 0;
if (busy) {
return 0;
}
busy = 1;
- struct _ceval_runtime_state *ceval = &runtime->ceval;
+
/* unsignal before starting to call callbacks, so that any callback
added in-between re-signals */
- UNSIGNAL_PENDING_CALLS(ceval);
+ UNSIGNAL_PENDING_CALLS(tstate->interp);
int res = 0;
/* perform a bounded number of calls, in case of recursion */
- struct _pending_calls *pending = &ceval->pending;
+ struct _pending_calls *pending = &tstate->interp->ceval.pending;
for (int i=0; i<NPENDINGCALLS; i++) {
int (*func)(void *) = NULL;
void *arg = NULL;
@@ -581,27 +665,22 @@
error:
busy = 0;
- SIGNAL_PENDING_CALLS(ceval);
+ SIGNAL_PENDING_CALLS(tstate->interp);
return res;
}
void
-_Py_FinishPendingCalls(_PyRuntimeState *runtime)
+_Py_FinishPendingCalls(PyThreadState *tstate)
{
assert(PyGILState_Check());
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- struct _pending_calls *pending = &runtime->ceval.pending;
-
- PyThread_acquire_lock(pending->lock, WAIT_LOCK);
- pending->finishing = 1;
- PyThread_release_lock(pending->lock);
+ struct _pending_calls *pending = &tstate->interp->ceval.pending;
if (!_Py_atomic_load_relaxed(&(pending->calls_to_do))) {
return;
}
- if (make_pending_calls(runtime) < 0) {
+ if (make_pending_calls(tstate) < 0) {
PyObject *exc, *val, *tb;
_PyErr_Fetch(tstate, &exc, &val, &tb);
PyErr_BadInternalCall();
@@ -617,15 +696,16 @@
{
assert(PyGILState_Check());
+ PyThreadState *tstate = _PyThreadState_GET();
+
/* Python signal handler doesn't really queue a callback: it only signals
that a signal was received, see _PyEval_SignalReceived(). */
- _PyRuntimeState *runtime = &_PyRuntime;
- int res = handle_signals(runtime);
+ int res = handle_signals(tstate);
if (res != 0) {
return res;
}
- res = make_pending_calls(runtime);
+ res = make_pending_calls(tstate);
if (res != 0) {
return res;
}
@@ -642,38 +722,64 @@
int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
void
-_PyEval_Initialize(struct _ceval_runtime_state *state)
+_PyEval_InitRuntimeState(struct _ceval_runtime_state *ceval)
{
- state->recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
_Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
- _gil_initialize(&state->gil);
+ _gil_initialize(&ceval->gil);
+}
+
+int
+_PyEval_InitState(struct _ceval_state *ceval)
+{
+ ceval->recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
+
+ struct _pending_calls *pending = &ceval->pending;
+ assert(pending->lock == NULL);
+
+ pending->lock = PyThread_allocate_lock();
+ if (pending->lock == NULL) {
+ return -1;
+ }
+
+ return 0;
+}
+
+void
+_PyEval_FiniState(struct _ceval_state *ceval)
+{
+ struct _pending_calls *pending = &ceval->pending;
+ if (pending->lock != NULL) {
+ PyThread_free_lock(pending->lock);
+ pending->lock = NULL;
+ }
}
int
Py_GetRecursionLimit(void)
{
- return _PyRuntime.ceval.recursion_limit;
+ PyThreadState *tstate = _PyThreadState_GET();
+ return tstate->interp->ceval.recursion_limit;
}
void
Py_SetRecursionLimit(int new_limit)
{
- struct _ceval_runtime_state *ceval = &_PyRuntime.ceval;
- ceval->recursion_limit = new_limit;
- _Py_CheckRecursionLimit = ceval->recursion_limit;
+ PyThreadState *tstate = _PyThreadState_GET();
+ tstate->interp->ceval.recursion_limit = new_limit;
+ if (_Py_IsMainInterpreter(tstate)) {
+ _Py_CheckRecursionLimit = new_limit;
+ }
}
-/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
+/* The function _Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
if the recursion_depth reaches _Py_CheckRecursionLimit.
If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
to guarantee that _Py_CheckRecursiveCall() is regularly called.
Without USE_STACKCHECK, there is no need for this. */
int
-_Py_CheckRecursiveCall(const char *where)
+_Py_CheckRecursiveCall(PyThreadState *tstate, const char *where)
{
- _PyRuntimeState *runtime = &_PyRuntime;
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- int recursion_limit = runtime->ceval.recursion_limit;
+ int recursion_limit = tstate->interp->ceval.recursion_limit;
#ifdef USE_STACKCHECK
tstate->stackcheck_counter = 0;
@@ -682,8 +788,10 @@
_PyErr_SetString(tstate, PyExc_MemoryError, "Stack overflow");
return -1;
}
- /* Needed for ABI backwards-compatibility (see bpo-31857) */
- _Py_CheckRecursionLimit = recursion_limit;
+ if (_Py_IsMainInterpreter(tstate)) {
+ /* Needed for ABI backwards-compatibility (see bpo-31857) */
+ _Py_CheckRecursionLimit = recursion_limit;
+ }
#endif
if (tstate->recursion_critical)
/* Somebody asked that we don't check for recursion. */
@@ -727,23 +835,90 @@
/* Interpreter main loop */
PyObject *
-PyEval_EvalFrame(PyFrameObject *f) {
- /* This is for backward compatibility with extension modules that
- used this API; core interpreter code should call
- PyEval_EvalFrameEx() */
- return PyEval_EvalFrameEx(f, 0);
+PyEval_EvalFrame(PyFrameObject *f)
+{
+ /* Function kept for backward compatibility */
+ PyThreadState *tstate = _PyThreadState_GET();
+ return _PyEval_EvalFrame(tstate, f, 0);
}
PyObject *
PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- return interp->eval_frame(f, throwflag);
+ PyThreadState *tstate = _PyThreadState_GET();
+ return _PyEval_EvalFrame(tstate, f, throwflag);
+}
+
+
+/* Handle signals, pending calls, GIL drop request
+ and asynchronous exception */
+static int
+eval_frame_handle_pending(PyThreadState *tstate)
+{
+ _PyRuntimeState * const runtime = &_PyRuntime;
+ struct _ceval_runtime_state *ceval = &runtime->ceval;
+
+ /* Pending signals */
+ if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
+ if (handle_signals(tstate) != 0) {
+ return -1;
+ }
+ }
+
+ /* Pending calls */
+ struct _ceval_state *ceval2 = &tstate->interp->ceval;
+ if (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)) {
+ if (make_pending_calls(tstate) != 0) {
+ return -1;
+ }
+ }
+
+ /* GIL drop request */
+ if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request)) {
+ /* Give another thread a chance */
+ if (_PyThreadState_Swap(&runtime->gilstate, NULL) != tstate) {
+ Py_FatalError("tstate mix-up");
+ }
+ drop_gil(ceval, ceval2, tstate);
+
+ /* Other threads may run now */
+
+ take_gil(tstate);
+
+ if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
+ Py_FatalError("orphan tstate");
+ }
+ }
+
+ /* Check for asynchronous exception. */
+ if (tstate->async_exc != NULL) {
+ PyObject *exc = tstate->async_exc;
+ tstate->async_exc = NULL;
+ UNSIGNAL_ASYNC_EXC(tstate->interp);
+ _PyErr_SetNone(tstate, exc);
+ Py_DECREF(exc);
+ return -1;
+ }
+
+#ifdef MS_WINDOWS
+ // bpo-42296: On Windows, _PyEval_SignalReceived() can be called in a
+ // different thread than the Python thread, in which case
+ // _Py_ThreadCanHandleSignals() is wrong. Recompute eval_breaker in the
+ // current Python thread with the correct _Py_ThreadCanHandleSignals()
+ // value. It prevents to interrupt the eval loop at every instruction if
+ // the current Python thread cannot handle signals (if
+ // _Py_ThreadCanHandleSignals() is false).
+ COMPUTE_EVAL_BREAKER(tstate->interp, ceval, ceval2);
+#endif
+
+ return 0;
}
PyObject* _Py_HOT_FUNCTION
-_PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
+_PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
{
+ _Py_EnsureTstateNotNULL(tstate);
+
#ifdef DXPAIRS
int lastopcode = 0;
#endif
@@ -753,10 +928,8 @@
int oparg; /* Current opcode argument, if any */
PyObject **fastlocals, **freevars;
PyObject *retval = NULL; /* Return value */
- _PyRuntimeState * const runtime = &_PyRuntime;
- PyThreadState * const tstate = _PyRuntimeState_GetThreadState(runtime);
- struct _ceval_runtime_state * const ceval = &runtime->ceval;
- _Py_atomic_int * const eval_breaker = &ceval->eval_breaker;
+ struct _ceval_state * const ceval2 = &tstate->interp->ceval;
+ _Py_atomic_int * const eval_breaker = &ceval2->eval_breaker;
PyCodeObject *co;
/* when tracing we set things up so that
@@ -844,7 +1017,7 @@
#ifdef LLTRACE
#define FAST_DISPATCH() \
{ \
- if (!lltrace && !_Py_TracingPossible(ceval) && !PyDTrace_LINE_ENABLED()) { \
+ if (!lltrace && !_Py_TracingPossible(ceval2) && !PyDTrace_LINE_ENABLED()) { \
f->f_lasti = INSTR_OFFSET(); \
NEXTOPARG(); \
goto *opcode_targets[opcode]; \
@@ -854,7 +1027,7 @@
#else
#define FAST_DISPATCH() \
{ \
- if (!_Py_TracingPossible(ceval) && !PyDTrace_LINE_ENABLED()) { \
+ if (!_Py_TracingPossible(ceval2) && !PyDTrace_LINE_ENABLED()) { \
f->f_lasti = INSTR_OFFSET(); \
NEXTOPARG(); \
goto *opcode_targets[opcode]; \
@@ -926,21 +1099,23 @@
*/
+#define PREDICT_ID(op) PRED_##op
+
#if defined(DYNAMIC_EXECUTION_PROFILE) || USE_COMPUTED_GOTOS
-#define PREDICT(op) if (0) goto PRED_##op
+#define PREDICT(op) if (0) goto PREDICT_ID(op)
#else
#define PREDICT(op) \
- do{ \
+ do { \
_Py_CODEUNIT word = *next_instr; \
opcode = _Py_OPCODE(word); \
- if (opcode == op){ \
+ if (opcode == op) { \
oparg = _Py_OPARG(word); \
next_instr++; \
- goto PRED_##op; \
+ goto PREDICT_ID(op); \
} \
} while(0)
#endif
-#define PREDICTED(op) PRED_##op:
+#define PREDICTED(op) PREDICT_ID(op):
/* Stack manipulation macros */
@@ -1077,8 +1252,9 @@
/* Start of code */
/* push frame */
- if (Py_EnterRecursiveCall(""))
+ if (_Py_EnterRecursiveCall(tstate, "")) {
return NULL;
+ }
tstate->frame = f;
@@ -1178,7 +1354,7 @@
goto error;
#ifdef Py_DEBUG
- /* PyEval_EvalFrameEx() must not be called with an exception set,
+ /* _PyEval_EvalFrameDefault() must not be called with an exception set,
because it can clear it (directly or indirectly) and so the
caller loses its exception */
assert(!_PyErr_Occurred(tstate));
@@ -1193,7 +1369,7 @@
/* Do periodic things. Doing this every time through
the loop would add too much overhead, so we do it
only every Nth instruction. We also do it if
- ``pendingcalls_to_do'' is set, i.e. when an asynchronous
+ ``pending.calls_to_do'' is set, i.e. when an asynchronous
event needs attention (e.g. a signal handler or
async I/O handler); see Py_AddPendingCall() and
Py_MakePendingCalls() above. */
@@ -1223,42 +1399,7 @@
goto fast_next_opcode;
}
- if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
- if (handle_signals(runtime) != 0) {
- goto error;
- }
- }
- if (_Py_atomic_load_relaxed(&ceval->pending.calls_to_do)) {
- if (make_pending_calls(runtime) != 0) {
- goto error;
- }
- }
-
- if (_Py_atomic_load_relaxed(&ceval->gil_drop_request)) {
- /* Give another thread a chance */
- if (_PyThreadState_Swap(&runtime->gilstate, NULL) != tstate) {
- Py_FatalError("ceval: tstate mix-up");
- }
- drop_gil(ceval, tstate);
-
- /* Other threads may run now */
-
- take_gil(ceval, tstate);
-
- /* Check if we should make a quick exit. */
- exit_thread_if_finalizing(runtime, tstate);
-
- if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
- Py_FatalError("ceval: orphan tstate");
- }
- }
- /* Check for asynchronous exceptions. */
- if (tstate->async_exc != NULL) {
- PyObject *exc = tstate->async_exc;
- tstate->async_exc = NULL;
- UNSIGNAL_ASYNC_EXC(ceval);
- _PyErr_SetNone(tstate, exc);
- Py_DECREF(exc);
+ if (eval_frame_handle_pending(tstate) != 0) {
goto error;
}
}
@@ -1271,7 +1412,7 @@
/* line-by-line tracing support */
- if (_Py_TracingPossible(ceval) &&
+ if (_Py_TracingPossible(ceval2) &&
tstate->c_tracefunc != NULL && !tstate->tracing) {
int err;
/* see maybe_call_line_trace
@@ -1878,7 +2019,7 @@
Py_DECREF(value);
goto error;
}
- res = PyObject_CallFunctionObjArgs(hook, value, NULL);
+ res = PyObject_CallOneArg(hook, value);
Py_DECREF(value);
if (res == NULL)
goto error;
@@ -1911,7 +2052,8 @@
case TARGET(RETURN_VALUE): {
retval = POP();
assert(f->f_iblock == 0);
- goto exit_returning;
+ assert(EMPTY());
+ goto exiting;
}
case TARGET(GET_AITER): {
@@ -2015,7 +2157,12 @@
PyObject *iter = _PyCoro_GetAwaitableIter(iterable);
if (iter == NULL) {
+ int opcode_at_minus_3 = 0;
+ if ((next_instr - first_instr) > 2) {
+ opcode_at_minus_3 = _Py_OPCODE(next_instr[-3]);
+ }
format_awaitable_error(tstate, Py_TYPE(iterable),
+ opcode_at_minus_3,
_Py_OPCODE(next_instr[-2]));
}
@@ -2056,7 +2203,7 @@
if (v == Py_None)
retval = Py_TYPE(receiver)->tp_iternext(receiver);
else
- retval = _PyObject_CallMethodIdObjArgs(receiver, &PyId_send, v, NULL);
+ retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v);
}
Py_DECREF(v);
if (retval == NULL) {
@@ -2076,7 +2223,7 @@
/* and repeat... */
assert(f->f_lasti >= (int)sizeof(_Py_CODEUNIT));
f->f_lasti -= sizeof(_Py_CODEUNIT);
- goto exit_yielding;
+ goto exiting;
}
case TARGET(YIELD_VALUE): {
@@ -2093,7 +2240,7 @@
}
f->f_stacktop = stack_pointer;
- goto exit_yielding;
+ goto exiting;
}
case TARGET(POP_EXCEPT): {
@@ -2126,104 +2273,13 @@
DISPATCH();
}
- case TARGET(POP_FINALLY): {
- /* If oparg is 0 at the top of the stack are 1 or 6 values:
- Either:
- - TOP = NULL or an integer
- or:
- - (TOP, SECOND, THIRD) = exc_info()
- - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
-
- If oparg is 1 the value for 'return' was additionally pushed
- at the top of the stack.
- */
- PyObject *res = NULL;
- if (oparg) {
- res = POP();
- }
+ case TARGET(RERAISE): {
PyObject *exc = POP();
- if (exc == NULL || PyLong_CheckExact(exc)) {
- Py_XDECREF(exc);
- }
- else {
- Py_DECREF(exc);
- Py_DECREF(POP());
- Py_DECREF(POP());
-
- PyObject *type, *value, *traceback;
- _PyErr_StackItem *exc_info;
- PyTryBlock *b = PyFrame_BlockPop(f);
- if (b->b_type != EXCEPT_HANDLER) {
- _PyErr_SetString(tstate, PyExc_SystemError,
- "popped block is not an except handler");
- Py_XDECREF(res);
- goto error;
- }
- assert(STACK_LEVEL() == (b)->b_level + 3);
- exc_info = tstate->exc_info;
- type = exc_info->exc_type;
- value = exc_info->exc_value;
- traceback = exc_info->exc_traceback;
- exc_info->exc_type = POP();
- exc_info->exc_value = POP();
- exc_info->exc_traceback = POP();
- Py_XDECREF(type);
- Py_XDECREF(value);
- Py_XDECREF(traceback);
- }
- if (oparg) {
- PUSH(res);
- }
- DISPATCH();
- }
-
- case TARGET(CALL_FINALLY): {
- PyObject *ret = PyLong_FromLong(INSTR_OFFSET());
- if (ret == NULL) {
- goto error;
- }
- PUSH(ret);
- JUMPBY(oparg);
- FAST_DISPATCH();
- }
-
- case TARGET(BEGIN_FINALLY): {
- /* Push NULL onto the stack for using it in END_FINALLY,
- POP_FINALLY, WITH_CLEANUP_START and WITH_CLEANUP_FINISH.
- */
- PUSH(NULL);
- FAST_DISPATCH();
- }
-
- case TARGET(END_FINALLY): {
- PREDICTED(END_FINALLY);
- /* At the top of the stack are 1 or 6 values:
- Either:
- - TOP = NULL or an integer
- or:
- - (TOP, SECOND, THIRD) = exc_info()
- - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
- */
- PyObject *exc = POP();
- if (exc == NULL) {
- FAST_DISPATCH();
- }
- else if (PyLong_CheckExact(exc)) {
- int ret = _PyLong_AsInt(exc);
- Py_DECREF(exc);
- if (ret == -1 && _PyErr_Occurred(tstate)) {
- goto error;
- }
- JUMPTO(ret);
- FAST_DISPATCH();
- }
- else {
- assert(PyExceptionClass_Check(exc));
- PyObject *val = POP();
- PyObject *tb = POP();
- _PyErr_Restore(tstate, exc, val, tb);
- goto exception_unwind;
- }
+ PyObject *val = POP();
+ PyObject *tb = POP();
+ assert(PyExceptionClass_Check(exc));
+ _PyErr_Restore(tstate, exc, val, tb);
+ goto exception_unwind;
}
case TARGET(END_ASYNC_FOR): {
@@ -2246,6 +2302,13 @@
}
}
+ case TARGET(LOAD_ASSERTION_ERROR): {
+ PyObject *value = PyExc_AssertionError;
+ Py_INCREF(value);
+ PUSH(value);
+ FAST_DISPATCH();
+ }
+
case TARGET(LOAD_BUILD_CLASS): {
_Py_IDENTIFIER(__build_class__);
@@ -2698,46 +2761,46 @@
DISPATCH();
}
- case TARGET(BUILD_TUPLE_UNPACK_WITH_CALL):
- case TARGET(BUILD_TUPLE_UNPACK):
- case 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)
+ case TARGET(LIST_TO_TUPLE): {
+ PyObject *list = POP();
+ PyObject *tuple = PyList_AsTuple(list);
+ Py_DECREF(list);
+ if (tuple == NULL) {
goto error;
+ }
+ PUSH(tuple);
+ DISPATCH();
+ }
- for (i = oparg; i > 0; i--) {
- PyObject *none_val;
-
- none_val = _PyList_Extend((PyListObject *)sum, PEEK(i));
- if (none_val == NULL) {
- if (opcode == BUILD_TUPLE_UNPACK_WITH_CALL &&
- _PyErr_ExceptionMatches(tstate, PyExc_TypeError))
- {
- check_args_iterable(tstate, PEEK(1 + oparg), PEEK(i));
- }
- Py_DECREF(sum);
- goto error;
+ case TARGET(LIST_EXTEND): {
+ PyObject *iterable = POP();
+ PyObject *list = PEEK(oparg);
+ PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable);
+ if (none_val == NULL) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
+ (Py_TYPE(iterable)->tp_iter == NULL && !PySequence_Check(iterable)))
+ {
+ _PyErr_Clear(tstate);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "Value after * must be an iterable, not %.200s",
+ Py_TYPE(iterable)->tp_name);
}
- Py_DECREF(none_val);
+ Py_DECREF(iterable);
+ goto error;
}
+ Py_DECREF(none_val);
+ Py_DECREF(iterable);
+ DISPATCH();
+ }
- if (convert_to_tuple) {
- return_value = PyList_AsTuple(sum);
- Py_DECREF(sum);
- if (return_value == NULL)
- goto error;
+ case TARGET(SET_UPDATE): {
+ PyObject *iterable = POP();
+ PyObject *set = PEEK(oparg);
+ int err = _PySet_Update(set, iterable);
+ Py_DECREF(iterable);
+ if (err < 0) {
+ goto error;
}
- else {
- return_value = sum;
- }
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(return_value);
DISPATCH();
}
@@ -2762,25 +2825,6 @@
DISPATCH();
}
- case TARGET(BUILD_SET_UNPACK): {
- Py_ssize_t i;
- PyObject *sum = PySet_New(NULL);
- if (sum == NULL)
- goto error;
-
- for (i = oparg; i > 0; i--) {
- if (_PySet_Update(sum, PEEK(i)) < 0) {
- Py_DECREF(sum);
- goto error;
- }
- }
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(sum);
- DISPATCH();
- }
-
case TARGET(BUILD_MAP): {
Py_ssize_t i;
PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg);
@@ -2897,49 +2941,33 @@
DISPATCH();
}
- case 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(tstate, PyExc_AttributeError)) {
- _PyErr_Format(tstate, PyExc_TypeError,
- "'%.200s' object is not a mapping",
- arg->ob_type->tp_name);
- }
- Py_DECREF(sum);
- goto error;
+ case TARGET(DICT_UPDATE): {
+ PyObject *update = POP();
+ PyObject *dict = PEEK(oparg);
+ if (PyDict_Update(dict, update) < 0) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "'%.200s' object is not a mapping",
+ Py_TYPE(update)->tp_name);
}
+ Py_DECREF(update);
+ goto error;
}
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(sum);
+ Py_DECREF(update);
DISPATCH();
}
- case TARGET(BUILD_MAP_UNPACK_WITH_CALL): {
- Py_ssize_t i;
- PyObject *sum = PyDict_New();
- if (sum == NULL)
+ case TARGET(DICT_MERGE): {
+ PyObject *update = POP();
+ PyObject *dict = PEEK(oparg);
+
+ if (_PyDict_MergeEx(dict, update, 2) < 0) {
+ format_kwargs_error(tstate, PEEK(2 + oparg), update);
+ Py_DECREF(update);
goto error;
-
- for (i = oparg; i > 0; i--) {
- PyObject *arg = PEEK(i);
- if (_PyDict_MergeEx(sum, arg, 2) < 0) {
- Py_DECREF(sum);
- format_kwargs_error(tstate, PEEK(2 + oparg), arg);
- goto error;
- }
}
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(sum);
+ Py_DECREF(update);
+ PREDICT(CALL_FUNCTION_EX);
DISPATCH();
}
@@ -2972,12 +3000,13 @@
}
case TARGET(COMPARE_OP): {
+ assert(oparg <= Py_GE);
PyObject *right = POP();
PyObject *left = TOP();
- PyObject *res = cmp_outcome(tstate, oparg, left, right);
+ PyObject *res = PyObject_RichCompare(left, right, oparg);
+ SET_TOP(res);
Py_DECREF(left);
Py_DECREF(right);
- SET_TOP(res);
if (res == NULL)
goto error;
PREDICT(POP_JUMP_IF_FALSE);
@@ -2985,6 +3014,81 @@
DISPATCH();
}
+ case TARGET(IS_OP): {
+ PyObject *right = POP();
+ PyObject *left = TOP();
+ int res = (left == right)^oparg;
+ PyObject *b = res ? Py_True : Py_False;
+ Py_INCREF(b);
+ SET_TOP(b);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ PREDICT(POP_JUMP_IF_FALSE);
+ PREDICT(POP_JUMP_IF_TRUE);
+ FAST_DISPATCH();
+ }
+
+ case TARGET(CONTAINS_OP): {
+ PyObject *right = POP();
+ PyObject *left = POP();
+ int res = PySequence_Contains(right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) {
+ goto error;
+ }
+ PyObject *b = (res^oparg) ? Py_True : Py_False;
+ Py_INCREF(b);
+ PUSH(b);
+ PREDICT(POP_JUMP_IF_FALSE);
+ PREDICT(POP_JUMP_IF_TRUE);
+ FAST_DISPATCH();
+ }
+
+#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
+ "BaseException is not allowed"
+
+ case TARGET(JUMP_IF_NOT_EXC_MATCH): {
+ PyObject *right = POP();
+ PyObject *left = POP();
+ if (PyTuple_Check(right)) {
+ Py_ssize_t i, length;
+ length = PyTuple_GET_SIZE(right);
+ for (i = 0; i < length; i++) {
+ PyObject *exc = PyTuple_GET_ITEM(right, i);
+ if (!PyExceptionClass_Check(exc)) {
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ CANNOT_CATCH_MSG);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ goto error;
+ }
+ }
+ }
+ else {
+ if (!PyExceptionClass_Check(right)) {
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ CANNOT_CATCH_MSG);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ goto error;
+ }
+ }
+ int res = PyErr_GivenExceptionMatches(left, right);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res > 0) {
+ /* Exception matches -- Do nothing */;
+ }
+ else if (res == 0) {
+ JUMPTO(oparg);
+ }
+ else {
+ goto error;
+ }
+ DISPATCH();
+ }
+
case TARGET(IMPORT_NAME): {
PyObject *name = GETITEM(names, oparg);
PyObject *fromlist = POP();
@@ -3199,7 +3303,7 @@
PREDICTED(FOR_ITER);
/* before: [iter]; after: [iter, iter()] *or* [] */
PyObject *iter = TOP();
- PyObject *next = (*iter->ob_type->tp_iternext)(iter);
+ PyObject *next = (*Py_TYPE(iter)->tp_iternext)(iter);
if (next != NULL) {
PUSH(next);
PREDICT(STORE_FAST);
@@ -3224,31 +3328,27 @@
}
case 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.
- */
-
PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg,
STACK_LEVEL());
DISPATCH();
}
case TARGET(BEFORE_ASYNC_WITH): {
- _Py_IDENTIFIER(__aexit__);
_Py_IDENTIFIER(__aenter__);
-
+ _Py_IDENTIFIER(__aexit__);
PyObject *mgr = TOP();
- PyObject *exit = special_lookup(tstate, mgr, &PyId___aexit__),
- *enter;
+ PyObject *enter = special_lookup(tstate, mgr, &PyId___aenter__);
PyObject *res;
- if (exit == NULL)
+ if (enter == NULL) {
goto error;
+ }
+ PyObject *exit = special_lookup(tstate, mgr, &PyId___aexit__);
+ if (exit == NULL) {
+ Py_DECREF(enter);
+ goto error;
+ }
SET_TOP(exit);
- enter = special_lookup(tstate, mgr, &PyId___aenter__);
Py_DECREF(mgr);
- if (enter == NULL)
- goto error;
res = _PyObject_CallNoArg(enter);
Py_DECREF(enter);
if (res == NULL)
@@ -3269,8 +3369,8 @@
}
case TARGET(SETUP_WITH): {
- _Py_IDENTIFIER(__exit__);
_Py_IDENTIFIER(__enter__);
+ _Py_IDENTIFIER(__exit__);
PyObject *mgr = TOP();
PyObject *enter = special_lookup(tstate, mgr, &PyId___enter__);
PyObject *res;
@@ -3297,113 +3397,31 @@
DISPATCH();
}
- case TARGET(WITH_CLEANUP_START): {
- /* At the top of the stack are 1 or 6 values indicating
- how/why we entered the finally clause:
- - TOP = NULL
+ case TARGET(WITH_EXCEPT_START): {
+ /* At the top of the stack are 7 values:
- (TOP, SECOND, THIRD) = exc_info()
- (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
- Below them is EXIT, the context.__exit__ or context.__aexit__
- bound method.
- In the first case, we must call
- EXIT(None, None, None)
- otherwise we must call
- EXIT(TOP, SECOND, THIRD)
-
- In the first case, we remove EXIT from the
- stack, leaving TOP, and push TOP on the stack.
- Otherwise we shift the bottom 3 values of the
- stack down, replace the empty spot with NULL, and push
- None on the stack.
-
- Finally we push the result of the call.
+ - (FOURTH, FIFTH, SIXTH) = previous exception for EXCEPT_HANDLER
+ - SEVENTH: the context.__exit__ bound method
+ We call SEVENTH(TOP, SECOND, THIRD).
+ Then we push again the TOP exception and the __exit__
+ return value.
*/
- PyObject *stack[3];
PyObject *exit_func;
PyObject *exc, *val, *tb, *res;
- val = tb = Py_None;
exc = TOP();
- if (exc == NULL) {
- STACK_SHRINK(1);
- exit_func = TOP();
- SET_TOP(exc);
- exc = Py_None;
- }
- else {
- assert(PyExceptionClass_Check(exc));
- PyObject *tp2, *exc2, *tb2;
- PyTryBlock *block;
- val = SECOND();
- tb = THIRD();
- tp2 = FOURTH();
- exc2 = PEEK(5);
- tb2 = PEEK(6);
- exit_func = PEEK(7);
- SET_VALUE(7, tb2);
- SET_VALUE(6, exc2);
- SET_VALUE(5, tp2);
- /* UNWIND_EXCEPT_HANDLER will pop this off. */
- SET_FOURTH(NULL);
- /* We just shifted the stack down, so we have
- to tell the except handler block that the
- values are lower than it expects. */
- assert(f->f_iblock > 0);
- block = &f->f_blockstack[f->f_iblock - 1];
- assert(block->b_type == EXCEPT_HANDLER);
- assert(block->b_level > 0);
- block->b_level--;
- }
-
- stack[0] = exc;
- stack[1] = val;
- stack[2] = tb;
- res = _PyObject_FastCall(exit_func, stack, 3);
- Py_DECREF(exit_func);
+ val = SECOND();
+ tb = THIRD();
+ assert(exc != Py_None);
+ assert(!PyLong_Check(exc));
+ exit_func = PEEK(7);
+ PyObject *stack[4] = {NULL, exc, val, tb};
+ res = PyObject_Vectorcall(exit_func, stack + 1,
+ 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
if (res == NULL)
goto error;
- Py_INCREF(exc); /* Duplicating the exception on the stack */
- PUSH(exc);
PUSH(res);
- PREDICT(WITH_CLEANUP_FINISH);
- DISPATCH();
- }
-
- case TARGET(WITH_CLEANUP_FINISH): {
- PREDICTED(WITH_CLEANUP_FINISH);
- /* TOP = the result of calling the context.__exit__ bound method
- SECOND = either None or exception type
-
- If SECOND is None below is NULL or the return address,
- otherwise below are 7 values representing an exception.
- */
- PyObject *res = POP();
- PyObject *exc = POP();
- int err;
-
- if (exc != Py_None)
- err = PyObject_IsTrue(res);
- else
- err = 0;
-
- Py_DECREF(res);
- Py_DECREF(exc);
-
- if (err < 0)
- goto error;
- else if (err > 0) {
- /* There was an exception and a True return.
- * We must manually unwind the EXCEPT_HANDLER block
- * which was created when the exception was caught,
- * otherwise the stack will be in an inconsistent state.
- */
- PyTryBlock *b = PyFrame_BlockPop(f);
- assert(b->b_type == EXCEPT_HANDLER);
- UNWIND_EXCEPT_HANDLER(b);
- PUSH(NULL);
- }
- PREDICT(END_FINALLY);
DISPATCH();
}
@@ -3510,7 +3528,9 @@
PyObject **sp, *res, *names;
names = POP();
- assert(PyTuple_CheckExact(names) && PyTuple_GET_SIZE(names) <= oparg);
+ assert(PyTuple_Check(names));
+ assert(PyTuple_GET_SIZE(names) <= oparg);
+ /* We assume without checking that names contains only strings */
sp = stack_pointer;
res = call_function(tstate, &sp, oparg, names);
stack_pointer = sp;
@@ -3524,6 +3544,7 @@
}
case TARGET(CALL_FUNCTION_EX): {
+ PREDICTED(CALL_FUNCTION_EX);
PyObject *func, *callargs, *kwargs = NULL, *result;
if (oparg & 0x01) {
kwargs = POP();
@@ -3770,6 +3791,16 @@
PUSH(val);
PUSH(exc);
JUMPTO(handler);
+ if (_Py_TracingPossible(ceval2)) {
+ int needs_new_execution_window = (f->f_lasti < instr_lb || f->f_lasti >= instr_ub);
+ int needs_line_update = (f->f_lasti == instr_lb || f->f_lasti < instr_prev);
+ /* Make sure that we trace line after exception if we are in a new execution
+ * window or we don't need a line update and we are not in the first instruction
+ * of the line. */
+ if (needs_new_execution_window || (!needs_line_update && instr_lb > 0)) {
+ instr_prev = INT_MAX;
+ }
+ }
/* Resume normal execution */
goto main_loop;
}
@@ -3782,15 +3813,13 @@
assert(retval == NULL);
assert(_PyErr_Occurred(tstate));
-exit_returning:
-
/* Pop remaining stack entries. */
while (!EMPTY()) {
PyObject *o = POP();
Py_XDECREF(o);
}
-exit_yielding:
+exiting:
if (tstate->use_tracing) {
if (tstate->c_tracefunc) {
if (call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj,
@@ -3810,11 +3839,11 @@
exit_eval_frame:
if (PyDTrace_FUNCTION_RETURN_ENABLED())
dtrace_function_return(f);
- Py_LeaveRecursiveCall();
+ _Py_LeaveRecursiveCall(tstate);
f->f_executing = 0;
tstate->frame = f->f_back;
- return _Py_CheckFunctionResult(NULL, retval, "PyEval_EvalFrameEx");
+ return _Py_CheckFunctionResult(tstate, NULL, retval, __func__);
}
static void
@@ -4042,7 +4071,8 @@
the test in the if statements in Misc/gdbinit (pystack and pystackv). */
PyObject *
-_PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
+_PyEval_EvalCode(PyThreadState *tstate,
+ PyObject *_co, PyObject *globals, PyObject *locals,
PyObject *const *args, Py_ssize_t argcount,
PyObject *const *kwnames, PyObject *const *kwargs,
Py_ssize_t kwcount, int kwstep,
@@ -4050,6 +4080,8 @@
PyObject *kwdefs, PyObject *closure,
PyObject *name, PyObject *qualname)
{
+ assert(is_tstate_valid(tstate));
+
PyCodeObject* co = (PyCodeObject*)_co;
PyFrameObject *f;
PyObject *retval = NULL;
@@ -4059,9 +4091,6 @@
Py_ssize_t i, j, n;
PyObject *kwdict;
- PyThreadState *tstate = _PyThreadState_GET();
- assert(tstate != NULL);
-
if (globals == NULL) {
_PyErr_SetString(tstate, PyExc_SystemError,
"PyEval_EvalCodeEx: NULL globals");
@@ -4295,7 +4324,7 @@
return gen;
}
- retval = PyEval_EvalFrameEx(f,0);
+ retval = _PyEval_EvalFrame(tstate, f, 0);
fail: /* Jump here from prelude on failure */
@@ -4304,7 +4333,6 @@
current Python frame (f), the associated C stack is still in use,
so recursion_depth must be boosted for the duration.
*/
- assert(tstate != NULL);
if (Py_REFCNT(f) > 1) {
Py_DECREF(f);
_PyObject_GC_TRACK(f);
@@ -4317,6 +4345,26 @@
return retval;
}
+
+PyObject *
+_PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,
+ PyObject *const *args, Py_ssize_t argcount,
+ PyObject *const *kwnames, PyObject *const *kwargs,
+ Py_ssize_t kwcount, int kwstep,
+ PyObject *const *defs, Py_ssize_t defcount,
+ PyObject *kwdefs, PyObject *closure,
+ PyObject *name, PyObject *qualname)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return _PyEval_EvalCode(tstate, _co, globals, locals,
+ args, argcount,
+ kwnames, kwargs,
+ kwcount, kwstep,
+ defs, defcount,
+ kwdefs, closure,
+ name, qualname);
+}
+
PyObject *
PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
PyObject *const *args, int argcount,
@@ -4339,7 +4387,7 @@
PyObject *res;
res = _PyObject_LookupSpecial(o, id);
if (res == NULL && !_PyErr_Occurred(tstate)) {
- _PyErr_SetObject(tstate, PyExc_AttributeError, id->object);
+ _PyErr_SetObject(tstate, PyExc_AttributeError, _PyUnicode_FromId(id));
return NULL;
}
return res;
@@ -4432,7 +4480,7 @@
}
_PyErr_SetObject(tstate, type, value);
- /* PyErr_SetObject incref's its arguments */
+ /* _PyErr_SetObject incref's its arguments */
Py_DECREF(value);
Py_DECREF(type);
return 0;
@@ -4466,11 +4514,11 @@
it = PyObject_GetIter(v);
if (it == NULL) {
if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
- v->ob_type->tp_iter == NULL && !PySequence_Check(v))
+ Py_TYPE(v)->tp_iter == NULL && !PySequence_Check(v))
{
_PyErr_Format(tstate, PyExc_TypeError,
"cannot unpack non-iterable %.200s object",
- v->ob_type->tp_name);
+ Py_TYPE(v)->tp_name);
}
return 0;
}
@@ -4533,7 +4581,7 @@
*--sp = PyList_GET_ITEM(l, ll - j);
}
/* Resize the list. */
- Py_SIZE(l) = ll - argcntafter;
+ Py_SET_SIZE(l, ll - argcntafter);
Py_DECREF(it);
return 1;
@@ -4682,58 +4730,97 @@
return result;
}
+int
+_PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
+{
+ assert(is_tstate_valid(tstate));
+ /* The caller must hold the GIL */
+ assert(PyGILState_Check());
+
+ /* Call _PySys_Audit() in the context of the current thread state,
+ even if tstate is not the current thread state. */
+ PyThreadState *current_tstate = _PyThreadState_GET();
+ if (_PySys_Audit(current_tstate, "sys.setprofile", NULL) < 0) {
+ return -1;
+ }
+
+ PyObject *profileobj = tstate->c_profileobj;
+
+ tstate->c_profilefunc = NULL;
+ tstate->c_profileobj = NULL;
+ /* Must make sure that tracing is not ignored if 'profileobj' is freed */
+ tstate->use_tracing = tstate->c_tracefunc != NULL;
+ Py_XDECREF(profileobj);
+
+ Py_XINCREF(arg);
+ tstate->c_profileobj = arg;
+ tstate->c_profilefunc = func;
+
+ /* Flag that tracing or profiling is turned on */
+ tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
+ return 0;
+}
+
void
PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
{
- if (PySys_Audit("sys.setprofile", NULL) < 0) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (_PyEval_SetProfile(tstate, func, arg) < 0) {
+ /* Log _PySys_Audit() error */
_PyErr_WriteUnraisableMsg("in PyEval_SetProfile", NULL);
- return;
+ }
+}
+
+int
+_PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg)
+{
+ assert(is_tstate_valid(tstate));
+ /* The caller must hold the GIL */
+ assert(PyGILState_Check());
+
+ /* Call _PySys_Audit() in the context of the current thread state,
+ even if tstate is not the current thread state. */
+ PyThreadState *current_tstate = _PyThreadState_GET();
+ if (_PySys_Audit(current_tstate, "sys.settrace", NULL) < 0) {
+ return -1;
}
- PyThreadState *tstate = _PyThreadState_GET();
- PyObject *temp = tstate->c_profileobj;
+ struct _ceval_state *ceval2 = &tstate->interp->ceval;
+ PyObject *traceobj = tstate->c_traceobj;
+ ceval2->tracing_possible += (func != NULL) - (tstate->c_tracefunc != NULL);
+
+ tstate->c_tracefunc = NULL;
+ tstate->c_traceobj = NULL;
+ /* Must make sure that profiling is not ignored if 'traceobj' is freed */
+ tstate->use_tracing = (tstate->c_profilefunc != NULL);
+ Py_XDECREF(traceobj);
+
Py_XINCREF(arg);
- tstate->c_profilefunc = NULL;
- tstate->c_profileobj = NULL;
- /* Must make sure that tracing is not ignored if 'temp' is freed */
- tstate->use_tracing = tstate->c_tracefunc != NULL;
- Py_XDECREF(temp);
- tstate->c_profilefunc = func;
- tstate->c_profileobj = arg;
+ tstate->c_traceobj = arg;
+ tstate->c_tracefunc = func;
+
/* Flag that tracing or profiling is turned on */
- tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
+ tstate->use_tracing = ((func != NULL)
+ || (tstate->c_profilefunc != NULL));
+
+ return 0;
}
void
PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
{
- if (PySys_Audit("sys.settrace", NULL) < 0) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (_PyEval_SetTrace(tstate, func, arg) < 0) {
+ /* Log _PySys_Audit() error */
_PyErr_WriteUnraisableMsg("in PyEval_SetTrace", NULL);
- return;
}
-
- _PyRuntimeState *runtime = &_PyRuntime;
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- PyObject *temp = tstate->c_traceobj;
- runtime->ceval.tracing_possible += (func != NULL) - (tstate->c_tracefunc != NULL);
- Py_XINCREF(arg);
- tstate->c_tracefunc = NULL;
- tstate->c_traceobj = NULL;
- /* Must make sure that profiling is not ignored if 'temp' is freed */
- tstate->use_tracing = tstate->c_profilefunc != NULL;
- Py_XDECREF(temp);
- tstate->c_tracefunc = func;
- tstate->c_traceobj = arg;
- /* Flag that tracing or profiling is turned on */
- tstate->use_tracing = ((func != NULL)
- || (tstate->c_profilefunc != NULL));
}
+
void
-_PyEval_SetCoroutineOriginTrackingDepth(int new_depth)
+_PyEval_SetCoroutineOriginTrackingDepth(PyThreadState *tstate, int new_depth)
{
assert(new_depth >= 0);
- PyThreadState *tstate = _PyThreadState_GET();
tstate->coroutine_origin_tracking_depth = new_depth;
}
@@ -4744,6 +4831,20 @@
return tstate->coroutine_origin_tracking_depth;
}
+int
+_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+
+ if (_PySys_Audit(tstate, "sys.set_asyncgen_hook_firstiter", NULL) < 0) {
+ return -1;
+ }
+
+ Py_XINCREF(firstiter);
+ Py_XSETREF(tstate->async_gen_firstiter, firstiter);
+ return 0;
+}
+
PyObject *
_PyEval_GetAsyncGenFirstiter(void)
{
@@ -4751,6 +4852,20 @@
return tstate->async_gen_firstiter;
}
+int
+_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+
+ if (_PySys_Audit(tstate, "sys.set_asyncgen_hook_finalizer", NULL) < 0) {
+ return -1;
+ }
+
+ Py_XINCREF(finalizer);
+ Py_XSETREF(tstate->async_gen_finalizer, finalizer);
+ return 0;
+}
+
PyObject *
_PyEval_GetAsyncGenFinalizer(void)
{
@@ -4758,24 +4873,18 @@
return tstate->async_gen_finalizer;
}
-static PyFrameObject *
-_PyEval_GetFrame(PyThreadState *tstate)
-{
- return _PyRuntime.gilstate.getframe(tstate);
-}
-
PyFrameObject *
PyEval_GetFrame(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- return _PyEval_GetFrame(tstate);
+ return tstate->frame;
}
PyObject *
PyEval_GetBuiltins(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+ PyFrameObject *current_frame = tstate->frame;
if (current_frame == NULL)
return tstate->interp->builtins;
else
@@ -4801,7 +4910,7 @@
PyEval_GetLocals(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+ PyFrameObject *current_frame = tstate->frame;
if (current_frame == NULL) {
_PyErr_SetString(tstate, PyExc_SystemError, "frame does not exist");
return NULL;
@@ -4819,7 +4928,7 @@
PyEval_GetGlobals(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+ PyFrameObject *current_frame = tstate->frame;
if (current_frame == NULL) {
return NULL;
}
@@ -4832,7 +4941,7 @@
PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
{
PyThreadState *tstate = _PyThreadState_GET();
- PyFrameObject *current_frame = _PyEval_GetFrame(tstate);
+ PyFrameObject *current_frame = tstate->frame;
int result = cf->cf_flags != 0;
if (current_frame != NULL) {
@@ -4863,7 +4972,7 @@
else if (PyCFunction_Check(func))
return ((PyCFunctionObject*)func)->m_ml->ml_name;
else
- return func->ob_type->tp_name;
+ return Py_TYPE(func)->tp_name;
}
const char *
@@ -4918,11 +5027,11 @@
PyObject *kwnames)
{
PyObject *x;
- if (PyCFunction_Check(func)) {
- C_TRACE(x, _PyObject_Vectorcall(func, args, nargs, kwnames));
+ if (PyCFunction_CheckExact(func) || PyCMethod_CheckExact(func)) {
+ C_TRACE(x, PyObject_Vectorcall(func, args, nargs, kwnames));
return x;
}
- else if (Py_TYPE(func) == &PyMethodDescr_Type && nargs > 0) {
+ else if (Py_IS_TYPE(func, &PyMethodDescr_Type) && nargs > 0) {
/* We need to create a temporary bound method as argument
for profiling.
@@ -4935,13 +5044,13 @@
if (func == NULL) {
return NULL;
}
- C_TRACE(x, _PyObject_Vectorcall(func,
+ C_TRACE(x, PyObject_Vectorcall(func,
args+1, nargs-1,
kwnames));
Py_DECREF(func);
return x;
}
- return _PyObject_Vectorcall(func, args, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+ return PyObject_Vectorcall(func, args, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
}
/* Issue #29227: Inline call_function() into _PyEval_EvalFrameDefault()
@@ -4960,7 +5069,7 @@
x = trace_call_function(tstate, func, stack, nargs, kwnames);
}
else {
- x = _PyObject_Vectorcall(func, stack, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+ x = PyObject_Vectorcall(func, stack, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
}
assert((x != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
@@ -4979,11 +5088,11 @@
{
PyObject *result;
- if (PyCFunction_Check(func)) {
- C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
+ if (PyCFunction_CheckExact(func) || PyCMethod_CheckExact(func)) {
+ C_TRACE(result, PyObject_Call(func, callargs, kwdict));
return result;
}
- else if (Py_TYPE(func) == &PyMethodDescr_Type) {
+ else if (Py_IS_TYPE(func, &PyMethodDescr_Type)) {
Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
if (nargs > 0 && tstate->use_tracing) {
/* We need to create a temporary bound method as argument
@@ -4999,10 +5108,11 @@
return NULL;
}
- C_TRACE(result, _PyObject_FastCallDict(func,
- &_PyTuple_ITEMS(callargs)[1],
- nargs - 1,
- kwdict));
+ C_TRACE(result, _PyObject_FastCallDictTstate(
+ tstate, func,
+ &_PyTuple_ITEMS(callargs)[1],
+ nargs - 1,
+ kwdict));
Py_DECREF(func);
return result;
}
@@ -5022,7 +5132,7 @@
PyThreadState *tstate = _PyThreadState_GET();
if (v != Py_None) {
Py_ssize_t x;
- if (PyIndex_Check(v)) {
+ if (_PyIndex_Check(v)) {
x = PyNumber_AsSsize_t(v, NULL);
if (x == -1 && _PyErr_Occurred(tstate))
return 0;
@@ -5043,7 +5153,7 @@
{
PyThreadState *tstate = _PyThreadState_GET();
Py_ssize_t x;
- if (PyIndex_Check(v)) {
+ if (_PyIndex_Check(v)) {
x = PyNumber_AsSsize_t(v, NULL);
if (x == -1 && _PyErr_Occurred(tstate))
return 0;
@@ -5058,62 +5168,6 @@
return 1;
}
-
-#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
- "BaseException is not allowed"
-
-static PyObject *
-cmp_outcome(PyThreadState *tstate, int op, PyObject *v, PyObject *w)
-{
- int res = 0;
- switch (op) {
- case PyCmp_IS:
- res = (v == w);
- break;
- case PyCmp_IS_NOT:
- res = (v != w);
- break;
- case PyCmp_IN:
- res = PySequence_Contains(w, v);
- if (res < 0)
- return NULL;
- break;
- case PyCmp_NOT_IN:
- res = PySequence_Contains(w, v);
- if (res < 0)
- return NULL;
- res = !res;
- break;
- case PyCmp_EXC_MATCH:
- if (PyTuple_Check(w)) {
- Py_ssize_t i, length;
- length = PyTuple_Size(w);
- for (i = 0; i < length; i += 1) {
- PyObject *exc = PyTuple_GET_ITEM(w, i);
- if (!PyExceptionClass_Check(exc)) {
- _PyErr_SetString(tstate, PyExc_TypeError,
- CANNOT_CATCH_MSG);
- return NULL;
- }
- }
- }
- else {
- if (!PyExceptionClass_Check(w)) {
- _PyErr_SetString(tstate, PyExc_TypeError,
- CANNOT_CATCH_MSG);
- return NULL;
- }
- }
- res = PyErr_GivenExceptionMatches(v, w);
- break;
- default:
- return PyObject_RichCompare(v, w, op);
- }
- v = res ? Py_True : Py_False;
- Py_INCREF(v);
- return v;
-}
-
static PyObject *
import_name(PyThreadState *tstate, PyFrameObject *f,
PyObject *name, PyObject *fromlist, PyObject *level)
@@ -5161,7 +5215,6 @@
import_from(PyThreadState *tstate, PyObject *v, PyObject *name)
{
PyObject *x;
- _Py_IDENTIFIER(__name__);
PyObject *fullmodname, *pkgname, *pkgpath, *pkgname_or_unknown, *errmsg;
if (_PyObject_LookupAttr(v, name, &x) != 0) {
@@ -5237,7 +5290,6 @@
{
_Py_IDENTIFIER(__all__);
_Py_IDENTIFIER(__dict__);
- _Py_IDENTIFIER(__name__);
PyObject *all, *dict, *name, *value;
int skip_leading_underscores = 0;
int pos, err;
@@ -5327,13 +5379,18 @@
static int
check_args_iterable(PyThreadState *tstate, PyObject *func, PyObject *args)
{
- if (args->ob_type->tp_iter == NULL && !PySequence_Check(args)) {
- _PyErr_Format(tstate, PyExc_TypeError,
- "%.200s%.200s argument after * "
- "must be an iterable, not %.200s",
- PyEval_GetFuncName(func),
- PyEval_GetFuncDesc(func),
- args->ob_type->tp_name);
+ if (Py_TYPE(args)->tp_iter == NULL && !PySequence_Check(args)) {
+ /* check_args_iterable() may be called with a live exception:
+ * clear it to prevent calling _PyObject_FunctionStr() with an
+ * exception set. */
+ _PyErr_Clear(tstate);
+ PyObject *funcstr = _PyObject_FunctionStr(func);
+ if (funcstr != NULL) {
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "%U argument after * must be an iterable, not %.200s",
+ funcstr, Py_TYPE(args)->tp_name);
+ Py_DECREF(funcstr);
+ }
return -1;
}
return 0;
@@ -5349,31 +5406,29 @@
* is not a mapping.
*/
if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
- _PyErr_Format(tstate, PyExc_TypeError,
- "%.200s%.200s argument after ** "
- "must be a mapping, not %.200s",
- PyEval_GetFuncName(func),
- PyEval_GetFuncDesc(func),
- kwargs->ob_type->tp_name);
+ _PyErr_Clear(tstate);
+ PyObject *funcstr = _PyObject_FunctionStr(func);
+ if (funcstr != NULL) {
+ _PyErr_Format(
+ tstate, PyExc_TypeError,
+ "%U argument after ** must be a mapping, not %.200s",
+ funcstr, Py_TYPE(kwargs)->tp_name);
+ Py_DECREF(funcstr);
+ }
}
else if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
PyObject *exc, *val, *tb;
_PyErr_Fetch(tstate, &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(tstate, PyExc_TypeError,
- "%.200s%.200s keywords must be strings",
- PyEval_GetFuncName(func),
- PyEval_GetFuncDesc(func));
- }
- else {
- _PyErr_Format(tstate, PyExc_TypeError,
- "%.200s%.200s got multiple "
- "values for keyword argument '%U'",
- PyEval_GetFuncName(func),
- PyEval_GetFuncDesc(func),
- key);
+ _PyErr_Clear(tstate);
+ PyObject *funcstr = _PyObject_FunctionStr(func);
+ if (funcstr != NULL) {
+ PyObject *key = PyTuple_GET_ITEM(val, 0);
+ _PyErr_Format(
+ tstate, PyExc_TypeError,
+ "%U got multiple values for keyword argument '%S'",
+ funcstr, key);
+ Py_DECREF(funcstr);
}
Py_XDECREF(exc);
Py_XDECREF(val);
@@ -5424,7 +5479,7 @@
}
static void
-format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevopcode)
+format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevprevopcode, int prevopcode)
{
if (type->tp_as_async == NULL || type->tp_as_async->am_await == NULL) {
if (prevopcode == BEFORE_ASYNC_WITH) {
@@ -5433,7 +5488,7 @@
"that does not implement __await__: %.100s",
type->tp_name);
}
- else if (prevopcode == WITH_CLEANUP_START) {
+ else if (prevopcode == WITH_EXCEPT_START || (prevopcode == CALL_FUNCTION && prevprevopcode == DUP_TOP)) {
_PyErr_Format(tstate, PyExc_TypeError,
"'async with' received an object from __aexit__ "
"that does not implement __await__: %.100s",
@@ -5545,7 +5600,7 @@
Py_ssize_t
_PyEval_RequestCodeExtraIndex(freefunc free)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
Py_ssize_t new_index;
if (interp->co_extra_user_count == MAX_CO_EXTRA_USERS - 1) {
@@ -5563,9 +5618,10 @@
const 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);
+ PyCodeObject *code = f->f_code;
+ filename = PyUnicode_AsUTF8(code->co_filename);
+ funcname = PyUnicode_AsUTF8(code->co_name);
+ lineno = PyCode_Addr2Line(code, f->f_lasti);
PyDTrace_FUNCTION_ENTRY(filename, funcname, lineno);
}
@@ -5577,9 +5633,10 @@
const 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);
+ PyCodeObject *code = f->f_code;
+ filename = PyUnicode_AsUTF8(code->co_filename);
+ funcname = PyUnicode_AsUTF8(code->co_name);
+ lineno = PyCode_Addr2Line(code, f->f_lasti);
PyDTrace_FUNCTION_RETURN(filename, funcname, lineno);
}
@@ -5617,3 +5674,21 @@
}
*instr_prev = frame->f_lasti;
}
+
+
+/* Implement Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() as functions
+ for the limited API. */
+
+#undef Py_EnterRecursiveCall
+
+int Py_EnterRecursiveCall(const char *where)
+{
+ return _Py_EnterRecursiveCall_inline(where);
+}
+
+#undef Py_LeaveRecursiveCall
+
+void Py_LeaveRecursiveCall(void)
+{
+ _Py_LeaveRecursiveCall_inline();
+}
diff --git a/Python/ceval_gil.h b/Python/ceval_gil.h
index 34d48c9..3510675 100644
--- a/Python/ceval_gil.h
+++ b/Python/ceval_gil.h
@@ -141,7 +141,8 @@
}
static void
-drop_gil(struct _ceval_runtime_state *ceval, PyThreadState *tstate)
+drop_gil(struct _ceval_runtime_state *ceval, struct _ceval_state *ceval2,
+ PyThreadState *tstate)
{
struct _gil_runtime_state *gil = &ceval->gil;
if (!_Py_atomic_load_relaxed(&gil->locked)) {
@@ -163,12 +164,13 @@
MUTEX_UNLOCK(gil->mutex);
#ifdef FORCE_SWITCHING
- if (_Py_atomic_load_relaxed(&ceval->gil_drop_request) && tstate != NULL) {
+ if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request) && tstate != NULL) {
MUTEX_LOCK(gil->switch_mutex);
/* Not switched yet => wait */
if (((PyThreadState*)_Py_atomic_load_relaxed(&gil->last_holder)) == tstate)
{
- RESET_GIL_DROP_REQUEST(ceval);
+ assert(is_tstate_valid(tstate));
+ RESET_GIL_DROP_REQUEST(tstate->interp);
/* NOTE: if COND_WAIT does not atomically start waiting when
releasing the mutex, another thread can run through, take
the GIL and drop it again, and reset the condition
@@ -180,15 +182,57 @@
#endif
}
-static void
-take_gil(struct _ceval_runtime_state *ceval, PyThreadState *tstate)
+
+/* Check if a Python thread must exit immediately, rather than taking the GIL
+ if Py_Finalize() has been called.
+
+ When this function is called by a daemon thread after Py_Finalize() has been
+ called, the GIL does no longer exist.
+
+ tstate must be non-NULL. */
+static inline int
+tstate_must_exit(PyThreadState *tstate)
{
- if (tstate == NULL) {
- Py_FatalError("take_gil: NULL tstate");
+ /* bpo-39877: Access _PyRuntime directly rather than using
+ tstate->interp->runtime to support calls from Python daemon threads.
+ After Py_Finalize() has been called, tstate can be a dangling pointer:
+ point to PyThreadState freed memory. */
+ PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime);
+ return (finalizing != NULL && finalizing != tstate);
+}
+
+
+/* Take the GIL.
+
+ The function saves errno at entry and restores its value at exit.
+
+ tstate must be non-NULL. */
+static void
+take_gil(PyThreadState *tstate)
+{
+ int err = errno;
+
+ assert(tstate != NULL);
+
+ if (tstate_must_exit(tstate)) {
+ /* bpo-39877: If Py_Finalize() has been called and tstate is not the
+ thread which called Py_Finalize(), exit immediately the thread.
+
+ This code path can be reached by a daemon thread after Py_Finalize()
+ completes. In this case, tstate is a dangling pointer: points to
+ PyThreadState freed memory. */
+ PyThread_exit_thread();
}
+ assert(is_tstate_valid(tstate));
+ PyInterpreterState *interp = tstate->interp;
+ struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
+ struct _ceval_state *ceval2 = &interp->ceval;
struct _gil_runtime_state *gil = &ceval->gil;
- int err = errno;
+
+ /* Check that _PyEval_InitThreads() was called to create the lock */
+ assert(gil_created(gil));
+
MUTEX_LOCK(gil->mutex);
if (!_Py_atomic_load_relaxed(&gil->locked)) {
@@ -196,23 +240,28 @@
}
while (_Py_atomic_load_relaxed(&gil->locked)) {
- int timed_out = 0;
- unsigned long saved_switchnum;
-
- saved_switchnum = gil->switch_number;
-
+ unsigned long saved_switchnum = gil->switch_number;
unsigned long interval = (gil->interval >= 1 ? gil->interval : 1);
+ int timed_out = 0;
COND_TIMED_WAIT(gil->cond, gil->mutex, interval, timed_out);
+
/* If we timed out and no switch occurred in the meantime, it is time
to ask the GIL-holding thread to drop it. */
if (timed_out &&
_Py_atomic_load_relaxed(&gil->locked) &&
gil->switch_number == saved_switchnum)
{
- SET_GIL_DROP_REQUEST(ceval);
+ if (tstate_must_exit(tstate)) {
+ MUTEX_UNLOCK(gil->mutex);
+ PyThread_exit_thread();
+ }
+ assert(is_tstate_valid(tstate));
+
+ SET_GIL_DROP_REQUEST(interp);
}
}
+
_ready:
#ifdef FORCE_SWITCHING
/* This mutex must be taken before modifying gil->last_holder:
@@ -232,23 +281,51 @@
COND_SIGNAL(gil->switch_cond);
MUTEX_UNLOCK(gil->switch_mutex);
#endif
- if (_Py_atomic_load_relaxed(&ceval->gil_drop_request)) {
- RESET_GIL_DROP_REQUEST(ceval);
+
+ if (tstate_must_exit(tstate)) {
+ /* bpo-36475: If Py_Finalize() has been called and tstate is not
+ the thread which called Py_Finalize(), exit immediately the
+ thread.
+
+ This code path can be reached by a daemon thread which was waiting
+ in take_gil() while the main thread called
+ wait_for_thread_shutdown() from Py_Finalize(). */
+ MUTEX_UNLOCK(gil->mutex);
+ drop_gil(ceval, ceval2, tstate);
+ PyThread_exit_thread();
}
+ assert(is_tstate_valid(tstate));
+
+ if (_Py_atomic_load_relaxed(&ceval2->gil_drop_request)) {
+ RESET_GIL_DROP_REQUEST(interp);
+ }
+ else {
+ /* bpo-40010: eval_breaker should be recomputed to be set to 1 if there
+ is a pending signal: signal received by another thread which cannot
+ handle signals.
+
+ Note: RESET_GIL_DROP_REQUEST() calls COMPUTE_EVAL_BREAKER(). */
+ COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
+ }
+
+ /* Don't access tstate if the thread must exit */
if (tstate->async_exc != NULL) {
- _PyEval_SignalAsyncExc(ceval);
+ _PyEval_SignalAsyncExc(tstate);
}
MUTEX_UNLOCK(gil->mutex);
+
errno = err;
}
void _PyEval_SetSwitchInterval(unsigned long microseconds)
{
- _PyRuntime.ceval.gil.interval = microseconds;
+ struct _gil_runtime_state *gil = &_PyRuntime.ceval.gil;
+ gil->interval = microseconds;
}
unsigned long _PyEval_GetSwitchInterval()
{
- return _PyRuntime.ceval.gil.interval;
+ struct _gil_runtime_state *gil = &_PyRuntime.ceval.gil;
+ return gil->interval;
}
diff --git a/Python/clinic/sysmodule.c.h b/Python/clinic/sysmodule.c.h
index d2d1503..4615eba 100644
--- a/Python/clinic/sysmodule.c.h
+++ b/Python/clinic/sysmodule.c.h
@@ -281,62 +281,6 @@
return sys_getprofile_impl(module);
}
-PyDoc_STRVAR(sys_setcheckinterval__doc__,
-"setcheckinterval($module, n, /)\n"
-"--\n"
-"\n"
-"Set the async event check interval to n instructions.\n"
-"\n"
-"This tells the Python interpreter to check for asynchronous events\n"
-"every n instructions.\n"
-"\n"
-"This also affects how often thread switches occur.");
-
-#define SYS_SETCHECKINTERVAL_METHODDEF \
- {"setcheckinterval", (PyCFunction)sys_setcheckinterval, METH_O, sys_setcheckinterval__doc__},
-
-static PyObject *
-sys_setcheckinterval_impl(PyObject *module, int n);
-
-static PyObject *
-sys_setcheckinterval(PyObject *module, PyObject *arg)
-{
- PyObject *return_value = NULL;
- int n;
-
- if (PyFloat_Check(arg)) {
- PyErr_SetString(PyExc_TypeError,
- "integer argument expected, got float" );
- goto exit;
- }
- n = _PyLong_AsInt(arg);
- if (n == -1 && PyErr_Occurred()) {
- goto exit;
- }
- return_value = sys_setcheckinterval_impl(module, n);
-
-exit:
- return return_value;
-}
-
-PyDoc_STRVAR(sys_getcheckinterval__doc__,
-"getcheckinterval($module, /)\n"
-"--\n"
-"\n"
-"Return the current check interval; see sys.setcheckinterval().");
-
-#define SYS_GETCHECKINTERVAL_METHODDEF \
- {"getcheckinterval", (PyCFunction)sys_getcheckinterval, METH_NOARGS, sys_getcheckinterval__doc__},
-
-static PyObject *
-sys_getcheckinterval_impl(PyObject *module);
-
-static PyObject *
-sys_getcheckinterval(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
- return sys_getcheckinterval_impl(module);
-}
-
PyDoc_STRVAR(sys_setswitchinterval__doc__,
"setswitchinterval($module, interval, /)\n"
"--\n"
@@ -814,27 +758,6 @@
return return_value;
}
-#if defined(COUNT_ALLOCS)
-
-PyDoc_STRVAR(sys_getcounts__doc__,
-"getcounts($module, /)\n"
-"--\n"
-"\n");
-
-#define SYS_GETCOUNTS_METHODDEF \
- {"getcounts", (PyCFunction)sys_getcounts, METH_NOARGS, sys_getcounts__doc__},
-
-static PyObject *
-sys_getcounts_impl(PyObject *module);
-
-static PyObject *
-sys_getcounts(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
- return sys_getcounts_impl(module);
-}
-
-#endif /* defined(COUNT_ALLOCS) */
-
PyDoc_STRVAR(sys__getframe__doc__,
"_getframe($module, depth=0, /)\n"
"--\n"
@@ -941,43 +864,6 @@
return return_value;
}
-PyDoc_STRVAR(sys_callstats__doc__,
-"callstats($module, /)\n"
-"--\n"
-"\n"
-"Return a tuple of function call statistics.\n"
-"\n"
-"A tuple is returned only if CALL_PROFILE was defined when Python was\n"
-"built. Otherwise, this returns None.\n"
-"\n"
-"When enabled, this function returns detailed, implementation-specific\n"
-"details about the number of function calls executed. The return value\n"
-"is a 11-tuple where the entries in the tuple are counts of:\n"
-"0. all function calls\n"
-"1. calls to PyFunction_Type objects\n"
-"2. PyFunction calls that do not create an argument tuple\n"
-"3. PyFunction calls that do not create an argument tuple\n"
-" and bypass PyEval_EvalCodeEx()\n"
-"4. PyMethod calls\n"
-"5. PyMethod calls on bound methods\n"
-"6. PyType calls\n"
-"7. PyCFunction calls\n"
-"8. generator calls\n"
-"9. All other calls\n"
-"10. Number of stack pops performed by call_function()");
-
-#define SYS_CALLSTATS_METHODDEF \
- {"callstats", (PyCFunction)sys_callstats, METH_NOARGS, sys_callstats__doc__},
-
-static PyObject *
-sys_callstats_impl(PyObject *module);
-
-static PyObject *
-sys_callstats(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
- return sys_callstats_impl(module);
-}
-
PyDoc_STRVAR(sys__debugmallocstats__doc__,
"_debugmallocstats($module, /)\n"
"--\n"
@@ -1081,11 +967,7 @@
#define SYS_GETTOTALREFCOUNT_METHODDEF
#endif /* !defined(SYS_GETTOTALREFCOUNT_METHODDEF) */
-#ifndef SYS_GETCOUNTS_METHODDEF
- #define SYS_GETCOUNTS_METHODDEF
-#endif /* !defined(SYS_GETCOUNTS_METHODDEF) */
-
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
#define SYS_GETANDROIDAPILEVEL_METHODDEF
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
-/*[clinic end generated code: output=273f9cec8bfcab91 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=39eb34a01fb9a919 input=a9049054013a1b77]*/
diff --git a/Python/codecs.c b/Python/codecs.c
index 4bd28ec..0f18c27 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -9,7 +9,8 @@
------------------------------------------------------------------------ */
#include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_interp.h" // PyInterpreterState.codec_search_path
+#include "pycore_pystate.h" // _PyInterpreterState_GET()
#include "ucnhash.h"
#include <ctype.h>
@@ -32,7 +33,7 @@
int PyCodec_Register(PyObject *search_function)
{
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
goto onError;
if (search_function == NULL) {
@@ -49,15 +50,16 @@
return -1;
}
-/* Convert a string to a normalized Python string: all characters are
- converted to lower case, spaces are replaced with underscores. */
+extern int _Py_normalize_encoding(const char *, char *, size_t);
+
+/* Convert a string to a normalized Python string(decoded from UTF-8): all characters are
+ converted to lower case, spaces and hyphens are replaced with underscores. */
static
PyObject *normalizestring(const char *string)
{
- size_t i;
size_t len = strlen(string);
- char *p;
+ char *encoding;
PyObject *v;
if (len > PY_SSIZE_T_MAX) {
@@ -65,20 +67,19 @@
return NULL;
}
- p = PyMem_Malloc(len + 1);
- if (p == NULL)
+ encoding = PyMem_Malloc(len + 1);
+ if (encoding == NULL)
return PyErr_NoMemory();
- for (i = 0; i < len; i++) {
- char ch = string[i];
- if (ch == ' ')
- ch = '-';
- else
- ch = Py_TOLOWER(Py_CHARMASK(ch));
- p[i] = ch;
+
+ if (!_Py_normalize_encoding(string, encoding, len + 1))
+ {
+ PyErr_SetString(PyExc_RuntimeError, "_Py_normalize_encoding() failed");
+ PyMem_Free(encoding);
+ return NULL;
}
- p[i] = '\0';
- v = PyUnicode_FromString(p);
- PyMem_Free(p);
+
+ v = PyUnicode_FromString(encoding);
+ PyMem_Free(encoding);
return v;
}
@@ -99,47 +100,38 @@
PyObject *_PyCodec_Lookup(const char *encoding)
{
- PyObject *result, *args = NULL, *v;
- Py_ssize_t i, len;
-
if (encoding == NULL) {
PyErr_BadArgument();
- goto onError;
+ return NULL;
}
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
- goto onError;
+ PyInterpreterState *interp = _PyInterpreterState_GET();
+ if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) {
+ return NULL;
+ }
/* Convert the encoding to a normalized Python string: all
characters are converted to lower case, spaces and hyphens are
replaced with underscores. */
- v = normalizestring(encoding);
- if (v == NULL)
- goto onError;
+ PyObject *v = normalizestring(encoding);
+ if (v == NULL) {
+ return NULL;
+ }
PyUnicode_InternInPlace(&v);
/* First, try to lookup the name in the registry dictionary */
- result = PyDict_GetItemWithError(interp->codec_search_cache, v);
+ PyObject *result = PyDict_GetItemWithError(interp->codec_search_cache, v);
if (result != NULL) {
Py_INCREF(result);
Py_DECREF(v);
return result;
}
else if (PyErr_Occurred()) {
- Py_DECREF(v);
- return NULL;
+ goto onError;
}
/* Next, scan the search functions in order of registration */
- args = PyTuple_New(1);
- if (args == NULL) {
- Py_DECREF(v);
- return NULL;
- }
- PyTuple_SET_ITEM(args,0,v);
-
- len = PyList_Size(interp->codec_search_path);
+ const Py_ssize_t len = PyList_Size(interp->codec_search_path);
if (len < 0)
goto onError;
if (len == 0) {
@@ -149,13 +141,14 @@
goto onError;
}
+ Py_ssize_t i;
for (i = 0; i < len; i++) {
PyObject *func;
func = PyList_GetItem(interp->codec_search_path, i);
if (func == NULL)
goto onError;
- result = PyEval_CallObject(func, args);
+ result = PyObject_CallOneArg(func, v);
if (result == NULL)
goto onError;
if (result == Py_None) {
@@ -182,11 +175,11 @@
Py_DECREF(result);
goto onError;
}
- Py_DECREF(args);
+ Py_DECREF(v);
return result;
onError:
- Py_XDECREF(args);
+ Py_DECREF(v);
return NULL;
}
@@ -195,7 +188,7 @@
PyObject *v;
int result;
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL) {
return -1;
}
@@ -325,7 +318,7 @@
if (errors != NULL)
streamcodec = PyObject_CallFunction(codeccls, "Os", stream, errors);
else
- streamcodec = PyObject_CallFunctionObjArgs(codeccls, stream, NULL);
+ streamcodec = PyObject_CallOneArg(codeccls, stream);
Py_DECREF(codecs);
return streamcodec;
}
@@ -424,7 +417,7 @@
if (args == NULL)
goto onError;
- result = PyEval_CallObject(encoder, args);
+ result = PyObject_Call(encoder, args, NULL);
if (result == NULL) {
wrap_codec_error("encoding", encoding);
goto onError;
@@ -470,7 +463,7 @@
if (args == NULL)
goto onError;
- result = PyEval_CallObject(decoder,args);
+ result = PyObject_Call(decoder, args, NULL);
if (result == NULL) {
wrap_codec_error("decoding", encoding);
goto onError;
@@ -628,7 +621,7 @@
Return 0 on success, -1 on error */
int PyCodec_RegisterError(const char *name, PyObject *error)
{
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
return -1;
if (!PyCallable_Check(error)) {
@@ -646,7 +639,7 @@
{
PyObject *handler = NULL;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->codec_search_path == NULL && _PyCodecRegistry_Init())
return NULL;
@@ -666,7 +659,7 @@
{
PyErr_Format(PyExc_TypeError,
"don't know how to handle %.200s in error callback",
- exc->ob_type->tp_name);
+ Py_TYPE(exc)->tp_name);
}
PyObject *PyCodec_StrictErrors(PyObject *exc)
@@ -709,8 +702,7 @@
if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeEncodeError)) {
PyObject *res;
- int kind;
- void *data;
+ Py_UCS1 *outp;
if (PyUnicodeEncodeError_GetStart(exc, &start))
return NULL;
if (PyUnicodeEncodeError_GetEnd(exc, &end))
@@ -719,10 +711,10 @@
res = PyUnicode_New(len, '?');
if (res == NULL)
return NULL;
- kind = PyUnicode_KIND(res);
- data = PyUnicode_DATA(res);
+ assert(PyUnicode_KIND(res) == PyUnicode_1BYTE_KIND);
+ outp = PyUnicode_1BYTE_DATA(res);
for (i = 0; i < len; ++i)
- PyUnicode_WRITE(kind, data, i, '?');
+ outp[i] = '?';
assert(_PyUnicode_CheckConsistency(res, 1));
return Py_BuildValue("(Nn)", res, end);
}
@@ -735,8 +727,7 @@
}
else if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeTranslateError)) {
PyObject *res;
- int kind;
- void *data;
+ Py_UCS2 *outp;
if (PyUnicodeTranslateError_GetStart(exc, &start))
return NULL;
if (PyUnicodeTranslateError_GetEnd(exc, &end))
@@ -745,10 +736,10 @@
res = PyUnicode_New(len, Py_UNICODE_REPLACEMENT_CHARACTER);
if (res == NULL)
return NULL;
- kind = PyUnicode_KIND(res);
- data = PyUnicode_DATA(res);
- for (i=0; i < len; i++)
- PyUnicode_WRITE(kind, data, i, Py_UNICODE_REPLACEMENT_CHARACTER);
+ assert(PyUnicode_KIND(res) == PyUnicode_2BYTE_KIND);
+ outp = PyUnicode_2BYTE_DATA(res);
+ for (i = 0; i < len; i++)
+ outp[i] = Py_UNICODE_REPLACEMENT_CHARACTER;
assert(_PyUnicode_CheckConsistency(res, 1));
return Py_BuildValue("(Nn)", res, end);
}
@@ -767,7 +758,7 @@
Py_ssize_t start;
Py_ssize_t end;
PyObject *res;
- unsigned char *outp;
+ Py_UCS1 *outp;
Py_ssize_t ressize;
Py_UCS4 ch;
if (PyUnicodeEncodeError_GetStart(exc, &start))
@@ -863,7 +854,7 @@
Py_ssize_t start;
Py_ssize_t end;
PyObject *res;
- unsigned char *outp;
+ Py_UCS1 *outp;
int ressize;
Py_UCS4 c;
@@ -974,7 +965,7 @@
Py_ssize_t start;
Py_ssize_t end;
PyObject *res;
- unsigned char *outp;
+ Py_UCS1 *outp;
Py_ssize_t ressize;
int replsize;
Py_UCS4 c;
@@ -1500,34 +1491,39 @@
}
};
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
PyObject *mod;
- unsigned i;
if (interp->codec_search_path != NULL)
return 0;
interp->codec_search_path = PyList_New(0);
- interp->codec_search_cache = PyDict_New();
- interp->codec_error_registry = PyDict_New();
-
- if (interp->codec_error_registry) {
- for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
- PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
- int res;
- if (!func)
- Py_FatalError("can't initialize codec error registry");
- res = PyCodec_RegisterError(methods[i].name, func);
- Py_DECREF(func);
- if (res)
- Py_FatalError("can't initialize codec error registry");
- }
+ if (interp->codec_search_path == NULL) {
+ return -1;
}
- if (interp->codec_search_path == NULL ||
- interp->codec_search_cache == NULL ||
- interp->codec_error_registry == NULL)
- Py_FatalError("can't initialize codec registry");
+ interp->codec_search_cache = PyDict_New();
+ if (interp->codec_search_cache == NULL) {
+ return -1;
+ }
+
+ interp->codec_error_registry = PyDict_New();
+ if (interp->codec_error_registry == NULL) {
+ return -1;
+ }
+
+ for (size_t i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
+ PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
+ if (!func) {
+ return -1;
+ }
+
+ int res = PyCodec_RegisterError(methods[i].name, func);
+ Py_DECREF(func);
+ if (res) {
+ return -1;
+ }
+ }
mod = PyImport_ImportModuleNoBlock("encodings");
if (mod == NULL) {
diff --git a/Python/compile.c b/Python/compile.c
index 3259e8a..722d52d 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -23,7 +23,6 @@
#include "Python.h"
-#include "pycore_pystate.h" /* _PyInterpreterState_GET_UNSAFE() */
#include "Python-ast.h"
#include "ast.h"
#include "code.h"
@@ -85,14 +84,16 @@
compiler IR.
*/
-enum fblocktype { WHILE_LOOP, FOR_LOOP, EXCEPT, FINALLY_TRY, FINALLY_TRY2, FINALLY_END,
- WITH, ASYNC_WITH, HANDLER_CLEANUP };
+enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END,
+ WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE, EXCEPTION_HANDLER };
struct fblockinfo {
enum fblocktype fb_type;
basicblock *fb_block;
/* (optional) type-specific exit or cleanup block */
basicblock *fb_exit;
+ /* (optional) additional information required for unwinding */
+ void *fb_datum;
};
enum {
@@ -140,8 +141,6 @@
int u_firstlineno; /* the first lineno of the block */
int u_lineno; /* the lineno for the current stmt */
int u_col_offset; /* the offset of the current stmt */
- int u_lineno_set; /* boolean to indicate whether instr
- has been generated with current lineno */
};
/* This struct captures the global state of a compilation.
@@ -181,7 +180,7 @@
static int compiler_enter_scope(struct compiler *, identifier, int, void *, int);
static void compiler_free(struct compiler *);
static basicblock *compiler_new_block(struct compiler *);
-static int compiler_next_instr(struct compiler *, basicblock *);
+static int compiler_next_instr(basicblock *);
static int compiler_addop(struct compiler *, int);
static int compiler_addop_i(struct compiler *, int, Py_ssize_t);
static int compiler_addop_j(struct compiler *, int, basicblock *, int);
@@ -195,10 +194,11 @@
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);
+static int compiler_subscript(struct compiler *, expr_ty);
+static int compiler_slice(struct compiler *, expr_ty);
-static int inplace_binop(struct compiler *, operator_ty);
+static int inplace_binop(operator_ty);
+static int are_all_items_const(asdl_seq *, Py_ssize_t, Py_ssize_t);
static int expr_constant(expr_ty);
static int compiler_with(struct compiler *, stmt_ty, int);
@@ -213,11 +213,13 @@
static int compiler_sync_comprehension_generator(
struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type);
static int compiler_async_comprehension_generator(
struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type);
static PyCodeObject *assemble(struct compiler *, int addNone);
@@ -320,7 +322,6 @@
PyCodeObject *co = NULL;
PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
int merged;
- PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
if (!__doc__) {
__doc__ = PyUnicode_InternFromString("__doc__");
@@ -347,11 +348,15 @@
c.c_future->ff_features = merged;
flags->cf_flags = merged;
c.c_flags = flags;
- c.c_optimize = (optimize == -1) ? config->optimization_level : optimize;
+ c.c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
c.c_nestlevel = 0;
c.c_do_not_emit_bytecode = 0;
- if (!_PyAST_Optimize(mod, arena, c.c_optimize)) {
+ _PyASTOptimizeState state;
+ state.optimize = c.c_optimize;
+ state.ff_features = merged;
+
+ if (!_PyAST_Optimize(mod, arena, &state)) {
goto finally;
}
@@ -554,13 +559,12 @@
struct compiler_unit *u;
basicblock *block;
- u = (struct compiler_unit *)PyObject_Malloc(sizeof(
+ u = (struct compiler_unit *)PyObject_Calloc(1, sizeof(
struct compiler_unit));
if (!u) {
PyErr_NoMemory();
return 0;
}
- memset(u, 0, sizeof(struct compiler_unit));
u->u_scope_type = scope_type;
u->u_argcount = 0;
u->u_posonlyargcount = 0;
@@ -609,7 +613,6 @@
u->u_firstlineno = lineno;
u->u_lineno = 0;
u->u_col_offset = 0;
- u->u_lineno_set = 0;
u->u_consts = PyDict_New();
if (!u->u_consts) {
compiler_unit_free(u);
@@ -764,12 +767,11 @@
struct compiler_unit *u;
u = c->u;
- b = (basicblock *)PyObject_Malloc(sizeof(basicblock));
+ b = (basicblock *)PyObject_Calloc(1, sizeof(basicblock));
if (b == NULL) {
PyErr_NoMemory();
return NULL;
}
- memset((void *)b, 0, sizeof(basicblock));
/* Extend the singly linked list of blocks with new block. */
b->b_list = u->u_blocks;
u->u_blocks = b;
@@ -802,19 +804,17 @@
*/
static int
-compiler_next_instr(struct compiler *c, basicblock *b)
+compiler_next_instr(basicblock *b)
{
assert(b != NULL);
if (b->b_instr == NULL) {
- b->b_instr = (struct instr *)PyObject_Malloc(
- sizeof(struct instr) * DEFAULT_BLOCK_SIZE);
+ b->b_instr = (struct instr *)PyObject_Calloc(
+ DEFAULT_BLOCK_SIZE, sizeof(struct instr));
if (b->b_instr == NULL) {
PyErr_NoMemory();
return -1;
}
b->b_ialloc = DEFAULT_BLOCK_SIZE;
- memset((char *)b->b_instr, 0,
- sizeof(struct instr) * DEFAULT_BLOCK_SIZE);
}
else if (b->b_iused == b->b_ialloc) {
struct instr *tmp;
@@ -844,28 +844,18 @@
return b->b_iused++;
}
-/* Set the i_lineno member of the instruction at offset off if the
- line number for the current expression/statement has not
- already been set. If it has been set, the call has no effect.
+/* Set the line number and column offset for the following instructions.
The line number is reset in the following cases:
- when entering a new scope
- on each statement
- - on each expression that start a new line
+ - on each expression and sub-expression
- before the "except" and "finally" clauses
- - before the "for" and "while" expressions
*/
-static void
-compiler_set_lineno(struct compiler *c, int off)
-{
- basicblock *b;
- if (c->u->u_lineno_set)
- return;
- c->u->u_lineno_set = 1;
- b = c->u->u_curblock;
- b->b_instr[off].i_lineno = c->u->u_lineno;
-}
+#define SET_LOC(c, x) \
+ (c)->u->u_lineno = (x)->lineno; \
+ (c)->u->u_col_offset = (x)->col_offset;
/* Return the stack effect of opcode with argument oparg.
@@ -964,12 +954,6 @@
* Restore the stack position and push 6 values before jumping to
* the handler if an exception be raised. */
return jump ? 6 : 1;
- case WITH_CLEANUP_START:
- return 2; /* or 1, depending on TOS */
- case WITH_CLEANUP_FINISH:
- /* Pop a variable number of values pushed by WITH_CLEANUP_START
- * + __exit__ or __aexit__. */
- return -3;
case RETURN_VALUE:
return -1;
case IMPORT_STAR:
@@ -984,10 +968,6 @@
return 0;
case POP_EXCEPT:
return -3;
- case END_FINALLY:
- case POP_FINALLY:
- /* Pop 6 values when an exception was raised. */
- return -6;
case STORE_NAME:
return -1;
@@ -1018,13 +998,6 @@
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:
- case BUILD_MAP_UNPACK_WITH_CALL:
- return 1 - oparg;
case BUILD_MAP:
return 1 - 2*oparg;
case BUILD_CONST_KEY_MAP:
@@ -1032,7 +1005,11 @@
case LOAD_ATTR:
return 0;
case COMPARE_OP:
+ case IS_OP:
+ case CONTAINS_OP:
return -1;
+ case JUMP_IF_NOT_EXC_MATCH:
+ return -2;
case IMPORT_NAME:
return -1;
case IMPORT_FROM:
@@ -1060,14 +1037,11 @@
* Restore the stack position and push 6 values before jumping to
* the handler if an exception be raised. */
return jump ? 6 : 0;
- case BEGIN_FINALLY:
- /* Actually pushes 1 value, but count 6 for balancing with
- * END_FINALLY and POP_FINALLY.
- * This is the main reason of using this opcode instead of
- * "LOAD_CONST None". */
- return 6;
- case CALL_FINALLY:
- return jump ? 1 : 0;
+ case RERAISE:
+ return -3;
+
+ case WITH_EXCEPT_START:
+ return 1;
case LOAD_FAST:
return 1;
@@ -1133,6 +1107,15 @@
return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0;
case LOAD_METHOD:
return 1;
+ case LOAD_ASSERTION_ERROR:
+ return 1;
+ case LIST_TO_TUPLE:
+ return 0;
+ case LIST_EXTEND:
+ case SET_UPDATE:
+ case DICT_MERGE:
+ case DICT_UPDATE:
+ return -1;
default:
return PY_INVALID_STACK_EFFECT;
}
@@ -1165,7 +1148,7 @@
if (c->c_do_not_emit_bytecode) {
return 1;
}
- off = compiler_next_instr(c, c->u->u_curblock);
+ off = compiler_next_instr(c->u->u_curblock);
if (off < 0)
return 0;
b = c->u->u_curblock;
@@ -1174,12 +1157,12 @@
i->i_oparg = 0;
if (opcode == RETURN_VALUE)
b->b_return = 1;
- compiler_set_lineno(c, off);
+ i->i_lineno = c->u->u_lineno;
return 1;
}
static Py_ssize_t
-compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o)
+compiler_add_o(PyObject *dict, PyObject *o)
{
PyObject *v;
Py_ssize_t arg;
@@ -1327,7 +1310,7 @@
return -1;
}
- Py_ssize_t arg = compiler_add_o(c, c->u->u_consts, key);
+ Py_ssize_t arg = compiler_add_o(c->u->u_consts, key);
Py_DECREF(key);
return arg;
}
@@ -1353,7 +1336,7 @@
return 1;
}
- Py_ssize_t arg = compiler_add_o(c, dict, o);
+ Py_ssize_t arg = compiler_add_o(dict, o);
if (arg < 0)
return 0;
return compiler_addop_i(c, opcode, arg);
@@ -1372,7 +1355,7 @@
PyObject *mangled = _Py_Mangle(c->u->u_private, o);
if (!mangled)
return 0;
- arg = compiler_add_o(c, dict, mangled);
+ arg = compiler_add_o(dict, mangled);
Py_DECREF(mangled);
if (arg < 0)
return 0;
@@ -1403,13 +1386,13 @@
assert(HAS_ARG(opcode));
assert(0 <= oparg && oparg <= 2147483647);
- off = compiler_next_instr(c, c->u->u_curblock);
+ off = compiler_next_instr(c->u->u_curblock);
if (off < 0)
return 0;
i = &c->u->u_curblock->b_instr[off];
i->i_opcode = opcode;
i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int);
- compiler_set_lineno(c, off);
+ i->i_lineno = c->u->u_lineno;
return 1;
}
@@ -1425,7 +1408,7 @@
assert(HAS_ARG(opcode));
assert(b != NULL);
- off = compiler_next_instr(c, c->u->u_curblock);
+ off = compiler_next_instr(c->u->u_curblock);
if (off < 0)
return 0;
i = &c->u->u_curblock->b_instr[off];
@@ -1435,7 +1418,7 @@
i->i_jabs = 1;
else
i->i_jrel = 1;
- compiler_set_lineno(c, off);
+ i->i_lineno = c->u->u_lineno;
return 1;
}
@@ -1514,6 +1497,12 @@
return 0; \
}
+
+#define ADDOP_COMPARE(C, CMP) { \
+ if (!compiler_addcompare((C), (cmpop_ty)(CMP))) \
+ return 0; \
+}
+
/* VISIT and VISIT_SEQ takes an ASDL type as their second argument. They use
the ASDL name to synthesize the name of the C type and the visit function.
*/
@@ -1631,18 +1620,17 @@
static int
compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b,
- basicblock *exit)
+ basicblock *exit, void *datum)
{
struct fblockinfo *f;
if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
- PyErr_SetString(PyExc_SyntaxError,
- "too many statically nested blocks");
- return 0;
+ return compiler_error(c, "too many statically nested blocks");
}
f = &c->u->u_fblock[c->u->u_nfblocks++];
f->fb_type = t;
f->fb_block = b;
f->fb_exit = exit;
+ f->fb_datum = datum;
return 1;
}
@@ -1656,8 +1644,19 @@
assert(u->u_fblock[u->u_nfblocks].fb_block == b);
}
+static int
+compiler_call_exit_with_nones(struct compiler *c) {
+ ADDOP_O(c, LOAD_CONST, Py_None, consts);
+ ADDOP(c, DUP_TOP);
+ ADDOP(c, DUP_TOP);
+ ADDOP_I(c, CALL_FUNCTION, 3);
+ return 1;
+}
+
/* Unwind a frame block. If preserve_tos is true, the TOS before
- * popping the blocks will be restored afterwards.
+ * popping the blocks will be restored afterwards, unless another
+ * return, break or continue is found. In which case, the TOS will
+ * be popped.
*/
static int
compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info,
@@ -1665,15 +1664,7 @@
{
switch (info->fb_type) {
case WHILE_LOOP:
- return 1;
-
- case FINALLY_END:
- info->fb_exit = NULL;
- ADDOP_I(c, POP_FINALLY, preserve_tos);
- if (preserve_tos) {
- ADDOP(c, ROT_TWO);
- }
- ADDOP(c, POP_TOP);
+ case EXCEPTION_HANDLER:
return 1;
case FOR_LOOP:
@@ -1684,26 +1675,37 @@
ADDOP(c, POP_TOP);
return 1;
- case EXCEPT:
+ case TRY_EXCEPT:
ADDOP(c, POP_BLOCK);
return 1;
case FINALLY_TRY:
ADDOP(c, POP_BLOCK);
- ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
+ if (preserve_tos) {
+ if (!compiler_push_fblock(c, POP_VALUE, NULL, NULL, NULL)) {
+ return 0;
+ }
+ }
+ /* Emit the finally block, restoring the line number when done */
+ int saved_lineno = c->u->u_lineno;
+ VISIT_SEQ(c, stmt, info->fb_datum);
+ c->u->u_lineno = saved_lineno;
+ if (preserve_tos) {
+ compiler_pop_fblock(c, POP_VALUE, NULL);
+ }
return 1;
- case FINALLY_TRY2:
- ADDOP(c, POP_BLOCK);
+ case FINALLY_END:
if (preserve_tos) {
- ADDOP(c, ROT_TWO);
- ADDOP(c, POP_TOP);
- ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
+ ADDOP(c, ROT_FOUR);
}
- else {
- ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
- ADDOP(c, POP_TOP);
+ ADDOP(c, POP_TOP);
+ ADDOP(c, POP_TOP);
+ ADDOP(c, POP_TOP);
+ if (preserve_tos) {
+ ADDOP(c, ROT_FOUR);
}
+ ADDOP(c, POP_EXCEPT);
return 1;
case WITH:
@@ -1712,34 +1714,66 @@
if (preserve_tos) {
ADDOP(c, ROT_TWO);
}
- ADDOP(c, BEGIN_FINALLY);
- ADDOP(c, WITH_CLEANUP_START);
+ if(!compiler_call_exit_with_nones(c)) {
+ return 0;
+ }
if (info->fb_type == ASYNC_WITH) {
ADDOP(c, GET_AWAITABLE);
ADDOP_LOAD_CONST(c, Py_None);
ADDOP(c, YIELD_FROM);
}
- ADDOP(c, WITH_CLEANUP_FINISH);
- ADDOP_I(c, POP_FINALLY, 0);
+ ADDOP(c, POP_TOP);
return 1;
case HANDLER_CLEANUP:
+ if (info->fb_datum) {
+ ADDOP(c, POP_BLOCK);
+ }
if (preserve_tos) {
ADDOP(c, ROT_FOUR);
}
- if (info->fb_exit) {
- ADDOP(c, POP_BLOCK);
- ADDOP(c, POP_EXCEPT);
- ADDOP_JREL(c, CALL_FINALLY, info->fb_exit);
+ ADDOP(c, POP_EXCEPT);
+ if (info->fb_datum) {
+ ADDOP_LOAD_CONST(c, Py_None);
+ compiler_nameop(c, info->fb_datum, Store);
+ compiler_nameop(c, info->fb_datum, Del);
}
- else {
- ADDOP(c, POP_EXCEPT);
+ return 1;
+
+ case POP_VALUE:
+ if (preserve_tos) {
+ ADDOP(c, ROT_TWO);
}
+ ADDOP(c, POP_TOP);
return 1;
}
Py_UNREACHABLE();
}
+/** Unwind block stack. If loop is not NULL, then stop when the first loop is encountered. */
+static int
+compiler_unwind_fblock_stack(struct compiler *c, int preserve_tos, struct fblockinfo **loop) {
+ if (c->u->u_nfblocks == 0) {
+ return 1;
+ }
+ struct fblockinfo *top = &c->u->u_fblock[c->u->u_nfblocks-1];
+ if (loop != NULL && (top->fb_type == WHILE_LOOP || top->fb_type == FOR_LOOP)) {
+ *loop = top;
+ return 1;
+ }
+ struct fblockinfo copy = *top;
+ c->u->u_nfblocks--;
+ if (!compiler_unwind_fblock(c, ©, preserve_tos)) {
+ return 0;
+ }
+ if (!compiler_unwind_fblock_stack(c, preserve_tos, loop)) {
+ return 0;
+ }
+ c->u->u_fblock[c->u->u_nfblocks] = copy;
+ c->u->u_nfblocks++;
+ return 1;
+}
+
/* Compile a sequence of statements, checking for a docstring
and for annotations. */
@@ -1754,10 +1788,9 @@
This way line number for SETUP_ANNOTATIONS will always
coincide with the line number of first "real" statement in module.
If body is empty, 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)) {
+ if (c->u->u_scope_type == COMPILER_SCOPE_MODULE && asdl_seq_LEN(stmts)) {
st = (stmt_ty)asdl_seq_GET(stmts, 0);
- c->u->u_lineno = st->lineno;
+ SET_LOC(c, st);
}
/* Every annotated class and module should have __annotations__. */
if (find_ann(stmts)) {
@@ -1815,10 +1848,6 @@
VISIT_IN_SCOPE(c, expr, mod->v.Expression.body);
addNone = 0;
break;
- case Suite_kind:
- PyErr_SetString(PyExc_SystemError,
- "suite should not be possible");
- return 0;
default:
PyErr_Format(PyExc_SystemError,
"module kind %d should not be possible",
@@ -1844,18 +1873,15 @@
return CELL;
scope = PyST_GetScope(c->u->u_ste, name);
if (scope == 0) {
- char buf[350];
- PyOS_snprintf(buf, sizeof(buf),
- "unknown scope for %.100s in %.100s(%s)\n"
- "symbols: %s\nlocals: %s\nglobals: %s",
- PyUnicode_AsUTF8(name),
- PyUnicode_AsUTF8(c->u->u_name),
- PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_id)),
- PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_symbols)),
- PyUnicode_AsUTF8(PyObject_Repr(c->u->u_varnames)),
- PyUnicode_AsUTF8(PyObject_Repr(c->u->u_names))
- );
- Py_FatalError(buf);
+ _Py_FatalErrorFormat(__func__,
+ "unknown scope for %.100s in %.100s(%s)\n"
+ "symbols: %s\nlocals: %s\nglobals: %s",
+ PyUnicode_AsUTF8(name),
+ PyUnicode_AsUTF8(c->u->u_name),
+ PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_id)),
+ PyUnicode_AsUTF8(PyObject_Repr(c->u->u_ste->ste_symbols)),
+ PyUnicode_AsUTF8(PyObject_Repr(c->u->u_varnames)),
+ PyUnicode_AsUTF8(PyObject_Repr(c->u->u_names)));
}
return scope;
@@ -1890,7 +1916,7 @@
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.
+ well as by the normal name lookup logic.
*/
reftype = get_ref_type(c, name);
if (reftype == CELL)
@@ -1898,7 +1924,7 @@
else /* (reftype == FREE) */
arg = compiler_lookup_arg(c->u->u_freevars, name);
if (arg == -1) {
- fprintf(stderr,
+ _Py_FatalErrorFormat(__func__,
"lookup %s in %s %d %d\n"
"freevars of %s: %s\n",
PyUnicode_AsUTF8(PyObject_Repr(name)),
@@ -1906,7 +1932,6 @@
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);
}
@@ -2127,6 +2152,55 @@
}
static int
+forbidden_name(struct compiler *c, identifier name, expr_context_ty ctx)
+{
+
+ if (ctx == Store && _PyUnicode_EqualToASCIIString(name, "__debug__")) {
+ compiler_error(c, "cannot assign to __debug__");
+ return 1;
+ }
+ return 0;
+}
+
+static int
+compiler_check_debug_one_arg(struct compiler *c, arg_ty arg)
+{
+ if (arg != NULL) {
+ if (forbidden_name(c, arg->arg, Store))
+ return 0;
+ }
+ return 1;
+}
+
+static int
+compiler_check_debug_args_seq(struct compiler *c, asdl_seq *args)
+{
+ if (args != NULL) {
+ for (Py_ssize_t i = 0, n = asdl_seq_LEN(args); i < n; i++) {
+ if (!compiler_check_debug_one_arg(c, asdl_seq_GET(args, i)))
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+compiler_check_debug_args(struct compiler *c, arguments_ty args)
+{
+ if (!compiler_check_debug_args_seq(c, args->posonlyargs))
+ return 0;
+ if (!compiler_check_debug_args_seq(c, args->args))
+ return 0;
+ if (!compiler_check_debug_one_arg(c, args->vararg))
+ return 0;
+ if (!compiler_check_debug_args_seq(c, args->kwonlyargs))
+ return 0;
+ if (!compiler_check_debug_one_arg(c, args->kwarg))
+ return 0;
+ return 1;
+}
+
+static int
compiler_function(struct compiler *c, stmt_ty s, int is_async)
{
PyCodeObject *co;
@@ -2163,6 +2237,9 @@
scope_type = COMPILER_SCOPE_FUNCTION;
}
+ if (!compiler_check_debug_args(c, args))
+ return 0;
+
if (!compiler_decorators(c, decos))
return 0;
@@ -2398,35 +2475,49 @@
return 1;
}
-static int
-cmpop(cmpop_ty op)
+static int compiler_addcompare(struct compiler *c, cmpop_ty op)
{
+ int cmp;
switch (op) {
case Eq:
- return PyCmp_EQ;
+ cmp = Py_EQ;
+ break;
case NotEq:
- return PyCmp_NE;
+ cmp = Py_NE;
+ break;
case Lt:
- return PyCmp_LT;
+ cmp = Py_LT;
+ break;
case LtE:
- return PyCmp_LE;
+ cmp = Py_LE;
+ break;
case Gt:
- return PyCmp_GT;
+ cmp = Py_GT;
+ break;
case GtE:
- return PyCmp_GE;
+ cmp = Py_GE;
+ break;
case Is:
- return PyCmp_IS;
+ ADDOP_I(c, IS_OP, 0);
+ return 1;
case IsNot:
- return PyCmp_IS_NOT;
+ ADDOP_I(c, IS_OP, 1);
+ return 1;
case In:
- return PyCmp_IN;
+ ADDOP_I(c, CONTAINS_OP, 0);
+ return 1;
case NotIn:
- return PyCmp_NOT_IN;
+ ADDOP_I(c, CONTAINS_OP, 1);
+ return 1;
default:
- return PyCmp_BAD;
+ Py_UNREACHABLE();
}
+ ADDOP_I(c, COMPARE_OP, cmp);
+ return 1;
}
+
+
static int
compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
{
@@ -2491,14 +2582,12 @@
(expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
ADDOP(c, DUP_TOP);
ADDOP(c, ROT_THREE);
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
ADDOP_JABS(c, POP_JUMP_IF_FALSE, cleanup);
NEXT_BLOCK(c);
}
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
ADDOP_JABS(c, cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
basicblock *end = compiler_new_block(c);
if (end == NULL)
@@ -2558,6 +2647,9 @@
arguments_ty args = e->v.Lambda.args;
assert(e->kind == Lambda_kind);
+ if (!compiler_check_debug_args(c, args))
+ return 0;
+
if (!name) {
name = PyUnicode_InternFromString("<lambda>");
if (!name)
@@ -2636,10 +2728,12 @@
if (next == NULL)
return 0;
}
- else
+ else {
next = end;
- if (!compiler_jump_if(c, s->v.If.test, next, 0))
+ }
+ if (!compiler_jump_if(c, s->v.If.test, next, 0)) {
return 0;
+ }
VISIT_SEQ(c, stmt, s->v.If.body);
if (asdl_seq_LEN(s->v.If.orelse)) {
ADDOP_JREL(c, JUMP_FORWARD, end);
@@ -2659,12 +2753,12 @@
start = compiler_new_block(c);
cleanup = compiler_new_block(c);
end = compiler_new_block(c);
- if (start == NULL || end == NULL || cleanup == NULL)
+ if (start == NULL || end == NULL || cleanup == NULL) {
return 0;
-
- if (!compiler_push_fblock(c, FOR_LOOP, start, end))
+ }
+ if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) {
return 0;
-
+ }
VISIT(c, expr, s->v.For.iter);
ADDOP(c, GET_ITER);
compiler_use_next_block(c, start);
@@ -2696,16 +2790,16 @@
except = compiler_new_block(c);
end = compiler_new_block(c);
- if (start == NULL || except == NULL || end == NULL)
+ if (start == NULL || except == NULL || end == NULL) {
return 0;
-
+ }
VISIT(c, expr, s->v.AsyncFor.iter);
ADDOP(c, GET_AITER);
compiler_use_next_block(c, start);
- if (!compiler_push_fblock(c, FOR_LOOP, start, end))
+ if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) {
return 0;
-
+ }
/* SETUP_FINALLY to guard the __anext__ call */
ADDOP_JREL(c, SETUP_FINALLY, except);
ADDOP(c, GET_ANEXT);
@@ -2743,7 +2837,7 @@
// Push a dummy block so the VISIT_SEQ knows that we are
// inside a while loop so it can correctly evaluate syntax
// errors.
- if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL)) {
+ if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL, NULL)) {
return 0;
}
VISIT_SEQ(c, stmt, s->v.While.body);
@@ -2773,7 +2867,7 @@
orelse = NULL;
compiler_use_next_block(c, loop);
- if (!compiler_push_fblock(c, WHILE_LOOP, loop, end))
+ if (!compiler_push_fblock(c, WHILE_LOOP, loop, end, NULL))
return 0;
if (constant == -1) {
if (!compiler_jump_if(c, s->v.While.test, anchor, 0))
@@ -2813,12 +2907,8 @@
if (preserve_tos) {
VISIT(c, expr, s->v.Return.value);
}
- for (int depth = c->u->u_nfblocks; depth--;) {
- struct fblockinfo *info = &c->u->u_fblock[depth];
-
- if (!compiler_unwind_fblock(c, info, preserve_tos))
- return 0;
- }
+ if (!compiler_unwind_fblock_stack(c, preserve_tos, NULL))
+ return 0;
if (s->v.Return.value == NULL) {
ADDOP_LOAD_CONST(c, Py_None);
}
@@ -2833,33 +2923,32 @@
static int
compiler_break(struct compiler *c)
{
- for (int depth = c->u->u_nfblocks; depth--;) {
- struct fblockinfo *info = &c->u->u_fblock[depth];
-
- if (!compiler_unwind_fblock(c, info, 0))
- return 0;
- if (info->fb_type == WHILE_LOOP || info->fb_type == FOR_LOOP) {
- ADDOP_JABS(c, JUMP_ABSOLUTE, info->fb_exit);
- return 1;
- }
+ struct fblockinfo *loop = NULL;
+ if (!compiler_unwind_fblock_stack(c, 0, &loop)) {
+ return 0;
}
- return compiler_error(c, "'break' outside loop");
+ if (loop == NULL) {
+ return compiler_error(c, "'break' outside loop");
+ }
+ if (!compiler_unwind_fblock(c, loop, 0)) {
+ return 0;
+ }
+ ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_exit);
+ return 1;
}
static int
compiler_continue(struct compiler *c)
{
- for (int depth = c->u->u_nfblocks; depth--;) {
- struct fblockinfo *info = &c->u->u_fblock[depth];
-
- if (info->fb_type == WHILE_LOOP || info->fb_type == FOR_LOOP) {
- ADDOP_JABS(c, JUMP_ABSOLUTE, info->fb_block);
- return 1;
- }
- if (!compiler_unwind_fblock(c, info, 0))
- return 0;
+ struct fblockinfo *loop = NULL;
+ if (!compiler_unwind_fblock_stack(c, 0, &loop)) {
+ return 0;
}
- return compiler_error(c, "'continue' not properly in loop");
+ if (loop == NULL) {
+ return compiler_error(c, "'continue' not properly in loop");
+ }
+ ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_block);
+ return 1;
}
@@ -2868,10 +2957,11 @@
SETUP_FINALLY L
<code for body>
POP_BLOCK
- BEGIN_FINALLY
+ <code for finalbody>
+ JUMP E
L:
<code for finalbody>
- END_FINALLY
+ E:
The special instructions use the block stack. Each block
stack entry contains the instruction that created it (here
@@ -2883,11 +2973,6 @@
onto the block stack.
POP_BLOCK:
Pops en entry from the block stack.
- BEGIN_FINALLY
- Pushes NULL onto the value stack.
- END_FINALLY:
- Pops 1 (NULL or int) or 6 entries from the *value* stack and restore
- the raised and the caught exceptions they specify.
The block stack is unwound when an exception is raised:
when a SETUP_FINALLY entry is found, the raised and the caught
@@ -2899,47 +2984,18 @@
static int
compiler_try_finally(struct compiler *c, stmt_ty s)
{
- basicblock *start, *newcurblock, *body, *end;
- int break_finally = 1;
+ basicblock *body, *end, *exit;
body = compiler_new_block(c);
end = compiler_new_block(c);
- if (body == NULL || end == NULL)
+ exit = compiler_new_block(c);
+ if (body == NULL || end == NULL || exit == NULL)
return 0;
- start = c->u->u_curblock;
-
- /* `finally` block. Compile it first to determine if any of "break",
- "continue" or "return" are used in it. */
- compiler_use_next_block(c, end);
- if (!compiler_push_fblock(c, FINALLY_END, end, end))
- return 0;
- VISIT_SEQ(c, stmt, s->v.Try.finalbody);
- ADDOP(c, END_FINALLY);
- break_finally = (c->u->u_fblock[c->u->u_nfblocks - 1].fb_exit == NULL);
- if (break_finally) {
- /* Pops a placeholder. See below */
- ADDOP(c, POP_TOP);
- }
- compiler_pop_fblock(c, FINALLY_END, end);
-
- newcurblock = c->u->u_curblock;
- c->u->u_curblock = start;
- start->b_next = NULL;
-
/* `try` block */
- c->u->u_lineno_set = 0;
- c->u->u_lineno = s->lineno;
- c->u->u_col_offset = s->col_offset;
- if (break_finally) {
- /* Pushes a placeholder for the value of "return" in the "try" block
- to balance the stack for "break", "continue" and "return" in
- the "finally" block. */
- ADDOP_LOAD_CONST(c, Py_None);
- }
ADDOP_JREL(c, SETUP_FINALLY, end);
compiler_use_next_block(c, body);
- if (!compiler_push_fblock(c, break_finally ? FINALLY_TRY2 : FINALLY_TRY, body, end))
+ if (!compiler_push_fblock(c, FINALLY_TRY, body, end, s->v.Try.finalbody))
return 0;
if (s->v.Try.handlers && asdl_seq_LEN(s->v.Try.handlers)) {
if (!compiler_try_except(c, s))
@@ -2949,12 +3005,17 @@
VISIT_SEQ(c, stmt, s->v.Try.body);
}
ADDOP(c, POP_BLOCK);
- ADDOP(c, BEGIN_FINALLY);
- compiler_pop_fblock(c, break_finally ? FINALLY_TRY2 : FINALLY_TRY, body);
-
- c->u->u_curblock->b_next = end;
- c->u->u_curblock = newcurblock;
-
+ compiler_pop_fblock(c, FINALLY_TRY, body);
+ VISIT_SEQ(c, stmt, s->v.Try.finalbody);
+ ADDOP_JREL(c, JUMP_FORWARD, exit);
+ /* `finally` block */
+ compiler_use_next_block(c, end);
+ if (!compiler_push_fblock(c, FINALLY_END, end, NULL, NULL))
+ return 0;
+ VISIT_SEQ(c, stmt, s->v.Try.finalbody);
+ compiler_pop_fblock(c, FINALLY_END, end);
+ ADDOP(c, RERAISE);
+ compiler_use_next_block(c, exit);
return 1;
}
@@ -2972,8 +3033,7 @@
[tb, val, exc] L1: DUP )
[tb, val, exc, exc] <evaluate E1> )
- [tb, val, exc, exc, E1] COMPARE_OP EXC_MATCH ) only if E1
- [tb, val, exc, 1-or-0] POP_JUMP_IF_FALSE L2 )
+ [tb, val, exc, exc, E1] JUMP_IF_NOT_EXC_MATCH L2 ) only if E1
[tb, val, exc] POP
[tb, val] <assign to V1> (or POP if no V1)
[tb] POP
@@ -2983,7 +3043,7 @@
[tb, val, exc] L2: DUP
.............................etc.......................
- [tb, val, exc] Ln+1: END_FINALLY # re-raise exception
+ [tb, val, exc] Ln+1: RERAISE # re-raise exception
[] L0: <next statement>
@@ -3003,30 +3063,30 @@
return 0;
ADDOP_JREL(c, SETUP_FINALLY, except);
compiler_use_next_block(c, body);
- if (!compiler_push_fblock(c, EXCEPT, body, NULL))
+ if (!compiler_push_fblock(c, TRY_EXCEPT, body, NULL, NULL))
return 0;
VISIT_SEQ(c, stmt, s->v.Try.body);
ADDOP(c, POP_BLOCK);
- compiler_pop_fblock(c, EXCEPT, body);
+ compiler_pop_fblock(c, TRY_EXCEPT, body);
ADDOP_JREL(c, JUMP_FORWARD, orelse);
n = asdl_seq_LEN(s->v.Try.handlers);
compiler_use_next_block(c, except);
+ /* Runtime will push a block here, so we need to account for that */
+ if (!compiler_push_fblock(c, EXCEPTION_HANDLER, NULL, NULL, NULL))
+ return 0;
for (i = 0; i < n; i++) {
excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
s->v.Try.handlers, i);
if (!handler->v.ExceptHandler.type && i < n-1)
return compiler_error(c, "default 'except:' must be last");
- c->u->u_lineno_set = 0;
- c->u->u_lineno = handler->lineno;
- c->u->u_col_offset = handler->col_offset;
+ SET_LOC(c, handler);
except = compiler_new_block(c);
if (except == NULL)
return 0;
if (handler->v.ExceptHandler.type) {
ADDOP(c, DUP_TOP);
VISIT(c, expr, handler->v.ExceptHandler.type);
- ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH);
- ADDOP_JABS(c, POP_JUMP_IF_FALSE, except);
+ ADDOP_JABS(c, JUMP_IF_NOT_EXC_MATCH, except);
}
ADDOP(c, POP_TOP);
if (handler->v.ExceptHandler.name) {
@@ -3055,28 +3115,29 @@
/* second try: */
ADDOP_JREL(c, SETUP_FINALLY, cleanup_end);
compiler_use_next_block(c, cleanup_body);
- if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, cleanup_end))
+ if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, handler->v.ExceptHandler.name))
return 0;
/* second # body */
VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
- ADDOP(c, POP_BLOCK);
- ADDOP(c, BEGIN_FINALLY);
compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
+ ADDOP(c, POP_BLOCK);
+ ADDOP(c, POP_EXCEPT);
+ /* name = None; del name */
+ ADDOP_LOAD_CONST(c, Py_None);
+ compiler_nameop(c, handler->v.ExceptHandler.name, Store);
+ compiler_nameop(c, handler->v.ExceptHandler.name, Del);
+ ADDOP_JREL(c, JUMP_FORWARD, end);
- /* finally: */
+ /* except: */
compiler_use_next_block(c, cleanup_end);
- if (!compiler_push_fblock(c, FINALLY_END, cleanup_end, NULL))
- return 0;
/* name = None; del name */
ADDOP_LOAD_CONST(c, Py_None);
compiler_nameop(c, handler->v.ExceptHandler.name, Store);
compiler_nameop(c, handler->v.ExceptHandler.name, Del);
- ADDOP(c, END_FINALLY);
- ADDOP(c, POP_EXCEPT);
- compiler_pop_fblock(c, FINALLY_END, cleanup_end);
+ ADDOP(c, RERAISE);
}
else {
basicblock *cleanup_body;
@@ -3088,16 +3149,17 @@
ADDOP(c, POP_TOP);
ADDOP(c, POP_TOP);
compiler_use_next_block(c, cleanup_body);
- if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL))
+ if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, NULL))
return 0;
VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
- ADDOP(c, POP_EXCEPT);
compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
+ ADDOP(c, POP_EXCEPT);
+ ADDOP_JREL(c, JUMP_FORWARD, end);
}
- ADDOP_JREL(c, JUMP_FORWARD, end);
compiler_use_next_block(c, except);
}
- ADDOP(c, END_FINALLY);
+ compiler_pop_fblock(c, EXCEPTION_HANDLER, NULL);
+ ADDOP(c, RERAISE);
compiler_use_next_block(c, orelse);
VISIT_SEQ(c, stmt, s->v.Try.orelse);
compiler_use_next_block(c, end);
@@ -3265,16 +3327,10 @@
static int
compiler_assert(struct compiler *c, stmt_ty s)
{
- static PyObject *assertion_error = NULL;
basicblock *end;
if (c->c_optimize)
return 1;
- if (assertion_error == NULL) {
- assertion_error = PyUnicode_InternFromString("AssertionError");
- if (assertion_error == NULL)
- return 0;
- }
if (s->v.Assert.test->kind == Tuple_kind &&
asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0)
{
@@ -3289,7 +3345,7 @@
return 0;
if (!compiler_jump_if(c, s->v.Assert.test, end, 1))
return 0;
- ADDOP_O(c, LOAD_GLOBAL, assertion_error, names);
+ ADDOP(c, LOAD_ASSERTION_ERROR);
if (s->v.Assert.msg) {
VISIT(c, expr, s->v.Assert.msg);
ADDOP_I(c, CALL_FUNCTION, 1);
@@ -3324,9 +3380,7 @@
Py_ssize_t i, n;
/* Always assign a lineno to the next instruction for a stmt. */
- c->u->u_lineno = s->lineno;
- c->u->u_col_offset = s->col_offset;
- c->u->u_lineno_set = 0;
+ SET_LOC(c, s);
switch (s->kind) {
case FunctionDef_kind:
@@ -3422,7 +3476,7 @@
}
static int
-binop(struct compiler *c, operator_ty op)
+binop(operator_ty op)
{
switch (op) {
case Add:
@@ -3459,7 +3513,7 @@
}
static int
-inplace_binop(struct compiler *c, operator_ty op)
+inplace_binop(operator_ty op)
{
switch (op) {
case Add:
@@ -3504,12 +3558,14 @@
PyObject *dict = c->u->u_names;
PyObject *mangled;
- /* XXX AugStore isn't used anywhere! */
assert(!_PyUnicode_EqualToASCIIString(name, "None") &&
!_PyUnicode_EqualToASCIIString(name, "True") &&
!_PyUnicode_EqualToASCIIString(name, "False"));
+ if (forbidden_name(c, name, ctx))
+ return 0;
+
mangled = _Py_Mangle(c->u->u_private, name);
if (!mangled)
return 0;
@@ -3551,76 +3607,36 @@
case Load:
op = (c->u->u_ste->ste_type == ClassBlock) ? LOAD_CLASSDEREF : LOAD_DEREF;
break;
- case Store:
- op = STORE_DEREF;
- break;
- case AugLoad:
- case AugStore:
- break;
+ case Store: op = STORE_DEREF; break;
case Del: op = DELETE_DEREF; break;
- case Param:
- default:
- PyErr_SetString(PyExc_SystemError,
- "param invalid for deref variable");
- return 0;
}
break;
case OP_FAST:
switch (ctx) {
case Load: op = LOAD_FAST; break;
- case Store:
- op = STORE_FAST;
- break;
+ case Store: op = STORE_FAST; break;
case Del: op = DELETE_FAST; break;
- case AugLoad:
- case AugStore:
- break;
- case Param:
- default:
- PyErr_SetString(PyExc_SystemError,
- "param invalid for local variable");
- return 0;
}
ADDOP_N(c, op, mangled, varnames);
return 1;
case OP_GLOBAL:
switch (ctx) {
case Load: op = LOAD_GLOBAL; break;
- case Store:
- op = STORE_GLOBAL;
- break;
+ case Store: op = STORE_GLOBAL; break;
case Del: op = DELETE_GLOBAL; break;
- case AugLoad:
- case AugStore:
- break;
- case Param:
- default:
- PyErr_SetString(PyExc_SystemError,
- "param invalid for global variable");
- return 0;
}
break;
case OP_NAME:
switch (ctx) {
case Load: op = LOAD_NAME; break;
- case Store:
- op = STORE_NAME;
- break;
+ case Store: op = STORE_NAME; break;
case Del: op = DELETE_NAME; break;
- case AugLoad:
- case AugStore:
- break;
- case Param:
- default:
- PyErr_SetString(PyExc_SystemError,
- "param invalid for name variable");
- return 0;
}
break;
}
assert(op);
- arg = compiler_add_o(c, dict, mangled);
+ arg = compiler_add_o(dict, mangled);
Py_DECREF(mangled);
if (arg < 0)
return 0;
@@ -3656,36 +3672,79 @@
}
static int
-starunpack_helper(struct compiler *c, asdl_seq *elts,
- int single_op, int inner_op, int outer_op)
+starunpack_helper(struct compiler *c, asdl_seq *elts, int pushed,
+ int build, int add, int extend, int tuple)
{
Py_ssize_t n = asdl_seq_LEN(elts);
- Py_ssize_t i, nsubitems = 0, nseen = 0;
+ Py_ssize_t i, seen_star = 0;
+ if (n > 2 && are_all_items_const(elts, 0, n)) {
+ PyObject *folded = PyTuple_New(n);
+ if (folded == NULL) {
+ return 0;
+ }
+ PyObject *val;
+ for (i = 0; i < n; i++) {
+ val = ((expr_ty)asdl_seq_GET(elts, i))->v.Constant.value;
+ Py_INCREF(val);
+ PyTuple_SET_ITEM(folded, i, val);
+ }
+ if (tuple) {
+ ADDOP_LOAD_CONST_NEW(c, folded);
+ } else {
+ if (add == SET_ADD) {
+ Py_SETREF(folded, PyFrozenSet_New(folded));
+ if (folded == NULL) {
+ return 0;
+ }
+ }
+ ADDOP_I(c, build, pushed);
+ ADDOP_LOAD_CONST_NEW(c, folded);
+ ADDOP_I(c, extend, 1);
+ }
+ return 1;
+ }
+
for (i = 0; i < n; i++) {
expr_ty elt = asdl_seq_GET(elts, i);
if (elt->kind == Starred_kind) {
- if (nseen) {
- ADDOP_I(c, inner_op, nseen);
- nseen = 0;
- nsubitems++;
+ seen_star = 1;
+ }
+ }
+ if (seen_star) {
+ seen_star = 0;
+ for (i = 0; i < n; i++) {
+ expr_ty elt = asdl_seq_GET(elts, i);
+ if (elt->kind == Starred_kind) {
+ if (seen_star == 0) {
+ ADDOP_I(c, build, i+pushed);
+ seen_star = 1;
+ }
+ VISIT(c, expr, elt->v.Starred.value);
+ ADDOP_I(c, extend, 1);
}
- VISIT(c, expr, elt->v.Starred.value);
- nsubitems++;
+ else {
+ VISIT(c, expr, elt);
+ if (seen_star) {
+ ADDOP_I(c, add, 1);
+ }
+ }
}
- else {
+ assert(seen_star);
+ if (tuple) {
+ ADDOP(c, LIST_TO_TUPLE);
+ }
+ }
+ else {
+ for (i = 0; i < n; i++) {
+ expr_ty elt = asdl_seq_GET(elts, i);
VISIT(c, expr, elt);
- nseen++;
+ }
+ if (tuple) {
+ ADDOP_I(c, BUILD_TUPLE, n+pushed);
+ } else {
+ ADDOP_I(c, build, n+pushed);
}
}
- if (nsubitems) {
- if (nseen) {
- ADDOP_I(c, inner_op, nseen);
- nsubitems++;
- }
- ADDOP_I(c, outer_op, nsubitems);
- }
- else
- ADDOP_I(c, single_op, nseen);
return 1;
}
@@ -3705,17 +3764,19 @@
"star-unpacking assignment");
ADDOP_I(c, UNPACK_EX, (i + ((n-i-1) << 8)));
seen_star = 1;
- asdl_seq_SET(elts, i, elt->v.Starred.value);
}
else if (elt->kind == Starred_kind) {
return compiler_error(c,
- "two starred expressions in assignment");
+ "multiple starred expressions in assignment");
}
}
if (!seen_star) {
ADDOP_I(c, UNPACK_SEQUENCE, n);
}
- VISIT_SEQ(c, expr, elts);
+ for (i = 0; i < n; i++) {
+ expr_ty elt = asdl_seq_GET(elts, i);
+ VISIT(c, expr, elt->kind != Starred_kind ? elt : elt->v.Starred.value);
+ }
return 1;
}
@@ -3727,8 +3788,8 @@
return assignment_helper(c, elts);
}
else if (e->v.List.ctx == Load) {
- return starunpack_helper(c, elts,
- BUILD_LIST, BUILD_TUPLE, BUILD_LIST_UNPACK);
+ return starunpack_helper(c, elts, 0, BUILD_LIST,
+ LIST_APPEND, LIST_EXTEND, 0);
}
else
VISIT_SEQ(c, expr, elts);
@@ -3743,8 +3804,8 @@
return assignment_helper(c, elts);
}
else if (e->v.Tuple.ctx == Load) {
- return starunpack_helper(c, elts,
- BUILD_TUPLE, BUILD_TUPLE, BUILD_TUPLE_UNPACK);
+ return starunpack_helper(c, elts, 0, BUILD_LIST,
+ LIST_APPEND, LIST_EXTEND, 1);
}
else
VISIT_SEQ(c, expr, elts);
@@ -3754,8 +3815,8 @@
static int
compiler_set(struct compiler *c, expr_ty e)
{
- return starunpack_helper(c, e->v.Set.elts, BUILD_SET,
- BUILD_SET, BUILD_SET_UNPACK);
+ return starunpack_helper(c, e->v.Set.elts, 0, BUILD_SET,
+ SET_ADD, SET_UPDATE, 0);
}
static int
@@ -3805,37 +3866,58 @@
compiler_dict(struct compiler *c, expr_ty e)
{
Py_ssize_t i, n, elements;
- int containers;
+ int have_dict;
int is_unpacking = 0;
n = asdl_seq_LEN(e->v.Dict.values);
- containers = 0;
+ have_dict = 0;
elements = 0;
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)) {
- if (!compiler_subdict(c, e, i - elements, i))
- return 0;
- containers++;
- elements = 0;
- }
if (is_unpacking) {
+ if (elements) {
+ if (!compiler_subdict(c, e, i - elements, i)) {
+ return 0;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_UPDATE, 1);
+ }
+ have_dict = 1;
+ elements = 0;
+ }
+ if (have_dict == 0) {
+ ADDOP_I(c, BUILD_MAP, 0);
+ have_dict = 1;
+ }
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
- containers++;
+ ADDOP_I(c, DICT_UPDATE, 1);
}
else {
- elements++;
+ if (elements == 0xFFFF) {
+ if (!compiler_subdict(c, e, i - elements, i + 1)) {
+ return 0;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_UPDATE, 1);
+ }
+ have_dict = 1;
+ elements = 0;
+ }
+ else {
+ elements++;
+ }
}
}
- if (elements || containers == 0) {
- if (!compiler_subdict(c, e, n - elements, n))
+ if (elements) {
+ if (!compiler_subdict(c, e, n - elements, n)) {
return 0;
- containers++;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_UPDATE, 1);
+ }
+ have_dict = 1;
}
- /* If there is more than one dict, they need to be merged into a new
- * dict. If there is one dict and it's an unpacking, then it needs
- * to be copied into a new dict." */
- if (containers > 1 || is_unpacking) {
- ADDOP_I(c, BUILD_MAP_UNPACK, containers);
+ if (!have_dict) {
+ ADDOP_I(c, BUILD_MAP, 0);
}
return 1;
}
@@ -3853,8 +3935,7 @@
n = asdl_seq_LEN(e->v.Compare.ops) - 1;
if (n == 0) {
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, 0))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, 0));
}
else {
basicblock *cleanup = compiler_new_block(c);
@@ -3865,14 +3946,12 @@
(expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
ADDOP(c, DUP_TOP);
ADDOP(c, ROT_THREE);
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
ADDOP_JABS(c, JUMP_IF_FALSE_OR_POP, cleanup);
NEXT_BLOCK(c);
}
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
basicblock *end = compiler_new_block(c);
if (end == NULL)
return 0;
@@ -3908,7 +3987,7 @@
case FormattedValue_kind:
return &PyUnicode_Type;
case Constant_kind:
- return e->v.Constant.value->ob_type;
+ return Py_TYPE(e->v.Constant.value);
default:
return NULL;
}
@@ -3965,14 +4044,11 @@
}
static int
-check_index(struct compiler *c, expr_ty e, slice_ty s)
+check_index(struct compiler *c, expr_ty e, expr_ty s)
{
PyObject *v;
- if (s->kind != Index_kind) {
- return 1;
- }
- PyTypeObject *index_type = infer_type(s->v.Index.value);
+ PyTypeObject *index_type = infer_type(s);
if (index_type == NULL
|| PyType_FastSubclass(index_type, Py_TPFLAGS_LONG_SUBCLASS)
|| index_type == &PySlice_Type) {
@@ -4033,6 +4109,35 @@
}
static int
+validate_keywords(struct compiler *c, asdl_seq *keywords)
+{
+ Py_ssize_t nkeywords = asdl_seq_LEN(keywords);
+ for (Py_ssize_t i = 0; i < nkeywords; i++) {
+ keyword_ty key = ((keyword_ty)asdl_seq_GET(keywords, i));
+ if (key->arg == NULL) {
+ continue;
+ }
+ if (forbidden_name(c, key->arg, Store)) {
+ return -1;
+ }
+ for (Py_ssize_t j = i + 1; j < nkeywords; j++) {
+ keyword_ty other = ((keyword_ty)asdl_seq_GET(keywords, j));
+ if (other->arg && !PyUnicode_Compare(key->arg, other->arg)) {
+ PyObject *msg = PyUnicode_FromFormat("keyword argument repeated: %U", key->arg);
+ if (msg == NULL) {
+ return -1;
+ }
+ c->u->u_col_offset = other->col_offset;
+ compiler_error(c, PyUnicode_AsUTF8(msg));
+ Py_DECREF(msg);
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+static int
compiler_call(struct compiler *c, expr_ty e)
{
int ret = maybe_optimize_method_call(c, e);
@@ -4147,89 +4252,34 @@
asdl_seq *keywords)
{
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;
+ if (validate_keywords(c, keywords) == -1) {
+ return 0;
+ }
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. */
- if (nseen) {
- ADDOP_I(c, BUILD_TUPLE, nseen);
- nseen = 0;
- nsubargs++;
- }
- VISIT(c, expr, elt->v.Starred.value);
- nsubargs++;
+ goto ex_call;
}
- else {
- VISIT(c, expr, elt);
- nseen++;
+ }
+ for (i = 0; i < nkwelts; i++) {
+ keyword_ty kw = asdl_seq_GET(keywords, i);
+ if (kw->arg == NULL) {
+ goto ex_call;
}
}
- /* 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_TUPLE_UNPACK_WITH_CALL, nsubargs);
- }
- 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++;
- }
- else {
- nseen++;
- }
- }
- if (nseen) {
- /* Pack up any trailing keyword arguments. */
- if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts))
- return 0;
- nsubkwargs++;
- }
- if (nsubkwargs > 1) {
- /* Pack it all up */
- ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs);
- }
- ADDOP_I(c, CALL_FUNCTION_EX, nsubkwargs > 0);
- return 1;
+ /* No * or ** args, so can use faster calling sequence */
+ for (i = 0; i < nelts; i++) {
+ expr_ty elt = asdl_seq_GET(args, i);
+ assert(elt->kind != Starred_kind);
+ VISIT(c, expr, elt);
}
- else if (nkwelts) {
+ if (nkwelts) {
PyObject *names;
VISIT_SEQ(c, keyword, keywords);
names = PyTuple_New(nkwelts);
@@ -4249,6 +4299,62 @@
ADDOP_I(c, CALL_FUNCTION, n + nelts);
return 1;
}
+
+ex_call:
+
+ /* Do positional arguments. */
+ if (n ==0 && nelts == 1 && ((expr_ty)asdl_seq_GET(args, 0))->kind == Starred_kind) {
+ VISIT(c, expr, ((expr_ty)asdl_seq_GET(args, 0))->v.Starred.value);
+ }
+ else if (starunpack_helper(c, args, n, BUILD_LIST,
+ LIST_APPEND, LIST_EXTEND, 1) == 0) {
+ return 0;
+ }
+ /* Then keyword arguments */
+ if (nkwelts) {
+ /* Has a new dict been pushed */
+ int have_dict = 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;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_MERGE, 1);
+ }
+ have_dict = 1;
+ nseen = 0;
+ }
+ if (!have_dict) {
+ ADDOP_I(c, BUILD_MAP, 0);
+ have_dict = 1;
+ }
+ VISIT(c, expr, kw->value);
+ ADDOP_I(c, DICT_MERGE, 1);
+ }
+ else {
+ nseen++;
+ }
+ }
+ if (nseen) {
+ /* Pack up any trailing keyword arguments. */
+ if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts)) {
+ return 0;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_MERGE, 1);
+ }
+ have_dict = 1;
+ }
+ assert(have_dict);
+ }
+ ADDOP_I(c, CALL_FUNCTION_EX, nkwelts > 0);
+ return 1;
}
@@ -4269,22 +4375,24 @@
static int
compiler_comprehension_generator(struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
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);
+ c, generators, gen_index, depth, elt, val, type);
} else {
return compiler_sync_comprehension_generator(
- c, generators, gen_index, elt, val, type);
+ c, generators, gen_index, depth, elt, val, type);
}
}
static int
compiler_sync_comprehension_generator(struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type)
{
/* generate code for the iterator, then each of the ifs,
@@ -4312,12 +4420,38 @@
}
else {
/* Sub-iter - calculate on the fly */
- VISIT(c, expr, gen->iter);
- ADDOP(c, GET_ITER);
+ /* Fast path for the temporary variable assignment idiom:
+ for y in [f(x)]
+ */
+ asdl_seq *elts;
+ switch (gen->iter->kind) {
+ case List_kind:
+ elts = gen->iter->v.List.elts;
+ break;
+ case Tuple_kind:
+ elts = gen->iter->v.Tuple.elts;
+ break;
+ default:
+ elts = NULL;
+ }
+ if (asdl_seq_LEN(elts) == 1) {
+ expr_ty elt = asdl_seq_GET(elts, 0);
+ if (elt->kind != Starred_kind) {
+ VISIT(c, expr, elt);
+ start = NULL;
+ }
+ }
+ if (start) {
+ VISIT(c, expr, gen->iter);
+ ADDOP(c, GET_ITER);
+ }
}
- compiler_use_next_block(c, start);
- ADDOP_JREL(c, FOR_ITER, anchor);
- NEXT_BLOCK(c);
+ if (start) {
+ depth++;
+ compiler_use_next_block(c, start);
+ ADDOP_JREL(c, FOR_ITER, anchor);
+ NEXT_BLOCK(c);
+ }
VISIT(c, expr, gen->target);
/* XXX this needs to be cleaned up...a lot! */
@@ -4331,7 +4465,7 @@
if (++gen_index < asdl_seq_LEN(generators))
if (!compiler_comprehension_generator(c,
- generators, gen_index,
+ generators, gen_index, depth,
elt, val, type))
return 0;
@@ -4346,18 +4480,18 @@
break;
case COMP_LISTCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, LIST_APPEND, gen_index + 1);
+ ADDOP_I(c, LIST_APPEND, depth + 1);
break;
case COMP_SETCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, SET_ADD, gen_index + 1);
+ ADDOP_I(c, SET_ADD, depth + 1);
break;
case COMP_DICTCOMP:
/* With '{k: v}', k is evaluated before v, so we do
the same. */
VISIT(c, expr, elt);
VISIT(c, expr, val);
- ADDOP_I(c, MAP_ADD, gen_index + 1);
+ ADDOP_I(c, MAP_ADD, depth + 1);
break;
default:
return 0;
@@ -4366,8 +4500,10 @@
compiler_use_next_block(c, skip);
}
compiler_use_next_block(c, if_cleanup);
- ADDOP_JABS(c, JUMP_ABSOLUTE, start);
- compiler_use_next_block(c, anchor);
+ if (start) {
+ ADDOP_JABS(c, JUMP_ABSOLUTE, start);
+ compiler_use_next_block(c, anchor);
+ }
return 1;
}
@@ -4375,6 +4511,7 @@
static int
compiler_async_comprehension_generator(struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type)
{
comprehension_ty gen;
@@ -4418,9 +4555,10 @@
NEXT_BLOCK(c);
}
+ depth++;
if (++gen_index < asdl_seq_LEN(generators))
if (!compiler_comprehension_generator(c,
- generators, gen_index,
+ generators, gen_index, depth,
elt, val, type))
return 0;
@@ -4435,18 +4573,18 @@
break;
case COMP_LISTCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, LIST_APPEND, gen_index + 1);
+ ADDOP_I(c, LIST_APPEND, depth + 1);
break;
case COMP_SETCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, SET_ADD, gen_index + 1);
+ ADDOP_I(c, SET_ADD, depth + 1);
break;
case COMP_DICTCOMP:
/* With '{k: v}', k is evaluated before v, so we do
the same. */
VISIT(c, expr, elt);
VISIT(c, expr, val);
- ADDOP_I(c, MAP_ADD, gen_index + 1);
+ ADDOP_I(c, MAP_ADD, depth + 1);
break;
default:
return 0;
@@ -4511,7 +4649,7 @@
ADDOP_I(c, op, 0);
}
- if (!compiler_comprehension_generator(c, generators, 0, elt,
+ if (!compiler_comprehension_generator(c, generators, 0, 0, elt,
val, type))
goto error_in_scope;
@@ -4643,6 +4781,22 @@
return -1;
}
+static int
+compiler_with_except_finish(struct compiler *c) {
+ basicblock *exit;
+ exit = compiler_new_block(c);
+ if (exit == NULL)
+ return 0;
+ ADDOP_JABS(c, POP_JUMP_IF_TRUE, exit);
+ ADDOP(c, RERAISE);
+ compiler_use_next_block(c, exit);
+ ADDOP(c, POP_TOP);
+ ADDOP(c, POP_TOP);
+ ADDOP(c, POP_TOP);
+ ADDOP(c, POP_EXCEPT);
+ ADDOP(c, POP_TOP);
+ return 1;
+}
/*
Implements the async with statement.
@@ -4671,7 +4825,7 @@
static int
compiler_async_with(struct compiler *c, stmt_ty s, int pos)
{
- basicblock *block, *finally;
+ basicblock *block, *final, *exit;
withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos);
assert(s->kind == AsyncWith_kind);
@@ -4682,8 +4836,9 @@
}
block = compiler_new_block(c);
- finally = compiler_new_block(c);
- if (!block || !finally)
+ final = compiler_new_block(c);
+ exit = compiler_new_block(c);
+ if (!block || !final || !exit)
return 0;
/* Evaluate EXPR */
@@ -4694,11 +4849,11 @@
ADDOP_LOAD_CONST(c, Py_None);
ADDOP(c, YIELD_FROM);
- ADDOP_JREL(c, SETUP_ASYNC_WITH, finally);
+ ADDOP_JREL(c, SETUP_ASYNC_WITH, final);
/* SETUP_ASYNC_WITH pushes a finally block. */
compiler_use_next_block(c, block);
- if (!compiler_push_fblock(c, ASYNC_WITH, block, finally)) {
+ if (!compiler_push_fblock(c, ASYNC_WITH, block, final, NULL)) {
return 0;
}
@@ -4717,76 +4872,80 @@
else if (!compiler_async_with(c, s, pos))
return 0;
- /* End of try block; start the finally block */
- ADDOP(c, POP_BLOCK);
- ADDOP(c, BEGIN_FINALLY);
compiler_pop_fblock(c, ASYNC_WITH, block);
+ ADDOP(c, POP_BLOCK);
+ /* End of body; start the cleanup */
- compiler_use_next_block(c, finally);
- if (!compiler_push_fblock(c, FINALLY_END, finally, NULL))
+ /* For successful outcome:
+ * call __exit__(None, None, None)
+ */
+ if(!compiler_call_exit_with_nones(c))
return 0;
+ ADDOP(c, GET_AWAITABLE);
+ ADDOP_O(c, LOAD_CONST, Py_None, consts);
+ ADDOP(c, YIELD_FROM);
- /* Finally block starts; context.__exit__ is on the stack under
- the exception or return information. Just issue our magic
- opcode. */
- ADDOP(c, WITH_CLEANUP_START);
+ ADDOP(c, POP_TOP);
+ ADDOP_JABS(c, JUMP_ABSOLUTE, exit);
+
+ /* For exceptional outcome: */
+ compiler_use_next_block(c, final);
+
+ ADDOP(c, WITH_EXCEPT_START);
ADDOP(c, GET_AWAITABLE);
ADDOP_LOAD_CONST(c, Py_None);
ADDOP(c, YIELD_FROM);
+ compiler_with_except_finish(c);
- ADDOP(c, WITH_CLEANUP_FINISH);
-
- /* Finally block ends. */
- ADDOP(c, END_FINALLY);
- compiler_pop_fblock(c, FINALLY_END, finally);
+compiler_use_next_block(c, exit);
return 1;
}
/*
Implements the with statement from PEP 343.
-
- The semantics outlined in that PEP are as follows:
-
with EXPR as VAR:
BLOCK
-
- It is implemented roughly as:
-
- context = EXPR
- exit = context.__exit__ # not calling it
- value = context.__enter__()
- try:
- VAR = value # if VAR present in the syntax
- BLOCK
- finally:
- if an exception was raised:
- exc = copy of (exception, instance, traceback)
- else:
- exc = (None, None, None)
- exit(*exc)
+ is implemented as:
+ <code for EXPR>
+ SETUP_WITH E
+ <code to store to VAR> or POP_TOP
+ <code for BLOCK>
+ LOAD_CONST (None, None, None)
+ CALL_FUNCTION_EX 0
+ JUMP_FORWARD EXIT
+ E: WITH_EXCEPT_START (calls EXPR.__exit__)
+ POP_JUMP_IF_TRUE T:
+ RERAISE
+ T: POP_TOP * 3 (remove exception from stack)
+ POP_EXCEPT
+ POP_TOP
+ EXIT:
*/
+
static int
compiler_with(struct compiler *c, stmt_ty s, int pos)
{
- basicblock *block, *finally;
+ basicblock *block, *final, *exit;
withitem_ty item = asdl_seq_GET(s->v.With.items, pos);
assert(s->kind == With_kind);
block = compiler_new_block(c);
- finally = compiler_new_block(c);
- if (!block || !finally)
+ final = compiler_new_block(c);
+ exit = compiler_new_block(c);
+ if (!block || !final || !exit)
return 0;
/* Evaluate EXPR */
VISIT(c, expr, item->context_expr);
- ADDOP_JREL(c, SETUP_WITH, finally);
+ /* Will push bound __exit__ */
+ ADDOP_JREL(c, SETUP_WITH, final);
/* SETUP_WITH pushes a finally block. */
compiler_use_next_block(c, block);
- if (!compiler_push_fblock(c, WITH, block, finally)) {
+ if (!compiler_push_fblock(c, WITH, block, final, NULL)) {
return 0;
}
@@ -4805,24 +4964,26 @@
else if (!compiler_with(c, s, pos))
return 0;
- /* End of try block; start the finally block */
ADDOP(c, POP_BLOCK);
- ADDOP(c, BEGIN_FINALLY);
compiler_pop_fblock(c, WITH, block);
- compiler_use_next_block(c, finally);
- if (!compiler_push_fblock(c, FINALLY_END, finally, NULL))
+ /* End of body; start the cleanup. */
+
+ /* For successful outcome:
+ * call __exit__(None, None, None)
+ */
+ if (!compiler_call_exit_with_nones(c))
return 0;
+ ADDOP(c, POP_TOP);
+ ADDOP_JREL(c, JUMP_FORWARD, exit);
- /* Finally block starts; context.__exit__ is on the stack under
- the exception or return information. Just issue our magic
- opcode. */
- ADDOP(c, WITH_CLEANUP_START);
- ADDOP(c, WITH_CLEANUP_FINISH);
+ /* For exceptional outcome: */
+ compiler_use_next_block(c, final);
- /* Finally block ends. */
- ADDOP(c, END_FINALLY);
- compiler_pop_fblock(c, FINALLY_END, finally);
+ ADDOP(c, WITH_EXCEPT_START);
+ compiler_with_except_finish(c);
+
+ compiler_use_next_block(c, exit);
return 1;
}
@@ -4840,7 +5001,7 @@
case BinOp_kind:
VISIT(c, expr, e->v.BinOp.left);
VISIT(c, expr, e->v.BinOp.right);
- ADDOP(c, binop(c, e->v.BinOp.op));
+ ADDOP(c, binop(e->v.BinOp.op));
break;
case UnaryOp_kind:
VISIT(c, expr, e->v.UnaryOp.operand);
@@ -4915,65 +5076,23 @@
return compiler_formatted_value(c, e);
/* The following exprs can be assignment targets. */
case Attribute_kind:
- if (e->v.Attribute.ctx != AugStore)
- VISIT(c, expr, e->v.Attribute.value);
+ VISIT(c, expr, e->v.Attribute.value);
switch (e->v.Attribute.ctx) {
- case AugLoad:
- ADDOP(c, DUP_TOP);
- /* Fall through */
case Load:
ADDOP_NAME(c, LOAD_ATTR, e->v.Attribute.attr, names);
break;
- case AugStore:
- ADDOP(c, ROT_TWO);
- /* Fall through */
case Store:
+ if (forbidden_name(c, e->v.Attribute.attr, e->v.Attribute.ctx))
+ return 0;
ADDOP_NAME(c, STORE_ATTR, e->v.Attribute.attr, names);
break;
case Del:
ADDOP_NAME(c, DELETE_ATTR, e->v.Attribute.attr, names);
break;
- case Param:
- default:
- PyErr_SetString(PyExc_SystemError,
- "param invalid in attribute expression");
- return 0;
}
break;
case Subscript_kind:
- switch (e->v.Subscript.ctx) {
- case AugLoad:
- VISIT(c, expr, e->v.Subscript.value);
- VISIT_SLICE(c, e->v.Subscript.slice, AugLoad);
- break;
- case Load:
- if (!check_subscripter(c, e->v.Subscript.value)) {
- return 0;
- }
- if (!check_index(c, e->v.Subscript.value, e->v.Subscript.slice)) {
- return 0;
- }
- VISIT(c, expr, e->v.Subscript.value);
- VISIT_SLICE(c, e->v.Subscript.slice, Load);
- break;
- case AugStore:
- VISIT_SLICE(c, e->v.Subscript.slice, AugStore);
- break;
- case Store:
- VISIT(c, expr, e->v.Subscript.value);
- VISIT_SLICE(c, e->v.Subscript.slice, Store);
- break;
- case Del:
- VISIT(c, expr, e->v.Subscript.value);
- VISIT_SLICE(c, e->v.Subscript.slice, Del);
- break;
- case Param:
- default:
- PyErr_SetString(PyExc_SystemError,
- "param invalid in subscript expression");
- return 0;
- }
- break;
+ return compiler_subscript(c, e);
case Starred_kind:
switch (e->v.Starred.ctx) {
case Store:
@@ -4985,6 +5104,9 @@
return compiler_error(c,
"can't use starred expression here");
}
+ break;
+ case Slice_kind:
+ return compiler_slice(c, e);
case Name_kind:
return compiler_nameop(c, e->v.Name.id, e->v.Name.ctx);
/* child nodes of List and Tuple will have expr_context set */
@@ -4999,24 +5121,11 @@
static int
compiler_visit_expr(struct compiler *c, expr_ty e)
{
- /* If expr e has a different line number than the last expr/stmt,
- set a new line number for the next instruction.
- */
int old_lineno = c->u->u_lineno;
int old_col_offset = c->u->u_col_offset;
- if (e->lineno != c->u->u_lineno) {
- c->u->u_lineno = e->lineno;
- c->u->u_lineno_set = 0;
- }
- /* Updating the column offset is always harmless. */
- c->u->u_col_offset = e->col_offset;
-
+ SET_LOC(c, e);
int res = compiler_visit_expr1(c, e);
-
- if (old_lineno != c->u->u_lineno) {
- c->u->u_lineno = old_lineno;
- c->u->u_lineno_set = 0;
- }
+ c->u->u_lineno = old_lineno;
c->u->u_col_offset = old_col_offset;
return res;
}
@@ -5024,48 +5133,58 @@
static int
compiler_augassign(struct compiler *c, stmt_ty s)
{
- expr_ty e = s->v.AugAssign.target;
- expr_ty auge;
-
assert(s->kind == AugAssign_kind);
+ expr_ty e = s->v.AugAssign.target;
+
+ int old_lineno = c->u->u_lineno;
+ int old_col_offset = c->u->u_col_offset;
+ SET_LOC(c, e);
switch (e->kind) {
case Attribute_kind:
- auge = Attribute(e->v.Attribute.value, e->v.Attribute.attr,
- AugLoad, e->lineno, e->col_offset,
- e->end_lineno, e->end_col_offset, c->c_arena);
- if (auge == NULL)
- return 0;
- VISIT(c, expr, auge);
- VISIT(c, expr, s->v.AugAssign.value);
- ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
- auge->v.Attribute.ctx = AugStore;
- VISIT(c, expr, auge);
+ VISIT(c, expr, e->v.Attribute.value);
+ ADDOP(c, DUP_TOP);
+ ADDOP_NAME(c, LOAD_ATTR, e->v.Attribute.attr, names);
break;
case Subscript_kind:
- auge = Subscript(e->v.Subscript.value, e->v.Subscript.slice,
- AugLoad, e->lineno, e->col_offset,
- e->end_lineno, e->end_col_offset, c->c_arena);
- if (auge == NULL)
- return 0;
- VISIT(c, expr, auge);
- VISIT(c, expr, s->v.AugAssign.value);
- ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
- auge->v.Subscript.ctx = AugStore;
- VISIT(c, expr, auge);
+ VISIT(c, expr, e->v.Subscript.value);
+ VISIT(c, expr, e->v.Subscript.slice);
+ ADDOP(c, DUP_TOP_TWO);
+ ADDOP(c, BINARY_SUBSCR);
break;
case Name_kind:
if (!compiler_nameop(c, e->v.Name.id, Load))
return 0;
- VISIT(c, expr, s->v.AugAssign.value);
- ADDOP(c, inplace_binop(c, s->v.AugAssign.op));
- return compiler_nameop(c, e->v.Name.id, Store);
+ break;
default:
PyErr_Format(PyExc_SystemError,
"invalid node type (%d) for augmented assignment",
e->kind);
return 0;
}
+
+ c->u->u_lineno = old_lineno;
+ c->u->u_col_offset = old_col_offset;
+
+ VISIT(c, expr, s->v.AugAssign.value);
+ ADDOP(c, inplace_binop(s->v.AugAssign.op));
+
+ SET_LOC(c, e);
+
+ switch (e->kind) {
+ case Attribute_kind:
+ ADDOP(c, ROT_TWO);
+ ADDOP_NAME(c, STORE_ATTR, e->v.Attribute.attr, names);
+ break;
+ case Subscript_kind:
+ ADDOP(c, ROT_THREE);
+ ADDOP(c, STORE_SUBSCR);
+ break;
+ case Name_kind:
+ return compiler_nameop(c, e->v.Name.id, Store);
+ default:
+ Py_UNREACHABLE();
+ }
return 1;
}
@@ -5089,68 +5208,35 @@
}
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)
+check_ann_subscr(struct compiler *c, expr_ty e)
{
/* We check that everything in a subscript is defined at runtime. */
- Py_ssize_t i, n;
-
- switch (sl->kind) {
- case Index_kind:
+ switch (e->kind) {
case Slice_kind:
- if (!check_ann_slice(c, sl)) {
+ if (e->v.Slice.lower && !check_ann_expr(c, e->v.Slice.lower)) {
return 0;
}
- break;
- case ExtSlice_kind:
- n = asdl_seq_LEN(sl->v.ExtSlice.dims);
+ if (e->v.Slice.upper && !check_ann_expr(c, e->v.Slice.upper)) {
+ return 0;
+ }
+ if (e->v.Slice.step && !check_ann_expr(c, e->v.Slice.step)) {
+ return 0;
+ }
+ return 1;
+ case Tuple_kind: {
+ /* extended slice */
+ asdl_seq *elts = e->v.Tuple.elts;
+ Py_ssize_t i, n = asdl_seq_LEN(elts);
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");
+ if (!check_ann_subscr(c, asdl_seq_GET(elts, i))) {
return 0;
}
}
- break;
- default:
- PyErr_Format(PyExc_SystemError,
- "invalid subscript kind %d", sl->kind);
- return 0;
+ return 1;
}
- return 1;
+ default:
+ return check_ann_expr(c, e);
+ }
}
static int
@@ -5168,6 +5254,8 @@
}
switch (targ->kind) {
case Name_kind:
+ if (forbidden_name(c, targ->v.Name.id, Store))
+ return 0;
/* 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 ||
@@ -5185,6 +5273,8 @@
}
break;
case Attribute_kind:
+ if (forbidden_name(c, targ->v.Attribute.attr, Store))
+ return 0;
if (!s->v.AnnAssign.value &&
!check_ann_expr(c, targ->v.Attribute.value)) {
return 0;
@@ -5276,36 +5366,34 @@
}
static int
-compiler_handle_subscr(struct compiler *c, const char *kind,
- expr_context_ty ctx)
+compiler_subscript(struct compiler *c, expr_ty e)
{
+ expr_context_ty ctx = e->v.Subscript.ctx;
int op = 0;
- /* XXX this code is duplicated */
+ if (ctx == Load) {
+ if (!check_subscripter(c, e->v.Subscript.value)) {
+ return 0;
+ }
+ if (!check_index(c, e->v.Subscript.value, e->v.Subscript.slice)) {
+ return 0;
+ }
+ }
+
switch (ctx) {
- case AugLoad: /* fall through to Load */
case Load: op = BINARY_SUBSCR; break;
- case AugStore:/* fall through to Store */
case Store: op = STORE_SUBSCR; break;
case Del: op = DELETE_SUBSCR; break;
- case Param:
- PyErr_Format(PyExc_SystemError,
- "invalid %s kind %d in subscript\n",
- kind, ctx);
- return 0;
}
- if (ctx == AugLoad) {
- ADDOP(c, DUP_TOP_TWO);
- }
- else if (ctx == AugStore) {
- ADDOP(c, ROT_THREE);
- }
+ assert(op);
+ VISIT(c, expr, e->v.Subscript.value);
+ VISIT(c, expr, e->v.Subscript.slice);
ADDOP(c, op);
return 1;
}
static int
-compiler_slice(struct compiler *c, slice_ty s, expr_context_ty ctx)
+compiler_slice(struct compiler *c, expr_ty s)
{
int n = 2;
assert(s->kind == Slice_kind);
@@ -5333,64 +5421,6 @@
return 1;
}
-static int
-compiler_visit_nested_slice(struct compiler *c, slice_ty s,
- expr_context_ty ctx)
-{
- switch (s->kind) {
- case Slice_kind:
- return compiler_slice(c, s, ctx);
- case Index_kind:
- VISIT(c, expr, s->v.Index.value);
- break;
- case ExtSlice_kind:
- default:
- PyErr_SetString(PyExc_SystemError,
- "extended slice invalid in nested slice");
- return 0;
- }
- return 1;
-}
-
-static int
-compiler_visit_slice(struct compiler *c, slice_ty s, expr_context_ty ctx)
-{
- const char * kindname = NULL;
- switch (s->kind) {
- case Index_kind:
- kindname = "index";
- if (ctx != AugStore) {
- VISIT(c, expr, s->v.Index.value);
- }
- break;
- case Slice_kind:
- kindname = "slice";
- if (ctx != AugStore) {
- if (!compiler_slice(c, s, ctx))
- return 0;
- }
- break;
- case ExtSlice_kind:
- kindname = "extended slice";
- if (ctx != AugStore) {
- Py_ssize_t i, n = asdl_seq_LEN(s->v.ExtSlice.dims);
- for (i = 0; i < n; i++) {
- slice_ty sub = (slice_ty)asdl_seq_GET(
- s->v.ExtSlice.dims, i);
- if (!compiler_visit_nested_slice(c, sub, ctx))
- return 0;
- }
- ADDOP_I(c, BUILD_TUPLE, n);
- }
- break;
- default:
- PyErr_Format(PyExc_SystemError,
- "invalid subscript kind %d", s->kind);
- return 0;
- }
- return compiler_handle_subscr(c, kindname, ctx);
-}
-
/* End of the compiler section, beginning of the assembler section */
/* do depth-first search of basic block graph, starting with block.
@@ -5440,7 +5470,7 @@
stackdepth_push(basicblock ***sp, basicblock *b, int depth)
{
assert(b->b_startdepth < 0 || b->b_startdepth == depth);
- if (b->b_startdepth < depth) {
+ if (b->b_startdepth < depth && b->b_startdepth < 100) {
assert(b->b_startdepth < 0);
b->b_startdepth = depth;
*(*sp)++ = b;
@@ -5480,8 +5510,8 @@
struct instr *instr = &b->b_instr[i];
int effect = stack_effect(instr->i_opcode, instr->i_oparg, 0);
if (effect == PY_INVALID_STACK_EFFECT) {
- fprintf(stderr, "opcode = %d\n", instr->i_opcode);
- Py_FatalError("PyCompile_OpcodeStackEffect()");
+ _Py_FatalErrorFormat(__func__,
+ "opcode = %d", instr->i_opcode);
}
int new_depth = depth + effect;
if (new_depth > maxdepth) {
@@ -5496,19 +5526,14 @@
maxdepth = target_depth;
}
assert(target_depth >= 0); /* invalid code or bug in stackdepth() */
- if (instr->i_opcode == CALL_FINALLY) {
- assert(instr->i_target->b_startdepth >= 0);
- assert(instr->i_target->b_startdepth >= target_depth);
- depth = new_depth;
- continue;
- }
stackdepth_push(&sp, instr->i_target, target_depth);
}
depth = new_depth;
if (instr->i_opcode == JUMP_ABSOLUTE ||
instr->i_opcode == JUMP_FORWARD ||
instr->i_opcode == RETURN_VALUE ||
- instr->i_opcode == RAISE_VARARGS)
+ instr->i_opcode == RAISE_VARARGS ||
+ instr->i_opcode == RERAISE)
{
/* remaining code is dead */
next = NULL;
@@ -5578,13 +5603,13 @@
Py_ssize_t len;
unsigned char *lnotab;
- d_bytecode = (a->a_offset - a->a_lineno_off) * sizeof(_Py_CODEUNIT);
d_lineno = i->i_lineno - a->a_lineno;
-
- assert(d_bytecode >= 0);
-
- if(d_bytecode == 0 && d_lineno == 0)
+ if (d_lineno == 0) {
return 1;
+ }
+
+ d_bytecode = (a->a_offset - a->a_lineno_off) * sizeof(_Py_CODEUNIT);
+ assert(d_bytecode >= 0);
if (d_bytecode > 255) {
int j, nbytes, ncodes = d_bytecode / 255;
@@ -5934,7 +5959,7 @@
goto error;
}
co = PyCode_NewWithPosOnlyArgs(posonlyargcount+posorkeywordargcount,
- posonlyargcount, kwonlyargcount, nlocals_int,
+ posonlyargcount, kwonlyargcount, nlocals_int,
maxdepth, flags, bytecode, consts, names,
varnames, freevars, cellvars, c->c_filename,
c->u->u_name, c->u->u_firstlineno, a->a_lnotab);
diff --git a/Python/context.c b/Python/context.c
index 5c30e47..bacc701 100644
--- a/Python/context.c
+++ b/Python/context.c
@@ -1,10 +1,12 @@
#include "Python.h"
#include "pycore_context.h"
+#include "pycore_gc.h" // _PyObject_GC_MAY_BE_TRACKED()
#include "pycore_hamt.h"
#include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pystate.h" // _PyThreadState_GET()
+#include "structmember.h" // PyMemberDef
#define CONTEXT_FREELIST_MAXLEN 255
@@ -101,21 +103,18 @@
}
-int
-PyContext_Enter(PyObject *octx)
+static int
+_PyContext_Enter(PyThreadState *ts, PyObject *octx)
{
ENSURE_Context(octx, -1)
PyContext *ctx = (PyContext *)octx;
if (ctx->ctx_entered) {
- PyErr_Format(PyExc_RuntimeError,
- "cannot enter context: %R is already entered", ctx);
+ _PyErr_Format(ts, PyExc_RuntimeError,
+ "cannot enter context: %R is already entered", ctx);
return -1;
}
- PyThreadState *ts = _PyThreadState_GET();
- assert(ts != NULL);
-
ctx->ctx_prev = (PyContext *)ts->context; /* borrow */
ctx->ctx_entered = 1;
@@ -128,7 +127,16 @@
int
-PyContext_Exit(PyObject *octx)
+PyContext_Enter(PyObject *octx)
+{
+ PyThreadState *ts = _PyThreadState_GET();
+ assert(ts != NULL);
+ return _PyContext_Enter(ts, octx);
+}
+
+
+static int
+_PyContext_Exit(PyThreadState *ts, PyObject *octx)
{
ENSURE_Context(octx, -1)
PyContext *ctx = (PyContext *)octx;
@@ -139,9 +147,6 @@
return -1;
}
- PyThreadState *ts = _PyThreadState_GET();
- assert(ts != NULL);
-
if (ts->context != (PyObject *)ctx) {
/* Can only happen if someone misuses the C API */
PyErr_SetString(PyExc_RuntimeError,
@@ -159,6 +164,14 @@
return 0;
}
+int
+PyContext_Exit(PyObject *octx)
+{
+ PyThreadState *ts = _PyThreadState_GET();
+ assert(ts != NULL);
+ return _PyContext_Exit(ts, octx);
+}
+
PyObject *
PyContextVar_New(const char *name, PyObject *def)
@@ -621,20 +634,22 @@
context_run(PyContext *self, PyObject *const *args,
Py_ssize_t nargs, PyObject *kwnames)
{
+ PyThreadState *ts = _PyThreadState_GET();
+
if (nargs < 1) {
- PyErr_SetString(PyExc_TypeError,
- "run() missing 1 required positional argument");
+ _PyErr_SetString(ts, PyExc_TypeError,
+ "run() missing 1 required positional argument");
return NULL;
}
- if (PyContext_Enter((PyObject *)self)) {
+ if (_PyContext_Enter(ts, (PyObject *)self)) {
return NULL;
}
- PyObject *call_result = _PyObject_Vectorcall(
- args[0], args + 1, nargs - 1, kwnames);
+ PyObject *call_result = _PyObject_VectorcallTstate(
+ ts, args[0], args + 1, nargs - 1, kwnames);
- if (PyContext_Exit((PyObject *)self)) {
+ if (_PyContext_Exit(ts, (PyObject *)self)) {
return NULL;
}
@@ -1009,13 +1024,6 @@
}
-static PyObject *
-contextvar_cls_getitem(PyObject *self, PyObject *arg)
-{
- Py_INCREF(self);
- return self;
-}
-
static PyMemberDef PyContextVar_members[] = {
{"name", T_OBJECT, offsetof(PyContextVar, var_name), READONLY},
{NULL}
@@ -1025,8 +1033,8 @@
_CONTEXTVARS_CONTEXTVAR_GET_METHODDEF
_CONTEXTVARS_CONTEXTVAR_SET_METHODDEF
_CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF
- {"__class_getitem__", contextvar_cls_getitem,
- METH_O | METH_CLASS, NULL},
+ {"__class_getitem__", (PyCFunction)Py_GenericAlias,
+ METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
{NULL, NULL}
};
@@ -1165,10 +1173,17 @@
{NULL}
};
+static PyMethodDef PyContextTokenType_methods[] = {
+ {"__class_getitem__", (PyCFunction)Py_GenericAlias,
+ METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
+ {NULL}
+};
+
PyTypeObject PyContextToken_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"Token",
sizeof(PyContextToken),
+ .tp_methods = PyContextTokenType_methods,
.tp_getset = PyContextTokenType_getsetlist,
.tp_dealloc = (destructor)token_tp_dealloc,
.tp_getattro = PyObject_GenericGetAttr,
@@ -1255,18 +1270,15 @@
///////////////////////////
-int
-PyContext_ClearFreeList(void)
+void
+_PyContext_ClearFreeList(void)
{
- int size = ctx_freelist_len;
- while (ctx_freelist_len) {
+ for (; ctx_freelist_len; ctx_freelist_len--) {
PyContext *ctx = ctx_freelist;
ctx_freelist = (PyContext *)ctx->ctx_weakreflist;
ctx->ctx_weakreflist = NULL;
PyObject_GC_Del(ctx);
- ctx_freelist_len--;
}
- return size;
}
@@ -1274,8 +1286,8 @@
_PyContext_Fini(void)
{
Py_CLEAR(_token_missing);
- (void)PyContext_ClearFreeList();
- (void)_PyHamt_Fini();
+ _PyContext_ClearFreeList();
+ _PyHamt_Fini();
}
diff --git a/Python/dtoa.c b/Python/dtoa.c
index b7bb7ac..e629b29 100644
--- a/Python/dtoa.c
+++ b/Python/dtoa.c
@@ -64,6 +64,9 @@
* 7. _Py_dg_strtod has been modified so that it doesn't accept strings with
* leading whitespace.
*
+ * 8. A corner case where _Py_dg_dtoa didn't strip trailing zeros has been
+ * fixed. (bugs.python.org/issue40780)
+ *
***************************************************************/
/* Please send bug reports for the original dtoa.c code to David M. Gay (dmg
@@ -115,6 +118,7 @@
/* Linking of Python's #defines to Gay's #defines starts here. */
#include "Python.h"
+#include "pycore_dtoa.h"
/* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
the following code */
@@ -2562,6 +2566,14 @@
}
++*s++;
}
+ else {
+ /* Strip trailing zeros. This branch was missing from the
+ original dtoa.c, leading to surplus trailing zeros in
+ some cases. See bugs.python.org/issue40780. */
+ while (s > s0 && s[-1] == '0') {
+ --s;
+ }
+ }
break;
}
}
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index b3ff8e2..97f7698 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -140,14 +140,20 @@
if (nerr == load_errtab[j].errNo && load_errtab[j].errstr)
ERRBUF_APPEND(load_errtab[j].errstr);
}
- while (Py_ISDIGIT(Py_CHARMASK(*message[i]))) message[i]++ ;
+ while (Py_ISDIGIT(*message[i])) message[i]++ ;
ERRBUF_APPEND(message[i]);
ERRBUF_APPEND("\n");
}
- errbuf[strlen(errbuf)-1] = '\0'; /* trim off last newline */
- pathname_ob = PyUnicode_FromString(pathname);
- errbuf_ob = PyUnicode_FromString(errbuf);
- PyErr_SetImportError(errbuf_ob, NULL, pathname);
+ /* Subtract 1 from the length to trim off trailing newline */
+ errbuf_ob = PyUnicode_DecodeLocaleAndSize(errbuf, strlen(errbuf)-1, "surrogateescape");
+ if (errbuf_ob == NULL)
+ return;
+ pathname_ob = PyUnicode_DecodeFSDefault(pathname);
+ if (pathname_ob == NULL) {
+ Py_DECREF(errbuf_ob);
+ return;
+ }
+ PyErr_SetImportError(errbuf_ob, NULL, pathname_ob);
Py_DECREF(pathname_ob);
Py_DECREF(errbuf_ob);
return;
diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c
index e59d004..e36d608 100644
--- a/Python/dynload_hpux.c
+++ b/Python/dynload_hpux.c
@@ -6,7 +6,6 @@
#include "Python.h"
#include "importdl.h"
-#include "pycore_pystate.h"
#if defined(__hp9000s300)
#define FUNCNAME_PATTERN "_%.20s_%.200s"
@@ -21,7 +20,7 @@
const char *pathname, FILE *fp)
{
int flags = BIND_FIRST | BIND_DEFERRED;
- int verbose = _PyInterpreterState_GET_UNSAFE()->config.verbose;
+ int verbose = _Py_GetConfig()->verbose;
if (verbose) {
flags = BIND_FIRST | BIND_IMMEDIATE |
BIND_NONFATAL | BIND_VERBOSE;
@@ -37,9 +36,20 @@
char buf[256];
PyOS_snprintf(buf, sizeof(buf), "Failed to load %.200s",
pathname);
- PyObject *buf_ob = PyUnicode_FromString(buf);
+ PyObject *buf_ob = PyUnicode_DecodeFSDefault(buf);
+ if (buf_ob == NULL)
+ return NULL;
PyObject *shortname_ob = PyUnicode_FromString(shortname);
- PyObject *pathname_ob = PyUnicode_FromString(pathname);
+ if (shortname_ob == NULL) {
+ Py_DECREF(buf_ob);
+ return NULL;
+ }
+ PyObject *pathname_ob = PyUnicode_DecodeFSDefault(pathname);
+ if (pathname_ob == NULL) {
+ Py_DECREF(buf_ob);
+ Py_DECREF(shortname_ob);
+ return NULL;
+ }
PyErr_SetImportError(buf_ob, shortname_ob, pathname_ob);
Py_DECREF(buf_ob);
Py_DECREF(shortname_ob);
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index c51f97a..2382889 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -2,7 +2,8 @@
/* Support for dynamic loading of extension modules */
#include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_interp.h" // _PyInterpreterState.dlopenflags
+#include "pycore_pystate.h" // _PyInterpreterState_GET()
#include "importdl.h"
#include <sys/types.h>
@@ -94,7 +95,7 @@
}
}
- dlopenflags = _PyInterpreterState_Get()->dlopenflags;
+ dlopenflags = _PyInterpreterState_GET()->dlopenflags;
handle = dlopen(pathname, dlopenflags);
@@ -105,7 +106,7 @@
const char *error = dlerror();
if (error == NULL)
error = "unknown dlopen() error";
- error_ob = PyUnicode_FromString(error);
+ error_ob = PyUnicode_DecodeLocale(error, "surrogateescape");
if (error_ob == NULL)
return NULL;
mod_name = PyUnicode_FromString(shortname);
@@ -113,7 +114,7 @@
Py_DECREF(error_ob);
return NULL;
}
- path = PyUnicode_FromString(pathname);
+ path = PyUnicode_DecodeFSDefault(pathname);
if (path == NULL) {
Py_DECREF(error_ob);
Py_DECREF(mod_name);
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 4896c6d..8431c5b 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -12,12 +12,6 @@
#include "patchlevel.h"
#include <windows.h>
-// "activation context" magic - see dl_nt.c...
-#if HAVE_SXS
-extern ULONG_PTR _Py_ActivateActCtx();
-void _Py_DeactivateActCtx(ULONG_PTR cookie);
-#endif
-
#ifdef _DEBUG
#define PYD_DEBUG_SUFFIX "_d"
#else
@@ -185,16 +179,10 @@
{
HINSTANCE hDLL = NULL;
unsigned int old_mode;
-#if HAVE_SXS
- ULONG_PTR cookie = 0;
-#endif
/* Don't display a message box when Python can't load a DLL */
old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
-#if HAVE_SXS
- cookie = _Py_ActivateActCtx();
-#endif
/* bpo-36085: We use LoadLibraryEx with restricted search paths
to avoid DLL preloading attacks and enable use of the
AddDllDirectory function. We add SEARCH_DLL_LOAD_DIR to
@@ -204,9 +192,6 @@
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS |
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
Py_END_ALLOW_THREADS
-#if HAVE_SXS
- _Py_DeactivateActCtx(cookie);
-#endif
/* restore old error mode settings */
SetErrorMode(old_mode);
diff --git a/Python/errors.c b/Python/errors.c
index 1360c0d..87af39d 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -4,7 +4,8 @@
#include "Python.h"
#include "pycore_initconfig.h"
#include "pycore_pyerrors.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h" // _PyThreadState_GET()
+#include "pycore_sysmodule.h"
#include "pycore_traceback.h"
#ifndef __STDC__
@@ -24,11 +25,11 @@
extern "C" {
#endif
+_Py_IDENTIFIER(__module__);
_Py_IDENTIFIER(builtins);
_Py_IDENTIFIER(stderr);
_Py_IDENTIFIER(flush);
-
/* Forward declarations */
static PyObject *
_PyErr_FormatV(PyThreadState *tstate, PyObject *exception,
@@ -93,7 +94,7 @@
return PyObject_Call(exception, value, NULL);
}
else {
- return PyObject_CallFunctionObjArgs(exception, value, NULL);
+ return PyObject_CallOneArg(exception, value);
}
}
@@ -106,7 +107,8 @@
if (exception != NULL &&
!PyExceptionClass_Check(exception)) {
_PyErr_Format(tstate, PyExc_SystemError,
- "exception %R not a BaseException subclass",
+ "_PyErr_SetObject: "
+ "exception %R is not a BaseException subclass",
exception);
return;
}
@@ -218,6 +220,9 @@
PyObject* _Py_HOT_FUNCTION
PyErr_Occurred(void)
{
+ /* The caller must hold the GIL. */
+ assert(PyGILState_Check());
+
PyThreadState *tstate = _PyThreadState_GET();
return _PyErr_Occurred(tstate);
}
@@ -430,21 +435,27 @@
void
-PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
+_PyErr_GetExcInfo(PyThreadState *tstate,
+ PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
{
- PyThreadState *tstate = _PyThreadState_GET();
-
_PyErr_StackItem *exc_info = _PyErr_GetTopmostException(tstate);
*p_type = exc_info->exc_type;
*p_value = exc_info->exc_value;
*p_traceback = exc_info->exc_traceback;
-
Py_XINCREF(*p_type);
Py_XINCREF(*p_value);
Py_XINCREF(*p_traceback);
}
+
+void
+PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ _PyErr_GetExcInfo(tstate, p_type, p_value, p_traceback);
+}
+
void
PyErr_SetExcInfo(PyObject *p_type, PyObject *p_value, PyObject *p_traceback)
{
@@ -466,7 +477,9 @@
/* Like PyErr_Restore(), but if an exception is already set,
set the context associated with it.
- */
+
+ The caller is responsible for ensuring that this call won't create
+ any cycles in the exception context chain. */
void
_PyErr_ChainExceptions(PyObject *exc, PyObject *val, PyObject *tb)
{
@@ -474,6 +487,15 @@
return;
PyThreadState *tstate = _PyThreadState_GET();
+
+ if (!PyExceptionClass_Check(exc)) {
+ _PyErr_Format(tstate, PyExc_SystemError,
+ "_PyErr_ChainExceptions: "
+ "exception %R is not a BaseException subclass",
+ exc);
+ return;
+ }
+
if (_PyErr_Occurred(tstate)) {
PyObject *exc2, *val2, *tb2;
_PyErr_Fetch(tstate, &exc2, &val2, &tb2);
@@ -492,6 +514,62 @@
}
}
+/* Set the currently set exception's context to the given exception.
+
+ If the provided exc_info is NULL, then the current Python thread state's
+ exc_info will be used for the context instead.
+
+ This function can only be called when _PyErr_Occurred() is true.
+ Also, this function won't create any cycles in the exception context
+ chain to the extent that _PyErr_SetObject ensures this. */
+void
+_PyErr_ChainStackItem(_PyErr_StackItem *exc_info)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ assert(_PyErr_Occurred(tstate));
+
+ int exc_info_given;
+ if (exc_info == NULL) {
+ exc_info_given = 0;
+ exc_info = tstate->exc_info;
+ } else {
+ exc_info_given = 1;
+ }
+ if (exc_info->exc_type == NULL || exc_info->exc_type == Py_None) {
+ return;
+ }
+
+ _PyErr_StackItem *saved_exc_info;
+ if (exc_info_given) {
+ /* Temporarily set the thread state's exc_info since this is what
+ _PyErr_SetObject uses for implicit exception chaining. */
+ saved_exc_info = tstate->exc_info;
+ tstate->exc_info = exc_info;
+ }
+
+ PyObject *exc, *val, *tb;
+ _PyErr_Fetch(tstate, &exc, &val, &tb);
+
+ PyObject *exc2, *val2, *tb2;
+ exc2 = exc_info->exc_type;
+ val2 = exc_info->exc_value;
+ tb2 = exc_info->exc_traceback;
+ _PyErr_NormalizeException(tstate, &exc2, &val2, &tb2);
+ if (tb2 != NULL) {
+ PyException_SetTraceback(val2, tb2);
+ }
+
+ /* _PyErr_SetObject sets the context from PyThreadState. */
+ _PyErr_SetObject(tstate, exc, val);
+ Py_DECREF(exc); // since _PyErr_Occurred was true
+ Py_XDECREF(val);
+ Py_XDECREF(tb);
+
+ if (exc_info_given) {
+ tstate->exc_info = saved_exc_info;
+ }
+}
+
static PyObject *
_PyErr_FormatVFromCause(PyThreadState *tstate, PyObject *exception,
const char *format, va_list vargs)
@@ -521,6 +599,21 @@
}
PyObject *
+_PyErr_FormatFromCauseTstate(PyThreadState *tstate, PyObject *exception,
+ const char *format, ...)
+{
+ va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+ va_start(vargs, format);
+#else
+ va_start(vargs);
+#endif
+ _PyErr_FormatVFromCause(tstate, exception, format, vargs);
+ va_end(vargs);
+ return NULL;
+}
+
+PyObject *
_PyErr_FormatFromCause(PyObject *exception, const char *format, ...)
{
PyThreadState *tstate = _PyThreadState_GET();
@@ -547,10 +640,9 @@
}
PyObject *
-PyErr_NoMemory(void)
+_PyErr_NoMemory(PyThreadState *tstate)
{
- PyThreadState *tstate = _PyThreadState_GET();
- if (Py_TYPE(PyExc_MemoryError) == NULL) {
+ if (Py_IS_TYPE(PyExc_MemoryError, NULL)) {
/* PyErr_NoMemory() has been called before PyExc_MemoryError has been
initialized by _PyExc_Init() */
Py_FatalError("Out of memory and PyExc_MemoryError is not "
@@ -561,6 +653,13 @@
}
PyObject *
+PyErr_NoMemory(void)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return _PyErr_NoMemory(tstate);
+}
+
+PyObject *
PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject)
{
return PyErr_SetFromErrnoWithFilenameObjects(exc, filenameObject, NULL);
@@ -877,7 +976,7 @@
goto done;
}
- error = _PyObject_FastCallDict(exception, &msg, 1, kwargs);
+ error = PyObject_VectorcallDict(exception, &msg, 1, kwargs);
if (error != NULL) {
_PyErr_SetObject(tstate, (PyObject *)Py_TYPE(error), error);
Py_DECREF(error);
@@ -979,7 +1078,6 @@
PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
{
PyThreadState *tstate = _PyThreadState_GET();
- _Py_IDENTIFIER(__module__);
PyObject *modulename = NULL;
PyObject *classname = NULL;
PyObject *mydict = NULL;
@@ -1205,7 +1303,6 @@
}
}
- _Py_IDENTIFIER(__module__);
PyObject *moduleName = _PyObject_GetAttrId(exc_type, &PyId___module__);
if (moduleName == NULL || !PyUnicode_Check(moduleName)) {
Py_XDECREF(moduleName);
@@ -1257,7 +1354,7 @@
}
/* Explicitly call file.flush() */
- PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+ PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
if (!res) {
return -1;
}
@@ -1293,7 +1390,7 @@
{
PyThreadState *tstate = _PyThreadState_GET();
- if (Py_TYPE(args) != &UnraisableHookArgsType) {
+ if (!Py_IS_TYPE(args, &UnraisableHookArgsType)) {
_PyErr_SetString(tstate, PyExc_TypeError,
"sys.unraisablehook argument type "
"must be UnraisableHookArgs");
@@ -1329,7 +1426,7 @@
_PyErr_WriteUnraisableMsg(const char *err_msg_str, PyObject *obj)
{
PyThreadState *tstate = _PyThreadState_GET();
- assert(tstate != NULL);
+ _Py_EnsureTstateNotNULL(tstate);
PyObject *err_msg = NULL;
PyObject *exc_type, *exc_value, *exc_tb;
@@ -1343,7 +1440,7 @@
}
if (exc_tb == NULL) {
- struct _frame *frame = tstate->frame;
+ PyFrameObject *frame = tstate->frame;
if (frame != NULL) {
exc_tb = _PyTraceBack_FromFrame(NULL, frame);
if (exc_tb == NULL) {
@@ -1382,7 +1479,7 @@
goto default_hook;
}
- if (PySys_Audit("sys.unraisablehook", "OO", hook, hook_args) < 0) {
+ if (_PySys_Audit(tstate, "sys.unraisablehook", "OO", hook, hook_args) < 0) {
Py_DECREF(hook_args);
err_msg_str = "Exception ignored in audit hook";
obj = NULL;
@@ -1394,8 +1491,7 @@
goto default_hook;
}
- PyObject *args[1] = {hook_args};
- PyObject *res = _PyObject_FastCall(hook, args, 1);
+ PyObject *res = PyObject_CallOneArg(hook, hook_args);
Py_DECREF(hook_args);
if (res != NULL) {
Py_DECREF(res);
@@ -1552,16 +1648,18 @@
{
int i;
char linebuf[1000];
-
- if (fp == NULL)
+ if (fp == NULL) {
return NULL;
+ }
+
for (i = 0; i < lineno; i++) {
char *pLastChar = &linebuf[sizeof(linebuf) - 2];
do {
*pLastChar = '\0';
if (Py_UniversalNewlineFgets(linebuf, sizeof linebuf,
- fp, NULL) == NULL)
- break;
+ fp, NULL) == NULL) {
+ goto after_loop;
+ }
/* fgets read *something*; if it didn't get as
far as pLastChar, it must have found a newline
or hit the end of the file; if pLastChar is \n,
@@ -1569,6 +1667,8 @@
yet seen a newline, so must continue */
} while (*pLastChar != '\0' && *pLastChar != '\n');
}
+
+after_loop:
fclose(fp);
if (i == lineno) {
PyObject *res;
diff --git a/Python/fileutils.c b/Python/fileutils.c
index b274116..397ac34 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1,6 +1,6 @@
#include "Python.h"
#include "pycore_fileutils.h"
-#include "osdefs.h"
+#include "osdefs.h" // SEP
#include <locale.h>
#ifdef MS_WINDOWS
@@ -1467,7 +1467,7 @@
&& errno == EINTR && !(async_err = PyErr_CheckSignals()));
#else
PyObject *bytes;
- char *path_bytes;
+ const char *path_bytes;
assert(PyGILState_Check());
@@ -1684,8 +1684,9 @@
{
char *cpath;
char cbuf[MAXPATHLEN];
+ size_t cbuf_len = Py_ARRAY_LENGTH(cbuf);
wchar_t *wbuf;
- int res;
+ Py_ssize_t res;
size_t r1;
cpath = _Py_EncodeLocaleRaw(path, NULL);
@@ -1693,11 +1694,12 @@
errno = EINVAL;
return -1;
}
- res = (int)readlink(cpath, cbuf, Py_ARRAY_LENGTH(cbuf));
+ res = readlink(cpath, cbuf, cbuf_len);
PyMem_RawFree(cpath);
- if (res == -1)
+ if (res == -1) {
return -1;
- if (res == Py_ARRAY_LENGTH(cbuf)) {
+ }
+ if ((size_t)res == cbuf_len) {
errno = EINVAL;
return -1;
}
@@ -1762,6 +1764,103 @@
}
#endif
+
+#ifndef MS_WINDOWS
+int
+_Py_isabs(const wchar_t *path)
+{
+ return (path[0] == SEP);
+}
+#endif
+
+
+/* Get an absolute path.
+ On error (ex: fail to get the current directory), return -1.
+ On memory allocation failure, set *abspath_p to NULL and return 0.
+ On success, return a newly allocated to *abspath_p to and return 0.
+ The string must be freed by PyMem_RawFree(). */
+int
+_Py_abspath(const wchar_t *path, wchar_t **abspath_p)
+{
+#ifdef MS_WINDOWS
+ wchar_t woutbuf[MAX_PATH], *woutbufp = woutbuf;
+ DWORD result;
+
+ result = GetFullPathNameW(path,
+ Py_ARRAY_LENGTH(woutbuf), woutbuf,
+ NULL);
+ if (!result) {
+ return -1;
+ }
+
+ if (result > Py_ARRAY_LENGTH(woutbuf)) {
+ if ((size_t)result <= (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t)) {
+ woutbufp = PyMem_RawMalloc((size_t)result * sizeof(wchar_t));
+ }
+ else {
+ woutbufp = NULL;
+ }
+ if (!woutbufp) {
+ *abspath_p = NULL;
+ return 0;
+ }
+
+ result = GetFullPathNameW(path, result, woutbufp, NULL);
+ if (!result) {
+ PyMem_RawFree(woutbufp);
+ return -1;
+ }
+ }
+
+ if (woutbufp != woutbuf) {
+ *abspath_p = woutbufp;
+ return 0;
+ }
+
+ *abspath_p = _PyMem_RawWcsdup(woutbufp);
+ return 0;
+#else
+ if (_Py_isabs(path)) {
+ *abspath_p = _PyMem_RawWcsdup(path);
+ return 0;
+ }
+
+ wchar_t cwd[MAXPATHLEN + 1];
+ cwd[Py_ARRAY_LENGTH(cwd) - 1] = 0;
+ if (!_Py_wgetcwd(cwd, Py_ARRAY_LENGTH(cwd) - 1)) {
+ /* unable to get the current directory */
+ return -1;
+ }
+
+ size_t cwd_len = wcslen(cwd);
+ size_t path_len = wcslen(path);
+ size_t len = cwd_len + 1 + path_len + 1;
+ if (len <= (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t)) {
+ *abspath_p = PyMem_RawMalloc(len * sizeof(wchar_t));
+ }
+ else {
+ *abspath_p = NULL;
+ }
+ if (*abspath_p == NULL) {
+ return 0;
+ }
+
+ wchar_t *abspath = *abspath_p;
+ memcpy(abspath, cwd, cwd_len * sizeof(wchar_t));
+ abspath += cwd_len;
+
+ *abspath = (wchar_t)SEP;
+ abspath++;
+
+ memcpy(abspath, path, path_len * sizeof(wchar_t));
+ abspath += path_len;
+
+ *abspath = 0;
+ return 0;
+#endif
+}
+
+
/* Get the current directory. buflen is the buffer size in wide characters
including the null character. Decode the path from the locale encoding.
@@ -1933,6 +2032,7 @@
assert(decimal_point != NULL);
assert(thousands_sep != NULL);
+#ifndef MS_WINDOWS
int change_locale = 0;
if ((strlen(lc->decimal_point) > 1 || ((unsigned char)lc->decimal_point[0]) > 127)) {
change_locale = 1;
@@ -1971,14 +2071,20 @@
}
}
+#define GET_LOCALE_STRING(ATTR) PyUnicode_DecodeLocale(lc->ATTR, NULL)
+#else /* MS_WINDOWS */
+/* Use _W_* fields of Windows strcut lconv */
+#define GET_LOCALE_STRING(ATTR) PyUnicode_FromWideChar(lc->_W_ ## ATTR, -1)
+#endif /* MS_WINDOWS */
+
int res = -1;
- *decimal_point = PyUnicode_DecodeLocale(lc->decimal_point, NULL);
+ *decimal_point = GET_LOCALE_STRING(decimal_point);
if (*decimal_point == NULL) {
goto done;
}
- *thousands_sep = PyUnicode_DecodeLocale(lc->thousands_sep, NULL);
+ *thousands_sep = GET_LOCALE_STRING(thousands_sep);
if (*thousands_sep == NULL) {
goto done;
}
@@ -1986,9 +2092,13 @@
res = 0;
done:
+#ifndef MS_WINDOWS
if (loc != NULL) {
setlocale(LC_CTYPE, oldloc);
}
PyMem_Free(oldloc);
+#endif
return res;
+
+#undef GET_LOCALE_STRING
}
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index 7c4ecf0..ed95f26 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -62,7 +62,7 @@
Py_ssize_t accumulator, digitval, pos = *ppos;
int numdigits;
int kind = PyUnicode_KIND(str);
- void *data = PyUnicode_DATA(str);
+ const void *data = PyUnicode_DATA(str);
accumulator = numdigits = 0;
for (; pos < end; pos++, numdigits++) {
@@ -170,7 +170,7 @@
{
Py_ssize_t pos = start;
int kind = PyUnicode_KIND(format_spec);
- void *data = PyUnicode_DATA(format_spec);
+ const 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(kind, data, index)
@@ -252,8 +252,10 @@
++pos;
}
if (end-pos && READ_spec(pos) == ',') {
- invalid_comma_and_underscore();
- return 0;
+ if (format->thousands_separators == LT_UNDERSCORE_LOCALE) {
+ invalid_comma_and_underscore();
+ return 0;
+ }
}
/* Parse field precision */
@@ -443,7 +445,7 @@
{
Py_ssize_t remainder;
int kind = PyUnicode_KIND(s);
- void *data = PyUnicode_DATA(s);
+ const void *data = PyUnicode_DATA(s);
while (pos<end && Py_ISDIGIT(PyUnicode_READ(kind, data, pos)))
++pos;
@@ -466,7 +468,7 @@
Return -1 on error. */
static Py_ssize_t
calc_number_widths(NumberFieldWidths *spec, Py_ssize_t n_prefix,
- Py_UCS4 sign_char, PyObject *number, Py_ssize_t n_start,
+ Py_UCS4 sign_char, Py_ssize_t n_start,
Py_ssize_t n_end, Py_ssize_t n_remainder,
int has_decimal, const LocaleInfo *locale,
const InternalFormatSpec *format, Py_UCS4 *maxchar)
@@ -574,7 +576,7 @@
spec->n_lpadding = n_padding;
break;
default:
- /* Shouldn't get here, but treat it as '>' */
+ /* Shouldn't get here */
Py_UNREACHABLE();
}
}
@@ -595,7 +597,7 @@
Return -1 on error, or 0 on success. */
static int
fill_number(_PyUnicodeWriter *writer, const NumberFieldWidths *spec,
- PyObject *digits, Py_ssize_t d_start, Py_ssize_t d_end,
+ PyObject *digits, Py_ssize_t d_start,
PyObject *prefix, Py_ssize_t p_start,
Py_UCS4 fill_char,
LocaleInfo *locale, int toupper)
@@ -983,7 +985,7 @@
goto done;
/* Calculate how much memory we'll need. */
- n_total = calc_number_widths(&spec, n_prefix, sign_char, tmp, inumeric_chars,
+ n_total = calc_number_widths(&spec, n_prefix, sign_char, inumeric_chars,
inumeric_chars + n_digits, n_remainder, 0,
&locale, format, &maxchar);
if (n_total == -1) {
@@ -996,7 +998,7 @@
/* Populate the memory. */
result = fill_number(writer, &spec,
- tmp, inumeric_chars, inumeric_chars + n_digits,
+ tmp, inumeric_chars,
tmp, prefix, format->fill_char,
&locale, format->type == 'X');
@@ -1131,7 +1133,7 @@
goto done;
/* Calculate how much memory we'll need. */
- n_total = calc_number_widths(&spec, 0, sign_char, unicode_tmp, index,
+ n_total = calc_number_widths(&spec, 0, sign_char, index,
index + n_digits, n_remainder, has_decimal,
&locale, format, &maxchar);
if (n_total == -1) {
@@ -1144,7 +1146,7 @@
/* Populate the memory. */
result = fill_number(writer, &spec,
- unicode_tmp, index, index + n_digits,
+ unicode_tmp, index,
NULL, 0, format->fill_char,
&locale, 0);
@@ -1316,7 +1318,7 @@
tmp_format.width = -1;
/* Calculate how much memory we'll need. */
- n_re_total = calc_number_widths(&re_spec, 0, re_sign_char, re_unicode_tmp,
+ n_re_total = calc_number_widths(&re_spec, 0, re_sign_char,
i_re, i_re + n_re_digits, n_re_remainder,
re_has_decimal, &locale, &tmp_format,
&maxchar);
@@ -1329,7 +1331,7 @@
* requested by the original format. */
if (!skip_re)
tmp_format.sign = '+';
- n_im_total = calc_number_widths(&im_spec, 0, im_sign_char, im_unicode_tmp,
+ n_im_total = calc_number_widths(&im_spec, 0, im_sign_char,
i_im, i_im + n_im_digits, n_im_remainder,
im_has_decimal, &locale, &tmp_format,
&maxchar);
@@ -1366,7 +1368,7 @@
if (!skip_re) {
result = fill_number(writer, &re_spec,
- re_unicode_tmp, i_re, i_re + n_re_digits,
+ re_unicode_tmp, i_re,
NULL, 0,
0,
&locale, 0);
@@ -1374,7 +1376,7 @@
goto done;
}
result = fill_number(writer, &im_spec,
- im_unicode_tmp, i_im, i_im + n_im_digits,
+ im_unicode_tmp, i_im,
NULL, 0,
0,
&locale, 0);
@@ -1447,7 +1449,7 @@
return format_string_internal(obj, &format, writer);
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
return -1;
}
}
@@ -1458,7 +1460,7 @@
PyObject *format_spec,
Py_ssize_t start, Py_ssize_t end)
{
- PyObject *tmp = NULL, *str = NULL;
+ PyObject *tmp = NULL;
InternalFormatSpec format;
int result = -1;
@@ -1505,13 +1507,12 @@
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
goto done;
}
done:
Py_XDECREF(tmp);
- Py_XDECREF(str);
return result;
}
@@ -1549,7 +1550,7 @@
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
return -1;
}
}
@@ -1587,7 +1588,7 @@
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
return -1;
}
}
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
index 7f9cc19..dd04d60 100644
--- a/Python/frozenmain.c
+++ b/Python/frozenmain.c
@@ -2,7 +2,7 @@
/* Python interpreter main program for frozen scripts */
#include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_runtime.h" // _PyRuntime_Initialize()
#include <locale.h>
#ifdef MS_WINDOWS
@@ -99,7 +99,7 @@
n = PyImport_ImportFrozenModule("__main__");
if (n == 0)
- Py_FatalError("__main__ not frozen");
+ Py_FatalError("the __main__ module is not frozen");
if (n < 0) {
PyErr_Print();
sts = 1;
diff --git a/Python/getargs.c b/Python/getargs.c
index c1b7b1a..d4a531a 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -106,7 +106,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_Parse_SizeT(PyObject *args, const char *format, ...)
{
int retval;
@@ -131,7 +131,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseTuple_SizeT(PyObject *args, const char *format, ...)
{
int retval;
@@ -156,7 +156,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseStack_SizeT(PyObject *const *args, Py_ssize_t nargs, const char *format, ...)
{
int retval;
@@ -182,7 +182,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va)
{
va_list lva;
@@ -312,7 +312,7 @@
break;
default:
if (level == 0) {
- if (Py_ISALPHA(Py_CHARMASK(c)))
+ if (Py_ISALPHA(c))
if (c != 'e') /* skip encoded */
max++;
}
@@ -397,7 +397,7 @@
}
}
- if (*format != '\0' && !Py_ISALPHA(Py_CHARMASK(*format)) &&
+ if (*format != '\0' && !Py_ISALPHA(*format) &&
*format != '(' &&
*format != '|' && *format != ':' && *format != ';') {
PyErr_Format(PyExc_SystemError,
@@ -521,7 +521,7 @@
}
else if (c == ':' || c == ';' || c == '\0')
break;
- else if (level == 0 && Py_ISALPHA(Py_CHARMASK(c)))
+ else if (level == 0 && Py_ISALPHA(c))
n++;
}
@@ -531,7 +531,7 @@
toplevel ? "expected %d arguments, not %.50s" :
"must be %d-item sequence, not %.50s",
n,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
return msgbuf;
}
@@ -621,7 +621,7 @@
PyErr_Format(PyExc_TypeError,
"%.200s() %.200s must be %.50s, not %.50s",
fname, displayname, expected,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
}
static const char *
@@ -636,7 +636,7 @@
else {
PyOS_snprintf(msgbuf, bufsize,
"must be %.50s, not %.50s", expected,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
}
return msgbuf;
}
@@ -923,7 +923,7 @@
case 'C': {/* unicode char */
int *p = va_arg(*p_va, int *);
int kind;
- void *data;
+ const void *data;
if (!PyUnicode_Check(arg))
return converterr("a unicode character", arg, msgbuf, bufsize);
@@ -1070,6 +1070,9 @@
case 'u': /* raw unicode buffer (Py_UNICODE *) */
case 'Z': /* raw unicode buffer or None */
{
+ // TODO: Raise DeprecationWarning
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
if (*format == '#') {
@@ -1109,6 +1112,7 @@
arg, msgbuf, bufsize);
}
break;
+_Py_COMP_DIAG_POP
}
case 'e': {/* encoded string */
@@ -1331,7 +1335,7 @@
type = va_arg(*p_va, PyTypeObject*);
p = va_arg(*p_va, PyObject **);
format++;
- if (PyType_IsSubtype(arg->ob_type, type))
+ if (PyType_IsSubtype(Py_TYPE(arg), type))
*p = arg;
else
return converterr(type->tp_name, arg, msgbuf, bufsize);
@@ -1466,7 +1470,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseTupleAndKeywords_SizeT(PyObject *args,
PyObject *keywords,
const char *format,
@@ -1517,7 +1521,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
PyObject *keywords,
const char *format,
@@ -1543,7 +1547,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords,
struct _PyArg_Parser *parser, ...)
{
@@ -1556,7 +1560,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords,
struct _PyArg_Parser *parser, ...)
{
@@ -1569,7 +1573,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseStackAndKeywords(PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames,
struct _PyArg_Parser *parser, ...)
{
@@ -1582,7 +1586,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_ParseStackAndKeywords_SizeT(PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames,
struct _PyArg_Parser *parser, ...)
{
@@ -1596,7 +1600,7 @@
}
-int
+PyAPI_FUNC(int)
_PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords,
struct _PyArg_Parser *parser, va_list va)
{
@@ -1610,7 +1614,7 @@
return retval;
}
-int
+PyAPI_FUNC(int)
_PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords,
struct _PyArg_Parser *parser, va_list va)
{
@@ -2053,19 +2057,19 @@
Py_ssize_t i, nkwargs;
nkwargs = PyTuple_GET_SIZE(kwnames);
- for (i=0; i < nkwargs; i++) {
+ 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 */
+ /* kwname == key will normally find a match in since keyword keys
+ should be interned strings; if not retry below in a new loop. */
if (kwname == key) {
return kwstack[i];
}
- if (!PyUnicode_Check(kwname)) {
- /* ignore non-string keyword keys:
- an error will be raised below */
- continue;
- }
+ }
+
+ for (i = 0; i < nkwargs; i++) {
+ PyObject *kwname = PyTuple_GET_ITEM(kwnames, i);
+ assert(PyUnicode_Check(kwname));
if (_PyUnicode_EQ(kwname, key)) {
return kwstack[i];
}
@@ -2293,16 +2297,11 @@
j++;
}
- if (!PyUnicode_Check(keyword)) {
- PyErr_SetString(PyExc_TypeError,
- "keywords must be strings");
- return cleanreturn(0, &freelist);
- }
match = PySequence_Contains(kwtuple, keyword);
if (match <= 0) {
if (!match) {
PyErr_Format(PyExc_TypeError,
- "'%U' is an invalid keyword "
+ "'%S' is an invalid keyword "
"argument for %.200s%s",
keyword,
(parser->fname == NULL) ? "this function" : parser->fname,
@@ -2523,16 +2522,11 @@
j++;
}
- if (!PyUnicode_Check(keyword)) {
- PyErr_SetString(PyExc_TypeError,
- "keywords must be strings");
- return NULL;
- }
match = PySequence_Contains(kwtuple, keyword);
if (match <= 0) {
if (!match) {
PyErr_Format(PyExc_TypeError,
- "'%U' is an invalid keyword "
+ "'%S' is an invalid keyword "
"argument for %.200s%s",
keyword,
(parser->fname == NULL) ? "this function" : parser->fname,
@@ -2797,6 +2791,7 @@
#undef _PyArg_NoKeywords
+#undef _PyArg_NoKwnames
#undef _PyArg_NoPositional
/* For type constructors that don't take keyword args
@@ -2823,7 +2818,6 @@
return 0;
}
-
int
_PyArg_NoPositional(const char *funcname, PyObject *args)
{
@@ -2841,6 +2835,23 @@
return 0;
}
+int
+_PyArg_NoKwnames(const char *funcname, PyObject *kwnames)
+{
+ if (kwnames == NULL) {
+ return 1;
+ }
+
+ assert(PyTuple_CheckExact(kwnames));
+
+ if (PyTuple_GET_SIZE(kwnames) == 0) {
+ return 1;
+ }
+
+ PyErr_Format(PyExc_TypeError, "%s() takes no keyword arguments", funcname);
+ return 0;
+}
+
void
_PyArg_Fini(void)
{
diff --git a/Python/getopt.c b/Python/getopt.c
index 249ad1e..2e3891a 100644
--- a/Python/getopt.c
+++ b/Python/getopt.c
@@ -18,10 +18,6 @@
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Nevertheless, I would like to know about bugs in this library or
- * suggestions for improvment. Send bug reports and feedback to
- * davegottner@delphi.com.
*---------------------------------------------------------------------------*/
/* Modified to support --help and --version, as well as /? on Windows
diff --git a/Python/graminit.c b/Python/graminit.c
index 7c40ce9..b7aa528 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -1,7 +1,8 @@
/* Generated by Parser/pgen */
+#include "exports.h"
#include "grammar.h"
-grammar _PyParser_Grammar;
+Py_EXPORTED_SYMBOL grammar _PyParser_Grammar;
static const arc arcs_0_0[3] = {
{2, 1},
{3, 2},
@@ -51,31 +52,17 @@
static const arc arcs_3_1[1] = {
{49, 2},
};
-static const arc arcs_3_2[2] = {
- {5, 3},
- {2, 4},
+static const arc arcs_3_2[1] = {
+ {2, 3},
};
-static const arc arcs_3_3[2] = {
- {50, 5},
- {51, 6},
+static const arc arcs_3_3[1] = {
+ {0, 3},
};
-static const arc arcs_3_4[1] = {
- {0, 4},
-};
-static const arc arcs_3_5[1] = {
- {2, 4},
-};
-static const arc arcs_3_6[1] = {
- {50, 5},
-};
-static state states_3[7] = {
+static state states_3[4] = {
{1, arcs_3_0},
{1, arcs_3_1},
- {2, arcs_3_2},
- {2, arcs_3_3},
- {1, arcs_3_4},
- {1, arcs_3_5},
- {1, arcs_3_6},
+ {1, arcs_3_2},
+ {1, arcs_3_3},
};
static const arc arcs_4_0[1] = {
{48, 1},
@@ -89,12 +76,12 @@
{2, arcs_4_1},
};
static const arc arcs_5_0[1] = {
- {52, 1},
+ {50, 1},
};
static const arc arcs_5_1[3] = {
+ {52, 2},
+ {53, 2},
{54, 2},
- {55, 2},
- {56, 2},
};
static const arc arcs_5_2[1] = {
{0, 2},
@@ -108,7 +95,7 @@
{38, 1},
};
static const arc arcs_6_1[1] = {
- {56, 2},
+ {54, 2},
};
static const arc arcs_6_2[1] = {
{0, 2},
@@ -125,24 +112,24 @@
{40, 2},
};
static const arc arcs_7_2[1] = {
- {57, 3},
+ {55, 3},
};
static const arc arcs_7_3[2] = {
- {58, 4},
- {59, 5},
+ {56, 4},
+ {57, 5},
};
static const arc arcs_7_4[1] = {
- {60, 6},
+ {58, 6},
};
static const arc arcs_7_5[2] = {
- {61, 7},
- {62, 8},
+ {59, 7},
+ {60, 8},
};
static const arc arcs_7_6[1] = {
- {59, 5},
+ {57, 5},
};
static const arc arcs_7_7[1] = {
- {62, 8},
+ {60, 8},
};
static const arc arcs_7_8[1] = {
{0, 8},
@@ -162,14 +149,14 @@
{5, 1},
};
static const arc arcs_8_1[2] = {
- {50, 2},
- {63, 3},
+ {61, 2},
+ {62, 3},
};
static const arc arcs_8_2[1] = {
{0, 2},
};
static const arc arcs_8_3[1] = {
- {50, 2},
+ {61, 2},
};
static state states_8[4] = {
{1, arcs_8_0},
@@ -179,217 +166,217 @@
};
static const arc arcs_9_0[3] = {
{6, 1},
- {64, 2},
- {65, 3},
+ {63, 2},
+ {64, 3},
};
static const arc arcs_9_1[4] = {
- {66, 4},
- {61, 5},
- {65, 6},
+ {65, 4},
+ {59, 5},
+ {64, 6},
{0, 1},
};
static const arc arcs_9_2[1] = {
- {65, 7},
+ {64, 7},
};
static const arc arcs_9_3[4] = {
- {66, 8},
- {67, 9},
- {61, 5},
+ {65, 8},
+ {66, 9},
+ {59, 5},
{0, 3},
};
static const arc arcs_9_4[4] = {
- {64, 2},
- {61, 10},
- {65, 11},
+ {63, 2},
+ {59, 10},
+ {64, 11},
{0, 4},
};
static const arc arcs_9_5[1] = {
{0, 5},
};
static const arc arcs_9_6[3] = {
- {66, 4},
- {61, 5},
+ {65, 4},
+ {59, 5},
{0, 6},
};
static const arc arcs_9_7[3] = {
- {66, 12},
- {61, 5},
+ {65, 12},
+ {59, 5},
{0, 7},
};
static const arc arcs_9_8[6] = {
{6, 13},
- {64, 2},
- {68, 14},
- {61, 15},
- {65, 3},
+ {63, 2},
+ {67, 14},
+ {59, 15},
+ {64, 3},
{0, 8},
};
static const arc arcs_9_9[1] = {
- {60, 16},
+ {58, 16},
};
static const arc arcs_9_10[3] = {
- {64, 2},
- {65, 11},
+ {63, 2},
+ {64, 11},
{0, 10},
};
static const arc arcs_9_11[4] = {
- {66, 4},
- {67, 17},
- {61, 5},
+ {65, 4},
+ {66, 17},
+ {59, 5},
{0, 11},
};
static const arc arcs_9_12[2] = {
- {61, 5},
+ {59, 5},
{0, 12},
};
static const arc arcs_9_13[4] = {
- {66, 18},
- {61, 5},
- {65, 19},
+ {65, 18},
+ {59, 5},
+ {64, 19},
{0, 13},
};
static const arc arcs_9_14[2] = {
- {66, 20},
+ {65, 20},
{0, 14},
};
static const arc arcs_9_15[5] = {
{6, 13},
- {64, 2},
- {68, 14},
- {65, 3},
+ {63, 2},
+ {67, 14},
+ {64, 3},
{0, 15},
};
static const arc arcs_9_16[3] = {
- {66, 8},
- {61, 5},
+ {65, 8},
+ {59, 5},
{0, 16},
};
static const arc arcs_9_17[1] = {
- {60, 6},
+ {58, 6},
};
static const arc arcs_9_18[4] = {
- {64, 2},
- {61, 21},
- {65, 22},
+ {63, 2},
+ {59, 21},
+ {64, 22},
{0, 18},
};
static const arc arcs_9_19[3] = {
- {66, 18},
- {61, 5},
+ {65, 18},
+ {59, 5},
{0, 19},
};
static const arc arcs_9_20[5] = {
{6, 23},
- {64, 2},
- {61, 24},
- {65, 25},
+ {63, 2},
+ {59, 24},
+ {64, 25},
{0, 20},
};
static const arc arcs_9_21[3] = {
- {64, 2},
- {65, 22},
+ {63, 2},
+ {64, 22},
{0, 21},
};
static const arc arcs_9_22[4] = {
- {66, 18},
- {67, 26},
- {61, 5},
+ {65, 18},
+ {66, 26},
+ {59, 5},
{0, 22},
};
static const arc arcs_9_23[4] = {
- {66, 27},
- {61, 5},
- {65, 28},
+ {65, 27},
+ {59, 5},
+ {64, 28},
{0, 23},
};
static const arc arcs_9_24[1] = {
- {65, 25},
+ {64, 25},
};
static const arc arcs_9_25[4] = {
- {66, 29},
- {67, 30},
- {61, 5},
+ {65, 29},
+ {66, 30},
+ {59, 5},
{0, 25},
};
static const arc arcs_9_26[1] = {
- {60, 19},
+ {58, 19},
};
static const arc arcs_9_27[4] = {
- {64, 2},
- {61, 31},
- {65, 32},
+ {63, 2},
+ {59, 31},
+ {64, 32},
{0, 27},
};
static const arc arcs_9_28[3] = {
- {66, 27},
- {61, 5},
+ {65, 27},
+ {59, 5},
{0, 28},
};
static const arc arcs_9_29[5] = {
{6, 33},
- {64, 2},
- {61, 34},
- {65, 25},
+ {63, 2},
+ {59, 34},
+ {64, 25},
{0, 29},
};
static const arc arcs_9_30[1] = {
- {60, 35},
+ {58, 35},
};
static const arc arcs_9_31[3] = {
- {64, 2},
- {65, 32},
+ {63, 2},
+ {64, 32},
{0, 31},
};
static const arc arcs_9_32[4] = {
- {66, 27},
- {67, 36},
- {61, 5},
+ {65, 27},
+ {66, 36},
+ {59, 5},
{0, 32},
};
static const arc arcs_9_33[4] = {
- {66, 37},
- {61, 5},
- {65, 38},
+ {65, 37},
+ {59, 5},
+ {64, 38},
{0, 33},
};
static const arc arcs_9_34[4] = {
{6, 33},
- {64, 2},
- {65, 25},
+ {63, 2},
+ {64, 25},
{0, 34},
};
static const arc arcs_9_35[3] = {
- {66, 29},
- {61, 5},
+ {65, 29},
+ {59, 5},
{0, 35},
};
static const arc arcs_9_36[1] = {
- {60, 28},
+ {58, 28},
};
static const arc arcs_9_37[4] = {
- {64, 2},
- {61, 39},
- {65, 40},
+ {63, 2},
+ {59, 39},
+ {64, 40},
{0, 37},
};
static const arc arcs_9_38[3] = {
- {66, 37},
- {61, 5},
+ {65, 37},
+ {59, 5},
{0, 38},
};
static const arc arcs_9_39[3] = {
- {64, 2},
- {65, 40},
+ {63, 2},
+ {64, 40},
{0, 39},
};
static const arc arcs_9_40[4] = {
- {66, 37},
- {67, 41},
- {61, 5},
+ {65, 37},
+ {66, 41},
+ {59, 5},
{0, 40},
};
static const arc arcs_9_41[1] = {
- {60, 38},
+ {58, 38},
};
static state states_9[42] = {
{3, arcs_9_0},
@@ -439,11 +426,11 @@
{40, 1},
};
static const arc arcs_10_1[2] = {
- {59, 2},
+ {57, 2},
{0, 1},
};
static const arc arcs_10_2[1] = {
- {60, 3},
+ {58, 3},
};
static const arc arcs_10_3[1] = {
{0, 3},
@@ -456,153 +443,153 @@
};
static const arc arcs_11_0[3] = {
{6, 1},
- {64, 2},
- {70, 3},
+ {63, 2},
+ {69, 3},
};
static const arc arcs_11_1[3] = {
- {66, 4},
- {70, 5},
+ {65, 4},
+ {69, 5},
{0, 1},
};
static const arc arcs_11_2[1] = {
- {70, 6},
+ {69, 6},
};
static const arc arcs_11_3[3] = {
- {66, 7},
- {67, 8},
+ {65, 7},
+ {66, 8},
{0, 3},
};
static const arc arcs_11_4[3] = {
- {64, 2},
- {70, 9},
+ {63, 2},
+ {69, 9},
{0, 4},
};
static const arc arcs_11_5[2] = {
- {66, 4},
+ {65, 4},
{0, 5},
};
static const arc arcs_11_6[2] = {
- {66, 10},
+ {65, 10},
{0, 6},
};
static const arc arcs_11_7[5] = {
{6, 11},
- {64, 2},
- {68, 12},
- {70, 3},
+ {63, 2},
+ {67, 12},
+ {69, 3},
{0, 7},
};
static const arc arcs_11_8[1] = {
- {60, 13},
+ {58, 13},
};
static const arc arcs_11_9[3] = {
- {66, 4},
- {67, 14},
+ {65, 4},
+ {66, 14},
{0, 9},
};
static const arc arcs_11_10[1] = {
{0, 10},
};
static const arc arcs_11_11[3] = {
- {66, 15},
- {70, 16},
+ {65, 15},
+ {69, 16},
{0, 11},
};
static const arc arcs_11_12[2] = {
- {66, 17},
+ {65, 17},
{0, 12},
};
static const arc arcs_11_13[2] = {
- {66, 7},
+ {65, 7},
{0, 13},
};
static const arc arcs_11_14[1] = {
- {60, 5},
+ {58, 5},
};
static const arc arcs_11_15[3] = {
- {64, 2},
- {70, 18},
+ {63, 2},
+ {69, 18},
{0, 15},
};
static const arc arcs_11_16[2] = {
- {66, 15},
+ {65, 15},
{0, 16},
};
static const arc arcs_11_17[4] = {
{6, 19},
- {64, 2},
- {70, 20},
+ {63, 2},
+ {69, 20},
{0, 17},
};
static const arc arcs_11_18[3] = {
- {66, 15},
- {67, 21},
+ {65, 15},
+ {66, 21},
{0, 18},
};
static const arc arcs_11_19[3] = {
- {66, 22},
- {70, 23},
+ {65, 22},
+ {69, 23},
{0, 19},
};
static const arc arcs_11_20[3] = {
- {66, 24},
- {67, 25},
+ {65, 24},
+ {66, 25},
{0, 20},
};
static const arc arcs_11_21[1] = {
- {60, 16},
+ {58, 16},
};
static const arc arcs_11_22[3] = {
- {64, 2},
- {70, 26},
+ {63, 2},
+ {69, 26},
{0, 22},
};
static const arc arcs_11_23[2] = {
- {66, 22},
+ {65, 22},
{0, 23},
};
static const arc arcs_11_24[4] = {
{6, 27},
- {64, 2},
- {70, 20},
+ {63, 2},
+ {69, 20},
{0, 24},
};
static const arc arcs_11_25[1] = {
- {60, 28},
+ {58, 28},
};
static const arc arcs_11_26[3] = {
- {66, 22},
- {67, 29},
+ {65, 22},
+ {66, 29},
{0, 26},
};
static const arc arcs_11_27[3] = {
- {66, 30},
- {70, 31},
+ {65, 30},
+ {69, 31},
{0, 27},
};
static const arc arcs_11_28[2] = {
- {66, 24},
+ {65, 24},
{0, 28},
};
static const arc arcs_11_29[1] = {
- {60, 23},
+ {58, 23},
};
static const arc arcs_11_30[3] = {
- {64, 2},
- {70, 32},
+ {63, 2},
+ {69, 32},
{0, 30},
};
static const arc arcs_11_31[2] = {
- {66, 30},
+ {65, 30},
{0, 31},
};
static const arc arcs_11_32[3] = {
- {66, 30},
- {67, 33},
+ {65, 30},
+ {66, 33},
{0, 32},
};
static const arc arcs_11_33[1] = {
- {60, 31},
+ {58, 31},
};
static state states_11[34] = {
{3, arcs_11_0},
@@ -662,15 +649,15 @@
{1, arcs_13_1},
};
static const arc arcs_14_0[1] = {
- {71, 1},
+ {70, 1},
};
static const arc arcs_14_1[2] = {
- {72, 2},
+ {71, 2},
{2, 3},
};
static const arc arcs_14_2[2] = {
{2, 3},
- {71, 1},
+ {70, 1},
};
static const arc arcs_14_3[1] = {
{0, 3},
@@ -682,6 +669,7 @@
{1, arcs_14_3},
};
static const arc arcs_15_0[8] = {
+ {72, 1},
{73, 1},
{74, 1},
{75, 1},
@@ -689,7 +677,6 @@
{77, 1},
{78, 1},
{79, 1},
- {80, 1},
};
static const arc arcs_15_1[1] = {
{0, 1},
@@ -699,28 +686,28 @@
{1, arcs_15_1},
};
static const arc arcs_16_0[1] = {
- {81, 1},
+ {80, 1},
};
static const arc arcs_16_1[4] = {
- {67, 2},
- {82, 3},
- {83, 4},
+ {66, 2},
+ {81, 3},
+ {82, 4},
{0, 1},
};
static const arc arcs_16_2[2] = {
- {81, 5},
- {84, 5},
+ {80, 5},
+ {83, 5},
};
static const arc arcs_16_3[1] = {
{0, 3},
};
static const arc arcs_16_4[2] = {
{47, 3},
- {84, 3},
+ {83, 3},
};
static const arc arcs_16_5[3] = {
- {67, 2},
- {61, 3},
+ {66, 2},
+ {59, 3},
{0, 5},
};
static state states_16[6] = {
@@ -732,18 +719,18 @@
{3, arcs_16_5},
};
static const arc arcs_17_0[1] = {
- {59, 1},
+ {57, 1},
};
static const arc arcs_17_1[1] = {
- {60, 2},
+ {58, 2},
};
static const arc arcs_17_2[2] = {
- {67, 3},
+ {66, 3},
{0, 2},
};
static const arc arcs_17_3[2] = {
- {81, 4},
- {84, 4},
+ {80, 4},
+ {83, 4},
};
static const arc arcs_17_4[1] = {
{0, 4},
@@ -756,16 +743,16 @@
{1, arcs_17_4},
};
static const arc arcs_18_0[2] = {
- {85, 1},
- {60, 1},
+ {84, 1},
+ {58, 1},
};
static const arc arcs_18_1[2] = {
- {66, 2},
+ {65, 2},
{0, 1},
};
static const arc arcs_18_2[3] = {
- {85, 1},
- {60, 1},
+ {84, 1},
+ {58, 1},
{0, 2},
};
static state states_18[3] = {
@@ -774,6 +761,7 @@
{3, arcs_18_2},
};
static const arc arcs_19_0[13] = {
+ {85, 1},
{86, 1},
{87, 1},
{88, 1},
@@ -786,7 +774,6 @@
{95, 1},
{96, 1},
{97, 1},
- {98, 1},
};
static const arc arcs_19_1[1] = {
{0, 1},
@@ -799,7 +786,7 @@
{20, 1},
};
static const arc arcs_20_1[1] = {
- {99, 2},
+ {98, 2},
};
static const arc arcs_20_2[1] = {
{0, 2},
@@ -820,11 +807,11 @@
{1, arcs_21_1},
};
static const arc arcs_22_0[5] = {
+ {99, 1},
{100, 1},
{101, 1},
{102, 1},
{103, 1},
- {104, 1},
};
static const arc arcs_22_1[1] = {
{0, 1},
@@ -857,7 +844,7 @@
{31, 1},
};
static const arc arcs_25_1[2] = {
- {81, 2},
+ {80, 2},
{0, 1},
};
static const arc arcs_25_2[1] = {
@@ -869,7 +856,7 @@
{1, arcs_25_2},
};
static const arc arcs_26_0[1] = {
- {84, 1},
+ {83, 1},
};
static const arc arcs_26_1[1] = {
{0, 1},
@@ -882,7 +869,7 @@
{30, 1},
};
static const arc arcs_27_1[2] = {
- {60, 2},
+ {58, 2},
{0, 1},
};
static const arc arcs_27_2[2] = {
@@ -890,7 +877,7 @@
{0, 2},
};
static const arc arcs_27_3[1] = {
- {60, 4},
+ {58, 4},
};
static const arc arcs_27_4[1] = {
{0, 4},
@@ -903,8 +890,8 @@
{1, arcs_27_4},
};
static const arc arcs_28_0[2] = {
+ {104, 1},
{105, 1},
- {106, 1},
};
static const arc arcs_28_1[1] = {
{0, 1},
@@ -917,7 +904,7 @@
{25, 1},
};
static const arc arcs_29_1[1] = {
- {107, 2},
+ {106, 2},
};
static const arc arcs_29_2[1] = {
{0, 2},
@@ -931,15 +918,15 @@
{22, 1},
};
static const arc arcs_30_1[3] = {
- {108, 2},
+ {107, 2},
{9, 2},
- {49, 3},
+ {108, 3},
};
static const arc arcs_30_2[4] = {
- {108, 2},
+ {107, 2},
{9, 2},
{25, 4},
- {49, 3},
+ {108, 3},
};
static const arc arcs_30_3[1] = {
{25, 4},
@@ -956,7 +943,7 @@
{0, 6},
};
static const arc arcs_30_7[1] = {
- {50, 6},
+ {61, 6},
};
static state states_30[8] = {
{1, arcs_30_0},
@@ -988,7 +975,7 @@
{1, arcs_31_3},
};
static const arc arcs_32_0[1] = {
- {49, 1},
+ {108, 1},
};
static const arc arcs_32_1[2] = {
{111, 2},
@@ -1010,7 +997,7 @@
{110, 1},
};
static const arc arcs_33_1[2] = {
- {66, 2},
+ {65, 2},
{0, 1},
};
static const arc arcs_33_2[2] = {
@@ -1026,7 +1013,7 @@
{112, 1},
};
static const arc arcs_34_1[2] = {
- {66, 0},
+ {65, 0},
{0, 1},
};
static state states_34[2] = {
@@ -1037,7 +1024,7 @@
{40, 1},
};
static const arc arcs_35_1[2] = {
- {108, 0},
+ {107, 0},
{0, 1},
};
static state states_35[2] = {
@@ -1051,7 +1038,7 @@
{40, 2},
};
static const arc arcs_36_2[2] = {
- {66, 1},
+ {65, 1},
{0, 2},
};
static state states_36[3] = {
@@ -1066,7 +1053,7 @@
{40, 2},
};
static const arc arcs_37_2[2] = {
- {66, 1},
+ {65, 1},
{0, 2},
};
static state states_37[3] = {
@@ -1078,14 +1065,14 @@
{15, 1},
};
static const arc arcs_38_1[1] = {
- {60, 2},
+ {58, 2},
};
static const arc arcs_38_2[2] = {
- {66, 3},
+ {65, 3},
{0, 2},
};
static const arc arcs_38_3[1] = {
- {60, 4},
+ {58, 4},
};
static const arc arcs_38_4[1] = {
{0, 4},
@@ -1099,10 +1086,10 @@
};
static const arc arcs_39_0[9] = {
{113, 1},
- {55, 1},
{53, 1},
+ {51, 1},
{114, 1},
- {56, 1},
+ {54, 1},
{115, 1},
{116, 1},
{117, 1},
@@ -1120,7 +1107,7 @@
};
static const arc arcs_40_1[3] = {
{114, 2},
- {56, 2},
+ {54, 2},
{118, 2},
};
static const arc arcs_40_2[1] = {
@@ -1135,24 +1122,24 @@
{24, 1},
};
static const arc arcs_41_1[1] = {
- {119, 2},
+ {49, 2},
};
static const arc arcs_41_2[1] = {
- {59, 3},
+ {57, 3},
};
static const arc arcs_41_3[1] = {
- {120, 4},
+ {119, 4},
};
static const arc arcs_41_4[3] = {
- {121, 1},
- {122, 5},
+ {120, 1},
+ {121, 5},
{0, 4},
};
static const arc arcs_41_5[1] = {
- {59, 6},
+ {57, 6},
};
static const arc arcs_41_6[1] = {
- {120, 7},
+ {119, 7},
};
static const arc arcs_41_7[1] = {
{0, 7},
@@ -1171,23 +1158,23 @@
{33, 1},
};
static const arc arcs_42_1[1] = {
- {119, 2},
+ {49, 2},
};
static const arc arcs_42_2[1] = {
- {59, 3},
+ {57, 3},
};
static const arc arcs_42_3[1] = {
- {120, 4},
+ {119, 4},
};
static const arc arcs_42_4[2] = {
- {122, 5},
+ {121, 5},
{0, 4},
};
static const arc arcs_42_5[1] = {
- {59, 6},
+ {57, 6},
};
static const arc arcs_42_6[1] = {
- {120, 7},
+ {119, 7},
};
static const arc arcs_42_7[1] = {
{0, 7},
@@ -1206,33 +1193,33 @@
{21, 1},
};
static const arc arcs_43_1[1] = {
- {99, 2},
+ {98, 2},
};
static const arc arcs_43_2[1] = {
- {123, 3},
+ {122, 3},
};
static const arc arcs_43_3[1] = {
{47, 4},
};
static const arc arcs_43_4[1] = {
- {59, 5},
+ {57, 5},
};
static const arc arcs_43_5[2] = {
- {61, 6},
- {120, 7},
+ {59, 6},
+ {119, 7},
};
static const arc arcs_43_6[1] = {
- {120, 7},
+ {119, 7},
};
static const arc arcs_43_7[2] = {
- {122, 8},
+ {121, 8},
{0, 7},
};
static const arc arcs_43_8[1] = {
- {59, 9},
+ {57, 9},
};
static const arc arcs_43_9[1] = {
- {120, 10},
+ {119, 10},
};
static const arc arcs_43_10[1] = {
{0, 10},
@@ -1254,44 +1241,44 @@
{32, 1},
};
static const arc arcs_44_1[1] = {
- {59, 2},
+ {57, 2},
};
static const arc arcs_44_2[1] = {
- {120, 3},
+ {119, 3},
};
static const arc arcs_44_3[2] = {
- {124, 4},
- {125, 5},
+ {123, 4},
+ {124, 5},
};
static const arc arcs_44_4[1] = {
- {59, 6},
+ {57, 6},
};
static const arc arcs_44_5[1] = {
- {59, 7},
+ {57, 7},
};
static const arc arcs_44_6[1] = {
- {120, 8},
+ {119, 8},
};
static const arc arcs_44_7[1] = {
- {120, 9},
+ {119, 9},
};
static const arc arcs_44_8[1] = {
{0, 8},
};
static const arc arcs_44_9[4] = {
- {122, 10},
- {124, 4},
- {125, 5},
+ {121, 10},
+ {123, 4},
+ {124, 5},
{0, 9},
};
static const arc arcs_44_10[1] = {
- {59, 11},
+ {57, 11},
};
static const arc arcs_44_11[1] = {
- {120, 12},
+ {119, 12},
};
static const arc arcs_44_12[2] = {
- {124, 4},
+ {123, 4},
{0, 12},
};
static state states_44[13] = {
@@ -1313,18 +1300,18 @@
{34, 1},
};
static const arc arcs_45_1[1] = {
- {126, 2},
+ {125, 2},
};
static const arc arcs_45_2[2] = {
- {66, 1},
- {59, 3},
+ {65, 1},
+ {57, 3},
};
static const arc arcs_45_3[2] = {
- {61, 4},
- {120, 5},
+ {59, 4},
+ {119, 5},
};
static const arc arcs_45_4[1] = {
- {120, 5},
+ {119, 5},
};
static const arc arcs_45_5[1] = {
{0, 5},
@@ -1338,14 +1325,14 @@
{1, arcs_45_5},
};
static const arc arcs_46_0[1] = {
- {60, 1},
+ {58, 1},
};
static const arc arcs_46_1[2] = {
{111, 2},
{0, 1},
};
static const arc arcs_46_2[1] = {
- {127, 3},
+ {126, 3},
};
static const arc arcs_46_3[1] = {
{0, 3},
@@ -1357,10 +1344,10 @@
{1, arcs_46_3},
};
static const arc arcs_47_0[1] = {
- {128, 1},
+ {127, 1},
};
static const arc arcs_47_1[2] = {
- {60, 2},
+ {58, 2},
{0, 1},
};
static const arc arcs_47_2[2] = {
@@ -1385,7 +1372,7 @@
{4, 2},
};
static const arc arcs_48_1[1] = {
- {129, 3},
+ {128, 3},
};
static const arc arcs_48_2[1] = {
{0, 2},
@@ -1394,7 +1381,7 @@
{45, 4},
};
static const arc arcs_48_4[2] = {
- {130, 2},
+ {129, 2},
{45, 4},
};
static state states_48[5] = {
@@ -1405,14 +1392,14 @@
{2, arcs_48_4},
};
static const arc arcs_49_0[1] = {
- {60, 1},
+ {58, 1},
};
static const arc arcs_49_1[2] = {
- {131, 2},
+ {130, 2},
{0, 1},
};
static const arc arcs_49_2[1] = {
- {60, 3},
+ {58, 3},
};
static const arc arcs_49_3[1] = {
{0, 3},
@@ -1424,8 +1411,8 @@
{1, arcs_49_3},
};
static const arc arcs_50_0[2] = {
- {132, 1},
- {133, 2},
+ {131, 1},
+ {132, 2},
};
static const arc arcs_50_1[1] = {
{0, 1},
@@ -1435,13 +1422,13 @@
{0, 2},
};
static const arc arcs_50_3[1] = {
- {133, 4},
+ {132, 4},
};
static const arc arcs_50_4[1] = {
- {122, 5},
+ {121, 5},
};
static const arc arcs_50_5[1] = {
- {60, 1},
+ {58, 1},
};
static state states_50[6] = {
{2, arcs_50_0},
@@ -1452,8 +1439,8 @@
{1, arcs_50_5},
};
static const arc arcs_51_0[2] = {
- {135, 1},
- {133, 1},
+ {134, 1},
+ {132, 1},
};
static const arc arcs_51_1[1] = {
{0, 1},
@@ -1466,14 +1453,14 @@
{26, 1},
};
static const arc arcs_52_1[2] = {
- {59, 2},
- {69, 3},
+ {57, 2},
+ {68, 3},
};
static const arc arcs_52_2[1] = {
- {60, 4},
+ {58, 4},
};
static const arc arcs_52_3[1] = {
- {59, 2},
+ {57, 2},
};
static const arc arcs_52_4[1] = {
{0, 4},
@@ -1489,14 +1476,14 @@
{26, 1},
};
static const arc arcs_53_1[2] = {
- {59, 2},
- {69, 3},
+ {57, 2},
+ {68, 3},
};
static const arc arcs_53_2[1] = {
- {134, 4},
+ {133, 4},
};
static const arc arcs_53_3[1] = {
- {59, 2},
+ {57, 2},
};
static const arc arcs_53_4[1] = {
{0, 4},
@@ -1509,10 +1496,10 @@
{1, arcs_53_4},
};
static const arc arcs_54_0[1] = {
- {136, 1},
+ {135, 1},
};
static const arc arcs_54_1[2] = {
- {137, 0},
+ {136, 0},
{0, 1},
};
static state states_54[2] = {
@@ -1520,10 +1507,10 @@
{2, arcs_54_1},
};
static const arc arcs_55_0[1] = {
- {138, 1},
+ {137, 1},
};
static const arc arcs_55_1[2] = {
- {139, 0},
+ {138, 0},
{0, 1},
};
static state states_55[2] = {
@@ -1532,10 +1519,10 @@
};
static const arc arcs_56_0[2] = {
{28, 1},
- {140, 2},
+ {139, 2},
};
static const arc arcs_56_1[1] = {
- {138, 2},
+ {137, 2},
};
static const arc arcs_56_2[1] = {
{0, 2},
@@ -1546,10 +1533,10 @@
{1, arcs_56_2},
};
static const arc arcs_57_0[1] = {
- {127, 1},
+ {126, 1},
};
static const arc arcs_57_1[2] = {
- {141, 0},
+ {140, 0},
{0, 1},
};
static state states_57[2] = {
@@ -1557,15 +1544,15 @@
{2, arcs_57_1},
};
static const arc arcs_58_0[10] = {
+ {141, 1},
{142, 1},
{143, 1},
+ {141, 1},
{144, 1},
- {142, 1},
{145, 1},
{146, 1},
- {147, 1},
- {123, 1},
- {148, 2},
+ {122, 1},
+ {147, 2},
{28, 3},
};
static const arc arcs_58_1[1] = {
@@ -1576,7 +1563,7 @@
{0, 2},
};
static const arc arcs_58_3[1] = {
- {123, 1},
+ {122, 1},
};
static state states_58[4] = {
{10, arcs_58_0},
@@ -1588,7 +1575,7 @@
{6, 1},
};
static const arc arcs_59_1[1] = {
- {127, 2},
+ {126, 2},
};
static const arc arcs_59_2[1] = {
{0, 2},
@@ -1599,10 +1586,10 @@
{1, arcs_59_2},
};
static const arc arcs_60_0[1] = {
- {149, 1},
+ {148, 1},
};
static const arc arcs_60_1[2] = {
- {150, 0},
+ {149, 0},
{0, 1},
};
static state states_60[2] = {
@@ -1610,10 +1597,10 @@
{2, arcs_60_1},
};
static const arc arcs_61_0[1] = {
- {151, 1},
+ {150, 1},
};
static const arc arcs_61_1[2] = {
- {152, 0},
+ {151, 0},
{0, 1},
};
static state states_61[2] = {
@@ -1621,10 +1608,10 @@
{2, arcs_61_1},
};
static const arc arcs_62_0[1] = {
- {153, 1},
+ {152, 1},
};
static const arc arcs_62_1[2] = {
- {154, 0},
+ {153, 0},
{0, 1},
};
static state states_62[2] = {
@@ -1632,11 +1619,11 @@
{2, arcs_62_1},
};
static const arc arcs_63_0[1] = {
- {155, 1},
+ {154, 1},
};
static const arc arcs_63_1[3] = {
+ {155, 0},
{156, 0},
- {157, 0},
{0, 1},
};
static state states_63[2] = {
@@ -1644,7 +1631,7 @@
{3, arcs_63_1},
};
static const arc arcs_64_0[1] = {
- {158, 1},
+ {157, 1},
};
static const arc arcs_64_1[3] = {
{7, 0},
@@ -1656,13 +1643,13 @@
{3, arcs_64_1},
};
static const arc arcs_65_0[1] = {
- {159, 1},
+ {158, 1},
};
static const arc arcs_65_1[6] = {
- {160, 0},
+ {159, 0},
{6, 0},
- {68, 0},
- {161, 0},
+ {67, 0},
+ {160, 0},
{10, 0},
{0, 1},
};
@@ -1674,10 +1661,10 @@
{7, 1},
{8, 1},
{37, 1},
- {162, 2},
+ {161, 2},
};
static const arc arcs_66_1[1] = {
- {159, 2},
+ {158, 2},
};
static const arc arcs_66_2[1] = {
{0, 2},
@@ -1688,14 +1675,14 @@
{1, arcs_66_2},
};
static const arc arcs_67_0[1] = {
- {163, 1},
+ {162, 1},
};
static const arc arcs_67_1[2] = {
- {64, 2},
+ {63, 2},
{0, 1},
};
static const arc arcs_67_2[1] = {
- {159, 3},
+ {158, 3},
};
static const arc arcs_67_3[1] = {
{0, 3},
@@ -1708,13 +1695,13 @@
};
static const arc arcs_68_0[2] = {
{39, 1},
- {164, 2},
+ {163, 2},
};
static const arc arcs_68_1[1] = {
- {164, 2},
+ {163, 2},
};
static const arc arcs_68_2[2] = {
- {165, 2},
+ {164, 2},
{0, 2},
};
static state states_68[3] = {
@@ -1735,33 +1722,33 @@
{42, 5},
};
static const arc arcs_69_1[3] = {
- {50, 2},
- {166, 6},
- {84, 6},
+ {61, 2},
+ {165, 6},
+ {83, 6},
};
static const arc arcs_69_2[1] = {
{0, 2},
};
static const arc arcs_69_3[2] = {
- {167, 2},
- {166, 7},
+ {166, 2},
+ {165, 7},
};
static const arc arcs_69_4[2] = {
- {168, 2},
- {169, 8},
+ {167, 2},
+ {168, 8},
};
static const arc arcs_69_5[2] = {
{42, 5},
{0, 5},
};
static const arc arcs_69_6[1] = {
- {50, 2},
+ {61, 2},
};
static const arc arcs_69_7[1] = {
- {167, 2},
+ {166, 2},
};
static const arc arcs_69_8[1] = {
- {168, 2},
+ {167, 2},
};
static state states_69[9] = {
{10, arcs_69_0},
@@ -1775,24 +1762,24 @@
{1, arcs_69_8},
};
static const arc arcs_70_0[2] = {
- {119, 1},
- {85, 1},
+ {49, 1},
+ {84, 1},
};
static const arc arcs_70_1[3] = {
- {66, 2},
- {170, 3},
+ {65, 2},
+ {169, 3},
{0, 1},
};
static const arc arcs_70_2[3] = {
- {119, 4},
- {85, 4},
+ {49, 4},
+ {84, 4},
{0, 2},
};
static const arc arcs_70_3[1] = {
{0, 3},
};
static const arc arcs_70_4[2] = {
- {66, 2},
+ {65, 2},
{0, 4},
};
static state states_70[5] = {
@@ -1804,12 +1791,12 @@
};
static const arc arcs_71_0[3] = {
{5, 1},
- {108, 2},
+ {107, 2},
{14, 3},
};
static const arc arcs_71_1[2] = {
- {50, 4},
- {51, 5},
+ {61, 4},
+ {170, 5},
};
static const arc arcs_71_2[1] = {
{40, 4},
@@ -1821,10 +1808,10 @@
{0, 4},
};
static const arc arcs_71_5[1] = {
- {50, 4},
+ {61, 4},
};
static const arc arcs_71_6[1] = {
- {167, 4},
+ {166, 4},
};
static state states_71[7] = {
{3, arcs_71_0},
@@ -1839,7 +1826,7 @@
{172, 1},
};
static const arc arcs_72_1[2] = {
- {66, 2},
+ {65, 2},
{0, 1},
};
static const arc arcs_72_2[2] = {
@@ -1852,16 +1839,16 @@
{2, arcs_72_2},
};
static const arc arcs_73_0[2] = {
- {59, 1},
- {60, 2},
+ {57, 1},
+ {58, 2},
};
static const arc arcs_73_1[3] = {
{173, 3},
- {60, 4},
+ {58, 4},
{0, 1},
};
static const arc arcs_73_2[2] = {
- {59, 1},
+ {57, 1},
{0, 2},
};
static const arc arcs_73_3[1] = {
@@ -1879,10 +1866,10 @@
{2, arcs_73_4},
};
static const arc arcs_74_0[1] = {
- {59, 1},
+ {57, 1},
};
static const arc arcs_74_1[2] = {
- {60, 2},
+ {58, 2},
{0, 1},
};
static const arc arcs_74_2[1] = {
@@ -1894,16 +1881,16 @@
{1, arcs_74_2},
};
static const arc arcs_75_0[2] = {
- {127, 1},
- {85, 1},
+ {126, 1},
+ {84, 1},
};
static const arc arcs_75_1[2] = {
- {66, 2},
+ {65, 2},
{0, 1},
};
static const arc arcs_75_2[3] = {
- {127, 1},
- {85, 1},
+ {126, 1},
+ {84, 1},
{0, 2},
};
static state states_75[3] = {
@@ -1912,14 +1899,14 @@
{3, arcs_75_2},
};
static const arc arcs_76_0[1] = {
- {60, 1},
+ {58, 1},
};
static const arc arcs_76_1[2] = {
- {66, 2},
+ {65, 2},
{0, 1},
};
static const arc arcs_76_2[2] = {
- {60, 1},
+ {58, 1},
{0, 2},
};
static state states_76[3] = {
@@ -1928,61 +1915,61 @@
{2, arcs_76_2},
};
static const arc arcs_77_0[3] = {
- {64, 1},
- {85, 2},
- {60, 3},
+ {63, 1},
+ {84, 2},
+ {58, 3},
};
static const arc arcs_77_1[1] = {
- {127, 4},
+ {126, 4},
};
static const arc arcs_77_2[3] = {
- {66, 5},
- {170, 6},
+ {65, 5},
+ {169, 6},
{0, 2},
};
static const arc arcs_77_3[4] = {
- {66, 5},
- {59, 7},
- {170, 6},
+ {65, 5},
+ {57, 7},
+ {169, 6},
{0, 3},
};
static const arc arcs_77_4[3] = {
- {66, 8},
- {170, 6},
+ {65, 8},
+ {169, 6},
{0, 4},
};
static const arc arcs_77_5[3] = {
- {85, 9},
- {60, 9},
+ {84, 9},
+ {58, 9},
{0, 5},
};
static const arc arcs_77_6[1] = {
{0, 6},
};
static const arc arcs_77_7[1] = {
- {60, 4},
+ {58, 4},
};
static const arc arcs_77_8[3] = {
- {64, 10},
- {60, 11},
+ {63, 10},
+ {58, 11},
{0, 8},
};
static const arc arcs_77_9[2] = {
- {66, 5},
+ {65, 5},
{0, 9},
};
static const arc arcs_77_10[1] = {
- {127, 12},
+ {126, 12},
};
static const arc arcs_77_11[1] = {
- {59, 13},
+ {57, 13},
};
static const arc arcs_77_12[2] = {
- {66, 8},
+ {65, 8},
{0, 12},
};
static const arc arcs_77_13[1] = {
- {60, 12},
+ {58, 12},
};
static state states_77[14] = {
{3, arcs_77_0},
@@ -2008,20 +1995,20 @@
};
static const arc arcs_78_2[2] = {
{5, 3},
- {59, 4},
+ {57, 4},
};
static const arc arcs_78_3[2] = {
- {50, 5},
- {51, 6},
+ {61, 5},
+ {170, 6},
};
static const arc arcs_78_4[1] = {
- {120, 7},
+ {119, 7},
};
static const arc arcs_78_5[1] = {
- {59, 4},
+ {57, 4},
};
static const arc arcs_78_6[1] = {
- {50, 5},
+ {61, 5},
};
static const arc arcs_78_7[1] = {
{0, 7},
@@ -2040,7 +2027,7 @@
{174, 1},
};
static const arc arcs_79_1[2] = {
- {66, 2},
+ {65, 2},
{0, 1},
};
static const arc arcs_79_2[2] = {
@@ -2054,16 +2041,16 @@
};
static const arc arcs_80_0[3] = {
{6, 1},
- {64, 1},
- {60, 2},
+ {63, 1},
+ {58, 2},
};
static const arc arcs_80_1[1] = {
- {60, 3},
+ {58, 3},
};
static const arc arcs_80_2[4] = {
- {131, 1},
- {67, 1},
- {170, 3},
+ {130, 1},
+ {66, 1},
+ {169, 3},
{0, 2},
};
static const arc arcs_80_3[1] = {
@@ -2076,7 +2063,7 @@
{1, arcs_80_3},
};
static const arc arcs_81_0[2] = {
- {170, 1},
+ {169, 1},
{176, 1},
};
static const arc arcs_81_1[1] = {
@@ -2090,13 +2077,13 @@
{21, 1},
};
static const arc arcs_82_1[1] = {
- {99, 2},
+ {98, 2},
};
static const arc arcs_82_2[1] = {
- {123, 3},
+ {122, 3},
};
static const arc arcs_82_3[1] = {
- {133, 4},
+ {132, 4},
};
static const arc arcs_82_4[2] = {
{175, 5},
@@ -2132,7 +2119,7 @@
{24, 1},
};
static const arc arcs_84_1[1] = {
- {134, 2},
+ {133, 2},
};
static const arc arcs_84_2[2] = {
{175, 3},
@@ -2174,10 +2161,10 @@
};
static const arc arcs_87_0[2] = {
{22, 1},
- {81, 2},
+ {80, 2},
};
static const arc arcs_87_1[1] = {
- {60, 2},
+ {58, 2},
};
static const arc arcs_87_2[1] = {
{0, 2},
@@ -2192,8 +2179,8 @@
{4, 2},
};
static const arc arcs_88_1[2] = {
- {129, 3},
- {61, 4},
+ {128, 3},
+ {59, 4},
};
static const arc arcs_88_2[1] = {
{0, 2},
@@ -2205,11 +2192,11 @@
{2, 6},
};
static const arc arcs_88_5[2] = {
- {130, 2},
+ {129, 2},
{45, 5},
};
static const arc arcs_88_6[1] = {
- {129, 3},
+ {128, 3},
};
static state states_88[7] = {
{2, arcs_88_0},
@@ -2239,17 +2226,17 @@
{5, 1},
};
static const arc arcs_90_1[2] = {
- {50, 2},
+ {61, 2},
{182, 3},
};
static const arc arcs_90_2[1] = {
- {58, 4},
+ {56, 4},
};
static const arc arcs_90_3[1] = {
- {50, 2},
+ {61, 2},
};
static const arc arcs_90_4[1] = {
- {60, 5},
+ {58, 5},
};
static const arc arcs_90_5[1] = {
{0, 5},
@@ -2264,27 +2251,27 @@
};
static const arc arcs_91_0[3] = {
{6, 1},
- {64, 2},
- {60, 3},
+ {63, 2},
+ {58, 3},
};
static const arc arcs_91_1[3] = {
- {66, 4},
- {60, 5},
+ {65, 4},
+ {58, 5},
{0, 1},
};
static const arc arcs_91_2[1] = {
- {60, 6},
+ {58, 6},
};
static const arc arcs_91_3[2] = {
- {66, 7},
+ {65, 7},
{0, 3},
};
static const arc arcs_91_4[2] = {
- {64, 2},
- {60, 5},
+ {63, 2},
+ {58, 5},
};
static const arc arcs_91_5[2] = {
- {66, 4},
+ {65, 4},
{0, 5},
};
static const arc arcs_91_6[1] = {
@@ -2292,21 +2279,21 @@
};
static const arc arcs_91_7[4] = {
{6, 8},
- {64, 2},
- {60, 3},
+ {63, 2},
+ {58, 3},
{0, 7},
};
static const arc arcs_91_8[3] = {
- {66, 9},
- {60, 10},
+ {65, 9},
+ {58, 10},
{0, 8},
};
static const arc arcs_91_9[2] = {
- {64, 2},
- {60, 10},
+ {63, 2},
+ {58, 10},
};
static const arc arcs_91_10[2] = {
- {66, 9},
+ {65, 9},
{0, 10},
};
static state states_91[11] = {
@@ -2329,7 +2316,7 @@
"\344\377\377\377\377\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{258, "eval_input", 3, states_2,
"\240\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
- {259, "decorator", 7, states_3,
+ {259, "decorator", 4, states_3,
"\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{260, "decorators", 2, states_4,
"\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
@@ -2342,11 +2329,11 @@
{264, "parameters", 4, states_8,
"\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{265, "typedargslist", 42, states_9,
- "\100\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\100\000\000\000\000\001\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{266, "tfpdef", 4, states_10,
"\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{267, "varargslist", 34, states_11,
- "\100\000\000\000\000\001\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\100\000\000\000\000\001\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{268, "vfpdef", 2, states_12,
"\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{269, "stmt", 2, states_13,
@@ -2358,11 +2345,11 @@
{272, "expr_stmt", 6, states_16,
"\340\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{273, "annassign", 5, states_17,
- "\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{274, "testlist_star_expr", 3, states_18,
"\340\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{275, "augassign", 2, states_19,
- "\000\000\000\000\000\000\000\000\000\000\300\377\007\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\340\377\003\000\000\000\000\000\000\000\000\000\000"},
{276, "del_stmt", 3, states_20,
"\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{277, "pass_stmt", 2, states_21,
@@ -2418,7 +2405,7 @@
{302, "with_item", 4, states_46,
"\240\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{303, "except_clause", 5, states_47,
- "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000"},
{304, "suite", 5, states_48,
"\344\373\325\376\270\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{305, "namedexpr_test", 4, states_49,
@@ -2440,7 +2427,7 @@
{313, "comparison", 2, states_57,
"\240\173\000\000\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{314, "comp_op", 4, states_58,
- "\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\010\000\300\037\000\000\000\000"},
+ "\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\004\000\340\017\000\000\000\000"},
{315, "star_expr", 3, states_59,
"\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{316, "expr", 2, states_60,
@@ -2466,25 +2453,25 @@
{326, "testlist_comp", 5, states_70,
"\340\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{327, "trailer", 7, states_71,
- "\040\100\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"},
+ "\040\100\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
{328, "subscriptlist", 3, states_72,
- "\240\173\000\024\260\007\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\240\173\000\024\260\007\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{329, "subscript", 5, states_73,
- "\240\173\000\024\260\007\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\240\173\000\024\260\007\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{330, "sliceop", 3, states_74,
- "\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{331, "exprlist", 3, states_75,
"\340\173\000\000\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{332, "testlist", 3, states_76,
"\240\173\000\024\260\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{333, "dictorsetmaker", 14, states_77,
- "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{334, "classdef", 8, states_78,
"\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{335, "arglist", 3, states_79,
- "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{336, "argument", 4, states_80,
- "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{337, "comp_iter", 2, states_81,
"\000\000\040\001\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{338, "sync_comp_for", 6, states_82,
@@ -2506,7 +2493,7 @@
{346, "func_type", 6, states_90,
"\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{347, "typelist", 11, states_91,
- "\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+ "\340\173\000\024\260\007\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
};
static const label labels[183] = {
{0, "EMPTY"},
@@ -2558,9 +2545,7 @@
{258, 0},
{332, 0},
{259, 0},
- {291, 0},
- {8, 0},
- {335, 0},
+ {305, 0},
{260, 0},
{261, 0},
{262, 0},
@@ -2572,6 +2557,7 @@
{306, 0},
{58, 0},
{344, 0},
+ {8, 0},
{265, 0},
{35, 0},
{266, 0},
@@ -2618,6 +2604,7 @@
{285, 0},
{290, 0},
{23, 0},
+ {291, 0},
{289, 0},
{287, 0},
{1, "as"},
@@ -2628,7 +2615,6 @@
{300, 0},
{298, 0},
{301, 0},
- {305, 0},
{304, 0},
{1, "elif"},
{1, "else"},
@@ -2680,6 +2666,7 @@
{26, 0},
{333, 0},
{339, 0},
+ {335, 0},
{328, 0},
{329, 0},
{330, 0},
@@ -2693,7 +2680,7 @@
{346, 0},
{347, 0},
};
-grammar _PyParser_Grammar = {
+Py_EXPORTED_SYMBOL grammar _PyParser_Grammar = {
92,
dfas,
{183, labels},
diff --git a/Python/hamt.c b/Python/hamt.c
index 5efc8d7..8801c5e 100644
--- a/Python/hamt.c
+++ b/Python/hamt.c
@@ -1,9 +1,8 @@
#include "Python.h"
#include "pycore_hamt.h"
-#include "pycore_object.h"
-#include "pycore_pystate.h"
-#include "structmember.h"
+#include "pycore_object.h" // _PyObject_GC_TRACK()
+#include <stddef.h> // offsetof()
/*
This file provides an implementation of an immutable mapping using the
@@ -274,9 +273,9 @@
*/
-#define IS_ARRAY_NODE(node) (Py_TYPE(node) == &_PyHamt_ArrayNode_Type)
-#define IS_BITMAP_NODE(node) (Py_TYPE(node) == &_PyHamt_BitmapNode_Type)
-#define IS_COLLISION_NODE(node) (Py_TYPE(node) == &_PyHamt_CollisionNode_Type)
+#define IS_ARRAY_NODE(node) Py_IS_TYPE(node, &_PyHamt_ArrayNode_Type)
+#define IS_BITMAP_NODE(node) Py_IS_TYPE(node, &_PyHamt_BitmapNode_Type)
+#define IS_COLLISION_NODE(node) Py_IS_TYPE(node, &_PyHamt_CollisionNode_Type)
/* Return type for 'find' (lookup a key) functions.
@@ -551,7 +550,7 @@
return NULL;
}
- Py_SIZE(node) = size;
+ Py_SET_SIZE(node, size);
for (i = 0; i < size; i++) {
node->b_array[i] = NULL;
@@ -830,7 +829,7 @@
Instead we start using an Array node, which has
simpler (faster) implementation at the expense of
- having prealocated 32 pointers for its keys/values
+ having preallocated 32 pointers for its keys/values
pairs.
Small hamt objects (<30 keys) usually don't have any
@@ -1288,7 +1287,7 @@
node->c_array[i] = NULL;
}
- Py_SIZE(node) = size;
+ Py_SET_SIZE(node, size);
node->c_hash = hash;
_PyObject_GC_TRACK(node);
diff --git a/Python/hashtable.c b/Python/hashtable.c
new file mode 100644
index 0000000..09501de
--- /dev/null
+++ b/Python/hashtable.c
@@ -0,0 +1,417 @@
+/* The implementation of the hash table (_Py_hashtable_t) is based on the
+ cfuhash project:
+ http://sourceforge.net/projects/libcfu/
+
+ Copyright of cfuhash:
+ ----------------------------------
+ Creation date: 2005-06-24 21:22:40
+ Authors: Don
+ Change log:
+
+ Copyright (c) 2005 Don Owens
+ All rights reserved.
+
+ This code is released under the BSD license:
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of the author nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
+ ----------------------------------
+*/
+
+#include "Python.h"
+#include "pycore_hashtable.h"
+
+#define HASHTABLE_MIN_SIZE 16
+#define HASHTABLE_HIGH 0.50
+#define HASHTABLE_LOW 0.10
+#define HASHTABLE_REHASH_FACTOR 2.0 / (HASHTABLE_LOW + HASHTABLE_HIGH)
+
+#define BUCKETS_HEAD(SLIST) \
+ ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(SLIST)))
+#define TABLE_HEAD(HT, BUCKET) \
+ ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(HT)->buckets[BUCKET]))
+#define ENTRY_NEXT(ENTRY) \
+ ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
+
+/* Forward declaration */
+static int hashtable_rehash(_Py_hashtable_t *ht);
+
+static void
+_Py_slist_init(_Py_slist_t *list)
+{
+ list->head = NULL;
+}
+
+
+static void
+_Py_slist_prepend(_Py_slist_t *list, _Py_slist_item_t *item)
+{
+ item->next = list->head;
+ list->head = item;
+}
+
+
+static void
+_Py_slist_remove(_Py_slist_t *list, _Py_slist_item_t *previous,
+ _Py_slist_item_t *item)
+{
+ if (previous != NULL)
+ previous->next = item->next;
+ else
+ list->head = item->next;
+}
+
+
+Py_uhash_t
+_Py_hashtable_hash_ptr(const void *key)
+{
+ return (Py_uhash_t)_Py_HashPointerRaw(key);
+}
+
+
+int
+_Py_hashtable_compare_direct(const void *key1, const void *key2)
+{
+ return (key1 == key2);
+}
+
+
+/* makes sure the real size of the buckets array is a power of 2 */
+static size_t
+round_size(size_t s)
+{
+ size_t i;
+ if (s < HASHTABLE_MIN_SIZE)
+ return HASHTABLE_MIN_SIZE;
+ i = 1;
+ while (i < s)
+ i <<= 1;
+ return i;
+}
+
+
+size_t
+_Py_hashtable_size(const _Py_hashtable_t *ht)
+{
+ size_t size = sizeof(_Py_hashtable_t);
+ /* buckets */
+ size += ht->nbuckets * sizeof(_Py_hashtable_entry_t *);
+ /* entries */
+ size += ht->nentries * sizeof(_Py_hashtable_entry_t);
+ return size;
+}
+
+
+_Py_hashtable_entry_t *
+_Py_hashtable_get_entry_generic(_Py_hashtable_t *ht, const void *key)
+{
+ Py_uhash_t key_hash = ht->hash_func(key);
+ size_t index = key_hash & (ht->nbuckets - 1);
+ _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
+ while (1) {
+ if (entry == NULL) {
+ return NULL;
+ }
+ if (entry->key_hash == key_hash && ht->compare_func(key, entry->key)) {
+ break;
+ }
+ entry = ENTRY_NEXT(entry);
+ }
+ return entry;
+}
+
+
+// Specialized for:
+// hash_func == _Py_hashtable_hash_ptr
+// compare_func == _Py_hashtable_compare_direct
+static _Py_hashtable_entry_t *
+_Py_hashtable_get_entry_ptr(_Py_hashtable_t *ht, const void *key)
+{
+ Py_uhash_t key_hash = _Py_hashtable_hash_ptr(key);
+ size_t index = key_hash & (ht->nbuckets - 1);
+ _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
+ while (1) {
+ if (entry == NULL) {
+ return NULL;
+ }
+ // Compare directly keys (ignore entry->key_hash)
+ if (entry->key == key) {
+ break;
+ }
+ entry = ENTRY_NEXT(entry);
+ }
+ return entry;
+}
+
+
+void*
+_Py_hashtable_steal(_Py_hashtable_t *ht, const void *key)
+{
+ Py_uhash_t key_hash = ht->hash_func(key);
+ size_t index = key_hash & (ht->nbuckets - 1);
+
+ _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
+ _Py_hashtable_entry_t *previous = NULL;
+ while (1) {
+ if (entry == NULL) {
+ // not found
+ return NULL;
+ }
+ if (entry->key_hash == key_hash && ht->compare_func(key, entry->key)) {
+ break;
+ }
+ previous = entry;
+ entry = ENTRY_NEXT(entry);
+ }
+
+ _Py_slist_remove(&ht->buckets[index], (_Py_slist_item_t *)previous,
+ (_Py_slist_item_t *)entry);
+ ht->nentries--;
+
+ void *value = entry->value;
+ ht->alloc.free(entry);
+
+ if ((float)ht->nentries / (float)ht->nbuckets < HASHTABLE_LOW) {
+ // Ignore failure: error cannot be reported to the caller
+ hashtable_rehash(ht);
+ }
+ return value;
+}
+
+
+int
+_Py_hashtable_set(_Py_hashtable_t *ht, const void *key, void *value)
+{
+ _Py_hashtable_entry_t *entry;
+
+#ifndef NDEBUG
+ /* Don't write the assertion on a single line because it is interesting
+ to know the duplicated entry if the assertion failed. The entry can
+ be read using a debugger. */
+ entry = ht->get_entry_func(ht, key);
+ assert(entry == NULL);
+#endif
+
+
+ entry = ht->alloc.malloc(sizeof(_Py_hashtable_entry_t));
+ if (entry == NULL) {
+ /* memory allocation failed */
+ return -1;
+ }
+
+ entry->key_hash = ht->hash_func(key);
+ entry->key = (void *)key;
+ entry->value = value;
+
+ ht->nentries++;
+ if ((float)ht->nentries / (float)ht->nbuckets > HASHTABLE_HIGH) {
+ if (hashtable_rehash(ht) < 0) {
+ ht->nentries--;
+ ht->alloc.free(entry);
+ return -1;
+ }
+ }
+
+ size_t index = entry->key_hash & (ht->nbuckets - 1);
+ _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry);
+ return 0;
+}
+
+
+void*
+_Py_hashtable_get(_Py_hashtable_t *ht, const void *key)
+{
+ _Py_hashtable_entry_t *entry = ht->get_entry_func(ht, key);
+ if (entry != NULL) {
+ return entry->value;
+ }
+ else {
+ return NULL;
+ }
+}
+
+
+int
+_Py_hashtable_foreach(_Py_hashtable_t *ht,
+ _Py_hashtable_foreach_func func,
+ void *user_data)
+{
+ for (size_t hv = 0; hv < ht->nbuckets; hv++) {
+ _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, hv);
+ while (entry != NULL) {
+ int res = func(ht, entry->key, entry->value, user_data);
+ if (res) {
+ return res;
+ }
+ entry = ENTRY_NEXT(entry);
+ }
+ }
+ return 0;
+}
+
+
+static int
+hashtable_rehash(_Py_hashtable_t *ht)
+{
+ size_t new_size = round_size((size_t)(ht->nentries * HASHTABLE_REHASH_FACTOR));
+ if (new_size == ht->nbuckets) {
+ return 0;
+ }
+
+ size_t buckets_size = new_size * sizeof(ht->buckets[0]);
+ _Py_slist_t *new_buckets = ht->alloc.malloc(buckets_size);
+ if (new_buckets == NULL) {
+ /* memory allocation failed */
+ return -1;
+ }
+ memset(new_buckets, 0, buckets_size);
+
+ for (size_t bucket = 0; bucket < ht->nbuckets; bucket++) {
+ _Py_hashtable_entry_t *entry = BUCKETS_HEAD(ht->buckets[bucket]);
+ while (entry != NULL) {
+ assert(ht->hash_func(entry->key) == entry->key_hash);
+ _Py_hashtable_entry_t *next = ENTRY_NEXT(entry);
+ size_t entry_index = entry->key_hash & (new_size - 1);
+
+ _Py_slist_prepend(&new_buckets[entry_index], (_Py_slist_item_t*)entry);
+
+ entry = next;
+ }
+ }
+
+ ht->alloc.free(ht->buckets);
+ ht->nbuckets = new_size;
+ ht->buckets = new_buckets;
+ return 0;
+}
+
+
+_Py_hashtable_t *
+_Py_hashtable_new_full(_Py_hashtable_hash_func hash_func,
+ _Py_hashtable_compare_func compare_func,
+ _Py_hashtable_destroy_func key_destroy_func,
+ _Py_hashtable_destroy_func value_destroy_func,
+ _Py_hashtable_allocator_t *allocator)
+{
+ _Py_hashtable_allocator_t alloc;
+ if (allocator == NULL) {
+ alloc.malloc = PyMem_Malloc;
+ alloc.free = PyMem_Free;
+ }
+ else {
+ alloc = *allocator;
+ }
+
+ _Py_hashtable_t *ht = (_Py_hashtable_t *)alloc.malloc(sizeof(_Py_hashtable_t));
+ if (ht == NULL) {
+ return ht;
+ }
+
+ ht->nbuckets = HASHTABLE_MIN_SIZE;
+ ht->nentries = 0;
+
+ size_t buckets_size = ht->nbuckets * sizeof(ht->buckets[0]);
+ ht->buckets = alloc.malloc(buckets_size);
+ if (ht->buckets == NULL) {
+ alloc.free(ht);
+ return NULL;
+ }
+ memset(ht->buckets, 0, buckets_size);
+
+ ht->get_entry_func = _Py_hashtable_get_entry_generic;
+ ht->hash_func = hash_func;
+ ht->compare_func = compare_func;
+ ht->key_destroy_func = key_destroy_func;
+ ht->value_destroy_func = value_destroy_func;
+ ht->alloc = alloc;
+ if (ht->hash_func == _Py_hashtable_hash_ptr
+ && ht->compare_func == _Py_hashtable_compare_direct)
+ {
+ ht->get_entry_func = _Py_hashtable_get_entry_ptr;
+ }
+ return ht;
+}
+
+
+_Py_hashtable_t *
+_Py_hashtable_new(_Py_hashtable_hash_func hash_func,
+ _Py_hashtable_compare_func compare_func)
+{
+ return _Py_hashtable_new_full(hash_func, compare_func,
+ NULL, NULL, NULL);
+}
+
+
+static void
+_Py_hashtable_destroy_entry(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry)
+{
+ if (ht->key_destroy_func) {
+ ht->key_destroy_func(entry->key);
+ }
+ if (ht->value_destroy_func) {
+ ht->value_destroy_func(entry->value);
+ }
+ ht->alloc.free(entry);
+}
+
+
+void
+_Py_hashtable_clear(_Py_hashtable_t *ht)
+{
+ for (size_t i=0; i < ht->nbuckets; i++) {
+ _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, i);
+ while (entry != NULL) {
+ _Py_hashtable_entry_t *next = ENTRY_NEXT(entry);
+ _Py_hashtable_destroy_entry(ht, entry);
+ entry = next;
+ }
+ _Py_slist_init(&ht->buckets[i]);
+ }
+ ht->nentries = 0;
+ // Ignore failure: clear function is not expected to fail
+ // because of a memory allocation failure.
+ (void)hashtable_rehash(ht);
+}
+
+
+void
+_Py_hashtable_destroy(_Py_hashtable_t *ht)
+{
+ for (size_t i = 0; i < ht->nbuckets; i++) {
+ _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, i);
+ while (entry) {
+ _Py_hashtable_entry_t *entry_next = ENTRY_NEXT(entry);
+ _Py_hashtable_destroy_entry(ht, entry);
+ entry = entry_next;
+ }
+ }
+
+ ht->alloc.free(ht->buckets);
+ ht->alloc.free(ht);
+}
diff --git a/Python/import.c b/Python/import.c
index b73fe2f..5e39a2f 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -4,15 +4,17 @@
#include "Python-ast.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
+#include "pycore_initconfig.h"
+#include "pycore_pyerrors.h"
#include "pycore_pyhash.h"
#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h" // _PyMem_SetDefaultAllocator()
+#include "pycore_interp.h" // _PyInterpreterState_ClearModules()
+#include "pycore_pystate.h" // _PyInterpreterState_GET()
+#include "pycore_sysmodule.h"
#include "errcode.h"
#include "marshal.h"
#include "code.h"
-#include "frameobject.h"
-#include "osdefs.h"
#include "importdl.h"
#include "pydtrace.h"
@@ -25,6 +27,9 @@
#define CACHEDIR "__pycache__"
+/* Forward references */
+static PyObject *import_add_module(PyThreadState *tstate, PyObject *name);
+
/* See _PyImport_FixupExtensionObject() below */
static PyObject *extensions = NULL;
@@ -34,6 +39,9 @@
struct _inittab *PyImport_Inittab = _PyImport_Inittab;
static struct _inittab *inittab_copy = NULL;
+_Py_IDENTIFIER(__path__);
+_Py_IDENTIFIER(__spec__);
+
/*[clinic input]
module _imp
[clinic start generated code]*/
@@ -44,17 +52,7 @@
/* Initialize things */
PyStatus
-_PyImport_Init(PyInterpreterState *interp)
-{
- interp->builtins_copy = PyDict_Copy(interp->builtins);
- if (interp->builtins_copy == NULL) {
- return _PyStatus_ERR("Can't backup builtins dict");
- }
- return _PyStatus_OK();
-}
-
-PyStatus
-_PyImportHooks_Init(void)
+_PyImportHooks_Init(PyThreadState *tstate)
{
PyObject *v, *path_hooks = NULL;
int err = 0;
@@ -85,31 +83,32 @@
return _PyStatus_OK();
error:
- PyErr_Print();
+ _PyErr_Print(tstate);
return _PyStatus_ERR("initializing sys.meta_path, sys.path_hooks, "
"or path_importer_cache failed");
}
PyStatus
-_PyImportZip_Init(PyInterpreterState *interp)
+_PyImportZip_Init(PyThreadState *tstate)
{
PyObject *path_hooks, *zipimport;
int err = 0;
path_hooks = PySys_GetObject("path_hooks");
if (path_hooks == NULL) {
- PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks");
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "unable to get sys.path_hooks");
goto error;
}
- int verbose = interp->config.verbose;
+ int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
if (verbose) {
PySys_WriteStderr("# installing zipimport hook\n");
}
zipimport = PyImport_ImportModule("zipimport");
if (zipimport == NULL) {
- PyErr_Clear(); /* No zip import module -- okay */
+ _PyErr_Clear(tstate); /* No zip import module -- okay */
if (verbose) {
PySys_WriteStderr("# can't import zipimport\n");
}
@@ -120,7 +119,7 @@
&PyId_zipimporter);
Py_DECREF(zipimport);
if (zipimporter == NULL) {
- PyErr_Clear(); /* No zipimporter object -- okay */
+ _PyErr_Clear(tstate); /* No zipimporter object -- okay */
if (verbose) {
PySys_WriteStderr("# can't import zipimport.zipimporter\n");
}
@@ -149,8 +148,6 @@
in different threads to return with a partially loaded module.
These calls are serialized by the global interpreter lock. */
-#include "pythread.h"
-
static PyThread_type_lock import_lock = 0;
static unsigned long import_lock_thread = PYTHREAD_INVALID_THREAD_ID;
static int import_lock_level = 0;
@@ -199,6 +196,7 @@
return 1;
}
+#ifdef HAVE_FORK
/* This function is called from PyOS_AfterFork_Child to ensure that newly
created child processes do not share locks with the parent.
We now acquire the import lock around fork() calls but on some platforms
@@ -208,9 +206,8 @@
_PyImport_ReInitLock(void)
{
if (import_lock != NULL) {
- import_lock = PyThread_allocate_lock();
- if (import_lock == NULL) {
- Py_FatalError("PyImport_ReInitLock failed to create a new lock");
+ if (_PyThread_at_fork_reinit(&import_lock) < 0) {
+ _Py_FatalErrorFunc(__func__, "failed to create a new lock");
}
}
if (import_lock_level > 1) {
@@ -228,6 +225,7 @@
import_lock_level = 0;
}
}
+#endif
/*[clinic input]
_imp.lock_held
@@ -310,9 +308,9 @@
PyObject *
PyImport_GetModuleDict(void)
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
if (interp->modules == NULL) {
- Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
+ Py_FatalError("interpreter has no modules dictionary");
}
return interp->modules;
}
@@ -342,26 +340,30 @@
int
_PyImport_SetModule(PyObject *name, PyObject *m)
{
- PyObject *modules = PyImport_GetModuleDict();
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *modules = tstate->interp->modules;
return PyObject_SetItem(modules, name, m);
}
int
_PyImport_SetModuleString(const char *name, PyObject *m)
{
- PyObject *modules = PyImport_GetModuleDict();
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *modules = tstate->interp->modules;
return PyMapping_SetItemString(modules, name, m);
}
-PyObject *
-PyImport_GetModule(PyObject *name)
+static PyObject *
+import_get_module(PyThreadState *tstate, PyObject *name)
{
- PyObject *m;
- PyObject *modules = PyImport_GetModuleDict();
+ PyObject *modules = tstate->interp->modules;
if (modules == NULL) {
- PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "unable to get sys.modules");
return NULL;
}
+
+ PyObject *m;
Py_INCREF(modules);
if (PyDict_CheckExact(modules)) {
m = PyDict_GetItemWithError(modules, name); /* borrowed */
@@ -369,8 +371,8 @@
}
else {
m = PyObject_GetItem(modules, name);
- if (m == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
+ if (m == NULL && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
}
}
Py_DECREF(modules);
@@ -378,6 +380,35 @@
}
+static int
+import_ensure_initialized(PyThreadState *tstate, PyObject *mod, PyObject *name)
+{
+ PyInterpreterState *interp = tstate->interp;
+ PyObject *spec;
+
+ _Py_IDENTIFIER(_lock_unlock_module);
+
+ /* Optimization: only call _bootstrap._lock_unlock_module() if
+ __spec__._initializing is true.
+ NOTE: because of this, initializing must be set *before*
+ stuffing the new module in sys.modules.
+ */
+ spec = _PyObject_GetAttrId(mod, &PyId___spec__);
+ int busy = _PyModuleSpec_IsInitializing(spec);
+ Py_XDECREF(spec);
+ if (busy) {
+ /* Wait until module is done importing. */
+ PyObject *value = _PyObject_CallMethodIdOneArg(
+ interp->importlib, &PyId__lock_unlock_module, name);
+ if (value == NULL) {
+ return -1;
+ }
+ Py_DECREF(value);
+ }
+ return 0;
+}
+
+
/* List of names to clear in sys */
static const char * const sys_deletes[] = {
"path", "argv", "ps1", "ps2",
@@ -397,17 +428,14 @@
/* Un-initialize things, as good as we can */
void
-PyImport_Cleanup(void)
+_PyImport_Cleanup(PyThreadState *tstate)
{
- Py_ssize_t pos;
- PyObject *key, *value, *dict;
- PyInterpreterState *interp = _PyInterpreterState_Get();
- PyObject *modules = PyImport_GetModuleDict();
- PyObject *weaklist = NULL;
- const char * const *p;
-
- if (modules == NULL)
- return; /* Already done */
+ PyInterpreterState *interp = tstate->interp;
+ PyObject *modules = interp->modules;
+ if (modules == NULL) {
+ /* Already done */
+ return;
+ }
/* Delete some special variables first. These are common
places where user values hide and people complain when their
@@ -417,7 +445,7 @@
/* XXX Perhaps these precautions are obsolete. Who knows? */
- int verbose = interp->config.verbose;
+ int verbose = _PyInterpreterState_GetConfig(interp)->verbose;
if (verbose) {
PySys_WriteStderr("# clear builtins._\n");
}
@@ -425,6 +453,7 @@
PyErr_WriteUnraisable(NULL);
}
+ const char * const *p;
for (p = sys_deletes; *p != NULL; p++) {
if (verbose) {
PySys_WriteStderr("# clear sys.%s\n", *p);
@@ -437,9 +466,10 @@
if (verbose) {
PySys_WriteStderr("# restore sys.%s\n", *p);
}
- value = _PyDict_GetItemStringWithError(interp->sysdict, *(p+1));
+ PyObject *value = _PyDict_GetItemStringWithError(interp->sysdict,
+ *(p+1));
if (value == NULL) {
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
PyErr_WriteUnraisable(NULL);
}
value = Py_None;
@@ -453,7 +483,7 @@
modules when they are removed from sys.modules. The name is used
for diagnosis messages (in verbose mode), while the weakref helps
detect those modules which have been held alive. */
- weaklist = PyList_New(0);
+ PyObject *weaklist = PyList_New(0);
if (weaklist == NULL) {
PyErr_WriteUnraisable(NULL);
}
@@ -487,7 +517,8 @@
/* Remove all modules from sys.modules, hoping that garbage collection
can reclaim most of them. */
if (PyDict_CheckExact(modules)) {
- pos = 0;
+ Py_ssize_t pos = 0;
+ PyObject *key, *value;
while (PyDict_Next(modules, &pos, &key, &value)) {
CLEAR_MODULE(key, value);
}
@@ -498,8 +529,9 @@
PyErr_WriteUnraisable(NULL);
}
else {
+ PyObject *key;
while ((key = PyIter_Next(iterator))) {
- value = PyObject_GetItem(modules, key);
+ PyObject *value = PyObject_GetItem(modules, key);
if (value == NULL) {
PyErr_WriteUnraisable(NULL);
continue;
@@ -521,28 +553,26 @@
}
else {
_Py_IDENTIFIER(clear);
- if (_PyObject_CallMethodId(modules, &PyId_clear, "") == NULL) {
+ if (_PyObject_CallMethodIdNoArgs(modules, &PyId_clear) == NULL) {
PyErr_WriteUnraisable(NULL);
}
}
/* Restore the original builtins dict, to ensure that any
user data gets cleared. */
- dict = PyDict_Copy(interp->builtins);
+ PyObject *dict = PyDict_Copy(interp->builtins);
if (dict == NULL) {
PyErr_WriteUnraisable(NULL);
}
PyDict_Clear(interp->builtins);
if (PyDict_Update(interp->builtins, interp->builtins_copy)) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
Py_XDECREF(dict);
- /* Clear module dict copies stored in the interpreter state */
- _PyState_ClearModules();
/* Collect references */
_PyGC_CollectNoFail();
/* Dump GC stats before it's too late, since it uses the warnings
machinery. */
- _PyGC_DumpShutdownStats(&_PyRuntime);
+ _PyGC_DumpShutdownStats(tstate);
/* Now, if there are any modules left alive, clear their globals to
minimize potential leaks. All C extension modules actually end
@@ -589,6 +619,9 @@
}
_PyModule_ClearDict(interp->builtins);
+ /* Clear module dict copies stored in the interpreter state */
+ _PyInterpreterState_ClearModules(interp);
+
/* Clear and delete the modules directory. Actual modules will
still be there only if imported during the execution of some
destructor. */
@@ -609,7 +642,7 @@
PyImport_GetMagicNumber(void)
{
long res;
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
PyObject *external, *pyc_magic;
external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
@@ -652,52 +685,64 @@
int
_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
- PyObject *filename, PyObject *modules)
+ PyObject *filename, PyObject *modules)
{
- PyObject *dict, *key;
- struct PyModuleDef *def;
- int res;
- if (extensions == NULL) {
- extensions = PyDict_New();
- if (extensions == NULL)
- return -1;
- }
if (mod == NULL || !PyModule_Check(mod)) {
PyErr_BadInternalCall();
return -1;
}
- def = PyModule_GetDef(mod);
+
+ struct PyModuleDef *def = PyModule_GetDef(mod);
if (!def) {
PyErr_BadInternalCall();
return -1;
}
- if (PyObject_SetItem(modules, name, mod) < 0)
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (PyObject_SetItem(modules, name, mod) < 0) {
return -1;
- if (_PyState_AddModule(mod, def) < 0) {
+ }
+ if (_PyState_AddModule(tstate, mod, def) < 0) {
PyMapping_DelItem(modules, name);
return -1;
}
- if (def->m_size == -1) {
- if (def->m_base.m_copy) {
- /* Somebody already imported the module,
- likely under a different name.
- XXX this should really not happen. */
- Py_CLEAR(def->m_base.m_copy);
+
+ if (_Py_IsMainInterpreter(tstate)) {
+ if (def->m_size == -1) {
+ if (def->m_base.m_copy) {
+ /* Somebody already imported the module,
+ likely under a different name.
+ XXX this should really not happen. */
+ Py_CLEAR(def->m_base.m_copy);
+ }
+ PyObject *dict = PyModule_GetDict(mod);
+ if (dict == NULL) {
+ return -1;
+ }
+ def->m_base.m_copy = PyDict_Copy(dict);
+ if (def->m_base.m_copy == NULL) {
+ return -1;
+ }
}
- dict = PyModule_GetDict(mod);
- if (dict == NULL)
+
+ if (extensions == NULL) {
+ extensions = PyDict_New();
+ if (extensions == NULL) {
+ return -1;
+ }
+ }
+
+ PyObject *key = PyTuple_Pack(2, filename, name);
+ if (key == NULL) {
return -1;
- def->m_base.m_copy = PyDict_Copy(dict);
- if (def->m_base.m_copy == NULL)
+ }
+ int res = PyDict_SetItem(extensions, key, (PyObject *)def);
+ Py_DECREF(key);
+ if (res < 0) {
return -1;
+ }
}
- key = PyTuple_Pack(2, filename, name);
- if (key == NULL)
- return -1;
- res = PyDict_SetItem(extensions, key, (PyObject *)def);
- Py_DECREF(key);
- if (res < 0)
- return -1;
+
return 0;
}
@@ -714,33 +759,32 @@
return res;
}
-PyObject *
-_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
+static PyObject *
+import_find_extension(PyThreadState *tstate, PyObject *name,
+ PyObject *filename)
{
- PyObject *modules = PyImport_GetModuleDict();
- return _PyImport_FindExtensionObjectEx(name, filename, modules);
-}
+ if (extensions == NULL) {
+ return NULL;
+ }
-PyObject *
-_PyImport_FindExtensionObjectEx(PyObject *name, PyObject *filename,
- PyObject *modules)
-{
- PyObject *mod, *mdict, *key;
- PyModuleDef* def;
- if (extensions == NULL)
+ PyObject *key = PyTuple_Pack(2, filename, name);
+ if (key == NULL) {
return NULL;
- key = PyTuple_Pack(2, filename, name);
- if (key == NULL)
- return NULL;
- def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key);
+ }
+ PyModuleDef* def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key);
Py_DECREF(key);
- if (def == NULL)
+ if (def == NULL) {
return NULL;
+ }
+
+ PyObject *mod, *mdict;
+ PyObject *modules = tstate->interp->modules;
+
if (def->m_size == -1) {
/* Module does not support repeated initialization */
if (def->m_base.m_copy == NULL)
return NULL;
- mod = _PyImport_AddModuleObject(name, modules);
+ mod = import_add_module(tstate, name);
if (mod == NULL)
return NULL;
mdict = PyModule_GetDict(mod);
@@ -761,27 +805,35 @@
}
Py_DECREF(mod);
}
- if (_PyState_AddModule(mod, def) < 0) {
+ if (_PyState_AddModule(tstate, mod, def) < 0) {
PyMapping_DelItem(modules, name);
return NULL;
}
- int verbose = _PyInterpreterState_Get()->config.verbose;
+
+ int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
if (verbose) {
PySys_FormatStderr("import %U # previously loaded (%R)\n",
name, filename);
}
return mod;
-
}
PyObject *
-_PyImport_FindBuiltin(const char *name, PyObject *modules)
+_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return import_find_extension(tstate, name, filename);
+}
+
+
+PyObject *
+_PyImport_FindBuiltin(PyThreadState *tstate, const char *name)
{
PyObject *res, *nameobj;
nameobj = PyUnicode_InternFromString(name);
if (nameobj == NULL)
return NULL;
- res = _PyImport_FindExtensionObjectEx(nameobj, nameobj, modules);
+ res = import_find_extension(tstate, nameobj, nameobj);
Py_DECREF(nameobj);
return res;
}
@@ -792,29 +844,29 @@
Because the former action is most common, THIS DOES NOT RETURN A
'NEW' REFERENCE! */
-PyObject *
-PyImport_AddModuleObject(PyObject *name)
+static PyObject *
+import_add_module(PyThreadState *tstate, PyObject *name)
{
- PyObject *modules = PyImport_GetModuleDict();
- return _PyImport_AddModuleObject(name, modules);
-}
+ PyObject *modules = tstate->interp->modules;
+ if (modules == NULL) {
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "no import module dictionary");
+ return NULL;
+ }
-PyObject *
-_PyImport_AddModuleObject(PyObject *name, PyObject *modules)
-{
PyObject *m;
if (PyDict_CheckExact(modules)) {
m = PyDict_GetItemWithError(modules, name);
}
else {
m = PyObject_GetItem(modules, name);
- // For backward-comaptibility we copy the behavior
+ // For backward-compatibility we copy the behavior
// of PyDict_GetItemWithError().
- if (PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
+ if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
}
}
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
return NULL;
}
if (m != NULL && PyModule_Check(m)) {
@@ -833,34 +885,49 @@
}
PyObject *
+PyImport_AddModuleObject(PyObject *name)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return import_add_module(tstate, name);
+}
+
+
+PyObject *
PyImport_AddModule(const char *name)
{
- PyObject *nameobj, *module;
- nameobj = PyUnicode_FromString(name);
- if (nameobj == NULL)
+ PyObject *nameobj = PyUnicode_FromString(name);
+ if (nameobj == NULL) {
return NULL;
- module = PyImport_AddModuleObject(nameobj);
+ }
+ PyObject *module = PyImport_AddModuleObject(nameobj);
Py_DECREF(nameobj);
return module;
}
-/* Remove name from sys.modules, if it's there. */
+/* Remove name from sys.modules, if it's there.
+ * Can be called with an exception raised.
+ * If fail to remove name a new exception will be chained with the old
+ * exception, otherwise the old exception is preserved.
+ */
static void
-remove_module(PyObject *name)
+remove_module(PyThreadState *tstate, PyObject *name)
{
PyObject *type, *value, *traceback;
- PyErr_Fetch(&type, &value, &traceback);
- PyObject *modules = PyImport_GetModuleDict();
- if (!PyMapping_HasKey(modules, name)) {
- goto out;
+ _PyErr_Fetch(tstate, &type, &value, &traceback);
+
+ PyObject *modules = tstate->interp->modules;
+ if (PyDict_CheckExact(modules)) {
+ PyObject *mod = _PyDict_Pop(modules, name, Py_None);
+ Py_XDECREF(mod);
}
- if (PyMapping_DelItem(modules, name) < 0) {
- Py_FatalError("import: deleting existing key in "
- "sys.modules failed");
+ else if (PyMapping_DelItem(modules, name) < 0) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
+ }
}
-out:
- PyErr_Restore(type, value, traceback);
+
+ _PyErr_ChainExceptions(type, value, traceback);
}
@@ -914,20 +981,18 @@
goto error;
}
else if (cpathobj != NULL) {
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
_Py_IDENTIFIER(_get_sourcefile);
if (interp == NULL) {
- Py_FatalError("PyImport_ExecCodeModuleWithPathnames: "
- "no interpreter!");
+ Py_FatalError("no current interpreter");
}
external= PyObject_GetAttrString(interp->importlib,
"_bootstrap_external");
if (external != NULL) {
- pathobj = _PyObject_CallMethodIdObjArgs(external,
- &PyId__get_sourcefile, cpathobj,
- NULL);
+ pathobj = _PyObject_CallMethodIdOneArg(
+ external, &PyId__get_sourcefile, cpathobj);
Py_DECREF(external);
}
if (pathobj == NULL)
@@ -945,23 +1010,23 @@
}
static PyObject *
-module_dict_for_exec(PyObject *name)
+module_dict_for_exec(PyThreadState *tstate, PyObject *name)
{
_Py_IDENTIFIER(__builtins__);
PyObject *m, *d = NULL;
- m = PyImport_AddModuleObject(name);
+ m = import_add_module(tstate, name);
if (m == NULL)
return NULL;
/* If the module is being reloaded, we get the old module back
and re-use its dict to exec the new code. */
d = PyModule_GetDict(m);
if (_PyDict_GetItemIdWithError(d, &PyId___builtins__) == NULL) {
- if (PyErr_Occurred() ||
+ if (_PyErr_Occurred(tstate) ||
_PyDict_SetItemId(d, &PyId___builtins__,
PyEval_GetBuiltins()) != 0)
{
- remove_module(name);
+ remove_module(tstate, name);
return NULL;
}
}
@@ -970,22 +1035,23 @@
}
static PyObject *
-exec_code_in_module(PyObject *name, PyObject *module_dict, PyObject *code_object)
+exec_code_in_module(PyThreadState *tstate, PyObject *name,
+ PyObject *module_dict, PyObject *code_object)
{
PyObject *v, *m;
v = PyEval_EvalCode(code_object, module_dict, module_dict);
if (v == NULL) {
- remove_module(name);
+ remove_module(tstate, name);
return NULL;
}
Py_DECREF(v);
- m = PyImport_GetModule(name);
- if (m == NULL && !PyErr_Occurred()) {
- PyErr_Format(PyExc_ImportError,
- "Loaded module %R not found in sys.modules",
- name);
+ m = import_get_module(tstate, name);
+ if (m == NULL && !_PyErr_Occurred(tstate)) {
+ _PyErr_Format(tstate, PyExc_ImportError,
+ "Loaded module %R not found in sys.modules",
+ name);
}
return m;
@@ -995,11 +1061,11 @@
PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
PyObject *cpathname)
{
+ PyThreadState *tstate = _PyThreadState_GET();
PyObject *d, *external, *res;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
_Py_IDENTIFIER(_fix_up_module);
- d = module_dict_for_exec(name);
+ d = module_dict_for_exec(tstate, name);
if (d == NULL) {
return NULL;
}
@@ -1007,7 +1073,8 @@
if (pathname == NULL) {
pathname = ((PyCodeObject *)co)->co_filename;
}
- external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
+ external = PyObject_GetAttrString(tstate->interp->importlib,
+ "_bootstrap_external");
if (external == NULL)
return NULL;
res = _PyObject_CallMethodIdObjArgs(external,
@@ -1016,7 +1083,7 @@
Py_DECREF(external);
if (res != NULL) {
Py_DECREF(res);
- res = exec_code_in_module(name, d, co);
+ res = exec_code_in_module(tstate, name, d, co);
}
return res;
}
@@ -1115,8 +1182,8 @@
Returns a borrowed reference. */
static PyObject *
-get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
- PyObject *p)
+get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache,
+ PyObject *path_hooks, PyObject *p)
{
PyObject *importer;
Py_ssize_t j, nhooks;
@@ -1130,7 +1197,7 @@
return NULL; /* Shouldn't happen */
importer = PyDict_GetItemWithError(path_importer_cache, p);
- if (importer != NULL || PyErr_Occurred())
+ if (importer != NULL || _PyErr_Occurred(tstate))
return importer;
/* set path_importer_cache[p] to None to avoid recursion */
@@ -1141,14 +1208,14 @@
PyObject *hook = PyList_GetItem(path_hooks, j);
if (hook == NULL)
return NULL;
- importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
+ importer = PyObject_CallOneArg(hook, p);
if (importer != NULL)
break;
- if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
+ if (!_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) {
return NULL;
}
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
if (importer == NULL) {
return Py_None;
@@ -1163,13 +1230,15 @@
}
PyObject *
-PyImport_GetImporter(PyObject *path) {
+PyImport_GetImporter(PyObject *path)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
path_importer_cache = PySys_GetObject("path_importer_cache");
path_hooks = PySys_GetObject("path_hooks");
if (path_importer_cache != NULL && path_hooks != NULL) {
- importer = get_path_importer(path_importer_cache,
+ importer = get_path_importer(tstate, path_importer_cache,
path_hooks, path);
}
Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
@@ -1189,6 +1258,7 @@
_imp_create_builtin(PyObject *module, PyObject *spec)
/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
struct _inittab *p;
PyObject *name;
const char *namestr;
@@ -1200,7 +1270,7 @@
}
mod = _PyImport_FindExtensionObject(name, name);
- if (mod || PyErr_Occurred()) {
+ if (mod || _PyErr_Occurred(tstate)) {
Py_DECREF(name);
Py_XINCREF(mod);
return mod;
@@ -1212,7 +1282,7 @@
return NULL;
}
- PyObject *modules = NULL;
+ PyObject *modules = tstate->interp->modules;
for (p = PyImport_Inittab; p->name != NULL; p++) {
PyModuleDef *def;
if (_PyUnicode_EqualToASCIIString(name, p->name)) {
@@ -1238,9 +1308,6 @@
return NULL;
}
def->m_base.m_init = p->initfunc;
- if (modules == NULL) {
- modules = PyImport_GetModuleDict();
- }
if (_PyImport_FixupExtensionObject(mod, name, name,
modules) < 0) {
Py_DECREF(name);
@@ -1329,6 +1396,7 @@
int
PyImport_ImportFrozenModuleObject(PyObject *name)
{
+ PyThreadState *tstate = _PyThreadState_GET();
const struct _frozen *p;
PyObject *co, *m, *d;
int ispackage;
@@ -1339,9 +1407,9 @@
if (p == NULL)
return 0;
if (p->code == NULL) {
- PyErr_Format(PyExc_ImportError,
- "Excluded frozen object named %R",
- name);
+ _PyErr_Format(tstate, PyExc_ImportError,
+ "Excluded frozen object named %R",
+ name);
return -1;
}
size = p->size;
@@ -1352,16 +1420,16 @@
if (co == NULL)
return -1;
if (!PyCode_Check(co)) {
- PyErr_Format(PyExc_TypeError,
- "frozen object %R is not a code object",
- name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "frozen object %R is not a code object",
+ name);
goto err_return;
}
if (ispackage) {
/* Set __path__ to the empty list */
PyObject *l;
int err;
- m = PyImport_AddModuleObject(name);
+ m = import_add_module(tstate, name);
if (m == NULL)
goto err_return;
d = PyModule_GetDict(m);
@@ -1374,16 +1442,18 @@
if (err != 0)
goto err_return;
}
- d = module_dict_for_exec(name);
+ d = module_dict_for_exec(tstate, name);
if (d == NULL) {
goto err_return;
}
- m = exec_code_in_module(name, d, co);
- if (m == NULL)
+ m = exec_code_in_module(tstate, name, d, co);
+ if (m == NULL) {
goto err_return;
+ }
Py_DECREF(co);
Py_DECREF(m);
return 1;
+
err_return:
Py_DECREF(co);
return -1;
@@ -1420,6 +1490,7 @@
return result;
}
+
/* Import a module without blocking
*
* At first it tries to fetch the module from sys.modules. If the module was
@@ -1439,7 +1510,7 @@
/* Remove importlib frames from the traceback,
* except in Verbose mode. */
static void
-remove_importlib_frames(PyInterpreterState *interp)
+remove_importlib_frames(PyThreadState *tstate)
{
const char *importlib_filename = "<frozen importlib._bootstrap>";
const char *external_filename = "<frozen importlib._bootstrap_external>";
@@ -1453,8 +1524,8 @@
from the traceback. We always trim chunks
which end with a call to "_call_with_frames_removed". */
- PyErr_Fetch(&exception, &value, &base_tb);
- if (!exception || interp->config.verbose) {
+ _PyErr_Fetch(tstate, &exception, &value, &base_tb);
+ if (!exception || _PyInterpreterState_GetConfig(tstate->interp)->verbose) {
goto done;
}
@@ -1468,7 +1539,7 @@
PyTracebackObject *traceback = (PyTracebackObject *)tb;
PyObject *next = (PyObject *) traceback->tb_next;
PyFrameObject *frame = traceback->tb_frame;
- PyCodeObject *code = frame->f_code;
+ PyCodeObject *code = PyFrame_GetCode(frame);
int now_in_importlib;
assert(PyTraceBack_Check(tb));
@@ -1490,19 +1561,18 @@
else {
prev_link = (PyObject **) &traceback->tb_next;
}
+ Py_DECREF(code);
tb = next;
}
done:
- PyErr_Restore(exception, value, base_tb);
+ _PyErr_Restore(tstate, exception, value, base_tb);
}
static PyObject *
-resolve_name(PyObject *name, PyObject *globals, int level)
+resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level)
{
- _Py_IDENTIFIER(__spec__);
_Py_IDENTIFIER(__package__);
- _Py_IDENTIFIER(__path__);
_Py_IDENTIFIER(__name__);
_Py_IDENTIFIER(parent);
PyObject *abs_name;
@@ -1513,29 +1583,30 @@
int level_up;
if (globals == NULL) {
- PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
+ _PyErr_SetString(tstate, PyExc_KeyError, "'__name__' not in globals");
goto error;
}
if (!PyDict_Check(globals)) {
- PyErr_SetString(PyExc_TypeError, "globals must be a dict");
+ _PyErr_SetString(tstate, PyExc_TypeError, "globals must be a dict");
goto error;
}
package = _PyDict_GetItemIdWithError(globals, &PyId___package__);
if (package == Py_None) {
package = NULL;
}
- else if (package == NULL && PyErr_Occurred()) {
+ else if (package == NULL && _PyErr_Occurred(tstate)) {
goto error;
}
spec = _PyDict_GetItemIdWithError(globals, &PyId___spec__);
- if (spec == NULL && PyErr_Occurred()) {
+ if (spec == NULL && _PyErr_Occurred(tstate)) {
goto error;
}
if (package != NULL) {
Py_INCREF(package);
if (!PyUnicode_Check(package)) {
- PyErr_SetString(PyExc_TypeError, "package must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "package must be a string");
goto error;
}
else if (spec != NULL && spec != Py_None) {
@@ -1564,8 +1635,8 @@
goto error;
}
else if (!PyUnicode_Check(package)) {
- PyErr_SetString(PyExc_TypeError,
- "__spec__.parent must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "__spec__.parent must be a string");
goto error;
}
}
@@ -1578,22 +1649,24 @@
package = _PyDict_GetItemIdWithError(globals, &PyId___name__);
if (package == NULL) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_SetString(tstate, PyExc_KeyError,
+ "'__name__' not in globals");
}
goto error;
}
Py_INCREF(package);
if (!PyUnicode_Check(package)) {
- PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "__name__ must be a string");
goto error;
}
if (_PyDict_GetItemIdWithError(globals, &PyId___path__) == NULL) {
Py_ssize_t dot;
- if (PyErr_Occurred() || PyUnicode_READY(package) < 0) {
+ if (_PyErr_Occurred(tstate) || PyUnicode_READY(package) < 0) {
goto error;
}
@@ -1624,9 +1697,9 @@
goto error;
}
else if (last_dot == -1) {
- PyErr_SetString(PyExc_ValueError,
- "attempted relative import beyond top-level "
- "package");
+ _PyErr_SetString(tstate, PyExc_ImportError,
+ "attempted relative import beyond top-level "
+ "package");
goto error;
}
}
@@ -1642,7 +1715,7 @@
return abs_name;
no_parent_error:
- PyErr_SetString(PyExc_ImportError,
+ _PyErr_SetString(tstate, PyExc_ImportError,
"attempted relative import "
"with no known parent package");
@@ -1652,12 +1725,12 @@
}
static PyObject *
-import_find_and_load(PyObject *abs_name)
+import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
{
_Py_IDENTIFIER(_find_and_load);
PyObject *mod = NULL;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- int import_time = interp->config.import_time;
+ PyInterpreterState *interp = tstate->interp;
+ int import_time = _PyInterpreterState_GetConfig(interp)->import_time;
static int import_level;
static _PyTime_t accumulated;
@@ -1666,10 +1739,10 @@
PyObject *sys_path = PySys_GetObject("path");
PyObject *sys_meta_path = PySys_GetObject("meta_path");
PyObject *sys_path_hooks = PySys_GetObject("path_hooks");
- if (PySys_Audit("import", "OOOOO",
- abs_name, Py_None, sys_path ? sys_path : Py_None,
- sys_meta_path ? sys_meta_path : Py_None,
- sys_path_hooks ? sys_path_hooks : Py_None) < 0) {
+ if (_PySys_Audit(tstate, "import", "OOOOO",
+ abs_name, Py_None, sys_path ? sys_path : Py_None,
+ sys_meta_path ? sys_meta_path : Py_None,
+ sys_path_hooks ? sys_path_hooks : Py_None) < 0) {
return NULL;
}
@@ -1719,20 +1792,38 @@
}
PyObject *
+PyImport_GetModule(PyObject *name)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *mod;
+
+ mod = import_get_module(tstate, name);
+ if (mod != NULL && mod != Py_None) {
+ if (import_ensure_initialized(tstate, mod, name) < 0) {
+ Py_DECREF(mod);
+ remove_importlib_frames(tstate);
+ return NULL;
+ }
+ }
+ return mod;
+}
+
+PyObject *
PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
PyObject *locals, PyObject *fromlist,
int level)
{
+ PyThreadState *tstate = _PyThreadState_GET();
_Py_IDENTIFIER(_handle_fromlist);
PyObject *abs_name = NULL;
PyObject *final_mod = NULL;
PyObject *mod = NULL;
PyObject *package = NULL;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = tstate->interp;
int has_from;
if (name == NULL) {
- PyErr_SetString(PyExc_ValueError, "Empty module name");
+ _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
goto error;
}
@@ -1740,62 +1831,45 @@
for added performance. */
if (!PyUnicode_Check(name)) {
- PyErr_SetString(PyExc_TypeError, "module name must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "module name must be a string");
goto error;
}
if (PyUnicode_READY(name) < 0) {
goto error;
}
if (level < 0) {
- PyErr_SetString(PyExc_ValueError, "level must be >= 0");
+ _PyErr_SetString(tstate, PyExc_ValueError, "level must be >= 0");
goto error;
}
if (level > 0) {
- abs_name = resolve_name(name, globals, level);
+ abs_name = resolve_name(tstate, 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");
+ _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
goto error;
}
abs_name = name;
Py_INCREF(abs_name);
}
- mod = PyImport_GetModule(abs_name);
- if (mod == NULL && PyErr_Occurred()) {
+ mod = import_get_module(tstate, abs_name);
+ if (mod == NULL && _PyErr_Occurred(tstate)) {
goto error;
}
if (mod != NULL && mod != Py_None) {
- _Py_IDENTIFIER(__spec__);
- _Py_IDENTIFIER(_lock_unlock_module);
- PyObject *spec;
-
- /* Optimization: only call _bootstrap._lock_unlock_module() if
- __spec__._initializing is true.
- NOTE: because of this, initializing must be set *before*
- stuffing the new module in sys.modules.
- */
- spec = _PyObject_GetAttrId(mod, &PyId___spec__);
- if (_PyModuleSpec_IsInitializing(spec)) {
- PyObject *value = _PyObject_CallMethodIdObjArgs(interp->importlib,
- &PyId__lock_unlock_module, abs_name,
- NULL);
- if (value == NULL) {
- Py_DECREF(spec);
- goto error;
- }
- Py_DECREF(value);
+ if (import_ensure_initialized(tstate, mod, name) < 0) {
+ goto error;
}
- Py_XDECREF(spec);
}
else {
Py_XDECREF(mod);
- mod = import_find_and_load(abs_name);
+ mod = import_find_and_load(tstate, abs_name);
if (mod == NULL) {
goto error;
}
@@ -1842,13 +1916,13 @@
goto error;
}
- final_mod = PyImport_GetModule(to_return);
+ final_mod = import_get_module(tstate, to_return);
Py_DECREF(to_return);
if (final_mod == NULL) {
- if (!PyErr_Occurred()) {
- PyErr_Format(PyExc_KeyError,
- "%R not in sys.modules as expected",
- to_return);
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_Format(tstate, PyExc_KeyError,
+ "%R not in sys.modules as expected",
+ to_return);
}
goto error;
}
@@ -1860,7 +1934,6 @@
}
}
else {
- _Py_IDENTIFIER(__path__);
PyObject *path;
if (_PyObject_LookupAttrId(mod, &PyId___path__, &path) < 0) {
goto error;
@@ -1882,7 +1955,7 @@
Py_XDECREF(mod);
Py_XDECREF(package);
if (final_mod == NULL) {
- remove_importlib_frames(interp);
+ remove_importlib_frames(tstate);
}
return final_mod;
}
@@ -1923,7 +1996,7 @@
}
}
- reloaded_module = _PyObject_CallMethodIdObjArgs(importlib, &PyId_reload, m, NULL);
+ reloaded_module = _PyObject_CallMethodIdOneArg(importlib, &PyId_reload, m);
Py_DECREF(importlib);
return reloaded_module;
}
@@ -1941,6 +2014,7 @@
PyObject *
PyImport_Import(PyObject *module_name)
{
+ PyThreadState *tstate = _PyThreadState_GET();
static PyObject *silly_list = NULL;
static PyObject *builtins_str = NULL;
static PyObject *import_str = NULL;
@@ -1984,8 +2058,9 @@
/* Get the __import__ function from the builtins */
if (PyDict_Check(builtins)) {
import = PyObject_GetItem(builtins, import_str);
- if (import == NULL)
- PyErr_SetObject(PyExc_KeyError, import_str);
+ if (import == NULL) {
+ _PyErr_SetObject(tstate, PyExc_KeyError, import_str);
+ }
}
else
import = PyObject_GetAttr(builtins, import_str);
@@ -2001,9 +2076,9 @@
goto err;
Py_DECREF(r);
- r = PyImport_GetModule(module_name);
- if (r == NULL && !PyErr_Occurred()) {
- PyErr_SetObject(PyExc_KeyError, module_name);
+ r = import_get_module(tstate, module_name);
+ if (r == NULL && !_PyErr_Occurred(tstate)) {
+ _PyErr_SetObject(tstate, PyExc_KeyError, module_name);
}
err:
@@ -2064,6 +2139,7 @@
_imp_init_frozen_impl(PyObject *module, PyObject *name)
/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
int ret;
PyObject *m;
@@ -2073,7 +2149,7 @@
if (ret == 0) {
Py_RETURN_NONE;
}
- m = PyImport_AddModuleObject(name);
+ m = import_add_module(tstate, name);
Py_XINCREF(m);
return m;
}
@@ -2340,7 +2416,7 @@
goto failure;
}
- const wchar_t *mode = _PyInterpreterState_Get()->config.check_hash_pycs_mode;
+ const wchar_t *mode = _Py_GetConfig()->check_hash_pycs_mode;
PyObject *pyc_mode = PyUnicode_FromWideChar(mode, -1);
if (pyc_mode == NULL) {
goto failure;
diff --git a/Python/importdl.c b/Python/importdl.c
index 1d0d32a..fbeb9fb 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -181,7 +181,7 @@
m = NULL;
goto error;
}
- if (Py_TYPE(m) == NULL) {
+ if (Py_IS_TYPE(m, NULL)) {
/* This can happen when a PyModuleDef is returned without calling
* PyModuleDef_Init on it
*/
diff --git a/Python/importlib.h b/Python/importlib.h
index 6719574..1fb877a 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -118,894 +118,903 @@
58,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,0,0,0,0,4,0,0,0,3,0,0,0,
- 67,0,0,0,115,60,0,0,0,116,0,160,1,161,0,125,
- 1,124,0,106,2,125,2,116,3,160,4,124,2,161,1,125,
- 3,124,3,100,0,107,8,114,36,100,1,83,0,124,3,106,
- 2,125,2,124,2,124,1,107,2,114,14,100,2,83,0,113,
- 14,100,0,83,0,41,3,78,70,84,41,5,114,23,0,0,
- 0,218,9,103,101,116,95,105,100,101,110,116,114,26,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,30,0,0,0,90,2,109,101,218,
- 3,116,105,100,114,24,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,66,0,0,0,115,16,0,0,0,0,
- 2,8,1,6,2,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,0,0,0,0,2,0,0,0,9,0,0,0,67,0,
- 0,0,115,178,0,0,0,116,0,160,1,161,0,125,1,124,
- 0,116,2,124,1,60,0,122,148,124,0,106,3,143,110,1,
- 0,124,0,106,4,100,1,107,2,115,46,124,0,106,5,124,
- 1,107,2,114,84,124,1,124,0,95,5,124,0,4,0,106,
- 4,100,2,55,0,2,0,95,4,87,0,53,0,81,0,82,
- 0,163,0,87,0,162,86,100,3,83,0,124,0,160,6,161,
- 0,114,104,116,7,100,4,124,0,22,0,131,1,130,1,124,
- 0,106,8,160,9,100,5,161,1,114,130,124,0,4,0,106,
- 10,100,2,55,0,2,0,95,10,87,0,53,0,81,0,82,
- 0,88,0,124,0,106,8,160,9,161,0,1,0,124,0,106,
- 8,160,11,161,0,1,0,113,18,87,0,53,0,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,22,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,23,
- 0,0,0,114,32,0,0,0,114,33,0,0,0,114,24,0,
- 0,0,114,27,0,0,0,114,26,0,0,0,114,36,0,0,
- 0,114,19,0,0,0,114,25,0,0,0,218,7,97,99,113,
- 117,105,114,101,114,28,0,0,0,218,7,114,101,108,101,97,
- 115,101,169,2,114,30,0,0,0,114,35,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,38,0,
- 0,0,78,0,0,0,115,30,0,0,0,0,6,8,1,8,
- 1,2,2,8,1,20,1,6,1,14,1,18,1,8,1,12,
- 1,12,1,24,2,10,1,16,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,0,0,0,0,2,0,0,0,9,
- 0,0,0,67,0,0,0,115,122,0,0,0,116,0,160,1,
- 161,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,160,9,161,0,1,0,87,0,53,0,81,0,82,0,
- 88,0,100,0,83,0,41,4,78,250,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,22,0,0,0,114,
- 37,0,0,0,41,10,114,23,0,0,0,114,32,0,0,0,
- 114,24,0,0,0,114,26,0,0,0,218,12,82,117,110,116,
- 105,109,101,69,114,114,111,114,114,27,0,0,0,218,14,65,
- 115,115,101,114,116,105,111,110,69,114,114,111,114,114,28,0,
- 0,0,114,25,0,0,0,114,39,0,0,0,114,40,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,39,0,0,0,103,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,0,0,0,0,1,0,0,0,5,0,0,0,67,0,
- 0,0,115,18,0,0,0,100,1,160,0,124,0,106,1,116,
- 2,124,0,131,1,161,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,169,3,218,6,102,111,114,109,97,116,114,
- 17,0,0,0,218,2,105,100,169,1,114,30,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,116,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,31,0,0,0,114,36,0,0,0,114,38,0,0,0,114,
- 39,0,0,0,114,48,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,20,0,
- 0,0,52,0,0,0,115,12,0,0,0,8,1,4,5,8,
- 8,8,12,8,25,8,13,114,20,0,0,0,99,0,0,0,
- 0,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,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,114,21,0,0,0,41,2,114,17,0,0,0,
- 114,27,0,0,0,114,29,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,31,0,0,0,124,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,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,37,0,0,0,84,41,
- 1,114,27,0,0,0,114,47,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,114,38,0,0,0,128,
- 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,
+ 0,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,160,1,161,0,125,
+ 1,124,0,106,2,125,2,116,3,131,0,125,3,116,4,160,
+ 5,124,2,161,1,125,4,124,4,100,0,117,0,114,42,100,
+ 1,83,0,124,4,106,2,125,2,124,2,124,1,107,2,114,
+ 60,100,2,83,0,124,2,124,3,118,0,114,72,100,1,83,
+ 0,124,3,160,6,124,2,161,1,1,0,113,20,100,0,83,
+ 0,41,3,78,70,84,41,7,114,23,0,0,0,218,9,103,
+ 101,116,95,105,100,101,110,116,114,26,0,0,0,218,3,115,
+ 101,116,218,12,95,98,108,111,99,107,105,110,103,95,111,110,
+ 218,3,103,101,116,218,3,97,100,100,41,5,114,30,0,0,
+ 0,90,2,109,101,218,3,116,105,100,90,4,115,101,101,110,
+ 114,24,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,66,0,0,0,115,24,0,0,0,0,2,8,1,6,
+ 1,6,2,10,1,8,1,4,1,6,1,8,1,4,1,8,
+ 6,4,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,0,0,0,0,2,0,0,0,8,0,
+ 0,0,67,0,0,0,115,210,0,0,0,116,0,160,1,161,
+ 0,125,1,124,0,116,2,124,1,60,0,122,180,124,0,106,
+ 3,143,126,1,0,124,0,106,4,100,1,107,2,115,46,124,
+ 0,106,5,124,1,107,2,114,90,124,1,124,0,95,5,124,
+ 0,4,0,106,4,100,2,55,0,2,0,95,4,87,0,100,
+ 3,4,0,4,0,131,3,1,0,87,0,116,2,124,1,61,
+ 0,100,4,83,0,124,0,160,6,161,0,114,110,116,7,100,
+ 5,124,0,22,0,131,1,130,1,124,0,106,8,160,9,100,
+ 6,161,1,114,136,124,0,4,0,106,10,100,2,55,0,2,
+ 0,95,10,87,0,100,3,4,0,4,0,131,3,1,0,110,
+ 16,49,0,115,156,48,0,1,0,1,0,1,0,89,0,1,
+ 0,124,0,106,8,160,9,161,0,1,0,124,0,106,8,160,
+ 11,161,0,1,0,113,18,87,0,116,2,124,1,61,0,110,
+ 8,116,2,124,1,61,0,48,0,100,3,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,22,0,0,0,233,
+ 1,0,0,0,78,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,
+ 41,12,114,23,0,0,0,114,32,0,0,0,114,34,0,0,
+ 0,114,24,0,0,0,114,27,0,0,0,114,26,0,0,0,
+ 114,38,0,0,0,114,19,0,0,0,114,25,0,0,0,218,
+ 7,97,99,113,117,105,114,101,114,28,0,0,0,218,7,114,
+ 101,108,101,97,115,101,169,2,114,30,0,0,0,114,37,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,114,40,0,0,0,87,0,0,0,115,34,0,0,0,0,
+ 6,8,1,8,1,2,2,8,1,20,1,6,1,14,1,14,
+ 9,6,247,4,1,8,1,12,1,12,1,44,2,10,1,14,
+ 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,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,22,0,0,0,
- 114,41,0,0,0,114,37,0,0,0,41,2,114,27,0,0,
- 0,114,42,0,0,0,114,47,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,114,39,0,0,0,132,
- 0,0,0,115,6,0,0,0,0,1,10,1,8,1,122,24,
+ 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
+ 142,0,0,0,116,0,160,1,161,0,125,1,124,0,106,2,
+ 143,108,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,
+ 74,0,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,6,114,108,124,0,4,0,106,6,100,3,
+ 56,0,2,0,95,6,124,0,106,7,160,8,161,0,1,0,
+ 87,0,100,0,4,0,4,0,131,3,1,0,110,16,49,0,
+ 115,128,48,0,1,0,1,0,1,0,89,0,1,0,100,0,
+ 83,0,41,4,78,250,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,22,0,0,0,114,39,0,0,0,
+ 41,9,114,23,0,0,0,114,32,0,0,0,114,24,0,0,
+ 0,114,26,0,0,0,218,12,82,117,110,116,105,109,101,69,
+ 114,114,111,114,114,27,0,0,0,114,28,0,0,0,114,25,
+ 0,0,0,114,41,0,0,0,114,42,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,41,0,0,
+ 0,112,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,0,0,
+ 0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,
+ 0,0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,
+ 1,161,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,169,3,218,6,102,111,114,109,97,116,114,17,0,0,0,
+ 218,2,105,100,169,1,114,30,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,125,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,31,0,0,
+ 0,114,38,0,0,0,114,40,0,0,0,114,41,0,0,0,
+ 114,49,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,114,20,0,0,0,52,0,
+ 0,0,115,12,0,0,0,8,1,4,5,8,8,8,21,8,
+ 25,8,13,114,20,0,0,0,99,0,0,0,0,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,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,
+ 114,21,0,0,0,41,2,114,17,0,0,0,114,27,0,0,
+ 0,114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,31,0,0,0,133,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,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,39,0,0,0,84,41,1,114,27,0,
+ 0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,0,
+ 0,114,11,0,0,0,114,40,0,0,0,137,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,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,22,0,0,0,114,43,0,0,
+ 0,114,39,0,0,0,41,2,114,27,0,0,0,114,44,0,
+ 0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,0,
+ 0,114,11,0,0,0,114,41,0,0,0,141,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,0,0,0,
+ 0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,0,
+ 0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,1,
+ 161,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,114,45,0,0,0,114,48,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,49,
+ 0,0,0,146,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,114,101,108,101,97,115,101,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,1,0,0,0,5,0,0,0,67,0,0,
- 0,115,18,0,0,0,100,1,160,0,124,0,106,1,116,2,
- 124,0,131,1,161,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,114,44,0,0,0,114,47,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,48,0,0,0,137,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,31,0,0,0,114,38,0,0,0,114,39,
+ 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,31,0,0,0,114,40,0,0,0,114,41,0,0,0,114,
+ 49,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,50,0,0,0,129,0,0,
+ 0,115,10,0,0,0,8,1,4,3,8,4,8,4,8,5,
+ 114,50,0,0,0,99,0,0,0,0,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,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,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,0,124,0,95,1,100,0,83,0,114,13,0,0,0,
+ 41,2,218,5,95,110,97,109,101,218,5,95,108,111,99,107,
+ 114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 11,0,0,0,114,31,0,0,0,152,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,0,0,0,0,
+ 1,0,0,0,2,0,0,0,67,0,0,0,115,26,0,0,
+ 0,116,0,124,0,106,1,131,1,124,0,95,2,124,0,106,
+ 2,160,3,161,0,1,0,100,0,83,0,114,13,0,0,0,
+ 41,4,218,16,95,103,101,116,95,109,111,100,117,108,101,95,
+ 108,111,99,107,114,52,0,0,0,114,53,0,0,0,114,40,
0,0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,
- 0,0,114,10,0,0,0,114,11,0,0,0,114,49,0,0,
- 0,120,0,0,0,115,10,0,0,0,8,1,4,3,8,4,
- 8,4,8,5,114,49,0,0,0,99,0,0,0,0,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,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,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,0,124,0,95,1,100,0,83,0,114,
- 13,0,0,0,41,2,218,5,95,110,97,109,101,218,5,95,
- 108,111,99,107,114,29,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,31,0,0,0,143,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,
- 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,
- 115,26,0,0,0,116,0,124,0,106,1,131,1,124,0,95,
- 2,124,0,106,2,160,3,161,0,1,0,100,0,83,0,114,
- 13,0,0,0,41,4,218,16,95,103,101,116,95,109,111,100,
- 117,108,101,95,108,111,99,107,114,51,0,0,0,114,52,0,
- 0,0,114,38,0,0,0,114,47,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,147,0,0,0,115,4,0,0,0,0,
- 1,12,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,0,0,0,0,3,0,
- 0,0,2,0,0,0,79,0,0,0,115,14,0,0,0,124,
- 0,106,0,160,1,161,0,1,0,100,0,83,0,114,13,0,
- 0,0,41,2,114,52,0,0,0,114,39,0,0,0,41,3,
- 114,30,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,151,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,31,0,0,0,114,54,0,0,0,
- 114,56,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,50,0,0,0,141,0,
- 0,0,115,6,0,0,0,8,2,8,4,8,4,114,50,0,
- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,
- 0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0,
- 116,0,160,1,161,0,1,0,122,106,122,14,116,3,124,0,
- 25,0,131,0,125,1,87,0,110,24,4,0,116,4,107,10,
- 114,48,1,0,1,0,1,0,100,1,125,1,89,0,110,2,
- 88,0,124,1,100,1,107,8,114,112,116,5,100,1,107,8,
- 114,76,116,6,124,0,131,1,125,1,110,8,116,7,124,0,
- 131,1,125,1,124,0,102,1,100,2,100,3,132,1,125,2,
- 116,8,160,9,124,1,124,2,161,2,116,3,124,0,60,0,
- 87,0,53,0,116,0,160,2,161,0,1,0,88,0,124,1,
- 83,0,41,4,122,139,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,65,99,113,117,105,114,101,47,114,101,108,101,97,115,
- 101,32,105,110,116,101,114,110,97,108,108,121,32,116,104,101,
- 32,103,108,111,98,97,108,32,105,109,112,111,114,116,32,108,
- 111,99,107,32,116,111,32,112,114,111,116,101,99,116,10,32,
- 32,32,32,95,109,111,100,117,108,101,95,108,111,99,107,115,
- 46,78,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,8,0,0,0,83,0,0,0,115,48,0,0,0,
- 116,0,160,1,161,0,1,0,122,24,116,3,160,4,124,1,
- 161,1,124,0,107,8,114,30,116,3,124,1,61,0,87,0,
- 53,0,116,0,160,2,161,0,1,0,88,0,100,0,83,0,
- 114,13,0,0,0,41,5,218,4,95,105,109,112,218,12,97,
- 99,113,117,105,114,101,95,108,111,99,107,218,12,114,101,108,
- 101,97,115,101,95,108,111,99,107,218,13,95,109,111,100,117,
- 108,101,95,108,111,99,107,115,114,34,0,0,0,41,2,218,
- 3,114,101,102,114,17,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,218,2,99,98,176,0,0,0,
- 115,10,0,0,0,0,1,8,1,2,4,14,1,10,2,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,10,114,
- 57,0,0,0,114,58,0,0,0,114,59,0,0,0,114,60,
- 0,0,0,218,8,75,101,121,69,114,114,111,114,114,23,0,
- 0,0,114,49,0,0,0,114,20,0,0,0,218,8,95,119,
- 101,97,107,114,101,102,114,61,0,0,0,41,3,114,17,0,
- 0,0,114,24,0,0,0,114,62,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,53,0,0,0,
- 157,0,0,0,115,28,0,0,0,0,6,8,1,2,1,2,
- 1,14,1,14,1,10,2,8,1,8,1,10,2,8,2,12,
- 11,20,2,10,2,114,53,0,0,0,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,
- 0,0,0,115,54,0,0,0,116,0,124,0,131,1,125,1,
- 122,12,124,1,160,1,161,0,1,0,87,0,110,20,4,0,
- 116,2,107,10,114,40,1,0,1,0,1,0,89,0,110,10,
- 88,0,124,1,160,3,161,0,1,0,100,1,83,0,41,2,
- 122,189,65,99,113,117,105,114,101,115,32,116,104,101,110,32,
- 114,101,108,101,97,115,101,115,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,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,32,32,32,32,78,
- 41,4,114,53,0,0,0,114,38,0,0,0,114,19,0,0,
- 0,114,39,0,0,0,41,2,114,17,0,0,0,114,24,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,194,0,0,0,115,12,0,0,0,0,
- 6,8,1,2,1,12,1,14,3,6,2,114,65,0,0,0,
- 99,1,0,0,0,0,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,55,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,211,0,0,0,
- 115,2,0,0,0,0,8,114,67,0,0,0,114,37,0,0,
- 0,41,1,218,9,118,101,114,98,111,115,105,116,121,99,1,
- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,4,
- 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,160,3,100,1,161,1,
- 115,30,100,2,124,0,23,0,125,0,116,4,124,0,106,5,
- 124,2,142,0,116,0,106,6,100,3,141,2,1,0,100,4,
- 83,0,41,5,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,41,2,250,1,35,122,7,105,109,112,111,114,116,
- 32,122,2,35,32,41,1,90,4,102,105,108,101,78,41,7,
- 114,15,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,45,0,0,0,218,6,115,
- 116,100,101,114,114,41,3,218,7,109,101,115,115,97,103,101,
- 114,68,0,0,0,114,55,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,222,0,0,0,115,
- 8,0,0,0,0,2,12,1,10,1,8,1,114,76,0,0,
- 0,99,1,0,0,0,0,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,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,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,160,3,124,1,161,1,
- 124,1,100,2,141,2,130,1,136,0,124,0,124,1,131,2,
- 83,0,41,3,78,250,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,16,0,0,0,41,4,114,15,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,45,0,0,0,169,2,114,30,0,0,0,218,
- 8,102,117,108,108,110,97,109,101,169,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,232,0,0,0,115,10,0,0,0,0,1,
- 10,1,10,1,2,255,6,2,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,169,1,
- 114,12,0,0,0,41,2,114,83,0,0,0,114,84,0,0,
- 0,114,10,0,0,0,114,82,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,230,0,0,0,115,6,0,0,0,0,2,12,5,
- 10,1,114,86,0,0,0,99,1,0,0,0,0,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,0,0,0,0,2,
- 0,0,0,4,0,0,0,19,0,0,0,115,38,0,0,0,
- 116,0,160,1,124,1,161,1,115,28,116,2,100,1,160,3,
- 124,1,161,1,124,1,100,2,141,2,130,1,136,0,124,0,
- 124,1,131,2,83,0,169,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,16,0,0,0,41,4,114,57,0,
- 0,0,218,9,105,115,95,102,114,111,122,101,110,114,79,0,
- 0,0,114,45,0,0,0,114,80,0,0,0,114,82,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,243,0,0,0,115,10,0,0,0,0,1,
- 10,1,10,1,2,255,6,2,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,114,85,0,0,
- 0,41,2,114,83,0,0,0,114,89,0,0,0,114,10,0,
- 0,0,114,82,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,241,0,
- 0,0,115,6,0,0,0,0,2,12,5,10,1,114,90,0,
- 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,
- 0,0,0,3,0,0,0,67,0,0,0,115,62,0,0,0,
- 116,0,124,1,124,0,131,2,125,2,124,1,116,1,106,2,
- 107,6,114,50,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,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,15,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,30,0,0,0,114,81,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,253,
- 0,0,0,115,12,0,0,0,0,6,10,1,10,1,10,1,
- 10,1,10,2,114,97,0,0,0,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,5,0,0,0,8,0,0,0,67,0,
- 0,0,115,226,0,0,0,116,0,124,0,100,1,100,0,131,
- 3,125,1,116,1,124,1,100,2,131,2,114,56,122,12,124,
- 1,160,2,124,0,161,1,87,0,83,0,4,0,116,3,107,
- 10,114,54,1,0,1,0,1,0,89,0,110,2,88,0,122,
- 10,124,0,106,4,125,2,87,0,110,20,4,0,116,5,107,
- 10,114,86,1,0,1,0,1,0,89,0,110,18,88,0,124,
- 2,100,0,107,9,114,104,116,6,124,2,131,1,83,0,122,
- 10,124,0,106,7,125,3,87,0,110,24,4,0,116,5,107,
- 10,114,138,1,0,1,0,1,0,100,3,125,3,89,0,110,
- 2,88,0,122,10,124,0,106,8,125,4,87,0,110,58,4,
- 0,116,5,107,10,114,208,1,0,1,0,1,0,124,1,100,
- 0,107,8,114,188,100,4,160,9,124,3,161,1,6,0,89,
- 0,83,0,100,5,160,9,124,3,124,1,161,2,6,0,89,
- 0,83,0,89,0,110,14,88,0,100,6,160,9,124,3,124,
- 4,161,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,250,13,60,109,111,100,117,108,
- 101,32,123,33,114,125,62,250,20,60,109,111,100,117,108,101,
- 32,123,33,114,125,32,40,123,33,114,125,41,62,250,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,99,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,45,0,0,0,41,5,114,96,0,0,0,218,
- 6,108,111,97,100,101,114,114,95,0,0,0,114,17,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,13,1,0,0,115,46,0,0,
- 0,0,2,12,1,10,4,2,1,12,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,14,2,22,2,114,
- 111,0,0,0,99,0,0,0,0,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,0,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,
- 169,2,78,70,41,7,114,17,0,0,0,114,109,0,0,0,
- 114,113,0,0,0,114,114,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,30,0,0,0,114,17,0,0,0,114,109,0,0,0,114,
- 113,0,0,0,114,114,0,0,0,114,115,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,31,0,
- 0,0,86,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,0,0,0,0,2,0,0,0,6,
- 0,0,0,67,0,0,0,115,102,0,0,0,100,1,160,0,
- 124,0,106,1,161,1,100,2,160,0,124,0,106,2,161,1,
- 103,2,125,1,124,0,106,3,100,0,107,9,114,52,124,1,
- 160,4,100,3,160,0,124,0,106,3,161,1,161,1,1,0,
- 124,0,106,5,100,0,107,9,114,80,124,1,160,4,100,4,
- 160,0,124,0,106,5,161,1,161,1,1,0,100,5,160,0,
- 124,0,106,6,106,7,100,6,160,8,124,1,161,1,161,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,45,0,0,0,114,17,0,0,
- 0,114,109,0,0,0,114,113,0,0,0,218,6,97,112,112,
- 101,110,100,114,117,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,30,0,0,0,114,55,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,48,0,0,0,98,1,
- 0,0,115,20,0,0,0,0,1,10,1,10,255,4,2,10,
- 1,18,1,10,1,8,1,4,255,6,2,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,0,0,0,0,3,0,0,
- 0,8,0,0,0,67,0,0,0,115,106,0,0,0,124,0,
- 106,0,125,2,122,72,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,87,0,83,0,4,0,
- 116,6,107,10,114,100,1,0,1,0,1,0,89,0,100,1,
- 83,0,88,0,100,0,83,0,114,116,0,0,0,41,7,114,
- 117,0,0,0,114,17,0,0,0,114,109,0,0,0,114,113,
- 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,106,0,0,0,41,3,
- 114,30,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,108,1,0,0,115,30,0,
- 0,0,0,1,6,1,2,1,12,1,10,255,2,2,10,254,
- 2,3,8,253,2,4,10,252,2,5,10,251,4,6,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,0,0,0,0,
- 1,0,0,0,3,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,160,5,124,0,106,1,161,
- 1,124,0,95,0,124,0,106,0,83,0,114,13,0,0,0,
- 41,6,114,119,0,0,0,114,113,0,0,0,114,118,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,114,47,0,0,0,114,10,0,
- 0,0,114,10,0,0,0,114,11,0,0,0,114,123,0,0,
- 0,120,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,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,114,13,0,0,0,41,1,114,119,0,0,0,41,2,114,
- 30,0,0,0,114,123,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,123,0,0,0,129,1,0,
- 0,115,2,0,0,0,0,2,99,1,0,0,0,0,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,8,114,26,
- 124,0,106,1,160,2,100,2,161,1,100,3,25,0,83,0,
- 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,22,0,0,0,41,3,114,117,0,0,0,114,17,
- 0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,114,
- 47,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,133,1,0,0,115,
- 6,0,0,0,0,3,10,1,16,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,0,0,0,0,1,0,0,0,1,0,
- 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
- 0,114,13,0,0,0,41,1,114,118,0,0,0,114,47,0,
- 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,114,124,0,0,0,141,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,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,114,13,0,0,0,41,2,218,4,98,
- 111,111,108,114,118,0,0,0,41,2,114,30,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,124,0,0,0,145,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,31,0,0,0,
- 114,48,0,0,0,114,125,0,0,0,218,8,112,114,111,112,
- 101,114,116,121,114,123,0,0,0,218,6,115,101,116,116,101,
- 114,114,130,0,0,0,114,124,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 112,0,0,0,49,1,0,0,115,32,0,0,0,8,1,4,
- 36,4,1,2,255,12,12,8,10,8,12,2,1,10,8,4,
- 1,10,3,2,1,10,7,2,1,10,3,4,1,114,112,0,
- 0,0,169,2,114,113,0,0,0,114,115,0,0,0,99,2,
- 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,8,
- 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,122,14,124,1,160,4,124,0,
- 161,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,109,0,0,0,41,2,114,109,0,0,0,114,117,0,0,
- 0,114,115,0,0,0,70,114,135,0,0,0,41,7,114,4,
- 0,0,0,114,126,0,0,0,114,127,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,115,0,0,0,114,79,0,0,0,
- 114,112,0,0,0,41,6,114,17,0,0,0,114,109,0,0,
- 0,114,113,0,0,0,114,115,0,0,0,114,136,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,91,0,0,0,150,1,0,0,
- 115,36,0,0,0,0,2,10,1,8,1,4,1,6,2,8,
- 1,12,1,12,1,6,1,2,255,6,3,8,1,10,1,2,
- 1,14,1,14,1,12,3,4,2,114,91,0,0,0,99,3,
- 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,
- 0,0,0,67,0,0,0,115,56,1,0,0,122,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,122,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,122,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,122,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,122,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,122,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,169,1,114,113,0,0,0,70,84,
- 41,13,114,105,0,0,0,114,106,0,0,0,114,1,0,0,
- 0,114,98,0,0,0,114,108,0,0,0,218,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,112,0,0,0,114,118,0,0,0,114,123,0,0,0,114,
- 117,0,0,0,41,8,114,96,0,0,0,114,109,0,0,0,
- 114,113,0,0,0,114,95,0,0,0,114,17,0,0,0,90,
- 8,108,111,99,97,116,105,111,110,114,123,0,0,0,114,117,
+ 0,0,114,11,0,0,0,218,9,95,95,101,110,116,101,114,
+ 95,95,156,0,0,0,115,4,0,0,0,0,1,12,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,0,0,0,0,3,0,0,0,2,0,
+ 0,0,79,0,0,0,115,14,0,0,0,124,0,106,0,160,
+ 1,161,0,1,0,100,0,83,0,114,13,0,0,0,41,2,
+ 114,53,0,0,0,114,41,0,0,0,41,3,114,30,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,160,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,31,0,0,0,114,55,0,0,0,114,57,0,0,
+ 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,51,0,0,0,150,0,0,0,115,6,
+ 0,0,0,8,2,8,4,8,4,114,51,0,0,0,99,1,
+ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,
+ 0,0,0,67,0,0,0,115,136,0,0,0,116,0,160,1,
+ 161,0,1,0,122,112,122,14,116,2,124,0,25,0,131,0,
+ 125,1,87,0,110,22,4,0,116,3,121,46,1,0,1,0,
+ 1,0,100,1,125,1,89,0,110,2,48,0,124,1,100,1,
+ 117,0,114,110,116,4,100,1,117,0,114,74,116,5,124,0,
+ 131,1,125,1,110,8,116,6,124,0,131,1,125,1,124,0,
+ 102,1,100,2,100,3,132,1,125,2,116,7,160,8,124,1,
+ 124,2,161,2,116,2,124,0,60,0,87,0,116,0,160,9,
+ 161,0,1,0,110,10,116,0,160,9,161,0,1,0,48,0,
+ 124,1,83,0,41,4,122,139,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,65,99,113,117,105,114,101,47,114,101,108,101,
+ 97,115,101,32,105,110,116,101,114,110,97,108,108,121,32,116,
+ 104,101,32,103,108,111,98,97,108,32,105,109,112,111,114,116,
+ 32,108,111,99,107,32,116,111,32,112,114,111,116,101,99,116,
+ 10,32,32,32,32,95,109,111,100,117,108,101,95,108,111,99,
+ 107,115,46,78,99,2,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,8,0,0,0,83,0,0,0,115,56,0,
+ 0,0,116,0,160,1,161,0,1,0,122,32,116,2,160,3,
+ 124,1,161,1,124,0,117,0,114,30,116,2,124,1,61,0,
+ 87,0,116,0,160,4,161,0,1,0,110,10,116,0,160,4,
+ 161,0,1,0,48,0,100,0,83,0,114,13,0,0,0,41,
+ 5,218,4,95,105,109,112,218,12,97,99,113,117,105,114,101,
+ 95,108,111,99,107,218,13,95,109,111,100,117,108,101,95,108,
+ 111,99,107,115,114,35,0,0,0,218,12,114,101,108,101,97,
+ 115,101,95,108,111,99,107,41,2,218,3,114,101,102,114,17,
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,176,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,142,0,0,0,70,169,1,218,8,
- 111,118,101,114,114,105,100,101,99,2,0,0,0,0,0,0,
- 0,1,0,0,0,5,0,0,0,8,0,0,0,67,0,0,
- 0,115,226,1,0,0,124,2,115,20,116,0,124,1,100,1,
- 100,0,131,3,100,0,107,8,114,54,122,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,178,
- 124,0,106,4,125,3,124,3,100,0,107,8,114,146,124,0,
- 106,5,100,0,107,9,114,146,116,6,100,0,107,8,114,110,
- 116,7,130,1,116,6,106,8,125,4,124,4,160,9,124,4,
- 161,1,125,3,124,0,106,5,124,3,95,10,124,3,124,0,
- 95,4,100,0,124,1,95,11,122,10,124,3,124,1,95,12,
- 87,0,110,20,4,0,116,3,107,10,114,176,1,0,1,0,
- 1,0,89,0,110,2,88,0,124,2,115,198,116,0,124,1,
- 100,3,100,0,131,3,100,0,107,8,114,232,122,12,124,0,
- 106,13,124,1,95,14,87,0,110,20,4,0,116,3,107,10,
- 114,230,1,0,1,0,1,0,89,0,110,2,88,0,122,10,
- 124,0,124,1,95,15,87,0,110,22,4,0,116,3,107,10,
- 144,1,114,8,1,0,1,0,1,0,89,0,110,2,88,0,
- 124,2,144,1,115,34,116,0,124,1,100,4,100,0,131,3,
- 100,0,107,8,144,1,114,82,124,0,106,5,100,0,107,9,
- 144,1,114,82,122,12,124,0,106,5,124,1,95,16,87,0,
- 110,22,4,0,116,3,107,10,144,1,114,80,1,0,1,0,
- 1,0,89,0,110,2,88,0,124,0,106,17,144,1,114,222,
- 124,2,144,1,115,114,116,0,124,1,100,5,100,0,131,3,
- 100,0,107,8,144,1,114,150,122,12,124,0,106,18,124,1,
- 95,11,87,0,110,22,4,0,116,3,107,10,144,1,114,148,
- 1,0,1,0,1,0,89,0,110,2,88,0,124,2,144,1,
- 115,174,116,0,124,1,100,6,100,0,131,3,100,0,107,8,
- 144,1,114,222,124,0,106,19,100,0,107,9,144,1,114,222,
- 122,12,124,0,106,19,124,1,95,20,87,0,110,22,4,0,
- 116,3,107,10,144,1,114,220,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,98,0,0,0,218,11,95,95,112,97,99,107,97,103,101,
- 95,95,114,141,0,0,0,114,108,0,0,0,114,139,0,0,
- 0,41,21,114,6,0,0,0,114,17,0,0,0,114,1,0,
- 0,0,114,106,0,0,0,114,109,0,0,0,114,117,0,0,
- 0,114,126,0,0,0,114,127,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,108,0,
- 0,0,114,98,0,0,0,114,130,0,0,0,114,145,0,0,
- 0,114,105,0,0,0,114,141,0,0,0,114,124,0,0,0,
- 114,113,0,0,0,114,123,0,0,0,114,139,0,0,0,41,
- 5,114,95,0,0,0,114,96,0,0,0,114,144,0,0,0,
- 114,109,0,0,0,114,146,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,221,1,0,
- 0,115,96,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,6,11,6,1,2,1,10,1,14,1,6,2,
- 20,1,2,1,12,1,14,1,6,2,2,1,10,1,16,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,148,0,0,0,99,1,0,0,0,
- 0,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,160,2,124,
- 0,161,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,109,0,0,0,114,149,0,0,0,114,79,0,0,
- 0,114,18,0,0,0,114,17,0,0,0,114,148,0,0,0,
- 169,2,114,95,0,0,0,114,96,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,37,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,152,0,0,0,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,
- 0,0,67,0,0,0,115,106,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,66,124,0,106,2,100,1,107,
- 8,114,50,100,3,160,3,124,1,161,1,83,0,100,4,160,
- 3,124,1,124,0,106,2,161,2,83,0,110,36,124,0,106,
- 4,114,86,100,5,160,3,124,1,124,0,106,1,161,2,83,
- 0,100,6,160,3,124,0,106,0,124,0,106,1,161,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,100,0,0,0,114,101,0,0,0,114,102,0,0,0,114,
- 103,0,0,0,250,18,60,109,111,100,117,108,101,32,123,33,
- 114,125,32,40,123,125,41,62,41,5,114,17,0,0,0,114,
- 113,0,0,0,114,109,0,0,0,114,45,0,0,0,114,124,
- 0,0,0,41,2,114,95,0,0,0,114,17,0,0,0,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,107,
- 0,0,0,54,2,0,0,115,16,0,0,0,0,3,20,1,
- 10,1,10,1,10,2,16,2,6,1,14,2,114,107,0,0,
- 0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,
- 0,0,10,0,0,0,67,0,0,0,115,204,0,0,0,124,
- 0,106,0,125,2,116,1,124,2,131,1,143,180,1,0,116,
- 2,106,3,160,4,124,2,161,1,124,1,107,9,114,54,100,
- 1,160,5,124,2,161,1,125,3,116,6,124,3,124,2,100,
- 2,141,2,130,1,122,106,124,0,106,8,100,3,107,8,114,
- 106,124,0,106,9,100,3,107,8,114,90,116,6,100,4,124,
- 0,106,0,100,2,141,2,130,1,116,10,124,0,124,1,100,
- 5,100,6,141,3,1,0,110,52,116,10,124,0,124,1,100,
- 5,100,6,141,3,1,0,116,11,124,0,106,8,100,7,131,
- 2,115,146,124,0,106,8,160,12,124,2,161,1,1,0,110,
- 12,124,0,106,8,160,13,124,1,161,1,1,0,87,0,53,
- 0,116,2,106,3,160,7,124,0,106,0,161,1,125,1,124,
- 1,116,2,106,3,124,0,106,0,60,0,88,0,87,0,53,
- 0,81,0,82,0,88,0,124,1,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,114,16,0,0,0,78,250,14,109,105,115,
- 115,105,110,103,32,108,111,97,100,101,114,84,114,143,0,0,
- 0,114,150,0,0,0,41,14,114,17,0,0,0,114,50,0,
- 0,0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,
- 0,114,45,0,0,0,114,79,0,0,0,218,3,112,111,112,
- 114,109,0,0,0,114,117,0,0,0,114,148,0,0,0,114,
- 4,0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,
- 101,114,150,0,0,0,41,4,114,95,0,0,0,114,96,0,
- 0,0,114,17,0,0,0,218,3,109,115,103,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,93,0,0,0,
- 71,2,0,0,115,34,0,0,0,0,2,6,1,10,1,16,
- 1,10,1,12,1,2,1,10,1,10,1,14,2,16,2,14,
- 1,12,4,14,2,16,4,14,1,24,1,114,93,0,0,0,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,8,0,0,0,67,0,0,0,115,26,1,0,0,122,18,
- 124,0,106,0,160,1,124,0,106,2,161,1,1,0,87,0,
- 110,52,1,0,1,0,1,0,124,0,106,2,116,3,106,4,
- 107,6,114,64,116,3,106,4,160,5,124,0,106,2,161,1,
- 125,1,124,1,116,3,106,4,124,0,106,2,60,0,130,0,
- 89,0,110,2,88,0,116,3,106,4,160,5,124,0,106,2,
- 161,1,125,1,124,1,116,3,106,4,124,0,106,2,60,0,
- 116,6,124,1,100,1,100,0,131,3,100,0,107,8,114,148,
- 122,12,124,0,106,0,124,1,95,7,87,0,110,20,4,0,
- 116,8,107,10,114,146,1,0,1,0,1,0,89,0,110,2,
- 88,0,116,6,124,1,100,2,100,0,131,3,100,0,107,8,
- 114,226,122,40,124,1,106,9,124,1,95,10,116,11,124,1,
- 100,3,131,2,115,202,124,0,106,2,160,12,100,4,161,1,
- 100,5,25,0,124,1,95,10,87,0,110,20,4,0,116,8,
- 107,10,114,224,1,0,1,0,1,0,89,0,110,2,88,0,
- 116,6,124,1,100,6,100,0,131,3,100,0,107,8,144,1,
- 114,22,122,10,124,0,124,1,95,13,87,0,110,22,4,0,
- 116,8,107,10,144,1,114,20,1,0,1,0,1,0,89,0,
- 110,2,88,0,124,1,83,0,41,7,78,114,98,0,0,0,
- 114,145,0,0,0,114,141,0,0,0,114,128,0,0,0,114,
- 22,0,0,0,114,105,0,0,0,41,14,114,109,0,0,0,
+ 0,0,218,2,99,98,185,0,0,0,115,10,0,0,0,0,
+ 1,8,1,2,4,14,1,8,2,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,10,114,58,0,0,0,114,59,
+ 0,0,0,114,60,0,0,0,218,8,75,101,121,69,114,114,
+ 111,114,114,23,0,0,0,114,50,0,0,0,114,20,0,0,
+ 0,218,8,95,119,101,97,107,114,101,102,114,62,0,0,0,
+ 114,61,0,0,0,41,3,114,17,0,0,0,114,24,0,0,
+ 0,114,63,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,54,0,0,0,166,0,0,0,115,28,
+ 0,0,0,0,6,8,1,2,1,2,1,14,1,12,1,10,
+ 2,8,1,8,1,10,2,8,2,12,11,18,2,20,2,114,
+ 54,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,8,0,0,0,67,0,0,0,115,52,0,
+ 0,0,116,0,124,0,131,1,125,1,122,12,124,1,160,1,
+ 161,0,1,0,87,0,110,18,4,0,116,2,121,38,1,0,
+ 1,0,1,0,89,0,110,10,48,0,124,1,160,3,161,0,
+ 1,0,100,1,83,0,41,2,122,189,65,99,113,117,105,114,
+ 101,115,32,116,104,101,110,32,114,101,108,101,97,115,101,115,
+ 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,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,32,32,32,32,78,41,4,114,54,0,0,0,114,
+ 40,0,0,0,114,19,0,0,0,114,41,0,0,0,41,2,
+ 114,17,0,0,0,114,24,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,203,0,
+ 0,0,115,12,0,0,0,0,6,8,1,2,1,12,1,12,
+ 3,6,2,114,66,0,0,0,99,1,0,0,0,0,0,0,
+ 0,0,0,0,0,3,0,0,0,4,0,0,0,79,0,0,
+ 0,115,14,0,0,0,124,0,124,1,105,0,124,2,164,1,
+ 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,56,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,220,0,0,0,115,2,0,0,
+ 0,0,8,114,68,0,0,0,114,39,0,0,0,41,1,218,
+ 9,118,101,114,98,111,115,105,116,121,99,1,0,0,0,0,
+ 0,0,0,1,0,0,0,3,0,0,0,4,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,160,3,100,1,161,1,115,30,100,2,
+ 124,0,23,0,125,0,116,4,124,0,106,5,124,2,142,0,
+ 116,0,106,6,100,3,141,2,1,0,100,4,83,0,41,5,
+ 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,41,
+ 2,250,1,35,122,7,105,109,112,111,114,116,32,122,2,35,
+ 32,41,1,90,4,102,105,108,101,78,41,7,114,15,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,46,0,0,0,218,6,115,116,100,101,114,
+ 114,41,3,218,7,109,101,115,115,97,103,101,114,69,0,0,
+ 0,114,56,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,231,0,0,0,115,8,0,0,0,
+ 0,2,12,1,10,1,8,1,114,77,0,0,0,99,1,0,
+ 0,0,0,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,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,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,118,1,
+ 114,28,116,2,100,1,160,3,124,1,161,1,124,1,100,2,
+ 141,2,130,1,136,0,124,0,124,1,131,2,83,0,41,3,
+ 78,250,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,16,0,0,0,41,4,114,15,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,
+ 46,0,0,0,169,2,114,30,0,0,0,218,8,102,117,108,
+ 108,110,97,109,101,169,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,241,0,0,0,115,10,0,0,0,0,1,10,1,10,1,
+ 2,255,6,2,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,169,1,114,12,0,0,
+ 0,41,2,114,84,0,0,0,114,85,0,0,0,114,10,0,
+ 0,0,114,83,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,239,
+ 0,0,0,115,6,0,0,0,0,2,12,5,10,1,114,87,
+ 0,0,0,99,1,0,0,0,0,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,0,0,0,0,2,0,0,0,4,
+ 0,0,0,19,0,0,0,115,38,0,0,0,116,0,160,1,
+ 124,1,161,1,115,28,116,2,100,1,160,3,124,1,161,1,
+ 124,1,100,2,141,2,130,1,136,0,124,0,124,1,131,2,
+ 83,0,169,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,16,0,0,0,41,4,114,58,0,0,0,218,9,
+ 105,115,95,102,114,111,122,101,110,114,80,0,0,0,114,46,
+ 0,0,0,114,81,0,0,0,114,83,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,252,0,0,0,115,10,0,0,0,0,1,10,1,10,1,
+ 2,255,6,2,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,114,86,0,0,0,41,2,114,
+ 84,0,0,0,114,90,0,0,0,114,10,0,0,0,114,83,
+ 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,250,0,0,0,115,6,
+ 0,0,0,0,2,12,5,10,1,114,91,0,0,0,99,2,
+ 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,
+ 0,0,0,67,0,0,0,115,62,0,0,0,116,0,124,1,
+ 124,0,131,2,125,2,124,1,116,1,106,2,118,0,114,50,
+ 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,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,15,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,30,0,0,0,114,82,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,6,1,0,0,115,
+ 12,0,0,0,0,6,10,1,10,1,10,1,10,1,10,2,
+ 114,98,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,5,0,0,0,8,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,122,12,124,1,160,2,124,
+ 0,161,1,87,0,83,0,4,0,116,3,121,52,1,0,1,
+ 0,1,0,89,0,110,2,48,0,122,10,124,0,106,4,125,
+ 2,87,0,110,18,4,0,116,5,121,82,1,0,1,0,1,
+ 0,89,0,110,18,48,0,124,2,100,0,117,1,114,100,116,
+ 6,124,2,131,1,83,0,122,10,124,0,106,7,125,3,87,
+ 0,110,22,4,0,116,5,121,132,1,0,1,0,1,0,100,
+ 3,125,3,89,0,110,2,48,0,122,10,124,0,106,8,125,
+ 4,87,0,110,56,4,0,116,5,121,200,1,0,1,0,1,
+ 0,124,1,100,0,117,0,114,180,100,4,160,9,124,3,161,
+ 1,6,0,89,0,83,0,100,5,160,9,124,3,124,1,161,
+ 2,6,0,89,0,83,0,89,0,110,14,48,0,100,6,160,
+ 9,124,3,124,4,161,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,250,13,60,109,
+ 111,100,117,108,101,32,123,33,114,125,62,250,20,60,109,111,
+ 100,117,108,101,32,123,33,114,125,32,40,123,33,114,125,41,
+ 62,250,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,100,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,46,0,0,0,41,5,114,97,
+ 0,0,0,218,6,108,111,97,100,101,114,114,96,0,0,0,
+ 114,17,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,22,1,0,0,
+ 115,46,0,0,0,0,2,12,1,10,4,2,1,12,1,12,
+ 1,6,1,2,1,10,1,12,1,6,2,8,1,8,4,2,
+ 1,10,1,12,1,10,1,2,1,10,1,12,1,8,1,14,
+ 2,22,2,114,112,0,0,0,99,0,0,0,0,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,0,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,17,0,0,0,114,
+ 110,0,0,0,114,114,0,0,0,114,115,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,30,0,0,0,114,17,0,0,0,114,110,
+ 0,0,0,114,114,0,0,0,114,115,0,0,0,114,116,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,114,31,0,0,0,95,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,0,0,0,0,2,
+ 0,0,0,6,0,0,0,67,0,0,0,115,102,0,0,0,
+ 100,1,160,0,124,0,106,1,161,1,100,2,160,0,124,0,
+ 106,2,161,1,103,2,125,1,124,0,106,3,100,0,117,1,
+ 114,52,124,1,160,4,100,3,160,0,124,0,106,3,161,1,
+ 161,1,1,0,124,0,106,5,100,0,117,1,114,80,124,1,
+ 160,4,100,4,160,0,124,0,106,5,161,1,161,1,1,0,
+ 100,5,160,0,124,0,106,6,106,7,100,6,160,8,124,1,
+ 161,1,161,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,46,0,0,0,
+ 114,17,0,0,0,114,110,0,0,0,114,114,0,0,0,218,
+ 6,97,112,112,101,110,100,114,117,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,30,0,0,0,114,56,0,0,0,114,10,
+ 0,0,0,114,10,0,0,0,114,11,0,0,0,114,49,0,
+ 0,0,107,1,0,0,115,20,0,0,0,0,1,10,1,10,
+ 255,4,2,10,1,18,1,10,1,8,1,4,255,6,2,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,0,0,0,
+ 0,3,0,0,0,8,0,0,0,67,0,0,0,115,106,0,
+ 0,0,124,0,106,0,125,2,122,72,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,87,0,
+ 83,0,4,0,116,6,121,100,1,0,1,0,1,0,116,7,
+ 6,0,89,0,83,0,48,0,100,0,83,0,114,13,0,0,
+ 0,41,8,114,117,0,0,0,114,17,0,0,0,114,110,0,
+ 0,0,114,114,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,107,0,
+ 0,0,218,14,78,111,116,73,109,112,108,101,109,101,110,116,
+ 101,100,41,3,114,30,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,117,1,0,
+ 0,115,30,0,0,0,0,1,6,1,2,1,12,1,10,255,
+ 2,2,10,254,2,3,8,253,2,4,10,252,2,5,10,251,
+ 4,6,12,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,
+ 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
+ 115,58,0,0,0,124,0,106,0,100,0,117,0,114,52,124,
+ 0,106,1,100,0,117,1,114,52,124,0,106,2,114,52,116,
+ 3,100,0,117,0,114,38,116,4,130,1,116,3,160,5,124,
+ 0,106,1,161,1,124,0,95,0,124,0,106,0,83,0,114,
+ 13,0,0,0,41,6,114,119,0,0,0,114,114,0,0,0,
+ 114,118,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,114,48,0,0,
+ 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+ 114,123,0,0,0,129,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,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,114,13,0,0,0,41,1,114,119,0,0,
+ 0,41,2,114,30,0,0,0,114,123,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,123,0,0,
+ 0,138,1,0,0,115,2,0,0,0,0,2,99,1,0,0,
+ 0,0,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,
+ 117,0,114,26,124,0,106,1,160,2,100,2,161,1,100,3,
+ 25,0,83,0,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,22,0,0,0,41,3,114,117,0,
+ 0,0,114,17,0,0,0,218,10,114,112,97,114,116,105,116,
+ 105,111,110,114,48,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,142,
+ 1,0,0,115,6,0,0,0,0,3,10,1,16,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,0,0,0,0,1,0,
+ 0,0,1,0,0,0,67,0,0,0,115,6,0,0,0,124,
+ 0,106,0,83,0,114,13,0,0,0,41,1,114,118,0,0,
+ 0,114,48,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,124,0,0,0,150,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,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,114,13,0,0,0,41,
+ 2,218,4,98,111,111,108,114,118,0,0,0,41,2,114,30,
+ 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,124,0,0,0,154,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,
+ 31,0,0,0,114,49,0,0,0,114,126,0,0,0,218,8,
+ 112,114,111,112,101,114,116,121,114,123,0,0,0,218,6,115,
+ 101,116,116,101,114,114,131,0,0,0,114,124,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,114,113,0,0,0,58,1,0,0,115,32,0,0,
+ 0,8,1,4,36,4,1,2,255,12,12,8,10,8,12,2,
+ 1,10,8,4,1,10,3,2,1,10,7,2,1,10,3,4,
+ 1,114,113,0,0,0,169,2,114,114,0,0,0,114,116,0,
+ 0,0,99,2,0,0,0,0,0,0,0,2,0,0,0,6,
+ 0,0,0,8,0,0,0,67,0,0,0,115,152,0,0,0,
+ 116,0,124,1,100,1,131,2,114,74,116,1,100,2,117,0,
+ 114,22,116,2,130,1,116,1,106,3,125,4,124,3,100,2,
+ 117,0,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,117,0,
+ 114,136,116,0,124,1,100,5,131,2,114,132,122,14,124,1,
+ 160,4,124,0,161,1,125,3,87,0,113,136,4,0,116,5,
+ 121,128,1,0,1,0,1,0,100,2,125,3,89,0,113,136,
+ 48,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,110,0,0,0,41,2,114,110,0,0,0,114,117,
+ 0,0,0,114,116,0,0,0,70,114,136,0,0,0,41,7,
+ 114,4,0,0,0,114,127,0,0,0,114,128,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,116,0,0,0,114,80,0,
+ 0,0,114,113,0,0,0,41,6,114,17,0,0,0,114,110,
+ 0,0,0,114,114,0,0,0,114,116,0,0,0,114,137,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,92,0,0,0,159,1,
+ 0,0,115,36,0,0,0,0,2,10,1,8,1,4,1,6,
+ 2,8,1,12,1,12,1,6,1,2,255,6,3,8,1,10,
+ 1,2,1,14,1,12,1,12,3,4,2,114,92,0,0,0,
+ 99,3,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
+ 0,8,0,0,0,67,0,0,0,115,42,1,0,0,122,10,
+ 124,0,106,0,125,3,87,0,110,18,4,0,116,1,121,28,
+ 1,0,1,0,1,0,89,0,110,14,48,0,124,3,100,0,
+ 117,1,114,42,124,3,83,0,124,0,106,2,125,4,124,1,
+ 100,0,117,0,114,86,122,10,124,0,106,3,125,1,87,0,
+ 110,18,4,0,116,1,121,84,1,0,1,0,1,0,89,0,
+ 110,2,48,0,122,10,124,0,106,4,125,5,87,0,110,22,
+ 4,0,116,1,121,118,1,0,1,0,1,0,100,0,125,5,
+ 89,0,110,2,48,0,124,2,100,0,117,0,114,176,124,5,
+ 100,0,117,0,114,172,122,10,124,1,106,5,125,2,87,0,
+ 113,176,4,0,116,1,121,168,1,0,1,0,1,0,100,0,
+ 125,2,89,0,113,176,48,0,110,4,124,5,125,2,122,10,
+ 124,0,106,6,125,6,87,0,110,22,4,0,116,1,121,208,
+ 1,0,1,0,1,0,100,0,125,6,89,0,110,2,48,0,
+ 122,14,116,7,124,0,106,8,131,1,125,7,87,0,110,22,
+ 4,0,116,1,121,246,1,0,1,0,1,0,100,0,125,7,
+ 89,0,110,2,48,0,116,9,124,4,124,1,124,2,100,1,
+ 141,3,125,3,124,5,100,0,117,0,144,1,114,20,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,169,1,114,114,0,
+ 0,0,70,84,41,13,114,106,0,0,0,114,107,0,0,0,
+ 114,1,0,0,0,114,99,0,0,0,114,109,0,0,0,218,
+ 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,113,0,0,0,114,118,0,0,0,114,123,
+ 0,0,0,114,117,0,0,0,41,8,114,97,0,0,0,114,
+ 110,0,0,0,114,114,0,0,0,114,96,0,0,0,114,17,
+ 0,0,0,90,8,108,111,99,97,116,105,111,110,114,123,0,
+ 0,0,114,117,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,185,1,0,0,115,72,0,
+ 0,0,0,2,2,1,10,1,12,1,6,2,8,1,4,2,
+ 6,1,8,1,2,1,10,1,12,2,6,1,2,1,10,1,
+ 12,1,10,1,8,1,8,1,2,1,10,1,12,1,12,2,
+ 4,1,2,1,10,1,12,1,10,1,2,1,14,1,12,1,
+ 10,2,14,1,20,1,6,1,6,1,114,143,0,0,0,70,
+ 169,1,218,8,111,118,101,114,114,105,100,101,99,2,0,0,
+ 0,0,0,0,0,1,0,0,0,5,0,0,0,8,0,0,
+ 0,67,0,0,0,115,210,1,0,0,124,2,115,20,116,0,
+ 124,1,100,1,100,0,131,3,100,0,117,0,114,52,122,12,
+ 124,0,106,1,124,1,95,2,87,0,110,18,4,0,116,3,
+ 121,50,1,0,1,0,1,0,89,0,110,2,48,0,124,2,
+ 115,72,116,0,124,1,100,2,100,0,131,3,100,0,117,0,
+ 114,174,124,0,106,4,125,3,124,3,100,0,117,0,114,144,
+ 124,0,106,5,100,0,117,1,114,144,116,6,100,0,117,0,
+ 114,108,116,7,130,1,116,6,106,8,125,4,124,4,160,9,
+ 124,4,161,1,125,3,124,0,106,5,124,3,95,10,124,3,
+ 124,0,95,4,100,0,124,1,95,11,122,10,124,3,124,1,
+ 95,12,87,0,110,18,4,0,116,3,121,172,1,0,1,0,
+ 1,0,89,0,110,2,48,0,124,2,115,194,116,0,124,1,
+ 100,3,100,0,131,3,100,0,117,0,114,226,122,12,124,0,
+ 106,13,124,1,95,14,87,0,110,18,4,0,116,3,121,224,
+ 1,0,1,0,1,0,89,0,110,2,48,0,122,10,124,0,
+ 124,1,95,15,87,0,110,18,4,0,116,3,121,254,1,0,
+ 1,0,1,0,89,0,110,2,48,0,124,2,144,1,115,24,
+ 116,0,124,1,100,4,100,0,131,3,100,0,117,0,144,1,
+ 114,70,124,0,106,5,100,0,117,1,144,1,114,70,122,12,
+ 124,0,106,5,124,1,95,16,87,0,110,20,4,0,116,3,
+ 144,1,121,68,1,0,1,0,1,0,89,0,110,2,48,0,
+ 124,0,106,17,144,1,114,206,124,2,144,1,115,102,116,0,
+ 124,1,100,5,100,0,131,3,100,0,117,0,144,1,114,136,
+ 122,12,124,0,106,18,124,1,95,11,87,0,110,20,4,0,
+ 116,3,144,1,121,134,1,0,1,0,1,0,89,0,110,2,
+ 48,0,124,2,144,1,115,160,116,0,124,1,100,6,100,0,
+ 131,3,100,0,117,0,144,1,114,206,124,0,106,19,100,0,
+ 117,1,144,1,114,206,122,12,124,0,106,19,124,1,95,20,
+ 87,0,110,20,4,0,116,3,144,1,121,204,1,0,1,0,
+ 1,0,89,0,110,2,48,0,124,1,83,0,41,7,78,114,
+ 1,0,0,0,114,99,0,0,0,218,11,95,95,112,97,99,
+ 107,97,103,101,95,95,114,142,0,0,0,114,109,0,0,0,
+ 114,140,0,0,0,41,21,114,6,0,0,0,114,17,0,0,
+ 0,114,1,0,0,0,114,107,0,0,0,114,110,0,0,0,
+ 114,117,0,0,0,114,127,0,0,0,114,128,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,109,0,0,0,114,99,0,0,0,114,131,0,0,0,
+ 114,146,0,0,0,114,106,0,0,0,114,142,0,0,0,114,
+ 124,0,0,0,114,114,0,0,0,114,123,0,0,0,114,140,
+ 0,0,0,41,5,114,96,0,0,0,114,97,0,0,0,114,
+ 145,0,0,0,114,110,0,0,0,114,147,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,230,1,0,0,115,96,0,0,0,0,4,20,1,2,1,
+ 12,1,12,1,6,2,20,1,6,1,8,2,10,1,8,1,
+ 4,1,6,2,10,1,8,1,6,11,6,1,2,1,10,1,
+ 12,1,6,2,20,1,2,1,12,1,12,1,6,2,2,1,
+ 10,1,12,1,6,2,24,1,12,1,2,1,12,1,14,1,
+ 6,2,8,1,24,1,2,1,12,1,14,1,6,2,24,1,
+ 12,1,2,1,12,1,14,1,6,1,114,149,0,0,0,99,
+ 1,0,0,0,0,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,160,2,124,0,161,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,117,0,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,110,0,0,0,114,150,0,0,0,
+ 114,80,0,0,0,114,18,0,0,0,114,17,0,0,0,114,
+ 149,0,0,0,169,2,114,96,0,0,0,114,97,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,46,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,153,0,0,
+ 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,
+ 0,0,4,0,0,0,67,0,0,0,115,106,0,0,0,124,
+ 0,106,0,100,1,117,0,114,14,100,2,110,4,124,0,106,
+ 0,125,1,124,0,106,1,100,1,117,0,114,66,124,0,106,
+ 2,100,1,117,0,114,50,100,3,160,3,124,1,161,1,83,
+ 0,100,4,160,3,124,1,124,0,106,2,161,2,83,0,110,
+ 36,124,0,106,4,114,86,100,5,160,3,124,1,124,0,106,
+ 1,161,2,83,0,100,6,160,3,124,0,106,0,124,0,106,
+ 1,161,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,101,0,0,0,114,102,0,0,0,114,103,
+ 0,0,0,114,104,0,0,0,250,18,60,109,111,100,117,108,
+ 101,32,123,33,114,125,32,40,123,125,41,62,41,5,114,17,
+ 0,0,0,114,114,0,0,0,114,110,0,0,0,114,46,0,
+ 0,0,114,124,0,0,0,41,2,114,96,0,0,0,114,17,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
+ 0,0,114,108,0,0,0,63,2,0,0,115,16,0,0,0,
+ 0,3,20,1,10,1,10,1,10,2,16,2,6,1,14,2,
+ 114,108,0,0,0,99,2,0,0,0,0,0,0,0,0,0,
+ 0,0,4,0,0,0,10,0,0,0,67,0,0,0,115,250,
+ 0,0,0,124,0,106,0,125,2,116,1,124,2,131,1,143,
+ 216,1,0,116,2,106,3,160,4,124,2,161,1,124,1,117,
+ 1,114,54,100,1,160,5,124,2,161,1,125,3,116,6,124,
+ 3,124,2,100,2,141,2,130,1,122,132,124,0,106,7,100,
+ 3,117,0,114,106,124,0,106,8,100,3,117,0,114,90,116,
+ 6,100,4,124,0,106,0,100,2,141,2,130,1,116,9,124,
+ 0,124,1,100,5,100,6,141,3,1,0,110,52,116,9,124,
+ 0,124,1,100,5,100,6,141,3,1,0,116,10,124,0,106,
+ 7,100,7,131,2,115,146,124,0,106,7,160,11,124,2,161,
+ 1,1,0,110,12,124,0,106,7,160,12,124,1,161,1,1,
+ 0,87,0,116,2,106,3,160,13,124,0,106,0,161,1,125,
+ 1,124,1,116,2,106,3,124,0,106,0,60,0,110,28,116,
+ 2,106,3,160,13,124,0,106,0,161,1,125,1,124,1,116,
+ 2,106,3,124,0,106,0,60,0,48,0,87,0,100,3,4,
+ 0,4,0,131,3,1,0,110,16,49,0,115,236,48,0,1,
+ 0,1,0,1,0,89,0,1,0,124,1,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,114,16,0,0,0,78,250,14,109,
+ 105,115,115,105,110,103,32,108,111,97,100,101,114,84,114,144,
+ 0,0,0,114,151,0,0,0,41,14,114,17,0,0,0,114,
+ 51,0,0,0,114,15,0,0,0,114,93,0,0,0,114,35,
+ 0,0,0,114,46,0,0,0,114,80,0,0,0,114,110,0,
+ 0,0,114,117,0,0,0,114,149,0,0,0,114,4,0,0,
+ 0,218,11,108,111,97,100,95,109,111,100,117,108,101,114,151,
+ 0,0,0,218,3,112,111,112,41,4,114,96,0,0,0,114,
+ 97,0,0,0,114,17,0,0,0,218,3,109,115,103,114,10,
+ 0,0,0,114,10,0,0,0,114,11,0,0,0,114,94,0,
+ 0,0,80,2,0,0,115,38,0,0,0,0,2,6,1,10,
+ 1,16,1,10,1,12,1,2,1,10,1,10,1,14,2,16,
+ 2,14,1,12,4,14,2,14,4,14,1,14,255,14,1,44,
+ 1,114,94,0,0,0,99,1,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
+ 20,1,0,0,122,18,124,0,106,0,160,1,124,0,106,2,
+ 161,1,1,0,87,0,110,52,1,0,1,0,1,0,124,0,
+ 106,2,116,3,106,4,118,0,114,64,116,3,106,4,160,5,
+ 124,0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,
+ 106,2,60,0,130,0,89,0,110,2,48,0,116,3,106,4,
+ 160,5,124,0,106,2,161,1,125,1,124,1,116,3,106,4,
+ 124,0,106,2,60,0,116,6,124,1,100,1,100,0,131,3,
+ 100,0,117,0,114,146,122,12,124,0,106,0,124,1,95,7,
+ 87,0,110,18,4,0,116,8,121,144,1,0,1,0,1,0,
+ 89,0,110,2,48,0,116,6,124,1,100,2,100,0,131,3,
+ 100,0,117,0,114,222,122,40,124,1,106,9,124,1,95,10,
+ 116,11,124,1,100,3,131,2,115,200,124,0,106,2,160,12,
+ 100,4,161,1,100,5,25,0,124,1,95,10,87,0,110,18,
+ 4,0,116,8,121,220,1,0,1,0,1,0,89,0,110,2,
+ 48,0,116,6,124,1,100,6,100,0,131,3,100,0,117,0,
+ 144,1,114,16,122,10,124,0,124,1,95,13,87,0,110,20,
+ 4,0,116,8,144,1,121,14,1,0,1,0,1,0,89,0,
+ 110,2,48,0,124,1,83,0,41,7,78,114,99,0,0,0,
+ 114,146,0,0,0,114,142,0,0,0,114,129,0,0,0,114,
+ 22,0,0,0,114,106,0,0,0,41,14,114,110,0,0,0,
114,156,0,0,0,114,17,0,0,0,114,15,0,0,0,114,
- 92,0,0,0,114,155,0,0,0,114,6,0,0,0,114,98,
- 0,0,0,114,106,0,0,0,114,1,0,0,0,114,145,0,
- 0,0,114,4,0,0,0,114,129,0,0,0,114,105,0,0,
- 0,114,151,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 93,0,0,0,114,157,0,0,0,114,6,0,0,0,114,99,
+ 0,0,0,114,107,0,0,0,114,1,0,0,0,114,146,0,
+ 0,0,114,4,0,0,0,114,130,0,0,0,114,106,0,0,
+ 0,114,152,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,
- 101,2,0,0,115,54,0,0,0,0,4,2,1,18,1,6,
+ 110,2,0,0,115,54,0,0,0,0,4,2,1,18,1,6,
1,12,1,14,1,12,1,8,3,14,1,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,18,1,2,1,10,1,16,1,6,1,114,
- 158,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,2,0,0,0,11,0,0,0,67,0,0,0,115,220,0,
- 0,0,124,0,106,0,100,0,107,9,114,30,116,1,124,0,
+ 1,12,1,12,1,6,1,16,1,2,4,8,1,10,1,22,
+ 1,12,1,6,1,18,1,2,1,10,1,14,1,6,1,114,
+ 159,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,11,0,0,0,67,0,0,0,115,224,0,
+ 0,0,124,0,106,0,100,0,117,1,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,100,2,124,0,95,4,122,162,
+ 116,3,124,0,131,1,125,1,100,2,124,0,95,4,122,166,
124,1,116,5,106,6,124,0,106,7,60,0,122,52,124,0,
- 106,0,100,0,107,8,114,96,124,0,106,8,100,0,107,8,
- 114,108,116,9,100,4,124,0,106,7,100,5,141,2,130,1,
+ 106,0,100,0,117,0,114,96,124,0,106,8,100,0,117,0,
+ 114,108,116,9,100,3,124,0,106,7,100,4,141,2,130,1,
110,12,124,0,106,0,160,10,124,1,161,1,1,0,87,0,
- 110,50,1,0,1,0,1,0,122,14,116,5,106,6,124,0,
- 106,7,61,0,87,0,110,20,4,0,116,11,107,10,114,152,
- 1,0,1,0,1,0,89,0,110,2,88,0,130,0,89,0,
- 110,2,88,0,116,5,106,6,160,12,124,0,106,7,161,1,
- 125,1,124,1,116,5,106,6,124,0,106,7,60,0,116,13,
- 100,6,124,0,106,7,124,0,106,0,131,3,1,0,87,0,
- 53,0,100,3,124,0,95,4,88,0,124,1,83,0,41,7,
- 78,114,150,0,0,0,84,70,114,154,0,0,0,114,16,0,
- 0,0,122,18,105,109,112,111,114,116,32,123,33,114,125,32,
- 35,32,123,33,114,125,41,14,114,109,0,0,0,114,4,0,
- 0,0,114,158,0,0,0,114,152,0,0,0,90,13,95,105,
- 110,105,116,105,97,108,105,122,105,110,103,114,15,0,0,0,
- 114,92,0,0,0,114,17,0,0,0,114,117,0,0,0,114,
- 79,0,0,0,114,150,0,0,0,114,63,0,0,0,114,155,
- 0,0,0,114,76,0,0,0,114,151,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,138,2,0,0,
- 115,46,0,0,0,0,2,10,2,12,1,8,2,8,5,6,
- 1,2,1,12,1,2,1,10,1,10,1,16,3,16,1,6,
- 1,2,1,14,1,14,1,6,1,8,5,14,1,12,1,20,
- 2,8,2,114,159,0,0,0,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,1,0,0,0,10,0,0,0,67,0,0,
- 0,115,42,0,0,0,116,0,124,0,106,1,131,1,143,22,
- 1,0,116,2,124,0,131,1,87,0,2,0,53,0,81,0,
- 82,0,163,0,83,0,81,0,82,0,88,0,100,1,83,0,
+ 110,48,1,0,1,0,1,0,122,14,116,5,106,6,124,0,
+ 106,7,61,0,87,0,110,18,4,0,116,11,121,150,1,0,
+ 1,0,1,0,89,0,110,2,48,0,130,0,89,0,110,2,
+ 48,0,116,5,106,6,160,12,124,0,106,7,161,1,125,1,
+ 124,1,116,5,106,6,124,0,106,7,60,0,116,13,100,5,
+ 124,0,106,7,124,0,106,0,131,3,1,0,87,0,100,6,
+ 124,0,95,4,110,8,100,6,124,0,95,4,48,0,124,1,
+ 83,0,41,7,78,114,151,0,0,0,84,114,155,0,0,0,
+ 114,16,0,0,0,122,18,105,109,112,111,114,116,32,123,33,
+ 114,125,32,35,32,123,33,114,125,70,41,14,114,110,0,0,
+ 0,114,4,0,0,0,114,159,0,0,0,114,153,0,0,0,
+ 90,13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,
+ 15,0,0,0,114,93,0,0,0,114,17,0,0,0,114,117,
+ 0,0,0,114,80,0,0,0,114,151,0,0,0,114,64,0,
+ 0,0,114,157,0,0,0,114,77,0,0,0,114,152,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,46,0,0,0,0,2,10,2,12,1,8,
+ 2,8,5,6,1,2,1,12,1,2,1,10,1,10,1,16,
+ 3,16,1,6,1,2,1,14,1,12,1,6,1,8,5,14,
+ 1,12,1,18,2,16,2,114,160,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,
+ 0,67,0,0,0,115,54,0,0,0,116,0,124,0,106,1,
+ 131,1,143,24,1,0,116,2,124,0,131,1,87,0,2,0,
+ 100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,40,
+ 48,0,1,0,1,0,1,0,89,0,1,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,
@@ -1018,772 +1027,786 @@
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,3,114,50,0,0,0,114,17,0,0,0,
- 114,159,0,0,0,41,1,114,95,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,94,0,0,0,
- 180,2,0,0,115,4,0,0,0,0,9,12,1,114,94,0,
+ 32,32,32,78,41,3,114,51,0,0,0,114,17,0,0,0,
+ 114,160,0,0,0,41,1,114,96,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,114,95,0,0,0,
+ 189,2,0,0,115,4,0,0,0,0,9,12,1,114,95,0,
0,0,99,0,0,0,0,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,
+ 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,100,2,90,4,
+ 101,5,100,3,100,4,132,0,131,1,90,6,101,7,100,20,
+ 100,6,100,7,132,1,131,1,90,8,101,7,100,21,100,8,
+ 100,9,132,1,131,1,90,9,101,7,100,10,100,11,132,0,
+ 131,1,90,10,101,7,100,12,100,13,132,0,131,1,90,11,
+ 101,7,101,12,100,14,100,15,132,0,131,1,131,1,90,13,
+ 101,7,101,12,100,16,100,17,132,0,131,1,131,1,90,14,
+ 101,7,101,12,100,18,100,19,132,0,131,1,131,1,90,15,
+ 101,7,101,16,131,1,90,17,100,5,83,0,41,22,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,122,8,98,117,105,108,116,45,105,110,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,
+ 67,0,0,0,115,22,0,0,0,100,1,124,0,106,0,155,
+ 2,100,2,116,1,106,2,155,0,100,3,157,5,83,0,41,
+ 4,250,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,8,60,109,111,100,117,108,101,32,
+ 122,2,32,40,122,2,41,62,41,3,114,1,0,0,0,114,
+ 161,0,0,0,114,139,0,0,0,41,1,114,97,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 100,0,0,0,215,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,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,117,
+ 1,114,12,100,0,83,0,116,0,160,1,124,1,161,1,114,
+ 38,116,2,124,1,124,0,124,0,106,3,100,1,141,3,83,
+ 0,100,0,83,0,100,0,83,0,169,2,78,114,138,0,0,
+ 0,41,4,114,58,0,0,0,90,10,105,115,95,98,117,105,
+ 108,116,105,110,114,92,0,0,0,114,139,0,0,0,169,4,
+ 218,3,99,108,115,114,82,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,224,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,0,0,0,0,4,0,0,
+ 0,4,0,0,0,67,0,0,0,115,30,0,0,0,124,0,
+ 160,0,124,1,124,2,161,2,125,3,124,3,100,1,117,1,
+ 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,168,0,0,0,114,110,0,0,0,41,4,114,165,
+ 0,0,0,114,82,0,0,0,114,166,0,0,0,114,96,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,233,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,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,118,1,
+ 114,34,116,3,100,1,160,4,124,1,106,0,161,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,
+ 114,78,0,0,0,114,16,0,0,0,41,8,114,17,0,0,
+ 0,114,15,0,0,0,114,79,0,0,0,114,80,0,0,0,
+ 114,46,0,0,0,114,68,0,0,0,114,58,0,0,0,90,
+ 14,99,114,101,97,116,101,95,98,117,105,108,116,105,110,41,
+ 2,114,30,0,0,0,114,96,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,150,0,0,0,245,
+ 2,0,0,115,10,0,0,0,0,3,12,1,12,1,4,255,
+ 6,2,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,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,68,0,0,
+ 0,114,58,0,0,0,90,12,101,120,101,99,95,98,117,105,
+ 108,116,105,110,41,2,114,30,0,0,0,114,97,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 151,0,0,0,253,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,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,
+ 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,169,2,114,165,0,0,0,114,82,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,2,3,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,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,114,
+ 170,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,8,
+ 3,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,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,114,170,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,116,0,0,0,14,
+ 3,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,2,78,78,41,1,78,41,18,114,
+ 1,0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,
+ 0,0,0,114,139,0,0,0,218,12,115,116,97,116,105,99,
+ 109,101,116,104,111,100,114,100,0,0,0,218,11,99,108,97,
+ 115,115,109,101,116,104,111,100,114,168,0,0,0,114,169,0,
+ 0,0,114,150,0,0,0,114,151,0,0,0,114,87,0,0,
+ 0,114,171,0,0,0,114,172,0,0,0,114,116,0,0,0,
+ 114,98,0,0,0,114,156,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,161,
+ 0,0,0,204,2,0,0,115,44,0,0,0,8,2,4,7,
+ 4,2,2,1,10,8,2,1,12,8,2,1,12,11,2,1,
+ 10,7,2,1,10,4,2,1,2,1,12,4,2,1,2,1,
+ 12,4,2,1,2,1,12,4,114,161,0,0,0,99,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
+ 0,0,64,0,0,0,115,144,0,0,0,101,0,90,1,100,
+ 0,90,2,100,1,90,3,100,2,90,4,101,5,100,3,100,
+ 4,132,0,131,1,90,6,101,7,100,22,100,6,100,7,132,
+ 1,131,1,90,8,101,7,100,23,100,8,100,9,132,1,131,
+ 1,90,9,101,7,100,10,100,11,132,0,131,1,90,10,101,
+ 5,100,12,100,13,132,0,131,1,90,11,101,7,100,14,100,
+ 15,132,0,131,1,90,12,101,7,101,13,100,16,100,17,132,
+ 0,131,1,131,1,90,14,101,7,101,13,100,18,100,19,132,
+ 0,131,1,131,1,90,15,101,7,101,13,100,20,100,21,132,
+ 0,131,1,131,1,90,16,100,5,83,0,41,24,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,0,0,0,0,1,0,0,0,3,0,
- 0,0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,
- 0,106,1,161,1,83,0,41,2,250,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,45,0,0,0,114,
- 1,0,0,0,41,1,114,96,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,114,99,0,0,0,204,
- 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,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,
- 0,115,44,0,0,0,124,2,100,0,107,9,114,12,100,0,
- 83,0,116,0,160,1,124,1,161,1,114,36,116,2,124,1,
- 124,0,100,1,100,2,141,3,83,0,100,0,83,0,100,0,
- 83,0,41,3,78,122,8,98,117,105,108,116,45,105,110,114,
- 137,0,0,0,41,3,114,57,0,0,0,90,10,105,115,95,
- 98,117,105,108,116,105,110,114,91,0,0,0,169,4,218,3,
- 99,108,115,114,81,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,
- 213,2,0,0,115,10,0,0,0,0,2,8,1,4,1,10,
- 1,14,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,0,0,0,0,4,0,0,0,4,
- 0,0,0,67,0,0,0,115,30,0,0,0,124,0,160,0,
- 124,1,124,2,161,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,166,0,0,0,114,109,0,0,0,41,4,114,163,0,0,
- 0,114,81,0,0,0,114,164,0,0,0,114,95,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,222,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,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,160,4,124,1,106,0,161,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,114,77,
- 0,0,0,114,16,0,0,0,41,8,114,17,0,0,0,114,
- 15,0,0,0,114,78,0,0,0,114,79,0,0,0,114,45,
- 0,0,0,114,67,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,
- 30,0,0,0,114,95,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,149,0,0,0,234,2,0,
- 0,115,10,0,0,0,0,3,12,1,12,1,4,255,6,2,
- 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,
+ 32,99,108,97,115,115,46,10,10,32,32,32,32,90,6,102,
+ 114,111,122,101,110,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,1,0,0,0,4,0,0,0,67,0,0,0,115,16,
+ 0,0,0,100,1,160,0,124,0,106,1,116,2,106,3,161,
+ 2,83,0,41,2,114,162,0,0,0,114,154,0,0,0,41,
+ 4,114,46,0,0,0,114,1,0,0,0,114,175,0,0,0,
+ 114,139,0,0,0,41,1,218,1,109,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,114,100,0,0,0,34,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,0,
+ 0,0,0,4,0,0,0,5,0,0,0,67,0,0,0,115,
+ 34,0,0,0,116,0,160,1,124,1,161,1,114,26,116,2,
+ 124,1,124,0,124,0,106,3,100,1,141,3,83,0,100,0,
+ 83,0,100,0,83,0,114,163,0,0,0,41,4,114,58,0,
+ 0,0,114,89,0,0,0,114,92,0,0,0,114,139,0,0,
+ 0,114,164,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,168,0,0,0,43,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,0,0,0,0,
+ 3,0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,
+ 0,116,0,160,1,124,1,161,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,58,0,0,0,114,89,0,0,
+ 0,41,3,114,165,0,0,0,114,82,0,0,0,114,166,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,114,169,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,102,105,110,100,95,109,111,100,117,108,101,99,2,0,
+ 0,0,0,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,165,0,0,0,114,96,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,
+ 0,0,0,59,3,0,0,115,2,0,0,0,0,2,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,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,160,3,124,1,161,1,115,36,116,4,100,1,
+ 160,5,124,1,161,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,114,88,0,0,0,41,
+ 10,114,106,0,0,0,114,17,0,0,0,114,58,0,0,0,
+ 114,89,0,0,0,114,80,0,0,0,114,46,0,0,0,114,
+ 68,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,97,0,0,0,114,17,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,151,0,0,0,63,3,0,0,115,14,0,0,
+ 0,0,2,8,1,10,1,10,1,2,255,6,2,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,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,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,98,0,0,0,114,170,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,114,156,0,0,0,72,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,0,0,0,0,2,0,0,0,3,0,
+ 0,0,67,0,0,0,115,10,0,0,0,116,0,160,1,124,
+ 1,161,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,58,0,0,0,114,177,0,
+ 0,0,114,170,0,0,0,114,10,0,0,0,114,10,0,0,
+ 0,114,11,0,0,0,114,171,0,0,0,81,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,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,67,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,30,0,0,0,114,96,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,0,
- 0,0,242,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,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,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,169,
- 2,114,163,0,0,0,114,81,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,247,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,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,114,168,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,253,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,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,114,168,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,115,0,0,0,3,3,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,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,
- 99,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,
- 100,114,166,0,0,0,114,167,0,0,0,114,149,0,0,0,
- 114,150,0,0,0,114,86,0,0,0,114,169,0,0,0,114,
- 170,0,0,0,114,115,0,0,0,114,97,0,0,0,114,156,
- 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,195,2,0,0,
- 115,42,0,0,0,8,2,4,7,2,1,10,8,2,1,12,
- 8,2,1,12,11,2,1,10,7,2,1,10,4,2,1,2,
- 1,12,4,2,1,2,1,12,4,2,1,2,1,12,4,114,
- 160,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,4,0,0,0,64,0,0,0,115,144,0,
- 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,
- 90,4,101,5,100,3,100,4,132,0,131,1,90,6,101,7,
- 100,22,100,6,100,7,132,1,131,1,90,8,101,7,100,23,
- 100,8,100,9,132,1,131,1,90,9,101,7,100,10,100,11,
- 132,0,131,1,90,10,101,5,100,12,100,13,132,0,131,1,
- 90,11,101,7,100,14,100,15,132,0,131,1,90,12,101,7,
- 101,13,100,16,100,17,132,0,131,1,131,1,90,14,101,7,
- 101,13,100,18,100,19,132,0,131,1,131,1,90,15,101,7,
- 101,13,100,20,100,21,132,0,131,1,131,1,90,16,100,5,
- 83,0,41,24,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,90,6,102,114,111,122,101,110,99,1,0,0,
- 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,
- 0,67,0,0,0,115,16,0,0,0,100,1,160,0,124,0,
- 106,1,116,2,106,3,161,2,83,0,41,2,114,161,0,0,
- 0,114,153,0,0,0,41,4,114,45,0,0,0,114,1,0,
- 0,0,114,173,0,0,0,114,138,0,0,0,41,1,218,1,
- 109,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,99,0,0,0,23,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,0,0,0,0,4,0,0,0,5,0,
- 0,0,67,0,0,0,115,34,0,0,0,116,0,160,1,124,
- 1,161,1,114,26,116,2,124,1,124,0,124,0,106,3,100,
- 1,141,3,83,0,100,0,83,0,100,0,83,0,41,2,78,
- 114,137,0,0,0,41,4,114,57,0,0,0,114,88,0,0,
- 0,114,91,0,0,0,114,138,0,0,0,114,162,0,0,0,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 166,0,0,0,32,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,0,0,0,0,3,0,0,0,3,0,
- 0,0,67,0,0,0,115,18,0,0,0,116,0,160,1,124,
- 1,161,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,57,0,0,0,114,88,0,0,0,41,3,114,163,0,
- 0,0,114,81,0,0,0,114,164,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,167,0,0,0,
- 39,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,
- 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,
- 163,0,0,0,114,95,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,149,0,0,0,48,3,0,
- 0,115,2,0,0,0,0,2,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,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,160,3,
- 124,1,161,1,115,36,116,4,100,1,160,5,124,1,161,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,114,87,0,0,0,41,10,114,105,0,0,0,
- 114,17,0,0,0,114,57,0,0,0,114,88,0,0,0,114,
- 79,0,0,0,114,45,0,0,0,114,67,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,96,
- 0,0,0,114,17,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,150,0,
- 0,0,52,3,0,0,115,14,0,0,0,0,2,8,1,10,
- 1,10,1,2,255,6,2,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,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,
- 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,97,0,0,0,114,168,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,156,0,0,0,
- 61,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,
- 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
- 115,10,0,0,0,116,0,160,1,124,1,161,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,57,0,0,0,114,175,0,0,0,114,168,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,169,0,0,0,70,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,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,114,168,0,0,0,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 170,0,0,0,76,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,0,0,0,0,2,0,0,0,3,0,0,0,67,
- 0,0,0,115,10,0,0,0,116,0,160,1,124,1,161,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,57,0,0,0,90,17,105,115,95,
- 102,114,111,122,101,110,95,112,97,99,107,97,103,101,114,168,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,115,0,0,0,82,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,17,114,1,0,0,0,114,0,0,0,0,
- 114,2,0,0,0,114,3,0,0,0,114,138,0,0,0,114,
- 171,0,0,0,114,99,0,0,0,114,172,0,0,0,114,166,
- 0,0,0,114,167,0,0,0,114,149,0,0,0,114,150,0,
- 0,0,114,156,0,0,0,114,90,0,0,0,114,169,0,0,
- 0,114,170,0,0,0,114,115,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 173,0,0,0,12,3,0,0,115,46,0,0,0,8,2,4,
- 7,4,2,2,1,10,8,2,1,12,6,2,1,12,8,2,
- 1,10,3,2,1,10,8,2,1,10,8,2,1,2,1,12,
- 4,2,1,2,1,12,4,2,1,2,1,114,173,0,0,0,
- 99,0,0,0,0,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,0,0,0,0,1,0,0,0,2,0,0,0,67,
- 0,0,0,115,12,0,0,0,116,0,160,1,161,0,1,0,
- 100,1,83,0,41,2,122,24,65,99,113,117,105,114,101,32,
+ 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,114,170,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,172,0,0,0,87,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,0,0,0,0,2,0,0,
+ 0,3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,
+ 160,1,124,1,161,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,58,0,0,
+ 0,90,17,105,115,95,102,114,111,122,101,110,95,112,97,99,
+ 107,97,103,101,114,170,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,116,0,0,0,93,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,17,114,1,0,0,
+ 0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,
+ 114,139,0,0,0,114,173,0,0,0,114,100,0,0,0,114,
+ 174,0,0,0,114,168,0,0,0,114,169,0,0,0,114,150,
+ 0,0,0,114,151,0,0,0,114,156,0,0,0,114,91,0,
+ 0,0,114,171,0,0,0,114,172,0,0,0,114,116,0,0,
+ 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,175,0,0,0,23,3,0,0,115,46,
+ 0,0,0,8,2,4,7,4,2,2,1,10,8,2,1,12,
+ 6,2,1,12,8,2,1,10,3,2,1,10,8,2,1,10,
+ 8,2,1,2,1,12,4,2,1,2,1,12,4,2,1,2,
+ 1,114,175,0,0,0,99,0,0,0,0,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,
- 78,41,2,114,57,0,0,0,114,58,0,0,0,114,47,0,
- 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,114,54,0,0,0,95,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,0,0,0,0,4,0,0,0,
- 2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160,
- 1,161,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,59,0,0,0,41,4,114,30,0,0,0,218,8,101,
- 120,99,95,116,121,112,101,218,9,101,120,99,95,118,97,108,
- 117,101,218,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,56,0,0,0,99,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,54,0,0,0,114,56,0,0,0,114,10,
+ 99,1,0,0,0,0,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,
+ 160,1,161,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,58,0,0,0,114,59,
+ 0,0,0,114,48,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,55,0,0,0,106,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,0,0,
+ 0,0,4,0,0,0,2,0,0,0,67,0,0,0,115,12,
+ 0,0,0,116,0,160,1,161,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,58,0,0,0,114,61,0,0,0,41,4,114,30,
+ 0,0,0,218,8,101,120,99,95,116,121,112,101,218,9,101,
+ 120,99,95,118,97,108,117,101,218,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,57,0,0,0,110,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,55,0,0,0,114,
+ 57,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,180,0,0,0,102,3,0,
+ 0,115,6,0,0,0,8,2,4,2,8,4,114,180,0,0,
+ 0,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,
+ 0,0,5,0,0,0,67,0,0,0,115,64,0,0,0,124,
+ 1,160,0,100,1,124,2,100,2,24,0,161,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,160,3,124,4,124,0,161,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,129,0,0,0,114,39,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,22,0,0,0,250,5,123,125,46,123,125,41,
+ 4,218,6,114,115,112,108,105,116,218,3,108,101,110,114,80,
+ 0,0,0,114,46,0,0,0,41,5,114,17,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,115,3,0,0,115,10,0,
+ 0,0,0,2,16,1,12,1,8,1,8,1,114,189,0,0,
+ 0,99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,
+ 0,0,4,0,0,0,67,0,0,0,115,34,0,0,0,124,
+ 0,160,0,124,1,124,2,161,2,125,3,124,3,100,0,117,
+ 0,114,24,100,0,83,0,116,1,124,1,124,3,131,2,83,
+ 0,114,13,0,0,0,41,2,114,169,0,0,0,114,92,0,
+ 0,0,41,4,218,6,102,105,110,100,101,114,114,17,0,0,
+ 0,114,166,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,102,105,110,
+ 100,95,115,112,101,99,95,108,101,103,97,99,121,124,3,0,
+ 0,115,8,0,0,0,0,3,12,1,8,1,4,1,114,191,
+ 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,
+ 10,0,0,0,10,0,0,0,67,0,0,0,115,32,1,0,
+ 0,116,0,106,1,125,3,124,3,100,1,117,0,114,22,116,
+ 2,100,2,131,1,130,1,124,3,115,38,116,3,160,4,100,
+ 3,116,5,161,2,1,0,124,0,116,0,106,6,118,0,125,
+ 4,124,3,68,0,93,230,125,5,116,7,131,0,143,94,1,
+ 0,122,10,124,5,106,8,125,6,87,0,110,54,4,0,116,
+ 9,121,128,1,0,1,0,1,0,116,10,124,5,124,0,124,
+ 1,131,3,125,7,124,7,100,1,117,0,114,124,89,0,87,
+ 0,100,1,4,0,4,0,131,3,1,0,113,52,89,0,110,
+ 14,48,0,124,6,124,0,124,1,124,2,131,3,125,7,87,
+ 0,100,1,4,0,4,0,131,3,1,0,110,16,49,0,115,
+ 162,48,0,1,0,1,0,1,0,89,0,1,0,124,7,100,
+ 1,117,1,114,52,124,4,144,1,115,18,124,0,116,0,106,
+ 6,118,0,144,1,114,18,116,0,106,6,124,0,25,0,125,
+ 8,122,10,124,8,106,11,125,9,87,0,110,26,4,0,116,
+ 9,121,244,1,0,1,0,1,0,124,7,6,0,89,0,2,
+ 0,1,0,83,0,48,0,124,9,100,1,117,0,144,1,114,
+ 8,124,7,2,0,1,0,83,0,124,9,2,0,1,0,83,
+ 0,113,52,124,7,2,0,1,0,83,0,113,52,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,15,0,0,
+ 0,218,9,109,101,116,97,95,112,97,116,104,114,80,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,93,0,0,0,114,180,0,0,0,114,168,0,0,0,
+ 114,107,0,0,0,114,191,0,0,0,114,106,0,0,0,41,
+ 10,114,17,0,0,0,114,166,0,0,0,114,167,0,0,0,
+ 114,192,0,0,0,90,9,105,115,95,114,101,108,111,97,100,
+ 114,190,0,0,0,114,168,0,0,0,114,96,0,0,0,114,
+ 97,0,0,0,114,106,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,133,3,0,0,115,54,0,0,0,0,2,6,
+ 1,8,2,8,3,4,1,12,5,10,1,8,1,8,1,2,
+ 1,10,1,12,1,12,1,8,1,22,2,42,1,8,2,18,
+ 1,10,1,2,1,10,1,12,4,14,2,10,1,8,2,10,
+ 2,10,2,114,196,0,0,0,99,3,0,0,0,0,0,0,
+ 0,0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,
+ 0,115,108,0,0,0,116,0,124,0,116,1,131,2,115,28,
+ 116,2,100,1,160,3,116,4,124,0,131,1,161,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,84,116,0,124,1,116,1,
+ 131,2,115,72,116,2,100,4,131,1,130,1,110,12,124,1,
+ 115,84,116,6,100,5,131,1,130,1,124,0,115,104,124,2,
+ 100,2,107,2,114,104,116,5,100,6,131,1,130,1,100,7,
+ 83,0,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,22,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,17,69,109,112,116,121,32,109,111,100,
+ 117,108,101,32,110,97,109,101,78,41,7,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,46,0,0,0,114,14,0,0,
+ 0,218,10,86,97,108,117,101,69,114,114,111,114,114,80,0,
+ 0,0,169,3,114,17,0,0,0,114,187,0,0,0,114,188,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,178,0,0,0,91,3,0,0,115,6,0,0,0,
- 8,2,4,2,8,4,114,178,0,0,0,99,3,0,0,0,
- 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
- 67,0,0,0,115,64,0,0,0,124,1,160,0,100,1,124,
- 2,100,2,24,0,161,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,160,3,124,4,124,
- 0,161,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,
- 128,0,0,0,114,37,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,22,0,
- 0,0,250,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,45,0,0,0,41,5,114,17,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,104,3,0,0,115,10,
- 0,0,0,0,2,16,1,12,1,8,1,8,1,114,188,0,
- 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,4,
- 0,0,0,4,0,0,0,67,0,0,0,115,34,0,0,0,
- 124,0,160,0,124,1,124,2,161,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,114,13,0,0,0,41,2,114,167,0,0,0,114,91,
- 0,0,0,41,4,218,6,102,105,110,100,101,114,114,17,0,
- 0,0,114,164,0,0,0,114,109,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,113,3,
- 0,0,115,8,0,0,0,0,3,12,1,8,1,4,1,114,
- 190,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,10,0,0,0,10,0,0,0,67,0,0,0,115,12,1,
- 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,160,4,
- 100,3,116,5,161,2,1,0,124,0,116,0,106,6,107,6,
- 125,4,124,3,68,0,93,210,125,5,116,7,131,0,143,84,
- 1,0,122,10,124,5,106,8,125,6,87,0,110,54,4,0,
- 116,9,107,10,114,128,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,124,
- 89,0,87,0,53,0,81,0,82,0,163,0,113,52,89,0,
- 110,14,88,0,124,6,124,0,124,1,124,2,131,3,125,7,
- 87,0,53,0,81,0,82,0,88,0,124,7,100,1,107,9,
- 114,52,124,4,144,0,115,254,124,0,116,0,106,6,107,6,
- 144,0,114,254,116,0,106,6,124,0,25,0,125,8,122,10,
- 124,8,106,11,125,9,87,0,110,28,4,0,116,9,107,10,
- 114,226,1,0,1,0,1,0,124,7,6,0,89,0,2,0,
- 1,0,83,0,88,0,124,9,100,1,107,8,114,244,124,7,
- 2,0,1,0,83,0,124,9,2,0,1,0,83,0,113,52,
- 124,7,2,0,1,0,83,0,113,52,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,15,0,0,0,218,9,
- 109,101,116,97,95,112,97,116,104,114,79,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,92,
- 0,0,0,114,178,0,0,0,114,166,0,0,0,114,106,0,
- 0,0,114,190,0,0,0,114,105,0,0,0,41,10,114,17,
- 0,0,0,114,164,0,0,0,114,165,0,0,0,114,191,0,
- 0,0,90,9,105,115,95,114,101,108,111,97,100,114,189,0,
- 0,0,114,166,0,0,0,114,95,0,0,0,114,96,0,0,
- 0,114,105,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,122,3,0,0,115,54,0,0,0,0,2,6,1,8,2,
- 8,3,4,1,12,5,10,1,8,1,8,1,2,1,10,1,
- 14,1,12,1,8,1,20,2,22,1,8,2,18,1,10,1,
- 2,1,10,1,14,4,14,2,8,1,8,2,10,2,10,2,
- 114,195,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,3,0,0,0,5,0,0,0,67,0,0,0,115,108,
- 0,0,0,116,0,124,0,116,1,131,2,115,28,116,2,100,
- 1,160,3,116,4,124,0,131,1,161,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,84,116,0,124,1,116,1,131,2,115,
- 72,116,2,100,4,131,1,130,1,110,12,124,1,115,84,116,
- 6,100,5,131,1,130,1,124,0,115,104,124,2,100,2,107,
- 2,114,104,116,5,100,6,131,1,130,1,100,7,83,0,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,22,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,17,69,109,112,116,121,32,109,111,100,117,108,101,
- 32,110,97,109,101,78,41,7,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,45,0,0,0,114,14,0,0,0,114,185,
- 0,0,0,114,79,0,0,0,169,3,114,17,0,0,0,114,
- 186,0,0,0,114,187,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,169,3,0,0,115,22,0,0,0,
- 0,2,10,1,18,1,8,1,8,1,8,1,10,1,10,1,
- 4,1,8,2,12,1,114,200,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,0,0,0,0,
- 8,0,0,0,8,0,0,0,67,0,0,0,115,220,0,0,
- 0,100,0,125,2,124,0,160,0,100,1,161,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,122,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,160,7,124,0,124,3,161,
- 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,160,7,124,
- 0,161,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,160,0,100,1,161,1,100,
- 5,25,0,124,7,131,3,1,0,124,7,83,0,41,6,78,
- 114,128,0,0,0,114,22,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,16,0,0,0,233,2,0,0,0,41,12,114,
- 129,0,0,0,114,15,0,0,0,114,92,0,0,0,114,67,
- 0,0,0,114,141,0,0,0,114,106,0,0,0,218,8,95,
- 69,82,82,95,77,83,71,114,45,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,195,0,0,0,114,159,0,0,0,114,5,0,0,0,
- 41,8,114,17,0,0,0,218,7,105,109,112,111,114,116,95,
- 114,164,0,0,0,114,130,0,0,0,90,13,112,97,114,101,
- 110,116,95,109,111,100,117,108,101,114,157,0,0,0,114,95,
- 0,0,0,114,96,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,
- 188,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,205,0,0,0,99,2,0,0,0,0,0,0,
- 0,0,0,0,0,4,0,0,0,10,0,0,0,67,0,0,
- 0,115,106,0,0,0,116,0,124,0,131,1,143,50,1,0,
- 116,1,106,2,160,3,124,0,116,4,161,2,125,2,124,2,
- 116,4,107,8,114,54,116,5,124,0,124,1,131,2,87,0,
- 2,0,53,0,81,0,82,0,163,0,83,0,87,0,53,0,
- 81,0,82,0,88,0,124,2,100,1,107,8,114,94,100,2,
- 160,6,124,0,161,1,125,3,116,7,124,3,124,0,100,3,
- 141,2,130,1,116,8,124,0,131,1,1,0,124,2,83,0,
- 41,4,122,25,70,105,110,100,32,97,110,100,32,108,111,97,
- 100,32,116,104,101,32,109,111,100,117,108,101,46,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,16,0,0,0,41,9,114,
- 50,0,0,0,114,15,0,0,0,114,92,0,0,0,114,34,
- 0,0,0,218,14,95,78,69,69,68,83,95,76,79,65,68,
- 73,78,71,114,205,0,0,0,114,45,0,0,0,114,203,0,
- 0,0,114,65,0,0,0,41,4,114,17,0,0,0,114,204,
- 0,0,0,114,96,0,0,0,114,75,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,218,3,0,0,
- 115,22,0,0,0,0,2,10,1,14,1,8,1,32,2,8,
- 1,4,1,2,255,4,2,12,2,8,1,114,207,0,0,0,
- 114,22,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,42,
- 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,124,0,116,3,131,2,83,0,41,2,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,22,0,0,0,41,4,114,200,0,
- 0,0,114,188,0,0,0,114,207,0,0,0,218,11,95,103,
- 99,100,95,105,109,112,111,114,116,114,199,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,208,0,
- 0,0,234,3,0,0,115,8,0,0,0,0,9,12,1,8,
- 1,12,1,114,208,0,0,0,169,1,218,9,114,101,99,117,
- 114,115,105,118,101,99,3,0,0,0,0,0,0,0,1,0,
- 0,0,8,0,0,0,11,0,0,0,67,0,0,0,115,226,
- 0,0,0,124,1,68,0,93,216,125,4,116,0,124,4,116,
- 1,131,2,115,66,124,3,114,34,124,0,106,2,100,1,23,
- 0,125,5,110,4,100,2,125,5,116,3,100,3,124,5,155,
- 0,100,4,116,4,124,4,131,1,106,2,155,0,157,4,131,
- 1,130,1,113,4,124,4,100,5,107,2,114,108,124,3,115,
- 220,116,5,124,0,100,6,131,2,114,220,116,6,124,0,124,
- 0,106,7,124,2,100,7,100,8,141,4,1,0,113,4,116,
- 5,124,0,124,4,131,2,115,4,100,9,160,8,124,0,106,
- 2,124,4,161,2,125,6,122,14,116,9,124,2,124,6,131,
- 2,1,0,87,0,113,4,4,0,116,10,107,10,114,218,1,
- 0,125,7,1,0,122,42,124,7,106,11,124,6,107,2,114,
- 200,116,12,106,13,160,14,124,6,116,15,161,2,100,10,107,
- 9,114,200,87,0,89,0,162,8,113,4,130,0,87,0,53,
- 0,100,10,125,7,126,7,88,0,89,0,113,4,88,0,113,
- 4,124,0,83,0,41,11,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,122,8,46,95,95,97,108,108,95,
- 95,122,13,96,96,102,114,111,109,32,108,105,115,116,39,39,
- 122,8,73,116,101,109,32,105,110,32,122,18,32,109,117,115,
- 116,32,98,101,32,115,116,114,44,32,110,111,116,32,250,1,
- 42,218,7,95,95,97,108,108,95,95,84,114,209,0,0,0,
- 114,182,0,0,0,78,41,16,114,196,0,0,0,114,197,0,
- 0,0,114,1,0,0,0,114,198,0,0,0,114,14,0,0,
- 0,114,4,0,0,0,218,16,95,104,97,110,100,108,101,95,
- 102,114,111,109,108,105,115,116,114,212,0,0,0,114,45,0,
- 0,0,114,67,0,0,0,114,203,0,0,0,114,17,0,0,
- 0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,0,
- 114,206,0,0,0,41,8,114,96,0,0,0,218,8,102,114,
- 111,109,108,105,115,116,114,204,0,0,0,114,210,0,0,0,
- 218,1,120,90,5,119,104,101,114,101,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,114,213,0,0,0,249,3,
- 0,0,115,44,0,0,0,0,10,8,1,10,1,4,1,12,
- 2,4,1,28,2,8,1,14,1,10,1,2,255,8,2,10,
- 1,14,1,2,1,14,1,16,4,10,1,16,255,2,2,8,
- 1,22,1,114,213,0,0,0,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,
- 0,115,146,0,0,0,124,0,160,0,100,1,161,1,125,1,
- 124,0,160,0,100,2,161,1,125,2,124,1,100,3,107,9,
- 114,82,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,124,2,100,3,107,9,114,96,
- 124,2,106,1,83,0,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,142,124,1,160,5,100,12,161,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,145,0,0,0,114,105,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,141,0,0,
- 0,114,128,0,0,0,114,22,0,0,0,41,6,114,34,0,
- 0,0,114,130,0,0,0,114,192,0,0,0,114,193,0,0,
- 0,114,194,0,0,0,114,129,0,0,0,41,3,218,7,103,
- 108,111,98,97,108,115,114,186,0,0,0,114,95,0,0,0,
+ 0,0,218,13,95,115,97,110,105,116,121,95,99,104,101,99,
+ 107,180,3,0,0,115,22,0,0,0,0,2,10,1,18,1,
+ 8,1,8,1,8,1,10,1,10,1,4,1,8,2,12,1,
+ 114,202,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,0,0,0,0,9,0,0,0,8,0,
+ 0,0,67,0,0,0,115,22,1,0,0,100,0,125,2,124,
+ 0,160,0,100,1,161,1,100,2,25,0,125,3,124,3,114,
+ 132,124,3,116,1,106,2,118,1,114,42,116,3,124,1,124,
+ 3,131,2,1,0,124,0,116,1,106,2,118,0,114,62,116,
+ 1,106,2,124,0,25,0,83,0,116,1,106,2,124,3,25,
+ 0,125,4,122,10,124,4,106,4,125,2,87,0,110,48,4,
+ 0,116,5,121,130,1,0,1,0,1,0,116,6,100,3,23,
+ 0,160,7,124,0,124,3,161,2,125,5,116,8,124,5,124,
+ 0,100,4,141,2,100,0,130,2,89,0,110,2,48,0,116,
+ 9,124,0,124,2,131,2,125,6,124,6,100,0,117,0,114,
+ 170,116,8,116,6,160,7,124,0,161,1,124,0,100,4,141,
+ 2,130,1,110,8,116,10,124,6,131,1,125,7,124,3,144,
+ 1,114,18,116,1,106,2,124,3,25,0,125,4,124,0,160,
+ 0,100,1,161,1,100,5,25,0,125,8,122,16,116,11,124,
+ 4,124,8,124,7,131,3,1,0,87,0,110,48,4,0,116,
+ 5,144,1,121,16,1,0,1,0,1,0,100,6,124,3,155,
+ 2,100,7,124,8,155,2,157,4,125,5,116,12,160,13,124,
+ 5,116,14,161,2,1,0,89,0,110,2,48,0,124,7,83,
+ 0,41,8,78,114,129,0,0,0,114,22,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,16,0,0,0,233,2,0,0,
+ 0,122,27,67,97,110,110,111,116,32,115,101,116,32,97,110,
+ 32,97,116,116,114,105,98,117,116,101,32,111,110,32,122,18,
+ 32,102,111,114,32,99,104,105,108,100,32,109,111,100,117,108,
+ 101,32,41,15,114,130,0,0,0,114,15,0,0,0,114,93,
+ 0,0,0,114,68,0,0,0,114,142,0,0,0,114,107,0,
+ 0,0,218,8,95,69,82,82,95,77,83,71,114,46,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,196,0,0,0,114,160,0,0,0,
+ 114,5,0,0,0,114,193,0,0,0,114,194,0,0,0,114,
+ 195,0,0,0,41,9,114,17,0,0,0,218,7,105,109,112,
+ 111,114,116,95,114,166,0,0,0,114,131,0,0,0,90,13,
+ 112,97,114,101,110,116,95,109,111,100,117,108,101,114,158,0,
+ 0,0,114,96,0,0,0,114,97,0,0,0,90,5,99,104,
+ 105,108,100,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,199,3,0,0,115,
+ 52,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,12,1,16,1,20,1,
+ 10,1,8,1,20,2,8,1,6,2,10,1,14,1,2,1,
+ 16,1,14,1,16,1,18,1,114,207,0,0,0,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,4,0,0,0,8,0,
+ 0,0,67,0,0,0,115,128,0,0,0,116,0,124,0,131,
+ 1,143,62,1,0,116,1,106,2,160,3,124,0,116,4,161,
+ 2,125,2,124,2,116,4,117,0,114,56,116,5,124,0,124,
+ 1,131,2,87,0,2,0,100,1,4,0,4,0,131,3,1,
+ 0,83,0,87,0,100,1,4,0,4,0,131,3,1,0,110,
+ 16,49,0,115,76,48,0,1,0,1,0,1,0,89,0,1,
+ 0,124,2,100,1,117,0,114,116,100,2,160,6,124,0,161,
+ 1,125,3,116,7,124,3,124,0,100,3,141,2,130,1,116,
+ 8,124,0,131,1,1,0,124,2,83,0,41,4,122,25,70,
+ 105,110,100,32,97,110,100,32,108,111,97,100,32,116,104,101,
+ 32,109,111,100,117,108,101,46,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,16,0,0,0,41,9,114,51,0,0,0,114,
+ 15,0,0,0,114,93,0,0,0,114,35,0,0,0,218,14,
+ 95,78,69,69,68,83,95,76,79,65,68,73,78,71,114,207,
+ 0,0,0,114,46,0,0,0,114,205,0,0,0,114,66,0,
+ 0,0,41,4,114,17,0,0,0,114,206,0,0,0,114,97,
+ 0,0,0,114,76,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,234,3,0,0,115,22,0,0,0,
+ 0,2,10,1,14,1,8,1,54,2,8,1,4,1,2,255,
+ 4,2,12,2,8,1,114,209,0,0,0,114,22,0,0,0,
+ 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
+ 0,4,0,0,0,67,0,0,0,115,42,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,
+ 124,0,116,3,131,2,83,0,41,2,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,22,0,0,0,41,4,114,202,0,0,0,114,189,0,
+ 0,0,114,209,0,0,0,218,11,95,103,99,100,95,105,109,
+ 112,111,114,116,114,201,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,210,0,0,0,250,3,0,
+ 0,115,8,0,0,0,0,9,12,1,8,1,12,1,114,210,
+ 0,0,0,169,1,218,9,114,101,99,117,114,115,105,118,101,
+ 99,3,0,0,0,0,0,0,0,1,0,0,0,8,0,0,
+ 0,11,0,0,0,67,0,0,0,115,232,0,0,0,124,1,
+ 68,0,93,222,125,4,116,0,124,4,116,1,131,2,115,66,
+ 124,3,114,34,124,0,106,2,100,1,23,0,125,5,110,4,
+ 100,2,125,5,116,3,100,3,124,5,155,0,100,4,116,4,
+ 124,4,131,1,106,2,155,0,157,4,131,1,130,1,113,4,
+ 124,4,100,5,107,2,114,108,124,3,115,226,116,5,124,0,
+ 100,6,131,2,114,226,116,6,124,0,124,0,106,7,124,2,
+ 100,7,100,8,141,4,1,0,113,4,116,5,124,0,124,4,
+ 131,2,115,4,100,9,160,8,124,0,106,2,124,4,161,2,
+ 125,6,122,14,116,9,124,2,124,6,131,2,1,0,87,0,
+ 113,4,4,0,116,10,121,224,1,0,125,7,1,0,122,54,
+ 124,7,106,11,124,6,107,2,114,202,116,12,106,13,160,14,
+ 124,6,116,15,161,2,100,10,117,1,114,202,87,0,89,0,
+ 100,10,125,7,126,7,113,4,130,0,87,0,89,0,100,10,
+ 125,7,126,7,113,4,100,10,125,7,126,7,48,0,48,0,
+ 113,4,124,0,83,0,41,11,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,122,8,46,95,95,97,108,108,
+ 95,95,122,13,96,96,102,114,111,109,32,108,105,115,116,39,
+ 39,122,8,73,116,101,109,32,105,110,32,122,18,32,109,117,
+ 115,116,32,98,101,32,115,116,114,44,32,110,111,116,32,250,
+ 1,42,218,7,95,95,97,108,108,95,95,84,114,211,0,0,
+ 0,114,184,0,0,0,78,41,16,114,197,0,0,0,114,198,
+ 0,0,0,114,1,0,0,0,114,199,0,0,0,114,14,0,
+ 0,0,114,4,0,0,0,218,16,95,104,97,110,100,108,101,
+ 95,102,114,111,109,108,105,115,116,114,214,0,0,0,114,46,
+ 0,0,0,114,68,0,0,0,114,205,0,0,0,114,17,0,
+ 0,0,114,15,0,0,0,114,93,0,0,0,114,35,0,0,
+ 0,114,208,0,0,0,41,8,114,97,0,0,0,218,8,102,
+ 114,111,109,108,105,115,116,114,206,0,0,0,114,212,0,0,
+ 0,218,1,120,90,5,119,104,101,114,101,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,114,215,0,0,0,9,
+ 4,0,0,115,48,0,0,0,0,10,8,1,10,1,4,1,
+ 12,2,4,1,10,1,8,255,10,2,8,1,14,1,10,1,
+ 2,255,8,2,10,1,14,1,2,1,14,1,14,4,10,1,
+ 16,255,2,2,12,1,26,1,114,215,0,0,0,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,6,0,
+ 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,
+ 1,161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,
+ 1,100,3,117,1,114,82,124,2,100,3,117,1,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,124,2,100,
+ 3,117,1,114,96,124,2,106,1,83,0,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,118,1,114,142,124,1,160,5,100,
+ 12,161,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,146,0,0,0,114,106,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,142,0,0,0,114,129,0,0,0,114,22,0,0,0,
+ 41,6,114,35,0,0,0,114,131,0,0,0,114,193,0,0,
+ 0,114,194,0,0,0,114,195,0,0,0,114,130,0,0,0,
+ 41,3,218,7,103,108,111,98,97,108,115,114,187,0,0,0,
+ 114,96,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,46,4,0,0,115,42,0,0,0,
+ 0,7,10,1,10,1,8,1,18,1,6,1,2,255,4,1,
+ 4,255,6,2,4,254,6,3,4,1,8,1,6,2,6,2,
+ 4,254,6,3,8,1,8,1,14,1,114,221,0,0,0,114,
+ 10,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0,
+ 0,9,0,0,0,5,0,0,0,67,0,0,0,115,180,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,117,1,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,150,124,4,100,1,
+ 107,2,114,84,116,0,124,0,160,2,100,3,161,1,100,1,
+ 25,0,131,1,83,0,124,0,115,92,124,5,83,0,116,3,
+ 124,0,131,1,116,3,124,0,160,2,100,3,161,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,26,116,7,124,5,100,4,131,2,
+ 114,172,116,8,124,5,124,3,116,0,131,3,83,0,124,5,
+ 83,0,100,2,83,0,41,5,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,22,0,0,0,78,114,129,0,0,0,114,
+ 142,0,0,0,41,9,114,210,0,0,0,114,221,0,0,0,
+ 218,9,112,97,114,116,105,116,105,111,110,114,186,0,0,0,
+ 114,15,0,0,0,114,93,0,0,0,114,1,0,0,0,114,
+ 4,0,0,0,114,215,0,0,0,41,9,114,17,0,0,0,
+ 114,220,0,0,0,218,6,108,111,99,97,108,115,114,216,0,
+ 0,0,114,188,0,0,0,114,97,0,0,0,90,8,103,108,
+ 111,98,97,108,115,95,114,187,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,73,
+ 4,0,0,115,30,0,0,0,0,11,8,1,10,2,16,1,
+ 8,1,12,1,4,3,8,1,18,1,4,1,4,4,26,3,
+ 32,1,10,1,12,2,114,224,0,0,0,99,1,0,0,0,
+ 0,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,160,1,124,0,161,
+ 1,125,1,124,1,100,0,117,0,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,
+ 161,0,0,0,114,168,0,0,0,114,80,0,0,0,114,160,
+ 0,0,0,41,2,114,17,0,0,0,114,96,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,110,4,0,0,115,8,0,0,0,0,1,10,1,8,
+ 1,12,1,114,225,0,0,0,99,2,0,0,0,0,0,0,
+ 0,0,0,0,0,10,0,0,0,5,0,0,0,67,0,0,
+ 0,115,166,0,0,0,124,1,97,0,124,0,97,1,116,2,
+ 116,1,131,1,125,2,116,1,106,3,160,4,161,0,68,0,
+ 93,72,92,2,125,3,125,4,116,5,124,4,124,2,131,2,
+ 114,26,124,3,116,1,106,6,118,0,114,60,116,7,125,5,
+ 110,18,116,0,160,8,124,3,161,1,114,26,116,9,125,5,
+ 110,2,113,26,116,10,124,4,124,5,131,2,125,6,116,11,
+ 124,6,124,4,131,2,1,0,113,26,116,1,106,3,116,12,
+ 25,0,125,7,100,1,68,0,93,46,125,8,124,8,116,1,
+ 106,3,118,1,114,138,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,114,100,2,83,0,41,3,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,41,3,114,23,0,0,
+ 0,114,193,0,0,0,114,65,0,0,0,78,41,15,114,58,
+ 0,0,0,114,15,0,0,0,114,14,0,0,0,114,93,0,
+ 0,0,218,5,105,116,101,109,115,114,197,0,0,0,114,79,
+ 0,0,0,114,161,0,0,0,114,89,0,0,0,114,175,0,
+ 0,0,114,143,0,0,0,114,149,0,0,0,114,1,0,0,
+ 0,114,225,0,0,0,114,5,0,0,0,41,10,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,17,0,0,0,114,97,0,0,0,114,110,0,
+ 0,0,114,96,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,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,218,6,95,115,101,116,117,112,117,4,0,0,115,36,0,
+ 0,0,0,9,4,1,4,3,8,1,18,1,10,1,10,1,
+ 6,1,10,1,6,2,2,1,10,1,12,3,10,1,8,1,
+ 10,1,10,2,10,1,114,229,0,0,0,99,2,0,0,0,
+ 0,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,124,0,124,1,131,
+ 2,1,0,116,1,106,2,160,3,116,4,161,1,1,0,116,
+ 1,106,2,160,3,116,5,161,1,1,0,100,1,83,0,41,
+ 2,122,48,73,110,115,116,97,108,108,32,105,109,112,111,114,
+ 116,101,114,115,32,102,111,114,32,98,117,105,108,116,105,110,
+ 32,97,110,100,32,102,114,111,122,101,110,32,109,111,100,117,
+ 108,101,115,78,41,6,114,229,0,0,0,114,15,0,0,0,
+ 114,192,0,0,0,114,120,0,0,0,114,161,0,0,0,114,
+ 175,0,0,0,41,2,114,227,0,0,0,114,228,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,30,4,0,0,115,38,0,0,0,0,7,10,1,10,
- 1,8,1,18,1,22,2,2,0,2,254,6,3,4,1,8,
- 1,6,2,6,2,2,0,2,254,6,3,8,1,8,1,14,
- 1,114,219,0,0,0,114,10,0,0,0,99,5,0,0,0,
- 0,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,
- 67,0,0,0,115,180,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,150,124,4,100,1,107,2,114,84,116,0,124,0,160,
- 2,100,3,161,1,100,1,25,0,131,1,83,0,124,0,115,
- 92,124,5,83,0,116,3,124,0,131,1,116,3,124,0,160,
- 2,100,3,161,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,26,116,
- 7,124,5,100,4,131,2,114,172,116,8,124,5,124,3,116,
- 0,131,3,83,0,124,5,83,0,100,2,83,0,41,5,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,22,0,0,0,
- 78,114,128,0,0,0,114,141,0,0,0,41,9,114,208,0,
- 0,0,114,219,0,0,0,218,9,112,97,114,116,105,116,105,
- 111,110,114,184,0,0,0,114,15,0,0,0,114,92,0,0,
- 0,114,1,0,0,0,114,4,0,0,0,114,213,0,0,0,
- 41,9,114,17,0,0,0,114,218,0,0,0,218,6,108,111,
- 99,97,108,115,114,214,0,0,0,114,187,0,0,0,114,96,
- 0,0,0,90,8,103,108,111,98,97,108,115,95,114,186,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,57,4,0,0,115,30,0,0,0,0,
- 11,8,1,10,2,16,1,8,1,12,1,4,3,8,1,18,
- 1,4,1,4,4,26,3,32,1,10,1,12,2,114,222,0,
- 0,0,99,1,0,0,0,0,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,160,1,124,0,161,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,160,0,0,0,114,166,0,0,0,
- 114,79,0,0,0,114,159,0,0,0,41,2,114,17,0,0,
- 0,114,95,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,94,4,0,0,115,8,0,
- 0,0,0,1,10,1,8,1,12,1,114,223,0,0,0,99,
- 2,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,
- 5,0,0,0,67,0,0,0,115,166,0,0,0,124,1,97,
- 0,124,0,97,1,116,2,116,1,131,1,125,2,116,1,106,
- 3,160,4,161,0,68,0,93,72,92,2,125,3,125,4,116,
- 5,124,4,124,2,131,2,114,26,124,3,116,1,106,6,107,
- 6,114,60,116,7,125,5,110,18,116,0,160,8,124,3,161,
- 1,114,26,116,9,125,5,110,2,113,26,116,10,124,4,124,
- 5,131,2,125,6,116,11,124,6,124,4,131,2,1,0,113,
- 26,116,1,106,3,116,12,25,0,125,7,100,1,68,0,93,
- 46,125,8,124,8,116,1,106,3,107,7,114,138,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,114,100,
- 2,83,0,41,3,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,41,3,114,23,0,0,0,114,192,0,0,0,114,64,0,
- 0,0,78,41,15,114,57,0,0,0,114,15,0,0,0,114,
- 14,0,0,0,114,92,0,0,0,218,5,105,116,101,109,115,
- 114,196,0,0,0,114,78,0,0,0,114,160,0,0,0,114,
- 88,0,0,0,114,173,0,0,0,114,142,0,0,0,114,148,
- 0,0,0,114,1,0,0,0,114,223,0,0,0,114,5,0,
- 0,0,41,10,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,17,0,0,0,114,
- 96,0,0,0,114,109,0,0,0,114,95,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,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,218,6,95,115,101,116,117,112,
- 101,4,0,0,115,36,0,0,0,0,9,4,1,4,3,8,
- 1,18,1,10,1,10,1,6,1,10,1,6,2,2,1,10,
- 1,12,3,10,1,8,1,10,1,10,2,10,1,114,227,0,
- 0,0,99,2,0,0,0,0,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,124,0,124,1,131,2,1,0,116,1,106,2,160,3,
- 116,4,161,1,1,0,116,1,106,2,160,3,116,5,161,1,
- 1,0,100,1,83,0,41,2,122,48,73,110,115,116,97,108,
- 108,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32,
- 98,117,105,108,116,105,110,32,97,110,100,32,102,114,111,122,
- 101,110,32,109,111,100,117,108,101,115,78,41,6,114,227,0,
- 0,0,114,15,0,0,0,114,191,0,0,0,114,120,0,0,
- 0,114,160,0,0,0,114,173,0,0,0,41,2,114,225,0,
- 0,0,114,226,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,218,8,95,105,110,115,116,97,108,108,
- 136,4,0,0,115,6,0,0,0,0,2,10,2,12,1,114,
- 228,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
- 0,1,0,0,0,4,0,0,0,67,0,0,0,115,32,0,
- 0,0,100,1,100,2,108,0,125,0,124,0,97,1,124,0,
- 160,2,116,3,106,4,116,5,25,0,161,1,1,0,100,2,
- 83,0,41,3,122,57,73,110,115,116,97,108,108,32,105,109,
- 112,111,114,116,101,114,115,32,116,104,97,116,32,114,101,113,
- 117,105,114,101,32,101,120,116,101,114,110,97,108,32,102,105,
- 108,101,115,121,115,116,101,109,32,97,99,99,101,115,115,114,
- 22,0,0,0,78,41,6,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,126,0,0,0,114,228,0,0,0,114,15,0,
- 0,0,114,92,0,0,0,114,1,0,0,0,41,1,114,229,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,218,27,95,105,110,115,116,97,108,108,95,101,120,116,
- 101,114,110,97,108,95,105,109,112,111,114,116,101,114,115,144,
- 4,0,0,115,6,0,0,0,0,3,8,1,4,1,114,230,
- 0,0,0,41,2,78,78,41,1,78,41,2,78,114,22,0,
- 0,0,41,4,78,78,114,10,0,0,0,114,22,0,0,0,
- 41,50,114,3,0,0,0,114,126,0,0,0,114,12,0,0,
- 0,114,18,0,0,0,114,60,0,0,0,114,33,0,0,0,
- 114,42,0,0,0,114,19,0,0,0,114,20,0,0,0,114,
- 49,0,0,0,114,50,0,0,0,114,53,0,0,0,114,65,
- 0,0,0,114,67,0,0,0,114,76,0,0,0,114,86,0,
- 0,0,114,90,0,0,0,114,97,0,0,0,114,111,0,0,
- 0,114,112,0,0,0,114,91,0,0,0,114,142,0,0,0,
- 114,148,0,0,0,114,152,0,0,0,114,107,0,0,0,114,
- 93,0,0,0,114,158,0,0,0,114,159,0,0,0,114,94,
- 0,0,0,114,160,0,0,0,114,173,0,0,0,114,178,0,
- 0,0,114,188,0,0,0,114,190,0,0,0,114,195,0,0,
- 0,114,200,0,0,0,90,15,95,69,82,82,95,77,83,71,
- 95,80,82,69,70,73,88,114,202,0,0,0,114,205,0,0,
- 0,218,6,111,98,106,101,99,116,114,206,0,0,0,114,207,
- 0,0,0,114,208,0,0,0,114,213,0,0,0,114,219,0,
- 0,0,114,222,0,0,0,114,223,0,0,0,114,227,0,0,
- 0,114,228,0,0,0,114,230,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,1,0,0,0,115,94,0,
- 0,0,4,24,4,2,8,8,8,8,4,2,4,3,16,4,
- 14,68,14,21,14,16,8,37,8,17,8,11,14,8,8,11,
- 8,12,8,16,8,36,14,101,16,26,10,45,14,72,8,17,
- 8,17,8,30,8,37,8,42,8,15,14,73,14,79,14,13,
- 8,9,8,9,10,47,8,16,4,1,8,2,8,27,6,3,
- 8,16,10,15,14,37,8,27,10,37,8,7,8,35,8,8,
+ 8,95,105,110,115,116,97,108,108,152,4,0,0,115,6,0,
+ 0,0,0,2,10,2,12,1,114,230,0,0,0,99,0,0,
+ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,
+ 0,0,67,0,0,0,115,32,0,0,0,100,1,100,2,108,
+ 0,125,0,124,0,97,1,124,0,160,2,116,3,106,4,116,
+ 5,25,0,161,1,1,0,100,2,83,0,41,3,122,57,73,
+ 110,115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,
+ 32,116,104,97,116,32,114,101,113,117,105,114,101,32,101,120,
+ 116,101,114,110,97,108,32,102,105,108,101,115,121,115,116,101,
+ 109,32,97,99,99,101,115,115,114,22,0,0,0,78,41,6,
+ 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,127,0,0,
+ 0,114,230,0,0,0,114,15,0,0,0,114,93,0,0,0,
+ 114,1,0,0,0,41,1,114,231,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,27,95,105,110,
+ 115,116,97,108,108,95,101,120,116,101,114,110,97,108,95,105,
+ 109,112,111,114,116,101,114,115,160,4,0,0,115,6,0,0,
+ 0,0,3,8,1,4,1,114,232,0,0,0,41,2,78,78,
+ 41,1,78,41,2,78,114,22,0,0,0,41,4,78,78,114,
+ 10,0,0,0,114,22,0,0,0,41,50,114,3,0,0,0,
+ 114,127,0,0,0,114,12,0,0,0,114,18,0,0,0,114,
+ 60,0,0,0,114,34,0,0,0,114,44,0,0,0,114,19,
+ 0,0,0,114,20,0,0,0,114,50,0,0,0,114,51,0,
+ 0,0,114,54,0,0,0,114,66,0,0,0,114,68,0,0,
+ 0,114,77,0,0,0,114,87,0,0,0,114,91,0,0,0,
+ 114,98,0,0,0,114,112,0,0,0,114,113,0,0,0,114,
+ 92,0,0,0,114,143,0,0,0,114,149,0,0,0,114,153,
+ 0,0,0,114,108,0,0,0,114,94,0,0,0,114,159,0,
+ 0,0,114,160,0,0,0,114,95,0,0,0,114,161,0,0,
+ 0,114,175,0,0,0,114,180,0,0,0,114,189,0,0,0,
+ 114,191,0,0,0,114,196,0,0,0,114,202,0,0,0,90,
+ 15,95,69,82,82,95,77,83,71,95,80,82,69,70,73,88,
+ 114,204,0,0,0,114,207,0,0,0,218,6,111,98,106,101,
+ 99,116,114,208,0,0,0,114,209,0,0,0,114,210,0,0,
+ 0,114,215,0,0,0,114,221,0,0,0,114,224,0,0,0,
+ 114,225,0,0,0,114,229,0,0,0,114,230,0,0,0,114,
+ 232,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,1,0,0,0,115,94,0,0,0,4,24,4,2,8,
+ 8,8,8,4,2,4,3,16,4,14,77,14,21,14,16,8,
+ 37,8,17,8,11,14,8,8,11,8,12,8,16,8,36,14,
+ 101,16,26,10,45,14,72,8,17,8,17,8,30,8,37,8,
+ 42,8,15,14,75,14,79,14,13,8,9,8,9,10,47,8,
+ 16,4,1,8,2,8,32,6,3,8,16,10,15,14,37,8,
+ 27,10,37,8,7,8,35,8,8,
};
diff --git a/Python/importlib_external.h b/Python/importlib_external.h
index 74d98bd..a8d5d9a 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -69,796 +69,805 @@
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,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,250,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,169,1,218,3,107,
- 101,121,114,3,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,36,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,0,0,0,0,1,
- 0,0,0,83,0,0,0,115,4,0,0,0,100,1,83,0,
- 41,2,114,1,0,0,0,70,114,3,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,7,0,0,0,40,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,3,0,0,0,114,4,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,29,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,0,0,0,
- 0,1,0,0,0,4,0,0,0,67,0,0,0,115,20,0,
- 0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2,
- 100,3,161,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,236,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,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,12,95,112,97,99,107,95,117,105,110,116,51,50,46,
- 0,0,0,115,2,0,0,0,0,2,114,20,0,0,0,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
- 4,0,0,0,67,0,0,0,115,28,0,0,0,116,0,124,
- 0,131,1,100,1,107,2,115,16,116,1,130,1,116,2,160,
- 3,124,0,100,2,161,2,83,0,41,3,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,114,16,0,0,0,169,4,218,3,108,101,110,218,14,65,
- 115,115,101,114,116,105,111,110,69,114,114,111,114,114,17,0,
- 0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1,
- 218,4,100,97,116,97,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,14,95,117,110,112,97,99,107,95,117,
- 105,110,116,51,50,51,0,0,0,115,4,0,0,0,0,2,
- 16,1,114,27,0,0,0,99,1,0,0,0,0,0,0,0,
- 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,
- 115,28,0,0,0,116,0,124,0,131,1,100,1,107,2,115,
- 16,116,1,130,1,116,2,160,3,124,0,100,2,161,2,83,
- 0,41,3,122,47,67,111,110,118,101,114,116,32,50,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,233,2,0,0,0,114,16,0,0,0,114,21,
- 0,0,0,114,25,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,218,14,95,117,110,112,97,99,107,
- 95,117,105,110,116,49,54,56,0,0,0,115,4,0,0,0,
- 0,2,16,1,114,29,0,0,0,99,0,0,0,0,0,0,
- 0,0,0,0,0,0,1,0,0,0,4,0,0,0,71,0,
- 0,0,115,20,0,0,0,116,0,160,1,100,1,100,2,132,
- 0,124,0,68,0,131,1,161,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,0,0,0,0,2,0,0,0,5,
- 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,160,0,116,1,161,1,
- 145,2,113,4,83,0,114,3,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,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,10,60,108,105,115,116,99,111,109,112,62,64,0,0,
- 0,115,6,0,0,0,6,1,2,0,4,255,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,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,97,
- 116,104,95,106,111,105,110,62,0,0,0,115,6,0,0,0,
- 0,2,10,1,2,255,114,38,0,0,0,99,1,0,0,0,
- 0,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,160,2,116,3,161,1,92,3,125,
- 1,125,2,125,3,124,1,124,3,102,2,83,0,116,4,124,
- 0,131,1,68,0,93,42,125,4,124,4,116,1,107,6,114,
- 44,124,0,106,5,124,4,100,1,100,2,141,2,92,2,125,
- 1,125,3,124,1,124,3,102,2,2,0,1,0,83,0,113,
- 44,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,114,22,0,0,0,114,31,0,0,0,218,10,114,112,
- 97,114,116,105,116,105,111,110,114,35,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,19,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,11,95,112,97,
- 116,104,95,115,112,108,105,116,68,0,0,0,115,16,0,0,
- 0,0,2,12,1,16,1,8,1,12,1,8,1,18,1,14,
- 1,114,47,0,0,0,99,1,0,0,0,0,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,160,1,124,0,161,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,2,0,0,0,90,4,115,116,97,116,169,1,114,
- 44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,80,
- 0,0,0,115,2,0,0,0,0,7,114,49,0,0,0,99,
- 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
- 8,0,0,0,67,0,0,0,115,50,0,0,0,122,12,116,
- 0,124,0,131,1,125,2,87,0,110,22,4,0,116,1,107,
- 10,114,34,1,0,1,0,1,0,89,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,49,0,0,
- 0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,
- 111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,101,
- 90,9,115,116,97,116,95,105,110,102,111,114,3,0,0,0,
- 114,3,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,90,0,
- 0,0,115,10,0,0,0,0,2,2,1,12,1,14,1,8,
- 1,114,53,0,0,0,99,1,0,0,0,0,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,53,0,0,0,114,48,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,99,
- 0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,99,
- 1,0,0,0,0,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,160,1,161,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,2,0,0,
- 0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,48,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,104,
- 0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,56,
- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0,
- 0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,100,
- 2,133,2,25,0,116,2,107,6,83,0,41,3,122,142,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,97,98,115,46,10,10,32,
- 32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,87,
- 105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,108,
- 97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,100,
- 114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,115,
- 32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,10,
- 32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,98,
- 115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,0,
- 0,0,233,3,0,0,0,41,3,114,10,0,0,0,114,31,
- 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119,
- 105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,
- 112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,2,
- 0,0,0,0,6,114,59,0,0,0,233,182,1,0,0,99,
- 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
- 11,0,0,0,67,0,0,0,115,162,0,0,0,100,1,160,
- 0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160,
- 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,161,3,125,4,122,50,116,
- 7,160,8,124,4,100,3,161,2,143,16,125,5,124,5,160,
- 9,124,1,161,1,1,0,87,0,53,0,81,0,82,0,88,
- 0,116,2,160,10,124,3,124,0,161,2,1,0,87,0,110,
- 58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,122,
- 14,116,2,160,12,124,3,161,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,250,5,123,125,46,123,125,114,60,0,0,
- 0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,116,
- 218,2,105,100,114,2,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,50,0,0,0,90,6,117,110,
- 108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,0,
- 114,52,0,0,0,90,8,112,97,116,104,95,116,109,112,90,
- 2,102,100,218,4,102,105,108,101,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,13,95,119,114,105,116,101,
- 95,97,116,111,109,105,99,120,0,0,0,115,30,0,0,0,
- 0,5,16,1,6,1,16,0,6,255,4,2,2,3,14,1,
- 20,1,16,1,14,1,2,1,14,1,14,1,6,1,114,69,
- 0,0,0,105,85,13,0,0,114,28,0,0,0,114,16,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,0,0,0,
- 0,1,0,0,0,12,0,0,0,5,0,0,0,67,0,0,
- 0,115,88,1,0,0,124,1,100,1,107,9,114,52,116,0,
- 160,1,100,2,116,2,161,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,160,5,124,0,
- 161,1,125,0,116,6,124,0,131,1,92,2,125,4,125,5,
- 124,5,160,7,100,6,161,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,160,12,124,6,114,126,
- 124,6,110,2,124,8,124,7,124,9,103,3,161,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,160,16,161,0,115,210,116,17,100,9,160,18,
- 124,2,161,1,131,1,130,1,100,10,160,18,124,10,116,19,
- 124,2,161,3,125,10,124,10,116,20,100,8,25,0,23,0,
- 125,11,116,8,106,21,100,1,107,9,144,1,114,76,116,22,
- 124,4,131,1,144,1,115,16,116,23,116,4,160,24,161,0,
- 124,4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,
- 144,1,114,56,124,4,100,8,25,0,116,25,107,7,144,1,
- 114,56,124,4,100,12,100,1,133,2,25,0,125,4,116,23,
- 116,8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,
- 83,0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,
- 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,40,0,0,0,114,39,0,0,0,218,1,46,250,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,250,1,58,114,28,
- 0,0,0,41,28,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,2,0,0,0,218,6,102,115,112,97,
- 116,104,114,47,0,0,0,114,41,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,
+ 0,115,20,0,0,0,116,0,106,1,106,2,12,0,111,18,
+ 136,0,116,3,106,4,118,0,83,0,41,1,122,94,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,32,97,110,100,32,105,103,110,111,114,101,32,101,110,
+ 118,105,114,111,110,109,101,110,116,32,102,108,97,103,115,32,
+ 97,114,101,32,110,111,116,32,115,101,116,46,41,5,218,3,
+ 115,121,115,218,5,102,108,97,103,115,218,18,105,103,110,111,
+ 114,101,95,101,110,118,105,114,111,110,109,101,110,116,218,3,
+ 95,111,115,90,7,101,110,118,105,114,111,110,169,0,169,1,
+ 218,3,107,101,121,114,5,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,36,
+ 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,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,5,0,
+ 0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,114,9,0,0,0,40,0,0,0,115,
+ 2,0,0,0,0,2,41,5,114,1,0,0,0,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,9,0,0,0,114,5,0,0,
+ 0,114,6,0,0,0,114,8,0,0,0,218,16,95,109,97,
+ 107,101,95,114,101,108,97,120,95,99,97,115,101,29,0,0,
+ 0,115,14,0,0,0,0,1,12,1,12,1,6,2,4,2,
+ 14,4,8,3,114,14,0,0,0,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,
+ 0,0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,
+ 0,160,1,100,2,100,3,161,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,236,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,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,218,12,95,112,97,99,107,95,117,105,
+ 110,116,51,50,46,0,0,0,115,2,0,0,0,0,2,114,
+ 21,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,
+ 0,0,116,0,124,0,131,1,100,1,107,2,115,16,74,0,
+ 130,1,116,1,160,2,124,0,100,2,161,2,83,0,41,3,
+ 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,16,0,0,0,114,17,0,0,0,169,3,218,3,108,
+ 101,110,114,18,0,0,0,218,10,102,114,111,109,95,98,121,
+ 116,101,115,169,1,218,4,100,97,116,97,114,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,218,14,95,117,110,112,
+ 97,99,107,95,117,105,110,116,51,50,51,0,0,0,115,4,
+ 0,0,0,0,2,16,1,114,27,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,
+ 0,67,0,0,0,115,28,0,0,0,116,0,124,0,131,1,
+ 100,1,107,2,115,16,74,0,130,1,116,1,160,2,124,0,
+ 100,2,161,2,83,0,41,3,122,47,67,111,110,118,101,114,
+ 116,32,50,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,233,2,0,0,0,114,17,
+ 0,0,0,114,22,0,0,0,114,25,0,0,0,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,218,14,95,117,
+ 110,112,97,99,107,95,117,105,110,116,49,54,56,0,0,0,
+ 115,4,0,0,0,0,2,16,1,114,29,0,0,0,99,0,
+ 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,
+ 0,0,0,71,0,0,0,115,20,0,0,0,116,0,160,1,
+ 100,1,100,2,132,0,124,0,68,0,131,1,161,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,0,0,0,0,
+ 2,0,0,0,5,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,160,
+ 0,116,1,161,1,145,2,113,4,83,0,114,5,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,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,218,10,60,108,105,115,116,99,111,109,
+ 112,62,64,0,0,0,115,4,0,0,0,6,1,6,255,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,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,
+ 95,112,97,116,104,95,106,111,105,110,62,0,0,0,115,6,
+ 0,0,0,0,2,10,1,2,255,114,38,0,0,0,99,1,
+ 0,0,0,0,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,160,2,116,3,161,1,
+ 92,3,125,1,125,2,125,3,124,1,124,3,102,2,83,0,
+ 116,4,124,0,131,1,68,0,93,42,125,4,124,4,116,1,
+ 118,0,114,44,124,0,106,5,124,4,100,1,100,2,141,2,
+ 92,2,125,1,125,3,124,1,124,3,102,2,2,0,1,0,
+ 83,0,113,44,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,114,23,0,0,0,114,31,0,0,0,218,
+ 10,114,112,97,114,116,105,116,105,111,110,114,35,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,20,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,
+ 95,112,97,116,104,95,115,112,108,105,116,68,0,0,0,115,
+ 16,0,0,0,0,2,12,1,16,1,8,1,12,1,8,1,
+ 18,1,14,1,114,47,0,0,0,99,1,0,0,0,0,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,160,1,124,0,161,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,4,0,0,0,90,4,115,116,97,116,
+ 169,1,114,44,0,0,0,114,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,218,10,95,112,97,116,104,95,115,116,
+ 97,116,80,0,0,0,115,2,0,0,0,0,7,114,49,0,
+ 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
+ 0,0,0,8,0,0,0,67,0,0,0,115,48,0,0,0,
+ 122,12,116,0,124,0,131,1,125,2,87,0,110,20,4,0,
+ 116,1,121,32,1,0,1,0,1,0,89,0,100,1,83,0,
+ 48,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,49,0,
+ 0,0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,
+ 109,111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,
+ 101,90,9,115,116,97,116,95,105,110,102,111,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,218,18,95,112,97,
+ 116,104,95,105,115,95,109,111,100,101,95,116,121,112,101,90,
+ 0,0,0,115,10,0,0,0,0,2,2,1,12,1,12,1,
+ 8,1,114,53,0,0,0,99,1,0,0,0,0,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,53,0,0,0,114,48,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,
+ 99,0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,
+ 99,1,0,0,0,0,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,160,1,161,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,4,0,
+ 0,0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,
+ 48,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,
+ 104,0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,
+ 56,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,
+ 0,0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,
+ 100,2,133,2,25,0,116,2,118,0,83,0,41,3,122,142,
+ 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,97,98,115,46,10,10,
+ 32,32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,
+ 87,105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,
+ 108,97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,
+ 100,114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,
+ 115,32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,
+ 10,32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,
+ 98,115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,
+ 0,0,0,233,3,0,0,0,41,3,114,11,0,0,0,114,
+ 31,0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,
+ 119,105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,
+ 95,112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,
+ 2,0,0,0,0,6,114,59,0,0,0,233,182,1,0,0,
+ 99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
+ 0,11,0,0,0,67,0,0,0,115,178,0,0,0,100,1,
+ 160,0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,
+ 160,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,161,3,125,4,122,70,
+ 116,7,160,8,124,4,100,3,161,2,143,26,125,5,124,5,
+ 160,9,124,1,161,1,1,0,87,0,100,4,4,0,4,0,
+ 131,3,1,0,110,16,49,0,115,94,48,0,1,0,1,0,
+ 1,0,89,0,1,0,116,2,160,10,124,3,124,0,161,2,
+ 1,0,87,0,110,54,4,0,116,11,121,172,1,0,1,0,
+ 1,0,122,14,116,2,160,12,124,3,161,1,1,0,87,0,
+ 110,18,4,0,116,11,121,164,1,0,1,0,1,0,89,0,
+ 110,2,48,0,130,0,89,0,110,2,48,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,250,5,123,125,46,123,125,114,60,0,
+ 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,
+ 116,218,2,105,100,114,4,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,50,0,0,0,90,6,117,
+ 110,108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,
+ 0,114,52,0,0,0,90,8,112,97,116,104,95,116,109,112,
+ 90,2,102,100,218,4,102,105,108,101,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,218,13,95,119,114,105,116,
+ 101,95,97,116,111,109,105,99,120,0,0,0,115,28,0,0,
+ 0,0,5,16,1,6,1,22,255,4,2,2,3,14,1,40,
+ 1,16,1,12,1,2,1,14,1,12,1,6,1,114,69,0,
+ 0,0,105,97,13,0,0,114,28,0,0,0,114,17,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,0,0,0,0,
+ 1,0,0,0,12,0,0,0,5,0,0,0,67,0,0,0,
+ 115,88,1,0,0,124,1,100,1,117,1,114,52,116,0,160,
+ 1,100,2,116,2,161,2,1,0,124,2,100,1,117,1,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,160,5,124,0,161,
+ 1,125,0,116,6,124,0,131,1,92,2,125,4,125,5,124,
+ 5,160,7,100,6,161,1,92,3,125,6,125,7,125,8,116,
+ 8,106,9,106,10,125,9,124,9,100,1,117,0,114,114,116,
+ 11,100,7,131,1,130,1,100,4,160,12,124,6,114,126,124,
+ 6,110,2,124,8,124,7,124,9,103,3,161,1,125,10,124,
+ 2,100,1,117,0,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,160,16,161,0,115,210,116,17,100,9,160,18,124,
+ 2,161,1,131,1,130,1,100,10,160,18,124,10,116,19,124,
+ 2,161,3,125,10,124,10,116,20,100,8,25,0,23,0,125,
+ 11,116,8,106,21,100,1,117,1,144,1,114,76,116,22,124,
+ 4,131,1,144,1,115,16,116,23,116,4,160,24,161,0,124,
+ 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,144,
+ 1,114,56,124,4,100,8,25,0,116,25,118,1,144,1,114,
+ 56,124,4,100,12,100,1,133,2,25,0,125,4,116,23,116,
+ 8,106,21,124,4,160,26,116,25,161,1,124,11,131,3,83,
+ 0,116,23,124,4,116,27,124,11,131,3,83,0,41,13,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,114,36,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,62,0,0,0,218,4,95,79,80,84,218,17,66,89,
- 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,218,
- 14,112,121,99,97,99,104,101,95,112,114,101,102,105,120,114,
- 59,0,0,0,114,38,0,0,0,114,55,0,0,0,114,31,
- 0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89,
- 67,65,67,72,69,41,12,114,44,0,0,0,90,14,100,101,
- 98,117,103,95,111,118,101,114,114,105,100,101,114,70,0,0,
- 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,
- 114,46,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,218,8,102,105,
- 108,101,110,97,109,101,114,3,0,0,0,114,3,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,38,1,0,0,115,72,0,0,
- 0,0,18,8,1,6,1,2,255,4,2,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,12,1,12,9,10,1,14,5,28,1,12,4,2,
- 1,4,1,8,1,2,253,4,5,114,98,0,0,0,99,1,
- 0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,5,
- 0,0,0,67,0,0,0,115,46,1,0,0,116,0,106,1,
- 106,2,100,1,107,8,114,20,116,3,100,2,131,1,130,1,
- 116,4,160,5,124,0,161,1,125,0,116,6,124,0,131,1,
- 92,2,125,1,125,2,100,3,125,3,116,0,106,7,100,1,
- 107,9,114,102,116,0,106,7,160,8,116,9,161,1,125,4,
- 124,1,160,10,124,4,116,11,23,0,161,1,114,102,124,1,
- 116,12,124,4,131,1,100,1,133,2,25,0,125,1,100,4,
- 125,3,124,3,115,144,116,6,124,1,131,1,92,2,125,1,
- 125,5,124,5,116,13,107,3,114,144,116,14,116,13,155,0,
- 100,5,124,0,155,2,157,3,131,1,130,1,124,2,160,15,
- 100,6,161,1,125,6,124,6,100,7,107,7,114,178,116,14,
- 100,8,124,2,155,2,157,2,131,1,130,1,110,92,124,6,
- 100,9,107,2,144,1,114,14,124,2,160,16,100,6,100,10,
- 161,2,100,11,25,0,125,7,124,7,160,10,116,17,161,1,
- 115,228,116,14,100,12,116,17,155,2,157,2,131,1,130,1,
- 124,7,116,12,116,17,131,1,100,1,133,2,25,0,125,8,
- 124,8,160,18,161,0,144,1,115,14,116,14,100,13,124,7,
- 155,2,100,14,157,3,131,1,130,1,124,2,160,19,100,6,
- 161,1,100,15,25,0,125,9,116,20,124,1,124,9,116,21,
- 100,15,25,0,23,0,131,2,83,0,41,16,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,
- 114,72,0,0,0,70,84,122,31,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,114,71,0,0,0,62,2,0,
- 0,0,114,28,0,0,0,114,57,0,0,0,122,29,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,114,57,0,0,0,
- 114,28,0,0,0,233,254,255,255,255,122,53,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,122,19,111,112,116,105,109,105,122,97,116,105,111,110,32,
- 108,101,118,101,108,32,122,29,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,73,0,0,0,41,22,114,8,0,0,
- 0,114,80,0,0,0,114,81,0,0,0,114,82,0,0,0,
- 114,2,0,0,0,114,79,0,0,0,114,47,0,0,0,114,
- 90,0,0,0,114,30,0,0,0,114,31,0,0,0,114,10,
- 0,0,0,114,35,0,0,0,114,22,0,0,0,114,92,0,
- 0,0,114,87,0,0,0,218,5,99,111,117,110,116,114,43,
- 0,0,0,114,88,0,0,0,114,86,0,0,0,218,9,112,
- 97,114,116,105,116,105,111,110,114,38,0,0,0,218,15,83,
- 79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,
- 114,44,0,0,0,114,94,0,0,0,90,16,112,121,99,97,
- 99,104,101,95,102,105,108,101,110,97,109,101,90,23,102,111,
- 117,110,100,95,105,110,95,112,121,99,97,99,104,101,95,112,
- 114,101,102,105,120,90,13,115,116,114,105,112,112,101,100,95,
- 112,97,116,104,90,7,112,121,99,97,99,104,101,90,9,100,
- 111,116,95,99,111,117,110,116,114,70,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,3,0,0,0,114,3,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,109,1,0,0,115,52,0,
- 0,0,0,9,12,1,8,1,10,1,12,1,4,1,10,1,
- 12,1,14,1,16,1,4,1,4,1,12,1,8,1,18,2,
- 10,1,8,1,16,1,10,1,16,1,10,1,14,2,16,1,
- 10,1,16,2,14,1,114,103,0,0,0,99,1,0,0,0,
- 0,0,0,0,0,0,0,0,5,0,0,0,9,0,0,0,
- 67,0,0,0,115,126,0,0,0,116,0,124,0,131,1,100,
- 1,107,2,114,16,100,2,83,0,124,0,160,1,100,3,161,
- 1,92,3,125,1,125,2,125,3,124,1,114,56,124,3,160,
- 2,161,0,100,4,100,5,133,2,25,0,100,6,107,3,114,
- 60,124,0,83,0,122,12,116,3,124,0,131,1,125,4,87,
- 0,110,36,4,0,116,4,116,5,102,2,107,10,114,108,1,
- 0,1,0,1,0,124,0,100,2,100,5,133,2,25,0,125,
- 4,89,0,110,2,88,0,116,6,124,4,131,1,114,122,124,
- 4,83,0,124,0,83,0,41,7,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,73,0,0,0,78,114,71,0,
- 0,0,233,253,255,255,255,233,255,255,255,255,90,2,112,121,
- 41,7,114,22,0,0,0,114,41,0,0,0,218,5,108,111,
- 119,101,114,114,103,0,0,0,114,82,0,0,0,114,87,0,
- 0,0,114,54,0,0,0,41,5,218,13,98,121,116,101,99,
- 111,100,101,95,112,97,116,104,114,96,0,0,0,114,45,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,3,0,0,0,114,
- 3,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,149,1,0,0,115,20,
- 0,0,0,0,7,12,1,4,1,16,1,24,1,4,1,2,
- 1,12,1,18,1,18,1,114,109,0,0,0,99,1,0,0,
- 0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,
- 0,67,0,0,0,115,74,0,0,0,124,0,160,0,116,1,
- 116,2,131,1,161,1,114,48,122,10,116,3,124,0,131,1,
- 87,0,83,0,4,0,116,4,107,10,114,44,1,0,1,0,
- 1,0,89,0,113,70,88,0,110,22,124,0,160,0,116,1,
- 116,5,131,1,161,1,114,66,124,0,83,0,100,0,83,0,
- 100,0,83,0,169,1,78,41,6,218,8,101,110,100,115,119,
- 105,116,104,218,5,116,117,112,108,101,114,102,0,0,0,114,
- 98,0,0,0,114,82,0,0,0,114,89,0,0,0,41,1,
- 114,97,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,
- 100,168,1,0,0,115,16,0,0,0,0,1,14,1,2,1,
- 10,1,14,1,8,1,14,1,4,2,114,113,0,0,0,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
- 8,0,0,0,67,0,0,0,115,52,0,0,0,122,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,114,60,0,0,0,233,128,0,
- 0,0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,
- 0,0,0,41,2,114,44,0,0,0,114,52,0,0,0,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,10,
- 95,99,97,108,99,95,109,111,100,101,180,1,0,0,115,12,
- 0,0,0,0,2,2,1,14,1,14,1,10,3,8,1,114,
- 115,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,3,0,0,0,8,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,
- 122,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,
- 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,169,1,218,4,110,97,
- 109,101,41,2,114,117,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,117,
- 0,0,0,218,4,97,114,103,115,218,6,107,119,97,114,103,
- 115,169,1,218,6,109,101,116,104,111,100,114,3,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,200,1,0,0,115,18,
- 0,0,0,0,1,8,1,8,1,10,1,4,1,8,255,2,
- 1,2,255,6,2,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,0,0,0,0,3,0,0,0,
- 7,0,0,0,83,0,0,0,115,56,0,0,0,100,1,68,
- 0,93,32,125,2,116,0,124,1,124,2,131,2,114,4,116,
- 1,124,0,124,2,116,2,124,1,124,2,131,2,131,3,1,
- 0,113,4,124,0,106,3,160,4,124,1,106,3,161,1,1,
- 0,100,0,83,0,41,2,78,41,4,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,67,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,218,5,95,119,114,97,112,211,1,0,
- 0,115,8,0,0,0,0,1,8,1,10,1,20,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,134,0,0,0,
- 218,9,78,97,109,101,69,114,114,111,114,41,3,114,123,0,
- 0,0,114,124,0,0,0,114,134,0,0,0,114,3,0,0,
- 0,114,122,0,0,0,114,6,0,0,0,218,11,95,99,104,
- 101,99,107,95,110,97,109,101,192,1,0,0,115,14,0,0,
- 0,0,8,14,7,2,1,10,1,14,2,14,5,10,1,114,
- 137,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,
- 0,5,0,0,0,6,0,0,0,67,0,0,0,115,60,0,
- 0,0,124,0,160,0,124,1,161,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,160,3,124,4,160,4,124,3,100,3,
- 25,0,161,1,116,5,161,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,97,116,105,110,103,32,116,111,
- 10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108,
- 111,97,100,101,114,40,41,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,32,105,110,32,102,97,118,111,114,
- 32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95,
- 115,112,101,99,40,41,46,10,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,73,0,0,
- 0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,
- 114,22,0,0,0,114,75,0,0,0,114,76,0,0,0,114,
- 62,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,
- 105,110,103,41,5,114,119,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,3,0,0,0,
- 114,3,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,220,1,0,
- 0,115,10,0,0,0,0,10,14,1,16,1,4,1,22,1,
- 114,144,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,158,
- 0,0,0,124,0,100,1,100,2,133,2,25,0,125,3,124,
- 3,116,0,107,3,114,60,100,3,124,1,155,2,100,4,124,
- 3,155,2,157,4,125,4,116,1,160,2,100,5,124,4,161,
- 2,1,0,116,3,124,4,102,1,124,2,142,1,130,1,116,
- 4,124,0,131,1,100,6,107,0,114,102,100,7,124,1,155,
- 2,157,2,125,4,116,1,160,2,100,5,124,4,161,2,1,
- 0,116,5,124,4,131,1,130,1,116,6,124,0,100,2,100,
- 8,133,2,25,0,131,1,125,5,124,5,100,9,64,0,114,
- 154,100,10,124,5,155,2,100,11,124,1,155,2,157,4,125,
- 4,116,3,124,4,102,1,124,2,142,1,130,1,124,5,83,
- 0,41,12,97,84,2,0,0,80,101,114,102,111,114,109,32,
- 98,97,115,105,99,32,118,97,108,105,100,105,116,121,32,99,
- 104,101,99,107,105,110,103,32,111,102,32,97,32,112,121,99,
- 32,104,101,97,100,101,114,32,97,110,100,32,114,101,116,117,
- 114,110,32,116,104,101,32,102,108,97,103,115,32,102,105,101,
- 108,100,44,10,32,32,32,32,119,104,105,99,104,32,100,101,
- 116,101,114,109,105,110,101,115,32,104,111,119,32,116,104,101,
- 32,112,121,99,32,115,104,111,117,108,100,32,98,101,32,102,
- 117,114,116,104,101,114,32,118,97,108,105,100,97,116,101,100,
- 32,97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,
- 114,99,101,46,10,10,32,32,32,32,42,100,97,116,97,42,
- 32,105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,
- 32,111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,
- 46,32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,
- 116,32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,
- 32,32,32,114,101,113,117,105,114,101,100,44,32,116,104,111,
- 117,103,104,46,41,10,10,32,32,32,32,42,110,97,109,101,
- 42,32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,
- 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,
- 103,32,105,109,112,111,114,116,101,100,46,32,73,116,32,105,
- 115,32,117,115,101,100,32,102,111,114,32,108,111,103,103,105,
- 110,103,46,10,10,32,32,32,32,42,101,120,99,95,100,101,
- 116,97,105,108,115,42,32,105,115,32,97,32,100,105,99,116,
- 105,111,110,97,114,121,32,112,97,115,115,101,100,32,116,111,
- 32,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,
- 105,116,32,114,97,105,115,101,100,32,102,111,114,10,32,32,
- 32,32,105,109,112,114,111,118,101,100,32,100,101,98,117,103,
- 103,105,110,103,46,10,10,32,32,32,32,73,109,112,111,114,
+ 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,
+ 40,0,0,0,114,39,0,0,0,218,1,46,250,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,250,1,58,114,28,0,
+ 0,0,41,28,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,4,0,0,0,218,6,102,115,112,97,116,
+ 104,114,47,0,0,0,114,41,0,0,0,114,1,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,36,0,0,0,114,2,0,0,0,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,62,
+ 0,0,0,218,4,95,79,80,84,218,17,66,89,84,69,67,
+ 79,68,69,95,83,85,70,70,73,88,69,83,218,14,112,121,
+ 99,97,99,104,101,95,112,114,101,102,105,120,114,59,0,0,
+ 0,114,38,0,0,0,114,55,0,0,0,114,31,0,0,0,
+ 218,6,108,115,116,114,105,112,218,8,95,80,89,67,65,67,
+ 72,69,41,12,114,44,0,0,0,90,14,100,101,98,117,103,
+ 95,111,118,101,114,114,105,100,101,114,70,0,0,0,218,7,
+ 109,101,115,115,97,103,101,218,4,104,101,97,100,114,46,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,218,8,102,105,108,101,110,
+ 97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,
+ 111,117,114,99,101,45,1,0,0,115,72,0,0,0,0,18,
+ 8,1,6,1,2,255,4,2,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,
+ 12,1,12,9,10,1,14,5,28,1,12,4,2,1,4,1,
+ 8,1,2,253,4,5,114,97,0,0,0,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,0,
+ 67,0,0,0,115,46,1,0,0,116,0,106,1,106,2,100,
+ 1,117,0,114,20,116,3,100,2,131,1,130,1,116,4,160,
+ 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125,
+ 1,125,2,100,3,125,3,116,0,106,7,100,1,117,1,114,
+ 102,116,0,106,7,160,8,116,9,161,1,125,4,124,1,160,
+ 10,124,4,116,11,23,0,161,1,114,102,124,1,116,12,124,
+ 4,131,1,100,1,133,2,25,0,125,1,100,4,125,3,124,
+ 3,115,144,116,6,124,1,131,1,92,2,125,1,125,5,124,
+ 5,116,13,107,3,114,144,116,14,116,13,155,0,100,5,124,
+ 0,155,2,157,3,131,1,130,1,124,2,160,15,100,6,161,
+ 1,125,6,124,6,100,7,118,1,114,178,116,14,100,8,124,
+ 2,155,2,157,2,131,1,130,1,110,92,124,6,100,9,107,
+ 2,144,1,114,14,124,2,160,16,100,6,100,10,161,2,100,
+ 11,25,0,125,7,124,7,160,10,116,17,161,1,115,228,116,
+ 14,100,12,116,17,155,2,157,2,131,1,130,1,124,7,116,
+ 12,116,17,131,1,100,1,133,2,25,0,125,8,124,8,160,
+ 18,161,0,144,1,115,14,116,14,100,13,124,7,155,2,100,
+ 14,157,3,131,1,130,1,124,2,160,19,100,6,161,1,100,
+ 15,25,0,125,9,116,20,124,1,124,9,116,21,100,15,25,
+ 0,23,0,131,2,83,0,41,16,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,114,72,0,
+ 0,0,70,84,122,31,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,114,71,0,0,0,62,2,0,0,0,114,
+ 28,0,0,0,114,57,0,0,0,122,29,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,114,57,0,0,0,114,28,0,
+ 0,0,233,254,255,255,255,122,53,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,122,19,
+ 111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118,
+ 101,108,32,122,29,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,73,0,0,0,41,22,114,1,0,0,0,114,80,
+ 0,0,0,114,81,0,0,0,114,82,0,0,0,114,4,0,
+ 0,0,114,79,0,0,0,114,47,0,0,0,114,89,0,0,
+ 0,114,30,0,0,0,114,31,0,0,0,114,11,0,0,0,
+ 114,35,0,0,0,114,23,0,0,0,114,91,0,0,0,114,
+ 86,0,0,0,218,5,99,111,117,110,116,114,43,0,0,0,
+ 114,87,0,0,0,114,85,0,0,0,218,9,112,97,114,116,
+ 105,116,105,111,110,114,38,0,0,0,218,15,83,79,85,82,
+ 67,69,95,83,85,70,70,73,88,69,83,41,10,114,44,0,
+ 0,0,114,93,0,0,0,90,16,112,121,99,97,99,104,101,
+ 95,102,105,108,101,110,97,109,101,90,23,102,111,117,110,100,
+ 95,105,110,95,112,121,99,97,99,104,101,95,112,114,101,102,
+ 105,120,90,13,115,116,114,105,112,112,101,100,95,112,97,116,
+ 104,90,7,112,121,99,97,99,104,101,90,9,100,111,116,95,
+ 99,111,117,110,116,114,70,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,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,218,17,115,111,117,114,99,101,95,102,114,111,109,
+ 95,99,97,99,104,101,116,1,0,0,115,60,0,0,0,0,
+ 9,12,1,8,1,10,1,12,1,4,1,10,1,12,1,14,
+ 1,16,1,4,1,4,1,12,1,8,1,8,1,2,255,8,
+ 2,10,1,8,1,16,1,10,1,16,1,10,1,4,1,2,
+ 255,8,2,16,1,10,1,16,2,14,1,114,102,0,0,0,
+ 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,
+ 0,9,0,0,0,67,0,0,0,115,124,0,0,0,116,0,
+ 124,0,131,1,100,1,107,2,114,16,100,2,83,0,124,0,
+ 160,1,100,3,161,1,92,3,125,1,125,2,125,3,124,1,
+ 114,56,124,3,160,2,161,0,100,4,100,5,133,2,25,0,
+ 100,6,107,3,114,60,124,0,83,0,122,12,116,3,124,0,
+ 131,1,125,4,87,0,110,34,4,0,116,4,116,5,102,2,
+ 121,106,1,0,1,0,1,0,124,0,100,2,100,5,133,2,
+ 25,0,125,4,89,0,110,2,48,0,116,6,124,4,131,1,
+ 114,120,124,4,83,0,124,0,83,0,41,7,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,73,0,0,0,78,
+ 114,71,0,0,0,233,253,255,255,255,233,255,255,255,255,90,
+ 2,112,121,41,7,114,23,0,0,0,114,41,0,0,0,218,
+ 5,108,111,119,101,114,114,102,0,0,0,114,82,0,0,0,
+ 114,86,0,0,0,114,54,0,0,0,41,5,218,13,98,121,
+ 116,101,99,111,100,101,95,112,97,116,104,114,95,0,0,0,
+ 114,45,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,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,218,15,95,103,
+ 101,116,95,115,111,117,114,99,101,102,105,108,101,156,1,0,
+ 0,115,20,0,0,0,0,7,12,1,4,1,16,1,24,1,
+ 4,1,2,1,12,1,16,1,18,1,114,108,0,0,0,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
+ 8,0,0,0,67,0,0,0,115,72,0,0,0,124,0,160,
+ 0,116,1,116,2,131,1,161,1,114,46,122,10,116,3,124,
+ 0,131,1,87,0,83,0,4,0,116,4,121,42,1,0,1,
+ 0,1,0,89,0,113,68,48,0,110,22,124,0,160,0,116,
+ 1,116,5,131,1,161,1,114,64,124,0,83,0,100,0,83,
+ 0,100,0,83,0,169,1,78,41,6,218,8,101,110,100,115,
+ 119,105,116,104,218,5,116,117,112,108,101,114,101,0,0,0,
+ 114,97,0,0,0,114,82,0,0,0,114,88,0,0,0,41,
+ 1,114,96,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,218,11,95,103,101,116,95,99,97,99,104,
+ 101,100,175,1,0,0,115,16,0,0,0,0,1,14,1,2,
+ 1,10,1,12,1,8,1,14,1,4,2,114,112,0,0,0,
+ 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+ 0,8,0,0,0,67,0,0,0,115,50,0,0,0,122,14,
+ 116,0,124,0,131,1,106,1,125,1,87,0,110,22,4,0,
+ 116,2,121,36,1,0,1,0,1,0,100,1,125,1,89,0,
+ 110,2,48,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,114,60,0,0,0,233,128,0,0,
+ 0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,0,
+ 0,0,41,2,114,44,0,0,0,114,52,0,0,0,114,5,
+ 0,0,0,114,5,0,0,0,114,8,0,0,0,218,10,95,
+ 99,97,108,99,95,109,111,100,101,187,1,0,0,115,12,0,
+ 0,0,0,2,2,1,14,1,12,1,10,3,8,1,114,114,
+ 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
+ 3,0,0,0,8,0,0,0,3,0,0,0,115,66,0,0,
+ 0,100,6,135,0,102,1,100,2,100,3,132,9,125,1,122,
+ 10,116,0,106,1,125,2,87,0,110,26,4,0,116,2,121,
+ 50,1,0,1,0,1,0,100,4,100,5,132,0,125,2,89,
+ 0,110,2,48,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,0,0,0,
+ 0,4,0,0,0,4,0,0,0,31,0,0,0,115,72,0,
+ 0,0,124,1,100,0,117,0,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,103,2,124,2,162,1,82,0,
+ 105,0,124,3,164,1,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,169,1,218,
+ 4,110,97,109,101,41,2,114,116,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,116,0,0,0,218,4,97,114,103,115,218,6,107,119,
+ 97,114,103,115,169,1,218,6,109,101,116,104,111,100,114,5,
+ 0,0,0,114,8,0,0,0,218,19,95,99,104,101,99,107,
+ 95,110,97,109,101,95,119,114,97,112,112,101,114,207,1,0,
+ 0,115,18,0,0,0,0,1,8,1,8,1,10,1,4,1,
+ 8,255,2,1,2,255,6,2,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,0,0,0,0,3,
+ 0,0,0,7,0,0,0,83,0,0,0,115,56,0,0,0,
+ 100,1,68,0,93,32,125,2,116,0,124,1,124,2,131,2,
+ 114,4,116,1,124,0,124,2,116,2,124,1,124,2,131,2,
+ 131,3,1,0,113,4,124,0,106,3,160,4,124,1,106,3,
+ 161,1,1,0,100,0,83,0,41,2,78,41,4,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,67,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,218,5,95,119,114,97,112,
+ 218,1,0,0,115,8,0,0,0,0,1,8,1,10,1,20,
+ 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,133,
+ 0,0,0,218,9,78,97,109,101,69,114,114,111,114,41,3,
+ 114,122,0,0,0,114,123,0,0,0,114,133,0,0,0,114,
+ 5,0,0,0,114,121,0,0,0,114,8,0,0,0,218,11,
+ 95,99,104,101,99,107,95,110,97,109,101,199,1,0,0,115,
+ 14,0,0,0,0,8,14,7,2,1,10,1,12,2,14,5,
+ 10,1,114,136,0,0,0,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,
+ 115,60,0,0,0,124,0,160,0,124,1,161,1,92,2,125,
+ 2,125,3,124,2,100,1,117,0,114,56,116,1,124,3,131,
+ 1,114,56,100,2,125,4,116,2,160,3,124,4,160,4,124,
+ 3,100,3,25,0,161,1,116,5,161,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,97,116,105,110,103,
+ 32,116,111,10,32,32,32,32,115,101,108,102,46,102,105,110,
+ 100,95,108,111,97,100,101,114,40,41,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,32,105,110,32,102,97,
+ 118,111,114,32,111,102,32,102,105,110,100,101,114,46,102,105,
+ 110,100,95,115,112,101,99,40,41,46,10,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,
+ 73,0,0,0,41,6,218,11,102,105,110,100,95,108,111,97,
+ 100,101,114,114,23,0,0,0,114,75,0,0,0,114,76,0,
+ 0,0,114,62,0,0,0,218,13,73,109,112,111,114,116,87,
+ 97,114,110,105,110,103,41,5,114,118,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,5,
+ 0,0,0,114,5,0,0,0,114,8,0,0,0,218,17,95,
+ 102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,109,
+ 227,1,0,0,115,10,0,0,0,0,10,14,1,16,1,4,
+ 1,22,1,114,143,0,0,0,99,3,0,0,0,0,0,0,
+ 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0,
+ 0,115,166,0,0,0,124,0,100,1,100,2,133,2,25,0,
+ 125,3,124,3,116,0,107,3,114,64,100,3,124,1,155,2,
+ 100,4,124,3,155,2,157,4,125,4,116,1,160,2,100,5,
+ 124,4,161,2,1,0,116,3,124,4,102,1,105,0,124,2,
+ 164,1,142,1,130,1,116,4,124,0,131,1,100,6,107,0,
+ 114,106,100,7,124,1,155,2,157,2,125,4,116,1,160,2,
+ 100,5,124,4,161,2,1,0,116,5,124,4,131,1,130,1,
+ 116,6,124,0,100,2,100,8,133,2,25,0,131,1,125,5,
+ 124,5,100,9,64,0,114,162,100,10,124,5,155,2,100,11,
+ 124,1,155,2,157,4,125,4,116,3,124,4,102,1,105,0,
+ 124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84,
+ 2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99,
+ 32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105,
+ 110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100,
+ 101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104,
+ 101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32,
+ 32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105,
+ 110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32,
+ 115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101,
+ 114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105,
+ 110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10,
+ 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,
+ 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,
+ 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,
+ 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,
+ 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,
+ 113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41,
+ 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,
+ 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,
+ 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,
+ 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,
+ 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,
+ 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,
+ 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,
+ 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,
+ 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,
+ 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,
+ 114,111,118,101,100,32,100,101,98,117,103,103,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,119,104,101,110,32,116,104,101,32,102,108,97,103,115,
+ 10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110,
+ 118,97,108,105,100,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,32,116,114,117,110,99,97,116,101,100,
+ 46,10,10,32,32,32,32,78,114,16,0,0,0,122,20,98,
+ 97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32,
+ 105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0,
+ 122,40,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,112,121,99,32,
+ 104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233,
+ 252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108,
+ 97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65,
+ 71,73,67,95,78,85,77,66,69,82,114,134,0,0,0,218,
+ 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,
+ 101,114,117,0,0,0,114,23,0,0,0,218,8,69,79,70,
+ 69,114,114,111,114,114,27,0,0,0,41,6,114,26,0,0,
+ 0,114,116,0,0,0,218,11,101,120,99,95,100,101,116,97,
+ 105,108,115,90,5,109,97,103,105,99,114,92,0,0,0,114,
+ 2,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,218,13,95,99,108,97,115,115,105,102,121,95,112,
+ 121,99,244,1,0,0,115,28,0,0,0,0,16,12,1,8,
+ 1,16,1,12,1,16,1,12,1,10,1,12,1,8,1,16,
+ 2,8,1,16,1,16,1,114,152,0,0,0,99,5,0,0,
+ 0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,
+ 0,67,0,0,0,115,120,0,0,0,116,0,124,0,100,1,
+ 100,2,133,2,25,0,131,1,124,1,100,3,64,0,107,3,
+ 114,62,100,4,124,3,155,2,157,2,125,5,116,1,160,2,
+ 100,5,124,5,161,2,1,0,116,3,124,5,102,1,105,0,
+ 124,4,164,1,142,1,130,1,124,2,100,6,117,1,114,116,
+ 116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,2,
+ 100,3,64,0,107,3,114,116,116,3,100,4,124,3,155,2,
+ 157,2,102,1,105,0,124,4,164,1,142,1,130,1,100,6,
+ 83,0,41,8,97,7,2,0,0,86,97,108,105,100,97,116,
+ 101,32,97,32,112,121,99,32,97,103,97,105,110,115,116,32,
+ 116,104,101,32,115,111,117,114,99,101,32,108,97,115,116,45,
+ 109,111,100,105,102,105,101,100,32,116,105,109,101,46,10,10,
+ 32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,
+ 101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,
+ 101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,
+ 121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,
+ 121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,
+ 117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,
+ 117,114,99,101,95,109,116,105,109,101,42,32,105,115,32,116,
+ 104,101,32,108,97,115,116,32,109,111,100,105,102,105,101,100,
+ 32,116,105,109,101,115,116,97,109,112,32,111,102,32,116,104,
+ 101,32,115,111,117,114,99,101,32,102,105,108,101,46,10,10,
+ 32,32,32,32,42,115,111,117,114,99,101,95,115,105,122,101,
+ 42,32,105,115,32,78,111,110,101,32,111,114,32,116,104,101,
+ 32,115,105,122,101,32,111,102,32,116,104,101,32,115,111,117,
+ 114,99,101,32,102,105,108,101,32,105,110,32,98,121,116,101,
+ 115,46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,
+ 115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,
+ 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,
+ 109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,
+ 115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,
+ 10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,
+ 108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,
+ 97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,
+ 112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,
+ 114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,
+ 109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,
+ 103,46,10,10,32,32,32,32,65,110,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,119,104,101,110,32,116,104,101,32,
- 102,108,97,103,115,10,32,32,32,32,102,105,101,108,100,32,
- 105,115,32,105,110,118,97,108,105,100,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,32,116,114,117,110,
- 99,97,116,101,100,46,10,10,32,32,32,32,78,114,15,0,
- 0,0,122,20,98,97,100,32,109,97,103,105,99,32,110,117,
- 109,98,101,114,32,105,110,32,122,2,58,32,250,2,123,125,
- 233,16,0,0,0,122,40,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,112,121,99,32,104,101,97,100,101,114,32,111,102,32,233,
- 8,0,0,0,233,252,255,255,255,122,14,105,110,118,97,108,
- 105,100,32,102,108,97,103,115,32,122,4,32,105,110,32,41,
- 7,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114,
- 135,0,0,0,218,16,95,118,101,114,98,111,115,101,95,109,
- 101,115,115,97,103,101,114,118,0,0,0,114,22,0,0,0,
- 218,8,69,79,70,69,114,114,111,114,114,27,0,0,0,41,
- 6,114,26,0,0,0,114,117,0,0,0,218,11,101,120,99,
- 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,
- 93,0,0,0,114,83,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,13,95,99,108,97,115,115,
- 105,102,121,95,112,121,99,237,1,0,0,115,28,0,0,0,
- 0,16,12,1,8,1,16,1,12,1,12,1,12,1,10,1,
- 12,1,8,1,16,2,8,1,16,1,12,1,114,153,0,0,
- 0,99,5,0,0,0,0,0,0,0,0,0,0,0,6,0,
- 0,0,4,0,0,0,67,0,0,0,115,112,0,0,0,116,
- 0,124,0,100,1,100,2,133,2,25,0,131,1,124,1,100,
- 3,64,0,107,3,114,58,100,4,124,3,155,2,157,2,125,
- 5,116,1,160,2,100,5,124,5,161,2,1,0,116,3,124,
- 5,102,1,124,4,142,1,130,1,124,2,100,6,107,9,114,
- 108,116,0,124,0,100,2,100,7,133,2,25,0,131,1,124,
- 2,100,3,64,0,107,3,114,108,116,3,100,4,124,3,155,
- 2,157,2,102,1,124,4,142,1,130,1,100,6,83,0,41,
- 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97,
- 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101,
- 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100,
- 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32,
- 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,
- 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,
- 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,
- 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,
- 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,
- 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99,
- 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32,
- 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105,
- 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115,
- 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32,
- 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105,
- 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105,
- 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101,
- 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10,
- 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,
- 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,
- 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,
- 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,
- 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,
- 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,
- 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,
- 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,
- 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,
- 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,
- 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,
- 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114,
- 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102,
- 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115,
- 32,115,116,97,108,101,46,10,10,32,32,32,32,114,147,0,
- 0,0,233,12,0,0,0,114,14,0,0,0,122,22,98,121,
- 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,
- 102,111,114,32,114,145,0,0,0,78,114,146,0,0,0,41,
- 4,114,27,0,0,0,114,135,0,0,0,114,150,0,0,0,
- 114,118,0,0,0,41,6,114,26,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,117,0,0,0,114,152,0,0,
- 0,114,93,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,23,95,118,97,108,105,100,97,116,101,
- 95,116,105,109,101,115,116,97,109,112,95,112,121,99,14,2,
- 0,0,115,16,0,0,0,0,19,24,1,10,1,12,1,12,
- 1,8,1,22,255,2,2,114,157,0,0,0,99,4,0,0,
- 0,0,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,100,1,100,2,
- 133,2,25,0,124,1,107,3,114,34,116,0,100,3,124,2,
- 155,2,157,2,102,1,124,3,142,1,130,1,100,4,83,0,
- 41,5,97,243,1,0,0,86,97,108,105,100,97,116,101,32,
- 97,32,104,97,115,104,45,98,97,115,101,100,32,112,121,99,
- 32,98,121,32,99,104,101,99,107,105,110,103,32,116,104,101,
- 32,114,101,97,108,32,115,111,117,114,99,101,32,104,97,115,
- 104,32,97,103,97,105,110,115,116,32,116,104,101,32,111,110,
- 101,32,105,110,10,32,32,32,32,116,104,101,32,112,121,99,
- 32,104,101,97,100,101,114,46,10,10,32,32,32,32,42,100,
- 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,
- 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,
- 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,
- 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,
- 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,
- 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,104,
- 97,115,104,42,32,105,115,32,116,104,101,32,105,109,112,111,
- 114,116,108,105,98,46,117,116,105,108,46,115,111,117,114,99,
- 101,95,104,97,115,104,40,41,32,111,102,32,116,104,101,32,
- 115,111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,
- 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,
- 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,
- 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,
- 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,
- 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,
- 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,
- 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,
- 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,
- 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,
- 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,
- 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,
- 32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,
- 32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,
- 101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,
- 97,108,101,46,10,10,32,32,32,32,114,147,0,0,0,114,
- 146,0,0,0,122,46,104,97,115,104,32,105,110,32,98,121,
- 116,101,99,111,100,101,32,100,111,101,115,110,39,116,32,109,
- 97,116,99,104,32,104,97,115,104,32,111,102,32,115,111,117,
- 114,99,101,32,78,41,1,114,118,0,0,0,41,4,114,26,
- 0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,
- 114,117,0,0,0,114,152,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,18,95,118,97,108,105,
- 100,97,116,101,95,104,97,115,104,95,112,121,99,42,2,0,
- 0,115,12,0,0,0,0,17,16,1,2,1,8,255,2,2,
- 2,254,114,159,0,0,0,99,4,0,0,0,0,0,0,0,
- 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
- 115,80,0,0,0,116,0,160,1,124,0,161,1,125,4,116,
- 2,124,4,116,3,131,2,114,56,116,4,160,5,100,1,124,
- 2,161,2,1,0,124,3,100,2,107,9,114,52,116,6,160,
- 7,124,4,124,3,161,2,1,0,124,4,83,0,116,8,100,
- 3,160,9,124,2,161,1,124,1,124,2,100,4,141,3,130,
- 1,100,2,83,0,41,5,122,35,67,111,109,112,105,108,101,
- 32,98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,
- 110,100,32,105,110,32,97,32,112,121,99,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,169,2,114,
- 117,0,0,0,114,44,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,135,0,0,0,114,150,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,118,0,0,0,114,62,0,0,0,41,
- 5,114,26,0,0,0,114,117,0,0,0,114,107,0,0,0,
- 114,108,0,0,0,218,4,99,111,100,101,114,3,0,0,0,
- 114,3,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,66,2,0,
- 0,115,20,0,0,0,0,2,10,1,10,1,12,1,8,1,
- 12,1,4,2,10,1,2,0,2,255,114,166,0,0,0,114,
- 73,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0,
- 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3,
- 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1,
- 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1,
- 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1,
- 161,1,1,0,124,3,83,0,41,2,122,43,80,114,111,100,
- 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114,
- 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115,
- 101,100,32,112,121,99,46,114,73,0,0,0,41,6,218,9,
- 98,121,116,101,97,114,114,97,121,114,149,0,0,0,218,6,
- 101,120,116,101,110,100,114,20,0,0,0,114,161,0,0,0,
- 218,5,100,117,109,112,115,41,4,114,165,0,0,0,218,5,
- 109,116,105,109,101,114,156,0,0,0,114,26,0,0,0,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,22,
- 95,99,111,100,101,95,116,111,95,116,105,109,101,115,116,97,
- 109,112,95,112,121,99,79,2,0,0,115,12,0,0,0,0,
- 2,8,1,14,1,14,1,14,1,16,1,114,171,0,0,0,
- 84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,
- 0,0,5,0,0,0,67,0,0,0,115,80,0,0,0,116,
- 0,116,1,131,1,125,3,100,1,124,2,100,1,62,0,66,
- 0,125,4,124,3,160,2,116,3,124,4,131,1,161,1,1,
- 0,116,4,124,1,131,1,100,2,107,2,115,50,116,5,130,
- 1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,
- 6,160,7,124,0,161,1,161,1,1,0,124,3,83,0,41,
- 3,122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,
- 97,116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,
- 97,115,101,100,32,112,121,99,46,114,39,0,0,0,114,147,
- 0,0,0,41,8,114,167,0,0,0,114,149,0,0,0,114,
- 168,0,0,0,114,20,0,0,0,114,22,0,0,0,114,23,
- 0,0,0,114,161,0,0,0,114,169,0,0,0,41,5,114,
- 165,0,0,0,114,158,0,0,0,90,7,99,104,101,99,107,
- 101,100,114,26,0,0,0,114,83,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,
- 100,101,95,116,111,95,104,97,115,104,95,112,121,99,89,2,
+ 32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,
+ 32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,
+ 114,146,0,0,0,233,12,0,0,0,114,15,0,0,0,122,
+ 22,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,
+ 108,101,32,102,111,114,32,114,144,0,0,0,78,114,145,0,
+ 0,0,41,4,114,27,0,0,0,114,134,0,0,0,114,149,
+ 0,0,0,114,117,0,0,0,41,6,114,26,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,116,0,0,0,114,
+ 151,0,0,0,114,92,0,0,0,114,5,0,0,0,114,5,
+ 0,0,0,114,8,0,0,0,218,23,95,118,97,108,105,100,
+ 97,116,101,95,116,105,109,101,115,116,97,109,112,95,112,121,
+ 99,21,2,0,0,115,16,0,0,0,0,19,24,1,10,1,
+ 12,1,16,1,8,1,22,255,2,2,114,156,0,0,0,99,
+ 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+ 4,0,0,0,67,0,0,0,115,42,0,0,0,124,0,100,
+ 1,100,2,133,2,25,0,124,1,107,3,114,38,116,0,100,
+ 3,124,2,155,2,157,2,102,1,105,0,124,3,164,1,142,
+ 1,130,1,100,4,83,0,41,5,97,243,1,0,0,86,97,
+ 108,105,100,97,116,101,32,97,32,104,97,115,104,45,98,97,
+ 115,101,100,32,112,121,99,32,98,121,32,99,104,101,99,107,
+ 105,110,103,32,116,104,101,32,114,101,97,108,32,115,111,117,
+ 114,99,101,32,104,97,115,104,32,97,103,97,105,110,115,116,
+ 32,116,104,101,32,111,110,101,32,105,110,10,32,32,32,32,
+ 116,104,101,32,112,121,99,32,104,101,97,100,101,114,46,10,
+ 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,
+ 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,
+ 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,
+ 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,
+ 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,
+ 113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,
+ 111,117,114,99,101,95,104,97,115,104,42,32,105,115,32,116,
+ 104,101,32,105,109,112,111,114,116,108,105,98,46,117,116,105,
+ 108,46,115,111,117,114,99,101,95,104,97,115,104,40,41,32,
+ 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,
+ 108,101,46,10,10,32,32,32,32,42,110,97,109,101,42,32,
+ 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,
+ 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,
+ 105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,
+ 117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,
+ 46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,
+ 105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,
+ 110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,
+ 109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,
+ 32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,
+ 105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,
+ 110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111,
+ 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,
+ 100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,
+ 101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,
+ 32,114,146,0,0,0,114,145,0,0,0,122,46,104,97,115,
+ 104,32,105,110,32,98,121,116,101,99,111,100,101,32,100,111,
+ 101,115,110,39,116,32,109,97,116,99,104,32,104,97,115,104,
+ 32,111,102,32,115,111,117,114,99,101,32,78,41,1,114,117,
+ 0,0,0,41,4,114,26,0,0,0,218,11,115,111,117,114,
+ 99,101,95,104,97,115,104,114,116,0,0,0,114,151,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 218,18,95,118,97,108,105,100,97,116,101,95,104,97,115,104,
+ 95,112,121,99,49,2,0,0,115,12,0,0,0,0,17,16,
+ 1,2,1,8,255,4,2,2,254,114,158,0,0,0,99,4,
+ 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,
+ 0,0,0,67,0,0,0,115,80,0,0,0,116,0,160,1,
+ 124,0,161,1,125,4,116,2,124,4,116,3,131,2,114,56,
+ 116,4,160,5,100,1,124,2,161,2,1,0,124,3,100,2,
+ 117,1,114,52,116,6,160,7,124,4,124,3,161,2,1,0,
+ 124,4,83,0,116,8,100,3,160,9,124,2,161,1,124,1,
+ 124,2,100,4,141,3,130,1,100,2,83,0,41,5,122,35,
+ 67,111,109,112,105,108,101,32,98,121,116,101,99,111,100,101,
+ 32,97,115,32,102,111,117,110,100,32,105,110,32,97,32,112,
+ 121,99,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,169,2,114,116,0,0,0,114,44,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,134,0,0,0,114,
+ 149,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,117,0,0,
+ 0,114,62,0,0,0,41,5,114,26,0,0,0,114,116,0,
+ 0,0,114,106,0,0,0,114,107,0,0,0,218,4,99,111,
+ 100,101,114,5,0,0,0,114,5,0,0,0,114,8,0,0,
+ 0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,
+ 99,111,100,101,73,2,0,0,115,18,0,0,0,0,2,10,
+ 1,10,1,12,1,8,1,12,1,4,2,10,1,4,255,114,
+ 165,0,0,0,114,73,0,0,0,99,3,0,0,0,0,0,
+ 0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,
+ 0,0,115,70,0,0,0,116,0,116,1,131,1,125,3,124,
+ 3,160,2,116,3,100,1,131,1,161,1,1,0,124,3,160,
+ 2,116,3,124,1,131,1,161,1,1,0,124,3,160,2,116,
+ 3,124,2,131,1,161,1,1,0,124,3,160,2,116,4,160,
+ 5,124,0,161,1,161,1,1,0,124,3,83,0,41,2,122,
+ 43,80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,
+ 97,32,102,111,114,32,97,32,116,105,109,101,115,116,97,109,
+ 112,45,98,97,115,101,100,32,112,121,99,46,114,73,0,0,
+ 0,41,6,218,9,98,121,116,101,97,114,114,97,121,114,148,
+ 0,0,0,218,6,101,120,116,101,110,100,114,21,0,0,0,
+ 114,160,0,0,0,218,5,100,117,109,112,115,41,4,114,164,
+ 0,0,0,218,5,109,116,105,109,101,114,155,0,0,0,114,
+ 26,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,
+ 109,101,115,116,97,109,112,95,112,121,99,86,2,0,0,115,
+ 12,0,0,0,0,2,8,1,14,1,14,1,14,1,16,1,
+ 114,170,0,0,0,84,99,3,0,0,0,0,0,0,0,0,
+ 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,
+ 80,0,0,0,116,0,116,1,131,1,125,3,100,1,124,2,
+ 100,1,62,0,66,0,125,4,124,3,160,2,116,3,124,4,
+ 131,1,161,1,1,0,116,4,124,1,131,1,100,2,107,2,
+ 115,50,74,0,130,1,124,3,160,2,124,1,161,1,1,0,
+ 124,3,160,2,116,5,160,6,124,0,161,1,161,1,1,0,
+ 124,3,83,0,41,3,122,38,80,114,111,100,117,99,101,32,
+ 116,104,101,32,100,97,116,97,32,102,111,114,32,97,32,104,
+ 97,115,104,45,98,97,115,101,100,32,112,121,99,46,114,39,
+ 0,0,0,114,146,0,0,0,41,7,114,166,0,0,0,114,
+ 148,0,0,0,114,167,0,0,0,114,21,0,0,0,114,23,
+ 0,0,0,114,160,0,0,0,114,168,0,0,0,41,5,114,
+ 164,0,0,0,114,157,0,0,0,90,7,99,104,101,99,107,
+ 101,100,114,26,0,0,0,114,2,0,0,0,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,218,17,95,99,111,
+ 100,101,95,116,111,95,104,97,115,104,95,112,121,99,96,2,
0,0,115,14,0,0,0,0,2,8,1,12,1,14,1,16,
- 1,10,1,16,1,114,172,0,0,0,99,1,0,0,0,0,
+ 1,10,1,16,1,114,171,0,0,0,99,1,0,0,0,0,
0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,
0,0,0,115,62,0,0,0,100,1,100,2,108,0,125,1,
116,1,160,2,124,0,161,1,106,3,125,2,124,1,160,4,
@@ -879,1856 +888,1847 @@
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,173,0,0,0,90,21,115,111,117,114,99,101,95,
+ 101,115,114,172,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,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101,
- 95,115,111,117,114,99,101,100,2,0,0,115,10,0,0,0,
- 0,5,8,1,12,1,10,1,12,1,114,177,0,0,0,169,
- 2,114,141,0,0,0,218,26,115,117,98,109,111,100,117,108,
+ 101,95,100,101,99,111,100,101,114,114,5,0,0,0,114,5,
+ 0,0,0,114,8,0,0,0,218,13,100,101,99,111,100,101,
+ 95,115,111,117,114,99,101,107,2,0,0,115,10,0,0,0,
+ 0,5,8,1,12,1,10,1,12,1,114,176,0,0,0,169,
+ 2,114,140,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,0,0,0,0,2,0,0,0,9,
- 0,0,0,8,0,0,0,67,0,0,0,115,16,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,122,14,124,2,160,1,124,0,161,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,160,4,
- 124,1,161,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,154,116,8,131,0,68,0,93,42,92,2,125,5,
- 125,6,124,1,160,9,116,10,124,6,131,1,161,1,114,106,
- 124,5,124,0,124,1,131,2,125,2,124,2,124,4,95,11,
- 1,0,113,154,113,106,100,1,83,0,124,3,116,12,107,8,
- 114,220,116,0,124,2,100,6,131,2,114,226,122,14,124,2,
- 160,13,124,0,161,1,125,7,87,0,110,20,4,0,116,2,
- 107,10,114,206,1,0,1,0,1,0,89,0,113,226,88,0,
- 124,7,114,226,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,12,124,1,
- 144,1,114,12,116,15,124,1,131,1,100,7,25,0,125,8,
- 124,4,106,14,160,16,124,8,161,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,169,1,
- 218,6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,
- 99,107,97,103,101,114,73,0,0,0,41,17,114,129,0,0,
- 0,114,180,0,0,0,114,118,0,0,0,114,2,0,0,0,
- 114,79,0,0,0,114,135,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,111,0,0,0,114,112,0,0,0,114,141,0,0,
- 0,218,9,95,80,79,80,85,76,65,84,69,114,183,0,0,
- 0,114,179,0,0,0,114,47,0,0,0,218,6,97,112,112,
- 101,110,100,41,9,114,117,0,0,0,90,8,108,111,99,97,
- 116,105,111,110,114,141,0,0,0,114,179,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,183,0,0,
- 0,90,7,100,105,114,110,97,109,101,114,3,0,0,0,114,
- 3,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,117,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,14,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,191,0,0,0,99,0,
- 0,0,0,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,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,0,
- 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
- 56,0,0,0,122,16,116,0,160,1,116,0,106,2,124,1,
- 161,2,87,0,83,0,4,0,116,3,107,10,114,50,1,0,
- 1,0,1,0,116,0,160,1,116,0,106,4,124,1,161,2,
- 6,0,89,0,83,0,88,0,100,0,83,0,114,110,0,0,
- 0,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,50,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,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,14,95,111,
- 112,101,110,95,114,101,103,105,115,116,114,121,197,2,0,0,
- 115,8,0,0,0,0,2,2,1,16,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,0,0,0,0,
- 6,0,0,0,9,0,0,0,67,0,0,0,115,114,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,122,38,124,0,160,6,124,3,161,1,143,18,125,4,116,
- 7,160,8,124,4,100,4,161,2,125,5,87,0,53,0,81,
- 0,82,0,88,0,87,0,110,22,4,0,116,9,107,10,114,
- 108,1,0,1,0,1,0,89,0,100,0,83,0,88,0,124,
- 5,83,0,41,5,78,122,5,37,100,46,37,100,114,28,0,
- 0,0,41,2,114,140,0,0,0,90,11,115,121,115,95,118,
- 101,114,115,105,111,110,114,40,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,62,0,0,
- 0,114,8,0,0,0,218,12,118,101,114,115,105,111,110,95,
- 105,110,102,111,114,195,0,0,0,114,193,0,0,0,90,10,
- 81,117,101,114,121,86,97,108,117,101,114,50,0,0,0,41,
- 6,114,194,0,0,0,114,140,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,3,
- 0,0,0,114,3,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,204,
- 2,0,0,115,24,0,0,0,0,2,6,1,8,2,6,1,
- 6,1,16,255,6,2,2,1,12,1,26,1,14,1,8,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,0,0,0,0,8,0,0,0,8,0,0,0,67,0,
- 0,0,115,122,0,0,0,124,0,160,0,124,1,161,1,125,
- 4,124,4,100,0,107,8,114,22,100,0,83,0,122,12,116,
- 1,124,4,131,1,1,0,87,0,110,22,4,0,116,2,107,
- 10,114,56,1,0,1,0,1,0,89,0,100,0,83,0,88,
- 0,116,3,131,0,68,0,93,52,92,2,125,5,125,6,124,
- 4,160,4,116,5,124,6,131,1,161,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,2,0,1,0,83,0,113,64,100,0,83,
- 0,41,2,78,114,181,0,0,0,41,8,114,201,0,0,0,
- 114,49,0,0,0,114,50,0,0,0,114,185,0,0,0,114,
- 111,0,0,0,114,112,0,0,0,114,135,0,0,0,218,16,
- 115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114,
- 41,8,114,194,0,0,0,114,140,0,0,0,114,44,0,0,
- 0,218,6,116,97,114,103,101,116,114,200,0,0,0,114,141,
- 0,0,0,114,190,0,0,0,114,188,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,9,102,105,
- 110,100,95,115,112,101,99,219,2,0,0,115,28,0,0,0,
- 0,2,10,1,8,1,4,1,2,1,12,1,14,1,8,1,
- 14,1,14,1,6,1,8,1,2,254,6,3,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,0,0,0,0,4,0,0,0,4,0,
- 0,0,67,0,0,0,115,34,0,0,0,124,0,160,0,124,
- 1,124,2,161,2,125,3,124,3,100,1,107,9,114,26,124,
- 3,106,1,83,0,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,169,2,
- 114,204,0,0,0,114,141,0,0,0,169,4,114,194,0,0,
- 0,114,140,0,0,0,114,44,0,0,0,114,188,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 11,102,105,110,100,95,109,111,100,117,108,101,235,2,0,0,
- 115,8,0,0,0,0,7,12,1,8,1,6,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,126,0,0,0,114,125,
- 0,0,0,114,127,0,0,0,114,128,0,0,0,114,198,0,
- 0,0,114,197,0,0,0,114,196,0,0,0,218,11,99,108,
- 97,115,115,109,101,116,104,111,100,114,195,0,0,0,114,201,
- 0,0,0,114,204,0,0,0,114,207,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,192,0,0,0,185,2,0,0,115,28,0,0,0,8,
- 2,4,3,2,255,2,4,2,255,2,3,4,2,2,1,10,
- 6,2,1,10,14,2,1,12,15,2,1,114,192,0,0,0,
+ 0,0,0,8,0,0,0,67,0,0,0,115,12,1,0,0,
+ 124,1,100,1,117,0,114,58,100,2,125,1,116,0,124,2,
+ 100,3,131,2,114,68,122,14,124,2,160,1,124,0,161,1,
+ 125,1,87,0,113,68,4,0,116,2,121,54,1,0,1,0,
+ 1,0,89,0,113,68,48,0,110,10,116,3,160,4,124,1,
+ 161,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,117,0,
+ 114,152,116,8,131,0,68,0,93,42,92,2,125,5,125,6,
+ 124,1,160,9,116,10,124,6,131,1,161,1,114,104,124,5,
+ 124,0,124,1,131,2,125,2,124,2,124,4,95,11,1,0,
+ 113,152,113,104,100,1,83,0,124,3,116,12,117,0,114,216,
+ 116,0,124,2,100,6,131,2,114,222,122,14,124,2,160,13,
+ 124,0,161,1,125,7,87,0,110,18,4,0,116,2,121,202,
+ 1,0,1,0,1,0,89,0,113,222,48,0,124,7,114,222,
+ 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,8,124,1,144,1,114,8,
+ 116,15,124,1,131,1,100,7,25,0,125,8,124,4,106,14,
+ 160,16,124,8,161,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,169,1,218,6,111,114,
+ 105,103,105,110,84,218,10,105,115,95,112,97,99,107,97,103,
+ 101,114,73,0,0,0,41,17,114,128,0,0,0,114,179,0,
+ 0,0,114,117,0,0,0,114,4,0,0,0,114,79,0,0,
+ 0,114,134,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,110,
+ 0,0,0,114,111,0,0,0,114,140,0,0,0,218,9,95,
+ 80,79,80,85,76,65,84,69,114,182,0,0,0,114,178,0,
+ 0,0,114,47,0,0,0,218,6,97,112,112,101,110,100,41,
+ 9,114,116,0,0,0,90,8,108,111,99,97,116,105,111,110,
+ 114,140,0,0,0,114,178,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,182,0,0,0,90,7,100,
+ 105,114,110,97,109,101,114,5,0,0,0,114,5,0,0,0,
+ 114,8,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,124,2,
+ 0,0,115,62,0,0,0,0,12,8,4,4,1,10,2,2,
+ 1,14,1,12,1,8,2,10,8,16,1,6,3,8,1,14,
+ 1,14,1,10,1,6,1,6,2,4,3,8,2,10,1,2,
+ 1,14,1,12,1,6,2,4,1,8,2,6,1,12,1,6,
+ 1,12,1,12,2,114,190,0,0,0,99,0,0,0,0,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,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,0,0,0,0,2,
+ 0,0,0,8,0,0,0,67,0,0,0,115,54,0,0,0,
+ 122,16,116,0,160,1,116,0,106,2,124,1,161,2,87,0,
+ 83,0,4,0,116,3,121,48,1,0,1,0,1,0,116,0,
+ 160,1,116,0,106,4,124,1,161,2,6,0,89,0,83,0,
+ 48,0,100,0,83,0,114,109,0,0,0,41,5,218,6,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,50,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,7,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,218,14,95,111,112,101,110,95,114,101,103,
+ 105,115,116,114,121,204,2,0,0,115,8,0,0,0,0,2,
+ 2,1,16,1,12,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,0,0,0,0,6,0,0,0,8,0,0,
+ 0,67,0,0,0,115,132,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,122,58,124,0,160,6,
+ 124,3,161,1,143,28,125,4,116,7,160,8,124,4,100,4,
+ 161,2,125,5,87,0,100,0,4,0,4,0,131,3,1,0,
+ 110,16,49,0,115,94,48,0,1,0,1,0,1,0,89,0,
+ 1,0,87,0,110,20,4,0,116,9,121,126,1,0,1,0,
+ 1,0,89,0,100,0,83,0,48,0,124,5,83,0,41,5,
+ 78,122,5,37,100,46,37,100,114,28,0,0,0,41,2,114,
+ 139,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,
+ 110,114,40,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,62,0,0,0,114,1,0,0,
+ 0,218,12,118,101,114,115,105,111,110,95,105,110,102,111,114,
+ 194,0,0,0,114,192,0,0,0,90,10,81,117,101,114,121,
+ 86,97,108,117,101,114,50,0,0,0,41,6,114,193,0,0,
+ 0,114,139,0,0,0,90,12,114,101,103,105,115,116,114,121,
+ 95,107,101,121,114,7,0,0,0,90,4,104,107,101,121,218,
+ 8,102,105,108,101,112,97,116,104,114,5,0,0,0,114,5,
+ 0,0,0,114,8,0,0,0,218,16,95,115,101,97,114,99,
+ 104,95,114,101,103,105,115,116,114,121,211,2,0,0,115,24,
+ 0,0,0,0,2,6,1,8,2,6,1,6,1,16,255,6,
+ 2,2,1,12,1,46,1,12,1,8,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,0,0,0,
+ 0,8,0,0,0,8,0,0,0,67,0,0,0,115,120,0,
+ 0,0,124,0,160,0,124,1,161,1,125,4,124,4,100,0,
+ 117,0,114,22,100,0,83,0,122,12,116,1,124,4,131,1,
+ 1,0,87,0,110,20,4,0,116,2,121,54,1,0,1,0,
+ 1,0,89,0,100,0,83,0,48,0,116,3,131,0,68,0,
+ 93,52,92,2,125,5,125,6,124,4,160,4,116,5,124,6,
+ 131,1,161,1,114,62,116,6,106,7,124,1,124,5,124,1,
+ 124,4,131,2,124,4,100,1,141,3,125,7,124,7,2,0,
+ 1,0,83,0,113,62,100,0,83,0,41,2,78,114,180,0,
+ 0,0,41,8,114,200,0,0,0,114,49,0,0,0,114,50,
+ 0,0,0,114,184,0,0,0,114,110,0,0,0,114,111,0,
+ 0,0,114,134,0,0,0,218,16,115,112,101,99,95,102,114,
+ 111,109,95,108,111,97,100,101,114,41,8,114,193,0,0,0,
+ 114,139,0,0,0,114,44,0,0,0,218,6,116,97,114,103,
+ 101,116,114,199,0,0,0,114,140,0,0,0,114,189,0,0,
+ 0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,218,9,102,105,110,100,95,115,112,101,99,
+ 226,2,0,0,115,28,0,0,0,0,2,10,1,8,1,4,
+ 1,2,1,12,1,12,1,8,1,14,1,14,1,6,1,8,
+ 1,2,254,6,3,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,0,
+ 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,
+ 34,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,
+ 124,3,100,1,117,1,114,26,124,3,106,1,83,0,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,169,2,114,203,0,0,0,114,140,
+ 0,0,0,169,4,114,193,0,0,0,114,139,0,0,0,114,
+ 44,0,0,0,114,187,0,0,0,114,5,0,0,0,114,5,
+ 0,0,0,114,8,0,0,0,218,11,102,105,110,100,95,109,
+ 111,100,117,108,101,242,2,0,0,115,8,0,0,0,0,7,
+ 12,1,8,1,6,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,125,0,0,0,114,124,0,0,0,114,126,0,0,
+ 0,114,127,0,0,0,114,197,0,0,0,114,196,0,0,0,
+ 114,195,0,0,0,218,11,99,108,97,115,115,109,101,116,104,
+ 111,100,114,194,0,0,0,114,200,0,0,0,114,203,0,0,
+ 0,114,206,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,114,191,0,0,0,192,
+ 2,0,0,115,28,0,0,0,8,2,4,3,2,255,2,4,
+ 2,255,2,3,4,2,2,1,10,6,2,1,10,14,2,1,
+ 12,15,2,1,114,191,0,0,0,99,0,0,0,0,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,0,0,0,0,5,0,0,0,4,0,
+ 0,0,67,0,0,0,115,64,0,0,0,116,0,124,0,160,
+ 1,124,1,161,1,131,1,100,1,25,0,125,2,124,2,160,
+ 2,100,2,100,1,161,2,100,3,25,0,125,3,124,1,160,
+ 3,100,2,161,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,39,0,0,
+ 0,114,71,0,0,0,114,73,0,0,0,114,28,0,0,0,
+ 218,8,95,95,105,110,105,116,95,95,41,4,114,47,0,0,
+ 0,114,179,0,0,0,114,43,0,0,0,114,41,0,0,0,
+ 41,5,114,118,0,0,0,114,139,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,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,114,182,0,0,0,5,
+ 3,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,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,169,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,5,0,0,0,
+ 169,2,114,118,0,0,0,114,187,0,0,0,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,218,13,99,114,101,
+ 97,116,101,95,109,111,100,117,108,101,13,3,0,0,115,2,
+ 0,0,0,0,1,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,0,0,0,0,3,
+ 0,0,0,5,0,0,0,67,0,0,0,115,56,0,0,0,
+ 124,0,160,0,124,1,106,1,161,1,125,2,124,2,100,1,
+ 117,0,114,36,116,2,100,2,160,3,124,1,106,1,161,1,
+ 131,1,130,1,116,4,160,5,116,6,124,2,124,1,106,7,
+ 161,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,125,0,0,0,114,117,0,0,0,114,62,0,0,
+ 0,114,134,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,131,0,0,0,41,3,114,118,
+ 0,0,0,218,6,109,111,100,117,108,101,114,164,0,0,0,
+ 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,
+ 11,101,120,101,99,95,109,111,100,117,108,101,16,3,0,0,
+ 115,12,0,0,0,0,2,12,1,8,1,6,1,4,255,6,
+ 2,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,0,0,0,0,2,0,0,0,4,0,0,
+ 0,67,0,0,0,115,12,0,0,0,116,0,160,1,124,0,
+ 124,1,161,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,134,0,0,0,218,17,95,108,111,
+ 97,100,95,109,111,100,117,108,101,95,115,104,105,109,169,2,
+ 114,118,0,0,0,114,139,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,218,11,108,111,97,100,95,
+ 109,111,100,117,108,101,24,3,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,
+ 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,127,
+ 0,0,0,114,182,0,0,0,114,212,0,0,0,114,217,0,
+ 0,0,114,220,0,0,0,114,5,0,0,0,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,114,208,0,0,0,
+ 0,3,0,0,115,10,0,0,0,8,2,4,3,8,8,8,
+ 3,8,8,114,208,0,0,0,99,0,0,0,0,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,11,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,18,218,12,83,111,117,114,99,101,76,111,97,100,101,114,
+ 99,2,0,0,0,0,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,165,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,32,40,97,32,115,116,114,41,46,10,10,32,
+ 32,32,32,32,32,32,32,82,97,105,115,101,115,32,79,83,
+ 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,114,50,0,0,0,169,2,114,118,0,0,0,114,44,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,218,10,112,97,116,104,95,109,116,105,109,101,31,3,
+ 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,0,0,0,0,2,
+ 0,0,0,4,0,0,0,67,0,0,0,115,14,0,0,0,
+ 100,1,124,0,160,0,124,1,161,1,105,1,83,0,41,2,
+ 97,158,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,
+ 10,32,32,32,32,32,32,32,32,112,97,116,104,32,40,97,
+ 32,115,116,114,41,46,10,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,79,83,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,169,0,0,0,41,1,114,223,0,0,0,114,
+ 222,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,218,10,112,97,116,104,95,115,116,97,116,115,39,
+ 3,0,0,115,2,0,0,0,0,12,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,0,0,0,0,
+ 4,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,
+ 0,124,0,160,0,124,2,124,3,161,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,118,0,0,0,114,107,0,0,0,90,10,99,
+ 97,99,104,101,95,112,97,116,104,114,26,0,0,0,114,5,
+ 0,0,0,114,5,0,0,0,114,8,0,0,0,218,15,95,
+ 99,97,99,104,101,95,98,121,116,101,99,111,100,101,53,3,
+ 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,
+ 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,5,0,0,0,41,3,114,118,0,0,0,
+ 114,44,0,0,0,114,26,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,114,225,0,0,0,63,3,
+ 0,0,115,2,0,0,0,0,1,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,0,0,0,0,5,0,0,
+ 0,10,0,0,0,67,0,0,0,115,84,0,0,0,124,0,
+ 160,0,124,1,161,1,125,2,122,14,124,0,160,1,124,2,
+ 161,1,125,3,87,0,110,50,4,0,116,2,121,74,1,0,
+ 125,4,1,0,122,26,116,3,100,1,124,1,100,2,141,2,
+ 124,4,130,2,87,0,89,0,100,3,125,4,126,4,110,10,
+ 100,3,125,4,126,4,48,0,48,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,114,115,0,0,0,78,41,5,114,179,0,0,0,
+ 218,8,103,101,116,95,100,97,116,97,114,50,0,0,0,114,
+ 117,0,0,0,114,176,0,0,0,41,5,114,118,0,0,0,
+ 114,139,0,0,0,114,44,0,0,0,114,174,0,0,0,218,
+ 3,101,120,99,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,70,
+ 3,0,0,115,20,0,0,0,0,2,10,1,2,1,14,1,
+ 14,1,4,1,2,255,4,1,2,255,24,2,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,104,0,0,0,41,1,218,9,95,111,
+ 112,116,105,109,105,122,101,99,3,0,0,0,0,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,215,0,0,0,84,41,2,218,12,100,111,110,116,95,
+ 105,110,104,101,114,105,116,114,83,0,0,0,41,3,114,134,
+ 0,0,0,114,214,0,0,0,218,7,99,111,109,112,105,108,
+ 101,41,4,114,118,0,0,0,114,26,0,0,0,114,44,0,
+ 0,0,114,230,0,0,0,114,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,218,14,115,111,117,114,99,101,95,116,
+ 111,95,99,111,100,101,80,3,0,0,115,6,0,0,0,0,
+ 5,12,1,4,255,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,0,0,0,0,15,
+ 0,0,0,9,0,0,0,67,0,0,0,115,24,2,0,0,
+ 124,0,160,0,124,1,161,1,125,2,100,1,125,3,100,1,
+ 125,4,100,1,125,5,100,2,125,6,100,3,125,7,122,12,
+ 116,1,124,2,131,1,125,8,87,0,110,24,4,0,116,2,
+ 121,66,1,0,1,0,1,0,100,1,125,8,89,0,144,1,
+ 110,42,48,0,122,14,124,0,160,3,124,2,161,1,125,9,
+ 87,0,110,20,4,0,116,4,121,102,1,0,1,0,1,0,
+ 89,0,144,1,110,6,48,0,116,5,124,9,100,4,25,0,
+ 131,1,125,3,122,14,124,0,160,6,124,8,161,1,125,10,
+ 87,0,110,18,4,0,116,4,121,148,1,0,1,0,1,0,
+ 89,0,110,216,48,0,124,1,124,8,100,5,156,2,125,11,
+ 122,148,116,7,124,10,124,1,124,11,131,3,125,12,116,8,
+ 124,10,131,1,100,6,100,1,133,2,25,0,125,13,124,12,
+ 100,7,64,0,100,8,107,3,125,6,124,6,144,1,114,30,
+ 124,12,100,9,64,0,100,8,107,3,125,7,116,9,106,10,
+ 100,10,107,3,144,1,114,50,124,7,115,248,116,9,106,10,
+ 100,11,107,2,144,1,114,50,124,0,160,6,124,2,161,1,
+ 125,4,116,9,160,11,116,12,124,4,161,2,125,5,116,13,
+ 124,10,124,5,124,1,124,11,131,4,1,0,110,20,116,14,
+ 124,10,124,3,124,9,100,12,25,0,124,1,124,11,131,5,
+ 1,0,87,0,110,24,4,0,116,15,116,16,102,2,144,1,
+ 121,76,1,0,1,0,1,0,89,0,110,32,48,0,116,17,
+ 160,18,100,13,124,8,124,2,161,3,1,0,116,19,124,13,
+ 124,1,124,8,124,2,100,14,141,4,83,0,124,4,100,1,
+ 117,0,144,1,114,128,124,0,160,6,124,2,161,1,125,4,
+ 124,0,160,20,124,4,124,2,161,2,125,14,116,17,160,18,
+ 100,15,124,2,161,2,1,0,116,21,106,22,144,2,115,20,
+ 124,8,100,1,117,1,144,2,114,20,124,3,100,1,117,1,
+ 144,2,114,20,124,6,144,1,114,220,124,5,100,1,117,0,
+ 144,1,114,206,116,9,160,11,124,4,161,1,125,5,116,23,
+ 124,14,124,5,124,7,131,3,125,10,110,16,116,24,124,14,
+ 124,3,116,25,124,4,131,1,131,3,125,10,122,18,124,0,
+ 160,26,124,2,124,8,124,10,161,3,1,0,87,0,110,20,
+ 4,0,116,2,144,2,121,18,1,0,1,0,1,0,89,0,
+ 110,2,48,0,124,14,83,0,41,16,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,70,84,114,169,0,
+ 0,0,114,159,0,0,0,114,145,0,0,0,114,39,0,0,
+ 0,114,73,0,0,0,114,28,0,0,0,90,5,110,101,118,
+ 101,114,90,6,97,108,119,97,121,115,218,4,115,105,122,101,
+ 122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,41,
+ 3,114,116,0,0,0,114,106,0,0,0,114,107,0,0,0,
+ 122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114,
+ 111,109,32,123,125,41,27,114,179,0,0,0,114,97,0,0,
+ 0,114,82,0,0,0,114,224,0,0,0,114,50,0,0,0,
+ 114,18,0,0,0,114,227,0,0,0,114,152,0,0,0,218,
+ 10,109,101,109,111,114,121,118,105,101,119,114,163,0,0,0,
+ 90,21,99,104,101,99,107,95,104,97,115,104,95,98,97,115,
+ 101,100,95,112,121,99,115,114,157,0,0,0,218,17,95,82,
+ 65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114,
+ 158,0,0,0,114,156,0,0,0,114,117,0,0,0,114,150,
+ 0,0,0,114,134,0,0,0,114,149,0,0,0,114,165,0,
+ 0,0,114,233,0,0,0,114,1,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,171,0,0,0,114,170,0,0,0,114,23,0,0,0,
+ 114,226,0,0,0,41,15,114,118,0,0,0,114,139,0,0,
+ 0,114,107,0,0,0,114,154,0,0,0,114,174,0,0,0,
+ 114,157,0,0,0,90,10,104,97,115,104,95,98,97,115,101,
+ 100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,114,
+ 106,0,0,0,218,2,115,116,114,26,0,0,0,114,151,0,
+ 0,0,114,2,0,0,0,90,10,98,121,116,101,115,95,100,
+ 97,116,97,90,11,99,111,100,101,95,111,98,106,101,99,116,
+ 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+ 213,0,0,0,88,3,0,0,115,152,0,0,0,0,7,10,
+ 1,4,1,4,1,4,1,4,1,4,1,2,1,12,1,12,
+ 1,12,2,2,1,14,1,12,1,8,2,12,1,2,1,14,
+ 1,12,1,6,3,2,1,2,254,6,4,2,1,12,1,16,
+ 1,12,1,6,1,12,1,12,1,2,255,2,2,8,254,4,
+ 3,10,1,4,1,2,1,2,254,4,4,8,1,2,255,6,
+ 3,2,1,2,1,2,1,6,1,2,1,2,251,8,7,18,
+ 1,6,2,8,1,2,255,4,2,6,1,2,1,2,254,6,
+ 3,10,1,10,1,12,1,12,1,18,1,6,255,4,2,6,
+ 1,10,1,10,1,14,2,6,1,6,255,4,2,2,1,18,
+ 1,14,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,41,10,114,
+ 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,223,
+ 0,0,0,114,224,0,0,0,114,226,0,0,0,114,225,0,
+ 0,0,114,229,0,0,0,114,233,0,0,0,114,213,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,114,221,0,0,0,29,3,0,0,115,14,
+ 0,0,0,8,2,8,8,8,14,8,10,8,7,8,10,14,
+ 8,114,221,0,0,0,99,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,115,
+ 124,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,101,7,100,14,
+ 100,15,132,0,131,1,90,11,100,16,100,17,132,0,90,12,
+ 100,18,100,19,132,0,90,13,100,20,100,21,132,0,90,14,
+ 100,22,100,23,132,0,90,15,135,0,4,0,90,16,83,0,
+ 41,24,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,
+ 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,114,159,0,0,0,41,3,114,118,0,0,
+ 0,114,139,0,0,0,114,44,0,0,0,114,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,114,209,0,0,0,178,
+ 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,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,114,109,0,0,0,169,2,218,9,
+ 95,95,99,108,97,115,115,95,95,114,131,0,0,0,169,2,
+ 114,118,0,0,0,90,5,111,116,104,101,114,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,218,6,95,95,101,
+ 113,95,95,184,3,0,0,115,6,0,0,0,0,1,12,1,
+ 10,255,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,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,114,109,0,0,0,169,3,218,4,
+ 104,97,115,104,114,116,0,0,0,114,44,0,0,0,169,1,
+ 114,118,0,0,0,114,5,0,0,0,114,5,0,0,0,114,
+ 8,0,0,0,218,8,95,95,104,97,115,104,95,95,188,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,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,160,2,124,1,161,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,239,0,
+ 0,0,114,220,0,0,0,114,219,0,0,0,169,1,114,241,
+ 0,0,0,114,5,0,0,0,114,8,0,0,0,114,220,0,
+ 0,0,191,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,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,169,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,114,48,0,0,0,114,219,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 114,179,0,0,0,203,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,0,0,0,0,3,0,0,0,8,0,0,0,67,0,
+ 0,0,115,126,0,0,0,116,0,124,0,116,1,116,2,102,
+ 2,131,2,114,70,116,3,160,4,116,5,124,1,131,1,161,
+ 1,143,24,125,2,124,2,160,6,161,0,87,0,2,0,100,
+ 1,4,0,4,0,131,3,1,0,83,0,49,0,115,58,48,
+ 0,1,0,1,0,1,0,89,0,1,0,110,52,116,3,160,
+ 7,124,1,100,2,161,2,143,24,125,2,124,2,160,6,161,
+ 0,87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,
+ 0,49,0,115,112,48,0,1,0,1,0,1,0,89,0,1,
+ 0,100,1,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,
+ 78,218,1,114,41,8,114,161,0,0,0,114,221,0,0,0,
+ 218,19,69,120,116,101,110,115,105,111,110,70,105,108,101,76,
+ 111,97,100,101,114,114,64,0,0,0,90,9,111,112,101,110,
+ 95,99,111,100,101,114,84,0,0,0,90,4,114,101,97,100,
+ 114,65,0,0,0,41,3,114,118,0,0,0,114,44,0,0,
+ 0,114,68,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,114,227,0,0,0,208,3,0,0,115,10,
+ 0,0,0,0,2,14,1,16,1,40,2,14,1,122,19,70,
+ 105,108,101,76,111,97,100,101,114,46,103,101,116,95,100,97,
+ 116,97,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
+ 0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0,
+ 124,0,160,0,124,1,161,1,114,14,124,0,83,0,100,0,
+ 83,0,114,109,0,0,0,41,1,114,182,0,0,0,169,2,
+ 114,118,0,0,0,114,216,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,218,19,103,101,116,95,114,
+ 101,115,111,117,114,99,101,95,114,101,97,100,101,114,219,3,
+ 0,0,115,6,0,0,0,0,2,10,1,4,1,122,30,70,
+ 105,108,101,76,111,97,100,101,114,46,103,101,116,95,114,101,
+ 115,111,117,114,99,101,95,114,101,97,100,101,114,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,
+ 0,0,67,0,0,0,115,32,0,0,0,116,0,116,1,124,
+ 0,106,2,131,1,100,1,25,0,124,1,131,2,125,2,116,
+ 3,160,4,124,2,100,2,161,2,83,0,41,3,78,114,73,
+ 0,0,0,114,251,0,0,0,41,5,114,38,0,0,0,114,
+ 47,0,0,0,114,44,0,0,0,114,64,0,0,0,114,65,
+ 0,0,0,169,3,114,118,0,0,0,90,8,114,101,115,111,
+ 117,114,99,101,114,44,0,0,0,114,5,0,0,0,114,5,
+ 0,0,0,114,8,0,0,0,218,13,111,112,101,110,95,114,
+ 101,115,111,117,114,99,101,225,3,0,0,115,4,0,0,0,
+ 0,1,20,1,122,24,70,105,108,101,76,111,97,100,101,114,
+ 46,111,112,101,110,95,114,101,115,111,117,114,99,101,99,2,
+ 0,0,0,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,124,0,160,0,
+ 124,1,161,1,115,14,116,1,130,1,116,2,116,3,124,0,
+ 106,4,131,1,100,1,25,0,124,1,131,2,125,2,124,2,
+ 83,0,169,2,78,114,73,0,0,0,41,5,218,11,105,115,
+ 95,114,101,115,111,117,114,99,101,218,17,70,105,108,101,78,
+ 111,116,70,111,117,110,100,69,114,114,111,114,114,38,0,0,
+ 0,114,47,0,0,0,114,44,0,0,0,114,255,0,0,0,
+ 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,
+ 13,114,101,115,111,117,114,99,101,95,112,97,116,104,229,3,
+ 0,0,115,8,0,0,0,0,1,10,1,4,1,20,1,122,
+ 24,70,105,108,101,76,111,97,100,101,114,46,114,101,115,111,
+ 117,114,99,101,95,112,97,116,104,99,2,0,0,0,0,0,
+ 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,
+ 0,0,115,40,0,0,0,116,0,124,1,118,0,114,12,100,
+ 1,83,0,116,1,116,2,124,0,106,3,131,1,100,2,25,
+ 0,124,1,131,2,125,2,116,4,124,2,131,1,83,0,41,
+ 3,78,70,114,73,0,0,0,41,5,114,35,0,0,0,114,
+ 38,0,0,0,114,47,0,0,0,114,44,0,0,0,114,54,
+ 0,0,0,169,3,114,118,0,0,0,114,116,0,0,0,114,
+ 44,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,114,2,1,0,0,235,3,0,0,115,8,0,0,
+ 0,0,1,8,1,4,1,20,1,122,22,70,105,108,101,76,
+ 111,97,100,101,114,46,105,115,95,114,101,115,111,117,114,99,
+ 101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,
+ 0,0,5,0,0,0,67,0,0,0,115,24,0,0,0,116,
+ 0,116,1,160,2,116,3,124,0,106,4,131,1,100,1,25,
+ 0,161,1,131,1,83,0,114,1,1,0,0,41,5,218,4,
+ 105,116,101,114,114,4,0,0,0,218,7,108,105,115,116,100,
+ 105,114,114,47,0,0,0,114,44,0,0,0,114,246,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 218,8,99,111,110,116,101,110,116,115,241,3,0,0,115,2,
+ 0,0,0,0,1,122,19,70,105,108,101,76,111,97,100,101,
+ 114,46,99,111,110,116,101,110,116,115,41,17,114,125,0,0,
+ 0,114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,
+ 114,209,0,0,0,114,243,0,0,0,114,247,0,0,0,114,
+ 136,0,0,0,114,220,0,0,0,114,179,0,0,0,114,227,
+ 0,0,0,114,254,0,0,0,114,0,1,0,0,114,4,1,
+ 0,0,114,2,1,0,0,114,8,1,0,0,90,13,95,95,
+ 99,108,97,115,115,99,101,108,108,95,95,114,5,0,0,0,
+ 114,5,0,0,0,114,249,0,0,0,114,8,0,0,0,114,
+ 239,0,0,0,173,3,0,0,115,30,0,0,0,8,2,4,
+ 3,8,6,8,4,8,3,2,1,14,11,2,1,10,4,8,
+ 11,2,1,10,5,8,4,8,6,8,6,114,239,0,0,0,
99,0,0,0,0,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,
+ 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,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,169,0,0,0,
+ 114,234,0,0,0,41,3,114,49,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,118,0,0,0,114,44,0,0,0,114,238,0,0,0,
+ 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+ 224,0,0,0,249,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,0,0,0,0,5,0,0,0,5,
+ 0,0,0,67,0,0,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,169,1,218,5,95,109,111,100,101,
+ 41,2,114,114,0,0,0,114,225,0,0,0,41,5,114,118,
+ 0,0,0,114,107,0,0,0,114,106,0,0,0,114,26,0,
+ 0,0,114,52,0,0,0,114,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,114,226,0,0,0,254,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,114,60,0,0,0,114,
+ 11,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0,
+ 0,9,0,0,0,11,0,0,0,67,0,0,0,115,252,0,
+ 0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0,
+ 125,6,124,4,114,52,116,1,124,4,131,1,115,52,116,0,
+ 124,4,131,1,92,2,125,4,125,7,124,6,160,2,124,7,
+ 161,1,1,0,113,16,116,3,124,6,131,1,68,0,93,104,
+ 125,7,116,4,124,4,124,7,131,2,125,4,122,14,116,5,
+ 160,6,124,4,161,1,1,0,87,0,113,60,4,0,116,7,
+ 121,110,1,0,1,0,1,0,89,0,113,60,89,0,113,60,
+ 4,0,116,8,121,162,1,0,125,8,1,0,122,30,116,9,
+ 160,10,100,1,124,4,124,8,161,3,1,0,87,0,89,0,
+ 100,2,125,8,126,8,1,0,100,2,83,0,100,2,125,8,
+ 126,8,48,0,48,0,113,60,122,28,116,11,124,1,124,2,
+ 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2,
+ 1,0,87,0,110,52,4,0,116,8,144,0,121,246,1,0,
+ 125,8,1,0,122,26,116,9,160,10,100,1,124,1,124,8,
+ 161,3,1,0,87,0,89,0,100,2,125,8,126,8,110,10,
+ 100,2,125,8,126,8,48,0,48,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,47,0,0,0,
+ 114,56,0,0,0,114,186,0,0,0,114,42,0,0,0,114,
+ 38,0,0,0,114,4,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,50,0,0,0,114,134,0,0,0,114,149,0,0,0,
+ 114,69,0,0,0,41,9,114,118,0,0,0,114,44,0,0,
+ 0,114,26,0,0,0,114,12,1,0,0,218,6,112,97,114,
+ 101,110,116,114,96,0,0,0,114,37,0,0,0,114,33,0,
+ 0,0,114,228,0,0,0,114,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,114,225,0,0,0,3,4,0,0,115,
+ 46,0,0,0,0,2,12,1,4,2,12,1,12,1,12,2,
+ 12,1,10,1,2,1,14,1,12,2,8,1,14,3,6,1,
+ 4,255,4,2,28,1,2,1,12,1,16,1,16,2,8,1,
+ 2,255,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,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,
+ 127,0,0,0,114,224,0,0,0,114,226,0,0,0,114,225,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,114,9,1,0,0,245,3,0,0,
+ 115,8,0,0,0,8,2,4,2,8,5,8,5,114,9,1,
+ 0,0,99,0,0,0,0,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,
+ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
+ 115,68,0,0,0,124,0,160,0,124,1,161,1,125,2,124,
+ 0,160,1,124,2,161,1,125,3,124,1,124,2,100,1,156,
+ 2,125,4,116,2,124,3,124,1,124,4,131,3,1,0,116,
+ 3,116,4,124,3,131,1,100,2,100,0,133,2,25,0,124,
+ 1,124,2,100,3,141,3,83,0,41,4,78,114,159,0,0,
+ 0,114,145,0,0,0,41,2,114,116,0,0,0,114,106,0,
+ 0,0,41,5,114,179,0,0,0,114,227,0,0,0,114,152,
+ 0,0,0,114,165,0,0,0,114,235,0,0,0,41,5,114,
+ 118,0,0,0,114,139,0,0,0,114,44,0,0,0,114,26,
+ 0,0,0,114,151,0,0,0,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,114,213,0,0,0,38,4,0,0,
+ 115,22,0,0,0,0,1,10,1,10,4,2,1,2,254,6,
+ 4,12,1,2,1,14,1,2,1,2,253,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,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,5,0,0,0,114,219,0,
+ 0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,
+ 0,114,229,0,0,0,54,4,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,125,0,0,0,114,124,0,0,0,114,
+ 126,0,0,0,114,127,0,0,0,114,213,0,0,0,114,229,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,114,15,1,0,0,34,4,0,0,
+ 115,6,0,0,0,8,2,4,2,8,16,114,15,1,0,0,
+ 99,0,0,0,0,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,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,0,0,0,
- 0,5,0,0,0,4,0,0,0,67,0,0,0,115,64,0,
- 0,0,116,0,124,0,160,1,124,1,161,1,131,1,100,1,
- 25,0,125,2,124,2,160,2,100,2,100,1,161,2,100,3,
- 25,0,125,3,124,1,160,3,100,2,161,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,39,0,0,0,114,71,0,0,0,114,73,0,
- 0,0,114,28,0,0,0,218,8,95,95,105,110,105,116,95,
- 95,41,4,114,47,0,0,0,114,180,0,0,0,114,43,0,
- 0,0,114,41,0,0,0,41,5,114,119,0,0,0,114,140,
- 0,0,0,114,97,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,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,183,0,0,0,254,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,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,169,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,3,0,0,0,169,2,114,119,0,0,0,114,188,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,
- 101,6,3,0,0,115,2,0,0,0,0,1,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,0,0,0,0,3,0,0,0,5,0,0,0,67,0,
- 0,0,115,56,0,0,0,124,0,160,0,124,1,106,1,161,
- 1,125,2,124,2,100,1,107,8,114,36,116,2,100,2,160,
- 3,124,1,106,1,161,1,131,1,130,1,116,4,160,5,116,
- 6,124,2,124,1,106,7,161,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,126,0,0,0,114,118,
- 0,0,0,114,62,0,0,0,114,135,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,132,
- 0,0,0,41,3,114,119,0,0,0,218,6,109,111,100,117,
- 108,101,114,165,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,218,11,101,120,101,99,95,109,111,100,
- 117,108,101,9,3,0,0,115,12,0,0,0,0,2,12,1,
- 8,1,6,1,4,255,6,2,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,0,0,0,0,
- 2,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,
- 0,116,0,160,1,124,0,124,1,161,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,135,0,
- 0,0,218,17,95,108,111,97,100,95,109,111,100,117,108,101,
- 95,115,104,105,109,169,2,114,119,0,0,0,114,140,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,11,108,111,97,100,95,109,111,100,117,108,101,17,3,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,126,0,0,0,114,125,0,0,0,
- 114,127,0,0,0,114,128,0,0,0,114,183,0,0,0,114,
- 213,0,0,0,114,218,0,0,0,114,221,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,209,0,0,0,249,2,0,0,115,10,0,0,0,
- 8,2,4,3,8,8,8,3,8,8,114,209,0,0,0,99,
- 0,0,0,0,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,11,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,18,218,12,83,111,117,114,99,
- 101,76,111,97,100,101,114,99,2,0,0,0,0,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,
- 165,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,32,40,97,32,115,
- 116,114,41,46,10,10,32,32,32,32,32,32,32,32,82,97,
- 105,115,101,115,32,79,83,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,114,50,0,0,0,169,2,
- 114,119,0,0,0,114,44,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,10,112,97,116,104,95,
- 109,116,105,109,101,24,3,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,0,0,0,0,2,0,0,0,4,0,0,0,67,0,
- 0,0,115,14,0,0,0,100,1,124,0,160,0,124,1,161,
- 1,105,1,83,0,41,2,97,158,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,10,32,32,32,32,32,32,32,32,
- 112,97,116,104,32,40,97,32,115,116,114,41,46,10,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,79,83,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,170,0,0,0,41,
- 1,114,224,0,0,0,114,223,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,10,112,97,116,104,
- 95,115,116,97,116,115,32,3,0,0,115,2,0,0,0,0,
- 12,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,0,0,0,0,4,0,0,0,4,0,0,0,67,
- 0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3,
- 161,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,119,0,0,0,114,
- 108,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104,
- 114,26,0,0,0,114,3,0,0,0,114,3,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,46,3,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,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,3,0,0,0,
- 41,3,114,119,0,0,0,114,44,0,0,0,114,26,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 114,226,0,0,0,56,3,0,0,115,2,0,0,0,0,1,
- 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,
- 0,0,0,0,5,0,0,0,10,0,0,0,67,0,0,0,
- 115,82,0,0,0,124,0,160,0,124,1,161,1,125,2,122,
- 14,124,0,160,1,124,2,161,1,125,3,87,0,110,48,4,
- 0,116,2,107,10,114,72,1,0,125,4,1,0,122,18,116,
- 3,100,1,124,1,100,2,141,2,124,4,130,2,87,0,53,
- 0,100,3,125,4,126,4,88,0,89,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,114,116,0,0,0,78,41,5,
- 114,180,0,0,0,218,8,103,101,116,95,100,97,116,97,114,
- 50,0,0,0,114,118,0,0,0,114,177,0,0,0,41,5,
- 114,119,0,0,0,114,140,0,0,0,114,44,0,0,0,114,
- 175,0,0,0,218,3,101,120,99,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,10,103,101,116,95,115,111,
- 117,114,99,101,63,3,0,0,115,20,0,0,0,0,2,10,
- 1,2,1,14,1,16,1,4,1,2,255,4,1,2,255,20,
- 2,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,105,0,0,0,41,
- 1,218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,
- 0,0,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,216,0,0,0,84,41,2,218,12,
- 100,111,110,116,95,105,110,104,101,114,105,116,114,84,0,0,
- 0,41,3,114,135,0,0,0,114,215,0,0,0,218,7,99,
- 111,109,112,105,108,101,41,4,114,119,0,0,0,114,26,0,
- 0,0,114,44,0,0,0,114,231,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,14,115,111,117,
- 114,99,101,95,116,111,95,99,111,100,101,73,3,0,0,115,
- 8,0,0,0,0,5,12,1,2,0,2,255,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,0,0,0,0,15,0,0,0,9,0,0,0,67,0,
- 0,0,115,34,2,0,0,124,0,160,0,124,1,161,1,125,
- 2,100,1,125,3,100,1,125,4,100,1,125,5,100,2,125,
- 6,100,3,125,7,122,12,116,1,124,2,131,1,125,8,87,
- 0,110,26,4,0,116,2,107,10,114,68,1,0,1,0,1,
- 0,100,1,125,8,89,0,144,1,110,48,88,0,122,14,124,
- 0,160,3,124,2,161,1,125,9,87,0,110,22,4,0,116,
- 4,107,10,114,106,1,0,1,0,1,0,89,0,144,1,110,
- 10,88,0,116,5,124,9,100,4,25,0,131,1,125,3,122,
- 14,124,0,160,6,124,8,161,1,125,10,87,0,110,20,4,
- 0,116,4,107,10,114,154,1,0,1,0,1,0,89,0,110,
- 218,88,0,124,1,124,8,100,5,156,2,125,11,122,148,116,
- 7,124,10,124,1,124,11,131,3,125,12,116,8,124,10,131,
- 1,100,6,100,1,133,2,25,0,125,13,124,12,100,7,64,
- 0,100,8,107,3,125,6,124,6,144,1,114,36,124,12,100,
- 9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107,
- 3,144,1,114,56,124,7,115,254,116,9,106,10,100,11,107,
- 2,144,1,114,56,124,0,160,6,124,2,161,1,125,4,116,
- 9,160,11,116,12,124,4,161,2,125,5,116,13,124,10,124,
- 5,124,1,124,11,131,4,1,0,110,20,116,14,124,10,124,
- 3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,87,
- 0,110,26,4,0,116,15,116,16,102,2,107,10,144,1,114,
- 84,1,0,1,0,1,0,89,0,110,32,88,0,116,17,160,
- 18,100,13,124,8,124,2,161,3,1,0,116,19,124,13,124,
- 1,124,8,124,2,100,14,141,4,83,0,124,4,100,1,107,
- 8,144,1,114,136,124,0,160,6,124,2,161,1,125,4,124,
- 0,160,20,124,4,124,2,161,2,125,14,116,17,160,18,100,
- 15,124,2,161,2,1,0,116,21,106,22,144,2,115,30,124,
- 8,100,1,107,9,144,2,114,30,124,3,100,1,107,9,144,
- 2,114,30,124,6,144,1,114,228,124,5,100,1,107,8,144,
- 1,114,214,116,9,160,11,124,4,161,1,125,5,116,23,124,
- 14,124,5,124,7,131,3,125,10,110,16,116,24,124,14,124,
- 3,116,25,124,4,131,1,131,3,125,10,122,18,124,0,160,
- 26,124,2,124,8,124,10,161,3,1,0,87,0,110,22,4,
- 0,116,2,107,10,144,2,114,28,1,0,1,0,1,0,89,
- 0,110,2,88,0,124,14,83,0,41,16,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,70,84,114,170,
- 0,0,0,114,160,0,0,0,114,146,0,0,0,114,39,0,
- 0,0,114,73,0,0,0,114,28,0,0,0,90,5,110,101,
- 118,101,114,90,6,97,108,119,97,121,115,218,4,115,105,122,
- 101,122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,
- 41,3,114,117,0,0,0,114,107,0,0,0,114,108,0,0,
- 0,122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,
- 114,111,109,32,123,125,41,27,114,180,0,0,0,114,98,0,
- 0,0,114,82,0,0,0,114,225,0,0,0,114,50,0,0,
- 0,114,17,0,0,0,114,228,0,0,0,114,153,0,0,0,
- 218,10,109,101,109,111,114,121,118,105,101,119,114,164,0,0,
- 0,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97,
- 115,101,100,95,112,121,99,115,114,158,0,0,0,218,17,95,
- 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,
- 114,159,0,0,0,114,157,0,0,0,114,118,0,0,0,114,
- 151,0,0,0,114,135,0,0,0,114,150,0,0,0,114,166,
- 0,0,0,114,234,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,172,0,0,0,114,171,0,0,0,114,22,0,0,
- 0,114,227,0,0,0,41,15,114,119,0,0,0,114,140,0,
- 0,0,114,108,0,0,0,114,155,0,0,0,114,175,0,0,
- 0,114,158,0,0,0,90,10,104,97,115,104,95,98,97,115,
- 101,100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,
- 114,107,0,0,0,218,2,115,116,114,26,0,0,0,114,152,
- 0,0,0,114,83,0,0,0,90,10,98,121,116,101,115,95,
- 100,97,116,97,90,11,99,111,100,101,95,111,98,106,101,99,
- 116,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 114,214,0,0,0,81,3,0,0,115,152,0,0,0,0,7,
- 10,1,4,1,4,1,4,1,4,1,4,1,2,1,12,1,
- 14,1,12,2,2,1,14,1,14,1,8,2,12,1,2,1,
- 14,1,14,1,6,3,2,1,2,254,6,4,2,1,12,1,
- 16,1,12,1,6,1,12,1,12,1,2,255,2,2,8,254,
- 4,3,10,1,4,1,2,1,2,254,4,4,8,1,2,255,
- 6,3,2,1,2,1,2,1,6,1,2,1,2,251,8,7,
- 20,1,6,2,8,1,2,255,4,2,6,1,2,1,2,254,
- 6,3,10,1,10,1,12,1,12,1,18,1,6,255,4,2,
- 6,1,10,1,10,1,14,2,6,1,6,255,4,2,2,1,
- 18,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,41,10,
- 114,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114,
- 224,0,0,0,114,225,0,0,0,114,227,0,0,0,114,226,
- 0,0,0,114,230,0,0,0,114,234,0,0,0,114,214,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,222,0,0,0,22,3,0,0,115,
- 14,0,0,0,8,2,8,8,8,14,8,10,8,7,8,10,
- 14,8,114,222,0,0,0,99,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,
- 115,124,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,101,7,100,
- 14,100,15,132,0,131,1,90,11,100,16,100,17,132,0,90,
- 12,100,18,100,19,132,0,90,13,100,20,100,21,132,0,90,
- 14,100,22,100,23,132,0,90,15,135,0,4,0,90,16,83,
- 0,41,24,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,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,114,160,0,0,0,41,3,114,119,0,
- 0,0,114,140,0,0,0,114,44,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,114,210,0,0,0,
- 171,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,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,114,110,0,0,0,169,2,218,
- 9,95,95,99,108,97,115,115,95,95,114,132,0,0,0,169,
- 2,114,119,0,0,0,90,5,111,116,104,101,114,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,6,95,95,
- 101,113,95,95,177,3,0,0,115,6,0,0,0,0,1,12,
- 1,10,255,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,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,114,110,0,0,0,169,3,218,
- 4,104,97,115,104,114,117,0,0,0,114,44,0,0,0,169,
- 1,114,119,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,8,95,95,104,97,115,104,95,95,181,
- 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,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,160,2,124,1,161,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,240,
- 0,0,0,114,221,0,0,0,114,220,0,0,0,169,1,114,
- 242,0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,
- 0,0,0,184,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,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,169,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,114,48,0,0,0,114,220,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,180,0,0,0,196,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,0,0,0,0,3,0,0,0,10,0,0,0,67,
- 0,0,0,115,102,0,0,0,116,0,124,0,116,1,116,2,
- 102,2,131,2,114,58,116,3,160,4,116,5,124,1,131,1,
- 161,1,143,22,125,2,124,2,160,6,161,0,87,0,2,0,
- 53,0,81,0,82,0,163,0,83,0,81,0,82,0,88,0,
- 110,40,116,3,160,7,124,1,100,1,161,2,143,22,125,2,
- 124,2,160,6,161,0,87,0,2,0,53,0,81,0,82,0,
- 163,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,8,114,
- 162,0,0,0,114,222,0,0,0,218,19,69,120,116,101,110,
- 115,105,111,110,70,105,108,101,76,111,97,100,101,114,114,64,
- 0,0,0,90,9,111,112,101,110,95,99,111,100,101,114,85,
- 0,0,0,90,4,114,101,97,100,114,65,0,0,0,41,3,
- 114,119,0,0,0,114,44,0,0,0,114,68,0,0,0,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,228,
- 0,0,0,201,3,0,0,115,10,0,0,0,0,2,14,1,
- 16,1,28,2,14,1,122,19,70,105,108,101,76,111,97,100,
- 101,114,46,103,101,116,95,100,97,116,97,99,2,0,0,0,
- 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
- 67,0,0,0,115,18,0,0,0,124,0,160,0,124,1,161,
- 1,114,14,124,0,83,0,100,0,83,0,114,110,0,0,0,
- 41,1,114,183,0,0,0,169,2,114,119,0,0,0,114,217,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,
- 95,114,101,97,100,101,114,212,3,0,0,115,6,0,0,0,
- 0,2,10,1,4,1,122,30,70,105,108,101,76,111,97,100,
- 101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,
- 114,101,97,100,101,114,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,
- 32,0,0,0,116,0,116,1,124,0,106,2,131,1,100,1,
- 25,0,124,1,131,2,125,2,116,3,160,4,124,2,100,2,
- 161,2,83,0,41,3,78,114,73,0,0,0,114,252,0,0,
- 0,41,5,114,38,0,0,0,114,47,0,0,0,114,44,0,
- 0,0,114,64,0,0,0,114,65,0,0,0,169,3,114,119,
- 0,0,0,90,8,114,101,115,111,117,114,99,101,114,44,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,13,111,112,101,110,95,114,101,115,111,117,114,99,101,
- 218,3,0,0,115,4,0,0,0,0,1,20,1,122,24,70,
- 105,108,101,76,111,97,100,101,114,46,111,112,101,110,95,114,
- 101,115,111,117,114,99,101,99,2,0,0,0,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,124,0,160,0,124,1,161,1,115,14,116,
- 1,130,1,116,2,116,3,124,0,106,4,131,1,100,1,25,
- 0,124,1,131,2,125,2,124,2,83,0,169,2,78,114,73,
- 0,0,0,41,5,218,11,105,115,95,114,101,115,111,117,114,
- 99,101,218,17,70,105,108,101,78,111,116,70,111,117,110,100,
- 69,114,114,111,114,114,38,0,0,0,114,47,0,0,0,114,
- 44,0,0,0,114,0,1,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,13,114,101,115,111,117,114,
- 99,101,95,112,97,116,104,222,3,0,0,115,8,0,0,0,
- 0,1,10,1,4,1,20,1,122,24,70,105,108,101,76,111,
- 97,100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,
- 116,104,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
- 0,0,0,3,0,0,0,67,0,0,0,115,40,0,0,0,
- 116,0,124,1,107,6,114,12,100,1,83,0,116,1,116,2,
- 124,0,106,3,131,1,100,2,25,0,124,1,131,2,125,2,
- 116,4,124,2,131,1,83,0,41,3,78,70,114,73,0,0,
- 0,41,5,114,35,0,0,0,114,38,0,0,0,114,47,0,
- 0,0,114,44,0,0,0,114,54,0,0,0,169,3,114,119,
- 0,0,0,114,117,0,0,0,114,44,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,114,3,1,0,
- 0,228,3,0,0,115,8,0,0,0,0,1,8,1,4,1,
- 20,1,122,22,70,105,108,101,76,111,97,100,101,114,46,105,
- 115,95,114,101,115,111,117,114,99,101,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,
- 0,0,0,115,24,0,0,0,116,0,116,1,160,2,116,3,
- 124,0,106,4,131,1,100,1,25,0,161,1,131,1,83,0,
- 114,2,1,0,0,41,5,218,4,105,116,101,114,114,2,0,
- 0,0,218,7,108,105,115,116,100,105,114,114,47,0,0,0,
- 114,44,0,0,0,114,247,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,8,99,111,110,116,101,
- 110,116,115,234,3,0,0,115,2,0,0,0,0,1,122,19,
- 70,105,108,101,76,111,97,100,101,114,46,99,111,110,116,101,
- 110,116,115,41,17,114,126,0,0,0,114,125,0,0,0,114,
- 127,0,0,0,114,128,0,0,0,114,210,0,0,0,114,244,
- 0,0,0,114,248,0,0,0,114,137,0,0,0,114,221,0,
- 0,0,114,180,0,0,0,114,228,0,0,0,114,255,0,0,
- 0,114,1,1,0,0,114,5,1,0,0,114,3,1,0,0,
- 114,9,1,0,0,90,13,95,95,99,108,97,115,115,99,101,
- 108,108,95,95,114,3,0,0,0,114,3,0,0,0,114,250,
- 0,0,0,114,6,0,0,0,114,240,0,0,0,166,3,0,
- 0,115,30,0,0,0,8,2,4,3,8,6,8,4,8,3,
- 2,1,14,11,2,1,10,4,8,11,2,1,10,5,8,4,
- 8,6,8,6,114,240,0,0,0,99,0,0,0,0,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,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,170,0,0,0,114,235,0,0,0,41,3,
- 114,49,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,119,0,0,0,114,
- 44,0,0,0,114,239,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,225,0,0,0,242,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,
- 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,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,
- 169,1,218,5,95,109,111,100,101,41,2,114,115,0,0,0,
- 114,226,0,0,0,41,5,114,119,0,0,0,114,108,0,0,
- 0,114,107,0,0,0,114,26,0,0,0,114,52,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 227,0,0,0,247,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,114,60,0,0,0,114,12,1,0,0,99,3,0,
- 0,0,0,0,0,0,1,0,0,0,9,0,0,0,11,0,
- 0,0,67,0,0,0,115,252,0,0,0,116,0,124,1,131,
- 1,92,2,125,4,125,5,103,0,125,6,124,4,114,52,116,
- 1,124,4,131,1,115,52,116,0,124,4,131,1,92,2,125,
- 4,125,7,124,6,160,2,124,7,161,1,1,0,113,16,116,
- 3,124,6,131,1,68,0,93,108,125,7,116,4,124,4,124,
- 7,131,2,125,4,122,14,116,5,160,6,124,4,161,1,1,
- 0,87,0,113,60,4,0,116,7,107,10,114,112,1,0,1,
- 0,1,0,89,0,113,60,89,0,113,60,4,0,116,8,107,
- 10,114,166,1,0,125,8,1,0,122,26,116,9,160,10,100,
- 1,124,4,124,8,161,3,1,0,87,0,89,0,162,6,1,
- 0,100,2,83,0,100,2,125,8,126,8,88,0,89,0,113,
- 60,88,0,113,60,122,28,116,11,124,1,124,2,124,3,131,
- 3,1,0,116,9,160,10,100,3,124,1,161,2,1,0,87,
- 0,110,48,4,0,116,8,107,10,114,246,1,0,125,8,1,
- 0,122,18,116,9,160,10,100,1,124,1,124,8,161,3,1,
- 0,87,0,53,0,100,2,125,8,126,8,88,0,89,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,47,0,0,0,114,56,0,0,0,114,187,
- 0,0,0,114,42,0,0,0,114,38,0,0,0,114,2,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,50,0,0,0,114,
- 135,0,0,0,114,150,0,0,0,114,69,0,0,0,41,9,
- 114,119,0,0,0,114,44,0,0,0,114,26,0,0,0,114,
- 13,1,0,0,218,6,112,97,114,101,110,116,114,97,0,0,
- 0,114,37,0,0,0,114,33,0,0,0,114,229,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 226,0,0,0,252,3,0,0,115,48,0,0,0,0,2,12,
- 1,4,2,12,1,12,1,12,2,12,1,10,1,2,1,14,
- 1,14,2,8,1,16,3,6,1,2,0,2,255,4,2,28,
- 1,2,1,12,1,16,1,16,2,8,1,2,255,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,126,0,0,0,
- 114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,114,
- 225,0,0,0,114,227,0,0,0,114,226,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,10,1,0,0,238,3,0,0,115,8,0,0,0,
- 8,2,4,2,8,5,8,5,114,10,1,0,0,99,0,0,
- 0,0,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,0,0,0,0,5,
- 0,0,0,5,0,0,0,67,0,0,0,115,68,0,0,0,
- 124,0,160,0,124,1,161,1,125,2,124,0,160,1,124,2,
- 161,1,125,3,124,1,124,2,100,1,156,2,125,4,116,2,
- 124,3,124,1,124,4,131,3,1,0,116,3,116,4,124,3,
- 131,1,100,2,100,0,133,2,25,0,124,1,124,2,100,3,
- 141,3,83,0,41,4,78,114,160,0,0,0,114,146,0,0,
- 0,41,2,114,117,0,0,0,114,107,0,0,0,41,5,114,
- 180,0,0,0,114,228,0,0,0,114,153,0,0,0,114,166,
- 0,0,0,114,236,0,0,0,41,5,114,119,0,0,0,114,
- 140,0,0,0,114,44,0,0,0,114,26,0,0,0,114,152,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,214,0,0,0,31,4,0,0,115,22,0,0,0,
- 0,1,10,1,10,4,2,1,2,254,6,4,12,1,2,1,
- 14,1,2,1,2,253,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,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,3,0,0,0,114,220,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,114,230,0,0,
- 0,47,4,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,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114,
- 128,0,0,0,114,214,0,0,0,114,230,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,16,1,0,0,27,4,0,0,115,6,0,0,0,
- 8,2,4,2,8,16,114,16,1,0,0,99,0,0,0,0,
- 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,114,253,0,0,0,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,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,114,110,0,0,0,114,160,
- 0,0,0,114,6,1,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,210,0,0,0,64,4,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,
- 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,114,110,0,
- 0,0,114,241,0,0,0,114,243,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,114,244,0,0,0,
- 68,4,0,0,115,6,0,0,0,0,1,12,1,10,255,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,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,114,110,0,
- 0,0,114,245,0,0,0,114,247,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,114,248,0,0,0,
- 72,4,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,0,0,0,0,3,0,0,0,5,0,0,0,67,0,
- 0,0,115,36,0,0,0,116,0,160,1,116,2,106,3,124,
- 1,161,2,125,2,116,0,160,4,100,1,124,1,106,5,124,
- 0,106,6,161,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,
- 135,0,0,0,114,215,0,0,0,114,164,0,0,0,90,14,
- 99,114,101,97,116,101,95,100,121,110,97,109,105,99,114,150,
- 0,0,0,114,117,0,0,0,114,44,0,0,0,41,3,114,
- 119,0,0,0,114,188,0,0,0,114,217,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,114,213,0,
- 0,0,75,4,0,0,115,18,0,0,0,0,2,4,1,4,
- 0,2,255,4,2,6,1,4,0,4,255,4,2,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,0,0,0,0,2,0,0,
- 0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,0,
- 160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,4,
- 100,1,124,0,106,5,124,0,106,6,161,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,135,0,0,0,114,215,0,0,0,114,164,0,0,0,
- 90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,150,
- 0,0,0,114,117,0,0,0,114,44,0,0,0,114,254,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,218,0,0,0,83,4,0,0,115,10,0,0,0,0,
- 2,14,1,6,1,4,0,4,255,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,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,39,0,0,0,99,1,0,0,0,0,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,210,0,0,0,78,114,3,0,0,0,169,2,114,32,0,
- 0,0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,
- 108,101,95,110,97,109,101,114,3,0,0,0,114,6,0,0,
- 0,218,9,60,103,101,110,101,120,112,114,62,92,4,0,0,
- 115,4,0,0,0,4,1,2,255,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,47,
- 0,0,0,114,44,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,114,220,0,0,0,114,3,0,0,0,114,19,1,0,0,
- 114,6,0,0,0,114,183,0,0,0,89,4,0,0,115,8,
- 0,0,0,0,2,14,1,12,1,2,255,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,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,
- 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,3,0,0,0,114,220,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,114,214,0,0,0,95,
- 4,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,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,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,3,0,0,0,114,220,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,114,230,0,
- 0,0,99,4,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,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,114,251,0,0,0,114,48,0,0,0,114,220,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 180,0,0,0,103,4,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,126,0,0,0,114,125,0,0,0,114,127,
- 0,0,0,114,128,0,0,0,114,210,0,0,0,114,244,0,
- 0,0,114,248,0,0,0,114,213,0,0,0,114,218,0,0,
- 0,114,183,0,0,0,114,214,0,0,0,114,230,0,0,0,
- 114,137,0,0,0,114,180,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,253,
- 0,0,0,56,4,0,0,115,22,0,0,0,8,2,4,6,
- 8,4,8,4,8,3,8,8,8,6,8,6,8,4,8,4,
- 2,1,114,253,0,0,0,99,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,
- 115,104,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,100,23,132,0,90,14,100,24,83,0,41,25,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,0,0,0,0,4,0,0,0,3,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,160,3,161,0,131,1,124,0,
- 95,4,124,3,124,0,95,5,100,0,83,0,114,110,0,0,
- 0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,
- 104,114,112,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,169,4,114,119,0,0,0,
- 114,117,0,0,0,114,44,0,0,0,90,11,112,97,116,104,
- 95,102,105,110,100,101,114,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,210,0,0,0,116,4,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,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,160,1,100,1,161,1,92,3,125,
- 1,125,2,125,3,124,2,100,2,107,2,114,30,100,3,83,
- 0,124,1,100,4,102,2,83,0,41,5,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,71,0,0,0,
- 114,40,0,0,0,41,2,114,8,0,0,0,114,44,0,0,
- 0,90,8,95,95,112,97,116,104,95,95,41,2,114,24,1,
- 0,0,114,41,0,0,0,41,4,114,119,0,0,0,114,15,
- 1,0,0,218,3,100,111,116,90,2,109,101,114,3,0,0,
- 0,114,3,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,122,4,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,0,0,0,0,3,0,0,0,3,0,
- 0,0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,
- 0,92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,
- 0,124,2,131,2,83,0,114,110,0,0,0,41,4,114,31,
- 1,0,0,114,131,0,0,0,114,8,0,0,0,218,7,109,
- 111,100,117,108,101,115,41,3,114,119,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,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 114,26,1,0,0,132,4,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,0,0,0,0,
- 3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,
- 0,116,0,124,0,160,1,161,0,131,1,125,1,124,1,124,
- 0,106,2,107,3,114,74,124,0,160,3,124,0,106,4,124,
- 1,161,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,114,110,0,0,0,41,8,114,112,0,0,0,114,26,1,
- 0,0,114,27,1,0,0,114,28,1,0,0,114,24,1,0,
- 0,114,141,0,0,0,114,179,0,0,0,114,25,1,0,0,
- 41,3,114,119,0,0,0,90,11,112,97,114,101,110,116,95,
- 112,97,116,104,114,188,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,12,95,114,101,99,97,108,
- 99,117,108,97,116,101,136,4,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,0,0,0,0,1,0,0,0,3,0,0,
- 0,67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,
- 161,0,131,1,83,0,114,110,0,0,0,41,2,114,7,1,
- 0,0,114,33,1,0,0,114,247,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,8,95,95,105,
- 116,101,114,95,95,149,4,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,2,0,0,0,0,0,
- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
- 0,0,115,12,0,0,0,124,0,160,0,161,0,124,1,25,
- 0,83,0,114,110,0,0,0,169,1,114,33,1,0,0,41,
- 2,114,119,0,0,0,218,5,105,110,100,101,120,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,95,
- 103,101,116,105,116,101,109,95,95,152,4,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,103,101,116,105,116,101,109,95,95,
+ 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,114,252,0,0,
+ 0,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,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,114,110,0,0,
- 0,41,1,114,25,1,0,0,41,3,114,119,0,0,0,114,
- 36,1,0,0,114,44,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,11,95,95,115,101,116,105,
- 116,101,109,95,95,155,4,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,0,0,0,0,1,0,0,0,3,0,0,
- 0,67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,
- 161,0,131,1,83,0,114,110,0,0,0,41,2,114,22,0,
- 0,0,114,33,1,0,0,114,247,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,7,95,95,108,
- 101,110,95,95,158,4,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,
- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
- 115,12,0,0,0,100,1,160,0,124,0,106,1,161,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,62,0,0,
- 0,114,25,1,0,0,114,247,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,8,95,95,114,101,
- 112,114,95,95,161,4,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,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,
- 0,115,12,0,0,0,124,1,124,0,160,0,161,0,107,6,
- 83,0,114,110,0,0,0,114,35,1,0,0,169,2,114,119,
- 0,0,0,218,4,105,116,101,109,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,12,95,95,99,111,110,116,
- 97,105,110,115,95,95,164,4,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,0,0,0,0,2,0,0,0,3,
- 0,0,0,67,0,0,0,115,16,0,0,0,124,0,106,0,
- 160,1,124,1,161,1,1,0,100,0,83,0,114,110,0,0,
- 0,41,2,114,25,1,0,0,114,187,0,0,0,114,41,1,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,187,0,0,0,167,4,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,15,114,126,0,0,0,
- 114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,114,
- 210,0,0,0,114,31,1,0,0,114,26,1,0,0,114,33,
- 1,0,0,114,34,1,0,0,114,37,1,0,0,114,38,1,
- 0,0,114,39,1,0,0,114,40,1,0,0,114,43,1,0,
- 0,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,114,23,1,0,0,109,
- 4,0,0,115,24,0,0,0,8,1,4,6,8,6,8,10,
- 8,4,8,13,8,3,8,3,8,3,8,3,8,3,8,3,
- 114,23,1,0,0,99,0,0,0,0,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,
- 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,114,110,0,0,0,41,2,114,23,
- 1,0,0,114,25,1,0,0,114,29,1,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,114,210,0,0,
- 0,173,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,95,
- 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,
- 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
- 115,12,0,0,0,100,1,160,0,124,1,106,1,161,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,62,0,0,0,114,126,0,0,0,41,
- 2,114,194,0,0,0,114,217,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,11,109,111,100,117,
- 108,101,95,114,101,112,114,176,4,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,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,3,0,0,0,114,220,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 183,0,0,0,185,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,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,40,0,0,0,114,3,0,0,0,114,220,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 230,0,0,0,188,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,
+ 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,114,109,
+ 0,0,0,114,159,0,0,0,114,5,1,0,0,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,114,209,0,0,
+ 0,71,4,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,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,114,109,0,0,0,114,240,0,0,0,114,242,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 114,243,0,0,0,75,4,0,0,115,6,0,0,0,0,1,
+ 12,1,10,255,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,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,114,109,0,0,0,114,244,0,0,0,114,246,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 114,247,0,0,0,79,4,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,0,0,0,0,3,0,0,0,5,
+ 0,0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,
+ 116,2,106,3,124,1,161,2,125,2,116,0,160,4,100,1,
+ 124,1,106,5,124,0,106,6,161,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,134,0,0,0,114,214,0,0,0,114,163,
+ 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97,
+ 109,105,99,114,149,0,0,0,114,116,0,0,0,114,44,0,
+ 0,0,41,3,114,118,0,0,0,114,187,0,0,0,114,216,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,114,212,0,0,0,82,4,0,0,115,14,0,0,0,
+ 0,2,4,1,6,255,4,2,6,1,8,255,4,2,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,0,0,0,0,2,0,
+ 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116,
+ 0,160,1,116,2,106,3,124,1,161,2,1,0,116,0,160,
+ 4,100,1,124,0,106,5,124,0,106,6,161,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,134,0,0,0,114,214,0,0,0,114,163,0,0,
+ 0,90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,
+ 149,0,0,0,114,116,0,0,0,114,44,0,0,0,114,253,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,114,217,0,0,0,90,4,0,0,115,8,0,0,0,
+ 0,2,14,1,6,1,8,255,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,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,39,0,0,0,99,1,0,0,0,0,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,
+ 209,0,0,0,78,114,5,0,0,0,169,2,114,32,0,0,
+ 0,218,6,115,117,102,102,105,120,169,1,90,9,102,105,108,
+ 101,95,110,97,109,101,114,5,0,0,0,114,8,0,0,0,
+ 218,9,60,103,101,110,101,120,112,114,62,99,4,0,0,115,
+ 4,0,0,0,4,1,2,255,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,47,0,
+ 0,0,114,44,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,
+ 114,219,0,0,0,114,5,0,0,0,114,18,1,0,0,114,
+ 8,0,0,0,114,182,0,0,0,96,4,0,0,115,8,0,
+ 0,0,0,2,14,1,12,1,2,255,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,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,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,5,0,0,0,114,219,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,114,213,0,0,0,102,4,
+ 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,
+ 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,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,5,0,0,0,114,219,0,0,0,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,114,229,0,0,
+ 0,106,4,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,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,40,0,
- 0,0,122,8,60,115,116,114,105,110,103,62,114,216,0,0,
- 0,84,41,1,114,232,0,0,0,41,1,114,233,0,0,0,
- 114,220,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,214,0,0,0,191,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,
+ 0,0,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,
+ 114,250,0,0,0,114,48,0,0,0,114,219,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,179,
+ 0,0,0,110,4,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,125,0,0,0,114,124,0,0,0,114,126,0,
+ 0,0,114,127,0,0,0,114,209,0,0,0,114,243,0,0,
+ 0,114,247,0,0,0,114,212,0,0,0,114,217,0,0,0,
+ 114,182,0,0,0,114,213,0,0,0,114,229,0,0,0,114,
+ 136,0,0,0,114,179,0,0,0,114,5,0,0,0,114,5,
+ 0,0,0,114,5,0,0,0,114,8,0,0,0,114,252,0,
+ 0,0,63,4,0,0,115,22,0,0,0,8,2,4,6,8,
+ 4,8,4,8,3,8,8,8,6,8,6,8,4,8,4,2,
+ 1,114,252,0,0,0,99,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,
+ 104,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,100,23,132,0,90,14,100,24,83,0,41,25,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,0,0,0,0,4,0,0,0,3,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,160,3,161,0,131,1,124,0,95,
+ 4,124,3,124,0,95,5,100,0,83,0,114,109,0,0,0,
+ 41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,104,
+ 114,111,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,169,4,114,118,0,0,0,114,
+ 116,0,0,0,114,44,0,0,0,90,11,112,97,116,104,95,
+ 102,105,110,100,101,114,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,114,209,0,0,0,123,4,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,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,160,1,100,1,161,1,92,3,125,1,
+ 125,2,125,3,124,2,100,2,107,2,114,30,100,3,83,0,
+ 124,1,100,4,102,2,83,0,41,5,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,71,0,0,0,114,
+ 40,0,0,0,41,2,114,1,0,0,0,114,44,0,0,0,
+ 90,8,95,95,112,97,116,104,95,95,41,2,114,23,1,0,
+ 0,114,41,0,0,0,41,4,114,118,0,0,0,114,14,1,
+ 0,0,218,3,100,111,116,90,2,109,101,114,5,0,0,0,
+ 114,5,0,0,0,114,8,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,129,4,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,0,0,0,0,3,0,0,0,3,0,0,
+ 0,67,0,0,0,115,28,0,0,0,124,0,160,0,161,0,
+ 92,2,125,1,125,2,116,1,116,2,106,3,124,1,25,0,
+ 124,2,131,2,83,0,114,109,0,0,0,41,4,114,30,1,
+ 0,0,114,130,0,0,0,114,1,0,0,0,218,7,109,111,
+ 100,117,108,101,115,41,3,114,118,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,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+ 25,1,0,0,139,4,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,0,0,0,0,3,
+ 0,0,0,4,0,0,0,67,0,0,0,115,80,0,0,0,
+ 116,0,124,0,160,1,161,0,131,1,125,1,124,1,124,0,
+ 106,2,107,3,114,74,124,0,160,3,124,0,106,4,124,1,
+ 161,2,125,2,124,2,100,0,117,1,114,68,124,2,106,5,
+ 100,0,117,0,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,
+ 114,109,0,0,0,41,8,114,111,0,0,0,114,25,1,0,
+ 0,114,26,1,0,0,114,27,1,0,0,114,23,1,0,0,
+ 114,140,0,0,0,114,178,0,0,0,114,24,1,0,0,41,
+ 3,114,118,0,0,0,90,11,112,97,114,101,110,116,95,112,
+ 97,116,104,114,187,0,0,0,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,218,12,95,114,101,99,97,108,99,
+ 117,108,97,116,101,143,4,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,0,0,0,0,1,0,0,0,3,0,0,0,
+ 67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,161,
+ 0,131,1,83,0,114,109,0,0,0,41,2,114,6,1,0,
+ 0,114,32,1,0,0,114,246,0,0,0,114,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,218,8,95,95,105,116,
+ 101,114,95,95,156,4,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,2,0,0,0,0,0,0,
+ 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,
+ 0,115,12,0,0,0,124,0,160,0,161,0,124,1,25,0,
+ 83,0,114,109,0,0,0,169,1,114,32,1,0,0,41,2,
+ 114,118,0,0,0,218,5,105,110,100,101,120,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,218,11,95,95,103,
+ 101,116,105,116,101,109,95,95,159,4,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,103,101,116,105,116,101,109,95,95,99,
+ 3,0,0,0,0,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,114,109,0,0,0,
+ 41,1,114,24,1,0,0,41,3,114,118,0,0,0,114,35,
+ 1,0,0,114,44,0,0,0,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,218,11,95,95,115,101,116,105,116,
+ 101,109,95,95,162,4,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,0,0,0,0,1,0,0,0,3,0,0,0,
+ 67,0,0,0,115,12,0,0,0,116,0,124,0,160,1,161,
+ 0,131,1,83,0,114,109,0,0,0,41,2,114,23,0,0,
+ 0,114,32,1,0,0,114,246,0,0,0,114,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,218,7,95,95,108,101,
+ 110,95,95,165,4,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,0,
+ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
+ 12,0,0,0,100,1,160,0,124,0,106,1,161,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,62,0,0,0,
+ 114,24,1,0,0,114,246,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,218,8,95,95,114,101,112,
+ 114,95,95,168,4,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,
+ 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
+ 115,12,0,0,0,124,1,124,0,160,0,161,0,118,0,83,
+ 0,114,109,0,0,0,114,34,1,0,0,169,2,114,118,0,
+ 0,0,218,4,105,116,101,109,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,218,12,95,95,99,111,110,116,97,
+ 105,110,115,95,95,171,4,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,0,0,0,0,2,0,0,0,3,0,
+ 0,0,67,0,0,0,115,16,0,0,0,124,0,106,0,160,
+ 1,124,1,161,1,1,0,100,0,83,0,114,109,0,0,0,
+ 41,2,114,24,1,0,0,114,186,0,0,0,114,40,1,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 114,186,0,0,0,174,4,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,15,114,125,0,0,0,114,
+ 124,0,0,0,114,126,0,0,0,114,127,0,0,0,114,209,
+ 0,0,0,114,30,1,0,0,114,25,1,0,0,114,32,1,
+ 0,0,114,33,1,0,0,114,36,1,0,0,114,37,1,0,
+ 0,114,38,1,0,0,114,39,1,0,0,114,42,1,0,0,
+ 114,186,0,0,0,114,5,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,114,22,1,0,0,116,4,
+ 0,0,115,24,0,0,0,8,1,4,6,8,6,8,10,8,
+ 4,8,13,8,3,8,3,8,3,8,3,8,3,8,3,114,
+ 22,1,0,0,99,0,0,0,0,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,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,114,109,0,0,0,41,2,114,22,1,
+ 0,0,114,24,1,0,0,114,28,1,0,0,114,5,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,114,209,0,0,0,
+ 180,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,95,95,
+ 105,110,105,116,95,95,99,2,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,
+ 12,0,0,0,100,1,160,0,124,1,106,1,161,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,62,0,0,0,114,125,0,0,0,41,2,
+ 114,193,0,0,0,114,216,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,218,11,109,111,100,117,108,
+ 101,95,114,101,112,114,183,4,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,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,114,211,0,0,0,114,3,0,0,0,114,212,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 213,0,0,0,194,4,0,0,115,2,0,0,0,0,1,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,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,114,110,0,0,0,114,3,0,0,0,114,254,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 218,0,0,0,197,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,0,0,0,0,2,0,0,0,4,0,
- 0,0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,
- 1,124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,
- 1,161,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,135,0,0,0,114,150,0,0,0,114,
- 25,1,0,0,114,219,0,0,0,114,220,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,0,
- 0,0,200,4,0,0,115,8,0,0,0,0,7,6,1,4,
- 255,4,2,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,126,0,0,0,114,125,0,0,0,114,127,
- 0,0,0,114,210,0,0,0,114,208,0,0,0,114,45,1,
- 0,0,114,183,0,0,0,114,230,0,0,0,114,214,0,0,
- 0,114,213,0,0,0,114,218,0,0,0,114,221,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,44,1,0,0,172,4,0,0,115,18,0,
- 0,0,8,1,8,3,2,1,10,8,8,3,8,3,8,3,
- 8,3,8,3,114,44,1,0,0,99,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,
- 0,0,115,118,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,19,100,11,100,12,132,1,131,1,90,
- 9,101,4,100,20,100,13,100,14,132,1,131,1,90,10,101,
- 4,100,21,100,15,100,16,132,1,131,1,90,11,101,4,100,
- 17,100,18,132,0,131,1,90,12,100,10,83,0,41,22,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,0,0,0,0,3,0,0,0,4,0,0,0,
- 67,0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,
- 3,161,0,131,1,68,0,93,44,92,2,125,1,125,2,124,
- 2,100,1,107,8,114,40,116,1,106,2,124,1,61,0,113,
- 14,116,4,124,2,100,2,131,2,114,14,124,2,160,5,161,
- 0,1,0,113,14,100,1,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,78,218,17,105,110,118,
- 97,108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,
- 218,4,108,105,115,116,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,5,105,116,101,109,115,114,129,0,0,0,114,47,1,0,
- 0,41,3,114,194,0,0,0,114,117,0,0,0,218,6,102,
- 105,110,100,101,114,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,47,1,0,0,218,4,0,0,115,10,0,
- 0,0,0,4,22,1,8,1,10,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,0,0,0,0,3,0,0,0,9,0,0,0,67,
- 0,0,0,115,84,0,0,0,116,0,106,1,100,1,107,9,
- 114,28,116,0,106,1,115,28,116,2,160,3,100,2,116,4,
- 161,2,1,0,116,0,106,1,68,0,93,44,125,2,122,14,
- 124,2,124,1,131,1,87,0,2,0,1,0,83,0,4,0,
- 116,5,107,10,114,76,1,0,1,0,1,0,89,0,113,34,
- 89,0,113,34,88,0,113,34,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,75,0,0,0,
- 114,76,0,0,0,114,139,0,0,0,114,118,0,0,0,41,
- 3,114,194,0,0,0,114,44,0,0,0,90,4,104,111,111,
- 107,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,11,95,112,97,116,104,95,104,111,111,107,115,228,4,0,
- 0,115,16,0,0,0,0,3,16,1,12,1,10,1,2,1,
- 14,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,0,0,0,0,3,0,0,0,8,
- 0,0,0,67,0,0,0,115,104,0,0,0,124,1,100,1,
- 107,2,114,44,122,12,116,0,160,1,161,0,125,1,87,0,
- 110,22,4,0,116,2,107,10,114,42,1,0,1,0,1,0,
- 89,0,100,2,83,0,88,0,122,14,116,3,106,4,124,1,
- 25,0,125,2,87,0,110,40,4,0,116,5,107,10,114,98,
- 1,0,1,0,1,0,124,0,160,6,124,1,161,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,109,112,111,114,116,101,114,
- 95,99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,
- 32,73,102,32,116,104,101,32,112,97,116,104,32,101,110,116,
- 114,121,32,105,115,32,110,111,116,32,105,110,32,116,104,101,
- 32,99,97,99,104,101,44,32,102,105,110,100,32,116,104,101,
- 32,97,112,112,114,111,112,114,105,97,116,101,32,102,105,110,
- 100,101,114,10,32,32,32,32,32,32,32,32,97,110,100,32,
- 99,97,99,104,101,32,105,116,46,32,73,102,32,110,111,32,
- 102,105,110,100,101,114,32,105,115,32,97,118,97,105,108,97,
- 98,108,101,44,32,115,116,111,114,101,32,78,111,110,101,46,
- 10,10,32,32,32,32,32,32,32,32,114,40,0,0,0,78,
- 41,7,114,2,0,0,0,114,55,0,0,0,114,4,1,0,
- 0,114,8,0,0,0,114,49,1,0,0,218,8,75,101,121,
- 69,114,114,111,114,114,53,1,0,0,41,3,114,194,0,0,
- 0,114,44,0,0,0,114,51,1,0,0,114,3,0,0,0,
- 114,3,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,
- 241,4,0,0,115,22,0,0,0,0,8,8,1,2,1,12,
- 1,14,3,8,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,0,0,0,0,6,0,0,
- 0,4,0,0,0,67,0,0,0,115,82,0,0,0,116,0,
- 124,2,100,1,131,2,114,26,124,2,160,1,124,1,161,1,
- 92,2,125,3,125,4,110,14,124,2,160,2,124,1,161,1,
- 125,3,103,0,125,4,124,3,100,0,107,9,114,60,116,3,
- 160,4,124,1,124,3,161,2,83,0,116,3,160,5,124,1,
- 100,0,161,2,125,5,124,4,124,5,95,6,124,5,83,0,
- 41,2,78,114,138,0,0,0,41,7,114,129,0,0,0,114,
- 138,0,0,0,114,207,0,0,0,114,135,0,0,0,114,202,
- 0,0,0,114,184,0,0,0,114,179,0,0,0,41,6,114,
- 194,0,0,0,114,140,0,0,0,114,51,1,0,0,114,141,
- 0,0,0,114,142,0,0,0,114,188,0,0,0,114,3,0,
- 0,0,114,3,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,7,5,
- 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,
- 0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,0,
- 115,166,0,0,0,103,0,125,4,124,2,68,0,93,134,125,
- 5,116,0,124,5,116,1,116,2,102,2,131,2,115,28,113,
- 8,124,0,160,3,124,5,161,1,125,6,124,6,100,1,107,
- 9,114,8,116,4,124,6,100,2,131,2,114,70,124,6,160,
- 5,124,1,124,3,161,2,125,7,110,12,124,0,160,6,124,
- 1,124,6,161,2,125,7,124,7,100,1,107,8,114,92,113,
- 8,124,7,106,7,100,1,107,9,114,110,124,7,2,0,1,
- 0,83,0,124,7,106,8,125,8,124,8,100,1,107,8,114,
- 132,116,9,100,3,131,1,130,1,124,4,160,10,124,8,161,
- 1,1,0,113,8,116,11,160,12,124,1,100,1,161,2,125,
- 7,124,4,124,7,95,8,124,7,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,
- 204,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,162,0,0,0,
- 114,85,0,0,0,218,5,98,121,116,101,115,114,55,1,0,
- 0,114,129,0,0,0,114,204,0,0,0,114,56,1,0,0,
- 114,141,0,0,0,114,179,0,0,0,114,118,0,0,0,114,
- 168,0,0,0,114,135,0,0,0,114,184,0,0,0,41,9,
- 114,194,0,0,0,114,140,0,0,0,114,44,0,0,0,114,
- 203,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,51,1,0,0,
- 114,188,0,0,0,114,142,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,9,95,103,101,116,95,
- 115,112,101,99,22,5,0,0,115,40,0,0,0,0,5,4,
- 1,8,1,14,1,2,1,10,1,8,1,10,1,14,2,12,
- 1,8,1,2,1,10,1,8,1,6,1,8,1,8,5,12,
- 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,0,0,0,0,6,0,0,0,5,0,0,0,
- 67,0,0,0,115,100,0,0,0,124,2,100,1,107,8,114,
- 14,116,0,106,1,125,2,124,0,160,2,124,1,124,2,124,
- 3,161,3,125,4,124,4,100,1,107,8,114,40,100,1,83,
- 0,124,4,106,3,100,1,107,8,114,92,124,4,106,4,125,
- 5,124,5,114,86,100,1,124,4,95,5,116,6,124,1,124,
- 5,124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,
- 1,83,0,110,4,124,4,83,0,100,1,83,0,41,2,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,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,10,32,32,32,32,32,32,32,32,78,41,
- 7,114,8,0,0,0,114,44,0,0,0,114,59,1,0,0,
- 114,141,0,0,0,114,179,0,0,0,114,182,0,0,0,114,
- 23,1,0,0,41,6,114,194,0,0,0,114,140,0,0,0,
- 114,44,0,0,0,114,203,0,0,0,114,188,0,0,0,114,
- 58,1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,114,204,0,0,0,54,5,0,0,115,26,0,0,
- 0,0,6,8,1,6,1,14,1,8,1,4,1,10,1,6,
- 1,4,3,6,1,16,1,4,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,0,0,0,0,4,0,
- 0,0,4,0,0,0,67,0,0,0,115,30,0,0,0,124,
- 0,160,0,124,1,124,2,161,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,114,205,0,0,
- 0,114,206,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,207,0,0,0,78,5,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,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 4,0,0,0,3,0,0,0,79,0,0,0,115,24,0,0,
- 0,100,1,100,2,108,0,109,1,125,3,1,0,124,3,106,
- 2,124,1,124,2,142,1,83,0,41,3,97,32,1,0,0,
- 10,32,32,32,32,32,32,32,32,70,105,110,100,32,100,105,
- 115,116,114,105,98,117,116,105,111,110,115,46,10,10,32,32,
- 32,32,32,32,32,32,82,101,116,117,114,110,32,97,110,32,
- 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32,
- 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115,
- 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111,
- 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110,
- 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,
- 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99,
- 104,105,110,103,32,96,96,99,111,110,116,101,120,116,46,110,
- 97,109,101,96,96,10,32,32,32,32,32,32,32,32,40,111,
- 114,32,97,108,108,32,110,97,109,101,115,32,105,102,32,96,
- 96,78,111,110,101,96,96,32,105,110,100,105,99,97,116,101,
- 100,41,32,97,108,111,110,103,32,116,104,101,32,112,97,116,
- 104,115,32,105,110,32,116,104,101,32,108,105,115,116,10,32,
- 32,32,32,32,32,32,32,111,102,32,100,105,114,101,99,116,
- 111,114,105,101,115,32,96,96,99,111,110,116,101,120,116,46,
- 112,97,116,104,96,96,46,10,32,32,32,32,32,32,32,32,
- 114,73,0,0,0,41,1,218,18,77,101,116,97,100,97,116,
- 97,80,97,116,104,70,105,110,100,101,114,41,3,90,18,105,
- 109,112,111,114,116,108,105,98,46,109,101,116,97,100,97,116,
- 97,114,60,1,0,0,218,18,102,105,110,100,95,100,105,115,
- 116,114,105,98,117,116,105,111,110,115,41,4,114,194,0,0,
- 0,114,120,0,0,0,114,121,0,0,0,114,60,1,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 61,1,0,0,91,5,0,0,115,4,0,0,0,0,10,12,
- 1,122,29,80,97,116,104,70,105,110,100,101,114,46,102,105,
- 110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,
- 41,1,78,41,2,78,78,41,1,78,41,13,114,126,0,0,
- 0,114,125,0,0,0,114,127,0,0,0,114,128,0,0,0,
- 114,208,0,0,0,114,47,1,0,0,114,53,1,0,0,114,
- 55,1,0,0,114,56,1,0,0,114,59,1,0,0,114,204,
- 0,0,0,114,207,0,0,0,114,61,1,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,46,1,0,0,214,4,0,0,115,34,0,0,0,8,
- 2,4,2,2,1,10,9,2,1,10,12,2,1,10,21,2,
- 1,10,14,2,1,12,31,2,1,12,23,2,1,12,12,2,
- 1,114,46,1,0,0,99,0,0,0,0,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,0,0,0,0,5,0,0,0,6,0,0,0,7,
- 0,0,0,115,84,0,0,0,103,0,125,3,124,2,68,0,
- 93,32,92,2,137,0,125,4,124,3,160,0,135,0,102,1,
- 100,1,100,2,132,8,124,4,68,0,131,1,161,1,1,0,
- 113,8,124,3,124,0,95,1,124,1,112,54,100,3,124,0,
- 95,2,100,4,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,6,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,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,114,110,
- 0,0,0,114,3,0,0,0,114,17,1,0,0,169,1,114,
- 141,0,0,0,114,3,0,0,0,114,6,0,0,0,114,20,
- 1,0,0,120,5,0,0,115,4,0,0,0,4,0,2,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,71,0,0,0,114,105,0,
- 0,0,78,41,7,114,168,0,0,0,218,8,95,108,111,97,
- 100,101,114,115,114,44,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,
- 119,0,0,0,114,44,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,190,0,0,0,114,3,0,0,0,114,63,1,0,
- 0,114,6,0,0,0,114,210,0,0,0,114,5,0,0,115,
- 16,0,0,0,0,4,4,1,12,1,26,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,0,0,0,0,1,0,0,0,2,0,0,0,67,0,
- 0,0,115,10,0,0,0,100,1,124,0,95,0,100,2,83,
- 0,41,3,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,105,0,0,0,78,41,1,114,65,1,0,
- 0,114,247,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,47,1,0,0,128,5,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,0,0,0,0,
- 3,0,0,0,3,0,0,0,67,0,0,0,115,42,0,0,
- 0,124,0,160,0,124,1,161,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,
+ 0,41,2,78,84,114,5,0,0,0,114,219,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,182,
+ 0,0,0,192,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,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,40,0,0,0,114,5,0,0,0,114,219,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,229,
+ 0,0,0,195,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,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,40,0,0,
+ 0,122,8,60,115,116,114,105,110,103,62,114,215,0,0,0,
+ 84,41,1,114,231,0,0,0,41,1,114,232,0,0,0,114,
+ 219,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,114,213,0,0,0,198,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,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,
+ 114,210,0,0,0,114,5,0,0,0,114,211,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,212,
+ 0,0,0,201,4,0,0,115,2,0,0,0,0,1,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,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,
+ 114,109,0,0,0,114,5,0,0,0,114,253,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,217,
+ 0,0,0,204,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,0,0,0,0,2,0,0,0,4,0,0,
+ 0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,1,
+ 124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,1,
+ 161,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,134,0,0,0,114,149,0,0,0,114,24,
+ 1,0,0,114,218,0,0,0,114,219,0,0,0,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,114,220,0,0,
+ 0,207,4,0,0,115,8,0,0,0,0,7,6,1,4,255,
+ 4,2,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,125,0,0,0,114,124,0,0,0,114,126,0,
+ 0,0,114,209,0,0,0,114,207,0,0,0,114,44,1,0,
+ 0,114,182,0,0,0,114,229,0,0,0,114,213,0,0,0,
+ 114,212,0,0,0,114,217,0,0,0,114,220,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,114,43,1,0,0,179,4,0,0,115,18,0,0,
+ 0,8,1,8,3,2,1,10,8,8,3,8,3,8,3,8,
+ 3,8,3,114,43,1,0,0,99,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,
+ 0,115,118,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,19,100,11,100,12,132,1,131,1,90,9,
+ 101,4,100,20,100,13,100,14,132,1,131,1,90,10,101,4,
+ 100,21,100,15,100,16,132,1,131,1,90,11,101,4,100,17,
+ 100,18,132,0,131,1,90,12,100,10,83,0,41,22,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,0,0,0,0,3,0,0,0,4,0,0,0,67,
+ 0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,3,
+ 161,0,131,1,68,0,93,44,92,2,125,1,125,2,124,2,
+ 100,1,117,0,114,40,116,1,106,2,124,1,61,0,113,14,
+ 116,4,124,2,100,2,131,2,114,14,124,2,160,5,161,0,
+ 1,0,113,14,100,1,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,78,218,17,105,110,118,97,
+ 108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,218,
+ 4,108,105,115,116,114,1,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,
+ 5,105,116,101,109,115,114,128,0,0,0,114,46,1,0,0,
+ 41,3,114,193,0,0,0,114,116,0,0,0,218,6,102,105,
+ 110,100,101,114,114,5,0,0,0,114,5,0,0,0,114,8,
+ 0,0,0,114,46,1,0,0,225,4,0,0,115,10,0,0,
+ 0,0,4,22,1,8,1,10,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,0,0,0,0,3,0,0,0,9,0,0,0,67,0,
+ 0,0,115,82,0,0,0,116,0,106,1,100,1,117,1,114,
+ 28,116,0,106,1,115,28,116,2,160,3,100,2,116,4,161,
+ 2,1,0,116,0,106,1,68,0,93,42,125,2,122,14,124,
+ 2,124,1,131,1,87,0,2,0,1,0,83,0,4,0,116,
+ 5,121,74,1,0,1,0,1,0,89,0,113,34,89,0,113,
+ 34,48,0,113,34,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,1,0,0,0,218,10,112,97,
+ 116,104,95,104,111,111,107,115,114,75,0,0,0,114,76,0,
+ 0,0,114,138,0,0,0,114,117,0,0,0,41,3,114,193,
+ 0,0,0,114,44,0,0,0,90,4,104,111,111,107,114,5,
+ 0,0,0,114,5,0,0,0,114,8,0,0,0,218,11,95,
+ 112,97,116,104,95,104,111,111,107,115,235,4,0,0,115,16,
+ 0,0,0,0,3,16,1,12,1,10,1,2,1,14,1,12,
+ 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,0,0,0,0,3,0,0,0,8,0,0,0,
+ 67,0,0,0,115,100,0,0,0,124,1,100,1,107,2,114,
+ 42,122,12,116,0,160,1,161,0,125,1,87,0,110,20,4,
+ 0,116,2,121,40,1,0,1,0,1,0,89,0,100,2,83,
+ 0,48,0,122,14,116,3,106,4,124,1,25,0,125,2,87,
+ 0,110,38,4,0,116,5,121,94,1,0,1,0,1,0,124,
+ 0,160,6,124,1,161,1,125,2,124,2,116,3,106,4,124,
+ 1,60,0,89,0,110,2,48,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,109,112,111,114,116,101,114,95,99,97,99,104,101,46,
+ 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,
+ 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110,
+ 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44,
+ 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112,
+ 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32,
+ 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105,
+ 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32,
+ 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116,
+ 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32,
+ 32,32,32,114,40,0,0,0,78,41,7,114,4,0,0,0,
+ 114,55,0,0,0,114,3,1,0,0,114,1,0,0,0,114,
+ 48,1,0,0,218,8,75,101,121,69,114,114,111,114,114,52,
+ 1,0,0,41,3,114,193,0,0,0,114,44,0,0,0,114,
+ 50,1,0,0,114,5,0,0,0,114,5,0,0,0,114,8,
+ 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,248,4,0,0,115,22,0,
+ 0,0,0,8,8,1,2,1,12,1,12,3,8,1,2,1,
+ 14,1,12,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,0,0,0,0,6,0,0,0,4,0,0,0,67,0,
+ 0,0,115,82,0,0,0,116,0,124,2,100,1,131,2,114,
+ 26,124,2,160,1,124,1,161,1,92,2,125,3,125,4,110,
+ 14,124,2,160,2,124,1,161,1,125,3,103,0,125,4,124,
+ 3,100,0,117,1,114,60,116,3,160,4,124,1,124,3,161,
+ 2,83,0,116,3,160,5,124,1,100,0,161,2,125,5,124,
+ 4,124,5,95,6,124,5,83,0,41,2,78,114,137,0,0,
+ 0,41,7,114,128,0,0,0,114,137,0,0,0,114,206,0,
+ 0,0,114,134,0,0,0,114,201,0,0,0,114,183,0,0,
+ 0,114,178,0,0,0,41,6,114,193,0,0,0,114,139,0,
+ 0,0,114,50,1,0,0,114,140,0,0,0,114,141,0,0,
+ 0,114,187,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,218,16,95,108,101,103,97,99,121,95,103,
+ 101,116,95,115,112,101,99,14,5,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,0,0,0,0,9,0,0,
+ 0,5,0,0,0,67,0,0,0,115,166,0,0,0,103,0,
+ 125,4,124,2,68,0,93,134,125,5,116,0,124,5,116,1,
+ 116,2,102,2,131,2,115,28,113,8,124,0,160,3,124,5,
+ 161,1,125,6,124,6,100,1,117,1,114,8,116,4,124,6,
+ 100,2,131,2,114,70,124,6,160,5,124,1,124,3,161,2,
+ 125,7,110,12,124,0,160,6,124,1,124,6,161,2,125,7,
+ 124,7,100,1,117,0,114,92,113,8,124,7,106,7,100,1,
+ 117,1,114,110,124,7,2,0,1,0,83,0,124,7,106,8,
+ 125,8,124,8,100,1,117,0,114,132,116,9,100,3,131,1,
+ 130,1,124,4,160,10,124,8,161,1,1,0,113,8,116,11,
+ 160,12,124,1,100,1,161,2,125,7,124,4,124,7,95,8,
+ 124,7,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,203,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,161,0,0,0,114,84,0,0,0,218,5,
+ 98,121,116,101,115,114,54,1,0,0,114,128,0,0,0,114,
+ 203,0,0,0,114,55,1,0,0,114,140,0,0,0,114,178,
+ 0,0,0,114,117,0,0,0,114,167,0,0,0,114,134,0,
+ 0,0,114,183,0,0,0,41,9,114,193,0,0,0,114,139,
+ 0,0,0,114,44,0,0,0,114,202,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,50,1,0,0,114,187,0,0,0,114,141,
+ 0,0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,218,9,95,103,101,116,95,115,112,101,99,29,5,0,
+ 0,115,40,0,0,0,0,5,4,1,8,1,14,1,2,1,
+ 10,1,8,1,10,1,14,2,12,1,8,1,2,1,10,1,
+ 8,1,6,1,8,1,8,5,12,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,0,0,0,
+ 0,6,0,0,0,5,0,0,0,67,0,0,0,115,100,0,
+ 0,0,124,2,100,1,117,0,114,14,116,0,106,1,125,2,
+ 124,0,160,2,124,1,124,2,124,3,161,3,125,4,124,4,
+ 100,1,117,0,114,40,100,1,83,0,124,4,106,3,100,1,
+ 117,0,114,92,124,4,106,4,125,5,124,5,114,86,100,1,
+ 124,4,95,5,116,6,124,1,124,5,124,0,106,2,131,3,
+ 124,4,95,4,124,4,83,0,100,1,83,0,110,4,124,4,
+ 83,0,100,1,83,0,41,2,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,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,10,32,
+ 32,32,32,32,32,32,32,78,41,7,114,1,0,0,0,114,
+ 44,0,0,0,114,58,1,0,0,114,140,0,0,0,114,178,
+ 0,0,0,114,181,0,0,0,114,22,1,0,0,41,6,114,
+ 193,0,0,0,114,139,0,0,0,114,44,0,0,0,114,202,
+ 0,0,0,114,187,0,0,0,114,57,1,0,0,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,114,203,0,0,
+ 0,61,5,0,0,115,26,0,0,0,0,6,8,1,6,1,
+ 14,1,8,1,4,1,10,1,6,1,4,3,6,1,16,1,
+ 4,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,0,0,0,0,4,0,0,0,4,0,0,0,67,
+ 0,0,0,115,30,0,0,0,124,0,160,0,124,1,124,2,
+ 161,2,125,3,124,3,100,1,117,0,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,3,114,204,0,0,0,114,141,0,0,
- 0,114,179,0,0,0,41,3,114,119,0,0,0,114,140,0,
- 0,0,114,188,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,138,0,0,0,134,5,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,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,114,
- 178,0,0,0,41,1,114,191,0,0,0,41,7,114,119,0,
- 0,0,114,189,0,0,0,114,140,0,0,0,114,44,0,0,
- 0,90,4,115,109,115,108,114,203,0,0,0,114,141,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 114,59,1,0,0,146,5,0,0,115,8,0,0,0,0,1,
- 10,1,8,1,2,255,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,0,0,0,0,14,0,0,0,8,0,
- 0,0,67,0,0,0,115,98,1,0,0,100,1,125,3,124,
- 1,160,0,100,2,161,1,100,3,25,0,125,4,122,24,116,
- 1,124,0,106,2,112,34,116,3,160,4,161,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,4,125,5,89,0,110,2,88,0,124,
- 5,124,0,106,7,107,3,114,92,124,0,160,8,161,0,1,
- 0,124,5,124,0,95,7,116,9,131,0,114,114,124,0,106,
- 10,125,6,124,4,160,11,161,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,124,0,106,14,68,
- 0,93,58,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,150,124,0,160,16,124,10,124,1,124,12,124,8,103,
- 1,124,2,161,5,2,0,1,0,83,0,113,150,116,17,124,
- 8,131,1,125,3,124,0,106,14,68,0,93,82,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,224,116,
- 15,124,12,131,1,114,224,124,0,160,16,124,10,124,1,124,
- 12,100,8,124,2,161,5,2,0,1,0,83,0,113,224,124,
- 3,144,1,114,94,116,18,160,19,100,9,124,8,161,2,1,
- 0,116,18,160,20,124,1,100,8,161,2,125,13,124,8,103,
- 1,124,13,95,21,124,13,83,0,100,8,83,0,41,10,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,71,0,0,0,114,28,0,0,0,114,105,0,0,0,
- 114,210,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,41,22,114,41,0,0,0,
- 114,49,0,0,0,114,44,0,0,0,114,2,0,0,0,114,
- 55,0,0,0,114,11,1,0,0,114,50,0,0,0,114,65,
- 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101,
- 114,7,0,0,0,114,68,1,0,0,114,106,0,0,0,114,
- 67,1,0,0,114,38,0,0,0,114,64,1,0,0,114,54,
- 0,0,0,114,59,1,0,0,114,56,0,0,0,114,135,0,
- 0,0,114,150,0,0,0,114,184,0,0,0,114,179,0,0,
- 0,41,14,114,119,0,0,0,114,140,0,0,0,114,203,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,170,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,18,1,0,0,114,189,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,188,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,114,204,0,0,0,151,
- 5,0,0,115,74,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,14,1,8,1,10,1,
- 8,1,26,4,8,2,14,1,16,1,16,1,12,1,8,1,
- 10,1,2,0,2,255,10,2,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,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0,
- 0,115,190,0,0,0,124,0,106,0,125,1,122,22,116,1,
- 160,2,124,1,112,22,116,1,160,3,161,0,161,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,160,9,100,1,161,1,115,84,116,10,
- 124,2,131,1,124,0,95,11,110,74,116,10,131,0,125,3,
- 124,2,68,0,93,56,125,4,124,4,160,12,100,2,161,1,
- 92,3,125,5,125,6,125,7,124,6,114,136,100,3,160,13,
- 124,5,124,7,160,14,161,0,161,2,125,8,110,4,124,5,
- 125,8,124,3,160,15,124,8,161,1,1,0,113,94,124,3,
- 124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,186,
- 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,71,0,0,0,114,61,0,0,0,99,1,0,0,0,
+ 32,32,32,32,78,114,204,0,0,0,114,205,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,206,
+ 0,0,0,85,5,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,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,
+ 0,79,0,0,0,115,28,0,0,0,100,1,100,2,108,0,
+ 109,1,125,3,1,0,124,3,106,2,124,1,105,0,124,2,
+ 164,1,142,1,83,0,41,3,97,32,1,0,0,10,32,32,
+ 32,32,32,32,32,32,70,105,110,100,32,100,105,115,116,114,
+ 105,98,117,116,105,111,110,115,46,10,10,32,32,32,32,32,
+ 32,32,32,82,101,116,117,114,110,32,97,110,32,105,116,101,
+ 114,97,98,108,101,32,111,102,32,97,108,108,32,68,105,115,
+ 116,114,105,98,117,116,105,111,110,32,105,110,115,116,97,110,
+ 99,101,115,32,99,97,112,97,98,108,101,32,111,102,10,32,
+ 32,32,32,32,32,32,32,108,111,97,100,105,110,103,32,116,
+ 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32,
+ 112,97,99,107,97,103,101,115,32,109,97,116,99,104,105,110,
+ 103,32,96,96,99,111,110,116,101,120,116,46,110,97,109,101,
+ 96,96,10,32,32,32,32,32,32,32,32,40,111,114,32,97,
+ 108,108,32,110,97,109,101,115,32,105,102,32,96,96,78,111,
+ 110,101,96,96,32,105,110,100,105,99,97,116,101,100,41,32,
+ 97,108,111,110,103,32,116,104,101,32,112,97,116,104,115,32,
+ 105,110,32,116,104,101,32,108,105,115,116,10,32,32,32,32,
+ 32,32,32,32,111,102,32,100,105,114,101,99,116,111,114,105,
+ 101,115,32,96,96,99,111,110,116,101,120,116,46,112,97,116,
+ 104,96,96,46,10,32,32,32,32,32,32,32,32,114,73,0,
+ 0,0,41,1,218,18,77,101,116,97,100,97,116,97,80,97,
+ 116,104,70,105,110,100,101,114,41,3,90,18,105,109,112,111,
+ 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,59,
+ 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105,
+ 98,117,116,105,111,110,115,41,4,114,193,0,0,0,114,119,
+ 0,0,0,114,120,0,0,0,114,59,1,0,0,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,114,60,1,0,
+ 0,98,5,0,0,115,4,0,0,0,0,10,12,1,122,29,
+ 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,
+ 100,105,115,116,114,105,98,117,116,105,111,110,115,41,1,78,
+ 41,2,78,78,41,1,78,41,13,114,125,0,0,0,114,124,
+ 0,0,0,114,126,0,0,0,114,127,0,0,0,114,207,0,
+ 0,0,114,46,1,0,0,114,52,1,0,0,114,54,1,0,
+ 0,114,55,1,0,0,114,58,1,0,0,114,203,0,0,0,
+ 114,206,0,0,0,114,60,1,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,45,
+ 1,0,0,221,4,0,0,115,34,0,0,0,8,2,4,2,
+ 2,1,10,9,2,1,10,12,2,1,10,21,2,1,10,14,
+ 2,1,12,31,2,1,12,23,2,1,12,12,2,1,114,45,
+ 1,0,0,99,0,0,0,0,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,
+ 0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,
+ 115,84,0,0,0,103,0,125,3,124,2,68,0,93,32,92,
+ 2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100,
+ 2,132,8,124,4,68,0,131,1,161,1,1,0,113,8,124,
+ 3,124,0,95,1,124,1,112,54,100,3,124,0,95,2,100,
+ 4,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,6,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,
+ 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,114,109,0,0,0,
+ 114,5,0,0,0,114,16,1,0,0,169,1,114,140,0,0,
+ 0,114,5,0,0,0,114,8,0,0,0,114,19,1,0,0,
+ 127,5,0,0,243,0,0,0,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,71,0,0,0,114,104,0,0,0,78,41,7,114,167,
+ 0,0,0,218,8,95,108,111,97,100,101,114,115,114,44,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,118,0,0,0,114,44,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,189,0,0,0,
+ 114,5,0,0,0,114,62,1,0,0,114,8,0,0,0,114,
+ 209,0,0,0,121,5,0,0,115,16,0,0,0,0,4,4,
+ 1,12,1,26,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,0,0,0,0,1,
+ 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,
+ 100,1,124,0,95,0,100,2,83,0,41,3,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,104,0,
+ 0,0,78,41,1,114,65,1,0,0,114,246,0,0,0,114,
+ 5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,46,
+ 1,0,0,135,5,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,0,0,0,0,3,0,0,0,3,0,0,
+ 0,67,0,0,0,115,42,0,0,0,124,0,160,0,124,1,
+ 161,1,125,2,124,2,100,1,117,0,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,203,0,0,0,114,140,0,0,0,114,178,0,0,0,41,
+ 3,114,118,0,0,0,114,139,0,0,0,114,187,0,0,0,
+ 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,114,
+ 137,0,0,0,141,5,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,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,114,177,0,0,0,41,1,114,
+ 190,0,0,0,41,7,114,118,0,0,0,114,188,0,0,0,
+ 114,139,0,0,0,114,44,0,0,0,90,4,115,109,115,108,
+ 114,202,0,0,0,114,140,0,0,0,114,5,0,0,0,114,
+ 5,0,0,0,114,8,0,0,0,114,58,1,0,0,153,5,
+ 0,0,115,8,0,0,0,0,1,10,1,8,1,2,255,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,0,
+ 0,0,0,14,0,0,0,8,0,0,0,67,0,0,0,115,
+ 96,1,0,0,100,1,125,3,124,1,160,0,100,2,161,1,
+ 100,3,25,0,125,4,122,24,116,1,124,0,106,2,112,34,
+ 116,3,160,4,161,0,131,1,106,5,125,5,87,0,110,22,
+ 4,0,116,6,121,64,1,0,1,0,1,0,100,4,125,5,
+ 89,0,110,2,48,0,124,5,124,0,106,7,107,3,114,90,
+ 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9,
+ 131,0,114,112,124,0,106,10,125,6,124,4,160,11,161,0,
+ 125,7,110,10,124,0,106,12,125,6,124,4,125,7,124,7,
+ 124,6,118,0,114,216,116,13,124,0,106,2,124,4,131,2,
+ 125,8,124,0,106,14,68,0,93,58,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,148,124,0,160,16,124,10,
+ 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0,
+ 83,0,113,148,116,17,124,8,131,1,125,3,124,0,106,14,
+ 68,0,93,82,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,118,0,114,222,116,15,124,12,131,1,114,222,124,0,
+ 160,16,124,10,124,1,124,12,100,8,124,2,161,5,2,0,
+ 1,0,83,0,113,222,124,3,144,1,114,92,116,18,160,19,
+ 100,9,124,8,161,2,1,0,116,18,160,20,124,1,100,8,
+ 161,2,125,13,124,8,103,1,124,13,95,21,124,13,83,0,
+ 100,8,83,0,41,10,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,71,0,0,0,114,28,0,
+ 0,0,114,104,0,0,0,114,209,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,
+ 41,22,114,41,0,0,0,114,49,0,0,0,114,44,0,0,
+ 0,114,4,0,0,0,114,55,0,0,0,114,10,1,0,0,
+ 114,50,0,0,0,114,65,1,0,0,218,11,95,102,105,108,
+ 108,95,99,97,99,104,101,114,9,0,0,0,114,68,1,0,
+ 0,114,105,0,0,0,114,67,1,0,0,114,38,0,0,0,
+ 114,64,1,0,0,114,54,0,0,0,114,58,1,0,0,114,
+ 56,0,0,0,114,134,0,0,0,114,149,0,0,0,114,183,
+ 0,0,0,114,178,0,0,0,41,14,114,118,0,0,0,114,
+ 139,0,0,0,114,202,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,169,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,17,1,0,0,114,188,
+ 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,187,0,
+ 0,0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,
+ 0,114,203,0,0,0,158,5,0,0,115,72,0,0,0,0,
+ 5,4,1,14,1,2,1,24,1,12,1,10,1,10,1,8,
+ 1,6,2,6,1,6,1,10,2,6,1,4,2,8,1,12,
+ 1,14,1,8,1,10,1,8,1,26,4,8,2,14,1,16,
+ 1,16,1,12,1,8,1,10,1,4,255,10,2,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,0,0,0,0,9,0,0,0,10,0,
+ 0,0,67,0,0,0,115,188,0,0,0,124,0,106,0,125,
+ 1,122,22,116,1,160,2,124,1,112,22,116,1,160,3,161,
+ 0,161,1,125,2,87,0,110,28,4,0,116,4,116,5,116,
+ 6,102,3,121,56,1,0,1,0,1,0,103,0,125,2,89,
+ 0,110,2,48,0,116,7,106,8,160,9,100,1,161,1,115,
+ 82,116,10,124,2,131,1,124,0,95,11,110,74,116,10,131,
+ 0,125,3,124,2,68,0,93,56,125,4,124,4,160,12,100,
+ 2,161,1,92,3,125,5,125,6,125,7,124,6,114,134,100,
+ 3,160,13,124,5,124,7,160,14,161,0,161,2,125,8,110,
+ 4,124,5,125,8,124,3,160,15,124,8,161,1,1,0,113,
+ 92,124,3,124,0,95,11,116,7,106,8,160,9,116,16,161,
+ 1,114,184,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,71,0,0,0,114,61,0,0,0,99,1,
+ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,
+ 0,0,0,83,0,0,0,115,20,0,0,0,104,0,124,0,
+ 93,12,125,1,124,1,160,0,161,0,146,2,113,4,83,0,
+ 114,5,0,0,0,41,1,114,105,0,0,0,41,2,114,32,
+ 0,0,0,90,2,102,110,114,5,0,0,0,114,5,0,0,
+ 0,114,8,0,0,0,218,9,60,115,101,116,99,111,109,112,
+ 62,235,5,0,0,114,63,1,0,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,44,0,0,0,114,4,0,
+ 0,0,114,7,1,0,0,114,55,0,0,0,114,3,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,1,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,66,1,0,0,114,67,1,0,0,114,
+ 100,0,0,0,114,62,0,0,0,114,105,0,0,0,218,3,
+ 97,100,100,114,12,0,0,0,114,68,1,0,0,41,9,114,
+ 118,0,0,0,114,44,0,0,0,114,8,1,0,0,90,21,
+ 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110,
+ 116,101,110,116,115,114,41,1,0,0,114,116,0,0,0,114,
+ 29,1,0,0,114,17,1,0,0,90,8,110,101,119,95,110,
+ 97,109,101,114,5,0,0,0,114,5,0,0,0,114,8,0,
+ 0,0,114,70,1,0,0,206,5,0,0,115,34,0,0,0,
+ 0,2,6,1,2,1,22,1,18,3,10,3,12,1,12,7,
+ 6,1,8,1,16,1,4,1,18,2,4,1,12,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,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,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,0,0,
+ 0,0,1,0,0,0,4,0,0,0,19,0,0,0,115,36,
+ 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,103,1,136,1,162,
+ 1,82,0,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,114,48,0,0,0,41,2,114,
+ 56,0,0,0,114,117,0,0,0,114,48,0,0,0,169,2,
+ 114,193,0,0,0,114,69,1,0,0,114,5,0,0,0,114,
+ 8,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,247,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,5,0,0,0,41,3,114,193,0,0,
+ 0,114,69,1,0,0,114,76,1,0,0,114,5,0,0,0,
+ 114,75,1,0,0,114,8,0,0,0,218,9,112,97,116,104,
+ 95,104,111,111,107,237,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,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,
+ 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,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,62,0,0,0,114,44,
+ 0,0,0,114,246,0,0,0,114,5,0,0,0,114,5,0,
+ 0,0,114,8,0,0,0,114,39,1,0,0,255,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,125,0,0,0,114,124,0,0,0,114,126,0,0,0,
+ 114,127,0,0,0,114,209,0,0,0,114,46,1,0,0,114,
+ 143,0,0,0,114,206,0,0,0,114,137,0,0,0,114,58,
+ 1,0,0,114,203,0,0,0,114,70,1,0,0,114,207,0,
+ 0,0,114,77,1,0,0,114,39,1,0,0,114,5,0,0,
+ 0,114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,
+ 114,61,1,0,0,112,5,0,0,115,22,0,0,0,8,2,
+ 4,7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,
+ 2,1,10,17,114,61,1,0,0,99,4,0,0,0,0,0,
+ 0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,
+ 0,0,115,144,0,0,0,124,0,160,0,100,1,161,1,125,
+ 4,124,0,160,0,100,2,161,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,122,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,
+ 18,4,0,116,5,121,138,1,0,1,0,1,0,89,0,110,
+ 2,48,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,
+ 114,62,1,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,140,0,0,0,114,15,1,0,0,114,9,1,0,
+ 0,114,190,0,0,0,218,9,69,120,99,101,112,116,105,111,
+ 110,41,6,90,2,110,115,114,116,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,140,0,0,0,114,187,0,0,0,114,5,0,0,0,
+ 114,5,0,0,0,114,8,0,0,0,218,14,95,102,105,120,
+ 95,117,112,95,109,111,100,117,108,101,5,6,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,12,2,114,82,1,0,0,99,0,0,0,0,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,160,2,161,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,252,0,0,0,114,163,0,0,0,218,18,101,
+ 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,
+ 115,114,9,1,0,0,114,101,0,0,0,114,15,1,0,0,
+ 114,88,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,5,0,0,0,114,5,0,0,0,114,
+ 8,0,0,0,114,184,0,0,0,28,6,0,0,115,8,0,
+ 0,0,0,5,12,1,8,1,8,1,114,184,0,0,0,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,
+ 9,0,0,0,67,0,0,0,115,132,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,100,1,100,2,103,1,102,2,100,
+ 3,100,4,100,2,103,2,102,2,102,2,125,2,124,2,68,
+ 0,93,108,92,2,125,3,125,4,116,5,100,5,100,6,132,
+ 0,124,4,68,0,131,1,131,1,115,82,74,0,130,1,124,
+ 4,100,7,25,0,125,5,124,3,116,1,106,3,118,0,114,
+ 116,116,1,106,3,124,3,25,0,125,6,1,0,113,170,113,
+ 52,122,20,116,0,160,6,124,3,161,1,125,6,87,0,1,
+ 0,113,170,87,0,113,52,4,0,116,7,121,158,1,0,1,
+ 0,1,0,89,0,113,52,89,0,113,52,48,0,113,52,116,
+ 7,100,8,131,1,130,1,116,8,124,1,100,9,124,6,131,
+ 3,1,0,116,8,124,1,100,10,124,5,131,3,1,0,116,
+ 8,124,1,100,11,100,12,160,9,124,4,161,1,131,3,1,
+ 0,116,8,124,1,100,13,100,14,100,15,132,0,124,4,68,
+ 0,131,1,131,3,1,0,103,0,100,16,162,1,125,7,124,
+ 3,100,3,107,2,144,1,114,6,124,7,160,10,100,17,161,
+ 1,1,0,124,7,68,0,93,52,125,8,124,8,116,1,106,
+ 3,118,1,144,1,114,38,116,0,160,6,124,8,161,1,125,
+ 9,110,10,116,1,106,3,124,8,25,0,125,9,116,8,124,
+ 1,124,8,124,9,131,3,1,0,144,1,113,10,116,8,124,
+ 1,100,18,116,11,131,0,131,3,1,0,116,12,160,13,116,
+ 2,160,14,161,0,161,1,1,0,124,3,100,3,107,2,144,
+ 1,114,128,116,15,160,10,100,19,161,1,1,0,100,20,116,
+ 12,118,0,144,1,114,128,100,21,116,16,95,17,100,22,83,
+ 0,41,23,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,90,5,112,111,115,105,120,250,1,47,90,2,110,116,
+ 250,1,92,99,1,0,0,0,0,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,39,0,
+ 0,0,78,41,1,114,23,0,0,0,41,2,114,32,0,0,
+ 0,114,94,0,0,0,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,114,19,1,0,0,57,6,0,0,114,63,
+ 1,0,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,73,
+ 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,4,0,0,0,114,35,0,0,0,114,31,0,
+ 0,0,114,40,0,0,0,114,58,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+ 0,83,0,0,0,115,22,0,0,0,104,0,124,0,93,14,
+ 125,1,100,0,124,1,155,0,157,2,146,2,113,4,83,0,
+ 41,1,114,74,0,0,0,114,5,0,0,0,41,2,114,32,
+ 0,0,0,218,1,115,114,5,0,0,0,114,5,0,0,0,
+ 114,8,0,0,0,114,71,1,0,0,74,6,0,0,114,63,
+ 1,0,0,122,25,95,115,101,116,117,112,46,60,108,111,99,
+ 97,108,115,62,46,60,115,101,116,99,111,109,112,62,41,3,
+ 114,64,0,0,0,114,75,0,0,0,114,160,0,0,0,114,
+ 192,0,0,0,114,9,0,0,0,122,4,46,112,121,119,122,
+ 6,95,100,46,112,121,100,84,78,41,18,114,134,0,0,0,
+ 114,1,0,0,0,114,163,0,0,0,114,31,1,0,0,114,
+ 125,0,0,0,218,3,97,108,108,90,18,95,98,117,105,108,
+ 116,105,110,95,102,114,111,109,95,110,97,109,101,114,117,0,
+ 0,0,114,129,0,0,0,114,36,0,0,0,114,186,0,0,
+ 0,114,14,0,0,0,114,21,1,0,0,114,167,0,0,0,
+ 114,83,1,0,0,114,101,0,0,0,114,191,0,0,0,114,
+ 195,0,0,0,41,10,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,10,111,115,95,100,101,116,97,105,
+ 108,115,90,10,98,117,105,108,116,105,110,95,111,115,114,31,
+ 0,0,0,114,35,0,0,0,90,9,111,115,95,109,111,100,
+ 117,108,101,90,13,98,117,105,108,116,105,110,95,110,97,109,
+ 101,115,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,
+ 114,5,0,0,0,114,5,0,0,0,114,8,0,0,0,218,
+ 6,95,115,101,116,117,112,39,6,0,0,115,70,0,0,0,
+ 0,8,4,1,6,1,6,2,10,3,22,1,12,2,22,1,
+ 8,1,10,1,10,1,6,2,2,1,10,1,10,1,12,1,
+ 12,2,8,2,12,1,12,1,18,1,22,3,8,1,10,1,
+ 10,1,8,1,12,1,12,2,10,1,16,3,14,1,14,1,
+ 10,1,10,1,10,1,114,89,1,0,0,99,1,0,0,0,
0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,
- 83,0,0,0,115,20,0,0,0,104,0,124,0,93,12,125,
- 1,124,1,160,0,161,0,146,2,113,4,83,0,114,3,0,
- 0,0,41,1,114,106,0,0,0,41,2,114,32,0,0,0,
- 90,2,102,110,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,218,9,60,115,101,116,99,111,109,112,62,228,5,
- 0,0,115,4,0,0,0,6,0,2,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,44,0,0,0,114,2,
- 0,0,0,114,8,1,0,0,114,55,0,0,0,114,4,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,66,1,0,0,114,67,1,0,0,
- 114,101,0,0,0,114,62,0,0,0,114,106,0,0,0,218,
- 3,97,100,100,114,11,0,0,0,114,68,1,0,0,41,9,
- 114,119,0,0,0,114,44,0,0,0,114,9,1,0,0,90,
- 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,
- 110,116,101,110,116,115,114,42,1,0,0,114,117,0,0,0,
- 114,30,1,0,0,114,18,1,0,0,90,8,110,101,119,95,
- 110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,114,70,1,0,0,199,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,8,1,16,1,4,1,18,2,4,1,12,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,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,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,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,114,48,0,0,0,41,2,114,56,
- 0,0,0,114,118,0,0,0,114,48,0,0,0,169,2,114,
- 194,0,0,0,114,69,1,0,0,114,3,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,240,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,3,0,0,0,41,3,114,194,0,0,0,
- 114,69,1,0,0,114,76,1,0,0,114,3,0,0,0,114,
- 75,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95,
- 104,111,111,107,230,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,
- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,
- 115,12,0,0,0,100,1,160,0,124,0,106,1,161,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,62,0,0,0,114,44,0,
- 0,0,114,247,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,40,1,0,0,248,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,126,0,0,0,114,125,0,0,0,114,127,0,0,0,114,
- 128,0,0,0,114,210,0,0,0,114,47,1,0,0,114,144,
- 0,0,0,114,207,0,0,0,114,138,0,0,0,114,59,1,
- 0,0,114,204,0,0,0,114,70,1,0,0,114,208,0,0,
- 0,114,77,1,0,0,114,40,1,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 62,1,0,0,105,5,0,0,115,22,0,0,0,8,2,4,
- 7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,2,
- 1,10,17,114,62,1,0,0,99,4,0,0,0,0,0,0,
- 0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,0,
- 0,115,146,0,0,0,124,0,160,0,100,1,161,1,125,4,
- 124,0,160,0,100,2,161,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,122,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,114,63,1,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,141,0,0,0,114,16,1,0,0,114,10,1,
- 0,0,114,191,0,0,0,218,9,69,120,99,101,112,116,105,
- 111,110,41,6,90,2,110,115,114,117,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,141,0,0,0,114,188,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,14,95,102,105,
- 120,95,117,112,95,109,111,100,117,108,101,254,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,82,1,0,0,99,0,0,0,0,
- 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,160,2,161,
- 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,253,0,0,0,114,164,0,0,0,218,18,
- 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,
- 101,115,114,10,1,0,0,114,102,0,0,0,114,16,1,0,
- 0,114,89,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,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,185,0,0,0,21,6,0,0,115,8,
- 0,0,0,0,5,12,1,8,1,8,1,114,185,0,0,0,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,12,0,0,
- 0,9,0,0,0,67,0,0,0,115,178,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,100,1,68,0,93,48,125,2,
- 124,2,116,1,106,3,107,7,114,56,116,0,160,5,124,2,
- 161,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,30,100,2,
- 100,3,103,1,102,2,100,4,100,5,100,3,103,2,102,2,
- 102,2,125,4,124,4,68,0,93,110,92,2,125,5,125,6,
- 116,7,100,6,100,7,132,0,124,6,68,0,131,1,131,1,
- 115,136,116,8,130,1,124,6,100,8,25,0,125,7,124,5,
- 116,1,106,3,107,6,114,170,116,1,106,3,124,5,25,0,
- 125,8,1,0,113,226,113,106,122,20,116,0,160,5,124,5,
- 161,1,125,8,87,0,1,0,113,226,87,0,113,106,4,0,
- 116,9,107,10,114,214,1,0,1,0,1,0,89,0,113,106,
- 89,0,113,106,88,0,113,106,116,9,100,9,131,1,130,1,
- 116,6,124,1,100,10,124,8,131,3,1,0,116,6,124,1,
- 100,11,124,7,131,3,1,0,116,6,124,1,100,12,100,13,
- 160,10,124,6,161,1,131,3,1,0,116,6,124,1,100,14,
- 100,15,100,16,132,0,124,6,68,0,131,1,131,3,1,0,
- 116,0,160,5,100,17,161,1,125,9,116,6,124,1,100,17,
- 124,9,131,3,1,0,116,0,160,5,100,18,161,1,125,10,
- 116,6,124,1,100,18,124,10,131,3,1,0,124,5,100,4,
- 107,2,144,1,114,110,116,0,160,5,100,19,161,1,125,11,
- 116,6,124,1,100,20,124,11,131,3,1,0,116,6,124,1,
- 100,21,116,11,131,0,131,3,1,0,116,12,160,13,116,2,
- 160,14,161,0,161,1,1,0,124,5,100,4,107,2,144,1,
- 114,174,116,15,160,16,100,22,161,1,1,0,100,23,116,12,
- 107,6,144,1,114,174,100,24,116,17,95,18,100,25,83,0,
- 41,26,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,41,4,114,64,0,0,0,114,75,0,0,0,218,8,98,
- 117,105,108,116,105,110,115,114,161,0,0,0,90,5,112,111,
- 115,105,120,250,1,47,90,2,110,116,250,1,92,99,1,0,
- 0,0,0,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,39,0,0,0,78,41,1,114,
- 22,0,0,0,41,2,114,32,0,0,0,114,95,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 20,1,0,0,57,6,0,0,115,4,0,0,0,4,0,2,
- 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,73,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,2,0,0,0,114,35,0,0,0,114,31,0,0,0,
- 114,40,0,0,0,114,58,0,0,0,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,
- 0,0,0,115,22,0,0,0,104,0,124,0,93,14,125,1,
- 100,0,124,1,155,0,157,2,146,2,113,4,83,0,41,1,
- 114,74,0,0,0,114,3,0,0,0,41,2,114,32,0,0,
- 0,218,1,115,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,114,71,1,0,0,73,6,0,0,115,4,0,0,
- 0,6,0,2,0,122,25,95,115,101,116,117,112,46,60,108,
- 111,99,97,108,115,62,46,60,115,101,116,99,111,109,112,62,
- 90,7,95,116,104,114,101,97,100,90,8,95,119,101,97,107,
- 114,101,102,90,6,119,105,110,114,101,103,114,193,0,0,0,
- 114,7,0,0,0,122,4,46,112,121,119,122,6,95,100,46,
- 112,121,100,84,78,41,19,114,135,0,0,0,114,8,0,0,
- 0,114,164,0,0,0,114,32,1,0,0,114,126,0,0,0,
- 90,18,95,98,117,105,108,116,105,110,95,102,114,111,109,95,
- 110,97,109,101,114,130,0,0,0,218,3,97,108,108,114,23,
- 0,0,0,114,118,0,0,0,114,36,0,0,0,114,13,0,
- 0,0,114,22,1,0,0,114,168,0,0,0,114,83,1,0,
- 0,114,102,0,0,0,114,187,0,0,0,114,192,0,0,0,
- 114,196,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,31,0,
- 0,0,114,35,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,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 6,95,115,101,116,117,112,32,6,0,0,115,78,0,0,0,
- 0,8,4,1,6,1,6,3,10,1,8,1,10,1,12,2,
- 10,1,14,3,22,1,12,2,22,1,8,1,10,1,10,1,
- 6,2,2,1,10,1,10,1,14,1,12,2,8,1,12,1,
- 12,1,18,1,22,3,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,90,
- 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0,
- 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116,
- 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161,
- 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100,
- 1,83,0,41,2,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,
- 78,41,10,114,90,1,0,0,114,185,0,0,0,114,8,0,
- 0,0,114,52,1,0,0,114,168,0,0,0,114,62,1,0,
- 0,114,77,1,0,0,218,9,109,101,116,97,95,112,97,116,
- 104,114,187,0,0,0,114,46,1,0,0,41,2,114,89,1,
- 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111,
- 97,100,101,114,115,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,218,8,95,105,110,115,116,97,108,108,97,6,
- 0,0,115,8,0,0,0,0,2,8,1,6,1,20,1,114,
- 92,1,0,0,41,1,114,60,0,0,0,41,1,78,41,3,
- 78,78,78,41,2,114,73,0,0,0,114,73,0,0,0,41,
- 1,84,41,1,78,41,1,78,41,63,114,128,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,20,0,0,0,114,27,0,0,0,114,
- 29,0,0,0,114,38,0,0,0,114,47,0,0,0,114,49,
- 0,0,0,114,53,0,0,0,114,54,0,0,0,114,56,0,
- 0,0,114,59,0,0,0,114,69,0,0,0,218,4,116,121,
- 112,101,218,8,95,95,99,111,100,101,95,95,114,163,0,0,
- 0,114,18,0,0,0,114,149,0,0,0,114,17,0,0,0,
- 114,24,0,0,0,114,237,0,0,0,114,92,0,0,0,114,
- 88,0,0,0,114,102,0,0,0,114,89,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,98,0,0,0,114,103,0,0,0,114,109,
- 0,0,0,114,113,0,0,0,114,115,0,0,0,114,137,0,
- 0,0,114,144,0,0,0,114,153,0,0,0,114,157,0,0,
- 0,114,159,0,0,0,114,166,0,0,0,114,171,0,0,0,
- 114,172,0,0,0,114,177,0,0,0,218,6,111,98,106,101,
- 99,116,114,186,0,0,0,114,191,0,0,0,114,192,0,0,
- 0,114,209,0,0,0,114,222,0,0,0,114,240,0,0,0,
- 114,10,1,0,0,114,16,1,0,0,114,22,1,0,0,114,
- 253,0,0,0,114,23,1,0,0,114,44,1,0,0,114,46,
- 1,0,0,114,62,1,0,0,114,82,1,0,0,114,185,0,
- 0,0,114,90,1,0,0,114,92,1,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,126,
- 0,0,0,4,22,4,1,4,1,2,1,2,255,4,4,8,
- 17,8,5,8,5,8,6,8,6,8,12,8,10,8,9,8,
- 5,8,7,8,9,10,22,10,127,0,13,16,1,12,2,4,
- 1,4,2,6,2,6,2,8,2,16,71,8,40,8,19,8,
- 12,8,12,8,28,8,17,8,33,8,28,8,24,10,13,10,
- 10,10,11,8,14,6,3,4,1,2,255,12,68,14,64,14,
- 29,16,127,0,17,14,72,18,45,18,26,4,3,18,53,14,
- 63,14,42,14,127,0,20,14,127,0,22,10,23,8,11,8,
- 65,
+ 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1,
+ 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106,
+ 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160,
+ 8,116,9,161,1,1,0,100,1,83,0,41,2,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,78,41,10,114,89,1,0,0,
+ 114,184,0,0,0,114,1,0,0,0,114,51,1,0,0,114,
+ 167,0,0,0,114,61,1,0,0,114,77,1,0,0,218,9,
+ 109,101,116,97,95,112,97,116,104,114,186,0,0,0,114,45,
+ 1,0,0,41,2,114,88,1,0,0,90,17,115,117,112,112,
+ 111,114,116,101,100,95,108,111,97,100,101,114,115,114,5,0,
+ 0,0,114,5,0,0,0,114,8,0,0,0,218,8,95,105,
+ 110,115,116,97,108,108,96,6,0,0,115,8,0,0,0,0,
+ 2,8,1,6,1,20,1,114,91,1,0,0,41,1,114,60,
+ 0,0,0,41,1,78,41,3,78,78,78,41,2,114,73,0,
+ 0,0,114,73,0,0,0,41,1,84,41,1,78,41,1,78,
+ 41,63,114,127,0,0,0,114,13,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,12,0,0,0,114,14,0,0,0,114,21,0,
+ 0,0,114,27,0,0,0,114,29,0,0,0,114,38,0,0,
+ 0,114,47,0,0,0,114,49,0,0,0,114,53,0,0,0,
+ 114,54,0,0,0,114,56,0,0,0,114,59,0,0,0,114,
+ 69,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,
+ 100,101,95,95,114,162,0,0,0,114,19,0,0,0,114,148,
+ 0,0,0,114,18,0,0,0,114,24,0,0,0,114,236,0,
+ 0,0,114,91,0,0,0,114,87,0,0,0,114,101,0,0,
+ 0,114,88,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,97,0,0,
+ 0,114,102,0,0,0,114,108,0,0,0,114,112,0,0,0,
+ 114,114,0,0,0,114,136,0,0,0,114,143,0,0,0,114,
+ 152,0,0,0,114,156,0,0,0,114,158,0,0,0,114,165,
+ 0,0,0,114,170,0,0,0,114,171,0,0,0,114,176,0,
+ 0,0,218,6,111,98,106,101,99,116,114,185,0,0,0,114,
+ 190,0,0,0,114,191,0,0,0,114,208,0,0,0,114,221,
+ 0,0,0,114,239,0,0,0,114,9,1,0,0,114,15,1,
+ 0,0,114,21,1,0,0,114,252,0,0,0,114,22,1,0,
+ 0,114,43,1,0,0,114,45,1,0,0,114,61,1,0,0,
+ 114,82,1,0,0,114,184,0,0,0,114,89,1,0,0,114,
+ 91,1,0,0,114,5,0,0,0,114,5,0,0,0,114,5,
+ 0,0,0,114,8,0,0,0,218,8,60,109,111,100,117,108,
+ 101,62,1,0,0,0,115,126,0,0,0,4,22,4,1,4,
+ 1,2,1,2,255,4,4,8,17,8,5,8,5,8,6,8,
+ 6,8,12,8,10,8,9,8,5,8,7,8,9,10,22,10,
+ 127,0,20,16,1,12,2,4,1,4,2,6,2,6,2,8,
+ 2,16,71,8,40,8,19,8,12,8,12,8,28,8,17,8,
+ 33,8,28,8,24,10,13,10,10,10,11,8,14,6,3,4,
+ 1,2,255,12,68,14,64,14,29,16,127,0,17,14,72,18,
+ 45,18,26,4,3,18,53,14,63,14,42,14,127,0,20,14,
+ 127,0,22,10,23,8,11,8,57,
};
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index f013b41..373b136 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -117,965 +117,963 @@
111,102,32,116,104,101,10,32,32,32,32,122,105,112,102,105,
108,101,32,116,97,114,103,101,116,101,100,46,10,32,32,32,
32,99,2,0,0,0,0,0,0,0,0,0,0,0,8,0,
- 0,0,9,0,0,0,67,0,0,0,115,36,1,0,0,116,
+ 0,0,9,0,0,0,67,0,0,0,115,32,1,0,0,116,
0,124,1,116,1,131,2,115,28,100,1,100,0,108,2,125,
2,124,2,160,3,124,1,161,1,125,1,124,1,115,44,116,
4,100,2,124,1,100,3,141,2,130,1,116,5,114,60,124,
1,160,6,116,5,116,7,161,2,125,1,103,0,125,3,122,
- 14,116,8,160,9,124,1,161,1,125,4,87,0,110,72,4,
- 0,116,10,116,11,102,2,107,10,114,150,1,0,1,0,1,
- 0,116,8,160,12,124,1,161,1,92,2,125,5,125,6,124,
- 5,124,1,107,2,114,132,116,4,100,4,124,1,100,3,141,
- 2,130,1,124,5,125,1,124,3,160,13,124,6,161,1,1,
- 0,89,0,113,64,88,0,124,4,106,14,100,5,64,0,100,
- 6,107,3,114,182,116,4,100,4,124,1,100,3,141,2,130,
- 1,113,182,113,64,122,12,116,15,124,1,25,0,125,7,87,
- 0,110,36,4,0,116,16,107,10,114,230,1,0,1,0,1,
- 0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60,
- 0,89,0,110,2,88,0,124,7,124,0,95,18,124,1,124,
- 0,95,19,116,8,106,20,124,3,100,0,100,0,100,7,133,
- 3,25,0,142,0,124,0,95,21,124,0,106,21,144,1,114,
- 32,124,0,4,0,106,21,116,7,55,0,2,0,95,21,100,
- 0,83,0,41,8,78,114,0,0,0,0,122,21,97,114,99,
- 104,105,118,101,32,112,97,116,104,32,105,115,32,101,109,112,
- 116,121,169,1,218,4,112,97,116,104,122,14,110,111,116,32,
- 97,32,90,105,112,32,102,105,108,101,105,0,240,0,0,105,
- 0,128,0,0,233,255,255,255,255,41,22,218,10,105,115,105,
- 110,115,116,97,110,99,101,218,3,115,116,114,218,2,111,115,
- 90,8,102,115,100,101,99,111,100,101,114,3,0,0,0,218,
- 12,97,108,116,95,112,97,116,104,95,115,101,112,218,7,114,
- 101,112,108,97,99,101,218,8,112,97,116,104,95,115,101,112,
- 218,19,95,98,111,111,116,115,116,114,97,112,95,101,120,116,
- 101,114,110,97,108,90,10,95,112,97,116,104,95,115,116,97,
- 116,218,7,79,83,69,114,114,111,114,218,10,86,97,108,117,
- 101,69,114,114,111,114,90,11,95,112,97,116,104,95,115,112,
- 108,105,116,218,6,97,112,112,101,110,100,90,7,115,116,95,
- 109,111,100,101,218,20,95,122,105,112,95,100,105,114,101,99,
- 116,111,114,121,95,99,97,99,104,101,218,8,75,101,121,69,
- 114,114,111,114,218,15,95,114,101,97,100,95,100,105,114,101,
- 99,116,111,114,121,218,6,95,102,105,108,101,115,218,7,97,
- 114,99,104,105,118,101,218,10,95,112,97,116,104,95,106,111,
- 105,110,218,6,112,114,101,102,105,120,41,8,218,4,115,101,
- 108,102,114,13,0,0,0,114,17,0,0,0,114,31,0,0,
- 0,90,2,115,116,90,7,100,105,114,110,97,109,101,90,8,
- 98,97,115,101,110,97,109,101,218,5,102,105,108,101,115,114,
- 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,
- 95,95,105,110,105,116,95,95,63,0,0,0,115,58,0,0,
- 0,0,1,10,1,8,1,10,1,4,1,12,1,4,1,12,
- 2,4,2,2,1,14,1,18,3,14,1,8,1,12,1,4,
- 1,16,3,14,2,12,1,4,2,2,1,12,1,14,1,8,
- 1,14,1,6,1,6,2,22,1,8,1,122,20,122,105,112,
- 105,109,112,111,114,116,101,114,46,95,95,105,110,105,116,95,
- 95,78,99,3,0,0,0,0,0,0,0,0,0,0,0,5,
- 0,0,0,4,0,0,0,67,0,0,0,115,78,0,0,0,
- 116,0,124,0,124,1,131,2,125,3,124,3,100,1,107,9,
- 114,26,124,0,103,0,102,2,83,0,116,1,124,0,124,1,
- 131,2,125,4,116,2,124,0,124,4,131,2,114,70,100,1,
- 124,0,106,3,155,0,116,4,155,0,124,4,155,0,157,3,
- 103,1,102,2,83,0,100,1,103,0,102,2,83,0,41,2,
- 97,239,1,0,0,102,105,110,100,95,108,111,97,100,101,114,
- 40,102,117,108,108,110,97,109,101,44,32,112,97,116,104,61,
- 78,111,110,101,41,32,45,62,32,115,101,108,102,44,32,115,
- 116,114,32,111,114,32,78,111,110,101,46,10,10,32,32,32,
- 32,32,32,32,32,83,101,97,114,99,104,32,102,111,114,32,
- 97,32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,
- 101,100,32,98,121,32,39,102,117,108,108,110,97,109,101,39,
- 46,32,39,102,117,108,108,110,97,109,101,39,32,109,117,115,
- 116,32,98,101,32,116,104,101,10,32,32,32,32,32,32,32,
- 32,102,117,108,108,121,32,113,117,97,108,105,102,105,101,100,
- 32,40,100,111,116,116,101,100,41,32,109,111,100,117,108,101,
- 32,110,97,109,101,46,32,73,116,32,114,101,116,117,114,110,
- 115,32,116,104,101,32,122,105,112,105,109,112,111,114,116,101,
- 114,10,32,32,32,32,32,32,32,32,105,110,115,116,97,110,
- 99,101,32,105,116,115,101,108,102,32,105,102,32,116,104,101,
- 32,109,111,100,117,108,101,32,119,97,115,32,102,111,117,110,
- 100,44,32,97,32,115,116,114,105,110,103,32,99,111,110,116,
- 97,105,110,105,110,103,32,116,104,101,10,32,32,32,32,32,
- 32,32,32,102,117,108,108,32,112,97,116,104,32,110,97,109,
- 101,32,105,102,32,105,116,39,115,32,112,111,115,115,105,98,
- 108,121,32,97,32,112,111,114,116,105,111,110,32,111,102,32,
- 97,32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,
- 97,103,101,44,10,32,32,32,32,32,32,32,32,111,114,32,
- 78,111,110,101,32,111,116,104,101,114,119,105,115,101,46,32,
- 84,104,101,32,111,112,116,105,111,110,97,108,32,39,112,97,
- 116,104,39,32,97,114,103,117,109,101,110,116,32,105,115,32,
- 105,103,110,111,114,101,100,32,45,45,32,105,116,39,115,10,
- 32,32,32,32,32,32,32,32,116,104,101,114,101,32,102,111,
- 114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,
- 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,101,
- 114,32,112,114,111,116,111,99,111,108,46,10,32,32,32,32,
- 32,32,32,32,78,41,5,218,16,95,103,101,116,95,109,111,
- 100,117,108,101,95,105,110,102,111,218,16,95,103,101,116,95,
- 109,111,100,117,108,101,95,112,97,116,104,218,7,95,105,115,
- 95,100,105,114,114,29,0,0,0,114,20,0,0,0,41,5,
- 114,32,0,0,0,218,8,102,117,108,108,110,97,109,101,114,
- 13,0,0,0,218,2,109,105,218,7,109,111,100,112,97,116,
- 104,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 218,11,102,105,110,100,95,108,111,97,100,101,114,109,0,0,
- 0,115,14,0,0,0,0,10,10,1,8,2,8,7,10,1,
- 10,4,24,2,122,23,122,105,112,105,109,112,111,114,116,101,
- 114,46,102,105,110,100,95,108,111,97,100,101,114,99,3,0,
- 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,
- 0,0,67,0,0,0,115,16,0,0,0,124,0,160,0,124,
- 1,124,2,161,2,100,1,25,0,83,0,41,2,97,139,1,
- 0,0,102,105,110,100,95,109,111,100,117,108,101,40,102,117,
- 108,108,110,97,109,101,44,32,112,97,116,104,61,78,111,110,
- 101,41,32,45,62,32,115,101,108,102,32,111,114,32,78,111,
- 110,101,46,10,10,32,32,32,32,32,32,32,32,83,101,97,
- 114,99,104,32,102,111,114,32,97,32,109,111,100,117,108,101,
- 32,115,112,101,99,105,102,105,101,100,32,98,121,32,39,102,
- 117,108,108,110,97,109,101,39,46,32,39,102,117,108,108,110,
- 97,109,101,39,32,109,117,115,116,32,98,101,32,116,104,101,
- 10,32,32,32,32,32,32,32,32,102,117,108,108,121,32,113,
- 117,97,108,105,102,105,101,100,32,40,100,111,116,116,101,100,
- 41,32,109,111,100,117,108,101,32,110,97,109,101,46,32,73,
- 116,32,114,101,116,117,114,110,115,32,116,104,101,32,122,105,
- 112,105,109,112,111,114,116,101,114,10,32,32,32,32,32,32,
- 32,32,105,110,115,116,97,110,99,101,32,105,116,115,101,108,
- 102,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,
- 119,97,115,32,102,111,117,110,100,44,32,111,114,32,78,111,
- 110,101,32,105,102,32,105,116,32,119,97,115,110,39,116,46,
- 10,32,32,32,32,32,32,32,32,84,104,101,32,111,112,116,
- 105,111,110,97,108,32,39,112,97,116,104,39,32,97,114,103,
- 117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100,
- 32,45,45,32,105,116,39,115,32,116,104,101,114,101,32,102,
- 111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,
- 10,32,32,32,32,32,32,32,32,119,105,116,104,32,116,104,
- 101,32,105,109,112,111,114,116,101,114,32,112,114,111,116,111,
- 99,111,108,46,10,32,32,32,32,32,32,32,32,114,0,0,
- 0,0,41,1,114,41,0,0,0,41,3,114,32,0,0,0,
- 114,38,0,0,0,114,13,0,0,0,114,9,0,0,0,114,
- 9,0,0,0,114,10,0,0,0,218,11,102,105,110,100,95,
- 109,111,100,117,108,101,141,0,0,0,115,2,0,0,0,0,
- 9,122,23,122,105,112,105,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,0,0,0,0,5,0,0,0,3,0,0,0,67,
- 0,0,0,115,20,0,0,0,116,0,124,0,124,1,131,2,
- 92,3,125,2,125,3,125,4,124,2,83,0,41,1,122,163,
- 103,101,116,95,99,111,100,101,40,102,117,108,108,110,97,109,
- 101,41,32,45,62,32,99,111,100,101,32,111,98,106,101,99,
- 116,46,10,10,32,32,32,32,32,32,32,32,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,115,112,101,99,105,
- 102,105,101,100,32,109,111,100,117,108,101,46,32,82,97,105,
- 115,101,32,90,105,112,73,109,112,111,114,116,69,114,114,111,
- 114,10,32,32,32,32,32,32,32,32,105,102,32,116,104,101,
- 32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,116,
- 32,98,101,32,102,111,117,110,100,46,10,32,32,32,32,32,
- 32,32,32,169,1,218,16,95,103,101,116,95,109,111,100,117,
- 108,101,95,99,111,100,101,169,5,114,32,0,0,0,114,38,
- 0,0,0,218,4,99,111,100,101,218,9,105,115,112,97,99,
- 107,97,103,101,114,40,0,0,0,114,9,0,0,0,114,9,
- 0,0,0,114,10,0,0,0,218,8,103,101,116,95,99,111,
- 100,101,153,0,0,0,115,4,0,0,0,0,6,16,1,122,
- 20,122,105,112,105,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,0,0,
- 0,0,4,0,0,0,8,0,0,0,67,0,0,0,115,118,
- 0,0,0,116,0,114,16,124,1,160,1,116,0,116,2,161,
- 2,125,1,124,1,125,2,124,1,160,3,124,0,106,4,116,
- 2,23,0,161,1,114,58,124,1,116,5,124,0,106,4,116,
- 2,23,0,131,1,100,1,133,2,25,0,125,2,122,14,124,
- 0,106,6,124,2,25,0,125,3,87,0,110,32,4,0,116,
- 7,107,10,114,104,1,0,1,0,1,0,116,8,100,2,100,
- 3,124,2,131,3,130,1,89,0,110,2,88,0,116,9,124,
- 0,106,4,124,3,131,2,83,0,41,4,122,154,103,101,116,
- 95,100,97,116,97,40,112,97,116,104,110,97,109,101,41,32,
- 45,62,32,115,116,114,105,110,103,32,119,105,116,104,32,102,
- 105,108,101,32,100,97,116,97,46,10,10,32,32,32,32,32,
- 32,32,32,82,101,116,117,114,110,32,116,104,101,32,100,97,
- 116,97,32,97,115,115,111,99,105,97,116,101,100,32,119,105,
- 116,104,32,39,112,97,116,104,110,97,109,101,39,46,32,82,
- 97,105,115,101,32,79,83,69,114,114,111,114,32,105,102,10,
- 32,32,32,32,32,32,32,32,116,104,101,32,102,105,108,101,
- 32,119,97,115,110,39,116,32,102,111,117,110,100,46,10,32,
- 32,32,32,32,32,32,32,78,114,0,0,0,0,218,0,41,
- 10,114,18,0,0,0,114,19,0,0,0,114,20,0,0,0,
- 218,10,115,116,97,114,116,115,119,105,116,104,114,29,0,0,
- 0,218,3,108,101,110,114,28,0,0,0,114,26,0,0,0,
- 114,22,0,0,0,218,9,95,103,101,116,95,100,97,116,97,
- 41,4,114,32,0,0,0,218,8,112,97,116,104,110,97,109,
- 101,90,3,107,101,121,218,9,116,111,99,95,101,110,116,114,
- 121,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 218,8,103,101,116,95,100,97,116,97,163,0,0,0,115,20,
- 0,0,0,0,6,4,1,12,2,4,1,16,1,22,2,2,
- 1,14,1,14,1,18,1,122,20,122,105,112,105,109,112,111,
- 114,116,101,114,46,103,101,116,95,100,97,116,97,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,
- 0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,124,
- 1,131,2,92,3,125,2,125,3,125,4,124,4,83,0,41,
- 1,122,106,103,101,116,95,102,105,108,101,110,97,109,101,40,
- 102,117,108,108,110,97,109,101,41,32,45,62,32,102,105,108,
- 101,110,97,109,101,32,115,116,114,105,110,103,46,10,10,32,
- 32,32,32,32,32,32,32,82,101,116,117,114,110,32,116,104,
- 101,32,102,105,108,101,110,97,109,101,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,32,32,32,32,32,32,32,32,114,43,0,
- 0,0,114,45,0,0,0,114,9,0,0,0,114,9,0,0,
- 0,114,10,0,0,0,218,12,103,101,116,95,102,105,108,101,
- 110,97,109,101,184,0,0,0,115,4,0,0,0,0,7,16,
- 1,122,24,122,105,112,105,109,112,111,114,116,101,114,46,103,
- 101,116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,
- 0,0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,
- 67,0,0,0,115,128,0,0,0,116,0,124,0,124,1,131,
- 2,125,2,124,2,100,1,107,8,114,36,116,1,100,2,124,
- 1,155,2,157,2,124,1,100,3,141,2,130,1,116,2,124,
- 0,124,1,131,2,125,3,124,2,114,64,116,3,160,4,124,
- 3,100,4,161,2,125,4,110,10,124,3,155,0,100,5,157,
- 2,125,4,122,14,124,0,106,5,124,4,25,0,125,5,87,
- 0,110,22,4,0,116,6,107,10,114,110,1,0,1,0,1,
- 0,89,0,100,1,83,0,88,0,116,7,124,0,106,8,124,
- 5,131,2,160,9,161,0,83,0,41,6,122,253,103,101,116,
- 95,115,111,117,114,99,101,40,102,117,108,108,110,97,109,101,
- 41,32,45,62,32,115,111,117,114,99,101,32,115,116,114,105,
- 110,103,46,10,10,32,32,32,32,32,32,32,32,82,101,116,
- 117,114,110,32,116,104,101,32,115,111,117,114,99,101,32,99,
- 111,100,101,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,82,97,
- 105,115,101,32,90,105,112,73,109,112,111,114,116,69,114,114,
- 111,114,10,32,32,32,32,32,32,32,32,105,102,32,116,104,
- 101,32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,
- 116,32,98,101,32,102,111,117,110,100,44,32,114,101,116,117,
- 114,110,32,78,111,110,101,32,105,102,32,116,104,101,32,97,
- 114,99,104,105,118,101,32,100,111,101,115,10,32,32,32,32,
- 32,32,32,32,99,111,110,116,97,105,110,32,116,104,101,32,
- 109,111,100,117,108,101,44,32,98,117,116,32,104,97,115,32,
- 110,111,32,115,111,117,114,99,101,32,102,111,114,32,105,116,
- 46,10,32,32,32,32,32,32,32,32,78,250,18,99,97,110,
- 39,116,32,102,105,110,100,32,109,111,100,117,108,101,32,169,
- 1,218,4,110,97,109,101,250,11,95,95,105,110,105,116,95,
- 95,46,112,121,250,3,46,112,121,41,10,114,35,0,0,0,
- 114,3,0,0,0,114,36,0,0,0,114,21,0,0,0,114,
- 30,0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,
- 0,0,0,114,29,0,0,0,218,6,100,101,99,111,100,101,
- 41,6,114,32,0,0,0,114,38,0,0,0,114,39,0,0,
- 0,114,13,0,0,0,218,8,102,117,108,108,112,97,116,104,
- 114,54,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
- 10,0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,
- 195,0,0,0,115,24,0,0,0,0,7,10,1,8,1,18,
- 2,10,1,4,1,14,2,10,2,2,1,14,1,14,2,8,
- 1,122,22,122,105,112,105,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,
+ 14,116,8,160,9,124,1,161,1,125,4,87,0,110,70,4,
+ 0,116,10,116,11,102,2,121,148,1,0,1,0,1,0,116,
+ 8,160,12,124,1,161,1,92,2,125,5,125,6,124,5,124,
+ 1,107,2,114,130,116,4,100,4,124,1,100,3,141,2,130,
+ 1,124,5,125,1,124,3,160,13,124,6,161,1,1,0,89,
+ 0,113,64,48,0,124,4,106,14,100,5,64,0,100,6,107,
+ 3,114,180,116,4,100,4,124,1,100,3,141,2,130,1,113,
+ 180,113,64,122,12,116,15,124,1,25,0,125,7,87,0,110,
+ 34,4,0,116,16,121,226,1,0,1,0,1,0,116,17,124,
+ 1,131,1,125,7,124,7,116,15,124,1,60,0,89,0,110,
+ 2,48,0,124,7,124,0,95,18,124,1,124,0,95,19,116,
+ 8,106,20,124,3,100,0,100,0,100,7,133,3,25,0,142,
+ 0,124,0,95,21,124,0,106,21,144,1,114,28,124,0,4,
+ 0,106,21,116,7,55,0,2,0,95,21,100,0,83,0,41,
+ 8,78,114,0,0,0,0,122,21,97,114,99,104,105,118,101,
+ 32,112,97,116,104,32,105,115,32,101,109,112,116,121,169,1,
+ 218,4,112,97,116,104,122,14,110,111,116,32,97,32,90,105,
+ 112,32,102,105,108,101,105,0,240,0,0,105,0,128,0,0,
+ 233,255,255,255,255,41,22,218,10,105,115,105,110,115,116,97,
+ 110,99,101,218,3,115,116,114,218,2,111,115,90,8,102,115,
+ 100,101,99,111,100,101,114,3,0,0,0,218,12,97,108,116,
+ 95,112,97,116,104,95,115,101,112,218,7,114,101,112,108,97,
+ 99,101,218,8,112,97,116,104,95,115,101,112,218,19,95,98,
+ 111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,
+ 108,90,10,95,112,97,116,104,95,115,116,97,116,218,7,79,
+ 83,69,114,114,111,114,218,10,86,97,108,117,101,69,114,114,
+ 111,114,90,11,95,112,97,116,104,95,115,112,108,105,116,218,
+ 6,97,112,112,101,110,100,90,7,115,116,95,109,111,100,101,
+ 218,20,95,122,105,112,95,100,105,114,101,99,116,111,114,121,
+ 95,99,97,99,104,101,218,8,75,101,121,69,114,114,111,114,
+ 218,15,95,114,101,97,100,95,100,105,114,101,99,116,111,114,
+ 121,218,6,95,102,105,108,101,115,218,7,97,114,99,104,105,
+ 118,101,218,10,95,112,97,116,104,95,106,111,105,110,218,6,
+ 112,114,101,102,105,120,41,8,218,4,115,101,108,102,114,13,
+ 0,0,0,114,17,0,0,0,114,31,0,0,0,90,2,115,
+ 116,90,7,100,105,114,110,97,109,101,90,8,98,97,115,101,
+ 110,97,109,101,218,5,102,105,108,101,115,114,9,0,0,0,
+ 114,9,0,0,0,114,10,0,0,0,218,8,95,95,105,110,
+ 105,116,95,95,63,0,0,0,115,58,0,0,0,0,1,10,
+ 1,8,1,10,1,4,1,12,1,4,1,12,2,4,2,2,
+ 1,14,1,16,3,14,1,8,1,12,1,4,1,16,3,14,
+ 2,12,1,4,2,2,1,12,1,12,1,8,1,14,1,6,
+ 1,6,2,22,1,8,1,122,20,122,105,112,105,109,112,111,
+ 114,116,101,114,46,95,95,105,110,105,116,95,95,78,99,3,
+ 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,
+ 0,0,0,67,0,0,0,115,78,0,0,0,116,0,124,0,
+ 124,1,131,2,125,3,124,3,100,1,117,1,114,26,124,0,
+ 103,0,102,2,83,0,116,1,124,0,124,1,131,2,125,4,
+ 116,2,124,0,124,4,131,2,114,70,100,1,124,0,106,3,
+ 155,0,116,4,155,0,124,4,155,0,157,3,103,1,102,2,
+ 83,0,100,1,103,0,102,2,83,0,41,2,97,239,1,0,
+ 0,102,105,110,100,95,108,111,97,100,101,114,40,102,117,108,
+ 108,110,97,109,101,44,32,112,97,116,104,61,78,111,110,101,
+ 41,32,45,62,32,115,101,108,102,44,32,115,116,114,32,111,
+ 114,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32,
+ 32,83,101,97,114,99,104,32,102,111,114,32,97,32,109,111,
+ 100,117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,
+ 121,32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,
+ 117,108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,
+ 32,116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,
+ 108,121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,
+ 116,116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,
+ 101,46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,
+ 101,32,122,105,112,105,109,112,111,114,116,101,114,10,32,32,
+ 32,32,32,32,32,32,105,110,115,116,97,110,99,101,32,105,
+ 116,115,101,108,102,32,105,102,32,116,104,101,32,109,111,100,
+ 117,108,101,32,119,97,115,32,102,111,117,110,100,44,32,97,
+ 32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,
+ 110,103,32,116,104,101,10,32,32,32,32,32,32,32,32,102,
+ 117,108,108,32,112,97,116,104,32,110,97,109,101,32,105,102,
+ 32,105,116,39,115,32,112,111,115,115,105,98,108,121,32,97,
+ 32,112,111,114,116,105,111,110,32,111,102,32,97,32,110,97,
+ 109,101,115,112,97,99,101,32,112,97,99,107,97,103,101,44,
+ 10,32,32,32,32,32,32,32,32,111,114,32,78,111,110,101,
+ 32,111,116,104,101,114,119,105,115,101,46,32,84,104,101,32,
+ 111,112,116,105,111,110,97,108,32,39,112,97,116,104,39,32,
+ 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,
+ 114,101,100,32,45,45,32,105,116,39,115,10,32,32,32,32,
+ 32,32,32,32,116,104,101,114,101,32,102,111,114,32,99,111,
+ 109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,
+ 32,116,104,101,32,105,109,112,111,114,116,101,114,32,112,114,
+ 111,116,111,99,111,108,46,10,32,32,32,32,32,32,32,32,
+ 78,41,5,218,16,95,103,101,116,95,109,111,100,117,108,101,
+ 95,105,110,102,111,218,16,95,103,101,116,95,109,111,100,117,
+ 108,101,95,112,97,116,104,218,7,95,105,115,95,100,105,114,
+ 114,29,0,0,0,114,20,0,0,0,41,5,114,32,0,0,
+ 0,218,8,102,117,108,108,110,97,109,101,114,13,0,0,0,
+ 218,2,109,105,218,7,109,111,100,112,97,116,104,114,9,0,
+ 0,0,114,9,0,0,0,114,10,0,0,0,218,11,102,105,
+ 110,100,95,108,111,97,100,101,114,109,0,0,0,115,14,0,
+ 0,0,0,10,10,1,8,2,8,7,10,1,10,4,24,2,
+ 122,23,122,105,112,105,109,112,111,114,116,101,114,46,102,105,
+ 110,100,95,108,111,97,100,101,114,99,3,0,0,0,0,0,
0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,
- 0,0,115,40,0,0,0,116,0,124,0,124,1,131,2,125,
- 2,124,2,100,1,107,8,114,36,116,1,100,2,124,1,155,
- 2,157,2,124,1,100,3,141,2,130,1,124,2,83,0,41,
- 4,122,171,105,115,95,112,97,99,107,97,103,101,40,102,117,
- 108,108,110,97,109,101,41,32,45,62,32,98,111,111,108,46,
- 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,
- 32,84,114,117,101,32,105,102,32,116,104,101,32,109,111,100,
- 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,
- 32,102,117,108,108,110,97,109,101,32,105,115,32,97,32,112,
- 97,99,107,97,103,101,46,10,32,32,32,32,32,32,32,32,
- 82,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69,
- 114,114,111,114,32,105,102,32,116,104,101,32,109,111,100,117,
- 108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,102,
- 111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,114,
- 57,0,0,0,114,58,0,0,0,41,2,114,35,0,0,0,
- 114,3,0,0,0,41,3,114,32,0,0,0,114,38,0,0,
- 0,114,39,0,0,0,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,218,10,105,115,95,112,97,99,107,97,103,
- 101,221,0,0,0,115,8,0,0,0,0,6,10,1,8,1,
- 18,1,122,22,122,105,112,105,109,112,111,114,116,101,114,46,
- 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,67,
- 0,0,0,115,248,0,0,0,116,0,124,0,124,1,131,2,
- 92,3,125,2,125,3,125,4,116,1,106,2,160,3,124,1,
- 161,1,125,5,124,5,100,1,107,8,115,46,116,4,124,5,
- 116,5,131,2,115,64,116,5,124,1,131,1,125,5,124,5,
- 116,1,106,2,124,1,60,0,124,0,124,5,95,6,122,84,
- 124,3,114,108,116,7,124,0,124,1,131,2,125,6,116,8,
- 160,9,124,0,106,10,124,6,161,2,125,7,124,7,103,1,
- 124,5,95,11,116,12,124,5,100,2,131,2,115,124,116,13,
- 124,5,95,13,116,8,160,14,124,5,106,15,124,1,124,4,
- 161,3,1,0,116,16,124,2,124,5,106,15,131,2,1,0,
- 87,0,110,22,1,0,1,0,1,0,116,1,106,2,124,1,
- 61,0,130,0,89,0,110,2,88,0,122,14,116,1,106,2,
- 124,1,25,0,125,5,87,0,110,36,4,0,116,17,107,10,
- 114,228,1,0,1,0,1,0,116,18,100,3,124,1,155,2,
- 100,4,157,3,131,1,130,1,89,0,110,2,88,0,116,19,
- 160,20,100,5,124,1,124,4,161,3,1,0,124,5,83,0,
- 41,6,122,245,108,111,97,100,95,109,111,100,117,108,101,40,
- 102,117,108,108,110,97,109,101,41,32,45,62,32,109,111,100,
- 117,108,101,46,10,10,32,32,32,32,32,32,32,32,76,111,
- 97,100,32,116,104,101,32,109,111,100,117,108,101,32,115,112,
- 101,99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,
- 110,97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,
- 39,32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,
- 32,32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,
- 105,102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,
- 111,100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,
- 101,116,117,114,110,115,32,116,104,101,32,105,109,112,111,114,
- 116,101,100,10,32,32,32,32,32,32,32,32,109,111,100,117,
- 108,101,44,32,111,114,32,114,97,105,115,101,115,32,90,105,
+ 0,0,115,16,0,0,0,124,0,160,0,124,1,124,2,161,
+ 2,100,1,25,0,83,0,41,2,97,139,1,0,0,102,105,
+ 110,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97,
+ 109,101,44,32,112,97,116,104,61,78,111,110,101,41,32,45,
+ 62,32,115,101,108,102,32,111,114,32,78,111,110,101,46,10,
+ 10,32,32,32,32,32,32,32,32,83,101,97,114,99,104,32,
+ 102,111,114,32,97,32,109,111,100,117,108,101,32,115,112,101,
+ 99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,110,
+ 97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,39,
+ 32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,32,
+ 32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,105,
+ 102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,111,
+ 100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,101,
+ 116,117,114,110,115,32,116,104,101,32,122,105,112,105,109,112,
+ 111,114,116,101,114,10,32,32,32,32,32,32,32,32,105,110,
+ 115,116,97,110,99,101,32,105,116,115,101,108,102,32,105,102,
+ 32,116,104,101,32,109,111,100,117,108,101,32,119,97,115,32,
+ 102,111,117,110,100,44,32,111,114,32,78,111,110,101,32,105,
+ 102,32,105,116,32,119,97,115,110,39,116,46,10,32,32,32,
+ 32,32,32,32,32,84,104,101,32,111,112,116,105,111,110,97,
+ 108,32,39,112,97,116,104,39,32,97,114,103,117,109,101,110,
+ 116,32,105,115,32,105,103,110,111,114,101,100,32,45,45,32,
+ 105,116,39,115,32,116,104,101,114,101,32,102,111,114,32,99,
+ 111,109,112,97,116,105,98,105,108,105,116,121,10,32,32,32,
+ 32,32,32,32,32,119,105,116,104,32,116,104,101,32,105,109,
+ 112,111,114,116,101,114,32,112,114,111,116,111,99,111,108,46,
+ 10,32,32,32,32,32,32,32,32,114,0,0,0,0,41,1,
+ 114,41,0,0,0,41,3,114,32,0,0,0,114,38,0,0,
+ 0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,0,
+ 114,10,0,0,0,218,11,102,105,110,100,95,109,111,100,117,
+ 108,101,141,0,0,0,115,2,0,0,0,0,9,122,23,122,
+ 105,112,105,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,0,
+ 0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,115,
+ 20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,2,
+ 125,3,125,4,124,2,83,0,41,1,122,163,103,101,116,95,
+ 99,111,100,101,40,102,117,108,108,110,97,109,101,41,32,45,
+ 62,32,99,111,100,101,32,111,98,106,101,99,116,46,10,10,
+ 32,32,32,32,32,32,32,32,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,115,112,101,99,105,102,105,101,100,
+ 32,109,111,100,117,108,101,46,32,82,97,105,115,101,32,90,
+ 105,112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,
+ 32,32,32,32,32,32,105,102,32,116,104,101,32,109,111,100,
+ 117,108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,
+ 102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,169,
+ 1,218,16,95,103,101,116,95,109,111,100,117,108,101,95,99,
+ 111,100,101,169,5,114,32,0,0,0,114,38,0,0,0,218,
+ 4,99,111,100,101,218,9,105,115,112,97,99,107,97,103,101,
+ 114,40,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+ 10,0,0,0,218,8,103,101,116,95,99,111,100,101,153,0,
+ 0,0,115,4,0,0,0,0,6,16,1,122,20,122,105,112,
+ 105,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,0,0,0,0,4,0,
+ 0,0,8,0,0,0,67,0,0,0,115,116,0,0,0,116,
+ 0,114,16,124,1,160,1,116,0,116,2,161,2,125,1,124,
+ 1,125,2,124,1,160,3,124,0,106,4,116,2,23,0,161,
+ 1,114,58,124,1,116,5,124,0,106,4,116,2,23,0,131,
+ 1,100,1,133,2,25,0,125,2,122,14,124,0,106,6,124,
+ 2,25,0,125,3,87,0,110,30,4,0,116,7,121,102,1,
+ 0,1,0,1,0,116,8,100,2,100,3,124,2,131,3,130,
+ 1,89,0,110,2,48,0,116,9,124,0,106,4,124,3,131,
+ 2,83,0,41,4,122,154,103,101,116,95,100,97,116,97,40,
+ 112,97,116,104,110,97,109,101,41,32,45,62,32,115,116,114,
+ 105,110,103,32,119,105,116,104,32,102,105,108,101,32,100,97,
+ 116,97,46,10,10,32,32,32,32,32,32,32,32,82,101,116,
+ 117,114,110,32,116,104,101,32,100,97,116,97,32,97,115,115,
+ 111,99,105,97,116,101,100,32,119,105,116,104,32,39,112,97,
+ 116,104,110,97,109,101,39,46,32,82,97,105,115,101,32,79,
+ 83,69,114,114,111,114,32,105,102,10,32,32,32,32,32,32,
+ 32,32,116,104,101,32,102,105,108,101,32,119,97,115,110,39,
+ 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,
+ 32,78,114,0,0,0,0,218,0,41,10,114,18,0,0,0,
+ 114,19,0,0,0,114,20,0,0,0,218,10,115,116,97,114,
+ 116,115,119,105,116,104,114,29,0,0,0,218,3,108,101,110,
+ 114,28,0,0,0,114,26,0,0,0,114,22,0,0,0,218,
+ 9,95,103,101,116,95,100,97,116,97,41,4,114,32,0,0,
+ 0,218,8,112,97,116,104,110,97,109,101,90,3,107,101,121,
+ 218,9,116,111,99,95,101,110,116,114,121,114,9,0,0,0,
+ 114,9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,
+ 100,97,116,97,163,0,0,0,115,20,0,0,0,0,6,4,
+ 1,12,2,4,1,16,1,22,2,2,1,14,1,12,1,18,
+ 1,122,20,122,105,112,105,109,112,111,114,116,101,114,46,103,
+ 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,
+ 115,20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,
+ 2,125,3,125,4,124,4,83,0,41,1,122,106,103,101,116,
+ 95,102,105,108,101,110,97,109,101,40,102,117,108,108,110,97,
+ 109,101,41,32,45,62,32,102,105,108,101,110,97,109,101,32,
+ 115,116,114,105,110,103,46,10,10,32,32,32,32,32,32,32,
+ 32,82,101,116,117,114,110,32,116,104,101,32,102,105,108,101,
+ 110,97,109,101,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,32,
+ 32,32,32,32,32,32,32,114,43,0,0,0,114,45,0,0,
+ 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
+ 218,12,103,101,116,95,102,105,108,101,110,97,109,101,184,0,
+ 0,0,115,4,0,0,0,0,7,16,1,122,24,122,105,112,
+ 105,109,112,111,114,116,101,114,46,103,101,116,95,102,105,108,
+ 101,110,97,109,101,99,2,0,0,0,0,0,0,0,0,0,
+ 0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,126,
+ 0,0,0,116,0,124,0,124,1,131,2,125,2,124,2,100,
+ 1,117,0,114,36,116,1,100,2,124,1,155,2,157,2,124,
+ 1,100,3,141,2,130,1,116,2,124,0,124,1,131,2,125,
+ 3,124,2,114,64,116,3,160,4,124,3,100,4,161,2,125,
+ 4,110,10,124,3,155,0,100,5,157,2,125,4,122,14,124,
+ 0,106,5,124,4,25,0,125,5,87,0,110,20,4,0,116,
+ 6,121,108,1,0,1,0,1,0,89,0,100,1,83,0,48,
+ 0,116,7,124,0,106,8,124,5,131,2,160,9,161,0,83,
+ 0,41,6,122,253,103,101,116,95,115,111,117,114,99,101,40,
+ 102,117,108,108,110,97,109,101,41,32,45,62,32,115,111,117,
+ 114,99,101,32,115,116,114,105,110,103,46,10,10,32,32,32,
+ 32,32,32,32,32,82,101,116,117,114,110,32,116,104,101,32,
+ 115,111,117,114,99,101,32,99,111,100,101,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,82,97,105,115,101,32,90,105,112,73,
+ 109,112,111,114,116,69,114,114,111,114,10,32,32,32,32,32,
+ 32,32,32,105,102,32,116,104,101,32,109,111,100,117,108,101,
+ 32,99,111,117,108,100,110,39,116,32,98,101,32,102,111,117,
+ 110,100,44,32,114,101,116,117,114,110,32,78,111,110,101,32,
+ 105,102,32,116,104,101,32,97,114,99,104,105,118,101,32,100,
+ 111,101,115,10,32,32,32,32,32,32,32,32,99,111,110,116,
+ 97,105,110,32,116,104,101,32,109,111,100,117,108,101,44,32,
+ 98,117,116,32,104,97,115,32,110,111,32,115,111,117,114,99,
+ 101,32,102,111,114,32,105,116,46,10,32,32,32,32,32,32,
+ 32,32,78,250,18,99,97,110,39,116,32,102,105,110,100,32,
+ 109,111,100,117,108,101,32,169,1,218,4,110,97,109,101,250,
+ 11,95,95,105,110,105,116,95,95,46,112,121,250,3,46,112,
+ 121,41,10,114,35,0,0,0,114,3,0,0,0,114,36,0,
+ 0,0,114,21,0,0,0,114,30,0,0,0,114,28,0,0,
+ 0,114,26,0,0,0,114,52,0,0,0,114,29,0,0,0,
+ 218,6,100,101,99,111,100,101,41,6,114,32,0,0,0,114,
+ 38,0,0,0,114,39,0,0,0,114,13,0,0,0,218,8,
+ 102,117,108,108,112,97,116,104,114,54,0,0,0,114,9,0,
+ 0,0,114,9,0,0,0,114,10,0,0,0,218,10,103,101,
+ 116,95,115,111,117,114,99,101,195,0,0,0,115,24,0,0,
+ 0,0,7,10,1,8,1,18,2,10,1,4,1,14,2,10,
+ 2,2,1,14,1,12,2,8,1,122,22,122,105,112,105,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,0,0,0,0,3,0,
+ 0,0,4,0,0,0,67,0,0,0,115,40,0,0,0,116,
+ 0,124,0,124,1,131,2,125,2,124,2,100,1,117,0,114,
+ 36,116,1,100,2,124,1,155,2,157,2,124,1,100,3,141,
+ 2,130,1,124,2,83,0,41,4,122,171,105,115,95,112,97,
+ 99,107,97,103,101,40,102,117,108,108,110,97,109,101,41,32,
+ 45,62,32,98,111,111,108,46,10,10,32,32,32,32,32,32,
+ 32,32,82,101,116,117,114,110,32,84,114,117,101,32,105,102,
+ 32,116,104,101,32,109,111,100,117,108,101,32,115,112,101,99,
+ 105,102,105,101,100,32,98,121,32,102,117,108,108,110,97,109,
+ 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,10,
+ 32,32,32,32,32,32,32,32,82,97,105,115,101,32,90,105,
112,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,
- 105,116,32,119,97,115,110,39,116,32,102,111,117,110,100,46,
- 10,32,32,32,32,32,32,32,32,78,218,12,95,95,98,117,
- 105,108,116,105,110,115,95,95,122,14,76,111,97,100,101,100,
- 32,109,111,100,117,108,101,32,122,25,32,110,111,116,32,102,
- 111,117,110,100,32,105,110,32,115,121,115,46,109,111,100,117,
- 108,101,115,122,30,105,109,112,111,114,116,32,123,125,32,35,
- 32,108,111,97,100,101,100,32,102,114,111,109,32,90,105,112,
- 32,123,125,41,21,114,44,0,0,0,218,3,115,121,115,218,
- 7,109,111,100,117,108,101,115,218,3,103,101,116,114,15,0,
- 0,0,218,12,95,109,111,100,117,108,101,95,116,121,112,101,
- 218,10,95,95,108,111,97,100,101,114,95,95,114,36,0,0,
- 0,114,21,0,0,0,114,30,0,0,0,114,29,0,0,0,
- 90,8,95,95,112,97,116,104,95,95,218,7,104,97,115,97,
- 116,116,114,114,66,0,0,0,90,14,95,102,105,120,95,117,
- 112,95,109,111,100,117,108,101,218,8,95,95,100,105,99,116,
- 95,95,218,4,101,120,101,99,114,26,0,0,0,218,11,73,
- 109,112,111,114,116,69,114,114,111,114,218,10,95,98,111,111,
- 116,115,116,114,97,112,218,16,95,118,101,114,98,111,115,101,
- 95,109,101,115,115,97,103,101,41,8,114,32,0,0,0,114,
- 38,0,0,0,114,46,0,0,0,114,47,0,0,0,114,40,
- 0,0,0,90,3,109,111,100,114,13,0,0,0,114,63,0,
- 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
- 0,218,11,108,111,97,100,95,109,111,100,117,108,101,234,0,
- 0,0,115,48,0,0,0,0,7,16,1,12,1,18,1,8,
- 1,10,1,6,2,2,1,4,3,10,1,14,1,8,2,10,
- 1,6,1,16,1,16,1,6,1,8,1,8,2,2,1,14,
- 1,14,1,22,1,14,1,122,23,122,105,112,105,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,0,0,0,0,3,0,0,
- 0,8,0,0,0,67,0,0,0,115,88,0,0,0,122,20,
- 124,0,160,0,124,1,161,1,115,18,87,0,100,1,83,0,
- 87,0,110,22,4,0,116,1,107,10,114,42,1,0,1,0,
- 1,0,89,0,100,1,83,0,88,0,116,2,106,3,115,78,
- 100,2,100,3,108,4,109,5,125,2,1,0,124,2,160,6,
- 116,2,161,1,1,0,100,4,116,2,95,3,116,2,124,0,
- 124,1,131,2,83,0,41,5,122,204,82,101,116,117,114,110,
- 32,116,104,101,32,82,101,115,111,117,114,99,101,82,101,97,
- 100,101,114,32,102,111,114,32,97,32,112,97,99,107,97,103,
- 101,32,105,110,32,97,32,122,105,112,32,102,105,108,101,46,
- 10,10,32,32,32,32,32,32,32,32,73,102,32,39,102,117,
- 108,108,110,97,109,101,39,32,105,115,32,97,32,112,97,99,
- 107,97,103,101,32,119,105,116,104,105,110,32,116,104,101,32,
- 122,105,112,32,102,105,108,101,44,32,114,101,116,117,114,110,
- 32,116,104,101,10,32,32,32,32,32,32,32,32,39,82,101,
- 115,111,117,114,99,101,82,101,97,100,101,114,39,32,111,98,
- 106,101,99,116,32,102,111,114,32,116,104,101,32,112,97,99,
- 107,97,103,101,46,32,32,79,116,104,101,114,119,105,115,101,
- 32,114,101,116,117,114,110,32,78,111,110,101,46,10,32,32,
- 32,32,32,32,32,32,78,114,0,0,0,0,41,1,218,14,
- 82,101,115,111,117,114,99,101,82,101,97,100,101,114,84,41,
- 7,114,65,0,0,0,114,3,0,0,0,218,24,95,90,105,
- 112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,
- 101,97,100,101,114,218,11,95,114,101,103,105,115,116,101,114,
- 101,100,90,13,105,109,112,111,114,116,108,105,98,46,97,98,
- 99,114,79,0,0,0,90,8,114,101,103,105,115,116,101,114,
- 41,3,114,32,0,0,0,114,38,0,0,0,114,79,0,0,
- 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 218,19,103,101,116,95,114,101,115,111,117,114,99,101,95,114,
- 101,97,100,101,114,16,1,0,0,115,20,0,0,0,0,6,
- 2,1,10,1,10,1,14,1,8,1,6,1,12,1,10,1,
- 6,1,122,31,122,105,112,105,109,112,111,114,116,101,114,46,
- 103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,
- 100,101,114,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 1,0,0,0,5,0,0,0,67,0,0,0,115,24,0,0,
- 0,100,1,124,0,106,0,155,0,116,1,155,0,124,0,106,
- 2,155,0,100,2,157,5,83,0,41,3,78,122,21,60,122,
- 105,112,105,109,112,111,114,116,101,114,32,111,98,106,101,99,
- 116,32,34,122,2,34,62,41,3,114,29,0,0,0,114,20,
- 0,0,0,114,31,0,0,0,41,1,114,32,0,0,0,114,
- 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,
- 95,95,114,101,112,114,95,95,34,1,0,0,115,2,0,0,
- 0,0,1,122,20,122,105,112,105,109,112,111,114,116,101,114,
- 46,95,95,114,101,112,114,95,95,41,1,78,41,1,78,41,
- 15,114,6,0,0,0,114,7,0,0,0,114,8,0,0,0,
- 218,7,95,95,100,111,99,95,95,114,34,0,0,0,114,41,
- 0,0,0,114,42,0,0,0,114,48,0,0,0,114,55,0,
- 0,0,114,56,0,0,0,114,64,0,0,0,114,65,0,0,
- 0,114,78,0,0,0,114,82,0,0,0,114,83,0,0,0,
- 114,9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
- 10,0,0,0,114,4,0,0,0,45,0,0,0,115,24,0,
- 0,0,8,1,4,17,8,46,10,32,10,12,8,10,8,21,
- 8,11,8,26,8,13,8,38,8,18,122,12,95,95,105,110,
- 105,116,95,95,46,112,121,99,84,114,60,0,0,0,70,41,
- 3,122,4,46,112,121,99,84,70,41,3,114,61,0,0,0,
- 70,70,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,4,0,0,0,67,0,0,0,115,20,0,0,0,
- 124,0,106,0,124,1,160,1,100,1,161,1,100,2,25,0,
- 23,0,83,0,41,3,78,218,1,46,233,2,0,0,0,41,
- 2,114,31,0,0,0,218,10,114,112,97,114,116,105,116,105,
- 111,110,41,2,114,32,0,0,0,114,38,0,0,0,114,9,
- 0,0,0,114,9,0,0,0,114,10,0,0,0,114,36,0,
- 0,0,52,1,0,0,115,2,0,0,0,0,1,114,36,0,
- 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
- 0,0,0,2,0,0,0,67,0,0,0,115,18,0,0,0,
- 124,1,116,0,23,0,125,2,124,2,124,0,106,1,107,6,
- 83,0,169,1,78,41,2,114,20,0,0,0,114,28,0,0,
- 0,41,3,114,32,0,0,0,114,13,0,0,0,90,7,100,
- 105,114,112,97,116,104,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,114,37,0,0,0,56,1,0,0,115,4,
- 0,0,0,0,4,8,2,114,37,0,0,0,99,2,0,0,
- 0,0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,
- 0,67,0,0,0,115,56,0,0,0,116,0,124,0,124,1,
- 131,2,125,2,116,1,68,0,93,36,92,3,125,3,125,4,
- 125,5,124,2,124,3,23,0,125,6,124,6,124,0,106,2,
- 107,6,114,14,124,5,2,0,1,0,83,0,113,14,100,0,
- 83,0,114,88,0,0,0,41,3,114,36,0,0,0,218,16,
- 95,122,105,112,95,115,101,97,114,99,104,111,114,100,101,114,
- 114,28,0,0,0,41,7,114,32,0,0,0,114,38,0,0,
- 0,114,13,0,0,0,218,6,115,117,102,102,105,120,218,10,
- 105,115,98,121,116,101,99,111,100,101,114,47,0,0,0,114,
- 63,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,114,35,0,0,0,65,1,0,0,115,12,0,0,
- 0,0,1,10,1,14,1,8,1,10,1,10,1,114,35,0,
- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,26,
- 0,0,0,9,0,0,0,67,0,0,0,115,252,4,0,0,
- 122,14,116,0,160,1,124,0,161,1,125,1,87,0,110,38,
- 4,0,116,2,107,10,114,52,1,0,1,0,1,0,116,3,
- 100,1,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
- 89,0,110,2,88,0,124,1,144,4,143,168,1,0,122,36,
- 124,1,160,4,116,5,11,0,100,3,161,2,1,0,124,1,
- 160,6,161,0,125,2,124,1,160,7,116,5,161,1,125,3,
- 87,0,110,38,4,0,116,2,107,10,114,136,1,0,1,0,
- 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
- 141,2,130,1,89,0,110,2,88,0,116,8,124,3,131,1,
- 116,5,107,3,114,168,116,3,100,4,124,0,155,2,157,2,
- 124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2,
- 25,0,116,9,107,3,144,1,114,178,122,24,124,1,160,4,
- 100,6,100,3,161,2,1,0,124,1,160,6,161,0,125,4,
- 87,0,110,38,4,0,116,2,107,10,114,248,1,0,1,0,
- 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
- 141,2,130,1,89,0,110,2,88,0,116,10,124,4,116,11,
- 24,0,116,5,24,0,100,6,131,2,125,5,122,22,124,1,
- 160,4,124,5,161,1,1,0,124,1,160,7,161,0,125,6,
- 87,0,110,40,4,0,116,2,107,10,144,1,114,74,1,0,
- 1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,
- 100,2,141,2,130,1,89,0,110,2,88,0,124,6,160,12,
- 116,9,161,1,125,7,124,7,100,6,107,0,144,1,114,114,
- 116,3,100,7,124,0,155,2,157,2,124,0,100,2,141,2,
- 130,1,124,6,124,7,124,7,116,5,23,0,133,2,25,0,
- 125,3,116,8,124,3,131,1,116,5,107,3,144,1,114,162,
- 116,3,100,8,124,0,155,2,157,2,124,0,100,2,141,2,
- 130,1,124,4,116,8,124,6,131,1,24,0,124,7,23,0,
- 125,2,116,13,124,3,100,9,100,10,133,2,25,0,131,1,
- 125,8,116,13,124,3,100,10,100,11,133,2,25,0,131,1,
- 125,9,124,2,124,8,107,0,144,1,114,238,116,3,100,12,
- 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,
- 124,9,107,0,144,2,114,10,116,3,100,13,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,124,2,124,8,56,0,
- 125,2,124,2,124,9,24,0,125,10,124,10,100,6,107,0,
- 144,2,114,54,116,3,100,14,124,0,155,2,157,2,124,0,
- 100,2,141,2,130,1,105,0,125,11,100,6,125,12,122,14,
- 124,1,160,4,124,2,161,1,1,0,87,0,110,40,4,0,
- 116,2,107,10,144,2,114,116,1,0,1,0,1,0,116,3,
- 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
- 89,0,110,2,88,0,124,1,160,7,100,15,161,1,125,3,
- 116,8,124,3,131,1,100,5,107,0,144,2,114,150,116,14,
- 100,16,131,1,130,1,124,3,100,0,100,5,133,2,25,0,
- 100,17,107,3,144,2,114,172,144,4,113,224,116,8,124,3,
- 131,1,100,15,107,3,144,2,114,194,116,14,100,16,131,1,
- 130,1,116,15,124,3,100,18,100,19,133,2,25,0,131,1,
- 125,13,116,15,124,3,100,19,100,9,133,2,25,0,131,1,
- 125,14,116,15,124,3,100,9,100,20,133,2,25,0,131,1,
- 125,15,116,15,124,3,100,20,100,10,133,2,25,0,131,1,
- 125,16,116,13,124,3,100,10,100,11,133,2,25,0,131,1,
- 125,17,116,13,124,3,100,11,100,21,133,2,25,0,131,1,
- 125,18,116,13,124,3,100,21,100,22,133,2,25,0,131,1,
- 125,4,116,15,124,3,100,22,100,23,133,2,25,0,131,1,
- 125,19,116,15,124,3,100,23,100,24,133,2,25,0,131,1,
- 125,20,116,15,124,3,100,24,100,25,133,2,25,0,131,1,
- 125,21,116,13,124,3,100,26,100,15,133,2,25,0,131,1,
- 125,22,124,19,124,20,23,0,124,21,23,0,125,8,124,22,
- 124,9,107,4,144,3,114,154,116,3,100,27,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,124,22,124,10,55,0,
- 125,22,122,14,124,1,160,7,124,19,161,1,125,23,87,0,
- 110,40,4,0,116,2,107,10,144,3,114,216,1,0,1,0,
- 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
- 141,2,130,1,89,0,110,2,88,0,116,8,124,23,131,1,
- 124,19,107,3,144,3,114,250,116,3,100,4,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,122,50,116,8,124,1,
- 160,7,124,8,124,19,24,0,161,1,131,1,124,8,124,19,
- 24,0,107,3,144,4,114,42,116,3,100,4,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,87,0,110,40,4,0,
- 116,2,107,10,144,4,114,84,1,0,1,0,1,0,116,3,
- 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
- 89,0,110,2,88,0,124,13,100,28,64,0,144,4,114,106,
- 124,23,160,16,161,0,125,23,110,54,122,14,124,23,160,16,
- 100,29,161,1,125,23,87,0,110,38,4,0,116,17,107,10,
- 144,4,114,158,1,0,1,0,1,0,124,23,160,16,100,30,
- 161,1,160,18,116,19,161,1,125,23,89,0,110,2,88,0,
- 124,23,160,20,100,31,116,21,161,2,125,23,116,22,160,23,
- 124,0,124,23,161,2,125,24,124,24,124,14,124,18,124,4,
- 124,22,124,15,124,16,124,17,102,8,125,25,124,25,124,11,
- 124,23,60,0,124,12,100,32,55,0,125,12,144,2,113,118,
- 87,0,53,0,81,0,82,0,88,0,116,24,160,25,100,33,
- 124,12,124,0,161,3,1,0,124,11,83,0,41,34,78,122,
- 21,99,97,110,39,116,32,111,112,101,110,32,90,105,112,32,
- 102,105,108,101,58,32,114,12,0,0,0,114,86,0,0,0,
- 250,21,99,97,110,39,116,32,114,101,97,100,32,90,105,112,
- 32,102,105,108,101,58,32,233,4,0,0,0,114,0,0,0,
- 0,122,16,110,111,116,32,97,32,90,105,112,32,102,105,108,
- 101,58,32,122,18,99,111,114,114,117,112,116,32,90,105,112,
- 32,102,105,108,101,58,32,233,12,0,0,0,233,16,0,0,
- 0,233,20,0,0,0,122,28,98,97,100,32,99,101,110,116,
- 114,97,108,32,100,105,114,101,99,116,111,114,121,32,115,105,
- 122,101,58,32,122,30,98,97,100,32,99,101,110,116,114,97,
- 108,32,100,105,114,101,99,116,111,114,121,32,111,102,102,115,
- 101,116,58,32,122,38,98,97,100,32,99,101,110,116,114,97,
- 108,32,100,105,114,101,99,116,111,114,121,32,115,105,122,101,
- 32,111,114,32,111,102,102,115,101,116,58,32,233,46,0,0,
- 0,250,27,69,79,70,32,114,101,97,100,32,119,104,101,114,
- 101,32,110,111,116,32,101,120,112,101,99,116,101,100,115,4,
- 0,0,0,80,75,1,2,233,8,0,0,0,233,10,0,0,
- 0,233,14,0,0,0,233,24,0,0,0,233,28,0,0,0,
- 233,30,0,0,0,233,32,0,0,0,233,34,0,0,0,233,
- 42,0,0,0,122,25,98,97,100,32,108,111,99,97,108,32,
- 104,101,97,100,101,114,32,111,102,102,115,101,116,58,32,105,
- 0,8,0,0,218,5,97,115,99,105,105,90,6,108,97,116,
- 105,110,49,250,1,47,114,5,0,0,0,122,33,122,105,112,
- 105,109,112,111,114,116,58,32,102,111,117,110,100,32,123,125,
- 32,110,97,109,101,115,32,105,110,32,123,33,114,125,41,26,
- 218,3,95,105,111,218,9,111,112,101,110,95,99,111,100,101,
- 114,22,0,0,0,114,3,0,0,0,218,4,115,101,101,107,
- 218,20,69,78,68,95,67,69,78,84,82,65,76,95,68,73,
- 82,95,83,73,90,69,90,4,116,101,108,108,218,4,114,101,
- 97,100,114,51,0,0,0,218,18,83,84,82,73,78,71,95,
- 69,78,68,95,65,82,67,72,73,86,69,218,3,109,97,120,
- 218,15,77,65,88,95,67,79,77,77,69,78,84,95,76,69,
- 78,218,5,114,102,105,110,100,114,2,0,0,0,218,8,69,
- 79,70,69,114,114,111,114,114,1,0,0,0,114,62,0,0,
- 0,218,18,85,110,105,99,111,100,101,68,101,99,111,100,101,
- 69,114,114,111,114,218,9,116,114,97,110,115,108,97,116,101,
- 218,11,99,112,52,51,55,95,116,97,98,108,101,114,19,0,
- 0,0,114,20,0,0,0,114,21,0,0,0,114,30,0,0,
- 0,114,76,0,0,0,114,77,0,0,0,41,26,114,29,0,
- 0,0,218,2,102,112,90,15,104,101,97,100,101,114,95,112,
- 111,115,105,116,105,111,110,218,6,98,117,102,102,101,114,218,
- 9,102,105,108,101,95,115,105,122,101,90,17,109,97,120,95,
- 99,111,109,109,101,110,116,95,115,116,97,114,116,218,4,100,
- 97,116,97,90,3,112,111,115,218,11,104,101,97,100,101,114,
- 95,115,105,122,101,90,13,104,101,97,100,101,114,95,111,102,
- 102,115,101,116,90,10,97,114,99,95,111,102,102,115,101,116,
- 114,33,0,0,0,218,5,99,111,117,110,116,218,5,102,108,
- 97,103,115,218,8,99,111,109,112,114,101,115,115,218,4,116,
- 105,109,101,218,4,100,97,116,101,218,3,99,114,99,218,9,
- 100,97,116,97,95,115,105,122,101,218,9,110,97,109,101,95,
- 115,105,122,101,218,10,101,120,116,114,97,95,115,105,122,101,
- 90,12,99,111,109,109,101,110,116,95,115,105,122,101,218,11,
- 102,105,108,101,95,111,102,102,115,101,116,114,59,0,0,0,
- 114,13,0,0,0,218,1,116,114,9,0,0,0,114,9,0,
- 0,0,114,10,0,0,0,114,27,0,0,0,96,1,0,0,
- 115,212,0,0,0,0,1,2,1,14,1,14,1,24,2,8,
- 1,2,1,14,1,8,1,14,1,14,1,24,1,12,1,18,
- 1,18,3,2,1,12,1,12,1,14,1,10,1,2,255,12,
- 2,8,1,2,255,2,1,2,255,4,2,2,1,10,1,12,
- 1,16,1,10,1,2,255,12,2,10,1,10,1,10,1,2,
- 255,6,2,16,1,14,1,10,1,2,255,6,2,16,2,16,
- 1,16,1,10,1,18,1,10,1,18,1,8,1,8,1,10,
- 1,18,2,4,2,4,1,2,1,14,1,16,1,24,2,10,
- 1,14,1,8,2,18,1,4,1,14,1,8,1,16,1,16,
- 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,
- 1,16,1,12,1,10,1,18,1,8,2,2,1,14,1,16,
- 1,24,1,14,1,18,4,2,1,28,1,22,1,16,1,24,
- 2,10,2,10,3,2,1,14,1,16,1,22,2,12,1,12,
- 1,20,1,8,1,22,1,14,1,114,27,0,0,0,117,190,
- 1,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,
- 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,
- 29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,
- 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
- 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,
- 77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,
- 93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,
- 109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,
- 125,126,127,195,135,195,188,195,169,195,162,195,164,195,160,195,
- 165,195,167,195,170,195,171,195,168,195,175,195,174,195,172,195,
- 132,195,133,195,137,195,166,195,134,195,180,195,182,195,178,195,
- 187,195,185,195,191,195,150,195,156,194,162,194,163,194,165,226,
- 130,167,198,146,195,161,195,173,195,179,195,186,195,177,195,145,
- 194,170,194,186,194,191,226,140,144,194,172,194,189,194,188,194,
- 161,194,171,194,187,226,150,145,226,150,146,226,150,147,226,148,
- 130,226,148,164,226,149,161,226,149,162,226,149,150,226,149,149,
- 226,149,163,226,149,145,226,149,151,226,149,157,226,149,156,226,
- 149,155,226,148,144,226,148,148,226,148,180,226,148,172,226,148,
- 156,226,148,128,226,148,188,226,149,158,226,149,159,226,149,154,
- 226,149,148,226,149,169,226,149,166,226,149,160,226,149,144,226,
- 149,172,226,149,167,226,149,168,226,149,164,226,149,165,226,149,
- 153,226,149,152,226,149,146,226,149,147,226,149,171,226,149,170,
- 226,148,152,226,148,140,226,150,136,226,150,132,226,150,140,226,
- 150,144,226,150,128,206,177,195,159,206,147,207,128,206,163,207,
- 131,194,181,207,132,206,166,206,152,206,169,206,180,226,136,158,
- 207,134,206,181,226,136,169,226,137,161,194,177,226,137,165,226,
- 137,164,226,140,160,226,140,161,195,183,226,137,136,194,176,226,
- 136,153,194,183,226,136,154,226,129,191,194,178,226,150,160,194,
- 160,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
- 0,0,8,0,0,0,67,0,0,0,115,108,0,0,0,116,
- 0,114,22,116,1,160,2,100,1,161,1,1,0,116,3,100,
- 2,131,1,130,1,100,3,97,0,122,60,122,16,100,5,100,
- 6,108,4,109,5,125,0,1,0,87,0,110,38,4,0,116,
- 6,107,10,114,82,1,0,1,0,1,0,116,1,160,2,100,
- 1,161,1,1,0,116,3,100,2,131,1,130,1,89,0,110,
- 2,88,0,87,0,53,0,100,4,97,0,88,0,116,1,160,
- 2,100,7,161,1,1,0,124,0,83,0,41,8,78,122,27,
- 122,105,112,105,109,112,111,114,116,58,32,122,108,105,98,32,
- 85,78,65,86,65,73,76,65,66,76,69,250,41,99,97,110,
- 39,116,32,100,101,99,111,109,112,114,101,115,115,32,100,97,
- 116,97,59,32,122,108,105,98,32,110,111,116,32,97,118,97,
- 105,108,97,98,108,101,84,70,114,0,0,0,0,169,1,218,
- 10,100,101,99,111,109,112,114,101,115,115,122,25,122,105,112,
- 105,109,112,111,114,116,58,32,122,108,105,98,32,97,118,97,
- 105,108,97,98,108,101,41,7,218,15,95,105,109,112,111,114,
- 116,105,110,103,95,122,108,105,98,114,76,0,0,0,114,77,
- 0,0,0,114,3,0,0,0,90,4,122,108,105,98,114,141,
- 0,0,0,218,9,69,120,99,101,112,116,105,111,110,114,140,
+ 116,104,101,32,109,111,100,117,108,101,32,99,111,117,108,100,
+ 110,39,116,32,98,101,32,102,111,117,110,100,46,10,32,32,
+ 32,32,32,32,32,32,78,114,57,0,0,0,114,58,0,0,
+ 0,41,2,114,35,0,0,0,114,3,0,0,0,41,3,114,
+ 32,0,0,0,114,38,0,0,0,114,39,0,0,0,114,9,
+ 0,0,0,114,9,0,0,0,114,10,0,0,0,218,10,105,
+ 115,95,112,97,99,107,97,103,101,221,0,0,0,115,8,0,
+ 0,0,0,6,10,1,8,1,18,1,122,22,122,105,112,105,
+ 109,112,111,114,116,101,114,46,105,115,95,112,97,99,107,97,
+ 103,101,99,2,0,0,0,0,0,0,0,0,0,0,0,8,
+ 0,0,0,8,0,0,0,67,0,0,0,115,246,0,0,0,
+ 116,0,124,0,124,1,131,2,92,3,125,2,125,3,125,4,
+ 116,1,106,2,160,3,124,1,161,1,125,5,124,5,100,1,
+ 117,0,115,46,116,4,124,5,116,5,131,2,115,64,116,5,
+ 124,1,131,1,125,5,124,5,116,1,106,2,124,1,60,0,
+ 124,0,124,5,95,6,122,84,124,3,114,108,116,7,124,0,
+ 124,1,131,2,125,6,116,8,160,9,124,0,106,10,124,6,
+ 161,2,125,7,124,7,103,1,124,5,95,11,116,12,124,5,
+ 100,2,131,2,115,124,116,13,124,5,95,13,116,8,160,14,
+ 124,5,106,15,124,1,124,4,161,3,1,0,116,16,124,2,
+ 124,5,106,15,131,2,1,0,87,0,110,22,1,0,1,0,
+ 1,0,116,1,106,2,124,1,61,0,130,0,89,0,110,2,
+ 48,0,122,14,116,1,106,2,124,1,25,0,125,5,87,0,
+ 110,34,4,0,116,17,121,226,1,0,1,0,1,0,116,18,
+ 100,3,124,1,155,2,100,4,157,3,131,1,130,1,89,0,
+ 110,2,48,0,116,19,160,20,100,5,124,1,124,4,161,3,
+ 1,0,124,5,83,0,41,6,122,245,108,111,97,100,95,109,
+ 111,100,117,108,101,40,102,117,108,108,110,97,109,101,41,32,
+ 45,62,32,109,111,100,117,108,101,46,10,10,32,32,32,32,
+ 32,32,32,32,76,111,97,100,32,116,104,101,32,109,111,100,
+ 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,
+ 32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,117,
+ 108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,32,
+ 116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108,
+ 121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,116,
+ 116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,101,
+ 46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,101,
+ 32,105,109,112,111,114,116,101,100,10,32,32,32,32,32,32,
+ 32,32,109,111,100,117,108,101,44,32,111,114,32,114,97,105,
+ 115,101,115,32,90,105,112,73,109,112,111,114,116,69,114,114,
+ 111,114,32,105,102,32,105,116,32,119,97,115,110,39,116,32,
+ 102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,
+ 218,12,95,95,98,117,105,108,116,105,110,115,95,95,122,14,
+ 76,111,97,100,101,100,32,109,111,100,117,108,101,32,122,25,
+ 32,110,111,116,32,102,111,117,110,100,32,105,110,32,115,121,
+ 115,46,109,111,100,117,108,101,115,122,30,105,109,112,111,114,
+ 116,32,123,125,32,35,32,108,111,97,100,101,100,32,102,114,
+ 111,109,32,90,105,112,32,123,125,41,21,114,44,0,0,0,
+ 218,3,115,121,115,218,7,109,111,100,117,108,101,115,218,3,
+ 103,101,116,114,15,0,0,0,218,12,95,109,111,100,117,108,
+ 101,95,116,121,112,101,218,10,95,95,108,111,97,100,101,114,
+ 95,95,114,36,0,0,0,114,21,0,0,0,114,30,0,0,
+ 0,114,29,0,0,0,90,8,95,95,112,97,116,104,95,95,
+ 218,7,104,97,115,97,116,116,114,114,66,0,0,0,90,14,
+ 95,102,105,120,95,117,112,95,109,111,100,117,108,101,218,8,
+ 95,95,100,105,99,116,95,95,218,4,101,120,101,99,114,26,
+ 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114,
+ 218,10,95,98,111,111,116,115,116,114,97,112,218,16,95,118,
+ 101,114,98,111,115,101,95,109,101,115,115,97,103,101,41,8,
+ 114,32,0,0,0,114,38,0,0,0,114,46,0,0,0,114,
+ 47,0,0,0,114,40,0,0,0,90,3,109,111,100,114,13,
+ 0,0,0,114,63,0,0,0,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,218,11,108,111,97,100,95,109,111,
+ 100,117,108,101,234,0,0,0,115,48,0,0,0,0,7,16,
+ 1,12,1,18,1,8,1,10,1,6,2,2,1,4,3,10,
+ 1,14,1,8,2,10,1,6,1,16,1,16,1,6,1,8,
+ 1,8,2,2,1,14,1,12,1,22,1,14,1,122,23,122,
+ 105,112,105,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,0,
+ 0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,
+ 86,0,0,0,122,20,124,0,160,0,124,1,161,1,115,18,
+ 87,0,100,1,83,0,87,0,110,20,4,0,116,1,121,40,
+ 1,0,1,0,1,0,89,0,100,1,83,0,48,0,116,2,
+ 106,3,115,76,100,2,100,3,108,4,109,5,125,2,1,0,
+ 124,2,160,6,116,2,161,1,1,0,100,4,116,2,95,3,
+ 116,2,124,0,124,1,131,2,83,0,41,5,122,204,82,101,
+ 116,117,114,110,32,116,104,101,32,82,101,115,111,117,114,99,
+ 101,82,101,97,100,101,114,32,102,111,114,32,97,32,112,97,
+ 99,107,97,103,101,32,105,110,32,97,32,122,105,112,32,102,
+ 105,108,101,46,10,10,32,32,32,32,32,32,32,32,73,102,
+ 32,39,102,117,108,108,110,97,109,101,39,32,105,115,32,97,
+ 32,112,97,99,107,97,103,101,32,119,105,116,104,105,110,32,
+ 116,104,101,32,122,105,112,32,102,105,108,101,44,32,114,101,
+ 116,117,114,110,32,116,104,101,10,32,32,32,32,32,32,32,
+ 32,39,82,101,115,111,117,114,99,101,82,101,97,100,101,114,
+ 39,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,
+ 32,112,97,99,107,97,103,101,46,32,32,79,116,104,101,114,
+ 119,105,115,101,32,114,101,116,117,114,110,32,78,111,110,101,
+ 46,10,32,32,32,32,32,32,32,32,78,114,0,0,0,0,
+ 41,1,218,14,82,101,115,111,117,114,99,101,82,101,97,100,
+ 101,114,84,41,7,114,65,0,0,0,114,3,0,0,0,218,
+ 24,95,90,105,112,73,109,112,111,114,116,82,101,115,111,117,
+ 114,99,101,82,101,97,100,101,114,218,11,95,114,101,103,105,
+ 115,116,101,114,101,100,90,13,105,109,112,111,114,116,108,105,
+ 98,46,97,98,99,114,79,0,0,0,90,8,114,101,103,105,
+ 115,116,101,114,41,3,114,32,0,0,0,114,38,0,0,0,
+ 114,79,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+ 10,0,0,0,218,19,103,101,116,95,114,101,115,111,117,114,
+ 99,101,95,114,101,97,100,101,114,16,1,0,0,115,20,0,
+ 0,0,0,6,2,1,10,1,10,1,12,1,8,1,6,1,
+ 12,1,10,1,6,1,122,31,122,105,112,105,109,112,111,114,
+ 116,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,
+ 95,114,101,97,100,101,114,99,1,0,0,0,0,0,0,0,
+ 0,0,0,0,1,0,0,0,5,0,0,0,67,0,0,0,
+ 115,24,0,0,0,100,1,124,0,106,0,155,0,116,1,155,
+ 0,124,0,106,2,155,0,100,2,157,5,83,0,41,3,78,
+ 122,21,60,122,105,112,105,109,112,111,114,116,101,114,32,111,
+ 98,106,101,99,116,32,34,122,2,34,62,41,3,114,29,0,
+ 0,0,114,20,0,0,0,114,31,0,0,0,41,1,114,32,
0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,
- 0,0,218,20,95,103,101,116,95,100,101,99,111,109,112,114,
- 101,115,115,95,102,117,110,99,254,1,0,0,115,24,0,0,
- 0,0,2,4,3,10,1,8,2,4,1,4,1,16,1,14,
- 1,10,1,18,2,6,2,10,1,114,144,0,0,0,99,2,
- 0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9,
- 0,0,0,67,0,0,0,115,128,1,0,0,124,1,92,8,
- 125,2,125,3,125,4,125,5,125,6,125,7,125,8,125,9,
- 124,4,100,1,107,0,114,36,116,0,100,2,131,1,130,1,
- 116,1,160,2,124,0,161,1,144,1,143,8,125,10,122,14,
- 124,10,160,3,124,6,161,1,1,0,87,0,110,38,4,0,
- 116,4,107,10,114,102,1,0,1,0,1,0,116,0,100,3,
- 124,0,155,2,157,2,124,0,100,4,141,2,130,1,89,0,
- 110,2,88,0,124,10,160,5,100,5,161,1,125,11,116,6,
- 124,11,131,1,100,5,107,3,114,134,116,7,100,6,131,1,
- 130,1,124,11,100,0,100,7,133,2,25,0,100,8,107,3,
- 114,168,116,0,100,9,124,0,155,2,157,2,124,0,100,4,
- 141,2,130,1,116,8,124,11,100,10,100,11,133,2,25,0,
- 131,1,125,12,116,8,124,11,100,11,100,5,133,2,25,0,
- 131,1,125,13,100,5,124,12,23,0,124,13,23,0,125,14,
- 124,6,124,14,55,0,125,6,122,14,124,10,160,3,124,6,
- 161,1,1,0,87,0,110,40,4,0,116,4,107,10,144,1,
- 114,18,1,0,1,0,1,0,116,0,100,3,124,0,155,2,
- 157,2,124,0,100,4,141,2,130,1,89,0,110,2,88,0,
- 124,10,160,5,124,4,161,1,125,15,116,6,124,15,131,1,
- 124,4,107,3,144,1,114,52,116,4,100,12,131,1,130,1,
- 87,0,53,0,81,0,82,0,88,0,124,3,100,1,107,2,
- 144,1,114,76,124,15,83,0,122,10,116,9,131,0,125,16,
- 87,0,110,30,4,0,116,10,107,10,144,1,114,116,1,0,
- 1,0,1,0,116,0,100,13,131,1,130,1,89,0,110,2,
- 88,0,124,16,124,15,100,14,131,2,83,0,41,15,78,114,
- 0,0,0,0,122,18,110,101,103,97,116,105,118,101,32,100,
- 97,116,97,32,115,105,122,101,114,92,0,0,0,114,12,0,
- 0,0,114,104,0,0,0,114,98,0,0,0,114,93,0,0,
- 0,115,4,0,0,0,80,75,3,4,122,23,98,97,100,32,
- 108,111,99,97,108,32,102,105,108,101,32,104,101,97,100,101,
- 114,58,32,233,26,0,0,0,114,103,0,0,0,122,26,122,
- 105,112,105,109,112,111,114,116,58,32,99,97,110,39,116,32,
- 114,101,97,100,32,100,97,116,97,114,139,0,0,0,105,241,
- 255,255,255,41,11,114,3,0,0,0,114,110,0,0,0,114,
- 111,0,0,0,114,112,0,0,0,114,22,0,0,0,114,114,
- 0,0,0,114,51,0,0,0,114,119,0,0,0,114,1,0,
- 0,0,114,144,0,0,0,114,143,0,0,0,41,17,114,29,
- 0,0,0,114,54,0,0,0,90,8,100,97,116,97,112,97,
- 116,104,114,130,0,0,0,114,134,0,0,0,114,125,0,0,
- 0,114,137,0,0,0,114,131,0,0,0,114,132,0,0,0,
- 114,133,0,0,0,114,123,0,0,0,114,124,0,0,0,114,
- 135,0,0,0,114,136,0,0,0,114,127,0,0,0,90,8,
- 114,97,119,95,100,97,116,97,114,141,0,0,0,114,9,0,
- 0,0,114,9,0,0,0,114,10,0,0,0,114,52,0,0,
- 0,19,2,0,0,115,62,0,0,0,0,1,20,1,8,1,
- 8,2,14,2,2,1,14,1,14,1,24,1,10,1,12,1,
- 8,2,16,2,18,2,16,1,16,1,12,1,8,1,2,1,
- 14,1,16,1,24,1,10,1,14,1,18,2,10,2,4,3,
- 2,1,10,1,16,1,14,1,114,52,0,0,0,99,2,0,
- 0,0,0,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,124,0,124,
- 1,24,0,131,1,100,1,107,1,83,0,41,2,78,114,5,
- 0,0,0,41,1,218,3,97,98,115,41,2,90,2,116,49,
- 90,2,116,50,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,218,9,95,101,113,95,109,116,105,109,101,65,2,
- 0,0,115,2,0,0,0,0,2,114,147,0,0,0,99,5,
- 0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,
- 0,0,0,67,0,0,0,115,60,1,0,0,124,3,124,2,
- 100,1,156,2,125,5,122,18,116,0,160,1,124,4,124,3,
- 124,5,161,3,125,6,87,0,110,22,4,0,116,2,107,10,
- 114,50,1,0,1,0,1,0,89,0,100,0,83,0,88,0,
- 124,6,100,2,64,0,100,3,107,3,125,7,124,7,114,182,
- 124,6,100,4,64,0,100,3,107,3,125,8,116,3,106,4,
- 100,5,107,3,114,180,124,8,115,104,116,3,106,4,100,6,
- 107,2,114,180,116,5,124,0,124,2,131,2,125,9,124,9,
- 100,0,107,9,114,180,116,3,160,6,116,0,106,7,124,9,
- 161,2,125,10,122,20,116,0,160,8,124,4,124,10,124,3,
- 124,5,161,4,1,0,87,0,110,22,4,0,116,2,107,10,
- 114,178,1,0,1,0,1,0,89,0,100,0,83,0,88,0,
- 110,84,116,9,124,0,124,2,131,2,92,2,125,11,125,12,
- 124,11,144,1,114,10,116,10,116,11,124,4,100,7,100,8,
- 133,2,25,0,131,1,124,11,131,2,114,246,116,11,124,4,
- 100,8,100,9,133,2,25,0,131,1,124,12,107,3,144,1,
- 114,10,116,12,160,13,100,10,124,3,155,2,157,2,161,1,
- 1,0,100,0,83,0,116,14,160,15,124,4,100,9,100,0,
- 133,2,25,0,161,1,125,13,116,16,124,13,116,17,131,2,
- 144,1,115,56,116,18,100,11,124,1,155,2,100,12,157,3,
- 131,1,130,1,124,13,83,0,41,13,78,41,2,114,59,0,
- 0,0,114,13,0,0,0,114,5,0,0,0,114,0,0,0,
- 0,114,86,0,0,0,90,5,110,101,118,101,114,90,6,97,
- 108,119,97,121,115,114,99,0,0,0,114,94,0,0,0,114,
- 95,0,0,0,122,22,98,121,116,101,99,111,100,101,32,105,
- 115,32,115,116,97,108,101,32,102,111,114,32,122,16,99,111,
- 109,112,105,108,101,100,32,109,111,100,117,108,101,32,122,21,
- 32,105,115,32,110,111,116,32,97,32,99,111,100,101,32,111,
- 98,106,101,99,116,41,19,114,21,0,0,0,90,13,95,99,
- 108,97,115,115,105,102,121,95,112,121,99,114,75,0,0,0,
- 218,4,95,105,109,112,90,21,99,104,101,99,107,95,104,97,
- 115,104,95,98,97,115,101,100,95,112,121,99,115,218,15,95,
- 103,101,116,95,112,121,99,95,115,111,117,114,99,101,218,11,
- 115,111,117,114,99,101,95,104,97,115,104,90,17,95,82,65,
- 87,95,77,65,71,73,67,95,78,85,77,66,69,82,90,18,
- 95,118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,
- 121,99,218,29,95,103,101,116,95,109,116,105,109,101,95,97,
- 110,100,95,115,105,122,101,95,111,102,95,115,111,117,114,99,
- 101,114,147,0,0,0,114,2,0,0,0,114,76,0,0,0,
- 114,77,0,0,0,218,7,109,97,114,115,104,97,108,90,5,
- 108,111,97,100,115,114,15,0,0,0,218,10,95,99,111,100,
- 101,95,116,121,112,101,218,9,84,121,112,101,69,114,114,111,
- 114,41,14,114,32,0,0,0,114,53,0,0,0,114,63,0,
- 0,0,114,38,0,0,0,114,126,0,0,0,90,11,101,120,
- 99,95,100,101,116,97,105,108,115,114,129,0,0,0,90,10,
- 104,97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,
- 107,95,115,111,117,114,99,101,90,12,115,111,117,114,99,101,
- 95,98,121,116,101,115,114,150,0,0,0,90,12,115,111,117,
- 114,99,101,95,109,116,105,109,101,90,11,115,111,117,114,99,
- 101,95,115,105,122,101,114,46,0,0,0,114,9,0,0,0,
- 114,9,0,0,0,114,10,0,0,0,218,15,95,117,110,109,
- 97,114,115,104,97,108,95,99,111,100,101,75,2,0,0,115,
- 88,0,0,0,0,2,2,1,2,254,6,5,2,1,18,1,
- 14,1,8,2,12,1,4,1,12,1,10,1,2,255,2,1,
- 8,255,2,2,10,1,8,1,4,1,4,1,2,254,4,5,
- 2,1,4,1,2,0,2,0,2,0,2,255,8,2,14,1,
- 10,3,8,255,6,3,6,3,22,1,18,255,4,2,4,1,
- 8,255,4,2,4,2,18,1,12,1,16,1,114,155,0,0,
- 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,
- 0,0,4,0,0,0,67,0,0,0,115,28,0,0,0,124,
- 0,160,0,100,1,100,2,161,2,125,0,124,0,160,0,100,
- 3,100,2,161,2,125,0,124,0,83,0,41,4,78,115,2,
- 0,0,0,13,10,243,1,0,0,0,10,243,1,0,0,0,
- 13,41,1,114,19,0,0,0,41,1,218,6,115,111,117,114,
- 99,101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
- 0,218,23,95,110,111,114,109,97,108,105,122,101,95,108,105,
- 110,101,95,101,110,100,105,110,103,115,126,2,0,0,115,6,
- 0,0,0,0,1,12,1,12,1,114,159,0,0,0,99,2,
- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,
- 0,0,0,67,0,0,0,115,24,0,0,0,116,0,124,1,
- 131,1,125,1,116,1,124,1,124,0,100,1,100,2,100,3,
- 141,4,83,0,41,4,78,114,74,0,0,0,84,41,1,90,
- 12,100,111,110,116,95,105,110,104,101,114,105,116,41,2,114,
- 159,0,0,0,218,7,99,111,109,112,105,108,101,41,2,114,
- 53,0,0,0,114,158,0,0,0,114,9,0,0,0,114,9,
- 0,0,0,114,10,0,0,0,218,15,95,99,111,109,112,105,
- 108,101,95,115,111,117,114,99,101,133,2,0,0,115,4,0,
- 0,0,0,1,8,1,114,161,0,0,0,99,2,0,0,0,
- 0,0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,
- 67,0,0,0,115,68,0,0,0,116,0,160,1,124,0,100,
- 1,63,0,100,2,23,0,124,0,100,3,63,0,100,4,64,
- 0,124,0,100,5,64,0,124,1,100,6,63,0,124,1,100,
- 3,63,0,100,7,64,0,124,1,100,5,64,0,100,8,20,
- 0,100,9,100,9,100,9,102,9,161,1,83,0,41,10,78,
- 233,9,0,0,0,105,188,7,0,0,233,5,0,0,0,233,
- 15,0,0,0,233,31,0,0,0,233,11,0,0,0,233,63,
- 0,0,0,114,86,0,0,0,114,14,0,0,0,41,2,114,
- 131,0,0,0,90,6,109,107,116,105,109,101,41,2,218,1,
- 100,114,138,0,0,0,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,218,14,95,112,97,114,115,101,95,100,111,
- 115,116,105,109,101,139,2,0,0,115,22,0,0,0,0,1,
- 4,1,10,1,10,1,6,1,6,1,10,1,10,1,2,0,
- 2,0,2,249,114,169,0,0,0,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,6,0,0,0,10,0,0,0,67,0,
- 0,0,115,116,0,0,0,122,82,124,1,100,1,100,0,133,
- 2,25,0,100,2,107,6,115,22,116,0,130,1,124,1,100,
- 0,100,1,133,2,25,0,125,1,124,0,106,1,124,1,25,
- 0,125,2,124,2,100,3,25,0,125,3,124,2,100,4,25,
- 0,125,4,124,2,100,5,25,0,125,5,116,2,124,4,124,
- 3,131,2,124,5,102,2,87,0,83,0,4,0,116,3,116,
- 4,116,5,102,3,107,10,114,110,1,0,1,0,1,0,89,
- 0,100,6,83,0,88,0,100,0,83,0,41,7,78,114,14,
- 0,0,0,169,2,218,1,99,218,1,111,114,163,0,0,0,
- 233,6,0,0,0,233,3,0,0,0,41,2,114,0,0,0,
- 0,114,0,0,0,0,41,6,218,14,65,115,115,101,114,116,
- 105,111,110,69,114,114,111,114,114,28,0,0,0,114,169,0,
- 0,0,114,26,0,0,0,218,10,73,110,100,101,120,69,114,
- 114,111,114,114,154,0,0,0,41,6,114,32,0,0,0,114,
- 13,0,0,0,114,54,0,0,0,114,131,0,0,0,114,132,
- 0,0,0,90,17,117,110,99,111,109,112,114,101,115,115,101,
- 100,95,115,105,122,101,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,114,151,0,0,0,152,2,0,0,115,20,
- 0,0,0,0,1,2,2,20,1,12,1,10,3,8,1,8,
- 1,8,1,16,1,20,1,114,151,0,0,0,99,2,0,0,
- 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,
- 0,67,0,0,0,115,86,0,0,0,124,1,100,1,100,0,
- 133,2,25,0,100,2,107,6,115,20,116,0,130,1,124,1,
- 100,0,100,1,133,2,25,0,125,1,122,14,124,0,106,1,
- 124,1,25,0,125,2,87,0,110,22,4,0,116,2,107,10,
- 114,68,1,0,1,0,1,0,89,0,100,0,83,0,88,0,
- 116,3,124,0,106,4,124,2,131,2,83,0,100,0,83,0,
- 41,3,78,114,14,0,0,0,114,170,0,0,0,41,5,114,
- 175,0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,
- 0,0,0,114,29,0,0,0,41,3,114,32,0,0,0,114,
- 13,0,0,0,114,54,0,0,0,114,9,0,0,0,114,9,
- 0,0,0,114,10,0,0,0,114,149,0,0,0,171,2,0,
- 0,115,14,0,0,0,0,2,20,1,12,2,2,1,14,1,
- 14,1,8,2,114,149,0,0,0,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,11,0,0,0,9,0,0,0,67,0,
- 0,0,115,198,0,0,0,116,0,124,0,124,1,131,2,125,
- 2,116,1,68,0,93,160,92,3,125,3,125,4,125,5,124,
- 2,124,3,23,0,125,6,116,2,106,3,100,1,124,0,106,
- 4,116,5,124,6,100,2,100,3,141,5,1,0,122,14,124,
- 0,106,6,124,6,25,0,125,7,87,0,110,20,4,0,116,
- 7,107,10,114,88,1,0,1,0,1,0,89,0,113,14,88,
- 0,124,7,100,4,25,0,125,8,116,8,124,0,106,4,124,
- 7,131,2,125,9,124,4,114,132,116,9,124,0,124,8,124,
- 6,124,1,124,9,131,5,125,10,110,10,116,10,124,8,124,
- 9,131,2,125,10,124,10,100,0,107,8,114,152,113,14,124,
- 7,100,4,25,0,125,8,124,10,124,5,124,8,102,3,2,
- 0,1,0,83,0,113,14,116,11,100,5,124,1,155,2,157,
- 2,124,1,100,6,141,2,130,1,100,0,83,0,41,7,78,
- 122,13,116,114,121,105,110,103,32,123,125,123,125,123,125,114,
- 86,0,0,0,41,1,90,9,118,101,114,98,111,115,105,116,
- 121,114,0,0,0,0,114,57,0,0,0,114,58,0,0,0,
- 41,12,114,36,0,0,0,114,89,0,0,0,114,76,0,0,
- 0,114,77,0,0,0,114,29,0,0,0,114,20,0,0,0,
- 114,28,0,0,0,114,26,0,0,0,114,52,0,0,0,114,
- 155,0,0,0,114,161,0,0,0,114,3,0,0,0,41,11,
- 114,32,0,0,0,114,38,0,0,0,114,13,0,0,0,114,
- 90,0,0,0,114,91,0,0,0,114,47,0,0,0,114,63,
- 0,0,0,114,54,0,0,0,114,40,0,0,0,114,126,0,
- 0,0,114,46,0,0,0,114,9,0,0,0,114,9,0,0,
- 0,114,10,0,0,0,114,44,0,0,0,186,2,0,0,115,
- 36,0,0,0,0,1,10,1,14,1,8,1,22,1,2,1,
- 14,1,14,1,6,2,8,1,12,1,4,1,18,2,10,1,
- 8,3,2,1,8,1,16,2,114,44,0,0,0,99,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
- 0,0,64,0,0,0,115,60,0,0,0,101,0,90,1,100,
- 0,90,2,100,1,90,3,100,2,90,4,100,3,100,4,132,
- 0,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,83,0,41,14,114,80,0,0,0,122,165,
- 80,114,105,118,97,116,101,32,99,108,97,115,115,32,117,115,
- 101,100,32,116,111,32,115,117,112,112,111,114,116,32,90,105,
- 112,73,109,112,111,114,116,46,103,101,116,95,114,101,115,111,
- 117,114,99,101,95,114,101,97,100,101,114,40,41,46,10,10,
- 32,32,32,32,84,104,105,115,32,99,108,97,115,115,32,105,
- 115,32,97,108,108,111,119,101,100,32,116,111,32,114,101,102,
- 101,114,101,110,99,101,32,97,108,108,32,116,104,101,32,105,
- 110,110,97,114,100,115,32,97,110,100,32,112,114,105,118,97,
- 116,101,32,112,97,114,116,115,32,111,102,10,32,32,32,32,
- 116,104,101,32,122,105,112,105,109,112,111,114,116,101,114,46,
- 10,32,32,32,32,70,99,3,0,0,0,0,0,0,0,0,
+ 0,0,218,8,95,95,114,101,112,114,95,95,34,1,0,0,
+ 115,2,0,0,0,0,1,122,20,122,105,112,105,109,112,111,
+ 114,116,101,114,46,95,95,114,101,112,114,95,95,41,1,78,
+ 41,1,78,41,15,114,6,0,0,0,114,7,0,0,0,114,
+ 8,0,0,0,218,7,95,95,100,111,99,95,95,114,34,0,
+ 0,0,114,41,0,0,0,114,42,0,0,0,114,48,0,0,
+ 0,114,55,0,0,0,114,56,0,0,0,114,64,0,0,0,
+ 114,65,0,0,0,114,78,0,0,0,114,82,0,0,0,114,
+ 83,0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,
+ 0,0,0,114,10,0,0,0,114,4,0,0,0,45,0,0,
+ 0,115,24,0,0,0,8,1,4,17,8,46,10,32,10,12,
+ 8,10,8,21,8,11,8,26,8,13,8,38,8,18,122,12,
+ 95,95,105,110,105,116,95,95,46,112,121,99,84,114,60,0,
+ 0,0,70,41,3,122,4,46,112,121,99,84,70,41,3,114,
+ 61,0,0,0,70,70,99,2,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
+ 20,0,0,0,124,0,106,0,124,1,160,1,100,1,161,1,
+ 100,2,25,0,23,0,83,0,41,3,78,218,1,46,233,2,
+ 0,0,0,41,2,114,31,0,0,0,218,10,114,112,97,114,
+ 116,105,116,105,111,110,41,2,114,32,0,0,0,114,38,0,
+ 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,114,36,0,0,0,52,1,0,0,115,2,0,0,0,0,
+ 1,114,36,0,0,0,99,2,0,0,0,0,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,114,88,0,0,0,41,2,114,4,0,0,0,
- 114,38,0,0,0,41,3,114,32,0,0,0,114,4,0,0,
- 0,114,38,0,0,0,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,114,34,0,0,0,220,2,0,0,115,4,
- 0,0,0,0,1,6,1,122,33,95,90,105,112,73,109,112,
- 111,114,116,82,101,115,111,117,114,99,101,82,101,97,100,101,
- 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,5,0,0,0,8,0,0,0,67,
- 0,0,0,115,92,0,0,0,124,0,106,0,160,1,100,1,
- 100,2,161,2,125,2,124,2,155,0,100,2,124,1,155,0,
- 157,3,125,3,100,3,100,4,108,2,109,3,125,4,1,0,
- 122,18,124,4,124,0,106,4,160,5,124,3,161,1,131,1,
- 87,0,83,0,4,0,116,6,107,10,114,86,1,0,1,0,
- 1,0,116,7,124,3,131,1,130,1,89,0,110,2,88,0,
- 100,0,83,0,41,5,78,114,85,0,0,0,114,109,0,0,
- 0,114,0,0,0,0,41,1,218,7,66,121,116,101,115,73,
- 79,41,8,114,38,0,0,0,114,19,0,0,0,90,2,105,
- 111,114,177,0,0,0,114,4,0,0,0,114,55,0,0,0,
- 114,22,0,0,0,218,17,70,105,108,101,78,111,116,70,111,
- 117,110,100,69,114,114,111,114,41,5,114,32,0,0,0,218,
- 8,114,101,115,111,117,114,99,101,218,16,102,117,108,108,110,
- 97,109,101,95,97,115,95,112,97,116,104,114,13,0,0,0,
- 114,177,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
- 10,0,0,0,218,13,111,112,101,110,95,114,101,115,111,117,
- 114,99,101,224,2,0,0,115,14,0,0,0,0,1,14,1,
- 14,1,12,1,2,1,18,1,14,1,122,38,95,90,105,112,
- 73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
- 97,100,101,114,46,111,112,101,110,95,114,101,115,111,117,114,
- 99,101,99,2,0,0,0,0,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,0,83,0,114,88,0,0,0,41,1,114,
- 178,0,0,0,41,2,114,32,0,0,0,114,179,0,0,0,
+ 18,0,0,0,124,1,116,0,23,0,125,2,124,2,124,0,
+ 106,1,118,0,83,0,169,1,78,41,2,114,20,0,0,0,
+ 114,28,0,0,0,41,3,114,32,0,0,0,114,13,0,0,
+ 0,90,7,100,105,114,112,97,116,104,114,9,0,0,0,114,
+ 9,0,0,0,114,10,0,0,0,114,37,0,0,0,56,1,
+ 0,0,115,4,0,0,0,0,4,8,2,114,37,0,0,0,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,7,0,0,
+ 0,4,0,0,0,67,0,0,0,115,56,0,0,0,116,0,
+ 124,0,124,1,131,2,125,2,116,1,68,0,93,36,92,3,
+ 125,3,125,4,125,5,124,2,124,3,23,0,125,6,124,6,
+ 124,0,106,2,118,0,114,14,124,5,2,0,1,0,83,0,
+ 113,14,100,0,83,0,114,88,0,0,0,41,3,114,36,0,
+ 0,0,218,16,95,122,105,112,95,115,101,97,114,99,104,111,
+ 114,100,101,114,114,28,0,0,0,41,7,114,32,0,0,0,
+ 114,38,0,0,0,114,13,0,0,0,218,6,115,117,102,102,
+ 105,120,218,10,105,115,98,121,116,101,99,111,100,101,114,47,
+ 0,0,0,114,63,0,0,0,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,114,35,0,0,0,65,1,0,0,
+ 115,12,0,0,0,0,1,10,1,14,1,8,1,10,1,10,
+ 1,114,35,0,0,0,99,1,0,0,0,0,0,0,0,0,
+ 0,0,0,26,0,0,0,9,0,0,0,67,0,0,0,115,
+ 2,5,0,0,122,14,116,0,160,1,124,0,161,1,125,1,
+ 87,0,110,36,4,0,116,2,121,50,1,0,1,0,1,0,
+ 116,3,100,1,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,89,0,110,2,48,0,124,1,144,4,143,164,1,0,
+ 122,36,124,1,160,4,116,5,11,0,100,3,161,2,1,0,
+ 124,1,160,6,161,0,125,2,124,1,160,7,116,5,161,1,
+ 125,3,87,0,110,36,4,0,116,2,121,132,1,0,1,0,
+ 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
+ 141,2,130,1,89,0,110,2,48,0,116,8,124,3,131,1,
+ 116,5,107,3,114,164,116,3,100,4,124,0,155,2,157,2,
+ 124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2,
+ 25,0,116,9,107,3,144,1,114,170,122,24,124,1,160,4,
+ 100,6,100,3,161,2,1,0,124,1,160,6,161,0,125,4,
+ 87,0,110,36,4,0,116,2,121,242,1,0,1,0,1,0,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,89,0,110,2,48,0,116,10,124,4,116,11,24,0,
+ 116,5,24,0,100,6,131,2,125,5,122,22,124,1,160,4,
+ 124,5,161,1,1,0,124,1,160,7,161,0,125,6,87,0,
+ 110,38,4,0,116,2,144,1,121,66,1,0,1,0,1,0,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,89,0,110,2,48,0,124,6,160,12,116,9,161,1,
+ 125,7,124,7,100,6,107,0,144,1,114,106,116,3,100,7,
+ 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,6,
+ 124,7,124,7,116,5,23,0,133,2,25,0,125,3,116,8,
+ 124,3,131,1,116,5,107,3,144,1,114,154,116,3,100,8,
+ 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,4,
+ 116,8,124,6,131,1,24,0,124,7,23,0,125,2,116,13,
+ 124,3,100,9,100,10,133,2,25,0,131,1,125,8,116,13,
+ 124,3,100,10,100,11,133,2,25,0,131,1,125,9,124,2,
+ 124,8,107,0,144,1,114,230,116,3,100,12,124,0,155,2,
+ 157,2,124,0,100,2,141,2,130,1,124,2,124,9,107,0,
+ 144,2,114,2,116,3,100,13,124,0,155,2,157,2,124,0,
+ 100,2,141,2,130,1,124,2,124,8,56,0,125,2,124,2,
+ 124,9,24,0,125,10,124,10,100,6,107,0,144,2,114,46,
+ 116,3,100,14,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,105,0,125,11,100,6,125,12,122,14,124,1,160,4,
+ 124,2,161,1,1,0,87,0,110,38,4,0,116,2,144,2,
+ 121,106,1,0,1,0,1,0,116,3,100,4,124,0,155,2,
+ 157,2,124,0,100,2,141,2,130,1,89,0,110,2,48,0,
+ 124,1,160,7,100,15,161,1,125,3,116,8,124,3,131,1,
+ 100,5,107,0,144,2,114,140,116,14,100,16,131,1,130,1,
+ 124,3,100,0,100,5,133,2,25,0,100,17,107,3,144,2,
+ 114,162,144,4,113,208,116,8,124,3,131,1,100,15,107,3,
+ 144,2,114,184,116,14,100,16,131,1,130,1,116,15,124,3,
+ 100,18,100,19,133,2,25,0,131,1,125,13,116,15,124,3,
+ 100,19,100,9,133,2,25,0,131,1,125,14,116,15,124,3,
+ 100,9,100,20,133,2,25,0,131,1,125,15,116,15,124,3,
+ 100,20,100,10,133,2,25,0,131,1,125,16,116,13,124,3,
+ 100,10,100,11,133,2,25,0,131,1,125,17,116,13,124,3,
+ 100,11,100,21,133,2,25,0,131,1,125,18,116,13,124,3,
+ 100,21,100,22,133,2,25,0,131,1,125,4,116,15,124,3,
+ 100,22,100,23,133,2,25,0,131,1,125,19,116,15,124,3,
+ 100,23,100,24,133,2,25,0,131,1,125,20,116,15,124,3,
+ 100,24,100,25,133,2,25,0,131,1,125,21,116,13,124,3,
+ 100,26,100,15,133,2,25,0,131,1,125,22,124,19,124,20,
+ 23,0,124,21,23,0,125,8,124,22,124,9,107,4,144,3,
+ 114,144,116,3,100,27,124,0,155,2,157,2,124,0,100,2,
+ 141,2,130,1,124,22,124,10,55,0,125,22,122,14,124,1,
+ 160,7,124,19,161,1,125,23,87,0,110,38,4,0,116,2,
+ 144,3,121,204,1,0,1,0,1,0,116,3,100,4,124,0,
+ 155,2,157,2,124,0,100,2,141,2,130,1,89,0,110,2,
+ 48,0,116,8,124,23,131,1,124,19,107,3,144,3,114,238,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,122,50,116,8,124,1,160,7,124,8,124,19,24,0,
+ 161,1,131,1,124,8,124,19,24,0,107,3,144,4,114,30,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,87,0,110,38,4,0,116,2,144,4,121,70,1,0,
+ 1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,
+ 100,2,141,2,130,1,89,0,110,2,48,0,124,13,100,28,
+ 64,0,144,4,114,92,124,23,160,16,161,0,125,23,110,52,
+ 122,14,124,23,160,16,100,29,161,1,125,23,87,0,110,36,
+ 4,0,116,17,144,4,121,142,1,0,1,0,1,0,124,23,
+ 160,16,100,30,161,1,160,18,116,19,161,1,125,23,89,0,
+ 110,2,48,0,124,23,160,20,100,31,116,21,161,2,125,23,
+ 116,22,160,23,124,0,124,23,161,2,125,24,124,24,124,14,
+ 124,18,124,4,124,22,124,15,124,16,124,17,102,8,125,25,
+ 124,25,124,11,124,23,60,0,124,12,100,32,55,0,125,12,
+ 144,2,113,108,87,0,100,0,4,0,4,0,131,3,1,0,
+ 110,18,49,0,144,4,115,230,48,0,1,0,1,0,1,0,
+ 89,0,1,0,116,24,160,25,100,33,124,12,124,0,161,3,
+ 1,0,124,11,83,0,41,34,78,122,21,99,97,110,39,116,
+ 32,111,112,101,110,32,90,105,112,32,102,105,108,101,58,32,
+ 114,12,0,0,0,114,86,0,0,0,250,21,99,97,110,39,
+ 116,32,114,101,97,100,32,90,105,112,32,102,105,108,101,58,
+ 32,233,4,0,0,0,114,0,0,0,0,122,16,110,111,116,
+ 32,97,32,90,105,112,32,102,105,108,101,58,32,122,18,99,
+ 111,114,114,117,112,116,32,90,105,112,32,102,105,108,101,58,
+ 32,233,12,0,0,0,233,16,0,0,0,233,20,0,0,0,
+ 122,28,98,97,100,32,99,101,110,116,114,97,108,32,100,105,
+ 114,101,99,116,111,114,121,32,115,105,122,101,58,32,122,30,
+ 98,97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,
+ 99,116,111,114,121,32,111,102,102,115,101,116,58,32,122,38,
+ 98,97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,
+ 99,116,111,114,121,32,115,105,122,101,32,111,114,32,111,102,
+ 102,115,101,116,58,32,233,46,0,0,0,250,27,69,79,70,
+ 32,114,101,97,100,32,119,104,101,114,101,32,110,111,116,32,
+ 101,120,112,101,99,116,101,100,115,4,0,0,0,80,75,1,
+ 2,233,8,0,0,0,233,10,0,0,0,233,14,0,0,0,
+ 233,24,0,0,0,233,28,0,0,0,233,30,0,0,0,233,
+ 32,0,0,0,233,34,0,0,0,233,42,0,0,0,122,25,
+ 98,97,100,32,108,111,99,97,108,32,104,101,97,100,101,114,
+ 32,111,102,102,115,101,116,58,32,105,0,8,0,0,218,5,
+ 97,115,99,105,105,90,6,108,97,116,105,110,49,250,1,47,
+ 114,5,0,0,0,122,33,122,105,112,105,109,112,111,114,116,
+ 58,32,102,111,117,110,100,32,123,125,32,110,97,109,101,115,
+ 32,105,110,32,123,33,114,125,41,26,218,3,95,105,111,218,
+ 9,111,112,101,110,95,99,111,100,101,114,22,0,0,0,114,
+ 3,0,0,0,218,4,115,101,101,107,218,20,69,78,68,95,
+ 67,69,78,84,82,65,76,95,68,73,82,95,83,73,90,69,
+ 90,4,116,101,108,108,218,4,114,101,97,100,114,51,0,0,
+ 0,218,18,83,84,82,73,78,71,95,69,78,68,95,65,82,
+ 67,72,73,86,69,218,3,109,97,120,218,15,77,65,88,95,
+ 67,79,77,77,69,78,84,95,76,69,78,218,5,114,102,105,
+ 110,100,114,2,0,0,0,218,8,69,79,70,69,114,114,111,
+ 114,114,1,0,0,0,114,62,0,0,0,218,18,85,110,105,
+ 99,111,100,101,68,101,99,111,100,101,69,114,114,111,114,218,
+ 9,116,114,97,110,115,108,97,116,101,218,11,99,112,52,51,
+ 55,95,116,97,98,108,101,114,19,0,0,0,114,20,0,0,
+ 0,114,21,0,0,0,114,30,0,0,0,114,76,0,0,0,
+ 114,77,0,0,0,41,26,114,29,0,0,0,218,2,102,112,
+ 90,15,104,101,97,100,101,114,95,112,111,115,105,116,105,111,
+ 110,218,6,98,117,102,102,101,114,218,9,102,105,108,101,95,
+ 115,105,122,101,90,17,109,97,120,95,99,111,109,109,101,110,
+ 116,95,115,116,97,114,116,218,4,100,97,116,97,90,3,112,
+ 111,115,218,11,104,101,97,100,101,114,95,115,105,122,101,90,
+ 13,104,101,97,100,101,114,95,111,102,102,115,101,116,90,10,
+ 97,114,99,95,111,102,102,115,101,116,114,33,0,0,0,218,
+ 5,99,111,117,110,116,218,5,102,108,97,103,115,218,8,99,
+ 111,109,112,114,101,115,115,218,4,116,105,109,101,218,4,100,
+ 97,116,101,218,3,99,114,99,218,9,100,97,116,97,95,115,
+ 105,122,101,218,9,110,97,109,101,95,115,105,122,101,218,10,
+ 101,120,116,114,97,95,115,105,122,101,90,12,99,111,109,109,
+ 101,110,116,95,115,105,122,101,218,11,102,105,108,101,95,111,
+ 102,102,115,101,116,114,59,0,0,0,114,13,0,0,0,218,
+ 1,116,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,114,27,0,0,0,96,1,0,0,115,212,0,0,0,0,
+ 1,2,1,14,1,12,1,24,2,8,1,2,1,14,1,8,
+ 1,14,1,12,1,24,1,12,1,18,1,18,3,2,1,12,
+ 1,12,1,12,1,10,1,2,255,12,2,8,1,2,255,2,
+ 1,2,255,4,2,2,1,10,1,12,1,14,1,10,1,2,
+ 255,12,2,10,1,10,1,10,1,2,255,6,2,16,1,14,
+ 1,10,1,2,255,6,2,16,2,16,1,16,1,10,1,18,
+ 1,10,1,18,1,8,1,8,1,10,1,18,2,4,2,4,
+ 1,2,1,14,1,14,1,24,2,10,1,14,1,8,2,18,
+ 1,4,1,14,1,8,1,16,1,16,1,16,1,16,1,16,
+ 1,16,1,16,1,16,1,16,1,16,1,16,1,12,1,10,
+ 1,18,1,8,2,2,1,14,1,14,1,24,1,14,1,18,
+ 4,2,1,28,1,22,1,14,1,24,2,10,2,10,3,2,
+ 1,14,1,14,1,22,2,12,1,12,1,20,1,8,1,44,
+ 1,14,1,114,27,0,0,0,117,190,1,0,0,0,1,2,
+ 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
+ 19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
+ 35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,
+ 51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,
+ 67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,
+ 83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,
+ 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,
+ 115,116,117,118,119,120,121,122,123,124,125,126,127,195,135,195,
+ 188,195,169,195,162,195,164,195,160,195,165,195,167,195,170,195,
+ 171,195,168,195,175,195,174,195,172,195,132,195,133,195,137,195,
+ 166,195,134,195,180,195,182,195,178,195,187,195,185,195,191,195,
+ 150,195,156,194,162,194,163,194,165,226,130,167,198,146,195,161,
+ 195,173,195,179,195,186,195,177,195,145,194,170,194,186,194,191,
+ 226,140,144,194,172,194,189,194,188,194,161,194,171,194,187,226,
+ 150,145,226,150,146,226,150,147,226,148,130,226,148,164,226,149,
+ 161,226,149,162,226,149,150,226,149,149,226,149,163,226,149,145,
+ 226,149,151,226,149,157,226,149,156,226,149,155,226,148,144,226,
+ 148,148,226,148,180,226,148,172,226,148,156,226,148,128,226,148,
+ 188,226,149,158,226,149,159,226,149,154,226,149,148,226,149,169,
+ 226,149,166,226,149,160,226,149,144,226,149,172,226,149,167,226,
+ 149,168,226,149,164,226,149,165,226,149,153,226,149,152,226,149,
+ 146,226,149,147,226,149,171,226,149,170,226,148,152,226,148,140,
+ 226,150,136,226,150,132,226,150,140,226,150,144,226,150,128,206,
+ 177,195,159,206,147,207,128,206,163,207,131,194,181,207,132,206,
+ 166,206,152,206,169,206,180,226,136,158,207,134,206,181,226,136,
+ 169,226,137,161,194,177,226,137,165,226,137,164,226,140,160,226,
+ 140,161,195,183,226,137,136,194,176,226,136,153,194,183,226,136,
+ 154,226,129,191,194,178,226,150,160,194,160,99,0,0,0,0,
+ 0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,
+ 67,0,0,0,115,110,0,0,0,116,0,114,22,116,1,160,
+ 2,100,1,161,1,1,0,116,3,100,2,131,1,130,1,100,
+ 3,97,0,122,62,122,16,100,4,100,5,108,4,109,5,125,
+ 0,1,0,87,0,110,36,4,0,116,6,121,80,1,0,1,
+ 0,1,0,116,1,160,2,100,1,161,1,1,0,116,3,100,
+ 2,131,1,130,1,89,0,110,2,48,0,87,0,100,6,97,
+ 0,110,6,100,6,97,0,48,0,116,1,160,2,100,7,161,
+ 1,1,0,124,0,83,0,41,8,78,122,27,122,105,112,105,
+ 109,112,111,114,116,58,32,122,108,105,98,32,85,78,65,86,
+ 65,73,76,65,66,76,69,250,41,99,97,110,39,116,32,100,
+ 101,99,111,109,112,114,101,115,115,32,100,97,116,97,59,32,
+ 122,108,105,98,32,110,111,116,32,97,118,97,105,108,97,98,
+ 108,101,84,114,0,0,0,0,169,1,218,10,100,101,99,111,
+ 109,112,114,101,115,115,70,122,25,122,105,112,105,109,112,111,
+ 114,116,58,32,122,108,105,98,32,97,118,97,105,108,97,98,
+ 108,101,41,7,218,15,95,105,109,112,111,114,116,105,110,103,
+ 95,122,108,105,98,114,76,0,0,0,114,77,0,0,0,114,
+ 3,0,0,0,90,4,122,108,105,98,114,141,0,0,0,218,
+ 9,69,120,99,101,112,116,105,111,110,114,140,0,0,0,114,
+ 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,20,
+ 95,103,101,116,95,100,101,99,111,109,112,114,101,115,115,95,
+ 102,117,110,99,254,1,0,0,115,24,0,0,0,0,2,4,
+ 3,10,1,8,2,4,1,4,1,16,1,12,1,10,1,16,
+ 2,12,2,10,1,114,144,0,0,0,99,2,0,0,0,0,
+ 0,0,0,0,0,0,0,17,0,0,0,9,0,0,0,67,
+ 0,0,0,115,144,1,0,0,124,1,92,8,125,2,125,3,
+ 125,4,125,5,125,6,125,7,125,8,125,9,124,4,100,1,
+ 107,0,114,36,116,0,100,2,131,1,130,1,116,1,160,2,
+ 124,0,161,1,144,1,143,14,125,10,122,14,124,10,160,3,
+ 124,6,161,1,1,0,87,0,110,36,4,0,116,4,121,100,
+ 1,0,1,0,1,0,116,0,100,3,124,0,155,2,157,2,
+ 124,0,100,4,141,2,130,1,89,0,110,2,48,0,124,10,
+ 160,5,100,5,161,1,125,11,116,6,124,11,131,1,100,5,
+ 107,3,114,132,116,7,100,6,131,1,130,1,124,11,100,0,
+ 100,7,133,2,25,0,100,8,107,3,114,166,116,0,100,9,
+ 124,0,155,2,157,2,124,0,100,4,141,2,130,1,116,8,
+ 124,11,100,10,100,11,133,2,25,0,131,1,125,12,116,8,
+ 124,11,100,11,100,5,133,2,25,0,131,1,125,13,100,5,
+ 124,12,23,0,124,13,23,0,125,14,124,6,124,14,55,0,
+ 125,6,122,14,124,10,160,3,124,6,161,1,1,0,87,0,
+ 110,38,4,0,116,4,144,1,121,14,1,0,1,0,1,0,
+ 116,0,100,3,124,0,155,2,157,2,124,0,100,4,141,2,
+ 130,1,89,0,110,2,48,0,124,10,160,5,124,4,161,1,
+ 125,15,116,6,124,15,131,1,124,4,107,3,144,1,114,48,
+ 116,4,100,12,131,1,130,1,87,0,100,0,4,0,4,0,
+ 131,3,1,0,110,18,49,0,144,1,115,70,48,0,1,0,
+ 1,0,1,0,89,0,1,0,124,3,100,1,107,2,144,1,
+ 114,94,124,15,83,0,122,10,116,9,131,0,125,16,87,0,
+ 110,28,4,0,116,10,144,1,121,132,1,0,1,0,1,0,
+ 116,0,100,13,131,1,130,1,89,0,110,2,48,0,124,16,
+ 124,15,100,14,131,2,83,0,41,15,78,114,0,0,0,0,
+ 122,18,110,101,103,97,116,105,118,101,32,100,97,116,97,32,
+ 115,105,122,101,114,92,0,0,0,114,12,0,0,0,114,104,
+ 0,0,0,114,98,0,0,0,114,93,0,0,0,115,4,0,
+ 0,0,80,75,3,4,122,23,98,97,100,32,108,111,99,97,
+ 108,32,102,105,108,101,32,104,101,97,100,101,114,58,32,233,
+ 26,0,0,0,114,103,0,0,0,122,26,122,105,112,105,109,
+ 112,111,114,116,58,32,99,97,110,39,116,32,114,101,97,100,
+ 32,100,97,116,97,114,139,0,0,0,105,241,255,255,255,41,
+ 11,114,3,0,0,0,114,110,0,0,0,114,111,0,0,0,
+ 114,112,0,0,0,114,22,0,0,0,114,114,0,0,0,114,
+ 51,0,0,0,114,119,0,0,0,114,1,0,0,0,114,144,
+ 0,0,0,114,143,0,0,0,41,17,114,29,0,0,0,114,
+ 54,0,0,0,90,8,100,97,116,97,112,97,116,104,114,130,
+ 0,0,0,114,134,0,0,0,114,125,0,0,0,114,137,0,
+ 0,0,114,131,0,0,0,114,132,0,0,0,114,133,0,0,
+ 0,114,123,0,0,0,114,124,0,0,0,114,135,0,0,0,
+ 114,136,0,0,0,114,127,0,0,0,90,8,114,97,119,95,
+ 100,97,116,97,114,141,0,0,0,114,9,0,0,0,114,9,
+ 0,0,0,114,10,0,0,0,114,52,0,0,0,19,2,0,
+ 0,115,62,0,0,0,0,1,20,1,8,1,8,2,14,2,
+ 2,1,14,1,12,1,24,1,10,1,12,1,8,2,16,2,
+ 18,2,16,1,16,1,12,1,8,1,2,1,14,1,14,1,
+ 24,1,10,1,14,1,40,2,10,2,4,3,2,1,10,1,
+ 14,1,14,1,114,52,0,0,0,99,2,0,0,0,0,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,124,0,124,1,24,0,131,
+ 1,100,1,107,1,83,0,41,2,78,114,5,0,0,0,41,
+ 1,218,3,97,98,115,41,2,90,2,116,49,90,2,116,50,
114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,
- 13,114,101,115,111,117,114,99,101,95,112,97,116,104,233,2,
- 0,0,115,2,0,0,0,0,4,122,38,95,90,105,112,73,
- 109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,97,
- 100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,116,
- 104,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,
- 0,0,8,0,0,0,67,0,0,0,115,72,0,0,0,124,
- 0,106,0,160,1,100,1,100,2,161,2,125,2,124,2,155,
- 0,100,2,124,1,155,0,157,3,125,3,122,16,124,0,106,
- 2,160,3,124,3,161,1,1,0,87,0,110,22,4,0,116,
- 4,107,10,114,66,1,0,1,0,1,0,89,0,100,3,83,
- 0,88,0,100,4,83,0,41,5,78,114,85,0,0,0,114,
- 109,0,0,0,70,84,41,5,114,38,0,0,0,114,19,0,
- 0,0,114,4,0,0,0,114,55,0,0,0,114,22,0,0,
- 0,41,4,114,32,0,0,0,114,59,0,0,0,114,180,0,
- 0,0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,
- 0,114,10,0,0,0,218,11,105,115,95,114,101,115,111,117,
- 114,99,101,239,2,0,0,115,14,0,0,0,0,3,14,1,
- 14,1,2,1,16,1,14,1,8,1,122,36,95,90,105,112,
+ 9,95,101,113,95,109,116,105,109,101,65,2,0,0,115,2,
+ 0,0,0,0,2,114,147,0,0,0,99,5,0,0,0,0,
+ 0,0,0,0,0,0,0,14,0,0,0,8,0,0,0,67,
+ 0,0,0,115,56,1,0,0,124,3,124,2,100,1,156,2,
+ 125,5,122,18,116,0,160,1,124,4,124,3,124,5,161,3,
+ 125,6,87,0,110,20,4,0,116,2,121,48,1,0,1,0,
+ 1,0,89,0,100,0,83,0,48,0,124,6,100,2,64,0,
+ 100,3,107,3,125,7,124,7,114,178,124,6,100,4,64,0,
+ 100,3,107,3,125,8,116,3,106,4,100,5,107,3,114,176,
+ 124,8,115,102,116,3,106,4,100,6,107,2,114,176,116,5,
+ 124,0,124,2,131,2,125,9,124,9,100,0,117,1,114,176,
+ 116,3,160,6,116,0,106,7,124,9,161,2,125,10,122,20,
+ 116,0,160,8,124,4,124,10,124,3,124,5,161,4,1,0,
+ 87,0,110,20,4,0,116,2,121,174,1,0,1,0,1,0,
+ 89,0,100,0,83,0,48,0,110,84,116,9,124,0,124,2,
+ 131,2,92,2,125,11,125,12,124,11,144,1,114,6,116,10,
+ 116,11,124,4,100,7,100,8,133,2,25,0,131,1,124,11,
+ 131,2,114,242,116,11,124,4,100,8,100,9,133,2,25,0,
+ 131,1,124,12,107,3,144,1,114,6,116,12,160,13,100,10,
+ 124,3,155,2,157,2,161,1,1,0,100,0,83,0,116,14,
+ 160,15,124,4,100,9,100,0,133,2,25,0,161,1,125,13,
+ 116,16,124,13,116,17,131,2,144,1,115,52,116,18,100,11,
+ 124,1,155,2,100,12,157,3,131,1,130,1,124,13,83,0,
+ 41,13,78,41,2,114,59,0,0,0,114,13,0,0,0,114,
+ 5,0,0,0,114,0,0,0,0,114,86,0,0,0,90,5,
+ 110,101,118,101,114,90,6,97,108,119,97,121,115,114,99,0,
+ 0,0,114,94,0,0,0,114,95,0,0,0,122,22,98,121,
+ 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,
+ 102,111,114,32,122,16,99,111,109,112,105,108,101,100,32,109,
+ 111,100,117,108,101,32,122,21,32,105,115,32,110,111,116,32,
+ 97,32,99,111,100,101,32,111,98,106,101,99,116,41,19,114,
+ 21,0,0,0,90,13,95,99,108,97,115,115,105,102,121,95,
+ 112,121,99,114,75,0,0,0,218,4,95,105,109,112,90,21,
+ 99,104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,
+ 95,112,121,99,115,218,15,95,103,101,116,95,112,121,99,95,
+ 115,111,117,114,99,101,218,11,115,111,117,114,99,101,95,104,
+ 97,115,104,90,17,95,82,65,87,95,77,65,71,73,67,95,
+ 78,85,77,66,69,82,90,18,95,118,97,108,105,100,97,116,
+ 101,95,104,97,115,104,95,112,121,99,218,29,95,103,101,116,
+ 95,109,116,105,109,101,95,97,110,100,95,115,105,122,101,95,
+ 111,102,95,115,111,117,114,99,101,114,147,0,0,0,114,2,
+ 0,0,0,114,76,0,0,0,114,77,0,0,0,218,7,109,
+ 97,114,115,104,97,108,90,5,108,111,97,100,115,114,15,0,
+ 0,0,218,10,95,99,111,100,101,95,116,121,112,101,218,9,
+ 84,121,112,101,69,114,114,111,114,41,14,114,32,0,0,0,
+ 114,53,0,0,0,114,63,0,0,0,114,38,0,0,0,114,
+ 126,0,0,0,90,11,101,120,99,95,100,101,116,97,105,108,
+ 115,114,129,0,0,0,90,10,104,97,115,104,95,98,97,115,
+ 101,100,90,12,99,104,101,99,107,95,115,111,117,114,99,101,
+ 90,12,115,111,117,114,99,101,95,98,121,116,101,115,114,150,
+ 0,0,0,90,12,115,111,117,114,99,101,95,109,116,105,109,
+ 101,90,11,115,111,117,114,99,101,95,115,105,122,101,114,46,
+ 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,
+ 0,0,218,15,95,117,110,109,97,114,115,104,97,108,95,99,
+ 111,100,101,75,2,0,0,115,82,0,0,0,0,2,2,1,
+ 2,254,6,5,2,1,18,1,12,1,8,2,12,1,4,1,
+ 12,1,10,1,2,255,2,1,8,255,2,2,10,1,8,1,
+ 4,1,4,1,2,254,4,5,2,1,4,1,8,255,8,2,
+ 12,1,10,3,8,255,6,3,6,3,22,1,18,255,4,2,
+ 4,1,8,255,4,2,4,2,18,1,12,1,16,1,114,155,
+ 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
+ 1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,0,
+ 0,124,0,160,0,100,1,100,2,161,2,125,0,124,0,160,
+ 0,100,3,100,2,161,2,125,0,124,0,83,0,41,4,78,
+ 115,2,0,0,0,13,10,243,1,0,0,0,10,243,1,0,
+ 0,0,13,41,1,114,19,0,0,0,41,1,218,6,115,111,
+ 117,114,99,101,114,9,0,0,0,114,9,0,0,0,114,10,
+ 0,0,0,218,23,95,110,111,114,109,97,108,105,122,101,95,
+ 108,105,110,101,95,101,110,100,105,110,103,115,126,2,0,0,
+ 115,6,0,0,0,0,1,12,1,12,1,114,159,0,0,0,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+ 0,6,0,0,0,67,0,0,0,115,24,0,0,0,116,0,
+ 124,1,131,1,125,1,116,1,124,1,124,0,100,1,100,2,
+ 100,3,141,4,83,0,41,4,78,114,74,0,0,0,84,41,
+ 1,90,12,100,111,110,116,95,105,110,104,101,114,105,116,41,
+ 2,114,159,0,0,0,218,7,99,111,109,112,105,108,101,41,
+ 2,114,53,0,0,0,114,158,0,0,0,114,9,0,0,0,
+ 114,9,0,0,0,114,10,0,0,0,218,15,95,99,111,109,
+ 112,105,108,101,95,115,111,117,114,99,101,133,2,0,0,115,
+ 4,0,0,0,0,1,8,1,114,161,0,0,0,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,11,0,
+ 0,0,67,0,0,0,115,68,0,0,0,116,0,160,1,124,
+ 0,100,1,63,0,100,2,23,0,124,0,100,3,63,0,100,
+ 4,64,0,124,0,100,5,64,0,124,1,100,6,63,0,124,
+ 1,100,3,63,0,100,7,64,0,124,1,100,5,64,0,100,
+ 8,20,0,100,9,100,9,100,9,102,9,161,1,83,0,41,
+ 10,78,233,9,0,0,0,105,188,7,0,0,233,5,0,0,
+ 0,233,15,0,0,0,233,31,0,0,0,233,11,0,0,0,
+ 233,63,0,0,0,114,86,0,0,0,114,14,0,0,0,41,
+ 2,114,131,0,0,0,90,6,109,107,116,105,109,101,41,2,
+ 218,1,100,114,138,0,0,0,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,218,14,95,112,97,114,115,101,95,
+ 100,111,115,116,105,109,101,139,2,0,0,115,18,0,0,0,
+ 0,1,4,1,10,1,10,1,6,1,6,1,10,1,10,1,
+ 6,249,114,169,0,0,0,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,6,0,0,0,10,0,0,0,67,0,0,0,
+ 115,114,0,0,0,122,82,124,1,100,1,100,0,133,2,25,
+ 0,100,2,118,0,115,22,74,0,130,1,124,1,100,0,100,
+ 1,133,2,25,0,125,1,124,0,106,0,124,1,25,0,125,
+ 2,124,2,100,3,25,0,125,3,124,2,100,4,25,0,125,
+ 4,124,2,100,5,25,0,125,5,116,1,124,4,124,3,131,
+ 2,124,5,102,2,87,0,83,0,4,0,116,2,116,3,116,
+ 4,102,3,121,108,1,0,1,0,1,0,89,0,100,6,83,
+ 0,48,0,100,0,83,0,41,7,78,114,14,0,0,0,169,
+ 2,218,1,99,218,1,111,114,163,0,0,0,233,6,0,0,
+ 0,233,3,0,0,0,41,2,114,0,0,0,0,114,0,0,
+ 0,0,41,5,114,28,0,0,0,114,169,0,0,0,114,26,
+ 0,0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,
+ 154,0,0,0,41,6,114,32,0,0,0,114,13,0,0,0,
+ 114,54,0,0,0,114,131,0,0,0,114,132,0,0,0,90,
+ 17,117,110,99,111,109,112,114,101,115,115,101,100,95,115,105,
+ 122,101,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,114,151,0,0,0,152,2,0,0,115,20,0,0,0,0,
+ 1,2,2,20,1,12,1,10,3,8,1,8,1,8,1,16,
+ 1,18,1,114,151,0,0,0,99,2,0,0,0,0,0,0,
+ 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,
+ 0,115,84,0,0,0,124,1,100,1,100,0,133,2,25,0,
+ 100,2,118,0,115,20,74,0,130,1,124,1,100,0,100,1,
+ 133,2,25,0,125,1,122,14,124,0,106,0,124,1,25,0,
+ 125,2,87,0,110,20,4,0,116,1,121,66,1,0,1,0,
+ 1,0,89,0,100,0,83,0,48,0,116,2,124,0,106,3,
+ 124,2,131,2,83,0,100,0,83,0,41,3,78,114,14,0,
+ 0,0,114,170,0,0,0,41,4,114,28,0,0,0,114,26,
+ 0,0,0,114,52,0,0,0,114,29,0,0,0,41,3,114,
+ 32,0,0,0,114,13,0,0,0,114,54,0,0,0,114,9,
+ 0,0,0,114,9,0,0,0,114,10,0,0,0,114,149,0,
+ 0,0,171,2,0,0,115,14,0,0,0,0,2,20,1,12,
+ 2,2,1,14,1,12,1,8,2,114,149,0,0,0,99,2,
+ 0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,9,
+ 0,0,0,67,0,0,0,115,196,0,0,0,116,0,124,0,
+ 124,1,131,2,125,2,116,1,68,0,93,158,92,3,125,3,
+ 125,4,125,5,124,2,124,3,23,0,125,6,116,2,106,3,
+ 100,1,124,0,106,4,116,5,124,6,100,2,100,3,141,5,
+ 1,0,122,14,124,0,106,6,124,6,25,0,125,7,87,0,
+ 110,18,4,0,116,7,121,86,1,0,1,0,1,0,89,0,
+ 113,14,48,0,124,7,100,4,25,0,125,8,116,8,124,0,
+ 106,4,124,7,131,2,125,9,124,4,114,130,116,9,124,0,
+ 124,8,124,6,124,1,124,9,131,5,125,10,110,10,116,10,
+ 124,8,124,9,131,2,125,10,124,10,100,0,117,0,114,150,
+ 113,14,124,7,100,4,25,0,125,8,124,10,124,5,124,8,
+ 102,3,2,0,1,0,83,0,113,14,116,11,100,5,124,1,
+ 155,2,157,2,124,1,100,6,141,2,130,1,100,0,83,0,
+ 41,7,78,122,13,116,114,121,105,110,103,32,123,125,123,125,
+ 123,125,114,86,0,0,0,41,1,90,9,118,101,114,98,111,
+ 115,105,116,121,114,0,0,0,0,114,57,0,0,0,114,58,
+ 0,0,0,41,12,114,36,0,0,0,114,89,0,0,0,114,
+ 76,0,0,0,114,77,0,0,0,114,29,0,0,0,114,20,
+ 0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,0,
+ 0,0,114,155,0,0,0,114,161,0,0,0,114,3,0,0,
+ 0,41,11,114,32,0,0,0,114,38,0,0,0,114,13,0,
+ 0,0,114,90,0,0,0,114,91,0,0,0,114,47,0,0,
+ 0,114,63,0,0,0,114,54,0,0,0,114,40,0,0,0,
+ 114,126,0,0,0,114,46,0,0,0,114,9,0,0,0,114,
+ 9,0,0,0,114,10,0,0,0,114,44,0,0,0,186,2,
+ 0,0,115,36,0,0,0,0,1,10,1,14,1,8,1,22,
+ 1,2,1,14,1,12,1,6,2,8,1,12,1,4,1,18,
+ 2,10,1,8,3,2,1,8,1,16,2,114,44,0,0,0,
+ 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,64,0,0,0,115,60,0,0,0,101,0,
+ 90,1,100,0,90,2,100,1,90,3,100,2,90,4,100,3,
+ 100,4,132,0,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,83,0,41,14,114,80,0,0,
+ 0,122,165,80,114,105,118,97,116,101,32,99,108,97,115,115,
+ 32,117,115,101,100,32,116,111,32,115,117,112,112,111,114,116,
+ 32,90,105,112,73,109,112,111,114,116,46,103,101,116,95,114,
+ 101,115,111,117,114,99,101,95,114,101,97,100,101,114,40,41,
+ 46,10,10,32,32,32,32,84,104,105,115,32,99,108,97,115,
+ 115,32,105,115,32,97,108,108,111,119,101,100,32,116,111,32,
+ 114,101,102,101,114,101,110,99,101,32,97,108,108,32,116,104,
+ 101,32,105,110,110,97,114,100,115,32,97,110,100,32,112,114,
+ 105,118,97,116,101,32,112,97,114,116,115,32,111,102,10,32,
+ 32,32,32,116,104,101,32,122,105,112,105,109,112,111,114,116,
+ 101,114,46,10,32,32,32,32,70,99,3,0,0,0,0,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,114,88,0,0,0,41,2,114,4,
+ 0,0,0,114,38,0,0,0,41,3,114,32,0,0,0,114,
+ 4,0,0,0,114,38,0,0,0,114,9,0,0,0,114,9,
+ 0,0,0,114,10,0,0,0,114,34,0,0,0,220,2,0,
+ 0,115,4,0,0,0,0,1,6,1,122,33,95,90,105,112,
73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
- 97,100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,
- 0,9,0,0,0,99,0,0,0,115,186,0,0,0,100,1,
- 100,2,108,0,109,1,125,1,1,0,124,1,124,0,106,2,
- 160,3,124,0,106,4,161,1,131,1,125,2,124,2,160,5,
- 124,0,106,2,106,6,161,1,125,3,124,3,106,7,100,3,
- 107,2,115,58,116,8,130,1,124,3,106,9,125,4,116,10,
- 131,0,125,5,124,0,106,2,106,11,68,0,93,102,125,6,
- 122,18,124,1,124,6,131,1,160,5,124,4,161,1,125,7,
- 87,0,110,24,4,0,116,12,107,10,114,124,1,0,1,0,
- 1,0,89,0,113,78,89,0,110,2,88,0,124,7,106,9,
- 106,7,125,8,116,13,124,8,131,1,100,1,107,2,114,156,
- 124,7,106,7,86,0,1,0,113,78,124,8,124,5,107,7,
- 114,78,124,5,160,14,124,8,161,1,1,0,124,8,86,0,
- 1,0,113,78,100,0,83,0,41,4,78,114,0,0,0,0,
- 41,1,218,4,80,97,116,104,114,60,0,0,0,41,15,90,
- 7,112,97,116,104,108,105,98,114,184,0,0,0,114,4,0,
- 0,0,114,56,0,0,0,114,38,0,0,0,90,11,114,101,
- 108,97,116,105,118,101,95,116,111,114,29,0,0,0,114,59,
- 0,0,0,114,175,0,0,0,90,6,112,97,114,101,110,116,
- 218,3,115,101,116,114,28,0,0,0,114,23,0,0,0,114,
- 51,0,0,0,218,3,97,100,100,41,9,114,32,0,0,0,
- 114,184,0,0,0,90,13,102,117,108,108,110,97,109,101,95,
- 112,97,116,104,90,13,114,101,108,97,116,105,118,101,95,112,
- 97,116,104,90,12,112,97,99,107,97,103,101,95,112,97,116,
- 104,90,12,115,117,98,100,105,114,115,95,115,101,101,110,218,
- 8,102,105,108,101,110,97,109,101,90,8,114,101,108,97,116,
- 105,118,101,90,11,112,97,114,101,110,116,95,110,97,109,101,
- 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,
- 8,99,111,110,116,101,110,116,115,250,2,0,0,115,34,0,
- 0,0,0,8,12,1,18,1,14,3,14,1,6,1,6,1,
- 12,1,2,1,18,1,14,1,10,5,8,1,12,1,10,1,
- 8,1,10,1,122,33,95,90,105,112,73,109,112,111,114,116,
- 82,101,115,111,117,114,99,101,82,101,97,100,101,114,46,99,
- 111,110,116,101,110,116,115,78,41,10,114,6,0,0,0,114,
- 7,0,0,0,114,8,0,0,0,114,84,0,0,0,114,81,
- 0,0,0,114,34,0,0,0,114,181,0,0,0,114,182,0,
- 0,0,114,183,0,0,0,114,188,0,0,0,114,9,0,0,
+ 97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,5,0,0,0,8,0,
+ 0,0,67,0,0,0,115,90,0,0,0,124,0,106,0,160,
+ 1,100,1,100,2,161,2,125,2,124,2,155,0,100,2,124,
+ 1,155,0,157,3,125,3,100,3,100,4,108,2,109,3,125,
+ 4,1,0,122,18,124,4,124,0,106,4,160,5,124,3,161,
+ 1,131,1,87,0,83,0,4,0,116,6,121,84,1,0,1,
+ 0,1,0,116,7,124,3,131,1,130,1,89,0,110,2,48,
+ 0,100,0,83,0,41,5,78,114,85,0,0,0,114,109,0,
+ 0,0,114,0,0,0,0,41,1,218,7,66,121,116,101,115,
+ 73,79,41,8,114,38,0,0,0,114,19,0,0,0,90,2,
+ 105,111,114,176,0,0,0,114,4,0,0,0,114,55,0,0,
+ 0,114,22,0,0,0,218,17,70,105,108,101,78,111,116,70,
+ 111,117,110,100,69,114,114,111,114,41,5,114,32,0,0,0,
+ 218,8,114,101,115,111,117,114,99,101,218,16,102,117,108,108,
+ 110,97,109,101,95,97,115,95,112,97,116,104,114,13,0,0,
+ 0,114,176,0,0,0,114,9,0,0,0,114,9,0,0,0,
+ 114,10,0,0,0,218,13,111,112,101,110,95,114,101,115,111,
+ 117,114,99,101,224,2,0,0,115,14,0,0,0,0,1,14,
+ 1,14,1,12,1,2,1,18,1,12,1,122,38,95,90,105,
+ 112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,
+ 101,97,100,101,114,46,111,112,101,110,95,114,101,115,111,117,
+ 114,99,101,99,2,0,0,0,0,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,0,83,0,114,88,0,0,0,41,1,
+ 114,177,0,0,0,41,2,114,32,0,0,0,114,178,0,0,
0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 114,80,0,0,0,212,2,0,0,115,14,0,0,0,8,1,
- 4,5,4,2,8,4,8,9,8,6,8,11,114,80,0,0,
- 0,41,45,114,84,0,0,0,90,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,21,0,0,0,114,1,0,0,0,114,2,
- 0,0,0,90,17,95,102,114,111,122,101,110,95,105,109,112,
- 111,114,116,108,105,98,114,76,0,0,0,114,148,0,0,0,
- 114,110,0,0,0,114,152,0,0,0,114,67,0,0,0,114,
- 131,0,0,0,90,7,95,95,97,108,108,95,95,114,20,0,
- 0,0,90,15,112,97,116,104,95,115,101,112,97,114,97,116,
- 111,114,115,114,18,0,0,0,114,75,0,0,0,114,3,0,
- 0,0,114,25,0,0,0,218,4,116,121,112,101,114,70,0,
- 0,0,114,113,0,0,0,114,115,0,0,0,114,117,0,0,
- 0,114,4,0,0,0,114,89,0,0,0,114,36,0,0,0,
- 114,37,0,0,0,114,35,0,0,0,114,27,0,0,0,114,
- 122,0,0,0,114,142,0,0,0,114,144,0,0,0,114,52,
- 0,0,0,114,147,0,0,0,114,155,0,0,0,218,8,95,
- 95,99,111,100,101,95,95,114,153,0,0,0,114,159,0,0,
- 0,114,161,0,0,0,114,169,0,0,0,114,151,0,0,0,
- 114,149,0,0,0,114,44,0,0,0,114,80,0,0,0,114,
- 9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,
- 0,115,88,0,0,0,4,16,8,1,16,1,8,1,8,1,
- 8,1,8,1,8,1,8,2,8,3,6,1,14,3,16,4,
- 4,2,8,2,4,1,4,1,4,2,14,127,0,127,0,1,
- 12,1,12,1,2,1,2,252,4,9,8,4,8,9,8,31,
- 8,126,2,254,2,29,4,5,8,21,8,46,8,10,8,46,
- 10,5,8,7,8,6,8,13,8,19,8,15,8,26,
+ 218,13,114,101,115,111,117,114,99,101,95,112,97,116,104,233,
+ 2,0,0,115,2,0,0,0,0,4,122,38,95,90,105,112,
+ 73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,
+ 97,100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,
+ 116,104,99,2,0,0,0,0,0,0,0,0,0,0,0,4,
+ 0,0,0,8,0,0,0,67,0,0,0,115,70,0,0,0,
+ 124,0,106,0,160,1,100,1,100,2,161,2,125,2,124,2,
+ 155,0,100,2,124,1,155,0,157,3,125,3,122,16,124,0,
+ 106,2,160,3,124,3,161,1,1,0,87,0,110,20,4,0,
+ 116,4,121,64,1,0,1,0,1,0,89,0,100,3,83,0,
+ 48,0,100,4,83,0,41,5,78,114,85,0,0,0,114,109,
+ 0,0,0,70,84,41,5,114,38,0,0,0,114,19,0,0,
+ 0,114,4,0,0,0,114,55,0,0,0,114,22,0,0,0,
+ 41,4,114,32,0,0,0,114,59,0,0,0,114,179,0,0,
+ 0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,0,
+ 114,10,0,0,0,218,11,105,115,95,114,101,115,111,117,114,
+ 99,101,239,2,0,0,115,14,0,0,0,0,3,14,1,14,
+ 1,2,1,16,1,12,1,8,1,122,36,95,90,105,112,73,
+ 109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,97,
+ 100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,
+ 9,0,0,0,99,0,0,0,115,184,0,0,0,100,1,100,
+ 2,108,0,109,1,125,1,1,0,124,1,124,0,106,2,160,
+ 3,124,0,106,4,161,1,131,1,125,2,124,2,160,5,124,
+ 0,106,2,106,6,161,1,125,3,124,3,106,7,100,3,107,
+ 2,115,58,74,0,130,1,124,3,106,8,125,4,116,9,131,
+ 0,125,5,124,0,106,2,106,10,68,0,93,100,125,6,122,
+ 18,124,1,124,6,131,1,160,5,124,4,161,1,125,7,87,
+ 0,110,22,4,0,116,11,121,122,1,0,1,0,1,0,89,
+ 0,113,78,89,0,110,2,48,0,124,7,106,8,106,7,125,
+ 8,116,12,124,8,131,1,100,1,107,2,114,154,124,7,106,
+ 7,86,0,1,0,113,78,124,8,124,5,118,1,114,78,124,
+ 5,160,13,124,8,161,1,1,0,124,8,86,0,1,0,113,
+ 78,100,0,83,0,41,4,78,114,0,0,0,0,41,1,218,
+ 4,80,97,116,104,114,60,0,0,0,41,14,90,7,112,97,
+ 116,104,108,105,98,114,183,0,0,0,114,4,0,0,0,114,
+ 56,0,0,0,114,38,0,0,0,90,11,114,101,108,97,116,
+ 105,118,101,95,116,111,114,29,0,0,0,114,59,0,0,0,
+ 90,6,112,97,114,101,110,116,218,3,115,101,116,114,28,0,
+ 0,0,114,23,0,0,0,114,51,0,0,0,218,3,97,100,
+ 100,41,9,114,32,0,0,0,114,183,0,0,0,90,13,102,
+ 117,108,108,110,97,109,101,95,112,97,116,104,90,13,114,101,
+ 108,97,116,105,118,101,95,112,97,116,104,90,12,112,97,99,
+ 107,97,103,101,95,112,97,116,104,90,12,115,117,98,100,105,
+ 114,115,95,115,101,101,110,218,8,102,105,108,101,110,97,109,
+ 101,90,8,114,101,108,97,116,105,118,101,90,11,112,97,114,
+ 101,110,116,95,110,97,109,101,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,218,8,99,111,110,116,101,110,116,
+ 115,250,2,0,0,115,34,0,0,0,0,8,12,1,18,1,
+ 14,3,14,1,6,1,6,1,12,1,2,1,18,1,12,1,
+ 10,5,8,1,12,1,10,1,8,1,10,1,122,33,95,90,
+ 105,112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,
+ 82,101,97,100,101,114,46,99,111,110,116,101,110,116,115,78,
+ 41,10,114,6,0,0,0,114,7,0,0,0,114,8,0,0,
+ 0,114,84,0,0,0,114,81,0,0,0,114,34,0,0,0,
+ 114,180,0,0,0,114,181,0,0,0,114,182,0,0,0,114,
+ 187,0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,
+ 0,0,0,114,10,0,0,0,114,80,0,0,0,212,2,0,
+ 0,115,14,0,0,0,8,1,4,5,4,2,8,4,8,9,
+ 8,6,8,11,114,80,0,0,0,41,45,114,84,0,0,0,
+ 90,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,21,0,0,
+ 0,114,1,0,0,0,114,2,0,0,0,90,17,95,102,114,
+ 111,122,101,110,95,105,109,112,111,114,116,108,105,98,114,76,
+ 0,0,0,114,148,0,0,0,114,110,0,0,0,114,152,0,
+ 0,0,114,67,0,0,0,114,131,0,0,0,90,7,95,95,
+ 97,108,108,95,95,114,20,0,0,0,90,15,112,97,116,104,
+ 95,115,101,112,97,114,97,116,111,114,115,114,18,0,0,0,
+ 114,75,0,0,0,114,3,0,0,0,114,25,0,0,0,218,
+ 4,116,121,112,101,114,70,0,0,0,114,113,0,0,0,114,
+ 115,0,0,0,114,117,0,0,0,114,4,0,0,0,114,89,
+ 0,0,0,114,36,0,0,0,114,37,0,0,0,114,35,0,
+ 0,0,114,27,0,0,0,114,122,0,0,0,114,142,0,0,
+ 0,114,144,0,0,0,114,52,0,0,0,114,147,0,0,0,
+ 114,155,0,0,0,218,8,95,95,99,111,100,101,95,95,114,
+ 153,0,0,0,114,159,0,0,0,114,161,0,0,0,114,169,
+ 0,0,0,114,151,0,0,0,114,149,0,0,0,114,44,0,
+ 0,0,114,80,0,0,0,114,9,0,0,0,114,9,0,0,
+ 0,114,9,0,0,0,114,10,0,0,0,218,8,60,109,111,
+ 100,117,108,101,62,1,0,0,0,115,88,0,0,0,4,16,
+ 8,1,16,1,8,1,8,1,8,1,8,1,8,1,8,2,
+ 8,3,6,1,14,3,16,4,4,2,8,2,4,1,4,1,
+ 4,2,14,127,0,127,0,1,12,1,12,1,2,1,2,252,
+ 4,9,8,4,8,9,8,31,8,126,2,254,2,29,4,5,
+ 8,21,8,46,8,10,8,46,10,5,8,7,8,6,8,13,
+ 8,19,8,15,8,26,
};
diff --git a/Python/initconfig.c b/Python/initconfig.c
index a930b5d..3caed38 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -1,27 +1,33 @@
#include "Python.h"
-#include "osdefs.h" /* DELIM */
-#include "pycore_fileutils.h"
-#include "pycore_getopt.h"
-#include "pycore_initconfig.h"
-#include "pycore_pathconfig.h"
-#include "pycore_pyerrors.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h" /* _PyRuntime */
-#include <locale.h> /* setlocale() */
+#include "pycore_fileutils.h" // _Py_HasFileSystemDefaultEncodeErrors
+#include "pycore_getopt.h" // _PyOS_GetOpt()
+#include "pycore_initconfig.h" // _PyStatus_OK()
+#include "pycore_interp.h" // _PyInterpreterState.runtime
+#include "pycore_pathconfig.h" // _Py_path_config
+#include "pycore_pyerrors.h" // _PyErr_Fetch()
+#include "pycore_pylifecycle.h" // _Py_PreInitializeFromConfig()
+#include "pycore_pymem.h" // _PyMem_SetDefaultAllocator()
+#include "pycore_pystate.h" // _PyThreadState_GET()
+
+#include "osdefs.h" // DELIM
+#include <locale.h> // setlocale()
#ifdef HAVE_LANGINFO_H
-# include <langinfo.h> /* nl_langinfo(CODESET) */
+# include <langinfo.h> // nl_langinfo(CODESET)
#endif
#if defined(MS_WINDOWS) || defined(__CYGWIN__)
-# include <windows.h> /* GetACP() */
+# include <windows.h> // GetACP()
# ifdef HAVE_IO_H
# include <io.h>
# endif
# ifdef HAVE_FCNTL_H
-# include <fcntl.h> /* O_BINARY */
+# include <fcntl.h> // O_BINARY
# endif
#endif
+#ifndef PLATLIBDIR
+# error "PLATLIBDIR macro must be defined"
+#endif
+
/* --- Command line options --------------------------------------- */
@@ -36,7 +42,8 @@
and comparing bytes/bytearray with str. (-bb: issue errors)\n\
-B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x\n\
-c cmd : program passed in as string (terminates option list)\n\
--d : debug output from parser; also PYTHONDEBUG=x\n\
+-d : turn on parser debugging output (for experts only, only works on\n\
+ debug builds); also PYTHONDEBUG=x\n\
-E : ignore PYTHON* environment variables (such as PYTHONPATH)\n\
-h : print this help message and exit (also --help)\n\
";
@@ -66,6 +73,7 @@
-X opt : set implementation-specific option. The following options are available:\n\
\n\
-X faulthandler: enable faulthandler\n\
+ -X oldparser: enable the traditional LL(1) parser; also PYTHONOLDPARSER\n\
-X showrefcount: output the total reference count and number of used\n\
memory blocks when the program finishes or after each statement in the\n\
interactive interpreter. This only works on debug builds\n\
@@ -73,14 +81,11 @@
tracemalloc module. By default, only the most recent frame is stored in a\n\
traceback of a trace. Use -X tracemalloc=NFRAME to start tracing with a\n\
traceback limit of NFRAME frames\n\
- -X showalloccount: output the total count of allocated objects for each\n\
- type when the program finishes. This only works when Python was built with\n\
- COUNT_ALLOCS defined\n\
-X importtime: show how long each import takes. It shows module name,\n\
cumulative time (including nested imports) and self time (excluding\n\
nested imports). Note that its output may be broken in multi-threaded\n\
application. Typical usage is python3 -X importtime -c 'import asyncio'\n\
- -X dev: enable CPython’s “development mode”, introducing additional runtime\n\
+ -X dev: enable CPython's \"development mode\", introducing additional runtime\n\
checks which are too expensive to be enabled by default. Effect of the\n\
developer mode:\n\
* Add default warning filter, as -W default\n\
@@ -110,6 +115,7 @@
static const char usage_5[] =
"PYTHONHOME : alternate <prefix> directory (or <prefix>%lc<exec_prefix>).\n"
" The default module search path uses %s.\n"
+"PYTHONPLATLIBDIR : override sys.platlibdir.\n"
"PYTHONCASEOK : ignore case in 'import' statements (Windows).\n"
"PYTHONUTF8: if set to 1, enable the UTF-8 mode.\n"
"PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n"
@@ -543,8 +549,6 @@
}
-/* Make the *original* argc/argv available to other modules.
- This is rare, but it is needed by the secureware extension. */
void
Py_GetArgcArgv(int *argc, wchar_t ***argv)
{
@@ -588,6 +592,7 @@
CLEAR(config->base_prefix);
CLEAR(config->exec_prefix);
CLEAR(config->base_exec_prefix);
+ CLEAR(config->platlibdir);
CLEAR(config->filesystem_encoding);
CLEAR(config->filesystem_errors);
@@ -597,6 +602,8 @@
CLEAR(config->run_module);
CLEAR(config->run_filename);
CLEAR(config->check_hash_pycs_mode);
+
+ _PyWideStringList_Clear(&config->_orig_argv);
#undef CLEAR
}
@@ -632,9 +639,11 @@
config->check_hash_pycs_mode = NULL;
config->pathconfig_warnings = -1;
config->_init_main = 1;
+ config->_isolated_interpreter = 0;
#ifdef MS_WINDOWS
config->legacy_windows_stdio = -1;
#endif
+ config->_use_peg_parser = 1;
}
@@ -792,6 +801,7 @@
COPY_ATTR(isolated);
COPY_ATTR(use_environment);
COPY_ATTR(dev_mode);
+ COPY_ATTR(_use_peg_parser);
COPY_ATTR(install_signal_handlers);
COPY_ATTR(use_hash_seed);
COPY_ATTR(hash_seed);
@@ -800,7 +810,6 @@
COPY_ATTR(tracemalloc);
COPY_ATTR(import_time);
COPY_ATTR(show_ref_count);
- COPY_ATTR(show_alloc_count);
COPY_ATTR(dump_refs);
COPY_ATTR(malloc_stats);
@@ -822,6 +831,7 @@
COPY_WSTR_ATTR(base_prefix);
COPY_WSTR_ATTR(exec_prefix);
COPY_WSTR_ATTR(base_exec_prefix);
+ COPY_WSTR_ATTR(platlibdir);
COPY_ATTR(site_import);
COPY_ATTR(bytes_warning);
@@ -849,6 +859,8 @@
COPY_WSTR_ATTR(check_hash_pycs_mode);
COPY_ATTR(pathconfig_warnings);
COPY_ATTR(_init_main);
+ COPY_ATTR(_isolated_interpreter);
+ COPY_WSTRLIST(_orig_argv);
#undef COPY_ATTR
#undef COPY_WSTR_ATTR
@@ -896,6 +908,7 @@
SET_ITEM_INT(isolated);
SET_ITEM_INT(use_environment);
SET_ITEM_INT(dev_mode);
+ SET_ITEM_INT(_use_peg_parser);
SET_ITEM_INT(install_signal_handlers);
SET_ITEM_INT(use_hash_seed);
SET_ITEM_UINT(hash_seed);
@@ -903,7 +916,6 @@
SET_ITEM_INT(tracemalloc);
SET_ITEM_INT(import_time);
SET_ITEM_INT(show_ref_count);
- SET_ITEM_INT(show_alloc_count);
SET_ITEM_INT(dump_refs);
SET_ITEM_INT(malloc_stats);
SET_ITEM_WSTR(filesystem_encoding);
@@ -923,6 +935,7 @@
SET_ITEM_WSTR(base_prefix);
SET_ITEM_WSTR(exec_prefix);
SET_ITEM_WSTR(base_exec_prefix);
+ SET_ITEM_WSTR(platlibdir);
SET_ITEM_INT(site_import);
SET_ITEM_INT(bytes_warning);
SET_ITEM_INT(inspect);
@@ -948,6 +961,8 @@
SET_ITEM_WSTR(check_hash_pycs_mode);
SET_ITEM_INT(pathconfig_warnings);
SET_ITEM_INT(_init_main);
+ SET_ITEM_INT(_isolated_interpreter);
+ SET_ITEM_WSTRLIST(_orig_argv);
return dict;
@@ -1119,7 +1134,7 @@
or rather, to work around Apple's overly strict requirements of
the process name. However, we still need a usable sys.executable,
so the actual executable path is passed in an environment variable.
- See Lib/plat-mac/bundlebuiler.py for details about the bootstrap
+ See Lib/plat-mac/bundlebuilder.py for details about the bootstrap
script. */
const char *p = config_get_env(config, "PYTHONEXECUTABLE");
if (p != NULL) {
@@ -1332,6 +1347,14 @@
}
}
+ if(config->platlibdir == NULL) {
+ status = CONFIG_GET_ENV_DUP(config, &config->platlibdir,
+ L"PYTHONPLATLIBDIR", "PYTHONPLATLIBDIR");
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
+
if (config->use_hash_seed < 0) {
status = config_init_hash_seed(config);
if (_PyStatus_EXCEPTION(status)) {
@@ -1431,6 +1454,11 @@
config->import_time = 1;
}
+ if (config_get_env(config, "PYTHONOLDPARSER")
+ || config_get_xoption(config, L"oldparser")) {
+ config->_use_peg_parser = 0;
+ }
+
PyStatus status;
if (config->tracemalloc < 0) {
status = config_init_tracemalloc(config);
@@ -1450,7 +1478,7 @@
static const wchar_t *
-config_get_stdio_errors(const PyConfig *config)
+config_get_stdio_errors(void)
{
#ifndef MS_WINDOWS
const char *loc = setlocale(LC_CTYPE, NULL);
@@ -1606,7 +1634,7 @@
}
}
if (config->stdio_errors == NULL) {
- const wchar_t *errors = config_get_stdio_errors(config);
+ const wchar_t *errors = config_get_stdio_errors();
assert(errors != NULL);
status = PyConfig_SetString(config, &config->stdio_errors, errors);
@@ -1702,9 +1730,6 @@
if (config_get_xoption(config, L"showrefcount")) {
config->show_ref_count = 1;
}
- if (config_get_xoption(config, L"showalloccount")) {
- config->show_alloc_count = 1;
- }
status = config_read_complex_options(config);
if (_PyStatus_EXCEPTION(status)) {
@@ -1725,6 +1750,14 @@
}
}
+ if(config->platlibdir == NULL) {
+ status = CONFIG_SET_BYTES_STR(config, &config->platlibdir, PLATLIBDIR,
+ "PLATLIBDIR macro");
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
+
if (config->_install_importlib) {
status = _PyConfig_InitPathConfig(config);
if (_PyStatus_EXCEPTION(status)) {
@@ -1826,7 +1859,7 @@
- set Py_xxx global configuration variables
- initialize C standard streams (stdin, stdout, stderr) */
-void
+PyStatus
_PyConfig_Write(const PyConfig *config, _PyRuntimeState *runtime)
{
config_set_global_vars(config);
@@ -1840,6 +1873,13 @@
preconfig->isolated = config->isolated;
preconfig->use_environment = config->use_environment;
preconfig->dev_mode = config->dev_mode;
+
+ if (_Py_SetArgcArgv(config->_orig_argv.length,
+ config->_orig_argv.items) < 0)
+ {
+ return _PyStatus_NO_MEMORY();
+ }
+ return _PyStatus_OK();
}
@@ -2241,6 +2281,7 @@
/* Force sys.argv[0] = '-m'*/
arg0 = L"-m";
}
+
if (arg0 != NULL) {
arg0 = _PyMem_RawWcsdup(arg0);
if (arg0 == NULL) {
@@ -2291,6 +2332,37 @@
}
+/* Get run_filename absolute path */
+static PyStatus
+config_run_filename_abspath(PyConfig *config)
+{
+ if (!config->run_filename) {
+ return _PyStatus_OK();
+ }
+
+#ifndef MS_WINDOWS
+ if (_Py_isabs(config->run_filename)) {
+ /* path is already absolute */
+ return _PyStatus_OK();
+ }
+#endif
+
+ wchar_t *abs_filename;
+ if (_Py_abspath(config->run_filename, &abs_filename) < 0) {
+ /* failed to get the absolute path of the command line filename:
+ ignore the error, keep the relative path */
+ return _PyStatus_OK();
+ }
+ if (abs_filename == NULL) {
+ return _PyStatus_NO_MEMORY();
+ }
+
+ PyMem_RawFree(config->run_filename);
+ config->run_filename = abs_filename;
+ return _PyStatus_OK();
+}
+
+
static PyStatus
config_read_cmdline(PyConfig *config)
{
@@ -2317,11 +2389,22 @@
goto done;
}
+ status = config_run_filename_abspath(config);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto done;
+ }
+
status = config_update_argv(config, opt_index);
if (_PyStatus_EXCEPTION(status)) {
goto done;
}
}
+ else {
+ status = config_run_filename_abspath(config);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto done;
+ }
+ }
if (config->use_environment) {
status = config_init_env_warnoptions(config, &env_warnoptions);
@@ -2420,7 +2503,6 @@
PyConfig_Read(PyConfig *config)
{
PyStatus status;
- PyWideStringList orig_argv = _PyWideStringList_INIT;
status = _Py_PreInitializeFromConfig(config, NULL);
if (_PyStatus_EXCEPTION(status)) {
@@ -2429,8 +2511,13 @@
config_get_global_vars(config);
- if (_PyWideStringList_Copy(&orig_argv, &config->argv) < 0) {
- return _PyStatus_NO_MEMORY();
+ if (config->_orig_argv.length == 0
+ && !(config->argv.length == 1
+ && wcscmp(config->argv.items[0], L"") == 0))
+ {
+ if (_PyWideStringList_Copy(&config->_orig_argv, &config->argv) < 0) {
+ return _PyStatus_NO_MEMORY();
+ }
}
_PyPreCmdline precmdline = _PyPreCmdline_INIT;
@@ -2461,15 +2548,11 @@
goto done;
}
- if (_Py_SetArgcArgv(orig_argv.length, orig_argv.items) < 0) {
- status = _PyStatus_NO_MEMORY();
- goto done;
- }
-
/* Check config consistency */
assert(config->isolated >= 0);
assert(config->use_environment >= 0);
assert(config->dev_mode >= 0);
+ assert(config->_use_peg_parser >= 0);
assert(config->install_signal_handlers >= 0);
assert(config->use_hash_seed >= 0);
assert(config->faulthandler >= 0);
@@ -2504,6 +2587,7 @@
assert(config->exec_prefix != NULL);
assert(config->base_exec_prefix != NULL);
}
+ assert(config->platlibdir != NULL);
assert(config->filesystem_encoding != NULL);
assert(config->filesystem_errors != NULL);
assert(config->stdio_encoding != NULL);
@@ -2516,11 +2600,11 @@
assert(config->check_hash_pycs_mode != NULL);
assert(config->_install_importlib >= 0);
assert(config->pathconfig_warnings >= 0);
+ assert(_PyWideStringList_CheckConsistency(&config->_orig_argv));
status = _PyStatus_OK();
done:
- _PyWideStringList_Clear(&orig_argv);
_PyPreCmdline_Clear(&precmdline);
return status;
}
@@ -2548,8 +2632,8 @@
Py_CLEAR(dict);
/* pre config */
- PyInterpreterState *interp = _PyInterpreterState_Get();
- const PyPreConfig *pre_config = &_PyRuntime.preconfig;
+ PyThreadState *tstate = _PyThreadState_GET();
+ const PyPreConfig *pre_config = &tstate->interp->runtime->preconfig;
dict = _PyPreConfig_AsDict(pre_config);
if (dict == NULL) {
goto error;
@@ -2560,7 +2644,7 @@
Py_CLEAR(dict);
/* core config */
- const PyConfig *config = &interp->config;
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
dict = config_as_dict(config);
if (dict == NULL) {
goto error;
@@ -2589,11 +2673,11 @@
PySys_WriteStderr("'");
for (; *str != L'\0'; str++) {
- wchar_t ch = *str;
+ unsigned int ch = (unsigned int)*str;
if (ch == L'\'') {
PySys_WriteStderr("\\'");
} else if (0x20 <= ch && ch < 0x7f) {
- PySys_WriteStderr("%lc", ch);
+ PySys_WriteStderr("%c", ch);
}
else if (ch <= 0xff) {
PySys_WriteStderr("\\x%02x", ch);
@@ -2627,7 +2711,7 @@
PySys_WriteStderr("\n"); \
} while (0)
- PyConfig *config = &tstate->interp->config;
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
DUMP_CONFIG("PYTHONHOME", home);
DUMP_CONFIG("PYTHONPATH", pythonpath_env);
DUMP_CONFIG("program name", program_name);
@@ -2654,6 +2738,7 @@
DUMP_SYS(_base_executable);
DUMP_SYS(base_prefix);
DUMP_SYS(base_exec_prefix);
+ DUMP_SYS(platlibdir);
DUMP_SYS(executable);
DUMP_SYS(prefix);
DUMP_SYS(exec_prefix);
diff --git a/Python/marshal.c b/Python/marshal.c
index a9ba7a4..c4538bd 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -12,7 +12,7 @@
#include "longintrepr.h"
#include "code.h"
#include "marshal.h"
-#include "../Modules/hashtable.h"
+#include "pycore_hashtable.h"
/*[clinic input]
module marshal
@@ -83,7 +83,7 @@
int depth;
PyObject *str;
char *ptr;
- char *end;
+ const char *end;
char *buf;
_Py_hashtable_t *hashtable;
int version;
@@ -114,7 +114,7 @@
}
assert(p->str != NULL);
pos = p->ptr - p->buf;
- size = PyBytes_Size(p->str);
+ size = PyBytes_GET_SIZE(p->str);
if (size > 16*1024*1024)
delta = (size >> 3); /* 12.5% overallocation */
else
@@ -126,7 +126,7 @@
}
size += delta;
if (_PyBytes_Resize(&p->str, size) != 0) {
- p->ptr = p->buf = p->end = NULL;
+ p->end = p->ptr = p->buf = NULL;
return 0;
}
else {
@@ -138,7 +138,7 @@
}
static void
-w_string(const char *s, Py_ssize_t n, WFILE *p)
+w_string(const void *s, Py_ssize_t n, WFILE *p)
{
Py_ssize_t m;
if (!n || p->ptr == NULL)
@@ -194,14 +194,14 @@
#endif
static void
-w_pstring(const char *s, Py_ssize_t n, WFILE *p)
+w_pstring(const void *s, Py_ssize_t n, WFILE *p)
{
W_SIZE(n, p);
w_string(s, n, p);
}
static void
-w_short_pstring(const char *s, Py_ssize_t n, WFILE *p)
+w_short_pstring(const void *s, Py_ssize_t n, WFILE *p)
{
w_byte(Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char), p);
w_string(s, n, p);
@@ -274,21 +274,18 @@
p->error = WFERR_UNMARSHALLABLE;
return;
}
- w_string((const char *)buf, 8, p);
+ w_string(buf, 8, p);
}
static void
w_float_str(double v, WFILE *p)
{
- int n;
char *buf = PyOS_double_to_string(v, 'g', 17, 0, NULL);
if (!buf) {
p->error = WFERR_NOMEMORY;
return;
}
- n = (int)strlen(buf);
- w_byte(n, p);
- w_string(buf, n, p);
+ w_short_pstring(buf, strlen(buf), p);
PyMem_Free(buf);
}
@@ -305,17 +302,17 @@
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, entry, w);
+ w = (int)(uintptr_t)entry->value;
/* we don't store "long" indices in the dict */
assert(0 <= w && w <= 0x7fffffff);
w_byte(TYPE_REF, p);
w_long(w, p);
return 1;
} else {
- size_t s = p->hashtable->entries;
+ size_t s = p->hashtable->nentries;
/* we don't support long indices */
if (s >= 0x7fffffff) {
PyErr_SetString(PyExc_ValueError, "too many objects");
@@ -323,7 +320,7 @@
}
w = (int)s;
Py_INCREF(v);
- if (_Py_HASHTABLE_SET(p->hashtable, v, w) < 0) {
+ if (_Py_hashtable_set(p->hashtable, v, (void *)(uintptr_t)w) < 0) {
Py_DECREF(v);
goto err;
}
@@ -378,11 +375,10 @@
Py_ssize_t i, n;
if (PyLong_CheckExact(v)) {
- long x = PyLong_AsLong(v);
- if ((x == -1) && PyErr_Occurred()) {
- PyLongObject *ob = (PyLongObject *)v;
- PyErr_Clear();
- w_PyLong(ob, flag, p);
+ int overflow;
+ long x = PyLong_AsLongAndOverflow(v, &overflow);
+ if (overflow) {
+ w_PyLong((PyLongObject *)v, flag, p);
}
else {
#if SIZEOF_LONG > 4
@@ -433,7 +429,7 @@
W_TYPE(TYPE_SHORT_ASCII_INTERNED, p);
else
W_TYPE(TYPE_SHORT_ASCII, p);
- w_short_pstring((char *) PyUnicode_1BYTE_DATA(v),
+ w_short_pstring(PyUnicode_1BYTE_DATA(v),
PyUnicode_GET_LENGTH(v), p);
}
else {
@@ -441,7 +437,7 @@
W_TYPE(TYPE_ASCII_INTERNED, p);
else
W_TYPE(TYPE_ASCII, p);
- w_pstring((char *) PyUnicode_1BYTE_DATA(v),
+ w_pstring(PyUnicode_1BYTE_DATA(v),
PyUnicode_GET_LENGTH(v), p);
}
}
@@ -462,7 +458,7 @@
}
}
else if (PyTuple_CheckExact(v)) {
- n = PyTuple_Size(v);
+ n = PyTuple_GET_SIZE(v);
if (p->version >= 4 && n < 256) {
W_TYPE(TYPE_SMALL_TUPLE, p);
w_byte((unsigned char)n, p);
@@ -496,34 +492,18 @@
w_object((PyObject *)NULL, p);
}
else if (PyAnySet_CheckExact(v)) {
- PyObject *value, *it;
+ PyObject *value;
+ Py_ssize_t pos = 0;
+ Py_hash_t hash;
- if (PyObject_TypeCheck(v, &PySet_Type))
- W_TYPE(TYPE_SET, p);
- else
+ if (PyFrozenSet_CheckExact(v))
W_TYPE(TYPE_FROZENSET, p);
- n = PyObject_Size(v);
- if (n == -1) {
- p->depth--;
- p->error = WFERR_UNMARSHALLABLE;
- return;
- }
+ else
+ W_TYPE(TYPE_SET, p);
+ n = PySet_GET_SIZE(v);
W_SIZE(n, p);
- it = PyObject_GetIter(v);
- if (it == NULL) {
- p->depth--;
- p->error = WFERR_UNMARSHALLABLE;
- return;
- }
- while ((value = PyIter_Next(it)) != NULL) {
+ while (_PySet_NextEntry(v, &pos, &value, &hash)) {
w_object(value, p);
- Py_DECREF(value);
- }
- Py_DECREF(it);
- if (PyErr_Occurred()) {
- p->depth--;
- p->error = WFERR_UNMARSHALLABLE;
- return;
}
}
else if (PyCode_Check(v)) {
@@ -565,13 +545,20 @@
}
}
+static void
+w_decref_entry(void *key)
+{
+ PyObject *entry_key = (PyObject *)key;
+ Py_XDECREF(entry_key);
+}
+
static int
w_init_refs(WFILE *wf, int version)
{
if (version >= 3) {
- wf->hashtable = _Py_hashtable_new(sizeof(PyObject *), sizeof(int),
- _Py_hashtable_hash_ptr,
- _Py_hashtable_compare_direct);
+ wf->hashtable = _Py_hashtable_new_full(_Py_hashtable_hash_ptr,
+ _Py_hashtable_compare_direct,
+ w_decref_entry, NULL, NULL);
if (wf->hashtable == NULL) {
PyErr_NoMemory();
return -1;
@@ -580,22 +567,10 @@
return 0;
}
-static int
-w_decref_entry(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry,
- void *Py_UNUSED(data))
-{
- PyObject *entry_key;
-
- _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, entry_key);
- Py_XDECREF(entry_key);
- return 0;
-}
-
static void
w_clear_refs(WFILE *wf)
{
if (wf->hashtable != NULL) {
- _Py_hashtable_foreach(wf->hashtable, w_decref_entry, NULL);
_Py_hashtable_destroy(wf->hashtable);
}
}
@@ -638,8 +613,8 @@
FILE *fp;
int depth;
PyObject *readable; /* Stream-like object being read from */
- char *ptr;
- char *end;
+ const char *ptr;
+ const char *end;
char *buf;
Py_ssize_t buf_size;
PyObject *refs; /* a list */
@@ -652,7 +627,7 @@
if (p->ptr != NULL) {
/* Fast path for loads() */
- char *res = p->ptr;
+ const char *res = p->ptr;
Py_ssize_t left = p->end - p->ptr;
if (left < n) {
PyErr_SetString(PyExc_EOFError,
@@ -813,7 +788,7 @@
if (ob == NULL)
return NULL;
- Py_SIZE(ob) = n > 0 ? size : -size;
+ Py_SET_SIZE(ob, n > 0 ? size : -size);
for (i = 0; i < size-1; i++) {
d = 0;
@@ -1570,8 +1545,8 @@
PyObject *result;
rf.fp = NULL;
rf.readable = NULL;
- rf.ptr = (char *)str;
- rf.end = (char *)str + len;
+ rf.ptr = str;
+ rf.end = str + len;
rf.buf = NULL;
rf.depth = 0;
rf.refs = PyList_New(0);
@@ -1593,8 +1568,8 @@
wf.str = PyBytes_FromStringAndSize((char *)NULL, 50);
if (wf.str == NULL)
return NULL;
- wf.ptr = wf.buf = PyBytes_AS_STRING((PyBytesObject *)wf.str);
- wf.end = wf.ptr + PyBytes_Size(wf.str);
+ wf.ptr = wf.buf = PyBytes_AS_STRING(wf.str);
+ wf.end = wf.ptr + PyBytes_GET_SIZE(wf.str);
wf.error = WFERR_OK;
wf.version = version;
if (w_init_refs(&wf, version)) {
@@ -1604,13 +1579,7 @@
w_object(x, &wf);
w_clear_refs(&wf);
if (wf.str != NULL) {
- char *base = PyBytes_AS_STRING((PyBytesObject *)wf.str);
- if (wf.ptr - base > PY_SSIZE_T_MAX) {
- Py_DECREF(wf.str);
- PyErr_SetString(PyExc_OverflowError,
- "too much marshal data for a bytes object");
- return NULL;
- }
+ const char *base = PyBytes_AS_STRING(wf.str);
if (_PyBytes_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base)) < 0)
return NULL;
}
@@ -1659,7 +1628,7 @@
s = PyMarshal_WriteObjectToString(value, version);
if (s == NULL)
return NULL;
- res = _PyObject_CallMethodIdObjArgs(file, &PyId_write, s, NULL);
+ res = _PyObject_CallMethodIdOneArg(file, &PyId_write, s);
Py_DECREF(s);
return res;
}
@@ -1702,7 +1671,7 @@
if (!PyBytes_Check(data)) {
PyErr_Format(PyExc_TypeError,
"file.read() returned not bytes but %.100s",
- data->ob_type->tp_name);
+ Py_TYPE(data)->tp_name);
result = NULL;
}
else {
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 7271af3..13482c6 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -2,6 +2,7 @@
/* Module support implementation */
#include "Python.h"
+#include "pycore_abstract.h" // _PyIndex_Check()
#define FLAG_SIZE_T 1
typedef double va_double;
@@ -20,7 +21,7 @@
if (obj == Py_None) {
return 1;
}
- else if (PyIndex_Check(obj)) {
+ else if (_PyIndex_Check(obj)) {
limit = PyNumber_AsSsize_t(obj, PyExc_OverflowError);
if (limit == -1 && PyErr_Occurred()) {
return 0;
@@ -618,6 +619,9 @@
va_end(lva);
if (res < 0) {
+ if (stack != small_stack) {
+ PyMem_Free(stack);
+ }
return NULL;
}
@@ -678,3 +682,22 @@
Py_DECREF(o);
return -1;
}
+
+int
+PyModule_AddType(PyObject *module, PyTypeObject *type)
+{
+ if (PyType_Ready(type) < 0) {
+ return -1;
+ }
+
+ const char *name = _PyType_Name(type);
+ assert(name != NULL);
+
+ Py_INCREF(type);
+ if (PyModule_AddObject(module, name, (PyObject *)type) < 0) {
+ Py_DECREF(type);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/Python/mysnprintf.c b/Python/mysnprintf.c
index a08e249..458ca14 100644
--- a/Python/mysnprintf.c
+++ b/Python/mysnprintf.c
@@ -1,6 +1,8 @@
#include "Python.h"
-/* snprintf() wrappers. If the platform has vsnprintf, we use it, else we
+/* snprintf() and vsnprintf() wrappers.
+
+ If the platform has vsnprintf, we use it, else we
emulate it in a half-hearted way. Even if the platform has it, we wrap
it because platforms differ in what vsnprintf does in case the buffer
is too small: C99 behavior is to return the number of characters that
@@ -52,16 +54,17 @@
int
PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
{
- int len; /* # bytes written, excluding \0 */
-#ifdef HAVE_SNPRINTF
-#define _PyOS_vsnprintf_EXTRA_SPACE 1
-#else
-#define _PyOS_vsnprintf_EXTRA_SPACE 512
- char *buffer;
-#endif
assert(str != NULL);
assert(size > 0);
assert(format != NULL);
+
+ int len; /* # bytes written, excluding \0 */
+#if defined(_MSC_VER) || defined(HAVE_SNPRINTF)
+# define _PyOS_vsnprintf_EXTRA_SPACE 1
+#else
+# define _PyOS_vsnprintf_EXTRA_SPACE 512
+ char *buffer;
+#endif
/* We take a size_t as input but return an int. Sanity check
* our input so that it won't cause an overflow in the
* vsnprintf return value or the buffer malloc size. */
@@ -70,10 +73,12 @@
goto Done;
}
-#ifdef HAVE_SNPRINTF
+#if defined(_MSC_VER)
+ len = _vsnprintf(str, size, format, va);
+#elif defined(HAVE_SNPRINTF)
len = vsnprintf(str, size, format, va);
#else
- /* Emulate it. */
+ /* Emulate vsnprintf(). */
buffer = PyMem_MALLOC(size + _PyOS_vsnprintf_EXTRA_SPACE);
if (buffer == NULL) {
len = -666;
@@ -81,12 +86,12 @@
}
len = vsprintf(buffer, format, va);
- if (len < 0)
+ if (len < 0) {
/* ignore the error */;
-
- else if ((size_t)len >= size + _PyOS_vsnprintf_EXTRA_SPACE)
- Py_FatalError("Buffer overflow in PyOS_snprintf/PyOS_vsnprintf");
-
+ }
+ else if ((size_t)len >= size + _PyOS_vsnprintf_EXTRA_SPACE) {
+ _Py_FatalErrorFunc(__func__, "Buffer overflow");
+ }
else {
const size_t to_copy = (size_t)len < size ?
(size_t)len : size - 1;
@@ -96,9 +101,11 @@
}
PyMem_FREE(buffer);
#endif
+
Done:
- if (size > 0)
+ if (size > 0) {
str[size-1] = '\0';
+ }
return len;
#undef _PyOS_vsnprintf_EXTRA_SPACE
}
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index 7ab5814..19fa57a 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -99,7 +99,7 @@
int ovlimit; /* required digits to overflow */
/* skip leading white space */
- while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
+ while (*str && Py_ISSPACE(*str))
++str;
/* check for leading 0b, 0o or 0x for auto-base or base 16 */
@@ -138,7 +138,7 @@
/* skip all zeroes... */
while (*str == '0')
++str;
- while (Py_ISSPACE(Py_CHARMASK(*str)))
+ while (Py_ISSPACE(*str))
++str;
if (ptr)
*ptr = (char *)str;
@@ -266,7 +266,7 @@
unsigned long uresult;
char sign;
- while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
+ while (*str && Py_ISSPACE(*str))
str++;
sign = *str;
diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h
index e82959b..538fdbe 100644
--- a/Python/opcode_targets.h
+++ b/Python/opcode_targets.h
@@ -47,12 +47,12 @@
&&_unknown_opcode,
&&_unknown_opcode,
&&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_RERAISE,
+ &&TARGET_WITH_EXCEPT_START,
&&TARGET_GET_AITER,
&&TARGET_GET_ANEXT,
&&TARGET_BEFORE_ASYNC_WITH,
- &&TARGET_BEGIN_FINALLY,
+ &&_unknown_opcode,
&&TARGET_END_ASYNC_FOR,
&&TARGET_INPLACE_ADD,
&&TARGET_INPLACE_SUBTRACT,
@@ -73,21 +73,21 @@
&&TARGET_LOAD_BUILD_CLASS,
&&TARGET_YIELD_FROM,
&&TARGET_GET_AWAITABLE,
- &&_unknown_opcode,
+ &&TARGET_LOAD_ASSERTION_ERROR,
&&TARGET_INPLACE_LSHIFT,
&&TARGET_INPLACE_RSHIFT,
&&TARGET_INPLACE_AND,
&&TARGET_INPLACE_XOR,
&&TARGET_INPLACE_OR,
&&_unknown_opcode,
- &&TARGET_WITH_CLEANUP_START,
- &&TARGET_WITH_CLEANUP_FINISH,
+ &&_unknown_opcode,
+ &&TARGET_LIST_TO_TUPLE,
&&TARGET_RETURN_VALUE,
&&TARGET_IMPORT_STAR,
&&TARGET_SETUP_ANNOTATIONS,
&&TARGET_YIELD_VALUE,
&&TARGET_POP_BLOCK,
- &&TARGET_END_FINALLY,
+ &&_unknown_opcode,
&&TARGET_POP_EXCEPT,
&&TARGET_STORE_NAME,
&&TARGET_DELETE_NAME,
@@ -116,11 +116,11 @@
&&TARGET_POP_JUMP_IF_FALSE,
&&TARGET_POP_JUMP_IF_TRUE,
&&TARGET_LOAD_GLOBAL,
+ &&TARGET_IS_OP,
+ &&TARGET_CONTAINS_OP,
&&_unknown_opcode,
&&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_JUMP_IF_NOT_EXC_MATCH,
&&TARGET_SETUP_FINALLY,
&&_unknown_opcode,
&&TARGET_LOAD_FAST,
@@ -148,23 +148,23 @@
&&TARGET_SET_ADD,
&&TARGET_MAP_ADD,
&&TARGET_LOAD_CLASSDEREF,
- &&TARGET_BUILD_LIST_UNPACK,
- &&TARGET_BUILD_MAP_UNPACK,
- &&TARGET_BUILD_MAP_UNPACK_WITH_CALL,
- &&TARGET_BUILD_TUPLE_UNPACK,
- &&TARGET_BUILD_SET_UNPACK,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
&&TARGET_SETUP_ASYNC_WITH,
&&TARGET_FORMAT_VALUE,
&&TARGET_BUILD_CONST_KEY_MAP,
&&TARGET_BUILD_STRING,
- &&TARGET_BUILD_TUPLE_UNPACK_WITH_CALL,
+ &&_unknown_opcode,
&&_unknown_opcode,
&&TARGET_LOAD_METHOD,
&&TARGET_CALL_METHOD,
- &&TARGET_CALL_FINALLY,
- &&TARGET_POP_FINALLY,
- &&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_LIST_EXTEND,
+ &&TARGET_SET_UPDATE,
+ &&TARGET_DICT_MERGE,
+ &&TARGET_DICT_UPDATE,
&&_unknown_opcode,
&&_unknown_opcode,
&&_unknown_opcode,
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
index 60c1044..9a30221 100644
--- a/Python/pathconfig.c
+++ b/Python/pathconfig.c
@@ -1,13 +1,15 @@
/* Path configuration like module_search_path (sys.path) */
#include "Python.h"
-#include "osdefs.h"
+#include "osdefs.h" // DELIM
#include "pycore_initconfig.h"
#include "pycore_fileutils.h"
#include "pycore_pathconfig.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pymem.h" // _PyMem_SetDefaultAllocator()
#include <wchar.h>
+#ifdef MS_WINDOWS
+# include <windows.h> // GetFullPathNameW(), MAX_PATH
+#endif
#ifdef __cplusplus
extern "C" {
@@ -201,9 +203,8 @@
const wchar_t *sys_path = pathconfig->module_search_path;
const wchar_t delim = DELIM;
- const wchar_t *p = sys_path;
while (1) {
- p = wcschr(sys_path, delim);
+ const wchar_t *p = wcschr(sys_path, delim);
if (p == NULL) {
p = sys_path + wcslen(sys_path); /* End of string */
}
@@ -439,6 +440,12 @@
/* External interface */
+static void _Py_NO_RETURN
+path_out_of_memory(const char *func)
+{
+ _Py_FatalErrorFunc(func, "out of memory");
+}
+
void
Py_SetPath(const wchar_t *path)
{
@@ -470,7 +477,7 @@
|| _Py_path_config.exec_prefix == NULL
|| _Py_path_config.module_search_path == NULL)
{
- Py_FatalError("Py_SetPath() failed: out of memory");
+ path_out_of_memory(__func__);
}
}
@@ -491,7 +498,7 @@
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
if (_Py_path_config.home == NULL) {
- Py_FatalError("Py_SetPythonHome() failed: out of memory");
+ path_out_of_memory(__func__);
}
}
@@ -512,7 +519,7 @@
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
if (_Py_path_config.program_name == NULL) {
- Py_FatalError("Py_SetProgramName() failed: out of memory");
+ path_out_of_memory(__func__);
}
}
@@ -532,7 +539,7 @@
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
if (_Py_path_config.program_full_path == NULL) {
- Py_FatalError("_Py_SetProgramFullPath() failed: out of memory");
+ path_out_of_memory(__func__);
}
}
@@ -731,16 +738,20 @@
#endif
/* Search for a prefix value in an environment file (pyvenv.cfg).
- If found, copy it into the provided buffer. */
-int
+
+ - If found, copy it into *value_p: string which must be freed by
+ PyMem_RawFree().
+ - If not found, *value_p is set to NULL.
+*/
+PyStatus
_Py_FindEnvConfigValue(FILE *env_file, const wchar_t *key,
- wchar_t *value, size_t value_size)
+ wchar_t **value_p)
{
- int result = 0; /* meaning not found */
+ *value_p = NULL;
+
char buffer[MAXPATHLEN * 2 + 1]; /* allow extra for key, '=', etc. */
buffer[Py_ARRAY_LENGTH(buffer)-1] = '\0';
- fseek(env_file, 0, SEEK_SET);
while (!feof(env_file)) {
char * p = fgets(buffer, Py_ARRAY_LENGTH(buffer) - 1, env_file);
@@ -767,18 +778,24 @@
if ((tok != NULL) && !wcscmp(tok, L"=")) {
tok = WCSTOK(NULL, L"\r\n", &state);
if (tok != NULL) {
- wcsncpy(value, tok, value_size - 1);
- value[value_size - 1] = L'\0';
- result = 1;
+ *value_p = _PyMem_RawWcsdup(tok);
PyMem_RawFree(tmpbuffer);
- break;
+
+ if (*value_p == NULL) {
+ return _PyStatus_NO_MEMORY();
+ }
+
+ /* found */
+ return _PyStatus_OK();
}
}
}
PyMem_RawFree(tmpbuffer);
}
}
- return result;
+
+ /* not found */
+ return _PyStatus_OK();
}
#ifdef __cplusplus
diff --git a/Python/peephole.c b/Python/peephole.c
index d859648..6954c87 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -15,7 +15,7 @@
|| op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
#define ABSOLUTE_JUMP(op) (op==JUMP_ABSOLUTE \
|| op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \
- || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
+ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP || op==JUMP_IF_NOT_EXC_MATCH)
#define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP)
#define GETJUMPTGT(arr, i) (get_arg(arr, i) / sizeof(_Py_CODEUNIT) + \
(ABSOLUTE_JUMP(_Py_OPCODE(arr[i])) ? 0 : i+1))
@@ -194,11 +194,11 @@
case JUMP_IF_TRUE_OR_POP:
case POP_JUMP_IF_FALSE:
case POP_JUMP_IF_TRUE:
+ case JUMP_IF_NOT_EXC_MATCH:
case JUMP_ABSOLUTE:
case SETUP_FINALLY:
case SETUP_WITH:
case SETUP_ASYNC_WITH:
- case CALL_FINALLY:
j = GETJUMPTGT(code, i);
assert(j < len);
blocks[j] = 1;
@@ -432,14 +432,10 @@
/* Remove unreachable ops after RETURN */
case RETURN_VALUE:
h = i + 1;
- /* END_FINALLY should be kept since it denotes the end of
- the 'finally' block in frame_setlineno() in frameobject.c.
- SETUP_FINALLY should be kept for balancing.
- */
- while (h < codelen && ISBASICBLOCK(blocks, i, h) &&
- _Py_OPCODE(codestr[h]) != END_FINALLY)
+ while (h < codelen && ISBASICBLOCK(blocks, i, h))
{
- if (_Py_OPCODE(codestr[h]) == SETUP_FINALLY) {
+ /* Leave SETUP_FINALLY and RERAISE in place to help find block limits. */
+ if (_Py_OPCODE(codestr[h]) == SETUP_FINALLY || _Py_OPCODE(codestr[h]) == RERAISE) {
while (h > i + 1 &&
_Py_OPCODE(codestr[h - 1]) == EXTENDED_ARG)
{
@@ -498,6 +494,7 @@
case POP_JUMP_IF_TRUE:
case JUMP_IF_FALSE_OR_POP:
case JUMP_IF_TRUE_OR_POP:
+ case JUMP_IF_NOT_EXC_MATCH:
j = blocks[j / sizeof(_Py_CODEUNIT)] * sizeof(_Py_CODEUNIT);
break;
@@ -506,7 +503,6 @@
case SETUP_FINALLY:
case SETUP_WITH:
case SETUP_ASYNC_WITH:
- case CALL_FINALLY:
j = blocks[j / sizeof(_Py_CODEUNIT) + i + 1] - blocks[i] - 1;
j *= sizeof(_Py_CODEUNIT);
break;
@@ -515,8 +511,12 @@
if (instrsize(j) > ilen) {
goto exitUnchanged;
}
- assert(ilen <= INT_MAX);
/* If instrsize(j) < ilen, we'll emit EXTENDED_ARG 0 */
+ if (ilen > 4) {
+ /* Can only happen when PyCode_Optimize() is called with
+ malformed bytecode. */
+ goto exitUnchanged;
+ }
write_op_arg(codestr + h, opcode, j, (int)ilen);
h += ilen;
}
diff --git a/Python/preconfig.c b/Python/preconfig.c
index 89a6227..262738f 100644
--- a/Python/preconfig.c
+++ b/Python/preconfig.c
@@ -1,8 +1,9 @@
#include "Python.h"
-#include "pycore_initconfig.h"
-#include "pycore_getopt.h"
-#include "pycore_pystate.h" /* _PyRuntime_Initialize() */
-#include <locale.h> /* setlocale() */
+#include "pycore_getopt.h" // _PyOS_GetOpt()
+#include "pycore_initconfig.h" // _PyArgv
+#include "pycore_pymem.h" // _PyMem_GetAllocatorName()
+#include "pycore_runtime.h" // _PyRuntime_Initialize()
+#include <locale.h> // setlocale()
#define DECODE_LOCALE_ERR(NAME, LEN) \
diff --git a/Python/pyhash.c b/Python/pyhash.c
index c0355ae..3843079 100644
--- a/Python/pyhash.c
+++ b/Python/pyhash.c
@@ -129,16 +129,22 @@
}
Py_hash_t
-_Py_HashPointer(void *p)
+_Py_HashPointerRaw(const void *p)
{
- Py_hash_t x;
size_t y = (size_t)p;
/* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
excessive hash collisions for dicts and sets */
y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
- x = (Py_hash_t)y;
- if (x == -1)
+ return (Py_hash_t)y;
+}
+
+Py_hash_t
+_Py_HashPointer(const void *p)
+{
+ Py_hash_t x = _Py_HashPointerRaw(p);
+ if (x == -1) {
x = -2;
+ }
return x;
}
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index dc2d13d..60f091c 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -4,48 +4,41 @@
#include "Python-ast.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
-#include "pycore_ceval.h"
-#include "pycore_context.h"
-#include "pycore_initconfig.h"
-#include "pycore_fileutils.h"
-#include "pycore_hamt.h"
-#include "pycore_pathconfig.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
-#include "pycore_traceback.h"
-#include "grammar.h"
-#include "node.h"
-#include "token.h"
-#include "parsetok.h"
-#include "errcode.h"
-#include "code.h"
-#include "symtable.h"
-#include "ast.h"
-#include "marshal.h"
-#include "osdefs.h"
-#include <locale.h>
+
+#include "pycore_ceval.h" // _PyEval_FiniGIL()
+#include "pycore_context.h" // _PyContext_Init()
+#include "pycore_fileutils.h" // _Py_ResetForceASCII()
+#include "pycore_import.h" // _PyImport_Cleanup()
+#include "pycore_initconfig.h" // _PyStatus_OK()
+#include "pycore_object.h" // _PyDebug_PrintTotalRefs()
+#include "pycore_pathconfig.h" // _PyConfig_WritePathConfig()
+#include "pycore_pyerrors.h" // _PyErr_Occurred()
+#include "pycore_pylifecycle.h" // _PyErr_Print()
+#include "pycore_pystate.h" // _PyThreadState_GET()
+#include "pycore_sysmodule.h" // _PySys_ClearAuditHooks()
+#include "pycore_traceback.h" // _Py_DumpTracebackThreads()
+
+#include "grammar.h" // PyGrammar_RemoveAccelerators()
+#include <locale.h> // setlocale()
#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef MS_WINDOWS
-#include "malloc.h" /* for alloca */
+# include <signal.h> // SIG_IGN
#endif
#ifdef HAVE_LANGINFO_H
-#include <langinfo.h>
+# include <langinfo.h> // nl_langinfo(CODESET)
#endif
#ifdef MS_WINDOWS
-#undef BYTE
-#include "windows.h"
+# undef BYTE
+# include "windows.h"
-extern PyTypeObject PyWindowsConsoleIO_Type;
-#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
+ extern PyTypeObject PyWindowsConsoleIO_Type;
+# define PyWindowsConsoleIO_Check(op) \
+ (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
#endif
+
_Py_IDENTIFIER(flush);
_Py_IDENTIFIER(name);
_Py_IDENTIFIER(stdin);
@@ -59,13 +52,13 @@
extern grammar _PyParser_Grammar; /* From graminit.c */
-/* Forward */
+/* Forward declarations */
static PyStatus add_main_module(PyInterpreterState *interp);
-static PyStatus init_import_size(void);
-static PyStatus init_sys_streams(PyInterpreterState *interp);
-static PyStatus init_signals(void);
-static void call_py_exitfuncs(PyInterpreterState *);
-static void wait_for_thread_shutdown(void);
+static PyStatus init_import_site(void);
+static PyStatus init_set_builtins_open(void);
+static PyStatus init_sys_streams(PyThreadState *tstate);
+static void call_py_exitfuncs(PyThreadState *tstate);
+static void wait_for_thread_shutdown(PyThreadState *tstate);
static void call_ll_exitfuncs(_PyRuntimeState *runtime);
int _Py_UnhandledKeyboardInterrupt = 0;
@@ -99,7 +92,7 @@
int
_Py_IsFinalizing(void)
{
- return _PyRuntime.finalizing != NULL;
+ return _PyRuntimeState_GetFinalizing(&_PyRuntime) != NULL;
}
/* Hack to force loading of object files */
@@ -146,12 +139,13 @@
*/
static PyStatus
-init_importlib(PyInterpreterState *interp, PyObject *sysmod)
+init_importlib(PyThreadState *tstate, PyObject *sysmod)
{
PyObject *importlib;
PyObject *impmod;
PyObject *value;
- int verbose = interp->config.verbose;
+ PyInterpreterState *interp = tstate->interp;
+ int verbose = _PyInterpreterState_GetConfig(interp)->verbose;
/* Import _importlib through its frozen version, _frozen_importlib. */
if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
@@ -187,7 +181,7 @@
/* Install importlib as the implementation of import */
value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
if (value == NULL) {
- PyErr_Print();
+ _PyErr_Print(tstate);
return _PyStatus_ERR("importlib install failed");
}
Py_DECREF(value);
@@ -197,17 +191,17 @@
}
static PyStatus
-init_importlib_external(PyInterpreterState *interp)
+init_importlib_external(PyThreadState *tstate)
{
PyObject *value;
- value = PyObject_CallMethod(interp->importlib,
+ value = PyObject_CallMethod(tstate->interp->importlib,
"_install_external_importers", "");
if (value == NULL) {
- PyErr_Print();
+ _PyErr_Print(tstate);
return _PyStatus_ERR("external importer setup failed");
}
Py_DECREF(value);
- return _PyImportZip_Init(interp);
+ return _PyImportZip_Init(tstate);
}
/* Helper functions to better handle the legacy C locale
@@ -256,6 +250,7 @@
#endif
}
+#ifndef MS_WINDOWS
static const char *_C_LOCALE_WARNING =
"Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
"encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
@@ -270,6 +265,7 @@
PySys_FormatStderr("%s", _C_LOCALE_WARNING);
}
}
+#endif /* !defined(MS_WINDOWS) */
typedef struct _CandidateLocale {
const char *locale_name; /* The locale to try as a coercion target */
@@ -448,7 +444,7 @@
static PyStatus
pyinit_core_reconfigure(_PyRuntimeState *runtime,
- PyInterpreterState **interp_p,
+ PyThreadState **tstate_p,
const PyConfig *config)
{
PyStatus status;
@@ -456,20 +452,23 @@
if (!tstate) {
return _PyStatus_ERR("failed to read thread state");
}
+ *tstate_p = tstate;
PyInterpreterState *interp = tstate->interp;
if (interp == NULL) {
return _PyStatus_ERR("can't make main interpreter");
}
- *interp_p = interp;
- _PyConfig_Write(config, runtime);
-
- status = _PyConfig_Copy(&interp->config, config);
+ status = _PyConfig_Write(config, runtime);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- config = &interp->config;
+
+ status = _PyInterpreterState_SetConfig(interp, config);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ config = _PyInterpreterState_GetConfig(interp);
if (config->_install_importlib) {
status = _PyConfig_WritePathConfig(config);
@@ -489,7 +488,10 @@
return _PyStatus_ERR("main interpreter already initialized");
}
- _PyConfig_Write(config, runtime);
+ PyStatus status = _PyConfig_Write(config, runtime);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
/* Py_Finalize leaves _Py_Finalizing set in order to help daemon
* threads behave a little more gracefully at interpreter shutdown.
@@ -500,9 +502,9 @@
* threads still hanging around from a previous Py_Initialize/Finalize
* pair :(
*/
- runtime->finalizing = NULL;
+ _PyRuntimeState_SetFinalizing(runtime, NULL);
- PyStatus status = _Py_HashRandomization_Init(config);
+ status = _Py_HashRandomization_Init(config);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -516,76 +518,104 @@
static PyStatus
-pycore_create_interpreter(_PyRuntimeState *runtime,
- const PyConfig *config,
- PyInterpreterState **interp_p)
+init_interp_create_gil(PyThreadState *tstate)
{
- PyInterpreterState *interp = PyInterpreterState_New();
- if (interp == NULL) {
- return _PyStatus_ERR("can't make main interpreter");
- }
- *interp_p = interp;
+ PyStatus status;
- PyStatus status = _PyConfig_Copy(&interp->config, config);
+ /* finalize_interp_delete() comment explains why _PyEval_FiniGIL() is
+ only called here. */
+ _PyEval_FiniGIL(tstate);
+
+ /* Auto-thread-state API */
+ status = _PyGILState_Init(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- config = &interp->config;
- PyThreadState *tstate = PyThreadState_New(interp);
- if (tstate == NULL)
- return _PyStatus_ERR("can't make first thread");
- (void) PyThreadState_Swap(tstate);
-
- /* 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_FinalizeEx multiple times. */
- _PyEval_FiniThreads(&runtime->ceval);
-
- /* Auto-thread-state API */
- _PyGILState_Init(runtime, interp, tstate);
-
- /* Create the GIL */
- PyEval_InitThreads();
+ /* Create the GIL and take it */
+ status = _PyEval_InitGIL(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
return _PyStatus_OK();
}
static PyStatus
-pycore_init_types(void)
+pycore_create_interpreter(_PyRuntimeState *runtime,
+ const PyConfig *config,
+ PyThreadState **tstate_p)
{
- PyStatus status = _PyTypes_Init();
+ PyInterpreterState *interp = PyInterpreterState_New();
+ if (interp == NULL) {
+ return _PyStatus_ERR("can't make main interpreter");
+ }
+
+ PyStatus status = _PyInterpreterState_SetConfig(interp, config);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- status = _PyUnicode_Init();
+ PyThreadState *tstate = PyThreadState_New(interp);
+ if (tstate == NULL) {
+ return _PyStatus_ERR("can't make first thread");
+ }
+ (void) PyThreadState_Swap(tstate);
+
+ status = init_interp_create_gil(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- if (_PyStructSequence_Init() < 0) {
- return _PyStatus_ERR("can't initialize structseq");
+ *tstate_p = tstate;
+ return _PyStatus_OK();
+}
+
+
+static PyStatus
+pycore_init_types(PyThreadState *tstate)
+{
+ PyStatus status;
+ int is_main_interp = _Py_IsMainInterpreter(tstate);
+
+ status = _PyGC_Init(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
}
- if (!_PyLong_Init()) {
+ if (is_main_interp) {
+ status = _PyTypes_Init();
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
+
+
+ if (!_PyLong_Init(tstate)) {
return _PyStatus_ERR("can't init longs");
}
+ if (is_main_interp) {
+ status = _PyUnicode_Init();
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
+
status = _PyExc_Init();
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- if (!_PyFloat_Init()) {
- return _PyStatus_ERR("can't init float");
- }
+ if (is_main_interp) {
+ if (!_PyFloat_Init()) {
+ return _PyStatus_ERR("can't init float");
+ }
- if (!_PyContext_Init()) {
- return _PyStatus_ERR("can't init context");
+ if (_PyStructSequence_Init() < 0) {
+ return _PyStatus_ERR("can't initialize structseq");
+ }
}
status = _PyErr_Init();
@@ -593,109 +623,147 @@
return status;
}
+ if (is_main_interp) {
+ if (!_PyContext_Init()) {
+ return _PyStatus_ERR("can't init context");
+ }
+ }
+
return _PyStatus_OK();
}
static PyStatus
-pycore_init_builtins(PyInterpreterState *interp)
+pycore_init_builtins(PyThreadState *tstate)
{
- PyObject *bimod = _PyBuiltin_Init();
- if (bimod == NULL) {
- return _PyStatus_ERR("can't initialize builtins modules");
- }
- _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
+ assert(!_PyErr_Occurred(tstate));
- interp->builtins = PyModule_GetDict(bimod);
- if (interp->builtins == NULL) {
- return _PyStatus_ERR("can't initialize builtins dict");
+ PyObject *bimod = _PyBuiltin_Init(tstate);
+ if (bimod == NULL) {
+ goto error;
}
- Py_INCREF(interp->builtins);
+
+ PyInterpreterState *interp = tstate->interp;
+ if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) {
+ goto error;
+ }
+
+ PyObject *builtins_dict = PyModule_GetDict(bimod);
+ if (builtins_dict == NULL) {
+ goto error;
+ }
+ Py_INCREF(builtins_dict);
+ interp->builtins = builtins_dict;
PyStatus status = _PyBuiltins_AddExceptions(bimod);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
+
+ interp->builtins_copy = PyDict_Copy(interp->builtins);
+ if (interp->builtins_copy == NULL) {
+ goto error;
+ }
+ Py_DECREF(bimod);
+
+ assert(!_PyErr_Occurred(tstate));
+
return _PyStatus_OK();
+
+error:
+ Py_XDECREF(bimod);
+ return _PyStatus_ERR("can't initialize builtins module");
}
static PyStatus
-pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
+pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
{
- const PyConfig *config = &interp->config;
+ assert(!_PyErr_Occurred(tstate));
- PyStatus status = _PyImport_Init(interp);
+ PyStatus status = _PyImportHooks_Init(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- status = _PyImportHooks_Init();
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- /* Initialize _warnings. */
- if (_PyWarnings_Init() == NULL) {
- return _PyStatus_ERR("can't initialize warnings");
- }
-
- if (config->_install_importlib) {
- status = _PyConfig_WritePathConfig(config);
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
+ if (_Py_IsMainInterpreter(tstate)) {
+ /* Initialize _warnings. */
+ status = _PyWarnings_InitState(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
+
+ if (config->_install_importlib) {
+ status = _PyConfig_WritePathConfig(config);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
}
/* This call sets up builtin and frozen import support */
if (config->_install_importlib) {
- status = init_importlib(interp, sysmod);
+ status = init_importlib(tstate, sysmod);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
}
+
+ assert(!_PyErr_Occurred(tstate));
+
return _PyStatus_OK();
}
static PyStatus
+pycore_interp_init(PyThreadState *tstate)
+{
+ PyStatus status;
+ PyObject *sysmod = NULL;
+
+ status = pycore_init_types(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto done;
+ }
+
+ status = _PySys_Create(tstate, &sysmod);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto done;
+ }
+
+ status = pycore_init_builtins(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto done;
+ }
+
+ status = pycore_init_import_warnings(tstate, sysmod);
+
+done:
+ /* sys.modules['sys'] contains a strong reference to the module */
+ Py_XDECREF(sysmod);
+ return status;
+}
+
+
+static PyStatus
pyinit_config(_PyRuntimeState *runtime,
- PyInterpreterState **interp_p,
+ PyThreadState **tstate_p,
const PyConfig *config)
{
- PyInterpreterState *interp;
-
- _PyConfig_Write(config, runtime);
-
PyStatus status = pycore_init_runtime(runtime, config);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- status = pycore_create_interpreter(runtime, config, &interp);
+ PyThreadState *tstate;
+ status = pycore_create_interpreter(runtime, config, &tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- config = &interp->config;
- *interp_p = interp;
+ *tstate_p = tstate;
- status = pycore_init_types();
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- PyObject *sysmod;
- status = _PySys_Create(runtime, interp, &sysmod);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = pycore_init_builtins(interp);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = pycore_init_import_warnings(interp, sysmod);
+ status = pycore_interp_init(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -833,7 +901,7 @@
static PyStatus
pyinit_core(_PyRuntimeState *runtime,
const PyConfig *src_config,
- PyInterpreterState **interp_p)
+ PyThreadState **tstate_p)
{
PyStatus status;
@@ -856,10 +924,10 @@
}
if (!runtime->core_initialized) {
- status = pyinit_config(runtime, interp_p, &config);
+ status = pyinit_config(runtime, tstate_p, &config);
}
else {
- status = pyinit_core_reconfigure(runtime, interp_p, &config);
+ status = pyinit_core_reconfigure(runtime, tstate_p, &config);
}
if (_PyStatus_EXCEPTION(status)) {
goto done;
@@ -875,16 +943,16 @@
configuration. Example of bpo-34008: Py_Main() called after
Py_Initialize(). */
static PyStatus
-_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
+_Py_ReconfigureMainInterpreter(PyThreadState *tstate)
{
- PyConfig *config = &interp->config;
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
PyObject *argv = _PyWideStringList_AsList(&config->argv);
if (argv == NULL) {
return _PyStatus_NO_MEMORY(); \
}
- int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
+ int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv);
Py_DECREF(argv);
if (res < 0) {
return _PyStatus_ERR("fail to set sys.argv");
@@ -892,6 +960,117 @@
return _PyStatus_OK();
}
+
+static PyStatus
+init_interp_main(PyThreadState *tstate)
+{
+ assert(!_PyErr_Occurred(tstate));
+
+ PyStatus status;
+ int is_main_interp = _Py_IsMainInterpreter(tstate);
+ PyInterpreterState *interp = tstate->interp;
+ const PyConfig *config = _PyInterpreterState_GetConfig(interp);
+
+ if (!config->_install_importlib) {
+ /* Special mode for freeze_importlib: run with no import system
+ *
+ * This means anything which needs support from extension modules
+ * or pure Python code in the standard library won't work.
+ */
+ if (is_main_interp) {
+ interp->runtime->initialized = 1;
+ }
+ return _PyStatus_OK();
+ }
+
+ if (is_main_interp) {
+ if (_PyTime_Init() < 0) {
+ return _PyStatus_ERR("can't initialize time");
+ }
+ }
+
+ if (_PySys_InitMain(tstate) < 0) {
+ return _PyStatus_ERR("can't finish initializing sys");
+ }
+
+ status = init_importlib_external(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+
+ if (is_main_interp) {
+ /* initialize the faulthandler module */
+ status = _PyFaulthandler_Init(config->faulthandler);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
+
+ status = _PyUnicode_InitEncodings(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+
+ if (is_main_interp) {
+ if (_PySignal_Init(config->install_signal_handlers) < 0) {
+ return _PyStatus_ERR("can't initialize signals");
+ }
+
+ if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
+ return _PyStatus_ERR("can't initialize tracemalloc");
+ }
+ }
+
+ status = init_sys_streams(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+
+ status = init_set_builtins_open();
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+
+ status = add_main_module(interp);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+
+ if (is_main_interp) {
+ /* Initialize warnings. */
+ PyObject *warnoptions = PySys_GetObject("warnoptions");
+ if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
+ {
+ PyObject *warnings_module = PyImport_ImportModule("warnings");
+ if (warnings_module == NULL) {
+ fprintf(stderr, "'import warnings' failed; traceback:\n");
+ _PyErr_Print(tstate);
+ }
+ Py_XDECREF(warnings_module);
+ }
+
+ interp->runtime->initialized = 1;
+ }
+
+ if (config->site_import) {
+ status = init_import_site();
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+ }
+
+ if (is_main_interp) {
+#ifndef MS_WINDOWS
+ emit_stderr_warning_for_legacy_locale(interp->runtime);
+#endif
+ }
+
+ assert(!_PyErr_Occurred(tstate));
+
+ return _PyStatus_OK();
+}
+
+
/* Update interpreter state based on supplied configuration settings
*
* After calling this function, most of the restrictions on the interpreter
@@ -904,100 +1083,21 @@
* non-zero return code.
*/
static PyStatus
-pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
+pyinit_main(PyThreadState *tstate)
{
- if (!runtime->core_initialized) {
+ PyInterpreterState *interp = tstate->interp;
+ if (!interp->runtime->core_initialized) {
return _PyStatus_ERR("runtime core not initialized");
}
- /* Configure the main interpreter */
- PyConfig *config = &interp->config;
-
- if (runtime->initialized) {
- return _Py_ReconfigureMainInterpreter(interp);
+ if (interp->runtime->initialized) {
+ return _Py_ReconfigureMainInterpreter(tstate);
}
- if (!config->_install_importlib) {
- /* Special mode for freeze_importlib: run with no import system
- *
- * This means anything which needs support from extension modules
- * or pure Python code in the standard library won't work.
- */
- runtime->initialized = 1;
- return _PyStatus_OK();
- }
-
- if (_PyTime_Init() < 0) {
- return _PyStatus_ERR("can't initialize time");
- }
-
- if (_PySys_InitMain(runtime, interp) < 0) {
- return _PyStatus_ERR("can't finish initializing sys");
- }
-
- PyStatus status = init_importlib_external(interp);
+ PyStatus status = init_interp_main(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
-
- /* initialize the faulthandler module */
- status = _PyFaulthandler_Init(config->faulthandler);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- status = _PyUnicode_InitEncodings(tstate);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- if (config->install_signal_handlers) {
- status = init_signals();
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
- }
-
- if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
- return _PyStatus_ERR("can't initialize tracemalloc");
- }
-
- status = add_main_module(interp);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = init_sys_streams(interp);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- /* Initialize warnings. */
- PyObject *warnoptions = PySys_GetObject("warnoptions");
- if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
- {
- PyObject *warnings_module = PyImport_ImportModule("warnings");
- if (warnings_module == NULL) {
- fprintf(stderr, "'import warnings' failed; traceback:\n");
- PyErr_Print();
- }
- Py_XDECREF(warnings_module);
- }
-
- runtime->initialized = 1;
-
- if (config->site_import) {
- status = init_import_size(); /* Module site */
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
- }
-
-#ifndef MS_WINDOWS
- emit_stderr_warning_for_legacy_locale(runtime);
-#endif
-
return _PyStatus_OK();
}
@@ -1010,9 +1110,8 @@
return status;
}
_PyRuntimeState *runtime = &_PyRuntime;
- PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
-
- return pyinit_main(runtime, interp);
+ PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+ return pyinit_main(tstate);
}
@@ -1031,15 +1130,15 @@
}
_PyRuntimeState *runtime = &_PyRuntime;
- PyInterpreterState *interp = NULL;
- status = pyinit_core(runtime, config, &interp);
+ PyThreadState *tstate = NULL;
+ status = pyinit_core(runtime, config, &tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- config = &interp->config;
+ config = _PyInterpreterState_GetConfig(tstate->interp);
if (config->_init_main) {
- status = pyinit_main(runtime, interp);
+ status = pyinit_main(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -1083,10 +1182,6 @@
}
-#ifdef COUNT_ALLOCS
-extern void _Py_dump_counts(FILE*);
-#endif
-
/* Flush stdout and stderr */
static int
@@ -1114,7 +1209,7 @@
int status = 0;
if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
- tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
if (tmp == NULL) {
PyErr_WriteUnraisable(fout);
status = -1;
@@ -1124,7 +1219,7 @@
}
if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
- tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
+ tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
if (tmp == NULL) {
PyErr_Clear();
status = -1;
@@ -1150,6 +1245,102 @@
*/
+
+static void
+finalize_interp_types(PyThreadState *tstate, int is_main_interp)
+{
+ if (is_main_interp) {
+ /* Sundry finalizers */
+ _PyAST_Fini();
+ _PyFrame_Fini();
+ _PyTuple_Fini();
+ _PyList_Fini();
+ _PySet_Fini();
+ _PyBytes_Fini();
+ }
+
+ _PyLong_Fini(tstate);
+
+ if (is_main_interp) {
+ _PyFloat_Fini();
+ _PyDict_Fini();
+ _PySlice_Fini();
+ }
+
+ _PyWarnings_Fini(tstate->interp);
+
+ if (is_main_interp) {
+ _Py_HashRandomization_Fini();
+ _PyArg_Fini();
+ _PyAsyncGen_Fini();
+ _PyContext_Fini();
+ }
+
+ /* Cleanup Unicode implementation */
+ _PyUnicode_Fini(tstate);
+
+ if (is_main_interp) {
+ _Py_ClearFileSystemEncoding();
+ }
+}
+
+
+static void
+finalize_interp_clear(PyThreadState *tstate)
+{
+ int is_main_interp = _Py_IsMainInterpreter(tstate);
+
+ /* Clear interpreter state and all thread states */
+ PyInterpreterState_Clear(tstate->interp);
+
+ /* Trigger a GC collection on subinterpreters*/
+ if (!is_main_interp) {
+ _PyGC_CollectNoFail();
+ }
+
+ /* Clear all loghooks */
+ /* Both _PySys_Audit function and users still need PyObject, such as tuple.
+ Call _PySys_ClearAuditHooks when PyObject available. */
+ if (is_main_interp) {
+ _PySys_ClearAuditHooks(tstate);
+ }
+
+ finalize_interp_types(tstate, is_main_interp);
+
+ if (is_main_interp) {
+ /* XXX Still allocated:
+ - various static ad-hoc pointers to interned strings
+ - int and float free list blocks
+ - whatever various modules and libraries allocate
+ */
+
+ PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
+
+ _PyExc_Fini();
+ }
+
+ _PyGC_Fini(tstate);
+}
+
+
+static void
+finalize_interp_delete(PyThreadState *tstate)
+{
+ if (_Py_IsMainInterpreter(tstate)) {
+ /* Cleanup auto-thread-state */
+ _PyGILState_Fini(tstate);
+ }
+
+ /* We can't call _PyEval_FiniGIL() here because destroying the GIL lock can
+ fail when it is being awaited by another running daemon thread (see
+ bpo-9901). Instead pycore_create_interpreter() destroys the previously
+ created GIL, which ensures that Py_Initialize / Py_FinalizeEx can be
+ called multiple times. */
+
+ PyInterpreterState_Delete(tstate->interp);
+}
+
+
int
Py_FinalizeEx(void)
{
@@ -1160,15 +1351,14 @@
return status;
}
- // Wrap up existing "threading"-module-created, non-daemon threads.
- wait_for_thread_shutdown();
-
- // Make any remaining pending calls.
- _Py_FinishPendingCalls(runtime);
-
/* Get current thread state and interpreter pointer */
PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
- PyInterpreterState *interp = tstate->interp;
+
+ // Wrap up existing "threading"-module-created, non-daemon threads.
+ wait_for_thread_shutdown(tstate);
+
+ // Make any remaining pending calls.
+ _Py_FinishPendingCalls(tstate);
/* The interpreter is still entirely intact at this point, and the
* exit funcs may be relying on that. In particular, if some thread
@@ -1180,26 +1370,36 @@
* the threads created via Threading.
*/
- call_py_exitfuncs(interp);
+ call_py_exitfuncs(tstate);
/* Copy the core config, PyInterpreterState_Delete() free
the core config memory */
#ifdef Py_REF_DEBUG
- int show_ref_count = interp->config.show_ref_count;
+ int show_ref_count = tstate->interp->config.show_ref_count;
#endif
#ifdef Py_TRACE_REFS
- int dump_refs = interp->config.dump_refs;
+ int dump_refs = tstate->interp->config.dump_refs;
#endif
#ifdef WITH_PYMALLOC
- int malloc_stats = interp->config.malloc_stats;
+ int malloc_stats = tstate->interp->config.malloc_stats;
#endif
- /* Remaining threads (e.g. daemon threads) will automatically exit
- after taking the GIL (in PyEval_RestoreThread()). */
- runtime->finalizing = tstate;
+ /* Remaining daemon threads will automatically exit
+ when they attempt to take the GIL (ex: PyEval_RestoreThread()). */
+ _PyRuntimeState_SetFinalizing(runtime, tstate);
runtime->initialized = 0;
runtime->core_initialized = 0;
+ /* Destroy the state of all threads of the interpreter, except of the
+ current thread. In practice, only daemon threads should still be alive,
+ except if wait_for_thread_shutdown() has been cancelled by CTRL+C.
+ Clear frames of other threads to call objects destructors. Destructors
+ will be called in the current Python thread. Since
+ _PyRuntimeState_SetFinalizing() has been called, no other Python thread
+ can take the GIL at this point: if they try, they will exit
+ immediately. */
+ _PyThreadState_DeleteExcept(runtime, tstate);
+
/* Flush sys.stdout and sys.stderr */
if (flush_std_files() < 0) {
status = -1;
@@ -1221,16 +1421,9 @@
* XXX I haven't seen a real-life report of either of these.
*/
_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_CollectIfEnabled() > 0)
- /* nothing */;
-#endif
/* Destroy all modules */
- PyImport_Cleanup();
+ _PyImport_Cleanup(tstate);
/* Print debug stats if any */
_PyEval_Fini();
@@ -1272,10 +1465,6 @@
/* unload faulthandler module */
_PyFaulthandler_Fini();
- /* Debugging stuff */
-#ifdef COUNT_ALLOCS
- _Py_dump_counts(stderr);
-#endif
/* dump hash stats */
_PyHash_Fini();
@@ -1296,63 +1485,8 @@
}
#endif /* Py_TRACE_REFS */
- /* Clear interpreter state and all thread states. */
- PyInterpreterState_Clear(interp);
-
- /* Clear all loghooks */
- /* We want minimal exposure of this function, so define the extern
- * here. The linker should discover the correct function without
- * exporting a symbol. */
- extern void _PySys_ClearAuditHooks(void);
- _PySys_ClearAuditHooks();
-
- /* Now we decref the exception classes. After this point nothing
- can raise an exception. That's okay, because each Fini() method
- below has been checked to make sure no exceptions are ever
- raised.
- */
-
- _PyExc_Fini();
-
- /* Sundry finalizers */
- PyMethod_Fini();
- PyFrame_Fini();
- PyCFunction_Fini();
- PyTuple_Fini();
- PyList_Fini();
- PySet_Fini();
- PyBytes_Fini();
- PyLong_Fini();
- PyFloat_Fini();
- PyDict_Fini();
- PySlice_Fini();
- _PyGC_Fini(runtime);
- _PyWarnings_Fini(interp);
- _Py_HashRandomization_Fini();
- _PyArg_Fini();
- PyAsyncGen_Fini();
- _PyContext_Fini();
-
- /* Cleanup Unicode implementation */
- _PyUnicode_Fini();
-
- _Py_ClearFileSystemEncoding();
-
- /* XXX Still allocated:
- - various static ad-hoc pointers to interned strings
- - int and float free list blocks
- - whatever various modules and libraries allocate
- */
-
- PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
-
- /* Cleanup auto-thread-state */
- _PyGILState_Fini(runtime);
-
- /* Delete current thread. After this, many C API calls become crashy. */
- PyThreadState_Swap(NULL);
-
- PyInterpreterState_Delete(interp);
+ finalize_interp_clear(tstate);
+ finalize_interp_delete(tstate);
#ifdef Py_TRACE_REFS
/* Display addresses (& refcnts) of all objects still alive.
@@ -1381,6 +1515,7 @@
Py_FinalizeEx();
}
+
/* Create and initialize a new interpreter and thread, and return the
new thread. This requires that Py_Initialize() has been called
first.
@@ -1395,7 +1530,7 @@
*/
static PyStatus
-new_interpreter(PyThreadState **tstate_p)
+new_interpreter(PyThreadState **tstate_p, int isolated_subinterpreter)
{
PyStatus status;
@@ -1411,7 +1546,7 @@
/* Issue #10915, #15751: The GIL API doesn't work with multiple
interpreters: disable PyGILState_Check(). */
- _PyGILState_check_enabled = 0;
+ runtime->gilstate.check_enabled = 0;
PyInterpreterState *interp = PyInterpreterState_New();
if (interp == NULL) {
@@ -1429,140 +1564,59 @@
PyThreadState *save_tstate = PyThreadState_Swap(tstate);
/* Copy the current interpreter config into the new interpreter */
- PyConfig *config;
+ const PyConfig *config;
if (save_tstate != NULL) {
- config = &save_tstate->interp->config;
- } else {
+ config = _PyInterpreterState_GetConfig(save_tstate->interp);
+ }
+ else
+ {
/* No current thread state, copy from the main interpreter */
PyInterpreterState *main_interp = PyInterpreterState_Main();
- config = &main_interp->config;
+ config = _PyInterpreterState_GetConfig(main_interp);
}
- status = _PyConfig_Copy(&interp->config, config);
+ status = _PyInterpreterState_SetConfig(interp, config);
if (_PyStatus_EXCEPTION(status)) {
- return status;
+ goto error;
}
- config = &interp->config;
+ interp->config._isolated_interpreter = isolated_subinterpreter;
- status = _PyExc_Init();
+ status = init_interp_create_gil(tstate);
if (_PyStatus_EXCEPTION(status)) {
- return status;
+ goto error;
}
- status = _PyErr_Init();
+ status = pycore_interp_init(tstate);
if (_PyStatus_EXCEPTION(status)) {
- return status;
+ goto error;
}
-
- /* XXX The following is lax in error checking */
- PyObject *modules = PyDict_New();
- if (modules == NULL) {
- return _PyStatus_ERR("can't make modules dictionary");
- }
- interp->modules = modules;
-
- PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
- if (sysmod != NULL) {
- interp->sysdict = PyModule_GetDict(sysmod);
- if (interp->sysdict == NULL) {
- goto handle_error;
- }
- Py_INCREF(interp->sysdict);
- PyDict_SetItemString(interp->sysdict, "modules", modules);
- if (_PySys_InitMain(runtime, interp) < 0) {
- return _PyStatus_ERR("can't finish initializing sys");
- }
- }
- else if (PyErr_Occurred()) {
- goto handle_error;
- }
-
- PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
- if (bimod != NULL) {
- interp->builtins = PyModule_GetDict(bimod);
- if (interp->builtins == NULL)
- goto handle_error;
- Py_INCREF(interp->builtins);
- }
- else if (PyErr_Occurred()) {
- goto handle_error;
- }
-
- if (bimod != NULL && sysmod != NULL) {
- status = _PyBuiltins_AddExceptions(bimod);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = _PySys_SetPreliminaryStderr(interp->sysdict);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = _PyImportHooks_Init();
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = init_importlib(interp, sysmod);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = init_importlib_external(interp);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = _PyUnicode_InitEncodings(tstate);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = init_sys_streams(interp);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- status = add_main_module(interp);
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
-
- if (config->site_import) {
- status = init_import_size();
- if (_PyStatus_EXCEPTION(status)) {
- return status;
- }
- }
- }
-
- if (PyErr_Occurred()) {
- goto handle_error;
+ status = init_interp_main(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto error;
}
*tstate_p = tstate;
return _PyStatus_OK();
-handle_error:
- /* Oops, it didn't work. Undo it all. */
+error:
+ *tstate_p = NULL;
+ /* Oops, it didn't work. Undo it all. */
PyErr_PrintEx(0);
PyThreadState_Clear(tstate);
- PyThreadState_Swap(save_tstate);
PyThreadState_Delete(tstate);
PyInterpreterState_Delete(interp);
+ PyThreadState_Swap(save_tstate);
- *tstate_p = NULL;
- return _PyStatus_OK();
+ return status;
}
PyThreadState *
-Py_NewInterpreter(void)
+_Py_NewInterpreter(int isolated_subinterpreter)
{
PyThreadState *tstate = NULL;
- PyStatus status = new_interpreter(&tstate);
+ PyStatus status = new_interpreter(&tstate, isolated_subinterpreter);
if (_PyStatus_EXCEPTION(status)) {
Py_ExitStatusException(status);
}
@@ -1570,6 +1624,12 @@
}
+PyThreadState *
+Py_NewInterpreter(void)
+{
+ return _Py_NewInterpreter(0);
+}
+
/* Delete an interpreter and its last thread. This requires that the
given thread state is current, that the thread has no remaining
frames, and that it is its interpreter's only remaining thread.
@@ -1587,24 +1647,26 @@
{
PyInterpreterState *interp = tstate->interp;
- if (tstate != _PyThreadState_GET())
- Py_FatalError("Py_EndInterpreter: thread is not current");
- if (tstate->frame != NULL)
- Py_FatalError("Py_EndInterpreter: thread still has a frame");
+ if (tstate != _PyThreadState_GET()) {
+ Py_FatalError("thread is not current");
+ }
+ if (tstate->frame != NULL) {
+ Py_FatalError("thread still has a frame");
+ }
interp->finalizing = 1;
// Wrap up existing "threading"-module-created, non-daemon threads.
- wait_for_thread_shutdown();
+ wait_for_thread_shutdown(tstate);
- call_py_exitfuncs(interp);
+ call_py_exitfuncs(tstate);
- if (tstate != interp->tstate_head || tstate->next != NULL)
- Py_FatalError("Py_EndInterpreter: not the last thread");
+ if (tstate != interp->tstate_head || tstate->next != NULL) {
+ Py_FatalError("not the last thread");
+ }
- PyImport_Cleanup();
- PyInterpreterState_Clear(interp);
- PyThreadState_Swap(NULL);
- PyInterpreterState_Delete(interp);
+ _PyImport_Cleanup(tstate);
+ finalize_interp_clear(tstate);
+ finalize_interp_delete(tstate);
}
/* Add the __main__ module */
@@ -1660,7 +1722,7 @@
/* Import the site module (not into __main__ though) */
static PyStatus
-init_import_size(void)
+init_import_site(void)
{
PyObject *m;
m = PyImport_ImportModule("site");
@@ -1740,10 +1802,10 @@
mode = "wb";
else
mode = "rb";
- buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
+ buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
fd, mode, buffering,
Py_None, Py_None, /* encoding, errors */
- Py_None, 0); /* newline, closefd */
+ Py_None, Py_False); /* newline, closefd */
if (buf == NULL)
goto error;
@@ -1767,7 +1829,7 @@
text = PyUnicode_FromString(name);
if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
goto error;
- res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
+ res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
if (res == NULL)
goto error;
isatty = PyObject_IsTrue(res);
@@ -1778,7 +1840,7 @@
write_through = Py_True;
else
write_through = Py_False;
- if (isatty && buffered_stdio)
+ if (buffered_stdio && (isatty || fd == fileno(stderr)))
line_buffering = Py_True;
else
line_buffering = Py_False;
@@ -1845,18 +1907,55 @@
return NULL;
}
-/* Initialize sys.stdin, stdout, stderr and builtins.open */
+/* Set builtins.open to io.OpenWrapper */
static PyStatus
-init_sys_streams(PyInterpreterState *interp)
+init_set_builtins_open(void)
{
PyObject *iomod = NULL, *wrapper;
PyObject *bimod = NULL;
+ PyStatus res = _PyStatus_OK();
+
+ if (!(iomod = PyImport_ImportModule("io"))) {
+ goto error;
+ }
+
+ if (!(bimod = PyImport_ImportModule("builtins"))) {
+ goto error;
+ }
+
+ if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
+ goto error;
+ }
+
+ /* Set builtins.open */
+ if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
+ Py_DECREF(wrapper);
+ goto error;
+ }
+ Py_DECREF(wrapper);
+ goto done;
+
+error:
+ res = _PyStatus_ERR("can't initialize io.open");
+
+done:
+ Py_XDECREF(bimod);
+ Py_XDECREF(iomod);
+ return res;
+}
+
+
+/* Initialize sys.stdin, stdout, stderr and builtins.open */
+static PyStatus
+init_sys_streams(PyThreadState *tstate)
+{
+ PyObject *iomod = NULL;
PyObject *m;
PyObject *std = NULL;
int fd;
PyObject * encoding_attr;
PyStatus res = _PyStatus_OK();
- PyConfig *config = &interp->config;
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
/* Check that stdin is not a directory
Using shell redirection, you can redirect stdin to a directory,
@@ -1883,23 +1982,9 @@
}
Py_DECREF(m);
- if (!(bimod = PyImport_ImportModule("builtins"))) {
- goto error;
- }
-
if (!(iomod = PyImport_ImportModule("io"))) {
goto error;
}
- if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
- goto error;
- }
-
- /* Set builtins.open */
- if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
- Py_DECREF(wrapper);
- goto error;
- }
- Py_DECREF(wrapper);
/* Set sys.stdin */
fd = fileno(stdin);
@@ -1947,7 +2032,7 @@
}
Py_DECREF(encoding_attr);
}
- PyErr_Clear(); /* Not a fatal error if codec isn't available */
+ _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
if (PySys_SetObject("__stderr__", std) < 0) {
Py_DECREF(std);
@@ -1967,8 +2052,6 @@
done:
_Py_ClearStandardStreamEncoding();
-
- Py_XDECREF(bimod);
Py_XDECREF(iomod);
return res;
}
@@ -1994,13 +2077,13 @@
Return 1 if the traceback was displayed, 0 otherwise. */
static int
-_Py_FatalError_PrintExc(int fd)
+_Py_FatalError_PrintExc(PyThreadState *tstate)
{
PyObject *ferr, *res;
PyObject *exception, *v, *tb;
int has_tb;
- PyErr_Fetch(&exception, &v, &tb);
+ _PyErr_Fetch(tstate, &exception, &v, &tb);
if (exception == NULL) {
/* No current exception */
return 0;
@@ -2013,7 +2096,7 @@
return 0;
}
- PyErr_NormalizeException(&exception, &v, &tb);
+ _PyErr_NormalizeException(tstate, &exception, &v, &tb);
if (tb == NULL) {
tb = Py_None;
Py_INCREF(tb);
@@ -2031,11 +2114,13 @@
Py_XDECREF(tb);
/* sys.stderr may be buffered: call sys.stderr.flush() */
- res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
- if (res == NULL)
- PyErr_Clear();
- else
+ res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
+ if (res == NULL) {
+ _PyErr_Clear(tstate);
+ }
+ else {
Py_DECREF(res);
+ }
return has_tb;
}
@@ -2082,8 +2167,9 @@
fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
{
fprintf(stream, "Python runtime state: ");
- if (runtime->finalizing) {
- fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
+ PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime);
+ if (finalizing) {
+ fprintf(stream, "finalizing (tstate=%p)", finalizing);
}
else if (runtime->initialized) {
fprintf(stream, "initialized");
@@ -2105,33 +2191,50 @@
}
-static void _Py_NO_RETURN
-fatal_error(const char *prefix, const char *msg, int status)
+static inline void _Py_NO_RETURN
+fatal_error_exit(int status)
{
- FILE *stream = stderr;
+ if (status < 0) {
+#if defined(MS_WINDOWS) && defined(_DEBUG)
+ DebugBreak();
+#endif
+ abort();
+ }
+ else {
+ exit(status);
+ }
+}
+
+
+static void _Py_NO_RETURN
+fatal_error(FILE *stream, int header, const char *prefix, const char *msg,
+ int status)
+{
const int fd = fileno(stream);
static int reentrant = 0;
if (reentrant) {
/* Py_FatalError() caused a second fatal error.
Example: flush_std_files() raises a recursion error. */
- goto exit;
+ fatal_error_exit(status);
}
reentrant = 1;
- fprintf(stream, "Fatal Python error: ");
- if (prefix) {
- fputs(prefix, stream);
- fputs(": ", stream);
+ if (header) {
+ fprintf(stream, "Fatal Python error: ");
+ if (prefix) {
+ fputs(prefix, stream);
+ fputs(": ", stream);
+ }
+ if (msg) {
+ fputs(msg, stream);
+ }
+ else {
+ fprintf(stream, "<message not set>");
+ }
+ fputs("\n", stream);
+ fflush(stream);
}
- if (msg) {
- fputs(msg, stream);
- }
- else {
- fprintf(stream, "<message not set>");
- }
- fputs("\n", stream);
- fflush(stream); /* it helps in Windows debug build */
_PyRuntimeState *runtime = &_PyRuntime;
fatal_error_dump_runtime(stream, runtime);
@@ -2154,7 +2257,7 @@
int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
if (has_tstate_and_gil) {
/* If an exception is set, print the exception with its traceback */
- if (!_Py_FatalError_PrintExc(fd)) {
+ if (!_Py_FatalError_PrintExc(tss_tstate)) {
/* No exception is set, or an exception is set without traceback */
_Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
}
@@ -2179,24 +2282,60 @@
fatal_output_debug(msg);
#endif /* MS_WINDOWS */
-exit:
- if (status < 0) {
-#if defined(MS_WINDOWS) && defined(_DEBUG)
- DebugBreak();
-#endif
- abort();
- }
- else {
- exit(status);
- }
+ fatal_error_exit(status);
}
+
+#undef Py_FatalError
+
void _Py_NO_RETURN
Py_FatalError(const char *msg)
{
- fatal_error(NULL, msg, -1);
+ fatal_error(stderr, 1, NULL, msg, -1);
}
+
+void _Py_NO_RETURN
+_Py_FatalErrorFunc(const char *func, const char *msg)
+{
+ fatal_error(stderr, 1, func, msg, -1);
+}
+
+
+void _Py_NO_RETURN
+_Py_FatalErrorFormat(const char *func, const char *format, ...)
+{
+ static int reentrant = 0;
+ if (reentrant) {
+ /* _Py_FatalErrorFormat() caused a second fatal error */
+ fatal_error_exit(-1);
+ }
+ reentrant = 1;
+
+ FILE *stream = stderr;
+ fprintf(stream, "Fatal Python error: ");
+ if (func) {
+ fputs(func, stream);
+ fputs(": ", stream);
+ }
+ fflush(stream);
+
+ va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+ va_start(vargs, format);
+#else
+ va_start(vargs);
+#endif
+ vfprintf(stream, format, vargs);
+ va_end(vargs);
+
+ fputs("\n", stream);
+ fflush(stream);
+
+ fatal_error(stream, 0, NULL, NULL, -1);
+}
+
+
void _Py_NO_RETURN
Py_ExitStatusException(PyStatus status)
{
@@ -2204,7 +2343,7 @@
exit(status.exitcode);
}
else if (_PyStatus_IS_ERROR(status)) {
- fatal_error(status.func, status.err_msg, 1);
+ fatal_error(stderr, 1, status.func, status.err_msg, 1);
}
else {
Py_FatalError("Py_ExitStatusException() must not be called on success");
@@ -2213,12 +2352,10 @@
/* Clean up and exit */
-# include "pythread.h"
-
/* For the atexit module. */
void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
{
- PyInterpreterState *is = _PyInterpreterState_Get();
+ PyInterpreterState *is = _PyInterpreterState_GET();
/* Guard against API misuse (see bpo-17852) */
assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
@@ -2228,13 +2365,14 @@
}
static void
-call_py_exitfuncs(PyInterpreterState *istate)
+call_py_exitfuncs(PyThreadState *tstate)
{
- if (istate->pyexitfunc == NULL)
+ PyInterpreterState *interp = tstate->interp;
+ if (interp->pyexitfunc == NULL)
return;
- (*istate->pyexitfunc)(istate->pyexitmodule);
- PyErr_Clear();
+ (*interp->pyexitfunc)(interp->pyexitmodule);
+ _PyErr_Clear(tstate);
}
/* Wait until threading._shutdown completes, provided
@@ -2242,19 +2380,19 @@
The shutdown routine will wait until all non-daemon
"threading" threads have completed. */
static void
-wait_for_thread_shutdown(void)
+wait_for_thread_shutdown(PyThreadState *tstate)
{
_Py_IDENTIFIER(_shutdown);
PyObject *result;
PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
if (threading == NULL) {
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
PyErr_WriteUnraisable(NULL);
}
/* else: threading not imported */
return;
}
- result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
+ result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
if (result == NULL) {
PyErr_WriteUnraisable(threading);
}
@@ -2299,31 +2437,14 @@
exit(sts);
}
-static PyStatus
-init_signals(void)
-{
-#ifdef SIGPIPE
- PyOS_setsig(SIGPIPE, SIG_IGN);
-#endif
-#ifdef SIGXFZ
- PyOS_setsig(SIGXFZ, SIG_IGN);
-#endif
-#ifdef SIGXFSZ
- PyOS_setsig(SIGXFSZ, SIG_IGN);
-#endif
- PyOS_InitInterrupts(); /* May imply init_signals() */
- if (PyErr_Occurred()) {
- return _PyStatus_ERR("can't import signal");
- }
- return _PyStatus_OK();
-}
-
/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
*
* All of the code in this function must only use async-signal-safe functions,
* listed at `man 7 signal` or
* http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
+ *
+ * If this function is updated, update also _posix_spawn() of subprocess.py.
*/
void
_Py_RestoreSignals(void)
diff --git a/Python/pymath.c b/Python/pymath.c
index 24b8042..a08a0e7 100644
--- a/Python/pymath.c
+++ b/Python/pymath.c
@@ -79,3 +79,18 @@
return copysign(y, x);
}
#endif /* HAVE_ROUND */
+
+static const unsigned int BitLengthTable[32] = {
+ 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+unsigned int _Py_bit_length(unsigned long d) {
+ unsigned int d_bits = 0;
+ while (d >= 32) {
+ d_bits += 6;
+ d >>= 6;
+ }
+ d_bits += BitLengthTable[d];
+ return d_bits;
+}
diff --git a/Python/pystate.c b/Python/pystate.c
index b1d0f1c..9beefa8 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -4,9 +4,11 @@
#include "Python.h"
#include "pycore_ceval.h"
#include "pycore_initconfig.h"
-#include "pycore_pymem.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
#include "pycore_pylifecycle.h"
+#include "pycore_pymem.h" // _PyMem_SetDefaultAllocator()
+#include "pycore_pystate.h" // _PyThreadState_GET()
+#include "pycore_sysmodule.h"
/* --------------------------------------------------------------------------
CAUTION
@@ -39,7 +41,7 @@
/* Forward declarations */
static PyThreadState *_PyGILState_GetThisThreadState(struct _gilstate_runtime_state *gilstate);
-static void _PyThreadState_Delete(_PyRuntimeState *runtime, PyThreadState *tstate);
+static void _PyThreadState_Delete(PyThreadState *tstate, int check_current);
static PyStatus
@@ -58,8 +60,7 @@
runtime->open_code_userdata = open_code_userdata;
runtime->audit_hook_head = audit_hook_head;
- _PyGC_Initialize(&runtime->gc);
- _PyEval_Initialize(&runtime->ceval);
+ _PyEval_InitRuntimeState(&runtime->ceval);
PyPreConfig_InitPythonConfig(&runtime->preconfig);
@@ -121,6 +122,7 @@
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
}
+#ifdef HAVE_FORK
/* This function is called from PyOS_AfterFork_Child to ensure that
* newly created child processes do not share locks with the parent.
*/
@@ -136,24 +138,25 @@
PyMemAllocatorEx old_alloc;
_PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
- runtime->interpreters.mutex = PyThread_allocate_lock();
- runtime->interpreters.main->id_mutex = PyThread_allocate_lock();
- runtime->xidregistry.mutex = PyThread_allocate_lock();
+ int interp_mutex = _PyThread_at_fork_reinit(&runtime->interpreters.mutex);
+ int main_interp_id_mutex = _PyThread_at_fork_reinit(&runtime->interpreters.main->id_mutex);
+ int xidregistry_mutex = _PyThread_at_fork_reinit(&runtime->xidregistry.mutex);
PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
- if (runtime->interpreters.mutex == NULL) {
+ if (interp_mutex < 0) {
Py_FatalError("Can't initialize lock for runtime interpreters");
}
- if (runtime->interpreters.main->id_mutex == NULL) {
+ if (main_interp_id_mutex < 0) {
Py_FatalError("Can't initialize ID lock for main interpreter");
}
- if (runtime->xidregistry.mutex == NULL) {
+ if (xidregistry_mutex < 0) {
Py_FatalError("Can't initialize lock for cross-interpreter data registry");
}
}
+#endif
#define HEAD_LOCK(runtime) \
PyThread_acquire_lock((runtime)->interpreters.mutex, WAIT_LOCK)
@@ -193,19 +196,29 @@
PyInterpreterState *
PyInterpreterState_New(void)
{
- if (PySys_Audit("cpython.PyInterpreterState_New", NULL) < 0) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ /* tstate is NULL when Py_InitializeFromConfig() calls
+ PyInterpreterState_New() to create the main interpreter. */
+ if (_PySys_Audit(tstate, "cpython.PyInterpreterState_New", NULL) < 0) {
return NULL;
}
- PyInterpreterState *interp = PyMem_RawMalloc(sizeof(PyInterpreterState));
+ PyInterpreterState *interp = PyMem_RawCalloc(1, sizeof(PyInterpreterState));
if (interp == NULL) {
return NULL;
}
- memset(interp, 0, sizeof(*interp));
interp->id_refcount = -1;
- interp->check_interval = 100;
+ /* Don't get runtime from tstate since tstate can be NULL */
+ _PyRuntimeState *runtime = &_PyRuntime;
+ interp->runtime = runtime;
+
+ if (_PyEval_InitState(&interp->ceval) < 0) {
+ goto out_of_memory;
+ }
+
+ _PyGC_InitState(&interp->gc);
PyConfig_InitPythonConfig(&interp->config);
interp->eval_frame = _PyEval_EvalFrameDefault;
@@ -217,14 +230,15 @@
#endif
#endif
- _PyRuntimeState *runtime = &_PyRuntime;
struct pyinterpreters *interpreters = &runtime->interpreters;
HEAD_LOCK(runtime);
if (interpreters->next_id < 0) {
/* overflow or Py_Initialize() not called! */
- PyErr_SetString(PyExc_RuntimeError,
- "failed to get an interpreter ID");
+ if (tstate != NULL) {
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "failed to get an interpreter ID");
+ }
PyMem_RawFree(interp);
interp = NULL;
}
@@ -248,14 +262,27 @@
interp->audit_hooks = NULL;
return interp;
+
+out_of_memory:
+ if (tstate != NULL) {
+ _PyErr_NoMemory(tstate);
+ }
+
+ PyMem_RawFree(interp);
+ return NULL;
}
-static void
-_PyInterpreterState_Clear(_PyRuntimeState *runtime, PyInterpreterState *interp)
+void
+PyInterpreterState_Clear(PyInterpreterState *interp)
{
- if (PySys_Audit("cpython.PyInterpreterState_Clear", NULL) < 0) {
- PyErr_Clear();
+ _PyRuntimeState *runtime = interp->runtime;
+
+ /* Use the current Python thread state to call audit hooks,
+ not the current Python thread state of 'interp'. */
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (_PySys_Audit(tstate, "cpython.PyInterpreterState_Clear", NULL) < 0) {
+ _PyErr_Clear(tstate);
}
HEAD_LOCK(runtime);
@@ -283,7 +310,7 @@
Py_CLEAR(interp->after_forkers_parent);
Py_CLEAR(interp->after_forkers_child);
#endif
- if (runtime->finalizing == NULL) {
+ if (_PyRuntimeState_GetFinalizing(runtime) == NULL) {
_PyWarnings_Fini(interp);
}
// XXX Once we have one allocator per interpreter (i.e.
@@ -291,63 +318,58 @@
// objects have been cleaned up at the point.
}
-void
-PyInterpreterState_Clear(PyInterpreterState *interp)
-{
- _PyInterpreterState_Clear(&_PyRuntime, interp);
-}
-
static void
-zapthreads(_PyRuntimeState *runtime, PyInterpreterState *interp)
+zapthreads(PyInterpreterState *interp, int check_current)
{
- PyThreadState *p;
+ PyThreadState *tstate;
/* No need to lock the mutex here because this should only happen
when the threads are all really dead (XXX famous last words). */
- while ((p = interp->tstate_head) != NULL) {
- _PyThreadState_Delete(runtime, p);
+ while ((tstate = interp->tstate_head) != NULL) {
+ _PyThreadState_Delete(tstate, check_current);
}
}
-static void
-_PyInterpreterState_Delete(_PyRuntimeState *runtime,
- PyInterpreterState *interp)
-{
- struct pyinterpreters *interpreters = &runtime->interpreters;
- zapthreads(runtime, interp);
- HEAD_LOCK(runtime);
- PyInterpreterState **p;
- for (p = &interpreters->head; ; p = &(*p)->next) {
- if (*p == NULL) {
- Py_FatalError("PyInterpreterState_Delete: invalid interp");
- }
- if (*p == interp) {
- break;
- }
- }
- if (interp->tstate_head != NULL) {
- Py_FatalError("PyInterpreterState_Delete: remaining threads");
- }
- *p = interp->next;
- if (interpreters->main == interp) {
- interpreters->main = NULL;
- if (interpreters->head != NULL) {
- Py_FatalError("PyInterpreterState_Delete: remaining subinterpreters");
- }
- }
- HEAD_UNLOCK(runtime);
- if (interp->id_mutex != NULL) {
- PyThread_free_lock(interp->id_mutex);
- }
- PyMem_RawFree(interp);
-}
-
-
void
PyInterpreterState_Delete(PyInterpreterState *interp)
{
- _PyInterpreterState_Delete(&_PyRuntime, interp);
+ _PyRuntimeState *runtime = interp->runtime;
+ struct pyinterpreters *interpreters = &runtime->interpreters;
+ zapthreads(interp, 0);
+
+ _PyEval_FiniState(&interp->ceval);
+
+ /* Delete current thread. After this, many C API calls become crashy. */
+ _PyThreadState_Swap(&runtime->gilstate, NULL);
+
+ HEAD_LOCK(runtime);
+ PyInterpreterState **p;
+ for (p = &interpreters->head; ; p = &(*p)->next) {
+ if (*p == NULL) {
+ Py_FatalError("NULL interpreter");
+ }
+ if (*p == interp) {
+ break;
+ }
+ }
+ if (interp->tstate_head != NULL) {
+ Py_FatalError("remaining threads");
+ }
+ *p = interp->next;
+
+ if (interpreters->main == interp) {
+ interpreters->main = NULL;
+ if (interpreters->head != NULL) {
+ Py_FatalError("remaining subinterpreters");
+ }
+ }
+ HEAD_UNLOCK(runtime);
+
+ if (interp->id_mutex != NULL) {
+ PyThread_free_lock(interp->id_mutex);
+ }
+ PyMem_RawFree(interp);
}
@@ -363,7 +385,7 @@
PyThreadState *tstate = _PyThreadState_Swap(gilstate, NULL);
if (tstate != NULL && tstate->interp != interpreters->main) {
- Py_FatalError("PyInterpreterState_DeleteExceptMain: not main interpreter");
+ Py_FatalError("not main interpreter");
}
HEAD_LOCK(runtime);
@@ -377,8 +399,8 @@
continue;
}
- _PyInterpreterState_Clear(runtime, interp); // XXX must activate?
- zapthreads(runtime, interp);
+ PyInterpreterState_Clear(interp); // XXX must activate?
+ zapthreads(interp, 1);
if (interp->id_mutex != NULL) {
PyThread_free_lock(interp->id_mutex);
}
@@ -389,22 +411,20 @@
HEAD_UNLOCK(runtime);
if (interpreters->head == NULL) {
- Py_FatalError("PyInterpreterState_DeleteExceptMain: missing main");
+ Py_FatalError("missing main interpreter");
}
_PyThreadState_Swap(gilstate, tstate);
}
PyInterpreterState *
-_PyInterpreterState_Get(void)
+PyInterpreterState_Get(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- if (tstate == NULL) {
- Py_FatalError("_PyInterpreterState_Get(): no current thread state");
- }
+ _Py_EnsureTstateNotNULL(tstate);
PyInterpreterState *interp = tstate->interp;
if (interp == NULL) {
- Py_FatalError("_PyInterpreterState_Get(): no current interpreter");
+ Py_FatalError("no current interpreter");
}
return interp;
}
@@ -422,11 +442,11 @@
static PyInterpreterState *
-interp_look_up_id(_PyRuntimeState *runtime, PY_INT64_T requested_id)
+interp_look_up_id(_PyRuntimeState *runtime, int64_t requested_id)
{
PyInterpreterState *interp = runtime->interpreters.head;
while (interp != NULL) {
- PY_INT64_T id = PyInterpreterState_GetID(interp);
+ int64_t id = PyInterpreterState_GetID(interp);
if (id < 0) {
return NULL;
}
@@ -439,7 +459,7 @@
}
PyInterpreterState *
-_PyInterpreterState_LookUpID(PY_INT64_T requested_id)
+_PyInterpreterState_LookUpID(int64_t requested_id)
{
PyInterpreterState *interp = NULL;
if (requested_id >= 0) {
@@ -543,26 +563,15 @@
return interp->dict;
}
-/* Default implementation for _PyThreadState_GetFrame */
-static struct _frame *
-threadstate_getframe(PyThreadState *self)
-{
- return self->frame;
-}
-
static PyThreadState *
new_threadstate(PyInterpreterState *interp, int init)
{
- _PyRuntimeState *runtime = &_PyRuntime;
+ _PyRuntimeState *runtime = interp->runtime;
PyThreadState *tstate = (PyThreadState *)PyMem_RawMalloc(sizeof(PyThreadState));
if (tstate == NULL) {
return NULL;
}
- if (_PyThreadState_GetFrame == NULL) {
- _PyThreadState_GetFrame = threadstate_getframe;
- }
-
tstate->interp = interp;
tstate->frame = NULL;
@@ -607,7 +616,7 @@
tstate->context_ver = 1;
if (init) {
- _PyThreadState_Init(runtime, tstate);
+ _PyThreadState_Init(tstate);
}
HEAD_LOCK(runtime);
@@ -635,16 +644,16 @@
}
void
-_PyThreadState_Init(_PyRuntimeState *runtime, PyThreadState *tstate)
+_PyThreadState_Init(PyThreadState *tstate)
{
- _PyGILState_NoteThreadState(&runtime->gilstate, tstate);
+ _PyGILState_NoteThreadState(&tstate->interp->runtime->gilstate, tstate);
}
PyObject*
PyState_FindModule(struct PyModuleDef* module)
{
Py_ssize_t index = module->m_base.m_index;
- PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *state = _PyInterpreterState_GET();
PyObject *res;
if (module->m_slots) {
return NULL;
@@ -660,107 +669,120 @@
}
int
-_PyState_AddModule(PyObject* module, struct PyModuleDef* def)
+_PyState_AddModule(PyThreadState *tstate, PyObject* module, struct PyModuleDef* def)
{
- PyInterpreterState *state;
if (!def) {
- assert(PyErr_Occurred());
+ assert(_PyErr_Occurred(tstate));
return -1;
}
if (def->m_slots) {
- PyErr_SetString(PyExc_SystemError,
- "PyState_AddModule called on module with slots");
+ _PyErr_SetString(tstate,
+ PyExc_SystemError,
+ "PyState_AddModule called on module with slots");
return -1;
}
- state = _PyInterpreterState_GET_UNSAFE();
- if (!state->modules_by_index) {
- state->modules_by_index = PyList_New(0);
- if (!state->modules_by_index)
+
+ PyInterpreterState *interp = tstate->interp;
+ if (!interp->modules_by_index) {
+ interp->modules_by_index = PyList_New(0);
+ if (!interp->modules_by_index) {
return -1;
+ }
}
- while (PyList_GET_SIZE(state->modules_by_index) <= def->m_base.m_index)
- if (PyList_Append(state->modules_by_index, Py_None) < 0)
+
+ while (PyList_GET_SIZE(interp->modules_by_index) <= def->m_base.m_index) {
+ if (PyList_Append(interp->modules_by_index, Py_None) < 0) {
return -1;
+ }
+ }
+
Py_INCREF(module);
- return PyList_SetItem(state->modules_by_index,
+ return PyList_SetItem(interp->modules_by_index,
def->m_base.m_index, module);
}
int
PyState_AddModule(PyObject* module, struct PyModuleDef* def)
{
- Py_ssize_t index;
- PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
if (!def) {
- Py_FatalError("PyState_AddModule: Module Definition is NULL");
+ Py_FatalError("module definition is NULL");
return -1;
}
- index = def->m_base.m_index;
- if (state->modules_by_index &&
- index < PyList_GET_SIZE(state->modules_by_index) &&
- module == PyList_GET_ITEM(state->modules_by_index, index)) {
- Py_FatalError("PyState_AddModule: Module already added!");
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyInterpreterState *interp = tstate->interp;
+ Py_ssize_t index = def->m_base.m_index;
+ if (interp->modules_by_index &&
+ index < PyList_GET_SIZE(interp->modules_by_index) &&
+ module == PyList_GET_ITEM(interp->modules_by_index, index))
+ {
+ _Py_FatalErrorFormat(__func__, "module %p already added", module);
return -1;
}
- return _PyState_AddModule(module, def);
+ return _PyState_AddModule(tstate, module, def);
}
int
PyState_RemoveModule(struct PyModuleDef* def)
{
- PyInterpreterState *state;
- Py_ssize_t index = def->m_base.m_index;
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyInterpreterState *interp = tstate->interp;
+
if (def->m_slots) {
- PyErr_SetString(PyExc_SystemError,
- "PyState_RemoveModule called on module with slots");
+ _PyErr_SetString(tstate,
+ PyExc_SystemError,
+ "PyState_RemoveModule called on module with slots");
return -1;
}
- state = _PyInterpreterState_GET_UNSAFE();
+
+ Py_ssize_t index = def->m_base.m_index;
if (index == 0) {
- Py_FatalError("PyState_RemoveModule: Module index invalid.");
- return -1;
+ Py_FatalError("invalid module index");
}
- if (state->modules_by_index == NULL) {
- Py_FatalError("PyState_RemoveModule: Interpreters module-list not accessible.");
- return -1;
+ if (interp->modules_by_index == NULL) {
+ Py_FatalError("Interpreters module-list not accessible.");
}
- if (index > PyList_GET_SIZE(state->modules_by_index)) {
- Py_FatalError("PyState_RemoveModule: Module index out of bounds.");
- return -1;
+ if (index > PyList_GET_SIZE(interp->modules_by_index)) {
+ Py_FatalError("Module index out of bounds.");
}
+
Py_INCREF(Py_None);
- return PyList_SetItem(state->modules_by_index, index, Py_None);
+ return PyList_SetItem(interp->modules_by_index, index, Py_None);
}
-/* used by import.c:PyImport_Cleanup */
+/* Used by PyImport_Cleanup() */
void
-_PyState_ClearModules(void)
+_PyInterpreterState_ClearModules(PyInterpreterState *interp)
{
- PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
- if (state->modules_by_index) {
- Py_ssize_t i;
- for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) {
- PyObject *m = PyList_GET_ITEM(state->modules_by_index, i);
- if (PyModule_Check(m)) {
- /* cleanup the saved copy of module dicts */
- PyModuleDef *md = PyModule_GetDef(m);
- if (md)
- Py_CLEAR(md->m_base.m_copy);
+ if (!interp->modules_by_index) {
+ return;
+ }
+
+ Py_ssize_t i;
+ for (i = 0; i < PyList_GET_SIZE(interp->modules_by_index); i++) {
+ PyObject *m = PyList_GET_ITEM(interp->modules_by_index, i);
+ if (PyModule_Check(m)) {
+ /* cleanup the saved copy of module dicts */
+ PyModuleDef *md = PyModule_GetDef(m);
+ if (md) {
+ Py_CLEAR(md->m_base.m_copy);
}
}
- /* Setting modules_by_index to NULL could be dangerous, so we
- clear the list instead. */
- if (PyList_SetSlice(state->modules_by_index,
- 0, PyList_GET_SIZE(state->modules_by_index),
- NULL))
- PyErr_WriteUnraisable(state->modules_by_index);
+ }
+
+ /* Setting modules_by_index to NULL could be dangerous, so we
+ clear the list instead. */
+ if (PyList_SetSlice(interp->modules_by_index,
+ 0, PyList_GET_SIZE(interp->modules_by_index),
+ NULL)) {
+ PyErr_WriteUnraisable(interp->modules_by_index);
}
}
void
PyThreadState_Clear(PyThreadState *tstate)
{
- int verbose = tstate->interp->config.verbose;
+ int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
if (verbose && tstate->frame != NULL) {
/* bpo-20526: After the main thread calls
@@ -802,80 +824,83 @@
Py_CLEAR(tstate->async_gen_finalizer);
Py_CLEAR(tstate->context);
+
+ if (tstate->on_delete != NULL) {
+ tstate->on_delete(tstate->on_delete_data);
+ }
}
/* Common code for PyThreadState_Delete() and PyThreadState_DeleteCurrent() */
static void
-tstate_delete_common(_PyRuntimeState *runtime, PyThreadState *tstate)
+tstate_delete_common(PyThreadState *tstate,
+ struct _gilstate_runtime_state *gilstate)
{
- if (tstate == NULL) {
- Py_FatalError("PyThreadState_Delete: NULL tstate");
- }
+ _Py_EnsureTstateNotNULL(tstate);
PyInterpreterState *interp = tstate->interp;
if (interp == NULL) {
- Py_FatalError("PyThreadState_Delete: NULL interp");
+ Py_FatalError("NULL interpreter");
}
+ _PyRuntimeState *runtime = interp->runtime;
+
HEAD_LOCK(runtime);
- if (tstate->prev)
+ if (tstate->prev) {
tstate->prev->next = tstate->next;
- else
+ }
+ else {
interp->tstate_head = tstate->next;
- if (tstate->next)
+ }
+ if (tstate->next) {
tstate->next->prev = tstate->prev;
+ }
HEAD_UNLOCK(runtime);
- if (tstate->on_delete != NULL) {
- tstate->on_delete(tstate->on_delete_data);
- }
- PyMem_RawFree(tstate);
-}
-
-static void
-_PyThreadState_Delete(_PyRuntimeState *runtime, PyThreadState *tstate)
-{
- struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
- if (tstate == _PyRuntimeGILState_GetThreadState(gilstate)) {
- Py_FatalError("PyThreadState_Delete: tstate is still current");
- }
if (gilstate->autoInterpreterState &&
PyThread_tss_get(&gilstate->autoTSSkey) == tstate)
{
PyThread_tss_set(&gilstate->autoTSSkey, NULL);
}
- tstate_delete_common(runtime, tstate);
+}
+
+
+static void
+_PyThreadState_Delete(PyThreadState *tstate, int check_current)
+{
+ struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+ if (check_current) {
+ if (tstate == _PyRuntimeGILState_GetThreadState(gilstate)) {
+ _Py_FatalErrorFormat(__func__, "tstate %p is still current", tstate);
+ }
+ }
+ tstate_delete_common(tstate, gilstate);
+ PyMem_RawFree(tstate);
}
void
PyThreadState_Delete(PyThreadState *tstate)
{
- _PyThreadState_Delete(&_PyRuntime, tstate);
+ _PyThreadState_Delete(tstate, 1);
}
-static void
-_PyThreadState_DeleteCurrent(_PyRuntimeState *runtime)
+void
+_PyThreadState_DeleteCurrent(PyThreadState *tstate)
{
- struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
- PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
- if (tstate == NULL)
- Py_FatalError(
- "PyThreadState_DeleteCurrent: no current tstate");
- tstate_delete_common(runtime, tstate);
- if (gilstate->autoInterpreterState &&
- PyThread_tss_get(&gilstate->autoTSSkey) == tstate)
- {
- PyThread_tss_set(&gilstate->autoTSSkey, NULL);
- }
+ _Py_EnsureTstateNotNULL(tstate);
+ struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
+ tstate_delete_common(tstate, gilstate);
_PyRuntimeGILState_SetThreadState(gilstate, NULL);
- PyEval_ReleaseLock();
+ _PyEval_ReleaseLock(tstate);
+ PyMem_RawFree(tstate);
}
void
-PyThreadState_DeleteCurrent()
+PyThreadState_DeleteCurrent(void)
{
- _PyThreadState_DeleteCurrent(&_PyRuntime);
+ struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
+ PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
+ _PyThreadState_DeleteCurrent(tstate);
}
@@ -890,25 +915,30 @@
_PyThreadState_DeleteExcept(_PyRuntimeState *runtime, PyThreadState *tstate)
{
PyInterpreterState *interp = tstate->interp;
- PyThreadState *p, *next, *garbage;
+
HEAD_LOCK(runtime);
/* Remove all thread states, except tstate, from the linked list of
thread states. This will allow calling PyThreadState_Clear()
without holding the lock. */
- garbage = interp->tstate_head;
- if (garbage == tstate)
- garbage = tstate->next;
- if (tstate->prev)
+ PyThreadState *list = interp->tstate_head;
+ if (list == tstate) {
+ list = tstate->next;
+ }
+ if (tstate->prev) {
tstate->prev->next = tstate->next;
- if (tstate->next)
+ }
+ if (tstate->next) {
tstate->next->prev = tstate->prev;
+ }
tstate->prev = tstate->next = NULL;
interp->tstate_head = tstate;
HEAD_UNLOCK(runtime);
+
/* Clear and deallocate all stale thread states. Even if this
executes Python code, we should be safe since it executes
in the current thread, not one of the stale threads. */
- for (p = garbage; p; p = next) {
+ PyThreadState *p, *next;
+ for (p = list; p; p = next) {
next = p->next;
PyThreadState_Clear(p);
PyMem_RawFree(p);
@@ -927,9 +957,7 @@
PyThreadState_Get(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- if (tstate == NULL)
- Py_FatalError("PyThreadState_Get: no current thread");
-
+ _Py_EnsureTstateNotNULL(tstate);
return tstate;
}
@@ -972,19 +1000,53 @@
and the caller should assume no per-thread state is available. */
PyObject *
+_PyThreadState_GetDict(PyThreadState *tstate)
+{
+ assert(tstate != NULL);
+ if (tstate->dict == NULL) {
+ tstate->dict = PyDict_New();
+ if (tstate->dict == NULL) {
+ _PyErr_Clear(tstate);
+ }
+ }
+ return tstate->dict;
+}
+
+
+PyObject *
PyThreadState_GetDict(void)
{
PyThreadState *tstate = _PyThreadState_GET();
- if (tstate == NULL)
+ if (tstate == NULL) {
return NULL;
-
- if (tstate->dict == NULL) {
- PyObject *d;
- tstate->dict = d = PyDict_New();
- if (d == NULL)
- PyErr_Clear();
}
- return tstate->dict;
+ return _PyThreadState_GetDict(tstate);
+}
+
+
+PyInterpreterState *
+PyThreadState_GetInterpreter(PyThreadState *tstate)
+{
+ assert(tstate != NULL);
+ return tstate->interp;
+}
+
+
+PyFrameObject*
+PyThreadState_GetFrame(PyThreadState *tstate)
+{
+ assert(tstate != NULL);
+ PyFrameObject *frame = tstate->frame;
+ Py_XINCREF(frame);
+ return frame;
+}
+
+
+uint64_t
+PyThreadState_GetID(PyThreadState *tstate)
+{
+ assert(tstate != NULL);
+ return tstate->id;
}
@@ -1009,23 +1071,26 @@
* head_mutex for the duration.
*/
HEAD_LOCK(runtime);
- for (PyThreadState *p = interp->tstate_head; p != NULL; p = p->next) {
- if (p->thread_id == id) {
- /* Tricky: we need to decref the current value
- * (if any) in p->async_exc, but that can in turn
- * allow arbitrary Python code to run, including
- * perhaps calls to this function. To prevent
- * deadlock, we need to release head_mutex before
- * the decref.
- */
- PyObject *old_exc = p->async_exc;
- Py_XINCREF(exc);
- p->async_exc = exc;
- HEAD_UNLOCK(runtime);
- Py_XDECREF(old_exc);
- _PyEval_SignalAsyncExc(&runtime->ceval);
- return 1;
+ for (PyThreadState *tstate = interp->tstate_head; tstate != NULL; tstate = tstate->next) {
+ if (tstate->thread_id != id) {
+ continue;
}
+
+ /* Tricky: we need to decref the current value
+ * (if any) in tstate->async_exc, but that can in turn
+ * allow arbitrary Python code to run, including
+ * perhaps calls to this function. To prevent
+ * deadlock, we need to release head_mutex before
+ * the decref.
+ */
+ PyObject *old_exc = tstate->async_exc;
+ Py_XINCREF(exc);
+ tstate->async_exc = exc;
+ HEAD_UNLOCK(runtime);
+
+ Py_XDECREF(old_exc);
+ _PyEval_SignalAsyncExc(tstate);
+ return 1;
}
HEAD_UNLOCK(runtime);
return 0;
@@ -1070,16 +1135,15 @@
PyObject *
_PyThread_CurrentFrames(void)
{
- PyObject *result;
- PyInterpreterState *i;
-
- if (PySys_Audit("sys._current_frames", NULL) < 0) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (_PySys_Audit(tstate, "sys._current_frames", NULL) < 0) {
return NULL;
}
- result = PyDict_New();
- if (result == NULL)
+ PyObject *result = PyDict_New();
+ if (result == NULL) {
return NULL;
+ }
/* for i in all interpreters:
* for t in all of i's thread states:
@@ -1087,32 +1151,35 @@
* Because these lists can mutate even when the GIL is held, we
* need to grab head_mutex for the duration.
*/
- _PyRuntimeState *runtime = &_PyRuntime;
+ _PyRuntimeState *runtime = tstate->interp->runtime;
HEAD_LOCK(runtime);
+ PyInterpreterState *i;
for (i = runtime->interpreters.head; i != NULL; i = i->next) {
PyThreadState *t;
for (t = i->tstate_head; t != NULL; t = t->next) {
- PyObject *id;
- int stat;
- struct _frame *frame = t->frame;
- if (frame == NULL)
+ PyFrameObject *frame = t->frame;
+ if (frame == NULL) {
continue;
- id = PyLong_FromUnsignedLong(t->thread_id);
- if (id == NULL)
- goto Fail;
- stat = PyDict_SetItem(result, id, (PyObject *)frame);
+ }
+ PyObject *id = PyLong_FromUnsignedLong(t->thread_id);
+ if (id == NULL) {
+ goto fail;
+ }
+ int stat = PyDict_SetItem(result, id, (PyObject *)frame);
Py_DECREF(id);
- if (stat < 0)
- goto Fail;
+ if (stat < 0) {
+ goto fail;
+ }
}
}
+ goto done;
+
+fail:
+ Py_CLEAR(result);
+
+done:
HEAD_UNLOCK(runtime);
return result;
-
- Fail:
- HEAD_UNLOCK(runtime);
- Py_DECREF(result);
- return NULL;
}
/* Python "auto thread state" API. */
@@ -1137,24 +1204,30 @@
/* Internal initialization/finalization functions called by
Py_Initialize/Py_FinalizeEx
*/
-void
-_PyGILState_Init(_PyRuntimeState *runtime,
- PyInterpreterState *interp, PyThreadState *tstate)
+PyStatus
+_PyGILState_Init(PyThreadState *tstate)
{
- /* must init with valid states */
- assert(interp != NULL);
- assert(tstate != NULL);
+ if (!_Py_IsMainInterpreter(tstate)) {
+ /* Currently, PyGILState is shared by all interpreters. The main
+ * interpreter is responsible to initialize it. */
+ return _PyStatus_OK();
+ }
- struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
+ /* must init with valid states */
+ assert(tstate != NULL);
+ assert(tstate->interp != NULL);
+
+ struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
if (PyThread_tss_create(&gilstate->autoTSSkey) != 0) {
- Py_FatalError("Could not allocate TSS entry");
+ return _PyStatus_NO_MEMORY();
}
- gilstate->autoInterpreterState = interp;
+ gilstate->autoInterpreterState = tstate->interp;
assert(PyThread_tss_get(&gilstate->autoTSSkey) == NULL);
assert(tstate->gilstate_counter == 0);
_PyGILState_NoteThreadState(gilstate, tstate);
+ return _PyStatus_OK();
}
PyInterpreterState *
@@ -1164,9 +1237,9 @@
}
void
-_PyGILState_Fini(_PyRuntimeState *runtime)
+_PyGILState_Fini(PyThreadState *tstate)
{
- struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
+ struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
PyThread_tss_delete(&gilstate->autoTSSkey);
gilstate->autoInterpreterState = NULL;
}
@@ -1250,12 +1323,11 @@
int
PyGILState_Check(void)
{
-
- if (!_PyGILState_check_enabled) {
+ struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
+ if (!gilstate->check_enabled) {
return 1;
}
- struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
if (!PyThread_tss_is_created(&gilstate->autoTSSkey)) {
return 1;
}
@@ -1271,27 +1343,28 @@
PyGILState_STATE
PyGILState_Ensure(void)
{
- struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
- int current;
- PyThreadState *tcur;
- int need_init_threads = 0;
+ _PyRuntimeState *runtime = &_PyRuntime;
+ struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
/* Note that we do not auto-init Python here - apart from
potential races with 2 threads auto-initializing, pep-311
spells out other issues. Embedders are expected to have
- called Py_Initialize() and usually PyEval_InitThreads().
- */
- /* Py_Initialize() hasn't been called! */
+ called Py_Initialize(). */
+
+ /* Ensure that _PyEval_InitThreads() and _PyGILState_Init() have been
+ called by Py_Initialize() */
+ assert(_PyEval_ThreadsInitialized(runtime));
assert(gilstate->autoInterpreterState);
- tcur = (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
+ PyThreadState *tcur = (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
+ int current;
if (tcur == NULL) {
- need_init_threads = 1;
-
- /* Create a new thread state for this thread */
+ /* Create a new Python thread state for this thread */
tcur = PyThreadState_New(gilstate->autoInterpreterState);
- if (tcur == NULL)
+ if (tcur == NULL) {
Py_FatalError("Couldn't create thread-state for new thread");
+ }
+
/* This is our thread state! We'll need to delete it in the
matching call to PyGILState_Release(). */
tcur->gilstate_counter = 0;
@@ -1312,13 +1385,6 @@
*/
++tcur->gilstate_counter;
- if (need_init_threads) {
- /* At startup, Python has no concrete GIL. If PyGILState_Ensure() is
- called from a new thread for the first time, we need the create the
- GIL. */
- PyEval_InitThreads();
- }
-
return current ? PyGILState_LOCKED : PyGILState_UNLOCKED;
}
@@ -1326,8 +1392,8 @@
PyGILState_Release(PyGILState_STATE oldstate)
{
_PyRuntimeState *runtime = &_PyRuntime;
- PyThreadState *tcur = PyThread_tss_get(&runtime->gilstate.autoTSSkey);
- if (tcur == NULL) {
+ PyThreadState *tstate = PyThread_tss_get(&runtime->gilstate.autoTSSkey);
+ if (tstate == NULL) {
Py_FatalError("auto-releasing thread-state, "
"but no thread-state for this thread");
}
@@ -1337,26 +1403,29 @@
but while this is very new (April 2003), the extra check
by release-only users can't hurt.
*/
- if (!PyThreadState_IsCurrent(tcur)) {
- Py_FatalError("This thread state must be current when releasing");
+ if (!PyThreadState_IsCurrent(tstate)) {
+ _Py_FatalErrorFormat(__func__,
+ "thread state %p must be current when releasing",
+ tstate);
}
- assert(PyThreadState_IsCurrent(tcur));
- --tcur->gilstate_counter;
- assert(tcur->gilstate_counter >= 0); /* illegal counter value */
+ assert(PyThreadState_IsCurrent(tstate));
+ --tstate->gilstate_counter;
+ assert(tstate->gilstate_counter >= 0); /* illegal counter value */
/* If we're going to destroy this thread-state, we must
* clear it while the GIL is held, as destructors may run.
*/
- if (tcur->gilstate_counter == 0) {
+ if (tstate->gilstate_counter == 0) {
/* can't have been locked when we created it */
assert(oldstate == PyGILState_UNLOCKED);
- PyThreadState_Clear(tcur);
+ PyThreadState_Clear(tstate);
/* Delete the thread-state. Note this releases the GIL too!
* It's vital that the GIL be held here, to avoid shutdown
* races; see bugs 225673 and 1061968 (that nasty bug has a
* habit of coming back).
*/
- _PyThreadState_DeleteCurrent(runtime);
+ assert(_PyRuntimeGILState_GetThreadState(&runtime->gilstate) == tstate);
+ _PyThreadState_DeleteCurrent(tstate);
}
/* Release the lock if necessary */
else if (oldstate == PyGILState_UNLOCKED)
@@ -1395,19 +1464,19 @@
}
static int
-_check_xidata(_PyCrossInterpreterData *data)
+_check_xidata(PyThreadState *tstate, _PyCrossInterpreterData *data)
{
// data->data can be anything, including NULL, so we don't check it.
// data->obj may be NULL, so we don't check it.
if (data->interp < 0) {
- PyErr_SetString(PyExc_SystemError, "missing interp");
+ _PyErr_SetString(tstate, PyExc_SystemError, "missing interp");
return -1;
}
if (data->new_object == NULL) {
- PyErr_SetString(PyExc_SystemError, "missing new_object func");
+ _PyErr_SetString(tstate, PyExc_SystemError, "missing new_object func");
return -1;
}
@@ -1419,9 +1488,9 @@
int
_PyObject_GetCrossInterpreterData(PyObject *obj, _PyCrossInterpreterData *data)
{
- // _PyInterpreterState_Get() aborts if lookup fails, so we don't need
- // to check the result for NULL.
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ // PyThreadState_Get() aborts if tstate is NULL.
+ PyThreadState *tstate = PyThreadState_Get();
+ PyInterpreterState *interp = tstate->interp;
// Reset data before re-populating.
*data = (_PyCrossInterpreterData){0};
@@ -1442,7 +1511,7 @@
// Fill in the blanks and validate the result.
data->interp = interp->id;
- if (_check_xidata(data) != 0) {
+ if (_check_xidata(tstate, data) != 0) {
_PyCrossInterpreterData_Release(data);
return -1;
}
@@ -1496,7 +1565,7 @@
// Switch to the original interpreter.
PyInterpreterState *interp = _PyInterpreterState_LookUpID(data->interp);
if (interp == NULL) {
- // The intepreter was already destroyed.
+ // The interpreter was already destroyed.
if (data->free != NULL) {
// XXX Someone leaked some memory...
}
@@ -1718,6 +1787,44 @@
}
+_PyFrameEvalFunction
+_PyInterpreterState_GetEvalFrameFunc(PyInterpreterState *interp)
+{
+ return interp->eval_frame;
+}
+
+
+void
+_PyInterpreterState_SetEvalFrameFunc(PyInterpreterState *interp,
+ _PyFrameEvalFunction eval_frame)
+{
+ interp->eval_frame = eval_frame;
+}
+
+
+const PyConfig*
+_PyInterpreterState_GetConfig(PyInterpreterState *interp)
+{
+ return &interp->config;
+}
+
+
+PyStatus
+_PyInterpreterState_SetConfig(PyInterpreterState *interp,
+ const PyConfig *config)
+{
+ return _PyConfig_Copy(&interp->config, config);
+}
+
+
+const PyConfig*
+_Py_GetConfig(void)
+{
+ assert(PyGILState_Check());
+ PyThreadState *tstate = _PyThreadState_GET();
+ return _PyInterpreterState_GetConfig(tstate->interp);
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/Python/pystrcmp.c b/Python/pystrcmp.c
index f9c2277..9224ce4 100644
--- a/Python/pystrcmp.c
+++ b/Python/pystrcmp.c
@@ -6,21 +6,25 @@
int
PyOS_mystrnicmp(const char *s1, const char *s2, Py_ssize_t size)
{
+ const unsigned char *p1, *p2;
if (size == 0)
return 0;
- while ((--size > 0) &&
- (tolower((unsigned)*s1) == tolower((unsigned)*s2))) {
- if (!*s1++ || !*s2++)
- break;
+ p1 = (const unsigned char *)s1;
+ p2 = (const unsigned char *)s2;
+ for (; (--size > 0) && *p1 && *p2 && (tolower(*p1) == tolower(*p2));
+ p1++, p2++) {
+ ;
}
- return tolower((unsigned)*s1) - tolower((unsigned)*s2);
+ return tolower(*p1) - tolower(*p2);
}
int
PyOS_mystricmp(const char *s1, const char *s2)
{
- while (*s1 && (tolower((unsigned)*s1++) == tolower((unsigned)*s2++))) {
+ const unsigned char *p1 = (const unsigned char *)s1;
+ const unsigned char *p2 = (const unsigned char *)s2;
+ for (; *p1 && *p2 && (tolower(*p1) == tolower(*p2)); p1++, p2++) {
;
}
- return (tolower((unsigned)*s1) - tolower((unsigned)*s2));
+ return (tolower(*p1) - tolower(*p2));
}
diff --git a/Python/pystrhex.c b/Python/pystrhex.c
index 9d34f71..b74e57a 100644
--- a/Python/pystrhex.c
+++ b/Python/pystrhex.c
@@ -8,12 +8,9 @@
const PyObject* sep, int bytes_per_sep_group,
const int return_bytes)
{
- PyObject *retval;
- Py_UCS1* retbuf;
- Py_ssize_t i, j, resultlen = 0;
- Py_UCS1 sep_char = 0;
- unsigned int abs_bytes_per_sep;
+ assert(arglen >= 0);
+ Py_UCS1 sep_char = 0;
if (sep) {
Py_ssize_t seplen = PyObject_Length((PyObject*)sep);
if (seplen < 0) {
@@ -31,9 +28,11 @@
return NULL;
}
sep_char = PyUnicode_READ_CHAR(sep, 0);
- } else if (PyBytes_Check(sep)) {
+ }
+ else if (PyBytes_Check(sep)) {
sep_char = PyBytes_AS_STRING(sep)[0];
- } else {
+ }
+ else {
PyErr_SetString(PyExc_TypeError, "sep must be str or bytes.");
return NULL;
}
@@ -41,12 +40,13 @@
PyErr_SetString(PyExc_ValueError, "sep must be ASCII.");
return NULL;
}
- } else {
+ }
+ else {
bytes_per_sep_group = 0;
}
- assert(arglen >= 0);
- abs_bytes_per_sep = abs(bytes_per_sep_group);
+ unsigned int abs_bytes_per_sep = abs(bytes_per_sep_group);
+ Py_ssize_t resultlen = 0;
if (bytes_per_sep_group && arglen > 0) {
/* How many sep characters we'll be inserting. */
resultlen = (arglen - 1) / abs_bytes_per_sep;
@@ -62,43 +62,82 @@
abs_bytes_per_sep = 0;
}
+ PyObject *retval;
+ Py_UCS1 *retbuf;
if (return_bytes) {
/* If _PyBytes_FromSize() were public we could avoid malloc+copy. */
- retbuf = (Py_UCS1*) PyMem_Malloc(resultlen);
- if (!retbuf)
- return PyErr_NoMemory();
- retval = NULL; /* silence a compiler warning, assigned later. */
- } else {
- retval = PyUnicode_New(resultlen, 127);
- if (!retval)
+ retval = PyBytes_FromStringAndSize(NULL, resultlen);
+ if (!retval) {
return NULL;
+ }
+ retbuf = (Py_UCS1 *)PyBytes_AS_STRING(retval);
+ }
+ else {
+ retval = PyUnicode_New(resultlen, 127);
+ if (!retval) {
+ return NULL;
+ }
retbuf = PyUnicode_1BYTE_DATA(retval);
}
/* Hexlify */
- for (i=j=0; i < arglen; ++i) {
- assert(j < resultlen);
- unsigned char c;
- c = (argbuf[i] >> 4) & 0xf;
- retbuf[j++] = Py_hexdigits[c];
- c = argbuf[i] & 0xf;
- retbuf[j++] = Py_hexdigits[c];
- if (bytes_per_sep_group && i < arglen - 1) {
- Py_ssize_t anchor;
- anchor = (bytes_per_sep_group > 0) ? (arglen - 1 - i) : (i + 1);
- if (anchor % abs_bytes_per_sep == 0) {
+ Py_ssize_t i, j;
+ unsigned char c;
+
+ if (bytes_per_sep_group == 0) {
+ for (i = j = 0; i < arglen; ++i) {
+ assert((j + 1) < resultlen);
+ c = argbuf[i];
+ retbuf[j++] = Py_hexdigits[c >> 4];
+ retbuf[j++] = Py_hexdigits[c & 0x0f];
+ }
+ assert(j == resultlen);
+ }
+ else {
+ /* The number of complete chunk+sep periods */
+ Py_ssize_t chunks = (arglen - 1) / abs_bytes_per_sep;
+ Py_ssize_t chunk;
+ unsigned int k;
+
+ if (bytes_per_sep_group < 0) {
+ i = j = 0;
+ for (chunk = 0; chunk < chunks; chunk++) {
+ for (k = 0; k < abs_bytes_per_sep; k++) {
+ c = argbuf[i++];
+ retbuf[j++] = Py_hexdigits[c >> 4];
+ retbuf[j++] = Py_hexdigits[c & 0x0f];
+ }
retbuf[j++] = sep_char;
}
+ while (i < arglen) {
+ c = argbuf[i++];
+ retbuf[j++] = Py_hexdigits[c >> 4];
+ retbuf[j++] = Py_hexdigits[c & 0x0f];
+ }
+ assert(j == resultlen);
+ }
+ else {
+ i = arglen - 1;
+ j = resultlen - 1;
+ for (chunk = 0; chunk < chunks; chunk++) {
+ for (k = 0; k < abs_bytes_per_sep; k++) {
+ c = argbuf[i--];
+ retbuf[j--] = Py_hexdigits[c & 0x0f];
+ retbuf[j--] = Py_hexdigits[c >> 4];
+ }
+ retbuf[j--] = sep_char;
+ }
+ while (i >= 0) {
+ c = argbuf[i--];
+ retbuf[j--] = Py_hexdigits[c & 0x0f];
+ retbuf[j--] = Py_hexdigits[c >> 4];
+ }
+ assert(j == -1);
}
}
- assert(j == resultlen);
- if (return_bytes) {
- retval = PyBytes_FromStringAndSize((const char *)retbuf, resultlen);
- PyMem_Free(retbuf);
- }
#ifdef Py_DEBUG
- else {
+ if (!return_bytes) {
assert(_PyUnicode_CheckConsistency(retval, 1));
}
#endif
diff --git a/Python/pystrtod.c b/Python/pystrtod.c
index 4aa99d5..1c8202c 100644
--- a/Python/pystrtod.c
+++ b/Python/pystrtod.c
@@ -1,6 +1,7 @@
/* -*- Mode: C; c-file-style: "python" -*- */
#include <Python.h>
+#include "pycore_dtoa.h"
#include <locale.h>
/* Case-insensitive string match used for nan and inf detection; t should be
@@ -342,9 +343,7 @@
char *fail_pos;
errno = 0;
- PyFPE_START_PROTECT("PyOS_string_to_double", return -1.0)
x = _PyOS_ascii_strtod(s, &fail_pos);
- PyFPE_END_PROTECT(x)
if (errno == ENOMEM) {
PyErr_NoMemory();
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 6cdd8ea..70748dc 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -12,33 +12,34 @@
#include "Python-ast.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
-#include "pycore_pyerrors.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pystate.h"
-#include "grammar.h"
-#include "node.h"
-#include "token.h"
-#include "parsetok.h"
-#include "errcode.h"
-#include "code.h"
-#include "symtable.h"
-#include "ast.h"
-#include "marshal.h"
-#include "osdefs.h"
-#include <locale.h>
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
+#include "pycore_interp.h" // PyInterpreterState.importlib
+#include "pycore_object.h" // _PyDebug_PrintTotalRefs()
+#include "pycore_pyerrors.h" // _PyErr_Fetch
+#include "pycore_pylifecycle.h" // _Py_UnhandledKeyboardInterrupt
+#include "pycore_pystate.h" // _PyInterpreterState_GET()
+#include "pycore_sysmodule.h" // _PySys_Audit()
+
+#include "node.h" // node
+#include "token.h" // INDENT
+#include "parsetok.h" // perrdetail
+#include "errcode.h" // E_EOF
+#include "code.h" // PyCodeObject
+#include "symtable.h" // PySymtable_BuildObject()
+#include "ast.h" // PyAST_FromNodeObject()
+#include "marshal.h" // PyMarshal_ReadLongFromFile()
+
+#include "pegen_interface.h" // PyPegen_ASTFrom*
+
+#ifdef MS_WINDOWS
+# include "malloc.h" // alloca()
#endif
#ifdef MS_WINDOWS
-#include "malloc.h" /* for alloca */
+# undef BYTE
+# include "windows.h"
#endif
-#ifdef MS_WINDOWS
-#undef BYTE
-#include "windows.h"
-#endif
_Py_IDENTIFIER(builtins);
_Py_IDENTIFIER(excepthook);
@@ -57,7 +58,7 @@
extern "C" {
#endif
-extern grammar _PyParser_Grammar; /* From graminit.c */
+extern Py_EXPORTED_SYMBOL grammar _PyParser_Grammar; /* From graminit.c */
/* Forward */
static void flush_io(void);
@@ -94,7 +95,7 @@
PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
int nomem_count = 0;
#ifdef Py_REF_DEBUG
- int show_ref_count = _PyInterpreterState_Get()->config.show_ref_count;
+ int show_ref_count = _Py_GetConfig()->show_ref_count;
#endif
filename = PyUnicode_DecodeFSDefault(filename_str);
@@ -184,6 +185,7 @@
PyArena *arena;
const char *ps1 = "", *ps2 = "", *enc = NULL;
int errcode = 0;
+ int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
_Py_IDENTIFIER(encoding);
_Py_IDENTIFIER(__main__);
@@ -236,9 +238,17 @@
Py_XDECREF(oenc);
return -1;
}
- mod = PyParser_ASTFromFileObject(fp, filename, enc,
- Py_single_input, ps1, ps2,
- flags, &errcode, arena);
+
+ if (use_peg) {
+ mod = PyPegen_ASTFromFileObject(fp, filename, Py_single_input,
+ enc, ps1, ps2, flags, &errcode, arena);
+ }
+ else {
+ mod = PyParser_ASTFromFileObject(fp, filename, enc,
+ Py_single_input, ps1, ps2,
+ flags, &errcode, arena);
+ }
+
Py_XDECREF(v);
Py_XDECREF(w);
Py_XDECREF(oenc);
@@ -345,7 +355,7 @@
filename_obj = PyUnicode_DecodeFSDefault(filename);
if (filename_obj == NULL)
return -1;
- PyInterpreterState *interp = _PyInterpreterState_Get();
+ PyInterpreterState *interp = _PyInterpreterState_GET();
bootstrap = PyObject_GetAttrString(interp->importlib,
"_bootstrap_external");
if (bootstrap != NULL) {
@@ -468,9 +478,9 @@
static int
parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
- int *lineno, int *offset, PyObject **text)
+ Py_ssize_t *lineno, Py_ssize_t *offset, PyObject **text)
{
- int hold;
+ Py_ssize_t hold;
PyObject *v;
_Py_IDENTIFIER(msg);
_Py_IDENTIFIER(filename);
@@ -503,7 +513,7 @@
v = _PyObject_GetAttrId(err, &PyId_lineno);
if (!v)
goto finally;
- hold = _PyLong_AsInt(v);
+ hold = PyLong_AsSsize_t(v);
Py_DECREF(v);
if (hold < 0 && PyErr_Occurred())
goto finally;
@@ -516,7 +526,7 @@
*offset = -1;
Py_DECREF(v);
} else {
- hold = _PyLong_AsInt(v);
+ hold = PyLong_AsSsize_t(v);
Py_DECREF(v);
if (hold < 0 && PyErr_Occurred())
goto finally;
@@ -542,39 +552,67 @@
}
static void
-print_error_text(PyObject *f, int offset, PyObject *text_obj)
+print_error_text(PyObject *f, Py_ssize_t offset, PyObject *text_obj)
{
- const char *text;
- const char *nl;
-
- text = PyUnicode_AsUTF8(text_obj);
+ /* Convert text to a char pointer; return if error */
+ const char *text = PyUnicode_AsUTF8(text_obj);
if (text == NULL)
return;
- if (offset >= 0) {
- if (offset > 0 && (size_t)offset == strlen(text) && text[offset - 1] == '\n')
- offset--;
- for (;;) {
- nl = strchr(text, '\n');
- if (nl == NULL || nl-text >= offset)
- break;
- offset -= (int)(nl+1-text);
- text = nl+1;
- }
- while (*text == ' ' || *text == '\t' || *text == '\f') {
- text++;
- offset--;
- }
+ /* Convert offset from 1-based to 0-based */
+ offset--;
+
+ /* Strip leading whitespace from text, adjusting offset as we go */
+ while (*text == ' ' || *text == '\t' || *text == '\f') {
+ text++;
+ offset--;
}
+
+ /* Calculate text length excluding trailing newline */
+ Py_ssize_t len = strlen(text);
+ if (len > 0 && text[len-1] == '\n') {
+ len--;
+ }
+
+ /* Clip offset to at most len */
+ if (offset > len) {
+ offset = len;
+ }
+
+ /* Skip past newlines embedded in text */
+ for (;;) {
+ const char *nl = strchr(text, '\n');
+ if (nl == NULL) {
+ break;
+ }
+ Py_ssize_t inl = nl - text;
+ if (inl >= offset) {
+ break;
+ }
+ inl += 1;
+ text += inl;
+ len -= inl;
+ offset -= (int)inl;
+ }
+
+ /* Print text */
PyFile_WriteString(" ", f);
PyFile_WriteString(text, f);
- if (*text == '\0' || text[strlen(text)-1] != '\n')
+
+ /* Make sure there's a newline at the end */
+ if (text[len] != '\n') {
PyFile_WriteString("\n", f);
- if (offset == -1)
+ }
+
+ /* Don't print caret if it points to the left of the text */
+ if (offset < 0)
return;
+
+ /* Write caret line */
PyFile_WriteString(" ", f);
- while (--offset > 0)
+ while (--offset >= 0) {
PyFile_WriteString(" ", f);
+ }
PyFile_WriteString("^\n", f);
}
@@ -582,7 +620,7 @@
int
_Py_HandleSystemExit(int *exitcode_p)
{
- int inspect = _PyInterpreterState_GET_UNSAFE()->config.inspect;
+ int inspect = _Py_GetConfig()->inspect;
if (inspect) {
/* Don't exit if -i flag was given. This flag is set to 0
* when entering interactive mode for inspecting. */
@@ -695,8 +733,8 @@
}
}
hook = _PySys_GetObjectId(&PyId_excepthook);
- if (PySys_Audit("sys.excepthook", "OOOO", hook ? hook : Py_None,
- exception, v, tb) < 0) {
+ if (_PySys_Audit(tstate, "sys.excepthook", "OOOO", hook ? hook : Py_None,
+ exception, v, tb) < 0) {
if (PyErr_ExceptionMatches(PyExc_RuntimeError)) {
PyErr_Clear();
goto done;
@@ -795,7 +833,7 @@
_PyObject_HasAttrId(value, &PyId_print_file_and_line))
{
PyObject *message, *filename, *text;
- int lineno, offset;
+ Py_ssize_t lineno, offset;
if (!parse_syntax_error(value, &message, &filename,
&lineno, &offset, &text))
PyErr_Clear();
@@ -805,7 +843,7 @@
Py_DECREF(value);
value = message;
- line = PyUnicode_FromFormat(" File \"%S\", line %d\n",
+ line = PyUnicode_FromFormat(" File \"%S\", line %zd\n",
filename, lineno);
Py_DECREF(filename);
if (line != NULL) {
@@ -986,7 +1024,7 @@
Py_XDECREF(seen);
/* Call file.flush() */
- PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL);
+ PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush);
if (!res) {
/* Silently ignore file.flush() error */
PyErr_Clear();
@@ -1020,6 +1058,7 @@
mod_ty mod;
PyArena *arena;
PyObject *filename;
+ int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
filename = _PyUnicode_FromId(&PyId_string); /* borrowed */
if (filename == NULL)
@@ -1029,7 +1068,13 @@
if (arena == NULL)
return NULL;
- mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ if (use_peg) {
+ mod = PyPegen_ASTFromStringObject(str, filename, start, flags, arena);
+ }
+ else {
+ mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ }
+
if (mod != NULL)
ret = run_mod(mod, filename, globals, locals, flags, arena);
PyArena_Free(arena);
@@ -1044,6 +1089,7 @@
mod_ty mod;
PyArena *arena = NULL;
PyObject *filename;
+ int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
filename = PyUnicode_DecodeFSDefault(filename_str);
if (filename == NULL)
@@ -1053,8 +1099,15 @@
if (arena == NULL)
goto exit;
- mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
- flags, NULL, arena);
+ if (use_peg) {
+ mod = PyPegen_ASTFromFileObject(fp, filename, start, NULL, NULL, NULL,
+ flags, NULL, arena);
+ }
+ else {
+ mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
+ flags, NULL, arena);
+ }
+
if (closeit)
fclose(fp);
if (mod == NULL) {
@@ -1080,7 +1133,7 @@
f = _PySys_GetObjectId(&PyId_stderr);
if (f != NULL) {
- r = _PyObject_CallMethodId(f, &PyId_flush, NULL);
+ r = _PyObject_CallMethodIdNoArgs(f, &PyId_flush);
if (r)
Py_DECREF(r);
else
@@ -1088,7 +1141,7 @@
}
f = _PySys_GetObjectId(&PyId_stdout);
if (f != NULL) {
- r = _PyObject_CallMethodId(f, &PyId_flush, NULL);
+ r = _PyObject_CallMethodIdNoArgs(f, &PyId_flush);
if (r)
Py_DECREF(r);
else
@@ -1099,7 +1152,7 @@
}
static PyObject *
-run_eval_code_obj(PyCodeObject *co, PyObject *globals, PyObject *locals)
+run_eval_code_obj(PyThreadState *tstate, PyCodeObject *co, PyObject *globals, PyObject *locals)
{
PyObject *v;
/*
@@ -1116,14 +1169,14 @@
/* Set globals['__builtins__'] if it doesn't exist */
if (globals != NULL && PyDict_GetItemString(globals, "__builtins__") == NULL) {
- PyInterpreterState *interp = _PyInterpreterState_Get();
- if (PyDict_SetItemString(globals, "__builtins__", interp->builtins) < 0) {
+ if (PyDict_SetItemString(globals, "__builtins__",
+ tstate->interp->builtins) < 0) {
return NULL;
}
}
v = PyEval_EvalCode((PyObject*)co, globals, locals);
- if (!v && PyErr_Occurred() == PyExc_KeyboardInterrupt) {
+ if (!v && _PyErr_Occurred(tstate) == PyExc_KeyboardInterrupt) {
_Py_UnhandledKeyboardInterrupt = 1;
}
return v;
@@ -1133,18 +1186,17 @@
run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
PyCompilerFlags *flags, PyArena *arena)
{
- PyCodeObject *co;
- PyObject *v;
- co = PyAST_CompileObject(mod, filename, flags, -1, arena);
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyCodeObject *co = PyAST_CompileObject(mod, filename, flags, -1, arena);
if (co == NULL)
return NULL;
- if (PySys_Audit("exec", "O", co) < 0) {
+ if (_PySys_Audit(tstate, "exec", "O", co) < 0) {
Py_DECREF(co);
return NULL;
}
- v = run_eval_code_obj(co, globals, locals);
+ PyObject *v = run_eval_code_obj(tstate, co, globals, locals);
Py_DECREF(co);
return v;
}
@@ -1153,6 +1205,7 @@
run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
PyObject *locals, PyCompilerFlags *flags)
{
+ PyThreadState *tstate = _PyThreadState_GET();
PyCodeObject *co;
PyObject *v;
long magic;
@@ -1181,7 +1234,7 @@
}
fclose(fp);
co = (PyCodeObject *)v;
- v = run_eval_code_obj(co, globals, locals);
+ v = run_eval_code_obj(tstate, co, globals, locals);
if (v && flags)
flags->cf_flags |= (co->co_flags & PyCF_MASK);
Py_DECREF(co);
@@ -1197,11 +1250,17 @@
{
PyCodeObject *co;
mod_ty mod;
+ int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
PyArena *arena = PyArena_New();
if (arena == NULL)
return NULL;
- mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ if (use_peg) {
+ mod = PyPegen_ASTFromStringObject(str, filename, start, flags, arena);
+ }
+ else {
+ mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ }
if (mod == NULL) {
PyArena_Free(arena);
return NULL;
@@ -1298,13 +1357,19 @@
{
struct symtable *st;
mod_ty mod;
+ int use_peg = _PyInterpreterState_GET()->config._use_peg_parser;
PyArena *arena;
arena = PyArena_New();
if (arena == NULL)
return NULL;
- mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ if (use_peg) {
+ mod = PyPegen_ASTFromStringObject(str, filename, start, flags, arena);
+ }
+ else {
+ mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
+ }
if (mod == NULL) {
PyArena_Free(arena);
return NULL;
@@ -1566,9 +1631,6 @@
msg = "unexpected character after line continuation character";
break;
- case E_IDENTIFIER:
- msg = "invalid character in identifier";
- break;
case E_BADSINGLE:
msg = "multiple statements found while compiling a single statement";
break;
diff --git a/Python/pytime.c b/Python/pytime.c
index 109d526..89d63e0 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -5,6 +5,12 @@
#if defined(__APPLE__)
#include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */
+
+#if defined(__APPLE__) && defined(__has_builtin)
+# if __has_builtin(__builtin_available)
+# define HAVE_CLOCK_GETTIME_RUNTIME __builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)
+# endif
+#endif
#endif
#define _PyTime_check_mul_overflow(a, b) \
@@ -683,15 +689,22 @@
#else /* MS_WINDOWS */
int err;
-#ifdef HAVE_CLOCK_GETTIME
+#if defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
-#else
+#endif
+
+#if !defined(HAVE_CLOCK_GETTIME) || defined(__APPLE__)
struct timeval tv;
#endif
assert(info == NULL || raise);
#ifdef HAVE_CLOCK_GETTIME
+
+#ifdef HAVE_CLOCK_GETTIME_RUNTIME
+ if (HAVE_CLOCK_GETTIME_RUNTIME) {
+#endif
+
err = clock_gettime(CLOCK_REALTIME, &ts);
if (err) {
if (raise) {
@@ -715,14 +728,17 @@
info->resolution = 1e-9;
}
}
-#else /* HAVE_CLOCK_GETTIME */
+
+#ifdef HAVE_CLOCK_GETTIME_RUNTIME
+ } else {
+#endif
+
+#endif
+
+#if !defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_GETTIME_RUNTIME)
/* test gettimeofday() */
-#ifdef GETTIMEOFDAY_NO_TZ
- err = gettimeofday(&tv);
-#else
err = gettimeofday(&tv, (struct timezone *)NULL);
-#endif
if (err) {
if (raise) {
PyErr_SetFromErrno(PyExc_OSError);
@@ -739,6 +755,11 @@
info->monotonic = 0;
info->adjustable = 1;
}
+
+#if defined(HAVE_CLOCK_GETTIME_RUNTIME) && defined(HAVE_CLOCK_GETTIME)
+ } /* end of availibity block */
+#endif
+
#endif /* !HAVE_CLOCK_GETTIME */
#endif /* !MS_WINDOWS */
return 0;
@@ -750,7 +771,7 @@
_PyTime_t t;
if (pygettimeofday(&t, NULL, 0) < 0) {
/* should not happen, _PyTime_Init() checked the clock at startup */
- Py_UNREACHABLE();
+ Py_FatalError("pygettimeofday() failed");
}
return t;
}
@@ -780,7 +801,7 @@
return -1;
}
/* Hello, time traveler! */
- Py_UNREACHABLE();
+ Py_FatalError("pymonotonic: integer overflow");
}
*tp = t * MS_TO_NS;
@@ -922,7 +943,7 @@
if (pymonotonic(&t, NULL, 0) < 0) {
/* should not happen, _PyTime_Init() checked that monotonic clock at
startup */
- Py_UNREACHABLE();
+ Py_FatalError("pymonotonic() failed");
}
return t;
}
@@ -1023,7 +1044,7 @@
{
_PyTime_t t;
if (_PyTime_GetPerfCounterWithInfo(&t, NULL)) {
- Py_UNREACHABLE();
+ Py_FatalError("_PyTime_GetPerfCounterWithInfo() failed");
}
return t;
}
@@ -1063,7 +1084,7 @@
return 0;
#else /* !MS_WINDOWS */
-#ifdef _AIX
+#if defined(_AIX) && (SIZEOF_TIME_T < 8)
/* bpo-34373: AIX does not return NULL if t is too small or too large */
if (t < -2145916800 /* 1902-01-01 */
|| t > 2145916800 /* 2038-01-01 */) {
diff --git a/Python/structmember.c b/Python/structmember.c
index e653d02..ba88e15 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -2,8 +2,7 @@
/* Map C struct members to Python object attributes */
#include "Python.h"
-
-#include "structmember.h"
+#include "structmember.h" // PyMemberDef
PyObject *
PyMember_GetOne(const char *addr, PyMemberDef *l)
diff --git a/Python/symtable.c b/Python/symtable.c
index 30482d9..d192f31 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -1,8 +1,8 @@
#include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h" // _PyThreadState_GET()
#include "symtable.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
-#include "structmember.h"
+#include "structmember.h" // PyMemberDef
/* error strings used for warnings */
#define GLOBAL_PARAM \
@@ -190,7 +190,7 @@
static int symtable_enter_block(struct symtable *st, identifier name,
_Py_block_ty block, void *ast, int lineno,
int col_offset);
-static int symtable_exit_block(struct symtable *st, void *ast);
+static int symtable_exit_block(struct symtable *st);
static int symtable_visit_stmt(struct symtable *st, stmt_ty s);
static int symtable_visit_expr(struct symtable *st, expr_ty s);
static int symtable_visit_genexp(struct symtable *st, expr_ty s);
@@ -202,11 +202,10 @@
static int symtable_visit_alias(struct symtable *st, alias_ty);
static int symtable_visit_comprehension(struct symtable *st, comprehension_ty);
static int symtable_visit_keyword(struct symtable *st, keyword_ty);
-static int symtable_visit_slice(struct symtable *st, slice_ty);
static int symtable_visit_params(struct symtable *st, asdl_seq *args);
static int symtable_visit_argannotations(struct symtable *st, asdl_seq *args);
static int symtable_implicit_arg(struct symtable *st, int pos);
-static int symtable_visit_annotations(struct symtable *st, stmt_ty s, arguments_ty, expr_ty);
+static int symtable_visit_annotations(struct symtable *st, arguments_ty, expr_ty);
static int symtable_visit_withitem(struct symtable *st, withitem_ty item);
@@ -318,16 +317,12 @@
(stmt_ty)asdl_seq_GET(seq, i)))
goto error;
break;
- case Suite_kind:
- PyErr_SetString(PyExc_RuntimeError,
- "this compiler does not handle Suites");
- goto error;
case FunctionType_kind:
PyErr_SetString(PyExc_RuntimeError,
"this compiler does not handle FunctionTypes");
goto error;
}
- if (!symtable_exit_block(st, (void *)mod)) {
+ if (!symtable_exit_block(st)) {
PySymtable_Free(st);
return NULL;
}
@@ -345,7 +340,7 @@
PySymtable_Free(st);
return NULL;
error:
- (void) symtable_exit_block(st, (void *)mod);
+ (void) symtable_exit_block(st);
PySymtable_Free(st);
return NULL;
}
@@ -954,7 +949,7 @@
*/
static int
-symtable_exit_block(struct symtable *st, void *ast)
+symtable_exit_block(struct symtable *st)
{
Py_ssize_t size;
@@ -1188,7 +1183,7 @@
VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
if (s->v.FunctionDef.args->kw_defaults)
VISIT_SEQ_WITH_NULL(st, expr, s->v.FunctionDef.args->kw_defaults);
- if (!symtable_visit_annotations(st, s, s->v.FunctionDef.args,
+ if (!symtable_visit_annotations(st, s->v.FunctionDef.args,
s->v.FunctionDef.returns))
VISIT_QUIT(st, 0);
if (s->v.FunctionDef.decorator_list)
@@ -1199,7 +1194,7 @@
VISIT_QUIT(st, 0);
VISIT(st, arguments, s->v.FunctionDef.args);
VISIT_SEQ(st, stmt, s->v.FunctionDef.body);
- if (!symtable_exit_block(st, s))
+ if (!symtable_exit_block(st))
VISIT_QUIT(st, 0);
break;
case ClassDef_kind: {
@@ -1217,7 +1212,7 @@
st->st_private = s->v.ClassDef.name;
VISIT_SEQ(st, stmt, s->v.ClassDef.body);
st->st_private = tmp;
- if (!symtable_exit_block(st, s))
+ if (!symtable_exit_block(st))
VISIT_QUIT(st, 0);
break;
}
@@ -1406,7 +1401,7 @@
if (s->v.AsyncFunctionDef.args->kw_defaults)
VISIT_SEQ_WITH_NULL(st, expr,
s->v.AsyncFunctionDef.args->kw_defaults);
- if (!symtable_visit_annotations(st, s, s->v.AsyncFunctionDef.args,
+ if (!symtable_visit_annotations(st, s->v.AsyncFunctionDef.args,
s->v.AsyncFunctionDef.returns))
VISIT_QUIT(st, 0);
if (s->v.AsyncFunctionDef.decorator_list)
@@ -1418,7 +1413,7 @@
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))
+ if (!symtable_exit_block(st))
VISIT_QUIT(st, 0);
break;
case AsyncWith_kind:
@@ -1565,7 +1560,7 @@
VISIT_QUIT(st, 0);
VISIT(st, arguments, e->v.Lambda.args);
VISIT(st, expr, e->v.Lambda.body);
- if (!symtable_exit_block(st, (void *)e))
+ if (!symtable_exit_block(st))
VISIT_QUIT(st, 0);
break;
}
@@ -1636,11 +1631,19 @@
break;
case Subscript_kind:
VISIT(st, expr, e->v.Subscript.value);
- VISIT(st, slice, e->v.Subscript.slice);
+ VISIT(st, expr, e->v.Subscript.slice);
break;
case Starred_kind:
VISIT(st, expr, e->v.Starred.value);
break;
+ case Slice_kind:
+ if (e->v.Slice.lower)
+ VISIT(st, expr, e->v.Slice.lower)
+ if (e->v.Slice.upper)
+ VISIT(st, expr, e->v.Slice.upper)
+ if (e->v.Slice.step)
+ VISIT(st, expr, e->v.Slice.step)
+ break;
case Name_kind:
if (!symtable_add_def(st, e->v.Name.id,
e->v.Name.ctx == Load ? USE : DEF_LOCAL))
@@ -1714,8 +1717,7 @@
}
static int
-symtable_visit_annotations(struct symtable *st, stmt_ty s,
- arguments_ty a, expr_ty returns)
+symtable_visit_annotations(struct symtable *st, arguments_ty a, expr_ty returns)
{
if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs))
return 0;
@@ -1847,28 +1849,6 @@
static int
-symtable_visit_slice(struct symtable *st, slice_ty s)
-{
- switch (s->kind) {
- case Slice_kind:
- if (s->v.Slice.lower)
- VISIT(st, expr, s->v.Slice.lower)
- if (s->v.Slice.upper)
- VISIT(st, expr, s->v.Slice.upper)
- if (s->v.Slice.step)
- VISIT(st, expr, s->v.Slice.step)
- break;
- case ExtSlice_kind:
- VISIT_SEQ(st, slice, s->v.ExtSlice.dims)
- break;
- case Index_kind:
- VISIT(st, expr, s->v.Index.value)
- break;
- }
- return 1;
-}
-
-static int
symtable_handle_comprehension(struct symtable *st, expr_ty e,
identifier scope_name, asdl_seq *generators,
expr_ty elt, expr_ty value)
@@ -1893,7 +1873,7 @@
/* Outermost iter is received as an argument */
if (!symtable_implicit_arg(st, 0)) {
- symtable_exit_block(st, (void *)e);
+ symtable_exit_block(st);
return 0;
}
/* Visit iteration variable target, and mark them as such */
@@ -1915,11 +1895,11 @@
PyErr_SyntaxLocationObject(st->st_filename,
st->st_cur->ste_lineno,
st->st_cur->ste_col_offset + 1);
- symtable_exit_block(st, (void *)e);
+ symtable_exit_block(st);
return 0;
}
st->st_cur->ste_generator = is_generator;
- return symtable_exit_block(st, (void *)e);
+ return symtable_exit_block(st);
}
static int
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index b544f2b..3e4115f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -16,17 +16,19 @@
#include "Python.h"
#include "code.h"
-#include "frameobject.h"
+#include "frameobject.h" // PyFrame_GetBack()
+#include "pycore_ceval.h" // _Py_RecursionLimitLowerWaterMark()
#include "pycore_initconfig.h"
-#include "pycore_pylifecycle.h"
-#include "pycore_pymem.h"
+#include "pycore_object.h"
#include "pycore_pathconfig.h"
-#include "pycore_pystate.h"
+#include "pycore_pyerrors.h"
+#include "pycore_pylifecycle.h"
+#include "pycore_pymem.h" // _PyMem_SetDefaultAllocator()
+#include "pycore_pystate.h" // _PyThreadState_GET()
#include "pycore_tupleobject.h"
-#include "pythread.h"
-#include "pydtrace.h"
-#include "osdefs.h"
+#include "pydtrace.h"
+#include "osdefs.h" // DELIM
#include <locale.h>
#ifdef MS_WINDOWS
@@ -59,10 +61,10 @@
_Py_IDENTIFIER(warnoptions);
_Py_IDENTIFIER(write);
-PyObject *
-_PySys_GetObjectId(_Py_Identifier *key)
+static PyObject *
+sys_get_object_id(PyThreadState *tstate, _Py_Identifier *key)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyObject *sd = tstate->interp->sysdict;
if (sd == NULL) {
return NULL;
}
@@ -70,19 +72,27 @@
}
PyObject *
+_PySys_GetObjectId(_Py_Identifier *key)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return sys_get_object_id(tstate, key);
+}
+
+PyObject *
PySys_GetObject(const char *name)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *sd = tstate->interp->sysdict;
if (sd == NULL) {
return NULL;
}
return PyDict_GetItemString(sd, name);
}
-int
-_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
+static int
+sys_set_object_id(PyThreadState *tstate, _Py_Identifier *key, PyObject *v)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyObject *sd = tstate->interp->sysdict;
if (v == NULL) {
if (_PyDict_GetItemId(sd, key) == NULL) {
return 0;
@@ -97,9 +107,16 @@
}
int
-PySys_SetObject(const char *name, PyObject *v)
+_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyThreadState *tstate = _PyThreadState_GET();
+ return sys_set_object_id(tstate, key, v);
+}
+
+static int
+sys_set_object(PyThreadState *tstate, const char *name, PyObject *v)
+{
+ PyObject *sd = tstate->interp->sysdict;
if (v == NULL) {
if (PyDict_GetItemString(sd, name) == NULL) {
return 0;
@@ -113,60 +130,74 @@
}
}
-static int
-should_audit(void)
+int
+PySys_SetObject(const char *name, PyObject *v)
{
- PyThreadState *ts = _PyThreadState_GET();
- if (!ts) {
- return 0;
- }
- PyInterpreterState *is = ts ? ts->interp : NULL;
- return _PyRuntime.audit_hook_head
- || (is && is->audit_hooks)
- || PyDTrace_AUDIT_ENABLED();
+ PyThreadState *tstate = _PyThreadState_GET();
+ return sys_set_object(tstate, name, v);
}
-int
-PySys_Audit(const char *event, const char *argFormat, ...)
+
+static int
+should_audit(PyInterpreterState *is)
{
+ /* tstate->interp cannot be NULL, but test it just in case
+ for extra safety */
+ assert(is != NULL);
+ if (!is) {
+ return 0;
+ }
+ return (is->runtime->audit_hook_head
+ || is->audit_hooks
+ || PyDTrace_AUDIT_ENABLED());
+}
+
+
+static int
+sys_audit_tstate(PyThreadState *ts, const char *event,
+ const char *argFormat, va_list vargs)
+{
+ /* N format is inappropriate, because you do not know
+ whether the reference is consumed by the call.
+ Assert rather than exception for perf reasons */
+ assert(!argFormat || !strchr(argFormat, 'N'));
+
+ if (!ts) {
+ /* Audit hooks cannot be called with a NULL thread state */
+ return 0;
+ }
+
+ /* The current implementation cannot be called if tstate is not
+ the current Python thread state. */
+ assert(ts == _PyThreadState_GET());
+
+ /* Early exit when no hooks are registered */
+ PyInterpreterState *is = ts->interp;
+ if (!should_audit(is)) {
+ return 0;
+ }
+
PyObject *eventName = NULL;
PyObject *eventArgs = NULL;
PyObject *hooks = NULL;
PyObject *hook = NULL;
int res = -1;
- /* N format is inappropriate, because you do not know
- whether the reference is consumed by the call.
- Assert rather than exception for perf reasons */
- assert(!argFormat || !strchr(argFormat, 'N'));
-
- /* Early exit when no hooks are registered */
- if (!should_audit()) {
- return 0;
- }
-
- _Py_AuditHookEntry *e = _PyRuntime.audit_hook_head;
- PyThreadState *ts = _PyThreadState_GET();
- PyInterpreterState *is = ts ? ts->interp : NULL;
int dtrace = PyDTrace_AUDIT_ENABLED();
PyObject *exc_type, *exc_value, *exc_tb;
- if (ts) {
- PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
- }
+ _PyErr_Fetch(ts, &exc_type, &exc_value, &exc_tb);
/* Initialize event args now */
if (argFormat && argFormat[0]) {
- va_list args;
- va_start(args, argFormat);
- eventArgs = _Py_VaBuildValue_SizeT(argFormat, args);
- va_end(args);
+ eventArgs = _Py_VaBuildValue_SizeT(argFormat, vargs);
if (eventArgs && !PyTuple_Check(eventArgs)) {
PyObject *argTuple = PyTuple_Pack(1, eventArgs);
Py_DECREF(eventArgs);
eventArgs = argTuple;
}
- } else {
+ }
+ else {
eventArgs = PyTuple_New(0);
}
if (!eventArgs) {
@@ -174,6 +205,7 @@
}
/* Call global hooks */
+ _Py_AuditHookEntry *e = is->runtime->audit_hook_head;
for (; e; e = e->next) {
if (e->hookCFunction(event, eventArgs, e->userData) < 0) {
goto exit;
@@ -186,7 +218,7 @@
}
/* Call interpreter hooks */
- if (is && is->audit_hooks) {
+ if (is->audit_hooks) {
eventName = PyUnicode_FromString(event);
if (!eventName) {
goto exit;
@@ -215,8 +247,8 @@
ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
ts->tracing--;
}
- o = PyObject_CallFunctionObjArgs(hook, eventName,
- eventArgs, NULL);
+ PyObject* args[2] = {eventName, eventArgs};
+ o = _PyObject_FastCallTstate(ts, hook, args, 2);
if (canTrace) {
ts->tracing++;
ts->use_tracing = 0;
@@ -229,7 +261,7 @@
}
ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
ts->tracing--;
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(ts)) {
goto exit;
}
}
@@ -242,43 +274,81 @@
Py_XDECREF(eventName);
Py_XDECREF(eventArgs);
- if (ts) {
- if (!res) {
- PyErr_Restore(exc_type, exc_value, exc_tb);
- } else {
- assert(PyErr_Occurred());
- Py_XDECREF(exc_type);
- Py_XDECREF(exc_value);
- Py_XDECREF(exc_tb);
- }
+ if (!res) {
+ _PyErr_Restore(ts, exc_type, exc_value, exc_tb);
+ }
+ else {
+ assert(_PyErr_Occurred(ts));
+ Py_XDECREF(exc_type);
+ Py_XDECREF(exc_value);
+ Py_XDECREF(exc_tb);
}
return res;
}
+int
+_PySys_Audit(PyThreadState *tstate, const char *event,
+ const char *argFormat, ...)
+{
+ va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+ va_start(vargs, argFormat);
+#else
+ va_start(vargs);
+#endif
+ int res = sys_audit_tstate(tstate, event, argFormat, vargs);
+ va_end(vargs);
+ return res;
+}
+
+int
+PySys_Audit(const char *event, const char *argFormat, ...)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ va_list vargs;
+#ifdef HAVE_STDARG_PROTOTYPES
+ va_start(vargs, argFormat);
+#else
+ va_start(vargs);
+#endif
+ int res = sys_audit_tstate(tstate, event, argFormat, vargs);
+ va_end(vargs);
+ return res;
+}
+
/* We expose this function primarily for our own cleanup during
* finalization. In general, it should not need to be called,
- * and as such it is not defined in any header files.
- */
-void _PySys_ClearAuditHooks(void) {
- /* Must be finalizing to clear hooks */
- _PyRuntimeState *runtime = &_PyRuntime;
- PyThreadState *ts = _PyRuntimeState_GetThreadState(runtime);
- assert(!ts || _Py_CURRENTLY_FINALIZING(runtime, ts));
- if (!ts || !_Py_CURRENTLY_FINALIZING(runtime, ts))
+ * and as such the function is not exported.
+ *
+ * Must be finalizing to clear hooks */
+void
+_PySys_ClearAuditHooks(PyThreadState *ts)
+{
+ assert(ts != NULL);
+ if (!ts) {
return;
+ }
- if (Py_VerboseFlag) {
+ _PyRuntimeState *runtime = ts->interp->runtime;
+ PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime);
+ assert(finalizing == ts);
+ if (finalizing != ts) {
+ return;
+ }
+
+ const PyConfig *config = _PyInterpreterState_GetConfig(ts->interp);
+ if (config->verbose) {
PySys_WriteStderr("# clear sys.audit hooks\n");
}
/* Hooks can abort later hooks for this event, but cannot
abort the clear operation itself. */
- PySys_Audit("cpython._PySys_ClearAuditHooks", NULL);
- PyErr_Clear();
+ _PySys_Audit(ts, "cpython._PySys_ClearAuditHooks", NULL);
+ _PyErr_Clear(ts);
- _Py_AuditHookEntry *e = _PyRuntime.audit_hook_head, *n;
- _PyRuntime.audit_hook_head = NULL;
+ _Py_AuditHookEntry *e = runtime->audit_hook_head, *n;
+ runtime->audit_hook_head = NULL;
while (e) {
n = e->next;
PyMem_RawFree(e);
@@ -289,33 +359,46 @@
int
PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
{
+ /* tstate can be NULL, so access directly _PyRuntime:
+ PySys_AddAuditHook() can be called before Python is initialized. */
+ _PyRuntimeState *runtime = &_PyRuntime;
+ PyThreadState *tstate;
+ if (runtime->initialized) {
+ tstate = _PyRuntimeState_GetThreadState(runtime);
+ }
+ else {
+ tstate = NULL;
+ }
+
/* Invoke existing audit hooks to allow them an opportunity to abort. */
/* Cannot invoke hooks until we are initialized */
- if (Py_IsInitialized()) {
- if (PySys_Audit("sys.addaudithook", NULL) < 0) {
- if (PyErr_ExceptionMatches(PyExc_RuntimeError)) {
+ if (tstate != NULL) {
+ if (_PySys_Audit(tstate, "sys.addaudithook", NULL) < 0) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_RuntimeError)) {
/* We do not report errors derived from RuntimeError */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
return 0;
}
return -1;
}
}
- _Py_AuditHookEntry *e = _PyRuntime.audit_hook_head;
+ _Py_AuditHookEntry *e = runtime->audit_hook_head;
if (!e) {
e = (_Py_AuditHookEntry*)PyMem_RawMalloc(sizeof(_Py_AuditHookEntry));
- _PyRuntime.audit_hook_head = e;
+ runtime->audit_hook_head = e;
} else {
- while (e->next)
+ while (e->next) {
e = e->next;
+ }
e = e->next = (_Py_AuditHookEntry*)PyMem_RawMalloc(
sizeof(_Py_AuditHookEntry));
}
if (!e) {
- if (Py_IsInitialized())
- PyErr_NoMemory();
+ if (tstate != NULL) {
+ _PyErr_NoMemory(tstate);
+ }
return -1;
}
@@ -338,18 +421,19 @@
sys_addaudithook_impl(PyObject *module, PyObject *hook)
/*[clinic end generated code: output=4f9c17aaeb02f44e input=0f3e191217a45e34]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
+
/* Invoke existing audit hooks to allow them an opportunity to abort. */
- if (PySys_Audit("sys.addaudithook", NULL) < 0) {
- if (PyErr_ExceptionMatches(PyExc_Exception)) {
+ if (_PySys_Audit(tstate, "sys.addaudithook", NULL) < 0) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_Exception)) {
/* We do not report errors derived from Exception */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
Py_RETURN_NONE;
}
return NULL;
}
- PyInterpreterState *is = _PyInterpreterState_Get();
-
+ PyInterpreterState *is = tstate->interp;
if (is->audit_hooks == NULL) {
is->audit_hooks = PyList_New(0);
if (is->audit_hooks == NULL) {
@@ -372,23 +456,30 @@
static PyObject *
sys_audit(PyObject *self, PyObject *const *args, Py_ssize_t argc)
{
+ PyThreadState *tstate = _PyThreadState_GET();
+ _Py_EnsureTstateNotNULL(tstate);
+
if (argc == 0) {
- PyErr_SetString(PyExc_TypeError, "audit() missing 1 required positional argument: 'event'");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "audit() missing 1 required positional argument: "
+ "'event'");
return NULL;
}
- if (!should_audit()) {
+ if (!should_audit(tstate->interp)) {
Py_RETURN_NONE;
}
PyObject *auditEvent = args[0];
if (!auditEvent) {
- PyErr_SetString(PyExc_TypeError, "expected str for argument 'event'");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "expected str for argument 'event'");
return NULL;
}
if (!PyUnicode_Check(auditEvent)) {
- PyErr_Format(PyExc_TypeError, "expected str for argument 'event', not %.200s",
- Py_TYPE(auditEvent)->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "expected str for argument 'event', not %.200s",
+ Py_TYPE(auditEvent)->tp_name);
return NULL;
}
const char *event = PyUnicode_AsUTF8(auditEvent);
@@ -401,7 +492,7 @@
return NULL;
}
- int res = PySys_Audit(event, "O", auditArgs);
+ int res = _PySys_Audit(tstate, event, "O", auditArgs);
Py_DECREF(auditArgs);
if (res < 0) {
@@ -415,7 +506,8 @@
static PyObject *
sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
{
- assert(!PyErr_Occurred());
+ PyThreadState *tstate = _PyThreadState_GET();
+ assert(!_PyErr_Occurred(tstate));
char *envar = Py_GETENV("PYTHONBREAKPOINT");
if (envar == NULL || strlen(envar) == 0) {
@@ -431,7 +523,7 @@
* we need to save a copy of envar. */
envar = _PyMem_RawStrdup(envar);
if (envar == NULL) {
- PyErr_NoMemory();
+ _PyErr_NoMemory(tstate);
return NULL;
}
const char *last_dot = strrchr(envar, '.');
@@ -460,7 +552,7 @@
Py_DECREF(modulepath);
if (module == NULL) {
- if (PyErr_ExceptionMatches(PyExc_ImportError)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) {
goto warn;
}
PyMem_RawFree(envar);
@@ -471,20 +563,20 @@
Py_DECREF(module);
if (hook == NULL) {
- if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
goto warn;
}
PyMem_RawFree(envar);
return NULL;
}
PyMem_RawFree(envar);
- PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
+ PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
Py_DECREF(hook);
return retval;
warn:
/* If any of the imports went wrong, then warn and ignore. */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
int status = PyErr_WarnFormat(
PyExc_RuntimeWarning, 0,
"Ignoring unimportable $PYTHONBREAKPOINT: \"%s\"", envar);
@@ -539,7 +631,7 @@
goto error;
}
if (buffer) {
- result = _PyObject_CallMethodIdObjArgs(buffer, &PyId_write, encoded, NULL);
+ result = _PyObject_CallMethodIdOneArg(buffer, &PyId_write, encoded);
Py_DECREF(buffer);
Py_DECREF(encoded);
if (result == NULL)
@@ -583,12 +675,13 @@
PyObject *outf;
PyObject *builtins;
static PyObject *newline = NULL;
- int err;
+ PyThreadState *tstate = _PyThreadState_GET();
builtins = _PyImport_GetModuleId(&PyId_builtins);
if (builtins == NULL) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_RuntimeError, "lost builtins module");
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "lost builtins module");
}
return NULL;
}
@@ -602,19 +695,21 @@
}
if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0)
return NULL;
- outf = _PySys_GetObjectId(&PyId_stdout);
+ outf = sys_get_object_id(tstate, &PyId_stdout);
if (outf == NULL || outf == Py_None) {
- PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+ _PyErr_SetString(tstate, PyExc_RuntimeError, "lost sys.stdout");
return NULL;
}
if (PyFile_WriteObject(o, outf, 0) != 0) {
- if (PyErr_ExceptionMatches(PyExc_UnicodeEncodeError)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_UnicodeEncodeError)) {
+ int err;
/* repr(o) is not encodable to sys.stdout.encoding with
* sys.stdout.errors error handler (which is probably 'strict') */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
err = sys_displayhook_unencodable(outf, o);
- if (err)
+ if (err) {
return NULL;
+ }
}
else {
return NULL;
@@ -721,7 +816,8 @@
/*[clinic end generated code: output=13870986c1ab2ec0 input=b86ca9497baa94f2]*/
{
/* Raise SystemExit so callers may catch it or clean up. */
- PyErr_SetObject(PyExc_SystemExit, status);
+ PyThreadState *tstate = _PyThreadState_GET();
+ _PyErr_SetObject(tstate, PyExc_SystemExit, status);
return NULL;
}
@@ -750,8 +846,8 @@
sys_getfilesystemencoding_impl(PyObject *module)
/*[clinic end generated code: output=1dc4bdbe9be44aa7 input=8475f8649b8c7d8c]*/
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- const PyConfig *config = &interp->config;
+ PyInterpreterState *interp = _PyInterpreterState_GET();
+ const PyConfig *config = _PyInterpreterState_GetConfig(interp);
return PyUnicode_FromWideChar(config->filesystem_encoding, -1);
}
@@ -765,8 +861,8 @@
sys_getfilesystemencodeerrors_impl(PyObject *module)
/*[clinic end generated code: output=ba77b36bbf7c96f5 input=22a1e8365566f1e5]*/
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- const PyConfig *config = &interp->config;
+ PyInterpreterState *interp = _PyInterpreterState_GET();
+ const PyConfig *config = _PyInterpreterState_GetConfig(interp);
return PyUnicode_FromWideChar(config->filesystem_errors, -1);
}
@@ -787,14 +883,15 @@
sys_intern_impl(PyObject *module, PyObject *s)
/*[clinic end generated code: output=be680c24f5c9e5d6 input=849483c006924e2f]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
if (PyUnicode_CheckExact(s)) {
Py_INCREF(s);
PyUnicode_InternInPlace(&s);
return s;
}
else {
- PyErr_Format(PyExc_TypeError,
- "can't intern %.400s", s->ob_type->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "can't intern %.400s", Py_TYPE(s)->tp_name);
return NULL;
}
}
@@ -829,22 +926,20 @@
static PyObject *
-call_trampoline(PyObject* callback,
+call_trampoline(PyThreadState *tstate, PyObject* callback,
PyFrameObject *frame, int what, PyObject *arg)
{
- PyObject *result;
- PyObject *stack[3];
-
if (PyFrame_FastToLocalsWithError(frame) < 0) {
return NULL;
}
+ PyObject *stack[3];
stack[0] = (PyObject *)frame;
stack[1] = whatstrings[what];
stack[2] = (arg != NULL) ? arg : Py_None;
/* call the Python-level function */
- result = _PyObject_FastCall(callback, stack, 3);
+ PyObject *result = _PyObject_FastCallTstate(tstate, callback, stack, 3);
PyFrame_LocalsToFast(frame, 1);
if (result == NULL) {
@@ -858,15 +953,17 @@
profile_trampoline(PyObject *self, PyFrameObject *frame,
int what, PyObject *arg)
{
- PyObject *result;
-
- if (arg == NULL)
+ if (arg == NULL) {
arg = Py_None;
- result = call_trampoline(self, frame, what, arg);
+ }
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *result = call_trampoline(tstate, self, frame, what, arg);
if (result == NULL) {
- PyEval_SetProfile(NULL, NULL);
+ _PyEval_SetProfile(tstate, NULL, NULL);
return -1;
}
+
Py_DECREF(result);
return 0;
}
@@ -876,20 +973,24 @@
int what, PyObject *arg)
{
PyObject *callback;
- PyObject *result;
-
- if (what == PyTrace_CALL)
+ if (what == PyTrace_CALL) {
callback = self;
- else
+ }
+ else {
callback = frame->f_trace;
- if (callback == NULL)
+ }
+ if (callback == NULL) {
return 0;
- result = call_trampoline(callback, frame, what, arg);
+ }
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *result = call_trampoline(tstate, callback, frame, what, arg);
if (result == NULL) {
- PyEval_SetTrace(NULL, NULL);
+ _PyEval_SetTrace(tstate, NULL, NULL);
Py_CLEAR(frame->f_trace);
return -1;
}
+
if (result != Py_None) {
Py_XSETREF(frame->f_trace, result);
}
@@ -902,12 +1003,21 @@
static PyObject *
sys_settrace(PyObject *self, PyObject *args)
{
- if (trace_init() == -1)
+ if (trace_init() == -1) {
return NULL;
- if (args == Py_None)
- PyEval_SetTrace(NULL, NULL);
- else
- PyEval_SetTrace(trace_trampoline, args);
+ }
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (args == Py_None) {
+ if (_PyEval_SetTrace(tstate, NULL, NULL) < 0) {
+ return NULL;
+ }
+ }
+ else {
+ if (_PyEval_SetTrace(tstate, trace_trampoline, args) < 0) {
+ return NULL;
+ }
+ }
Py_RETURN_NONE;
}
@@ -942,12 +1052,21 @@
static PyObject *
sys_setprofile(PyObject *self, PyObject *args)
{
- if (trace_init() == -1)
+ if (trace_init() == -1) {
return NULL;
- if (args == Py_None)
- PyEval_SetProfile(NULL, NULL);
- else
- PyEval_SetProfile(profile_trampoline, args);
+ }
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (args == Py_None) {
+ if (_PyEval_SetProfile(tstate, NULL, NULL) < 0) {
+ return NULL;
+ }
+ }
+ else {
+ if (_PyEval_SetProfile(tstate, profile_trampoline, args) < 0) {
+ return NULL;
+ }
+ }
Py_RETURN_NONE;
}
@@ -979,53 +1098,6 @@
return temp;
}
-/*[clinic input]
-sys.setcheckinterval
-
- n: int
- /
-
-Set the async event check interval to n instructions.
-
-This tells the Python interpreter to check for asynchronous events
-every n instructions.
-
-This also affects how often thread switches occur.
-[clinic start generated code]*/
-
-static PyObject *
-sys_setcheckinterval_impl(PyObject *module, int n)
-/*[clinic end generated code: output=3f686cef07e6e178 input=7a35b17bf22a6227]*/
-{
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "sys.getcheckinterval() and sys.setcheckinterval() "
- "are deprecated. Use sys.setswitchinterval() "
- "instead.", 1) < 0)
- return NULL;
-
- PyInterpreterState *interp = _PyInterpreterState_Get();
- interp->check_interval = n;
- Py_RETURN_NONE;
-}
-
-/*[clinic input]
-sys.getcheckinterval
-
-Return the current check interval; see sys.setcheckinterval().
-[clinic start generated code]*/
-
-static PyObject *
-sys_getcheckinterval_impl(PyObject *module)
-/*[clinic end generated code: output=1b5060bf2b23a47c input=4b6589cbcca1db4e]*/
-{
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "sys.getcheckinterval() and sys.setcheckinterval() "
- "are deprecated. Use sys.getswitchinterval() "
- "instead.", 1) < 0)
- return NULL;
- PyInterpreterState *interp = _PyInterpreterState_Get();
- return PyLong_FromLong(interp->check_interval);
-}
/*[clinic input]
sys.setswitchinterval
@@ -1047,9 +1119,10 @@
sys_setswitchinterval_impl(PyObject *module, double interval)
/*[clinic end generated code: output=65a19629e5153983 input=561b477134df91d9]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
if (interval <= 0.0) {
- PyErr_SetString(PyExc_ValueError,
- "switch interval must be strictly positive");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "switch interval must be strictly positive");
return NULL;
}
_PyEval_SetSwitchInterval((unsigned long) (1e6 * interval));
@@ -1088,11 +1161,11 @@
/*[clinic end generated code: output=35e1c64754800ace input=b0f7a23393924af3]*/
{
int mark;
- PyThreadState *tstate;
+ PyThreadState *tstate = _PyThreadState_GET();
if (new_limit < 1) {
- PyErr_SetString(PyExc_ValueError,
- "recursion limit must be greater or equal than 1");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "recursion limit must be greater or equal than 1");
return NULL;
}
@@ -1106,12 +1179,11 @@
the new low-water mark. Otherwise it may not be possible anymore to
reset the overflowed flag to 0. */
mark = _Py_RecursionLimitLowerWaterMark(new_limit);
- tstate = _PyThreadState_GET();
if (tstate->recursion_depth >= mark) {
- PyErr_Format(PyExc_RecursionError,
- "cannot set the recursion limit to %i at "
- "the recursion depth %i: the limit is too low",
- new_limit, tstate->recursion_depth);
+ _PyErr_Format(tstate, PyExc_RecursionError,
+ "cannot set the recursion limit to %i at "
+ "the recursion depth %i: the limit is too low",
+ new_limit, tstate->recursion_depth);
return NULL;
}
@@ -1136,11 +1208,12 @@
sys_set_coroutine_origin_tracking_depth_impl(PyObject *module, int depth)
/*[clinic end generated code: output=0a2123c1cc6759c5 input=a1d0a05f89d2c426]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
if (depth < 0) {
- PyErr_SetString(PyExc_ValueError, "depth must be >= 0");
+ _PyErr_SetString(tstate, PyExc_ValueError, "depth must be >= 0");
return NULL;
}
- _PyEval_SetCoroutineOriginTrackingDepth(depth);
+ _PyEval_SetCoroutineOriginTrackingDepth(tstate, depth);
Py_RETURN_NONE;
}
@@ -1178,57 +1251,13 @@
2
};
-static int
-set_async_gen_firstiter(PyObject *firstiter)
-{
- PyThreadState *tstate = _PyThreadState_GET();
-
- if (PySys_Audit("sys.set_asyncgen_hook_firstiter", NULL) < 0) {
- return -1;
- }
-
- Py_XINCREF(firstiter);
- Py_XSETREF(tstate->async_gen_firstiter, firstiter);
- return 0;
-}
-
-void
-_PyEval_SetAsyncGenFirstiter(PyObject *firstiter)
-{
- if (set_async_gen_firstiter(firstiter) < 0) {
- PyErr_WriteUnraisable(NULL);
- }
-}
-
-static int
-set_async_gen_finalizer(PyObject *finalizer)
-{
- PyThreadState *tstate = _PyThreadState_GET();
-
- if (PySys_Audit("sys.set_asyncgen_hook_finalizer", NULL) < 0) {
- return -1;
- }
-
- Py_XINCREF(finalizer);
- Py_XSETREF(tstate->async_gen_finalizer, finalizer);
- return 0;
-}
-
-void
-_PyEval_SetAsyncGenFinalizer(PyObject *finalizer)
-{
- if (set_async_gen_finalizer(finalizer) < 0) {
- PyErr_WriteUnraisable(NULL);
- }
-}
-
-
static PyObject *
sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
{
static char *keywords[] = {"firstiter", "finalizer", NULL};
PyObject *firstiter = NULL;
PyObject *finalizer = NULL;
+ PyThreadState *tstate = _PyThreadState_GET();
if (!PyArg_ParseTupleAndKeywords(
args, kw, "|OO", keywords,
@@ -1238,31 +1267,31 @@
if (finalizer && finalizer != Py_None) {
if (!PyCallable_Check(finalizer)) {
- PyErr_Format(PyExc_TypeError,
- "callable finalizer expected, got %.50s",
- Py_TYPE(finalizer)->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "callable finalizer expected, got %.50s",
+ Py_TYPE(finalizer)->tp_name);
return NULL;
}
- if (set_async_gen_finalizer(finalizer) < 0) {
+ if (_PyEval_SetAsyncGenFinalizer(finalizer) < 0) {
return NULL;
}
}
- else if (finalizer == Py_None && set_async_gen_finalizer(NULL) < 0) {
+ else if (finalizer == Py_None && _PyEval_SetAsyncGenFinalizer(NULL) < 0) {
return NULL;
}
if (firstiter && firstiter != Py_None) {
if (!PyCallable_Check(firstiter)) {
- PyErr_Format(PyExc_TypeError,
- "callable firstiter expected, got %.50s",
- Py_TYPE(firstiter)->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "callable firstiter expected, got %.50s",
+ Py_TYPE(firstiter)->tp_name);
return NULL;
}
- if (set_async_gen_firstiter(firstiter) < 0) {
+ if (_PyEval_SetAsyncGenFirstiter(firstiter) < 0) {
return NULL;
}
}
- else if (firstiter == Py_None && set_async_gen_firstiter(NULL) < 0) {
+ else if (firstiter == Py_None && _PyEval_SetAsyncGenFirstiter(NULL) < 0) {
return NULL;
}
@@ -1345,7 +1374,7 @@
};
static PyObject *
-get_hash_info(void)
+get_hash_info(PyThreadState *tstate)
{
PyObject *hash_info;
int field = 0;
@@ -1372,7 +1401,7 @@
PyLong_FromLong(hashfunc->seed_bits));
PyStructSequence_SET_ITEM(hash_info, field++,
PyLong_FromLong(Py_HASH_CUTOFF));
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_CLEAR(hash_info);
return NULL;
}
@@ -1456,6 +1485,7 @@
wchar_t kernel32_path[MAX_PATH];
LPVOID verblock;
DWORD verblock_size;
+ PyThreadState *tstate = _PyThreadState_GET();
ver.dwOSVersionInfoSize = sizeof(ver);
if (!GetVersionExW((OSVERSIONINFOW*) &ver))
@@ -1506,7 +1536,7 @@
realBuild
));
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_DECREF(version);
return NULL;
}
@@ -1563,8 +1593,8 @@
sys_setdlopenflags_impl(PyObject *module, int new_val)
/*[clinic end generated code: output=ec918b7fe0a37281 input=4c838211e857a77f]*/
{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- interp->dlopenflags = new_val;
+ PyThreadState *tstate = _PyThreadState_GET();
+ tstate->interp->dlopenflags = new_val;
Py_RETURN_NONE;
}
@@ -1581,8 +1611,8 @@
sys_getdlopenflags_impl(PyObject *module)
/*[clinic end generated code: output=e92cd1bc5005da6e input=dc4ea0899c53b4b6]*/
{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- return PyLong_FromLong(interp->dlopenflags);
+ PyThreadState *tstate = _PyThreadState_GET();
+ return PyLong_FromLong(tstate->interp->dlopenflags);
}
#endif /* HAVE_DLOPEN */
@@ -1614,17 +1644,20 @@
PyObject *res = NULL;
PyObject *method;
Py_ssize_t size;
+ PyThreadState *tstate = _PyThreadState_GET();
/* Make sure the type is initialized. float gets initialized late */
- if (PyType_Ready(Py_TYPE(o)) < 0)
+ if (PyType_Ready(Py_TYPE(o)) < 0) {
return (size_t)-1;
+ }
method = _PyObject_LookupSpecial(o, &PyId___sizeof__);
if (method == NULL) {
- if (!PyErr_Occurred())
- PyErr_Format(PyExc_TypeError,
- "Type %.100s doesn't define __sizeof__",
- Py_TYPE(o)->tp_name);
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "Type %.100s doesn't define __sizeof__",
+ Py_TYPE(o)->tp_name);
+ }
}
else {
res = _PyObject_CallNoArg(method);
@@ -1636,16 +1669,17 @@
size = PyLong_AsSsize_t(res);
Py_DECREF(res);
- if (size == -1 && PyErr_Occurred())
+ if (size == -1 && _PyErr_Occurred(tstate))
return (size_t)-1;
if (size < 0) {
- PyErr_SetString(PyExc_ValueError, "__sizeof__() should return >= 0");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "__sizeof__() should return >= 0");
return (size_t)-1;
}
/* add gc_head size */
- if (PyObject_IS_GC(o))
+ if (_PyObject_IS_GC(o))
return ((size_t)size) + sizeof(PyGC_Head);
return (size_t)size;
}
@@ -1656,17 +1690,19 @@
static char *kwlist[] = {"object", "default", 0};
size_t size;
PyObject *o, *dflt = NULL;
+ PyThreadState *tstate = _PyThreadState_GET();
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof",
- kwlist, &o, &dflt))
+ kwlist, &o, &dflt)) {
return NULL;
+ }
size = _PySys_GetSizeOf(o);
- if (size == (size_t)-1 && PyErr_Occurred()) {
+ if (size == (size_t)-1 && _PyErr_Occurred(tstate)) {
/* Has a default value been given */
- if (dflt != NULL && PyErr_ExceptionMatches(PyExc_TypeError)) {
- PyErr_Clear();
+ if (dflt != NULL && _PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
+ _PyErr_Clear(tstate);
Py_INCREF(dflt);
return dflt;
}
@@ -1699,7 +1735,7 @@
sys_getrefcount_impl(PyObject *module, PyObject *object)
/*[clinic end generated code: output=5fd477f2264b85b2 input=bf474efd50a21535]*/
{
- return object->ob_refcnt;
+ return Py_REFCNT(object);
}
#ifdef Py_REF_DEBUG
@@ -1728,20 +1764,6 @@
return _Py_GetAllocatedBlocks();
}
-#ifdef COUNT_ALLOCS
-/*[clinic input]
-sys.getcounts
-[clinic start generated code]*/
-
-static PyObject *
-sys_getcounts_impl(PyObject *module)
-/*[clinic end generated code: output=20df00bc164f43cb input=ad2ec7bda5424953]*/
-{
- extern PyObject *_Py_get_counts(void);
-
- return _Py_get_counts();
-}
-#endif
/*[clinic input]
sys._getframe
@@ -1764,22 +1786,25 @@
sys__getframe_impl(PyObject *module, int depth)
/*[clinic end generated code: output=d438776c04d59804 input=c1be8a6464b11ee5]*/
{
- PyFrameObject *f = _PyThreadState_GET()->frame;
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyFrameObject *f = PyThreadState_GetFrame(tstate);
- if (PySys_Audit("sys._getframe", "O", f) < 0) {
+ if (_PySys_Audit(tstate, "sys._getframe", "O", f) < 0) {
+ Py_DECREF(f);
return NULL;
}
while (depth > 0 && f != NULL) {
- f = f->f_back;
+ PyFrameObject *back = PyFrame_GetBack(f);
+ Py_DECREF(f);
+ f = back;
--depth;
}
if (f == NULL) {
- PyErr_SetString(PyExc_ValueError,
- "call stack is not deep enough");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "call stack is not deep enough");
return NULL;
}
- Py_INCREF(f);
return (PyObject*)f;
}
@@ -1819,44 +1844,6 @@
return _PyEval_CallTracing(func, funcargs);
}
-/*[clinic input]
-sys.callstats
-
-Return a tuple of function call statistics.
-
-A tuple is returned only if CALL_PROFILE was defined when Python was
-built. Otherwise, this returns None.
-
-When enabled, this function returns detailed, implementation-specific
-details about the number of function calls executed. The return value
-is a 11-tuple where the entries in the tuple are counts of:
-0. all function calls
-1. calls to PyFunction_Type objects
-2. PyFunction calls that do not create an argument tuple
-3. PyFunction calls that do not create an argument tuple
- and bypass PyEval_EvalCodeEx()
-4. PyMethod calls
-5. PyMethod calls on bound methods
-6. PyType calls
-7. PyCFunction calls
-8. generator calls
-9. All other calls
-10. Number of stack pops performed by call_function()
-[clinic start generated code]*/
-
-static PyObject *
-sys_callstats_impl(PyObject *module)
-/*[clinic end generated code: output=edc4a74957fa8def input=d447d8d224d5d175]*/
-{
- if (PyErr_WarnEx(PyExc_DeprecationWarning,
- "sys.callstats() has been deprecated in Python 3.7 "
- "and will be removed in the future", 1) < 0) {
- return NULL;
- }
-
- Py_RETURN_NONE;
-}
-
#ifdef __cplusplus
extern "C" {
@@ -1950,7 +1937,6 @@
{"audit", (PyCFunction)(void(*)(void))sys_audit, METH_FASTCALL, audit_doc },
{"breakpointhook", (PyCFunction)(void(*)(void))sys_breakpointhook,
METH_FASTCALL | METH_KEYWORDS, breakpointhook_doc},
- SYS_CALLSTATS_METHODDEF
SYS__CLEAR_TYPE_CACHE_METHODDEF
SYS__CURRENT_FRAMES_METHODDEF
SYS_DISPLAYHOOK_METHODDEF
@@ -1960,7 +1946,6 @@
SYS_GETDEFAULTENCODING_METHODDEF
SYS_GETDLOPENFLAGS_METHODDEF
SYS_GETALLOCATEDBLOCKS_METHODDEF
- SYS_GETCOUNTS_METHODDEF
#ifdef DYNAMIC_EXECUTION_PROFILE
{"getdxp", _Py_GetDXProfile, METH_VARARGS},
#endif
@@ -1980,8 +1965,6 @@
SYS_INTERN_METHODDEF
SYS_IS_FINALIZING_METHODDEF
SYS_MDEBUG_METHODDEF
- SYS_SETCHECKINTERVAL_METHODDEF
- SYS_GETCHECKINTERVAL_METHODDEF
SYS_SETSWITCHINTERVAL_METHODDEF
SYS_GETSWITCHINTERVAL_METHODDEF
SYS_SETDLOPENFLAGS_METHODDEF
@@ -2156,9 +2139,9 @@
static PyObject *
-get_warnoptions(void)
+get_warnoptions(PyThreadState *tstate)
{
- PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+ PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
if (warnoptions == NULL || !PyList_Check(warnoptions)) {
/* PEP432 TODO: we can reach this if warnoptions is NULL in the main
* interpreter config. When that happens, we need to properly set
@@ -2171,9 +2154,10 @@
* reachable again.
*/
warnoptions = PyList_New(0);
- if (warnoptions == NULL)
+ if (warnoptions == NULL) {
return NULL;
- if (_PySys_SetObjectId(&PyId_warnoptions, warnoptions)) {
+ }
+ if (sys_set_object_id(tstate, &PyId_warnoptions, warnoptions)) {
Py_DECREF(warnoptions);
return NULL;
}
@@ -2191,16 +2175,16 @@
return;
}
- PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+ PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
if (warnoptions == NULL || !PyList_Check(warnoptions))
return;
PyList_SetSlice(warnoptions, 0, PyList_GET_SIZE(warnoptions), NULL);
}
static int
-_PySys_AddWarnOptionWithError(PyObject *option)
+_PySys_AddWarnOptionWithError(PyThreadState *tstate, PyObject *option)
{
- PyObject *warnoptions = get_warnoptions();
+ PyObject *warnoptions = get_warnoptions(tstate);
if (warnoptions == NULL) {
return -1;
}
@@ -2213,10 +2197,11 @@
void
PySys_AddWarnOptionUnicode(PyObject *option)
{
- if (_PySys_AddWarnOptionWithError(option) < 0) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (_PySys_AddWarnOptionWithError(tstate, option) < 0) {
/* No return value, therefore clear error state if possible */
- if (_PyThreadState_UncheckedGet()) {
- PyErr_Clear();
+ if (tstate) {
+ _PyErr_Clear(tstate);
}
}
}
@@ -2240,15 +2225,16 @@
int
PySys_HasWarnOptions(void)
{
- PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
return (warnoptions != NULL && PyList_Check(warnoptions)
&& PyList_GET_SIZE(warnoptions) > 0);
}
static PyObject *
-get_xoptions(void)
+get_xoptions(PyThreadState *tstate)
{
- PyObject *xoptions = _PySys_GetObjectId(&PyId__xoptions);
+ PyObject *xoptions = sys_get_object_id(tstate, &PyId__xoptions);
if (xoptions == NULL || !PyDict_Check(xoptions)) {
/* PEP432 TODO: we can reach this if xoptions is NULL in the main
* interpreter config. When that happens, we need to properly set
@@ -2261,9 +2247,10 @@
* reachable again.
*/
xoptions = PyDict_New();
- if (xoptions == NULL)
+ if (xoptions == NULL) {
return NULL;
- if (_PySys_SetObjectId(&PyId__xoptions, xoptions)) {
+ }
+ if (sys_set_object_id(tstate, &PyId__xoptions, xoptions)) {
Py_DECREF(xoptions);
return NULL;
}
@@ -2277,7 +2264,8 @@
{
PyObject *name = NULL, *value = NULL;
- PyObject *opts = get_xoptions();
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *opts = get_xoptions(tstate);
if (opts == NULL) {
goto error;
}
@@ -2318,14 +2306,15 @@
}
if (_PySys_AddXOptionWithError(s) < 0) {
/* No return value, therefore clear error state if possible */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
}
PyObject *
PySys_GetXOptions(void)
{
- return get_xoptions();
+ PyThreadState *tstate = _PyThreadState_GET();
+ return get_xoptions(tstate);
}
/* XXX This doc string is too long to be a single string literal in VC++ 5.0.
@@ -2419,7 +2408,6 @@
getrecursionlimit() -- return the max recursion depth for the interpreter\n\
getsizeof() -- return the size of an object in bytes\n\
gettrace() -- get the global debug tracing function\n\
-setcheckinterval() -- control how often the interpreter checks for events\n\
setdlopenflags() -- set the flags to be used for dlopen() calls\n\
setprofile() -- set the global profiling function\n\
setrecursionlimit() -- set the max recursion depth for the interpreter\n\
@@ -2465,17 +2453,18 @@
};
static PyObject*
-make_flags(_PyRuntimeState *runtime, PyInterpreterState *interp)
+make_flags(PyThreadState *tstate)
{
- int pos = 0;
- PyObject *seq;
- const PyPreConfig *preconfig = &runtime->preconfig;
- const PyConfig *config = &interp->config;
+ PyInterpreterState *interp = tstate->interp;
+ const PyPreConfig *preconfig = &interp->runtime->preconfig;
+ const PyConfig *config = _PyInterpreterState_GetConfig(interp);
- seq = PyStructSequence_New(&FlagsType);
- if (seq == NULL)
+ PyObject *seq = PyStructSequence_New(&FlagsType);
+ if (seq == NULL) {
return NULL;
+ }
+ int pos = 0;
#define SetFlag(flag) \
PyStructSequence_SET_ITEM(seq, pos++, PyLong_FromLong(flag))
@@ -2498,7 +2487,7 @@
SetFlag(preconfig->utf8_mode);
#undef SetFlag
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_DECREF(seq);
return NULL;
}
@@ -2529,7 +2518,7 @@
};
static PyObject *
-make_version_info(void)
+make_version_info(PyThreadState *tstate)
{
PyObject *version_info;
char *s;
@@ -2567,7 +2556,7 @@
#undef SetIntItem
#undef SetStrItem
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_CLEAR(version_info);
return NULL;
}
@@ -2685,8 +2674,7 @@
} while (0)
static PyStatus
-_PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
- PyObject *sysdict)
+_PySys_InitCore(PyThreadState *tstate, PyObject *sysdict)
{
PyObject *version_info;
int res;
@@ -2730,7 +2718,7 @@
}
}
SET_SYS_FROM_STRING("hash_info",
- get_hash_info());
+ get_hash_info(tstate));
SET_SYS_FROM_STRING("maxunicode",
PyLong_FromLong(0x10FFFF));
SET_SYS_FROM_STRING("builtin_module_names",
@@ -2761,14 +2749,15 @@
goto type_init_failed;
}
}
- version_info = make_version_info();
+ version_info = make_version_info(tstate);
SET_SYS_FROM_STRING("version_info", version_info);
/* prevent user from creating new instances */
VersionInfoType.tp_init = NULL;
VersionInfoType.tp_new = NULL;
res = PyDict_DelItemString(VersionInfoType.tp_dict, "__new__");
- if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
- PyErr_Clear();
+ if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
+ }
/* implementation */
SET_SYS_FROM_STRING("implementation", make_impl_info(version_info));
@@ -2780,7 +2769,7 @@
}
}
/* Set flags to their default values (updated by _PySys_InitMain()) */
- SET_SYS_FROM_STRING("flags", make_flags(runtime, interp));
+ SET_SYS_FROM_STRING("flags", make_flags(tstate));
#if defined(MS_WINDOWS)
/* getwindowsversion */
@@ -2792,10 +2781,10 @@
/* prevent user from creating new instances */
WindowsVersionType.tp_init = NULL;
WindowsVersionType.tp_new = NULL;
- assert(!PyErr_Occurred());
+ assert(!_PyErr_Occurred(tstate));
res = PyDict_DelItemString(WindowsVersionType.tp_dict, "__new__");
- if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
+ if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
}
#endif
@@ -2818,7 +2807,7 @@
}
}
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
goto err_occurred;
}
return _PyStatus_OK();
@@ -2830,8 +2819,6 @@
return _PyStatus_ERR("can't initialize sys module");
}
-#undef SET_SYS_FROM_STRING
-
/* Updating the sys namespace, returning integer error codes */
#define SET_SYS_FROM_STRING_INT_RESULT(key, value) \
do { \
@@ -2901,10 +2888,10 @@
int
-_PySys_InitMain(_PyRuntimeState *runtime, PyInterpreterState *interp)
+_PySys_InitMain(PyThreadState *tstate)
{
- PyObject *sysdict = interp->sysdict;
- const PyConfig *config = &interp->config;
+ PyObject *sysdict = tstate->interp->sysdict;
+ const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
int res;
#define COPY_LIST(KEY, VALUE) \
@@ -2935,6 +2922,7 @@
SET_SYS_FROM_WSTR("base_prefix", config->base_prefix);
SET_SYS_FROM_WSTR("exec_prefix", config->exec_prefix);
SET_SYS_FROM_WSTR("base_exec_prefix", config->base_exec_prefix);
+ SET_SYS_FROM_WSTR("platlibdir", config->platlibdir);
if (config->pycache_prefix != NULL) {
SET_SYS_FROM_WSTR("pycache_prefix", config->pycache_prefix);
@@ -2955,30 +2943,33 @@
#undef COPY_LIST
#undef SET_SYS_FROM_WSTR
+
/* Set flags to their final values */
- SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(runtime, interp));
+ SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(tstate));
/* prevent user from creating new instances */
FlagsType.tp_init = NULL;
FlagsType.tp_new = NULL;
res = PyDict_DelItemString(FlagsType.tp_dict, "__new__");
if (res < 0) {
- if (!PyErr_ExceptionMatches(PyExc_KeyError)) {
+ if (!_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
return res;
}
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
SET_SYS_FROM_STRING_INT_RESULT("dont_write_bytecode",
PyBool_FromLong(!config->write_bytecode));
- if (get_warnoptions() == NULL)
+ if (get_warnoptions(tstate) == NULL) {
+ return -1;
+ }
+
+ if (get_xoptions(tstate) == NULL)
return -1;
- if (get_xoptions() == NULL)
- return -1;
-
- if (PyErr_Occurred())
- return -1;
+ if (_PyErr_Occurred(tstate)) {
+ goto err_occurred;
+ }
return 0;
@@ -2986,6 +2977,7 @@
return -1;
}
+#undef SET_SYS_FROM_STRING
#undef SET_SYS_FROM_STRING_BORROW
#undef SET_SYS_FROM_STRING_INT_RESULT
@@ -2994,7 +2986,7 @@
infrastructure for the io module in place.
Use UTF-8/surrogateescape and ignore EAGAIN errors. */
-PyStatus
+static PyStatus
_PySys_SetPreliminaryStderr(PyObject *sysdict)
{
PyObject *pstderr = PyFile_NewStdPrinter(fileno(stderr));
@@ -3019,12 +3011,15 @@
/* Create sys module without all attributes: _PySys_InitMain() should be called
later to add remaining attributes. */
PyStatus
-_PySys_Create(_PyRuntimeState *runtime, PyInterpreterState *interp,
- PyObject **sysmod_p)
+_PySys_Create(PyThreadState *tstate, PyObject **sysmod_p)
{
+ assert(!_PyErr_Occurred(tstate));
+
+ PyInterpreterState *interp = tstate->interp;
+
PyObject *modules = PyDict_New();
if (modules == NULL) {
- return _PyStatus_ERR("can't make modules dictionary");
+ goto error;
}
interp->modules = modules;
@@ -3035,13 +3030,13 @@
PyObject *sysdict = PyModule_GetDict(sysmod);
if (sysdict == NULL) {
- return _PyStatus_ERR("can't initialize sys dict");
+ goto error;
}
Py_INCREF(sysdict);
interp->sysdict = sysdict;
if (PyDict_SetItemString(sysdict, "modules", interp->modules) < 0) {
- return _PyStatus_ERR("can't initialize sys module");
+ goto error;
}
PyStatus status = _PySys_SetPreliminaryStderr(sysdict);
@@ -3049,15 +3044,22 @@
return status;
}
- status = _PySys_InitCore(runtime, interp, sysdict);
+ status = _PySys_InitCore(tstate, sysdict);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- _PyImport_FixupBuiltin(sysmod, "sys", interp->modules);
+ if (_PyImport_FixupBuiltin(sysmod, "sys", interp->modules) < 0) {
+ goto error;
+ }
+
+ assert(!_PyErr_Occurred(tstate));
*sysmod_p = sysmod;
return _PyStatus_OK();
+
+error:
+ return _PyStatus_ERR("can't initialize sys module");
}
@@ -3100,8 +3102,10 @@
PyObject *v;
if ((v = makepathobject(path, DELIM)) == NULL)
Py_FatalError("can't create sys.path");
- if (_PySys_SetObjectId(&PyId_path, v) != 0)
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (sys_set_object_id(tstate, &PyId_path, v) != 0) {
Py_FatalError("can't assign sys.path");
+ }
Py_DECREF(v);
}
@@ -3128,6 +3132,7 @@
PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
{
wchar_t* empty_argv[1] = {L""};
+ PyThreadState *tstate = _PyThreadState_GET();
if (argc < 1 || argv == NULL) {
/* Ensure at least one (empty) argument is seen */
@@ -3139,7 +3144,7 @@
if (av == NULL) {
Py_FatalError("no mem for sys.argv");
}
- if (PySys_SetObject("argv", av) != 0) {
+ if (sys_set_object(tstate, "argv", av) != 0) {
Py_DECREF(av);
Py_FatalError("can't assign sys.argv");
}
@@ -3155,7 +3160,7 @@
Py_FatalError("can't compute path0 from argv");
}
- PyObject *sys_path = _PySys_GetObjectId(&PyId_path);
+ PyObject *sys_path = sys_get_object_id(tstate, &PyId_path);
if (sys_path != NULL) {
if (PyList_Insert(sys_path, 0, path0) < 0) {
Py_DECREF(path0);
@@ -3179,30 +3184,15 @@
static int
sys_pyfile_write_unicode(PyObject *unicode, PyObject *file)
{
- PyObject *writer = NULL, *result = NULL;
- int err;
-
if (file == NULL)
return -1;
-
- writer = _PyObject_GetAttrId(file, &PyId_write);
- if (writer == NULL)
- goto error;
-
- result = PyObject_CallFunctionObjArgs(writer, unicode, NULL);
+ assert(unicode != NULL);
+ PyObject *result = _PyObject_CallMethodIdOneArg(file, &PyId_write, unicode);
if (result == NULL) {
- goto error;
- } else {
- err = 0;
- goto finally;
+ return -1;
}
-
-error:
- err = -1;
-finally:
- Py_XDECREF(writer);
- Py_XDECREF(result);
- return err;
+ Py_DECREF(result);
+ return 0;
}
static int
@@ -3258,12 +3248,13 @@
PyObject *error_type, *error_value, *error_traceback;
char buffer[1001];
int written;
+ PyThreadState *tstate = _PyThreadState_GET();
- PyErr_Fetch(&error_type, &error_value, &error_traceback);
- file = _PySys_GetObjectId(key);
+ _PyErr_Fetch(tstate, &error_type, &error_value, &error_traceback);
+ file = sys_get_object_id(tstate, key);
written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va);
if (sys_pyfile_write(buffer, file) != 0) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
fputs(buffer, fp);
}
if (written < 0 || (size_t)written >= sizeof(buffer)) {
@@ -3271,7 +3262,7 @@
if (sys_pyfile_write(truncated, file) != 0)
fputs(truncated, fp);
}
- PyErr_Restore(error_type, error_value, error_traceback);
+ _PyErr_Restore(tstate, error_type, error_value, error_traceback);
}
void
@@ -3300,20 +3291,21 @@
PyObject *file, *message;
PyObject *error_type, *error_value, *error_traceback;
const char *utf8;
+ PyThreadState *tstate = _PyThreadState_GET();
- PyErr_Fetch(&error_type, &error_value, &error_traceback);
- file = _PySys_GetObjectId(key);
+ _PyErr_Fetch(tstate, &error_type, &error_value, &error_traceback);
+ file = sys_get_object_id(tstate, key);
message = PyUnicode_FromFormatV(format, va);
if (message != NULL) {
if (sys_pyfile_write_unicode(message, file) != 0) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
utf8 = PyUnicode_AsUTF8(message);
if (utf8 != NULL)
fputs(utf8, fp);
}
Py_DECREF(message);
}
- PyErr_Restore(error_type, error_value, error_traceback);
+ _PyErr_Restore(tstate, error_type, error_value, error_traceback);
}
void
diff --git a/Python/thread.c b/Python/thread.c
index d197b9f..eae60e9 100644
--- a/Python/thread.c
+++ b/Python/thread.c
@@ -6,7 +6,7 @@
Stuff shared by all thread_*.h files is collected here. */
#include "Python.h"
-#include "pycore_pystate.h"
+#include "pycore_pystate.h" // _PyInterpreterState_GET()
#ifndef _POSIX_THREADS
/* This means pthreads are not implemented in libc headers, hence the macro
@@ -23,8 +23,6 @@
#include <stdlib.h>
-#include "pythread.h"
-
#ifndef _POSIX_THREADS
/* Check if we're running on HP-UX and _SC_THREADS is defined. If so, then
@@ -96,7 +94,7 @@
size_t
PyThread_get_stacksize(void)
{
- return _PyInterpreterState_Get()->pythread_stacksize;
+ return _PyInterpreterState_GET()->pythread_stacksize;
}
/* Only platforms defining a THREAD_SET_STACKSIZE() macro
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 23d585c..05b982d 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -1,3 +1,4 @@
+#include "pycore_interp.h" // _PyInterpreterState.pythread_stacksize
/* This code implemented by Dag.Gruneau@elsa.preseco.comm.se */
/* Fast NonRecursiveMutex support by Yakov Markovitch, markovitch@iso.ru */
@@ -358,13 +359,13 @@
{
/* set to default */
if (size == 0) {
- _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0;
+ _PyInterpreterState_GET()->pythread_stacksize = 0;
return 0;
}
/* valid range? */
if (size >= THREAD_MIN_STACKSIZE && size < THREAD_MAX_STACKSIZE) {
- _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = size;
+ _PyInterpreterState_GET()->pythread_stacksize = size;
return 0;
}
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index 78b99a7..e6910b3 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -1,3 +1,4 @@
+#include "pycore_interp.h" // _PyInterpreterState.pythread_stacksize
/* Posix threads interface */
@@ -51,6 +52,16 @@
#undef THREAD_STACK_SIZE
#define THREAD_STACK_SIZE 0x200000
#endif
+/* bpo-38852: test_threading.test_recursion_limit() checks that 1000 recursive
+ Python calls (default recursion limit) doesn't crash, but raise a regular
+ RecursionError exception. In debug mode, Python function calls allocates
+ more memory on the stack, so use a stack of 8 MiB. */
+#if defined(__ANDROID__) && defined(THREAD_STACK_SIZE) && THREAD_STACK_SIZE == 0
+# ifdef Py_DEBUG
+# undef THREAD_STACK_SIZE
+# define THREAD_STACK_SIZE 0x800000
+# endif
+#endif
/* for safety, ensure a viable minimum stacksize */
#define THREAD_STACK_MIN 0x8000 /* 32 KiB */
#else /* !_POSIX_THREAD_ATTR_STACKSIZE */
@@ -97,17 +108,10 @@
#endif
-/* We assume all modern POSIX systems have gettimeofday() */
-#ifdef GETTIMEOFDAY_NO_TZ
-#define GETTIMEOFDAY(ptv) gettimeofday(ptv)
-#else
-#define GETTIMEOFDAY(ptv) gettimeofday(ptv, (struct timezone *)NULL)
-#endif
-
#define MICROSECONDS_TO_TIMESPEC(microseconds, ts) \
do { \
struct timeval tv; \
- GETTIMEOFDAY(&tv); \
+ gettimeofday(&tv, NULL); \
tv.tv_usec += microseconds % 1000000; \
tv.tv_sec += microseconds / 1000000; \
tv.tv_sec += tv.tv_usec / 1000000; \
@@ -544,9 +548,8 @@
if (!initialized)
PyThread_init_thread();
- lock = (pthread_lock *) PyMem_RawMalloc(sizeof(pthread_lock));
+ lock = (pthread_lock *) PyMem_RawCalloc(1, sizeof(pthread_lock));
if (lock) {
- memset((void *)lock, '\0', sizeof(pthread_lock));
lock->locked = 0;
status = pthread_mutex_init(&lock->mut, NULL);
@@ -692,6 +695,26 @@
#endif /* USE_SEMAPHORES */
int
+_PyThread_at_fork_reinit(PyThread_type_lock *lock)
+{
+ PyThread_type_lock new_lock = PyThread_allocate_lock();
+ if (new_lock == NULL) {
+ return -1;
+ }
+
+ /* bpo-6721, bpo-40089: The old lock can be in an inconsistent state.
+ fork() can be called in the middle of an operation on the lock done by
+ another thread. So don't call PyThread_free_lock(*lock).
+
+ Leak memory on purpose. Don't release the memory either since the
+ address of a mutex is relevant. Putting two mutexes at the same address
+ can lead to problems. */
+
+ *lock = new_lock;
+ return 0;
+}
+
+int
PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
{
return PyThread_acquire_lock_timed(lock, waitflag ? -1 : 0, /*intr_flag=*/0);
@@ -712,7 +735,7 @@
/* set to default */
if (size == 0) {
- _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = 0;
+ _PyInterpreterState_GET()->pythread_stacksize = 0;
return 0;
}
@@ -729,7 +752,7 @@
rc = pthread_attr_setstacksize(&attrs, size);
pthread_attr_destroy(&attrs);
if (rc == 0) {
- _PyInterpreterState_GET_UNSAFE()->pythread_stacksize = size;
+ _PyInterpreterState_GET()->pythread_stacksize = size;
return 0;
}
}
diff --git a/Python/traceback.c b/Python/traceback.c
index 8e2f15e..99b63af 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -2,12 +2,11 @@
/* Traceback implementation */
#include "Python.h"
-#include "pycore_pystate.h"
#include "code.h"
-#include "frameobject.h"
-#include "structmember.h"
-#include "osdefs.h"
+#include "frameobject.h" // PyFrame_GetBack()
+#include "structmember.h" // PyMemberDef
+#include "osdefs.h" // SEP
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
@@ -376,7 +375,7 @@
int fd;
int i;
char *found_encoding;
- char *encoding;
+ const char *encoding;
PyObject *io;
PyObject *binary;
PyObject *fob = NULL;
@@ -384,7 +383,7 @@
PyObject *res;
char buf[MAXPATHLEN+1];
int kind;
- void *data;
+ const void *data;
/* open the file */
if (filename == NULL)
@@ -430,7 +429,7 @@
if (fob == NULL) {
PyErr_Clear();
- res = _PyObject_CallMethodId(binary, &PyId_close, NULL);
+ res = _PyObject_CallMethodIdNoArgs(binary, &PyId_close);
Py_DECREF(binary);
if (res)
Py_DECREF(res);
@@ -450,7 +449,7 @@
break;
}
}
- res = _PyObject_CallMethodId(fob, &PyId_close, NULL);
+ res = _PyObject_CallMethodIdNoArgs(fob, &PyId_close);
if (res)
Py_DECREF(res);
else
@@ -561,28 +560,28 @@
tb = tb->tb_next;
}
while (tb != NULL && err == 0) {
+ PyCodeObject *code = PyFrame_GetCode(tb->tb_frame);
if (last_file == NULL ||
- tb->tb_frame->f_code->co_filename != last_file ||
+ 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) {
+ last_name == NULL || code->co_name != last_name) {
if (cnt > TB_RECURSIVE_CUTOFF) {
err = tb_print_line_repeated(f, cnt);
}
- last_file = tb->tb_frame->f_code->co_filename;
+ last_file = code->co_filename;
last_line = tb->tb_lineno;
- last_name = tb->tb_frame->f_code->co_name;
+ last_name = code->co_name;
cnt = 0;
}
cnt++;
if (err == 0 && cnt <= TB_RECURSIVE_CUTOFF) {
- err = tb_displayline(f,
- tb->tb_frame->f_code->co_filename,
- tb->tb_lineno,
- tb->tb_frame->f_code->co_name);
+ err = tb_displayline(f, code->co_filename, tb->tb_lineno,
+ code->co_name);
if (err == 0) {
err = PyErr_CheckSignals();
}
}
+ Py_DECREF(code);
tb = tb->tb_next;
}
if (err == 0 && cnt > TB_RECURSIVE_CUTOFF) {
@@ -754,12 +753,9 @@
static void
dump_frame(int fd, PyFrameObject *frame)
{
- PyCodeObject *code;
- int lineno;
-
- code = frame->f_code;
+ PyCodeObject *code = PyFrame_GetCode(frame);
PUTS(fd, " File ");
- if (code != NULL && code->co_filename != NULL
+ if (code->co_filename != NULL
&& PyUnicode_Check(code->co_filename))
{
PUTS(fd, "\"");
@@ -770,7 +766,7 @@
}
/* PyFrame_GetLineNumber() was introduced in Python 2.7.0 and 3.2.0 */
- lineno = PyCode_Addr2Line(code, frame->f_lasti);
+ int lineno = PyCode_Addr2Line(code, frame->f_lasti);
PUTS(fd, ", line ");
if (lineno >= 0) {
_Py_DumpDecimal(fd, (unsigned long)lineno);
@@ -780,7 +776,7 @@
}
PUTS(fd, " in ");
- if (code != NULL && code->co_name != NULL
+ if (code->co_name != NULL
&& PyUnicode_Check(code->co_name)) {
_Py_DumpASCII(fd, code->co_name);
}
@@ -789,6 +785,7 @@
}
PUTS(fd, "\n");
+ Py_DECREF(code);
}
static void
@@ -801,22 +798,31 @@
PUTS(fd, "Stack (most recent call first):\n");
}
- frame = _PyThreadState_GetFrame(tstate);
+ frame = PyThreadState_GetFrame(tstate);
if (frame == NULL) {
PUTS(fd, "<no Python frame>\n");
return;
}
depth = 0;
- while (frame != NULL) {
+ while (1) {
if (MAX_FRAME_DEPTH <= depth) {
+ Py_DECREF(frame);
PUTS(fd, " ...\n");
break;
}
- if (!PyFrame_Check(frame))
+ if (!PyFrame_Check(frame)) {
+ Py_DECREF(frame);
break;
+ }
dump_frame(fd, frame);
- frame = frame->f_back;
+ PyFrameObject *back = PyFrame_GetBack(frame);
+ Py_DECREF(frame);
+
+ if (back == NULL) {
+ break;
+ }
+ frame = back;
depth++;
}
}