bpo-41076: Pre-feed the parser with the f-string expression location (GH-21054)

This commit changes the parsing of f-string expressions with the new parser. The parser gets pre-fed with the location of the expression itself (not the f-string, which was what we were doing before). This allows us to completely skip the shifting of the AST nodes after the parsing is completed.
This commit is contained in:
Lysandros Nikolaou 2020-06-28 02:41:48 +03:00 committed by GitHub
parent 89e82c4a62
commit 1f0f4abb11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 2437 additions and 2653 deletions

View File

@ -0,0 +1 @@
Pre-feed the parser with the location of the f-string expression, not the f-string itself, which allows us to skip the shifting of the AST node locations after the parsing is completed.

View File

@ -423,6 +423,9 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype,
} }
} }
if (p->start_rule == Py_fstring_input) {
col_offset -= p->starting_col_offset;
}
Py_ssize_t col_number = col_offset; Py_ssize_t col_number = col_offset;
if (p->tok->encoding != NULL) { if (p->tok->encoding != NULL) {

View File

@ -271,235 +271,6 @@ _PyPegen_parsestr(Parser *p, int *bytesmode, int *rawmode, PyObject **result,
// FSTRING STUFF // FSTRING STUFF
static void fstring_shift_expr_locations(expr_ty n, int lineno, int col_offset);
static void fstring_shift_argument(expr_ty parent, arg_ty args, int lineno, int col_offset);
static inline void shift_expr(expr_ty parent, expr_ty n, int line, int col) {
if (n == NULL) {
return;
}
if (parent->lineno < n->lineno) {
col = 0;
}
fstring_shift_expr_locations(n, line, col);
}
static inline void shift_arg(expr_ty parent, arg_ty n, int line, int col) {
if (parent->lineno < n->lineno) {
col = 0;
}
fstring_shift_argument(parent, n, line, col);
}
static void fstring_shift_seq_locations(expr_ty parent, asdl_seq *seq, int lineno, int col_offset) {
for (Py_ssize_t i = 0, l = asdl_seq_LEN(seq); i < l; i++) {
expr_ty expr = asdl_seq_GET(seq, i);
if (expr == NULL){
continue;
}
shift_expr(parent, expr, lineno, col_offset);
}
}
static void fstring_shift_slice_locations(expr_ty parent, expr_ty slice, int lineno, int col_offset) {
switch (slice->kind) {
case Slice_kind:
if (slice->v.Slice.lower) {
shift_expr(parent, slice->v.Slice.lower, lineno, col_offset);
}
if (slice->v.Slice.upper) {
shift_expr(parent, slice->v.Slice.upper, lineno, col_offset);
}
if (slice->v.Slice.step) {
shift_expr(parent, slice->v.Slice.step, lineno, col_offset);
}
break;
case Tuple_kind:
fstring_shift_seq_locations(parent, slice->v.Tuple.elts, lineno, col_offset);
break;
default:
break;
}
}
static void fstring_shift_comprehension(expr_ty parent, comprehension_ty comp, int lineno, int col_offset) {
shift_expr(parent, comp->target, lineno, col_offset);
shift_expr(parent, comp->iter, lineno, col_offset);
fstring_shift_seq_locations(parent, comp->ifs, lineno, col_offset);
}
static void fstring_shift_argument(expr_ty parent, arg_ty arg, int lineno, int col_offset) {
if (arg->annotation != NULL){
shift_expr(parent, arg->annotation, lineno, col_offset);
}
arg->col_offset = arg->col_offset + col_offset;
arg->end_col_offset = arg->end_col_offset + col_offset;
arg->lineno = arg->lineno + lineno;
arg->end_lineno = arg->end_lineno + lineno;
}
static void fstring_shift_arguments(expr_ty parent, arguments_ty args, int lineno, int col_offset) {
for (Py_ssize_t i = 0, l = asdl_seq_LEN(args->posonlyargs); i < l; i++) {
arg_ty arg = asdl_seq_GET(args->posonlyargs, i);
shift_arg(parent, arg, lineno, col_offset);
}
for (Py_ssize_t i = 0, l = asdl_seq_LEN(args->args); i < l; i++) {
arg_ty arg = asdl_seq_GET(args->args, i);
shift_arg(parent, arg, lineno, col_offset);
}
if (args->vararg != NULL) {
shift_arg(parent, args->vararg, lineno, col_offset);
}
for (Py_ssize_t i = 0, l = asdl_seq_LEN(args->kwonlyargs); i < l; i++) {
arg_ty arg = asdl_seq_GET(args->kwonlyargs, i);
shift_arg(parent, arg, lineno, col_offset);
}
fstring_shift_seq_locations(parent, args->kw_defaults, lineno, col_offset);
if (args->kwarg != NULL) {
shift_arg(parent, args->kwarg, lineno, col_offset);
}
fstring_shift_seq_locations(parent, args->defaults, lineno, col_offset);
}
static void fstring_shift_children_locations(expr_ty node, int lineno, int col_offset) {
switch (node->kind) {
case BoolOp_kind:
fstring_shift_seq_locations(node, node->v.BoolOp.values, lineno, col_offset);
break;
case NamedExpr_kind:
shift_expr(node, node->v.NamedExpr.target, lineno, col_offset);
shift_expr(node, node->v.NamedExpr.value, lineno, col_offset);
break;
case BinOp_kind:
shift_expr(node, node->v.BinOp.left, lineno, col_offset);
shift_expr(node, node->v.BinOp.right, lineno, col_offset);
break;
case UnaryOp_kind:
shift_expr(node, node->v.UnaryOp.operand, lineno, col_offset);
break;
case Lambda_kind:
fstring_shift_arguments(node, node->v.Lambda.args, lineno, col_offset);
shift_expr(node, node->v.Lambda.body, lineno, col_offset);
break;
case IfExp_kind:
shift_expr(node, node->v.IfExp.test, lineno, col_offset);
shift_expr(node, node->v.IfExp.body, lineno, col_offset);
shift_expr(node, node->v.IfExp.orelse, lineno, col_offset);
break;
case Dict_kind:
fstring_shift_seq_locations(node, node->v.Dict.keys, lineno, col_offset);
fstring_shift_seq_locations(node, node->v.Dict.values, lineno, col_offset);
break;
case Set_kind:
fstring_shift_seq_locations(node, node->v.Set.elts, lineno, col_offset);
break;
case ListComp_kind:
shift_expr(node, node->v.ListComp.elt, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.ListComp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.ListComp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case SetComp_kind:
shift_expr(node, node->v.SetComp.elt, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.SetComp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.SetComp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case DictComp_kind:
shift_expr(node, node->v.DictComp.key, lineno, col_offset);
shift_expr(node, node->v.DictComp.value, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.DictComp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.DictComp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case GeneratorExp_kind:
shift_expr(node, node->v.GeneratorExp.elt, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.GeneratorExp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.GeneratorExp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case Await_kind:
shift_expr(node, node->v.Await.value, lineno, col_offset);
break;
case Yield_kind:
shift_expr(node, node->v.Yield.value, lineno, col_offset);
break;
case YieldFrom_kind:
shift_expr(node, node->v.YieldFrom.value, lineno, col_offset);
break;
case Compare_kind:
shift_expr(node, node->v.Compare.left, lineno, col_offset);
fstring_shift_seq_locations(node, node->v.Compare.comparators, lineno, col_offset);
break;
case Call_kind:
shift_expr(node, node->v.Call.func, lineno, col_offset);
fstring_shift_seq_locations(node, node->v.Call.args, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.Call.keywords); i < l; i++) {
keyword_ty keyword = asdl_seq_GET(node->v.Call.keywords, i);
shift_expr(node, keyword->value, lineno, col_offset);
}
break;
case Attribute_kind:
shift_expr(node, node->v.Attribute.value, lineno, col_offset);
break;
case Subscript_kind:
shift_expr(node, node->v.Subscript.value, lineno, col_offset);
fstring_shift_slice_locations(node, node->v.Subscript.slice, lineno, col_offset);
shift_expr(node, node->v.Subscript.slice, lineno, col_offset);
break;
case Starred_kind:
shift_expr(node, node->v.Starred.value, lineno, col_offset);
break;
case List_kind:
fstring_shift_seq_locations(node, node->v.List.elts, lineno, col_offset);
break;
case Tuple_kind:
fstring_shift_seq_locations(node, node->v.Tuple.elts, lineno, col_offset);
break;
case JoinedStr_kind:
fstring_shift_seq_locations(node, node->v.JoinedStr.values, lineno, col_offset);
break;
case FormattedValue_kind:
shift_expr(node, node->v.FormattedValue.value, lineno, col_offset);
if (node->v.FormattedValue.format_spec) {
shift_expr(node, node->v.FormattedValue.format_spec, lineno, col_offset);
}
break;
default:
return;
}
}
/* Shift locations for the given node and all its children by adding `lineno`
and `col_offset` to existing locations. Note that n is the already parsed
expression. */
static void fstring_shift_expr_locations(expr_ty n, int lineno, int col_offset)
{
n->col_offset = n->col_offset + col_offset;
// The following is needed, in order for nodes spanning across multiple lines
// to be shifted correctly. An example of such a node is a Call node, the closing
// parenthesis of which is not on the same line as its name.
if (n->lineno == n->end_lineno) {
n->end_col_offset = n->end_col_offset + col_offset;
}
fstring_shift_children_locations(n, lineno, col_offset);
n->lineno = n->lineno + lineno;
n->end_lineno = n->end_lineno + lineno;
}
/* Fix locations for the given node and its children. /* Fix locations for the given node and its children.
`parent` is the enclosing node. `parent` is the enclosing node.
@ -507,7 +278,7 @@ static void fstring_shift_expr_locations(expr_ty n, int lineno, int col_offset)
`expr_str` is the child node's string representation, including braces. `expr_str` is the child node's string representation, including braces.
*/ */
static void static void
fstring_fix_expr_location(Token *parent, expr_ty n, char *expr_str) fstring_find_expr_location(Token *parent, char *expr_str, int *p_lines, int *p_cols)
{ {
char *substr = NULL; char *substr = NULL;
char *start; char *start;
@ -552,7 +323,8 @@ fstring_fix_expr_location(Token *parent, expr_ty n, char *expr_str)
} }
} }
} }
fstring_shift_expr_locations(n, lines, cols); *p_lines = lines;
*p_cols = cols;
} }
@ -598,11 +370,26 @@ fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
return NULL; return NULL;
} }
str[0] = '('; // The call to fstring_find_expr_location is responsible for finding the column offset
// the generated AST nodes need to be shifted to the right, which is equal to the number
// of the f-string characters before the expression starts. In order to correctly compute
// this offset, strstr gets called in fstring_find_expr_location which only succeeds
// if curly braces appear before and after the f-string expression (exactly like they do
// in the f-string itself), hence the following lines.
str[0] = '{';
memcpy(str+1, expr_start, len); memcpy(str+1, expr_start, len);
str[len+1] = ')'; str[len+1] = '}';
str[len+2] = 0; str[len+2] = 0;
int lines, cols;
fstring_find_expr_location(t, str, &lines, &cols);
// The parentheses are needed in order to allow for leading whitespace withing
// the f-string expression. This consequently gets parsed as a group (see the
// group rule in python.gram).
str[0] = '(';
str[len+1] = ')';
struct tok_state* tok = PyTokenizer_FromString(str, 1); struct tok_state* tok = PyTokenizer_FromString(str, 1);
if (tok == NULL) { if (tok == NULL) {
PyMem_Free(str); PyMem_Free(str);
@ -613,21 +400,14 @@ fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
Parser *p2 = _PyPegen_Parser_New(tok, Py_fstring_input, p->flags, p->feature_version, Parser *p2 = _PyPegen_Parser_New(tok, Py_fstring_input, p->flags, p->feature_version,
NULL, p->arena); NULL, p->arena);
p2->starting_lineno = p->starting_lineno + p->tok->first_lineno - 1; p2->starting_lineno = t->lineno + lines - 1;
p2->starting_col_offset = p->tok->first_lineno == p->tok->lineno p2->starting_col_offset = p->tok->first_lineno == p->tok->lineno ? t->col_offset + cols : cols;
? p->starting_col_offset + t->col_offset : 0;
expr = _PyPegen_run_parser(p2); expr = _PyPegen_run_parser(p2);
if (expr == NULL) { if (expr == NULL) {
goto exit; goto exit;
} }
/* Reuse str to find the correct column offset. */
str[0] = '{';
str[len+1] = '}';
fstring_fix_expr_location(t, expr, str);
result = expr; result = expr;
exit: exit:

428
Python/importlib.h generated
View File

@ -1594,219 +1594,219 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
0,218,1,120,90,5,119,104,101,114,101,90,9,102,114,111, 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, 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, 114,10,0,0,0,114,11,0,0,0,114,215,0,0,0,9,
4,0,0,115,52,0,0,0,0,10,8,1,10,1,4,1, 4,0,0,115,48,0,0,0,0,10,8,1,10,1,4,1,
12,2,4,1,4,1,2,255,4,1,8,255,10,2,8,1, 12,2,4,1,10,1,8,255,10,2,8,1,14,1,10,1,
14,1,10,1,2,255,8,2,10,1,14,1,2,1,14,1, 2,255,8,2,10,1,14,1,2,1,14,1,14,4,10,1,
14,4,10,1,16,255,2,2,12,1,26,1,114,215,0,0, 16,255,2,2,12,1,26,1,114,215,0,0,0,99,1,0,
0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,6,0,
0,0,6,0,0,0,67,0,0,0,115,146,0,0,0,124, 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,
0,160,0,100,1,161,1,125,1,124,0,160,0,100,2,161, 1,161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,
1,125,2,124,1,100,3,117,1,114,82,124,2,100,3,117, 1,100,3,117,1,114,82,124,2,100,3,117,1,114,78,124,
1,114,78,124,1,124,2,106,1,107,3,114,78,116,2,106, 1,124,2,106,1,107,3,114,78,116,2,106,3,100,4,124,
3,100,4,124,1,155,2,100,5,124,2,106,1,155,2,100, 1,155,2,100,5,124,2,106,1,155,2,100,6,157,5,116,
6,157,5,116,4,100,7,100,8,141,3,1,0,124,1,83, 4,100,7,100,8,141,3,1,0,124,1,83,0,124,2,100,
0,124,2,100,3,117,1,114,96,124,2,106,1,83,0,116, 3,117,1,114,96,124,2,106,1,83,0,116,2,106,3,100,
2,106,3,100,9,116,4,100,7,100,8,141,3,1,0,124, 9,116,4,100,7,100,8,141,3,1,0,124,0,100,10,25,
0,100,10,25,0,125,1,100,11,124,0,118,1,114,142,124, 0,125,1,100,11,124,0,118,1,114,142,124,1,160,5,100,
1,160,5,100,12,161,1,100,13,25,0,125,1,124,1,83, 12,161,1,100,13,25,0,125,1,124,1,83,0,41,14,122,
0,41,14,122,167,67,97,108,99,117,108,97,116,101,32,119, 167,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32,
104,97,116,32,95,95,112,97,99,107,97,103,101,95,95,32, 95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117,
115,104,111,117,108,100,32,98,101,46,10,10,32,32,32,32, 108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97,
95,95,112,97,99,107,97,103,101,95,95,32,105,115,32,110, 99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103,
111,116,32,103,117,97,114,97,110,116,101,101,100,32,116,111, 117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,
32,98,101,32,100,101,102,105,110,101,100,32,111,114,32,99, 100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100,
111,117,108,100,32,98,101,32,115,101,116,32,116,111,32,78, 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10,
111,110,101,10,32,32,32,32,116,111,32,114,101,112,114,101, 32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116,
115,101,110,116,32,116,104,97,116,32,105,116,115,32,112,114, 32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114,
111,112,101,114,32,118,97,108,117,101,32,105,115,32,117,110, 32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119,
107,110,111,119,110,46,10,10,32,32,32,32,114,146,0,0, 110,46,10,10,32,32,32,32,114,146,0,0,0,114,106,0,
0,114,106,0,0,0,78,122,32,95,95,112,97,99,107,97, 0,0,78,122,32,95,95,112,97,99,107,97,103,101,95,95,
103,101,95,95,32,33,61,32,95,95,115,112,101,99,95,95, 32,33,61,32,95,95,115,112,101,99,95,95,46,112,97,114,
46,112,97,114,101,110,116,32,40,122,4,32,33,61,32,250, 101,110,116,32,40,122,4,32,33,61,32,250,1,41,233,3,
1,41,233,3,0,0,0,41,1,90,10,115,116,97,99,107, 0,0,0,41,1,90,10,115,116,97,99,107,108,101,118,101,
108,101,118,101,108,122,89,99,97,110,39,116,32,114,101,115, 108,122,89,99,97,110,39,116,32,114,101,115,111,108,118,101,
111,108,118,101,32,112,97,99,107,97,103,101,32,102,114,111, 32,112,97,99,107,97,103,101,32,102,114,111,109,32,95,95,
109,32,95,95,115,112,101,99,95,95,32,111,114,32,95,95, 115,112,101,99,95,95,32,111,114,32,95,95,112,97,99,107,
112,97,99,107,97,103,101,95,95,44,32,102,97,108,108,105, 97,103,101,95,95,44,32,102,97,108,108,105,110,103,32,98,
110,103,32,98,97,99,107,32,111,110,32,95,95,110,97,109, 97,99,107,32,111,110,32,95,95,110,97,109,101,95,95,32,
101,95,95,32,97,110,100,32,95,95,112,97,116,104,95,95, 97,110,100,32,95,95,112,97,116,104,95,95,114,1,0,0,
114,1,0,0,0,114,142,0,0,0,114,129,0,0,0,114, 0,114,142,0,0,0,114,129,0,0,0,114,22,0,0,0,
22,0,0,0,41,6,114,35,0,0,0,114,131,0,0,0, 41,6,114,35,0,0,0,114,131,0,0,0,114,193,0,0,
114,193,0,0,0,114,194,0,0,0,114,195,0,0,0,114, 0,114,194,0,0,0,114,195,0,0,0,114,130,0,0,0,
130,0,0,0,41,3,218,7,103,108,111,98,97,108,115,114, 41,3,218,7,103,108,111,98,97,108,115,114,187,0,0,0,
187,0,0,0,114,96,0,0,0,114,10,0,0,0,114,10, 114,96,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
0,0,0,114,11,0,0,0,218,17,95,99,97,108,99,95, 11,0,0,0,218,17,95,99,97,108,99,95,95,95,112,97,
95,95,112,97,99,107,97,103,101,95,95,46,4,0,0,115, 99,107,97,103,101,95,95,46,4,0,0,115,42,0,0,0,
42,0,0,0,0,7,10,1,10,1,8,1,18,1,6,1, 0,7,10,1,10,1,8,1,18,1,6,1,2,255,4,1,
2,255,4,1,4,255,6,2,4,254,6,3,4,1,8,1, 4,255,6,2,4,254,6,3,4,1,8,1,6,2,6,2,
6,2,6,2,4,254,6,3,8,1,8,1,14,1,114,221, 4,254,6,3,8,1,8,1,14,1,114,221,0,0,0,114,
0,0,0,114,10,0,0,0,99,5,0,0,0,0,0,0, 10,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0, 0,9,0,0,0,5,0,0,0,67,0,0,0,115,180,0,
0,115,180,0,0,0,124,4,100,1,107,2,114,18,116,0, 0,0,124,4,100,1,107,2,114,18,116,0,124,0,131,1,
124,0,131,1,125,5,110,36,124,1,100,2,117,1,114,30, 125,5,110,36,124,1,100,2,117,1,114,30,124,1,110,2,
124,1,110,2,105,0,125,6,116,1,124,6,131,1,125,7, 105,0,125,6,116,1,124,6,131,1,125,7,116,0,124,0,
116,0,124,0,124,7,124,4,131,3,125,5,124,3,115,150, 124,7,124,4,131,3,125,5,124,3,115,150,124,4,100,1,
124,4,100,1,107,2,114,84,116,0,124,0,160,2,100,3, 107,2,114,84,116,0,124,0,160,2,100,3,161,1,100,1,
161,1,100,1,25,0,131,1,83,0,124,0,115,92,124,5, 25,0,131,1,83,0,124,0,115,92,124,5,83,0,116,3,
83,0,116,3,124,0,131,1,116,3,124,0,160,2,100,3, 124,0,131,1,116,3,124,0,160,2,100,3,161,1,100,1,
161,1,100,1,25,0,131,1,24,0,125,8,116,4,106,5, 25,0,131,1,24,0,125,8,116,4,106,5,124,5,106,6,
124,5,106,6,100,2,116,3,124,5,106,6,131,1,124,8, 100,2,116,3,124,5,106,6,131,1,124,8,24,0,133,2,
24,0,133,2,25,0,25,0,83,0,110,26,116,7,124,5, 25,0,25,0,83,0,110,26,116,7,124,5,100,4,131,2,
100,4,131,2,114,172,116,8,124,5,124,3,116,0,131,3, 114,172,116,8,124,5,124,3,116,0,131,3,83,0,124,5,
83,0,124,5,83,0,100,2,83,0,41,5,97,215,1,0, 83,0,100,2,83,0,41,5,97,215,1,0,0,73,109,112,
0,73,109,112,111,114,116,32,97,32,109,111,100,117,108,101, 111,114,116,32,97,32,109,111,100,117,108,101,46,10,10,32,
46,10,10,32,32,32,32,84,104,101,32,39,103,108,111,98, 32,32,32,84,104,101,32,39,103,108,111,98,97,108,115,39,
97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, 32,97,114,103,117,109,101,110,116,32,105,115,32,117,115,101,
32,117,115,101,100,32,116,111,32,105,110,102,101,114,32,119, 100,32,116,111,32,105,110,102,101,114,32,119,104,101,114,101,
104,101,114,101,32,116,104,101,32,105,109,112,111,114,116,32, 32,116,104,101,32,105,109,112,111,114,116,32,105,115,32,111,
105,115,32,111,99,99,117,114,114,105,110,103,32,102,114,111, 99,99,117,114,114,105,110,103,32,102,114,111,109,10,32,32,
109,10,32,32,32,32,116,111,32,104,97,110,100,108,101,32, 32,32,116,111,32,104,97,110,100,108,101,32,114,101,108,97,
114,101,108,97,116,105,118,101,32,105,109,112,111,114,116,115, 116,105,118,101,32,105,109,112,111,114,116,115,46,32,84,104,
46,32,84,104,101,32,39,108,111,99,97,108,115,39,32,97, 101,32,39,108,111,99,97,108,115,39,32,97,114,103,117,109,
114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,114, 101,110,116,32,105,115,32,105,103,110,111,114,101,100,46,32,
101,100,46,32,84,104,101,10,32,32,32,32,39,102,114,111, 84,104,101,10,32,32,32,32,39,102,114,111,109,108,105,115,
109,108,105,115,116,39,32,97,114,103,117,109,101,110,116,32, 116,39,32,97,114,103,117,109,101,110,116,32,115,112,101,99,
115,112,101,99,105,102,105,101,115,32,119,104,97,116,32,115, 105,102,105,101,115,32,119,104,97,116,32,115,104,111,117,108,
104,111,117,108,100,32,101,120,105,115,116,32,97,115,32,97, 100,32,101,120,105,115,116,32,97,115,32,97,116,116,114,105,
116,116,114,105,98,117,116,101,115,32,111,110,32,116,104,101, 98,117,116,101,115,32,111,110,32,116,104,101,32,109,111,100,
32,109,111,100,117,108,101,10,32,32,32,32,98,101,105,110, 117,108,101,10,32,32,32,32,98,101,105,110,103,32,105,109,
103,32,105,109,112,111,114,116,101,100,32,40,101,46,103,46, 112,111,114,116,101,100,32,40,101,46,103,46,32,96,96,102,
32,96,96,102,114,111,109,32,109,111,100,117,108,101,32,105, 114,111,109,32,109,111,100,117,108,101,32,105,109,112,111,114,
109,112,111,114,116,32,60,102,114,111,109,108,105,115,116,62, 116,32,60,102,114,111,109,108,105,115,116,62,96,96,41,46,
96,96,41,46,32,32,84,104,101,32,39,108,101,118,101,108, 32,32,84,104,101,32,39,108,101,118,101,108,39,10,32,32,
39,10,32,32,32,32,97,114,103,117,109,101,110,116,32,114, 32,32,97,114,103,117,109,101,110,116,32,114,101,112,114,101,
101,112,114,101,115,101,110,116,115,32,116,104,101,32,112,97, 115,101,110,116,115,32,116,104,101,32,112,97,99,107,97,103,
99,107,97,103,101,32,108,111,99,97,116,105,111,110,32,116, 101,32,108,111,99,97,116,105,111,110,32,116,111,32,105,109,
111,32,105,109,112,111,114,116,32,102,114,111,109,32,105,110, 112,111,114,116,32,102,114,111,109,32,105,110,32,97,32,114,
32,97,32,114,101,108,97,116,105,118,101,10,32,32,32,32, 101,108,97,116,105,118,101,10,32,32,32,32,105,109,112,111,
105,109,112,111,114,116,32,40,101,46,103,46,32,96,96,102, 114,116,32,40,101,46,103,46,32,96,96,102,114,111,109,32,
114,111,109,32,46,46,112,107,103,32,105,109,112,111,114,116, 46,46,112,107,103,32,105,109,112,111,114,116,32,109,111,100,
32,109,111,100,96,96,32,119,111,117,108,100,32,104,97,118, 96,96,32,119,111,117,108,100,32,104,97,118,101,32,97,32,
101,32,97,32,39,108,101,118,101,108,39,32,111,102,32,50, 39,108,101,118,101,108,39,32,111,102,32,50,41,46,10,10,
41,46,10,10,32,32,32,32,114,22,0,0,0,78,114,129, 32,32,32,32,114,22,0,0,0,78,114,129,0,0,0,114,
0,0,0,114,142,0,0,0,41,9,114,210,0,0,0,114, 142,0,0,0,41,9,114,210,0,0,0,114,221,0,0,0,
221,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114, 218,9,112,97,114,116,105,116,105,111,110,114,186,0,0,0,
186,0,0,0,114,15,0,0,0,114,93,0,0,0,114,1, 114,15,0,0,0,114,93,0,0,0,114,1,0,0,0,114,
0,0,0,114,4,0,0,0,114,215,0,0,0,41,9,114, 4,0,0,0,114,215,0,0,0,41,9,114,17,0,0,0,
17,0,0,0,114,220,0,0,0,218,6,108,111,99,97,108, 114,220,0,0,0,218,6,108,111,99,97,108,115,114,216,0,
115,114,216,0,0,0,114,188,0,0,0,114,97,0,0,0, 0,0,114,188,0,0,0,114,97,0,0,0,90,8,103,108,
90,8,103,108,111,98,97,108,115,95,114,187,0,0,0,90, 111,98,97,108,115,95,114,187,0,0,0,90,7,99,117,116,
7,99,117,116,95,111,102,102,114,10,0,0,0,114,10,0, 95,111,102,102,114,10,0,0,0,114,10,0,0,0,114,11,
0,0,114,11,0,0,0,218,10,95,95,105,109,112,111,114, 0,0,0,218,10,95,95,105,109,112,111,114,116,95,95,73,
116,95,95,73,4,0,0,115,30,0,0,0,0,11,8,1, 4,0,0,115,30,0,0,0,0,11,8,1,10,2,16,1,
10,2,16,1,8,1,12,1,4,3,8,1,18,1,4,1, 8,1,12,1,4,3,8,1,18,1,4,1,4,4,26,3,
4,4,26,3,32,1,10,1,12,2,114,224,0,0,0,99, 32,1,10,1,12,2,114,224,0,0,0,99,1,0,0,0,
1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,160, 67,0,0,0,115,38,0,0,0,116,0,160,1,124,0,161,
1,124,0,161,1,125,1,124,1,100,0,117,0,114,30,116, 1,125,1,124,1,100,0,117,0,114,30,116,2,100,1,124,
2,100,1,124,0,23,0,131,1,130,1,116,3,124,1,131, 0,23,0,131,1,130,1,116,3,124,1,131,1,83,0,41,
1,83,0,41,2,78,122,25,110,111,32,98,117,105,108,116, 2,78,122,25,110,111,32,98,117,105,108,116,45,105,110,32,
45,105,110,32,109,111,100,117,108,101,32,110,97,109,101,100, 109,111,100,117,108,101,32,110,97,109,101,100,32,41,4,114,
32,41,4,114,161,0,0,0,114,168,0,0,0,114,80,0, 161,0,0,0,114,168,0,0,0,114,80,0,0,0,114,160,
0,0,114,160,0,0,0,41,2,114,17,0,0,0,114,96, 0,0,0,41,2,114,17,0,0,0,114,96,0,0,0,114,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,18,
0,0,218,18,95,98,117,105,108,116,105,110,95,102,114,111, 95,98,117,105,108,116,105,110,95,102,114,111,109,95,110,97,
109,95,110,97,109,101,110,4,0,0,115,8,0,0,0,0, 109,101,110,4,0,0,115,8,0,0,0,0,1,10,1,8,
1,10,1,8,1,12,1,114,225,0,0,0,99,2,0,0, 1,12,1,114,225,0,0,0,99,2,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,10,0,0,0,5,0,0, 0,0,0,0,0,10,0,0,0,5,0,0,0,67,0,0,
0,67,0,0,0,115,166,0,0,0,124,1,97,0,124,0, 0,115,166,0,0,0,124,1,97,0,124,0,97,1,116,2,
97,1,116,2,116,1,131,1,125,2,116,1,106,3,160,4, 116,1,131,1,125,2,116,1,106,3,160,4,161,0,68,0,
161,0,68,0,93,72,92,2,125,3,125,4,116,5,124,4, 93,72,92,2,125,3,125,4,116,5,124,4,124,2,131,2,
124,2,131,2,114,26,124,3,116,1,106,6,118,0,114,60, 114,26,124,3,116,1,106,6,118,0,114,60,116,7,125,5,
116,7,125,5,110,18,116,0,160,8,124,3,161,1,114,26, 110,18,116,0,160,8,124,3,161,1,114,26,116,9,125,5,
116,9,125,5,110,2,113,26,116,10,124,4,124,5,131,2, 110,2,113,26,116,10,124,4,124,5,131,2,125,6,116,11,
125,6,116,11,124,6,124,4,131,2,1,0,113,26,116,1, 124,6,124,4,131,2,1,0,113,26,116,1,106,3,116,12,
106,3,116,12,25,0,125,7,100,1,68,0,93,46,125,8, 25,0,125,7,100,1,68,0,93,46,125,8,124,8,116,1,
124,8,116,1,106,3,118,1,114,138,116,13,124,8,131,1, 106,3,118,1,114,138,116,13,124,8,131,1,125,9,110,10,
125,9,110,10,116,1,106,3,124,8,25,0,125,9,116,14, 116,1,106,3,124,8,25,0,125,9,116,14,124,7,124,8,
124,7,124,8,124,9,131,3,1,0,113,114,100,2,83,0, 124,9,131,3,1,0,113,114,100,2,83,0,41,3,122,250,
41,3,122,250,83,101,116,117,112,32,105,109,112,111,114,116, 83,101,116,117,112,32,105,109,112,111,114,116,108,105,98,32,
108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103, 98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,101,
32,110,101,101,100,101,100,32,98,117,105,108,116,45,105,110, 100,101,100,32,98,117,105,108,116,45,105,110,32,109,111,100,
32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,106, 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105,
101,99,116,105,110,103,32,116,104,101,109,10,32,32,32,32, 110,103,32,116,104,101,109,10,32,32,32,32,105,110,116,111,
105,110,116,111,32,116,104,101,32,103,108,111,98,97,108,32, 32,116,104,101,32,103,108,111,98,97,108,32,110,97,109,101,
110,97,109,101,115,112,97,99,101,46,10,10,32,32,32,32, 115,112,97,99,101,46,10,10,32,32,32,32,65,115,32,115,
65,115,32,115,121,115,32,105,115,32,110,101,101,100,101,100, 121,115,32,105,115,32,110,101,101,100,101,100,32,102,111,114,
32,102,111,114,32,115,121,115,46,109,111,100,117,108,101,115, 32,115,121,115,46,109,111,100,117,108,101,115,32,97,99,99,
32,97,99,99,101,115,115,32,97,110,100,32,95,105,109,112, 101,115,115,32,97,110,100,32,95,105,109,112,32,105,115,32,
32,105,115,32,110,101,101,100,101,100,32,116,111,32,108,111, 110,101,101,100,101,100,32,116,111,32,108,111,97,100,32,98,
97,100,32,98,117,105,108,116,45,105,110,10,32,32,32,32, 117,105,108,116,45,105,110,10,32,32,32,32,109,111,100,117,
109,111,100,117,108,101,115,44,32,116,104,111,115,101,32,116, 108,101,115,44,32,116,104,111,115,101,32,116,119,111,32,109,
119,111,32,109,111,100,117,108,101,115,32,109,117,115,116,32, 111,100,117,108,101,115,32,109,117,115,116,32,98,101,32,101,
98,101,32,101,120,112,108,105,99,105,116,108,121,32,112,97, 120,112,108,105,99,105,116,108,121,32,112,97,115,115,101,100,
115,115,101,100,32,105,110,46,10,10,32,32,32,32,41,3, 32,105,110,46,10,10,32,32,32,32,41,3,114,23,0,0,
114,23,0,0,0,114,193,0,0,0,114,65,0,0,0,78, 0,114,193,0,0,0,114,65,0,0,0,78,41,15,114,58,
41,15,114,58,0,0,0,114,15,0,0,0,114,14,0,0, 0,0,0,114,15,0,0,0,114,14,0,0,0,114,93,0,
0,114,93,0,0,0,218,5,105,116,101,109,115,114,197,0, 0,0,218,5,105,116,101,109,115,114,197,0,0,0,114,79,
0,0,114,79,0,0,0,114,161,0,0,0,114,89,0,0, 0,0,0,114,161,0,0,0,114,89,0,0,0,114,175,0,
0,114,175,0,0,0,114,143,0,0,0,114,149,0,0,0, 0,0,114,143,0,0,0,114,149,0,0,0,114,1,0,0,
114,1,0,0,0,114,225,0,0,0,114,5,0,0,0,41, 0,114,225,0,0,0,114,5,0,0,0,41,10,218,10,115,
10,218,10,115,121,115,95,109,111,100,117,108,101,218,11,95, 121,115,95,109,111,100,117,108,101,218,11,95,105,109,112,95,
105,109,112,95,109,111,100,117,108,101,90,11,109,111,100,117, 109,111,100,117,108,101,90,11,109,111,100,117,108,101,95,116,
108,101,95,116,121,112,101,114,17,0,0,0,114,97,0,0, 121,112,101,114,17,0,0,0,114,97,0,0,0,114,110,0,
0,114,110,0,0,0,114,96,0,0,0,90,11,115,101,108, 0,0,114,96,0,0,0,90,11,115,101,108,102,95,109,111,
102,95,109,111,100,117,108,101,90,12,98,117,105,108,116,105, 100,117,108,101,90,12,98,117,105,108,116,105,110,95,110,97,
110,95,110,97,109,101,90,14,98,117,105,108,116,105,110,95, 109,101,90,14,98,117,105,108,116,105,110,95,109,111,100,117,
109,111,100,117,108,101,114,10,0,0,0,114,10,0,0,0, 108,101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
114,11,0,0,0,218,6,95,115,101,116,117,112,117,4,0, 0,218,6,95,115,101,116,117,112,117,4,0,0,115,36,0,
0,115,36,0,0,0,0,9,4,1,4,3,8,1,18,1, 0,0,0,9,4,1,4,3,8,1,18,1,10,1,10,1,
10,1,10,1,6,1,10,1,6,2,2,1,10,1,12,3, 6,1,10,1,6,2,2,1,10,1,12,3,10,1,8,1,
10,1,8,1,10,1,10,2,10,1,114,229,0,0,0,99, 10,1,10,2,10,1,114,229,0,0,0,99,2,0,0,0,
2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,124, 67,0,0,0,115,38,0,0,0,116,0,124,0,124,1,131,
0,124,1,131,2,1,0,116,1,106,2,160,3,116,4,161, 2,1,0,116,1,106,2,160,3,116,4,161,1,1,0,116,
1,1,0,116,1,106,2,160,3,116,5,161,1,1,0,100, 1,106,2,160,3,116,5,161,1,1,0,100,1,83,0,41,
1,83,0,41,2,122,48,73,110,115,116,97,108,108,32,105, 2,122,48,73,110,115,116,97,108,108,32,105,109,112,111,114,
109,112,111,114,116,101,114,115,32,102,111,114,32,98,117,105, 116,101,114,115,32,102,111,114,32,98,117,105,108,116,105,110,
108,116,105,110,32,97,110,100,32,102,114,111,122,101,110,32, 32,97,110,100,32,102,114,111,122,101,110,32,109,111,100,117,
109,111,100,117,108,101,115,78,41,6,114,229,0,0,0,114, 108,101,115,78,41,6,114,229,0,0,0,114,15,0,0,0,
15,0,0,0,114,192,0,0,0,114,120,0,0,0,114,161, 114,192,0,0,0,114,120,0,0,0,114,161,0,0,0,114,
0,0,0,114,175,0,0,0,41,2,114,227,0,0,0,114, 175,0,0,0,41,2,114,227,0,0,0,114,228,0,0,0,
228,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,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, 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, 8,95,105,110,115,116,97,108,108,152,4,0,0,115,6,0,
97,108,95,105,109,112,111,114,116,101,114,115,160,4,0,0, 0,0,0,2,10,2,12,1,114,230,0,0,0,99,0,0,
115,6,0,0,0,0,3,8,1,4,1,114,232,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,
41,2,78,78,41,1,78,41,2,78,114,22,0,0,0,41, 0,0,67,0,0,0,115,32,0,0,0,100,1,100,2,108,
4,78,78,114,10,0,0,0,114,22,0,0,0,41,50,114, 0,125,0,124,0,97,1,124,0,160,2,116,3,106,4,116,
3,0,0,0,114,127,0,0,0,114,12,0,0,0,114,18, 5,25,0,161,1,1,0,100,2,83,0,41,3,122,57,73,
0,0,0,114,60,0,0,0,114,34,0,0,0,114,44,0, 110,115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,
0,0,114,19,0,0,0,114,20,0,0,0,114,50,0,0, 32,116,104,97,116,32,114,101,113,117,105,114,101,32,101,120,
0,114,51,0,0,0,114,54,0,0,0,114,66,0,0,0, 116,101,114,110,97,108,32,102,105,108,101,115,121,115,116,101,
114,68,0,0,0,114,77,0,0,0,114,87,0,0,0,114, 109,32,97,99,99,101,115,115,114,22,0,0,0,78,41,6,
91,0,0,0,114,98,0,0,0,114,112,0,0,0,114,113, 218,26,95,102,114,111,122,101,110,95,105,109,112,111,114,116,
0,0,0,114,92,0,0,0,114,143,0,0,0,114,149,0, 108,105,98,95,101,120,116,101,114,110,97,108,114,127,0,0,
0,0,114,153,0,0,0,114,108,0,0,0,114,94,0,0, 0,114,230,0,0,0,114,15,0,0,0,114,93,0,0,0,
0,114,159,0,0,0,114,160,0,0,0,114,95,0,0,0, 114,1,0,0,0,41,1,114,231,0,0,0,114,10,0,0,
114,161,0,0,0,114,175,0,0,0,114,180,0,0,0,114, 0,114,10,0,0,0,114,11,0,0,0,218,27,95,105,110,
189,0,0,0,114,191,0,0,0,114,196,0,0,0,114,202, 115,116,97,108,108,95,101,120,116,101,114,110,97,108,95,105,
0,0,0,90,15,95,69,82,82,95,77,83,71,95,80,82, 109,112,111,114,116,101,114,115,160,4,0,0,115,6,0,0,
69,70,73,88,114,204,0,0,0,114,207,0,0,0,218,6, 0,0,3,8,1,4,1,114,232,0,0,0,41,2,78,78,
111,98,106,101,99,116,114,208,0,0,0,114,209,0,0,0, 41,1,78,41,2,78,114,22,0,0,0,41,4,78,78,114,
114,210,0,0,0,114,215,0,0,0,114,221,0,0,0,114, 10,0,0,0,114,22,0,0,0,41,50,114,3,0,0,0,
224,0,0,0,114,225,0,0,0,114,229,0,0,0,114,230, 114,127,0,0,0,114,12,0,0,0,114,18,0,0,0,114,
0,0,0,114,232,0,0,0,114,10,0,0,0,114,10,0, 60,0,0,0,114,34,0,0,0,114,44,0,0,0,114,19,
0,0,114,10,0,0,0,114,11,0,0,0,218,8,60,109, 0,0,0,114,20,0,0,0,114,50,0,0,0,114,51,0,
111,100,117,108,101,62,1,0,0,0,115,94,0,0,0,4, 0,0,114,54,0,0,0,114,66,0,0,0,114,68,0,0,
24,4,2,8,8,8,8,4,2,4,3,16,4,14,77,14, 0,114,77,0,0,0,114,87,0,0,0,114,91,0,0,0,
21,14,16,8,37,8,17,8,11,14,8,8,11,8,12,8, 114,98,0,0,0,114,112,0,0,0,114,113,0,0,0,114,
16,8,36,14,101,16,26,10,45,14,72,8,17,8,17,8, 92,0,0,0,114,143,0,0,0,114,149,0,0,0,114,153,
30,8,37,8,42,8,15,14,75,14,79,14,13,8,9,8, 0,0,0,114,108,0,0,0,114,94,0,0,0,114,159,0,
9,10,47,8,16,4,1,8,2,8,32,6,3,8,16,10, 0,0,114,160,0,0,0,114,95,0,0,0,114,161,0,0,
15,14,37,8,27,10,37,8,7,8,35,8,8, 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,
}; };

File diff suppressed because it is too large Load Diff