bpo-42810: Mark jumps at end of if and try statements as artificial. (GH-24091)

* Mark jumps at end of if and try statements as artificial.

* Update importlib

* Add comment explaining the purpose of ADDOP_JUMP_NOLINE.
This commit is contained in:
Mark Shannon 2021-01-04 18:06:55 +00:00 committed by GitHub
parent de833b6013
commit 127dde5916
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 2250 additions and 2191 deletions

View File

@ -874,6 +874,48 @@ class TraceTestCase(unittest.TestCase):
(5, 'line'),
(5, 'return')])
def test_nested_ifs(self):
def func():
a = b = 1
if a == 1:
if b == 1:
x = 4
else:
y = 6
else:
z = 8
self.run_and_compare(func,
[(0, 'call'),
(1, 'line'),
(2, 'line'),
(3, 'line'),
(4, 'line'),
(4, 'return')])
def test_nested_try_if(self):
def func():
x = "hello"
try:
3/0
except ZeroDivisionError:
if x == 'raise':
raise ValueError() # line 6
f = 7
self.run_and_compare(func,
[(0, 'call'),
(1, 'line'),
(2, 'line'),
(3, 'line'),
(3, 'exception'),
(4, 'line'),
(5, 'line'),
(7, 'line'),
(7, 'return')])
class SkipLineEventsTraceTestCase(TraceTestCase):
"""Repeat the trace tests, but with per-line events skipped"""

View File

@ -207,6 +207,7 @@ 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 *);
static int compiler_addop_j_noline(struct compiler *, int, basicblock *);
static int compiler_error(struct compiler *, const char *);
static int compiler_warn(struct compiler *, const char *, ...);
static int compiler_nameop(struct compiler *, identifier, expr_context_ty);
@ -1425,6 +1426,12 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b)
return add_jump_to_block(c->u->u_curblock, opcode, c->u->u_lineno, b);
}
static int
compiler_addop_j_noline(struct compiler *c, int opcode, basicblock *b)
{
return add_jump_to_block(c->u->u_curblock, opcode, -1, b);
}
/* NEXT_BLOCK() creates an implicit jump from the current block
to the new block.
@ -1495,6 +1502,14 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b)
return 0; \
}
/* Add a jump with no line number.
* Used for artificial jumps that have no corresponding
* token in the source code. */
#define ADDOP_JUMP_NOLINE(C, OP, O) { \
if (!compiler_addop_j_noline((C), (OP), (O))) \
return 0; \
}
#define ADDOP_COMPARE(C, CMP) { \
if (!compiler_addcompare((C), (cmpop_ty)(CMP))) \
return 0; \
@ -2527,7 +2542,7 @@ compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
return 0;
if (!compiler_jump_if(c, e->v.IfExp.body, next, cond))
return 0;
ADDOP_JUMP(c, JUMP_FORWARD, end);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, end);
compiler_use_next_block(c, next2);
if (!compiler_jump_if(c, e->v.IfExp.orelse, next, cond))
return 0;
@ -2560,11 +2575,11 @@ compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
basicblock *end = compiler_new_block(c);
if (end == NULL)
return 0;
ADDOP_JUMP(c, JUMP_FORWARD, end);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, end);
compiler_use_next_block(c, cleanup);
ADDOP(c, POP_TOP);
if (!cond) {
ADDOP_JUMP(c, JUMP_FORWARD, next);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, next);
}
compiler_use_next_block(c, end);
return 1;
@ -2599,7 +2614,7 @@ compiler_ifexp(struct compiler *c, expr_ty e)
if (!compiler_jump_if(c, e->v.IfExp.test, next, 0))
return 0;
VISIT(c, expr, e->v.IfExp.body);
ADDOP_JUMP(c, JUMP_FORWARD, end);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, end);
compiler_use_next_block(c, next);
VISIT(c, expr, e->v.IfExp.orelse);
compiler_use_next_block(c, end);
@ -2686,7 +2701,7 @@ compiler_if(struct compiler *c, stmt_ty s)
}
VISIT_SEQ(c, stmt, s->v.If.body);
if (asdl_seq_LEN(s->v.If.orelse)) {
ADDOP_JUMP(c, JUMP_FORWARD, end);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, end);
compiler_use_next_block(c, next);
VISIT_SEQ(c, stmt, s->v.If.orelse);
}
@ -2945,7 +2960,7 @@ compiler_try_finally(struct compiler *c, stmt_ty s)
ADDOP(c, POP_BLOCK);
compiler_pop_fblock(c, FINALLY_TRY, body);
VISIT_SEQ(c, stmt, s->v.Try.finalbody);
ADDOP_JUMP(c, JUMP_FORWARD, exit);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, exit);
/* `finally` block */
compiler_use_next_block(c, end);
if (!compiler_push_fblock(c, FINALLY_END, end, NULL, NULL))
@ -3094,6 +3109,8 @@ compiler_try_except(struct compiler *c, stmt_ty s)
return 0;
VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body);
/* name = None; del name; # Mark as artificial */
c->u->u_lineno = -1;
ADDOP(c, POP_EXCEPT);
ADDOP_JUMP(c, JUMP_FORWARD, end);
}
@ -3907,7 +3924,7 @@ compiler_compare(struct compiler *c, expr_ty e)
basicblock *end = compiler_new_block(c);
if (end == NULL)
return 0;
ADDOP_JUMP(c, JUMP_FORWARD, end);
ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, end);
compiler_use_next_block(c, cleanup);
ADDOP(c, ROT_TWO);
ADDOP(c, POP_TOP);

