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, &copy, 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++;
     }
 }