From fe301b1ff4cfb70895cfadf32dec0b32e083f517 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 8 Oct 2010 15:11:17 -0600 Subject: [PATCH] print-boolean-long-form, #true, #false, read-accept-lang, flonum? --- collects/racket/pretty.rkt | 6 +- .../scribblings/reference/cont-marks.scrbl | 5 +- collects/scribblings/reference/eval.scrbl | 5 +- collects/scribblings/reference/fixnums.scrbl | 193 ++++ collects/scribblings/reference/flonums.scrbl | 212 ++++ collects/scribblings/reference/numbers.scrbl | 431 +------- collects/scribblings/reference/printer.scrbl | 10 +- collects/scribblings/reference/read.scrbl | 11 +- collects/scribblings/reference/reader.scrbl | 15 +- collects/scribblings/reference/write.scrbl | 9 + collects/syntax/modread.rkt | 1 + collects/tests/racket/pretty.rktl | 9 + collects/tests/racket/print.rktl | 6 + collects/tests/racket/read.rktl | 18 + doc/release-notes/racket/HISTORY.txt | 10 + src/racket/include/scheme.h | 2 + src/racket/src/cstartup.inc | 954 +++++++++--------- src/racket/src/fun.c | 34 +- src/racket/src/future.c | 7 +- src/racket/src/jit.c | 3 + src/racket/src/numarith.c | 6 +- src/racket/src/number.c | 49 +- src/racket/src/numcomp.c | 4 +- src/racket/src/numstr.c | 78 +- src/racket/src/portfun.c | 1 + src/racket/src/print.c | 8 + src/racket/src/read.c | 156 ++- src/racket/src/schminc.h | 2 +- src/racket/src/schvers.h | 4 +- src/racket/src/thread.c | 2 + 30 files changed, 1259 insertions(+), 992 deletions(-) create mode 100644 collects/scribblings/reference/fixnums.scrbl create mode 100644 collects/scribblings/reference/flonums.scrbl diff --git a/collects/racket/pretty.rkt b/collects/racket/pretty.rkt index 46dc32fe5f..d78b9a84d8 100644 --- a/collects/racket/pretty.rkt +++ b/collects/racket/pretty.rkt @@ -433,6 +433,8 @@ (define show-inexactness? (pretty-print-show-inexactness)) (define exact-as-decimal? (pretty-print-exact-as-decimal)) + + (define long-bools? (print-boolean-long-form)) (define vector->repeatless-list (if print-vec-length? @@ -912,7 +914,9 @@ [(hide? obj) (wr* pport (hide-val obj) depth display? qd)] [(boolean? obj) - (out (if obj "#t" "#f"))] + (out (if long-bools? + (if obj "#true" "#false") + (if obj "#t" "#f")))] [(number? obj) (when (and show-inexactness? (inexact? obj)) diff --git a/collects/scribblings/reference/cont-marks.scrbl b/collects/scribblings/reference/cont-marks.scrbl index c630f67d31..497e2d5748 100644 --- a/collects/scribblings/reference/cont-marks.scrbl +++ b/collects/scribblings/reference/cont-marks.scrbl @@ -47,14 +47,15 @@ continuation's frames to the marks that were present when @racket[call-with-current-continuation] or @racket[call-with-composable-continuation] was invoked. -@defproc[(continuation-marks [cont (or/c continuation? thread?)] +@defproc[(continuation-marks [cont (or/c continuation? thread? #f)] [prompt-tag continuation-prompt-tag? (default-continuation-prompt-tag)]) continuation-mark-set?]{ Returns an opaque value containing the set of continuation marks for all keys in the continuation @racket[cont] (or the current continuation of @racket[cont] if it is a thread) up to the prompt -tagged by @racket[prompt-tag]. If @racket[cont] is an escape +tagged by @racket[prompt-tag]. If @racket[cont] is @racket[#f], the +resulting set of continuation marks is empty. If @racket[cont] is an escape continuation (see @secref["prompt-model"]), then the current continuation must extend @racket[cont], or the @exnraise[exn:fail:contract]. If @racket[cont] was not captured with diff --git a/collects/scribblings/reference/eval.scrbl b/collects/scribblings/reference/eval.scrbl index faedf5dda6..ea6c565bce 100644 --- a/collects/scribblings/reference/eval.scrbl +++ b/collects/scribblings/reference/eval.scrbl @@ -92,8 +92,8 @@ contain a module declaration), or @racket[#f] for any other load. The default load handler reads forms from the file in @racket[read-syntax] mode with line-counting enabled for the file port, unless the path has a @racket[".zo"] suffix. It also -@racket[parameterize]s each read to set both -@racket[read-accept-compiled] and @racket[read-accept-reader] to +@racket[parameterize]s each read to set @racket[read-accept-compiled], +@racket[read-accept-reader], and @racket[read-accept-lang] to @racket[#t]. In addition, if @racket[load-on-demand-enabled] is @racket[#t], then @racket[read-on-demand-source] is effectively set to the @tech{cleanse}d, absolute form of @racket[path] during the @@ -126,6 +126,7 @@ If the second argument to the load handler is a symbol, then: (read-accept-infix-dot #t) (read-accept-quasiquote #t) (read-accept-reader #t) + (read-accept-lang #t) ]} @item{If the read result is not a @racketidfont{module} form, or if a diff --git a/collects/scribblings/reference/fixnums.scrbl b/collects/scribblings/reference/fixnums.scrbl new file mode 100644 index 0000000000..6a7db20dfb --- /dev/null +++ b/collects/scribblings/reference/fixnums.scrbl @@ -0,0 +1,193 @@ +#lang scribble/doc +@(require "mz.ss" + racket/math + scribble/extract + (for-label racket/math + racket/flonum + racket/fixnum + racket/unsafe/ops + racket/require)) + +@(define flfx-eval (make-base-eval)) +@(interaction-eval #:eval flfx-eval (require racket/fixnum)) + + +@title[#:tag "fixnums"]{Fixnums} + +@defmodule[racket/fixnum] + +The @racketmodname[racket/fixnum] library provides operations like +@racket[fx+] that consume and produce only fixnums. The operations in +this library are meant to be safe versions of unsafe operations like +@racket[unsafe-fx+]. These safe operations are generally no faster +than using generic primitives like @racket[+]. + +The expected use of the @racketmodname[racket/fixnum] library is for +code where the @racket[require] of @racketmodname[racket/fixnum] is +replaced with + +@racketblock[(require (filtered-in + (λ (name) (regexp-replace #rx"unsafe-" name "")) + racket/unsafe/ops))] + +to drop in unsafe versions of the library. Alternately, when +encountering crashes with code that uses unsafe fixnum operations, use +the @racketmodname[racket/fixnum] library to help debug the problems. + +@; ------------------------------------------------------------ + +@section{Fixnum Arithmetic} + +@deftogether[( +@defproc[(fx+ [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fx- [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fx* [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxquotient [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxremainder [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxmodulo [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxabs [a fixnum?]) fixnum?] +)]{ + +Safe versions of @racket[unsafe-fx+], @racket[unsafe-fx-], +@racket[unsafe-fx*], @racket[unsafe-fxquotient], +@racket[unsafe-fxremainder], @racket[unsafe-fxmodulo], and +@racket[unsafe-fxabs]. The +@exnraise[exn:fail:contract:non-fixnum-result] if the arithmetic +result would not be a fixnum.} + + +@deftogether[( +@defproc[(fxand [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxior [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxxor [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxnot [a fixnum?]) fixnum?] +@defproc[(fxlshift [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxrshift [a fixnum?] [b fixnum?]) fixnum?] +)]{ + +Safe versions of @racket[unsafe-fxand], @racket[unsafe-fxior], +@racket[unsafe-fxxor], @racket[unsafe-fxnot], +@racket[unsafe-fxlshift], and @racket[unsafe-fxrshift]. The +@exnraise[exn:fail:contract:non-fixnum-result] if the arithmetic +result would not be a fixnum.} + + +@deftogether[( +@defproc[(fx= [a fixnum?] [b fixnum?]) boolean?] +@defproc[(fx< [a fixnum?] [b fixnum?]) boolean?] +@defproc[(fx> [a fixnum?] [b fixnum?]) boolean?] +@defproc[(fx<= [a fixnum?] [b fixnum?]) boolean?] +@defproc[(fx>= [a fixnum?] [b fixnum?]) boolean?] +@defproc[(fxmin [a fixnum?] [b fixnum?]) fixnum?] +@defproc[(fxmax [a fixnum?] [b fixnum?]) fixnum?] +)]{ + +Safe versions of @racket[unsafe-fx=], @racket[unsafe-fx<], + @racket[unsafe-fx>], @racket[unsafe-fx<=], @racket[unsafe-fx>=], + @racket[unsafe-fxmin], and @racket[unsafe-fxmax].} + +@deftogether[( +@defproc[(fx->fl [a fixnum?]) flonum?] +@defproc[(fl->fx [a flonum?]) fixnum?] +)]{ + +Safe versions of @racket[unsafe-fx->fl] and @racket[unsafe-fl->fx].} + +@; ------------------------------------------------------------ + +@section{Fixnum Vectors} + +A @deftech{fxvector} is like a @tech{vector}, but it holds only +@tech{fixnums}. The only advantage of an @tech{fxvector} over a +@tech{vector} is that a shared version can be created with functions +like @racket[shared-fxvector]. + +Two @tech{fxvectors} are @racket[equal?] if they have the same length, +and if the values in corresponding slots of the @tech{fxvectors} are +@racket[equal?]. + +@defproc[(fxvector? [v any/c]) boolean?]{ + +Returns @racket[#t] if @racket[v] is a @tech{fxvector}, @racket[#f] otherwise.} + +@defproc[(fxvector [x fixnum?] ...) fxvector?]{ + +Creates a @tech{fxvector} containing the given @tech{fixnums}. + +@mz-examples[#:eval flfx-eval (fxvector 2 3 4 5)]} + +@defproc[(make-fxvector [size exact-nonnegative-integer?] + [x fixnum? 0]) + fxvector?]{ + +Creates a @tech{fxvector} with @racket[size] elements, where every +slot in the @tech{fxvector} is filled with @racket[x]. + +@mz-examples[#:eval flfx-eval (make-fxvector 4 3)]} + +@defproc[(fxvector-length [vec fxvector?]) exact-nonnegative-integer?]{ + +Returns the length of @racket[vec] (i.e., the number of slots in the +@tech{fxvector}).} + + +@defproc[(fxvector-ref [vec fxvector?] [pos exact-nonnegative-integer?]) + fixnum?]{ + +Returns the @tech{fixnum} in slot @racket[pos] of +@racket[vec]. The first slot is position @racket[0], and the last slot +is one less than @racket[(fxvector-length vec)].} + +@defproc[(fxvector-set! [vec fxvector?] [pos exact-nonnegative-integer?] + [x fixnum?]) + fixnum?]{ + +Sets the @tech{fixnum} in slot @racket[pos] of @racket[vec]. The +first slot is position @racket[0], and the last slot is one less than +@racket[(fxvector-length vec)].} + +@defproc[(fxvector-copy [vec fxvector?] + [start exact-nonnegative-integer? 0] + [end exact-nonnegative-integer? (vector-length v)]) + fxvector?]{ + +Creates a fresh @tech{fxvector} of size @racket[(- end start)], with all of the +elements of @racket[vec] from @racket[start] (inclusive) to +@racket[end] (exclusive).} + +@defproc[(in-fxvector (v fxvector?)) sequence?]{ + +Produces a sequence that gives the elements of @scheme[v] in order. +Inside a @scheme[for] form, this can be optimized to step through the +elements of @scheme[v] efficiently as in @scheme[in-list], +@scheme[in-vector], etc.} + +@deftogether[( +@defform*[((for/fxvector (for-clause ...) body ...) + (for/fxvector #:length length-expr (for-clause ...) body ...))] +@defform*[((for*/fxvector (for-clause ...) body ...) + (for*/fxvector #:length length-expr (for-clause ...) body ...))])]{ + +Like @scheme[for/vector] or @scheme[for*/vector], but for +@tech{fxvector}s.} + +@defproc[(shared-fxvector [x fixnum?] ...) fxvector?]{ + +Creates a @tech{fxvector} containing the given @tech{fixnums}. +When @tech{places} are enabled, the new @tech{fxvector} is +allocated in the @tech{shared memory space}. + +@mz-examples[#:eval flfx-eval (shared-fxvector 2 3 4 5)]} + + +@defproc[(make-shared-fxvector [size exact-nonnegative-integer?] + [x fixnum? 0]) + fxvector?]{ + +Creates a @tech{fxvector} with @racket[size] elements, where every +slot in the @tech{fxvector} is filled with @racket[x]. +When @tech{places} are enabled, the new @tech{fxvector} is +allocated in the @tech{shared memory space}. + +@mz-examples[#:eval flfx-eval (make-shared-fxvector 4 3)]} + diff --git a/collects/scribblings/reference/flonums.scrbl b/collects/scribblings/reference/flonums.scrbl new file mode 100644 index 0000000000..3e12674546 --- /dev/null +++ b/collects/scribblings/reference/flonums.scrbl @@ -0,0 +1,212 @@ +#lang scribble/doc +@(require "mz.ss" + (for-label racket/flonum)) + +@(define fl-eval (make-base-eval)) +@(interaction-eval #:eval fl-eval (require racket/flonum)) + +@title[#:tag "flonums"]{Flonums} + +@defmodule[racket/flonum] + +The @racketmodname[racket/flonum] library provides operations like +@racket[fl+] that consume and produce only +@tech{flonums}. Flonum-specific operations provide can better +performance when used consistently, and they are as safe as generic +operations like @racket[+]. + +@guidealso["fixnums+flonums"] + +@; ------------------------------------------------------------------------ + +@section{Flonum Arithmetic} + +@deftogether[( +@defproc[(fl+ [a flonum?] [b flonum?]) flonum?] +@defproc[(fl- [a flonum?] [b flonum?]) flonum?] +@defproc[(fl* [a flonum?] [b flonum?]) flonum?] +@defproc[(fl/ [a flonum?] [b flonum?]) flonum?] +@defproc[(flabs [a flonum?]) flonum?] +)]{ + +Like @racket[+], @racket[-], @racket[*], @racket[/], and @racket[abs], +but constrained to consume @tech{flonums}. The result is always a +@tech{flonum}.} + +@deftogether[( +@defproc[(fl= [a flonum?] [b flonum?]) boolean?] +@defproc[(fl< [a flonum?] [b flonum?]) boolean?] +@defproc[(fl> [a flonum?] [b flonum?]) boolean?] +@defproc[(fl<= [a flonum?] [b flonum?]) boolean?] +@defproc[(fl>= [a flonum?] [b flonum?]) boolean?] +@defproc[(flmin [a flonum?] [b flonum?]) flonum?] +@defproc[(flmax [a flonum?] [b flonum?]) flonum?] +)]{ + +Like @racket[=], @racket[<], @racket[>], @racket[<=], @racket[>=], +@racket[min], and @racket[max], but constrained to consume +@tech{flonums}.} + +@deftogether[( +@defproc[(flround [a flonum?]) flonum?] +@defproc[(flfloor [a flonum?]) flonum?] +@defproc[(flceiling [a flonum?]) flonum?] +@defproc[(fltruncate [a flonum?]) flonum?] +)]{ + +Like @racket[round], @racket[floor], @racket[ceiling], and +@racket[truncate], but constrained to consume @tech{flonums}.} + +@deftogether[( +@defproc[(flsin [a flonum?]) flonum?] +@defproc[(flcos [a flonum?]) flonum?] +@defproc[(fltan [a flonum?]) flonum?] +@defproc[(flasin [a flonum?]) flonum?] +@defproc[(flacos [a flonum?]) flonum?] +@defproc[(flatan [a flonum?]) flonum?] +@defproc[(fllog [a flonum?]) flonum?] +@defproc[(flexp [a flonum?]) flonum?] +@defproc[(flsqrt [a flonum?]) flonum?] +)]{ + +Like @racket[sin], @racket[cos], @racket[tan], @racket[asin], +@racket[acos], @racket[atan], @racket[log], @racket[exp], and +@racket[flsqrt], but constrained to consume and produce +@tech{flonums}. The result is @racket[+nan.0] when a number outside +the range @racket[-1.0] to @racket[1.0] is given to @racket[flasin] or +@racket[flacos], or when a negative number is given to @racket[fllog] +or @racket[flsqrt].} + + +@defproc[(->fl [a exact-integer?]) flonum?]{ + +Like @racket[exact->inexact], but constrained to consume exact +integers, so the result is always a @tech{flonum}.} + + +@defproc[(fl->exact-integer [a flonum?]) exact-integer?]{ + +Like @racket[inexact->exact], but constrained to consume an +@tech{integer} @tech{flonum}, so the result is always an exact +integer.} + + +@deftogether[( +@defproc[(make-flrectangular [a flonum?] [b flonum?]) + (and/c complex? inexact? (not/c real?))] +@defproc[(flreal-part [a (and/c complex? inexact? (not/c real?))]) flonum?] +@defproc[(flimag-part [a (and/c complex? inexact? (not/c real?))]) flonum?] +)]{ + +Like @racket[make-rectangular], @racket[real-part], and +@racket[imag-part], but both parts of the complex number must be +inexact.} + +@; ------------------------------------------------------------------------ + +@section{Flonum Vectors} + +A @deftech{flvector} is like a @tech{vector}, but it holds only +inexact real numbers. This representation can be more compact, and +unsafe operations on @tech{flvector}s (see +@racketmodname[racket/unsafe/ops]) can execute more efficiently than +unsafe operations on @tech{vectors} of inexact reals. + +An f64vector as provided by @racketmodname[ffi/vector] stores the +same kinds of values as an @tech{flvector}, but with extra +indirections that make f64vectors more convenient for working with +foreign libraries. The lack of indirections make unsafe +@tech{flvector} access more efficient. + +Two @tech{flvectors} are @racket[equal?] if they have the same length, +and if the values in corresponding slots of the @tech{flvectors} are +@racket[equal?]. + +@defproc[(flvector? [v any/c]) boolean?]{ + +Returns @racket[#t] if @racket[v] is a @tech{flvector}, @racket[#f] otherwise.} + +@defproc[(flvector [x flonum?] ...) flvector?]{ + +Creates a @tech{flvector} containing the given inexact real numbers. + +@mz-examples[#:eval fl-eval (flvector 2.0 3.0 4.0 5.0)]} + +@defproc[(make-flvector [size exact-nonnegative-integer?] + [x flonum? 0.0]) + flvector?]{ + +Creates a @tech{flvector} with @racket[size] elements, where every +slot in the @tech{flvector} is filled with @racket[x]. + +@mz-examples[#:eval fl-eval (make-flvector 4 3.0)]} + +@defproc[(flvector-length [vec flvector?]) exact-nonnegative-integer?]{ + +Returns the length of @racket[vec] (i.e., the number of slots in the +@tech{flvector}).} + + +@defproc[(flvector-ref [vec flvector?] [pos exact-nonnegative-integer?]) + flonum?]{ + +Returns the inexact real number in slot @racket[pos] of +@racket[vec]. The first slot is position @racket[0], and the last slot +is one less than @racket[(flvector-length vec)].} + +@defproc[(flvector-set! [vec flvector?] [pos exact-nonnegative-integer?] + [x flonum?]) + flonum?]{ + +Sets the inexact real number in slot @racket[pos] of @racket[vec]. The +first slot is position @racket[0], and the last slot is one less than +@racket[(flvector-length vec)].} + +@defproc[(flvector-copy [vec flvector?] + [start exact-nonnegative-integer? 0] + [end exact-nonnegative-integer? (vector-length v)]) + flvector?]{ + +Creates a fresh @tech{flvector} of size @racket[(- end start)], with all of the +elements of @racket[vec] from @racket[start] (inclusive) to +@racket[end] (exclusive).} + +@defproc[(in-flvector (v flvector?)) sequence?]{ + +Produces a sequence that gives the elements of @scheme[v] in order. +Inside a @scheme[for] form, this can be optimized to step through the +elements of @scheme[v] efficiently as in @scheme[in-list], +@scheme[in-vector], etc.} + +@deftogether[( +@defform*[((for/flvector (for-clause ...) body ...) + (for/flvector #:length length-expr (for-clause ...) body ...))] +@defform*[((for*/flvector (for-clause ...) body ...) + (for*/flvector #:length length-expr (for-clause ...) body ...))])]{ + +Like @scheme[for/vector] or @scheme[for*/vector], but for +@tech{flvector}s.} + +@defproc[(shared-flvector [x flonum?] ...) flvector?]{ + +Creates a @tech{flvector} containing the given inexact real numbers. +When @tech{places} are enabled, the new @tech{flvector} is +allocated in the @tech{shared memory space}. + +@mz-examples[#:eval fl-eval (shared-flvector 2.0 3.0 4.0 5.0)]} + + +@defproc[(make-shared-flvector [size exact-nonnegative-integer?] + [x flonum? 0.0]) + flvector?]{ + +Creates a @tech{flvector} with @racket[size] elements, where every +slot in the @tech{flvector} is filled with @racket[x]. +When @tech{places} are enabled, the new @tech{flvector} is +allocated in the @tech{shared memory space}. + +@mz-examples[#:eval fl-eval (make-shared-flvector 4 3.0)]} + +@; ------------------------------------------------------------ + +@close-eval[fl-eval] diff --git a/collects/scribblings/reference/numbers.scrbl b/collects/scribblings/reference/numbers.scrbl index 87eb940c5a..fda5625b5a 100644 --- a/collects/scribblings/reference/numbers.scrbl +++ b/collects/scribblings/reference/numbers.scrbl @@ -11,11 +11,7 @@ @(define math-eval (make-base-eval)) @(interaction-eval #:eval math-eval (require racket/math)) -@(define flfx-eval (make-base-eval)) -@(interaction-eval #:eval flfx-eval (require racket/fixnum)) -@(interaction-eval #:eval flfx-eval (require racket/flonum)) - -@title[#:tag "numbers"]{Numbers} +@title[#:tag "numbers" #:style '(toc)]{Numbers} @guideintro["numbers"]{numbers} @@ -28,6 +24,9 @@ represented are also @deftech{rational numbers}, except for rational numbers, some are @deftech{integers}, because @racket[round] applied to the number produces the same number. +@margin-note/ref{See @secref["parse-number"] for information on the +syntax of number literals.} + Orthogonal to those categories, each number is also either an @deftech{exact number} or an @deftech{inexact number}. Unless otherwise specified, computations that involve an inexact number @@ -46,8 +45,9 @@ Inexact real numbers are implemented as either single- or double-precision @as-index{IEEE floating-point numbers}---the latter by default, and the former only when support for 32-bit inexact numbers is specifically enabled when the run-time system is built, and -when computation starts with numerical constants specified as -single-precision numbers. +only when a computation starts with numerical constants specified as +single-precision numbers. Inexact real numbers that are represented as +double-precision floating-point numbers are @deftech{flonums}. The precision and size of exact numbers is limited only by available memory (and the precision of operations that can produce irrational @@ -85,8 +85,10 @@ exact, and when they are @racket[=] (except for @racket[+nan.0], @racket[+0.0], and @racket[-0.0], as noted above). Two numbers are @racket[equal?] when they are @racket[eqv?]. +@local-table-of-contents[] + @; ---------------------------------------- -@section{Number Types} +@section[#:tag "number-types"]{Number Types} @defproc[(number? [v any/c]) boolean?]{Returns @racket[#t] if @racket[v] is a number, @racket[#f] otherwise. @@ -150,6 +152,12 @@ Return @racket[#t] if @racket[v] is a @techlink{fixnum}, @racket[#f] otherwise.} +@defproc[(flonum? [v any/c]) boolean?]{ + +Return @racket[#t] if @racket[v] is a @techlink{flonum}, @racket[#f] +otherwise.} + + @defproc[(zero? [z number?]) boolean?]{ Returns @racket[(= 0 z)]. @mz-examples[(zero? 0) (zero? -0.0)]} @@ -201,9 +209,13 @@ otherwise.} @mz-examples[(exact->inexact 1) (exact->inexact 1.0)]} +@; ---------------------------------------- +@section[#:tag "generic-numbers"]{Generic Numerics} + +Most Racket numeric operations work on any kind of number. @; ---------------------------------------- -@section{Arithmetic} +@subsection{Arithmetic} @defproc[(+ [z number?] ...) number?]{ @@ -412,7 +424,7 @@ Among the real numbers within @racket[(abs tolerance)] of @racket[x], ]} @; ---------------------------------------- -@section{Number Comparison} +@subsection{Number Comparison} @defproc[(= [z number?] [w number?] ...+) boolean?]{ Returns @racket[#t] if all of the arguments are numerically equal, @@ -453,7 +465,7 @@ Among the real numbers within @racket[(abs tolerance)] of @racket[x], @; ------------------------------------------------------------------------ -@section{Powers and Roots} +@subsection{Powers and Roots} @defproc[(sqrt [z number?]) number?]{ @@ -512,7 +524,7 @@ Returns the natural logarithm of @racket[z]. The result is normally @; ------------------------------------------------------------------------ -@section{Trignometric Functions} +@subsection{Trignometric Functions} @defproc[(sin [z number?]) number?]{ @@ -574,7 +586,7 @@ In the two-argument case, the result is roughly the same as @racket[(/ @mz-examples[(atan 0.5) (atan 2 1) (atan -2 -1) (atan 1+05.i) (atan +inf.0 -inf.0)]} @; ------------------------------------------------------------------------ -@section{Complex Numbers} +@subsection{Complex Numbers} @defproc[(make-rectangular [x real?] [y real?]) number?]{ @@ -623,7 +635,7 @@ Returns the imaginary part of the complex number @racket[z] in @mz-examples[(angle -3) (angle 3.0) (angle 3+4i) (angle +inf.0+inf.0i)]} @; ------------------------------------------------------------------------ -@section{Bitwise Operations} +@subsection{Bitwise Operations} @section-index{logical operators} @@ -721,7 +733,7 @@ both in binary and as integers. @mz-examples[(integer-length 8) (integer-length -8)]} @; ------------------------------------------------------------------------ -@section{Random Numbers} +@subsection{Random Numbers} @defproc*[([(random [k (integer-in 1 4294967087)] [generator pseudo-random-generator? @@ -801,7 +813,7 @@ Like @racket[vector->pseudo-random-generator], but changes generator.} @; ------------------------------------------------------------------------ -@section{Number--String Conversions} +@subsection{Number--String Conversions} @section-index["numbers" "machine representations"] @section-index["numbers" "floating-point"] @@ -946,383 +958,7 @@ for the machine running Racket, @racket[#f] if the native encoding is little-endian.} @; ------------------------------------------------------------------------ -@section{Inexact-Real (Flonum) Operations} - -@defmodule[racket/flonum] - -The @racketmodname[racket/flonum] library provides operations like -@racket[fl+] that consume and produce only real @tech{inexact -numbers}, which are also known as @deftech{flonums}. Flonum-specific -operations provide can better performance when used consistently, and -they are as safe as generic operations like @racket[+]. - -@guidealso["fixnums+flonums"] - -@subsection{Flonum Arithmetic} - -@deftogether[( -@defproc[(fl+ [a inexact-real?] [b inexact-real?]) inexact-real?] -@defproc[(fl- [a inexact-real?] [b inexact-real?]) inexact-real?] -@defproc[(fl* [a inexact-real?] [b inexact-real?]) inexact-real?] -@defproc[(fl/ [a inexact-real?] [b inexact-real?]) inexact-real?] -@defproc[(flabs [a inexact-real?]) inexact-real?] -)]{ - -Like @racket[+], @racket[-], @racket[*], @racket[/], and @racket[abs], -but constrained to consume @tech{flonums}. The result is always a -@tech{flonum}.} - -@deftogether[( -@defproc[(fl= [a inexact-real?] [b inexact-real?]) boolean?] -@defproc[(fl< [a inexact-real?] [b inexact-real?]) boolean?] -@defproc[(fl> [a inexact-real?] [b inexact-real?]) boolean?] -@defproc[(fl<= [a inexact-real?] [b inexact-real?]) boolean?] -@defproc[(fl>= [a inexact-real?] [b inexact-real?]) boolean?] -@defproc[(flmin [a inexact-real?] [b inexact-real?]) inexact-real?] -@defproc[(flmax [a inexact-real?] [b inexact-real?]) inexact-real?] -)]{ - -Like @racket[=], @racket[<], @racket[>], @racket[<=], @racket[>=], -@racket[min], and @racket[max], but constrained to consume -@tech{flonums}.} - -@deftogether[( -@defproc[(flround [a inexact-real?]) inexact-real?] -@defproc[(flfloor [a inexact-real?]) inexact-real?] -@defproc[(flceiling [a inexact-real?]) inexact-real?] -@defproc[(fltruncate [a inexact-real?]) inexact-real?] -)]{ - -Like @racket[round], @racket[floor], @racket[ceiling], and -@racket[truncate], but constrained to consume @tech{flonums}.} - -@deftogether[( -@defproc[(flsin [a inexact-real?]) inexact-real?] -@defproc[(flcos [a inexact-real?]) inexact-real?] -@defproc[(fltan [a inexact-real?]) inexact-real?] -@defproc[(flasin [a inexact-real?]) inexact-real?] -@defproc[(flacos [a inexact-real?]) inexact-real?] -@defproc[(flatan [a inexact-real?]) inexact-real?] -@defproc[(fllog [a inexact-real?]) inexact-real?] -@defproc[(flexp [a inexact-real?]) inexact-real?] -@defproc[(flsqrt [a inexact-real?]) inexact-real?] -)]{ - -Like @racket[sin], @racket[cos], @racket[tan], @racket[asin], -@racket[acos], @racket[atan], @racket[log], @racket[exp], and -@racket[flsqrt], but constrained to consume and produce -@tech{flonums}. The result is @racket[+nan.0] when a number outside -the range @racket[-1.0] to @racket[1.0] is given to @racket[flasin] or -@racket[flacos], or when a negative number is given to @racket[fllog] -or @racket[flsqrt].} - - -@defproc[(->fl [a exact-integer?]) inexact-real?]{ - -Like @racket[exact->inexact], but constrained to consume exact -integers, so the result is always a @tech{flonum}.} - - -@defproc[(fl->exact-integer [a inexact-real?]) exact-integer?]{ - -Like @racket[inexact->exact], but constrained to consume an -@tech{integer} @tech{flonum}, so the result is always an exact -integer.} - - -@deftogether[( -@defproc[(make-flrectangular [a inexact-real?] [b inexact-real?]) - (and/c complex? inexact? (not/c real?))] -@defproc[(flreal-part [a (and/c complex? inexact? (not/c real?))]) inexact-real?] -@defproc[(flimag-part [a (and/c complex? inexact? (not/c real?))]) inexact-real?] -)]{ - -Like @racket[make-rectangular], @racket[real-part], and -@racket[imag-part], but both parts of the complex number must be -inexact.} - - -@subsection{Flonum Vectors} - -A @deftech{flvector} is like a @tech{vector}, but it holds only -inexact real numbers. This representation can be more compact, and -unsafe operations on @tech{flvector}s (see -@racketmodname[racket/unsafe/ops]) can execute more efficiently than -unsafe operations on @tech{vectors} of inexact reals. - -An f64vector as provided by @racketmodname[ffi/vector] stores the -same kinds of values as an @tech{flvector}, but with extra -indirections that make f64vectors more convenient for working with -foreign libraries. The lack of indirections make unsafe -@tech{flvector} access more efficient. - -Two @tech{flvectors} are @racket[equal?] if they have the same length, -and if the values in corresponding slots of the @tech{flvectors} are -@racket[equal?]. - -@defproc[(flvector? [v any/c]) boolean?]{ - -Returns @racket[#t] if @racket[v] is a @tech{flvector}, @racket[#f] otherwise.} - -@defproc[(flvector [x inexact-real?] ...) flvector?]{ - -Creates a @tech{flvector} containing the given inexact real numbers. - -@mz-examples[#:eval flfx-eval (flvector 2.0 3.0 4.0 5.0)]} - -@defproc[(make-flvector [size exact-nonnegative-integer?] - [x inexact-real? 0.0]) - flvector?]{ - -Creates a @tech{flvector} with @racket[size] elements, where every -slot in the @tech{flvector} is filled with @racket[x]. - -@mz-examples[#:eval flfx-eval (make-flvector 4 3.0)]} - -@defproc[(flvector-length [vec flvector?]) exact-nonnegative-integer?]{ - -Returns the length of @racket[vec] (i.e., the number of slots in the -@tech{flvector}).} - - -@defproc[(flvector-ref [vec flvector?] [pos exact-nonnegative-integer?]) - inexact-real?]{ - -Returns the inexact real number in slot @racket[pos] of -@racket[vec]. The first slot is position @racket[0], and the last slot -is one less than @racket[(flvector-length vec)].} - -@defproc[(flvector-set! [vec flvector?] [pos exact-nonnegative-integer?] - [x inexact-real?]) - inexact-real?]{ - -Sets the inexact real number in slot @racket[pos] of @racket[vec]. The -first slot is position @racket[0], and the last slot is one less than -@racket[(flvector-length vec)].} - -@defproc[(flvector-copy [vec flvector?] - [start exact-nonnegative-integer? 0] - [end exact-nonnegative-integer? (vector-length v)]) - flvector?]{ - -Creates a fresh @tech{flvector} of size @racket[(- end start)], with all of the -elements of @racket[vec] from @racket[start] (inclusive) to -@racket[end] (exclusive).} - -@defproc[(in-flvector (v flvector?)) sequence?]{ - -Produces a sequence that gives the elements of @scheme[v] in order. -Inside a @scheme[for] form, this can be optimized to step through the -elements of @scheme[v] efficiently as in @scheme[in-list], -@scheme[in-vector], etc.} - -@deftogether[( -@defform*[((for/flvector (for-clause ...) body ...) - (for/flvector #:length length-expr (for-clause ...) body ...))] -@defform*[((for*/flvector (for-clause ...) body ...) - (for*/flvector #:length length-expr (for-clause ...) body ...))])]{ - -Like @scheme[for/vector] or @scheme[for*/vector], but for -@tech{flvector}s.} - -@defproc[(shared-flvector [x inexact-real?] ...) flvector?]{ - -Creates a @tech{flvector} containing the given inexact real numbers. -When @tech{places} are enabled, the new @tech{flvector} is -allocated in the @tech{shared memory space}. - -@mz-examples[#:eval flfx-eval (shared-flvector 2.0 3.0 4.0 5.0)]} - - -@defproc[(make-shared-flvector [size exact-nonnegative-integer?] - [x inexact-real? 0.0]) - flvector?]{ - -Creates a @tech{flvector} with @racket[size] elements, where every -slot in the @tech{flvector} is filled with @racket[x]. -When @tech{places} are enabled, the new @tech{flvector} is -allocated in the @tech{shared memory space}. - -@mz-examples[#:eval flfx-eval (make-shared-flvector 4 3.0)]} - -@section{Fixnum Operations} - -@defmodule[racket/fixnum] - -The @racketmodname[racket/fixnum] library provides operations like -@racket[fx+] that consume and produce only fixnums. The operations in -this library are meant to be safe versions of unsafe operations like -@racket[unsafe-fx+]. These safe operations are generally no faster -than using generic primitives like @racket[+]. - -The expected use of the @racketmodname[racket/fixnum] library is for -code where the @racket[require] of @racketmodname[racket/fixnum] is -replaced with - -@racketblock[(require (filtered-in - (λ (name) (regexp-replace #rx"unsafe-" name "")) - racket/unsafe/ops))] - -to drop in unsafe versions of the library. Alternately, when -encountering crashes with code that uses unsafe fixnum operations, use -the @racketmodname[racket/fixnum] library to help debug the problems. - -@subsection{Fixnum Arithmetic} - -@deftogether[( -@defproc[(fx+ [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fx- [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fx* [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxquotient [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxremainder [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxmodulo [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxabs [a fixnum?]) fixnum?] -)]{ - -Safe versions of @racket[unsafe-fx+], @racket[unsafe-fx-], -@racket[unsafe-fx*], @racket[unsafe-fxquotient], -@racket[unsafe-fxremainder], @racket[unsafe-fxmodulo], and -@racket[unsafe-fxabs]. The -@exnraise[exn:fail:contract:non-fixnum-result] if the arithmetic -result would not be a fixnum.} - - -@deftogether[( -@defproc[(fxand [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxior [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxxor [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxnot [a fixnum?]) fixnum?] -@defproc[(fxlshift [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxrshift [a fixnum?] [b fixnum?]) fixnum?] -)]{ - -Safe versions of @racket[unsafe-fxand], @racket[unsafe-fxior], -@racket[unsafe-fxxor], @racket[unsafe-fxnot], -@racket[unsafe-fxlshift], and @racket[unsafe-fxrshift]. The -@exnraise[exn:fail:contract:non-fixnum-result] if the arithmetic -result would not be a fixnum.} - - -@deftogether[( -@defproc[(fx= [a fixnum?] [b fixnum?]) boolean?] -@defproc[(fx< [a fixnum?] [b fixnum?]) boolean?] -@defproc[(fx> [a fixnum?] [b fixnum?]) boolean?] -@defproc[(fx<= [a fixnum?] [b fixnum?]) boolean?] -@defproc[(fx>= [a fixnum?] [b fixnum?]) boolean?] -@defproc[(fxmin [a fixnum?] [b fixnum?]) fixnum?] -@defproc[(fxmax [a fixnum?] [b fixnum?]) fixnum?] -)]{ - -Safe versions of @racket[unsafe-fx=], @racket[unsafe-fx<], - @racket[unsafe-fx>], @racket[unsafe-fx<=], @racket[unsafe-fx>=], - @racket[unsafe-fxmin], and @racket[unsafe-fxmax].} - -@deftogether[( -@defproc[(fx->fl [a fixnum?]) inexact-real?] -@defproc[(fl->fx [a inexact-real?]) fixnum?] -)]{ - -Safe versions of @racket[unsafe-fx->fl] and @racket[unsafe-fl->fx].} - -@subsection{Fixnum Vectors} - -A @deftech{fxvector} is like a @tech{vector}, but it holds only -@tech{fixnums}. The only advantage of an @tech{fxvector} over a -@tech{vector} is that a shared version can be created with functions -like @racket[shared-fxvector]. - -Two @tech{fxvectors} are @racket[equal?] if they have the same length, -and if the values in corresponding slots of the @tech{fxvectors} are -@racket[equal?]. - -@defproc[(fxvector? [v any/c]) boolean?]{ - -Returns @racket[#t] if @racket[v] is a @tech{fxvector}, @racket[#f] otherwise.} - -@defproc[(fxvector [x fixnum?] ...) fxvector?]{ - -Creates a @tech{fxvector} containing the given @tech{fixnums}. - -@mz-examples[#:eval flfx-eval (fxvector 2 3 4 5)]} - -@defproc[(make-fxvector [size exact-nonnegative-integer?] - [x fixnum? 0]) - fxvector?]{ - -Creates a @tech{fxvector} with @racket[size] elements, where every -slot in the @tech{fxvector} is filled with @racket[x]. - -@mz-examples[#:eval flfx-eval (make-fxvector 4 3)]} - -@defproc[(fxvector-length [vec fxvector?]) exact-nonnegative-integer?]{ - -Returns the length of @racket[vec] (i.e., the number of slots in the -@tech{fxvector}).} - - -@defproc[(fxvector-ref [vec fxvector?] [pos exact-nonnegative-integer?]) - fixnum?]{ - -Returns the @tech{fixnum} in slot @racket[pos] of -@racket[vec]. The first slot is position @racket[0], and the last slot -is one less than @racket[(fxvector-length vec)].} - -@defproc[(fxvector-set! [vec fxvector?] [pos exact-nonnegative-integer?] - [x fixnum?]) - fixnum?]{ - -Sets the @tech{fixnum} in slot @racket[pos] of @racket[vec]. The -first slot is position @racket[0], and the last slot is one less than -@racket[(fxvector-length vec)].} - -@defproc[(fxvector-copy [vec fxvector?] - [start exact-nonnegative-integer? 0] - [end exact-nonnegative-integer? (vector-length v)]) - fxvector?]{ - -Creates a fresh @tech{fxvector} of size @racket[(- end start)], with all of the -elements of @racket[vec] from @racket[start] (inclusive) to -@racket[end] (exclusive).} - -@defproc[(in-fxvector (v fxvector?)) sequence?]{ - -Produces a sequence that gives the elements of @scheme[v] in order. -Inside a @scheme[for] form, this can be optimized to step through the -elements of @scheme[v] efficiently as in @scheme[in-list], -@scheme[in-vector], etc.} - -@deftogether[( -@defform*[((for/fxvector (for-clause ...) body ...) - (for/fxvector #:length length-expr (for-clause ...) body ...))] -@defform*[((for*/fxvector (for-clause ...) body ...) - (for*/fxvector #:length length-expr (for-clause ...) body ...))])]{ - -Like @scheme[for/vector] or @scheme[for*/vector], but for -@tech{fxvector}s.} - -@defproc[(shared-fxvector [x fixnum?] ...) fxvector?]{ - -Creates a @tech{fxvector} containing the given @tech{fixnums}. -When @tech{places} are enabled, the new @tech{fxvector} is -allocated in the @tech{shared memory space}. - -@mz-examples[#:eval flfx-eval (shared-fxvector 2 3 4 5)]} - - -@defproc[(make-shared-fxvector [size exact-nonnegative-integer?] - [x fixnum? 0]) - fxvector?]{ - -Creates a @tech{fxvector} with @racket[size] elements, where every -slot in the @tech{fxvector} is filled with @racket[x]. -When @tech{places} are enabled, the new @tech{fxvector} is -allocated in the @tech{shared memory space}. - -@mz-examples[#:eval flfx-eval (make-shared-fxvector 4 3)]} - - -@; ------------------------------------------------------------------------ -@section{Extra Constants and Functions} +@subsection{Extra Constants and Functions} @note-lib[racket/math] @@ -1385,6 +1021,11 @@ Hence also: } @; ---------------------------------------------------------------------- - @close-eval[math-eval] -@close-eval[flfx-eval] +@; ---------------------------------------------------------------------- + +@include-section["flonums.scrbl"] +@include-section["fixnums.scrbl"] + +@; ---------------------------------------------------------------------- + diff --git a/collects/scribblings/reference/printer.scrbl b/collects/scribblings/reference/printer.scrbl index f588ec6e1d..b4523d3184 100644 --- a/collects/scribblings/reference/printer.scrbl +++ b/collects/scribblings/reference/printer.scrbl @@ -129,10 +129,12 @@ printed form of its exact negation. @section{Printing Booleans} -The constant @scheme[#t] prints as @litchar{#t}, and the constant -@scheme[#f] prints as @litchar{#f} in all modes (@scheme[display], -@scheme[write], and @scheme[print]). For the purposes of printing -enclosing datatypes, a symbol is @tech{quotable}. +The constant @scheme[#t] prints as @litchar{#true} or @litchar{#t} in +all modes (@scheme[display], @scheme[write], and @scheme[print]), +depending on the value of @racket[print-boolean-long-form], and the +constant @scheme[#f] prints as @litchar{#false} or @litchar{#f}. For +the purposes of printing enclosing datatypes, a symbol is +@tech{quotable}. @section[#:tag "print-pairs"]{Printing Pairs and Lists} diff --git a/collects/scribblings/reference/read.scrbl b/collects/scribblings/reference/read.scrbl index 5bb34bbec0..432150e2ac 100644 --- a/collects/scribblings/reference/read.scrbl +++ b/collects/scribblings/reference/read.scrbl @@ -242,8 +242,15 @@ A parameter that controls parsing input with @litchar{`} or @defboolparam[read-accept-reader on?]{ -A parameter that controls whether @litchar{#reader} is allowed for -selecting a parser. See @secref["parse-reader"] for more +A parameter that controls whether @litchar{#reader}, @litchar{#lang}, +and @litchar{#!} followed by a space are allowed for selecting a +parser. See @secref["parse-reader"] for more information.} + +@defboolparam[read-accept-lang on?]{ + +A parameter that (along with @racket[read-accept-reader] controls +whether @litchar{#lang} and @litchar{#!} followed by a space are +allowed for selecting a parser. See @secref["parse-reader"] for more information.} @defparam[current-reader-guard proc (any/c . -> . any)]{ diff --git a/collects/scribblings/reference/reader.scrbl b/collects/scribblings/reference/reader.scrbl index 0b59d6223b..8bc2ee73b8 100644 --- a/collects/scribblings/reference/reader.scrbl +++ b/collects/scribblings/reference/reader.scrbl @@ -289,10 +289,12 @@ with any other mark, double-precision IEEE floating point is used. @section[#:tag "parse-boolean"]{Reading Booleans} -A @as-index{@litchar{#t}} or @as-index{@litchar{#T}} is the complete -input syntax for the boolean constant true, and -@as-index{@litchar{#f}} or @as-index{@litchar{#F}} is the complete -input syntax for the boolean constant false. +A @as-index{@litchar{#true}}, @as-index{@litchar{#t}}, +@as-index{@litchar{#T}} followed by a delimiter is the input syntax +for the boolean constant ``true,'' and @as-index{@litchar{#false}}, +@as-index{@litchar{#f}}, or @as-index{@litchar{#F}} followed by a +delimiter is the complete input syntax for the boolean constant +``false.'' @section[#:tag "parse-pair"]{Reading Pairs and Lists} @@ -831,6 +833,11 @@ certain grammars, such as that of R@superscript{6}RS By convention, @litchar{#lang} normally appears at the beginning of a file, possibly after comment forms, to specify the syntax of a module. +If the @racket[read-accept-reader] or @racket[read-accept-lang] +@tech{parameter} is set to @racket[#f], then if the reader encounters +@litchar{#lang} or @litchar{#!} followed by a space, the +@exnraise[exn:fail:read]. + @subsection{S-Expression Reader Language} @defmodulelang[s-exp] diff --git a/collects/scribblings/reference/write.scrbl b/collects/scribblings/reference/write.scrbl index 2ea2feddf0..8fb34064c0 100644 --- a/collects/scribblings/reference/write.scrbl +++ b/collects/scribblings/reference/write.scrbl @@ -219,6 +219,15 @@ A parameter that controls printing vectors; defaults to A parameter that controls printing hash tables; defaults to @racket[#f]. See @secref["print-hashtable"] for more information.} + +@defboolparam[print-boolean-long-form on?]{ + +A parameter that controls printing of booleans. When the parameter's +value is true, @racket[#t] and @racket[#f] print as @litchar{#true} +and @litchar{#false}, otherwise they print as @litchar{#t} +and @litchar{#f}.} + + @defboolparam[print-reader-abbreviations on?]{ A parameter that controls printing of two-element lists that start diff --git a/collects/syntax/modread.rkt b/collects/syntax/modread.rkt index 18eeebf0d3..f0302705cf 100644 --- a/collects/syntax/modread.rkt +++ b/collects/syntax/modread.rkt @@ -18,6 +18,7 @@ [read-accept-infix-dot #t] [read-accept-quasiquote #t] [read-accept-reader #t] + [read-accept-lang #t] [current-readtable #f]) (thunk))) diff --git a/collects/tests/racket/pretty.rktl b/collects/tests/racket/pretty.rktl index bef491c9fd..c8de8bfa77 100644 --- a/collects/tests/racket/pretty.rktl +++ b/collects/tests/racket/pretty.rktl @@ -416,4 +416,13 @@ ;; ---------------------------------------- +(parameterize ([print-boolean-long-form #f]) + (test "#t" pretty-format #t) + (test "#f" pretty-format #f)) +(parameterize ([print-boolean-long-form #t]) + (test "#true" pretty-format #t) + (test "#false" pretty-format #f)) + +;; ---------------------------------------- + (report-errs) diff --git a/collects/tests/racket/print.rktl b/collects/tests/racket/print.rktl index cbbda19d95..33186a1f2a 100644 --- a/collects/tests/racket/print.rktl +++ b/collects/tests/racket/print.rktl @@ -46,6 +46,12 @@ #:property prop:custom-print-quotable 'always) (ptest "1" 1) + (parameterize ([print-boolean-long-form #f]) + (ptest "#t" #t) + (ptest "#f" #f)) + (parameterize ([print-boolean-long-form #t]) + (ptest "#true" #t) + (ptest "#false" #f)) (ptest "1/2" 1/2) (ptest "#f" #f) (ptest "#\\x" #\x) diff --git a/collects/tests/racket/read.rktl b/collects/tests/racket/read.rktl index fe2249db03..745d77ad92 100644 --- a/collects/tests/racket/read.rktl +++ b/collects/tests/racket/read.rktl @@ -55,6 +55,24 @@ (err/rt-test (readstr "(8 . 9 . 1 . )") exn:fail:read?) (err/rt-test (readstr "(8 . 9 . 1 . 10)") exn:fail:read?) +(let ([w-suffix + (lambda (s) + (test #t readstr (string-append "#t" s)) + (test #t readstr (string-append "#T" s)) + (test #t readstr (string-append "#true" s)) + (test #f readstr (string-append "#f" s)) + (test #f readstr (string-append "#F" s)) + (test #f readstr (string-append "#false" s)))]) + (w-suffix "") + (w-suffix " ") + (w-suffix ";") + (err/rt-test (readstr "#True") exn:fail:read?) + (err/rt-test (readstr "#tru") exn:fail:read:eof?) + (err/rt-test (readstr "#truer") exn:fail:read?) + (err/rt-test (readstr "#False") exn:fail:read?) + (err/rt-test (readstr "#fals") exn:fail:read:eof?) + (err/rt-test (readstr "#falser") exn:fail:read?)) + (test (integer->char 0) readstr "#\\nul") (test (integer->char 0) readstr "#\\Nul") (test (integer->char 0) readstr "#\\NuL") diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 56b5843bb2..2b01bb5791 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,13 @@ +Version 5.0.1.8 +Added #true and #false, and changed #t/#T and #f/#F to + require a delimiter afterward +Added print-boolean-long-form +Added read-accept-lang, which is set to #t when + reading a module +Added flonum? +Changed continuation-marks to accept a #f argument + to produce an empty set of marks + Version 5.0.1.7 Added fxvectors Added unsafe-{s,u}16-{ref,set!} diff --git a/src/racket/include/scheme.h b/src/racket/include/scheme.h index 3b007eaff4..1366abc76b 100644 --- a/src/racket/include/scheme.h +++ b/src/racket/include/scheme.h @@ -1202,6 +1202,7 @@ enum { MZCONFIG_CAN_READ_INFIX_DOT, MZCONFIG_CAN_READ_QUASI, MZCONFIG_CAN_READ_READER, + MZCONFIG_CAN_READ_LANG, MZCONFIG_READ_DECIMAL_INEXACT, MZCONFIG_PRINT_GRAPH, @@ -1214,6 +1215,7 @@ enum { MZCONFIG_PRINT_MPAIR_CURLY, MZCONFIG_PRINT_SYNTAX_WIDTH, MZCONFIG_PRINT_READER, + MZCONFIG_PRINT_LONG_BOOLEAN, MZCONFIG_PRINT_AS_QQ, MZCONFIG_CASE_SENS, diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index 4131dae33c..424d6a6dba 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,14 +1,14 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,55,51,0,0,0,1,0,0,10,0,13,0, -22,0,26,0,31,0,38,0,45,0,50,0,55,0,68,0,72,0,79,0,82, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,56,51,0,0,0,1,0,0,10,0,13,0, +22,0,27,0,30,0,37,0,50,0,57,0,61,0,68,0,73,0,78,0,82, 0,88,0,102,0,116,0,119,0,125,0,129,0,131,0,142,0,144,0,158,0, 165,0,187,0,189,0,203,0,14,1,43,1,54,1,65,1,75,1,111,1,144, 1,177,1,236,1,46,2,124,2,190,2,195,2,215,2,106,3,126,3,177,3, 243,3,128,4,14,5,66,5,89,5,168,5,0,0,109,7,0,0,69,35,37, -109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,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,65,113,117,111,116, +109,105,110,45,115,116,120,29,11,11,68,104,101,114,101,45,115,116,120,64,99, +111,110,100,62,111,114,66,108,101,116,114,101,99,72,112,97,114,97,109,101,116, +101,114,105,122,101,66,117,110,108,101,115,115,63,108,101,116,66,100,101,102,105, +110,101,64,119,104,101,110,64,108,101,116,42,63,97,110,100,65,113,117,111,116, 101,29,94,2,14,68,35,37,107,101,114,110,101,108,11,29,94,2,14,68,35, 37,112,97,114,97,109,122,11,62,105,102,65,98,101,103,105,110,63,115,116,120, 61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,114,101, @@ -19,60 +19,60 @@ 2,6,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10,2,2,2, 11,2,2,2,5,2,2,2,12,2,2,2,13,2,2,97,37,11,8,240,151, 85,0,0,93,159,2,15,36,37,16,2,2,3,161,2,2,37,2,3,2,2, -2,3,96,38,11,8,240,151,85,0,0,16,0,96,11,11,8,240,151,85,0, +2,3,96,11,11,8,240,151,85,0,0,16,0,96,38,11,8,240,151,85,0, 0,16,0,13,16,4,36,29,11,11,2,2,11,18,16,2,99,64,104,101,114, 101,8,32,8,31,8,30,8,29,8,28,93,8,224,158,85,0,0,95,9,8, -224,158,85,0,0,2,2,27,248,22,150,4,195,249,22,143,4,80,158,39,36, +224,158,85,0,0,2,2,27,248,22,151,4,195,249,22,144,4,80,158,39,36, 251,22,82,2,17,248,22,97,199,12,249,22,72,2,18,248,22,99,201,27,248, -22,150,4,195,249,22,143,4,80,158,39,36,251,22,82,2,17,248,22,97,199, -249,22,72,2,18,248,22,99,201,12,27,248,22,74,248,22,150,4,196,28,248, +22,151,4,195,249,22,144,4,80,158,39,36,251,22,82,2,17,248,22,97,199, +249,22,72,2,18,248,22,99,201,12,27,248,22,74,248,22,151,4,196,28,248, 22,80,193,20,15,159,37,36,37,28,248,22,80,248,22,74,194,248,22,73,193, -249,22,143,4,80,158,39,36,251,22,82,2,17,248,22,73,199,249,22,72,2, -11,248,22,74,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28, +249,22,144,4,80,158,39,36,251,22,82,2,17,248,22,73,199,249,22,72,2, +13,248,22,74,201,11,18,16,2,101,10,8,32,8,31,8,30,8,29,8,28, 16,4,11,11,2,19,3,1,8,101,110,118,49,51,51,48,54,16,4,11,11, 2,20,3,1,8,101,110,118,49,51,51,48,55,93,8,224,159,85,0,0,95, -9,8,224,159,85,0,0,2,2,27,248,22,74,248,22,150,4,196,28,248,22, +9,8,224,159,85,0,0,2,2,27,248,22,74,248,22,151,4,196,28,248,22, 80,193,20,15,159,37,36,37,28,248,22,80,248,22,74,194,248,22,73,193,249, -22,143,4,80,158,39,36,250,22,82,2,21,248,22,82,249,22,82,248,22,82, -2,22,248,22,73,201,251,22,82,2,17,2,22,2,22,249,22,72,2,13,248, +22,144,4,80,158,39,36,250,22,82,2,21,248,22,82,249,22,82,248,22,82, +2,22,248,22,73,201,251,22,82,2,17,2,22,2,22,249,22,72,2,5,248, 22,74,204,18,16,2,101,11,8,32,8,31,8,30,8,29,8,28,16,4,11, 11,2,19,3,1,8,101,110,118,49,51,51,48,57,16,4,11,11,2,20,3, 1,8,101,110,118,49,51,51,49,48,93,8,224,160,85,0,0,95,9,8,224, -160,85,0,0,2,2,248,22,150,4,193,27,248,22,150,4,194,249,22,72,248, -22,82,248,22,73,196,248,22,74,195,27,248,22,74,248,22,150,4,23,197,1, -249,22,143,4,80,158,39,36,28,248,22,57,248,22,144,4,248,22,73,23,198, -2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,150,4, +160,85,0,0,2,2,248,22,151,4,193,27,248,22,151,4,194,249,22,72,248, +22,82,248,22,73,196,248,22,74,195,27,248,22,74,248,22,151,4,23,197,1, +249,22,144,4,80,158,39,36,28,248,22,57,248,22,145,4,248,22,73,23,198, +2,27,249,22,2,32,0,89,162,8,44,37,43,9,222,33,40,248,22,151,4, 248,22,97,23,200,2,250,22,82,2,23,248,22,82,249,22,82,248,22,82,248, 22,73,23,204,2,250,22,83,2,24,249,22,2,22,73,23,204,2,248,22,99, 23,206,2,249,22,72,248,22,73,23,202,1,249,22,2,22,97,23,200,1,250, 22,83,2,21,249,22,2,32,0,89,162,8,44,37,47,9,222,33,41,248,22, -150,4,248,22,73,201,248,22,74,198,27,248,22,150,4,194,249,22,72,248,22, -82,248,22,73,196,248,22,74,195,27,248,22,74,248,22,150,4,23,197,1,249, -22,143,4,80,158,39,36,250,22,83,2,23,249,22,2,32,0,89,162,8,44, -37,47,9,222,33,43,248,22,150,4,248,22,73,201,248,22,74,198,27,248,22, -74,248,22,150,4,196,27,248,22,150,4,248,22,73,195,249,22,143,4,80,158, +151,4,248,22,73,201,248,22,74,198,27,248,22,151,4,194,249,22,72,248,22, +82,248,22,73,196,248,22,74,195,27,248,22,74,248,22,151,4,23,197,1,249, +22,144,4,80,158,39,36,250,22,83,2,23,249,22,2,32,0,89,162,8,44, +37,47,9,222,33,43,248,22,151,4,248,22,73,201,248,22,74,198,27,248,22, +74,248,22,151,4,196,27,248,22,151,4,248,22,73,195,249,22,144,4,80,158, 40,36,28,248,22,80,195,250,22,83,2,21,9,248,22,74,199,250,22,82,2, -4,248,22,82,248,22,73,199,250,22,83,2,9,248,22,74,201,248,22,74,202, -27,248,22,74,248,22,150,4,23,197,1,27,249,22,1,22,86,249,22,2,22, -150,4,248,22,150,4,248,22,73,199,249,22,143,4,80,158,40,36,251,22,82, +9,248,22,82,248,22,73,199,250,22,83,2,12,248,22,74,201,248,22,74,202, +27,248,22,74,248,22,151,4,23,197,1,27,249,22,1,22,86,249,22,2,22, +151,4,248,22,151,4,248,22,73,199,249,22,144,4,80,158,40,36,251,22,82, 1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109, 97,114,107,2,25,250,22,83,1,23,101,120,116,101,110,100,45,112,97,114,97, 109,101,116,101,114,105,122,97,116,105,111,110,21,95,1,27,99,111,110,116,105, 110,117,97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115, 116,11,2,25,201,250,22,83,2,21,9,248,22,74,203,27,248,22,74,248,22, -150,4,196,28,248,22,80,193,20,15,159,37,36,37,249,22,143,4,80,158,39, -36,27,248,22,150,4,248,22,73,197,28,249,22,191,8,62,61,62,248,22,144, +151,4,196,28,248,22,80,193,20,15,159,37,36,37,249,22,144,4,80,158,39, +36,27,248,22,151,4,248,22,73,197,28,249,22,128,9,62,61,62,248,22,145, 4,248,22,97,196,250,22,82,2,21,248,22,82,249,22,82,21,93,2,26,248, -22,73,199,250,22,83,2,5,249,22,82,2,26,249,22,82,248,22,106,203,2, -26,248,22,74,202,251,22,82,2,17,28,249,22,191,8,248,22,144,4,248,22, +22,73,199,250,22,83,2,4,249,22,82,2,26,249,22,82,248,22,106,203,2, +26,248,22,74,202,251,22,82,2,17,28,249,22,128,9,248,22,145,4,248,22, 73,200,64,101,108,115,101,10,248,22,73,197,250,22,83,2,21,9,248,22,74, -200,249,22,72,2,5,248,22,74,202,100,8,32,8,31,8,30,8,29,8,28, +200,249,22,72,2,4,248,22,74,202,100,8,32,8,31,8,30,8,29,8,28, 16,4,11,11,2,19,3,1,8,101,110,118,49,51,51,51,50,16,4,11,11, 2,20,3,1,8,101,110,118,49,51,51,51,51,93,8,224,161,85,0,0,18, 16,2,158,94,10,64,118,111,105,100,8,48,95,9,8,224,161,85,0,0,2, -2,27,248,22,74,248,22,150,4,196,249,22,143,4,80,158,39,36,28,248,22, -57,248,22,144,4,248,22,73,197,250,22,82,2,27,248,22,82,248,22,73,199, -248,22,97,198,27,248,22,144,4,248,22,73,197,250,22,82,2,27,248,22,82, +2,27,248,22,74,248,22,151,4,196,249,22,144,4,80,158,39,36,28,248,22, +57,248,22,145,4,248,22,73,197,250,22,82,2,27,248,22,82,248,22,73,199, +248,22,97,198,27,248,22,145,4,248,22,73,197,250,22,82,2,27,248,22,82, 248,22,73,197,250,22,83,2,24,248,22,74,199,248,22,74,202,159,36,20,105, 159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,2,2,11,11, 11,10,36,80,158,36,36,20,105,159,36,16,0,16,0,16,1,2,3,37,16, @@ -81,25 +81,25 @@ 11,11,11,11,16,10,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2, 11,2,12,2,13,36,46,37,11,11,11,16,0,16,0,16,0,36,36,11,11, 11,11,16,0,16,0,16,0,36,36,16,11,16,5,2,3,20,15,159,36,36, -36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,6,89,162,8,44, +36,36,20,105,159,36,16,0,16,1,33,33,10,16,5,2,8,89,162,8,44, 37,53,9,223,0,33,34,36,20,105,159,36,16,1,2,3,16,0,11,16,5, -2,8,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, -3,16,0,11,16,5,2,11,89,162,8,44,37,53,9,223,0,33,36,36,20, -105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,13,89,162,8,44,37, +2,11,89,162,8,44,37,53,9,223,0,33,35,36,20,105,159,36,16,1,2, +3,16,0,11,16,5,2,13,89,162,8,44,37,53,9,223,0,33,36,36,20, +105,159,36,16,1,2,3,16,1,33,37,11,16,5,2,5,89,162,8,44,37, 56,9,223,0,33,38,36,20,105,159,36,16,1,2,3,16,1,33,39,11,16, -5,2,4,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, -2,3,16,0,11,16,5,2,12,89,162,8,44,37,53,9,223,0,33,44,36, -20,105,159,36,16,1,2,3,16,0,11,16,5,2,9,89,162,8,44,37,54, -9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,10, +5,2,9,89,162,8,44,37,58,9,223,0,33,42,36,20,105,159,36,16,1, +2,3,16,0,11,16,5,2,6,89,162,8,44,37,53,9,223,0,33,44,36, +20,105,159,36,16,1,2,3,16,0,11,16,5,2,12,89,162,8,44,37,54, +9,223,0,33,45,36,20,105,159,36,16,1,2,3,16,0,11,16,5,2,7, 89,162,8,44,37,55,9,223,0,33,46,36,20,105,159,36,16,1,2,3,16, -0,11,16,5,2,5,89,162,8,44,37,58,9,223,0,33,47,36,20,105,159, -36,16,1,2,3,16,1,33,49,11,16,5,2,7,89,162,8,44,37,54,9, +0,11,16,5,2,4,89,162,8,44,37,58,9,223,0,33,47,36,20,105,159, +36,16,1,2,3,16,1,33,49,11,16,5,2,10,89,162,8,44,37,54,9, 223,0,33,50,36,20,105,159,36,16,1,2,3,16,0,11,16,0,94,2,15, 2,16,93,2,15,9,9,36,0}; EVAL_ONE_SIZED_STR((char *)expr, 2024); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,55,72,0,0,0,1,0,0,8,0,21,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,56,72,0,0,0,1,0,0,8,0,21,0, 26,0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200, 0,231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1, 143,1,188,1,194,1,201,1,207,1,252,1,20,2,59,2,61,2,227,2,61, @@ -135,344 +135,344 @@ 114,105,110,103,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115, 117,102,102,105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58, 32,5,0,27,20,14,159,80,159,37,52,38,250,80,159,40,53,38,249,22,27, -11,80,159,42,52,38,22,169,13,10,248,22,179,5,23,196,2,28,248,22,176, -6,23,194,2,12,87,94,248,22,135,9,23,194,1,27,20,14,159,80,159,38, -52,38,250,80,159,41,53,38,249,22,27,11,80,159,43,52,38,22,169,13,10, -248,22,179,5,23,197,2,28,248,22,176,6,23,194,2,12,87,94,248,22,135, +11,80,159,42,52,38,22,170,13,10,248,22,180,5,23,196,2,28,248,22,177, +6,23,194,2,12,87,94,248,22,136,9,23,194,1,27,20,14,159,80,159,38, +52,38,250,80,159,41,53,38,249,22,27,11,80,159,43,52,38,22,170,13,10, +248,22,180,5,23,197,2,28,248,22,177,6,23,194,2,12,87,94,248,22,136, 9,23,194,1,27,20,14,159,80,159,39,52,38,250,80,159,42,53,38,249,22, -27,11,80,159,44,52,38,22,169,13,10,248,22,179,5,23,198,2,28,248,22, -176,6,23,194,2,12,87,94,248,22,135,9,23,194,1,248,80,159,40,55,37, -197,28,248,22,80,23,195,2,9,27,248,22,73,23,196,2,27,28,248,22,153, -14,23,195,2,23,194,1,28,248,22,152,14,23,195,2,249,22,154,14,23,196, -1,250,80,158,43,50,248,22,169,14,2,21,11,10,250,80,158,41,50,248,22, -169,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,156,14,249,22, -154,14,23,198,1,247,22,170,14,27,248,22,74,23,200,1,28,248,22,80,23, -194,2,9,27,248,22,73,23,195,2,27,28,248,22,153,14,23,195,2,23,194, -1,28,248,22,152,14,23,195,2,249,22,154,14,23,196,1,250,80,158,48,50, -248,22,169,14,2,21,11,10,250,80,158,46,50,248,22,169,14,2,21,23,197, -1,10,28,23,193,2,249,22,72,248,22,156,14,249,22,154,14,23,198,1,247, -22,170,14,248,80,159,46,54,37,248,22,74,23,199,1,87,94,23,193,1,248, +27,11,80,159,44,52,38,22,170,13,10,248,22,180,5,23,198,2,28,248,22, +177,6,23,194,2,12,87,94,248,22,136,9,23,194,1,248,80,159,40,55,37, +197,28,248,22,80,23,195,2,9,27,248,22,73,23,196,2,27,28,248,22,156, +14,23,195,2,23,194,1,28,248,22,155,14,23,195,2,249,22,157,14,23,196, +1,250,80,158,43,50,248,22,172,14,2,21,11,10,250,80,158,41,50,248,22, +172,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,159,14,249,22, +157,14,23,198,1,247,22,173,14,27,248,22,74,23,200,1,28,248,22,80,23, +194,2,9,27,248,22,73,23,195,2,27,28,248,22,156,14,23,195,2,23,194, +1,28,248,22,155,14,23,195,2,249,22,157,14,23,196,1,250,80,158,48,50, +248,22,172,14,2,21,11,10,250,80,158,46,50,248,22,172,14,2,21,23,197, +1,10,28,23,193,2,249,22,72,248,22,159,14,249,22,157,14,23,198,1,247, +22,173,14,248,80,159,46,54,37,248,22,74,23,199,1,87,94,23,193,1,248, 80,159,44,54,37,248,22,74,23,197,1,87,94,23,193,1,27,248,22,74,23, 198,1,28,248,22,80,23,194,2,9,27,248,22,73,23,195,2,27,28,248,22, -153,14,23,195,2,23,194,1,28,248,22,152,14,23,195,2,249,22,154,14,23, -196,1,250,80,158,46,50,248,22,169,14,2,21,11,10,250,80,158,44,50,248, -22,169,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,156,14,249, -22,154,14,23,198,1,247,22,170,14,248,80,159,44,54,37,248,22,74,23,199, -1,248,80,159,42,54,37,248,22,74,196,27,248,22,129,14,23,195,2,28,23, -193,2,192,87,94,23,193,1,28,248,22,181,6,23,195,2,27,248,22,151,14, -195,28,192,192,248,22,152,14,195,11,87,94,28,28,248,22,130,14,23,195,2, -10,28,248,22,129,14,23,195,2,10,28,248,22,181,6,23,195,2,28,248,22, -151,14,23,195,2,10,248,22,152,14,23,195,2,11,12,250,22,163,9,76,110, +156,14,23,195,2,23,194,1,28,248,22,155,14,23,195,2,249,22,157,14,23, +196,1,250,80,158,46,50,248,22,172,14,2,21,11,10,250,80,158,44,50,248, +22,172,14,2,21,23,197,1,10,28,23,193,2,249,22,72,248,22,159,14,249, +22,157,14,23,198,1,247,22,173,14,248,80,159,44,54,37,248,22,74,23,199, +1,248,80,159,42,54,37,248,22,74,196,27,248,22,132,14,23,195,2,28,23, +193,2,192,87,94,23,193,1,28,248,22,182,6,23,195,2,27,248,22,154,14, +195,28,192,192,248,22,155,14,195,11,87,94,28,28,248,22,133,14,23,195,2, +10,28,248,22,132,14,23,195,2,10,28,248,22,182,6,23,195,2,28,248,22, +154,14,23,195,2,10,248,22,155,14,23,195,2,11,12,250,22,164,9,76,110, 111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,42,42,112,97,116, 104,32,40,102,111,114,32,97,110,121,32,115,121,115,116,101,109,41,32,111,114, 32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103,23,197,2, -28,28,248,22,130,14,23,195,2,249,22,191,8,248,22,131,14,23,197,2,2, -22,249,22,191,8,247,22,139,8,2,22,27,28,248,22,181,6,23,196,2,23, -195,2,248,22,129,8,248,22,134,14,23,197,2,28,249,22,184,14,0,21,35, +28,28,248,22,133,14,23,195,2,249,22,128,9,248,22,134,14,23,197,2,2, +22,249,22,128,9,247,22,140,8,2,22,27,28,248,22,182,6,23,196,2,23, +195,2,248,22,130,8,248,22,137,14,23,197,2,28,249,22,187,14,0,21,35, 114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,23, -195,2,28,248,22,181,6,195,248,22,137,14,195,194,27,248,22,156,7,23,195, -1,249,22,138,14,248,22,132,8,250,22,128,15,0,6,35,114,120,34,47,34, -28,249,22,184,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43, -91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,128,15,0,19,35, +195,2,28,248,22,182,6,195,248,22,140,14,195,194,27,248,22,157,7,23,195, +1,249,22,141,14,248,22,133,8,250,22,131,15,0,6,35,114,120,34,47,34, +28,249,22,187,14,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43, +91,47,92,92,93,42,36,34,23,201,2,23,199,1,250,22,131,15,0,19,35, 114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,34,23,202,1, -6,2,2,92,49,80,159,44,37,38,2,22,28,248,22,181,6,194,248,22,137, -14,194,193,87,94,28,28,248,22,129,14,23,195,2,10,28,248,22,181,6,23, -195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23,195,2,11,12,250, -22,163,9,23,196,2,2,23,23,197,2,28,248,22,151,14,23,195,2,12,248, -22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,23,200,1,23, -201,1,247,22,23,87,94,28,28,248,22,129,14,23,195,2,10,28,248,22,181, -6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23,195,2,11, -12,250,22,163,9,23,196,2,2,23,23,197,2,28,248,22,151,14,23,195,2, -12,248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,23,200, -1,23,201,1,247,22,23,87,94,87,94,28,28,248,22,129,14,23,195,2,10, -28,248,22,181,6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14, -23,195,2,11,12,250,22,163,9,195,2,23,23,197,2,28,248,22,151,14,23, -195,2,12,248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24, +6,2,2,92,49,80,159,44,37,38,2,22,28,248,22,182,6,194,248,22,140, +14,194,193,87,94,28,28,248,22,132,14,23,195,2,10,28,248,22,182,6,23, +195,2,28,248,22,154,14,23,195,2,10,248,22,155,14,23,195,2,11,12,250, +22,164,9,23,196,2,2,23,23,197,2,28,248,22,154,14,23,195,2,12,248, +22,146,12,249,22,152,11,248,22,147,7,250,22,166,7,2,24,23,200,1,23, +201,1,247,22,23,87,94,28,28,248,22,132,14,23,195,2,10,28,248,22,182, +6,23,195,2,28,248,22,154,14,23,195,2,10,248,22,155,14,23,195,2,11, +12,250,22,164,9,23,196,2,2,23,23,197,2,28,248,22,154,14,23,195,2, +12,248,22,146,12,249,22,152,11,248,22,147,7,250,22,166,7,2,24,23,200, +1,23,201,1,247,22,23,87,94,87,94,28,28,248,22,132,14,23,195,2,10, +28,248,22,182,6,23,195,2,28,248,22,154,14,23,195,2,10,248,22,155,14, +23,195,2,11,12,250,22,164,9,195,2,23,23,197,2,28,248,22,154,14,23, +195,2,12,248,22,146,12,249,22,152,11,248,22,147,7,250,22,166,7,2,24, 199,23,201,1,247,22,23,249,22,3,89,162,8,44,37,50,9,223,2,33,38, -196,87,94,28,28,248,22,129,14,23,194,2,10,28,248,22,181,6,23,194,2, -28,248,22,151,14,23,194,2,10,248,22,152,14,23,194,2,11,12,250,22,163, -9,2,7,2,23,23,196,2,28,248,22,151,14,23,194,2,12,248,22,145,12, -249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,7,23,200,1,247,22, +196,87,94,28,28,248,22,132,14,23,194,2,10,28,248,22,182,6,23,194,2, +28,248,22,154,14,23,194,2,10,248,22,155,14,23,194,2,11,12,250,22,164, +9,2,7,2,23,23,196,2,28,248,22,154,14,23,194,2,12,248,22,146,12, +249,22,152,11,248,22,147,7,250,22,166,7,2,24,2,7,23,200,1,247,22, 23,32,41,89,162,8,44,41,56,2,26,222,33,42,28,248,22,80,23,197,2, -87,94,23,196,1,28,23,197,2,196,87,94,23,197,1,248,22,145,12,249,22, -184,11,251,22,165,7,2,25,2,7,28,248,22,80,23,203,2,87,94,23,202, -1,23,201,1,250,22,1,22,147,14,23,204,1,23,205,1,23,200,1,247,22, -23,27,249,22,147,14,248,22,73,23,200,2,23,197,2,28,248,22,142,14,23, -194,2,27,250,22,1,22,147,14,23,197,1,199,28,248,22,142,14,193,192,252, +87,94,23,196,1,28,23,197,2,196,87,94,23,197,1,248,22,146,12,249,22, +185,11,251,22,166,7,2,25,2,7,28,248,22,80,23,203,2,87,94,23,202, +1,23,201,1,250,22,1,22,150,14,23,204,1,23,205,1,23,200,1,247,22, +23,27,249,22,150,14,248,22,73,23,200,2,23,197,2,28,248,22,145,14,23, +194,2,27,250,22,1,22,150,14,23,197,1,199,28,248,22,145,14,193,192,252, 2,41,199,200,201,248,22,74,203,203,252,2,41,198,199,200,248,22,74,202,202, -87,94,87,94,87,94,28,28,248,22,129,14,23,194,2,10,28,248,22,181,6, -23,194,2,28,248,22,151,14,23,194,2,10,248,22,152,14,23,194,2,11,12, -250,22,163,9,2,7,2,23,23,196,2,28,248,22,151,14,23,194,2,12,248, -22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,7,23,200, +87,94,87,94,87,94,28,28,248,22,132,14,23,194,2,10,28,248,22,182,6, +23,194,2,28,248,22,154,14,23,194,2,10,248,22,155,14,23,194,2,11,12, +250,22,164,9,2,7,2,23,23,196,2,28,248,22,154,14,23,194,2,12,248, +22,146,12,249,22,152,11,248,22,147,7,250,22,166,7,2,24,2,7,23,200, 2,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9,222,33,40,23,196, -2,27,247,22,171,14,28,248,22,80,23,194,2,248,22,145,12,249,22,184,11, -251,22,165,7,2,25,2,7,28,248,22,80,23,203,2,87,94,23,202,1,23, -201,1,250,22,1,22,147,14,23,204,1,23,205,1,23,200,1,247,22,23,27, -249,22,147,14,248,22,73,23,197,2,23,197,2,28,248,22,142,14,23,194,2, -27,250,22,1,22,147,14,23,197,1,199,28,248,22,142,14,193,192,252,2,41, +2,27,247,22,174,14,28,248,22,80,23,194,2,248,22,146,12,249,22,185,11, +251,22,166,7,2,25,2,7,28,248,22,80,23,203,2,87,94,23,202,1,23, +201,1,250,22,1,22,150,14,23,204,1,23,205,1,23,200,1,247,22,23,27, +249,22,150,14,248,22,73,23,197,2,23,197,2,28,248,22,145,14,23,194,2, +27,250,22,1,22,150,14,23,197,1,199,28,248,22,145,14,193,192,252,2,41, 199,200,201,248,22,74,200,11,252,2,41,198,199,200,248,22,74,199,11,87,94, -28,28,248,22,129,14,23,194,2,10,28,248,22,181,6,23,194,2,28,248,22, -151,14,23,194,2,10,248,22,152,14,23,194,2,11,12,250,22,163,9,2,9, -2,23,23,196,2,28,248,22,151,14,23,194,2,12,248,22,145,12,249,22,151, -11,248,22,146,7,250,22,165,7,2,24,2,9,23,200,1,247,22,23,32,45, +28,28,248,22,132,14,23,194,2,10,28,248,22,182,6,23,194,2,28,248,22, +154,14,23,194,2,10,248,22,155,14,23,194,2,11,12,250,22,164,9,2,9, +2,23,23,196,2,28,248,22,154,14,23,194,2,12,248,22,146,12,249,22,152, +11,248,22,147,7,250,22,166,7,2,24,2,9,23,200,1,247,22,23,32,45, 89,162,8,44,42,59,2,26,222,33,46,28,248,22,80,23,198,2,87,95,23, -197,1,23,194,1,28,23,198,2,197,87,94,23,198,1,248,22,145,12,249,22, -184,11,251,22,165,7,2,25,2,9,28,248,22,80,23,204,2,87,94,23,203, -1,23,202,1,250,22,1,22,147,14,23,205,1,23,206,1,23,200,1,247,22, -23,27,249,22,147,14,248,22,73,23,201,2,23,198,2,28,248,22,142,14,23, -194,2,27,250,22,1,22,147,14,23,197,1,23,201,2,28,248,22,142,14,23, -194,2,28,23,196,2,28,28,248,22,141,14,249,22,147,14,195,198,10,27,28, -248,22,129,14,197,248,22,133,14,197,196,27,248,22,184,6,23,195,2,27,28, -249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139,7,23,199, -2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23,200,1,36, -249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28, -23,193,2,248,22,141,14,249,22,147,14,198,23,196,1,11,192,253,2,45,200, +197,1,23,194,1,28,23,198,2,197,87,94,23,198,1,248,22,146,12,249,22, +185,11,251,22,166,7,2,25,2,9,28,248,22,80,23,204,2,87,94,23,203, +1,23,202,1,250,22,1,22,150,14,23,205,1,23,206,1,23,200,1,247,22, +23,27,249,22,150,14,248,22,73,23,201,2,23,198,2,28,248,22,145,14,23, +194,2,27,250,22,1,22,150,14,23,197,1,23,201,2,28,248,22,145,14,23, +194,2,28,23,196,2,28,28,248,22,144,14,249,22,150,14,195,198,10,27,28, +248,22,132,14,197,248,22,136,14,197,196,27,248,22,185,6,23,195,2,27,28, +249,22,184,3,23,196,2,40,28,249,22,188,6,2,27,249,22,140,7,23,199, +2,249,22,172,3,23,200,2,40,249,22,141,7,250,22,140,7,23,200,1,36, +249,22,172,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11,11,28, +23,193,2,248,22,144,14,249,22,150,14,198,23,196,1,11,192,253,2,45,200, 201,202,203,248,22,74,205,28,205,205,198,192,253,2,45,200,201,202,203,248,22, 74,205,205,253,2,45,199,200,201,202,248,22,74,204,204,87,95,87,94,28,28, -248,22,129,14,193,10,28,248,22,181,6,193,28,248,22,151,14,193,10,248,22, -152,14,193,11,12,250,22,163,9,2,9,2,23,195,28,248,22,151,14,193,12, -248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,9,199, -247,22,23,87,94,87,94,28,28,248,22,129,14,23,195,2,10,28,248,22,181, -6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23,195,2,11, -12,250,22,163,9,2,9,2,23,23,197,2,28,248,22,151,14,23,195,2,12, -248,22,145,12,249,22,151,11,248,22,146,7,250,22,165,7,2,24,2,9,23, +248,22,132,14,193,10,28,248,22,182,6,193,28,248,22,154,14,193,10,248,22, +155,14,193,11,12,250,22,164,9,2,9,2,23,195,28,248,22,154,14,193,12, +248,22,146,12,249,22,152,11,248,22,147,7,250,22,166,7,2,24,2,9,199, +247,22,23,87,94,87,94,28,28,248,22,132,14,23,195,2,10,28,248,22,182, +6,23,195,2,28,248,22,154,14,23,195,2,10,248,22,155,14,23,195,2,11, +12,250,22,164,9,2,9,2,23,23,197,2,28,248,22,154,14,23,195,2,12, +248,22,146,12,249,22,152,11,248,22,147,7,250,22,166,7,2,24,2,9,23, 201,2,247,22,23,249,22,3,32,0,89,162,8,44,37,49,9,222,33,44,23, -197,2,249,22,147,14,27,247,22,171,14,253,2,45,23,199,2,201,23,203,1, +197,2,249,22,150,14,27,247,22,174,14,253,2,45,23,199,2,201,23,203,1, 23,204,1,23,199,1,11,194,32,48,89,162,44,44,8,29,2,26,222,33,49, 28,248,22,80,23,200,2,87,95,23,199,1,23,198,1,28,23,200,2,199,87, -94,23,200,1,248,23,196,1,251,22,165,7,2,25,23,199,1,28,248,22,80, -23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,147,14,23,204,1,23, -205,1,23,198,1,27,249,22,147,14,248,22,73,23,203,2,23,199,2,28,248, -22,142,14,23,194,2,27,250,22,1,22,147,14,23,197,1,23,202,2,28,248, -22,142,14,23,194,2,28,23,200,2,28,28,248,22,141,14,249,22,147,14,23, -196,2,23,203,2,10,27,28,248,22,129,14,23,202,2,248,22,133,14,23,202, -2,23,201,2,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2, -40,28,249,22,187,6,2,27,249,22,139,7,23,199,2,249,22,171,3,23,200, -2,40,249,22,140,7,250,22,139,7,23,200,1,36,249,22,171,3,23,201,1, -40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,141,14, -249,22,147,14,23,199,2,23,196,1,11,192,27,248,22,74,23,203,1,27,28, +94,23,200,1,248,23,196,1,251,22,166,7,2,25,23,199,1,28,248,22,80, +23,203,2,87,94,23,202,1,23,201,1,250,22,1,22,150,14,23,204,1,23, +205,1,23,198,1,27,249,22,150,14,248,22,73,23,203,2,23,199,2,28,248, +22,145,14,23,194,2,27,250,22,1,22,150,14,23,197,1,23,202,2,28,248, +22,145,14,23,194,2,28,23,200,2,28,28,248,22,144,14,249,22,150,14,23, +196,2,23,203,2,10,27,28,248,22,132,14,23,202,2,248,22,136,14,23,202, +2,23,201,2,27,248,22,185,6,23,195,2,27,28,249,22,184,3,23,196,2, +40,28,249,22,188,6,2,27,249,22,140,7,23,199,2,249,22,172,3,23,200, +2,40,249,22,141,7,250,22,140,7,23,200,1,36,249,22,172,3,23,201,1, +40,2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,144,14, +249,22,150,14,23,199,2,23,196,1,11,192,27,248,22,74,23,203,1,27,28, 23,204,2,87,94,23,195,1,23,204,1,87,94,23,204,1,23,195,1,28,248, 22,80,23,195,2,87,95,23,202,1,23,194,1,28,23,193,2,192,87,94,23, -193,1,248,23,200,1,251,22,165,7,2,25,23,203,1,28,248,22,80,23,207, -2,87,94,23,206,1,23,205,1,250,22,1,22,147,14,23,208,1,23,209,1, -23,202,1,27,249,22,147,14,248,22,73,23,198,2,23,203,2,28,248,22,142, -14,23,194,2,27,250,22,1,22,147,14,23,197,1,23,206,2,28,248,22,142, -14,23,194,2,28,23,204,2,28,28,248,22,141,14,249,22,147,14,195,206,10, -27,28,248,22,129,14,205,248,22,133,14,205,204,27,248,22,184,6,23,195,2, -27,28,249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139,7, -23,199,2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23,200, -1,36,249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11, -11,28,23,193,2,248,22,141,14,249,22,147,14,198,23,196,1,11,192,26,8, +193,1,248,23,200,1,251,22,166,7,2,25,23,203,1,28,248,22,80,23,207, +2,87,94,23,206,1,23,205,1,250,22,1,22,150,14,23,208,1,23,209,1, +23,202,1,27,249,22,150,14,248,22,73,23,198,2,23,203,2,28,248,22,145, +14,23,194,2,27,250,22,1,22,150,14,23,197,1,23,206,2,28,248,22,145, +14,23,194,2,28,23,204,2,28,28,248,22,144,14,249,22,150,14,195,206,10, +27,28,248,22,132,14,205,248,22,136,14,205,204,27,248,22,185,6,23,195,2, +27,28,249,22,184,3,23,196,2,40,28,249,22,188,6,2,27,249,22,140,7, +23,199,2,249,22,172,3,23,200,2,40,249,22,141,7,250,22,140,7,23,200, +1,36,249,22,172,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11, +11,28,23,193,2,248,22,144,14,249,22,150,14,198,23,196,1,11,192,26,8, 2,48,206,23,15,23,16,23,17,23,18,23,19,248,22,74,204,28,202,202,200, 192,26,8,2,48,206,23,15,23,16,23,17,23,18,23,19,248,22,74,204,202, 26,8,2,48,205,206,23,15,23,16,23,17,23,18,248,22,74,203,201,192,27, 248,22,74,23,203,1,28,248,22,80,23,194,2,87,95,23,201,1,23,193,1, -28,23,203,2,202,87,94,23,203,1,248,23,199,1,251,22,165,7,2,25,23, +28,23,203,2,202,87,94,23,203,1,248,23,199,1,251,22,166,7,2,25,23, 202,1,28,248,22,80,23,206,2,87,94,23,205,1,23,204,1,250,22,1,22, -147,14,23,207,1,23,208,1,23,201,1,27,249,22,147,14,248,22,73,23,197, -2,23,202,2,28,248,22,142,14,23,194,2,27,250,22,1,22,147,14,23,197, -1,23,205,2,28,248,22,142,14,23,194,2,28,23,203,2,28,28,248,22,141, -14,249,22,147,14,195,205,10,27,28,248,22,129,14,204,248,22,133,14,204,203, -27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2,40,28,249,22, -187,6,2,27,249,22,139,7,23,199,2,249,22,171,3,23,200,2,40,249,22, -140,7,250,22,139,7,23,200,1,36,249,22,171,3,23,201,1,40,2,28,87, -95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,141,14,249,22,147,14, +150,14,23,207,1,23,208,1,23,201,1,27,249,22,150,14,248,22,73,23,197, +2,23,202,2,28,248,22,145,14,23,194,2,27,250,22,1,22,150,14,23,197, +1,23,205,2,28,248,22,145,14,23,194,2,28,23,203,2,28,28,248,22,144, +14,249,22,150,14,195,205,10,27,28,248,22,132,14,204,248,22,136,14,204,203, +27,248,22,185,6,23,195,2,27,28,249,22,184,3,23,196,2,40,28,249,22, +188,6,2,27,249,22,140,7,23,199,2,249,22,172,3,23,200,2,40,249,22, +141,7,250,22,140,7,23,200,1,36,249,22,172,3,23,201,1,40,2,28,87, +95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,144,14,249,22,150,14, 198,23,196,1,11,192,26,8,2,48,205,206,23,15,23,16,23,17,23,18,248, 22,74,203,28,23,20,23,20,200,192,26,8,2,48,205,206,23,15,23,16,23, 17,23,18,248,22,74,203,23,20,26,8,2,48,204,205,206,23,15,23,16,23, 17,248,22,74,202,23,19,87,94,23,193,1,27,248,22,74,23,202,1,28,248, 22,80,23,194,2,87,95,23,200,1,23,193,1,28,23,202,2,201,87,94,23, -202,1,248,23,198,1,251,22,165,7,2,25,23,201,1,28,248,22,80,23,205, -2,87,94,23,204,1,23,203,1,250,22,1,22,147,14,23,206,1,23,207,1, -23,200,1,27,249,22,147,14,248,22,73,23,197,2,23,201,2,28,248,22,142, -14,23,194,2,27,250,22,1,22,147,14,23,197,1,23,204,2,28,248,22,142, -14,23,194,2,28,23,202,2,28,28,248,22,141,14,249,22,147,14,195,204,10, -27,28,248,22,129,14,203,248,22,133,14,203,202,27,248,22,184,6,23,195,2, -27,28,249,22,183,3,23,196,2,40,28,249,22,187,6,2,27,249,22,139,7, -23,199,2,249,22,171,3,23,200,2,40,249,22,140,7,250,22,139,7,23,200, -1,36,249,22,171,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11, -11,28,23,193,2,248,22,141,14,249,22,147,14,198,23,196,1,11,192,26,8, +202,1,248,23,198,1,251,22,166,7,2,25,23,201,1,28,248,22,80,23,205, +2,87,94,23,204,1,23,203,1,250,22,1,22,150,14,23,206,1,23,207,1, +23,200,1,27,249,22,150,14,248,22,73,23,197,2,23,201,2,28,248,22,145, +14,23,194,2,27,250,22,1,22,150,14,23,197,1,23,204,2,28,248,22,145, +14,23,194,2,28,23,202,2,28,28,248,22,144,14,249,22,150,14,195,204,10, +27,28,248,22,132,14,203,248,22,136,14,203,202,27,248,22,185,6,23,195,2, +27,28,249,22,184,3,23,196,2,40,28,249,22,188,6,2,27,249,22,140,7, +23,199,2,249,22,172,3,23,200,2,40,249,22,141,7,250,22,140,7,23,200, +1,36,249,22,172,3,23,201,1,40,2,28,87,95,23,195,1,23,194,1,11, +11,28,23,193,2,248,22,144,14,249,22,150,14,198,23,196,1,11,192,26,8, 2,48,204,205,206,23,15,23,16,23,17,248,22,74,203,28,23,19,23,19,200, 192,26,8,2,48,204,205,206,23,15,23,16,23,17,248,22,74,203,23,19,26, -8,2,48,203,204,205,206,23,15,23,16,248,22,74,202,23,18,27,247,22,171, -14,28,248,22,80,23,194,2,87,94,23,198,1,248,23,196,1,251,22,165,7, +8,2,48,203,204,205,206,23,15,23,16,248,22,74,202,23,18,27,247,22,174, +14,28,248,22,80,23,194,2,87,94,23,198,1,248,23,196,1,251,22,166,7, 2,25,23,199,1,28,248,22,80,23,203,2,87,94,23,202,1,23,201,1,250, -22,1,22,147,14,23,204,1,23,205,1,23,198,1,27,249,22,147,14,248,22, -73,23,197,2,23,199,2,28,248,22,142,14,23,194,2,27,250,22,1,22,147, -14,23,197,1,23,202,2,28,248,22,142,14,23,194,2,28,23,200,2,28,28, -248,22,141,14,249,22,147,14,195,202,10,27,28,248,22,129,14,201,248,22,133, -14,201,200,27,248,22,184,6,23,195,2,27,28,249,22,183,3,23,196,2,40, -28,249,22,187,6,2,27,249,22,139,7,23,199,2,249,22,171,3,23,200,2, -40,249,22,140,7,250,22,139,7,23,200,1,36,249,22,171,3,23,201,1,40, -2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,141,14,249, -22,147,14,198,23,196,1,11,192,26,8,2,48,202,203,204,205,206,23,15,248, +22,1,22,150,14,23,204,1,23,205,1,23,198,1,27,249,22,150,14,248,22, +73,23,197,2,23,199,2,28,248,22,145,14,23,194,2,27,250,22,1,22,150, +14,23,197,1,23,202,2,28,248,22,145,14,23,194,2,28,23,200,2,28,28, +248,22,144,14,249,22,150,14,195,202,10,27,28,248,22,132,14,201,248,22,136, +14,201,200,27,248,22,185,6,23,195,2,27,28,249,22,184,3,23,196,2,40, +28,249,22,188,6,2,27,249,22,140,7,23,199,2,249,22,172,3,23,200,2, +40,249,22,141,7,250,22,140,7,23,200,1,36,249,22,172,3,23,201,1,40, +2,28,87,95,23,195,1,23,194,1,11,11,28,23,193,2,248,22,144,14,249, +22,150,14,198,23,196,1,11,192,26,8,2,48,202,203,204,205,206,23,15,248, 22,74,203,200,192,26,8,2,48,202,203,204,205,206,23,15,248,22,74,203,11, 26,8,2,48,201,202,203,204,205,206,248,22,74,202,11,87,95,28,28,248,22, -130,14,23,194,2,10,28,248,22,129,14,23,194,2,10,28,248,22,181,6,23, -194,2,28,248,22,151,14,23,194,2,10,248,22,152,14,23,194,2,11,12,252, -22,163,9,23,200,2,2,29,36,23,198,2,23,199,2,28,28,248,22,181,6, -23,195,2,10,248,22,170,7,23,195,2,87,94,23,194,1,12,252,22,163,9, +133,14,23,194,2,10,28,248,22,132,14,23,194,2,10,28,248,22,182,6,23, +194,2,28,248,22,154,14,23,194,2,10,248,22,155,14,23,194,2,11,12,252, +22,164,9,23,200,2,2,29,36,23,198,2,23,199,2,28,28,248,22,182,6, +23,195,2,10,248,22,171,7,23,195,2,87,94,23,194,1,12,252,22,164,9, 23,200,2,2,30,37,23,198,2,23,199,1,91,159,39,11,90,161,39,36,11, -248,22,150,14,23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,164,9, +248,22,153,14,23,197,2,87,94,23,195,1,87,94,28,192,12,250,22,165,9, 23,201,1,2,31,23,199,1,249,22,7,194,195,91,159,38,11,90,161,38,36, -11,87,95,28,28,248,22,130,14,23,196,2,10,28,248,22,129,14,23,196,2, -10,28,248,22,181,6,23,196,2,28,248,22,151,14,23,196,2,10,248,22,152, -14,23,196,2,11,12,252,22,163,9,2,11,2,29,36,23,200,2,23,201,2, -28,28,248,22,181,6,23,197,2,10,248,22,170,7,23,197,2,12,252,22,163, +11,87,95,28,28,248,22,133,14,23,196,2,10,28,248,22,132,14,23,196,2, +10,28,248,22,182,6,23,196,2,28,248,22,154,14,23,196,2,10,248,22,155, +14,23,196,2,11,12,252,22,164,9,2,11,2,29,36,23,200,2,23,201,2, +28,28,248,22,182,6,23,197,2,10,248,22,171,7,23,197,2,12,252,22,164, 9,2,11,2,30,37,23,200,2,23,201,2,91,159,39,11,90,161,39,36,11, -248,22,150,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,164,9, -2,11,2,31,23,201,2,249,22,7,194,195,27,249,22,139,14,250,22,191,14, +248,22,153,14,23,199,2,87,94,23,195,1,87,94,28,192,12,250,22,165,9, +2,11,2,31,23,201,2,249,22,7,194,195,27,249,22,142,14,250,22,130,15, 0,20,35,114,120,35,34,40,63,58,91,46,93,91,94,46,93,42,124,41,36, -34,248,22,135,14,23,201,1,28,248,22,181,6,23,203,2,249,22,132,8,23, -204,1,8,63,23,202,1,28,248,22,130,14,23,199,2,248,22,131,14,23,199, -1,87,94,23,198,1,247,22,132,14,28,248,22,129,14,194,249,22,147,14,195, -194,192,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,130,14,23,196, -2,10,28,248,22,129,14,23,196,2,10,28,248,22,181,6,23,196,2,28,248, -22,151,14,23,196,2,10,248,22,152,14,23,196,2,11,12,252,22,163,9,2, -12,2,29,36,23,200,2,23,201,2,28,28,248,22,181,6,23,197,2,10,248, -22,170,7,23,197,2,12,252,22,163,9,2,12,2,30,37,23,200,2,23,201, -2,91,159,39,11,90,161,39,36,11,248,22,150,14,23,199,2,87,94,23,195, -1,87,94,28,192,12,250,22,164,9,2,12,2,31,23,201,2,249,22,7,194, -195,27,249,22,139,14,249,22,182,7,250,22,128,15,0,9,35,114,120,35,34, -91,46,93,34,248,22,135,14,23,203,1,6,1,1,95,28,248,22,181,6,23, -202,2,249,22,132,8,23,203,1,8,63,23,201,1,28,248,22,130,14,23,199, -2,248,22,131,14,23,199,1,87,94,23,198,1,247,22,132,14,28,248,22,129, -14,194,249,22,147,14,195,194,192,249,247,22,148,5,194,11,249,80,159,38,48, -37,9,9,249,80,159,38,48,37,195,9,27,247,22,173,14,249,80,158,39,49, -28,23,195,2,27,248,22,137,8,6,11,11,80,76,84,67,79,76,76,69,67, -84,83,28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,147,14,248, -22,169,14,69,97,100,100,111,110,45,100,105,114,247,22,135,8,6,8,8,99, +34,248,22,138,14,23,201,1,28,248,22,182,6,23,203,2,249,22,133,8,23, +204,1,8,63,23,202,1,28,248,22,133,14,23,199,2,248,22,134,14,23,199, +1,87,94,23,198,1,247,22,135,14,28,248,22,132,14,194,249,22,150,14,195, +194,192,91,159,38,11,90,161,38,36,11,87,95,28,28,248,22,133,14,23,196, +2,10,28,248,22,132,14,23,196,2,10,28,248,22,182,6,23,196,2,28,248, +22,154,14,23,196,2,10,248,22,155,14,23,196,2,11,12,252,22,164,9,2, +12,2,29,36,23,200,2,23,201,2,28,28,248,22,182,6,23,197,2,10,248, +22,171,7,23,197,2,12,252,22,164,9,2,12,2,30,37,23,200,2,23,201, +2,91,159,39,11,90,161,39,36,11,248,22,153,14,23,199,2,87,94,23,195, +1,87,94,28,192,12,250,22,165,9,2,12,2,31,23,201,2,249,22,7,194, +195,27,249,22,142,14,249,22,183,7,250,22,131,15,0,9,35,114,120,35,34, +91,46,93,34,248,22,138,14,23,203,1,6,1,1,95,28,248,22,182,6,23, +202,2,249,22,133,8,23,203,1,8,63,23,201,1,28,248,22,133,14,23,199, +2,248,22,134,14,23,199,1,87,94,23,198,1,247,22,135,14,28,248,22,132, +14,194,249,22,150,14,195,194,192,249,247,22,149,5,194,11,249,80,159,38,48, +37,9,9,249,80,159,38,48,37,195,9,27,247,22,176,14,249,80,158,39,49, +28,23,195,2,27,248,22,138,8,6,11,11,80,76,84,67,79,76,76,69,67, +84,83,28,192,192,6,0,0,6,0,0,27,28,23,196,1,250,22,150,14,248, +22,172,14,69,97,100,100,111,110,45,100,105,114,247,22,136,8,6,8,8,99, 111,108,108,101,99,116,115,11,27,248,80,159,42,54,37,250,22,86,23,203,1, -248,22,82,248,22,169,14,72,99,111,108,108,101,99,116,115,45,100,105,114,23, +248,22,82,248,22,172,14,72,99,111,108,108,101,99,116,115,45,100,105,114,23, 204,1,28,193,249,22,72,195,194,192,32,58,89,162,8,44,39,8,31,2,20, -222,33,59,27,249,22,180,14,23,197,2,23,198,2,28,23,193,2,87,94,23, -196,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,180, +222,33,59,27,249,22,183,14,23,197,2,23,198,2,28,23,193,2,87,94,23, +196,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,183, 14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23, -195,2,27,27,248,22,106,23,197,1,27,249,22,180,14,23,205,2,23,196,2, +195,2,27,27,248,22,106,23,197,1,27,249,22,183,14,23,205,2,23,196,2, 28,23,193,2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22,106, -23,197,1,27,249,22,180,14,23,209,2,23,196,2,28,23,193,2,87,94,23, -194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,180, +23,197,1,27,249,22,183,14,23,209,2,23,196,2,28,23,193,2,87,94,23, +194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,183, 14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23, 195,2,27,250,2,58,23,215,2,23,216,1,248,22,106,23,199,1,28,249,22, -178,7,23,196,2,2,32,249,22,86,23,214,2,194,249,22,72,248,22,138,14, -23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,178,7,23,196,2,2, -32,249,22,86,23,212,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249, -22,178,7,23,196,2,2,32,249,22,86,23,210,2,194,249,22,72,248,22,138, -14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249, -22,86,23,208,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178, -7,23,196,2,2,32,249,22,86,23,206,2,194,249,22,72,248,22,138,14,23, -197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249,22,86, -23,204,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178,7,23, -196,2,2,32,249,22,86,23,202,2,194,249,22,72,248,22,138,14,23,197,1, -194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249,22,86,23,200, -2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178,7,23,196,2, -2,32,249,22,86,197,194,87,94,23,196,1,249,22,72,248,22,138,14,23,197, -1,194,87,94,23,193,1,28,249,22,178,7,23,198,2,2,32,249,22,86,195, -9,87,94,23,194,1,249,22,72,248,22,138,14,23,199,1,9,87,95,28,28, -248,22,170,7,23,195,2,10,248,22,181,6,23,195,2,12,250,22,163,9,2, +179,7,23,196,2,2,32,249,22,86,23,214,2,194,249,22,72,248,22,141,14, +23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,179,7,23,196,2,2, +32,249,22,86,23,212,2,9,249,22,72,248,22,141,14,23,197,1,9,28,249, +22,179,7,23,196,2,2,32,249,22,86,23,210,2,194,249,22,72,248,22,141, +14,23,197,1,194,87,94,23,193,1,28,249,22,179,7,23,196,2,2,32,249, +22,86,23,208,2,9,249,22,72,248,22,141,14,23,197,1,9,28,249,22,179, +7,23,196,2,2,32,249,22,86,23,206,2,194,249,22,72,248,22,141,14,23, +197,1,194,87,94,23,193,1,28,249,22,179,7,23,196,2,2,32,249,22,86, +23,204,2,9,249,22,72,248,22,141,14,23,197,1,9,28,249,22,179,7,23, +196,2,2,32,249,22,86,23,202,2,194,249,22,72,248,22,141,14,23,197,1, +194,87,94,23,193,1,28,249,22,179,7,23,196,2,2,32,249,22,86,23,200, +2,9,249,22,72,248,22,141,14,23,197,1,9,28,249,22,179,7,23,196,2, +2,32,249,22,86,197,194,87,94,23,196,1,249,22,72,248,22,141,14,23,197, +1,194,87,94,23,193,1,28,249,22,179,7,23,198,2,2,32,249,22,86,195, +9,87,94,23,194,1,249,22,72,248,22,141,14,23,199,1,9,87,95,28,28, +248,22,171,7,23,195,2,10,248,22,182,6,23,195,2,12,250,22,164,9,2, 15,6,21,21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116, -114,105,110,103,23,197,2,28,28,248,22,81,23,196,2,249,22,4,22,129,14, -23,197,2,11,12,250,22,163,9,2,15,6,13,13,108,105,115,116,32,111,102, -32,112,97,116,104,115,23,198,2,27,28,248,22,181,6,23,196,2,248,22,131, -8,23,196,1,23,195,1,27,249,22,180,14,23,197,2,23,196,2,28,23,193, +114,105,110,103,23,197,2,28,28,248,22,81,23,196,2,249,22,4,22,132,14, +23,197,2,11,12,250,22,164,9,2,15,6,13,13,108,105,115,116,32,111,102, +32,112,97,116,104,115,23,198,2,27,28,248,22,182,6,23,196,2,248,22,132, +8,23,196,1,23,195,1,27,249,22,183,14,23,197,2,23,196,2,28,23,193, 2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1, -27,249,22,180,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27, -248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,180,14,23,205, +27,249,22,183,14,23,201,2,23,196,2,28,23,193,2,87,94,23,194,1,27, +248,22,97,23,195,2,27,27,248,22,106,23,197,1,27,249,22,183,14,23,205, 2,23,196,2,28,23,193,2,87,94,23,194,1,27,248,22,97,23,195,2,27, -27,248,22,106,23,197,1,27,249,22,180,14,23,209,2,23,196,2,28,23,193, +27,248,22,106,23,197,1,27,249,22,183,14,23,209,2,23,196,2,28,23,193, 2,87,94,23,194,1,27,248,22,97,23,195,2,27,27,248,22,106,23,197,1, -27,249,22,180,14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27, +27,249,22,183,14,23,213,2,23,196,2,28,23,193,2,87,94,23,194,1,27, 248,22,97,23,195,2,27,250,2,58,23,218,2,23,216,1,248,22,106,23,199, -1,28,249,22,178,7,23,196,2,2,32,249,22,86,23,217,2,194,249,22,72, -248,22,138,14,23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,178,7, -23,196,2,2,32,249,22,86,23,215,2,9,249,22,72,248,22,138,14,23,197, -1,9,28,249,22,178,7,23,196,2,2,32,249,22,86,23,213,2,194,249,22, -72,248,22,138,14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196, -2,2,32,249,22,86,23,211,2,9,249,22,72,248,22,138,14,23,197,1,9, -28,249,22,178,7,23,196,2,2,32,249,22,86,23,209,2,194,249,22,72,248, -22,138,14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2, -32,249,22,86,23,207,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249, -22,178,7,23,196,2,2,32,249,22,86,23,205,2,194,249,22,72,248,22,138, -14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32,249, -22,86,23,203,2,9,249,22,72,248,22,138,14,23,197,1,9,28,249,22,178, +1,28,249,22,179,7,23,196,2,2,32,249,22,86,23,217,2,194,249,22,72, +248,22,141,14,23,197,1,194,87,95,23,211,1,23,193,1,28,249,22,179,7, +23,196,2,2,32,249,22,86,23,215,2,9,249,22,72,248,22,141,14,23,197, +1,9,28,249,22,179,7,23,196,2,2,32,249,22,86,23,213,2,194,249,22, +72,248,22,141,14,23,197,1,194,87,94,23,193,1,28,249,22,179,7,23,196, +2,2,32,249,22,86,23,211,2,9,249,22,72,248,22,141,14,23,197,1,9, +28,249,22,179,7,23,196,2,2,32,249,22,86,23,209,2,194,249,22,72,248, +22,141,14,23,197,1,194,87,94,23,193,1,28,249,22,179,7,23,196,2,2, +32,249,22,86,23,207,2,9,249,22,72,248,22,141,14,23,197,1,9,28,249, +22,179,7,23,196,2,2,32,249,22,86,23,205,2,194,249,22,72,248,22,141, +14,23,197,1,194,87,94,23,193,1,28,249,22,179,7,23,196,2,2,32,249, +22,86,23,203,2,9,249,22,72,248,22,141,14,23,197,1,9,28,249,22,179, 7,23,196,2,2,32,249,22,86,200,194,87,94,23,199,1,249,22,72,248,22, -138,14,23,197,1,194,87,94,23,193,1,28,249,22,178,7,23,196,2,2,32, -249,22,86,198,9,87,94,23,197,1,249,22,72,248,22,138,14,23,197,1,9, +141,14,23,197,1,194,87,94,23,193,1,28,249,22,179,7,23,196,2,2,32, +249,22,86,198,9,87,94,23,197,1,249,22,72,248,22,141,14,23,197,1,9, 32,61,89,162,8,44,39,53,70,102,111,117,110,100,45,101,120,101,99,222,33, -64,32,62,89,162,8,44,40,58,64,110,101,120,116,222,33,63,27,248,22,155, -14,23,196,2,28,249,22,129,9,23,195,2,23,197,1,11,28,248,22,151,14, -23,194,2,27,249,22,147,14,23,197,1,23,196,1,28,23,197,2,91,159,39, -11,90,161,39,36,11,248,22,150,14,23,197,2,87,95,23,195,1,23,194,1, -27,28,23,202,2,27,248,22,155,14,23,199,2,28,249,22,129,9,23,195,2, -23,200,2,11,28,248,22,151,14,23,194,2,250,2,61,23,205,2,23,206,2, -249,22,147,14,23,200,2,23,198,1,250,2,61,23,205,2,23,206,2,23,196, -1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,129,14,23,196,2, -27,249,22,147,14,23,198,2,23,205,2,28,28,248,22,142,14,193,10,248,22, -141,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,203,2,11, -27,248,22,155,14,23,200,2,28,249,22,129,9,23,195,2,23,201,1,11,28, -248,22,151,14,23,194,2,250,2,61,23,206,1,23,207,1,249,22,147,14,23, +64,32,62,89,162,8,44,40,58,64,110,101,120,116,222,33,63,27,248,22,158, +14,23,196,2,28,249,22,130,9,23,195,2,23,197,1,11,28,248,22,154,14, +23,194,2,27,249,22,150,14,23,197,1,23,196,1,28,23,197,2,91,159,39, +11,90,161,39,36,11,248,22,153,14,23,197,2,87,95,23,195,1,23,194,1, +27,28,23,202,2,27,248,22,158,14,23,199,2,28,249,22,130,9,23,195,2, +23,200,2,11,28,248,22,154,14,23,194,2,250,2,61,23,205,2,23,206,2, +249,22,150,14,23,200,2,23,198,1,250,2,61,23,205,2,23,206,2,23,196, +1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,132,14,23,196,2, +27,249,22,150,14,23,198,2,23,205,2,28,28,248,22,145,14,193,10,248,22, +144,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23,203,2,11, +27,248,22,158,14,23,200,2,28,249,22,130,9,23,195,2,23,201,1,11,28, +248,22,154,14,23,194,2,250,2,61,23,206,1,23,207,1,249,22,150,14,23, 201,1,23,198,1,250,2,61,205,206,195,192,87,94,23,194,1,28,23,196,2, -91,159,39,11,90,161,39,36,11,248,22,150,14,23,197,2,87,95,23,195,1, -23,194,1,27,28,23,201,2,27,248,22,155,14,23,199,2,28,249,22,129,9, -23,195,2,23,200,2,11,28,248,22,151,14,23,194,2,250,2,61,23,204,2, -23,205,2,249,22,147,14,23,200,2,23,198,1,250,2,61,23,204,2,23,205, -2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,129,14, -23,196,2,27,249,22,147,14,23,198,2,23,204,2,28,28,248,22,142,14,193, -10,248,22,141,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23, -202,2,11,27,248,22,155,14,23,200,2,28,249,22,129,9,23,195,2,23,201, -1,11,28,248,22,151,14,23,194,2,250,2,61,23,205,1,23,206,1,249,22, -147,14,23,201,1,23,198,1,250,2,61,204,205,195,192,28,23,193,2,91,159, -39,11,90,161,39,36,11,248,22,150,14,23,199,2,87,95,23,195,1,23,194, +91,159,39,11,90,161,39,36,11,248,22,153,14,23,197,2,87,95,23,195,1, +23,194,1,27,28,23,201,2,27,248,22,158,14,23,199,2,28,249,22,130,9, +23,195,2,23,200,2,11,28,248,22,154,14,23,194,2,250,2,61,23,204,2, +23,205,2,249,22,150,14,23,200,2,23,198,1,250,2,61,23,204,2,23,205, +2,23,196,1,11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,132,14, +23,196,2,27,249,22,150,14,23,198,2,23,204,2,28,28,248,22,145,14,193, +10,248,22,144,14,193,192,11,11,28,23,193,2,192,87,94,23,193,1,28,23, +202,2,11,27,248,22,158,14,23,200,2,28,249,22,130,9,23,195,2,23,201, +1,11,28,248,22,154,14,23,194,2,250,2,61,23,205,1,23,206,1,249,22, +150,14,23,201,1,23,198,1,250,2,61,204,205,195,192,28,23,193,2,91,159, +39,11,90,161,39,36,11,248,22,153,14,23,199,2,87,95,23,195,1,23,194, 1,27,28,23,198,2,251,2,62,23,198,2,23,203,2,23,201,2,23,202,2, -11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,129,14,195,27,249,22, -147,14,197,200,28,28,248,22,142,14,193,10,248,22,141,14,193,192,11,11,28, +11,28,23,193,2,192,87,94,23,193,1,27,28,248,22,132,14,195,27,249,22, +150,14,197,200,28,28,248,22,145,14,193,10,248,22,144,14,193,192,11,11,28, 192,192,28,198,11,251,2,62,198,203,201,202,194,32,65,89,162,8,44,40,8, -31,2,20,222,33,66,28,248,22,80,23,197,2,11,27,248,22,154,14,248,22, -73,23,199,2,27,249,22,147,14,23,196,1,23,197,2,28,248,22,141,14,23, +31,2,20,222,33,66,28,248,22,80,23,197,2,11,27,248,22,157,14,248,22, +73,23,199,2,27,249,22,150,14,23,196,1,23,197,2,28,248,22,144,14,23, 194,2,250,2,61,198,199,195,87,94,23,193,1,27,248,22,74,23,200,1,28, -248,22,80,23,194,2,11,27,248,22,154,14,248,22,73,23,196,2,27,249,22, -147,14,23,196,1,23,200,2,28,248,22,141,14,23,194,2,250,2,61,201,202, +248,22,80,23,194,2,11,27,248,22,157,14,248,22,73,23,196,2,27,249,22, +150,14,23,196,1,23,200,2,28,248,22,144,14,23,194,2,250,2,61,201,202, 195,87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80,23,194,2,11, -27,248,22,154,14,248,22,73,23,196,2,27,249,22,147,14,23,196,1,23,203, -2,28,248,22,141,14,23,194,2,250,2,61,204,205,195,87,94,23,193,1,27, -248,22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,154,14,248,22, -73,23,196,2,27,249,22,147,14,23,196,1,23,206,2,28,248,22,141,14,23, +27,248,22,157,14,248,22,73,23,196,2,27,249,22,150,14,23,196,1,23,203, +2,28,248,22,144,14,23,194,2,250,2,61,204,205,195,87,94,23,193,1,27, +248,22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,157,14,248,22, +73,23,196,2,27,249,22,150,14,23,196,1,23,206,2,28,248,22,144,14,23, 194,2,250,2,61,23,15,23,16,195,87,94,23,193,1,27,248,22,74,23,197, -1,28,248,22,80,23,194,2,11,27,248,22,154,14,248,22,73,23,196,2,27, -249,22,147,14,23,196,1,23,209,2,28,248,22,141,14,23,194,2,250,2,61, +1,28,248,22,80,23,194,2,11,27,248,22,157,14,248,22,73,23,196,2,27, +249,22,150,14,23,196,1,23,209,2,28,248,22,144,14,23,194,2,250,2,61, 23,18,23,19,195,87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80, -23,194,2,11,27,248,22,154,14,248,22,73,195,27,249,22,147,14,23,196,1, -23,19,28,248,22,141,14,193,250,2,61,23,21,23,22,195,251,2,65,23,21, -23,22,23,23,248,22,74,199,87,95,28,28,248,22,129,14,23,195,2,10,28, -248,22,181,6,23,195,2,28,248,22,151,14,23,195,2,10,248,22,152,14,23, -195,2,11,12,250,22,163,9,2,16,6,25,25,112,97,116,104,32,111,114,32, +23,194,2,11,27,248,22,157,14,248,22,73,195,27,249,22,150,14,23,196,1, +23,19,28,248,22,144,14,193,250,2,61,23,21,23,22,195,251,2,65,23,21, +23,22,23,23,248,22,74,199,87,95,28,28,248,22,132,14,23,195,2,10,28, +248,22,182,6,23,195,2,28,248,22,154,14,23,195,2,10,248,22,155,14,23, +195,2,11,12,250,22,164,9,2,16,6,25,25,112,97,116,104,32,111,114,32, 115,116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28, -28,23,195,2,28,28,248,22,129,14,23,196,2,10,28,248,22,181,6,23,196, -2,28,248,22,151,14,23,196,2,10,248,22,152,14,23,196,2,11,248,22,151, -14,23,196,2,11,10,12,250,22,163,9,2,16,6,29,29,35,102,32,111,114, +28,23,195,2,28,28,248,22,132,14,23,196,2,10,28,248,22,182,6,23,196, +2,28,248,22,154,14,23,196,2,10,248,22,155,14,23,196,2,11,248,22,154, +14,23,196,2,11,10,12,250,22,164,9,2,16,6,29,29,35,102,32,111,114, 32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114, -105,110,103,23,198,2,28,28,248,22,151,14,23,195,2,91,159,39,11,90,161, -39,36,11,248,22,150,14,23,198,2,249,22,191,8,194,68,114,101,108,97,116, -105,118,101,11,27,248,22,137,8,6,4,4,80,65,84,72,27,28,23,194,2, -27,249,80,159,41,49,38,23,197,1,9,28,249,22,191,8,247,22,139,8,2, -22,249,22,72,248,22,138,14,5,1,46,194,192,87,94,23,194,1,9,28,248, -22,80,23,194,2,11,27,248,22,154,14,248,22,73,23,196,2,27,249,22,147, -14,23,196,1,23,200,2,28,248,22,141,14,23,194,2,250,2,61,201,202,195, +105,110,103,23,198,2,28,28,248,22,154,14,23,195,2,91,159,39,11,90,161, +39,36,11,248,22,153,14,23,198,2,249,22,128,9,194,68,114,101,108,97,116, +105,118,101,11,27,248,22,138,8,6,4,4,80,65,84,72,27,28,23,194,2, +27,249,80,159,41,49,38,23,197,1,9,28,249,22,128,9,247,22,140,8,2, +22,249,22,72,248,22,141,14,5,1,46,194,192,87,94,23,194,1,9,28,248, +22,80,23,194,2,11,27,248,22,157,14,248,22,73,23,196,2,27,249,22,150, +14,23,196,1,23,200,2,28,248,22,144,14,23,194,2,250,2,61,201,202,195, 87,94,23,193,1,27,248,22,74,23,197,1,28,248,22,80,23,194,2,11,27, -248,22,154,14,248,22,73,23,196,2,27,249,22,147,14,23,196,1,23,203,2, -28,248,22,141,14,23,194,2,250,2,61,204,205,195,87,94,23,193,1,27,248, -22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,154,14,248,22,73, -195,27,249,22,147,14,23,196,1,205,28,248,22,141,14,193,250,2,61,23,15, -23,16,195,251,2,65,23,15,23,16,23,17,248,22,74,199,27,248,22,154,14, -23,196,1,28,248,22,141,14,193,250,2,61,198,199,195,11,250,80,159,39,50, -37,196,197,11,250,80,159,39,50,37,196,11,11,87,94,249,22,172,6,247,22, -144,5,195,248,22,134,6,249,22,187,3,36,249,22,171,3,197,198,27,28,23, +248,22,157,14,248,22,73,23,196,2,27,249,22,150,14,23,196,1,23,203,2, +28,248,22,144,14,23,194,2,250,2,61,204,205,195,87,94,23,193,1,27,248, +22,74,23,197,1,28,248,22,80,23,194,2,11,27,248,22,157,14,248,22,73, +195,27,249,22,150,14,23,196,1,205,28,248,22,144,14,193,250,2,61,23,15, +23,16,195,251,2,65,23,15,23,16,23,17,248,22,74,199,27,248,22,157,14, +23,196,1,28,248,22,144,14,193,250,2,61,198,199,195,11,250,80,159,39,50, +37,196,197,11,250,80,159,39,50,37,196,11,11,87,94,249,22,173,6,247,22, +145,5,195,248,22,135,6,249,22,188,3,36,249,22,172,3,197,198,27,28,23, 197,2,87,95,23,196,1,23,195,1,23,197,1,87,94,23,197,1,27,248,22, -169,14,2,21,27,249,80,159,41,50,37,23,196,1,11,27,248,22,190,3,23, -199,1,27,28,23,194,2,23,194,1,87,94,23,194,1,36,27,248,22,190,3, -23,202,1,27,28,23,194,2,23,194,1,87,94,23,194,1,36,249,22,175,5, +172,14,2,21,27,249,80,159,41,50,37,23,196,1,11,27,248,22,191,3,23, +199,1,27,28,23,194,2,23,194,1,87,94,23,194,1,36,27,248,22,191,3, +23,202,1,27,28,23,194,2,23,194,1,87,94,23,194,1,36,249,22,176,5, 23,199,1,83,158,40,20,100,95,89,162,8,44,36,48,9,224,4,2,33,70, -23,195,1,23,197,1,27,248,22,160,5,23,195,1,248,80,159,39,55,37,193, +23,195,1,23,197,1,27,248,22,161,5,23,195,1,248,80,159,39,55,37,193, 159,36,20,105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1, 29,11,11,11,11,11,10,43,80,158,36,36,20,105,159,38,16,18,2,2,2, 3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13, @@ -488,7 +488,7 @@ 2,89,162,8,44,37,51,2,20,223,0,33,33,80,159,36,55,37,83,158,36, 16,2,89,162,8,44,37,56,2,20,223,0,33,34,80,159,36,54,37,83,158, 36,16,2,32,0,89,162,44,37,45,2,2,222,33,35,80,159,36,36,37,83, -158,36,16,2,249,22,183,6,7,92,7,92,80,159,36,37,37,83,158,36,16, +158,36,16,2,249,22,184,6,7,92,7,92,80,159,36,37,37,83,158,36,16, 2,89,162,44,37,54,2,4,223,0,33,36,80,159,36,38,37,83,158,36,16, 2,32,0,89,162,8,44,38,50,2,5,222,33,37,80,159,36,39,37,83,158, 36,16,2,32,0,89,162,8,44,39,51,2,6,222,33,39,80,159,36,40,37, @@ -502,8 +502,8 @@ 222,33,54,80,159,36,47,37,83,158,36,16,2,83,158,39,20,99,96,2,14, 89,162,44,36,44,9,223,0,33,55,89,162,44,37,45,9,223,0,33,56,89, 162,44,38,55,9,223,0,33,57,80,159,36,48,37,83,158,36,16,2,27,248, -22,176,14,248,22,131,8,27,28,249,22,191,8,247,22,139,8,2,22,6,1, -1,59,6,1,1,58,250,22,165,7,6,14,14,40,91,94,126,97,93,42,41, +22,179,14,248,22,132,8,27,28,249,22,128,9,247,22,140,8,2,22,6,1, +1,59,6,1,1,58,250,22,166,7,6,14,14,40,91,94,126,97,93,42,41, 126,97,40,46,42,41,23,196,2,23,196,1,89,162,8,44,38,8,32,2,15, 223,0,33,60,80,159,36,49,37,83,158,36,16,2,83,158,39,20,99,96,2, 16,89,162,8,44,39,8,24,9,223,0,33,67,89,162,44,38,47,9,223,0, @@ -514,7 +514,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 8641); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,55,9,0,0,0,1,0,0,10,0,16,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,56,9,0,0,0,1,0,0,10,0,16,0, 29,0,44,0,58,0,72,0,86,0,128,0,0,0,57,1,0,0,69,35,37, 98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67,35,37,117, 116,105,108,115,11,29,94,2,2,69,35,37,110,101,116,119,111,114,107,11,29, @@ -534,7 +534,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 352); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,55,74,0,0,0,1,0,0,7,0,18,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,48,46,49,46,56,74,0,0,0,1,0,0,7,0,18,0, 45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,162,0,180,0,200, 0,212,0,228,0,251,0,7,1,38,1,45,1,50,1,55,1,60,1,65,1, 70,1,79,1,84,1,88,1,94,1,101,1,107,1,115,1,124,1,145,1,166, @@ -560,98 +560,98 @@ 109,101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101, 64,108,111,111,112,63,108,105,98,6,3,3,46,115,115,6,4,4,46,114,107, 116,5,4,46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,159, -38,46,38,250,22,147,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, -1,2,23,250,22,147,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, -1,2,24,252,22,147,14,23,199,1,23,201,1,2,25,247,22,140,8,249,80, -159,45,39,38,23,200,1,80,159,45,36,38,252,22,147,14,23,199,1,23,201, -1,2,25,247,22,140,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38, -27,252,22,147,14,23,200,1,23,202,1,2,25,247,22,140,8,249,80,159,46, -39,38,23,201,1,80,159,46,36,38,27,250,22,164,14,196,11,32,0,89,162, -8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,252,22,147,14,23, -200,1,23,202,1,2,25,247,22,140,8,249,80,159,46,39,38,23,201,1,80, -159,46,36,38,27,250,22,164,14,196,11,32,0,89,162,8,44,36,41,9,222, -11,28,192,249,22,72,195,194,11,27,250,22,147,14,23,198,1,23,200,1,249, -80,159,44,39,38,23,199,1,2,23,27,250,22,164,14,196,11,32,0,89,162, -8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,250,22,147,14,23, -198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,164,14, +38,46,38,250,22,150,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,23,250,22,150,14,23,197,1,23,199,1,249,80,159,43,39,38,23,198, +1,2,24,252,22,150,14,23,199,1,23,201,1,2,25,247,22,141,8,249,80, +159,45,39,38,23,200,1,80,159,45,36,38,252,22,150,14,23,199,1,23,201, +1,2,25,247,22,141,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38, +27,252,22,150,14,23,200,1,23,202,1,2,25,247,22,141,8,249,80,159,46, +39,38,23,201,1,80,159,46,36,38,27,250,22,167,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,252,22,150,14,23, +200,1,23,202,1,2,25,247,22,141,8,249,80,159,46,39,38,23,201,1,80, +159,46,36,38,27,250,22,167,14,196,11,32,0,89,162,8,44,36,41,9,222, +11,28,192,249,22,72,195,194,11,27,250,22,150,14,23,198,1,23,200,1,249, +80,159,44,39,38,23,199,1,2,23,27,250,22,167,14,196,11,32,0,89,162, +8,44,36,41,9,222,11,28,192,249,22,72,195,194,11,27,250,22,150,14,23, +198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,24,27,250,22,167,14, 196,11,32,0,89,162,8,44,36,41,9,222,11,28,192,249,22,72,195,194,11, -87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,163,9,77,108,111,97, +87,94,28,248,80,159,37,38,38,23,195,2,12,250,22,164,9,77,108,111,97, 100,47,117,115,101,45,99,111,109,112,105,108,101,100,6,25,25,112,97,116,104, 32,111,114,32,118,97,108,105,100,45,112,97,116,104,32,115,116,114,105,110,103, -23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,153,14,23,205,2,23, -204,2,27,247,22,149,5,28,23,193,2,249,22,154,14,23,207,2,23,195,1, -23,205,2,90,161,39,37,11,248,22,150,14,23,205,1,87,94,23,196,1,90, -161,38,40,11,28,23,205,2,27,248,22,134,14,23,197,2,27,248,22,175,7, -23,195,2,28,28,249,22,183,3,23,195,2,40,249,22,178,7,5,4,46,114, -107,116,249,22,181,7,23,198,2,249,22,171,3,23,199,2,40,11,249,22,7, -23,199,2,248,22,138,14,249,22,182,7,250,22,181,7,23,202,1,36,249,22, -171,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22,7, -23,197,2,11,90,161,37,42,11,28,249,22,191,8,23,199,2,23,197,2,23, -193,2,249,22,147,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,2, -28,249,22,191,8,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,22, -147,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,249, -22,191,8,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2, -22,23,194,1,90,161,37,45,11,247,22,172,14,27,250,22,164,14,23,203,2, +23,197,2,91,159,46,11,90,161,37,36,11,28,248,22,156,14,23,205,2,23, +204,2,27,247,22,150,5,28,23,193,2,249,22,157,14,23,207,2,23,195,1, +23,205,2,90,161,39,37,11,248,22,153,14,23,205,1,87,94,23,196,1,90, +161,38,40,11,28,23,205,2,27,248,22,137,14,23,197,2,27,248,22,176,7, +23,195,2,28,28,249,22,184,3,23,195,2,40,249,22,179,7,5,4,46,114, +107,116,249,22,182,7,23,198,2,249,22,172,3,23,199,2,40,11,249,22,7, +23,199,2,248,22,141,14,249,22,183,7,250,22,182,7,23,202,1,36,249,22, +172,3,23,203,1,40,5,3,46,115,115,249,22,7,23,199,2,11,249,22,7, +23,197,2,11,90,161,37,42,11,28,249,22,128,9,23,199,2,23,197,2,23, +193,2,249,22,150,14,23,196,2,23,199,2,90,161,37,43,11,28,23,198,2, +28,249,22,128,9,23,200,2,23,197,1,23,193,1,87,94,23,193,1,249,22, +150,14,23,196,2,23,200,2,87,94,23,195,1,11,90,161,37,44,11,28,249, +22,128,9,23,196,2,68,114,101,108,97,116,105,118,101,87,94,23,194,1,2, +22,23,194,1,90,161,37,45,11,247,22,175,14,27,250,22,167,14,23,203,2, 11,32,0,89,162,8,44,36,41,9,222,11,27,28,23,194,2,249,22,72,23, 203,2,23,196,1,87,94,23,194,1,11,27,28,23,203,2,28,23,194,2,11, -27,250,22,164,14,23,207,2,11,32,0,89,162,8,44,36,41,9,222,11,28, +27,250,22,167,14,23,207,2,11,32,0,89,162,8,44,36,41,9,222,11,28, 192,249,22,72,23,206,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2, 27,89,162,44,37,50,62,122,111,225,15,13,9,33,33,27,89,162,44,37,50, 66,97,108,116,45,122,111,225,16,14,11,33,34,27,89,162,44,37,52,9,225, 17,15,11,33,35,27,89,162,44,37,52,9,225,18,16,13,33,36,27,28,23, -200,2,23,200,2,248,22,189,8,23,200,2,27,28,23,208,2,28,23,200,2, -87,94,23,201,1,23,200,2,248,22,189,8,23,202,1,11,27,28,23,195,2, +200,2,23,200,2,248,22,190,8,23,200,2,27,28,23,208,2,28,23,200,2, +87,94,23,201,1,23,200,2,248,22,190,8,23,202,1,11,27,28,23,195,2, 28,23,197,1,27,249,22,5,89,162,8,44,37,53,9,225,24,22,18,33,37, 23,216,2,27,28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249, -22,183,3,248,22,74,196,248,22,74,23,205,2,193,11,11,11,11,87,94,23, +22,184,3,248,22,74,196,248,22,74,23,205,2,193,11,11,11,11,87,94,23, 197,1,11,28,23,193,2,87,105,23,213,1,23,211,1,23,210,1,23,209,1, 23,208,1,23,201,1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1, 23,194,1,20,14,159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27, -11,80,159,8,26,40,38,22,171,4,11,20,14,159,80,159,57,40,38,250,80, -159,8,24,41,38,249,22,27,11,80,159,8,26,40,38,22,149,5,28,248,22, -129,14,23,216,2,23,215,1,87,94,23,215,1,247,22,170,14,249,247,22,175, +11,80,159,8,26,40,38,22,172,4,11,20,14,159,80,159,57,40,38,250,80, +159,8,24,41,38,249,22,27,11,80,159,8,26,40,38,22,150,5,28,248,22, +132,14,23,216,2,23,215,1,87,94,23,215,1,247,22,173,14,249,247,22,178, 14,248,22,73,195,23,25,87,94,23,193,1,27,28,23,195,2,28,23,197,1, 27,249,22,5,89,162,8,44,37,53,9,225,25,23,20,33,38,23,217,2,27, -28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,183,3,248,22,74, +28,23,204,2,11,193,28,192,192,28,193,28,203,28,249,22,184,3,248,22,74, 196,248,22,74,206,193,11,11,11,11,87,94,23,197,1,11,28,23,193,2,87, 102,23,214,1,23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199, 1,23,196,1,23,195,1,20,14,159,80,159,58,40,38,250,80,159,8,25,41, -38,249,22,27,11,80,159,8,27,40,38,22,171,4,23,215,1,20,14,159,80, +38,249,22,27,11,80,159,8,27,40,38,22,172,4,23,215,1,20,14,159,80, 159,58,40,38,250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38, -22,149,5,28,248,22,129,14,23,217,2,23,216,1,87,94,23,216,1,247,22, -170,14,249,247,22,175,14,248,22,73,195,23,26,87,94,23,193,1,27,28,23, +22,150,5,28,248,22,132,14,23,217,2,23,216,1,87,94,23,216,1,247,22, +173,14,249,247,22,178,14,248,22,73,195,23,26,87,94,23,193,1,27,28,23, 197,2,28,23,201,1,27,249,22,5,83,158,40,20,100,94,89,162,8,44,37, 51,9,225,26,24,20,33,39,23,213,1,23,218,2,27,28,23,204,2,11,193, -28,192,192,28,193,28,23,204,2,28,249,22,183,3,248,22,74,196,248,22,74, +28,192,192,28,193,28,23,204,2,28,249,22,184,3,248,22,74,196,248,22,74, 23,207,2,193,11,11,11,87,94,23,210,1,11,87,94,23,201,1,11,28,23, 193,2,87,101,23,215,1,23,213,1,23,212,1,23,211,1,23,202,1,23,200, 1,23,197,1,23,196,1,20,14,159,80,159,59,40,38,250,80,159,8,26,41, -38,249,22,27,11,80,159,8,28,40,38,22,171,4,11,20,14,159,80,159,59, -40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40,38,22,149, -5,28,248,22,129,14,23,218,2,23,217,1,87,94,23,217,1,247,22,170,14, -249,247,22,147,5,248,22,73,195,23,27,87,94,23,193,1,27,28,23,197,1, +38,249,22,27,11,80,159,8,28,40,38,22,172,4,11,20,14,159,80,159,59, +40,38,250,80,159,8,26,41,38,249,22,27,11,80,159,8,28,40,38,22,150, +5,28,248,22,132,14,23,218,2,23,217,1,87,94,23,217,1,247,22,173,14, +249,247,22,148,5,248,22,73,195,23,27,87,94,23,193,1,27,28,23,197,1, 28,23,201,1,27,249,22,5,83,158,40,20,100,94,89,162,8,44,37,51,9, 225,27,25,22,33,40,23,215,1,23,219,1,27,28,23,205,2,11,193,28,192, -192,28,193,28,204,28,249,22,183,3,248,22,74,196,248,22,74,23,15,193,11, +192,28,193,28,204,28,249,22,184,3,248,22,74,196,248,22,74,23,15,193,11, 11,11,87,95,23,216,1,23,212,1,11,87,94,23,201,1,11,28,23,193,2, 87,95,23,213,1,23,198,1,20,14,159,80,159,8,24,40,38,250,80,159,8, -27,41,38,249,22,27,11,80,159,8,29,40,38,22,171,4,23,217,1,20,14, +27,41,38,249,22,27,11,80,159,8,29,40,38,22,172,4,23,217,1,20,14, 159,80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80,159,8, -29,40,38,22,149,5,28,248,22,129,14,23,219,2,23,218,1,87,94,23,218, -1,247,22,170,14,249,247,22,147,5,248,22,73,195,23,28,87,94,23,193,1, +29,40,38,22,150,5,28,248,22,132,14,23,219,2,23,218,1,87,94,23,218, +1,247,22,173,14,249,247,22,148,5,248,22,73,195,23,28,87,94,23,193,1, 27,28,23,199,2,87,94,23,215,1,23,214,1,87,94,23,214,1,23,215,1, 20,14,159,80,159,8,25,40,38,250,80,159,8,28,41,38,249,22,27,11,80, -159,8,30,40,38,22,171,4,28,23,30,28,23,202,1,11,195,87,94,23,202, +159,8,30,40,38,22,172,4,28,23,30,28,23,202,1,11,195,87,94,23,202, 1,11,20,14,159,80,159,8,25,40,38,250,80,159,8,28,41,38,249,22,27, -11,80,159,8,30,40,38,22,149,5,28,248,22,129,14,23,220,2,23,219,1, -87,94,23,219,1,247,22,170,14,249,247,22,147,5,194,23,29,0,17,35,114, +11,80,159,8,30,40,38,22,150,5,28,248,22,132,14,23,220,2,23,219,1, +87,94,23,219,1,247,22,173,14,249,247,22,148,5,194,23,29,0,17,35,114, 120,34,94,40,46,42,63,41,47,40,46,42,41,36,34,32,43,89,162,8,44, -37,59,2,26,222,33,44,27,249,22,180,14,2,42,23,196,2,28,23,193,2, +37,59,2,26,222,33,44,27,249,22,183,14,2,42,23,196,2,28,23,193,2, 87,94,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1, -27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, -72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42, +27,249,22,183,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, +72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,183,14,2,42, 23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2, -27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193,2, +27,248,22,106,23,197,1,27,249,22,183,14,2,42,23,196,2,28,23,193,2, 87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2,43,248,22,106,23, 197,1,248,22,82,194,248,22,82,194,248,22,82,194,248,22,82,194,32,45,89, 162,44,37,8,40,2,26,222,33,46,28,248,22,80,248,22,74,23,195,2,249, @@ -675,12 +675,12 @@ 196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248, 22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249, 22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249, -22,7,249,22,72,248,22,73,200,196,195,27,27,249,22,180,14,2,42,23,197, +22,7,249,22,72,248,22,73,200,196,195,27,27,249,22,183,14,2,42,23,197, 2,28,23,193,2,87,94,23,195,1,249,22,72,248,22,97,23,196,2,27,248, -22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94, +22,106,23,197,1,27,249,22,183,14,2,42,23,196,2,28,23,193,2,87,94, 23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249, -22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248, -22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196, +22,183,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248, +22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,183,14,2,42,23,196, 2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2, 43,248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,248,22, 82,195,28,23,195,1,192,28,248,22,80,248,22,74,23,195,2,249,22,7,9, @@ -704,14 +704,14 @@ 22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22,72,248,22,73,202, 196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249,22,72,248, 22,73,202,196,195,249,22,7,249,22,72,248,22,73,202,196,195,249,22,7,249, -22,72,248,22,73,200,196,195,87,95,28,248,22,189,4,195,12,250,22,163,9, +22,72,248,22,73,200,196,195,87,95,28,248,22,190,4,195,12,250,22,164,9, 2,18,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45, 112,97,116,104,197,28,24,193,2,248,24,194,1,195,87,94,23,193,1,12,27, -250,22,152,2,80,159,41,43,38,248,22,141,15,247,22,173,12,11,27,28,23, +250,22,152,2,80,159,41,43,38,248,22,144,15,247,22,174,12,11,27,28,23, 194,2,193,87,94,23,194,1,27,247,22,132,2,87,94,250,22,150,2,80,159, -43,43,38,248,22,141,15,247,22,173,12,195,192,250,22,150,2,195,199,66,97, -116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,162,9,11,196,195,248, -22,160,9,194,32,51,89,162,44,37,8,34,2,26,222,33,52,28,248,22,80, +43,43,38,248,22,144,15,247,22,174,12,195,192,250,22,150,2,195,199,66,97, +116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,163,9,11,196,195,248, +22,161,9,194,32,51,89,162,44,37,8,34,2,26,222,33,52,28,248,22,80, 248,22,74,23,195,2,249,22,7,9,248,22,73,195,27,248,22,74,194,91,159, 38,11,90,161,38,36,11,28,248,22,80,248,22,74,23,197,2,249,22,7,9, 248,22,73,197,91,159,38,11,90,161,38,36,11,27,248,22,74,198,28,248,22, @@ -729,10 +729,10 @@ 22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249, 22,7,249,22,72,248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201, 196,195,249,22,7,249,22,72,248,22,73,200,196,195,32,53,89,162,8,44,37, -55,2,26,222,33,54,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87, +55,2,26,222,33,54,27,249,22,183,14,2,42,23,196,2,28,23,193,2,87, 94,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27, -249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72, -248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23, +249,22,183,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72, +248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,183,14,2,42,23, 196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,248, 2,53,248,22,106,23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,32, 55,89,162,44,37,8,34,2,26,222,33,56,28,248,22,80,248,22,74,23,195, @@ -753,13 +753,13 @@ 200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72, 248,22,73,200,196,195,249,22,7,249,22,72,248,22,73,201,196,195,249,22,7, 249,22,72,248,22,73,200,196,195,32,57,89,162,8,44,37,55,2,26,222,33, -58,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, -22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2, +58,27,249,22,183,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, +22,72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,183,14,2, 42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196, -2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193, +2,27,248,22,106,23,197,1,27,249,22,183,14,2,42,23,196,2,28,23,193, 2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2,57,248,22,106, -23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,28,249,22,187,6,194, -6,1,1,46,2,22,28,249,22,187,6,194,6,2,2,46,46,62,117,112,192, +23,197,1,248,22,82,194,248,22,82,194,248,22,82,194,28,249,22,188,6,194, +6,1,1,46,2,22,28,249,22,188,6,194,6,2,2,46,46,62,117,112,192, 0,11,35,114,120,34,91,46,93,115,115,36,34,32,61,89,162,44,37,8,34, 2,26,222,33,62,28,248,22,80,248,22,74,23,195,2,249,22,7,9,248,22, 73,195,27,248,22,74,194,91,159,38,11,90,161,38,36,11,28,248,22,80,248, @@ -778,129 +778,129 @@ 22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249,22,7,249, 22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200,196,195,249, 22,7,249,22,72,248,22,73,201,196,195,249,22,7,249,22,72,248,22,73,200, -196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,22,180,14,2, +196,195,32,63,89,162,8,44,37,55,2,26,222,33,64,27,249,22,183,14,2, 42,23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196, -2,27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193, +2,27,248,22,106,23,197,1,27,249,22,183,14,2,42,23,196,2,28,23,193, 2,87,94,23,194,1,249,22,72,248,22,97,23,196,2,27,248,22,106,23,197, -1,27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, +1,27,249,22,183,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249, 22,72,248,22,97,23,196,2,248,2,63,248,22,106,23,197,1,248,22,82,194, 248,22,82,194,248,22,82,194,32,65,89,162,8,44,37,55,2,26,222,33,66, -27,249,22,180,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, -72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,180,14,2,42, +27,249,22,183,14,2,42,23,196,2,28,23,193,2,87,94,23,194,1,249,22, +72,248,22,97,23,196,2,27,248,22,106,23,197,1,27,249,22,183,14,2,42, 23,196,2,28,23,193,2,87,94,23,194,1,249,22,72,248,22,97,23,196,2, -27,248,22,106,23,197,1,27,249,22,180,14,2,42,23,196,2,28,23,193,2, +27,248,22,106,23,197,1,27,249,22,183,14,2,42,23,196,2,28,23,193,2, 87,94,23,194,1,249,22,72,248,22,97,23,196,2,248,2,65,248,22,106,23, 197,1,248,22,82,194,248,22,82,194,248,22,82,194,27,248,2,65,23,195,1, -192,28,249,22,129,9,248,22,74,23,200,2,23,197,1,28,249,22,191,8,248, -22,73,23,200,2,23,196,1,251,22,160,9,2,18,6,28,28,99,121,99,108, +192,28,249,22,130,9,248,22,74,23,200,2,23,197,1,28,249,22,128,9,248, +22,73,23,200,2,23,196,1,251,22,161,9,2,18,6,28,28,99,121,99,108, 101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,46,115,58,32, 126,46,115,23,200,1,249,22,2,22,74,248,22,87,249,22,72,23,206,1,23, -202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,72,248,22,141,15, -247,22,173,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41,38, -249,22,27,11,80,159,45,40,38,22,170,4,23,196,1,249,247,22,148,5,23, -198,1,248,22,60,248,22,133,14,23,198,1,87,94,28,28,248,22,129,14,23, -196,2,10,248,22,133,5,23,196,2,12,28,23,197,2,250,22,162,9,11,6, +202,1,12,12,247,192,20,14,159,80,159,40,45,38,249,22,72,248,22,144,15, +247,22,174,12,23,197,1,20,14,159,80,159,40,40,38,250,80,159,43,41,38, +249,22,27,11,80,159,45,40,38,22,171,4,23,196,1,249,247,22,149,5,23, +198,1,248,22,60,248,22,136,14,23,198,1,87,94,28,28,248,22,132,14,23, +196,2,10,248,22,134,5,23,196,2,12,28,23,197,2,250,22,163,9,11,6, 15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250, -22,163,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111, -114,32,112,97,116,104,23,198,2,28,28,248,22,70,23,196,2,249,22,191,8, -248,22,73,23,198,2,2,4,11,248,22,190,4,248,22,97,196,28,28,248,22, -70,23,196,2,249,22,191,8,248,22,73,23,198,2,66,112,108,97,110,101,116, +22,164,9,2,18,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111, +114,32,112,97,116,104,23,198,2,28,28,248,22,70,23,196,2,249,22,128,9, +248,22,73,23,198,2,2,4,11,248,22,191,4,248,22,97,196,28,28,248,22, +70,23,196,2,249,22,128,9,248,22,73,23,198,2,66,112,108,97,110,101,116, 11,87,94,28,207,12,20,14,159,80,159,37,52,38,80,158,37,50,90,161,37, -36,10,249,22,172,4,21,94,2,27,6,19,19,112,108,97,110,101,116,47,114, +36,10,249,22,173,4,21,94,2,27,6,19,19,112,108,97,110,101,116,47,114, 101,115,111,108,118,101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,109, 111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,252, 212,199,200,201,202,80,158,42,50,87,94,23,193,1,27,89,162,8,44,37,46, 79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,223, 5,33,50,27,28,248,22,57,23,198,2,27,250,22,152,2,80,159,43,44,38, -249,22,72,23,203,2,247,22,171,14,11,28,23,193,2,192,87,94,23,193,1, +249,22,72,23,203,2,247,22,174,14,11,28,23,193,2,192,87,94,23,193,1, 91,159,38,11,90,161,38,36,11,27,248,22,63,23,202,2,248,2,51,248,2, 53,23,195,1,27,28,248,22,80,23,195,2,6,8,8,109,97,105,110,46,114, -107,116,249,22,140,7,23,197,2,6,4,4,46,114,107,116,27,252,80,159,49, +107,116,249,22,141,7,23,197,2,6,4,4,46,114,107,116,27,252,80,159,49, 54,38,2,18,23,204,1,28,248,22,80,23,201,2,23,201,1,87,94,23,201, 1,248,22,73,23,201,2,28,248,22,80,23,201,2,87,94,23,200,1,9,248, -22,74,23,201,1,23,199,2,249,22,147,14,23,195,1,23,196,1,28,248,22, -181,6,23,198,2,87,94,23,194,1,27,28,23,199,2,28,249,22,191,8,23, -201,2,80,158,42,47,80,158,40,48,27,248,22,191,4,23,201,2,28,248,22, -129,14,23,194,2,91,159,39,11,90,161,39,36,11,248,22,150,14,23,197,1, +22,74,23,201,1,23,199,2,249,22,150,14,23,195,1,23,196,1,28,248,22, +182,6,23,198,2,87,94,23,194,1,27,28,23,199,2,28,249,22,128,9,23, +201,2,80,158,42,47,80,158,40,48,27,248,22,128,5,23,201,2,28,248,22, +132,14,23,194,2,91,159,39,11,90,161,39,36,11,248,22,153,14,23,197,1, 87,95,83,160,38,11,80,158,44,47,23,203,2,83,160,38,11,80,158,44,48, -192,192,11,11,27,28,23,194,2,23,194,1,87,94,23,194,1,27,247,22,149, -5,28,23,193,2,192,87,94,23,193,1,247,22,170,14,27,250,22,152,2,80, +192,192,11,11,27,28,23,194,2,23,194,1,87,94,23,194,1,27,247,22,150, +5,28,23,193,2,192,87,94,23,193,1,247,22,173,14,27,250,22,152,2,80, 159,45,44,38,249,22,72,23,205,2,23,199,2,11,28,23,193,2,192,87,94, 23,193,1,91,159,38,11,90,161,38,36,11,248,2,55,248,2,57,23,204,2, -250,22,1,22,147,14,23,199,1,249,22,86,249,22,2,32,0,89,162,8,44, -37,44,9,222,33,59,23,200,1,248,22,82,27,248,22,184,6,23,202,2,28, -249,22,183,3,194,39,28,249,22,187,6,2,28,249,22,139,7,204,249,22,171, -3,198,39,249,22,140,7,250,22,139,7,205,36,249,22,171,3,199,39,2,29, -200,200,28,248,22,129,14,23,198,2,87,94,23,194,1,28,248,22,152,14,23, -198,2,27,248,22,156,14,23,199,2,91,159,39,11,90,161,39,36,11,248,22, -150,14,23,197,2,87,95,23,195,1,23,193,1,28,249,22,180,14,2,60,248, -22,134,14,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,248,22,82, +250,22,1,22,150,14,23,199,1,249,22,86,249,22,2,32,0,89,162,8,44, +37,44,9,222,33,59,23,200,1,248,22,82,27,248,22,185,6,23,202,2,28, +249,22,184,3,194,39,28,249,22,188,6,2,28,249,22,140,7,204,249,22,172, +3,198,39,249,22,141,7,250,22,140,7,205,36,249,22,172,3,199,39,2,29, +200,200,28,248,22,132,14,23,198,2,87,94,23,194,1,28,248,22,155,14,23, +198,2,27,248,22,159,14,23,199,2,91,159,39,11,90,161,39,36,11,248,22, +153,14,23,197,2,87,95,23,195,1,23,193,1,28,249,22,183,14,2,60,248, +22,137,14,23,197,1,249,80,159,45,53,38,23,198,1,2,30,195,248,22,82, 6,26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97, -98,115,111,108,117,116,101,41,28,249,22,191,8,248,22,73,23,200,2,2,27, -27,250,22,152,2,80,159,43,44,38,249,22,72,23,203,2,247,22,171,14,11, +98,115,111,108,117,116,101,41,28,249,22,128,9,248,22,73,23,200,2,2,27, +27,250,22,152,2,80,159,43,44,38,249,22,72,23,203,2,247,22,174,14,11, 28,23,193,2,192,87,94,23,193,1,91,159,39,11,90,161,38,36,11,27,248, 22,97,23,203,2,248,2,61,248,2,63,23,195,1,90,161,37,38,11,28,248, -22,80,248,22,99,23,203,2,28,248,22,80,23,194,2,249,22,184,14,0,8, +22,80,248,22,99,23,203,2,28,248,22,80,23,194,2,249,22,187,14,0,8, 35,114,120,34,91,46,93,34,23,196,2,11,10,27,28,23,196,2,27,248,22, -184,6,23,197,2,28,249,22,183,3,194,39,28,249,22,187,6,2,28,249,22, -139,7,23,200,2,249,22,171,3,198,39,249,22,140,7,250,22,139,7,23,201, -2,36,249,22,171,3,199,39,2,29,23,196,2,23,196,2,28,248,22,80,23, -195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,184,14,0,8,35, -114,120,34,91,46,93,34,23,197,2,27,248,22,184,6,23,197,2,28,249,22, -183,3,194,39,28,249,22,187,6,2,28,249,22,139,7,23,200,2,249,22,171, -3,198,39,249,22,140,7,250,22,139,7,23,201,2,36,249,22,171,3,199,39, -2,29,23,196,2,23,196,2,249,22,140,7,23,197,2,6,4,4,46,114,107, +185,6,23,197,2,28,249,22,184,3,194,39,28,249,22,188,6,2,28,249,22, +140,7,23,200,2,249,22,172,3,198,39,249,22,141,7,250,22,140,7,23,201, +2,36,249,22,172,3,199,39,2,29,23,196,2,23,196,2,28,248,22,80,23, +195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,187,14,0,8,35, +114,120,34,91,46,93,34,23,197,2,27,248,22,185,6,23,197,2,28,249,22, +184,3,194,39,28,249,22,188,6,2,28,249,22,140,7,23,200,2,249,22,172, +3,198,39,249,22,141,7,250,22,140,7,23,201,2,36,249,22,172,3,199,39, +2,29,23,196,2,23,196,2,249,22,141,7,23,197,2,6,4,4,46,114,107, 116,27,28,23,197,1,87,94,23,196,1,249,22,86,28,248,22,80,248,22,99, 23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,86,249,22,2, 32,0,89,162,8,44,37,44,9,222,33,67,248,22,99,23,210,2,23,197,1, 28,248,22,80,23,196,2,87,94,23,195,1,248,22,82,23,197,1,87,94,23, 196,1,23,195,1,27,252,80,159,51,54,38,2,18,23,206,1,248,22,73,23, -200,2,248,22,74,23,200,1,23,200,2,249,22,147,14,23,195,1,23,197,1, -28,249,22,191,8,248,22,73,23,200,2,64,102,105,108,101,27,248,22,156,14, -249,22,154,14,248,22,158,14,248,22,97,23,203,2,27,28,23,203,2,28,249, -22,191,8,23,205,2,80,158,46,47,80,158,44,48,27,248,22,191,4,23,205, -2,28,248,22,129,14,23,194,2,91,159,39,11,90,161,39,36,11,248,22,150, +200,2,248,22,74,23,200,1,23,200,2,249,22,150,14,23,195,1,23,197,1, +28,249,22,128,9,248,22,73,23,200,2,64,102,105,108,101,27,248,22,159,14, +249,22,157,14,248,22,161,14,248,22,97,23,203,2,27,28,23,203,2,28,249, +22,128,9,23,205,2,80,158,46,47,80,158,44,48,27,248,22,128,5,23,205, +2,28,248,22,132,14,23,194,2,91,159,39,11,90,161,39,36,11,248,22,153, 14,23,197,1,87,95,83,160,38,11,80,158,48,47,23,207,2,83,160,38,11, 80,158,48,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1,27,247,22, -149,5,28,23,193,2,192,87,94,23,193,1,247,22,170,14,91,159,39,11,90, -161,39,36,11,248,22,150,14,23,197,2,87,95,23,195,1,23,193,1,28,249, -22,180,14,2,60,248,22,134,14,23,197,1,249,80,159,45,53,38,23,198,1, -2,30,195,12,87,94,28,28,248,22,129,14,23,194,2,10,248,22,142,8,23, -194,2,87,94,23,199,1,12,28,23,199,2,250,22,162,9,67,114,101,113,117, -105,114,101,249,22,165,7,6,17,17,98,97,100,32,109,111,100,117,108,101,32, +150,5,28,23,193,2,192,87,94,23,193,1,247,22,173,14,91,159,39,11,90, +161,39,36,11,248,22,153,14,23,197,2,87,95,23,195,1,23,193,1,28,249, +22,183,14,2,60,248,22,137,14,23,197,1,249,80,159,45,53,38,23,198,1, +2,30,195,12,87,94,28,28,248,22,132,14,23,194,2,10,248,22,143,8,23, +194,2,87,94,23,199,1,12,28,23,199,2,250,22,163,9,67,114,101,113,117, +105,114,101,249,22,166,7,6,17,17,98,97,100,32,109,111,100,117,108,101,32, 112,97,116,104,126,97,28,23,198,2,248,22,73,23,199,2,6,0,0,23,202, -1,87,94,23,199,1,250,22,163,9,2,18,249,22,165,7,6,13,13,109,111, +1,87,94,23,199,1,250,22,164,9,2,18,249,22,166,7,6,13,13,109,111, 100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,73,23,199,2, -6,0,0,23,200,2,27,28,248,22,142,8,23,195,2,249,22,147,8,23,196, -2,36,249,22,156,14,248,22,157,14,23,197,2,11,27,28,248,22,142,8,23, -196,2,249,22,147,8,23,197,2,37,248,80,159,42,55,38,23,195,2,91,159, -39,11,90,161,39,36,11,28,248,22,142,8,23,199,2,250,22,7,2,31,249, -22,147,8,23,203,2,38,2,31,248,22,150,14,23,198,2,87,95,23,195,1, -23,193,1,27,28,248,22,142,8,23,200,2,249,22,147,8,23,201,2,39,249, -80,159,47,53,38,23,197,2,5,0,27,28,248,22,142,8,23,201,2,249,22, -147,8,23,202,2,40,248,22,190,4,23,200,2,27,27,250,22,152,2,80,159, -51,43,38,248,22,141,15,247,22,173,12,11,28,23,193,2,192,87,94,23,193, -1,27,247,22,132,2,87,94,250,22,150,2,80,159,52,43,38,248,22,141,15, -247,22,173,12,195,192,87,95,28,23,208,1,27,250,22,152,2,23,197,2,197, +6,0,0,23,200,2,27,28,248,22,143,8,23,195,2,249,22,148,8,23,196, +2,36,249,22,159,14,248,22,160,14,23,197,2,11,27,28,248,22,143,8,23, +196,2,249,22,148,8,23,197,2,37,248,80,159,42,55,38,23,195,2,91,159, +39,11,90,161,39,36,11,28,248,22,143,8,23,199,2,250,22,7,2,31,249, +22,148,8,23,203,2,38,2,31,248,22,153,14,23,198,2,87,95,23,195,1, +23,193,1,27,28,248,22,143,8,23,200,2,249,22,148,8,23,201,2,39,249, +80,159,47,53,38,23,197,2,5,0,27,28,248,22,143,8,23,201,2,249,22, +148,8,23,202,2,40,248,22,191,4,23,200,2,27,27,250,22,152,2,80,159, +51,43,38,248,22,144,15,247,22,174,12,11,28,23,193,2,192,87,94,23,193, +1,27,247,22,132,2,87,94,250,22,150,2,80,159,52,43,38,248,22,144,15, +247,22,174,12,195,192,87,95,28,23,208,1,27,250,22,152,2,23,197,2,197, 11,28,23,193,1,12,87,95,27,27,28,248,22,17,80,159,51,46,38,80,159, 50,46,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,45,38,23, -196,1,27,248,22,141,15,247,22,173,12,249,22,3,83,158,40,20,100,94,89, +196,1,27,248,22,144,15,247,22,174,12,249,22,3,83,158,40,20,100,94,89, 162,8,44,37,55,9,226,12,11,2,3,33,68,23,195,1,23,196,1,248,28, 248,22,17,80,159,50,46,38,32,0,89,162,44,37,42,9,222,33,69,80,159, 49,59,37,89,162,44,36,51,9,227,13,9,8,4,3,33,70,250,22,150,2, -23,197,1,197,10,12,28,28,248,22,142,8,23,202,1,11,28,248,22,181,6, +23,197,1,197,10,12,28,28,248,22,143,8,23,202,1,11,28,248,22,182,6, 23,206,2,10,28,248,22,57,23,206,2,10,28,248,22,70,23,206,2,249,22, -191,8,248,22,73,23,208,2,2,27,11,250,22,150,2,80,159,50,44,38,28, -248,22,181,6,23,209,2,249,22,72,23,210,1,27,28,23,212,2,28,249,22, -191,8,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53,48,27,248,22, -191,4,23,214,2,28,248,22,129,14,23,194,2,91,159,39,11,90,161,39,36, -11,248,22,150,14,23,197,1,87,95,83,160,38,11,80,158,57,47,23,23,83, +128,9,248,22,73,23,208,2,2,27,11,250,22,150,2,80,159,50,44,38,28, +248,22,182,6,23,209,2,249,22,72,23,210,1,27,28,23,212,2,28,249,22, +128,9,23,214,2,80,158,55,47,87,94,23,212,1,80,158,53,48,27,248,22, +128,5,23,214,2,28,248,22,132,14,23,194,2,91,159,39,11,90,161,39,36, +11,248,22,153,14,23,197,1,87,95,83,160,38,11,80,158,57,47,23,23,83, 160,38,11,80,158,57,48,192,192,11,11,28,23,193,2,192,87,94,23,193,1, -27,247,22,149,5,28,23,193,2,192,87,94,23,193,1,247,22,170,14,249,22, -72,23,210,1,247,22,171,14,252,22,144,8,23,208,1,23,207,1,23,205,1, +27,247,22,150,5,28,23,193,2,192,87,94,23,193,1,247,22,173,14,249,22, +72,23,210,1,247,22,174,14,252,22,145,8,23,208,1,23,207,1,23,205,1, 23,203,1,201,12,193,87,96,83,160,38,11,80,158,36,50,248,80,159,37,58, -38,249,22,27,11,80,159,39,52,38,248,22,169,4,80,159,37,51,38,248,22, -148,5,80,159,37,37,37,248,22,164,13,80,159,37,42,37,83,160,38,11,80, +38,249,22,27,11,80,159,39,52,38,248,22,170,4,80,159,37,51,38,248,22, +149,5,80,159,37,37,37,248,22,165,13,80,159,37,42,37,83,160,38,11,80, 158,36,50,248,80,159,37,58,38,249,22,27,11,80,159,39,52,38,159,36,20, 105,159,36,16,1,11,16,0,83,158,42,20,103,145,2,1,2,1,29,11,11, 11,11,11,10,38,80,158,36,36,20,105,159,37,16,23,2,2,2,3,30,2, @@ -918,7 +918,7 @@ 2,11,11,16,2,2,20,2,21,38,38,37,11,11,11,16,0,16,0,16,0, 36,36,11,11,11,11,16,0,16,0,16,0,36,36,16,0,16,15,83,158,36, 16,2,89,162,44,37,45,9,223,0,33,32,80,159,36,59,37,83,158,36,16, -2,248,22,139,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,83, +2,248,22,140,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,83, 158,36,16,2,89,162,44,38,8,38,2,3,223,0,33,41,80,159,36,37,37, 83,158,36,16,2,32,0,89,162,8,44,37,42,2,9,222,192,80,159,36,42, 37,83,158,36,16,2,247,22,135,2,80,159,36,43,37,83,158,36,16,2,247, diff --git a/src/racket/src/fun.c b/src/racket/src/fun.c index b64614724c..d1e4e2db9b 100644 --- a/src/racket/src/fun.c +++ b/src/racket/src/fun.c @@ -7677,6 +7677,20 @@ static Scheme_Object *continuation_marks(Scheme_Thread *p, return (Scheme_Object *)set; } +static Scheme_Object *make_empty_marks() +{ + /* empty marks */ + Scheme_Cont_Mark_Set *set; + + set = MALLOC_ONE_TAGGED(Scheme_Cont_Mark_Set); + set->so.type = scheme_cont_mark_set_type; + set->chain = NULL; + set->cmpos = 1; + set->native_stack_trace = NULL; + + return (Scheme_Object *)set; +} + Scheme_Object *scheme_current_continuation_marks(Scheme_Object *prompt_tag) { return continuation_marks(scheme_current_thread, NULL, NULL, NULL, @@ -7717,8 +7731,9 @@ cont_marks(int argc, Scheme_Object *argv[]) { Scheme_Object *prompt_tag; - if (!SCHEME_CONTP(argv[0]) && !SCHEME_ECONTP(argv[0]) && !SCHEME_THREADP(argv[0])) - scheme_wrong_type("continuation-marks", "continuation or thread", 0, argc, argv); + if (SCHEME_TRUEP(argv[0]) + && !SCHEME_CONTP(argv[0]) && !SCHEME_ECONTP(argv[0]) && !SCHEME_THREADP(argv[0])) + scheme_wrong_type("continuation-marks", "continuation, thread, or #f", 0, argc, argv); if (argc > 1) { if (!SAME_TYPE(scheme_prompt_tag_type, SCHEME_TYPE(argv[1]))) { @@ -7729,7 +7744,9 @@ cont_marks(int argc, Scheme_Object *argv[]) } else prompt_tag = scheme_default_prompt_tag; - if (SCHEME_ECONTP(argv[0])) { + if (SCHEME_FALSEP(argv[0])) { + return make_empty_marks(); + } else if (SCHEME_ECONTP(argv[0])) { if (!scheme_escape_continuation_ok(argv[0])) { scheme_arg_mismatch("continuation-marks", "escape continuation not in the current thread's continuation: ", @@ -7758,16 +7775,7 @@ cont_marks(int argc, Scheme_Object *argv[]) } if (!(t->running & MZTHREAD_RUNNING)) { - /* empty marks */ - Scheme_Cont_Mark_Set *set; - - set = MALLOC_ONE_TAGGED(Scheme_Cont_Mark_Set); - set->so.type = scheme_cont_mark_set_type; - set->chain = NULL; - set->cmpos = 1; - set->native_stack_trace = NULL; - - return (Scheme_Object *)set; + return make_empty_marks(); } else { scheme_start_atomic(); /* just in case */ diff --git a/src/racket/src/future.c b/src/racket/src/future.c index fdb6da3f63..12900981b5 100644 --- a/src/racket/src/future.c +++ b/src/racket/src/future.c @@ -547,7 +547,12 @@ void scheme_future_block_until_gc() # else { int _eax, _ebx, _ecx, _edx, op = 0; - asm ("cpuid" : "=a" (_eax), "=b" (_ebx), "=c" (_ecx), "=d" (_edx) : "a" (op)); + /* we can't always use EBX, so save and restore it: */ + asm ("pushl %%ebx \n\t" + "cpuid \n\t" + "movl %%ebx, %1 \n\t" + "popl %%ebx" + : "=a" (_eax), "=r" (_ebx), "=c" (_ecx), "=d" (_edx) : "a" (op)); } # endif #endif diff --git a/src/racket/src/jit.c b/src/racket/src/jit.c index 76239cbe82..e1952071ec 100644 --- a/src/racket/src/jit.c +++ b/src/racket/src/jit.c @@ -6748,6 +6748,9 @@ static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in } else if (IS_NAMED_PRIM(rator, "inexact-real?")) { generate_inlined_type_test(jitter, app, SCHEME_FLOAT_TYPE, scheme_double_type, 0, for_branch, branch_short, need_sync); return 1; + } else if (IS_NAMED_PRIM(rator, "flonum?")) { + generate_inlined_type_test(jitter, app, scheme_double_type, scheme_double_type, 0, for_branch, branch_short, need_sync); + return 1; } else if (IS_NAMED_PRIM(rator, "procedure?")) { generate_inlined_type_test(jitter, app, scheme_prim_type, scheme_proc_chaperone_type, 1, for_branch, branch_short, need_sync); return 1; diff --git a/src/racket/src/numarith.c b/src/racket/src/numarith.c index e1913df129..9cf2d47d48 100644 --- a/src/racket/src/numarith.c +++ b/src/racket/src/numarith.c @@ -1043,8 +1043,8 @@ UNSAFE_FL1(unsafe_fl_sqrt, sqrt, pos_sqrt) static Scheme_Object *name(int argc, Scheme_Object *argv[]) \ { \ double v; \ - if (!SCHEME_FLOATP(argv[0])) scheme_wrong_type(sname, "inexact-real", 0, argc, argv); \ - if (!SCHEME_FLOATP(argv[1])) scheme_wrong_type(sname, "inexact-real", 1, argc, argv); \ + if (!SCHEME_DBLP(argv[0])) scheme_wrong_type(sname, "flonum", 0, argc, argv); \ + if (!SCHEME_DBLP(argv[1])) scheme_wrong_type(sname, "flonum", 1, argc, argv); \ v = SCHEME_DBL_VAL(argv[0]) op SCHEME_DBL_VAL(argv[1]); \ return scheme_make_double(v); \ } @@ -1058,7 +1058,7 @@ SAFE_FL(fl_div, "fl/", /) static Scheme_Object *name(int argc, Scheme_Object *argv[]) \ { \ double v; \ - if (!SCHEME_FLOATP(argv[0])) scheme_wrong_type(sname, "inexact-real", 0, argc, argv); \ + if (!SCHEME_DBLP(argv[0])) scheme_wrong_type(sname, "flonum", 0, argc, argv); \ v = SCHEME_DBL_VAL(argv[0]); \ v = op(v); \ return scheme_make_double(v); \ diff --git a/src/racket/src/number.c b/src/racket/src/number.c index efae26fcbf..81fce2c610 100644 --- a/src/racket/src/number.c +++ b/src/racket/src/number.c @@ -63,6 +63,7 @@ static Scheme_Object *exact_nonnegative_integer_p (int argc, Scheme_Object *argv static Scheme_Object *exact_positive_integer_p (int argc, Scheme_Object *argv[]); static Scheme_Object *fixnum_p (int argc, Scheme_Object *argv[]); static Scheme_Object *inexact_real_p (int argc, Scheme_Object *argv[]); +static Scheme_Object *flonum_p (int argc, Scheme_Object *argv[]); static Scheme_Object *exact_p (int argc, Scheme_Object *argv[]); static Scheme_Object *even_p (int argc, Scheme_Object *argv[]); static Scheme_Object *bitwise_or (int argc, Scheme_Object *argv[]); @@ -349,6 +350,10 @@ scheme_init_number (Scheme_Env *env) SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; scheme_add_global_constant("inexact-real?", p, env); + p = scheme_make_folding_prim(flonum_p, "flonum?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("flonum?", p, env); + scheme_add_global_constant("exact?", scheme_make_folding_prim(exact_p, "exact?", @@ -1313,6 +1318,16 @@ inexact_real_p (int argc, Scheme_Object *argv[]) return scheme_false; } +static Scheme_Object * +flonum_p (int argc, Scheme_Object *argv[]) +{ + Scheme_Object *n = argv[0]; + if (SCHEME_DBLP(n)) + return scheme_true; + else + return scheme_false; +} + int scheme_is_exact(const Scheme_Object *n) { if (SCHEME_INTP(n)) { @@ -2636,10 +2651,10 @@ Scheme_Object *scheme_checked_make_flrectangular (int argc, Scheme_Object *argv[ a = argv[0]; b = argv[1]; - if (!SCHEME_FLOATP(a)) - scheme_wrong_type("make-rectangular", "inexact-real", 0, argc, argv); - if (!SCHEME_FLOATP(b)) - scheme_wrong_type("make-rectangular", "inexact-real", 1, argc, argv); + if (!SCHEME_DBLP(a)) + scheme_wrong_type("make-rectangular", "flonum", 0, argc, argv); + if (!SCHEME_DBLP(b)) + scheme_wrong_type("make-rectangular", "flonum", 1, argc, argv); return scheme_make_complex(a, b); } @@ -3279,11 +3294,11 @@ static Scheme_Object *do_flvector (const char *name, Scheme_Double_Vector *vec, int i; for (i = 0; i < argc; i++) { - if (!SCHEME_FLOATP(argv[i])) { - scheme_wrong_type(name, "inexact real", i, argc, argv); + if (!SCHEME_DBLP(argv[i])) { + scheme_wrong_type(name, "flonum", i, argc, argv); return NULL; } - vec->els[i] = SCHEME_FLOAT_VAL(argv[i]); + vec->els[i] = SCHEME_DBL_VAL(argv[i]); } return (Scheme_Object *)vec; @@ -3329,8 +3344,8 @@ static Scheme_Object *do_make_flvector (const char *name, int as_shared, int arg scheme_wrong_type(name, "exact non-negative integer", 0, argc, argv); if (argc > 1) { - if (!SCHEME_FLOATP(argv[1])) - scheme_wrong_type(name, "inexact real", 1, argc, argv); + if (!SCHEME_DBLP(argv[1])) + scheme_wrong_type(name, "flonum", 1, argc, argv); } #if defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC) @@ -3343,7 +3358,7 @@ static Scheme_Object *do_make_flvector (const char *name, int as_shared, int arg if (argc > 1) { int i; - double d = SCHEME_FLOAT_VAL(argv[1]); + double d = SCHEME_DBL_VAL(argv[1]); for (i = 0; i < size; i++) { vec->els[i] = d; } @@ -3414,8 +3429,8 @@ Scheme_Object *scheme_checked_flvector_set (int argc, Scheme_Object *argv[]) len = SCHEME_FLVEC_SIZE(vec); pos = scheme_extract_index("flvector-set!", 1, argc, argv, len, 0); - if (!SCHEME_FLOATP(argv[2])) - scheme_wrong_type("flvector-set!", "inexact real", 2, argc, argv); + if (!SCHEME_DBLP(argv[2])) + scheme_wrong_type("flvector-set!", "flonum", 2, argc, argv); if (pos >= len) { scheme_bad_vec_index("flvector-set!", argv[1], @@ -3424,7 +3439,7 @@ Scheme_Object *scheme_checked_flvector_set (int argc, Scheme_Object *argv[]) return NULL; } - SCHEME_FLVEC_ELS(vec)[pos] = SCHEME_FLOAT_VAL(argv[2]); + SCHEME_FLVEC_ELS(vec)[pos] = SCHEME_DBL_VAL(argv[2]); return scheme_void; } @@ -3675,7 +3690,7 @@ static Scheme_Object *fl_to_fx (int argc, Scheme_Object *argv[]) if (!SCHEME_DBLP(argv[0]) || !scheme_is_integer(argv[0])) - scheme_wrong_type("fl->fx", "inexact-real integer", 0, argc, argv); + scheme_wrong_type("fl->fx", "flonum integer", 0, argc, argv); d = SCHEME_DBL_VAL(argv[0]); v = (long)d; @@ -3693,7 +3708,7 @@ static Scheme_Object *fl_to_fx (int argc, Scheme_Object *argv[]) static Scheme_Object * fl_ ## op (int argc, Scheme_Object *argv[]) \ { \ double v; \ - if (!SCHEME_DBLP(argv[0])) scheme_wrong_type("fl" #op, "inexact-real", 0, argc, argv); \ + if (!SCHEME_DBLP(argv[0])) scheme_wrong_type("fl" #op, "flonum", 0, argc, argv); \ v = scheme_double_ ## op (SCHEME_DBL_VAL(argv[0])); \ return scheme_make_double(v); \ } @@ -3790,7 +3805,7 @@ static Scheme_Object *unsafe_flvector_set (int argc, Scheme_Object *argv[]) long pos; pos = SCHEME_INT_VAL(argv[1]); - SCHEME_FLVEC_ELS(argv[0])[pos] = SCHEME_FLOAT_VAL(argv[2]); + SCHEME_FLVEC_ELS(argv[0])[pos] = SCHEME_DBL_VAL(argv[2]); return scheme_void; } @@ -3872,7 +3887,7 @@ static Scheme_Object *fl_to_integer (int argc, Scheme_Object *argv[]) return o; } - scheme_wrong_type("fl->exact-integer", "inexact-real integer", 0, argc, argv); + scheme_wrong_type("fl->exact-integer", "flonum integer", 0, argc, argv); return NULL; } diff --git a/src/racket/src/numcomp.c b/src/racket/src/numcomp.c index d064d055d2..e6f26ffba7 100644 --- a/src/racket/src/numcomp.c +++ b/src/racket/src/numcomp.c @@ -563,8 +563,8 @@ UNSAFE_FX_X(unsafe_fx_max, >, bin_max, argv[0], argv[1], FX_SEL_ID) #define SAFE_FL_X(name, sname, op, T, F) \ static Scheme_Object *name(int argc, Scheme_Object *argv[]) \ { \ - if (!SCHEME_FLOATP(argv[0])) scheme_wrong_type(sname, "inexact-real", 0, argc, argv); \ - if (!SCHEME_FLOATP(argv[1])) scheme_wrong_type(sname, "inexact-real", 1, argc, argv); \ + if (!SCHEME_DBLP(argv[0])) scheme_wrong_type(sname, "flonum", 0, argc, argv); \ + if (!SCHEME_DBLP(argv[1])) scheme_wrong_type(sname, "flonum", 1, argc, argv); \ if (SCHEME_DBL_VAL(argv[0]) op SCHEME_DBL_VAL(argv[1])) \ return T; \ else \ diff --git a/src/racket/src/numstr.c b/src/racket/src/numstr.c index ef383dc9c3..3eccc68939 100644 --- a/src/racket/src/numstr.c +++ b/src/racket/src/numstr.c @@ -398,7 +398,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (radix_set) { if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad radix specification: %u", + "read: bad radix specification: %u", str, len); else return scheme_false; @@ -408,7 +408,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (is_float || is_not_float) { if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad exactness specification: %u", + "read: bad exactness specification: %u", str, len); else return scheme_false; @@ -443,7 +443,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, default: if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad `#' indicator `%c': %u", + "read: bad `#' indicator `%c': %u", str[delta+1], str, len); return scheme_false; } @@ -458,7 +458,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (!(len - delta)) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no digits"); + "read: no digits"); return scheme_false; } @@ -471,7 +471,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, return special; if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no exact representation for %V", + "read: no exact representation for %V", special); return scheme_false; } @@ -515,7 +515,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (is_not_float) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no exact representation for %V", + "read: no exact representation for %V", special); return scheme_false; } @@ -532,7 +532,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, *div_by_zero = 1; if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: division by zero: %u", + "read: division by zero: %u", str, len); return scheme_false; } @@ -553,7 +553,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (is_not_float) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no exact representation for %V", + "read: no exact representation for %V", special); return scheme_false; } @@ -616,7 +616,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, *div_by_zero = 1; if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: division by zero: %u", + "read: division by zero: %u", str, len); return scheme_false; } @@ -662,7 +662,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (!ch) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: embedded null character: %u", + "read: embedded null character: %u", str, len); return scheme_false; } else if (isinexactmark(ch) && ((radix <= 10) || !isbaseNdigit(radix, ch))) { @@ -673,7 +673,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if ((has_sign > delta) || ((has_sign == delta) && (i == delta+1))) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: too many signs: %u", + "read: too many signs: %u", str, len); return scheme_false; } @@ -682,14 +682,14 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_at) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: cannot mix `@' and `i': %u", + "read: cannot mix `@' and `i': %u", str, len); return scheme_false; } if (i + 1 < len) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: `i' must be at the end: %u", + "read: `i' must be at the end: %u", str, len); return scheme_false; } @@ -698,14 +698,14 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_at) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: too many `@'s: %u", + "read: too many `@'s: %u", str, len); return scheme_false; } if (i == delta) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: `@' cannot be at start: %u", + "read: `@' cannot be at start: %u", str, len); return scheme_false; } @@ -779,7 +779,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, *div_by_zero = 1; if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: division by zero: %u", + "read: division by zero: %u", str, len); return scheme_false; } @@ -872,7 +872,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, *div_by_zero = 1; if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: division by zero in %u", + "read: division by zero in %u", str, len); return scheme_false; } @@ -912,14 +912,14 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_decimal) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: multiple decimal points: %u", + "read: multiple decimal points: %u", str, len); return scheme_false; } if (has_slash) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: decimal points and fractions " + "read: decimal points and fractions " "cannot be mixed: %u", str, len); return scheme_false; @@ -930,7 +930,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (i == delta) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: cannot begin with `%c' in %u", + "read: cannot begin with `%c' in %u", ch, str, len); return scheme_false; } @@ -940,21 +940,21 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (i == delta) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: cannot have slash at start: %u", + "read: cannot have slash at start: %u", str, len); return scheme_false; } if (has_slash) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: multiple slashes: %u", + "read: multiple slashes: %u", str, len); return scheme_false; } if (has_decimal) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: decimal points and fractions " + "read: decimal points and fractions " "cannot be mixed: %u", str, len); return scheme_false; @@ -966,7 +966,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_slash || has_decimal || has_hash) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: misplaced sign: %u", + "read: misplaced sign: %u", str, len); return scheme_false; } @@ -974,7 +974,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (!saw_digit_since_slash) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: misplaced hash: %u", + "read: misplaced hash: %u", str, len); return scheme_false; } @@ -984,14 +984,14 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_decimal) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad decimal number: %u", + "read: bad decimal number: %u", str, len); return scheme_false; } if (has_hash) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: misplaced hash: %u", + "read: misplaced hash: %u", str, len); return scheme_false; } @@ -1004,7 +1004,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_hash_since_slash) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: misplaced hash: %u", + "read: misplaced hash: %u", str, len); return scheme_false; } @@ -1041,7 +1041,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (has_expt && !(str[has_expt + 1])) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no digits after \"%c\": %u", + "read: no digits after \"%c\": %u", str[has_expt], str, len); return scheme_false; } @@ -1069,7 +1069,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if ((ptr XFORM_OK_MINUS ffl_buf) < (len - delta)) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad decimal number %u", + "read: bad decimal number %u", str, len); return scheme_false; } @@ -1114,7 +1114,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (!str[has_expt + 1]) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no digits after \"%c\": %u", + "read: no digits after \"%c\": %u", str[has_expt], str, len); return scheme_false; } @@ -1134,7 +1134,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (SCHEME_FALSEP(exponent)) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad exponent: %u", + "read: bad exponent: %u", str, len); return scheme_false; } @@ -1167,12 +1167,12 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, *div_by_zero = 1; if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: division by zero: %u", + "read: division by zero: %u", str, len); } if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad number: %u", + "read: bad number: %u", str, len); return scheme_false; } @@ -1218,7 +1218,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, || ((radix > 10) && isbaseNdigit(radix, digits[0]))))) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad decimal number %u", + "read: bad decimal number %u", str, len); return scheme_false; } @@ -1237,7 +1237,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, /* can get here with bad radix */ if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad number: %u", + "read: bad number: %u", str, len); return scheme_false; } @@ -1339,7 +1339,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (SCHEME_EXACT_REALP(n2) && scheme_is_zero(n2)) { if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: division by zero: %u", + "read: division by zero: %u", str, len); if (div_by_zero) *div_by_zero = 1; @@ -1356,7 +1356,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (!scheme_check_double(NULL, SCHEME_FLOAT_VAL(n1), NULL)) { if (complain) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: no exact representation for %V", + "read: no exact representation for %V", n1); return scheme_false; } @@ -1372,7 +1372,7 @@ Scheme_Object *scheme_read_number(const mzchar *str, long len, if (SAME_OBJ(o, scheme_false)) { if (report) scheme_read_err(complain, stxsrc, line, col, pos, span, 0, indentation, - "read-number: bad number: %u", + "read: bad number: %u", str, len); } else if (is_float) { /* Special case: "#i-0" => -0. */ diff --git a/src/racket/src/portfun.c b/src/racket/src/portfun.c index 11834baf07..1d5e85d677 100644 --- a/src/racket/src/portfun.c +++ b/src/racket/src/portfun.c @@ -4312,6 +4312,7 @@ static Scheme_Object *default_load(int argc, Scheme_Object *argv[]) config = scheme_extend_config(config, MZCONFIG_CAN_READ_INFIX_DOT, scheme_true); config = scheme_extend_config(config, MZCONFIG_CAN_READ_QUASI, scheme_true); config = scheme_extend_config(config, MZCONFIG_CAN_READ_READER, scheme_true); + config = scheme_extend_config(config, MZCONFIG_CAN_READ_LANG, scheme_true); config = scheme_extend_config(config, MZCONFIG_READ_DECIMAL_INEXACT, scheme_true); config = scheme_extend_config(config, MZCONFIG_READTABLE, scheme_false); } diff --git a/src/racket/src/print.c b/src/racket/src/print.c index 67bb769223..8939566dd9 100644 --- a/src/racket/src/print.c +++ b/src/racket/src/print.c @@ -80,6 +80,7 @@ typedef struct Scheme_Print_Params { char print_unreadable; char print_pair_curly, print_mpair_curly; char print_reader; + char print_long_bools; char can_read_pipe_quote; char case_sens; char honu_mode; @@ -989,6 +990,7 @@ print_to_string(Scheme_Object *obj, params.print_hash_table = 0; params.print_unreadable = 1; params.print_reader = 1; + params.print_long_bools = 0; params.print_pair_curly = 0; params.print_mpair_curly = 1; params.can_read_pipe_quote = 1; @@ -1053,6 +1055,8 @@ print_to_string(Scheme_Object *obj, params.can_read_pipe_quote = SCHEME_TRUEP(v); v = scheme_get_param(config, MZCONFIG_CASE_SENS); params.case_sens = SCHEME_TRUEP(v); + v = scheme_get_param(config, MZCONFIG_PRINT_LONG_BOOLEAN); + params.print_long_bools = SCHEME_TRUEP(v); if (check_honu) { v = scheme_get_param(config, MZCONFIG_HONU_MODE); params.honu_mode = SCHEME_TRUEP(v); @@ -2234,6 +2238,8 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, print_compact(pp, CPT_TRUE); else if (pp->honu_mode) print_utf8_string(pp, "true", 0, 4); + else if (pp->print_long_bools) + print_utf8_string(pp, "#true", 0, 5); else print_utf8_string(pp, "#t", 0, 2); } @@ -2243,6 +2249,8 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, print_compact(pp, CPT_FALSE); else if (pp->honu_mode) print_utf8_string(pp, "false", 0, 5); + else if (pp->print_long_bools) + print_utf8_string(pp, "#false", 0, 6); else print_utf8_string(pp, "#f", 0, 2); } diff --git a/src/racket/src/read.c b/src/racket/src/read.c index c0d831bc2c..8124c46350 100644 --- a/src/racket/src/read.c +++ b/src/racket/src/read.c @@ -105,6 +105,7 @@ static Scheme_Object *read_accept_dot(int, Scheme_Object *[]); static Scheme_Object *read_accept_infix_dot(int, Scheme_Object *[]); static Scheme_Object *read_accept_quasi(int, Scheme_Object *[]); static Scheme_Object *read_accept_reader(int, Scheme_Object *[]); +static Scheme_Object *read_accept_lang(int, Scheme_Object *[]); #ifdef LOAD_ON_DEMAND static Scheme_Object *read_delay_load(int, Scheme_Object *[]); #endif @@ -120,6 +121,7 @@ static Scheme_Object *print_honu(int, Scheme_Object *[]); static Scheme_Object *print_syntax_width(int, Scheme_Object *[]); static Scheme_Object *print_reader(int, Scheme_Object *[]); static Scheme_Object *print_as_qq(int, Scheme_Object *[]); +static Scheme_Object *print_long_bool(int, Scheme_Object *[]); static int scheme_ellipses(mzchar* buffer, int length); @@ -164,20 +166,21 @@ typedef struct Readtable { typedef struct ReadParams { MZTAG_IF_REQUIRED - int can_read_compiled; - int can_read_pipe_quote; - int can_read_box; - int can_read_graph; - int can_read_reader; - int case_sensitive; - int square_brackets_are_parens; - int curly_braces_are_parens; - int read_decimal_inexact; - int can_read_dot; - int can_read_infix_dot; - int can_read_quasi; - int honu_mode; - int skip_zo_vers_check; + char can_read_compiled; + char can_read_pipe_quote; + char can_read_box; + char can_read_graph; + char can_read_reader; + char can_read_lang; + char case_sensitive; + char square_brackets_are_parens; + char curly_braces_are_parens; + char read_decimal_inexact; + char can_read_dot; + char can_read_infix_dot; + char can_read_quasi; + char honu_mode; + char skip_zo_vers_check; Readtable *table; Scheme_Object *magic_sym, *magic_val; Scheme_Object *delay_load_info; @@ -240,6 +243,12 @@ static Scheme_Object *read_keyword(int init_ch, Scheme_Object *indentation, ReadParams *params, Readtable *table); +static Scheme_Object *read_delimited_constant(int ch, const mzchar *str, + Scheme_Object *v, + Scheme_Object *port, + Scheme_Object *stxsrc, long line, long col, long pos, + Scheme_Object *indentation, + ReadParams *params, Readtable *table); static Scheme_Object *read_character(Scheme_Object *port, Scheme_Object *stcsrc, long line, long col, long pos, Scheme_Hash_Table **ht, @@ -282,6 +291,10 @@ static Scheme_Object *expected_lang(const char *prefix, int ch, long line, long col, long pos, int get_info); static void pop_indentation(Scheme_Object *indentation); +static int next_is_delim(Scheme_Object *port, + ReadParams *params, + int brackets, + int braces); static int skip_whitespace_comments(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table **ht, @@ -526,6 +539,7 @@ void scheme_init_read(Scheme_Env *env) GLOBAL_PARAMETER("read-accept-infix-dot", read_accept_infix_dot, MZCONFIG_CAN_READ_INFIX_DOT, env); GLOBAL_PARAMETER("read-accept-quasiquote", read_accept_quasi, MZCONFIG_CAN_READ_QUASI, env); GLOBAL_PARAMETER("read-accept-reader", read_accept_reader, MZCONFIG_CAN_READ_READER, env); + GLOBAL_PARAMETER("read-accept-lang", read_accept_lang, MZCONFIG_CAN_READ_LANG, env); #ifdef LOAD_ON_DEMAND GLOBAL_PARAMETER("read-on-demand-source", read_delay_load, MZCONFIG_DELAY_LOAD_INFO, env); #endif @@ -540,6 +554,7 @@ void scheme_init_read(Scheme_Env *env) GLOBAL_PARAMETER("print-honu", print_honu, MZCONFIG_HONU_MODE, env); GLOBAL_PARAMETER("print-syntax-width", print_syntax_width, MZCONFIG_PRINT_SYNTAX_WIDTH, env); GLOBAL_PARAMETER("print-reader-abbreviations", print_reader, MZCONFIG_PRINT_READER, env); + GLOBAL_PARAMETER("print-boolean-long-form", print_long_bool, MZCONFIG_PRINT_LONG_BOOLEAN, env); GLOBAL_PARAMETER("print-as-expression", print_as_qq, MZCONFIG_PRINT_AS_QQ, env); GLOBAL_PRIM_W_ARITY("make-readtable", make_readtable, 1, -1, env); @@ -704,6 +719,12 @@ read_accept_reader(int argc, Scheme_Object *argv[]) DO_CHAR_PARAM("read-accept-reader", MZCONFIG_CAN_READ_READER); } +static Scheme_Object * +read_accept_lang(int argc, Scheme_Object *argv[]) +{ + DO_CHAR_PARAM("read-accept-lang", MZCONFIG_CAN_READ_LANG); +} + static Scheme_Object * print_graph(int argc, Scheme_Object *argv[]) { @@ -770,6 +791,12 @@ print_as_qq(int argc, Scheme_Object *argv[]) DO_CHAR_PARAM("print-as-expression", MZCONFIG_PRINT_AS_QQ); } +static Scheme_Object * +print_long_bool(int argc, Scheme_Object *argv[]) +{ + DO_CHAR_PARAM("print-boolean-long-form", MZCONFIG_PRINT_LONG_BOOLEAN); +} + static Scheme_Object *good_syntax_width(int c, Scheme_Object **argv) { int ok; @@ -1188,18 +1215,32 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * break; case 'T': case 't': - if (!params->honu_mode) { - return (stxsrc - ? scheme_make_stx_w_offset(scheme_true, line, col, pos, 2, stxsrc, STX_SRCTAG) - : scheme_true); - } + if (!params->honu_mode) { + if (next_is_delim(port, params, 1, 1)) { + /* found delimited `#t' */ + return (stxsrc + ? scheme_make_stx_w_offset(scheme_true, line, col, pos, 2, stxsrc, STX_SRCTAG) + : scheme_true); + } else { + GC_CAN_IGNORE const mzchar str[] = { 't', 'r', 'u', 'e', 0 }; + return read_delimited_constant(ch, str, scheme_true, port, stxsrc, line, col, pos, + indentation, params, table); + } + } case 'F': case 'f': - if (!params->honu_mode) { - return (stxsrc - ? scheme_make_stx_w_offset(scheme_false, line, col, pos, 2, stxsrc, STX_SRCTAG) - : scheme_false); - } + if (!params->honu_mode) { + if (next_is_delim(port, params, 1, 1)) { + /* found delimited `#f' */ + return (stxsrc + ? scheme_make_stx_w_offset(scheme_false, line, col, pos, 2, stxsrc, STX_SRCTAG) + : scheme_false); + } else { + GC_CAN_IGNORE const mzchar str[] = { 'f', 'a', 'l', 's', 'e', 0 }; + return read_delimited_constant(ch, str, scheme_false, port, stxsrc, line, col, pos, + indentation, params, table); + } + } case 'c': case 'C': if (!params->honu_mode) { @@ -1350,7 +1391,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * case 'E': case 'e': if (!params->honu_mode) { - return read_number(-1, port, stxsrc, line, col, pos, 0, 1, 10, 0, ht, indentation, params, table); + return read_number(-1, port, stxsrc, line, col, pos, 0, 1, 10, 0, ht, indentation, params, table); } break; case 'I': @@ -1490,7 +1531,8 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * if (ch == ' ') { /* #lang */ Scheme_Object *v; - if (!params->can_read_reader) { + if (!params->can_read_reader + || !params->can_read_lang) { scheme_read_err(port, stxsrc, line, col, pos, 6, 0, indentation, "read: #lang expressions not currently enabled"); return NULL; @@ -1675,7 +1717,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table * break; } } while (str[scanpos]); - + if (!failed) { /* Found recognized tag. Look for open paren... */ int effective_ch, kind; @@ -2356,9 +2398,12 @@ _internal_read(Scheme_Object *port, Scheme_Object *stxsrc, int crc, int cant_fai params.can_read_graph = SCHEME_TRUEP(v); if (crc || get_info) { params.can_read_reader = 1; + params.can_read_lang = 1; } else { v = scheme_get_param(config, MZCONFIG_CAN_READ_READER); params.can_read_reader = SCHEME_TRUEP(v); + v = scheme_get_param(config, MZCONFIG_CAN_READ_LANG); + params.can_read_lang = SCHEME_TRUEP(v); } v = scheme_get_param(config, MZCONFIG_CASE_SENS); params.case_sensitive = SCHEME_TRUEP(v); @@ -3854,6 +3899,63 @@ read_keyword(int init_ch, ht, indentation, params, table); } +static Scheme_Object * +read_delimited_constant(int ch, const mzchar *str, + Scheme_Object *v, + Scheme_Object *port, + Scheme_Object *stxsrc, long line, long col, long pos, + Scheme_Object *indentation, + ReadParams *params, Readtable *table) +{ + int first_ch = ch; + int scanpos = 1; + + if (ch == str[0]) { /* might be `T' instead of `t', for example */ + do { + ch = scheme_getc_special_ok(port); + if ((mzchar)ch == str[scanpos]) { + scanpos++; + } else { + break; + } + } while (str[scanpos]); + } else { + /* need to show next character to show why it's wrong: */ + ch = scheme_getc_special_ok(port); + } + + if (str[scanpos] + || !next_is_delim(port, params, 1, 1)) { + mzchar str_part[7], one_more[2]; + + if (!str[scanpos]) { + /* get non-delimiter again: */ + ch = scheme_getc_special_ok(port); + } + + memcpy(str_part, str XFORM_OK_PLUS 1, (scanpos - 1) * sizeof(mzchar)); + str_part[scanpos - 1] = 0; + if (NOT_EOF_OR_SPECIAL(ch)) { + one_more[0] = ch; + one_more[1] = 0; + } else + one_more[0] = 0; + + scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), + ch, indentation, + "read: bad syntax `#%c%5%u'", + first_ch, + str_part, + one_more, + NOT_EOF_OR_SPECIAL(ch) ? 1 : 0); + return NULL; + } + + return (stxsrc + ? scheme_make_stx_w_offset(v, line, col, pos, SPAN(port, pos), stxsrc, STX_SRCTAG) + : v); +} + static int check_honu_num(mzchar *buf, int i) { int j, found_e = 0, found_dot = 0; diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 5258781466..91b4d53615 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -13,7 +13,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1011 +#define EXPECTED_PRIM_COUNT 1014 #define EXPECTED_UNSAFE_COUNT 76 #define EXPECTED_FLFXNUM_COUNT 68 #define EXPECTED_FUTURES_COUNT 5 diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index 2df5e2beb0..1f04c3eb3e 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.0.1.7" +#define MZSCHEME_VERSION "5.0.1.8" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 1 -#define MZSCHEME_VERSION_W 7 +#define MZSCHEME_VERSION_W 8 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/thread.c b/src/racket/src/thread.c index a60dd0b15c..0df7c5f367 100644 --- a/src/racket/src/thread.c +++ b/src/racket/src/thread.c @@ -6789,6 +6789,7 @@ static void make_initial_config(Scheme_Thread *p) init_param(cells, paramz, MZCONFIG_CAN_READ_QUASI, scheme_true); init_param(cells, paramz, MZCONFIG_READ_DECIMAL_INEXACT, scheme_true); init_param(cells, paramz, MZCONFIG_CAN_READ_READER, scheme_false); + init_param(cells, paramz, MZCONFIG_CAN_READ_LANG, scheme_false); init_param(cells, paramz, MZCONFIG_LOAD_DELAY_ENABLED, init_load_on_demand ? scheme_true : scheme_false); init_param(cells, paramz, MZCONFIG_DELAY_LOAD_INFO, scheme_false); @@ -6801,6 +6802,7 @@ static void make_initial_config(Scheme_Thread *p) init_param(cells, paramz, MZCONFIG_PRINT_PAIR_CURLY, scheme_false); init_param(cells, paramz, MZCONFIG_PRINT_MPAIR_CURLY, scheme_true); init_param(cells, paramz, MZCONFIG_PRINT_READER, scheme_false); + init_param(cells, paramz, MZCONFIG_PRINT_LONG_BOOLEAN, scheme_false); init_param(cells, paramz, MZCONFIG_PRINT_AS_QQ, scheme_true); init_param(cells, paramz, MZCONFIG_PRINT_SYNTAX_WIDTH, scheme_make_integer(32));