1606
Python/importlib.h generated

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -890,144 +890,144 @@ const unsigned char _Py_M__zipimport[] = {
95,109,116,105,109,101,90,11,115,111,117,114,99,101,95,115,
105,122,101,114,50,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,107,2,0,0,115,72,0,0,
104,97,108,95,99,111,100,101,107,2,0,0,115,74,0,0,
0,2,2,2,1,6,254,14,5,12,2,4,1,12,1,10,
1,2,1,2,255,8,1,2,255,10,2,8,1,4,1,4,
1,2,1,4,254,4,5,8,1,6,255,8,4,6,255,4,
3,22,3,18,1,2,255,4,2,8,1,4,255,4,2,18,
2,10,1,16,1,4,1,255,128,114,157,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,152,2,0,0,115,8,0,0,0,
12,1,12,1,4,1,255,128,114,161,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,78,0,0,0,84,41,1,90,12,
100,111,110,116,95,105,110,104,101,114,105,116,41,2,114,161,
0,0,0,218,7,99,111,109,112,105,108,101,41,2,114,57,
0,0,0,114,160,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,159,2,0,0,115,6,0,0,
0,8,1,16,1,255,128,114,163,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,88,0,0,0,114,14,0,0,0,41,2,
114,133,0,0,0,90,6,109,107,116,105,109,101,41,2,218,
1,100,114,140,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,165,2,0,0,115,20,0,0,0,4,
1,10,1,10,1,6,1,6,1,10,1,10,1,6,1,6,
249,255,128,114,171,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,110,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,119,0,41,7,78,114,14,0,0,0,169,2,218,1,
99,218,1,111,114,165,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,171,0,0,0,114,26,0,0,0,
218,10,73,110,100,101,120,69,114,114,111,114,114,156,0,0,
0,41,6,114,32,0,0,0,114,13,0,0,0,114,58,0,
0,0,114,133,0,0,0,114,134,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,153,
0,0,0,178,2,0,0,115,24,0,0,0,2,1,20,2,
12,1,10,1,8,3,8,1,8,1,16,1,18,1,6,1,
2,255,255,128,114,153,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,80,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,18,4,0,116,1,121,78,1,0,1,
0,1,0,89,0,100,0,83,0,116,2,124,0,106,3,124,
2,131,2,83,0,119,0,41,3,78,114,14,0,0,0,114,
172,0,0,0,41,4,114,28,0,0,0,114,26,0,0,0,
114,56,0,0,0,114,29,0,0,0,41,3,114,32,0,0,
0,114,13,0,0,0,114,58,0,0,0,114,9,0,0,0,
114,9,0,0,0,114,10,0,0,0,114,151,0,0,0,197,
2,0,0,115,18,0,0,0,20,2,12,1,2,2,14,1,
12,1,6,1,12,2,2,253,255,128,114,151,0,0,0,99,
2,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,
11,0,0,0,67,0,0,0,115,18,1,0,0,116,0,124,
0,124,1,131,2,125,2,100,0,125,3,116,1,68,0,93,
204,92,3,125,4,125,5,125,6,124,2,124,4,23,0,125,
7,116,2,106,3,100,1,124,0,106,4,116,5,124,7,100,
2,100,3,141,5,1,0,122,14,124,0,106,6,124,7,25,
0,125,8,87,0,110,18,4,0,116,7,144,1,121,16,1,
0,1,0,1,0,89,0,113,18,124,8,100,4,25,0,125,
9,116,8,124,0,106,4,124,8,131,2,125,10,100,0,125,
11,124,5,114,182,122,20,116,9,124,0,124,9,124,7,124,
1,124,10,131,5,125,11,87,0,110,50,4,0,116,10,144,
1,121,14,1,0,125,12,1,0,122,16,124,12,125,3,87,
0,89,0,100,0,125,12,126,12,110,18,100,0,125,12,126,
12,119,1,116,11,124,9,124,10,131,2,125,11,124,11,100,
0,117,0,114,202,113,18,124,8,100,4,25,0,125,9,124,
11,124,6,124,9,102,3,2,0,1,0,83,0,124,3,114,
252,100,5,124,3,155,0,157,2,125,13,116,12,124,13,124,
1,100,6,141,2,124,3,130,2,116,12,100,7,124,1,155,
2,157,2,124,1,100,6,141,2,130,1,119,0,119,0,41,
8,78,122,13,116,114,121,105,110,103,32,123,125,123,125,123,
125,114,88,0,0,0,41,1,90,9,118,101,114,98,111,115,
105,116,121,114,0,0,0,0,122,20,109,111,100,117,108,101,
32,108,111,97,100,32,102,97,105,108,101,100,58,32,114,62,
0,0,0,114,61,0,0,0,41,13,114,36,0,0,0,114,
91,0,0,0,114,45,0,0,0,114,80,0,0,0,114,29,
0,0,0,114,20,0,0,0,114,28,0,0,0,114,26,0,
0,0,114,56,0,0,0,114,157,0,0,0,114,79,0,0,
0,114,163,0,0,0,114,3,0,0,0,41,14,114,32,0,
0,0,114,38,0,0,0,114,13,0,0,0,90,12,105,109,
112,111,114,116,95,101,114,114,111,114,114,92,0,0,0,114,
93,0,0,0,114,51,0,0,0,114,66,0,0,0,114,58,
0,0,0,114,40,0,0,0,114,128,0,0,0,114,50,0,
0,0,90,3,101,120,99,114,81,0,0,0,114,9,0,0,
0,114,9,0,0,0,114,10,0,0,0,114,48,0,0,0,
212,2,0,0,115,60,0,0,0,10,1,4,1,14,1,8,
1,22,1,2,1,14,1,14,1,4,1,8,2,12,1,4,
1,4,1,2,1,20,1,16,1,16,1,8,128,10,2,8,
1,2,3,8,1,14,1,4,2,10,1,14,1,18,2,2,
241,2,247,255,128,114,48,0,0,0,41,46,114,86,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,
45,0,0,0,114,150,0,0,0,114,112,0,0,0,114,154,
0,0,0,114,71,0,0,0,114,133,0,0,0,114,69,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,79,0,0,0,114,3,0,0,0,
114,25,0,0,0,218,4,116,121,112,101,114,74,0,0,0,
114,115,0,0,0,114,117,0,0,0,114,119,0,0,0,90,
13,95,76,111,97,100,101,114,66,97,115,105,99,115,114,4,
0,0,0,114,91,0,0,0,114,36,0,0,0,114,37,0,
0,0,114,35,0,0,0,114,27,0,0,0,114,124,0,0,
0,114,144,0,0,0,114,146,0,0,0,114,56,0,0,0,
114,149,0,0,0,114,157,0,0,0,218,8,95,95,99,111,
100,101,95,95,114,155,0,0,0,114,161,0,0,0,114,163,
0,0,0,114,171,0,0,0,114,153,0,0,0,114,151,0,
0,0,114,48,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,92,0,0,0,4,0,
8,16,16,1,8,1,8,1,8,1,8,1,8,1,8,1,
8,1,8,2,6,3,14,1,16,3,4,4,8,2,4,2,
4,1,4,1,18,2,0,127,0,127,12,34,12,1,2,1,
2,1,4,252,8,9,8,4,8,9,8,31,2,126,2,254,
4,29,8,5,8,21,8,46,8,8,10,40,8,5,8,7,
8,6,8,13,8,19,12,15,255,128,
1,2,1,4,254,4,5,8,1,4,255,2,128,8,4,6,
255,4,3,22,3,18,1,2,255,4,2,8,1,4,255,4,
2,18,2,10,1,16,1,4,1,255,128,114,157,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,152,2,0,0,115,8,0,
0,0,12,1,12,1,4,1,255,128,114,161,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,78,0,0,0,84,41,1,
90,12,100,111,110,116,95,105,110,104,101,114,105,116,41,2,
114,161,0,0,0,218,7,99,111,109,112,105,108,101,41,2,
114,57,0,0,0,114,160,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,159,2,0,0,115,6,
0,0,0,8,1,16,1,255,128,114,163,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,88,0,0,0,114,14,0,0,0,
41,2,114,133,0,0,0,90,6,109,107,116,105,109,101,41,
2,218,1,100,114,140,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,165,2,0,0,115,20,0,0,
0,4,1,10,1,10,1,6,1,6,1,10,1,10,1,6,
1,6,249,255,128,114,171,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,110,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,119,0,41,7,78,114,14,0,0,0,169,2,
218,1,99,218,1,111,114,165,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,171,0,0,0,114,26,0,
0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,156,
0,0,0,41,6,114,32,0,0,0,114,13,0,0,0,114,
58,0,0,0,114,133,0,0,0,114,134,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,153,0,0,0,178,2,0,0,115,24,0,0,0,2,1,
20,2,12,1,10,1,8,3,8,1,8,1,16,1,18,1,
6,1,2,255,255,128,114,153,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,80,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,18,4,0,116,1,121,78,1,
0,1,0,1,0,89,0,100,0,83,0,116,2,124,0,106,
3,124,2,131,2,83,0,119,0,41,3,78,114,14,0,0,
0,114,172,0,0,0,41,4,114,28,0,0,0,114,26,0,
0,0,114,56,0,0,0,114,29,0,0,0,41,3,114,32,
0,0,0,114,13,0,0,0,114,58,0,0,0,114,9,0,
0,0,114,9,0,0,0,114,10,0,0,0,114,151,0,0,
0,197,2,0,0,115,18,0,0,0,20,2,12,1,2,2,
14,1,12,1,6,1,12,2,2,253,255,128,114,151,0,0,
0,99,2,0,0,0,0,0,0,0,0,0,0,0,14,0,
0,0,11,0,0,0,67,0,0,0,115,18,1,0,0,116,
0,124,0,124,1,131,2,125,2,100,0,125,3,116,1,68,
0,93,204,92,3,125,4,125,5,125,6,124,2,124,4,23,
0,125,7,116,2,106,3,100,1,124,0,106,4,116,5,124,
7,100,2,100,3,141,5,1,0,122,14,124,0,106,6,124,
7,25,0,125,8,87,0,110,18,4,0,116,7,144,1,121,
16,1,0,1,0,1,0,89,0,113,18,124,8,100,4,25,
0,125,9,116,8,124,0,106,4,124,8,131,2,125,10,100,
0,125,11,124,5,114,182,122,20,116,9,124,0,124,9,124,
7,124,1,124,10,131,5,125,11,87,0,110,50,4,0,116,
10,144,1,121,14,1,0,125,12,1,0,122,16,124,12,125,
3,87,0,89,0,100,0,125,12,126,12,110,18,100,0,125,
12,126,12,119,1,116,11,124,9,124,10,131,2,125,11,124,
11,100,0,117,0,114,202,113,18,124,8,100,4,25,0,125,
9,124,11,124,6,124,9,102,3,2,0,1,0,83,0,124,
3,114,252,100,5,124,3,155,0,157,2,125,13,116,12,124,
13,124,1,100,6,141,2,124,3,130,2,116,12,100,7,124,
1,155,2,157,2,124,1,100,6,141,2,130,1,119,0,119,
0,41,8,78,122,13,116,114,121,105,110,103,32,123,125,123,
125,123,125,114,88,0,0,0,41,1,90,9,118,101,114,98,
111,115,105,116,121,114,0,0,0,0,122,20,109,111,100,117,
108,101,32,108,111,97,100,32,102,97,105,108,101,100,58,32,
114,62,0,0,0,114,61,0,0,0,41,13,114,36,0,0,
0,114,91,0,0,0,114,45,0,0,0,114,80,0,0,0,
114,29,0,0,0,114,20,0,0,0,114,28,0,0,0,114,
26,0,0,0,114,56,0,0,0,114,157,0,0,0,114,79,
0,0,0,114,163,0,0,0,114,3,0,0,0,41,14,114,
32,0,0,0,114,38,0,0,0,114,13,0,0,0,90,12,
105,109,112,111,114,116,95,101,114,114,111,114,114,92,0,0,
0,114,93,0,0,0,114,51,0,0,0,114,66,0,0,0,
114,58,0,0,0,114,40,0,0,0,114,128,0,0,0,114,
50,0,0,0,90,3,101,120,99,114,81,0,0,0,114,9,
0,0,0,114,9,0,0,0,114,10,0,0,0,114,48,0,
0,0,212,2,0,0,115,60,0,0,0,10,1,4,1,14,
1,8,1,22,1,2,1,14,1,14,1,4,1,8,2,12,
1,4,1,4,1,2,1,20,1,16,1,16,1,8,128,10,
2,8,1,2,3,8,1,14,1,4,2,10,1,14,1,18,
2,2,241,2,247,255,128,114,48,0,0,0,41,46,114,86,
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,45,0,0,0,114,150,0,0,0,114,112,0,0,0,
114,154,0,0,0,114,71,0,0,0,114,133,0,0,0,114,
69,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,79,0,0,0,114,3,0,
0,0,114,25,0,0,0,218,4,116,121,112,101,114,74,0,
0,0,114,115,0,0,0,114,117,0,0,0,114,119,0,0,
0,90,13,95,76,111,97,100,101,114,66,97,115,105,99,115,
114,4,0,0,0,114,91,0,0,0,114,36,0,0,0,114,
37,0,0,0,114,35,0,0,0,114,27,0,0,0,114,124,
0,0,0,114,144,0,0,0,114,146,0,0,0,114,56,0,
0,0,114,149,0,0,0,114,157,0,0,0,218,8,95,95,
99,111,100,101,95,95,114,155,0,0,0,114,161,0,0,0,
114,163,0,0,0,114,171,0,0,0,114,153,0,0,0,114,
151,0,0,0,114,48,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,92,0,0,0,
4,0,8,16,16,1,8,1,8,1,8,1,8,1,8,1,
8,1,8,1,8,2,6,3,14,1,16,3,4,4,8,2,
4,2,4,1,4,1,18,2,0,127,0,127,12,34,12,1,
2,1,2,1,4,252,8,9,8,4,8,9,8,31,2,126,
2,254,4,29,8,5,8,21,8,46,8,8,10,40,8,5,
8,7,8,6,8,13,8,19,12,15,255,128,
};