From 548e45408b67ee019af4bf19bb4784d50f145ea8 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 8 May 2008 20:29:56 +0000 Subject: [PATCH] regexp-replace* handles empty matches; empty-match handling documented svn: r9751 --- .../private/language-configuration.ss | 4 +- collects/drscheme/private/language.ss | 5 +- collects/r5rs/run.ss | 4 +- .../scribblings/reference/namespaces.scrbl | 15 +- collects/scribblings/reference/regexps.scrbl | 16 +- .../english-string-constants.ss | 4 +- collects/tests/mzscheme/basic.ss | 8 + collects/tests/mzscheme/stx.ss | 2 +- src/mzscheme/src/cstartup.inc | 482 +++++++++--------- src/mzscheme/src/module.c | 32 +- src/mzscheme/src/regexp.c | 70 ++- src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schvers.h | 4 +- 13 files changed, 371 insertions(+), 277 deletions(-) diff --git a/collects/drscheme/private/language-configuration.ss b/collects/drscheme/private/language-configuration.ss index 964a0b40cf..10aa69f5a2 100644 --- a/collects/drscheme/private/language-configuration.ss +++ b/collects/drscheme/private/language-configuration.ss @@ -1340,10 +1340,10 @@ [parent (new group-box-panel% [parent p] - [label (string-constant assume-primitives-group-box-label)] + [label (string-constant enforce-primitives-group-box-label)] [stretchable-height #f] [stretchable-width #f])] - [label (string-constant assume-primitives-check-box-label)])]) + [label (string-constant enforce-primitives-check-box-label)])]) (case-lambda [() (extend-simple-settings (base-config) (send assume-cb get-value))] diff --git a/collects/drscheme/private/language.ss b/collects/drscheme/private/language.ss index 1855a5eb9e..d5e4430879 100644 --- a/collects/drscheme/private/language.ss +++ b/collects/drscheme/private/language.ss @@ -892,10 +892,9 @@ (write `(let () ;; cannot use begin, since it gets flattened to top-level (and re-compiled!) ,@(if use-copy? (list - `(namespace-require ',module-language-spec) `(namespace-require/copy ',module-language-spec)) (list - `(namespace-require ',module-language-spec))) + `(namespace-require/constant ',module-language-spec))) ,@(if transformer-module-language-spec (list `(namespace-require `(for-syntax ,transformer-module-language-spec))) (list)) @@ -1130,7 +1129,7 @@ (newline))]) (if use-copy? (namespace-require/copy module-spec) - (namespace-require module-spec)) + (namespace-require/constant module-spec)) (when transformer-module-spec (namespace-require `(for-syntax ,transformer-module-spec))))))) diff --git a/collects/r5rs/run.ss b/collects/r5rs/run.ss index e6c9a38be4..57a2056924 100644 --- a/collects/r5rs/run.ss +++ b/collects/r5rs/run.ss @@ -6,7 +6,7 @@ (define-values (main args) (command-line #:once-each - [("--no-prim") "(slow) disable assumption that primitives are never redefined" + [("--no-prim") "allow redefinition of primitives (implies worse performance)" (slow #t)] #:handlers (case-lambda @@ -16,7 +16,7 @@ (if (slow) (namespace-require/copy 'r5rs/init) - (namespace-require 'r5rs/init)) + (namespace-require/constant 'r5rs/init)) (current-command-line-arguments (apply vector-immutable args)) (if main diff --git a/collects/scribblings/reference/namespaces.scrbl b/collects/scribblings/reference/namespaces.scrbl index 8699020c36..c8e0d7399a 100644 --- a/collects/scribblings/reference/namespaces.scrbl +++ b/collects/scribblings/reference/namespaces.scrbl @@ -183,8 +183,19 @@ current namespace corresponds to a module body.} void?]{ Like @scheme[namespace-require] for syntax exported from the module, -but exported variables are treated differently: the export's current -value is copied to a top-level variable in the current namespace.} +but exported variables at @tech{phase level} 0 are treated differently: the +export's current value is copied to a top-level variable in the +current namespace.} + + +@defproc[(namespace-require/constant [quoted-raw-require-spec any/c]) + void?]{ + +Like @scheme[namespace-require], but for each exported variable at +@tech{phase level} 0, the export's value is copied to a corresponding +top-level variable that is made immutable. Despite setting the +top-level variable, the corresponding identifier is bound as +imported.} @defproc[(namespace-require/expansion-time [quoted-raw-require-spec any/c]) diff --git a/collects/scribblings/reference/regexps.scrbl b/collects/scribblings/reference/regexps.scrbl index 9083d21ac8..6f5522e63c 100644 --- a/collects/scribblings/reference/regexps.scrbl +++ b/collects/scribblings/reference/regexps.scrbl @@ -309,8 +309,12 @@ Like @scheme[regexp-match], but the result is a list of strings or byte strings corresponding to a sequence of matches of @scheme[pattern] in @scheme[input]. (Unlike @scheme[regexp-match], results for parenthesized sub-patterns in @scheme[pattern] are not -returned.) If @scheme[pattern] matches a zero-length string or byte -sequence along the way, the @exnraise[exn:fail]. +returned.) + +If @scheme[pattern] matches a zero-length string or byte sequence, and +if it is at the beginning or end of the input, then the match does not +count. Otherwise, one character or byte in the input is skipped before +attempting another match. If @scheme[input] contains no matches (in the range @scheme[start-pos] to @scheme[end-pos]), @scheme[null] is returned. Otherwise, each item @@ -522,8 +526,8 @@ strings (if @scheme[pattern] is a string or character regexp and @scheme[input] is a string) or byte strings (otherwise) from in @scheme[input] that are separated by matches to @scheme[pattern]. Adjacent matches are separated with @scheme[""] or -@scheme[#""]. If @scheme[pattern] matches a zero-length string or byte -sequence along the way, the @exnraise[exn:fail]. +@scheme[#""]. Zero-length matches are treated the same as in +@scheme[regexp-match*]. If @scheme[input] contains no matches (in the range @scheme[start-pos] to @scheme[end-pos]), the result is a list containing @scheme[input]'s @@ -613,8 +617,8 @@ Like @scheme[regexp-replace], except that every instance of instead of just the first match. Only non-overlapping instances of @scheme[pattern] in @scheme[input] are replaced, so instances of @scheme[pattern] within inserted strings are @italic{not} replaced -recursively. If, in the process of repeating matches, @scheme[pattern] -matches an empty string, the @exnraise[exn:fail]. +recursively. Zero-length matches are treated the same as in +@scheme[regexp-match*]. @examples[ (regexp-replace* "([Mm])i ([a-zA-Z]*)" "mi cerveza Mi Mi Mi" diff --git a/collects/string-constants/english-string-constants.ss b/collects/string-constants/english-string-constants.ss index 80ded983e8..dae28a6cb2 100644 --- a/collects/string-constants/english-string-constants.ss +++ b/collects/string-constants/english-string-constants.ss @@ -970,8 +970,8 @@ please adhere to these guidelines: (use-mixed-fractions "Mixed fractions") (use-repeating-decimals "Repeating decimals") (decimal-notation-for-rationals "Use decimal notation for rationals") - (assume-primitives-group-box-label "Initial Bindings") - (assume-primitives-check-box-label "Assume initial bindings never change") + (enforce-primitives-group-box-label "Initial Bindings") + (enforce-primitives-check-box-label "Disallow redefinition of initial bindings") ; used in the bottom left of the drscheme frame ; used the popup menu from the just above; greyed out and only diff --git a/collects/tests/mzscheme/basic.ss b/collects/tests/mzscheme/basic.ss index 20e1fb912f..1dc84e48ef 100644 --- a/collects/tests/mzscheme/basic.ss +++ b/collects/tests/mzscheme/basic.ss @@ -1058,6 +1058,14 @@ (test '(#"") regexp-match "$" (open-input-string "123") 3) (test '(#"") regexp-match-peek "" (open-input-string "123") 3) +(test "1b2b3" regexp-replace* "" "123" "b") +(test "1b23" regexp-replace* "(?=2)" "123" "b") +(test "ax\u03BB" regexp-replace* "" "a\u03BB" "x") +(test "ax\u03BBxb" regexp-replace* "" "a\u03BBb" "x") +(test #"ax\316x\273xb" regexp-replace* #"" "a\u03BBb" #"x") +(test "1=2===3" regexp-replace* "2*" "123" (lambda (s) (string-append "=" s "="))) +(test "1=2===3==4" regexp-replace* "2*" "1234" (lambda (s) (string-append "=" s "="))) + ;; Test weird port offsets: (define (test-weird-offset regexp-match regexp-match-positions) (test #f regexp-match "e" (open-input-string "")) diff --git a/collects/tests/mzscheme/stx.ss b/collects/tests/mzscheme/stx.ss index f6173ce084..ff297e1630 100644 --- a/collects/tests/mzscheme/stx.ss +++ b/collects/tests/mzscheme/stx.ss @@ -467,7 +467,7 @@ (let ([b (identifier-binding (syntax-case (expand #'(module m (lib "lang/htdp-intermediate.ss") cons)) () - [(mod m beg (#%mod-beg cons)) + [(mod m beg (#%mod-beg (app call-w-vals (lam () cons) prnt))) (let ([s (syntax cons)]) (test 'cons syntax-e s) s)]))]) diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 267c13aaa4..07bef3eeed 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,24 +1,24 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,51,50,0,0,0,1,0,0,6,0, -9,0,16,0,20,0,25,0,28,0,33,0,46,0,53,0,60,0,64,0,69, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,50,0,0,0,1,0,0,6,0, +9,0,16,0,20,0,25,0,38,0,41,0,46,0,53,0,60,0,64,0,69, 0,78,0,84,0,98,0,112,0,115,0,119,0,121,0,132,0,134,0,148,0, 155,0,177,0,179,0,193,0,253,0,23,1,32,1,41,1,51,1,68,1,107, 1,146,1,215,1,4,2,92,2,137,2,142,2,162,2,53,3,73,3,124,3, 190,3,75,4,233,4,20,5,31,5,110,5,0,0,120,7,0,0,65,98,101, 103,105,110,29,11,11,66,100,101,102,105,110,101,63,97,110,100,64,108,101,116, -42,62,111,114,64,99,111,110,100,72,112,97,114,97,109,101,116,101,114,105,122, -101,66,108,101,116,114,101,99,66,117,110,108,101,115,115,63,108,101,116,64,119, +42,72,112,97,114,97,109,101,116,101,114,105,122,101,62,111,114,64,99,111,110, +100,66,108,101,116,114,101,99,66,117,110,108,101,115,115,63,108,101,116,64,119, 104,101,110,68,104,101,114,101,45,115,116,120,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,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,98,10,35,11,8,184,211,94,159,2,16,35,35,159,2,15,35,35,16,20, -2,3,2,2,2,6,2,2,2,4,2,2,2,5,2,2,2,9,2,2,2, -7,2,2,2,8,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,36, -11,8,184,211,93,159,2,15,35,36,16,2,2,13,161,2,2,36,2,13,2, -2,2,13,97,10,11,11,8,184,211,16,0,97,10,37,11,8,184,211,16,0, +115,98,10,35,11,8,181,216,94,159,2,16,35,35,159,2,15,35,35,16,20, +2,3,2,2,2,7,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2, +9,2,2,2,8,2,2,2,10,2,2,2,11,2,2,2,12,2,2,97,36, +11,8,181,216,93,159,2,15,35,36,16,2,2,13,161,2,2,36,2,13,2, +2,2,13,97,10,11,11,8,181,216,16,0,97,10,37,11,8,181,216,16,0, 13,16,4,35,29,11,11,2,2,11,18,98,64,104,101,114,101,8,31,8,30, 8,29,8,28,8,27,27,248,22,189,3,23,196,1,249,22,182,3,80,158,38, 35,251,22,73,2,17,248,22,88,23,200,2,12,249,22,63,2,1,248,22,90, @@ -28,14 +28,14 @@ 36,35,36,28,248,22,71,248,22,65,23,195,2,248,22,64,193,249,22,182,3, 80,158,38,35,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,4,248, 22,65,23,202,1,11,18,100,10,8,31,8,30,8,29,8,28,8,27,16,4, -11,11,2,18,3,1,7,101,110,118,55,56,52,50,16,4,11,11,2,19,3, -1,7,101,110,118,55,56,52,51,27,248,22,65,248,22,189,3,23,197,1,28, +11,11,2,18,3,1,7,101,110,118,55,57,54,53,16,4,11,11,2,19,3, +1,7,101,110,118,55,57,54,54,27,248,22,65,248,22,189,3,23,197,1,28, 248,22,71,23,194,2,20,15,159,36,35,36,28,248,22,71,248,22,65,23,195, 2,248,22,64,193,249,22,182,3,80,158,38,35,250,22,73,2,20,248,22,73, 249,22,73,248,22,73,2,21,248,22,64,23,202,2,251,22,73,2,17,2,21, -2,21,249,22,63,2,6,248,22,65,23,205,1,18,100,11,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,56,52,53, -16,4,11,11,2,19,3,1,7,101,110,118,55,56,52,54,248,22,189,3,193, +2,21,249,22,63,2,7,248,22,65,23,205,1,18,100,11,8,31,8,30,8, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,57,54,56, +16,4,11,11,2,19,3,1,7,101,110,118,55,57,54,57,248,22,189,3,193, 27,248,22,189,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27, 248,22,65,248,22,189,3,23,197,1,249,22,182,3,80,158,38,35,28,248,22, 51,248,22,183,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44, @@ -59,14 +59,14 @@ 107,45,115,101,116,45,102,105,114,115,116,11,2,24,201,250,22,74,2,20,9, 248,22,65,203,27,248,22,65,248,22,189,3,23,197,1,28,248,22,71,23,194, 2,20,15,159,36,35,36,249,22,182,3,80,158,38,35,27,248,22,189,3,248, -22,64,23,198,2,28,249,22,149,8,62,61,62,248,22,183,3,248,22,88,23, +22,64,23,198,2,28,249,22,150,8,62,61,62,248,22,183,3,248,22,88,23, 197,2,250,22,73,2,20,248,22,73,249,22,73,21,93,2,25,248,22,64,199, -250,22,74,2,7,249,22,73,2,25,249,22,73,248,22,97,203,2,25,248,22, -65,202,251,22,73,2,17,28,249,22,149,8,248,22,183,3,248,22,64,23,201, +250,22,74,2,8,249,22,73,2,25,249,22,73,248,22,97,203,2,25,248,22, +65,202,251,22,73,2,17,28,249,22,150,8,248,22,183,3,248,22,64,23,201, 2,64,101,108,115,101,10,248,22,64,23,198,2,250,22,74,2,20,9,248,22, -65,23,201,1,249,22,63,2,7,248,22,65,23,203,1,99,8,31,8,30,8, -29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,56,54,56, -16,4,11,11,2,19,3,1,7,101,110,118,55,56,54,57,18,158,94,10,64, +65,23,201,1,249,22,63,2,8,248,22,65,23,203,1,99,8,31,8,30,8, +29,8,28,8,27,16,4,11,11,2,18,3,1,7,101,110,118,55,57,57,49, +16,4,11,11,2,19,3,1,7,101,110,118,55,57,57,50,18,158,94,10,64, 118,111,105,100,8,47,27,248,22,65,248,22,189,3,196,249,22,182,3,80,158, 38,35,28,248,22,51,248,22,183,3,248,22,64,197,250,22,73,2,26,248,22, 73,248,22,64,199,248,22,88,198,27,248,22,183,3,248,22,64,197,250,22,73, @@ -83,23 +83,23 @@ 159,36,2,2,2,13,16,0,11,16,5,93,2,12,89,162,8,44,36,52,9, 223,0,33,34,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16,0, 11,16,5,93,2,4,89,162,8,44,36,52,9,223,0,33,35,35,20,103,159, -35,16,1,20,25,159,36,2,2,2,13,16,1,33,36,11,16,5,93,2,6, +35,16,1,20,25,159,36,2,2,2,13,16,1,33,36,11,16,5,93,2,7, 89,162,8,44,36,55,9,223,0,33,37,35,20,103,159,35,16,1,20,25,159, 36,2,2,2,13,16,1,33,38,11,16,5,93,2,11,89,162,8,44,36,57, 9,223,0,33,41,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16, 0,11,16,5,93,2,9,89,162,8,44,36,52,9,223,0,33,43,35,20,103, 159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16,5,93,2,5,89, 162,8,44,36,53,9,223,0,33,44,35,20,103,159,35,16,1,20,25,159,36, -2,2,2,13,16,0,11,16,5,93,2,8,89,162,8,44,36,54,9,223,0, +2,2,2,13,16,0,11,16,5,93,2,6,89,162,8,44,36,54,9,223,0, 33,45,35,20,103,159,35,16,1,20,25,159,36,2,2,2,13,16,0,11,16, -5,93,2,7,89,162,8,44,36,57,9,223,0,33,46,35,20,103,159,35,16, +5,93,2,8,89,162,8,44,36,57,9,223,0,33,46,35,20,103,159,35,16, 1,20,25,159,36,2,2,2,13,16,1,33,48,11,16,5,93,2,3,89,162, 8,44,36,53,9,223,0,33,49,35,20,103,159,35,16,1,20,25,159,36,2, 2,2,13,16,0,11,16,0,94,2,15,2,16,93,2,15,9,9,35,0}; EVAL_ONE_SIZED_STR((char *)expr, 2035); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,51,59,0,0,0,1,0,0,3,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,59,0,0,0,1,0,0,3,0, 16,0,21,0,38,0,53,0,71,0,87,0,97,0,115,0,135,0,151,0,169, 0,200,0,229,0,251,0,9,1,15,1,29,1,34,1,44,1,52,1,80,1, 112,1,157,1,202,1,226,1,9,2,11,2,68,2,158,3,199,3,33,5,137, @@ -131,177 +131,177 @@ 111,114,32,98,121,116,101,32,115,116,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,158,36,50, -250,80,158,39,51,249,22,27,11,80,158,41,50,22,157,12,10,248,22,133,5, -23,196,2,28,248,22,175,5,23,194,2,12,87,94,248,22,152,8,23,194,1, +250,80,158,39,51,249,22,27,11,80,158,41,50,22,158,12,10,248,22,134,5, +23,196,2,28,248,22,176,5,23,194,2,12,87,94,248,22,153,8,23,194,1, 248,80,159,37,53,36,195,28,248,22,71,23,195,2,9,27,248,22,64,23,196, -2,27,28,248,22,138,13,23,195,2,23,194,1,28,248,22,137,13,23,195,2, -249,22,139,13,23,196,1,250,80,158,42,48,248,22,153,13,2,20,11,10,250, -80,158,40,48,248,22,153,13,2,20,23,197,1,10,28,23,193,2,249,22,63, -248,22,141,13,249,22,139,13,23,198,1,247,22,154,13,27,248,22,65,23,200, -1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,138, -13,23,195,2,23,194,1,28,248,22,137,13,23,195,2,249,22,139,13,23,196, -1,250,80,158,47,48,248,22,153,13,2,20,11,10,250,80,158,45,48,248,22, -153,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,141,13,249,22, -139,13,23,198,1,247,22,154,13,248,80,159,45,52,36,248,22,65,23,199,1, +2,27,28,248,22,139,13,23,195,2,23,194,1,28,248,22,138,13,23,195,2, +249,22,140,13,23,196,1,250,80,158,42,48,248,22,154,13,2,20,11,10,250, +80,158,40,48,248,22,154,13,2,20,23,197,1,10,28,23,193,2,249,22,63, +248,22,142,13,249,22,140,13,23,198,1,247,22,155,13,27,248,22,65,23,200, +1,28,248,22,71,23,194,2,9,27,248,22,64,23,195,2,27,28,248,22,139, +13,23,195,2,23,194,1,28,248,22,138,13,23,195,2,249,22,140,13,23,196, +1,250,80,158,47,48,248,22,154,13,2,20,11,10,250,80,158,45,48,248,22, +154,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,142,13,249,22, +140,13,23,198,1,247,22,155,13,248,80,159,45,52,36,248,22,65,23,199,1, 87,94,23,193,1,248,80,159,43,52,36,248,22,65,23,197,1,87,94,23,193, 1,27,248,22,65,23,198,1,28,248,22,71,23,194,2,9,27,248,22,64,23, -195,2,27,28,248,22,138,13,23,195,2,23,194,1,28,248,22,137,13,23,195, -2,249,22,139,13,23,196,1,250,80,158,45,48,248,22,153,13,2,20,11,10, -250,80,158,43,48,248,22,153,13,2,20,23,197,1,10,28,23,193,2,249,22, -63,248,22,141,13,249,22,139,13,23,198,1,247,22,154,13,248,80,159,43,52, -36,248,22,65,23,199,1,248,80,159,41,52,36,248,22,65,196,27,248,22,178, -12,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,144,6,23,195, -2,27,248,22,136,13,195,28,192,192,248,22,137,13,195,11,87,94,28,28,248, -22,179,12,23,195,2,10,27,248,22,178,12,23,196,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,144,6,23,196,2,27,248,22,136,13,23,197,2,28, -23,193,2,192,87,94,23,193,1,248,22,137,13,23,197,2,11,12,250,22,179, +195,2,27,28,248,22,139,13,23,195,2,23,194,1,28,248,22,138,13,23,195, +2,249,22,140,13,23,196,1,250,80,158,45,48,248,22,154,13,2,20,11,10, +250,80,158,43,48,248,22,154,13,2,20,23,197,1,10,28,23,193,2,249,22, +63,248,22,142,13,249,22,140,13,23,198,1,247,22,155,13,248,80,159,43,52, +36,248,22,65,23,199,1,248,80,159,41,52,36,248,22,65,196,27,248,22,179, +12,23,195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145,6,23,195, +2,27,248,22,137,13,195,28,192,192,248,22,138,13,195,11,87,94,28,28,248, +22,180,12,23,195,2,10,27,248,22,179,12,23,196,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28, +23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180, 8,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,179,12,23,195,2,249,22,149,8,248,22,180,12,23, -197,2,2,21,249,22,149,8,247,22,163,7,2,21,27,28,248,22,144,6,23, -196,2,23,195,2,248,22,153,7,248,22,183,12,23,197,2,28,249,22,166,13, +23,197,2,28,28,248,22,180,12,23,195,2,249,22,150,8,248,22,181,12,23, +197,2,2,21,249,22,150,8,247,22,164,7,2,21,27,28,248,22,145,6,23, +196,2,23,195,2,248,22,154,7,248,22,184,12,23,197,2,28,249,22,167,13, 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,144,6,195,248,22,186,12,195,194,27,248,22,183, -6,23,195,1,249,22,187,12,248,22,156,7,250,22,172,13,0,6,35,114,120, -34,47,34,28,249,22,166,13,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,172,13, +93,34,23,195,2,28,248,22,145,6,195,248,22,187,12,195,194,27,248,22,184, +6,23,195,1,249,22,188,12,248,22,157,7,250,22,173,13,0,6,35,114,120, +34,47,34,28,249,22,167,13,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,173,13, 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,158,43,36,2,21,28,248,22,144,6,194,248, -22,186,12,194,193,87,94,28,27,248,22,178,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,144,6,23,196,2,27,248,22,136,13,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,137,13,23,197,2,11,12,250,22, -179,8,23,196,2,2,22,23,197,2,28,248,22,136,13,23,195,2,12,248,22, -133,11,249,22,142,10,248,22,173,6,250,22,128,7,2,23,23,200,1,23,201, -1,247,22,23,87,94,28,27,248,22,178,12,23,196,2,28,23,193,2,192,87, -94,23,193,1,28,248,22,144,6,23,196,2,27,248,22,136,13,23,197,2,28, -23,193,2,192,87,94,23,193,1,248,22,137,13,23,197,2,11,12,250,22,179, -8,23,196,2,2,22,23,197,2,28,248,22,136,13,23,195,2,12,248,22,133, -11,249,22,142,10,248,22,173,6,250,22,128,7,2,23,23,200,1,23,201,1, -247,22,23,87,94,87,94,28,27,248,22,178,12,23,196,2,28,23,193,2,192, -87,94,23,193,1,28,248,22,144,6,23,196,2,27,248,22,136,13,23,197,2, -28,23,193,2,192,87,94,23,193,1,248,22,137,13,23,197,2,11,12,250,22, -179,8,195,2,22,23,197,2,28,248,22,136,13,23,195,2,12,248,22,133,11, -249,22,142,10,248,22,173,6,250,22,128,7,2,23,199,23,201,1,247,22,23, -249,22,3,89,162,8,44,36,49,9,223,2,33,34,196,248,22,133,11,249,22, -172,10,23,196,1,247,22,23,87,94,250,80,159,38,39,36,2,7,196,197,251, +23,202,1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,145,6,194,248, +22,187,12,194,193,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192, +87,94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2, +28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22, +180,8,23,196,2,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22, +134,11,249,22,143,10,248,22,174,6,250,22,129,7,2,23,23,200,1,23,201, +1,247,22,23,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2,28, +23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22,180, +8,23,196,2,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134, +11,249,22,143,10,248,22,174,6,250,22,129,7,2,23,23,200,1,23,201,1, +247,22,23,87,94,87,94,28,27,248,22,179,12,23,196,2,28,23,193,2,192, +87,94,23,193,1,28,248,22,145,6,23,196,2,27,248,22,137,13,23,197,2, +28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,197,2,11,12,250,22, +180,8,195,2,22,23,197,2,28,248,22,137,13,23,195,2,12,248,22,134,11, +249,22,143,10,248,22,174,6,250,22,129,7,2,23,199,23,201,1,247,22,23, +249,22,3,89,162,8,44,36,49,9,223,2,33,34,196,248,22,134,11,249,22, +173,10,23,196,1,247,22,23,87,94,250,80,159,38,39,36,2,7,196,197,251, 80,159,39,41,36,2,7,32,0,89,162,8,44,36,44,9,222,33,36,197,198, 32,38,89,162,43,41,58,65,99,108,111,111,112,222,33,39,28,248,22,71,23, -199,2,87,94,23,198,1,248,23,196,1,251,22,128,7,2,24,23,199,1,28, -248,22,71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,132,13,23, -204,1,23,205,1,23,198,1,27,249,22,132,13,248,22,64,23,202,2,23,199, -2,28,248,22,191,12,23,194,2,27,250,22,1,22,132,13,23,197,1,23,202, -2,28,248,22,191,12,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202, -1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,128,7, +199,2,87,94,23,198,1,248,23,196,1,251,22,129,7,2,24,23,199,1,28, +248,22,71,23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,133,13,23, +204,1,23,205,1,23,198,1,27,249,22,133,13,248,22,64,23,202,2,23,199, +2,28,248,22,128,13,23,194,2,27,250,22,1,22,133,13,23,197,1,23,202, +2,28,248,22,128,13,23,194,2,192,87,94,23,193,1,27,248,22,65,23,202, +1,28,248,22,71,23,194,2,87,94,23,193,1,248,23,199,1,251,22,129,7, 2,24,23,202,1,28,248,22,71,23,206,2,87,94,23,205,1,23,204,1,250, -22,1,22,132,13,23,207,1,23,208,1,23,201,1,27,249,22,132,13,248,22, -64,23,197,2,23,202,2,28,248,22,191,12,23,194,2,27,250,22,1,22,132, -13,23,197,1,204,28,248,22,191,12,193,192,253,2,38,203,204,205,206,23,15, +22,1,22,133,13,23,207,1,23,208,1,23,201,1,27,249,22,133,13,248,22, +64,23,197,2,23,202,2,28,248,22,128,13,23,194,2,27,250,22,1,22,133, +13,23,197,1,204,28,248,22,128,13,193,192,253,2,38,203,204,205,206,23,15, 248,22,65,201,253,2,38,202,203,204,205,206,248,22,65,200,87,94,23,193,1, 27,248,22,65,23,201,1,28,248,22,71,23,194,2,87,94,23,193,1,248,23, -198,1,251,22,128,7,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23, -204,1,23,203,1,250,22,1,22,132,13,23,206,1,23,207,1,23,200,1,27, -249,22,132,13,248,22,64,23,197,2,23,201,2,28,248,22,191,12,23,194,2, -27,250,22,1,22,132,13,23,197,1,203,28,248,22,191,12,193,192,253,2,38, +198,1,251,22,129,7,2,24,23,201,1,28,248,22,71,23,205,2,87,94,23, +204,1,23,203,1,250,22,1,22,133,13,23,206,1,23,207,1,23,200,1,27, +249,22,133,13,248,22,64,23,197,2,23,201,2,28,248,22,128,13,23,194,2, +27,250,22,1,22,133,13,23,197,1,203,28,248,22,128,13,193,192,253,2,38, 202,203,204,205,206,248,22,65,201,253,2,38,201,202,203,204,205,248,22,65,200, -27,247,22,155,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,179, -12,23,194,2,10,27,248,22,178,12,23,195,2,28,23,193,2,192,87,94,23, -193,1,28,248,22,144,6,23,195,2,27,248,22,136,13,23,196,2,28,23,193, -2,192,87,94,23,193,1,248,22,137,13,23,196,2,11,12,252,22,179,8,23, -200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,144,6,23,195,2,10, -248,22,132,7,23,195,2,87,94,23,194,1,12,252,22,179,8,23,200,2,2, -26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,135,13, -23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,180,8,23,201,1,2, +27,247,22,156,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,180, +12,23,194,2,10,27,248,22,179,12,23,195,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,145,6,23,195,2,27,248,22,137,13,23,196,2,28,23,193, +2,192,87,94,23,193,1,248,22,138,13,23,196,2,11,12,252,22,180,8,23, +200,2,2,25,35,23,198,2,23,199,2,28,28,248,22,145,6,23,195,2,10, +248,22,133,7,23,195,2,87,94,23,194,1,12,252,22,180,8,23,200,2,2, +26,36,23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,136,13, +23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,181,8,23,201,1,2, 27,23,199,1,249,22,7,194,195,91,159,37,11,90,161,37,35,11,87,95,28, -28,248,22,179,12,23,196,2,10,27,248,22,178,12,23,197,2,28,23,193,2, -192,87,94,23,193,1,28,248,22,144,6,23,197,2,27,248,22,136,13,23,198, -2,28,23,193,2,192,87,94,23,193,1,248,22,137,13,23,198,2,11,12,252, -22,179,8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,144,6,23, -197,2,10,248,22,132,7,23,197,2,12,252,22,179,8,2,10,2,26,36,23, -200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,135,13,23,199,2, -87,94,23,195,1,87,94,28,23,193,2,12,250,22,180,8,2,10,2,27,23, -201,2,249,22,7,23,195,1,23,196,1,27,249,22,188,12,250,22,171,13,0, +28,248,22,180,12,23,196,2,10,27,248,22,179,12,23,197,2,28,23,193,2, +192,87,94,23,193,1,28,248,22,145,6,23,197,2,27,248,22,137,13,23,198, +2,28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,198,2,11,12,252, +22,180,8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,145,6,23, +197,2,10,248,22,133,7,23,197,2,12,252,22,180,8,2,10,2,26,36,23, +200,2,23,201,2,91,159,38,11,90,161,38,35,11,248,22,136,13,23,199,2, +87,94,23,195,1,87,94,28,23,193,2,12,250,22,181,8,2,10,2,27,23, +201,2,249,22,7,23,195,1,23,196,1,27,249,22,189,12,250,22,172,13,0, 18,35,114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22, -184,12,23,201,1,28,248,22,144,6,23,203,2,249,22,156,7,23,204,1,8, -63,23,202,1,28,248,22,179,12,23,199,2,248,22,180,12,23,199,1,87,94, -23,198,1,247,22,181,12,28,248,22,178,12,194,249,22,132,13,195,194,192,91, -159,37,11,90,161,37,35,11,87,95,28,28,248,22,179,12,23,196,2,10,27, -248,22,178,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,144, -6,23,197,2,27,248,22,136,13,23,198,2,28,23,193,2,192,87,94,23,193, -1,248,22,137,13,23,198,2,11,12,252,22,179,8,2,11,2,25,35,23,200, -2,23,201,2,28,28,248,22,144,6,23,197,2,10,248,22,132,7,23,197,2, -12,252,22,179,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90, -161,38,35,11,248,22,135,13,23,199,2,87,94,23,195,1,87,94,28,23,193, -2,12,250,22,180,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196, -1,27,249,22,188,12,249,22,142,7,250,22,172,13,0,9,35,114,120,35,34, -91,46,93,34,248,22,184,12,23,203,1,6,1,1,95,28,248,22,144,6,23, -202,2,249,22,156,7,23,203,1,8,63,23,201,1,28,248,22,179,12,23,199, -2,248,22,180,12,23,199,1,87,94,23,198,1,247,22,181,12,28,248,22,178, -12,194,249,22,132,13,195,194,192,249,247,22,131,6,194,11,248,80,158,36,46, -9,27,247,22,157,13,249,80,158,38,47,28,23,195,2,27,248,22,161,7,6, +185,12,23,201,1,28,248,22,145,6,23,203,2,249,22,157,7,23,204,1,8, +63,23,202,1,28,248,22,180,12,23,199,2,248,22,181,12,23,199,1,87,94, +23,198,1,247,22,182,12,28,248,22,179,12,194,249,22,133,13,195,194,192,91, +159,37,11,90,161,37,35,11,87,95,28,28,248,22,180,12,23,196,2,10,27, +248,22,179,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,145, +6,23,197,2,27,248,22,137,13,23,198,2,28,23,193,2,192,87,94,23,193, +1,248,22,138,13,23,198,2,11,12,252,22,180,8,2,11,2,25,35,23,200, +2,23,201,2,28,28,248,22,145,6,23,197,2,10,248,22,133,7,23,197,2, +12,252,22,180,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90, +161,38,35,11,248,22,136,13,23,199,2,87,94,23,195,1,87,94,28,23,193, +2,12,250,22,181,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196, +1,27,249,22,189,12,249,22,143,7,250,22,173,13,0,9,35,114,120,35,34, +91,46,93,34,248,22,185,12,23,203,1,6,1,1,95,28,248,22,145,6,23, +202,2,249,22,157,7,23,203,1,8,63,23,201,1,28,248,22,180,12,23,199, +2,248,22,181,12,23,199,1,87,94,23,198,1,247,22,182,12,28,248,22,179, +12,194,249,22,133,13,195,194,192,249,247,22,132,6,194,11,248,80,158,36,46, +9,27,247,22,158,13,249,80,158,38,47,28,23,195,2,27,248,22,162,7,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,132,13,248,22,153,13,69,97,100,100,111,110,45, -100,105,114,247,22,159,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248, -80,159,41,52,36,249,22,77,23,202,1,248,22,73,248,22,153,13,72,99,111, +0,27,28,23,196,1,250,22,133,13,248,22,154,13,69,97,100,100,111,110,45, +100,105,114,247,22,160,7,6,8,8,99,111,108,108,101,99,116,115,11,27,248, +80,159,41,52,36,249,22,77,23,202,1,248,22,73,248,22,154,13,72,99,111, 108,108,101,99,116,115,45,100,105,114,28,23,194,2,249,22,63,23,196,1,23, -195,1,192,32,47,89,162,8,44,38,54,2,19,222,33,48,27,249,22,164,13, +195,1,192,32,47,89,162,8,44,38,54,2,19,222,33,48,27,249,22,165,13, 23,197,2,23,198,2,28,23,193,2,87,94,23,196,1,27,248,22,88,23,195, -2,27,27,248,22,97,23,197,1,27,249,22,164,13,23,201,2,23,196,2,28, +2,27,27,248,22,97,23,197,1,27,249,22,165,13,23,201,2,23,196,2,28, 23,193,2,87,94,23,194,1,27,248,22,88,23,195,2,27,250,2,47,23,203, -2,23,204,1,248,22,97,23,199,1,28,249,22,138,7,23,196,2,2,28,249, -22,77,23,202,2,194,249,22,63,248,22,187,12,23,197,1,23,195,1,87,95, -23,199,1,23,193,1,28,249,22,138,7,23,196,2,2,28,249,22,77,23,200, -2,9,249,22,63,248,22,187,12,23,197,1,9,28,249,22,138,7,23,196,2, -2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,187,12,23,197, -1,194,87,94,23,193,1,28,249,22,138,7,23,198,2,2,28,249,22,77,195, -9,87,94,23,194,1,249,22,63,248,22,187,12,23,199,1,9,87,95,28,28, -248,22,132,7,194,10,248,22,144,6,194,12,250,22,179,8,2,14,6,21,21, +2,23,204,1,248,22,97,23,199,1,28,249,22,139,7,23,196,2,2,28,249, +22,77,23,202,2,194,249,22,63,248,22,188,12,23,197,1,23,195,1,87,95, +23,199,1,23,193,1,28,249,22,139,7,23,196,2,2,28,249,22,77,23,200, +2,9,249,22,63,248,22,188,12,23,197,1,9,28,249,22,139,7,23,196,2, +2,28,249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,188,12,23,197, +1,194,87,94,23,193,1,28,249,22,139,7,23,198,2,2,28,249,22,77,195, +9,87,94,23,194,1,249,22,63,248,22,188,12,23,199,1,9,87,95,28,28, +248,22,133,7,194,10,248,22,145,6,194,12,250,22,180,8,2,14,6,21,21, 98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105,110,103, -196,28,28,248,22,72,195,249,22,4,22,178,12,196,11,12,250,22,179,8,2, +196,28,28,248,22,72,195,249,22,4,22,179,12,196,11,12,250,22,180,8,2, 14,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,47, -197,195,28,248,22,144,6,197,248,22,155,7,197,196,32,50,89,162,8,44,39, +197,195,28,248,22,145,6,197,248,22,156,7,197,196,32,50,89,162,8,44,39, 57,2,19,222,33,53,32,51,89,162,8,44,38,54,70,102,111,117,110,100,45, 101,120,101,99,222,33,52,28,23,193,2,91,159,38,11,90,161,38,35,11,248, -22,135,13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248, -22,140,13,23,201,2,28,249,22,151,8,23,195,2,23,202,2,11,28,248,22, -136,13,23,194,2,250,2,51,23,201,2,23,202,2,249,22,132,13,23,200,2, +22,136,13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248, +22,141,13,23,201,2,28,249,22,152,8,23,195,2,23,202,2,11,28,248,22, +137,13,23,194,2,250,2,51,23,201,2,23,202,2,249,22,133,13,23,200,2, 23,198,1,250,2,51,23,201,2,23,202,2,23,196,1,11,28,23,193,2,192, -87,94,23,193,1,27,28,248,22,178,12,23,196,2,27,249,22,132,13,23,198, -2,23,201,2,28,28,248,22,191,12,193,10,248,22,190,12,193,192,11,11,28, -23,193,2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,140,13,23,202, -2,28,249,22,151,8,23,195,2,23,203,1,11,28,248,22,136,13,23,194,2, -250,2,51,23,202,1,23,203,1,249,22,132,13,23,201,1,23,198,1,250,2, -51,201,202,195,194,28,248,22,71,23,197,2,11,27,248,22,139,13,248,22,64, -23,199,2,27,249,22,132,13,23,196,1,23,197,2,28,248,22,190,12,23,194, +87,94,23,193,1,27,28,248,22,179,12,23,196,2,27,249,22,133,13,23,198, +2,23,201,2,28,28,248,22,128,13,193,10,248,22,191,12,193,192,11,11,28, +23,193,2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,141,13,23,202, +2,28,249,22,152,8,23,195,2,23,203,1,11,28,248,22,137,13,23,194,2, +250,2,51,23,202,1,23,203,1,249,22,133,13,23,201,1,23,198,1,250,2, +51,201,202,195,194,28,248,22,71,23,197,2,11,27,248,22,140,13,248,22,64, +23,199,2,27,249,22,133,13,23,196,1,23,197,2,28,248,22,191,12,23,194, 2,250,2,51,198,199,195,87,94,23,193,1,27,248,22,65,23,200,1,28,248, -22,71,23,194,2,11,27,248,22,139,13,248,22,64,23,196,2,27,249,22,132, -13,23,196,1,23,200,2,28,248,22,190,12,23,194,2,250,2,51,201,202,195, +22,71,23,194,2,11,27,248,22,140,13,248,22,64,23,196,2,27,249,22,133, +13,23,196,1,23,200,2,28,248,22,191,12,23,194,2,250,2,51,201,202,195, 87,94,23,193,1,27,248,22,65,23,197,1,28,248,22,71,23,194,2,11,27, -248,22,139,13,248,22,64,195,27,249,22,132,13,23,196,1,202,28,248,22,190, +248,22,140,13,248,22,64,195,27,249,22,133,13,23,196,1,202,28,248,22,191, 12,193,250,2,51,204,205,195,251,2,50,204,205,206,248,22,65,199,87,95,28, -27,248,22,178,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22, -144,6,23,196,2,27,248,22,136,13,23,197,2,28,23,193,2,192,87,94,23, -193,1,248,22,137,13,23,197,2,11,12,250,22,179,8,2,15,6,25,25,112, +27,248,22,179,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22, +145,6,23,196,2,27,248,22,137,13,23,197,2,28,23,193,2,192,87,94,23, +193,1,248,22,138,13,23,197,2,11,12,250,22,180,8,2,15,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,27,248,22,178,12,23,197,2,28, -23,193,2,192,87,94,23,193,1,28,248,22,144,6,23,197,2,27,248,22,136, -13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,137,13,23,198,2, -11,248,22,136,13,23,196,2,11,10,12,250,22,179,8,2,15,6,29,29,35, +117,108,41,23,197,2,28,28,23,195,2,28,27,248,22,179,12,23,197,2,28, +23,193,2,192,87,94,23,193,1,28,248,22,145,6,23,197,2,27,248,22,137, +13,23,198,2,28,23,193,2,192,87,94,23,193,1,248,22,138,13,23,198,2, +11,248,22,137,13,23,196,2,11,10,12,250,22,180,8,2,15,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,136,13,23,195,2,91,159, -38,11,90,161,38,35,11,248,22,135,13,23,198,2,249,22,149,8,194,68,114, -101,108,97,116,105,118,101,11,27,248,22,161,7,6,4,4,80,65,84,72,251, +32,115,116,114,105,110,103,23,198,2,28,28,248,22,137,13,23,195,2,91,159, +38,11,90,161,38,35,11,248,22,136,13,23,198,2,249,22,150,8,194,68,114, +101,108,97,116,105,118,101,11,27,248,22,162,7,6,4,4,80,65,84,72,251, 2,50,23,199,1,23,200,1,23,201,1,28,23,197,2,27,249,80,158,43,47, -23,200,1,9,28,249,22,149,8,247,22,163,7,2,21,249,22,63,248,22,187, -12,5,1,46,23,195,1,192,9,27,248,22,139,13,23,196,1,28,248,22,190, +23,200,1,9,28,249,22,150,8,247,22,164,7,2,21,249,22,63,248,22,188, +12,5,1,46,23,195,1,192,9,27,248,22,140,13,23,196,1,28,248,22,191, 12,193,250,2,51,198,199,195,11,250,80,158,38,48,196,197,11,250,80,158,38, -48,196,11,11,87,94,249,22,136,6,247,22,177,4,195,248,22,151,5,249,22, +48,196,11,11,87,94,249,22,137,6,247,22,178,4,195,248,22,152,5,249,22, 162,3,35,249,22,146,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,153,13,2,20,27,249,80,158,40, +1,23,197,1,87,94,23,197,1,27,248,22,154,13,2,20,27,249,80,158,40, 48,23,196,1,11,27,27,248,22,165,3,23,200,1,28,192,192,35,27,27,248, -22,165,3,23,202,1,28,192,192,35,249,22,130,5,23,197,1,83,158,39,20, +22,165,3,23,202,1,28,192,192,35,249,22,131,5,23,197,1,83,158,39,20, 97,95,89,162,8,44,35,47,9,224,3,2,33,57,23,195,1,23,196,1,27, -248,22,181,4,23,195,1,248,80,159,38,53,36,193,159,35,20,103,159,35,16, +248,22,182,4,23,195,1,248,80,159,38,53,36,193,159,35,20,103,159,35,16, 1,20,24,65,98,101,103,105,110,16,0,83,158,41,20,100,137,67,35,37,117, 116,105,108,115,2,1,11,10,10,42,80,158,35,35,20,103,159,37,16,17,30, 2,1,2,2,193,30,2,1,2,3,193,30,2,1,2,4,193,30,2,1,2, @@ -319,7 +319,7 @@ 17,83,158,35,16,2,89,162,43,36,48,2,19,223,0,33,29,80,159,35,53, 36,83,158,35,16,2,89,162,8,44,36,55,2,19,223,0,33,30,80,159,35, 52,36,83,158,35,16,2,32,0,89,162,43,36,44,2,2,222,33,31,80,159, -35,35,36,83,158,35,16,2,249,22,146,6,7,92,7,92,80,159,35,36,36, +35,35,36,83,158,35,16,2,249,22,147,6,7,92,7,92,80,159,35,36,36, 83,158,35,16,2,89,162,43,36,53,2,4,223,0,33,32,80,159,35,37,36, 83,158,35,16,2,32,0,89,162,8,44,37,49,2,5,222,33,33,80,159,35, 38,36,83,158,35,16,2,32,0,89,162,8,44,38,50,2,6,222,33,35,80, @@ -331,9 +331,9 @@ 11,222,33,43,80,159,35,44,36,83,158,35,16,2,32,0,89,162,43,36,43, 2,12,222,33,44,80,159,35,45,36,83,158,35,16,2,83,158,38,20,96,95, 2,13,89,162,43,35,42,9,223,0,33,45,89,162,43,36,52,9,223,0,33, -46,80,159,35,46,36,83,158,35,16,2,27,248,22,160,13,248,22,155,7,27, -28,249,22,149,8,247,22,163,7,2,21,6,1,1,59,6,1,1,58,250,22, -128,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196, +46,80,159,35,46,36,83,158,35,16,2,27,248,22,161,13,248,22,156,7,27, +28,249,22,150,8,247,22,164,7,2,21,6,1,1,59,6,1,1,58,250,22, +129,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,37,47,2,14,223,0,33,49,80,159,35,47,36, 83,158,35,16,2,83,158,38,20,96,96,2,15,89,162,8,44,38,53,9,223, 0,33,54,89,162,43,37,46,9,223,0,33,55,89,162,43,36,45,9,223,0, @@ -343,12 +343,12 @@ EVAL_ONE_SIZED_STR((char *)expr, 5060); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,51,8,0,0,0,1,0,0,6,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,8,0,0,0,1,0,0,6,0, 19,0,34,0,48,0,62,0,76,0,111,0,0,0,243,0,0,0,65,113,117, 111,116,101,29,94,2,1,67,35,37,117,116,105,108,115,11,29,94,2,1,69, 35,37,110,101,116,119,111,114,107,11,29,94,2,1,68,35,37,112,97,114,97, 109,122,11,29,94,2,1,68,35,37,101,120,112,111,98,115,11,29,94,2,1, -68,35,37,107,101,114,110,101,108,11,98,10,35,11,8,186,213,97,159,2,2, +68,35,37,107,101,114,110,101,108,11,98,10,35,11,8,183,218,97,159,2,2, 35,35,159,2,3,35,35,159,2,4,35,35,159,2,5,35,35,159,2,6,35, 35,16,0,159,35,20,103,159,35,16,1,20,24,65,98,101,103,105,110,16,0, 83,158,41,20,100,137,69,35,37,98,117,105,108,116,105,110,29,11,11,10,10, @@ -360,7 +360,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 282); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,51,52,0,0,0,1,0,0,3,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,51,46,57,57,46,48,46,50,53,52,0,0,0,1,0,0,3,0, 14,0,41,0,47,0,60,0,74,0,96,0,122,0,134,0,152,0,172,0,184, 0,200,0,223,0,3,1,8,1,13,1,18,1,23,1,54,1,58,1,66,1, 74,1,82,1,185,1,230,1,250,1,29,2,64,2,98,2,108,2,155,2,165, @@ -382,31 +382,31 @@ 122,111,64,108,111,111,112,1,29,115,116,97,110,100,97,114,100,45,109,111,100, 117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,63,108,105,98, 67,105,103,110,111,114,101,100,249,22,14,195,80,158,37,45,249,80,159,37,48, -36,195,10,27,28,23,195,2,28,249,22,149,8,23,197,2,80,158,38,46,87, -94,23,195,1,80,158,36,47,27,248,22,160,4,23,197,2,28,248,22,178,12, -23,194,2,91,159,38,11,90,161,38,35,11,248,22,135,13,23,197,1,87,95, +36,195,10,27,28,23,195,2,28,249,22,150,8,23,197,2,80,158,38,46,87, +94,23,195,1,80,158,36,47,27,248,22,161,4,23,197,2,28,248,22,179,12, +23,194,2,91,159,38,11,90,161,38,35,11,248,22,136,13,23,197,1,87,95, 83,160,37,11,80,158,40,46,198,83,160,37,11,80,158,40,47,192,192,11,11, -28,23,193,2,192,87,94,23,193,1,27,247,22,132,6,28,192,192,247,22,154, +28,23,193,2,192,87,94,23,193,1,27,247,22,133,6,28,192,192,247,22,155, 13,20,14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39, -22,132,6,28,248,22,178,12,23,198,2,23,197,1,87,94,23,197,1,247,22, -154,13,247,194,250,22,132,13,23,197,1,23,199,1,249,80,158,42,38,23,198, -1,2,18,252,22,132,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118, -101,247,22,164,7,249,80,158,44,38,23,200,1,80,158,44,35,87,94,23,194, -1,27,23,194,1,27,250,22,149,13,196,11,32,0,89,162,8,44,35,40,9, +22,133,6,28,248,22,179,12,23,198,2,23,197,1,87,94,23,197,1,247,22, +155,13,247,194,250,22,133,13,23,197,1,23,199,1,249,80,158,42,38,23,198, +1,2,18,252,22,133,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118, +101,247,22,165,7,249,80,158,44,38,23,200,1,80,158,44,35,87,94,23,194, +1,27,23,194,1,27,250,22,150,13,196,11,32,0,89,162,8,44,35,40,9, 222,11,28,192,249,22,63,195,194,11,27,248,23,195,1,23,196,1,27,250,22, -149,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,63,195, -194,11,249,247,22,159,13,248,22,64,195,195,27,250,22,132,13,23,198,1,23, -200,1,249,80,158,43,38,23,199,1,2,18,27,250,22,149,13,196,11,32,0, -89,162,8,44,35,40,9,222,11,28,192,249,22,63,195,194,11,249,247,22,130, -6,248,22,64,195,195,249,247,22,130,6,194,195,87,94,28,248,80,158,36,37, -23,195,2,12,250,22,179,8,77,108,111,97,100,47,117,115,101,45,99,111,109, +150,13,196,11,32,0,89,162,8,44,35,40,9,222,11,28,192,249,22,63,195, +194,11,249,247,22,160,13,248,22,64,195,195,27,250,22,133,13,23,198,1,23, +200,1,249,80,158,43,38,23,199,1,2,18,27,250,22,150,13,196,11,32,0, +89,162,8,44,35,40,9,222,11,28,192,249,22,63,195,194,11,249,247,22,131, +6,248,22,64,195,195,249,247,22,131,6,194,195,87,94,28,248,80,158,36,37, +23,195,2,12,250,22,180,8,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,41,11,90,161, -36,35,11,28,248,22,138,13,23,201,2,23,200,1,27,247,22,132,6,28,23, -193,2,249,22,139,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,135, -13,23,194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,149,8,23,196, +36,35,11,28,248,22,139,13,23,201,2,23,200,1,27,247,22,133,6,28,23, +193,2,249,22,140,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,136, +13,23,194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,150,8,23,196, 2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2,17,23,194,1,90, -161,36,40,11,247,22,156,13,27,89,162,43,36,49,62,122,111,225,7,5,3, +161,36,40,11,247,22,157,13,27,89,162,43,36,49,62,122,111,225,7,5,3, 33,27,27,89,162,43,36,51,9,225,8,6,4,33,28,27,249,22,5,89,162, 8,44,36,47,9,223,5,33,29,23,203,2,27,28,23,195,2,27,249,22,5, 83,158,39,20,97,94,89,162,8,44,36,47,9,223,5,33,30,23,198,1,23, @@ -419,11 +419,11 @@ 22,65,199,193,11,11,11,11,28,192,249,80,159,48,54,36,203,89,162,43,35, 45,9,224,15,2,33,33,249,80,159,48,54,36,203,89,162,43,35,44,9,224, 15,7,33,34,32,36,89,162,8,44,36,54,2,19,222,33,38,0,17,35,114, -120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,164,13,2, +120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,165,13,2, 37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63,248,22,88,23,196, -2,27,248,22,97,23,197,1,27,249,22,164,13,2,37,23,196,2,28,23,193, +2,27,248,22,97,23,197,1,27,249,22,165,13,2,37,23,196,2,28,23,193, 2,87,94,23,194,1,249,22,63,248,22,88,23,196,2,27,248,22,97,23,197, -1,27,249,22,164,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249, +1,27,249,22,165,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249, 22,63,248,22,88,23,196,2,248,2,36,248,22,97,23,197,1,248,22,73,194, 248,22,73,194,248,22,73,194,32,39,89,162,43,36,54,2,19,222,33,40,28, 248,22,71,248,22,65,23,195,2,249,22,7,9,248,22,64,195,91,159,37,11, @@ -434,96 +434,96 @@ 197,2,249,22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249, 22,7,249,22,63,248,22,64,23,200,1,23,197,1,23,196,1,249,22,7,249, 22,63,248,22,64,23,200,1,23,197,1,195,27,248,2,36,23,195,1,28,194, -192,248,2,39,193,87,95,28,248,22,158,4,195,12,250,22,179,8,2,20,6, +192,248,2,39,193,87,95,28,248,22,159,4,195,12,250,22,180,8,2,20,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,27,250,22, -133,2,80,158,41,42,248,22,182,13,247,22,161,11,11,28,23,193,2,192,87, -94,23,193,1,27,247,22,121,87,94,250,22,131,2,80,158,42,42,248,22,182, -13,247,22,161,11,195,192,250,22,131,2,195,198,66,97,116,116,97,99,104,251, -211,197,198,199,10,28,192,250,22,178,8,11,196,195,248,22,176,8,194,28,249, -22,150,6,194,6,1,1,46,2,17,28,249,22,150,6,194,6,2,2,46,46, -62,117,112,192,28,249,22,151,8,248,22,65,23,200,2,23,197,1,28,249,22, -149,8,248,22,64,23,200,2,23,196,1,251,22,176,8,2,20,6,26,26,99, +133,2,80,158,41,42,248,22,183,13,247,22,162,11,11,28,23,193,2,192,87, +94,23,193,1,27,247,22,121,87,94,250,22,131,2,80,158,42,42,248,22,183, +13,247,22,162,11,195,192,250,22,131,2,195,198,66,97,116,116,97,99,104,251, +211,197,198,199,10,28,192,250,22,179,8,11,196,195,248,22,177,8,194,28,249, +22,151,6,194,6,1,1,46,2,17,28,249,22,151,6,194,6,2,2,46,46, +62,117,112,192,28,249,22,152,8,248,22,65,23,200,2,23,197,1,28,249,22, +150,8,248,22,64,23,200,2,23,196,1,251,22,177,8,2,20,6,26,26,99, 121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,101, 58,32,126,101,23,200,1,249,22,2,22,65,248,22,78,249,22,63,23,206,1, -23,202,1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,161,11, +23,202,1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,162,11, 23,197,1,20,14,159,80,158,39,39,250,80,158,42,40,249,22,27,11,80,158, -44,39,22,142,4,23,196,1,249,247,22,131,6,23,198,1,248,22,52,248,22, -182,12,23,198,1,87,94,28,28,248,22,178,12,23,197,2,10,248,22,163,4, -23,197,2,12,28,23,198,2,250,22,178,8,11,6,15,15,98,97,100,32,109, -111,100,117,108,101,32,112,97,116,104,23,201,2,250,22,179,8,2,20,6,19, +44,39,22,142,4,23,196,1,249,247,22,132,6,23,198,1,248,22,52,248,22, +183,12,23,198,1,87,94,28,28,248,22,179,12,23,197,2,10,248,22,164,4, +23,197,2,12,28,23,198,2,250,22,179,8,11,6,15,15,98,97,100,32,109, +111,100,117,108,101,32,112,97,116,104,23,201,2,250,22,180,8,2,20,6,19, 19,109,111,100,117,108,101,45,112,97,116,104,32,111,114,32,112,97,116,104,23, -199,2,28,28,248,22,61,23,197,2,249,22,149,8,248,22,64,23,199,2,2, -4,11,248,22,159,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,149, +199,2,28,28,248,22,61,23,197,2,249,22,150,8,248,22,64,23,199,2,2, +4,11,248,22,160,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,150, 8,248,22,64,23,199,2,66,112,108,97,110,101,116,11,87,94,28,207,12,20, -14,159,80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,161, +14,159,80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,162, 11,23,197,1,90,161,36,35,10,249,22,143,4,21,94,2,21,6,18,18,112, 108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,115,115,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,251,211,199,200,201,202,87,94,23,193,1,27,89,162,8,44, 36,45,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114, 114,223,6,33,44,27,28,248,22,51,23,199,2,27,250,22,133,2,80,158,43, -43,249,22,63,23,204,2,247,22,155,13,11,28,23,193,2,192,87,94,23,193, +43,249,22,63,23,204,2,247,22,156,13,11,28,23,193,2,192,87,94,23,193, 1,91,159,37,11,90,161,37,35,11,249,80,159,44,48,36,248,22,54,23,204, 2,11,27,251,80,158,47,50,2,20,23,202,1,28,248,22,71,23,199,2,23, 199,2,248,22,64,23,199,2,28,248,22,71,23,199,2,9,248,22,65,23,199, -2,249,22,132,13,23,195,1,28,248,22,71,23,197,1,87,94,23,197,1,6, -7,7,109,97,105,110,46,115,115,249,22,167,6,23,199,1,6,3,3,46,115, -115,28,248,22,144,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36, +2,249,22,133,13,23,195,1,28,248,22,71,23,197,1,87,94,23,197,1,6, +7,7,109,97,105,110,46,115,115,249,22,168,6,23,199,1,6,3,3,46,115, +115,28,248,22,145,6,23,199,2,87,94,23,194,1,27,248,80,159,41,55,36, 23,201,2,27,250,22,133,2,80,158,44,43,249,22,63,23,205,2,23,199,2, 11,28,23,193,2,192,87,94,23,193,1,91,159,37,11,90,161,37,35,11,249, -80,159,45,48,36,23,204,2,11,250,22,1,22,132,13,23,199,1,249,22,77, +80,159,45,48,36,23,204,2,11,250,22,1,22,133,13,23,199,1,249,22,77, 249,22,2,32,0,89,162,8,44,36,43,9,222,33,45,23,200,1,248,22,73, -23,200,1,28,248,22,178,12,23,199,2,87,94,23,194,1,28,248,22,137,13, +23,200,1,28,248,22,179,12,23,199,2,87,94,23,194,1,28,248,22,138,13, 23,199,2,23,198,2,248,22,73,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,149, +109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,150, 8,248,22,64,23,201,2,2,21,27,250,22,133,2,80,158,43,43,249,22,63, -23,204,2,247,22,155,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38, +23,204,2,247,22,156,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38, 11,90,161,37,35,11,249,80,159,45,48,36,248,22,88,23,205,2,11,90,161, 36,37,11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249, -22,166,13,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28, +22,167,13,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,27,28, 23,197,2,249,22,77,28,248,22,71,248,22,90,23,208,2,21,93,6,5,5, 109,122,108,105,98,249,22,1,22,77,249,22,2,80,159,51,56,36,248,22,90, 23,211,2,23,197,2,28,248,22,71,23,196,2,248,22,73,23,197,2,23,195, 2,251,80,158,49,50,2,20,23,204,1,248,22,64,23,198,2,248,22,65,23, -198,1,249,22,132,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1, +198,1,249,22,133,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1, 28,248,22,71,23,197,1,87,94,23,197,1,6,7,7,109,97,105,110,46,115, -115,28,249,22,166,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197, -1,249,22,167,6,23,199,1,6,3,3,46,115,115,28,249,22,149,8,248,22, -64,23,201,2,64,102,105,108,101,249,22,139,13,248,22,143,13,248,22,88,23, -202,2,248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,178,12,23, -194,2,10,248,22,166,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250, -22,178,8,67,114,101,113,117,105,114,101,249,22,128,7,6,17,17,98,97,100, +115,28,249,22,167,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197, +1,249,22,168,6,23,199,1,6,3,3,46,115,115,28,249,22,150,8,248,22, +64,23,201,2,64,102,105,108,101,249,22,140,13,248,22,144,13,248,22,88,23, +202,2,248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,179,12,23, +194,2,10,248,22,167,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250, +22,179,8,67,114,101,113,117,105,114,101,249,22,129,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,64, -23,199,2,6,0,0,23,203,1,87,94,23,200,1,250,22,179,8,2,20,249, -22,128,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, -198,2,248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,166,7,23, -195,2,249,22,171,7,23,196,2,35,249,22,141,13,248,22,142,13,23,197,2, -11,27,28,248,22,166,7,23,196,2,249,22,171,7,23,197,2,36,248,80,158, -42,51,23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,166,7,23,199, -2,250,22,7,2,22,249,22,171,7,23,203,2,37,2,22,248,22,135,13,23, -198,2,87,95,23,195,1,23,193,1,27,28,248,22,166,7,23,200,2,249,22, -171,7,23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,166, -7,23,201,2,249,22,171,7,23,202,2,39,248,22,159,4,23,200,2,27,27, -250,22,133,2,80,158,51,42,248,22,182,13,247,22,161,11,11,28,23,193,2, +23,199,2,6,0,0,23,203,1,87,94,23,200,1,250,22,180,8,2,20,249, +22,129,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, +198,2,248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,167,7,23, +195,2,249,22,172,7,23,196,2,35,249,22,142,13,248,22,143,13,23,197,2, +11,27,28,248,22,167,7,23,196,2,249,22,172,7,23,197,2,36,248,80,158, +42,51,23,195,2,91,159,38,11,90,161,38,35,11,28,248,22,167,7,23,199, +2,250,22,7,2,22,249,22,172,7,23,203,2,37,2,22,248,22,136,13,23, +198,2,87,95,23,195,1,23,193,1,27,28,248,22,167,7,23,200,2,249,22, +172,7,23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,167, +7,23,201,2,249,22,172,7,23,202,2,39,248,22,160,4,23,200,2,27,27, +250,22,133,2,80,158,51,42,248,22,183,13,247,22,162,11,11,28,23,193,2, 192,87,94,23,193,1,27,247,22,121,87,94,250,22,131,2,80,158,52,42,248, -22,182,13,247,22,161,11,195,192,87,95,28,23,209,1,27,250,22,133,2,23, +22,183,13,247,22,162,11,195,192,87,95,28,23,209,1,27,250,22,133,2,23, 197,2,197,11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,158,51,45, 80,158,50,45,247,22,19,250,22,25,248,22,23,23,197,2,80,158,53,44,23, -196,1,27,247,22,161,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36, +196,1,27,247,22,162,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36, 54,9,226,12,11,2,3,33,46,23,195,1,23,196,1,248,28,248,22,17,80, 158,50,45,32,0,89,162,43,36,41,9,222,33,47,80,159,49,57,36,89,162, 43,35,50,9,227,14,9,8,4,3,33,48,250,22,131,2,23,197,1,197,10, -12,28,28,248,22,166,7,23,202,1,11,27,248,22,144,6,23,208,2,28,192, -192,28,248,22,61,23,208,2,249,22,149,8,248,22,64,23,210,2,2,21,11, -250,22,131,2,80,158,50,43,28,248,22,144,6,23,210,2,249,22,63,23,211, +12,28,28,248,22,167,7,23,202,1,11,27,248,22,145,6,23,208,2,28,192, +192,28,248,22,61,23,208,2,249,22,150,8,248,22,64,23,210,2,2,21,11, +250,22,131,2,80,158,50,43,28,248,22,145,6,23,210,2,249,22,63,23,211, 1,248,80,159,53,55,36,23,213,1,87,94,23,210,1,249,22,63,23,211,1, -247,22,155,13,252,22,168,7,23,208,1,23,207,1,23,205,1,23,203,1,201, +247,22,156,13,252,22,169,7,23,208,1,23,207,1,23,205,1,23,203,1,201, 12,193,91,159,37,10,90,161,36,35,10,11,90,161,36,36,10,83,158,38,20, 96,96,2,20,89,162,8,44,36,50,9,224,2,0,33,42,89,162,43,38,48, 9,223,1,33,43,89,162,43,39,8,30,9,225,2,3,0,33,49,208,87,95, -248,22,141,4,248,80,158,37,49,247,22,161,11,248,22,131,6,80,158,36,36, -248,22,152,12,80,159,36,41,36,159,35,20,103,159,35,16,1,20,24,65,98, +248,22,141,4,248,80,158,37,49,247,22,162,11,248,22,132,6,80,158,36,36, +248,22,153,12,80,159,36,41,36,159,35,20,103,159,35,16,1,20,24,65,98, 101,103,105,110,16,0,83,158,41,20,100,137,66,35,37,98,111,111,116,2,1, 11,10,10,36,80,158,35,35,20,103,159,39,16,19,30,2,1,2,2,193,30, 2,1,2,3,193,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,63, @@ -544,7 +544,7 @@ 162,43,36,44,9,223,0,33,24,80,159,35,56,36,83,158,35,16,2,89,162, 43,36,48,67,103,101,116,45,100,105,114,223,0,33,25,80,159,35,55,36,83, 158,35,16,2,89,162,43,37,48,68,119,105,116,104,45,100,105,114,223,0,33, -26,80,159,35,54,36,83,158,35,16,2,248,22,163,7,69,115,111,45,115,117, +26,80,159,35,54,36,83,158,35,16,2,248,22,164,7,69,115,111,45,115,117, 102,102,105,120,80,159,35,35,36,83,158,35,16,2,89,162,43,37,59,2,3, 223,0,33,35,80,159,35,36,36,83,158,35,16,2,32,0,89,162,8,44,36, 41,2,7,222,192,80,159,35,41,36,83,158,35,16,2,247,22,123,80,159,35, diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index bd8277fbd2..d47bc7d456 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -39,6 +39,7 @@ static Scheme_Object *current_module_name_prefix(int argc, Scheme_Object *argv[] static Scheme_Object *dynamic_require_for_syntax(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_require(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_require_copy(int argc, Scheme_Object *argv[]); +static Scheme_Object *namespace_require_constant(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_require_etonly(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]); static Scheme_Object *namespace_unprotect_module(int argc, Scheme_Object *argv[]); @@ -368,6 +369,11 @@ void scheme_init_module(Scheme_Env *env) "namespace-require/copy", 1, 1), env); + scheme_add_global_constant("namespace-require/constant", + scheme_make_prim_w_arity(namespace_require_constant, + "namespace-require/constant", + 1, 1), + env); scheme_add_global_constant("namespace-require/expansion-time", scheme_make_prim_w_arity(namespace_require_etonly, "namespace-require/expansion-time", @@ -1125,6 +1131,11 @@ static Scheme_Object *namespace_require_copy(int argc, Scheme_Object *argv[]) return do_namespace_require(NULL, argc, argv, 1, 0); } +static Scheme_Object *namespace_require_constant(int argc, Scheme_Object *argv[]) +{ + return do_namespace_require(NULL, argc, argv, 2, 0); +} + static Scheme_Object *namespace_require_etonly(int argc, Scheme_Object *argv[]) { return do_namespace_require(NULL, argc, argv, 0, 1); @@ -7925,14 +7936,31 @@ void add_single_require(Scheme_Module_Exports *me, /* from module */ data, cki, form, err_src, mark_src, to_phase, src_phase_index, pt->phase_index); if (!is_kern) { + int done; + if (do_copy_vars && (j < var_count)) { Scheme_Env *menv; Scheme_Object *val; + Scheme_Bucket *b; modidx = scheme_module_resolve(modidx, 1); menv = scheme_module_access(modidx, orig_env, 0); val = scheme_lookup_in_table(menv->toplevel, (char *)exsns[j]); - scheme_add_global_symbol(iname, val, orig_env); - scheme_shadow(orig_env, iname, 1); + b = scheme_global_bucket(iname, orig_env); + scheme_set_global_bucket(((copy_vars == 2) + ? "namespace-require/constant" + : "namespace-require/copy"), + b, val, 1); + if (copy_vars == 2) { + ((Scheme_Bucket_With_Flags *)b)->flags |= GLOB_IS_IMMUTATED; + done = 0; + } else { + scheme_shadow(orig_env, iname, 1); + done = 1; + } + } else + done = 0; + + if (done) { } else if (!for_unmarshal || !has_context) { if (!skip_rename) { if (!save_marshal_info && !has_context && can_save_marshal) diff --git a/src/mzscheme/src/regexp.c b/src/mzscheme/src/regexp.c index 1d56d9c338..81706e2ea9 100644 --- a/src/mzscheme/src/regexp.c +++ b/src/mzscheme/src/regexp.c @@ -5185,6 +5185,19 @@ static char *build_call_name(const char *n) return m; } +static int initial_char_len(unsigned char *source, long start, long end) +{ + long i; + + for (i = start + 1; i <= end; i++) { + if (scheme_utf8_decode_count(source, start, i, NULL, 1, 1)) { + return i - start; + } + } + + return 1; +} + static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *argv[], int all) { Scheme_Object *orig; @@ -5257,21 +5270,39 @@ static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *arg while (1) { int m; - m = regexec(name, r, source, srcoffset, sourcelen - srcoffset, startp, maybep, endp, - NULL, NULL, 0, - NULL, 0, 0, NULL, NULL, NULL, NULL); + do { + m = regexec(name, r, source, srcoffset, sourcelen - srcoffset, startp, maybep, endp, + NULL, NULL, 0, + NULL, 0, 0, NULL, NULL, NULL, NULL); + + if (m && all && (startp[0] == endp[0])) { + if (!startp[0] && sourcelen) { + int amt; + + if (was_non_byte) + amt = initial_char_len((unsigned char *)source, 0, sourcelen); + else + amt = 1; + + prefix = scheme_malloc_atomic(amt + 1); + prefix_len = amt; + memcpy(prefix, source, amt); + srcoffset += amt; + /* try again */ + } else { + /* if it's the end of the input, the match should fail */ + if (startp[0] == sourcelen) + m = 0; + break; + } + } else + break; + } while (1); if (m) { char *insert; long len, end, startpd, endpd; - if ((startp[0] == endp[0]) && all) { - scheme_arg_mismatch(name, - "found a zero-width match for pattern: ", - argv[0]); - return NULL; - } - if (SCHEME_PROCP(argv[2])) { int i; Scheme_Object *m, **args, *quick_args[5]; @@ -5363,18 +5394,31 @@ static Scheme_Object *gen_replace(const char *name, int argc, Scheme_Object *arg } else { char *naya; long total; - + int more; + + if (startpd == endpd) { + if (was_non_byte) + more = initial_char_len((unsigned char *)source, startpd, sourcelen); + else + more = 1; + } else + more = 0; + total = len + prefix_len + (startpd - srcoffset); - naya = (char *)scheme_malloc_atomic(total + 1); + naya = (char *)scheme_malloc_atomic(total + more + 1); memcpy(naya, prefix, prefix_len); memcpy(naya + prefix_len, source + srcoffset, startpd - srcoffset); memcpy(naya + prefix_len + (startpd - srcoffset), insert, len); + if (more) { + memcpy(naya + prefix_len + (endpd - srcoffset) + len, source + startpd, more); + total += more; + } prefix = naya; prefix_len = total; - srcoffset = endpd; + srcoffset = endpd + more; } } else if (!prefix) { if (was_non_byte) diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index a6e5314fb7..d806416087 100644 --- a/src/mzscheme/src/schminc.h +++ b/src/mzscheme/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 914 +#define EXPECTED_PRIM_COUNT 915 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 0bd163fdd9..15fbd1f449 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "3.99.0.24" +#define MZSCHEME_VERSION "3.99.0.25" #define MZSCHEME_VERSION_X 3 #define MZSCHEME_VERSION_Y 99 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 24 +#define MZSCHEME_VERSION_W 25 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)