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)