diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl
index 32bcdf984f..2ff79caaf9 100644
--- a/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/scribblings/raco/config.scrbl
@@ -1,19 +1,23 @@
#lang scribble/doc
@(require scribble/manual
(for-label racket/base
- racket/contract))
+ racket/contract
+ setup/dirs))
@title[#:tag "config-file"]{Installation Configuration and Search Paths}
-A configuration directory path is built into the Racket executable as
-selected at install time. Use @racket[find-system-path 'config-dir] to
-locate the configuration directory.
+A configuration-directory path is built into the Racket executable as
+selected at install time, or its location can be changed via the
+@envvar{PLTCONFIGDIR} directory or @DFlag{config}/@Flag{G}
+command-line flag. Use @racket[find-config-dir] to locate the
+configuration directory.
-Other directories and attributes of an installation can be configured
-through files in the configuration directory. Instead of trying to
-read configuraion files directly, however, use the
-@racketmodname[setup/dirs] library, which combines information from
-the configuration files and other sources.
+
+
+Modify the @filepath{config.rktd} file as described below to configure
+other directories, but use the @racketmodname[setup/dirs] library (which
+combines information from the configuration files and other sources)
+to locate configured directories.
A @filepath{config.rktd} file in the configuration directory should
contain a @racket[read]able hash table with any of the following
diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl
index 98f19ddd10..808b78ab16 100644
--- a/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/scribblings/raco/link.scrbl
@@ -23,7 +23,7 @@ For example, the command
@commandline{raco link maze}
-installs a user-specific link for the @racket["maze"] collection,
+installs a user-specific and version-specific link for the @racket["maze"] collection,
mapping it to the @filepath{maze} subdirectory of the current
directory. Supply multiple directory paths to create multiple links at
once, especially with a command-shell wildcard:
@@ -55,9 +55,9 @@ Full command-line options:
any other command-line arguments are provided that modify the
link table, the table is shown after modifications. If no
directory arguments are provided, and if none of @Flag{u},
- @DFlag{user}, @Flag{i}, @DFlag{installation}, @Flag{f}, or
+ @DFlag{user}, @Flag{s}, @DFlag{shared}, @Flag{i}, @DFlag{installation}, @Flag{f}, or
@DFlag{file} are specified, then the link table is shown for
- both the user-specific and installation-wide @tech[#:doc
+ all user-specific and installation-wide @tech[#:doc
reference-doc]{collection links files}.}
@item{@Flag{n} @nonterm{name} or @DFlag{name} @nonterm{name} --- Sets
@@ -80,7 +80,8 @@ Full command-line options:
@item{@Flag{x} @nonterm{regexp} or @DFlag{version-regexp}
@nonterm{regexp} --- Sets a version regexp that limits the link
to use only by Racket versions (as reported by
- @racket[version]) matching @nonterm{regexp}. When the @Flag{r}
+ @racket[version]) matching @nonterm{regexp}. This flag
+ is normally used with @Flag{s} or @DFlag{shared}. When the @Flag{r}
or @DFlag{remove} flag is also used, only links with a
version regexp matching @nonterm{regexp} are removed.}
@@ -88,24 +89,31 @@ Full command-line options:
of add mode.}
@item{@Flag{u} or @DFlag{user} --- Limits listing and removal
- of links to the user-specific @tech[#:doc
- reference-doc]{collection links file} and not the
+ of links to the user- and version-specific @tech[#:doc
+ reference-doc]{collection links file} and not the all-version or
collection-wide @tech[#:doc reference-doc]{collection links
- file}. This flag is mutually exclusive with @Flag{i},
+ file}. This flag is mutually exclusive with @Flag{s}, @DFlag{shared}, @Flag{i},
+ @DFlag{installation}, @Flag{f}, and @DFlag{file}.}
+
+ @item{@Flag{s} or @DFlag{shared} --- Limits listing and removal
+ of links to the user-specific, all-version @tech[#:doc
+ reference-doc]{collection links file} and not the version-specific or
+ collection-wide @tech[#:doc reference-doc]{collection links
+ file}. This flag is mutually exclusive with @Flag{u}, @DFlag{user}, @Flag{i},
@DFlag{installation}, @Flag{f}, and @DFlag{file}.}
@item{@Flag{i} or @DFlag{installation} --- Reads and writes links in
installation-wide @tech[#:doc reference-doc]{collection links
file} and not the user-specific @tech[#:doc
reference-doc]{collection links file}. This flag is mutually
- exclusive with @Flag{u}, @DFlag{user}, @Flag{f}, and
+ exclusive with @Flag{u}, @DFlag{user}, @Flag{s}, @DFlag{shared}, @Flag{f}, and
@DFlag{file}.}
@item{@Flag{f} @nonterm{file} or @DFlag{file} @nonterm{file} ---
Reads and writes links in @nonterm{file} instead of the
user-specific @tech[#:doc reference-doc]{collection links
file}. This flag is mutually exclusive with @Flag{u},
- @DFlag{user}, @Flag{i}, and @DFlag{installation}.}
+ @DFlag{user}, @Flag{s}, @DFlag{shared}, @Flag{i}, and @DFlag{installation}.}
@item{@DFlag{repair} --- Enables repairs to the existing file content
when the content is erroneous. The file is repaired by deleting
@@ -121,6 +129,7 @@ Full command-line options:
@defproc[(links [dir path?] ...
[#:user? user? any/c #t]
+ [#:shared? shared? any/c #t]
[#:file file (or/c path-string? #f) #f]
[#:name name (or/c string? #f) #f]
[#:root? root? any/c #f]
@@ -134,9 +143,11 @@ Full command-line options:
A function version of the @exec{raco link} command that always works
on a single file---either @racket[file] if it is a path string, the
-user-specific @tech[#:doc reference-doc]{collection links file} if
-@racket[user?] is true, of the installation-wide @tech[#:doc
-reference-doc]{collection links file} if @racket[user?] is false.
+user- and version-specific @tech[#:doc reference-doc]{collection links file} if
+@racket[user?] is true and @racket[shared?] is false, the
+user-specific, all-version @tech[#:doc reference-doc]{collection links file} if
+@racket[shared?] is true, or the installation-wide @tech[#:doc
+reference-doc]{collection links file} otherwise.
The @racket[error-proc] argument is called to raise exceptions that
would be fatal to the @exec{raco link} command.
diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl
index 2e704785a8..268b7ca379 100644
--- a/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/scribblings/raco/setup.scrbl
@@ -917,6 +917,11 @@ v
which means that this result is not sensitive to the value of the
@racket[use-user-specific-search-paths] parameter.}
+@defproc[(find-config-dir) path?]{
+ Returns a path to the installation's @filepath{etc} directory, which
+ contains configuration and package information---including
+ configuration of some of the other directories (see @secref["config-file"]).}
+
@defproc[(find-doc-dir) (or/c path? #f)]{
Returns a path to the installation's @filepath{doc} directory.
The result is @racket[#f] if no such directory is available.}
diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl
index 68b4aa5624..f8d301956e 100644
--- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/collects.scrbl
@@ -1,5 +1,6 @@
#lang scribble/doc
-@(require "mz.rkt")
+@(require "mz.rkt"
+ (for-label setup/dirs))
@title[#:tag "collects"]{Libraries and Collections}
@@ -63,11 +64,11 @@ resolver}, as specified by the @racket[current-module-name-resolver]
parameter.
For the default @tech{module name resolver}, the search path for
-collections is determined by the content of @racket[(find-system-path
-'links-file)] (if it exists) and the
+collections is determined by the content of the @tech{collection links files}
+and the
@racket[current-library-collection-paths] parameter. The collection
links and then list of paths in
-@racket[current-library-collection-paths] is searched from first to
+@racket[current-library-collection-paths] are searched from first to
last to locate the first that contains @racket[_rel-string]. In other
words, the filesystem tree for each element in the link table and
search path is spliced together with the filesystem trees of other
@@ -196,20 +197,23 @@ The @deftech{collection links files} are used by
default @tech{module name resolver} to locate collections before
trying the @racket[(current-library-collection-paths)] search
path, but only if the @racket[use-collection-link-paths] parameter is set to
-@racket[#t]. Furthermore, a user-specific @tech{collection links file} takes
-precedence over an installation-wide @tech{collection links file}, but
-the user-specific @tech{collection links file} is used only the
+@racket[#t]. Furthermore, a user- and version-specific @tech{collection links file} takes
+precedence over a user-specific and all-version @tech{collection links file},
+which in turn takes precedence over an installation-wide @tech{collection links file}.
+The user-specific @tech{collection links files} are used only if the
@racket[use-user-specific-search-paths] parameter is set to
@racket[#t].
-The path of the user-specific @tech{collection links file} is by
-@racket[(find-system-path 'links-file)], while an installation-wide
-@tech{collection links file} is @filepath{links.rktd} in the
-@filepath{config} collection within the installation's main collection
-directory. Each @tech{collection links file} is cached by Racket, but
-the file is re-read if its timestamp changes.
+The path of the user- and version-specific @tech{collection links file} is
+@racket[(build-path (find-system-path 'addon-dir) (version) "links.rktd")].
+The path of the user-specific and all-version @tech{collection links file} is
+@racket[(build-path (find-system-path 'addon-dir) "links.rktd")].
+The path of the installation-wide @tech{collection links file} is
+@racket[(build-path (find-config-dir) "links.rktd")].
+Each @tech{collection links file} is cached by Racket, but
+the file is re-read if its content changes.
-Each @tech{collection links file} is @racket[read] with default reader
+A @tech{collection links file} is @racket[read] with default reader
parameter settings to obtain a list. Every element of the list must be
a link specification with one of the forms @racket[(list _string
_path)], @racket[(list _string _path _regexp)], @racket[(list 'root
diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl
index 1f66017474..37da3b4ef2 100644
--- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/filesystem.scrbl
@@ -85,23 +85,27 @@ by @racket[kind], which must be one of the following:
]}
- @item{@indexed-racket['links-file] --- the user-specific
- @tech{collection links file} for specifying the location of library
- @tech{collections}. This file is specified by the
- @indexed-envvar{PLTLINKSFILE} environment variable, and it can be
- overridden by the @DFlag{links} or @Flag{C} command-line flag. If no
+ @item{@indexed-racket['config-dir] --- a directory for
+ the installation's configuration, packages, and extensions.
+ This directory is specified by the
+ @indexed-envvar{PLTCONFIGDIR} environment variable, and it can be
+ overridden by the @DFlag{config} or @Flag{G} command-line flag. If no
environment variable or flag is specified, or if the value is not a
- legal path name, then this file defaults to @filepath{links.rktd} in
- the directory reported by @racket[(find-system-path 'addon-dir)].}
+ legal path name, then this directory defaults to an
+ @filepath{etc} directory relative to the current executable.
+ If the result of @racket[(find-system-path 'config-dir)] is a
+ relative path, it is relative to the current executable.
+ The directory might not exist.}
- @item{@indexed-racket['addon-dir] --- a directory for installing
- user-specific Racket extensions. This directory is specified by the
+ @item{@indexed-racket['addon-dir] --- a directory for
+ user-specific Racket configuration, packages, and extension.
+ This directory is specified by the
@indexed-envvar{PLTADDONDIR} environment variable, and it can be
overridden by the @DFlag{addon} or @Flag{A} command-line flag. If no
environment variable or flag is specified, or if the value is not a
legal path name, then this directory defaults to
@filepath{Library/Racket} in the user's home directory on Mac
- OS X and @racket['pref-dir] otherwise. This directory might not
+ OS X and @racket['pref-dir] otherwise. The directory might not
exist.}
@item{@indexed-racket['doc-dir] --- the standard directory for
diff --git a/pkgs/racket-pkgs/racket-doc/scribblings/reference/startup.scrbl b/pkgs/racket-pkgs/racket-doc/scribblings/reference/startup.scrbl
index c79f7b7835..17b96d4a3c 100644
--- a/pkgs/racket-pkgs/racket-doc/scribblings/reference/startup.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/scribblings/reference/startup.scrbl
@@ -285,11 +285,6 @@ flags:
@nonterm{dir} : Sets the directory that is returned by
@racket[(find-system-path 'addon-dir)].}
- @item{@FlagFirst{C} @nonterm{file} or @DFlagFirst{links}
- @nonterm{file} : Sets the user-specific @tech{collection links file} path
- that is returned by @racket[(find-system-path 'links-file)];
- see also @secref["links-file"].}
-
@item{@FlagFirst{U} or @DFlagFirst{no-user-path} : Omits
user-specific paths in the search for collections, C
libraries, etc. by initializing the
diff --git a/pkgs/racket-pkgs/racket-index/setup/scribble.rkt b/pkgs/racket-pkgs/racket-index/setup/scribble.rkt
index 773ddc0324..ee5e5c6c17 100644
--- a/pkgs/racket-pkgs/racket-index/setup/scribble.rkt
+++ b/pkgs/racket-pkgs/racket-index/setup/scribble.rkt
@@ -825,8 +825,6 @@
(or (not can-run?)
;; Need to rebuild if output file is older than input:
(my-time . >= . src-time)
- ;; Need to rebuild if database is out of sync:
- (provides-time . >= . info-out-time)
;; But we can use in/out information if they're already built;
;; this is mostly useful if we interrupt setup-plt after
;; it runs some documents without rendering them:
@@ -887,7 +885,8 @@
;; maybe info is up-to-date but not rendered doc:
(not (my-time . >= . src-time))))
#f
- #f
+ ;; Need to write if database is out of sync:
+ (provides-time . < . info-out-time)
vers
#f
#f))))
diff --git a/racket/lib/collects/pkg/lib.rkt b/racket/lib/collects/pkg/lib.rkt
index 79347a77c0..95bd56ee04 100644
--- a/racket/lib/collects/pkg/lib.rkt
+++ b/racket/lib/collects/pkg/lib.rkt
@@ -130,12 +130,6 @@
(define (pkg-lock-file)
(make-lock-file-name (pkg-db-file)))
-(define (link-version-regexp)
- (case (current-pkg-scope)
- [(installation shared) #f]
- [(user) (regexp (regexp-quote (version)))]
- [else (error "unknown package scope")]))
-
(define (make-metadata-namespace)
(make-base-empty-namespace))
@@ -593,13 +587,13 @@
(links pkg-dir
#:remove? #t
#:user? (not (eq? (current-pkg-scope) 'installation))
- #:version-regexp (link-version-regexp)
+ #:shared? (eq? (current-pkg-scope) 'shared)
#:root? (not (sc-pkg-info? pi)))]
[_
(links pkg-dir
#:remove? #t
#:user? (not (eq? (current-pkg-scope) 'installation))
- #:version-regexp (link-version-regexp)
+ #:shared? (eq? (current-pkg-scope) 'shared)
#:root? (not (sc-pkg-info? pi)))
(delete-directory/files pkg-dir)]))
@@ -1254,7 +1248,7 @@
(links final-pkg-dir
#:name single-collect
#:user? (not (eq? 'installation (current-pkg-scope)))
- #:version-regexp (link-version-regexp)
+ #:shared? (eq? 'shared (current-pkg-scope))
#:root? (not single-collect))
(define this-pkg-info
(if single-collect
diff --git a/racket/lib/collects/racket/HISTORY.txt b/racket/lib/collects/racket/HISTORY.txt
index a1da8043b9..e4451843c4 100644
--- a/racket/lib/collects/racket/HISTORY.txt
+++ b/racket/lib/collects/racket/HISTORY.txt
@@ -1,3 +1,16 @@
+Version 5.3.900.2
+Changed link-file handling to separate "user" and "shared" modes;
+ removed 'links-file mode for find-system-path, PLTLINKSFILE
+ environment variable, and -C command-line argument
+raco link: -u/--user mode installs a version-specific link,
+ added -s/--shared for user-specific, all-version links
+Added PLTCONFIGDIR
+
+Version 5.3.900.1
+Reorganized collections into packages
+Added 'config-dir mode for find-system-path
+setup/dirs: added find-config-dir
+
Version 5.3.4.11
Added current-directory-for-user, srcloc->string
Fixed is-a? so that it always signals an error when its second
diff --git a/racket/lib/collects/racket/sandbox.rkt b/racket/lib/collects/racket/sandbox.rkt
index e6ee278cda..9c2b693ae2 100644
--- a/racket/lib/collects/racket/sandbox.rkt
+++ b/racket/lib/collects/racket/sandbox.rkt
@@ -931,7 +931,8 @@
(map cdr (links #:user? #t #:with-path? #t))))
(read-bytecode ,(PLANET-BASE-DIR))
(exists ,(find-system-path 'addon-dir))
- (read ,(find-system-path 'links-file))
+ (read ,(build-path (find-system-path 'addon-dir) "links.rktd"))
+ (read ,(build-path (find-system-path 'addon-dir) (version) "links.rktd"))
(read ,(build-path (find-config-dir) "links.rktd"))
(read ,(find-lib-dir))
,@(compute-permissions allow-for-require allow-for-load)
diff --git a/racket/lib/collects/setup/commands/link.rkt b/racket/lib/collects/setup/commands/link.rkt
index 819c0c3db6..da74390c72 100644
--- a/racket/lib/collects/setup/commands/link.rkt
+++ b/racket/lib/collects/setup/commands/link.rkt
@@ -12,6 +12,7 @@
(define show-mode (make-parameter #f))
(define install-only (make-parameter #f))
(define user-only (make-parameter #f))
+(define user-shared (make-parameter #f))
(define link-symbol (string->symbol (short-program+command-name)))
@@ -36,8 +37,11 @@
[("-r" "--remove") "Remove links for the specified directories"
(remove-mode #t)]
#:once-any
- [("-u" "--user") "Adjust/list user-specific links"
+ [("-u" "--user") "Adjust/list user-specific, version-specific links"
(user-only #t)]
+ [("-s" "--shared") "Adjust/list user-specific links"
+ (user-only #t)
+ (user-shared #t)]
[("-i" "--installation") "Adjust/list installation-wide links"
(install-only #t)]
[("-f" "--file") file "Select an alternate link file"
@@ -54,21 +58,23 @@
(raise-user-error link-symbol
"expected a single directory for `--name' mode"))
-(define show-both?
+(define show-all?
(and (null? dirs)
(show-mode)
(not (user-only))
+ (not (user-shared))
(not (install-only))
(not (link-file))))
-(when show-both?
- (printf "User links:\n"))
+(when show-all?
+ (printf "User-specific, version-specific links:\n"))
-(define (go user?)
+(define (go user? shared?)
(apply links
dirs
#:root? (root-mode)
#:user? user?
+ #:shared? shared?
#:file (link-file)
#:name (link-name)
#:version-regexp (link-version)
@@ -79,15 +85,21 @@
#:repair? (repair-mode)))
(define l1
- (go (not (install-only))))
+ (go (not (install-only))
+ (user-shared)))
(define l2
(if (and (not (or (user-only)
+ (user-shared)
(install-only)))
(remove-mode))
- (go #f)
+ (append
+ (go #f #f)
+ (go #t #t))
null))
-(when show-both?
+(when show-all?
+ (printf "User-specific, all-version links:\n")
+ (void (links #:user? #t #:shared? #t #:show? #t))
(printf "Installation links:\n")
(void (links #:user? #f #:show? #t)))
diff --git a/racket/lib/collects/setup/dirs.rkt b/racket/lib/collects/setup/dirs.rkt
index 495db5034b..7f6435da8b 100644
--- a/racket/lib/collects/setup/dirs.rkt
+++ b/racket/lib/collects/setup/dirs.rkt
@@ -9,16 +9,7 @@
;; "config"
(define config-dir
- (delay (let ([c (find-system-path 'config-dir)])
- (if (absolute-path? c)
- c
- (or (parameterize ([current-directory (find-system-path 'orig-dir)])
- (find-executable-path (find-system-path 'exec-file) c))
- ;; This is a bad configuration, but avoid producing #f:
- (begin
- (log-error "missing configuration directory: ~a" c)
- (path->complete-path (find-system-path 'config-dir)
- (find-system-path 'orig-dir))))))))
+ (delay (complete-path (find-system-path 'config-dir))))
(define (find-config-dir)
(force config-dir))
diff --git a/racket/lib/collects/setup/link.rkt b/racket/lib/collects/setup/link.rkt
index 653eab8e73..77b723d874 100644
--- a/racket/lib/collects/setup/link.rkt
+++ b/racket/lib/collects/setup/link.rkt
@@ -10,6 +10,7 @@
#:file [in-file #f]
#:name [name #f]
#:version-regexp [version-regexp #f]
+ #:shared? [shared? #f]
#:root? [root? #f]
#:remove? [remove? #f]
#:show? [show? #f]
@@ -26,8 +27,10 @@
(check-name name))
(define file (or in-file
- (if user?
- (find-system-path 'links-file)
+ (if (or user? shared?)
+ (if shared?
+ (build-path (find-system-path 'addon-dir) "links.rktd")
+ (build-path (find-system-path 'addon-dir) (version) "links.rktd"))
(let ([d (find-config-dir)])
(if d
(build-path d "links.rktd")
diff --git a/racket/lib/collects/setup/setup-unit.rkt b/racket/lib/collects/setup/setup-unit.rkt
index 864b51c9f8..9372344261 100644
--- a/racket/lib/collects/setup/setup-unit.rkt
+++ b/racket/lib/collects/setup/setup-unit.rkt
@@ -340,8 +340,8 @@
(collection-cc! (list collection)
#:info-root cp
#:path (build-path cp collection)
- #:main? (equal? cp (find-collects-dir))))
- (let ([main-collects (find-collects-dir)])
+ #:main? (equal? cp main-collects-dir)))
+ (let ()
(define info-root (find-lib-dir))
(define info-path (build-path info-root "info-cache.rktd"))
(define (cc! col #:path path)
@@ -372,15 +372,16 @@
#:info-path info-path
#:info-path-mode 'abs-in-relative
#:omit-root 'dir))
- (for ([c+p (in-list (links #:with-path? #t))])
- (cc! (list (string->path (car c+p)))
- #:path (cdr c+p)))
- (for ([cp (in-list (links #:root? #t))]
- #:when (directory-exists? cp)
- [collection (directory-list cp)]
- #:unless (skip-collection-directory? collection)
- #:when (directory-exists? (build-path cp collection)))
- (cc! (list collection) #:path (build-path cp collection))))
+ (for ([shared? (in-list '(#t #f))])
+ (for ([c+p (in-list (links #:shared? shared? #:with-path? #t))])
+ (cc! (list (string->path (car c+p)))
+ #:path (cdr c+p)))
+ (for ([cp (in-list (links #:shared? shared? #:root? #t))]
+ #:when (directory-exists? cp)
+ [collection (directory-list cp)]
+ #:unless (skip-collection-directory? collection)
+ #:when (directory-exists? (build-path cp collection)))
+ (cc! (list collection) #:path (build-path cp collection)))))
;; `all-collections' lists all top-level collections (not from Planet):
(define all-collections
@@ -841,7 +842,7 @@
(compile-directory-zos dir info
#:omit-root (cc-omit-root cc)
#:managed-compile-zo caching-managed-compile-zo
- #:skip-path (and (avoid-main-installation) (find-collects-dir))
+ #:skip-path (and (avoid-main-installation) main-collects-dir)
#:skip-doc-sources? (not make-docs?))))))
(if (eq? 0 gcs)
0
@@ -1025,7 +1026,7 @@
(for ([c (in-list (current-library-collection-paths))])
(when (and (directory-exists? c)
(not (and (avoid-main-installation)
- (equal? c (find-collects-dir)))))
+ (equal? c main-collects-dir))))
(define info-path (build-path c "info-domain" "compiled" "cache.rktd"))
(when (file-exists? info-path)
(get-info-ht c info-path 'relative))))
diff --git a/racket/src/racket/cmdline.inc b/racket/src/racket/cmdline.inc
index 2e5c8c08eb..42abbff80e 100644
--- a/racket/src/racket/cmdline.inc
+++ b/racket/src/racket/cmdline.inc
@@ -753,7 +753,6 @@ static int run_from_cmd_line(int argc, char *_argv[],
Scheme_Object *collects_path = NULL, *collects_extra = NULL, *addon_dir = NULL;
Scheme_Object *config_path = NULL;
char *compiled_paths = NULL;
- Scheme_Object *links_file = NULL;
#ifndef NO_FILE_SYSTEM_UTILS
Scheme_Object *collects_paths_l, *collects_paths_r;
#endif
@@ -1033,8 +1032,6 @@ static int run_from_cmd_line(int argc, char *_argv[],
argv[0] = "-A";
else if (!strcmp("--config", argv[0]))
argv[0] = "-G";
- else if (!strcmp("--links", argv[0]))
- argv[0] = "-C";
# ifdef CMDLINE_STDIO_FLAG
else if (!strcmp("--stdio", argv[0]))
argv[0] = "-z";
@@ -1119,17 +1116,6 @@ static int run_from_cmd_line(int argc, char *_argv[],
addon_dir = check_make_path(prog, real_switch, argv[0]);
was_config_flag = 1;
break;
- case 'C':
- if (argc < 2) {
- PRINTF("%s: missing path after %s switch\n",
- prog, real_switch);
- goto show_need_help;
- }
- argv++;
- --argc;
- links_file = check_make_path(prog, real_switch, argv[0]);
- was_config_flag = 1;
- break;
case 'U':
scheme_set_ignore_user_paths(1);
was_config_flag = 1;
@@ -1452,6 +1438,16 @@ static int run_from_cmd_line(int argc, char *_argv[],
}
scheme_set_collects_path(collects_path);
+# ifdef GETENV_FUNCTION
+ if (!config_path) {
+ char *s;
+ s = getenv("PLTCONFIGDIR");
+ if (s) {
+ s = scheme_expand_filename(s, -1, NULL, NULL, 0);
+ if (s) config_path = scheme_make_path(s);
+ }
+ }
+# endif
if (!config_path)
config_path = scheme_make_path(scheme_configdir XFORM_OK_PLUS _configdir_offset);
else
@@ -1522,24 +1518,6 @@ static int run_from_cmd_line(int argc, char *_argv[],
}
#endif /* NO_FILE_SYSTEM_UTILS */
-#ifndef NO_FILE_SYSTEM_UTILS
- /* Setup path for "links" file: */
-# ifdef GETENV_FUNCTION
- if (!links_file) {
- char *s;
- s = getenv("PLTLINKSFILE");
- if (s) {
- s = scheme_expand_filename(s, -1, NULL, NULL, 0);
- if (s) links_file = scheme_make_path(s);
- }
- }
-# endif
- if (links_file) {
- links_file = scheme_path_to_complete_path(links_file, NULL);
- scheme_set_links_file(links_file);
- }
-#endif /* NO_FILE_SYSTEM_UTILS */
-
/* Creates the main kernel environment */
global_env = mk_basic_env();
@@ -1633,7 +1611,6 @@ static int run_from_cmd_line(int argc, char *_argv[],
" -G
, --config : Main configuration directory at \n"
" -A , --addon : Addon directory at \n"
" -R , --compiled : Set compiled-file search roots to \n"
- " -C , --links : User-specific collection links at \n"
" -U, --no-user-path : Ignore user-specific collects, etc.\n"
" -N , --name : Sets `(find-system-path 'run-file)' to \n"
# ifdef CMDLINE_STDIO_FLAG
diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h
index b0b94d1bb0..43ed4110f7 100644
--- a/racket/src/racket/include/scheme.h
+++ b/racket/src/racket/include/scheme.h
@@ -1910,7 +1910,6 @@ MZ_EXTERN void scheme_set_collects_path(Scheme_Object *p);
MZ_EXTERN void scheme_set_config_path(Scheme_Object *p);
MZ_EXTERN void scheme_set_original_dir(Scheme_Object *d);
MZ_EXTERN void scheme_set_addon_dir(Scheme_Object *p);
-MZ_EXTERN void scheme_set_links_file(Scheme_Object *p);
MZ_EXTERN void scheme_set_command_line_arguments(Scheme_Object *vec);
MZ_EXTERN void scheme_set_compiled_file_paths(Scheme_Object *list);
MZ_EXTERN void scheme_set_compiled_file_roots(Scheme_Object *list);
diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc
index c46ac06b8d..7248322b0e 100644
--- a/racket/src/racket/src/cstartup.inc
+++ b/racket/src/racket/src/cstartup.inc
@@ -1,43 +1,43 @@
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,
-14,0,19,0,26,0,29,0,36,0,49,0,53,0,60,0,65,0,69,0,74,
+14,0,19,0,32,0,37,0,40,0,47,0,54,0,59,0,63,0,67,0,74,
0,83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,
149,0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,
1,129,1,162,1,224,1,24,2,105,2,161,2,166,2,187,2,84,3,105,3,
158,3,225,3,114,4,2,5,56,5,67,5,150,5,0,0,113,7,0,0,69,
-35,37,109,105,110,45,115,116,120,29,11,11,11,64,99,111,110,100,66,108,101,
-116,114,101,99,62,111,114,66,117,110,108,101,115,115,72,112,97,114,97,109,101,
-116,101,114,105,122,101,63,97,110,100,66,100,101,102,105,110,101,64,108,101,116,
-42,63,108,101,116,64,119,104,101,110,68,104,101,114,101,45,115,116,120,29,11,
+35,37,109,105,110,45,115,116,120,29,11,11,11,64,119,104,101,110,72,112,97,
+114,97,109,101,116,101,114,105,122,101,64,99,111,110,100,62,111,114,66,100,101,
+102,105,110,101,66,108,101,116,114,101,99,64,108,101,116,42,63,108,101,116,63,
+97,110,100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,
11,11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,
11,29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,
103,105,110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,
120,73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,
97,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,
101,121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,
-8,240,20,89,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,
-36,16,20,2,10,2,2,2,7,2,2,2,5,2,2,2,6,2,2,2,3,
-2,2,2,8,2,2,2,9,2,2,2,4,2,2,2,11,2,2,2,12,2,
-2,97,37,11,8,240,20,89,0,0,93,159,2,16,36,37,16,2,2,13,161,
-2,2,37,2,13,2,2,2,13,96,38,11,8,240,20,89,0,0,16,0,96,
-11,11,8,240,20,89,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,
+8,240,49,89,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,
+36,16,20,2,3,2,2,2,5,2,2,2,4,2,2,2,6,2,2,2,7,
+2,2,2,8,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,12,2,
+2,97,37,11,8,240,49,89,0,0,93,159,2,16,36,37,16,2,2,13,161,
+2,2,37,2,13,2,2,2,13,96,38,11,8,240,49,89,0,0,16,0,96,
+11,11,8,240,49,89,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,
2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,161,4,195,
249,22,154,4,80,158,39,36,251,22,89,2,18,248,22,101,199,12,249,22,79,
2,19,248,22,103,201,27,248,22,161,4,195,249,22,154,4,80,158,39,36,251,
22,89,2,18,248,22,101,199,249,22,79,2,19,248,22,103,201,12,27,248,22,
81,248,22,161,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,
248,22,81,194,248,22,132,18,193,249,22,154,4,80,158,39,36,251,22,89,2,
-18,248,22,132,18,199,249,22,79,2,8,248,22,133,18,201,11,18,100,10,13,
+18,248,22,132,18,199,249,22,79,2,11,248,22,133,18,201,11,18,100,10,13,
16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,
-11,2,20,3,1,8,101,110,118,49,55,51,56,50,16,4,11,11,2,21,3,
-1,8,101,110,118,49,55,51,56,51,27,248,22,81,248,22,161,4,196,28,248,
+11,2,20,3,1,8,101,110,118,49,55,51,57,48,16,4,11,11,2,21,3,
+1,8,101,110,118,49,55,51,57,49,27,248,22,81,248,22,161,4,196,28,248,
22,87,193,20,14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,132,18,
193,249,22,154,4,80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,
22,89,2,23,248,22,132,18,201,251,22,89,2,18,2,23,2,23,249,22,79,
-2,5,248,22,133,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11,
+2,6,248,22,133,18,204,18,100,11,13,16,6,36,2,14,2,2,11,11,11,
8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,
-55,51,56,53,16,4,11,11,2,21,3,1,8,101,110,118,49,55,51,56,54,
+55,51,57,51,16,4,11,11,2,21,3,1,8,101,110,118,49,55,51,57,52,
248,22,161,4,193,27,248,22,161,4,194,249,22,79,248,22,89,248,22,80,196,
248,22,133,18,195,27,248,22,81,248,22,161,4,23,197,1,249,22,154,4,80,
158,39,36,28,248,22,64,248,22,155,4,248,22,80,23,198,2,27,249,22,2,
@@ -52,7 +52,7 @@
8,36,37,47,11,9,222,33,43,248,22,161,4,248,22,80,201,248,22,133,18,
198,27,248,22,81,248,22,161,4,196,27,248,22,161,4,248,22,80,195,249,22,
154,4,80,158,40,36,28,248,22,87,195,250,22,90,2,22,9,248,22,81,199,
-250,22,89,2,11,248,22,89,248,22,80,199,250,22,90,2,10,248,22,133,18,
+250,22,89,2,10,248,22,89,248,22,80,199,250,22,90,2,9,248,22,133,18,
201,248,22,81,202,27,248,22,81,248,22,161,4,23,197,1,27,249,22,1,22,
93,249,22,2,22,161,4,248,22,161,4,248,22,80,199,248,22,181,4,249,22,
154,4,80,158,41,36,251,22,89,1,22,119,105,116,104,45,99,111,110,116,105,
@@ -63,13 +63,13 @@
22,81,204,27,248,22,81,248,22,161,4,196,28,248,22,87,193,20,14,159,37,
36,37,249,22,154,4,80,158,39,36,27,248,22,161,4,248,22,80,197,28,249,
22,159,9,62,61,62,248,22,155,4,248,22,101,196,250,22,89,2,22,248,22,
-89,249,22,89,21,93,2,27,248,22,80,199,250,22,90,2,3,249,22,89,2,
+89,249,22,89,21,93,2,27,248,22,80,199,250,22,90,2,5,249,22,89,2,
27,249,22,89,248,22,110,203,2,27,248,22,81,202,251,22,89,2,18,28,249,
22,159,9,248,22,155,4,248,22,80,200,64,101,108,115,101,10,248,22,132,18,
-197,250,22,90,2,22,9,248,22,133,18,200,249,22,79,2,3,248,22,81,202,
+197,250,22,90,2,22,9,248,22,133,18,200,249,22,79,2,5,248,22,81,202,
99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,
-4,11,11,2,20,3,1,8,101,110,118,49,55,52,48,56,16,4,11,11,2,
-21,3,1,8,101,110,118,49,55,52,48,57,18,158,94,10,64,118,111,105,100,
+4,11,11,2,20,3,1,8,101,110,118,49,55,52,49,54,16,4,11,11,2,
+21,3,1,8,101,110,118,49,55,52,49,55,18,158,94,10,64,118,111,105,100,
8,48,27,248,22,81,248,22,161,4,196,249,22,154,4,80,158,39,36,28,248,
22,64,248,22,155,4,248,22,80,197,250,22,89,2,28,248,22,89,248,22,132,
18,199,248,22,101,198,27,248,22,155,4,248,22,132,18,197,250,22,89,2,28,
@@ -82,662 +82,675 @@
10,2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,
16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,
5,11,20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,114,159,36,
-16,1,2,13,16,1,33,33,10,16,5,2,6,88,163,8,36,37,53,37,9,
-223,0,33,34,36,20,114,159,36,16,1,2,13,16,0,11,16,5,2,12,88,
+16,1,2,13,16,1,33,33,10,16,5,2,12,88,163,8,36,37,53,37,9,
+223,0,33,34,36,20,114,159,36,16,1,2,13,16,0,11,16,5,2,3,88,
163,8,36,37,53,37,9,223,0,33,35,36,20,114,159,36,16,1,2,13,16,
-0,11,16,5,2,8,88,163,8,36,37,53,37,9,223,0,33,36,36,20,114,
-159,36,16,1,2,13,16,1,33,37,11,16,5,2,5,88,163,8,36,37,56,
+0,11,16,5,2,11,88,163,8,36,37,53,37,9,223,0,33,36,36,20,114,
+159,36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,163,8,36,37,56,
37,9,223,0,33,38,36,20,114,159,36,16,1,2,13,16,1,33,39,11,16,
-5,2,11,88,163,8,36,37,58,37,9,223,0,33,42,36,20,114,159,36,16,
-1,2,13,16,0,11,16,5,2,4,88,163,8,36,37,53,37,9,223,0,33,
-44,36,20,114,159,36,16,1,2,13,16,0,11,16,5,2,10,88,163,8,36,
+5,2,10,88,163,8,36,37,58,37,9,223,0,33,42,36,20,114,159,36,16,
+1,2,13,16,0,11,16,5,2,8,88,163,8,36,37,53,37,9,223,0,33,
+44,36,20,114,159,36,16,1,2,13,16,0,11,16,5,2,9,88,163,8,36,
37,54,37,9,223,0,33,45,36,20,114,159,36,16,1,2,13,16,0,11,16,
-5,2,7,88,163,8,36,37,56,37,9,223,0,33,46,36,20,114,159,36,16,
-1,2,13,16,0,11,16,5,2,3,88,163,8,36,37,58,37,9,223,0,33,
-47,36,20,114,159,36,16,1,2,13,16,1,33,49,11,16,5,2,9,88,163,
+5,2,4,88,163,8,36,37,56,37,9,223,0,33,46,36,20,114,159,36,16,
+1,2,13,16,0,11,16,5,2,5,88,163,8,36,37,58,37,9,223,0,33,
+47,36,20,114,159,36,16,1,2,13,16,1,33,49,11,16,5,2,7,88,163,
8,36,37,54,37,9,223,0,33,50,36,20,114,159,36,16,1,2,13,16,0,
11,16,0,94,2,16,2,17,93,2,16,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 2051);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,144,0,0,0,1,0,0,8,0,
+0,0,0,0,0,0,0,0,0,0,0,0,148,0,0,0,1,0,0,8,0,
21,0,26,0,43,0,55,0,77,0,106,0,121,0,139,0,151,0,167,0,181,
-0,203,0,219,0,236,0,253,0,8,1,14,1,23,1,30,1,37,1,49,1,
-61,1,73,1,97,1,129,1,147,1,166,1,186,1,202,1,220,1,251,1,9,
-2,26,2,70,2,78,2,83,2,127,2,134,2,144,2,159,2,168,2,173,2,
-175,2,199,2,220,2,230,2,236,2,25,3,28,3,32,3,56,3,95,3,98,
-3,111,3,121,3,132,3,145,3,197,3,220,3,228,3,252,3,17,4,230,4,
-4,5,141,8,164,8,181,8,129,10,232,10,246,10,150,11,82,13,91,13,100,
-13,114,13,124,13,165,14,12,15,85,15,158,15,6,16,35,16,106,16,243,16,
-58,17,12,18,124,18,131,18,174,18,188,18,42,19,200,19,207,19,13,20,39,
-20,127,20,23,21,83,21,90,21,214,21,233,21,130,22,146,22,60,24,88,24,
-97,24,172,25,190,25,204,25,225,25,241,25,33,26,54,26,74,26,92,26,147,
-26,117,29,13,30,172,30,186,30,81,33,209,35,222,35,111,37,48,38,50,38,
-75,38,90,38,14,40,208,40,223,40,232,40,239,40,108,41,233,41,84,43,175,
-43,12,44,107,44,57,45,89,45,219,45,0,0,240,50,0,0,67,35,37,117,
-116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,
-115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,71,114,101,
-114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101,99,117,
-116,97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105,115,116,
-45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,74,45,99,
-104,101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,
-111,108,108,101,99,116,105,111,110,71,45,99,104,101,99,107,45,102,97,105,108,
-75,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,73,102,105,110,100,
-45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99,116,105,111,110,
-45,102,105,108,101,45,112,97,116,104,75,117,115,101,114,45,108,105,110,107,115,
-45,112,97,116,104,76,117,115,101,114,45,108,105,110,107,115,45,99,97,99,104,
-101,76,117,115,101,114,45,108,105,110,107,115,45,115,116,97,109,112,70,108,105,
-110,107,115,45,112,97,116,104,65,113,117,111,116,101,68,35,37,112,97,114,97,
-109,122,29,94,2,18,2,19,11,29,94,2,18,2,19,11,71,108,105,110,107,
-115,45,99,97,99,104,101,71,108,105,110,107,115,45,115,116,97,109,112,71,102,
-105,108,101,45,62,115,116,97,109,112,1,22,103,101,116,45,108,105,110,107,101,
-100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97,108,
-105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114,101,
-110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97,108,108,
-78,112,97,116,104,45,97,100,106,117,115,116,45,115,117,102,102,105,120,79,112,
-97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,75,112,97,
-116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97,100,47,117,115,
-101,45,99,111,109,112,105,108,101,100,1,29,102,105,110,100,45,108,105,98,114,
-97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115,73,
-101,109,98,101,100,100,101,100,45,108,111,97,100,76,110,111,114,109,97,108,45,
-112,97,116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32,112,97,116,
-104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63,32,112,97,
-116,104,45,115,116,114,105,110,103,63,41,67,119,105,110,100,111,119,115,6,2,
-2,92,49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115,116,114,105,
-110,103,63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,
-116,101,109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92,82,69,76,
-92,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,68,114,101,108,97,
-116,105,118,101,64,108,111,111,112,5,0,6,21,21,105,110,118,97,108,105,100,
-32,114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40,97,110,121,
-47,99,32,46,32,45,62,32,46,32,97,110,121,41,69,101,120,101,99,45,102,
-105,108,101,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,114,101,97,
-100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,110,107,115,
-32,102,105,108,101,32,126,115,58,32,126,97,6,0,0,6,1,1,47,6,21,
-21,40,111,114,47,99,32,115,116,114,105,110,103,63,32,98,121,116,101,115,63,
-41,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,
-105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,5,1,
-95,5,11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100,111,110,45,
-100,105,114,6,8,8,99,111,108,108,101,99,116,115,72,99,111,108,108,101,99,
-116,115,45,100,105,114,27,248,22,150,15,23,195,2,28,23,193,2,192,86,94,
-23,193,1,28,248,22,144,7,23,195,2,27,248,22,173,15,23,196,2,28,23,
-193,2,192,86,94,23,193,1,248,22,174,15,23,196,1,11,0,21,35,114,120,
-34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,
-114,120,34,47,34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,
-91,47,92,92,93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,
-47,92,92,93,42,41,36,34,86,94,28,28,248,22,151,15,23,195,2,10,28,
-248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,
-23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,2,34,2,35,
-23,197,2,28,28,248,22,151,15,23,195,2,249,22,159,9,248,22,152,15,23,
-197,2,2,36,249,22,159,9,247,22,171,8,2,36,27,28,248,22,144,7,23,
-196,2,23,195,2,248,22,156,8,248,22,155,15,23,197,2,28,249,22,145,16,
-2,60,23,195,2,86,94,23,193,1,28,248,22,144,7,23,196,2,248,22,158,
-15,23,196,1,194,27,248,22,183,7,23,195,1,249,22,159,15,248,22,159,8,
-250,22,153,16,2,61,28,249,22,145,16,2,62,23,201,2,23,199,1,250,22,
-153,16,2,63,23,202,1,2,37,80,159,44,37,38,2,36,28,248,22,144,7,
-23,195,2,248,22,158,15,23,195,1,193,0,28,35,114,120,34,94,92,92,92,
-92,92,92,92,92,91,63,93,92,92,92,92,85,78,67,92,92,92,92,34,86,
-95,28,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,
-248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,10,248,22,151,15,
-23,195,2,12,252,22,168,11,2,5,2,38,36,23,199,2,23,200,2,28,28,
-28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,
-15,23,196,2,10,248,22,174,15,23,196,2,11,10,248,22,151,15,23,196,2,
-12,252,22,168,11,2,5,2,38,37,23,199,2,23,200,2,27,28,248,22,151,
-15,23,196,2,248,22,152,15,23,196,2,247,22,153,15,86,95,28,28,248,22,
-175,15,23,196,2,10,249,22,159,9,247,22,153,15,23,195,2,12,253,22,170,
-11,2,5,6,54,54,112,97,116,104,32,105,115,32,110,111,116,32,99,111,109,
-112,108,101,116,101,32,97,110,100,32,110,111,116,32,116,104,101,32,112,108,97,
-116,102,111,114,109,39,115,32,99,111,110,118,101,110,116,105,111,110,2,39,23,
-201,2,6,24,24,112,108,97,116,102,111,114,109,32,99,111,110,118,101,110,116,
-105,111,110,32,116,121,112,101,247,22,153,15,28,249,22,159,9,28,248,22,151,
-15,23,199,2,248,22,152,15,23,199,2,247,22,153,15,23,195,2,12,253,22,
-170,11,2,5,6,37,37,103,105,118,101,110,32,112,97,116,104,115,32,117,115,
-101,32,100,105,102,102,101,114,101,110,116,32,99,111,110,118,101,110,116,105,111,
-110,115,2,39,23,201,2,6,9,9,114,111,111,116,32,112,97,116,104,23,202,
-2,27,27,248,22,179,15,28,248,22,175,15,23,199,2,23,198,1,248,22,176,
-15,23,199,1,86,94,28,28,248,22,151,15,23,194,2,10,28,248,22,150,15,
-23,194,2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,
-248,22,174,15,23,194,2,11,12,250,22,168,11,2,34,2,35,23,196,2,28,
-28,248,22,151,15,23,194,2,249,22,159,9,248,22,152,15,23,196,2,2,36,
-249,22,159,9,247,22,171,8,2,36,27,28,248,22,144,7,23,195,2,23,194,
-2,248,22,156,8,248,22,155,15,23,196,2,28,249,22,145,16,2,60,23,195,
-2,86,94,23,193,1,28,248,22,144,7,23,195,2,248,22,158,15,23,195,1,
-193,27,248,22,183,7,23,195,1,249,22,159,15,248,22,159,8,250,22,153,16,
-2,61,28,249,22,145,16,2,62,23,201,2,23,199,1,250,22,153,16,2,63,
-23,202,1,2,37,80,159,47,37,38,2,36,28,248,22,144,7,23,194,2,248,
-22,158,15,23,194,1,192,27,248,22,155,15,23,195,2,28,249,22,159,9,23,
-197,2,64,117,110,105,120,28,249,22,141,8,23,195,1,5,1,47,86,95,23,
-195,1,23,194,1,28,248,22,151,15,23,199,2,197,248,22,158,15,23,199,1,
-249,22,168,15,23,200,1,249,22,159,15,249,22,144,8,248,22,155,15,23,201,
-1,37,23,199,1,28,249,22,159,9,23,197,2,2,36,249,22,168,15,23,200,
-1,249,22,159,15,28,249,22,145,16,0,27,35,114,120,34,94,92,92,92,92,
-92,92,92,92,91,63,93,92,92,92,92,91,97,45,122,93,58,34,23,199,2,
-251,22,145,8,2,40,250,22,144,8,23,204,2,40,41,5,1,92,249,22,144,
-8,23,203,1,42,28,249,22,145,16,2,65,23,199,2,249,22,145,8,2,40,
-249,22,144,8,23,201,1,40,28,249,22,145,16,2,65,23,199,2,249,22,145,
-8,2,40,249,22,144,8,23,201,1,40,28,249,22,145,16,0,14,35,114,120,
-34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,145,8,5,4,85,
-78,67,92,249,22,144,8,23,201,1,38,28,249,22,145,16,0,12,35,114,120,
-34,94,91,97,45,122,93,58,34,23,199,2,249,22,145,8,250,22,144,8,23,
-202,2,36,37,249,22,144,8,23,201,1,38,86,94,23,197,1,12,23,199,1,
-12,32,67,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120,101,99,
-222,33,70,32,68,88,163,8,36,40,58,11,64,110,101,120,116,222,33,69,27,
-248,22,177,15,23,196,2,28,249,22,161,9,23,195,2,23,197,1,11,28,248,
-22,173,15,23,194,2,27,249,22,168,15,23,197,1,23,196,1,28,23,197,2,
-90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,95,23,195,1,
-23,194,1,27,28,23,202,2,27,248,22,177,15,23,199,2,28,249,22,161,9,
-23,195,2,23,200,2,11,28,248,22,173,15,23,194,2,250,2,67,23,205,2,
-23,206,2,249,22,168,15,23,200,2,23,198,1,250,2,67,23,205,2,23,206,
-2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15,
-23,196,2,27,249,22,168,15,23,198,2,23,205,2,28,28,248,22,163,15,193,
-10,248,22,162,15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,
-203,2,11,27,248,22,177,15,23,200,2,28,249,22,161,9,23,195,2,23,201,
-1,11,28,248,22,173,15,23,194,2,250,2,67,23,206,1,23,207,1,249,22,
-168,15,23,201,1,23,198,1,250,2,67,205,206,195,192,86,94,23,194,1,28,
-23,196,2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,95,
-23,195,1,23,194,1,27,28,23,201,2,27,248,22,177,15,23,199,2,28,249,
-22,161,9,23,195,2,23,200,2,11,28,248,22,173,15,23,194,2,250,2,67,
-23,204,2,23,205,2,249,22,168,15,23,200,2,23,198,1,250,2,67,23,204,
-2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,
-22,150,15,23,196,2,27,249,22,168,15,23,198,2,23,204,2,28,28,248,22,
-163,15,193,10,248,22,162,15,193,192,11,11,28,23,193,2,192,86,94,23,193,
-1,28,23,202,2,11,27,248,22,177,15,23,200,2,28,249,22,161,9,23,195,
-2,23,201,1,11,28,248,22,173,15,23,194,2,250,2,67,23,205,1,23,206,
-1,249,22,168,15,23,201,1,23,198,1,250,2,67,204,205,195,192,28,23,193,
-2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,95,23,195,
-1,23,194,1,27,28,23,198,2,251,2,68,23,198,2,23,203,2,23,201,2,
-23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15,195,
-27,249,22,168,15,197,200,28,28,248,22,163,15,193,10,248,22,162,15,193,192,
-11,11,28,192,192,28,198,11,251,2,68,198,203,201,202,194,32,71,88,163,8,
-36,40,58,11,2,43,222,33,72,28,248,22,87,23,197,2,11,27,248,22,176,
-15,248,22,80,23,199,2,27,249,22,168,15,23,196,1,23,197,2,28,248,22,
-162,15,23,194,2,250,2,67,198,199,195,86,94,23,193,1,27,248,22,81,23,
-200,1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,
-27,249,22,168,15,23,196,1,23,200,2,28,248,22,162,15,23,194,2,250,2,
-67,201,202,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,
-194,2,11,27,248,22,176,15,248,22,80,195,27,249,22,168,15,23,196,1,202,
-28,248,22,162,15,193,250,2,67,204,205,195,251,2,71,204,205,206,248,22,81,
-199,86,95,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,
-28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,
-11,2,6,2,41,23,197,2,28,28,23,195,2,28,28,248,22,150,15,23,196,
+0,203,0,219,0,236,0,253,0,15,1,34,1,53,1,64,1,70,1,79,1,
+86,1,93,1,105,1,117,1,129,1,153,1,185,1,203,1,222,1,242,1,2,
+2,20,2,51,2,65,2,82,2,126,2,134,2,139,2,183,2,190,2,200,2,
+215,2,224,2,229,2,231,2,255,2,20,3,30,3,43,3,53,3,59,3,104,
+3,107,3,111,3,135,3,174,3,177,3,190,3,201,3,214,3,10,4,33,4,
+41,4,65,4,86,4,43,5,73,5,210,8,233,8,250,8,198,10,45,11,59,
+11,219,11,151,13,160,13,169,13,183,13,193,13,234,14,81,15,154,15,227,15,
+75,16,104,16,175,16,56,17,127,17,81,18,182,18,189,18,232,18,246,18,100,
+19,2,20,9,20,72,20,98,20,200,20,139,21,199,21,206,21,74,22,93,22,
+246,22,6,23,212,24,244,24,253,24,72,26,90,26,104,26,125,26,141,26,189,
+26,210,26,230,26,248,26,47,27,17,30,209,30,112,31,126,31,21,34,149,36,
+164,36,54,38,248,38,250,38,20,39,35,39,215,40,153,41,168,41,177,41,184,
+41,53,42,178,42,29,44,120,44,213,44,52,45,2,46,34,46,164,46,0,0,
+248,51,0,0,67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,
+105,110,103,63,64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,
+45,112,97,116,104,71,114,101,114,111,111,116,45,112,97,116,104,1,20,102,105,
+110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,1,27,112,
+97,116,104,45,108,105,115,116,45,115,116,114,105,110,103,45,62,112,97,116,104,
+45,108,105,115,116,74,45,99,104,101,99,107,45,114,101,108,112,97,116,104,77,
+45,99,104,101,99,107,45,99,111,108,108,101,99,116,105,111,110,71,45,99,104,
+101,99,107,45,102,97,105,108,75,99,111,108,108,101,99,116,105,111,110,45,112,
+97,116,104,73,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,
+108,108,101,99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,75,117,115,
+101,114,45,108,105,110,107,115,45,112,97,116,104,76,117,115,101,114,45,108,105,
+110,107,115,45,99,97,99,104,101,76,117,115,101,114,45,108,105,110,107,115,45,
+115,116,97,109,112,77,115,104,97,114,101,100,45,108,105,110,107,115,45,112,97,
+116,104,78,115,104,97,114,101,100,45,108,105,110,107,115,45,99,97,99,104,101,
+78,115,104,97,114,101,100,45,108,105,110,107,115,45,115,116,97,109,112,70,108,
+105,110,107,115,45,112,97,116,104,65,113,117,111,116,101,68,35,37,112,97,114,
+97,109,122,29,94,2,21,2,22,11,29,94,2,21,2,22,11,71,108,105,110,
+107,115,45,99,97,99,104,101,71,108,105,110,107,115,45,115,116,97,109,112,71,
+102,105,108,101,45,62,115,116,97,109,112,1,22,103,101,116,45,108,105,110,107,
+101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97,
+108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114,
+101,110,99,101,77,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97,108,
+108,78,112,97,116,104,45,97,100,106,117,115,116,45,115,117,102,102,105,120,79,
+112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,75,112,
+97,116,104,45,97,100,100,45,115,117,102,102,105,120,77,108,111,97,100,47,117,
+115,101,45,99,111,109,112,105,108,101,100,1,29,102,105,110,100,45,108,105,98,
+114,97,114,121,45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115,
+73,101,109,98,101,100,100,101,100,45,108,111,97,100,76,110,111,114,109,97,108,
+45,112,97,116,104,45,99,97,115,101,6,41,41,40,111,114,47,99,32,112,97,
+116,104,45,102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63,32,112,
+97,116,104,45,115,116,114,105,110,103,63,41,67,119,105,110,100,111,119,115,6,
+2,2,92,49,6,41,41,40,111,114,47,99,32,112,97,116,104,45,115,116,114,
+105,110,103,63,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115,121,
+115,116,101,109,63,41,6,4,4,112,97,116,104,5,8,92,92,63,92,82,69,
+76,92,6,12,12,112,97,116,104,45,115,116,114,105,110,103,63,68,114,101,108,
+97,116,105,118,101,64,108,111,111,112,5,0,6,21,21,105,110,118,97,108,105,
+100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40,97,110,
+121,47,99,32,46,32,45,62,32,46,32,97,110,121,41,69,97,100,100,111,110,
+45,100,105,114,6,10,10,108,105,110,107,115,46,114,107,116,100,69,101,120,101,
+99,45,102,105,108,101,65,101,114,114,111,114,6,42,42,101,114,114,111,114,32,
+114,101,97,100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32,108,105,
+110,107,115,32,102,105,108,101,32,126,115,58,32,126,97,6,0,0,6,1,1,
+47,6,21,21,40,111,114,47,99,32,115,116,114,105,110,103,63,32,98,121,116,
+101,115,63,41,6,36,36,99,97,110,110,111,116,32,97,100,100,32,97,32,115,
+117,102,102,105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,
+32,5,1,95,5,11,80,76,84,67,79,76,76,69,67,84,83,6,8,8,99,
+111,108,108,101,99,116,115,72,99,111,108,108,101,99,116,115,45,100,105,114,27,
+248,22,150,15,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,144,
+7,23,195,2,27,248,22,173,15,23,196,2,28,23,193,2,192,86,94,23,193,
+1,248,22,174,15,23,196,1,11,0,21,35,114,120,34,94,91,92,92,93,91,
+92,92,93,91,63,93,91,92,92,93,34,0,6,35,114,120,34,47,34,0,22,
+35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92,93,42,36,
+34,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42,41,36,
+34,86,94,28,28,248,22,151,15,23,195,2,10,28,248,22,150,15,23,195,2,
+10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,
+15,23,195,2,11,12,250,22,168,11,2,37,2,38,23,197,2,28,28,248,22,
+151,15,23,195,2,249,22,159,9,248,22,152,15,23,197,2,2,39,249,22,159,
+9,247,22,171,8,2,39,27,28,248,22,144,7,23,196,2,23,195,2,248,22,
+156,8,248,22,155,15,23,197,2,28,249,22,145,16,2,64,23,195,2,86,94,
+23,193,1,28,248,22,144,7,23,196,2,248,22,158,15,23,196,1,194,27,248,
+22,183,7,23,195,1,249,22,159,15,248,22,159,8,250,22,153,16,2,65,28,
+249,22,145,16,2,66,23,201,2,23,199,1,250,22,153,16,2,67,23,202,1,
+2,40,80,159,44,37,38,2,39,28,248,22,144,7,23,195,2,248,22,158,15,
+23,195,1,193,0,28,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,
+93,92,92,92,92,85,78,67,92,92,92,92,34,86,95,28,28,28,248,22,150,
+15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195,2,
+10,248,22,174,15,23,195,2,11,10,248,22,151,15,23,195,2,12,252,22,168,
+11,2,5,2,41,36,23,199,2,23,200,2,28,28,28,248,22,150,15,23,196,
2,10,28,248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248,22,
-174,15,23,196,2,11,248,22,173,15,23,196,2,11,10,12,250,22,168,11,2,
-6,6,45,45,40,111,114,47,99,32,35,102,32,40,97,110,100,47,99,32,112,
-97,116,104,45,115,116,114,105,110,103,63,32,114,101,108,97,116,105,118,101,45,
-112,97,116,104,63,41,41,23,198,2,28,28,248,22,173,15,23,195,2,90,159,
-39,11,89,161,39,36,11,248,22,171,15,23,198,2,249,22,159,9,194,2,42,
-11,27,249,22,166,8,247,22,165,8,5,4,80,65,84,72,27,28,23,194,2,
-249,80,158,40,41,249,22,156,8,23,198,1,7,63,9,86,94,23,194,1,9,
-27,28,249,22,159,9,247,22,171,8,2,36,249,22,79,248,22,159,15,5,1,
-46,23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,
-22,80,23,196,2,27,249,22,168,15,23,196,1,23,201,2,28,248,22,162,15,
-23,194,2,250,2,67,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,
-28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,27,249,
-22,168,15,23,196,1,23,204,2,28,248,22,162,15,23,194,2,250,2,67,205,
-206,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,
-11,27,248,22,176,15,248,22,80,195,27,249,22,168,15,23,196,1,206,28,248,
-22,162,15,193,250,2,67,23,16,23,17,195,251,2,71,23,16,23,17,23,18,
-248,22,81,199,27,248,22,176,15,23,196,1,28,248,22,162,15,193,250,2,67,
-198,199,195,11,250,80,159,39,40,39,196,197,11,250,80,159,39,40,39,196,11,
-11,32,76,88,163,8,36,39,57,11,2,43,222,33,78,0,8,35,114,120,35,
-34,92,34,34,27,249,22,141,16,23,197,2,23,198,2,28,23,193,2,86,94,
-23,196,1,27,248,22,101,23,195,2,27,27,248,22,110,23,197,1,27,249,22,
-141,16,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,101,
-23,195,2,27,250,2,76,23,203,2,23,204,1,248,22,110,23,199,1,28,249,
-22,141,8,23,196,2,2,44,249,22,93,23,202,2,194,249,22,79,248,22,159,
-15,28,249,22,159,9,247,22,171,8,2,36,250,22,153,16,2,77,23,200,1,
-2,44,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,141,8,23,196,
-2,2,44,249,22,93,23,200,2,9,249,22,79,248,22,159,15,28,249,22,159,
-9,247,22,171,8,2,36,250,22,153,16,2,77,23,200,1,2,44,23,197,1,
-9,28,249,22,141,8,23,196,2,2,44,249,22,93,197,194,86,94,23,196,1,
-249,22,79,248,22,159,15,28,249,22,159,9,247,22,171,8,2,36,250,22,153,
-16,2,77,23,200,1,2,44,23,197,1,194,86,94,23,193,1,28,249,22,141,
-8,23,198,2,2,44,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,
-159,15,28,249,22,159,9,247,22,171,8,2,36,250,22,153,16,2,77,23,202,
-1,2,44,23,199,1,9,86,95,28,28,248,22,133,8,194,10,248,22,144,7,
-194,12,250,22,168,11,2,7,6,21,21,40,111,114,47,99,32,98,121,116,101,
-115,63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,
-22,150,15,196,11,12,250,22,168,11,2,7,6,14,14,40,108,105,115,116,111,
-102,32,112,97,116,104,63,41,197,250,2,76,197,195,28,248,22,144,7,197,248,
-22,158,8,197,196,86,94,28,28,248,22,150,15,23,195,2,10,28,248,22,144,
-7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,
-12,250,22,168,11,23,196,2,2,41,23,197,2,28,248,22,173,15,23,195,2,
-12,251,22,170,11,23,197,1,2,45,2,39,23,198,1,86,94,28,28,248,22,
+174,15,23,196,2,11,10,248,22,151,15,23,196,2,12,252,22,168,11,2,5,
+2,41,37,23,199,2,23,200,2,27,28,248,22,151,15,23,196,2,248,22,152,
+15,23,196,2,247,22,153,15,86,95,28,28,248,22,175,15,23,196,2,10,249,
+22,159,9,247,22,153,15,23,195,2,12,253,22,170,11,2,5,6,54,54,112,
+97,116,104,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,32,97,
+110,100,32,110,111,116,32,116,104,101,32,112,108,97,116,102,111,114,109,39,115,
+32,99,111,110,118,101,110,116,105,111,110,2,42,23,201,2,6,24,24,112,108,
+97,116,102,111,114,109,32,99,111,110,118,101,110,116,105,111,110,32,116,121,112,
+101,247,22,153,15,28,249,22,159,9,28,248,22,151,15,23,199,2,248,22,152,
+15,23,199,2,247,22,153,15,23,195,2,12,253,22,170,11,2,5,6,37,37,
+103,105,118,101,110,32,112,97,116,104,115,32,117,115,101,32,100,105,102,102,101,
+114,101,110,116,32,99,111,110,118,101,110,116,105,111,110,115,2,42,23,201,2,
+6,9,9,114,111,111,116,32,112,97,116,104,23,202,2,27,27,248,22,179,15,
+28,248,22,175,15,23,199,2,23,198,1,248,22,176,15,23,199,1,86,94,28,
+28,248,22,151,15,23,194,2,10,28,248,22,150,15,23,194,2,10,28,248,22,
+144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,
+11,12,250,22,168,11,2,37,2,38,23,196,2,28,28,248,22,151,15,23,194,
+2,249,22,159,9,248,22,152,15,23,196,2,2,39,249,22,159,9,247,22,171,
+8,2,39,27,28,248,22,144,7,23,195,2,23,194,2,248,22,156,8,248,22,
+155,15,23,196,2,28,249,22,145,16,2,64,23,195,2,86,94,23,193,1,28,
+248,22,144,7,23,195,2,248,22,158,15,23,195,1,193,27,248,22,183,7,23,
+195,1,249,22,159,15,248,22,159,8,250,22,153,16,2,65,28,249,22,145,16,
+2,66,23,201,2,23,199,1,250,22,153,16,2,67,23,202,1,2,40,80,159,
+47,37,38,2,39,28,248,22,144,7,23,194,2,248,22,158,15,23,194,1,192,
+27,248,22,155,15,23,195,2,28,249,22,159,9,23,197,2,64,117,110,105,120,
+28,249,22,141,8,23,195,1,5,1,47,86,95,23,195,1,23,194,1,28,248,
+22,151,15,23,199,2,197,248,22,158,15,23,199,1,249,22,168,15,23,200,1,
+249,22,159,15,249,22,144,8,248,22,155,15,23,201,1,37,23,199,1,28,249,
+22,159,9,23,197,2,2,39,249,22,168,15,23,200,1,249,22,159,15,28,249,
+22,145,16,0,27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,
+92,92,92,92,91,97,45,122,93,58,34,23,199,2,251,22,145,8,2,43,250,
+22,144,8,23,204,2,40,41,5,1,92,249,22,144,8,23,203,1,42,28,249,
+22,145,16,2,69,23,199,2,249,22,145,8,2,43,249,22,144,8,23,201,1,
+40,28,249,22,145,16,2,69,23,199,2,249,22,145,8,2,43,249,22,144,8,
+23,201,1,40,28,249,22,145,16,0,14,35,114,120,34,94,92,92,92,92,92,
+92,92,92,34,23,199,2,249,22,145,8,5,4,85,78,67,92,249,22,144,8,
+23,201,1,38,28,249,22,145,16,0,12,35,114,120,34,94,91,97,45,122,93,
+58,34,23,199,2,249,22,145,8,250,22,144,8,23,202,2,36,37,249,22,144,
+8,23,201,1,38,86,94,23,197,1,12,23,199,1,12,32,71,88,163,8,36,
+39,53,11,70,102,111,117,110,100,45,101,120,101,99,222,33,74,32,72,88,163,
+8,36,40,58,11,64,110,101,120,116,222,33,73,27,248,22,177,15,23,196,2,
+28,249,22,161,9,23,195,2,23,197,1,11,28,248,22,173,15,23,194,2,27,
+249,22,168,15,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,
+36,11,248,22,171,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,
+2,27,248,22,177,15,23,199,2,28,249,22,161,9,23,195,2,23,200,2,11,
+28,248,22,173,15,23,194,2,250,2,71,23,205,2,23,206,2,249,22,168,15,
+23,200,2,23,198,1,250,2,71,23,205,2,23,206,2,23,196,1,11,28,23,
+193,2,192,86,94,23,193,1,27,28,248,22,150,15,23,196,2,27,249,22,168,
+15,23,198,2,23,205,2,28,28,248,22,163,15,193,10,248,22,162,15,193,192,
+11,11,28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,177,
+15,23,200,2,28,249,22,161,9,23,195,2,23,201,1,11,28,248,22,173,15,
+23,194,2,250,2,71,23,206,1,23,207,1,249,22,168,15,23,201,1,23,198,
+1,250,2,71,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,
+89,161,39,36,11,248,22,171,15,23,197,2,86,95,23,195,1,23,194,1,27,
+28,23,201,2,27,248,22,177,15,23,199,2,28,249,22,161,9,23,195,2,23,
+200,2,11,28,248,22,173,15,23,194,2,250,2,71,23,204,2,23,205,2,249,
+22,168,15,23,200,2,23,198,1,250,2,71,23,204,2,23,205,2,23,196,1,
+11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,150,15,23,196,2,27,
+249,22,168,15,23,198,2,23,204,2,28,28,248,22,163,15,193,10,248,22,162,
+15,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,
+248,22,177,15,23,200,2,28,249,22,161,9,23,195,2,23,201,1,11,28,248,
+22,173,15,23,194,2,250,2,71,23,205,1,23,206,1,249,22,168,15,23,201,
+1,23,198,1,250,2,71,204,205,195,192,28,23,193,2,90,159,39,11,89,161,
+39,36,11,248,22,171,15,23,199,2,86,95,23,195,1,23,194,1,27,28,23,
+198,2,251,2,72,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,
+2,192,86,94,23,193,1,27,28,248,22,150,15,195,27,249,22,168,15,197,200,
+28,28,248,22,163,15,193,10,248,22,162,15,193,192,11,11,28,192,192,28,198,
+11,251,2,72,198,203,201,202,194,32,75,88,163,8,36,40,58,11,2,46,222,
+33,76,28,248,22,87,23,197,2,11,27,248,22,176,15,248,22,80,23,199,2,
+27,249,22,168,15,23,196,1,23,197,2,28,248,22,162,15,23,194,2,250,2,
+71,198,199,195,86,94,23,193,1,27,248,22,81,23,200,1,28,248,22,87,23,
+194,2,11,27,248,22,176,15,248,22,80,23,196,2,27,249,22,168,15,23,196,
+1,23,200,2,28,248,22,162,15,23,194,2,250,2,71,201,202,195,86,94,23,
+193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22,176,
+15,248,22,80,195,27,249,22,168,15,23,196,1,202,28,248,22,162,15,193,250,
+2,71,204,205,195,251,2,75,204,205,206,248,22,81,199,86,95,28,28,248,22,
150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,173,15,23,195,
-2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,23,196,2,2,41,23,
-197,2,28,248,22,173,15,23,195,2,12,251,22,170,11,23,197,1,2,45,2,
-39,23,198,1,86,94,86,94,28,28,248,22,150,15,23,195,2,10,28,248,22,
-144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,195,2,
-11,12,250,22,168,11,23,196,2,2,41,23,197,2,28,248,22,173,15,23,195,
-2,86,94,23,194,1,12,251,22,170,11,23,197,2,2,45,2,39,23,198,1,
-249,22,3,20,20,94,88,163,8,36,37,47,11,9,223,2,33,81,23,195,1,
-23,197,1,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,
-22,168,11,23,196,1,2,46,23,197,1,86,94,28,28,248,22,150,15,23,194,
-2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,
-174,15,23,194,2,11,12,250,22,168,11,2,11,2,41,23,196,2,28,248,22,
-173,15,23,194,2,12,251,22,170,11,2,11,2,45,2,39,23,197,1,86,95,
-86,94,86,94,28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,
-2,28,248,22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,250,22,
-168,11,2,11,2,41,23,198,2,28,248,22,173,15,23,196,2,12,251,22,170,
-11,2,11,2,45,2,39,23,199,2,249,22,3,32,0,88,163,8,36,37,46,
-11,9,222,33,84,23,198,2,28,28,248,22,0,23,195,2,249,22,50,23,196,
-2,37,11,12,250,22,168,11,2,11,2,46,23,197,2,251,80,158,40,46,23,
-198,1,23,199,1,23,200,1,11,86,94,28,28,248,22,150,15,23,194,2,10,
-28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,
-23,194,2,11,12,250,22,168,11,2,13,2,41,23,196,2,28,248,22,173,15,
-23,194,2,12,251,22,170,11,2,13,2,45,2,39,23,197,1,86,96,86,94,
-28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,
-173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,250,22,168,11,2,13,
-2,41,23,198,2,28,248,22,173,15,23,196,2,12,251,22,170,11,2,13,2,
-45,2,39,23,199,2,86,94,86,94,28,28,248,22,150,15,23,197,2,10,28,
-248,22,144,7,23,197,2,28,248,22,173,15,23,197,2,10,248,22,174,15,23,
-197,2,11,12,250,22,168,11,2,13,2,41,23,199,2,28,248,22,173,15,23,
-197,2,12,251,22,170,11,2,13,2,45,2,39,23,200,2,249,22,3,32,0,
-88,163,8,36,37,46,11,9,222,33,86,23,199,2,28,28,248,22,0,23,195,
-2,249,22,50,23,196,2,37,11,12,250,22,168,11,2,13,2,46,23,197,2,
-251,80,158,40,46,23,198,1,23,200,1,23,201,1,23,199,1,27,248,22,191,
-15,70,99,111,110,102,105,103,45,100,105,114,27,28,248,22,174,15,23,195,2,
-23,194,1,20,13,159,80,159,38,53,37,250,80,159,41,54,37,249,22,33,11,
-80,159,43,53,37,22,128,16,248,22,191,15,68,111,114,105,103,45,100,105,114,
-27,248,22,191,15,2,47,250,80,159,42,40,39,23,196,1,23,198,1,11,28,
-23,193,2,249,22,168,15,23,195,1,6,10,10,108,105,110,107,115,46,114,107,
-116,100,11,248,22,158,13,23,194,1,28,248,22,178,12,23,194,2,86,94,23,
-193,1,249,22,16,247,22,19,32,0,88,163,8,36,36,41,11,9,222,11,88,
-163,8,36,36,43,11,9,223,0,33,89,32,91,88,163,8,36,37,55,11,2,
-43,222,33,92,27,249,22,154,6,8,128,128,23,196,2,28,248,22,139,7,23,
-194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,199,2,28,
-248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,
-128,23,202,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,
-22,154,6,8,128,128,23,205,2,28,248,22,139,7,23,194,2,9,249,22,79,
-23,195,1,248,2,91,23,206,1,27,249,22,154,6,8,128,128,23,196,2,28,
-248,22,133,8,23,194,2,28,249,22,129,4,248,22,138,8,23,196,2,8,128,
-128,249,22,1,22,145,8,249,22,79,23,197,1,27,249,22,154,6,8,128,128,
-23,201,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,
-154,6,8,128,128,23,204,2,28,248,22,139,7,23,194,2,9,249,22,79,23,
-195,1,27,249,22,154,6,8,128,128,23,207,2,28,248,22,139,7,23,194,2,
-9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,210,2,28,248,22,
-139,7,23,194,2,9,249,22,79,23,195,1,248,2,91,23,211,1,192,192,248,
-22,191,5,23,194,1,20,13,159,80,159,37,58,37,32,0,88,163,36,37,44,
-11,9,222,33,90,27,248,22,182,5,23,195,1,250,22,46,22,37,88,163,36,
-36,8,24,11,9,223,3,33,93,20,20,94,88,163,36,36,43,11,9,223,3,
-33,94,23,196,1,248,22,14,20,20,94,88,163,36,36,47,8,240,0,0,64,
-0,9,224,1,2,33,95,23,195,1,86,94,28,248,22,135,12,23,197,2,27,
-247,22,191,11,28,249,22,183,11,23,195,2,2,48,251,22,187,11,23,197,1,
-2,48,250,22,128,8,2,49,28,23,202,1,80,159,46,48,38,80,159,46,51,
-38,248,22,131,12,23,205,2,247,22,29,12,12,28,248,22,135,12,23,197,2,
-86,94,23,196,1,248,23,194,1,247,22,137,2,195,86,95,28,248,22,135,12,
-23,198,2,27,247,22,191,11,28,249,22,183,11,23,195,2,2,48,251,22,187,
-11,23,197,1,2,48,250,22,128,8,2,49,28,23,203,2,80,159,47,48,38,
-80,159,47,51,38,248,22,131,12,23,206,2,247,22,29,12,12,28,23,193,2,
-28,23,195,1,86,94,20,18,159,11,80,158,39,49,247,22,137,2,20,18,159,
-11,80,158,39,50,23,193,1,86,94,20,18,159,11,80,158,39,55,247,22,137,
-2,20,18,159,11,80,158,39,56,23,193,1,86,94,23,195,1,12,28,248,22,
-135,12,23,198,2,86,94,23,197,1,248,23,195,1,247,22,137,2,196,20,20,
-94,248,22,139,6,23,194,2,28,248,22,139,7,248,22,139,6,23,195,1,12,
-248,22,164,11,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,
-103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110,248,22,191,5,23,
-194,1,28,248,22,88,23,194,2,28,28,249,22,189,3,38,248,22,92,23,196,
-2,10,249,22,189,3,39,248,22,92,23,196,2,28,28,248,22,144,7,248,22,
-80,23,195,2,10,249,22,159,9,64,114,111,111,116,248,22,132,18,23,196,2,
-28,27,248,22,101,194,28,248,22,150,15,23,194,2,10,28,248,22,144,7,23,
-194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,1,11,27,248,
-22,87,248,22,103,195,28,192,192,248,22,154,16,248,22,110,195,11,11,11,11,
-250,22,155,2,23,197,1,23,198,1,249,22,79,23,198,1,23,201,1,28,28,
-248,22,87,248,22,103,23,197,2,10,249,22,145,16,248,22,110,23,198,2,247,
-22,162,8,27,248,22,178,15,249,22,176,15,248,22,101,23,200,2,23,198,1,
-28,248,22,64,248,22,80,23,198,2,86,94,23,196,1,86,94,28,250,22,157,
-2,23,197,2,11,11,12,250,22,155,2,23,197,2,11,9,249,22,161,2,23,
-196,2,20,20,95,88,163,8,36,38,50,11,9,224,3,2,33,102,23,195,1,
-23,196,1,27,248,22,67,248,22,132,18,23,199,1,250,22,155,2,23,198,2,
-23,196,2,249,22,79,248,22,128,2,23,200,1,250,22,157,2,23,203,1,23,
-201,1,9,12,250,22,155,2,23,196,1,23,197,1,248,22,94,23,199,1,20,
-13,159,80,159,37,58,37,88,163,36,37,54,8,240,0,144,0,0,9,225,1,
-0,2,33,97,27,248,80,159,39,57,39,28,23,195,2,80,159,39,48,38,80,
-159,39,51,38,28,249,22,161,9,23,195,2,28,23,196,2,80,158,40,50,80,
-158,40,56,28,193,80,158,38,49,80,158,38,55,20,13,159,80,159,38,58,37,
-20,20,94,88,163,36,37,55,8,240,0,240,24,0,9,226,2,1,3,0,33,
-98,23,196,1,20,13,159,80,159,38,53,37,26,29,80,159,8,31,54,37,249,
-22,33,11,80,159,8,33,53,37,22,184,14,10,22,185,14,10,22,186,14,10,
-22,189,14,10,22,188,14,10,22,190,14,10,22,187,14,10,22,191,14,10,22,
-128,15,10,22,129,15,10,22,130,15,10,22,131,15,10,22,132,15,11,22,182,
-14,11,27,249,22,182,5,28,196,80,159,41,48,38,80,159,41,51,38,66,98,
+2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,2,6,2,44,23,197,
+2,28,28,23,195,2,28,28,248,22,150,15,23,196,2,10,28,248,22,144,7,
+23,196,2,28,248,22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,248,
+22,173,15,23,196,2,11,10,12,250,22,168,11,2,6,6,45,45,40,111,114,
+47,99,32,35,102,32,40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,
+105,110,103,63,32,114,101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,
+23,198,2,28,28,248,22,173,15,23,195,2,90,159,39,11,89,161,39,36,11,
+248,22,171,15,23,198,2,249,22,159,9,194,2,45,11,27,249,22,166,8,247,
+22,165,8,5,4,80,65,84,72,27,28,23,194,2,249,80,158,40,41,249,22,
+156,8,23,198,1,7,63,9,86,94,23,194,1,9,27,28,249,22,159,9,247,
+22,171,8,2,39,249,22,79,248,22,159,15,5,1,46,23,196,1,23,194,1,
+28,248,22,87,23,194,2,11,27,248,22,176,15,248,22,80,23,196,2,27,249,
+22,168,15,23,196,1,23,201,2,28,248,22,162,15,23,194,2,250,2,71,202,
+203,195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,
+11,27,248,22,176,15,248,22,80,23,196,2,27,249,22,168,15,23,196,1,23,
+204,2,28,248,22,162,15,23,194,2,250,2,71,205,206,195,86,94,23,193,1,
+27,248,22,81,23,197,1,28,248,22,87,23,194,2,11,27,248,22,176,15,248,
+22,80,195,27,249,22,168,15,23,196,1,206,28,248,22,162,15,193,250,2,71,
+23,16,23,17,195,251,2,75,23,16,23,17,23,18,248,22,81,199,27,248,22,
+176,15,23,196,1,28,248,22,162,15,193,250,2,71,198,199,195,11,250,80,159,
+39,40,39,196,197,11,250,80,159,39,40,39,196,11,11,32,80,88,163,8,36,
+39,57,11,2,46,222,33,82,0,8,35,114,120,35,34,92,34,34,27,249,22,
+141,16,23,197,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,101,
+23,195,2,27,27,248,22,110,23,197,1,27,249,22,141,16,23,201,2,23,196,
+2,28,23,193,2,86,94,23,194,1,27,248,22,101,23,195,2,27,250,2,80,
+23,203,2,23,204,1,248,22,110,23,199,1,28,249,22,141,8,23,196,2,2,
+47,249,22,93,23,202,2,194,249,22,79,248,22,159,15,28,249,22,159,9,247,
+22,171,8,2,39,250,22,153,16,2,81,23,200,1,2,47,23,197,1,194,86,
+95,23,199,1,23,193,1,28,249,22,141,8,23,196,2,2,47,249,22,93,23,
+200,2,9,249,22,79,248,22,159,15,28,249,22,159,9,247,22,171,8,2,39,
+250,22,153,16,2,81,23,200,1,2,47,23,197,1,9,28,249,22,141,8,23,
+196,2,2,47,249,22,93,197,194,86,94,23,196,1,249,22,79,248,22,159,15,
+28,249,22,159,9,247,22,171,8,2,39,250,22,153,16,2,81,23,200,1,2,
+47,23,197,1,194,86,94,23,193,1,28,249,22,141,8,23,198,2,2,47,249,
+22,93,195,9,86,94,23,194,1,249,22,79,248,22,159,15,28,249,22,159,9,
+247,22,171,8,2,39,250,22,153,16,2,81,23,202,1,2,47,23,199,1,9,
+86,95,28,28,248,22,133,8,194,10,248,22,144,7,194,12,250,22,168,11,2,
+7,6,21,21,40,111,114,47,99,32,98,121,116,101,115,63,32,115,116,114,105,
+110,103,63,41,196,28,28,248,22,88,195,249,22,4,22,150,15,196,11,12,250,
+22,168,11,2,7,6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63,
+41,197,250,2,80,197,195,28,248,22,144,7,197,248,22,158,8,197,196,86,94,
+28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,22,
+173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,23,196,
+2,2,44,23,197,2,28,248,22,173,15,23,195,2,12,251,22,170,11,23,197,
+1,2,48,2,42,23,198,1,86,94,28,28,248,22,150,15,23,195,2,10,28,
+248,22,144,7,23,195,2,28,248,22,173,15,23,195,2,10,248,22,174,15,23,
+195,2,11,12,250,22,168,11,23,196,2,2,44,23,197,2,28,248,22,173,15,
+23,195,2,12,251,22,170,11,23,197,1,2,48,2,42,23,198,1,86,94,86,
+94,28,28,248,22,150,15,23,195,2,10,28,248,22,144,7,23,195,2,28,248,
+22,173,15,23,195,2,10,248,22,174,15,23,195,2,11,12,250,22,168,11,23,
+196,2,2,44,23,197,2,28,248,22,173,15,23,195,2,86,94,23,194,1,12,
+251,22,170,11,23,197,2,2,48,2,42,23,198,1,249,22,3,20,20,94,88,
+163,8,36,37,47,11,9,223,2,33,85,23,195,1,23,197,1,28,28,248,22,
+0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,168,11,23,196,1,2,
+49,23,197,1,86,94,28,28,248,22,150,15,23,194,2,10,28,248,22,144,7,
+23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,11,12,
+250,22,168,11,2,11,2,44,23,196,2,28,248,22,173,15,23,194,2,12,251,
+22,170,11,2,11,2,48,2,42,23,197,1,86,95,86,94,86,94,28,28,248,
+22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,15,23,
+196,2,10,248,22,174,15,23,196,2,11,12,250,22,168,11,2,11,2,44,23,
+198,2,28,248,22,173,15,23,196,2,12,251,22,170,11,2,11,2,48,2,42,
+23,199,2,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,88,23,198,
+2,28,28,248,22,0,23,195,2,249,22,50,23,196,2,37,11,12,250,22,168,
+11,2,11,2,49,23,197,2,251,80,158,40,46,23,198,1,23,199,1,23,200,
+1,11,86,94,28,28,248,22,150,15,23,194,2,10,28,248,22,144,7,23,194,
+2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,11,12,250,22,
+168,11,2,13,2,44,23,196,2,28,248,22,173,15,23,194,2,12,251,22,170,
+11,2,13,2,48,2,42,23,197,1,86,96,86,94,28,28,248,22,150,15,23,
+196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,15,23,196,2,10,248,
+22,174,15,23,196,2,11,12,250,22,168,11,2,13,2,44,23,198,2,28,248,
+22,173,15,23,196,2,12,251,22,170,11,2,13,2,48,2,42,23,199,2,86,
+94,86,94,28,28,248,22,150,15,23,197,2,10,28,248,22,144,7,23,197,2,
+28,248,22,173,15,23,197,2,10,248,22,174,15,23,197,2,11,12,250,22,168,
+11,2,13,2,44,23,199,2,28,248,22,173,15,23,197,2,12,251,22,170,11,
+2,13,2,48,2,42,23,200,2,249,22,3,32,0,88,163,8,36,37,46,11,
+9,222,33,90,23,199,2,28,28,248,22,0,23,195,2,249,22,50,23,196,2,
+37,11,12,250,22,168,11,2,13,2,49,23,197,2,251,80,158,40,46,23,198,
+1,23,200,1,23,201,1,23,199,1,27,248,22,191,15,70,99,111,110,102,105,
+103,45,100,105,114,27,28,248,22,174,15,23,195,2,23,194,1,20,13,159,80,
+159,38,56,37,250,80,159,41,57,37,249,22,33,11,80,159,43,56,37,22,128,
+16,248,22,191,15,68,111,114,105,103,45,100,105,114,27,248,22,191,15,2,52,
+250,80,159,42,40,39,23,196,1,23,198,1,11,28,23,193,2,249,22,168,15,
+23,195,1,2,51,11,248,22,158,13,23,194,1,28,248,22,178,12,23,194,2,
+86,94,23,193,1,249,22,16,247,22,19,32,0,88,163,8,36,36,41,11,9,
+222,11,88,163,8,36,36,43,11,9,223,0,33,93,32,95,88,163,8,36,37,
+55,11,2,46,222,33,96,27,249,22,154,6,8,128,128,23,196,2,28,248,22,
+139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,
+199,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,27,249,22,154,
+6,8,128,128,23,202,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,
+1,27,249,22,154,6,8,128,128,23,205,2,28,248,22,139,7,23,194,2,9,
+249,22,79,23,195,1,248,2,95,23,206,1,27,249,22,154,6,8,128,128,23,
+196,2,28,248,22,133,8,23,194,2,28,249,22,129,4,248,22,138,8,23,196,
+2,8,128,128,249,22,1,22,145,8,249,22,79,23,197,1,27,249,22,154,6,
+8,128,128,23,201,2,28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,
+27,249,22,154,6,8,128,128,23,204,2,28,248,22,139,7,23,194,2,9,249,
+22,79,23,195,1,27,249,22,154,6,8,128,128,23,207,2,28,248,22,139,7,
+23,194,2,9,249,22,79,23,195,1,27,249,22,154,6,8,128,128,23,210,2,
+28,248,22,139,7,23,194,2,9,249,22,79,23,195,1,248,2,95,23,211,1,
+192,192,248,22,191,5,23,194,1,20,13,159,80,159,37,8,25,37,32,0,88,
+163,36,37,44,11,9,222,33,94,27,248,22,182,5,23,195,1,250,22,46,22,
+37,88,163,36,36,8,24,11,9,223,3,33,97,20,20,94,88,163,36,36,43,
+11,9,223,3,33,98,23,196,1,248,22,14,20,20,94,88,163,36,36,47,8,
+240,0,0,0,2,9,224,1,2,33,99,23,195,1,86,94,28,248,22,135,12,
+23,198,2,27,247,22,191,11,28,249,22,183,11,23,195,2,2,53,251,22,187,
+11,23,197,1,2,53,250,22,128,8,2,54,28,23,202,1,86,94,23,203,1,
+80,159,47,48,38,28,23,203,1,80,159,47,51,38,80,159,47,54,38,248,22,
+131,12,23,206,2,247,22,29,12,12,28,248,22,135,12,23,198,2,86,94,23,
+197,1,248,23,194,1,247,22,137,2,196,86,95,28,248,22,135,12,23,199,2,
+27,247,22,191,11,28,249,22,183,11,23,195,2,2,53,251,22,187,11,23,197,
+1,2,53,250,22,128,8,2,54,28,23,203,2,80,159,48,48,38,28,23,204,
+2,80,159,48,51,38,80,159,48,54,38,248,22,131,12,23,207,2,247,22,29,
+12,12,28,23,193,2,28,23,195,1,86,94,23,196,1,86,94,20,18,159,11,
+80,158,40,49,247,22,137,2,20,18,159,11,80,158,40,50,23,193,1,28,23,
+196,1,86,94,20,18,159,11,80,158,40,52,247,22,137,2,20,18,159,11,80,
+158,40,53,23,193,1,86,94,20,18,159,11,80,158,40,58,247,22,137,2,20,
+18,159,11,80,158,40,59,23,193,1,86,94,23,195,1,12,28,248,22,135,12,
+23,199,2,86,94,23,198,1,248,23,195,1,247,22,137,2,197,20,20,94,248,
+22,139,6,23,194,2,28,248,22,139,7,248,22,139,6,23,195,1,12,248,22,
+164,11,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105,110,103,108,
+101,32,83,45,101,120,112,114,101,115,115,105,111,110,248,22,191,5,23,194,1,
+28,248,22,88,23,194,2,28,28,249,22,189,3,38,248,22,92,23,196,2,10,
+249,22,189,3,39,248,22,92,23,196,2,28,28,248,22,144,7,248,22,80,23,
+195,2,10,249,22,159,9,64,114,111,111,116,248,22,132,18,23,196,2,28,27,
+248,22,101,194,28,248,22,150,15,23,194,2,10,28,248,22,144,7,23,194,2,
+28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,1,11,27,248,22,87,
+248,22,103,195,28,192,192,248,22,154,16,248,22,110,195,11,11,11,11,250,22,
+155,2,23,197,1,23,198,1,249,22,79,23,198,1,23,201,1,28,28,248,22,
+87,248,22,103,23,197,2,10,249,22,145,16,248,22,110,23,198,2,247,22,162,
+8,27,248,22,178,15,249,22,176,15,248,22,101,23,200,2,23,198,1,28,248,
+22,64,248,22,80,23,198,2,86,94,23,196,1,86,94,28,250,22,157,2,23,
+197,2,11,11,12,250,22,155,2,23,197,2,11,9,249,22,161,2,23,196,2,
+20,20,95,88,163,8,36,38,50,11,9,224,3,2,33,106,23,195,1,23,196,
+1,27,248,22,67,248,22,132,18,23,199,1,250,22,155,2,23,198,2,23,196,
+2,249,22,79,248,22,128,2,23,200,1,250,22,157,2,23,203,1,23,201,1,
+9,12,250,22,155,2,23,196,1,23,197,1,248,22,94,23,199,1,20,13,159,
+80,159,38,8,25,37,88,163,36,37,55,8,240,0,144,4,0,9,226,2,1,
+0,3,33,101,27,28,23,194,2,80,159,39,48,38,28,23,195,2,80,159,39,
+51,38,80,159,39,54,38,27,248,80,159,41,8,24,39,23,195,2,28,249,22,
+161,9,23,195,2,28,23,197,2,80,158,42,50,28,23,198,2,80,158,42,53,
+80,158,42,59,28,194,80,158,40,49,28,195,80,158,40,52,80,158,40,58,20,
+13,159,80,159,40,8,25,37,20,20,94,88,163,36,37,56,8,240,0,240,199,
+0,9,227,4,3,2,5,0,33,102,23,198,1,20,13,159,80,159,40,56,37,
+26,29,80,159,8,33,57,37,249,22,33,11,80,159,8,35,56,37,22,184,14,
+10,22,185,14,10,22,186,14,10,22,189,14,10,22,188,14,10,22,190,14,10,
+22,187,14,10,22,191,14,10,22,128,15,10,22,129,15,10,22,130,15,10,22,
+131,15,10,22,132,15,11,22,182,14,11,27,249,22,182,5,23,197,2,66,98,
105,110,97,114,121,27,250,22,46,22,37,88,163,8,36,36,44,11,9,223,4,
-33,99,20,20,94,88,163,36,36,43,11,9,223,4,33,100,23,197,1,86,94,
+33,103,20,20,94,88,163,36,36,43,11,9,223,4,33,104,23,197,1,86,94,
28,28,248,22,88,23,194,2,249,22,4,32,0,88,163,8,36,37,45,11,9,
-222,33,101,23,195,2,11,12,248,22,164,11,6,18,18,105,108,108,45,102,111,
+222,33,105,23,195,2,11,12,248,22,164,11,6,18,18,105,108,108,45,102,111,
114,109,101,100,32,99,111,110,116,101,110,116,27,247,22,137,2,27,90,159,39,
-11,89,161,39,36,11,248,22,171,15,28,201,80,159,46,48,38,80,159,46,51,
-38,192,86,96,249,22,3,20,20,94,88,163,8,36,37,54,11,9,224,2,3,
-33,103,23,195,1,23,197,1,249,22,161,2,195,88,163,8,36,38,48,11,9,
-223,3,33,104,28,197,86,94,20,18,159,11,80,158,42,49,193,20,18,159,11,
-80,158,42,50,196,86,94,20,18,159,11,80,158,42,55,193,20,18,159,11,80,
-158,42,56,196,193,248,22,9,20,20,94,88,163,8,32,37,8,40,8,240,0,
-240,126,0,9,224,1,2,33,105,23,195,1,0,7,35,114,120,34,47,43,34,
-28,248,22,144,7,23,195,2,27,249,22,143,16,2,107,23,197,2,28,23,193,
-2,28,249,22,189,3,248,22,100,23,196,2,248,22,179,3,248,22,147,7,23,
-199,2,249,22,7,250,22,166,7,23,200,1,36,248,22,100,23,199,1,23,198,
-1,249,22,7,250,22,166,7,23,200,2,36,248,22,100,23,199,2,249,22,79,
-249,22,166,7,23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197,
-1,23,198,1,90,159,39,11,89,161,39,36,11,248,22,171,15,23,198,1,86,
-94,23,195,1,28,249,22,159,9,23,195,2,2,42,86,94,23,193,1,249,22,
-7,23,196,1,23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,144,
-7,23,195,2,27,249,22,143,16,2,107,23,197,2,28,23,193,2,28,249,22,
+11,89,161,39,36,11,248,22,171,15,23,202,1,192,86,96,249,22,3,20,20,
+94,88,163,8,36,37,54,11,9,224,2,3,33,107,23,195,1,23,197,1,249,
+22,161,2,195,88,163,8,36,38,48,11,9,223,3,33,108,28,198,86,94,20,
+18,159,11,80,158,44,49,193,20,18,159,11,80,158,44,50,196,28,199,86,94,
+20,18,159,11,80,158,44,52,193,20,18,159,11,80,158,44,53,196,86,94,20,
+18,159,11,80,158,44,58,193,20,18,159,11,80,158,44,59,196,193,248,22,9,
+20,20,95,88,163,8,32,37,8,42,8,240,0,240,247,3,9,225,1,3,2,
+33,109,23,195,1,23,196,1,0,7,35,114,120,34,47,43,34,28,248,22,144,
+7,23,195,2,27,249,22,143,16,2,111,23,197,2,28,23,193,2,28,249,22,
189,3,248,22,100,23,196,2,248,22,179,3,248,22,147,7,23,199,2,249,22,
-7,250,22,166,7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22,7,
+7,250,22,166,7,23,200,1,36,248,22,100,23,199,1,23,198,1,249,22,7,
250,22,166,7,23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,166,7,
-23,201,1,248,22,102,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,
+23,201,1,248,22,102,23,200,1,23,200,1,249,22,7,23,197,1,23,198,1,
90,159,39,11,89,161,39,36,11,248,22,171,15,23,198,1,86,94,23,195,1,
-28,249,22,159,9,23,195,2,2,42,86,94,23,193,1,249,22,7,23,196,1,
-23,198,1,249,80,159,45,8,24,39,194,249,22,79,197,199,32,109,88,163,36,
-43,8,31,11,65,99,108,111,111,112,222,33,118,32,110,88,163,8,36,37,47,
-11,2,43,222,33,113,32,111,88,163,36,37,43,11,69,116,111,45,115,116,114,
-105,110,103,222,33,112,28,248,22,150,15,23,194,2,248,22,154,15,23,194,1,
-192,28,248,22,87,248,22,81,23,195,2,248,22,89,248,2,111,248,22,132,18,
-23,196,1,250,22,90,248,2,111,248,22,132,18,23,198,2,2,51,248,2,110,
-248,22,133,18,23,198,1,250,22,128,8,6,7,7,10,32,126,97,32,126,97,
-6,1,1,32,23,196,1,249,22,128,8,6,6,6,10,32,32,32,126,97,248,
-22,131,2,23,196,1,32,116,88,163,36,38,48,11,66,102,105,108,116,101,114,
-222,33,117,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,
-2,249,22,79,248,22,132,18,23,197,2,249,2,116,23,197,1,248,22,133,18,
-23,199,1,249,2,116,23,195,1,248,22,133,18,23,197,1,28,248,22,87,23,
-199,2,86,94,23,198,1,28,23,199,2,86,97,23,196,1,23,195,1,23,194,
-1,23,193,1,28,23,197,2,249,22,168,15,23,201,1,23,199,1,198,27,28,
-248,22,87,23,197,2,2,50,249,22,1,22,167,7,248,2,110,23,199,2,248,
-23,198,1,251,22,128,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,
-110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,
-110,58,32,126,115,10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,
-32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,87,
-23,202,1,248,2,111,23,201,1,250,22,167,7,248,2,111,23,204,1,2,51,
-23,201,2,249,22,1,22,167,7,249,22,2,32,0,88,163,8,36,37,45,11,
-9,222,33,114,27,248,22,92,23,205,2,27,248,22,92,247,22,130,16,28,249,
-22,190,3,249,22,181,3,23,198,2,23,197,2,41,23,205,2,249,22,93,247,
-22,130,16,248,22,89,249,22,128,8,6,50,50,46,46,46,32,91,126,97,32,
-97,100,100,105,116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,
-32,112,97,99,107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,
-249,22,181,3,23,201,1,23,200,1,28,249,22,5,22,130,2,23,201,2,250,
-22,128,8,6,49,49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,
-105,111,110,58,32,126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,
-105,114,101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,167,
-7,249,22,2,32,0,88,163,8,36,37,45,11,9,222,33,115,249,2,116,22,
-130,2,23,208,1,86,95,23,199,1,23,198,1,2,50,27,248,22,80,23,200,
-2,27,28,248,22,150,15,23,195,2,249,22,168,15,23,196,1,23,198,2,248,
-22,131,2,23,195,1,28,28,248,22,150,15,248,22,80,23,202,2,248,22,163,
-15,23,194,2,10,27,250,22,1,22,168,15,23,197,1,23,201,2,28,28,248,
-22,87,23,199,2,10,248,22,163,15,23,194,2,28,23,200,2,28,28,248,22,
-162,15,249,22,168,15,23,196,2,23,203,2,10,27,28,248,22,150,15,23,202,
-2,248,22,154,15,23,202,2,23,201,2,19,248,22,147,7,23,195,2,27,28,
-249,22,129,4,23,196,4,40,28,249,22,150,7,6,4,4,46,114,107,116,249,
-22,166,7,23,199,2,249,22,181,3,23,200,4,40,249,22,167,7,250,22,166,
-7,23,200,1,36,249,22,181,3,23,201,4,40,6,3,3,46,115,115,86,94,
-23,195,1,11,11,28,23,193,2,248,22,162,15,249,22,168,15,23,199,2,23,
-196,1,11,2,86,99,23,202,1,23,201,1,23,199,1,23,198,1,23,197,1,
-23,196,1,28,23,200,2,249,22,168,15,23,195,1,23,202,1,192,254,2,109,
-202,203,204,205,206,248,22,81,23,16,28,23,16,23,16,199,28,23,200,2,249,
-22,168,15,23,195,1,23,202,1,192,254,2,109,202,203,204,205,206,248,22,81,
-23,16,23,16,254,2,109,201,202,203,204,205,248,22,81,23,15,23,15,90,159,
-38,11,89,161,38,36,11,249,80,159,40,8,24,39,23,199,1,23,200,1,27,
-248,22,67,28,248,22,150,15,195,248,22,154,15,195,194,27,247,22,134,16,27,
-250,22,93,28,23,197,2,28,247,22,133,16,27,248,80,159,46,59,39,10,249,
-22,93,250,22,157,2,23,198,2,23,204,2,9,250,22,157,2,23,198,1,11,
-9,9,9,28,23,197,1,28,80,159,44,51,38,27,248,80,159,46,59,39,11,
-249,22,93,250,22,157,2,23,198,2,23,204,1,9,250,22,157,2,23,198,1,
-11,9,86,94,23,198,1,9,9,247,22,130,16,254,2,109,199,202,203,205,23,
-16,199,11,86,95,28,28,248,22,151,15,23,194,2,10,28,248,22,150,15,23,
-194,2,10,28,248,22,144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,
-22,174,15,23,194,2,11,12,252,22,168,11,23,200,2,2,35,36,23,198,2,
-23,199,2,28,28,248,22,144,7,23,195,2,10,248,22,133,8,23,195,2,86,
-94,23,194,1,12,252,22,168,11,23,200,2,2,52,37,23,198,2,23,199,1,
-90,159,39,11,89,161,39,36,11,248,22,171,15,23,197,2,86,94,23,195,1,
-86,94,28,23,193,2,86,95,23,198,1,23,196,1,12,250,22,171,11,23,201,
-1,2,53,23,199,1,249,22,7,23,195,1,23,196,1,32,121,88,163,36,42,
-8,24,11,2,43,222,33,122,28,248,22,130,4,23,199,2,86,95,23,198,1,
-23,194,1,19,248,22,138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,
-160,15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,4,2,44,249,23,
-205,1,23,203,1,23,201,4,28,248,22,144,7,23,206,2,249,22,159,8,23,
+28,249,22,159,9,23,195,2,2,45,86,94,23,193,1,249,22,7,23,196,1,
+23,200,1,27,249,22,79,23,197,1,23,201,1,28,248,22,144,7,23,195,2,
+27,249,22,143,16,2,111,23,197,2,28,23,193,2,28,249,22,189,3,248,22,
+100,23,196,2,248,22,179,3,248,22,147,7,23,199,2,249,22,7,250,22,166,
+7,23,200,1,36,248,22,100,23,199,1,23,196,1,249,22,7,250,22,166,7,
+23,200,2,36,248,22,100,23,199,2,249,22,79,249,22,166,7,23,201,1,248,
+22,102,23,200,1,23,198,1,249,22,7,23,197,1,23,196,1,90,159,39,11,
+89,161,39,36,11,248,22,171,15,23,198,1,86,94,23,195,1,28,249,22,159,
+9,23,195,2,2,45,86,94,23,193,1,249,22,7,23,196,1,23,198,1,249,
+80,159,45,8,27,39,194,249,22,79,197,199,32,113,88,163,36,43,8,31,11,
+65,99,108,111,111,112,222,33,122,32,114,88,163,8,36,37,47,11,2,46,222,
+33,117,32,115,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103,222,
+33,116,28,248,22,150,15,23,194,2,248,22,154,15,23,194,1,192,28,248,22,
+87,248,22,81,23,195,2,248,22,89,248,2,115,248,22,132,18,23,196,1,250,
+22,90,248,2,115,248,22,132,18,23,198,2,2,56,248,2,114,248,22,133,18,
+23,198,1,250,22,128,8,6,7,7,10,32,126,97,32,126,97,6,1,1,32,
+23,196,1,249,22,128,8,6,6,6,10,32,32,32,126,97,248,22,131,2,23,
+196,1,32,120,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33,121,28,
+248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249,22,79,
+248,22,132,18,23,197,2,249,2,120,23,197,1,248,22,133,18,23,199,1,249,
+2,120,23,195,1,248,22,133,18,23,197,1,28,248,22,87,23,199,2,86,94,
+23,198,1,28,23,199,2,86,97,23,196,1,23,195,1,23,194,1,23,193,1,
+28,23,197,2,249,22,168,15,23,201,1,23,199,1,198,27,28,248,22,87,23,
+197,2,2,55,249,22,1,22,167,7,248,2,114,23,199,2,248,23,198,1,251,
+22,128,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,
+102,111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126,
+115,10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114,
+101,99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,87,23,202,1,248,
+2,115,23,201,1,250,22,167,7,248,2,115,23,204,1,2,56,23,201,2,249,
+22,1,22,167,7,249,22,2,32,0,88,163,8,36,37,45,11,9,222,33,118,
+27,248,22,92,23,205,2,27,248,22,92,247,22,130,16,28,249,22,190,3,249,
+22,181,3,23,198,2,23,197,2,41,23,205,2,249,22,93,247,22,130,16,248,
+22,89,249,22,128,8,6,50,50,46,46,46,32,91,126,97,32,97,100,100,105,
+116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,32,112,97,99,
+107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,249,22,181,3,
+23,201,1,23,200,1,28,249,22,5,22,130,2,23,201,2,250,22,128,8,6,
+49,49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,105,111,110,58,
+32,126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,105,114,101,99,
+116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,167,7,249,22,2,
+32,0,88,163,8,36,37,45,11,9,222,33,119,249,2,120,22,130,2,23,208,
+1,86,95,23,199,1,23,198,1,2,55,27,248,22,80,23,200,2,27,28,248,
+22,150,15,23,195,2,249,22,168,15,23,196,1,23,198,2,248,22,131,2,23,
+195,1,28,28,248,22,150,15,248,22,80,23,202,2,248,22,163,15,23,194,2,
+10,27,250,22,1,22,168,15,23,197,1,23,201,2,28,28,248,22,87,23,199,
+2,10,248,22,163,15,23,194,2,28,23,200,2,28,28,248,22,162,15,249,22,
+168,15,23,196,2,23,203,2,10,27,28,248,22,150,15,23,202,2,248,22,154,
+15,23,202,2,23,201,2,19,248,22,147,7,23,195,2,27,28,249,22,129,4,
+23,196,4,40,28,249,22,150,7,6,4,4,46,114,107,116,249,22,166,7,23,
+199,2,249,22,181,3,23,200,4,40,249,22,167,7,250,22,166,7,23,200,1,
+36,249,22,181,3,23,201,4,40,6,3,3,46,115,115,86,94,23,195,1,11,
+11,28,23,193,2,248,22,162,15,249,22,168,15,23,199,2,23,196,1,11,2,
+86,99,23,202,1,23,201,1,23,199,1,23,198,1,23,197,1,23,196,1,28,
+23,200,2,249,22,168,15,23,195,1,23,202,1,192,254,2,113,202,203,204,205,
+206,248,22,81,23,16,28,23,16,23,16,199,28,23,200,2,249,22,168,15,23,
+195,1,23,202,1,192,254,2,113,202,203,204,205,206,248,22,81,23,16,23,16,
+254,2,113,201,202,203,204,205,248,22,81,23,15,23,15,90,159,38,11,89,161,
+38,36,11,249,80,159,40,8,27,39,23,199,1,23,200,1,27,248,22,67,28,
+248,22,150,15,195,248,22,154,15,195,194,27,247,22,134,16,27,250,22,93,28,
+23,197,2,28,247,22,133,16,249,22,93,27,249,80,159,49,8,26,39,10,11,
+249,22,93,250,22,157,2,23,198,2,23,206,2,9,250,22,157,2,23,198,1,
+11,9,27,249,80,159,49,8,26,39,11,10,249,22,93,250,22,157,2,23,198,
+2,23,206,2,9,250,22,157,2,23,198,1,11,9,9,9,28,23,197,1,28,
+80,159,44,54,38,27,249,80,159,47,8,26,39,11,11,249,22,93,250,22,157,
+2,23,198,2,23,204,1,9,250,22,157,2,23,198,1,11,9,86,94,23,198,
+1,9,9,247,22,130,16,254,2,113,199,202,203,205,23,16,199,11,86,95,28,
+28,248,22,151,15,23,194,2,10,28,248,22,150,15,23,194,2,10,28,248,22,
+144,7,23,194,2,28,248,22,173,15,23,194,2,10,248,22,174,15,23,194,2,
+11,12,252,22,168,11,23,200,2,2,38,36,23,198,2,23,199,2,28,28,248,
+22,144,7,23,195,2,10,248,22,133,8,23,195,2,86,94,23,194,1,12,252,
+22,168,11,23,200,2,2,57,37,23,198,2,23,199,1,90,159,39,11,89,161,
+39,36,11,248,22,171,15,23,197,2,86,94,23,195,1,86,94,28,23,193,2,
+86,95,23,198,1,23,196,1,12,250,22,171,11,23,201,1,2,58,23,199,1,
+249,22,7,23,195,1,23,196,1,32,125,88,163,36,42,8,24,11,2,46,222,
+33,126,28,248,22,130,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,
+138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,145,8,
+250,22,144,8,23,204,2,36,23,203,4,2,47,249,23,205,1,23,203,1,23,
+201,4,28,248,22,144,7,23,206,2,249,22,159,8,23,207,1,8,63,23,205,
+1,28,248,22,151,15,23,201,2,248,22,152,15,23,201,1,86,94,23,200,1,
+247,22,153,15,2,2,27,248,22,179,3,23,200,1,28,249,22,159,9,8,46,
+249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,
+15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,1,23,202,1,249,23,
+205,1,23,203,1,23,201,1,28,248,22,144,7,23,206,2,249,22,159,8,23,
207,1,8,63,23,205,1,28,248,22,151,15,23,201,2,248,22,152,15,23,201,
-1,86,94,23,200,1,247,22,153,15,2,2,27,248,22,179,3,23,200,1,28,
-249,22,159,9,8,46,249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,
-23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,
-1,23,202,1,249,23,205,1,23,203,1,23,201,1,28,248,22,144,7,23,206,
-2,249,22,159,8,23,207,1,8,63,23,205,1,28,248,22,151,15,23,201,2,
-248,22,152,15,23,201,1,86,94,23,200,1,247,22,153,15,28,248,22,130,4,
-23,194,2,86,95,23,195,1,23,193,1,19,248,22,138,8,23,196,2,19,248,
-22,138,8,23,197,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,
-36,23,203,4,2,44,249,23,206,1,23,204,1,23,201,4,28,248,22,144,7,
+1,86,94,23,200,1,247,22,153,15,28,248,22,130,4,23,194,2,86,95,23,
+195,1,23,193,1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2,
+249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,47,
+249,23,206,1,23,204,1,23,201,4,28,248,22,144,7,23,207,2,249,22,159,
+8,23,208,1,8,63,23,206,1,28,248,22,151,15,23,202,2,248,22,152,15,
+23,202,1,86,94,23,201,1,247,22,153,15,2,2,27,248,22,179,3,23,195,
+1,28,249,22,159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22,
+178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,
+23,203,1,23,203,1,249,23,206,1,23,204,1,23,201,1,28,248,22,144,7,
23,207,2,249,22,159,8,23,208,1,8,63,23,206,1,28,248,22,151,15,23,
-202,2,248,22,152,15,23,202,1,86,94,23,201,1,247,22,153,15,2,2,27,
-248,22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,199,2,
-23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,
-144,8,23,205,2,36,23,203,1,23,203,1,249,23,206,1,23,204,1,23,201,
-1,28,248,22,144,7,23,207,2,249,22,159,8,23,208,1,8,63,23,206,1,
-28,248,22,151,15,23,202,2,248,22,152,15,23,202,1,86,94,23,201,1,247,
-22,153,15,28,248,22,130,4,23,194,2,86,95,23,196,1,23,193,1,19,248,
-22,138,8,23,197,2,19,248,22,138,8,23,198,2,249,22,160,15,251,22,145,
-8,250,22,144,8,23,206,2,36,23,203,4,2,44,249,23,207,1,23,205,1,
-23,201,4,28,248,22,144,7,23,208,2,249,22,159,8,23,209,1,8,63,23,
-207,1,28,248,22,151,15,23,203,2,248,22,152,15,23,203,1,86,94,23,202,
-1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249,22,159,9,8,
-46,249,22,139,8,23,200,2,23,197,2,27,248,22,178,3,23,195,2,249,22,
-160,15,251,22,145,8,250,22,144,8,23,206,2,36,23,203,1,23,204,1,249,
-23,207,1,23,205,1,23,201,1,28,248,22,144,7,23,208,2,249,22,159,8,
-23,209,1,8,63,23,207,1,28,248,22,151,15,23,203,2,248,22,152,15,23,
-203,1,86,94,23,202,1,247,22,153,15,253,2,121,201,202,203,204,205,198,90,
-159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,199,2,10,28,
-248,22,150,15,23,199,2,10,28,248,22,144,7,23,199,2,28,248,22,173,15,
-23,199,2,10,248,22,174,15,23,199,2,11,12,252,22,168,11,23,200,2,2,
-35,36,23,203,2,23,204,2,28,28,248,22,144,7,23,200,2,10,248,22,133,
-8,23,200,2,12,252,22,168,11,23,200,2,2,52,37,23,203,2,23,204,2,
-90,159,39,11,89,161,39,36,11,248,22,171,15,23,202,2,86,94,23,195,1,
-86,94,28,192,12,250,22,171,11,23,201,1,2,53,23,204,2,249,22,7,194,
-195,27,248,22,156,15,23,196,1,27,19,248,22,138,8,23,196,2,28,248,22,
-130,4,23,194,4,86,94,23,199,1,19,248,22,138,8,23,197,2,19,248,22,
-138,8,23,198,2,249,22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,
-23,203,4,2,44,249,23,210,1,23,205,1,23,201,4,28,248,22,144,7,23,
-211,2,249,22,159,8,23,212,1,8,63,23,210,1,28,248,22,151,15,23,206,
-2,248,22,152,15,23,206,1,86,94,23,205,1,247,22,153,15,2,2,27,248,
-22,179,3,23,195,4,28,249,22,159,9,8,46,249,22,139,8,23,200,2,23,
-197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,
-8,23,206,2,36,23,203,1,23,207,1,249,23,210,1,23,205,1,23,201,1,
-28,248,22,144,7,23,211,2,249,22,159,8,23,212,1,8,63,23,210,1,28,
-248,22,151,15,23,206,2,248,22,152,15,23,206,1,86,94,23,205,1,247,22,
-153,15,28,248,22,130,4,23,194,2,86,95,23,200,1,23,193,1,19,248,22,
-138,8,23,198,2,19,248,22,138,8,23,199,2,249,22,160,15,251,22,145,8,
-250,22,144,8,23,207,2,36,23,203,4,2,44,249,23,211,1,23,206,1,23,
-201,4,28,248,22,144,7,23,212,2,249,22,159,8,23,213,1,8,63,23,211,
-1,28,248,22,151,15,23,207,2,248,22,152,15,23,207,1,86,94,23,206,1,
-247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249,22,159,9,8,46,
-249,22,139,8,23,201,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,
-15,251,22,145,8,250,22,144,8,23,207,2,36,23,203,1,23,208,1,249,23,
-211,1,23,206,1,23,201,1,28,248,22,144,7,23,212,2,249,22,159,8,23,
-213,1,8,63,23,211,1,28,248,22,151,15,23,207,2,248,22,152,15,23,207,
-1,86,94,23,206,1,247,22,153,15,253,2,121,23,203,1,23,207,1,23,208,
-1,23,209,1,23,210,1,23,199,1,2,28,248,22,150,15,23,196,2,249,22,
-168,15,23,197,1,23,195,1,192,32,124,88,163,36,40,57,11,2,43,222,33,
-125,28,248,22,130,4,23,197,2,86,94,23,196,1,19,248,22,138,8,23,195,
-2,35,248,22,138,8,23,196,2,249,22,160,15,251,22,145,8,250,22,144,8,
-23,204,1,36,23,203,4,2,44,2,44,28,248,22,144,7,23,204,2,249,22,
-159,8,23,205,1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,
-15,23,199,1,86,94,23,198,1,247,22,153,15,2,27,248,22,179,3,23,198,
-1,28,249,22,159,9,8,46,249,22,139,8,23,198,2,23,197,2,35,248,22,
-178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36,
-23,203,1,2,44,2,44,28,248,22,144,7,23,204,2,249,22,159,8,23,205,
-1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,
-86,94,23,198,1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,23,193,
-1,19,248,22,138,8,23,196,2,35,248,22,138,8,23,197,2,249,22,160,15,
-251,22,145,8,250,22,144,8,23,205,1,36,23,203,4,2,44,2,44,28,248,
-22,144,7,23,205,2,249,22,159,8,23,206,1,8,63,23,204,1,28,248,22,
-151,15,23,200,2,248,22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,
+202,2,248,22,152,15,23,202,1,86,94,23,201,1,247,22,153,15,28,248,22,
+130,4,23,194,2,86,95,23,196,1,23,193,1,19,248,22,138,8,23,197,2,
+19,248,22,138,8,23,198,2,249,22,160,15,251,22,145,8,250,22,144,8,23,
+206,2,36,23,203,4,2,47,249,23,207,1,23,205,1,23,201,4,28,248,22,
+144,7,23,208,2,249,22,159,8,23,209,1,8,63,23,207,1,28,248,22,151,
+15,23,203,2,248,22,152,15,23,203,1,86,94,23,202,1,247,22,153,15,2,
2,27,248,22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,
-199,2,23,197,2,35,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,
-250,22,144,8,23,205,1,36,23,203,1,2,44,2,44,28,248,22,144,7,23,
+200,2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,
+250,22,144,8,23,206,2,36,23,203,1,23,204,1,249,23,207,1,23,205,1,
+23,201,1,28,248,22,144,7,23,208,2,249,22,159,8,23,209,1,8,63,23,
+207,1,28,248,22,151,15,23,203,2,248,22,152,15,23,203,1,86,94,23,202,
+1,247,22,153,15,253,2,125,201,202,203,204,205,198,90,159,38,11,89,161,38,
+36,11,86,95,28,28,248,22,151,15,23,199,2,10,28,248,22,150,15,23,199,
+2,10,28,248,22,144,7,23,199,2,28,248,22,173,15,23,199,2,10,248,22,
+174,15,23,199,2,11,12,252,22,168,11,23,200,2,2,38,36,23,203,2,23,
+204,2,28,28,248,22,144,7,23,200,2,10,248,22,133,8,23,200,2,12,252,
+22,168,11,23,200,2,2,57,37,23,203,2,23,204,2,90,159,39,11,89,161,
+39,36,11,248,22,171,15,23,202,2,86,94,23,195,1,86,94,28,192,12,250,
+22,171,11,23,201,1,2,58,23,204,2,249,22,7,194,195,27,248,22,156,15,
+23,196,1,27,19,248,22,138,8,23,196,2,28,248,22,130,4,23,194,4,86,
+94,23,199,1,19,248,22,138,8,23,197,2,19,248,22,138,8,23,198,2,249,
+22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,23,203,4,2,47,249,
+23,210,1,23,205,1,23,201,4,28,248,22,144,7,23,211,2,249,22,159,8,
+23,212,1,8,63,23,210,1,28,248,22,151,15,23,206,2,248,22,152,15,23,
+206,1,86,94,23,205,1,247,22,153,15,2,2,27,248,22,179,3,23,195,4,
+28,249,22,159,9,8,46,249,22,139,8,23,200,2,23,197,2,27,248,22,178,
+3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,206,2,36,23,
+203,1,23,207,1,249,23,210,1,23,205,1,23,201,1,28,248,22,144,7,23,
+211,2,249,22,159,8,23,212,1,8,63,23,210,1,28,248,22,151,15,23,206,
+2,248,22,152,15,23,206,1,86,94,23,205,1,247,22,153,15,28,248,22,130,
+4,23,194,2,86,95,23,200,1,23,193,1,19,248,22,138,8,23,198,2,19,
+248,22,138,8,23,199,2,249,22,160,15,251,22,145,8,250,22,144,8,23,207,
+2,36,23,203,4,2,47,249,23,211,1,23,206,1,23,201,4,28,248,22,144,
+7,23,212,2,249,22,159,8,23,213,1,8,63,23,211,1,28,248,22,151,15,
+23,207,2,248,22,152,15,23,207,1,86,94,23,206,1,247,22,153,15,2,2,
+27,248,22,179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,201,
+2,23,197,2,27,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,
+22,144,8,23,207,2,36,23,203,1,23,208,1,249,23,211,1,23,206,1,23,
+201,1,28,248,22,144,7,23,212,2,249,22,159,8,23,213,1,8,63,23,211,
+1,28,248,22,151,15,23,207,2,248,22,152,15,23,207,1,86,94,23,206,1,
+247,22,153,15,253,2,125,23,203,1,23,207,1,23,208,1,23,209,1,23,210,
+1,23,199,1,2,28,248,22,150,15,23,196,2,249,22,168,15,23,197,1,23,
+195,1,192,32,128,2,88,163,36,40,57,11,2,46,222,33,129,2,28,248,22,
+130,4,23,197,2,86,94,23,196,1,19,248,22,138,8,23,195,2,35,248,22,
+138,8,23,196,2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36,
+23,203,4,2,47,2,47,28,248,22,144,7,23,204,2,249,22,159,8,23,205,
+1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,
+86,94,23,198,1,247,22,153,15,2,27,248,22,179,3,23,198,1,28,249,22,
+159,9,8,46,249,22,139,8,23,198,2,23,197,2,35,248,22,178,3,23,195,
+2,249,22,160,15,251,22,145,8,250,22,144,8,23,204,1,36,23,203,1,2,
+47,2,47,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23,
+203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198,
+1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,23,193,1,19,248,22,
+138,8,23,196,2,35,248,22,138,8,23,197,2,249,22,160,15,251,22,145,8,
+250,22,144,8,23,205,1,36,23,203,4,2,47,2,47,28,248,22,144,7,23,
205,2,249,22,159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,
-2,248,22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,124,198,
-199,200,196,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,
-196,2,10,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,
-248,22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,
-2,29,2,35,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,
-248,22,133,8,23,197,2,12,252,22,168,11,2,29,2,52,37,23,200,2,23,
-201,2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,
-195,1,86,94,28,192,12,250,22,171,11,2,29,2,53,23,201,2,249,22,7,
-194,195,27,248,22,156,15,23,196,1,27,251,2,124,23,198,2,23,201,1,23,
-202,1,248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,
-23,197,1,23,195,1,192,2,44,252,80,158,41,8,26,2,29,2,44,32,0,
-88,163,8,36,38,43,11,9,222,33,127,198,199,32,129,2,88,163,36,40,57,
-11,2,43,222,33,130,2,28,248,22,130,4,23,197,2,86,94,23,196,1,19,
-248,22,138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,
-145,8,250,22,144,8,23,204,2,36,23,203,4,2,44,249,22,144,8,23,203,
-1,23,201,4,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,
-23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,
-198,1,247,22,153,15,2,2,27,248,22,179,3,23,198,1,28,249,22,159,9,
-8,46,249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,
-22,160,15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,1,2,54,249,
-22,144,8,23,203,1,23,201,1,28,248,22,144,7,23,204,2,249,22,159,8,
-23,205,1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,
-199,1,86,94,23,198,1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,
-23,193,1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2,249,22,
-160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,44,249,22,
-144,8,23,204,1,23,201,4,28,248,22,144,7,23,205,2,249,22,159,8,23,
-206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,15,23,200,
-1,86,94,23,199,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,
-249,22,159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22,178,3,
-23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,
-1,2,54,249,22,144,8,23,204,1,23,201,1,28,248,22,144,7,23,205,2,
-249,22,159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,
-22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,129,2,198,199,
-200,196,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,
-2,10,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,
-22,173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,
-29,2,35,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,
-22,133,8,23,197,2,12,252,22,168,11,2,29,2,52,37,23,200,2,23,201,
-2,90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,
-1,86,94,28,192,12,250,22,171,11,2,29,2,53,23,201,2,249,22,7,194,
-195,27,248,22,156,15,23,196,1,27,251,2,129,2,23,198,2,23,201,1,23,
-202,1,248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,
-23,197,1,23,195,1,192,252,80,158,41,8,26,2,29,2,54,22,144,8,198,
-199,249,247,22,171,5,23,195,1,11,249,247,22,171,5,194,11,28,248,22,87,
-23,195,2,9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,
-194,1,28,248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,
-40,39,248,22,191,15,2,47,11,10,250,80,159,41,40,39,248,22,191,15,2,
-47,23,197,1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,
-198,1,247,22,128,16,248,80,159,41,8,32,39,248,22,81,23,200,1,86,94,
-23,193,1,248,80,159,39,8,32,39,248,22,81,23,198,1,28,248,22,87,23,
+2,248,22,152,15,23,200,1,86,94,23,199,1,247,22,153,15,2,27,248,22,
+179,3,23,195,1,28,249,22,159,9,8,46,249,22,139,8,23,199,2,23,197,
+2,35,248,22,178,3,23,195,2,249,22,160,15,251,22,145,8,250,22,144,8,
+23,205,1,36,23,203,1,2,47,2,47,28,248,22,144,7,23,205,2,249,22,
+159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,
+15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,128,2,198,199,200,196,
+90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,2,10,
+28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,173,
+15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,32,2,
+38,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,22,133,
+8,23,197,2,12,252,22,168,11,2,32,2,57,37,23,200,2,23,201,2,90,
+159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,1,86,
+94,28,192,12,250,22,171,11,2,32,2,58,23,201,2,249,22,7,194,195,27,
+248,22,156,15,23,196,1,27,251,2,128,2,23,198,2,23,201,1,23,202,1,
+248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,23,197,
+1,23,195,1,192,2,47,252,80,158,41,8,29,2,32,2,47,32,0,88,163,
+8,36,38,43,11,9,222,33,131,2,198,199,32,133,2,88,163,36,40,57,11,
+2,46,222,33,134,2,28,248,22,130,4,23,197,2,86,94,23,196,1,19,248,
+22,138,8,23,195,2,19,248,22,138,8,23,196,2,249,22,160,15,251,22,145,
+8,250,22,144,8,23,204,2,36,23,203,4,2,47,249,22,144,8,23,203,1,
+23,201,4,28,248,22,144,7,23,204,2,249,22,159,8,23,205,1,8,63,23,
+203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,1,86,94,23,198,
+1,247,22,153,15,2,2,27,248,22,179,3,23,198,1,28,249,22,159,9,8,
+46,249,22,139,8,23,198,2,23,197,2,27,248,22,178,3,23,195,2,249,22,
+160,15,251,22,145,8,250,22,144,8,23,204,2,36,23,203,1,2,59,249,22,
+144,8,23,203,1,23,201,1,28,248,22,144,7,23,204,2,249,22,159,8,23,
+205,1,8,63,23,203,1,28,248,22,151,15,23,199,2,248,22,152,15,23,199,
+1,86,94,23,198,1,247,22,153,15,28,248,22,130,4,23,194,2,86,94,23,
+193,1,19,248,22,138,8,23,196,2,19,248,22,138,8,23,197,2,249,22,160,
+15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,4,2,47,249,22,144,
+8,23,204,1,23,201,4,28,248,22,144,7,23,205,2,249,22,159,8,23,206,
+1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,152,15,23,200,1,
+86,94,23,199,1,247,22,153,15,2,2,27,248,22,179,3,23,195,1,28,249,
+22,159,9,8,46,249,22,139,8,23,199,2,23,197,2,27,248,22,178,3,23,
+195,2,249,22,160,15,251,22,145,8,250,22,144,8,23,205,2,36,23,203,1,
+2,59,249,22,144,8,23,204,1,23,201,1,28,248,22,144,7,23,205,2,249,
+22,159,8,23,206,1,8,63,23,204,1,28,248,22,151,15,23,200,2,248,22,
+152,15,23,200,1,86,94,23,199,1,247,22,153,15,251,2,133,2,198,199,200,
+196,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,151,15,23,196,2,
+10,28,248,22,150,15,23,196,2,10,28,248,22,144,7,23,196,2,28,248,22,
+173,15,23,196,2,10,248,22,174,15,23,196,2,11,12,252,22,168,11,2,32,
+2,38,36,23,200,2,23,201,2,28,28,248,22,144,7,23,197,2,10,248,22,
+133,8,23,197,2,12,252,22,168,11,2,32,2,57,37,23,200,2,23,201,2,
+90,159,39,11,89,161,39,36,11,248,22,171,15,23,199,2,86,94,23,195,1,
+86,94,28,192,12,250,22,171,11,2,32,2,58,23,201,2,249,22,7,194,195,
+27,248,22,156,15,23,196,1,27,251,2,133,2,23,198,2,23,201,1,23,202,
+1,248,22,138,8,23,199,1,28,248,22,150,15,23,196,2,249,22,168,15,23,
+197,1,23,195,1,192,252,80,158,41,8,29,2,32,2,59,22,144,8,198,199,
+249,247,22,171,5,23,195,1,11,249,247,22,171,5,194,11,28,248,22,87,23,
195,2,9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,194,
1,28,248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,40,
-39,248,22,191,15,2,47,11,10,250,80,159,41,40,39,248,22,191,15,2,47,
+39,248,22,191,15,2,52,11,10,250,80,159,41,40,39,248,22,191,15,2,52,
23,197,1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,
-1,247,22,128,16,248,80,159,41,8,33,39,248,22,81,23,200,1,86,94,23,
-193,1,248,80,159,39,8,33,39,248,22,81,23,198,1,28,248,22,87,23,195,
+1,247,22,128,16,248,80,159,41,8,35,39,248,22,81,23,200,1,86,94,23,
+193,1,248,80,159,39,8,35,39,248,22,81,23,198,1,28,248,22,87,23,195,
2,9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,194,1,
28,248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,40,39,
-248,22,191,15,2,47,11,10,250,80,159,41,40,39,248,22,191,15,2,47,23,
+248,22,191,15,2,52,11,10,250,80,159,41,40,39,248,22,191,15,2,52,23,
197,1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,
-247,22,128,16,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,
-22,80,23,195,2,27,28,248,22,175,15,23,195,2,23,194,1,28,248,22,174,
-15,23,195,2,249,22,176,15,23,196,1,250,80,159,48,40,39,248,22,191,15,
-2,47,11,10,250,80,159,46,40,39,248,22,191,15,2,47,23,197,1,10,28,
-23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,
-248,80,159,46,8,34,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,
-44,8,34,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,
-1,28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,175,
-15,23,195,2,23,194,1,28,248,22,174,15,23,195,2,249,22,176,15,23,196,
-1,250,80,159,46,40,39,248,22,191,15,2,47,11,10,250,80,159,44,40,39,
-248,22,191,15,2,47,23,197,1,10,28,23,193,2,249,22,79,248,22,178,15,
-249,22,176,15,23,198,1,247,22,128,16,248,80,159,44,8,34,39,248,22,81,
-23,199,1,86,94,23,193,1,248,80,159,42,8,34,39,248,22,81,23,197,1,
-27,247,22,133,16,249,80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,
-22,165,8,2,55,28,192,249,22,156,8,194,7,63,2,50,2,50,27,28,23,
-196,1,250,22,168,15,248,22,191,15,2,56,247,22,162,8,2,57,11,27,248,
-80,159,42,8,32,39,250,22,93,9,248,22,89,248,22,191,15,2,58,9,28,
-193,249,22,79,195,194,192,27,247,22,133,16,249,80,159,39,41,38,28,23,195,
-2,27,249,22,166,8,247,22,165,8,2,55,28,192,249,22,156,8,194,7,63,
-2,50,2,50,27,28,23,196,1,250,22,168,15,248,22,191,15,2,56,247,22,
-162,8,2,57,11,27,248,80,159,42,8,33,39,250,22,93,23,203,1,248,22,
-89,248,22,191,15,2,58,9,28,193,249,22,79,195,194,192,27,247,22,133,16,
-249,80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,22,165,8,2,55,
-28,192,249,22,156,8,194,7,63,2,50,2,50,27,28,23,196,1,250,22,168,
-15,248,22,191,15,2,56,247,22,162,8,2,57,11,27,248,80,159,42,8,34,
-39,250,22,93,23,203,1,248,22,89,248,22,191,15,2,58,23,204,1,28,193,
-249,22,79,195,194,192,27,20,13,159,80,159,37,53,37,26,9,80,159,46,54,
-37,249,22,33,11,80,159,48,53,37,22,188,14,10,22,131,15,10,22,132,15,
-10,22,133,15,10,248,22,139,6,23,196,2,28,248,22,139,7,23,194,2,12,
-86,94,248,22,167,9,23,194,1,27,20,13,159,80,159,38,53,37,26,9,80,
-159,47,54,37,249,22,33,11,80,159,49,53,37,22,188,14,10,22,131,15,10,
-22,132,15,10,22,133,15,10,248,22,139,6,23,197,2,28,248,22,139,7,23,
-194,2,12,86,94,248,22,167,9,23,194,1,27,20,13,159,80,159,39,53,37,
-26,9,80,159,48,54,37,249,22,33,11,80,159,50,53,37,22,188,14,10,22,
-131,15,10,22,132,15,10,22,133,15,10,248,22,139,6,23,198,2,28,248,22,
-139,7,23,194,2,12,86,94,248,22,167,9,23,194,1,248,80,159,40,8,35,
-39,197,86,94,249,22,130,7,247,22,167,5,23,196,2,248,22,154,6,249,22,
-133,4,36,249,22,181,3,23,198,1,23,199,1,27,28,23,197,2,86,95,23,
-196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,191,15,2,47,27,
-250,80,159,42,40,39,23,197,1,11,11,27,248,22,136,4,23,199,1,27,28,
-23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,136,4,23,202,1,27,
-28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199,1,20,
-20,95,88,163,8,36,36,48,11,9,224,4,2,33,142,2,23,195,1,23,197,
-1,27,248,22,183,5,23,195,1,248,80,159,39,8,35,39,193,159,36,20,114,
-159,36,16,1,11,16,0,20,26,145,9,2,1,2,1,29,11,11,11,11,9,
-9,11,11,11,10,43,80,158,36,36,20,114,159,40,16,32,2,2,2,3,2,
-4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,
-2,15,2,16,2,17,30,2,20,76,102,105,110,100,45,108,105,110,107,115,45,
-112,97,116,104,33,11,4,30,2,21,1,20,112,97,114,97,109,101,116,101,114,
-105,122,97,116,105,111,110,45,107,101,121,11,6,30,2,21,1,23,101,120,116,
-101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,11,
-3,2,22,2,23,2,24,30,2,20,1,21,101,120,99,101,112,116,105,111,110,
-45,104,97,110,100,108,101,114,45,107,101,121,11,2,2,25,2,26,2,27,2,
-28,2,29,2,30,2,31,2,32,2,33,16,0,37,39,36,16,0,36,16,15,
-2,9,2,10,2,8,2,3,2,27,2,24,2,25,2,22,2,17,2,23,2,
-26,2,28,2,15,2,14,2,16,51,11,11,11,16,13,2,13,2,11,2,33,
-2,12,2,6,2,32,2,31,2,4,2,30,2,7,2,29,2,2,2,5,16,
-13,11,11,11,11,11,11,11,11,11,11,11,11,11,16,13,2,13,2,11,2,
-33,2,12,2,6,2,32,2,31,2,4,2,30,2,7,2,29,2,2,2,5,
-49,49,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,
-0,16,0,36,36,16,32,20,15,16,2,32,0,88,163,36,37,45,11,2,2,
-222,33,59,80,159,36,36,37,20,15,16,2,249,22,146,7,7,92,7,92,80,
-159,36,37,37,20,15,16,2,88,163,36,37,54,38,2,4,223,0,33,64,80,
-159,36,38,37,20,15,16,2,88,163,36,38,58,38,2,5,223,0,33,66,80,
-159,36,39,37,20,15,16,2,20,25,96,2,6,88,163,8,36,39,8,25,8,
-32,9,223,0,33,73,88,163,36,38,47,52,9,223,0,33,74,88,163,36,37,
-46,52,9,223,0,33,75,80,159,36,40,37,20,15,16,2,27,248,22,137,16,
-248,22,158,8,27,28,249,22,159,9,247,22,171,8,2,36,6,1,1,59,6,
-1,1,58,250,22,128,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40,
-46,42,41,23,196,2,23,196,1,88,163,8,36,38,48,11,2,7,223,0,33,
-79,80,159,36,41,37,20,15,16,2,32,0,88,163,8,36,38,47,11,2,8,
-222,33,80,80,159,36,42,37,20,15,16,2,32,0,88,163,8,36,39,48,11,
-2,9,222,33,82,80,159,36,43,37,20,15,16,2,32,0,88,163,8,36,38,
-46,11,2,10,222,33,83,80,159,36,44,37,20,15,16,2,88,163,45,39,49,
-8,128,16,2,11,223,0,33,85,80,159,36,45,37,20,15,16,2,88,163,45,
-40,50,8,128,16,2,13,223,0,33,87,80,159,36,47,37,20,15,16,2,248,
-22,191,15,70,108,105,110,107,115,45,102,105,108,101,80,159,36,48,37,20,15,
-16,2,247,22,137,2,80,158,36,49,20,15,16,2,11,80,158,36,50,20,15,
-16,2,248,80,159,37,52,37,88,163,36,36,49,8,240,16,0,6,0,9,223,
-1,33,88,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158,36,55,20,
-15,16,2,11,80,158,36,56,20,15,16,2,88,163,36,37,44,8,240,0,0,
-64,0,2,24,223,0,33,96,80,159,36,57,37,20,15,16,2,88,163,36,37,
-44,8,240,0,240,126,0,2,25,223,0,33,106,80,159,36,59,37,20,15,16,
-2,88,163,36,38,56,8,240,0,0,0,1,2,26,223,0,33,108,80,159,36,
-8,24,37,20,15,16,2,88,163,36,40,8,24,8,240,0,128,128,1,2,12,
-223,0,33,119,80,159,36,46,37,20,15,16,2,32,0,88,163,36,39,50,11,
-2,27,222,33,120,80,159,36,8,25,37,20,15,16,2,32,0,88,163,36,41,
-8,27,11,2,28,222,33,123,80,159,36,8,26,37,20,15,16,2,20,27,158,
-32,0,88,163,36,38,52,11,2,29,222,33,126,88,163,36,38,49,8,240,0,
-0,0,4,2,29,223,0,33,128,2,80,159,36,8,27,37,20,15,16,2,20,
-27,158,32,0,88,163,36,38,52,11,2,30,222,33,131,2,88,163,36,38,49,
-8,240,0,0,0,4,2,30,223,0,33,132,2,80,159,36,8,28,37,20,15,
-16,2,20,27,158,32,0,88,163,36,37,44,11,2,31,222,33,133,2,32,0,
-88,163,36,37,44,11,2,31,222,33,134,2,80,159,36,8,29,37,20,15,16,
-2,88,163,8,36,37,51,16,4,52,36,37,36,2,43,223,0,33,135,2,80,
-159,36,8,32,39,20,15,16,2,88,163,8,36,37,51,16,4,52,36,38,36,
-2,43,223,0,33,136,2,80,159,36,8,33,39,20,15,16,2,88,163,8,36,
-37,56,16,4,52,36,40,36,2,43,223,0,33,137,2,80,159,36,8,34,39,
-20,15,16,2,20,25,96,2,32,88,163,36,36,53,16,4,8,32,36,37,36,
-9,223,0,33,138,2,88,163,36,37,54,16,4,8,32,36,38,36,9,223,0,
-33,139,2,88,163,36,38,55,16,4,8,32,36,40,36,9,223,0,33,140,2,
-80,159,36,8,30,37,20,15,16,2,88,163,8,36,37,57,16,4,36,42,44,
-36,2,43,223,0,33,141,2,80,159,36,8,35,39,20,15,16,2,88,163,8,
-36,39,54,16,4,52,36,44,36,2,33,223,0,33,143,2,80,159,36,8,31,
-37,95,29,94,2,18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,
-35,37,109,105,110,45,115,116,120,11,2,20,9,9,9,36,0};
- EVAL_ONE_SIZED_STR((char *)expr, 13372);
+247,22,128,16,248,80,159,41,8,36,39,248,22,81,23,200,1,86,94,23,193,
+1,248,80,159,39,8,36,39,248,22,81,23,198,1,28,248,22,87,23,195,2,
+9,27,248,22,80,23,196,2,27,28,248,22,175,15,23,195,2,23,194,1,28,
+248,22,174,15,23,195,2,249,22,176,15,23,196,1,250,80,159,43,40,39,248,
+22,191,15,2,52,11,10,250,80,159,41,40,39,248,22,191,15,2,52,23,197,
+1,10,28,23,193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,
+22,128,16,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22,
+80,23,195,2,27,28,248,22,175,15,23,195,2,23,194,1,28,248,22,174,15,
+23,195,2,249,22,176,15,23,196,1,250,80,159,48,40,39,248,22,191,15,2,
+52,11,10,250,80,159,46,40,39,248,22,191,15,2,52,23,197,1,10,28,23,
+193,2,249,22,79,248,22,178,15,249,22,176,15,23,198,1,247,22,128,16,248,
+80,159,46,8,37,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,44,
+8,37,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,1,
+28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,175,15,
+23,195,2,23,194,1,28,248,22,174,15,23,195,2,249,22,176,15,23,196,1,
+250,80,159,46,40,39,248,22,191,15,2,52,11,10,250,80,159,44,40,39,248,
+22,191,15,2,52,23,197,1,10,28,23,193,2,249,22,79,248,22,178,15,249,
+22,176,15,23,198,1,247,22,128,16,248,80,159,44,8,37,39,248,22,81,23,
+199,1,86,94,23,193,1,248,80,159,42,8,37,39,248,22,81,23,197,1,27,
+247,22,133,16,249,80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,22,
+165,8,2,60,28,192,249,22,156,8,194,7,63,2,55,2,55,27,28,23,196,
+1,250,22,168,15,248,22,191,15,2,50,247,22,162,8,2,61,11,27,248,80,
+159,42,8,35,39,250,22,93,9,248,22,89,248,22,191,15,2,62,9,28,193,
+249,22,79,195,194,192,27,247,22,133,16,249,80,159,39,41,38,28,23,195,2,
+27,249,22,166,8,247,22,165,8,2,60,28,192,249,22,156,8,194,7,63,2,
+55,2,55,27,28,23,196,1,250,22,168,15,248,22,191,15,2,50,247,22,162,
+8,2,61,11,27,248,80,159,42,8,36,39,250,22,93,23,203,1,248,22,89,
+248,22,191,15,2,62,9,28,193,249,22,79,195,194,192,27,247,22,133,16,249,
+80,159,39,41,38,28,23,195,2,27,249,22,166,8,247,22,165,8,2,60,28,
+192,249,22,156,8,194,7,63,2,55,2,55,27,28,23,196,1,250,22,168,15,
+248,22,191,15,2,50,247,22,162,8,2,61,11,27,248,80,159,42,8,37,39,
+250,22,93,23,203,1,248,22,89,248,22,191,15,2,62,23,204,1,28,193,249,
+22,79,195,194,192,27,20,13,159,80,159,37,56,37,26,9,80,159,46,57,37,
+249,22,33,11,80,159,48,56,37,22,188,14,10,22,131,15,10,22,132,15,10,
+22,133,15,10,248,22,139,6,23,196,2,28,248,22,139,7,23,194,2,12,86,
+94,248,22,167,9,23,194,1,27,20,13,159,80,159,38,56,37,26,9,80,159,
+47,57,37,249,22,33,11,80,159,49,56,37,22,188,14,10,22,131,15,10,22,
+132,15,10,22,133,15,10,248,22,139,6,23,197,2,28,248,22,139,7,23,194,
+2,12,86,94,248,22,167,9,23,194,1,27,20,13,159,80,159,39,56,37,26,
+9,80,159,48,57,37,249,22,33,11,80,159,50,56,37,22,188,14,10,22,131,
+15,10,22,132,15,10,22,133,15,10,248,22,139,6,23,198,2,28,248,22,139,
+7,23,194,2,12,86,94,248,22,167,9,23,194,1,248,80,159,40,8,38,39,
+197,86,94,249,22,130,7,247,22,167,5,23,196,2,248,22,154,6,249,22,133,
+4,36,249,22,181,3,23,198,1,23,199,1,27,28,23,197,2,86,95,23,196,
+1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,191,15,2,52,27,250,
+80,159,42,40,39,23,197,1,11,11,27,248,22,136,4,23,199,1,27,28,23,
+194,2,23,194,1,86,94,23,194,1,36,27,248,22,136,4,23,202,1,27,28,
+23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199,1,20,20,
+95,88,163,8,36,36,48,11,9,224,4,2,33,146,2,23,195,1,23,197,1,
+27,248,22,183,5,23,195,1,248,80,159,39,8,38,39,193,159,36,20,114,159,
+36,16,1,11,16,0,20,26,145,9,2,1,2,1,29,11,11,11,11,9,9,
+11,11,11,10,43,80,158,36,36,20,114,159,40,16,35,2,2,2,3,2,4,
+2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,
+15,2,16,2,17,2,18,2,19,2,20,30,2,23,76,102,105,110,100,45,108,
+105,110,107,115,45,112,97,116,104,33,11,4,30,2,24,1,20,112,97,114,97,
+109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30,2,24,
+1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,
+116,105,111,110,11,3,2,25,2,26,2,27,30,2,23,1,21,101,120,99,101,
+112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,2,2,28,
+2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,16,0,37,39,36,
+16,0,36,16,18,2,9,2,10,2,8,2,3,2,30,2,27,2,28,2,25,
+2,20,2,26,2,29,2,31,2,18,2,17,2,19,2,15,2,14,2,16,54,
+11,11,11,16,13,2,13,2,11,2,36,2,12,2,6,2,35,2,34,2,4,
+2,33,2,7,2,32,2,2,2,5,16,13,11,11,11,11,11,11,11,11,11,
+11,11,11,11,16,13,2,13,2,11,2,36,2,12,2,6,2,35,2,34,2,
+4,2,33,2,7,2,32,2,2,2,5,49,49,37,12,11,11,16,0,16,0,
+16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,35,20,15,16,
+2,32,0,88,163,36,37,45,11,2,2,222,33,63,80,159,36,36,37,20,15,
+16,2,249,22,146,7,7,92,7,92,80,159,36,37,37,20,15,16,2,88,163,
+36,37,54,38,2,4,223,0,33,68,80,159,36,38,37,20,15,16,2,88,163,
+36,38,58,38,2,5,223,0,33,70,80,159,36,39,37,20,15,16,2,20,25,
+96,2,6,88,163,8,36,39,8,25,8,32,9,223,0,33,77,88,163,36,38,
+47,52,9,223,0,33,78,88,163,36,37,46,52,9,223,0,33,79,80,159,36,
+40,37,20,15,16,2,27,248,22,137,16,248,22,158,8,27,28,249,22,159,9,
+247,22,171,8,2,39,6,1,1,59,6,1,1,58,250,22,128,8,6,14,14,
+40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196,1,88,
+163,8,36,38,48,11,2,7,223,0,33,83,80,159,36,41,37,20,15,16,2,
+32,0,88,163,8,36,38,47,11,2,8,222,33,84,80,159,36,42,37,20,15,
+16,2,32,0,88,163,8,36,39,48,11,2,9,222,33,86,80,159,36,43,37,
+20,15,16,2,32,0,88,163,8,36,38,46,11,2,10,222,33,87,80,159,36,
+44,37,20,15,16,2,88,163,45,39,49,8,128,16,2,11,223,0,33,89,80,
+159,36,45,37,20,15,16,2,88,163,45,40,50,8,128,16,2,13,223,0,33,
+91,80,159,36,47,37,20,15,16,2,250,22,168,15,248,22,191,15,2,50,247,
+22,162,8,2,51,80,159,36,48,37,20,15,16,2,247,22,137,2,80,158,36,
+49,20,15,16,2,11,80,158,36,50,20,15,16,2,249,22,168,15,248,22,191,
+15,2,50,2,51,80,159,36,51,37,20,15,16,2,247,22,137,2,80,158,36,
+52,20,15,16,2,11,80,158,36,53,20,15,16,2,248,80,159,37,55,37,88,
+163,36,36,49,8,240,16,0,48,0,9,223,1,33,92,80,159,36,54,37,20,
+15,16,2,247,22,137,2,80,158,36,58,20,15,16,2,11,80,158,36,59,20,
+15,16,2,88,163,36,37,44,8,240,0,0,0,2,2,27,223,0,33,100,80,
+159,36,8,24,37,20,15,16,2,88,163,36,38,45,8,240,0,240,247,3,2,
+28,223,0,33,110,80,159,36,8,26,37,20,15,16,2,88,163,36,38,56,16,
+2,36,8,128,32,2,29,223,0,33,112,80,159,36,8,27,37,20,15,16,2,
+88,163,36,40,8,26,16,2,36,8,132,48,2,12,223,0,33,123,80,159,36,
+46,37,20,15,16,2,32,0,88,163,36,39,50,11,2,30,222,33,124,80,159,
+36,8,28,37,20,15,16,2,32,0,88,163,36,41,8,27,11,2,31,222,33,
+127,80,159,36,8,29,37,20,15,16,2,20,27,158,32,0,88,163,36,38,52,
+11,2,32,222,33,130,2,88,163,36,38,49,16,2,36,8,128,128,2,32,223,
+0,33,132,2,80,159,36,8,30,37,20,15,16,2,20,27,158,32,0,88,163,
+36,38,52,11,2,33,222,33,135,2,88,163,36,38,49,16,2,36,8,128,128,
+2,33,223,0,33,136,2,80,159,36,8,31,37,20,15,16,2,20,27,158,32,
+0,88,163,36,37,44,11,2,34,222,33,137,2,32,0,88,163,36,37,44,11,
+2,34,222,33,138,2,80,159,36,8,32,37,20,15,16,2,88,163,8,36,37,
+51,16,4,52,36,44,36,2,46,223,0,33,139,2,80,159,36,8,35,39,20,
+15,16,2,88,163,8,36,37,51,16,4,52,36,52,36,2,46,223,0,33,140,
+2,80,159,36,8,36,39,20,15,16,2,88,163,8,36,37,56,16,4,52,36,
+8,32,36,2,46,223,0,33,141,2,80,159,36,8,37,39,20,15,16,2,20,
+25,96,2,35,88,163,36,36,53,16,4,8,32,36,44,36,9,223,0,33,142,
+2,88,163,36,37,54,16,4,8,32,36,52,36,9,223,0,33,143,2,88,163,
+36,38,55,16,4,8,32,36,8,32,36,9,223,0,33,144,2,80,159,36,8,
+33,37,20,15,16,2,88,163,8,36,37,57,16,4,36,8,48,8,64,36,2,
+46,223,0,33,145,2,80,159,36,8,38,39,20,15,16,2,88,163,8,36,39,
+54,16,4,52,36,8,64,36,2,36,223,0,33,147,2,80,159,36,8,34,37,
+95,29,94,2,21,68,35,37,107,101,114,110,101,108,11,29,94,2,21,69,35,
+37,109,105,110,45,115,116,120,11,2,23,9,9,9,36,0};
+ EVAL_ONE_SIZED_STR((char *)expr, 13644);
}
{
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,9,53,46,51,46,57,48,48,46,49,84,0,0,0,0,0,0,0,0,
@@ -1261,7 +1274,7 @@
2,2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,
2,66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,
115,11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,
-74,91,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,
+132,91,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,
2,6,36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,
9,36,36,16,0,159,36,20,114,159,36,16,1,11,16,0,20,26,145,9,2,
1,2,1,29,11,11,11,11,9,9,11,11,11,18,96,11,46,46,46,36,80,
diff --git a/racket/src/racket/src/file.c b/racket/src/racket/src/file.c
index 56bae9e408..ed5b8dd81d 100644
--- a/racket/src/racket/src/file.c
+++ b/racket/src/racket/src/file.c
@@ -233,14 +233,13 @@ READ_ONLY static Scheme_Object *doc_dir_symbol, *desk_dir_symbol;
READ_ONLY static Scheme_Object *init_dir_symbol, *init_file_symbol, *sys_dir_symbol;
READ_ONLY static Scheme_Object *exec_file_symbol, *run_file_symbol, *collects_dir_symbol;
READ_ONLY static Scheme_Object *pref_file_symbol, *orig_dir_symbol, *addon_dir_symbol;
-READ_ONLY static Scheme_Object *links_file_symbol, *config_dir_symbol;
+READ_ONLY static Scheme_Object *config_dir_symbol;
SHARED_OK static Scheme_Object *exec_cmd;
SHARED_OK static Scheme_Object *run_cmd;
SHARED_OK static Scheme_Object *collects_path, *config_path;
THREAD_LOCAL_DECL(static Scheme_Object *original_pwd);
SHARED_OK static Scheme_Object *addon_dir;
-SHARED_OK static Scheme_Object *links_file;
THREAD_LOCAL_DECL(static Scheme_Object *inst_links_path);
#endif
@@ -285,7 +284,6 @@ void scheme_init_file(Scheme_Env *env)
REGISTER_SO(config_dir_symbol);
REGISTER_SO(orig_dir_symbol);
REGISTER_SO(addon_dir_symbol);
- REGISTER_SO(links_file_symbol);
#endif
REGISTER_SO(windows_symbol);
REGISTER_SO(unix_symbol);
@@ -314,7 +312,6 @@ void scheme_init_file(Scheme_Env *env)
config_dir_symbol = scheme_intern_symbol("config-dir");
orig_dir_symbol = scheme_intern_symbol("orig-dir");
addon_dir_symbol = scheme_intern_symbol("addon-dir");
- links_file_symbol = scheme_intern_symbol("links-file");
#endif
windows_symbol = scheme_intern_symbol("windows");
@@ -6072,8 +6069,7 @@ enum {
id_init_dir,
id_init_file,
id_sys_dir,
- id_addon_dir,
- id_links_file
+ id_addon_dir
};
Scheme_Object *scheme_get_run_cmd(void)
@@ -6129,19 +6125,10 @@ find_system_path(int argc, Scheme_Object **argv)
} else if (argv[0] == addon_dir_symbol) {
if (addon_dir) return addon_dir;
which = id_addon_dir;
- } else if (argv[0] == links_file_symbol) {
- if (links_file) return links_file;
- if (addon_dir) {
- Scheme_Object *pa[2];
- pa[0] = addon_dir;
- pa[1] = scheme_make_path("links.rktd");
- return scheme_build_path(2, pa);
- }
- which = id_links_file;
} else {
scheme_wrong_contract("find-system-path",
"(or/c 'home-dir 'pref-dir 'pref-file 'temp-dir\n"
- " 'init-dir 'init-file 'links-file 'addon-dir\n"
+ " 'init-dir 'init-file 'addon-dir\n"
" 'doc-dir 'desk-dir 'sys-dir 'exec-file 'run-file\n"
" 'collects-dir 'config-dir 'orig-dir)",
0, argc, argv);
@@ -6184,11 +6171,9 @@ find_system_path(int argc, Scheme_Object **argv)
if ((which == id_pref_dir)
|| (which == id_pref_file)
- || (which == id_addon_dir)
- || (which == id_links_file)) {
+ || (which == id_addon_dir)) {
#if defined(OS_X) && !defined(XONX)
- if ((which == id_addon_dir)
- || (which == id_links_file))
+ if (which == id_addon_dir)
home_str = "~/Library/Racket/";
else
home_str = "~/Library/Preferences/";
@@ -6235,8 +6220,6 @@ find_system_path(int argc, Scheme_Object **argv)
return append_path(home, scheme_make_path("/racket-prefs.rktd" + ends_in_slash));
#endif
}
- if (which == id_links_file)
- return append_path(home, scheme_make_path("/links.rktd" + ends_in_slash));
}
#endif
@@ -6274,8 +6257,7 @@ find_system_path(int argc, Scheme_Object **argv)
if ((which == id_addon_dir)
|| (which == id_pref_dir)
- || (which == id_pref_file)
- || (which == id_links_file))
+ || (which == id_pref_file))
which_folder = CSIDL_APPDATA;
else if (which == id_doc_dir) {
# ifndef CSIDL_PERSONAL
@@ -6379,8 +6361,6 @@ find_system_path(int argc, Scheme_Object **argv)
return append_path(home, scheme_make_path("\\racketrc.rktl" + ends_in_slash));
if (which == id_pref_file)
return append_path(home, scheme_make_path("\\racket-prefs.rktd" + ends_in_slash));
- if (which == id_links_file)
- return append_path(home, scheme_make_path("\\links.rktd" + ends_in_slash));
return home;
}
#endif
@@ -6458,15 +6438,6 @@ void scheme_set_addon_dir(Scheme_Object *p)
addon_dir = p;
}
-/* should only called from main */
-void scheme_set_links_file(Scheme_Object *p)
-{
- if (!links_file) {
- REGISTER_SO(links_file);
- }
- links_file = p;
-}
-
Scheme_Object *scheme_find_links_path(int argc, Scheme_Object *argv[])
{
if (inst_links_path)
diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h
index 5bcb26077a..7b65efcd0a 100644
--- a/racket/src/racket/src/schvers.h
+++ b/racket/src/racket/src/schvers.h
@@ -13,12 +13,12 @@
consistently.)
*/
-#define MZSCHEME_VERSION "5.3.900.1"
+#define MZSCHEME_VERSION "5.3.900.2"
#define MZSCHEME_VERSION_X 5
#define MZSCHEME_VERSION_Y 3
#define MZSCHEME_VERSION_Z 900
-#define MZSCHEME_VERSION_W 1
+#define MZSCHEME_VERSION_W 2
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)
diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc
index 2108b8298c..b14f203b78 100644
--- a/racket/src/racket/src/startup.inc
+++ b/racket/src/racket/src/startup.inc
@@ -341,9 +341,15 @@
"(find-col-file fail"
" collection collection-path"
" file-name)))"
-"(define-values(user-links-path)(find-system-path 'links-file))"
+"(define-values(user-links-path)(build-path(find-system-path 'addon-dir)"
+"(version)"
+" \"links.rktd\"))"
"(define-values(user-links-cache)(make-hasheq))"
"(define-values(user-links-stamp) #f)"
+"(define-values(shared-links-path)(build-path(find-system-path 'addon-dir)"
+" \"links.rktd\"))"
+"(define-values(shared-links-cache)(make-hasheq))"
+"(define-values(shared-links-stamp) #f)"
"(define-values(links-path)(find-links-path!"
"(lambda()"
"(let((d(let((c(find-system-path 'config-dir)))"
@@ -386,7 +392,7 @@
" bstr)))"
"(lambda()(close-input-port p)))))))))"
"(define-values(get-linked-collections)"
-"(lambda(user?)"
+"(lambda(user? shared?)"
"(call/ec(lambda(esc)"
"(define-values(make-handler)"
"(lambda(ts)"
@@ -397,16 +403,22 @@
"(log-message l 'error "
"(format"
" \"error reading collection links file ~s: ~a\""
-"(if user? user-links-path links-path)"
+"(cond"
+"(user? user-links-path)"
+"(shared? shared-links-path)"
+"(else links-path))"
"(exn-message exn))"
"(current-continuation-marks))))"
"(void))"
"(when ts"
-"(if user?"
-"(begin"
+"(cond"
+"(user?"
"(set! user-links-cache(make-hasheq))"
"(set! user-links-stamp ts))"
-"(begin"
+"(shared?"
+"(set! shared-links-cache(make-hasheq))"
+"(set! shared-links-stamp ts))"
+"(else"
"(set! links-cache(make-hasheq))"
"(set! links-stamp ts))))"
"(if(exn:fail? exn)"
@@ -415,10 +427,15 @@
"(with-continuation-mark"
" exception-handler-key"
"(make-handler #f)"
-"(let((ts(file->stamp(if user?"
-" user-links-path"
-" links-path))))"
-"(if(not(equal? ts(if user? user-links-stamp links-stamp)))"
+"(let*((a-links-path(cond"
+"(user? user-links-path)"
+"(shared? shared-links-path)"
+"(else links-path)))"
+"(ts(file->stamp a-links-path)))"
+"(if(not(equal? ts(cond"
+"(user? user-links-stamp)"
+"(shared? shared-links-stamp)"
+"(else links-stamp))))"
"(with-continuation-mark"
" exception-handler-key"
"(make-handler ts)"
@@ -436,8 +453,7 @@
"(read-accept-reader #t)"
"(read-accept-lang #f)"
"(current-readtable #f))"
-"(let((v(let((p(open-input-file(if user? user-links-path links-path)"
-" 'binary)))"
+"(let((v(let((p(open-input-file a-links-path 'binary)))"
"(dynamic-wind"
" void"
"(lambda() "
@@ -459,9 +475,7 @@
" v))"
" (error \"ill-formed content\"))"
"(let((ht(make-hasheq))"
-"(dir(let-values(((base name dir?)(split-path(if user?"
-" user-links-path"
-" links-path))))"
+"(dir(let-values(((base name dir?)(split-path a-links-path)))"
" base)))"
"(for-each"
"(lambda(p)"
@@ -484,17 +498,21 @@
"(hash-for-each"
" ht"
"(lambda(k v)(hash-set! ht k(reverse v))))"
-"(if user?"
-"(begin"
+"(cond"
+"(user?"
"(set! user-links-cache ht)"
"(set! user-links-stamp ts))"
-"(begin"
+"(shared?"
+"(set! shared-links-cache ht)"
+"(set! shared-links-stamp ts))"
+"(else"
"(set! links-cache ht)"
"(set! links-stamp ts)))"
" ht))))"
-"(if user?"
-" user-links-cache"
-" links-cache))))))))"
+"(cond"
+"(user? user-links-cache)"
+"(shared? shared-links-cache)"
+"(else links-cache)))))))))"
"(define-values(normalize-collection-reference)"
"(lambda(collection collection-path)"
"(cond"
@@ -524,12 +542,16 @@
"(links?(use-collection-link-paths)))"
"(append"
"(if(and links?(use-user-specific-search-paths))"
-"(let((ht(get-linked-collections #t)))"
+"(append"
+"(let((ht(get-linked-collections #t #f)))"
"(append(hash-ref ht sym null)"
"(hash-ref ht #f null)))"
+"(let((ht(get-linked-collections #f #t)))"
+"(append(hash-ref ht sym null)"
+"(hash-ref ht #f null))))"
" null)"
"(if(and links? links-path)"
-"(let((ht(get-linked-collections #f)))"
+"(let((ht(get-linked-collections #f #f)))"
"(append(hash-ref ht sym null)"
"(hash-ref ht #f null)))"
" null)"
diff --git a/racket/src/racket/src/startup.rktl b/racket/src/racket/src/startup.rktl
index 5bd7afa068..25417a3239 100644
--- a/racket/src/racket/src/startup.rktl
+++ b/racket/src/racket/src/startup.rktl
@@ -405,10 +405,17 @@
collection collection-path
file-name)))
- (define-values (user-links-path) (find-system-path 'links-file))
+ (define-values (user-links-path) (build-path (find-system-path 'addon-dir)
+ (version)
+ "links.rktd"))
(define-values (user-links-cache) (make-hasheq))
(define-values (user-links-stamp) #f)
+ (define-values (shared-links-path) (build-path (find-system-path 'addon-dir)
+ "links.rktd"))
+ (define-values (shared-links-cache) (make-hasheq))
+ (define-values (shared-links-stamp) #f)
+
(define-values (links-path) (find-links-path!
;; This thunk is called once per place, and the result
;; is remembered for later invocations. Otherwise, the
@@ -462,7 +469,7 @@
(lambda () (close-input-port p)))))))))
(define-values (get-linked-collections)
- (lambda (user?)
+ (lambda (user? shared?)
(call/ec (lambda (esc)
(define-values (make-handler)
(lambda (ts)
@@ -473,18 +480,24 @@
(log-message l 'error
(format
"error reading collection links file ~s: ~a"
- (if user? user-links-path links-path)
+ (cond
+ [user? user-links-path]
+ [shared? shared-links-path]
+ [else links-path])
(exn-message exn))
(current-continuation-marks))))
(void))
(when ts
- (if user?
- (begin
- (set! user-links-cache (make-hasheq))
- (set! user-links-stamp ts))
- (begin
- (set! links-cache (make-hasheq))
- (set! links-stamp ts))))
+ (cond
+ [user?
+ (set! user-links-cache (make-hasheq))
+ (set! user-links-stamp ts)]
+ [shared?
+ (set! shared-links-cache (make-hasheq))
+ (set! shared-links-stamp ts)]
+ [else
+ (set! links-cache (make-hasheq))
+ (set! links-stamp ts)]))
(if (exn:fail? exn)
(esc (make-hasheq))
;; re-raise the exception (which is probably a break)
@@ -492,10 +505,15 @@
(with-continuation-mark
exception-handler-key
(make-handler #f)
- (let ([ts (file->stamp (if user?
- user-links-path
- links-path))])
- (if (not (equal? ts (if user? user-links-stamp links-stamp)))
+ (let* ([a-links-path (cond
+ [user? user-links-path]
+ [shared? shared-links-path]
+ [else links-path])]
+ [ts (file->stamp a-links-path)])
+ (if (not (equal? ts (cond
+ [user? user-links-stamp]
+ [shared? shared-links-stamp]
+ [else links-stamp])))
(with-continuation-mark
exception-handler-key
(make-handler ts)
@@ -513,8 +531,7 @@
[read-accept-reader #t]
[read-accept-lang #f]
[current-readtable #f])
- (let ([v (let ([p (open-input-file (if user? user-links-path links-path)
- 'binary)])
+ (let ([v (let ([p (open-input-file a-links-path 'binary)])
(dynamic-wind
void
(lambda ()
@@ -536,9 +553,7 @@
v))
(error "ill-formed content"))
(let ([ht (make-hasheq)]
- [dir (let-values ([(base name dir?) (split-path (if user?
- user-links-path
- links-path))])
+ [dir (let-values ([(base name dir?) (split-path a-links-path)])
base)])
(for-each
(lambda (p)
@@ -567,17 +582,21 @@
ht
(lambda (k v) (hash-set! ht k (reverse v))))
;; save table & file content:
- (if user?
- (begin
- (set! user-links-cache ht)
- (set! user-links-stamp ts))
- (begin
- (set! links-cache ht)
- (set! links-stamp ts)))
+ (cond
+ [user?
+ (set! user-links-cache ht)
+ (set! user-links-stamp ts)]
+ [shared?
+ (set! shared-links-cache ht)
+ (set! shared-links-stamp ts)]
+ [else
+ (set! links-cache ht)
+ (set! links-stamp ts)])
ht))))
- (if user?
- user-links-cache
- links-cache))))))))
+ (cond
+ [user? user-links-cache]
+ [shared? shared-links-cache]
+ [else links-cache]))))))))
(define-values (normalize-collection-reference)
(lambda (collection collection-path)
@@ -611,13 +630,17 @@
(append
;; list of paths and (box path)s:
(if (and links? (use-user-specific-search-paths))
- (let ([ht (get-linked-collections #t)])
- (append (hash-ref ht sym null)
- (hash-ref ht #f null)))
+ (append
+ (let ([ht (get-linked-collections #t #f)])
+ (append (hash-ref ht sym null)
+ (hash-ref ht #f null)))
+ (let ([ht (get-linked-collections #f #t)])
+ (append (hash-ref ht sym null)
+ (hash-ref ht #f null))))
null)
;; list of paths and (box path)s:
(if (and links? links-path)
- (let ([ht (get-linked-collections #f)])
+ (let ([ht (get-linked-collections #f #f)])
(append (hash-ref ht sym null)
(hash-ref ht #f null)))
null)