From dcedd6e2be5b58bf5f26e1a5c7f5305502d889f8 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 21 Dec 2011 11:26:46 -0700 Subject: [PATCH 01/18] fix for `scribble --text' and tables --- collects/scribble/text-render.rkt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/collects/scribble/text-render.rkt b/collects/scribble/text-render.rkt index 7cd34bf65c..472a550e0f 100644 --- a/collects/scribble/text-render.rkt +++ b/collects/scribble/text-render.rkt @@ -99,12 +99,13 @@ (if (eq? i 'cont) 0 (apply max d (map string-length i))))) - (apply map list strs))]) + (apply map list strs))] + [x-length (lambda (col) (if (eq? col 'cont) 0 (length col)))]) (for/fold ([indent? #f]) ([row (in-list strs)]) - (let ([h (apply max 0 (map length row))]) + (let ([h (apply max 0 (map x-length row))]) (let ([row* (for/list ([i (in-range h)]) (for/list ([col (in-list row)]) - (if (i . < . (length col)) + (if (i . < . (x-length col)) (list-ref col i) "")))]) (for/fold ([indent? indent?]) ([sub-row (in-list row*)]) @@ -116,7 +117,7 @@ "" col)]) (display col) - (display (make-string (- w (string-length col)) #\space))) + (display (make-string (max 0 (- w (string-length col))) #\space))) #t) (newline) #t))) From 58b111485f8eb5bf0cb172a8d66bc91c6f4d46d0 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 21 Dec 2011 09:00:48 -0700 Subject: [PATCH 02/18] int -> intptr_t fixes --- src/racket/src/port.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/racket/src/port.c b/src/racket/src/port.c index 9ea6563481..0b7c366be3 100644 --- a/src/racket/src/port.c +++ b/src/racket/src/port.c @@ -3191,7 +3191,7 @@ static MZ_INLINE intptr_t get_one_byte(GC_CAN_IGNORE const char *who, ip = (Scheme_Input_Port *)port; if (!ip->slow) { Scheme_Get_String_Fun gs; - int v; + intptr_t v; gs = ip->get_string_fun; @@ -8695,7 +8695,7 @@ static void close_subprocess_handle(void *sp, void *ignored) CloseHandle(subproc->handle); } -static void CopyFileHandleForSubprocess(int *hs, int pos) +static void CopyFileHandleForSubprocess(intptr_t *hs, int pos) { HANDLE h2; int alt_pos = (pos ? 0 : 1); @@ -8714,7 +8714,7 @@ static void CopyFileHandleForSubprocess(int *hs, int pos) } } -static void CloseFileHandleForSubprocess(int *hs, int pos) +static void CloseFileHandleForSubprocess(intptr_t *hs, int pos) { int alt_pos = (pos ? 0 : 1); if (hs[alt_pos]) { From 24991f0c1a4bd6f72c3fcc00753d8eee7b04a3e1 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 21 Dec 2011 11:24:59 -0700 Subject: [PATCH 03/18] win64: fix JIT SSE-based FP XMM6-15 are preserved in the Win64 ABI --- src/racket/src/lightning/i386/fp-sse.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/racket/src/lightning/i386/fp-sse.h b/src/racket/src/lightning/i386/fp-sse.h index 193a833c8c..015b2bcae0 100644 --- a/src/racket/src/lightning/i386/fp-sse.h +++ b/src/racket/src/lightning/i386/fp-sse.h @@ -35,15 +35,21 @@ #ifndef __lightning_fp_sse_h #define __lightning_fp_sse_h -#define JIT_FPR_NUM 6 +#ifdef _WIN64 +/* Win64 ABI has only 6 volatile XMM registers, and we need to + use one register as scratch: */ +# define JIT_FPR_NUM 5 +#else +# define JIT_FPR_NUM 6 +#endif #define _XMM0 0x60 -#ifdef JIT_X86_64 -# define JIT_FPR(i) (_XMM0 + 8 + (i)) -#else -# define JIT_FPR(i) (_XMM0 + (i)) -#endif -#define JIT_FPTMP0 JIT_FPR(6) +/* It night be better to avoid the first 8 registers for + non-Win64 x86_64 mode, since those registers can be + used for arguments in C function calls. Racket doesn't + use FP arguments for C calls, though. */ +#define JIT_FPR(i) (_XMM0 + (i)) +#define JIT_FPTMP0 JIT_FPR(JIT_FPR_NUM) #define jit_addr_d(f0, f1, f2) \ ((f0 == f1) \ From 188c65661d1b4bf9dc605406f7eb612873ce032d Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Wed, 21 Dec 2011 03:13:34 -0500 Subject: [PATCH 04/18] Fixes and improvements to `net/unihead'. * Use `re:non-ascii' to look for a non-ascii character => faster. * Use either CR or LF for a newline, not just LF. * Use `regexp-replace*' to encode the parts between the lines. Besides making the code simpler, it fixes a bug in the previous code where multiple lines would each get encoded and the results concatenated without the newlines or any other whitespace. --- collects/net/unihead.rkt | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/collects/net/unihead.rkt b/collects/net/unihead.rkt index f7a99e9e7d..1cc821c1c1 100644 --- a/collects/net/unihead.rkt +++ b/collects/net/unihead.rkt @@ -1,16 +1,14 @@ #lang racket/base -(require net/base64 net/qp racket/string) +(require net/base64 net/qp) (provide encode-for-header decode-for-header generalize-encoding) -(define re:ascii #rx"^[\u0-\u7F]*$") +(define re:non-ascii #rx"[^\u0-\u7F]") (define (encode-for-header s) - (if (regexp-match? re:ascii s) - s - (let ([l (regexp-split #rx"\r\n" s)]) - (apply string-append - (map encode-line-for-header l))))) + (cond [(not (regexp-match? re:non-ascii s)) s] + [(not (regexp-match? #rx"\r\n" s)) (encode-line-for-header s)] ; speed + [else (regexp-replace* #rx"[^\r\n]+" s encode-line-for-header)])) (define (encode-line-for-header s) (define (loop s string->bytes charset encode encoding) @@ -32,14 +30,13 @@ (encode (string->bytes s)) #""))))))) (cond - [(regexp-match? re:ascii s) - ;; ASCII - do nothing - s] + ;; ASCII - do nothing + [(not (regexp-match? re:non-ascii s)) s] + ;; Not Latin-1, so use UTF-8 [(regexp-match? #rx"[^\u0-\uFF]" s) - ;; Not Latin-1, so use UTF-8 (loop s string->bytes/utf-8 "UTF-8" base64-encode "B")] + ;; use Latin-1 [else - ;; use Latin-1 (loop s string->bytes/latin-1 "ISO-8859-1" (lambda (s) (regexp-replace #rx#" " (qp-encode s) #"_")) From ed8e3367d48a0e9384d9779d46eccb265a1e7d03 Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Wed, 21 Dec 2011 13:35:58 -0500 Subject: [PATCH 05/18] More fixes and improvements to `net/unihead'. * In base64 encoding remove all newlines from the encoded result, avoids getting an invalid result. * In qp encoding: - replace all spaces by underlines, not just the first (looks like a typo in the previous code) - encode "?"s and "_"s too, as required for this encoding - remove soft newlines (again, avoid an invalid result) * Use `regexp-replace*' to encode the parts between the lines. Besides making the code simpler, it fixes a bug in the previous code where multiple lines would each get encoded and the results concatenated without the newlines or any other whitespace. * When the string to be encoded is longer than 70 characters, split and encode the sub-parts, then concatenate the encodings with a "\n " separator. This is done as a poor attempt to follow the line length limits specified in rfc2047, or more concretely, to avoid sendmail's "!\n " splitting. --- collects/net/unihead.rkt | 78 +++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/collects/net/unihead.rkt b/collects/net/unihead.rkt index 1cc821c1c1..7dd39246d8 100644 --- a/collects/net/unihead.rkt +++ b/collects/net/unihead.rkt @@ -10,37 +10,68 @@ [(not (regexp-match? #rx"\r\n" s)) (encode-line-for-header s)] ; speed [else (regexp-replace* #rx"[^\r\n]+" s encode-line-for-header)])) +;; Note: the following two encoder wrappers remove newlines from the +;; encoded strings. This avoids producing invalid strings, but it's not +;; complete: rfc2047 (section 2) specifies that encoded words should not +;; be longer than 75 characters, and longer words should be split for +;; encoding with a separator of CRLF SPACE between them. The problem is +;; that doing this properly requires changing the encoders to get a +;; length limit and have them return also the leftover unencoded string. +;; Instead of doing all of that, do something simpler: if the string to +;; be encoded is longer than 70 characters, then split it. (This is +;; done in `encode-line-for-header' below.) It's possible to get longer +;; encodings with this, but it seems that sendmail's limit on line +;; lengths is sufficiently larger that it works fine in practice. (BTW, +;; when sendmail gets lines that are too long it splits them with the +;; dreaded "!\n ", and it looks like there is no sane way to avoid that +;; behavior -- so splitting the input is needed.) + +(define (base64-encode-header s) + (regexp-replace* #rx#"[\r\n]+" (base64-encode s) #"")) + +(define (qp-encode-header s) + ;; rfc2047 (section 4.2) calls this "Q encoding", which is different + ;; from the usual QP encoding: encode underlines and question marks, + ;; and replace spaces by underlines; also remove soft-newlines. + (regexp-replace* #rx#"[ ?_]" + (regexp-replace* #rx#"=\r?\n" (qp-encode s) #"") + (λ (b) + (case (bytes-ref b 0) + [(32) #"_"] ; " " + [(63) #"=3F"] ; "?" + [(95) #"=5F"] ; "_" + [else (error 'qp-encode-header "internal error")])))) + (define (encode-line-for-header s) - (define (loop s string->bytes charset encode encoding) - ;; Find ASCII (and no "=") prefix before a space - (let ([m (regexp-match #rx"^([\u0-\u3c\u3e-\u7F]* )(.*)$" s)]) - (if m - (string-append - (cadr m) - (loop (caddr m) string->bytes charset encode encoding)) + (define (do-encode s string->bytes charset encode encoding) + (let loop ([s s]) + (cond + ;; Find ASCII (and no "=") prefix before a space + [(regexp-match #rx"^([\u0-\u3c\u3e-\u7F]* )(.*)$" s) + => (λ (m) (string-append (cadr m) (loop (caddr m))))] ;; Find ASCII (and no "=") suffix after a space - (let ([m (regexp-match #rx"^(.*?)( [\u0-\u3c\u3e-\u7F]*)$" s)]) - (if m - (string-append - (loop (cadr m) string->bytes charset encode encoding) - (caddr m)) - (format "=?~a?~a?~a?=" - charset encoding - (regexp-replace* #rx#"[\r\n]+$" - (encode (string->bytes s)) - #""))))))) + [(regexp-match #rx"^(.*?)( [\u0-\u3c\u3e-\u7F]*)$" s) + => (λ (m) (string-append (loop (cadr m)) (caddr m)))] + [else + ;; Split lines longer than 70 chars and re-assemble (see above + ;; comment). Note that the proper separator should use CRLF, + ;; but we're sending this to a sendmail process that will take + ;; care of that level. + (let loop ([bytes (string->bytes s)]) + (if ((bytes-length bytes) . > . 70) + (string-append (loop (subbytes bytes 0 70)) + "\n " + (loop (subbytes bytes 70))) + (format "=?~a?~a?~a?=" charset encoding (encode bytes))))]))) (cond ;; ASCII - do nothing [(not (regexp-match? re:non-ascii s)) s] ;; Not Latin-1, so use UTF-8 [(regexp-match? #rx"[^\u0-\uFF]" s) - (loop s string->bytes/utf-8 "UTF-8" base64-encode "B")] + (do-encode s string->bytes/utf-8 "UTF-8" base64-encode-header "B")] ;; use Latin-1 [else - (loop s string->bytes/latin-1 "ISO-8859-1" - (lambda (s) - (regexp-replace #rx#" " (qp-encode s) #"_")) - "Q")])) + (do-encode s string->bytes/latin-1 "ISO-8859-1" qp-encode-header "Q")])) ;; ---------------------------------------- @@ -65,8 +96,7 @@ (if m (let ([s ((if (member (cadddr m) '(#"q" #"Q")) ;; quoted-printable, with special _ handling - (lambda (x) - (qp-decode (regexp-replace* #rx#"_" x #" "))) + (λ (x) (qp-decode (regexp-replace* #rx#"_" x #" "))) ;; base64: base64-decode) (cadddr (cdr m)))] From 5a7f1b15ed34533a8231b76b4e2545ed9e9dc2ad Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 21 Dec 2011 13:57:16 -0700 Subject: [PATCH 06/18] mysterx: fix private/mxmain hack to avoid cross-module optimization Using the old extension protocol for MysterX --- plus the hack of a dummy source module for a kind of portability --- really should be replaced with an FFI-based approach to the MysterX DLL. --- collects/mysterx/private/mxmain.rkt | 868 ++++++++++------------------ 1 file changed, 297 insertions(+), 571 deletions(-) diff --git a/collects/mysterx/private/mxmain.rkt b/collects/mysterx/private/mxmain.rkt index 382a7af6a7..acaaed77f3 100644 --- a/collects/mysterx/private/mxmain.rkt +++ b/collects/mysterx/private/mxmain.rkt @@ -1,575 +1,301 @@ -(module mxmain mzscheme +#lang racket/base - ; dummy entries to make Setup happy - ; these are the names defined in mxPrims[] in src/mysterx.cxx +(error "mxmain.rkt: you seem to be missing mxmain.dll; you need to build MysterX in plt\\src\\mysterx\\") - (provide - mx-version - block-while-browsers - com-invoke - com-set-property! - com-get-property - com-get-properties - com-set-properties - com-methods - com-events - com-method-type - com-get-property-type - com-set-property-type - com-event-type - com-help - com-object-type - com-is-a? - com-currency? - com-date? - com-date->date - date->com-date - com-scode? - com-scode->number - number->com-scode - com-currency->number - number->com-currency - com-object? - com-iunknown? - com-register-event-handler - com-unregister-event-handler - com-all-coclasses - com-all-controls - coclass->html - progid->html - cocreate-instance-from-coclass - cocreate-instance-from-progid - com-get-active-object-from-coclass - coclass - progid - set-coclass! - set-coclass-from-progid! - com-object-eq? - com-register-object - com-release-object - com-add-ref - com-ref-count - com-terminate - make-browser - browser-show - navigate - go-back - go-forward - refresh - iconize - restore - current-url - register-navigate-handler - current-document - print-document - document? - document-title - document-insert-html - document-append-html - document-replace-html - document-find-element - document-find-element-by-id-or-name - document-elements-with-tag - document-objects - element-insert-html - element-append-html - element-insert-text - element-append-text - element-replace-html - element-get-html - element-get-text - element-focus - element-selection - element-set-selection! - element-attribute - element-set-attribute! - element-click - element-tag - element-font-family - element-set-font-family! - element-font-style - element-set-font-style! - element-font-variant - element-set-font-variant! - element-font-weight - element-set-font-weight! - element-font - element-set-font! - element-background - element-set-background! - element-background-attachment - element-set-background-attachment! - element-background-image - element-set-background-image! - element-background-repeat - element-set-background-repeat! - element-background-position - element-set-background-position! - element-text-decoration - element-set-text-decoration! - element-text-transform - element-set-text-transform! - element-text-align - element-set-text-align! - element-margin - element-set-margin! - element-padding - element-set-padding! - element-border - element-set-border! - element-border-top - element-set-border-top! - element-border-bottom - element-set-border-bottom! - element-border-left - element-set-border-left! - element-border-right - element-set-border-right! - element-border-color - element-set-border-color! - element-border-width - element-set-border-width! - element-border-style - element-set-border-style! - element-border-top-style - element-set-border-top-style! - element-border-bottom-style - element-set-border-bottom-style! - element-border-left-style - element-set-border-left-style! - element-border-right-style - element-set-border-right-style! - element-style-float - element-set-style-float! - element-clear - element-set-clear! - element-display - element-set-display! - element-visibility - element-set-visibility! - element-list-style-type - element-set-list-style-type! - element-list-style-position - element-set-list-style-position! - element-list-style-image - element-set-list-style-image! - element-list-style - element-set-list-style! - element-position - element-overflow - element-set-overflow! - element-pagebreak-before - element-set-pagebreak-before! - element-pagebreak-after - element-set-pagebreak-after! - element-css-text - element-set-css-text! - element-cursor - element-set-cursor! - element-clip - element-set-clip! - element-filter - element-set-filter! - element-style-string - element-text-decoration-none - element-set-text-decoration-none! - element-text-decoration-underline - element-set-text-decoration-underline! - element-text-decoration-overline - element-set-text-decoration-overline! - element-text-decoration-linethrough - element-set-text-decoration-linethrough! - element-text-decoration-blink - element-set-text-decoration-blink! - element-pixel-top - element-set-pixel-top! - element-pixel-left - element-set-pixel-left! - element-pixel-width - element-set-pixel-width! - element-pixel-height - element-set-pixel-height! - element-pos-top - element-set-pos-top! - element-pos-left - element-set-pos-left! - element-pos-width - element-set-pos-width! - element-pos-height - element-set-pos-height! - element-font-size - element-set-font-size! - element-color - element-set-color! - element-background-color - element-set-background-color! - element-background-position-x - element-set-background-position-x! - element-background-position-y - element-set-background-position-y! - element-letter-spacing - element-set-letter-spacing! - element-vertical-align - element-set-vertical-align! - element-text-indent - element-set-text-indent! - element-line-height - element-set-line-height! - element-margin-top - element-set-margin-top! - element-margin-bottom - element-set-margin-bottom! - element-margin-left - element-set-margin-left! - element-margin-right - element-set-margin-right! - element-padding-top - element-set-padding-top! - element-padding-bottom - element-set-padding-bottom! - element-padding-left - element-set-padding-left! - element-padding-right - element-set-padding-right! - element-border-top-color - element-set-border-top-color! - element-border-bottom-color - element-set-border-bottom-color! - element-border-left-color - element-set-border-left-color! - element-border-right-color - element-set-border-right-color! - element-border-top-width - element-set-border-top-width! - element-border-bottom-width - element-set-border-bottom-width! - element-border-left-width - element-set-border-left-width! - element-border-right-width - element-set-border-right-width! - element-width - element-set-width! - element-height - element-set-height! - element-top - element-set-top! - element-left - element-set-left! - element-z-index - element-set-z-index! - event? - get-event - event-tag - event-id - event-from-tag - event-from-id - event-to-tag - event-to-id - event-keycode - event-shiftkey - event-ctrlkey - event-altkey - event-x - event-y - event-keypress? - event-keydown? - event-keyup? - event-mousedown? - event-mousemove? - event-mouseover? - event-mouseout? - event-mouseup? - event-click? - event-dblclick? - event-error? - block-until-event - process-win-events - release-type-table - com-omit - %%initialize-dotnet-runtime) +(define-syntax provide-dummy + (syntax-rules () + [(_ id) (begin + (provide id) + (define id (false/thwart-optimization)))] + [(_ id ...) (begin (provide-dummy id) ...)])) - (error "mxmain.rkt: you seem to be missing mxmain.dll; you need to build MysterX in plt\\src\\mysterx\\") +(define false/thwart-optimization #f) +(set! false/thwart-optimization (lambda () #f)) - (define mx-version #f) - (define block-while-browsers #f) - (define com-invoke #f) - (define com-set-property! #f) - (define com-get-property #f) - (define com-get-properties #f) - (define com-set-properties #f) - (define com-methods #f) - (define com-events #f) - (define com-method-type #f) - (define com-get-property-type #f) - (define com-set-property-type #f) - (define com-event-type #f) - (define com-help #f) - (define com-object-type #f) - (define com-is-a? #f) - (define com-currency? #f) - (define com-date? #f) - (define com-date->date #f) - (define date->com-date #f) - (define com-scode? #f) - (define com-scode->number #f) - (define number->com-scode #f) - (define com-currency->number #f) - (define number->com-currency #f) - (define com-object? #f) - (define com-iunknown? #f) - (define com-register-event-handler #f) - (define com-unregister-event-handler #f) - (define com-all-coclasses #f) - (define com-all-controls #f) - (define coclass->html #f) - (define progid->html #f) - (define cocreate-instance-from-coclass #f) - (define cocreate-instance-from-progid #f) - (define com-get-active-object-from-coclass #f) - (define coclass #f) - (define progid #f) - (define set-coclass! #f) - (define set-coclass-from-progid! #f) - (define com-object-eq? #f) - (define com-register-object #f) - (define com-release-object #f) - (define com-add-ref #f) - (define com-ref-count #f) - (define com-terminate #f) - (define make-browser #f) - (define browser-show #f) - (define navigate #f) - (define go-back #f) - (define go-forward #f) - (define refresh #f) - (define iconize #f) - (define restore #f) - (define current-url #f) - (define register-navigate-handler #f) - (define current-document #f) - (define print-document #f) - (define document? #f) - (define document-title #f) - (define document-insert-html #f) - (define document-append-html #f) - (define document-replace-html #f) - (define document-find-element #f) - (define document-find-element-by-id-or-name #f) - (define document-elements-with-tag #f) - (define document-objects #f) - (define element-insert-html #f) - (define element-append-html #f) - (define element-insert-text #f) - (define element-append-text #f) - (define element-replace-html #f) - (define element-get-html #f) - (define element-get-text #f) - (define element-focus #f) - (define element-selection #f) - (define element-set-selection! #f) - (define element-attribute #f) - (define element-set-attribute! #f) - (define element-click #f) - (define element-tag #f) - (define element-font-family #f) - (define element-set-font-family! #f) - (define element-font-style #f) - (define element-set-font-style! #f) - (define element-font-variant #f) - (define element-set-font-variant! #f) - (define element-font-weight #f) - (define element-set-font-weight! #f) - (define element-font #f) - (define element-set-font! #f) - (define element-background #f) - (define element-set-background! #f) - (define element-background-attachment #f) - (define element-set-background-attachment! #f) - (define element-background-image #f) - (define element-set-background-image! #f) - (define element-background-repeat #f) - (define element-set-background-repeat! #f) - (define element-background-position #f) - (define element-set-background-position! #f) - (define element-text-decoration #f) - (define element-set-text-decoration! #f) - (define element-text-transform #f) - (define element-set-text-transform! #f) - (define element-text-align #f) - (define element-set-text-align! #f) - (define element-margin #f) - (define element-set-margin! #f) - (define element-padding #f) - (define element-set-padding! #f) - (define element-border #f) - (define element-set-border! #f) - (define element-border-top #f) - (define element-set-border-top! #f) - (define element-border-bottom #f) - (define element-set-border-bottom! #f) - (define element-border-left #f) - (define element-set-border-left! #f) - (define element-border-right #f) - (define element-set-border-right! #f) - (define element-border-color #f) - (define element-set-border-color! #f) - (define element-border-width #f) - (define element-set-border-width! #f) - (define element-border-style #f) - (define element-set-border-style! #f) - (define element-border-top-style #f) - (define element-set-border-top-style! #f) - (define element-border-bottom-style #f) - (define element-set-border-bottom-style! #f) - (define element-border-left-style #f) - (define element-set-border-left-style! #f) - (define element-border-right-style #f) - (define element-set-border-right-style! #f) - (define element-style-float #f) - (define element-set-style-float! #f) - (define element-clear #f) - (define element-set-clear! #f) - (define element-display #f) - (define element-set-display! #f) - (define element-visibility #f) - (define element-set-visibility! #f) - (define element-list-style-type #f) - (define element-set-list-style-type! #f) - (define element-list-style-position #f) - (define element-set-list-style-position! #f) - (define element-list-style-image #f) - (define element-set-list-style-image! #f) - (define element-list-style #f) - (define element-set-list-style! #f) - (define element-position #f) - (define element-overflow #f) - (define element-set-overflow! #f) - (define element-pagebreak-before #f) - (define element-set-pagebreak-before! #f) - (define element-pagebreak-after #f) - (define element-set-pagebreak-after! #f) - (define element-css-text #f) - (define element-set-css-text! #f) - (define element-cursor #f) - (define element-set-cursor! #f) - (define element-clip #f) - (define element-set-clip! #f) - (define element-filter #f) - (define element-set-filter! #f) - (define element-style-string #f) - (define element-text-decoration-none #f) - (define element-set-text-decoration-none! #f) - (define element-text-decoration-underline #f) - (define element-set-text-decoration-underline! #f) - (define element-text-decoration-overline #f) - (define element-set-text-decoration-overline! #f) - (define element-text-decoration-linethrough #f) - (define element-set-text-decoration-linethrough! #f) - (define element-text-decoration-blink #f) - (define element-set-text-decoration-blink! #f) - (define element-pixel-top #f) - (define element-set-pixel-top! #f) - (define element-pixel-left #f) - (define element-set-pixel-left! #f) - (define element-pixel-width #f) - (define element-set-pixel-width! #f) - (define element-pixel-height #f) - (define element-set-pixel-height! #f) - (define element-pos-top #f) - (define element-set-pos-top! #f) - (define element-pos-left #f) - (define element-set-pos-left! #f) - (define element-pos-width #f) - (define element-set-pos-width! #f) - (define element-pos-height #f) - (define element-set-pos-height! #f) - (define element-font-size #f) - (define element-set-font-size! #f) - (define element-color #f) - (define element-set-color! #f) - (define element-background-color #f) - (define element-set-background-color! #f) - (define element-background-position-x #f) - (define element-set-background-position-x! #f) - (define element-background-position-y #f) - (define element-set-background-position-y! #f) - (define element-letter-spacing #f) - (define element-set-letter-spacing! #f) - (define element-vertical-align #f) - (define element-set-vertical-align! #f) - (define element-text-indent #f) - (define element-set-text-indent! #f) - (define element-line-height #f) - (define element-set-line-height! #f) - (define element-margin-top #f) - (define element-set-margin-top! #f) - (define element-margin-bottom #f) - (define element-set-margin-bottom! #f) - (define element-margin-left #f) - (define element-set-margin-left! #f) - (define element-margin-right #f) - (define element-set-margin-right! #f) - (define element-padding-top #f) - (define element-set-padding-top! #f) - (define element-padding-bottom #f) - (define element-set-padding-bottom! #f) - (define element-padding-left #f) - (define element-set-padding-left! #f) - (define element-padding-right #f) - (define element-set-padding-right! #f) - (define element-border-top-color #f) - (define element-set-border-top-color! #f) - (define element-border-bottom-color #f) - (define element-set-border-bottom-color! #f) - (define element-border-left-color #f) - (define element-set-border-left-color! #f) - (define element-border-right-color #f) - (define element-set-border-right-color! #f) - (define element-border-top-width #f) - (define element-set-border-top-width! #f) - (define element-border-bottom-width #f) - (define element-set-border-bottom-width! #f) - (define element-border-left-width #f) - (define element-set-border-left-width! #f) - (define element-border-right-width #f) - (define element-set-border-right-width! #f) - (define element-width #f) - (define element-set-width! #f) - (define element-height #f) - (define element-set-height! #f) - (define element-top #f) - (define element-set-top! #f) - (define element-left #f) - (define element-set-left! #f) - (define element-z-index #f) - (define element-set-z-index! #f) - (define event? #f) - (define get-event #f) - (define event-tag #f) - (define event-id #f) - (define event-from-tag #f) - (define event-from-id #f) - (define event-to-tag #f) - (define event-to-id #f) - (define event-keycode #f) - (define event-shiftkey #f) - (define event-ctrlkey #f) - (define event-altkey #f) - (define event-x #f) - (define event-y #f) - (define event-keypress? #f) - (define event-keydown? #f) - (define event-keyup? #f) - (define event-mousedown? #f) - (define event-mousemove? #f) - (define event-mouseover? #f) - (define event-mouseout? #f) - (define event-mouseup? #f) - (define event-click? #f) - (define event-dblclick? #f) - (define event-error? #f) - (define block-until-event #f) - (define process-win-events #f) - (define release-type-table #f) - (define com-omit #f) - (define %%initialize-dotnet-runtime #f)) +;; dummy entries to make Setup happy; +;; these are the names defined in mxPrims[] in src/mysterx.cxx + +(provide-dummy + mx-version + block-while-browsers + com-invoke + com-set-property! + com-get-property + com-get-properties + com-set-properties + com-methods + com-events + com-method-type + com-get-property-type + com-set-property-type + com-event-type + com-help + com-object-type + com-is-a? + com-currency? + com-date? + com-date->date + date->com-date + com-scode? + com-scode->number + number->com-scode + com-currency->number + number->com-currency + com-object? + com-iunknown? + com-register-event-handler + com-unregister-event-handler + com-all-coclasses + com-all-controls + coclass->html + progid->html + cocreate-instance-from-coclass + cocreate-instance-from-progid + com-get-active-object-from-coclass + coclass + progid + set-coclass! + set-coclass-from-progid! + com-object-eq? + com-register-object + com-release-object + com-add-ref + com-ref-count + com-terminate + make-browser + browser-show + navigate + go-back + go-forward + refresh + iconize + restore + current-url + register-navigate-handler + current-document + print-document + document? + document-title + document-insert-html + document-append-html + document-replace-html + document-find-element + document-find-element-by-id-or-name + document-elements-with-tag + document-objects + element-insert-html + element-append-html + element-insert-text + element-append-text + element-replace-html + element-get-html + element-get-text + element-focus + element-selection + element-set-selection! + element-attribute + element-set-attribute! + element-click + element-tag + element-font-family + element-set-font-family! + element-font-style + element-set-font-style! + element-font-variant + element-set-font-variant! + element-font-weight + element-set-font-weight! + element-font + element-set-font! + element-background + element-set-background! + element-background-attachment + element-set-background-attachment! + element-background-image + element-set-background-image! + element-background-repeat + element-set-background-repeat! + element-background-position + element-set-background-position! + element-text-decoration + element-set-text-decoration! + element-text-transform + element-set-text-transform! + element-text-align + element-set-text-align! + element-margin + element-set-margin! + element-padding + element-set-padding! + element-border + element-set-border! + element-border-top + element-set-border-top! + element-border-bottom + element-set-border-bottom! + element-border-left + element-set-border-left! + element-border-right + element-set-border-right! + element-border-color + element-set-border-color! + element-border-width + element-set-border-width! + element-border-style + element-set-border-style! + element-border-top-style + element-set-border-top-style! + element-border-bottom-style + element-set-border-bottom-style! + element-border-left-style + element-set-border-left-style! + element-border-right-style + element-set-border-right-style! + element-style-float + element-set-style-float! + element-clear + element-set-clear! + element-display + element-set-display! + element-visibility + element-set-visibility! + element-list-style-type + element-set-list-style-type! + element-list-style-position + element-set-list-style-position! + element-list-style-image + element-set-list-style-image! + element-list-style + element-set-list-style! + element-position + element-overflow + element-set-overflow! + element-pagebreak-before + element-set-pagebreak-before! + element-pagebreak-after + element-set-pagebreak-after! + element-css-text + element-set-css-text! + element-cursor + element-set-cursor! + element-clip + element-set-clip! + element-filter + element-set-filter! + element-style-string + element-text-decoration-none + element-set-text-decoration-none! + element-text-decoration-underline + element-set-text-decoration-underline! + element-text-decoration-overline + element-set-text-decoration-overline! + element-text-decoration-linethrough + element-set-text-decoration-linethrough! + element-text-decoration-blink + element-set-text-decoration-blink! + element-pixel-top + element-set-pixel-top! + element-pixel-left + element-set-pixel-left! + element-pixel-width + element-set-pixel-width! + element-pixel-height + element-set-pixel-height! + element-pos-top + element-set-pos-top! + element-pos-left + element-set-pos-left! + element-pos-width + element-set-pos-width! + element-pos-height + element-set-pos-height! + element-font-size + element-set-font-size! + element-color + element-set-color! + element-background-color + element-set-background-color! + element-background-position-x + element-set-background-position-x! + element-background-position-y + element-set-background-position-y! + element-letter-spacing + element-set-letter-spacing! + element-vertical-align + element-set-vertical-align! + element-text-indent + element-set-text-indent! + element-line-height + element-set-line-height! + element-margin-top + element-set-margin-top! + element-margin-bottom + element-set-margin-bottom! + element-margin-left + element-set-margin-left! + element-margin-right + element-set-margin-right! + element-padding-top + element-set-padding-top! + element-padding-bottom + element-set-padding-bottom! + element-padding-left + element-set-padding-left! + element-padding-right + element-set-padding-right! + element-border-top-color + element-set-border-top-color! + element-border-bottom-color + element-set-border-bottom-color! + element-border-left-color + element-set-border-left-color! + element-border-right-color + element-set-border-right-color! + element-border-top-width + element-set-border-top-width! + element-border-bottom-width + element-set-border-bottom-width! + element-border-left-width + element-set-border-left-width! + element-border-right-width + element-set-border-right-width! + element-width + element-set-width! + element-height + element-set-height! + element-top + element-set-top! + element-left + element-set-left! + element-z-index + element-set-z-index! + event? + get-event + event-tag + event-id + event-from-tag + event-from-id + event-to-tag + event-to-id + event-keycode + event-shiftkey + event-ctrlkey + event-altkey + event-x + event-y + event-keypress? + event-keydown? + event-keyup? + event-mousedown? + event-mousemove? + event-mouseover? + event-mouseout? + event-mouseup? + event-click? + event-dblclick? + event-error? + block-until-event + process-win-events + release-type-table + com-omit + %%initialize-dotnet-runtime) From d020c75202f92873d02998b81bfc4085506df5cf Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 21 Dec 2011 16:05:53 -0700 Subject: [PATCH 07/18] remove libfit --- collects/meta/dist-specs.rkt | 2 - collects/plot/compat.rkt | 5 - collects/plot/deprecated/fit-low-level.rkt | 56 - collects/plot/deprecated/fit.rkt | 57 - collects/plot/scribblings/compat.scrbl | 110 - collects/plot/scribblings/porting.scrbl | 2 + collects/plot/tests/fit-test-1.rkt | 1155 --------- collects/plot/tests/fit-test-2.rkt | 2635 -------------------- collects/plot/tests/sqr.png | Bin 0 -> 12128 bytes collects/plot/tests/trig.png | Bin 0 -> 70211 bytes src/Makefile.in | 15 +- src/configure | 22 +- src/fit/Makefile.in | 37 - src/fit/build.bat | 1 - src/fit/build.rkt | 32 - src/fit/dllexport.h | 6 - src/fit/fit.c | 752 ------ src/fit/fit.h | 62 - src/fit/matrix.c | 315 --- src/fit/matrix.h | 75 - src/get-libs.rkt | 6 +- src/racket/configure.ac | 11 - 22 files changed, 6 insertions(+), 5350 deletions(-) delete mode 100644 collects/plot/deprecated/fit-low-level.rkt delete mode 100644 collects/plot/deprecated/fit.rkt delete mode 100644 collects/plot/tests/fit-test-1.rkt delete mode 100644 collects/plot/tests/fit-test-2.rkt create mode 100644 collects/plot/tests/sqr.png create mode 100644 collects/plot/tests/trig.png delete mode 100644 src/fit/Makefile.in delete mode 100644 src/fit/build.bat delete mode 100644 src/fit/build.rkt delete mode 100644 src/fit/dllexport.h delete mode 100644 src/fit/fit.c delete mode 100644 src/fit/fit.h delete mode 100644 src/fit/matrix.c delete mode 100644 src/fit/matrix.h diff --git a/collects/meta/dist-specs.rkt b/collects/meta/dist-specs.rkt index 91828537e9..877d7eaeee 100644 --- a/collects/meta/dist-specs.rkt +++ b/collects/meta/dist-specs.rkt @@ -661,8 +661,6 @@ mz-extras :+= (- (package: "swindle") ;; -------------------- plot plt-extras :+= (package: "plot") - (src: "fit") - (lib: "libfit*") ;; -------------------- mzcom plt-extras :+= (- (package: "mzcom" #:src? #t) diff --git a/collects/plot/compat.rkt b/collects/plot/compat.rkt index 43df706fef..e3d6c006b2 100644 --- a/collects/plot/compat.rkt +++ b/collects/plot/compat.rkt @@ -18,8 +18,6 @@ plot-foreground plot-background plot3d-angle plot3d-altitude)) "deprecated/renderers.rkt" - ;; Curve fitting - "deprecated/fit.rkt" ;; Miscellaneous "deprecated/math.rkt") @@ -31,9 +29,6 @@ contour shade surface) (only-doc-out (all-defined-out)) - ;; Curve fitting - (rename-out [fit-int fit]) - (struct-out fit-result) ;; Miscellaneous make-vec derivative gradient) diff --git a/collects/plot/deprecated/fit-low-level.rkt b/collects/plot/deprecated/fit-low-level.rkt deleted file mode 100644 index 82415aeb12..0000000000 --- a/collects/plot/deprecated/fit-low-level.rkt +++ /dev/null @@ -1,56 +0,0 @@ -(module fit-low-level racket/base - (require mzlib/foreign mzlib/runtime-path - (for-syntax racket/base)) - (unsafe!) - - (define-runtime-path libfit-path '(so "libfit")) - - (define libfit (ffi-lib libfit-path)) - - (define do-fit-int - (get-ffi-obj "do_fit" libfit - (_fun (func : (_fun _int _pointer -> _double)) - (val-num : _int = (length x-values)) - (x-values : (_list i _double*)) - (y-values : (_list i _double*)) - (z-values : (_list i _double*)) - (errors : (_list i _double*)) - (param-num : _int = (length params)) - (params : (_list i _double*)) - -> (_list o _double* param-num)))) - - (define (do-fit callback x-vals y-vals z-vals errors params) - (do-fit-int (lambda (argc argv) - (let ([args (cblock->list argv _double argc)]) - (apply callback args))) - x-vals y-vals z-vals errors params)) - - (define get-asym-error - (get-ffi-obj "get_asym_error" libfit - (_fun (len : _?) ; len is only used for list conversion - -> (_list o _double* len)))) - - (define get-asym-error-percent - (get-ffi-obj "get_asym_error_percent" libfit - (_fun (len : _?) ; len is only used for list conversion - -> (_list o _double* len)))) - - (define get-rms - (get-ffi-obj "get_rms" libfit - (_fun -> _double*))) - - (define get-varience - (get-ffi-obj "get_varience" libfit - (_fun -> _double*))) - - (define (fit-internal f-of-x-y x-vals y-vals z-vals err-vals params) - - (let* ([len (length params)] - [fit-result (do-fit f-of-x-y x-vals y-vals z-vals err-vals params)] - [asym-error (get-asym-error len)] - [asym-error-percent (get-asym-error-percent len)] - [rms (get-rms)] - [varience (get-varience)]) - (list fit-result asym-error asym-error-percent rms varience))) - - (provide fit-internal)) diff --git a/collects/plot/deprecated/fit.rkt b/collects/plot/deprecated/fit.rkt deleted file mode 100644 index 1308462011..0000000000 --- a/collects/plot/deprecated/fit.rkt +++ /dev/null @@ -1,57 +0,0 @@ -(module fit mzscheme - (require unstable/lazy-require - "math.rkt") - - ;; Require lazily so the rest of 'plot' still works without libfit: - (lazy-require ["fit-low-level.rkt" (fit-internal)]) - - ; a structure contain a the results of a curve-fit - (define-struct fit-result ( - rms - variance - names - final-params - std-error - std-error-percent - function - ) (make-inspector)) - - ; fit-int : (number* -> number) (list-of (symbol number)) (list-of (vector number [number] number number)) -> fit-result - (define (fit-int function guesses data) - (let* ((independent-vars (- (procedure-arity function) (length guesses))) - (f-of-x-y (cond - [(= 1 independent-vars) - (lambda (x y . rest) - (apply function x rest))] - [(= 2 independent-vars) - function] - [else - (error "Function provided is either not of one or two independent variables or the number of - guesses given is incorrect")])) - (x-vals (map vector-x data)) - (y-vals (if (= 1 independent-vars) - x-vals - (map vector-y data))) - (z-vals (if (= 1 independent-vars) - (map vector-y data) - (map vector-z data))) - (err-vals (if (= 1 independent-vars) - (map vector-z data) - (map (lambda (vec) (vector-ref vec 4)) data))) - (result (fit-internal f-of-x-y x-vals y-vals z-vals err-vals (map cadr guesses)))) - (if (null? result) - null - (begin - ;(display result) - (make-fit-result - (list-ref result 3) - (list-ref result 4) - (map car guesses) - (car result) - (cadr result) - (caddr result) - (lambda args (apply function(append args (car result))))))))) - - (provide fit-int - (struct fit-result (rms variance names final-params - std-error std-error-percent function)))) diff --git a/collects/plot/scribblings/compat.scrbl b/collects/plot/scribblings/compat.scrbl index 62693e7df8..07cac36fba 100644 --- a/collects/plot/scribblings/compat.scrbl +++ b/collects/plot/scribblings/compat.scrbl @@ -127,116 +127,6 @@ Returns @racket[#t] if @racket[v] is one of the following symbols, @; ---------------------------------------- -@section[#:tag "curve-fit"]{Curve Fitting} - -@define[fit-warning]{ -@para{ -@bold{Do not use the @(racket fit) function. It is going to be removed in Racket 5.2.1.} -It relies on old C code that nobody understands or is willing to maintain, and that is also slightly crashy. -}} - -@fit-warning - -Quite independent of plotting, and for reasons lost in the sands of time, -the @racketmodname[plot] library provides a non-linear, least-squares -fit algorithm to fit parameterized functions to given data. -The code that implements the algorithm is public -domain, and is used by the @tt{gnuplot} package. - -To fit a particular function to a curve: - -@itemize[ - - @item{Set up the independent and dependent variable data. The first - item in each vector is the independent variable, the second is the - result. The last item is the weight of the error; we can leave it - as @racket[1] since all the items weigh the same. - - @racketblock[ - (define data '(#(0 3 1) - #(1 5 1) - #(2 7 1) - #(3 9 1) - #(4 11 1))) - ] - } - - @item{Set up the function to be fitted using fit. This particular - function looks like a line. The independent variables must come - before the parameters. - - @racketblock[ - (define fit-fun - (lambda (x m b) (+ b (* m x)))) - ] - } - - @item{If possible, come up with some guesses for the values of the - parameters. The guesses can be left as one, but each parameter must - be named.} - - @item{Do the fit. - - @racketblock[ - (define fitted - (fit fit-fun - '((m 1) (b 1)) - data)) - ] - } - - @item{View the resulting parameters; for example, - - @racketblock[ - (fit-result-final-params fitted) - ] - - will produce @racketresultfont{(2.0 3.0)}. - } - - @item{For some visual feedback of the fit result, plot the function - with the new parameters. For convenience, the structure that is - returned by the fit command has already the function. - - @racketblock[ - (plot (mix (points data) - (line (fit-result-function fitted))) - #:y-max 15) - ]}] - -A more realistic example can be found in -@filepath{compat/tests/fit-demo-2.rkt} in the @filepath{plot} collection. - -@defproc[(fit [f (real? ... . -> . real?)] - [guess-list (list/c (list symbol? real?))] - [data (or/c (list-of (vector/c real? real? real?)) - (list-of (vector/c real? real? real? real?)))]) - fit-result?]{ - -@fit-warning - -Attempts to fit a @defterm{fittable function} to the data that is -given. The @racket[guess-list] should be a set of arguments and -values. The more accurate your initial guesses are, the more likely -the fit is to succeed; if there are no good values for the guesses, -leave them as @racket[1].} - -@defstruct[fit-result ([rms real?] - [variance real?] - [names (listof symbol?)] - [final-params (listof real?)] - [std-error (listof real?)] - [std-error-percent (listof real?)] - [function (real? ... . -> . real?)])]{ - -The @racket[params] field contains an associative list of the -parameters specified in @racket[fit] and their values. Note that the -values may not be correct if the fit failed to converge. For a visual -test, use the @racket[function] field to get the function with the -parameters in place and plot it along with the original data.} - -@; ---------------------------------------- - @section{Miscellaneous Functions} @defproc[(derivative [f (real? . -> . real?)] [h real? .000001]) diff --git a/collects/plot/scribblings/porting.scrbl b/collects/plot/scribblings/porting.scrbl index fcb576657d..644b5f7e48 100644 --- a/collects/plot/scribblings/porting.scrbl +++ b/collects/plot/scribblings/porting.scrbl @@ -18,6 +18,8 @@ The update from PLoT version 5.1.3 to 5.2 introduces a few incompatibilities: The argument change in @(racket plot3d) is similar. This should not affect most code because PLoT encourages regarding these data types as black boxes.} @item{The @(racket plot-extend) module no longer exists.} + @item{The @racket[fit] function and @racket[fit-result] functions have been removed.} + ] This section of the PLoT manual will help you port code written for PLoT 5.1.3 and earlier to the most recent PLoT. diff --git a/collects/plot/tests/fit-test-1.rkt b/collects/plot/tests/fit-test-1.rkt deleted file mode 100644 index 9e3f47ed72..0000000000 --- a/collects/plot/tests/fit-test-1.rkt +++ /dev/null @@ -1,1155 +0,0 @@ -#reader(lib"read.ss""wxme")WXME0108 ## -#| - This file uses the GRacket editor format. - Open this file in DrRacket version 5.2.0.1 or later to read it. - - Most likely, it was created by saving a program in DrRacket, - and it probably contains a program with non-text elements - (such as images or comment boxes). - - http://racket-lang.org/ -|# - 44 7 #"wxtext\0" -3 1 6 #"wxtab\0" -1 1 8 #"wximage\0" -2 0 8 #"wxmedia\0" -4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" -1 0 16 #"drscheme:number\0" -3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" -1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" -1 0 93 -( - #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" - #"pclass-wxme.ss\" \"framework\"))\0" -) 0 0 19 #"drscheme:sexp-snip\0" -0 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" -1 0 68 -( - #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" - #"lib\"))\0" -) 1 0 33 #"(lib \"bullet-snip.ss\" \"browser\")\0" -0 0 29 #"drscheme:bindings-snipclass%\0" -1 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" -1 0 22 #"drscheme:lambda-snip%\0" -1 0 8 #"gb:core\0" -5 0 10 #"gb:canvas\0" -5 0 17 #"gb:editor-canvas\0" -5 0 10 #"gb:slider\0" -5 0 9 #"gb:gauge\0" -5 0 11 #"gb:listbox\0" -5 0 12 #"gb:radiobox\0" -5 0 10 #"gb:choice\0" -5 0 8 #"gb:text\0" -5 0 11 #"gb:message\0" -5 0 10 #"gb:button\0" -5 0 12 #"gb:checkbox\0" -5 0 18 #"gb:vertical-panel\0" -5 0 9 #"gb:panel\0" -5 0 20 #"gb:horizontal-panel\0" -5 0 33 #"(lib \"readable.ss\" \"guibuilder\")\0" -1 0 57 -#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" -1 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" -1 0 26 #"drscheme:pict-value-snip%\0" -0 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" -2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" -1 0 18 #"drscheme:xml-snip\0" -1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" -1 0 21 #"drscheme:scheme-snip\0" -2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" -1 0 10 #"text-box%\0" -1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" -1 0 15 #"test-case-box%\0" -2 0 1 6 #"wxloc\0" - 0 0 129 0 1 #"\0" -0 75 1 #"\0" -0 12 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 -#"Standard\0" -0 75 10 #"Monospace\0" -0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 -#"framework:default-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 -#"text:ports out\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 15 #"text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 -#"text:ports value\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 27 #"Matching Parenthesis Style\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:symbol\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 38 -#"framework:syntax-color:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 39 -#"framework:syntax-color:scheme:constant\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 42 -#"framework:syntax-color:scheme:parenthesis\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:other\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -38 #"drracket:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 -#"drracket:check-syntax:set!d\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 37 -#"drracket:check-syntax:unused-require\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"drracket:check-syntax:free-variable\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 -#"drracket:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 47 -#"drracket:check-syntax:my-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 -#"drracket:check-syntax:their-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 48 -#"drracket:check-syntax:unk-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -49 #"drracket:check-syntax:both-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -26 #"plt:htdp:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 -#"plt:htdp:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 4 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 4 #"XML\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 37 -#"plt:module-language:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 2 38 -#"plt:module-language:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1 --1 0 1 #"\0" -0 75 10 #"Monospace\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 0 -1 -1 0 1 #"\0" -0 75 1 #"\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 14 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 38 #"drscheme:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -31 #"drscheme:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 37 #"profj:syntax-colors:scheme:prim-type\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 38 #"profj:syntax-colors:scheme:identifier\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 34 -#"profj:syntax-colors:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:literal\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -33 #"profj:syntax-colors:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:default\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 37 -#"profj:syntax-colors:scheme:uncovered\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:covered\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 8 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 8 24 #"drscheme:text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 15 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 14 #"Html Standard\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 0 1 -#"\0" -0 75 1 #"\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 12 #"Courier New\0" -0.0 10 90 -1 90 -1 2 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 30 #"drscheme:check-syntax:keyword\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 39 #"drscheme:check-syntax:unbound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 37 #"drscheme:check-syntax:bound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:primitive\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 31 #"drscheme:check-syntax:constant\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:tail-call\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 27 #"drscheme:check-syntax:base\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 94 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 32 #"widget.rkt::browser-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 59 -#"macro-debugger/syntax-browser/properties color-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 99 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 190 190 190 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 255 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 107 142 35 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 100 149 237 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 65 105 225 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 70 130 180 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 47 79 79 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 139 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 75 0 130 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 160 32 240 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 250 128 114 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 184 134 11 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 128 128 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 169 169 169 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -228 225 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 255 0 0 224 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 224 -255 255 -1 -1 0 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 22 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 14 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 41 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 43 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 0 259 0 26 3 12 #"#lang racket" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 81 -( - #";; Originally a test for PLoT <= 5.1.3; keeping it to test backward " - #"compatibility" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 7 #"require" -0 0 4 3 1 #" " -0 0 14 3 4 #"plot" -0 0 4 29 1 #"\n" -0 0 4 3 9 #" " -0 0 22 3 1 #"(" -0 0 14 3 7 #"only-in" -0 0 4 3 1 #" " -0 0 14 3 11 #"plot/compat" -0 0 4 3 1 #" " -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 23 #"fit-result-final-params" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"build-list" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 15 3 6 #"lambda" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"errors" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"build-list" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 15 3 6 #"lambda" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 20 3 1 #"1" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"fun" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 20 3 1 #"3" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"exp" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 20 3 4 #"1.32" -0 0 22 3 4 #"))))" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"z-vals" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 3 #"fun" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 8 #"gues-fun" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 14 3 1 #"b" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"exp" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 14 3 1 #"b" -0 0 22 3 4 #"))))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"params" -0 0 4 3 1 #" " -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 8 #"gues-fun" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 20 3 1 #"'" -0 0 22 3 2 #"((" -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 20 3 1 #"1" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"b" -0 0 4 3 1 #" " -0 0 20 3 1 #"1" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"z-vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"errors" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 1 #"\"" -0 0 19 3 41 #"The old plot library produced this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 2 41 4 1 #"\0" -2 -1.0 -1.0 0.0 0.0 0 15 500 -( - #"\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\1\220\0\0\1\220\b" - #"\2\0\0\0\17\335\241\233\0\0\0\6bKGD\0\377\0\377\0\377\240\275\247" - #"\223\0\0\34\246IDATx\234\355" - #"\335\177l\24\347\235\307\361\357`<\266" - #"\261\301?\26\31\34\260!l\322\264D-\b\213P\34\\qR\2244\"\266r" - #"\215\200p\n\327H\204\234*\2614\204^\32\376H\252$:\216\220\204\22qm" - #"\223\266\27\225\360\207\23z\247b\23\21" - #"\235j\353\b\343\322\366\260O\220\23\341" - #"R\214S\212\335\340\22ls\30\212\327" - #"1s\177\fl\226\365\332k\357\316\372" - #"\331\347\331\367\353\17\264?\36\217\277\343" - #"a>~\236\3073\317Z\256\353\n\0\350`\212\352\2\0`\274\b,\0\332 " - #"\260\0h\203\300\2\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r" - #"\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r\2\v\2006\b,\0\332" - #" \260\0h\203\300\2\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240" - #"\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r\2\v\2006\b,\0" - #"\332 \260\0h\203\300\2\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2" - #"\240\r\2\v\2006\b,\0\332\310\254\300r\34g\341\302\2051/vuu\205" - #"B\241\342\342\342P(\324\335\335\255\244" - #"0\0\231 \203\2\313q\234\265k\327\236:u*\346\365\305\213\27\213HKK" - #"\213\210,Z\264HAe\0002\203\345" - #"\272\256\352\32n\250\251\251\331\271sgmmmtI===\301`p``" - #"\300{ZTT\324\331\331Y^^\256\250F\0*eP`y,\353\226\222\266" - #"l\331RPP\260}\373v\357\351\266m\333\6\a\aw\355\332\245" - #"\250:\0*ez`\305t\251b:\\\0\262\312T\325\5\244\312" -) 500 -( - #"\262\254\16\221;E2+w\1\243]\276|\271\250\250h\362\277o\246\367\260b" - #"\306\2001#\304\e\355\213\212\344\323O" - #"%\321\217/f\313\264\314\300\226\312\v" - #"\240\245\277-}\227\351\201\225p\322\335" - #"\262,\267\242B\332\333\245\242bB[\246e\6\266T^\0-\375m\351\273\f" - #"\272\254!\256Y\263f\345\347\347\207B" - #"\241\266\266\266P(\224\237\237\37\347O" - #"\204\323\247\313\345\313>~\323\274\274<-Z\216\237y{\224\246\28L\31." - #"\343\2k\344\205\243\307\217\37\27\221U" - #"\253V\211\310\211\23'\342|\215\337\201" - #"u\355\3325-Z\216\237y{\224\246\28L\31.\343\206\204\23eY\226\273" - #"r\245\374\340\a\262re\342\226\232\357" - #"l\f\363\366HL\334)\366\310G\31\327\303JFQ\221d\345\205\16Z\364\341" - #"'\312\274\2352o\217\0242\"\260\374" - #"\36\22\352B\213>\374D\231\267S\346\355\221B\4\26\0m\20X\0\264aD" - #"`\25\25\21X@60\"\260\246O\317\316Iw \333\230\22X\364\260\200," - #"@`\1\320\6\201\5@\e\332_\203kY\326J\221\37\210\334\237\233\e\16\207" - #"G6\260m{hh(\372\225\334QZ\2\30C\364\251\304\225\356\311\373\317\266" - #"\266\225\325\325\243eP8\34v]\327\373\371z\17H+ \t\321\247\222*&" - #"\4\26CB K\20X\0\264A`\1\320\206\21\2015m\232\374\365\257\242\371" - #"_\17\0$dD`M\231\"\371\371r\365\252\352:\0\244\227\21\201%\"\205" - #"\205r\345\212\352\"\0\244\27\201\5@\e\4\26\0m\20X\0\264A`\1\320" - #"\6\201\5@\e\4\26\0m\230\260Z\203\210\374L\244-'\347\215\317?\37\331" - #"\200\325\32\0_d\302j\rS\225|W\177\271\256+O=\365\304" - #"\355\267\307}7\222M\346}\236%0\231\242O%U50$\4" -) 500 -( - #"\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r\2\v\2006L\t" - #"\254\242\">\374\0310\236)\201E\17\v\310\2\4\26\0m\20X\0\264A`" - #"\1\320\6\201\5@\e\246\4VA\201\\\273\306'}\1f3!\260,\313\262" - #"rr\256\f\17\307\375\244/\333\266-" - #"\313\362\356/\367\36\330\266=\3515\2\332\213>\225T1ey\31\21\2315K" - #"\256\\\221\302\302\230wY^\6\360\5\313\313\370\212i,\300t\4\26\0m\20" - #"X\0\264A`\1\320\6\201\5@\e\4\26\0m\30\24X\2540\3\230N\203" - #"\300r\34g\372\364\351\226e\5\2\201" - #"\326\326\326Q\333\321\303\2L\247A`" - #"\325\327\327\277\377\376\373\256\353\368p" - #"\240\256\256n\324v\4\26`:\r\2" - #"\253\277\277\177\305\212\25\"R[[\333\337\337?j;\2\v0\235\6\201UZ" - #"Z\32\b\4v\357\336\35\b\4\252\252\252FmG`\1\246\323\343^\302\336\336" - #"\336-[\266H\344\266\301\270\b,\300" - #"t\231\336\303r\34\307\275\325\310yw" - #"\357\16\362\277\333\270\261\341\347?\217," - #"\306\20\271\263<\"\3222\202e\e\200" - #"\204\342\236J\252d\372\2\6\245\245\245" - #"\a\17\36\364\346\260D\304q\234\372\372" - #"\372\276\276\276H\203/\326`hj\222\177\375Wil\34mS\254\326\0\370B" - #"\341\251\224\351=\254\t\340:,\300t\231\36X---\217>\372hKK\213" - #"\210477\257[\267\316{\34\asX\200\3512}\322}\311\222%\r\r\r" - #"uuu\227.]*..~\357\275\367\226,Y\22\277)\201\5\230.\323\3" - #"K\22^~\25A`\1\246\313\364!\341\4\20X\200\351\b,\0\3320(\260" - #"\370\244/\300t\6\5\326\224)2m\32W6\0\0063(\260D" - #"d\306\f\371\277\377S]\4\200t1+\260\246O\227\313\227U\27\1" -) 500 -( - #" ]\314\n,zX\200\321\314\n,zX\200\321\314\n,zX\200\321L\b" - #"\254/\326\212\211\327\303\212,\216qKK\0\23\24}*\251bB`y\353d" - #"\205\303\341\270\201\25\16\207\275\6\267\264" - #"\0040A\321\247\222*&\4\326\27\30\22\2F3+\260\230t\a\214F`\1" - #"\320\206Y\201\305\220\0200\232Y\201E\17\v0\232Y\201E\17\v0\232Y\201" - #"E\17\v0\232Y\201E\17\v0\232Y\201E\17\v0\232Y\201E\17\v0" - #"\232Y\201UX(W\257\312\365\353\252\353\0\220\26f\5\226\267J2\37E\1" - #"\30\312\204\300\272e\r\206\21\243BVk\0|\221\t\2535h\360A\252\t\335" - #"r\373\370\210y\367\310\332\f\226e\251" - #"\275\321\34\320Z\364\251\244\252\6\23z" - #"X\267`\336\0350\227q\201\305\225\r\200\271\214\v,zX\200\271\214\v,z" - #"X\200\271\b,\0\3320.\260\30\22\2\3462.\260\350a\1\346\"\260\0h" - #"\303\270\300bH\b\230\313\270\300\242\207" - #"\5\230\313\270\300\242\207\5\230\313\270\300" - #"\242\207\5\230\313\270\300\242\207\5\230\313" - #"\204\300\272e\321\230\21=,\226\227\1" - #"|\301\3622\376\270e\321\230\21=,\226\227\1|\301\3622iPX(\177\375" - #"+\253$\3F2.\260\246L\221\242\"\246\261\0#\31\27X\"RZ*}" - #"}\252\213\0\340?\23\3\253\244D\372\373U\27\1\300\177&\6\26=,\300P" - #"&\6\26=,\300P&\6\26=,\300Pz\4\226\3438\201@ \20\b\264" - #"\266\266&nM\17\v0\224\6\27\216:\216\263v\355\332\306\306F\327u\237y" - #"\346\231\243G\217&\370\2\2\v0\224\6\201U__\177\360\340\301\25+V\210" - #"H\342\264\22\221\322R9u*\355e\1\230t\32\f\t\373\373" - #"\373]\327\235?\177~(\24\352\356\356N\374\5\364\260\0Ci\20" -) 500 -( - #"X\"\262v\355\332\327^{MD\26-Z\224\2705\223\356\200\2414\270\37\330" - #"\262,\307q\274!aiiidx\30y7\246}\355\324\251G\226.\265\333" - #"\332\206\206\206\306\336rnnn\344~N\0q\331\266=\362TR\225\ez\4" - #"V\244\310\335\273w\277\376\372\353\237|\362I\334wo8uJ\36yD>\372" - #"h\214\355\0H\232\302SI\203!aIII\344j\206\27^xa\337\276}" - #"\t\276\200!!`(\r\376J\330\324\324\264f\315\232={\366\34>|8'" - #"''z<\30\37\223\356\200\2414\350" - #"a\325\326\326\276\373\356\273[\267n\25" - #"\221\23'N$\376\202\374|\21\221k" - #"\327\322\\\27\200\311\246\375\264N\374\341\364m\267I{\273TT$n\t`\202" - #"\230\303\362\e\243B\300D\206\6\26\363" - #"\356\200\211\f\r,zX\200\211\f\r,zX\200\211\f\r,zX\200\211\f" - #"\r,zX\200\211\f\r,zX\200\211\b,\0\33204\260\30\22\2&2" - #"!\260,\313\262,\313\266\355/^\212" - #"\352a\331\266\3555\210\337\22\300\370D" - #"\237J\252hp\363sBq\356\22\210\352aEV\274\342\326\34 \25\321\247\222" - #"\252\32L\350a\305\301\34\26`\"C\3\2139,\300D\206\6\326\214\03120" - #" \303\303\252\353\0\340'C\3k\312\24\231>\235N\26`\30C\3KD\2" - #"\1\271xQu\21\0\374D`\1\320\6\201\5@\e\4\26\0m\370\20X\216" - #"\343\324\324\324x\17\356\276\373\356\310G" - #"r)F`\1\306\361!\260\352\353\353" - #"w\356\334\331\323\323\263z\365\352\215\e" - #"7\256Y\263\213\300\2\214\343\303\335*\336-/\337\373\336\367,\313z" - #"\345\225W\34\307\251\257\257\357\233\254K\nF\275\341\346'?\221\343" - #"\307\345\3157\23\267\0040\21\nO%\337\356%|\343\2157:;" -) 500 -( - #";\375\332\232\17\350a\1\306\361aH" - #"XRR\262{\367\356\334\334\334\362\362" - #"r\307q\326\256]{\360\340\301\3247;~\361\327`\270\31X\254\326\0\370\"" - #"\23Vk\360!\260\232\232\232\32\32\32" - #"\274\220\372\376\367\277\277\177\377\376\304\237" - #"&\357+\327u]\327\215\334J~C \275\275\"\22\16\207\275\6\243\266\4" - #"0\16\321\247\222*\332O\353\214:\234>wN\226/\227\256\256\304-\1L\204" - #"\226\237\374\\VV\266`\301\2\21\t" - #"\6\203\326\255\202\301\240\177\25&\2139" - #",\3008\311O\272\317\2349\363\255\267" - #"\336\22\2213g\316\370W\217\177\246M" - #"\23\313\222\253We\3324\325\245\0\360" - #"G\362\201\365\207?\374\301\307:\322\242\254L.^$\260\0c\3700\351^]" - #"]\275\177\377\376\310\323\375\373\367WW" - #"W\247\276Y\0370*\4\314\342\303u" - #"X\277\370\305/\352\353\353\177\363\233\337\274\366\332k[\267nmjjjjj" - #"J}\263> \260\0\263\370\20X_\375\352W\217\35;\366\360\303\17\337v\333" - #"mw\335uW[[[ \20H}\263> \260\0\263\370\263Z\303\300\300\300" - #"\245K\227\212\213\213\373\373\373/_\276\354\3136}@`\1f\361!\260>\370" - #"\340\203e\313\226=\361\304\23\247O\237" - #"~\342\211'\226-[\366\301\a\37\244\276Y\37\20X\200Y|\30\22>\375\364" - #"\323{\366\354Y\263f\215\210|\367\273" - #"\337\255\250\250x\372\351\247\333\333\333S" - #"\337r\252\2\19wNu\21\0|\243\375\305\337c]t\273w\257\264\264\310" - #"\333o'n\t`\334\264\274\322=b\316\2349\231x\245\273\334\274\16\v\200)" - #"|\b\254\253W\257:\216\343\335\25y" - #"\344\310\221\212\212\212\275{\367\246\276" - #"Y\0370\207\5\230\305\267\5\374\"O'\177\1?\357" - #"Annn\3542\f\37\177,\17=d\237=;4" -) 500 -( - #"4\24\375r\234\226\0\22\261m;r*i\277\200\237B\243\376\354\2\1\271x" - #"1\222M\314a\1\251\210>\225T\325" - #"\340\317\2~\221E\334\225,\3407\252" - #"\322R>\260\0360\211\17=\254\246\246" - #"\246\207\36z\350\322\245K\"R\\\\" - #"\374\336{\357M\362\2~\243\312\311\221" - #"@@\376\362\27\251\250P]\n\0\37" - #"\370\20X\265\265\265\375\375\375\251o'" - #"-f\317\226O?%\260\0003\230\373A\252\236\212\n9\177^u\21\0\374a" - #"z`\315\236M`\1\306\310\202\300\372\364S\325E\0\360G\26\4VO\217\352" - #"\"\0\370C\233\300\352\350\350(((\230\360\227UT\320\303\2\214\241G`\r" - #"\17\17\257_\277\376\332\265k\23\376J" - #"\346\260\0\203$\37XK\227.\235\264" - #"{\6\177\370\303\37\26\27\27'\363\225" - #"\314a\1\6I\376n\225\323\247O\257" - #"Y\263\346\366\333o\177\353\255\267JJJ\374-+\332G\37}\264r\345\312c" - #"\307\216\315\237?\177d\265\tn\270\31" - #"\30\220\331\263e` qK\0\343\243" - #"\345\3622w\336y\347\357~\367\273\312" - #"\312\312e\313\226\35?~\334\307\232\242" - #"\r\17\17o\330\260\341\245\227^\2327o^2__T$\226%\231\263j3" - #"\200\24\2444\207\225\227\227\367\372\353\257" - #"?\362\310#K\227.M\323zX\336`\360\311'\237\34\243M\314j\\\266m" - #"\213\210m\333\336\323\216\201\201/\315\230" - #"\341\335\256\31\267%\2001DN\245\b" - #"\205\305\244\332\265knn~\374\361\307" - #"\233\232\232\226,Y\342WM\321\252\252" - #"\252\316\335\272\314\361\202\5\v\242?k" - #":q\357\264\266V\376\351\237\344\e\337" - #"`H\b\370B\341\251\224\322\275\204\351" - #"N+\21\371\323\237\376\24y\234\344\217\211\273s\0S$?$\234\204\264\362" - #"\aW6\0\246H>\260\236\177\376\371w\336yg2\323j\341\302\205\311|\31" -) 500 -( - #"\201\5\230\"\371!\341\321\243G}\254" - #"c\335\327\327\247\272\34\0" - #"I2!\260,\313\262,\313\266\355\270" - #"\357z\257[\226uF\344\201;\357\214\274\2`Bl\333\366\3165\2055\230\20" - #"X\256\353\272\256;\332\2121\336\353\256" - #"\353v\212\374\307O~\22y\5\300\204\204\303a\357\\SX\203\t\201\225Pi" - #"i\251eY\237\210\274\362\235\357TUU\251.\a@\222\262\"\260z{{\275" - #"\36\326?>\362\310\331\263gU\227\3 IY\21X\236N\21\351\354T]\5" - #"\200\344\21X\0\264\221E\201\325+\"\226%\27/\252.\4@\222\262" - #"(\260DD\26,\240\223\5\350+\313\2+\30$\260\0}eY`" -) 500 -( - #"\321\303\2t\226e\201u\373\355\4\26\240\257,\v,zX\200\316\b,\0\332" - #"\310\216\317%\214\264\f\207e\306\f\271tI\270\377\31H\26\237K8Yrs" - #"\245\252J::T\327\1 \31&\364\260\274\a\271\271\271q\227a\260m{h" - #"h(\362\264Qd_N\316/?\377|\222\352\3L\21}*\251\312\215\251J" - #"\276\253\277\306\376\331ER\354F?\366\231g\352Yt\24\230\270\350SIU\r" - #"Y6$\24\221\273\356\222\217?V]\4\200dde`\375\357\377\252.\2@" - #"2\262/\260\276\374ezX\200\246\262/\260f\316\224)S\344/\177Q]\a" - #"\200\t\313\276\300\22\246\261\0]ek`1\215\5h([\3\213\36\26\240!" - #"\r\2\313q\234@ `YV \20hmm\365a\213\314\273\3z\322 \260" - #"\352\353\353\e\e\e]\327=p\340@]]\235\17[\244\207\5\350I\203[s" - #"\356\276\373\356\223'Oz\217G\336u" - #"9\261\233\237\275\226\341\260\224\226Jo\257\344\345\371],`>n~\36K$" - #"\255zzz\n\v\v}\330\242m\313W\276\"\37~\350\303\246\0L\"\r\2" - #"+b\307\216\35\2337o\366g[\325" - #"\325\322\326\346\317\246\0L\26\r\206\204" - #"\36\307qV\257^\375\341\207\37\226\227" - #"\227G\277>\362>Lo\331\206\230E\32b<)r\217\310wFY\340\1@" - #"D\334S\211!\341X\232\233\233\327\255" - #"[w\350\320\241\230\264\362\270\267\3622" - #"(\34\16\307\274\36\335\362\315\266\266\r\213\27\223V@BqO%U4\350a" - #"577?\376\370\343MMMK\226,\31\371n2\223\356\"\22\16KY\231" - #"|\366\231\344\347\373X*\220\r\230t" - #"\37\325\330i\225<\333\226/\177Y\376\347\177\374\334&\2004\313" - #"\364\300\332\270qcwwwuu\265uS0\30\364g\323\314\273" -) 500 -( - #"\3\272\311\364\25G?\371\344\223tm" - #"\272\272Z\376\353\277\322\265q\0i\220" - #"\351=\2544\252\256\226\366v\325E\0" - #"\230\0\r&\335\307\226\344\244\273\210\f\16J \27.HAA\272\212\3L" - #"\304\244\273\nyy\262p\241\34;\246" - #"\272\16\0\343\225\305\201%\"\313\227\313" - #"o\177\253\272\b\0\343E`\21X\2006\b,\2\v\320Fv\a\326\274y\222" - #"\233+\235\235\252\353\0000.\331\35X\"\262l\31\235,@\27Y\37X_\377" - #":\201\5\350\302\204\300\362n\331\261m" - #";\356\273\266m{\r\342\267d\32\v\30\237\350SI\225,\276p\324s\365\252" - #"\314\232%\347\317\213/k\231\2Y\200\vG\325\2316Mjj\244\271Yu\35" - #"\0\22\313\372\300\22\221\a\37\224\367\337" - #"W]\4\200\304\262~H(\"\37\177,\367\335'\347\316\371\\\31`(\206\204" - #"J\335u\227\344\345\311\315\317\346\1\220" - #"\261\b,\21\21y\340\1F\205@\346#\260D\204i,@\17\314a\211\210\310" - #"\300\200\314\235+\347\316\311\364\351~\26" - #"\a\230\2109,\325\212\212\344\276\373\244" - #"\261Qu\35\0\306B`\335\264z\265" - #"\374\362\227\252\213\0000\26\206\2047]" - #"\275*\225\225\322\331)\305\305\276\25\a" - #"\230\210!a\6\2306M\376\346o\344\340A\325u\0\30\25\201\25\205Q!\220" - #"\331L\30\22z\17rss\303\341\360\310\6\266m\17\r\rE\2772ZK\271" - #"|Y\252\252\244\243C\2\2014T\n\350-\372TbH\230<\327u]\327\215" - #"\237A\"\341p\330k\220\260\245L\237" - #".\365\365\362\326[\351+\25\320W\364" - #"\251\244\212\t=,\177&\335=\255\255" - #"\362\370\343r\372\264(]\364\a\310dL\272g\214\25+\244\240@\16\37V]" - #"\a\2008\350a\335\242\254\254\354\357\373\372\276.\262" - #"N\244\264\264\264\267\267\327\217\32\1\243(\354a\21X" -) 500 -( - #"#\332|\366\231|\351Kr\352\2245k\226\356?\34 \35\30\22f\222@@" - #"\236|Rv\354P]\a\200X\364\260\342\265\271xQ\276\362\2259\27.tk" - #"\376\303\1\322Aa\17k\252\222\357\232\261JKK\275\v\273\376Y\344\5Vn" - #"\0002\f\201u\213/f\331{z\344k_\2233g$\30TZ\21\200/0" - #"\2075\212Y\263\344\205\27\344\261\307dxXu)\0n \260F\367\17\377 " - #"3f\310\356\335\252\353\0p\3\223\356c:{V\226.\225\303\207e\341\302d" - #"\212\3L\304e\r\231j\336" - #"\313\372\222eY\226UVV\246\272, +0\207\225\244J\313:\267i\223\274" - #"\363\216\374\352WVm\255\356?F`\374Xq4y\252\2\353\306\326\376\373\277" - #"\245\276\376\276\356\356f\25?F\333\266" - #"'vA\231\16\314\333)\363\366\210I\367\261tuu\205B\241\342\342\342P(" - #"\324\235i3GK\226HC\303\277\213\210eI~\376$\317m\305\\\20k\6" - #"\363v\312\274=RH\203\300Z\274x" - #"\261\210\264\264\264\210\310\242E\213T\227" - #"s\203\267\324\237eY\3267\276\361\265\252*q]\351\350\20\21Y\274XZ[" - #"\243[\226\225\225Y71\333\5\244\"\323\207\204===\301`" - #"p``\300{ZTT\324\331\331Y^^\36i\220\216!\341\370" -) 500 -( - #"\373\360qZ:\216\324\325\311\245K\222" - #"\227'\e7\312\263\317Zs\347\272\256" - #"\353\265\34O\r\343\377\356\223\264G\223" - #"\330RL\334\251l\336#\337ez\17k\307\216\35\2337o\216<\r\205B;" - #"\322\377\361\20\343\357\303\307iY[+\375\375_t\270\202AWD\362\363w\r" - #"\r%\34-z}\261\241\241\241\204}" - #"1\257\245\210\214\263\345\370\267\251\252\245" - #"\30\272S\23\222\322\177\274Il\251P\246\367\260b\272T1\35.IO\17\313" - #"\377\17\2668w\356_*+7\345\345\311\340\340\250\355\362\362\376eppSW" - #"\227\327#\e{\313\336\273\321\377\352\336" - #"Ry\1i\332)\321\341\277h\372Z" - #"\372\316\2045\335\255q\177\254\274\252\226" - #"Ve\245\210\204\306H+\221\271\203\203" - #"\337\27\31\234;\327\25\21\313\362\376\35\255qt\e3Z*/ M;\25i" - #"?v\e\275Z\236\21\t\207\303\266m" - #"\217\247\261\2772\275\207\265m\333\266\301" - #"\301\301]\273vyO\267l\331RPP\260}\373\366H\3]~\325\214\377W" - #"q\346w\34\350a\321\303R\226\enf;\177\376|aaa\344iaaa" - #"OOOt\203\361\357B\346\267,-" - #"-\215\34\227\252\252\252\254j\251\274\200" - #"4\355\224\253\303\177\274\364\265\364]\246" - #"\367\260Dd\346\314\231\353\326\255\373\366" - #"\267\277\275w\357\336\206\206\206\317>\373" - #",\372\335t\374Z\310\317\317\277v\355" - #"Z\346\2674o\217\304\304\235\312\346=" - #"\362]\246\377\225PD\216\37?.\"\253V\255\22\221\23'NL\302w\34\377" - #"\331\245\266\345\370\231\267Gi*\200\303" - #"\224\3414\350a\215M\217\201wz\230" - #"\267Gb\342N\261G>\322\240\207\205" - #"\321\344\345\345\251.\301\177\346\355\224y" - #"{\244\220\366\331\237\315=,@\tzX\0\220\30\201\5" - #"@\e\4\26\0m\20X\0\264A`\1\320\6\201\5@" -) 500 -( - #"\e\4\26\0m\230\20X\226eY\2265\332b\27\266m{\r\22\266\0040\206" - #"\350SI\25\355\257\245\344\302Q`\222q\341(\0$F`\1\320\6\201\5@" - #"\e\4\26\0m\20X\0\264A`\1\320\6\201\2451#/(3o\247\314\333" - #"#\205\264\2774)\233\257\3032o\217\304\304\235b\217|D\17\v\2006\b\254" - #"8\306\337\207W\333r\374\314\333\2434\25\300a\312p\332wVu\371\b\\Z" - #"\216\247\245\362\2h\351oK\337\321\303" - #"\2\240\r\23zX\252K\0\262\316\345" - #"\313\227\213\212\212&\377\373j\37X\0\262\aCB\0\332 \260\0h\203\300\2" - #"\240\r\2\v\2006\b,\0\332\310\212" - #"\300\352\352\352\n\205B\305\305\305\241P\250\273\273[u9>(++\263n\n" - #"\6\203\252\313I\211\3438\v\27.\214yQ\353C\26w\217\364=d\216\343\4" - #"\2\1\313\262\2\201@kkk\344u%\307(+\2k\361\342\305\"\322\322\322" - #"\"\"\213\26-R]\216\17\372\372\372" - #"\334\233\316\2349\243\272\234\3449\216\263" - #"v\355\332S\247N\305\274\256\357!\e" - #"m\217\364=d\365\365\365\215\215\215\256" - #"\353\368p\240\256\256.\362\272\232c" - #"\344\232\356\374\371\363\205\205\205\221\247\205" - #"\205\205===\n\353\361\2051\an" - #"\371\362\345\216\343\304\354\216\326\207,\356" - #"\36\271:\37\262\205\v\27F\36G\366B\32512\377\302\321-[\266\24\24\24" - #"l\337\276\335{\272m\333\266\301\301\301" - #"]\273v\251\255*E\321\327\367\227\226" - #"\226\366\366\366*,&u1\367\246\31p\310F\336mg\300!\353\351\351\t\6" - #"\203\3\3\3\242\360\30MB(\252\25" - #"\223\3751\277\0314\25\375K\257\244\244" - #"\304q\34\205\305\244.\346\377\241\1\207l\344\231e\300!{\352\251\247" - #"\266m\333\346=Vu\214\246\246=\21\221\6'O\236\214\30\n\205\352\352\352\\\327\335" - #"\274y\363\203\17>\30\375\356\276}\373" - #"\276\365\255outt<\373\354\263\265" - #"\265\265G\217\36\365\271t\350\2039," - #"\370\340\243\217>Z\271r\345\201\3\a" - #"\36~\370\341\303\207\17\217\274\325&\"" - #"ze\273\350\307\327\257__\260`\201eYg\316\234\2312eJ\314\273]]" - #"]/\277\374\362\317~\366\263\302\302\302" - #"\306\306F_\376\n\t\0351\207\205T" - #"\r\17\17o\330\260\341\245\227^\252\251" - #"\251y\361\305\0277l\330\340\375\3050" - #"\256\222\222\222\270\223P\317=\367\334\274" - #"y\363\252\252\252\236\177\376\371\230\267j" - #"jj\376\370\307?\356\331\263\347\332\265" - #"k\317=\367\234/\177\202\204\256\224\16" - #"Ha\202W^y\345\201\a\36\270~" - #"\375\272\353\272\327\257_\277\377\376\373_" - #"}\365\325\321\32G\326-8r\344H" - #"\344\277\337\276}\373\202\301\340\205\v\27" - #".\\\270\20\f\6\367\355\333\347F\315" - #"a\265\267\267\317\2313\247\271\271y\214" - #"\225\3\220%\b,\244\252\246\246\246\243" - #"\243#\362\364\364\351\323\367\336{\357\30" - #"\355\217\349R\\\\\\\\\\<\177" - #"\376|\357\225\245K\227\266\265\265y\217" - #"\333\332\332\226.]\352\336\272\246p\344K4ZF\n\351\300\34\26\0m0\207" - #"\5@\e\4\26\0m\20X\0\264A`\1\320\6\201\5@\e\4\26\0m\20" - #"X\0\264A`\1\320\6\201\5@\e\377\17\261\224\26" - #"\263EZ\271\b\0\0\0\0IEND\256B`\202" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 49 #"\"The new plot/compat library produces this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"mix" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"points" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"z-vals" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"line" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 15 3 6 #"lambda" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 15 #" " -0 0 22 3 1 #"(" -0 0 14 3 5 #"apply" -0 0 4 3 1 #" " -0 0 14 3 8 #"gues-fun" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 23 #"fit-result-final-params" -0 0 4 3 1 #" " -0 0 14 3 6 #"params" -0 0 22 3 5 #")))))" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:x-min" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:x-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"20" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:y-min" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"10" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 diff --git a/collects/plot/tests/fit-test-2.rkt b/collects/plot/tests/fit-test-2.rkt deleted file mode 100644 index bad31fed8e..0000000000 --- a/collects/plot/tests/fit-test-2.rkt +++ /dev/null @@ -1,2635 +0,0 @@ -#reader(lib"read.ss""wxme")WXME0108 ## -#| - This file uses the GRacket editor format. - Open this file in DrRacket version 5.2.0.1 or later to read it. - - Most likely, it was created by saving a program in DrRacket, - and it probably contains a program with non-text elements - (such as images or comment boxes). - - http://racket-lang.org/ -|# - 44 7 #"wxtext\0" -3 1 6 #"wxtab\0" -1 1 8 #"wximage\0" -2 0 8 #"wxmedia\0" -4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" -1 0 16 #"drscheme:number\0" -3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" -1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" -1 0 93 -( - #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" - #"pclass-wxme.ss\" \"framework\"))\0" -) 0 0 19 #"drscheme:sexp-snip\0" -0 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" -1 0 68 -( - #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" - #"lib\"))\0" -) 1 0 33 #"(lib \"bullet-snip.ss\" \"browser\")\0" -0 0 29 #"drscheme:bindings-snipclass%\0" -1 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" -1 0 22 #"drscheme:lambda-snip%\0" -1 0 8 #"gb:core\0" -5 0 10 #"gb:canvas\0" -5 0 17 #"gb:editor-canvas\0" -5 0 10 #"gb:slider\0" -5 0 9 #"gb:gauge\0" -5 0 11 #"gb:listbox\0" -5 0 12 #"gb:radiobox\0" -5 0 10 #"gb:choice\0" -5 0 8 #"gb:text\0" -5 0 11 #"gb:message\0" -5 0 10 #"gb:button\0" -5 0 12 #"gb:checkbox\0" -5 0 18 #"gb:vertical-panel\0" -5 0 9 #"gb:panel\0" -5 0 20 #"gb:horizontal-panel\0" -5 0 33 #"(lib \"readable.ss\" \"guibuilder\")\0" -1 0 57 -#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" -1 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" -1 0 26 #"drscheme:pict-value-snip%\0" -0 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" -2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" -1 0 18 #"drscheme:xml-snip\0" -1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" -1 0 21 #"drscheme:scheme-snip\0" -2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" -1 0 10 #"text-box%\0" -1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" -1 0 15 #"test-case-box%\0" -2 0 1 6 #"wxloc\0" - 0 0 129 0 1 #"\0" -0 75 1 #"\0" -0 12 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 -#"Standard\0" -0 75 10 #"Monospace\0" -0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 -#"framework:default-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 -#"text:ports out\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 15 #"text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 -#"text:ports value\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 27 #"Matching Parenthesis Style\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:symbol\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 38 -#"framework:syntax-color:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 39 -#"framework:syntax-color:scheme:constant\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 42 -#"framework:syntax-color:scheme:parenthesis\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:other\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -38 #"drracket:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 -#"drracket:check-syntax:set!d\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 37 -#"drracket:check-syntax:unused-require\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"drracket:check-syntax:free-variable\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 -#"drracket:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 47 -#"drracket:check-syntax:my-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 -#"drracket:check-syntax:their-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 48 -#"drracket:check-syntax:unk-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -49 #"drracket:check-syntax:both-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -26 #"plt:htdp:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 -#"plt:htdp:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 4 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 4 #"XML\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 37 -#"plt:module-language:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 2 38 -#"plt:module-language:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1 --1 0 1 #"\0" -0 75 10 #"Monospace\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 0 -1 -1 0 1 #"\0" -0 75 1 #"\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 14 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 38 #"drscheme:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -31 #"drscheme:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 37 #"profj:syntax-colors:scheme:prim-type\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 38 #"profj:syntax-colors:scheme:identifier\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 34 -#"profj:syntax-colors:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:literal\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -33 #"profj:syntax-colors:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:default\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 37 -#"profj:syntax-colors:scheme:uncovered\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:covered\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 8 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 8 24 #"drscheme:text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 15 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 14 #"Html Standard\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 0 1 -#"\0" -0 75 1 #"\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 12 #"Courier New\0" -0.0 10 90 -1 90 -1 2 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 30 #"drscheme:check-syntax:keyword\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 39 #"drscheme:check-syntax:unbound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 37 #"drscheme:check-syntax:bound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:primitive\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 31 #"drscheme:check-syntax:constant\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:tail-call\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 27 #"drscheme:check-syntax:base\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 94 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 32 #"widget.rkt::browser-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 59 -#"macro-debugger/syntax-browser/properties color-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 99 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 190 190 190 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 255 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 107 142 35 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 100 149 237 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 65 105 225 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 70 130 180 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 47 79 79 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 139 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 75 0 130 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 160 32 240 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 250 128 114 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 184 134 11 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 128 128 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 169 169 169 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -228 225 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 255 0 0 224 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 224 -255 255 -1 -1 0 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 22 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 14 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 41 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 43 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 0 753 0 26 3 12 #"#lang racket" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 81 -( - #";; Originally a test for PLoT <= 5.1.3; keeping it to test backward " - #"compatibility" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 7 #"require" -0 0 4 3 1 #" " -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 14 3 8 #"rackunit" -0 0 4 29 1 #"\n" -0 0 4 3 9 #" " -0 0 22 3 1 #"(" -0 0 14 3 7 #"only-in" -0 0 4 3 1 #" " -0 0 14 3 11 #"plot/compat" -0 0 4 3 1 #" " -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 19 #"fit-result-function" -0 0 4 3 1 #" " -0 0 14 3 23 #"fit-result-final-params" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 45 #";; This is data from the Cavendish experiment" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 20 3 1 #"'" -0 0 22 3 3 #"(#(" -0 0 20 3 3 #"0.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-14.7" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"1.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"8.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"2.1" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"28.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"3.1" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"46.7" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"4.2" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"47.4" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"5.2" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"36.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"6.2" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"37.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"10.3" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"7.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"5.1" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"8.2" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-11.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"9.1" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-22.4" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"10.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-35.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"11.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-33.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.9" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"12.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-21.1" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.9" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"12.9" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-15.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"4.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"13.8" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"-1.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"14.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"19.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"15.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"27.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.8" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"17.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"32.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"17.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"27.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"18.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"20.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.3" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"20.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"13.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"21.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"-1.3" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"4.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"22.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-24.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"6.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"23.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-25.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.3" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"24.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-25.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.1" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"25.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-20.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"26.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"-9.9" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"27.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"5.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"28.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"14.7" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"29.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"21.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"30.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"29.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"31.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"21.4" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"4.1" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"32.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"24.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"32.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"25.8" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"12.0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"33.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"0.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.9" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"34.7" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-16.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"35.7" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-24.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"36.6" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-24.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.8" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"37.7" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-19.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 83 -( - #"; first column is time data, second is result, third is error. to pa" - #"rse them out..." -) 0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 12 #"match-define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"list" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 5 #"times" -0 0 4 3 1 #" " -0 0 14 3 4 #"vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"errors" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 14 3 3 #"..." -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 42 #"\"The old plot library produced this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 2 35 4 1 #"\0" -2 -1.0 -1.0 0.0 0.0 0 12 500 -( - #"\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\1\220\0\0\1,\b" - #"\2\0\0\0b\325r\225\0\0\0\6bKGD\0\377\0\377\0\377\240\275\247" - #"\223\0\0\26\345IDATx\234\355\335KhT\327\37\300\3613\365\37\265\240" - #"\314\303\322b\202\222\214\256\354\302Zt" - #"\0232\215\320\356j\202\272\265\224\266\264" - #"\330\342\246t\323\215\373J+tU,(\324vW(b\36+u5\267\b\21" - #"2B\301Mm\342#(t\223\314 \376\211I\333\371/N{{\3773w\306" - #"\271\357\363;\367\373Y\310dr\2759" - #"\347\334;\2779\347\334\363(\264\333m\5\0\22\274\220u\2\0`P\4,\0" - #"b\20\260\0\210A\300\2 \6\1\v\200\30\4,\0b\20\260\0\210A\300\2" - #" \6\1\v\200\30\4,\0b\20\260\0\210A\300\2 \6\1\v\200\30\4," - #"\0b\20\260\0\210A\300\2 \6\1\v\200\30\4,\0b\20\260\0\210A\300" - #"\2 \6\1\v\200\30\4,\0b\20\260\0\210A\300\2 \6\1\v\200\30\4" - #",\0b\20\260\0\210A\300\2 \6\1\v\200\30\4,\0b\20\260\0\210A" - #"\300\2 \6\1\v\200\30\4,\0b\374'\353\4<\307\326\255[777\263" - #"N\5\200~\236\16+F\315fsb" - #"bB)U\253\325\232\315\246\373~\251T\322\25.\307qJ\245\322s\317\243#" - #"TN\272'\0\243\344(`\365\nL\263\263\263\307\216\35SJMMM\315\317" - #"\317g\226>\0\317#\246\232\20\275F" - #"\3438\316\324\324T\253\325*\26\213\363" - #"\363\363\272\266\25\372\374\324\260\0-\315" - #"\317\202\230O\235i\303\32\bX\200\306" - #"\260\6\0\360az\300\332\272uk\241P\320s\375\n\377\310:Q\0\376\357\263" - #"\231\0321\355\32\232\204\200\231h\22\2" - #"\200\17\2\326\3375[\245T\241P\330\272uk\326\311\1\320\223\230vM\364j" - #"g\274#\324i\22\2\32#\335\23\301\34\32@:\232\204\0\304 `\1\20#" - #"\343\200\325h4\266o\337\256_\353\345" - #"_\364\310\16\23\226\246\2`\232,{" - #"\216\37?~|\344\310\221\307\217\37\353" - #"4\350\345_\364\24?\307q\274+\300(\363:\271MK\17\220\225\\\314%\334" - #"\330\3308z\364\350\344\344\344\271s\347" - #"t\32:\262\335\377\307\314\231\226\36 " - #"+\271\bXg\316\234\271\177\377\376\334" - #"\334\334\226-[\bX\200\\\366\17k" - #"\270t\351\322\265k\327n\335\272\365\302" - #"\v\375:\321:\246)u\374H\274\0" - #"2\221\341\366\306\331T\23\366\356\335\273" - #"\262\262\342\376X\255V\227\226\226L\253" - #"a\365\37hJ\r\v\320\354\237K\370\360\341\303\366?\224RKKK\312\263\"" - #"\250\32x\265\342Dmll\350\344\265\333m\6\235\2&\310~\244\373\201\3\a" - #"\364\v\275Tq\253\325RJ\351EA3M\27\0\343\210i\327d\325\4" - #"3|\343U s\3667\t\1 \4\2V`F\355\24\r[\271\353y\262" -) 500 -( - #"\352\221\27\1\253'\21;E\303V<\363\361%\246#&\375>\243\270v\212\6" - #"B\23q\203\321\207e\204\270v\212\6\20\27\2VO\203\354\24=77\227Y" - #"\372RG\257\n2'\240\302\251\245_7\216w\247hk\3446\343\231\20Q\332" - #"\271\230\374\34\24\343\260\f\221\333\214g" - #"BDi\323\207\365/6R\5\314\304F\252\375P\3032Dn3\236\t\21\245" - #"M\r\v\0|\20\260\0\210A\300\302" - #"\240\230\223\204\314\21\260zb\v\373\16" - #"\314IB\346\4t\351i\246\365>\232\226\236\0240')}\"\312\231Nw\230" - #"\2109I\203cV@B\4\304om\360(\336\177-\366\364\323c\215\376C\377" - #"\321-\372M\"\3426c\244\273\217\240" - #"\205\222t!\212\270\223\222\220\333\214\207" - #"@\300\212\35MB\0b\20\260\200\3701\4$!\4,\374\237\240\275\305\364." - #"\373b\bHBLo!\373\3561;H\232\351\303\212\242O\356|\177ewi" - #"\204\20\327\20\20\223\v\326\373\331\244\17" - #"\353ozekwqk\367u\37\324\306\221\271<\f\1\361~6Scz\300" - #"\n\201\332xB\30\372?\270\334.K\2334s+\234\35\6\257\e\2473 \333" - #"\344\272zt\246\r\"\21\212a\r\261" - #"\263\260\206\225\207\332xr\2026\250i\200#Um!\6Oj\275^/\26\213" - #"J\251b\261\3508N\346\351\221\245T" - #"*9\216\243\224\252\327\353\245R)\366\343s%\372M\"\3426K3\221\2*" - #"\234\232i\215\24\21u\365\20\2026\250" - #"\231\21\335\aM\302\330Y\330$D\24A\e\3244\300}\5z@\301X\266\301" - #"\t\210\337\23295\254t&Wg%\350\fgfD\307E\356\0007&?\373" - #"0'`\345\1\245\235\276\2162t\34\347\370\361\343\253\253\253\225J" - #"eff\306\344o\2\232\204@\3361\234\320\227\230/F\323\326\303" -) 500 -( - #"\262\e5\254\204\364\2719;\312P\320\323\fjX\221\2703\6\332\3556\321\n" - #"\211\n\332_\256oN\245\224\367\346\364\35\313\306\323\f_\246\a,v~NY" - #"\320\37179\237\257\343\e\200\202\362m" - #"\375\231?\271\207\235\237\3731\274V\214" - #"<\213\330\202\356\323\372\23q\333\323$" - #"\4r\204\326\337\340\bXH\4\203!\ag~\353\317\34\2*\234\232\210\2721" - #":\344\344\252\305\362P\225\201\243\203\240" - #"\206\225_T\202 \16\1+\277by\302\225s\254\256\2232\2\26\20^\320\361" - #"\350\4\270\2102\vX\225JE7F*\225\212~G_K\375&\227\23\"4" - #"\233M=\313\257V\2535\233\315\347\36\357\e\340r>\226-\220l\2V\245R" - #"\331\271s\247\36\214\256\177T\377\\K" - #"\375&\363\247 B\320\21\t\276\1\216" - #"\271\31\203\313&`\355\336\275\373\301\203" - #"\a\372\265\16R\312s-\325\300\337W0VN\332>AG$0\344*\252\300" - #"k\224\306M\257\261\333\356Zh\265\377" - #"\217\210KB\5\233\253\245\223\a/\303" - #"\240\353w\213\270\355\323Ld\306\243<" - #"._\276\374\331g\237\255\256\256*\277" - #"\371\n\375\377o\266)\267@\242+.\tZl \272\344\26\2670\263\350\272\267" - #"7N-\221\231u\2727\233\315\223'O^\270p\241\321h\364:\246\177\24O" - #"1\261vJt\305%\332>\26\363v\272\245\374I\314&`-,,\34:t" - #"h\317\236=\365z}ttT\277\351\336\342\212\273<\25A\237p\5\302t\23" - #"$\"\241\246f\177ccc\3364T\253\325\266\247y\257\374Z\370Y%\325b" - #")t3\345\344\252\5\315\346\340\307\213" - #"(\3004\23ib\v\331\227\231\215y\321R\330?\"'W-o}X\35\330" - #"\204\302\207\210+'Q\242\5k\375U\v\267\36" - #"7\1+\264\377\244\363g\0\351|c\23\343\371\344\223" - #"X\222\202<\240'\bQ\204\257a\315" - #"\316\316\276\375\366\333/\276\370\342/\277" - #"\374\222\334 @\357x_\267\22\307se\271\350\t\262F\367\376\317)\b_\303" - #"\252\325j###?\375\364\323\313/" - #"\277\374\371\347\237'\264Y\246\273\307\254" - #"\362\354}\246\177\305r\37@\206\274\237" - #"\315\324\210\31\5\327=8\255\\.\317" - #"\315\315\325j\265z\275>==\275\266" - #"\266\226U\332`\23A\223\370\fa\364\276\204ccc\255Vkuuu\337\276" - #"}\313\313\313\356\373\325juii)" - #"\356\344\375\253\273P\344N\243\205\371\270" - #"\243\6g\364H\367\37~\370\341\245\227^RJ---y\267\220N4Z\371" - #"2j\32-\303\356\201\24\210\371\32\351" - #"\216\342)/\3671\b\276\226\255\301" - #"\245\34\234\3215,\327\370\370\370\371\363\34777777" - #"7\317\237?\257\a\221\246I/\367\241\224j6\233&D" -) 500 -( - #"+\0I\v\37\260\346\347\347WVVFGGGGGWVVX*\4@" - #"\322\302\a\254V\253\265\274\274\\.\227" - #"\313\345\362\362\362r\253\325\2121Y@" - #"V\30.c\262\360\1\353\324\251S\223" - #"\223\223\267o\337\276}\373\366\344\344\344" - #"\251S\247bL\26\220\25\271\253\316\347" - #"\201\230\236\305^\35{\206t\216\312\335" - #"\f\6\35\30.\23\224\214Nwx\361\265l\r\243\206\313\240C\370\320\3301p" - #"txx\370\321\243G1\245\312\207\341" - #"5,\276\226\255a\340p\31\303\311\250" - #"a\255\255\255\225\313e=j\264^\257\377\367\277\377\2151Y\256>;?\e5" - #"\357\237\257ek0\\f@\302v~\326S\371\334+\232t\2245\274\332\302\327" - #"\262e\f\277\337\214b\364\\B\227\343" - #"8\356\224c\357\353\204\210\270\201D$" - #"\22\203\340R\16N\306F\252\265Z\315" - #"\255\20\352jE|\251\2\340\203\225$" - #"\304|\215\210\370\306\23\221H\f\302\344KiZ\332dt\272\0031b\271\v\f" - #"\202\200\5#\230\263\313\244QO\237\321" - #"\201\200e\226\234|BL\316\246\273\362o\364\320ir6\2052(`\351I\247" - #"\272Q n\336i\\_\313\351\257\352\237\t\262\211p\f\nXzv\213\376f" - #"\2138\301%h\310\bt\274\357\301}" - #"\276\226\223\373\232\35\344\314\336\276\241@" - #"c\374\22-\303D\317\34\375j\306x|\274g\366\256$144\24\357\311\243" - #"\34\237\2320\335\373\343\343\343_~\371" - #"e\354c#;\2365\364\3771\320\251\342=\336\234\223\17~p\2109C\231d" - #"\323\367}s\n<\321\223\17r\260w\343\2257\336xCb6#\n\363\227\32" - #"\215\306\364\364\364\367\337\177\377\346\233o" - #"\306\231\24\2\26\1\213\2005\3001R\256f\"\332\241,..\216\214\214" - #"\334\270q#\334\177\367\325\221\230\224" - #"\362\17 \262g\317\236\305\30\n\372\b" -) 500 -( - #"\37\32\277\371\346\233O?\375\364\217?" - #"\376\320?F\337\346\213\32Vr\aK" - #"\371N\246\206\325\377\30\357\224\325V\253" - #"%1\233\21\205\354t\277q\343\306\27" - #"_|\261\260\260\340F\276\350\333|\271" - #"\v\36(\326<\210\217\267\2336\353\264" - #"\364\303\302\304\203\360\256$\221uZ2" - #"\22\242Vv\375\372\365\221\221\221\305\305" - #"\305\20\377\267\217z\275^,\26u\252" - #"\212\305\242\3438\336\337\6J\352\266m" - #"\333\2\375\351@\307'z\362\330\263Y*\225\34\307QJ\325\353us\312\260;" - #"%\336t\226J\245\324R\"\353jzO+4\233\21\31\364\224\260?\323\346O" - #"%$\366l\206\356\246MTwJ\314LgD\te\304\264\3621}\265\206\233" - #"7o\306\236\16h\333\266m\213\367\204f\256,\330\235M3\323\31Q\354W\23" - #"f\205\352>L\373V\221B\312\312\202R\322\231-3\227\2271}\34V&\b" - #"XQH)=)\351\204\227\200\247\204\0\220>\2\26\0001\bX\0\304 `" - #"Y\216\345\350`\223\360\233P@\4C\36$\1\2610\275\206\325g#U\0\31" - #"\22\266\221j\312x\340m73G\30a\20\214\303\362A\300\2\314\3048,\0" - #"\360A\300BN\261\23\242Db\332Y4\t\221\4\356\253\350h\22\2\200\17\2" - #"V\262hw\0001b\340h\262\364\343y\332\35@,\250a\1\20\203\200\205\234" - #"b\333\v\211\bX\310\251\351\351\351\231" - #"\231\31\245\324\325\253W\247\246\246\262N" - #"\16\6\"\246oEt7\220\350\304\333\312\312m/2\301\260\206\1771\371\31\t" - #"\261r\333\2134e2\371\331\364\200\265" - #"\261\261\241\367#S\236\275\317\262NT\0t\224\30kvv\366\330\261cJ\251" - #"\251\251\251\271\271\271\254\223#\217\367" - #"\263\231\03215a\35\310\305\315\343/\227\313ss" - #"s\265Z\255^\257OOO\257\255\255%\367\267X\360" -) 500 -( - #" \4\32\203\321\261Z\203\17\2417V\372\35%B\v*+\24Wt\364a\331" - #"\203\216\22 F\214tO\226\267\243d" - #"~~>\353\344\0\262\211\251\17\213\256" - #"\272\247\332\310\227\\P\351\243\270\242\243I\b\0>\bX\310)k6@\313\325" - #"\212 b\352\303\242\253\3564\t\221\264" - #"\f\257;MB\177\214\275\354\217A\252" - #"\260\236\244\200%q\222j\232\355\16f" - #"\363\302z\2467\37\274\243\267]\206\247" - #"9+\314\346\315\263\364\257\270\367\263I" - #"\223\360o\336\371J\365z\275T*\3619\354\205A\252HS&s\tM\17X" - #"^LR\355\217\331\274\371\224\253\276K" - #"1\r\a\3328\3\242\240\362&\315\t" - #"\366\276\230\374\354\203\317\341\200(\250\16" - #"\326/b\21K\337e\224RJ\363\226c.!,g\375\306E\261\364]J)" - #"%I}Xp\345jp3\372\313U\337\245\351\1\325e~\354O\237o\231P" - #"P\276\254/\226X2\30\356$\214t\a\224\242\"\211.\231\5\254J\245\242o" - #"\304J\245\242\337\321Og\365\233\276\17" - #"h\271k\363F\217\364QJ\265\333m\373:\313\21B6\1\253R\251\354\334\271" - #"\323\35u\246c\226\236Y\242\337\364\235" - #"\\b\315]K\305\1\b'\233\200\265{\367\356\a\17\36\350\327:H)\245\232" - #"\315\346\304\304\204~\263V\2535\233\315" - #"L\322\226\202\204*\16\326\254\227\202\364" - #"I\31}\232M\300\272s\347\216\373zzz\332\372G\e\351p\247JXS\25" - #"\215\205\224\217b\266\304\314\234o'\246" - #"Z\255v\377\271j\265\352=\346\273\357" - #"\276+\227\313n\333\320\373\253\fS\236" - #"\216\350Y\260\240\20\6\0211\233\245R" - #"\311q\34\345\231\213j\231\241\241!\367" - #"C144\24\356$\352\237\t\314\355\1\n\334\373\27S\3760&X\303" - #"ZZZ\352\376{KKK\372\267\315f\363\344\311\223\27.\\h4\32\275" -) 500 -( - #"\316\340\375\217\335\205\222\\\312\315G\255" - #"apnW\203\255\375\f\275j\326\201" - #"\272J\3\215>\365\376\305\224?\211\331" - #"4\t\27\26\26\16\35:\264g\317\236z\275>::\252\337t\213L\261\336\300" - #"\363\210\251\300\e \267\213X\370v\225\366\212bbF\237\306UU\vdll" - #"\314\233\6\335N\254\327\353\305bQ\277" - #"S,\26\35\307\351\210\342\231$59" - #"Qr\244\202T\340\245\213\230A\367\276" - #"\352\276\251\362\300\267\364z\25i\270\242" - #"N\363\16\0243\374\327\246\221\312\216\343" - #"\34?~|uu\265R\251\314\314\314\270\317F\a\227\371\4\3754u_\372\20" - #"3um\272\177\2\t4\35\202\221\356\360\21\275A'\246\2\237\214^\343B\30" - #"\340f=1_;6}C\306\265\226\261Me\322G\320\352\0S,\275\250a" - #"!\252\334v\3\3\21\21\2602\220\363" - #"\6\35\322a\345\330\0271\365d\373\252" - #"\364\321sd_\231\370\242I\30N\237" - #"'3\261<\307\350s\266\344P\303\202" - #"\271b\251#\344v\212\245\357\210\331^E*e^\27\1\v\346\352\3658\265\327" - #"\247\316\367})\37\305\330\371v\225\212" - #"\37r\34\377\320\256d\bJ\352\200\242" - #"\347\310\2762\351\240z\214\217\3555=" - #"\320\372i\203\201\370\216\230\355U\244Q" - #"\244y\37\232\336\260\267x\347\347(-" - #"\177\353w\202\321z\365\302\364\32\27\302" - #"\336\327\335:\312!\306!\307\231\354\374" - #"l\372\2569\356G\221\373\317\313\326\b" - #"\325\301\3738u~~\336}\277\327\270" - #"\20\306\213\254\377" - #"\304\366\357\\\267>\373\220\213N\367<\242s\35x.:\335MA\347:\360\\" - #"b\32\329i\23\261\375:\304\241I\b\0>\bX\246cM(\300E\3002" - #"\235\357v\230\322\345$\362\346$\233i" - #"\3128`5\32\215\355\333\267\353\327z" - #"\344\244\36\212\306\312\4v\353\336X\304" - #"J9\311f\232\262\fX\217\37?\236" - #"\232\232z\366\354\231\376Q/K\240\253" - #"\22\21W&\b\372\315\26\350\370DO" - #"\236\350\231\311f\312'O\364\314B\263\31Qf\317\236666\216\36=:9" - #"9y\356\3349\235\206\216g\r\375\177\354/\350c\v\23N\36b\211d\211\331" - #"\24\235\222DOnNJ\222>y\24\231\5\2543g\316\334\277\177\177nnn" - #"\313\226-\4,\351)I\364\344\346\244" - #"$\321\223\233\223\222\244O\36I;1" - #"\325j\265\373\317U\253\325v\273}\361" - #"\342\305\375\373\367\257\256\256\352|\352\343" - #";\22\223R\376\1D\366\344\311\223\344\"\211W65\254\275{\367\256\254" - #"\254\270?V\253\325\245\245\245(U*\0y\220M\247\373\303\207\17\2755" -) 500 -( - #"\251\245\245%\345\231L\247\230O\a\300" - #"O\366s\t\17\348\240_\350\311t\255VK)U,\26\231O\a\240\3\315" - #".\0b0\322\35\200\30\4,\0b\230\36\260\3620_\307q\34\267#OY" - #"\232\345J\245\242sT\251T\364;Vfs\337\276}\356\316\3zX\217\225\331" - #"\324\262\231W\227\316\350\211\320J\245\222" - #"\3438\372u\275^/\225J\331\246'v\325j\265X,z/\204}Y.\227" - #"\313{\367\356u_\227\313\345\266\215\331t]\277~}dddqq\261mo" - #"6\37=z4<<\354\336\267\251e" - #"\323\364N\367\234\f\316\362\346\313\276," - #"\277\372\352\253w\356\334\321\257\35\307\321" - #"[l\330\227M\355\306\215\e\357\275\367" - #"\336\354\354\354\353\257\277\256l\274\232*" - #"\370\274\272\30\231^|V^\357nv\a,/\2759\320\304\304\204\255\331\34\e" - #"\e\273\177\377\276R\252\\.\257\256\256" - #"Z\231\315\240\363\352b\224\3758,\344" - #"\307\345\313\227\v\205\202\335\273+\336\273" - #"wO\277\260u\3\315K\227.]\273v\355\326\255[/\274\220A\17\270\351\361" - #"\336\312/\250n\326\327\260\232\315\346\a" - #"\37|\360\350\321\243\37\177\374qttTY\232M/\337\35\333,\310f\266\363" - #"\352L\177J\230\303\371:\366eyaa\341\320\241C{\366\354\251\327\353:Z" - #")\e\2639>>\336\235#\373\262\231\361\274\272$z\362cT\257\327\365C4" - #"\245T\261Xt\237DX\346\300\201\3" - #"\356k\373\262<66\346\275\345\364\212" - #"\35\366e\3237G\366e\323\313\275oS\313\246\370\n*\200\3740\275I\b\0" - #".\2\26\314\3221\356\37\360\"`!" - #"\6\265Z\355\267\337~\323\257\357\336\275" - #"[\253\325B\237\352\335w\337}\372\364iL\351\202m\bX\210\301\351" - #"\323\247O\2348\261\276\276\276\276\276" - #"~\362\344\311\217?\3768\364\251\356\335" -) 436 -( - #"\273\367\340\301\203\30\323\6\233\20\260\20" - #"\203w\336y\347\340\301\203g\317\236=" - #"{\366\354\301\203\aO\235:\325\353\310" - #"J\245\242'\307\356\333\267O)u\344" - #"\310\221\333\267o+\245\32\215\306\221#G\3641\372Wz>\255e\23\206\21U" - #"BO\37\2217\315f\363\225W^\31" - #"\36\36\356\263\37\201\236\371\354>\2o" - #"\267\333W\256\\\31\36\36n4\32\303" - #"\303\303W\256\\\321\207\351_\351\371\264" - #"\372`=\22\2`j\16\342\261\276\276" - #"\376\327_\177\25\n\205\365\365\365\35;" - #"v\370\36\263\266\266\326n\267\225R\315fS\317\\9q\342\304\315\2337''" - #"'?\376\370\343\23'Nx\17.\24\no\275\365\326G\37}t\347\316\235\221" - #"\221\221\24\262\0\363\321$D\f\332\355" - #"\366\373\357\277\177\346\314\231\323\247O\177" - #"\370\341\207\201\376\357\323\247O\267o\337" - #"\336\335\321\276\272\272\252;\362_{\355" - #"5Z\205\370[\326U<\330\340\302\205" - #"\v\223\223\223\177\376\371\347\346\346\346\370" - #"\370\370\267\337~\353{\230\273jR\275" - #"^\327\367\236\336\241ryyy\377\376" - #"\375\27/^\324\207\351_\271\315\300\257\277\376ztt4\215l\300x\4,\304" - #"`bb\342\356\335\273\372\365\257\277\376:11\341{\230\333{U,\26u\f" - #":|\370p\243\321h\267\333\213\213\213" - #"\207\17\37\326\207\351\t\37\345rY\177" - #"\247\3327\243\5\24115\a\200\30\364a\1\20\203\200\5@\f\2\26\0001\b" - #"X\0\304 `\1\20\203\200\5@\f\2\26\0001\bX\0\304 `\1" - #"\20\343\177\17\233H{#M\307\34\0\0\0\0IEND\256B`\202" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 42 #"\"The new plot library produces this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"mix" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"points" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 5 #"times" -0 0 4 3 1 #" " -0 0 14 3 4 #"vals" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 5 #"#:sym" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 6 #"square" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 11 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"error-bars" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:x-min" -0 0 4 3 1 #" " -0 0 20 3 1 #"0" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:x-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"40" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:y-min" -0 0 4 3 1 #" " -0 0 20 3 3 #"-40" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"50" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:width" -0 0 4 3 1 #" " -0 0 20 3 3 #"400" -0 0 4 3 1 #" " -0 0 22 3 8 #"#:height" -0 0 4 3 1 #" " -0 0 20 3 3 #"300" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 5 #"theta" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 14 3 1 #"T" -0 0 4 3 1 #" " -0 0 14 3 6 #"theta0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"+" -0 0 4 3 1 #" " -0 0 14 3 6 #"theta0" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"exp" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"/" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 22 3 2 #"))" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"sin" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"+" -0 0 4 3 1 #" " -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"/" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 20 3 1 #"2" -0 0 4 3 1 #" " -0 0 14 3 2 #"pi" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 14 3 1 #"T" -0 0 22 3 6 #"))))))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"result" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 5 #"theta" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 22 3 2 #"((" -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 20 3 2 #"40" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 20 3 4 #"-0.5" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"T" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"theta0" -0 0 4 3 1 #" " -0 0 20 3 2 #"10" -0 0 22 3 2 #"))" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 1 #"\"" -0 0 19 3 3 #"The" -0 0 19 3 33 #" old library produced this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 2 83 4 1 #"\0" -2 -1.0 -1.0 0.0 0.0 0 36 500 -( - #"\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\1\220\0\0\1\220\b" - #"\2\0\0\0\17\335\241\233\0\0\0\6bKGD\0\377\0\377\0\377\240\275\247" - #"\223\0\0 \0IDATx\234\355\235}|T\325\271\357\177C2\23B\240" - #"I&@\336\337\3!\t\220\0\"\20A\221[E\212\340K\5\365Vz8E" - #"\355\271\325(j{\324\236\323\336\323\323\36/U\213zr\353\353iO\325z|" - #"\273\307\2*V\t\0252\200E\22\233\204$\2207B\336H&@\2\362\232I" - #"\302\276\177\354\270\31&\223\311\314\354\265" - #"\367^k\347\371\376\301'\231\354\275\326" - #"\263\231\314/\317z\326\263\236\307\"I" - #"\22\b\202 D`\234\321\6\20\4A\370\v\t\26A\20\302@\202E\20\2040" - #"\220`\21\4!\f$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`" - #"\21\4!\f$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4" - #"!\f$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f" - #"$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X" - #"\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X\4A" - #"\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X\4A\b\3" - #"\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X\4A\b\3\t\26" - #"A\20\302@\202E\20\2040\220`\21\4!\f$X\4A\b\3\t\26A\20" - #"\302@\202E\20\2040\204\32m\200Z" - #",\26\213\321&\20\304\230\343\314\2313" - #"\23'N\324\177^\213$I\372\317\312\20\213\305\313#x}\321\317{\331^6" - #"\374EYaG\35\220\237G\340g\336\261s\31\347\346\371\377\24" - #"\314\241%!A\20\302`N\301\n\v\vcx\231!\223\362\374" -) 500 -( - #"\b\376_\311\363S\360\374\b\314\3475\352)\230c\316%!?S\250Y\2612" - #"\304@\37\236!&x\n\23<\2hIH\20\4\341\17$Xc\2\376]}" - #"\1770\301S\230\340\21\214\205\4KW\354v\273\274Kh\261X\354v\273n\363" - #"^\274xQ\267\271\264\303\4Oa\202G0\26\341W\324b\305\260\344o\335\377" - #"ed#A\350\a\305\260\b\202 F\207\4K+\324\254\376l6\233\345\el" - #"6\2336\6\22\204x\b\1774\207[z{{\335W\177\362\213\321\321\321\212\212" - #"\245\244\244\214t\257\313\345\202Y\266\300" - #"\t\202!\302\177$\270\215a\371\bW\361\177\0\202 |@1,\202 \210\321" - #"!\301\322\n?W\177\4A\370\217\360\213\16n\227\204>\356\245%!!4\264" - #"$$\b\202\30\35\22,\202 \204\301" - #"\f\202\245Q\276\222\222\f\245\335\24\4!\20\356\237\b\243\20>JB1,\202" - #"\320\31\212a\21\4A\214\16\t\226~" - #"\264\243\275\bEY\310B\246\321\246\20" - #"\204\230\320\321\34\235p\3029\asz^\354\271t\342\22~\aK\210\305\32b" - #"\225\217\340\20\4\341'\302GID\211" - #"a=\202G\302\21\376\24\236\222 \335" - #"\204\233n\304\215\217\3411\355\346%\b" - #"\3550\3607S\370\217\4\267\202e\263" - #"\331\372\373\373\345\257\255I\326\250\266\250" - #"jTO\305T\0\215h\\\200\5\365\250\217A\f\363y\tBk(\350nB" - #"\\.\227\364\r\17\264=p/\356\225" - #"\325\n@\26\262n\306\315\277\307\357\215" - #"\265\220 \204C\370\277\341\334zX\ngq6\25\251\207pH\21,\0\273\261" - #"\373\177\341\177\325\240\306\202\21\263Z\310" - #"\303\"\370\204<,3S\202\222\371\230\357\256V\0\256\303u!\b\331\205]\6" - #"\31E\20BB\202\2459\237\340\223\25X1\374" - #"\365{q\357\253xU\177{\bB\\\204_t\360" -) 500 -( - #"\277$LC\332'\370$\a9\36\257\237\304\311t\244w\241k\2&h1/" - #"Ah\4-\t/\323\330\330\30\36\36\356\376J{{{QQQdddQ" - #"QQGG\207Q\206\5G5\252C\21:\\\255\0\304 \246\0\5{\260G" - #"\177\253\bBP\370\22\254\301\301\301u\353\326y\364n+((\0\260s\347N" - #"\0\371\371\371\306X\26,\237\340\223\233p\323H?]\212\245\273\261[O{\b" - #"Bh\370\22\254\347\236{.22\322" - #"\375\25\247\323y\361\342\305\342\342\342\253" - #"\256\272\252\270\270\370\342\305\213\335\335\335" - #"F\231\27\4#\5\260d\256\303u\24w'\b\377\341(JR[[\273t\351" - #"\322\3\a\16\244\245\245)V=\362\310" - #"#\341\341\341O=\365\224\374\355\223O" - #">\331\327\327\267y\363f\345.\236c" - #"X}\350\233\202)\235\350\214@\204\327\v\316\341\\\34\342\234pz\rcQ\f" - #"\213\340\23\312t\307\340\340\340\342\305\213" - #"\327\257_\377\303\37\376\320\375\277c\342" - #"\304\211G\216\34\231:u('\300\351tfff\236={V\271\221g\301\372" - #"\22_>\200\a\16\340\200\217k\256\305" - #"\265\377\214\177\276\02172\234\227 4" - #"\205\202\356C\213\301\373\357\277?\210{" - #"-W\242\262\314\236{\23S\217\2~\201NQ\206\262y\230\347\373\32\nc\21" - #"\234\343\365\23a\24\274\374\rOIIikks\177%##\243\251\251\311c" - #"\r\350\261B\4\337\36\326\6lX\210" - #"\205\367\341>\37\327\354\304\316\e\276\270" - #"A*\34\32\337j\275\\\302\201<,\202OhIx\5\356\377\35\36k@\217" - #"\25\"\370\26\254\271\230\373*^\275\n" - #"W\371\270\346\34\316\305\"\266\a=a" - #"\2260\217YH\260\b>\241%\341\210\304\306\306\216\37?\276\250\250\250" - #"\254\254\254\250\250h\374\370\361\356j" - #"\3053\27p\241\36\365\2631\333\367e" -) 500 -( - #"\21\210\310Df-j\365\261\212 \204" - #"\206G\301\312\315\315u\377\266\242\242\2" - #"\300\312\225+\1TVV\32cS\340\34\304\301\34\344\3300z\264+\37\371\225" - #"\20\346\271\b\302@\204_tp\273$|\21/V\241\352e\274<\352\225\317\342" - #"\331Ntn\266l\246%!!\4\264$4!\345(\37u\213Pf6f\223" - #"\207E\20\376@\202\245\25\376\v\26-\t\t\302OH\2604\301\5W#\32\363" - #"\220\347\317\305\261\210\35\207q\210\323\332" - #"(BH\334\323\240\250\225/\t\226&\324\241.\ria\b\363\363\372|\344\243" - #"\340\362\267v\273]IX\265\333\355ZXH\210\202\\k\e\200$I\324f\211" - #"\4K\23jP\343\247{%\223\217|" - #"\367\374\207\336\336^\345w\264\267\267\227" - #"\271y\4!(\324\227P\23jQ\233" - #"\213\334\321\257\3\0\330\355\366\336\233{" - #"\261\34\26\213%::\272\247\247GS" - #"\333\bB\\\310\303\322\204\200<\254\336" - #"\336\336\3127*\221O\376\24A\214\2\t\226&\34\302!\257UFG\"\e\331" - #"\310\204\vC\21\212\350\350h%\206\225" - #"\222\222\242\211\211\4! \264$dO\37\372Z\3202\35\323\375\277%\fah" - #"C\343\364F\371[yUh\262\304\321+:\313\272\235\361&\b\377!\17\213=" - #"\365\250OG\272\25V?\257\37\362\247" - #"\16#\357\366<\23\373S\264\333E\250" - #"\207\4\213=\207p\310\377\210;\200\236\236\36I\222P\217M\37ljii\321" - #"\3160.X\2024\244\25\241\250\3\202\365\23!x\200\4\213=5\250\tH\260" - #"\206\250C\35\35240\207#\34p\340]\374\6\277\1P\200\20238c\264E" - #"\204`\230A\2604J\2V2\214\3\235\242\26\265\1%a\rav\301r\302" - #"\271\6k\260\26\337\305w\213Q\274\30\213?\302" - #"GF\eE\4\200\373'\302(\314 X\222$i" -) 500 -( - #"\21\26\221c.J\330\305\377)\252Q=\0233\3\236\357\20\16\341P\300w\211" - #"\303&l\372\1~\240\264a\274\vw\275\203w\f\265\210\b\f\367O\204Q\b" - #"\277\17\305[y\231K\2704\1\23\316\340\214\377Awe\26\273d?\214\303S" - #"0%\210y9\307\t\347,\314\252Fu\254%V~\25038\223\212\324\26\264" - #"L\302$\243\255\23\0\256~\31\250\274" - #"\214y8\215\323\0230!P\265\222\231" - #"\201\31\207q\230\271I<\260\t\233\356\305\275Sq\271Z\354$LZ\206e[" - #"\261\325@\253\b\341 \301b\314i\234" - #"\216D\344\350\327yc:\246\327\243\236" - #"\255=\as\366b\257>&\21" - #"BC\202\305\30\225KB\223\t\326_\361\327Q\5\v\300R,\335\215\335:\330" - #"C\210\16\t\26cH\260\24\232\320d" - #"\2055\5\243\327P\275\16\327\355\302." - #"\355-\"\204\207\4\2131*\5\313\16" - #";\200\36\230\241\323\327~\354\277\32W" - #"\373s\345B,\254BU\37\372\2646\211\20\35\n\2723F\245`\1\310Df" - #"\23\232d\345\22\224\241-\210\337\2\315" - #"\260\275`\ei\27\337\275-\205\245\334" - #"R5\267j>\346\353h\246\256\330\355v\271\207\eu\237T\203\31<,\216*" - #"\216Zq\1\27T\26x2A*\326\320\26\304\325(}\246\324G\316\221{j" - #"\322\206\271\e\276\302W:\332\2507&\350\346\315C\305Q3xX\32\325\22S" - #">i\1\224+KD\34\342\306\251\3733`\2160V\37\372\220\213\253p\225\237" - #"\327\317\303\274r\224kj\22\241\22\367" - #"O\204Q6\230\301\303\342\201\241\223\275\251hu\264*'{\203C^\22\2622" - #"\314(jQ\213\6\204#\334\317\353\347" - #"c\376\1\34\320\324$\302\4\220`\261" - #"a\310\341O\301\367\226|O\245\303o" - #"\16\17\253\22\225\250\274\342\25\245(\205" - #"\327\305\365,\314j@\303E\\\324\315B\235\241n\336L \301bJ2\222\221" - #"\254r\f\23\304\260\0\34\304A\34\274" - #"\342\25\245\205\201\327\303t6\330\246cz5\252\3653Q_\206\272O.\201]" - #"\262\267\266\264\306 f,\34\371f\16\t\26SX\bV*R\217\341\330\0\6" - #"\230Xd\24U\250BU`\267\230>\214%\267e" - #"\334\212\255\22\244-\330\262\26kI\263\2\205\4\213" -) 500 -( - #"\rC\16\177\n\36X\365\200J\207\337\n\353TL\25\27512\t\226\aJ[" - #"\306\305X\f`\t\226\274\213w\357\300" - #"\35\335\3506\3324\221 \301b\303\220" - #"\303\237\212\252\17\253\324\267\233\227\373_" - #"11\314\20\242r\243\272\273\272\321uEq\321\341x\324 5w\334\335\243-" - #"#\200%X\362\367\370\373M\330d\234Q\342A\202\305\24\26KBy\2306\264" - #"\251\37\307(N\247\234\276!\356\6\214" - #"\226s\344\221\2324\0233\e\320\340\202\tkE9\341|\vo\r\357\e\264\21" - #"\e\377\210?\222\223\345?$X\314\350A\17$\250Ls\227\21\335\303B\1\n" - #"P\20\350Ma\b\313Df-j\265\260\310X\206\267e\224\211E\354\6l\360" - #"p\262\2506\251\17H\260\230\321\2066\264\262\31*\tI\355hg3\226!\314" - #"\302,\314\n\356>\317\315E\361\221\333" - #"2>\233\364\254\327\254\216\215\330\370\6" - #"\3368\2033\312+T\233\324\a$X\314h\0013\257Ht\17+d^\310\367" - #"g\177\37\243\345\34\rOM*@A\5*t\263S\37\344\266\214\256v\357Y" - #"\35\261\210]\212\245\324\1\333OH\260" - #"\230\321\6fq\247\333\256\272m\373\301" - #"\355\30!\307\222s\\p\331f\330\372" - #"\252\372\0H\222\344c\vbh\247\302\3552SzX\37\340\203\333q\273\217\v" - #"\250\3\266\377\220`1\243\25\255\254\226" - #"\204\307\313\216O\2325i\244\34K\316i@C\nRl\bFg\vP\3607" - #"\374\215\271I\6r\32\247KQz\vn\361q\215\357\16\330^\3739\216YH" - #"\260\230\301P\260\242\0205\16\343z!" - #"\344\231\376:\324\315\300\214\340\356\215E" - #"l\bB:\321\311\326$\3\331\206m\313\260\314w\327E\337\35\260MP\346\201" - #"!$Xl\260\331l\357\354{\a\255\314\26q" - #")Ha\246\177\372R\207\272ld\a}\373l\314" -) 500 -( - #"\366<\205(2\357\343\3755X3\352e\324\1\333OH\260\330\340r\271\222\v" - #"\223\217:\216\262Z\304\211\233\212U\217" - #"\372\351\230\36\364\355\2630\3134'\n" - #"\317\341\334n\354\366\321\226Q\311`\270" - #"\353[wm;\275\355\34\316\351i\236\210\220`\261a\0\3N8\23\221\310j" - #"\3001\353a\345#\337\4\36\226\254D\23o\234\370\365\236\257cl1#]v" - #"9\203\341k\351\333\221\337\376\v\376\202" - #"aA+*\363\340\216\31\4\213\207\212" - #"\243\235\350\234\202)\241\354\n\"\212+" - #"X\207p(\a9\376\\\351\265\340\214" - #"92\e\206\224\350z\374|\361\317\375" - #"\364\270Wb\345\307\370\30\303\202V\303" - #"\367R\215\202\207\212\243f\20,\215v" - #"\323\224r(\376Lq\f\307\22\220\300" - #"pvA\227\204\335\350\36\207q\361\266" - #"x\37\245\257\24\274\26\234\311Fv\23\232Lr@\347Z,\301\22?\257\275\21" - #"7~\212O55G%\356\237\b\2430\203`\361@;\332\223\220\304p@A" - #"sG\17\343p\16r|\227\276\362M\30\302\222\221\334\210F\215,\324\21538" - #"\203\374\241\332\f\376\220\213\334\20\204\324" - #"\240FS\253D\207\4\213\r\35\350`\30\300\202\260K\302\3038\254&\200%3" - #"\0033\352P\307\304\36\3\331\207}\370" - #"\n\3431\336\377[\226c\371'\370\204\202V> \301bC':\331.\t\23" - #"\220\340\204s\20\203\f\307\324\201\0064" - #"\250\331\"\224\231\216\351\365\250gb\217" - #"\2018\340\200#\260[\226c\371g\370" - #"\214\237\240\25\207\220`\261\201\271\207e" - #"\2055\0061]\350b8\246\16\250\367" - #"\260l6\333\263\367=\373\304\177>!" - #"\342\261$wv!\340n\326\313\260\354" - #"\257\370\353y\234\327\304 S@\202\305" - #"\6\346\202\5 \21\211\302\325\35U\223\346.\343r\271J" - #"_+E\266\330\265\n\316\343|\5*\260/\260\273&b" -) 500 -( - #"\342l\314\336\27\350mc\t\22,6t\240\203\355\222\20\2\n\226\v\2566\264" - #"e C\3458\331\310V'z\306S\206\262\\\344\6\341*-\305\322\200\35\263" - #"\261\4\t\26\e\332\321\316\244\326\250;" - #"BT\305r\2576\02713\"\31\311\301\35{vg*\246B\202\320u8\367" - #"a_!\n\203\270\361z\\\3779>gn\217i \301b\300i\234\16A\310" - #"DLd;l\"\22\217\341\30\3331\231\343^m\356O\325\177\312B\26\233q" - #"\353 \364F\341\317?\371\371\vw\275\200\300K,\24\242\260\nUtFg$" - #"H\260\30\240E\0\v\2.\t\e\3200\r\323\330\214U\207\3038\314f(#" - #"\350\237\327\337\362N\vF+\2610\274tL8\302\347`\316^\354\325\315T\261" - #"`v\224d,\243E\0\v\2\nV#\32UF\334/#\262\207\325\204&\364" - #"#\5\243\247P\311\247p,\26\213\374" - #"\257\374\342\336\177\333\273\334\262\34\200\305" - #"b\261Z\255\342\356g\336\0" - #"*Q\231\17\265\221\326y\230\367\22^bb\217z\274~\"\214\202/\17\253\244" - #"\244\344\356\273\357\336\276}\373\324\251C" - #"M\275=\326\200\36+D\31\217U\256\312\215\25\367ZN2\276\247\30\300@\17" - #"zb\21\253f\322\221\340?wTq\210\36\330\374@_-\3138q\32\322\220" - #"\316p<\2358\210\203\301u\275vg&f6\240\201\223\270\273\327O\204a\260" - #"\v\207\251e\307\216\35\211\211\211\345\345" - #"\345\356/\362\37t\357\220:\342\245x" - #"\215\246.\226\212\177$\375H\243\301\231" - #" \377\347\0\270Q\272\21+\30\274\27" - #"\227\343\320k1a\373\4\365\3\352\3142i\331g\322g\362\327~\376rz\275" - #"l\2364\357K\351K\337\327\30\205\201" - #"\306\360\342a\225\224\224\254_\277~\333" - #"\266ms\347\316u\177=66v\374\370\361EEEeeeEEE\343\307" - #"\217W\234/N\350Dg\34\3424\32\234\377%\241" - #"B\3\32\320\300`\34%\16}\340\335\3\331+\324\326" -) 500 -( - #"\2\324\237*T\25\240@\3758\3630\257\fe\352\3071\31\274\b\326}\367\335" - #"\327\321\3211o\336<\345$mff\246\374\243\212\212\n\0+W\256\4PY" - #"\311]?\25'\234\332\tV\2\228" - #"_\22\16\225\307\264\242\271\2579\371\22" - #"\313\343\337\351HoF3\303\1u\240\23\235!\b\231\2\6\233\233s0\307d" - #"M\260\231\300K\320\275\271y\304_\315" - #"\244\244\244\342\342\342\342\342b=\355\361" - #"\237Nt\306#^\243\301\371/\330\320\323\323\3\300\222eI\vKknb\251" - #"/1\210\1p\22'\345/\204\240\2\25\352#\3562\3631\377\25\274\302d(" - #"3\301\213\207%.]\350\322(\342\16 \26\261'qR\200B\311)HE*" - #"\363Q\205s\262\252Q-G\334\275v0\v\210\231\230y\30\207\5x\353\365\205" - #"\4K-]\350\322\316\303\nE\350dL\356D\247F\3433#\3\351\32l\351" - #"e!\253\tM\314\207\325\216\nT\310\1,5}\203d\302\0206\21\23O\340" - #"\4k\e\305\206\4K-\232.\t!J\334=U\23\17+\3\31Gp\204\371" - #"\260lq/a\370v\355\333\254\226\204\0\246`\312q\34g5\2329 \301R" - #"\213\23N\355\226\204\20!\356\16\0\251" - #"HC\32\363Q\323\220\306\377\222P)" - #"a\330'\365\205\347\206\253\357r\246@\2025\34\22,\265\34\3031M=,\376" - #"\343\356\0\220\256\211`e\"S^\22\272{1\334\266\322\251C]:\322\3\252" - #"\20\355;\3245\25S\205\256\23\255\5" - #"\274\354\22\212\213\2461,\210\220\354\16" - #"\310i\351iLFR\16\202X,\226\320\354\320\244\303I\0\3440\220\\\350\216" - #"\311,ZP\203\232<\344\5t\213\357\360\26yX\303!\301R\305\327\370:\4" - #"!\21\210\320n\212D$\36\302!\355\306W" - #"\217\v.L\5\253\343\337\36\307\236&b\242\v" -) 500 -( - #".\365\215-t\240\26\265\271\310e8 \t\326phI\250\212.ti\2275" - #"*\303y\320\335f\263\205e\205\241\23V\213\225\371b-\24\241\tHhE+" - #"\333a5\"\b\17\3137$X\303!\301R\205\246\347rd8\27,\227\313U" - #"\322X\2624mi\320\373\367\276\311D&\377\e\2052\265\250e+X\24\303\32" - #"\16\t\226*\264\16`\201{\301\2p\24G\265\210\270\313\b\221\331\0\0ah" - #"E+\263\n\321\0\310\303\362\6\t\226*tX\22N\302$\v,_\343kM" - #"gQC\vZ\264H\302\222IG\272\30\2025\35\351HW_p\325\35\22\254" - #"\341\220`\251B\a\301\2\367N\326\30" - #"\367\260\206j:\347\241\346\275\232\200z" - #"\246\216\n-\t\207c\6\301\322(=G\311\375\3611\205>\202\305y\356h\v" - #"Z\264\23,\376\217\23\16\2250\314\301\377^\373\277}\364L\r\2;\354gq" - #"\326\5^:}\271\177\"\214\302\f\202" - #"\245\346\304\226\17\224\343`>\246\320\372" - #"\\\216L\"\22y\316\35mF\263v" - #"\202\245\344\216\362\316L\314\304L\266C" - #"\206\"4\e\331\265\250e;l\320\270\177\"\214\302\f\202e \232\226jP\340" - #"9w\264\37\375\335\350\326\250\a\a\0;\354\0\2423\243=Z\272sG\16r" - #"\220\303|\324Y\230u\20\a\231\17+.$X\252\320a\227\20@\2\22\270\215" - #"au\240#\26\261\241Zf g \343\224\375\224\342\352\262]v\251'::" - #"\332\22fA\32f\332f\6\3323uT\362\221_\t\356\212V\32\b\tV\360" - #"\fb\260\a=L\312K\372\206\347\240{+ZS\300\370S\352\1\347\355sz" - #"zzj\373j\321\6\311uEoA&\314\306\354\315%\233U\226\3262\23$" - #"X\301\323\215\356\30\304\204 D\353\211x>" - #"\377\254iN\203L\26\262\220\251\351\fj9" -) 500 -( - #"\4\255NO\25\240 \346\3331*K" - #"k\231\t\22\254\340\321\272\260\214\302\30" - #"\367\260\322\221\36\226\23\246x\31\314\227" - #"]\352\251C\35\3524\319\26\261!\b\21\240\202\243^\220`\5\217n\202\305" - #"s\241d\355\272^+\244#}\361\272\305\222\267\226\356\234P\217z\324k58" - #"\305\335\335!\301\n\36}\266\b\1\204\"4\0061N8u\230+PtX\22" - #"\362\237\331p\b\207pX\253\301\vP" - #"P\201\n\255F\27\r\22\254\340\351F" - #"\267>\202\5 \36\361|\256\v\332\320" - #"\226\f\226\335\275\206\223\202\224Nt\16" - #"`@\323Y\324\320\200\6\362\260\364\201\4+0\334K_>\361\374\23:\244\271" - #"\313p\233\331p\24G\265\366\260\254\260\306!\216\333\"3N8\307a\234vg" - #"\376\310\303r\207\n\370\5\206{\351\313" - #"uX7\25:\265\241\216G|\27\272\364\231\313\177z\321\e\202\220HDj=" - #"Q*R\271\25\254z\324O\307t\355\332\333d#\273\tM\242T1\324\32\22" - #"\254\340\321\347 \241\f\237\307\tu\b" - #"`\311\360\\\263\341\372\37]?x\325 \0\213\305b\265Z\231g\36\204!," - #"\31\311\215hd[\316TPhI\301,P\334\375\e\30,\t\227,Y\262\177\377~\371" - #"\353}\373\366\251\37P\b\234\320\273\334" - #"\313\257\36\370\325`\301\340/\356\377\5" - #"\0-\216\200\4\212\376\36\26\17\202\345" - #"\216\23N\271\362\217\16s\221\207%\23\274\207e\267\333322\0dffZ" - #"\256$3\223\357\212\266,\350\202\336\207" - #"\221\377\364\333?\335|\337\315\370\346o" - #"\273\256s{C\267\254Q\31\16\5K\267\210;\200Ld\266\241\255\17}\372L" - #"\307-\301\v\326\344\311\223\337x\343\r\0MMM\322" - #"\22545q]nM\r\321\321C\375\246\252\217W'" -) 500 -( - #"\206\352\264A&\303\333.\241\316\36V" - #"2\222\235p\366\243_\267\31GE\267\0\26\0+\254)H\341\274\220\241\16\4" - #"\277$\254\257\327\254d\31\307\364\364\364" - #"\0\260X-\326)\326\226\257t\215\1" - #"\363\266K\250\263`)\251X\374\264\320" - #"\321\323\303\3027a\2541^\263\201A" - #"\320}\336\274y\357\275\367\236\362\355{" - #"\357\2757o\336<\365\303r\315d\330a\327mG_f*\246\366\240G\3379" - #"}\241\363\222\20\374U\305\222+a\3516\335tL\327\260t\274 0\20\254?" - #"\374\341\17\217?\376\370\303\17?<0" - #"0\360\360\303\17?\376\370\343\177\370\303" - #"\37\324\17\3135q\3209\t\v@(B\355\260\353U1p\24z\320c\201%" - #"\nQzN\312[U\254\3038\254E" - #"\267\347\221\230\201\31t\242\220\201`\315" - #"\2325\353\300\201\3\345\345\345\t\t\t" - #"_}\365UYY\331\254Y\263\324\17" - #"\3135\261\3209\315\375\362\264z\353\244" - #"w\332\320\246\347zP\206+\17\253\37\375\355hOG\272n3\222\207\5V\325" - #"\32\316\236={\372\364\351\310\310\310S" - #"\247N\2359s\206\311\230\\\23g\214`% \1\361\372O\353\5\335j\215\272" - #"\223\206\264f4\353<\351H\34\305\321\4$\350Y\2668\a9Z\365k\25\a" - #"\6\202\265{\367\356\5\v\26\334{\357" - #"\275\r\r\r\367\336{\357\202\5\vv\357\336\255~X\256\2115`I\bcV" - #"\242\336\3219\342.\303Cf\203r\324" - #"a\372M\323\333v\351z\30\233\223#" - #"\320\306\302@\260\36}\364\321\342\342\342" - #"\207\37~\30\300\303\17?\\\\\\\374" - #"\350\243\217\252\37\226k\fZ\22\306!" - #"\216\23\17K\377\210;\370\20,\345\250" - #"\303\213\177~\261\277N\357\34\vJ\37e\220\351^^^\356\376\355\332\265k" - #"\327\256]\253~X\2561B\260\354v{\357\272^d\301b\261DGG\313" -) 500 -( - #"\t\26F\321\212\326|\344\353<\251\222" - #"\212\245u\375)\1778\202#\372/O\351\b4\3\17+11q\314e\272\e" - #"!X\275\275\275\357\275\360\36\342!I" - #"Roo\257\316\263{`\310\222\220\253\252XG`\300\216%yX\f\4\353\374" - #"\371\363\16\207C\316q/--\215\217" - #"\217\177\375\365\327\325\17\3135\6\5\223" - #"\306x\f\v\34\254\n\225\243\16\37T|\20w^\3577\203\216@3+\340'" - #"\177\275d\311\22\375\v\370\351YqT~\21S1;n\266\376\305\3059Ik" - #"\30\300\300q\34O@\202\376S\e\236" - #"\331\320\323\323#\307\260\"\v\"k>\252\321yvc3\ex\2508j\206F" - #"\252\32\225@T\16\30\313}\236\225\327" - #"\a1\30\216\360\v]\27t\316t\217" - #"\216\216\316\376V6\216\301b\261\244\244" - #"\30\340\335(\34\303\261)\230\22j\304" - #"/\217\341\36\326\0201\260\300b\207]" - #"\347i\345#\320FE\361\334?\21\372" - #"\317.\303\246\200\237R\304\335\364\5\374\0t\243[\317~9\n===\322\327" - #"\22\200\257\245\257[Z\214,eg\310\26\241\f/\251X\231\310\204\1\201Z\e" - #"l\351H\37\313\253B\6\177$\267m\333v\363\3157\237>}\32@dd\344" - #"G\37}d\342\2~\320\275\375\204'" - #"]\350\312\352\232\204I\206\31\0\264\243" - #"\335@\301\342\302\303\3120F\260\0\344" - #"!\257\006531\323\220\331\r\207M\1\277S\247N\251\37G\24\f\27\254\316" - #"\254\316i\230f\230\1@\e\332\222\220d\310\324\374\b\226QE#r\221[\213" - #"ZC\246\346\1j\244\0320\372\367\313" - #"\271\202N\335+\a\16\243\35\355F\t\26/U\2612\240\347)Bw\362\220\367" - #"\253?\375\312\275\256\274!f\30\5\tV\300\350\337/\347\n\364/u" - #":\f\3\5\213\227T,\343<\254<\344e\337\226\355^W\336\0203\214" -) 500 -( - #"\202\4+`\f_\22\32.X\6\6\335\361\315\252\320\243{\215\336F\30'X" - #"\3230\255\5-c\266V2\tV\300t\243{\252\201U\2518\20\254\16t\350" - #"\326?u8r*\226G\367\32\335f\267\331l\2260\vb\221i\3134d9" - #"f\2055\25\251\215h\324\177j\36 " - #"\301\n\230.t\31\271$\354\204\261\315" - #"\276\344\206\317\206d\215\312\244#\335\300" - #"\314\6\227\313u\270\357\360\264\361\323$" - #"\227a\313\261\231\230Y\215jC\2466" - #"\34\22\254\2001X\260\214\366\260\216\341X,b\365OCS0\274Aa\3\32" - #"\262\220e\240\1cy\2430x\301\232" - #"?\177\276\371\317\fz\303\250\30\326\320\251\240.T8+\2]\2140\\\274\30" - #"\30q\227\237\302\360\314\206\0064\4\235" - #"V\302\344\215\220S\261\324\217#\"\301" - #"\v\326\177\375\327\177=\377\374\363\267\337" - #"~\273\326IX\355\355\355EEE\221\221\221EEE\35\206\323\30\255\0\0 " - #"\0IDAT\35\35\232\3165*\3\308\205S\372\364\316\364@\216\332\364\37" - #"\353\267\305\332.\270\2k:\335\337\317" - #",\17\240\3\35F\t\226\374\24\206\367\254oBS\320Y\243L\336\bcK\217" - #"\272\3402\260\356i\360\2025m\332\264" - #"\277\376\365\257\311\311\311\v\26,\250\250" - #"\250`h\223\a\5\5\5\0v\356\334\t ?_\357\32L\36\234\300\211(D" - #"\31\270 \222[\r\e\262*\224]\274;\177|\347\373\317\275o`\372O\22\222" - #"\272\3205\200\1\243\fhD\243\261K" - #"\302k\343\256\255\275P\v\e,\26\213" - #"\335\256\367y\306z\324\343\222\316s^FU\f+,,\354\205\27^\370\356w" - #"\277;\177\376|\215\352a9\235\316\213" - #"\27/\26\27\27_u\325U\305\305\305\27/^\354\356\36\275D\254\237" - #"\37\247 >u>\326\203l'\365qY\22\222\332\321\36\320h~\342{" -) 500 -( - #"\264\241\215\271dl~d3\223\1\3\275L\306\nk\34\342|\324l\320\372\215" - #"\360\332\335K\213b!#\375\250\327\331" - #";=|:\262\2\250\214\306\360\377\244\32FF\374\325\6\335KJJ\336x\343" - #"\215\375\373\367k\324\371y\323\246M\17" - #"=\364\220\362mQQ\321\246M\233F\275\313O\307;\b\377\334GN\3\333I" - #"}\\\226\210\304\16t\0044\232\237\370" - #"5Z\22\222\220\244\333\303z\305w\30KS\333\\pu\2423\ri\301\215\346" - #"?\276\a\234\201\31\1\265pe\370\177" - #"R\v##\376\252\316\22\226\224\224\254_\277~\333\266ms\347\316ee\220\a" - #"\257\275\366\332\221#\227\v;n\334\270" - #"133s\363f\177\377\3023\307\340\254Q\0W\n\226\1$\303\300\254Q\31" - #"\3\343\356\315hNF\262!\245u\334" - #"\311\206\236=\247\257\240\6\206F\374\245`\331\261cGbbbyyy\320#" - #"\370CDD\204\323\351T\276\355\352\352" - #"\212\210\210p\277@\357\377\257G\201\347" - #"\365\236\323\223'\201\377c\334\354\0350" - #"(\346\356\306\277\0\2770h\352\233\201" - #"\355\6M\355\316\6\340?\r\232\372\20\220\203\276\276>M?\370#\21\274`-" - #"Z\264H\251\214\254\35O<\361\304#" - #"\217<\242|\273q\343\306'\237|\322" - #"\375\2x\323\\\257/2\271\354\t\351\211_I\277b5Zp\227\275.\275\276" - #"NZ\247\363\2442.\311\205>\fH" - #"\3:\317\353q\331\357\245\337\177_\372\376H7jj\333fi\363C\322CZ" - #"O:\352\225\16\311\201/\300|\336Q/\273(]\234 M\2005x\335PI" - #"\360\236\355\276}\373\202\276\327\177<\326\200\36+D\375q\302iT!$\5\3" - #"\227\204\307p\fN\204$\e\266I*c\340\222\260\21\21530\303\220" - #"\251\335\t4\206\305\212z\324\247#" - #"\275\246\337\2605!\357\231\356\261\261" -) 500 -( - #"\261\343\307\217/***+++**\32?~\374\324\251\243\237\343\v\v\v" - #"\363gp?/s\307G\320\235\355\244>.s\27\254 \36!\270Ie\3321" - #"\264?\251\333\303z%\ri{\332\367" - #"(\345\366=\266\3665\265m\244\234\6\266o\304\250\3N\306d\\B7\272u" - #"~#jP\223\207<\177\206\322\b\336" - #"\5\v\200\234\344\265r\345J\0\225\225" - #"\225\376\334r\361\342E\206\227\271s\34" - #"\307\247`\212\16\223\372\270,\36\361\307" - #"p,\240\321\374\304\367hv\273}\361" - #"\235\213\321\16\213\3052a\302\4\365\3" - #"\6z\231B\22\222.M\271\344\222\\\200\227\255}M\337\210&4y\25,\266" - #"o\204_\3\326\243\36\365\272\375\326\311" - #"\34\302\241\34\344\3703\224F\b XIII\305\305\305N\247\263\270\27081" - #"\321\260\"\0012<\354\22F\"\22\300\327\370Z\347y{{{\237y\367\31\264" - #"\31\337\30\321\n+\216A\377|w\27\\\35\3500\252t\237'\207\241\177\276{" - #"5\252\215\255\316,\200`qE7\272\r\27,\4\36\306b\265`Q\226\204\206" - #"p\305S4\31\320\310T}N\3\313\225c\35\364\357FQ\213ZZ\22\n\303" - #"\31\234\261\300\22\201\b\243\rA\2\22" - #"\224U\241?\260Z\260t\240\303@\301" - #"r\177\212\260\316\260\345\377\260\34\320\265" - #"\351Y#\32Un\271\260\\9\326C\347\36\205}\350kE\253\261\307\222H\260" - #"\2\200\207\365\240L\"\22\365wu\242" - #"\243\243\377\337\227\377\17m\3067F\4" - #"\360/\353\376\345'/\377\4\200$I\2725=\363z(G\177\206\352v\34\302" - #"\207\r\37\352y\250\263\26\265\3230\315" - #"\220\226\210\nfh\244\252\e\6\327\32u#\21\211\1yXL\350\351\351IB" - #"RGG\207\244\177\276\3560\322\221^\216r\235'" - #"mB\23\17\202%\27\16t\301\25\205\250\323\256\323" -) 500 -( - #"\272\315{\20\aga\226n\323y\205<\254\0\30\343\36\226\\kTw\235\364" - #"N&2\233\300\354\310\252\237\250\251\204" - #"\305\34\375\233\252V\240\242\0\5\272M" - #"\347\25\22\254\0\340\312\303\322?wT" - #"\2565\212A\235\247\365N\0062\364\17\272s%X\320\275\222_%*gc\266" - #"n\323y\205\4+\0\306\270`\31Xkt8v\330-\260\350YHq\244:" - #"\r\6\242s\255\344*T\221\207%\22$X\206\327ipG\347V[\234\324i" - #"pGO\17\353\30\216\205\"t\244\254i\335 \301\n\0\37i\356:\23\213\330" - #"\22389\250\357\362\254\35\355\6v\367" - #"\32N\272\276\335\227\325\34740G\317Z\311\34" - #"+\254iHk@\203\16sU\241\312\360\210;H\260\2\202\37\17\vW\36\201" - #"\326\ac;\324\17G\347\30\26\207\202" - #"\5\35\303X\225\250\314\207\301-``\16\301\222;_h\321\5@\36yh\212" - #"P\313\311\376\223\2064\370\362J<\342" - #"u\356\235cl\207\372\341\350\34\303\32" - #"\251N\203\261\350\23\306\352C\337Q\34" - #"\2357q\236\362\2110\n3\b\226F\213\24\271I\214\364M\31\306c\3\307\342" - #"\254q\0066\370\362@\347%\241\341\35" - #"\352\207\223\2064$\300\5=\26\247|" - #"\325ipC\237\266\365\225\250\314A\216" - #"\353\354\345O\204Q\230A\260\364\201\253" - #"\365 t_\22\32\336\241\336\3\233\315f\265Xq\fa\323\302t8" - #"O\307aN\203L\36\362tH\305*C\331<\314\323z\26\177 \301" -) 500 -( - #"\362\27\16\5\253\23\235\272M\307\333z" - #"P\366\177\227\245/\373\254\3413\35v\08\314i\220\311BV\vZ\264v3" - #"\377\206\277\315\301\34M\247\360\23\22," - #"\177\351B\27W\202\245\363\371\3476\264" - #"\245\300\340\n\r\303\311B\226>'\n" - #"9\314i\220\261\301\226\205,\255\235\254" - #"\380\37\3635\235\302OH\260\374\305\tg\34\342\214\266\3422:/\t\333" - #"\320\306\317\271\34\205t\244\353s\242\220" - #"\317-B\231|\344W\302\257\322\341\301q\1\27\32\321hl\241Q\5\22,\177" - #"\341mI\30\213\330\36\364\f`@\237\351\270:H\250\240\351\21he\233\330b" - #"\261\274\264\343%n\5k6fW\241J\273\361\17\342`\16rl\320\257\360\226" - #"\17H\260\374\2057\301\nAH\fb\272\321\255\317tcP\260\3440\31\0I" - #"\222\322nH\343\252N\203;\2631[" - #"S\17\213\237\210;H\260\374\2077\301" - #"\202\276\231\r\274e\215\312\350Sd\206\303:\r\356h\275$,G9\t\226x" - #"t\241\213\253\30\26\364\rc\361\351a" - #"\311EfN\342\244\246\263p\233\323 #\247\233h\267eL\202%$\\\35$" - #"\224\211G\374\355?\272]\211\263h\227" - #"\2164\200\201\238\301\233^\313\244#" - #"\275\31\315\232N\301mN\203\302,\314" - #":\210\203Z\214\334\207\276F4\32\333)\307\35\22,\277\30\300@/z'c" - #"\262\321\206\\A\2\22\376\371\305\177V" - #"\342,\332\245#u\240#\26\261|\272\30:d6p\233\323\240P\200\202\nT" - #"h1r-j\263\220\245C5\b?!\301\362\213\3438\36\203\30~\362\274e" - #"t[\22\362\271\36\224\321!\214\305s" - #"N\203\214v\e\205\234\234yV \301\362\v\16#\356\0\22\220\240O\262;o" - #"\265F\335\321!\25\213\177\301\322.\356\316IU\31" - #"\5\22,\277\340V\260\364\361\260\370\314\32\225\321\301" -) 500 -( - #"\303\342\255\367\304pr\220s\4G\372\320\307|d\36\32O\270C\202\345\27|" - #"\nV\34\342\364\361\260x;H\350\216vAw\273\335n\261X`C\363\305\346" - #"\253c\257\326b\nVXa\315D\346a\34f>r5\252y\250\214\254@\202" - #"\345\27|\n\226\\\331]\207dw\236" - #"\227\204\251H\355Dg?\372\231\217\334" - #"\333\333+I\02221}\374\364\336\356^\346\343\263E\2130V':-\260p" - #"\265;L\202\345\27\34&a\1\bE\350TL\325aU\330\212Vn\5\313\n" - #"k\22\2224\314l\310A\16r\264\32\234\35Zl\24V\240\202\253\210;\314!" - #"X:T\34\335\374\326\346\37\257\373\261" - #"\16u\227\2%\tI:\264\200\346y\227\20@\26\2624\254k\236\215ldk" - #"58;\2648\240S\205*w\301r\377D\30\205\31\4K\207\212\2437|\357" - #"\206O\337\374\224\207\316\v\36$!I" - #"\353\6\205\375\350?\211\223\34:\230\n" - #"\32\265\255\217\216\216\266X,\230\216\247" - #"\357}:%\205\273\322:\36\314\302,\346\245G=Z{\271\177\"\214\302\f\202" - #"\245\3\235\350\214G\274\321Vx\341\243" - #"\227>Z\373\343\265\0,\26\213\335n" - #"\327b\212v\264\307!\216\317\254Q\231" - #"\351\230^\217z\346\303\366\364\364H\222" - #"\204\34\354\371\217=---\314\307g" - #"\213\374\373\311v\23\206\223\326^\356\220" - #"`\371\5\207\347rd.6]|\344\331G\0H\222\324\333\31320\254\370\377" - #"\31\327e\264\356me82s4\362" - #"\260\206\230\6\316\323\334\25\330\36\3209" - #"\217\363\315h\346m9L\202\345\v\371C\213Pt\367w'\207s\31un\203" - #"F1,\245\270\312\233\273\337\274\373\232" - #"\273\265\230\202\25\3230\255\21\215Z" - #"\214,W\357\341\244\335\367\250\260\335(,CY\36\362" - #"8)\203\245@\202\345\213\241\17\355T\304[\343]\27" -) 500 -( - #"\270\v`\1@\eZ\241\255\373\323\202\226T\244j:\205J2\220\321\216v-" - #"\352\232\37\306a\275Z\3013\200\355F\341>\354+D!\253\321XA\202\345\a" - #"\361\3406\344\34y&r\177\307~\0\26\213E\243\3000\237\225\260\334\tEh" - #"\22\222\216\342(\363\221\17\3430\352\230" - #"\217\252\25l\17\350|\201/\26a\21" - #"\253\321XA\202\345\a\261\374\n\326\211" - #"\203'l\2116\204B\222$\215\2\303\374\v\26\200Ldj\261*l@\203\6" - #"\321|\255\310F\366\21\34\271\200\vLF\373\22_.\300\2&C1\204\4\313" - #"\17\342\301\347\26!\276\311\35\325\264\275)\377KBh\266Qx\b:\264Uf" - #"F\30\302\362\220w\0\a\324\17\325\204\246\20\204pXd\225\4\313\178^\22" - #"\2H\202\266I\235-h\341\260\301\227\aY\310\322\302\303\252C\235@KB\0" - #"\213\260\350\v|\241~\234/\360\305B,T?\16sH\260\374\200\343%!d" - #"\301\322\356`r4B\20\22\211H\315&`\203\26\231\rr{z\215\253\2312" - #"f\1\26\354\307~\365\343\354\307~\16" - #"\327\203 \301\362\v\216\227\204\0\222\221" - #"\254\241\3\224\n\376\327\203\320fI\30" - #"17\342B\315\5\270\240i\371i\266\\\203k\366b\257\372q\366b/\207[" - #"\204 \301\362\213XpX\252A!\21Z\226~I\6\377\21whS\263\341\255" - #"\257\336Z\223\267F\243\203_lQ\262|\323,i\335]\335*7L\317\341\\" - #"=\352\347b.\e\343\230B\202\345\a\t\334{X\332I\212 \36\226\r\266t" - #"\244\263\r8U\243\232\237\346\v\276qo\241x{\334\355*\235\254=\3303\17" - #"\363\302\21\316\310:\226\220`\371b\250" - #"\204[\34\246M\234\246\321I=\365h+X\202xX\0\362\220" - #"W\203\32\206\3\326\240F\24\301rg!\26\252\214\273\357\306\356\245" -) 500 -( - #"X\312\310\34\306\220`\371\242\267\267\367" - #"\264t\32\203\220\3162>\251\307\20\215v\t\207\304:\5O~\357In\305\332" - #"\235\\\344\326\242\226\341\200\265\250\25Q" - #"\260\324o\24\356\302\256\353p\35+{\330B\2025\n]\350\202\323h#F\306" - #"f\263\245XS0\31\26+\343\300\360" - #"P\275\315d\224\276U\312\255X\273\223" - #"\213\\\206IS.\270Z\321\312y\357" - #"\t\257\314\305\334:\324\235\307\371\340n" - #"?\207s\aq\220\317\234\6\230A\260" - #"\352a\t\325\252\200\37\200\354\245\331\350" - #"\204\\\264\214\303\255\"\227\313%\365K" - #"\251a\251M\375M\232\4\206\5\211a\1\230\211\231\f\vB\325\241.\35\351V" - #"XY\r\250\e\0230a.\346\356\301\236\340n\337\203=s1w\2&\f\377" - #"\21\25\360c\301\267\3209\320\251Q\1" - #"\277\350\350h\304\2]\0\220\222\222\302\355VQ*R\2658\2\335\217~LA" - #"\202\246y\364\354\310BV\vZXm" - #"\24\36\302\241\\\3442\31J\177\256\305" - #"\265\245(\r\356^\a\34K\260\304\353" - #"\217\250\200\37\v\234pj\266f\353\351" - #"\351y\376\335\347\321\251\341I=&h\321\233/::\3326\335\206\16X-V" - #"\376\353m\2\260\301\226\2064V\e\205\2m\21\16\347z\\\3779>\17\356\336" - #"\277\340/\313\260\214\255=\f!\301\32\5\316cX2ZxX===\237\326" - #"\177\212f\336\305\332\35\206a,\241=\254\205XX\205\252 \302Xgq\266\32" - #"\325\334\6\260`\16\301\352\222\327l\332" - #"\320\311\270\352\254&\244!M\213\2661" - #"Mh\322\246.\236V\344!\217U\30\253\32\32531\223\311P:0\264\245\373" - #"M\245\354\bD\314\301\234 \302X%()D\241\327\0\26'\210/X]\332" - #"zXN8\265\324C6\244!\255\5\354\235\240f4kPcJCXyX}\350\23k\213phK" -) 500 -( - #"\327\255R\266\377a,%\224n\261X" - #"\276\373\352w\227c\271\266\266\252C|\301\322xI8\326=,\315J\245k\201" - #"\232\215B\367\317\355\304\253'N\3034" - #"\21\267\b\25\374\17c)Y\362\227\244K\t\367'\254\304J\215MS\5\t\326" - #"(ti\273\342dC\22\222\234p2o\1\335\f\r\373\223j\201\274Q\30\\" - #"\255d\367\323-\277\373\362w\\\365g" - #"\17\202\205XX\215\35238\343\377-" - #"\207p(\24\241\234w\334 \301\362\305" - #"\0\6z\320\203\343\32\r\317\f+\254q\210S\23ww\367/\224t\263F4" - #"\212\345a\331`\313B\226\372|w\16" - #"\333[\371f\250\205\242[\245\354\bD" - #"\334\200\e\266b\253\377\203|\214\2179" - #"w\257`\6\301\322\322\5\352F\367dL\306\240F\303\263$\rij\316\350\273" - #"\373\27r\272\331\t\234\bE(\4Hq\277\2&u\315+Q9\e\263\231\330" - #"\243\17C-\24q\305\226\356\32\254y\37\357\373?\310'\370d\5Vhb\37" - #";\304\27,-=\254.t\361\\X\306\35\346\231\r\315hNG:\303\1u" - #"\300f\263\275\371\217o\256\377\315z\225" - #"'\37\252Q-\372\222\20\300w\360\35\a\34\376\256\ncP\216rn\317<+" - #"\210/X'\320\213\336Am\274\240Nt\212\222\347\235\216t\266\1\247&4\t" - #"\264M&\343r\271>}\372S\24@\315\311\207c86\16\343x\2561\353'" - #"\2230i\31\226\371\273*\334\200\333p[\4\"46J-\342\v\326 \354\260" - #"\37\327&\316t\313\17o\331\376\373\355" - #"\200\0005'S\221\312\266\317\325\21\34" - #"\311@\6\303\1\365!\37\371\310W5\202p\353A\37\370\271*\224 \341~\334" - #"\207\373t0I%|\t\226\303\341\210\211\211\211\211\211\331\263g\217" - #"\307\353\223&M\32\376\272L,b5Z\25\376\342\225_<\371\203'" -) 500 -( - #"\1U\177\261\365\201y*V3\2329l\2322*\261\210\305%UaMs\254" - #"\ae\276\203\357\224\242\364$N\372\276" - #"\254\24\245p\201\317\232\310\36p$Xv\273}\325\252U[\267n\335\262e\313" - #"\332\265k\25m*))\271\373\356\273" - #"w\357\336\275c\307\216\273\356\272k\347" - #"\316\235\0367j'X]\350\342\271\326\250;r*\226\327\315\276\340hBS&" - #"2Y\231\247+\225P\323\0Y\270-B\37L\302\244\325X\375{\374\336\367e" - #"/\341%\274\f\v\214,\303\340/\0227\344\346\346*_\227\226\226FEE\311" - #"_GEE9\34\216\341\257\313\0\270G\272\347u\351u-L\272C\272\343=" - #"\351=\256\376\227F\302%\271\302\2440\227ty\263/\b\334o\264\34\265(z" - #"e\265Z\331X\251\v\370\r\236\221\236\t\362^`\2264\253B\252`k\222>" - #"x}\337wI\273r\244\234K\322\245\221\356\212\234\36\211\223@\f\0DGG" - #"\a=\221>p\344a\325\324\\\256o{\313-\267(ewN\235:\265x\361" - #"b\371\353%K\226\234:u\312\343\3068\304i\347a\211\22|\265\302\32\217x" - #"V\e\205.\270\302R\303\\\215C\345D8_\16{R\211\3403\e&\240\t" - #"M9\310aj\220\221\\\213k%H\168F\272\340\364\375\247\177l\3771N" - #"^>\326\3033\34\t\226;\275\275\275" - #"===~^\254\335\222\360\30\216\211\262$\4\220\205,VGi\232\321\234\214" - #"dQ\317\246T\4\263$\34:?<\37\347\277<\37g\27\343\257\224\202\34\n" - #"\200\267\335!\v,\377\200\177x\t/y\275\261\3\35\370>\236\300\23zX\311" - #"\2]\5+33\3232\214\314L\317" - #"@\211\303\341\210\212\212\362\177\330\237|\377'\277\371\343oX\305" - #"n\334\303@G\316\35\2316i\32\0\17\233\371\3341dx\242" -) 500 -( - #"\260\21\215\242\6\260\0\324\341\b\216\\" - #"\300\205\200n\32:?\274\0EW\27" - #"\361\357hx\240\224\326\363\352\16\337\203" - #"{>\303g^\377\230=\207\347\360:" - #"b\344\5\341\b\270\177\"\306V\305\321" - #"\246\246\246\341\213\322\246\246+\376\37\345" - #"\20\373\360\310\272\17>}\343\323\e\356" - #"\271\301\307\e\26\20\312{\377\265\364\365" - #"\304\210\211\322\31/+v>\227H\31\310`U\306\257\21\215\302%a]\246\17" - #"\271\310-CY0\367.\302\",bm\2201(B3\3312\371\364\243\2477" - #"`\303%\\r\277\300\1\307\37\361\307" - #"\250\327\242<\216\365x\340\256\2062:" - #"=\2007\370Z\22\226\224\224\254_\277" - #"~\333\266ms\347^n\342\30\25\25" - #"\245\354\30zu\276\342\20\247\305\351\234" - #"Nt\n\264\36\204\272v\355\36\5\225" - #"\352Q\317\371!X\337\24\242p\37\366" - #"\5w\3475\270\206\2659\306\340~\334" - #"\252\177s\177\30\302\236\303s\312OK" - #"Pr7\356\336\216\355\275u\227K\323\bP\251QM\304\236-;v\354HL" - #"L,//\367x\275\274\274<11" - #"\261\244\244\304\353\5\0\272\244\256\251\322" - #"T\346\366\354\226v/\221\226H\206\356" - #"\211\4\304\227\322\227s\245\271RP\6" - #"\313\267(\377.\227\226\177,}\314\334" - #"B}\0\360\226\364\326m\322m\1\335\25\35\35\215t\310\245\204RRR4\262" - #"M\177\224_\206\6\251\1'\200b\340*\240\308\16\207\344\30~Y@c\352" - #"\17G\37\305\264\2644w%\315\310\310P~TZZ\32\31\31\31\31\31\251\344" - #"7(\0\30\220\6\254\222u@\32`k\317\273\322\273k\2445\2228\202uB" - #":\21%EI,\4+S\312\254\227\352\231[\250\17\0\216HG\342\244\270@" - #"o|Kz\v\37\210\361^\373\217\373/C\233\324\366\240" - #"\364 \234xPz\260]j\37\351\262\200\306\324\31\213d" -) 500 -( - #"\350\212T=\26\213E\222\244x\304\177" - #"\205\257\330\256\340^\300\vGp\344\5\274 O\301pd\355\210Ft#\32'" - #"[&\aj\260\374\214C\377\206Y\306" - #"\367\215?\2033\241\b\325\310NM\221\237\"\tI\245(\r\350t\321\3x\340" - #"\305\237\274(=#\306{\355'\303\177{\275\376>\a\364Kn\340'\202\257\30" - #"V\320\304!\216yaP\201\222\260\24" - #"\202\216\273\273\27T\212/\214OF\262" - #"\240j\245\260\0\v\344\6\310\376g\377" - #"\177\1\225-\223\t\3151\211`\305#" - #"\236y\334]D\301\252\376\260\372\352;" - #"\257\3067\261s\377ot/\250\364\332" - #"\347\257\t\234\323\360\r\v\260`?\366" - #"\303[\251/\257\22v\26g\e\320\200" - #"\257\f4\231\30\35\223\b\226\26\e\205" - #"\302\355\22\2p\325\272\236z\367)@" - #"U\326\262\350[\2042\205(\334\213\275" - #"^\1774\\\302\0\224\240\344\32\\\23" - #"`\362\26\2417\346\21,-\226\204\242" - #"T\357\273\314Q\6e\330\5>\366\354" - #"\306\\\314\255G\3759\234\363\363\372O" - #"\361)\347\rc\b\230I\260\230\237\316" - #"\21\321\303b\322\350\246\1\r\3230\215\2119\0062\1\23\nQX\202\22\177." - #"\226 }\204\217\370\257hN\230D\260" - #"\342\21\317\326\303\32\300\300)\234\232\202" - #")\f\307\324\201\310\236\310\2774\377\5" - #"#g-\373\203\210\265F\275\262\34\313" - #"?\305\247\376\\)D\303\30\2\246\21,\3461\254c86\25SC\20\302p" - #"L\358^v||\372x\330\202\317Zv\301\325\201\16\21K\367\r\347&\334" - #"\364\t>\361\347\312?\343\317\374\367_" - #"\b\24\217\323\v#]\346\343\3404\207\230G\260\330zXmhKF2\303\1" - #"\365\301\nk\nR\324\270G\rhHE\252\250u\32\256$\27\271!\b\251" - #"A\315\250W\232r=8\274\35\264W|\37\234\346\r\223\b\26\363\264\206\16t" -) 500 -( - #"$!\211\341\200\2721\35\252V6Bo\21\16\367)n\300\r\237\3413\337w" - #"\235\301\231\257\360\325m\321\267\t\344h" - #"\4\207\237>\27\317\230D\260&b\242" - #"\5\226\200\372\334\372\246\25\255\"zX" - #"\0r\220\203\31\301\337~\30\207\305-_7\334\247X\211\225\37\341#\337wm" - #"\301\226\ep\203\253W$G#8\374\364\271x\306$\202\5\326a\254\16t$" - #"\"\221\325hz2\226=\254\341,\305" - #"\322\317\277\376\3342\371\n\267\302\303\321" - #"\370\0\37\334\216\333\r6T\3\206\267\2036\1\246\22,\206a,AcX\0" - #"f`\206\32\17\351\20\16\315P\343\241q\306DL\224\266HO\237x\32nn" - #"\305\25\216\306\245\336R\224\336\202[\f" - #"6T\3\274\266\203\26\0353\b\226|" - #"\306b\337\177\357c\350a\265\241\355\177.\371\237J}E\236\v\215z0\0033" - #"\220\35\360]\312V\321\376S\373\257\217" - #"\277\236\275Y\272\340\335\247x\r\257\340" - #"\225\21;\302\254\3062,\233\200\t:\231h(*}.\345H\223\6\246\371\213" - #"\330\a\\e\344?#\17\341!\206\202\325\216\366fG\263\34w\27\250Z\3\200" - #"\311\230\214K\350F\367TL\365\377.9j\343\204s&f\36\357\324\244+\255" - #"\16\310}\0<\337\257=\bG\370\210=\330\327`\r\326\350`\e\17x\377\377" - #"\361\e%\264g\240f\231\301\303\222a" - #"\30\303\32\300\300\t\234\20\356\344\363e" - #"\352Q\217\372\340\3563S\0K&::\272\372\261jl\270\354V\\v4\342" - #",\343\26\2173_\6\226\2111\203\207" - #"%\23\2078\37\275\214\2B\316\32\25" - #"\261\276\212\315f\353\357\357\307\177b\311" - #"\357\226X\337\260\6\272\333U\207\272\354" - #" \326\223|\323\323\323s\22''\367Ln\224\206:k(\216\306c" - #"]\217Y`\231\204IF\333H\370\213y<,\206\251X\342F\334\345$" -) 500 -( - #"\300M\3537=\366\37\217\5\2617o\262\210\273B\fb\360O\270\a\367\fb" - #"\360\362\253\211x\3o\b\324\341\212\200" - #"\231\4\213\341\222\260\35\355\202\n\226\314" - #"\f\314\250C]\0207\326\241\316\224\202" - #"\5\0\257\340[\370\326\363x\376\362+" - #"?\306\275\270\327w\207+\2027\304[" - #"\365\214\4\303\264\206v\264\v\232\204%" - #"3\35\323)\206\345\211\204\337\342\267\v" - #"\261\360(\216\376\35\376\356u\274\216{\260\21\e\2156\213\b\f\363xXS0" - #"\245\27\275\3\30P?T;\332\5=" - #"\227#\223\211\3146\264\271\20\330\222\260" - #"\17}\35\350\b\250\b\272Xd!K\356\b=tl\260\0\1m\244\22<`" - #"\36\301\nEh\34\342\332\321\256~(qcX26\330\246aZ-j\3\272" - #"\253\22\225\271\310\265A\200\\\263\240IBR1\212\235p\26\243\30\35F[C" - #"\4\216y\4\v@\nRZ\321\252~\34\321\5\v@>\362+Q\31\320-e" - #"(\233\207y\32\331C\350\217Xuc\374\304<1,\260\23,\321\227\204\0f" - #"cv\25\252\2\272\245\34\345\v\261P#{\b\3751\345\21n\362\260<\351G" - #"\377I\234\248k\24\0000\v\263\16" - #"\342`@\267\374\r\177\233\2039\32\331" - #"\303\25\246t=\306\b\246\22\254d$" - #"\267\241M\345 \355h\217C\234\210Y" - #"\243\356\24\240\340o\370\233\377\327_\300" - #"\205z\324\317\306l\355L2\212\341\362$V\311:\206\230@\251M%XL<" - #"\254V\264\246@\370Z\34\261\210\rA\210\377y\36\aq0\a9\246\214\270\217" - #"Yy\32\216\t\376+H\260<1\207`\1\230\215\331\376\307\335)\342N\b\201" - #"\331\4\253\5j\353\376\230F\260\362\221" - #"\357\177\334\275\34\345$X\4\377\230" - #"J\260\242\0205\16\343z\241\252\366\253\tr\32d|" - #"l\24\16\357\325N\202E\b\201\251\4\v,V\205\246" -) 500 -( - #"\21,\37\e\205\36\275\332\317\341\\\23" - #"\232\362\220\247\257\201\4\0210f\20,wOA\275`)KB\367\372\212\2U" - #"\34U\310AN\23\232\316\343\374\250W" - #"\356\303\276\2\24\204!L\a\253\bq" - #"\341\241\342\250\31\4\313}\327C\275`\35\305\321T\244\302mK\305c\nQ\b" - #"C\330\\\314\335\203=\243^\3719>_\206e:\230D\b\215\373'\302(\314" - #" X\356\250L\305\352AO\bB\"\21\311\320$\3Y\212\245\273\261{\324\313" - #"va\327u\270N\a{\bB%f\23,\225\36V+Ze\367\312\34\\\207" - #"\353va\227\357k\316\340\314A\34,D\241.\26\21\204*H\260\256\30049" - #"\r2\205(\254B\3259\234\363q\315" - #">\354\233\213\271\3431^7\253\264\303" - #"\4\231\334\204oH\260\256\300d\202\25" - #"\216\3609\230\263\27{}\\\263\e\273\227\216\330RF0L\220\311M\370\306l" - #"\202\225\200\204nt\367\243?\270\333M" - #"\223\323\240\260\367\337\366.\177j\271\217" - #"]N\n`\21\2a6\301\262\302\232\200\204\240\363\335\315'X\177\376\247?/" - #"\376\351b|\223r\345\361\32338S\203\32\252*C\210\202\331\4\v@&2" - #"\217\340Hp\367\232lI\210o\302X#uZ\370\20\37\376\17\374\2171\322\367" - #"\2300\1&\24\254\fd\4-X-h1\323.!\200\bD\334\212[\361\3" - #"\357?}\a\357\334\205\273\364\265\210 " - #"\202\307\204\202\225\216\364\340\4\313\5\327" - #"q\34O@\2s\223\214\345\a\370\1" - #"\376\36\22.\347\373\331\355v\213\305\202" - #"I\370\260\367\303\37\246\374\320@\333\b\" L(XA{X\315hNA\212" - #"\350\245\373\206s\35\256\303 \334\23\262z{{%I\302\255\270#\372\216Sm" - #"\247\2143\215 \2\203\4\3532\rh\310B\26" - #"s{\270\340?\360*^\365|q\r\326`\215\21" -) 500 -( - #"\326\20D\220\220`]\246\tM\231\310dn\17\27\374\21\237\341\263&4)/" - #"8\340\300\2\254\300\n\3\215\"\210@1\241`\331a\267\300r\22'\3\275\321" - #"\314}\217O\342\337\360o\367\340\236A" - #"\f\2\230x\353\304k;\256\305\n|" - #"\313\362\255\224\24S\355\212\22\346\306\204" - #"\202\205`\235,3{X\300\375\270\337" - #"\6\333/\361\313\"\24\215\377\323xG\242\3_A\222\244\226\26\2655Z\tB" - #"7\314)X\301\245b5\242q\32\246" - #"ia\17\17\214\303\270\337\341w\177\304\37\1T\240b1\26\em\21A\4\214" - #"\31v\304\344\363\256V\253U\311\344\16" - #"\302\303r\301\325\201\216t\244+\257\330" - #"l\266\376\376\376\221\246\20\5\273\335\336" - #"\333\333\v\300b\261DGG\367\364\364\30m\21!*\356\237\b\2430\203`\r" - #"\257(\226\216\3642\224\0054H3\232" - #"\223\221\354\236\323\240h\223\305b1\266" - #"h\231\32\344\f\6\371\21\214\255\25I" - #"\210\216\373'\302(\e\314\271$\f\302\3032sN\3A\230\5\22\254!\32\320" - #"`\342\0\26A\230\3s\nV\nR\234p\6Td\246\21\215\246\364\260\242\243" - #"\243\225\232v\224\301@\210\2169\5\313" - #"\nk:\322\353P\347\377-f\25\254\236\236\36\245\217\6e0\20\242cN\301" - #"\2\220\207\274\32\324\370\177=-\t\t" - #"\202\177L+X\271\310\255E\255\237\27" - #"\367\241\257\v]&+,C\20\346\303" - #"\264\202\25\220\207U\213\332\351\230n\205" - #"US\223\b\202P\211\231\5\313\177\17" - #"\253\22\225\371\310\327\324\36\256\240\3562" - #"\204\240\230!q\324+\3230\255\5-}\350\363\247\3{\25\252fc\266\16V" - #"q\202p\371\372\4!cZ\17\313\n" - #"k\32\322\32\320\340\317\305\225\250\34S\202E\20\202bZ\301B a\254" - #"*T\25\240@k{\b\225\230`\365j\202G0\26\36\5\253\261\2611<" -) 500 -( - #"<\334\375\25\207\3031i\322\244\230\230" - #"\230={\366\370?\216\237\e\205\307p,\24\241S0%`C\t}1\374\344" - #"\255zL\360\b\306\302\235`\r\16\16\256[\267\356\342\305\213\312+%%%w" - #"\337}\367\356\335\273w\354\330q\327]" - #"w\355\334\271\323\317\241\374\364\260h=" - #"H\20\242\300\235`=\367\334s\221\221" - #"\221\356\257\254Y\263\346\235w\336\231;" - #"w\356\334\271s\337~\373\355;\356\270c\324Ad\307{\324\215B\371\262*T" - #"1\331\"\364\323\333\327\371\262\2006\4" - #"\375_\260\30\362\260~\302\347\e\21(" - #"\346x\n\346\360U8\245\266\266v\351\322\245\a\16\34HKKS\f\363\250\356" - #"\342\373[\367\27]pM\304D\27F\334\21\223/\373\36\276\267\2+\356\301=" - #"\276/\e\325\370\261s\31\347\346\231\340" - #"2\316\3153\260\340\22G\36\326\340\340" - #"\340\206\r\e~\371\313_\246\246\262\311" - #"8\267\301\346\317\371\347\261\226\204E\20\2#\351HFF\306p\003222\344" - #"\237>\363\3143\313\227/\277t\351\222" - #"\364\315a]\31\17#\207\177\353\v\1776\t\377\6\360\356\b\23\4_\2349s" - #"F{\301\360\2GK\302\224\224\224\266\2666\367W222\232\232\232\374Y\3" - #"\22\0041\26\340hI\330\332\332\352\3567I\222\324\324\324\4 **J\311f" - #"p8\34QQQFZI\20\204q\bp4g\347\316\235\253W\257~\375\365" - #"\327%IZ\277~\275\377i\r\4A\230\fN\227Wyyy55\227\343O" - #"\16\207c\325\252U\0>\372\350\243\305\213\251?\25A\214Q8\25,\202 \210" - #"\341p\24\303\"\b\202\360\r\t\226/" - #"\332\333\333\213\212\212\"##\213\212\273tw\217\0\0\4\333IDAT\212:" - #"::\2146'\0\34\16Gnn\256\307\213b" - #"=\216\303\341\210\211\211\261X,\36gH\305z\212" -) 500 -( - #"\314\314L\3137\270'\30\212\365\24\360v\302\327\220G \301\362EAA\1\0" - #"9\314\237\237/Lr\251\303\341\270\363" - #"\316;\17\35:\344\361\272X\217\263z" - #"\365\352\255[\267J\222\264e\313\269\202)#\326S455I\222400" - #"\260p\341\302\237\376\364\247\312\353b=" - #"\305\360\23\2760\352\21\364O\375\22\205" - #"\256\256\256\210\210\b\345\333\210\210\b\247" - #"\323i\240=\376\263h\321\"\207\303\341" - #"\361\346\n\3678\271\271\271\312\327\312\263" - #"\b\367\0242\356I\321\222\200O!\333\357\376\ee\324#P\320}D\36y\344" - #"\221\360\360\360\247\236zJ\376\366\311'" - #"\237\354\353\353\333\274y\263\261V\371\217" - #"G\206\255\270\217\343t:333\317\236=\va\237\"%%\345\334\271s[" - #"\267n\225\367\270\305z\n\257'|\r{\4\35DQP<\376hx\374I\341" - #"\37\2177W\334\307\331\270q\343\223O>)\177-\356S\224\227\227'&&\226" - #"\224\224HB=\205\274\230}\371\345\227" - #"\245+\177\243\214z\4\1\22G\211\261" - #"\214\303\341x\373\355\267\253\252\252\2146" - #"D-rq\244\325\253W\367\366\366\32" - #"mK\0\310\345\236\356\277\377~\243\r\31\202\202\356#RTT\264i\323&\345" - #"\333M\2336=\364\320C\6\332\243\22" - #"\21\37G\256\335\270}\373\366\251S\247" - #"\312\257\210\370\24\303\21\350)\376\375\337" - #"\377\375\323O?\0357n\234RU-33\23\6>\202\16^\234\240\b\27\31" - #"\365\0\202\a\335w\354\330\221\230\230X^^\356\376\242XO!\357~(\337F" - #"EE\311\337\212\365\24\n\340 \350N" - #"\202\345\213\230\230\230\a\37|\360\300\201" - #"\3\17>\370`LL\214\321\346\4\306\360\277F\2=\216W\265\222\21\350)J" - #"KK\343\343\343\35\16G[[\233\207\265\2=\205\202" - #"\307o\224!\217@KB_TTT\0X\271r%" -) 500 -( - #"\200\312\312J\243\315\t\214\341\211\243\2" - #"=\316}\367\335\327\321\3211o\336<%\353R^\211@\250\247X\262d\311\273" - #"\357\276{\363\3157gee\341Jk\5z\n\5\217\337(C\36\201\322\32\b" - #"\202\20\6\362\260\b\202\20\6\22,\202 \204\201\4\213 \ba \301\"\324r" - #"\3155\327\310\305\254e\32\e\e\231\24" - #"Y\264\333\355^\273\226\20c\31\22," - #"B-\353\326\255\273\347\236{\6\a\a" - #"\361\315\261\376u\353\326\251\0376..\356\2157\336P?\16a&h\227\220P" - #"\213$I7\335t\323\2157\336\370\330c\217=\373\354\263%%%\237|\362\211" - #"\234\30M\20l!\17\213P\213\305b" - #"y\365\325W\177\375\353_\177\370\341\207" - #"O?\375\364+\257\274\342C\255\224\262|\26\213%$$D~\361\352\253\257." - #"//\227\277.//\277\372\352\253\1" - #"(\211W\356\267x\24\363#\306\34\372" - #"\344\247\22\246\347\267\277\375\355\304\211\23" - #"_|\361E\337\227)\307S$\267\314" - #"\351\355\333\267'&&\266\264\264\264\264" - #"\264$$$l\337\276\335\375\247\251\251" - #"\251\317?\377\274\374uii\351\242E\2134y\0B\4\250Z\3\301\206s\347" - #"\316\205\205\205\235;w\316\367e\247N\235\32\36\222_\261bEQQ\321\252U" - #"\253$Iz\350\241\207V\254X\341\376\3237\337|\363\366\333ooll|\342" - #"\211'\226,Y\262o\337>\306\246\23\342@1,\202\1r\215\267-[\266\334" - #"z\353\255\273v\355\32~*H\301\275" - #"\254\240\373\327\227.]\312\310\310\260X" - #",MMM\343\306\215\363\370i{{\373\257\177\375\353\327^{-\"\"B)" - #"\203G\214A(\206E\250eppp\303\206\r\277\374\345/\v\v\v\377\365_" - #"\377u\303\206\r\362\216\241W\334\373x\273\363\263\237" - #"\375,555%%\345\347?\377\271\307\217\n\v" -) 226 -( - #"\v\217\36=Z\\\\|\361\342\305\237\375\354gL\266 \tQ1tAJ\230" - #"\1\367\202\345\227.]\272\361\306\e\237" - #"}\366\331\221.V\n\30\224\226\226*" - #"\277~o\276\371fff\346\361\343\307" - #"\217\37?\236\231\231\371\346\233oJn" - #"1,\245V\247\217\22\16\304\30\201\4\213PKaaacc\243\362mCC" - #"\3035\327\\\343\343\372\322\322\322\310\310" - #"\310\310\310H\271F\270$I\363\347\317/++\223\277.++\233?\177\276t" - #"e\23\n\345\26\367\362R\304\30\204bX\4A\b\3\305\260\b\202\20\6\22," - #"\202 \204\201\4\213 \ba \301\"\bB\30H\260\b\202\20\6\22,\202 " - #"\204\201\4\213 \ba \301\"\bB\30H\260\b\202\20\206\377" - #"\17\274\273\2057#\310\314\v\0\0\0\0IEND\256B`\202" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 42 #"\"The new plot library produces this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"mix" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"points" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 5 #"times" -0 0 4 3 1 #" " -0 0 14 3 4 #"vals" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 5 #"#:sym" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 6 #"square" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:color" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 5 #"black" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 11 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"error-bars" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 11 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"line" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 19 #"fit-result-function" -0 0 4 3 1 #" " -0 0 14 3 6 #"result" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:color" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 5 #"green" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:x-min" -0 0 4 3 1 #" " -0 0 20 3 2 #"-5" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:x-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"40" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:y-min" -0 0 4 3 1 #" " -0 0 20 3 3 #"-40" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"50" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 12 #"match-define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"list" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 14 3 1 #"T" -0 0 4 3 1 #" " -0 0 14 3 6 #"theta0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 23 #"fit-result-final-params" -0 0 4 3 1 #" " -0 0 14 3 6 #"result" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 86 -( - #";; Because fit seems to randomly fail, we can't have these test case" - #"s (DrDr complains)" -) 0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 1 #"a" -0 0 17 3 1 #" " -0 0 17 3 9 #"44.5 0.5)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 3 #"tau" -0 0 17 3 1 #" " -0 0 17 3 9 #"57.5 0.5)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 3 #"phi" -0 0 17 3 1 #" " -0 0 17 3 11 #"-0.38 0.05)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 1 #"T" -0 0 17 3 1 #" " -0 0 17 3 9 #"13.1 0.5)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 15 #"theta0 2.5 0.5)" -0 0 4 29 1 #"\n" -0 0 diff --git a/collects/plot/tests/sqr.png b/collects/plot/tests/sqr.png new file mode 100644 index 0000000000000000000000000000000000000000..15de9a7a26114df6d9137d5a1899595d2905a3bf GIT binary patch literal 12128 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 JSIC;Z`(H4MQDguB literal 0 HcmV?d00001 diff --git a/collects/plot/tests/trig.png b/collects/plot/tests/trig.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b219a544bcdf3cf5996c50097cae66c8c8ed8d GIT binary patch literal 70211 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�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 G4ETTJ0J$Up literal 0 HcmV?d00001 diff --git a/src/Makefile.in b/src/Makefile.in index 5ecbe1076a..a49b16a388 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -39,28 +39,20 @@ all: 3m: cd racket; $(MAKE) 3m $(MAKE) @MAKE_GRACKET@-3m - $(MAKE) @MAKE_FIT@-3m gracket-3m: cd gracket; $(MAKE) 3m -fit-3m: - cd fit; $(MAKE) 3m - no-3m: $(NOOP) cgc: cd racket; $(MAKE) cgc $(MAKE) @MAKE_GRACKET@-cgc - $(MAKE) @MAKE_FIT@-cgc gracket-cgc: cd gracket; $(MAKE) cgc -fit-cgc: - cd fit; $(MAKE) cgc - no-cgc: $(NOOP) @@ -73,8 +65,7 @@ both: SETUP_ARGS = -X "$(DESTDIR)$(collectsdir)" -N "raco setup" -l- setup $(PLT_SETUP_OPTIONS) $(PLT_ISO) @INSTALL_SETUP_FLAGS@ # Pass compile and link flags to `make install' for use by any -# collection-setup actions (currently in "plot") that compile -# and link C code: +# collection-setup actions that compile and link C code: CFLAGS = @CFLAGS@ @COMPFLAGS@ @PREFLAGS@ LDFLAGS = @LDFLAGS@ WITH_ENV_VARS = env CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" @@ -92,7 +83,6 @@ install-common-first: mkdir -p $(ALLDIRINFO) install-common-middle: - $(MAKE) install-@MAKE_FIT@ $(MAKE) @MAKE_COPYTREE@-run $(MAKE) install-@MAKE_GRACKET@-post-collects $(MAKE) lib-finish @@ -100,9 +90,6 @@ install-common-middle: install-common-last: $(MAKE) fix-paths -install-fit: - cd fit; $(MAKE) install - install-no: $(NOOP) diff --git a/src/configure b/src/configure index 19a0a811f6..64a8fefeaa 100755 --- a/src/configure +++ b/src/configure @@ -721,7 +721,6 @@ ICP MRLIBINSTALL LIBFINISH MAKE_GRACKET -MAKE_FIT MAKE_COPYTREE MAKE_FINISH WXPRECOMP @@ -1333,7 +1332,6 @@ Optional Features: --enable-foreign support foreign calls (enabled by default) --enable-places support places (3m only; usually enabled by default) --enable-futures support futures (usually enabled by default) - --enable-plot support plot libraries (enabled by default) --enable-float support single-precision floats (enabled by default) --enable-floatinstead use single-precision by default --enable-racket= use as Racket executable to build Racket @@ -1986,13 +1984,6 @@ if test "${enable_futures+set}" = set; then enableval=$enable_futures; fi -# Check whether --enable-plot was given. -if test "${enable_plot+set}" = set; then - enableval=$enable_plot; -else - enable_plot=yes -fi - # Check whether --enable-float was given. if test "${enable_float+set}" = set; then enableval=$enable_float; @@ -2314,7 +2305,6 @@ show_explicitly_enabled "${enable_xonx}" "Unix style" show_explicitly_enabled "${enable_shared}" "Shared libraries" show_explicitly_disabled "${enable_gracket}" GRacket -show_explicitly_disabled "${enable_plot}" Plot fit library if test "$LIBTOOLPROG" != "" ; then echo "=== Libtool program: $LIBTOOLPROG" @@ -8947,7 +8937,6 @@ LIBS="$LIBS $EXTRALIBS" - mk_needed_dir() @@ -9015,14 +9004,6 @@ fi makefiles="$makefiles foreign/Makefile" ac_configure_args="$ac_configure_args$SUB_CONFIGURE_EXTRAS" -if test -d "${srcdir}/fit" && test "${enable_plot}" = "yes" ; then - makefiles="$makefiles - fit/Makefile" - MAKE_FIT=fit -else - MAKE_FIT=no -fi - if test "${enable_gracket}" = "yes" ; then makefiles="$makefiles gracket/Makefile @@ -9794,7 +9775,6 @@ ICP!$ICP$ac_delim MRLIBINSTALL!$MRLIBINSTALL$ac_delim LIBFINISH!$LIBFINISH$ac_delim MAKE_GRACKET!$MAKE_GRACKET$ac_delim -MAKE_FIT!$MAKE_FIT$ac_delim MAKE_COPYTREE!$MAKE_COPYTREE$ac_delim MAKE_FINISH!$MAKE_FINISH$ac_delim WXPRECOMP!$WXPRECOMP$ac_delim @@ -9832,7 +9812,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 46; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 45; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/src/fit/Makefile.in b/src/fit/Makefile.in deleted file mode 100644 index 85cfbf0643..0000000000 --- a/src/fit/Makefile.in +++ /dev/null @@ -1,37 +0,0 @@ - -srcdir = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -libpltdir = @libpltdir@ -collectsdir = @collectsdir@ -builddir = @builddir@ - -ICP=@ICP@ - -CC = @CC@ - -# See ../Makefile about RUN_RACKET_, which -# typically redirects to RUN_THIS_RACKET_: -RUN_THIS_RACKET_CGC = ../racket/racket@CGC@ - -WITH_ENV = env CC="@PLAIN_CC@" CFLAGS="@CFLAGS@ @COMPFLAGS@ @PREFLAGS@" LDFLAGS="@LDFLAGS@" - -FIT_SRCS = $(srcdir)/fit.c $(srcdir)/matrix.c - -XCOLLECTS = # -X ../racket/gc2/xform-collects - -fit-lib: libfit@SO_SUFFIX@ - -3m: - $(MAKE) fit-lib -cgc: - $(MAKE) fit-lib - -libfit@SO_SUFFIX@: - $(WITH_ENV) @RUN_RACKET_CGC@ -c $(srcdir)/build.rkt "libfit" $(FIT_SRCS) - -install: - cd ..; $(ICP) fit/libfit@SO_SUFFIX@ "$(DESTDIR)$(libpltdir)/libfit@SO_SUFFIX@" - diff --git a/src/fit/build.bat b/src/fit/build.bat deleted file mode 100644 index 98186b03d0..0000000000 --- a/src/fit/build.bat +++ /dev/null @@ -1 +0,0 @@ -..\..\racket build.rkt libfit fit.c matrix.c diff --git a/src/fit/build.rkt b/src/fit/build.rkt deleted file mode 100644 index 8bd0b99bb4..0000000000 --- a/src/fit/build.rkt +++ /dev/null @@ -1,32 +0,0 @@ -(module build racket/base - (require racket/path - racket/file - dynext/file - dynext/link - dynext/compile) - - (define-values (libname c-files) - (let ([l (vector->list (current-command-line-arguments))]) - (values (car l) - (cdr l)))) - - (define sys-subpath (system-library-subpath #f)) - - (define so-name (append-extension-suffix libname)) - (parameterize (;; we compile a simple .so, not an extension - [current-standard-link-libraries '()]) - (when (or (not (file-exists? so-name)) - (let ([so-time (file-or-directory-modify-seconds so-name)]) - (for/or ([f c-files]) - ((file-or-directory-modify-seconds f) . > . so-time)))) - (let ([o-files - (for/list ([c-file c-files]) - (let ([o-file (append-object-suffix (path-replace-suffix (file-name-from-path c-file) #""))]) - ;; first #f means not quiet (here and in link-extension) - (compile-extension #f c-file o-file null) - o-file))]) - (let* ([flags (if (string=? "i386-cygwin" (path->string sys-subpath)) - ;; DLL needs every dependence explicit: - '("-lc" "-lm" "-lcygwin" "-lkernel32") - null)]) - (link-extension #f (append o-files flags) so-name)))))) diff --git a/src/fit/dllexport.h b/src/fit/dllexport.h deleted file mode 100644 index b0f4023d2b..0000000000 --- a/src/fit/dllexport.h +++ /dev/null @@ -1,6 +0,0 @@ - -#if (defined(__WIN32__) || defined(WIN32) || defined(_WIN32)) -# define MZ_DLLEXPORT __declspec(dllexport) -#else -# define MZ_DLLEXPORT -#endif diff --git a/src/fit/fit.c b/src/fit/fit.c deleted file mode 100644 index b6f819190d..0000000000 --- a/src/fit/fit.c +++ /dev/null @@ -1,752 +0,0 @@ -/* NOTICE: Change of Copyright Status - * - * The author of this module, Carsten Grammes, has expressed in - * personal email that he has no more interest in this code, and - * doesn't claim any copyright. He has agreed to put this module - * into the public domain. - * - * Lars Hecking 15-02-1999 - */ - -/* - * Nonlinear least squares fit according to the - * Marquardt-Levenberg-algorithm - * - * added as Patch to Gnuplot (v3.2 and higher) - * by Carsten Grammes - * Experimental Physics, University of Saarbruecken, Germany - * - * Internet address: cagr@rz.uni-sb.de - * - * Copyright of this module: 1993, 1998 Carsten Grammes - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * This software is provided "as is" without express or implied warranty. - * - * 930726: Recoding of the Unix-like raw console I/O routines by: - * Michele Marziani (marziani@ferrara.infn.it) - * drd: start unitialised variables at 1 rather than NEARLY_ZERO - * (fit is more likely to converge if started from 1 than 1e-30 ?) - * - * HBB (Broeker@physik.rwth-aachen.de) : fit didn't calculate the errors - * in the 'physically correct' (:-) way, if a third data column containing - * the errors (or 'uncertainties') of the input data was given. I think - * I've fixed that, but I'm not sure I really understood the M-L-algo well - * enough to get it right. I deduced my change from the final steps of the - * equivalent algorithm for the linear case, which is much easier to - * understand. (I also made some minor, mostly cosmetic changes) - * - * HBB (again): added error checking for negative covar[i][i] values and - * for too many parameters being specified. - * - * drd: allow 3d fitting. Data value is now called fit_z internally, - * ie a 2d fit is z vs x, and a 3d fit is z vs x and y. - * - * Lars Hecking : review update command, for VMS in particular, where - * it is not necessary to rename the old file. - * - * HBB, 971023: lifted fixed limit on number of datapoints, and number - * of parameters. - */ - - -#define FIT_MAIN - -#define NULL 0 - -//#include - - - -#include "matrix.h" -#include "fit.h" -#include -#include -#include - -/* #define STANDARD stderr */ - - -enum marq_res { - OK, ERROR, BETTER, WORSE -}; -typedef enum marq_res marq_res_t; - -#ifdef INFINITY -# undef INFINITY -#endif - -#define INFINITY 1e30 -#define NEARLY_ZERO 1e-30 - - -/* Relative change for derivatives */ -#define DELTA 0.001 - -#define MAX_DATA 2048 -#define MAX_PARAMS 32 -#define MAX_LAMBDA 1e20 -#define MIN_LAMBDA 1e-20 -#define LAMBDA_UP_FACTOR 10 -#define LAMBDA_DOWN_FACTOR 10 - -#define TBOOLEAN int - -# define PLUSMINUS "+/-" - - - -/* HBB 971023: new, allow for dynamic adjustment of these: */ -static UNUSED int max_data; -static UNUSED int max_params; - -static double epsilon = 1e-5; /* convergence limit */ -static int maxiter = 0; /* HBB 970304: maxiter patch */ - -static UNUSED char *FIXED = "# FIXED"; -static UNUSED char *GNUFITLOG = "FIT_LOG"; -static UNUSED char *FITLIMIT = "FIT_LIMIT"; -static UNUSED char *FITSTARTLAMBDA = "FIT_START_LAMBDA"; -static UNUSED char *FITLAMBDAFACTOR = "FIT_LAMBDA_FACTOR"; -static UNUSED char *FITMAXITER = "FIT_MAXITER"; /* HBB 970304: maxiter patch */ -static UNUSED char *FITSCRIPT = "FIT_SCRIPT"; -static UNUSED char *DEFAULT_CMD = "replot"; /* if no fitscript spec. */ - - -static int num_data, num_params; -static UNUSED int columns; -static double *fit_x; -static double *fit_y; -static double *fit_z ; -static double *err_data; -static double *a; - - -/* static fixstr * par_name; */ - -static double startup_lambda = 0; -static double lambda_down_factor = LAMBDA_DOWN_FACTOR; -static double lambda_up_factor = LAMBDA_UP_FACTOR; - - -static void * current_fun; - - -/***************************************************************** - internal vars to store results of fit -*****************************************************************/ - -double rms = 0; -double varience = 0; -double *asym_error; -double *asym_error_percent; - -MZ_DLLEXPORT -double get_rms() -{return rms;} - -MZ_DLLEXPORT -double get_varience() -{return varience;} - -MZ_DLLEXPORT -double * get_asym_error() -{return asym_error;} - -MZ_DLLEXPORT -double * get_asym_error_percent() -{return asym_error_percent;} - - -/***************************************************************** - internal Prototypes -*****************************************************************/ - -/*static void printmatrix __PROTO((double **C, int m, int n)); */ -static UNUSED void print_matrix_and_vectors (double **C, double *d, double *r, int m, int n); -static marq_res_t marquardt (double a[], double **alpha, double *chisq, - double *lambda); -static TBOOLEAN analyze (double a[], double **alpha, double beta[], - double *chisq); -static void calculate (double *zfunc, double **dzda, double a[]); -static void call_scheme (double *par, double *data); - -static TBOOLEAN regress (double a[]); -//static void show_fit (int i, double chisq, double last_chisq, double *a, -// double lambda, FILE * device); - - -/***************************************************************** - New utility routine: print a matrix (for debugging the alg.) -*****************************************************************/ -static UNUSED void printmatrix(C, m, n) -double **C; -int m, n; -{ - int i, j; - - for (i = 0; i < m; i++) { - for (j = 0; j < n - 1; j++); - /* Dblf2("%.8g |", C[i][j]); */ - /* Dblf2("%.8g\n", C[i][j]); */ - } - /* Dblf("\n"); */ -} - -/************************************************************************** - Yet another debugging aid: print matrix, with diff. and residue vector -**************************************************************************/ -static UNUSED void print_matrix_and_vectors(C, d, r, m, n) -double **C; -double *d, *r; -int m, n; -{ - int i, j; - - for (i = 0; i < m; i++) { - for (j = 0; j < n; j++); - /* Dblf2("%8g ", C[i][j]); */ - /* Dblf3("| %8g | %8g\n", d[i], r[i]); */ - } - /* Dblf("\n"); */ -} - - -/***************************************************************** - Marquardt's nonlinear least squares fit -*****************************************************************/ -static marq_res_t marquardt(a, C, chisq, lambda) -double a[]; -double **C; -double *chisq; -double *lambda; -{ - int i, j; - static double *da = 0, /* delta-step of the parameter */ - *temp_a = 0, /* temptative new params set */ - *d = 0, *tmp_d = 0, **tmp_C = 0, *residues = 0; - double tmp_chisq; - - /* Initialization when lambda == -1 */ - - if (*lambda == -1) { /* Get first chi-square check */ - TBOOLEAN analyze_ret; - - temp_a = vec(num_params); - d = vec(num_data + num_params); - tmp_d = vec(num_data + num_params); - da = vec(num_params); - residues = vec(num_data + num_params); - tmp_C = matr(num_data + num_params, num_params); - - analyze_ret = analyze(a, C, d, chisq); - - /* Calculate a useful startup value for lambda, as given by Schwarz */ - /* FIXME: this is doesn't turn out to be much better, really... */ - if (startup_lambda != 0) - *lambda = startup_lambda; - else { - *lambda = 0; - for (i = 0; i < num_data; i++) - for (j = 0; j < num_params; j++) - *lambda += C[i][j] * C[i][j]; - *lambda = sqrt(*lambda / num_data / num_params); - } - - /* Fill in the lower square part of C (the diagonal is filled in on - each iteration, see below) */ - for (i = 0; i < num_params; i++) - for (j = 0; j < i; j++) - C[num_data + i][j] = 0, C[num_data + j][i] = 0; - /* printmatrix(C, num_data+num_params, num_params); */ - return analyze_ret ? OK : ERROR; - } - /* once converged, free dynamic allocated vars */ - - if (*lambda == -2) { - return OK; - } - /* Givens calculates in-place, so make working copies of C and d */ - - for (j = 0; j < num_data + num_params; j++) - memcpy(tmp_C[j], C[j], num_params * sizeof(double)); - memcpy(tmp_d, d, num_data * sizeof(double)); - - /* fill in additional parts of tmp_C, tmp_d */ - - for (i = 0; i < num_params; i++) { - /* fill in low diag. of tmp_C ... */ - tmp_C[num_data + i][i] = *lambda; - /* ... and low part of tmp_d */ - tmp_d[num_data + i] = 0; - } - /* printmatrix(tmp_C, num_data+num_params, num_params); */ - - /* FIXME: residues[] isn't used at all. Why? Should it be used? */ - - Givens(tmp_C, tmp_d, da, residues, num_params + num_data, num_params, 1); - /*print_matrix_and_vectors (tmp_C, tmp_d, residues, - num_params+num_data, num_params); */ - - /* check if trial did ameliorate sum of squares */ - - for (j = 0; j < num_params; j++) - temp_a[j] = a[j] + da[j]; - - if (!analyze(temp_a, tmp_C, tmp_d, &tmp_chisq)) { - /* FIXME: will never be reached: always returns TRUE */ - return ERROR; - } - - if (tmp_chisq < *chisq) { /* Success, accept new solution */ - if (*lambda > MIN_LAMBDA) { - /* (void) putc('/', stderr); */ - *lambda /= lambda_down_factor; - } - *chisq = tmp_chisq; - for (j = 0; j < num_data; j++) { - memcpy(C[j], tmp_C[j], num_params * sizeof(double)); - d[j] = tmp_d[j]; - } - for (j = 0; j < num_params; j++) - a[j] = temp_a[j]; - return BETTER; - } else { /* failure, increase lambda and return */ - /* (void) putc('*', stderr); */ - *lambda *= lambda_up_factor; - return WORSE; - } -} - - -/* FIXME: in the new code, this function doesn't really do enough to be - * useful. Maybe it ought to be deleted, i.e. integrated with - * calculate() ? - */ -/***************************************************************** - compute chi-square and numeric derivations -*****************************************************************/ -static TBOOLEAN analyze(a, C, d, chisq) -double a[]; -double **C; -double d[]; -double *chisq; -{ -/* - * used by marquardt to evaluate the linearized fitting matrix C - * and vector d, fills in only the top part of C and d - * I don't use a temporary array zfunc[] any more. Just use - * d[] instead. - */ - int i, j; - - *chisq = 0; - calculate(d, C, a); - - for (i = 0; i < num_data; i++) { - /* note: order reversed, as used by Schwarz */ - d[i] = (d[i] - fit_z[i]) / err_data[i]; - *chisq += d[i] * d[i]; - for (j = 0; j < num_params; j++) - C[i][j] /= err_data[i]; - } - /* FIXME: why return a value that is always TRUE ? */ - return 1; -} - - -/* To use the more exact, but slower two-side formula, activate the - following line: */ - -#define TWO_SIDE_DIFFERENTIATION - -/***************************************************************** - compute function values and partial derivatives of chi-square -*****************************************************************/ -static void calculate(zfunc, dzda, a) -double *zfunc; -double **dzda; -double a[]; -{ - int k, p; - double tmp_a; - double *tmp_high, *tmp_pars; -#ifdef TWO_SIDE_DIFFERENTIATION - double *tmp_low; -#endif - - tmp_high = vec(num_data); /* numeric derivations */ -#ifdef TWO_SIDE_DIFFERENTIATION - tmp_low = vec(num_data); -#endif - tmp_pars = vec(num_params); - - /* first function values */ - - call_scheme(a, zfunc); - - /* then derivatives */ - - for (p = 0; p < num_params; p++) - tmp_pars[p] = a[p]; - for (p = 0; p < num_params; p++) { - tmp_a = fabs(a[p]) < NEARLY_ZERO ? NEARLY_ZERO : a[p]; - tmp_pars[p] = tmp_a * (1 + DELTA); - call_scheme(tmp_pars, tmp_high); -#ifdef TWO_SIDE_DIFFERENTIATION - tmp_pars[p] = tmp_a * (1 - DELTA); - call_scheme(tmp_pars, tmp_low); -#endif - for (k = 0; k < num_data; k++) -#ifdef TWO_SIDE_DIFFERENTIATION - dzda[k][p] = (tmp_high[k] - tmp_low[k]) / (2 * tmp_a * DELTA); -#else - dzda[k][p] = (tmp_high[k] - zfunc[k]) / (tmp_a * DELTA); -#endif - tmp_pars[p] = a[p]; - } - -} - - -/***************************************************************** - evaluate the scheme function -*****************************************************************/ -static void call_scheme(par, data) -double *par; -double *data; -{ - int rators = 2 + num_params; - double * rands = - (double *) malloc(rators * sizeof(double)); - - int i; - - /* set up the constant params */ - for(i = 0 ; i< num_params; i++) { - rands[i+2] = par[i]; - } - - /* now calculate the function at the existing points */ - for (i = 0; i < num_data; i++) { - rands[0] = fit_x[i]; - rands[1] = fit_y[i]; - - data[i] = ((double (*) (int, double *) )current_fun) // ouch! - (rators, rands); - } - - free(rands); - -} - -/* /\***************************************************************** */ -/* evaluate the scheme function */ -/* *****************************************************************\/ */ -/* static void call_scheme(par, data) */ -/* double *par; */ -/* double *data; */ -/* { */ -/* int rators = 2 + num_params; */ -/* Scheme_Object ** rands = */ -/* scheme_malloc(rators * sizeof(Scheme_Object)); */ - -/* int i; */ - -/* /\* set up the constant params *\/ */ -/* for(i = 0 ; i< num_params; i++) { */ -/* rands[i+2] = scheme_make_double(par[i]); */ -/* } */ - -/* /\* now calculate the function at the existing points *\/ */ -/* for (i = 0; i < num_data; i++) { */ -/* rands[0] = scheme_make_double(fit_x[i]); */ -/* rands[1] = scheme_make_double(fit_y[i]); */ - -/* data[i] = scheme_real_to_double(scheme_apply(current_fun, rators, rands)); */ -/* } */ -/* } */ - -/***************************************************************** - Frame routine for the marquardt-fit -*****************************************************************/ -static TBOOLEAN regress(a) - double a[]; -{ - double **covar, *dpar, **C, chisq, last_chisq, lambda; - int iter, i, j; - marq_res_t res; - - chisq = last_chisq = INFINITY; - C = matr(num_data + num_params, num_params); - lambda = -1; /* use sign as flag */ - iter = 0; /* iteration counter */ - - /* Initialize internal variables and 1st chi-square check */ - - if ((res = marquardt(a, C, &chisq, &lambda)) == ERROR) - return 0; /* an error occurded */ - - res = BETTER; - - /* show_fit(iter, chisq, chisq, a, lambda, STANDARD); */ - - /* MAIN FIT LOOP: do the regression iteration */ - - do { - if (res == BETTER) { - iter++; - last_chisq = chisq; - } - if ((res = marquardt(a, C, &chisq, &lambda)) == BETTER) - {}; - /* show_fit(iter, chisq, last_chisq, a, lambda, STANDARD); */ - } while ((res != ERROR) - && (lambda < MAX_LAMBDA) - && ((maxiter == 0) || (iter <= maxiter)) - && (res == WORSE - || ((chisq > NEARLY_ZERO) - ? ((last_chisq - chisq) / chisq) - : (last_chisq - chisq)) > epsilon - ) - ); - - /* fit done */ - - /* save all the info that was otherwise printed out */ - - rms = sqrt(chisq / (num_data - num_params)); - varience = chisq / (num_data - num_params); - asym_error = malloc (num_params * sizeof (double)); - asym_error_percent = malloc (num_params * sizeof (double)) ; - - /* don't know what the following code does... */ - - /* compute covar[][] directly from C */ - Givens(C, 0, 0, 0, num_data, num_params, 0); - covar = C + num_data; - Invert_RtR(C, covar, num_params); - - dpar = vec(num_params); - for (i = 0; i < num_params; i++) { - /* FIXME: can this still happen ? */ - if (covar[i][i] <= 0.0) /* HBB: prevent floating point exception later on */ - return 0; /* Eex("Calculation error: non-positive diagonal element in covar. matrix"); */ - dpar[i] = sqrt(covar[i][i]); - } - - /* transform covariances into correlations */ - for (i = 0; i < num_params; i++) { - /* only lower triangle needs to be handled */ - for (j = 0; j <= i; j++) - covar[i][j] /= dpar[i] * dpar[j]; - } - - /* scale parameter errors based on chisq */ - chisq = sqrt(chisq / (num_data - num_params)); - for (i = 0; i < num_params; i++) - dpar[i] *= chisq; - - for(i = 0; i< num_params; i++) - { - double temp = - (fabs(a[i]) < NEARLY_ZERO) ? 0.0 : fabs(100.0 * dpar[i] / a[i]); - asym_error[i] = dpar[i]; - asym_error_percent[i] = temp; - } - - return 1; - - - /******** CRAP LEFT OVER FROM GNUPLOT ***********/ - - /* HBB 970304: the maxiter patch: */ - /* - if ((maxiter > 0) && (iter > maxiter)) { - Dblf2("\nMaximum iteration count (%d) reached. Fit stopped.\n", maxiter); - } else { - Dblf2("\nAfter %d iterations the fit converged.\n", iter); - } - - Dblf2("final sum of squares of residuals : %g\n", chisq); - if (chisq > NEARLY_ZERO) { - Dblf2("rel. change during last iteration : %g\n\n", (chisq - last_chisq) / chisq); - } else { - Dblf2("abs. change during last iteration : %g\n\n", (chisq - last_chisq)); - } - - if (res == ERROR) - // Eex("FIT: error occurred during fit"); - */ - /* compute errors in the parameters */ - - /* if (num_data == num_params) { */ -/* int i; */ - -/* Dblf("\nExactly as many data points as there are parameters.\n"); */ -/* Dblf("In this degenerate case, all errors are zero by definition.\n\n"); */ -/* Dblf("Final set of parameters \n"); */ -/* Dblf("======================= \n\n"); */ -/* for (i = 0; i < num_params; i++) */ -/* Dblf3("%-15.15s = %-15g\n", par_name[i], a[i]); */ -/* } else if (chisq < NEARLY_ZERO) { */ -/* int i; */ - -/* Dblf("\nHmmmm.... Sum of squared residuals is zero. Can't compute errors.\n\n"); */ -/* Dblf("Final set of parameters \n"); */ -/* Dblf("======================= \n\n"); */ -/* for (i = 0; i < num_params; i++) */ -/* Dblf3("%-15.15s = %-15g\n", par_name[i], a[i]); */ -/* } else { */ -/* Dblf2("degrees of freedom (ndf) : %d\n", num_data - num_params); */ -/* Dblf2("rms of residuals (stdfit) = sqrt(WSSR/ndf) : %g\n", sqrt(chisq / (num_data - num_params))); */ -/* Dblf2("variance of residuals (reduced chisquare) = WSSR/ndf : %g\n\n", chisq / (num_data - num_params)); */ - -/* /\* get covariance-, Korrelations- and Kurvature-Matrix *\/ */ -/* /\* and errors in the parameters *\/ */ - -/* /\* compute covar[][] directly from C *\/ */ -/* Givens(C, 0, 0, 0, num_data, num_params, 0); */ -/* /\*printmatrix(C, num_params, num_params); *\/ */ - -/* /\* Use lower square of C for covar *\/ */ -/* covar = C + num_data; */ -/* Invert_RtR(C, covar, num_params); */ -/* /\*printmatrix(covar, num_params, num_params); *\/ */ - -/* /\* calculate unscaled parameter errors in dpar[]: *\/ */ -/* dpar = vec(num_params); */ -/* for (i = 0; i < num_params; i++) { */ -/* /\* FIXME: can this still happen ? *\/ */ -/* if (covar[i][i] <= 0.0) /\* HBB: prevent floating point exception later on *\/ */ -/* Eex("Calculation error: non-positive diagonal element in covar. matrix"); */ -/* dpar[i] = sqrt(covar[i][i]); */ -/* } */ - -/* /\* transform covariances into correlations *\/ */ -/* for (i = 0; i < num_params; i++) { */ -/* /\* only lower triangle needs to be handled *\/ */ -/* for (j = 0; j <= i; j++) */ -/* covar[i][j] /= dpar[i] * dpar[j]; */ -/* } */ - -/* /\* scale parameter errors based on chisq *\/ */ -/* chisq = sqrt(chisq / (num_data - num_params)); */ -/* for (i = 0; i < num_params; i++) */ -/* dpar[i] *= chisq; */ - -/* Dblf("Final set of parameters Asymptotic Standard Error\n"); */ -/* Dblf("======================= ==========================\n\n"); */ - -/* for (i = 0; i < num_params; i++) { */ -/* double temp = */ -/* (fabs(a[i]) < NEARLY_ZERO) ? 0.0 : fabs(100.0 * dpar[i] / a[i]); */ -/* Dblf6("%-15.15s = %-15g %-3.3s %-12.4g (%.4g%%)\n", */ -/* par_name[i], a[i], PLUSMINUS, dpar[i], temp); */ -/* } */ - -/* Dblf("\n\ncorrelation matrix of the fit parameters:\n\n"); */ -/* Dblf(" "); */ - -/* for (j = 0; j < num_params; j++) */ -/* Dblf2("%-6.6s ", par_name[j]); */ - -/* Dblf("\n"); */ -/* for (i = 0; i < num_params; i++) { */ -/* Dblf2("%-15.15s", par_name[i]); */ -/* for (j = 0; j <= i; j++) { */ -/* /\* Only print lower triangle of symmetric matrix *\/ */ -/* Dblf2("%6.3f ", covar[i][j]); */ -/* } */ -/* Dblf("\n"); */ -/* } */ - -/* free(dpar); */ -/* } */ - - return 1; -} - - -/***************************************************************** - display actual state of the fit -*****************************************************************/ -/* static void show_fit(i, chisq, last_chisq, a, lambda, device) */ -/* int i; */ -/* double chisq; */ -/* double last_chisq; */ -/* double *a; */ -/* double lambda; */ -/* FILE *device; */ -//{ - /* - int k; - - fprintf(device, "\n\n\ -Iteration %d\n\ -WSSR : %-15g delta(WSSR)/WSSR : %g\n\ -delta(WSSR) : %-15g limit for stopping : %g\n\ -lambda : %g\n\n%s parameter values\n\n", - i, chisq, chisq > NEARLY_ZERO ? (chisq - last_chisq) / chisq : 0.0, - chisq - last_chisq, epsilon, lambda, - (i > 0 ? "resultant" : "initial set of free")); - for (k = 0; k < num_params; k++) - fprintf(device, "%-15.15s = %g\n", par_name[k], a[k]); - */ -//} - - - - - - -/***************************************************************** - Interface to scheme -*****************************************************************/ -MZ_DLLEXPORT -double * do_fit(void * function, - int n_values, - double * x_values, - double * y_values, - double * z_values, - double * errors, - int n_parameters, - double * parameters) { - - /* reset lambda and other parameters if desired */ - int i; - current_fun = function; - - num_data = n_values; - fit_x = x_values; - fit_y = y_values; - fit_z = z_values; /* value is stored in z */ - err_data = errors; - - a = parameters; - num_params = n_parameters; - - /* redim_vec(&a, num_params); */ - /* par_name = (fixstr *) gp_realloc(par_name, (num_params + 1) * sizeof(fixstr), "fit param"); */ - - /* avoid parameters being equal to zero */ - for (i = 0; i < num_params; i++) { - if (a[i] == 0) { - a[i] = NEARLY_ZERO; - } - } - - if(regress(a)) { - gc_cleanup(); - return a; - } - else { /* something went wrong */ - gc_cleanup(); - return NULL; - } -} diff --git a/src/fit/fit.h b/src/fit/fit.h deleted file mode 100644 index 2bdf72c2ee..0000000000 --- a/src/fit/fit.h +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id: fit.h,v 1.5 2005/03/15 23:19:40 eli Exp $ */ - -/* GNUPLOT - fit.h */ - -/* NOTICE: Change of Copyright Status - * - * The author of this module, Carsten Grammes, has expressed in - * personal email that he has no more interest in this code, and - * doesn't claim any copyright. He has agreed to put this module - * into the public domain. - * - * Lars Hecking 15-02-1999 - */ - -/* - * Header file: public functions in fit.c - * - * - * Copyright of this module: Carsten Grammes, 1993 - * Experimental Physics, University of Saarbruecken, Germany - * - * Internet address: cagr@rz.uni-sb.de - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * This software is provided "as is" without express or implied warranty. - */ - -#include "dllexport.h" - -#ifdef __GNUC__ -# define UNUSED __attribute__((unused)) -#else -# define UNUSED -#endif - -MZ_DLLEXPORT -double * do_fit(void * function, - int n_values, - double * x_values, - double * y_values, - double * z_values, - double * errors, - int n_parameters, - double * parameters); - - -MZ_DLLEXPORT -double get_rms(); - -MZ_DLLEXPORT -double get_varience(); - -MZ_DLLEXPORT -double * get_asym_error(); - -MZ_DLLEXPORT -double * get_asym_error_percent(); diff --git a/src/fit/matrix.c b/src/fit/matrix.c deleted file mode 100644 index 76015775db..0000000000 --- a/src/fit/matrix.c +++ /dev/null @@ -1,315 +0,0 @@ -/* NOTICE: Change of Copyright Status - * - * The author of this module, Carsten Grammes, has expressed in - * personal email that he has no more interest in this code, and - * doesn't claim any copyright. He has agreed to put this module - * into the public domain. - * - * Lars Hecking 15-02-1999 - */ - -/* - * Matrix algebra, part of - * - * Nonlinear least squares fit according to the - * Marquardt-Levenberg-algorithm - * - * added as Patch to Gnuplot (v3.2 and higher) - * by Carsten Grammes - * Experimental Physics, University of Saarbruecken, Germany - * - * Internet address: cagr@rz.uni-sb.de - * - * Copyright of this module: Carsten Grammes, 1993 - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * This software is provided "as is" without express or implied warranty. - */ - -#define NULL 0 -#define null 0 - -#include "fit.h" -#include "matrix.h" -#include -#include - -// create a simple gc malloc... -typedef struct Node { - struct Node * next; - void * ptr; -} Node; - -Node * head = null; - -void * my_gc_malloc(int size) { - void * ptr = malloc(size); - Node * n = (Node *)malloc(sizeof (Node)); - n->ptr = ptr; - n->next = head; - head = n; - return ptr; -} - -void gc_cleanup(){ - while(head) { - Node * current = head; - head = current->next; - free(current->ptr); - free(current); - } -} - - - -/*****************************************************************/ - -#define Swap(a,b) {double temp = (a); (a) = (b); (b) = temp;} -#define WINZIG 1e-30 - - -/***************************************************************** - internal prototypes -*****************************************************************/ - -static int fsign (double x); - -/***************************************************************** - first straightforward vector and matrix allocation functions -*****************************************************************/ -MZ_DLLEXPORT -double *vec (n) -int n; -{ - /* allocates a double vector with n elements */ - double *dp; - if( n < 1 ) - return (double *) NULL; - dp = (double *) my_gc_malloc (n * sizeof(double)); - return dp; -} - - -MZ_DLLEXPORT -double **matr (rows, cols) -int rows; -int cols; -{ - /* allocates a double matrix */ - - register int i; - register double **m; - - if ( rows < 1 || cols < 1 ) - return NULL; - m = (double **) my_gc_malloc (rows * sizeof(double *)); - m[0] = (double *) my_gc_malloc (rows * cols * sizeof(double)); - for ( i = 1; i0 ? 1 : (x < 0) ? -1 : 0) ; -} - -/***************************************************************** - - Solve least squares Problem C*x+d = r, |r| = min!, by Given rotations - (QR-decomposition). Direct implementation of the algorithm - presented in H.R.Schwarz: Numerische Mathematik, 'equation' - number (7.33) - - If 'd == NULL', d is not accesed: the routine just computes the QR - decomposition of C and exits. - - If 'want_r == 0', r is not rotated back (\hat{r} is returned - instead). - -*****************************************************************/ - -MZ_DLLEXPORT -void Givens (C, d, x, r, N, n, want_r) -double **C; -double *d; -double *x; -double *r; -int N; -int n; -int want_r; -{ - int i, j, k; - double w, gamma, sigma, rho, temp; - double epsilon = 1e-5; /* FIXME (?)*/ - -/* - * First, construct QR decomposition of C, by 'rotating away' - * all elements of C below the diagonal. The rotations are - * stored in place as Givens coefficients rho. - * Vector d is also rotated in this same turn, if it exists - */ - for (j = 0; j= 0; i--) { /* solve R*x+d = 0, by backsubstitution */ - double s = d[i]; - r[i] = 0; /* ... and also set r[i] = 0 for i= 0; j--) - for (i = N-1; i >= 0; i--) { - if ((rho = C[i][j]) == 1) { /* reconstruct gamma, sigma from stored rho */ - gamma = 0; - sigma = 1; - } else if (fabs(rho)<1) { - sigma = rho; - gamma = sqrt(1-sigma*sigma); - } else { - gamma = 1/fabs(rho); - sigma = fsign(rho)*sqrt(1-gamma*gamma); - } - temp = gamma*r[j] + sigma*r[i]; /* rotate back indices (i,j) */ - r[i] = -sigma*r[j] + gamma*r[i]; - r[j] = temp; - } -} - - -/* Given a triangular Matrix R, compute (R^T * R)^(-1), by forward - * then back substitution - * - * R, I are n x n Matrices, I is for the result. Both must already be - * allocated. - * - * Will only calculate the lower triangle of I, as it is symmetric - */ - -MZ_DLLEXPORT -void Invert_RtR ( R, I, n) -double **R; -double **I; -int n; -{ - int i, j, k; - - /* fill in the I matrix, and check R for regularity : */ - - for (i = 0; i= k; i--) { /* don't compute upper triangle of A */ - double s = I[i][k]; - for (j = i+1; j Date: Wed, 21 Dec 2011 16:43:01 -0700 Subject: [PATCH 09/18] src/README corrections (of out-of-date information) --- src/README | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/README b/src/README index d6bf7c5d86..a06fdeddef 100644 --- a/src/README +++ b/src/README @@ -101,14 +101,14 @@ Detailed instructions: remove it (unless you are using an "in-place" build from a repository as described below). - Also, make sure that you have libraries and header files for - Cairo, Pango, and GTk. These libraries are not distributed with - Racket. The configure process checks automatically whether these - libraries are available. + To run `racket/draw' and `racket/gui' programs, you will need + Cairo, Pango, and GTk install. These libraries are not + distributed with Racket, and they are not needed for compilation, + except for building documentation that uses `racket/draw'. - Finally, the content of the "foreign" subdirectory may require GNU - `make'. If the build fails with another variant of `make', please - try using GNU `make'. + The content of the "foreign" subdirectory may require GNU `make' + if no installed "libffi" is detected. If the build fails with + another variant of `make', please try using GNU `make'. 1. Select (or create) a build directory. @@ -175,13 +175,6 @@ Detailed instructions: which includes C compilation, and the Racket build normally uses the C pre-processor directly for some parts of the build. - For cross compilation, set the compiler variables to a compiler for - the target platform compiler, but also set CC_FOR_BUILD to a - compiler for the host platform (for building binaries to execute - during the build process). If the target machine's stack grows up, - you'll have to supply `--enable-stackup'; if the target machine is - big-endian, you may have to supply `--enable-bigendian'. - If you re-run `configure' after running `make', then products of the `make' may be incorrect due to changes in the compiler command line. To be safe, run `make clean' each time after running `configure'. @@ -221,9 +214,10 @@ Detailed instructions: location originally specified with `--prefix'. Finally, the `make install' step compiles ".zo" bytecode files for - installed Racket source, and generates launcher programs like - DrRacket. Use `make plain-install' to install without compiling - ".zo" files or creating launchers. + installed Racket source, generates launcher programs like + DrRacket, and builds documentation. Use `make plain-install' to + install without compiling ".zo" files, creating launchers, or + building documentation. If the installation fails because the target directory cannot be created, or because the target directory is not the one you want, @@ -265,6 +259,12 @@ Cross-compilation requires at least two flags to `configure': The `--enable-racket' flag is needed because building and installing Racket requires running (an intermediate version of) Racket. +You may also need to set CC_FOR_BUILD to a compiler for the host +platform (for building binaries to execute during the build process). +If the target machine's stack grows up, you may have to supply +`--enable-stackup'; if the target machine is big-endian, you may have +to supply `--enable-bigendian'. + ======================================================================== CGC versus 3m ======================================================================== @@ -329,12 +329,12 @@ At a mininum, to port Racket to a new platform, edit "racket/sconfig.h" to provide a platform-specific compilation information. As distributed, "racket/sconfig.h" contains configurations for the following platforms: - Windows (x86) + Windows (x86, x86_64) Mac OS X (PPC, x86, x86_64) Linux (x86, x86_64, PPC, 68k) Cygwin (x86) Solaris (x86, Sparc) - FreeBSD (x86) + FreeBSD (x86, x86_64) OpenBSD (x86) NetBSD (x86) @@ -357,9 +357,8 @@ finalization is handled. Configuration Options --------------------- -By default, Racket is compiled without support for single-precision -floating point numbers. This and other options can be modified by -setting flags in "racket/sconfig.h". +Athough `configure' flags control most options, some configrations +options can be modified by setting flags in "racket/sconfig.h". Modifying Racket ---------------- From 5bfaea25febcc8d50a75861c692aecfc3cb49876 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 23 Dec 2011 07:25:59 -0600 Subject: [PATCH 10/18] fix `draw-polygon' on pairs instead of `point%'s Closes PR 12455 --- collects/racket/draw/private/record-dc.rkt | 4 +++- collects/tests/gracket/draw.rkt | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/collects/racket/draw/private/record-dc.rkt b/collects/racket/draw/private/record-dc.rkt index dc6931e7f7..3acaee6ee7 100644 --- a/collects/racket/draw/private/record-dc.rkt +++ b/collects/racket/draw/private/record-dc.rkt @@ -24,7 +24,9 @@ (define black (send the-color-database find-color "black")) (define (clone-point p) - (make-object point% (point-x p) (point-y p))) + (if (pair? p) + p + (make-object point% (point-x p) (point-y p)))) (define (clone-color c) (if (string? c) diff --git a/collects/tests/gracket/draw.rkt b/collects/tests/gracket/draw.rkt index 483d59507f..6eb613e302 100644 --- a/collects/tests/gracket/draw.rkt +++ b/collects/tests/gracket/draw.rkt @@ -65,11 +65,12 @@ (send f show #t))) (define star - (list (make-object point% 30 0) - (make-object point% 48 60) - (make-object point% 0 20) - (make-object point% 60 20) - (make-object point% 12 60))) + ;; uses pairs instead of point%s + (list (cons 30 0) + (cons 48 60) + (cons 0 20) + (cons 60 20) + (cons 12 60))) (define octagon (list (make-object point% 60 60) From 188f868a28c9d5d6bf766fcab186904fac2d534d Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Fri, 23 Dec 2011 16:07:56 -0600 Subject: [PATCH 11/18] Remove the position-location cache that check syntax used to maintain for the purpose of drawing arrows. The computation to fill in the cache seems to actually be pretty quick and the work to clear the cache when it is out of date (via a call to on-change) can be substantial on big files, so just not maintaining the cache seems better. (there are 7254 arrows in drracket/private/unit.rkt, stored in an interval map, and iterating over the interval-map in a for loop seems to be time consuming) Also, DrRacket could get into a state where switching tabs would trigger a call to on-change, which means that switching tabs would take a few seconds. --- collects/drracket/private/syncheck/gui.rkt | 98 ++++++++-------------- 1 file changed, 35 insertions(+), 63 deletions(-) diff --git a/collects/drracket/private/syncheck/gui.rkt b/collects/drracket/private/syncheck/gui.rkt index e917af2d19..9e239c6e83 100644 --- a/collects/drracket/private/syncheck/gui.rkt +++ b/collects/drracket/private/syncheck/gui.rkt @@ -204,7 +204,7 @@ If the namespace does not, they are colored the unbound color. (define-struct graphic (pos* locs->thunks draw-fn click-fn)) - (define-struct arrow (start-x start-y end-x end-y) #:mutable #:transparent) + (define-struct arrow () #:mutable #:transparent) (define-struct (var-arrow arrow) (start-text start-pos-left start-pos-right end-text end-pos-left end-pos-right @@ -420,12 +420,12 @@ If the namespace does not, they are colored the unbound color. xr yr)))) - (define/private (update-arrow-poss arrow) + (define/private (get-arrow-poss arrow) (cond - [(var-arrow? arrow) (update-var-arrow-poss arrow)] - [(tail-arrow? arrow) (update-tail-arrow-poss arrow)])) + [(var-arrow? arrow) (get-var-arrow-poss arrow)] + [(tail-arrow? arrow) (get-tail-arrow-poss arrow)])) - (define/private (update-var-arrow-poss arrow) + (define/private (get-var-arrow-poss arrow) (let-values ([(start-x start-y) (find-poss (var-arrow-start-text arrow) (var-arrow-start-pos-left arrow) @@ -434,12 +434,9 @@ If the namespace does not, they are colored the unbound color. (var-arrow-end-text arrow) (var-arrow-end-pos-left arrow) (var-arrow-end-pos-right arrow))]) - (set-arrow-start-x! arrow start-x) - (set-arrow-start-y! arrow start-y) - (set-arrow-end-x! arrow end-x) - (set-arrow-end-y! arrow end-y))) + (values start-x start-y end-x end-y))) - (define/private (update-tail-arrow-poss arrow) + (define/private (get-tail-arrow-poss arrow) ;; If the item is an embedded editor snip, redirect ;; the arrow to point at the left edge rather than the ;; midpoint. @@ -458,24 +455,22 @@ If the namespace does not, they are colored the unbound color. [(end-x end-y) (find-poss/embedded (tail-arrow-to-text arrow) (tail-arrow-to-pos arrow))]) - (set-arrow-start-x! arrow start-x) - (set-arrow-start-y! arrow start-y) - (set-arrow-end-x! arrow end-x) - (set-arrow-end-y! arrow end-y))) - + (values start-x start-y end-x end-y))) + + (define xlb (box 0)) + (define ylb (box 0)) + (define xrb (box 0)) + (define yrb (box 0)) + (define/private (find-poss text left-pos right-pos) - (let ([xlb (box 0)] - [ylb (box 0)] - [xrb (box 0)] - [yrb (box 0)]) - (send text position-location left-pos xlb ylb #t) - (send text position-location right-pos xrb yrb #f) - (let*-values ([(xl-off yl-off) (send text editor-location-to-dc-location (unbox xlb) (unbox ylb))] - [(xl yl) (dc-location-to-editor-location xl-off yl-off)] - [(xr-off yr-off) (send text editor-location-to-dc-location (unbox xrb) (unbox yrb))] - [(xr yr) (dc-location-to-editor-location xr-off yr-off)]) - (values (/ (+ xl xr) 2) - (/ (+ yl yr) 2))))) + (send text position-location left-pos xlb ylb #t) + (send text position-location right-pos xrb yrb #f) + (let*-values ([(xl-off yl-off) (send text editor-location-to-dc-location (unbox xlb) (unbox ylb))] + [(xl yl) (dc-location-to-editor-location xl-off yl-off)] + [(xr-off yr-off) (send text editor-location-to-dc-location (unbox xrb) (unbox yrb))] + [(xr yr) (dc-location-to-editor-location xr-off yr-off)]) + (values (/ (+ xl xr) 2) + (/ (+ yl yr) 2)))) ;; syncheck:init-arrows : -> void (define/public (syncheck:init-arrows) @@ -701,8 +696,7 @@ If the namespace does not, they are colored the unbound color. (when (add-to-bindings-table start-text start-pos-left start-pos-right end-text end-pos-left end-pos-right) - (let ([arrow (make-var-arrow #f #f #f #f - start-text start-pos-left start-pos-right + (let ([arrow (make-var-arrow start-text start-pos-left start-pos-right end-text end-pos-left end-pos-right actual? level)]) (add-to-range/key start-text start-pos-left start-pos-right arrow #f #f) @@ -711,7 +705,7 @@ If the namespace does not, they are colored the unbound color. ;; syncheck:add-tail-arrow : text number text number -> void (define/public (syncheck:add-tail-arrow from-text from-pos to-text to-pos) (when arrow-records - (let ([tail-arrow (make-tail-arrow #f #f #f #f to-text to-pos from-text from-pos)]) + (let ([tail-arrow (make-tail-arrow to-text to-pos from-text from-pos)]) (add-to-range/key from-text from-pos (+ from-pos 1) tail-arrow #f #f) (add-to-range/key to-text to-pos (+ to-pos 1) tail-arrow #f #f)))) @@ -761,7 +755,6 @@ If the namespace does not, they are colored the unbound color. (define/augment (on-change) (inner (void) on-change) (when arrow-records - (flush-arrow-coordinates-cache) (let ([any-tacked? #f]) (when tacked-hash-table (let/ec k @@ -773,18 +766,6 @@ If the namespace does not, they are colored the unbound color. (when any-tacked? (invalidate-bitmap-cache))))) - ;; flush-arrow-coordinates-cache : -> void - ;; pre-condition: arrow-records is not #f. - (define/private (flush-arrow-coordinates-cache) - (for ([(text arrow-record) (in-hash arrow-records)]) - (for ([(start+end eles) (in-dict arrow-record)]) - (for ([ele (in-list eles)]) - (when (arrow? ele) - (set-arrow-start-x! ele #f) - (set-arrow-start-y! ele #f) - (set-arrow-end-x! ele #f) - (set-arrow-end-y! ele #f)))))) - (define view-corner-hash (make-weak-hasheq)) (define (get-last-view-corner admin) @@ -835,21 +816,17 @@ If the namespace does not, they are colored the unbound color. (start-arrow-draw-timer syncheck-arrow-delay))) (let ([draw-arrow2 (λ (arrow) - (unless (arrow-start-x arrow) - (update-arrow-poss arrow)) - (let ([start-x (arrow-start-x arrow)] - [start-y (arrow-start-y arrow)] - [end-x (arrow-end-x arrow)] - [end-y (arrow-end-y arrow)]) - (unless (and (= start-x end-x) - (= start-y end-y)) - (drracket:arrow:draw-arrow dc start-x start-y end-x end-y dx dy - #:pen-width 2) - (when (and (var-arrow? arrow) (not (var-arrow-actual? arrow))) - (let-values ([(fw fh _d _v) (send dc get-text-extent "x")]) - (send dc draw-text "?" - (+ end-x dx fw) - (+ end-y dy (- fh))))))))] + (define-values (start-x start-y end-x end-y) + (get-arrow-poss arrow)) + (unless (and (= start-x end-x) + (= start-y end-y)) + (drracket:arrow:draw-arrow dc start-x start-y end-x end-y dx dy + #:pen-width 2) + (when (and (var-arrow? arrow) (not (var-arrow-actual? arrow))) + (let-values ([(fw fh _d _v) (send dc get-text-extent "x")]) + (send dc draw-text "?" + (+ end-x dx fw) + (+ end-y dy (- fh)))))))] [old-brush (send dc get-brush)] [old-pen (send dc get-pen)] [old-font (send dc get-font)] @@ -1014,11 +991,6 @@ If the namespace does not, they are colored the unbound color. (update-tooltip-frame) (update-docs-background cursor-eles) - (when cursor-eles - (for ([ele (in-list cursor-eles)]) - (when (arrow? ele) - (update-arrow-poss ele)))) - (invalidate-bitmap-cache)) (define popup-menu #f) From 9bef0204bb814f779950b2655536451c70171ed6 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Sun, 25 Dec 2011 13:37:02 -0600 Subject: [PATCH 12/18] fix the "Show Line Numbers" menu item so its label changes when the preference changes closes PR 12459 --- collects/drracket/private/unit.rkt | 32 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index fd6b6a8997..1d3cfe0d00 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -1388,12 +1388,19 @@ module browser threading seems wrong. ;; so it stays alive as long ;; as the frame stays alive (define show-line-numbers-pref-fn - (let ([fn (lambda (pref value) (show-line-numbers! value))]) + (let ([fn (lambda (pref value) + (when show-line-numbers-menu-item + (send show-line-numbers-menu-item set-label + (if value + (string-constant hide-line-numbers/menu) + (string-constant show-line-numbers/menu)))) + (show-line-numbers! value))]) (preferences:add-callback 'drracket:show-line-numbers? fn #t) fn)) + (define show-line-numbers-menu-item #f) (define/override (add-line-number-menu-items menu) (define on? (preferences:get 'drracket:show-line-numbers?)) @@ -3978,19 +3985,16 @@ module browser threading seems wrong. has-editor-on-demand) (register-capability-menu-item 'drscheme:special:insert-lambda insert-menu)) - (new menu:can-restore-menu-item% - [label (if (show-line-numbers?) - (string-constant hide-line-numbers/menu) - (string-constant show-line-numbers/menu))] - [parent (get-show-menu)] - [callback (lambda (self event) - (define value (preferences:get 'drracket:show-line-numbers?)) - (send self set-label - (if value - (string-constant show-line-numbers/menu) - (string-constant hide-line-numbers/menu))) - (preferences:set 'drracket:show-line-numbers? (not value)) - (show-line-numbers! (not value)))]) + (set! show-line-numbers-menu-item + (new menu:can-restore-menu-item% + [label (if (show-line-numbers?) + (string-constant hide-line-numbers/menu) + (string-constant show-line-numbers/menu))] + [parent (get-show-menu)] + [callback (lambda (self event) + (define value (preferences:get 'drracket:show-line-numbers?)) + (preferences:set 'drracket:show-line-numbers? (not value)) + (show-line-numbers! (not value)))])) (make-object separator-menu-item% (get-show-menu)) From 6c5c17056517da0b85506872299500e600a39cea Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 25 Dec 2011 18:16:49 -0600 Subject: [PATCH 13/18] racket/draw: add `text-outline' to `dc-path%' --- collects/racket/draw/private/dc-path.rkt | 20 ++++++- collects/racket/draw/private/dc.rkt | 59 +++++++++++++------ collects/racket/draw/unsafe/cairo.rkt | 56 ++++++++++++++++++ collects/racket/draw/unsafe/pango.rkt | 1 + collects/scribblings/draw/dc-path-class.scrbl | 15 +++++ collects/tests/gracket/draw.rkt | 24 +++++++- doc/release-notes/racket/HISTORY.txt | 1 + 7 files changed, 155 insertions(+), 21 deletions(-) diff --git a/collects/racket/draw/private/dc-path.rkt b/collects/racket/draw/private/dc-path.rkt index a57cc94b7b..b46510a008 100644 --- a/collects/racket/draw/private/dc-path.rkt +++ b/collects/racket/draw/private/dc-path.rkt @@ -7,12 +7,14 @@ "fmod.rkt" "point.rkt" "transform.rkt" + "font.rkt" (only-in scheme/base [append s:append] [reverse s:reverse])) (provide dc-path% - do-path) + (protect-out do-path + set-text-to-path!)) (define-local-member-name get-closed-points @@ -22,6 +24,9 @@ (define 2pi (* 2.0 pi)) (define pi/2 (/ pi 2.0)) +(define text-to-path #f) +(define (set-text-to-path! proc) (set! text-to-path proc)) + (define dc-path% (class object% ;; A path is a list of pairs and vectors: @@ -277,6 +282,19 @@ (do-arc x y w h 0 2pi #f) (close)) + (def/public (text-outline [font% font] [string? str] [real? x] [real? y] [any? [combine? #f]]) + (when (open?) (close)) + (let ([p (text-to-path font str x y combine?)]) + (for ([a (in-list p)]) + (case (car a) + [(move) (move-to (cadr a) (caddr a))] + [(line) (line-to (cadr a) (caddr a))] + [(curve) (curve-to (cadr a) (caddr a) + (list-ref a 2) (list-ref a 3) + (list-ref a 4) (list-ref a 5))] + [(close) (close)]))) + (close)) + (def/public (scale [real? x][real? y]) (unless (and (= x 1.0) (= y 1.0)) (flatten-open!) diff --git a/collects/racket/draw/private/dc.rkt b/collects/racket/draw/private/dc.rkt index e45887adf4..e2f1e610ff 100644 --- a/collects/racket/draw/private/dc.rkt +++ b/collects/racket/draw/private/dc.rkt @@ -32,7 +32,8 @@ (define-local-member-name do-set-pen! - do-set-brush!) + do-set-brush! + text-path) (define 2pi (* 2 pi)) @@ -1161,9 +1162,16 @@ (with-cr (check-ok 'draw-text) cr - (do-text cr #t s x y font combine? offset angle) + (do-text cr 'draw s x y font combine? offset angle) (flush-cr))) + (define/public (text-path s x y combine?) + (with-cr + (check-ok 'draw-text) + cr + (do-text cr 'path s x y font combine? 0 0.0) + (cairo_copy_path cr))) + (define size-cache (make-weak-hasheq)) (define/private (get-size-cache desc) @@ -1231,12 +1239,12 @@ (set-font-antialias c (dc-adjust-smoothing (send font get-smoothing))) c))) - (define/private (do-text cr draw? s x y font combine? offset angle) + (define/private (do-text cr draw-mode s x y font combine? offset angle) (let* ([s (if (zero? offset) s (substring s offset))] [blank? (string=? s "")] - [s (if (and (not draw?) blank?) " " s)] + [s (if (and (not draw-mode) blank?) " " s)] [s (if (for/or ([c (in-string s)]) (or (eqv? c #\uFFFE) (eqv? c #\uFFFF))) ;; Since \uFFFE and \uFFFF are not supposed to be in any @@ -1244,10 +1252,10 @@ ;; string to Pango: (regexp-replace* #rx"[\uFFFE\uFFFF]" s "\uFFFD") s)] - [rotate? (and draw? (not (zero? angle)))] + [rotate? (and draw-mode (not (zero? angle)))] [smoothing-index (get-smoothing-index)] [context (get-context cr smoothing-index)]) - (when draw? + (when draw-mode (when (eq? text-mode 'solid) (unless rotate? (let-values ([(w h d a) (do-text cr #f s 0 0 font combine? 0 0.0)]) @@ -1276,7 +1284,7 @@ ;; This is combine mode. It has to be a little complicated, after all, ;; because we may need to implement font substitution ourselves, which ;; breaks the string into multiple layouts. - (let loop ([s s] [draw? draw?] [measured? #f] [w 0.0] [h 0.0] [d 0.0] [a 0.0]) + (let loop ([s s] [draw-mode draw-mode] [measured? #f] [w 0.0] [h 0.0] [d 0.0] [a 0.0]) (cond [(not s) (when rotate? (cairo_restore cr)) @@ -1313,11 +1321,11 @@ (install-alternate-face (string-ref s 0) layout font desc attrs context)) (substring s (max 1 ok-count))))]) (cond - [(and draw? next-s (not measured?)) + [(and draw-mode next-s (not measured?)) ;; It's going to take multiple layouts, so first gather measurements. (let-values ([(w2 h d a) (loop s #f #f w h d a)]) ;; draw again, supplying `h', `d', and `a' for the whole line - (loop s #t #t w h d a))] + (loop s draw-mode #t w h d a))] [else (let ([logical (make-PangoRectangle 0 0 0 0)]) (pango_layout_get_extents layout #f logical) @@ -1325,16 +1333,19 @@ [nd (/ (- (PangoRectangle-height logical) (pango_layout_get_baseline layout)) (exact->inexact PANGO_SCALE))]) - (when draw? + (when draw-mode (let ([bl (if measured? (- h d) (- nh nd))]) (pango_layout_get_extents layout #f logical) (cairo_move_to cr (text-align-x/delta (+ x w) 0) (text-align-y/delta (+ y bl) 0)) ;; Draw the text: - (pango_cairo_show_layout_line cr (pango_layout_get_line_readonly layout 0)))) + (let ([line (pango_layout_get_line_readonly layout 0)]) + (if (eq? draw-mode 'draw) + (pango_cairo_show_layout_line cr line) + (pango_cairo_layout_line_path cr line))))) (cond - [(and draw? (not next-s)) + [(and draw-mode (not next-s)) (g_object_unref layout) (when rotate? (cairo_restore cr))] [else @@ -1342,7 +1353,7 @@ 0.0 (integral (/ (PangoRectangle-width logical) (exact->inexact PANGO_SCALE))))] [na 0.0]) - (loop next-s measured? draw? (+ w nw) (max h nh) (max d nd) (max a na)))])))])))])) + (loop next-s draw-mode measured? (+ w nw) (max h nh) (max d nd) (max a na)))])))])))])) ;; This is character-by-character mode. It uses a cached per-character+font layout ;; object. (let ([cache (if (or combine? @@ -1397,7 +1408,7 @@ ;; character or if we're just measuring text. (begin0 (unless (and - draw? + (eq? draw-mode 'draw) cache (not attrs) ; fast path doesn't handle underline ((string-length s) . > . 1) @@ -1489,13 +1500,16 @@ ;; unrounded height, for slow-path alignment flh))) (values lw lh ld la flh)))))))]) - (when draw? + (when draw-mode (cairo_move_to cr (text-align-x/delta (+ x w) 0) (let ([bl (- flh ld)]) (text-align-y/delta (+ y bl) 0))) ;; Here's the draw command, which uses most of the time in this mode: - (pango_cairo_show_layout_line cr (pango_layout_get_line_readonly layout 0))) + (let ([line (pango_layout_get_line_readonly layout 0)]) + (if (eq? draw-mode 'draw) + (pango_cairo_show_layout_line cr line) + (pango_cairo_layout_line_path cr line)))) (values (if blank? 0.0 (+ w lw)) (max h lh) (max d ld) (max a la)))))) (when rotate? (cairo_restore cr)))))))) @@ -1518,7 +1532,7 @@ (vector-set! vec 2 #f) (vector-set! vec 3 #f) (vector-set! vec 4 #f))))) - + (def/public (start-doc [string? desc]) (check-ok 'start-doc)) (def/public (end-doc) @@ -1819,3 +1833,14 @@ (void)) dc%) + +(set-text-to-path! + (lambda (font str x y combine?) + (define tmp-bm (make-object bitmap% 10 10)) + (define tmp-dc (make-object -bitmap-dc% tmp-bm)) + (send tmp-dc set-font font) + (define path (send tmp-dc text-path str x y combine?)) + (begin0 + (cairo-path->list path) + (cairo_path_destroy path)))) + diff --git a/collects/racket/draw/unsafe/cairo.rkt b/collects/racket/draw/unsafe/cairo.rkt index 9b8302581c..82c3384aa1 100644 --- a/collects/racket/draw/unsafe/cairo.rkt +++ b/collects/racket/draw/unsafe/cairo.rkt @@ -428,3 +428,59 @@ CAIRO_FILTER_GAUSSIAN) (define/provide CAIRO_CONTENT_COLOR_ALPHA #x3000) + +;; ---------------------------------------- + +(define-cstruct _cairo_path_data_t_header ([type _int] + [length _int])) +(define-cstruct _cairo_path_data_t_point ([x _double] + [y _double])) + +(define _cairo_path_data_t (_union + _cairo_path_data_t_header + _cairo_path_data_t_point)) + +(define-cstruct _cairo_path_t ([status _int] + [data _pointer] + [num_data _int])) + +(define-cairo cairo_path_destroy (_fun _cairo_path_t-pointer -> _void) + #:wrap (deallocator)) + +(define-cairo cairo_copy_path (_fun _cairo_t -> _cairo_path_t-pointer) + #:wrap (allocator cairo_path_destroy)) + +(define-enum 0 + CAIRO_PATH_MOVE_TO + CAIRO_PATH_LINE_TO + CAIRO_PATH_CURVE_TO + CAIRO_PATH_CLOSE_PATH) + +(provide cairo-path->list) + +(define (cairo-path->list path) + (define len (cairo_path_t-num_data path)) + (define data (cairo_path_t-data path)) + (let loop ([i 0]) + (if (= i len) + null + (let ([h (union-ref (ptr-ref data _cairo_path_data_t i) 0)]) + (cons (let ([t (cairo_path_data_t_header-type h)]) + (cond + [(or (= t CAIRO_PATH_MOVE_TO) + (= t CAIRO_PATH_LINE_TO)) + (define a (union-ref (ptr-ref data _cairo_path_data_t (add1 i)) 1)) + (list (if (= t CAIRO_PATH_MOVE_TO) 'move 'line) + (cairo_path_data_t_point-x a) + (cairo_path_data_t_point-y a))] + [(= t CAIRO_PATH_CURVE_TO) + (define a (union-ref (ptr-ref data _cairo_path_data_t (+ 1 i)) 1)) + (define b (union-ref (ptr-ref data _cairo_path_data_t (+ 2 i)) 1)) + (define c (union-ref (ptr-ref data _cairo_path_data_t (+ 3 i)) 1)) + (list 'curve + (cairo_path_data_t_point-x a) (cairo_path_data_t_point-y a) + (cairo_path_data_t_point-x b) (cairo_path_data_t_point-y b) + (cairo_path_data_t_point-x c) (cairo_path_data_t_point-y c))] + [(= t CAIRO_PATH_CLOSE_PATH) + '(close)])) + (loop (+ i (cairo_path_data_t_header-length h)))))))) diff --git a/collects/racket/draw/unsafe/pango.rkt b/collects/racket/draw/unsafe/pango.rkt index 40717871be..f2e72b0a6f 100644 --- a/collects/racket/draw/unsafe/pango.rkt +++ b/collects/racket/draw/unsafe/pango.rkt @@ -185,6 +185,7 @@ (define-pangocairo pango_cairo_show_layout (_pfun _cairo_t PangoLayout -> _void)) (define-pangocairo pango_cairo_show_layout_line (_pfun _cairo_t PangoLayoutLine -> _void)) (define-pangocairo pango_cairo_show_glyph_string (_pfun _cairo_t PangoFont _PangoGlyphString-pointer -> _void)) +(define-pangocairo pango_cairo_layout_line_path (_pfun _cairo_t PangoLayoutLine -> _void)) (define-pango pango_layout_iter_free (_pfun PangoLayoutIter -> _void) #:wrap (deallocator)) diff --git a/collects/scribblings/draw/dc-path-class.scrbl b/collects/scribblings/draw/dc-path-class.scrbl index c3a8b1d27c..bbe393f190 100644 --- a/collects/scribblings/draw/dc-path-class.scrbl +++ b/collects/scribblings/draw/dc-path-class.scrbl @@ -264,6 +264,21 @@ If @racket[radius] is less than @racket[-0.5] or more than half of } +@defmethod[(text-outline [font (is-a?/c font%)] + [str string?] + [x real?] + [y real?] + [combine? any/c #f]) + void?]{ + +Closes the @tech{open sub-path}, if any, and adds a @tech{closed + sub-path} to outline @racket[str] using @racket[font]. The + top left of the text is positioned at @racket[x] and @racket[y]. The + @racket[combine?] argument enables kerning and character combinations + as for @xmethod[dc<%> draw-text]. + +} + @defmethod[(translate [x real?] [y real?]) void?]{ diff --git a/collects/tests/gracket/draw.rkt b/collects/tests/gracket/draw.rkt index 6eb613e302..37e9ecd4cc 100644 --- a/collects/tests/gracket/draw.rkt +++ b/collects/tests/gracket/draw.rkt @@ -659,6 +659,17 @@ (loop (cdr fam) (cdr stl) (cdr wgt) (cdr sze) x (+ y h) #f))))) (send dc set-pen save-pen))) + ;; Text paths: + (let ([p (make-object dc-path%)] + [old-pen (send dc get-pen)] + [old-brush (send dc get-brush)]) + (send p text-outline (make-font #:size 32) "A" 360 190) + (send dc set-pen "black" 1 'solid) + (send dc set-brush "pink" 'solid) + (send dc draw-path p) + (send dc set-pen old-pen) + (send dc set-brush old-brush)) + ; Bitmap copying: (when (and (not no-bitmaps?) last?) (let ([x 5] [y 165]) @@ -1080,6 +1091,11 @@ [(lam) (let ([r (make-object region% clip-dc)]) (send r set-path lambda-path) (send dc set-clipping-region r))] + [(A) (let ([p (new dc-path%)] + [r (make-object region% clip-dc)]) + (send p text-outline (make-font #:size 256) "A" 10 10) + (send r set-path p) + (send dc set-clipping-region r))] [(rect+poly) (let ([r (mk-poly 'winding)]) (send r union (mk-rect)) (send dc set-clipping-region r))] @@ -1161,7 +1177,8 @@ (let*-values ([(x y w h) (send r get-bounding-box)] [(l) (list x y w h)] [(=~) (lambda (x y) - (<= (- x 2) y (+ x 2)))]) + (or (not y) + (<= (- x 2) y (+ x 2))))]) (unless (andmap =~ l (let ([l (case clip @@ -1170,6 +1187,7 @@ [(poly circle poly-rect) '(0. 60. 180. 180.)] [(wedge) '(26. 60. 128. 90.)] [(lam) '(58. 10. 202. 281.)] + [(A) '(#f #f #f #f)] [(rect+poly rect+circle poly^rect) '(0. -25. 180. 400.)] [(poly&rect) '(100. 60. 10. 180.)] [(roundrect) '(80. 200. 125. 40.)] @@ -1293,14 +1311,14 @@ (send canvas set-kern (send self get-value)))) (make-object choice% "Clip" '("None" "Rectangle" "Rectangle2" "Octagon" - "Circle" "Wedge" "Round Rectangle" "Lambda" + "Circle" "Wedge" "Round Rectangle" "Lambda" "A" "Rectangle + Octagon" "Rectangle + Circle" "Octagon - Rectangle" "Rectangle & Octagon" "Rectangle ^ Octagon" "Polka" "Empty") hp3 (lambda (self event) (set! clip (list-ref - '(none rect rect2 poly circle wedge roundrect lam + '(none rect rect2 poly circle wedge roundrect lam A rect+poly rect+circle poly-rect poly&rect poly^rect polka empty) (send self get-selection))) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 186868f0fb..c57ee134bb 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,5 +1,6 @@ Version 5.2.0.7 Intern strings, etc., only in read-syntax mode, not read mode +racket/draw: add text-outline to dc-path% Version 5.2.0.6 Added pseudo-random-generator-vector? From 1c6378451798d2e230d841d0f8d3afc9b4c078d3 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 25 Dec 2011 19:08:27 -0600 Subject: [PATCH 14/18] for `record-dc%', record initial configuration after each `erase' Closes PR 12460 --- collects/racket/draw/private/record-dc.rkt | 30 ++++++++++- collects/tests/gracket/record-dc.rkt | 59 ++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 collects/tests/gracket/record-dc.rkt diff --git a/collects/racket/draw/private/record-dc.rkt b/collects/racket/draw/private/record-dc.rkt index 3acaee6ee7..7074fcd77e 100644 --- a/collects/racket/draw/private/record-dc.rkt +++ b/collects/racket/draw/private/record-dc.rkt @@ -103,6 +103,11 @@ (class % (super-new) + (inherit get-origin get-scale get-rotation get-initial-matrix + get-pen get-brush get-font + get-smoothing get-text-mode + get-alpha get-clipping-region) + (define record-limit +inf.0) (define current-size 0) @@ -135,7 +140,30 @@ (start-atomic) (set! procs null) (set! current-size 0) - (end-atomic)) + (end-atomic) + ;; install current configuration explicitly (so it gets recorded): + (let-values ([(ox oy) (get-origin)] + [(sx sy) (get-scale)] + [(r) (get-rotation)] + [(m) (get-initial-matrix)] + [(p) (get-pen)] + [(b) (get-brush)] + [(s) (get-smoothing)] + [(f) (get-font)] + [(tm) (get-text-mode)] + [(a) (get-alpha)] + [(cr) (get-clipping-region)]) + (unless (and (zero? ox) (zero? oy)) (set-origin ox oy)) + (unless (and (= 1 sx) (= 1 sy)) (set-scale sx sy)) + (unless (zero? r) (set-rotation r)) + (unless (equal? m '#(1.0 0.0 0.0 1.0 0.0 0.0)) (set-initial-matrix m)) + (do-set-pen! p) + (do-set-brush! b) + (set-font f) + (unless (eq? s 'unsmoothed) (set-smoothing s)) + (unless (eq? tm 'transparent) (set-text-mode tm)) + (unless (= a 1.0) (set-alpha a)) + (when cr (set-clipping-region cr)))) (define clones (make-hasheq)) (define/private (clone clone-x x) diff --git a/collects/tests/gracket/record-dc.rkt b/collects/tests/gracket/record-dc.rkt new file mode 100644 index 0000000000..14346568c5 --- /dev/null +++ b/collects/tests/gracket/record-dc.rkt @@ -0,0 +1,59 @@ +#lang racket/base +(require racket/class + racket/draw + racket/draw/private/record-dc) + +(define bm1 (make-bitmap 100 100)) +(define bm2 (make-bitmap 100 100)) +(define bm3 (make-bitmap 100 100)) + +(define dc1 (make-object bitmap-dc% bm1)) +(define dc2 (make-object (record-dc-mixin bitmap-dc%) bm2)) +(define dc3 (make-object bitmap-dc% bm3)) + +(define (config dc) + (send dc set-origin 2 3) + (send dc set-scale 1.1 0.9) + (send dc set-rotation 0.1) + (send dc set-initial-matrix '#(1.0 -0.1 0.1 1.0 1.0 2.0)) + (send dc set-pen "red" 2 'solid) + (send dc set-brush "blue" 'solid) + (send dc set-font (make-font #:size 32)) + (send dc set-smoothing 'smoothed) + (send dc set-text-mode 'solid) + (send dc set-alpha 0.8) + (send dc set-clipping-rect 5 5 95 95)) + +(define (draw dc) + (send dc draw-ellipse 2 2 100 100) + (send dc draw-text "Hello" 10 10)) + +(define (get-bytes bm) + (define w (send bm get-width)) + (define h (send bm get-height)) + (define bstr (make-bytes (* 4 w h))) + (send bm get-argb-pixels 0 0 w h bstr) + bstr) + +(config dc1) +(draw dc1) + +(define pre-bytes (get-bytes bm1)) + +(config dc2) +(send dc2 erase) +(draw dc2) + +(define middle-bytes (get-bytes bm2)) + +(define cms (send dc2 get-recorded-command)) + +(cms dc3) + +(define post-bytes (get-bytes bm3)) + +(unless (equal? pre-bytes middle-bytes) + (error "middle != pre")) + +(unless (equal? pre-bytes post-bytes) + (error "post != pre")) From e12bf33f8dcbc72969058960017e229394fcdc2f Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 25 Dec 2011 19:39:25 -0600 Subject: [PATCH 15/18] 'rshift and 'rcontrol don't interrupt keybindings Closes PR 12461 --- collects/mred/private/wxme/keymap.rkt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/collects/mred/private/wxme/keymap.rkt b/collects/mred/private/wxme/keymap.rkt index 4f66580db1..505420285c 100644 --- a/collects/mred/private/wxme/keymap.rkt +++ b/collects/mred/private/wxme/keymap.rkt @@ -445,7 +445,9 @@ (def/public (handle-key-event [any? obj] [key-event% event]) (let ([code (send event get-key-code)]) (or (eq? code 'shift) + (eq? code 'rshift) (eq? code 'control) + (eq? code 'rcontrol) (eq? code 'release) (let ([score (get-best-score code From ae1ca5b91a88e6241b58a3d73c9b5f24263d12e9 Mon Sep 17 00:00:00 2001 From: Michael W Date: Mon, 26 Dec 2011 01:20:15 -0700 Subject: [PATCH 16/18] Bugfix: text-outline now handles curves correctly --- collects/racket/draw/private/dc-path.rkt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collects/racket/draw/private/dc-path.rkt b/collects/racket/draw/private/dc-path.rkt index b46510a008..4fff301aa8 100644 --- a/collects/racket/draw/private/dc-path.rkt +++ b/collects/racket/draw/private/dc-path.rkt @@ -290,8 +290,8 @@ [(move) (move-to (cadr a) (caddr a))] [(line) (line-to (cadr a) (caddr a))] [(curve) (curve-to (cadr a) (caddr a) - (list-ref a 2) (list-ref a 3) - (list-ref a 4) (list-ref a 5))] + (list-ref a 3) (list-ref a 4) + (list-ref a 5) (list-ref a 6))] [(close) (close)]))) (close)) From 3a1df23be6c5da4f12a285a5358c4e732e8349b5 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 26 Dec 2011 06:27:22 -0600 Subject: [PATCH 17/18] fix `text-outline' test to include a curve --- collects/tests/gracket/draw.rkt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collects/tests/gracket/draw.rkt b/collects/tests/gracket/draw.rkt index 37e9ecd4cc..3a6f8cdbe3 100644 --- a/collects/tests/gracket/draw.rkt +++ b/collects/tests/gracket/draw.rkt @@ -663,7 +663,7 @@ (let ([p (make-object dc-path%)] [old-pen (send dc get-pen)] [old-brush (send dc get-brush)]) - (send p text-outline (make-font #:size 32) "A" 360 190) + (send p text-outline (make-font #:size 32) "A8" 360 190) (send dc set-pen "black" 1 'solid) (send dc set-brush "pink" 'solid) (send dc draw-path p) From e02eb9c2c1686c5688056d7deb3b9a91dcaf1a3b Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Mon, 26 Dec 2011 09:46:38 -0600 Subject: [PATCH 18/18] the variable most-recent-languages-hier-list-selection used to be a hierarchical-list-item<%> object, but now it is a list of language names (same information, different data) and one place didn't get updated. Closes PR 12462 --- collects/drracket/private/language-configuration.rkt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/collects/drracket/private/language-configuration.rkt b/collects/drracket/private/language-configuration.rkt index 468fddb43a..d108a0a668 100644 --- a/collects/drracket/private/language-configuration.rkt +++ b/collects/drracket/private/language-configuration.rkt @@ -375,8 +375,9 @@ (define/override (on-select i) (cond [(and i (is-a? i hieritem-language<%>)) - (preferences:set 'drracket:language-dialog:hierlist-default (send (send i get-language) get-language-position)) - (set! most-recent-languages-hier-list-selection i) + (define pos (send (send i get-language) get-language-position)) + (preferences:set 'drracket:language-dialog:hierlist-default pos) + (set! most-recent-languages-hier-list-selection pos) (something-selected i)] [else (non-language-selected)])) @@ -430,8 +431,7 @@ (use-chosen-language-rb-callback))])) (define (use-chosen-language-rb-callback) (when most-recent-languages-hier-list-selection - (send languages-hier-list select - most-recent-languages-hier-list-selection)) + (select-a-language-in-hierlist most-recent-languages-hier-list-selection)) (send use-language-in-source-rb set-selection #f) (send languages-hier-list focus)) (define languages-hier-list-panel (new horizontal-panel% [parent languages-choice-panel]))