diff --git a/pkgs/racket-doc/scribblings/reference/eval.scrbl b/pkgs/racket-doc/scribblings/reference/eval.scrbl index 79f752b577..4b37eea3e1 100644 --- a/pkgs/racket-doc/scribblings/reference/eval.scrbl +++ b/pkgs/racket-doc/scribblings/reference/eval.scrbl @@ -484,6 +484,18 @@ Like @racket[eval-syntax], but calls the current @tech{compilation handler} in tail position with @racket[stx].} +@defproc[(compiled-expression-recompile [ce compiled-expression?]) compiled-expression?]{ + +Recompiles @racket[ce], effectively re-running optimization passes to +produce an equivalent compiled form with potentially different +performance characteristics. + +If @racket[ce] includes module forms, then only phase-0 code in the +immediate module (not in submodules) is recompiled. + +@history[#:added "6.2.900.9"]} + + @defproc[(compiled-expression? [v any/c]) boolean?]{ Returns @racket[#t] if @racket[v] is a compiled form, @racket[#f] diff --git a/racket/src/racket/mk-gdbinit.rkt b/racket/src/racket/mk-gdbinit.rkt index 713df4479f..6867800f4e 100644 --- a/racket/src/racket/mk-gdbinit.rkt +++ b/racket/src/racket/mk-gdbinit.rkt @@ -73,6 +73,10 @@ define psoq set $TL = ((Scheme_Toplevel*) ($O)) printf "scheme_toplevel_type depth=%d position=%d", $TL->depth, $TL->position end + if ( $OT == <> ) + set $local = ((Scheme_Local *) ($O)) + printf "scheme_local position=%d", $local->position + end # if ( $OT == <> ) # set $SSO = ((Scheme_Simple_Object*) ($O)) # set $index = $SSO->u.ptr_int_val.pint @@ -86,11 +90,11 @@ define psoq printf "scheme_application_type - args %i\n", $size set $RATOR = $AP->args[0] indent $arg1 - printf "rator=" - psox $RATOR $arg1+1 - + printf "rator = " + psonn $RATOR + printf "\n" set $cnt = 1 - while ( $cnt < $size ) + while ( $cnt <= $size ) indent $arg1 printf "rand%i = ", ($cnt - 1) psonn $AP->args[$cnt] @@ -135,7 +139,85 @@ define psoq psox $unclosure->code $arg1+1 set $OT = <> end - + if ( $OT == <> ) + set $unclosure = ((Scheme_Closure_Data *) $O) + #set $name = $code->name + set $param_num = $unclosure->num_params + printf "scheme_compiled_unclosed_procedure_type - num_params %i\n", $param_num + psox $unclosure->code $arg1+1 + end + if ( $OT == <> ) + set $let_value = ((Scheme_Let_Value *) $O) + set $cnt = $let_value->count + set $pos = $let_value->position + set $val = $let_value->value + set $body = $let_value->body + printf "scheme_let_value\n" + indent $arg1 + printf "count = %i\n", $cnt + indent $arg1 + printf "position = %i\n", $pos + psox $val $arg1+1 + printf "\n" + psox $body $arg1+1 + printf "\n" + end + if ( $OT == <> ) + set $let_void = ((Scheme_Let_Void *) $O) + set $cnt = $let_void->count + set $body = $let_void->body + printf "scheme_let_void\n" + indent $arg1 + printf "count = %i\n", $cnt + indent $arg1 + printf "body = " + psox $body $arg1+1 + printf "\n" + end + if ( $OT == <> ) + set $let_header = ((Scheme_Let_Header *) $O) + set $cnt = $let_header->count + set $clauses = $let_header->num_clauses + set $body = $let_header->body + printf "scheme_let_header\n" + indent $arg1 + printf "count = %i, num_clauses = %i\n", $cnt, $clauses + indent $arg1 + printf "body = " + psox $body $arg1+1 + printf "\n" + end + if ( $OT == <> ) + set $let_value = ((Scheme_Compiled_Let_Value *) $O) + set $cnt = $let_value->count + set $pos = $let_value->position + set $val = $let_value->value + set $body = $let_value->body + printf "scheme_compiled_let_value\n" + indent $arg1 + printf "count = %i, position = %i\n", $cnt, $pos + indent $arg1 + printf "value =\n" + psox $val $arg1+1 + printf "\n" + indent $arg1 + printf "body =\n" + psox $body $arg1+1 + printf "\n" + end + if ( $OT == <> ) + set $sb = ((Scheme_Set_Bang *) $O) + set $var = $sb->var + set $val = $sb->val + printf "scheme_set_bang\n" + indent $arg1 + printf "var = " + psox $var $arg1+1 + printf "\n" + printf "val = " + psox $val $arg1+1 + printf "\n" + end if ( $OT == <> ) set $seq = ((Scheme_Sequence *) $O) set $size = $seq->count @@ -151,6 +233,21 @@ define psoq end set $OT = 0 end + if ( $OT == <> ) + set $seq = ((Scheme_Sequence *) $O) + set $size = $seq->count + printf "scheme_begin0_sequence - size %i\n", $size + set $cnt = 0 + while ( $cnt < $size ) + indent $arg1 + printf "%i - ", $cnt + psonn $seq->array[$cnt] + printf "\n" + #psox $seq->array[$cnt] $arg1+2 + set $cnt++ + end + set $OT = 0 + end if ( $OT == <>) set $breq = ((Scheme_Branch_Rec *) $O) printf "scheme_branch_type\n" @@ -185,6 +282,13 @@ define psoq indent $arg1+1 printf "body %p\n", $letone->body end + if ( $OT == <> ) + set $box = ((Scheme_Simple_Object *) $O) + printf "scheme_boxenv_type\n" + psox $box->u.two_ptr_val.ptr1 $arg1+1 + printf "\n" + psox $box->u.two_ptr_val.ptr2 $arg1+1 + end if ( $OT == <> ) printf "scheme_closure_type\n" set $closure = ((Scheme_Closure *) $O) diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index 4fac159c22..5ba2ade4c9 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -730,23 +730,12 @@ Scheme_Object *scheme_toplevel_to_flagged_toplevel(Scheme_Object *_tl, int flags return scheme_make_toplevel(tl->depth, tl->position, 0, flags); } -Scheme_Object *scheme_register_stx_in_prefix(Scheme_Object *var, Scheme_Comp_Env *env, - Scheme_Compile_Info *rec, int drec) +Scheme_Object *scheme_register_stx_in_comp_prefix(Scheme_Object *var, Comp_Prefix *cp) { - Comp_Prefix *cp = env->prefix; Scheme_Local *l; Scheme_Object *o; int pos; - if (rec && rec[drec].dont_mark_local_use) { - /* Make up anything; it's going to be ignored. */ - l = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local)); - l->iso.so.type = scheme_compiled_quote_syntax_type; - l->position = 0; - - return (Scheme_Object *)l; - } - if (!cp->stxes) { Scheme_Hash_Table *ht; ht = scheme_make_hash_table(SCHEME_hash_ptr); @@ -767,6 +756,24 @@ Scheme_Object *scheme_register_stx_in_prefix(Scheme_Object *var, Scheme_Comp_Env return o; } +Scheme_Object *scheme_register_stx_in_prefix(Scheme_Object *var, Scheme_Comp_Env *env, + Scheme_Compile_Info *rec, int drec) +{ + Scheme_Local *l; + Comp_Prefix *cp = env->prefix; + + if (rec && rec[drec].dont_mark_local_use) { + /* Make up anything; it's going to be ignored. */ + l = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local)); + l->iso.so.type = scheme_compiled_quote_syntax_type; + l->position = 0; + + return (Scheme_Object *)l; + } + + return scheme_register_stx_in_comp_prefix(var, cp); +} + /*========================================================================*/ /* compile-time env, lookup bindings */ /*========================================================================*/ diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 7f2b33898f..b486bc703a 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,5 +1,5 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,56,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,57,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,1,0,0,8,0, 18,0,22,0,26,0,31,0,38,0,42,0,47,0,59,0,66,0,69,0,82, 0,89,0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159,0, @@ -29,50 +29,50 @@ 22,90,2,19,248,22,102,199,12,249,22,80,2,20,248,22,104,201,27,248,22, 164,4,195,249,22,157,4,80,143,42,39,251,22,90,2,19,248,22,102,199,249, 22,80,2,20,248,22,104,201,12,27,248,22,82,248,22,164,4,196,28,248,22, -88,193,20,14,144,40,39,40,28,248,22,88,248,22,82,194,248,22,161,20,193, -249,22,157,4,80,143,42,39,251,22,90,2,19,248,22,161,20,199,249,22,80, -2,4,248,22,162,20,201,11,18,143,10,2,28,27,248,22,82,248,22,164,4, +88,193,20,14,144,40,39,40,28,248,22,88,248,22,82,194,248,22,162,20,193, +249,22,157,4,80,143,42,39,251,22,90,2,19,248,22,162,20,199,249,22,80, +2,4,248,22,163,20,201,11,18,143,10,2,28,27,248,22,82,248,22,164,4, 196,28,248,22,88,193,20,14,144,40,39,40,28,248,22,88,248,22,82,194,248, -22,161,20,193,249,22,157,4,80,143,42,39,250,22,90,2,21,248,22,90,249, -22,90,248,22,90,2,22,248,22,161,20,201,251,22,90,2,19,2,22,2,22, -249,22,80,2,11,248,22,162,20,204,18,143,11,2,28,248,22,164,4,193,27, -248,22,164,4,194,249,22,80,248,22,90,248,22,81,196,248,22,162,20,195,27, +22,162,20,193,249,22,157,4,80,143,42,39,250,22,90,2,21,248,22,90,249, +22,90,248,22,90,2,22,248,22,162,20,201,251,22,90,2,19,2,22,2,22, +249,22,80,2,11,248,22,163,20,204,18,143,11,2,28,248,22,164,4,193,27, +248,22,164,4,194,249,22,80,248,22,90,248,22,81,196,248,22,163,20,195,27, 248,22,82,248,22,164,4,23,197,1,249,22,157,4,80,143,42,39,28,248,22, 64,248,22,158,4,248,22,81,23,198,2,27,249,22,2,32,0,88,148,8,36, 40,46,11,9,222,33,43,248,22,164,4,248,22,102,23,200,2,250,22,90,2, -23,248,22,90,249,22,90,248,22,90,248,22,161,20,23,204,2,250,22,91,2, -24,249,22,2,22,81,23,204,2,248,22,104,23,206,2,249,22,80,248,22,161, +23,248,22,90,249,22,90,248,22,90,248,22,162,20,23,204,2,250,22,91,2, +24,249,22,2,22,81,23,204,2,248,22,104,23,206,2,249,22,80,248,22,162, 20,23,202,1,249,22,2,22,102,23,200,1,250,22,91,2,21,249,22,2,32, -0,88,148,8,36,40,50,11,9,222,33,44,248,22,164,4,248,22,161,20,201, -248,22,162,20,198,27,248,22,164,4,194,249,22,80,248,22,90,248,22,81,196, -248,22,162,20,195,27,248,22,82,248,22,164,4,23,197,1,249,22,157,4,80, +0,88,148,8,36,40,50,11,9,222,33,44,248,22,164,4,248,22,162,20,201, +248,22,163,20,198,27,248,22,164,4,194,249,22,80,248,22,90,248,22,81,196, +248,22,163,20,195,27,248,22,82,248,22,164,4,23,197,1,249,22,157,4,80, 143,42,39,250,22,91,2,23,249,22,2,32,0,88,148,8,36,40,50,11,9, -222,33,46,248,22,164,4,248,22,81,201,248,22,162,20,198,27,248,22,82,248, +222,33,46,248,22,164,4,248,22,81,201,248,22,163,20,198,27,248,22,82,248, 22,164,4,196,27,248,22,164,4,248,22,81,195,249,22,157,4,80,143,43,39, -28,248,22,88,195,250,22,91,2,21,9,248,22,162,20,199,250,22,90,2,7, -248,22,90,248,22,81,199,250,22,91,2,8,248,22,162,20,201,248,22,162,20, +28,248,22,88,195,250,22,91,2,21,9,248,22,163,20,199,250,22,90,2,7, +248,22,90,248,22,81,199,250,22,91,2,8,248,22,163,20,201,248,22,163,20, 202,27,248,22,82,248,22,164,4,196,27,248,22,164,4,248,22,81,195,249,22, -157,4,80,143,43,39,28,248,22,88,195,250,22,91,2,21,9,248,22,162,20, -199,250,22,90,2,21,248,22,90,248,22,81,199,250,22,91,2,9,248,22,162, -20,201,248,22,162,20,202,27,248,22,82,248,22,164,4,23,197,1,27,249,22, +157,4,80,143,43,39,28,248,22,88,195,250,22,91,2,21,9,248,22,163,20, +199,250,22,90,2,21,248,22,90,248,22,81,199,250,22,91,2,9,248,22,163, +20,201,248,22,163,20,202,27,248,22,82,248,22,164,4,23,197,1,27,249,22, 1,22,94,249,22,2,22,164,4,248,22,164,4,248,22,81,199,248,22,185,4, 249,22,157,4,80,143,44,39,251,22,90,1,22,119,105,116,104,45,99,111,110, 116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,25,250,22,91,1,23, 101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105, 111,110,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97, 114,107,45,115,101,116,45,102,105,114,115,116,11,2,25,202,250,22,91,2,21, -9,248,22,162,20,204,27,248,22,82,248,22,164,4,196,28,248,22,88,193,20, +9,248,22,163,20,204,27,248,22,82,248,22,164,4,196,28,248,22,88,193,20, 14,144,40,39,40,249,22,157,4,80,143,42,39,27,248,22,164,4,248,22,81, 197,28,249,22,169,9,64,61,62,248,22,158,4,248,22,102,196,250,22,90,2, -21,248,22,90,249,22,90,21,93,2,26,248,22,161,20,199,250,22,91,2,5, -249,22,90,2,26,249,22,90,248,22,111,203,2,26,248,22,162,20,202,251,22, -90,2,19,28,249,22,169,9,248,22,158,4,248,22,161,20,200,66,101,108,115, -101,10,248,22,161,20,197,250,22,91,2,21,9,248,22,162,20,200,249,22,80, -2,5,248,22,162,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22, +21,248,22,90,249,22,90,21,93,2,26,248,22,162,20,199,250,22,91,2,5, +249,22,90,2,26,249,22,90,248,22,111,203,2,26,248,22,163,20,202,251,22, +90,2,19,28,249,22,169,9,248,22,158,4,248,22,162,20,200,66,101,108,115, +101,10,248,22,162,20,197,250,22,91,2,21,9,248,22,163,20,200,249,22,80, +2,5,248,22,163,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22, 82,248,22,164,4,196,249,22,157,4,80,143,42,39,28,248,22,64,248,22,158, -4,248,22,81,197,250,22,90,2,27,248,22,90,248,22,161,20,199,248,22,102, -198,27,248,22,158,4,248,22,161,20,197,250,22,90,2,27,248,22,90,248,22, -81,197,250,22,91,2,24,248,22,162,20,199,248,22,162,20,202,144,39,20,121, +4,248,22,81,197,250,22,90,2,27,248,22,90,248,22,162,20,199,248,22,102, +198,27,248,22,158,4,248,22,162,20,197,250,22,90,2,27,248,22,90,248,22, +81,197,250,22,91,2,24,248,22,163,20,199,248,22,163,20,202,144,39,20,121, 145,2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2,3,11, 11,11,11,9,9,11,11,11,10,39,80,143,39,39,20,121,145,2,1,39,16, 0,16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2,5, @@ -102,7 +102,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2091); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,56,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,57,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,1,0,0,8,0, 16,0,29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,178,0,193, 0,211,0,223,0,239,0,253,0,19,1,39,1,73,1,90,1,107,1,130,1, @@ -185,292 +185,292 @@ 114,111,111,116,32,112,97,116,104,58,32,68,102,105,110,105,115,104,5,11,80, 76,84,67,79,76,76,69,67,84,83,1,20,99,111,108,108,101,99,116,115,45, 115,101,97,114,99,104,45,100,105,114,115,6,8,8,99,111,108,108,101,99,116, -115,27,248,22,173,15,194,28,192,192,28,248,22,153,7,194,27,248,22,132,16, -195,28,192,192,248,22,133,16,195,11,0,21,35,114,120,34,94,91,92,92,93, +115,27,248,22,174,15,194,28,192,192,28,248,22,153,7,194,27,248,22,133,16, +195,28,192,192,248,22,134,16,195,11,0,21,35,114,120,34,94,91,92,92,93, 91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0, 22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42, 36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41, -36,34,86,94,28,28,248,22,174,15,23,195,2,10,28,248,22,173,15,23,195, -2,10,28,248,22,153,7,23,195,2,28,248,22,132,16,23,195,2,10,248,22, -133,16,23,195,2,11,12,250,22,180,11,2,41,2,42,23,197,2,28,28,248, -22,174,15,23,195,2,249,22,169,9,248,22,175,15,23,197,2,2,43,249,22, +36,34,86,94,28,28,248,22,175,15,23,195,2,10,28,248,22,174,15,23,195, +2,10,28,248,22,153,7,23,195,2,28,248,22,133,16,23,195,2,10,248,22, +134,16,23,195,2,11,12,250,22,181,11,2,41,2,42,23,197,2,28,28,248, +22,175,15,23,195,2,249,22,169,9,248,22,176,15,23,197,2,2,43,249,22, 169,9,247,22,180,8,2,43,27,28,248,22,153,7,23,196,2,23,195,2,248, -22,165,8,248,22,178,15,23,197,2,28,249,22,170,16,2,79,23,195,2,28, -248,22,153,7,195,248,22,181,15,195,194,27,248,22,128,8,23,195,1,249,22, -182,15,248,22,168,8,250,22,178,16,2,80,28,249,22,170,16,2,81,23,201, -2,23,199,1,250,22,178,16,2,82,23,202,1,2,44,80,144,47,40,41,2, -43,28,248,22,153,7,194,248,22,181,15,194,193,0,28,35,114,120,34,94,92, +22,165,8,248,22,179,15,23,197,2,28,249,22,171,16,2,79,23,195,2,28, +248,22,153,7,195,248,22,182,15,195,194,27,248,22,128,8,23,195,1,249,22, +183,15,248,22,168,8,250,22,179,16,2,80,28,249,22,171,16,2,81,23,201, +2,23,199,1,250,22,179,16,2,82,23,202,1,2,44,80,144,47,40,41,2, +43,28,248,22,153,7,194,248,22,182,15,194,193,0,28,35,114,120,34,94,92, 92,92,92,92,92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92, -34,86,95,28,28,28,248,22,173,15,23,195,2,10,28,248,22,153,7,23,195, -2,28,248,22,132,16,23,195,2,10,248,22,133,16,23,195,2,11,10,248,22, -174,15,23,195,2,12,252,22,180,11,2,6,2,45,39,23,199,2,23,200,2, -28,28,28,248,22,173,15,23,196,2,10,28,248,22,153,7,23,196,2,28,248, -22,132,16,23,196,2,10,248,22,133,16,23,196,2,11,10,248,22,174,15,23, -196,2,12,252,22,180,11,2,6,2,45,40,23,199,2,23,200,2,27,28,248, -22,174,15,23,196,2,248,22,175,15,23,196,2,247,22,176,15,86,95,28,28, -248,22,134,16,23,196,2,10,249,22,169,9,247,22,176,15,23,195,2,12,253, -22,182,11,2,6,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99, +34,86,95,28,28,28,248,22,174,15,23,195,2,10,28,248,22,153,7,23,195, +2,28,248,22,133,16,23,195,2,10,248,22,134,16,23,195,2,11,10,248,22, +175,15,23,195,2,12,252,22,181,11,2,6,2,45,39,23,199,2,23,200,2, +28,28,28,248,22,174,15,23,196,2,10,28,248,22,153,7,23,196,2,28,248, +22,133,16,23,196,2,10,248,22,134,16,23,196,2,11,10,248,22,175,15,23, +196,2,12,252,22,181,11,2,6,2,45,40,23,199,2,23,200,2,27,28,248, +22,175,15,23,196,2,248,22,176,15,23,196,2,247,22,177,15,86,95,28,28, +248,22,135,16,23,196,2,10,249,22,169,9,247,22,177,15,23,195,2,12,253, +22,183,11,2,6,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99, 111,109,112,108,101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112, 108,97,116,102,111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2, 46,23,201,2,6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101, -110,116,105,111,110,32,116,121,112,101,247,22,176,15,28,249,22,169,9,28,248, -22,174,15,23,199,2,248,22,175,15,23,199,2,247,22,176,15,23,195,2,12, -253,22,182,11,2,6,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32, +110,116,105,111,110,32,116,121,112,101,247,22,177,15,28,249,22,169,9,28,248, +22,175,15,23,199,2,248,22,176,15,23,199,2,247,22,177,15,23,195,2,12, +253,22,183,11,2,6,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32, 117,115,101,32,100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116, 105,111,110,115,2,46,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104, -23,202,2,27,27,248,22,138,16,28,248,22,134,16,23,199,2,23,198,1,248, -22,135,16,23,199,1,86,94,28,28,248,22,174,15,23,194,2,10,28,248,22, -173,15,23,194,2,10,28,248,22,153,7,23,194,2,28,248,22,132,16,23,194, -2,10,248,22,133,16,23,194,2,11,12,250,22,180,11,2,41,2,42,23,196, -2,28,28,248,22,174,15,23,194,2,249,22,169,9,248,22,175,15,23,196,2, +23,202,2,27,27,248,22,139,16,28,248,22,135,16,23,199,2,23,198,1,248, +22,136,16,23,199,1,86,94,28,28,248,22,175,15,23,194,2,10,28,248,22, +174,15,23,194,2,10,28,248,22,153,7,23,194,2,28,248,22,133,16,23,194, +2,10,248,22,134,16,23,194,2,11,12,250,22,181,11,2,41,2,42,23,196, +2,28,28,248,22,175,15,23,194,2,249,22,169,9,248,22,176,15,23,196,2, 2,43,249,22,169,9,247,22,180,8,2,43,27,28,248,22,153,7,23,195,2, -23,194,2,248,22,165,8,248,22,178,15,23,196,2,28,249,22,170,16,2,79, -23,195,2,28,248,22,153,7,194,248,22,181,15,194,193,27,248,22,128,8,23, -195,1,249,22,182,15,248,22,168,8,250,22,178,16,2,80,28,249,22,170,16, -2,81,23,201,2,23,199,1,250,22,178,16,2,82,23,202,1,2,44,80,144, -50,40,41,2,43,28,248,22,153,7,193,248,22,181,15,193,192,27,248,22,178, +23,194,2,248,22,165,8,248,22,179,15,23,196,2,28,249,22,171,16,2,79, +23,195,2,28,248,22,153,7,194,248,22,182,15,194,193,27,248,22,128,8,23, +195,1,249,22,183,15,248,22,168,8,250,22,179,16,2,80,28,249,22,171,16, +2,81,23,201,2,23,199,1,250,22,179,16,2,82,23,202,1,2,44,80,144, +50,40,41,2,43,28,248,22,153,7,193,248,22,182,15,193,192,27,248,22,179, 15,23,195,2,28,249,22,169,9,23,197,2,66,117,110,105,120,28,249,22,150, -8,194,5,1,47,28,248,22,174,15,198,197,248,22,181,15,198,249,22,191,15, -199,249,22,182,15,249,22,153,8,248,22,178,15,200,40,198,28,249,22,169,9, -23,197,2,2,43,249,22,191,15,23,200,1,249,22,182,15,28,249,22,170,16, +8,194,5,1,47,28,248,22,175,15,198,197,248,22,182,15,198,249,22,128,16, +199,249,22,183,15,249,22,153,8,248,22,179,15,200,40,198,28,249,22,169,9, +23,197,2,2,43,249,22,128,16,23,200,1,249,22,183,15,28,249,22,171,16, 0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92,92, 92,91,97,45,122,93,58,34,23,199,2,251,22,154,8,2,47,250,22,153,8, -203,43,44,5,1,92,249,22,153,8,202,45,28,249,22,170,16,2,84,23,199, -2,249,22,154,8,2,47,249,22,153,8,200,43,28,249,22,170,16,2,84,23, -199,2,249,22,154,8,2,47,249,22,153,8,200,43,28,249,22,170,16,0,14, +203,43,44,5,1,92,249,22,153,8,202,45,28,249,22,171,16,2,84,23,199, +2,249,22,154,8,2,47,249,22,153,8,200,43,28,249,22,171,16,2,84,23, +199,2,249,22,154,8,2,47,249,22,153,8,200,43,28,249,22,171,16,0,14, 35,114,120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,154,8, -5,4,85,78,67,92,249,22,153,8,200,41,28,249,22,170,16,0,12,35,114, +5,4,85,78,67,92,249,22,153,8,200,41,28,249,22,171,16,0,12,35,114, 120,34,94,91,97,45,122,93,58,34,198,249,22,154,8,250,22,153,8,201,39, 40,249,22,153,8,200,41,12,198,12,32,86,88,148,8,36,42,56,11,72,102, 111,117,110,100,45,101,120,101,99,222,33,89,32,87,88,148,8,36,43,61,11, -66,110,101,120,116,222,33,88,27,248,22,136,16,23,196,2,28,249,22,171,9, -23,195,2,23,197,1,11,28,248,22,132,16,23,194,2,27,249,22,191,15,23, -197,1,23,196,1,28,23,197,2,90,144,42,11,89,146,42,39,11,248,22,130, -16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,136, -16,23,199,2,28,249,22,171,9,23,195,2,23,200,2,11,28,248,22,132,16, -23,194,2,250,2,86,23,205,2,23,206,2,249,22,191,15,23,200,2,23,198, +66,110,101,120,116,222,33,88,27,248,22,137,16,23,196,2,28,249,22,171,9, +23,195,2,23,197,1,11,28,248,22,133,16,23,194,2,27,249,22,128,16,23, +197,1,23,196,1,28,23,197,2,90,144,42,11,89,146,42,39,11,248,22,131, +16,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,137, +16,23,199,2,28,249,22,171,9,23,195,2,23,200,2,11,28,248,22,133,16, +23,194,2,250,2,86,23,205,2,23,206,2,249,22,128,16,23,200,2,23,198, 1,250,2,86,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94, -23,193,1,27,28,248,22,173,15,23,196,2,27,249,22,191,15,23,198,2,23, -205,2,28,28,248,22,186,15,193,10,248,22,185,15,193,192,11,11,28,23,193, -2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,136,16,23,200,2,28, -249,22,171,9,194,23,201,1,11,28,248,22,132,16,193,250,2,86,205,206,249, -22,191,15,200,197,250,2,86,205,206,195,192,86,94,23,194,1,28,23,196,2, -90,144,42,11,89,146,42,39,11,248,22,130,16,23,197,2,86,95,23,195,1, -23,194,1,27,28,23,201,2,27,248,22,136,16,23,199,2,28,249,22,171,9, -23,195,2,23,200,2,11,28,248,22,132,16,23,194,2,250,2,86,23,204,2, -23,205,2,249,22,191,15,23,200,2,23,198,1,250,2,86,23,204,2,23,205, -2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,173,15, -23,196,2,27,249,22,191,15,23,198,2,23,204,2,28,28,248,22,186,15,193, -10,248,22,185,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23, -202,2,11,27,248,22,136,16,23,200,2,28,249,22,171,9,194,23,201,1,11, -28,248,22,132,16,193,250,2,86,204,205,249,22,191,15,200,197,250,2,86,204, -205,195,192,28,23,193,2,90,144,42,11,89,146,42,39,11,248,22,130,16,23, +23,193,1,27,28,248,22,174,15,23,196,2,27,249,22,128,16,23,198,2,23, +205,2,28,28,248,22,187,15,193,10,248,22,186,15,193,192,11,11,28,23,193, +2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,137,16,23,200,2,28, +249,22,171,9,194,23,201,1,11,28,248,22,133,16,193,250,2,86,205,206,249, +22,128,16,200,197,250,2,86,205,206,195,192,86,94,23,194,1,28,23,196,2, +90,144,42,11,89,146,42,39,11,248,22,131,16,23,197,2,86,95,23,195,1, +23,194,1,27,28,23,201,2,27,248,22,137,16,23,199,2,28,249,22,171,9, +23,195,2,23,200,2,11,28,248,22,133,16,23,194,2,250,2,86,23,204,2, +23,205,2,249,22,128,16,23,200,2,23,198,1,250,2,86,23,204,2,23,205, +2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,174,15, +23,196,2,27,249,22,128,16,23,198,2,23,204,2,28,28,248,22,187,15,193, +10,248,22,186,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23, +202,2,11,27,248,22,137,16,23,200,2,28,249,22,171,9,194,23,201,1,11, +28,248,22,133,16,193,250,2,86,204,205,249,22,128,16,200,197,250,2,86,204, +205,195,192,28,23,193,2,90,144,42,11,89,146,42,39,11,248,22,131,16,23, 199,2,86,95,23,195,1,23,194,1,27,28,23,198,2,251,2,87,23,198,2, 23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27, -28,248,22,173,15,195,27,249,22,191,15,197,200,28,28,248,22,186,15,193,10, -248,22,185,15,193,192,11,11,28,192,192,28,198,11,251,2,87,198,203,201,202, +28,248,22,174,15,195,27,249,22,128,16,197,200,28,28,248,22,187,15,193,10, +248,22,186,15,193,192,11,11,28,192,192,28,198,11,251,2,87,198,203,201,202, 194,32,90,88,148,8,36,43,60,11,2,50,222,33,91,28,248,22,88,23,197, -2,11,27,249,22,191,15,248,22,135,16,248,22,81,23,201,2,23,196,2,28, -248,22,185,15,23,194,2,250,2,86,197,198,195,86,94,23,193,1,27,248,22, -162,20,23,199,1,28,248,22,88,23,194,2,11,27,249,22,191,15,248,22,135, -16,248,22,81,23,198,2,23,198,2,28,248,22,185,15,23,194,2,250,2,86, -199,200,195,86,94,23,193,1,27,248,22,162,20,23,196,1,28,248,22,88,23, -194,2,11,27,249,22,191,15,248,22,135,16,248,22,81,23,198,2,23,200,2, -28,248,22,185,15,23,194,2,250,2,86,201,202,195,86,94,23,193,1,27,248, -22,162,20,23,196,1,28,248,22,88,23,194,2,11,27,249,22,191,15,248,22, -135,16,248,22,81,197,201,28,248,22,185,15,193,250,2,86,203,204,195,251,2, -90,203,204,205,248,22,162,20,198,86,95,28,28,248,22,173,15,23,195,2,10, -28,248,22,153,7,23,195,2,28,248,22,132,16,23,195,2,10,248,22,133,16, -23,195,2,11,12,250,22,180,11,2,7,2,48,23,197,2,28,28,23,195,2, -28,28,248,22,173,15,23,196,2,10,28,248,22,153,7,23,196,2,28,248,22, -132,16,23,196,2,10,248,22,133,16,23,196,2,11,248,22,132,16,23,196,2, -11,10,12,250,22,180,11,2,7,6,45,45,40,111,114,47,99,32,35,102,32, +2,11,27,249,22,128,16,248,22,136,16,248,22,81,23,201,2,23,196,2,28, +248,22,186,15,23,194,2,250,2,86,197,198,195,86,94,23,193,1,27,248,22, +163,20,23,199,1,28,248,22,88,23,194,2,11,27,249,22,128,16,248,22,136, +16,248,22,81,23,198,2,23,198,2,28,248,22,186,15,23,194,2,250,2,86, +199,200,195,86,94,23,193,1,27,248,22,163,20,23,196,1,28,248,22,88,23, +194,2,11,27,249,22,128,16,248,22,136,16,248,22,81,23,198,2,23,200,2, +28,248,22,186,15,23,194,2,250,2,86,201,202,195,86,94,23,193,1,27,248, +22,163,20,23,196,1,28,248,22,88,23,194,2,11,27,249,22,128,16,248,22, +136,16,248,22,81,197,201,28,248,22,186,15,193,250,2,86,203,204,195,251,2, +90,203,204,205,248,22,163,20,198,86,95,28,28,248,22,174,15,23,195,2,10, +28,248,22,153,7,23,195,2,28,248,22,133,16,23,195,2,10,248,22,134,16, +23,195,2,11,12,250,22,181,11,2,7,2,48,23,197,2,28,28,23,195,2, +28,28,248,22,174,15,23,196,2,10,28,248,22,153,7,23,196,2,28,248,22, +133,16,23,196,2,10,248,22,134,16,23,196,2,11,248,22,133,16,23,196,2, +11,10,12,250,22,181,11,2,7,6,45,45,40,111,114,47,99,32,35,102,32, 40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105,110,103,63,32,114, 101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23,198,2,28,28,248, -22,132,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,130,16,23,198, +22,133,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,131,16,23,198, 2,249,22,169,9,194,2,49,11,27,249,22,175,8,247,22,174,8,5,4,80, 65,84,72,27,28,23,194,2,249,80,143,43,44,249,22,165,8,23,198,1,7, 63,9,86,94,23,194,1,9,27,28,249,22,169,9,247,22,180,8,2,43,249, -22,80,248,22,182,15,5,1,46,23,196,1,23,194,1,28,248,22,88,23,194, -2,11,27,249,22,191,15,248,22,135,16,248,22,81,23,198,2,23,200,2,28, -248,22,185,15,23,194,2,250,2,86,201,202,195,86,94,23,193,1,27,248,22, -162,20,23,196,1,28,248,22,88,23,194,2,11,27,249,22,191,15,248,22,135, -16,248,22,81,23,198,2,23,202,2,28,248,22,185,15,23,194,2,250,2,86, -203,204,195,86,94,23,193,1,27,248,22,162,20,23,196,1,28,248,22,88,23, -194,2,11,27,249,22,191,15,248,22,135,16,248,22,81,23,198,2,23,204,2, -28,248,22,185,15,23,194,2,250,2,86,205,206,195,86,94,23,193,1,27,248, -22,162,20,23,196,1,28,248,22,88,23,194,2,11,27,249,22,191,15,248,22, -135,16,248,22,81,197,205,28,248,22,185,15,193,250,2,86,23,15,23,16,195, -251,2,90,23,15,23,16,23,17,248,22,162,20,198,27,248,22,135,16,23,196, -1,28,248,22,185,15,193,250,2,86,198,199,195,11,250,80,144,42,43,42,196, +22,80,248,22,183,15,5,1,46,23,196,1,23,194,1,28,248,22,88,23,194, +2,11,27,249,22,128,16,248,22,136,16,248,22,81,23,198,2,23,200,2,28, +248,22,186,15,23,194,2,250,2,86,201,202,195,86,94,23,193,1,27,248,22, +163,20,23,196,1,28,248,22,88,23,194,2,11,27,249,22,128,16,248,22,136, +16,248,22,81,23,198,2,23,202,2,28,248,22,186,15,23,194,2,250,2,86, +203,204,195,86,94,23,193,1,27,248,22,163,20,23,196,1,28,248,22,88,23, +194,2,11,27,249,22,128,16,248,22,136,16,248,22,81,23,198,2,23,204,2, +28,248,22,186,15,23,194,2,250,2,86,205,206,195,86,94,23,193,1,27,248, +22,163,20,23,196,1,28,248,22,88,23,194,2,11,27,249,22,128,16,248,22, +136,16,248,22,81,197,205,28,248,22,186,15,193,250,2,86,23,15,23,16,195, +251,2,90,23,15,23,16,23,17,248,22,163,20,198,27,248,22,136,16,23,196, +1,28,248,22,186,15,193,250,2,86,198,199,195,11,250,80,144,42,43,42,196, 197,11,250,80,144,42,43,42,196,11,11,32,95,88,148,8,36,42,58,11,2, -50,222,33,97,0,8,35,114,120,35,34,92,34,34,27,249,22,166,16,23,197, +50,222,33,97,0,8,35,114,120,35,34,92,34,34,27,249,22,167,16,23,197, 2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,102,23,195,2,27, -27,248,22,111,23,197,1,27,249,22,166,16,23,201,2,23,196,2,28,23,193, +27,248,22,111,23,197,1,27,249,22,167,16,23,201,2,23,196,2,28,23,193, 2,86,94,23,194,1,27,248,22,102,23,195,2,27,250,2,95,202,23,204,1, -248,22,111,23,199,1,27,28,249,22,169,9,247,22,180,8,2,43,250,22,178, +248,22,111,23,199,1,27,28,249,22,169,9,247,22,180,8,2,43,250,22,179, 16,2,96,23,198,1,2,51,194,28,249,22,150,8,194,2,51,249,22,94,202, -195,249,22,80,248,22,182,15,195,195,86,95,23,199,1,23,193,1,27,28,249, -22,169,9,247,22,180,8,2,43,250,22,178,16,2,96,23,198,1,2,51,194, -28,249,22,150,8,194,2,51,249,22,94,200,9,249,22,80,248,22,182,15,195, -9,27,28,249,22,169,9,247,22,180,8,2,43,250,22,178,16,2,96,23,198, +195,249,22,80,248,22,183,15,195,195,86,95,23,199,1,23,193,1,27,28,249, +22,169,9,247,22,180,8,2,43,250,22,179,16,2,96,23,198,1,2,51,194, +28,249,22,150,8,194,2,51,249,22,94,200,9,249,22,80,248,22,183,15,195, +9,27,28,249,22,169,9,247,22,180,8,2,43,250,22,179,16,2,96,23,198, 1,2,51,194,28,249,22,150,8,194,2,51,249,22,94,198,195,249,22,80,248, -22,182,15,195,195,86,94,23,193,1,27,28,249,22,169,9,247,22,180,8,2, -43,250,22,178,16,2,96,23,200,1,2,51,196,28,249,22,150,8,194,2,51, -249,22,94,196,9,249,22,80,248,22,182,15,195,9,86,95,28,28,248,22,142, -8,194,10,248,22,153,7,194,12,250,22,180,11,2,8,6,21,21,40,111,114, +22,183,15,195,195,86,94,23,193,1,27,28,249,22,169,9,247,22,180,8,2, +43,250,22,179,16,2,96,23,200,1,2,51,196,28,249,22,150,8,194,2,51, +249,22,94,196,9,249,22,80,248,22,183,15,195,9,86,95,28,28,248,22,142, +8,194,10,248,22,153,7,194,12,250,22,181,11,2,8,6,21,21,40,111,114, 47,99,32,98,121,116,101,115,63,32,115,116,114,105,110,103,63,41,196,28,28, -248,22,89,195,249,22,4,22,173,15,196,11,12,250,22,180,11,2,8,6,14, +248,22,89,195,249,22,4,22,174,15,196,11,12,250,22,181,11,2,8,6,14, 14,40,108,105,115,116,111,102,32,112,97,116,104,63,41,197,250,2,95,197,195, 28,248,22,153,7,197,248,22,167,8,197,196,28,28,248,22,0,23,195,2,249, 22,48,23,196,2,39,11,20,13,144,80,144,39,46,40,26,29,80,144,8,29, -47,40,249,22,31,11,80,144,8,31,46,40,22,143,15,10,22,144,15,10,22, -145,15,10,22,148,15,10,22,147,15,11,22,149,15,10,22,146,15,10,22,150, -15,10,22,151,15,10,22,152,15,10,22,153,15,10,22,154,15,11,22,155,15, -10,22,141,15,11,247,23,194,1,250,22,180,11,2,9,2,52,23,197,1,86, -94,28,28,248,22,173,15,23,195,2,10,28,248,22,153,7,23,195,2,28,248, -22,132,16,23,195,2,10,248,22,133,16,23,195,2,11,12,250,22,180,11,23, -196,2,2,48,23,197,2,28,248,22,132,16,23,195,2,12,251,22,182,11,23, -197,1,2,53,2,46,23,198,1,86,94,28,28,248,22,173,15,23,195,2,10, -28,248,22,153,7,23,195,2,28,248,22,132,16,23,195,2,10,248,22,133,16, -23,195,2,11,12,250,22,180,11,23,196,2,2,48,23,197,2,28,248,22,132, -16,23,195,2,12,251,22,182,11,23,197,1,2,53,2,46,23,198,1,86,94, -86,94,28,28,248,22,173,15,23,195,2,10,28,248,22,153,7,23,195,2,28, -248,22,132,16,23,195,2,10,248,22,133,16,23,195,2,11,12,250,22,180,11, -23,196,2,2,48,23,197,2,28,248,22,132,16,23,195,2,86,94,23,194,1, -12,251,22,182,11,23,197,2,2,53,2,46,23,198,1,249,22,3,20,20,94, +47,40,249,22,31,11,80,144,8,31,46,40,22,144,15,10,22,145,15,10,22, +146,15,10,22,149,15,10,22,148,15,11,22,150,15,10,22,147,15,10,22,151, +15,10,22,152,15,10,22,153,15,10,22,154,15,10,22,155,15,11,22,156,15, +10,22,142,15,11,247,23,194,1,250,22,181,11,2,9,2,52,23,197,1,86, +94,28,28,248,22,174,15,23,195,2,10,28,248,22,153,7,23,195,2,28,248, +22,133,16,23,195,2,10,248,22,134,16,23,195,2,11,12,250,22,181,11,23, +196,2,2,48,23,197,2,28,248,22,133,16,23,195,2,12,251,22,183,11,23, +197,1,2,53,2,46,23,198,1,86,94,28,28,248,22,174,15,23,195,2,10, +28,248,22,153,7,23,195,2,28,248,22,133,16,23,195,2,10,248,22,134,16, +23,195,2,11,12,250,22,181,11,23,196,2,2,48,23,197,2,28,248,22,133, +16,23,195,2,12,251,22,183,11,23,197,1,2,53,2,46,23,198,1,86,94, +86,94,28,28,248,22,174,15,23,195,2,10,28,248,22,153,7,23,195,2,28, +248,22,133,16,23,195,2,10,248,22,134,16,23,195,2,11,12,250,22,181,11, +23,196,2,2,48,23,197,2,28,248,22,133,16,23,195,2,86,94,23,194,1, +12,251,22,183,11,23,197,2,2,53,2,46,23,198,1,249,22,3,20,20,94, 88,148,8,36,40,50,11,9,223,2,33,101,23,195,1,23,197,1,28,28,248, -22,0,23,195,2,249,22,48,23,196,2,40,11,12,250,22,180,11,23,196,1, -2,54,23,197,1,86,94,28,28,248,22,173,15,23,194,2,10,28,248,22,153, -7,23,194,2,28,248,22,132,16,23,194,2,10,248,22,133,16,23,194,2,11, -12,250,22,180,11,2,15,2,48,23,196,2,28,248,22,132,16,23,194,2,12, -251,22,182,11,2,15,2,53,2,46,23,197,1,86,95,86,94,86,94,28,28, -248,22,173,15,23,196,2,10,28,248,22,153,7,23,196,2,28,248,22,132,16, -23,196,2,10,248,22,133,16,23,196,2,11,12,250,22,180,11,2,15,2,48, -23,198,2,28,248,22,132,16,23,196,2,12,251,22,182,11,2,15,2,53,2, +22,0,23,195,2,249,22,48,23,196,2,40,11,12,250,22,181,11,23,196,1, +2,54,23,197,1,86,94,28,28,248,22,174,15,23,194,2,10,28,248,22,153, +7,23,194,2,28,248,22,133,16,23,194,2,10,248,22,134,16,23,194,2,11, +12,250,22,181,11,2,15,2,48,23,196,2,28,248,22,133,16,23,194,2,12, +251,22,183,11,2,15,2,53,2,46,23,197,1,86,95,86,94,86,94,28,28, +248,22,174,15,23,196,2,10,28,248,22,153,7,23,196,2,28,248,22,133,16, +23,196,2,10,248,22,134,16,23,196,2,11,12,250,22,181,11,2,15,2,48, +23,198,2,28,248,22,133,16,23,196,2,12,251,22,183,11,2,15,2,53,2, 46,23,199,2,249,22,3,32,0,88,148,8,36,40,49,11,9,222,33,104,23, 198,2,28,28,248,22,0,23,195,2,249,22,48,23,196,2,40,11,12,250,22, -180,11,2,15,2,54,23,197,2,252,80,143,44,52,23,199,1,23,200,1,23, -201,1,11,11,86,94,28,28,248,22,173,15,23,194,2,10,28,248,22,153,7, -23,194,2,28,248,22,132,16,23,194,2,10,248,22,133,16,23,194,2,11,12, -250,22,180,11,2,17,2,48,23,196,2,28,248,22,132,16,23,194,2,12,251, -22,182,11,2,17,2,53,2,46,23,197,1,86,96,86,94,28,28,248,22,173, -15,23,197,2,10,28,248,22,153,7,23,197,2,28,248,22,132,16,23,197,2, -10,248,22,133,16,23,197,2,11,12,250,22,180,11,2,17,2,48,23,199,2, -28,248,22,132,16,23,197,2,12,251,22,182,11,2,17,2,53,2,46,23,200, -2,86,94,86,94,28,28,248,22,173,15,23,198,2,10,28,248,22,153,7,23, -198,2,28,248,22,132,16,23,198,2,10,248,22,133,16,23,198,2,11,12,250, -22,180,11,2,17,2,48,23,200,2,28,248,22,132,16,23,198,2,12,251,22, -182,11,2,17,2,53,2,46,23,201,2,249,22,3,32,0,88,148,8,36,40, +181,11,2,15,2,54,23,197,2,252,80,143,44,52,23,199,1,23,200,1,23, +201,1,11,11,86,94,28,28,248,22,174,15,23,194,2,10,28,248,22,153,7, +23,194,2,28,248,22,133,16,23,194,2,10,248,22,134,16,23,194,2,11,12, +250,22,181,11,2,17,2,48,23,196,2,28,248,22,133,16,23,194,2,12,251, +22,183,11,2,17,2,53,2,46,23,197,1,86,96,86,94,28,28,248,22,174, +15,23,197,2,10,28,248,22,153,7,23,197,2,28,248,22,133,16,23,197,2, +10,248,22,134,16,23,197,2,11,12,250,22,181,11,2,17,2,48,23,199,2, +28,248,22,133,16,23,197,2,12,251,22,183,11,2,17,2,53,2,46,23,200, +2,86,94,86,94,28,28,248,22,174,15,23,198,2,10,28,248,22,153,7,23, +198,2,28,248,22,133,16,23,198,2,10,248,22,134,16,23,198,2,11,12,250, +22,181,11,2,17,2,48,23,200,2,28,248,22,133,16,23,198,2,12,251,22, +183,11,2,17,2,53,2,46,23,201,2,249,22,3,32,0,88,148,8,36,40, 49,11,9,222,33,106,23,200,2,28,28,248,22,0,23,195,2,249,22,48,23, -196,2,40,11,12,250,22,180,11,2,17,2,54,23,197,2,252,80,143,44,52, -23,199,1,23,202,1,23,203,1,23,201,1,23,200,1,27,248,22,150,16,2, -55,28,248,22,134,16,23,194,2,248,22,137,16,23,194,1,28,248,22,133,16, -23,194,2,90,144,42,11,89,146,42,39,11,248,22,130,16,249,22,135,16,250, -80,144,49,43,42,248,22,150,16,2,56,11,11,248,22,150,16,2,57,86,95, -23,195,1,23,194,1,248,22,137,16,249,22,135,16,23,199,1,23,196,1,27, -250,80,144,44,43,42,248,22,150,16,2,56,23,197,1,10,28,23,193,2,248, -22,137,16,23,194,1,11,249,80,144,41,55,40,39,80,144,41,8,40,42,27, -248,22,150,16,2,58,28,248,22,134,16,23,194,2,248,22,137,16,23,194,1, -28,248,22,133,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,130,16, -249,22,135,16,250,80,144,49,43,42,248,22,150,16,2,56,11,11,248,22,150, -16,2,57,86,95,23,195,1,23,194,1,248,22,137,16,249,22,135,16,23,199, -1,23,196,1,27,250,80,144,44,43,42,248,22,150,16,2,56,23,197,1,10, -28,23,193,2,248,22,137,16,23,194,1,11,249,80,144,41,55,40,40,80,144, +196,2,40,11,12,250,22,181,11,2,17,2,54,23,197,2,252,80,143,44,52, +23,199,1,23,202,1,23,203,1,23,201,1,23,200,1,27,248,22,151,16,2, +55,28,248,22,135,16,23,194,2,248,22,138,16,23,194,1,28,248,22,134,16, +23,194,2,90,144,42,11,89,146,42,39,11,248,22,131,16,249,22,136,16,250, +80,144,49,43,42,248,22,151,16,2,56,11,11,248,22,151,16,2,57,86,95, +23,195,1,23,194,1,248,22,138,16,249,22,136,16,23,199,1,23,196,1,27, +250,80,144,44,43,42,248,22,151,16,2,56,23,197,1,10,28,23,193,2,248, +22,138,16,23,194,1,11,249,80,144,41,55,40,39,80,144,41,8,40,42,27, +248,22,151,16,2,58,28,248,22,135,16,23,194,2,248,22,138,16,23,194,1, +28,248,22,134,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,131,16, +249,22,136,16,250,80,144,49,43,42,248,22,151,16,2,56,11,11,248,22,151, +16,2,57,86,95,23,195,1,23,194,1,248,22,138,16,249,22,136,16,23,199, +1,23,196,1,27,250,80,144,44,43,42,248,22,151,16,2,56,23,197,1,10, +28,23,193,2,248,22,138,16,23,194,1,11,249,80,144,41,55,40,40,80,144, 41,8,41,42,27,20,13,144,80,144,40,46,40,26,29,80,144,8,30,47,40, -249,22,31,11,80,144,8,32,46,40,22,143,15,10,22,144,15,10,22,145,15, -10,22,148,15,10,22,147,15,11,22,149,15,10,22,146,15,10,22,150,15,10, -22,151,15,10,22,152,15,10,22,153,15,10,22,154,15,11,22,155,15,10,22, -141,15,11,247,22,148,6,28,248,22,149,2,193,192,11,27,28,23,195,2,249, -22,191,15,23,197,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100,86, -94,23,195,1,11,27,28,23,194,2,28,248,22,185,15,23,195,2,249,22,140, +249,22,31,11,80,144,8,32,46,40,22,144,15,10,22,145,15,10,22,146,15, +10,22,149,15,10,22,148,15,11,22,150,15,10,22,147,15,10,22,151,15,10, +22,152,15,10,22,153,15,10,22,154,15,10,22,155,15,11,22,156,15,10,22, +142,15,11,247,22,148,6,28,248,22,149,2,193,192,11,27,28,23,195,2,249, +22,128,16,23,197,1,6,11,11,99,111,110,102,105,103,46,114,107,116,100,86, +94,23,195,1,11,27,28,23,194,2,28,248,22,186,15,23,195,2,249,22,140, 6,23,196,1,80,144,43,8,42,42,11,11,28,192,192,21,17,1,0,250,22, 158,2,23,196,1,2,59,247,22,171,8,250,22,158,2,195,2,59,247,22,171, -8,28,248,22,153,7,23,195,2,27,248,22,181,15,23,196,1,28,248,22,134, -16,23,194,2,192,249,22,135,16,23,195,1,27,247,80,144,43,54,42,28,23, -193,2,192,86,94,23,193,1,247,22,151,16,28,248,22,142,8,23,195,2,27, -248,22,182,15,23,196,1,28,248,22,134,16,23,194,2,192,249,22,135,16,23, +8,28,248,22,153,7,23,195,2,27,248,22,182,15,23,196,1,28,248,22,135, +16,23,194,2,192,249,22,136,16,23,195,1,27,247,80,144,43,54,42,28,23, +193,2,192,86,94,23,193,1,247,22,152,16,28,248,22,142,8,23,195,2,27, +248,22,183,15,23,196,1,28,248,22,135,16,23,194,2,192,249,22,136,16,23, 195,1,27,247,80,144,43,54,42,28,23,193,2,192,86,94,23,193,1,247,22, -151,16,28,248,22,173,15,23,195,2,28,248,22,134,16,23,195,2,193,249,22, -135,16,23,196,1,27,247,80,144,42,54,42,28,23,193,2,192,86,94,23,193, -1,247,22,151,16,193,27,248,22,150,16,2,55,28,248,22,134,16,23,194,2, -248,22,137,16,23,194,1,28,248,22,133,16,23,194,2,90,144,42,11,89,146, -42,39,11,248,22,130,16,249,22,135,16,250,80,144,49,43,42,248,22,150,16, -2,56,11,11,248,22,150,16,2,57,86,95,23,195,1,23,194,1,248,22,137, -16,249,22,135,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,150, -16,2,56,23,197,1,10,28,23,193,2,248,22,137,16,23,194,1,11,28,248, -22,134,16,23,195,2,193,249,22,135,16,23,196,1,27,249,80,144,44,55,40, -39,80,144,44,8,43,42,28,23,193,2,192,86,94,23,193,1,247,22,151,16, -28,248,22,134,16,23,195,2,248,22,137,16,23,195,1,28,248,22,133,16,23, -195,2,90,144,42,11,89,146,42,39,11,248,22,130,16,249,22,135,16,250,80, -144,48,43,42,248,22,150,16,2,56,11,11,248,22,150,16,2,57,86,95,23, -195,1,23,194,1,248,22,137,16,249,22,135,16,23,200,1,23,196,1,27,250, -80,144,43,43,42,248,22,150,16,2,56,23,198,1,10,28,23,193,2,248,22, -137,16,23,194,1,11,28,248,22,88,23,196,2,9,28,248,22,81,23,196,2, -249,22,80,27,248,22,161,20,23,199,2,28,248,22,153,7,23,194,2,27,248, -22,181,15,23,195,1,28,248,22,134,16,23,194,2,192,249,22,135,16,23,195, -1,27,247,80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22,151, -16,28,248,22,142,8,23,194,2,27,248,22,182,15,23,195,1,28,248,22,134, -16,23,194,2,192,249,22,135,16,23,195,1,27,247,80,144,46,54,42,28,23, -193,2,192,86,94,23,193,1,247,22,151,16,28,248,22,173,15,23,194,2,28, -248,22,134,16,23,194,2,192,249,22,135,16,23,195,1,27,247,80,144,45,54, -42,28,23,193,2,192,86,94,23,193,1,247,22,151,16,192,27,248,22,162,20, +152,16,28,248,22,174,15,23,195,2,28,248,22,135,16,23,195,2,193,249,22, +136,16,23,196,1,27,247,80,144,42,54,42,28,23,193,2,192,86,94,23,193, +1,247,22,152,16,193,27,248,22,151,16,2,55,28,248,22,135,16,23,194,2, +248,22,138,16,23,194,1,28,248,22,134,16,23,194,2,90,144,42,11,89,146, +42,39,11,248,22,131,16,249,22,136,16,250,80,144,49,43,42,248,22,151,16, +2,56,11,11,248,22,151,16,2,57,86,95,23,195,1,23,194,1,248,22,138, +16,249,22,136,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,151, +16,2,56,23,197,1,10,28,23,193,2,248,22,138,16,23,194,1,11,28,248, +22,135,16,23,195,2,193,249,22,136,16,23,196,1,27,249,80,144,44,55,40, +39,80,144,44,8,43,42,28,23,193,2,192,86,94,23,193,1,247,22,152,16, +28,248,22,135,16,23,195,2,248,22,138,16,23,195,1,28,248,22,134,16,23, +195,2,90,144,42,11,89,146,42,39,11,248,22,131,16,249,22,136,16,250,80, +144,48,43,42,248,22,151,16,2,56,11,11,248,22,151,16,2,57,86,95,23, +195,1,23,194,1,248,22,138,16,249,22,136,16,23,200,1,23,196,1,27,250, +80,144,43,43,42,248,22,151,16,2,56,23,198,1,10,28,23,193,2,248,22, +138,16,23,194,1,11,28,248,22,88,23,196,2,9,28,248,22,81,23,196,2, +249,22,80,27,248,22,162,20,23,199,2,28,248,22,153,7,23,194,2,27,248, +22,182,15,23,195,1,28,248,22,135,16,23,194,2,192,249,22,136,16,23,195, +1,27,247,80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22,152, +16,28,248,22,142,8,23,194,2,27,248,22,183,15,23,195,1,28,248,22,135, +16,23,194,2,192,249,22,136,16,23,195,1,27,247,80,144,46,54,42,28,23, +193,2,192,86,94,23,193,1,247,22,152,16,28,248,22,174,15,23,194,2,28, +248,22,135,16,23,194,2,192,249,22,136,16,23,195,1,27,247,80,144,45,54, +42,28,23,193,2,192,86,94,23,193,1,247,22,152,16,192,27,248,22,163,20, 23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80, -248,80,144,45,60,42,248,22,161,20,23,197,2,27,248,22,162,20,23,197,1, +248,80,144,45,60,42,248,22,162,20,23,197,2,27,248,22,163,20,23,197,1, 28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144, -48,60,42,248,22,161,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248, -22,162,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23,204, -1,248,22,162,20,23,198,1,249,22,94,23,199,2,27,248,22,162,20,23,197, +48,60,42,248,22,162,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248, +22,163,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23,204, +1,248,22,163,20,23,198,1,249,22,94,23,199,2,27,248,22,163,20,23,197, 1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80, -144,48,60,42,248,22,161,20,23,197,2,249,80,144,49,8,44,42,23,204,1, -248,22,162,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23, -204,1,248,22,162,20,23,198,1,249,22,94,23,196,2,27,248,22,162,20,23, +144,48,60,42,248,22,162,20,23,197,2,249,80,144,49,8,44,42,23,204,1, +248,22,163,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23, +204,1,248,22,163,20,23,198,1,249,22,94,23,196,2,27,248,22,163,20,23, 199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248, -80,144,45,60,42,248,22,161,20,23,197,2,27,248,22,162,20,23,197,1,28, +80,144,45,60,42,248,22,162,20,23,197,2,27,248,22,163,20,23,197,1,28, 248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,48, -60,42,248,22,161,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22, -162,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23,204,1, -248,22,162,20,23,198,1,249,22,94,23,199,2,27,248,22,162,20,23,197,1, +60,42,248,22,162,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22, +163,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23,204,1, +248,22,163,20,23,198,1,249,22,94,23,199,2,27,248,22,163,20,23,197,1, 28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144, -48,60,42,248,22,161,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248, -22,162,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23,204, -1,248,22,162,20,23,198,1,27,250,22,158,2,23,198,1,23,199,1,11,28, -192,249,80,144,42,8,44,42,198,194,196,27,248,22,150,16,2,58,28,248,22, -134,16,23,194,2,248,22,137,16,23,194,1,28,248,22,133,16,23,194,2,90, -144,42,11,89,146,42,39,11,248,22,130,16,249,22,135,16,250,80,144,49,43, -42,248,22,150,16,2,56,11,11,248,22,150,16,2,57,86,95,23,195,1,23, -194,1,248,22,137,16,249,22,135,16,23,199,1,23,196,1,27,250,80,144,44, -43,42,248,22,150,16,2,56,23,197,1,10,28,23,193,2,248,22,137,16,23, +48,60,42,248,22,162,20,23,197,2,249,80,144,49,8,44,42,23,204,1,248, +22,163,20,23,198,1,249,22,94,23,202,2,249,80,144,49,8,44,42,23,204, +1,248,22,163,20,23,198,1,27,250,22,158,2,23,198,1,23,199,1,11,28, +192,249,80,144,42,8,44,42,198,194,196,27,248,22,151,16,2,58,28,248,22, +135,16,23,194,2,248,22,138,16,23,194,1,28,248,22,134,16,23,194,2,90, +144,42,11,89,146,42,39,11,248,22,131,16,249,22,136,16,250,80,144,49,43, +42,248,22,151,16,2,56,11,11,248,22,151,16,2,57,86,95,23,195,1,23, +194,1,248,22,138,16,249,22,136,16,23,199,1,23,196,1,27,250,80,144,44, +43,42,248,22,151,16,2,56,23,197,1,10,28,23,193,2,248,22,138,16,23, 194,1,11,27,248,80,144,41,58,42,249,80,144,43,55,40,40,80,144,43,8, 45,42,27,27,250,22,158,2,23,198,2,72,108,105,110,107,115,45,102,105,108, -101,11,27,28,23,194,2,23,194,1,86,94,23,194,1,249,22,191,15,27,250, +101,11,27,28,23,194,2,23,194,1,86,94,23,194,1,249,22,128,16,27,250, 22,158,2,23,202,2,71,115,104,97,114,101,45,100,105,114,11,28,192,192,249, -22,191,15,64,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,153,7, -23,194,2,27,248,22,181,15,23,195,1,28,248,22,134,16,23,194,2,192,249, -22,135,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,86,94,23, -193,1,247,22,151,16,28,248,22,142,8,23,194,2,27,248,22,182,15,23,195, -1,28,248,22,134,16,23,194,2,192,249,22,135,16,23,195,1,27,247,80,144, -47,54,42,28,23,193,2,192,86,94,23,193,1,247,22,151,16,28,248,22,173, -15,23,194,2,28,248,22,134,16,23,194,2,192,249,22,135,16,23,195,1,27, -247,80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22,151,16,192, -250,22,94,248,22,90,11,28,247,22,158,16,28,247,22,159,16,248,22,90,250, -22,191,15,248,22,150,16,2,61,250,22,158,2,23,204,2,2,59,247,22,171, -8,2,60,9,9,28,247,22,159,16,250,80,144,47,8,23,42,23,200,1,1, +22,128,16,64,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,153,7, +23,194,2,27,248,22,182,15,23,195,1,28,248,22,135,16,23,194,2,192,249, +22,136,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,86,94,23, +193,1,247,22,152,16,28,248,22,142,8,23,194,2,27,248,22,183,15,23,195, +1,28,248,22,135,16,23,194,2,192,249,22,136,16,23,195,1,27,247,80,144, +47,54,42,28,23,193,2,192,86,94,23,193,1,247,22,152,16,28,248,22,174, +15,23,194,2,28,248,22,135,16,23,194,2,192,249,22,136,16,23,195,1,27, +247,80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22,152,16,192, +250,22,94,248,22,90,11,28,247,22,159,16,28,247,22,160,16,248,22,90,250, +22,128,16,248,22,151,16,2,61,250,22,158,2,23,204,2,2,59,247,22,171, +8,2,60,9,9,28,247,22,160,16,250,80,144,47,8,23,42,23,200,1,1, 18,108,105,110,107,115,45,115,101,97,114,99,104,45,102,105,108,101,115,248,22, -90,23,200,1,9,248,22,172,13,23,194,1,249,22,14,80,144,41,8,26,41, -28,248,22,128,13,23,197,2,86,94,23,196,1,32,0,88,148,8,36,39,44, +90,23,200,1,9,248,22,173,13,23,194,1,249,22,14,80,144,41,8,26,41, +28,248,22,129,13,23,197,2,86,94,23,196,1,32,0,88,148,8,36,39,44, 11,9,222,11,20,20,94,88,148,8,36,39,46,11,9,223,3,33,124,23,196, 1,32,126,88,148,39,40,59,11,2,50,222,33,127,90,144,42,11,89,146,42, -39,11,248,22,130,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,173, -15,23,194,2,28,248,22,186,15,23,194,2,249,22,145,6,23,195,1,32,0, +39,11,248,22,131,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,174, +15,23,194,2,28,248,22,187,15,23,194,2,249,22,145,6,23,195,1,32,0, 88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22, -130,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,173,15,23,194,2, -28,248,22,186,15,23,194,2,249,22,145,6,23,195,1,32,0,88,148,8,36, -39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,130,16,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,173,15,23,194,2,28,248,22,186, +131,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,174,15,23,194,2, +28,248,22,187,15,23,194,2,249,22,145,6,23,195,1,32,0,88,148,8,36, +39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,131,16,23,197, +1,86,95,23,195,1,23,194,1,28,248,22,174,15,23,194,2,28,248,22,187, 15,23,194,2,249,22,145,6,23,195,1,32,0,88,148,8,36,39,44,11,9, -222,11,90,144,42,11,89,146,42,39,11,248,22,130,16,23,197,1,86,95,23, -195,1,23,194,1,28,248,22,173,15,23,194,2,28,248,22,186,15,23,194,2, +222,11,90,144,42,11,89,146,42,39,11,248,22,131,16,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,174,15,23,194,2,28,248,22,187,15,23,194,2, 249,22,145,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2, 126,23,194,1,11,11,11,11,32,128,2,88,148,8,36,40,58,11,2,50,222, 33,129,2,27,249,22,163,6,8,128,128,23,196,2,28,248,22,148,7,23,194, @@ -488,150 +488,150 @@ 148,7,23,194,2,9,249,22,80,23,195,1,248,2,128,2,23,211,1,192,192, 248,22,133,6,23,194,1,20,13,144,80,144,40,8,28,40,80,144,40,8,46, 42,27,28,249,22,189,8,248,22,180,8,2,62,41,90,144,42,11,89,146,42, -39,11,248,22,130,16,23,198,2,86,95,23,195,1,23,194,1,28,248,22,173, -15,23,194,2,28,248,22,186,15,23,194,2,249,22,145,6,23,195,1,32,0, +39,11,248,22,131,16,23,198,2,86,95,23,195,1,23,194,1,28,248,22,174, +15,23,194,2,28,248,22,187,15,23,194,2,249,22,145,6,23,195,1,32,0, 88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22, -130,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,173,15,23,194,2, -28,248,22,186,15,23,194,2,249,22,145,6,23,195,1,32,0,88,148,8,36, -39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,130,16,23,197, -1,86,95,23,195,1,23,194,1,28,248,22,173,15,23,194,2,28,248,22,186, +131,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,174,15,23,194,2, +28,248,22,187,15,23,194,2,249,22,145,6,23,195,1,32,0,88,148,8,36, +39,44,11,9,222,11,90,144,42,11,89,146,42,39,11,248,22,131,16,23,197, +1,86,95,23,195,1,23,194,1,28,248,22,174,15,23,194,2,28,248,22,187, 15,23,194,2,249,22,145,6,23,195,1,32,0,88,148,8,36,39,44,11,9, -222,11,90,144,42,11,89,146,42,39,11,248,22,130,16,23,197,1,86,95,23, -195,1,23,194,1,28,248,22,173,15,23,194,2,28,248,22,186,15,23,194,2, +222,11,90,144,42,11,89,146,42,39,11,248,22,131,16,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,174,15,23,194,2,28,248,22,187,15,23,194,2, 249,22,145,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,248,2, -126,23,194,1,11,11,11,11,11,28,248,22,185,15,23,195,2,27,28,249,22, +126,23,194,1,11,11,11,11,11,28,248,22,186,15,23,195,2,27,28,249,22, 189,8,248,22,180,8,2,62,41,249,22,145,6,23,197,2,32,0,88,148,8, 36,39,44,11,9,222,11,11,86,94,28,23,194,2,248,22,147,6,23,195,1, 86,94,23,194,1,12,249,22,80,27,248,22,188,5,23,199,1,250,22,44,22, 35,88,148,39,39,8,24,11,9,223,3,33,130,2,20,20,94,88,148,8,36, 39,46,11,9,223,3,33,131,2,23,196,1,194,249,22,80,11,194,28,28,23, -195,2,28,248,22,82,23,196,2,248,22,167,9,249,22,174,14,39,248,22,162, +195,2,28,248,22,82,23,196,2,248,22,167,9,249,22,175,14,39,248,22,163, 20,23,199,2,11,11,194,86,94,23,195,1,249,22,12,20,20,94,88,148,8, 32,39,61,16,4,39,8,128,80,8,240,0,64,0,0,39,9,224,2,3,33, 132,2,23,196,1,80,144,41,8,26,41,27,248,22,167,9,194,28,192,192,248, -22,167,9,248,22,81,195,86,95,28,248,22,149,12,23,198,2,27,247,22,141, -12,28,249,22,131,12,23,195,2,2,63,251,22,137,12,23,197,1,2,63,250, +22,167,9,248,22,81,195,86,95,28,248,22,150,12,23,198,2,27,247,22,142, +12,28,249,22,132,12,23,195,2,2,63,251,22,138,12,23,197,1,2,63,250, 22,137,8,6,42,42,101,114,114,111,114,32,114,101,97,100,105,110,103,32,99, 111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,32,102,105,108,101,32, -126,115,58,32,126,97,23,203,2,248,22,145,12,23,206,2,247,22,27,12,12, +126,115,58,32,126,97,23,203,2,248,22,146,12,23,206,2,247,22,27,12,12, 28,23,193,2,250,22,156,2,80,144,45,8,25,41,23,198,1,249,22,80,23, -198,1,21,17,0,0,86,95,23,195,1,23,193,1,12,28,248,22,149,12,23, +198,1,21,17,0,0,86,95,23,195,1,23,193,1,12,28,248,22,150,12,23, 198,2,86,94,23,197,1,248,23,195,1,247,22,138,2,196,88,148,39,40,58, 8,240,0,0,0,2,9,226,0,2,1,3,33,135,2,20,20,94,248,22,148, -6,23,194,2,28,248,22,148,7,248,22,148,6,23,195,1,12,248,22,176,11, +6,23,194,2,28,248,22,148,7,248,22,148,6,23,195,1,12,248,22,177,11, 6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,103,108,101,32, 83,45,101,120,112,114,101,115,115,105,111,110,248,22,133,6,23,194,1,28,248, 22,89,193,28,28,249,22,128,4,41,248,22,93,195,10,249,22,128,4,42,248, 22,93,195,28,28,248,22,153,7,248,22,81,194,10,28,249,22,169,9,2,64, -248,22,161,20,195,10,249,22,169,9,2,65,248,22,161,20,195,28,27,248,22, -102,194,28,248,22,173,15,193,10,28,248,22,153,7,193,28,248,22,132,16,193, -10,248,22,133,16,193,11,27,248,22,88,248,22,104,195,28,192,192,248,22,179, -16,248,22,111,195,11,11,11,11,28,248,22,186,15,249,22,191,15,23,196,2, -23,198,2,27,248,22,68,248,22,177,15,23,198,1,250,22,156,2,23,198,2, +248,22,162,20,195,10,249,22,169,9,2,65,248,22,162,20,195,28,27,248,22, +102,194,28,248,22,174,15,193,10,28,248,22,153,7,193,28,248,22,133,16,193, +10,248,22,134,16,193,11,27,248,22,88,248,22,104,195,28,192,192,248,22,180, +16,248,22,111,195,11,11,11,11,28,248,22,187,15,249,22,128,16,23,196,2, +23,198,2,27,248,22,68,248,22,178,15,23,198,1,250,22,156,2,23,198,2, 23,196,2,249,22,80,23,199,1,250,22,158,2,23,203,1,23,201,1,9,12, 250,22,156,2,23,197,1,23,198,1,249,22,80,23,198,1,23,201,1,28,28, -248,22,88,248,22,104,23,197,2,10,249,22,170,16,248,22,111,23,198,2,247, -22,171,8,27,248,22,137,16,249,22,135,16,248,22,102,23,200,2,23,198,1, -28,249,22,169,9,248,22,161,20,23,199,2,2,65,86,94,23,196,1,249,22, +248,22,88,248,22,104,23,197,2,10,249,22,171,16,248,22,111,23,198,2,247, +22,171,8,27,248,22,138,16,249,22,136,16,248,22,102,23,200,2,23,198,1, +28,249,22,169,9,248,22,162,20,23,199,2,2,65,86,94,23,196,1,249,22, 3,20,20,94,88,148,8,36,40,56,11,9,224,3,2,33,140,2,23,196,1, -248,22,140,16,23,196,1,28,249,22,169,9,248,22,161,20,23,199,2,2,64, +248,22,141,16,23,196,1,28,249,22,169,9,248,22,162,20,23,199,2,2,64, 86,94,23,196,1,86,94,28,250,22,158,2,23,197,2,11,11,12,250,22,156, 2,23,197,2,11,9,249,22,164,2,23,196,2,20,20,95,88,148,8,36,41, 53,11,9,224,3,2,33,141,2,23,195,1,23,196,1,27,248,22,68,248,22, -161,20,23,199,1,250,22,156,2,23,198,2,23,196,2,249,22,80,248,22,129, +162,20,23,199,1,250,22,156,2,23,198,2,23,196,2,249,22,80,248,22,129, 2,23,200,1,250,22,158,2,23,203,1,23,201,1,9,12,250,22,156,2,23, 196,1,23,197,1,248,22,95,23,199,1,27,28,28,23,194,2,248,22,167,9, 248,22,81,23,196,2,10,9,27,249,22,188,5,23,198,2,68,98,105,110,97, 114,121,250,22,44,22,35,88,148,8,36,39,47,11,9,223,3,33,137,2,20, 20,94,88,148,8,36,39,46,11,9,223,3,33,138,2,23,196,1,86,94,28, 28,248,22,89,23,194,2,249,22,4,32,0,88,148,8,36,40,48,11,9,222, -33,139,2,23,195,2,11,12,248,22,176,11,6,18,18,105,108,108,45,102,111, +33,139,2,23,195,2,11,12,248,22,177,11,6,18,18,105,108,108,45,102,111, 114,109,101,100,32,99,111,110,116,101,110,116,27,247,22,138,2,27,90,144,42, -11,89,146,42,39,11,248,22,130,16,23,201,2,192,86,96,249,22,3,20,20, +11,89,146,42,39,11,248,22,131,16,23,201,2,192,86,96,249,22,3,20,20, 94,88,148,8,36,40,57,11,9,224,2,3,33,142,2,23,195,1,23,197,1, 249,22,164,2,195,88,148,8,36,41,51,11,9,223,3,33,143,2,250,22,156, 2,80,144,47,8,25,41,23,200,1,249,22,80,23,201,1,198,193,20,13,144, 80,144,40,8,28,40,250,80,144,43,8,47,42,23,198,2,23,196,2,11,27, 250,22,158,2,80,144,44,8,25,41,23,197,2,21,143,11,17,0,0,27,248, 22,81,23,195,2,27,249,80,144,45,8,27,42,23,198,2,23,196,2,28,249, -22,171,9,23,195,2,23,196,1,248,22,162,20,195,86,94,23,195,1,20,13, +22,171,9,23,195,2,23,196,1,248,22,163,20,195,86,94,23,195,1,20,13, 144,80,144,43,8,28,40,250,80,144,46,8,47,42,23,201,1,23,199,2,23, 196,2,27,20,20,95,88,148,8,36,39,55,8,240,0,0,0,2,9,225,5, 4,1,33,144,2,23,194,1,23,197,1,28,249,22,48,23,195,2,39,20,13, 144,80,144,44,46,40,26,29,80,144,8,34,47,40,249,22,31,11,80,144,8, -36,46,40,22,143,15,10,22,144,15,10,22,145,15,10,22,148,15,10,22,147, -15,11,22,149,15,10,22,146,15,10,22,150,15,10,22,151,15,10,22,152,15, -10,22,153,15,10,22,154,15,11,22,155,15,10,22,141,15,11,247,23,193,1, -250,22,180,11,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148,39,40, +36,46,40,22,144,15,10,22,145,15,10,22,146,15,10,22,149,15,10,22,148, +15,11,22,150,15,10,22,147,15,10,22,151,15,10,22,152,15,10,22,153,15, +10,22,154,15,10,22,155,15,11,22,156,15,10,22,142,15,11,247,23,193,1, +250,22,181,11,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148,39,40, 8,43,16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,9,224,1,2, 33,145,2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22,153,7,23, -195,2,27,249,22,168,16,2,147,2,23,197,2,28,23,193,2,28,249,22,128, +195,2,27,249,22,169,16,2,147,2,23,197,2,28,23,193,2,28,249,22,128, 4,248,22,101,23,196,2,248,22,182,3,248,22,156,7,23,199,2,249,22,7, 250,22,175,7,23,200,1,39,248,22,101,23,199,1,23,198,1,249,22,7,250, 22,175,7,23,200,2,39,248,22,101,23,199,2,249,22,80,249,22,175,7,23, 201,1,248,22,103,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1,90, -144,42,11,89,146,42,39,11,248,22,130,16,23,198,1,86,94,23,195,1,28, +144,42,11,89,146,42,39,11,248,22,131,16,23,198,1,86,94,23,195,1,28, 249,22,169,9,23,195,2,2,49,86,94,23,193,1,249,22,7,23,196,1,23, 200,1,27,249,22,80,23,197,1,23,201,1,28,248,22,153,7,23,195,2,27, -249,22,168,16,2,147,2,23,197,2,28,23,193,2,28,249,22,128,4,248,22, +249,22,169,16,2,147,2,23,197,2,28,23,193,2,28,249,22,128,4,248,22, 101,23,196,2,248,22,182,3,248,22,156,7,23,199,2,249,22,7,250,22,175, 7,23,200,1,39,248,22,101,23,199,1,23,196,1,249,22,7,250,22,175,7, 23,200,2,39,248,22,101,23,199,2,249,22,80,249,22,175,7,23,201,1,248, 22,103,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,90,144,42,11, -89,146,42,39,11,248,22,130,16,23,198,1,86,94,23,195,1,28,249,22,169, +89,146,42,39,11,248,22,131,16,23,198,1,86,94,23,195,1,28,249,22,169, 9,23,195,2,2,49,86,94,23,193,1,249,22,7,23,196,1,23,198,1,249, 80,144,48,8,31,42,194,249,22,80,197,199,28,248,22,88,23,196,2,9,28, -248,22,81,23,196,2,28,248,22,149,2,248,22,161,20,23,197,2,250,22,94, -249,22,2,22,129,2,250,22,158,2,248,22,161,20,23,204,2,23,202,2,9, -250,22,158,2,248,22,161,20,23,202,2,11,9,27,248,22,162,20,23,200,1, +248,22,81,23,196,2,28,248,22,149,2,248,22,162,20,23,197,2,250,22,94, +249,22,2,22,129,2,250,22,158,2,248,22,162,20,23,204,2,23,202,2,9, +250,22,158,2,248,22,162,20,23,202,2,11,9,27,248,22,163,20,23,200,1, 28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2,248, -22,161,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22, -161,20,23,202,2,23,206,2,9,250,22,158,2,248,22,161,20,23,200,2,11, -9,249,80,144,48,8,48,42,23,203,1,248,22,162,20,23,199,1,27,248,80, -144,45,8,30,42,248,22,161,20,23,196,2,250,22,94,250,22,158,2,23,199, +22,162,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22, +162,20,23,202,2,23,206,2,9,250,22,158,2,248,22,162,20,23,200,2,11, +9,249,80,144,48,8,48,42,23,203,1,248,22,163,20,23,199,1,27,248,80, +144,45,8,30,42,248,22,162,20,23,196,2,250,22,94,250,22,158,2,23,199, 2,23,205,2,9,250,22,158,2,23,199,1,11,9,249,80,144,49,8,48,42, -23,204,1,248,22,162,20,23,200,1,249,22,94,247,22,154,16,249,80,144,47, -8,48,42,23,202,1,248,22,162,20,23,198,1,27,248,80,144,41,8,30,42, -248,22,161,20,23,198,2,250,22,94,250,22,158,2,23,199,2,23,201,2,9, -250,22,158,2,23,199,1,11,9,27,248,22,162,20,23,201,1,28,248,22,88, -23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2,248,22,161,20,23, -195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,161,20,23,202, -2,23,207,2,9,250,22,158,2,248,22,161,20,23,200,2,11,9,249,80,144, -49,8,48,42,23,204,1,248,22,162,20,23,199,1,27,248,80,144,46,8,30, -42,248,22,161,20,23,196,2,250,22,94,250,22,158,2,23,199,2,23,206,2, +23,204,1,248,22,163,20,23,200,1,249,22,94,247,22,155,16,249,80,144,47, +8,48,42,23,202,1,248,22,163,20,23,198,1,27,248,80,144,41,8,30,42, +248,22,162,20,23,198,2,250,22,94,250,22,158,2,23,199,2,23,201,2,9, +250,22,158,2,23,199,1,11,9,27,248,22,163,20,23,201,1,28,248,22,88, +23,194,2,9,28,248,22,81,23,194,2,28,248,22,149,2,248,22,162,20,23, +195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,162,20,23,202, +2,23,207,2,9,250,22,158,2,248,22,162,20,23,200,2,11,9,249,80,144, +49,8,48,42,23,204,1,248,22,163,20,23,199,1,27,248,80,144,46,8,30, +42,248,22,162,20,23,196,2,250,22,94,250,22,158,2,23,199,2,23,206,2, 9,250,22,158,2,23,199,1,11,9,249,80,144,50,8,48,42,23,205,1,248, -22,162,20,23,200,1,249,22,94,247,22,154,16,249,80,144,48,8,48,42,23, -203,1,248,22,162,20,23,198,1,249,22,94,247,22,154,16,27,248,22,162,20, +22,163,20,23,200,1,249,22,94,247,22,155,16,249,80,144,48,8,48,42,23, +203,1,248,22,163,20,23,198,1,249,22,94,247,22,155,16,27,248,22,163,20, 23,199,1,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22, -149,2,248,22,161,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158, -2,248,22,161,20,23,202,2,23,205,2,9,250,22,158,2,248,22,161,20,23, -200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,162,20,23,199,1, -27,248,80,144,44,8,30,42,248,22,161,20,23,196,2,250,22,94,250,22,158, +149,2,248,22,162,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158, +2,248,22,162,20,23,202,2,23,205,2,9,250,22,158,2,248,22,162,20,23, +200,2,11,9,249,80,144,47,8,48,42,23,202,1,248,22,163,20,23,199,1, +27,248,80,144,44,8,30,42,248,22,162,20,23,196,2,250,22,94,250,22,158, 2,23,199,2,23,204,2,9,250,22,158,2,23,199,1,11,9,249,80,144,48, -8,48,42,23,203,1,248,22,162,20,23,200,1,249,22,94,247,22,154,16,249, -80,144,46,8,48,42,23,201,1,248,22,162,20,23,198,1,32,150,2,88,148, +8,48,42,23,203,1,248,22,163,20,23,200,1,249,22,94,247,22,155,16,249, +80,144,46,8,48,42,23,201,1,248,22,163,20,23,198,1,32,150,2,88,148, 8,36,40,50,11,2,50,222,33,151,2,28,248,22,88,248,22,82,23,195,2, -248,22,90,27,248,22,161,20,195,28,248,22,173,15,193,248,22,177,15,193,192, -250,22,91,27,248,22,161,20,23,198,2,28,248,22,173,15,193,248,22,177,15, -193,192,2,67,248,2,150,2,248,22,162,20,23,198,1,250,22,137,8,6,7, +248,22,90,27,248,22,162,20,195,28,248,22,174,15,193,248,22,178,15,193,192, +250,22,91,27,248,22,162,20,23,198,2,28,248,22,174,15,193,248,22,178,15, +193,192,2,67,248,2,150,2,248,22,163,20,23,198,1,250,22,137,8,6,7, 7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,137,8,6,6, 6,10,32,32,32,126,97,248,22,132,2,23,196,1,32,154,2,88,148,39,41, 51,11,68,102,105,108,116,101,114,222,33,155,2,28,248,22,88,23,195,2,9, -28,248,23,194,2,248,22,81,23,196,2,249,22,80,248,22,161,20,23,197,2, -249,2,154,2,23,197,1,248,22,162,20,23,199,1,249,2,154,2,23,195,1, -248,22,162,20,23,197,1,28,248,22,88,23,201,2,86,95,23,200,1,23,199, -1,28,23,201,2,28,197,249,22,191,15,202,199,200,27,28,248,22,88,23,198, +28,248,23,194,2,248,22,81,23,196,2,249,22,80,248,22,162,20,23,197,2, +249,2,154,2,23,197,1,248,22,163,20,23,199,1,249,2,154,2,23,195,1, +248,22,163,20,23,197,1,28,248,22,88,23,201,2,86,95,23,200,1,23,199, +1,28,23,201,2,28,197,249,22,128,16,202,199,200,27,28,248,22,88,23,198, 2,2,66,249,22,1,22,176,7,248,2,150,2,23,200,2,248,23,199,1,251, 22,137,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32, 102,111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126, 115,10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114, 101,99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,88,23,203,1,28, -248,22,173,15,23,202,2,248,22,177,15,23,202,1,23,201,1,250,22,176,7, -28,248,22,173,15,23,205,2,248,22,177,15,23,205,1,23,204,1,2,67,23, +248,22,174,15,23,202,2,248,22,178,15,23,202,1,23,201,1,250,22,176,7, +28,248,22,174,15,23,205,2,248,22,178,15,23,205,1,23,204,1,2,67,23, 201,2,249,22,1,22,176,7,249,22,2,32,0,88,148,8,36,40,48,11,9, -222,33,152,2,27,248,22,93,23,206,2,27,248,22,93,247,22,154,16,28,249, +222,33,152,2,27,248,22,93,23,206,2,27,248,22,93,247,22,155,16,28,249, 22,129,4,249,22,184,3,23,198,2,23,197,2,44,23,206,2,249,22,94,247, -22,154,16,248,22,90,249,22,137,8,6,50,50,46,46,46,32,91,126,97,32, +22,155,16,248,22,90,249,22,137,8,6,50,50,46,46,46,32,91,126,97,32, 97,100,100,105,116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100, 32,112,97,99,107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93, 249,22,184,3,23,201,1,23,200,1,28,249,22,5,22,131,2,23,202,2,250, @@ -640,311 +640,311 @@ 105,114,101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,176, 7,249,22,2,32,0,88,148,8,36,40,48,11,9,222,33,153,2,249,2,154, 2,22,131,2,23,209,1,86,95,23,200,1,23,198,1,2,66,27,248,22,81, -23,202,2,27,28,248,22,173,15,23,195,2,249,22,191,15,23,196,1,23,199, -2,248,22,132,2,23,195,1,28,28,248,22,173,15,248,22,161,20,23,204,2, -248,22,186,15,23,194,2,10,27,250,22,1,22,191,15,23,197,1,23,202,2, -28,28,248,22,88,23,200,2,10,248,22,186,15,23,194,2,28,23,201,2,28, -28,250,80,144,45,8,32,42,195,203,204,10,27,28,248,22,173,15,202,248,22, -177,15,202,201,19,248,22,156,7,23,195,2,27,28,249,22,132,4,23,196,4, +23,202,2,27,28,248,22,174,15,23,195,2,249,22,128,16,23,196,1,23,199, +2,248,22,132,2,23,195,1,28,28,248,22,174,15,248,22,162,20,23,204,2, +248,22,187,15,23,194,2,10,27,250,22,1,22,128,16,23,197,1,23,202,2, +28,28,248,22,88,23,200,2,10,248,22,187,15,23,194,2,28,23,201,2,28, +28,250,80,144,45,8,32,42,195,203,204,10,27,28,248,22,174,15,202,248,22, +178,15,202,201,19,248,22,156,7,23,195,2,27,28,249,22,132,4,23,196,4, 43,28,249,22,159,7,6,4,4,46,114,107,116,249,22,175,7,23,199,2,249, 22,184,3,23,200,4,43,249,22,176,7,250,22,175,7,23,200,1,39,249,22, 184,3,23,201,4,43,6,3,3,46,115,115,86,94,23,195,1,11,11,28,23, 193,2,250,80,144,48,8,32,42,198,23,196,1,23,15,11,2,28,200,249,22, -191,15,194,202,192,26,8,80,144,50,8,49,42,204,205,206,23,15,23,16,23, -17,248,22,162,20,23,19,28,23,19,23,19,200,192,26,8,80,144,50,8,49, -42,204,205,206,23,15,23,16,23,17,248,22,162,20,23,19,23,19,26,8,80, -144,49,8,49,42,203,204,205,206,23,15,23,16,248,22,162,20,23,18,23,18, +128,16,194,202,192,26,8,80,144,50,8,49,42,204,205,206,23,15,23,16,23, +17,248,22,163,20,23,19,28,23,19,23,19,200,192,26,8,80,144,50,8,49, +42,204,205,206,23,15,23,16,23,17,248,22,163,20,23,19,23,19,26,8,80, +144,49,8,49,42,203,204,205,206,23,15,23,16,248,22,163,20,23,18,23,18, 90,144,41,11,89,146,41,39,11,249,80,144,43,8,31,42,23,199,1,23,200, -1,27,248,22,68,28,248,22,173,15,195,248,22,177,15,195,194,27,27,247,22, -155,16,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22,149, -2,248,22,161,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2, -248,22,161,20,23,202,2,23,203,2,9,250,22,158,2,248,22,161,20,23,200, -2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,162,20,23,199,1,27, -248,80,144,46,8,30,42,248,22,161,20,23,196,2,250,22,94,250,22,158,2, +1,27,248,22,68,28,248,22,174,15,195,248,22,178,15,195,194,27,27,247,22, +156,16,28,248,22,88,23,194,2,9,28,248,22,81,23,194,2,28,248,22,149, +2,248,22,162,20,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2, +248,22,162,20,23,202,2,23,203,2,9,250,22,158,2,248,22,162,20,23,200, +2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,163,20,23,199,1,27, +248,80,144,46,8,30,42,248,22,162,20,23,196,2,250,22,94,250,22,158,2, 23,199,2,23,202,2,9,250,22,158,2,23,199,1,11,9,249,80,144,50,8, -48,42,23,201,1,248,22,162,20,23,200,1,249,22,94,247,22,154,16,249,80, -144,48,8,48,42,23,199,1,248,22,162,20,23,198,1,26,8,80,144,51,8, +48,42,23,201,1,248,22,163,20,23,200,1,249,22,94,247,22,155,16,249,80, +144,48,8,48,42,23,199,1,248,22,163,20,23,198,1,26,8,80,144,51,8, 49,42,200,202,203,205,23,16,23,17,200,11,32,158,2,88,148,8,36,42,59, 11,2,50,222,33,159,2,28,248,22,133,4,23,196,2,86,94,23,195,1,19, -248,22,147,8,23,195,2,19,248,22,147,8,23,196,2,249,22,183,15,27,251, +248,22,147,8,23,195,2,19,248,22,147,8,23,196,2,249,22,184,15,27,251, 22,154,8,250,22,153,8,23,205,2,39,23,204,4,2,51,249,22,153,8,23, 204,1,23,202,4,2,68,28,248,22,133,4,248,22,147,8,23,195,2,86,94, -23,193,1,251,22,182,11,2,37,2,69,2,70,202,192,28,248,22,174,15,198, -248,22,175,15,198,247,22,176,15,2,2,27,248,22,182,3,23,197,1,28,249, +23,193,1,251,22,183,11,2,37,2,69,2,70,202,192,28,248,22,175,15,198, +248,22,176,15,198,247,22,177,15,2,2,27,248,22,182,3,23,197,1,28,249, 22,169,9,8,46,249,22,148,8,23,198,2,23,197,2,27,248,22,181,3,23, -195,2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,205,2,39,23,204, +195,2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,205,2,39,23,204, 1,2,71,249,22,153,8,23,204,1,23,202,1,2,68,28,248,22,133,4,248, -22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70, -202,192,28,248,22,174,15,198,248,22,175,15,198,247,22,176,15,250,2,158,2, -196,197,195,248,22,185,15,27,250,22,191,15,23,200,1,23,202,1,23,199,1, -28,249,22,169,9,23,197,2,66,115,97,109,101,192,28,248,22,132,16,23,196, -2,249,22,191,15,194,196,249,80,144,46,42,42,23,195,1,23,197,1,249,22, +22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70, +202,192,28,248,22,175,15,198,248,22,176,15,198,247,22,177,15,250,2,158,2, +196,197,195,248,22,186,15,27,250,22,128,16,23,200,1,23,202,1,23,199,1, +28,249,22,169,9,23,197,2,66,115,97,109,101,192,28,248,22,133,16,23,196, +2,249,22,128,16,194,196,249,80,144,46,42,42,23,195,1,23,197,1,249,22, 5,20,20,96,88,148,39,40,54,47,9,226,5,4,2,6,33,160,2,23,199, -1,23,195,1,23,197,1,23,196,1,27,248,22,185,15,249,22,191,15,23,198, +1,23,195,1,23,197,1,23,196,1,27,248,22,186,15,249,22,128,16,23,198, 2,23,199,2,28,23,193,2,192,86,94,23,193,1,28,23,197,1,27,90,144, 41,11,89,146,41,39,11,250,80,144,46,8,34,42,23,202,2,2,68,2,37, -27,248,22,179,15,23,196,1,27,250,2,158,2,23,197,2,23,204,1,248,22, -147,8,23,198,1,28,248,22,174,15,195,249,22,191,15,196,194,192,27,247,22, -156,16,249,22,5,20,20,96,88,148,39,40,51,47,9,226,5,6,2,3,33, -161,2,23,196,1,23,195,1,23,199,1,247,22,157,16,11,86,95,28,28,248, -22,174,15,23,194,2,10,28,248,22,173,15,23,194,2,10,28,248,22,153,7, -23,194,2,28,248,22,132,16,23,194,2,10,248,22,133,16,23,194,2,11,12, -252,22,180,11,23,200,2,2,42,39,23,198,2,23,199,2,28,28,248,22,153, -7,23,195,2,10,248,22,142,8,23,195,2,86,94,23,194,1,12,252,22,180, +27,248,22,180,15,23,196,1,27,250,2,158,2,23,197,2,23,204,1,248,22, +147,8,23,198,1,28,248,22,175,15,195,249,22,128,16,196,194,192,27,247,22, +157,16,249,22,5,20,20,96,88,148,39,40,51,47,9,226,5,6,2,3,33, +161,2,23,196,1,23,195,1,23,199,1,247,22,158,16,11,86,95,28,28,248, +22,175,15,23,194,2,10,28,248,22,174,15,23,194,2,10,28,248,22,153,7, +23,194,2,28,248,22,133,16,23,194,2,10,248,22,134,16,23,194,2,11,12, +252,22,181,11,23,200,2,2,42,39,23,198,2,23,199,2,28,28,248,22,153, +7,23,195,2,10,248,22,142,8,23,195,2,86,94,23,194,1,12,252,22,181, 11,23,200,2,2,72,40,23,198,2,23,199,1,90,144,42,11,89,146,42,39, -11,248,22,130,16,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95, -23,198,1,23,196,1,12,250,22,183,11,23,201,1,2,73,23,199,1,249,22, +11,248,22,131,16,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95, +23,198,1,23,196,1,12,250,22,184,11,23,201,1,2,73,23,199,1,249,22, 7,23,195,1,23,196,1,32,164,2,88,148,8,36,46,61,11,2,74,222,33, -165,2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,203,2,39,23,207, +165,2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,203,2,39,23,207, 1,23,205,1,249,23,203,1,23,202,1,23,208,1,28,248,22,153,7,23,204, 2,249,22,168,8,23,205,1,8,63,23,203,1,28,248,22,133,4,248,22,147, -8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70,201,192, -28,248,22,174,15,197,248,22,175,15,197,247,22,176,15,32,166,2,88,148,8, +8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70,201,192, +28,248,22,175,15,197,248,22,176,15,197,247,22,177,15,32,166,2,88,148,8, 36,45,8,24,11,2,50,222,33,167,2,28,248,22,133,4,23,199,2,86,95, 23,198,1,23,194,1,19,248,22,147,8,23,195,2,19,248,22,147,8,23,196, -2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,205,2,39,23,204,4, +2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,205,2,39,23,204,4, 2,51,249,23,206,1,23,204,1,23,202,4,28,248,22,153,7,23,207,2,249, 22,168,8,23,208,1,8,63,23,206,1,28,248,22,133,4,248,22,147,8,23, -195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70,204,192,28,248, -22,174,15,200,248,22,175,15,200,247,22,176,15,2,2,27,248,22,182,3,23, +195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70,204,192,28,248, +22,175,15,200,248,22,176,15,200,247,22,177,15,2,2,27,248,22,182,3,23, 200,1,28,249,22,169,9,8,46,249,22,148,8,23,198,2,23,197,2,27,248, -22,181,3,23,195,2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,205, +22,181,3,23,195,2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,205, 2,39,23,204,1,23,203,1,249,23,206,1,23,204,1,23,202,1,28,248,22, 153,7,23,207,2,249,22,168,8,23,208,1,8,63,23,206,1,28,248,22,133, -4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69, -2,70,204,192,28,248,22,174,15,200,248,22,175,15,200,247,22,176,15,28,248, +4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69, +2,70,204,192,28,248,22,175,15,200,248,22,176,15,200,247,22,177,15,28,248, 22,133,4,23,194,2,86,95,23,195,1,23,193,1,19,248,22,147,8,23,196, -2,19,248,22,147,8,23,197,2,249,22,183,15,27,251,22,154,8,250,22,153, +2,19,248,22,147,8,23,197,2,249,22,184,15,27,251,22,154,8,250,22,153, 8,23,206,2,39,23,204,4,2,51,249,23,207,1,23,205,1,23,202,4,28, 248,22,153,7,23,208,2,249,22,168,8,23,209,1,8,63,23,207,1,28,248, -22,133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37, -2,69,2,70,205,192,28,248,22,174,15,201,248,22,175,15,201,247,22,176,15, +22,133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37, +2,69,2,70,205,192,28,248,22,175,15,201,248,22,176,15,201,247,22,177,15, 2,2,27,248,22,182,3,23,195,1,28,249,22,169,9,8,46,249,22,148,8, -23,199,2,23,197,2,27,248,22,181,3,23,195,2,249,22,183,15,27,251,22, +23,199,2,23,197,2,27,248,22,181,3,23,195,2,249,22,184,15,27,251,22, 154,8,250,22,153,8,23,206,2,39,23,204,1,23,204,1,249,23,207,1,23, 205,1,23,202,1,28,248,22,153,7,23,208,2,249,22,168,8,23,209,1,8, 63,23,207,1,28,248,22,133,4,248,22,147,8,23,195,2,86,94,23,193,1, -251,22,182,11,2,37,2,69,2,70,205,192,28,248,22,174,15,201,248,22,175, -15,201,247,22,176,15,28,248,22,133,4,193,254,2,164,2,201,203,204,205,248, +251,22,183,11,2,37,2,69,2,70,205,192,28,248,22,175,15,201,248,22,176, +15,201,247,22,177,15,28,248,22,133,4,193,254,2,164,2,201,203,204,205,248, 22,147,8,202,2,51,248,22,147,8,202,27,248,22,182,3,194,28,249,22,169, 9,8,46,249,22,148,8,199,196,254,2,164,2,202,204,205,206,199,203,248,22, 181,3,200,253,2,166,2,201,202,203,204,205,198,90,144,41,11,89,146,41,39, -11,86,95,28,28,248,22,174,15,23,199,2,10,28,248,22,173,15,23,199,2, -10,28,248,22,153,7,23,199,2,28,248,22,132,16,23,199,2,10,248,22,133, -16,23,199,2,11,12,252,22,180,11,23,200,2,2,42,39,23,203,2,23,204, +11,86,95,28,28,248,22,175,15,23,199,2,10,28,248,22,174,15,23,199,2, +10,28,248,22,153,7,23,199,2,28,248,22,133,16,23,199,2,10,248,22,134, +16,23,199,2,11,12,252,22,181,11,23,200,2,2,42,39,23,203,2,23,204, 2,28,28,248,22,153,7,23,200,2,10,248,22,142,8,23,200,2,12,252,22, -180,11,23,200,2,2,72,40,23,203,2,23,204,2,90,144,42,11,89,146,42, -39,11,248,22,130,16,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22, -183,11,23,201,1,2,73,23,204,2,249,22,7,194,195,27,248,22,179,15,23, +181,11,23,200,2,2,72,40,23,203,2,23,204,2,90,144,42,11,89,146,42, +39,11,248,22,131,16,23,202,2,86,94,23,195,1,86,94,28,192,12,250,22, +184,11,23,201,1,2,73,23,204,2,249,22,7,194,195,27,248,22,180,15,23, 196,1,27,19,248,22,147,8,23,196,2,28,248,22,133,4,23,194,4,86,94, 23,199,1,19,248,22,147,8,23,197,2,19,248,22,147,8,23,198,2,249,22, -183,15,27,251,22,154,8,250,22,153,8,23,207,2,39,23,204,4,2,51,249, +184,15,27,251,22,154,8,250,22,153,8,23,207,2,39,23,204,4,2,51,249, 23,211,1,23,206,1,23,202,4,28,248,22,153,7,23,212,2,249,22,168,8, 23,213,1,8,63,23,211,1,28,248,22,133,4,248,22,147,8,23,195,2,86, -94,23,193,1,251,22,182,11,2,37,2,69,2,70,23,17,192,28,248,22,174, -15,205,248,22,175,15,205,247,22,176,15,2,2,27,248,22,182,3,23,195,4, +94,23,193,1,251,22,183,11,2,37,2,69,2,70,23,17,192,28,248,22,175, +15,205,248,22,176,15,205,247,22,177,15,2,2,27,248,22,182,3,23,195,4, 28,249,22,169,9,8,46,249,22,148,8,23,200,2,23,197,2,27,248,22,181, -3,23,195,2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,207,2,39, +3,23,195,2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,207,2,39, 23,204,1,23,208,1,249,23,211,1,23,206,1,23,202,1,28,248,22,153,7, 23,212,2,249,22,168,8,23,213,1,8,63,23,211,1,28,248,22,133,4,248, -22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70, -23,17,192,28,248,22,174,15,205,248,22,175,15,205,247,22,176,15,28,248,22, +22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70, +23,17,192,28,248,22,175,15,205,248,22,176,15,205,247,22,177,15,28,248,22, 133,4,23,194,2,86,95,23,200,1,23,193,1,254,2,164,2,23,203,2,23, 208,1,23,209,1,23,210,1,248,22,147,8,23,204,2,2,51,248,22,147,8, 23,204,1,27,248,22,182,3,23,195,1,28,249,22,169,9,8,46,249,22,148, 8,23,201,2,23,197,2,254,2,164,2,23,204,1,23,209,1,23,210,1,23, 211,1,23,200,2,23,208,1,248,22,181,3,23,201,1,253,2,166,2,23,203, -1,23,207,1,23,208,1,23,209,1,23,210,1,23,199,1,2,28,248,22,174, -15,195,249,22,191,15,196,194,192,32,169,2,88,148,8,36,43,61,11,2,50, +1,23,207,1,23,208,1,23,209,1,23,210,1,23,199,1,2,28,248,22,175, +15,195,249,22,128,16,196,194,192,32,169,2,88,148,8,36,43,61,11,2,50, 222,33,170,2,28,248,22,133,4,23,197,2,86,94,23,196,1,19,248,22,147, -8,23,195,2,35,248,22,147,8,23,196,2,249,22,183,15,27,251,22,154,8, +8,23,195,2,35,248,22,147,8,23,196,2,249,22,184,15,27,251,22,154,8, 250,22,153,8,23,205,1,39,23,204,4,2,51,2,51,28,248,22,153,7,23, 205,2,249,22,168,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248,22, -147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70,202, -192,28,248,22,174,15,198,248,22,175,15,198,247,22,176,15,2,27,248,22,182, +147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70,202, +192,28,248,22,175,15,198,248,22,176,15,198,247,22,177,15,2,27,248,22,182, 3,23,198,1,28,249,22,169,9,8,46,249,22,148,8,23,198,2,23,197,2, -35,248,22,181,3,23,195,2,249,22,183,15,27,251,22,154,8,250,22,153,8, +35,248,22,181,3,23,195,2,249,22,184,15,27,251,22,154,8,250,22,153,8, 23,205,1,39,23,204,1,2,51,2,51,28,248,22,153,7,23,205,2,249,22, 168,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248,22,147,8,23,195, -2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70,202,192,28,248,22, -174,15,198,248,22,175,15,198,247,22,176,15,28,248,22,133,4,23,194,2,86, +2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70,202,192,28,248,22, +175,15,198,248,22,176,15,198,247,22,177,15,28,248,22,133,4,23,194,2,86, 94,23,193,1,19,248,22,147,8,23,196,2,35,248,22,147,8,23,197,2,249, -22,183,15,27,251,22,154,8,250,22,153,8,23,206,1,39,23,204,4,2,51, +22,184,15,27,251,22,154,8,250,22,153,8,23,206,1,39,23,204,4,2,51, 2,51,28,248,22,153,7,23,206,2,249,22,168,8,23,207,1,8,63,23,205, -1,28,248,22,133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,182, -11,2,37,2,69,2,70,203,192,28,248,22,174,15,199,248,22,175,15,199,247, -22,176,15,2,27,248,22,182,3,23,195,1,28,249,22,169,9,8,46,249,22, -148,8,23,199,2,23,197,2,35,248,22,181,3,23,195,2,249,22,183,15,27, +1,28,248,22,133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,183, +11,2,37,2,69,2,70,203,192,28,248,22,175,15,199,248,22,176,15,199,247, +22,177,15,2,27,248,22,182,3,23,195,1,28,249,22,169,9,8,46,249,22, +148,8,23,199,2,23,197,2,35,248,22,181,3,23,195,2,249,22,184,15,27, 251,22,154,8,250,22,153,8,23,206,1,39,23,204,1,2,51,2,51,28,248, 22,153,7,23,206,2,249,22,168,8,23,207,1,8,63,23,205,1,28,248,22, -133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2, -69,2,70,203,192,28,248,22,174,15,199,248,22,175,15,199,247,22,176,15,251, +133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2, +69,2,70,203,192,28,248,22,175,15,199,248,22,176,15,199,247,22,177,15,251, 2,169,2,198,199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248, -22,174,15,23,196,2,10,28,248,22,173,15,23,196,2,10,28,248,22,153,7, -23,196,2,28,248,22,132,16,23,196,2,10,248,22,133,16,23,196,2,11,12, -252,22,180,11,2,37,2,42,39,23,200,2,23,201,2,28,28,248,22,153,7, -23,197,2,10,248,22,142,8,23,197,2,12,252,22,180,11,2,37,2,72,40, -23,200,2,23,201,2,90,144,42,11,89,146,42,39,11,248,22,130,16,23,199, -2,86,94,23,195,1,86,94,28,192,12,250,22,183,11,2,37,2,73,23,201, -2,249,22,7,194,195,27,248,22,179,15,23,196,1,27,251,2,169,2,23,198, -2,23,201,1,23,202,1,248,22,147,8,23,199,1,28,248,22,174,15,195,249, -22,191,15,196,194,192,2,51,252,80,144,44,8,35,42,2,37,2,51,32,0, +22,175,15,23,196,2,10,28,248,22,174,15,23,196,2,10,28,248,22,153,7, +23,196,2,28,248,22,133,16,23,196,2,10,248,22,134,16,23,196,2,11,12, +252,22,181,11,2,37,2,42,39,23,200,2,23,201,2,28,28,248,22,153,7, +23,197,2,10,248,22,142,8,23,197,2,12,252,22,181,11,2,37,2,72,40, +23,200,2,23,201,2,90,144,42,11,89,146,42,39,11,248,22,131,16,23,199, +2,86,94,23,195,1,86,94,28,192,12,250,22,184,11,2,37,2,73,23,201, +2,249,22,7,194,195,27,248,22,180,15,23,196,1,27,251,2,169,2,23,198, +2,23,201,1,23,202,1,248,22,147,8,23,199,1,28,248,22,175,15,195,249, +22,128,16,196,194,192,2,51,252,80,144,44,8,35,42,2,37,2,51,32,0, 88,148,8,36,41,46,11,9,222,33,172,2,198,199,32,174,2,88,148,8,36, 43,60,11,2,50,222,33,177,2,32,175,2,88,148,8,36,45,60,11,2,74, -222,33,176,2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,203,2,39, +222,33,176,2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,203,2,39, 23,206,1,23,204,1,249,22,153,8,23,202,1,23,207,1,28,248,22,153,7, 23,203,2,249,22,168,8,23,204,1,8,63,23,202,1,28,248,22,133,4,248, -22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70, -200,192,28,248,22,174,15,196,248,22,175,15,196,247,22,176,15,28,248,22,133, +22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70, +200,192,28,248,22,175,15,196,248,22,176,15,196,247,22,177,15,28,248,22,133, 4,23,197,2,86,94,23,196,1,19,248,22,147,8,23,195,2,19,248,22,147, -8,23,196,2,249,22,183,15,27,251,22,154,8,250,22,153,8,23,205,2,39, +8,23,196,2,249,22,184,15,27,251,22,154,8,250,22,153,8,23,205,2,39, 23,204,4,2,51,249,22,153,8,23,204,1,23,202,4,28,248,22,153,7,23, 205,2,249,22,168,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248,22, -147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37,2,69,2,70,202, -192,28,248,22,174,15,198,248,22,175,15,198,247,22,176,15,2,2,27,248,22, +147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37,2,69,2,70,202, +192,28,248,22,175,15,198,248,22,176,15,198,247,22,177,15,2,2,27,248,22, 182,3,23,198,1,28,249,22,169,9,8,46,249,22,148,8,23,198,2,23,197, -2,27,248,22,181,3,23,195,2,249,22,183,15,27,251,22,154,8,250,22,153, +2,27,248,22,181,3,23,195,2,249,22,184,15,27,251,22,154,8,250,22,153, 8,23,205,2,39,23,204,1,2,71,249,22,153,8,23,204,1,23,202,1,28, 248,22,153,7,23,205,2,249,22,168,8,23,206,1,8,63,23,204,1,28,248, -22,133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,182,11,2,37, -2,69,2,70,202,192,28,248,22,174,15,198,248,22,175,15,198,247,22,176,15, +22,133,4,248,22,147,8,23,195,2,86,94,23,193,1,251,22,183,11,2,37, +2,69,2,70,202,192,28,248,22,175,15,198,248,22,176,15,198,247,22,177,15, 28,248,22,133,4,193,253,2,175,2,199,200,201,248,22,147,8,200,2,51,248, 22,147,8,200,27,248,22,182,3,194,28,249,22,169,9,8,46,249,22,148,8, 198,196,253,2,175,2,200,201,202,198,2,71,248,22,181,3,199,251,2,174,2, -198,199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,174,15, -23,196,2,10,28,248,22,173,15,23,196,2,10,28,248,22,153,7,23,196,2, -28,248,22,132,16,23,196,2,10,248,22,133,16,23,196,2,11,12,252,22,180, +198,199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,175,15, +23,196,2,10,28,248,22,174,15,23,196,2,10,28,248,22,153,7,23,196,2, +28,248,22,133,16,23,196,2,10,248,22,134,16,23,196,2,11,12,252,22,181, 11,2,37,2,42,39,23,200,2,23,201,2,28,28,248,22,153,7,23,197,2, -10,248,22,142,8,23,197,2,12,252,22,180,11,2,37,2,72,40,23,200,2, -23,201,2,90,144,42,11,89,146,42,39,11,248,22,130,16,23,199,2,86,94, -23,195,1,86,94,28,192,12,250,22,183,11,2,37,2,73,23,201,2,249,22, -7,194,195,27,248,22,179,15,23,196,1,27,251,2,174,2,23,198,2,23,201, -1,23,202,1,248,22,147,8,23,199,1,28,248,22,174,15,195,249,22,191,15, +10,248,22,142,8,23,197,2,12,252,22,181,11,2,37,2,72,40,23,200,2, +23,201,2,90,144,42,11,89,146,42,39,11,248,22,131,16,23,199,2,86,94, +23,195,1,86,94,28,192,12,250,22,184,11,2,37,2,73,23,201,2,249,22, +7,194,195,27,248,22,180,15,23,196,1,27,251,2,174,2,23,198,2,23,201, +1,23,202,1,248,22,147,8,23,199,1,28,248,22,175,15,195,249,22,128,16, 196,194,192,252,80,144,44,8,35,42,2,37,2,71,22,153,8,198,199,249,247, 22,176,5,23,195,1,11,249,247,22,176,5,194,11,28,248,22,88,23,195,2, -9,27,27,248,22,81,23,197,2,28,248,22,134,16,23,194,2,248,22,137,16, -23,194,1,28,248,22,133,16,23,194,2,90,144,42,11,89,146,42,39,11,248, -22,130,16,249,22,135,16,250,80,144,50,43,42,248,22,150,16,2,56,11,11, -248,22,150,16,2,57,86,95,23,195,1,23,194,1,248,22,137,16,249,22,135, -16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,150,16,2,56,23, -197,1,10,28,23,193,2,248,22,137,16,23,194,1,11,28,23,193,2,249,22, -80,248,22,137,16,249,22,135,16,23,198,1,247,22,151,16,27,248,22,162,20, +9,27,27,248,22,81,23,197,2,28,248,22,135,16,23,194,2,248,22,138,16, +23,194,1,28,248,22,134,16,23,194,2,90,144,42,11,89,146,42,39,11,248, +22,131,16,249,22,136,16,250,80,144,50,43,42,248,22,151,16,2,56,11,11, +248,22,151,16,2,57,86,95,23,195,1,23,194,1,248,22,138,16,249,22,136, +16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22,151,16,2,56,23, +197,1,10,28,23,193,2,248,22,138,16,23,194,1,11,28,23,193,2,249,22, +80,248,22,138,16,249,22,136,16,23,198,1,247,22,152,16,27,248,22,163,20, 23,199,1,28,248,22,88,23,194,2,9,27,248,80,144,45,56,42,248,22,81, -23,196,2,28,23,193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1, -247,22,151,16,248,80,144,47,8,50,42,248,22,162,20,23,198,1,86,94,23, -193,1,248,80,144,45,8,50,42,248,22,162,20,23,196,1,86,94,23,193,1, -27,248,22,162,20,23,197,1,28,248,22,88,23,194,2,9,27,248,80,144,43, -56,42,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,137,16,249,22, -135,16,23,198,1,247,22,151,16,248,80,144,45,8,50,42,248,22,162,20,23, -198,1,86,94,23,193,1,248,80,144,43,8,50,42,248,22,162,20,23,196,1, -28,248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,134,16, -23,194,2,248,22,137,16,23,194,1,28,248,22,133,16,23,194,2,90,144,42, -11,89,146,42,39,11,248,22,130,16,249,22,135,16,250,80,144,50,43,42,248, -22,150,16,2,56,11,11,248,22,150,16,2,57,86,95,23,195,1,23,194,1, -248,22,137,16,249,22,135,16,23,199,1,23,196,1,27,250,80,144,45,43,42, -248,22,150,16,2,56,23,197,1,10,28,23,193,2,248,22,137,16,23,194,1, -11,28,23,193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1,247,22, -151,16,27,248,22,162,20,23,199,1,28,248,22,88,23,194,2,9,27,248,80, -144,45,56,42,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,137,16, -249,22,135,16,23,198,1,247,22,151,16,248,80,144,47,8,51,42,248,22,162, -20,23,198,1,86,94,23,193,1,248,80,144,45,8,51,42,248,22,162,20,23, -196,1,86,94,23,193,1,27,248,22,162,20,23,197,1,28,248,22,88,23,194, +23,196,2,28,23,193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1, +247,22,152,16,248,80,144,47,8,50,42,248,22,163,20,23,198,1,86,94,23, +193,1,248,80,144,45,8,50,42,248,22,163,20,23,196,1,86,94,23,193,1, +27,248,22,163,20,23,197,1,28,248,22,88,23,194,2,9,27,248,80,144,43, +56,42,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,138,16,249,22, +136,16,23,198,1,247,22,152,16,248,80,144,45,8,50,42,248,22,163,20,23, +198,1,86,94,23,193,1,248,80,144,43,8,50,42,248,22,163,20,23,196,1, +28,248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,135,16, +23,194,2,248,22,138,16,23,194,1,28,248,22,134,16,23,194,2,90,144,42, +11,89,146,42,39,11,248,22,131,16,249,22,136,16,250,80,144,50,43,42,248, +22,151,16,2,56,11,11,248,22,151,16,2,57,86,95,23,195,1,23,194,1, +248,22,138,16,249,22,136,16,23,199,1,23,196,1,27,250,80,144,45,43,42, +248,22,151,16,2,56,23,197,1,10,28,23,193,2,248,22,138,16,23,194,1, +11,28,23,193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1,247,22, +152,16,27,248,22,163,20,23,199,1,28,248,22,88,23,194,2,9,27,248,80, +144,45,56,42,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,138,16, +249,22,136,16,23,198,1,247,22,152,16,248,80,144,47,8,51,42,248,22,163, +20,23,198,1,86,94,23,193,1,248,80,144,45,8,51,42,248,22,163,20,23, +196,1,86,94,23,193,1,27,248,22,163,20,23,197,1,28,248,22,88,23,194, 2,9,27,248,80,144,43,56,42,248,22,81,23,196,2,28,23,193,2,249,22, -80,248,22,137,16,249,22,135,16,23,198,1,247,22,151,16,248,80,144,45,8, -51,42,248,22,162,20,23,198,1,86,94,23,193,1,248,80,144,43,8,51,42, -248,22,162,20,23,196,1,27,248,22,150,16,2,58,28,248,22,134,16,23,194, -2,248,22,137,16,23,194,1,28,248,22,133,16,23,194,2,90,144,42,11,89, -146,42,39,11,248,22,130,16,249,22,135,16,250,80,144,49,43,42,248,22,150, -16,2,56,11,11,248,22,150,16,2,57,86,95,23,195,1,23,194,1,248,22, -137,16,249,22,135,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22, -150,16,2,56,23,197,1,10,28,23,193,2,248,22,137,16,23,194,1,11,28, -248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,134,16,23, -194,2,248,22,137,16,23,194,1,28,248,22,133,16,23,194,2,90,144,42,11, -89,146,42,39,11,248,22,130,16,249,22,135,16,250,80,144,50,43,42,248,22, -150,16,2,56,11,11,248,22,150,16,2,57,86,95,23,195,1,23,194,1,248, -22,137,16,249,22,135,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248, -22,150,16,2,56,23,197,1,10,28,23,193,2,248,22,137,16,23,194,1,11, -28,23,193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1,247,22,151, -16,27,248,22,162,20,23,199,1,28,248,22,88,23,194,2,9,27,27,248,22, -81,23,196,2,28,248,22,134,16,23,194,2,248,22,137,16,23,194,1,28,248, -22,133,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,130,16,249,22, -135,16,250,80,144,54,43,42,248,22,150,16,2,56,11,11,248,22,150,16,2, -57,86,95,23,195,1,23,194,1,248,22,137,16,249,22,135,16,23,199,1,23, -196,1,27,250,80,144,49,43,42,248,22,150,16,2,56,23,197,1,10,28,23, -193,2,248,22,137,16,23,194,1,11,28,23,193,2,249,22,80,248,22,137,16, -249,22,135,16,23,198,1,247,22,151,16,27,248,22,162,20,23,198,1,28,248, +80,248,22,138,16,249,22,136,16,23,198,1,247,22,152,16,248,80,144,45,8, +51,42,248,22,163,20,23,198,1,86,94,23,193,1,248,80,144,43,8,51,42, +248,22,163,20,23,196,1,27,248,22,151,16,2,58,28,248,22,135,16,23,194, +2,248,22,138,16,23,194,1,28,248,22,134,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,131,16,249,22,136,16,250,80,144,49,43,42,248,22,151, +16,2,56,11,11,248,22,151,16,2,57,86,95,23,195,1,23,194,1,248,22, +138,16,249,22,136,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22, +151,16,2,56,23,197,1,10,28,23,193,2,248,22,138,16,23,194,1,11,28, +248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,135,16,23, +194,2,248,22,138,16,23,194,1,28,248,22,134,16,23,194,2,90,144,42,11, +89,146,42,39,11,248,22,131,16,249,22,136,16,250,80,144,50,43,42,248,22, +151,16,2,56,11,11,248,22,151,16,2,57,86,95,23,195,1,23,194,1,248, +22,138,16,249,22,136,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248, +22,151,16,2,56,23,197,1,10,28,23,193,2,248,22,138,16,23,194,1,11, +28,23,193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1,247,22,152, +16,27,248,22,163,20,23,199,1,28,248,22,88,23,194,2,9,27,27,248,22, +81,23,196,2,28,248,22,135,16,23,194,2,248,22,138,16,23,194,1,28,248, +22,134,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,131,16,249,22, +136,16,250,80,144,54,43,42,248,22,151,16,2,56,11,11,248,22,151,16,2, +57,86,95,23,195,1,23,194,1,248,22,138,16,249,22,136,16,23,199,1,23, +196,1,27,250,80,144,49,43,42,248,22,151,16,2,56,23,197,1,10,28,23, +193,2,248,22,138,16,23,194,1,11,28,23,193,2,249,22,80,248,22,138,16, +249,22,136,16,23,198,1,247,22,152,16,27,248,22,163,20,23,198,1,28,248, 22,88,23,194,2,9,27,248,80,144,49,56,42,248,22,81,23,196,2,28,23, -193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1,247,22,151,16,248, -80,144,51,8,53,42,248,22,162,20,23,198,1,86,94,23,193,1,248,80,144, -49,8,53,42,248,22,162,20,23,196,1,86,94,23,193,1,27,248,22,162,20, +193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1,247,22,152,16,248, +80,144,51,8,53,42,248,22,163,20,23,198,1,86,94,23,193,1,248,80,144, +49,8,53,42,248,22,163,20,23,196,1,86,94,23,193,1,27,248,22,163,20, 23,196,1,28,248,22,88,23,194,2,9,27,248,80,144,47,56,42,248,22,81, -23,196,2,28,23,193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1, -247,22,151,16,248,80,144,49,8,53,42,248,22,162,20,23,198,1,86,94,23, -193,1,248,80,144,47,8,53,42,248,22,162,20,23,196,1,86,94,23,193,1, -27,248,22,162,20,23,197,1,28,248,22,88,23,194,2,9,27,27,248,22,81, -23,196,2,28,248,22,134,16,23,194,2,248,22,137,16,23,194,1,28,248,22, -133,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,130,16,249,22,135, -16,250,80,144,52,43,42,248,22,150,16,2,56,11,11,248,22,150,16,2,57, -86,95,23,195,1,23,194,1,248,22,137,16,249,22,135,16,23,199,1,23,196, -1,27,250,80,144,47,43,42,248,22,150,16,2,56,23,197,1,10,28,23,193, -2,248,22,137,16,23,194,1,11,28,23,193,2,249,22,80,248,22,137,16,249, -22,135,16,23,198,1,247,22,151,16,27,248,22,162,20,23,198,1,28,248,22, +23,196,2,28,23,193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1, +247,22,152,16,248,80,144,49,8,53,42,248,22,163,20,23,198,1,86,94,23, +193,1,248,80,144,47,8,53,42,248,22,163,20,23,196,1,86,94,23,193,1, +27,248,22,163,20,23,197,1,28,248,22,88,23,194,2,9,27,27,248,22,81, +23,196,2,28,248,22,135,16,23,194,2,248,22,138,16,23,194,1,28,248,22, +134,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,131,16,249,22,136, +16,250,80,144,52,43,42,248,22,151,16,2,56,11,11,248,22,151,16,2,57, +86,95,23,195,1,23,194,1,248,22,138,16,249,22,136,16,23,199,1,23,196, +1,27,250,80,144,47,43,42,248,22,151,16,2,56,23,197,1,10,28,23,193, +2,248,22,138,16,23,194,1,11,28,23,193,2,249,22,80,248,22,138,16,249, +22,136,16,23,198,1,247,22,152,16,27,248,22,163,20,23,198,1,28,248,22, 88,23,194,2,9,27,248,80,144,47,56,42,248,22,81,23,196,2,28,23,193, -2,249,22,80,248,22,137,16,249,22,135,16,23,198,1,247,22,151,16,248,80, -144,49,8,53,42,248,22,162,20,23,198,1,86,94,23,193,1,248,80,144,47, -8,53,42,248,22,162,20,23,196,1,86,94,23,193,1,27,248,22,162,20,23, +2,249,22,80,248,22,138,16,249,22,136,16,23,198,1,247,22,152,16,248,80, +144,49,8,53,42,248,22,163,20,23,198,1,86,94,23,193,1,248,80,144,47, +8,53,42,248,22,163,20,23,196,1,86,94,23,193,1,27,248,22,163,20,23, 196,1,28,248,22,88,23,194,2,9,27,248,80,144,45,56,42,248,22,81,23, -196,2,28,23,193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1,247, -22,151,16,248,80,144,47,8,53,42,248,22,162,20,23,198,1,86,94,23,193, -1,248,80,144,45,8,53,42,248,22,162,20,23,196,1,27,247,22,158,16,27, +196,2,28,23,193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1,247, +22,152,16,248,80,144,47,8,53,42,248,22,163,20,23,198,1,86,94,23,193, +1,248,80,144,45,8,53,42,248,22,163,20,23,196,1,27,247,22,159,16,27, 248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44,41,28,23,196, 2,27,249,22,175,8,247,22,174,8,2,75,28,192,249,22,165,8,194,7,63, 2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,76,27,28,23,200,1, -250,22,191,15,248,22,150,16,2,61,250,22,158,2,23,205,1,2,59,247,22, +250,22,128,16,248,22,151,16,2,61,250,22,158,2,23,205,1,2,59,247,22, 171,8,2,77,86,94,23,199,1,11,27,248,80,144,49,8,50,42,250,22,94, -9,248,22,90,248,22,150,16,2,55,9,28,193,249,22,80,195,194,192,27,247, -22,158,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44, +9,248,22,90,248,22,151,16,2,55,9,28,193,249,22,80,195,194,192,27,247, +22,159,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44, 41,28,23,196,2,27,249,22,175,8,247,22,174,8,2,75,28,192,249,22,165, 8,194,7,63,2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,76,27, -28,23,200,1,250,22,191,15,248,22,150,16,2,61,250,22,158,2,23,205,1, +28,23,200,1,250,22,128,16,248,22,151,16,2,61,250,22,158,2,23,205,1, 2,59,247,22,171,8,2,77,86,94,23,199,1,11,27,248,80,144,49,8,51, -42,250,22,94,23,207,1,248,22,90,248,22,150,16,2,55,9,28,193,249,22, -80,195,194,192,27,247,22,158,16,27,248,80,144,42,58,42,249,80,144,44,55, +42,250,22,94,23,207,1,248,22,90,248,22,151,16,2,55,9,28,193,249,22, +80,195,194,192,27,247,22,159,16,27,248,80,144,42,58,42,249,80,144,44,55, 40,40,80,144,44,8,52,42,249,80,144,43,44,41,28,23,196,2,27,249,22, 175,8,247,22,174,8,2,75,28,192,249,22,165,8,194,7,63,2,66,2,66, -250,80,144,46,8,23,42,23,198,2,2,76,27,28,23,200,1,250,22,191,15, -248,22,150,16,2,61,250,22,158,2,23,205,1,2,59,247,22,171,8,2,77, -86,94,23,199,1,11,27,27,250,22,94,23,207,1,248,22,90,248,22,150,16, +250,80,144,46,8,23,42,23,198,2,2,76,27,28,23,200,1,250,22,128,16, +248,22,151,16,2,61,250,22,158,2,23,205,1,2,59,247,22,171,8,2,77, +86,94,23,199,1,11,27,27,250,22,94,23,207,1,248,22,90,248,22,151,16, 2,55,23,208,1,28,248,22,88,23,194,2,9,27,27,248,22,81,23,196,2, -28,248,22,134,16,23,194,2,248,22,137,16,23,194,1,28,248,22,133,16,23, -194,2,90,144,42,11,89,146,42,39,11,248,22,130,16,249,22,135,16,250,80, -144,60,43,42,248,22,150,16,2,56,11,11,248,22,150,16,2,57,86,95,23, -195,1,23,194,1,248,22,137,16,249,22,135,16,23,199,1,23,196,1,27,250, -80,144,55,43,42,248,22,150,16,2,56,23,197,1,10,28,23,193,2,248,22, -137,16,23,194,1,11,28,23,193,2,249,22,80,248,22,137,16,249,22,135,16, -23,198,1,247,22,151,16,27,248,22,162,20,23,198,1,28,248,22,88,23,194, +28,248,22,135,16,23,194,2,248,22,138,16,23,194,1,28,248,22,134,16,23, +194,2,90,144,42,11,89,146,42,39,11,248,22,131,16,249,22,136,16,250,80, +144,60,43,42,248,22,151,16,2,56,11,11,248,22,151,16,2,57,86,95,23, +195,1,23,194,1,248,22,138,16,249,22,136,16,23,199,1,23,196,1,27,250, +80,144,55,43,42,248,22,151,16,2,56,23,197,1,10,28,23,193,2,248,22, +138,16,23,194,1,11,28,23,193,2,249,22,80,248,22,138,16,249,22,136,16, +23,198,1,247,22,152,16,27,248,22,163,20,23,198,1,28,248,22,88,23,194, 2,9,27,248,80,144,55,56,42,248,22,81,23,196,2,28,23,193,2,249,22, -80,248,22,137,16,249,22,135,16,23,198,1,247,22,151,16,248,80,144,57,8, -53,42,248,22,162,20,23,198,1,86,94,23,193,1,248,80,144,55,8,53,42, -248,22,162,20,23,196,1,86,94,23,193,1,27,248,22,162,20,23,196,1,28, +80,248,22,138,16,249,22,136,16,23,198,1,247,22,152,16,248,80,144,57,8, +53,42,248,22,163,20,23,198,1,86,94,23,193,1,248,80,144,55,8,53,42, +248,22,163,20,23,196,1,86,94,23,193,1,27,248,22,163,20,23,196,1,28, 248,22,88,23,194,2,9,27,248,80,144,53,56,42,248,22,81,23,196,2,28, -23,193,2,249,22,80,248,22,137,16,249,22,135,16,23,198,1,247,22,151,16, -248,80,144,55,8,53,42,248,22,162,20,23,198,1,86,94,23,193,1,248,80, -144,53,8,53,42,248,22,162,20,23,196,1,28,193,249,22,80,195,194,192,27, +23,193,2,249,22,80,248,22,138,16,249,22,136,16,23,198,1,247,22,152,16, +248,80,144,55,8,53,42,248,22,163,20,23,198,1,86,94,23,193,1,248,80, +144,53,8,53,42,248,22,163,20,23,196,1,28,193,249,22,80,195,194,192,27, 20,13,144,80,144,40,46,40,26,9,80,144,49,47,40,249,22,31,11,80,144, -51,46,40,22,147,15,10,22,154,15,10,22,155,15,10,22,156,15,10,248,22, +51,46,40,22,148,15,10,22,155,15,10,22,156,15,10,22,157,15,10,248,22, 148,6,23,196,2,28,248,22,148,7,23,194,2,12,86,94,248,22,177,9,23, 194,1,27,20,13,144,80,144,41,46,40,26,9,80,144,50,47,40,249,22,31, -11,80,144,52,46,40,22,147,15,10,22,154,15,10,22,155,15,10,22,156,15, +11,80,144,52,46,40,22,148,15,10,22,155,15,10,22,156,15,10,22,157,15, 10,248,22,148,6,23,197,2,28,248,22,148,7,23,194,2,12,86,94,248,22, 177,9,23,194,1,27,20,13,144,80,144,42,46,40,26,9,80,144,51,47,40, -249,22,31,11,80,144,53,46,40,22,147,15,10,22,154,15,10,22,155,15,10, -22,156,15,10,248,22,148,6,23,198,2,28,248,22,148,7,23,194,2,12,86, +249,22,31,11,80,144,53,46,40,22,148,15,10,22,155,15,10,22,156,15,10, +22,157,15,10,248,22,148,6,23,198,2,28,248,22,148,7,23,194,2,12,86, 94,248,22,177,9,23,194,1,248,80,144,43,8,54,42,197,86,94,249,22,139, 7,247,22,172,5,23,196,2,248,22,163,6,249,22,136,4,39,249,22,184,3, 28,23,198,2,23,198,1,86,94,23,198,1,39,23,199,1,27,248,22,189,5, 28,23,198,2,86,95,23,197,1,23,196,1,23,198,1,86,94,23,198,1,27, -250,80,144,45,43,42,248,22,150,16,2,56,11,11,27,248,22,139,4,23,199, +250,80,144,45,43,42,248,22,151,16,2,56,11,11,27,248,22,139,4,23,199, 1,27,28,23,194,2,23,194,1,86,94,23,194,1,39,27,248,22,139,4,23, 202,1,249,22,140,6,23,198,1,20,20,95,88,148,8,36,39,51,11,9,224, 3,2,33,190,2,23,195,1,23,196,1,248,80,144,41,8,54,42,193,144,39, @@ -973,7 +973,7 @@ 40,20,15,16,2,88,148,8,36,41,61,41,2,6,223,0,33,85,80,144,39, 42,40,20,15,16,2,20,26,96,2,7,88,148,8,36,42,8,24,8,32,9, 223,0,33,92,88,148,8,36,41,50,55,9,223,0,33,93,88,148,8,36,40, -49,55,9,223,0,33,94,80,144,39,43,40,20,15,16,2,27,248,22,162,16, +49,55,9,223,0,33,94,80,144,39,43,40,20,15,16,2,27,248,22,163,16, 248,22,167,8,27,28,249,22,169,9,247,22,180,8,2,43,6,1,1,59,6, 1,1,58,250,22,137,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40, 46,42,41,23,196,2,23,196,1,88,148,8,36,41,51,11,2,8,223,0,33, @@ -1046,7 +1046,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 19759); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,56,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,57,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8,0, 23,0,48,0,65,0,83,0,105,0,128,0,149,0,171,0,180,0,189,0,196, 0,205,0,212,0,0,0,247,1,0,0,3,1,5,105,110,115,112,48,76,35, @@ -1066,8 +1066,8 @@ 16,2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2,9,2,5,2, 3,16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2,5,2,3,44, 44,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0, -16,0,39,39,16,3,20,15,16,6,253,22,188,10,2,4,11,41,39,11,248, -22,90,249,22,80,22,174,10,88,148,39,40,48,47,9,223,9,33,10,80,144, +16,0,39,39,16,3,20,15,16,6,253,22,189,10,2,4,11,41,39,11,248, +22,90,249,22,80,22,175,10,88,148,39,40,48,47,9,223,9,33,10,80,144, 39,39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42,40,80,144,39, 43,40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223,0,33,11,88, 148,39,40,48,47,9,223,0,33,12,80,144,39,44,40,20,15,16,2,20,28, @@ -1077,7 +1077,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 577); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,56,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,57,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,1,0,0,8,0, 15,0,26,0,53,0,59,0,73,0,86,0,112,0,129,0,151,0,159,0,171, 0,186,0,202,0,220,0,241,0,253,0,13,1,36,1,60,1,72,1,103,1, @@ -1112,64 +1112,64 @@ 12,12,109,111,100,117,108,101,45,112,97,116,104,63,68,115,117,98,109,111,100, 6,2,2,46,46,6,1,1,46,66,102,105,108,101,68,112,108,97,110,101,116, 6,8,8,109,97,105,110,46,114,107,116,6,4,4,46,114,107,116,69,105,103, -110,111,114,101,100,27,252,22,191,15,28,249,22,169,9,23,201,2,2,27,86, -94,23,199,1,23,200,1,28,248,22,132,16,23,200,2,249,22,191,15,23,202, +110,111,114,101,100,27,252,22,128,16,28,249,22,169,9,23,201,2,2,27,86, +94,23,199,1,23,200,1,28,248,22,133,16,23,200,2,249,22,128,16,23,202, 1,23,201,1,249,80,144,50,45,42,23,202,1,23,201,1,23,203,1,2,28, 247,22,181,8,249,80,144,50,46,42,23,203,1,80,144,50,39,41,27,250,22, -145,16,196,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,80, +146,16,196,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,80, 195,194,11,249,22,5,20,20,96,88,148,8,36,40,57,8,129,3,9,226,5, -4,3,6,33,42,23,199,1,23,196,1,23,197,1,23,195,1,27,252,22,191, -15,28,249,22,169,9,23,201,2,2,27,86,94,23,199,1,23,200,1,28,248, -22,132,16,23,200,2,249,22,191,15,23,202,1,23,201,1,249,80,144,50,45, +4,3,6,33,42,23,199,1,23,196,1,23,197,1,23,195,1,27,252,22,128, +16,28,249,22,169,9,23,201,2,2,27,86,94,23,199,1,23,200,1,28,248, +22,133,16,23,200,2,249,22,128,16,23,202,1,23,201,1,249,80,144,50,45, 42,23,202,1,23,201,1,23,203,1,2,28,247,22,181,8,249,80,144,50,46, -42,23,203,1,80,144,50,39,41,27,250,22,145,16,196,11,32,0,88,148,8, +42,23,203,1,80,144,50,39,41,27,250,22,146,16,196,11,32,0,88,148,8, 36,39,44,11,9,222,11,28,192,249,22,80,195,194,11,249,22,5,20,20,96, 88,148,8,36,40,57,8,129,3,9,226,5,4,3,6,33,44,23,199,1,23, -196,1,23,197,1,23,195,1,27,250,22,191,15,28,249,22,169,9,23,199,2, -2,27,86,94,23,197,1,23,198,1,28,248,22,132,16,23,198,2,249,22,191, -15,23,200,1,23,199,1,249,80,144,48,45,42,23,200,1,23,199,1,23,201, -1,249,80,144,48,46,42,23,201,1,2,29,27,250,22,145,16,196,11,32,0, +196,1,23,197,1,23,195,1,27,250,22,128,16,28,249,22,169,9,23,199,2, +2,27,86,94,23,197,1,23,198,1,28,248,22,133,16,23,198,2,249,22,128, +16,23,200,1,23,199,1,249,80,144,48,45,42,23,200,1,23,199,1,23,201, +1,249,80,144,48,46,42,23,201,1,2,29,27,250,22,146,16,196,11,32,0, 88,148,8,36,39,44,11,9,222,11,28,192,249,22,80,195,194,11,249,22,5, 20,20,96,88,148,8,36,40,55,8,128,3,9,226,5,4,3,6,33,46,23, -199,1,23,196,1,23,197,1,23,195,1,27,250,22,191,15,28,249,22,169,9, -23,199,2,2,27,86,94,23,197,1,23,198,1,28,248,22,132,16,23,198,2, -249,22,191,15,23,200,1,23,199,1,249,80,144,48,45,42,23,200,1,23,199, -1,23,201,1,249,80,144,48,46,42,23,201,1,2,29,27,250,22,145,16,196, +199,1,23,196,1,23,197,1,23,195,1,27,250,22,128,16,28,249,22,169,9, +23,199,2,2,27,86,94,23,197,1,23,198,1,28,248,22,133,16,23,198,2, +249,22,128,16,23,200,1,23,199,1,249,80,144,48,45,42,23,200,1,23,199, +1,23,201,1,249,80,144,48,46,42,23,201,1,2,29,27,250,22,146,16,196, 11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,80,195,194,11, 249,22,5,20,20,96,88,148,8,36,40,55,8,128,3,9,226,5,4,3,6, 33,48,23,199,1,23,196,1,23,197,1,23,195,1,86,95,28,248,80,144,40, -43,42,23,195,2,12,250,22,180,11,2,25,6,12,12,112,97,116,104,45,115, +43,42,23,195,2,12,250,22,181,11,2,25,6,12,12,112,97,116,104,45,115, 116,114,105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23,196,2, 10,28,248,22,89,23,196,2,28,249,22,130,4,248,22,93,23,198,2,40,28, -28,248,22,64,248,22,81,23,197,2,10,248,22,167,9,248,22,161,20,23,197, -2,249,22,4,22,64,248,22,162,20,23,198,2,11,11,11,10,12,250,22,180, +28,248,22,64,248,22,81,23,197,2,10,248,22,167,9,248,22,162,20,23,197, +2,249,22,4,22,64,248,22,163,20,23,198,2,11,11,11,10,12,250,22,181, 11,2,25,6,71,71,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108, 63,32,40,99,111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115,121, 109,98,111,108,63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105,115, 116,111,102,32,115,121,109,98,111,108,63,41,41,41,23,197,2,27,28,23,196, 2,247,22,191,4,11,27,28,23,194,2,250,22,158,2,80,143,44,44,248,22, -191,16,247,22,143,14,11,11,27,28,23,194,2,250,22,158,2,248,22,82,23, +128,17,247,22,144,14,11,11,27,28,23,194,2,250,22,158,2,248,22,82,23, 198,2,23,198,2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23,194, 1,20,13,144,80,144,42,41,40,250,80,144,45,42,40,249,22,31,11,80,144, 47,41,40,22,128,5,248,22,102,23,197,2,27,248,22,111,23,195,2,20,13, 144,80,144,43,41,40,250,80,144,46,42,40,249,22,31,11,80,144,48,41,40, -22,177,5,28,248,22,173,15,23,197,2,23,196,1,86,94,23,196,1,247,22, -151,16,249,247,22,175,5,248,22,161,20,23,197,1,23,201,1,86,94,23,193, -1,27,28,248,22,134,16,23,199,2,23,198,2,27,247,22,177,5,28,192,249, -22,135,16,23,201,2,194,23,199,2,90,144,42,11,89,146,42,39,11,248,22, -130,16,23,202,1,86,94,23,195,1,90,144,41,11,89,146,41,39,11,28,23, -204,2,27,248,22,178,15,23,198,2,19,248,22,147,8,194,28,28,249,22,132, +22,177,5,28,248,22,174,15,23,197,2,23,196,1,86,94,23,196,1,247,22, +152,16,249,247,22,175,5,248,22,162,20,23,197,1,23,201,1,86,94,23,193, +1,27,28,248,22,135,16,23,199,2,23,198,2,27,247,22,177,5,28,192,249, +22,136,16,23,201,2,194,23,199,2,90,144,42,11,89,146,42,39,11,248,22, +131,16,23,202,1,86,94,23,195,1,90,144,41,11,89,146,41,39,11,28,23, +204,2,27,248,22,179,15,23,198,2,19,248,22,147,8,194,28,28,249,22,132, 4,23,195,4,43,249,22,150,8,2,26,249,22,153,8,197,249,22,184,3,23, -199,4,43,11,249,22,7,23,200,2,248,22,182,15,249,22,154,8,250,22,153, +199,4,43,11,249,22,7,23,200,2,248,22,183,15,249,22,154,8,250,22,153, 8,201,39,249,22,184,3,23,203,4,43,5,3,46,115,115,249,22,7,23,200, 2,11,2,249,22,7,23,198,2,11,27,28,249,22,169,9,23,196,2,23,199, -2,23,199,2,249,22,191,15,23,198,2,23,196,2,27,28,23,196,2,28,249, -22,169,9,23,198,2,23,200,1,23,200,1,86,94,23,200,1,249,22,191,15, +2,23,199,2,249,22,128,16,23,198,2,23,196,2,27,28,23,196,2,28,249, +22,169,9,23,198,2,23,200,1,23,200,1,86,94,23,200,1,249,22,128,16, 23,199,2,23,198,2,86,94,23,198,1,11,27,28,249,22,169,9,23,200,2, 70,114,101,108,97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27,247, -22,156,16,27,247,22,157,16,27,250,22,145,16,23,201,2,11,32,0,88,148, +22,157,16,27,247,22,158,16,27,250,22,146,16,23,201,2,11,32,0,88,148, 8,36,39,44,11,9,222,11,27,28,23,194,2,249,22,80,23,201,2,23,196, -1,86,94,23,194,1,11,27,28,23,199,2,28,23,194,2,11,27,250,22,145, +1,86,94,23,194,1,11,27,28,23,199,2,28,23,194,2,11,27,250,22,146, 16,23,203,2,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22, 80,23,202,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2,27,28,23, 196,2,23,196,2,248,22,167,9,23,196,2,27,28,23,205,2,28,23,196,2, @@ -1181,8 +1181,8 @@ 201,1,23,200,1,23,197,1,23,196,1,23,195,1,23,194,1,20,13,144,80, 144,60,41,40,250,80,144,8,24,42,40,249,22,31,11,80,144,8,26,41,40, 22,128,5,11,20,13,144,80,144,60,41,40,250,80,144,8,24,42,40,249,22, -31,11,80,144,8,26,41,40,22,177,5,28,248,22,173,15,23,206,2,23,205, -1,86,94,23,205,1,247,22,151,16,249,247,22,161,16,248,22,81,23,196,1, +31,11,80,144,8,26,41,40,22,177,5,28,248,22,174,15,23,206,2,23,205, +1,86,94,23,205,1,247,22,152,16,249,247,22,162,16,248,22,81,23,196,1, 23,218,1,86,94,23,193,1,27,28,23,195,2,27,249,22,5,88,148,39,40, 51,8,129,3,9,226,25,17,13,12,33,45,23,204,2,27,28,23,200,2,11, 193,28,192,192,28,193,28,199,28,249,22,132,4,248,22,82,196,248,22,82,202, @@ -1190,8 +1190,8 @@ 206,1,23,205,1,23,202,1,23,201,1,23,197,1,23,196,1,23,195,1,20, 13,144,80,144,61,41,40,250,80,144,8,25,42,40,249,22,31,11,80,144,8, 27,41,40,22,128,5,23,207,1,20,13,144,80,144,61,41,40,250,80,144,8, -25,42,40,249,22,31,11,80,144,8,27,41,40,22,177,5,28,248,22,173,15, -23,207,2,23,206,1,86,94,23,206,1,247,22,151,16,249,247,22,161,16,248, +25,42,40,249,22,31,11,80,144,8,27,41,40,22,177,5,28,248,22,174,15, +23,207,2,23,206,1,86,94,23,206,1,247,22,152,16,249,247,22,162,16,248, 22,81,23,196,1,23,219,1,86,94,23,193,1,27,28,23,197,2,27,249,22, 5,20,20,94,88,148,39,40,51,8,128,3,9,226,26,17,14,13,33,47,23, 210,1,23,205,2,27,28,23,200,2,11,193,28,192,192,28,193,28,23,200,2, @@ -1202,8 +1202,8 @@ 23,199,1,11,23,211,2,12,20,13,144,80,144,8,23,41,40,250,80,144,8, 26,42,40,249,22,31,11,80,144,8,28,41,40,22,128,5,11,20,13,144,80, 144,8,23,41,40,250,80,144,8,26,42,40,249,22,31,11,80,144,8,28,41, -40,22,177,5,28,248,22,173,15,23,208,2,23,207,1,86,94,23,207,1,247, -22,151,16,249,247,22,175,5,248,22,161,20,23,196,1,23,220,1,86,94,23, +40,22,177,5,28,248,22,174,15,23,208,2,23,207,1,86,94,23,207,1,247, +22,152,16,249,247,22,175,5,248,22,162,20,23,196,1,23,220,1,86,94,23, 193,1,27,28,23,197,1,27,249,22,5,20,20,95,88,148,39,40,51,8,128, 3,9,226,27,19,15,14,33,49,23,207,1,23,212,1,23,206,1,27,28,23, 201,2,11,193,28,192,192,28,193,28,200,28,249,22,132,4,248,22,82,196,248, @@ -1213,16 +1213,16 @@ 23,213,2,23,212,2,12,20,13,144,80,144,8,24,41,40,250,80,144,8,27, 42,40,249,22,31,11,80,144,8,29,41,40,22,128,5,23,209,1,20,13,144, 80,144,8,24,41,40,250,80,144,8,27,42,40,249,22,31,11,80,144,8,29, -41,40,22,177,5,28,248,22,173,15,23,209,2,23,208,1,86,94,23,208,1, -247,22,151,16,249,247,22,175,5,248,22,161,20,23,196,1,23,221,1,86,94, -23,193,1,28,28,248,22,78,23,220,2,248,22,161,20,23,220,2,10,27,28, +41,40,22,177,5,28,248,22,174,15,23,209,2,23,208,1,86,94,23,208,1, +247,22,152,16,249,247,22,175,5,248,22,162,20,23,196,1,23,221,1,86,94, +23,193,1,28,28,248,22,78,23,220,2,248,22,162,20,23,220,2,10,27,28, 23,199,2,86,94,23,207,1,23,208,1,86,94,23,208,1,23,207,1,28,28, -248,22,78,23,221,2,248,22,167,9,248,22,185,15,23,195,2,11,12,20,13, +248,22,78,23,221,2,248,22,167,9,248,22,186,15,23,195,2,11,12,20,13, 144,80,144,8,25,41,40,250,80,144,8,28,42,40,249,22,31,11,80,144,8, 30,41,40,22,128,5,28,23,223,2,28,23,202,1,11,23,196,2,86,94,23, 202,1,11,20,13,144,80,144,8,25,41,40,250,80,144,8,28,42,40,249,22, -31,11,80,144,8,30,41,40,22,177,5,28,248,22,173,15,23,210,2,23,209, -1,86,94,23,209,1,247,22,151,16,249,247,22,175,5,23,195,1,23,222,1, +31,11,80,144,8,30,41,40,22,177,5,28,248,22,174,15,23,210,2,23,209, +1,86,94,23,209,1,247,22,152,16,249,247,22,175,5,23,195,1,23,222,1, 12,28,23,194,2,250,22,156,2,248,22,82,23,198,1,23,196,1,250,22,90, 23,201,1,23,202,1,23,203,1,12,27,249,22,189,8,80,144,42,50,41,249, 22,191,3,248,22,187,3,248,22,173,2,200,8,128,8,27,28,193,248,22,176, @@ -1286,22 +1286,22 @@ 23,200,2,39,23,198,2,248,2,56,249,22,175,7,23,200,1,248,22,181,3, 23,199,1,250,2,54,23,197,4,197,248,22,181,3,196,32,70,88,148,39,40, 58,11,2,31,222,33,71,28,248,22,88,248,22,82,23,195,2,249,22,7,9, -248,22,161,20,23,196,1,90,144,41,11,89,146,41,39,11,27,248,22,162,20, -23,197,2,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248,22,161,20, -195,90,144,41,11,89,146,41,39,11,27,248,22,162,20,196,28,248,22,88,248, -22,82,23,195,2,249,22,7,9,248,22,161,20,195,90,144,41,11,89,146,41, -39,11,248,2,70,248,22,162,20,196,249,22,7,249,22,80,248,22,161,20,199, -196,195,249,22,7,249,22,80,248,22,161,20,199,196,195,249,22,7,249,22,80, -248,22,161,20,23,200,1,23,197,1,23,196,1,27,19,248,22,156,7,23,196, +248,22,162,20,23,196,1,90,144,41,11,89,146,41,39,11,27,248,22,163,20, +23,197,2,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248,22,162,20, +195,90,144,41,11,89,146,41,39,11,27,248,22,163,20,196,28,248,22,88,248, +22,82,23,195,2,249,22,7,9,248,22,162,20,195,90,144,41,11,89,146,41, +39,11,248,2,70,248,22,163,20,196,249,22,7,249,22,80,248,22,162,20,199, +196,195,249,22,7,249,22,80,248,22,162,20,199,196,195,249,22,7,249,22,80, +248,22,162,20,23,200,1,23,197,1,23,196,1,27,19,248,22,156,7,23,196, 2,250,2,54,23,196,4,23,198,1,39,2,28,23,195,1,192,28,248,22,88, -248,22,82,23,195,2,249,22,7,9,248,22,161,20,23,196,1,27,248,22,162, +248,22,82,23,195,2,249,22,7,9,248,22,162,20,23,196,1,27,248,22,163, 20,23,195,2,90,144,41,11,89,146,41,39,11,28,248,22,88,248,22,82,23, -197,2,249,22,7,9,248,22,161,20,23,198,1,27,248,22,162,20,23,197,2, +197,2,249,22,7,9,248,22,162,20,23,198,1,27,248,22,163,20,23,197,2, 90,144,41,11,89,146,41,39,11,28,248,22,88,248,22,82,23,197,2,249,22, -7,9,248,22,161,20,197,90,144,41,11,89,146,41,39,11,248,2,70,248,22, -162,20,198,249,22,7,249,22,80,248,22,161,20,201,196,195,249,22,7,249,22, -80,248,22,161,20,23,203,1,196,195,249,22,7,249,22,80,248,22,161,20,23, -201,1,23,197,1,23,196,1,248,22,142,12,252,22,161,10,248,22,163,4,23, +7,9,248,22,162,20,197,90,144,41,11,89,146,41,39,11,248,2,70,248,22, +163,20,198,249,22,7,249,22,80,248,22,162,20,201,196,195,249,22,7,249,22, +80,248,22,162,20,23,203,1,196,195,249,22,7,249,22,80,248,22,162,20,23, +201,1,23,197,1,23,196,1,248,22,143,12,252,22,162,10,248,22,163,4,23, 200,2,248,22,159,4,23,200,2,248,22,160,4,23,200,2,248,22,161,4,23, 200,2,248,22,162,4,23,200,1,28,24,194,2,12,20,13,144,80,144,39,41, 40,80,143,39,59,89,146,40,40,10,249,22,130,5,21,94,2,32,6,19,19, @@ -1309,29 +1309,29 @@ 112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101, 115,111,108,118,101,114,12,27,28,23,195,2,28,249,22,169,9,23,197,2,80, 143,42,55,86,94,23,195,1,80,143,40,56,27,248,22,153,5,23,197,2,27, -28,248,22,78,23,195,2,248,22,161,20,23,195,1,23,194,1,28,248,22,173, -15,23,194,2,90,144,42,11,89,146,42,39,11,248,22,130,16,23,197,1,86, +28,248,22,78,23,195,2,248,22,162,20,23,195,1,23,194,1,28,248,22,174, +15,23,194,2,90,144,42,11,89,146,42,39,11,248,22,131,16,23,197,1,86, 95,20,18,144,11,80,143,45,55,199,20,18,144,11,80,143,45,56,192,192,11, 11,28,23,193,2,192,86,94,23,193,1,27,247,22,177,5,28,23,193,2,192, -86,94,23,193,1,247,22,151,16,90,144,42,11,89,146,42,39,11,248,22,130, -16,23,198,2,86,95,23,195,1,23,193,1,28,249,22,166,16,0,11,35,114, -120,34,91,46,93,115,115,36,34,248,22,178,15,23,197,1,249,80,144,44,61, +86,94,23,193,1,247,22,152,16,90,144,42,11,89,146,42,39,11,248,22,131, +16,23,198,2,86,95,23,195,1,23,193,1,28,249,22,167,16,0,11,35,114, +120,34,91,46,93,115,115,36,34,248,22,179,15,23,197,1,249,80,144,44,61, 42,23,199,1,2,26,196,249,80,144,41,57,42,195,10,249,22,12,23,196,1, -80,144,41,54,41,86,96,28,248,22,151,5,23,196,2,12,250,22,180,11,2, +80,144,41,54,41,86,96,28,248,22,151,5,23,196,2,12,250,22,181,11,2, 22,6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112, -97,116,104,63,23,198,2,28,28,23,196,2,248,22,144,14,23,197,2,10,12, -250,22,180,11,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109, +97,116,104,63,23,198,2,28,28,23,196,2,248,22,145,14,23,197,2,10,12, +250,22,181,11,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109, 101,115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23,196, -2,86,94,23,193,1,12,27,250,22,158,2,80,144,44,44,41,248,22,191,16, -247,22,143,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22, +2,86,94,23,193,1,12,27,250,22,158,2,80,144,44,44,41,248,22,128,17, +247,22,144,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22, 80,247,22,138,2,247,22,138,2,86,94,250,22,156,2,80,144,46,44,41,248, -22,191,16,247,22,143,14,195,192,86,94,250,22,156,2,248,22,81,23,197,2, +22,128,17,247,22,144,14,195,192,86,94,250,22,156,2,248,22,81,23,197,2, 23,200,2,70,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22,78, 248,22,153,5,23,200,2,248,22,152,5,248,22,81,248,22,153,5,23,201,1, -23,198,1,27,250,22,158,2,80,144,47,44,41,248,22,191,16,23,204,1,11, +23,198,1,27,250,22,158,2,80,144,47,44,41,248,22,128,17,23,204,1,11, 28,23,193,2,27,250,22,158,2,248,22,82,23,198,1,23,198,2,11,28,23, -193,2,250,22,156,2,248,22,162,20,23,200,1,23,198,1,23,196,1,12,12, -12,86,94,251,22,137,12,247,22,141,12,67,101,114,114,111,114,6,69,69,100, +193,2,250,22,156,2,248,22,163,20,23,200,1,23,198,1,23,196,1,12,12, +12,86,94,251,22,138,12,247,22,142,12,67,101,114,114,111,114,6,69,69,100, 101,102,97,117,108,116,32,109,111,100,117,108,101,32,110,97,109,101,32,114,101, 115,111,108,118,101,114,32,99,97,108,108,101,100,32,119,105,116,104,32,116,104, 114,101,101,32,97,114,103,117,109,101,110,116,115,32,40,100,101,112,114,101,99, @@ -1340,20 +1340,20 @@ 97,116,104,222,33,84,32,82,88,148,39,43,57,11,2,31,222,33,83,28,248, 22,88,23,197,2,28,248,22,88,195,192,249,22,80,194,248,22,95,197,28,249, 22,171,9,248,22,81,23,199,2,2,35,28,248,22,88,23,196,2,86,95,23, -196,1,23,195,1,250,22,176,11,2,22,6,37,37,116,111,111,32,109,97,110, +196,1,23,195,1,250,22,177,11,2,22,6,37,37,116,111,111,32,109,97,110, 121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111,100,117,108,101,32, 112,97,116,104,58,32,126,46,115,250,22,91,2,34,28,249,22,171,9,23,201, -2,2,36,23,199,1,28,248,22,173,15,23,200,2,23,199,1,249,22,90,28, +2,2,36,23,199,1,28,248,22,174,15,23,200,2,23,199,1,249,22,90,28, 248,22,64,23,202,2,2,5,2,37,23,201,1,23,200,1,251,2,82,196,197, -248,22,82,199,248,22,162,20,200,251,2,82,196,197,249,22,80,248,22,161,20, -202,200,248,22,162,20,200,251,2,82,196,197,9,197,27,250,22,176,7,27,28, -23,199,2,28,247,22,129,12,248,80,144,47,58,42,23,200,2,11,11,28,192, +248,22,82,199,248,22,163,20,200,251,2,82,196,197,249,22,80,248,22,162,20, +202,200,248,22,163,20,200,251,2,82,196,197,9,197,27,250,22,176,7,27,28, +23,199,2,28,247,22,130,12,248,80,144,47,58,42,23,200,2,11,11,28,192, 192,6,29,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110, -97,109,101,45,114,101,115,111,108,118,101,114,6,2,2,58,32,250,22,177,16, +97,109,101,45,114,101,115,111,108,118,101,114,6,2,2,58,32,250,22,178,16, 0,7,35,114,120,34,92,110,34,23,203,1,249,22,137,8,6,23,23,10,32, 32,102,111,114,32,109,111,100,117,108,101,32,112,97,116,104,58,32,126,115,10, -23,202,2,248,22,172,13,28,23,196,2,251,22,180,12,23,198,1,247,22,27, -248,22,90,23,201,1,23,199,1,86,94,23,196,1,250,22,143,13,23,197,1, +23,202,2,248,22,173,13,28,23,196,2,251,22,181,12,23,198,1,247,22,27, +248,22,90,23,201,1,23,199,1,86,94,23,196,1,250,22,144,13,23,197,1, 247,22,27,23,198,1,32,86,88,148,8,36,40,53,11,69,115,115,45,62,114, 107,116,222,33,87,19,248,22,156,7,194,28,249,22,132,4,23,195,4,42,28, 249,22,169,9,7,46,249,22,157,7,197,249,22,184,3,23,199,4,42,28,28, @@ -1363,9 +1363,9 @@ 28,249,22,159,7,194,2,36,2,27,28,249,22,159,7,194,2,35,64,117,112, 192,0,8,35,114,120,34,91,46,93,34,32,90,88,148,8,36,40,50,11,2, 31,222,33,91,28,248,22,88,23,194,2,9,250,22,91,6,4,4,10,32,32, -32,248,22,177,15,248,22,103,23,198,2,248,2,90,248,22,162,20,23,198,1, +32,248,22,178,15,248,22,103,23,198,2,248,2,90,248,22,163,20,23,198,1, 28,249,22,171,9,248,22,82,23,200,2,23,197,1,28,249,22,169,9,248,22, -161,20,23,200,1,23,196,1,251,22,176,11,2,22,6,41,41,99,121,99,108, +162,20,23,200,1,23,196,1,251,22,177,11,2,22,6,41,41,99,121,99,108, 101,32,105,110,32,108,111,97,100,105,110,103,10,32,32,97,116,32,112,97,116, 104,58,32,126,97,10,32,32,112,97,116,104,115,58,126,97,23,200,1,249,22, 1,22,176,7,248,2,90,248,22,95,23,201,1,12,12,247,23,193,1,250,22, @@ -1374,58 +1374,58 @@ 249,22,31,11,80,144,56,41,40,22,191,4,23,201,2,22,129,5,248,28,23, 208,2,20,20,94,88,148,8,36,40,49,11,9,223,15,33,94,23,208,1,86, 94,23,208,1,22,7,28,248,22,64,23,207,2,23,206,1,28,28,248,22,78, -23,207,2,249,22,169,9,248,22,161,20,23,209,2,2,32,11,23,206,1,86, +23,207,2,249,22,169,9,248,22,162,20,23,209,2,2,32,11,23,206,1,86, 94,23,206,1,28,248,22,151,5,23,203,2,27,248,22,153,5,23,204,2,28, 248,22,64,193,249,22,90,2,5,194,192,23,202,2,249,247,22,176,5,23,201, -1,27,248,22,68,248,22,177,15,23,202,1,28,23,204,2,28,250,22,158,2, -248,22,161,20,23,202,1,23,202,1,11,249,22,80,11,205,249,22,80,194,205, +1,27,248,22,68,248,22,178,15,23,202,1,28,23,204,2,28,250,22,158,2, +248,22,162,20,23,202,1,23,202,1,11,249,22,80,11,205,249,22,80,194,205, 192,86,96,28,248,22,161,5,23,196,2,12,28,248,22,155,4,23,198,2,250, -22,178,11,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116, -104,23,200,2,250,22,180,11,2,22,2,33,23,198,2,28,28,23,196,2,248, -22,151,5,23,197,2,10,12,250,22,180,11,2,22,6,31,31,40,111,114,47, +22,179,11,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116, +104,23,200,2,250,22,181,11,2,22,2,33,23,198,2,28,28,23,196,2,248, +22,151,5,23,197,2,10,12,250,22,181,11,2,22,6,31,31,40,111,114,47, 99,32,35,102,32,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, 112,97,116,104,63,41,23,199,2,28,28,23,197,2,248,22,155,4,23,198,2, -10,12,250,22,180,11,2,22,6,17,17,40,111,114,47,99,32,35,102,32,115, +10,12,250,22,181,11,2,22,6,17,17,40,111,114,47,99,32,35,102,32,115, 121,110,116,97,120,63,41,23,200,2,28,28,248,22,78,23,196,2,249,22,169, -9,248,22,161,20,23,198,2,2,5,11,86,97,23,198,1,23,197,1,23,196, +9,248,22,162,20,23,198,2,2,5,11,86,97,23,198,1,23,197,1,23,196, 1,23,193,1,248,22,152,5,248,22,102,23,197,1,28,28,248,22,78,23,196, -2,28,249,22,169,9,248,22,161,20,23,198,2,2,34,28,248,22,78,248,22, +2,28,249,22,169,9,248,22,162,20,23,198,2,2,34,28,248,22,78,248,22, 102,23,197,2,249,22,169,9,248,22,106,23,198,2,2,5,11,11,11,86,97, 23,198,1,23,197,1,23,196,1,23,193,1,248,22,152,5,249,2,81,248,22, 119,23,199,2,248,22,104,23,199,1,28,28,248,22,78,23,196,2,28,249,22, -169,9,248,22,161,20,23,198,2,2,34,28,28,249,22,171,9,248,22,102,23, +169,9,248,22,162,20,23,198,2,2,34,28,28,249,22,171,9,248,22,102,23, 198,2,2,36,10,249,22,171,9,248,22,102,23,198,2,2,35,28,23,196,2, 27,248,22,153,5,23,198,2,28,248,22,64,193,10,28,248,22,78,193,248,22, -64,248,22,161,20,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193, +64,248,22,162,20,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23,193, 1,27,248,22,153,5,23,198,1,248,22,152,5,249,2,81,28,248,22,78,23, -197,2,248,22,161,20,23,197,2,23,196,2,27,28,249,22,171,9,248,22,102, -23,203,2,2,35,248,22,162,20,200,248,22,104,200,28,248,22,78,23,198,2, -249,22,94,248,22,162,20,199,194,192,28,28,248,22,78,23,196,2,249,22,169, -9,248,22,161,20,23,198,2,2,38,11,86,94,248,80,144,41,8,28,42,23, +197,2,248,22,162,20,23,197,2,23,196,2,27,28,249,22,171,9,248,22,102, +23,203,2,2,35,248,22,163,20,200,248,22,104,200,28,248,22,78,23,198,2, +249,22,94,248,22,163,20,199,194,192,28,28,248,22,78,23,196,2,249,22,169, +9,248,22,162,20,23,198,2,2,38,11,86,94,248,80,144,41,8,28,42,23, 194,2,253,24,199,1,23,201,1,23,202,1,23,203,1,23,204,1,11,80,143, -46,59,28,28,248,22,78,23,196,2,28,249,22,169,9,248,22,161,20,23,198, +46,59,28,28,248,22,78,23,196,2,28,249,22,169,9,248,22,162,20,23,198, 2,2,34,28,248,22,78,248,22,102,23,197,2,249,22,169,9,248,22,106,23, 198,2,2,38,11,11,11,86,94,248,80,144,41,8,28,42,23,194,2,253,24, 199,1,248,22,102,23,202,2,23,202,1,23,203,1,23,204,1,248,22,104,23, 202,1,80,143,46,59,86,94,23,193,1,27,88,148,8,36,40,57,8,240,0, 0,8,0,1,19,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45, 101,114,114,225,2,5,3,33,85,27,28,248,22,78,23,198,2,28,249,22,169, -9,2,34,248,22,161,20,23,200,2,27,248,22,102,23,199,2,28,28,249,22, +9,2,34,248,22,162,20,23,200,2,27,248,22,102,23,199,2,28,28,249,22, 171,9,23,195,2,2,36,10,249,22,171,9,23,195,2,2,35,86,94,23,193, -1,28,23,199,2,27,248,22,153,5,23,201,2,28,248,22,78,193,248,22,161, -20,193,192,250,22,176,11,2,22,6,45,45,110,111,32,98,97,115,101,32,112, +1,28,23,199,2,27,248,22,153,5,23,201,2,28,248,22,78,193,248,22,162, +20,193,192,250,22,177,11,2,22,6,45,45,110,111,32,98,97,115,101,32,112, 97,116,104,32,102,111,114,32,114,101,108,97,116,105,118,101,32,115,117,98,109, 111,100,117,108,101,32,112,97,116,104,58,32,126,46,115,23,201,2,192,23,197, 2,23,197,2,27,28,248,22,78,23,199,2,28,249,22,169,9,2,34,248,22, -161,20,23,201,2,27,28,28,28,249,22,171,9,248,22,102,23,202,2,2,36, +162,20,23,201,2,27,28,28,28,249,22,171,9,248,22,102,23,202,2,2,36, 10,249,22,171,9,248,22,102,23,202,2,2,35,23,200,2,11,27,248,22,153, -5,23,202,2,27,28,249,22,171,9,248,22,102,23,204,2,2,35,248,22,162, +5,23,202,2,27,28,249,22,171,9,248,22,102,23,204,2,2,35,248,22,163, 20,23,202,1,248,22,104,23,202,1,28,248,22,78,23,195,2,249,2,81,248, -22,161,20,23,197,2,249,22,94,248,22,162,20,23,199,1,23,197,1,249,2, +22,162,20,23,197,2,249,22,94,248,22,163,20,23,199,1,23,197,1,249,2, 81,23,196,1,23,195,1,249,2,81,2,36,28,249,22,171,9,248,22,102,23, -204,2,2,35,248,22,162,20,23,202,1,248,22,104,23,202,1,28,248,22,78, -193,248,22,162,20,193,11,11,11,27,28,248,22,64,23,196,2,27,248,80,144, -46,51,42,249,22,80,23,199,2,248,22,191,16,247,22,143,14,28,23,193,2, +204,2,2,35,248,22,163,20,23,202,1,248,22,104,23,202,1,28,248,22,78, +193,248,22,163,20,193,11,11,11,27,28,248,22,64,23,196,2,27,248,80,144, +46,51,42,249,22,80,23,199,2,248,22,128,17,247,22,144,14,28,23,193,2, 192,86,94,23,193,1,90,144,41,11,89,146,41,39,11,249,80,144,49,57,42, 248,22,71,23,201,2,11,27,28,248,22,88,23,195,2,2,39,249,22,176,7, 23,197,2,2,40,252,80,144,53,8,23,42,23,205,1,28,248,22,88,23,200, @@ -1434,58 +1434,58 @@ 7,23,196,2,86,94,23,196,1,27,248,80,144,46,8,29,42,23,202,2,27, 248,80,144,47,51,42,249,22,80,23,200,2,23,197,2,28,23,193,2,192,86, 94,23,193,1,90,144,41,11,89,146,41,39,11,249,80,144,50,57,42,23,201, -2,11,28,248,22,88,23,194,2,86,94,23,193,1,249,22,191,15,23,198,1, -248,2,86,23,197,1,250,22,1,22,191,15,23,199,1,249,22,94,249,22,2, +2,11,28,248,22,88,23,194,2,86,94,23,193,1,249,22,128,16,23,198,1, +248,2,86,23,197,1,250,22,1,22,128,16,23,199,1,249,22,94,249,22,2, 32,0,88,148,8,36,40,47,11,9,222,33,88,23,200,1,248,22,90,248,2, -86,23,201,1,28,248,22,173,15,23,196,2,86,94,23,196,1,248,80,144,45, -8,30,42,248,22,137,16,28,248,22,134,16,23,198,2,23,197,2,249,22,135, +86,23,201,1,28,248,22,174,15,23,196,2,86,94,23,196,1,248,80,144,45, +8,30,42,248,22,138,16,28,248,22,135,16,23,198,2,23,197,2,249,22,136, 16,23,199,2,248,80,144,49,8,29,42,23,205,2,28,249,22,169,9,248,22, 81,23,198,2,2,32,27,248,80,144,46,51,42,249,22,80,23,199,2,248,22, -191,16,247,22,143,14,28,23,193,2,192,86,94,23,193,1,90,144,41,11,89, +128,17,247,22,144,14,28,23,193,2,192,86,94,23,193,1,90,144,41,11,89, 146,41,39,11,249,80,144,49,57,42,248,22,102,23,201,2,11,27,28,248,22, -88,248,22,104,23,201,2,28,248,22,88,23,195,2,249,22,170,16,2,89,23, +88,248,22,104,23,201,2,28,248,22,88,23,195,2,249,22,171,16,2,89,23, 197,2,11,10,27,28,23,194,2,248,2,86,23,197,2,28,248,22,88,23,196, -2,2,39,28,249,22,170,16,2,89,23,198,2,248,2,86,23,197,2,249,22, +2,2,39,28,249,22,171,16,2,89,23,198,2,248,2,86,23,197,2,249,22, 176,7,23,198,2,2,40,27,28,23,195,1,86,94,23,197,1,249,22,94,28, 248,22,88,248,22,104,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22, 1,22,94,249,22,2,80,144,56,8,31,42,248,22,104,23,208,2,23,198,1, 28,248,22,88,23,197,2,86,94,23,196,1,248,22,90,23,198,1,86,94,23, 197,1,23,196,1,252,80,144,55,8,23,42,23,207,1,248,22,81,23,199,2, -248,22,162,20,23,199,1,23,199,1,10,28,249,22,169,9,248,22,161,20,23, -198,2,2,37,248,80,144,45,8,30,42,248,22,137,16,249,22,135,16,248,22, -139,16,248,22,102,23,201,2,248,80,144,49,8,29,42,23,205,2,12,86,94, -28,28,248,22,173,15,23,194,2,10,248,22,184,8,23,194,2,12,28,23,201, -2,250,22,178,11,69,114,101,113,117,105,114,101,249,22,137,8,6,17,17,98, +248,22,163,20,23,199,1,23,199,1,10,28,249,22,169,9,248,22,162,20,23, +198,2,2,37,248,80,144,45,8,30,42,248,22,138,16,249,22,136,16,248,22, +140,16,248,22,102,23,201,2,248,80,144,49,8,29,42,23,205,2,12,86,94, +28,28,248,22,174,15,23,194,2,10,248,22,184,8,23,194,2,12,28,23,201, +2,250,22,179,11,69,114,101,113,117,105,114,101,249,22,137,8,6,17,17,98, 97,100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248, -22,81,23,199,2,6,0,0,23,204,2,250,22,180,11,2,22,2,33,23,198, -2,27,28,248,22,184,8,23,195,2,249,22,189,8,23,196,2,39,249,22,137, -16,248,22,138,16,23,197,2,11,27,28,248,22,184,8,23,196,2,249,22,189, +22,81,23,199,2,6,0,0,23,204,2,250,22,181,11,2,22,2,33,23,198, +2,27,28,248,22,184,8,23,195,2,249,22,189,8,23,196,2,39,249,22,138, +16,248,22,139,16,23,197,2,11,27,28,248,22,184,8,23,196,2,249,22,189, 8,23,197,2,40,248,80,144,47,8,24,42,23,195,2,90,144,42,11,89,146, 42,39,11,28,248,22,184,8,23,199,2,250,22,7,2,41,249,22,189,8,23, -203,2,41,2,41,248,22,130,16,23,198,2,86,95,23,195,1,23,193,1,27, +203,2,41,2,41,248,22,131,16,23,198,2,86,95,23,195,1,23,193,1,27, 28,248,22,184,8,23,200,2,249,22,189,8,23,201,2,42,249,80,144,52,61, 42,23,197,2,5,0,27,28,248,22,184,8,23,201,2,249,22,189,8,23,202, 2,43,248,22,152,5,23,200,2,27,250,22,158,2,80,144,55,44,41,248,22, -191,16,247,22,143,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27, +128,17,247,22,144,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27, 249,22,80,247,22,138,2,247,22,138,2,86,94,250,22,156,2,80,144,57,44, -41,248,22,191,16,247,22,143,14,195,192,27,28,23,204,2,248,22,152,5,249, +41,248,22,128,17,247,22,144,14,195,192,27,28,23,204,2,248,22,152,5,249, 22,80,248,22,153,5,23,200,2,23,207,2,23,196,2,86,95,28,23,212,2, 28,250,22,158,2,248,22,81,23,198,2,195,11,86,96,23,211,1,23,204,1, 23,194,1,12,27,251,22,31,11,80,144,59,53,41,9,28,248,22,15,80,144, -60,54,41,80,144,59,54,41,247,22,17,27,248,22,191,16,247,22,143,14,86, +60,54,41,80,144,59,54,41,247,22,17,27,248,22,128,17,247,22,144,14,86, 94,249,22,3,88,148,8,36,40,57,11,9,226,13,12,2,3,33,92,23,196, 2,248,28,248,22,15,80,144,58,54,41,32,0,88,148,39,40,45,11,9,222, 33,93,80,144,57,8,32,42,20,20,98,88,148,39,39,8,25,8,240,12,64, 0,0,9,233,18,21,14,15,12,11,7,6,4,1,2,33,95,23,195,1,23, 194,1,23,197,1,23,207,1,23,214,1,12,28,28,248,22,184,8,23,204,1, 86,94,23,212,1,11,28,23,212,1,28,248,22,153,7,23,206,2,10,28,248, -22,64,23,206,2,10,28,248,22,78,23,206,2,249,22,169,9,248,22,161,20, +22,64,23,206,2,10,28,248,22,78,23,206,2,249,22,169,9,248,22,162,20, 23,208,2,2,32,11,11,249,80,144,56,52,42,28,248,22,153,7,23,208,2, 249,22,80,23,209,1,248,80,144,59,8,29,42,23,215,1,86,94,23,212,1, -249,22,80,23,209,1,248,22,191,16,247,22,143,14,252,22,186,8,23,209,1, +249,22,80,23,209,1,248,22,128,17,247,22,144,14,252,22,186,8,23,209,1, 23,208,1,23,206,1,23,204,1,23,203,1,12,192,86,96,20,18,144,11,80, 143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,248,22, -190,4,80,144,40,60,41,248,22,176,5,80,144,40,40,42,248,22,142,15,80, +190,4,80,144,40,60,41,248,22,176,5,80,144,40,40,42,248,22,143,15,80, 144,40,48,42,20,18,144,11,80,143,39,59,248,80,144,40,8,27,40,249,22, 31,11,80,144,42,41,40,20,18,144,11,80,143,39,59,248,80,144,40,8,27, 40,249,22,31,11,80,144,42,41,40,144,39,20,121,145,2,1,39,16,1,11, @@ -1543,7 +1543,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 9713); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,56,84,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,54,46,50,46,57,48,48,46,57,84,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,1,0,0,8,0, 18,0,24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0,135, 0,147,0,231,0,238,0,8,1,0,0,198,1,0,0,3,1,5,105,110,115, diff --git a/racket/src/racket/src/eval.c b/racket/src/racket/src/eval.c index 34fda3ec84..0501a02a04 100644 --- a/racket/src/racket/src/eval.c +++ b/racket/src/racket/src/eval.c @@ -96,7 +96,9 @@ The third pass, called "optimize", performs constant propagation, constant folding, and function inlining; this pass mutates records - produced by the "letrec_check" pass. See "optimize.c". + produced by the "letrec_check" pass. See "optimize.c". This pass + isn't optional; for example, it calculates closure information that + the third pass uses. The fourth pass, called "resolve", finishes compilation by computing variable offsets and indirections (often mutating the records @@ -191,7 +193,8 @@ SHARED_OK int scheme_startup_use_jit = INIT_JIT_ON; void scheme_set_startup_use_jit(int v) { scheme_startup_use_jit = v; } -SHARED_OK static int valdiate_compile_result = 0; +SHARED_OK static int validate_compile_result = 0; +SHARED_OK static int recompile_every_compile = 0; /* THREAD LOCAL SHARED */ THREAD_LOCAL_DECL(volatile int scheme_fuel_counter); @@ -234,6 +237,7 @@ READ_ONLY static Scheme_Object *zero_rands_ptr; /* &zero_rands_ptr is dummy rand static Scheme_Object *eval(int argc, Scheme_Object *argv[]); static Scheme_Object *compile(int argc, Scheme_Object *argv[]); static Scheme_Object *compiled_p(int argc, Scheme_Object *argv[]); +static Scheme_Object *recompile(int argc, Scheme_Object *argv[]); static Scheme_Object *expand(int argc, Scheme_Object **argv); static Scheme_Object *local_expand(int argc, Scheme_Object **argv); static Scheme_Object *local_expand_expr(int argc, Scheme_Object **argv); @@ -259,6 +263,8 @@ static Scheme_Object *compile_module_constants(int argc, Scheme_Object **argv); static Scheme_Object *use_jit(int argc, Scheme_Object **argv); static Scheme_Object *disallow_inline(int argc, Scheme_Object **argv); +static Scheme_Object *recompile_top(Scheme_Object *top); + static Scheme_Object *_eval_compiled_multi_with_prompt(Scheme_Object *obj, Scheme_Env *env); void scheme_escape_to_continuation(Scheme_Object *obj, int num_rands, Scheme_Object **rands, Scheme_Object *alt_full); @@ -351,6 +357,7 @@ scheme_init_eval (Scheme_Env *env) GLOBAL_PRIM_W_ARITY2("eval-syntax", eval_stx, 1, 2, 0, -1, env); GLOBAL_PRIM_W_ARITY("compile", compile, 1, 1, env); + GLOBAL_PRIM_W_ARITY("compiled-expression-recompile", recompile, 1, 1, env); GLOBAL_PRIM_W_ARITY("compile-syntax", compile_stx, 1, 1, env); GLOBAL_PRIM_W_ARITY("compiled-expression?", compiled_p, 1, 1, env); GLOBAL_PRIM_W_ARITY("expand", expand, 1, 1, env); @@ -379,7 +386,24 @@ scheme_init_eval (Scheme_Env *env) /* Enables validation of bytecode as it is generated, to double-check that the compiler is producing valid bytecode as it should. */ - valdiate_compile_result = 1; + validate_compile_result = 1; + } + + { + /* Enables re-running the optimizer N times on every compilation. */ + const char *s; + s = getenv("PLT_RECOMPILE_COMPILE"); + if (s) { + int i = 0; + while ((s[i] >= '0') && (s[i] <= '9')) { + recompile_every_compile = (recompile_every_compile * 10) + (s[i]-'0'); + i++; + } + if (recompile_every_compile <= 0) + recompile_every_compile = 1; + else if (recompile_every_compile > 32) + recompile_every_compile = 32; + } } } @@ -3531,7 +3555,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, c = lv->count; i = lv->position; - ab = SCHEME_LET_AUTOBOX(lv); + ab = SCHEME_LET_VALUE_AUTOBOX(lv); value = lv->value; obj = lv->body; @@ -3593,7 +3617,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, PUSH_RUNSTACK(p, RUNSTACK, c); RUNSTACK_CHANGED(); - if (SCHEME_LET_AUTOBOX(lv)) { + if (SCHEME_LET_VOID_AUTOBOX(lv)) { GC_MAYBE_IGNORE_INTERIOR Scheme_Object **stack = RUNSTACK; UPDATE_THREAD_RSPTR_FOR_GC(); @@ -3991,6 +4015,48 @@ static int get_comp_flags(Scheme_Config *config) return comp_flags; } +static Scheme_Object *optimize_resolve_expr(Scheme_Object* o, Comp_Prefix *cp, Scheme_Object *src_insp_desc) +{ + Optimize_Info *oi; + Resolve_Prefix *rp; + Resolve_Info *ri; + Scheme_Compilation_Top *top; + /* TODO: see if this can be moved here completely */ + int comp_flags, enforce_consts, max_let_depth; + Scheme_Config *config; + + config = scheme_current_config(); + enforce_consts = SCHEME_TRUEP(scheme_get_param(config, MZCONFIG_COMPILE_MODULE_CONSTS)); + comp_flags = get_comp_flags(config); + if (enforce_consts) + comp_flags |= COMP_ENFORCE_CONSTS; + oi = scheme_optimize_info_create(cp, 1); + scheme_optimize_info_enforce_const(oi, enforce_consts); + if (!(comp_flags & COMP_CAN_INLINE)) + scheme_optimize_info_never_inline(oi); + o = scheme_optimize_expr(o, oi, 0); + + rp = scheme_resolve_prefix(0, cp, src_insp_desc); + ri = scheme_resolve_info_create(rp); + scheme_resolve_info_enforce_const(ri, enforce_consts); + scheme_enable_expression_resolve_lifts(ri); + + o = scheme_resolve_expr(o, ri); + max_let_depth = scheme_resolve_info_max_let_depth(ri); + o = scheme_sfs(o, NULL, max_let_depth); + + o = scheme_merge_expression_resolve_lifts(o, rp, ri); + + rp = scheme_remap_prefix(rp, ri); + + top = MALLOC_ONE_TAGGED(Scheme_Compilation_Top); + top->iso.so.type = scheme_compilation_top_type; + top->max_let_depth = max_let_depth; + top->code = o; + top->prefix = rp; + return (Scheme_Object *)top; +} + static void *compile_k(void) { Scheme_Thread *p = scheme_current_thread; @@ -4189,7 +4255,14 @@ static void *compile_k(void) top->code = o; top->prefix = rp; - if (valdiate_compile_result) { + if (recompile_every_compile) { + int i; + for (i = recompile_every_compile; i--; ) { + top = (Scheme_Compilation_Top *)recompile_top((Scheme_Object *)top); + } + } + + if (validate_compile_result) { scheme_validate_code(NULL, top->code, top->max_let_depth, top->prefix->num_toplevels, @@ -4810,6 +4883,39 @@ compiled_p(int argc, Scheme_Object *argv[]) : scheme_false); } +static Scheme_Object *recompile_top(Scheme_Object *top) +{ + Comp_Prefix *cp; + Scheme_Object *code; + +#if 0 + printf("Resolved Code:\n%s\n\n", scheme_print_to_string(((Scheme_Compilation_Top *)top)->code, NULL)); +#endif + + code = scheme_unresolve_top(top, &cp); + +#if 0 + printf("Unresolved Prefix:\n"); + printf("%s\n\n", scheme_print_to_string(cp, NULL)); + printf("Unresolved Code:\n"); + printf("%s\n\n", scheme_print_to_string(code, NULL)); +#endif + + top = optimize_resolve_expr(code, cp, ((Scheme_Compilation_Top*)top)->prefix->src_insp_desc); + + return top; +} + +static Scheme_Object * +recompile(int argc, Scheme_Object *argv[]) +{ + if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_compilation_top_type)) { + scheme_wrong_contract("compiled-expression-recompile", "compiled-expression?", 0, argc, argv); + } + + return recompile_top(argv[0]); +} + static Scheme_Object *expand(int argc, Scheme_Object **argv) { Scheme_Env *env; diff --git a/racket/src/racket/src/jit.c b/racket/src/racket/src/jit.c index ad314afbf4..4cb2bd4d67 100644 --- a/racket/src/racket/src/jit.c +++ b/racket/src/racket/src/jit.c @@ -719,7 +719,7 @@ int scheme_is_non_gc(Scheme_Object *obj, int depth) case scheme_let_value_type: if (depth) { Scheme_Let_Value *lv = (Scheme_Let_Value *)obj; - if (SCHEME_LET_AUTOBOX(lv)) + if (SCHEME_LET_VALUE_AUTOBOX(lv)) return 0; return scheme_is_non_gc(lv->body, depth - 1); } @@ -733,7 +733,7 @@ int scheme_is_non_gc(Scheme_Object *obj, int depth) case scheme_let_void_type: if (depth) { Scheme_Let_Void *lv = (Scheme_Let_Void *)obj; - if (SCHEME_LET_AUTOBOX(lv)) + if (SCHEME_LET_VOID_AUTOBOX(lv)) return 0; return scheme_is_non_gc(lv->body, depth - 1); } @@ -2721,7 +2721,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w case scheme_let_value_type: { Scheme_Let_Value *lv = (Scheme_Let_Value *)obj; - int ab = SCHEME_LET_AUTOBOX(lv), i, pos; + int ab = SCHEME_LET_VALUE_AUTOBOX(lv), i, pos; mz_jit_unbox_state ubs; START_JIT_DATA(); @@ -2829,7 +2829,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w scheme_stack_safety(jitter, c, 0); mz_runstack_pushed(jitter, c); - if (SCHEME_LET_AUTOBOX(lv)) { + if (SCHEME_LET_VOID_AUTOBOX(lv)) { int i; mz_rs_sync(); JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); diff --git a/racket/src/racket/src/marshal.c b/racket/src/racket/src/marshal.c index 1b5050e07d..1230849466 100644 --- a/racket/src/racket/src/marshal.c +++ b/racket/src/racket/src/marshal.c @@ -180,7 +180,7 @@ static Scheme_Object *write_let_value(Scheme_Object *obj) return cons(scheme_make_integer(lv->count), cons(scheme_make_integer(lv->position), - cons(SCHEME_LET_AUTOBOX(lv) ? scheme_true : scheme_false, + cons(SCHEME_LET_VALUE_AUTOBOX(lv) ? scheme_true : scheme_false, cons(scheme_protect_quote(lv->value), scheme_protect_quote(lv->body))))); } @@ -199,7 +199,7 @@ static Scheme_Object *read_let_value(Scheme_Object *obj) lv->position = SCHEME_INT_VAL(SCHEME_CAR(obj)); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; - SCHEME_LET_AUTOBOX(lv) = SCHEME_TRUEP(SCHEME_CAR(obj)); + SCHEME_LET_VALUE_AUTOBOX(lv) = SCHEME_TRUEP(SCHEME_CAR(obj)); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; lv->value = SCHEME_CAR(obj); @@ -215,7 +215,7 @@ static Scheme_Object *write_let_void(Scheme_Object *obj) lv = (Scheme_Let_Void *)obj; return cons(scheme_make_integer(lv->count), - cons(SCHEME_LET_AUTOBOX(lv) ? scheme_true : scheme_false, + cons(SCHEME_LET_VOID_AUTOBOX(lv) ? scheme_true : scheme_false, scheme_protect_quote(lv->body))); } @@ -230,7 +230,7 @@ static Scheme_Object *read_let_void(Scheme_Object *obj) lv->count = SCHEME_INT_VAL(SCHEME_CAR(obj)); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; - SCHEME_LET_AUTOBOX(lv) = SCHEME_TRUEP(SCHEME_CAR(obj)); + SCHEME_LET_VOID_AUTOBOX(lv) = SCHEME_TRUEP(SCHEME_CAR(obj)); lv->body = SCHEME_CDR(obj); return (Scheme_Object *)lv; diff --git a/racket/src/racket/src/mzmark_resolve.inc b/racket/src/racket/src/mzmark_resolve.inc index e537c20d21..45ad01b3b3 100644 --- a/racket/src/racket/src/mzmark_resolve.inc +++ b/racket/src/racket/src/mzmark_resolve.inc @@ -57,6 +57,12 @@ static int mark_unresolve_info_MARK(void *p, struct NewGC *gc) { gcMARK2(i->depths, gc); gcMARK2(i->prefix, gc); gcMARK2(i->closures, gc); + gcMARK2(i->closures, gc); + gcMARK2(i->module, gc); + gcMARK2(i->comp_prefix, gc); + gcMARK2(i->toplevels, gc); + gcMARK2(i->definitions, gc); + gcMARK2(i->ref_args, gc); return gcBYTES_TO_WORDS(sizeof(Unresolve_Info)); @@ -69,6 +75,12 @@ static int mark_unresolve_info_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(i->depths, gc); gcFIXUP2(i->prefix, gc); gcFIXUP2(i->closures, gc); + gcFIXUP2(i->closures, gc); + gcFIXUP2(i->module, gc); + gcFIXUP2(i->comp_prefix, gc); + gcFIXUP2(i->toplevels, gc); + gcFIXUP2(i->definitions, gc); + gcFIXUP2(i->ref_args, gc); return gcBYTES_TO_WORDS(sizeof(Unresolve_Info)); diff --git a/racket/src/racket/src/mzmarksrc.c b/racket/src/racket/src/mzmarksrc.c index bcacc22f6a..c48bffab91 100644 --- a/racket/src/racket/src/mzmarksrc.c +++ b/racket/src/racket/src/mzmarksrc.c @@ -1309,6 +1309,12 @@ mark_unresolve_info { gcMARK2(i->depths, gc); gcMARK2(i->prefix, gc); gcMARK2(i->closures, gc); + gcMARK2(i->closures, gc); + gcMARK2(i->module, gc); + gcMARK2(i->comp_prefix, gc); + gcMARK2(i->toplevels, gc); + gcMARK2(i->definitions, gc); + gcMARK2(i->ref_args, gc); size: gcBYTES_TO_WORDS(sizeof(Unresolve_Info)); diff --git a/racket/src/racket/src/resolve.c b/racket/src/racket/src/resolve.c index 20d4a1752b..5f8800a6ca 100644 --- a/racket/src/racket/src/resolve.c +++ b/racket/src/racket/src/resolve.c @@ -657,7 +657,7 @@ set_resolve(Scheme_Object *data, Resolve_Info *rslv) lv->count = 1; li = resolve_info_lookup(rslv, SCHEME_LOCAL_POS(var), &flags, NULL, 0); lv->position = li; - SCHEME_LET_AUTOBOX(lv) = (flags & SCHEME_INFO_BOXED); + SCHEME_LET_VALUE_AUTOBOX(lv) = (flags & SCHEME_INFO_BOXED); lv->value = val; if (!(flags & SCHEME_INFO_BOXED)) @@ -1562,7 +1562,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) } else lv->position = 0; lv->count = clv->count; - SCHEME_LET_AUTOBOX(lv) = recbox; + SCHEME_LET_VALUE_AUTOBOX(lv) = recbox; for (j = lv->count; j--; ) { if (!recbox @@ -1661,7 +1661,7 @@ scheme_resolve_lets(Scheme_Object *form, Resolve_Info *info) lvd->iso.so.type = scheme_let_void_type; lvd->body = first; lvd->count = cnt; - SCHEME_LET_AUTOBOX(lvd) = recbox; + SCHEME_LET_VOID_AUTOBOX(lvd) = recbox; first = (Scheme_Object *)lvd; } @@ -3197,7 +3197,7 @@ static int resolving_in_procedure(Resolve_Info *info) } /*========================================================================*/ -/* uresolve */ +/* unresolve */ /*========================================================================*/ #if 0 @@ -3206,6 +3206,12 @@ static int resolving_in_procedure(Resolve_Info *info) # define return_NULL return NULL #endif +#if 0 +# define LOG_UNRESOLVE(x) x +#else +# define LOG_UNRESOLVE(x) /* empty */ +#endif + typedef struct Unresolve_Info { MZTAG_IF_REQUIRED int stack_pos; /* stack in resolved coordinates */ @@ -3215,15 +3221,25 @@ typedef struct Unresolve_Info { mzshort *depths; Scheme_Prefix *prefix; Scheme_Hash_Table *closures; /* handle cycles */ - int has_non_leaf, body_size; + int has_non_leaf, has_tl, body_size; + + int inlining; + Scheme_Module *module; + Comp_Prefix *comp_prefix; + Scheme_Hash_Table *toplevels; + Scheme_Object *definitions; + mzshort *ref_args; } Unresolve_Info; static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int as_rator); +static Scheme_Object *unresolve_expr_2(Scheme_Object *e, Unresolve_Info *ui, int as_rator); +static Scheme_Sequence *unresolve_let_value(Scheme_Let_Value *lv, Unresolve_Info *ui, Scheme_Object* val, Scheme_Object *body); static Unresolve_Info *new_unresolve_info(Scheme_Prefix *prefix) { Unresolve_Info *ui; - int *f, *d; + int *f, *d, *r; + Scheme_Hash_Table *ht; ui = MALLOC_ONE_RT(Unresolve_Info); SET_REQUIRED_TAG(ui->type = scheme_rt_unresolve_info); @@ -3234,14 +3250,21 @@ static Unresolve_Info *new_unresolve_info(Scheme_Prefix *prefix) ui->flags = f; d = (mzshort *)scheme_malloc_atomic(sizeof(mzshort) * ui->stack_size); ui->depths = d; + r = (mzshort *)scheme_malloc_atomic(sizeof(mzshort) * ui->stack_size); + ui->ref_args = r; + + ui->inlining = 1; + ht = scheme_make_hash_table(SCHEME_hash_ptr); + ui->toplevels = ht; + ui->definitions = scheme_null; return ui; } -static int unresolve_stack_push(Unresolve_Info *ui, int n, int r_only) +static int unresolve_stack_push(Unresolve_Info *ui, int n, int r_only, int rev) { int pos, *f, i; - mzshort *d; + mzshort *d, *r; pos = ui->stack_pos; @@ -3252,19 +3275,32 @@ static int unresolve_stack_push(Unresolve_Info *ui, int n, int r_only) d = (mzshort *)scheme_malloc_atomic(sizeof(mzshort) * ((2 * ui->stack_size) + n)); memcpy(d, ui->depths, sizeof(mzshort) * pos); + r = (mzshort *)scheme_malloc_atomic(sizeof(mzshort) * ((2 * ui->stack_size) + n)); + memcpy(r, ui->ref_args, sizeof(mzshort) * pos); + ui->flags = f; ui->depths = d; + ui->ref_args = r; ui->stack_size = (2 * ui->stack_size) + n; } memset(ui->flags + pos, 0, sizeof(int) * n); if (!r_only) { - for (i = 0; i < n; i++) { - ui->depths[pos + i] = ui->depth++; + if (!rev) { + for (i = 0; i < n; i++) { + ui->depths[pos + i] = ui->depth++; + } + } else { + for (i = n; i--;) { + ui->depths[pos + i] = ui->depth++; + } } } ui->stack_pos += n; + + LOG_UNRESOLVE(printf("push %d(%d), d=%d, sp=%d, [%d, %d, %d, %d, %d]\n", n, r_only, ui->depth, ui->stack_pos, + ui->depths[0], ui->depths[1], ui->depths[2], ui->depths[3], ui->depths[4])); return pos; } @@ -3284,6 +3320,9 @@ static int *unresolve_stack_pop(Unresolve_Info *ui, int pos, int n) } else f = NULL; + LOG_UNRESOLVE(printf("pop %d(%d), d=%d, sp=%d, [%d, %d, %d, %d, %d]\n", n, pos, ui->depth, ui->stack_pos, + ui->depths[0], ui->depths[1], ui->depths[2], ui->depths[3], ui->depths[4])); + return f; } @@ -3331,11 +3370,1243 @@ static int unresolve_set_flag(Unresolve_Info *ui, int pos, int flag) old_flag = ui->flags[i]; flag = combine_flags(flag | (1 << SCHEME_USE_COUNT_SHIFT), old_flag); ui->flags[i] = flag; + + LOG_UNRESOLVE(printf("local %d -> %d (d=%d, sp=%d, i=%d, d[i]=%d)\n", + pos, ui->depth - ui->depths[i] - 1, ui->depth, ui->stack_pos, i, ui->depths[i])); return ui->depth - ui->depths[i] - 1; } -Scheme_Object *unresolve_closure(Scheme_Closure_Data *rdata, Unresolve_Info *ui) +static Scheme_Object *unresolve_closure_data_2(Scheme_Closure_Data *rdata, Unresolve_Info *ui) +{ + Scheme_Closure_Data *data; + Scheme_Object *body; + Closure_Info *cl; + int i, pos, data_pos, *flags, init_size, has_non_leaf, has_tl; + + scheme_delay_load_closure(rdata); + + data = MALLOC_ONE_TAGGED(Scheme_Closure_Data); + data->iso.so.type = scheme_compiled_unclosed_procedure_type; + + SCHEME_CLOSURE_DATA_FLAGS(data) = (SCHEME_CLOSURE_DATA_FLAGS(rdata) + & (CLOS_HAS_REST | CLOS_IS_METHOD)); + + + data->num_params = rdata->num_params; + data->name = rdata->name; + + pos = unresolve_stack_push(ui, data->num_params, 0, 0); + + + if (SCHEME_CLOSURE_DATA_FLAGS(rdata) & CLOS_HAS_TYPED_ARGS) { + for (i = 0; i < data->num_params; i++) { + LOG_UNRESOLVE(printf("ref_args[%d] = %d\n", ui->stack_pos - i, + scheme_boxmap_get(rdata->closure_map, i, rdata->closure_size))); + ui->ref_args[ui->stack_pos - i] = + scheme_boxmap_get(rdata->closure_map, i, rdata->closure_size); + } + } + + if (rdata->closure_size) { + data_pos = unresolve_stack_push(ui, rdata->closure_size, 1, 0); + /* remap closure slots: */ + /* TODO: remap ref-args? */ + for (i = rdata->closure_size; i--; ) { + int mp; + mp = ui->depths[pos - rdata->closure_map[i] - 1]; + ui->depths[ui->stack_pos - i - 1] = mp; + } + } else + data_pos = 0; + + init_size = ui->body_size; + has_non_leaf = ui->has_non_leaf; + ui->has_non_leaf = 0; + has_tl = ui->has_tl; + ui->has_tl = 0; + + body = unresolve_expr_2(rdata->code, ui, 0); + if (!body) return_NULL; + + data->code = body; + + cl = MALLOC_ONE_RT(Closure_Info); + SET_REQUIRED_TAG(cl->type = scheme_rt_closure_info); + data->closure_map = (mzshort *)cl; + + cl->body_size = (ui->body_size - init_size); + + cl->has_nonleaf = ui->has_non_leaf; + ui->has_non_leaf = has_non_leaf; + + cl->has_tl = ui->has_tl; + ui->has_tl = ui->has_tl || has_tl; + + if (rdata->closure_size) { + /* copy flags from unpacked closure to original slots */ + for (i = rdata->closure_size; i--; ) { + int a, b; + a = ui->flags[pos - rdata->closure_map[i] - 1]; + b = ui->flags[ui->stack_pos - i - 1]; + a = combine_flags(a, b); + ui->flags[pos - rdata->closure_map[i] - 1] = a; + } + (void)unresolve_stack_pop(ui, data_pos, 0); + } + + flags = unresolve_stack_pop(ui, pos, data->num_params); + cl->local_flags = flags; + + /* We don't need to set any more fields of cl, because + optimize does that. */ + + return (Scheme_Object *)data; +} + +static Scheme_Object *unresolve_expr_2_k(void) +{ + Scheme_Thread *p = scheme_current_thread; + Scheme_Object *e = (Scheme_Object *)p->ku.k.p1; + Unresolve_Info *ui = (Unresolve_Info *)p->ku.k.p2; + + p->ku.k.p1 = NULL; + p->ku.k.p2 = NULL; + + return unresolve_expr_2(e, ui, p->ku.k.i1); +} + +static void check_nonleaf_rator(Scheme_Object *rator, Unresolve_Info *ui) +{ + if (!scheme_check_leaf_rator(rator, NULL)) + ui->has_non_leaf = 1; +} + +static int unresolve_toplevel_pos(int pos, Unresolve_Info *ui) { + LOG_UNRESOLVE(printf("pos before = %d\n", pos)); + if (ui->module && + ui->module->prefix->num_stxes && + pos > (ui->module->prefix->num_toplevels + ui->module->prefix->num_stxes)) { + pos -= ui->module->prefix->num_stxes + 1; /* extra slot for lazy syntax */ + } + LOG_UNRESOLVE(printf("pos = %d\n", pos)); + + return pos; +} + +static Scheme_Object *unresolve_toplevel(Scheme_Object *rdata, Unresolve_Info *ui) { + Scheme_Object *v, *opos; + int pos; + pos = unresolve_toplevel_pos(SCHEME_TOPLEVEL_POS(rdata), ui); + opos = scheme_make_integer(pos); + v = scheme_hash_get(ui->toplevels, opos); + if (!v) { + v = scheme_make_toplevel(0, + pos, + 0, + SCHEME_TOPLEVEL_FLAGS(rdata) & SCHEME_TOPLEVEL_FLAGS_MASK); + scheme_hash_set(ui->toplevels, opos, v); + } + LOG_UNRESOLVE(printf("flags for %d: %d\n", pos, SCHEME_TOPLEVEL_FLAGS(rdata) & SCHEME_TOPLEVEL_FLAGS_MASK)); + + ui->has_tl = 1; + + return v; +} + +static Scheme_Object *unresolve_apply_values(Scheme_Object *e, Unresolve_Info *ui) { + Scheme_Object *o, *a, *b; + + a = SCHEME_PTR1_VAL(e); + a = unresolve_expr_2(a, ui, 0); + if (!a) return_NULL; + LOG_UNRESOLVE(printf("unresolve_apply_values: (a) %d %d\n", e->type, a->type)); + + b = SCHEME_PTR2_VAL(e); + b = unresolve_expr_2(b, ui, 0); + if (!b) return_NULL; + LOG_UNRESOLVE(printf(" (b) %d\n", b->type)); + + o = scheme_alloc_object(); + o->type = SCHEME_TYPE(e); + SCHEME_PTR1_VAL(o) = a; + SCHEME_PTR2_VAL(o) = b; + return o; +} + +static Scheme_Object *unresolve_define_values(Scheme_Object *e, Unresolve_Info *ui) { + Scheme_Object *vars = scheme_null; + Scheme_Object *vec, *val, *tl; + int i; + + LOG_UNRESOLVE(printf("define-values-size!!!: %d\n", (int)SCHEME_VEC_SIZE(e))); + for (i = SCHEME_VEC_SIZE(e); --i;) { + LOG_UNRESOLVE(printf("define-values: %d\n", SCHEME_TYPE(SCHEME_VEC_ELS(e)[i]))); + tl = unresolve_toplevel(SCHEME_VEC_ELS(e)[i], ui); + if (!tl) return_NULL; /* TODO: does this check need to be here? */ + vars = cons(tl, vars); + } + val = unresolve_expr_2(SCHEME_VEC_ELS(e)[0], ui, 0); + if (!val) return_NULL; + + vec = scheme_make_vector(2, NULL); + vec->type = scheme_define_values_type; + SCHEME_VEC_ELS(vec)[0] = vars; + SCHEME_VEC_ELS(vec)[1] = val; + return vec; +} + +static Scheme_Let_Header *make_let_header(int count) { + Scheme_Let_Header *lh; + lh = MALLOC_ONE_TAGGED(Scheme_Let_Header); + lh->iso.so.type = scheme_compiled_let_void_type; + lh->count = count; + lh->num_clauses = 0; + SCHEME_LET_FLAGS(lh) = SCHEME_LET_STAR; + return lh; +} + +static Scheme_Compiled_Let_Value *make_compiled_let_value(int position, int count) { + Scheme_Compiled_Let_Value *clv; + clv = MALLOC_ONE_TAGGED(Scheme_Compiled_Let_Value); + clv->iso.so.type = scheme_compiled_let_value_type; + clv->count = count; + clv->position = position; + return clv; +} + +typedef struct Unresolve_Let_Void_State { + /* All pointers so we can use scheme_malloc */ + Scheme_Let_Header *prev_head; + Scheme_Compiled_Let_Value *prev_let; + Scheme_Sequence *prev_seq; +} Unresolve_Let_Void_State; + +/* only one of lh, clv, seq, or body should be non-NULL */ +static void attach_lv(Scheme_Let_Header *lh, + Scheme_Compiled_Let_Value *clv, + Scheme_Sequence *seq, + Scheme_Object *body, + Unresolve_Let_Void_State *state) { + Scheme_Object *o; + o = lh ? (Scheme_Object *)lh : + (clv ? (Scheme_Object *)clv : + (seq ? (Scheme_Object *)seq : body)); + + if (state->prev_head) { + state->prev_head->body = o; + } else if (state->prev_let) { + state->prev_let->body = o; + } else if (state->prev_seq) { + state->prev_seq->array[state->prev_seq->count - 1] = o; + } + + state->prev_head = lh; + state->prev_let = clv; + state->prev_seq = seq; +} + +static Scheme_Object *unresolve_let_void(Scheme_Object *e, Unresolve_Info *ui) { + Scheme_Let_Void *lv = (Scheme_Let_Void *)e; + int i, pos, count, *flags; + Scheme_Let_Header *lh; + Scheme_Object *o; + Scheme_Compiled_Let_Value **clvmap; + Unresolve_Let_Void_State *state; + + state = scheme_malloc(sizeof(Unresolve_Let_Void_State)); + + count = lv->count; + pos = unresolve_stack_push(ui, count, 0, 0); + lh = make_let_header(count); + clvmap = MALLOC_N(Scheme_Compiled_Let_Value*, count); + + o = lv->body; + attach_lv(lh, NULL, NULL, NULL, state); + for (i = 0; i < count;) { + switch (SCHEME_TYPE(o)) { + case scheme_let_value_type: { + Scheme_Let_Value *lval = (Scheme_Let_Value *)o; + Scheme_Compiled_Let_Value *clv; + Scheme_Object *val; + clv = make_compiled_let_value(lval->position, lval->count); + lh->num_clauses++; + + if (SCHEME_LET_VALUE_AUTOBOX(lval)) { + SCHEME_LET_FLAGS(lh) = SCHEME_LET_RECURSIVE; + } + + val = unresolve_expr_2(lval->value, ui, 0); + if (!val) return_NULL; + clv->value = val; + + o = lval->body; + attach_lv(NULL, clv, NULL, NULL, state); + i += lval->count; + + break; + } + case scheme_boxenv_type: { + o = SCHEME_PTR2_VAL(o); + break; + } + case scheme_letrec_type: { + Scheme_Letrec *lr = (Scheme_Letrec *)o; + int j; + SCHEME_LET_FLAGS(lh) = SCHEME_LET_RECURSIVE; + for (j = 0; j < lr->count; j++) { + Scheme_Compiled_Let_Value *clv; + Scheme_Object *val; + clv = make_compiled_let_value(j, 1); + lh->num_clauses++; + val = unresolve_expr_2(lr->procs[j], ui, 0); + if (!val) return_NULL; + clv->value = val; + attach_lv(NULL, clv, NULL, NULL, state); + i++; + } + o = lr->body; + break; + } + case scheme_sequence_type: { + Scheme_Sequence *seq = (Scheme_Sequence *)o; + for (int i = 0; i < seq->count - 1; i++) { + if (!SAME_TYPE(SCHEME_TYPE(seq->array[i]), scheme_local_type)) { + scheme_signal_error("internal error: unexpected form in sequence: %d", SCHEME_TYPE(o)); + } + } + o = seq->array[seq->count - 1]; + break; + } + default: { + scheme_signal_error("internal error: unexpected form in let-void: %d", SCHEME_TYPE(o)); + } + } + } + + o = unresolve_expr_2(o, ui, 0); + if (!o) return_NULL; + attach_lv(NULL, NULL, NULL, o, state); + + flags = unresolve_stack_pop(ui, pos, lv->count); + + /* Set up flags */ + { + Scheme_Compiled_Let_Value *clv; + int count = 0, *clv_flags; + clv = (Scheme_Compiled_Let_Value *)(lh->body); + while (count < lv->count) { + if (SAME_TYPE(SCHEME_TYPE((Scheme_Object *)clv), scheme_sequence_type)) { + Scheme_Sequence *seq = (Scheme_Sequence *)clv; + clv = (Scheme_Compiled_Let_Value *)seq->array[seq->count - 1]; + } + clv_flags = (int *)scheme_malloc_atomic(sizeof(int) * clv->count); + for (i = 0; i < clv->count; i++) { + clv_flags[i] = flags[i + count]; + } + clv->flags = clv_flags; + count += clv->count; + clv = (Scheme_Compiled_Let_Value *)(clv->body); + } + } + + return (Scheme_Object *)lh; +} + + +static Scheme_Object *unresolve_prefix_symbol(Scheme_Object *s, Unresolve_Info *ui) { + Module_Variable *mv; + + mv = MALLOC_ONE_TAGGED(Module_Variable); + mv->iso.so.type = scheme_module_variable_type; + + mv->modidx = ui->module->self_modidx; + mv->sym = s; + mv->insp = ui->module->insp; + mv->pos = -1; + mv->mod_phase = 0; + SCHEME_MODVAR_FLAGS(mv) |= SCHEME_MODVAR_FIXED; + return (Scheme_Object *)mv; +} + +static Scheme_Object *unresolve_closure(Scheme_Object *e, Unresolve_Info *ui) { + + Scheme_Object *r, *c; + int stack_pos, depth; + + c = scheme_hash_get(ui->closures, e); + + if (c && SAME_TYPE(SCHEME_TYPE(c), scheme_compiled_toplevel_type)) { + return c; + } + + stack_pos = ui->stack_pos; + depth = ui->depth; + + r = unresolve_closure_data_2(SCHEME_COMPILED_CLOS_CODE(e), ui); + return r; +} + +static Comp_Prefix *unresolve_prefix(Resolve_Prefix *rp, Unresolve_Info *ui) { + Comp_Prefix *cp; + Scheme_Object *o; + int i; + cp = MALLOC_ONE_TAGGED(Comp_Prefix); +#ifdef MZTAG_REQUIRED + cp->type = scheme_rt_comp_prefix; +#endif + cp->num_toplevels = 0; + cp->toplevels = NULL; + for (i = 0; i < rp->num_toplevels; i++) { + if (SCHEME_SYMBOLP(rp->toplevels[i])) { + Scheme_Object *mv; + mv = unresolve_prefix_symbol(rp->toplevels[i], ui); + o = scheme_register_toplevel_in_comp_prefix(mv, cp, 0, NULL); + } else { + o = scheme_register_toplevel_in_comp_prefix(rp->toplevels[i], cp, 0, NULL); + } + scheme_hash_set(ui->toplevels, scheme_make_integer(SCHEME_TOPLEVEL_POS(o)), o); + } + for (i = 0; i < rp->num_lifts; i++) { + Scheme_Object *mv, *sym; + sym = scheme_make_symbol("lift"); + sym = scheme_gensym(sym); + mv = unresolve_prefix_symbol(sym, ui); + o = scheme_register_toplevel_in_comp_prefix(mv, cp, 0, NULL); + scheme_hash_set(ui->toplevels, scheme_make_integer(SCHEME_TOPLEVEL_POS(o)), o); + } + cp->stxes = NULL; + for (i = 0; i < rp->num_stxes; i++) { + if (rp->stxes[i]) { + scheme_register_stx_in_comp_prefix(rp->stxes[i], cp); + } else { + cp->num_stxes++; + } + } + cp->inline_variants = NULL; + cp->unbound = NULL; + return cp; +} + +void locate_cyclic_closures(Scheme_Object *e, Unresolve_Info *ui) { + switch(SCHEME_TYPE(e)) { + case scheme_sequence_type: + case scheme_begin0_sequence_type: + case scheme_splice_sequence_type: + { + Scheme_Sequence *seq = (Scheme_Sequence *)e; + for (int i = 0; i < seq->count; i++) { + locate_cyclic_closures(seq->array[i], ui); + } + } + break; + case scheme_application_type: + { + Scheme_App_Rec *app = (Scheme_App_Rec *)e; + for (int i = 0; i < app->num_args + 1; i++) { + locate_cyclic_closures(app->args[i], ui); + } + } + break; + case scheme_application2_type: + { + Scheme_App2_Rec *app = (Scheme_App2_Rec *)e; + locate_cyclic_closures(app->rator, ui); + locate_cyclic_closures(app->rand, ui); + } + break; + case scheme_application3_type: + { + Scheme_App3_Rec *app = (Scheme_App3_Rec *)e; + locate_cyclic_closures(app->rator, ui); + locate_cyclic_closures(app->rand1, ui); + locate_cyclic_closures(app->rand2, ui); + } + break; + case scheme_branch_type: + { + Scheme_Branch_Rec *b = (Scheme_Branch_Rec *)e; + locate_cyclic_closures(b->test, ui); + locate_cyclic_closures(b->tbranch, ui); + locate_cyclic_closures(b->fbranch, ui); + } + break; + case scheme_with_cont_mark_type: + case scheme_with_immed_mark_type: + { + Scheme_With_Continuation_Mark *wcm = (Scheme_With_Continuation_Mark *)e; + locate_cyclic_closures(wcm->key, ui); + locate_cyclic_closures(wcm->val, ui); + locate_cyclic_closures(wcm->body, ui); + } + break; + case scheme_let_void_type: + { + Scheme_Let_Void *lv = (Scheme_Let_Void *)e; + locate_cyclic_closures(lv->body, ui); + } + break; + case scheme_letrec_type: + { + Scheme_Letrec *lr = (Scheme_Letrec *)e; + for (int i = 0; i < lr->count; i++) { + locate_cyclic_closures(lr->procs[i], ui); + } + locate_cyclic_closures(lr->body, ui); + } + break; + case scheme_let_one_type: + { + Scheme_Let_One *lo = (Scheme_Let_One *)e; + locate_cyclic_closures(lo->value, ui); + locate_cyclic_closures(lo->body, ui); + } + break; + case scheme_closure_type: + { + Scheme_Object *c; + c = scheme_hash_get(ui->closures, e); + + if (SAME_OBJ(c, scheme_true)) { + Scheme_Object *s, *mv, *tl; + s = scheme_make_symbol("cyclic"); + s = scheme_gensym(s); + mv = unresolve_prefix_symbol(s, ui); + tl = scheme_register_toplevel_in_comp_prefix(mv, ui->comp_prefix, 0, NULL); + scheme_hash_set(ui->closures, e, tl); + } else if (c) { + /* do nothing */ + } else { + Scheme_Closure *cl = (Scheme_Closure *)e; + scheme_hash_set(ui->closures, e, scheme_true); + locate_cyclic_closures((Scheme_Object *)cl->code, ui); + } + } + break; + case scheme_unclosed_procedure_type: + { + Scheme_Closure_Data *cd = (Scheme_Closure_Data *)e; + locate_cyclic_closures(cd->code, ui); + } + break; + case scheme_inline_variant_type: + { + Scheme_Object *a; + a = SCHEME_VEC_ELS(e)[0]; + locate_cyclic_closures(a, ui); + } + break; + case scheme_define_values_type: + { + /* TODO: are the rest all toplevels? */ + locate_cyclic_closures(SCHEME_VEC_ELS(e)[0], ui); + } + break; + case scheme_set_bang_type: + { + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)e; + locate_cyclic_closures(sb->var, ui); + locate_cyclic_closures(sb->val, ui); + } + break; + case scheme_varref_form_type: + case scheme_apply_values_type: + { + Scheme_Object *a, *b; + a = SCHEME_PTR1_VAL(e); + locate_cyclic_closures(a, ui); + b = SCHEME_PTR2_VAL(e); + locate_cyclic_closures(b, ui); + } + break; + case scheme_boxenv_type: + { + locate_cyclic_closures(SCHEME_PTR2_VAL(e), ui); + } + break; + case scheme_case_lambda_sequence_type: + { + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)e; + for (int i = 0; i < cl->count; i++) { + locate_cyclic_closures(cl->array[i], ui); + } + } + break; + case scheme_let_value_type: + { + Scheme_Let_Value *lv = (Scheme_Let_Value *)e; + locate_cyclic_closures(lv->value, ui); + locate_cyclic_closures(lv->body, ui); + } + break; + default: + break; + } +} + +Scheme_Object *unresolve_module(Scheme_Object *e, Unresolve_Info *ui) +{ + Scheme_Module *m = (Scheme_Module *)e, *nm; + Scheme_Object *dummy, *bs, *bs2, *ds, **bss; + Scheme_Hash_Table *ht; + Comp_Prefix *cp; + int i, cnt, len; + + ui->module = m; + cp = unresolve_prefix(m->prefix, ui); + if (!cp) return_NULL; + ui->comp_prefix = cp; + + cnt = SCHEME_VEC_SIZE(m->bodies[0]); + bs = scheme_make_vector(cnt, NULL); + + ht = scheme_make_hash_table(SCHEME_hash_ptr); + ui->closures = ht; + for (i = 0; i < cnt; i++) { + locate_cyclic_closures(SCHEME_VEC_ELS(m->bodies[0])[i], ui); + } + + len = 0; + for (i = 0; i < ui->closures->size; i++) { + if (ui->closures->vals[i] && + SAME_TYPE(SCHEME_TYPE(ui->closures->vals[i]), scheme_compiled_toplevel_type)) { + Scheme_Object *d, *vars, *val; + len++; + d = scheme_make_vector(2, NULL); + d->type = scheme_define_values_type; + vars = cons(ui->closures->vals[i], scheme_null); + val = unresolve_closure_data_2(SCHEME_COMPILED_CLOS_CODE(ui->closures->keys[i]), ui); + SCHEME_VEC_ELS(d)[0] = vars; + SCHEME_VEC_ELS(d)[1] = val; + d = cons(d, ui->definitions); + ui->definitions = d; + } + } + + for (i = 0; i < cnt; i++) { + Scheme_Object *b; + b = unresolve_expr_2(SCHEME_VEC_ELS(m->bodies[0])[i], ui, 0); + if (!b) return_NULL; + SCHEME_VEC_ELS(bs)[i] = b; + } + len = scheme_list_length(ui->definitions); + ds = ui->definitions; + bs2 = scheme_make_vector(cnt + len, NULL); + for (i = 0; SCHEME_PAIRP(ds); ds = SCHEME_CDR(ds), i++) { + SCHEME_VEC_ELS(bs2)[i] = SCHEME_CAR(ds); + } + for (i = 0; i < cnt; i++) { + SCHEME_VEC_ELS(bs2)[i + len] = SCHEME_VEC_ELS(bs)[i]; + } + + dummy = scheme_make_toplevel(0, SCHEME_TOPLEVEL_POS(m->dummy), 0, 0); + + nm = MALLOC_ONE_TAGGED(Scheme_Module); + nm->so.type = scheme_module_type; + nm->predefined = m->predefined; + + nm->modname = m->modname; + nm->modsrc = m->modsrc; + + nm->et_requires = m->et_requires; + nm->requires = m->requires; + nm->tt_requires = m->tt_requires; + nm->dt_requires = m->dt_requires; + nm->other_requires = m->other_requires; + + bss = MALLOC_N(Scheme_Object*, m->num_phases); + nm->bodies = bss; + nm->bodies[0] = bs2; + /* Other phases are left as-is (and resolve doesn't traverse them): */ + for (i = 1; i < m->num_phases; i++) { + nm->bodies[i] = m->bodies[i]; + } + + nm->me = m->me; + + nm->num_phases = m->num_phases; + + nm->exp_infos = m->exp_infos; + + nm->self_modidx = m->self_modidx; + nm->insp = m->insp; + + nm->lang_info = m->lang_info; + + nm->comp_prefix = cp; + nm->max_let_depth = 0; + nm->prefix = NULL; + nm->dummy = dummy; + nm->rn_stx = m->rn_stx; + + /* leave submodules alone (and resolve doesn't traverse them): */ + nm->submodule_path = m->submodule_path; + nm->pre_submodules = m->pre_submodules; + nm->post_submodules = m->post_submodules; + nm->pre_submodule_names = m->pre_submodule_names; + nm->submodule_ancestry = m->submodule_ancestry; + /* the `supermodule` field is only for instantiated modules */ + + ui->module = NULL; + ui->comp_prefix = NULL; + + return (Scheme_Object *)nm; +} + +static Scheme_Sequence *unresolve_let_value(Scheme_Let_Value *lv, Unresolve_Info *ui, + Scheme_Object* val, Scheme_Object *body) { + Scheme_Set_Bang *sb; + Scheme_Object *var; + Scheme_Sequence *seq; + + LOG_UNRESOLVE(printf("set! position: %d (stack pos %d)\n", lv->position, ui->stack_pos)); + if (ui->ref_args[ui->stack_pos - lv->position]) { + Scheme_App2_Rec *app2; + var = scheme_make_local(scheme_local_type, + unresolve_set_flag(ui, + lv->position, + SCHEME_WAS_USED), + 0); + app2 = MALLOC_ONE_TAGGED(Scheme_App2_Rec); + app2->iso.so.type = scheme_application2_type; + app2->rator = var; + app2->rand = val; + seq = scheme_malloc_sequence(2); + seq->so.type = scheme_sequence_type; + seq->count = 2; + seq->array[0] = (Scheme_Object *)app2; + seq->array[1] = body; + return seq; + } + var = scheme_make_local(scheme_local_type, + unresolve_set_flag(ui, + lv->position, + (SCHEME_WAS_SET_BANGED | SCHEME_WAS_USED)), + 0); + + + sb = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + sb->so.type = scheme_set_bang_type; + sb->var = var; + sb->val = val; + + seq = scheme_malloc_sequence(2); + seq->so.type = scheme_sequence_type; + seq->count = 2; + seq->array[0] = (Scheme_Object *)sb; + seq->array[1] = body; + return seq; +} + +Scheme_App_Rec *maybe_unresolve_app_refs(Scheme_App_Rec *app, Unresolve_Info *ui) { + Scheme_Object *rator; + rator = app->args[0]; + + /* TODO: check if in ui->closures */ + if (SAME_TYPE(SCHEME_TYPE(rator), scheme_closure_type) && + (SCHEME_CLOSURE_DATA_FLAGS((SCHEME_COMPILED_CLOS_CODE(rator))) & CLOS_HAS_TYPED_ARGS)) { + Scheme_Closure_Data *data = SCHEME_COMPILED_CLOS_CODE(rator); + Scheme_App_Rec *new_app; + Scheme_Object *new_rator; + int i; + + new_app = scheme_malloc_application(app->num_args + 1); + + LOG_UNRESOLVE(printf("REF app\n")); + for(i = 0; i < data->num_params; i++) { + LOG_UNRESOLVE(printf("%d: %d\n", i, scheme_boxmap_get(data->closure_map, i, data->closure_size))); + LOG_UNRESOLVE(printf("ui->stack_pos = %d, argpos = %d, i = %d\n", ui->stack_pos, SCHEME_LOCAL_POS(app->args[i + 1]), i)); + if ((scheme_boxmap_get(data->closure_map, i, data->closure_size) & CLOS_TYPE_BOXED) && + SAME_TYPE(SCHEME_TYPE(app->args[i + 1]), scheme_local_type) && + !ui->ref_args[ui->stack_pos - SCHEME_LOCAL_POS(app->args[i + 1])]) { + Scheme_Case_Lambda *cl; + Scheme_Closure_Data *d0, *d1; + Scheme_Set_Bang *sb; + Scheme_Object *local; + Scheme_Object *arg, *s; + int *flags; + Closure_Info *ci; + LOG_UNRESOLVE(printf("This will be a case-lambda: %d\n", i)); + + + cl = (Scheme_Case_Lambda *)scheme_malloc_tagged(sizeof(Scheme_Case_Lambda) + + ((2 - mzFLEX_DELTA) * sizeof(Scheme_Object *))); + + cl->so.type = scheme_case_lambda_sequence_type; + cl->count = 2; + s = scheme_make_symbol("cl"); + s = scheme_gensym(s); + cl->name = s; + + arg = scheme_make_local(scheme_local_type, + unresolve_set_flag(ui, + SCHEME_LOCAL_POS(app->args[i + 1]), + (SCHEME_WAS_SET_BANGED | SCHEME_WAS_USED)), + 0); + + d0 = MALLOC_ONE_TAGGED(Scheme_Closure_Data); + d0->iso.so.type = scheme_compiled_unclosed_procedure_type; + d0->num_params = 0; + d0->code = arg; + ci = MALLOC_ONE_RT(Closure_Info); + SET_REQUIRED_TAG(ci->type = scheme_rt_closure_info); + d0->closure_map = (mzshort *)ci; + s = scheme_make_symbol("d0"); + s = scheme_gensym(s); + d0->name = s; + cl->array[0] = (Scheme_Object *)d0; + + + d1 = MALLOC_ONE_TAGGED(Scheme_Closure_Data); + d1->iso.so.type = scheme_compiled_unclosed_procedure_type; + d1->num_params = 1; + + sb = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + sb->so.type = scheme_set_bang_type; + local = scheme_make_local(scheme_local_type, SCHEME_LOCAL_POS(arg) + 1, 0); + sb->var = local; + local = scheme_make_local(scheme_local_type, 0, 0); + sb->val = local; + d1->code = (Scheme_Object *)sb; + ci = MALLOC_ONE_RT(Closure_Info); + SET_REQUIRED_TAG(ci->type = scheme_rt_closure_info); + flags = (int *)scheme_malloc_atomic(sizeof(int)); + flags[0] = SCHEME_WAS_USED; + ci->local_flags = flags; + d1->closure_map = (mzshort *)ci; + + + s = scheme_make_symbol("d1"); + s = scheme_gensym(s); + d1->name = s; + cl->array[1] = (Scheme_Object *)d1; + + new_app->args[i + 1] = (Scheme_Object *)cl; + } else { + Scheme_Object *arg; + arg = unresolve_expr_2(app->args[i + 1], ui, 0); + new_app->args[i + 1] = arg; + } + } + new_rator = unresolve_expr_2(rator, ui, 0); + new_app->args[0] = new_rator; + + return new_app; + } + return_NULL; +} + + +static Scheme_Object *unresolve_expr_2(Scheme_Object *e, Unresolve_Info *ui, int as_rator) +{ +#ifdef DO_STACK_CHECK + { +# include "mzstkchk.h" + { + Scheme_Thread *p = scheme_current_thread; + + p->ku.k.p1 = (void *)e; + p->ku.k.p2 = (void *)ui; + p->ku.k.i1 = as_rator; + + return scheme_handle_stack_overflow(unresolve_expr_2_k); + } + } +#endif + + ui->body_size++; + + switch (SCHEME_TYPE(e)) { + case scheme_local_type: + return scheme_make_local(scheme_local_type, + unresolve_set_flag(ui, + SCHEME_LOCAL_POS(e), + (SCHEME_WAS_USED + | (as_rator + ? SCHEME_WAS_ONLY_APPLIED + : 0))), + 0); + case scheme_local_unbox_type: + { + if (ui->ref_args[ui->stack_pos - SCHEME_LOCAL_POS(e)]) { + Scheme_App_Rec *app; + Scheme_Object *rator; + LOG_UNRESOLVE(printf("local unbox: %d (stack pos %d)\n", SCHEME_LOCAL_POS(e), ui->stack_pos)); + app = scheme_malloc_application(1); + rator = scheme_make_local(scheme_local_type, + unresolve_set_flag(ui, SCHEME_LOCAL_POS(e), SCHEME_WAS_USED), + 0); + app->args[0] = rator; + return (Scheme_Object *)app; + } + return scheme_make_local(scheme_local_type, + unresolve_set_flag(ui, SCHEME_LOCAL_POS(e), + (SCHEME_WAS_SET_BANGED | SCHEME_WAS_USED)), + 0); + } + case scheme_sequence_type: + case scheme_begin0_sequence_type: + case scheme_splice_sequence_type: + { + Scheme_Sequence *seq = (Scheme_Sequence *)e, *seq2; + int i; + + seq2 = scheme_malloc_sequence(seq->count); + seq2->so.type = seq->so.type; + seq2->count = seq->count; + for (i = seq->count; i--; ) { + e = unresolve_expr_2(seq->array[i], ui, 0); + if (!e) return_NULL; + seq2->array[i] = e; + } + + return (Scheme_Object *)seq2; + } + break; + case scheme_application_type: + { + Scheme_App_Rec *app = (Scheme_App_Rec *)e, *app2; + Scheme_Object *a; + int pos, i; + + ui->body_size += app->num_args; + check_nonleaf_rator(app->args[0], ui); + + pos = unresolve_stack_push(ui, app->num_args, 1, 0); + + app2 = maybe_unresolve_app_refs(app, ui); + if (app2) { + (void)unresolve_stack_pop(ui, pos, 0); + return (Scheme_Object *)app2; + } + + app2 = scheme_malloc_application(app->num_args+1); + + for (i = app->num_args + 1; i--; ) { + a = unresolve_expr_2(app->args[i], ui, 0); + if (!a) return_NULL; + app2->args[i] = a; + } + + (void)unresolve_stack_pop(ui, pos, 0); + + return (Scheme_Object *)app2; + } + case scheme_application2_type: + { + Scheme_App2_Rec *app = (Scheme_App2_Rec *)e, *app2; + Scheme_Object *rator, *rand; + int pos; + + ui->body_size += 1; + check_nonleaf_rator(app->rator, ui); + + pos = unresolve_stack_push(ui, 1, 1, 0); + + rator = unresolve_expr_2(app->rator, ui, 0); + if (!rator) return_NULL; + rand = unresolve_expr_2(app->rand, ui, 0); + if (!rand) return_NULL; + + (void)unresolve_stack_pop(ui, pos, 0); + + app2 = MALLOC_ONE_TAGGED(Scheme_App2_Rec); + app2->iso.so.type = scheme_application2_type; + app2->rator = rator; + app2->rand = rand; + + return (Scheme_Object *)app2; + } + case scheme_application3_type: + { + Scheme_App3_Rec *app = (Scheme_App3_Rec *)e, *app2; + Scheme_Object *rator, *rand1, *rand2; + int pos; + + ui->body_size += 2; + check_nonleaf_rator(app->rator, ui); + + pos = unresolve_stack_push(ui, 2, 1, 0); + + rator = unresolve_expr_2(app->rator, ui, 0); + if (!rator) return_NULL; + rand1 = unresolve_expr_2(app->rand1, ui, 0); + if (!rand1) return_NULL; + rand2 = unresolve_expr_2(app->rand2, ui, 0); + if (!rand2) return_NULL; + + (void)unresolve_stack_pop(ui, pos, 0); + + app2 = MALLOC_ONE_TAGGED(Scheme_App3_Rec); + app2->iso.so.type = scheme_application3_type; + app2->rator = rator; + app2->rand1 = rand1; + app2->rand2 = rand2; + + return (Scheme_Object *)app2; + } + case scheme_branch_type: + { + Scheme_Branch_Rec *b = (Scheme_Branch_Rec *)e, *b2; + Scheme_Object *tst, *thn, *els; + + tst = unresolve_expr_2(b->test, ui, 0); + if (!tst) return_NULL; + thn = unresolve_expr_2(b->tbranch, ui, 0); + if (!thn) return_NULL; + els = unresolve_expr_2(b->fbranch, ui, 0); + if (!els) return_NULL; + + b2 = MALLOC_ONE_TAGGED(Scheme_Branch_Rec); + b2->so.type = scheme_branch_type; + b2->test = tst; + b2->tbranch = thn; + b2->fbranch = els; + + return (Scheme_Object *)b2; + } + case scheme_with_cont_mark_type: + { + Scheme_With_Continuation_Mark *wcm = (Scheme_With_Continuation_Mark *)e, *wcm2; + Scheme_Object *k, *v, *b; + + k = unresolve_expr_2(wcm->key, ui, 0); + if (!k) return_NULL; + v = unresolve_expr_2(wcm->val, ui, 0); + if (!v) return_NULL; + b = unresolve_expr_2(wcm->body, ui, 0); + if (!b) return_NULL; + + wcm2 = MALLOC_ONE_TAGGED(Scheme_With_Continuation_Mark); + wcm2->so.type = scheme_with_cont_mark_type; + wcm2->key = k; + wcm2->val = v; + wcm2->body = b; + + return (Scheme_Object *)wcm2; + } + case scheme_with_immed_mark_type: + { + Scheme_With_Continuation_Mark *wcm = (Scheme_With_Continuation_Mark *)e, *wcm2; + Scheme_Object *k, *v, *b; + int *flags, pos; + + k = unresolve_expr_2(wcm->key, ui, 0); + if (!k) return_NULL; + v = unresolve_expr_2(wcm->val, ui, 0); + if (!v) return_NULL; + + pos = unresolve_stack_push(ui, 1, 0, 0); + b = unresolve_expr_2(wcm->body, ui, 0); + if (!b) return_NULL; + flags = unresolve_stack_pop(ui, pos, 1); + + wcm2 = MALLOC_ONE_TAGGED(Scheme_With_Continuation_Mark); + wcm2->so.type = scheme_with_immed_mark_type; + wcm2->key = k; + wcm2->val = v; + wcm2->body = b; + + return (Scheme_Object *)wcm2; + } + case scheme_let_void_type: + { + return unresolve_let_void(e, ui); + } + case scheme_let_one_type: + { + Scheme_Let_One *lo = (Scheme_Let_One *)e; + Scheme_Object *rhs, *body; + Scheme_Let_Header *lh; + Scheme_Compiled_Let_Value *clv; + int *flags, pos; + + pos = unresolve_stack_push(ui, 1, 1 /* => post-bind RHS */, 0); + rhs = unresolve_expr_2(lo->value, ui, 0); + if (!rhs) return_NULL; + (void)unresolve_stack_pop(ui, pos, 0); + + pos = unresolve_stack_push(ui, 1, 0, 0); + body = unresolve_expr_2(lo->body, ui, 0); + if (!body) return_NULL; + flags = unresolve_stack_pop(ui, pos, 1); + + lh = MALLOC_ONE_TAGGED(Scheme_Let_Header); + lh->iso.so.type = scheme_compiled_let_void_type; + lh->count = 1; + lh->num_clauses = 1; + + clv = MALLOC_ONE_TAGGED(Scheme_Compiled_Let_Value); + clv->iso.so.type = scheme_compiled_let_value_type; + clv->count = 1; + clv->position = 0; + clv->value = rhs; + clv->flags = flags; + clv->body = body; + + lh->body = (Scheme_Object *)clv; + + return (Scheme_Object *)lh; + } + case scheme_closure_type: + { + return unresolve_closure(e, ui); + } + case scheme_unclosed_procedure_type: + { + return unresolve_closure_data_2((Scheme_Closure_Data *)e, ui); + } + case scheme_inline_variant_type: + { + Scheme_Object *a; + a = SCHEME_VEC_ELS(e)[0]; + a = unresolve_expr_2(a, ui, 0); + if (!a) return_NULL; + return a; + } + case scheme_module_type: + { + return unresolve_module(e, ui); + } + case scheme_define_values_type: + { + return unresolve_define_values(e, ui); + } + case scheme_set_bang_type: + { + Scheme_Set_Bang *sb = (Scheme_Set_Bang *)e, *sb2; + Scheme_Object *var, *val; + var = unresolve_expr_2(sb->var, ui, 0); + if (!var) return_NULL; + if (SAME_TYPE(SCHEME_TYPE(var), scheme_compiled_toplevel_type)) { + SCHEME_TOPLEVEL_FLAGS(var) |= SCHEME_TOPLEVEL_MUTATED; + } + val = unresolve_expr_2(sb->val, ui, 0); + if (!val) return_NULL; + + LOG_UNRESOLVE(printf("SET BANG: %d, %d\n", SCHEME_TYPE(val), SCHEME_TYPE(var))); + + sb2 = MALLOC_ONE_TAGGED(Scheme_Set_Bang); + sb2->so.type = scheme_set_bang_type; + sb2->var = var; + sb2->val = val; + return (Scheme_Object *)sb2; + } + case scheme_varref_form_type: + { + Scheme_Object *a, *b, *o; + a = SCHEME_PTR1_VAL(e); + a = unresolve_expr_2(a, ui, 0); + if (!a) return_NULL; + LOG_UNRESOLVE(printf("unresolve_varref: (a) %d %d\n", e->type, a->type)); + + if (SAME_TYPE(SCHEME_TYPE(a), scheme_compiled_toplevel_type)) { + SCHEME_TOPLEVEL_FLAGS(a) |= SCHEME_TOPLEVEL_MUTATED; + } + + b = SCHEME_PTR2_VAL(e); + b = unresolve_expr_2(b, ui, 0); + if (!b) return_NULL; + LOG_UNRESOLVE(printf(" (b) %d\n", b->type)); + + o = scheme_alloc_object(); + o->type = scheme_varref_form_type; + SCHEME_PTR1_VAL(o) = a; + SCHEME_PTR2_VAL(o) = b; + return o; + } + case scheme_apply_values_type: + { + return unresolve_apply_values(e, ui); + } + case scheme_boxenv_type: /* TODO make sure this is okay */ + { + return unresolve_expr_2(SCHEME_PTR2_VAL(e), ui, 0); + } + case scheme_toplevel_type: + { + e = unresolve_toplevel(e, ui); + return e; + } + case scheme_case_lambda_sequence_type: + { + int i, cnt; + Scheme_Case_Lambda *cl = (Scheme_Case_Lambda *)e, *cl2; + + cl2 = (Scheme_Case_Lambda *)scheme_malloc_tagged(sizeof(Scheme_Case_Lambda) + + ((cl->count - mzFLEX_DELTA) * sizeof(Scheme_Object*))); + cl2->so.type = scheme_case_lambda_sequence_type; + cl2->count = cl->count; + cl2->name = cl->name; /* this may need more handling, see schpriv.c:1456 */ + + cnt = cl->count; + + for (i = 0; i < cnt; i++) { + Scheme_Object *le; + Scheme_Closure_Data *data; + if (SAME_TYPE(SCHEME_TYPE(cl->array[i]), scheme_closure_type)) { + data = ((Scheme_Closure *)cl->array[i])->code; + } else { + data = (Scheme_Closure_Data *)cl->array[i]; + } + + le = unresolve_closure_data_2(data, ui); + if (!le) return_NULL; + + cl2->array[i] = le; + } + + return (Scheme_Object *)cl2; + } + case scheme_let_value_type: + { + Scheme_Let_Value *lv = (Scheme_Let_Value *)e; + Scheme_Object *val, *body; + val = unresolve_expr_2(lv->value, ui, 0); + if (!val) return_NULL; + + body = unresolve_expr_2(lv->body, ui, 0); + if (!body) return_NULL; + + return (Scheme_Object *)unresolve_let_value(lv, ui, val, body); + } + case scheme_quote_syntax_type: + { + Scheme_Quote_Syntax *qs = (Scheme_Quote_Syntax *)e; + Scheme_Local *cqs; + + cqs = (Scheme_Local *)scheme_malloc_atomic_tagged(sizeof(Scheme_Local)); + cqs->iso.so.type = scheme_compiled_quote_syntax_type; + cqs->position = qs->position; + return (Scheme_Object *)cqs; + } + default: + if (SCHEME_TYPE(e) > _scheme_values_types_) { + if (scheme_compiled_duplicate_ok(e, 1) || !(ui->inlining)) + return e; + } + + scheme_signal_error("internal error: no unresolve for: %d", SCHEME_TYPE(e)); + return_NULL; + } +} + +Scheme_Object *scheme_unresolve_top(Scheme_Object* o, Comp_Prefix **cp) { + Scheme_Compilation_Top *top = (Scheme_Compilation_Top *)o; + Scheme_Object *code = top->code; + Resolve_Prefix *rp = top->prefix; + Comp_Prefix *c; + Unresolve_Info *ui; + ui = new_unresolve_info(NULL); + ui->inlining = 0; + code = unresolve_expr_2(code, ui, 0); + if (!code) return_NULL; + c = unresolve_prefix(rp, ui); + *cp = c; + return code; +} + +Scheme_Object *unresolve_closure_data(Scheme_Closure_Data *rdata, Unresolve_Info *ui) { Scheme_Closure_Data *data; Scheme_Object *body; @@ -3352,7 +4623,6 @@ Scheme_Object *unresolve_closure(Scheme_Closure_Data *rdata, Unresolve_Info *ui) } data = MALLOC_ONE_TAGGED(Scheme_Closure_Data); - data->iso.so.type = scheme_compiled_unclosed_procedure_type; SCHEME_CLOSURE_DATA_FLAGS(data) = (SCHEME_CLOSURE_DATA_FLAGS(rdata) @@ -3361,10 +4631,10 @@ Scheme_Object *unresolve_closure(Scheme_Closure_Data *rdata, Unresolve_Info *ui) data->num_params = rdata->num_params; data->name = rdata->name; - pos = unresolve_stack_push(ui, data->num_params, 0); + pos = unresolve_stack_push(ui, data->num_params, 0, 0); if (rdata->closure_size) { - data_pos = unresolve_stack_push(ui, rdata->closure_size, 1); + data_pos = unresolve_stack_push(ui, rdata->closure_size, 1, 0); /* remap closure slots: */ for (i = rdata->closure_size; i--; ) { int mp; @@ -3422,10 +4692,50 @@ static Scheme_Object *unresolve_expr_k(void) return unresolve_expr(e, ui, p->ku.k.i1); } -static void check_nonleaf_rator(Scheme_Object *rator, Unresolve_Info *ui) +Scheme_Object *scheme_unresolve(Scheme_Object *iv, int argc, int *_has_cases) { - if (!scheme_check_leaf_rator(rator, NULL)) - ui->has_non_leaf = 1; + Scheme_Object *o; + Scheme_Closure_Data *data = NULL; + + o = SCHEME_VEC_ELS(iv)[1]; + + if (SAME_TYPE(SCHEME_TYPE(o), scheme_closure_type)) + data = ((Scheme_Closure *)o)->code; + else if (SAME_TYPE(SCHEME_TYPE(o), scheme_unclosed_procedure_type)) + data = (Scheme_Closure_Data *)o; + else if (SAME_TYPE(SCHEME_TYPE(o), scheme_case_lambda_sequence_type) + || SAME_TYPE(SCHEME_TYPE(o), scheme_case_closure_type)) { + Scheme_Case_Lambda *seqin = (Scheme_Case_Lambda *)o; + int i, cnt; + cnt = seqin->count; + if (cnt > 1) *_has_cases = 1; + for (i = 0; i < cnt; i++) { + if (SAME_TYPE(SCHEME_TYPE(seqin->array[i]), scheme_closure_type)) { + /* An empty closure, created at compile time */ + data = ((Scheme_Closure *)seqin->array[i])->code; + } else { + data = (Scheme_Closure_Data *)seqin->array[i]; + } + if ((!(SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_HAS_REST) + && (data->num_params == argc)) + || ((SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_HAS_REST) + && (data->num_params - 1 <= argc))) + break; + else + data = NULL; + } + } else + data = NULL; + + if (!data) + return_NULL; + + if (data->closure_size) + return_NULL; + + /* convert an optimized & resolved closure back to compiled form: */ + return unresolve_closure_data(data, + new_unresolve_info((Scheme_Prefix *)SCHEME_VEC_ELS(iv)[2])); } @@ -3489,7 +4799,7 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a ui->body_size += app->num_args; check_nonleaf_rator(app->args[0], ui); - pos = unresolve_stack_push(ui, app->num_args, 1); + pos = unresolve_stack_push(ui, app->num_args, 1, 0); app2 = scheme_malloc_application(app->num_args+1); @@ -3512,7 +4822,7 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a ui->body_size += 1; check_nonleaf_rator(app->rator, ui); - pos = unresolve_stack_push(ui, 1, 1); + pos = unresolve_stack_push(ui, 1, 1, 0); rator = unresolve_expr(app->rator, ui, 1); if (!rator) return_NULL; @@ -3537,7 +4847,7 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a ui->body_size += 2; check_nonleaf_rator(app->rator, ui); - pos = unresolve_stack_push(ui, 2, 1); + pos = unresolve_stack_push(ui, 2, 1, 0); rator = unresolve_expr(app->rator, ui, 1); if (!rator) return_NULL; @@ -3595,7 +4905,7 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a lh->num_clauses = lv->count; SCHEME_LET_FLAGS(lh) += SCHEME_LET_RECURSIVE; - pos = unresolve_stack_push(ui, lv->count, 0); + pos = unresolve_stack_push(ui, lv->count, 0, 0); for (i = lv->count; i--; ) { rhs = unresolve_expr(lr->procs[i], ui, 0); @@ -3645,12 +4955,12 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a Scheme_Compiled_Let_Value *clv; int *flags, pos; - pos = unresolve_stack_push(ui, 1, 1 /* => post-bind RHS */); + pos = unresolve_stack_push(ui, 1, 1 /* => post-bind RHS */, 0); rhs = unresolve_expr(lo->value, ui, 0); if (!rhs) return_NULL; (void)unresolve_stack_pop(ui, pos, 0); - pos = unresolve_stack_push(ui, 1, 0); + pos = unresolve_stack_push(ui, 1, 0, 0); body = unresolve_expr(lo->body, ui, 0); if (!body) return_NULL; flags = unresolve_stack_pop(ui, pos, 1); @@ -3686,7 +4996,7 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a scheme_hash_set(ui->closures, e, scheme_true); - r = unresolve_closure(SCHEME_COMPILED_CLOS_CODE(e), ui); + r = unresolve_closure_data(SCHEME_COMPILED_CLOS_CODE(e), ui); scheme_hash_set(ui->closures, e, NULL); @@ -3694,7 +5004,7 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a } case scheme_unclosed_procedure_type: { - return unresolve_closure((Scheme_Closure_Data *)e, ui); + return unresolve_closure_data((Scheme_Closure_Data *)e, ui); } default: if (SCHEME_TYPE(e) > _scheme_values_types_) { @@ -3705,52 +5015,6 @@ static Scheme_Object *unresolve_expr(Scheme_Object *e, Unresolve_Info *ui, int a } } -Scheme_Object *scheme_unresolve(Scheme_Object *iv, int argc, int *_has_cases) -{ - Scheme_Object *o; - Scheme_Closure_Data *data = NULL; - - o = SCHEME_VEC_ELS(iv)[1]; - - if (SAME_TYPE(SCHEME_TYPE(o), scheme_closure_type)) - data = ((Scheme_Closure *)o)->code; - else if (SAME_TYPE(SCHEME_TYPE(o), scheme_unclosed_procedure_type)) - data = (Scheme_Closure_Data *)o; - else if (SAME_TYPE(SCHEME_TYPE(o), scheme_case_lambda_sequence_type) - || SAME_TYPE(SCHEME_TYPE(o), scheme_case_closure_type)) { - Scheme_Case_Lambda *seqin = (Scheme_Case_Lambda *)o; - int i, cnt; - cnt = seqin->count; - if (cnt > 1) *_has_cases = 1; - for (i = 0; i < cnt; i++) { - if (SAME_TYPE(SCHEME_TYPE(seqin->array[i]), scheme_closure_type)) { - /* An empty closure, created at compile time */ - data = ((Scheme_Closure *)seqin->array[i])->code; - } else { - data = (Scheme_Closure_Data *)seqin->array[i]; - } - if ((!(SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_HAS_REST) - && (data->num_params == argc)) - || ((SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_HAS_REST) - && (data->num_params - 1 <= argc))) - break; - else - data = NULL; - } - } else - data = NULL; - - if (!data) - return_NULL; - - if (data->closure_size) - return_NULL; - - /* convert an optimized & resolved closure back to compiled form: */ - return unresolve_closure(data, - new_unresolve_info((Scheme_Prefix *)SCHEME_VEC_ELS(iv)[2])); -} - /*========================================================================*/ /* precise GC traversers */ /*========================================================================*/ diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index 2ed38ebc30..45e66df415 100644 --- a/racket/src/racket/src/schminc.h +++ b/racket/src/racket/src/schminc.h @@ -14,7 +14,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1132 +#define EXPECTED_PRIM_COUNT 1133 #define EXPECTED_UNSAFE_COUNT 106 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_EXTFL_COUNT 45 diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 6335f1501c..33846fcf59 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -1415,7 +1415,7 @@ typedef struct { with a chain of Scheme_Compiled_Let_Value records as its body, where there's one Scheme_Compiled_Let_Value for each binding clause. A `let*' is normally expanded to nested `let's before - compilation, but the intermediate format also supposrts `let*', + compilation, but the intermediate format also supports `let*', which is useful mostly for converting a simple enough `letrec' form into `let*. @@ -1542,7 +1542,7 @@ typedef struct Scheme_Let_Value { Scheme_Object *body; } Scheme_Let_Value; -#define SCHEME_LET_AUTOBOX(lh) MZ_OPT_HASH_KEY(&lh->iso) +#define SCHEME_LET_VALUE_AUTOBOX(lv) MZ_OPT_HASH_KEY(&lv->iso) typedef struct Scheme_Let_One { Scheme_Inclhash_Object iso; /* keyex used for eval_type + flonum/unused (and can't be hashed) */ @@ -1563,6 +1563,8 @@ typedef struct Scheme_Let_Void { Scheme_Object *body; } Scheme_Let_Void; +#define SCHEME_LET_VOID_AUTOBOX(lv) MZ_OPT_HASH_KEY(&lv->iso) + typedef struct Scheme_Letrec { Scheme_Object so; mzshort count; @@ -2949,6 +2951,10 @@ Scheme_Object *scheme_register_toplevel_in_comp_prefix(Scheme_Object *var, Comp_ void scheme_register_unbound_toplevel(Scheme_Comp_Env *env, Scheme_Object *id); Scheme_Object *scheme_register_stx_in_prefix(Scheme_Object *var, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); +Scheme_Object *scheme_register_stx_in_comp_prefix(Scheme_Object *var, Comp_Prefix *cp); +void scheme_register_unsafe_in_prefix(Scheme_Comp_Env *env, + Scheme_Compile_Info *rec, int drec, + Scheme_Env *menv); void scheme_merge_undefineds(Scheme_Comp_Env *exp_env, Scheme_Comp_Env *env); void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object *a, @@ -3024,6 +3030,7 @@ Scheme_Object *scheme_make_noninline_proc(Scheme_Object *e); Scheme_Object *scheme_resolve_expr(Scheme_Object *, Resolve_Info *); Scheme_Object *scheme_resolve_list(Scheme_Object *, Resolve_Info *); Scheme_Object *scheme_unresolve(Scheme_Object *, int argv, int *_has_cases); +Scheme_Object *scheme_unresolve_top(Scheme_Object *, Comp_Prefix **); int scheme_check_leaf_rator(Scheme_Object *le, int *_flags); diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 391dba2975..2dd3e70717 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.2.900.8" +#define MZSCHEME_VERSION "6.2.900.9" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 2 #define MZSCHEME_VERSION_Z 900 -#define MZSCHEME_VERSION_W 8 +#define MZSCHEME_VERSION_W 9 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/racket/src/racket/src/validate.c b/racket/src/racket/src/validate.c index d9c9ec7211..c73b0faea4 100644 --- a/racket/src/racket/src/validate.c +++ b/racket/src/racket/src/validate.c @@ -1798,16 +1798,16 @@ static int validate_expr(Mz_CPort *port, Scheme_Object *expr, for (i = 0; i < c; i++, p++) { if ((q < 0) || (p < 0) - || (SCHEME_LET_AUTOBOX(lv) && ((p >= depth) + || (SCHEME_LET_VALUE_AUTOBOX(lv) && ((p >= depth) || ((stack[p] != VALID_BOX) && (stack[p] != VALID_BOX_NOCLEAR)))) - || (!SCHEME_LET_AUTOBOX(lv) && ((p >= letlimit) + || (!SCHEME_LET_VALUE_AUTOBOX(lv) && ((p >= letlimit) || !(WHEN_CAN_RESET_STACK_SLOT(stack[p] == VALID_VAL) || WHEN_CAN_RESET_STACK_SLOT(stack[p] == VALID_VAL_NOCLEAR) || (stack[p] == VALID_UNINIT))))) scheme_ill_formed_code(port); - if (!SCHEME_LET_AUTOBOX(lv)) { + if (!SCHEME_LET_VALUE_AUTOBOX(lv)) { if (stack[p] != VALID_VAL_NOCLEAR) stack[p] = VALID_VAL; } @@ -1827,7 +1827,7 @@ static int validate_expr(Mz_CPort *port, Scheme_Object *expr, if ((c < 0) || (c > delta)) scheme_ill_formed_code(port); - if (SCHEME_LET_AUTOBOX(lv)) { + if (SCHEME_LET_VOID_AUTOBOX(lv)) { for (i = 0; i < c; i++) { stack[--delta] = VALID_BOX; }