From 232a580e5308dc856353d162d741deab8a9aeb05 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 17 Sep 2010 06:53:50 -0600 Subject: [PATCH] add `prop:proxy-of'; Fix `chaperone-of' on keyword-accepting procedures --- collects/racket/private/kw.rkt | 116 +- collects/scribblings/reference/booleans.scrbl | 7 +- .../scribblings/reference/chaperones.scrbl | 23 +- collects/tests/racket/chaperone.rktl | 87 + doc/release-notes/racket/HISTORY.txt | 3 + src/racket/src/bool.c | 166 +- src/racket/src/cstartup.inc | 1521 ++++++++--------- src/racket/src/eval.c | 140 +- src/racket/src/fun.c | 30 +- src/racket/src/schminc.h | 2 +- src/racket/src/schpriv.h | 1 + src/racket/src/schvers.h | 4 +- src/racket/src/struct.c | 48 +- 13 files changed, 1235 insertions(+), 913 deletions(-) diff --git a/collects/racket/private/kw.rkt b/collects/racket/private/kw.rkt index c9822e790d..35bc9c3f50 100644 --- a/collects/racket/private/kw.rkt +++ b/collects/racket/private/kw.rkt @@ -27,10 +27,18 @@ ;; ---------------------------------------- + (define-values (prop:keyword-proxy keyword-proxy? keyword-proxy-ref) + (make-struct-type-property 'keyword-proxy)) + (define (keyword-procedure-proxy-of v) + (cond + [(keyword-proxy? v) ((keyword-proxy-ref v) v)] + [else #f])) + (define-values (struct:keyword-procedure mk-kw-proc keyword-procedure? keyword-procedure-ref keyword-procedure-set!) (make-struct-type 'keyword-procedure #f 4 0 #f - (list (cons prop:checked-procedure #t)) + (list (cons prop:checked-procedure #t) + (cons prop:proxy-of keyword-procedure-proxy-of)) (current-inspector) #f '(0 1 2 3))) @@ -123,12 +131,16 @@ ;; is used for each evaluation of a keyword lambda.) ;; The `procedure' property is a per-type method that has exactly ;; the right arity, and that sends all arguments to `missing-kw'. - (define (make-required name fail-proc method?) + (define (make-required name fail-proc method? proxy?) (let-values ([(s: mk ? -ref -set!) (make-struct-type (or name 'unknown) - (if method? - struct:keyword-method - struct:keyword-procedure) + (if proxy? + (if method? + struct:keyword-method-proxy + struct:keyword-procedure-proxy) + (if method? + struct:keyword-method + struct:keyword-procedure)) 0 0 #f (list (cons prop:arity-string generate-arity-string) @@ -141,7 +153,30 @@ (define-values (new-prop:procedure new-procedure? new-procedure-ref) (make-struct-type-property 'procedure #f (list (cons prop:procedure values)))) + + ;; Proxies + (define-values (struct:keyword-procedure-proxy make-kpp keyword-procedure-proxy? kpp-ref kpp-set!) + (make-struct-type 'procedure + struct:keyword-procedure + 1 0 #f + (list (cons prop:keyword-proxy (lambda (v) (kpp-ref v 0)))))) + (define-values (struct:keyword-method-proxy make-kmp keyword-method-proxy? kmp-ref kmp-set!) + (make-struct-type 'procedure + struct:keyword-method + 1 0 #f + (list (cons prop:keyword-proxy (lambda (v) (kmp-ref v 0)))))) + (define-values (struct:okpp make-optional-keyword-procedure-proxy okpp? okpp-ref okpp-set!) + (make-struct-type 'procedure + struct:okp + 1 0 #f + (list (cons prop:keyword-proxy (lambda (v) (okpp-ref v 0)))))) + (define-values (struct:okmp make-optional-keyword-method-proxy okmp? okmp-ref okmp-set!) + (make-struct-type 'procedure + struct:okp + 1 0 #f + (list (cons prop:keyword-proxy (lambda (v) (okmp-ref v 0)))))) + ;; ---------------------------------------- (define make-keyword-procedure @@ -487,7 +522,7 @@ [mk-id (with-syntax ([n (syntax-local-infer-name stx)] [call-fail (mk-kw-arity-stub)]) (syntax-local-lift-expression - #'(make-required 'n call-fail method?)))]) + #'(make-required 'n call-fail method? #F)))]) (syntax/loc stx (mk-id (lambda (given-kws given-argc) @@ -1063,7 +1098,8 @@ missing-kw (inc-arity arity 1)) (or (okm? proc) - (keyword-method? proc))) + (keyword-method? proc)) + #f) kw-checker new-kw-proc req-kw @@ -1099,7 +1135,7 @@ ;; Constructor must be from `make-required', but not a method. ;; Make a new variant that's a method: (let* ([name+fail (keyword-procedure-name+fail proc)] - [mk (make-required (car name+fail) (cdr name+fail) #t)]) + [mk (make-required (car name+fail) (cdr name+fail) #t #f)]) (mk (keyword-procedure-checker proc) (keyword-procedure-proc proc) @@ -1129,7 +1165,7 @@ [else ;; Constructor must be from `make-required': (let* ([name+fail (keyword-procedure-name+fail proc)] - [mk (make-required name (cdr name+fail) (keyword-method? proc))]) + [mk (make-required name (cdr name+fail) (keyword-method? proc) #f)]) (mk (keyword-procedure-checker proc) (keyword-procedure-proc proc) @@ -1140,14 +1176,14 @@ (define new:chaperone-procedure (let ([chaperone-procedure (lambda (proc wrap-proc . props) - (do-chaperone-procedure #t chaperone-procedure 'chaperone-procedure proc wrap-proc props))]) - chaperone-procedure )) + (do-chaperone-procedure #f chaperone-procedure 'chaperone-procedure proc wrap-proc props))]) + chaperone-procedure)) (define new:proxy-procedure - (let ([chaperone-procedure + (let ([proxy-procedure (lambda (proc wrap-proc . props) - (do-chaperone-procedure #f proxy-procedure 'proxy-procedure proc wrap-proc props))]) - chaperone-procedure )) + (do-chaperone-procedure #t proxy-procedure 'proxy-procedure proc wrap-proc props))]) + proxy-procedure)) (define (do-chaperone-procedure is-proxy? chaperone-procedure name proc wrap-proc props) (if (or (not (keyword-procedure? proc)) @@ -1240,23 +1276,43 @@ [new-proc (cond [(okp? proc) - (make-optional-keyword-procedure - (keyword-procedure-checker proc) - (chaperone-procedure (keyword-procedure-proc proc) - kw-chaperone) - (keyword-procedure-required proc) - (keyword-procedure-allowed proc) - (chaperone-procedure (okp-ref proc 0) - (okp-ref wrap-proc 0)))] + (if is-proxy? + ((if (okm? proc) + make-optional-keyword-method-proxy + make-optional-keyword-procedure-proxy) + (keyword-procedure-checker proc) + (chaperone-procedure (keyword-procedure-proc proc) + kw-chaperone) + (keyword-procedure-required proc) + (keyword-procedure-allowed proc) + (chaperone-procedure (okp-ref proc 0) + (okp-ref wrap-proc 0)) + proc) + (chaperone-struct + proc + keyword-procedure-proc + (lambda (self proc) + (chaperone-procedure proc kw-chaperone)) + (make-struct-field-accessor okp-ref 0) + (lambda (self proc) + (chaperone-procedure proc + (okp-ref wrap-proc 0)))))] [else - ;; Constructor must be from `make-required': - (let* ([name+fail (keyword-procedure-name+fail proc)] - [mk (make-required (car name+fail) (cdr name+fail) (keyword-method? proc))]) - (mk - (keyword-procedure-checker proc) - (chaperone-procedure (keyword-procedure-proc proc) kw-chaperone) - (keyword-procedure-required proc) - (keyword-procedure-allowed proc)))])]) + (if is-proxy? + ;; Constructor must be from `make-required': + (let* ([name+fail (keyword-procedure-name+fail proc)] + [mk (make-required (car name+fail) (cdr name+fail) (keyword-method? proc) #t)]) + (mk + (keyword-procedure-checker proc) + (chaperone-procedure (keyword-procedure-proc proc) kw-chaperone) + (keyword-procedure-required proc) + (keyword-procedure-allowed proc) + proc)) + (chaperone-struct + proc + keyword-procedure-proc + (lambda (self proc) + (chaperone-procedure proc kw-chaperone))))])]) (if (null? props) new-proc (apply chaperone-struct new-proc diff --git a/collects/scribblings/reference/booleans.scrbl b/collects/scribblings/reference/booleans.scrbl index 478cfce62a..010cd4d52d 100644 --- a/collects/scribblings/reference/booleans.scrbl +++ b/collects/scribblings/reference/booleans.scrbl @@ -44,7 +44,7 @@ strings, byte strings, numbers, pairs, mutable pairs, vectors, boxes, hash tables, and inspectable structures. In the last five cases, equality is recursively defined; if both @scheme[v1] and @scheme[v2] contain reference cycles, they are equal when the infinite unfoldings of the -values would be equal. See also @scheme[prop:equal+hash]. +values would be equal. See also @scheme[prop:equal+hash] and @racket[prop:proxy-of]. @examples[ (equal? 'yes 'yes) @@ -183,7 +183,10 @@ transparent structures, @scheme[equal-hash-code] and values. For opaque structure types, @scheme[equal?] is the same as @scheme[eq?], and @scheme[equal-hash-code] and @scheme[equal-secondary-hash-code] results are based only on -@scheme[eq-hash-code]. +@scheme[eq-hash-code]. If a structure has a @racket[prop:proxy-of] +property, then the @racket[prop:proxy-of] property takes precedence over +@racket[prop:equal+hash] if the property value's procedure returns a +non-@racket[#f] value when applied to the structure. @examples[ (define (farm=? farm1 farm2 recursive-equal?) diff --git a/collects/scribblings/reference/chaperones.scrbl b/collects/scribblings/reference/chaperones.scrbl index cebe4d4e6c..8e285aa8b7 100644 --- a/collects/scribblings/reference/chaperones.scrbl +++ b/collects/scribblings/reference/chaperones.scrbl @@ -88,7 +88,9 @@ be considered proxies of each other if they are @scheme[equal?]. Otherwise, all proxies of @scheme[v2] must be intact in @scheme[v1], in the sense that parts of @scheme[v2] must be derived from @scheme[v1] through one of the proxy constructors (e.g., -@scheme[proxy-procedure] or @racket[chaperone-procedure]).} +@scheme[proxy-procedure] or @racket[chaperone-procedure]). + +See also @racket[prop:proxy-of].} @defproc[(chaperone-of? [v1 any/c] [v2 any/c]) boolean?]{ @@ -301,6 +303,25 @@ Pairs of @scheme[prop] and @scheme[prop-val] (the number of arguments to @scheme[proxy-hash] must be odd) add proxy properties or override proxy-property values of @scheme[hash].} + +@defthing[prop:proxy-of struct-type-property?]{ + +A @tech{structure type property} (see @secref["structprops"]) that +supplies a procedure for extracting a proxied value from a structure +that represents a proxy. The property is used for @racket[proxy-of] +as well as @racket[equal?]. + +The property value must be a procedure of one argument, which is a +structure whose structure type has the property. The result can be +@scheme[#f] to indicate the structure does not represent a proxy, +otherwise the result is a value for which the original structure is a +proxy (so the original structure is a @racket[proxy-of?] and it is +@racket[equal?] to the result value). The result value must have the +same @racket[prop:proxy-of] and @racket[prop:equal+hash] property +values as the original structure, and the property values must be +inherited from the same structure type (which ensures some consistency +between @racket[proxy-of?] and @racket[equal?]).} + @; ------------------------------------------------------------ @section{Chaperone Constructors} diff --git a/collects/tests/racket/chaperone.rktl b/collects/tests/racket/chaperone.rktl index 6bbc5739fe..4dbcfa5e3d 100644 --- a/collects/tests/racket/chaperone.rktl +++ b/collects/tests/racket/chaperone.rktl @@ -1047,4 +1047,91 @@ ;; ---------------------------------------- +(let () + (define (a-proxy-of v) (a-x v)) + (define a-equal+hash (list + (lambda (v1 v2 equal?) + (equal? (a-y v1) (a-y v2))) + (lambda (v1 hash) + (hash (a-y v1))) + (lambda (v2 hash) + (hash (a-y v2))))) + (define-struct a (x y) + #:property prop:proxy-of a-proxy-of + #:property prop:equal+hash a-equal+hash) + (define-struct (a-more a) (z)) + (define-struct (a-new-proxy a) () + #:property prop:proxy-of a-proxy-of) + (define-struct (a-new-equal a) () + #:property prop:equal+hash a-equal+hash) + + (let ([a1 (make-a #f 2)]) + (test #t equal? (make-a #f 2) a1) + (test #t equal? (make-a-more #f 2 7) a1) + (test #t equal? (make-a-new-proxy #f 2) a1) + (test #f equal? (make-a-new-equal #f 2) a1) + (test #f equal? (make-a #f 3) a1) + (test #f proxy-of? (make-a #f 2) a1) + (test #t proxy-of? (make-a a1 3) a1) + (test #t proxy-of? (make-a-more a1 3 8) a1) + (test #f chaperone-of? (make-a a1 3) a1) + (test #t equal? (make-a a1 3) a1) + (test #t equal? (make-a-more a1 3 9) a1) + (err/rt-test (equal? (make-a 0 1) (make-a 0 1))) + (err/rt-test (proxy-of? (make-a-new-proxy a1 1) a1)) + (err/rt-test (proxy-of? (make-a-new-equal a1 1) a1)) + (err/rt-test (equal? (make-a-new-equal a1 1) a1)) + (void))) + +;; ---------------------------------------- + +(let () + (define f1 (λ (k) k)) + (define f2 (λ (#:key k) k)) + (define f3 (λ (#:key [k 0]) k)) + (define wrapper + (make-keyword-procedure + (λ (kwds kwd-args . args) + (apply values kwd-args args)) + (λ args (apply values args)))) + + (define g1 (chaperone-procedure f1 wrapper)) + (define g2 (chaperone-procedure f2 wrapper)) + (define g3 (chaperone-procedure f2 wrapper)) + (define h1 (proxy-procedure f1 wrapper)) + (define h2 (proxy-procedure f2 wrapper)) + (define h3 (proxy-procedure f2 wrapper)) + + (test #t chaperone-of? g1 f1) + (test #t chaperone-of? g2 f2) + (test #t chaperone-of? g3 f2) + (test #f chaperone-of? g3 g2) + + (test #t equal? g1 f1) + (test #t equal? g2 f2) + (test #t equal? g3 f2) + (test #t equal? g3 g2) + + (test #t proxy-of? h1 f1) + (test #t proxy-of? h2 f2) + (test #t proxy-of? h3 f2) + (test #f proxy-of? h3 h2) + + (test #t equal? h1 f1) + (test #t equal? h2 f2) + (test #t equal? h3 f2) + (test #t equal? h3 h2) + + (test #t equal? h1 g1) + (test #t equal? h2 g2) + (test #t equal? h3 g3) + (test #t equal? h3 g2) + + (test #f equal? h1 f3) + (test #f equal? h2 f1) + (test #f equal? h3 f1)) + + +;; ---------------------------------------- + (report-errs) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index ac0b81952d..48ff6cd152 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,6 @@ +Version 5.0.1.6 +Added prop:proxy-of + Version 5.0.1.5 Added proxies to go with chaperones, and renamed chaperone property as proxy property diff --git a/src/racket/src/bool.c b/src/racket/src/bool.c index bc7b77837d..4c3052470a 100644 --- a/src/racket/src/bool.c +++ b/src/racket/src/bool.c @@ -63,6 +63,7 @@ typedef struct Equal_Info { static int is_equal (Scheme_Object *obj1, Scheme_Object *obj2, Equal_Info *eql); static int vector_equal (Scheme_Object *vec1, Scheme_Object *vec2, Equal_Info *eql); static int struct_equal (Scheme_Object *s1, Scheme_Object *s2, Equal_Info *eql); +static Scheme_Object *apply_proxy_of(int for_chaperone, Scheme_Object *procs, Scheme_Object *obj); void scheme_init_true_false(void) { @@ -470,71 +471,92 @@ int is_equal (Scheme_Object *obj1, Scheme_Object *obj2, Equal_Info *eql) st1 = SCHEME_STRUCT_TYPE(obj1); st2 = SCHEME_STRUCT_TYPE(obj2); - if (eql->for_chaperone) { + if (eql->for_chaperone == 1) procs1 = NULL; - } else { - procs1 = scheme_struct_type_property_ref(scheme_equal_property, (Scheme_Object *)st1); - if (procs1 && (st1 != st2)) { - procs2 = scheme_struct_type_property_ref(scheme_equal_property, (Scheme_Object *)st2); - if (!procs2 - || !SAME_OBJ(SCHEME_VEC_ELS(procs1)[0], SCHEME_VEC_ELS(procs2)[0])) - procs1 = NULL; - } + else + procs1 = scheme_struct_type_property_ref(scheme_proxy_of_property, (Scheme_Object *)st1); + if (procs1) + procs1 = apply_proxy_of(eql->for_chaperone, procs1, obj1); + if (eql->for_chaperone) + procs2 = NULL; + else { + procs2 = scheme_struct_type_property_ref(scheme_proxy_of_property, (Scheme_Object *)st2); + if (procs2) + procs2 = apply_proxy_of(eql->for_chaperone, procs2, obj2); } - if (procs1) { - /* Has an equality property: */ - Scheme_Object *a[3], *recur; - Equal_Info *eql2; + if (procs1 || procs2) { + /* proxy-of property trumps other forms of checking */ + if (procs1) obj1 = procs1; + if (procs2) obj2 = procs2; + goto top; + } else { + if (eql->for_chaperone) { + procs1 = NULL; + } else { + procs1 = scheme_struct_type_property_ref(scheme_equal_property, (Scheme_Object *)st1); + if (procs1 && (st1 != st2)) { + procs2 = scheme_struct_type_property_ref(scheme_equal_property, (Scheme_Object *)st2); + if (!procs2 + || !SAME_OBJ(SCHEME_VEC_ELS(procs1)[0], SCHEME_VEC_ELS(procs2)[0])) + procs1 = NULL; + } + } + + if (procs1) { + /* Has an equality property: */ + Scheme_Object *a[3], *recur; + Equal_Info *eql2; # include "mzeqchk.inc" - if (union_check(obj1, obj2, eql)) - return 1; - - /* Create/cache closure to use for recursive equality checks: */ - if (eql->recur) { - recur = eql->recur; - eql2 = (Equal_Info *)SCHEME_PRIM_CLOSURE_ELS(recur)[0]; - } else { - eql2 = (Equal_Info *)scheme_malloc(sizeof(Equal_Info)); - a[0] = (Scheme_Object *)eql2; - recur = scheme_make_prim_closure_w_arity(equal_recur, - 1, a, - "equal?/recur", - 2, 2); - eql->recur = recur; - } - memcpy(eql2, eql, sizeof(Equal_Info)); - - a[0] = obj1; - a[1] = obj2; - a[2] = recur; - - procs1 = SCHEME_VEC_ELS(procs1)[1]; - - recur = _scheme_apply(procs1, 3, a); - - memcpy(eql, eql2, sizeof(Equal_Info)); - - return SCHEME_TRUEP(recur); - } else if (st1 != st2) { - return 0; - } else if ((eql->for_chaperone == 1) - && !(MZ_OPT_HASH_KEY(&st1->iso) & STRUCT_TYPE_ALL_IMMUTABLE)) { - return 0; - } else { - /* Same types, but doesn't have an equality property - (or checking for chaperone), so check transparency: */ - Scheme_Object *insp; - insp = scheme_get_param(scheme_current_config(), MZCONFIG_INSPECTOR); - if (scheme_inspector_sees_part(obj1, insp, -2) - && scheme_inspector_sees_part(obj2, insp, -2)) { -# include "mzeqchk.inc" if (union_check(obj1, obj2, eql)) return 1; - return struct_equal(obj1, obj2, eql); - } else - return 0; + + /* Create/cache closure to use for recursive equality checks: */ + if (eql->recur) { + recur = eql->recur; + eql2 = (Equal_Info *)SCHEME_PRIM_CLOSURE_ELS(recur)[0]; + } else { + eql2 = (Equal_Info *)scheme_malloc(sizeof(Equal_Info)); + a[0] = (Scheme_Object *)eql2; + recur = scheme_make_prim_closure_w_arity(equal_recur, + 1, a, + "equal?/recur", + 2, 2); + eql->recur = recur; + } + memcpy(eql2, eql, sizeof(Equal_Info)); + + a[0] = obj1; + a[1] = obj2; + a[2] = recur; + + procs1 = SCHEME_VEC_ELS(procs1)[1]; + + recur = _scheme_apply(procs1, 3, a); + + memcpy(eql, eql2, sizeof(Equal_Info)); + + return SCHEME_TRUEP(recur); + } else if (st1 != st2) { + return 0; + } else if ((eql->for_chaperone == 1) + && !(MZ_OPT_HASH_KEY(&st1->iso) & STRUCT_TYPE_ALL_IMMUTABLE)) { + return 0; + } else { + /* Same types, but doesn't have an equality property + (or checking for chaperone), so check transparency: */ + Scheme_Object *insp; + insp = scheme_get_param(scheme_current_config(), MZCONFIG_INSPECTOR); + if (scheme_inspector_sees_part(obj1, insp, -2) + && scheme_inspector_sees_part(obj2, insp, -2)) { +# include "mzeqchk.inc" + if (union_check(obj1, obj2, eql)) + return 1; + return struct_equal(obj1, obj2, eql); + } else + return 0; + } } } else if (SCHEME_BOXP(obj1)) { SCHEME_USE_FUEL(1); @@ -689,3 +711,31 @@ int scheme_proxy_of(Scheme_Object *obj1, Scheme_Object *obj2) return is_equal(obj1, obj2, &eql); } + +static Scheme_Object *apply_proxy_of(int for_chaperone, Scheme_Object *procs, Scheme_Object *obj) +{ + Scheme_Object *a[1], *v, *oprocs; + + a[0] = obj; + v = _scheme_apply(SCHEME_CDR(procs), 1, a); + + if (SCHEME_FALSEP(v)) + return NULL; + + oprocs = scheme_struct_type_property_ref(scheme_proxy_of_property, v); + if (!oprocs || !SAME_OBJ(SCHEME_CAR(oprocs), SCHEME_CAR(procs))) + scheme_arg_mismatch((for_chaperone ? "proxy-of?" : "equal?"), + "proxy-of property procedure returned a value with a different prop:proxy-of source: ", + v); + + procs = scheme_struct_type_property_ref(scheme_equal_property, obj); + oprocs = scheme_struct_type_property_ref(scheme_equal_property, v); + if (procs || oprocs) + if (!procs || !oprocs || !SAME_OBJ(SCHEME_VEC_ELS(oprocs)[0], + SCHEME_VEC_ELS(procs)[0])) + scheme_arg_mismatch((for_chaperone ? "proxy-of?" : "equal?"), + "proxy-of property procedure returned a value with a different prop:equal+hash source: ", + v); + + return v; +} diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 5f0641f42f..1e01c706f9 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,44 +1,44 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,53,51,0,0,0,1,0,0,10,0,13,0, -22,0,27,0,31,0,36,0,41,0,45,0,52,0,65,0,68,0,75,0,82, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,54,51,0,0,0,1,0,0,10,0,13,0, +22,0,26,0,31,0,38,0,45,0,50,0,55,0,59,0,72,0,79,0,82, 0,88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158,0, 165,0,187,0,189,0,203,0,14,1,43,1,54,1,65,1,75,1,111,1,144, 1,177,1,236,1,46,2,124,2,190,2,195,2,215,2,106,3,126,3,177,3, 243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,7,0,0,69,35,37, -109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,64,108, -101,116,42,63,108,101,116,64,119,104,101,110,64,99,111,110,100,63,97,110,100, -66,108,101,116,114,101,99,72,112,97,114,97,109,101,116,101,114,105,122,101,62, -111,114,66,100,101,102,105,110,101,66,117,110,108,101,115,115,65,113,117,111,116, +109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,63,108, +101,116,64,99,111,110,100,66,117,110,108,101,115,115,66,100,101,102,105,110,101, +64,119,104,101,110,64,108,101,116,42,63,97,110,100,72,112,97,114,97,109,101, +116,101,114,105,122,101,66,108,101,116,114,101,99,62,111,114,65,113,117,111,116, 101,29,94,2,14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,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,140,85,0,0,95, -159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,2,11,2,2, -2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,2,2, -10,2,2,2,9,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,140, +102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,141,85,0,0,95, +159,2,16,36,36,159,2,15,36,36,159,2,15,36,36,16,20,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, +5,2,2,2,11,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,141, 85,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,2, -2,3,96,38,11,8,240,140,85,0,0,16,0,96,11,11,8,240,140,85,0, +2,3,96,38,11,8,240,141,85,0,0,16,0,96,11,11,8,240,141,85,0, 0,16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101,114, -101,8,32,8,31,8,30,8,29,8,28,93,8,224,147,85,0,0,95,9,8, -224,147,85,0,0,2,2,27,248,22,150,4,195,249,22,143,4,80,158,39,36, +101,8,32,8,31,8,30,8,29,8,28,93,8,224,148,85,0,0,95,9,8, +224,148,85,0,0,2,2,27,248,22,150,4,195,249,22,143,4,80,158,39,36, 251,22,82,2,17,248,22,97,199,12,249,22,72,2,18,248,22,99,201,27,248, 22,150,4,195,249,22,143,4,80,158,39,36,251,22,82,2,17,248,22,97,199, 249,22,72,2,18,248,22,99,201,12,27,248,22,74,248,22,150,4,196,28,248, 22,80,193,20,15,159,37,36,37,28,248,22,80,248,22,74,194,248,22,73,193, 249,22,143,4,80,158,39,36,251,22,82,2,17,248,22,73,199,249,22,72,2, -8,248,22,74,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28, -16,4,11,11,2,19,3,1,8,101,110,118,49,51,50,56,51,16,4,11,11, -2,20,3,1,8,101,110,118,49,51,50,56,52,93,8,224,148,85,0,0,95, -9,8,224,148,85,0,0,2,2,27,248,22,74,248,22,150,4,196,28,248,22, +10,248,22,74,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28, +16,4,11,11,2,19,3,1,8,101,110,118,49,51,50,56,54,16,4,11,11, +2,20,3,1,8,101,110,118,49,51,50,56,55,93,8,224,149,85,0,0,95, +9,8,224,149,85,0,0,2,2,27,248,22,74,248,22,150,4,196,28,248,22, 80,193,20,15,159,37,36,37,28,248,22,80,248,22,74,194,248,22,73,193,249, 22,143,4,80,158,39,36,250,22,82,2,21,248,22,82,249,22,82,248,22,82, -2,22,248,22,73,201,251,22,82,2,17,2,22,2,22,249,22,72,2,11,248, +2,22,248,22,73,201,251,22,82,2,17,2,22,2,22,249,22,72,2,13,248, 22,74,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4,11, -11,2,19,3,1,8,101,110,118,49,51,50,56,54,16,4,11,11,2,20,3, -1,8,101,110,118,49,51,50,56,55,93,8,224,149,85,0,0,95,9,8,224, -149,85,0,0,2,2,248,22,150,4,193,27,248,22,150,4,194,249,22,72,248, +11,2,19,3,1,8,101,110,118,49,51,50,56,57,16,4,11,11,2,20,3, +1,8,101,110,118,49,51,50,57,48,93,8,224,150,85,0,0,95,9,8,224, +150,85,0,0,2,2,248,22,150,4,193,27,248,22,150,4,194,249,22,72,248, 22,82,248,22,73,196,248,22,74,195,27,248,22,74,248,22,150,4,23,197,1, 249,22,143,4,80,158,39,36,28,248,22,57,248,22,144,4,248,22,73,23,198, 2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,150,4, @@ -52,7 +52,7 @@ 37,47,9,222,33,43,248,22,150,4,248,22,73,201,248,22,74,198,27,248,22, 74,248,22,150,4,196,27,248,22,150,4,248,22,73,195,249,22,143,4,80,158, 40,36,28,248,22,80,195,250,22,83,2,21,9,248,22,74,199,250,22,82,2, -5,248,22,82,248,22,73,199,250,22,83,2,4,248,22,74,201,248,22,74,202, +4,248,22,82,248,22,73,199,250,22,83,2,9,248,22,74,201,248,22,74,202, 27,248,22,74,248,22,150,4,23,197,1,27,249,22,1,22,86,249,22,2,22, 150,4,248,22,150,4,248,22,73,199,249,22,143,4,80,158,40,36,251,22,82, 1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109, @@ -63,13 +63,13 @@ 150,4,196,28,248,22,80,193,20,15,159,37,36,37,249,22,143,4,80,158,39, 36,27,248,22,150,4,248,22,73,197,28,249,22,191,8,62,61,62,248,22,144, 4,248,22,97,196,250,22,82,2,21,248,22,82,249,22,82,21,93,2,26,248, -22,73,199,250,22,83,2,7,249,22,82,2,26,249,22,82,248,22,106,203,2, +22,73,199,250,22,83,2,5,249,22,82,2,26,249,22,82,248,22,106,203,2, 26,248,22,74,202,251,22,82,2,17,28,249,22,191,8,248,22,144,4,248,22, 73,200,64,101,108,115,101,10,248,22,73,197,250,22,83,2,21,9,248,22,74, -200,249,22,72,2,7,248,22,74,202,100,8,32,8,31,8,30,8,29,8,28, -16,4,11,11,2,19,3,1,8,101,110,118,49,51,51,48,57,16,4,11,11, -2,20,3,1,8,101,110,118,49,51,51,49,48,93,8,224,150,85,0,0,18, -16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,150,85,0,0,2, +200,249,22,72,2,5,248,22,74,202,100,8,32,8,31,8,30,8,29,8,28, +16,4,11,11,2,19,3,1,8,101,110,118,49,51,51,49,50,16,4,11,11, +2,20,3,1,8,101,110,118,49,51,51,49,51,93,8,224,151,85,0,0,18, +16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,151,85,0,0,2, 2,27,248,22,74,248,22,150,4,196,249,22,143,4,80,158,39,36,28,248,22, 57,248,22,144,4,248,22,73,197,250,22,82,2,27,248,22,82,248,22,73,199, 248,22,97,198,27,248,22,144,4,248,22,73,197,250,22,82,2,27,248,22,82, @@ -81,32 +81,32 @@ 11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2, 11,2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36,11,11, 11,11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,15,159,36,36, -36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,13,89,162,8,44, +36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,6,89,162,8,44, 37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16,5, -2,6,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, -3,16,0,11,16,5,2,8,89,162,8,44,37,53,9,223,0,33,36,36,20, -105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,11,89,162,8,44,37, +2,8,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, +3,16,0,11,16,5,2,10,89,162,8,44,37,53,9,223,0,33,36,36,20, +105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,13,89,162,8,44,37, 56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11,16, -5,2,5,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, -2,3,16,0,11,16,5,2,9,89,162,8,44,37,53,9,223,0,33,44,36, -20,105,159,36,16,1,2,3,16,0,11,16,5,2,4,89,162,8,44,37,54, -9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,10, +5,2,4,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, +2,3,16,0,11,16,5,2,12,89,162,8,44,37,53,9,223,0,33,44,36, +20,105,159,36,16,1,2,3,16,0,11,16,5,2,9,89,162,8,44,37,54, +9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,11, 89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3,16, -0,11,16,5,2,7,89,162,8,44,37,58,9,223,0,33,47,36,20,105,159, -36,16,1,2,3,16,1,33,49,11,16,5,2,12,89,162,8,44,37,54,9, +0,11,16,5,2,5,89,162,8,44,37,58,9,223,0,33,47,36,20,105,159, +36,16,1,2,3,16,1,33,49,11,16,5,2,7,89,162,8,44,37,54,9, 223,0,33,50,36,20,105,159,36,16,1,2,3,16,0,11,16,0,94,2,15, 2,16,93,2,15,9,9,36,0}; EVAL_ONE_SIZED_STR((char *)expr, 2024); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,53,72,0,0,0,1,0,0,8,0,21,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,54,72,0,0,0,1,0,0,8,0,21,0, 26,0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200, 0,231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1, 143,1,188,1,194,1,201,1,207,1,252,1,20,2,59,2,61,2,227,2,61, -4,102,4,175,5,5,6,95,6,204,6,32,7,45,7,178,7,160,8,244,8, -1,9,22,10,237,10,250,10,142,15,167,16,56,17,54,18,49,19,56,19,64, -19,72,19,197,19,211,19,216,21,81,24,103,24,119,24,71,26,174,26,188,26, -14,28,211,29,220,29,229,29,255,29,128,30,0,0,148,33,0,0,67,35,37, +4,102,4,175,5,5,6,91,6,190,6,18,7,31,7,164,7,137,8,221,8, +234,8,255,9,202,10,215,10,107,15,122,16,11,17,252,17,234,18,241,18,249, +18,1,19,126,19,140,19,125,21,226,23,248,23,8,24,212,25,59,26,73,26, +155,27,92,29,101,29,110,29,136,29,9,30,0,0,28,33,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,74,45, 99,104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45, @@ -135,398 +135,392 @@ 114,105,110,103,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,5,0,27,20,14,159,80,159,37,52,38,250,80,159,40,53,38,249,22,27, -11,80,159,42,52,38,22,168,13,10,248,22,179,5,23,196,2,28,248,22,176, +11,80,159,42,52,38,22,169,13,10,248,22,179,5,23,196,2,28,248,22,176, 6,23,194,2,12,87,94,248,22,135,9,23,194,1,27,20,14,159,80,159,38, -52,38,250,80,159,41,53,38,249,22,27,11,80,159,43,52,38,22,168,13,10, +52,38,250,80,159,41,53,38,249,22,27,11,80,159,43,52,38,22,169,13,10, 248,22,179,5,23,197,2,28,248,22,176,6,23,194,2,12,87,94,248,22,135, 9,23,194,1,27,20,14,159,80,159,39,52,38,250,80,159,42,53,38,249,22, -27,11,80,159,44,52,38,22,168,13,10,248,22,179,5,23,198,2,28,248,22, +27,11,80,159,44,52,38,22,169,13,10,248,22,179,5,23,198,2,28,248,22, 176,6,23,194,2,12,87,94,248,22,135,9,23,194,1,248,80,159,40,55,37, -197,28,248,22,80,23,195,2,9,27,248,22,73,23,196,2,27,28,248,22,152, -14,23,195,2,23,194,1,28,248,22,151,14,23,195,2,249,22,153,14,23,196, -1,250,80,158,43,50,248,22,168,14,2,21,11,10,250,80,158,41,50,248,22, -168,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,155,14,249,22, -153,14,23,198,1,247,22,169,14,27,248,22,74,23,200,1,28,248,22,80,23, -194,2,9,27,248,22,73,23,195,2,27,28,248,22,152,14,23,195,2,23,194, -1,28,248,22,151,14,23,195,2,249,22,153,14,23,196,1,250,80,158,48,50, -248,22,168,14,2,21,11,10,250,80,158,46,50,248,22,168,14,2,21,23,197, -1,10,28,23,193,2,249,22,72,248,22,155,14,249,22,153,14,23,198,1,247, -22,169,14,248,80,159,46,54,37,248,22,74,23,199,1,87,94,23,193,1,248, +197,28,248,22,80,23,195,2,9,27,248,22,73,23,196,2,27,28,248,22,153, +14,23,195,2,23,194,1,28,248,22,152,14,23,195,2,249,22,154,14,23,196, +1,250,80,158,43,50,248,22,169,14,2,21,11,10,250,80,158,41,50,248,22, +169,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,156,14,249,22, +154,14,23,198,1,247,22,170,14,27,248,22,74,23,200,1,28,248,22,80,23, +194,2,9,27,248,22,73,23,195,2,27,28,248,22,153,14,23,195,2,23,194, +1,28,248,22,152,14,23,195,2,249,22,154,14,23,196,1,250,80,158,48,50, +248,22,169,14,2,21,11,10,250,80,158,46,50,248,22,169,14,2,21,23,197, +1,10,28,23,193,2,249,22,72,248,22,156,14,249,22,154,14,23,198,1,247, +22,170,14,248,80,159,46,54,37,248,22,74,23,199,1,87,94,23,193,1,248, 80,159,44,54,37,248,22,74,23,197,1,87,94,23,193,1,27,248,22,74,23, 198,1,28,248,22,80,23,194,2,9,27,248,22,73,23,195,2,27,28,248,22, -152,14,23,195,2,23,194,1,28,248,22,151,14,23,195,2,249,22,153,14,23, -196,1,250,80,158,46,50,248,22,168,14,2,21,11,10,250,80,158,44,50,248, -22,168,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,155,14,249, -22,153,14,23,198,1,247,22,169,14,248,80,159,44,54,37,248,22,74,23,199, -1,248,80,159,42,54,37,248,22,74,196,27,248,22,128,14,23,195,2,28,23, -193,2,192,87,94,23,193,1,28,248,22,181,6,23,195,2,27,248,22,150,14, -195,28,192,192,248,22,151,14,195,11,87,94,28,28,248,22,129,14,23,195,2, -10,28,248,22,128,14,23,195,2,10,28,248,22,181,6,23,195,2,28,248,22, -150,14,23,195,2,10,248,22,151,14,23,195,2,11,12,250,22,163,9,76,110, +153,14,23,195,2,23,194,1,28,248,22,152,14,23,195,2,249,22,154,14,23, +196,1,250,80,158,46,50,248,22,169,14,2,21,11,10,250,80,158,44,50,248, +22,169,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,156,14,249, +22,154,14,23,198,1,247,22,170,14,248,80,159,44,54,37,248,22,74,23,199, +1,248,80,159,42,54,37,248,22,74,196,27,248,22,129,14,23,195,2,28,23, +193,2,192,87,94,23,193,1,28,248,22,181,6,23,195,2,27,248,22,151,14, +195,28,192,192,248,22,152,14,195,11,87,94,28,28,248,22,130,14,23,195,2, +10,28,248,22,129,14,23,195,2,10,28,248,22,181,6,23,195,2,28,248,22, +151,14,23,195,2,10,248,22,152,14,23,195,2,11,12,250,22,163,9,76,110, 111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116, 104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114, 32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2, -28,28,248,22,129,14,23,195,2,249,22,191,8,248,22,130,14,23,197,2,2, +28,28,248,22,130,14,23,195,2,249,22,191,8,248,22,131,14,23,197,2,2, 22,249,22,191,8,247,22,139,8,2,22,27,28,248,22,181,6,23,196,2,23, -195,2,248,22,129,8,248,22,133,14,23,197,2,28,249,22,183,14,0,21,35, +195,2,248,22,129,8,248,22,134,14,23,197,2,28,249,22,184,14,0,21,35, 114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23, -195,2,28,248,22,181,6,195,248,22,136,14,195,194,27,248,22,156,7,23,195, -1,249,22,137,14,248,22,132,8,250,22,191,14,0,6,35,114,120,34,47,34, -28,249,22,183,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43, -91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,191,14,0,19,35, +195,2,28,248,22,181,6,195,248,22,137,14,195,194,27,248,22,156,7,23,195, +1,249,22,138,14,248,22,132,8,250,22,128,15,0,6,35,114,120,34,47,34, +28,249,22,184,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43, +91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,128,15,0,19,35, 114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1, -6,2,2,92,49,80,159,44,37,38,2,22,28,248,22,181,6,194,248,22,136, -14,194,193,87,94,28,28,248,22,128,14,23,195,2,10,28,248,22,181,6,23, -195,2,28,248,22,150,14,23,195,2,10,248,22,151,14,23,195,2,11,12,250, -22,163,9,23,196,2,2,23,23,197,2,28,248,22,150,14,23,195,2,12,248, -22,144,12,249,22,150,11,248,22,146,7,250,22,165,7,2,24,23,200,1,23, -201,1,247,22,23,27,23,194,1,87,94,28,28,248,22,128,14,23,196,2,10, -28,248,22,181,6,23,196,2,28,248,22,150,14,23,196,2,10,248,22,151,14, -23,196,2,11,12,250,22,163,9,23,196,2,2,23,23,198,2,28,248,22,150, -14,23,196,2,12,248,22,144,12,249,22,150,11,248,22,146,7,250,22,165,7, -2,24,23,200,1,23,202,1,247,22,23,87,94,27,193,27,23,196,1,87,94, -28,28,248,22,128,14,23,194,2,10,28,248,22,181,6,23,194,2,28,248,22, -150,14,23,194,2,10,248,22,151,14,23,194,2,11,12,250,22,163,9,23,197, -2,2,23,23,196,2,28,248,22,150,14,23,194,2,12,248,22,144,12,249,22, -150,11,248,22,146,7,250,22,165,7,2,24,23,201,1,23,200,1,247,22,23, -249,22,3,89,162,8,44,37,51,9,223,2,33,38,196,87,94,28,28,248,22, -128,14,23,194,2,10,28,248,22,181,6,23,194,2,28,248,22,150,14,23,194, -2,10,248,22,151,14,23,194,2,11,12,250,22,163,9,2,7,2,23,23,196, -2,28,248,22,150,14,23,194,2,12,248,22,144,12,249,22,150,11,248,22,146, -7,250,22,165,7,2,24,2,7,23,200,1,247,22,23,32,41,89,162,8,44, -41,56,2,26,222,33,42,28,248,22,80,23,197,2,87,94,23,196,1,28,23, -197,2,196,87,94,23,197,1,248,22,144,12,249,22,183,11,251,22,165,7,2, -25,2,7,28,248,22,80,23,203,2,87,94,23,202,1,23,201,1,250,22,1, -22,146,14,23,204,1,23,205,1,23,200,1,247,22,23,27,249,22,146,14,248, -22,73,23,200,2,23,197,2,28,248,22,141,14,23,194,2,27,250,22,1,22, -146,14,23,197,1,199,28,248,22,141,14,193,192,252,2,41,199,200,201,248,22, -74,203,203,252,2,41,198,199,200,248,22,74,202,202,87,94,87,94,87,94,28, -28,248,22,128,14,23,194,2,10,28,248,22,181,6,23,194,2,28,248,22,150, -14,23,194,2,10,248,22,151,14,23,194,2,11,12,250,22,163,9,2,7,2, -23,23,196,2,28,248,22,150,14,23,194,2,12,248,22,144,12,249,22,150,11, -248,22,146,7,250,22,165,7,2,24,2,7,23,200,2,247,22,23,249,22,3, -32,0,89,162,8,44,37,49,9,222,33,40,23,196,2,27,247,22,170,14,27, -23,194,2,28,248,22,80,23,194,2,87,94,23,193,1,248,22,144,12,249,22, -183,11,251,22,165,7,2,25,2,7,28,248,22,80,23,204,2,87,94,23,203, -1,23,202,1,250,22,1,22,146,14,23,205,1,23,206,1,23,201,1,247,22, -23,27,249,22,146,14,248,22,73,23,197,2,23,198,2,28,248,22,141,14,23, -194,2,27,250,22,1,22,146,14,23,197,1,200,28,248,22,141,14,193,192,252, -2,41,200,201,202,248,22,74,200,11,252,2,41,199,200,201,248,22,74,199,11, -87,94,28,28,248,22,128,14,23,194,2,10,28,248,22,181,6,23,194,2,28, -248,22,150,14,23,194,2,10,248,22,151,14,23,194,2,11,12,250,22,163,9, -2,9,2,23,23,196,2,28,248,22,150,14,23,194,2,12,248,22,144,12,249, -22,150,11,248,22,146,7,250,22,165,7,2,24,2,9,23,200,1,247,22,23, -32,45,89,162,8,44,42,59,2,26,222,33,46,28,248,22,80,23,198,2,87, -95,23,197,1,23,194,1,28,23,198,2,197,87,94,23,198,1,248,22,144,12, -249,22,183,11,251,22,165,7,2,25,2,9,28,248,22,80,23,204,2,87,94, -23,203,1,23,202,1,250,22,1,22,146,14,23,205,1,23,206,1,23,200,1, -247,22,23,27,249,22,146,14,248,22,73,23,201,2,23,198,2,28,248,22,141, -14,23,194,2,27,250,22,1,22,146,14,23,197,1,23,201,2,28,248,22,141, -14,23,194,2,28,23,196,2,28,28,248,22,140,14,249,22,146,14,195,198,10, -27,28,248,22,128,14,197,248,22,132,14,197,196,27,248,22,184,6,23,195,2, +6,2,2,92,49,80,159,44,37,38,2,22,28,248,22,181,6,194,248,22,137, +14,194,193,87,94,28,28,248,22,129,14,23,195,2,10,28,248,22,181,6,23, +195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23,195,2,11,12,250, +22,163,9,23,196,2,2,23,23,197,2,28,248,22,151,14,23,195,2,12,248, +22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,23,200,1,23, +201,1,247,22,23,87,94,28,28,248,22,129,14,23,195,2,10,28,248,22,181, +6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23,195,2,11, +12,250,22,163,9,23,196,2,2,23,23,197,2,28,248,22,151,14,23,195,2, +12,248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,23,200, +1,23,201,1,247,22,23,87,94,87,94,28,28,248,22,129,14,23,195,2,10, +28,248,22,181,6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14, +23,195,2,11,12,250,22,163,9,195,2,23,23,197,2,28,248,22,151,14,23, +195,2,12,248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24, +199,23,201,1,247,22,23,249,22,3,89,162,8,44,37,50,9,223,2,33,38, +196,87,94,28,28,248,22,129,14,23,194,2,10,28,248,22,181,6,23,194,2, +28,248,22,151,14,23,194,2,10,248,22,152,14,23,194,2,11,12,250,22,163, +9,2,7,2,23,23,196,2,28,248,22,151,14,23,194,2,12,248,22,145,12, +249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,7,23,200,1,247,22, +23,32,41,89,162,8,44,41,56,2,26,222,33,42,28,248,22,80,23,197,2, +87,94,23,196,1,28,23,197,2,196,87,94,23,197,1,248,22,145,12,249,22, +184,11,251,22,165,7,2,25,2,7,28,248,22,80,23,203,2,87,94,23,202, +1,23,201,1,250,22,1,22,147,14,23,204,1,23,205,1,23,200,1,247,22, +23,27,249,22,147,14,248,22,73,23,200,2,23,197,2,28,248,22,142,14,23, +194,2,27,250,22,1,22,147,14,23,197,1,199,28,248,22,142,14,193,192,252, +2,41,199,200,201,248,22,74,203,203,252,2,41,198,199,200,248,22,74,202,202, +87,94,87,94,87,94,28,28,248,22,129,14,23,194,2,10,28,248,22,181,6, +23,194,2,28,248,22,151,14,23,194,2,10,248,22,152,14,23,194,2,11,12, +250,22,163,9,2,7,2,23,23,196,2,28,248,22,151,14,23,194,2,12,248, +22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,7,23,200, +2,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9,222,33,40,23,196, +2,27,247,22,171,14,28,248,22,80,23,194,2,248,22,145,12,249,22,184,11, +251,22,165,7,2,25,2,7,28,248,22,80,23,203,2,87,94,23,202,1,23, +201,1,250,22,1,22,147,14,23,204,1,23,205,1,23,200,1,247,22,23,27, +249,22,147,14,248,22,73,23,197,2,23,197,2,28,248,22,142,14,23,194,2, +27,250,22,1,22,147,14,23,197,1,199,28,248,22,142,14,193,192,252,2,41, +199,200,201,248,22,74,200,11,252,2,41,198,199,200,248,22,74,199,11,87,94, +28,28,248,22,129,14,23,194,2,10,28,248,22,181,6,23,194,2,28,248,22, +151,14,23,194,2,10,248,22,152,14,23,194,2,11,12,250,22,163,9,2,9, +2,23,23,196,2,28,248,22,151,14,23,194,2,12,248,22,145,12,249,22,151, +11,248,22,146,7,250,22,165,7,2,24,2,9,23,200,1,247,22,23,32,45, +89,162,8,44,42,59,2,26,222,33,46,28,248,22,80,23,198,2,87,95,23, +197,1,23,194,1,28,23,198,2,197,87,94,23,198,1,248,22,145,12,249,22, +184,11,251,22,165,7,2,25,2,9,28,248,22,80,23,204,2,87,94,23,203, +1,23,202,1,250,22,1,22,147,14,23,205,1,23,206,1,23,200,1,247,22, +23,27,249,22,147,14,248,22,73,23,201,2,23,198,2,28,248,22,142,14,23, +194,2,27,250,22,1,22,147,14,23,197,1,23,201,2,28,248,22,142,14,23, +194,2,28,23,196,2,28,28,248,22,141,14,249,22,147,14,195,198,10,27,28, +248,22,129,14,197,248,22,133,14,197,196,27,248,22,184,6,23,195,2,27,28, +249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139,7,23,199, +2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23,200,1,36, +249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28, +23,193,2,248,22,141,14,249,22,147,14,198,23,196,1,11,192,253,2,45,200, +201,202,203,248,22,74,205,28,205,205,198,192,253,2,45,200,201,202,203,248,22, +74,205,205,253,2,45,199,200,201,202,248,22,74,204,204,87,95,87,94,28,28, +248,22,129,14,193,10,28,248,22,181,6,193,28,248,22,151,14,193,10,248,22, +152,14,193,11,12,250,22,163,9,2,9,2,23,195,28,248,22,151,14,193,12, +248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,9,199, +247,22,23,87,94,87,94,28,28,248,22,129,14,23,195,2,10,28,248,22,181, +6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23,195,2,11, +12,250,22,163,9,2,9,2,23,23,197,2,28,248,22,151,14,23,195,2,12, +248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,9,23, +201,2,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9,222,33,44,23, +197,2,249,22,147,14,27,247,22,171,14,253,2,45,23,199,2,201,23,203,1, +23,204,1,23,199,1,11,194,32,48,89,162,44,44,8,29,2,26,222,33,49, +28,248,22,80,23,200,2,87,95,23,199,1,23,198,1,28,23,200,2,199,87, +94,23,200,1,248,23,196,1,251,22,165,7,2,25,23,199,1,28,248,22,80, +23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,147,14,23,204,1,23, +205,1,23,198,1,27,249,22,147,14,248,22,73,23,203,2,23,199,2,28,248, +22,142,14,23,194,2,27,250,22,1,22,147,14,23,197,1,23,202,2,28,248, +22,142,14,23,194,2,28,23,200,2,28,28,248,22,141,14,249,22,147,14,23, +196,2,23,203,2,10,27,28,248,22,129,14,23,202,2,248,22,133,14,23,202, +2,23,201,2,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2, +40,28,249,22,187,6,2,27,249,22,139,7,23,199,2,249,22,171,3,23,200, +2,40,249,22,140,7,250,22,139,7,23,200,1,36,249,22,171,3,23,201,1, +40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,141,14, +249,22,147,14,23,199,2,23,196,1,11,192,27,248,22,74,23,203,1,27,28, +23,204,2,87,94,23,195,1,23,204,1,87,94,23,204,1,23,195,1,28,248, +22,80,23,195,2,87,95,23,202,1,23,194,1,28,23,193,2,192,87,94,23, +193,1,248,23,200,1,251,22,165,7,2,25,23,203,1,28,248,22,80,23,207, +2,87,94,23,206,1,23,205,1,250,22,1,22,147,14,23,208,1,23,209,1, +23,202,1,27,249,22,147,14,248,22,73,23,198,2,23,203,2,28,248,22,142, +14,23,194,2,27,250,22,1,22,147,14,23,197,1,23,206,2,28,248,22,142, +14,23,194,2,28,23,204,2,28,28,248,22,141,14,249,22,147,14,195,206,10, +27,28,248,22,129,14,205,248,22,133,14,205,204,27,248,22,184,6,23,195,2, 27,28,249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139,7, 23,199,2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23,200, 1,36,249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11, -11,28,23,193,2,248,22,140,14,249,22,146,14,198,23,196,1,11,192,253,2, -45,200,201,202,203,248,22,74,205,28,205,205,198,192,253,2,45,200,201,202,203, -248,22,74,205,205,253,2,45,199,200,201,202,248,22,74,204,204,87,95,87,94, -28,28,248,22,128,14,193,10,28,248,22,181,6,193,28,248,22,150,14,193,10, -248,22,151,14,193,11,12,250,22,163,9,2,9,2,23,195,28,248,22,150,14, -193,12,248,22,144,12,249,22,150,11,248,22,146,7,250,22,165,7,2,24,2, -9,199,247,22,23,27,23,195,2,27,23,197,2,87,94,27,23,195,1,87,94, -28,28,248,22,128,14,23,194,2,10,28,248,22,181,6,23,194,2,28,248,22, -150,14,23,194,2,10,248,22,151,14,23,194,2,11,12,250,22,163,9,2,9, -2,23,23,196,2,28,248,22,150,14,23,194,2,12,248,22,144,12,249,22,150, -11,248,22,146,7,250,22,165,7,2,24,2,9,23,200,1,247,22,23,249,22, -3,32,0,89,162,8,44,37,49,9,222,33,44,23,195,1,249,22,146,14,27, -247,22,170,14,253,2,45,23,199,2,201,23,203,1,23,204,1,23,199,1,11, -194,32,48,89,162,44,44,8,29,2,26,222,33,49,28,248,22,80,23,200,2, -87,95,23,199,1,23,198,1,28,23,200,2,199,87,94,23,200,1,248,23,196, -1,251,22,165,7,2,25,23,199,1,28,248,22,80,23,203,2,87,94,23,202, -1,23,201,1,250,22,1,22,146,14,23,204,1,23,205,1,23,198,1,27,249, -22,146,14,248,22,73,23,203,2,23,199,2,28,248,22,141,14,23,194,2,27, -250,22,1,22,146,14,23,197,1,23,202,2,28,248,22,141,14,23,194,2,28, -23,200,2,28,28,248,22,140,14,249,22,146,14,23,196,2,23,203,2,10,27, -28,248,22,128,14,23,202,2,248,22,132,14,23,202,2,23,201,2,27,248,22, -184,6,23,195,2,27,28,249,22,183,3,23,196,2,40,28,249,22,187,6,2, -27,249,22,139,7,23,199,2,249,22,171,3,23,200,2,40,249,22,140,7,250, -22,139,7,23,200,1,36,249,22,171,3,23,201,1,40,2,28,87,95,23,195, -1,23,194,1,11,11,28,23,193,2,248,22,140,14,249,22,146,14,23,199,2, -23,196,1,11,192,27,248,22,74,23,203,1,27,28,23,204,2,87,94,23,195, -1,23,204,1,87,94,23,204,1,23,195,1,28,248,22,80,23,195,2,87,95, -23,202,1,23,194,1,28,23,193,2,192,87,94,23,193,1,248,23,200,1,251, -22,165,7,2,25,23,203,1,28,248,22,80,23,207,2,87,94,23,206,1,23, -205,1,250,22,1,22,146,14,23,208,1,23,209,1,23,202,1,27,249,22,146, -14,248,22,73,23,198,2,23,203,2,28,248,22,141,14,23,194,2,27,250,22, -1,22,146,14,23,197,1,23,206,2,28,248,22,141,14,23,194,2,28,23,204, -2,28,28,248,22,140,14,249,22,146,14,195,206,10,27,28,248,22,128,14,205, -248,22,132,14,205,204,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23, -196,2,40,28,249,22,187,6,2,27,249,22,139,7,23,199,2,249,22,171,3, -23,200,2,40,249,22,140,7,250,22,139,7,23,200,1,36,249,22,171,3,23, -201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22, -140,14,249,22,146,14,198,23,196,1,11,192,26,8,2,48,206,23,15,23,16, -23,17,23,18,23,19,248,22,74,204,28,202,202,200,192,26,8,2,48,206,23, -15,23,16,23,17,23,18,23,19,248,22,74,204,202,26,8,2,48,205,206,23, -15,23,16,23,17,23,18,248,22,74,203,201,192,27,248,22,74,23,203,1,28, -248,22,80,23,194,2,87,95,23,201,1,23,193,1,28,23,203,2,202,87,94, -23,203,1,248,23,199,1,251,22,165,7,2,25,23,202,1,28,248,22,80,23, -206,2,87,94,23,205,1,23,204,1,250,22,1,22,146,14,23,207,1,23,208, -1,23,201,1,27,249,22,146,14,248,22,73,23,197,2,23,202,2,28,248,22, -141,14,23,194,2,27,250,22,1,22,146,14,23,197,1,23,205,2,28,248,22, -141,14,23,194,2,28,23,203,2,28,28,248,22,140,14,249,22,146,14,195,205, -10,27,28,248,22,128,14,204,248,22,132,14,204,203,27,248,22,184,6,23,195, -2,27,28,249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139, -7,23,199,2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23, -200,1,36,249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1, -11,11,28,23,193,2,248,22,140,14,249,22,146,14,198,23,196,1,11,192,26, -8,2,48,205,206,23,15,23,16,23,17,23,18,248,22,74,203,28,23,20,23, -20,200,192,26,8,2,48,205,206,23,15,23,16,23,17,23,18,248,22,74,203, -23,20,26,8,2,48,204,205,206,23,15,23,16,23,17,248,22,74,202,23,19, -87,94,23,193,1,27,248,22,74,23,202,1,28,248,22,80,23,194,2,87,95, -23,200,1,23,193,1,28,23,202,2,201,87,94,23,202,1,248,23,198,1,251, -22,165,7,2,25,23,201,1,28,248,22,80,23,205,2,87,94,23,204,1,23, -203,1,250,22,1,22,146,14,23,206,1,23,207,1,23,200,1,27,249,22,146, -14,248,22,73,23,197,2,23,201,2,28,248,22,141,14,23,194,2,27,250,22, -1,22,146,14,23,197,1,23,204,2,28,248,22,141,14,23,194,2,28,23,202, -2,28,28,248,22,140,14,249,22,146,14,195,204,10,27,28,248,22,128,14,203, -248,22,132,14,203,202,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23, -196,2,40,28,249,22,187,6,2,27,249,22,139,7,23,199,2,249,22,171,3, -23,200,2,40,249,22,140,7,250,22,139,7,23,200,1,36,249,22,171,3,23, -201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22, -140,14,249,22,146,14,198,23,196,1,11,192,26,8,2,48,204,205,206,23,15, -23,16,23,17,248,22,74,203,28,23,19,23,19,200,192,26,8,2,48,204,205, -206,23,15,23,16,23,17,248,22,74,203,23,19,26,8,2,48,203,204,205,206, -23,15,23,16,248,22,74,202,23,18,27,247,22,170,14,27,23,194,2,28,248, -22,80,23,194,2,87,95,23,199,1,23,193,1,248,23,197,1,251,22,165,7, -2,25,23,200,1,28,248,22,80,23,204,2,87,94,23,203,1,23,202,1,250, -22,1,22,146,14,23,205,1,23,206,1,23,199,1,27,249,22,146,14,248,22, -73,23,197,2,23,200,2,28,248,22,141,14,23,194,2,27,250,22,1,22,146, -14,23,197,1,23,203,2,28,248,22,141,14,23,194,2,28,23,201,2,28,28, -248,22,140,14,249,22,146,14,195,203,10,27,28,248,22,128,14,202,248,22,132, -14,202,201,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2,40, +11,28,23,193,2,248,22,141,14,249,22,147,14,198,23,196,1,11,192,26,8, +2,48,206,23,15,23,16,23,17,23,18,23,19,248,22,74,204,28,202,202,200, +192,26,8,2,48,206,23,15,23,16,23,17,23,18,23,19,248,22,74,204,202, +26,8,2,48,205,206,23,15,23,16,23,17,23,18,248,22,74,203,201,192,27, +248,22,74,23,203,1,28,248,22,80,23,194,2,87,95,23,201,1,23,193,1, +28,23,203,2,202,87,94,23,203,1,248,23,199,1,251,22,165,7,2,25,23, +202,1,28,248,22,80,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22, +147,14,23,207,1,23,208,1,23,201,1,27,249,22,147,14,248,22,73,23,197, +2,23,202,2,28,248,22,142,14,23,194,2,27,250,22,1,22,147,14,23,197, +1,23,205,2,28,248,22,142,14,23,194,2,28,23,203,2,28,28,248,22,141, +14,249,22,147,14,195,205,10,27,28,248,22,129,14,204,248,22,133,14,204,203, +27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2,40,28,249,22, +187,6,2,27,249,22,139,7,23,199,2,249,22,171,3,23,200,2,40,249,22, +140,7,250,22,139,7,23,200,1,36,249,22,171,3,23,201,1,40,2,28,87, +95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,141,14,249,22,147,14, +198,23,196,1,11,192,26,8,2,48,205,206,23,15,23,16,23,17,23,18,248, +22,74,203,28,23,20,23,20,200,192,26,8,2,48,205,206,23,15,23,16,23, +17,23,18,248,22,74,203,23,20,26,8,2,48,204,205,206,23,15,23,16,23, +17,248,22,74,202,23,19,87,94,23,193,1,27,248,22,74,23,202,1,28,248, +22,80,23,194,2,87,95,23,200,1,23,193,1,28,23,202,2,201,87,94,23, +202,1,248,23,198,1,251,22,165,7,2,25,23,201,1,28,248,22,80,23,205, +2,87,94,23,204,1,23,203,1,250,22,1,22,147,14,23,206,1,23,207,1, +23,200,1,27,249,22,147,14,248,22,73,23,197,2,23,201,2,28,248,22,142, +14,23,194,2,27,250,22,1,22,147,14,23,197,1,23,204,2,28,248,22,142, +14,23,194,2,28,23,202,2,28,28,248,22,141,14,249,22,147,14,195,204,10, +27,28,248,22,129,14,203,248,22,133,14,203,202,27,248,22,184,6,23,195,2, +27,28,249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139,7, +23,199,2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23,200, +1,36,249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11, +11,28,23,193,2,248,22,141,14,249,22,147,14,198,23,196,1,11,192,26,8, +2,48,204,205,206,23,15,23,16,23,17,248,22,74,203,28,23,19,23,19,200, +192,26,8,2,48,204,205,206,23,15,23,16,23,17,248,22,74,203,23,19,26, +8,2,48,203,204,205,206,23,15,23,16,248,22,74,202,23,18,27,247,22,171, +14,28,248,22,80,23,194,2,87,94,23,198,1,248,23,196,1,251,22,165,7, +2,25,23,199,1,28,248,22,80,23,203,2,87,94,23,202,1,23,201,1,250, +22,1,22,147,14,23,204,1,23,205,1,23,198,1,27,249,22,147,14,248,22, +73,23,197,2,23,199,2,28,248,22,142,14,23,194,2,27,250,22,1,22,147, +14,23,197,1,23,202,2,28,248,22,142,14,23,194,2,28,23,200,2,28,28, +248,22,141,14,249,22,147,14,195,202,10,27,28,248,22,129,14,201,248,22,133, +14,201,200,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2,40, 28,249,22,187,6,2,27,249,22,139,7,23,199,2,249,22,171,3,23,200,2, 40,249,22,140,7,250,22,139,7,23,200,1,36,249,22,171,3,23,201,1,40, -2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,140,14,249, -22,146,14,198,23,196,1,11,192,26,8,2,48,203,204,205,206,23,15,23,16, -248,22,74,203,200,192,26,8,2,48,203,204,205,206,23,15,23,16,248,22,74, -203,11,26,8,2,48,202,203,204,205,206,23,15,248,22,74,202,11,87,95,28, -28,248,22,129,14,23,194,2,10,28,248,22,128,14,23,194,2,10,28,248,22, -181,6,23,194,2,28,248,22,150,14,23,194,2,10,248,22,151,14,23,194,2, -11,12,252,22,163,9,23,200,2,2,29,36,23,198,2,23,199,2,28,28,248, -22,181,6,23,195,2,10,248,22,170,7,23,195,2,87,94,23,194,1,12,252, -22,163,9,23,200,2,2,30,37,23,198,2,23,199,1,91,159,39,11,90,161, -39,36,11,248,22,149,14,23,197,2,87,94,23,195,1,87,94,28,192,12,250, -22,164,9,23,201,1,2,31,23,199,1,249,22,7,194,195,91,159,38,11,90, -161,38,36,11,27,23,196,2,27,23,198,2,87,95,28,28,248,22,129,14,23, -195,2,10,28,248,22,128,14,23,195,2,10,28,248,22,181,6,23,195,2,28, -248,22,150,14,23,195,2,10,248,22,151,14,23,195,2,11,12,252,22,163,9, -2,11,2,29,36,23,199,2,23,198,2,28,28,248,22,181,6,23,194,2,10, -248,22,170,7,23,194,2,87,94,23,193,1,12,252,22,163,9,2,11,2,30, -37,23,199,2,23,198,1,91,159,39,11,90,161,39,36,11,248,22,149,14,23, -198,2,87,94,23,195,1,87,94,28,192,12,250,22,164,9,2,11,2,31,23, -200,1,249,22,7,194,195,27,249,22,138,14,250,22,190,14,0,20,35,114,120, -35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36,34,248,22,134,14, -23,201,1,28,248,22,181,6,23,203,2,249,22,132,8,23,204,1,8,63,23, -202,1,28,248,22,129,14,23,199,2,248,22,130,14,23,199,1,87,94,23,198, -1,247,22,131,14,28,248,22,128,14,194,249,22,146,14,195,194,192,91,159,38, -11,90,161,38,36,11,27,23,196,2,27,23,198,2,87,95,28,28,248,22,129, -14,23,195,2,10,28,248,22,128,14,23,195,2,10,28,248,22,181,6,23,195, -2,28,248,22,150,14,23,195,2,10,248,22,151,14,23,195,2,11,12,252,22, -163,9,2,12,2,29,36,23,199,2,23,198,2,28,28,248,22,181,6,23,194, -2,10,248,22,170,7,23,194,2,87,94,23,193,1,12,252,22,163,9,2,12, -2,30,37,23,199,2,23,198,1,91,159,39,11,90,161,39,36,11,248,22,149, -14,23,198,2,87,94,23,195,1,87,94,28,192,12,250,22,164,9,2,12,2, -31,23,200,1,249,22,7,194,195,27,249,22,138,14,249,22,182,7,250,22,191, -14,0,9,35,114,120,35,34,91,46,93,34,248,22,134,14,23,203,1,6,1, -1,95,28,248,22,181,6,23,202,2,249,22,132,8,23,203,1,8,63,23,201, -1,28,248,22,129,14,23,199,2,248,22,130,14,23,199,1,87,94,23,198,1, -247,22,131,14,28,248,22,128,14,194,249,22,146,14,195,194,192,249,247,22,148, -5,194,11,249,80,159,38,48,37,9,9,249,80,159,38,48,37,195,9,27,247, -22,172,14,249,80,158,39,49,28,23,195,2,27,248,22,137,8,6,11,11,80, -76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0,6,0,0,27,28, -23,196,1,250,22,146,14,248,22,168,14,69,97,100,100,111,110,45,100,105,114, -247,22,135,8,6,8,8,99,111,108,108,101,99,116,115,11,27,248,80,159,42, -54,37,250,22,86,23,203,1,248,22,82,248,22,168,14,72,99,111,108,108,101, -99,116,115,45,100,105,114,23,204,1,28,193,249,22,72,195,194,192,32,58,89, -162,8,44,39,8,31,2,20,222,33,59,27,249,22,179,14,23,197,2,23,198, -2,28,23,193,2,87,94,23,196,1,27,248,22,97,23,195,2,27,27,248,22, -106,23,197,1,27,249,22,179,14,23,201,2,23,196,2,28,23,193,2,87,94, -23,194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22, -179,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97, -23,195,2,27,27,248,22,106,23,197,1,27,249,22,179,14,23,209,2,23,196, -2,28,23,193,2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22, -106,23,197,1,27,249,22,179,14,23,213,2,23,196,2,28,23,193,2,87,94, -23,194,1,27,248,22,97,23,195,2,27,250,2,58,23,215,2,23,216,1,248, -22,106,23,199,1,28,249,22,178,7,23,196,2,2,32,249,22,86,23,214,2, -194,249,22,72,248,22,137,14,23,197,1,194,87,95,23,211,1,23,193,1,27, -23,195,1,28,249,22,178,7,23,195,2,2,32,249,22,86,23,213,2,9,249, -22,72,248,22,137,14,23,196,1,9,28,249,22,178,7,23,196,2,2,32,249, -22,86,23,210,2,194,249,22,72,248,22,137,14,23,197,1,194,87,94,23,193, -1,27,23,195,1,28,249,22,178,7,23,195,2,2,32,249,22,86,23,209,2, -9,249,22,72,248,22,137,14,23,196,1,9,28,249,22,178,7,23,196,2,2, -32,249,22,86,23,206,2,194,249,22,72,248,22,137,14,23,197,1,194,87,94, -23,193,1,27,23,195,1,28,249,22,178,7,23,195,2,2,32,249,22,86,23, -205,2,9,249,22,72,248,22,137,14,23,196,1,9,28,249,22,178,7,23,196, -2,2,32,249,22,86,23,202,2,194,249,22,72,248,22,137,14,23,197,1,194, -87,94,23,193,1,27,23,195,1,28,249,22,178,7,23,195,2,2,32,249,22, -86,23,201,2,9,249,22,72,248,22,137,14,23,196,1,9,28,249,22,178,7, -23,196,2,2,32,249,22,86,197,194,87,94,23,196,1,249,22,72,248,22,137, -14,23,197,1,194,87,94,23,193,1,27,23,197,1,28,249,22,178,7,23,195, -2,2,32,249,22,86,196,9,87,94,23,195,1,249,22,72,248,22,137,14,23, -196,1,9,87,95,28,28,248,22,170,7,23,195,2,10,248,22,181,6,23,195, -2,12,250,22,163,9,2,15,6,21,21,98,121,116,101,32,115,116,114,105,110, -103,32,111,114,32,115,116,114,105,110,103,23,197,2,28,28,248,22,81,23,196, -2,249,22,4,22,128,14,23,197,2,11,12,250,22,163,9,2,15,6,13,13, -108,105,115,116,32,111,102,32,112,97,116,104,115,23,198,2,27,28,248,22,181, -6,23,196,2,248,22,131,8,23,196,1,23,195,1,27,249,22,179,14,23,197, -2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23,195,2,27, -27,248,22,106,23,197,1,27,249,22,179,14,23,201,2,23,196,2,28,23,193, +2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,141,14,249, +22,147,14,198,23,196,1,11,192,26,8,2,48,202,203,204,205,206,23,15,248, +22,74,203,200,192,26,8,2,48,202,203,204,205,206,23,15,248,22,74,203,11, +26,8,2,48,201,202,203,204,205,206,248,22,74,202,11,87,95,28,28,248,22, +130,14,23,194,2,10,28,248,22,129,14,23,194,2,10,28,248,22,181,6,23, +194,2,28,248,22,151,14,23,194,2,10,248,22,152,14,23,194,2,11,12,252, +22,163,9,23,200,2,2,29,36,23,198,2,23,199,2,28,28,248,22,181,6, +23,195,2,10,248,22,170,7,23,195,2,87,94,23,194,1,12,252,22,163,9, +23,200,2,2,30,37,23,198,2,23,199,1,91,159,39,11,90,161,39,36,11, +248,22,150,14,23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,164,9, +23,201,1,2,31,23,199,1,249,22,7,194,195,91,159,38,11,90,161,38,36, +11,87,95,28,28,248,22,130,14,23,196,2,10,28,248,22,129,14,23,196,2, +10,28,248,22,181,6,23,196,2,28,248,22,151,14,23,196,2,10,248,22,152, +14,23,196,2,11,12,252,22,163,9,2,11,2,29,36,23,200,2,23,201,2, +28,28,248,22,181,6,23,197,2,10,248,22,170,7,23,197,2,12,252,22,163, +9,2,11,2,30,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,11, +248,22,150,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,164,9, +2,11,2,31,23,201,2,249,22,7,194,195,27,249,22,139,14,250,22,191,14, +0,20,35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36, +34,248,22,135,14,23,201,1,28,248,22,181,6,23,203,2,249,22,132,8,23, +204,1,8,63,23,202,1,28,248,22,130,14,23,199,2,248,22,131,14,23,199, +1,87,94,23,198,1,247,22,132,14,28,248,22,129,14,194,249,22,147,14,195, +194,192,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,130,14,23,196, +2,10,28,248,22,129,14,23,196,2,10,28,248,22,181,6,23,196,2,28,248, +22,151,14,23,196,2,10,248,22,152,14,23,196,2,11,12,252,22,163,9,2, +12,2,29,36,23,200,2,23,201,2,28,28,248,22,181,6,23,197,2,10,248, +22,170,7,23,197,2,12,252,22,163,9,2,12,2,30,37,23,200,2,23,201, +2,91,159,39,11,90,161,39,36,11,248,22,150,14,23,199,2,87,94,23,195, +1,87,94,28,192,12,250,22,164,9,2,12,2,31,23,201,2,249,22,7,194, +195,27,249,22,139,14,249,22,182,7,250,22,128,15,0,9,35,114,120,35,34, +91,46,93,34,248,22,135,14,23,203,1,6,1,1,95,28,248,22,181,6,23, +202,2,249,22,132,8,23,203,1,8,63,23,201,1,28,248,22,130,14,23,199, +2,248,22,131,14,23,199,1,87,94,23,198,1,247,22,132,14,28,248,22,129, +14,194,249,22,147,14,195,194,192,249,247,22,148,5,194,11,249,80,159,38,48, +37,9,9,249,80,159,38,48,37,195,9,27,247,22,173,14,249,80,158,39,49, +28,23,195,2,27,248,22,137,8,6,11,11,80,76,84,67,79,76,76,69,67, +84,83,28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,147,14,248, +22,169,14,69,97,100,100,111,110,45,100,105,114,247,22,135,8,6,8,8,99, +111,108,108,101,99,116,115,11,27,248,80,159,42,54,37,250,22,86,23,203,1, +248,22,82,248,22,169,14,72,99,111,108,108,101,99,116,115,45,100,105,114,23, +204,1,28,193,249,22,72,195,194,192,32,58,89,162,8,44,39,8,31,2,20, +222,33,59,27,249,22,180,14,23,197,2,23,198,2,28,23,193,2,87,94,23, +196,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,180, +14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23, +195,2,27,27,248,22,106,23,197,1,27,249,22,180,14,23,205,2,23,196,2, +28,23,193,2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22,106, +23,197,1,27,249,22,180,14,23,209,2,23,196,2,28,23,193,2,87,94,23, +194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,180, +14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23, +195,2,27,250,2,58,23,215,2,23,216,1,248,22,106,23,199,1,28,249,22, +178,7,23,196,2,2,32,249,22,86,23,214,2,194,249,22,72,248,22,138,14, +23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,178,7,23,196,2,2, +32,249,22,86,23,212,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249, +22,178,7,23,196,2,2,32,249,22,86,23,210,2,194,249,22,72,248,22,138, +14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249, +22,86,23,208,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178, +7,23,196,2,2,32,249,22,86,23,206,2,194,249,22,72,248,22,138,14,23, +197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249,22,86, +23,204,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178,7,23, +196,2,2,32,249,22,86,23,202,2,194,249,22,72,248,22,138,14,23,197,1, +194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249,22,86,23,200, +2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178,7,23,196,2, +2,32,249,22,86,197,194,87,94,23,196,1,249,22,72,248,22,138,14,23,197, +1,194,87,94,23,193,1,28,249,22,178,7,23,198,2,2,32,249,22,86,195, +9,87,94,23,194,1,249,22,72,248,22,138,14,23,199,1,9,87,95,28,28, +248,22,170,7,23,195,2,10,248,22,181,6,23,195,2,12,250,22,163,9,2, +15,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116, +114,105,110,103,23,197,2,28,28,248,22,81,23,196,2,249,22,4,22,129,14, +23,197,2,11,12,250,22,163,9,2,15,6,13,13,108,105,115,116,32,111,102, +32,112,97,116,104,115,23,198,2,27,28,248,22,181,6,23,196,2,248,22,131, +8,23,196,1,23,195,1,27,249,22,180,14,23,197,2,23,196,2,28,23,193, 2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1, -27,249,22,179,14,23,205,2,23,196,2,28,23,193,2,87,94,23,194,1,27, -248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,179,14,23,209, +27,249,22,180,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27, +248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,180,14,23,205, 2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23,195,2,27, -27,248,22,106,23,197,1,27,249,22,179,14,23,213,2,23,196,2,28,23,193, -2,87,94,23,194,1,27,248,22,97,23,195,2,27,250,2,58,23,218,2,23, -216,1,248,22,106,23,199,1,28,249,22,178,7,23,196,2,2,32,249,22,86, -23,217,2,194,249,22,72,248,22,137,14,23,197,1,194,87,95,23,211,1,23, -193,1,27,23,195,1,28,249,22,178,7,23,195,2,2,32,249,22,86,23,216, -2,9,249,22,72,248,22,137,14,23,196,1,9,28,249,22,178,7,23,196,2, -2,32,249,22,86,23,213,2,194,249,22,72,248,22,137,14,23,197,1,194,87, -94,23,193,1,27,23,195,1,28,249,22,178,7,23,195,2,2,32,249,22,86, -23,212,2,9,249,22,72,248,22,137,14,23,196,1,9,28,249,22,178,7,23, -196,2,2,32,249,22,86,23,209,2,194,249,22,72,248,22,137,14,23,197,1, -194,87,94,23,193,1,27,23,195,1,28,249,22,178,7,23,195,2,2,32,249, -22,86,23,208,2,9,249,22,72,248,22,137,14,23,196,1,9,28,249,22,178, -7,23,196,2,2,32,249,22,86,23,205,2,194,249,22,72,248,22,137,14,23, -197,1,194,87,94,23,193,1,27,23,195,1,28,249,22,178,7,23,195,2,2, -32,249,22,86,23,204,2,9,249,22,72,248,22,137,14,23,196,1,9,28,249, -22,178,7,23,196,2,2,32,249,22,86,200,194,87,94,23,199,1,249,22,72, -248,22,137,14,23,197,1,194,87,94,23,193,1,27,23,195,1,28,249,22,178, -7,23,195,2,2,32,249,22,86,199,9,87,94,23,198,1,249,22,72,248,22, -137,14,23,196,1,9,32,61,89,162,8,44,39,53,70,102,111,117,110,100,45, -101,120,101,99,222,33,64,32,62,89,162,8,44,40,58,64,110,101,120,116,222, -33,63,27,248,22,154,14,23,196,2,28,249,22,129,9,23,195,2,23,197,1, -11,28,248,22,150,14,23,194,2,27,249,22,146,14,23,197,1,23,196,1,28, -23,197,2,91,159,39,11,90,161,39,36,11,248,22,149,14,23,197,2,87,95, -23,195,1,23,194,1,27,28,23,202,2,27,248,22,154,14,23,199,2,28,249, -22,129,9,23,195,2,23,200,2,11,28,248,22,150,14,23,194,2,250,2,61, -23,205,2,23,206,2,249,22,146,14,23,200,2,23,198,1,250,2,61,23,205, -2,23,206,2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248, -22,128,14,23,196,2,27,249,22,146,14,23,198,2,23,205,2,28,28,248,22, -141,14,193,10,248,22,140,14,193,192,11,11,28,23,193,2,192,87,94,23,193, -1,28,23,203,2,11,27,248,22,154,14,23,200,2,28,249,22,129,9,23,195, -2,23,201,1,11,28,248,22,150,14,23,194,2,250,2,61,23,206,1,23,207, -1,249,22,146,14,23,201,1,23,198,1,250,2,61,205,206,195,192,87,94,23, -194,1,27,23,194,1,28,23,197,2,91,159,39,11,90,161,39,36,11,248,22, -149,14,23,197,2,87,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22, -154,14,23,199,2,28,249,22,129,9,23,195,2,23,200,2,11,28,248,22,150, -14,23,194,2,250,2,61,23,205,2,23,206,2,249,22,146,14,23,200,2,23, -198,1,250,2,61,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,87, -94,23,193,1,27,28,248,22,128,14,23,196,2,27,249,22,146,14,23,198,2, -23,205,2,28,28,248,22,141,14,193,10,248,22,140,14,193,192,11,11,28,23, -193,2,192,87,94,23,193,1,28,23,203,2,11,27,248,22,154,14,23,200,2, -28,249,22,129,9,23,195,2,23,201,1,11,28,248,22,150,14,23,194,2,250, -2,61,23,206,1,23,207,1,249,22,146,14,23,201,1,23,198,1,250,2,61, -205,206,195,192,28,23,193,2,91,159,39,11,90,161,39,36,11,248,22,149,14, -23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,251,2,62,23,198, -2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,87,94,23,193,1, -27,28,248,22,128,14,195,27,249,22,146,14,197,200,28,28,248,22,141,14,193, -10,248,22,140,14,193,192,11,11,28,192,192,28,198,11,251,2,62,198,203,201, -202,194,32,65,89,162,8,44,40,8,31,2,20,222,33,66,28,248,22,80,23, -197,2,11,27,248,22,153,14,248,22,73,23,199,2,27,249,22,146,14,23,196, -1,23,197,2,28,248,22,140,14,23,194,2,250,2,61,198,199,195,87,94,23, -193,1,27,248,22,74,23,200,1,28,248,22,80,23,194,2,11,27,248,22,153, -14,248,22,73,23,196,2,27,249,22,146,14,23,196,1,23,200,2,28,248,22, -140,14,23,194,2,250,2,61,201,202,195,87,94,23,193,1,27,248,22,74,23, -197,1,28,248,22,80,23,194,2,11,27,248,22,153,14,248,22,73,23,196,2, -27,249,22,146,14,23,196,1,23,203,2,28,248,22,140,14,23,194,2,250,2, -61,204,205,195,87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80,23, -194,2,11,27,248,22,153,14,248,22,73,23,196,2,27,249,22,146,14,23,196, -1,23,206,2,28,248,22,140,14,23,194,2,250,2,61,23,15,23,16,195,87, -94,23,193,1,27,248,22,74,23,197,1,28,248,22,80,23,194,2,11,27,248, -22,153,14,248,22,73,23,196,2,27,249,22,146,14,23,196,1,23,209,2,28, -248,22,140,14,23,194,2,250,2,61,23,18,23,19,195,87,94,23,193,1,27, -248,22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,153,14,248,22, -73,195,27,249,22,146,14,23,196,1,23,19,28,248,22,140,14,193,250,2,61, -23,21,23,22,195,251,2,65,23,21,23,22,23,23,248,22,74,199,87,95,28, -27,23,195,2,28,248,22,128,14,23,194,2,10,28,248,22,181,6,23,194,2, -28,248,22,150,14,23,194,2,10,248,22,151,14,23,194,1,11,12,250,22,163, -9,2,16,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32, -40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28,28,248, -22,128,14,23,196,2,10,28,248,22,181,6,23,196,2,28,248,22,150,14,23, -196,2,10,248,22,151,14,23,196,2,11,248,22,150,14,23,196,2,11,10,12, -250,22,163,9,2,16,6,29,29,35,102,32,111,114,32,114,101,108,97,116,105, -118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198,2,28, -28,248,22,150,14,23,195,2,91,159,39,11,90,161,39,36,11,248,22,149,14, -23,198,2,249,22,191,8,194,68,114,101,108,97,116,105,118,101,11,27,248,22, -137,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,41,49,38, -23,197,1,9,28,249,22,191,8,247,22,139,8,2,22,249,22,72,248,22,137, -14,5,1,46,194,192,87,94,23,194,1,9,28,248,22,80,23,194,2,11,27, -248,22,153,14,248,22,73,23,196,2,27,249,22,146,14,23,196,1,23,200,2, -28,248,22,140,14,23,194,2,250,2,61,201,202,195,87,94,23,193,1,27,248, -22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,153,14,248,22,73, -23,196,2,27,249,22,146,14,23,196,1,23,203,2,28,248,22,140,14,23,194, -2,250,2,61,204,205,195,87,94,23,193,1,27,248,22,74,23,197,1,28,248, -22,80,23,194,2,11,27,248,22,153,14,248,22,73,195,27,249,22,146,14,23, -196,1,205,28,248,22,140,14,193,250,2,61,23,15,23,16,195,251,2,65,23, -15,23,16,23,17,248,22,74,199,27,248,22,153,14,23,196,1,28,248,22,140, -14,193,250,2,61,198,199,195,11,250,80,159,39,50,37,196,197,11,250,80,159, -39,50,37,196,11,11,87,94,249,22,172,6,247,22,144,5,195,248,22,134,6, -249,22,187,3,36,249,22,171,3,197,198,27,28,23,197,2,87,95,23,196,1, -23,195,1,23,197,1,87,94,23,197,1,27,248,22,168,14,2,21,27,249,80, -159,41,50,37,23,196,1,11,27,248,22,190,3,23,199,1,27,28,23,194,2, -23,194,1,87,94,23,194,1,36,27,248,22,190,3,23,202,1,27,28,23,194, -2,23,194,1,87,94,23,194,1,36,249,22,175,5,23,199,1,83,158,40,20, -100,95,89,162,8,44,36,48,9,224,4,2,33,70,23,195,1,23,197,1,27, -248,22,160,5,23,195,1,248,80,159,39,55,37,193,159,36,20,105,159,36,16, -1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11,11,11,11,11,10, -43,80,158,36,36,20,105,159,38,16,18,2,2,2,3,2,4,2,5,2,6, -2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2, -17,30,2,19,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,45,107,101,121,4,30,2,19,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,3,16,0,16,0,36,16,0, -36,16,4,2,6,2,5,2,3,2,10,40,11,11,39,36,11,11,11,16,12, -2,9,2,7,2,17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2, -11,2,2,16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,9, -2,7,2,17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2, -2,48,48,37,11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0, -16,0,16,0,36,36,16,0,16,18,83,158,36,16,2,89,162,8,44,37,51, -2,20,223,0,33,33,80,159,36,55,37,83,158,36,16,2,89,162,8,44,37, -56,2,20,223,0,33,34,80,159,36,54,37,83,158,36,16,2,32,0,89,162, -44,37,45,2,2,222,33,35,80,159,36,36,37,83,158,36,16,2,249,22,183, -6,7,92,7,92,80,159,36,37,37,83,158,36,16,2,89,162,44,37,54,2, -4,223,0,33,36,80,159,36,38,37,83,158,36,16,2,32,0,89,162,8,44, -38,50,2,5,222,33,37,80,159,36,39,37,83,158,36,16,2,32,0,89,162, -8,44,39,53,2,6,222,33,39,80,159,36,40,37,83,158,36,16,2,32,0, -89,162,8,45,38,55,2,7,222,33,43,80,159,36,41,37,83,158,36,16,2, -32,0,89,162,45,39,54,2,9,222,33,47,80,159,36,43,37,83,158,36,16, -2,32,0,89,162,44,41,8,24,2,8,222,33,50,80,159,36,42,37,83,158, -36,16,2,32,0,89,162,44,39,50,2,10,222,33,51,80,159,36,44,37,83, -158,36,16,2,32,0,89,162,44,38,53,2,11,222,33,52,80,159,36,45,37, -83,158,36,16,2,32,0,89,162,44,38,54,2,12,222,33,53,80,159,36,46, -37,83,158,36,16,2,32,0,89,162,44,37,44,2,13,222,33,54,80,159,36, -47,37,83,158,36,16,2,83,158,39,20,99,96,2,14,89,162,44,36,44,9, -223,0,33,55,89,162,44,37,45,9,223,0,33,56,89,162,44,38,55,9,223, -0,33,57,80,159,36,48,37,83,158,36,16,2,27,248,22,175,14,248,22,131, -8,27,28,249,22,191,8,247,22,139,8,2,22,6,1,1,59,6,1,1,58, -250,22,165,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41, -23,196,2,23,196,1,89,162,8,44,38,8,32,2,15,223,0,33,60,80,159, -36,49,37,83,158,36,16,2,83,158,39,20,99,96,2,16,89,162,8,44,39, -8,24,9,223,0,33,67,89,162,44,38,47,9,223,0,33,68,89,162,44,37, -46,9,223,0,33,69,80,159,36,50,37,83,158,36,16,2,89,162,8,44,39, -54,2,17,223,0,33,71,80,159,36,51,37,94,29,94,2,18,68,35,37,107, -101,114,110,101,108,11,29,94,2,18,69,35,37,109,105,110,45,115,116,120,11, -9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 8761); +27,248,22,106,23,197,1,27,249,22,180,14,23,209,2,23,196,2,28,23,193, +2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1, +27,249,22,180,14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27, +248,22,97,23,195,2,27,250,2,58,23,218,2,23,216,1,248,22,106,23,199, +1,28,249,22,178,7,23,196,2,2,32,249,22,86,23,217,2,194,249,22,72, +248,22,138,14,23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,178,7, +23,196,2,2,32,249,22,86,23,215,2,9,249,22,72,248,22,138,14,23,197, +1,9,28,249,22,178,7,23,196,2,2,32,249,22,86,23,213,2,194,249,22, +72,248,22,138,14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196, +2,2,32,249,22,86,23,211,2,9,249,22,72,248,22,138,14,23,197,1,9, +28,249,22,178,7,23,196,2,2,32,249,22,86,23,209,2,194,249,22,72,248, +22,138,14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2, +32,249,22,86,23,207,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249, +22,178,7,23,196,2,2,32,249,22,86,23,205,2,194,249,22,72,248,22,138, +14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249, +22,86,23,203,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178, +7,23,196,2,2,32,249,22,86,200,194,87,94,23,199,1,249,22,72,248,22, +138,14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32, +249,22,86,198,9,87,94,23,197,1,249,22,72,248,22,138,14,23,197,1,9, +32,61,89,162,8,44,39,53,70,102,111,117,110,100,45,101,120,101,99,222,33, +64,32,62,89,162,8,44,40,58,64,110,101,120,116,222,33,63,27,248,22,155, +14,23,196,2,28,249,22,129,9,23,195,2,23,197,1,11,28,248,22,151,14, +23,194,2,27,249,22,147,14,23,197,1,23,196,1,28,23,197,2,91,159,39, +11,90,161,39,36,11,248,22,150,14,23,197,2,87,95,23,195,1,23,194,1, +27,28,23,202,2,27,248,22,155,14,23,199,2,28,249,22,129,9,23,195,2, +23,200,2,11,28,248,22,151,14,23,194,2,250,2,61,23,205,2,23,206,2, +249,22,147,14,23,200,2,23,198,1,250,2,61,23,205,2,23,206,2,23,196, +1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,129,14,23,196,2, +27,249,22,147,14,23,198,2,23,205,2,28,28,248,22,142,14,193,10,248,22, +141,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,203,2,11, +27,248,22,155,14,23,200,2,28,249,22,129,9,23,195,2,23,201,1,11,28, +248,22,151,14,23,194,2,250,2,61,23,206,1,23,207,1,249,22,147,14,23, +201,1,23,198,1,250,2,61,205,206,195,192,87,94,23,194,1,28,23,196,2, +91,159,39,11,90,161,39,36,11,248,22,150,14,23,197,2,87,95,23,195,1, +23,194,1,27,28,23,201,2,27,248,22,155,14,23,199,2,28,249,22,129,9, +23,195,2,23,200,2,11,28,248,22,151,14,23,194,2,250,2,61,23,204,2, +23,205,2,249,22,147,14,23,200,2,23,198,1,250,2,61,23,204,2,23,205, +2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,129,14, +23,196,2,27,249,22,147,14,23,198,2,23,204,2,28,28,248,22,142,14,193, +10,248,22,141,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23, +202,2,11,27,248,22,155,14,23,200,2,28,249,22,129,9,23,195,2,23,201, +1,11,28,248,22,151,14,23,194,2,250,2,61,23,205,1,23,206,1,249,22, +147,14,23,201,1,23,198,1,250,2,61,204,205,195,192,28,23,193,2,91,159, +39,11,90,161,39,36,11,248,22,150,14,23,199,2,87,95,23,195,1,23,194, +1,27,28,23,198,2,251,2,62,23,198,2,23,203,2,23,201,2,23,202,2, +11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,129,14,195,27,249,22, +147,14,197,200,28,28,248,22,142,14,193,10,248,22,141,14,193,192,11,11,28, +192,192,28,198,11,251,2,62,198,203,201,202,194,32,65,89,162,8,44,40,8, +31,2,20,222,33,66,28,248,22,80,23,197,2,11,27,248,22,154,14,248,22, +73,23,199,2,27,249,22,147,14,23,196,1,23,197,2,28,248,22,141,14,23, +194,2,250,2,61,198,199,195,87,94,23,193,1,27,248,22,74,23,200,1,28, +248,22,80,23,194,2,11,27,248,22,154,14,248,22,73,23,196,2,27,249,22, +147,14,23,196,1,23,200,2,28,248,22,141,14,23,194,2,250,2,61,201,202, +195,87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80,23,194,2,11, +27,248,22,154,14,248,22,73,23,196,2,27,249,22,147,14,23,196,1,23,203, +2,28,248,22,141,14,23,194,2,250,2,61,204,205,195,87,94,23,193,1,27, +248,22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,154,14,248,22, +73,23,196,2,27,249,22,147,14,23,196,1,23,206,2,28,248,22,141,14,23, +194,2,250,2,61,23,15,23,16,195,87,94,23,193,1,27,248,22,74,23,197, +1,28,248,22,80,23,194,2,11,27,248,22,154,14,248,22,73,23,196,2,27, +249,22,147,14,23,196,1,23,209,2,28,248,22,141,14,23,194,2,250,2,61, +23,18,23,19,195,87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80, +23,194,2,11,27,248,22,154,14,248,22,73,195,27,249,22,147,14,23,196,1, +23,19,28,248,22,141,14,193,250,2,61,23,21,23,22,195,251,2,65,23,21, +23,22,23,23,248,22,74,199,87,95,28,28,248,22,129,14,23,195,2,10,28, +248,22,181,6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23, +195,2,11,12,250,22,163,9,2,16,6,25,25,112,97,116,104,32,111,114,32, +115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28, +28,23,195,2,28,28,248,22,129,14,23,196,2,10,28,248,22,181,6,23,196, +2,28,248,22,151,14,23,196,2,10,248,22,152,14,23,196,2,11,248,22,151, +14,23,196,2,11,10,12,250,22,163,9,2,16,6,29,29,35,102,32,111,114, +32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114, +105,110,103,23,198,2,28,28,248,22,151,14,23,195,2,91,159,39,11,90,161, +39,36,11,248,22,150,14,23,198,2,249,22,191,8,194,68,114,101,108,97,116, +105,118,101,11,27,248,22,137,8,6,4,4,80,65,84,72,27,28,23,194,2, +27,249,80,159,41,49,38,23,197,1,9,28,249,22,191,8,247,22,139,8,2, +22,249,22,72,248,22,138,14,5,1,46,194,192,87,94,23,194,1,9,28,248, +22,80,23,194,2,11,27,248,22,154,14,248,22,73,23,196,2,27,249,22,147, +14,23,196,1,23,200,2,28,248,22,141,14,23,194,2,250,2,61,201,202,195, +87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80,23,194,2,11,27, +248,22,154,14,248,22,73,23,196,2,27,249,22,147,14,23,196,1,23,203,2, +28,248,22,141,14,23,194,2,250,2,61,204,205,195,87,94,23,193,1,27,248, +22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,154,14,248,22,73, +195,27,249,22,147,14,23,196,1,205,28,248,22,141,14,193,250,2,61,23,15, +23,16,195,251,2,65,23,15,23,16,23,17,248,22,74,199,27,248,22,154,14, +23,196,1,28,248,22,141,14,193,250,2,61,198,199,195,11,250,80,159,39,50, +37,196,197,11,250,80,159,39,50,37,196,11,11,87,94,249,22,172,6,247,22, +144,5,195,248,22,134,6,249,22,187,3,36,249,22,171,3,197,198,27,28,23, +197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22, +169,14,2,21,27,249,80,159,41,50,37,23,196,1,11,27,248,22,190,3,23, +199,1,27,28,23,194,2,23,194,1,87,94,23,194,1,36,27,248,22,190,3, +23,202,1,27,28,23,194,2,23,194,1,87,94,23,194,1,36,249,22,175,5, +23,199,1,83,158,40,20,100,95,89,162,8,44,36,48,9,224,4,2,33,70, +23,195,1,23,197,1,27,248,22,160,5,23,195,1,248,80,159,39,55,37,193, +159,36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1, +29,11,11,11,11,11,10,43,80,158,36,36,20,105,159,38,16,18,2,2,2, +3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13, +2,14,2,15,2,16,2,17,30,2,19,1,20,112,97,114,97,109,101,116,101, +114,105,122,97,116,105,111,110,45,107,101,121,4,30,2,19,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,3, +16,0,16,0,36,16,0,36,16,4,2,6,2,5,2,3,2,10,40,11,11, +39,36,11,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13, +2,4,2,12,2,15,2,11,2,2,16,12,11,11,11,11,11,11,11,11,11, +11,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13,2,4, +2,12,2,15,2,11,2,2,48,48,37,11,11,11,16,0,16,0,16,0,36, +36,11,11,11,11,16,0,16,0,16,0,36,36,16,0,16,18,83,158,36,16, +2,89,162,8,44,37,51,2,20,223,0,33,33,80,159,36,55,37,83,158,36, +16,2,89,162,8,44,37,56,2,20,223,0,33,34,80,159,36,54,37,83,158, +36,16,2,32,0,89,162,44,37,45,2,2,222,33,35,80,159,36,36,37,83, +158,36,16,2,249,22,183,6,7,92,7,92,80,159,36,37,37,83,158,36,16, +2,89,162,44,37,54,2,4,223,0,33,36,80,159,36,38,37,83,158,36,16, +2,32,0,89,162,8,44,38,50,2,5,222,33,37,80,159,36,39,37,83,158, +36,16,2,32,0,89,162,8,44,39,51,2,6,222,33,39,80,159,36,40,37, +83,158,36,16,2,32,0,89,162,8,45,38,54,2,7,222,33,43,80,159,36, +41,37,83,158,36,16,2,32,0,89,162,45,39,53,2,9,222,33,47,80,159, +36,43,37,83,158,36,16,2,32,0,89,162,44,41,59,2,8,222,33,50,80, +159,36,42,37,83,158,36,16,2,32,0,89,162,44,39,50,2,10,222,33,51, +80,159,36,44,37,83,158,36,16,2,32,0,89,162,44,38,53,2,11,222,33, +52,80,159,36,45,37,83,158,36,16,2,32,0,89,162,44,38,54,2,12,222, +33,53,80,159,36,46,37,83,158,36,16,2,32,0,89,162,44,37,44,2,13, +222,33,54,80,159,36,47,37,83,158,36,16,2,83,158,39,20,99,96,2,14, +89,162,44,36,44,9,223,0,33,55,89,162,44,37,45,9,223,0,33,56,89, +162,44,38,55,9,223,0,33,57,80,159,36,48,37,83,158,36,16,2,27,248, +22,176,14,248,22,131,8,27,28,249,22,191,8,247,22,139,8,2,22,6,1, +1,59,6,1,1,58,250,22,165,7,6,14,14,40,91,94,126,97,93,42,41, +126,97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,38,8,32,2,15, +223,0,33,60,80,159,36,49,37,83,158,36,16,2,83,158,39,20,99,96,2, +16,89,162,8,44,39,8,24,9,223,0,33,67,89,162,44,38,47,9,223,0, +33,68,89,162,44,37,46,9,223,0,33,69,80,159,36,50,37,83,158,36,16, +2,89,162,8,44,39,54,2,17,223,0,33,71,80,159,36,51,37,94,29,94, +2,18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37,109,105, +110,45,115,116,120,11,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 8641); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,53,9,0,0,0,1,0,0,10,0,16,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,54,9,0,0,0,1,0,0,10,0,16,0, 29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,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,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,33,86,0,0,98,159,2,3,36,36,159,2,4,36,36,159,2, +36,11,8,240,34,86,0,0,98,159,2,3,36,36,159,2,4,36,36,159,2, 5,36,36,159,2,6,36,36,159,2,7,36,36,159,2,7,36,36,16,0,159, 36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29, 11,11,11,11,11,18,96,11,44,44,44,36,80,158,36,36,20,105,159,36,16, @@ -540,14 +534,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 352); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,53,74,0,0,0,1,0,0,7,0,18,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,54,74,0,0,0,1,0,0,7,0,18,0, 45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,200, 0,212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,1, 70,1,79,1,84,1,88,1,94,1,101,1,107,1,115,1,124,1,145,1,166, -1,196,1,226,1,35,2,100,2,156,2,212,2,160,8,179,8,193,8,111,9, -124,9,54,11,164,13,31,14,37,14,51,14,64,14,162,15,175,15,50,16,63, -16,161,17,174,17,49,18,76,18,89,18,102,18,200,19,213,19,88,20,101,20, -232,20,244,20,75,21,77,21,146,21,192,29,244,29,11,30,0,0,173,32,0, +1,196,1,226,1,27,2,84,2,132,2,180,2,110,8,129,8,142,8,44,9, +57,9,243,10,81,13,204,13,210,13,224,13,237,13,79,15,92,15,211,15,224, +15,66,17,79,17,198,17,225,17,238,17,251,17,93,19,106,19,225,19,238,19, +101,20,109,20,196,20,198,20,11,21,57,29,109,29,132,29,0,0,38,32,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,29,94,2,4,67,35,37,117,116,105,108, @@ -566,138 +560,131 @@ 109,101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101, 64,108,111,111,112,63,108,105,98,6,3,3,46,115,115,6,4,4,46,114,107, 116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,159, -38,46,38,250,22,146,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, -1,2,23,250,22,146,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, -1,2,24,252,22,146,14,23,199,1,23,201,1,2,25,247,22,140,8,249,80, -159,45,39,38,23,200,1,80,159,45,36,38,252,22,146,14,23,199,1,23,201, +38,46,38,250,22,147,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,23,250,22,147,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,24,252,22,147,14,23,199,1,23,201,1,2,25,247,22,140,8,249,80, +159,45,39,38,23,200,1,80,159,45,36,38,252,22,147,14,23,199,1,23,201, 1,2,25,247,22,140,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38, -27,23,197,1,27,252,22,146,14,23,201,1,23,199,1,2,25,247,22,140,8, -249,80,159,47,39,38,23,202,1,80,159,47,36,38,27,23,194,1,27,250,22, -163,14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,72,195, -194,11,27,23,197,1,27,252,22,146,14,23,201,1,23,199,1,2,25,247,22, -140,8,249,80,159,47,39,38,23,202,1,80,159,47,36,38,27,23,194,1,27, -250,22,163,14,196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22, -72,195,194,11,27,23,197,1,27,250,22,146,14,23,199,1,23,197,1,249,80, -159,45,39,38,23,200,1,2,23,27,23,194,1,27,250,22,163,14,196,11,32, -0,89,162,8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,23,197, -1,27,250,22,146,14,23,199,1,23,197,1,249,80,159,45,39,38,23,200,1, -2,24,27,23,194,1,27,250,22,163,14,196,11,32,0,89,162,8,44,36,41, -9,222,11,28,192,249,22,72,195,194,11,87,94,28,248,80,159,37,38,38,23, -195,2,12,250,22,163,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112, -105,108,101,100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45, -112,97,116,104,32,115,116,114,105,110,103,23,197,2,91,159,46,11,90,161,37, -36,11,28,248,22,152,14,23,205,2,23,204,2,27,247,22,149,5,28,23,193, -2,249,22,153,14,23,207,2,23,195,1,23,205,2,90,161,39,37,11,248,22, -149,14,23,205,1,87,94,23,196,1,90,161,38,40,11,28,23,205,2,27,248, -22,133,14,23,197,2,27,248,22,175,7,23,195,2,28,28,249,22,183,3,23, -195,2,40,249,22,178,7,5,4,46,114,107,116,249,22,181,7,23,198,2,249, -22,171,3,23,199,2,40,11,249,22,7,23,199,2,248,22,137,14,249,22,182, -7,250,22,181,7,23,202,1,36,249,22,171,3,23,203,1,40,5,3,46,115, -115,249,22,7,23,199,2,11,249,22,7,23,197,2,11,90,161,37,42,11,28, -249,22,191,8,23,199,2,23,197,2,23,193,2,249,22,146,14,23,196,2,23, -199,2,90,161,37,43,11,28,23,198,2,28,249,22,191,8,23,200,2,23,197, -1,23,193,1,87,94,23,193,1,249,22,146,14,23,196,2,23,200,2,87,94, -23,195,1,11,90,161,37,44,11,28,249,22,191,8,23,196,2,68,114,101,108, -97,116,105,118,101,87,94,23,194,1,2,22,23,194,1,90,161,37,45,11,247, -22,171,14,27,250,22,163,14,23,203,2,11,32,0,89,162,8,44,36,41,9, -222,11,27,28,23,194,2,249,22,72,23,203,2,23,196,1,87,94,23,194,1, -11,27,28,23,203,2,28,23,194,2,11,27,250,22,163,14,23,207,2,11,32, -0,89,162,8,44,36,41,9,222,11,28,192,249,22,72,23,206,2,194,11,11, -27,28,23,195,2,23,195,2,23,194,2,27,89,162,44,37,50,62,122,111,225, -15,13,9,33,33,27,89,162,44,37,50,66,97,108,116,45,122,111,225,16,14, -11,33,34,27,89,162,44,37,52,9,225,17,15,11,33,35,27,89,162,44,37, -52,9,225,18,16,13,33,36,27,28,23,200,2,23,200,2,248,22,189,8,23, -200,2,27,28,23,208,2,28,23,200,2,87,94,23,201,1,23,200,2,248,22, -189,8,23,202,1,11,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162, -8,44,37,54,9,225,24,22,18,33,37,23,216,2,27,28,23,202,2,11,193, -28,192,192,28,193,28,23,202,2,28,249,22,183,3,248,22,74,196,248,22,74, -23,205,2,193,11,11,11,11,87,94,23,197,1,11,28,23,193,2,87,105,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,27,23,194,1,20,14,159, -80,159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40, -38,22,171,4,11,20,14,159,80,159,58,40,38,250,80,159,8,25,41,38,249, -22,27,11,80,159,8,27,40,38,22,149,5,28,248,22,128,14,23,217,2,23, -216,1,87,94,23,216,1,247,22,169,14,249,247,22,174,14,248,22,73,195,23, -26,87,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,89,162, -8,44,37,54,9,225,25,23,20,33,38,23,217,2,27,28,23,204,2,11,193, -28,192,192,28,193,28,203,28,249,22,183,3,248,22,74,196,248,22,74,206,193, -11,11,11,11,87,94,23,197,1,11,28,23,193,2,87,102,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,27,23,194,1,20,14,159,80,159,59,40,38,250,80,159,8,26,41,38,249, -22,27,11,80,159,8,28,40,38,22,171,4,23,216,1,20,14,159,80,159,59, +27,252,22,147,14,23,200,1,23,202,1,2,25,247,22,140,8,249,80,159,46, +39,38,23,201,1,80,159,46,36,38,27,250,22,164,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,252,22,147,14,23, +200,1,23,202,1,2,25,247,22,140,8,249,80,159,46,39,38,23,201,1,80, +159,46,36,38,27,250,22,164,14,196,11,32,0,89,162,8,44,36,41,9,222, +11,28,192,249,22,72,195,194,11,27,250,22,147,14,23,198,1,23,200,1,249, +80,159,44,39,38,23,199,1,2,23,27,250,22,164,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,250,22,147,14,23, +198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,164,14, +196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,72,195,194,11, +87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,163,9,77,108,111,97, +100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,116,104, +32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, +23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,153,14,23,205,2,23, +204,2,27,247,22,149,5,28,23,193,2,249,22,154,14,23,207,2,23,195,1, +23,205,2,90,161,39,37,11,248,22,150,14,23,205,1,87,94,23,196,1,90, +161,38,40,11,28,23,205,2,27,248,22,134,14,23,197,2,27,248,22,175,7, +23,195,2,28,28,249,22,183,3,23,195,2,40,249,22,178,7,5,4,46,114, +107,116,249,22,181,7,23,198,2,249,22,171,3,23,199,2,40,11,249,22,7, +23,199,2,248,22,138,14,249,22,182,7,250,22,181,7,23,202,1,36,249,22, +171,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22,7, +23,197,2,11,90,161,37,42,11,28,249,22,191,8,23,199,2,23,197,2,23, +193,2,249,22,147,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,2, +28,249,22,191,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,22, +147,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,249, +22,191,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2, +22,23,194,1,90,161,37,45,11,247,22,172,14,27,250,22,164,14,23,203,2, +11,32,0,89,162,8,44,36,41,9,222,11,27,28,23,194,2,249,22,72,23, +203,2,23,196,1,87,94,23,194,1,11,27,28,23,203,2,28,23,194,2,11, +27,250,22,164,14,23,207,2,11,32,0,89,162,8,44,36,41,9,222,11,28, +192,249,22,72,23,206,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2, +27,89,162,44,37,50,62,122,111,225,15,13,9,33,33,27,89,162,44,37,50, +66,97,108,116,45,122,111,225,16,14,11,33,34,27,89,162,44,37,52,9,225, +17,15,11,33,35,27,89,162,44,37,52,9,225,18,16,13,33,36,27,28,23, +200,2,23,200,2,248,22,189,8,23,200,2,27,28,23,208,2,28,23,200,2, +87,94,23,201,1,23,200,2,248,22,189,8,23,202,1,11,27,28,23,195,2, +28,23,197,1,27,249,22,5,89,162,8,44,37,53,9,225,24,22,18,33,37, +23,216,2,27,28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249, +22,183,3,248,22,74,196,248,22,74,23,205,2,193,11,11,11,11,87,94,23, +197,1,11,28,23,193,2,87,105,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,14,159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27, +11,80,159,8,26,40,38,22,171,4,11,20,14,159,80,159,57,40,38,250,80, +159,8,24,41,38,249,22,27,11,80,159,8,26,40,38,22,149,5,28,248,22, +129,14,23,216,2,23,215,1,87,94,23,215,1,247,22,170,14,249,247,22,175, +14,248,22,73,195,23,25,87,94,23,193,1,27,28,23,195,2,28,23,197,1, +27,249,22,5,89,162,8,44,37,53,9,225,25,23,20,33,38,23,217,2,27, +28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,183,3,248,22,74, +196,248,22,74,206,193,11,11,11,11,87,94,23,197,1,11,28,23,193,2,87, +102,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,14,159,80,159,58,40,38,250,80,159,8,25,41, +38,249,22,27,11,80,159,8,27,40,38,22,171,4,23,215,1,20,14,159,80, +159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38, +22,149,5,28,248,22,129,14,23,217,2,23,216,1,87,94,23,216,1,247,22, +170,14,249,247,22,175,14,248,22,73,195,23,26,87,94,23,193,1,27,28,23, +197,2,28,23,201,1,27,249,22,5,83,158,40,20,100,94,89,162,8,44,37, +51,9,225,26,24,20,33,39,23,213,1,23,218,2,27,28,23,204,2,11,193, +28,192,192,28,193,28,23,204,2,28,249,22,183,3,248,22,74,196,248,22,74, +23,207,2,193,11,11,11,87,94,23,210,1,11,87,94,23,201,1,11,28,23, +193,2,87,101,23,215,1,23,213,1,23,212,1,23,211,1,23,202,1,23,200, +1,23,197,1,23,196,1,20,14,159,80,159,59,40,38,250,80,159,8,26,41, +38,249,22,27,11,80,159,8,28,40,38,22,171,4,11,20,14,159,80,159,59, 40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40,38,22,149, -5,28,248,22,128,14,23,218,2,23,217,1,87,94,23,217,1,247,22,169,14, -249,247,22,174,14,248,22,73,195,23,27,87,94,23,193,1,27,28,23,197,2, -28,23,201,1,27,249,22,5,83,158,40,20,100,94,89,162,8,44,37,52,9, -225,26,24,20,33,39,23,213,1,23,218,2,27,28,23,204,2,11,193,28,192, -192,28,193,28,23,204,2,28,249,22,183,3,248,22,74,196,248,22,74,23,207, -2,193,11,11,11,87,94,23,210,1,11,87,94,23,201,1,11,28,23,193,2, -87,101,23,215,1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23, -197,1,23,196,1,27,23,194,1,20,14,159,80,159,8,24,40,38,250,80,159, -8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,171,4,11,20,14,159, -80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80,159,8,29, -40,38,22,149,5,28,248,22,128,14,23,219,2,23,218,1,87,94,23,218,1, -247,22,169,14,249,247,22,147,5,248,22,73,195,23,28,87,94,23,193,1,27, -28,23,197,1,28,23,201,1,27,249,22,5,83,158,40,20,100,94,89,162,8, -44,37,52,9,225,27,25,22,33,40,23,215,1,23,219,1,27,28,23,205,2, -11,193,28,192,192,28,193,28,204,28,249,22,183,3,248,22,74,196,248,22,74, -23,15,193,11,11,11,87,95,23,216,1,23,212,1,11,87,94,23,201,1,11, -28,23,193,2,87,95,23,213,1,23,198,1,27,23,194,1,20,14,159,80,159, -8,25,40,38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38, -22,171,4,23,218,1,20,14,159,80,159,8,25,40,38,250,80,159,8,28,41, -38,249,22,27,11,80,159,8,30,40,38,22,149,5,28,248,22,128,14,23,220, -2,23,219,1,87,94,23,219,1,247,22,169,14,249,247,22,147,5,248,22,73, -195,23,29,87,94,23,193,1,27,28,23,199,2,87,94,23,215,1,23,214,1, -87,94,23,214,1,23,215,1,20,14,159,80,159,8,25,40,38,250,80,159,8, -28,41,38,249,22,27,11,80,159,8,30,40,38,22,171,4,28,23,30,28,23, -202,1,11,195,87,94,23,202,1,11,20,14,159,80,159,8,25,40,38,250,80, -159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,149,5,28,248,22, -128,14,23,220,2,23,219,1,87,94,23,219,1,247,22,169,14,249,247,22,147, -5,194,23,29,0,17,35,114,120,34,94,40,46,42,63,41,47,40,46,42,41, -36,34,32,43,89,162,8,44,37,8,27,2,26,222,33,44,27,249,22,179,14, -2,42,23,196,2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72, -248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23, -196,2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97, -23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28, -23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2, -27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28,23,193,2, -87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2,248,2,43, -248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,248,22,82, -194,32,45,89,162,44,37,8,40,2,26,222,33,46,28,248,22,80,248,22,74, +5,28,248,22,129,14,23,218,2,23,217,1,87,94,23,217,1,247,22,170,14, +249,247,22,147,5,248,22,73,195,23,27,87,94,23,193,1,27,28,23,197,1, +28,23,201,1,27,249,22,5,83,158,40,20,100,94,89,162,8,44,37,51,9, +225,27,25,22,33,40,23,215,1,23,219,1,27,28,23,205,2,11,193,28,192, +192,28,193,28,204,28,249,22,183,3,248,22,74,196,248,22,74,23,15,193,11, +11,11,87,95,23,216,1,23,212,1,11,87,94,23,201,1,11,28,23,193,2, +87,95,23,213,1,23,198,1,20,14,159,80,159,8,24,40,38,250,80,159,8, +27,41,38,249,22,27,11,80,159,8,29,40,38,22,171,4,23,217,1,20,14, +159,80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80,159,8, +29,40,38,22,149,5,28,248,22,129,14,23,219,2,23,218,1,87,94,23,218, +1,247,22,170,14,249,247,22,147,5,248,22,73,195,23,28,87,94,23,193,1, +27,28,23,199,2,87,94,23,215,1,23,214,1,87,94,23,214,1,23,215,1, +20,14,159,80,159,8,25,40,38,250,80,159,8,28,41,38,249,22,27,11,80, +159,8,30,40,38,22,171,4,28,23,30,28,23,202,1,11,195,87,94,23,202, +1,11,20,14,159,80,159,8,25,40,38,250,80,159,8,28,41,38,249,22,27, +11,80,159,8,30,40,38,22,149,5,28,248,22,129,14,23,220,2,23,219,1, +87,94,23,219,1,247,22,170,14,249,247,22,147,5,194,23,29,0,17,35,114, +120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,43,89,162,8,44, +37,59,2,26,222,33,44,27,249,22,180,14,2,42,23,196,2,28,23,193,2, +87,94,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1, +27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, +72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42, +23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2, +27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193,2, +87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2,43,248,22,106,23, +197,1,248,22,82,194,248,22,82,194,248,22,82,194,248,22,82,194,32,45,89, +162,44,37,8,40,2,26,222,33,46,28,248,22,80,248,22,74,23,195,2,249, +22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11, +28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38, +11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23,195,2, +249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36, +11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159, +38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23,195, +2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38, +36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91, +159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23, +195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161, +38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197, +91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74, 23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90, 161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73, -197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22, -74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11, -90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22, -73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248, -22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38, -11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248, -22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80, -248,22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159, -38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9, -248,22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22, -80,248,22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91, -159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7, -9,248,22,73,197,91,159,38,11,90,161,38,36,11,248,2,45,248,22,74,198, -249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73, -200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72, -248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7, -249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195, -249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73, -201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,27,27,249,22,179,14, -2,42,23,197,2,28,23,193,2,87,94,23,195,1,27,23,194,1,249,22,72, -248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23, -196,2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97, -23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28, -23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2, -27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28,23,193,2, -87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2,248,2,43, -248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,248,22,82, -195,28,23,195,1,192,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248, -22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80, -248,22,74,23,197,2,249,22,7,9,248,22,73,197,27,248,22,74,196,91,159, -38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9, -248,22,73,197,27,248,22,74,196,91,159,38,11,90,161,38,36,11,28,248,22, +197,91,159,38,11,90,161,38,36,11,248,2,45,248,22,74,198,249,22,7,249, +22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249, +22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200, +196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248, +22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249, +22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249, +22,7,249,22,72,248,22,73,200,196,195,27,27,249,22,180,14,2,42,23,197, +2,28,23,193,2,87,94,23,195,1,249,22,72,248,22,97,23,196,2,27,248, +22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94, +23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249, +22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248, +22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196, +2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2, +43,248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,248,22, +82,195,28,23,195,1,192,28,248,22,80,248,22,74,23,195,2,249,22,7,9, +248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22, 80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,27,248,22,74,196,91, 159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7, 9,248,22,73,197,27,248,22,74,196,91,159,38,11,90,161,38,36,11,28,248, @@ -707,24 +694,24 @@ 248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,27,248,22,74, 196,91,159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249, 22,7,9,248,22,73,197,27,248,22,74,196,91,159,38,11,90,161,38,36,11, -28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38, -11,90,161,38,36,11,248,2,45,248,22,74,198,249,22,7,249,22,72,248,22, -73,201,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22, -72,248,22,73,202,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22, -7,249,22,72,248,22,73,202,196,195,249,22,7,249,22,72,248,22,73,202,196, -195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22,72,248,22, -73,202,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22, -72,248,22,73,200,196,195,87,95,28,248,22,189,4,195,12,250,22,163,9,2, -18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112, -97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27,250, -22,152,2,80,159,41,43,38,248,22,140,15,247,22,172,12,11,27,28,23,194, -2,193,87,94,23,194,1,27,247,22,132,2,87,94,250,22,150,2,80,159,43, -43,38,248,22,140,15,247,22,172,12,195,192,250,22,150,2,195,199,66,97,116, -116,97,99,104,251,211,197,198,199,10,28,192,250,22,162,9,11,196,195,248,22, -160,9,194,32,51,89,162,44,37,8,34,2,26,222,33,52,28,248,22,80,248, -22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38, -11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248, -22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80, +28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,27,248,22, +74,196,91,159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2, +249,22,7,9,248,22,73,197,27,248,22,74,196,91,159,38,11,90,161,38,36, +11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159, +38,11,90,161,38,36,11,248,2,45,248,22,74,198,249,22,7,249,22,72,248, +22,73,201,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249, +22,72,248,22,73,202,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249, +22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22,72,248,22,73,202, +196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22,72,248, +22,73,202,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249, +22,72,248,22,73,200,196,195,87,95,28,248,22,189,4,195,12,250,22,163,9, +2,18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, +112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27, +250,22,152,2,80,159,41,43,38,248,22,141,15,247,22,173,12,11,27,28,23, +194,2,193,87,94,23,194,1,27,247,22,132,2,87,94,250,22,150,2,80,159, +43,43,38,248,22,141,15,247,22,173,12,195,192,250,22,150,2,195,199,66,97, +116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,162,9,11,196,195,248, +22,160,9,194,32,51,89,162,44,37,8,34,2,26,222,33,52,28,248,22,80, 248,22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159, 38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9, 248,22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22, @@ -733,219 +720,219 @@ 9,248,22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248, 22,80,248,22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194, 91,159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22, -7,9,248,22,73,197,91,159,38,11,90,161,38,36,11,248,2,51,248,22,74, -198,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22, -73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22, -72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22, -7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196, -195,249,22,7,249,22,72,248,22,73,200,196,195,32,53,89,162,8,44,37,58, -2,26,222,33,54,27,249,22,179,14,2,42,23,196,2,28,23,193,2,87,94, -23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23, -197,1,27,249,22,179,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1, -27,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27, -249,22,179,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,27,23,194, -1,249,22,72,248,22,97,23,196,2,248,2,53,248,22,106,23,197,1,248,22, -82,194,248,22,82,194,248,22,82,194,32,55,89,162,44,37,8,34,2,26,222, -33,56,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248,22,73,195,27, -248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23, -197,2,249,22,7,9,248,22,73,197,91,159,38,11,90,161,38,36,11,27,248, -22,74,198,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248,22,73,195, -27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80,248,22,74, -23,197,2,249,22,7,9,248,22,73,197,91,159,38,11,90,161,38,36,11,27, -248,22,74,198,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248,22,73, -195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80,248,22, -74,23,197,2,249,22,7,9,248,22,73,197,91,159,38,11,90,161,38,36,11, -27,248,22,74,198,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248,22, +7,9,248,22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28, +248,22,80,248,22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74, +194,91,159,38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249, +22,7,9,248,22,73,197,91,159,38,11,90,161,38,36,11,248,2,51,248,22, +74,198,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248, +22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249, +22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249, +22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201, +196,195,249,22,7,249,22,72,248,22,73,200,196,195,32,53,89,162,8,44,37, +55,2,26,222,33,54,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87, +94,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27, +249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72, +248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23, +196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,248, +2,53,248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,32, +55,89,162,44,37,8,34,2,26,222,33,56,28,248,22,80,248,22,74,23,195, +2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38, +36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91, +159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23, +195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161, +38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197, +91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74, +23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90, +161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73, +197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22, +74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11, +90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22, +73,197,91,159,38,11,90,161,38,36,11,248,2,55,248,22,74,198,249,22,7, +249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195, +249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73, +200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72, +248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7, +249,22,72,248,22,73,200,196,195,32,57,89,162,8,44,37,55,2,26,222,33, +58,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, +22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2, +42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196, +2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193, +2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2,57,248,22,106, +23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,28,249,22,187,6,194, +6,1,1,46,2,22,28,249,22,187,6,194,6,2,2,46,46,62,117,112,192, +0,11,35,114,120,34,91,46,93,115,115,36,34,32,61,89,162,44,37,8,34, +2,26,222,33,62,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248,22, 73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80,248, 22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38,11,90,161,38,36, -11,248,2,55,248,22,74,198,249,22,7,249,22,72,248,22,73,201,196,195,249, -22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201, -196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248, -22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249, -22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,32, -57,89,162,8,44,37,58,2,26,222,33,58,27,249,22,179,14,2,42,23,196, -2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23, -196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28,23, -193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2,27, -248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28,23,193,2,87, -94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2,248,2,57,248, -22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,28,249,22,187, -6,194,6,1,1,46,2,22,28,249,22,187,6,194,6,2,2,46,46,62,117, -112,192,0,11,35,114,120,34,91,46,93,115,115,36,34,32,61,89,162,44,37, -8,34,2,26,222,33,62,28,248,22,80,248,22,74,23,195,2,249,22,7,9, +11,27,248,22,74,198,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248, +22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80, +248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38,11,90,161,38, +36,11,27,248,22,74,198,28,248,22,80,248,22,74,23,195,2,249,22,7,9, 248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22, 80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38,11,90,161, 38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23,195,2,249,22,7, 9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248, 22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38,11,90, -161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23,195,2,249,22, -7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28, -248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38,11, -90,161,38,36,11,27,248,22,74,198,28,248,22,80,248,22,74,23,195,2,249, -22,7,9,248,22,73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11, -28,248,22,80,248,22,74,23,197,2,249,22,7,9,248,22,73,197,91,159,38, -11,90,161,38,36,11,248,2,61,248,22,74,198,249,22,7,249,22,72,248,22, -73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22, -72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22, -7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196, -195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22, -73,200,196,195,32,63,89,162,8,44,37,58,2,26,222,33,64,27,249,22,179, -14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22, -72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42, -23,196,2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22, -97,23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2, -28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196, -2,248,2,63,248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82, -194,32,65,89,162,8,44,37,58,2,26,222,33,66,27,249,22,179,14,2,42, -23,196,2,28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22, -97,23,196,2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2, -28,23,193,2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196, -2,27,248,22,106,23,197,1,27,249,22,179,14,2,42,23,196,2,28,23,193, -2,87,94,23,194,1,27,23,194,1,249,22,72,248,22,97,23,196,2,248,2, -65,248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,27,23, -194,1,27,248,2,65,23,195,1,192,28,249,22,129,9,248,22,74,23,200,2, -23,197,1,28,249,22,191,8,248,22,73,23,200,2,23,196,1,251,22,160,9, -2,18,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103, -32,97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22,2,22,74,248, -22,87,249,22,72,23,206,1,23,202,1,12,12,247,192,20,14,159,80,159,40, -45,38,249,22,72,248,22,140,15,247,22,172,12,23,197,1,20,14,159,80,159, -40,40,38,250,80,159,43,41,38,249,22,27,11,80,159,45,40,38,22,170,4, -23,196,1,249,247,22,148,5,23,198,1,248,22,60,248,22,132,14,23,198,1, -87,94,28,28,248,22,128,14,23,196,2,10,248,22,133,5,23,196,2,12,28, -23,197,2,250,22,162,9,11,6,15,15,98,97,100,32,109,111,100,117,108,101, -32,112,97,116,104,23,200,2,250,22,163,9,2,18,6,19,19,109,111,100,117, -108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,198,2,28,28,248, -22,70,23,196,2,249,22,191,8,248,22,73,23,198,2,2,4,11,248,22,190, -4,248,22,97,196,28,28,248,22,70,23,196,2,249,22,191,8,248,22,73,23, -198,2,66,112,108,97,110,101,116,11,87,94,28,207,12,20,14,159,80,159,37, -52,38,80,158,37,50,90,161,37,36,10,249,22,172,4,21,94,2,27,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,252,212,199,200,201,202,80,158,42,50,87,94,23, -193,1,27,89,162,8,44,37,46,79,115,104,111,119,45,99,111,108,108,101,99, -116,105,111,110,45,101,114,114,223,5,33,50,27,28,248,22,57,23,198,2,27, -250,22,152,2,80,159,43,44,38,249,22,72,23,203,2,247,22,170,14,11,28, -23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38,36,11,27,248,22, -63,23,202,2,248,2,51,248,2,53,23,195,1,27,28,248,22,80,23,195,2, -6,8,8,109,97,105,110,46,114,107,116,249,22,140,7,23,197,2,6,4,4, -46,114,107,116,27,252,80,159,49,54,38,2,18,23,204,1,28,248,22,80,23, -201,2,23,201,1,87,94,23,201,1,248,22,73,23,201,2,28,248,22,80,23, -201,2,87,94,23,200,1,9,248,22,74,23,201,1,23,199,2,249,22,146,14, -23,195,1,23,196,1,28,248,22,181,6,23,198,2,87,94,23,194,1,27,28, -23,199,2,28,249,22,191,8,23,201,2,80,158,42,47,80,158,40,48,27,248, -22,191,4,23,201,2,28,248,22,128,14,23,194,2,91,159,39,11,90,161,39, -36,11,248,22,149,14,23,197,1,87,95,83,160,38,11,80,158,44,47,23,203, -2,83,160,38,11,80,158,44,48,192,192,11,11,27,28,23,194,2,23,194,1, -87,94,23,194,1,27,247,22,149,5,28,23,193,2,192,87,94,23,193,1,247, -22,169,14,27,250,22,152,2,80,159,45,44,38,249,22,72,23,205,2,23,199, -2,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90,161,38,36,11, -248,2,55,248,2,57,23,204,2,250,22,1,22,146,14,23,199,1,249,22,86, -249,22,2,32,0,89,162,8,44,37,44,9,222,33,59,23,200,1,248,22,82, -27,248,22,184,6,23,202,2,28,249,22,183,3,194,39,28,249,22,187,6,2, -28,249,22,139,7,204,249,22,171,3,198,39,249,22,140,7,250,22,139,7,205, -36,249,22,171,3,199,39,2,29,200,200,28,248,22,128,14,23,198,2,87,94, -23,194,1,28,248,22,151,14,23,198,2,27,248,22,155,14,23,199,2,91,159, -39,11,90,161,39,36,11,248,22,149,14,23,197,2,87,95,23,195,1,23,193, -1,28,249,22,179,14,2,60,248,22,133,14,23,197,1,249,80,159,45,53,38, -23,198,1,2,30,195,248,22,82,6,26,26,32,40,97,32,112,97,116,104,32, -109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,191, -8,248,22,73,23,200,2,2,27,27,250,22,152,2,80,159,43,44,38,249,22, -72,23,203,2,247,22,170,14,11,28,23,193,2,192,87,94,23,193,1,91,159, -39,11,90,161,38,36,11,27,248,22,97,23,203,2,248,2,61,248,2,63,23, -195,1,90,161,37,38,11,28,248,22,80,248,22,99,23,203,2,28,248,22,80, -23,194,2,249,22,183,14,0,8,35,114,120,34,91,46,93,34,23,196,2,11, -10,27,28,23,196,2,27,248,22,184,6,23,197,2,28,249,22,183,3,194,39, -28,249,22,187,6,2,28,249,22,139,7,23,200,2,249,22,171,3,198,39,249, -22,140,7,250,22,139,7,23,201,2,36,249,22,171,3,199,39,2,29,23,196, -2,23,196,2,28,248,22,80,23,195,2,6,8,8,109,97,105,110,46,114,107, -116,28,249,22,183,14,0,8,35,114,120,34,91,46,93,34,23,197,2,27,248, -22,184,6,23,197,2,28,249,22,183,3,194,39,28,249,22,187,6,2,28,249, -22,139,7,23,200,2,249,22,171,3,198,39,249,22,140,7,250,22,139,7,23, -201,2,36,249,22,171,3,199,39,2,29,23,196,2,23,196,2,249,22,140,7, -23,197,2,6,4,4,46,114,107,116,27,28,23,197,1,87,94,23,196,1,249, -22,86,28,248,22,80,248,22,99,23,207,2,21,93,6,5,5,109,122,108,105, -98,249,22,1,22,86,249,22,2,32,0,89,162,8,44,37,45,9,222,33,67, -248,22,99,23,210,2,23,197,1,28,248,22,80,23,196,2,87,94,23,195,1, -248,22,82,23,197,1,87,94,23,196,1,23,195,1,27,252,80,159,51,54,38, -2,18,23,206,1,248,22,73,23,200,2,248,22,74,23,200,1,23,200,2,249, -22,146,14,23,195,1,23,197,1,28,249,22,191,8,248,22,73,23,200,2,64, -102,105,108,101,27,248,22,155,14,249,22,153,14,248,22,157,14,248,22,97,23, -203,2,27,28,23,203,2,28,249,22,191,8,23,205,2,80,158,46,47,80,158, -44,48,27,248,22,191,4,23,205,2,28,248,22,128,14,23,194,2,91,159,39, -11,90,161,39,36,11,248,22,149,14,23,197,1,87,95,83,160,38,11,80,158, -48,47,23,207,2,83,160,38,11,80,158,48,48,192,192,11,11,28,23,193,2, -192,87,94,23,193,1,27,247,22,149,5,28,23,193,2,192,87,94,23,193,1, -247,22,169,14,91,159,39,11,90,161,39,36,11,248,22,149,14,23,197,2,87, -95,23,195,1,23,193,1,28,249,22,179,14,2,60,248,22,133,14,23,197,1, -249,80,159,45,53,38,23,198,1,2,30,195,12,87,94,28,28,248,22,128,14, -23,194,2,10,248,22,142,8,23,194,2,87,94,23,199,1,12,28,23,199,2, -250,22,162,9,67,114,101,113,117,105,114,101,249,22,165,7,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, -73,23,199,2,6,0,0,23,202,1,87,94,23,199,1,250,22,163,9,2,18, -249,22,165,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28, -23,198,2,248,22,73,23,199,2,6,0,0,23,200,2,27,28,248,22,142,8, -23,195,2,249,22,147,8,23,196,2,36,249,22,155,14,248,22,156,14,23,197, -2,11,27,28,248,22,142,8,23,196,2,249,22,147,8,23,197,2,37,248,80, -159,42,55,38,23,195,2,91,159,39,11,90,161,39,36,11,28,248,22,142,8, -23,199,2,250,22,7,2,31,249,22,147,8,23,203,2,38,2,31,248,22,149, -14,23,198,2,87,95,23,195,1,23,193,1,27,28,248,22,142,8,23,200,2, -249,22,147,8,23,201,2,39,249,80,159,47,53,38,23,197,2,5,0,27,28, -248,22,142,8,23,201,2,249,22,147,8,23,202,2,40,248,22,190,4,23,200, -2,27,27,250,22,152,2,80,159,51,43,38,248,22,140,15,247,22,172,12,11, -28,23,193,2,192,87,94,23,193,1,27,247,22,132,2,87,94,250,22,150,2, -80,159,52,43,38,248,22,140,15,247,22,172,12,195,192,87,95,28,23,208,1, -27,250,22,152,2,23,197,2,197,11,28,23,193,1,12,87,95,27,27,28,248, -22,17,80,159,51,46,38,80,159,50,46,38,247,22,19,250,22,25,248,22,23, -23,197,2,80,159,53,45,38,23,196,1,27,248,22,140,15,247,22,172,12,249, -22,3,83,158,40,20,100,94,89,162,8,44,37,55,9,226,12,11,2,3,33, -68,23,195,1,23,196,1,248,28,248,22,17,80,159,50,46,38,32,0,89,162, -44,37,42,9,222,33,69,80,159,49,59,37,89,162,44,36,51,9,227,13,9, -8,4,3,33,70,250,22,150,2,23,197,1,197,10,12,28,28,248,22,142,8, -23,202,1,11,28,248,22,181,6,23,206,2,10,28,248,22,57,23,206,2,10, -28,248,22,70,23,206,2,249,22,191,8,248,22,73,23,208,2,2,27,11,250, -22,150,2,80,159,50,44,38,28,248,22,181,6,23,209,2,249,22,72,23,210, -1,27,28,23,212,2,28,249,22,191,8,23,214,2,80,158,55,47,87,94,23, -212,1,80,158,53,48,27,248,22,191,4,23,214,2,28,248,22,128,14,23,194, -2,91,159,39,11,90,161,39,36,11,248,22,149,14,23,197,1,87,95,83,160, -38,11,80,158,57,47,23,23,83,160,38,11,80,158,57,48,192,192,11,11,28, -23,193,2,192,87,94,23,193,1,27,247,22,149,5,28,23,193,2,192,87,94, -23,193,1,247,22,169,14,249,22,72,23,210,1,247,22,170,14,252,22,144,8, -23,208,1,23,207,1,23,205,1,23,203,1,201,12,193,87,96,83,160,38,11, -80,158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,52,38,248,22, -169,4,80,159,37,51,38,248,22,148,5,80,159,37,37,37,248,22,163,13,80, -159,37,42,37,83,160,38,11,80,158,36,50,248,80,159,37,58,38,249,22,27, -11,80,159,39,52,38,159,36,20,105,159,36,16,1,11,16,0,83,158,42,20, -103,145,2,1,2,1,29,11,11,11,11,11,10,38,80,158,36,36,20,105,159, -37,16,23,2,2,2,3,30,2,5,72,112,97,116,104,45,115,116,114,105,110, -103,63,11,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105, -120,8,30,2,7,2,8,4,30,2,7,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,3,2,9,2,10,2, -11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,30,2,19,2,8,4, -30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102, -105,120,10,30,2,5,73,102,105,110,100,45,99,111,108,45,102,105,108,101,3, -30,2,5,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,7, -2,20,2,21,30,2,19,74,114,101,112,97,114,97,109,101,116,101,114,105,122, -101,5,16,0,16,0,36,16,0,36,16,12,2,12,2,13,2,10,2,11,2, -14,2,15,2,3,2,9,2,2,2,17,2,16,2,18,48,11,11,39,36,11, -11,11,16,2,2,20,2,21,16,2,11,11,16,2,2,20,2,21,38,38,37, -11,11,11,16,0,16,0,16,0,36,36,11,11,11,11,16,0,16,0,16,0, -36,36,16,0,16,15,83,158,36,16,2,89,162,44,37,45,9,223,0,33,32, -80,159,36,59,37,83,158,36,16,2,248,22,139,8,69,115,111,45,115,117,102, -102,105,120,80,159,36,36,37,83,158,36,16,2,89,162,44,38,8,38,2,3, -223,0,33,41,80,159,36,37,37,83,158,36,16,2,32,0,89,162,8,44,37, -42,2,9,222,192,80,159,36,42,37,83,158,36,16,2,247,22,135,2,80,159, -36,43,37,83,158,36,16,2,247,22,134,2,80,159,36,44,37,83,158,36,16, -2,247,22,68,80,159,36,45,37,83,158,36,16,2,248,22,18,74,109,111,100, -117,108,101,45,108,111,97,100,105,110,103,80,159,36,46,37,83,158,36,16,2, -11,80,158,36,47,83,158,36,16,2,11,80,158,36,48,83,158,36,16,2,32, -0,89,162,44,38,8,42,2,16,222,33,47,80,159,36,49,37,83,158,36,16, -2,11,80,158,36,50,83,158,36,16,2,91,159,38,10,90,161,37,36,10,11, -90,161,37,37,10,83,158,39,20,99,96,2,18,89,162,8,44,37,51,9,224, -2,0,33,48,89,162,44,39,49,9,223,1,33,49,89,162,44,40,8,32,9, -224,2,0,33,71,208,80,159,36,51,37,83,158,36,16,2,89,162,44,36,45, -2,20,223,0,33,72,80,159,36,56,37,83,158,36,16,2,89,162,8,44,36, -45,2,21,223,0,33,73,80,159,36,57,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,5,2,19,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 8534); +161,38,36,11,248,2,61,248,22,74,198,249,22,7,249,22,72,248,22,73,201, +196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248, +22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249, +22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249, +22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200, +196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,22,180,14,2, +42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196, +2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193, +2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197, +1,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, +22,72,248,22,97,23,196,2,248,2,63,248,22,106,23,197,1,248,22,82,194, +248,22,82,194,248,22,82,194,32,65,89,162,8,44,37,55,2,26,222,33,66, +27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, +72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42, +23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2, +27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193,2, +87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2,65,248,22,106,23, +197,1,248,22,82,194,248,22,82,194,248,22,82,194,27,248,2,65,23,195,1, +192,28,249,22,129,9,248,22,74,23,200,2,23,197,1,28,249,22,191,8,248, +22,73,23,200,2,23,196,1,251,22,160,9,2,18,6,28,28,99,121,99,108, +101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,46,115,58,32, +126,46,115,23,200,1,249,22,2,22,74,248,22,87,249,22,72,23,206,1,23, +202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,72,248,22,141,15, +247,22,173,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41,38, +249,22,27,11,80,159,45,40,38,22,170,4,23,196,1,249,247,22,148,5,23, +198,1,248,22,60,248,22,133,14,23,198,1,87,94,28,28,248,22,129,14,23, +196,2,10,248,22,133,5,23,196,2,12,28,23,197,2,250,22,162,9,11,6, +15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250, +22,163,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111, +114,32,112,97,116,104,23,198,2,28,28,248,22,70,23,196,2,249,22,191,8, +248,22,73,23,198,2,2,4,11,248,22,190,4,248,22,97,196,28,28,248,22, +70,23,196,2,249,22,191,8,248,22,73,23,198,2,66,112,108,97,110,101,116, +11,87,94,28,207,12,20,14,159,80,159,37,52,38,80,158,37,50,90,161,37, +36,10,249,22,172,4,21,94,2,27,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,252, +212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44,37,46, +79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223, +5,33,50,27,28,248,22,57,23,198,2,27,250,22,152,2,80,159,43,44,38, +249,22,72,23,203,2,247,22,171,14,11,28,23,193,2,192,87,94,23,193,1, +91,159,38,11,90,161,38,36,11,27,248,22,63,23,202,2,248,2,51,248,2, +53,23,195,1,27,28,248,22,80,23,195,2,6,8,8,109,97,105,110,46,114, +107,116,249,22,140,7,23,197,2,6,4,4,46,114,107,116,27,252,80,159,49, +54,38,2,18,23,204,1,28,248,22,80,23,201,2,23,201,1,87,94,23,201, +1,248,22,73,23,201,2,28,248,22,80,23,201,2,87,94,23,200,1,9,248, +22,74,23,201,1,23,199,2,249,22,147,14,23,195,1,23,196,1,28,248,22, +181,6,23,198,2,87,94,23,194,1,27,28,23,199,2,28,249,22,191,8,23, +201,2,80,158,42,47,80,158,40,48,27,248,22,191,4,23,201,2,28,248,22, +129,14,23,194,2,91,159,39,11,90,161,39,36,11,248,22,150,14,23,197,1, +87,95,83,160,38,11,80,158,44,47,23,203,2,83,160,38,11,80,158,44,48, +192,192,11,11,27,28,23,194,2,23,194,1,87,94,23,194,1,27,247,22,149, +5,28,23,193,2,192,87,94,23,193,1,247,22,170,14,27,250,22,152,2,80, +159,45,44,38,249,22,72,23,205,2,23,199,2,11,28,23,193,2,192,87,94, +23,193,1,91,159,38,11,90,161,38,36,11,248,2,55,248,2,57,23,204,2, +250,22,1,22,147,14,23,199,1,249,22,86,249,22,2,32,0,89,162,8,44, +37,44,9,222,33,59,23,200,1,248,22,82,27,248,22,184,6,23,202,2,28, +249,22,183,3,194,39,28,249,22,187,6,2,28,249,22,139,7,204,249,22,171, +3,198,39,249,22,140,7,250,22,139,7,205,36,249,22,171,3,199,39,2,29, +200,200,28,248,22,129,14,23,198,2,87,94,23,194,1,28,248,22,152,14,23, +198,2,27,248,22,156,14,23,199,2,91,159,39,11,90,161,39,36,11,248,22, +150,14,23,197,2,87,95,23,195,1,23,193,1,28,249,22,180,14,2,60,248, +22,134,14,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,248,22,82, +6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97, +98,115,111,108,117,116,101,41,28,249,22,191,8,248,22,73,23,200,2,2,27, +27,250,22,152,2,80,159,43,44,38,249,22,72,23,203,2,247,22,171,14,11, +28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36,11,27,248, +22,97,23,203,2,248,2,61,248,2,63,23,195,1,90,161,37,38,11,28,248, +22,80,248,22,99,23,203,2,28,248,22,80,23,194,2,249,22,184,14,0,8, +35,114,120,34,91,46,93,34,23,196,2,11,10,27,28,23,196,2,27,248,22, +184,6,23,197,2,28,249,22,183,3,194,39,28,249,22,187,6,2,28,249,22, +139,7,23,200,2,249,22,171,3,198,39,249,22,140,7,250,22,139,7,23,201, +2,36,249,22,171,3,199,39,2,29,23,196,2,23,196,2,28,248,22,80,23, +195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,184,14,0,8,35, +114,120,34,91,46,93,34,23,197,2,27,248,22,184,6,23,197,2,28,249,22, +183,3,194,39,28,249,22,187,6,2,28,249,22,139,7,23,200,2,249,22,171, +3,198,39,249,22,140,7,250,22,139,7,23,201,2,36,249,22,171,3,199,39, +2,29,23,196,2,23,196,2,249,22,140,7,23,197,2,6,4,4,46,114,107, +116,27,28,23,197,1,87,94,23,196,1,249,22,86,28,248,22,80,248,22,99, +23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,86,249,22,2, +32,0,89,162,8,44,37,44,9,222,33,67,248,22,99,23,210,2,23,197,1, +28,248,22,80,23,196,2,87,94,23,195,1,248,22,82,23,197,1,87,94,23, +196,1,23,195,1,27,252,80,159,51,54,38,2,18,23,206,1,248,22,73,23, +200,2,248,22,74,23,200,1,23,200,2,249,22,147,14,23,195,1,23,197,1, +28,249,22,191,8,248,22,73,23,200,2,64,102,105,108,101,27,248,22,156,14, +249,22,154,14,248,22,158,14,248,22,97,23,203,2,27,28,23,203,2,28,249, +22,191,8,23,205,2,80,158,46,47,80,158,44,48,27,248,22,191,4,23,205, +2,28,248,22,129,14,23,194,2,91,159,39,11,90,161,39,36,11,248,22,150, +14,23,197,1,87,95,83,160,38,11,80,158,48,47,23,207,2,83,160,38,11, +80,158,48,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22, +149,5,28,23,193,2,192,87,94,23,193,1,247,22,170,14,91,159,39,11,90, +161,39,36,11,248,22,150,14,23,197,2,87,95,23,195,1,23,193,1,28,249, +22,180,14,2,60,248,22,134,14,23,197,1,249,80,159,45,53,38,23,198,1, +2,30,195,12,87,94,28,28,248,22,129,14,23,194,2,10,248,22,142,8,23, +194,2,87,94,23,199,1,12,28,23,199,2,250,22,162,9,67,114,101,113,117, +105,114,101,249,22,165,7,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,73,23,199,2,6,0,0,23,202, +1,87,94,23,199,1,250,22,163,9,2,18,249,22,165,7,6,13,13,109,111, +100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,73,23,199,2, +6,0,0,23,200,2,27,28,248,22,142,8,23,195,2,249,22,147,8,23,196, +2,36,249,22,156,14,248,22,157,14,23,197,2,11,27,28,248,22,142,8,23, +196,2,249,22,147,8,23,197,2,37,248,80,159,42,55,38,23,195,2,91,159, +39,11,90,161,39,36,11,28,248,22,142,8,23,199,2,250,22,7,2,31,249, +22,147,8,23,203,2,38,2,31,248,22,150,14,23,198,2,87,95,23,195,1, +23,193,1,27,28,248,22,142,8,23,200,2,249,22,147,8,23,201,2,39,249, +80,159,47,53,38,23,197,2,5,0,27,28,248,22,142,8,23,201,2,249,22, +147,8,23,202,2,40,248,22,190,4,23,200,2,27,27,250,22,152,2,80,159, +51,43,38,248,22,141,15,247,22,173,12,11,28,23,193,2,192,87,94,23,193, +1,27,247,22,132,2,87,94,250,22,150,2,80,159,52,43,38,248,22,141,15, +247,22,173,12,195,192,87,95,28,23,208,1,27,250,22,152,2,23,197,2,197, +11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,51,46,38,80,159, +50,46,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,45,38,23, +196,1,27,248,22,141,15,247,22,173,12,249,22,3,83,158,40,20,100,94,89, +162,8,44,37,55,9,226,12,11,2,3,33,68,23,195,1,23,196,1,248,28, +248,22,17,80,159,50,46,38,32,0,89,162,44,37,42,9,222,33,69,80,159, +49,59,37,89,162,44,36,51,9,227,13,9,8,4,3,33,70,250,22,150,2, +23,197,1,197,10,12,28,28,248,22,142,8,23,202,1,11,28,248,22,181,6, +23,206,2,10,28,248,22,57,23,206,2,10,28,248,22,70,23,206,2,249,22, +191,8,248,22,73,23,208,2,2,27,11,250,22,150,2,80,159,50,44,38,28, +248,22,181,6,23,209,2,249,22,72,23,210,1,27,28,23,212,2,28,249,22, +191,8,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53,48,27,248,22, +191,4,23,214,2,28,248,22,129,14,23,194,2,91,159,39,11,90,161,39,36, +11,248,22,150,14,23,197,1,87,95,83,160,38,11,80,158,57,47,23,23,83, +160,38,11,80,158,57,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1, +27,247,22,149,5,28,23,193,2,192,87,94,23,193,1,247,22,170,14,249,22, +72,23,210,1,247,22,171,14,252,22,144,8,23,208,1,23,207,1,23,205,1, +23,203,1,201,12,193,87,96,83,160,38,11,80,158,36,50,248,80,159,37,58, +38,249,22,27,11,80,159,39,52,38,248,22,169,4,80,159,37,51,38,248,22, +148,5,80,159,37,37,37,248,22,164,13,80,159,37,42,37,83,160,38,11,80, +158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,52,38,159,36,20, +105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11,11, +11,11,11,10,38,80,158,36,36,20,105,159,37,16,23,2,2,2,3,30,2, +5,72,112,97,116,104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,97, +116,104,45,97,100,100,45,115,117,102,102,105,120,8,30,2,7,2,8,4,30, +2,7,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,3,2,9,2,10,2,11,2,12,2,13,2,14,2,15, +2,16,2,17,2,18,30,2,19,2,8,4,30,2,5,79,112,97,116,104,45, +114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102,105, +110,100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,97, +108,45,99,97,115,101,45,112,97,116,104,7,2,20,2,21,30,2,19,74,114, +101,112,97,114,97,109,101,116,101,114,105,122,101,5,16,0,16,0,36,16,0, +36,16,12,2,12,2,13,2,10,2,11,2,14,2,15,2,3,2,9,2,2, +2,17,2,16,2,18,48,11,11,39,36,11,11,11,16,2,2,20,2,21,16, +2,11,11,16,2,2,20,2,21,38,38,37,11,11,11,16,0,16,0,16,0, +36,36,11,11,11,11,16,0,16,0,16,0,36,36,16,0,16,15,83,158,36, +16,2,89,162,44,37,45,9,223,0,33,32,80,159,36,59,37,83,158,36,16, +2,248,22,139,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,83, +158,36,16,2,89,162,44,38,8,38,2,3,223,0,33,41,80,159,36,37,37, +83,158,36,16,2,32,0,89,162,8,44,37,42,2,9,222,192,80,159,36,42, +37,83,158,36,16,2,247,22,135,2,80,159,36,43,37,83,158,36,16,2,247, +22,134,2,80,159,36,44,37,83,158,36,16,2,247,22,68,80,159,36,45,37, +83,158,36,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105, +110,103,80,159,36,46,37,83,158,36,16,2,11,80,158,36,47,83,158,36,16, +2,11,80,158,36,48,83,158,36,16,2,32,0,89,162,44,38,8,42,2,16, +222,33,47,80,159,36,49,37,83,158,36,16,2,11,80,158,36,50,83,158,36, +16,2,91,159,38,10,90,161,37,36,10,11,90,161,37,37,10,83,158,39,20, +99,96,2,18,89,162,8,44,37,51,9,224,2,0,33,48,89,162,44,39,49, +9,223,1,33,49,89,162,44,40,8,32,9,224,2,0,33,71,208,80,159,36, +51,37,83,158,36,16,2,89,162,44,36,45,2,20,223,0,33,72,80,159,36, +56,37,83,158,36,16,2,89,162,8,44,36,45,2,21,223,0,33,73,80,159, +36,57,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,5,2,19,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 8399); } diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index da39e2703b..acc8b8d103 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -9494,61 +9494,113 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, UPDATE_THREAD_RSPTR(); scheme_escape_to_continuation(obj, num_rands, rands, NULL); return NULL; - } else if (type == scheme_proc_struct_type) { + } else if ((type == scheme_proc_struct_type) + || ((type == scheme_proc_chaperone_type) + /* Chaperone is for struct fields, not function arguments --- but + the chaperone may guard access to the function as a field inside + the struct. We'll need to keep track of the original object + as we unwrap to discover procedure chaperones. */ + && (SCHEME_VECTORP(((Scheme_Chaperone *)obj)->redirects))) + /* A raw pair is from scheme_apply_chaperone(), propagating the + original object for an applicable structure. */ + || (type == scheme_raw_pair_type)) { int is_method; int check_rands = num_rands; + Scheme_Object *orig_obj; - do { - VACATE_TAIL_BUFFER_USE_RUNSTACK(); + if (SCHEME_RPAIRP(obj)) { + orig_obj = SCHEME_CDR(obj); + obj = SCHEME_CAR(obj); + } else { + orig_obj = obj; + } - UPDATE_THREAD_RSPTR_FOR_ERROR(); /* in case */ + while (1) { + /* Like the apply loop around this one, but we need + to keep track of orig_obj until we get down to the + structure. */ - v = obj; - obj = scheme_extract_struct_procedure(obj, check_rands, rands, &is_method); - if (is_method) { - /* Have to add an extra argument to the front of rands */ - if ((rands == RUNSTACK) && (RUNSTACK != RUNSTACK_START)){ - /* Common case: we can just push self onto the front: */ - rands = PUSH_RUNSTACK(p, RUNSTACK, 1); - rands[0] = v; - } else { - int i; - Scheme_Object **a; + type = SCHEME_TYPE(obj); + if (type == scheme_proc_struct_type) { + do { + VACATE_TAIL_BUFFER_USE_RUNSTACK(); - if (p->tail_buffer && (num_rands < p->tail_buffer_size)) { - /* Use tail-call buffer. Shift in such a way that this works if - rands == p->tail_buffer */ - a = p->tail_buffer; + UPDATE_THREAD_RSPTR_FOR_ERROR(); /* in case */ + + v = obj; + obj = scheme_extract_struct_procedure(orig_obj, check_rands, rands, &is_method); + if (is_method) { + /* Have to add an extra argument to the front of rands */ + if ((rands == RUNSTACK) && (RUNSTACK != RUNSTACK_START)){ + /* Common case: we can just push self onto the front: */ + rands = PUSH_RUNSTACK(p, RUNSTACK, 1); + rands[0] = v; + } else { + int i; + Scheme_Object **a; + + if (p->tail_buffer && (num_rands < p->tail_buffer_size)) { + /* Use tail-call buffer. Shift in such a way that this works if + rands == p->tail_buffer */ + a = p->tail_buffer; + } else { + /* Uncommon general case --- allocate an array */ + UPDATE_THREAD_RSPTR_FOR_GC(); + a = MALLOC_N(Scheme_Object *, num_rands + 1); + } + + for (i = num_rands; i--; ) { + a[i + 1] = rands[i]; + } + a[0] = v; + rands = a; + } + num_rands++; + } + + /* After we check arity once, no need to check again + (which would lead to O(n^2) checking for nested + struct procs): */ + check_rands = -1; + + DO_CHECK_FOR_BREAK(p, UPDATE_THREAD_RSPTR_FOR_GC(); if (rands == p->tail_buffer) make_tail_buffer_safe();); + + break; + } while (SAME_TYPE(scheme_proc_struct_type, SCHEME_TYPE(obj))); + + goto apply_top; + } else { + if (SCHEME_VECTORP(((Scheme_Chaperone *)obj)->redirects)) + obj = ((Scheme_Chaperone *)obj)->prev; + else if (SAME_TYPE(SCHEME_TYPE(((Scheme_Chaperone *)obj)->redirects), scheme_nack_guard_evt_type)) + /* Chaperone is for evt, not function arguments */ + obj = ((Scheme_Chaperone *)obj)->prev; + else { + /* Chaperone is for function arguments */ + VACATE_TAIL_BUFFER_USE_RUNSTACK(); + UPDATE_THREAD_RSPTR(); + v = scheme_apply_chaperone(scheme_make_raw_pair(obj, orig_obj), num_rands, rands, NULL); + + if (SAME_OBJ(v, SCHEME_TAIL_CALL_WAITING)) { + /* Need to stay in this loop, because a tail-call result must + be a tail call to an unwrapped layer, so we'll eventually + need to use orig_obj. */ + obj = p->ku.apply.tail_rator; + num_rands = p->ku.apply.tail_num_rands; + if (check_rands != -1) check_rands = num_rands; + rands = p->ku.apply.tail_rands; + p->ku.apply.tail_rator = NULL; + p->ku.apply.tail_rands = NULL; + RUNSTACK = old_runstack; + RUNSTACK_CHANGED(); } else { - /* Uncommon general case --- allocate an array */ - UPDATE_THREAD_RSPTR_FOR_GC(); - a = MALLOC_N(Scheme_Object *, num_rands + 1); + break; } - - for (i = num_rands; i--; ) { - a[i + 1] = rands[i]; - } - a[0] = v; - rands = a; } - num_rands++; } - - /* After we check arity once, no need to check again - (which would lead to O(n^2) checking for nested - struct procs): */ - check_rands = -1; - - DO_CHECK_FOR_BREAK(p, UPDATE_THREAD_RSPTR_FOR_GC(); if (rands == p->tail_buffer) make_tail_buffer_safe();); - } while (SAME_TYPE(scheme_proc_struct_type, SCHEME_TYPE(obj))); - - goto apply_top; + } } else if (type == scheme_proc_chaperone_type) { - if (SCHEME_VECTORP(((Scheme_Chaperone *)obj)->redirects)) { - /* Chaperone is for struct fields, not function arguments */ - obj = ((Scheme_Chaperone *)obj)->prev; - goto apply_top; - } else if (SAME_TYPE(SCHEME_TYPE(((Scheme_Chaperone *)obj)->redirects), scheme_nack_guard_evt_type)) { + if (SAME_TYPE(SCHEME_TYPE(((Scheme_Chaperone *)obj)->redirects), scheme_nack_guard_evt_type)) { /* Chaperone is for evt, not function arguments */ obj = ((Scheme_Chaperone *)obj)->prev; goto apply_top; diff --git a/src/racket/src/fun.c b/src/racket/src/fun.c index bd421435e1..7a936eadb7 100644 --- a/src/racket/src/fun.c +++ b/src/racket/src/fun.c @@ -4173,8 +4173,8 @@ static Scheme_Object *do_apply_chaperone(Scheme_Object *o, int argc, Scheme_Obje Scheme_Object *scheme_apply_chaperone(Scheme_Object *o, int argc, Scheme_Object **argv, Scheme_Object *auto_val) { const char *what; - Scheme_Chaperone *px = (Scheme_Chaperone *)o; - Scheme_Object *v, *a[1], *a2[3], **argv2, *post, *result_v; + Scheme_Chaperone *px; + Scheme_Object *v, *a[1], *a2[3], **argv2, *post, *result_v, *orig_obj; int c, i, need_restore = 0; if (argv == MZ_RUNSTACK) { @@ -4192,6 +4192,18 @@ Scheme_Object *scheme_apply_chaperone(Scheme_Object *o, int argc, Scheme_Object } } + if (SCHEME_RPAIRP(o)) { + /* An applicable struct, where a layout of struct chaperones + has been removed from the object to apply, but we will + eventually need to extract the procedure from the original + object. */ + orig_obj = SCHEME_CDR(o); + o = SCHEME_CAR(o); + } else { + orig_obj = NULL; + } + px = (Scheme_Chaperone *)o; + if (!(SCHEME_CHAPERONE_FLAGS(px) & SCHEME_CHAPERONE_IS_PROXY)) what = "chaperone"; else @@ -4272,7 +4284,12 @@ Scheme_Object *scheme_apply_chaperone(Scheme_Object *o, int argc, Scheme_Object else return argv2[0]; } else { - return scheme_tail_apply(px->prev, c, argv2); + if (orig_obj) + /* A raw pair tells apply to extract a procedure from orig_obj */ + orig_obj = scheme_make_raw_pair(px->prev, orig_obj); + else + orig_obj = px->prev; + return scheme_tail_apply(orig_obj, c, argv2); } } else { /* First element is a filter for the result(s) */ @@ -4289,7 +4306,12 @@ Scheme_Object *scheme_apply_chaperone(Scheme_Object *o, int argc, Scheme_Object result_v = argv2[0]; v = auto_val; } else { - v = _scheme_apply_multi(px->prev, argc, argv2); + if (orig_obj) + /* A raw pair tells apply to extract a procedure from orig_obj */ + orig_obj = scheme_make_raw_pair(px->prev, orig_obj); + else + orig_obj = px->prev; + v = _scheme_apply_multi(orig_obj, argc, argv2); result_v = NULL; } if (v == SCHEME_MULTIPLE_VALUES) { diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 071b76db16..ffec73e7f7 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1010 +#define EXPECTED_PRIM_COUNT 1011 #define EXPECTED_UNSAFE_COUNT 69 #define EXPECTED_FLFXNUM_COUNT 60 #define EXPECTED_FUTURES_COUNT 5 diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 7100115d92..437ff36a98 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -384,6 +384,7 @@ THREAD_LOCAL_DECL(extern Scheme_Object *scheme_system_idle_channel); extern Scheme_Object *scheme_input_port_property, *scheme_output_port_property; extern Scheme_Object *scheme_equal_property; +extern Scheme_Object *scheme_proxy_of_property; extern Scheme_Object *scheme_reduced_procedure_struct; diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index ab470fd990..ec801f25c9 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.0.1.5" +#define MZSCHEME_VERSION "5.0.1.6" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 1 -#define MZSCHEME_VERSION_W 5 +#define MZSCHEME_VERSION_W 6 #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/src/racket/src/struct.c b/src/racket/src/struct.c index bcaccf92c0..8225f14480 100644 --- a/src/racket/src/struct.c +++ b/src/racket/src/struct.c @@ -32,6 +32,7 @@ READ_ONLY Scheme_Object *scheme_source_property; READ_ONLY Scheme_Object *scheme_input_port_property; READ_ONLY Scheme_Object *scheme_output_port_property; READ_ONLY Scheme_Object *scheme_equal_property; +READ_ONLY Scheme_Object *scheme_proxy_of_property; READ_ONLY Scheme_Object *scheme_make_struct_type_proc; READ_ONLY Scheme_Object *scheme_current_inspector_proc; READ_ONLY Scheme_Object *scheme_recur_symbol; @@ -87,6 +88,7 @@ static Scheme_Object *struct_type_property_p(int argc, Scheme_Object *argv[]); static Scheme_Object *chaperone_property_p(int argc, Scheme_Object *argv[]); static Scheme_Object *check_evt_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_equal_property_value_ok(int argc, Scheme_Object *argv[]); +static Scheme_Object *check_proxy_of_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_write_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_print_attribute_property_value_ok(int argc, Scheme_Object *argv[]); static Scheme_Object *check_input_port_property_value_ok(int argc, Scheme_Object *argv[]); @@ -345,6 +347,16 @@ scheme_init_struct (Scheme_Env *env) scheme_add_global_constant("prop:equal+hash", scheme_equal_property, env); } + { + guard = scheme_make_prim_w_arity(check_proxy_of_property_value_ok, + "guard-for-prop:proxy-of", + 2, 2); + REGISTER_SO(scheme_proxy_of_property); + scheme_proxy_of_property = scheme_make_struct_type_property_w_guard(scheme_intern_symbol("proxy-of"), + guard); + scheme_add_global_constant("prop:proxy-of", scheme_proxy_of_property, env); + } + { REGISTER_SO(scheme_input_port_property); REGISTER_SO(scheme_output_port_property); @@ -1490,6 +1502,25 @@ static Scheme_Object *check_equal_property_value_ok(int argc, Scheme_Object *arg return v; } +static Scheme_Object *check_proxy_of_property_value_ok(int argc, Scheme_Object *argv[]) +{ + /* This is the guard for prop:proxy-of */ + Scheme_Object *v; + + v = argv[0]; + + if (!scheme_check_proc_arity(NULL, 1, 0, argc, argv)) { + scheme_arg_mismatch("guard-for-prop:proxy-of", + "not a procedure of arity 1: ", + v); + } + + /* Add a tag to track origin of the proxy-of property: */ + v = scheme_make_pair(scheme_make_symbol("tag"), v); + + return v; +} + /*========================================================================*/ /* writeable structs */ /*========================================================================*/ @@ -4821,15 +4852,24 @@ Scheme_Struct_Type *scheme_lookup_prefab_type(Scheme_Object *key, int field_coun Scheme_Object *scheme_extract_struct_procedure(Scheme_Object *obj, int num_rands, Scheme_Object **rands, int *is_method) { Scheme_Struct_Type *stype; - Scheme_Object *a, *proc; + Scheme_Object *plain_obj, *a, *proc; int meth_wrap = 0; - stype = ((Scheme_Structure *)obj)->stype; + if (SCHEME_CHAPERONEP(obj)) + plain_obj = SCHEME_CHAPERONE_VAL(obj); + else + plain_obj = obj; + + stype = ((Scheme_Structure *)plain_obj)->stype; a = stype->proc_attr; if (SCHEME_INTP(a)) { *is_method = 0; - proc = ((Scheme_Structure *)obj)->slots[SCHEME_INT_VAL(a)]; + if (!SAME_OBJ(plain_obj, obj)) { + proc = chaperone_struct_ref("struct-ref", obj, SCHEME_INT_VAL(a)); + } else { + proc = ((Scheme_Structure *)obj)->slots[SCHEME_INT_VAL(a)]; + } } else { *is_method = 1; proc = a; @@ -4843,7 +4883,7 @@ Scheme_Object *scheme_extract_struct_procedure(Scheme_Object *obj, int num_rands * account for that. */ if (scheme_reduced_procedure_struct - && scheme_is_struct_instance(scheme_reduced_procedure_struct, obj)) + && scheme_is_struct_instance(scheme_reduced_procedure_struct, plain_obj)) meth_wrap = SCHEME_TRUEP(((Scheme_Structure *)obj)->slots[3]); scheme_wrong_count_m((char *)obj,