diff --git a/racket/src/foreign/foreign.c b/racket/src/foreign/foreign.c index 2a446785c6..53be0119b9 100644 --- a/racket/src/foreign/foreign.c +++ b/racket/src/foreign/foreign.c @@ -1591,7 +1591,7 @@ static int check_cpointer_property(Scheme_Object *v) return 0; } -static Scheme_Object *unwrap_cpointer_property(Scheme_Object *orig_v) +static Scheme_Object *unwrap_cpointer_property_slow(Scheme_Object *orig_v) { Scheme_Object *v = orig_v, *val; int must = 0; @@ -1623,6 +1623,14 @@ static Scheme_Object *unwrap_cpointer_property(Scheme_Object *orig_v) return v; } +static Scheme_Object *unwrap_cpointer_property(Scheme_Object *v) +{ + if (SCHEME_FFIANYPTRP(v)) + return v; + else + return unwrap_cpointer_property_slow(v); +} + int scheme_is_cpointer(Scheme_Object *cp) { return (SCHEME_FFIANYPTRP(cp) || check_cpointer_property(cp)); } @@ -1792,8 +1800,8 @@ static void* SCHEME2C(const char *who, val = _scheme_apply(CTYPE_USER_S2C(type), 1, (Scheme_Object**)(&val)); type = CTYPE_BASETYPE(type); } - val = unwrap_cpointer_property(val); if (CTYPE_PRIMLABEL(type) == FOREIGN_fpointer) { + val = unwrap_cpointer_property(val); /* No need for the SET_CTYPE trick for pointers. */ if (SCHEME_FFICALLBACKP(val)) ((void**)W_OFFSET(dst,delta))[0] = ((ffi_callback_struct*)val)->callback; @@ -1933,6 +1941,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_INTP(val)) { Tsint32 tmp; tmp = MZ_TYPE_CAST(Tsint32, SCHEME_INT_VAL(val)); @@ -1953,6 +1962,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_INTP(val)) { Tuint32 tmp; tmp = MZ_TYPE_CAST(Tuint32, SCHEME_UINT_VAL(val)); @@ -1973,6 +1983,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_INTP(val)) { intptr_t tmp; tmp = MZ_TYPE_CAST(intptr_t, SCHEME_INT_VAL(val)); @@ -1993,6 +2004,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_INTP(val)) { uintptr_t tmp; tmp = MZ_TYPE_CAST(uintptr_t, SCHEME_UINT_VAL(val)); @@ -2013,6 +2025,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_FLOATP(val)) { float tmp; tmp = MZ_TYPE_CAST(float, SCHEME_FLOAT_VAL(val)); @@ -2033,6 +2046,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_FLOATP(val)) { double tmp; tmp = MZ_TYPE_CAST(double, SCHEME_FLOAT_VAL(val)); @@ -2053,6 +2067,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_LONG_DBLP(val)) { mz_long_double tmp; tmp = MZ_NO_TYPE_CAST(mz_long_double, SCHEME_MAYBE_LONG_DBL_VAL(val)); @@ -2073,6 +2088,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_REALP(val)) { double tmp; tmp = MZ_TYPE_CAST(double, scheme_real_to_double(val)); @@ -2093,6 +2109,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (1) { int tmp; tmp = MZ_TYPE_CAST(int, SCHEME_TRUEP(val)); @@ -2113,6 +2130,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) { mzchar* tmp; tmp = MZ_TYPE_CAST(mzchar*, ucs4_string_or_null_to_ucs4_pointer(val)); @@ -2139,6 +2157,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_FALSEP_OR_CHAR_STRINGP(val)) { unsigned short* tmp; tmp = MZ_TYPE_CAST(unsigned short*, ucs4_string_or_null_to_utf16_pointer(val)); @@ -2165,6 +2184,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_FALSEP(val)||SCHEME_BYTE_STRINGP(val)) { char* tmp; tmp = MZ_TYPE_CAST(char*, SCHEME_FALSEP(val)?NULL:SCHEME_BYTE_STR_VAL(val)); @@ -2191,6 +2211,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_FALSEP(val)||SCHEME_PATH_STRINGP(val)) { char* tmp; tmp = MZ_TYPE_CAST(char*, SCHEME_FALSEP(val)?NULL:SCHEME_PATH_VAL(TO_PATH(val))); @@ -2217,6 +2238,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (SCHEME_SYMBOLP(val)) { char* tmp; tmp = MZ_TYPE_CAST(char*, SCHEME_SYM_VAL(val)); @@ -2243,6 +2265,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + val = unwrap_cpointer_property(val); if (SCHEME_FFIANYPTRP(val)) { void* tmp; intptr_t toff; tmp = MZ_TYPE_CAST(void*, SCHEME_FFIANYPTR_VAL(val)); @@ -2273,6 +2296,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + val = unwrap_cpointer_property(val); if (SCHEME_FFIANYPTRP(val)) { void* tmp; intptr_t toff; tmp = MZ_TYPE_CAST(void*, SCHEME_FFIANYPTR_VAL(val)); @@ -2303,6 +2327,7 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } # endif /* FFI_CALLBACK_NEED_INT_CLEAR */ + if (1) { Scheme_Object* tmp; tmp = MZ_TYPE_CAST(Scheme_Object*, val); @@ -2334,6 +2359,7 @@ static void* SCHEME2C(const char *who, case FOREIGN_struct: case FOREIGN_array: case FOREIGN_union: + val = unwrap_cpointer_property(val); if (!SCHEME_FFIANYPTRP(val)) { switch (CTYPE_PRIMLABEL(type)) { case FOREIGN_struct: @@ -4049,6 +4075,8 @@ void ctype_printer(Scheme_Object *ctype, int dis, Scheme_Print_Params *pp) /*****************************************************************************/ /* Initialization */ +static Scheme_Env *ffi_env = NULL; + /* types need to be initialized before places can spawn * types become entries in the GC mark and fixup tables * this function should initialize read-only globals that can be @@ -4057,7 +4085,7 @@ void scheme_init_foreign_globals() { ffi_lib_tag = scheme_make_type(""); ffi_obj_tag = scheme_make_type(""); - ctype_tag = scheme_make_type(""); + ctype_tag = scheme_ctype_type; ffi_callback_tag = scheme_make_type(""); # ifdef MZ_PRECISE_GC GC_register_traversers(ffi_lib_tag, ffi_lib_SIZE, ffi_lib_MARK, ffi_lib_FIXUP, 1, 0); @@ -4065,7 +4093,7 @@ void scheme_init_foreign_globals() GC_register_traversers(ctype_tag, ctype_SIZE, ctype_MARK, ctype_FIXUP, 1, 0); GC_register_traversers(ffi_callback_tag, ffi_callback_SIZE, ffi_callback_MARK, ffi_callback_FIXUP, 1, 0); # endif /* MZ_PRECISE_GC */ - scheme_set_type_printer(ctype_tag, ctype_printer); + scheme_set_type_printer(scheme_ctype_type, ctype_printer); MZ_REGISTER_STATIC(default_sym); default_sym = scheme_intern_symbol("default"); MZ_REGISTER_STATIC(stdcall_sym); @@ -4115,304 +4143,312 @@ void scheme_init_foreign(Scheme_Env *env) Scheme_Object *s; memcpy(&ffi_type_gcpointer, &ffi_type_pointer, sizeof(ffi_type_pointer)); menv = scheme_primitive_module(scheme_intern_symbol("#%foreign"), env); - scheme_add_global("ffi-lib?", - scheme_make_prim_w_arity(foreign_ffi_lib_p, "ffi-lib?", 1, 1), menv); - scheme_add_global("ffi-lib", - scheme_make_prim_w_arity(foreign_ffi_lib, "ffi-lib", 1, 3), menv); - scheme_add_global("ffi-lib-name", - scheme_make_prim_w_arity(foreign_ffi_lib_name, "ffi-lib-name", 1, 1), menv); - scheme_add_global("ffi-obj?", - scheme_make_prim_w_arity(foreign_ffi_obj_p, "ffi-obj?", 1, 1), menv); - scheme_add_global("ffi-obj", - scheme_make_prim_w_arity(foreign_ffi_obj, "ffi-obj", 2, 2), menv); - scheme_add_global("ffi-obj-lib", - scheme_make_prim_w_arity(foreign_ffi_obj_lib, "ffi-obj-lib", 1, 1), menv); - scheme_add_global("ffi-obj-name", - scheme_make_prim_w_arity(foreign_ffi_obj_name, "ffi-obj-name", 1, 1), menv); - scheme_add_global("ctype?", - scheme_make_prim_w_arity(foreign_ctype_p, "ctype?", 1, 1), menv); - scheme_add_global("ctype-basetype", - scheme_make_prim_w_arity(foreign_ctype_basetype, "ctype-basetype", 1, 1), menv); - scheme_add_global("ctype-scheme->c", - scheme_make_prim_w_arity(foreign_ctype_scheme_to_c, "ctype-scheme->c", 1, 1), menv); - scheme_add_global("ctype-c->scheme", - scheme_make_prim_w_arity(foreign_ctype_c_to_scheme, "ctype-c->scheme", 1, 1), menv); - scheme_add_global("make-ctype", - scheme_make_prim_w_arity(foreign_make_ctype, "make-ctype", 3, 3), menv); - scheme_add_global("make-cstruct-type", - scheme_make_prim_w_arity(foreign_make_cstruct_type, "make-cstruct-type", 1, 3), menv); - scheme_add_global("make-array-type", - scheme_make_prim_w_arity(foreign_make_array_type, "make-array-type", 2, 2), menv); - scheme_add_global("make-union-type", - scheme_make_prim_w_arity(foreign_make_union_type, "make-union-type", 1, -1), menv); - scheme_add_global("ffi-callback?", - scheme_make_prim_w_arity(foreign_ffi_callback_p, "ffi-callback?", 1, 1), menv); - scheme_add_global("cpointer?", - scheme_make_prim_w_arity(foreign_cpointer_p, "cpointer?", 1, 1), menv); - scheme_add_global("cpointer-tag", - scheme_make_prim_w_arity(foreign_cpointer_tag, "cpointer-tag", 1, 1), menv); - scheme_add_global("set-cpointer-tag!", - scheme_make_prim_w_arity(foreign_set_cpointer_tag_bang, "set-cpointer-tag!", 2, 2), menv); - scheme_add_global("cpointer-gcable?", - scheme_make_prim_w_arity(foreign_cpointer_gcable_p, "cpointer-gcable?", 1, 1), menv); - scheme_add_global("ctype-sizeof", - scheme_make_prim_w_arity(foreign_ctype_sizeof, "ctype-sizeof", 1, 1), menv); - scheme_add_global("ctype-alignof", - scheme_make_prim_w_arity(foreign_ctype_alignof, "ctype-alignof", 1, 1), menv); - scheme_add_global("compiler-sizeof", - scheme_make_prim_w_arity(foreign_compiler_sizeof, "compiler-sizeof", 1, 1), menv); - scheme_add_global("malloc", - scheme_make_prim_w_arity(foreign_malloc, "malloc", 1, 5), menv); - scheme_add_global("end-stubborn-change", - scheme_make_prim_w_arity(foreign_end_stubborn_change, "end-stubborn-change", 1, 1), menv); - scheme_add_global("free", - scheme_make_prim_w_arity(foreign_free, "free", 1, 1), menv); - scheme_add_global("malloc-immobile-cell", - scheme_make_prim_w_arity(foreign_malloc_immobile_cell, "malloc-immobile-cell", 1, 1), menv); - scheme_add_global("free-immobile-cell", - scheme_make_prim_w_arity(foreign_free_immobile_cell, "free-immobile-cell", 1, 1), menv); - scheme_add_global("ptr-add", - scheme_make_prim_w_arity(foreign_ptr_add, "ptr-add", 2, 3), menv); - scheme_add_global("ptr-add!", - scheme_make_prim_w_arity(foreign_ptr_add_bang, "ptr-add!", 2, 3), menv); - scheme_add_global("offset-ptr?", - scheme_make_prim_w_arity(foreign_offset_ptr_p, "offset-ptr?", 1, 1), menv); - scheme_add_global("ptr-offset", - scheme_make_prim_w_arity(foreign_ptr_offset, "ptr-offset", 1, 1), menv); - scheme_add_global("set-ptr-offset!", - scheme_make_prim_w_arity(foreign_set_ptr_offset_bang, "set-ptr-offset!", 2, 3), menv); - scheme_add_global("vector->cpointer", - scheme_make_prim_w_arity(foreign_vector_to_cpointer, "vector->cpointer", 1, 1), menv); - scheme_add_global("flvector->cpointer", - scheme_make_prim_w_arity(foreign_flvector_to_cpointer, "flvector->cpointer", 1, 1), menv); - scheme_add_global("extflvector->cpointer", - scheme_make_prim_w_arity(foreign_extflvector_to_cpointer, "extflvector->cpointer", 1, 1), menv); - scheme_add_global("memset", - scheme_make_prim_w_arity(foreign_memset, "memset", 3, 5), menv); - scheme_add_global("memmove", - scheme_make_prim_w_arity(foreign_memmove, "memmove", 3, 6), menv); - scheme_add_global("memcpy", - scheme_make_prim_w_arity(foreign_memcpy, "memcpy", 3, 6), menv); - scheme_add_global("ptr-ref", - scheme_make_prim_w_arity(foreign_ptr_ref, "ptr-ref", 2, 4), menv); - scheme_add_global("ptr-set!", - scheme_make_prim_w_arity(foreign_ptr_set_bang, "ptr-set!", 3, 5), menv); - scheme_add_global("ptr-equal?", - scheme_make_prim_w_arity(foreign_ptr_equal_p, "ptr-equal?", 2, 2), menv); - scheme_add_global("make-sized-byte-string", - scheme_make_prim_w_arity(foreign_make_sized_byte_string, "make-sized-byte-string", 2, 2), menv); - scheme_add_global("ffi-call", - scheme_make_prim_w_arity(foreign_ffi_call, "ffi-call", 3, 6), menv); - scheme_add_global("ffi-callback", - scheme_make_prim_w_arity(foreign_ffi_callback, "ffi-callback", 3, 6), menv); - scheme_add_global("saved-errno", - scheme_make_prim_w_arity(foreign_saved_errno, "saved-errno", 0, 0), menv); - scheme_add_global("lookup-errno", - scheme_make_prim_w_arity(foreign_lookup_errno, "lookup-errno", 1, 1), menv); - scheme_add_global("make-stubborn-will-executor", - scheme_make_prim_w_arity(foreign_make_stubborn_will_executor, "make-stubborn-will-executor", 0, 0), menv); - scheme_add_global("make-late-weak-box", - scheme_make_prim_w_arity(foreign_make_late_weak_box, "make-late-weak-box", 1, 1), menv); - scheme_add_global("make-late-weak-hasheq", - scheme_make_prim_w_arity(foreign_make_late_weak_hasheq, "make-late-weak-hasheq", 0, 0), menv); + scheme_add_global_constant("ffi-lib?", + scheme_make_immed_prim(foreign_ffi_lib_p, "ffi-lib?", 1, 1), menv); + scheme_add_global_constant("ffi-lib", + scheme_make_noncm_prim(foreign_ffi_lib, "ffi-lib", 1, 3), menv); + scheme_add_global_constant("ffi-lib-name", + scheme_make_noncm_prim(foreign_ffi_lib_name, "ffi-lib-name", 1, 1), menv); + scheme_add_global_constant("ffi-obj?", + scheme_make_immed_prim(foreign_ffi_obj_p, "ffi-obj?", 1, 1), menv); + scheme_add_global_constant("ffi-obj", + scheme_make_noncm_prim(foreign_ffi_obj, "ffi-obj", 2, 2), menv); + scheme_add_global_constant("ffi-obj-lib", + scheme_make_immed_prim(foreign_ffi_obj_lib, "ffi-obj-lib", 1, 1), menv); + scheme_add_global_constant("ffi-obj-name", + scheme_make_immed_prim(foreign_ffi_obj_name, "ffi-obj-name", 1, 1), menv); + scheme_add_global_constant("ctype?", + scheme_make_immed_prim(foreign_ctype_p, "ctype?", 1, 1), menv); + scheme_add_global_constant("ctype-basetype", + scheme_make_immed_prim(foreign_ctype_basetype, "ctype-basetype", 1, 1), menv); + scheme_add_global_constant("ctype-scheme->c", + scheme_make_immed_prim(foreign_ctype_scheme_to_c, "ctype-scheme->c", 1, 1), menv); + scheme_add_global_constant("ctype-c->scheme", + scheme_make_immed_prim(foreign_ctype_c_to_scheme, "ctype-c->scheme", 1, 1), menv); + scheme_add_global_constant("make-ctype", + scheme_make_noncm_prim(foreign_make_ctype, "make-ctype", 3, 3), menv); + scheme_add_global_constant("make-cstruct-type", + scheme_make_noncm_prim(foreign_make_cstruct_type, "make-cstruct-type", 1, 3), menv); + scheme_add_global_constant("make-array-type", + scheme_make_noncm_prim(foreign_make_array_type, "make-array-type", 2, 2), menv); + scheme_add_global_constant("make-union-type", + scheme_make_noncm_prim(foreign_make_union_type, "make-union-type", 1, -1), menv); + scheme_add_global_constant("ffi-callback?", + scheme_make_immed_prim(foreign_ffi_callback_p, "ffi-callback?", 1, 1), menv); + scheme_add_global_constant("cpointer?", + scheme_make_immed_prim(foreign_cpointer_p, "cpointer?", 1, 1), menv); + scheme_add_global_constant("cpointer-tag", + scheme_make_noncm_prim(foreign_cpointer_tag, "cpointer-tag", 1, 1), menv); + scheme_add_global_constant("set-cpointer-tag!", + scheme_make_noncm_prim(foreign_set_cpointer_tag_bang, "set-cpointer-tag!", 2, 2), menv); + scheme_add_global_constant("cpointer-gcable?", + scheme_make_noncm_prim(foreign_cpointer_gcable_p, "cpointer-gcable?", 1, 1), menv); + scheme_add_global_constant("ctype-sizeof", + scheme_make_immed_prim(foreign_ctype_sizeof, "ctype-sizeof", 1, 1), menv); + scheme_add_global_constant("ctype-alignof", + scheme_make_immed_prim(foreign_ctype_alignof, "ctype-alignof", 1, 1), menv); + scheme_add_global_constant("compiler-sizeof", + scheme_make_immed_prim(foreign_compiler_sizeof, "compiler-sizeof", 1, 1), menv); + scheme_add_global_constant("malloc", + scheme_make_noncm_prim(foreign_malloc, "malloc", 1, 5), menv); + scheme_add_global_constant("end-stubborn-change", + scheme_make_noncm_prim(foreign_end_stubborn_change, "end-stubborn-change", 1, 1), menv); + scheme_add_global_constant("free", + scheme_make_noncm_prim(foreign_free, "free", 1, 1), menv); + scheme_add_global_constant("malloc-immobile-cell", + scheme_make_immed_prim(foreign_malloc_immobile_cell, "malloc-immobile-cell", 1, 1), menv); + scheme_add_global_constant("free-immobile-cell", + scheme_make_noncm_prim(foreign_free_immobile_cell, "free-immobile-cell", 1, 1), menv); + scheme_add_global_constant("ptr-add", + scheme_make_noncm_prim(foreign_ptr_add, "ptr-add", 2, 3), menv); + scheme_add_global_constant("ptr-add!", + scheme_make_noncm_prim(foreign_ptr_add_bang, "ptr-add!", 2, 3), menv); + scheme_add_global_constant("offset-ptr?", + scheme_make_noncm_prim(foreign_offset_ptr_p, "offset-ptr?", 1, 1), menv); + scheme_add_global_constant("ptr-offset", + scheme_make_noncm_prim(foreign_ptr_offset, "ptr-offset", 1, 1), menv); + scheme_add_global_constant("set-ptr-offset!", + scheme_make_noncm_prim(foreign_set_ptr_offset_bang, "set-ptr-offset!", 2, 3), menv); + scheme_add_global_constant("vector->cpointer", + scheme_make_immed_prim(foreign_vector_to_cpointer, "vector->cpointer", 1, 1), menv); + scheme_add_global_constant("flvector->cpointer", + scheme_make_immed_prim(foreign_flvector_to_cpointer, "flvector->cpointer", 1, 1), menv); + scheme_add_global_constant("extflvector->cpointer", + scheme_make_immed_prim(foreign_extflvector_to_cpointer, "extflvector->cpointer", 1, 1), menv); + scheme_add_global_constant("memset", + scheme_make_noncm_prim(foreign_memset, "memset", 3, 5), menv); + scheme_add_global_constant("memmove", + scheme_make_noncm_prim(foreign_memmove, "memmove", 3, 6), menv); + scheme_add_global_constant("memcpy", + scheme_make_noncm_prim(foreign_memcpy, "memcpy", 3, 6), menv); + scheme_add_global_constant("ptr-ref", + scheme_make_noncm_prim(foreign_ptr_ref, "ptr-ref", 2, 4), menv); + scheme_add_global_constant("ptr-set!", + scheme_make_noncm_prim(foreign_ptr_set_bang, "ptr-set!", 3, 5), menv); + scheme_add_global_constant("ptr-equal?", + scheme_make_noncm_prim(foreign_ptr_equal_p, "ptr-equal?", 2, 2), menv); + scheme_add_global_constant("make-sized-byte-string", + scheme_make_noncm_prim(foreign_make_sized_byte_string, "make-sized-byte-string", 2, 2), menv); + scheme_add_global_constant("ffi-call", + scheme_make_noncm_prim(foreign_ffi_call, "ffi-call", 3, 6), menv); + scheme_add_global_constant("ffi-callback", + scheme_make_noncm_prim(foreign_ffi_callback, "ffi-callback", 3, 6), menv); + scheme_add_global_constant("saved-errno", + scheme_make_immed_prim(foreign_saved_errno, "saved-errno", 0, 0), menv); + scheme_add_global_constant("lookup-errno", + scheme_make_immed_prim(foreign_lookup_errno, "lookup-errno", 1, 1), menv); + scheme_add_global_constant("make-stubborn-will-executor", + scheme_make_immed_prim(foreign_make_stubborn_will_executor, "make-stubborn-will-executor", 0, 0), menv); + scheme_add_global_constant("make-late-weak-box", + scheme_make_immed_prim(foreign_make_late_weak_box, "make-late-weak-box", 1, 1), menv); + scheme_add_global_constant("make-late-weak-hasheq", + scheme_make_immed_prim(foreign_make_late_weak_hasheq, "make-late-weak-hasheq", 0, 0), menv); s = scheme_intern_symbol("void"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_void)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_void); - scheme_add_global("_void", (Scheme_Object*)t, menv); + scheme_add_global_constant("_void", (Scheme_Object*)t, menv); s = scheme_intern_symbol("int8"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_sint8)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_int8); - scheme_add_global("_int8", (Scheme_Object*)t, menv); + scheme_add_global_constant("_int8", (Scheme_Object*)t, menv); s = scheme_intern_symbol("uint8"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_uint8)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_uint8); - scheme_add_global("_uint8", (Scheme_Object*)t, menv); + scheme_add_global_constant("_uint8", (Scheme_Object*)t, menv); s = scheme_intern_symbol("int16"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_sint16)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_int16); - scheme_add_global("_int16", (Scheme_Object*)t, menv); + scheme_add_global_constant("_int16", (Scheme_Object*)t, menv); s = scheme_intern_symbol("uint16"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_uint16)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_uint16); - scheme_add_global("_uint16", (Scheme_Object*)t, menv); + scheme_add_global_constant("_uint16", (Scheme_Object*)t, menv); s = scheme_intern_symbol("int32"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_sint32)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_int32); - scheme_add_global("_int32", (Scheme_Object*)t, menv); + scheme_add_global_constant("_int32", (Scheme_Object*)t, menv); s = scheme_intern_symbol("uint32"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_uint32)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_uint32); - scheme_add_global("_uint32", (Scheme_Object*)t, menv); + scheme_add_global_constant("_uint32", (Scheme_Object*)t, menv); s = scheme_intern_symbol("int64"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_sint64)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_int64); - scheme_add_global("_int64", (Scheme_Object*)t, menv); + scheme_add_global_constant("_int64", (Scheme_Object*)t, menv); s = scheme_intern_symbol("uint64"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_uint64)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_uint64); - scheme_add_global("_uint64", (Scheme_Object*)t, menv); + scheme_add_global_constant("_uint64", (Scheme_Object*)t, menv); s = scheme_intern_symbol("fixint"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_sint32)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_fixint); - scheme_add_global("_fixint", (Scheme_Object*)t, menv); + scheme_add_global_constant("_fixint", (Scheme_Object*)t, menv); s = scheme_intern_symbol("ufixint"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_uint32)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_ufixint); - scheme_add_global("_ufixint", (Scheme_Object*)t, menv); + scheme_add_global_constant("_ufixint", (Scheme_Object*)t, menv); s = scheme_intern_symbol("fixnum"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_smzintptr)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_fixnum); - scheme_add_global("_fixnum", (Scheme_Object*)t, menv); + scheme_add_global_constant("_fixnum", (Scheme_Object*)t, menv); s = scheme_intern_symbol("ufixnum"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_umzintptr)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_ufixnum); - scheme_add_global("_ufixnum", (Scheme_Object*)t, menv); + scheme_add_global_constant("_ufixnum", (Scheme_Object*)t, menv); s = scheme_intern_symbol("float"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_float)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_float); - scheme_add_global("_float", (Scheme_Object*)t, menv); + scheme_add_global_constant("_float", (Scheme_Object*)t, menv); s = scheme_intern_symbol("double"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_double)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_double); - scheme_add_global("_double", (Scheme_Object*)t, menv); + scheme_add_global_constant("_double", (Scheme_Object*)t, menv); s = scheme_intern_symbol("longdouble"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_slongdouble)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_longdouble); - scheme_add_global("_longdouble", (Scheme_Object*)t, menv); + scheme_add_global_constant("_longdouble", (Scheme_Object*)t, menv); s = scheme_intern_symbol("double*"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_double)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_doubleS); - scheme_add_global("_double*", (Scheme_Object*)t, menv); + scheme_add_global_constant("_double*", (Scheme_Object*)t, menv); s = scheme_intern_symbol("bool"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_sint)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_bool); - scheme_add_global("_bool", (Scheme_Object*)t, menv); + scheme_add_global_constant("_bool", (Scheme_Object*)t, menv); s = scheme_intern_symbol("string/ucs-4"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_gcpointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_string_ucs_4); - scheme_add_global("_string/ucs-4", (Scheme_Object*)t, menv); + scheme_add_global_constant("_string/ucs-4", (Scheme_Object*)t, menv); s = scheme_intern_symbol("string/utf-16"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_gcpointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_string_utf_16); - scheme_add_global("_string/utf-16", (Scheme_Object*)t, menv); + scheme_add_global_constant("_string/utf-16", (Scheme_Object*)t, menv); s = scheme_intern_symbol("bytes"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_gcpointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_bytes); - scheme_add_global("_bytes", (Scheme_Object*)t, menv); + scheme_add_global_constant("_bytes", (Scheme_Object*)t, menv); s = scheme_intern_symbol("path"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_gcpointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_path); - scheme_add_global("_path", (Scheme_Object*)t, menv); + scheme_add_global_constant("_path", (Scheme_Object*)t, menv); s = scheme_intern_symbol("symbol"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_pointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_symbol); - scheme_add_global("_symbol", (Scheme_Object*)t, menv); + scheme_add_global_constant("_symbol", (Scheme_Object*)t, menv); s = scheme_intern_symbol("pointer"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_pointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_pointer); - scheme_add_global("_pointer", (Scheme_Object*)t, menv); + scheme_add_global_constant("_pointer", (Scheme_Object*)t, menv); s = scheme_intern_symbol("gcpointer"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_gcpointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_gcpointer); - scheme_add_global("_gcpointer", (Scheme_Object*)t, menv); + scheme_add_global_constant("_gcpointer", (Scheme_Object*)t, menv); s = scheme_intern_symbol("scheme"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_gcpointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_scheme); - scheme_add_global("_scheme", (Scheme_Object*)t, menv); + scheme_add_global_constant("_scheme", (Scheme_Object*)t, menv); s = scheme_intern_symbol("fpointer"); t = (ctype_struct*)scheme_malloc_tagged(sizeof(ctype_struct)); t->so.type = ctype_tag; t->basetype = (s); t->scheme_to_c = ((Scheme_Object*)(void*)(&ffi_type_pointer)); t->c_to_scheme = ((Scheme_Object*)FOREIGN_fpointer); - scheme_add_global("_fpointer", (Scheme_Object*)t, menv); + scheme_add_global_constant("_fpointer", (Scheme_Object*)t, menv); scheme_add_global_constant("prop:cpointer", scheme_cpointer_property, menv); scheme_finish_primitive_module(menv); scheme_protect_primitive_provide(menv, NULL); + MZ_REGISTER_STATIC(ffi_env); + ffi_env = menv; +} + +Scheme_Env *scheme_get_foreign_env() { + return ffi_env; } /*****************************************************************************/ #else /* DONT_USE_FOREIGN */ +static Scheme_Env *ffi_env = NULL; + int scheme_is_cpointer(Scheme_Object *cp) { return (SCHEME_FALSEP(cp) @@ -4449,136 +4485,142 @@ void scheme_init_foreign(Scheme_Env *env) /* Create a dummy module. */ Scheme_Env *menv; menv = scheme_primitive_module(scheme_intern_symbol("#%foreign"), env); - scheme_add_global("ffi-lib?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-lib?", 1, 1), menv); - scheme_add_global("ffi-lib", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-lib", 1, 3), menv); - scheme_add_global("ffi-lib-name", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-lib-name", 1, 1), menv); - scheme_add_global("ffi-obj?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-obj?", 1, 1), menv); - scheme_add_global("ffi-obj", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-obj", 2, 2), menv); - scheme_add_global("ffi-obj-lib", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-obj-lib", 1, 1), menv); - scheme_add_global("ffi-obj-name", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-obj-name", 1, 1), menv); - scheme_add_global("ctype?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ctype?", 1, 1), menv); - scheme_add_global("ctype-basetype", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ctype-basetype", 1, 1), menv); - scheme_add_global("ctype-scheme->c", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ctype-scheme->c", 1, 1), menv); - scheme_add_global("ctype-c->scheme", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ctype-c->scheme", 1, 1), menv); - scheme_add_global("make-ctype", - scheme_make_prim_w_arity((Scheme_Prim *)foreign_make_ctype, "make-ctype", 3, 3), menv); - scheme_add_global("make-cstruct-type", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "make-cstruct-type", 1, 3), menv); - scheme_add_global("make-array-type", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "make-array-type", 2, 2), menv); - scheme_add_global("make-union-type", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "make-union-type", 1, -1), menv); - scheme_add_global("ffi-callback?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-callback?", 1, 1), menv); - scheme_add_global("cpointer?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "cpointer?", 1, 1), menv); - scheme_add_global("cpointer-tag", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "cpointer-tag", 1, 1), menv); - scheme_add_global("set-cpointer-tag!", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "set-cpointer-tag!", 2, 2), menv); - scheme_add_global("cpointer-gcable?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "cpointer-gcable?", 1, 1), menv); - scheme_add_global("ctype-sizeof", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ctype-sizeof", 1, 1), menv); - scheme_add_global("ctype-alignof", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ctype-alignof", 1, 1), menv); - scheme_add_global("compiler-sizeof", - scheme_make_prim_w_arity((Scheme_Prim *)foreign_compiler_sizeof, "compiler-sizeof", 1, 1), menv); - scheme_add_global("malloc", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "malloc", 1, 5), menv); - scheme_add_global("end-stubborn-change", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "end-stubborn-change", 1, 1), menv); - scheme_add_global("free", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "free", 1, 1), menv); - scheme_add_global("malloc-immobile-cell", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "malloc-immobile-cell", 1, 1), menv); - scheme_add_global("free-immobile-cell", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "free-immobile-cell", 1, 1), menv); - scheme_add_global("ptr-add", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ptr-add", 2, 3), menv); - scheme_add_global("ptr-add!", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ptr-add!", 2, 3), menv); - scheme_add_global("offset-ptr?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "offset-ptr?", 1, 1), menv); - scheme_add_global("ptr-offset", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ptr-offset", 1, 1), menv); - scheme_add_global("set-ptr-offset!", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "set-ptr-offset!", 2, 3), menv); - scheme_add_global("vector->cpointer", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "vector->cpointer", 1, 1), menv); - scheme_add_global("flvector->cpointer", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "flvector->cpointer", 1, 1), menv); - scheme_add_global("extflvector->cpointer", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "extflvector->cpointer", 1, 1), menv); - scheme_add_global("memset", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "memset", 3, 5), menv); - scheme_add_global("memmove", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "memmove", 3, 6), menv); - scheme_add_global("memcpy", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "memcpy", 3, 6), menv); - scheme_add_global("ptr-ref", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ptr-ref", 2, 4), menv); - scheme_add_global("ptr-set!", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ptr-set!", 3, 5), menv); - scheme_add_global("ptr-equal?", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ptr-equal?", 2, 2), menv); - scheme_add_global("make-sized-byte-string", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "make-sized-byte-string", 2, 2), menv); - scheme_add_global("ffi-call", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-call", 3, 6), menv); - scheme_add_global("ffi-callback", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "ffi-callback", 3, 6), menv); - scheme_add_global("saved-errno", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "saved-errno", 0, 0), menv); - scheme_add_global("lookup-errno", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "lookup-errno", 1, 1), menv); - scheme_add_global("make-stubborn-will-executor", - scheme_make_prim_w_arity((Scheme_Prim *)foreign_make_stubborn_will_executor, "make-stubborn-will-executor", 0, 0), menv); - scheme_add_global("make-late-weak-box", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "make-late-weak-box", 1, 1), menv); - scheme_add_global("make-late-weak-hasheq", - scheme_make_prim_w_arity((Scheme_Prim *)unimplemented, "make-late-weak-hasheq", 0, 0), menv); - scheme_add_global("_void", scheme_false, menv); - scheme_add_global("_int8", scheme_false, menv); - scheme_add_global("_uint8", scheme_false, menv); - scheme_add_global("_int16", scheme_false, menv); - scheme_add_global("_uint16", scheme_false, menv); - scheme_add_global("_int32", scheme_false, menv); - scheme_add_global("_uint32", scheme_false, menv); - scheme_add_global("_int64", scheme_false, menv); - scheme_add_global("_uint64", scheme_false, menv); - scheme_add_global("_fixint", scheme_false, menv); - scheme_add_global("_ufixint", scheme_false, menv); - scheme_add_global("_fixnum", scheme_false, menv); - scheme_add_global("_ufixnum", scheme_false, menv); - scheme_add_global("_float", scheme_false, menv); - scheme_add_global("_double", scheme_false, menv); - scheme_add_global("_longdouble", scheme_false, menv); - scheme_add_global("_double*", scheme_false, menv); - scheme_add_global("_bool", scheme_false, menv); - scheme_add_global("_string/ucs-4", scheme_false, menv); - scheme_add_global("_string/utf-16", scheme_false, menv); - scheme_add_global("_bytes", scheme_false, menv); - scheme_add_global("_path", scheme_false, menv); - scheme_add_global("_symbol", scheme_false, menv); - scheme_add_global("_pointer", scheme_false, menv); - scheme_add_global("_gcpointer", scheme_false, menv); - scheme_add_global("_scheme", scheme_false, menv); - scheme_add_global("_fpointer", scheme_false, menv); + scheme_add_global_constant("ffi-lib?", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ffi-lib?", 1, 1), menv); + scheme_add_global_constant("ffi-lib", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ffi-lib", 1, 3), menv); + scheme_add_global_constant("ffi-lib-name", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ffi-lib-name", 1, 1), menv); + scheme_add_global_constant("ffi-obj?", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ffi-obj?", 1, 1), menv); + scheme_add_global_constant("ffi-obj", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ffi-obj", 2, 2), menv); + scheme_add_global_constant("ffi-obj-lib", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ffi-obj-lib", 1, 1), menv); + scheme_add_global_constant("ffi-obj-name", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ffi-obj-name", 1, 1), menv); + scheme_add_global_constant("ctype?", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ctype?", 1, 1), menv); + scheme_add_global_constant("ctype-basetype", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ctype-basetype", 1, 1), menv); + scheme_add_global_constant("ctype-scheme->c", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ctype-scheme->c", 1, 1), menv); + scheme_add_global_constant("ctype-c->scheme", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ctype-c->scheme", 1, 1), menv); + scheme_add_global_constant("make-ctype", + scheme_make_noncm_prim((Scheme_Prim *)foreign_make_ctype, "make-ctype", 3, 3), menv); + scheme_add_global_constant("make-cstruct-type", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "make-cstruct-type", 1, 3), menv); + scheme_add_global_constant("make-array-type", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "make-array-type", 2, 2), menv); + scheme_add_global_constant("make-union-type", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "make-union-type", 1, -1), menv); + scheme_add_global_constant("ffi-callback?", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ffi-callback?", 1, 1), menv); + scheme_add_global_constant("cpointer?", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "cpointer?", 1, 1), menv); + scheme_add_global_constant("cpointer-tag", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "cpointer-tag", 1, 1), menv); + scheme_add_global_constant("set-cpointer-tag!", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "set-cpointer-tag!", 2, 2), menv); + scheme_add_global_constant("cpointer-gcable?", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "cpointer-gcable?", 1, 1), menv); + scheme_add_global_constant("ctype-sizeof", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ctype-sizeof", 1, 1), menv); + scheme_add_global_constant("ctype-alignof", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "ctype-alignof", 1, 1), menv); + scheme_add_global_constant("compiler-sizeof", + scheme_make_immed_prim((Scheme_Prim *)foreign_compiler_sizeof, "compiler-sizeof", 1, 1), menv); + scheme_add_global_constant("malloc", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "malloc", 1, 5), menv); + scheme_add_global_constant("end-stubborn-change", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "end-stubborn-change", 1, 1), menv); + scheme_add_global_constant("free", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "free", 1, 1), menv); + scheme_add_global_constant("malloc-immobile-cell", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "malloc-immobile-cell", 1, 1), menv); + scheme_add_global_constant("free-immobile-cell", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "free-immobile-cell", 1, 1), menv); + scheme_add_global_constant("ptr-add", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ptr-add", 2, 3), menv); + scheme_add_global_constant("ptr-add!", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ptr-add!", 2, 3), menv); + scheme_add_global_constant("offset-ptr?", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "offset-ptr?", 1, 1), menv); + scheme_add_global_constant("ptr-offset", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ptr-offset", 1, 1), menv); + scheme_add_global_constant("set-ptr-offset!", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "set-ptr-offset!", 2, 3), menv); + scheme_add_global_constant("vector->cpointer", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "vector->cpointer", 1, 1), menv); + scheme_add_global_constant("flvector->cpointer", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "flvector->cpointer", 1, 1), menv); + scheme_add_global_constant("extflvector->cpointer", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "extflvector->cpointer", 1, 1), menv); + scheme_add_global_constant("memset", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "memset", 3, 5), menv); + scheme_add_global_constant("memmove", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "memmove", 3, 6), menv); + scheme_add_global_constant("memcpy", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "memcpy", 3, 6), menv); + scheme_add_global_constant("ptr-ref", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ptr-ref", 2, 4), menv); + scheme_add_global_constant("ptr-set!", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ptr-set!", 3, 5), menv); + scheme_add_global_constant("ptr-equal?", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ptr-equal?", 2, 2), menv); + scheme_add_global_constant("make-sized-byte-string", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "make-sized-byte-string", 2, 2), menv); + scheme_add_global_constant("ffi-call", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ffi-call", 3, 6), menv); + scheme_add_global_constant("ffi-callback", + scheme_make_noncm_prim((Scheme_Prim *)unimplemented, "ffi-callback", 3, 6), menv); + scheme_add_global_constant("saved-errno", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "saved-errno", 0, 0), menv); + scheme_add_global_constant("lookup-errno", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "lookup-errno", 1, 1), menv); + scheme_add_global_constant("make-stubborn-will-executor", + scheme_make_immed_prim((Scheme_Prim *)foreign_make_stubborn_will_executor, "make-stubborn-will-executor", 0, 0), menv); + scheme_add_global_constant("make-late-weak-box", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "make-late-weak-box", 1, 1), menv); + scheme_add_global_constant("make-late-weak-hasheq", + scheme_make_immed_prim((Scheme_Prim *)unimplemented, "make-late-weak-hasheq", 0, 0), menv); + scheme_add_global_constant("_void", scheme_false, menv); + scheme_add_global_constant("_int8", scheme_false, menv); + scheme_add_global_constant("_uint8", scheme_false, menv); + scheme_add_global_constant("_int16", scheme_false, menv); + scheme_add_global_constant("_uint16", scheme_false, menv); + scheme_add_global_constant("_int32", scheme_false, menv); + scheme_add_global_constant("_uint32", scheme_false, menv); + scheme_add_global_constant("_int64", scheme_false, menv); + scheme_add_global_constant("_uint64", scheme_false, menv); + scheme_add_global_constant("_fixint", scheme_false, menv); + scheme_add_global_constant("_ufixint", scheme_false, menv); + scheme_add_global_constant("_fixnum", scheme_false, menv); + scheme_add_global_constant("_ufixnum", scheme_false, menv); + scheme_add_global_constant("_float", scheme_false, menv); + scheme_add_global_constant("_double", scheme_false, menv); + scheme_add_global_constant("_longdouble", scheme_false, menv); + scheme_add_global_constant("_double*", scheme_false, menv); + scheme_add_global_constant("_bool", scheme_false, menv); + scheme_add_global_constant("_string/ucs-4", scheme_false, menv); + scheme_add_global_constant("_string/utf-16", scheme_false, menv); + scheme_add_global_constant("_bytes", scheme_false, menv); + scheme_add_global_constant("_path", scheme_false, menv); + scheme_add_global_constant("_symbol", scheme_false, menv); + scheme_add_global_constant("_pointer", scheme_false, menv); + scheme_add_global_constant("_gcpointer", scheme_false, menv); + scheme_add_global_constant("_scheme", scheme_false, menv); + scheme_add_global_constant("_fpointer", scheme_false, menv); scheme_add_global_constant("prop:cpointer", scheme_cpointer_property, menv); scheme_finish_primitive_module(menv); scheme_protect_primitive_provide(menv, NULL); + MZ_REGISTER_STATIC(ffi_env); + ffi_env = menv; +} + +Scheme_Env *scheme_get_foreign_env() { + return ffi_env; } #endif diff --git a/racket/src/foreign/foreign.rktc b/racket/src/foreign/foreign.rktc index da8074964d..4e547856eb 100755 --- a/racket/src/foreign/foreign.rktc +++ b/racket/src/foreign/foreign.rktc @@ -368,14 +368,14 @@ static uintptr_t adjustment; } /* (ffi-obj-lib ffi-obj) -> ffi-lib */ -@cdefine[ffi-obj-lib 1]{ +@cdefine[ffi-obj-lib 1 #:kind immed]{ if (!SCHEME_FFIOBJP(argv[0])) scheme_wrong_contract(MYNAME, "ffi-obj?", 0, argc, argv); return (Scheme_Object*)(((ffi_obj_struct*)argv[0])->lib); } /* (ffi-obj-name ffi-obj) -> string */ -@cdefine[ffi-obj-name 1]{ +@cdefine[ffi-obj-name 1 #:kind immed]{ if (!SCHEME_FFIOBJP(argv[0])) scheme_wrong_contract(MYNAME, "ffi-obj?", 0, argc, argv); return scheme_make_byte_string(((ffi_obj_struct*)argv[0])->name); @@ -619,10 +619,12 @@ static Scheme_Object *utf16_pointer_to_ucs4_string(unsigned short *utf) [s->c (prop 's->c (and macro @list{SCHEME_@|macro|_VAL}))] [c->s (prop 'c->s)] [offset (prop 'offset #f)] + [unwrap? (prop 'unwrap? #f)] [cast (prop 'cast 'MZ_TYPE_CAST)]) (output (describe-type stype cname ftype ctype pred s->c c->s offset)) `(,type (stype ,stype) (cname ,cname) (ftype ,ftype) (ctype ,ctype) - (macro ,macro) (pred ,pred) (s->c ,s->c) (c->s ,c->s) (offset ,offset) (cast ,cast)))) + (macro ,macro) (pred ,pred) (s->c ,s->c) (c->s ,c->s) (offset ,offset) + (unwrap? ,unwrap?) (cast ,cast)))) (define (defctype name . args) (set! types (append types (list (make-ctype name args))))) @@ -648,11 +650,12 @@ static Scheme_Object *utf16_pointer_to_ucs4_string(unsigned short *utf) [c->s (id 'c->s)] [offset (id 'offset)] [ptr? (id 'ptr?)] + [unwrap? (id 'unwrap?)] [cast (id 'cast)]) #'(maplines #:semicolons? 'semi? (lambda (t) (define data (cdr t)) - (define (get sym) (cadr (assq sym data))) + (define (get sym) (cadr (assq sym data))) (let* ([stype (get 'stype)] [cname (get 'cname)] [ftype (get 'ftype)] @@ -664,6 +667,7 @@ static Scheme_Object *utf16_pointer_to_ucs4_string(unsigned short *utf) [offset (get 'offset)] [ptr? (or (equal? "pointer" ftype) (equal? "gcpointer" ftype))] + [unwrap? (get 'unwrap?)] [cast (get 'cast)]) body ...)) types)))])) @@ -867,12 +871,14 @@ static Scheme_Object *utf16_pointer_to_ucs4_string(unsigned short *utf) * value, either a cpointer object or #f is returned. */ @(defctype 'pointer 'ctype "void*" + 'unwrap? #t 'macro "FFIANYPTR" 'offset "FFIANYPTR" 'c->s "scheme_make_foreign_external_cpointer") @(defctype 'gcpointer 'ftype "gcpointer" + 'unwrap? #t 'ctype "void*" 'macro "FFIANYPTR" 'offset "FFIANYPTR" @@ -899,7 +905,7 @@ static Scheme_Object *utf16_pointer_to_ucs4_string(unsigned short *utf) /* Special type, not actually used for anything except to mark values * that are treated like pointers but not referenced. Used for * creating function types. */ -@(defctype 'fpointer 'ftype "pointer" 'ctype "void*") +@(defctype 'fpointer 'ftype "pointer" 'ctype "void*" 'unwrap? #t) typedef union _ForeignAny { @(map-types (when ctype @list{@ctype x_@cname})) @@ -949,20 +955,20 @@ static ffi_type ffi_type_gcpointer; #define CTYPE_ARG_PRIMTYPE(x) ((CTYPE_PRIMLABEL(x) == FOREIGN_array) ? &ffi_type_pointer : CTYPE_PRIMTYPE(x)) /* Returns #f for primitive types. */ -@cdefine[ctype-basetype 1]{ +@cdefine[ctype-basetype 1 #:kind immed]{ if (!SCHEME_CTYPEP(argv[0])) scheme_wrong_contract(MYNAME, "ctype?", 0, argc, argv); return CTYPE_BASETYPE(argv[0]); } -@cdefine[ctype-scheme->c 1]{ +@cdefine[ctype-scheme->c 1 #:kind immed]{ if (!SCHEME_CTYPEP(argv[0])) scheme_wrong_contract(MYNAME, "ctype?", 0, argc, argv); return (CTYPE_PRIMP(argv[0])) ? scheme_false : ((ctype_struct*)(argv[0]))->scheme_to_c; } -@cdefine[ctype-c->scheme 1]{ +@cdefine[ctype-c->scheme 1 #:kind immed]{ if (!SCHEME_CTYPEP(argv[0])) scheme_wrong_contract(MYNAME, "ctype?", 0, argc, argv); return (CTYPE_PRIMP(argv[0])) ? scheme_false : @@ -1369,7 +1375,7 @@ static int check_cpointer_property(Scheme_Object *v) return 0; } -static Scheme_Object *unwrap_cpointer_property(Scheme_Object *orig_v) +static Scheme_Object *unwrap_cpointer_property_slow(Scheme_Object *orig_v) { Scheme_Object *v = orig_v, *val; int must = 0; @@ -1401,11 +1407,19 @@ static Scheme_Object *unwrap_cpointer_property(Scheme_Object *orig_v) return v; } +static Scheme_Object *unwrap_cpointer_property(Scheme_Object *v) +{ + if (SCHEME_FFIANYPTRP(v)) + return v; + else + return unwrap_cpointer_property_slow(v); +} + int scheme_is_cpointer(Scheme_Object *cp) { return (SCHEME_FFIANYPTRP(cp) || check_cpointer_property(cp)); } -@cdefine[cpointer? 1]{ +@cdefine[cpointer? 1 #:kind immed]{ return (scheme_is_cpointer(argv[0]) ? scheme_true : scheme_false); @@ -1537,8 +1551,8 @@ static void* SCHEME2C(const char *who, val = _scheme_apply(CTYPE_USER_S2C(type), 1, (Scheme_Object**)(&val)); type = CTYPE_BASETYPE(type); } - val = unwrap_cpointer_property(val); if (CTYPE_PRIMLABEL(type) == FOREIGN_fpointer) { + val = unwrap_cpointer_property(val); /* No need for the SET_CTYPE trick for pointers. */ if (SCHEME_FFICALLBACKP(val)) ((void**)W_OFFSET(dst,delta))[0] = ((ffi_callback_struct*)val)->callback; @@ -1591,6 +1605,9 @@ static void* SCHEME2C(const char *who, ((int*)W_OFFSET(dst,delta))[0] = 0; } } + @(if unwrap? + @list{val = unwrap_cpointer_property(val);} + null) if (@f[pred]) { @ctype tmp@";"@and[offset]{ intptr_t toff@";"} tmp = @cast(@ctype, @f[s->c]); @@ -1627,6 +1644,7 @@ static void* SCHEME2C(const char *who, case FOREIGN_struct: case FOREIGN_array: case FOREIGN_union: + val = unwrap_cpointer_property(val); if (!SCHEME_FFIANYPTRP(val)) { switch (CTYPE_PRIMLABEL(type)) { case FOREIGN_struct: @@ -1670,7 +1688,7 @@ static void* SCHEME2C(const char *who, /* C type information */ /* (ctype-sizeof type) -> int, returns 0 for void, error if not a C type */ -@cdefine[ctype-sizeof 1]{ +@cdefine[ctype-sizeof 1 #:kind immed]{ intptr_t size; size = ctype_sizeof(argv[0]); if (size >= 0) return scheme_make_integer(size); @@ -1679,7 +1697,7 @@ static void* SCHEME2C(const char *who, } /* (ctype-alignof type) -> int, returns 0 for void, error if not a C type */ -@cdefine[ctype-alignof 1]{ +@cdefine[ctype-alignof 1 #:kind immed]{ Scheme_Object *type; type = get_ctype_base(argv[0]); if (type == NULL) scheme_wrong_contract(MYNAME, "ctype?", 0, argc, argv); @@ -1691,7 +1709,7 @@ static void* SCHEME2C(const char *who, * The symbols are in 'int 'char 'void 'short 'long '*, order does not matter, * when a single symbol is used, a list is not needed. * (This is about actual C types, not C type objects.) */ -@cdefine[compiler-sizeof 1]{ +@cdefine[compiler-sizeof 1 #:kind immed]{ int res=0; int basetype = 0; /* 1=int, 2=char, 3=void, 4=float, 5=double */ int intsize = 0; /* "short" => decrement, "long" => increment */ @@ -1915,7 +1933,7 @@ static void* SCHEME2C(const char *who, } /* (malloc-immobile-cell v) */ -@cdefine[malloc-immobile-cell 1]{ +@cdefine[malloc-immobile-cell 1 #:kind immed]{ void *p; p = scheme_malloc_immobile_box(argv[0]); return scheme_make_foreign_external_cpointer(p); /* <- beware: macro duplicates `p' */ @@ -2129,19 +2147,19 @@ static Scheme_Object *do_memop(const char *who, int mode, return scheme_void; } -@cdefine[vector->cpointer 1]{ +@cdefine[vector->cpointer 1 #:kind immed]{ if (!SCHEME_VECTORP(argv[0])) scheme_wrong_contract(MYNAME, "vector?", 0, argc, argv); return scheme_make_offset_cptr(argv[0], (intptr_t)SCHEME_VEC_ELS((Scheme_Object *)0x0), NULL); } -@cdefine[flvector->cpointer 1]{ +@cdefine[flvector->cpointer 1 #:kind immed]{ if (!SCHEME_FLVECTORP(argv[0])) scheme_wrong_contract(MYNAME, "flvector?", 0, argc, argv); return scheme_make_offset_cptr(argv[0], (intptr_t)SCHEME_FLVEC_ELS((Scheme_Object *)0x0), NULL); } -@cdefine[extflvector->cpointer 1]{ +@cdefine[extflvector->cpointer 1 #:kind immed]{ @@@IFDEF{MZ_LONG_DOUBLE}{ if (!SCHEME_EXTFLVECTORP(argv[0])) scheme_wrong_contract(MYNAME, "extflvector?", 0, argc, argv); @@ -3172,12 +3190,12 @@ static void save_errno_values(int kind) p->saved_errno = errno; } -@cdefine[saved-errno 0]{ +@cdefine[saved-errno 0 #:kind immed]{ Scheme_Thread *p = scheme_current_thread; return scheme_make_integer_value(p->saved_errno); } -@cdefine[lookup-errno 1]{ +@cdefine[lookup-errno 1 #:kind immed]{ Scheme_Object *v = argv[0]; @(let* ([errnos '(EINTR EEXIST EAGAIN)] [syms (string-append @@ -3204,17 +3222,17 @@ static void save_errno_values(int kind) /*****************************************************************************/ /* (make-stubborn-will-executor) -> # */ -@cdefine[make-stubborn-will-executor 0]{ +@cdefine[make-stubborn-will-executor 0 #:kind immed]{ return scheme_make_stubborn_will_executor(); } /* (make-late-weak-box val) -> # */ -@cdefine[make-late-weak-box 1]{ +@cdefine[make-late-weak-box 1 #:kind immed]{ return scheme_make_late_weak_box(argv[0]); } /* (make-late-weak-hasheq) -> # */ -@cdefine[make-late-weak-hasheq 0]{ +@cdefine[make-late-weak-hasheq 0 #:kind immed]{ return (Scheme_Object *)scheme_make_bucket_table(20, SCHEME_hash_late_weak_ptr); } @@ -3241,6 +3259,8 @@ void ctype_printer(Scheme_Object *ctype, int dis, Scheme_Print_Params *pp) /*****************************************************************************/ /* Initialization */ +static Scheme_Env *ffi_env = NULL; + /* types need to be initialized before places can spawn * types become entries in the GC mark and fixup tables * this function should initialize read-only globals that can be @@ -3248,7 +3268,9 @@ void ctype_printer(Scheme_Object *ctype, int dis, Scheme_Print_Params *pp) void scheme_init_foreign_globals() { @(maplines (lambda (x) - @list{@(cadr x)_tag = scheme_make_type("<@(car x)>")}) + (if (equal? (cadr x) "ctype") + @list{ctype_tag = scheme_ctype_type} + @list{@(cadr x)_tag = scheme_make_type("<@(car x)>")})) (reverse (cstructs))) @@IFDEF{MZ_PRECISE_GC}{ @(maplines (lambda (x) @@ -3256,7 +3278,7 @@ void scheme_init_foreign_globals() @(cadr x)_MARK, @(cadr x)_FIXUP, 1, 0)}) (reverse (cstructs))) } - scheme_set_type_printer(ctype_tag, ctype_printer); + scheme_set_type_printer(scheme_ctype_type, ctype_printer); @(maplines (lambda (sym) @list{MZ_REGISTER_STATIC(@(cadr sym)); @(cadr sym) = scheme_intern_symbol("@(car sym)")}) @@ -3286,9 +3308,9 @@ void scheme_init_foreign(Scheme_Env *env) menv = scheme_primitive_module(scheme_intern_symbol("#%foreign"), env); @(maplines (lambda (x) - (define-values (sname cfun min max) (apply values x)) - @list{scheme_add_global("@sname", - scheme_make_prim_w_arity(@cfun, "@sname", @min, @max), menv)}) + (define-values (sname cfun min max kind) (apply values x)) + @list{scheme_add_global_constant("@sname", + scheme_make_@|kind|_prim(@cfun, "@sname", @min, @max), menv)}) (reverse (cfunctions))) @(map-types ;; no need for these, at least for now: @@ -3298,16 +3320,24 @@ void scheme_init_foreign(Scheme_Env *env) @cmake["t" ctype "s" @list{(Scheme_Object*)(void*)(&ffi_type_@ftype)} @list{(Scheme_Object*)FOREIGN_@cname}] - scheme_add_global("_@stype", (Scheme_Object*)t, menv)}) + scheme_add_global_constant("_@stype", (Scheme_Object*)t, menv)}) scheme_add_global_constant("prop:cpointer", scheme_cpointer_property, menv); scheme_finish_primitive_module(menv); scheme_protect_primitive_provide(menv, NULL); + MZ_REGISTER_STATIC(ffi_env); + ffi_env = menv; +} + +Scheme_Env *scheme_get_foreign_env() { + return ffi_env; } /*****************************************************************************/ #else /* DONT_USE_FOREIGN */ +static Scheme_Env *ffi_env = NULL; + int scheme_is_cpointer(Scheme_Object *cp) { return (SCHEME_FALSEP(cp) @@ -3353,15 +3383,21 @@ void scheme_init_foreign(Scheme_Env *env) menv = scheme_primitive_module(scheme_intern_symbol("#%foreign"), env); @(maplines (lambda (x) - (define-values (sname cfun min max) (apply values x)) - @list{scheme_add_global("@sname", - scheme_make_prim_w_arity((Scheme_Prim *)@(lookup cfun), "@sname", @min, @max), menv)}) + (define-values (sname cfun min max kind) (apply values x)) + @list{scheme_add_global_constant("@sname", + scheme_make_@|kind|_prim((Scheme_Prim *)@(lookup cfun), "@sname", @min, @max), menv)}) (reverse (cfunctions))) @(map-types - @list{scheme_add_global("_@stype", scheme_false, menv)}) + @list{scheme_add_global_constant("_@stype", scheme_false, menv)}) scheme_add_global_constant("prop:cpointer", scheme_cpointer_property, menv); scheme_finish_primitive_module(menv); scheme_protect_primitive_provide(menv, NULL); + MZ_REGISTER_STATIC(ffi_env); + ffi_env = menv; +} + +Scheme_Env *scheme_get_foreign_env() { + return ffi_env; } #endif diff --git a/racket/src/foreign/rktc-utils.rkt b/racket/src/foreign/rktc-utils.rkt index bac68469b2..766e596b07 100644 --- a/racket/src/foreign/rktc-utils.rkt +++ b/racket/src/foreign/rktc-utils.rkt @@ -51,9 +51,9 @@ ;; User function definition (provide cfunctions) (define cfunctions (make-parameter '())) -(define (_cdefine name minargs maxargs . body) +(define (_cdefine name minargs maxargs kind . body) (define cname @list{foreign_@(racket-id->c-name name)}) - (cfunctions (cons (list name cname minargs maxargs) (cfunctions))) + (cfunctions (cons (list name cname minargs maxargs kind) (cfunctions))) @list{@disable-prefix{#define MYNAME "@name"} static Scheme_Object *@|cname|(int argc, Scheme_Object *argv[]) { @@ -63,11 +63,18 @@ (provide cdefine) (define-syntax (cdefine stx) (syntax-case stx () + [(_ name minargs maxargs #:kind kind body ...) + (number? (syntax-e #'maxargs)) + #'(_cdefine `name minargs maxargs `kind body ...)] [(_ name minargs maxargs body ...) (number? (syntax-e #'maxargs)) - #'(_cdefine `name minargs maxargs body ...)] + ;; Default is 'noncm, because anything that involves + ;; cpointers can involve a structure-type property + #'(_cdefine `name minargs maxargs 'noncm body ...)] + [(_ name args #:kind kind body ...) + #'(_cdefine `name args args `kind body ...)] [(_ name args body ...) - #'(_cdefine `name args args body ...)])) + #'(_cdefine `name args args 'noncm body ...)])) ;; Struct definitions (provide cstructs) @@ -93,7 +100,7 @@ @(maplines (lambda (s t) @list{@t @s}) slots types) } @|cname|_struct; #define SCHEME_@|mname|P(x) (SCHEME_TYPE(x)==@|cname|_tag) - @_cdefine[predname 1 1]{ + @_cdefine[predname 1 1 'immed]{ return SCHEME_@|mname|P(argv[0]) ? scheme_true : scheme_false@";" } /* 3m stuff for @cname */ diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index 485bde9f4e..750f78581f 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -2037,7 +2037,8 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags, || scheme_is_unsafe_modname(modname) || scheme_is_flfxnum_modname(modname) || scheme_is_extfl_modname(modname) - || scheme_is_futures_modname(modname)) + || scheme_is_futures_modname(modname) + || scheme_is_foreign_modname(modname)) || (flags & SCHEME_REFERENCING))) { /* Create a module variable reference, so that idx is preserved: */ return scheme_hash_module_variable(env->genv, modidx, find_id, @@ -2131,6 +2132,16 @@ Scheme_Object *scheme_extract_futures(Scheme_Object *o) return NULL; } +Scheme_Object *scheme_extract_foreign(Scheme_Object *o) +{ + Scheme_Env *home; + home = scheme_get_bucket_home((Scheme_Bucket *)o); + if (home && home->module && scheme_is_foreign_modname(home->module->modname)) + return (Scheme_Object *)((Scheme_Bucket *)o)->val; + else + return NULL; +} + int scheme_env_check_reset_any_use(Scheme_Comp_Env *frame) { int any_use; diff --git a/racket/src/racket/src/compile.c b/racket/src/racket/src/compile.c index 955fab30bc..c655cdc49c 100644 --- a/racket/src/racket/src/compile.c +++ b/racket/src/racket/src/compile.c @@ -4570,6 +4570,8 @@ scheme_compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, return scheme_extract_extfl(var); } else if (scheme_extract_futures(var)) { return scheme_extract_futures(var); + } else if (scheme_extract_foreign(var)) { + return scheme_extract_foreign(var); } } if (SAME_TYPE(SCHEME_TYPE(var), scheme_variable_type) diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 2ad3402d1d..01c8d88507 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,1554 +1,1554 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,57,48,46,48,46,49,49,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0, -14,0,19,0,32,0,37,0,40,0,47,0,54,0,59,0,63,0,67,0,74, -0,83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0, -149,0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96, -1,129,1,162,1,224,1,24,2,105,2,161,2,166,2,187,2,84,3,105,3, -158,3,225,3,114,4,2,5,56,5,67,5,150,5,0,0,115,7,0,0,69, -35,37,109,105,110,45,115,116,120,29,11,11,11,64,119,104,101,110,72,112,97, -114,97,109,101,116,101,114,105,122,101,64,99,111,110,100,62,111,114,66,100,101, -102,105,110,101,66,108,101,116,114,101,99,64,108,101,116,42,63,108,101,116,63, -97,110,100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11, -11,11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108, -11,29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101, -103,105,110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61, -120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100, -97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107, -101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11, -8,240,209,87,0,0,95,144,2,17,36,36,144,2,16,36,36,144,2,16,36, -36,16,20,2,3,2,2,2,5,2,2,2,4,2,2,2,6,2,2,2,7, -2,2,2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2, -2,97,37,11,8,240,209,87,0,0,93,144,2,16,36,37,16,2,2,13,146, -2,2,37,2,13,2,2,2,13,96,11,11,8,240,209,87,0,0,16,0,96, -38,11,8,240,209,87,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36, -2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,164,4,195, -249,22,157,4,80,143,39,36,251,22,90,2,18,248,22,102,199,12,249,22,80, -2,19,248,22,104,201,27,248,22,164,4,195,249,22,157,4,80,143,39,36,251, -22,90,2,18,248,22,102,199,249,22,80,2,19,248,22,104,201,12,27,248,22, -82,248,22,164,4,196,28,248,22,88,193,20,14,144,37,36,37,28,248,22,88, -248,22,82,194,248,22,144,18,193,249,22,157,4,80,143,39,36,251,22,90,2, -18,248,22,144,18,199,249,22,80,2,11,248,22,145,18,201,11,18,100,10,13, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,48,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14,0, +19,0,32,0,37,0,40,0,47,0,54,0,59,0,63,0,67,0,74,0,83, +0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149,0, +163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1,129, +1,162,1,224,1,24,2,105,2,161,2,166,2,187,2,84,3,105,3,158,3, +225,3,114,4,2,5,56,5,67,5,150,5,0,0,115,7,0,0,69,35,37, +109,105,110,45,115,116,120,29,11,11,11,64,119,104,101,110,72,112,97,114,97, +109,101,116,101,114,105,122,101,64,99,111,110,100,62,111,114,66,100,101,102,105, +110,101,66,108,101,116,114,101,99,64,108,101,116,42,63,108,101,116,63,97,110, +100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11,11, +65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11,29, +94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105, +110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73, +108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1, +20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121, +61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240, +18,88,0,0,95,144,2,17,36,36,144,2,16,36,36,144,2,16,36,36,16, +20,2,3,2,2,2,5,2,2,2,4,2,2,2,6,2,2,2,7,2,2, +2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97, +37,11,8,240,18,88,0,0,93,144,2,16,36,37,16,2,2,13,146,2,2, +37,2,13,2,2,2,13,96,11,11,8,240,18,88,0,0,16,0,96,38,11, +8,240,18,88,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2,14, +2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,164,4,195,249,22, +157,4,80,143,39,36,251,22,90,2,18,248,22,102,199,12,249,22,80,2,19, +248,22,104,201,27,248,22,164,4,195,249,22,157,4,80,143,39,36,251,22,90, +2,18,248,22,102,199,249,22,80,2,19,248,22,104,201,12,27,248,22,82,248, +22,164,4,196,28,248,22,88,193,20,14,144,37,36,37,28,248,22,88,248,22, +82,194,248,22,144,18,193,249,22,157,4,80,143,39,36,251,22,90,2,18,248, +22,144,18,199,249,22,80,2,11,248,22,145,18,201,11,18,100,10,13,16,6, +36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2, +20,3,1,8,101,110,118,49,55,54,55,55,16,4,11,11,2,21,3,1,8, +101,110,118,49,55,54,55,56,27,248,22,82,248,22,164,4,196,28,248,22,88, +193,20,14,144,37,36,37,28,248,22,88,248,22,82,194,248,22,144,18,193,249, +22,157,4,80,143,39,36,250,22,90,2,22,248,22,90,249,22,90,248,22,90, +2,23,248,22,144,18,201,251,22,90,2,18,2,23,2,23,249,22,80,2,6, +248,22,145,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32, +8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,55,54, +56,48,16,4,11,11,2,21,3,1,8,101,110,118,49,55,54,56,49,248,22, +164,4,193,27,248,22,164,4,194,249,22,80,248,22,90,248,22,81,196,248,22, +145,18,195,27,248,22,82,248,22,164,4,23,197,1,249,22,157,4,80,143,39, +36,28,248,22,64,248,22,158,4,248,22,81,23,198,2,27,249,22,2,32,0, +88,148,8,36,37,43,11,9,222,33,40,248,22,164,4,248,22,102,23,200,2, +250,22,90,2,24,248,22,90,249,22,90,248,22,90,248,22,144,18,23,204,2, +250,22,91,2,25,249,22,2,22,81,23,204,2,248,22,104,23,206,2,249,22, +80,248,22,144,18,23,202,1,249,22,2,22,102,23,200,1,250,22,91,2,22, +249,22,2,32,0,88,148,8,36,37,47,11,9,222,33,41,248,22,164,4,248, +22,144,18,201,248,22,145,18,198,27,248,22,164,4,194,249,22,80,248,22,90, +248,22,81,196,248,22,145,18,195,27,248,22,82,248,22,164,4,23,197,1,249, +22,157,4,80,143,39,36,250,22,91,2,24,249,22,2,32,0,88,148,8,36, +37,47,11,9,222,33,43,248,22,164,4,248,22,81,201,248,22,145,18,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,40,36,28,248,22,88,195,250,22,91,2,22,9,248,22,82,199,250,22, +90,2,10,248,22,90,248,22,81,199,250,22,91,2,9,248,22,145,18,201,248, +22,82,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,41,36,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,26,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,26,202,250,22,91,2,22,9,248,22,82, +204,27,248,22,82,248,22,164,4,196,28,248,22,88,193,20,14,144,37,36,37, +249,22,157,4,80,143,39,36,27,248,22,164,4,248,22,81,197,28,249,22,167, +9,62,61,62,248,22,158,4,248,22,102,196,250,22,90,2,22,248,22,90,249, +22,90,21,93,2,27,248,22,81,199,250,22,91,2,5,249,22,90,2,27,249, +22,90,248,22,111,203,2,27,248,22,82,202,251,22,90,2,18,28,249,22,167, +9,248,22,158,4,248,22,81,200,64,101,108,115,101,10,248,22,144,18,197,250, +22,91,2,22,9,248,22,145,18,200,249,22,80,2,5,248,22,82,202,99,13, 16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11, -11,2,20,3,1,8,101,110,118,49,55,54,48,52,16,4,11,11,2,21,3, -1,8,101,110,118,49,55,54,48,53,27,248,22,82,248,22,164,4,196,28,248, -22,88,193,20,14,144,37,36,37,28,248,22,88,248,22,82,194,248,22,144,18, -193,249,22,157,4,80,143,39,36,250,22,90,2,22,248,22,90,249,22,90,248, -22,90,2,23,248,22,144,18,201,251,22,90,2,18,2,23,2,23,249,22,80, -2,6,248,22,145,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11, -8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49, -55,54,48,55,16,4,11,11,2,21,3,1,8,101,110,118,49,55,54,48,56, -248,22,164,4,193,27,248,22,164,4,194,249,22,80,248,22,90,248,22,81,196, -248,22,145,18,195,27,248,22,82,248,22,164,4,23,197,1,249,22,157,4,80, -143,39,36,28,248,22,64,248,22,158,4,248,22,81,23,198,2,27,249,22,2, -32,0,88,148,8,36,37,43,11,9,222,33,40,248,22,164,4,248,22,102,23, -200,2,250,22,90,2,24,248,22,90,249,22,90,248,22,90,248,22,144,18,23, -204,2,250,22,91,2,25,249,22,2,22,81,23,204,2,248,22,104,23,206,2, -249,22,80,248,22,144,18,23,202,1,249,22,2,22,102,23,200,1,250,22,91, -2,22,249,22,2,32,0,88,148,8,36,37,47,11,9,222,33,41,248,22,164, -4,248,22,144,18,201,248,22,145,18,198,27,248,22,164,4,194,249,22,80,248, -22,90,248,22,81,196,248,22,145,18,195,27,248,22,82,248,22,164,4,23,197, -1,249,22,157,4,80,143,39,36,250,22,91,2,24,249,22,2,32,0,88,148, -8,36,37,47,11,9,222,33,43,248,22,164,4,248,22,81,201,248,22,145,18, -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,40,36,28,248,22,88,195,250,22,91,2,22,9,248,22,82,199, -250,22,90,2,10,248,22,90,248,22,81,199,250,22,91,2,9,248,22,145,18, -201,248,22,82,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,41,36,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,26,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,26,202,250,22,91,2,22,9,248, -22,82,204,27,248,22,82,248,22,164,4,196,28,248,22,88,193,20,14,144,37, -36,37,249,22,157,4,80,143,39,36,27,248,22,164,4,248,22,81,197,28,249, -22,167,9,62,61,62,248,22,158,4,248,22,102,196,250,22,90,2,22,248,22, -90,249,22,90,21,93,2,27,248,22,81,199,250,22,91,2,5,249,22,90,2, -27,249,22,90,248,22,111,203,2,27,248,22,82,202,251,22,90,2,18,28,249, -22,167,9,248,22,158,4,248,22,81,200,64,101,108,115,101,10,248,22,144,18, -197,250,22,91,2,22,9,248,22,145,18,200,249,22,80,2,5,248,22,82,202, -99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16, -4,11,11,2,20,3,1,8,101,110,118,49,55,54,51,48,16,4,11,11,2, -21,3,1,8,101,110,118,49,55,54,51,49,18,143,94,10,64,118,111,105,100, -8,48,27,248,22,82,248,22,164,4,196,249,22,157,4,80,143,39,36,28,248, -22,64,248,22,158,4,248,22,81,197,250,22,90,2,28,248,22,90,248,22,144, -18,199,248,22,102,198,27,248,22,158,4,248,22,144,18,197,250,22,90,2,28, -248,22,90,248,22,81,197,250,22,91,2,25,248,22,145,18,199,248,22,145,18, -202,144,36,20,114,144,36,16,1,11,16,0,20,26,15,58,9,2,1,2,1, -2,2,11,9,9,11,11,11,10,36,80,143,36,36,20,114,144,36,16,0,16, -0,38,39,36,16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5, -2,6,2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11, -11,11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9, -2,10,2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16, -0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11, -16,5,11,20,15,16,2,20,14,144,36,36,37,80,143,36,36,36,20,114,144, -36,16,1,2,13,16,1,33,33,10,16,5,2,12,88,148,8,36,37,53,37, -9,223,0,33,34,36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,3, -88,148,8,36,37,53,37,9,223,0,33,35,36,20,114,144,36,16,1,2,13, -16,0,11,16,5,2,11,88,148,8,36,37,53,37,9,223,0,33,36,36,20, -114,144,36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,148,8,36,37, -56,37,9,223,0,33,38,36,20,114,144,36,16,1,2,13,16,1,33,39,11, -16,5,2,10,88,148,8,36,37,58,37,9,223,0,33,42,36,20,114,144,36, -16,1,2,13,16,0,11,16,5,2,8,88,148,8,36,37,53,37,9,223,0, -33,44,36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,9,88,148,8, -36,37,54,37,9,223,0,33,45,36,20,114,144,36,16,1,2,13,16,0,11, -16,5,2,4,88,148,8,36,37,56,37,9,223,0,33,46,36,20,114,144,36, -16,1,2,13,16,0,11,16,5,2,5,88,148,8,36,37,58,37,9,223,0, -33,47,36,20,114,144,36,16,1,2,13,16,1,33,49,11,16,5,2,7,88, -148,8,36,37,54,37,9,223,0,33,50,36,20,114,144,36,16,1,2,13,16, -0,11,16,0,94,2,16,2,17,93,2,16,9,9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2053); +11,2,20,3,1,8,101,110,118,49,55,55,48,51,16,4,11,11,2,21,3, +1,8,101,110,118,49,55,55,48,52,18,143,94,10,64,118,111,105,100,8,48, +27,248,22,82,248,22,164,4,196,249,22,157,4,80,143,39,36,28,248,22,64, +248,22,158,4,248,22,81,197,250,22,90,2,28,248,22,90,248,22,144,18,199, +248,22,102,198,27,248,22,158,4,248,22,144,18,197,250,22,90,2,28,248,22, +90,248,22,81,197,250,22,91,2,25,248,22,145,18,199,248,22,145,18,202,144, +36,20,114,144,36,16,1,11,16,0,20,26,15,58,9,2,1,2,1,2,2, +11,9,9,11,11,11,10,36,80,143,36,36,20,114,144,36,16,0,16,0,38, +39,36,16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5,2,6, +2,7,2,8,2,9,2,10,2,11,2,12,16,10,11,11,11,11,11,11,11, +11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10, +2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,16, +0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, +11,20,15,16,2,20,14,144,36,36,37,80,143,36,36,36,20,114,144,36,16, +1,2,13,16,1,33,33,10,16,5,2,12,88,148,8,36,37,53,37,9,223, +0,33,34,36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,3,88,148, +8,36,37,53,37,9,223,0,33,35,36,20,114,144,36,16,1,2,13,16,0, +11,16,5,2,11,88,148,8,36,37,53,37,9,223,0,33,36,36,20,114,144, +36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,148,8,36,37,56,37, +9,223,0,33,38,36,20,114,144,36,16,1,2,13,16,1,33,39,11,16,5, +2,10,88,148,8,36,37,58,37,9,223,0,33,42,36,20,114,144,36,16,1, +2,13,16,0,11,16,5,2,8,88,148,8,36,37,53,37,9,223,0,33,44, +36,20,114,144,36,16,1,2,13,16,0,11,16,5,2,9,88,148,8,36,37, +54,37,9,223,0,33,45,36,20,114,144,36,16,1,2,13,16,0,11,16,5, +2,4,88,148,8,36,37,56,37,9,223,0,33,46,36,20,114,144,36,16,1, +2,13,16,0,11,16,5,2,5,88,148,8,36,37,58,37,9,223,0,33,47, +36,20,114,144,36,16,1,2,13,16,1,33,49,11,16,5,2,7,88,148,8, +36,37,54,37,9,223,0,33,50,36,20,114,144,36,16,1,2,13,16,0,11, +16,0,94,2,16,2,17,93,2,16,9,9,36,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2051); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,57,48,46,48,46,49,49,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,187,0,0,0,1,0,0,8,0, -21,0,26,0,43,0,55,0,77,0,106,0,150,0,156,0,165,0,172,0,187, -0,205,0,217,0,233,0,247,0,13,1,32,1,39,1,73,1,90,1,107,1, -130,1,145,1,184,1,202,1,233,1,245,1,6,2,18,2,33,2,57,2,89, -2,107,2,126,2,146,2,162,2,180,2,211,2,225,2,242,2,30,3,38,3, -43,3,87,3,94,3,104,3,119,3,128,3,133,3,135,3,168,3,192,3,213, -3,226,3,236,3,245,3,0,4,18,4,31,4,41,4,51,4,57,4,62,4, -74,4,77,4,81,4,105,4,144,4,187,4,200,4,207,4,210,4,223,4,245, -4,0,5,30,5,53,5,61,5,85,5,106,5,50,6,80,6,161,9,184,9, -201,9,125,11,228,11,242,11,186,12,158,14,167,14,176,14,190,14,200,14,233, -15,80,16,193,16,10,17,83,17,187,17,216,17,31,18,168,18,239,18,193,19, -59,20,72,20,194,20,207,20,46,21,113,21,126,21,137,21,33,22,155,22,199, -22,58,23,136,25,160,25,26,26,106,27,113,27,165,27,178,27,168,28,183,28, -37,29,195,29,202,29,78,31,152,31,169,31,69,32,89,32,149,32,156,32,16, -33,70,33,89,33,39,34,55,34,15,35,11,36,48,36,57,36,134,37,235,39, -255,39,15,40,82,40,103,40,123,40,143,40,200,40,137,43,97,44,0,45,16, -45,113,45,130,45,208,47,3,50,19,50,249,51,181,52,183,52,209,52,225,52, -241,52,82,53,149,54,81,55,96,55,105,55,112,55,176,56,240,57,106,58,150, -61,23,62,154,62,96,64,46,65,78,65,208,65,0,0,83,73,0,0,67,35, -37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98, -115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,71, -114,101,114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101, -99,117,116,97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105, -115,116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1, -42,99,97,108,108,45,119,105,116,104,45,100,101,102,97,117,108,116,45,114,101, -97,100,105,110,103,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,65,113,117,111,116,101,68,35,37,112,97,114,97,109,122,29,94,2,9,2, -10,11,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104, -101,99,107,45,99,111,108,108,101,99,116,105,111,110,71,45,99,104,101,99,107, -45,102,97,105,108,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104, -73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101, -99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,78,102,105,110,100,45, -109,97,105,110,45,99,111,108,108,101,99,116,115,29,94,2,9,2,10,11,1, -32,101,120,101,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99, -111,109,112,108,101,116,101,45,112,97,116,104,76,102,105,110,100,45,109,97,105, -110,45,99,111,110,102,105,103,76,103,101,116,45,99,111,110,102,105,103,45,116, -97,98,108,101,1,21,103,101,116,45,105,110,115,116,97,108,108,97,116,105,111, -110,45,110,97,109,101,74,99,111,101,114,99,101,45,116,111,45,112,97,116,104, -1,37,99,111,108,108,101,99,116,115,45,114,101,108,97,116,105,118,101,45,112, -97,116,104,45,62,99,111,109,112,108,101,116,101,45,112,97,116,104,77,97,100, -100,45,99,111,110,102,105,103,45,115,101,97,114,99,104,1,29,102,105,110,100, -45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,108, -105,110,107,115,71,108,105,110,107,115,45,99,97,99,104,101,76,115,116,97,109, -112,45,112,114,111,109,112,116,45,116,97,103,71,102,105,108,101,45,62,115,116, -97,109,112,74,110,111,45,102,105,108,101,45,115,116,97,109,112,63,1,22,103, -101,116,45,108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110,115, -1,30,110,111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105,111, -110,45,114,101,102,101,114,101,110,99,101,77,99,104,101,99,107,45,115,117,102, -102,105,120,45,99,97,108,108,78,112,97,116,104,45,97,100,106,117,115,116,45, -115,117,102,102,105,120,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115, -117,102,102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120, -77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102, -105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111, -110,45,112,97,116,104,115,73,101,109,98,101,100,100,101,100,45,108,111,97,100, -76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,41,41,40, -111,114,47,99,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121, -115,116,101,109,63,32,112,97,116,104,45,115,116,114,105,110,103,63,41,67,119, -105,110,100,111,119,115,6,2,2,92,49,6,41,41,40,111,114,47,99,32,112, -97,116,104,45,115,116,114,105,110,103,63,32,112,97,116,104,45,102,111,114,45, -115,111,109,101,45,115,121,115,116,101,109,63,41,6,4,4,112,97,116,104,5, -8,92,92,63,92,82,69,76,92,6,12,12,112,97,116,104,45,115,116,114,105, -110,103,63,68,114,101,108,97,116,105,118,101,64,108,111,111,112,5,0,6,30, -30,40,112,114,111,99,101,100,117,114,101,45,97,114,105,116,121,45,105,110,99, -108,117,100,101,115,47,99,32,48,41,6,21,21,105,110,118,97,108,105,100,32, -114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40,97,110,121,47, -99,32,46,32,45,62,32,46,32,97,110,121,41,72,99,111,108,108,101,99,116, -115,45,100,105,114,69,101,120,101,99,45,102,105,108,101,68,111,114,105,103,45, -100,105,114,70,99,111,110,102,105,103,45,100,105,114,77,105,110,115,116,97,108, -108,97,116,105,111,110,45,110,97,109,101,6,10,10,108,105,110,107,115,46,114, -107,116,100,69,97,100,100,111,110,45,100,105,114,69,102,115,45,99,104,97,110, -103,101,65,101,114,114,111,114,64,114,111,111,116,71,115,116,97,116,105,99,45, -114,111,111,116,6,0,0,6,1,1,47,6,21,21,40,111,114,47,99,32,115, -116,114,105,110,103,63,32,98,121,116,101,115,63,41,6,36,36,99,97,110,110, -111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32, -114,111,111,116,32,112,97,116,104,58,32,6,40,40,114,101,109,111,118,105,110, -103,32,115,117,102,102,105,120,32,109,97,107,101,115,32,112,97,116,104,32,101, -108,101,109,101,110,116,32,101,109,112,116,121,6,10,10,103,105,118,101,110,32, -112,97,116,104,66,102,105,110,105,115,104,5,1,95,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, -160,15,194,28,192,192,28,248,22,151,7,194,27,248,22,183,15,195,28,192,192, -248,22,184,15,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,161,15,23,195,2,10,28,248,22,160,15,23,195,2,10,28,248, -22,151,7,23,195,2,28,248,22,183,15,23,195,2,10,248,22,184,15,23,195, -2,11,12,250,22,176,11,2,41,2,42,23,197,2,28,28,248,22,161,15,23, -195,2,249,22,167,9,248,22,162,15,23,197,2,2,43,249,22,167,9,247,22, -178,8,2,43,27,28,248,22,151,7,23,196,2,23,195,2,248,22,163,8,248, -22,165,15,23,197,2,28,249,22,156,16,2,78,23,195,2,28,248,22,151,7, -195,248,22,168,15,195,194,27,248,22,190,7,23,195,1,249,22,169,15,248,22, -166,8,250,22,164,16,2,79,28,249,22,156,16,2,80,23,201,2,23,199,1, -250,22,164,16,2,81,23,202,1,2,44,80,144,44,37,38,2,43,28,248,22, -151,7,194,248,22,168,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,160,15,23,195,2,10,28,248,22,151,7,23,195,2,28,248,22, -183,15,23,195,2,10,248,22,184,15,23,195,2,11,10,248,22,161,15,23,195, -2,12,252,22,176,11,2,5,2,45,36,23,199,2,23,200,2,28,28,28,248, -22,160,15,23,196,2,10,28,248,22,151,7,23,196,2,28,248,22,183,15,23, -196,2,10,248,22,184,15,23,196,2,11,10,248,22,161,15,23,196,2,12,252, -22,176,11,2,5,2,45,37,23,199,2,23,200,2,27,28,248,22,161,15,23, -196,2,248,22,162,15,23,196,2,247,22,163,15,86,95,28,28,248,22,185,15, -23,196,2,10,249,22,167,9,247,22,163,15,23,195,2,12,253,22,178,11,2, -5,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,163,15,28,249,22,167,9,28,248,22,161,15,23, -199,2,248,22,162,15,23,199,2,247,22,163,15,23,195,2,12,253,22,178,11, -2,5,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,189,15,28,248,22,185,15,23,199,2,23,198,1,248,22,186,15,23, -199,1,86,94,28,28,248,22,161,15,23,194,2,10,28,248,22,160,15,23,194, -2,10,28,248,22,151,7,23,194,2,28,248,22,183,15,23,194,2,10,248,22, -184,15,23,194,2,11,12,250,22,176,11,2,41,2,42,23,196,2,28,28,248, -22,161,15,23,194,2,249,22,167,9,248,22,162,15,23,196,2,2,43,249,22, -167,9,247,22,178,8,2,43,27,28,248,22,151,7,23,195,2,23,194,2,248, -22,163,8,248,22,165,15,23,196,2,28,249,22,156,16,2,78,23,195,2,28, -248,22,151,7,194,248,22,168,15,194,193,27,248,22,190,7,23,195,1,249,22, -169,15,248,22,166,8,250,22,164,16,2,79,28,249,22,156,16,2,80,23,201, -2,23,199,1,250,22,164,16,2,81,23,202,1,2,44,80,144,47,37,38,2, -43,28,248,22,151,7,193,248,22,168,15,193,192,27,248,22,165,15,23,195,2, -28,249,22,167,9,23,197,2,64,117,110,105,120,28,249,22,148,8,194,5,1, -47,28,248,22,161,15,198,197,248,22,168,15,198,249,22,178,15,199,249,22,169, -15,249,22,151,8,248,22,165,15,200,37,198,28,249,22,167,9,23,197,2,2, -43,249,22,178,15,23,200,1,249,22,169,15,28,249,22,156,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,152,8,2,47,250,22,151,8,203,40,41,5, -1,92,249,22,151,8,202,42,28,249,22,156,16,2,83,23,199,2,249,22,152, -8,2,47,249,22,151,8,200,40,28,249,22,156,16,2,83,23,199,2,249,22, -152,8,2,47,249,22,151,8,200,40,28,249,22,156,16,0,14,35,114,120,34, -94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,152,8,5,4,85,78, -67,92,249,22,151,8,200,38,28,249,22,156,16,0,12,35,114,120,34,94,91, -97,45,122,93,58,34,198,249,22,152,8,250,22,151,8,201,36,37,249,22,151, -8,200,38,12,198,12,32,85,88,148,8,36,39,53,11,70,102,111,117,110,100, -45,101,120,101,99,222,33,88,32,86,88,148,8,36,40,58,11,64,110,101,120, -116,222,33,87,27,248,22,187,15,23,196,2,28,249,22,169,9,23,195,2,23, -197,1,11,28,248,22,183,15,23,194,2,27,249,22,178,15,23,197,1,23,196, -1,28,23,197,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,2, -86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,187,15,23,199,2, -28,249,22,169,9,23,195,2,23,200,2,11,28,248,22,183,15,23,194,2,250, -2,85,23,205,2,23,206,2,249,22,178,15,23,200,2,23,198,1,250,2,85, -23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27, -28,248,22,160,15,23,196,2,27,249,22,178,15,23,198,2,23,205,2,28,28, -248,22,173,15,193,10,248,22,172,15,193,192,11,11,28,23,193,2,192,86,94, -23,193,1,28,23,203,2,11,27,248,22,187,15,23,200,2,28,249,22,169,9, -194,23,201,1,11,28,248,22,183,15,193,250,2,85,205,206,249,22,178,15,200, -197,250,2,85,205,206,195,192,86,94,23,194,1,28,23,196,2,90,144,39,11, -89,146,39,36,11,248,22,181,15,23,197,2,86,95,23,195,1,23,194,1,27, -28,23,201,2,27,248,22,187,15,23,199,2,28,249,22,169,9,23,195,2,23, -200,2,11,28,248,22,183,15,23,194,2,250,2,85,23,204,2,23,205,2,249, -22,178,15,23,200,2,23,198,1,250,2,85,23,204,2,23,205,2,23,196,1, -11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,160,15,23,196,2,27, -249,22,178,15,23,198,2,23,204,2,28,28,248,22,173,15,193,10,248,22,172, -15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27, -248,22,187,15,23,200,2,28,249,22,169,9,194,23,201,1,11,28,248,22,183, -15,193,250,2,85,204,205,249,22,178,15,200,197,250,2,85,204,205,195,192,28, -23,193,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,199,2,86,95, -23,195,1,23,194,1,27,28,23,198,2,251,2,86,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,160, -15,195,27,249,22,178,15,197,200,28,28,248,22,173,15,193,10,248,22,172,15, -193,192,11,11,28,192,192,28,198,11,251,2,86,198,203,201,202,194,32,89,88, -148,8,36,40,57,11,2,50,222,33,90,28,248,22,88,23,197,2,11,27,249, -22,178,15,248,22,186,15,248,22,81,23,201,2,23,196,2,28,248,22,172,15, -23,194,2,250,2,85,197,198,195,86,94,23,193,1,27,248,22,82,23,199,1, -28,248,22,88,23,194,2,11,27,249,22,178,15,248,22,186,15,248,22,81,23, -198,2,23,198,2,28,248,22,172,15,23,194,2,250,2,85,199,200,195,86,94, -23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,11,27,249,22, -178,15,248,22,186,15,248,22,81,23,198,2,23,200,2,28,248,22,172,15,23, -194,2,250,2,85,201,202,195,86,94,23,193,1,27,248,22,82,23,196,1,28, -248,22,88,23,194,2,11,27,249,22,178,15,248,22,186,15,248,22,81,197,201, -28,248,22,172,15,193,250,2,85,203,204,195,251,2,89,203,204,205,248,22,82, -198,86,95,28,28,248,22,160,15,23,195,2,10,28,248,22,151,7,23,195,2, -28,248,22,183,15,23,195,2,10,248,22,184,15,23,195,2,11,12,250,22,176, -11,2,6,2,48,23,197,2,28,28,23,195,2,28,28,248,22,160,15,23,196, -2,10,28,248,22,151,7,23,196,2,28,248,22,183,15,23,196,2,10,248,22, -184,15,23,196,2,11,248,22,183,15,23,196,2,11,10,12,250,22,176,11,2, -6,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,183,15,23,195,2,90,144, -39,11,89,146,39,36,11,248,22,181,15,23,198,2,249,22,167,9,194,2,49, -11,27,249,22,173,8,247,22,172,8,5,4,80,65,84,72,27,28,23,194,2, -249,80,143,40,41,249,22,163,8,23,198,1,7,63,9,86,94,23,194,1,9, -27,28,249,22,167,9,247,22,178,8,2,43,249,22,80,248,22,169,15,5,1, -46,23,196,1,23,194,1,28,248,22,88,23,194,2,11,27,249,22,178,15,248, -22,186,15,248,22,81,23,198,2,23,200,2,28,248,22,172,15,23,194,2,250, -2,85,201,202,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88, -23,194,2,11,27,249,22,178,15,248,22,186,15,248,22,81,23,198,2,23,202, -2,28,248,22,172,15,23,194,2,250,2,85,203,204,195,86,94,23,193,1,27, -248,22,82,23,196,1,28,248,22,88,23,194,2,11,27,249,22,178,15,248,22, -186,15,248,22,81,23,198,2,23,204,2,28,248,22,172,15,23,194,2,250,2, -85,205,206,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23, -194,2,11,27,249,22,178,15,248,22,186,15,248,22,81,197,205,28,248,22,172, -15,193,250,2,85,23,15,23,16,195,251,2,89,23,15,23,16,23,17,248,22, -82,198,27,248,22,186,15,23,196,1,28,248,22,172,15,193,250,2,85,198,199, -195,11,250,80,144,39,40,39,196,197,11,250,80,144,39,40,39,196,11,11,32, -94,88,148,8,36,39,57,11,2,50,222,33,96,0,8,35,114,120,35,34,92, -34,34,27,249,22,152,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,152,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,94,23,203,2,23,204,1,248,22,111,23,199,1,28,249,22,148, -8,23,196,2,2,51,249,22,94,23,202,2,194,249,22,80,248,22,169,15,28, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,48,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,187,0,0,0,1,0,0,8,0,21,0, +26,0,43,0,55,0,77,0,106,0,150,0,156,0,165,0,172,0,187,0,205, +0,217,0,233,0,247,0,13,1,32,1,39,1,73,1,90,1,107,1,130,1, +145,1,184,1,202,1,233,1,245,1,6,2,18,2,33,2,57,2,89,2,107, +2,126,2,146,2,162,2,180,2,211,2,225,2,242,2,30,3,38,3,43,3, +87,3,94,3,104,3,119,3,128,3,133,3,135,3,168,3,192,3,213,3,226, +3,236,3,245,3,0,4,18,4,31,4,41,4,51,4,57,4,62,4,74,4, +77,4,81,4,105,4,144,4,187,4,200,4,207,4,210,4,223,4,245,4,0, +5,30,5,53,5,61,5,85,5,106,5,50,6,80,6,161,9,184,9,201,9, +125,11,228,11,242,11,186,12,158,14,167,14,176,14,190,14,200,14,233,15,80, +16,193,16,10,17,83,17,187,17,216,17,31,18,168,18,239,18,193,19,59,20, +72,20,194,20,207,20,46,21,113,21,126,21,137,21,33,22,155,22,199,22,58, +23,136,25,160,25,26,26,106,27,113,27,165,27,178,27,168,28,183,28,37,29, +195,29,202,29,78,31,152,31,169,31,69,32,89,32,149,32,156,32,16,33,70, +33,89,33,39,34,55,34,15,35,11,36,48,36,57,36,134,37,235,39,255,39, +15,40,82,40,103,40,123,40,143,40,200,40,137,43,97,44,0,45,16,45,113, +45,130,45,208,47,3,50,19,50,249,51,181,52,183,52,209,52,225,52,241,52, +82,53,149,54,81,55,96,55,105,55,112,55,176,56,240,57,106,58,150,61,23, +62,154,62,96,64,46,65,78,65,208,65,0,0,83,73,0,0,67,35,37,117, +116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98, +115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,71,114,101, +114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101,99,117, +116,97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105,115,116, +45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,42,99, +97,108,108,45,119,105,116,104,45,100,101,102,97,117,108,116,45,114,101,97,100, +105,110,103,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,65, +113,117,111,116,101,68,35,37,112,97,114,97,109,122,29,94,2,9,2,10,11, +74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99, +107,45,99,111,108,108,101,99,116,105,111,110,71,45,99,104,101,99,107,45,102, +97,105,108,75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,73,102, +105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99,116, +105,111,110,45,102,105,108,101,45,112,97,116,104,78,102,105,110,100,45,109,97, +105,110,45,99,111,108,108,101,99,116,115,29,94,2,9,2,10,11,1,32,101, +120,101,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109, +112,108,101,116,101,45,112,97,116,104,76,102,105,110,100,45,109,97,105,110,45, +99,111,110,102,105,103,76,103,101,116,45,99,111,110,102,105,103,45,116,97,98, +108,101,1,21,103,101,116,45,105,110,115,116,97,108,108,97,116,105,111,110,45, +110,97,109,101,74,99,111,101,114,99,101,45,116,111,45,112,97,116,104,1,37, +99,111,108,108,101,99,116,115,45,114,101,108,97,116,105,118,101,45,112,97,116, +104,45,62,99,111,109,112,108,101,116,101,45,112,97,116,104,77,97,100,100,45, +99,111,110,102,105,103,45,115,101,97,114,99,104,1,29,102,105,110,100,45,108, +105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,108,105,110, +107,115,71,108,105,110,107,115,45,99,97,99,104,101,76,115,116,97,109,112,45, +112,114,111,109,112,116,45,116,97,103,71,102,105,108,101,45,62,115,116,97,109, +112,74,110,111,45,102,105,108,101,45,115,116,97,109,112,63,1,22,103,101,116, +45,108,105,110,107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30, +110,111,114,109,97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45, +114,101,102,101,114,101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105, +120,45,99,97,108,108,78,112,97,116,104,45,97,100,106,117,115,116,45,115,117, +102,102,105,120,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102, +102,105,120,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108, +111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110, +100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45, +112,97,116,104,115,73,101,109,98,101,100,100,101,100,45,108,111,97,100,76,110, +111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114, +47,99,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116, +101,109,63,32,112,97,116,104,45,115,116,114,105,110,103,63,41,67,119,105,110, +100,111,119,115,6,2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116, +104,45,115,116,114,105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111, +109,101,45,115,121,115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92, +92,63,92,82,69,76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103, +63,68,114,101,108,97,116,105,118,101,64,108,111,111,112,5,0,6,30,30,40, +112,114,111,99,101,100,117,114,101,45,97,114,105,116,121,45,105,110,99,108,117, +100,101,115,47,99,32,48,41,6,21,21,105,110,118,97,108,105,100,32,114,101, +108,97,116,105,118,101,32,112,97,116,104,6,18,18,40,97,110,121,47,99,32, +46,32,45,62,32,46,32,97,110,121,41,72,99,111,108,108,101,99,116,115,45, +100,105,114,69,101,120,101,99,45,102,105,108,101,68,111,114,105,103,45,100,105, +114,70,99,111,110,102,105,103,45,100,105,114,77,105,110,115,116,97,108,108,97, +116,105,111,110,45,110,97,109,101,6,10,10,108,105,110,107,115,46,114,107,116, +100,69,97,100,100,111,110,45,100,105,114,69,102,115,45,99,104,97,110,103,101, +65,101,114,114,111,114,64,114,111,111,116,71,115,116,97,116,105,99,45,114,111, +111,116,6,0,0,6,1,1,47,6,21,21,40,111,114,47,99,32,115,116,114, +105,110,103,63,32,98,121,116,101,115,63,41,6,36,36,99,97,110,110,111,116, +32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111, +111,116,32,112,97,116,104,58,32,6,40,40,114,101,109,111,118,105,110,103,32, +115,117,102,102,105,120,32,109,97,107,101,115,32,112,97,116,104,32,101,108,101, +109,101,110,116,32,101,109,112,116,121,6,10,10,103,105,118,101,110,32,112,97, +116,104,66,102,105,110,105,115,104,5,1,95,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,160,15, +194,28,192,192,28,248,22,151,7,194,27,248,22,183,15,195,28,192,192,248,22, +184,15,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,161,15,23,195,2,10,28,248,22,160,15,23,195,2,10,28,248,22,151, +7,23,195,2,28,248,22,183,15,23,195,2,10,248,22,184,15,23,195,2,11, +12,250,22,176,11,2,41,2,42,23,197,2,28,28,248,22,161,15,23,195,2, +249,22,167,9,248,22,162,15,23,197,2,2,43,249,22,167,9,247,22,178,8, +2,43,27,28,248,22,151,7,23,196,2,23,195,2,248,22,163,8,248,22,165, +15,23,197,2,28,249,22,156,16,2,78,23,195,2,28,248,22,151,7,195,248, +22,168,15,195,194,27,248,22,190,7,23,195,1,249,22,169,15,248,22,166,8, +250,22,164,16,2,79,28,249,22,156,16,2,80,23,201,2,23,199,1,250,22, +164,16,2,81,23,202,1,2,44,80,144,44,37,38,2,43,28,248,22,151,7, +194,248,22,168,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,160,15,23,195,2,10,28,248,22,151,7,23,195,2,28,248,22,183,15, +23,195,2,10,248,22,184,15,23,195,2,11,10,248,22,161,15,23,195,2,12, +252,22,176,11,2,5,2,45,36,23,199,2,23,200,2,28,28,28,248,22,160, +15,23,196,2,10,28,248,22,151,7,23,196,2,28,248,22,183,15,23,196,2, +10,248,22,184,15,23,196,2,11,10,248,22,161,15,23,196,2,12,252,22,176, +11,2,5,2,45,37,23,199,2,23,200,2,27,28,248,22,161,15,23,196,2, +248,22,162,15,23,196,2,247,22,163,15,86,95,28,28,248,22,185,15,23,196, +2,10,249,22,167,9,247,22,163,15,23,195,2,12,253,22,178,11,2,5,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,163,15,28,249,22,167,9,28,248,22,161,15,23,199,2, +248,22,162,15,23,199,2,247,22,163,15,23,195,2,12,253,22,178,11,2,5, +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,189,15,28,248,22,185,15,23,199,2,23,198,1,248,22,186,15,23,199,1, +86,94,28,28,248,22,161,15,23,194,2,10,28,248,22,160,15,23,194,2,10, +28,248,22,151,7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15, +23,194,2,11,12,250,22,176,11,2,41,2,42,23,196,2,28,28,248,22,161, +15,23,194,2,249,22,167,9,248,22,162,15,23,196,2,2,43,249,22,167,9, +247,22,178,8,2,43,27,28,248,22,151,7,23,195,2,23,194,2,248,22,163, +8,248,22,165,15,23,196,2,28,249,22,156,16,2,78,23,195,2,28,248,22, +151,7,194,248,22,168,15,194,193,27,248,22,190,7,23,195,1,249,22,169,15, +248,22,166,8,250,22,164,16,2,79,28,249,22,156,16,2,80,23,201,2,23, +199,1,250,22,164,16,2,81,23,202,1,2,44,80,144,47,37,38,2,43,28, +248,22,151,7,193,248,22,168,15,193,192,27,248,22,165,15,23,195,2,28,249, +22,167,9,23,197,2,64,117,110,105,120,28,249,22,148,8,194,5,1,47,28, +248,22,161,15,198,197,248,22,168,15,198,249,22,178,15,199,249,22,169,15,249, +22,151,8,248,22,165,15,200,37,198,28,249,22,167,9,23,197,2,2,43,249, +22,178,15,23,200,1,249,22,169,15,28,249,22,156,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,152,8,2,47,250,22,151,8,203,40,41,5,1,92, +249,22,151,8,202,42,28,249,22,156,16,2,83,23,199,2,249,22,152,8,2, +47,249,22,151,8,200,40,28,249,22,156,16,2,83,23,199,2,249,22,152,8, +2,47,249,22,151,8,200,40,28,249,22,156,16,0,14,35,114,120,34,94,92, +92,92,92,92,92,92,92,34,23,199,2,249,22,152,8,5,4,85,78,67,92, +249,22,151,8,200,38,28,249,22,156,16,0,12,35,114,120,34,94,91,97,45, +122,93,58,34,198,249,22,152,8,250,22,151,8,201,36,37,249,22,151,8,200, +38,12,198,12,32,85,88,148,8,36,39,53,11,70,102,111,117,110,100,45,101, +120,101,99,222,33,88,32,86,88,148,8,36,40,58,11,64,110,101,120,116,222, +33,87,27,248,22,187,15,23,196,2,28,249,22,169,9,23,195,2,23,197,1, +11,28,248,22,183,15,23,194,2,27,249,22,178,15,23,197,1,23,196,1,28, +23,197,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,2,86,95, +23,195,1,23,194,1,27,28,23,202,2,27,248,22,187,15,23,199,2,28,249, +22,169,9,23,195,2,23,200,2,11,28,248,22,183,15,23,194,2,250,2,85, +23,205,2,23,206,2,249,22,178,15,23,200,2,23,198,1,250,2,85,23,205, +2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248, +22,160,15,23,196,2,27,249,22,178,15,23,198,2,23,205,2,28,28,248,22, +173,15,193,10,248,22,172,15,193,192,11,11,28,23,193,2,192,86,94,23,193, +1,28,23,203,2,11,27,248,22,187,15,23,200,2,28,249,22,169,9,194,23, +201,1,11,28,248,22,183,15,193,250,2,85,205,206,249,22,178,15,200,197,250, +2,85,205,206,195,192,86,94,23,194,1,28,23,196,2,90,144,39,11,89,146, +39,36,11,248,22,181,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23, +201,2,27,248,22,187,15,23,199,2,28,249,22,169,9,23,195,2,23,200,2, +11,28,248,22,183,15,23,194,2,250,2,85,23,204,2,23,205,2,249,22,178, +15,23,200,2,23,198,1,250,2,85,23,204,2,23,205,2,23,196,1,11,28, +23,193,2,192,86,94,23,193,1,27,28,248,22,160,15,23,196,2,27,249,22, +178,15,23,198,2,23,204,2,28,28,248,22,173,15,193,10,248,22,172,15,193, +192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22, +187,15,23,200,2,28,249,22,169,9,194,23,201,1,11,28,248,22,183,15,193, +250,2,85,204,205,249,22,178,15,200,197,250,2,85,204,205,195,192,28,23,193, +2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,199,2,86,95,23,195, +1,23,194,1,27,28,23,198,2,251,2,86,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,160,15,195, +27,249,22,178,15,197,200,28,28,248,22,173,15,193,10,248,22,172,15,193,192, +11,11,28,192,192,28,198,11,251,2,86,198,203,201,202,194,32,89,88,148,8, +36,40,57,11,2,50,222,33,90,28,248,22,88,23,197,2,11,27,249,22,178, +15,248,22,186,15,248,22,81,23,201,2,23,196,2,28,248,22,172,15,23,194, +2,250,2,85,197,198,195,86,94,23,193,1,27,248,22,82,23,199,1,28,248, +22,88,23,194,2,11,27,249,22,178,15,248,22,186,15,248,22,81,23,198,2, +23,198,2,28,248,22,172,15,23,194,2,250,2,85,199,200,195,86,94,23,193, +1,27,248,22,82,23,196,1,28,248,22,88,23,194,2,11,27,249,22,178,15, +248,22,186,15,248,22,81,23,198,2,23,200,2,28,248,22,172,15,23,194,2, +250,2,85,201,202,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22, +88,23,194,2,11,27,249,22,178,15,248,22,186,15,248,22,81,197,201,28,248, +22,172,15,193,250,2,85,203,204,195,251,2,89,203,204,205,248,22,82,198,86, +95,28,28,248,22,160,15,23,195,2,10,28,248,22,151,7,23,195,2,28,248, +22,183,15,23,195,2,10,248,22,184,15,23,195,2,11,12,250,22,176,11,2, +6,2,48,23,197,2,28,28,23,195,2,28,28,248,22,160,15,23,196,2,10, +28,248,22,151,7,23,196,2,28,248,22,183,15,23,196,2,10,248,22,184,15, +23,196,2,11,248,22,183,15,23,196,2,11,10,12,250,22,176,11,2,6,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,183,15,23,195,2,90,144,39,11, +89,146,39,36,11,248,22,181,15,23,198,2,249,22,167,9,194,2,49,11,27, +249,22,173,8,247,22,172,8,5,4,80,65,84,72,27,28,23,194,2,249,80, +143,40,41,249,22,163,8,23,198,1,7,63,9,86,94,23,194,1,9,27,28, +249,22,167,9,247,22,178,8,2,43,249,22,80,248,22,169,15,5,1,46,23, +196,1,23,194,1,28,248,22,88,23,194,2,11,27,249,22,178,15,248,22,186, +15,248,22,81,23,198,2,23,200,2,28,248,22,172,15,23,194,2,250,2,85, +201,202,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194, +2,11,27,249,22,178,15,248,22,186,15,248,22,81,23,198,2,23,202,2,28, +248,22,172,15,23,194,2,250,2,85,203,204,195,86,94,23,193,1,27,248,22, +82,23,196,1,28,248,22,88,23,194,2,11,27,249,22,178,15,248,22,186,15, +248,22,81,23,198,2,23,204,2,28,248,22,172,15,23,194,2,250,2,85,205, +206,195,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2, +11,27,249,22,178,15,248,22,186,15,248,22,81,197,205,28,248,22,172,15,193, +250,2,85,23,15,23,16,195,251,2,89,23,15,23,16,23,17,248,22,82,198, +27,248,22,186,15,23,196,1,28,248,22,172,15,193,250,2,85,198,199,195,11, +250,80,144,39,40,39,196,197,11,250,80,144,39,40,39,196,11,11,32,94,88, +148,8,36,39,57,11,2,50,222,33,96,0,8,35,114,120,35,34,92,34,34, +27,249,22,152,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,152,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,94,23,203,2,23,204,1,248,22,111,23,199,1,28,249,22,148,8,23, +196,2,2,51,249,22,94,23,202,2,194,249,22,80,248,22,169,15,28,249,22, +167,9,247,22,178,8,2,43,250,22,164,16,2,95,23,200,1,2,51,196,194, +86,95,23,199,1,23,193,1,28,249,22,148,8,23,196,2,2,51,249,22,94, +23,200,2,9,249,22,80,248,22,169,15,28,249,22,167,9,247,22,178,8,2, +43,250,22,164,16,2,95,23,200,1,2,51,196,9,28,249,22,148,8,23,196, +2,2,51,249,22,94,197,194,86,94,23,196,1,249,22,80,248,22,169,15,28, 249,22,167,9,247,22,178,8,2,43,250,22,164,16,2,95,23,200,1,2,51, -196,194,86,95,23,199,1,23,193,1,28,249,22,148,8,23,196,2,2,51,249, -22,94,23,200,2,9,249,22,80,248,22,169,15,28,249,22,167,9,247,22,178, -8,2,43,250,22,164,16,2,95,23,200,1,2,51,196,9,28,249,22,148,8, -23,196,2,2,51,249,22,94,197,194,86,94,23,196,1,249,22,80,248,22,169, -15,28,249,22,167,9,247,22,178,8,2,43,250,22,164,16,2,95,23,200,1, -2,51,196,194,86,94,23,193,1,28,249,22,148,8,23,198,2,2,51,249,22, -94,195,9,86,94,23,194,1,249,22,80,248,22,169,15,28,249,22,167,9,247, -22,178,8,2,43,250,22,164,16,2,95,23,202,1,2,51,198,9,86,95,28, -28,248,22,140,8,194,10,248,22,151,7,194,12,250,22,176,11,2,7,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,160,15,196,11,12,250,22,176,11, -2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63,41,197,250, -2,94,197,195,28,248,22,151,7,197,248,22,165,8,197,196,28,28,248,22,0, -23,195,2,249,22,50,23,196,2,36,11,20,13,144,80,144,36,43,37,26,29, -80,144,8,29,44,37,249,22,33,11,80,144,8,31,43,37,22,130,15,10,22, +196,194,86,94,23,193,1,28,249,22,148,8,23,198,2,2,51,249,22,94,195, +9,86,94,23,194,1,249,22,80,248,22,169,15,28,249,22,167,9,247,22,178, +8,2,43,250,22,164,16,2,95,23,202,1,2,51,198,9,86,95,28,28,248, +22,140,8,194,10,248,22,151,7,194,12,250,22,176,11,2,7,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,160,15,196,11,12,250,22,176,11,2,7, +6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63,41,197,250,2,94, +197,195,28,248,22,151,7,197,248,22,165,8,197,196,28,28,248,22,0,23,195, +2,249,22,50,23,196,2,36,11,20,13,144,80,144,36,43,37,26,29,80,144, +8,29,44,37,249,22,33,11,80,144,8,31,43,37,22,130,15,10,22,131,15, +10,22,132,15,10,22,135,15,10,22,134,15,11,22,136,15,10,22,133,15,10, +22,137,15,10,22,138,15,10,22,139,15,10,22,140,15,10,22,141,15,11,22, +142,15,10,22,128,15,11,247,23,194,1,250,22,176,11,2,8,2,52,23,197, +1,86,94,28,28,248,22,160,15,23,195,2,10,28,248,22,151,7,23,195,2, +28,248,22,183,15,23,195,2,10,248,22,184,15,23,195,2,11,12,250,22,176, +11,23,196,2,2,48,23,197,2,28,248,22,183,15,23,195,2,12,251,22,178, +11,23,197,1,2,53,2,46,23,198,1,86,94,28,28,248,22,160,15,23,195, +2,10,28,248,22,151,7,23,195,2,28,248,22,183,15,23,195,2,10,248,22, +184,15,23,195,2,11,12,250,22,176,11,23,196,2,2,48,23,197,2,28,248, +22,183,15,23,195,2,12,251,22,178,11,23,197,1,2,53,2,46,23,198,1, +86,94,86,94,28,28,248,22,160,15,23,195,2,10,28,248,22,151,7,23,195, +2,28,248,22,183,15,23,195,2,10,248,22,184,15,23,195,2,11,12,250,22, +176,11,23,196,2,2,48,23,197,2,28,248,22,183,15,23,195,2,86,94,23, +194,1,12,251,22,178,11,23,197,2,2,53,2,46,23,198,1,249,22,3,20, +20,94,88,148,8,36,37,47,11,9,223,2,33,100,23,195,1,23,197,1,28, +28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,176,11,23, +196,1,2,54,23,197,1,86,94,28,28,248,22,160,15,23,194,2,10,28,248, +22,151,7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15,23,194, +2,11,12,250,22,176,11,2,15,2,48,23,196,2,28,248,22,183,15,23,194, +2,12,251,22,178,11,2,15,2,53,2,46,23,197,1,86,95,86,94,86,94, +28,28,248,22,160,15,23,196,2,10,28,248,22,151,7,23,196,2,28,248,22, +183,15,23,196,2,10,248,22,184,15,23,196,2,11,12,250,22,176,11,2,15, +2,48,23,198,2,28,248,22,183,15,23,196,2,12,251,22,178,11,2,15,2, +53,2,46,23,199,2,249,22,3,32,0,88,148,8,36,37,46,11,9,222,33, +103,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12, +250,22,176,11,2,15,2,54,23,197,2,251,80,143,40,49,23,198,1,23,199, +1,23,200,1,11,86,94,28,28,248,22,160,15,23,194,2,10,28,248,22,151, +7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15,23,194,2,11, +12,250,22,176,11,2,17,2,48,23,196,2,28,248,22,183,15,23,194,2,12, +251,22,178,11,2,17,2,53,2,46,23,197,1,86,96,86,94,28,28,248,22, +160,15,23,196,2,10,28,248,22,151,7,23,196,2,28,248,22,183,15,23,196, +2,10,248,22,184,15,23,196,2,11,12,250,22,176,11,2,17,2,48,23,198, +2,28,248,22,183,15,23,196,2,12,251,22,178,11,2,17,2,53,2,46,23, +199,2,86,94,86,94,28,28,248,22,160,15,23,197,2,10,28,248,22,151,7, +23,197,2,28,248,22,183,15,23,197,2,10,248,22,184,15,23,197,2,11,12, +250,22,176,11,2,17,2,48,23,199,2,28,248,22,183,15,23,197,2,12,251, +22,178,11,2,17,2,53,2,46,23,200,2,249,22,3,32,0,88,148,8,36, +37,46,11,9,222,33,105,23,199,2,28,28,248,22,0,23,195,2,249,22,50, +23,196,2,37,11,12,250,22,176,11,2,17,2,54,23,197,2,251,80,143,40, +49,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22,137,16,2,55,28, +248,22,185,15,23,194,2,248,22,188,15,23,194,1,28,248,22,184,15,23,194, +2,90,144,39,11,89,146,39,36,11,248,22,181,15,249,22,186,15,27,248,22, +137,16,2,56,250,80,144,47,40,39,23,196,1,11,11,248,22,137,16,2,57, +86,95,23,195,1,23,194,1,248,22,188,15,249,22,186,15,23,199,1,23,196, +1,27,250,80,144,41,40,39,248,22,137,16,2,56,23,197,1,10,28,23,193, +2,248,22,188,15,23,194,1,11,249,80,144,38,52,37,36,80,144,38,8,39, +39,27,248,22,137,16,2,58,28,248,22,185,15,23,194,2,248,22,188,15,23, +194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36,11,248,22, +181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,47,40,39,23,196, +1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248,22,188,15, +249,22,186,15,23,199,1,23,196,1,27,250,80,144,41,40,39,248,22,137,16, +2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11,249,80,144, +38,52,37,37,80,144,38,8,40,39,27,20,13,144,80,144,37,43,37,26,29, +80,144,8,30,44,37,249,22,33,11,80,144,8,32,43,37,22,130,15,10,22, 131,15,10,22,132,15,10,22,135,15,10,22,134,15,11,22,136,15,10,22,133, 15,10,22,137,15,10,22,138,15,10,22,139,15,10,22,140,15,10,22,141,15, -11,22,142,15,10,22,128,15,11,247,23,194,1,250,22,176,11,2,8,2,52, -23,197,1,86,94,28,28,248,22,160,15,23,195,2,10,28,248,22,151,7,23, -195,2,28,248,22,183,15,23,195,2,10,248,22,184,15,23,195,2,11,12,250, -22,176,11,23,196,2,2,48,23,197,2,28,248,22,183,15,23,195,2,12,251, -22,178,11,23,197,1,2,53,2,46,23,198,1,86,94,28,28,248,22,160,15, -23,195,2,10,28,248,22,151,7,23,195,2,28,248,22,183,15,23,195,2,10, -248,22,184,15,23,195,2,11,12,250,22,176,11,23,196,2,2,48,23,197,2, -28,248,22,183,15,23,195,2,12,251,22,178,11,23,197,1,2,53,2,46,23, -198,1,86,94,86,94,28,28,248,22,160,15,23,195,2,10,28,248,22,151,7, -23,195,2,28,248,22,183,15,23,195,2,10,248,22,184,15,23,195,2,11,12, -250,22,176,11,23,196,2,2,48,23,197,2,28,248,22,183,15,23,195,2,86, -94,23,194,1,12,251,22,178,11,23,197,2,2,53,2,46,23,198,1,249,22, -3,20,20,94,88,148,8,36,37,47,11,9,223,2,33,100,23,195,1,23,197, -1,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,176, -11,23,196,1,2,54,23,197,1,86,94,28,28,248,22,160,15,23,194,2,10, -28,248,22,151,7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15, -23,194,2,11,12,250,22,176,11,2,15,2,48,23,196,2,28,248,22,183,15, -23,194,2,12,251,22,178,11,2,15,2,53,2,46,23,197,1,86,95,86,94, -86,94,28,28,248,22,160,15,23,196,2,10,28,248,22,151,7,23,196,2,28, -248,22,183,15,23,196,2,10,248,22,184,15,23,196,2,11,12,250,22,176,11, -2,15,2,48,23,198,2,28,248,22,183,15,23,196,2,12,251,22,178,11,2, -15,2,53,2,46,23,199,2,249,22,3,32,0,88,148,8,36,37,46,11,9, -222,33,103,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37, -11,12,250,22,176,11,2,15,2,54,23,197,2,251,80,143,40,49,23,198,1, -23,199,1,23,200,1,11,86,94,28,28,248,22,160,15,23,194,2,10,28,248, -22,151,7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15,23,194, -2,11,12,250,22,176,11,2,17,2,48,23,196,2,28,248,22,183,15,23,194, -2,12,251,22,178,11,2,17,2,53,2,46,23,197,1,86,96,86,94,28,28, -248,22,160,15,23,196,2,10,28,248,22,151,7,23,196,2,28,248,22,183,15, -23,196,2,10,248,22,184,15,23,196,2,11,12,250,22,176,11,2,17,2,48, -23,198,2,28,248,22,183,15,23,196,2,12,251,22,178,11,2,17,2,53,2, -46,23,199,2,86,94,86,94,28,28,248,22,160,15,23,197,2,10,28,248,22, -151,7,23,197,2,28,248,22,183,15,23,197,2,10,248,22,184,15,23,197,2, -11,12,250,22,176,11,2,17,2,48,23,199,2,28,248,22,183,15,23,197,2, -12,251,22,178,11,2,17,2,53,2,46,23,200,2,249,22,3,32,0,88,148, -8,36,37,46,11,9,222,33,105,23,199,2,28,28,248,22,0,23,195,2,249, -22,50,23,196,2,37,11,12,250,22,176,11,2,17,2,54,23,197,2,251,80, -143,40,49,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22,137,16,2, -55,28,248,22,185,15,23,194,2,248,22,188,15,23,194,1,28,248,22,184,15, -23,194,2,90,144,39,11,89,146,39,36,11,248,22,181,15,249,22,186,15,27, -248,22,137,16,2,56,250,80,144,47,40,39,23,196,1,11,11,248,22,137,16, -2,57,86,95,23,195,1,23,194,1,248,22,188,15,249,22,186,15,23,199,1, -23,196,1,27,250,80,144,41,40,39,248,22,137,16,2,56,23,197,1,10,28, -23,193,2,248,22,188,15,23,194,1,11,249,80,144,38,52,37,36,80,144,38, -8,39,39,27,248,22,137,16,2,58,28,248,22,185,15,23,194,2,248,22,188, -15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36,11, -248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,47,40,39, +11,22,142,15,10,22,128,15,11,247,22,146,6,28,248,22,149,2,193,192,11, +27,28,23,195,2,249,22,178,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,172,15, +23,195,2,249,22,138,6,23,196,1,80,144,40,8,41,39,11,11,28,192,192, +21,17,1,0,250,22,158,2,23,196,1,2,59,247,22,169,8,250,22,158,2, +195,2,59,247,22,169,8,28,248,22,151,7,23,195,2,27,248,22,168,15,23, +196,1,28,248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247,80, +144,40,51,39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,28,248,22, +140,8,23,195,2,27,248,22,169,15,23,196,1,28,248,22,185,15,23,194,2, +192,249,22,186,15,23,195,1,27,247,80,144,40,51,39,28,23,193,2,192,86, +94,23,193,1,247,22,138,16,28,248,22,160,15,23,195,2,28,248,22,185,15, +23,195,2,193,249,22,186,15,23,196,1,27,247,80,144,39,51,39,28,23,193, +2,192,86,94,23,193,1,247,22,138,16,193,27,248,22,137,16,2,55,28,248, +22,185,15,23,194,2,248,22,188,15,23,194,1,28,248,22,184,15,23,194,2, +90,144,39,11,89,146,39,36,11,248,22,181,15,249,22,186,15,27,248,22,137, +16,2,56,250,80,144,47,40,39,23,196,1,11,11,248,22,137,16,2,57,86, +95,23,195,1,23,194,1,248,22,188,15,249,22,186,15,23,199,1,23,196,1, +27,250,80,144,41,40,39,248,22,137,16,2,56,23,197,1,10,28,23,193,2, +248,22,188,15,23,194,1,11,28,248,22,185,15,23,195,2,193,249,22,186,15, +23,196,1,27,249,80,144,41,52,37,36,80,144,41,8,42,39,28,23,193,2, +192,86,94,23,193,1,247,22,138,16,28,248,22,185,15,23,195,2,248,22,188, +15,23,195,1,28,248,22,184,15,23,195,2,90,144,39,11,89,146,39,36,11, +248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,46,40,39, 23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248,22, -188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,41,40,39,248,22, -137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11,249, -80,144,38,52,37,37,80,144,38,8,40,39,27,20,13,144,80,144,37,43,37, -26,29,80,144,8,30,44,37,249,22,33,11,80,144,8,32,43,37,22,130,15, -10,22,131,15,10,22,132,15,10,22,135,15,10,22,134,15,11,22,136,15,10, -22,133,15,10,22,137,15,10,22,138,15,10,22,139,15,10,22,140,15,10,22, -141,15,11,22,142,15,10,22,128,15,11,247,22,146,6,28,248,22,149,2,193, -192,11,27,28,23,195,2,249,22,178,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, -172,15,23,195,2,249,22,138,6,23,196,1,80,144,40,8,41,39,11,11,28, -192,192,21,17,1,0,250,22,158,2,23,196,1,2,59,247,22,169,8,250,22, -158,2,195,2,59,247,22,169,8,28,248,22,151,7,23,195,2,27,248,22,168, -15,23,196,1,28,248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27, -247,80,144,40,51,39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,28, -248,22,140,8,23,195,2,27,248,22,169,15,23,196,1,28,248,22,185,15,23, -194,2,192,249,22,186,15,23,195,1,27,247,80,144,40,51,39,28,23,193,2, -192,86,94,23,193,1,247,22,138,16,28,248,22,160,15,23,195,2,28,248,22, -185,15,23,195,2,193,249,22,186,15,23,196,1,27,247,80,144,39,51,39,28, -23,193,2,192,86,94,23,193,1,247,22,138,16,193,27,248,22,137,16,2,55, -28,248,22,185,15,23,194,2,248,22,188,15,23,194,1,28,248,22,184,15,23, -194,2,90,144,39,11,89,146,39,36,11,248,22,181,15,249,22,186,15,27,248, -22,137,16,2,56,250,80,144,47,40,39,23,196,1,11,11,248,22,137,16,2, -57,86,95,23,195,1,23,194,1,248,22,188,15,249,22,186,15,23,199,1,23, -196,1,27,250,80,144,41,40,39,248,22,137,16,2,56,23,197,1,10,28,23, -193,2,248,22,188,15,23,194,1,11,28,248,22,185,15,23,195,2,193,249,22, -186,15,23,196,1,27,249,80,144,41,52,37,36,80,144,41,8,42,39,28,23, -193,2,192,86,94,23,193,1,247,22,138,16,28,248,22,185,15,23,195,2,248, -22,188,15,23,195,1,28,248,22,184,15,23,195,2,90,144,39,11,89,146,39, -36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,46, -40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1, -248,22,188,15,249,22,186,15,23,200,1,23,196,1,27,250,80,144,40,40,39, -248,22,137,16,2,56,23,198,1,10,28,23,193,2,248,22,188,15,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,144,18,23,199,2,28,248,22,151,7,23,194,2,27,248,22,168,15,23,195, -1,28,248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247,80,144, -43,51,39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,28,248,22,140, -8,23,194,2,27,248,22,169,15,23,195,1,28,248,22,185,15,23,194,2,192, -249,22,186,15,23,195,1,27,247,80,144,43,51,39,28,23,193,2,192,86,94, -23,193,1,247,22,138,16,28,248,22,160,15,23,194,2,28,248,22,185,15,23, -194,2,192,249,22,186,15,23,195,1,27,247,80,144,42,51,39,28,23,193,2, -192,86,94,23,193,1,247,22,138,16,192,27,248,22,145,18,23,199,1,28,248, -22,88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,42,57, -39,248,22,144,18,23,197,2,27,248,22,145,18,23,197,1,28,248,22,88,23, -194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248,22, -144,18,23,197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198, -1,249,22,94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18, -23,198,1,249,22,94,23,199,2,27,248,22,145,18,23,197,1,28,248,22,88, -23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248, -22,144,18,23,197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23, -198,1,249,22,94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145, -18,23,198,1,249,22,94,23,196,2,27,248,22,145,18,23,199,1,28,248,22, -88,23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,42,57,39, -248,22,144,18,23,197,2,27,248,22,145,18,23,197,1,28,248,22,88,23,194, +188,15,249,22,186,15,23,200,1,23,196,1,27,250,80,144,40,40,39,248,22, +137,16,2,56,23,198,1,10,28,23,193,2,248,22,188,15,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,144, +18,23,199,2,28,248,22,151,7,23,194,2,27,248,22,168,15,23,195,1,28, +248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247,80,144,43,51, +39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,28,248,22,140,8,23, +194,2,27,248,22,169,15,23,195,1,28,248,22,185,15,23,194,2,192,249,22, +186,15,23,195,1,27,247,80,144,43,51,39,28,23,193,2,192,86,94,23,193, +1,247,22,138,16,28,248,22,160,15,23,194,2,28,248,22,185,15,23,194,2, +192,249,22,186,15,23,195,1,27,247,80,144,42,51,39,28,23,193,2,192,86, +94,23,193,1,247,22,138,16,192,27,248,22,145,18,23,199,1,28,248,22,88, +23,194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,42,57,39,248, +22,144,18,23,197,2,27,248,22,145,18,23,197,1,28,248,22,88,23,194,2, +9,28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248,22,144,18, +23,197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198,1,249, +22,94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198, +1,249,22,94,23,199,2,27,248,22,145,18,23,197,1,28,248,22,88,23,194, 2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248,22,144, 18,23,197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198,1, 249,22,94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23, -198,1,249,22,94,23,199,2,27,248,22,145,18,23,197,1,28,248,22,88,23, -194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248,22, -144,18,23,197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198, -1,249,22,94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18, -23,198,1,27,250,22,158,2,23,198,1,23,199,1,11,28,192,249,80,144,39, -8,43,39,198,194,196,27,248,22,137,16,2,58,28,248,22,185,15,23,194,2, -248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146, -39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144, -47,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194, -1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,41,40, -39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194, -1,11,27,248,80,144,38,55,39,249,80,144,40,52,37,37,80,144,40,8,44, -39,27,27,250,22,158,2,23,198,2,70,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,178,15,27,250,22, -158,2,23,202,2,69,115,104,97,114,101,45,100,105,114,11,28,192,192,249,22, -178,15,62,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,151,7,23, -194,2,27,248,22,168,15,23,195,1,28,248,22,185,15,23,194,2,192,249,22, -186,15,23,195,1,27,247,80,144,44,51,39,28,23,193,2,192,86,94,23,193, -1,247,22,138,16,28,248,22,140,8,23,194,2,27,248,22,169,15,23,195,1, -28,248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247,80,144,44, -51,39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,28,248,22,160,15, -23,194,2,28,248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247, -80,144,43,51,39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,192,250, -22,94,248,22,90,11,28,247,22,144,16,28,247,22,145,16,248,22,90,250,22, -178,15,248,22,137,16,2,61,250,22,158,2,23,204,2,2,59,247,22,169,8, -2,60,9,9,28,247,22,145,16,250,80,144,44,59,39,23,200,1,78,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,166,13,23,194,1,249,22,16,80,144,38,8,26,38,28,248,22, -186,12,23,197,2,86,94,23,196,1,32,0,88,148,8,36,36,41,11,9,222, -11,20,20,94,88,148,8,36,36,43,11,9,223,3,33,123,23,196,1,32,125, -88,148,36,37,56,11,2,50,222,33,126,90,144,39,11,89,146,39,36,11,248, -22,181,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,160,15,23,194, -2,28,248,22,173,15,23,194,2,249,22,143,6,23,195,1,32,0,88,148,8, -36,36,41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,181,15,23, -197,1,86,95,23,195,1,23,194,1,28,248,22,160,15,23,194,2,28,248,22, -173,15,23,194,2,249,22,143,6,23,195,1,32,0,88,148,8,36,36,41,11, -9,222,11,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95, -23,195,1,23,194,1,28,248,22,160,15,23,194,2,28,248,22,173,15,23,194, -2,249,22,143,6,23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90, -144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95,23,195,1,23, -194,1,28,248,22,160,15,23,194,2,28,248,22,173,15,23,194,2,249,22,143, -6,23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,248,2,125,23,194, -1,11,11,11,11,32,127,88,148,8,36,37,55,11,2,50,222,33,128,2,27, -249,22,161,6,8,128,128,23,196,2,28,248,22,146,7,23,194,2,9,249,22, -80,23,195,1,27,249,22,161,6,8,128,128,23,199,2,28,248,22,146,7,23, -194,2,9,249,22,80,23,195,1,27,249,22,161,6,8,128,128,23,202,2,28, -248,22,146,7,23,194,2,9,249,22,80,23,195,1,27,249,22,161,6,8,128, -128,23,205,2,28,248,22,146,7,23,194,2,9,249,22,80,23,195,1,248,2, -127,23,206,1,27,249,22,161,6,8,128,128,23,196,2,28,248,22,140,8,23, -194,2,28,249,22,132,4,248,22,145,8,23,196,2,8,128,128,249,22,1,22, -152,8,249,22,80,23,197,1,27,249,22,161,6,8,128,128,23,201,2,28,248, -22,146,7,23,194,2,9,249,22,80,23,195,1,27,249,22,161,6,8,128,128, -23,204,2,28,248,22,146,7,23,194,2,9,249,22,80,23,195,1,27,249,22, -161,6,8,128,128,23,207,2,28,248,22,146,7,23,194,2,9,249,22,80,23, -195,1,27,249,22,161,6,8,128,128,23,210,2,28,248,22,146,7,23,194,2, -9,249,22,80,23,195,1,248,2,127,23,211,1,192,192,248,22,131,6,23,194, -1,20,13,144,80,144,37,8,28,37,80,144,37,8,45,39,27,28,249,22,187, -8,248,22,178,8,2,62,38,90,144,39,11,89,146,39,36,11,248,22,181,15, -23,198,2,86,95,23,195,1,23,194,1,28,248,22,160,15,23,194,2,28,248, -22,173,15,23,194,2,249,22,143,6,23,195,1,32,0,88,148,8,36,36,41, -11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86, -95,23,195,1,23,194,1,28,248,22,160,15,23,194,2,28,248,22,173,15,23, -194,2,249,22,143,6,23,195,1,32,0,88,148,8,36,36,41,11,9,222,11, -90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95,23,195,1, -23,194,1,28,248,22,160,15,23,194,2,28,248,22,173,15,23,194,2,249,22, -143,6,23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39,11, -89,146,39,36,11,248,22,181,15,23,197,1,86,95,23,195,1,23,194,1,28, -248,22,160,15,23,194,2,28,248,22,173,15,23,194,2,249,22,143,6,23,195, -1,32,0,88,148,8,36,36,41,11,9,222,11,248,2,125,23,194,1,11,11, -11,11,11,28,248,22,172,15,23,195,2,27,28,249,22,187,8,248,22,178,8, -2,62,38,249,22,143,6,23,197,2,32,0,88,148,8,36,36,41,11,9,222, -11,11,86,94,28,23,194,2,248,22,145,6,23,195,1,86,94,23,194,1,12, -249,22,80,27,248,22,186,5,23,199,1,250,22,46,22,37,88,148,36,36,8, -24,11,9,223,3,33,129,2,20,20,94,88,148,36,36,43,11,9,223,3,33, -130,2,23,196,1,194,249,22,80,11,194,28,28,23,195,2,28,248,22,82,23, -196,2,248,22,165,9,249,22,161,14,36,248,22,145,18,23,199,2,11,11,194, -86,94,23,195,1,249,22,14,20,20,94,88,148,8,32,36,58,16,4,36,8, -128,80,8,128,128,36,9,224,2,3,33,131,2,23,196,1,80,144,38,8,26, -38,27,248,22,165,9,194,28,192,192,248,22,165,9,248,22,81,195,86,95,28, -248,22,143,12,23,198,2,27,247,22,135,12,28,249,22,191,11,23,195,2,2, -63,251,22,131,12,23,197,1,2,63,250,22,135,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,139,12,23,206,2,247,22,29,12,12,28,23,193,2,250,22,156,2,80,144, -42,8,25,38,23,198,1,249,22,80,21,17,0,0,23,198,1,86,95,23,195, -1,23,193,1,12,28,248,22,143,12,23,198,2,86,94,23,197,1,248,23,195, -1,247,22,138,2,196,88,148,36,37,55,8,240,0,0,0,2,9,226,0,2, -1,3,33,134,2,20,20,94,248,22,146,6,23,194,2,28,248,22,146,7,248, -22,146,6,23,195,1,12,248,22,172,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,131,6,23,194,1,28,248,22,89,193,28,28,249,22,128,4,38, -248,22,93,195,10,249,22,128,4,39,248,22,93,195,28,28,248,22,151,7,248, -22,81,194,10,28,249,22,167,9,2,64,248,22,144,18,195,10,249,22,167,9, -2,65,248,22,144,18,195,28,27,248,22,102,194,28,248,22,160,15,193,10,28, -248,22,151,7,193,28,248,22,183,15,193,10,248,22,184,15,193,11,27,248,22, -88,248,22,104,195,28,192,192,248,22,165,16,248,22,111,195,11,11,11,11,28, -248,22,173,15,249,22,178,15,23,196,2,23,198,2,27,248,22,68,248,22,164, -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,156,16,248,22,111,23,198,2,247,22,169,8,27,248,22,188,15,249,22, -186,15,248,22,102,23,200,2,23,198,1,28,249,22,167,9,248,22,81,23,199, -2,2,65,86,94,23,196,1,249,22,3,20,20,94,88,148,8,36,37,53,11, -9,224,3,2,33,139,2,23,196,1,248,22,191,15,23,196,1,28,249,22,167, -9,248,22,144,18,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,38,50,11,9,224,3,2,33,140,2,23,195, -1,23,196,1,27,248,22,68,248,22,144,18,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,165,9,248,22,81,23,196,2,10,9,27,249,22, -186,5,23,198,2,66,98,105,110,97,114,121,250,22,46,22,37,88,148,8,36, -36,44,11,9,223,3,33,136,2,20,20,94,88,148,36,36,43,11,9,223,3, -33,137,2,23,196,1,86,94,28,28,248,22,89,23,194,2,249,22,4,32,0, -88,148,8,36,37,45,11,9,222,33,138,2,23,195,2,11,12,248,22,172,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,39,11,89,146,39,36,11,248,22,181,15,23,201, -2,192,86,96,249,22,3,20,20,94,88,148,8,36,37,54,11,9,224,2,3, -33,141,2,23,195,1,23,197,1,249,22,164,2,195,88,148,8,36,38,48,11, -9,223,3,33,142,2,250,22,156,2,80,144,44,8,25,38,23,200,1,249,22, -80,23,201,1,198,193,20,13,144,80,144,37,8,28,37,250,80,144,40,8,46, -39,23,198,2,23,196,2,11,27,250,22,158,2,80,144,41,8,25,38,23,197, -2,21,143,11,17,0,0,27,248,22,81,23,195,2,27,249,80,144,42,8,27, -39,23,198,2,23,196,2,28,249,22,169,9,23,195,2,23,196,1,248,22,82, -195,86,94,23,195,1,20,13,144,80,144,40,8,28,37,250,80,144,43,8,46, -39,23,201,1,23,199,2,23,196,2,27,20,20,95,88,148,8,36,36,52,8, -240,0,0,0,2,9,225,5,4,1,33,143,2,23,194,1,23,197,1,28,28, -248,22,0,23,194,2,249,22,50,23,195,2,36,11,20,13,144,80,144,41,43, -37,26,29,80,144,8,34,44,37,249,22,33,11,80,144,8,36,43,37,22,130, -15,10,22,131,15,10,22,132,15,10,22,135,15,10,22,134,15,11,22,136,15, -10,22,133,15,10,22,137,15,10,22,138,15,10,22,139,15,10,22,140,15,10, -22,141,15,11,22,142,15,10,22,128,15,11,247,23,193,1,250,22,176,11,2, -8,2,52,23,196,1,248,22,9,20,20,94,88,148,36,37,8,43,16,4,8, -128,6,8,128,104,8,240,0,64,0,0,36,9,224,1,2,33,144,2,23,195, -1,0,7,35,114,120,34,47,43,34,28,248,22,151,7,23,195,2,27,249,22, -154,16,2,146,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,154,7,23,199,2,249,22,7,250,22,173,7,23, -200,1,36,248,22,101,23,199,1,23,198,1,249,22,7,250,22,173,7,23,200, -2,36,248,22,101,23,199,2,249,22,80,249,22,173,7,23,201,1,248,22,103, -23,200,1,23,200,1,249,22,7,23,197,1,23,198,1,90,144,39,11,89,146, -39,36,11,248,22,181,15,23,198,1,86,94,23,195,1,28,249,22,167,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,151,7,23,195,2,27,249,22,154,16,2, -146,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,154,7,23,199,2,249,22,7,250,22,173,7,23,200,1,36, -248,22,101,23,199,1,23,196,1,249,22,7,250,22,173,7,23,200,2,36,248, -22,101,23,199,2,249,22,80,249,22,173,7,23,201,1,248,22,103,23,200,1, -23,198,1,249,22,7,23,197,1,23,196,1,90,144,39,11,89,146,39,36,11, -248,22,181,15,23,198,1,86,94,23,195,1,28,249,22,167,9,23,195,2,2, -49,86,94,23,193,1,249,22,7,23,196,1,23,198,1,249,80,144,45,8,31, -39,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,144,18,23,197,2,250,22,94,249,22,2,22,129, -2,250,22,158,2,248,22,144,18,23,204,2,23,202,2,9,250,22,158,2,248, -22,144,18,23,202,2,11,9,27,248,22,145,18,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,144,18,23,195, -2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,144,18,23,202,2, -23,206,2,9,250,22,158,2,248,22,144,18,23,200,2,11,9,249,80,144,45, -8,47,39,23,203,1,248,22,145,18,23,199,1,27,248,80,144,42,8,30,39, -248,22,144,18,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,46,8,47,39,23,204,1,248,22, -145,18,23,200,1,249,22,94,247,22,140,16,249,80,144,44,8,47,39,23,202, -1,248,22,145,18,23,198,1,27,248,80,144,38,8,30,39,248,22,144,18,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,145,18,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,144,18,23,195,2,250,22,94, -249,22,2,22,129,2,250,22,158,2,248,22,144,18,23,202,2,23,207,2,9, -250,22,158,2,248,22,144,18,23,200,2,11,9,249,80,144,46,8,47,39,23, -204,1,248,22,145,18,23,199,1,27,248,80,144,43,8,30,39,248,22,144,18, -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,47,8,47,39,23,205,1,248,22,145,18,23,200, -1,249,22,94,247,22,140,16,249,80,144,45,8,47,39,23,203,1,248,22,145, -18,23,198,1,249,22,94,247,22,140,16,27,248,22,145,18,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,144, -18,23,195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,144,18, -23,202,2,23,205,2,9,250,22,158,2,248,22,144,18,23,200,2,11,9,249, -80,144,44,8,47,39,23,202,1,248,22,145,18,23,199,1,27,248,80,144,41, -8,30,39,248,22,144,18,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,45,8,47,39,23,203, -1,248,22,145,18,23,200,1,249,22,94,247,22,140,16,249,80,144,43,8,47, -39,23,201,1,248,22,145,18,23,198,1,32,149,2,88,148,36,43,8,31,11, -65,99,108,111,111,112,222,33,156,2,32,150,2,88,148,8,36,37,47,11,2, -50,222,33,151,2,28,248,22,88,248,22,82,23,195,2,248,22,90,27,248,22, -144,18,195,28,248,22,160,15,193,248,22,164,15,193,192,250,22,91,27,248,22, -144,18,23,198,2,28,248,22,160,15,193,248,22,164,15,193,192,2,67,248,2, -150,2,248,22,145,18,23,198,1,250,22,135,8,6,7,7,10,32,126,97,32, -126,97,6,1,1,32,23,196,1,249,22,135,8,6,6,6,10,32,32,32,126, -97,248,22,132,2,23,196,1,32,154,2,88,148,36,38,48,11,66,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,144,18,23,197,2,249,2,154,2,23,197, -1,248,22,145,18,23,199,1,249,2,154,2,23,195,1,248,22,145,18,23,197, -1,28,248,22,88,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22, -178,15,200,198,198,27,28,248,22,88,23,197,2,2,66,249,22,1,22,174,7, -248,2,150,2,23,199,2,248,23,198,1,251,22,135,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,202,1,28,248,22,160,15,23,201,2,248,22, -164,15,23,201,1,23,200,1,250,22,174,7,28,248,22,160,15,23,204,2,248, -22,164,15,23,204,1,23,203,1,2,67,23,201,2,249,22,1,22,174,7,249, -22,2,32,0,88,148,8,36,37,45,11,9,222,33,152,2,27,248,22,93,23, -205,2,27,248,22,93,247,22,140,16,28,249,22,129,4,249,22,184,3,23,198, -2,23,197,2,41,23,205,2,249,22,94,247,22,140,16,248,22,90,249,22,135, -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,201,2,250,22,135,8,6,49,49,10,32,32, -32,115,117,98,45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32, -32,105,110,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101, -115,58,126,97,23,201,1,249,22,1,22,174,7,249,22,2,32,0,88,148,8, -36,37,45,11,9,222,33,153,2,249,2,154,2,22,131,2,23,208,1,86,95, -23,199,1,23,198,1,2,66,27,248,22,81,23,200,2,27,28,248,22,160,15, -23,195,2,249,22,178,15,23,196,1,23,198,2,248,22,132,2,23,195,1,28, -28,248,22,160,15,248,22,81,23,202,2,248,22,173,15,23,194,2,10,27,250, -22,1,22,178,15,23,197,1,23,201,2,28,28,248,22,88,23,199,2,10,248, -22,173,15,23,194,2,28,23,200,2,28,28,248,22,172,15,249,22,178,15,195, -202,10,27,28,248,22,160,15,201,248,22,164,15,201,200,19,248,22,154,7,23, -195,2,27,28,249,22,132,4,23,196,4,40,28,249,22,157,7,6,4,4,46, -114,107,116,249,22,173,7,23,199,2,249,22,184,3,23,200,4,40,249,22,174, -7,250,22,173,7,23,200,1,36,249,22,184,3,23,201,4,40,6,3,3,46, -115,115,86,94,23,195,1,11,11,28,23,193,2,248,22,172,15,249,22,178,15, -198,23,196,1,11,2,28,199,249,22,178,15,194,201,192,254,2,149,2,202,203, -204,205,206,248,22,82,23,16,28,23,16,23,16,199,28,199,249,22,178,15,194, -201,192,254,2,149,2,202,203,204,205,206,248,22,82,23,16,23,16,254,2,149, -2,201,202,203,204,205,248,22,82,23,15,23,15,90,144,38,11,89,146,38,36, -11,249,80,144,40,8,31,39,23,199,1,23,200,1,27,248,22,68,28,248,22, -160,15,195,248,22,164,15,195,194,27,27,247,22,141,16,28,248,22,88,23,194, -2,9,28,248,22,81,23,194,2,28,248,22,149,2,248,22,144,18,23,195,2, -250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,144,18,23,202,2,23, -203,2,9,250,22,158,2,248,22,144,18,23,200,2,11,9,249,80,144,46,8, -47,39,23,200,1,248,22,145,18,23,199,1,27,248,80,144,43,8,30,39,248, -22,144,18,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,47,8,47,39,23,201,1,248,22,145, -18,23,200,1,249,22,94,247,22,140,16,249,80,144,45,8,47,39,23,199,1, -248,22,145,18,23,198,1,254,2,149,2,199,201,202,204,23,15,199,11,86,95, -28,28,248,22,161,15,23,194,2,10,28,248,22,160,15,23,194,2,10,28,248, -22,151,7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15,23,194, -2,11,12,252,22,176,11,23,200,2,2,42,36,23,198,2,23,199,2,28,28, -248,22,151,7,23,195,2,10,248,22,140,8,23,195,2,86,94,23,194,1,12, -252,22,176,11,23,200,2,2,68,37,23,198,2,23,199,1,90,144,39,11,89, -146,39,36,11,248,22,181,15,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,179,11,23,201,1,2,69,23,199, -1,249,22,7,23,195,1,23,196,1,32,159,2,88,148,8,36,43,58,11,2, -72,222,33,160,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,203,2, -36,23,207,1,23,205,1,249,23,203,1,23,202,1,23,208,1,28,248,22,151, -7,23,204,2,249,22,166,8,23,205,1,8,63,23,203,1,28,248,22,133,4, -248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2, -71,201,192,28,248,22,161,15,197,248,22,162,15,197,247,22,163,15,32,161,2, -88,148,8,36,42,8,24,11,2,50,222,33,162,2,28,248,22,133,4,23,199, -2,86,95,23,198,1,23,194,1,19,248,22,145,8,23,195,2,19,248,22,145, -8,23,196,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,205,2,36, -23,204,4,2,51,249,23,206,1,23,204,1,23,202,4,28,248,22,151,7,23, -207,2,249,22,166,8,23,208,1,8,63,23,206,1,28,248,22,133,4,248,22, -145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,204, -192,28,248,22,161,15,200,248,22,162,15,200,247,22,163,15,2,2,27,248,22, -182,3,23,200,1,28,249,22,167,9,8,46,249,22,146,8,23,198,2,23,197, -2,27,248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250,22,151, -8,23,205,2,36,23,204,1,23,203,1,249,23,206,1,23,204,1,23,202,1, -28,248,22,151,7,23,207,2,249,22,166,8,23,208,1,8,63,23,206,1,28, -248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2, -36,2,70,2,71,204,192,28,248,22,161,15,200,248,22,162,15,200,247,22,163, -15,28,248,22,133,4,23,194,2,86,95,23,195,1,23,193,1,19,248,22,145, -8,23,196,2,19,248,22,145,8,23,197,2,249,22,170,15,27,251,22,152,8, -250,22,151,8,23,206,2,36,23,204,4,2,51,249,23,207,1,23,205,1,23, -202,4,28,248,22,151,7,23,208,2,249,22,166,8,23,209,1,8,63,23,207, -1,28,248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178, -11,2,36,2,70,2,71,205,192,28,248,22,161,15,201,248,22,162,15,201,247, -22,163,15,2,2,27,248,22,182,3,23,195,1,28,249,22,167,9,8,46,249, -22,146,8,23,199,2,23,197,2,27,248,22,181,3,23,195,2,249,22,170,15, -27,251,22,152,8,250,22,151,8,23,206,2,36,23,204,1,23,204,1,249,23, -207,1,23,205,1,23,202,1,28,248,22,151,7,23,208,2,249,22,166,8,23, -209,1,8,63,23,207,1,28,248,22,133,4,248,22,145,8,23,195,2,86,94, -23,193,1,251,22,178,11,2,36,2,70,2,71,205,192,28,248,22,161,15,201, -248,22,162,15,201,247,22,163,15,28,248,22,133,4,193,254,2,159,2,201,203, -204,205,248,22,145,8,202,2,51,248,22,145,8,202,27,248,22,182,3,194,28, -249,22,167,9,8,46,249,22,146,8,199,196,254,2,159,2,202,204,205,206,199, -203,248,22,181,3,200,253,2,161,2,201,202,203,204,205,198,90,144,38,11,89, -146,38,36,11,86,95,28,28,248,22,161,15,23,199,2,10,28,248,22,160,15, -23,199,2,10,28,248,22,151,7,23,199,2,28,248,22,183,15,23,199,2,10, -248,22,184,15,23,199,2,11,12,252,22,176,11,23,200,2,2,42,36,23,203, -2,23,204,2,28,28,248,22,151,7,23,200,2,10,248,22,140,8,23,200,2, -12,252,22,176,11,23,200,2,2,68,37,23,203,2,23,204,2,90,144,39,11, -89,146,39,36,11,248,22,181,15,23,202,2,86,94,23,195,1,86,94,28,192, -12,250,22,179,11,23,201,1,2,69,23,204,2,249,22,7,194,195,27,248,22, -166,15,23,196,1,27,19,248,22,145,8,23,196,2,28,248,22,133,4,23,194, -4,86,94,23,199,1,19,248,22,145,8,23,197,2,19,248,22,145,8,23,198, -2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,207,2,36,23,204,4, -2,51,249,23,211,1,23,206,1,23,202,4,28,248,22,151,7,23,212,2,249, -22,166,8,23,213,1,8,63,23,211,1,28,248,22,133,4,248,22,145,8,23, -195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,23,17,192,28, -248,22,161,15,205,248,22,162,15,205,247,22,163,15,2,2,27,248,22,182,3, -23,195,4,28,249,22,167,9,8,46,249,22,146,8,23,200,2,23,197,2,27, -248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23, -207,2,36,23,204,1,23,208,1,249,23,211,1,23,206,1,23,202,1,28,248, -22,151,7,23,212,2,249,22,166,8,23,213,1,8,63,23,211,1,28,248,22, -133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2, -70,2,71,23,17,192,28,248,22,161,15,205,248,22,162,15,205,247,22,163,15, -28,248,22,133,4,23,194,2,86,95,23,200,1,23,193,1,254,2,159,2,23, -203,2,23,208,1,23,209,1,23,210,1,248,22,145,8,23,204,2,2,51,248, -22,145,8,23,204,1,27,248,22,182,3,23,195,1,28,249,22,167,9,8,46, -249,22,146,8,23,201,2,23,197,2,254,2,159,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,161, -2,23,203,1,23,207,1,23,208,1,23,209,1,23,210,1,23,199,1,2,28, -248,22,161,15,195,249,22,178,15,196,194,192,32,164,2,88,148,8,36,40,58, -11,2,50,222,33,165,2,28,248,22,133,4,23,197,2,86,94,23,196,1,19, -248,22,145,8,23,195,2,35,248,22,145,8,23,196,2,249,22,170,15,27,251, -22,152,8,250,22,151,8,23,205,1,36,23,204,4,2,51,2,51,28,248,22, -151,7,23,205,2,249,22,166,8,23,206,1,8,63,23,204,1,28,248,22,133, -4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70, -2,71,202,192,28,248,22,161,15,198,248,22,162,15,198,247,22,163,15,2,27, -248,22,182,3,23,198,1,28,249,22,167,9,8,46,249,22,146,8,23,198,2, -23,197,2,35,248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250, -22,151,8,23,205,1,36,23,204,1,2,51,2,51,28,248,22,151,7,23,205, -2,249,22,166,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248,22,145, -8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,202,192, -28,248,22,161,15,198,248,22,162,15,198,247,22,163,15,28,248,22,133,4,23, -194,2,86,94,23,193,1,19,248,22,145,8,23,196,2,35,248,22,145,8,23, -197,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,206,1,36,23,204, -4,2,51,2,51,28,248,22,151,7,23,206,2,249,22,166,8,23,207,1,8, -63,23,205,1,28,248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1, -251,22,178,11,2,36,2,70,2,71,203,192,28,248,22,161,15,199,248,22,162, -15,199,247,22,163,15,2,27,248,22,182,3,23,195,1,28,249,22,167,9,8, -46,249,22,146,8,23,199,2,23,197,2,35,248,22,181,3,23,195,2,249,22, -170,15,27,251,22,152,8,250,22,151,8,23,206,1,36,23,204,1,2,51,2, -51,28,248,22,151,7,23,206,2,249,22,166,8,23,207,1,8,63,23,205,1, -28,248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11, -2,36,2,70,2,71,203,192,28,248,22,161,15,199,248,22,162,15,199,247,22, -163,15,251,2,164,2,198,199,200,196,90,144,38,11,89,146,38,36,11,86,95, -28,28,248,22,161,15,23,196,2,10,28,248,22,160,15,23,196,2,10,28,248, -22,151,7,23,196,2,28,248,22,183,15,23,196,2,10,248,22,184,15,23,196, -2,11,12,252,22,176,11,2,36,2,42,36,23,200,2,23,201,2,28,28,248, -22,151,7,23,197,2,10,248,22,140,8,23,197,2,12,252,22,176,11,2,36, -2,68,37,23,200,2,23,201,2,90,144,39,11,89,146,39,36,11,248,22,181, -15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,179,11,2,36,2, -69,23,201,2,249,22,7,194,195,27,248,22,166,15,23,196,1,27,251,2,164, -2,23,198,2,23,201,1,23,202,1,248,22,145,8,23,199,1,28,248,22,161, -15,195,249,22,178,15,196,194,192,2,51,252,80,143,41,8,33,2,36,2,51, -32,0,88,148,8,36,38,43,11,9,222,33,167,2,198,199,32,169,2,88,148, -8,36,40,57,11,2,50,222,33,172,2,32,170,2,88,148,8,36,42,57,11, -2,72,222,33,171,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,203, -2,36,23,206,1,23,204,1,249,22,151,8,23,202,1,23,207,1,28,248,22, -151,7,23,203,2,249,22,166,8,23,204,1,8,63,23,202,1,28,248,22,133, -4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70, -2,71,200,192,28,248,22,161,15,196,248,22,162,15,196,247,22,163,15,28,248, -22,133,4,23,197,2,86,94,23,196,1,19,248,22,145,8,23,195,2,19,248, -22,145,8,23,196,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,205, -2,36,23,204,4,2,51,249,22,151,8,23,204,1,23,202,4,28,248,22,151, -7,23,205,2,249,22,166,8,23,206,1,8,63,23,204,1,28,248,22,133,4, -248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2, -71,202,192,28,248,22,161,15,198,248,22,162,15,198,247,22,163,15,2,2,27, -248,22,182,3,23,198,1,28,249,22,167,9,8,46,249,22,146,8,23,198,2, -23,197,2,27,248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250, -22,151,8,23,205,2,36,23,204,1,2,73,249,22,151,8,23,204,1,23,202, -1,28,248,22,151,7,23,205,2,249,22,166,8,23,206,1,8,63,23,204,1, -28,248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11, -2,36,2,70,2,71,202,192,28,248,22,161,15,198,248,22,162,15,198,247,22, -163,15,28,248,22,133,4,193,253,2,170,2,199,200,201,248,22,145,8,200,2, -51,248,22,145,8,200,27,248,22,182,3,194,28,249,22,167,9,8,46,249,22, -146,8,198,196,253,2,170,2,200,201,202,198,2,73,248,22,181,3,199,251,2, -169,2,198,199,200,196,90,144,38,11,89,146,38,36,11,86,95,28,28,248,22, -161,15,23,196,2,10,28,248,22,160,15,23,196,2,10,28,248,22,151,7,23, -196,2,28,248,22,183,15,23,196,2,10,248,22,184,15,23,196,2,11,12,252, -22,176,11,2,36,2,42,36,23,200,2,23,201,2,28,28,248,22,151,7,23, -197,2,10,248,22,140,8,23,197,2,12,252,22,176,11,2,36,2,68,37,23, -200,2,23,201,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,199,2, -86,94,23,195,1,86,94,28,192,12,250,22,179,11,2,36,2,69,23,201,2, -249,22,7,194,195,27,248,22,166,15,23,196,1,27,251,2,169,2,23,198,2, -23,201,1,23,202,1,248,22,145,8,23,199,1,28,248,22,161,15,195,249,22, -178,15,196,194,192,252,80,143,41,8,33,2,36,2,73,22,151,8,198,199,249, -247,22,175,5,23,195,1,11,249,247,22,175,5,194,11,28,248,22,88,23,195, -2,9,27,27,248,22,81,23,197,2,28,248,22,185,15,23,194,2,248,22,188, -15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36,11, -248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,48,40,39, -23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248,22, -188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,42,40,39,248,22, -137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11,28, -23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1,247,22,138,16, -27,248,22,82,23,199,1,28,248,22,88,23,194,2,9,27,248,80,144,42,53, -39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,188,15,249,22,186, -15,23,198,1,247,22,138,16,248,80,144,44,8,48,39,248,22,82,23,198,1, -86,94,23,193,1,248,80,144,42,8,48,39,248,22,82,23,196,1,86,94,23, -193,1,27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27,248,80,144, -40,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,188,15,249, -22,186,15,23,198,1,247,22,138,16,248,80,144,42,8,48,39,248,22,82,23, -198,1,86,94,23,193,1,248,80,144,40,8,48,39,248,22,82,23,196,1,28, -248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,185,15,23, -194,2,248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11, -89,146,39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250, -80,144,48,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1, -23,194,1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144, -42,40,39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15, -23,194,1,11,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198, -1,247,22,138,16,27,248,22,82,23,199,1,28,248,22,88,23,194,2,9,27, -248,80,144,42,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22, -188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,44,8,49,39,248, -22,82,23,198,1,86,94,23,193,1,248,80,144,42,8,49,39,248,22,82,23, -196,1,86,94,23,193,1,27,248,22,82,23,197,1,28,248,22,88,23,194,2, -9,27,248,80,144,40,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80, -248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,42,8,49, -39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,40,8,49,39,248,22, -82,23,196,1,27,248,22,137,16,2,58,28,248,22,185,15,23,194,2,248,22, +198,1,249,22,94,23,196,2,27,248,22,145,18,23,199,1,28,248,22,88,23, +194,2,9,28,248,22,81,23,194,2,249,22,80,248,80,144,42,57,39,248,22, +144,18,23,197,2,27,248,22,145,18,23,197,1,28,248,22,88,23,194,2,9, +28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248,22,144,18,23, +197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198,1,249,22, +94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198,1, +249,22,94,23,199,2,27,248,22,145,18,23,197,1,28,248,22,88,23,194,2, +9,28,248,22,81,23,194,2,249,22,80,248,80,144,45,57,39,248,22,144,18, +23,197,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198,1,249, +22,94,23,202,2,249,80,144,46,8,43,39,23,204,1,248,22,145,18,23,198, +1,27,250,22,158,2,23,198,1,23,199,1,11,28,192,249,80,144,39,8,43, +39,198,194,196,27,248,22,137,16,2,58,28,248,22,185,15,23,194,2,248,22, 188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36, 11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,47,40, 39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248, 22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,41,40,39,248, 22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11, -28,248,22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,185,15, -23,194,2,248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39, -11,89,146,39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56, -250,80,144,48,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195, -1,23,194,1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80, -144,42,40,39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188, -15,23,194,1,11,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23, -198,1,247,22,138,16,27,248,22,82,23,199,1,28,248,22,88,23,194,2,9, -27,27,248,22,81,23,196,2,28,248,22,185,15,23,194,2,248,22,188,15,23, +27,248,80,144,38,55,39,249,80,144,40,52,37,37,80,144,40,8,44,39,27, +27,250,22,158,2,23,198,2,70,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,178,15,27,250,22,158,2, +23,202,2,69,115,104,97,114,101,45,100,105,114,11,28,192,192,249,22,178,15, +62,117,112,6,5,5,115,104,97,114,101,2,60,28,248,22,151,7,23,194,2, +27,248,22,168,15,23,195,1,28,248,22,185,15,23,194,2,192,249,22,186,15, +23,195,1,27,247,80,144,44,51,39,28,23,193,2,192,86,94,23,193,1,247, +22,138,16,28,248,22,140,8,23,194,2,27,248,22,169,15,23,195,1,28,248, +22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247,80,144,44,51,39, +28,23,193,2,192,86,94,23,193,1,247,22,138,16,28,248,22,160,15,23,194, +2,28,248,22,185,15,23,194,2,192,249,22,186,15,23,195,1,27,247,80,144, +43,51,39,28,23,193,2,192,86,94,23,193,1,247,22,138,16,192,250,22,94, +248,22,90,11,28,247,22,144,16,28,247,22,145,16,248,22,90,250,22,178,15, +248,22,137,16,2,61,250,22,158,2,23,204,2,2,59,247,22,169,8,2,60, +9,9,28,247,22,145,16,250,80,144,44,59,39,23,200,1,78,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,166,13,23,194,1,249,22,16,80,144,38,8,26,38,28,248,22,186,12, +23,197,2,86,94,23,196,1,32,0,88,148,8,36,36,41,11,9,222,11,20, +20,94,88,148,8,36,36,43,11,9,223,3,33,123,23,196,1,32,125,88,148, +36,37,56,11,2,50,222,33,126,90,144,39,11,89,146,39,36,11,248,22,181, +15,23,197,1,86,95,23,195,1,23,194,1,28,248,22,160,15,23,194,2,28, +248,22,173,15,23,194,2,249,22,143,6,23,195,1,32,0,88,148,8,36,36, +41,11,9,222,11,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1, +86,95,23,195,1,23,194,1,28,248,22,160,15,23,194,2,28,248,22,173,15, +23,194,2,249,22,143,6,23,195,1,32,0,88,148,8,36,36,41,11,9,222, +11,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95,23,195, +1,23,194,1,28,248,22,160,15,23,194,2,28,248,22,173,15,23,194,2,249, +22,143,6,23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39, +11,89,146,39,36,11,248,22,181,15,23,197,1,86,95,23,195,1,23,194,1, +28,248,22,160,15,23,194,2,28,248,22,173,15,23,194,2,249,22,143,6,23, +195,1,32,0,88,148,8,36,36,41,11,9,222,11,248,2,125,23,194,1,11, +11,11,11,32,127,88,148,8,36,37,55,11,2,50,222,33,128,2,27,249,22, +161,6,8,128,128,23,196,2,28,248,22,146,7,23,194,2,9,249,22,80,23, +195,1,27,249,22,161,6,8,128,128,23,199,2,28,248,22,146,7,23,194,2, +9,249,22,80,23,195,1,27,249,22,161,6,8,128,128,23,202,2,28,248,22, +146,7,23,194,2,9,249,22,80,23,195,1,27,249,22,161,6,8,128,128,23, +205,2,28,248,22,146,7,23,194,2,9,249,22,80,23,195,1,248,2,127,23, +206,1,27,249,22,161,6,8,128,128,23,196,2,28,248,22,140,8,23,194,2, +28,249,22,132,4,248,22,145,8,23,196,2,8,128,128,249,22,1,22,152,8, +249,22,80,23,197,1,27,249,22,161,6,8,128,128,23,201,2,28,248,22,146, +7,23,194,2,9,249,22,80,23,195,1,27,249,22,161,6,8,128,128,23,204, +2,28,248,22,146,7,23,194,2,9,249,22,80,23,195,1,27,249,22,161,6, +8,128,128,23,207,2,28,248,22,146,7,23,194,2,9,249,22,80,23,195,1, +27,249,22,161,6,8,128,128,23,210,2,28,248,22,146,7,23,194,2,9,249, +22,80,23,195,1,248,2,127,23,211,1,192,192,248,22,131,6,23,194,1,20, +13,144,80,144,37,8,28,37,80,144,37,8,45,39,27,28,249,22,187,8,248, +22,178,8,2,62,38,90,144,39,11,89,146,39,36,11,248,22,181,15,23,198, +2,86,95,23,195,1,23,194,1,28,248,22,160,15,23,194,2,28,248,22,173, +15,23,194,2,249,22,143,6,23,195,1,32,0,88,148,8,36,36,41,11,9, +222,11,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95,23, +195,1,23,194,1,28,248,22,160,15,23,194,2,28,248,22,173,15,23,194,2, +249,22,143,6,23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144, +39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95,23,195,1,23,194, +1,28,248,22,160,15,23,194,2,28,248,22,173,15,23,194,2,249,22,143,6, +23,195,1,32,0,88,148,8,36,36,41,11,9,222,11,90,144,39,11,89,146, +39,36,11,248,22,181,15,23,197,1,86,95,23,195,1,23,194,1,28,248,22, +160,15,23,194,2,28,248,22,173,15,23,194,2,249,22,143,6,23,195,1,32, +0,88,148,8,36,36,41,11,9,222,11,248,2,125,23,194,1,11,11,11,11, +11,28,248,22,172,15,23,195,2,27,28,249,22,187,8,248,22,178,8,2,62, +38,249,22,143,6,23,197,2,32,0,88,148,8,36,36,41,11,9,222,11,11, +86,94,28,23,194,2,248,22,145,6,23,195,1,86,94,23,194,1,12,249,22, +80,27,248,22,186,5,23,199,1,250,22,46,22,37,88,148,36,36,8,24,11, +9,223,3,33,129,2,20,20,94,88,148,36,36,43,11,9,223,3,33,130,2, +23,196,1,194,249,22,80,11,194,28,28,23,195,2,28,248,22,82,23,196,2, +248,22,165,9,249,22,161,14,36,248,22,145,18,23,199,2,11,11,194,86,94, +23,195,1,249,22,14,20,20,94,88,148,8,32,36,58,16,4,36,8,128,80, +8,128,128,36,9,224,2,3,33,131,2,23,196,1,80,144,38,8,26,38,27, +248,22,165,9,194,28,192,192,248,22,165,9,248,22,81,195,86,95,28,248,22, +143,12,23,198,2,27,247,22,135,12,28,249,22,191,11,23,195,2,2,63,251, +22,131,12,23,197,1,2,63,250,22,135,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,139, +12,23,206,2,247,22,29,12,12,28,23,193,2,250,22,156,2,80,144,42,8, +25,38,23,198,1,249,22,80,21,17,0,0,23,198,1,86,95,23,195,1,23, +193,1,12,28,248,22,143,12,23,198,2,86,94,23,197,1,248,23,195,1,247, +22,138,2,196,88,148,36,37,55,8,240,0,0,0,2,9,226,0,2,1,3, +33,134,2,20,20,94,248,22,146,6,23,194,2,28,248,22,146,7,248,22,146, +6,23,195,1,12,248,22,172,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,131,6,23,194,1,28,248,22,89,193,28,28,249,22,128,4,38,248,22, +93,195,10,249,22,128,4,39,248,22,93,195,28,28,248,22,151,7,248,22,81, +194,10,28,249,22,167,9,2,64,248,22,144,18,195,10,249,22,167,9,2,65, +248,22,144,18,195,28,27,248,22,102,194,28,248,22,160,15,193,10,28,248,22, +151,7,193,28,248,22,183,15,193,10,248,22,184,15,193,11,27,248,22,88,248, +22,104,195,28,192,192,248,22,165,16,248,22,111,195,11,11,11,11,28,248,22, +173,15,249,22,178,15,23,196,2,23,198,2,27,248,22,68,248,22,164,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, +156,16,248,22,111,23,198,2,247,22,169,8,27,248,22,188,15,249,22,186,15, +248,22,102,23,200,2,23,198,1,28,249,22,167,9,248,22,81,23,199,2,2, +65,86,94,23,196,1,249,22,3,20,20,94,88,148,8,36,37,53,11,9,224, +3,2,33,139,2,23,196,1,248,22,191,15,23,196,1,28,249,22,167,9,248, +22,144,18,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,38,50,11,9,224,3,2,33,140,2,23,195,1,23, +196,1,27,248,22,68,248,22,144,18,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,165,9,248,22,81,23,196,2,10,9,27,249,22,186,5, +23,198,2,66,98,105,110,97,114,121,250,22,46,22,37,88,148,8,36,36,44, +11,9,223,3,33,136,2,20,20,94,88,148,36,36,43,11,9,223,3,33,137, +2,23,196,1,86,94,28,28,248,22,89,23,194,2,249,22,4,32,0,88,148, +8,36,37,45,11,9,222,33,138,2,23,195,2,11,12,248,22,172,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,39,11,89,146,39,36,11,248,22,181,15,23,201,2,192, +86,96,249,22,3,20,20,94,88,148,8,36,37,54,11,9,224,2,3,33,141, +2,23,195,1,23,197,1,249,22,164,2,195,88,148,8,36,38,48,11,9,223, +3,33,142,2,250,22,156,2,80,144,44,8,25,38,23,200,1,249,22,80,23, +201,1,198,193,20,13,144,80,144,37,8,28,37,250,80,144,40,8,46,39,23, +198,2,23,196,2,11,27,250,22,158,2,80,144,41,8,25,38,23,197,2,21, +143,11,17,0,0,27,248,22,81,23,195,2,27,249,80,144,42,8,27,39,23, +198,2,23,196,2,28,249,22,169,9,23,195,2,23,196,1,248,22,82,195,86, +94,23,195,1,20,13,144,80,144,40,8,28,37,250,80,144,43,8,46,39,23, +201,1,23,199,2,23,196,2,27,20,20,95,88,148,8,36,36,52,8,240,0, +0,0,2,9,225,5,4,1,33,143,2,23,194,1,23,197,1,28,28,248,22, +0,23,194,2,249,22,50,23,195,2,36,11,20,13,144,80,144,41,43,37,26, +29,80,144,8,34,44,37,249,22,33,11,80,144,8,36,43,37,22,130,15,10, +22,131,15,10,22,132,15,10,22,135,15,10,22,134,15,11,22,136,15,10,22, +133,15,10,22,137,15,10,22,138,15,10,22,139,15,10,22,140,15,10,22,141, +15,11,22,142,15,10,22,128,15,11,247,23,193,1,250,22,176,11,2,8,2, +52,23,196,1,248,22,9,20,20,94,88,148,36,37,8,43,16,4,8,128,6, +8,128,104,8,240,0,64,0,0,36,9,224,1,2,33,144,2,23,195,1,0, +7,35,114,120,34,47,43,34,28,248,22,151,7,23,195,2,27,249,22,154,16, +2,146,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,154,7,23,199,2,249,22,7,250,22,173,7,23,200,1, +36,248,22,101,23,199,1,23,198,1,249,22,7,250,22,173,7,23,200,2,36, +248,22,101,23,199,2,249,22,80,249,22,173,7,23,201,1,248,22,103,23,200, +1,23,200,1,249,22,7,23,197,1,23,198,1,90,144,39,11,89,146,39,36, +11,248,22,181,15,23,198,1,86,94,23,195,1,28,249,22,167,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,151,7,23,195,2,27,249,22,154,16,2,146,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,154,7,23,199,2,249,22,7,250,22,173,7,23,200,1,36,248,22, +101,23,199,1,23,196,1,249,22,7,250,22,173,7,23,200,2,36,248,22,101, +23,199,2,249,22,80,249,22,173,7,23,201,1,248,22,103,23,200,1,23,198, +1,249,22,7,23,197,1,23,196,1,90,144,39,11,89,146,39,36,11,248,22, +181,15,23,198,1,86,94,23,195,1,28,249,22,167,9,23,195,2,2,49,86, +94,23,193,1,249,22,7,23,196,1,23,198,1,249,80,144,45,8,31,39,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,144,18,23,197,2,250,22,94,249,22,2,22,129,2,250, +22,158,2,248,22,144,18,23,204,2,23,202,2,9,250,22,158,2,248,22,144, +18,23,202,2,11,9,27,248,22,145,18,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,144,18,23,195,2,250, +22,94,249,22,2,22,129,2,250,22,158,2,248,22,144,18,23,202,2,23,206, +2,9,250,22,158,2,248,22,144,18,23,200,2,11,9,249,80,144,45,8,47, +39,23,203,1,248,22,145,18,23,199,1,27,248,80,144,42,8,30,39,248,22, +144,18,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,46,8,47,39,23,204,1,248,22,145,18, +23,200,1,249,22,94,247,22,140,16,249,80,144,44,8,47,39,23,202,1,248, +22,145,18,23,198,1,27,248,80,144,38,8,30,39,248,22,144,18,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,145,18,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,144,18,23,195,2,250,22,94,249,22, +2,22,129,2,250,22,158,2,248,22,144,18,23,202,2,23,207,2,9,250,22, +158,2,248,22,144,18,23,200,2,11,9,249,80,144,46,8,47,39,23,204,1, +248,22,145,18,23,199,1,27,248,80,144,43,8,30,39,248,22,144,18,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,47,8,47,39,23,205,1,248,22,145,18,23,200,1,249, +22,94,247,22,140,16,249,80,144,45,8,47,39,23,203,1,248,22,145,18,23, +198,1,249,22,94,247,22,140,16,27,248,22,145,18,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,144,18,23, +195,2,250,22,94,249,22,2,22,129,2,250,22,158,2,248,22,144,18,23,202, +2,23,205,2,9,250,22,158,2,248,22,144,18,23,200,2,11,9,249,80,144, +44,8,47,39,23,202,1,248,22,145,18,23,199,1,27,248,80,144,41,8,30, +39,248,22,144,18,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,45,8,47,39,23,203,1,248, +22,145,18,23,200,1,249,22,94,247,22,140,16,249,80,144,43,8,47,39,23, +201,1,248,22,145,18,23,198,1,32,149,2,88,148,36,43,8,31,11,65,99, +108,111,111,112,222,33,156,2,32,150,2,88,148,8,36,37,47,11,2,50,222, +33,151,2,28,248,22,88,248,22,82,23,195,2,248,22,90,27,248,22,144,18, +195,28,248,22,160,15,193,248,22,164,15,193,192,250,22,91,27,248,22,144,18, +23,198,2,28,248,22,160,15,193,248,22,164,15,193,192,2,67,248,2,150,2, +248,22,145,18,23,198,1,250,22,135,8,6,7,7,10,32,126,97,32,126,97, +6,1,1,32,23,196,1,249,22,135,8,6,6,6,10,32,32,32,126,97,248, +22,132,2,23,196,1,32,154,2,88,148,36,38,48,11,66,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,144,18,23,197,2,249,2,154,2,23,197,1,248, +22,145,18,23,199,1,249,2,154,2,23,195,1,248,22,145,18,23,197,1,28, +248,22,88,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,178,15, +200,198,198,27,28,248,22,88,23,197,2,2,66,249,22,1,22,174,7,248,2, +150,2,23,199,2,248,23,198,1,251,22,135,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,202,1,28,248,22,160,15,23,201,2,248,22,164,15, +23,201,1,23,200,1,250,22,174,7,28,248,22,160,15,23,204,2,248,22,164, +15,23,204,1,23,203,1,2,67,23,201,2,249,22,1,22,174,7,249,22,2, +32,0,88,148,8,36,37,45,11,9,222,33,152,2,27,248,22,93,23,205,2, +27,248,22,93,247,22,140,16,28,249,22,129,4,249,22,184,3,23,198,2,23, +197,2,41,23,205,2,249,22,94,247,22,140,16,248,22,90,249,22,135,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,201,2,250,22,135,8,6,49,49,10,32,32,32,115, +117,98,45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105, +110,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58, +126,97,23,201,1,249,22,1,22,174,7,249,22,2,32,0,88,148,8,36,37, +45,11,9,222,33,153,2,249,2,154,2,22,131,2,23,208,1,86,95,23,199, +1,23,198,1,2,66,27,248,22,81,23,200,2,27,28,248,22,160,15,23,195, +2,249,22,178,15,23,196,1,23,198,2,248,22,132,2,23,195,1,28,28,248, +22,160,15,248,22,81,23,202,2,248,22,173,15,23,194,2,10,27,250,22,1, +22,178,15,23,197,1,23,201,2,28,28,248,22,88,23,199,2,10,248,22,173, +15,23,194,2,28,23,200,2,28,28,248,22,172,15,249,22,178,15,195,202,10, +27,28,248,22,160,15,201,248,22,164,15,201,200,19,248,22,154,7,23,195,2, +27,28,249,22,132,4,23,196,4,40,28,249,22,157,7,6,4,4,46,114,107, +116,249,22,173,7,23,199,2,249,22,184,3,23,200,4,40,249,22,174,7,250, +22,173,7,23,200,1,36,249,22,184,3,23,201,4,40,6,3,3,46,115,115, +86,94,23,195,1,11,11,28,23,193,2,248,22,172,15,249,22,178,15,198,23, +196,1,11,2,28,199,249,22,178,15,194,201,192,254,2,149,2,202,203,204,205, +206,248,22,82,23,16,28,23,16,23,16,199,28,199,249,22,178,15,194,201,192, +254,2,149,2,202,203,204,205,206,248,22,82,23,16,23,16,254,2,149,2,201, +202,203,204,205,248,22,82,23,15,23,15,90,144,38,11,89,146,38,36,11,249, +80,144,40,8,31,39,23,199,1,23,200,1,27,248,22,68,28,248,22,160,15, +195,248,22,164,15,195,194,27,27,247,22,141,16,28,248,22,88,23,194,2,9, +28,248,22,81,23,194,2,28,248,22,149,2,248,22,144,18,23,195,2,250,22, +94,249,22,2,22,129,2,250,22,158,2,248,22,144,18,23,202,2,23,203,2, +9,250,22,158,2,248,22,144,18,23,200,2,11,9,249,80,144,46,8,47,39, +23,200,1,248,22,145,18,23,199,1,27,248,80,144,43,8,30,39,248,22,144, +18,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,47,8,47,39,23,201,1,248,22,145,18,23, +200,1,249,22,94,247,22,140,16,249,80,144,45,8,47,39,23,199,1,248,22, +145,18,23,198,1,254,2,149,2,199,201,202,204,23,15,199,11,86,95,28,28, +248,22,161,15,23,194,2,10,28,248,22,160,15,23,194,2,10,28,248,22,151, +7,23,194,2,28,248,22,183,15,23,194,2,10,248,22,184,15,23,194,2,11, +12,252,22,176,11,23,200,2,2,42,36,23,198,2,23,199,2,28,28,248,22, +151,7,23,195,2,10,248,22,140,8,23,195,2,86,94,23,194,1,12,252,22, +176,11,23,200,2,2,68,37,23,198,2,23,199,1,90,144,39,11,89,146,39, +36,11,248,22,181,15,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,179,11,23,201,1,2,69,23,199,1,249, +22,7,23,195,1,23,196,1,32,159,2,88,148,8,36,43,58,11,2,72,222, +33,160,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,203,2,36,23, +207,1,23,205,1,249,23,203,1,23,202,1,23,208,1,28,248,22,151,7,23, +204,2,249,22,166,8,23,205,1,8,63,23,203,1,28,248,22,133,4,248,22, +145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,201, +192,28,248,22,161,15,197,248,22,162,15,197,247,22,163,15,32,161,2,88,148, +8,36,42,8,24,11,2,50,222,33,162,2,28,248,22,133,4,23,199,2,86, +95,23,198,1,23,194,1,19,248,22,145,8,23,195,2,19,248,22,145,8,23, +196,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,205,2,36,23,204, +4,2,51,249,23,206,1,23,204,1,23,202,4,28,248,22,151,7,23,207,2, +249,22,166,8,23,208,1,8,63,23,206,1,28,248,22,133,4,248,22,145,8, +23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,204,192,28, +248,22,161,15,200,248,22,162,15,200,247,22,163,15,2,2,27,248,22,182,3, +23,200,1,28,249,22,167,9,8,46,249,22,146,8,23,198,2,23,197,2,27, +248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23, +205,2,36,23,204,1,23,203,1,249,23,206,1,23,204,1,23,202,1,28,248, +22,151,7,23,207,2,249,22,166,8,23,208,1,8,63,23,206,1,28,248,22, +133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2, +70,2,71,204,192,28,248,22,161,15,200,248,22,162,15,200,247,22,163,15,28, +248,22,133,4,23,194,2,86,95,23,195,1,23,193,1,19,248,22,145,8,23, +196,2,19,248,22,145,8,23,197,2,249,22,170,15,27,251,22,152,8,250,22, +151,8,23,206,2,36,23,204,4,2,51,249,23,207,1,23,205,1,23,202,4, +28,248,22,151,7,23,208,2,249,22,166,8,23,209,1,8,63,23,207,1,28, +248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2, +36,2,70,2,71,205,192,28,248,22,161,15,201,248,22,162,15,201,247,22,163, +15,2,2,27,248,22,182,3,23,195,1,28,249,22,167,9,8,46,249,22,146, +8,23,199,2,23,197,2,27,248,22,181,3,23,195,2,249,22,170,15,27,251, +22,152,8,250,22,151,8,23,206,2,36,23,204,1,23,204,1,249,23,207,1, +23,205,1,23,202,1,28,248,22,151,7,23,208,2,249,22,166,8,23,209,1, +8,63,23,207,1,28,248,22,133,4,248,22,145,8,23,195,2,86,94,23,193, +1,251,22,178,11,2,36,2,70,2,71,205,192,28,248,22,161,15,201,248,22, +162,15,201,247,22,163,15,28,248,22,133,4,193,254,2,159,2,201,203,204,205, +248,22,145,8,202,2,51,248,22,145,8,202,27,248,22,182,3,194,28,249,22, +167,9,8,46,249,22,146,8,199,196,254,2,159,2,202,204,205,206,199,203,248, +22,181,3,200,253,2,161,2,201,202,203,204,205,198,90,144,38,11,89,146,38, +36,11,86,95,28,28,248,22,161,15,23,199,2,10,28,248,22,160,15,23,199, +2,10,28,248,22,151,7,23,199,2,28,248,22,183,15,23,199,2,10,248,22, +184,15,23,199,2,11,12,252,22,176,11,23,200,2,2,42,36,23,203,2,23, +204,2,28,28,248,22,151,7,23,200,2,10,248,22,140,8,23,200,2,12,252, +22,176,11,23,200,2,2,68,37,23,203,2,23,204,2,90,144,39,11,89,146, +39,36,11,248,22,181,15,23,202,2,86,94,23,195,1,86,94,28,192,12,250, +22,179,11,23,201,1,2,69,23,204,2,249,22,7,194,195,27,248,22,166,15, +23,196,1,27,19,248,22,145,8,23,196,2,28,248,22,133,4,23,194,4,86, +94,23,199,1,19,248,22,145,8,23,197,2,19,248,22,145,8,23,198,2,249, +22,170,15,27,251,22,152,8,250,22,151,8,23,207,2,36,23,204,4,2,51, +249,23,211,1,23,206,1,23,202,4,28,248,22,151,7,23,212,2,249,22,166, +8,23,213,1,8,63,23,211,1,28,248,22,133,4,248,22,145,8,23,195,2, +86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,23,17,192,28,248,22, +161,15,205,248,22,162,15,205,247,22,163,15,2,2,27,248,22,182,3,23,195, +4,28,249,22,167,9,8,46,249,22,146,8,23,200,2,23,197,2,27,248,22, +181,3,23,195,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,207,2, +36,23,204,1,23,208,1,249,23,211,1,23,206,1,23,202,1,28,248,22,151, +7,23,212,2,249,22,166,8,23,213,1,8,63,23,211,1,28,248,22,133,4, +248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2, +71,23,17,192,28,248,22,161,15,205,248,22,162,15,205,247,22,163,15,28,248, +22,133,4,23,194,2,86,95,23,200,1,23,193,1,254,2,159,2,23,203,2, +23,208,1,23,209,1,23,210,1,248,22,145,8,23,204,2,2,51,248,22,145, +8,23,204,1,27,248,22,182,3,23,195,1,28,249,22,167,9,8,46,249,22, +146,8,23,201,2,23,197,2,254,2,159,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,161,2,23, +203,1,23,207,1,23,208,1,23,209,1,23,210,1,23,199,1,2,28,248,22, +161,15,195,249,22,178,15,196,194,192,32,164,2,88,148,8,36,40,58,11,2, +50,222,33,165,2,28,248,22,133,4,23,197,2,86,94,23,196,1,19,248,22, +145,8,23,195,2,35,248,22,145,8,23,196,2,249,22,170,15,27,251,22,152, +8,250,22,151,8,23,205,1,36,23,204,4,2,51,2,51,28,248,22,151,7, +23,205,2,249,22,166,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248, +22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71, +202,192,28,248,22,161,15,198,248,22,162,15,198,247,22,163,15,2,27,248,22, +182,3,23,198,1,28,249,22,167,9,8,46,249,22,146,8,23,198,2,23,197, +2,35,248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250,22,151, +8,23,205,1,36,23,204,1,2,51,2,51,28,248,22,151,7,23,205,2,249, +22,166,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248,22,145,8,23, +195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,202,192,28,248, +22,161,15,198,248,22,162,15,198,247,22,163,15,28,248,22,133,4,23,194,2, +86,94,23,193,1,19,248,22,145,8,23,196,2,35,248,22,145,8,23,197,2, +249,22,170,15,27,251,22,152,8,250,22,151,8,23,206,1,36,23,204,4,2, +51,2,51,28,248,22,151,7,23,206,2,249,22,166,8,23,207,1,8,63,23, +205,1,28,248,22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22, +178,11,2,36,2,70,2,71,203,192,28,248,22,161,15,199,248,22,162,15,199, +247,22,163,15,2,27,248,22,182,3,23,195,1,28,249,22,167,9,8,46,249, +22,146,8,23,199,2,23,197,2,35,248,22,181,3,23,195,2,249,22,170,15, +27,251,22,152,8,250,22,151,8,23,206,1,36,23,204,1,2,51,2,51,28, +248,22,151,7,23,206,2,249,22,166,8,23,207,1,8,63,23,205,1,28,248, +22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36, +2,70,2,71,203,192,28,248,22,161,15,199,248,22,162,15,199,247,22,163,15, +251,2,164,2,198,199,200,196,90,144,38,11,89,146,38,36,11,86,95,28,28, +248,22,161,15,23,196,2,10,28,248,22,160,15,23,196,2,10,28,248,22,151, +7,23,196,2,28,248,22,183,15,23,196,2,10,248,22,184,15,23,196,2,11, +12,252,22,176,11,2,36,2,42,36,23,200,2,23,201,2,28,28,248,22,151, +7,23,197,2,10,248,22,140,8,23,197,2,12,252,22,176,11,2,36,2,68, +37,23,200,2,23,201,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23, +199,2,86,94,23,195,1,86,94,28,192,12,250,22,179,11,2,36,2,69,23, +201,2,249,22,7,194,195,27,248,22,166,15,23,196,1,27,251,2,164,2,23, +198,2,23,201,1,23,202,1,248,22,145,8,23,199,1,28,248,22,161,15,195, +249,22,178,15,196,194,192,2,51,252,80,143,41,8,33,2,36,2,51,32,0, +88,148,8,36,38,43,11,9,222,33,167,2,198,199,32,169,2,88,148,8,36, +40,57,11,2,50,222,33,172,2,32,170,2,88,148,8,36,42,57,11,2,72, +222,33,171,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,203,2,36, +23,206,1,23,204,1,249,22,151,8,23,202,1,23,207,1,28,248,22,151,7, +23,203,2,249,22,166,8,23,204,1,8,63,23,202,1,28,248,22,133,4,248, +22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71, +200,192,28,248,22,161,15,196,248,22,162,15,196,247,22,163,15,28,248,22,133, +4,23,197,2,86,94,23,196,1,19,248,22,145,8,23,195,2,19,248,22,145, +8,23,196,2,249,22,170,15,27,251,22,152,8,250,22,151,8,23,205,2,36, +23,204,4,2,51,249,22,151,8,23,204,1,23,202,4,28,248,22,151,7,23, +205,2,249,22,166,8,23,206,1,8,63,23,204,1,28,248,22,133,4,248,22, +145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36,2,70,2,71,202, +192,28,248,22,161,15,198,248,22,162,15,198,247,22,163,15,2,2,27,248,22, +182,3,23,198,1,28,249,22,167,9,8,46,249,22,146,8,23,198,2,23,197, +2,27,248,22,181,3,23,195,2,249,22,170,15,27,251,22,152,8,250,22,151, +8,23,205,2,36,23,204,1,2,73,249,22,151,8,23,204,1,23,202,1,28, +248,22,151,7,23,205,2,249,22,166,8,23,206,1,8,63,23,204,1,28,248, +22,133,4,248,22,145,8,23,195,2,86,94,23,193,1,251,22,178,11,2,36, +2,70,2,71,202,192,28,248,22,161,15,198,248,22,162,15,198,247,22,163,15, +28,248,22,133,4,193,253,2,170,2,199,200,201,248,22,145,8,200,2,51,248, +22,145,8,200,27,248,22,182,3,194,28,249,22,167,9,8,46,249,22,146,8, +198,196,253,2,170,2,200,201,202,198,2,73,248,22,181,3,199,251,2,169,2, +198,199,200,196,90,144,38,11,89,146,38,36,11,86,95,28,28,248,22,161,15, +23,196,2,10,28,248,22,160,15,23,196,2,10,28,248,22,151,7,23,196,2, +28,248,22,183,15,23,196,2,10,248,22,184,15,23,196,2,11,12,252,22,176, +11,2,36,2,42,36,23,200,2,23,201,2,28,28,248,22,151,7,23,197,2, +10,248,22,140,8,23,197,2,12,252,22,176,11,2,36,2,68,37,23,200,2, +23,201,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,199,2,86,94, +23,195,1,86,94,28,192,12,250,22,179,11,2,36,2,69,23,201,2,249,22, +7,194,195,27,248,22,166,15,23,196,1,27,251,2,169,2,23,198,2,23,201, +1,23,202,1,248,22,145,8,23,199,1,28,248,22,161,15,195,249,22,178,15, +196,194,192,252,80,143,41,8,33,2,36,2,73,22,151,8,198,199,249,247,22, +175,5,23,195,1,11,249,247,22,175,5,194,11,28,248,22,88,23,195,2,9, +27,27,248,22,81,23,197,2,28,248,22,185,15,23,194,2,248,22,188,15,23, 194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36,11,248,22, -181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,52,40,39,23,196, +181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,48,40,39,23,196, 1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248,22,188,15, -249,22,186,15,23,199,1,23,196,1,27,250,80,144,46,40,39,248,22,137,16, +249,22,186,15,23,199,1,23,196,1,27,250,80,144,42,40,39,248,22,137,16, 2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11,28,23,193, 2,249,22,80,248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,27,248, -22,82,23,198,1,28,248,22,88,23,194,2,9,27,248,80,144,46,53,39,248, +22,82,23,199,1,28,248,22,88,23,194,2,9,27,248,80,144,42,53,39,248, 22,81,23,196,2,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23, -198,1,247,22,138,16,248,80,144,48,8,51,39,248,22,82,23,198,1,86,94, -23,193,1,248,80,144,46,8,51,39,248,22,82,23,196,1,86,94,23,193,1, -27,248,22,82,23,196,1,28,248,22,88,23,194,2,9,27,248,80,144,44,53, +198,1,247,22,138,16,248,80,144,44,8,48,39,248,22,82,23,198,1,86,94, +23,193,1,248,80,144,42,8,48,39,248,22,82,23,196,1,86,94,23,193,1, +27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27,248,80,144,40,53, 39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,188,15,249,22,186, -15,23,198,1,247,22,138,16,248,80,144,46,8,51,39,248,22,82,23,198,1, -86,94,23,193,1,248,80,144,44,8,51,39,248,22,82,23,196,1,86,94,23, -193,1,27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27,27,248,22, -81,23,196,2,28,248,22,185,15,23,194,2,248,22,188,15,23,194,1,28,248, -22,184,15,23,194,2,90,144,39,11,89,146,39,36,11,248,22,181,15,249,22, -186,15,27,248,22,137,16,2,56,250,80,144,50,40,39,23,196,1,11,11,248, -22,137,16,2,57,86,95,23,195,1,23,194,1,248,22,188,15,249,22,186,15, -23,199,1,23,196,1,27,250,80,144,44,40,39,248,22,137,16,2,56,23,197, -1,10,28,23,193,2,248,22,188,15,23,194,1,11,28,23,193,2,249,22,80, -248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,27,248,22,82,23,198, -1,28,248,22,88,23,194,2,9,27,248,80,144,44,53,39,248,22,81,23,196, -2,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1,247,22, -138,16,248,80,144,46,8,51,39,248,22,82,23,198,1,86,94,23,193,1,248, -80,144,44,8,51,39,248,22,82,23,196,1,86,94,23,193,1,27,248,22,82, -23,196,1,28,248,22,88,23,194,2,9,27,248,80,144,42,53,39,248,22,81, +15,23,198,1,247,22,138,16,248,80,144,42,8,48,39,248,22,82,23,198,1, +86,94,23,193,1,248,80,144,40,8,48,39,248,22,82,23,196,1,28,248,22, +88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,185,15,23,194,2, +248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146, +39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144, +48,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194, +1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,42,40, +39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194, +1,11,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1,247, +22,138,16,27,248,22,82,23,199,1,28,248,22,88,23,194,2,9,27,248,80, +144,42,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22,188,15, +249,22,186,15,23,198,1,247,22,138,16,248,80,144,44,8,49,39,248,22,82, +23,198,1,86,94,23,193,1,248,80,144,42,8,49,39,248,22,82,23,196,1, +86,94,23,193,1,27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27, +248,80,144,40,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22, +188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,42,8,49,39,248, +22,82,23,198,1,86,94,23,193,1,248,80,144,40,8,49,39,248,22,82,23, +196,1,27,248,22,137,16,2,58,28,248,22,185,15,23,194,2,248,22,188,15, +23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36,11,248, +22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80,144,47,40,39,23, +196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248,22,188, +15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,41,40,39,248,22,137, +16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11,28,248, +22,88,23,195,2,9,27,27,248,22,81,23,197,2,28,248,22,185,15,23,194, +2,248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11,89, +146,39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250,80, +144,48,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1,23, +194,1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144,42, +40,39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15,23, +194,1,11,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1, +247,22,138,16,27,248,22,82,23,199,1,28,248,22,88,23,194,2,9,27,27, +248,22,81,23,196,2,28,248,22,185,15,23,194,2,248,22,188,15,23,194,1, +28,248,22,184,15,23,194,2,90,144,39,11,89,146,39,36,11,248,22,181,15, +249,22,186,15,27,248,22,137,16,2,56,250,80,144,52,40,39,23,196,1,11, +11,248,22,137,16,2,57,86,95,23,195,1,23,194,1,248,22,188,15,249,22, +186,15,23,199,1,23,196,1,27,250,80,144,46,40,39,248,22,137,16,2,56, +23,197,1,10,28,23,193,2,248,22,188,15,23,194,1,11,28,23,193,2,249, +22,80,248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,27,248,22,82, +23,198,1,28,248,22,88,23,194,2,9,27,248,80,144,46,53,39,248,22,81, 23,196,2,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1, -247,22,138,16,248,80,144,44,8,51,39,248,22,82,23,198,1,86,94,23,193, -1,248,80,144,42,8,51,39,248,22,82,23,196,1,27,247,22,144,16,27,248, -80,144,39,55,39,247,80,144,39,54,39,249,80,144,40,41,38,28,23,196,2, -27,249,22,173,8,247,22,172,8,2,74,28,192,249,22,163,8,194,7,63,2, -66,2,66,250,80,144,43,59,39,23,198,2,2,75,27,28,23,200,1,250,22, -178,15,248,22,137,16,2,61,250,22,158,2,23,205,1,2,59,247,22,169,8, -2,76,86,94,23,199,1,11,27,248,80,144,46,8,48,39,250,22,94,9,248, -22,90,248,22,137,16,2,55,9,28,193,249,22,80,195,194,192,27,247,22,144, -16,27,248,80,144,39,55,39,247,80,144,39,54,39,249,80,144,40,41,38,28, -23,196,2,27,249,22,173,8,247,22,172,8,2,74,28,192,249,22,163,8,194, -7,63,2,66,2,66,250,80,144,43,59,39,23,198,2,2,75,27,28,23,200, -1,250,22,178,15,248,22,137,16,2,61,250,22,158,2,23,205,1,2,59,247, -22,169,8,2,76,86,94,23,199,1,11,27,248,80,144,46,8,49,39,250,22, -94,23,207,1,248,22,90,248,22,137,16,2,55,9,28,193,249,22,80,195,194, -192,27,247,22,144,16,27,248,80,144,39,55,39,249,80,144,41,52,37,37,80, -144,41,8,50,39,249,80,144,40,41,38,28,23,196,2,27,249,22,173,8,247, -22,172,8,2,74,28,192,249,22,163,8,194,7,63,2,66,2,66,250,80,144, -43,59,39,23,198,2,2,75,27,28,23,200,1,250,22,178,15,248,22,137,16, -2,61,250,22,158,2,23,205,1,2,59,247,22,169,8,2,76,86,94,23,199, -1,11,27,27,250,22,94,23,207,1,248,22,90,248,22,137,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,185, -15,23,194,2,248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144, -39,11,89,146,39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2, -56,250,80,144,58,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23, -195,1,23,194,1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250, -80,144,52,40,39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22, -188,15,23,194,1,11,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15, -23,198,1,247,22,138,16,27,248,22,82,23,198,1,28,248,22,88,23,194,2, -9,27,248,80,144,52,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80, -248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,54,8,51, -39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,52,8,51,39,248,22, -82,23,196,1,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23, -194,2,9,27,248,80,144,50,53,39,248,22,81,23,196,2,28,23,193,2,249, -22,80,248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,52, -8,51,39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,50,8,51,39, -248,22,82,23,196,1,28,193,249,22,80,195,194,192,27,20,13,144,80,144,37, -43,37,26,9,80,144,46,44,37,249,22,33,11,80,144,48,43,37,22,134,15, -10,22,141,15,10,22,142,15,10,22,143,15,10,248,22,146,6,23,196,2,28, -248,22,146,7,23,194,2,12,86,94,248,22,175,9,23,194,1,27,20,13,144, -80,144,38,43,37,26,9,80,144,47,44,37,249,22,33,11,80,144,49,43,37, -22,134,15,10,22,141,15,10,22,142,15,10,22,143,15,10,248,22,146,6,23, -197,2,28,248,22,146,7,23,194,2,12,86,94,248,22,175,9,23,194,1,27, -20,13,144,80,144,39,43,37,26,9,80,144,48,44,37,249,22,33,11,80,144, -50,43,37,22,134,15,10,22,141,15,10,22,142,15,10,22,143,15,10,248,22, -146,6,23,198,2,28,248,22,146,7,23,194,2,12,86,94,248,22,175,9,23, -194,1,248,80,144,40,8,52,39,197,86,94,249,22,137,7,247,22,171,5,23, -196,2,248,22,161,6,249,22,136,4,36,249,22,184,3,23,198,1,23,199,1, -27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1,86,94,23,197,1, -27,248,22,137,16,2,56,27,250,80,144,42,40,39,23,197,1,11,11,27,248, -22,139,4,23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,27, -248,22,139,4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36, -249,22,138,6,23,199,1,20,20,95,88,148,8,36,36,48,11,9,224,4,2, -33,185,2,23,195,1,23,197,1,27,248,22,187,5,23,195,1,248,80,144,39, -8,52,39,193,144,36,20,114,144,36,16,1,11,16,0,20,26,15,53,9,2, -1,2,1,29,11,11,11,11,9,9,11,11,11,10,43,80,143,36,36,20,114, -144,50,16,39,2,2,2,3,2,4,2,5,2,6,2,7,2,8,30,2,11, -1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101, -121,11,6,30,2,11,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,11,4,2,12,2,13,2,14,2,15,2, -16,2,17,2,18,30,2,19,79,99,97,99,104,101,45,99,111,110,102,105,103, -117,114,97,116,105,111,110,11,1,2,20,2,21,2,22,2,23,2,24,2,25, -2,26,2,27,2,28,2,29,2,30,30,2,19,1,21,101,120,99,101,112,116, -105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,3,2,31,2,32, -2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,16,0,37,39,36, -16,0,36,16,18,2,13,2,14,2,12,2,26,2,3,2,34,2,24,2,25, -2,20,2,30,2,22,2,23,2,32,2,28,2,31,2,33,2,35,2,29,54, -11,11,11,16,17,2,8,2,17,2,15,2,40,2,16,2,6,2,27,2,39, -2,18,2,21,2,38,2,4,2,37,2,7,2,36,2,2,2,5,16,17,11, -11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,16,17,2,8,2, -17,2,15,2,40,2,16,2,6,2,27,2,39,2,18,2,21,2,38,2,4, -2,37,2,7,2,36,2,2,2,5,53,53,37,12,11,11,16,0,16,0,16, -0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,49,20,15,16,2, -32,0,88,148,8,36,37,45,11,2,2,222,33,77,80,144,36,36,37,20,15, -16,2,249,22,153,7,7,92,7,92,80,144,36,37,37,20,15,16,2,88,148, -8,36,37,54,38,2,4,223,0,33,82,80,144,36,38,37,20,15,16,2,88, -148,8,36,38,58,38,2,5,223,0,33,84,80,144,36,39,37,20,15,16,2, -20,25,96,2,6,88,148,8,36,39,8,24,8,32,9,223,0,33,91,88,148, -8,36,38,47,52,9,223,0,33,92,88,148,8,36,37,46,52,9,223,0,33, -93,80,144,36,40,37,20,15,16,2,27,248,22,148,16,248,22,165,8,27,28, -249,22,167,9,247,22,178,8,2,43,6,1,1,59,6,1,1,58,250,22,135, -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,38,48,11,2,7,223,0,33,97,80,144,36,41,37, -20,15,16,2,88,148,36,37,8,38,8,128,6,2,8,223,0,33,98,80,144, -36,42,37,20,15,16,2,32,0,88,148,8,36,38,47,11,2,12,222,33,99, -80,144,36,45,37,20,15,16,2,32,0,88,148,8,36,39,48,11,2,13,222, -33,101,80,144,36,46,37,20,15,16,2,32,0,88,148,8,36,38,46,11,2, -14,222,33,102,80,144,36,47,37,20,15,16,2,88,148,45,39,49,8,128,128, -2,15,223,0,33,104,80,144,36,48,37,20,15,16,2,88,148,45,40,50,8, -128,128,2,17,223,0,33,106,80,144,36,50,37,20,15,16,2,88,148,36,36, -53,52,9,223,0,33,107,80,144,36,8,39,39,20,15,16,2,88,148,36,36, -44,16,4,36,37,8,128,2,36,2,18,223,0,33,108,80,144,36,51,37,20, -15,16,2,88,148,36,36,53,52,9,223,0,33,109,80,144,36,8,40,39,20, -15,16,2,88,148,36,36,44,16,4,36,37,8,128,4,36,2,21,223,0,33, -110,80,144,36,54,37,20,15,16,2,88,148,8,36,36,8,38,8,128,6,9, -223,0,33,111,80,144,36,8,41,39,20,15,16,2,88,148,8,36,37,47,16, -4,36,36,8,128,8,36,2,22,223,0,33,112,80,144,36,55,37,20,15,16, -2,20,27,143,32,0,88,148,36,37,45,11,2,23,222,33,113,32,0,88,148, -36,37,45,11,2,23,222,33,114,80,144,36,56,37,20,15,16,2,88,148,8, -36,37,47,8,240,0,128,0,0,2,24,223,0,33,115,80,144,36,57,37,20, -15,16,2,88,148,36,36,53,52,9,223,0,33,116,80,144,36,8,42,39,20, -15,16,2,88,148,8,36,37,48,16,4,36,37,8,128,16,36,2,25,223,0, -33,117,80,144,36,58,37,20,15,16,2,88,148,36,37,53,52,2,20,223,0, -33,118,80,144,36,53,37,20,15,16,2,88,148,8,36,38,55,16,4,8,240, -0,128,0,0,8,32,8,128,32,36,2,50,223,0,33,119,80,144,36,8,43, -39,20,15,16,2,88,148,8,36,39,49,16,4,36,36,8,128,32,36,2,26, -223,0,33,120,80,144,36,59,37,20,15,16,2,88,148,36,36,53,52,9,223, -0,33,121,80,144,36,8,44,39,20,15,16,2,88,148,8,36,36,54,16,4, -8,240,0,128,0,0,8,137,2,8,128,64,36,2,27,223,0,33,122,80,144, -36,8,24,37,20,15,16,2,247,22,140,2,80,144,36,8,25,37,20,15,16, -2,248,22,18,65,115,116,97,109,112,80,144,36,8,26,37,20,15,16,2,88, -148,36,37,46,8,240,0,0,0,4,9,223,0,33,124,80,144,36,8,45,39, -20,15,16,2,88,148,36,38,48,16,4,36,8,128,80,8,128,128,36,2,30, -223,0,33,132,2,80,144,36,8,27,37,20,15,16,2,32,0,88,148,8,36, -37,45,11,2,31,222,33,133,2,80,144,36,8,29,37,20,15,16,2,88,148, -8,36,39,45,8,240,0,0,0,2,72,109,97,107,101,45,104,97,110,100,108, -101,114,223,0,33,135,2,80,144,36,8,46,39,20,15,16,2,88,148,36,37, -44,16,4,8,128,6,8,128,104,8,240,0,64,0,0,36,2,32,223,0,33, -145,2,80,144,36,8,30,37,20,15,16,2,88,148,36,38,56,16,2,36,8, -240,0,128,0,0,2,33,223,0,33,147,2,80,144,36,8,31,37,20,15,16, -2,88,148,8,36,38,58,16,4,36,8,240,0,64,0,0,8,240,0,128,0, -0,36,2,50,223,0,33,148,2,80,144,36,8,47,39,20,15,16,2,88,148, -36,40,8,24,16,4,36,8,240,0,192,0,0,8,240,0,128,0,0,36,2, -16,223,0,33,157,2,80,144,36,49,37,20,15,16,2,32,0,88,148,36,39, -50,11,2,34,222,33,158,2,80,144,36,8,32,37,20,15,16,2,32,0,88, -148,8,36,41,8,27,11,2,35,222,33,163,2,80,144,36,8,33,37,20,15, -16,2,20,27,143,32,0,88,148,8,36,38,52,11,2,36,222,33,166,2,88, -148,8,100,38,49,16,4,36,36,38,36,2,36,223,0,33,168,2,80,144,36, -8,34,37,20,15,16,2,20,27,143,32,0,88,148,8,36,38,52,11,2,37, -222,33,173,2,88,148,8,100,38,49,16,4,36,36,38,36,2,37,223,0,33, -174,2,80,144,36,8,35,37,20,15,16,2,20,27,143,32,0,88,148,36,37, -44,11,2,38,222,33,175,2,32,0,88,148,36,37,44,11,2,38,222,33,176, -2,80,144,36,8,36,37,20,15,16,2,88,148,8,36,37,55,16,4,52,38, -36,37,2,50,223,0,33,177,2,80,144,36,8,48,39,20,15,16,2,88,148, -8,36,37,55,16,4,52,38,36,38,2,50,223,0,33,178,2,80,144,36,8, -49,39,20,15,16,2,88,148,36,36,53,52,9,223,0,33,179,2,80,144,36, -8,50,39,20,15,16,2,88,148,8,36,37,59,16,4,52,38,36,44,2,50, -223,0,33,180,2,80,144,36,8,51,39,20,15,16,2,20,25,96,2,39,88, -148,36,36,57,16,4,8,32,8,140,2,36,37,9,223,0,33,181,2,88,148, -36,37,58,16,4,8,32,8,140,2,36,38,9,223,0,33,182,2,88,148,36, -38,8,30,16,4,8,48,8,139,2,36,48,9,223,0,33,183,2,80,144,36, -8,37,37,20,15,16,2,88,148,8,36,37,57,16,4,8,128,6,36,36,52, -2,50,223,0,33,184,2,80,144,36,8,52,39,20,15,16,2,88,148,8,36, -39,54,16,4,52,36,36,52,2,40,223,0,33,186,2,80,144,36,8,38,37, -95,29,94,2,9,68,35,37,107,101,114,110,101,108,11,29,94,2,9,69,35, -37,109,105,110,45,115,116,120,11,2,19,9,9,9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 19189); +247,22,138,16,248,80,144,48,8,51,39,248,22,82,23,198,1,86,94,23,193, +1,248,80,144,46,8,51,39,248,22,82,23,196,1,86,94,23,193,1,27,248, +22,82,23,196,1,28,248,22,88,23,194,2,9,27,248,80,144,44,53,39,248, +22,81,23,196,2,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23, +198,1,247,22,138,16,248,80,144,46,8,51,39,248,22,82,23,198,1,86,94, +23,193,1,248,80,144,44,8,51,39,248,22,82,23,196,1,86,94,23,193,1, +27,248,22,82,23,197,1,28,248,22,88,23,194,2,9,27,27,248,22,81,23, +196,2,28,248,22,185,15,23,194,2,248,22,188,15,23,194,1,28,248,22,184, +15,23,194,2,90,144,39,11,89,146,39,36,11,248,22,181,15,249,22,186,15, +27,248,22,137,16,2,56,250,80,144,50,40,39,23,196,1,11,11,248,22,137, +16,2,57,86,95,23,195,1,23,194,1,248,22,188,15,249,22,186,15,23,199, +1,23,196,1,27,250,80,144,44,40,39,248,22,137,16,2,56,23,197,1,10, +28,23,193,2,248,22,188,15,23,194,1,11,28,23,193,2,249,22,80,248,22, +188,15,249,22,186,15,23,198,1,247,22,138,16,27,248,22,82,23,198,1,28, +248,22,88,23,194,2,9,27,248,80,144,44,53,39,248,22,81,23,196,2,28, +23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1,247,22,138,16, +248,80,144,46,8,51,39,248,22,82,23,198,1,86,94,23,193,1,248,80,144, +44,8,51,39,248,22,82,23,196,1,86,94,23,193,1,27,248,22,82,23,196, +1,28,248,22,88,23,194,2,9,27,248,80,144,42,53,39,248,22,81,23,196, +2,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198,1,247,22, +138,16,248,80,144,44,8,51,39,248,22,82,23,198,1,86,94,23,193,1,248, +80,144,42,8,51,39,248,22,82,23,196,1,27,247,22,144,16,27,248,80,144, +39,55,39,247,80,144,39,54,39,249,80,144,40,41,38,28,23,196,2,27,249, +22,173,8,247,22,172,8,2,74,28,192,249,22,163,8,194,7,63,2,66,2, +66,250,80,144,43,59,39,23,198,2,2,75,27,28,23,200,1,250,22,178,15, +248,22,137,16,2,61,250,22,158,2,23,205,1,2,59,247,22,169,8,2,76, +86,94,23,199,1,11,27,248,80,144,46,8,48,39,250,22,94,9,248,22,90, +248,22,137,16,2,55,9,28,193,249,22,80,195,194,192,27,247,22,144,16,27, +248,80,144,39,55,39,247,80,144,39,54,39,249,80,144,40,41,38,28,23,196, +2,27,249,22,173,8,247,22,172,8,2,74,28,192,249,22,163,8,194,7,63, +2,66,2,66,250,80,144,43,59,39,23,198,2,2,75,27,28,23,200,1,250, +22,178,15,248,22,137,16,2,61,250,22,158,2,23,205,1,2,59,247,22,169, +8,2,76,86,94,23,199,1,11,27,248,80,144,46,8,49,39,250,22,94,23, +207,1,248,22,90,248,22,137,16,2,55,9,28,193,249,22,80,195,194,192,27, +247,22,144,16,27,248,80,144,39,55,39,249,80,144,41,52,37,37,80,144,41, +8,50,39,249,80,144,40,41,38,28,23,196,2,27,249,22,173,8,247,22,172, +8,2,74,28,192,249,22,163,8,194,7,63,2,66,2,66,250,80,144,43,59, +39,23,198,2,2,75,27,28,23,200,1,250,22,178,15,248,22,137,16,2,61, +250,22,158,2,23,205,1,2,59,247,22,169,8,2,76,86,94,23,199,1,11, +27,27,250,22,94,23,207,1,248,22,90,248,22,137,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,185,15,23, +194,2,248,22,188,15,23,194,1,28,248,22,184,15,23,194,2,90,144,39,11, +89,146,39,36,11,248,22,181,15,249,22,186,15,27,248,22,137,16,2,56,250, +80,144,58,40,39,23,196,1,11,11,248,22,137,16,2,57,86,95,23,195,1, +23,194,1,248,22,188,15,249,22,186,15,23,199,1,23,196,1,27,250,80,144, +52,40,39,248,22,137,16,2,56,23,197,1,10,28,23,193,2,248,22,188,15, +23,194,1,11,28,23,193,2,249,22,80,248,22,188,15,249,22,186,15,23,198, +1,247,22,138,16,27,248,22,82,23,198,1,28,248,22,88,23,194,2,9,27, +248,80,144,52,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80,248,22, +188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,54,8,51,39,248, +22,82,23,198,1,86,94,23,193,1,248,80,144,52,8,51,39,248,22,82,23, +196,1,86,94,23,193,1,27,248,22,82,23,196,1,28,248,22,88,23,194,2, +9,27,248,80,144,50,53,39,248,22,81,23,196,2,28,23,193,2,249,22,80, +248,22,188,15,249,22,186,15,23,198,1,247,22,138,16,248,80,144,52,8,51, +39,248,22,82,23,198,1,86,94,23,193,1,248,80,144,50,8,51,39,248,22, +82,23,196,1,28,193,249,22,80,195,194,192,27,20,13,144,80,144,37,43,37, +26,9,80,144,46,44,37,249,22,33,11,80,144,48,43,37,22,134,15,10,22, +141,15,10,22,142,15,10,22,143,15,10,248,22,146,6,23,196,2,28,248,22, +146,7,23,194,2,12,86,94,248,22,175,9,23,194,1,27,20,13,144,80,144, +38,43,37,26,9,80,144,47,44,37,249,22,33,11,80,144,49,43,37,22,134, +15,10,22,141,15,10,22,142,15,10,22,143,15,10,248,22,146,6,23,197,2, +28,248,22,146,7,23,194,2,12,86,94,248,22,175,9,23,194,1,27,20,13, +144,80,144,39,43,37,26,9,80,144,48,44,37,249,22,33,11,80,144,50,43, +37,22,134,15,10,22,141,15,10,22,142,15,10,22,143,15,10,248,22,146,6, +23,198,2,28,248,22,146,7,23,194,2,12,86,94,248,22,175,9,23,194,1, +248,80,144,40,8,52,39,197,86,94,249,22,137,7,247,22,171,5,23,196,2, +248,22,161,6,249,22,136,4,36,249,22,184,3,23,198,1,23,199,1,27,28, +23,197,2,86,95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248, +22,137,16,2,56,27,250,80,144,42,40,39,23,197,1,11,11,27,248,22,139, +4,23,199,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22, +139,4,23,202,1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22, +138,6,23,199,1,20,20,95,88,148,8,36,36,48,11,9,224,4,2,33,185, +2,23,195,1,23,197,1,27,248,22,187,5,23,195,1,248,80,144,39,8,52, +39,193,144,36,20,114,144,36,16,1,11,16,0,20,26,15,53,9,2,1,2, +1,29,11,11,11,11,9,9,11,11,11,10,43,80,143,36,36,20,114,144,50, +16,39,2,2,2,3,2,4,2,5,2,6,2,7,2,8,30,2,11,1,20, +112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11, +6,30,2,11,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,11,4,2,12,2,13,2,14,2,15,2,16,2, +17,2,18,30,2,19,79,99,97,99,104,101,45,99,111,110,102,105,103,117,114, +97,116,105,111,110,11,1,2,20,2,21,2,22,2,23,2,24,2,25,2,26, +2,27,2,28,2,29,2,30,30,2,19,1,21,101,120,99,101,112,116,105,111, +110,45,104,97,110,100,108,101,114,45,107,101,121,11,3,2,31,2,32,2,33, +2,34,2,35,2,36,2,37,2,38,2,39,2,40,16,0,37,39,36,16,0, +36,16,18,2,13,2,14,2,12,2,26,2,3,2,34,2,24,2,25,2,20, +2,30,2,22,2,23,2,32,2,28,2,31,2,33,2,35,2,29,54,11,11, +11,16,17,2,8,2,17,2,15,2,40,2,16,2,6,2,27,2,39,2,18, +2,21,2,38,2,4,2,37,2,7,2,36,2,2,2,5,16,17,11,11,11, +11,11,11,11,11,11,11,11,11,11,11,11,11,11,16,17,2,8,2,17,2, +15,2,40,2,16,2,6,2,27,2,39,2,18,2,21,2,38,2,4,2,37, +2,7,2,36,2,2,2,5,53,53,37,12,11,11,16,0,16,0,16,0,36, +36,11,12,11,11,16,0,16,0,16,0,36,36,16,49,20,15,16,2,32,0, +88,148,8,36,37,45,11,2,2,222,33,77,80,144,36,36,37,20,15,16,2, +249,22,153,7,7,92,7,92,80,144,36,37,37,20,15,16,2,88,148,8,36, +37,54,38,2,4,223,0,33,82,80,144,36,38,37,20,15,16,2,88,148,8, +36,38,58,38,2,5,223,0,33,84,80,144,36,39,37,20,15,16,2,20,25, +96,2,6,88,148,8,36,39,8,24,8,32,9,223,0,33,91,88,148,8,36, +38,47,52,9,223,0,33,92,88,148,8,36,37,46,52,9,223,0,33,93,80, +144,36,40,37,20,15,16,2,27,248,22,148,16,248,22,165,8,27,28,249,22, +167,9,247,22,178,8,2,43,6,1,1,59,6,1,1,58,250,22,135,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,38,48,11,2,7,223,0,33,97,80,144,36,41,37,20,15, +16,2,88,148,36,37,8,38,8,128,6,2,8,223,0,33,98,80,144,36,42, +37,20,15,16,2,32,0,88,148,8,36,38,47,11,2,12,222,33,99,80,144, +36,45,37,20,15,16,2,32,0,88,148,8,36,39,48,11,2,13,222,33,101, +80,144,36,46,37,20,15,16,2,32,0,88,148,8,36,38,46,11,2,14,222, +33,102,80,144,36,47,37,20,15,16,2,88,148,45,39,49,8,128,128,2,15, +223,0,33,104,80,144,36,48,37,20,15,16,2,88,148,45,40,50,8,128,128, +2,17,223,0,33,106,80,144,36,50,37,20,15,16,2,88,148,36,36,53,52, +9,223,0,33,107,80,144,36,8,39,39,20,15,16,2,88,148,36,36,44,16, +4,36,37,8,128,2,36,2,18,223,0,33,108,80,144,36,51,37,20,15,16, +2,88,148,36,36,53,52,9,223,0,33,109,80,144,36,8,40,39,20,15,16, +2,88,148,36,36,44,16,4,36,37,8,128,4,36,2,21,223,0,33,110,80, +144,36,54,37,20,15,16,2,88,148,8,36,36,8,38,8,128,6,9,223,0, +33,111,80,144,36,8,41,39,20,15,16,2,88,148,8,36,37,47,16,4,36, +36,8,128,8,36,2,22,223,0,33,112,80,144,36,55,37,20,15,16,2,20, +27,143,32,0,88,148,36,37,45,11,2,23,222,33,113,32,0,88,148,36,37, +45,11,2,23,222,33,114,80,144,36,56,37,20,15,16,2,88,148,8,36,37, +47,8,240,0,128,0,0,2,24,223,0,33,115,80,144,36,57,37,20,15,16, +2,88,148,36,36,53,52,9,223,0,33,116,80,144,36,8,42,39,20,15,16, +2,88,148,8,36,37,48,16,4,36,37,8,128,16,36,2,25,223,0,33,117, +80,144,36,58,37,20,15,16,2,88,148,36,37,53,52,2,20,223,0,33,118, +80,144,36,53,37,20,15,16,2,88,148,8,36,38,55,16,4,8,240,0,128, +0,0,8,32,8,128,32,36,2,50,223,0,33,119,80,144,36,8,43,39,20, +15,16,2,88,148,8,36,39,49,16,4,36,36,8,128,32,36,2,26,223,0, +33,120,80,144,36,59,37,20,15,16,2,88,148,36,36,53,52,9,223,0,33, +121,80,144,36,8,44,39,20,15,16,2,88,148,8,36,36,54,16,4,8,240, +0,128,0,0,8,137,2,8,128,64,36,2,27,223,0,33,122,80,144,36,8, +24,37,20,15,16,2,247,22,140,2,80,144,36,8,25,37,20,15,16,2,248, +22,18,65,115,116,97,109,112,80,144,36,8,26,37,20,15,16,2,88,148,36, +37,46,8,240,0,0,0,4,9,223,0,33,124,80,144,36,8,45,39,20,15, +16,2,88,148,36,38,48,16,4,36,8,128,80,8,128,128,36,2,30,223,0, +33,132,2,80,144,36,8,27,37,20,15,16,2,32,0,88,148,8,36,37,45, +11,2,31,222,33,133,2,80,144,36,8,29,37,20,15,16,2,88,148,8,36, +39,45,8,240,0,0,0,2,72,109,97,107,101,45,104,97,110,100,108,101,114, +223,0,33,135,2,80,144,36,8,46,39,20,15,16,2,88,148,36,37,44,16, +4,8,128,6,8,128,104,8,240,0,64,0,0,36,2,32,223,0,33,145,2, +80,144,36,8,30,37,20,15,16,2,88,148,36,38,56,16,2,36,8,240,0, +128,0,0,2,33,223,0,33,147,2,80,144,36,8,31,37,20,15,16,2,88, +148,8,36,38,58,16,4,36,8,240,0,64,0,0,8,240,0,128,0,0,36, +2,50,223,0,33,148,2,80,144,36,8,47,39,20,15,16,2,88,148,36,40, +8,24,16,4,36,8,240,0,192,0,0,8,240,0,128,0,0,36,2,16,223, +0,33,157,2,80,144,36,49,37,20,15,16,2,32,0,88,148,36,39,50,11, +2,34,222,33,158,2,80,144,36,8,32,37,20,15,16,2,32,0,88,148,8, +36,41,8,27,11,2,35,222,33,163,2,80,144,36,8,33,37,20,15,16,2, +20,27,143,32,0,88,148,8,36,38,52,11,2,36,222,33,166,2,88,148,8, +100,38,49,16,4,36,36,38,36,2,36,223,0,33,168,2,80,144,36,8,34, +37,20,15,16,2,20,27,143,32,0,88,148,8,36,38,52,11,2,37,222,33, +173,2,88,148,8,100,38,49,16,4,36,36,38,36,2,37,223,0,33,174,2, +80,144,36,8,35,37,20,15,16,2,20,27,143,32,0,88,148,36,37,44,11, +2,38,222,33,175,2,32,0,88,148,36,37,44,11,2,38,222,33,176,2,80, +144,36,8,36,37,20,15,16,2,88,148,8,36,37,55,16,4,52,38,36,37, +2,50,223,0,33,177,2,80,144,36,8,48,39,20,15,16,2,88,148,8,36, +37,55,16,4,52,38,36,38,2,50,223,0,33,178,2,80,144,36,8,49,39, +20,15,16,2,88,148,36,36,53,52,9,223,0,33,179,2,80,144,36,8,50, +39,20,15,16,2,88,148,8,36,37,59,16,4,52,38,36,44,2,50,223,0, +33,180,2,80,144,36,8,51,39,20,15,16,2,20,25,96,2,39,88,148,36, +36,57,16,4,8,32,8,140,2,36,37,9,223,0,33,181,2,88,148,36,37, +58,16,4,8,32,8,140,2,36,38,9,223,0,33,182,2,88,148,36,38,8, +30,16,4,8,48,8,139,2,36,48,9,223,0,33,183,2,80,144,36,8,37, +37,20,15,16,2,88,148,8,36,37,57,16,4,8,128,6,36,36,52,2,50, +223,0,33,184,2,80,144,36,8,52,39,20,15,16,2,88,148,8,36,39,54, +16,4,52,36,36,52,2,40,223,0,33,186,2,80,144,36,8,38,37,95,29, +94,2,9,68,35,37,107,101,114,110,101,108,11,29,94,2,9,69,35,37,109, +105,110,45,115,116,120,11,2,19,9,9,9,36,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 19187); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,57,48,46,48,46,49,49,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,1,0,0,15,0, -40,0,57,0,75,0,97,0,120,0,140,0,162,0,171,0,180,0,187,0,196, -0,203,0,0,0,231,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114, -117,99,116,1,23,115,116,114,117,99,116,58,84,72,45,112,108,97,99,101,45, -99,104,97,110,110,101,108,76,84,72,45,112,108,97,99,101,45,99,104,97,110, -110,101,108,77,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,63, -1,20,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,114,101, -102,1,21,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,115, -101,116,33,79,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45, -105,110,1,20,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45, -111,117,116,249,80,143,38,39,23,196,1,36,249,80,143,38,39,23,196,1,36, -249,80,143,38,39,195,36,249,80,143,38,39,23,196,1,37,249,80,143,38,39, -195,37,144,36,20,114,144,36,16,1,11,16,0,20,26,15,53,9,2,1,2, -1,29,11,11,11,11,9,9,11,11,11,10,45,80,143,36,36,20,114,144,36, -16,7,2,2,2,3,2,4,2,5,2,6,2,7,2,8,16,0,37,39,36, -16,0,36,16,2,2,5,2,6,38,11,11,11,16,5,2,3,2,7,2,8, -2,4,2,2,16,5,11,11,11,11,11,16,5,2,3,2,7,2,8,2,4, -2,2,41,41,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16, -0,16,0,16,0,36,36,16,3,20,15,16,6,253,22,185,10,2,3,11,38, -36,11,248,22,90,249,22,80,22,172,10,88,148,36,37,45,44,9,223,9,33, -9,80,144,36,36,37,80,144,36,37,37,80,144,36,38,37,80,144,36,39,37, -80,144,36,40,37,20,15,16,2,20,27,143,88,148,36,37,45,44,9,223,0, -33,10,88,148,36,37,45,44,9,223,0,33,11,80,144,36,41,37,20,15,16, -2,20,27,143,88,148,36,37,45,44,9,223,0,33,12,88,148,36,37,45,44, -9,223,0,33,13,80,144,36,42,37,93,29,94,65,113,117,111,116,101,68,35, -37,107,101,114,110,101,108,11,9,9,9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 559); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,48,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,14,0,0,0,1,0,0,15,0,40,0, +57,0,75,0,97,0,120,0,140,0,162,0,171,0,180,0,187,0,196,0,203, +0,0,0,231,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99, +116,1,23,115,116,114,117,99,116,58,84,72,45,112,108,97,99,101,45,99,104, +97,110,110,101,108,76,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101, +108,77,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,63,1,20, +84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,114,101,102,1, +21,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,115,101,116, +33,79,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,105,110, +1,20,84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,45,111,117, +116,249,80,143,38,39,23,196,1,36,249,80,143,38,39,23,196,1,36,249,80, +143,38,39,195,36,249,80,143,38,39,23,196,1,37,249,80,143,38,39,195,37, +144,36,20,114,144,36,16,1,11,16,0,20,26,15,53,9,2,1,2,1,29, +11,11,11,11,9,9,11,11,11,10,45,80,143,36,36,20,114,144,36,16,7, +2,2,2,3,2,4,2,5,2,6,2,7,2,8,16,0,37,39,36,16,0, +36,16,2,2,5,2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4, +2,2,16,5,11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2, +41,41,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16, +0,16,0,36,36,16,3,20,15,16,6,253,22,185,10,2,3,11,38,36,11, +248,22,90,249,22,80,22,172,10,88,148,36,37,45,44,9,223,9,33,9,80, +144,36,36,37,80,144,36,37,37,80,144,36,38,37,80,144,36,39,37,80,144, +36,40,37,20,15,16,2,20,27,143,88,148,36,37,45,44,9,223,0,33,10, +88,148,36,37,45,44,9,223,0,33,11,80,144,36,41,37,20,15,16,2,20, +27,143,88,148,36,37,45,44,9,223,0,33,12,88,148,36,37,45,44,9,223, +0,33,13,80,144,36,42,37,93,29,94,65,113,117,111,116,101,68,35,37,107, +101,114,110,101,108,11,9,9,9,36,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 557); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,57,48,46,48,46,49,49,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,1,0,0,7,0, -18,0,45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175, -0,187,0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,75,1,87,1, -118,1,125,1,130,1,135,1,153,1,159,1,164,1,169,1,178,1,184,1,189, -1,193,1,208,1,215,1,220,1,224,1,229,1,236,1,247,1,254,1,6,2, -72,2,138,2,213,2,32,3,135,3,170,3,17,4,52,4,146,4,181,4,19, -5,54,5,249,12,23,13,74,13,165,13,181,13,197,13,211,13,227,13,46,14, -62,14,78,14,94,14,169,14,76,15,92,15,167,15,162,16,42,17,117,17,24, -18,37,18,190,18,118,19,161,19,243,19,115,20,176,20,184,20,195,20,229,21, -243,21,15,22,28,22,205,22,212,22,116,23,138,23,158,23,220,23,230,23,244, -23,25,24,124,24,128,24,135,24,89,25,192,33,245,33,13,34,37,34,0,0, -64,38,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105, -120,1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99, -111,109,112,105,108,101,100,65,113,117,111,116,101,68,35,37,112,97,114,97,109, -122,29,94,2,4,2,5,11,1,20,112,97,114,97,109,101,116,101,114,105,122, -97,116,105,111,110,45,107,101,121,29,94,2,4,67,35,37,117,116,105,108,115, -11,1,24,45,109,111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101, -45,116,97,98,108,101,76,114,101,103,105,115,116,101,114,45,122,111,45,112,97, -116,104,1,20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117, -97,114,100,67,67,65,67,72,69,45,78,71,45,112,97,116,104,45,99,97,99, -104,101,74,112,97,116,104,45,99,97,99,104,101,45,103,101,116,75,112,97,116, -104,45,99,97,99,104,101,45,115,101,116,33,77,45,108,111,97,100,105,110,103, -45,102,105,108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114, -111,109,112,116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75, -45,112,114,101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105, -116,45,114,101,108,97,116,105,118,101,45,115,116,114,105,110,103,1,22,102,111, -114,109,97,116,45,115,111,117,114,99,101,45,108,111,99,97,116,105,111,110,71, -111,114,105,103,45,112,97,114,97,109,122,1,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, -29,94,2,4,2,5,11,64,98,111,111,116,64,115,101,97,108,77,108,111,97, -100,47,117,115,101,45,99,111,109,112,105,108,101,100,5,4,46,114,107,116,64, -115,97,109,101,5,3,46,122,111,6,6,6,110,97,116,105,118,101,65,105,108, -111,111,112,64,108,111,111,112,63,108,105,98,6,12,12,109,111,100,117,108,101, -45,112,97,116,104,63,66,115,117,98,109,111,100,6,2,2,46,46,6,1,1, -46,64,102,105,108,101,66,112,108,97,110,101,116,6,8,8,109,97,105,110,46, -114,107,116,6,4,4,46,114,107,116,67,105,103,110,111,114,101,100,250,22,178, -15,28,249,22,167,9,23,201,2,2,29,86,94,23,199,1,23,197,1,28,248, -22,183,15,23,200,2,249,22,178,15,23,199,1,23,201,1,249,80,144,43,42, -39,23,199,1,23,201,1,23,200,1,249,80,144,43,43,39,23,198,1,2,30, -250,22,178,15,28,249,22,167,9,23,201,2,2,29,86,94,23,199,1,23,197, -1,28,248,22,183,15,23,200,2,249,22,178,15,23,199,1,23,201,1,249,80, -144,43,42,39,23,199,1,23,201,1,23,200,1,249,80,144,43,43,39,23,198, -1,2,30,252,22,178,15,28,249,22,167,9,23,203,2,2,29,86,94,23,201, -1,23,199,1,28,248,22,183,15,23,202,2,249,22,178,15,23,201,1,23,203, -1,249,80,144,45,42,39,23,201,1,23,203,1,23,202,1,2,31,247,22,179, -8,249,80,144,45,43,39,23,200,1,80,144,45,36,38,252,22,178,15,28,249, -22,167,9,23,203,2,2,29,86,94,23,201,1,23,199,1,28,248,22,183,15, -23,202,2,249,22,178,15,23,201,1,23,203,1,249,80,144,45,42,39,23,201, -1,23,203,1,23,202,1,2,31,247,22,179,8,249,80,144,45,43,39,23,200, -1,80,144,45,36,38,27,252,22,178,15,28,249,22,167,9,23,201,2,2,29, -86,94,23,199,1,23,201,1,28,248,22,183,15,23,200,2,249,22,178,15,23, -203,1,23,201,1,249,80,144,47,42,39,23,203,1,23,201,1,23,203,1,2, -31,247,22,179,8,249,80,144,47,43,39,23,202,1,80,144,47,36,38,27,250, -22,132,16,196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22, -80,195,194,11,249,22,5,20,20,96,88,148,8,36,37,54,8,129,3,9,226, -5,3,2,6,33,48,23,199,1,23,195,1,23,196,1,23,197,1,27,252,22, -178,15,28,249,22,167,9,23,201,2,2,29,86,94,23,199,1,23,201,1,28, -248,22,183,15,23,200,2,249,22,178,15,23,203,1,23,201,1,249,80,144,47, -42,39,23,203,1,23,201,1,23,203,1,2,31,247,22,179,8,249,80,144,47, -43,39,23,202,1,80,144,47,36,38,27,250,22,132,16,196,11,32,0,88,148, -8,36,36,41,11,9,222,11,28,192,249,22,80,195,194,11,249,22,5,20,20, -96,88,148,8,36,37,54,8,129,3,9,226,5,3,2,6,33,50,23,199,1, -23,195,1,23,196,1,23,197,1,27,250,22,178,15,28,249,22,167,9,23,199, -2,2,29,86,94,23,197,1,23,199,1,28,248,22,183,15,23,198,2,249,22, -178,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201,1,23,199,1,23, -201,1,249,80,144,45,43,39,23,200,1,2,30,27,250,22,132,16,196,11,32, -0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,195,194,11,249,22, -5,20,20,96,88,148,8,36,37,52,8,128,3,9,226,5,3,2,6,33,52, -23,199,1,23,195,1,23,196,1,23,197,1,27,250,22,178,15,28,249,22,167, -9,23,199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,183,15,23,198, -2,249,22,178,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201,1,23, -199,1,23,201,1,249,80,144,45,43,39,23,200,1,2,30,27,250,22,132,16, -196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,195,194, -11,249,22,5,20,20,96,88,148,8,36,37,52,8,128,3,9,226,5,3,2, -6,33,54,23,199,1,23,195,1,23,196,1,23,197,1,86,95,28,248,80,144, -37,40,39,23,195,2,12,250,22,176,11,2,27,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,37, -28,28,248,22,64,248,22,81,23,197,2,10,248,22,165,9,248,22,144,18,23, -197,2,249,22,4,22,64,248,22,145,18,23,198,2,11,11,11,10,12,250,22, -176,11,2,27,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,190,4,11,27,28,23,194,2,250,22,158,2,80,143,41,41,248, -22,177,16,247,22,130,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,39,38,37,250,80,144,42,39,37,249,22,33,11,80, -144,44,38,37,22,191,4,248,22,102,23,197,2,27,248,22,111,23,195,2,20, -13,144,80,144,40,38,37,250,80,144,43,39,37,249,22,33,11,80,144,45,38, -37,22,176,5,28,248,22,160,15,23,197,2,23,196,1,86,94,23,196,1,247, -22,138,16,249,247,22,174,5,248,22,81,23,197,1,23,201,1,86,94,23,193, -1,90,144,47,11,89,146,37,36,11,28,248,22,185,15,23,209,2,23,208,2, -27,247,22,176,5,28,192,249,22,186,15,23,211,2,194,23,209,2,89,146,39, -37,11,248,22,181,15,23,209,1,86,94,23,196,1,89,146,38,40,11,28,23, -209,2,27,248,22,165,15,23,197,2,19,248,22,145,8,194,28,28,249,22,132, -4,23,195,4,40,249,22,148,8,2,28,249,22,151,8,197,249,22,184,3,23, -199,4,40,11,249,22,7,23,199,2,248,22,169,15,249,22,152,8,250,22,151, -8,201,36,249,22,184,3,23,203,4,40,5,3,46,115,115,249,22,7,23,199, -2,11,2,249,22,7,23,197,2,11,89,146,37,42,11,28,249,22,167,9,23, -199,2,23,197,2,23,193,2,249,22,178,15,23,196,2,23,199,2,89,146,37, -43,11,28,23,198,2,28,249,22,167,9,23,200,2,23,197,1,23,193,1,86, -94,23,193,1,249,22,178,15,23,196,2,23,200,2,86,94,23,195,1,11,89, -146,37,44,11,28,249,22,167,9,23,196,2,68,114,101,108,97,116,105,118,101, -86,94,23,194,1,2,29,23,194,1,89,146,37,45,11,247,22,142,16,89,146, -37,46,11,247,22,143,16,27,250,22,132,16,23,203,2,11,32,0,88,148,8, -36,36,41,11,9,222,11,27,28,23,194,2,249,22,80,23,203,2,23,196,1, -86,94,23,194,1,11,27,28,23,203,2,28,23,194,2,11,27,250,22,132,16, -23,207,2,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80, -23,206,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2,27,88,148,8, -36,38,51,8,128,3,62,122,111,225,19,13,9,33,44,27,88,148,8,36,38, -51,8,128,3,66,97,108,116,45,122,111,225,20,14,11,33,45,27,88,148,8, -36,38,53,8,129,3,9,225,21,15,11,33,46,27,88,148,8,36,38,53,8, -129,3,9,225,22,16,13,33,47,27,28,23,200,2,23,200,2,248,22,165,9, -23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248, -22,165,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88, -148,36,37,48,8,129,3,9,226,28,23,22,18,33,49,23,217,2,27,28,23, -202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,132,4,248,22,82, -196,248,22,82,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,193, -2,86,108,23,217,1,23,216,1,23,214,1,23,213,1,23,211,1,23,210,1, -23,209,1,23,208,1,23,201,1,23,200,1,23,199,1,23,198,1,23,196,1, -23,195,1,23,194,1,20,13,144,80,144,8,25,38,37,250,80,144,8,28,39, -37,249,22,33,11,80,144,8,30,38,37,22,191,4,11,20,13,144,80,144,8, -25,38,37,250,80,144,8,28,39,37,249,22,33,11,80,144,8,30,38,37,22, -176,5,28,248,22,160,15,23,216,2,23,215,1,86,94,23,215,1,247,22,138, -16,249,247,22,147,16,248,22,81,23,196,1,23,222,1,86,94,23,193,1,27, -28,23,195,2,28,23,197,1,27,249,22,5,88,148,36,37,48,8,129,3,9, -226,29,24,23,20,33,51,23,218,2,27,28,23,204,2,11,193,28,192,192,28, -193,28,203,28,249,22,132,4,248,22,82,196,248,22,82,206,193,11,11,11,11, -86,94,23,197,1,11,28,23,193,2,86,105,23,218,1,23,217,1,23,215,1, -23,214,1,23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1, -23,196,1,23,195,1,20,13,144,80,144,8,26,38,37,250,80,144,8,29,39, -37,249,22,33,11,80,144,8,31,38,37,22,191,4,23,215,1,20,13,144,80, -144,8,26,38,37,250,80,144,8,29,39,37,249,22,33,11,80,144,8,31,38, -37,22,176,5,28,248,22,160,15,23,217,2,23,216,1,86,94,23,216,1,247, -22,138,16,249,247,22,147,16,248,22,81,23,196,1,23,223,1,86,94,23,193, -1,27,28,23,197,2,28,23,201,1,27,249,22,5,20,20,94,88,148,36,37, -48,8,128,3,9,226,30,25,24,20,33,53,23,213,1,23,219,2,27,28,23, -204,2,11,193,28,192,192,28,193,28,23,204,2,28,249,22,132,4,248,22,82, -196,248,22,82,23,207,2,193,11,11,11,86,94,23,210,1,11,86,94,23,201, -1,11,28,23,193,2,86,102,23,216,1,23,215,1,23,213,1,23,212,1,23, -211,1,23,202,1,23,200,1,23,197,1,23,196,1,86,94,27,248,22,81,23, -195,2,28,23,219,2,250,22,156,2,248,22,82,23,223,1,23,223,1,250,22, -90,23,199,1,11,23,221,2,12,20,13,144,80,144,8,27,38,37,250,80,144, -8,30,39,37,249,22,33,11,80,144,8,32,38,37,22,191,4,11,20,13,144, -80,144,8,27,38,37,250,80,144,8,30,39,37,249,22,33,11,80,144,8,32, -38,37,22,176,5,28,248,22,160,15,23,218,2,23,217,1,86,94,23,217,1, -247,22,138,16,249,247,22,174,5,248,22,144,18,23,196,1,23,224,32,0,0, -0,1,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,20, -20,95,88,148,36,37,48,8,128,3,9,226,31,26,25,22,33,55,23,215,1, -23,219,1,23,220,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28, -249,22,132,4,248,22,82,196,248,22,82,23,15,193,11,11,11,86,96,23,217, -1,23,216,1,23,212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23, -213,1,23,198,1,86,94,27,248,22,81,23,195,2,28,23,220,2,250,22,156, -2,248,22,82,23,224,32,0,0,0,1,23,224,32,0,0,0,1,250,22,90, -23,199,1,23,221,2,23,222,2,12,20,13,144,80,144,8,28,38,37,250,80, -144,8,31,39,37,249,22,33,11,80,144,8,33,38,37,22,191,4,23,217,1, -20,13,144,80,144,8,28,38,37,250,80,144,8,31,39,37,249,22,33,11,80, -144,8,33,38,37,22,176,5,28,248,22,160,15,23,219,2,23,218,1,86,94, -23,218,1,247,22,138,16,249,247,22,174,5,248,22,144,18,23,196,1,23,224, -33,0,0,0,1,86,94,23,193,1,28,28,248,22,78,23,224,32,0,0,0, -2,248,22,144,18,23,224,32,0,0,0,2,10,27,28,23,199,2,86,94,23, -215,1,23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,78,23,224,33, -0,0,0,2,248,22,165,9,248,22,172,15,23,195,2,11,12,20,13,144,80, -144,8,29,38,37,250,80,144,8,32,39,37,249,22,33,11,80,144,8,34,38, -37,22,191,4,28,23,224,35,0,0,0,2,28,23,202,1,11,23,196,2,86, -94,23,202,1,11,20,13,144,80,144,8,29,38,37,250,80,144,8,32,39,37, -249,22,33,11,80,144,8,34,38,37,22,176,5,28,248,22,160,15,23,220,2, -23,219,1,86,94,23,219,1,247,22,138,16,249,247,22,174,5,23,195,1,23, -224,34,0,0,0,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,187,8, -80,144,39,47,38,249,22,191,3,248,22,187,3,248,22,173,2,200,8,128,8, -27,28,193,248,22,176,2,194,11,28,192,27,249,22,100,198,195,28,192,248,22, -82,193,11,11,27,249,22,191,3,248,22,187,3,248,22,173,2,23,199,2,8, -128,8,27,249,22,187,8,80,144,40,47,38,23,196,2,27,28,23,194,2,248, -22,176,2,23,195,1,86,94,23,194,1,11,250,22,188,8,80,144,42,47,38, -23,198,1,248,22,175,2,249,22,80,249,22,80,23,205,1,23,206,1,28,23, -199,2,23,199,1,86,94,23,199,1,9,32,60,88,149,8,38,39,51,11,2, -32,36,223,3,33,75,32,61,88,149,8,38,39,50,11,2,32,36,223,3,33, -74,32,62,88,148,8,36,37,50,11,2,33,222,33,73,32,63,88,149,8,38, -39,50,11,2,32,36,223,3,33,64,28,249,22,128,4,23,197,2,23,195,4, -248,22,90,194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2, -249,22,80,250,22,173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7, -23,199,1,248,22,181,3,23,201,1,250,2,63,23,196,4,196,248,22,181,3, -198,32,65,88,149,8,38,39,52,11,2,32,36,223,3,33,72,32,66,88,149, -8,38,39,51,11,2,32,36,223,3,33,69,32,67,88,149,8,38,39,50,11, -2,32,36,223,3,33,68,28,249,22,128,4,23,197,2,23,195,4,248,22,90, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,48,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,106,0,0,0,1,0,0,7,0,18,0, +45,0,51,0,60,0,67,0,89,0,102,0,128,0,145,0,167,0,175,0,187, +0,202,0,218,0,236,0,0,1,12,1,28,1,51,1,75,1,87,1,118,1, +125,1,130,1,135,1,153,1,159,1,164,1,169,1,178,1,184,1,189,1,193, +1,208,1,215,1,220,1,224,1,229,1,236,1,247,1,254,1,6,2,72,2, +138,2,213,2,32,3,135,3,170,3,17,4,52,4,146,4,181,4,19,5,54, +5,249,12,23,13,74,13,165,13,181,13,197,13,211,13,227,13,46,14,62,14, +78,14,94,14,169,14,76,15,92,15,167,15,162,16,42,17,117,17,24,18,37, +18,190,18,118,19,161,19,243,19,115,20,176,20,184,20,195,20,229,21,243,21, +15,22,28,22,205,22,212,22,116,23,138,23,158,23,220,23,230,23,244,23,25, +24,124,24,128,24,135,24,89,25,192,33,245,33,13,34,37,34,0,0,64,38, +0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,1, +25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109, +112,105,108,101,100,65,113,117,111,116,101,68,35,37,112,97,114,97,109,122,29, +94,2,4,2,5,11,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,45,107,101,121,29,94,2,4,67,35,37,117,116,105,108,115,11,1, +24,45,109,111,100,117,108,101,45,104,97,115,104,45,116,97,98,108,101,45,116, +97,98,108,101,76,114,101,103,105,115,116,101,114,45,122,111,45,112,97,116,104, +1,20,100,101,102,97,117,108,116,45,114,101,97,100,101,114,45,103,117,97,114, +100,67,67,65,67,72,69,45,78,71,45,112,97,116,104,45,99,97,99,104,101, +74,112,97,116,104,45,99,97,99,104,101,45,103,101,116,75,112,97,116,104,45, +99,97,99,104,101,45,115,101,116,33,77,45,108,111,97,100,105,110,103,45,102, +105,108,101,110,97,109,101,79,45,108,111,97,100,105,110,103,45,112,114,111,109, +112,116,45,116,97,103,71,45,112,114,101,118,45,114,101,108,116,111,75,45,112, +114,101,118,45,114,101,108,116,111,45,100,105,114,1,21,115,112,108,105,116,45, +114,101,108,97,116,105,118,101,45,115,116,114,105,110,103,1,22,102,111,114,109, +97,116,45,115,111,117,114,99,101,45,108,111,99,97,116,105,111,110,71,111,114, +105,103,45,112,97,114,97,109,122,1,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,29,94, +2,4,2,5,11,64,98,111,111,116,64,115,101,97,108,77,108,111,97,100,47, +117,115,101,45,99,111,109,112,105,108,101,100,5,4,46,114,107,116,64,115,97, +109,101,5,3,46,122,111,6,6,6,110,97,116,105,118,101,65,105,108,111,111, +112,64,108,111,111,112,63,108,105,98,6,12,12,109,111,100,117,108,101,45,112, +97,116,104,63,66,115,117,98,109,111,100,6,2,2,46,46,6,1,1,46,64, +102,105,108,101,66,112,108,97,110,101,116,6,8,8,109,97,105,110,46,114,107, +116,6,4,4,46,114,107,116,67,105,103,110,111,114,101,100,250,22,178,15,28, +249,22,167,9,23,201,2,2,29,86,94,23,199,1,23,197,1,28,248,22,183, +15,23,200,2,249,22,178,15,23,199,1,23,201,1,249,80,144,43,42,39,23, +199,1,23,201,1,23,200,1,249,80,144,43,43,39,23,198,1,2,30,250,22, +178,15,28,249,22,167,9,23,201,2,2,29,86,94,23,199,1,23,197,1,28, +248,22,183,15,23,200,2,249,22,178,15,23,199,1,23,201,1,249,80,144,43, +42,39,23,199,1,23,201,1,23,200,1,249,80,144,43,43,39,23,198,1,2, +30,252,22,178,15,28,249,22,167,9,23,203,2,2,29,86,94,23,201,1,23, +199,1,28,248,22,183,15,23,202,2,249,22,178,15,23,201,1,23,203,1,249, +80,144,45,42,39,23,201,1,23,203,1,23,202,1,2,31,247,22,179,8,249, +80,144,45,43,39,23,200,1,80,144,45,36,38,252,22,178,15,28,249,22,167, +9,23,203,2,2,29,86,94,23,201,1,23,199,1,28,248,22,183,15,23,202, +2,249,22,178,15,23,201,1,23,203,1,249,80,144,45,42,39,23,201,1,23, +203,1,23,202,1,2,31,247,22,179,8,249,80,144,45,43,39,23,200,1,80, +144,45,36,38,27,252,22,178,15,28,249,22,167,9,23,201,2,2,29,86,94, +23,199,1,23,201,1,28,248,22,183,15,23,200,2,249,22,178,15,23,203,1, +23,201,1,249,80,144,47,42,39,23,203,1,23,201,1,23,203,1,2,31,247, +22,179,8,249,80,144,47,43,39,23,202,1,80,144,47,36,38,27,250,22,132, +16,196,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,195, +194,11,249,22,5,20,20,96,88,148,8,36,37,54,8,129,3,9,226,5,3, +2,6,33,48,23,199,1,23,195,1,23,196,1,23,197,1,27,252,22,178,15, +28,249,22,167,9,23,201,2,2,29,86,94,23,199,1,23,201,1,28,248,22, +183,15,23,200,2,249,22,178,15,23,203,1,23,201,1,249,80,144,47,42,39, +23,203,1,23,201,1,23,203,1,2,31,247,22,179,8,249,80,144,47,43,39, +23,202,1,80,144,47,36,38,27,250,22,132,16,196,11,32,0,88,148,8,36, +36,41,11,9,222,11,28,192,249,22,80,195,194,11,249,22,5,20,20,96,88, +148,8,36,37,54,8,129,3,9,226,5,3,2,6,33,50,23,199,1,23,195, +1,23,196,1,23,197,1,27,250,22,178,15,28,249,22,167,9,23,199,2,2, +29,86,94,23,197,1,23,199,1,28,248,22,183,15,23,198,2,249,22,178,15, +23,201,1,23,199,1,249,80,144,45,42,39,23,201,1,23,199,1,23,201,1, +249,80,144,45,43,39,23,200,1,2,30,27,250,22,132,16,196,11,32,0,88, +148,8,36,36,41,11,9,222,11,28,192,249,22,80,195,194,11,249,22,5,20, +20,96,88,148,8,36,37,52,8,128,3,9,226,5,3,2,6,33,52,23,199, +1,23,195,1,23,196,1,23,197,1,27,250,22,178,15,28,249,22,167,9,23, +199,2,2,29,86,94,23,197,1,23,199,1,28,248,22,183,15,23,198,2,249, +22,178,15,23,201,1,23,199,1,249,80,144,45,42,39,23,201,1,23,199,1, +23,201,1,249,80,144,45,43,39,23,200,1,2,30,27,250,22,132,16,196,11, +32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,195,194,11,249, +22,5,20,20,96,88,148,8,36,37,52,8,128,3,9,226,5,3,2,6,33, +54,23,199,1,23,195,1,23,196,1,23,197,1,86,95,28,248,80,144,37,40, +39,23,195,2,12,250,22,176,11,2,27,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,37,28,28, +248,22,64,248,22,81,23,197,2,10,248,22,165,9,248,22,144,18,23,197,2, +249,22,4,22,64,248,22,145,18,23,198,2,11,11,11,10,12,250,22,176,11, +2,27,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,190,4,11,27,28,23,194,2,250,22,158,2,80,143,41,41,248,22,177, +16,247,22,130,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,39,38,37,250,80,144,42,39,37,249,22,33,11,80,144,44, +38,37,22,191,4,248,22,102,23,197,2,27,248,22,111,23,195,2,20,13,144, +80,144,40,38,37,250,80,144,43,39,37,249,22,33,11,80,144,45,38,37,22, +176,5,28,248,22,160,15,23,197,2,23,196,1,86,94,23,196,1,247,22,138, +16,249,247,22,174,5,248,22,81,23,197,1,23,201,1,86,94,23,193,1,90, +144,47,11,89,146,37,36,11,28,248,22,185,15,23,209,2,23,208,2,27,247, +22,176,5,28,192,249,22,186,15,23,211,2,194,23,209,2,89,146,39,37,11, +248,22,181,15,23,209,1,86,94,23,196,1,89,146,38,40,11,28,23,209,2, +27,248,22,165,15,23,197,2,19,248,22,145,8,194,28,28,249,22,132,4,23, +195,4,40,249,22,148,8,2,28,249,22,151,8,197,249,22,184,3,23,199,4, +40,11,249,22,7,23,199,2,248,22,169,15,249,22,152,8,250,22,151,8,201, +36,249,22,184,3,23,203,4,40,5,3,46,115,115,249,22,7,23,199,2,11, +2,249,22,7,23,197,2,11,89,146,37,42,11,28,249,22,167,9,23,199,2, +23,197,2,23,193,2,249,22,178,15,23,196,2,23,199,2,89,146,37,43,11, +28,23,198,2,28,249,22,167,9,23,200,2,23,197,1,23,193,1,86,94,23, +193,1,249,22,178,15,23,196,2,23,200,2,86,94,23,195,1,11,89,146,37, +44,11,28,249,22,167,9,23,196,2,68,114,101,108,97,116,105,118,101,86,94, +23,194,1,2,29,23,194,1,89,146,37,45,11,247,22,142,16,89,146,37,46, +11,247,22,143,16,27,250,22,132,16,23,203,2,11,32,0,88,148,8,36,36, +41,11,9,222,11,27,28,23,194,2,249,22,80,23,203,2,23,196,1,86,94, +23,194,1,11,27,28,23,203,2,28,23,194,2,11,27,250,22,132,16,23,207, +2,11,32,0,88,148,8,36,36,41,11,9,222,11,28,192,249,22,80,23,206, +2,194,11,11,27,28,23,195,2,23,195,2,23,194,2,27,88,148,8,36,38, +51,8,128,3,62,122,111,225,19,13,9,33,44,27,88,148,8,36,38,51,8, +128,3,66,97,108,116,45,122,111,225,20,14,11,33,45,27,88,148,8,36,38, +53,8,129,3,9,225,21,15,11,33,46,27,88,148,8,36,38,53,8,129,3, +9,225,22,16,13,33,47,27,28,23,200,2,23,200,2,248,22,165,9,23,200, +2,27,28,23,208,2,28,23,200,2,86,94,23,201,1,23,200,2,248,22,165, +9,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,88,148,36, +37,48,8,129,3,9,226,28,23,22,18,33,49,23,217,2,27,28,23,202,2, +11,193,28,192,192,28,193,28,23,202,2,28,249,22,132,4,248,22,82,196,248, +22,82,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86, +108,23,217,1,23,216,1,23,214,1,23,213,1,23,211,1,23,210,1,23,209, +1,23,208,1,23,201,1,23,200,1,23,199,1,23,198,1,23,196,1,23,195, +1,23,194,1,20,13,144,80,144,8,25,38,37,250,80,144,8,28,39,37,249, +22,33,11,80,144,8,30,38,37,22,191,4,11,20,13,144,80,144,8,25,38, +37,250,80,144,8,28,39,37,249,22,33,11,80,144,8,30,38,37,22,176,5, +28,248,22,160,15,23,216,2,23,215,1,86,94,23,215,1,247,22,138,16,249, +247,22,147,16,248,22,81,23,196,1,23,222,1,86,94,23,193,1,27,28,23, +195,2,28,23,197,1,27,249,22,5,88,148,36,37,48,8,129,3,9,226,29, +24,23,20,33,51,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193,28, +203,28,249,22,132,4,248,22,82,196,248,22,82,206,193,11,11,11,11,86,94, +23,197,1,11,28,23,193,2,86,105,23,218,1,23,217,1,23,215,1,23,214, +1,23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196, +1,23,195,1,20,13,144,80,144,8,26,38,37,250,80,144,8,29,39,37,249, +22,33,11,80,144,8,31,38,37,22,191,4,23,215,1,20,13,144,80,144,8, +26,38,37,250,80,144,8,29,39,37,249,22,33,11,80,144,8,31,38,37,22, +176,5,28,248,22,160,15,23,217,2,23,216,1,86,94,23,216,1,247,22,138, +16,249,247,22,147,16,248,22,81,23,196,1,23,223,1,86,94,23,193,1,27, +28,23,197,2,28,23,201,1,27,249,22,5,20,20,94,88,148,36,37,48,8, +128,3,9,226,30,25,24,20,33,53,23,213,1,23,219,2,27,28,23,204,2, +11,193,28,192,192,28,193,28,23,204,2,28,249,22,132,4,248,22,82,196,248, +22,82,23,207,2,193,11,11,11,86,94,23,210,1,11,86,94,23,201,1,11, +28,23,193,2,86,102,23,216,1,23,215,1,23,213,1,23,212,1,23,211,1, +23,202,1,23,200,1,23,197,1,23,196,1,86,94,27,248,22,81,23,195,2, +28,23,219,2,250,22,156,2,248,22,82,23,223,1,23,223,1,250,22,90,23, +199,1,11,23,221,2,12,20,13,144,80,144,8,27,38,37,250,80,144,8,30, +39,37,249,22,33,11,80,144,8,32,38,37,22,191,4,11,20,13,144,80,144, +8,27,38,37,250,80,144,8,30,39,37,249,22,33,11,80,144,8,32,38,37, +22,176,5,28,248,22,160,15,23,218,2,23,217,1,86,94,23,217,1,247,22, +138,16,249,247,22,174,5,248,22,144,18,23,196,1,23,224,32,0,0,0,1, +86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,22,5,20,20,95, +88,148,36,37,48,8,128,3,9,226,31,26,25,22,33,55,23,215,1,23,219, +1,23,220,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22, +132,4,248,22,82,196,248,22,82,23,15,193,11,11,11,86,96,23,217,1,23, +216,1,23,212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1, +23,198,1,86,94,27,248,22,81,23,195,2,28,23,220,2,250,22,156,2,248, +22,82,23,224,32,0,0,0,1,23,224,32,0,0,0,1,250,22,90,23,199, +1,23,221,2,23,222,2,12,20,13,144,80,144,8,28,38,37,250,80,144,8, +31,39,37,249,22,33,11,80,144,8,33,38,37,22,191,4,23,217,1,20,13, +144,80,144,8,28,38,37,250,80,144,8,31,39,37,249,22,33,11,80,144,8, +33,38,37,22,176,5,28,248,22,160,15,23,219,2,23,218,1,86,94,23,218, +1,247,22,138,16,249,247,22,174,5,248,22,144,18,23,196,1,23,224,33,0, +0,0,1,86,94,23,193,1,28,28,248,22,78,23,224,32,0,0,0,2,248, +22,144,18,23,224,32,0,0,0,2,10,27,28,23,199,2,86,94,23,215,1, +23,214,1,86,94,23,214,1,23,215,1,28,28,248,22,78,23,224,33,0,0, +0,2,248,22,165,9,248,22,172,15,23,195,2,11,12,20,13,144,80,144,8, +29,38,37,250,80,144,8,32,39,37,249,22,33,11,80,144,8,34,38,37,22, +191,4,28,23,224,35,0,0,0,2,28,23,202,1,11,23,196,2,86,94,23, +202,1,11,20,13,144,80,144,8,29,38,37,250,80,144,8,32,39,37,249,22, +33,11,80,144,8,34,38,37,22,176,5,28,248,22,160,15,23,220,2,23,219, +1,86,94,23,219,1,247,22,138,16,249,247,22,174,5,23,195,1,23,224,34, +0,0,0,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,187,8,80,144, +39,47,38,249,22,191,3,248,22,187,3,248,22,173,2,200,8,128,8,27,28, +193,248,22,176,2,194,11,28,192,27,249,22,100,198,195,28,192,248,22,82,193, +11,11,27,249,22,191,3,248,22,187,3,248,22,173,2,23,199,2,8,128,8, +27,249,22,187,8,80,144,40,47,38,23,196,2,27,28,23,194,2,248,22,176, +2,23,195,1,86,94,23,194,1,11,250,22,188,8,80,144,42,47,38,23,198, +1,248,22,175,2,249,22,80,249,22,80,23,205,1,23,206,1,28,23,199,2, +23,199,1,86,94,23,199,1,9,32,60,88,149,8,38,39,51,11,2,32,36, +223,3,33,75,32,61,88,149,8,38,39,50,11,2,32,36,223,3,33,74,32, +62,88,148,8,36,37,50,11,2,33,222,33,73,32,63,88,149,8,38,39,50, +11,2,32,36,223,3,33,64,28,249,22,128,4,23,197,2,23,195,4,248,22, +90,194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2,249,22, +80,250,22,173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7,23,199, +1,248,22,181,3,23,201,1,250,2,63,23,196,4,196,248,22,181,3,198,32, +65,88,149,8,38,39,52,11,2,32,36,223,3,33,72,32,66,88,149,8,38, +39,51,11,2,32,36,223,3,33,69,32,67,88,149,8,38,39,50,11,2,32, +36,223,3,33,68,28,249,22,128,4,23,197,2,23,195,4,248,22,90,194,28, +249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2,249,22,80,250,22, +173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7,23,199,1,248,22, +181,3,23,201,1,250,2,67,23,196,4,196,248,22,181,3,198,28,249,22,128, +4,23,197,2,23,195,4,248,22,90,194,28,249,22,134,9,7,47,249,22,155, +7,23,198,2,23,199,2,249,22,80,250,22,173,7,23,199,2,36,23,200,2, +27,249,22,173,7,23,199,1,248,22,181,3,23,201,1,19,248,22,154,7,23, +195,2,250,2,67,23,196,4,23,197,1,36,2,27,248,22,181,3,23,197,1, +28,249,22,128,4,23,195,2,23,196,4,248,22,90,195,28,249,22,134,9,7, +47,249,22,155,7,23,199,2,23,197,2,249,22,80,250,22,173,7,23,200,2, +36,23,198,2,248,2,62,249,22,173,7,23,200,1,248,22,181,3,23,199,1, +250,2,66,23,197,4,197,248,22,181,3,196,32,70,88,149,8,38,39,50,11, +2,32,36,223,3,33,71,28,249,22,128,4,23,197,2,23,195,4,248,22,90, 194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2,249,22,80, 250,22,173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7,23,199,1, -248,22,181,3,23,201,1,250,2,67,23,196,4,196,248,22,181,3,198,28,249, +248,22,181,3,23,201,1,250,2,70,23,196,4,196,248,22,181,3,198,28,249, 22,128,4,23,197,2,23,195,4,248,22,90,194,28,249,22,134,9,7,47,249, 22,155,7,23,198,2,23,199,2,249,22,80,250,22,173,7,23,199,2,36,23, 200,2,27,249,22,173,7,23,199,1,248,22,181,3,23,201,1,19,248,22,154, -7,23,195,2,250,2,67,23,196,4,23,197,1,36,2,27,248,22,181,3,23, +7,23,195,2,250,2,66,23,196,4,23,197,1,36,2,27,248,22,181,3,23, +197,1,28,249,22,128,4,23,195,2,23,196,4,248,22,90,195,28,249,22,134, +9,7,47,249,22,155,7,23,199,2,23,197,2,249,22,80,250,22,173,7,23, +200,2,36,23,198,2,27,249,22,173,7,23,200,1,248,22,181,3,23,199,1, +19,248,22,154,7,23,195,2,250,2,70,23,196,4,23,197,1,36,2,27,248, +22,181,3,23,195,1,28,249,22,128,4,23,195,2,23,197,4,248,22,90,196, +28,249,22,134,9,7,47,249,22,155,7,23,200,2,23,197,2,249,22,80,250, +22,173,7,23,201,2,36,23,198,2,248,2,62,249,22,173,7,23,201,1,248, +22,181,3,23,199,1,250,2,65,23,198,4,198,248,22,181,3,196,19,248,22, +154,7,23,195,2,28,249,22,128,4,36,23,195,4,248,22,90,194,28,249,22, +134,9,7,47,249,22,155,7,23,198,2,36,249,22,80,250,22,173,7,23,199, +2,36,36,27,249,22,173,7,23,199,1,37,19,248,22,154,7,23,195,2,250, +2,63,23,196,4,23,197,1,36,2,28,249,22,128,4,37,23,195,4,248,22, +90,194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,37,249,22,80,250, +22,173,7,23,199,2,36,37,248,2,62,249,22,173,7,23,199,1,38,250,2, +65,23,196,4,196,38,2,28,249,22,128,4,23,197,2,23,195,4,248,22,90, +194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2,249,22,80, +250,22,173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7,23,199,1, +248,22,181,3,23,201,1,250,2,61,23,196,4,196,248,22,181,3,198,28,249, +22,128,4,23,197,2,23,195,4,248,22,90,194,28,249,22,134,9,7,47,249, +22,155,7,23,198,2,23,199,2,249,22,80,250,22,173,7,23,199,2,36,23, +200,2,27,249,22,173,7,23,199,1,248,22,181,3,23,201,1,19,248,22,154, +7,23,195,2,250,2,61,23,196,4,23,197,1,36,2,27,248,22,181,3,23, 197,1,28,249,22,128,4,23,195,2,23,196,4,248,22,90,195,28,249,22,134, 9,7,47,249,22,155,7,23,199,2,23,197,2,249,22,80,250,22,173,7,23, 200,2,36,23,198,2,248,2,62,249,22,173,7,23,200,1,248,22,181,3,23, -199,1,250,2,66,23,197,4,197,248,22,181,3,196,32,70,88,149,8,38,39, -50,11,2,32,36,223,3,33,71,28,249,22,128,4,23,197,2,23,195,4,248, -22,90,194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2,249, -22,80,250,22,173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7,23, -199,1,248,22,181,3,23,201,1,250,2,70,23,196,4,196,248,22,181,3,198, -28,249,22,128,4,23,197,2,23,195,4,248,22,90,194,28,249,22,134,9,7, -47,249,22,155,7,23,198,2,23,199,2,249,22,80,250,22,173,7,23,199,2, -36,23,200,2,27,249,22,173,7,23,199,1,248,22,181,3,23,201,1,19,248, -22,154,7,23,195,2,250,2,66,23,196,4,23,197,1,36,2,27,248,22,181, -3,23,197,1,28,249,22,128,4,23,195,2,23,196,4,248,22,90,195,28,249, -22,134,9,7,47,249,22,155,7,23,199,2,23,197,2,249,22,80,250,22,173, -7,23,200,2,36,23,198,2,27,249,22,173,7,23,200,1,248,22,181,3,23, -199,1,19,248,22,154,7,23,195,2,250,2,70,23,196,4,23,197,1,36,2, -27,248,22,181,3,23,195,1,28,249,22,128,4,23,195,2,23,197,4,248,22, -90,196,28,249,22,134,9,7,47,249,22,155,7,23,200,2,23,197,2,249,22, -80,250,22,173,7,23,201,2,36,23,198,2,248,2,62,249,22,173,7,23,201, -1,248,22,181,3,23,199,1,250,2,65,23,198,4,198,248,22,181,3,196,19, -248,22,154,7,23,195,2,28,249,22,128,4,36,23,195,4,248,22,90,194,28, -249,22,134,9,7,47,249,22,155,7,23,198,2,36,249,22,80,250,22,173,7, -23,199,2,36,36,27,249,22,173,7,23,199,1,37,19,248,22,154,7,23,195, -2,250,2,63,23,196,4,23,197,1,36,2,28,249,22,128,4,37,23,195,4, -248,22,90,194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,37,249,22, -80,250,22,173,7,23,199,2,36,37,248,2,62,249,22,173,7,23,199,1,38, -250,2,65,23,196,4,196,38,2,28,249,22,128,4,23,197,2,23,195,4,248, -22,90,194,28,249,22,134,9,7,47,249,22,155,7,23,198,2,23,199,2,249, -22,80,250,22,173,7,23,199,2,36,23,200,2,248,2,62,249,22,173,7,23, -199,1,248,22,181,3,23,201,1,250,2,61,23,196,4,196,248,22,181,3,198, -28,249,22,128,4,23,197,2,23,195,4,248,22,90,194,28,249,22,134,9,7, -47,249,22,155,7,23,198,2,23,199,2,249,22,80,250,22,173,7,23,199,2, -36,23,200,2,27,249,22,173,7,23,199,1,248,22,181,3,23,201,1,19,248, -22,154,7,23,195,2,250,2,61,23,196,4,23,197,1,36,2,27,248,22,181, -3,23,197,1,28,249,22,128,4,23,195,2,23,196,4,248,22,90,195,28,249, -22,134,9,7,47,249,22,155,7,23,199,2,23,197,2,249,22,80,250,22,173, -7,23,200,2,36,23,198,2,248,2,62,249,22,173,7,23,200,1,248,22,181, -3,23,199,1,250,2,60,23,197,4,197,248,22,181,3,196,32,76,88,148,36, -37,55,11,2,33,222,33,77,28,248,22,88,248,22,82,23,195,2,249,22,7, -9,248,22,144,18,23,196,1,90,144,38,11,89,146,38,36,11,27,248,22,145, -18,23,197,2,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248,22,144, -18,195,90,144,38,11,89,146,38,36,11,27,248,22,145,18,196,28,248,22,88, -248,22,82,23,195,2,249,22,7,9,248,22,144,18,195,90,144,38,11,89,146, -38,36,11,248,2,76,248,22,145,18,196,249,22,7,249,22,80,248,22,144,18, -199,196,195,249,22,7,249,22,80,248,22,144,18,199,196,195,249,22,7,249,22, -80,248,22,144,18,23,200,1,23,197,1,23,196,1,27,19,248,22,154,7,23, -196,2,250,2,60,23,196,4,23,198,1,36,2,28,23,195,1,192,28,248,22, -88,248,22,82,23,195,2,249,22,7,9,248,22,144,18,23,196,1,27,248,22, -145,18,23,195,2,90,144,38,11,89,146,38,36,11,28,248,22,88,248,22,82, -23,197,2,249,22,7,9,248,22,144,18,23,198,1,27,248,22,145,18,23,197, -2,90,144,38,11,89,146,38,36,11,28,248,22,88,248,22,82,23,197,2,249, -22,7,9,248,22,144,18,197,90,144,38,11,89,146,38,36,11,248,2,76,248, -22,145,18,198,249,22,7,249,22,80,248,22,144,18,201,196,195,249,22,7,249, -22,80,248,22,144,18,23,203,1,196,195,249,22,7,249,22,80,248,22,144,18, -23,201,1,23,197,1,23,196,1,248,22,136,12,252,22,159,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,36, -58,37,80,143,36,56,89,146,37,37,10,249,22,129,5,21,94,2,34,6,19, -19,112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114,107,116,1, -27,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,167,9,23,197,2, -80,143,39,52,86,94,23,195,1,80,143,37,53,27,248,22,152,5,23,197,2, -27,28,248,22,78,23,195,2,248,22,144,18,23,195,1,23,194,1,28,248,22, -160,15,23,194,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1, -86,95,20,18,144,11,80,143,42,52,199,20,18,144,11,80,143,42,53,192,192, -11,11,28,23,193,2,192,86,94,23,193,1,27,247,22,176,5,28,23,193,2, -192,86,94,23,193,1,247,22,138,16,90,144,39,11,89,146,39,36,11,248,22, -181,15,23,198,2,86,95,23,195,1,23,193,1,28,249,22,152,16,0,11,35, -114,120,34,91,46,93,115,115,36,34,248,22,165,15,23,197,1,249,80,144,41, -59,39,23,199,1,2,28,196,249,80,144,38,54,39,195,10,249,22,14,23,196, -1,80,144,38,51,38,86,96,28,248,22,150,5,23,196,2,12,250,22,176,11, -2,23,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,131,14,23,197,2,10, -12,250,22,176,11,2,23,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,41,41,38,248,22,177, -16,247,22,130,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,43,41,38, -248,22,177,16,247,22,130,14,195,192,86,94,250,22,156,2,248,22,81,23,197, -2,23,200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22, -78,248,22,152,5,23,200,2,248,22,151,5,248,22,81,248,22,152,5,23,201, -1,23,198,1,27,250,22,158,2,80,144,44,41,38,248,22,177,16,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,145,18,23,200,1,23,198,1,23,196,1,12, -12,12,251,24,197,1,23,198,1,23,199,1,23,200,1,10,32,87,88,148,36, -38,47,11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104,222, -33,90,32,88,88,148,36,40,54,11,2,33,222,33,89,28,248,22,88,23,197, -2,28,248,22,88,195,192,249,22,80,194,248,22,95,197,28,249,22,169,9,248, -22,81,23,199,2,2,37,28,248,22,88,23,196,2,86,95,23,196,1,23,195, -1,250,22,172,11,2,23,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,36,28,249,22,169,9,23,201,2,2,38,23, -199,1,28,248,22,160,15,23,200,2,23,199,1,249,22,90,28,248,22,64,23, -202,2,2,4,2,39,23,201,1,23,200,1,251,2,88,196,197,248,22,82,199, -248,22,145,18,200,251,2,88,196,197,249,22,80,248,22,144,18,202,200,248,22, -145,18,200,251,2,88,196,197,9,197,27,250,22,174,7,27,28,23,199,2,28, -247,22,189,11,248,80,144,44,55,39,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,163,16,0,7,35,114, -120,34,92,110,34,23,203,1,249,22,135,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,166,13,28,23,196,2,251,22,174,12,23,198,1,247,22,29,248,22,90,23, -201,1,23,199,1,86,94,23,196,1,250,22,137,13,23,197,1,247,22,29,23, -198,1,28,249,22,157,7,194,2,38,2,29,28,249,22,157,7,194,2,37,62, -117,112,192,32,93,88,148,8,36,37,50,11,67,115,115,45,62,114,107,116,222, -33,94,19,248,22,154,7,194,28,249,22,132,4,23,195,4,39,28,249,22,157, -7,6,3,3,46,115,115,249,22,173,7,197,249,22,184,3,23,199,4,39,249, -22,174,7,250,22,173,7,198,36,249,22,184,3,23,200,4,39,2,42,193,193, -2,0,8,35,114,120,34,91,46,93,34,32,96,88,148,8,36,37,47,11,2, -33,222,33,97,28,248,22,88,23,194,2,9,250,22,91,6,4,4,10,32,32, -32,248,22,164,15,248,22,103,23,198,2,248,2,96,248,22,82,23,198,1,28, -249,22,169,9,248,22,82,23,200,2,23,197,1,28,249,22,167,9,248,22,144, -18,23,200,1,23,196,1,251,22,172,11,2,23,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,174,7,248,2,96,248,22,95,23,201,1,12,12,247,23,193,1,250,22,157, -4,11,196,195,20,13,144,80,144,45,50,38,249,22,80,249,22,80,248,22,177, -16,247,22,130,14,23,201,1,23,195,1,20,13,144,80,144,45,38,37,252,80, -144,50,39,37,249,22,33,11,80,144,52,38,37,22,190,4,23,200,2,22,128, -5,248,28,23,207,2,20,20,94,88,148,8,36,37,46,11,9,223,14,33,100, -23,207,1,86,94,23,207,1,22,7,28,248,22,64,23,206,2,23,205,1,28, -28,248,22,78,23,206,2,249,22,167,9,248,22,144,18,23,208,2,2,34,11, -23,205,1,86,94,23,205,1,28,248,22,150,5,23,202,2,27,248,22,152,5, -23,203,2,28,248,22,64,193,249,22,90,2,4,194,192,23,201,2,249,247,22, -175,5,23,200,1,27,248,22,68,248,22,164,15,23,201,1,28,23,203,2,28, -250,22,158,2,248,22,81,23,201,1,23,201,1,11,249,22,80,11,204,249,22, -80,194,204,192,86,96,28,248,22,160,5,23,196,2,12,28,248,22,155,4,23, -198,2,250,22,174,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,176,11,2,23,2,35,23,198,2,28,28,23, -196,2,248,22,150,5,23,197,2,10,12,250,22,176,11,2,23,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,176,11,2,23,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,167,9,248,22,144,18,23,198,2,2,4,11,86,97,23,198,1,23,197, -1,23,196,1,23,193,1,248,22,151,5,248,22,102,23,197,1,28,28,248,22, -78,23,196,2,28,249,22,167,9,248,22,144,18,23,198,2,2,36,28,248,22, -78,248,22,102,23,197,2,249,22,167,9,248,22,106,23,198,2,2,4,11,11, -11,86,97,23,198,1,23,197,1,23,196,1,23,193,1,248,22,151,5,249,2, -87,248,22,119,23,199,2,248,22,104,23,199,1,28,28,248,22,78,23,196,2, -28,249,22,167,9,248,22,144,18,23,198,2,2,36,28,28,249,22,169,9,248, -22,102,23,198,2,2,38,10,249,22,169,9,248,22,102,23,198,2,2,37,28, -23,196,2,27,248,22,152,5,23,198,2,28,248,22,64,193,10,28,248,22,78, -193,248,22,64,248,22,144,18,194,11,11,11,11,11,86,96,23,198,1,23,197, -1,23,193,1,27,248,22,152,5,23,198,1,248,22,151,5,249,2,87,28,248, -22,78,23,197,2,248,22,144,18,23,197,2,23,196,2,27,28,249,22,169,9, -248,22,102,23,203,2,2,37,248,22,145,18,200,248,22,104,200,28,248,22,78, -23,198,2,249,22,94,248,22,145,18,199,194,192,28,28,248,22,78,23,196,2, -249,22,167,9,248,22,144,18,23,198,2,2,40,11,86,94,248,80,144,38,8, -29,39,23,194,2,253,24,199,1,23,201,1,23,202,1,23,203,1,23,204,1, -11,80,143,43,56,28,28,248,22,78,23,196,2,28,249,22,167,9,248,22,144, -18,23,198,2,2,36,28,248,22,78,248,22,102,23,197,2,249,22,167,9,248, -22,106,23,198,2,2,40,11,11,11,86,94,248,80,144,38,8,29,39,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,43,56,86,94,23,193,1,27,88,148,8,36,37,54, -8,240,0,0,8,0,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111, -110,45,101,114,114,225,2,5,3,33,91,27,28,248,22,78,23,198,2,28,249, -22,167,9,2,36,248,22,144,18,23,200,2,27,248,22,102,23,199,2,28,28, -249,22,169,9,23,195,2,2,38,10,249,22,169,9,23,195,2,2,37,86,94, -23,193,1,28,23,199,2,27,248,22,152,5,23,201,2,28,248,22,78,193,248, -22,144,18,193,192,250,22,172,11,2,23,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,167,9,2,36, -248,22,144,18,23,201,2,27,28,28,28,249,22,169,9,248,22,102,23,202,2, -2,38,10,249,22,169,9,248,22,102,23,202,2,2,37,23,200,2,11,27,248, -22,152,5,23,202,2,27,28,249,22,169,9,248,22,102,23,204,2,2,37,248, -22,145,18,23,202,1,248,22,104,23,202,1,28,248,22,78,23,195,2,249,2, -87,248,22,144,18,23,197,2,249,22,94,248,22,145,18,23,199,1,23,197,1, -249,2,87,23,196,1,23,195,1,249,2,87,2,38,28,249,22,169,9,248,22, -102,23,204,2,2,37,248,22,145,18,23,202,1,248,22,104,23,202,1,28,248, -22,78,193,248,22,145,18,193,11,11,11,27,28,248,22,64,23,196,2,27,248, +199,1,250,2,60,23,197,4,197,248,22,181,3,196,32,76,88,148,36,37,55, +11,2,33,222,33,77,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248, +22,144,18,23,196,1,90,144,38,11,89,146,38,36,11,27,248,22,145,18,23, +197,2,28,248,22,88,248,22,82,23,195,2,249,22,7,9,248,22,144,18,195, +90,144,38,11,89,146,38,36,11,27,248,22,145,18,196,28,248,22,88,248,22, +82,23,195,2,249,22,7,9,248,22,144,18,195,90,144,38,11,89,146,38,36, +11,248,2,76,248,22,145,18,196,249,22,7,249,22,80,248,22,144,18,199,196, +195,249,22,7,249,22,80,248,22,144,18,199,196,195,249,22,7,249,22,80,248, +22,144,18,23,200,1,23,197,1,23,196,1,27,19,248,22,154,7,23,196,2, +250,2,60,23,196,4,23,198,1,36,2,28,23,195,1,192,28,248,22,88,248, +22,82,23,195,2,249,22,7,9,248,22,144,18,23,196,1,27,248,22,145,18, +23,195,2,90,144,38,11,89,146,38,36,11,28,248,22,88,248,22,82,23,197, +2,249,22,7,9,248,22,144,18,23,198,1,27,248,22,145,18,23,197,2,90, +144,38,11,89,146,38,36,11,28,248,22,88,248,22,82,23,197,2,249,22,7, +9,248,22,144,18,197,90,144,38,11,89,146,38,36,11,248,2,76,248,22,145, +18,198,249,22,7,249,22,80,248,22,144,18,201,196,195,249,22,7,249,22,80, +248,22,144,18,23,203,1,196,195,249,22,7,249,22,80,248,22,144,18,23,201, +1,23,197,1,23,196,1,248,22,136,12,252,22,159,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,36,58,37, +80,143,36,56,89,146,37,37,10,249,22,129,5,21,94,2,34,6,19,19,112, +108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114,107,116,1,27,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,167,9,23,197,2,80,143, +39,52,86,94,23,195,1,80,143,37,53,27,248,22,152,5,23,197,2,27,28, +248,22,78,23,195,2,248,22,144,18,23,195,1,23,194,1,28,248,22,160,15, +23,194,2,90,144,39,11,89,146,39,36,11,248,22,181,15,23,197,1,86,95, +20,18,144,11,80,143,42,52,199,20,18,144,11,80,143,42,53,192,192,11,11, +28,23,193,2,192,86,94,23,193,1,27,247,22,176,5,28,23,193,2,192,86, +94,23,193,1,247,22,138,16,90,144,39,11,89,146,39,36,11,248,22,181,15, +23,198,2,86,95,23,195,1,23,193,1,28,249,22,152,16,0,11,35,114,120, +34,91,46,93,115,115,36,34,248,22,165,15,23,197,1,249,80,144,41,59,39, +23,199,1,2,28,196,249,80,144,38,54,39,195,10,249,22,14,23,196,1,80, +144,38,51,38,86,96,28,248,22,150,5,23,196,2,12,250,22,176,11,2,23, +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,131,14,23,197,2,10,12,250, +22,176,11,2,23,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,41,41,38,248,22,177,16,247, +22,130,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,43,41,38,248,22, +177,16,247,22,130,14,195,192,86,94,250,22,156,2,248,22,81,23,197,2,23, +200,2,68,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22,78,248, +22,152,5,23,200,2,248,22,151,5,248,22,81,248,22,152,5,23,201,1,23, +198,1,27,250,22,158,2,80,144,44,41,38,248,22,177,16,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,145,18,23,200,1,23,198,1,23,196,1,12,12,12, +251,24,197,1,23,198,1,23,199,1,23,200,1,10,32,87,88,148,36,38,47, +11,76,102,108,97,116,116,101,110,45,115,117,98,45,112,97,116,104,222,33,90, +32,88,88,148,36,40,54,11,2,33,222,33,89,28,248,22,88,23,197,2,28, +248,22,88,195,192,249,22,80,194,248,22,95,197,28,249,22,169,9,248,22,81, +23,199,2,2,37,28,248,22,88,23,196,2,86,95,23,196,1,23,195,1,250, +22,172,11,2,23,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,36,28,249,22,169,9,23,201,2,2,38,23,199,1, +28,248,22,160,15,23,200,2,23,199,1,249,22,90,28,248,22,64,23,202,2, +2,4,2,39,23,201,1,23,200,1,251,2,88,196,197,248,22,82,199,248,22, +145,18,200,251,2,88,196,197,249,22,80,248,22,144,18,202,200,248,22,145,18, +200,251,2,88,196,197,9,197,27,250,22,174,7,27,28,23,199,2,28,247,22, +189,11,248,80,144,44,55,39,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,163,16,0,7,35,114,120,34, +92,110,34,23,203,1,249,22,135,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,166, +13,28,23,196,2,251,22,174,12,23,198,1,247,22,29,248,22,90,23,201,1, +23,199,1,86,94,23,196,1,250,22,137,13,23,197,1,247,22,29,23,198,1, +28,249,22,157,7,194,2,38,2,29,28,249,22,157,7,194,2,37,62,117,112, +192,32,93,88,148,8,36,37,50,11,67,115,115,45,62,114,107,116,222,33,94, +19,248,22,154,7,194,28,249,22,132,4,23,195,4,39,28,249,22,157,7,6, +3,3,46,115,115,249,22,173,7,197,249,22,184,3,23,199,4,39,249,22,174, +7,250,22,173,7,198,36,249,22,184,3,23,200,4,39,2,42,193,193,2,0, +8,35,114,120,34,91,46,93,34,32,96,88,148,8,36,37,47,11,2,33,222, +33,97,28,248,22,88,23,194,2,9,250,22,91,6,4,4,10,32,32,32,248, +22,164,15,248,22,103,23,198,2,248,2,96,248,22,82,23,198,1,28,249,22, +169,9,248,22,82,23,200,2,23,197,1,28,249,22,167,9,248,22,144,18,23, +200,1,23,196,1,251,22,172,11,2,23,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,174, +7,248,2,96,248,22,95,23,201,1,12,12,247,23,193,1,250,22,157,4,11, +196,195,20,13,144,80,144,45,50,38,249,22,80,249,22,80,248,22,177,16,247, +22,130,14,23,201,1,23,195,1,20,13,144,80,144,45,38,37,252,80,144,50, +39,37,249,22,33,11,80,144,52,38,37,22,190,4,23,200,2,22,128,5,248, +28,23,207,2,20,20,94,88,148,8,36,37,46,11,9,223,14,33,100,23,207, +1,86,94,23,207,1,22,7,28,248,22,64,23,206,2,23,205,1,28,28,248, +22,78,23,206,2,249,22,167,9,248,22,144,18,23,208,2,2,34,11,23,205, +1,86,94,23,205,1,28,248,22,150,5,23,202,2,27,248,22,152,5,23,203, +2,28,248,22,64,193,249,22,90,2,4,194,192,23,201,2,249,247,22,175,5, +23,200,1,27,248,22,68,248,22,164,15,23,201,1,28,23,203,2,28,250,22, +158,2,248,22,81,23,201,1,23,201,1,11,249,22,80,11,204,249,22,80,194, +204,192,86,96,28,248,22,160,5,23,196,2,12,28,248,22,155,4,23,198,2, +250,22,174,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,176,11,2,23,2,35,23,198,2,28,28,23,196,2, +248,22,150,5,23,197,2,10,12,250,22,176,11,2,23,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,176,11,2,23,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, +167,9,248,22,144,18,23,198,2,2,4,11,86,97,23,198,1,23,197,1,23, +196,1,23,193,1,248,22,151,5,248,22,102,23,197,1,28,28,248,22,78,23, +196,2,28,249,22,167,9,248,22,144,18,23,198,2,2,36,28,248,22,78,248, +22,102,23,197,2,249,22,167,9,248,22,106,23,198,2,2,4,11,11,11,86, +97,23,198,1,23,197,1,23,196,1,23,193,1,248,22,151,5,249,2,87,248, +22,119,23,199,2,248,22,104,23,199,1,28,28,248,22,78,23,196,2,28,249, +22,167,9,248,22,144,18,23,198,2,2,36,28,28,249,22,169,9,248,22,102, +23,198,2,2,38,10,249,22,169,9,248,22,102,23,198,2,2,37,28,23,196, +2,27,248,22,152,5,23,198,2,28,248,22,64,193,10,28,248,22,78,193,248, +22,64,248,22,144,18,194,11,11,11,11,11,86,96,23,198,1,23,197,1,23, +193,1,27,248,22,152,5,23,198,1,248,22,151,5,249,2,87,28,248,22,78, +23,197,2,248,22,144,18,23,197,2,23,196,2,27,28,249,22,169,9,248,22, +102,23,203,2,2,37,248,22,145,18,200,248,22,104,200,28,248,22,78,23,198, +2,249,22,94,248,22,145,18,199,194,192,28,28,248,22,78,23,196,2,249,22, +167,9,248,22,144,18,23,198,2,2,40,11,86,94,248,80,144,38,8,29,39, +23,194,2,253,24,199,1,23,201,1,23,202,1,23,203,1,23,204,1,11,80, +143,43,56,28,28,248,22,78,23,196,2,28,249,22,167,9,248,22,144,18,23, +198,2,2,36,28,248,22,78,248,22,102,23,197,2,249,22,167,9,248,22,106, +23,198,2,2,40,11,11,11,86,94,248,80,144,38,8,29,39,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,43,56,86,94,23,193,1,27,88,148,8,36,37,54,8,240, +0,0,8,0,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45, +101,114,114,225,2,5,3,33,91,27,28,248,22,78,23,198,2,28,249,22,167, +9,2,36,248,22,144,18,23,200,2,27,248,22,102,23,199,2,28,28,249,22, +169,9,23,195,2,2,38,10,249,22,169,9,23,195,2,2,37,86,94,23,193, +1,28,23,199,2,27,248,22,152,5,23,201,2,28,248,22,78,193,248,22,144, +18,193,192,250,22,172,11,2,23,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,167,9,2,36,248,22, +144,18,23,201,2,27,28,28,28,249,22,169,9,248,22,102,23,202,2,2,38, +10,249,22,169,9,248,22,102,23,202,2,2,37,23,200,2,11,27,248,22,152, +5,23,202,2,27,28,249,22,169,9,248,22,102,23,204,2,2,37,248,22,145, +18,23,202,1,248,22,104,23,202,1,28,248,22,78,23,195,2,249,2,87,248, +22,144,18,23,197,2,249,22,94,248,22,145,18,23,199,1,23,197,1,249,2, +87,23,196,1,23,195,1,249,2,87,2,38,28,249,22,169,9,248,22,102,23, +204,2,2,37,248,22,145,18,23,202,1,248,22,104,23,202,1,28,248,22,78, +193,248,22,145,18,193,11,11,11,27,28,248,22,64,23,196,2,27,248,80,144, +43,48,39,249,22,80,23,199,2,247,22,140,16,28,23,193,2,192,86,94,23, +193,1,90,144,38,11,89,146,38,36,11,249,80,144,46,54,39,248,22,71,23, +201,2,11,27,28,248,22,88,23,195,2,2,41,249,22,174,7,23,197,2,2, +42,251,80,144,49,8,24,39,23,204,1,28,248,22,88,23,199,2,23,199,1, +86,94,23,199,1,248,22,81,23,199,2,28,248,22,88,23,199,2,86,94,23, +198,1,9,248,22,145,18,23,199,1,23,197,1,28,248,22,151,7,23,196,2, +86,94,23,196,1,27,248,80,144,43,8,30,39,23,202,2,27,248,80,144,44, +48,39,249,22,80,23,200,2,23,197,2,28,23,193,2,192,86,94,23,193,1, +90,144,38,11,89,146,38,36,11,249,80,144,47,54,39,23,201,2,11,250,22, +1,22,178,15,23,199,1,249,22,94,249,22,2,32,0,88,148,8,36,37,44, +11,9,222,33,92,23,200,1,248,22,90,248,2,93,23,201,1,28,248,22,160, +15,23,196,2,86,94,23,196,1,248,80,144,42,8,31,39,248,22,188,15,28, +248,22,185,15,23,198,2,23,197,2,249,22,186,15,23,199,2,248,80,144,46, +8,30,39,23,205,2,28,249,22,167,9,248,22,81,23,198,2,2,34,27,248, 80,144,43,48,39,249,22,80,23,199,2,247,22,140,16,28,23,193,2,192,86, -94,23,193,1,90,144,38,11,89,146,38,36,11,249,80,144,46,54,39,248,22, -71,23,201,2,11,27,28,248,22,88,23,195,2,2,41,249,22,174,7,23,197, -2,2,42,251,80,144,49,8,24,39,23,204,1,28,248,22,88,23,199,2,23, -199,1,86,94,23,199,1,248,22,81,23,199,2,28,248,22,88,23,199,2,86, -94,23,198,1,9,248,22,145,18,23,199,1,23,197,1,28,248,22,151,7,23, -196,2,86,94,23,196,1,27,248,80,144,43,8,30,39,23,202,2,27,248,80, -144,44,48,39,249,22,80,23,200,2,23,197,2,28,23,193,2,192,86,94,23, -193,1,90,144,38,11,89,146,38,36,11,249,80,144,47,54,39,23,201,2,11, -250,22,1,22,178,15,23,199,1,249,22,94,249,22,2,32,0,88,148,8,36, -37,44,11,9,222,33,92,23,200,1,248,22,90,248,2,93,23,201,1,28,248, -22,160,15,23,196,2,86,94,23,196,1,248,80,144,42,8,31,39,248,22,188, -15,28,248,22,185,15,23,198,2,23,197,2,249,22,186,15,23,199,2,248,80, -144,46,8,30,39,23,205,2,28,249,22,167,9,248,22,81,23,198,2,2,34, -27,248,80,144,43,48,39,249,22,80,23,199,2,247,22,140,16,28,23,193,2, -192,86,94,23,193,1,90,144,39,11,89,146,38,36,11,249,80,144,47,54,39, -248,22,102,23,202,2,11,89,146,37,38,11,28,248,22,88,248,22,104,23,201, -2,28,248,22,88,23,194,2,249,22,156,16,2,95,23,196,2,11,10,27,28, -23,196,2,248,2,93,23,196,2,28,248,22,88,23,195,2,2,41,28,249,22, -156,16,2,95,23,197,2,248,2,93,23,196,2,249,22,174,7,23,197,2,2, -42,27,28,23,197,1,86,94,23,196,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,53,8,32,39,248,22,104,23,208,2,23,197,1,28,248,22,88,23,196, -2,86,94,23,195,1,248,22,90,23,197,1,86,94,23,196,1,23,195,1,251, -80,144,51,8,24,39,23,206,1,248,22,81,23,198,2,248,22,145,18,23,198, -1,23,198,1,28,249,22,167,9,248,22,144,18,23,198,2,2,39,248,80,144, -42,8,31,39,248,22,188,15,249,22,186,15,248,22,190,15,248,22,102,23,201, -2,248,80,144,46,8,30,39,23,205,2,12,86,94,28,28,248,22,160,15,23, -194,2,10,248,22,182,8,23,194,2,12,28,23,201,2,250,22,174,11,67,114, -101,113,117,105,114,101,249,22,135,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,176,11,2,23,2,35,23,198,2,27,28,248,22,182,8, -23,195,2,249,22,187,8,23,196,2,36,249,22,188,15,248,22,189,15,23,197, -2,11,27,28,248,22,182,8,23,196,2,249,22,187,8,23,197,2,37,248,80, -144,44,8,25,39,23,195,2,90,144,39,11,89,146,39,36,11,28,248,22,182, -8,23,199,2,250,22,7,2,43,249,22,187,8,23,203,2,38,2,43,248,22, -181,15,23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,182,8,23,200, -2,249,22,187,8,23,201,2,39,249,80,144,49,59,39,23,197,2,5,0,27, -28,248,22,182,8,23,201,2,249,22,187,8,23,202,2,40,248,22,151,5,23, -200,2,27,250,22,158,2,80,144,52,41,38,248,22,177,16,247,22,130,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,54,41,38,248,22,177,16,247,22, -130,14,195,192,27,28,23,204,2,248,22,151,5,249,22,80,248,22,152,5,23, -200,2,23,207,2,23,196,2,86,95,28,23,212,1,27,250,22,158,2,248,22, -81,23,199,2,196,11,28,23,193,1,12,27,27,28,248,22,17,80,144,55,51, -38,80,144,54,51,38,247,22,19,251,22,33,11,80,144,58,50,38,9,23,197, -1,27,248,22,177,16,247,22,130,14,86,94,249,22,3,20,20,94,88,148,8, -36,37,54,11,9,226,14,13,2,3,33,98,23,195,1,23,196,2,248,28,248, -22,17,80,144,56,51,38,32,0,88,148,36,37,42,11,9,222,33,99,80,144, -55,8,33,39,20,20,97,88,148,36,36,8,24,8,240,12,64,0,0,9,232, -19,22,15,16,13,12,8,7,5,2,33,101,23,195,1,23,198,1,23,208,1, -23,215,1,12,28,28,248,22,182,8,23,204,1,11,28,248,22,151,7,23,206, -2,10,28,248,22,64,23,206,2,10,28,248,22,78,23,206,2,249,22,167,9, -248,22,144,18,23,208,2,2,34,11,249,80,144,53,49,39,28,248,22,151,7, -23,208,2,249,22,80,23,209,1,248,80,144,56,8,30,39,23,215,1,86,94, -23,212,1,249,22,80,23,209,1,247,22,140,16,252,22,184,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, -36,56,248,80,144,37,8,28,37,249,22,33,11,80,144,39,58,37,248,22,189, -4,80,144,37,57,38,248,22,175,5,80,144,37,37,39,248,22,129,15,80,144, -37,45,39,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37,249,22,33, -11,80,144,39,58,37,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37, -249,22,33,11,80,144,39,58,37,144,36,20,114,144,36,16,1,11,16,0,20, -26,15,53,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10,38,80, -143,36,36,20,114,144,41,16,29,2,2,2,3,30,2,6,2,7,11,6,30, -2,6,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,11,4,30,2,8,72,112,97,116,104,45,115,116,114,105, -110,103,63,39,196,15,2,9,30,2,8,71,114,101,114,111,111,116,45,112,97, -116,104,41,196,16,30,2,8,75,112,97,116,104,45,97,100,100,45,115,117,102, -102,105,120,41,196,12,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2, -17,2,18,2,19,2,20,2,21,2,22,2,23,30,2,24,2,7,11,6,30, -2,8,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, -120,41,196,14,30,2,8,73,102,105,110,100,45,99,111,108,45,102,105,108,101, -44,196,4,30,2,8,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97, -116,104,39,196,11,2,25,2,26,30,2,24,74,114,101,112,97,114,97,109,101, -116,101,114,105,122,101,11,7,16,0,37,39,36,16,0,36,16,16,2,16,2, -17,2,9,2,13,2,18,2,19,2,12,2,3,2,11,2,2,2,21,2,14, -2,15,2,10,2,20,2,23,52,11,11,11,16,3,2,25,2,22,2,26,16, -3,11,11,11,16,3,2,25,2,22,2,26,39,39,37,12,11,11,16,0,16, -0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,24,20,15, -16,2,248,22,178,8,69,115,111,45,115,117,102,102,105,120,80,144,36,36,37, -20,15,16,2,88,148,36,38,8,43,8,189,3,2,3,223,0,33,56,80,144, -36,37,37,20,15,16,2,32,0,88,148,8,36,41,52,11,2,10,222,33,57, -80,144,36,44,37,20,15,16,2,20,27,143,32,0,88,148,8,36,37,42,11, -2,11,222,192,32,0,88,148,8,36,37,42,11,2,11,222,192,80,144,36,45, -37,20,15,16,2,247,22,141,2,80,144,36,41,37,20,15,16,2,8,128,8, -80,144,36,46,37,20,15,16,2,249,22,183,8,8,128,8,11,80,144,36,47, -37,20,15,16,2,88,148,8,36,37,50,8,128,32,2,14,223,0,33,58,80, -144,36,48,37,20,15,16,2,88,148,8,36,38,55,8,128,32,2,15,223,0, -33,59,80,144,36,49,37,20,15,16,2,247,22,76,80,144,36,50,37,20,15, -16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80, -144,36,51,37,20,15,16,2,11,80,143,36,52,20,15,16,2,11,80,143,36, -53,20,15,16,2,32,0,88,148,36,38,57,11,2,20,222,33,78,80,144,36, -54,37,20,15,16,2,32,0,88,148,8,36,37,49,11,2,21,222,33,79,80, -144,36,55,37,20,15,16,2,11,80,143,36,56,20,15,16,2,88,149,8,34, -37,45,8,240,0,0,80,0,1,21,112,114,101,112,45,112,108,97,110,101,116, -45,114,101,115,111,108,118,101,114,33,37,224,1,0,33,80,80,144,36,8,29, -39,20,15,16,2,88,148,36,37,50,8,240,0,0,3,0,67,103,101,116,45, -100,105,114,223,0,33,81,80,144,36,8,30,39,20,15,16,2,88,148,36,37, -49,8,240,0,0,128,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223, -0,33,82,80,144,36,8,31,39,20,15,16,2,88,148,8,36,37,45,8,240, -0,0,4,0,9,223,0,33,83,80,144,36,8,32,39,20,15,16,2,88,148, -36,37,45,8,240,0,128,0,0,9,223,0,33,84,80,144,36,8,33,39,20, -15,16,2,27,11,20,19,143,36,90,144,37,10,89,146,37,36,10,20,25,96, -2,23,88,148,8,36,38,54,8,32,9,224,2,1,33,85,88,148,36,39,49, -11,9,223,0,33,86,88,148,36,40,8,32,16,4,8,240,44,240,0,0,8, -240,156,227,0,0,39,36,9,224,2,1,33,102,207,80,144,36,57,37,20,15, -16,2,88,148,36,36,45,16,2,8,130,8,8,176,65,2,25,223,0,33,103, -80,144,36,8,26,37,20,15,16,2,20,27,143,88,148,8,36,36,45,16,2, -36,8,144,65,2,26,223,0,33,104,88,148,8,36,36,45,16,2,36,8,144, -65,2,26,223,0,33,105,80,144,36,8,27,37,96,29,94,2,4,68,35,37, -107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120, -11,2,8,2,24,9,9,9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 10048); +94,23,193,1,90,144,39,11,89,146,38,36,11,249,80,144,47,54,39,248,22, +102,23,202,2,11,89,146,37,38,11,28,248,22,88,248,22,104,23,201,2,28, +248,22,88,23,194,2,249,22,156,16,2,95,23,196,2,11,10,27,28,23,196, +2,248,2,93,23,196,2,28,248,22,88,23,195,2,2,41,28,249,22,156,16, +2,95,23,197,2,248,2,93,23,196,2,249,22,174,7,23,197,2,2,42,27, +28,23,197,1,86,94,23,196,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, +53,8,32,39,248,22,104,23,208,2,23,197,1,28,248,22,88,23,196,2,86, +94,23,195,1,248,22,90,23,197,1,86,94,23,196,1,23,195,1,251,80,144, +51,8,24,39,23,206,1,248,22,81,23,198,2,248,22,145,18,23,198,1,23, +198,1,28,249,22,167,9,248,22,144,18,23,198,2,2,39,248,80,144,42,8, +31,39,248,22,188,15,249,22,186,15,248,22,190,15,248,22,102,23,201,2,248, +80,144,46,8,30,39,23,205,2,12,86,94,28,28,248,22,160,15,23,194,2, +10,248,22,182,8,23,194,2,12,28,23,201,2,250,22,174,11,67,114,101,113, +117,105,114,101,249,22,135,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,176,11,2,23,2,35,23,198,2,27,28,248,22,182,8,23,195, +2,249,22,187,8,23,196,2,36,249,22,188,15,248,22,189,15,23,197,2,11, +27,28,248,22,182,8,23,196,2,249,22,187,8,23,197,2,37,248,80,144,44, +8,25,39,23,195,2,90,144,39,11,89,146,39,36,11,28,248,22,182,8,23, +199,2,250,22,7,2,43,249,22,187,8,23,203,2,38,2,43,248,22,181,15, +23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,182,8,23,200,2,249, +22,187,8,23,201,2,39,249,80,144,49,59,39,23,197,2,5,0,27,28,248, +22,182,8,23,201,2,249,22,187,8,23,202,2,40,248,22,151,5,23,200,2, +27,250,22,158,2,80,144,52,41,38,248,22,177,16,247,22,130,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,54,41,38,248,22,177,16,247,22,130,14, +195,192,27,28,23,204,2,248,22,151,5,249,22,80,248,22,152,5,23,200,2, +23,207,2,23,196,2,86,95,28,23,212,1,27,250,22,158,2,248,22,81,23, +199,2,196,11,28,23,193,1,12,27,27,28,248,22,17,80,144,55,51,38,80, +144,54,51,38,247,22,19,251,22,33,11,80,144,58,50,38,9,23,197,1,27, +248,22,177,16,247,22,130,14,86,94,249,22,3,20,20,94,88,148,8,36,37, +54,11,9,226,14,13,2,3,33,98,23,195,1,23,196,2,248,28,248,22,17, +80,144,56,51,38,32,0,88,148,36,37,42,11,9,222,33,99,80,144,55,8, +33,39,20,20,97,88,148,36,36,8,24,8,240,12,64,0,0,9,232,19,22, +15,16,13,12,8,7,5,2,33,101,23,195,1,23,198,1,23,208,1,23,215, +1,12,28,28,248,22,182,8,23,204,1,11,28,248,22,151,7,23,206,2,10, +28,248,22,64,23,206,2,10,28,248,22,78,23,206,2,249,22,167,9,248,22, +144,18,23,208,2,2,34,11,249,80,144,53,49,39,28,248,22,151,7,23,208, +2,249,22,80,23,209,1,248,80,144,56,8,30,39,23,215,1,86,94,23,212, +1,249,22,80,23,209,1,247,22,140,16,252,22,184,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,36,56, +248,80,144,37,8,28,37,249,22,33,11,80,144,39,58,37,248,22,189,4,80, +144,37,57,38,248,22,175,5,80,144,37,37,39,248,22,129,15,80,144,37,45, +39,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37,249,22,33,11,80, +144,39,58,37,20,18,144,11,80,143,36,56,248,80,144,37,8,28,37,249,22, +33,11,80,144,39,58,37,144,36,20,114,144,36,16,1,11,16,0,20,26,15, +53,9,2,1,2,1,29,11,11,11,11,9,9,11,11,11,10,38,80,143,36, +36,20,114,144,41,16,29,2,2,2,3,30,2,6,2,7,11,6,30,2,6, +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,11,4,30,2,8,72,112,97,116,104,45,115,116,114,105,110,103, +63,39,196,15,2,9,30,2,8,71,114,101,114,111,111,116,45,112,97,116,104, +41,196,16,30,2,8,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105, +120,41,196,12,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2, +18,2,19,2,20,2,21,2,22,2,23,30,2,24,2,7,11,6,30,2,8, +79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,41, +196,14,30,2,8,73,102,105,110,100,45,99,111,108,45,102,105,108,101,44,196, +4,30,2,8,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104, +39,196,11,2,25,2,26,30,2,24,74,114,101,112,97,114,97,109,101,116,101, +114,105,122,101,11,7,16,0,37,39,36,16,0,36,16,16,2,16,2,17,2, +9,2,13,2,18,2,19,2,12,2,3,2,11,2,2,2,21,2,14,2,15, +2,10,2,20,2,23,52,11,11,11,16,3,2,25,2,22,2,26,16,3,11, +11,11,16,3,2,25,2,22,2,26,39,39,37,12,11,11,16,0,16,0,16, +0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,24,20,15,16,2, +248,22,178,8,69,115,111,45,115,117,102,102,105,120,80,144,36,36,37,20,15, +16,2,88,148,36,38,8,43,8,189,3,2,3,223,0,33,56,80,144,36,37, +37,20,15,16,2,32,0,88,148,8,36,41,52,11,2,10,222,33,57,80,144, +36,44,37,20,15,16,2,20,27,143,32,0,88,148,8,36,37,42,11,2,11, +222,192,32,0,88,148,8,36,37,42,11,2,11,222,192,80,144,36,45,37,20, +15,16,2,247,22,141,2,80,144,36,41,37,20,15,16,2,8,128,8,80,144, +36,46,37,20,15,16,2,249,22,183,8,8,128,8,11,80,144,36,47,37,20, +15,16,2,88,148,8,36,37,50,8,128,32,2,14,223,0,33,58,80,144,36, +48,37,20,15,16,2,88,148,8,36,38,55,8,128,32,2,15,223,0,33,59, +80,144,36,49,37,20,15,16,2,247,22,76,80,144,36,50,37,20,15,16,2, +248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,144,36, +51,37,20,15,16,2,11,80,143,36,52,20,15,16,2,11,80,143,36,53,20, +15,16,2,32,0,88,148,36,38,57,11,2,20,222,33,78,80,144,36,54,37, +20,15,16,2,32,0,88,148,8,36,37,49,11,2,21,222,33,79,80,144,36, +55,37,20,15,16,2,11,80,143,36,56,20,15,16,2,88,149,8,34,37,45, +8,240,0,0,80,0,1,21,112,114,101,112,45,112,108,97,110,101,116,45,114, +101,115,111,108,118,101,114,33,37,224,1,0,33,80,80,144,36,8,29,39,20, +15,16,2,88,148,36,37,50,8,240,0,0,3,0,67,103,101,116,45,100,105, +114,223,0,33,81,80,144,36,8,30,39,20,15,16,2,88,148,36,37,49,8, +240,0,0,128,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,33, +82,80,144,36,8,31,39,20,15,16,2,88,148,8,36,37,45,8,240,0,0, +4,0,9,223,0,33,83,80,144,36,8,32,39,20,15,16,2,88,148,36,37, +45,8,240,0,128,0,0,9,223,0,33,84,80,144,36,8,33,39,20,15,16, +2,27,11,20,19,143,36,90,144,37,10,89,146,37,36,10,20,25,96,2,23, +88,148,8,36,38,54,8,32,9,224,2,1,33,85,88,148,36,39,49,11,9, +223,0,33,86,88,148,36,40,8,32,16,4,8,240,44,240,0,0,8,240,156, +227,0,0,39,36,9,224,2,1,33,102,207,80,144,36,57,37,20,15,16,2, +88,148,36,36,45,16,2,8,130,8,8,176,65,2,25,223,0,33,103,80,144, +36,8,26,37,20,15,16,2,20,27,143,88,148,8,36,36,45,16,2,36,8, +144,65,2,26,223,0,33,104,88,148,8,36,36,45,16,2,36,8,144,65,2, +26,223,0,33,105,80,144,36,8,27,37,96,29,94,2,4,68,35,37,107,101, +114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2, +8,2,24,9,9,9,36,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 10046); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,57,48,46,48,46,49,49,84,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0, -16,0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,101, -1,0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94, -2,2,67,35,37,117,116,105,108,115,11,29,94,2,2,69,35,37,110,101,116, -119,111,114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94, -2,2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2, -2,66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98, -115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240, -80,90,0,0,100,144,2,3,36,36,144,2,4,36,36,144,2,5,36,36,144, -2,6,36,36,144,2,7,36,36,144,2,8,36,36,144,2,9,36,36,144,2, -9,36,36,16,0,144,36,20,114,144,36,16,1,11,16,0,20,26,15,53,9, -2,1,2,1,29,11,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36, -80,143,36,36,20,114,144,36,16,0,16,0,37,39,36,16,0,36,16,0,36, -11,11,11,16,0,16,0,16,0,36,36,37,12,11,11,16,0,16,0,16,0, -36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,0,104,2,9,2,8, -29,94,2,2,69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35, -37,117,110,115,97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117, -109,11,2,7,2,6,2,5,2,4,2,3,29,94,2,2,67,35,37,112,108, -97,99,101,11,29,94,2,2,69,35,37,102,117,116,117,114,101,115,11,9,9, -9,36,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 423); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,48,46,48,46,51,84,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0, +29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,101,1,0, +0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2, +67,35,37,117,116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111, +114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2, +74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66, +35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11, +29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,145,90, +0,0,100,144,2,3,36,36,144,2,4,36,36,144,2,5,36,36,144,2,6, +36,36,144,2,7,36,36,144,2,8,36,36,144,2,9,36,36,144,2,9,36, +36,16,0,144,36,20,114,144,36,16,1,11,16,0,20,26,15,53,9,2,1, +2,1,29,11,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80,143, +36,36,20,114,144,36,16,0,16,0,37,39,36,16,0,36,16,0,36,11,11, +11,16,0,16,0,16,0,36,36,37,12,11,11,16,0,16,0,16,0,36,36, +11,12,11,11,16,0,16,0,16,0,36,36,16,0,104,2,9,2,8,29,94, +2,2,69,35,37,102,111,114,101,105,103,110,11,29,94,2,2,68,35,37,117, +110,115,97,102,101,11,29,94,2,2,69,35,37,102,108,102,120,110,117,109,11, +2,7,2,6,2,5,2,4,2,3,29,94,2,2,67,35,37,112,108,97,99, +101,11,29,94,2,2,69,35,37,102,117,116,117,114,101,115,11,9,9,9,36, +9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 421); } diff --git a/racket/src/racket/src/env.c b/racket/src/racket/src/env.c index 3f50094a98..a373c02d79 100644 --- a/racket/src/racket/src/env.c +++ b/racket/src/racket/src/env.c @@ -393,7 +393,8 @@ static void init_extfl(Scheme_Env *env) extfl_env->attached = 1; #if USE_COMPILED_STARTUP - if (builtin_ref_counter != (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLFXNUM_COUNT + EXPECTED_EXTFL_COUNT)) { + if (builtin_ref_counter != (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLFXNUM_COUNT + + EXPECTED_EXTFL_COUNT)) { printf("extfl count %d doesn't match expected count %d\n", builtin_ref_counter - EXPECTED_PRIM_COUNT - EXPECTED_UNSAFE_COUNT - EXPECTED_FLFXNUM_COUNT, EXPECTED_EXTFL_COUNT); @@ -418,9 +419,34 @@ static void init_futures(Scheme_Env *env) futures_env->attached = 1; #if USE_COMPILED_STARTUP - if (builtin_ref_counter != (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLFXNUM_COUNT + EXPECTED_EXTFL_COUNT + EXPECTED_FUTURES_COUNT)) { + if (builtin_ref_counter != (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLFXNUM_COUNT + + EXPECTED_EXTFL_COUNT + EXPECTED_FUTURES_COUNT)) { printf("Futures count %d doesn't match expected count %d\n", - builtin_ref_counter - EXPECTED_PRIM_COUNT - EXPECTED_UNSAFE_COUNT - EXPECTED_FLFXNUM_COUNT - EXPECTED_EXTFL_COUNT, EXPECTED_FUTURES_COUNT); + builtin_ref_counter - EXPECTED_PRIM_COUNT - EXPECTED_UNSAFE_COUNT - EXPECTED_FLFXNUM_COUNT + - EXPECTED_EXTFL_COUNT, + EXPECTED_FUTURES_COUNT); + abort(); + } +#endif +} + +static void init_foreign(Scheme_Env *env) +{ + Scheme_Env *ffi_env; + + scheme_init_foreign(env); + + ffi_env = scheme_get_foreign_env(); + scheme_populate_pt_ht(ffi_env->module->me->rt); + ffi_env->attached = 1; + +#if USE_COMPILED_STARTUP + if (builtin_ref_counter != (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLFXNUM_COUNT + + EXPECTED_EXTFL_COUNT + EXPECTED_FUTURES_COUNT + EXPECTED_FOREIGN_COUNT)) { + printf("Foreign count %d doesn't match expected count %d\n", + builtin_ref_counter - EXPECTED_PRIM_COUNT - EXPECTED_UNSAFE_COUNT - EXPECTED_FLFXNUM_COUNT + - EXPECTED_EXTFL_COUNT - EXPECTED_FUTURES_COUNT, + EXPECTED_FOREIGN_COUNT); abort(); } #endif @@ -536,8 +562,6 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr #endif scheme_init_futures_per_place(); - scheme_init_foreign(env); - REGISTER_SO(literal_string_table); REGISTER_SO(literal_number_table); literal_string_table = scheme_make_weak_equal_table(); @@ -787,6 +811,7 @@ static void make_kernel_env(void) init_flfxnum(env); init_extfl(env); init_futures(env); + init_foreign(env); scheme_init_print_global_constants(); scheme_init_variable_references_constants(); @@ -1444,7 +1469,7 @@ Scheme_Object **scheme_make_builtin_references_table(void) t[j] = scheme_false; } - for (j = 0; j < 5; j++) { + for (j = 0; j < 6; j++) { if (!j) kenv = kernel_env; else if (j == 1) @@ -1453,8 +1478,10 @@ Scheme_Object **scheme_make_builtin_references_table(void) kenv = flfxnum_env; else if (j == 3) kenv = extfl_env; - else + else if (j == 4) kenv = futures_env; + else + kenv = scheme_get_foreign_env(); ht = kenv->toplevel; @@ -1481,7 +1508,7 @@ Scheme_Hash_Table *scheme_map_constants_to_globals(void) result = scheme_make_hash_table(SCHEME_hash_ptr); - for (j = 0; j < 5; j++) { + for (j = 0; j < 6; j++) { if (!j) kenv = kernel_env; else if (j == 1) @@ -1490,8 +1517,10 @@ Scheme_Hash_Table *scheme_map_constants_to_globals(void) kenv = flfxnum_env; else if (j == 3) kenv = extfl_env; - else + else if (j == 4) kenv = futures_env; + else + kenv = scheme_get_foreign_env(); ht = kenv->toplevel; bs = ht->buckets; @@ -1515,7 +1544,7 @@ const char *scheme_look_for_primitive(void *code) intptr_t i; int j; - for (j = 0; j < 5; j++) { + for (j = 0; j < 6; j++) { if (!j) kenv = kernel_env; else if (j == 1) @@ -1524,8 +1553,10 @@ const char *scheme_look_for_primitive(void *code) kenv = flfxnum_env; else if (j == 3) kenv = extfl_env; - else + else if (j == 4) kenv = futures_env; + else + kenv = scheme_get_foreign_env(); ht = kenv->toplevel; bs = ht->buckets; diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index 537c652654..0ad6b0c11b 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -181,6 +181,7 @@ READ_ONLY static Scheme_Object *flfxnum_modname; READ_ONLY static Scheme_Object *extfl_modname; READ_ONLY static Scheme_Object *futures_modname; READ_ONLY static Scheme_Object *unsafe_modname; +READ_ONLY static Scheme_Object *foreign_modname; /* global read-only phase wraps */ READ_ONLY static Scheme_Object *scheme_sys_wraps0; @@ -429,6 +430,7 @@ void scheme_init_module(Scheme_Env *env) REGISTER_SO(flfxnum_modname); REGISTER_SO(extfl_modname); REGISTER_SO(futures_modname); + REGISTER_SO(foreign_modname); kernel_symbol = scheme_intern_symbol("#%kernel"); kernel_modname = scheme_intern_resolved_module_path(kernel_symbol); kernel_modidx = scheme_make_modidx(scheme_make_pair(quote_symbol, @@ -440,6 +442,7 @@ void scheme_init_module(Scheme_Env *env) flfxnum_modname = scheme_intern_resolved_module_path(scheme_intern_symbol("#%flfxnum")); extfl_modname = scheme_intern_resolved_module_path(scheme_intern_symbol("#%extfl")); futures_modname = scheme_intern_resolved_module_path(scheme_intern_symbol("#%futures")); + foreign_modname = scheme_intern_resolved_module_path(scheme_intern_symbol("#%foreign")); REGISTER_SO(module_begin_symbol); module_begin_symbol = scheme_intern_symbol("#%module-begin"); @@ -780,6 +783,11 @@ int scheme_is_futures_modname(Scheme_Object *modname) return SAME_OBJ(modname, futures_modname); } +int scheme_is_foreign_modname(Scheme_Object *modname) +{ + return SAME_OBJ(modname, foreign_modname); +} + Scheme_Module *get_special_module(Scheme_Object *name) { if (SAME_OBJ(name, kernel_modname)) @@ -792,6 +800,8 @@ Scheme_Module *get_special_module(Scheme_Object *name) return scheme_get_extfl_env()->module; else if (SAME_OBJ(name, futures_modname)) return scheme_get_futures_env()->module; + else if (SAME_OBJ(name, foreign_modname)) + return scheme_get_foreign_env()->module; else return NULL; } @@ -808,6 +818,8 @@ Scheme_Env *get_special_modenv(Scheme_Object *name) return scheme_get_futures_env(); else if (SAME_OBJ(name, unsafe_modname)) return scheme_get_unsafe_env(); + else if (SAME_OBJ(name, foreign_modname)) + return scheme_get_foreign_env(); else return NULL; } @@ -818,7 +830,8 @@ static int is_builtin_modname(Scheme_Object *modname) || SAME_OBJ(modname, unsafe_modname) || SAME_OBJ(modname, flfxnum_modname) || SAME_OBJ(modname, extfl_modname) - || SAME_OBJ(modname, futures_modname)); + || SAME_OBJ(modname, futures_modname) + || SAME_OBJ(modname, foreign_modname)); } Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env) @@ -2339,7 +2352,8 @@ static Scheme_Object *namespace_unprotect_module(int argc, Scheme_Object *argv[] if (!SAME_OBJ(name, kernel_modname) && !SAME_OBJ(name, flfxnum_modname) && !SAME_OBJ(name, extfl_modname) - && !SAME_OBJ(name, futures_modname)) { + && !SAME_OBJ(name, futures_modname) + && !SAME_OBJ(name, foreign_modname)) { if (SAME_OBJ(name, unsafe_modname)) menv2 = scheme_get_unsafe_env(); else @@ -4733,7 +4747,8 @@ int scheme_module_export_position(Scheme_Object *modname, Scheme_Env *env, Schem || SAME_OBJ(modname, unsafe_modname) || SAME_OBJ(modname, flfxnum_modname) || SAME_OBJ(modname, extfl_modname) - || SAME_OBJ(modname, futures_modname)) + || SAME_OBJ(modname, futures_modname) + || SAME_OBJ(modname, foreign_modname)) return -1; m = module_load(modname, env, NULL); @@ -4767,7 +4782,8 @@ Scheme_Object *scheme_module_syntax(Scheme_Object *modname, Scheme_Env *env, } else if (SAME_OBJ(modname, unsafe_modname) || SAME_OBJ(modname, flfxnum_modname) || SAME_OBJ(modname, extfl_modname) - || SAME_OBJ(modname, futures_modname)) { + || SAME_OBJ(modname, futures_modname) + || SAME_OBJ(modname, foreign_modname)) { /* no unsafe, flfxnum, extfl, or futures syntax */ return NULL; } else { @@ -7200,7 +7216,8 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, || SAME_OBJ(m->modname, unsafe_modname) || SAME_OBJ(m->modname, flfxnum_modname) || SAME_OBJ(m->modname, extfl_modname) - || SAME_OBJ(m->modname, futures_modname)) { + || SAME_OBJ(m->modname, futures_modname) + || SAME_OBJ(m->modname, foreign_modname)) { /* Too confusing. Give it a different name while compiling. */ Scheme_Object *k2; const char *kname; @@ -7212,6 +7229,8 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, kname = "#%extfl"; else if (SAME_OBJ(m->modname, futures_modname)) kname = "#%futures"; + else if (SAME_OBJ(m->modname, foreign_modname)) + kname = "#%foreign"; else kname = "#%unsafe"; k2 = scheme_intern_resolved_module_path(scheme_make_symbol(kname)); /* uninterned! */ diff --git a/racket/src/racket/src/print.c b/racket/src/racket/src/print.c index f2e7a8b3d8..e60dccbff8 100644 --- a/racket/src/racket/src/print.c +++ b/racket/src/racket/src/print.c @@ -2031,6 +2031,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, || SAME_TYPE(scheme_always_evt_type, SCHEME_TYPE(obj)) || SAME_TYPE(scheme_never_evt_type, SCHEME_TYPE(obj)) || SAME_TYPE(scheme_struct_property_type, SCHEME_TYPE(obj)) + || SAME_TYPE(scheme_ctype_type, SCHEME_TYPE(obj)) || SAME_OBJ(scheme_app_mark_impersonator_property, obj))) { /* Check whether this is a global constant */ Scheme_Object *val; diff --git a/racket/src/racket/src/read.c b/racket/src/racket/src/read.c index 37e7d72d05..db22fbc395 100644 --- a/racket/src/racket/src/read.c +++ b/racket/src/racket/src/read.c @@ -4794,8 +4794,9 @@ static Scheme_Object *read_compact(CPort *port, int use_stack) RANGE_CHECK(l, < (EXPECTED_PRIM_COUNT + EXPECTED_UNSAFE_COUNT + EXPECTED_FLFXNUM_COUNT - + EXPECTED_EXTFL_COUNT - + EXPECTED_FUTURES_COUNT)); + + EXPECTED_EXTFL_COUNT + + EXPECTED_FUTURES_COUNT + + EXPECTED_FOREIGN_COUNT)); return variable_references[l]; break; case CPT_LOCAL: diff --git a/racket/src/racket/src/schminc.h b/racket/src/racket/src/schminc.h index f98bfded4c..5489f53fce 100644 --- a/racket/src/racket/src/schminc.h +++ b/racket/src/racket/src/schminc.h @@ -19,6 +19,7 @@ #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_EXTFL_COUNT 45 #define EXPECTED_FUTURES_COUNT 15 +#define EXPECTED_FOREIGN_COUNT 78 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 3ec00895e2..bd2decf4c1 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -2737,6 +2737,7 @@ Scheme_Object *scheme_extract_unsafe(Scheme_Object *o); Scheme_Object *scheme_extract_flfxnum(Scheme_Object *o); Scheme_Object *scheme_extract_extfl(Scheme_Object *o); Scheme_Object *scheme_extract_futures(Scheme_Object *o); +Scheme_Object *scheme_extract_foreign(Scheme_Object *o); Scheme_Object *scheme_add_env_renames(Scheme_Object *stx, Scheme_Comp_Env *env, Scheme_Comp_Env *upto); @@ -3503,6 +3504,7 @@ Scheme_Env *scheme_get_unsafe_env(); Scheme_Env *scheme_get_flfxnum_env(); Scheme_Env *scheme_get_extfl_env(); Scheme_Env *scheme_get_futures_env(); +Scheme_Env *scheme_get_foreign_env(); void scheme_install_initial_module_set(Scheme_Env *env); Scheme_Bucket_Table *scheme_clone_toplevel(Scheme_Bucket_Table *ht, Scheme_Env *home); @@ -3518,6 +3520,7 @@ int scheme_is_unsafe_modname(Scheme_Object *modname); int scheme_is_flfxnum_modname(Scheme_Object *modname); int scheme_is_extfl_modname(Scheme_Object *modname); int scheme_is_futures_modname(Scheme_Object *modname); +int scheme_is_foreign_modname(Scheme_Object *modname); void scheme_clear_modidx_cache(void); void scheme_clear_shift_cache(void); diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 942338a172..096468e6da 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.0.0.2" +#define MZSCHEME_VERSION "6.0.0.3" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 2 +#define MZSCHEME_VERSION_W 3 #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/stypes.h b/racket/src/racket/src/stypes.h index dd8e3bf361..546a21c479 100644 --- a/racket/src/racket/src/stypes.h +++ b/racket/src/racket/src/stypes.h @@ -210,83 +210,84 @@ enum { scheme_phantom_bytes_type, /* 186 */ scheme_environment_variables_type, /* 187 */ scheme_filesystem_change_evt_type, /* 188 */ + scheme_ctype_type, /* 189 */ #ifdef MZTAG_REQUIRED - _scheme_last_normal_type_, /* 189 */ + _scheme_last_normal_type_, /* 190 */ - scheme_rt_weak_array, /* 190 */ + scheme_rt_weak_array, /* 191 */ - scheme_rt_comp_env, /* 191 */ - scheme_rt_constant_binding, /* 192 */ - scheme_rt_resolve_info, /* 193 */ - scheme_rt_unresolve_info, /* 194 */ - scheme_rt_optimize_info, /* 195 */ - scheme_rt_compile_info, /* 196 */ - scheme_rt_cont_mark, /* 197 */ - scheme_rt_saved_stack, /* 198 */ - scheme_rt_reply_item, /* 199 */ - scheme_rt_closure_info, /* 200 */ - scheme_rt_overflow, /* 201 */ - scheme_rt_overflow_jmp, /* 202 */ - scheme_rt_meta_cont, /* 203 */ - scheme_rt_dyn_wind_cell, /* 204 */ - scheme_rt_dyn_wind_info, /* 205 */ - scheme_rt_dyn_wind, /* 206 */ - scheme_rt_dup_check, /* 207 */ - scheme_rt_thread_memory, /* 208 */ - scheme_rt_input_file, /* 209 */ - scheme_rt_input_fd, /* 210 */ - scheme_rt_oskit_console_input, /* 211 */ - scheme_rt_tested_input_file, /* 212 */ - scheme_rt_tested_output_file, /* 213 */ - scheme_rt_indexed_string, /* 214 */ - scheme_rt_output_file, /* 215 */ - scheme_rt_load_handler_data, /* 216 */ - scheme_rt_pipe, /* 217 */ - scheme_rt_beos_process, /* 218 */ - scheme_rt_system_child, /* 219 */ - scheme_rt_tcp, /* 220 */ - scheme_rt_write_data, /* 221 */ - scheme_rt_tcp_select_info, /* 222 */ - scheme_rt_param_data, /* 223 */ - scheme_rt_will, /* 224 */ - scheme_rt_linker_name, /* 225 */ - scheme_rt_param_map, /* 226 */ - scheme_rt_finalization, /* 227 */ - scheme_rt_finalizations, /* 228 */ - scheme_rt_cpp_object, /* 229 */ - scheme_rt_cpp_array_object, /* 230 */ - scheme_rt_stack_object, /* 231 */ - scheme_rt_preallocated_object, /* 232 */ - scheme_thread_hop_type, /* 233 */ - scheme_rt_srcloc, /* 234 */ - scheme_rt_evt, /* 235 */ - scheme_rt_syncing, /* 236 */ - scheme_rt_comp_prefix, /* 237 */ - scheme_rt_user_input, /* 238 */ - scheme_rt_user_output, /* 239 */ - scheme_rt_compact_port, /* 240 */ - scheme_rt_read_special_dw, /* 241 */ - scheme_rt_regwork, /* 242 */ - scheme_rt_rx_lazy_string, /* 243 */ - scheme_rt_buf_holder, /* 244 */ - scheme_rt_parameterization, /* 245 */ - scheme_rt_print_params, /* 246 */ - scheme_rt_read_params, /* 247 */ - scheme_rt_native_code, /* 248 */ - scheme_rt_native_code_plus_case, /* 249 */ - scheme_rt_jitter_data, /* 250 */ - scheme_rt_module_exports, /* 251 */ - scheme_rt_delay_load_info, /* 252 */ - scheme_rt_marshal_info, /* 253 */ - scheme_rt_unmarshal_info, /* 254 */ - scheme_rt_runstack, /* 255 */ - scheme_rt_sfs_info, /* 256 */ - scheme_rt_validate_clearing, /* 257 */ - scheme_rt_avl_node, /* 258 */ - scheme_rt_lightweight_cont, /* 259 */ - scheme_rt_export_info, /* 260 */ - scheme_rt_cont_jmp, /* 261 */ + scheme_rt_comp_env, /* 192 */ + scheme_rt_constant_binding, /* 193 */ + scheme_rt_resolve_info, /* 194 */ + scheme_rt_unresolve_info, /* 195 */ + scheme_rt_optimize_info, /* 196 */ + scheme_rt_compile_info, /* 197 */ + scheme_rt_cont_mark, /* 198 */ + scheme_rt_saved_stack, /* 199 */ + scheme_rt_reply_item, /* 200 */ + scheme_rt_closure_info, /* 201 */ + scheme_rt_overflow, /* 202 */ + scheme_rt_overflow_jmp, /* 203 */ + scheme_rt_meta_cont, /* 204 */ + scheme_rt_dyn_wind_cell, /* 205 */ + scheme_rt_dyn_wind_info, /* 206 */ + scheme_rt_dyn_wind, /* 207 */ + scheme_rt_dup_check, /* 208 */ + scheme_rt_thread_memory, /* 209 */ + scheme_rt_input_file, /* 210 */ + scheme_rt_input_fd, /* 211 */ + scheme_rt_oskit_console_input, /* 212 */ + scheme_rt_tested_input_file, /* 213 */ + scheme_rt_tested_output_file, /* 214 */ + scheme_rt_indexed_string, /* 215 */ + scheme_rt_output_file, /* 216 */ + scheme_rt_load_handler_data, /* 217 */ + scheme_rt_pipe, /* 218 */ + scheme_rt_beos_process, /* 219 */ + scheme_rt_system_child, /* 220 */ + scheme_rt_tcp, /* 221 */ + scheme_rt_write_data, /* 222 */ + scheme_rt_tcp_select_info, /* 223 */ + scheme_rt_param_data, /* 224 */ + scheme_rt_will, /* 225 */ + scheme_rt_linker_name, /* 226 */ + scheme_rt_param_map, /* 227 */ + scheme_rt_finalization, /* 228 */ + scheme_rt_finalizations, /* 229 */ + scheme_rt_cpp_object, /* 230 */ + scheme_rt_cpp_array_object, /* 231 */ + scheme_rt_stack_object, /* 232 */ + scheme_rt_preallocated_object, /* 233 */ + scheme_thread_hop_type, /* 234 */ + scheme_rt_srcloc, /* 235 */ + scheme_rt_evt, /* 236 */ + scheme_rt_syncing, /* 237 */ + scheme_rt_comp_prefix, /* 238 */ + scheme_rt_user_input, /* 239 */ + scheme_rt_user_output, /* 240 */ + scheme_rt_compact_port, /* 241 */ + scheme_rt_read_special_dw, /* 242 */ + scheme_rt_regwork, /* 243 */ + scheme_rt_rx_lazy_string, /* 244 */ + scheme_rt_buf_holder, /* 245 */ + scheme_rt_parameterization, /* 246 */ + scheme_rt_print_params, /* 247 */ + scheme_rt_read_params, /* 248 */ + scheme_rt_native_code, /* 249 */ + scheme_rt_native_code_plus_case, /* 250 */ + scheme_rt_jitter_data, /* 251 */ + scheme_rt_module_exports, /* 252 */ + scheme_rt_delay_load_info, /* 253 */ + scheme_rt_marshal_info, /* 254 */ + scheme_rt_unmarshal_info, /* 255 */ + scheme_rt_runstack, /* 256 */ + scheme_rt_sfs_info, /* 257 */ + scheme_rt_validate_clearing, /* 258 */ + scheme_rt_avl_node, /* 259 */ + scheme_rt_lightweight_cont, /* 260 */ + scheme_rt_export_info, /* 261 */ + scheme_rt_cont_jmp, /* 262 */ #endif _scheme_last_type_