From 8140b3644e69c84944ed2d83719a80b06a963fd3 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 29 Jul 2008 19:27:33 +0000 Subject: [PATCH] add 'bitwise-bit-set?' and 'in-value' (v4.0.2.6) svn: r10971 --- collects/rnrs/arithmetic/bitwise-6.ss | 5 - collects/scheme/private/for.ss | 21 +- collects/scribblings/guide/for.scrbl | 1 + .../mzscheme/benchmarks/shootout/meteor.ss | 10 +- collects/tests/mzscheme/for.ss | 5 + collects/tests/mzscheme/optimize.ss | 13 + doc/release-notes/mzscheme/HISTORY.txt | 2 + src/mzscheme/src/cstartup.inc | 560 +++++++++--------- src/mzscheme/src/jit.c | 43 +- src/mzscheme/src/lightning/i386/core.h | 4 +- src/mzscheme/src/number.c | 56 ++ src/mzscheme/src/schminc.h | 2 +- src/mzscheme/src/schvers.h | 4 +- 13 files changed, 427 insertions(+), 299 deletions(-) diff --git a/collects/rnrs/arithmetic/bitwise-6.ss b/collects/rnrs/arithmetic/bitwise-6.ss index af4e80e79a..d23a55cc40 100644 --- a/collects/rnrs/arithmetic/bitwise-6.ss +++ b/collects/rnrs/arithmetic/bitwise-6.ss @@ -40,11 +40,6 @@ (loop (arithmetic-shift b -1) (add1 pos)) pos)))) -(define (bitwise-bit-set? b n) - (unless (exact-nonnegative-integer? n) - (raise-type-error 'bitwise-bit-set? "exact nonnegative integer" n)) - (eq? 1 (bitwise-and (arithmetic-shift b (- n)) 1))) - (define (bitwise-copy-bit b n bit) (unless (exact-nonnegative-integer? n) (raise-type-error 'bitwise-copy-bit "exact nonnegative integer" n)) diff --git a/collects/scheme/private/for.ss b/collects/scheme/private/for.ss index dfc6572828..2ab6639789 100644 --- a/collects/scheme/private/for.ss +++ b/collects/scheme/private/for.ss @@ -42,6 +42,7 @@ stop-before stop-after (rename *in-indexed in-indexed) + (rename *in-value in-value) sequence? sequence-generate @@ -553,6 +554,15 @@ (lambda (val idx) (pre-cont? val)) (lambda (pos val idx) (post-cont? pos val))))))) + (define (in-value v) + (make-do-sequence (lambda () + (values (lambda (pos) v) + (lambda (pos) #f) + #t + (lambda (pos) pos) + (lambda (val) #t) + (lambda (pos val) #t))))) + ;; ---------------------------------------- (define (in-parallel . sequences) @@ -1016,4 +1026,13 @@ (lambda (stx) (syntax-case stx () [((id1 id2) (_ gen-expr)) - #'[(id1 id2) (in-parallel gen-expr (*in-naturals))]])))) + #'[(id1 id2) (in-parallel gen-expr (*in-naturals))]]))) + + (define-sequence-syntax *in-value + (lambda () #'in-value) + (lambda (stx) + (syntax-case stx () + [((id) (_ expr)) + #'[(id) + (:do-in ([(id) expr]) + #t () #t () #t #f ())]])))) diff --git a/collects/scribblings/guide/for.scrbl b/collects/scribblings/guide/for.scrbl index c7c864b73f..2d5cdce9d6 100644 --- a/collects/scribblings/guide/for.scrbl +++ b/collects/scribblings/guide/for.scrbl @@ -400,6 +400,7 @@ fast-seq (in-range expr expr) (in-vector expr) (in-string expr) (in-bytes expr) + (in-value expr) (stop-before fast-seq predicate-expr) (stop-after fast-seq predicate-expr) ] diff --git a/collects/tests/mzscheme/benchmarks/shootout/meteor.ss b/collects/tests/mzscheme/benchmarks/shootout/meteor.ss index ce26dc5696..ee28342053 100644 --- a/collects/tests/mzscheme/benchmarks/shootout/meteor.ss +++ b/collects/tests/mzscheme/benchmarks/shootout/meteor.ss @@ -49,7 +49,7 @@ (y . < . height))) (define (clear? board pos) - (zero? (bitwise-and board (arithmetic-shift 1 pos)))) + (not (bitwise-bit-set? board pos))) (define (set board pos) (bitwise-ior board (arithmetic-shift 1 pos))) @@ -146,15 +146,15 @@ (for ([piece (in-list pieces)] [color (in-naturals)]) (let loop ([masks (sort (all-bitmasks piece color) >)] - [cell-mask (arithmetic-shift 1 (sub1 (* width height)))] + [cell-bit (sub1 (* width height))] [cell-counter (sub1 (* width height))]) (if (null? masks) masks-at-cell - (if (= (bitwise-and (car masks) cell-mask) cell-mask) + (if (bitwise-bit-set? (car masks) cell-bit) (let ([vec (vector-ref masks-at-cell cell-counter)]) (vector-set! vec color (cons (car masks) (vector-ref vec color))) - (loop (cdr masks) cell-mask cell-counter)) - (loop masks (arithmetic-shift cell-mask -1) (sub1 cell-counter)))))) + (loop (cdr masks) cell-bit cell-counter)) + (loop masks (sub1 cell-bit) (sub1 cell-counter)))))) (for ([v (in-vector masks-at-cell)]) (for ([j (in-naturals)] [val (in-vector v)]) diff --git a/collects/tests/mzscheme/for.ss b/collects/tests/mzscheme/for.ss index bd1ba2041e..6ee941ab69 100644 --- a/collects/tests/mzscheme/for.ss +++ b/collects/tests/mzscheme/for.ss @@ -158,5 +158,10 @@ (for/and (((a b) (in-parallel '(#f 1) '(#t #f)))) a)) +(test '(11) 'in-value (for/list ([i (in-value 11)]) i)) +(let-values ([(more? next) (sequence-generate (in-value 13))]) + (test #t more?) + (test 13 next) + (test #f more?)) (report-errs) diff --git a/collects/tests/mzscheme/optimize.ss b/collects/tests/mzscheme/optimize.ss index def53e2e67..0ca2ffbd6b 100644 --- a/collects/tests/mzscheme/optimize.ss +++ b/collects/tests/mzscheme/optimize.ss @@ -307,6 +307,19 @@ (un-exact (- (expt 2 30)) 'bitwise-not (sub1 (expt 2 30))) (un-exact (- -1 (expt 2 32)) 'bitwise-not (expt 2 32)) + (bin-exact #t 'bitwise-bit-set? 1 0) + (bin-exact #f 'bitwise-bit-set? 1 1) + (bin-exact #t 'bitwise-bit-set? 2 1) + (bin-exact #t 'bitwise-bit-set? 200 7) + (bin-exact #f 'bitwise-bit-set? 127 7) + (bin-exact #f 'bitwise-bit-set? 383 7) + (bin-exact #f 'bitwise-bit-set? 10 128) + (bin-exact #t 'bitwise-bit-set? -10 128) + (bin-exact #t 'bitwise-bit-set? (expt 2 30) 30) + (bin-exact #t 'bitwise-bit-set? (expt 2 40) 40) + (bin-exact #f 'bitwise-bit-set? (expt 2 40) 41) + (bin-exact #t 'bitwise-bit-set? (- (expt 2 40)) 41) + (bin-exact #t 'char=? #\a #\a) (bin-exact #t 'char=? #\u1034 #\u1034) (bin-exact #f 'char=? #\a #\b) diff --git a/doc/release-notes/mzscheme/HISTORY.txt b/doc/release-notes/mzscheme/HISTORY.txt index 3ea68d65b7..532a0905eb 100644 --- a/doc/release-notes/mzscheme/HISTORY.txt +++ b/doc/release-notes/mzscheme/HISTORY.txt @@ -4,6 +4,8 @@ Changed namespaces to have a base phase; for example, calling Added logging facilities: make-logger, etc. Added "inheritance" to structure type properties, and change prop:procedure from scheme/base to better support keywords +Added bitwise-bit-set? +Added in-value Version 4.0, June 2008 >> See MzScheme_4.txt diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 786cf1d049..322b2228b4 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,75 +1,75 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,52,50,0,0,0,1,0,0,6,0,9,0, -13,0,18,0,25,0,32,0,37,0,42,0,55,0,59,0,66,0,69,0,78, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,54,50,0,0,0,1,0,0,6,0,9,0, +14,0,18,0,23,0,28,0,32,0,39,0,42,0,55,0,62,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,118,7,0,0,65,98,101,103,105, -110,29,11,11,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,72,112,97,114,97, -109,101,116,101,114,105,122,101,63,97,110,100,66,108,101,116,114,101,99,62,111, -114,68,104,101,114,101,45,115,116,120,65,113,117,111,116,101,29,94,2,14,68, +110,29,11,11,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,62,111,114,72,112,97,114,97, +109,101,116,101,114,105,122,101,66,100,101,102,105,110,101,66,117,110,108,101,115, +115,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,133,217,94,159,2,16,35,35,159,2,15,35,35,16,20,2,3, -2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,2,2,9,2, -2,2,10,2,2,2,4,2,2,2,11,2,2,2,12,2,2,97,36,11,8, -133,217,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,133,217,16,0,97,10,37,11,8,133,217,16,0,13,16, +10,35,11,8,163,218,94,159,2,16,35,35,159,2,15,35,35,16,20,2,9, +2,2,2,3,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,11,2,2,2,12,2,2,97,36,11,8, +163,218,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,163,218,16,0,97,10,37,11,8,163,218,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, +8,28,8,27,27,248,22,190,3,23,196,1,249,22,183,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,23,202, -1,27,248,22,189,3,23,196,1,249,22,182,3,80,158,38,35,251,22,73,2, +1,27,248,22,190,3,23,196,1,249,22,183,3,80,158,38,35,251,22,73,2, 17,248,22,88,23,200,2,249,22,63,2,1,248,22,90,23,202,1,12,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,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,10,248,22,65, +22,65,248,22,190,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,183,3,80,158, +38,35,251,22,73,2,17,248,22,64,23,200,2,249,22,63,2,7,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,57,57,49,16,4,11,11,2,19,3,1,7, -101,110,118,55,57,57,50,27,248,22,65,248,22,189,3,23,197,1,28,248,22, +2,18,3,1,7,101,110,118,56,48,56,49,16,4,11,11,2,19,3,1,7, +101,110,118,56,48,56,50,27,248,22,65,248,22,190,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, +22,64,193,249,22,183,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,12,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,57,52,16,4, -11,11,2,19,3,1,7,101,110,118,55,57,57,53,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,36,42, -9,222,33,39,248,22,189,3,248,22,88,23,200,2,250,22,73,2,22,248,22, +249,22,63,2,9,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,56,48,56,52,16,4, +11,11,2,19,3,1,7,101,110,118,56,48,56,53,248,22,190,3,193,27,248, +22,190,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,248,22, +65,248,22,190,3,23,197,1,249,22,183,3,80,158,38,35,28,248,22,51,248, +22,184,3,248,22,64,23,198,2,27,249,22,2,32,0,89,162,8,44,36,42, +9,222,33,39,248,22,190,3,248,22,88,23,200,2,250,22,73,2,22,248,22, 73,249,22,73,248,22,73,248,22,64,23,204,2,250,22,74,2,23,249,22,2, 22,64,23,204,2,248,22,90,23,206,2,249,22,63,248,22,64,23,202,1,249, 22,2,22,88,23,200,1,250,22,74,2,20,249,22,2,32,0,89,162,8,44, -36,46,9,222,33,40,248,22,189,3,248,22,64,201,248,22,65,198,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,250,22,74,2,22,249, -22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,189,3,248,22,64, -201,248,22,65,198,27,248,22,65,248,22,189,3,196,27,248,22,189,3,248,22, -64,195,249,22,182,3,80,158,39,35,28,248,22,71,195,250,22,74,2,20,9, -248,22,65,199,250,22,73,2,3,248,22,73,248,22,64,199,250,22,74,2,8, -248,22,65,201,248,22,65,202,27,248,22,65,248,22,189,3,23,197,1,27,249, -22,1,22,77,249,22,2,22,189,3,248,22,189,3,248,22,64,199,249,22,182, +36,46,9,222,33,40,248,22,190,3,248,22,64,201,248,22,65,198,27,248,22, +190,3,194,249,22,63,248,22,73,248,22,64,196,248,22,65,195,27,248,22,65, +248,22,190,3,23,197,1,249,22,183,3,80,158,38,35,250,22,74,2,22,249, +22,2,32,0,89,162,8,44,36,46,9,222,33,42,248,22,190,3,248,22,64, +201,248,22,65,198,27,248,22,65,248,22,190,3,196,27,248,22,190,3,248,22, +64,195,249,22,183,3,80,158,39,35,28,248,22,71,195,250,22,74,2,20,9, +248,22,65,199,250,22,73,2,4,248,22,73,248,22,64,199,250,22,74,2,3, +248,22,65,201,248,22,65,202,27,248,22,65,248,22,190,3,23,197,1,27,249, +22,1,22,77,249,22,2,22,190,3,248,22,190,3,248,22,64,199,249,22,183, 3,80,158,39,35,251,22,73,1,22,119,105,116,104,45,99,111,110,116,105,110, 117,97,116,105,111,110,45,109,97,114,107,2,24,250,22,74,1,23,101,120,116, 101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,21, 95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,45, 115,101,116,45,102,105,114,115,116,11,2,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,150,8,62,61,62,248,22,183,3,248,22,88,23,197,2, +65,203,27,248,22,65,248,22,190,3,23,197,1,28,248,22,71,23,194,2,20, +15,159,36,35,36,249,22,183,3,80,158,38,35,27,248,22,190,3,248,22,64, +23,198,2,28,249,22,151,8,62,61,62,248,22,184,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,4,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, +74,2,6,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,151,8,248,22,184,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,4,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,56,48,49,55,16,4, -11,11,2,19,3,1,7,101,110,118,56,48,49,56,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,2,26, +201,1,249,22,63,2,6,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,56,49,48,55,16,4, +11,11,2,19,3,1,7,101,110,118,56,49,48,56,18,158,94,10,64,118,111, +105,100,8,47,27,248,22,65,248,22,190,3,196,249,22,183,3,80,158,38,35, +28,248,22,51,248,22,184,3,248,22,64,197,250,22,73,2,26,248,22,73,248, +22,64,199,248,22,88,198,27,248,22,184,3,248,22,64,197,250,22,73,2,26, 248,22,73,248,22,64,197,250,22,74,2,23,248,22,65,199,248,22,65,202,159, 35,20,103,159,35,16,1,2,1,16,0,83,158,41,20,100,137,69,35,37,109, 105,110,45,115,116,120,2,2,10,11,10,35,80,158,35,35,20,103,159,35,16, @@ -78,28 +78,28 @@ 11,11,11,11,11,16,10,2,3,2,4,2,5,2,6,2,7,2,8,2,9, 2,10,2,11,2,12,35,45,36,11,11,16,0,16,0,16,0,35,35,11,11, 11,16,0,16,0,16,0,35,35,16,11,16,5,93,2,13,20,15,159,35,35, -35,35,20,103,159,35,16,0,16,1,33,32,10,16,5,93,2,5,89,162,8, +35,35,20,103,159,35,16,0,16,1,33,32,10,16,5,93,2,12,89,162,8, 44,36,52,9,223,0,33,33,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,52,9,223,0,33,34, +2,13,16,0,11,16,5,93,2,5,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,10,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,12,89,162,8,44, +2,7,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,9,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,3,89,162,8,44,36,57,9,223,0,33, +13,16,1,33,38,11,16,5,93,2,4,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,11,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,8,89,162,8,44,36, +93,2,8,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,3,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,9,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,4, +16,0,11,16,5,93,2,10,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,6, 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,6,89,162,8,44,36,53, +36,2,2,2,13,16,1,33,48,11,16,5,93,2,11,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, 2031); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,52,59,0,0,0,1,0,0,3,0,16,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,54,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,5,241, @@ -131,177 +131,177 @@ 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,166,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, +158,39,51,249,22,27,11,80,158,41,50,22,167,12,10,248,22,135,5,23,196, +2,28,248,22,177,5,23,194,2,12,87,94,248,22,154,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,147,13,23,195,2,23,194,1,28,248,22,146,13,23,195,2,249,22, -148,13,23,196,1,250,80,158,42,48,248,22,162,13,2,20,11,10,250,80,158, -40,48,248,22,162,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22, -150,13,249,22,148,13,23,198,1,247,22,163,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,147,13,23, -195,2,23,194,1,28,248,22,146,13,23,195,2,249,22,148,13,23,196,1,250, -80,158,47,48,248,22,162,13,2,20,11,10,250,80,158,45,48,248,22,162,13, -2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,150,13,249,22,148,13, -23,198,1,247,22,163,13,248,80,159,45,52,36,248,22,65,23,199,1,87,94, +28,248,22,148,13,23,195,2,23,194,1,28,248,22,147,13,23,195,2,249,22, +149,13,23,196,1,250,80,158,42,48,248,22,163,13,2,20,11,10,250,80,158, +40,48,248,22,163,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248,22, +151,13,249,22,149,13,23,198,1,247,22,164,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,148,13,23, +195,2,23,194,1,28,248,22,147,13,23,195,2,249,22,149,13,23,196,1,250, +80,158,47,48,248,22,163,13,2,20,11,10,250,80,158,45,48,248,22,163,13, +2,20,23,197,1,10,28,23,193,2,249,22,63,248,22,151,13,249,22,149,13, +23,198,1,247,22,164,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,147,13,23,195,2,23,194,1,28,248,22,146,13,23,195,2,249, -22,148,13,23,196,1,250,80,158,45,48,248,22,162,13,2,20,11,10,250,80, -158,43,48,248,22,162,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248, -22,150,13,249,22,148,13,23,198,1,247,22,163,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,187,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,145,13,195,28,192,192,248,22,146,13,195,11,87,94,28,28,248,22,188, -12,23,195,2,10,27,248,22,187,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,145,13,23,197,2,28,23,193, -2,192,87,94,23,193,1,248,22,146,13,23,197,2,11,12,250,22,180,8,76, +27,28,248,22,148,13,23,195,2,23,194,1,28,248,22,147,13,23,195,2,249, +22,149,13,23,196,1,250,80,158,45,48,248,22,163,13,2,20,11,10,250,80, +158,43,48,248,22,163,13,2,20,23,197,1,10,28,23,193,2,249,22,63,248, +22,151,13,249,22,149,13,23,198,1,247,22,164,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,188,12,23, +195,2,28,23,193,2,192,87,94,23,193,1,28,248,22,146,6,23,195,2,27, +248,22,146,13,195,28,192,192,248,22,147,13,195,11,87,94,28,28,248,22,189, +12,23,195,2,10,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,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,188,12,23,195,2,249,22,150,8,248,22,189,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,128,13,23,197,2,28,249,22,175,13,0,21, +2,28,28,248,22,189,12,23,195,2,249,22,151,8,248,22,190,12,23,197,2, +2,21,249,22,151,8,247,22,165,7,2,21,27,28,248,22,146,6,23,196,2, +23,195,2,248,22,155,7,248,22,129,13,23,197,2,28,249,22,176,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,145,6,195,248,22,131,13,195,194,27,248,22,184,6,23, -195,1,249,22,132,13,248,22,157,7,250,22,181,13,0,6,35,114,120,34,47, -34,28,249,22,175,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,181,13,0,19, +23,195,2,28,248,22,146,6,195,248,22,132,13,195,194,27,248,22,185,6,23, +195,1,249,22,133,13,248,22,158,7,250,22,182,13,0,6,35,114,120,34,47, +34,28,249,22,176,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,182,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,145,6,194,248,22,131, -13,194,193,87,94,28,27,248,22,187,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,145,13,23,197,2,28,23, -193,2,192,87,94,23,193,1,248,22,146,13,23,197,2,11,12,250,22,180,8, -23,196,2,2,22,23,197,2,28,248,22,145,13,23,195,2,12,248,22,142,11, -249,22,151,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,187,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,145,13,23,197,2,28,23,193, -2,192,87,94,23,193,1,248,22,146,13,23,197,2,11,12,250,22,180,8,23, -196,2,2,22,23,197,2,28,248,22,145,13,23,195,2,12,248,22,142,11,249, -22,151,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,187,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,145,13,23,197,2,28,23, -193,2,192,87,94,23,193,1,248,22,146,13,23,197,2,11,12,250,22,180,8, -195,2,22,23,197,2,28,248,22,145,13,23,195,2,12,248,22,142,11,249,22, -151,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,142,11,249,22,181,10, +1,6,2,2,92,49,80,158,43,36,2,21,28,248,22,146,6,194,248,22,132, +13,194,193,87,94,28,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94, +23,193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23, +193,2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8, +23,196,2,2,22,23,197,2,28,248,22,146,13,23,195,2,12,248,22,143,11, +249,22,152,10,248,22,175,6,250,22,130,7,2,23,23,200,1,23,201,1,247, +22,23,87,94,28,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94,23, +193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23,193, +2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8,23, +196,2,2,22,23,197,2,28,248,22,146,13,23,195,2,12,248,22,143,11,249, +22,152,10,248,22,175,6,250,22,130,7,2,23,23,200,1,23,201,1,247,22, +23,87,94,87,94,28,27,248,22,188,12,23,196,2,28,23,193,2,192,87,94, +23,193,1,28,248,22,146,6,23,196,2,27,248,22,146,13,23,197,2,28,23, +193,2,192,87,94,23,193,1,248,22,147,13,23,197,2,11,12,250,22,181,8, +195,2,22,23,197,2,28,248,22,146,13,23,195,2,12,248,22,143,11,249,22, +152,10,248,22,175,6,250,22,130,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,143,11,249,22,182,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,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,141,13,23,204,1, -23,205,1,23,198,1,27,249,22,141,13,248,22,64,23,202,2,23,199,2,28, -248,22,136,13,23,194,2,27,250,22,1,22,141,13,23,197,1,23,202,2,28, -248,22,136,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, +87,94,23,198,1,248,23,196,1,251,22,130,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,142,13,23,204,1, +23,205,1,23,198,1,27,249,22,142,13,248,22,64,23,202,2,23,199,2,28, +248,22,137,13,23,194,2,27,250,22,1,22,142,13,23,197,1,23,202,2,28, +248,22,137,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,130,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,141,13,23,207,1,23,208,1,23,201,1,27,249,22,141,13,248,22,64,23, -197,2,23,202,2,28,248,22,136,13,23,194,2,27,250,22,1,22,141,13,23, -197,1,204,28,248,22,136,13,193,192,253,2,38,203,204,205,206,23,15,248,22, +22,142,13,23,207,1,23,208,1,23,201,1,27,249,22,142,13,248,22,64,23, +197,2,23,202,2,28,248,22,137,13,23,194,2,27,250,22,1,22,142,13,23, +197,1,204,28,248,22,137,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,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,141,13,23,206,1,23,207,1,23,200,1,27,249,22, -141,13,248,22,64,23,197,2,23,201,2,28,248,22,136,13,23,194,2,27,250, -22,1,22,141,13,23,197,1,203,28,248,22,136,13,193,192,253,2,38,202,203, +251,22,130,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,142,13,23,206,1,23,207,1,23,200,1,27,249,22, +142,13,248,22,64,23,197,2,23,201,2,28,248,22,137,13,23,194,2,27,250, +22,1,22,142,13,23,197,1,203,28,248,22,137,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,164,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,188,12,23, -194,2,10,27,248,22,187,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,145,13,23,196,2,28,23,193,2,192, -87,94,23,193,1,248,22,146,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,144,13,23,197, -2,87,94,23,195,1,87,94,28,192,12,250,22,181,8,23,201,1,2,27,23, +22,165,13,253,2,38,198,199,200,201,202,198,87,95,28,28,248,22,189,12,23, +194,2,10,27,248,22,188,12,23,195,2,28,23,193,2,192,87,94,23,193,1, +28,248,22,146,6,23,195,2,27,248,22,146,13,23,196,2,28,23,193,2,192, +87,94,23,193,1,248,22,147,13,23,196,2,11,12,252,22,181,8,23,200,2, +2,25,35,23,198,2,23,199,2,28,28,248,22,146,6,23,195,2,10,248,22, +134,7,23,195,2,87,94,23,194,1,12,252,22,181,8,23,200,2,2,26,36, +23,198,2,23,199,1,91,159,38,11,90,161,38,35,11,248,22,145,13,23,197, +2,87,94,23,195,1,87,94,28,192,12,250,22,182,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,188,12,23,196,2,10,27,248,22,187,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,145,13,23,198,2,28, -23,193,2,192,87,94,23,193,1,248,22,146,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,144,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,133,13,250,22,180,13,0,18,35, -114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,129,13, -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,188,12,23,199,2,248,22,189,12,23,199,1,87,94,23,198, -1,247,22,190,12,28,248,22,187,12,194,249,22,141,13,195,194,192,91,159,37, -11,90,161,37,35,11,87,95,28,28,248,22,188,12,23,196,2,10,27,248,22, -187,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,145,13,23,198,2,28,23,193,2,192,87,94,23,193,1,248, -22,146,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,144,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,133,13,249,22,143,7,250,22,181,13,0,9,35,114,120,35,34,91,46, -93,34,248,22,129,13,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,188,12,23,199,2,248, -22,189,12,23,199,1,87,94,23,198,1,247,22,190,12,28,248,22,187,12,194, -249,22,141,13,195,194,192,249,247,22,132,6,194,11,248,80,158,36,46,9,27, -247,22,166,13,249,80,158,38,47,28,23,195,2,27,248,22,162,7,6,11,11, +22,189,12,23,196,2,10,27,248,22,188,12,23,197,2,28,23,193,2,192,87, +94,23,193,1,28,248,22,146,6,23,197,2,27,248,22,146,13,23,198,2,28, +23,193,2,192,87,94,23,193,1,248,22,147,13,23,198,2,11,12,252,22,181, +8,2,10,2,25,35,23,200,2,23,201,2,28,28,248,22,146,6,23,197,2, +10,248,22,134,7,23,197,2,12,252,22,181,8,2,10,2,26,36,23,200,2, +23,201,2,91,159,38,11,90,161,38,35,11,248,22,145,13,23,199,2,87,94, +23,195,1,87,94,28,23,193,2,12,250,22,182,8,2,10,2,27,23,201,2, +249,22,7,23,195,1,23,196,1,27,249,22,134,13,250,22,181,13,0,18,35, +114,120,35,34,40,91,46,93,91,94,46,93,42,124,41,36,34,248,22,130,13, +23,201,1,28,248,22,146,6,23,203,2,249,22,158,7,23,204,1,8,63,23, +202,1,28,248,22,189,12,23,199,2,248,22,190,12,23,199,1,87,94,23,198, +1,247,22,191,12,28,248,22,188,12,194,249,22,142,13,195,194,192,91,159,37, +11,90,161,37,35,11,87,95,28,28,248,22,189,12,23,196,2,10,27,248,22, +188,12,23,197,2,28,23,193,2,192,87,94,23,193,1,28,248,22,146,6,23, +197,2,27,248,22,146,13,23,198,2,28,23,193,2,192,87,94,23,193,1,248, +22,147,13,23,198,2,11,12,252,22,181,8,2,11,2,25,35,23,200,2,23, +201,2,28,28,248,22,146,6,23,197,2,10,248,22,134,7,23,197,2,12,252, +22,181,8,2,11,2,26,36,23,200,2,23,201,2,91,159,38,11,90,161,38, +35,11,248,22,145,13,23,199,2,87,94,23,195,1,87,94,28,23,193,2,12, +250,22,182,8,2,11,2,27,23,201,2,249,22,7,23,195,1,23,196,1,27, +249,22,134,13,249,22,144,7,250,22,182,13,0,9,35,114,120,35,34,91,46, +93,34,248,22,130,13,23,203,1,6,1,1,95,28,248,22,146,6,23,202,2, +249,22,158,7,23,203,1,8,63,23,201,1,28,248,22,189,12,23,199,2,248, +22,190,12,23,199,1,87,94,23,198,1,247,22,191,12,28,248,22,188,12,194, +249,22,142,13,195,194,192,249,247,22,133,6,194,11,248,80,158,36,46,9,27, +247,22,167,13,249,80,158,38,47,28,23,195,2,27,248,22,163,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,141,13,248,22,162,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,162,13,72,99,111,108,108, +28,23,196,1,250,22,142,13,248,22,163,13,69,97,100,100,111,110,45,100,105, +114,247,22,161,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,163,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,173,13,23,197, +192,32,47,89,162,8,44,38,54,2,19,222,33,48,27,249,22,174,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,173,13,23,201,2,23,196,2,28,23,193, +27,248,22,97,23,197,1,27,249,22,174,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,139,7,23,196,2,2,28,249,22,77, -23,202,2,194,249,22,63,248,22,132,13,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,132,13,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,132,13,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,132,13,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, +204,1,248,22,97,23,199,1,28,249,22,140,7,23,196,2,2,28,249,22,77, +23,202,2,194,249,22,63,248,22,133,13,23,197,1,23,195,1,87,95,23,199, +1,23,193,1,28,249,22,140,7,23,196,2,2,28,249,22,77,23,200,2,9, +249,22,63,248,22,133,13,23,197,1,9,28,249,22,140,7,23,196,2,2,28, +249,22,77,197,194,87,94,23,196,1,249,22,63,248,22,133,13,23,197,1,194, +87,94,23,193,1,28,249,22,140,7,23,198,2,2,28,249,22,77,195,9,87, +94,23,194,1,249,22,63,248,22,133,13,23,199,1,9,87,95,28,28,248,22, +134,7,194,10,248,22,146,6,194,12,250,22,181,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,187,12,196,11,12,250,22,180,8,2,14,6, +28,248,22,72,195,249,22,4,22,188,12,196,11,12,250,22,181,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,145,6,197,248,22,156,7,197,196,32,50,89,162,8,44,39,57,2, +28,248,22,146,6,197,248,22,157,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,144, -13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,149, -13,23,201,2,28,249,22,152,8,23,195,2,23,202,2,11,28,248,22,145,13, -23,194,2,250,2,51,23,201,2,23,202,2,249,22,141,13,23,200,2,23,198, +101,99,222,33,52,28,23,193,2,91,159,38,11,90,161,38,35,11,248,22,145, +13,23,199,2,87,95,23,195,1,23,194,1,27,28,23,198,2,27,248,22,150, +13,23,201,2,28,249,22,153,8,23,195,2,23,202,2,11,28,248,22,146,13, +23,194,2,250,2,51,23,201,2,23,202,2,249,22,142,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,187,12,23,196,2,27,249,22,141,13,23,198,2,23, -201,2,28,28,248,22,136,13,193,10,248,22,135,13,193,192,11,11,28,23,193, -2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,149,13,23,202,2,28, -249,22,152,8,23,195,2,23,203,1,11,28,248,22,145,13,23,194,2,250,2, -51,23,202,1,23,203,1,249,22,141,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,148,13,248,22,64,23,199, -2,27,249,22,141,13,23,196,1,23,197,2,28,248,22,135,13,23,194,2,250, +23,193,1,27,28,248,22,188,12,23,196,2,27,249,22,142,13,23,198,2,23, +201,2,28,28,248,22,137,13,193,10,248,22,136,13,193,192,11,11,28,23,193, +2,192,87,94,23,193,1,28,23,199,2,11,27,248,22,150,13,23,202,2,28, +249,22,153,8,23,195,2,23,203,1,11,28,248,22,146,13,23,194,2,250,2, +51,23,202,1,23,203,1,249,22,142,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,149,13,248,22,64,23,199, +2,27,249,22,142,13,23,196,1,23,197,2,28,248,22,136,13,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,148,13,248,22,64,23,196,2,27,249,22,141,13,23, -196,1,23,200,2,28,248,22,135,13,23,194,2,250,2,51,201,202,195,87,94, +23,194,2,11,27,248,22,149,13,248,22,64,23,196,2,27,249,22,142,13,23, +196,1,23,200,2,28,248,22,136,13,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, -148,13,248,22,64,195,27,249,22,141,13,23,196,1,202,28,248,22,135,13,193, +149,13,248,22,64,195,27,249,22,142,13,23,196,1,202,28,248,22,136,13,193, 250,2,51,204,205,195,251,2,50,204,205,206,248,22,65,199,87,95,28,27,248, -22,187,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,145,13,23,197,2,28,23,193,2,192,87,94,23,193,1, -248,22,146,13,23,197,2,11,12,250,22,180,8,2,15,6,25,25,112,97,116, +22,188,12,23,196,2,28,23,193,2,192,87,94,23,193,1,28,248,22,146,6, +23,196,2,27,248,22,146,13,23,197,2,28,23,193,2,192,87,94,23,193,1, +248,22,147,13,23,197,2,11,12,250,22,181,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,187,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,145,13,23, -198,2,28,23,193,2,192,87,94,23,193,1,248,22,146,13,23,198,2,11,248, -22,145,13,23,196,2,11,10,12,250,22,180,8,2,15,6,29,29,35,102,32, +41,23,197,2,28,28,23,195,2,28,27,248,22,188,12,23,197,2,28,23,193, +2,192,87,94,23,193,1,28,248,22,146,6,23,197,2,27,248,22,146,13,23, +198,2,28,23,193,2,192,87,94,23,193,1,248,22,147,13,23,198,2,11,248, +22,146,13,23,196,2,11,10,12,250,22,181,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,145,13,23,195,2,91,159,38,11, -90,161,38,35,11,248,22,144,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, +116,114,105,110,103,23,198,2,28,28,248,22,146,13,23,195,2,91,159,38,11, +90,161,38,35,11,248,22,145,13,23,198,2,249,22,151,8,194,68,114,101,108, +97,116,105,118,101,11,27,248,22,163,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,150,8,247,22,164,7,2,21,249,22,63,248,22,132,13,5, -1,46,23,195,1,192,9,27,248,22,148,13,23,196,1,28,248,22,135,13,193, +1,9,28,249,22,151,8,247,22,165,7,2,21,249,22,63,248,22,133,13,5, +1,46,23,195,1,192,9,27,248,22,149,13,23,196,1,28,248,22,136,13,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,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,162,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,131,5,23,197,1,83,158,39,20,97,95, +11,11,87,94,249,22,138,6,247,22,179,4,195,248,22,153,5,249,22,163,3, +35,249,22,147,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,163,13,2,20,27,249,80,158,40,48,23, +196,1,11,27,27,248,22,166,3,23,200,1,28,192,192,35,27,27,248,22,166, +3,23,202,1,28,192,192,35,249,22,132,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, -182,4,23,195,1,248,80,159,38,53,36,193,159,35,20,103,159,35,16,1,65, +183,4,23,195,1,248,80,159,38,53,36,193,159,35,20,103,159,35,16,1,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,5,193,30,2, @@ -319,7 +319,7 @@ 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,147,6,7,92,7,92,80,159,35,36,36,83,158,35,16, +158,35,16,2,249,22,148,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,159,35,39,36, @@ -331,8 +331,8 @@ 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,169,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, +46,36,83,158,35,16,2,27,248,22,170,13,248,22,157,7,27,28,249,22,151, +8,247,22,165,7,2,21,6,1,1,59,6,1,1,58,250,22,130,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, @@ -343,12 +343,12 @@ EVAL_ONE_SIZED_STR((char *)expr, 5056); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,52,8,0,0,0,1,0,0,6,0,19,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,54,8,0,0,0,1,0,0,6,0,19,0, 34,0,48,0,62,0,76,0,111,0,0,0,241,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,135,219,97,159,2,2,35,35, +37,107,101,114,110,101,108,11,98,10,35,11,8,165,220,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,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,18,96,11,42, @@ -360,7 +360,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 278); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,52,52,0,0,0,1,0,0,3,0,14,0, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,52,46,48,46,50,46,54,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,2,172, @@ -382,48 +382,48 @@ 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,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,187,12,23,194, -2,91,159,38,11,90,161,38,35,11,248,22,144,13,23,197,1,87,95,83,160, +10,27,28,23,195,2,28,249,22,151,8,23,197,2,80,158,38,46,87,94,23, +195,1,80,158,36,47,27,248,22,162,4,23,197,2,28,248,22,188,12,23,194, +2,91,159,38,11,90,161,38,35,11,248,22,145,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,133,6,28,192,192,247,22,163,13,20, -14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,133, -6,28,248,22,187,12,23,198,2,23,197,1,87,94,23,197,1,247,22,163,13, -247,194,250,22,141,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, -18,252,22,141,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,158,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,158,13, +193,2,192,87,94,23,193,1,27,247,22,134,6,28,192,192,247,22,164,13,20, +14,159,80,158,35,39,250,80,158,38,40,249,22,27,11,80,158,40,39,22,134, +6,28,248,22,188,12,23,198,2,23,197,1,87,94,23,197,1,247,22,164,13, +247,194,250,22,142,13,23,197,1,23,199,1,249,80,158,42,38,23,198,1,2, +18,252,22,142,13,23,199,1,23,201,1,6,6,6,110,97,116,105,118,101,247, +22,166,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,159,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,159,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,168,13,248,22,64,195,195,27,250,22,141,13,23,198,1,23,200,1, -249,80,158,43,38,23,199,1,2,18,27,250,22,158,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, +249,247,22,169,13,248,22,64,195,195,27,250,22,142,13,23,198,1,23,200,1, +249,80,158,43,38,23,199,1,2,18,27,250,22,159,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,132,6,248, +22,64,195,195,249,247,22,132,6,194,195,87,94,28,248,80,158,36,37,23,195, +2,12,250,22,181,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,147,13,23,201,2,23,200,1,27,247,22,133,6,28,23,193,2, -249,22,148,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,144,13,23, -194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,150,8,23,196,2,68, +11,28,248,22,148,13,23,201,2,23,200,1,27,247,22,134,6,28,23,193,2, +249,22,149,13,23,203,1,23,195,1,200,90,161,38,36,11,248,22,145,13,23, +194,2,87,94,23,196,1,90,161,36,39,11,28,249,22,151,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,165,13,27,89,162,43,36,49,62,122,111,225,7,5,3,33,27, +40,11,247,22,166,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,205,2, -27,28,23,196,2,11,193,28,192,192,28,193,28,23,196,2,28,249,22,158,3, +27,28,23,196,2,11,193,28,192,192,28,193,28,23,196,2,28,249,22,159,3, 248,22,65,196,248,22,65,23,199,2,193,11,11,11,87,94,23,195,1,11,28, 23,193,2,249,80,159,47,54,36,202,89,162,43,35,45,9,224,14,2,33,31, 87,94,23,193,1,27,28,23,197,1,27,249,22,5,83,158,39,20,97,94,89, 162,8,44,36,50,9,225,14,12,10,33,32,23,203,1,23,206,1,27,28,196, -11,193,28,192,192,28,193,28,196,28,249,22,158,3,248,22,65,196,248,22,65, +11,193,28,192,192,28,193,28,196,28,249,22,159,3,248,22,65,196,248,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,173,13,2,37,23, +94,40,46,42,63,41,47,40,46,42,41,36,34,27,249,22,174,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,173,13,2,37,23,196,2,28,23,193,2,87, +248,22,97,23,197,1,27,249,22,174,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,173,13,2,37,23,196,2,28,23,193,2,87,94,23,194,1,249,22,63, +249,22,174,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,90,161, @@ -434,96 +434,96 @@ 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,159,4,195,12,250,22,180,8,2,20,6,20,20, +2,39,193,87,95,28,248,22,160,4,195,12,250,22,181,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,129,14,247,22,170,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,129,14,247, -22,170,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, +80,158,41,42,248,22,130,14,247,22,171,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,130,14,247, +22,171,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,180,8,11,196,195,248,22,178,8,194,28,249,22,152, +6,194,6,1,1,46,2,17,28,249,22,152,6,194,6,2,2,46,46,62,117, +112,192,28,249,22,153,8,248,22,65,23,200,2,23,197,1,28,249,22,151,8, +248,22,64,23,200,2,23,196,1,251,22,178,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,170,11,23,197, +1,12,12,247,192,20,14,159,80,158,39,44,249,22,63,247,22,171,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,132,6,23,198,1,248,22,52,248,22,191,12, -23,198,1,87,94,28,28,248,22,187,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, +22,143,4,23,196,1,249,247,22,133,6,23,198,1,248,22,52,248,22,128,13, +23,198,1,87,94,28,28,248,22,188,12,23,197,2,10,248,22,165,4,23,197, +2,12,28,23,198,2,250,22,180,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,181,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,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, +28,28,248,22,61,23,197,2,249,22,151,8,248,22,64,23,199,2,2,4,11, +248,22,161,4,248,22,88,197,28,28,248,22,61,23,197,2,249,22,151,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,170,11,23, -197,1,90,161,36,35,10,249,22,143,4,21,94,2,21,6,18,18,112,108,97, +80,158,37,39,250,80,158,40,40,249,22,27,11,80,158,42,39,22,171,11,23, +197,1,90,161,36,35,10,249,22,144,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,164,13,11,28,23,193,2,192,87,94,23,193,1,91, +22,63,23,204,2,247,22,165,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,141,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, +22,142,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,169,6,23,199,1,6,3,3,46,115,115,28, +248,22,146,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,141,13,23,199,1,249,22,77,249,22, +45,48,36,23,204,2,11,250,22,1,22,142,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,187,12,23,199,2,87,94,23,194,1,28,248,22,146,13,23,199, +1,28,248,22,188,12,23,199,2,87,94,23,194,1,28,248,22,147,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,150,8,248, +115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,249,22,151,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,164,13,11,28,23,193,2,192,87,94,23,193,1,91,159,38,11,90, +2,247,22,165,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,175, +11,28,248,22,71,248,22,90,23,204,2,28,248,22,71,23,194,2,249,22,176, 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,141,13,23,195,1,28,23,198,1,87,94,23,196,1,23,197,1,28,248, +249,22,142,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,175,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,148,13,248,22,152,13,248,22,88,23,202,2, -248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,187,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, +249,22,176,13,0,8,35,114,120,34,91,46,93,34,23,199,2,23,197,1,249, +22,169,6,23,199,1,6,3,3,46,115,115,28,249,22,151,8,248,22,64,23, +201,2,64,102,105,108,101,249,22,149,13,248,22,153,13,248,22,88,23,202,2, +248,80,159,42,55,36,23,202,2,12,87,94,28,28,248,22,188,12,23,194,2, +10,248,22,168,7,23,194,2,87,94,23,200,1,12,28,23,200,2,250,22,180, +8,67,114,101,113,117,105,114,101,249,22,130,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,180,8,2,20,249,22,129, +2,6,0,0,23,203,1,87,94,23,200,1,250,22,181,8,2,20,249,22,130, 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,150,13,248,22,151,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,144,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,129,14,247,22,170,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,129, -14,247,22,170,11,195,192,87,95,28,23,209,1,27,250,22,133,2,23,197,2, +248,22,64,23,199,2,6,0,0,23,201,2,27,28,248,22,168,7,23,195,2, +249,22,173,7,23,196,2,35,249,22,151,13,248,22,152,13,23,197,2,11,27, +28,248,22,168,7,23,196,2,249,22,173,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,168,7,23,199,2,250, +22,7,2,22,249,22,173,7,23,203,2,37,2,22,248,22,145,13,23,198,2, +87,95,23,195,1,23,193,1,27,28,248,22,168,7,23,200,2,249,22,173,7, +23,201,2,38,249,80,158,47,52,23,197,2,5,0,27,28,248,22,168,7,23, +201,2,249,22,173,7,23,202,2,39,248,22,161,4,23,200,2,27,27,250,22, +133,2,80,158,51,42,248,22,130,14,247,22,171,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,130, +14,247,22,171,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,170,11,249,22,3,83,158,39,20,97,94,89,162,8,44,36,54,9, +27,247,22,171,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,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, +28,248,22,168,7,23,202,1,11,27,248,22,146,6,23,208,2,28,192,192,28, +248,22,61,23,208,2,249,22,151,8,248,22,64,23,210,2,2,21,11,250,22, +131,2,80,158,50,43,28,248,22,146,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, -164,13,252,22,169,7,23,208,1,23,207,1,23,205,1,23,203,1,201,12,193, +165,13,252,22,170,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,170,11,248,22,132,6,80,158,36,36,248,22, -161,12,80,159,36,41,36,159,35,20,103,159,35,16,1,65,98,101,103,105,110, +142,4,248,80,158,37,49,247,22,171,11,248,22,133,6,80,158,36,36,248,22, +162,12,80,159,36,41,36,159,35,20,103,159,35,16,1,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,10,30,2,5, @@ -544,7 +544,7 @@ 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,164,7,69,115,111,45,115,117,102,102,105,120, +54,36,83,158,35,16,2,248,22,165,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,42,36,83,158, diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index 61e4752ab4..63bcb3c058 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -2854,6 +2854,7 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj cmp = 0 -> = or zero? cmp = +/-1 -> >=/<= cmp = +/-2 -> >/< or positive/negative? + cmp = 3 -> bitwise-bit-test? */ { GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3, *ref4, *refd = NULL, *refdt = NULL, *refslow; @@ -2866,7 +2867,10 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj && SCHEME_INT_SMALL_ENOUGH(rand2) && ((arith != 6) || ((SCHEME_INT_VAL(rand2) <= MAX_TRY_SHIFT) - && (SCHEME_INT_VAL(rand2) >= -MAX_TRY_SHIFT)))) { + && (SCHEME_INT_VAL(rand2) >= -MAX_TRY_SHIFT))) + && ((cmp != 3) + || ((SCHEME_INT_VAL(rand2) <= MAX_TRY_SHIFT) + && (SCHEME_INT_VAL(rand2) >= 0)))) { /* Second is constant, so use constant mode. For arithmetic shift, only do this if the constant is in range. */ @@ -2874,7 +2878,8 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj rand2 = NULL; } else if (SCHEME_INTP(rand) && SCHEME_INT_SMALL_ENOUGH(rand) - && (arith != 6)) { + && (arith != 6) + && (cmp != 3)) { /* First is constant; swap argument order and use constant mode. */ v = SCHEME_INT_VAL(rand); cmp = -cmp; @@ -3250,7 +3255,23 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj } else { /* If second is constant, first arg is in JIT_R0. */ /* Otherwise, first arg is in JIT_R1, second is in JIT_R0 */ + /* Jump to ref3 to produce false */ switch (cmp) { + case -3: + if (rand2) { + (void)jit_blti_l(refslow, JIT_R1, 0); + (void)jit_bgti_l(refslow, JIT_R1, (long)scheme_make_integer(MAX_TRY_SHIFT)); + jit_rshi_l(JIT_R1, JIT_R1, 1); + jit_addi_l(JIT_V1, JIT_R1, 1); + jit_movi_l(JIT_R2, 1); + jit_lshr_l(JIT_R2, JIT_R2, JIT_V1); + ref3 = jit_bmcr_l(jit_forward(), JIT_R0, JIT_R2); + } else { + /* shouldn't get here */ + scheme_signal_error("bitwise-bit-test? constant in wrong position"); + ref3 = NULL; + } + break; case -2: if (rand2) { ref3 = jit_bger_l(jit_forward(), JIT_R1, JIT_R0); @@ -3280,13 +3301,26 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj } break; case 2: - default: if (rand2) { ref3 = jit_bler_l(jit_forward(), JIT_R1, JIT_R0); } else { ref3 = jit_blei_l(jit_forward(), JIT_R0, (long)scheme_make_integer(v)); } break; + default: + case 3: + if (rand2) { + (void)jit_blti_l(refslow, JIT_R0, 0); + (void)jit_bgti_l(refslow, JIT_R0, (long)scheme_make_integer(MAX_TRY_SHIFT)); + jit_rshi_l(JIT_R0, JIT_R0, 1); + jit_addi_l(JIT_R0, JIT_R0, 1); + jit_movi_l(JIT_V1, 1); + jit_lshr_l(JIT_R0, JIT_V1, JIT_R0); + ref3 = jit_bmcr_l(jit_forward(), JIT_R1, JIT_R0); + } else { + ref3 = jit_bmci_l(jit_forward(), JIT_R0, 1 << (v+1)); + } + break; } if (refdt) @@ -4092,6 +4126,9 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i } else if (IS_NAMED_PRIM(rator, ">")) { generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, 2, 0, for_branch, branch_short); return 1; + } else if (IS_NAMED_PRIM(rator, "bitwise-bit-set?")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, 3, 0, for_branch, branch_short); + return 1; } else if (IS_NAMED_PRIM(rator, "char=?")) { generate_binary_char(jitter, app, for_branch, branch_short); return 1; diff --git a/src/mzscheme/src/lightning/i386/core.h b/src/mzscheme/src/lightning/i386/core.h index 83cbf20165..f4329c1029 100644 --- a/src/mzscheme/src/lightning/i386/core.h +++ b/src/mzscheme/src/lightning/i386/core.h @@ -444,8 +444,8 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX }; #define jit_bler_ui(label, s1, s2) jit_bra_r((s1), (s2), JBEm(label,0,0,0) ) #define jit_bgtr_ui(label, s1, s2) jit_bra_r((s1), (s2), JAm(label, 0,0,0) ) #define jit_bger_ui(label, s1, s2) jit_bra_r((s1), (s2), JAEm(label,0,0,0) ) -#define jit_bmsr_i(label, s1, s2) (TESTLrr((s1), (s2)), JNZm(label,0,0,0), _jit.x.pc) -#define jit_bmcr_i(label, s1, s2) (TESTLrr((s1), (s2)), JZm(label,0,0,0), _jit.x.pc) +#define jit_bmsr_i(label, s1, s2) (TESTQrr((s1), (s2)), JNZm(label,0,0,0), _jit.x.pc) +#define jit_bmcr_i(label, s1, s2) (TESTQrr((s1), (s2)), JZm(label,0,0,0), _jit.x.pc) #define jit_boaddr_i(label, s1, s2) (ADDLrr((s2), (s1)), JOm(label,0,0,0), _jit.x.pc) #define jit_bosubr_i(label, s1, s2) (SUBLrr((s2), (s1)), JOm(label,0,0,0), _jit.x.pc) #define jit_boaddr_ui(label, s1, s2) (ADDLrr((s2), (s1)), JCm(label,0,0,0), _jit.x.pc) diff --git a/src/mzscheme/src/number.c b/src/mzscheme/src/number.c index 2349f2348b..0f1a4b1364 100644 --- a/src/mzscheme/src/number.c +++ b/src/mzscheme/src/number.c @@ -71,6 +71,7 @@ static Scheme_Object *even_p (int argc, Scheme_Object *argv[]); static Scheme_Object *bitwise_or (int argc, Scheme_Object *argv[]); static Scheme_Object *bitwise_xor (int argc, Scheme_Object *argv[]); static Scheme_Object *bitwise_not (int argc, Scheme_Object *argv[]); +static Scheme_Object *bitwise_bit_set_p (int argc, Scheme_Object *argv[]); static Scheme_Object *integer_length (int argc, Scheme_Object *argv[]); static Scheme_Object *gcd (int argc, Scheme_Object *argv[]); static Scheme_Object *lcm (int argc, Scheme_Object *argv[]); @@ -308,6 +309,10 @@ scheme_init_number (Scheme_Env *env) SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; scheme_add_global_constant("bitwise-not", p, env); + p = scheme_make_folding_prim(bitwise_bit_set_p, "bitwise-bit-set?", 2, 2, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("bitwise-bit-set?", p, env); + p = scheme_make_folding_prim(scheme_bitwise_shift, "arithmetic-shift", 2, 2, 1); SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; scheme_add_global_constant("arithmetic-shift", p, env); @@ -2490,6 +2495,57 @@ scheme_bitwise_shift(int argc, Scheme_Object *argv[]) return scheme_bignum_shift(v, shift); } +static Scheme_Object *bitwise_bit_set_p (int argc, Scheme_Object *argv[]) +{ + Scheme_Object *so, *sb; + + so = argv[0]; + if (!SCHEME_EXACT_INTEGERP(so)) { + scheme_wrong_type("bitwise-bit-set?", "exact integer", 0, argc, argv); + ESCAPED_BEFORE_HERE; + } + sb = argv[1]; + if (SCHEME_INTP(sb)) { + long v; + v = SCHEME_INT_VAL(sb); + if (v < 0) { + scheme_wrong_type("bitwise-bit-set?", "nonnegative exact integer", 1, argc, argv); + ESCAPED_BEFORE_HERE; + } + if (SCHEME_INTP(so)) { + if (v < (sizeof(long) * 8)) + return ((((long)1 << v) & SCHEME_INT_VAL(so)) ? scheme_true : scheme_false); + else + return ((SCHEME_INT_VAL(so) < 0) ? scheme_true : scheme_false); + } else { + bigdig d; + long vd, vb; + vd = v / (sizeof(bigdig) * 8); + vb = v & ((sizeof(bigdig) * 8) - 1); + if (vd >= ((Scheme_Bignum *)so)->len) + return (SCHEME_BIGPOS(so) ? scheme_false : scheme_true); + if (SCHEME_BIGPOS(so)) { + d = ((Scheme_Bignum *)so)->digits[vd]; + return ((((bigdig)1 << vb) & d) ? scheme_true : scheme_false); + } else { + /* Testing a bit in a negative bignum. Just use the slow way for now. */ + Scheme_Object *bit; + bit = scheme_bignum_shift(scheme_make_bignum(1), v); + bit = scheme_bignum_and(bit, so); + return (SAME_OBJ(bit, scheme_make_integer(0)) ? scheme_false : scheme_true); + } + } + } else if (SCHEME_BIGNUMP(sb) && SCHEME_BIGPOS(sb)) { + if (SCHEME_INTP(so)) + return ((SCHEME_INT_VAL(so) < 0) ? scheme_true : scheme_false); + else + return (SCHEME_BIGPOS(so) ? scheme_false : scheme_true); + } else { + scheme_wrong_type("bitwise-bit-set?", "nonnegative exact integer", 1, argc, argv); + ESCAPED_BEFORE_HERE; + } +} + static Scheme_Object * integer_length(int argc, Scheme_Object *argv[]) { diff --git a/src/mzscheme/src/schminc.h b/src/mzscheme/src/schminc.h index b37c76aaf1..79921ba3c9 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 925 +#define EXPECTED_PRIM_COUNT 926 #ifdef MZSCHEME_SOMETHING_OMITTED # undef USE_COMPILED_STARTUP diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 105f3d3913..113a29e34c 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "4.0.2.5" +#define MZSCHEME_VERSION "4.0.2.6" #define MZSCHEME_VERSION_X 4 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 2 -#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)