diff --git a/collects/tests/racket/contmark.rktl b/collects/tests/racket/contmark.rktl index 09aed98c02..924c62be0b 100644 --- a/collects/tests/racket/contmark.rktl +++ b/collects/tests/racket/contmark.rktl @@ -915,6 +915,87 @@ pt))))) pt))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Test proxy-able continuation marks + +(let () + + (define my-mark (make-continuation-mark-key 'my-mark)) + (wcm-test '(secret) + (lambda () + (with-continuation-mark my-mark 'secret + (extract-current-continuation-marks my-mark)))) + + (wcm-test '() + (lambda () + (with-continuation-mark my-mark 'secret + (extract-current-continuation-marks 'my-mark)))) + + (define my-mark-2 (make-continuation-mark-key 'my-mark)) + (wcm-test '() + (lambda () + (with-continuation-mark my-mark 'secret + (extract-current-continuation-marks my-mark-2))))) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Tests for continuation mark proxies + +(let () + + (define imp-mark + (impersonate-continuation-mark-key + (make-continuation-mark-key) + (lambda (x) (* x 2)) + (lambda (x) (+ x 1)))) + + (define cha-mark + (chaperone-continuation-mark-key + (make-continuation-mark-key) + (lambda (x) (if (number? x) x (error "fail"))) + (lambda (x) x))) + + (define bad-mark + (chaperone-continuation-mark-key + (make-continuation-mark-key) + (lambda (x) 42) + (lambda (x) x))) + + (define bad-mark-2 + (chaperone-continuation-mark-key + (make-continuation-mark-key) + (lambda (x) x) + (lambda (x) 42))) + + (define (do-test mark val) + (with-continuation-mark mark val + (extract-current-continuation-marks mark))) + + (define (do-test* mark val) + (with-continuation-mark mark val + (continuation-mark-set->list* + (current-continuation-marks) + (list mark)))) + + (define (do-test/first mark val) + (with-continuation-mark mark val + (continuation-mark-set-first (current-continuation-marks) mark))) + + (define (do-test/immediate mark val) + (with-continuation-mark mark val + (call-with-immediate-continuation-mark mark + (lambda (v) v)))) + + (wcm-test '(12) (lambda () (do-test imp-mark 5))) + (wcm-test '(#(12)) (lambda () (do-test* imp-mark 5))) + (wcm-test 12 (lambda () (do-test/first imp-mark 5))) + (wcm-test 12 (lambda () (do-test/immediate imp-mark 5))) + (wcm-test '(5) (lambda () (do-test cha-mark 5))) + (wcm-test '(#(5)) (lambda () (do-test* cha-mark 5))) + (wcm-test 5 (lambda () (do-test/first cha-mark 5))) + (wcm-test 5 (lambda () (do-test/immediate cha-mark 5))) + (err/rt-test (do-test cha-mark "fail") exn:fail?) + (err/rt-test (do-test bad-mark 5) exn:fail?)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 7c0871e574..ef84a91a86 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,3 +1,8 @@ +Version 5.3.0.12 +racket/base: added impersonate-continuation-mark-key, +chaperone-continuation-mark-key, make-continuation-mark-key, +continuation-mark-key? + Version 5.3.0.11 Changed contract on date second field to disallow 61, since leap seconds never appear more than once per minute diff --git a/src/racket/include/scheme.h b/src/racket/include/scheme.h index 6cc07f126d..d85cdcf841 100644 --- a/src/racket/include/scheme.h +++ b/src/racket/include/scheme.h @@ -451,6 +451,7 @@ typedef intptr_t (*Scheme_Secondary_Hash_Proc)(Scheme_Object *obj, void *cycle_d #define SCHEME_IMMUTABLE_BOXP(obj) (SCHEME_BOXP(obj) && SCHEME_IMMUTABLEP(obj)) #define SCHEME_PROMPT_TAGP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_prompt_tag_type) +#define SCHEME_CONTINUATION_MARK_KEYP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_continuation_mark_key_type) #define SCHEME_BUCKTP(obj) SAME_TYPE(SCHEME_TYPE(obj),scheme_bucket_table_type) #define SCHEME_HASHTP(obj) SAME_TYPE(SCHEME_TYPE(obj),scheme_hash_table_type) diff --git a/src/racket/src/cstartup.inc b/src/racket/src/cstartup.inc index cf812c34f2..4459d3d40f 100644 --- a/src/racket/src/cstartup.inc +++ b/src/racket/src/cstartup.inc @@ -1,78 +1,78 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,49,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,50,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,14, -0,19,0,26,0,29,0,36,0,43,0,47,0,60,0,65,0,69,0,74,0, +0,21,0,26,0,30,0,33,0,38,0,45,0,58,0,62,0,67,0,74,0, 83,0,87,0,93,0,107,0,121,0,124,0,130,0,134,0,136,0,147,0,149, 0,163,0,170,0,192,0,194,0,208,0,19,1,48,1,59,1,70,1,96,1, 129,1,162,1,221,1,21,2,99,2,155,2,160,2,180,2,73,3,93,3,145, 3,211,3,100,4,242,4,40,5,51,5,130,5,0,0,92,7,0,0,69,35, -37,109,105,110,45,115,116,120,29,11,11,11,64,99,111,110,100,66,108,101,116, -114,101,99,62,111,114,66,117,110,108,101,115,115,66,100,101,102,105,110,101,63, -97,110,100,72,112,97,114,97,109,101,116,101,114,105,122,101,64,108,101,116,42, -63,108,101,116,64,119,104,101,110,68,104,101,114,101,45,115,116,120,29,11,11, +37,109,105,110,45,115,116,120,29,11,11,11,66,108,101,116,114,101,99,64,108, +101,116,42,63,97,110,100,62,111,114,64,119,104,101,110,66,100,101,102,105,110, +101,72,112,97,114,97,109,101,116,101,114,105,122,101,63,108,101,116,64,99,111, +110,100,66,117,110,108,101,115,115,68,104,101,114,101,45,115,116,120,29,11,11, 11,65,113,117,111,116,101,29,94,2,15,68,35,37,107,101,114,110,101,108,11, 29,94,2,15,68,35,37,112,97,114,97,109,122,11,62,105,102,65,98,101,103, 105,110,63,115,116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120, 73,108,101,116,114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97, 1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101, 121,61,118,73,100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8, -240,188,83,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, -16,20,2,10,2,2,2,3,2,2,2,5,2,2,2,6,2,2,2,7,2, -2,2,8,2,2,2,9,2,2,2,4,2,2,2,11,2,2,2,12,2,2, -97,37,11,8,240,188,83,0,0,93,159,2,16,36,37,16,2,2,13,161,2, -2,37,2,13,2,2,2,13,96,38,11,8,240,188,83,0,0,16,0,96,11, -11,8,240,188,83,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, -14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,159,4,195,249, -22,152,4,80,158,39,36,251,22,85,2,18,248,22,100,199,12,249,22,75,2, -19,248,22,102,201,27,248,22,159,4,195,249,22,152,4,80,158,39,36,251,22, -85,2,18,248,22,100,199,249,22,75,2,19,248,22,102,201,12,27,248,22,77, -248,22,159,4,196,28,248,22,83,193,20,14,159,37,36,37,28,248,22,83,248, -22,77,194,248,22,76,193,249,22,152,4,80,158,39,36,251,22,85,2,18,248, -22,76,199,249,22,75,2,8,248,22,77,201,11,18,100,10,13,16,6,36,2, +240,230,83,0,0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36, +16,20,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2, +2,2,8,2,2,2,11,2,2,2,10,2,2,2,9,2,2,2,12,2,2, +97,37,11,8,240,230,83,0,0,93,159,2,16,36,37,16,2,2,13,161,2, +2,37,2,13,2,2,2,13,96,11,11,8,240,230,83,0,0,16,0,96,38, +11,8,240,230,83,0,0,16,0,18,98,64,104,101,114,101,13,16,6,36,2, +14,2,2,11,11,11,8,32,8,31,8,30,8,29,27,248,22,163,4,195,249, +22,156,4,80,158,39,36,251,22,89,2,18,248,22,104,199,12,249,22,79,2, +19,248,22,106,201,27,248,22,163,4,195,249,22,156,4,80,158,39,36,251,22, +89,2,18,248,22,104,199,249,22,79,2,19,248,22,106,201,12,27,248,22,81, +248,22,163,4,196,28,248,22,87,193,20,14,159,37,36,37,28,248,22,87,248, +22,81,194,248,22,80,193,249,22,156,4,80,158,39,36,251,22,89,2,18,248, +22,80,199,249,22,79,2,5,248,22,81,201,11,18,100,10,13,16,6,36,2, 14,2,2,11,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,3, -1,8,101,110,118,49,53,56,49,48,16,4,11,11,2,21,3,1,8,101,110, -118,49,53,56,49,49,27,248,22,77,248,22,159,4,196,28,248,22,83,193,20, -14,159,37,36,37,28,248,22,83,248,22,77,194,248,22,76,193,249,22,152,4, -80,158,39,36,250,22,85,2,22,248,22,85,249,22,85,248,22,85,2,23,248, -22,76,201,251,22,85,2,18,2,23,2,23,249,22,75,2,5,248,22,77,204, +1,8,101,110,118,49,53,56,50,48,16,4,11,11,2,21,3,1,8,101,110, +118,49,53,56,50,49,27,248,22,81,248,22,163,4,196,28,248,22,87,193,20, +14,159,37,36,37,28,248,22,87,248,22,81,194,248,22,80,193,249,22,156,4, +80,158,39,36,250,22,89,2,22,248,22,89,249,22,89,248,22,89,2,23,248, +22,80,201,251,22,89,2,18,2,23,2,23,249,22,79,2,6,248,22,81,204, 18,100,11,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8,30,8, -29,16,4,11,11,2,20,3,1,8,101,110,118,49,53,56,49,51,16,4,11, -11,2,21,3,1,8,101,110,118,49,53,56,49,52,248,22,159,4,193,27,248, -22,159,4,194,249,22,75,248,22,85,248,22,76,196,248,22,77,195,27,248,22, -77,248,22,159,4,23,197,1,249,22,152,4,80,158,39,36,28,248,22,60,248, -22,153,4,248,22,76,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43, -11,9,222,33,40,248,22,159,4,248,22,100,23,200,2,250,22,85,2,24,248, -22,85,249,22,85,248,22,85,248,22,76,23,204,2,250,22,86,2,25,249,22, -2,22,76,23,204,2,248,22,102,23,206,2,249,22,75,248,22,76,23,202,1, -249,22,2,22,100,23,200,1,250,22,86,2,22,249,22,2,32,0,88,163,8, -36,37,47,11,9,222,33,41,248,22,159,4,248,22,76,201,248,22,77,198,27, -248,22,159,4,194,249,22,75,248,22,85,248,22,76,196,248,22,77,195,27,248, -22,77,248,22,159,4,23,197,1,249,22,152,4,80,158,39,36,250,22,86,2, -24,249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,43,248,22,159,4, -248,22,76,201,248,22,77,198,27,248,22,77,248,22,159,4,196,27,248,22,159, -4,248,22,76,195,249,22,152,4,80,158,40,36,28,248,22,83,195,250,22,86, -2,22,9,248,22,77,199,250,22,85,2,11,248,22,85,248,22,76,199,250,22, -86,2,10,248,22,77,201,248,22,77,202,27,248,22,77,248,22,159,4,23,197, -1,27,249,22,1,22,89,249,22,2,22,159,4,248,22,159,4,248,22,76,199, -248,22,179,4,249,22,152,4,80,158,41,36,251,22,85,1,22,119,105,116,104, +29,16,4,11,11,2,20,3,1,8,101,110,118,49,53,56,50,51,16,4,11, +11,2,21,3,1,8,101,110,118,49,53,56,50,52,248,22,163,4,193,27,248, +22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248,22, +81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,28,248,22,64,248, +22,157,4,248,22,80,23,198,2,27,249,22,2,32,0,88,163,8,36,37,43, +11,9,222,33,40,248,22,163,4,248,22,104,23,200,2,250,22,89,2,24,248, +22,89,249,22,89,248,22,89,248,22,80,23,204,2,250,22,90,2,25,249,22, +2,22,80,23,204,2,248,22,106,23,206,2,249,22,79,248,22,80,23,202,1, +249,22,2,22,104,23,200,1,250,22,90,2,22,249,22,2,32,0,88,163,8, +36,37,47,11,9,222,33,41,248,22,163,4,248,22,80,201,248,22,81,198,27, +248,22,163,4,194,249,22,79,248,22,89,248,22,80,196,248,22,81,195,27,248, +22,81,248,22,163,4,23,197,1,249,22,156,4,80,158,39,36,250,22,90,2, +24,249,22,2,32,0,88,163,8,36,37,47,11,9,222,33,43,248,22,163,4, +248,22,80,201,248,22,81,198,27,248,22,81,248,22,163,4,196,27,248,22,163, +4,248,22,80,195,249,22,156,4,80,158,40,36,28,248,22,87,195,250,22,90, +2,22,9,248,22,81,199,250,22,89,2,10,248,22,89,248,22,80,199,250,22, +90,2,4,248,22,81,201,248,22,81,202,27,248,22,81,248,22,163,4,23,197, +1,27,249,22,1,22,93,249,22,2,22,163,4,248,22,163,4,248,22,80,199, +248,22,183,4,249,22,156,4,80,158,41,36,251,22,89,1,22,119,105,116,104, 45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,2,26,250, -22,86,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105, +22,90,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105, 122,97,116,105,111,110,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111, 110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,11,2,26,202,250, -22,86,2,22,9,248,22,77,204,27,248,22,77,248,22,159,4,196,28,248,22, -83,193,20,14,159,37,36,37,249,22,152,4,80,158,39,36,27,248,22,159,4, -248,22,76,197,28,249,22,147,9,62,61,62,248,22,153,4,248,22,100,196,250, -22,85,2,22,248,22,85,249,22,85,21,93,2,27,248,22,76,199,250,22,86, -2,3,249,22,85,2,27,249,22,85,248,22,109,203,2,27,248,22,77,202,251, -22,85,2,18,28,249,22,147,9,248,22,153,4,248,22,76,200,64,101,108,115, -101,10,248,22,76,197,250,22,86,2,22,9,248,22,77,200,249,22,75,2,3, -248,22,77,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8, -30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,53,56,51,54,16, -4,11,11,2,21,3,1,8,101,110,118,49,53,56,51,55,18,158,94,10,64, -118,111,105,100,8,48,27,248,22,77,248,22,159,4,196,249,22,152,4,80,158, -39,36,28,248,22,60,248,22,153,4,248,22,76,197,250,22,85,2,28,248,22, -85,248,22,76,199,248,22,100,198,27,248,22,153,4,248,22,76,197,250,22,85, -2,28,248,22,85,248,22,76,197,250,22,86,2,25,248,22,77,199,248,22,77, +22,90,2,22,9,248,22,81,204,27,248,22,81,248,22,163,4,196,28,248,22, +87,193,20,14,159,37,36,37,249,22,156,4,80,158,39,36,27,248,22,163,4, +248,22,80,197,28,249,22,151,9,62,61,62,248,22,157,4,248,22,104,196,250, +22,89,2,22,248,22,89,249,22,89,21,93,2,27,248,22,80,199,250,22,90, +2,11,249,22,89,2,27,249,22,89,248,22,113,203,2,27,248,22,81,202,251, +22,89,2,18,28,249,22,151,9,248,22,157,4,248,22,80,200,64,101,108,115, +101,10,248,22,80,197,250,22,90,2,22,9,248,22,81,200,249,22,79,2,11, +248,22,81,202,99,13,16,6,36,2,14,2,2,11,11,11,8,32,8,31,8, +30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,53,56,52,54,16, +4,11,11,2,21,3,1,8,101,110,118,49,53,56,52,55,18,158,94,10,64, +118,111,105,100,8,48,27,248,22,81,248,22,163,4,196,249,22,156,4,80,158, +39,36,28,248,22,64,248,22,157,4,248,22,80,197,250,22,89,2,28,248,22, +89,248,22,80,199,248,22,104,198,27,248,22,157,4,248,22,80,197,250,22,89, +2,28,248,22,89,248,22,80,197,250,22,90,2,25,248,22,81,199,248,22,81, 202,159,36,20,113,159,36,16,1,11,16,0,20,26,149,9,2,1,2,1,2, 2,9,9,11,11,11,10,36,80,158,36,36,20,113,159,36,16,0,16,0,38, 39,36,16,0,36,16,0,36,11,11,11,16,10,2,3,2,4,2,5,2,6, @@ -81,25 +81,25 @@ 2,11,2,12,36,46,37,16,0,36,16,1,2,13,37,11,11,11,16,0,16, 0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36,36,16,11,16,5, 11,20,15,16,2,20,14,159,36,36,37,80,158,36,36,36,20,113,159,36,16, -1,2,13,16,1,33,33,10,16,5,2,6,88,163,8,36,37,53,37,9,223, -0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,12,88,163, +1,2,13,16,1,33,33,10,16,5,2,12,88,163,8,36,37,53,37,9,223, +0,33,34,36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,7,88,163, 8,36,37,53,37,9,223,0,33,35,36,20,113,159,36,16,1,2,13,16,0, -11,16,5,2,8,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, -36,16,1,2,13,16,1,33,37,11,16,5,2,5,88,163,8,36,37,56,37, +11,16,5,2,5,88,163,8,36,37,53,37,9,223,0,33,36,36,20,113,159, +36,16,1,2,13,16,1,33,37,11,16,5,2,6,88,163,8,36,37,56,37, 9,223,0,33,38,36,20,113,159,36,16,1,2,13,16,1,33,39,11,16,5, -2,11,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,4,88,163,8,36,37,53,37,9,223,0,33,44, -36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,10,88,163,8,36,37, +2,10,88,163,8,36,37,58,37,9,223,0,33,42,36,20,113,159,36,16,1, +2,13,16,0,11,16,5,2,3,88,163,8,36,37,53,37,9,223,0,33,44, +36,20,113,159,36,16,1,2,13,16,0,11,16,5,2,4,88,163,8,36,37, 54,37,9,223,0,33,45,36,20,113,159,36,16,1,2,13,16,0,11,16,5, 2,9,88,163,8,36,37,56,37,9,223,0,33,46,36,20,113,159,36,16,1, -2,13,16,0,11,16,5,2,3,88,163,8,36,37,58,37,9,223,0,33,47, -36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,7,88,163,8, +2,13,16,0,11,16,5,2,11,88,163,8,36,37,58,37,9,223,0,33,47, +36,20,113,159,36,16,1,2,13,16,1,33,49,11,16,5,2,8,88,163,8, 36,37,54,37,9,223,0,33,50,36,20,113,159,36,16,1,2,13,16,0,11, 16,0,94,2,16,2,17,93,2,16,9,9,36,0}; EVAL_ONE_SIZED_STR((char *)expr, 2029); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,49,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,50,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,115,0,0,0,1,0,0,8,0,21, 0,26,0,43,0,65,0,94,0,109,0,127,0,139,0,155,0,169,0,191,0, 207,0,224,0,246,0,1,1,7,1,16,1,23,1,30,1,42,1,58,1,82, @@ -109,9 +109,9 @@ 57,6,98,6,128,7,151,7,168,7,116,9,219,9,233,9,137,10,60,12,69, 12,78,12,92,12,102,12,143,13,246,13,45,14,100,14,187,14,208,14,9,15, 118,15,175,15,85,16,93,16,199,16,6,17,8,17,120,17,180,17,185,17,52, -18,63,18,199,18,209,18,135,20,157,20,166,20,159,21,177,21,191,21,212,21, -224,21,13,22,20,22,38,22,86,22,99,22,161,24,72,25,217,25,202,26,184, -27,191,27,198,27,23,28,106,28,191,28,217,28,90,29,0,0,230,33,0,0, +18,63,18,200,18,210,18,136,20,158,20,167,20,160,21,178,21,192,21,213,21, +225,21,14,22,21,22,39,22,87,22,100,22,162,24,73,25,218,25,203,26,185, +27,192,27,199,27,24,28,107,28,192,28,218,28,91,29,0,0,231,33,0,0, 67,35,37,117,116,105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63, 64,98,115,98,115,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116, 104,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108,101,45,112,97, @@ -151,385 +151,385 @@ 105,120,32,116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,6,11, 11,80,76,84,67,79,76,76,69,67,84,83,69,97,100,100,111,110,45,100,105, 114,6,8,8,99,111,108,108,101,99,116,115,27,20,13,159,80,159,37,52,37, -254,80,159,44,53,37,249,22,29,11,80,159,46,52,37,22,146,14,10,22,153, -14,10,22,154,14,10,248,22,135,6,23,196,2,28,248,22,132,7,23,194,2, -12,86,94,248,22,155,9,23,194,1,27,20,13,159,80,159,38,52,37,254,80, -159,45,53,37,249,22,29,11,80,159,47,52,37,22,146,14,10,22,153,14,10, -22,154,14,10,248,22,135,6,23,197,2,28,248,22,132,7,23,194,2,12,86, -94,248,22,155,9,23,194,1,27,20,13,159,80,159,39,52,37,254,80,159,46, -53,37,249,22,29,11,80,159,48,52,37,22,146,14,10,22,153,14,10,22,154, -14,10,248,22,135,6,23,198,2,28,248,22,132,7,23,194,2,12,86,94,248, -22,155,9,23,194,1,248,80,159,40,8,32,39,197,28,248,22,83,23,195,2, -9,27,248,22,76,23,196,2,27,28,248,22,132,15,23,195,2,23,194,1,28, -248,22,131,15,23,195,2,249,22,133,15,23,196,1,250,80,159,43,39,39,248, -22,148,15,2,32,11,10,250,80,159,41,39,39,248,22,148,15,2,32,23,197, -1,10,28,23,193,2,249,22,75,248,22,135,15,249,22,133,15,23,198,1,247, -22,149,15,27,248,22,77,23,200,1,28,248,22,83,23,194,2,9,27,248,22, -76,23,195,2,27,28,248,22,132,15,23,195,2,23,194,1,28,248,22,131,15, -23,195,2,249,22,133,15,23,196,1,250,80,159,48,39,39,248,22,148,15,2, -32,11,10,250,80,159,46,39,39,248,22,148,15,2,32,23,197,1,10,28,23, -193,2,249,22,75,248,22,135,15,249,22,133,15,23,198,1,247,22,149,15,248, -80,159,46,8,31,39,248,22,77,23,199,1,86,94,23,193,1,248,80,159,44, -8,31,39,248,22,77,23,197,1,86,94,23,193,1,27,248,22,77,23,198,1, -28,248,22,83,23,194,2,9,27,248,22,76,23,195,2,27,28,248,22,132,15, -23,195,2,23,194,1,28,248,22,131,15,23,195,2,249,22,133,15,23,196,1, -250,80,159,46,39,39,248,22,148,15,2,32,11,10,250,80,159,44,39,39,248, -22,148,15,2,32,23,197,1,10,28,23,193,2,249,22,75,248,22,135,15,249, -22,133,15,23,198,1,247,22,149,15,248,80,159,44,8,31,39,248,22,77,23, -199,1,248,80,159,42,8,31,39,248,22,77,196,28,248,22,83,23,195,2,9, -27,248,22,76,23,196,2,27,28,248,22,132,15,23,195,2,23,194,1,28,248, -22,131,15,23,195,2,249,22,133,15,23,196,1,250,80,159,43,39,39,248,22, -148,15,2,32,11,10,250,80,159,41,39,39,248,22,148,15,2,32,23,197,1, -10,28,23,193,2,249,22,75,248,22,135,15,249,22,133,15,23,198,1,247,22, -149,15,248,80,159,41,8,30,39,248,22,77,23,200,1,248,80,159,39,8,30, -39,248,22,77,197,28,248,22,83,23,195,2,9,27,248,22,76,23,196,2,27, -28,248,22,132,15,23,195,2,23,194,1,28,248,22,131,15,23,195,2,249,22, -133,15,23,196,1,250,80,159,43,39,39,248,22,148,15,2,32,11,10,250,80, -159,41,39,39,248,22,148,15,2,32,23,197,1,10,28,23,193,2,249,22,75, -248,22,135,15,249,22,133,15,23,198,1,247,22,149,15,248,80,159,41,8,29, -39,248,22,77,23,200,1,248,80,159,39,8,29,39,248,22,77,197,27,248,22, -172,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,137,7,23, -195,2,27,248,22,130,15,195,28,192,192,248,22,131,15,195,11,86,94,28,28, -248,22,173,14,23,195,2,10,28,248,22,172,14,23,195,2,10,28,248,22,137, -7,23,195,2,28,248,22,130,15,23,195,2,10,248,22,131,15,23,195,2,11, -12,250,22,184,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, -101,2,33,23,197,2,28,28,248,22,173,14,23,195,2,249,22,147,9,248,22, -174,14,23,197,2,2,34,249,22,147,9,247,22,159,8,2,34,27,28,248,22, -137,7,23,196,2,23,195,2,248,22,149,8,248,22,177,14,23,197,2,28,249, -22,164,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, -91,92,92,93,34,23,195,2,28,248,22,137,7,195,248,22,180,14,195,194,27, -248,22,176,7,23,195,1,249,22,181,14,248,22,152,8,250,22,172,15,0,6, -35,114,120,34,47,34,28,249,22,164,15,0,22,35,114,120,34,91,47,92,92, +254,80,159,44,53,37,249,22,33,11,80,159,46,52,37,22,150,14,10,22,157, +14,10,22,158,14,10,248,22,139,6,23,196,2,28,248,22,136,7,23,194,2, +12,86,94,248,22,159,9,23,194,1,27,20,13,159,80,159,38,52,37,254,80, +159,45,53,37,249,22,33,11,80,159,47,52,37,22,150,14,10,22,157,14,10, +22,158,14,10,248,22,139,6,23,197,2,28,248,22,136,7,23,194,2,12,86, +94,248,22,159,9,23,194,1,27,20,13,159,80,159,39,52,37,254,80,159,46, +53,37,249,22,33,11,80,159,48,52,37,22,150,14,10,22,157,14,10,22,158, +14,10,248,22,139,6,23,198,2,28,248,22,136,7,23,194,2,12,86,94,248, +22,159,9,23,194,1,248,80,159,40,8,32,39,197,28,248,22,87,23,195,2, +9,27,248,22,80,23,196,2,27,28,248,22,136,15,23,195,2,23,194,1,28, +248,22,135,15,23,195,2,249,22,137,15,23,196,1,250,80,159,43,39,39,248, +22,152,15,2,32,11,10,250,80,159,41,39,39,248,22,152,15,2,32,23,197, +1,10,28,23,193,2,249,22,79,248,22,139,15,249,22,137,15,23,198,1,247, +22,153,15,27,248,22,81,23,200,1,28,248,22,87,23,194,2,9,27,248,22, +80,23,195,2,27,28,248,22,136,15,23,195,2,23,194,1,28,248,22,135,15, +23,195,2,249,22,137,15,23,196,1,250,80,159,48,39,39,248,22,152,15,2, +32,11,10,250,80,159,46,39,39,248,22,152,15,2,32,23,197,1,10,28,23, +193,2,249,22,79,248,22,139,15,249,22,137,15,23,198,1,247,22,153,15,248, +80,159,46,8,31,39,248,22,81,23,199,1,86,94,23,193,1,248,80,159,44, +8,31,39,248,22,81,23,197,1,86,94,23,193,1,27,248,22,81,23,198,1, +28,248,22,87,23,194,2,9,27,248,22,80,23,195,2,27,28,248,22,136,15, +23,195,2,23,194,1,28,248,22,135,15,23,195,2,249,22,137,15,23,196,1, +250,80,159,46,39,39,248,22,152,15,2,32,11,10,250,80,159,44,39,39,248, +22,152,15,2,32,23,197,1,10,28,23,193,2,249,22,79,248,22,139,15,249, +22,137,15,23,198,1,247,22,153,15,248,80,159,44,8,31,39,248,22,81,23, +199,1,248,80,159,42,8,31,39,248,22,81,196,28,248,22,87,23,195,2,9, +27,248,22,80,23,196,2,27,28,248,22,136,15,23,195,2,23,194,1,28,248, +22,135,15,23,195,2,249,22,137,15,23,196,1,250,80,159,43,39,39,248,22, +152,15,2,32,11,10,250,80,159,41,39,39,248,22,152,15,2,32,23,197,1, +10,28,23,193,2,249,22,79,248,22,139,15,249,22,137,15,23,198,1,247,22, +153,15,248,80,159,41,8,30,39,248,22,81,23,200,1,248,80,159,39,8,30, +39,248,22,81,197,28,248,22,87,23,195,2,9,27,248,22,80,23,196,2,27, +28,248,22,136,15,23,195,2,23,194,1,28,248,22,135,15,23,195,2,249,22, +137,15,23,196,1,250,80,159,43,39,39,248,22,152,15,2,32,11,10,250,80, +159,41,39,39,248,22,152,15,2,32,23,197,1,10,28,23,193,2,249,22,79, +248,22,139,15,249,22,137,15,23,198,1,247,22,153,15,248,80,159,41,8,29, +39,248,22,81,23,200,1,248,80,159,39,8,29,39,248,22,81,197,27,248,22, +176,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,141,7,23, +195,2,27,248,22,134,15,195,28,192,192,248,22,135,15,195,11,86,94,28,28, +248,22,177,14,23,195,2,10,28,248,22,176,14,23,195,2,10,28,248,22,141, +7,23,195,2,28,248,22,134,15,23,195,2,10,248,22,135,15,23,195,2,11, +12,250,22,188,9,76,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115, +101,2,33,23,197,2,28,28,248,22,177,14,23,195,2,249,22,151,9,248,22, +178,14,23,197,2,2,34,249,22,151,9,247,22,163,8,2,34,27,28,248,22, +141,7,23,196,2,23,195,2,248,22,153,8,248,22,181,14,23,197,2,28,249, +22,168,15,0,21,35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93, +91,92,92,93,34,23,195,2,28,248,22,141,7,195,248,22,184,14,195,194,27, +248,22,180,7,23,195,1,249,22,185,14,248,22,156,8,250,22,176,15,0,6, +35,114,120,34,47,34,28,249,22,168,15,0,22,35,114,120,34,91,47,92,92, 93,91,46,32,93,43,91,47,92,92,93,42,36,34,23,201,2,23,199,1,250, -22,172,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, +22,176,15,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93,42, 41,36,34,23,202,1,6,2,2,92,49,80,159,44,37,38,2,34,28,248,22, -137,7,194,248,22,180,14,194,193,32,58,88,163,8,36,39,53,11,70,102,111, +141,7,194,248,22,184,14,194,193,32,58,88,163,8,36,39,53,11,70,102,111, 117,110,100,45,101,120,101,99,222,33,61,32,59,88,163,8,36,40,58,11,64, -110,101,120,116,222,33,60,27,248,22,134,15,23,196,2,28,249,22,149,9,23, -195,2,23,197,1,11,28,248,22,130,15,23,194,2,27,249,22,190,14,23,197, -1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,129,15, -23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,134,15, -23,199,2,28,249,22,149,9,23,195,2,23,200,2,11,28,248,22,130,15,23, -194,2,250,2,58,23,205,2,23,206,2,249,22,190,14,23,200,2,23,198,1, +110,101,120,116,222,33,60,27,248,22,138,15,23,196,2,28,249,22,153,9,23, +195,2,23,197,1,11,28,248,22,134,15,23,194,2,27,249,22,130,15,23,197, +1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,36,11,248,22,133,15, +23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,138,15, +23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22,134,15,23, +194,2,250,2,58,23,205,2,23,206,2,249,22,130,15,23,200,2,23,198,1, 250,2,58,23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23, -193,1,27,28,248,22,172,14,23,196,2,27,249,22,190,14,23,198,2,23,205, -2,28,28,248,22,185,14,193,10,248,22,184,14,193,192,11,11,28,23,193,2, -192,86,94,23,193,1,28,23,203,2,11,27,248,22,134,15,23,200,2,28,249, -22,149,9,23,195,2,23,201,1,11,28,248,22,130,15,23,194,2,250,2,58, -23,206,1,23,207,1,249,22,190,14,23,201,1,23,198,1,250,2,58,205,206, +193,1,27,28,248,22,176,14,23,196,2,27,249,22,130,15,23,198,2,23,205, +2,28,28,248,22,189,14,193,10,248,22,188,14,193,192,11,11,28,23,193,2, +192,86,94,23,193,1,28,23,203,2,11,27,248,22,138,15,23,200,2,28,249, +22,153,9,23,195,2,23,201,1,11,28,248,22,134,15,23,194,2,250,2,58, +23,206,1,23,207,1,249,22,130,15,23,201,1,23,198,1,250,2,58,205,206, 195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,89,161,39,36,11,248, -22,129,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, -22,134,15,23,199,2,28,249,22,149,9,23,195,2,23,200,2,11,28,248,22, -130,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,190,14,23,200,2, +22,133,15,23,197,2,86,95,23,195,1,23,194,1,27,28,23,201,2,27,248, +22,138,15,23,199,2,28,249,22,153,9,23,195,2,23,200,2,11,28,248,22, +134,15,23,194,2,250,2,58,23,204,2,23,205,2,249,22,130,15,23,200,2, 23,198,1,250,2,58,23,204,2,23,205,2,23,196,1,11,28,23,193,2,192, -86,94,23,193,1,27,28,248,22,172,14,23,196,2,27,249,22,190,14,23,198, -2,23,204,2,28,28,248,22,185,14,193,10,248,22,184,14,193,192,11,11,28, -23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,134,15,23,200, -2,28,249,22,149,9,23,195,2,23,201,1,11,28,248,22,130,15,23,194,2, -250,2,58,23,205,1,23,206,1,249,22,190,14,23,201,1,23,198,1,250,2, -58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,129, +86,94,23,193,1,27,28,248,22,176,14,23,196,2,27,249,22,130,15,23,198, +2,23,204,2,28,28,248,22,189,14,193,10,248,22,188,14,193,192,11,11,28, +23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,248,22,138,15,23,200, +2,28,249,22,153,9,23,195,2,23,201,1,11,28,248,22,134,15,23,194,2, +250,2,58,23,205,1,23,206,1,249,22,130,15,23,201,1,23,198,1,250,2, +58,204,205,195,192,28,23,193,2,90,159,39,11,89,161,39,36,11,248,22,133, 15,23,199,2,86,95,23,195,1,23,194,1,27,28,23,198,2,251,2,59,23, 198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,2,192,86,94,23,193, -1,27,28,248,22,172,14,195,27,249,22,190,14,197,200,28,28,248,22,185,14, -193,10,248,22,184,14,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, -201,202,194,32,62,88,163,8,36,40,58,11,2,31,222,33,63,28,248,22,83, -23,197,2,11,27,248,22,133,15,248,22,76,23,199,2,27,249,22,190,14,23, -196,1,23,197,2,28,248,22,184,14,23,194,2,250,2,58,198,199,195,86,94, -23,193,1,27,248,22,77,23,200,1,28,248,22,83,23,194,2,11,27,248,22, -133,15,248,22,76,23,196,2,27,249,22,190,14,23,196,1,23,200,2,28,248, -22,184,14,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,77, -23,197,1,28,248,22,83,23,194,2,11,27,248,22,133,15,248,22,76,195,27, -249,22,190,14,23,196,1,202,28,248,22,184,14,193,250,2,58,204,205,195,251, -2,62,204,205,206,248,22,77,199,86,95,28,28,248,22,172,14,23,195,2,10, -28,248,22,137,7,23,195,2,28,248,22,130,15,23,195,2,10,248,22,131,15, -23,195,2,11,12,250,22,184,9,2,5,2,35,23,197,2,28,28,23,195,2, -28,28,248,22,172,14,23,196,2,10,28,248,22,137,7,23,196,2,28,248,22, -130,15,23,196,2,10,248,22,131,15,23,196,2,11,248,22,130,15,23,196,2, -11,10,12,250,22,184,9,2,5,6,45,45,40,111,114,47,99,32,35,102,32, +1,27,28,248,22,176,14,195,27,249,22,130,15,197,200,28,28,248,22,189,14, +193,10,248,22,188,14,193,192,11,11,28,192,192,28,198,11,251,2,59,198,203, +201,202,194,32,62,88,163,8,36,40,58,11,2,31,222,33,63,28,248,22,87, +23,197,2,11,27,248,22,137,15,248,22,80,23,199,2,27,249,22,130,15,23, +196,1,23,197,2,28,248,22,188,14,23,194,2,250,2,58,198,199,195,86,94, +23,193,1,27,248,22,81,23,200,1,28,248,22,87,23,194,2,11,27,248,22, +137,15,248,22,80,23,196,2,27,249,22,130,15,23,196,1,23,200,2,28,248, +22,188,14,23,194,2,250,2,58,201,202,195,86,94,23,193,1,27,248,22,81, +23,197,1,28,248,22,87,23,194,2,11,27,248,22,137,15,248,22,80,195,27, +249,22,130,15,23,196,1,202,28,248,22,188,14,193,250,2,58,204,205,195,251, +2,62,204,205,206,248,22,81,199,86,95,28,28,248,22,176,14,23,195,2,10, +28,248,22,141,7,23,195,2,28,248,22,134,15,23,195,2,10,248,22,135,15, +23,195,2,11,12,250,22,188,9,2,5,2,35,23,197,2,28,28,23,195,2, +28,28,248,22,176,14,23,196,2,10,28,248,22,141,7,23,196,2,28,248,22, +134,15,23,196,2,10,248,22,135,15,23,196,2,11,248,22,134,15,23,196,2, +11,10,12,250,22,188,9,2,5,6,45,45,40,111,114,47,99,32,35,102,32, 40,97,110,100,47,99,32,112,97,116,104,45,115,116,114,105,110,103,63,32,114, 101,108,97,116,105,118,101,45,112,97,116,104,63,41,41,23,198,2,28,28,248, -22,130,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,129,15,23,198, -2,249,22,147,9,194,2,36,11,27,248,22,157,8,6,4,4,80,65,84,72, +22,134,15,23,195,2,90,159,39,11,89,161,39,36,11,248,22,133,15,23,198, +2,249,22,151,9,194,2,36,11,27,248,22,161,8,6,4,4,80,65,84,72, 27,28,23,194,2,249,80,158,40,40,23,196,1,9,86,94,23,194,1,9,27, -28,249,22,147,9,247,22,159,8,2,34,249,22,75,248,22,181,14,5,1,46, -23,196,1,23,194,1,28,248,22,83,23,194,2,11,27,248,22,133,15,248,22, -76,23,196,2,27,249,22,190,14,23,196,1,23,201,2,28,248,22,184,14,23, -194,2,250,2,58,202,203,195,86,94,23,193,1,27,248,22,77,23,197,1,28, -248,22,83,23,194,2,11,27,248,22,133,15,248,22,76,23,196,2,27,249,22, -190,14,23,196,1,23,204,2,28,248,22,184,14,23,194,2,250,2,58,205,206, -195,86,94,23,193,1,27,248,22,77,23,197,1,28,248,22,83,23,194,2,11, -27,248,22,133,15,248,22,76,195,27,249,22,190,14,23,196,1,206,28,248,22, -184,14,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, -22,77,199,27,248,22,133,15,23,196,1,28,248,22,184,14,193,250,2,58,198, +28,249,22,151,9,247,22,163,8,2,34,249,22,79,248,22,185,14,5,1,46, +23,196,1,23,194,1,28,248,22,87,23,194,2,11,27,248,22,137,15,248,22, +80,23,196,2,27,249,22,130,15,23,196,1,23,201,2,28,248,22,188,14,23, +194,2,250,2,58,202,203,195,86,94,23,193,1,27,248,22,81,23,197,1,28, +248,22,87,23,194,2,11,27,248,22,137,15,248,22,80,23,196,2,27,249,22, +130,15,23,196,1,23,204,2,28,248,22,188,14,23,194,2,250,2,58,205,206, +195,86,94,23,193,1,27,248,22,81,23,197,1,28,248,22,87,23,194,2,11, +27,248,22,137,15,248,22,80,195,27,249,22,130,15,23,196,1,206,28,248,22, +188,14,193,250,2,58,23,16,23,17,195,251,2,62,23,16,23,17,23,18,248, +22,81,199,27,248,22,137,15,23,196,1,28,248,22,188,14,193,250,2,58,198, 199,195,11,250,80,159,39,39,39,196,197,11,250,80,159,39,39,39,196,11,11, 32,67,88,163,8,36,39,57,11,2,31,222,33,69,0,8,35,114,120,35,34, -92,34,34,27,249,22,160,15,23,197,2,23,198,2,28,23,193,2,86,94,23, -196,1,27,248,22,100,23,195,2,27,27,248,22,109,23,197,1,27,249,22,160, -15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,100,23, -195,2,27,250,2,67,23,203,2,23,204,1,248,22,109,23,199,1,28,249,22, -134,8,23,196,2,2,37,249,22,89,23,202,2,194,249,22,75,248,22,181,14, -28,249,22,147,9,247,22,159,8,2,34,250,22,172,15,2,68,23,200,1,2, -37,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,134,8,23,196,2, -2,37,249,22,89,23,200,2,9,249,22,75,248,22,181,14,28,249,22,147,9, -247,22,159,8,2,34,250,22,172,15,2,68,23,200,1,2,37,23,197,1,9, -28,249,22,134,8,23,196,2,2,37,249,22,89,197,194,86,94,23,196,1,249, -22,75,248,22,181,14,28,249,22,147,9,247,22,159,8,2,34,250,22,172,15, -2,68,23,200,1,2,37,23,197,1,194,86,94,23,193,1,28,249,22,134,8, -23,198,2,2,37,249,22,89,195,9,86,94,23,194,1,249,22,75,248,22,181, -14,28,249,22,147,9,247,22,159,8,2,34,250,22,172,15,2,68,23,202,1, -2,37,23,199,1,9,86,95,28,28,248,22,190,7,194,10,248,22,137,7,194, -12,250,22,184,9,2,6,6,21,21,40,111,114,47,99,32,98,121,116,101,115, -63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,84,195,249,22,4,22, -172,14,196,11,12,250,22,184,9,2,6,6,14,14,40,108,105,115,116,111,102, -32,112,97,116,104,63,41,197,250,2,67,197,195,28,248,22,137,7,197,248,22, -151,8,197,196,86,94,28,28,248,22,172,14,194,10,28,248,22,137,7,194,28, -248,22,130,15,194,10,248,22,131,15,194,11,12,250,22,184,9,195,2,35,196, -28,248,22,130,15,194,12,251,22,186,9,196,2,38,2,39,197,86,94,28,28, -248,22,172,14,194,10,28,248,22,137,7,194,28,248,22,130,15,194,10,248,22, -131,15,194,11,12,250,22,184,9,195,2,35,196,28,248,22,130,15,194,12,251, -22,186,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,172,14,23,195, -2,10,28,248,22,137,7,23,195,2,28,248,22,130,15,23,195,2,10,248,22, -131,15,23,195,2,11,12,250,22,184,9,195,2,35,23,197,2,28,248,22,130, -15,23,195,2,12,251,22,186,9,196,2,38,2,39,23,198,1,249,22,3,88, -163,8,36,37,47,11,9,223,2,33,72,196,28,28,248,22,0,194,249,22,46, -195,37,11,12,250,22,184,9,195,2,40,196,86,94,28,28,248,22,172,14,193, -10,28,248,22,137,7,193,28,248,22,130,15,193,10,248,22,131,15,193,11,12, -250,22,184,9,2,10,2,35,195,28,248,22,130,15,193,12,251,22,186,9,2, -10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,172,14,195,10,28, -248,22,137,7,195,28,248,22,130,15,195,10,248,22,131,15,195,11,12,250,22, -184,9,2,10,2,35,197,28,248,22,130,15,195,12,251,22,186,9,2,10,2, +92,34,34,27,249,22,164,15,23,197,2,23,198,2,28,23,193,2,86,94,23, +196,1,27,248,22,104,23,195,2,27,27,248,22,113,23,197,1,27,249,22,164, +15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,104,23, +195,2,27,250,2,67,23,203,2,23,204,1,248,22,113,23,199,1,28,249,22, +138,8,23,196,2,2,37,249,22,93,23,202,2,194,249,22,79,248,22,185,14, +28,249,22,151,9,247,22,163,8,2,34,250,22,176,15,2,68,23,200,1,2, +37,23,197,1,194,86,95,23,199,1,23,193,1,28,249,22,138,8,23,196,2, +2,37,249,22,93,23,200,2,9,249,22,79,248,22,185,14,28,249,22,151,9, +247,22,163,8,2,34,250,22,176,15,2,68,23,200,1,2,37,23,197,1,9, +28,249,22,138,8,23,196,2,2,37,249,22,93,197,194,86,94,23,196,1,249, +22,79,248,22,185,14,28,249,22,151,9,247,22,163,8,2,34,250,22,176,15, +2,68,23,200,1,2,37,23,197,1,194,86,94,23,193,1,28,249,22,138,8, +23,198,2,2,37,249,22,93,195,9,86,94,23,194,1,249,22,79,248,22,185, +14,28,249,22,151,9,247,22,163,8,2,34,250,22,176,15,2,68,23,202,1, +2,37,23,199,1,9,86,95,28,28,248,22,130,8,194,10,248,22,141,7,194, +12,250,22,188,9,2,6,6,21,21,40,111,114,47,99,32,98,121,116,101,115, +63,32,115,116,114,105,110,103,63,41,196,28,28,248,22,88,195,249,22,4,22, +176,14,196,11,12,250,22,188,9,2,6,6,14,14,40,108,105,115,116,111,102, +32,112,97,116,104,63,41,197,250,2,67,197,195,28,248,22,141,7,197,248,22, +155,8,197,196,86,94,28,28,248,22,176,14,194,10,28,248,22,141,7,194,28, +248,22,134,15,194,10,248,22,135,15,194,11,12,250,22,188,9,195,2,35,196, +28,248,22,134,15,194,12,251,22,190,9,196,2,38,2,39,197,86,94,28,28, +248,22,176,14,194,10,28,248,22,141,7,194,28,248,22,134,15,194,10,248,22, +135,15,194,11,12,250,22,188,9,195,2,35,196,28,248,22,134,15,194,12,251, +22,190,9,196,2,38,2,39,197,86,94,86,94,28,28,248,22,176,14,23,195, +2,10,28,248,22,141,7,23,195,2,28,248,22,134,15,23,195,2,10,248,22, +135,15,23,195,2,11,12,250,22,188,9,195,2,35,23,197,2,28,248,22,134, +15,23,195,2,12,251,22,190,9,196,2,38,2,39,23,198,1,249,22,3,88, +163,8,36,37,47,11,9,223,2,33,72,196,28,28,248,22,0,194,249,22,50, +195,37,11,12,250,22,188,9,195,2,40,196,86,94,28,28,248,22,176,14,193, +10,28,248,22,141,7,193,28,248,22,134,15,193,10,248,22,135,15,193,11,12, +250,22,188,9,2,10,2,35,195,28,248,22,134,15,193,12,251,22,190,9,2, +10,2,38,2,39,196,86,95,86,94,86,94,28,28,248,22,176,14,195,10,28, +248,22,141,7,195,28,248,22,134,15,195,10,248,22,135,15,195,11,12,250,22, +188,9,2,10,2,35,197,28,248,22,134,15,195,12,251,22,190,9,2,10,2, 38,2,39,198,249,22,3,32,0,88,163,8,36,37,46,11,9,222,33,75,197, -28,28,248,22,0,194,249,22,46,195,37,11,12,250,22,184,9,2,10,2,40, -196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,172,14,193,10,28, -248,22,137,7,193,28,248,22,130,15,193,10,248,22,131,15,193,11,12,250,22, -184,9,2,12,2,35,195,28,248,22,130,15,193,12,251,22,186,9,2,12,2, -38,2,39,196,86,96,86,94,28,28,248,22,172,14,195,10,28,248,22,137,7, -195,28,248,22,130,15,195,10,248,22,131,15,195,11,12,250,22,184,9,2,12, -2,35,197,28,248,22,130,15,195,12,251,22,186,9,2,12,2,38,2,39,198, -86,94,86,94,28,28,248,22,172,14,196,10,28,248,22,137,7,196,28,248,22, -130,15,196,10,248,22,131,15,196,11,12,250,22,184,9,2,12,2,35,198,28, -248,22,130,15,196,12,251,22,186,9,2,12,2,38,2,39,199,249,22,3,32, +28,28,248,22,0,194,249,22,50,195,37,11,12,250,22,188,9,2,10,2,40, +196,251,80,158,40,45,197,198,199,11,86,94,28,28,248,22,176,14,193,10,28, +248,22,141,7,193,28,248,22,134,15,193,10,248,22,135,15,193,11,12,250,22, +188,9,2,12,2,35,195,28,248,22,134,15,193,12,251,22,190,9,2,12,2, +38,2,39,196,86,96,86,94,28,28,248,22,176,14,195,10,28,248,22,141,7, +195,28,248,22,134,15,195,10,248,22,135,15,195,11,12,250,22,188,9,2,12, +2,35,197,28,248,22,134,15,195,12,251,22,190,9,2,12,2,38,2,39,198, +86,94,86,94,28,28,248,22,176,14,196,10,28,248,22,141,7,196,28,248,22, +134,15,196,10,248,22,135,15,196,11,12,250,22,188,9,2,12,2,35,198,28, +248,22,134,15,196,12,251,22,190,9,2,12,2,38,2,39,199,249,22,3,32, 0,88,163,8,36,37,46,11,9,222,33,77,198,28,28,248,22,0,194,249,22, -46,195,37,11,12,250,22,184,9,2,12,2,40,196,251,80,158,40,45,197,199, -200,198,0,6,45,105,110,102,46,48,27,248,22,148,15,2,41,27,28,248,22, -131,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, -22,29,11,80,159,43,52,37,22,149,15,248,22,148,15,68,111,114,105,103,45, -100,105,114,27,248,22,148,15,2,32,250,80,159,42,39,39,23,196,1,23,198, -1,11,28,192,250,22,190,14,195,6,6,6,99,111,110,102,105,103,6,10,10, -108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,143,10,28,249,22, -135,10,23,195,2,2,42,251,22,139,10,23,197,1,2,42,250,22,185,7,2, -43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,178,11,23,205, -1,247,22,25,12,248,193,247,22,136,2,2,79,86,95,27,247,22,143,10,28, -249,22,135,10,23,195,2,2,42,251,22,139,10,23,197,1,2,42,250,22,185, -7,2,43,28,202,80,159,47,47,38,80,159,47,50,38,248,22,178,11,23,206, -1,247,22,25,12,28,192,28,194,86,94,20,18,159,11,80,158,39,48,247,22, -136,2,20,18,159,11,80,158,39,49,192,86,94,20,18,159,11,80,158,39,54, -247,22,136,2,20,18,159,11,80,158,39,55,192,12,248,194,247,22,136,2,20, -20,94,248,22,135,6,23,194,2,28,248,22,132,7,248,22,135,6,23,195,1, -12,248,22,180,9,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105, -110,103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110,248,22,187,5, -193,28,248,22,84,23,194,2,28,28,249,22,187,3,38,248,22,88,23,196,2, -10,249,22,187,3,39,248,22,88,23,196,2,28,28,248,22,137,7,248,22,76, -23,195,2,10,249,22,147,9,64,114,111,111,116,248,22,76,23,196,2,28,27, -248,22,100,194,28,248,22,172,14,23,194,2,10,28,248,22,137,7,23,194,2, -28,248,22,130,15,23,194,2,10,248,22,131,15,23,194,1,11,27,248,22,83, -248,22,102,195,28,192,192,248,22,173,15,248,22,109,195,11,11,11,11,250,22, -154,2,196,197,249,22,75,197,200,28,28,248,22,83,248,22,102,23,197,2,10, -249,22,164,15,248,22,109,23,198,2,247,22,155,8,27,248,22,135,15,249,22, -133,15,248,22,100,23,200,2,23,198,1,28,248,22,60,248,22,76,23,198,2, -86,94,23,196,1,86,94,28,250,22,156,2,196,11,11,12,250,22,154,2,196, -11,9,249,22,160,2,195,88,163,8,36,38,50,11,9,224,3,2,33,87,27, -248,22,63,248,22,76,23,199,1,250,22,154,2,23,198,2,23,196,2,249,22, -75,248,22,127,23,200,1,250,22,156,2,23,203,1,23,201,1,9,12,250,22, -154,2,195,196,248,22,90,198,20,13,159,80,159,37,57,37,88,163,36,37,54, -8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,143,15,28,23,197, -2,80,159,41,47,38,80,159,41,50,38,11,32,0,88,163,8,36,36,41,11, -9,222,33,82,28,249,22,189,3,23,195,2,28,23,196,2,80,158,40,49,80, -158,40,55,20,13,159,80,159,38,57,37,20,20,94,88,163,36,37,55,8,240, -0,120,12,0,9,226,2,1,3,0,33,83,23,196,1,20,13,159,80,159,38, -52,37,26,29,80,159,8,31,53,37,249,22,29,11,80,159,8,33,52,37,22, -142,14,10,22,143,14,10,22,144,14,10,22,147,14,10,22,146,14,10,22,148, -14,10,22,145,14,10,22,149,14,10,22,150,14,10,22,151,14,10,22,152,14, -10,22,153,14,10,22,154,14,11,22,140,14,11,27,249,22,178,5,28,196,80, -159,41,47,38,80,159,41,50,38,66,98,105,110,97,114,121,27,250,22,42,22, -33,88,163,8,36,36,44,11,9,223,4,33,84,20,20,94,88,163,36,36,43, -11,9,223,4,33,85,23,197,1,86,94,28,28,248,22,84,23,194,2,249,22, -4,32,0,88,163,8,36,37,45,11,9,222,33,86,23,195,2,11,12,248,22, -180,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116,101, -110,116,27,247,22,136,2,27,90,159,39,11,89,161,39,36,11,248,22,129,15, -28,201,80,159,46,47,38,80,159,46,50,38,192,86,96,249,22,3,20,20,94, -88,163,8,36,37,54,11,9,224,2,3,33,88,23,195,1,23,197,1,249,22, -160,2,195,88,163,8,36,38,48,11,9,223,3,33,89,28,197,86,94,20,18, -159,11,80,158,42,48,193,20,18,159,11,80,158,42,49,196,86,94,20,18,159, -11,80,158,42,54,193,20,18,159,11,80,158,42,55,196,193,28,193,80,158,38, -48,80,158,38,54,248,22,9,88,163,8,32,37,8,40,8,240,0,120,47,0, -9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,137,7,23, -195,2,27,249,22,162,15,2,92,196,28,192,28,249,22,187,3,248,22,99,195, -248,22,177,3,248,22,140,7,198,249,22,7,250,22,159,7,199,36,248,22,99, -198,197,249,22,7,250,22,159,7,199,36,248,22,99,198,249,22,75,249,22,159, -7,200,248,22,101,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36,11, -248,22,129,15,23,198,1,86,94,23,195,1,28,249,22,147,9,23,195,2,2, -36,249,22,7,195,199,27,249,22,75,23,197,1,23,201,1,28,248,22,137,7, -23,195,2,27,249,22,162,15,2,92,196,28,192,28,249,22,187,3,248,22,99, -195,248,22,177,3,248,22,140,7,198,249,22,7,250,22,159,7,199,36,248,22, -99,198,195,249,22,7,250,22,159,7,199,36,248,22,99,198,249,22,75,249,22, -159,7,200,248,22,101,199,197,249,22,7,196,195,90,159,39,11,89,161,39,36, -11,248,22,129,15,23,198,1,28,249,22,147,9,194,2,36,249,22,7,195,197, -249,80,159,45,58,39,194,249,22,75,197,199,32,94,88,163,36,43,8,26,11, -65,99,108,111,111,112,222,33,103,32,95,88,163,8,36,37,47,11,2,31,222, -33,98,32,96,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103,222, -33,97,28,248,22,172,14,193,248,22,176,14,193,192,28,248,22,83,248,22,77, -23,195,2,248,22,85,248,2,96,248,22,76,23,196,1,250,22,86,248,2,96, -248,22,76,23,198,2,2,45,248,2,95,248,22,77,23,198,1,249,22,185,7, -2,46,194,32,100,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33,101, -28,248,22,83,23,195,2,9,28,248,23,194,2,248,22,76,23,196,2,249,22, -75,248,22,76,23,197,2,249,2,100,23,197,1,248,22,77,23,199,1,249,2, -100,194,248,22,77,196,249,22,185,7,2,46,248,22,130,2,23,196,1,28,248, -22,83,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,190,14,200, -198,198,27,28,248,22,83,23,197,2,2,44,249,22,1,22,160,7,248,2,95, -23,199,2,248,23,198,1,251,22,185,7,6,70,70,99,111,108,108,101,99,116, -105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108,101, -99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108,108,101,99, -116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126,97, -28,248,22,83,23,202,1,248,2,96,23,201,1,250,22,160,7,248,2,96,23, -204,1,2,45,23,201,2,249,22,1,22,160,7,249,22,2,32,0,88,163,8, -36,37,44,11,9,222,33,99,249,2,100,22,172,14,23,205,2,28,249,22,5, -22,129,2,23,201,2,250,22,185,7,6,49,49,10,32,32,32,115,117,98,45, -99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,112, -97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,23, -201,1,250,22,1,22,160,7,248,22,2,32,0,88,163,8,36,37,45,11,9, -222,33,102,249,2,100,22,129,2,23,207,1,86,95,23,199,1,23,198,1,2, -44,27,248,22,76,23,200,2,27,28,248,22,172,14,23,195,2,249,22,190,14, -23,196,1,23,198,2,248,22,130,2,23,195,1,28,28,248,22,172,14,248,22, -76,23,202,2,248,22,185,14,23,194,2,10,27,250,22,1,22,190,14,23,197, -1,23,201,2,28,28,248,22,83,23,199,2,10,248,22,185,14,23,194,2,28, -23,200,2,28,28,248,22,184,14,249,22,190,14,195,202,10,27,28,248,22,172, -14,201,248,22,176,14,201,200,27,248,22,140,7,23,195,2,27,28,249,22,191, -3,23,196,2,40,28,249,22,143,7,6,4,4,46,114,107,116,249,22,159,7, -23,199,2,249,22,179,3,23,200,2,40,249,22,160,7,250,22,159,7,23,200, -1,36,249,22,179,3,23,201,1,40,6,3,3,46,115,115,86,95,23,195,1, -23,194,1,11,11,28,23,193,2,248,22,184,14,249,22,190,14,198,23,196,1, -11,28,199,249,22,190,14,194,201,192,254,2,94,202,203,204,205,206,248,22,77, -23,16,28,23,16,23,16,199,28,199,249,22,190,14,194,201,192,254,2,94,202, -203,204,205,206,248,22,77,23,16,23,16,254,2,94,201,202,203,204,205,248,22, -77,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159,40,58,39,23, -199,1,23,200,1,27,248,22,63,28,248,22,172,14,195,248,22,176,14,195,194, -27,247,22,153,15,27,250,22,89,28,23,197,2,28,247,22,152,15,27,248,80, -159,46,56,39,10,27,250,22,156,2,23,197,2,23,203,2,11,28,23,193,2, -192,86,94,23,193,1,250,22,156,2,23,197,1,11,9,9,9,28,23,197,1, -28,80,159,44,50,38,27,248,80,159,46,56,39,11,27,250,22,156,2,23,197, -2,23,203,1,11,28,23,193,2,192,86,94,23,193,1,250,22,156,2,23,197, -1,11,9,86,94,23,198,1,9,9,247,22,150,15,254,2,94,199,202,203,205, -23,16,199,11,86,95,28,28,248,22,173,14,23,194,2,10,28,248,22,172,14, -23,194,2,10,28,248,22,137,7,23,194,2,28,248,22,130,15,23,194,2,10, -248,22,131,15,23,194,2,11,12,252,22,184,9,23,200,2,2,33,36,23,198, -2,23,199,2,28,28,248,22,137,7,23,195,2,10,248,22,190,7,23,195,2, -86,94,23,194,1,12,252,22,184,9,23,200,2,2,47,37,23,198,2,23,199, -1,90,159,39,11,89,161,39,36,11,248,22,129,15,23,197,2,86,94,23,195, -1,86,94,28,192,12,250,22,187,9,23,201,1,2,48,23,199,1,249,22,7, -194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,173,14,23,196, -2,10,28,248,22,172,14,23,196,2,10,28,248,22,137,7,23,196,2,28,248, -22,130,15,23,196,2,10,248,22,131,15,23,196,2,11,12,252,22,184,9,2, -26,2,33,36,23,200,2,23,201,2,28,28,248,22,137,7,23,197,2,10,248, -22,190,7,23,197,2,12,252,22,184,9,2,26,2,47,37,23,200,2,23,201, -2,90,159,39,11,89,161,39,36,11,248,22,129,15,23,199,2,86,94,23,195, -1,86,94,28,192,12,250,22,187,9,2,26,2,48,23,201,2,249,22,7,194, -195,27,249,22,182,14,250,22,171,15,0,20,35,114,120,35,34,40,63,58,91, -46,93,91,94,46,93,42,124,41,36,34,248,22,178,14,23,201,1,28,248,22, -137,7,23,203,2,249,22,152,8,23,204,1,8,63,23,202,1,28,248,22,173, -14,23,199,2,248,22,174,14,23,199,1,86,94,23,198,1,247,22,175,14,28, -248,22,172,14,194,249,22,190,14,195,194,192,90,159,38,11,89,161,38,36,11, -86,95,28,28,248,22,173,14,23,196,2,10,28,248,22,172,14,23,196,2,10, -28,248,22,137,7,23,196,2,28,248,22,130,15,23,196,2,10,248,22,131,15, -23,196,2,11,12,252,22,184,9,2,27,2,33,36,23,200,2,23,201,2,28, -28,248,22,137,7,23,197,2,10,248,22,190,7,23,197,2,12,252,22,184,9, -2,27,2,47,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11,248, -22,129,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,187,9,2, -27,2,48,23,201,2,249,22,7,194,195,27,249,22,182,14,249,22,138,8,250, -22,172,15,0,9,35,114,120,35,34,91,46,93,34,248,22,178,14,23,203,1, -6,1,1,95,28,248,22,137,7,23,202,2,249,22,152,8,23,203,1,8,63, -23,201,1,28,248,22,173,14,23,199,2,248,22,174,14,23,199,1,86,94,23, -198,1,247,22,175,14,28,248,22,172,14,194,249,22,190,14,195,194,192,249,247, -22,167,5,194,11,249,247,22,167,5,194,11,27,247,22,152,15,249,80,159,39, -40,38,28,23,195,2,27,248,22,157,8,2,49,28,192,192,2,44,2,44,27, -28,23,196,1,250,22,190,14,248,22,148,15,2,50,247,22,155,8,2,51,11, -27,248,80,159,42,8,29,39,250,22,89,9,248,22,85,248,22,148,15,2,41, -9,28,193,249,22,75,195,194,192,27,247,22,152,15,249,80,159,39,40,38,28, -23,195,2,27,248,22,157,8,2,49,28,192,192,2,44,2,44,27,28,23,196, -1,250,22,190,14,248,22,148,15,2,50,247,22,155,8,2,51,11,27,248,80, -159,42,8,30,39,250,22,89,23,203,1,248,22,85,248,22,148,15,2,41,9, -28,193,249,22,75,195,194,192,27,247,22,152,15,249,80,159,39,40,38,28,23, -195,2,27,248,22,157,8,2,49,28,192,192,2,44,2,44,27,28,23,196,1, -250,22,190,14,248,22,148,15,2,50,247,22,155,8,2,51,11,27,248,80,159, -42,8,31,39,250,22,89,23,203,1,248,22,85,248,22,148,15,2,41,23,204, -1,28,193,249,22,75,195,194,192,86,94,249,22,190,6,247,22,163,5,195,248, -22,150,6,249,22,131,4,36,249,22,179,3,197,198,27,28,23,197,2,86,95, -23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,148,15,2,32, -27,250,80,159,42,39,39,23,197,1,11,11,27,248,22,134,4,23,199,1,27, -28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,134,4,23,202,1, -27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,130,6,23,199,1, -20,20,95,88,163,8,36,36,48,11,9,224,4,2,33,113,23,195,1,23,197, -1,27,248,22,179,5,23,195,1,248,80,159,39,8,32,39,193,159,36,20,113, -159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9,9, -11,11,11,10,43,80,158,36,36,20,113,159,40,16,29,2,2,2,3,2,4, -2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2, -15,2,16,30,2,19,76,102,105,110,100,45,108,105,110,107,115,45,112,97,116, -104,33,4,30,2,20,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116, -105,111,110,45,107,101,121,6,30,2,20,1,23,101,120,116,101,110,100,45,112, -97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,2,21,2,22,2, -23,30,2,19,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100,108, -101,114,45,107,101,121,2,2,24,2,25,2,26,2,27,2,28,2,29,2,30, -16,0,37,39,36,16,0,36,16,13,2,8,2,9,2,7,2,3,2,25,2, -23,2,21,2,16,2,22,2,24,2,14,2,13,2,15,49,11,11,11,16,12, -2,12,2,10,2,30,2,11,2,5,2,29,2,28,2,4,2,27,2,6,2, -26,2,2,16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,12, -2,10,2,30,2,11,2,5,2,29,2,28,2,4,2,27,2,6,2,26,2, -2,48,48,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0, -16,0,16,0,36,36,16,29,20,15,16,2,88,163,8,36,37,55,16,4,36, -39,37,36,2,31,223,0,33,52,80,159,36,8,32,39,20,15,16,2,88,163, -8,36,37,56,16,2,44,8,240,0,128,0,0,2,31,223,0,33,53,80,159, -36,8,31,39,20,15,16,2,88,163,8,36,37,51,16,2,44,8,240,0,64, -0,0,2,31,223,0,33,54,80,159,36,8,30,39,20,15,16,2,88,163,8, -36,37,51,16,2,44,8,128,128,2,31,223,0,33,55,80,159,36,8,29,39, -20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,56,80,159,36,36, -37,20,15,16,2,249,22,139,7,7,92,7,92,80,159,36,37,37,20,15,16, -2,88,163,36,37,54,38,2,4,223,0,33,57,80,159,36,38,37,20,15,16, -2,20,25,96,2,5,88,163,8,36,39,8,25,52,9,223,0,33,64,88,163, -36,38,47,44,9,223,0,33,65,88,163,36,37,46,44,9,223,0,33,66,80, -159,36,39,37,20,15,16,2,27,248,22,156,15,248,22,151,8,27,28,249,22, -147,9,247,22,159,8,2,34,6,1,1,59,6,1,1,58,250,22,185,7,6, -14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23,196, -1,88,163,8,36,38,48,11,2,6,223,0,33,70,80,159,36,40,37,20,15, -16,2,32,0,88,163,8,36,38,47,11,2,7,222,33,71,80,159,36,41,37, -20,15,16,2,32,0,88,163,8,36,39,48,11,2,8,222,33,73,80,159,36, -42,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,9,222,33,74,80, -159,36,43,37,20,15,16,2,88,163,45,39,49,8,128,8,2,10,223,0,33, -76,80,159,36,44,37,20,15,16,2,88,163,45,40,50,8,128,8,2,12,223, -0,33,78,80,159,36,46,37,20,15,16,2,248,22,148,15,70,108,105,110,107, -115,45,102,105,108,101,80,159,36,47,37,20,15,16,2,247,22,136,2,80,158, -36,48,20,15,16,2,2,79,80,158,36,49,20,15,16,2,248,80,159,37,51, -37,88,163,36,36,49,8,240,8,0,3,0,9,223,1,33,80,80,159,36,50, -37,20,15,16,2,247,22,136,2,80,158,36,54,20,15,16,2,2,79,80,158, -36,55,20,15,16,2,88,163,36,37,44,8,240,0,120,47,0,2,23,223,0, -33,91,80,159,36,56,37,20,15,16,2,88,163,36,38,56,8,240,0,0,64, -0,2,24,223,0,33,93,80,159,36,58,37,20,15,16,2,88,163,36,40,59, -8,240,0,64,80,0,2,11,223,0,33,104,80,159,36,45,37,20,15,16,2, -32,0,88,163,36,39,50,11,2,25,222,33,105,80,159,36,59,37,20,15,16, -2,32,0,88,163,36,38,53,11,2,26,222,33,106,80,159,36,8,24,37,20, -15,16,2,32,0,88,163,36,38,54,11,2,27,222,33,107,80,159,36,8,25, -37,20,15,16,2,20,27,158,32,0,88,163,36,37,44,11,2,28,222,33,108, -32,0,88,163,36,37,44,11,2,28,222,33,109,80,159,36,8,26,37,20,15, -16,2,20,25,96,2,29,88,163,36,36,53,16,2,52,8,128,128,9,223,0, -33,110,88,163,36,37,54,16,2,52,8,240,0,64,0,0,9,223,0,33,111, -88,163,36,38,55,16,2,52,8,240,0,128,0,0,9,223,0,33,112,80,159, -36,8,27,37,20,15,16,2,88,163,8,36,39,54,16,4,44,36,37,36,2, -30,223,0,33,114,80,159,36,8,28,37,95,29,94,2,17,68,35,37,107,101, -114,110,101,108,11,29,94,2,17,69,35,37,109,105,110,45,115,116,120,11,2, -19,9,9,9,36,0}; - EVAL_ONE_SIZED_STR((char *)expr, 8951); +50,195,37,11,12,250,22,188,9,2,12,2,40,196,251,80,158,40,45,197,199, +200,198,0,6,45,105,110,102,46,48,27,248,22,152,15,2,41,27,28,248,22, +135,15,23,195,2,193,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249, +22,33,11,80,159,43,52,37,22,153,15,248,22,152,15,68,111,114,105,103,45, +100,105,114,27,248,22,152,15,2,32,250,80,159,42,39,39,23,196,1,23,198, +1,11,28,192,250,22,130,15,195,6,6,6,99,111,110,102,105,103,6,10,10, +108,105,110,107,115,46,114,107,116,100,11,86,94,27,247,22,147,10,28,249,22, +139,10,23,195,2,2,42,251,22,143,10,23,197,1,2,42,250,22,189,7,2, +43,28,23,202,1,80,159,46,47,38,80,159,46,50,38,248,22,182,11,23,205, +1,247,22,29,12,248,193,247,22,140,2,2,79,86,95,27,247,22,147,10,28, +249,22,139,10,23,195,2,2,42,251,22,143,10,23,197,1,2,42,250,22,189, +7,2,43,28,202,80,159,47,47,38,80,159,47,50,38,248,22,182,11,23,206, +1,247,22,29,12,28,192,28,194,86,94,20,18,159,11,80,158,39,48,247,22, +140,2,20,18,159,11,80,158,39,49,192,86,94,20,18,159,11,80,158,39,54, +247,22,140,2,20,18,159,11,80,158,39,55,192,12,248,194,247,22,140,2,20, +20,94,248,22,139,6,23,194,2,28,248,22,136,7,248,22,139,6,23,195,1, +12,248,22,184,9,6,30,30,101,120,112,101,99,116,101,100,32,97,32,115,105, +110,103,108,101,32,83,45,101,120,112,114,101,115,115,105,111,110,248,22,191,5, +193,28,248,22,88,23,194,2,28,28,249,22,191,3,38,248,22,92,23,196,2, +10,249,22,191,3,39,248,22,92,23,196,2,28,28,248,22,141,7,248,22,80, +23,195,2,10,249,22,151,9,64,114,111,111,116,248,22,80,23,196,2,28,27, +248,22,104,194,28,248,22,176,14,23,194,2,10,28,248,22,141,7,23,194,2, +28,248,22,134,15,23,194,2,10,248,22,135,15,23,194,1,11,27,248,22,87, +248,22,106,195,28,192,192,248,22,177,15,248,22,113,195,11,11,11,11,250,22, +158,2,196,197,249,22,79,197,200,28,28,248,22,87,248,22,106,23,197,2,10, +249,22,168,15,248,22,113,23,198,2,247,22,159,8,27,248,22,139,15,249,22, +137,15,248,22,104,23,200,2,23,198,1,28,248,22,64,248,22,80,23,198,2, +86,94,23,196,1,86,94,28,250,22,160,2,196,11,11,12,250,22,158,2,196, +11,9,249,22,164,2,195,88,163,8,36,38,50,11,9,224,3,2,33,87,27, +248,22,67,248,22,80,23,199,1,250,22,158,2,23,198,2,23,196,2,249,22, +79,248,22,131,2,23,200,1,250,22,160,2,23,203,1,23,201,1,9,12,250, +22,158,2,195,196,248,22,94,198,20,13,159,80,159,37,57,37,88,163,36,37, +54,8,240,0,72,0,0,9,225,1,0,2,33,81,27,250,22,147,15,28,23, +197,2,80,159,41,47,38,80,159,41,50,38,11,32,0,88,163,8,36,36,41, +11,9,222,33,82,28,249,22,129,4,23,195,2,28,23,196,2,80,158,40,49, +80,158,40,55,20,13,159,80,159,38,57,37,20,20,94,88,163,36,37,55,8, +240,0,120,12,0,9,226,2,1,3,0,33,83,23,196,1,20,13,159,80,159, +38,52,37,26,29,80,159,8,31,53,37,249,22,33,11,80,159,8,33,52,37, +22,146,14,10,22,147,14,10,22,148,14,10,22,151,14,10,22,150,14,10,22, +152,14,10,22,149,14,10,22,153,14,10,22,154,14,10,22,155,14,10,22,156, +14,10,22,157,14,10,22,158,14,11,22,144,14,11,27,249,22,182,5,28,196, +80,159,41,47,38,80,159,41,50,38,66,98,105,110,97,114,121,27,250,22,46, +22,37,88,163,8,36,36,44,11,9,223,4,33,84,20,20,94,88,163,36,36, +43,11,9,223,4,33,85,23,197,1,86,94,28,28,248,22,88,23,194,2,249, +22,4,32,0,88,163,8,36,37,45,11,9,222,33,86,23,195,2,11,12,248, +22,184,9,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, +101,110,116,27,247,22,140,2,27,90,159,39,11,89,161,39,36,11,248,22,133, +15,28,201,80,159,46,47,38,80,159,46,50,38,192,86,96,249,22,3,20,20, +94,88,163,8,36,37,54,11,9,224,2,3,33,88,23,195,1,23,197,1,249, +22,164,2,195,88,163,8,36,38,48,11,9,223,3,33,89,28,197,86,94,20, +18,159,11,80,158,42,48,193,20,18,159,11,80,158,42,49,196,86,94,20,18, +159,11,80,158,42,54,193,20,18,159,11,80,158,42,55,196,193,28,193,80,158, +38,48,80,158,38,54,248,22,9,88,163,8,32,37,8,40,8,240,0,120,47, +0,9,224,1,2,33,90,0,7,35,114,120,34,47,43,34,28,248,22,141,7, +23,195,2,27,249,22,166,15,2,92,196,28,192,28,249,22,191,3,248,22,103, +195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248,22, +103,198,197,249,22,7,250,22,163,7,199,36,248,22,103,198,249,22,79,249,22, +163,7,200,248,22,105,199,199,249,22,7,196,197,90,159,39,11,89,161,39,36, +11,248,22,133,15,23,198,1,86,94,23,195,1,28,249,22,151,9,23,195,2, +2,36,249,22,7,195,199,27,249,22,79,23,197,1,23,201,1,28,248,22,141, +7,23,195,2,27,249,22,166,15,2,92,196,28,192,28,249,22,191,3,248,22, +103,195,248,22,181,3,248,22,144,7,198,249,22,7,250,22,163,7,199,36,248, +22,103,198,195,249,22,7,250,22,163,7,199,36,248,22,103,198,249,22,79,249, +22,163,7,200,248,22,105,199,197,249,22,7,196,195,90,159,39,11,89,161,39, +36,11,248,22,133,15,23,198,1,28,249,22,151,9,194,2,36,249,22,7,195, +197,249,80,159,45,58,39,194,249,22,79,197,199,32,94,88,163,36,43,8,26, +11,65,99,108,111,111,112,222,33,103,32,95,88,163,8,36,37,47,11,2,31, +222,33,98,32,96,88,163,36,37,43,11,69,116,111,45,115,116,114,105,110,103, +222,33,97,28,248,22,176,14,193,248,22,180,14,193,192,28,248,22,87,248,22, +81,23,195,2,248,22,89,248,2,96,248,22,80,23,196,1,250,22,90,248,2, +96,248,22,80,23,198,2,2,45,248,2,95,248,22,81,23,198,1,249,22,189, +7,2,46,194,32,100,88,163,36,38,48,11,66,102,105,108,116,101,114,222,33, +101,28,248,22,87,23,195,2,9,28,248,23,194,2,248,22,80,23,196,2,249, +22,79,248,22,80,23,197,2,249,2,100,23,197,1,248,22,81,23,199,1,249, +2,100,194,248,22,81,196,249,22,189,7,2,46,248,22,134,2,23,196,1,28, +248,22,87,23,199,2,86,94,23,198,1,28,23,199,2,28,196,249,22,130,15, +200,198,198,27,28,248,22,87,23,197,2,2,44,249,22,1,22,164,7,248,2, +95,23,199,2,248,23,198,1,251,22,189,7,6,70,70,99,111,108,108,101,99, +116,105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111,108,108, +101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108,108,101, +99,116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97,126, +97,28,248,22,87,23,202,1,248,2,96,23,201,1,250,22,164,7,248,2,96, +23,204,1,2,45,23,201,2,249,22,1,22,164,7,249,22,2,32,0,88,163, +8,36,37,44,11,9,222,33,99,249,2,100,22,176,14,23,205,2,28,249,22, +5,22,133,2,23,201,2,250,22,189,7,6,49,49,10,32,32,32,115,117,98, +45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32, +112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58,126,97, +23,201,1,250,22,1,22,164,7,248,22,2,32,0,88,163,8,36,37,45,11, +9,222,33,102,249,2,100,22,133,2,23,207,1,86,95,23,199,1,23,198,1, +2,44,27,248,22,80,23,200,2,27,28,248,22,176,14,23,195,2,249,22,130, +15,23,196,1,23,198,2,248,22,134,2,23,195,1,28,28,248,22,176,14,248, +22,80,23,202,2,248,22,189,14,23,194,2,10,27,250,22,1,22,130,15,23, +197,1,23,201,2,28,28,248,22,87,23,199,2,10,248,22,189,14,23,194,2, +28,23,200,2,28,28,248,22,188,14,249,22,130,15,195,202,10,27,28,248,22, +176,14,201,248,22,180,14,201,200,27,248,22,144,7,23,195,2,27,28,249,22, +131,4,23,196,2,40,28,249,22,147,7,6,4,4,46,114,107,116,249,22,163, +7,23,199,2,249,22,183,3,23,200,2,40,249,22,164,7,250,22,163,7,23, +200,1,36,249,22,183,3,23,201,1,40,6,3,3,46,115,115,86,95,23,195, +1,23,194,1,11,11,28,23,193,2,248,22,188,14,249,22,130,15,198,23,196, +1,11,28,199,249,22,130,15,194,201,192,254,2,94,202,203,204,205,206,248,22, +81,23,16,28,23,16,23,16,199,28,199,249,22,130,15,194,201,192,254,2,94, +202,203,204,205,206,248,22,81,23,16,23,16,254,2,94,201,202,203,204,205,248, +22,81,23,15,23,15,90,159,38,11,89,161,38,36,11,249,80,159,40,58,39, +23,199,1,23,200,1,27,248,22,67,28,248,22,176,14,195,248,22,180,14,195, +194,27,247,22,157,15,27,250,22,93,28,23,197,2,28,247,22,156,15,27,248, +80,159,46,56,39,10,27,250,22,160,2,23,197,2,23,203,2,11,28,23,193, +2,192,86,94,23,193,1,250,22,160,2,23,197,1,11,9,9,9,28,23,197, +1,28,80,159,44,50,38,27,248,80,159,46,56,39,11,27,250,22,160,2,23, +197,2,23,203,1,11,28,23,193,2,192,86,94,23,193,1,250,22,160,2,23, +197,1,11,9,86,94,23,198,1,9,9,247,22,154,15,254,2,94,199,202,203, +205,23,16,199,11,86,95,28,28,248,22,177,14,23,194,2,10,28,248,22,176, +14,23,194,2,10,28,248,22,141,7,23,194,2,28,248,22,134,15,23,194,2, +10,248,22,135,15,23,194,2,11,12,252,22,188,9,23,200,2,2,33,36,23, +198,2,23,199,2,28,28,248,22,141,7,23,195,2,10,248,22,130,8,23,195, +2,86,94,23,194,1,12,252,22,188,9,23,200,2,2,47,37,23,198,2,23, +199,1,90,159,39,11,89,161,39,36,11,248,22,133,15,23,197,2,86,94,23, +195,1,86,94,28,192,12,250,22,191,9,23,201,1,2,48,23,199,1,249,22, +7,194,195,90,159,38,11,89,161,38,36,11,86,95,28,28,248,22,177,14,23, +196,2,10,28,248,22,176,14,23,196,2,10,28,248,22,141,7,23,196,2,28, +248,22,134,15,23,196,2,10,248,22,135,15,23,196,2,11,12,252,22,188,9, +2,26,2,33,36,23,200,2,23,201,2,28,28,248,22,141,7,23,197,2,10, +248,22,130,8,23,197,2,12,252,22,188,9,2,26,2,47,37,23,200,2,23, +201,2,90,159,39,11,89,161,39,36,11,248,22,133,15,23,199,2,86,94,23, +195,1,86,94,28,192,12,250,22,191,9,2,26,2,48,23,201,2,249,22,7, +194,195,27,249,22,186,14,250,22,175,15,0,20,35,114,120,35,34,40,63,58, +91,46,93,91,94,46,93,42,124,41,36,34,248,22,182,14,23,201,1,28,248, +22,141,7,23,203,2,249,22,156,8,23,204,1,8,63,23,202,1,28,248,22, +177,14,23,199,2,248,22,178,14,23,199,1,86,94,23,198,1,247,22,179,14, +28,248,22,176,14,194,249,22,130,15,195,194,192,90,159,38,11,89,161,38,36, +11,86,95,28,28,248,22,177,14,23,196,2,10,28,248,22,176,14,23,196,2, +10,28,248,22,141,7,23,196,2,28,248,22,134,15,23,196,2,10,248,22,135, +15,23,196,2,11,12,252,22,188,9,2,27,2,33,36,23,200,2,23,201,2, +28,28,248,22,141,7,23,197,2,10,248,22,130,8,23,197,2,12,252,22,188, +9,2,27,2,47,37,23,200,2,23,201,2,90,159,39,11,89,161,39,36,11, +248,22,133,15,23,199,2,86,94,23,195,1,86,94,28,192,12,250,22,191,9, +2,27,2,48,23,201,2,249,22,7,194,195,27,249,22,186,14,249,22,142,8, +250,22,176,15,0,9,35,114,120,35,34,91,46,93,34,248,22,182,14,23,203, +1,6,1,1,95,28,248,22,141,7,23,202,2,249,22,156,8,23,203,1,8, +63,23,201,1,28,248,22,177,14,23,199,2,248,22,178,14,23,199,1,86,94, +23,198,1,247,22,179,14,28,248,22,176,14,194,249,22,130,15,195,194,192,249, +247,22,171,5,194,11,249,247,22,171,5,194,11,27,247,22,156,15,249,80,159, +39,40,38,28,23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44, +27,28,23,196,1,250,22,130,15,248,22,152,15,2,50,247,22,159,8,2,51, +11,27,248,80,159,42,8,29,39,250,22,93,9,248,22,89,248,22,152,15,2, +41,9,28,193,249,22,79,195,194,192,27,247,22,156,15,249,80,159,39,40,38, +28,23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44,27,28,23, +196,1,250,22,130,15,248,22,152,15,2,50,247,22,159,8,2,51,11,27,248, +80,159,42,8,30,39,250,22,93,23,203,1,248,22,89,248,22,152,15,2,41, +9,28,193,249,22,79,195,194,192,27,247,22,156,15,249,80,159,39,40,38,28, +23,195,2,27,248,22,161,8,2,49,28,192,192,2,44,2,44,27,28,23,196, +1,250,22,130,15,248,22,152,15,2,50,247,22,159,8,2,51,11,27,248,80, +159,42,8,31,39,250,22,93,23,203,1,248,22,89,248,22,152,15,2,41,23, +204,1,28,193,249,22,79,195,194,192,86,94,249,22,130,7,247,22,167,5,195, +248,22,154,6,249,22,135,4,36,249,22,183,3,197,198,27,28,23,197,2,86, +95,23,196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,152,15,2, +32,27,250,80,159,42,39,39,23,197,1,11,11,27,248,22,138,4,23,199,1, +27,28,23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,138,4,23,202, +1,27,28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,134,6,23,199, +1,20,20,95,88,163,8,36,36,48,11,9,224,4,2,33,113,23,195,1,23, +197,1,27,248,22,183,5,23,195,1,248,80,159,39,8,32,39,193,159,36,20, +113,159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11,11,9, +9,11,11,11,10,43,80,158,36,36,20,113,159,40,16,29,2,2,2,3,2, +4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14, +2,15,2,16,30,2,19,76,102,105,110,100,45,108,105,110,107,115,45,112,97, +116,104,33,4,30,2,20,1,20,112,97,114,97,109,101,116,101,114,105,122,97, +116,105,111,110,45,107,101,121,6,30,2,20,1,23,101,120,116,101,110,100,45, +112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,2,21,2,22, +2,23,30,2,19,1,21,101,120,99,101,112,116,105,111,110,45,104,97,110,100, +108,101,114,45,107,101,121,2,2,24,2,25,2,26,2,27,2,28,2,29,2, +30,16,0,37,39,36,16,0,36,16,13,2,8,2,9,2,7,2,3,2,25, +2,23,2,21,2,16,2,22,2,24,2,14,2,13,2,15,49,11,11,11,16, +12,2,12,2,10,2,30,2,11,2,5,2,29,2,28,2,4,2,27,2,6, +2,26,2,2,16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2, +12,2,10,2,30,2,11,2,5,2,29,2,28,2,4,2,27,2,6,2,26, +2,2,48,48,37,12,11,11,16,0,16,0,16,0,36,36,11,12,11,11,16, +0,16,0,16,0,36,36,16,29,20,15,16,2,88,163,8,36,37,55,16,4, +36,39,37,36,2,31,223,0,33,52,80,159,36,8,32,39,20,15,16,2,88, +163,8,36,37,56,16,2,44,8,240,0,128,0,0,2,31,223,0,33,53,80, +159,36,8,31,39,20,15,16,2,88,163,8,36,37,51,16,2,44,8,240,0, +64,0,0,2,31,223,0,33,54,80,159,36,8,30,39,20,15,16,2,88,163, +8,36,37,51,16,2,44,8,128,128,2,31,223,0,33,55,80,159,36,8,29, +39,20,15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,56,80,159,36, +36,37,20,15,16,2,249,22,143,7,7,92,7,92,80,159,36,37,37,20,15, +16,2,88,163,36,37,54,38,2,4,223,0,33,57,80,159,36,38,37,20,15, +16,2,20,25,96,2,5,88,163,8,36,39,8,25,52,9,223,0,33,64,88, +163,36,38,47,44,9,223,0,33,65,88,163,36,37,46,44,9,223,0,33,66, +80,159,36,39,37,20,15,16,2,27,248,22,160,15,248,22,155,8,27,28,249, +22,151,9,247,22,163,8,2,34,6,1,1,59,6,1,1,58,250,22,189,7, +6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23, +196,1,88,163,8,36,38,48,11,2,6,223,0,33,70,80,159,36,40,37,20, +15,16,2,32,0,88,163,8,36,38,47,11,2,7,222,33,71,80,159,36,41, +37,20,15,16,2,32,0,88,163,8,36,39,48,11,2,8,222,33,73,80,159, +36,42,37,20,15,16,2,32,0,88,163,8,36,38,46,11,2,9,222,33,74, +80,159,36,43,37,20,15,16,2,88,163,45,39,49,8,128,8,2,10,223,0, +33,76,80,159,36,44,37,20,15,16,2,88,163,45,40,50,8,128,8,2,12, +223,0,33,78,80,159,36,46,37,20,15,16,2,248,22,152,15,70,108,105,110, +107,115,45,102,105,108,101,80,159,36,47,37,20,15,16,2,247,22,140,2,80, +158,36,48,20,15,16,2,2,79,80,158,36,49,20,15,16,2,248,80,159,37, +51,37,88,163,36,36,49,8,240,8,0,3,0,9,223,1,33,80,80,159,36, +50,37,20,15,16,2,247,22,140,2,80,158,36,54,20,15,16,2,2,79,80, +158,36,55,20,15,16,2,88,163,36,37,44,8,240,0,120,47,0,2,23,223, +0,33,91,80,159,36,56,37,20,15,16,2,88,163,36,38,56,8,240,0,0, +64,0,2,24,223,0,33,93,80,159,36,58,37,20,15,16,2,88,163,36,40, +59,8,240,0,64,80,0,2,11,223,0,33,104,80,159,36,45,37,20,15,16, +2,32,0,88,163,36,39,50,11,2,25,222,33,105,80,159,36,59,37,20,15, +16,2,32,0,88,163,36,38,53,11,2,26,222,33,106,80,159,36,8,24,37, +20,15,16,2,32,0,88,163,36,38,54,11,2,27,222,33,107,80,159,36,8, +25,37,20,15,16,2,20,27,158,32,0,88,163,36,37,44,11,2,28,222,33, +108,32,0,88,163,36,37,44,11,2,28,222,33,109,80,159,36,8,26,37,20, +15,16,2,20,25,96,2,29,88,163,36,36,53,16,2,52,8,128,128,9,223, +0,33,110,88,163,36,37,54,16,2,52,8,240,0,64,0,0,9,223,0,33, +111,88,163,36,38,55,16,2,52,8,240,0,128,0,0,9,223,0,33,112,80, +159,36,8,27,37,20,15,16,2,88,163,8,36,39,54,16,4,44,36,37,36, +2,30,223,0,33,114,80,159,36,8,28,37,95,29,94,2,17,68,35,37,107, +101,114,110,101,108,11,29,94,2,17,69,35,37,109,105,110,45,115,116,120,11, +2,19,9,9,9,36,0}; + EVAL_ONE_SIZED_STR((char *)expr, 8952); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,49,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,50,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40, 0,57,0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0, 179,1,0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23, @@ -547,8 +547,8 @@ 5,2,6,38,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,16,5, 11,11,11,11,11,16,5,2,3,2,7,2,8,2,4,2,2,41,41,37,12, 11,11,16,0,16,0,16,0,36,36,11,12,11,11,16,0,16,0,16,0,36, -36,16,2,20,15,16,6,253,22,129,11,2,3,11,38,36,11,248,22,85,249, -22,75,22,181,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, +36,16,2,20,15,16,6,253,22,133,11,2,3,11,38,36,11,248,22,89,249, +22,79,22,185,10,88,163,36,37,45,44,9,223,9,33,9,80,159,36,36,37, 80,159,36,37,37,80,159,36,38,37,80,159,36,39,37,80,159,36,40,37,20, 15,16,3,249,22,7,88,163,36,37,45,44,9,223,2,33,10,88,163,36,37, 45,44,9,223,2,33,11,80,159,36,41,37,80,159,36,42,37,93,29,94,65, @@ -556,7 +556,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 502); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,49,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,50,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,82,0,0,0,1,0,0,7,0,18, 0,45,0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0, 185,0,201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89, @@ -588,284 +588,284 @@ 66,115,117,98,109,111,100,6,2,2,46,46,6,1,1,46,64,102,105,108,101, 66,112,108,97,110,101,116,6,8,8,109,97,105,110,46,114,107,116,6,4,4, 46,114,107,116,67,105,103,110,111,114,101,100,249,22,14,195,80,159,38,49,38, -249,80,159,38,52,39,195,10,90,159,39,11,89,161,39,36,11,248,22,129,15, -197,86,95,23,195,1,23,193,1,28,249,22,160,15,0,11,35,114,120,34,91, -46,93,115,115,36,34,248,22,177,14,23,197,1,249,80,159,41,56,39,198,2, -25,196,27,28,23,195,2,28,249,22,147,9,23,197,2,80,158,39,50,86,94, -23,195,1,80,158,37,51,27,248,22,144,5,23,197,2,27,28,248,22,73,23, -195,2,248,22,76,23,195,1,23,194,1,28,248,22,172,14,23,194,2,90,159, -39,11,89,161,39,36,11,248,22,129,15,23,197,1,86,95,20,18,159,11,80, +249,80,159,38,52,39,195,10,90,159,39,11,89,161,39,36,11,248,22,133,15, +197,86,95,23,195,1,23,193,1,28,249,22,164,15,0,11,35,114,120,34,91, +46,93,115,115,36,34,248,22,181,14,23,197,1,249,80,159,41,56,39,198,2, +25,196,27,28,23,195,2,28,249,22,151,9,23,197,2,80,158,39,50,86,94, +23,195,1,80,158,37,51,27,248,22,148,5,23,197,2,27,28,248,22,77,23, +195,2,248,22,80,23,195,1,23,194,1,28,248,22,176,14,23,194,2,90,159, +39,11,89,161,39,36,11,248,22,133,15,23,197,1,86,95,20,18,159,11,80, 158,42,50,199,20,18,159,11,80,158,42,51,192,192,11,11,28,23,193,2,192, -86,94,23,193,1,27,247,22,168,5,28,192,192,247,22,149,15,28,24,194,2, -12,20,13,159,80,159,36,55,37,80,158,36,53,89,161,37,37,10,249,22,186, +86,94,23,193,1,27,247,22,172,5,28,192,192,247,22,153,15,28,24,194,2, +12,20,13,159,80,159,36,55,37,80,158,36,53,89,161,37,37,10,249,22,190, 4,21,94,2,26,6,19,19,112,108,97,110,101,116,47,114,101,115,111,108,118, 101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101, -45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,250,22,190,14,23,197, -1,23,199,1,249,80,159,43,39,39,23,198,1,2,29,250,22,190,14,23,197, -1,23,199,1,249,80,159,43,39,39,23,198,1,2,29,252,22,190,14,23,199, -1,23,201,1,2,30,247,22,160,8,249,80,159,45,39,39,23,200,1,80,159, -45,36,38,252,22,190,14,23,199,1,23,201,1,2,30,247,22,160,8,249,80, -159,45,39,39,23,200,1,80,159,45,36,38,27,252,22,190,14,23,200,1,23, -202,1,2,30,247,22,160,8,249,80,159,46,39,39,23,201,1,80,159,46,36, -38,27,250,22,143,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28, -192,249,22,75,195,194,11,27,252,22,190,14,23,200,1,23,202,1,2,30,247, -22,160,8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,143, -15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,75,195, -194,11,27,250,22,190,14,23,198,1,23,200,1,249,80,159,44,39,39,23,199, -1,2,29,27,250,22,143,15,196,11,32,0,88,163,8,36,36,41,11,9,222, -11,28,192,249,22,75,195,194,11,27,250,22,190,14,23,198,1,23,200,1,249, -80,159,44,39,39,23,199,1,2,29,27,250,22,143,15,196,11,32,0,88,163, -8,36,36,41,11,9,222,11,28,192,249,22,75,195,194,11,86,95,28,248,80, -159,37,38,39,23,195,2,12,250,22,184,9,2,27,6,12,12,112,97,116,104, -45,115,116,114,105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,60,23, -196,2,10,28,248,22,84,23,196,2,28,249,22,189,3,248,22,88,23,198,2, -37,28,28,248,22,60,248,22,76,23,197,2,10,248,22,145,9,248,22,76,23, -197,2,249,22,4,22,60,248,22,77,23,198,2,11,11,11,10,12,250,22,184, +45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,250,22,130,15,23,197, +1,23,199,1,249,80,159,43,39,39,23,198,1,2,29,250,22,130,15,23,197, +1,23,199,1,249,80,159,43,39,39,23,198,1,2,29,252,22,130,15,23,199, +1,23,201,1,2,30,247,22,164,8,249,80,159,45,39,39,23,200,1,80,159, +45,36,38,252,22,130,15,23,199,1,23,201,1,2,30,247,22,164,8,249,80, +159,45,39,39,23,200,1,80,159,45,36,38,27,252,22,130,15,23,200,1,23, +202,1,2,30,247,22,164,8,249,80,159,46,39,39,23,201,1,80,159,46,36, +38,27,250,22,147,15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28, +192,249,22,79,195,194,11,27,252,22,130,15,23,200,1,23,202,1,2,30,247, +22,164,8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,147, +15,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,195, +194,11,27,250,22,130,15,23,198,1,23,200,1,249,80,159,44,39,39,23,199, +1,2,29,27,250,22,147,15,196,11,32,0,88,163,8,36,36,41,11,9,222, +11,28,192,249,22,79,195,194,11,27,250,22,130,15,23,198,1,23,200,1,249, +80,159,44,39,39,23,199,1,2,29,27,250,22,147,15,196,11,32,0,88,163, +8,36,36,41,11,9,222,11,28,192,249,22,79,195,194,11,86,95,28,248,80, +159,37,38,39,23,195,2,12,250,22,188,9,2,27,6,12,12,112,97,116,104, +45,115,116,114,105,110,103,63,23,197,2,28,28,23,195,2,28,248,22,64,23, +196,2,10,28,248,22,88,23,196,2,28,249,22,129,4,248,22,92,23,198,2, +37,28,28,248,22,64,248,22,80,23,197,2,10,248,22,149,9,248,22,80,23, +197,2,249,22,4,22,64,248,22,81,23,198,2,11,11,11,10,12,250,22,188, 9,2,27,6,71,71,40,111,114,47,99,32,35,102,32,115,121,109,98,111,108, 63,32,40,99,111,110,115,47,99,32,40,111,114,47,99,32,35,102,32,115,121, 109,98,111,108,63,41,32,40,110,111,110,45,101,109,112,116,121,45,108,105,115, 116,111,102,32,115,121,109,98,111,108,63,41,41,41,23,197,2,90,159,46,11, -89,161,37,36,11,28,248,22,132,15,23,205,2,23,204,2,27,247,22,168,5, -28,23,193,2,249,22,133,15,23,207,2,23,195,1,23,205,2,89,161,39,37, -11,248,22,129,15,23,205,1,86,94,23,196,1,89,161,38,40,11,28,23,205, -2,27,248,22,177,14,23,197,2,27,248,22,131,8,23,195,2,28,28,249,22, -191,3,23,195,2,40,249,22,134,8,2,25,249,22,137,8,23,198,2,249,22, -179,3,23,199,2,40,11,249,22,7,23,199,2,248,22,181,14,249,22,138,8, -250,22,137,8,23,202,1,36,249,22,179,3,23,203,1,40,5,3,46,115,115, +89,161,37,36,11,28,248,22,136,15,23,205,2,23,204,2,27,247,22,172,5, +28,23,193,2,249,22,137,15,23,207,2,23,195,1,23,205,2,89,161,39,37, +11,248,22,133,15,23,205,1,86,94,23,196,1,89,161,38,40,11,28,23,205, +2,27,248,22,181,14,23,197,2,27,248,22,135,8,23,195,2,28,28,249,22, +131,4,23,195,2,40,249,22,138,8,2,25,249,22,141,8,23,198,2,249,22, +183,3,23,199,2,40,11,249,22,7,23,199,2,248,22,185,14,249,22,142,8, +250,22,141,8,23,202,1,36,249,22,183,3,23,203,1,40,5,3,46,115,115, 249,22,7,23,199,2,11,249,22,7,23,197,2,11,89,161,37,42,11,28,249, -22,147,9,23,199,2,23,197,2,23,193,2,249,22,190,14,23,196,2,23,199, -2,89,161,37,43,11,28,23,198,2,28,249,22,147,9,23,200,2,23,197,1, -23,193,1,86,94,23,193,1,249,22,190,14,23,196,2,23,200,2,86,94,23, -195,1,11,89,161,37,44,11,28,249,22,147,9,23,196,2,68,114,101,108,97, +22,151,9,23,199,2,23,197,2,23,193,2,249,22,130,15,23,196,2,23,199, +2,89,161,37,43,11,28,23,198,2,28,249,22,151,9,23,200,2,23,197,1, +23,193,1,86,94,23,193,1,249,22,130,15,23,196,2,23,200,2,86,94,23, +195,1,11,89,161,37,44,11,28,249,22,151,9,23,196,2,68,114,101,108,97, 116,105,118,101,86,94,23,194,1,2,28,23,194,1,89,161,37,45,11,247,22, -151,15,27,250,22,143,15,23,203,2,11,32,0,88,163,8,36,36,41,11,9, -222,11,27,28,23,194,2,249,22,75,23,203,2,23,196,1,86,94,23,194,1, -11,27,28,23,203,2,28,23,194,2,11,27,250,22,143,15,23,207,2,11,32, -0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,75,23,206,2,194,11, +155,15,27,250,22,147,15,23,203,2,11,32,0,88,163,8,36,36,41,11,9, +222,11,27,28,23,194,2,249,22,79,23,203,2,23,196,1,86,94,23,194,1, +11,27,28,23,203,2,28,23,194,2,11,27,250,22,147,15,23,207,2,11,32, +0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,79,23,206,2,194,11, 11,27,28,23,195,2,23,195,2,23,194,2,27,88,163,36,37,50,44,62,122, 111,225,15,13,9,33,45,27,88,163,36,37,50,44,66,97,108,116,45,122,111, 225,16,14,11,33,46,27,88,163,36,37,52,45,9,225,17,15,11,33,47,27, 88,163,36,37,52,45,9,225,18,16,13,33,48,27,28,23,200,2,23,200,2, -248,22,145,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1, -23,200,2,248,22,145,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27, +248,22,149,9,23,200,2,27,28,23,208,2,28,23,200,2,86,94,23,201,1, +23,200,2,248,22,149,9,23,202,1,11,27,28,23,195,2,28,23,197,1,27, 249,22,5,88,163,8,36,37,53,45,9,225,24,22,18,33,49,23,216,2,27, -28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,191,3,248, -22,77,196,248,22,77,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28, +28,23,202,2,11,193,28,192,192,28,193,28,23,202,2,28,249,22,131,4,248, +22,81,196,248,22,81,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28, 23,193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23, 201,1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20, -13,159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,29,11,80,159,8, -26,40,37,22,185,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41, -37,249,22,29,11,80,159,8,26,40,37,22,168,5,28,248,22,172,14,23,216, -2,23,215,1,86,94,23,215,1,247,22,149,15,249,247,22,155,15,248,22,76, +13,159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,33,11,80,159,8, +26,40,37,22,189,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41, +37,249,22,33,11,80,159,8,26,40,37,22,172,5,28,248,22,176,14,23,216, +2,23,215,1,86,94,23,215,1,247,22,153,15,249,247,22,159,15,248,22,80, 195,23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5, 88,163,8,36,37,53,45,9,225,25,23,20,33,50,23,217,2,27,28,23,204, -2,11,193,28,192,192,28,193,28,203,28,249,22,191,3,248,22,77,196,248,22, -77,206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214, +2,11,193,28,192,192,28,193,28,203,28,249,22,131,4,248,22,81,196,248,22, +81,206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214, 1,23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196, 1,23,195,1,20,13,159,80,159,58,40,37,250,80,159,8,25,41,37,249,22, -29,11,80,159,8,27,40,37,22,185,4,23,215,1,20,13,159,80,159,58,40, -37,250,80,159,8,25,41,37,249,22,29,11,80,159,8,27,40,37,22,168,5, -28,248,22,172,14,23,217,2,23,216,1,86,94,23,216,1,247,22,149,15,249, -247,22,155,15,248,22,76,195,23,26,86,94,23,193,1,27,28,23,197,2,28, +33,11,80,159,8,27,40,37,22,189,4,23,215,1,20,13,159,80,159,58,40, +37,250,80,159,8,25,41,37,249,22,33,11,80,159,8,27,40,37,22,172,5, +28,248,22,176,14,23,217,2,23,216,1,86,94,23,216,1,247,22,153,15,249, +247,22,159,15,248,22,80,195,23,26,86,94,23,193,1,27,28,23,197,2,28, 23,201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24, 20,33,51,23,213,1,23,218,2,27,28,23,204,2,11,193,28,192,192,28,193, -28,23,204,2,28,249,22,191,3,248,22,77,196,248,22,77,23,207,2,193,11, +28,23,204,2,28,249,22,131,4,248,22,81,196,248,22,81,23,207,2,193,11, 11,11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23, 215,1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23, -196,1,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,29,11, -80,159,8,28,40,37,22,185,4,11,20,13,159,80,159,59,40,37,250,80,159, -8,26,41,37,249,22,29,11,80,159,8,28,40,37,22,168,5,28,248,22,172, -14,23,218,2,23,217,1,86,94,23,217,1,247,22,149,15,249,247,22,166,5, -248,22,76,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27, +196,1,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,33,11, +80,159,8,28,40,37,22,189,4,11,20,13,159,80,159,59,40,37,250,80,159, +8,26,41,37,249,22,33,11,80,159,8,28,40,37,22,172,5,28,248,22,176, +14,23,218,2,23,217,1,86,94,23,217,1,247,22,153,15,249,247,22,170,5, +248,22,80,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27, 249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,52,23, 215,1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249, -22,191,3,248,22,77,196,248,22,77,23,15,193,11,11,11,86,95,23,216,1, +22,131,4,248,22,81,196,248,22,81,23,15,193,11,11,11,86,95,23,216,1, 23,212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198, -1,20,13,159,80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,29,11, -80,159,8,29,40,37,22,185,4,23,217,1,20,13,159,80,159,8,24,40,37, -250,80,159,8,27,41,37,249,22,29,11,80,159,8,29,40,37,22,168,5,28, -248,22,172,14,23,219,2,23,218,1,86,94,23,218,1,247,22,149,15,249,247, -22,166,5,248,22,76,195,23,28,86,94,23,193,1,28,28,248,22,73,23,220, -2,248,22,76,23,220,2,10,27,28,23,199,2,86,94,23,215,1,23,214,1, -86,94,23,214,1,23,215,1,28,28,248,22,73,23,221,2,248,22,145,9,248, -22,184,14,23,195,2,11,12,20,13,159,80,159,8,25,40,37,250,80,159,8, -28,41,37,249,22,29,11,80,159,8,30,40,37,22,185,4,28,23,30,28,23, +1,20,13,159,80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,33,11, +80,159,8,29,40,37,22,189,4,23,217,1,20,13,159,80,159,8,24,40,37, +250,80,159,8,27,41,37,249,22,33,11,80,159,8,29,40,37,22,172,5,28, +248,22,176,14,23,219,2,23,218,1,86,94,23,218,1,247,22,153,15,249,247, +22,170,5,248,22,80,195,23,28,86,94,23,193,1,28,28,248,22,77,23,220, +2,248,22,80,23,220,2,10,27,28,23,199,2,86,94,23,215,1,23,214,1, +86,94,23,214,1,23,215,1,28,28,248,22,77,23,221,2,248,22,149,9,248, +22,188,14,23,195,2,11,12,20,13,159,80,159,8,25,40,37,250,80,159,8, +28,41,37,249,22,33,11,80,159,8,30,40,37,22,189,4,28,23,30,28,23, 202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8,25,40,37,250,80, -159,8,28,41,37,249,22,29,11,80,159,8,30,40,37,22,168,5,28,248,22, -172,14,23,220,2,23,219,1,86,94,23,219,1,247,22,149,15,249,247,22,166, -5,194,23,29,12,27,249,22,167,8,80,159,39,45,38,249,22,186,3,248,22, -182,3,248,22,169,2,200,8,128,8,27,28,193,248,22,172,2,194,11,28,192, -27,249,22,98,198,195,28,192,248,22,77,193,11,11,27,249,22,186,3,248,22, -182,3,248,22,169,2,198,8,128,8,27,249,22,167,8,80,159,40,45,38,195, -27,28,193,248,22,172,2,194,11,250,22,168,8,80,159,42,45,38,197,248,22, -171,2,249,22,75,249,22,75,204,205,28,198,198,9,0,17,35,114,120,34,94, +159,8,28,41,37,249,22,33,11,80,159,8,30,40,37,22,172,5,28,248,22, +176,14,23,220,2,23,219,1,86,94,23,219,1,247,22,153,15,249,247,22,170, +5,194,23,29,12,27,249,22,171,8,80,159,39,45,38,249,22,190,3,248,22, +186,3,248,22,173,2,200,8,128,8,27,28,193,248,22,176,2,194,11,28,192, +27,249,22,102,198,195,28,192,248,22,81,193,11,11,27,249,22,190,3,248,22, +186,3,248,22,173,2,198,8,128,8,27,249,22,171,8,80,159,40,45,38,195, +27,28,193,248,22,176,2,194,11,250,22,172,8,80,159,42,45,38,197,248,22, +175,2,249,22,79,249,22,79,204,205,28,198,198,9,0,17,35,114,120,34,94, 40,46,42,63,41,47,40,46,42,41,36,34,32,57,88,163,8,36,37,59,11, -2,31,222,33,58,27,249,22,160,15,2,56,23,196,2,28,23,193,2,86,94, -23,194,1,249,22,75,248,22,100,23,196,2,27,248,22,109,23,197,1,27,249, -22,160,15,2,56,23,196,2,28,23,193,2,86,94,23,194,1,249,22,75,248, -22,100,23,196,2,27,248,22,109,23,197,1,27,249,22,160,15,2,56,23,196, -2,28,23,193,2,86,94,23,194,1,249,22,75,248,22,100,23,196,2,27,248, -22,109,23,197,1,27,249,22,160,15,2,56,23,196,2,28,23,193,2,86,94, -23,194,1,249,22,75,248,22,100,23,196,2,248,2,57,248,22,109,23,197,1, -248,22,85,194,248,22,85,194,248,22,85,194,248,22,85,194,32,59,88,163,36, -37,55,11,2,31,222,33,60,28,248,22,83,248,22,77,23,195,2,249,22,7, -9,248,22,76,195,90,159,38,11,89,161,38,36,11,27,248,22,77,196,28,248, -22,83,248,22,77,23,195,2,249,22,7,9,248,22,76,195,90,159,38,11,89, -161,38,36,11,27,248,22,77,196,28,248,22,83,248,22,77,23,195,2,249,22, -7,9,248,22,76,195,90,159,38,11,89,161,38,36,11,248,2,59,248,22,77, -196,249,22,7,249,22,75,248,22,76,199,196,195,249,22,7,249,22,75,248,22, -76,199,196,195,249,22,7,249,22,75,248,22,76,199,196,195,27,27,249,22,160, -15,2,56,23,197,2,28,23,193,2,86,94,23,195,1,249,22,75,248,22,100, -23,196,2,27,248,22,109,23,197,1,27,249,22,160,15,2,56,23,196,2,28, -23,193,2,86,94,23,194,1,249,22,75,248,22,100,23,196,2,27,248,22,109, -23,197,1,27,249,22,160,15,2,56,23,196,2,28,23,193,2,86,94,23,194, -1,249,22,75,248,22,100,23,196,2,27,248,22,109,23,197,1,27,249,22,160, -15,2,56,23,196,2,28,23,193,2,86,94,23,194,1,249,22,75,248,22,100, -23,196,2,248,2,57,248,22,109,23,197,1,248,22,85,194,248,22,85,194,248, -22,85,194,248,22,85,195,28,23,195,1,192,28,248,22,83,248,22,77,23,195, -2,249,22,7,9,248,22,76,195,27,248,22,77,194,90,159,38,11,89,161,38, -36,11,28,248,22,83,248,22,77,23,197,2,249,22,7,9,248,22,76,197,27, -248,22,77,196,90,159,38,11,89,161,38,36,11,28,248,22,83,248,22,77,23, -197,2,249,22,7,9,248,22,76,197,90,159,38,11,89,161,38,36,11,248,2, -59,248,22,77,198,249,22,7,249,22,75,248,22,76,201,196,195,249,22,7,249, -22,75,248,22,76,202,196,195,249,22,7,249,22,75,248,22,76,200,196,195,86, -95,28,248,22,142,5,195,12,250,22,184,9,2,21,6,21,21,114,101,115,111, +2,31,222,33,58,27,249,22,164,15,2,56,23,196,2,28,23,193,2,86,94, +23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249, +22,164,15,2,56,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248, +22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,164,15,2,56,23,196, +2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248, +22,113,23,197,1,27,249,22,164,15,2,56,23,196,2,28,23,193,2,86,94, +23,194,1,249,22,79,248,22,104,23,196,2,248,2,57,248,22,113,23,197,1, +248,22,89,194,248,22,89,194,248,22,89,194,248,22,89,194,32,59,88,163,36, +37,55,11,2,31,222,33,60,28,248,22,87,248,22,81,23,195,2,249,22,7, +9,248,22,80,195,90,159,38,11,89,161,38,36,11,27,248,22,81,196,28,248, +22,87,248,22,81,23,195,2,249,22,7,9,248,22,80,195,90,159,38,11,89, +161,38,36,11,27,248,22,81,196,28,248,22,87,248,22,81,23,195,2,249,22, +7,9,248,22,80,195,90,159,38,11,89,161,38,36,11,248,2,59,248,22,81, +196,249,22,7,249,22,79,248,22,80,199,196,195,249,22,7,249,22,79,248,22, +80,199,196,195,249,22,7,249,22,79,248,22,80,199,196,195,27,27,249,22,164, +15,2,56,23,197,2,28,23,193,2,86,94,23,195,1,249,22,79,248,22,104, +23,196,2,27,248,22,113,23,197,1,27,249,22,164,15,2,56,23,196,2,28, +23,193,2,86,94,23,194,1,249,22,79,248,22,104,23,196,2,27,248,22,113, +23,197,1,27,249,22,164,15,2,56,23,196,2,28,23,193,2,86,94,23,194, +1,249,22,79,248,22,104,23,196,2,27,248,22,113,23,197,1,27,249,22,164, +15,2,56,23,196,2,28,23,193,2,86,94,23,194,1,249,22,79,248,22,104, +23,196,2,248,2,57,248,22,113,23,197,1,248,22,89,194,248,22,89,194,248, +22,89,194,248,22,89,195,28,23,195,1,192,28,248,22,87,248,22,81,23,195, +2,249,22,7,9,248,22,80,195,27,248,22,81,194,90,159,38,11,89,161,38, +36,11,28,248,22,87,248,22,81,23,197,2,249,22,7,9,248,22,80,197,27, +248,22,81,196,90,159,38,11,89,161,38,36,11,28,248,22,87,248,22,81,23, +197,2,249,22,7,9,248,22,80,197,90,159,38,11,89,161,38,36,11,248,2, +59,248,22,81,198,249,22,7,249,22,79,248,22,80,201,196,195,249,22,7,249, +22,79,248,22,80,202,196,195,249,22,7,249,22,79,248,22,80,200,196,195,86, +95,28,248,22,146,5,195,12,250,22,188,9,2,21,6,21,21,114,101,115,111, 108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,63,197,28,24,193, -2,248,24,194,1,195,86,94,23,193,1,12,27,250,22,156,2,80,159,41,43, -38,248,22,185,15,247,22,147,13,11,27,28,23,194,2,193,86,94,23,194,1, -27,247,22,136,2,86,94,250,22,154,2,80,159,43,43,38,248,22,185,15,247, -22,147,13,195,192,250,22,154,2,195,199,66,97,116,116,97,99,104,251,211,197, +2,248,24,194,1,195,86,94,23,193,1,12,27,250,22,160,2,80,159,41,43, +38,248,22,189,15,247,22,151,13,11,27,28,23,194,2,193,86,94,23,194,1, +27,247,22,140,2,86,94,250,22,158,2,80,159,43,43,38,248,22,189,15,247, +22,151,13,195,192,250,22,158,2,195,199,66,97,116,116,97,99,104,251,211,197, 198,199,10,32,64,88,163,36,38,47,11,76,102,108,97,116,116,101,110,45,115, 117,98,45,112,97,116,104,222,33,67,32,65,88,163,36,40,54,11,2,31,222, -33,66,28,248,22,83,23,197,2,28,248,22,83,195,192,249,22,75,194,248,22, -90,197,28,249,22,149,9,248,22,76,23,199,2,2,33,28,248,22,83,23,196, -2,86,95,23,196,1,23,195,1,250,22,180,9,2,21,6,37,37,116,111,111, +33,66,28,248,22,87,23,197,2,28,248,22,87,195,192,249,22,79,194,248,22, +94,197,28,249,22,153,9,248,22,80,23,199,2,2,33,28,248,22,87,23,196, +2,86,95,23,196,1,23,195,1,250,22,184,9,2,21,6,37,37,116,111,111, 32,109,97,110,121,32,34,46,46,34,115,32,105,110,32,115,117,98,109,111,100, -117,108,101,32,112,97,116,104,58,32,126,46,115,250,22,86,2,32,28,249,22, -149,9,23,201,2,2,34,198,28,248,22,172,14,199,198,249,22,85,28,248,22, -60,201,2,4,2,35,200,199,251,2,65,196,197,248,22,77,199,248,22,77,200, -251,2,65,196,197,249,22,75,248,22,76,202,200,248,22,77,200,251,2,65,196, -197,9,197,27,249,22,160,7,6,31,31,115,116,97,110,100,97,114,100,45,109, +117,108,101,32,112,97,116,104,58,32,126,46,115,250,22,90,2,32,28,249,22, +153,9,23,201,2,2,34,198,28,248,22,176,14,199,198,249,22,89,28,248,22, +64,201,2,4,2,35,200,199,251,2,65,196,197,248,22,81,199,248,22,81,200, +251,2,65,196,197,249,22,79,248,22,80,202,200,248,22,81,200,251,2,65,196, +197,9,197,27,249,22,164,7,6,31,31,115,116,97,110,100,97,114,100,45,109, 111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,58,32, -196,28,193,250,22,182,9,11,195,196,248,22,180,9,193,28,249,22,143,7,194, -2,34,2,28,28,249,22,143,7,194,2,33,62,117,112,192,32,70,88,163,8, -36,37,50,11,67,115,115,45,62,114,107,116,222,33,71,27,248,22,140,7,194, -28,249,22,191,3,194,39,28,249,22,143,7,6,3,3,46,115,115,249,22,159, -7,197,249,22,179,3,198,39,249,22,160,7,250,22,159,7,198,36,249,22,179, +196,28,193,250,22,186,9,11,195,196,248,22,184,9,193,28,249,22,147,7,194, +2,34,2,28,28,249,22,147,7,194,2,33,62,117,112,192,32,70,88,163,8, +36,37,50,11,67,115,115,45,62,114,107,116,222,33,71,27,248,22,144,7,194, +28,249,22,131,4,194,39,28,249,22,147,7,6,3,3,46,115,115,249,22,163, +7,197,249,22,183,3,198,39,249,22,164,7,250,22,163,7,198,36,249,22,183, 3,199,39,2,38,193,193,0,8,35,114,120,34,91,46,93,34,32,73,88,163, -8,36,37,47,11,2,31,222,33,74,28,248,22,83,23,194,2,9,250,22,86, -6,4,4,10,32,32,32,248,22,176,14,248,22,101,23,198,2,248,2,73,248, -22,77,23,198,1,28,249,22,149,9,248,22,77,23,200,2,23,197,1,28,249, -22,147,9,248,22,76,23,200,1,23,196,1,251,22,180,9,2,21,6,41,41, +8,36,37,47,11,2,31,222,33,74,28,248,22,87,23,194,2,9,250,22,90, +6,4,4,10,32,32,32,248,22,180,14,248,22,105,23,198,2,248,2,73,248, +22,81,23,198,1,28,249,22,153,9,248,22,81,23,200,2,23,197,1,28,249, +22,151,9,248,22,80,23,200,1,23,196,1,251,22,184,9,2,21,6,41,41, 99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,10,32,32,97,116, 32,112,97,116,104,58,32,126,97,10,32,32,112,97,116,104,115,58,126,97,23, -200,1,249,22,1,22,160,7,248,2,73,248,22,90,23,201,1,12,12,247,192, -20,13,159,80,159,43,48,38,249,22,75,249,22,75,248,22,185,15,247,22,147, +200,1,249,22,1,22,164,7,248,2,73,248,22,94,23,201,1,12,12,247,192, +20,13,159,80,159,43,48,38,249,22,79,249,22,79,248,22,189,15,247,22,151, 13,23,201,1,23,195,1,20,13,159,80,159,43,40,37,250,80,159,46,41,37, -249,22,29,11,80,159,48,40,37,22,184,4,23,198,2,249,247,22,167,5,23, -200,1,27,248,22,63,248,22,176,14,23,201,1,28,23,202,2,28,250,22,156, -2,23,200,1,23,201,1,11,249,22,75,11,203,249,22,75,194,203,192,86,94, -28,28,248,22,172,14,23,196,2,10,248,22,152,5,23,196,2,12,28,23,197, -2,250,22,182,9,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112, -97,116,104,23,200,2,250,22,184,9,2,21,6,25,25,40,111,114,47,99,32, +249,22,33,11,80,159,48,40,37,22,188,4,23,198,2,249,247,22,171,5,23, +200,1,27,248,22,67,248,22,180,14,23,201,1,28,23,202,2,28,250,22,160, +2,23,200,1,23,201,1,11,249,22,79,11,203,249,22,79,194,203,192,86,94, +28,28,248,22,176,14,23,196,2,10,248,22,156,5,23,196,2,12,28,23,197, +2,250,22,186,9,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32,112, +97,116,104,23,200,2,250,22,188,9,2,21,6,25,25,40,111,114,47,99,32, 109,111,100,117,108,101,45,112,97,116,104,63,32,112,97,116,104,63,41,23,198, -2,28,28,248,22,73,23,196,2,249,22,147,9,248,22,76,23,198,2,2,4, -11,248,22,143,5,248,22,100,196,28,28,248,22,73,23,196,2,28,249,22,147, -9,248,22,76,23,198,2,2,32,28,248,22,73,248,22,100,23,197,2,249,22, -147,9,248,22,104,23,198,2,2,4,11,11,11,86,97,23,198,1,23,197,1, -23,196,1,23,193,1,248,22,143,5,249,2,64,248,22,117,23,199,2,248,22, -102,23,199,1,28,28,248,22,73,23,196,2,28,249,22,147,9,248,22,76,23, -198,2,2,32,28,28,249,22,149,9,248,22,100,23,198,2,2,34,10,249,22, -149,9,248,22,100,23,198,2,2,33,28,23,196,2,27,248,22,144,5,23,198, -2,28,248,22,60,193,10,28,248,22,73,193,248,22,60,248,22,76,194,11,11, -11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22,144,5,23,198, -1,248,22,143,5,249,2,64,28,248,22,73,23,197,2,248,22,76,23,197,2, -23,196,2,27,28,249,22,149,9,248,22,100,23,203,2,2,33,248,22,77,200, -248,22,102,200,28,248,22,73,23,198,2,249,22,89,248,22,77,199,194,192,28, -28,248,22,73,23,196,2,249,22,147,9,248,22,76,23,198,2,2,36,11,86, +2,28,28,248,22,77,23,196,2,249,22,151,9,248,22,80,23,198,2,2,4, +11,248,22,147,5,248,22,104,196,28,28,248,22,77,23,196,2,28,249,22,151, +9,248,22,80,23,198,2,2,32,28,248,22,77,248,22,104,23,197,2,249,22, +151,9,248,22,108,23,198,2,2,4,11,11,11,86,97,23,198,1,23,197,1, +23,196,1,23,193,1,248,22,147,5,249,2,64,248,22,121,23,199,2,248,22, +106,23,199,1,28,28,248,22,77,23,196,2,28,249,22,151,9,248,22,80,23, +198,2,2,32,28,28,249,22,153,9,248,22,104,23,198,2,2,34,10,249,22, +153,9,248,22,104,23,198,2,2,33,28,23,196,2,27,248,22,148,5,23,198, +2,28,248,22,64,193,10,28,248,22,77,193,248,22,64,248,22,80,194,11,11, +11,11,11,86,96,23,198,1,23,197,1,23,193,1,27,248,22,148,5,23,198, +1,248,22,147,5,249,2,64,28,248,22,77,23,197,2,248,22,80,23,197,2, +23,196,2,27,28,249,22,153,9,248,22,104,23,203,2,2,33,248,22,81,200, +248,22,106,200,28,248,22,77,23,198,2,249,22,93,248,22,81,199,194,192,28, +28,248,22,77,23,196,2,249,22,151,9,248,22,80,23,198,2,2,36,11,86, 94,248,80,159,38,8,26,39,193,253,213,200,201,202,203,11,80,158,43,53,28, -28,248,22,73,23,196,2,28,249,22,147,9,248,22,76,23,198,2,2,32,28, -248,22,73,248,22,100,23,197,2,249,22,147,9,248,22,104,23,198,2,2,36, -11,11,11,86,94,248,80,159,38,8,26,39,193,253,213,248,22,100,201,201,202, -203,248,22,102,201,80,158,43,53,86,94,23,193,1,27,88,163,8,36,37,47, +28,248,22,77,23,196,2,28,249,22,151,9,248,22,80,23,198,2,2,32,28, +248,22,77,248,22,104,23,197,2,249,22,151,9,248,22,108,23,198,2,2,36, +11,11,11,86,94,248,80,159,38,8,26,39,193,253,213,248,22,104,201,201,202, +203,248,22,106,201,80,158,43,53,86,94,23,193,1,27,88,163,8,36,37,47, 11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114, -223,5,33,68,27,28,248,22,73,23,198,2,28,249,22,147,9,2,32,248,22, -76,23,200,2,27,248,22,100,23,199,2,28,28,249,22,149,9,23,195,2,2, -34,10,249,22,149,9,23,195,2,2,33,86,94,23,193,1,28,23,199,2,27, -248,22,144,5,23,201,2,28,248,22,73,193,248,22,76,193,192,250,22,180,9, +223,5,33,68,27,28,248,22,77,23,198,2,28,249,22,151,9,2,32,248,22, +80,23,200,2,27,248,22,104,23,199,2,28,28,249,22,153,9,23,195,2,2, +34,10,249,22,153,9,23,195,2,2,33,86,94,23,193,1,28,23,199,2,27, +248,22,148,5,23,201,2,28,248,22,77,193,248,22,80,193,192,250,22,184,9, 2,21,6,45,45,110,111,32,98,97,115,101,32,112,97,116,104,32,102,111,114, 32,114,101,108,97,116,105,118,101,32,115,117,98,109,111,100,117,108,101,32,112, 97,116,104,58,32,126,46,115,23,201,2,192,23,197,2,23,197,2,27,28,248, -22,73,23,199,2,28,249,22,147,9,2,32,248,22,76,23,201,2,27,28,28, -28,249,22,149,9,248,22,100,23,202,2,2,34,10,249,22,149,9,248,22,100, -23,202,2,2,33,23,200,2,11,27,248,22,144,5,23,202,2,27,28,249,22, -149,9,248,22,100,23,204,2,2,33,248,22,77,23,202,1,248,22,102,23,202, -1,28,248,22,73,23,195,2,249,2,64,248,22,76,23,197,2,249,22,89,248, -22,77,23,199,1,23,197,1,249,2,64,23,196,1,23,195,1,249,2,64,2, -34,28,249,22,149,9,248,22,100,23,204,2,2,33,248,22,77,23,202,1,248, -22,102,23,202,1,28,248,22,73,193,248,22,77,193,11,11,11,27,28,248,22, -60,23,196,2,27,248,80,159,43,46,39,249,22,75,23,199,2,247,22,150,15, +22,77,23,199,2,28,249,22,151,9,2,32,248,22,80,23,201,2,27,28,28, +28,249,22,153,9,248,22,104,23,202,2,2,34,10,249,22,153,9,248,22,104, +23,202,2,2,33,23,200,2,11,27,248,22,148,5,23,202,2,27,28,249,22, +153,9,248,22,104,23,204,2,2,33,248,22,81,23,202,1,248,22,106,23,202, +1,28,248,22,77,23,195,2,249,2,64,248,22,80,23,197,2,249,22,93,248, +22,81,23,199,1,23,197,1,249,2,64,23,196,1,23,195,1,249,2,64,2, +34,28,249,22,153,9,248,22,104,23,204,2,2,33,248,22,81,23,202,1,248, +22,106,23,202,1,28,248,22,77,193,248,22,81,193,11,11,11,27,28,248,22, +64,23,196,2,27,248,80,159,43,46,39,249,22,79,23,199,2,247,22,154,15, 28,23,193,2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80, -159,46,52,39,248,22,66,23,201,2,11,27,28,248,22,83,23,195,2,2,37, -249,22,160,7,23,197,2,2,38,251,80,159,49,57,39,23,204,1,28,248,22, -83,23,199,2,23,199,1,86,94,23,199,1,248,22,76,23,199,2,28,248,22, -83,23,199,2,86,94,23,198,1,9,248,22,77,23,199,1,23,197,1,28,248, -22,137,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,27,39,23,202, -2,27,248,80,159,44,46,39,249,22,75,23,200,2,23,197,2,28,23,193,2, +159,46,52,39,248,22,70,23,201,2,11,27,28,248,22,87,23,195,2,2,37, +249,22,164,7,23,197,2,2,38,251,80,159,49,57,39,23,204,1,28,248,22, +87,23,199,2,23,199,1,86,94,23,199,1,248,22,80,23,199,2,28,248,22, +87,23,199,2,86,94,23,198,1,9,248,22,81,23,199,1,23,197,1,28,248, +22,141,7,23,196,2,86,94,23,196,1,27,248,80,159,43,8,27,39,23,202, +2,27,248,80,159,44,46,39,249,22,79,23,200,2,23,197,2,28,23,193,2, 192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,47,52,39, -23,201,2,11,250,22,1,22,190,14,23,199,1,249,22,89,249,22,2,32,0, -88,163,8,36,37,44,11,9,222,33,69,23,200,1,248,22,85,248,2,70,23, -201,1,28,248,22,172,14,23,196,2,86,94,23,196,1,248,80,159,42,8,28, -39,248,22,135,15,28,248,22,132,15,23,198,2,23,197,2,249,22,133,15,23, -199,2,248,80,159,46,8,27,39,23,205,2,28,249,22,147,9,248,22,76,23, -198,2,2,26,27,248,80,159,43,46,39,249,22,75,23,199,2,247,22,150,15, +23,201,2,11,250,22,1,22,130,15,23,199,1,249,22,93,249,22,2,32,0, +88,163,8,36,37,44,11,9,222,33,69,23,200,1,248,22,89,248,2,70,23, +201,1,28,248,22,176,14,23,196,2,86,94,23,196,1,248,80,159,42,8,28, +39,248,22,139,15,28,248,22,136,15,23,198,2,23,197,2,249,22,137,15,23, +199,2,248,80,159,46,8,27,39,23,205,2,28,249,22,151,9,248,22,80,23, +198,2,2,26,27,248,80,159,43,46,39,249,22,79,23,199,2,247,22,154,15, 28,23,193,2,192,86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80, -159,47,52,39,248,22,100,23,202,2,11,89,161,37,38,11,28,248,22,83,248, -22,102,23,201,2,28,248,22,83,23,194,2,249,22,164,15,2,72,23,196,2, -11,10,27,28,23,196,2,248,2,70,23,196,2,28,248,22,83,23,195,2,2, -37,28,249,22,164,15,2,72,23,197,2,248,2,70,23,196,2,249,22,160,7, -23,197,2,2,38,27,28,23,197,1,86,94,23,196,1,249,22,89,28,248,22, -83,248,22,102,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22, -89,249,22,2,80,159,53,8,29,39,248,22,102,23,208,2,23,197,1,28,248, -22,83,23,196,2,86,94,23,195,1,248,22,85,23,197,1,86,94,23,196,1, -23,195,1,251,80,159,51,57,39,23,206,1,248,22,76,23,198,2,248,22,77, -23,198,1,23,198,1,28,249,22,147,9,248,22,76,23,198,2,2,35,248,80, -159,42,8,28,39,248,22,135,15,249,22,133,15,248,22,137,15,248,22,100,23, -201,2,248,80,159,46,8,27,39,23,205,2,12,86,94,28,28,248,22,172,14, -23,194,2,10,248,22,162,8,23,194,2,86,94,23,201,1,12,28,23,201,2, -250,22,182,9,67,114,101,113,117,105,114,101,249,22,185,7,6,17,17,98,97, +159,47,52,39,248,22,104,23,202,2,11,89,161,37,38,11,28,248,22,87,248, +22,106,23,201,2,28,248,22,87,23,194,2,249,22,168,15,2,72,23,196,2, +11,10,27,28,23,196,2,248,2,70,23,196,2,28,248,22,87,23,195,2,2, +37,28,249,22,168,15,2,72,23,197,2,248,2,70,23,196,2,249,22,164,7, +23,197,2,2,38,27,28,23,197,1,86,94,23,196,1,249,22,93,28,248,22, +87,248,22,106,23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22, +93,249,22,2,80,159,53,8,29,39,248,22,106,23,208,2,23,197,1,28,248, +22,87,23,196,2,86,94,23,195,1,248,22,89,23,197,1,86,94,23,196,1, +23,195,1,251,80,159,51,57,39,23,206,1,248,22,80,23,198,2,248,22,81, +23,198,1,23,198,1,28,249,22,151,9,248,22,80,23,198,2,2,35,248,80, +159,42,8,28,39,248,22,139,15,249,22,137,15,248,22,141,15,248,22,104,23, +201,2,248,80,159,46,8,27,39,23,205,2,12,86,94,28,28,248,22,176,14, +23,194,2,10,248,22,166,8,23,194,2,86,94,23,201,1,12,28,23,201,2, +250,22,186,9,67,114,101,113,117,105,114,101,249,22,189,7,6,17,17,98,97, 100,32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22, -76,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22,184,9,2,21, +80,23,199,2,6,0,0,23,204,1,86,94,23,201,1,250,22,188,9,2,21, 6,12,12,109,111,100,117,108,101,45,112,97,116,104,63,23,198,2,27,28,248, -22,162,8,23,195,2,249,22,167,8,23,196,2,36,249,22,135,15,248,22,136, -15,23,197,2,11,27,28,248,22,162,8,23,196,2,249,22,167,8,23,197,2, +22,166,8,23,195,2,249,22,171,8,23,196,2,36,249,22,139,15,248,22,140, +15,23,197,2,11,27,28,248,22,166,8,23,196,2,249,22,171,8,23,197,2, 37,248,80,159,44,58,39,23,195,2,90,159,39,11,89,161,39,36,11,28,248, -22,162,8,23,199,2,250,22,7,2,39,249,22,167,8,23,203,2,38,2,39, -248,22,129,15,23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,162,8, -23,200,2,249,22,167,8,23,201,2,39,249,80,159,49,56,39,23,197,2,5, -0,27,28,248,22,162,8,23,201,2,249,22,167,8,23,202,2,40,248,22,143, -5,23,200,2,27,250,22,156,2,80,159,52,43,38,248,22,185,15,247,22,147, -13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,247,22,136,2,86, -94,250,22,154,2,80,159,54,43,38,248,22,185,15,247,22,147,13,195,192,27, -28,23,204,2,248,22,143,5,249,22,75,248,22,144,5,23,200,2,23,207,2, -23,196,2,86,95,28,23,212,1,27,250,22,156,2,23,198,2,196,11,28,23, +22,166,8,23,199,2,250,22,7,2,39,249,22,171,8,23,203,2,38,2,39, +248,22,133,15,23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,166,8, +23,200,2,249,22,171,8,23,201,2,39,249,80,159,49,56,39,23,197,2,5, +0,27,28,248,22,166,8,23,201,2,249,22,171,8,23,202,2,40,248,22,147, +5,23,200,2,27,250,22,160,2,80,159,52,43,38,248,22,189,15,247,22,151, +13,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,247,22,140,2,86, +94,250,22,158,2,80,159,54,43,38,248,22,189,15,247,22,151,13,195,192,27, +28,23,204,2,248,22,147,5,249,22,79,248,22,148,5,23,200,2,23,207,2, +23,196,2,86,95,28,23,212,1,27,250,22,160,2,23,198,2,196,11,28,23, 193,1,12,86,94,27,27,28,248,22,17,80,159,55,49,38,80,159,54,49,38, -247,22,19,251,22,29,11,80,159,58,48,38,9,23,197,1,27,248,22,185,15, -247,22,147,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226, +247,22,19,251,22,33,11,80,159,58,48,38,9,23,197,1,27,248,22,189,15, +247,22,151,13,86,94,249,22,3,20,20,94,88,163,8,36,37,54,11,9,226, 14,13,2,3,33,75,23,195,1,23,196,2,248,28,248,22,17,80,159,56,49, 38,32,0,88,163,36,37,42,11,9,222,33,76,80,159,55,8,30,39,20,20, 95,88,163,36,36,55,8,176,64,9,230,19,15,13,12,8,7,5,2,33,77, -23,195,1,23,208,1,250,22,154,2,23,198,1,196,10,12,28,28,248,22,162, -8,23,204,1,11,28,248,22,137,7,23,206,2,10,28,248,22,60,23,206,2, -10,28,248,22,73,23,206,2,249,22,147,9,248,22,76,23,208,2,2,26,11, -249,80,159,53,47,39,28,248,22,137,7,23,208,2,249,22,75,23,209,1,248, -80,159,56,8,27,39,23,215,1,86,94,23,212,1,249,22,75,23,209,1,247, -22,150,15,252,22,164,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203, +23,195,1,23,208,1,250,22,158,2,23,198,1,196,10,12,28,28,248,22,166, +8,23,204,1,11,28,248,22,141,7,23,206,2,10,28,248,22,64,23,206,2, +10,28,248,22,77,23,206,2,249,22,151,9,248,22,80,23,208,2,2,26,11, +249,80,159,53,47,39,28,248,22,141,7,23,208,2,249,22,79,23,209,1,248, +80,159,56,8,27,39,23,215,1,86,94,23,212,1,249,22,79,23,209,1,247, +22,154,15,252,22,168,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203, 1,12,192,86,96,20,18,159,11,80,158,36,53,248,80,159,37,8,25,37,249, -22,29,11,80,159,39,55,37,248,22,183,4,80,159,37,54,38,248,22,167,5, -80,159,37,37,39,248,22,141,14,80,159,37,42,39,20,18,159,11,80,158,36, -53,248,80,159,37,8,25,37,249,22,29,11,80,159,39,55,37,20,18,159,11, -80,158,36,53,248,80,159,37,8,25,37,249,22,29,11,80,159,39,55,37,159, +22,33,11,80,159,39,55,37,248,22,187,4,80,159,37,54,38,248,22,171,5, +80,159,37,37,39,248,22,145,14,80,159,37,42,39,20,18,159,11,80,158,36, +53,248,80,159,37,8,25,37,249,22,33,11,80,159,39,55,37,20,18,159,11, +80,158,36,53,248,80,159,37,8,25,37,249,22,33,11,80,159,39,55,37,159, 36,20,113,159,36,16,1,11,16,0,20,26,144,9,2,1,2,1,29,11,11, 11,9,9,11,11,11,10,38,80,158,36,36,20,113,159,41,16,26,2,2,2, 3,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,63,11,30,2,5, @@ -889,16 +889,16 @@ 50,8,240,0,192,0,0,67,103,101,116,45,100,105,114,223,0,33,43,80,159, 36,8,27,39,20,15,16,2,88,164,8,34,37,45,8,240,0,0,10,0,1, 21,112,114,101,112,45,112,108,97,110,101,116,45,114,101,115,111,108,118,101,114, -33,37,224,1,0,33,44,80,159,36,8,26,39,20,15,16,2,248,22,159,8, +33,37,224,1,0,33,44,80,159,36,8,26,39,20,15,16,2,248,22,163,8, 69,115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16,2,88,163, 36,38,8,38,8,61,2,3,223,0,33,53,80,159,36,37,37,20,15,16,2, 20,27,158,32,0,88,163,8,36,37,42,11,2,9,222,192,32,0,88,163,8, -36,37,42,11,2,9,222,192,80,159,36,42,37,20,15,16,2,247,22,139,2, +36,37,42,11,2,9,222,192,80,159,36,42,37,20,15,16,2,247,22,143,2, 80,159,36,43,37,20,15,16,2,8,128,8,80,159,36,44,37,20,15,16,2, -249,22,163,8,8,128,8,11,80,159,36,45,37,20,15,16,2,88,163,8,36, +249,22,167,8,8,128,8,11,80,159,36,45,37,20,15,16,2,88,163,8,36, 37,50,8,128,8,2,13,223,0,33,54,80,159,36,46,37,20,15,16,2,88, 163,8,36,38,55,8,128,8,2,14,223,0,33,55,80,159,36,47,37,20,15, -16,2,247,22,71,80,159,36,48,37,20,15,16,2,248,22,18,74,109,111,100, +16,2,247,22,75,80,159,36,48,37,20,15,16,2,248,22,18,74,109,111,100, 117,108,101,45,108,111,97,100,105,110,103,80,159,36,49,37,20,15,16,2,11, 80,158,36,50,20,15,16,2,11,80,158,36,51,20,15,16,2,32,0,88,163, 36,38,8,25,11,2,19,222,33,61,80,159,36,52,37,20,15,16,2,11,80, @@ -915,7 +915,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 7461); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,49,84,0,0,0,0,0,0,0,0,0, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,53,46,51,46,48,46,49,50,84,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16, 0,29,0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,98,1, 0,0,69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2, @@ -923,7 +923,7 @@ 111,114,107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2, 2,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2, 66,35,37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115, -11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,186, +11,29,94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,228, 85,0,0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2, 6,36,36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9, 36,36,16,0,159,36,20,113,159,36,16,1,11,16,0,20,26,144,9,2,1, diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index d28e7c1e0f..8ab55ebd70 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -3559,6 +3559,12 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, if (SCHEME_TYPE(val) < _scheme_values_types_) val = _scheme_eval_linked_expr_wp(val, p); + if (SCHEME_NP_CHAPERONEP(key) + && SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(key))) { + val = scheme_chaperone_do_continuation_mark("with-continuation-mark", 0, key, val); + key = SCHEME_CHAPERONE_VAL(key); + } + scheme_set_cont_mark(key, val); obj = wcm->body; diff --git a/src/racket/src/fun.c b/src/racket/src/fun.c index 26daf28087..88e21c10bd 100644 --- a/src/racket/src/fun.c +++ b/src/racket/src/fun.c @@ -143,6 +143,10 @@ static Scheme_Object *impersonate_prompt_tag (int argc, Scheme_Object *argv[]); static Scheme_Object *chaperone_prompt_tag (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_sema (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_sema_enable_break (int argc, Scheme_Object *argv[]); +static Scheme_Object *make_continuation_mark_key (int argc, Scheme_Object *argv[]); +static Scheme_Object *continuation_mark_key_p (int argc, Scheme_Object *argv[]); +static Scheme_Object *impersonate_continuation_mark_key (int argc, Scheme_Object *argv[]); +static Scheme_Object *chaperone_continuation_mark_key (int argc, Scheme_Object *argv[]); static Scheme_Object *cc_marks (int argc, Scheme_Object *argv[]); static Scheme_Object *cont_marks (int argc, Scheme_Object *argv[]); static Scheme_Object *cc_marks_p (int argc, Scheme_Object *argv[]); @@ -395,6 +399,27 @@ scheme_init_fun (Scheme_Env *env) 0, -1), env); + scheme_add_global_constant("make-continuation-mark-key", + scheme_make_prim_w_arity(make_continuation_mark_key, + "make-continuation-mark-key", + 0, 1), + env); + scheme_add_global_constant("continuation-mark-key?", + scheme_make_prim_w_arity(continuation_mark_key_p, + "continuation-mark-key?", + 1, 1), + env); + scheme_add_global_constant("impersonate-continuation-mark-key", + scheme_make_prim_w_arity(impersonate_continuation_mark_key, + "impersonate-continuation-mark-key", + 3, -1), + env); + scheme_add_global_constant("chaperone-continuation-mark-key", + scheme_make_prim_w_arity(chaperone_continuation_mark_key, + "chaperone-continuation-mark-key", + 3, -1), + env); + scheme_add_global_constant("current-continuation-marks", scheme_make_prim_w_arity(cc_marks, "current-continuation-marks", @@ -3742,6 +3767,100 @@ int scheme_escape_continuation_ok(Scheme_Object *ec) return 0; } +static Scheme_Object *make_continuation_mark_key (int argc, Scheme_Object *argv[]) +{ + Scheme_Object *o; + + if (argc && !SCHEME_SYMBOLP(argv[0])) + scheme_wrong_contract("make-continuation-mark-key", "symbol?", 0, argc, argv); + + o = scheme_alloc_small_object(); + o->type = scheme_continuation_mark_key_type; + SCHEME_PTR_VAL(o) = (argc ? argv[0] : NULL); + + return o; +} + +static Scheme_Object *continuation_mark_key_p (int argc, Scheme_Object *argv[]) +{ + return (SCHEME_CHAPERONE_CONTINUATION_MARK_KEYP(argv[0]) + ? scheme_true + : scheme_false); +} + +Scheme_Object *scheme_chaperone_do_continuation_mark (const char *name, int is_get, Scheme_Object *key, Scheme_Object *val) +{ + Scheme_Chaperone *px; + Scheme_Object *proc; + Scheme_Object *a[1]; + + while (1) { + if (SCHEME_CONTINUATION_MARK_KEYP(key)) { + return val; + } else { + px = (Scheme_Chaperone *)key; + key = px->prev; + + if (is_get) + proc = SCHEME_CAR(px->redirects); + else + proc = SCHEME_CDR(px->redirects); + + a[0] = val; + val = _scheme_apply(proc, 1, a); + + if (!(SCHEME_CHAPERONE_FLAGS(px) & SCHEME_CHAPERONE_IS_IMPERSONATOR)) { + if (!scheme_chaperone_of(val, a[0])) + scheme_wrong_chaperoned(name, "value", a[0], val); + } + } + } +} + +Scheme_Object *do_chaperone_continuation_mark_key (const char *name, int is_impersonator, int argc, Scheme_Object **argv) +{ + Scheme_Chaperone *px; + Scheme_Object *val = argv[0]; + Scheme_Object *redirects; + Scheme_Hash_Tree *props; + + if (SCHEME_CHAPERONEP(val)) + val = SCHEME_CHAPERONE_VAL(val); + + if (!SCHEME_CONTINUATION_MARK_KEYP(val)) + scheme_wrong_contract(name, "continuation-mark-key?", 0, argc, argv); + + scheme_check_proc_arity(name, 1, 1, argc, argv); + scheme_check_proc_arity(name, 1, 2, argc, argv); + + redirects = scheme_make_pair(argv[1], argv[2]); + + props = scheme_parse_chaperone_props(name, 3, argc, argv); + + px = MALLOC_ONE_TAGGED(Scheme_Chaperone); + px->iso.so.type = scheme_chaperone_type; + px->val = val; + px->prev = argv[0]; + px->props = props; + px->redirects = redirects; + + if (is_impersonator) + SCHEME_CHAPERONE_FLAGS(px) |= SCHEME_CHAPERONE_IS_IMPERSONATOR; + + return (Scheme_Object *)px; +} + +static Scheme_Object *chaperone_continuation_mark_key(int argc, Scheme_Object **argv) +{ + return do_chaperone_continuation_mark_key("chaperone-continuation-mark-key", 0, argc, argv); +} + +static Scheme_Object *impersonate_continuation_mark_key(int argc, Scheme_Object **argv) +{ + return do_chaperone_continuation_mark_key("impersonate-continuation-mark-key", 1, argc, argv); +} + + static Scheme_Object *call_with_immediate_cc_mark (int argc, Scheme_Object *argv[]) { Scheme_Thread *p = scheme_current_thread; @@ -3751,6 +3870,10 @@ static Scheme_Object *call_with_immediate_cc_mark (int argc, Scheme_Object *argv scheme_check_proc_arity("call-with-immediate-continuation-mark", 1, 1, argc, argv); key = argv[0]; + if (SCHEME_NP_CHAPERONEP(key) + && SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(key))) + key = SCHEME_CHAPERONE_VAL(key); + if (argc > 2) a[0] = argv[2]; else @@ -3768,7 +3891,16 @@ static Scheme_Object *call_with_immediate_cc_mark (int argc, Scheme_Object *argv break; } else { if (find->key == key) { - a[0] = find->val; + /* + * If not equal, it was a chaperone since we unwrapped the key + */ + if (argv[0] != key) { + Scheme_Object *val; + val = scheme_chaperone_do_continuation_mark("call-with-immediate-continuation-mark", + 1, argv[0], find->val); + a[0] = val; + } else + a[0] = find->val; break; } } @@ -7093,7 +7225,9 @@ extract_cc_marks(int argc, Scheme_Object *argv[]) { Scheme_Cont_Mark_Chain *chain; Scheme_Object *first = scheme_null, *last = NULL, *key, *prompt_tag; + Scheme_Object *v; Scheme_Object *pr; + int is_chaperoned = 0; if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_cont_mark_set_type)) { scheme_wrong_contract("continuation-mark-set->list", "continuation-mark-set?", 0, argc, argv); @@ -7124,11 +7258,22 @@ extract_cc_marks(int argc, Scheme_Object *argv[]) return NULL; } + if (SCHEME_NP_CHAPERONEP(key) + && SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(key))) { + is_chaperoned = 1; + key = SCHEME_CHAPERONE_VAL(key); + } + prompt_tag = SCHEME_PTR_VAL(prompt_tag); while (chain) { if (chain->key == key) { - pr = scheme_make_pair(chain->val, scheme_null); + if (is_chaperoned) + v = scheme_chaperone_do_continuation_mark("continuation-mark-set->list", + 1, argv[1], chain->val); + else + v = chain->val; + pr = scheme_make_pair(v, scheme_null); if (last) SCHEME_CDR(last) = pr; else @@ -7198,8 +7343,17 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) while (chain) { for (i = 0; i < len; i++) { + int is_chaperoned = 0; + Scheme_Object *orig_key, *val; + if (SCHEME_MARK_CHAIN_FLAG(chain) & 0x1) last_pos = -1; + if (SCHEME_NP_CHAPERONEP(keys[i]) + && SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(keys[i]))) { + is_chaperoned = 1; + orig_key = keys[i]; + keys[i] = SCHEME_CHAPERONE_VAL(orig_key); + } if (SAME_OBJ(chain->key, keys[i])) { intptr_t pos; pos = (intptr_t)chain->pos; @@ -7214,7 +7368,12 @@ extract_cc_markses(int argc, Scheme_Object *argv[]) last = pr; } else vals = SCHEME_CAR(last); - SCHEME_VEC_ELS(vals)[i] = chain->val; + if (is_chaperoned) { + val = scheme_chaperone_do_continuation_mark("continuation-mark-set->list*", + 1, orig_key, chain->val); + SCHEME_VEC_ELS(vals)[i] = val; + } else + SCHEME_VEC_ELS(vals)[i] = chain->val; } } @@ -7324,16 +7483,30 @@ extract_cc_proc_marks(int argc, Scheme_Object *argv[]) } static Scheme_Object * -scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key, +scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key_arg, Scheme_Object *prompt_tag, Scheme_Meta_Continuation **_meta, MZ_MARK_POS_TYPE *_vpos) { + Scheme_Object *key = key_arg; + if (SCHEME_NP_CHAPERONEP(key) + && SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(key))) { + key = SCHEME_CHAPERONE_VAL(key); + } + if (mark_set) { Scheme_Cont_Mark_Chain *chain; chain = ((Scheme_Cont_Mark_Set *)mark_set)->chain; while (chain) { if (chain->key == key) - return chain->val; + if (key_arg != key) + /* + * TODO: is this the only name that this procedure is called as + * publicly? + */ + return scheme_chaperone_do_continuation_mark("continuation-mark-set-first", + 1, key_arg, chain->val); + else + return chain->val; else if (SAME_OBJ(chain->key, prompt_tag)) break; else @@ -7450,6 +7623,8 @@ scheme_extract_one_cc_mark_with_meta(Scheme_Object *mark_set, Scheme_Object *key } else cht = NULL; + if (key_arg != key) + val = scheme_chaperone_do_continuation_mark("continuation-mark-set-first", 1, key_arg, val); if (!cache || !SCHEME_VECTORP(cache)) { /* No cache so far, so map one key */ cache = scheme_make_vector(4, NULL); diff --git a/src/racket/src/gen-jit-ts.rkt b/src/racket/src/gen-jit-ts.rkt index c57288f6e4..69f5ca9119 100644 --- a/src/racket/src/gen-jit-ts.rkt +++ b/src/racket/src/gen-jit-ts.rkt @@ -60,7 +60,7 @@ XFORM_SKIP_PROC \ { \ if (scheme_use_rtcall) \ - @|return| scheme_rtcall_@|t|("[" #id "]", src_type, id, @(string-join arg-names ", ")); \ + @|return| scheme_rtcall_@|t|("[" #id "]", src_type, @(string-join (cons "id" arg-names) ", ")); \ else \ @|return| id(@(string-join arg-names ", ")); \ }}) @@ -196,7 +196,8 @@ sis_v ss_i iSp_v - sss_s)) + sss_s + _v)) (with-output-to-file "jit_ts_def.c" #:exists 'replace diff --git a/src/racket/src/jit.c b/src/racket/src/jit.c index 9641155c8d..08e6c1d5f9 100644 --- a/src/racket/src/jit.c +++ b/src/racket/src/jit.c @@ -2857,6 +2857,23 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w /* Key and value are on runstack */ mz_rs_sync(); + + if (SCHEME_TYPE(wcm->key) < _scheme_values_types_) { + /* Check whether the key is chaperoned: */ + GC_CAN_IGNORE jit_insn *ref, *ref2; + mz_rs_ldxi(JIT_R0, 1); + __START_TINY_JUMPS__(1); + ref = jit_bmsi_i(jit_forward(), JIT_R0, 0x1); + ref2 = mz_bnei_t(jit_forward(), JIT_R0, scheme_chaperone_type, JIT_R1); + __END_TINY_JUMPS__(1); + (void)jit_calli(sjc.wcm_chaperone); /* adjusts values on the runstack */ + __START_TINY_JUMPS__(1); + mz_patch_branch(ref); + mz_patch_branch(ref2); + __END_TINY_JUMPS__(1); + } + + /* Key and value are (still) on runstack */ if (!wcm_may_replace) { (void)jit_calli(sjc.wcm_nontail_code); wcm_may_replace = 1; diff --git a/src/racket/src/jit.h b/src/racket/src/jit.h index b902720c1f..cc04bf7b7f 100644 --- a/src/racket/src/jit.h +++ b/src/racket/src/jit.h @@ -268,7 +268,7 @@ struct scheme_jit_common_record { void *module_run_start_code, *module_exprun_start_code, *module_start_start_code; void *box_flonum_from_stack_code, *box_flonum_from_reg_code; void *fl1_fail_code, *fl2rr_fail_code[2], *fl2fr_fail_code[2], *fl2rf_fail_code[2]; - void *wcm_code, *wcm_nontail_code; + void *wcm_code, *wcm_nontail_code, *wcm_chaperone; void *apply_to_list_tail_code, *apply_to_list_code, *apply_to_list_multi_ok_code; void *eqv_code, *eqv_branch_code; void *proc_arity_includes_code; diff --git a/src/racket/src/jit_ts.c b/src/racket/src/jit_ts.c index 0f5de16334..d0caa15eac 100644 --- a/src/racket/src/jit_ts.c +++ b/src/racket/src/jit_ts.c @@ -91,6 +91,7 @@ define_ts_iS_s(scheme_checked_list_tail, FSRC_MARKS) define_ts_iSs_s(scheme_struct_getter, FSRC_MARKS) define_ts_iSs_s(scheme_struct_setter, FSRC_MARKS) define_ts_iS_s(scheme_box_cas, FSRC_MARKS) +define_ts__v(chaperone_set_mark, FSRC_MARKS) #endif #ifdef JITCALL_TS_PROCS @@ -178,6 +179,7 @@ define_ts_s_s(scheme_box, FSRC_OTHER) # define ts_scheme_unbox scheme_unbox # define ts_scheme_set_box scheme_set_box # define ts_scheme_box_cas scheme_box_cas +# define ts_chaperone_set_mark chaperone_set_mark # define ts_scheme_vector_length scheme_vector_length # define ts_scheme_flvector_length scheme_flvector_length # define ts_scheme_fxvector_length scheme_fxvector_length diff --git a/src/racket/src/jit_ts_def.c b/src/racket/src/jit_ts_def.c index f0b054f2b0..0dd57825a8 100644 --- a/src/racket/src/jit_ts_def.c +++ b/src/racket/src/jit_ts_def.c @@ -39,7 +39,7 @@ static Scheme_Object* ts_ ## id() \ XFORM_SKIP_PROC \ { \ if (scheme_use_rtcall) \ - return scheme_rtcall__s("[" #id "]", src_type, id, ); \ + return scheme_rtcall__s("[" #id "]", src_type, id); \ else \ return id(); \ } @@ -241,3 +241,12 @@ static Scheme_Object* ts_ ## id(Scheme_Object* g59, Scheme_Object* g60, Scheme_O else \ return id(g59, g60, g61); \ } +#define define_ts__v(id, src_type) \ +static void ts_ ## id() \ + XFORM_SKIP_PROC \ +{ \ + if (scheme_use_rtcall) \ + scheme_rtcall__v("[" #id "]", src_type, id); \ + else \ + id(); \ +} diff --git a/src/racket/src/jit_ts_future_glue.c b/src/racket/src/jit_ts_future_glue.c index 706db8b8b3..071d2db6de 100644 --- a/src/racket/src/jit_ts_future_glue.c +++ b/src/racket/src/jit_ts_future_glue.c @@ -701,4 +701,29 @@ future->retval_s = 0; receive_special_result(future, retval, 1); return retval; +} + void scheme_rtcall__v(const char *who, int src_type, prim__v f ) + XFORM_SKIP_PROC +{ + Scheme_Future_Thread_State *fts = scheme_future_thread_state; + future_t *future; + double tm; + + + future = fts->thread->current_ft; + future->prim_protocol = SIG__v; + future->prim_func = f; + tm = get_future_timestamp(); + future->time_of_request = tm; + future->source_of_request = who; + future->source_type = src_type; + + + future_do_runtimecall(fts, (void*)f, 0, 1, 0); + fts->thread = scheme_current_thread; + future = fts->thread->current_ft; + + + + } diff --git a/src/racket/src/jit_ts_protos.h b/src/racket/src/jit_ts_protos.h index c81beac67f..b41bb8bd13 100644 --- a/src/racket/src/jit_ts_protos.h +++ b/src/racket/src/jit_ts_protos.h @@ -79,3 +79,6 @@ void scheme_rtcall_iSp_v(const char *who, int src_type, prim_iSp_v f, int g221, #define SIG_sss_s 36 typedef Scheme_Object* (*prim_sss_s)(Scheme_Object*, Scheme_Object*, Scheme_Object*); Scheme_Object* scheme_rtcall_sss_s(const char *who, int src_type, prim_sss_s f, Scheme_Object* g224, Scheme_Object* g225, Scheme_Object* g226); +#define SIG__v 37 +typedef void (*prim__v)(); +void scheme_rtcall__v(const char *who, int src_type, prim__v f ); diff --git a/src/racket/src/jit_ts_runtime_glue.c b/src/racket/src/jit_ts_runtime_glue.c index b0e37151b9..cbbf2c1ce1 100644 --- a/src/racket/src/jit_ts_runtime_glue.c +++ b/src/racket/src/jit_ts_runtime_glue.c @@ -374,5 +374,19 @@ case SIG_sss_s: f(arg_s0, arg_s1, arg_s2); future->retval_s = retval; send_special_result(future, retval); + break; + } +case SIG__v: + { + prim__v f = (prim__v)future->prim_func; + + + + + + + f(); + + break; } diff --git a/src/racket/src/jitcommon.c b/src/racket/src/jitcommon.c index 2e8a272ada..1e5713e0a8 100644 --- a/src/racket/src/jitcommon.c +++ b/src/racket/src/jitcommon.c @@ -165,6 +165,15 @@ static void ts_allocate_values(int count, Scheme_Thread *p) XFORM_SKIP_PROC # define ts_allocate_values allocate_values #endif +static void chaperone_set_mark() +/* arguments are on runstack; result goes there, too */ +{ + Scheme_Object *v; + v = scheme_chaperone_do_continuation_mark("with-continuation-mark", 0, MZ_RUNSTACK[1], MZ_RUNSTACK[0]); + MZ_RUNSTACK[0] = v; + MZ_RUNSTACK[1] = SCHEME_CHAPERONE_VAL(MZ_RUNSTACK[1]); +} + #define JITCOMMON_TS_PROCS #define JIT_APPLY_TS_PROCS #include "jit_ts.c" @@ -2258,6 +2267,21 @@ static int common6(mz_jit_state *jitter, void *_data) scheme_jit_register_sub_func(jitter, sjc.wcm_code, scheme_false); } + /* wcm_chaperone */ + /* key and value are on runstack and are updated there */ + { + GC_CAN_IGNORE jit_insn *ref2; + sjc.wcm_chaperone = jit_get_ip().ptr; + + mz_prolog(JIT_R2); + JIT_UPDATE_THREAD_RSPTR(); + jit_prepare(0); + (void)mz_finish_lwe(ts_chaperone_set_mark, ref2); + mz_epilog(JIT_R2); + + scheme_jit_register_sub_func(jitter, sjc.wcm_chaperone, scheme_false); + } + return 1; } diff --git a/src/racket/src/schminc.h b/src/racket/src/schminc.h index 438ad49269..8dd1d0d85c 100644 --- a/src/racket/src/schminc.h +++ b/src/racket/src/schminc.h @@ -14,7 +14,7 @@ #define USE_COMPILED_STARTUP 1 -#define EXPECTED_PRIM_COUNT 1060 +#define EXPECTED_PRIM_COUNT 1064 #define EXPECTED_UNSAFE_COUNT 79 #define EXPECTED_FLFXNUM_COUNT 69 #define EXPECTED_FUTURES_COUNT 13 diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 64c7fac822..14c0737bf6 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -885,6 +885,9 @@ typedef struct Scheme_Chaperone { || (SCHEME_NP_CHAPERONEP(obj) && SCHEME_BUCKTP(SCHEME_CHAPERONE_VAL(obj)))) #define SCHEME_CHAPERONE_PROMPT_TAGP(obj) (SCHEME_PROMPT_TAGP(obj) \ || (SCHEME_NP_CHAPERONEP(obj) && SCHEME_PROMPT_TAGP(SCHEME_CHAPERONE_VAL(obj)))) +#define SCHEME_CHAPERONE_CONTINUATION_MARK_KEYP(obj) (SCHEME_CONTINUATION_MARK_KEYP(obj) \ + || (SCHEME_NP_CHAPERONEP(obj) \ + && SCHEME_CONTINUATION_MARK_KEYP(SCHEME_CHAPERONE_VAL(obj)))) Scheme_Object *scheme_chaperone_vector_ref(Scheme_Object *o, int i); void scheme_chaperone_vector_set(Scheme_Object *o, int i, Scheme_Object *v); @@ -1675,6 +1678,8 @@ Scheme_Object *scheme_apply_multi_with_dynamic_state(Scheme_Object *rator, int n Scheme_Object *scheme_jump_to_continuation(Scheme_Object *obj, int num_rands, Scheme_Object **rands, Scheme_Object **old_runstack, int can_ec); +Scheme_Object *scheme_chaperone_do_continuation_mark(const char *name, int is_get, Scheme_Object *key, Scheme_Object *val); + /*========================================================================*/ /* semaphores and locks */ /*========================================================================*/ diff --git a/src/racket/src/schvers.h b/src/racket/src/schvers.h index 4206da5901..bc58b232c5 100644 --- a/src/racket/src/schvers.h +++ b/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "5.3.0.11" +#define MZSCHEME_VERSION "5.3.0.12" #define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_Y 3 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 11 +#define MZSCHEME_VERSION_W 12 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/src/racket/src/stypes.h b/src/racket/src/stypes.h index 98605b42ba..ceb4e5bb76 100644 --- a/src/racket/src/stypes.h +++ b/src/racket/src/stypes.h @@ -172,109 +172,110 @@ enum { scheme_raw_pair_type, /* 152 */ scheme_prompt_type, /* 153 */ scheme_prompt_tag_type, /* 154 */ - scheme_expanded_syntax_type, /* 155 */ - scheme_delay_syntax_type, /* 156 */ - scheme_cust_box_type, /* 157 */ - scheme_resolved_module_path_type, /* 158 */ - scheme_module_phase_exports_type, /* 159 */ - scheme_logger_type, /* 160 */ - scheme_log_reader_type, /* 161 */ - scheme_free_id_info_type, /* 162 */ - scheme_rib_delimiter_type, /* 163 */ - scheme_noninline_proc_type, /* 164 */ - scheme_prune_context_type, /* 165 */ - scheme_future_type, /* 166 */ - scheme_flvector_type, /* 167 */ - scheme_fxvector_type, /* 168 */ - scheme_place_type, /* 169 */ - scheme_place_object_type, /* 170 */ - scheme_place_async_channel_type, /* 171 */ - scheme_place_bi_channel_type, /* 172 */ - scheme_once_used_type, /* 173 */ - scheme_serialized_symbol_type, /* 174 */ - scheme_serialized_structure_type, /* 175 */ - scheme_fsemaphore_type, /* 176 */ - scheme_serialized_tcp_fd_type, /* 177 */ - scheme_serialized_file_fd_type, /* 178 */ - scheme_port_closed_evt_type, /* 179 */ + scheme_continuation_mark_key_type, /* 155 */ + scheme_expanded_syntax_type, /* 156 */ + scheme_delay_syntax_type, /* 157 */ + scheme_cust_box_type, /* 158 */ + scheme_resolved_module_path_type, /* 159 */ + scheme_module_phase_exports_type, /* 160 */ + scheme_logger_type, /* 161 */ + scheme_log_reader_type, /* 162 */ + scheme_free_id_info_type, /* 163 */ + scheme_rib_delimiter_type, /* 164 */ + scheme_noninline_proc_type, /* 165 */ + scheme_prune_context_type, /* 166 */ + scheme_future_type, /* 167 */ + scheme_flvector_type, /* 168 */ + scheme_fxvector_type, /* 169 */ + scheme_place_type, /* 170 */ + scheme_place_object_type, /* 171 */ + scheme_place_async_channel_type, /* 172 */ + scheme_place_bi_channel_type, /* 173 */ + scheme_once_used_type, /* 174 */ + scheme_serialized_symbol_type, /* 175 */ + scheme_serialized_structure_type, /* 176 */ + scheme_fsemaphore_type, /* 177 */ + scheme_serialized_tcp_fd_type, /* 178 */ + scheme_serialized_file_fd_type, /* 179 */ + scheme_port_closed_evt_type, /* 180 */ #ifdef MZTAG_REQUIRED - _scheme_last_normal_type_, /* 180 */ + _scheme_last_normal_type_, /* 181 */ - scheme_rt_weak_array, /* 181 */ + scheme_rt_weak_array, /* 182 */ - scheme_rt_comp_env, /* 182 */ - scheme_rt_constant_binding, /* 183 */ - scheme_rt_resolve_info, /* 184 */ - scheme_rt_unresolve_info, /* 185 */ - scheme_rt_optimize_info, /* 186 */ - scheme_rt_compile_info, /* 187 */ - scheme_rt_cont_mark, /* 188 */ - scheme_rt_saved_stack, /* 189 */ - scheme_rt_reply_item, /* 190 */ - scheme_rt_closure_info, /* 191 */ - scheme_rt_overflow, /* 192 */ - scheme_rt_overflow_jmp, /* 193 */ - scheme_rt_meta_cont, /* 194 */ - scheme_rt_dyn_wind_cell, /* 195 */ - scheme_rt_dyn_wind_info, /* 196 */ - scheme_rt_dyn_wind, /* 197 */ - scheme_rt_dup_check, /* 198 */ - scheme_rt_thread_memory, /* 199 */ - scheme_rt_input_file, /* 200 */ - scheme_rt_input_fd, /* 201 */ - scheme_rt_oskit_console_input, /* 202 */ - scheme_rt_tested_input_file, /* 203 */ - scheme_rt_tested_output_file, /* 204 */ - scheme_rt_indexed_string, /* 205 */ - scheme_rt_output_file, /* 206 */ - scheme_rt_load_handler_data, /* 207 */ - scheme_rt_pipe, /* 208 */ - scheme_rt_beos_process, /* 209 */ - scheme_rt_system_child, /* 210 */ - scheme_rt_tcp, /* 211 */ - scheme_rt_write_data, /* 212 */ - scheme_rt_tcp_select_info, /* 213 */ - scheme_rt_param_data, /* 214 */ - scheme_rt_will, /* 215 */ - scheme_rt_struct_proc_info, /* 216 */ - scheme_rt_linker_name, /* 217 */ - scheme_rt_param_map, /* 218 */ - scheme_rt_finalization, /* 219 */ - scheme_rt_finalizations, /* 220 */ - scheme_rt_cpp_object, /* 221 */ - scheme_rt_cpp_array_object, /* 222 */ - scheme_rt_stack_object, /* 223 */ - scheme_rt_preallocated_object, /* 224 */ - scheme_thread_hop_type, /* 225 */ - scheme_rt_srcloc, /* 226 */ - scheme_rt_evt, /* 227 */ - scheme_rt_syncing, /* 228 */ - scheme_rt_comp_prefix, /* 229 */ - scheme_rt_user_input, /* 230 */ - scheme_rt_user_output, /* 231 */ - scheme_rt_compact_port, /* 232 */ - scheme_rt_read_special_dw, /* 233 */ - scheme_rt_regwork, /* 234 */ - scheme_rt_rx_lazy_string, /* 235 */ - scheme_rt_buf_holder, /* 236 */ - scheme_rt_parameterization, /* 237 */ - scheme_rt_print_params, /* 238 */ - scheme_rt_read_params, /* 239 */ - scheme_rt_native_code, /* 240 */ - scheme_rt_native_code_plus_case, /* 241 */ - scheme_rt_jitter_data, /* 242 */ - scheme_rt_module_exports, /* 243 */ - scheme_rt_delay_load_info, /* 244 */ - scheme_rt_marshal_info, /* 245 */ - scheme_rt_unmarshal_info, /* 246 */ - scheme_rt_runstack, /* 247 */ - scheme_rt_sfs_info, /* 248 */ - scheme_rt_validate_clearing, /* 249 */ - scheme_rt_avl_node, /* 250 */ - scheme_rt_lightweight_cont, /* 251 */ - scheme_rt_export_info, /* 252 */ - scheme_rt_cont_jmp, /* 253 */ + scheme_rt_comp_env, /* 183 */ + scheme_rt_constant_binding, /* 184 */ + scheme_rt_resolve_info, /* 185 */ + scheme_rt_unresolve_info, /* 186 */ + scheme_rt_optimize_info, /* 187 */ + scheme_rt_compile_info, /* 188 */ + scheme_rt_cont_mark, /* 189 */ + scheme_rt_saved_stack, /* 190 */ + scheme_rt_reply_item, /* 191 */ + scheme_rt_closure_info, /* 192 */ + scheme_rt_overflow, /* 193 */ + scheme_rt_overflow_jmp, /* 194 */ + scheme_rt_meta_cont, /* 195 */ + scheme_rt_dyn_wind_cell, /* 196 */ + scheme_rt_dyn_wind_info, /* 197 */ + scheme_rt_dyn_wind, /* 198 */ + scheme_rt_dup_check, /* 199 */ + scheme_rt_thread_memory, /* 200 */ + scheme_rt_input_file, /* 201 */ + scheme_rt_input_fd, /* 202 */ + scheme_rt_oskit_console_input, /* 203 */ + scheme_rt_tested_input_file, /* 204 */ + scheme_rt_tested_output_file, /* 205 */ + scheme_rt_indexed_string, /* 206 */ + scheme_rt_output_file, /* 207 */ + scheme_rt_load_handler_data, /* 208 */ + scheme_rt_pipe, /* 209 */ + scheme_rt_beos_process, /* 210 */ + scheme_rt_system_child, /* 211 */ + scheme_rt_tcp, /* 212 */ + scheme_rt_write_data, /* 213 */ + scheme_rt_tcp_select_info, /* 214 */ + scheme_rt_param_data, /* 215 */ + scheme_rt_will, /* 216 */ + scheme_rt_struct_proc_info, /* 217 */ + scheme_rt_linker_name, /* 218 */ + scheme_rt_param_map, /* 219 */ + scheme_rt_finalization, /* 220 */ + scheme_rt_finalizations, /* 221 */ + scheme_rt_cpp_object, /* 222 */ + scheme_rt_cpp_array_object, /* 223 */ + scheme_rt_stack_object, /* 224 */ + scheme_rt_preallocated_object, /* 225 */ + scheme_thread_hop_type, /* 226 */ + scheme_rt_srcloc, /* 227 */ + scheme_rt_evt, /* 228 */ + scheme_rt_syncing, /* 229 */ + scheme_rt_comp_prefix, /* 230 */ + scheme_rt_user_input, /* 231 */ + scheme_rt_user_output, /* 232 */ + scheme_rt_compact_port, /* 233 */ + scheme_rt_read_special_dw, /* 234 */ + scheme_rt_regwork, /* 235 */ + scheme_rt_rx_lazy_string, /* 236 */ + scheme_rt_buf_holder, /* 237 */ + scheme_rt_parameterization, /* 238 */ + scheme_rt_print_params, /* 239 */ + scheme_rt_read_params, /* 240 */ + scheme_rt_native_code, /* 241 */ + scheme_rt_native_code_plus_case, /* 242 */ + scheme_rt_jitter_data, /* 243 */ + scheme_rt_module_exports, /* 244 */ + scheme_rt_delay_load_info, /* 245 */ + scheme_rt_marshal_info, /* 246 */ + scheme_rt_unmarshal_info, /* 247 */ + scheme_rt_runstack, /* 248 */ + scheme_rt_sfs_info, /* 249 */ + scheme_rt_validate_clearing, /* 250 */ + scheme_rt_avl_node, /* 251 */ + scheme_rt_lightweight_cont, /* 252 */ + scheme_rt_export_info, /* 253 */ + scheme_rt_cont_jmp, /* 254 */ #endif _scheme_last_type_ diff --git a/src/racket/src/type.c b/src/racket/src/type.c index 8a73acd2b0..dd06b96d5d 100644 --- a/src/racket/src/type.c +++ b/src/racket/src/type.c @@ -274,6 +274,7 @@ scheme_init_type () set_name(scheme_thread_cell_values_type, ""); set_name(scheme_prompt_tag_type, ""); + set_name(scheme_continuation_mark_key_type, ""); set_name(scheme_string_converter_type, ""); @@ -632,6 +633,7 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_thread_type, thread_val); GC_REG_TRAV(scheme_prompt_type, prompt_val); GC_REG_TRAV(scheme_prompt_tag_type, cons_cell); + GC_REG_TRAV(scheme_continuation_mark_key_type, small_object); GC_REG_TRAV(scheme_cont_mark_set_type, cont_mark_set_val); GC_REG_TRAV(scheme_sema_type, sema_val); GC_REG_TRAV(scheme_channel_type, channel_val);