diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 8c60aa1ec6..2dedca9cd6 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -2064,6 +2064,10 @@ (values x)) '(let ([x (+ (cons 1 2) 0)]) x)) +(test-comp '(let ([x (+ (random) 0)]) + (values x)) + '(let ([x (+ (random) 0)]) + x)) (test-comp '(lambda (x) (begin (random) x)) '(lambda (x) @@ -2272,6 +2276,18 @@ '(lambda (z) (+ (car z) (unsafe-car void)))) +;; Ok to reorder arithmetic that will not raise an error: +(test-comp '(lambda (x y) + (if (and (real? x) (real? y)) + (let ([w (+ x y)] + [z (- y x)]) + (+ z w)) + (void))) + '(lambda (x y) + (if (and (real? x) (real? y)) + (+ (- y x) (+ x y)) + (void)))) + (test-comp '(lambda (z) (let-values ([(x y) (if z @@ -2285,11 +2301,11 @@ (let-values ([(x y) (if z (values 1 1) - (let ([more (+ z z)]) + (let ([more (list z z)]) (values 4 more)))]) (list x y))) '(lambda (z) - (let ([r (if z 1 (+ z z))]) + (let ([r (if z 1 (list z z))]) (list (if z 1 4) r)))) (test-comp '(lambda (a b c f) @@ -2309,11 +2325,11 @@ #f (add1 c)))))) -(test-comp '(lambda (x y) +(test-comp '(lambda (x y q) (let ([z (+ x y)]) - (list (if x x y) z))) - '(lambda (x y) - (list (if x x y) (+ x y)))) + (list (if q x y) z))) + '(lambda (x y q) + (list (if q x y) (+ x y)))) (test-comp '(lambda (x y) (let ([z (car y)]) @@ -3686,6 +3702,131 @@ (list #t (#%variable-reference g)))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Types related to arithmetic + +(let () + (define (check-real-op op [can-omit? #t] [can-multi? #t]) + (test-comp `(lambda (x y) + (list (,op x y) + (real? x) + (real? y) + (number? x) + (number? y))) + `(lambda (x y) + (list (,op x y) + #t + #t + #t + #t))) + (when can-multi? + (test-comp `(lambda (x y z w) + (list (,op x y z w) + (real? x) + (real? y) + (real? z) + (real? w))) + `(lambda (x y z w) + (list (,op x y z w) + #t + #t + #t + #t)))) + (when can-omit? + (test-comp `(lambda (x y) + (if (and (real? x) (real? y)) + (with-continuation-mark + 'x 'y + (,op x y)) + (error "bad"))) + `(lambda (x y) + (if (and (real? x) (real? y)) + (,op x y) + (error "bad")))))) + (check-real-op 'quotient #f #f) + (check-real-op 'remainder #f #f) + (check-real-op 'modulo #f #f) + (check-real-op 'max) + (check-real-op 'min) + (check-real-op '<) + (check-real-op '>) + (check-real-op '<=) + (check-real-op '>=) + + (define (check-number-op op [closed-under-reals? #t]) + (test-comp `(lambda (x y) + (list (,op x y) + (number? x) + (number? y))) + `(lambda (x y) + (list (,op x y) + #t + #t))) + (test-comp `(lambda (x y z w) + (list (,op x y z w) + (number? x) + (number? y) + (number? z) + (number? w))) + `(lambda (x y z w) + (list (,op x y z w) + #t + #t + #t + #t))) + (test-comp `(lambda (x y) + (list (,op x y) + (real? x))) + `(lambda (x y) + (list (,op x y) + #t)) + ;; cannot assume `real?` + #f) + (when closed-under-reals? + (test-comp `(lambda (x y) + (if (and (real? x) (real? y)) + (let ([v (,op x y)]) + (with-continuation-mark + 'x 'y + ;; No error possible from `<`: + (list (< 2 v) (< 1 v)))) + (error "bad"))) + `(lambda (x y) + (if (and (real? x) (real? y)) + (let ([v (,op x y)]) + (list (< 2 v) (< 1 v))) + (error "bad")))))) + (check-number-op '+) + (check-number-op '-) + (check-number-op '*) + (check-number-op '/) + (check-number-op '+) + (check-number-op '= #f) + + (define (check-number-op-unary op) + (test-comp `(lambda (x y) + (list (,op x) + (number? x))) + `(lambda (x y) + (list (,op x) + #t))) + ;; Check closed under reals: + (test-comp `(lambda (x y) + (if (real? x) + (with-continuation-mark + 'x 'y + ;; No error possible from `<`: + (< 1 (,op x))) + (error "bad"))) + `(lambda (x y) + (if (real? x) + (< 1 (,op x)) + (error "bad"))))) + + (check-number-op-unary 'add1) + (check-number-op-unary 'sub1) + (check-number-op-unary 'abs)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check remotion of dead code after error (test-comp '(lambda () (random) (error 'error)) diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h index b7688edcb9..97077c0a27 100644 --- a/racket/src/racket/include/scheme.h +++ b/racket/src/racket/include/scheme.h @@ -757,10 +757,9 @@ typedef struct Scheme_Offset_Cptr #define SCHEME_PRIM_IS_MULTI_RESULT 8 #define SCHEME_PRIM_IS_CLOSURE 16 #define SCHEME_PRIM_OTHER_TYPE_MASK (32 | 64 | 128 | 256) -#define SCHEME_PRIM_IS_METHOD 512 -#define SCHEME_PRIM_OPT_INDEX_SIZE 6 -#define SCHEME_PRIM_OPT_INDEX_SHIFT 10 +#define SCHEME_PRIM_OPT_INDEX_SIZE 7 +#define SCHEME_PRIM_OPT_INDEX_SHIFT 9 #define SCHEME_PRIM_OPT_INDEX_MASK ((1 << SCHEME_PRIM_OPT_INDEX_SIZE) - 1) /* Values with SCHEME_PRIM_OPT_MASK, earlier implies later: */ diff --git a/racket/src/racket/src/cstartup.inc b/racket/src/racket/src/cstartup.inc index 78e6c9c0a2..366fbb34f0 100644 --- a/racket/src/racket/src/cstartup.inc +++ b/racket/src/racket/src/cstartup.inc @@ -1,843 +1,828 @@ { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,52,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,54,0,0,0,1,0,0,8,0,18,0, -22,0,26,0,31,0,38,0,42,0,47,0,59,0,66,0,69,0,82,0,89, -0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159,0,173,0, -180,0,202,0,204,0,218,0,246,0,251,0,255,0,72,1,79,1,90,1,128, -1,135,1,144,1,177,1,210,1,16,2,21,2,102,2,107,2,112,2,133,2, -30,3,51,3,104,3,173,3,242,3,132,4,24,5,35,5,118,5,0,0,148, -7,0,0,3,1,5,105,110,115,112,48,71,35,37,109,105,110,45,115,116,120, -29,11,11,11,65,97,110,100,66,99,111,110,100,68,100,101,102,105,110,101,65, -108,101,116,66,108,101,116,42,73,108,101,116,42,45,118,97,108,117,101,115,68, -108,101,116,114,101,99,64,111,114,74,112,97,114,97,109,101,116,101,114,105,122, -101,68,117,110,108,101,115,115,66,119,104,101,110,70,104,101,114,101,45,115,116, -120,67,113,117,111,116,101,29,94,2,16,70,35,37,107,101,114,110,101,108,11, -29,94,2,16,70,35,37,112,97,114,97,109,122,11,64,105,102,67,98,101,103, -105,110,72,108,101,116,45,118,97,108,117,101,115,63,120,75,108,101,116,114,101, -99,45,118,97,108,117,101,115,68,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,63,118,75,100,101, -102,105,110,101,45,118,97,108,117,101,115,38,28,16,3,93,16,2,29,11,11, -11,2,3,2,29,93,143,16,5,39,2,31,40,2,34,2,2,39,38,29,93, -2,30,36,30,0,39,36,31,1,145,40,143,2,32,16,4,2,17,39,39,2, -1,143,2,32,16,4,2,18,39,39,2,1,16,22,2,4,2,33,2,5,2, -33,2,6,2,33,2,7,2,33,2,8,2,33,2,9,2,33,2,10,2,33, -2,11,2,33,2,12,2,33,2,13,2,33,2,14,2,33,38,32,143,2,31, -2,29,38,33,93,143,2,32,143,2,1,2,3,36,34,2,144,40,143,2,35, -16,4,2,17,40,39,2,1,16,2,2,15,93,143,2,35,147,2,1,2,3, -40,2,15,143,2,3,40,2,15,38,35,143,2,34,2,29,18,143,66,104,101, -114,101,2,28,27,248,22,168,4,195,249,22,161,4,80,143,42,39,251,22,92, -2,19,248,22,104,199,12,249,22,82,2,20,248,22,106,201,27,248,22,168,4, -195,249,22,161,4,80,143,42,39,251,22,92,2,19,248,22,104,199,249,22,82, -2,20,248,22,106,201,12,27,248,22,84,248,22,168,4,196,28,248,22,90,193, -20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,173,20,193,249,22, -161,4,80,143,42,39,251,22,92,2,19,248,22,173,20,199,249,22,82,2,4, -248,22,174,20,201,11,18,143,10,2,28,27,248,22,84,248,22,168,4,196,28, -248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,173, -20,193,249,22,161,4,80,143,42,39,250,22,92,2,21,248,22,92,249,22,92, -248,22,92,2,22,248,22,173,20,201,251,22,92,2,19,2,22,2,22,249,22, -82,2,11,248,22,174,20,204,18,143,11,2,28,248,22,168,4,193,27,248,22, -168,4,194,249,22,82,248,22,92,248,22,83,196,248,22,174,20,195,27,248,22, -84,248,22,168,4,23,197,1,249,22,161,4,80,143,42,39,28,248,22,66,248, -22,162,4,248,22,83,23,198,2,27,249,22,2,32,0,88,148,8,36,40,46, -11,9,222,33,43,248,22,168,4,248,22,104,23,200,2,250,22,92,2,23,248, -22,92,249,22,92,248,22,92,248,22,173,20,23,204,2,250,22,93,2,24,249, -22,2,22,83,23,204,2,248,22,106,23,206,2,249,22,82,248,22,173,20,23, -202,1,249,22,2,22,104,23,200,1,250,22,93,2,21,249,22,2,32,0,88, -148,8,36,40,50,11,9,222,33,44,248,22,168,4,248,22,173,20,201,248,22, -174,20,198,27,248,22,168,4,194,249,22,82,248,22,92,248,22,83,196,248,22, -174,20,195,27,248,22,84,248,22,168,4,23,197,1,249,22,161,4,80,143,42, -39,250,22,93,2,23,249,22,2,32,0,88,148,8,36,40,50,11,9,222,33, -46,248,22,168,4,248,22,83,201,248,22,174,20,198,27,248,22,84,248,22,168, -4,196,27,248,22,168,4,248,22,83,195,249,22,161,4,80,143,43,39,28,248, -22,90,195,250,22,93,2,21,9,248,22,174,20,199,250,22,92,2,7,248,22, -92,248,22,83,199,250,22,93,2,8,248,22,174,20,201,248,22,174,20,202,27, -248,22,84,248,22,168,4,196,27,248,22,168,4,248,22,83,195,249,22,161,4, -80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,174,20,199,250, -22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,174,20,201, -248,22,174,20,202,27,248,22,84,248,22,168,4,23,197,1,27,249,22,1,22, -96,249,22,2,22,168,4,248,22,168,4,248,22,83,199,248,22,189,4,249,22, -161,4,80,143,44,39,251,22,92,1,22,119,105,116,104,45,99,111,110,116,105, -110,117,97,116,105,111,110,45,109,97,114,107,2,25,250,22,93,1,23,101,120, -116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, -21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107, -45,115,101,116,45,102,105,114,115,116,11,2,25,202,250,22,93,2,21,9,248, -22,174,20,204,27,248,22,84,248,22,168,4,196,28,248,22,90,193,20,14,144, -40,39,40,249,22,161,4,80,143,42,39,27,248,22,168,4,248,22,83,197,28, -249,22,173,9,64,61,62,248,22,162,4,248,22,104,196,250,22,92,2,21,248, -22,92,249,22,92,21,93,2,26,248,22,173,20,199,250,22,93,2,5,249,22, -92,2,26,249,22,92,248,22,113,203,2,26,248,22,174,20,202,251,22,92,2, -19,28,249,22,173,9,248,22,162,4,248,22,173,20,200,66,101,108,115,101,10, -248,22,173,20,197,250,22,93,2,21,9,248,22,174,20,200,249,22,82,2,5, -248,22,174,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84,248, -22,168,4,196,249,22,161,4,80,143,42,39,28,248,22,66,248,22,162,4,248, -22,83,197,250,22,92,2,27,248,22,92,248,22,173,20,199,248,22,104,198,27, -248,22,162,4,248,22,173,20,197,250,22,92,2,27,248,22,92,248,22,83,197, -250,22,93,2,24,248,22,174,20,199,248,22,174,20,202,145,39,9,20,122,145, -2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2,3,11,11, -11,11,9,9,11,11,11,10,39,80,143,39,39,20,122,145,2,1,39,16,0, -16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2,5,2, -6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,16,11,11,11, -11,11,11,11,11,11,11,11,11,16,11,2,4,2,5,2,6,2,7,2,8, -2,9,2,10,2,11,2,12,2,13,2,14,39,50,40,16,0,39,16,1,2, -15,40,11,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0, -16,0,39,39,16,12,16,5,11,20,15,16,2,20,14,144,39,39,40,80,143, -39,39,39,20,122,145,2,1,39,16,1,2,15,16,1,33,36,10,16,5,2, -13,88,148,8,36,40,56,40,9,223,0,33,37,39,20,122,145,2,1,39,16, -1,2,15,16,0,11,16,5,2,14,88,148,8,36,40,56,40,9,223,0,33, -38,39,20,122,145,2,1,39,16,1,2,15,16,0,11,16,5,2,4,88,148, -8,36,40,56,42,9,223,0,33,39,39,20,122,145,2,1,39,16,1,2,15, -16,1,33,40,11,16,5,2,11,88,148,8,36,40,59,42,9,223,0,33,41, -39,20,122,145,2,1,39,16,1,2,15,16,1,33,42,11,16,5,2,7,88, -148,8,36,40,61,40,9,223,0,33,45,39,20,122,145,2,1,39,16,1,2, -15,16,0,11,16,5,2,10,88,148,8,36,40,56,40,9,223,0,33,47,39, -20,122,145,2,1,39,16,1,2,15,16,0,11,16,5,2,8,88,148,8,36, -40,57,40,9,223,0,33,48,39,20,122,145,2,1,39,16,1,2,15,16,0, -11,16,5,2,9,88,148,8,36,40,57,40,9,223,0,33,49,39,20,122,145, -2,1,39,16,1,2,15,16,0,11,16,5,2,12,88,148,8,36,40,59,40, -9,223,0,33,50,39,20,122,145,2,1,39,16,1,2,15,16,0,11,16,5, -2,5,88,148,8,36,40,61,42,9,223,0,33,51,39,20,122,145,2,1,39, -16,1,2,15,16,1,33,52,11,16,5,2,6,88,148,8,36,40,57,40,9, -223,0,33,53,39,20,122,145,2,1,39,16,1,2,15,16,0,11,16,0,94, -2,17,2,18,93,2,17,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2090); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,54,46,52,46,48,46,49,51,84,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,1,0,0,8,0,18, +0,22,0,26,0,31,0,38,0,42,0,47,0,59,0,66,0,69,0,82,0, +89,0,94,0,103,0,109,0,123,0,137,0,140,0,146,0,157,0,159,0,173, +0,180,0,202,0,204,0,218,0,246,0,251,0,255,0,72,1,79,1,90,1, +128,1,135,1,144,1,177,1,210,1,16,2,21,2,102,2,107,2,112,2,133, +2,30,3,51,3,104,3,173,3,242,3,132,4,24,5,35,5,118,5,0,0, +148,7,0,0,3,1,5,105,110,115,112,48,71,35,37,109,105,110,45,115,116, +120,29,11,11,11,65,97,110,100,66,99,111,110,100,68,100,101,102,105,110,101, +65,108,101,116,66,108,101,116,42,73,108,101,116,42,45,118,97,108,117,101,115, +68,108,101,116,114,101,99,64,111,114,74,112,97,114,97,109,101,116,101,114,105, +122,101,68,117,110,108,101,115,115,66,119,104,101,110,70,104,101,114,101,45,115, +116,120,67,113,117,111,116,101,29,94,2,16,70,35,37,107,101,114,110,101,108, +11,29,94,2,16,70,35,37,112,97,114,97,109,122,11,64,105,102,67,98,101, +103,105,110,72,108,101,116,45,118,97,108,117,101,115,63,120,75,108,101,116,114, +101,99,45,118,97,108,117,101,115,68,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,63,118,75,100, +101,102,105,110,101,45,118,97,108,117,101,115,38,28,16,3,93,16,2,29,11, +11,11,2,3,2,29,93,143,16,5,39,2,31,40,2,34,2,2,39,38,29, +93,2,30,36,30,0,39,36,31,1,145,40,143,2,32,16,4,2,17,39,39, +2,1,143,2,32,16,4,2,18,39,39,2,1,16,22,2,4,2,33,2,5, +2,33,2,6,2,33,2,7,2,33,2,8,2,33,2,9,2,33,2,10,2, +33,2,11,2,33,2,12,2,33,2,13,2,33,2,14,2,33,38,32,143,2, +31,2,29,38,33,93,143,2,32,143,2,1,2,3,36,34,2,144,40,143,2, +35,16,4,2,17,40,39,2,1,16,2,2,15,93,143,2,35,147,2,1,2, +3,40,2,15,143,2,3,40,2,15,38,35,143,2,34,2,29,18,143,66,104, +101,114,101,2,28,27,248,22,168,4,195,249,22,161,4,80,143,42,39,251,22, +92,2,19,248,22,104,199,12,249,22,82,2,20,248,22,106,201,27,248,22,168, +4,195,249,22,161,4,80,143,42,39,251,22,92,2,19,248,22,104,199,249,22, +82,2,20,248,22,106,201,12,27,248,22,84,248,22,168,4,196,28,248,22,90, +193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22,173,20,193,249, +22,161,4,80,143,42,39,251,22,92,2,19,248,22,173,20,199,249,22,82,2, +4,248,22,174,20,201,11,18,143,10,2,28,27,248,22,84,248,22,168,4,196, +28,248,22,90,193,20,14,144,40,39,40,28,248,22,90,248,22,84,194,248,22, +173,20,193,249,22,161,4,80,143,42,39,250,22,92,2,21,248,22,92,249,22, +92,248,22,92,2,22,248,22,173,20,201,251,22,92,2,19,2,22,2,22,249, +22,82,2,11,248,22,174,20,204,18,143,11,2,28,248,22,168,4,193,27,248, +22,168,4,194,249,22,82,248,22,92,248,22,83,196,248,22,174,20,195,27,248, +22,84,248,22,168,4,23,197,1,249,22,161,4,80,143,42,39,28,248,22,66, +248,22,162,4,248,22,83,23,198,2,27,249,22,2,32,0,88,148,8,36,40, +46,11,9,222,33,43,248,22,168,4,248,22,104,23,200,2,250,22,92,2,23, +248,22,92,249,22,92,248,22,92,248,22,173,20,23,204,2,250,22,93,2,24, +249,22,2,22,83,23,204,2,248,22,106,23,206,2,249,22,82,248,22,173,20, +23,202,1,249,22,2,22,104,23,200,1,250,22,93,2,21,249,22,2,32,0, +88,148,8,36,40,50,11,9,222,33,44,248,22,168,4,248,22,173,20,201,248, +22,174,20,198,27,248,22,168,4,194,249,22,82,248,22,92,248,22,83,196,248, +22,174,20,195,27,248,22,84,248,22,168,4,23,197,1,249,22,161,4,80,143, +42,39,250,22,93,2,23,249,22,2,32,0,88,148,8,36,40,50,11,9,222, +33,46,248,22,168,4,248,22,83,201,248,22,174,20,198,27,248,22,84,248,22, +168,4,196,27,248,22,168,4,248,22,83,195,249,22,161,4,80,143,43,39,28, +248,22,90,195,250,22,93,2,21,9,248,22,174,20,199,250,22,92,2,7,248, +22,92,248,22,83,199,250,22,93,2,8,248,22,174,20,201,248,22,174,20,202, +27,248,22,84,248,22,168,4,196,27,248,22,168,4,248,22,83,195,249,22,161, +4,80,143,43,39,28,248,22,90,195,250,22,93,2,21,9,248,22,174,20,199, +250,22,92,2,21,248,22,92,248,22,83,199,250,22,93,2,9,248,22,174,20, +201,248,22,174,20,202,27,248,22,84,248,22,168,4,23,197,1,27,249,22,1, +22,96,249,22,2,22,168,4,248,22,168,4,248,22,83,199,248,22,189,4,249, +22,161,4,80,143,44,39,251,22,92,1,22,119,105,116,104,45,99,111,110,116, +105,110,117,97,116,105,111,110,45,109,97,114,107,2,25,250,22,93,1,23,101, +120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, +110,21,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114, +107,45,115,101,116,45,102,105,114,115,116,11,2,25,202,250,22,93,2,21,9, +248,22,174,20,204,27,248,22,84,248,22,168,4,196,28,248,22,90,193,20,14, +144,40,39,40,249,22,161,4,80,143,42,39,27,248,22,168,4,248,22,83,197, +28,249,22,173,9,64,61,62,248,22,162,4,248,22,104,196,250,22,92,2,21, +248,22,92,249,22,92,21,93,2,26,248,22,173,20,199,250,22,93,2,5,249, +22,92,2,26,249,22,92,248,22,113,203,2,26,248,22,174,20,202,251,22,92, +2,19,28,249,22,173,9,248,22,162,4,248,22,173,20,200,66,101,108,115,101, +10,248,22,173,20,197,250,22,93,2,21,9,248,22,174,20,200,249,22,82,2, +5,248,22,174,20,202,18,143,94,10,66,118,111,105,100,2,28,27,248,22,84, +248,22,168,4,196,249,22,161,4,80,143,42,39,28,248,22,66,248,22,162,4, +248,22,83,197,250,22,92,2,27,248,22,92,248,22,173,20,199,248,22,104,198, +27,248,22,162,4,248,22,173,20,197,250,22,92,2,27,248,22,92,248,22,83, +197,250,22,93,2,24,248,22,174,20,199,248,22,174,20,202,145,40,9,20,122, +145,2,1,39,16,1,11,16,0,20,27,15,61,9,2,2,2,2,2,3,11, +11,11,11,9,9,11,11,11,10,40,80,143,39,39,20,122,145,2,1,39,16, +0,16,0,41,42,39,16,0,39,16,0,39,11,11,11,16,11,2,4,2,5, +2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,16,11,11, +11,11,11,11,11,11,11,11,11,11,16,11,2,4,2,5,2,6,2,7,2, +8,2,9,2,10,2,11,2,12,2,13,2,14,39,50,40,16,0,39,16,1, +2,15,40,11,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16, +0,16,0,39,39,16,12,16,5,11,20,15,16,2,20,14,144,39,39,40,80, +143,39,39,40,20,122,145,2,1,39,16,1,2,15,16,1,33,36,10,16,5, +2,13,88,148,8,36,40,56,40,9,223,0,33,37,40,20,122,145,2,1,39, +16,1,2,15,16,0,11,16,5,2,14,88,148,8,36,40,56,40,9,223,0, +33,38,40,20,122,145,2,1,39,16,1,2,15,16,0,11,16,5,2,4,88, +148,8,36,40,56,42,9,223,0,33,39,40,20,122,145,2,1,39,16,1,2, +15,16,1,33,40,11,16,5,2,11,88,148,8,36,40,59,42,9,223,0,33, +41,40,20,122,145,2,1,39,16,1,2,15,16,1,33,42,11,16,5,2,7, +88,148,8,36,40,61,40,9,223,0,33,45,40,20,122,145,2,1,39,16,1, +2,15,16,0,11,16,5,2,10,88,148,8,36,40,56,40,9,223,0,33,47, +40,20,122,145,2,1,39,16,1,2,15,16,0,11,16,5,2,8,88,148,8, +36,40,57,40,9,223,0,33,48,40,20,122,145,2,1,39,16,1,2,15,16, +0,11,16,5,2,9,88,148,8,36,40,57,40,9,223,0,33,49,40,20,122, +145,2,1,39,16,1,2,15,16,0,11,16,5,2,12,88,148,8,36,40,59, +40,9,223,0,33,50,40,20,122,145,2,1,39,16,1,2,15,16,0,11,16, +5,2,5,88,148,8,36,40,61,42,9,223,0,33,51,40,20,122,145,2,1, +39,16,1,2,15,16,1,33,52,11,16,5,2,6,88,148,8,36,40,57,40, +9,223,0,33,53,40,20,122,145,2,1,39,16,1,2,15,16,0,11,16,0, +94,2,17,2,18,93,2,17,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2091); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,52,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,194,0,0,0,1,0,0,8,0,16,0, -29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,178,0,193,0,211, -0,223,0,239,0,253,0,19,1,39,1,73,1,90,1,107,1,130,1,145,1, -184,1,202,1,233,1,245,1,6,2,18,2,33,2,57,2,89,2,118,2,134, -2,152,2,172,2,193,2,211,2,242,2,0,3,17,3,61,3,69,3,74,3, -118,3,125,3,135,3,150,3,159,3,164,3,166,3,199,3,223,3,244,3,1, -4,11,4,20,4,31,4,49,4,62,4,72,4,82,4,88,4,93,4,105,4, -108,4,112,4,117,4,160,4,173,4,176,4,200,4,239,4,246,4,3,5,25, -5,36,5,66,5,89,5,97,5,121,5,142,5,91,6,121,6,212,9,235,9, -252,9,176,11,23,12,37,12,241,12,217,14,226,14,235,14,249,14,3,15,23, -16,126,16,251,16,68,17,141,17,243,17,16,18,87,18,221,18,36,19,243,19, -105,20,118,20,236,20,249,20,100,21,167,21,180,21,191,21,87,22,205,22,249, -22,104,23,182,25,206,25,68,26,150,27,157,27,209,27,222,27,212,28,228,28, -83,29,242,29,249,29,126,31,203,31,220,31,120,32,140,32,200,32,207,32,67, -33,121,33,140,33,91,34,107,34,68,35,69,36,106,36,115,36,202,37,47,40, -63,40,130,40,151,40,171,40,191,40,248,40,221,43,187,44,203,44,176,45,234, -45,11,46,143,46,46,47,62,47,160,47,177,47,3,50,57,52,73,52,89,52, -184,52,236,53,168,54,170,54,197,54,213,54,229,54,71,55,140,56,72,57,88, -57,97,57,104,57,170,58,236,59,98,60,144,63,18,64,150,64,95,66,45,67, -87,67,195,67,0,0,143,75,0,0,3,1,5,105,110,115,112,48,69,35,37, -117,116,105,108,115,74,112,97,116,104,45,115,116,114,105,110,103,63,66,98,115, -98,115,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,73,114, -101,114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101,120,101,99, -117,116,97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45,108,105,115, -116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115,116,1,42, -99,97,108,108,45,119,105,116,104,45,100,101,102,97,117,108,116,45,114,101,97, -100,105,110,103,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, -67,113,117,111,116,101,29,94,2,10,70,35,37,112,97,114,97,109,122,11,76, -45,99,104,101,99,107,45,114,101,108,112,97,116,104,79,45,99,104,101,99,107, -45,99,111,108,108,101,99,116,105,111,110,73,45,99,104,101,99,107,45,102,97, -105,108,77,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,75,102,105, -110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101,99,116,105, -111,110,45,102,105,108,101,45,112,97,116,104,1,18,102,105,110,100,45,109,97, -105,110,45,99,111,108,108,101,99,116,115,1,32,101,120,101,45,114,101,108,97, -116,105,118,101,45,112,97,116,104,45,62,99,111,109,112,108,101,116,101,45,112, -97,116,104,78,102,105,110,100,45,109,97,105,110,45,99,111,110,102,105,103,78, -103,101,116,45,99,111,110,102,105,103,45,116,97,98,108,101,1,21,103,101,116, -45,105,110,115,116,97,108,108,97,116,105,111,110,45,110,97,109,101,76,99,111, -101,114,99,101,45,116,111,45,112,97,116,104,1,37,99,111,108,108,101,99,116, -115,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109,112, -108,101,116,101,45,112,97,116,104,79,97,100,100,45,99,111,110,102,105,103,45, -115,101,97,114,99,104,1,29,102,105,110,100,45,108,105,98,114,97,114,121,45, -99,111,108,108,101,99,116,105,111,110,45,108,105,110,107,115,73,108,105,110,107, -115,45,99,97,99,104,101,78,115,116,97,109,112,45,112,114,111,109,112,116,45, -116,97,103,73,102,105,108,101,45,62,115,116,97,109,112,76,110,111,45,102,105, -108,101,45,115,116,97,109,112,63,1,22,103,101,116,45,108,105,110,107,101,100, -45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109,97,108,105, -122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101,114,101,110, -99,101,1,27,102,105,108,101,45,101,120,105,115,116,115,63,47,109,97,121,98, -101,45,99,111,109,112,105,108,101,100,77,112,97,116,104,45,97,100,100,45,115, -117,102,102,105,120,79,99,104,101,99,107,45,115,117,102,102,105,120,45,99,97, -108,108,1,18,112,97,116,104,45,97,100,106,117,115,116,45,115,117,102,102,105, -120,1,19,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105, -120,79,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,1,29, -102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101,99,116,105, -111,110,45,112,97,116,104,115,75,101,109,98,101,100,100,101,100,45,108,111,97, -100,78,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101,6,41,41, -40,111,114,47,99,32,112,97,116,104,45,102,111,114,45,115,111,109,101,45,115, -121,115,116,101,109,63,32,112,97,116,104,45,115,116,114,105,110,103,63,41,69, -119,105,110,100,111,119,115,6,2,2,92,49,6,41,41,40,111,114,47,99,32, -112,97,116,104,45,115,116,114,105,110,103,63,32,112,97,116,104,45,102,111,114, -45,115,111,109,101,45,115,121,115,116,101,109,63,41,6,4,4,112,97,116,104, -5,8,92,92,63,92,82,69,76,92,6,12,12,112,97,116,104,45,115,116,114, -105,110,103,63,70,114,101,108,97,116,105,118,101,66,108,111,111,112,5,0,6, -30,30,40,112,114,111,99,101,100,117,114,101,45,97,114,105,116,121,45,105,110, -99,108,117,100,101,115,47,99,32,48,41,6,21,21,105,110,118,97,108,105,100, -32,114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40,97,110,121, -47,99,32,46,32,45,62,32,46,32,97,110,121,41,74,99,111,108,108,101,99, -116,115,45,100,105,114,71,101,120,101,99,45,102,105,108,101,70,111,114,105,103, -45,100,105,114,72,99,111,110,102,105,103,45,100,105,114,79,105,110,115,116,97, -108,108,97,116,105,111,110,45,110,97,109,101,6,10,10,108,105,110,107,115,46, -114,107,116,100,71,97,100,100,111,110,45,100,105,114,71,102,115,45,99,104,97, -110,103,101,67,101,114,114,111,114,66,114,111,111,116,73,115,116,97,116,105,99, -45,114,111,111,116,6,0,0,6,1,1,47,5,3,46,122,111,6,40,40,114, -101,109,111,118,105,110,103,32,115,117,102,102,105,120,32,109,97,107,101,115,32, -112,97,116,104,32,101,108,101,109,101,110,116,32,101,109,112,116,121,6,10,10, -103,105,118,101,110,32,112,97,116,104,5,1,95,6,21,21,40,111,114,47,99, -32,115,116,114,105,110,103,63,32,98,121,116,101,115,63,41,6,36,36,99,97, -110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32, -97,32,114,111,111,116,32,112,97,116,104,58,32,68,102,105,110,105,115,104,5, -11,80,76,84,67,79,76,76,69,67,84,83,1,20,99,111,108,108,101,99,116, -115,45,115,101,97,114,99,104,45,100,105,114,115,6,8,8,99,111,108,108,101, -99,116,115,27,248,22,182,15,194,28,192,192,28,248,22,157,7,194,27,248,22, -141,16,195,28,192,192,248,22,142,16,195,11,0,21,35,114,120,34,94,91,92, -92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114,120,34,47, -34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47,92,92, -93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47,92,92,93, -42,41,36,34,86,94,28,28,248,22,183,15,23,195,2,10,28,248,22,182,15, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,54,46,52,46,48,46,49,51,84,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,195,0,0,0,1,0,0,8,0,16, +0,29,0,34,0,51,0,63,0,85,0,114,0,158,0,164,0,178,0,193,0, +211,0,223,0,239,0,253,0,19,1,39,1,73,1,90,1,107,1,130,1,145, +1,184,1,202,1,233,1,245,1,6,2,18,2,33,2,57,2,89,2,118,2, +134,2,152,2,172,2,193,2,211,2,242,2,0,3,17,3,61,3,69,3,74, +3,118,3,125,3,135,3,150,3,159,3,164,3,166,3,199,3,223,3,244,3, +1,4,11,4,20,4,31,4,49,4,62,4,72,4,82,4,88,4,93,4,105, +4,108,4,112,4,117,4,160,4,173,4,176,4,200,4,239,4,246,4,3,5, +25,5,36,5,66,5,89,5,97,5,121,5,142,5,91,6,121,6,212,9,235, +9,252,9,176,11,23,12,37,12,241,12,217,14,226,14,235,14,249,14,3,15, +23,16,126,16,251,16,68,17,141,17,243,17,16,18,87,18,221,18,36,19,243, +19,105,20,118,20,236,20,249,20,100,21,167,21,180,21,191,21,87,22,205,22, +249,22,104,23,182,25,206,25,68,26,150,27,157,27,209,27,222,27,212,28,228, +28,83,29,242,29,249,29,126,31,203,31,220,31,120,32,140,32,200,32,207,32, +65,33,119,33,138,33,89,34,105,34,66,35,67,36,104,36,113,36,200,37,45, +40,61,40,115,40,136,40,156,40,176,40,233,40,195,43,207,43,199,44,215,44, +188,45,246,45,23,46,155,46,58,47,74,47,172,47,189,47,15,50,69,52,85, +52,101,52,196,52,240,53,172,54,174,54,201,54,217,54,233,54,75,55,144,56, +76,57,92,57,101,57,108,57,174,58,240,59,102,60,148,63,22,64,154,64,99, +66,49,67,91,67,199,67,0,0,147,75,0,0,3,1,5,105,110,115,112,48, +69,35,37,117,116,105,108,115,74,112,97,116,104,45,115,116,114,105,110,103,63, +66,98,115,98,115,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116, +104,73,114,101,114,111,111,116,45,112,97,116,104,1,20,102,105,110,100,45,101, +120,101,99,117,116,97,98,108,101,45,112,97,116,104,1,27,112,97,116,104,45, +108,105,115,116,45,115,116,114,105,110,103,45,62,112,97,116,104,45,108,105,115, +116,1,42,99,97,108,108,45,119,105,116,104,45,100,101,102,97,117,108,116,45, +114,101,97,100,105,110,103,45,112,97,114,97,109,101,116,101,114,105,122,97,116, +105,111,110,67,113,117,111,116,101,29,94,2,10,70,35,37,112,97,114,97,109, +122,11,76,45,99,104,101,99,107,45,114,101,108,112,97,116,104,79,45,99,104, +101,99,107,45,99,111,108,108,101,99,116,105,111,110,73,45,99,104,101,99,107, +45,102,97,105,108,77,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104, +75,102,105,110,100,45,99,111,108,45,102,105,108,101,1,20,99,111,108,108,101, +99,116,105,111,110,45,102,105,108,101,45,112,97,116,104,1,18,102,105,110,100, +45,109,97,105,110,45,99,111,108,108,101,99,116,115,1,32,101,120,101,45,114, +101,108,97,116,105,118,101,45,112,97,116,104,45,62,99,111,109,112,108,101,116, +101,45,112,97,116,104,78,102,105,110,100,45,109,97,105,110,45,99,111,110,102, +105,103,78,103,101,116,45,99,111,110,102,105,103,45,116,97,98,108,101,1,21, +103,101,116,45,105,110,115,116,97,108,108,97,116,105,111,110,45,110,97,109,101, +76,99,111,101,114,99,101,45,116,111,45,112,97,116,104,1,37,99,111,108,108, +101,99,116,115,45,114,101,108,97,116,105,118,101,45,112,97,116,104,45,62,99, +111,109,112,108,101,116,101,45,112,97,116,104,79,97,100,100,45,99,111,110,102, +105,103,45,115,101,97,114,99,104,1,29,102,105,110,100,45,108,105,98,114,97, +114,121,45,99,111,108,108,101,99,116,105,111,110,45,108,105,110,107,115,73,108, +105,110,107,115,45,99,97,99,104,101,78,115,116,97,109,112,45,112,114,111,109, +112,116,45,116,97,103,73,102,105,108,101,45,62,115,116,97,109,112,76,110,111, +45,102,105,108,101,45,115,116,97,109,112,63,1,22,103,101,116,45,108,105,110, +107,101,100,45,99,111,108,108,101,99,116,105,111,110,115,1,30,110,111,114,109, +97,108,105,122,101,45,99,111,108,108,101,99,116,105,111,110,45,114,101,102,101, +114,101,110,99,101,1,27,102,105,108,101,45,101,120,105,115,116,115,63,47,109, +97,121,98,101,45,99,111,109,112,105,108,101,100,77,112,97,116,104,45,97,100, +100,45,115,117,102,102,105,120,79,99,104,101,99,107,45,115,117,102,102,105,120, +45,99,97,108,108,1,18,112,97,116,104,45,97,100,106,117,115,116,45,115,117, +102,102,105,120,1,19,112,97,116,104,45,114,101,112,108,97,99,101,45,115,117, +102,102,105,120,79,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101, +100,1,29,102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108,108,101, +99,116,105,111,110,45,112,97,116,104,115,75,101,109,98,101,100,100,101,100,45, +108,111,97,100,78,110,111,114,109,97,108,45,112,97,116,104,45,99,97,115,101, +6,41,41,40,111,114,47,99,32,112,97,116,104,45,102,111,114,45,115,111,109, +101,45,115,121,115,116,101,109,63,32,112,97,116,104,45,115,116,114,105,110,103, +63,41,69,119,105,110,100,111,119,115,6,2,2,92,49,6,41,41,40,111,114, +47,99,32,112,97,116,104,45,115,116,114,105,110,103,63,32,112,97,116,104,45, +102,111,114,45,115,111,109,101,45,115,121,115,116,101,109,63,41,6,4,4,112, +97,116,104,5,8,92,92,63,92,82,69,76,92,6,12,12,112,97,116,104,45, +115,116,114,105,110,103,63,70,114,101,108,97,116,105,118,101,66,108,111,111,112, +5,0,6,30,30,40,112,114,111,99,101,100,117,114,101,45,97,114,105,116,121, +45,105,110,99,108,117,100,101,115,47,99,32,48,41,6,21,21,105,110,118,97, +108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,6,18,18,40, +97,110,121,47,99,32,46,32,45,62,32,46,32,97,110,121,41,74,99,111,108, +108,101,99,116,115,45,100,105,114,71,101,120,101,99,45,102,105,108,101,70,111, +114,105,103,45,100,105,114,72,99,111,110,102,105,103,45,100,105,114,79,105,110, +115,116,97,108,108,97,116,105,111,110,45,110,97,109,101,6,10,10,108,105,110, +107,115,46,114,107,116,100,71,97,100,100,111,110,45,100,105,114,71,102,115,45, +99,104,97,110,103,101,67,101,114,114,111,114,66,114,111,111,116,73,115,116,97, +116,105,99,45,114,111,111,116,6,0,0,6,1,1,47,5,3,46,122,111,6, +40,40,114,101,109,111,118,105,110,103,32,115,117,102,102,105,120,32,109,97,107, +101,115,32,112,97,116,104,32,101,108,101,109,101,110,116,32,101,109,112,116,121, +6,10,10,103,105,118,101,110,32,112,97,116,104,5,1,95,6,21,21,40,111, +114,47,99,32,115,116,114,105,110,103,63,32,98,121,116,101,115,63,41,6,36, +36,99,97,110,110,111,116,32,97,100,100,32,97,32,115,117,102,102,105,120,32, +116,111,32,97,32,114,111,111,116,32,112,97,116,104,58,32,68,102,105,110,105, +115,104,5,11,80,76,84,67,79,76,76,69,67,84,83,1,20,99,111,108,108, +101,99,116,115,45,115,101,97,114,99,104,45,100,105,114,115,6,8,8,99,111, +108,108,101,99,116,115,27,248,22,182,15,194,28,192,192,28,248,22,157,7,194, +27,248,22,141,16,195,28,192,192,248,22,142,16,195,11,0,21,35,114,120,34, +94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,0,6,35,114, +120,34,47,34,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91, +47,92,92,93,42,36,34,0,19,35,114,120,34,91,32,46,93,43,40,91,47, +92,92,93,42,41,36,34,86,94,28,28,248,22,183,15,23,195,2,10,28,248, +22,182,15,23,195,2,10,28,248,22,157,7,23,195,2,28,248,22,141,16,23, +195,2,10,248,22,142,16,23,195,2,11,12,250,22,186,11,2,41,2,42,23, +197,2,28,28,248,22,183,15,23,195,2,249,22,173,9,248,22,184,15,23,197, +2,2,43,249,22,173,9,247,22,184,8,2,43,27,28,248,22,157,7,23,196, +2,23,195,2,248,22,169,8,248,22,187,15,23,197,2,28,249,22,179,16,2, +79,23,195,2,28,248,22,157,7,195,248,22,190,15,195,194,86,94,23,195,1, +27,248,22,132,8,23,195,1,249,22,191,15,248,22,172,8,250,22,187,16,2, +80,28,249,22,179,16,2,81,23,201,2,23,199,1,250,22,187,16,2,82,23, +202,1,2,44,80,144,47,40,41,2,43,28,248,22,157,7,194,248,22,190,15, +194,193,0,28,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92, +92,92,92,85,78,67,92,92,92,92,34,86,95,28,28,28,248,22,182,15,23, +195,2,10,28,248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10,248, +22,142,16,23,195,2,11,10,248,22,183,15,23,195,2,12,252,22,186,11,2, +6,2,45,39,23,199,2,23,200,2,28,28,28,248,22,182,15,23,196,2,10, +28,248,22,157,7,23,196,2,28,248,22,141,16,23,196,2,10,248,22,142,16, +23,196,2,11,10,248,22,183,15,23,196,2,12,252,22,186,11,2,6,2,45, +40,23,199,2,23,200,2,27,28,248,22,183,15,23,196,2,248,22,184,15,23, +196,2,247,22,185,15,86,95,28,28,248,22,143,16,23,196,2,10,249,22,173, +9,247,22,185,15,23,195,2,12,253,22,188,11,2,6,6,54,54,112,97,116, +104,32,105,115,32,110,111,116,32,99,111,109,112,108,101,116,101,32,97,110,100, +32,110,111,116,32,116,104,101,32,112,108,97,116,102,111,114,109,39,115,32,99, +111,110,118,101,110,116,105,111,110,2,46,23,201,2,6,24,24,112,108,97,116, +102,111,114,109,32,99,111,110,118,101,110,116,105,111,110,32,116,121,112,101,247, +22,185,15,28,249,22,173,9,28,248,22,183,15,23,199,2,248,22,184,15,23, +199,2,247,22,185,15,23,195,2,12,253,22,188,11,2,6,6,37,37,103,105, +118,101,110,32,112,97,116,104,115,32,117,115,101,32,100,105,102,102,101,114,101, +110,116,32,99,111,110,118,101,110,116,105,111,110,115,2,46,23,201,2,6,9, +9,114,111,111,116,32,112,97,116,104,23,202,2,27,27,248,22,147,16,28,248, +22,143,16,23,199,2,23,198,1,248,22,144,16,23,199,1,86,94,28,28,248, +22,183,15,23,194,2,10,28,248,22,182,15,23,194,2,10,28,248,22,157,7, +23,194,2,28,248,22,141,16,23,194,2,10,248,22,142,16,23,194,2,11,12, +250,22,186,11,2,41,2,42,23,196,2,28,28,248,22,183,15,23,194,2,249, +22,173,9,248,22,184,15,23,196,2,2,43,249,22,173,9,247,22,184,8,2, +43,27,28,248,22,157,7,23,195,2,23,194,2,248,22,169,8,248,22,187,15, +23,196,2,28,249,22,179,16,2,79,23,195,2,28,248,22,157,7,194,248,22, +190,15,194,193,86,94,23,194,1,27,248,22,132,8,23,195,1,249,22,191,15, +248,22,172,8,250,22,187,16,2,80,28,249,22,179,16,2,81,23,201,2,23, +199,1,250,22,187,16,2,82,23,202,1,2,44,80,144,50,40,41,2,43,28, +248,22,157,7,193,248,22,190,15,193,192,27,248,22,187,15,23,195,2,28,249, +22,173,9,23,197,2,66,117,110,105,120,28,249,22,154,8,194,5,1,47,28, +248,22,183,15,198,197,248,22,190,15,198,249,22,136,16,199,249,22,191,15,249, +22,157,8,248,22,187,15,200,40,198,86,94,23,194,1,28,249,22,173,9,23, +197,2,2,43,249,22,136,16,23,200,1,249,22,191,15,28,249,22,179,16,0, +27,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92,92,92, +91,97,45,122,93,58,34,23,199,2,251,22,158,8,2,47,250,22,157,8,203, +43,44,5,1,92,249,22,157,8,202,45,28,249,22,179,16,2,84,23,199,2, +249,22,158,8,2,47,249,22,157,8,200,43,28,249,22,179,16,2,84,23,199, +2,249,22,158,8,2,47,249,22,157,8,200,43,28,249,22,179,16,0,14,35, +114,120,34,94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,158,8,5, +4,85,78,67,92,249,22,157,8,200,41,28,249,22,179,16,0,12,35,114,120, +34,94,91,97,45,122,93,58,34,198,249,22,158,8,250,22,157,8,201,39,40, +249,22,157,8,200,41,12,198,12,32,86,88,148,8,36,42,56,11,72,102,111, +117,110,100,45,101,120,101,99,222,33,89,32,87,88,148,8,36,43,61,11,66, +110,101,120,116,222,33,88,27,248,22,145,16,23,197,2,28,249,22,175,9,23, +195,2,23,198,1,11,28,248,22,141,16,23,194,2,27,249,22,136,16,23,200, +1,23,196,1,28,23,196,2,90,144,42,11,89,146,42,39,11,248,22,139,16, +23,197,2,86,95,23,195,1,23,194,1,27,28,23,199,2,27,248,22,145,16, +23,199,2,28,249,22,175,9,23,195,2,23,200,2,11,28,248,22,141,16,23, +194,2,250,2,86,23,203,2,23,204,2,249,22,136,16,23,200,2,23,198,1, +250,2,86,23,203,2,23,204,2,23,196,1,11,28,23,193,2,192,86,94,23, +193,1,27,28,248,22,182,15,23,196,2,27,249,22,136,16,23,198,2,23,204, +2,28,28,248,22,131,16,193,10,248,22,130,16,193,192,11,11,28,23,193,2, +192,86,94,23,193,1,28,23,200,2,11,27,248,22,145,16,23,200,2,28,249, +22,175,9,194,23,201,1,11,28,248,22,141,16,193,250,2,86,203,204,249,22, +136,16,200,197,250,2,86,203,204,195,192,86,94,23,197,1,28,23,195,2,90, +144,42,11,89,146,42,39,11,248,22,139,16,23,197,2,86,95,23,195,1,23, +194,1,27,28,23,198,2,27,248,22,145,16,23,199,2,28,249,22,175,9,23, +195,2,23,200,2,11,28,248,22,141,16,23,194,2,250,2,86,23,202,2,23, +203,2,249,22,136,16,23,200,2,23,198,1,250,2,86,23,202,2,23,203,2, +23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,182,15,23, +196,2,27,249,22,136,16,23,198,2,23,203,2,28,28,248,22,131,16,193,10, +248,22,130,16,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,199, +2,11,27,248,22,145,16,23,200,2,28,249,22,175,9,194,23,201,1,11,28, +248,22,141,16,193,250,2,86,202,203,249,22,136,16,200,197,250,2,86,202,203, +195,192,28,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,199, +2,86,95,23,195,1,23,194,1,27,28,23,197,2,251,2,87,23,201,2,23, +202,2,23,203,2,23,198,2,11,28,23,193,2,192,86,94,23,193,1,27,28, +248,22,182,15,195,27,249,22,136,16,197,201,28,28,248,22,131,16,193,10,248, +22,130,16,193,192,11,11,28,192,192,28,197,11,251,2,87,201,202,203,198,194, +32,90,88,148,8,36,43,60,11,2,50,222,33,91,28,248,22,90,23,197,2, +11,27,249,22,136,16,248,22,144,16,248,22,83,23,201,2,23,198,2,28,248, +22,130,16,23,194,2,250,2,86,196,197,195,86,94,23,193,1,27,248,22,174, +20,23,199,1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144,16, +248,22,83,23,198,2,23,200,2,28,248,22,130,16,23,194,2,250,2,86,198, +199,195,86,94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23,194, +2,11,27,249,22,136,16,248,22,144,16,248,22,83,23,198,2,23,202,2,28, +248,22,130,16,23,194,2,250,2,86,200,201,195,86,94,23,193,1,27,248,22, +174,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144, +16,248,22,83,197,203,28,248,22,130,16,193,250,2,86,202,203,195,251,2,90, +203,204,205,248,22,174,20,198,86,95,28,28,248,22,182,15,23,195,2,10,28, +248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10,248,22,142,16,23, +195,2,11,12,250,22,186,11,2,7,2,48,23,197,2,28,28,23,195,2,28, +28,248,22,182,15,23,196,2,10,28,248,22,157,7,23,196,2,28,248,22,141, +16,23,196,2,10,248,22,142,16,23,196,2,11,248,22,141,16,23,196,2,11, +10,12,250,22,186,11,2,7,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, +141,16,23,195,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,198,2, +249,22,173,9,194,2,49,11,27,249,22,179,8,247,22,178,8,5,4,80,65, +84,72,27,28,23,194,2,249,80,143,43,44,249,22,169,8,23,198,1,7,63, +9,86,94,23,194,1,9,27,28,249,22,173,9,247,22,184,8,2,43,249,22, +82,248,22,191,15,5,1,46,23,196,1,23,194,1,28,248,22,90,23,194,2, +11,27,249,22,136,16,248,22,144,16,248,22,83,23,198,2,23,200,2,28,248, +22,130,16,23,194,2,250,2,86,202,201,195,86,94,23,193,1,27,248,22,174, +20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144,16, +248,22,83,23,198,2,23,202,2,28,248,22,130,16,23,194,2,250,2,86,204, +203,195,86,94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23,194, +2,11,27,249,22,136,16,248,22,144,16,248,22,83,23,198,2,23,204,2,28, +248,22,130,16,23,194,2,250,2,86,206,205,195,86,94,23,193,1,27,248,22, +174,20,23,196,1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144, +16,248,22,83,197,205,28,248,22,130,16,193,250,2,86,23,16,23,15,195,251, +2,90,23,17,23,16,23,15,248,22,174,20,198,27,248,22,144,16,23,196,1, +28,248,22,130,16,193,250,2,86,199,198,195,11,250,80,144,42,43,42,196,197, +11,250,80,144,42,43,42,196,11,11,32,95,88,148,8,36,42,58,11,2,50, +222,33,97,0,8,35,114,120,35,34,92,34,34,27,249,22,175,16,23,196,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,175,16,23,200,2,23,196,2,28,23,193,2, +86,94,23,194,1,27,248,22,104,23,195,2,27,250,2,95,23,203,1,203,248, +22,113,23,199,1,27,28,249,22,173,9,247,22,184,8,2,43,250,22,187,16, +2,96,23,198,1,2,51,194,28,249,22,154,8,194,2,51,249,22,96,203,195, +249,22,82,248,22,191,15,195,195,86,95,23,198,1,23,193,1,27,28,249,22, +173,9,247,22,184,8,2,43,250,22,187,16,2,96,23,198,1,2,51,194,28, +249,22,154,8,194,2,51,249,22,96,201,9,249,22,82,248,22,191,15,195,9, +27,28,249,22,173,9,247,22,184,8,2,43,250,22,187,16,2,96,23,198,1, +2,51,194,28,249,22,154,8,194,2,51,249,22,96,199,195,249,22,82,248,22, +191,15,195,195,86,95,23,194,1,23,193,1,27,28,249,22,173,9,247,22,184, +8,2,43,250,22,187,16,2,96,23,200,1,2,51,196,28,249,22,154,8,194, +2,51,249,22,96,197,9,249,22,82,248,22,191,15,195,9,86,95,28,28,248, +22,146,8,194,10,248,22,157,7,194,12,250,22,186,11,2,8,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,91,195,249,22,4,22,182,15,196,11,12,250,22,186,11,2,8, +6,14,14,40,108,105,115,116,111,102,32,112,97,116,104,63,41,197,250,2,95, +195,197,28,248,22,157,7,197,248,22,171,8,197,196,28,28,248,22,0,23,195, +2,249,22,48,23,196,2,39,11,20,13,144,80,144,39,46,40,26,35,80,144, +8,35,47,40,249,22,31,11,80,144,8,37,46,40,22,149,15,10,22,150,15, +10,22,151,15,10,22,152,15,11,22,153,15,11,22,157,15,10,22,156,15,11, +22,158,15,10,22,155,15,10,22,159,15,10,22,154,15,11,22,160,15,10,22, +161,15,10,22,162,15,10,22,163,15,11,22,164,15,10,22,147,15,11,247,23, +194,1,250,22,186,11,2,9,2,52,23,197,1,86,94,28,28,248,22,182,15, 23,195,2,10,28,248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10, -248,22,142,16,23,195,2,11,12,250,22,186,11,2,41,2,42,23,197,2,28, -28,248,22,183,15,23,195,2,249,22,173,9,248,22,184,15,23,197,2,2,43, -249,22,173,9,247,22,184,8,2,43,27,28,248,22,157,7,23,196,2,23,195, -2,248,22,169,8,248,22,187,15,23,197,2,28,249,22,179,16,2,79,23,195, -2,28,248,22,157,7,195,248,22,190,15,195,194,86,94,23,195,1,27,248,22, -132,8,23,195,1,249,22,191,15,248,22,172,8,250,22,187,16,2,80,28,249, -22,179,16,2,81,23,201,2,23,199,1,250,22,187,16,2,82,23,202,1,2, -44,80,144,47,40,41,2,43,28,248,22,157,7,194,248,22,190,15,194,193,0, -28,35,114,120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92,92,92, -85,78,67,92,92,92,92,34,86,95,28,28,28,248,22,182,15,23,195,2,10, -28,248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10,248,22,142,16, -23,195,2,11,10,248,22,183,15,23,195,2,12,252,22,186,11,2,6,2,45, -39,23,199,2,23,200,2,28,28,28,248,22,182,15,23,196,2,10,28,248,22, -157,7,23,196,2,28,248,22,141,16,23,196,2,10,248,22,142,16,23,196,2, -11,10,248,22,183,15,23,196,2,12,252,22,186,11,2,6,2,45,40,23,199, -2,23,200,2,27,28,248,22,183,15,23,196,2,248,22,184,15,23,196,2,247, -22,185,15,86,95,28,28,248,22,143,16,23,196,2,10,249,22,173,9,247,22, -185,15,23,195,2,12,253,22,188,11,2,6,6,54,54,112,97,116,104,32,105, -115,32,110,111,116,32,99,111,109,112,108,101,116,101,32,97,110,100,32,110,111, -116,32,116,104,101,32,112,108,97,116,102,111,114,109,39,115,32,99,111,110,118, -101,110,116,105,111,110,2,46,23,201,2,6,24,24,112,108,97,116,102,111,114, -109,32,99,111,110,118,101,110,116,105,111,110,32,116,121,112,101,247,22,185,15, -28,249,22,173,9,28,248,22,183,15,23,199,2,248,22,184,15,23,199,2,247, -22,185,15,23,195,2,12,253,22,188,11,2,6,6,37,37,103,105,118,101,110, -32,112,97,116,104,115,32,117,115,101,32,100,105,102,102,101,114,101,110,116,32, -99,111,110,118,101,110,116,105,111,110,115,2,46,23,201,2,6,9,9,114,111, -111,116,32,112,97,116,104,23,202,2,27,27,248,22,147,16,28,248,22,143,16, -23,199,2,23,198,1,248,22,144,16,23,199,1,86,94,28,28,248,22,183,15, -23,194,2,10,28,248,22,182,15,23,194,2,10,28,248,22,157,7,23,194,2, -28,248,22,141,16,23,194,2,10,248,22,142,16,23,194,2,11,12,250,22,186, -11,2,41,2,42,23,196,2,28,28,248,22,183,15,23,194,2,249,22,173,9, -248,22,184,15,23,196,2,2,43,249,22,173,9,247,22,184,8,2,43,27,28, -248,22,157,7,23,195,2,23,194,2,248,22,169,8,248,22,187,15,23,196,2, -28,249,22,179,16,2,79,23,195,2,28,248,22,157,7,194,248,22,190,15,194, -193,86,94,23,194,1,27,248,22,132,8,23,195,1,249,22,191,15,248,22,172, -8,250,22,187,16,2,80,28,249,22,179,16,2,81,23,201,2,23,199,1,250, -22,187,16,2,82,23,202,1,2,44,80,144,50,40,41,2,43,28,248,22,157, -7,193,248,22,190,15,193,192,27,248,22,187,15,23,195,2,28,249,22,173,9, -23,197,2,66,117,110,105,120,28,249,22,154,8,194,5,1,47,28,248,22,183, -15,198,197,248,22,190,15,198,249,22,136,16,199,249,22,191,15,249,22,157,8, -248,22,187,15,200,40,198,86,94,23,194,1,28,249,22,173,9,23,197,2,2, -43,249,22,136,16,23,200,1,249,22,191,15,28,249,22,179,16,0,27,35,114, -120,34,94,92,92,92,92,92,92,92,92,91,63,93,92,92,92,92,91,97,45, -122,93,58,34,23,199,2,251,22,158,8,2,47,250,22,157,8,203,43,44,5, -1,92,249,22,157,8,202,45,28,249,22,179,16,2,84,23,199,2,249,22,158, -8,2,47,249,22,157,8,200,43,28,249,22,179,16,2,84,23,199,2,249,22, -158,8,2,47,249,22,157,8,200,43,28,249,22,179,16,0,14,35,114,120,34, -94,92,92,92,92,92,92,92,92,34,23,199,2,249,22,158,8,5,4,85,78, -67,92,249,22,157,8,200,41,28,249,22,179,16,0,12,35,114,120,34,94,91, -97,45,122,93,58,34,198,249,22,158,8,250,22,157,8,201,39,40,249,22,157, -8,200,41,12,198,12,32,86,88,148,8,36,42,56,11,72,102,111,117,110,100, -45,101,120,101,99,222,33,89,32,87,88,148,8,36,43,61,11,66,110,101,120, -116,222,33,88,27,248,22,145,16,23,196,2,28,249,22,175,9,23,195,2,23, -197,1,11,28,248,22,141,16,23,194,2,27,249,22,136,16,23,197,1,23,196, -1,28,23,197,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,2, -86,95,23,195,1,23,194,1,27,28,23,202,2,27,248,22,145,16,23,199,2, -28,249,22,175,9,23,195,2,23,200,2,11,28,248,22,141,16,23,194,2,250, -2,86,23,205,2,23,206,2,249,22,136,16,23,200,2,23,198,1,250,2,86, -23,205,2,23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27, -28,248,22,182,15,23,196,2,27,249,22,136,16,23,198,2,23,205,2,28,28, -248,22,131,16,193,10,248,22,130,16,193,192,11,11,28,23,193,2,192,86,94, -23,193,1,28,23,203,2,11,27,248,22,145,16,23,200,2,28,249,22,175,9, -194,23,201,1,11,28,248,22,141,16,193,250,2,86,205,206,249,22,136,16,200, -197,250,2,86,205,206,195,192,86,94,23,194,1,28,23,196,2,90,144,42,11, -89,146,42,39,11,248,22,139,16,23,197,2,86,95,23,195,1,23,194,1,27, -28,23,201,2,27,248,22,145,16,23,199,2,28,249,22,175,9,23,195,2,23, -200,2,11,28,248,22,141,16,23,194,2,250,2,86,23,204,2,23,205,2,249, -22,136,16,23,200,2,23,198,1,250,2,86,23,204,2,23,205,2,23,196,1, -11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,182,15,23,196,2,27, -249,22,136,16,23,198,2,23,204,2,28,28,248,22,131,16,193,10,248,22,130, -16,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27, -248,22,145,16,23,200,2,28,249,22,175,9,194,23,201,1,11,28,248,22,141, -16,193,250,2,86,204,205,249,22,136,16,200,197,250,2,86,204,205,195,192,28, -23,193,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,199,2,86,95, -23,195,1,23,194,1,27,28,23,198,2,251,2,87,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,182, -15,195,27,249,22,136,16,197,200,28,28,248,22,131,16,193,10,248,22,130,16, -193,192,11,11,28,192,192,28,198,11,251,2,87,198,203,201,202,194,32,90,88, -148,8,36,43,60,11,2,50,222,33,91,28,248,22,90,23,197,2,11,27,249, -22,136,16,248,22,144,16,248,22,83,23,201,2,23,196,2,28,248,22,130,16, -23,194,2,250,2,86,197,198,195,86,94,23,193,1,27,248,22,174,20,23,199, -1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144,16,248,22,83, -23,198,2,23,198,2,28,248,22,130,16,23,194,2,250,2,86,199,200,195,86, -94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23,194,2,11,27, -249,22,136,16,248,22,144,16,248,22,83,23,198,2,23,200,2,28,248,22,130, -16,23,194,2,250,2,86,201,202,195,86,94,23,193,1,27,248,22,174,20,23, -196,1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144,16,248,22, -83,197,201,28,248,22,130,16,193,250,2,86,203,204,195,251,2,90,203,204,205, -248,22,174,20,198,86,95,28,28,248,22,182,15,23,195,2,10,28,248,22,157, -7,23,195,2,28,248,22,141,16,23,195,2,10,248,22,142,16,23,195,2,11, -12,250,22,186,11,2,7,2,48,23,197,2,28,28,23,195,2,28,28,248,22, -182,15,23,196,2,10,28,248,22,157,7,23,196,2,28,248,22,141,16,23,196, -2,10,248,22,142,16,23,196,2,11,248,22,141,16,23,196,2,11,10,12,250, -22,186,11,2,7,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,141,16,23, -195,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,198,2,249,22,173, -9,194,2,49,11,27,249,22,179,8,247,22,178,8,5,4,80,65,84,72,27, -28,23,194,2,249,80,143,43,44,249,22,169,8,23,198,1,7,63,9,86,94, -23,194,1,9,27,28,249,22,173,9,247,22,184,8,2,43,249,22,82,248,22, -191,15,5,1,46,23,196,1,23,194,1,28,248,22,90,23,194,2,11,27,249, -22,136,16,248,22,144,16,248,22,83,23,198,2,23,200,2,28,248,22,130,16, -23,194,2,250,2,86,201,202,195,86,94,23,193,1,27,248,22,174,20,23,196, -1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144,16,248,22,83, -23,198,2,23,202,2,28,248,22,130,16,23,194,2,250,2,86,203,204,195,86, -94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23,194,2,11,27, -249,22,136,16,248,22,144,16,248,22,83,23,198,2,23,204,2,28,248,22,130, -16,23,194,2,250,2,86,205,206,195,86,94,23,193,1,27,248,22,174,20,23, -196,1,28,248,22,90,23,194,2,11,27,249,22,136,16,248,22,144,16,248,22, -83,197,205,28,248,22,130,16,193,250,2,86,23,15,23,16,195,251,2,90,23, -15,23,16,23,17,248,22,174,20,198,27,248,22,144,16,23,196,1,28,248,22, -130,16,193,250,2,86,198,199,195,11,250,80,144,42,43,42,196,197,11,250,80, -144,42,43,42,196,11,11,32,95,88,148,8,36,42,58,11,2,50,222,33,97, -0,8,35,114,120,35,34,92,34,34,27,249,22,175,16,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,175,16,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,95,202,23,204,1,248,22,113,23, -199,1,27,28,249,22,173,9,247,22,184,8,2,43,250,22,187,16,2,96,23, -198,1,2,51,194,28,249,22,154,8,194,2,51,249,22,96,202,195,249,22,82, -248,22,191,15,195,195,86,95,23,199,1,23,193,1,27,28,249,22,173,9,247, -22,184,8,2,43,250,22,187,16,2,96,23,198,1,2,51,194,28,249,22,154, -8,194,2,51,249,22,96,200,9,249,22,82,248,22,191,15,195,9,27,28,249, -22,173,9,247,22,184,8,2,43,250,22,187,16,2,96,23,198,1,2,51,194, -28,249,22,154,8,194,2,51,249,22,96,198,195,249,22,82,248,22,191,15,195, -195,86,95,23,195,1,23,193,1,27,28,249,22,173,9,247,22,184,8,2,43, -250,22,187,16,2,96,23,200,1,2,51,196,28,249,22,154,8,194,2,51,249, -22,96,196,9,249,22,82,248,22,191,15,195,9,86,95,28,28,248,22,146,8, -194,10,248,22,157,7,194,12,250,22,186,11,2,8,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,91,195,249,22,4,22,182,15,196,11,12,250,22,186,11,2,8,6,14,14, -40,108,105,115,116,111,102,32,112,97,116,104,63,41,197,250,2,95,197,195,28, -248,22,157,7,197,248,22,171,8,197,196,28,28,248,22,0,23,195,2,249,22, -48,23,196,2,39,11,20,13,144,80,144,39,46,40,26,35,80,144,8,35,47, -40,249,22,31,11,80,144,8,37,46,40,22,149,15,10,22,150,15,10,22,151, -15,10,22,152,15,11,22,153,15,11,22,157,15,10,22,156,15,11,22,158,15, -10,22,155,15,10,22,159,15,10,22,154,15,11,22,160,15,10,22,161,15,10, -22,162,15,10,22,163,15,11,22,164,15,10,22,147,15,11,247,23,194,1,250, -22,186,11,2,9,2,52,23,197,1,86,94,28,28,248,22,182,15,23,195,2, -10,28,248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10,248,22,142, -16,23,195,2,11,12,250,22,186,11,23,196,2,2,48,23,197,2,28,248,22, -141,16,23,195,2,12,251,22,188,11,23,197,1,2,53,2,46,23,198,1,86, -94,28,28,248,22,182,15,23,195,2,10,28,248,22,157,7,23,195,2,28,248, -22,141,16,23,195,2,10,248,22,142,16,23,195,2,11,12,250,22,186,11,23, -196,2,2,48,23,197,2,28,248,22,141,16,23,195,2,12,251,22,188,11,23, -197,1,2,53,2,46,23,198,1,86,95,28,28,248,22,182,15,23,195,2,10, -28,248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10,248,22,142,16, -23,195,2,11,12,250,22,186,11,23,196,2,2,48,23,197,2,28,248,22,141, -16,23,195,2,86,94,23,194,1,12,251,22,188,11,23,197,2,2,53,2,46, -23,198,1,249,22,3,20,20,94,88,148,8,36,40,50,11,9,223,2,33,101, -23,195,1,23,197,1,28,28,248,22,0,23,195,2,249,22,48,23,196,2,40, -11,12,250,22,186,11,23,196,1,2,54,23,197,1,86,94,28,28,248,22,182, -15,23,194,2,10,28,248,22,157,7,23,194,2,28,248,22,141,16,23,194,2, -10,248,22,142,16,23,194,2,11,12,250,22,186,11,2,15,2,48,23,196,2, -28,248,22,141,16,23,194,2,12,251,22,188,11,2,15,2,53,2,46,23,197, -1,86,97,28,28,248,22,182,15,23,196,2,10,28,248,22,157,7,23,196,2, -28,248,22,141,16,23,196,2,10,248,22,142,16,23,196,2,11,12,250,22,186, -11,2,15,2,48,23,198,2,28,248,22,141,16,23,196,2,12,251,22,188,11, -2,15,2,53,2,46,23,199,2,249,22,3,32,0,88,148,8,36,40,49,11, -9,222,33,104,23,198,2,28,28,248,22,0,23,195,2,249,22,48,23,196,2, -40,11,12,250,22,186,11,2,15,2,54,23,197,2,252,80,143,44,52,23,199, -1,23,200,1,23,201,1,11,11,86,94,28,28,248,22,182,15,23,194,2,10, -28,248,22,157,7,23,194,2,28,248,22,141,16,23,194,2,10,248,22,142,16, -23,194,2,11,12,250,22,186,11,2,17,2,48,23,196,2,28,248,22,141,16, -23,194,2,12,251,22,188,11,2,17,2,53,2,46,23,197,1,86,99,28,28, -248,22,182,15,23,197,2,10,28,248,22,157,7,23,197,2,28,248,22,141,16, -23,197,2,10,248,22,142,16,23,197,2,11,12,250,22,186,11,2,17,2,48, -23,199,2,28,248,22,141,16,23,197,2,12,251,22,188,11,2,17,2,53,2, -46,23,200,2,28,28,248,22,182,15,23,198,2,10,28,248,22,157,7,23,198, -2,28,248,22,141,16,23,198,2,10,248,22,142,16,23,198,2,11,12,250,22, -186,11,2,17,2,48,23,200,2,28,248,22,141,16,23,198,2,12,251,22,188, -11,2,17,2,53,2,46,23,201,2,249,22,3,32,0,88,148,8,36,40,49, -11,9,222,33,106,23,200,2,28,28,248,22,0,23,195,2,249,22,48,23,196, -2,40,11,12,250,22,186,11,2,17,2,54,23,197,2,252,80,143,44,52,23, -199,1,23,202,1,23,203,1,23,201,1,23,200,1,27,248,22,159,16,2,55, -28,248,22,143,16,23,194,2,248,22,146,16,23,194,1,28,248,22,142,16,23, -194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,249,22,144,16,250,80, -144,49,43,42,248,22,159,16,2,56,11,11,248,22,159,16,2,57,86,95,23, -195,1,23,194,1,248,22,146,16,249,22,144,16,23,199,1,23,196,1,27,250, -80,144,44,43,42,248,22,159,16,2,56,23,197,1,10,28,23,193,2,248,22, -146,16,23,194,1,11,249,80,144,41,55,40,39,80,144,41,8,40,42,27,248, -22,159,16,2,58,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1,28, -248,22,142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,249, -22,144,16,250,80,144,49,43,42,248,22,159,16,2,56,11,11,248,22,159,16, -2,57,86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199,1, -23,196,1,27,250,80,144,44,43,42,248,22,159,16,2,56,23,197,1,10,28, -23,193,2,248,22,146,16,23,194,1,11,249,80,144,41,55,40,40,80,144,41, -8,41,42,27,20,13,144,80,144,40,46,40,26,35,80,144,8,36,47,40,249, -22,31,11,80,144,8,38,46,40,22,149,15,10,22,150,15,10,22,151,15,10, -22,152,15,11,22,153,15,11,22,157,15,10,22,156,15,11,22,158,15,10,22, -155,15,10,22,159,15,10,22,154,15,11,22,160,15,10,22,161,15,10,22,162, -15,10,22,163,15,11,22,164,15,10,22,147,15,11,247,22,152,6,28,248,22, -151,2,193,192,11,27,28,23,195,2,249,22,136,16,23,197,1,6,11,11,99, -111,110,102,105,103,46,114,107,116,100,86,94,23,195,1,11,27,28,23,194,2, -28,248,22,130,16,23,195,2,249,22,144,6,23,196,1,80,144,43,8,42,42, -11,11,28,192,192,21,17,1,0,250,22,160,2,23,196,1,2,59,247,22,175, -8,250,22,160,2,195,2,59,247,22,175,8,28,248,22,157,7,23,195,2,27, -248,22,190,15,23,196,1,28,248,22,143,16,23,194,2,192,249,22,144,16,23, -195,1,27,247,80,144,43,54,42,28,23,193,2,192,86,94,23,193,1,247,22, -160,16,28,248,22,146,8,23,195,2,27,248,22,191,15,23,196,1,28,248,22, -143,16,23,194,2,192,249,22,144,16,23,195,1,27,247,80,144,43,54,42,28, -23,193,2,192,86,94,23,193,1,247,22,160,16,28,248,22,182,15,23,195,2, -28,248,22,143,16,23,195,2,193,249,22,144,16,23,196,1,27,247,80,144,42, -54,42,28,23,193,2,192,86,94,23,193,1,247,22,160,16,193,27,248,22,159, +248,22,142,16,23,195,2,11,12,250,22,186,11,23,196,2,2,48,23,197,2, +28,248,22,141,16,23,195,2,12,251,22,188,11,23,197,1,2,53,2,46,23, +198,1,86,94,28,28,248,22,182,15,23,195,2,10,28,248,22,157,7,23,195, +2,28,248,22,141,16,23,195,2,10,248,22,142,16,23,195,2,11,12,250,22, +186,11,23,196,2,2,48,23,197,2,28,248,22,141,16,23,195,2,12,251,22, +188,11,23,197,1,2,53,2,46,23,198,1,86,95,28,28,248,22,182,15,23, +195,2,10,28,248,22,157,7,23,195,2,28,248,22,141,16,23,195,2,10,248, +22,142,16,23,195,2,11,12,250,22,186,11,23,196,2,2,48,23,197,2,28, +248,22,141,16,23,195,2,86,94,23,194,1,12,251,22,188,11,23,197,2,2, +53,2,46,23,198,1,249,22,3,20,20,94,88,148,8,36,40,50,11,9,223, +2,33,101,23,195,1,23,197,1,28,28,248,22,0,23,195,2,249,22,48,23, +196,2,40,11,12,250,22,186,11,23,196,1,2,54,23,197,1,86,94,28,28, +248,22,182,15,23,194,2,10,28,248,22,157,7,23,194,2,28,248,22,141,16, +23,194,2,10,248,22,142,16,23,194,2,11,12,250,22,186,11,2,15,2,48, +23,196,2,28,248,22,141,16,23,194,2,12,251,22,188,11,2,15,2,53,2, +46,23,197,1,86,97,28,28,248,22,182,15,23,196,2,10,28,248,22,157,7, +23,196,2,28,248,22,141,16,23,196,2,10,248,22,142,16,23,196,2,11,12, +250,22,186,11,2,15,2,48,23,198,2,28,248,22,141,16,23,196,2,12,251, +22,188,11,2,15,2,53,2,46,23,199,2,249,22,3,32,0,88,148,8,36, +40,49,11,9,222,33,104,23,198,2,28,28,248,22,0,23,195,2,249,22,48, +23,196,2,40,11,12,250,22,186,11,2,15,2,54,23,197,2,252,80,143,44, +52,23,199,1,23,200,1,23,201,1,11,11,86,94,28,28,248,22,182,15,23, +194,2,10,28,248,22,157,7,23,194,2,28,248,22,141,16,23,194,2,10,248, +22,142,16,23,194,2,11,12,250,22,186,11,2,17,2,48,23,196,2,28,248, +22,141,16,23,194,2,12,251,22,188,11,2,17,2,53,2,46,23,197,1,86, +99,28,28,248,22,182,15,23,197,2,10,28,248,22,157,7,23,197,2,28,248, +22,141,16,23,197,2,10,248,22,142,16,23,197,2,11,12,250,22,186,11,2, +17,2,48,23,199,2,28,248,22,141,16,23,197,2,12,251,22,188,11,2,17, +2,53,2,46,23,200,2,28,28,248,22,182,15,23,198,2,10,28,248,22,157, +7,23,198,2,28,248,22,141,16,23,198,2,10,248,22,142,16,23,198,2,11, +12,250,22,186,11,2,17,2,48,23,200,2,28,248,22,141,16,23,198,2,12, +251,22,188,11,2,17,2,53,2,46,23,201,2,249,22,3,32,0,88,148,8, +36,40,49,11,9,222,33,106,23,200,2,28,28,248,22,0,23,195,2,249,22, +48,23,196,2,40,11,12,250,22,186,11,2,17,2,54,23,197,2,252,80,143, +44,52,23,199,1,23,202,1,23,203,1,23,201,1,23,200,1,27,248,22,159, 16,2,55,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1,28,248,22, 142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,249,22,144, 16,250,80,144,49,43,42,248,22,159,16,2,56,11,11,248,22,159,16,2,57, 86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199,1,23,196, 1,27,250,80,144,44,43,42,248,22,159,16,2,56,23,197,1,10,28,23,193, -2,248,22,146,16,23,194,1,11,28,248,22,143,16,23,195,2,193,249,22,144, -16,23,196,1,27,249,80,144,44,55,40,39,80,144,44,8,43,42,28,23,193, -2,192,86,94,23,193,1,247,22,160,16,28,248,22,143,16,23,195,2,248,22, -146,16,23,195,1,28,248,22,142,16,23,195,2,90,144,42,11,89,146,42,39, -11,248,22,139,16,249,22,144,16,250,80,144,48,43,42,248,22,159,16,2,56, -11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1,248,22,146,16,249, -22,144,16,23,200,1,23,196,1,27,250,80,144,43,43,42,248,22,159,16,2, -56,23,198,1,10,28,23,193,2,248,22,146,16,23,194,1,11,28,248,22,90, -23,196,2,9,28,248,22,83,23,196,2,249,22,82,27,248,22,173,20,23,199, -2,28,248,22,157,7,23,194,2,27,248,22,190,15,23,195,1,28,248,22,143, -16,23,194,2,192,249,22,144,16,23,195,1,27,247,80,144,46,54,42,28,23, -193,2,192,86,94,23,193,1,247,22,160,16,28,248,22,146,8,23,194,2,27, -248,22,191,15,23,195,1,28,248,22,143,16,23,194,2,192,249,22,144,16,23, -195,1,27,247,80,144,46,54,42,28,23,193,2,192,86,94,23,193,1,247,22, -160,16,28,248,22,182,15,23,194,2,28,248,22,143,16,23,194,2,192,249,22, -144,16,23,195,1,27,247,80,144,45,54,42,28,23,193,2,192,86,94,23,193, -1,247,22,160,16,192,27,248,22,174,20,23,199,1,28,248,22,90,23,194,2, -9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22,173,20, -23,197,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2,9,28,248, -22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20,23,197,2, -249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22,96,23, -202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22, -96,23,199,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2,9,28, -248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20,23,197, -2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22,96, -23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249, -22,96,23,196,2,27,248,22,174,20,23,199,1,28,248,22,90,23,194,2,9, -28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22,173,20,23, -197,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2,9,28,248,22, -83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20,23,197,2,249, -80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22,96,23,202, -2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22,96, -23,199,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2,9,28,248, -22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20,23,197,2, -249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22,96,23, -202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,27,250, -22,160,2,23,198,1,23,199,1,11,28,192,249,80,144,42,8,44,42,198,194, -196,27,248,22,159,16,2,58,28,248,22,143,16,23,194,2,248,22,146,16,23, +2,248,22,146,16,23,194,1,11,249,80,144,41,55,40,39,80,144,41,8,40, +42,27,248,22,159,16,2,58,28,248,22,143,16,23,194,2,248,22,146,16,23, 194,1,28,248,22,142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22, 139,16,249,22,144,16,250,80,144,49,43,42,248,22,159,16,2,56,11,11,248, 22,159,16,2,57,86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16, 23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,159,16,2,56,23,197, -1,10,28,23,193,2,248,22,146,16,23,194,1,11,27,248,80,144,41,58,42, -249,80,144,43,55,40,40,80,144,43,8,45,42,27,27,250,22,160,2,23,198, -2,72,108,105,110,107,115,45,102,105,108,101,11,27,28,23,194,2,23,194,1, -86,94,23,194,1,249,22,136,16,27,250,22,160,2,23,202,2,71,115,104,97, -114,101,45,100,105,114,11,28,192,192,249,22,136,16,64,117,112,6,5,5,115, -104,97,114,101,2,60,28,248,22,157,7,23,194,2,27,248,22,190,15,23,195, -1,28,248,22,143,16,23,194,2,192,249,22,144,16,23,195,1,27,247,80,144, -47,54,42,28,23,193,2,192,86,94,23,193,1,247,22,160,16,28,248,22,146, -8,23,194,2,27,248,22,191,15,23,195,1,28,248,22,143,16,23,194,2,192, -249,22,144,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2,192,86,94, -23,193,1,247,22,160,16,28,248,22,182,15,23,194,2,28,248,22,143,16,23, -194,2,192,249,22,144,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2, -192,86,94,23,193,1,247,22,160,16,192,250,22,96,248,22,92,11,28,247,22, -167,16,28,247,22,168,16,248,22,92,250,22,136,16,248,22,159,16,2,61,250, -22,160,2,23,204,2,2,59,247,22,175,8,2,60,9,9,28,247,22,168,16, -250,80,144,47,8,23,42,23,200,1,1,18,108,105,110,107,115,45,115,101,97, -114,99,104,45,102,105,108,101,115,248,22,92,23,200,1,9,248,22,178,13,23, -194,1,249,22,14,80,144,41,8,26,41,28,248,22,134,13,23,197,2,86,94, -23,196,1,32,0,88,148,8,36,39,44,11,9,222,11,20,20,94,88,148,8, -36,39,46,11,9,223,3,33,124,23,196,1,32,126,88,148,39,40,59,11,2, -50,222,33,127,90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86, -95,23,195,1,23,194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23, -194,2,249,22,149,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11, -90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1, -23,194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22, -149,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11, -89,146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1,23,194,1,28, -248,22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22,149,6,23,195, -1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146,42,39, -11,248,22,139,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,182,15, -23,194,2,28,248,22,131,16,23,194,2,249,22,149,6,23,195,1,32,0,88, -148,8,36,39,44,11,9,222,11,248,2,126,23,194,1,11,11,11,11,32,128, -2,88,148,8,36,40,58,11,2,50,222,33,129,2,27,249,22,167,6,8,128, -128,23,196,2,28,248,22,152,7,23,194,2,9,249,22,82,23,195,1,27,249, -22,167,6,8,128,128,23,199,2,28,248,22,152,7,23,194,2,9,249,22,82, -23,195,1,27,249,22,167,6,8,128,128,23,202,2,28,248,22,152,7,23,194, -2,9,249,22,82,23,195,1,27,249,22,167,6,8,128,128,23,205,2,28,248, -22,152,7,23,194,2,9,249,22,82,23,195,1,248,2,128,2,23,206,1,27, -249,22,167,6,8,128,128,23,196,2,28,248,22,146,8,23,194,2,28,249,22, -162,20,248,22,151,8,23,196,2,8,128,128,249,22,1,22,158,8,249,22,82, -23,197,1,27,249,22,167,6,8,128,128,23,201,2,28,248,22,152,7,23,194, -2,9,249,22,82,23,195,1,27,249,22,167,6,8,128,128,23,204,2,28,248, -22,152,7,23,194,2,9,249,22,82,23,195,1,27,249,22,167,6,8,128,128, -23,207,2,28,248,22,152,7,23,194,2,9,249,22,82,23,195,1,27,249,22, -167,6,8,128,128,23,210,2,28,248,22,152,7,23,194,2,9,249,22,82,23, -195,1,248,2,128,2,23,211,1,192,192,248,22,137,6,23,194,1,20,13,144, -80,144,40,8,28,40,80,144,40,8,46,42,27,28,249,22,129,9,248,22,184, -8,2,62,41,90,144,42,11,89,146,42,39,11,248,22,139,16,23,198,2,86, -95,23,195,1,23,194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23, -194,2,249,22,149,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11, -90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1, -23,194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22, -149,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11, -89,146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1,23,194,1,28, -248,22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22,149,6,23,195, -1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11,89,146,42,39, -11,248,22,139,16,23,197,1,86,95,23,195,1,23,194,1,28,248,22,182,15, -23,194,2,28,248,22,131,16,23,194,2,249,22,149,6,23,195,1,32,0,88, -148,8,36,39,44,11,9,222,11,248,2,126,23,194,1,11,11,11,11,11,28, -248,22,130,16,23,195,2,27,28,249,22,129,9,248,22,184,8,2,62,41,249, -22,149,6,23,197,2,32,0,88,148,8,36,39,44,11,9,222,11,11,86,94, -28,23,194,2,248,22,151,6,23,195,1,86,94,23,194,1,12,249,22,82,27, -248,22,128,6,23,199,1,250,22,44,22,35,88,148,39,39,8,24,11,9,223, -3,33,130,2,20,20,94,88,148,8,36,39,46,11,9,223,3,33,131,2,23, -196,1,194,249,22,82,11,194,28,28,23,195,2,28,248,22,84,23,196,2,248, -22,171,9,249,22,180,14,39,248,22,174,20,23,199,2,11,11,194,86,94,23, -195,1,249,22,12,20,20,94,88,148,8,32,39,61,16,4,39,8,128,80,8, -240,0,64,0,0,39,9,224,2,3,33,132,2,23,196,1,80,144,41,8,26, -41,27,248,22,171,9,194,28,192,192,248,22,171,9,248,22,83,195,86,95,28, -248,22,155,12,23,198,2,27,247,22,147,12,28,249,22,137,12,23,195,2,2, -63,251,22,143,12,23,197,1,2,63,250,22,141,8,6,42,42,101,114,114,111, -114,32,114,101,97,100,105,110,103,32,99,111,108,108,101,99,116,105,111,110,32, -108,105,110,107,115,32,102,105,108,101,32,126,115,58,32,126,97,23,203,2,248, -22,151,12,23,206,2,247,22,27,12,12,28,23,193,2,250,22,158,2,80,144, -45,8,25,41,23,198,1,249,22,82,23,198,1,21,17,0,0,86,95,23,195, -1,23,193,1,12,28,248,22,155,12,23,198,2,86,94,23,197,1,248,23,195, -1,247,22,140,2,196,88,148,39,40,58,8,240,0,0,0,2,9,226,0,2, -1,3,33,135,2,20,20,94,248,22,152,6,23,194,2,28,248,22,152,7,248, -22,152,6,23,195,1,12,248,22,182,11,6,30,30,101,120,112,101,99,116,101, -100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101,115,115,105, -111,110,248,22,137,6,23,194,1,28,248,22,91,193,28,28,249,22,132,4,41, -248,22,95,195,10,249,22,132,4,42,248,22,95,195,28,28,248,22,157,7,248, -22,83,194,10,28,249,22,173,9,2,64,248,22,173,20,195,10,249,22,173,9, -2,65,248,22,173,20,195,28,27,248,22,104,194,28,248,22,182,15,193,10,28, -248,22,157,7,193,28,248,22,141,16,193,10,248,22,142,16,193,11,27,248,22, -90,248,22,106,195,28,192,192,248,22,188,16,248,22,113,195,11,11,11,11,28, -248,22,131,16,249,22,136,16,23,196,2,23,198,2,27,248,22,70,248,22,186, -15,23,198,1,250,22,158,2,23,198,2,23,196,2,249,22,82,23,199,1,250, -22,160,2,23,203,1,23,201,1,9,12,250,22,158,2,23,197,1,23,198,1, -249,22,82,23,198,1,23,201,1,28,28,248,22,90,248,22,106,23,197,2,10, -249,22,179,16,248,22,113,23,198,2,247,22,175,8,27,248,22,146,16,249,22, -144,16,248,22,104,23,200,2,23,198,1,28,249,22,173,9,248,22,173,20,23, -199,2,2,65,86,94,23,196,1,249,22,3,20,20,94,88,148,8,36,40,56, -11,9,224,3,2,33,140,2,23,196,1,248,22,149,16,23,196,1,28,249,22, -173,9,248,22,173,20,23,199,2,2,64,86,94,23,196,1,86,94,28,250,22, -160,2,23,197,2,11,11,12,250,22,158,2,23,197,2,11,9,249,22,166,2, -23,196,2,20,20,95,88,148,8,36,41,53,11,9,224,3,2,33,141,2,23, -195,1,23,196,1,27,248,22,70,248,22,173,20,23,199,1,250,22,158,2,23, -198,2,23,196,2,249,22,82,248,22,131,2,23,200,1,250,22,160,2,23,203, -1,23,201,1,9,12,250,22,158,2,23,196,1,23,197,1,248,22,97,23,199, -1,27,28,28,23,194,2,248,22,171,9,248,22,83,23,196,2,10,9,27,249, -22,128,6,23,198,2,68,98,105,110,97,114,121,250,22,44,22,35,88,148,8, -36,39,47,11,9,223,3,33,137,2,20,20,94,88,148,8,36,39,46,11,9, -223,3,33,138,2,23,196,1,86,94,28,28,248,22,91,23,194,2,249,22,4, -32,0,88,148,8,36,40,48,11,9,222,33,139,2,23,195,2,11,12,248,22, -182,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116,101, -110,116,27,247,22,140,2,27,90,144,42,11,89,146,42,39,11,248,22,139,16, -23,201,2,192,86,96,249,22,3,20,20,94,88,148,8,36,40,57,11,9,224, -2,3,33,142,2,23,195,1,23,197,1,249,22,166,2,195,88,148,8,36,41, -51,11,9,223,3,33,143,2,250,22,158,2,80,144,47,8,25,41,23,200,1, -249,22,82,23,201,1,198,193,20,13,144,80,144,40,8,28,40,250,80,144,43, -8,47,42,23,198,2,23,196,2,11,27,250,22,160,2,80,144,44,8,25,41, -23,197,2,21,143,11,17,0,0,27,248,22,83,23,195,2,27,249,80,144,45, -8,27,42,23,198,2,23,196,2,28,249,22,175,9,23,195,2,23,196,1,248, -22,174,20,195,86,94,23,195,1,20,13,144,80,144,43,8,28,40,250,80,144, -46,8,47,42,23,201,1,23,199,2,23,196,2,27,20,20,95,88,148,8,36, -39,55,8,240,0,0,0,2,9,225,5,4,1,33,144,2,23,194,1,23,197, -1,28,249,22,48,23,195,2,39,20,13,144,80,144,44,46,40,26,35,80,144, -8,40,47,40,249,22,31,11,80,144,8,42,46,40,22,149,15,10,22,150,15, -10,22,151,15,10,22,152,15,11,22,153,15,11,22,157,15,10,22,156,15,11, -22,158,15,10,22,155,15,10,22,159,15,10,22,154,15,11,22,160,15,10,22, -161,15,10,22,162,15,10,22,163,15,11,22,164,15,10,22,147,15,11,247,23, -193,1,250,22,186,11,2,9,2,52,23,196,1,248,22,8,20,20,94,88,148, -39,40,8,49,16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,9,224, -1,2,33,145,2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22,157, -7,23,195,2,27,249,22,177,16,2,147,2,23,197,2,28,23,193,2,28,249, -22,132,4,248,22,103,23,196,2,248,22,186,3,248,22,160,7,23,199,2,249, -22,7,250,22,179,7,23,200,1,39,248,22,103,23,199,1,23,198,1,249,22, -7,250,22,179,7,23,200,2,39,248,22,103,23,199,2,249,22,82,249,22,179, -7,23,201,1,248,22,105,23,200,1,23,200,1,86,94,23,193,1,249,22,7, -23,197,1,23,198,1,90,144,42,11,89,146,42,39,11,248,22,139,16,23,198, -1,86,94,23,195,1,28,249,22,173,9,23,195,2,2,49,86,94,23,193,1, -249,22,7,23,196,1,23,200,1,27,249,22,82,23,197,1,23,201,1,28,248, -22,157,7,23,195,2,27,249,22,177,16,2,147,2,23,197,2,28,23,193,2, -28,249,22,132,4,248,22,103,23,196,2,248,22,186,3,248,22,160,7,23,199, -2,249,22,7,250,22,179,7,23,200,1,39,248,22,103,23,199,1,23,196,1, -249,22,7,250,22,179,7,23,200,2,39,248,22,103,23,199,2,249,22,82,249, -22,179,7,23,201,1,248,22,105,23,200,1,23,198,1,86,94,23,193,1,249, -22,7,23,197,1,23,196,1,90,144,42,11,89,146,42,39,11,248,22,139,16, -23,198,1,86,94,23,195,1,28,249,22,173,9,23,195,2,2,49,86,94,23, -193,1,249,22,7,23,196,1,23,198,1,249,80,144,48,8,31,42,194,249,22, -82,197,199,28,248,22,90,23,196,2,9,28,248,22,83,23,196,2,28,248,22, -151,2,248,22,173,20,23,197,2,250,22,96,249,22,2,22,131,2,250,22,160, -2,248,22,173,20,23,204,2,23,202,2,9,250,22,160,2,248,22,173,20,23, -202,2,11,9,27,248,22,174,20,23,200,1,28,248,22,90,23,194,2,9,28, -248,22,83,23,194,2,28,248,22,151,2,248,22,173,20,23,195,2,250,22,96, -249,22,2,22,131,2,250,22,160,2,248,22,173,20,23,202,2,23,206,2,9, -250,22,160,2,248,22,173,20,23,200,2,11,9,249,80,144,48,8,48,42,23, -203,1,248,22,174,20,23,199,1,27,248,80,144,45,8,30,42,248,22,173,20, -23,196,2,250,22,96,250,22,160,2,23,199,2,23,205,2,9,250,22,160,2, -23,199,1,11,9,249,80,144,49,8,48,42,23,204,1,248,22,174,20,23,200, -1,249,22,96,247,22,163,16,249,80,144,47,8,48,42,23,202,1,248,22,174, -20,23,198,1,27,248,80,144,41,8,30,42,248,22,173,20,23,198,2,250,22, -96,250,22,160,2,23,199,2,23,201,2,9,250,22,160,2,23,199,1,11,9, -27,248,22,174,20,23,201,1,28,248,22,90,23,194,2,9,28,248,22,83,23, -194,2,28,248,22,151,2,248,22,173,20,23,195,2,250,22,96,249,22,2,22, -131,2,250,22,160,2,248,22,173,20,23,202,2,23,207,2,9,250,22,160,2, -248,22,173,20,23,200,2,11,9,249,80,144,49,8,48,42,23,204,1,248,22, -174,20,23,199,1,27,248,80,144,46,8,30,42,248,22,173,20,23,196,2,250, -22,96,250,22,160,2,23,199,2,23,206,2,9,250,22,160,2,23,199,1,11, -9,249,80,144,50,8,48,42,23,205,1,248,22,174,20,23,200,1,249,22,96, -247,22,163,16,249,80,144,48,8,48,42,23,203,1,248,22,174,20,23,198,1, -249,22,96,247,22,163,16,27,248,22,174,20,23,199,1,28,248,22,90,23,194, -2,9,28,248,22,83,23,194,2,28,248,22,151,2,248,22,173,20,23,195,2, -250,22,96,249,22,2,22,131,2,250,22,160,2,248,22,173,20,23,202,2,23, -205,2,9,250,22,160,2,248,22,173,20,23,200,2,11,9,249,80,144,47,8, -48,42,23,202,1,248,22,174,20,23,199,1,27,248,80,144,44,8,30,42,248, -22,173,20,23,196,2,250,22,96,250,22,160,2,23,199,2,23,204,2,9,250, -22,160,2,23,199,1,11,9,249,80,144,48,8,48,42,23,203,1,248,22,174, -20,23,200,1,249,22,96,247,22,163,16,249,80,144,46,8,48,42,23,201,1, -248,22,174,20,23,198,1,32,150,2,88,148,8,36,40,50,11,2,50,222,33, -151,2,28,248,22,90,248,22,84,23,195,2,248,22,92,27,248,22,173,20,195, -28,248,22,182,15,193,248,22,186,15,193,192,250,22,93,27,248,22,173,20,23, -198,2,28,248,22,182,15,193,248,22,186,15,193,192,2,67,248,2,150,2,248, -22,174,20,23,198,1,250,22,141,8,6,7,7,10,32,126,97,32,126,97,6, -1,1,32,23,196,1,249,22,141,8,6,6,6,10,32,32,32,126,97,248,22, -134,2,23,196,1,32,154,2,88,148,39,41,51,11,68,102,105,108,116,101,114, -222,33,155,2,28,248,22,90,23,195,2,9,28,248,23,194,2,248,22,83,23, -196,2,249,22,82,248,22,173,20,23,197,2,249,2,154,2,23,197,1,248,22, -174,20,23,199,1,249,2,154,2,23,195,1,248,22,174,20,23,197,1,28,248, -22,90,23,201,2,86,95,23,200,1,23,199,1,28,23,201,2,28,197,249,22, -136,16,202,199,200,86,95,23,201,1,23,198,1,27,28,248,22,90,23,198,2, -2,66,249,22,1,22,180,7,248,2,150,2,23,200,2,248,23,199,1,251,22, -141,8,6,70,70,99,111,108,108,101,99,116,105,111,110,32,110,111,116,32,102, -111,117,110,100,10,32,32,99,111,108,108,101,99,116,105,111,110,58,32,126,115, -10,32,32,105,110,32,99,111,108,108,101,99,116,105,111,110,32,100,105,114,101, -99,116,111,114,105,101,115,58,126,97,126,97,28,248,22,90,23,203,1,28,248, -22,182,15,23,202,2,248,22,186,15,23,202,1,23,201,1,250,22,180,7,28, -248,22,182,15,23,205,2,248,22,186,15,23,205,1,23,204,1,2,67,23,201, -2,249,22,1,22,180,7,249,22,2,32,0,88,148,8,36,40,48,11,9,222, -33,152,2,27,248,22,95,23,206,2,27,248,22,95,247,22,163,16,28,249,22, -133,4,249,22,188,3,23,198,2,23,197,2,44,23,206,2,249,22,96,247,22, -163,16,248,22,92,249,22,141,8,6,50,50,46,46,46,32,91,126,97,32,97, -100,100,105,116,105,111,110,97,108,32,108,105,110,107,101,100,32,97,110,100,32, -112,97,99,107,97,103,101,32,100,105,114,101,99,116,111,114,105,101,115,93,249, -22,188,3,23,201,1,23,200,1,28,249,22,5,22,133,2,23,202,2,250,22, -141,8,6,49,49,10,32,32,32,115,117,98,45,99,111,108,108,101,99,116,105, -111,110,58,32,126,115,10,32,32,105,110,32,112,97,114,101,110,116,32,100,105, -114,101,99,116,111,114,105,101,115,58,126,97,23,201,1,249,22,1,22,180,7, -249,22,2,32,0,88,148,8,36,40,48,11,9,222,33,153,2,249,2,154,2, -22,133,2,23,209,1,86,95,23,200,1,23,198,1,2,66,27,248,22,83,23, -202,2,27,28,248,22,182,15,23,195,2,249,22,136,16,23,196,1,23,199,2, -248,22,134,2,23,195,1,28,28,248,22,182,15,248,22,173,20,23,204,2,248, -22,131,16,23,194,2,10,27,250,22,1,22,136,16,23,197,1,23,202,2,28, -28,248,22,90,23,200,2,10,248,22,131,16,23,194,2,28,23,201,2,28,28, -250,80,144,45,8,32,42,195,203,204,10,27,28,248,22,182,15,202,248,22,186, -15,202,201,19,248,22,160,7,23,195,2,27,28,249,22,162,20,23,196,4,43, -28,249,22,163,7,6,4,4,46,114,107,116,249,22,179,7,23,199,2,249,22, -188,3,23,200,4,43,249,22,180,7,250,22,179,7,23,200,1,39,249,22,188, -3,23,201,4,43,6,3,3,46,115,115,86,94,23,195,1,11,86,94,23,195, -1,11,28,23,193,2,250,80,144,48,8,32,42,198,23,196,1,23,15,11,2, -28,200,249,22,136,16,194,202,192,26,8,80,144,50,8,49,42,204,205,206,23, -15,23,16,23,17,248,22,174,20,23,19,28,23,19,23,19,200,192,26,8,80, -144,50,8,49,42,204,205,206,23,15,23,16,23,17,248,22,174,20,23,19,23, -19,26,8,80,144,49,8,49,42,203,204,205,206,23,15,23,16,248,22,174,20, -23,18,23,18,90,144,41,11,89,146,41,39,11,249,80,144,43,8,31,42,23, -199,1,23,200,1,27,248,22,70,28,248,22,182,15,195,248,22,186,15,195,194, -27,27,247,22,164,16,28,248,22,90,23,194,2,9,28,248,22,83,23,194,2, -28,248,22,151,2,248,22,173,20,23,195,2,250,22,96,249,22,2,22,131,2, -250,22,160,2,248,22,173,20,23,202,2,23,203,2,9,250,22,160,2,248,22, -173,20,23,200,2,11,9,249,80,144,49,8,48,42,23,200,1,248,22,174,20, -23,199,1,27,248,80,144,46,8,30,42,248,22,173,20,23,196,2,250,22,96, -250,22,160,2,23,199,2,23,202,2,9,250,22,160,2,23,199,1,11,9,249, -80,144,50,8,48,42,23,201,1,248,22,174,20,23,200,1,249,22,96,247,22, -163,16,249,80,144,48,8,48,42,23,199,1,248,22,174,20,23,198,1,26,8, -80,144,51,8,49,42,200,202,203,205,23,16,23,17,200,11,32,158,2,88,148, -8,36,42,59,11,2,50,222,33,159,2,28,248,22,137,4,23,196,2,86,94, -23,195,1,19,248,22,151,8,23,195,2,19,248,22,151,8,23,196,2,249,22, -128,16,27,251,22,158,8,250,22,157,8,23,205,2,39,23,204,4,2,51,249, -22,157,8,23,204,1,23,202,4,2,68,28,249,22,158,20,248,22,151,8,23, +1,10,28,23,193,2,248,22,146,16,23,194,1,11,249,80,144,41,55,40,40, +80,144,41,8,41,42,27,20,13,144,80,144,40,46,40,26,35,80,144,8,36, +47,40,249,22,31,11,80,144,8,38,46,40,22,149,15,10,22,150,15,10,22, +151,15,10,22,152,15,11,22,153,15,11,22,157,15,10,22,156,15,11,22,158, +15,10,22,155,15,10,22,159,15,10,22,154,15,11,22,160,15,10,22,161,15, +10,22,162,15,10,22,163,15,11,22,164,15,10,22,147,15,11,247,22,152,6, +28,248,22,151,2,193,192,11,27,28,23,195,2,249,22,136,16,23,197,1,6, +11,11,99,111,110,102,105,103,46,114,107,116,100,86,94,23,195,1,11,27,28, +23,194,2,28,248,22,130,16,23,195,2,249,22,144,6,23,196,1,80,144,43, +8,42,42,11,11,28,192,192,21,17,1,0,250,22,160,2,23,196,1,2,59, +247,22,175,8,250,22,160,2,195,2,59,247,22,175,8,28,248,22,157,7,23, +195,2,27,248,22,190,15,23,196,1,28,248,22,143,16,23,194,2,192,249,22, +144,16,23,195,1,27,247,80,144,43,54,42,28,23,193,2,192,86,94,23,193, +1,247,22,160,16,28,248,22,146,8,23,195,2,27,248,22,191,15,23,196,1, +28,248,22,143,16,23,194,2,192,249,22,144,16,23,195,1,27,247,80,144,43, +54,42,28,23,193,2,192,86,94,23,193,1,247,22,160,16,28,248,22,182,15, +23,195,2,28,248,22,143,16,23,195,2,193,249,22,144,16,23,196,1,27,247, +80,144,42,54,42,28,23,193,2,192,86,94,23,193,1,247,22,160,16,193,27, +248,22,159,16,2,55,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1, +28,248,22,142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16, +249,22,144,16,250,80,144,49,43,42,248,22,159,16,2,56,11,11,248,22,159, +16,2,57,86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199, +1,23,196,1,27,250,80,144,44,43,42,248,22,159,16,2,56,23,197,1,10, +28,23,193,2,248,22,146,16,23,194,1,11,28,248,22,143,16,23,195,2,193, +249,22,144,16,23,196,1,27,249,80,144,44,55,40,39,80,144,44,8,43,42, +28,23,193,2,192,86,94,23,193,1,247,22,160,16,28,248,22,143,16,23,195, +2,248,22,146,16,23,195,1,28,248,22,142,16,23,195,2,90,144,42,11,89, +146,42,39,11,248,22,139,16,249,22,144,16,250,80,144,48,43,42,248,22,159, +16,2,56,11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1,248,22, +146,16,249,22,144,16,23,200,1,23,196,1,27,250,80,144,43,43,42,248,22, +159,16,2,56,23,198,1,10,28,23,193,2,248,22,146,16,23,194,1,11,28, +248,22,90,23,196,2,9,28,248,22,83,23,196,2,249,22,82,27,248,22,173, +20,23,199,2,28,248,22,157,7,23,194,2,27,248,22,190,15,23,195,1,28, +248,22,143,16,23,194,2,192,249,22,144,16,23,195,1,27,247,80,144,46,54, +42,28,23,193,2,192,86,94,23,193,1,247,22,160,16,28,248,22,146,8,23, +194,2,27,248,22,191,15,23,195,1,28,248,22,143,16,23,194,2,192,249,22, +144,16,23,195,1,27,247,80,144,46,54,42,28,23,193,2,192,86,94,23,193, +1,247,22,160,16,28,248,22,182,15,23,194,2,28,248,22,143,16,23,194,2, +192,249,22,144,16,23,195,1,27,247,80,144,45,54,42,28,23,193,2,192,86, +94,23,193,1,247,22,160,16,192,27,248,22,174,20,23,199,1,28,248,22,90, +23,194,2,9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248, +22,173,20,23,197,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2, +9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20, +23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249, +22,96,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198, +1,249,22,96,23,199,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194, +2,9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173, +20,23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1, +249,22,96,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23, +198,1,249,22,96,23,196,2,27,248,22,174,20,23,199,1,28,248,22,90,23, +194,2,9,28,248,22,83,23,194,2,249,22,82,248,80,144,45,60,42,248,22, +173,20,23,197,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2,9, +28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20,23, +197,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249,22, +96,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1, +249,22,96,23,199,2,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2, +9,28,248,22,83,23,194,2,249,22,82,248,80,144,48,60,42,248,22,173,20, +23,197,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198,1,249, +22,96,23,202,2,249,80,144,49,8,44,42,23,204,1,248,22,174,20,23,198, +1,27,250,22,160,2,23,198,1,23,199,1,11,28,192,249,80,144,42,8,44, +42,198,194,196,27,248,22,159,16,2,58,28,248,22,143,16,23,194,2,248,22, +146,16,23,194,1,28,248,22,142,16,23,194,2,90,144,42,11,89,146,42,39, +11,248,22,139,16,249,22,144,16,250,80,144,49,43,42,248,22,159,16,2,56, +11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1,248,22,146,16,249, +22,144,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,159,16,2, +56,23,197,1,10,28,23,193,2,248,22,146,16,23,194,1,11,27,248,80,144, +41,58,42,249,80,144,43,55,40,40,80,144,43,8,45,42,27,27,250,22,160, +2,23,198,2,72,108,105,110,107,115,45,102,105,108,101,11,27,28,23,194,2, +23,194,1,86,94,23,194,1,249,22,136,16,27,250,22,160,2,23,202,2,71, +115,104,97,114,101,45,100,105,114,11,28,192,192,249,22,136,16,64,117,112,6, +5,5,115,104,97,114,101,2,60,28,248,22,157,7,23,194,2,27,248,22,190, +15,23,195,1,28,248,22,143,16,23,194,2,192,249,22,144,16,23,195,1,27, +247,80,144,47,54,42,28,23,193,2,192,86,94,23,193,1,247,22,160,16,28, +248,22,146,8,23,194,2,27,248,22,191,15,23,195,1,28,248,22,143,16,23, +194,2,192,249,22,144,16,23,195,1,27,247,80,144,47,54,42,28,23,193,2, +192,86,94,23,193,1,247,22,160,16,28,248,22,182,15,23,194,2,28,248,22, +143,16,23,194,2,192,249,22,144,16,23,195,1,27,247,80,144,46,54,42,28, +23,193,2,192,86,94,23,193,1,247,22,160,16,192,250,22,96,248,22,92,11, +28,247,22,167,16,28,247,22,168,16,248,22,92,250,22,136,16,248,22,159,16, +2,61,250,22,160,2,23,204,2,2,59,247,22,175,8,2,60,9,9,28,247, +22,168,16,250,80,144,47,8,23,42,23,200,1,1,18,108,105,110,107,115,45, +115,101,97,114,99,104,45,102,105,108,101,115,248,22,92,23,200,1,9,248,22, +178,13,23,194,1,249,22,14,80,144,41,8,26,41,28,248,22,134,13,23,197, +2,86,94,23,196,1,32,0,88,148,8,36,39,44,11,9,222,11,20,20,94, +88,148,8,36,39,46,11,9,223,3,33,124,23,196,1,32,126,88,148,39,40, +59,11,2,50,222,33,127,90,144,42,11,89,146,42,39,11,248,22,139,16,23, +197,1,86,95,23,195,1,23,194,1,28,248,22,182,15,23,194,2,28,248,22, +131,16,23,194,2,249,22,149,6,23,195,1,32,0,88,148,8,36,39,44,11, +9,222,11,90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95, +23,195,1,23,194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23,194, +2,249,22,149,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90, +144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1,23, +194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22,149, +6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11,89, +146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1,23,194,1,28,248, +22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22,149,6,23,195,1, +32,0,88,148,8,36,39,44,11,9,222,11,248,2,126,23,194,1,11,11,11, +11,32,128,2,88,148,8,36,40,58,11,2,50,222,33,129,2,27,249,22,167, +6,8,128,128,23,196,2,28,248,22,152,7,23,194,2,9,249,22,82,23,195, +1,27,249,22,167,6,8,128,128,23,199,2,28,248,22,152,7,23,194,2,9, +249,22,82,23,195,1,27,249,22,167,6,8,128,128,23,202,2,28,248,22,152, +7,23,194,2,9,249,22,82,23,195,1,27,249,22,167,6,8,128,128,23,205, +2,28,248,22,152,7,23,194,2,9,249,22,82,23,195,1,248,2,128,2,23, +206,1,27,249,22,167,6,8,128,128,23,196,2,28,248,22,146,8,23,194,2, +28,249,22,162,20,248,22,151,8,23,196,2,8,128,128,249,22,1,22,158,8, +249,22,82,23,197,1,27,249,22,167,6,8,128,128,23,201,2,28,248,22,152, +7,23,194,2,9,249,22,82,23,195,1,27,249,22,167,6,8,128,128,23,204, +2,28,248,22,152,7,23,194,2,9,249,22,82,23,195,1,27,249,22,167,6, +8,128,128,23,207,2,28,248,22,152,7,23,194,2,9,249,22,82,23,195,1, +27,249,22,167,6,8,128,128,23,210,2,28,248,22,152,7,23,194,2,9,249, +22,82,23,195,1,248,2,128,2,23,211,1,192,192,248,22,137,6,23,194,1, +20,13,144,80,144,40,8,28,40,80,144,40,8,46,42,27,28,249,22,129,9, +248,22,184,8,2,62,41,90,144,42,11,89,146,42,39,11,248,22,139,16,23, +198,2,86,95,23,195,1,23,194,1,28,248,22,182,15,23,194,2,28,248,22, +131,16,23,194,2,249,22,149,6,23,195,1,32,0,88,148,8,36,39,44,11, +9,222,11,90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95, +23,195,1,23,194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23,194, +2,249,22,149,6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90, +144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1,23, +194,1,28,248,22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22,149, +6,23,195,1,32,0,88,148,8,36,39,44,11,9,222,11,90,144,42,11,89, +146,42,39,11,248,22,139,16,23,197,1,86,95,23,195,1,23,194,1,28,248, +22,182,15,23,194,2,28,248,22,131,16,23,194,2,249,22,149,6,23,195,1, +32,0,88,148,8,36,39,44,11,9,222,11,248,2,126,23,194,1,11,11,11, +11,11,28,248,22,130,16,23,195,2,27,28,249,22,129,9,248,22,184,8,2, +62,41,249,22,149,6,23,197,2,32,0,88,148,8,36,39,44,11,9,222,11, +11,86,94,28,23,194,2,248,22,151,6,23,195,1,86,94,23,194,1,12,249, +22,82,27,248,22,128,6,23,199,1,250,22,44,22,35,88,148,39,39,8,24, +11,9,223,3,33,130,2,20,20,94,88,148,8,36,39,46,11,9,223,3,33, +131,2,23,196,1,194,249,22,82,11,194,28,28,23,195,2,28,248,22,84,23, +196,2,248,22,171,9,249,22,180,14,39,248,22,174,20,23,199,2,11,11,194, +86,94,23,195,1,249,22,12,20,20,94,88,148,8,32,39,61,16,4,39,8, +128,80,8,240,0,64,0,0,39,9,224,2,3,33,132,2,23,196,1,80,144, +41,8,26,41,27,248,22,171,9,194,28,192,192,248,22,171,9,248,22,83,195, +86,95,28,248,22,155,12,23,198,2,27,247,22,147,12,28,249,22,137,12,23, +195,2,2,63,251,22,143,12,23,197,1,2,63,250,22,141,8,6,42,42,101, +114,114,111,114,32,114,101,97,100,105,110,103,32,99,111,108,108,101,99,116,105, +111,110,32,108,105,110,107,115,32,102,105,108,101,32,126,115,58,32,126,97,23, +201,2,248,22,151,12,23,206,2,247,22,27,12,12,28,23,195,2,250,22,158, +2,80,144,45,8,25,41,23,196,1,249,22,82,23,200,1,21,17,0,0,86, +95,23,195,1,23,193,1,12,28,248,22,155,12,23,198,2,86,94,23,197,1, +248,23,195,1,247,22,140,2,196,88,148,39,40,58,8,240,0,0,0,2,9, +226,0,3,2,1,33,135,2,20,20,94,248,22,152,6,23,194,2,28,248,22, +152,7,248,22,152,6,23,195,1,12,248,22,182,11,6,30,30,101,120,112,101, +99,116,101,100,32,97,32,115,105,110,103,108,101,32,83,45,101,120,112,114,101, +115,115,105,111,110,248,22,137,6,23,194,1,28,248,22,91,193,28,28,249,22, +132,4,41,248,22,95,195,10,249,22,132,4,42,248,22,95,195,28,28,248,22, +157,7,248,22,83,194,10,28,249,22,173,9,2,64,248,22,83,195,10,249,22, +173,9,2,65,248,22,83,195,28,27,248,22,104,194,28,248,22,182,15,193,10, +28,248,22,157,7,193,28,248,22,141,16,193,10,248,22,142,16,193,11,27,248, +22,90,248,22,106,195,28,192,192,248,22,188,16,248,22,113,195,11,11,11,11, +28,248,22,131,16,249,22,136,16,23,197,2,23,198,2,27,248,22,70,248,22, +186,15,23,198,1,250,22,158,2,23,197,2,23,196,2,249,22,82,23,200,1, +250,22,160,2,23,202,1,23,201,1,9,12,250,22,158,2,23,196,1,23,198, +1,249,22,82,23,199,1,23,201,1,28,28,248,22,90,248,22,106,23,197,2, +10,249,22,179,16,248,22,113,23,198,2,247,22,175,8,27,248,22,146,16,249, +22,144,16,248,22,104,23,200,2,23,198,1,28,249,22,173,9,248,22,173,20, +23,199,2,2,65,86,94,23,196,1,249,22,3,20,20,94,88,148,8,36,40, +56,11,9,224,2,3,33,140,2,23,196,1,248,22,149,16,23,196,1,28,249, +22,173,9,248,22,173,20,23,199,2,2,64,86,94,23,196,1,86,94,28,250, +22,160,2,23,197,2,11,11,12,250,22,158,2,23,197,2,11,9,249,22,166, +2,23,196,2,20,20,95,88,148,8,36,41,53,11,9,224,2,3,33,141,2, +23,196,1,23,195,1,27,248,22,70,248,22,173,20,23,199,1,250,22,158,2, +23,198,2,23,196,2,249,22,82,248,22,131,2,23,200,1,250,22,160,2,23, +203,1,23,201,1,9,12,250,22,158,2,23,196,1,23,197,1,248,22,97,23, +199,1,27,28,28,23,195,2,248,22,171,9,248,22,83,23,197,2,10,9,27, +249,22,128,6,23,197,2,68,98,105,110,97,114,121,250,22,44,22,35,88,148, +8,36,39,47,11,9,223,3,33,137,2,20,20,94,88,148,8,36,39,46,11, +9,223,3,33,138,2,23,196,1,86,94,28,28,248,22,91,23,194,2,249,22, +4,32,0,88,148,8,36,40,48,11,9,222,33,139,2,23,195,2,11,12,248, +22,182,11,6,18,18,105,108,108,45,102,111,114,109,101,100,32,99,111,110,116, +101,110,116,27,247,22,140,2,27,90,144,42,11,89,146,42,39,11,248,22,139, +16,23,200,2,192,86,96,249,22,3,20,20,94,88,148,8,36,40,57,11,9, +224,2,3,33,142,2,23,195,1,23,197,1,249,22,166,2,195,88,148,8,36, +41,51,11,9,223,3,33,143,2,250,22,158,2,80,144,47,8,25,41,23,199, +1,249,22,82,23,202,1,198,193,20,13,144,80,144,40,8,28,40,250,80,144, +43,8,47,42,23,196,2,23,198,2,11,27,250,22,160,2,80,144,44,8,25, +41,23,197,2,21,143,11,17,0,0,27,248,22,83,23,195,2,27,249,80,144, +45,8,27,42,23,198,2,23,196,2,28,249,22,175,9,23,195,2,23,196,1, +248,22,174,20,195,86,94,23,195,1,20,13,144,80,144,43,8,28,40,250,80, +144,46,8,47,42,23,199,2,23,201,1,23,196,2,27,20,20,95,88,148,8, +36,39,55,8,240,0,0,0,2,9,225,5,1,4,33,144,2,23,197,1,23, +194,1,28,249,22,48,23,195,2,39,20,13,144,80,144,44,46,40,26,35,80, +144,8,40,47,40,249,22,31,11,80,144,8,42,46,40,22,149,15,10,22,150, +15,10,22,151,15,10,22,152,15,11,22,153,15,11,22,157,15,10,22,156,15, +11,22,158,15,10,22,155,15,10,22,159,15,10,22,154,15,11,22,160,15,10, +22,161,15,10,22,162,15,10,22,163,15,11,22,164,15,10,22,147,15,11,247, +23,193,1,250,22,186,11,2,9,2,52,23,196,1,248,22,8,20,20,94,88, +148,39,40,8,49,16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,9, +224,1,2,33,145,2,23,195,1,0,7,35,114,120,34,47,43,34,28,248,22, +157,7,23,195,2,27,249,22,177,16,2,147,2,23,197,2,28,23,193,2,28, +249,22,132,4,248,22,103,23,196,2,248,22,186,3,248,22,160,7,23,199,2, +249,22,7,250,22,179,7,23,200,1,39,248,22,103,23,199,1,23,198,1,249, +22,7,250,22,179,7,23,200,2,39,248,22,103,23,199,2,249,22,82,249,22, +179,7,23,201,1,248,22,105,23,200,1,23,200,1,86,94,23,193,1,249,22, +7,23,197,1,23,198,1,90,144,42,11,89,146,42,39,11,248,22,139,16,23, +198,1,86,94,23,195,1,28,249,22,173,9,23,195,2,2,49,86,94,23,193, +1,249,22,7,23,196,1,23,200,1,27,249,22,82,23,197,1,23,201,1,28, +248,22,157,7,23,195,2,27,249,22,177,16,2,147,2,23,197,2,28,23,193, +2,28,249,22,132,4,248,22,103,23,196,2,248,22,186,3,248,22,160,7,23, +199,2,249,22,7,250,22,179,7,23,200,1,39,248,22,103,23,199,1,23,196, +1,249,22,7,250,22,179,7,23,200,2,39,248,22,103,23,199,2,249,22,82, +249,22,179,7,23,201,1,248,22,105,23,200,1,23,198,1,86,94,23,193,1, +249,22,7,23,197,1,23,196,1,90,144,42,11,89,146,42,39,11,248,22,139, +16,23,198,1,86,94,23,195,1,28,249,22,173,9,23,195,2,2,49,86,94, +23,193,1,249,22,7,23,196,1,23,198,1,249,80,144,48,8,31,42,194,249, +22,82,197,199,28,248,22,90,23,196,2,9,28,248,22,83,23,196,2,28,248, +22,151,2,248,22,173,20,23,197,2,250,22,96,249,22,2,22,131,2,250,22, +160,2,248,22,173,20,23,204,2,23,202,2,9,250,22,160,2,248,22,173,20, +23,202,2,11,9,27,248,22,174,20,23,200,1,28,248,22,90,23,194,2,9, +28,248,22,83,23,194,2,28,248,22,151,2,248,22,173,20,23,195,2,250,22, +96,249,22,2,22,131,2,250,22,160,2,248,22,173,20,23,202,2,23,206,2, +9,250,22,160,2,248,22,173,20,23,200,2,11,9,249,80,144,48,8,48,42, +23,203,1,248,22,174,20,23,199,1,27,248,80,144,45,8,30,42,248,22,173, +20,23,196,2,250,22,96,250,22,160,2,23,199,2,23,205,2,9,250,22,160, +2,23,199,1,11,9,249,80,144,49,8,48,42,23,204,1,248,22,174,20,23, +200,1,249,22,96,247,22,163,16,249,80,144,47,8,48,42,23,202,1,248,22, +174,20,23,198,1,27,248,80,144,41,8,30,42,248,22,173,20,23,198,2,250, +22,96,250,22,160,2,23,199,2,23,201,2,9,250,22,160,2,23,199,1,11, +9,27,248,22,174,20,23,201,1,28,248,22,90,23,194,2,9,28,248,22,83, +23,194,2,28,248,22,151,2,248,22,173,20,23,195,2,250,22,96,249,22,2, +22,131,2,250,22,160,2,248,22,173,20,23,202,2,23,207,2,9,250,22,160, +2,248,22,173,20,23,200,2,11,9,249,80,144,49,8,48,42,23,204,1,248, +22,174,20,23,199,1,27,248,80,144,46,8,30,42,248,22,173,20,23,196,2, +250,22,96,250,22,160,2,23,199,2,23,206,2,9,250,22,160,2,23,199,1, +11,9,249,80,144,50,8,48,42,23,205,1,248,22,174,20,23,200,1,249,22, +96,247,22,163,16,249,80,144,48,8,48,42,23,203,1,248,22,174,20,23,198, +1,249,22,96,247,22,163,16,27,248,22,174,20,23,199,1,28,248,22,90,23, +194,2,9,28,248,22,83,23,194,2,28,248,22,151,2,248,22,173,20,23,195, +2,250,22,96,249,22,2,22,131,2,250,22,160,2,248,22,173,20,23,202,2, +23,205,2,9,250,22,160,2,248,22,173,20,23,200,2,11,9,249,80,144,47, +8,48,42,23,202,1,248,22,174,20,23,199,1,27,248,80,144,44,8,30,42, +248,22,173,20,23,196,2,250,22,96,250,22,160,2,23,199,2,23,204,2,9, +250,22,160,2,23,199,1,11,9,249,80,144,48,8,48,42,23,203,1,248,22, +174,20,23,200,1,249,22,96,247,22,163,16,249,80,144,46,8,48,42,23,201, +1,248,22,174,20,23,198,1,32,150,2,88,148,8,36,41,52,11,2,50,222, +33,151,2,28,248,22,90,248,22,84,23,196,2,248,22,92,248,23,195,1,248, +22,173,20,23,197,1,250,22,93,248,23,197,2,248,22,173,20,23,199,2,2, +67,249,2,150,2,23,198,1,248,22,174,20,23,200,1,250,22,141,8,6,7, +7,10,32,126,97,32,126,97,6,1,1,32,23,196,1,249,22,141,8,6,6, +6,10,32,32,32,126,97,248,22,134,2,23,196,1,32,154,2,88,148,39,41, +51,11,68,102,105,108,116,101,114,222,33,155,2,28,248,22,90,23,195,2,9, +28,248,23,194,2,248,22,83,23,196,2,249,22,82,248,22,173,20,23,197,2, +249,2,154,2,23,197,1,248,22,174,20,23,199,1,249,2,154,2,23,195,1, +248,22,174,20,23,197,1,28,248,22,90,23,202,2,86,95,23,201,1,23,194, +1,28,23,202,2,28,194,249,22,136,16,203,196,201,86,95,23,202,1,23,195, +1,27,28,248,22,90,23,199,2,2,66,249,22,1,22,180,7,249,2,150,2, +23,205,2,23,202,2,248,23,198,1,251,22,141,8,6,70,70,99,111,108,108, +101,99,116,105,111,110,32,110,111,116,32,102,111,117,110,100,10,32,32,99,111, +108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105,110,32,99,111,108, +108,101,99,116,105,111,110,32,100,105,114,101,99,116,111,114,105,101,115,58,126, +97,126,97,28,248,22,90,23,204,1,248,23,207,1,23,205,1,250,22,180,7, +248,23,210,1,23,208,1,2,67,23,201,2,249,22,1,22,180,7,249,22,2, +32,0,88,148,8,36,40,48,11,9,222,33,152,2,27,248,22,95,23,211,2, +27,248,22,95,247,22,163,16,28,249,22,133,4,249,22,188,3,23,198,2,23, +197,2,44,23,211,2,249,22,96,247,22,163,16,248,22,92,249,22,141,8,6, +50,50,46,46,46,32,91,126,97,32,97,100,100,105,116,105,111,110,97,108,32, +108,105,110,107,101,100,32,97,110,100,32,112,97,99,107,97,103,101,32,100,105, +114,101,99,116,111,114,105,101,115,93,249,22,188,3,23,201,1,23,200,1,28, +249,22,5,22,133,2,23,207,2,250,22,141,8,6,49,49,10,32,32,32,115, +117,98,45,99,111,108,108,101,99,116,105,111,110,58,32,126,115,10,32,32,105, +110,32,112,97,114,101,110,116,32,100,105,114,101,99,116,111,114,105,101,115,58, +126,97,23,201,1,249,22,1,22,180,7,249,22,2,32,0,88,148,8,36,40, +48,11,9,222,33,153,2,249,2,154,2,22,133,2,23,214,1,86,95,23,205, +1,23,198,1,2,66,27,248,22,83,23,203,2,27,28,248,22,182,15,23,195, +2,249,22,136,16,23,196,1,23,202,2,248,22,134,2,23,195,1,28,28,248, +22,182,15,248,22,173,20,23,205,2,248,22,131,16,23,194,2,10,27,250,22, +1,22,136,16,23,197,1,23,203,2,28,28,248,22,90,23,201,2,10,248,22, +131,16,23,194,2,28,23,198,2,28,28,250,80,144,45,8,32,42,195,200,199, +10,27,28,248,22,182,15,199,248,22,186,15,199,198,19,248,22,160,7,23,195, +2,27,28,249,22,162,20,23,196,4,43,28,249,22,163,7,6,4,4,46,114, +107,116,249,22,179,7,23,199,2,249,22,188,3,23,200,4,43,249,22,180,7, +250,22,179,7,23,200,1,39,249,22,188,3,23,201,4,43,6,3,3,46,115, +115,86,94,23,195,1,11,86,94,23,195,1,11,28,23,193,2,250,80,144,48, +8,32,42,198,23,196,1,202,11,2,28,197,249,22,136,16,194,199,192,26,9, +80,144,51,8,49,42,205,206,23,15,23,16,23,17,23,18,23,19,248,22,174, +20,23,21,28,23,21,23,21,201,192,26,9,80,144,51,8,49,42,205,206,23, +15,23,16,23,17,23,18,23,19,248,22,174,20,23,21,23,21,26,9,80,144, +50,8,49,42,204,205,206,23,15,23,16,23,17,23,18,248,22,174,20,23,20, +23,20,28,248,22,182,15,193,248,22,186,15,193,192,90,144,41,11,89,146,41, +39,11,249,80,144,43,8,31,42,23,199,1,23,200,1,27,248,22,70,28,248, +22,182,15,195,248,22,186,15,195,194,27,27,247,22,164,16,28,248,22,90,23, +194,2,9,28,248,22,83,23,194,2,28,248,22,151,2,248,22,173,20,23,195, +2,250,22,96,249,22,2,22,131,2,250,22,160,2,248,22,173,20,23,202,2, +23,203,2,9,250,22,160,2,248,22,173,20,23,200,2,11,9,249,80,144,49, +8,48,42,23,200,1,248,22,174,20,23,199,1,27,248,80,144,46,8,30,42, +248,22,173,20,23,196,2,250,22,96,250,22,160,2,23,199,2,23,202,2,9, +250,22,160,2,23,199,1,11,9,249,80,144,50,8,48,42,23,201,1,248,22, +174,20,23,200,1,249,22,96,247,22,163,16,249,80,144,48,8,48,42,23,199, +1,248,22,174,20,23,198,1,27,32,0,88,148,8,36,40,46,11,71,116,111, +45,115,116,114,105,110,103,222,33,157,2,26,9,80,144,53,8,49,42,23,19, +23,18,23,15,205,204,202,201,202,11,32,159,2,88,148,8,36,42,59,11,2, +50,222,33,160,2,28,248,22,137,4,23,196,2,86,94,23,195,1,19,248,22, +151,8,23,196,2,19,248,22,151,8,23,197,2,249,22,128,16,27,251,22,158, +8,250,22,157,8,23,206,2,39,23,204,4,2,51,249,22,157,8,23,205,1, +23,202,4,2,68,28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23, +193,1,251,22,188,11,2,37,2,69,2,70,201,192,28,248,22,183,15,197,248, +22,184,15,197,247,22,185,15,2,2,27,248,22,186,3,23,197,1,28,249,22, +173,9,8,46,249,22,152,8,23,199,2,23,197,2,27,248,22,185,3,23,195, +2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,206,2,39,23,204,1, +2,71,249,22,157,8,23,205,1,23,202,1,2,68,28,249,22,158,20,248,22, +151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70, +201,192,28,248,22,183,15,197,248,22,184,15,197,247,22,185,15,250,2,159,2, +196,197,195,248,22,130,16,27,250,22,136,16,23,198,1,23,202,1,23,199,1, +28,249,22,173,9,23,199,2,66,115,97,109,101,192,28,248,22,141,16,23,198, +2,249,22,136,16,194,198,249,80,144,46,42,42,23,195,1,23,199,1,249,22, +5,20,20,96,88,148,39,40,54,47,9,226,5,6,3,2,33,161,2,23,195, +1,23,196,1,23,199,1,23,197,1,27,248,22,130,16,249,22,136,16,23,198, +2,23,199,2,28,23,193,2,192,86,94,23,193,1,28,23,197,1,27,90,144, +41,11,89,146,41,39,11,250,80,144,46,8,34,42,23,202,2,2,68,2,37, +27,248,22,188,15,23,196,1,27,250,2,159,2,23,204,1,23,197,2,248,22, +151,8,23,198,1,28,248,22,183,15,195,249,22,136,16,196,194,192,27,247,22, +165,16,249,22,5,20,20,96,88,148,39,40,51,47,9,226,5,2,3,6,33, +162,2,23,199,1,23,196,1,23,195,1,247,22,166,16,11,86,95,28,28,248, +22,183,15,23,194,2,10,28,248,22,182,15,23,194,2,10,28,248,22,157,7, +23,194,2,28,248,22,141,16,23,194,2,10,248,22,142,16,23,194,2,11,12, +252,22,186,11,23,200,2,2,42,39,23,198,2,23,199,2,28,28,248,22,157, +7,23,195,2,10,248,22,146,8,23,195,2,86,94,23,194,1,12,252,22,186, +11,23,200,2,2,72,40,23,198,2,23,199,1,90,144,42,11,89,146,42,39, +11,248,22,139,16,23,197,2,86,94,23,195,1,86,94,28,23,193,2,86,95, +23,198,1,23,196,1,12,250,22,189,11,23,201,1,2,73,23,199,1,249,22, +7,23,195,1,23,196,1,32,165,2,88,148,8,36,46,61,11,2,74,222,33, +166,2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,206,2,39,23,207, +1,23,205,1,249,23,204,1,23,205,1,23,208,1,28,248,22,157,7,23,201, +2,249,22,172,8,23,202,1,8,63,23,200,1,28,249,22,158,20,248,22,151, +8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,200, +192,28,248,22,183,15,196,248,22,184,15,196,247,22,185,15,32,167,2,88,148, +8,36,45,8,24,11,2,50,222,33,168,2,28,248,22,137,4,23,199,2,86, +95,23,198,1,23,196,1,19,248,22,151,8,23,199,2,19,248,22,151,8,23, +200,2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,209,2,39,23,204, +4,2,51,249,23,206,1,23,208,1,23,202,4,28,248,22,157,7,23,203,2, +249,22,172,8,23,204,1,8,63,23,202,1,28,249,22,158,20,248,22,151,8, +23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,202,192, +28,248,22,183,15,198,248,22,184,15,198,247,22,185,15,2,2,27,248,22,186, +3,23,200,1,28,249,22,173,9,8,46,249,22,152,8,23,202,2,23,197,2, +27,248,22,185,3,23,195,2,249,22,128,16,27,251,22,158,8,250,22,157,8, +23,209,2,39,23,204,1,23,205,1,249,23,206,1,23,208,1,23,202,1,28, +248,22,157,7,23,203,2,249,22,172,8,23,204,1,8,63,23,202,1,28,249, +22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2, +37,2,69,2,70,202,192,28,248,22,183,15,198,248,22,184,15,198,247,22,185, +15,28,248,22,137,4,23,194,2,86,95,23,197,1,23,193,1,19,248,22,151, +8,23,200,2,19,248,22,151,8,23,201,2,249,22,128,16,27,251,22,158,8, +250,22,157,8,23,210,2,39,23,204,4,2,51,249,23,207,1,23,209,1,23, +202,4,28,248,22,157,7,23,204,2,249,22,172,8,23,205,1,8,63,23,203, +1,28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22, +188,11,2,37,2,69,2,70,203,192,28,248,22,183,15,199,248,22,184,15,199, +247,22,185,15,2,2,27,248,22,186,3,23,195,1,28,249,22,173,9,8,46, +249,22,152,8,23,203,2,23,197,2,27,248,22,185,3,23,195,2,249,22,128, +16,27,251,22,158,8,250,22,157,8,23,210,2,39,23,204,1,23,206,1,249, +23,207,1,23,209,1,23,202,1,28,248,22,157,7,23,204,2,249,22,172,8, +23,205,1,8,63,23,203,1,28,249,22,158,20,248,22,151,8,23,196,2,39, +86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,203,192,28,248,22,183, +15,199,248,22,184,15,199,247,22,185,15,28,248,22,137,4,193,254,2,165,2, +201,202,203,205,248,22,151,8,206,2,51,248,22,151,8,206,27,248,22,186,3, +194,28,249,22,173,9,8,46,249,22,152,8,203,196,254,2,165,2,202,203,204, +206,199,205,248,22,185,3,200,253,2,167,2,201,202,203,204,205,198,90,144,41, +11,89,146,41,39,11,86,95,28,28,248,22,183,15,23,199,2,10,28,248,22, +182,15,23,199,2,10,28,248,22,157,7,23,199,2,28,248,22,141,16,23,199, +2,10,248,22,142,16,23,199,2,11,12,252,22,186,11,23,200,2,2,42,39, +23,203,2,23,204,2,28,28,248,22,157,7,23,200,2,10,248,22,146,8,23, +200,2,12,252,22,186,11,23,200,2,2,72,40,23,203,2,23,204,2,90,144, +42,11,89,146,42,39,11,248,22,139,16,23,202,2,86,94,23,195,1,86,94, +28,192,12,250,22,189,11,23,201,1,2,73,23,204,2,249,22,7,194,195,27, +248,22,188,15,23,196,1,27,19,248,22,151,8,23,196,2,28,249,22,158,20, +23,195,4,39,86,94,23,199,1,19,248,22,151,8,23,197,2,19,248,22,151, +8,23,198,2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,207,2,39, +23,204,4,2,51,249,23,211,1,23,206,1,23,202,4,28,248,22,157,7,23, +212,2,249,22,172,8,23,213,1,8,63,23,211,1,28,249,22,158,20,248,22, +151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70, +23,17,192,28,248,22,183,15,205,248,22,184,15,205,247,22,185,15,2,2,27, +248,22,186,3,23,195,4,28,249,22,173,9,8,46,249,22,152,8,23,200,2, +23,197,2,27,248,22,185,3,23,195,2,249,22,128,16,27,251,22,158,8,250, +22,157,8,23,207,2,39,23,204,1,23,208,1,249,23,211,1,23,206,1,23, +202,1,28,248,22,157,7,23,212,2,249,22,172,8,23,213,1,8,63,23,211, +1,28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22, +188,11,2,37,2,69,2,70,23,17,192,28,248,22,183,15,205,248,22,184,15, +205,247,22,185,15,28,248,22,137,4,23,194,2,86,95,23,200,1,23,193,1, +254,2,165,2,23,210,1,23,209,1,23,208,1,23,203,2,248,22,151,8,23, +204,2,2,51,248,22,151,8,23,204,1,27,248,22,186,3,23,195,1,28,249, +22,173,9,8,46,249,22,152,8,23,201,2,23,197,2,254,2,165,2,23,211, +1,23,210,1,23,209,1,23,204,1,23,200,2,23,208,1,248,22,185,3,23, +201,1,253,2,167,2,23,210,1,23,209,1,23,208,1,23,207,1,23,203,1, +23,199,1,2,28,248,22,183,15,195,249,22,136,16,196,194,192,32,170,2,88, +148,8,36,43,60,11,2,50,222,33,173,2,32,171,2,88,148,8,36,45,60, +11,2,74,222,33,172,2,86,94,23,198,1,249,22,128,16,27,251,22,158,8, +250,22,157,8,23,205,1,39,23,206,1,23,204,1,2,51,28,248,22,157,7, +23,201,2,249,22,172,8,23,202,1,8,63,23,200,1,28,249,22,158,20,248, +22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2, +70,200,192,28,248,22,183,15,196,248,22,184,15,196,247,22,185,15,28,248,22, +137,4,23,197,2,86,94,23,196,1,19,248,22,151,8,23,197,2,35,248,22, +151,8,23,198,2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,207,1, +39,23,204,4,2,51,2,51,28,248,22,157,7,23,203,2,249,22,172,8,23, +204,1,8,63,23,202,1,28,249,22,158,20,248,22,151,8,23,196,2,39,86, +94,23,193,1,251,22,188,11,2,37,2,69,2,70,202,192,28,248,22,183,15, +198,248,22,184,15,198,247,22,185,15,2,27,248,22,186,3,23,198,1,28,249, +22,173,9,8,46,249,22,152,8,23,200,2,23,197,2,249,22,128,16,27,251, +22,158,8,250,22,157,8,23,206,1,39,23,203,1,2,51,2,51,28,248,22, +157,7,23,202,2,249,22,172,8,23,203,1,8,63,23,201,1,28,249,22,158, +20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2, +69,2,70,201,192,28,248,22,183,15,197,248,22,184,15,197,247,22,185,15,28, +248,22,137,4,193,253,2,171,2,199,200,201,248,22,151,8,202,2,51,248,22, +151,8,202,27,248,22,186,3,194,28,249,22,173,9,8,46,249,22,152,8,200, +196,253,2,171,2,200,201,202,198,2,51,248,22,185,3,199,251,2,170,2,198, +199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,183,15,23, +196,2,10,28,248,22,182,15,23,196,2,10,28,248,22,157,7,23,196,2,28, +248,22,141,16,23,196,2,10,248,22,142,16,23,196,2,11,12,252,22,186,11, +2,37,2,42,39,23,200,2,23,201,2,28,28,248,22,157,7,23,197,2,10, +248,22,146,8,23,197,2,12,252,22,186,11,2,37,2,72,40,23,200,2,23, +201,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,199,2,86,94,23, +195,1,86,94,28,192,12,250,22,189,11,2,37,2,73,23,201,2,249,22,7, +194,195,27,248,22,188,15,23,196,1,27,251,2,170,2,23,202,1,23,201,1, +23,198,2,248,22,151,8,23,199,1,28,248,22,183,15,195,249,22,136,16,196, +194,192,2,51,252,80,144,44,8,35,42,2,37,2,51,32,0,88,148,8,36, +41,46,11,9,222,33,175,2,198,199,32,177,2,88,148,8,36,43,60,11,2, +50,222,33,180,2,32,178,2,88,148,8,36,45,60,11,2,74,222,33,179,2, +249,22,128,16,27,251,22,158,8,250,22,157,8,23,205,2,39,23,206,1,23, +204,1,249,22,157,8,23,204,1,23,207,1,28,248,22,157,7,23,201,2,249, +22,172,8,23,202,1,8,63,23,200,1,28,249,22,158,20,248,22,151,8,23, +196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,200,192,28, +248,22,183,15,196,248,22,184,15,196,247,22,185,15,28,248,22,137,4,23,197, +2,86,94,23,196,1,19,248,22,151,8,23,197,2,19,248,22,151,8,23,198, +2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,207,2,39,23,204,4, +2,51,249,22,157,8,23,206,1,23,202,4,28,248,22,157,7,23,203,2,249, +22,172,8,23,204,1,8,63,23,202,1,28,249,22,158,20,248,22,151,8,23, 196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,202,192,28, 248,22,183,15,198,248,22,184,15,198,247,22,185,15,2,2,27,248,22,186,3, -23,197,1,28,249,22,173,9,8,46,249,22,152,8,23,198,2,23,197,2,27, +23,198,1,28,249,22,173,9,8,46,249,22,152,8,23,200,2,23,197,2,27, 248,22,185,3,23,195,2,249,22,128,16,27,251,22,158,8,250,22,157,8,23, -205,2,39,23,204,1,2,71,249,22,157,8,23,204,1,23,202,1,2,68,28, -249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11, -2,37,2,69,2,70,202,192,28,248,22,183,15,198,248,22,184,15,198,247,22, -185,15,250,2,158,2,196,197,195,248,22,130,16,27,250,22,136,16,23,200,1, -23,202,1,23,199,1,28,249,22,173,9,23,197,2,66,115,97,109,101,192,28, -248,22,141,16,23,196,2,249,22,136,16,194,196,249,80,144,46,42,42,23,195, -1,23,197,1,249,22,5,20,20,96,88,148,39,40,54,47,9,226,5,4,2, -6,33,160,2,23,199,1,23,195,1,23,197,1,23,196,1,27,248,22,130,16, -249,22,136,16,23,198,2,23,199,2,28,23,193,2,192,86,94,23,193,1,28, -23,197,1,27,90,144,41,11,89,146,41,39,11,250,80,144,46,8,34,42,23, -202,2,2,68,2,37,27,248,22,188,15,23,196,1,27,250,2,158,2,23,197, -2,23,204,1,248,22,151,8,23,198,1,28,248,22,183,15,195,249,22,136,16, -196,194,192,27,247,22,165,16,249,22,5,20,20,96,88,148,39,40,51,47,9, -226,5,6,2,3,33,161,2,23,196,1,23,195,1,23,199,1,247,22,166,16, -11,86,95,28,28,248,22,183,15,23,194,2,10,28,248,22,182,15,23,194,2, -10,28,248,22,157,7,23,194,2,28,248,22,141,16,23,194,2,10,248,22,142, -16,23,194,2,11,12,252,22,186,11,23,200,2,2,42,39,23,198,2,23,199, -2,28,28,248,22,157,7,23,195,2,10,248,22,146,8,23,195,2,86,94,23, -194,1,12,252,22,186,11,23,200,2,2,72,40,23,198,2,23,199,1,90,144, -42,11,89,146,42,39,11,248,22,139,16,23,197,2,86,94,23,195,1,86,94, -28,23,193,2,86,95,23,198,1,23,196,1,12,250,22,189,11,23,201,1,2, -73,23,199,1,249,22,7,23,195,1,23,196,1,32,164,2,88,148,8,36,46, -61,11,2,74,222,33,165,2,249,22,128,16,27,251,22,158,8,250,22,157,8, -23,203,2,39,23,207,1,23,205,1,249,23,203,1,23,202,1,23,208,1,28, -248,22,157,7,23,204,2,249,22,172,8,23,205,1,8,63,23,203,1,28,249, -22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2, -37,2,69,2,70,201,192,28,248,22,183,15,197,248,22,184,15,197,247,22,185, -15,32,166,2,88,148,8,36,45,8,24,11,2,50,222,33,167,2,28,248,22, -137,4,23,199,2,86,95,23,198,1,23,194,1,19,248,22,151,8,23,195,2, -19,248,22,151,8,23,196,2,249,22,128,16,27,251,22,158,8,250,22,157,8, -23,205,2,39,23,204,4,2,51,249,23,206,1,23,204,1,23,202,4,28,248, -22,157,7,23,207,2,249,22,172,8,23,208,1,8,63,23,206,1,28,249,22, -158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37, -2,69,2,70,204,192,28,248,22,183,15,200,248,22,184,15,200,247,22,185,15, -2,2,27,248,22,186,3,23,200,1,28,249,22,173,9,8,46,249,22,152,8, -23,198,2,23,197,2,27,248,22,185,3,23,195,2,249,22,128,16,27,251,22, -158,8,250,22,157,8,23,205,2,39,23,204,1,23,203,1,249,23,206,1,23, -204,1,23,202,1,28,248,22,157,7,23,207,2,249,22,172,8,23,208,1,8, -63,23,206,1,28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193, -1,251,22,188,11,2,37,2,69,2,70,204,192,28,248,22,183,15,200,248,22, -184,15,200,247,22,185,15,28,248,22,137,4,23,194,2,86,95,23,195,1,23, -193,1,19,248,22,151,8,23,196,2,19,248,22,151,8,23,197,2,249,22,128, -16,27,251,22,158,8,250,22,157,8,23,206,2,39,23,204,4,2,51,249,23, -207,1,23,205,1,23,202,4,28,248,22,157,7,23,208,2,249,22,172,8,23, -209,1,8,63,23,207,1,28,249,22,158,20,248,22,151,8,23,196,2,39,86, -94,23,193,1,251,22,188,11,2,37,2,69,2,70,205,192,28,248,22,183,15, -201,248,22,184,15,201,247,22,185,15,2,2,27,248,22,186,3,23,195,1,28, -249,22,173,9,8,46,249,22,152,8,23,199,2,23,197,2,27,248,22,185,3, -23,195,2,249,22,128,16,27,251,22,158,8,250,22,157,8,23,206,2,39,23, -204,1,23,204,1,249,23,207,1,23,205,1,23,202,1,28,248,22,157,7,23, -208,2,249,22,172,8,23,209,1,8,63,23,207,1,28,249,22,158,20,248,22, -151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70, -205,192,28,248,22,183,15,201,248,22,184,15,201,247,22,185,15,28,248,22,137, -4,193,254,2,164,2,201,203,204,205,248,22,151,8,202,2,51,248,22,151,8, -202,27,248,22,186,3,194,28,249,22,173,9,8,46,249,22,152,8,199,196,254, -2,164,2,202,204,205,206,199,203,248,22,185,3,200,253,2,166,2,201,202,203, -204,205,198,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,183,15,23, -199,2,10,28,248,22,182,15,23,199,2,10,28,248,22,157,7,23,199,2,28, -248,22,141,16,23,199,2,10,248,22,142,16,23,199,2,11,12,252,22,186,11, -23,200,2,2,42,39,23,203,2,23,204,2,28,28,248,22,157,7,23,200,2, -10,248,22,146,8,23,200,2,12,252,22,186,11,23,200,2,2,72,40,23,203, -2,23,204,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,202,2,86, -94,23,195,1,86,94,28,192,12,250,22,189,11,23,201,1,2,73,23,204,2, -249,22,7,194,195,27,248,22,188,15,23,196,1,27,19,248,22,151,8,23,196, -2,28,249,22,158,20,23,195,4,39,86,94,23,199,1,19,248,22,151,8,23, -197,2,19,248,22,151,8,23,198,2,249,22,128,16,27,251,22,158,8,250,22, -157,8,23,207,2,39,23,204,4,2,51,249,23,211,1,23,206,1,23,202,4, -28,248,22,157,7,23,212,2,249,22,172,8,23,213,1,8,63,23,211,1,28, -249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11, -2,37,2,69,2,70,23,17,192,28,248,22,183,15,205,248,22,184,15,205,247, -22,185,15,2,2,27,248,22,186,3,23,195,4,28,249,22,173,9,8,46,249, -22,152,8,23,200,2,23,197,2,27,248,22,185,3,23,195,2,249,22,128,16, -27,251,22,158,8,250,22,157,8,23,207,2,39,23,204,1,23,208,1,249,23, -211,1,23,206,1,23,202,1,28,248,22,157,7,23,212,2,249,22,172,8,23, -213,1,8,63,23,211,1,28,249,22,158,20,248,22,151,8,23,196,2,39,86, -94,23,193,1,251,22,188,11,2,37,2,69,2,70,23,17,192,28,248,22,183, -15,205,248,22,184,15,205,247,22,185,15,28,248,22,137,4,23,194,2,86,95, -23,200,1,23,193,1,254,2,164,2,23,203,2,23,208,1,23,209,1,23,210, -1,248,22,151,8,23,204,2,2,51,248,22,151,8,23,204,1,27,248,22,186, -3,23,195,1,28,249,22,173,9,8,46,249,22,152,8,23,201,2,23,197,2, -254,2,164,2,23,204,1,23,209,1,23,210,1,23,211,1,23,200,2,23,208, -1,248,22,185,3,23,201,1,253,2,166,2,23,203,1,23,207,1,23,208,1, -23,209,1,23,210,1,23,199,1,2,28,248,22,183,15,195,249,22,136,16,196, -194,192,32,169,2,88,148,8,36,43,60,11,2,50,222,33,172,2,32,170,2, -88,148,8,36,45,60,11,2,74,222,33,171,2,86,94,23,198,1,249,22,128, -16,27,251,22,158,8,250,22,157,8,23,203,1,39,23,206,1,23,204,1,2, -51,28,248,22,157,7,23,203,2,249,22,172,8,23,204,1,8,63,23,202,1, -28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188, -11,2,37,2,69,2,70,200,192,28,248,22,183,15,196,248,22,184,15,196,247, -22,185,15,28,248,22,137,4,23,197,2,86,94,23,196,1,19,248,22,151,8, -23,195,2,35,248,22,151,8,23,196,2,249,22,128,16,27,251,22,158,8,250, -22,157,8,23,205,1,39,23,204,4,2,51,2,51,28,248,22,157,7,23,205, -2,249,22,172,8,23,206,1,8,63,23,204,1,28,249,22,158,20,248,22,151, -8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,202, -192,28,248,22,183,15,198,248,22,184,15,198,247,22,185,15,2,27,248,22,186, -3,23,198,1,28,249,22,173,9,8,46,249,22,152,8,23,198,2,23,197,2, -35,248,22,185,3,23,195,2,249,22,128,16,27,251,22,158,8,250,22,157,8, -23,205,1,39,23,204,1,2,51,2,51,28,248,22,157,7,23,205,2,249,22, -172,8,23,206,1,8,63,23,204,1,28,249,22,158,20,248,22,151,8,23,196, -2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,202,192,28,248, -22,183,15,198,248,22,184,15,198,247,22,185,15,28,248,22,137,4,193,253,2, -170,2,199,200,201,248,22,151,8,200,2,51,248,22,151,8,200,27,248,22,186, -3,194,28,249,22,173,9,8,46,249,22,152,8,198,196,253,2,170,2,200,201, -202,198,2,51,248,22,185,3,199,251,2,169,2,198,199,200,196,90,144,41,11, -89,146,41,39,11,86,95,28,28,248,22,183,15,23,196,2,10,28,248,22,182, -15,23,196,2,10,28,248,22,157,7,23,196,2,28,248,22,141,16,23,196,2, -10,248,22,142,16,23,196,2,11,12,252,22,186,11,2,37,2,42,39,23,200, -2,23,201,2,28,28,248,22,157,7,23,197,2,10,248,22,146,8,23,197,2, -12,252,22,186,11,2,37,2,72,40,23,200,2,23,201,2,90,144,42,11,89, -146,42,39,11,248,22,139,16,23,199,2,86,94,23,195,1,86,94,28,192,12, -250,22,189,11,2,37,2,73,23,201,2,249,22,7,194,195,27,248,22,188,15, -23,196,1,27,251,2,169,2,23,198,2,23,201,1,23,202,1,248,22,151,8, -23,199,1,28,248,22,183,15,195,249,22,136,16,196,194,192,2,51,252,80,144, -44,8,35,42,2,37,2,51,32,0,88,148,8,36,41,46,11,9,222,33,174, -2,198,199,32,176,2,88,148,8,36,43,60,11,2,50,222,33,179,2,32,177, -2,88,148,8,36,45,60,11,2,74,222,33,178,2,249,22,128,16,27,251,22, -158,8,250,22,157,8,23,203,2,39,23,206,1,23,204,1,249,22,157,8,23, -202,1,23,207,1,28,248,22,157,7,23,203,2,249,22,172,8,23,204,1,8, -63,23,202,1,28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193, -1,251,22,188,11,2,37,2,69,2,70,200,192,28,248,22,183,15,196,248,22, -184,15,196,247,22,185,15,28,248,22,137,4,23,197,2,86,94,23,196,1,19, -248,22,151,8,23,195,2,19,248,22,151,8,23,196,2,249,22,128,16,27,251, -22,158,8,250,22,157,8,23,205,2,39,23,204,4,2,51,249,22,157,8,23, -204,1,23,202,4,28,248,22,157,7,23,205,2,249,22,172,8,23,206,1,8, -63,23,204,1,28,249,22,158,20,248,22,151,8,23,196,2,39,86,94,23,193, -1,251,22,188,11,2,37,2,69,2,70,202,192,28,248,22,183,15,198,248,22, -184,15,198,247,22,185,15,2,2,27,248,22,186,3,23,198,1,28,249,22,173, -9,8,46,249,22,152,8,23,198,2,23,197,2,27,248,22,185,3,23,195,2, -249,22,128,16,27,251,22,158,8,250,22,157,8,23,205,2,39,23,204,1,2, -71,249,22,157,8,23,204,1,23,202,1,28,248,22,157,7,23,205,2,249,22, -172,8,23,206,1,8,63,23,204,1,28,249,22,158,20,248,22,151,8,23,196, -2,39,86,94,23,193,1,251,22,188,11,2,37,2,69,2,70,202,192,28,248, -22,183,15,198,248,22,184,15,198,247,22,185,15,28,248,22,137,4,193,253,2, -177,2,199,200,201,248,22,151,8,200,2,51,248,22,151,8,200,27,248,22,186, -3,194,28,249,22,173,9,8,46,249,22,152,8,198,196,253,2,177,2,200,201, -202,198,2,71,248,22,185,3,199,251,2,176,2,198,199,200,196,90,144,41,11, -89,146,41,39,11,86,95,28,28,248,22,183,15,23,196,2,10,28,248,22,182, -15,23,196,2,10,28,248,22,157,7,23,196,2,28,248,22,141,16,23,196,2, -10,248,22,142,16,23,196,2,11,12,252,22,186,11,2,37,2,42,39,23,200, -2,23,201,2,28,28,248,22,157,7,23,197,2,10,248,22,146,8,23,197,2, -12,252,22,186,11,2,37,2,72,40,23,200,2,23,201,2,90,144,42,11,89, -146,42,39,11,248,22,139,16,23,199,2,86,94,23,195,1,86,94,28,192,12, -250,22,189,11,2,37,2,73,23,201,2,249,22,7,194,195,27,248,22,188,15, -23,196,1,27,251,2,176,2,23,198,2,23,201,1,23,202,1,248,22,151,8, -23,199,1,28,248,22,183,15,195,249,22,136,16,196,194,192,252,80,144,44,8, -35,42,2,37,2,71,22,157,8,198,199,249,247,22,180,5,23,195,1,11,249, -247,22,180,5,194,11,28,248,22,90,23,195,2,9,27,27,248,22,83,23,197, -2,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1,28,248,22,142,16, -23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,249,22,144,16,250, -80,144,50,43,42,248,22,159,16,2,56,11,11,248,22,159,16,2,57,86,95, -23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199,1,23,196,1,27, -250,80,144,45,43,42,248,22,159,16,2,56,23,197,1,10,28,23,193,2,248, -22,146,16,23,194,1,11,28,23,193,2,249,22,82,248,22,146,16,249,22,144, -16,23,198,1,247,22,160,16,27,248,22,174,20,23,199,1,28,248,22,90,23, -194,2,9,27,248,80,144,45,56,42,248,22,83,23,196,2,28,23,193,2,249, -22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,47, -8,50,42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,45,8,50, -42,248,22,174,20,23,196,1,86,94,23,193,1,27,248,22,174,20,23,197,1, -28,248,22,90,23,194,2,9,27,248,80,144,43,56,42,248,22,83,23,196,2, -28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160, -16,248,80,144,45,8,50,42,248,22,174,20,23,198,1,86,94,23,193,1,248, -80,144,43,8,50,42,248,22,174,20,23,196,1,28,248,22,90,23,195,2,9, +207,2,39,23,204,1,2,71,249,22,157,8,23,206,1,23,202,1,28,248,22, +157,7,23,203,2,249,22,172,8,23,204,1,8,63,23,202,1,28,249,22,158, +20,248,22,151,8,23,196,2,39,86,94,23,193,1,251,22,188,11,2,37,2, +69,2,70,202,192,28,248,22,183,15,198,248,22,184,15,198,247,22,185,15,28, +248,22,137,4,193,253,2,178,2,199,200,201,248,22,151,8,202,2,51,248,22, +151,8,202,27,248,22,186,3,194,28,249,22,173,9,8,46,249,22,152,8,200, +196,253,2,178,2,200,201,202,198,2,71,248,22,185,3,199,251,2,177,2,198, +199,200,196,90,144,41,11,89,146,41,39,11,86,95,28,28,248,22,183,15,23, +196,2,10,28,248,22,182,15,23,196,2,10,28,248,22,157,7,23,196,2,28, +248,22,141,16,23,196,2,10,248,22,142,16,23,196,2,11,12,252,22,186,11, +2,37,2,42,39,23,200,2,23,201,2,28,28,248,22,157,7,23,197,2,10, +248,22,146,8,23,197,2,12,252,22,186,11,2,37,2,72,40,23,200,2,23, +201,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,199,2,86,94,23, +195,1,86,94,28,192,12,250,22,189,11,2,37,2,73,23,201,2,249,22,7, +194,195,27,248,22,188,15,23,196,1,27,251,2,177,2,23,202,1,23,201,1, +23,198,2,248,22,151,8,23,199,1,28,248,22,183,15,195,249,22,136,16,196, +194,192,252,80,144,44,8,35,42,2,37,2,71,22,157,8,198,199,249,247,22, +180,5,23,195,1,11,249,247,22,180,5,194,11,28,248,22,90,23,195,2,9, 27,27,248,22,83,23,197,2,28,248,22,143,16,23,194,2,248,22,146,16,23, 194,1,28,248,22,142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22, 139,16,249,22,144,16,250,80,144,50,43,42,248,22,159,16,2,56,11,11,248, @@ -847,731 +832,748 @@ 248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,27,248,22,174,20,23, 199,1,28,248,22,90,23,194,2,9,27,248,80,144,45,56,42,248,22,83,23, 196,2,28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247, -22,160,16,248,80,144,47,8,51,42,248,22,174,20,23,198,1,86,94,23,193, -1,248,80,144,45,8,51,42,248,22,174,20,23,196,1,86,94,23,193,1,27, +22,160,16,248,80,144,47,8,50,42,248,22,174,20,23,198,1,86,94,23,193, +1,248,80,144,45,8,50,42,248,22,174,20,23,196,1,86,94,23,193,1,27, 248,22,174,20,23,197,1,28,248,22,90,23,194,2,9,27,248,80,144,43,56, 42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,146,16,249,22,144, -16,23,198,1,247,22,160,16,248,80,144,45,8,51,42,248,22,174,20,23,198, -1,86,94,23,193,1,248,80,144,43,8,51,42,248,22,174,20,23,196,1,27, -248,22,159,16,2,58,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1, -28,248,22,142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16, -249,22,144,16,250,80,144,49,43,42,248,22,159,16,2,56,11,11,248,22,159, -16,2,57,86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199, -1,23,196,1,27,250,80,144,44,43,42,248,22,159,16,2,56,23,197,1,10, -28,23,193,2,248,22,146,16,23,194,1,11,28,248,22,90,23,195,2,9,27, -27,248,22,83,23,197,2,28,248,22,143,16,23,194,2,248,22,146,16,23,194, -1,28,248,22,142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139, -16,249,22,144,16,250,80,144,50,43,42,248,22,159,16,2,56,11,11,248,22, -159,16,2,57,86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23, -199,1,23,196,1,27,250,80,144,45,43,42,248,22,159,16,2,56,23,197,1, -10,28,23,193,2,248,22,146,16,23,194,1,11,28,23,193,2,249,22,82,248, -22,146,16,249,22,144,16,23,198,1,247,22,160,16,27,248,22,174,20,23,199, -1,28,248,22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,143, -16,23,194,2,248,22,146,16,23,194,1,28,248,22,142,16,23,194,2,90,144, -42,11,89,146,42,39,11,248,22,139,16,249,22,144,16,250,80,144,54,43,42, -248,22,159,16,2,56,11,11,248,22,159,16,2,57,86,95,23,195,1,23,194, -1,248,22,146,16,249,22,144,16,23,199,1,23,196,1,27,250,80,144,49,43, -42,248,22,159,16,2,56,23,197,1,10,28,23,193,2,248,22,146,16,23,194, -1,11,28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247, -22,160,16,27,248,22,174,20,23,198,1,28,248,22,90,23,194,2,9,27,248, -80,144,49,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,146, -16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,51,8,53,42,248,22, -174,20,23,198,1,86,94,23,193,1,248,80,144,49,8,53,42,248,22,174,20, -23,196,1,86,94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23, -194,2,9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193,2,249, -22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,49, -8,53,42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,47,8,53, -42,248,22,174,20,23,196,1,86,94,23,193,1,27,248,22,174,20,23,197,1, -28,248,22,90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,143,16, -23,194,2,248,22,146,16,23,194,1,28,248,22,142,16,23,194,2,90,144,42, -11,89,146,42,39,11,248,22,139,16,249,22,144,16,250,80,144,52,43,42,248, -22,159,16,2,56,11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1, -248,22,146,16,249,22,144,16,23,199,1,23,196,1,27,250,80,144,47,43,42, -248,22,159,16,2,56,23,197,1,10,28,23,193,2,248,22,146,16,23,194,1, -11,28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22, -160,16,27,248,22,174,20,23,198,1,28,248,22,90,23,194,2,9,27,248,80, -144,47,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,146,16, -249,22,144,16,23,198,1,247,22,160,16,248,80,144,49,8,53,42,248,22,174, -20,23,198,1,86,94,23,193,1,248,80,144,47,8,53,42,248,22,174,20,23, -196,1,86,94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23,194, -2,9,27,248,80,144,45,56,42,248,22,83,23,196,2,28,23,193,2,249,22, -82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,47,8, -53,42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,45,8,53,42, -248,22,174,20,23,196,1,27,247,22,167,16,27,248,80,144,42,58,42,247,80, -144,42,57,42,249,80,144,43,44,41,28,23,196,2,27,249,22,179,8,247,22, -178,8,2,75,28,192,249,22,169,8,194,7,63,2,66,2,66,250,80,144,46, -8,23,42,23,198,2,2,76,27,28,23,200,1,250,22,136,16,248,22,159,16, -2,61,250,22,160,2,23,205,1,2,59,247,22,175,8,2,77,86,94,23,199, -1,11,27,248,80,144,49,8,50,42,250,22,96,9,248,22,92,248,22,159,16, -2,55,9,28,193,249,22,82,195,194,192,27,247,22,167,16,27,248,80,144,42, -58,42,247,80,144,42,57,42,249,80,144,43,44,41,28,23,196,2,27,249,22, -179,8,247,22,178,8,2,75,28,192,249,22,169,8,194,7,63,2,66,2,66, -250,80,144,46,8,23,42,23,198,2,2,76,27,28,23,200,1,250,22,136,16, -248,22,159,16,2,61,250,22,160,2,23,205,1,2,59,247,22,175,8,2,77, -86,94,23,199,1,11,27,248,80,144,49,8,51,42,250,22,96,23,207,1,248, -22,92,248,22,159,16,2,55,9,28,193,249,22,82,195,194,192,27,247,22,167, -16,27,248,80,144,42,58,42,249,80,144,44,55,40,40,80,144,44,8,52,42, -249,80,144,43,44,41,28,23,196,2,27,249,22,179,8,247,22,178,8,2,75, -28,192,249,22,169,8,194,7,63,2,66,2,66,250,80,144,46,8,23,42,23, -198,2,2,76,27,28,23,200,1,250,22,136,16,248,22,159,16,2,61,250,22, -160,2,23,205,1,2,59,247,22,175,8,2,77,86,94,23,199,1,11,27,27, -250,22,96,23,207,1,248,22,92,248,22,159,16,2,55,23,208,1,28,248,22, -90,23,194,2,9,27,27,248,22,83,23,196,2,28,248,22,143,16,23,194,2, +16,23,198,1,247,22,160,16,248,80,144,45,8,50,42,248,22,174,20,23,198, +1,86,94,23,193,1,248,80,144,43,8,50,42,248,22,174,20,23,196,1,28, +248,22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,143,16,23, +194,2,248,22,146,16,23,194,1,28,248,22,142,16,23,194,2,90,144,42,11, +89,146,42,39,11,248,22,139,16,249,22,144,16,250,80,144,50,43,42,248,22, +159,16,2,56,11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1,248, +22,146,16,249,22,144,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248, +22,159,16,2,56,23,197,1,10,28,23,193,2,248,22,146,16,23,194,1,11, +28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160, +16,27,248,22,174,20,23,199,1,28,248,22,90,23,194,2,9,27,248,80,144, +45,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,146,16,249, +22,144,16,23,198,1,247,22,160,16,248,80,144,47,8,51,42,248,22,174,20, +23,198,1,86,94,23,193,1,248,80,144,45,8,51,42,248,22,174,20,23,196, +1,86,94,23,193,1,27,248,22,174,20,23,197,1,28,248,22,90,23,194,2, +9,27,248,80,144,43,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82, +248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,45,8,51, +42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,43,8,51,42,248, +22,174,20,23,196,1,27,248,22,159,16,2,58,28,248,22,143,16,23,194,2, 248,22,146,16,23,194,1,28,248,22,142,16,23,194,2,90,144,42,11,89,146, -42,39,11,248,22,139,16,249,22,144,16,250,80,144,60,43,42,248,22,159,16, +42,39,11,248,22,139,16,249,22,144,16,250,80,144,49,43,42,248,22,159,16, 2,56,11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1,248,22,146, -16,249,22,144,16,23,199,1,23,196,1,27,250,80,144,55,43,42,248,22,159, -16,2,56,23,197,1,10,28,23,193,2,248,22,146,16,23,194,1,11,28,23, -193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,27, -248,22,174,20,23,198,1,28,248,22,90,23,194,2,9,27,248,80,144,55,56, -42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22,146,16,249,22,144, -16,23,198,1,247,22,160,16,248,80,144,57,8,53,42,248,22,174,20,23,198, -1,86,94,23,193,1,248,80,144,55,8,53,42,248,22,174,20,23,196,1,86, -94,23,193,1,27,248,22,174,20,23,196,1,28,248,22,90,23,194,2,9,27, -248,80,144,53,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82,248,22, -146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,55,8,53,42,248, -22,174,20,23,198,1,86,94,23,193,1,248,80,144,53,8,53,42,248,22,174, -20,23,196,1,28,193,249,22,82,195,194,192,27,20,13,144,80,144,40,46,40, -26,9,80,144,49,47,40,249,22,31,11,80,144,51,46,40,22,156,15,10,22, -163,15,10,22,164,15,10,22,165,15,10,248,22,152,6,23,196,2,28,248,22, -152,7,23,194,2,12,86,94,248,22,181,9,23,194,1,27,20,13,144,80,144, -41,46,40,26,9,80,144,50,47,40,249,22,31,11,80,144,52,46,40,22,156, -15,10,22,163,15,10,22,164,15,10,22,165,15,10,248,22,152,6,23,197,2, -28,248,22,152,7,23,194,2,12,86,94,248,22,181,9,23,194,1,27,20,13, -144,80,144,42,46,40,26,9,80,144,51,47,40,249,22,31,11,80,144,53,46, -40,22,156,15,10,22,163,15,10,22,164,15,10,22,165,15,10,248,22,152,6, -23,198,2,28,248,22,152,7,23,194,2,12,86,94,248,22,181,9,23,194,1, -248,80,144,43,8,54,42,197,86,94,249,22,143,7,247,22,176,5,23,196,2, -248,22,167,6,249,22,140,4,39,249,22,188,3,28,23,198,2,23,198,1,86, -94,23,198,1,39,23,199,1,27,248,22,129,6,28,23,198,2,86,95,23,197, -1,23,196,1,23,198,1,86,94,23,198,1,27,250,80,144,45,43,42,248,22, -159,16,2,56,11,11,27,248,22,143,4,23,199,1,27,28,23,194,2,23,194, -1,86,94,23,194,1,39,27,248,22,143,4,23,202,1,249,22,144,6,23,198, -1,20,20,95,88,148,8,36,39,51,11,9,224,3,2,33,128,3,23,195,1, -23,196,1,248,80,144,41,8,54,42,193,145,39,9,20,122,145,2,1,39,16, -1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11, -9,9,11,11,11,10,46,80,143,39,39,20,122,145,2,1,54,16,40,2,3, -2,4,2,5,2,6,2,7,2,8,2,9,30,2,11,1,20,112,97,114,97, -109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30,2,11, -1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,11,4,2,12,2,13,2,14,2,15,2,16,2,17,2,18,30, -2,11,1,19,99,97,99,104,101,45,99,111,110,102,105,103,117,114,97,116,105, -111,110,11,1,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2, -27,2,28,2,29,30,2,11,1,21,101,120,99,101,112,116,105,111,110,45,104, -97,110,100,108,101,114,45,107,101,121,11,3,2,30,2,31,2,32,2,33,2, -34,2,35,2,36,2,37,2,38,2,39,2,40,16,0,40,42,39,16,0,39, -16,19,2,13,2,14,2,12,2,25,2,4,2,35,2,23,2,24,2,19,2, -29,2,33,2,21,2,22,2,31,2,27,2,30,2,32,2,36,2,28,58,11, -11,11,16,17,2,9,2,17,2,15,2,40,2,16,2,7,2,26,2,39,2, -18,2,20,2,38,2,5,2,34,2,8,2,37,2,3,2,6,16,17,11,11, -11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,16,17,2,9,2,17, -2,15,2,40,2,16,2,7,2,26,2,39,2,18,2,20,2,38,2,5,2, -34,2,8,2,37,2,3,2,6,56,56,40,12,11,11,16,0,16,0,16,0, -39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,51,20,15,16,2,32, -0,88,148,8,36,40,48,11,2,3,222,33,78,80,144,39,39,40,20,15,16, -2,249,22,159,7,7,92,7,92,80,144,39,40,40,20,15,16,2,88,148,8, -36,40,57,41,2,5,223,0,33,83,80,144,39,41,40,20,15,16,2,88,148, -8,36,41,61,41,2,6,223,0,33,85,80,144,39,42,40,20,15,16,2,20, -26,96,2,7,88,148,8,36,42,8,24,8,32,9,223,0,33,92,88,148,8, -36,41,50,55,9,223,0,33,93,88,148,8,36,40,49,55,9,223,0,33,94, -80,144,39,43,40,20,15,16,2,27,248,22,171,16,248,22,171,8,27,28,249, -22,173,9,247,22,184,8,2,43,6,1,1,59,6,1,1,58,250,22,141,8, -6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,2,23, -196,1,88,148,8,36,41,51,11,2,8,223,0,33,98,80,144,39,44,40,20, -15,16,2,88,148,39,40,8,44,8,128,6,2,9,223,0,33,99,80,144,39, -45,40,20,15,16,2,32,0,88,148,8,36,41,50,11,2,12,222,33,100,80, -144,39,48,40,20,15,16,2,32,0,88,148,8,36,42,51,11,2,13,222,33, -102,80,144,39,49,40,20,15,16,2,32,0,88,148,8,36,41,49,11,2,14, -222,33,103,80,144,39,50,40,20,15,16,2,88,148,39,42,53,8,128,128,2, -15,223,0,33,105,80,144,39,51,40,20,15,16,2,88,148,39,44,55,8,128, -128,2,17,223,0,33,107,80,144,39,53,40,20,15,16,2,88,148,39,39,56, -55,9,223,0,33,108,80,144,39,8,40,42,20,15,16,2,88,148,39,39,47, -16,4,39,40,8,128,4,39,2,18,223,0,33,109,80,144,39,54,40,20,15, -16,2,88,148,39,39,56,55,9,223,0,33,110,80,144,39,8,41,42,20,15, -16,2,88,148,39,39,47,16,4,39,40,8,128,8,39,2,20,223,0,33,111, -80,144,39,57,40,20,15,16,2,88,148,8,36,39,8,44,8,128,6,9,223, -0,33,112,80,144,39,8,42,42,20,15,16,2,88,148,8,36,40,50,16,4, -39,39,8,128,16,39,2,21,223,0,33,113,80,144,39,58,40,20,15,16,2, -20,28,143,32,0,88,148,39,40,48,11,2,22,222,33,114,32,0,88,148,39, -40,48,11,2,22,222,33,115,80,144,39,59,40,20,15,16,2,88,148,8,36, -40,50,8,240,0,128,0,0,2,23,223,0,33,116,80,144,39,60,40,20,15, -16,2,88,148,39,39,56,55,9,223,0,33,117,80,144,39,8,43,42,20,15, -16,2,88,148,8,36,40,51,16,4,39,40,8,128,32,39,2,24,223,0,33, -118,80,144,39,61,40,20,15,16,2,88,148,39,40,56,55,2,19,223,0,33, -119,80,144,39,56,40,20,15,16,2,88,148,8,36,41,58,16,4,8,240,0, -128,0,0,8,32,8,128,64,39,2,50,223,0,33,120,80,144,39,8,44,42, -20,15,16,2,88,148,8,36,42,52,16,4,39,39,8,128,64,39,2,25,223, -0,33,121,80,144,39,8,23,40,20,15,16,2,88,148,39,39,56,55,9,223, -0,33,122,80,144,39,8,45,42,20,15,16,2,88,148,8,36,39,57,16,4, -8,240,0,128,0,0,8,137,2,8,128,128,39,2,26,223,0,33,123,80,144, -39,8,24,40,20,15,16,2,247,22,142,2,80,144,39,8,25,40,20,15,16, -2,248,22,16,67,115,116,97,109,112,80,144,39,8,26,40,20,15,16,2,88, -148,39,40,49,8,240,0,0,0,4,9,223,0,33,125,80,144,39,8,46,42, -20,15,16,2,88,148,39,41,51,16,4,39,8,128,80,8,240,0,64,0,0, -39,2,29,223,0,33,133,2,80,144,39,8,27,40,20,15,16,2,32,0,88, -148,8,36,40,48,11,2,30,222,33,134,2,80,144,39,8,29,40,20,15,16, -2,88,148,8,36,42,48,8,240,0,0,0,2,74,109,97,107,101,45,104,97, -110,100,108,101,114,223,0,33,136,2,80,144,39,8,47,42,20,15,16,2,88, -148,39,40,47,16,4,8,128,6,8,128,104,8,240,0,128,0,0,39,2,31, -223,0,33,146,2,80,144,39,8,30,40,20,15,16,2,88,148,39,41,59,16, -2,39,8,240,0,128,0,0,2,32,223,0,33,148,2,80,144,39,8,31,40, -20,15,16,2,88,148,8,36,41,61,16,4,39,8,240,0,64,0,0,39,40, -2,50,223,0,33,149,2,80,144,39,8,48,42,20,15,16,2,88,148,39,47, -8,33,16,4,39,39,40,41,67,99,108,111,111,112,223,0,33,156,2,80,144, -39,8,49,42,20,15,16,2,88,148,39,44,8,25,16,4,39,8,240,0,192, -0,0,39,42,2,16,223,0,33,157,2,80,144,39,52,40,20,15,16,2,88, -148,39,42,58,16,4,47,39,43,39,2,33,223,0,33,162,2,80,144,39,8, -32,40,20,15,16,2,32,0,88,148,39,42,53,11,2,35,222,33,163,2,80, -144,39,8,34,40,20,15,16,2,32,0,88,148,8,36,44,8,27,11,2,36, -222,33,168,2,80,144,39,8,35,40,20,15,16,2,20,28,143,32,0,88,148, -8,36,41,55,11,2,37,222,33,173,2,88,148,8,100,41,52,16,4,39,39, -47,39,2,37,223,0,33,175,2,80,144,39,8,36,40,20,15,16,2,20,28, -143,32,0,88,148,8,36,41,55,11,2,34,222,33,180,2,88,148,8,100,41, -52,16,4,39,39,47,39,2,34,223,0,33,181,2,80,144,39,8,33,40,20, -15,16,2,20,28,143,32,0,88,148,39,40,47,11,2,38,222,33,182,2,32, -0,88,148,39,40,47,11,2,38,222,33,183,2,80,144,39,8,37,40,20,15, -16,2,88,148,8,36,40,58,16,4,55,41,39,43,2,50,223,0,33,184,2, -80,144,39,8,50,42,20,15,16,2,88,148,8,36,40,58,16,4,55,41,39, -47,2,50,223,0,33,185,2,80,144,39,8,51,42,20,15,16,2,88,148,39, -39,56,55,9,223,0,33,186,2,80,144,39,8,52,42,20,15,16,2,88,148, -8,36,40,8,23,16,4,55,41,39,8,32,2,50,223,0,33,187,2,80,144, -39,8,53,42,20,15,16,2,20,26,96,2,39,88,148,39,39,60,16,4,8, -32,8,140,2,39,43,9,223,0,33,188,2,88,148,39,40,61,16,4,8,32, -8,140,2,39,47,9,223,0,33,189,2,88,148,39,41,8,30,16,4,8,48, -8,139,2,39,8,48,9,223,0,33,190,2,80,144,39,8,38,40,20,15,16, -2,88,148,8,36,40,60,16,4,8,128,6,39,39,8,64,2,50,223,0,33, -191,2,80,144,39,8,54,42,20,15,16,2,88,148,8,36,42,56,16,4,55, -39,39,8,64,2,40,223,0,33,129,3,80,144,39,8,39,40,95,29,94,2, -10,70,35,37,107,101,114,110,101,108,11,29,94,2,10,71,35,37,109,105,110, -45,115,116,120,11,2,11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 19773); +16,249,22,144,16,23,199,1,23,196,1,27,250,80,144,44,43,42,248,22,159, +16,2,56,23,197,1,10,28,23,193,2,248,22,146,16,23,194,1,11,28,248, +22,90,23,195,2,9,27,27,248,22,83,23,197,2,28,248,22,143,16,23,194, +2,248,22,146,16,23,194,1,28,248,22,142,16,23,194,2,90,144,42,11,89, +146,42,39,11,248,22,139,16,249,22,144,16,250,80,144,50,43,42,248,22,159, +16,2,56,11,11,248,22,159,16,2,57,86,95,23,195,1,23,194,1,248,22, +146,16,249,22,144,16,23,199,1,23,196,1,27,250,80,144,45,43,42,248,22, +159,16,2,56,23,197,1,10,28,23,193,2,248,22,146,16,23,194,1,11,28, +23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16, +27,248,22,174,20,23,199,1,28,248,22,90,23,194,2,9,27,27,248,22,83, +23,196,2,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1,28,248,22, +142,16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,249,22,144, +16,250,80,144,54,43,42,248,22,159,16,2,56,11,11,248,22,159,16,2,57, +86,95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199,1,23,196, +1,27,250,80,144,49,43,42,248,22,159,16,2,56,23,197,1,10,28,23,193, +2,248,22,146,16,23,194,1,11,28,23,193,2,249,22,82,248,22,146,16,249, +22,144,16,23,198,1,247,22,160,16,27,248,22,174,20,23,198,1,28,248,22, +90,23,194,2,9,27,248,80,144,49,56,42,248,22,83,23,196,2,28,23,193, +2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80, +144,51,8,53,42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,49, +8,53,42,248,22,174,20,23,196,1,86,94,23,193,1,27,248,22,174,20,23, +196,1,28,248,22,90,23,194,2,9,27,248,80,144,47,56,42,248,22,83,23, +196,2,28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247, +22,160,16,248,80,144,49,8,53,42,248,22,174,20,23,198,1,86,94,23,193, +1,248,80,144,47,8,53,42,248,22,174,20,23,196,1,86,94,23,193,1,27, +248,22,174,20,23,197,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23, +196,2,28,248,22,143,16,23,194,2,248,22,146,16,23,194,1,28,248,22,142, +16,23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,249,22,144,16, +250,80,144,52,43,42,248,22,159,16,2,56,11,11,248,22,159,16,2,57,86, +95,23,195,1,23,194,1,248,22,146,16,249,22,144,16,23,199,1,23,196,1, +27,250,80,144,47,43,42,248,22,159,16,2,56,23,197,1,10,28,23,193,2, +248,22,146,16,23,194,1,11,28,23,193,2,249,22,82,248,22,146,16,249,22, +144,16,23,198,1,247,22,160,16,27,248,22,174,20,23,198,1,28,248,22,90, +23,194,2,9,27,248,80,144,47,56,42,248,22,83,23,196,2,28,23,193,2, +249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144, +49,8,53,42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,47,8, +53,42,248,22,174,20,23,196,1,86,94,23,193,1,27,248,22,174,20,23,196, +1,28,248,22,90,23,194,2,9,27,248,80,144,45,56,42,248,22,83,23,196, +2,28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22, +160,16,248,80,144,47,8,53,42,248,22,174,20,23,198,1,86,94,23,193,1, +248,80,144,45,8,53,42,248,22,174,20,23,196,1,27,247,22,167,16,27,248, +80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44,41,28,23,196,2, +27,249,22,179,8,247,22,178,8,2,75,28,192,249,22,169,8,194,7,63,2, +66,2,66,250,80,144,46,8,23,42,23,198,2,2,76,27,28,23,200,1,250, +22,136,16,248,22,159,16,2,61,250,22,160,2,23,205,1,2,59,247,22,175, +8,2,77,86,94,23,199,1,11,27,248,80,144,49,8,50,42,250,22,96,9, +248,22,92,248,22,159,16,2,55,9,28,193,249,22,82,195,194,192,27,247,22, +167,16,27,248,80,144,42,58,42,247,80,144,42,57,42,249,80,144,43,44,41, +28,23,196,2,27,249,22,179,8,247,22,178,8,2,75,28,192,249,22,169,8, +194,7,63,2,66,2,66,250,80,144,46,8,23,42,23,198,2,2,76,27,28, +23,200,1,250,22,136,16,248,22,159,16,2,61,250,22,160,2,23,205,1,2, +59,247,22,175,8,2,77,86,94,23,199,1,11,27,248,80,144,49,8,51,42, +250,22,96,23,207,1,248,22,92,248,22,159,16,2,55,9,28,193,249,22,82, +195,194,192,27,247,22,167,16,27,248,80,144,42,58,42,249,80,144,44,55,40, +40,80,144,44,8,52,42,249,80,144,43,44,41,28,23,196,2,27,249,22,179, +8,247,22,178,8,2,75,28,192,249,22,169,8,194,7,63,2,66,2,66,250, +80,144,46,8,23,42,23,198,2,2,76,27,28,23,200,1,250,22,136,16,248, +22,159,16,2,61,250,22,160,2,23,205,1,2,59,247,22,175,8,2,77,86, +94,23,199,1,11,27,27,250,22,96,23,207,1,248,22,92,248,22,159,16,2, +55,23,208,1,28,248,22,90,23,194,2,9,27,27,248,22,83,23,196,2,28, +248,22,143,16,23,194,2,248,22,146,16,23,194,1,28,248,22,142,16,23,194, +2,90,144,42,11,89,146,42,39,11,248,22,139,16,249,22,144,16,250,80,144, +60,43,42,248,22,159,16,2,56,11,11,248,22,159,16,2,57,86,95,23,195, +1,23,194,1,248,22,146,16,249,22,144,16,23,199,1,23,196,1,27,250,80, +144,55,43,42,248,22,159,16,2,56,23,197,1,10,28,23,193,2,248,22,146, +16,23,194,1,11,28,23,193,2,249,22,82,248,22,146,16,249,22,144,16,23, +198,1,247,22,160,16,27,248,22,174,20,23,198,1,28,248,22,90,23,194,2, +9,27,248,80,144,55,56,42,248,22,83,23,196,2,28,23,193,2,249,22,82, +248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248,80,144,57,8,53, +42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144,55,8,53,42,248, +22,174,20,23,196,1,86,94,23,193,1,27,248,22,174,20,23,196,1,28,248, +22,90,23,194,2,9,27,248,80,144,53,56,42,248,22,83,23,196,2,28,23, +193,2,249,22,82,248,22,146,16,249,22,144,16,23,198,1,247,22,160,16,248, +80,144,55,8,53,42,248,22,174,20,23,198,1,86,94,23,193,1,248,80,144, +53,8,53,42,248,22,174,20,23,196,1,28,193,249,22,82,195,194,192,27,20, +13,144,80,144,40,46,40,26,9,80,144,49,47,40,249,22,31,11,80,144,51, +46,40,22,156,15,10,22,163,15,10,22,164,15,10,22,165,15,10,248,22,152, +6,23,196,2,28,248,22,152,7,23,194,2,12,86,94,248,22,181,9,23,194, +1,27,20,13,144,80,144,41,46,40,26,9,80,144,50,47,40,249,22,31,11, +80,144,52,46,40,22,156,15,10,22,163,15,10,22,164,15,10,22,165,15,10, +248,22,152,6,23,197,2,28,248,22,152,7,23,194,2,12,86,94,248,22,181, +9,23,194,1,27,20,13,144,80,144,42,46,40,26,9,80,144,51,47,40,249, +22,31,11,80,144,53,46,40,22,156,15,10,22,163,15,10,22,164,15,10,22, +165,15,10,248,22,152,6,23,198,2,28,248,22,152,7,23,194,2,12,86,94, +248,22,181,9,23,194,1,248,80,144,43,8,54,42,197,86,94,249,22,143,7, +247,22,176,5,23,195,2,248,22,167,6,249,22,140,4,39,249,22,188,3,28, +23,199,2,23,199,1,86,94,23,199,1,39,23,198,1,27,248,22,129,6,28, +23,198,2,86,95,23,197,1,23,196,1,23,198,1,86,94,23,198,1,27,250, +80,144,45,43,42,248,22,159,16,2,56,11,11,27,248,22,143,4,23,199,1, +27,28,23,194,2,23,194,1,86,94,23,194,1,39,27,248,22,143,4,23,202, +1,249,22,144,6,23,198,1,20,20,95,88,148,8,36,39,51,11,9,224,2, +3,33,129,3,23,196,1,23,195,1,248,80,144,41,8,54,42,193,145,40,9, +20,122,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2,29, +11,11,11,11,11,11,11,9,9,11,11,11,10,47,80,143,39,39,20,122,145, +2,1,54,16,40,2,3,2,4,2,5,2,6,2,7,2,8,2,9,30,2, +11,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107, +101,121,11,6,30,2,11,1,23,101,120,116,101,110,100,45,112,97,114,97,109, +101,116,101,114,105,122,97,116,105,111,110,11,4,2,12,2,13,2,14,2,15, +2,16,2,17,2,18,30,2,11,1,19,99,97,99,104,101,45,99,111,110,102, +105,103,117,114,97,116,105,111,110,11,1,2,19,2,20,2,21,2,22,2,23, +2,24,2,25,2,26,2,27,2,28,2,29,30,2,11,1,21,101,120,99,101, +112,116,105,111,110,45,104,97,110,100,108,101,114,45,107,101,121,11,3,2,30, +2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,16, +0,40,42,39,16,0,39,16,19,2,13,2,14,2,12,2,25,2,4,2,35, +2,23,2,24,2,19,2,29,2,33,2,21,2,22,2,31,2,27,2,30,2, +32,2,36,2,28,58,11,11,11,16,17,2,9,2,17,2,15,2,40,2,16, +2,7,2,26,2,39,2,18,2,20,2,38,2,5,2,34,2,8,2,37,2, +3,2,6,16,17,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, +11,16,17,2,9,2,17,2,15,2,40,2,16,2,7,2,26,2,39,2,18, +2,20,2,38,2,5,2,34,2,8,2,37,2,3,2,6,56,56,40,12,11, +11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39, +16,51,20,15,16,2,32,0,88,148,8,36,40,48,11,2,3,222,33,78,80, +144,39,39,40,20,15,16,2,249,22,159,7,7,92,7,92,80,144,39,40,40, +20,15,16,2,88,148,8,36,40,57,41,2,5,223,0,33,83,80,144,39,41, +40,20,15,16,2,88,148,8,36,41,61,41,2,6,223,0,33,85,80,144,39, +42,40,20,15,16,2,20,26,96,2,7,88,148,8,36,42,8,24,8,32,9, +223,0,33,92,88,148,8,36,41,50,55,9,223,0,33,93,88,148,8,36,40, +49,55,9,223,0,33,94,80,144,39,43,40,20,15,16,2,27,248,22,171,16, +248,22,171,8,27,28,249,22,173,9,247,22,184,8,2,43,6,1,1,59,6, +1,1,58,250,22,141,8,6,14,14,40,91,94,126,97,93,42,41,126,97,40, +46,42,41,23,196,2,23,196,1,88,148,8,36,41,51,11,2,8,223,0,33, +98,80,144,39,44,40,20,15,16,2,88,148,39,40,8,44,8,128,6,2,9, +223,0,33,99,80,144,39,45,40,20,15,16,2,32,0,88,148,8,36,41,50, +11,2,12,222,33,100,80,144,39,48,40,20,15,16,2,32,0,88,148,8,36, +42,51,11,2,13,222,33,102,80,144,39,49,40,20,15,16,2,32,0,88,148, +8,36,41,49,11,2,14,222,33,103,80,144,39,50,40,20,15,16,2,88,148, +39,42,53,8,128,128,2,15,223,0,33,105,80,144,39,51,40,20,15,16,2, +88,148,39,44,55,8,128,128,2,17,223,0,33,107,80,144,39,53,40,20,15, +16,2,88,148,39,39,56,55,9,223,0,33,108,80,144,39,8,40,42,20,15, +16,2,88,148,39,39,47,16,4,39,40,8,128,4,39,2,18,223,0,33,109, +80,144,39,54,40,20,15,16,2,88,148,39,39,56,55,9,223,0,33,110,80, +144,39,8,41,42,20,15,16,2,88,148,39,39,47,16,4,39,40,8,128,8, +39,2,20,223,0,33,111,80,144,39,57,40,20,15,16,2,88,148,8,36,39, +8,44,8,128,6,9,223,0,33,112,80,144,39,8,42,42,20,15,16,2,88, +148,8,36,40,50,16,4,39,39,8,128,16,39,2,21,223,0,33,113,80,144, +39,58,40,20,15,16,2,20,28,143,32,0,88,148,39,40,48,11,2,22,222, +33,114,32,0,88,148,39,40,48,11,2,22,222,33,115,80,144,39,59,40,20, +15,16,2,88,148,8,36,40,50,8,240,0,128,0,0,2,23,223,0,33,116, +80,144,39,60,40,20,15,16,2,88,148,39,39,56,55,9,223,0,33,117,80, +144,39,8,43,42,20,15,16,2,88,148,8,36,40,51,16,4,39,40,8,128, +32,39,2,24,223,0,33,118,80,144,39,61,40,20,15,16,2,88,148,39,40, +56,55,2,19,223,0,33,119,80,144,39,56,40,20,15,16,2,88,148,8,36, +41,58,16,4,8,240,0,128,0,0,8,32,8,128,64,39,2,50,223,0,33, +120,80,144,39,8,44,42,20,15,16,2,88,148,8,36,42,52,16,4,39,39, +8,128,64,39,2,25,223,0,33,121,80,144,39,8,23,40,20,15,16,2,88, +148,39,39,56,55,9,223,0,33,122,80,144,39,8,45,42,20,15,16,2,88, +148,8,36,39,57,16,4,8,240,0,128,0,0,8,137,2,8,128,128,39,2, +26,223,0,33,123,80,144,39,8,24,40,20,15,16,2,247,22,142,2,80,144, +39,8,25,40,20,15,16,2,248,22,16,67,115,116,97,109,112,80,144,39,8, +26,40,20,15,16,2,88,148,39,40,49,8,240,0,0,0,4,9,223,0,33, +125,80,144,39,8,46,42,20,15,16,2,88,148,39,41,51,16,4,39,8,128, +80,8,240,0,64,0,0,39,2,29,223,0,33,133,2,80,144,39,8,27,40, +20,15,16,2,32,0,88,148,8,36,40,48,11,2,30,222,33,134,2,80,144, +39,8,29,40,20,15,16,2,88,148,8,36,42,48,8,240,0,0,0,2,74, +109,97,107,101,45,104,97,110,100,108,101,114,223,0,33,136,2,80,144,39,8, +47,42,20,15,16,2,88,148,39,40,47,16,4,8,128,6,8,128,104,8,240, +0,128,0,0,39,2,31,223,0,33,146,2,80,144,39,8,30,40,20,15,16, +2,88,148,39,41,59,16,2,39,8,240,0,128,0,0,2,32,223,0,33,148, +2,80,144,39,8,31,40,20,15,16,2,88,148,8,36,41,61,16,4,39,8, +240,0,64,0,0,39,40,2,50,223,0,33,149,2,80,144,39,8,48,42,20, +15,16,2,88,148,39,48,8,34,16,4,39,39,40,41,67,99,108,111,111,112, +223,0,33,156,2,80,144,39,8,49,42,20,15,16,2,88,148,39,44,8,25, +16,4,39,8,240,0,192,0,0,39,42,2,16,223,0,33,158,2,80,144,39, +52,40,20,15,16,2,88,148,39,42,58,16,4,47,39,43,39,2,33,223,0, +33,163,2,80,144,39,8,32,40,20,15,16,2,32,0,88,148,39,42,53,11, +2,35,222,33,164,2,80,144,39,8,34,40,20,15,16,2,32,0,88,148,8, +36,44,8,27,11,2,36,222,33,169,2,80,144,39,8,35,40,20,15,16,2, +20,28,143,32,0,88,148,8,36,41,55,11,2,37,222,33,174,2,88,148,8, +100,41,52,16,4,39,39,47,39,2,37,223,0,33,176,2,80,144,39,8,36, +40,20,15,16,2,20,28,143,32,0,88,148,8,36,41,55,11,2,34,222,33, +181,2,88,148,8,100,41,52,16,4,39,39,47,39,2,34,223,0,33,182,2, +80,144,39,8,33,40,20,15,16,2,20,28,143,32,0,88,148,39,40,47,11, +2,38,222,33,183,2,32,0,88,148,39,40,47,11,2,38,222,33,184,2,80, +144,39,8,37,40,20,15,16,2,88,148,8,36,40,58,16,4,55,41,39,43, +2,50,223,0,33,185,2,80,144,39,8,50,42,20,15,16,2,88,148,8,36, +40,58,16,4,55,41,39,47,2,50,223,0,33,186,2,80,144,39,8,51,42, +20,15,16,2,88,148,39,39,56,55,9,223,0,33,187,2,80,144,39,8,52, +42,20,15,16,2,88,148,8,36,40,8,23,16,4,55,41,39,8,32,2,50, +223,0,33,188,2,80,144,39,8,53,42,20,15,16,2,20,26,96,2,39,88, +148,39,39,60,16,4,8,32,8,140,2,39,43,9,223,0,33,189,2,88,148, +39,40,61,16,4,8,32,8,140,2,39,47,9,223,0,33,190,2,88,148,39, +41,8,30,16,4,8,48,8,139,2,39,8,48,9,223,0,33,191,2,80,144, +39,8,38,40,20,15,16,2,88,148,8,36,40,60,16,4,8,128,6,39,39, +8,64,2,50,223,0,33,128,3,80,144,39,8,54,42,20,15,16,2,88,148, +8,36,42,56,16,4,55,39,39,8,64,2,40,223,0,33,130,3,80,144,39, +8,39,40,95,29,94,2,10,70,35,37,107,101,114,110,101,108,11,29,94,2, +10,71,35,37,109,105,110,45,115,116,120,11,2,11,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 19780); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,52,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8,0,23,0, -48,0,65,0,83,0,105,0,128,0,149,0,171,0,180,0,189,0,196,0,205, -0,212,0,0,0,248,1,0,0,3,1,5,105,110,115,112,48,76,35,37,112, -108,97,99,101,45,115,116,114,117,99,116,1,23,115,116,114,117,99,116,58,84, -72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,78,84,72,45,112,108, -97,99,101,45,99,104,97,110,110,101,108,79,84,72,45,112,108,97,99,101,45, -99,104,97,110,110,101,108,63,1,20,84,72,45,112,108,97,99,101,45,99,104, -97,110,110,101,108,45,114,101,102,1,21,84,72,45,112,108,97,99,101,45,99, -104,97,110,110,101,108,45,115,101,116,33,1,19,84,72,45,112,108,97,99,101, -45,99,104,97,110,110,101,108,45,105,110,1,20,84,72,45,112,108,97,99,101, -45,99,104,97,110,110,101,108,45,111,117,116,249,80,143,41,42,23,196,1,39, -249,80,143,41,42,23,196,1,39,249,80,143,41,42,195,39,249,80,143,41,42, -23,196,1,40,249,80,143,41,42,195,40,145,39,9,20,122,145,2,1,39,16, -1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11,11,11, -9,9,11,11,11,10,48,80,143,39,39,20,122,145,2,1,39,16,7,2,3, -2,4,2,5,2,6,2,7,2,8,2,9,16,0,40,42,39,16,0,39,16, -2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2,9,2,5,2,3, -16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2,5,2,3,44,44, -40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0,16, -0,39,39,16,3,20,15,16,6,253,22,130,11,2,4,11,41,39,11,248,22, -92,249,22,82,22,179,10,88,148,39,40,48,47,9,223,9,33,10,80,144,39, -39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42,40,80,144,39,43, -40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223,0,33,11,88,148, -39,40,48,47,9,223,0,33,12,80,144,39,44,40,20,15,16,2,20,28,143, -88,148,39,40,48,47,9,223,0,33,13,88,148,39,40,48,47,9,223,0,33, -14,80,144,39,45,40,93,29,94,67,113,117,111,116,101,70,35,37,107,101,114, -110,101,108,11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 576); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,54,46,52,46,48,46,49,51,84,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,0,0,8,0,23, +0,48,0,65,0,83,0,105,0,128,0,149,0,171,0,180,0,189,0,196,0, +205,0,212,0,0,0,248,1,0,0,3,1,5,105,110,115,112,48,76,35,37, +112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116,114,117,99,116,58, +84,72,45,112,108,97,99,101,45,99,104,97,110,110,101,108,78,84,72,45,112, +108,97,99,101,45,99,104,97,110,110,101,108,79,84,72,45,112,108,97,99,101, +45,99,104,97,110,110,101,108,63,1,20,84,72,45,112,108,97,99,101,45,99, +104,97,110,110,101,108,45,114,101,102,1,21,84,72,45,112,108,97,99,101,45, +99,104,97,110,110,101,108,45,115,101,116,33,1,19,84,72,45,112,108,97,99, +101,45,99,104,97,110,110,101,108,45,105,110,1,20,84,72,45,112,108,97,99, +101,45,99,104,97,110,110,101,108,45,111,117,116,249,80,143,41,42,23,196,1, +39,249,80,143,41,42,23,196,1,39,249,80,143,41,42,195,39,249,80,143,41, +42,23,196,1,40,249,80,143,41,42,195,40,145,40,9,20,122,145,2,1,39, +16,1,11,16,0,20,27,15,56,9,2,2,2,2,29,11,11,11,11,11,11, +11,9,9,11,11,11,10,49,80,143,39,39,20,122,145,2,1,39,16,7,2, +3,2,4,2,5,2,6,2,7,2,8,2,9,16,0,40,42,39,16,0,39, +16,2,2,6,2,7,41,11,11,11,16,5,2,4,2,8,2,9,2,5,2, +3,16,5,11,11,11,11,11,16,5,2,4,2,8,2,9,2,5,2,3,44, +44,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16,0,16,0, +16,0,39,39,16,3,20,15,16,6,253,22,130,11,2,4,11,41,39,11,248, +22,92,249,22,82,22,179,10,88,148,39,40,48,47,9,223,9,33,10,80,144, +39,39,40,80,144,39,40,40,80,144,39,41,40,80,144,39,42,40,80,144,39, +43,40,20,15,16,2,20,28,143,88,148,39,40,48,47,9,223,0,33,11,88, +148,39,40,48,47,9,223,0,33,12,80,144,39,44,40,20,15,16,2,20,28, +143,88,148,39,40,48,47,9,223,0,33,13,88,148,39,40,48,47,9,223,0, +33,14,80,144,39,45,40,93,29,94,67,113,117,111,116,101,70,35,37,107,101, +114,110,101,108,11,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 577); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,52,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,100,0,0,0,1,0,0,8,0,15,0, -26,0,53,0,59,0,73,0,86,0,112,0,129,0,151,0,159,0,171,0,186, -0,202,0,220,0,241,0,253,0,13,1,36,1,60,1,72,1,103,1,108,1, -113,1,131,1,137,1,142,1,151,1,156,1,162,1,167,1,171,1,186,1,193, -1,198,1,202,1,207,1,214,1,225,1,232,1,240,1,87,2,122,2,225,2, -4,3,98,3,133,3,227,3,6,4,29,11,59,11,110,11,185,11,201,11,217, -11,231,11,247,11,66,12,82,12,98,12,114,12,189,12,96,13,112,13,187,13, -182,14,62,15,137,15,44,16,57,16,210,16,138,17,181,17,7,18,140,18,201, -18,209,18,220,18,254,19,101,20,129,20,142,20,63,21,70,21,230,21,250,21, -94,22,116,22,126,22,140,22,178,22,21,23,25,23,32,23,238,23,157,32,210, -32,234,32,2,33,0,0,51,37,0,0,3,1,5,105,110,115,112,48,68,35, -37,98,111,111,116,72,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102, -97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101, -100,67,113,117,111,116,101,29,94,2,5,70,35,37,112,97,114,97,109,122,11, -29,94,2,5,69,35,37,117,116,105,108,115,11,1,24,45,109,111,100,117,108, -101,45,104,97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,78,114,101, -103,105,115,116,101,114,45,122,111,45,112,97,116,104,1,20,100,101,102,97,117, -108,116,45,114,101,97,100,101,114,45,103,117,97,114,100,69,67,65,67,72,69, -45,78,73,45,112,97,116,104,45,99,97,99,104,101,76,112,97,116,104,45,99, -97,99,104,101,45,103,101,116,77,112,97,116,104,45,99,97,99,104,101,45,115, -101,116,33,79,45,108,111,97,100,105,110,103,45,102,105,108,101,110,97,109,101, -1,19,45,108,111,97,100,105,110,103,45,112,114,111,109,112,116,45,116,97,103, -73,45,112,114,101,118,45,114,101,108,116,111,77,45,112,114,101,118,45,114,101, -108,116,111,45,100,105,114,1,21,115,112,108,105,116,45,114,101,108,97,116,105, -118,101,45,115,116,114,105,110,103,1,22,102,111,114,109,97,116,45,115,111,117, -114,99,101,45,108,111,99,97,116,105,111,110,73,111,114,105,103,45,112,97,114, -97,109,122,1,29,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,66,98,111,111,116,66,115,101, -97,108,79,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,5, -4,46,114,107,116,66,115,97,109,101,6,6,6,110,97,116,105,118,101,5,3, -46,122,111,67,105,108,111,111,112,66,108,111,111,112,65,108,105,98,6,12,12, -109,111,100,117,108,101,45,112,97,116,104,63,68,115,117,98,109,111,100,6,2, -2,46,46,6,1,1,46,66,102,105,108,101,68,112,108,97,110,101,116,6,8, -8,109,97,105,110,46,114,107,116,6,4,4,46,114,107,116,69,105,103,110,111, -114,101,100,27,252,22,136,16,28,249,22,173,9,23,201,2,2,27,86,94,23, -199,1,23,200,1,28,248,22,141,16,23,200,2,249,22,136,16,23,202,1,23, -201,1,249,80,144,50,45,42,23,202,1,23,201,1,23,203,1,2,28,247,22, -185,8,249,80,144,50,46,42,23,203,1,80,144,50,39,41,27,250,22,154,16, -196,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,195,194, -11,249,22,5,20,20,96,88,148,8,36,40,57,8,129,3,9,226,5,4,3, -6,33,42,23,199,1,23,196,1,23,197,1,23,195,1,27,252,22,136,16,28, -249,22,173,9,23,201,2,2,27,86,94,23,199,1,23,200,1,28,248,22,141, -16,23,200,2,249,22,136,16,23,202,1,23,201,1,249,80,144,50,45,42,23, -202,1,23,201,1,23,203,1,2,28,247,22,185,8,249,80,144,50,46,42,23, -203,1,80,144,50,39,41,27,250,22,154,16,196,11,32,0,88,148,8,36,39, -44,11,9,222,11,28,192,249,22,82,195,194,11,249,22,5,20,20,96,88,148, -8,36,40,57,8,129,3,9,226,5,4,3,6,33,44,23,199,1,23,196,1, -23,197,1,23,195,1,27,250,22,136,16,28,249,22,173,9,23,199,2,2,27, -86,94,23,197,1,23,198,1,28,248,22,141,16,23,198,2,249,22,136,16,23, -200,1,23,199,1,249,80,144,48,45,42,23,200,1,23,199,1,23,201,1,249, -80,144,48,46,42,23,201,1,2,29,27,250,22,154,16,196,11,32,0,88,148, -8,36,39,44,11,9,222,11,28,192,249,22,82,195,194,11,249,22,5,20,20, -96,88,148,8,36,40,55,8,128,3,9,226,5,4,3,6,33,46,23,199,1, -23,196,1,23,197,1,23,195,1,27,250,22,136,16,28,249,22,173,9,23,199, -2,2,27,86,94,23,197,1,23,198,1,28,248,22,141,16,23,198,2,249,22, -136,16,23,200,1,23,199,1,249,80,144,48,45,42,23,200,1,23,199,1,23, -201,1,249,80,144,48,46,42,23,201,1,2,29,27,250,22,154,16,196,11,32, + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,54,46,52,46,48,46,49,51,84,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,98,0,0,0,1,0,0,8,0,15, +0,26,0,53,0,59,0,73,0,86,0,112,0,129,0,151,0,159,0,171,0, +186,0,202,0,220,0,241,0,253,0,13,1,36,1,60,1,72,1,103,1,108, +1,113,1,131,1,137,1,142,1,151,1,156,1,162,1,167,1,171,1,186,1, +191,1,198,1,202,1,207,1,214,1,221,1,232,1,240,1,87,2,122,2,225, +2,4,3,98,3,133,3,227,3,6,4,27,11,57,11,108,11,183,11,199,11, +215,11,229,11,245,11,64,12,80,12,96,12,112,12,187,12,94,13,110,13,185, +13,180,14,60,15,135,15,42,16,55,16,208,16,136,17,179,17,5,18,138,18, +199,18,207,18,218,18,252,19,99,20,112,20,33,21,40,21,200,21,44,22,66, +22,76,22,90,22,128,22,227,22,231,22,238,22,188,23,207,32,4,33,28,33, +52,33,0,0,101,37,0,0,3,1,5,105,110,115,112,48,68,35,37,98,111, +111,116,72,100,108,108,45,115,117,102,102,105,120,1,25,100,101,102,97,117,108, +116,45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,67,113, +117,111,116,101,29,94,2,5,70,35,37,112,97,114,97,109,122,11,29,94,2, +5,69,35,37,117,116,105,108,115,11,1,24,45,109,111,100,117,108,101,45,104, +97,115,104,45,116,97,98,108,101,45,116,97,98,108,101,78,114,101,103,105,115, +116,101,114,45,122,111,45,112,97,116,104,1,20,100,101,102,97,117,108,116,45, +114,101,97,100,101,114,45,103,117,97,114,100,69,67,65,67,72,69,45,78,73, +45,112,97,116,104,45,99,97,99,104,101,76,112,97,116,104,45,99,97,99,104, +101,45,103,101,116,77,112,97,116,104,45,99,97,99,104,101,45,115,101,116,33, +79,45,108,111,97,100,105,110,103,45,102,105,108,101,110,97,109,101,1,19,45, +108,111,97,100,105,110,103,45,112,114,111,109,112,116,45,116,97,103,73,45,112, +114,101,118,45,114,101,108,116,111,77,45,112,114,101,118,45,114,101,108,116,111, +45,100,105,114,1,21,115,112,108,105,116,45,114,101,108,97,116,105,118,101,45, +115,116,114,105,110,103,1,22,102,111,114,109,97,116,45,115,111,117,114,99,101, +45,108,111,99,97,116,105,111,110,73,111,114,105,103,45,112,97,114,97,109,122, +1,29,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,66,98,111,111,116,66,115,101,97,108,79, +108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,5,4,46,114, +107,116,66,115,97,109,101,6,6,6,110,97,116,105,118,101,5,3,46,122,111, +67,105,108,111,111,112,66,108,111,111,112,65,108,105,98,6,12,12,109,111,100, +117,108,101,45,112,97,116,104,63,6,2,2,46,46,68,115,117,98,109,111,100, +6,1,1,46,66,102,105,108,101,68,112,108,97,110,101,116,6,4,4,46,114, +107,116,6,8,8,109,97,105,110,46,114,107,116,69,105,103,110,111,114,101,100, +27,252,22,136,16,28,249,22,173,9,23,203,2,2,27,86,94,23,201,1,23, +200,1,28,248,22,141,16,23,202,2,249,22,136,16,23,202,1,23,203,1,249, +80,144,50,45,42,23,202,1,23,203,1,23,203,1,2,28,247,22,185,8,249, +80,144,50,46,42,23,201,1,80,144,50,39,41,27,250,22,154,16,196,11,32, 0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,195,194,11,249,22, -5,20,20,96,88,148,8,36,40,55,8,128,3,9,226,5,4,3,6,33,48, -23,199,1,23,196,1,23,197,1,23,195,1,86,95,28,248,80,144,40,43,42, -23,195,2,12,250,22,186,11,2,25,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,66,23,196,2,10,28, -248,22,91,23,196,2,28,249,22,134,4,248,22,95,23,198,2,40,28,28,248, -22,66,248,22,83,23,197,2,10,248,22,171,9,248,22,173,20,23,197,2,249, -22,4,22,66,248,22,174,20,23,198,2,11,11,11,10,12,250,22,186,11,2, -25,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,27,28,23,196,2,247, -22,131,5,11,27,28,23,194,2,250,22,160,2,80,143,44,44,248,22,136,17, -247,22,149,14,11,11,27,28,23,194,2,250,22,160,2,248,22,84,23,198,2, -23,198,2,11,11,28,23,193,2,86,96,23,197,1,23,195,1,23,194,1,20, -13,144,80,144,42,41,40,250,80,144,45,42,40,249,22,31,11,80,144,47,41, -40,22,132,5,248,22,104,23,197,2,27,248,22,113,23,195,2,20,13,144,80, -144,43,41,40,250,80,144,46,42,40,249,22,31,11,80,144,48,41,40,22,181, -5,28,248,22,182,15,23,197,2,23,196,1,86,94,23,196,1,247,22,160,16, -249,247,22,179,5,248,22,173,20,23,197,1,23,201,1,86,94,23,193,1,27, -28,248,22,143,16,23,199,2,23,198,2,27,247,22,181,5,28,192,249,22,144, -16,23,201,2,194,23,199,2,90,144,42,11,89,146,42,39,11,248,22,139,16, -23,202,1,86,94,23,195,1,90,144,41,11,89,146,41,39,11,28,23,204,2, -27,248,22,187,15,23,198,2,19,248,22,151,8,194,28,28,249,22,162,20,23, -195,4,43,249,22,154,8,2,26,249,22,157,8,197,249,22,188,3,23,199,4, -43,11,249,22,7,23,200,2,248,22,191,15,249,22,158,8,250,22,157,8,201, -39,249,22,188,3,23,203,4,43,5,3,46,115,115,249,22,7,23,200,2,11, -2,249,22,7,23,198,2,11,27,28,249,22,173,9,23,196,2,23,199,2,23, -199,2,249,22,136,16,23,198,2,23,196,2,27,28,23,196,2,28,249,22,173, -9,23,198,2,23,200,1,23,200,1,86,94,23,200,1,249,22,136,16,23,199, -2,23,198,2,86,95,23,200,1,23,198,1,11,27,28,249,22,173,9,23,200, -2,70,114,101,108,97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27, -247,22,165,16,27,247,22,166,16,27,250,22,154,16,23,201,2,11,32,0,88, -148,8,36,39,44,11,9,222,11,27,28,23,194,2,249,22,82,23,201,2,23, -196,1,86,94,23,194,1,11,27,28,23,199,2,28,23,194,2,11,27,250,22, -154,16,23,203,2,11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249, -22,82,23,202,2,194,11,11,27,28,23,195,2,23,195,2,23,194,2,27,28, -23,196,2,23,196,2,248,22,171,9,23,196,2,27,28,23,205,2,28,23,196, -2,86,94,23,197,1,23,196,2,248,22,171,9,23,198,1,86,94,23,197,1, -11,27,28,23,195,2,27,249,22,5,88,148,39,40,51,8,129,3,9,226,24, -15,12,11,33,43,23,203,2,27,28,23,198,2,11,193,28,192,192,28,193,28, -23,198,2,28,249,22,136,4,248,22,84,196,248,22,84,23,201,2,193,11,11, -11,11,28,23,193,2,86,105,23,213,1,23,212,1,23,206,1,23,205,1,23, -204,1,23,203,1,23,201,1,23,200,1,23,197,1,23,196,1,23,195,1,23, -194,1,20,13,144,80,144,60,41,40,250,80,144,8,24,42,40,249,22,31,11, -80,144,8,26,41,40,22,132,5,11,20,13,144,80,144,60,41,40,250,80,144, -8,24,42,40,249,22,31,11,80,144,8,26,41,40,22,181,5,28,248,22,182, -15,23,206,2,23,205,1,86,94,23,205,1,247,22,160,16,249,247,22,170,16, -248,22,83,23,196,1,23,218,1,86,94,23,193,1,27,28,23,195,2,27,249, -22,5,88,148,39,40,51,8,129,3,9,226,25,17,13,12,33,45,23,204,2, -27,28,23,200,2,11,193,28,192,192,28,193,28,199,28,249,22,136,4,248,22, -84,196,248,22,84,202,193,11,11,11,86,94,23,198,1,11,28,23,193,2,86, -103,23,214,1,23,213,1,23,207,1,23,206,1,23,205,1,23,202,1,23,201, -1,23,197,1,23,196,1,23,195,1,20,13,144,80,144,61,41,40,250,80,144, -8,25,42,40,249,22,31,11,80,144,8,27,41,40,22,132,5,23,207,1,20, -13,144,80,144,61,41,40,250,80,144,8,25,42,40,249,22,31,11,80,144,8, -27,41,40,22,181,5,28,248,22,182,15,23,207,2,23,206,1,86,94,23,206, -1,247,22,160,16,249,247,22,170,16,248,22,83,23,196,1,23,219,1,86,94, -23,193,1,27,28,23,197,2,27,249,22,5,20,20,94,88,148,39,40,51,8, -128,3,9,226,26,17,14,13,33,47,23,210,1,23,205,2,27,28,23,200,2, -11,193,28,192,192,28,193,28,23,200,2,28,249,22,136,4,248,22,84,196,248, -22,84,23,203,2,193,11,11,11,86,94,23,207,1,11,28,23,193,2,86,101, -23,208,1,23,206,1,23,205,1,23,203,1,23,202,1,23,198,1,23,197,1, -23,196,1,86,94,27,248,22,83,23,195,2,28,23,215,2,250,22,158,2,248, -22,84,23,219,1,23,219,1,250,22,92,23,199,1,11,23,211,2,12,20,13, -144,80,144,8,23,41,40,250,80,144,8,26,42,40,249,22,31,11,80,144,8, -28,41,40,22,132,5,11,20,13,144,80,144,8,23,41,40,250,80,144,8,26, -42,40,249,22,31,11,80,144,8,28,41,40,22,181,5,28,248,22,182,15,23, -208,2,23,207,1,86,94,23,207,1,247,22,160,16,249,247,22,179,5,248,22, -173,20,23,196,1,23,220,1,86,94,23,193,1,27,28,23,197,1,27,249,22, -5,20,20,95,88,148,39,40,51,8,128,3,9,226,27,19,15,14,33,49,23, -207,1,23,212,1,23,206,1,27,28,23,201,2,11,193,28,192,192,28,193,28, -200,28,249,22,136,4,248,22,84,196,248,22,84,203,193,11,11,11,86,97,23, -209,1,23,204,1,23,203,1,23,199,1,11,28,23,193,2,86,95,23,207,1, -23,198,1,86,94,27,248,22,83,23,195,2,28,23,216,2,250,22,158,2,248, -22,84,23,220,1,23,220,1,250,22,92,23,199,1,23,213,2,23,212,2,12, -20,13,144,80,144,8,24,41,40,250,80,144,8,27,42,40,249,22,31,11,80, -144,8,29,41,40,22,132,5,23,209,1,20,13,144,80,144,8,24,41,40,250, -80,144,8,27,42,40,249,22,31,11,80,144,8,29,41,40,22,181,5,28,248, -22,182,15,23,209,2,23,208,1,86,94,23,208,1,247,22,160,16,249,247,22, -179,5,248,22,173,20,23,196,1,23,221,1,86,96,23,216,1,23,215,1,23, -193,1,28,28,248,22,80,23,220,2,248,22,173,20,23,220,2,10,27,28,23, -199,2,86,94,23,207,1,23,208,1,86,94,23,208,1,23,207,1,28,28,248, -22,80,23,221,2,248,22,171,9,248,22,130,16,23,195,2,11,12,20,13,144, +5,20,20,96,88,148,8,36,40,57,8,129,3,9,226,5,6,3,2,33,42, +23,195,1,23,196,1,23,199,1,23,197,1,27,252,22,136,16,28,249,22,173, +9,23,203,2,2,27,86,94,23,201,1,23,200,1,28,248,22,141,16,23,202, +2,249,22,136,16,23,202,1,23,203,1,249,80,144,50,45,42,23,202,1,23, +203,1,23,203,1,2,28,247,22,185,8,249,80,144,50,46,42,23,201,1,80, +144,50,39,41,27,250,22,154,16,196,11,32,0,88,148,8,36,39,44,11,9, +222,11,28,192,249,22,82,195,194,11,249,22,5,20,20,96,88,148,8,36,40, +57,8,129,3,9,226,5,6,3,2,33,44,23,195,1,23,196,1,23,199,1, +23,197,1,27,250,22,136,16,28,249,22,173,9,23,201,2,2,27,86,94,23, +199,1,23,198,1,28,248,22,141,16,23,200,2,249,22,136,16,23,200,1,23, +201,1,249,80,144,48,45,42,23,200,1,23,201,1,23,201,1,249,80,144,48, +46,42,23,199,1,2,29,27,250,22,154,16,196,11,32,0,88,148,8,36,39, +44,11,9,222,11,28,192,249,22,82,195,194,11,249,22,5,20,20,96,88,148, +8,36,40,55,8,128,3,9,226,5,6,3,2,33,46,23,195,1,23,196,1, +23,199,1,23,197,1,27,250,22,136,16,28,249,22,173,9,23,201,2,2,27, +86,94,23,199,1,23,198,1,28,248,22,141,16,23,200,2,249,22,136,16,23, +200,1,23,201,1,249,80,144,48,45,42,23,200,1,23,201,1,23,201,1,249, +80,144,48,46,42,23,199,1,2,29,27,250,22,154,16,196,11,32,0,88,148, +8,36,39,44,11,9,222,11,28,192,249,22,82,195,194,11,249,22,5,20,20, +96,88,148,8,36,40,55,8,128,3,9,226,5,6,3,2,33,48,23,195,1, +23,196,1,23,199,1,23,197,1,86,95,28,248,80,144,40,43,42,23,195,2, +12,250,22,186,11,2,25,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,66,23,196,2,10,28,248,22,91, +23,196,2,28,249,22,134,4,248,22,95,23,198,2,40,28,28,248,22,66,248, +22,83,23,197,2,10,248,22,171,9,248,22,83,23,197,2,249,22,4,22,66, +248,22,84,23,198,2,11,11,11,10,12,250,22,186,11,2,25,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,27,28,23,196,2,247,22,131,5,11,27, +28,23,194,2,250,22,160,2,80,143,44,44,248,22,136,17,247,22,149,14,11, +11,27,28,23,194,2,250,22,160,2,248,22,84,23,198,2,23,198,2,11,11, +28,23,193,2,86,96,23,197,1,23,195,1,23,194,1,20,13,144,80,144,42, +41,40,250,80,144,45,42,40,249,22,31,11,80,144,47,41,40,22,132,5,248, +22,104,23,197,2,27,248,22,113,23,195,2,20,13,144,80,144,43,41,40,250, +80,144,46,42,40,249,22,31,11,80,144,48,41,40,22,181,5,28,248,22,182, +15,23,197,2,23,196,1,86,94,23,196,1,247,22,160,16,249,247,22,179,5, +248,22,173,20,23,197,1,23,201,1,86,94,23,193,1,27,28,248,22,143,16, +23,199,2,23,198,2,27,247,22,181,5,28,192,249,22,144,16,23,201,2,194, +23,199,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,202,1,86,94, +23,195,1,90,144,41,11,89,146,41,39,11,28,23,204,2,27,248,22,187,15, +23,198,2,19,248,22,151,8,194,28,28,249,22,162,20,23,195,4,43,249,22, +154,8,2,26,249,22,157,8,197,249,22,188,3,23,199,4,43,11,249,22,7, +23,200,2,248,22,191,15,249,22,158,8,250,22,157,8,201,39,249,22,188,3, +23,203,4,43,5,3,46,115,115,249,22,7,23,200,2,11,2,249,22,7,23, +198,2,11,27,28,249,22,173,9,23,196,2,23,199,2,23,199,2,249,22,136, +16,23,198,2,23,196,2,27,28,23,196,2,28,249,22,173,9,23,198,2,23, +200,1,23,200,1,86,94,23,200,1,249,22,136,16,23,199,2,23,198,2,86, +95,23,200,1,23,198,1,11,27,28,249,22,173,9,23,200,2,70,114,101,108, +97,116,105,118,101,86,94,23,198,1,2,27,23,198,1,27,247,22,165,16,27, +247,22,166,16,27,250,22,154,16,23,201,2,11,32,0,88,148,8,36,39,44, +11,9,222,11,27,28,23,194,2,249,22,82,23,201,2,23,196,1,86,94,23, +194,1,11,27,28,23,199,2,28,23,194,2,11,27,250,22,154,16,23,203,2, +11,32,0,88,148,8,36,39,44,11,9,222,11,28,192,249,22,82,23,202,2, +194,11,11,27,28,23,195,2,23,195,2,23,194,2,27,28,23,196,2,23,196, +2,248,22,171,9,23,196,2,27,28,23,205,2,28,23,196,2,86,94,23,197, +1,23,196,2,248,22,171,9,23,198,1,86,94,23,197,1,11,27,28,23,195, +2,27,249,22,5,88,148,39,40,51,8,129,3,9,226,24,11,12,15,33,43, +23,203,2,27,28,23,198,2,11,193,28,192,192,28,193,28,23,198,2,28,249, +22,136,4,248,22,84,196,248,22,84,23,201,2,193,11,11,11,11,28,23,193, +2,86,105,23,213,1,23,212,1,23,206,1,23,205,1,23,204,1,23,203,1, +23,201,1,23,200,1,23,197,1,23,196,1,23,195,1,23,194,1,20,13,144, +80,144,60,41,40,250,80,144,8,24,42,40,249,22,31,11,80,144,8,26,41, +40,22,132,5,11,20,13,144,80,144,60,41,40,250,80,144,8,24,42,40,249, +22,31,11,80,144,8,26,41,40,22,181,5,28,248,22,182,15,23,206,2,23, +205,1,86,94,23,205,1,247,22,160,16,249,247,22,170,16,248,22,83,23,196, +1,23,218,1,86,94,23,193,1,27,28,23,195,2,27,249,22,5,88,148,39, +40,51,8,129,3,9,226,25,12,13,17,33,45,23,204,2,27,28,23,200,2, +11,193,28,192,192,28,193,28,199,28,249,22,136,4,248,22,84,196,248,22,84, +202,193,11,11,11,86,94,23,198,1,11,28,23,193,2,86,103,23,214,1,23, +213,1,23,207,1,23,206,1,23,205,1,23,202,1,23,201,1,23,197,1,23, +196,1,23,195,1,20,13,144,80,144,61,41,40,250,80,144,8,25,42,40,249, +22,31,11,80,144,8,27,41,40,22,132,5,23,207,1,20,13,144,80,144,61, +41,40,250,80,144,8,25,42,40,249,22,31,11,80,144,8,27,41,40,22,181, +5,28,248,22,182,15,23,207,2,23,206,1,86,94,23,206,1,247,22,160,16, +249,247,22,170,16,248,22,83,23,196,1,23,219,1,86,94,23,193,1,27,28, +23,197,2,27,249,22,5,20,20,94,88,148,39,40,51,8,128,3,9,226,26, +13,14,17,33,47,23,210,1,23,205,2,27,28,23,200,2,11,193,28,192,192, +28,193,28,23,200,2,28,249,22,136,4,248,22,84,196,248,22,84,23,203,2, +193,11,11,11,86,94,23,207,1,11,28,23,193,2,86,101,23,208,1,23,206, +1,23,205,1,23,203,1,23,202,1,23,198,1,23,197,1,23,196,1,86,94, +27,248,22,83,23,195,2,28,23,215,2,250,22,158,2,248,22,84,23,219,1, +23,219,1,250,22,92,23,199,1,11,23,211,2,12,20,13,144,80,144,8,23, +41,40,250,80,144,8,26,42,40,249,22,31,11,80,144,8,28,41,40,22,132, +5,11,20,13,144,80,144,8,23,41,40,250,80,144,8,26,42,40,249,22,31, +11,80,144,8,28,41,40,22,181,5,28,248,22,182,15,23,208,2,23,207,1, +86,94,23,207,1,247,22,160,16,249,247,22,179,5,248,22,173,20,23,196,1, +23,220,1,86,94,23,193,1,27,28,23,197,1,27,249,22,5,20,20,95,88, +148,39,40,51,8,128,3,9,226,27,14,15,19,33,49,23,212,1,23,207,1, +23,206,1,27,28,23,201,2,11,193,28,192,192,28,193,28,200,28,249,22,136, +4,248,22,84,196,248,22,84,203,193,11,11,11,86,97,23,209,1,23,204,1, +23,203,1,23,199,1,11,28,23,193,2,86,95,23,207,1,23,198,1,86,94, +27,248,22,83,23,195,2,28,23,216,2,250,22,158,2,248,22,84,23,220,1, +23,220,1,250,22,92,23,199,1,23,213,2,23,212,2,12,20,13,144,80,144, +8,24,41,40,250,80,144,8,27,42,40,249,22,31,11,80,144,8,29,41,40, +22,132,5,23,209,1,20,13,144,80,144,8,24,41,40,250,80,144,8,27,42, +40,249,22,31,11,80,144,8,29,41,40,22,181,5,28,248,22,182,15,23,209, +2,23,208,1,86,94,23,208,1,247,22,160,16,249,247,22,179,5,248,22,173, +20,23,196,1,23,221,1,86,96,23,216,1,23,215,1,23,193,1,28,28,248, +22,80,23,220,2,248,22,173,20,23,220,2,10,27,28,23,199,2,86,94,23, +207,1,23,208,1,86,94,23,208,1,23,207,1,28,28,248,22,80,23,221,2, +248,22,171,9,248,22,130,16,23,195,2,11,12,20,13,144,80,144,8,25,41, +40,250,80,144,8,28,42,40,249,22,31,11,80,144,8,30,41,40,22,132,5, +28,23,223,2,28,23,202,1,11,23,196,2,86,94,23,202,1,11,20,13,144, 80,144,8,25,41,40,250,80,144,8,28,42,40,249,22,31,11,80,144,8,30, -41,40,22,132,5,28,23,223,2,28,23,202,1,11,23,196,2,86,94,23,202, -1,11,20,13,144,80,144,8,25,41,40,250,80,144,8,28,42,40,249,22,31, -11,80,144,8,30,41,40,22,181,5,28,248,22,182,15,23,210,2,23,209,1, -86,94,23,209,1,247,22,160,16,249,247,22,179,5,23,195,1,23,222,1,12, -28,23,194,2,250,22,158,2,248,22,84,23,198,1,23,196,1,250,22,92,23, -201,1,23,202,1,23,203,1,12,27,249,22,129,9,80,144,42,50,41,249,22, -131,4,248,22,191,3,248,22,177,2,200,8,128,8,27,28,193,248,22,180,2, -194,11,28,192,27,249,22,102,198,195,28,192,248,22,84,193,11,11,27,249,22, -131,4,248,22,191,3,248,22,177,2,23,199,2,8,128,8,27,249,22,129,9, -80,144,43,50,41,23,196,2,250,22,130,9,80,144,44,50,41,23,197,1,248, -22,179,2,249,22,82,249,22,82,23,204,1,23,205,1,27,28,23,200,2,248, -22,180,2,200,11,28,192,192,9,32,54,88,149,8,38,42,54,11,2,30,39, -223,3,33,69,32,55,88,149,8,38,42,53,11,2,30,39,223,3,33,68,32, -56,88,148,8,36,40,53,11,2,31,222,33,67,32,57,88,149,8,38,42,53, -11,2,30,39,223,3,33,58,28,249,22,132,4,23,197,2,23,195,4,248,22, -92,194,28,249,22,140,9,7,47,249,22,161,7,23,198,2,23,199,2,249,22, -82,250,22,179,7,23,199,2,39,23,200,2,248,2,56,249,22,179,7,23,199, -1,248,22,185,3,23,201,1,250,2,57,23,196,4,196,248,22,185,3,198,32, -59,88,149,8,38,42,55,11,2,30,39,223,3,33,66,32,60,88,149,8,38, -42,54,11,2,30,39,223,3,33,63,32,61,88,149,8,38,42,53,11,2,30, -39,223,3,33,62,28,249,22,132,4,23,197,2,23,195,4,248,22,92,194,28, -249,22,140,9,7,47,249,22,161,7,23,198,2,23,199,2,249,22,82,250,22, -179,7,23,199,2,39,23,200,2,248,2,56,249,22,179,7,23,199,1,248,22, -185,3,23,201,1,250,2,61,23,196,4,196,248,22,185,3,198,28,249,22,132, -4,23,197,2,23,195,4,248,22,92,194,28,249,22,140,9,7,47,249,22,161, -7,23,198,2,23,199,2,249,22,82,250,22,179,7,23,199,2,39,23,200,2, -27,249,22,179,7,23,199,1,248,22,185,3,23,201,1,19,248,22,160,7,23, -195,2,250,2,61,23,196,4,23,197,1,39,2,27,248,22,185,3,23,197,1, -28,249,22,132,4,23,195,2,23,196,4,248,22,92,195,28,249,22,140,9,7, -47,249,22,161,7,23,199,2,23,197,2,249,22,82,250,22,179,7,23,200,2, -39,23,198,2,248,2,56,249,22,179,7,23,200,1,248,22,185,3,23,199,1, -250,2,60,23,197,4,197,248,22,185,3,196,32,64,88,149,8,38,42,53,11, -2,30,39,223,3,33,65,28,249,22,132,4,23,197,2,23,195,4,248,22,92, -194,28,249,22,140,9,7,47,249,22,161,7,23,198,2,23,199,2,249,22,82, -250,22,179,7,23,199,2,39,23,200,2,248,2,56,249,22,179,7,23,199,1, -248,22,185,3,23,201,1,250,2,64,23,196,4,196,248,22,185,3,198,28,249, -22,132,4,23,197,2,23,195,4,248,22,92,194,28,249,22,140,9,7,47,249, -22,161,7,23,198,2,23,199,2,249,22,82,250,22,179,7,23,199,2,39,23, -200,2,27,249,22,179,7,23,199,1,248,22,185,3,23,201,1,19,248,22,160, -7,23,195,2,250,2,60,23,196,4,23,197,1,39,2,27,248,22,185,3,23, -197,1,28,249,22,132,4,23,195,2,23,196,4,248,22,92,195,28,249,22,140, -9,7,47,249,22,161,7,23,199,2,23,197,2,249,22,82,250,22,179,7,23, -200,2,39,23,198,2,27,249,22,179,7,23,200,1,248,22,185,3,23,199,1, -19,248,22,160,7,23,195,2,250,2,64,23,196,4,23,197,1,39,2,27,248, -22,185,3,23,195,1,28,249,22,132,4,23,195,2,23,197,4,248,22,92,196, -28,249,22,140,9,7,47,249,22,161,7,23,200,2,23,197,2,249,22,82,250, -22,179,7,23,201,2,39,23,198,2,248,2,56,249,22,179,7,23,201,1,248, -22,185,3,23,199,1,250,2,59,23,198,4,198,248,22,185,3,196,19,248,22, -160,7,23,195,2,28,249,22,158,20,39,23,195,4,248,22,92,194,28,249,22, -140,9,7,47,249,22,161,7,23,198,2,39,249,22,82,250,22,179,7,23,199, -2,39,39,27,249,22,179,7,23,199,1,40,19,248,22,160,7,23,195,2,250, -2,57,23,196,4,23,197,1,39,2,28,249,22,158,20,40,23,195,4,248,22, -92,194,28,249,22,140,9,7,47,249,22,161,7,23,198,2,40,249,22,82,250, -22,179,7,23,199,2,39,40,248,2,56,249,22,179,7,23,199,1,41,250,2, -59,23,196,4,196,41,2,28,249,22,132,4,23,197,2,23,195,4,248,22,92, -194,28,249,22,140,9,7,47,249,22,161,7,23,198,2,23,199,2,249,22,82, -250,22,179,7,23,199,2,39,23,200,2,248,2,56,249,22,179,7,23,199,1, -248,22,185,3,23,201,1,250,2,55,23,196,4,196,248,22,185,3,198,28,249, -22,132,4,23,197,2,23,195,4,248,22,92,194,28,249,22,140,9,7,47,249, -22,161,7,23,198,2,23,199,2,249,22,82,250,22,179,7,23,199,2,39,23, -200,2,27,249,22,179,7,23,199,1,248,22,185,3,23,201,1,19,248,22,160, -7,23,195,2,250,2,55,23,196,4,23,197,1,39,2,27,248,22,185,3,23, -197,1,28,249,22,132,4,23,195,2,23,196,4,248,22,92,195,28,249,22,140, -9,7,47,249,22,161,7,23,199,2,23,197,2,249,22,82,250,22,179,7,23, -200,2,39,23,198,2,248,2,56,249,22,179,7,23,200,1,248,22,185,3,23, -199,1,250,2,54,23,197,4,197,248,22,185,3,196,32,70,88,148,39,40,58, -11,2,31,222,33,71,28,248,22,90,248,22,84,23,195,2,249,22,7,9,248, -22,173,20,23,196,1,90,144,41,11,89,146,41,39,11,27,248,22,174,20,23, -197,2,28,248,22,90,248,22,84,23,195,2,249,22,7,9,248,22,173,20,195, -90,144,41,11,89,146,41,39,11,27,248,22,174,20,196,28,248,22,90,248,22, -84,23,195,2,249,22,7,9,248,22,173,20,195,90,144,41,11,89,146,41,39, -11,248,2,70,248,22,174,20,196,249,22,7,249,22,82,248,22,173,20,199,196, -195,249,22,7,249,22,82,248,22,173,20,199,196,195,249,22,7,249,22,82,248, -22,173,20,23,200,1,23,197,1,23,196,1,27,19,248,22,160,7,23,196,2, -250,2,54,23,196,4,23,198,1,39,2,28,23,195,1,192,28,248,22,90,248, -22,84,23,195,2,249,22,7,9,248,22,173,20,23,196,1,27,248,22,174,20, -23,195,2,90,144,41,11,89,146,41,39,11,28,248,22,90,248,22,84,23,197, -2,249,22,7,9,248,22,173,20,23,198,1,27,248,22,174,20,23,197,2,90, -144,41,11,89,146,41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7, -9,248,22,173,20,197,90,144,41,11,89,146,41,39,11,248,2,70,248,22,174, -20,198,249,22,7,249,22,82,248,22,173,20,201,196,195,249,22,7,249,22,82, -248,22,173,20,23,203,1,196,195,249,22,7,249,22,82,248,22,173,20,23,201, -1,23,197,1,23,196,1,248,22,148,12,252,22,166,10,248,22,167,4,23,200, -2,248,22,163,4,23,200,2,248,22,164,4,23,200,2,248,22,165,4,23,200, -2,248,22,166,4,23,200,1,28,24,194,2,12,20,13,144,80,144,39,41,40, -80,143,39,59,89,146,40,40,10,249,22,134,5,21,94,2,32,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,27,28,23,195,2,28,249,22,173,9,23,197,2,80,143, -42,55,86,94,23,195,1,80,143,40,56,27,248,22,157,5,23,197,2,27,28, -248,22,80,23,195,2,248,22,173,20,23,195,1,23,194,1,28,248,22,182,15, -23,194,2,90,144,42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95, -20,18,144,11,80,143,45,55,199,20,18,144,11,80,143,45,56,192,192,11,86, -94,23,195,1,11,28,23,193,2,192,86,94,23,193,1,27,247,22,181,5,28, -23,193,2,192,86,94,23,193,1,247,22,160,16,90,144,42,11,89,146,42,39, -11,248,22,139,16,23,198,2,86,95,23,195,1,23,193,1,28,249,22,175,16, -0,11,35,114,120,34,91,46,93,115,115,36,34,248,22,187,15,23,197,1,249, -80,144,44,61,42,23,199,1,2,26,196,249,80,144,41,57,42,195,10,249,22, -12,23,196,1,80,144,41,54,41,86,96,28,248,22,155,5,23,196,2,12,250, -22,186,11,2,22,6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117, -108,101,45,112,97,116,104,63,23,198,2,28,28,23,196,2,248,22,150,14,23, -197,2,10,12,250,22,186,11,2,22,6,20,20,40,111,114,47,99,32,35,102, -32,110,97,109,101,115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24, -194,1,23,196,2,86,94,23,193,1,12,27,250,22,160,2,80,144,44,44,41, +41,40,22,181,5,28,248,22,182,15,23,210,2,23,209,1,86,94,23,209,1, +247,22,160,16,249,247,22,179,5,23,195,1,23,222,1,12,28,23,194,2,250, +22,158,2,248,22,84,23,198,1,23,196,1,250,22,92,23,201,1,23,202,1, +23,203,1,12,27,249,22,129,9,80,144,42,50,41,249,22,131,4,248,22,191, +3,248,22,177,2,200,8,128,8,27,28,193,248,22,180,2,194,11,28,192,27, +249,22,102,198,195,28,192,248,22,84,193,11,11,27,249,22,131,4,248,22,191, +3,248,22,177,2,23,199,2,8,128,8,27,249,22,129,9,80,144,43,50,41, +23,196,2,250,22,130,9,80,144,44,50,41,23,197,1,248,22,179,2,249,22, +82,249,22,82,23,204,1,23,205,1,27,28,23,200,2,248,22,180,2,200,11, +28,192,192,9,32,54,88,149,8,38,42,54,11,2,30,39,223,48,33,69,32, +55,88,149,8,38,42,53,11,2,30,39,223,48,33,68,32,56,88,148,8,36, +40,53,11,2,31,222,33,67,32,57,88,149,8,38,42,53,11,2,30,39,223, +48,33,58,28,249,22,132,4,23,197,2,23,196,4,248,22,92,193,28,249,22, +140,9,7,47,249,22,161,7,23,197,2,23,199,2,249,22,82,250,22,179,7, +23,198,2,39,23,200,2,248,2,56,249,22,179,7,23,198,1,248,22,185,3, +23,201,1,250,2,57,195,23,197,4,248,22,185,3,198,32,59,88,149,8,38, +42,55,11,2,30,39,223,48,33,66,32,60,88,149,8,38,42,54,11,2,30, +39,223,48,33,63,32,61,88,149,8,38,42,53,11,2,30,39,223,48,33,62, +28,249,22,132,4,23,197,2,23,196,4,248,22,92,193,28,249,22,140,9,7, +47,249,22,161,7,23,197,2,23,199,2,249,22,82,250,22,179,7,23,198,2, +39,23,200,2,248,2,56,249,22,179,7,23,198,1,248,22,185,3,23,201,1, +250,2,61,195,23,197,4,248,22,185,3,198,28,249,22,132,4,23,197,2,23, +196,4,248,22,92,193,28,249,22,140,9,7,47,249,22,161,7,23,197,2,23, +199,2,249,22,82,250,22,179,7,23,198,2,39,23,200,2,27,249,22,179,7, +23,198,1,248,22,185,3,23,201,1,19,248,22,160,7,23,195,2,250,2,61, +23,197,1,23,196,4,39,2,27,248,22,185,3,23,197,1,28,249,22,132,4, +23,195,2,23,197,4,248,22,92,194,28,249,22,140,9,7,47,249,22,161,7, +23,198,2,23,197,2,249,22,82,250,22,179,7,23,199,2,39,23,198,2,248, +2,56,249,22,179,7,23,199,1,248,22,185,3,23,199,1,250,2,60,196,23, +198,4,248,22,185,3,196,32,64,88,149,8,38,42,53,11,2,30,39,223,48, +33,65,28,249,22,132,4,23,197,2,23,196,4,248,22,92,193,28,249,22,140, +9,7,47,249,22,161,7,23,197,2,23,199,2,249,22,82,250,22,179,7,23, +198,2,39,23,200,2,248,2,56,249,22,179,7,23,198,1,248,22,185,3,23, +201,1,250,2,64,195,23,197,4,248,22,185,3,198,28,249,22,132,4,23,197, +2,23,196,4,248,22,92,193,28,249,22,140,9,7,47,249,22,161,7,23,197, +2,23,199,2,249,22,82,250,22,179,7,23,198,2,39,23,200,2,27,249,22, +179,7,23,198,1,248,22,185,3,23,201,1,19,248,22,160,7,23,195,2,250, +2,60,23,197,1,23,196,4,39,2,27,248,22,185,3,23,197,1,28,249,22, +132,4,23,195,2,23,197,4,248,22,92,194,28,249,22,140,9,7,47,249,22, +161,7,23,198,2,23,197,2,249,22,82,250,22,179,7,23,199,2,39,23,198, +2,27,249,22,179,7,23,199,1,248,22,185,3,23,199,1,19,248,22,160,7, +23,195,2,250,2,64,23,197,1,23,196,4,39,2,27,248,22,185,3,23,195, +1,28,249,22,132,4,23,195,2,23,198,4,248,22,92,195,28,249,22,140,9, +7,47,249,22,161,7,23,199,2,23,197,2,249,22,82,250,22,179,7,23,200, +2,39,23,198,2,248,2,56,249,22,179,7,23,200,1,248,22,185,3,23,199, +1,250,2,59,197,23,199,4,248,22,185,3,196,19,248,22,160,7,23,195,2, +28,249,22,158,20,39,23,195,4,248,22,92,194,28,249,22,140,9,7,47,249, +22,161,7,23,198,2,39,249,22,82,250,22,179,7,23,199,2,39,39,27,249, +22,179,7,23,199,1,40,19,248,22,160,7,23,195,2,250,2,57,23,197,1, +23,196,4,39,2,28,249,22,158,20,40,23,195,4,248,22,92,194,28,249,22, +140,9,7,47,249,22,161,7,23,198,2,40,249,22,82,250,22,179,7,23,199, +2,39,40,248,2,56,249,22,179,7,23,199,1,41,250,2,59,196,23,196,4, +41,2,28,249,22,132,4,23,197,2,23,196,4,248,22,92,193,28,249,22,140, +9,7,47,249,22,161,7,23,197,2,23,199,2,249,22,82,250,22,179,7,23, +198,2,39,23,200,2,248,2,56,249,22,179,7,23,198,1,248,22,185,3,23, +201,1,250,2,55,195,23,197,4,248,22,185,3,198,28,249,22,132,4,23,197, +2,23,196,4,248,22,92,193,28,249,22,140,9,7,47,249,22,161,7,23,197, +2,23,199,2,249,22,82,250,22,179,7,23,198,2,39,23,200,2,27,249,22, +179,7,23,198,1,248,22,185,3,23,201,1,19,248,22,160,7,23,195,2,250, +2,55,23,197,1,23,196,4,39,2,27,248,22,185,3,23,197,1,28,249,22, +132,4,23,195,2,23,197,4,248,22,92,194,28,249,22,140,9,7,47,249,22, +161,7,23,198,2,23,197,2,249,22,82,250,22,179,7,23,199,2,39,23,198, +2,248,2,56,249,22,179,7,23,199,1,248,22,185,3,23,199,1,250,2,54, +196,23,198,4,248,22,185,3,196,32,70,88,148,39,40,58,11,2,31,222,33, +71,28,248,22,90,248,22,84,23,195,2,249,22,7,9,248,22,173,20,23,196, +1,90,144,41,11,89,146,41,39,11,27,248,22,174,20,23,197,2,28,248,22, +90,248,22,84,23,195,2,249,22,7,9,248,22,173,20,195,90,144,41,11,89, +146,41,39,11,27,248,22,174,20,196,28,248,22,90,248,22,84,23,195,2,249, +22,7,9,248,22,173,20,195,90,144,41,11,89,146,41,39,11,248,2,70,248, +22,174,20,196,249,22,7,249,22,82,248,22,173,20,199,196,195,249,22,7,249, +22,82,248,22,173,20,199,196,195,249,22,7,249,22,82,248,22,173,20,23,200, +1,23,197,1,23,196,1,27,19,248,22,160,7,23,196,2,250,2,54,23,198, +1,23,196,4,39,2,28,23,195,1,192,28,248,22,90,248,22,84,23,195,2, +249,22,7,9,248,22,173,20,23,196,1,27,248,22,174,20,23,195,2,90,144, +41,11,89,146,41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7,9, +248,22,173,20,23,198,1,27,248,22,174,20,23,197,2,90,144,41,11,89,146, +41,39,11,28,248,22,90,248,22,84,23,197,2,249,22,7,9,248,22,173,20, +197,90,144,41,11,89,146,41,39,11,248,2,70,248,22,174,20,198,249,22,7, +249,22,82,248,22,173,20,201,196,195,249,22,7,249,22,82,248,22,173,20,23, +203,1,196,195,249,22,7,249,22,82,248,22,173,20,23,201,1,23,197,1,23, +196,1,248,22,148,12,252,22,166,10,248,22,167,4,23,200,2,248,22,163,4, +23,200,2,248,22,164,4,23,200,2,248,22,165,4,23,200,2,248,22,166,4, +23,200,1,28,24,194,2,12,20,13,144,80,144,39,41,40,80,143,39,59,89, +146,40,40,10,249,22,134,5,21,94,2,32,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,27,28,23,195,2,28,249,22,173,9,23,197,2,80,143,42,55,86,94,23, +195,1,80,143,40,56,27,248,22,157,5,23,197,2,27,28,248,22,80,23,195, +2,248,22,173,20,23,195,1,23,194,1,28,248,22,182,15,23,194,2,90,144, +42,11,89,146,42,39,11,248,22,139,16,23,197,1,86,95,20,18,144,11,80, +143,45,55,199,20,18,144,11,80,143,45,56,192,192,11,86,94,23,195,1,11, +28,23,193,2,192,86,94,23,193,1,27,247,22,181,5,28,23,193,2,192,86, +94,23,193,1,247,22,160,16,90,144,42,11,89,146,42,39,11,248,22,139,16, +23,198,2,86,95,23,195,1,23,193,1,28,249,22,175,16,0,11,35,114,120, +34,91,46,93,115,115,36,34,248,22,187,15,23,197,1,249,80,144,44,61,42, +23,199,1,2,26,196,249,80,144,41,57,42,195,10,249,22,12,23,196,1,80, +144,41,54,41,86,96,28,248,22,155,5,23,196,2,12,250,22,186,11,2,22, +6,21,21,114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97, +116,104,63,23,198,2,28,28,23,196,2,248,22,150,14,23,197,2,10,12,250, +22,186,11,2,22,6,20,20,40,111,114,47,99,32,35,102,32,110,97,109,101, +115,112,97,99,101,63,41,23,199,2,28,24,193,2,248,24,194,1,23,196,2, +86,94,23,193,1,12,27,250,22,160,2,80,144,44,44,41,248,22,136,17,247, +22,149,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22,82, +247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,144,46,44,41,248,22, +136,17,247,22,149,14,195,192,86,94,250,22,158,2,248,22,83,23,197,2,23, +200,2,70,100,101,99,108,97,114,101,100,28,23,198,2,27,28,248,22,80,248, +22,157,5,23,200,2,248,22,156,5,248,22,83,248,22,157,5,23,201,1,23, +198,1,27,250,22,160,2,80,144,47,44,41,248,22,136,17,23,204,1,11,28, +23,193,2,27,250,22,160,2,248,22,84,23,198,1,23,198,2,11,28,23,193, +2,250,22,158,2,248,22,174,20,23,200,1,23,198,1,23,196,1,12,12,12, +86,94,251,22,143,12,247,22,147,12,67,101,114,114,111,114,6,69,69,100,101, +102,97,117,108,116,32,109,111,100,117,108,101,32,110,97,109,101,32,114,101,115, +111,108,118,101,114,32,99,97,108,108,101,100,32,119,105,116,104,32,116,104,114, +101,101,32,97,114,103,117,109,101,110,116,115,32,40,100,101,112,114,101,99,97, +116,101,100,41,11,251,24,197,1,23,198,1,23,199,1,23,200,1,10,32,81, +88,148,39,43,57,11,2,31,222,33,82,28,248,22,90,23,197,2,28,248,22, +90,195,193,249,22,82,195,248,22,97,197,28,249,22,175,9,248,22,83,23,199, +2,2,34,28,248,22,90,23,196,2,86,95,23,196,1,23,195,1,250,22,182, +11,2,22,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,93,2,35,28,249,22,175,9,23,202,2,2,36,23,200,1,28,248, +22,182,15,23,201,2,23,200,1,249,22,92,28,248,22,66,23,203,2,2,5, +2,37,23,202,1,23,199,1,251,2,81,196,197,248,22,84,199,248,22,174,20, +200,251,2,81,196,197,249,22,82,248,22,173,20,202,200,248,22,174,20,200,251, +2,81,197,196,9,197,27,250,22,180,7,27,28,23,198,2,28,247,22,135,12, +248,80,144,47,58,42,23,199,2,11,11,28,192,192,6,29,29,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,6,2,2,58,32,250,22,186,16,0,7,35,114,120,34,92,110, +34,23,203,1,249,22,141,8,6,23,23,10,32,32,102,111,114,32,109,111,100, +117,108,101,32,112,97,116,104,58,32,126,115,10,23,203,2,248,22,178,13,28, +23,195,2,251,22,186,12,23,198,1,247,22,27,248,22,92,23,200,1,23,200, +1,86,94,23,195,1,250,22,149,13,23,197,1,247,22,27,23,199,1,19,248, +22,160,7,194,28,249,22,162,20,23,195,4,42,28,249,22,173,9,7,46,249, +22,161,7,197,249,22,188,3,23,199,4,42,28,28,249,22,173,9,7,115,249, +22,161,7,197,249,22,188,3,23,199,4,41,249,22,173,9,7,115,249,22,161, +7,197,249,22,188,3,23,199,4,40,11,249,22,180,7,250,22,179,7,198,39, +249,22,188,3,23,200,4,42,2,39,193,193,193,2,28,249,22,163,7,194,2, +36,2,27,28,249,22,163,7,194,2,34,64,117,112,192,0,8,35,114,120,34, +91,46,93,34,32,88,88,148,8,36,40,50,11,2,31,222,33,89,28,248,22, +90,23,194,2,9,250,22,93,6,4,4,10,32,32,32,248,22,186,15,248,22, +105,23,198,2,248,2,88,248,22,174,20,23,198,1,28,249,22,175,9,248,22, +84,23,200,2,23,196,1,28,249,22,173,9,248,22,173,20,23,200,1,23,198, +1,251,22,182,11,2,22,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,197,1,249,22,1,22,180,7,248,2,88, +248,22,97,23,203,1,12,12,247,23,193,1,250,22,161,4,11,196,195,20,13, +144,80,144,49,53,41,249,22,82,249,22,82,23,206,1,23,201,1,23,203,1, +20,13,144,80,144,49,41,40,252,80,144,54,42,40,249,22,31,11,80,144,56, +41,40,22,131,5,23,204,2,22,133,5,248,28,23,199,2,20,20,94,88,148, +8,36,40,49,11,9,223,6,33,92,23,199,1,86,94,23,199,1,22,7,28, +248,22,66,23,201,2,23,200,1,28,28,248,22,80,23,201,2,249,22,173,9, +248,22,173,20,23,203,2,2,32,11,23,200,1,86,94,23,200,1,28,248,22, +155,5,23,206,2,27,248,22,157,5,23,207,2,28,248,22,66,193,249,22,92, +2,5,194,192,23,205,2,249,247,22,180,5,23,198,1,27,248,22,70,248,22, +186,15,23,203,1,28,23,198,2,28,250,22,160,2,248,22,173,20,23,207,1, +23,205,1,11,249,22,82,11,199,249,22,82,194,199,192,86,96,28,248,22,165, +5,23,196,2,12,28,248,22,159,4,23,198,2,250,22,184,11,11,6,15,15, +98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,22,186, +11,2,22,2,33,23,198,2,28,28,23,196,2,248,22,155,5,23,197,2,10, +12,250,22,186,11,2,22,6,31,31,40,111,114,47,99,32,35,102,32,114,101, +115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,63,41,23, +199,2,28,28,23,197,2,248,22,159,4,23,198,2,10,12,250,22,186,11,2, +22,6,17,17,40,111,114,47,99,32,35,102,32,115,121,110,116,97,120,63,41, +23,200,2,27,32,0,88,148,39,41,50,11,78,102,108,97,116,116,101,110,45, +115,117,98,45,112,97,116,104,222,33,83,28,28,248,22,80,23,197,2,249,22, +173,9,248,22,173,20,23,199,2,2,5,11,86,98,23,199,1,23,198,1,23, +197,1,23,194,1,23,193,1,248,22,156,5,248,22,104,23,198,1,28,28,248, +22,80,23,197,2,28,249,22,173,9,248,22,173,20,23,199,2,2,35,28,248, +22,80,248,22,104,23,198,2,249,22,173,9,248,22,108,23,199,2,2,5,11, +11,11,86,97,23,199,1,23,198,1,23,197,1,23,194,1,248,22,156,5,249, +23,196,1,248,22,121,23,200,2,248,22,106,23,200,1,28,28,248,22,80,23, +197,2,28,249,22,173,9,248,22,173,20,23,199,2,2,35,28,28,249,22,175, +9,248,22,104,23,199,2,2,36,10,249,22,175,9,248,22,104,23,199,2,2, +34,28,23,197,2,27,248,22,157,5,23,199,2,28,248,22,66,193,10,28,248, +22,80,193,248,22,66,248,22,173,20,194,11,11,11,11,11,86,96,23,199,1, +23,198,1,23,194,1,27,248,22,157,5,23,199,1,248,22,156,5,249,23,197, +1,28,248,22,80,23,197,2,248,22,173,20,23,197,2,23,196,2,27,28,249, +22,175,9,248,22,104,23,204,2,2,34,248,22,174,20,201,248,22,106,201,28, +248,22,80,23,198,2,249,22,96,248,22,174,20,199,194,192,28,28,248,22,80, +23,197,2,249,22,173,9,248,22,173,20,23,199,2,2,38,11,86,94,23,193, +1,86,94,248,80,144,42,8,28,42,23,195,2,253,24,200,1,23,202,1,23, +203,1,23,204,1,23,205,1,11,80,143,47,59,28,28,248,22,80,23,197,2, +28,249,22,173,9,248,22,173,20,23,199,2,2,35,28,248,22,80,248,22,104, +23,198,2,249,22,173,9,248,22,108,23,199,2,2,38,11,11,11,86,94,23, +193,1,86,94,248,80,144,42,8,28,42,23,195,2,253,24,200,1,248,22,104, +23,203,2,23,203,1,23,204,1,23,205,1,248,22,106,23,203,1,80,143,47, +59,86,94,23,194,1,27,88,148,8,36,40,57,8,240,0,0,8,0,1,19, +115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,225,3, +4,6,33,84,27,32,0,88,148,8,36,40,53,11,69,115,115,45,62,114,107, +116,222,33,85,27,28,248,22,80,23,200,2,28,249,22,173,9,2,35,248,22, +173,20,23,202,2,27,248,22,104,23,201,2,28,28,249,22,175,9,23,195,2, +2,36,10,249,22,175,9,23,195,2,2,34,86,94,23,193,1,28,23,201,2, +27,248,22,157,5,23,203,2,28,248,22,80,193,248,22,173,20,193,192,250,22, +182,11,2,22,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,203,2,192,23,199,2,23,199,2,27, +28,248,22,80,23,201,2,28,249,22,173,9,2,35,248,22,173,20,23,203,2, +27,28,28,28,249,22,175,9,248,22,104,23,204,2,2,36,10,249,22,175,9, +248,22,104,23,204,2,2,34,23,202,2,11,27,248,22,157,5,23,204,2,27, +28,249,22,175,9,248,22,104,23,206,2,2,34,248,22,174,20,23,204,1,248, +22,106,23,204,1,28,248,22,80,23,195,2,249,23,202,1,248,22,173,20,23, +197,2,249,22,96,248,22,174,20,23,199,1,23,197,1,249,23,202,1,23,196, +1,23,195,1,249,23,200,1,2,36,28,249,22,175,9,248,22,104,23,206,2, +2,34,248,22,174,20,23,204,1,248,22,106,23,204,1,28,248,22,80,193,248, +22,174,20,193,11,86,95,23,200,1,23,197,1,11,86,95,23,200,1,23,197, +1,11,27,28,248,22,66,23,196,2,86,94,23,196,1,27,248,80,144,48,51, +42,249,22,82,23,199,2,248,22,136,17,247,22,149,14,28,23,193,2,192,86, +94,23,193,1,90,144,41,11,89,146,41,39,11,249,80,144,51,57,42,248,22, +73,23,201,2,11,27,28,248,22,90,23,195,2,2,40,249,22,180,7,23,197, +2,2,39,252,80,144,55,8,23,42,23,206,1,28,248,22,90,23,200,2,23, +200,1,86,94,23,200,1,248,22,83,23,200,2,28,248,22,90,23,200,2,86, +94,23,199,1,9,248,22,84,23,200,1,23,198,1,10,28,248,22,157,7,23, +196,2,86,94,23,197,1,27,248,80,144,48,8,29,42,23,204,2,27,248,80, +144,49,51,42,249,22,82,23,200,2,23,197,2,28,23,193,2,192,86,94,23, +193,1,90,144,41,11,89,146,41,39,11,249,80,144,52,57,42,23,201,2,11, +28,248,22,90,23,194,2,86,94,23,193,1,249,22,136,16,23,198,1,248,23, +203,1,23,197,1,250,22,1,22,136,16,23,199,1,249,22,96,249,22,2,32, +0,88,148,8,36,40,47,11,9,222,33,86,23,200,1,248,22,92,248,23,207, +1,23,201,1,28,248,22,182,15,23,196,2,86,95,23,197,1,23,196,1,248, +80,144,47,8,30,42,248,22,146,16,28,248,22,143,16,23,198,2,23,197,2, +249,22,144,16,23,199,2,248,80,144,51,8,29,42,23,207,2,28,249,22,173, +9,248,22,83,23,198,2,2,32,27,248,80,144,48,51,42,249,22,82,23,199, +2,248,22,136,17,247,22,149,14,28,23,193,2,192,86,94,23,193,1,90,144, +41,11,89,146,41,39,11,249,80,144,51,57,42,248,22,104,23,201,2,11,27, +28,248,22,90,248,22,106,23,201,2,28,248,22,90,23,195,2,249,22,179,16, +2,87,23,197,2,11,10,27,28,23,194,2,248,23,202,1,23,197,2,28,248, +22,90,23,196,2,86,94,23,201,1,2,40,28,249,22,179,16,2,87,23,198, +2,248,23,202,1,23,197,2,86,94,23,201,1,249,22,180,7,23,198,2,2, +39,27,28,23,195,1,86,94,23,197,1,249,22,96,28,248,22,90,248,22,106, +23,205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,96,249,22,2, +80,144,58,8,31,42,248,22,106,23,208,2,23,198,1,28,248,22,90,23,197, +2,86,94,23,196,1,248,22,92,23,198,1,86,94,23,197,1,23,196,1,252, +80,144,57,8,23,42,23,208,1,248,22,83,23,199,2,248,22,174,20,23,199, +1,23,199,1,10,86,95,23,197,1,23,196,1,28,249,22,173,9,248,22,173, +20,23,198,2,2,37,248,80,144,47,8,30,42,248,22,146,16,249,22,144,16, +248,22,148,16,248,22,104,23,201,2,248,80,144,51,8,29,42,23,207,2,12, +86,94,28,28,248,22,182,15,23,194,2,10,248,22,188,8,23,194,2,12,28, +23,203,2,250,22,184,11,69,114,101,113,117,105,114,101,249,22,141,8,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,83,23,199,2,6,0,0,23,206,2,250,22,186,11,2,22,2,33, +23,198,2,27,28,248,22,188,8,23,195,2,249,22,129,9,23,196,2,39,249, +22,146,16,248,22,147,16,23,197,2,11,27,28,248,22,188,8,23,196,2,249, +22,129,9,23,197,2,40,248,80,144,49,8,24,42,23,195,2,90,144,42,11, +89,146,42,39,11,28,248,22,188,8,23,199,2,250,22,7,2,41,249,22,129, +9,23,203,2,41,2,41,248,22,139,16,23,198,2,86,95,23,195,1,23,193, +1,27,28,248,22,188,8,23,200,2,249,22,129,9,23,201,2,42,249,80,144, +54,61,42,23,197,2,5,0,27,28,248,22,188,8,23,201,2,249,22,129,9, +23,202,2,43,248,22,156,5,23,200,2,27,250,22,160,2,80,144,57,44,41, 248,22,136,17,247,22,149,14,11,27,28,23,194,2,23,194,1,86,94,23,194, 1,27,249,22,82,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,144, -46,44,41,248,22,136,17,247,22,149,14,195,192,86,94,250,22,158,2,248,22, -83,23,197,2,23,200,2,70,100,101,99,108,97,114,101,100,28,23,198,2,27, -28,248,22,80,248,22,157,5,23,200,2,248,22,156,5,248,22,83,248,22,157, -5,23,201,1,23,198,1,27,250,22,160,2,80,144,47,44,41,248,22,136,17, -23,204,1,11,28,23,193,2,27,250,22,160,2,248,22,84,23,198,1,23,198, -2,11,28,23,193,2,250,22,158,2,248,22,174,20,23,200,1,23,198,1,23, -196,1,12,12,12,86,94,251,22,143,12,247,22,147,12,67,101,114,114,111,114, -6,69,69,100,101,102,97,117,108,116,32,109,111,100,117,108,101,32,110,97,109, -101,32,114,101,115,111,108,118,101,114,32,99,97,108,108,101,100,32,119,105,116, -104,32,116,104,114,101,101,32,97,114,103,117,109,101,110,116,115,32,40,100,101, -112,114,101,99,97,116,101,100,41,11,251,24,197,1,23,198,1,23,199,1,23, -200,1,10,32,81,88,148,39,41,50,11,78,102,108,97,116,116,101,110,45,115, -117,98,45,112,97,116,104,222,33,84,32,82,88,148,39,43,57,11,2,31,222, -33,83,28,248,22,90,23,197,2,28,248,22,90,195,192,249,22,82,194,248,22, -97,197,28,249,22,175,9,248,22,83,23,199,2,2,35,28,248,22,90,23,196, -2,86,95,23,196,1,23,195,1,250,22,182,11,2,22,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,93,2,34,28,249,22, -175,9,23,201,2,2,36,23,199,1,28,248,22,182,15,23,200,2,23,199,1, -249,22,92,28,248,22,66,23,202,2,2,5,2,37,23,201,1,23,200,1,251, -2,82,196,197,248,22,84,199,248,22,174,20,200,251,2,82,196,197,249,22,82, -248,22,173,20,202,200,248,22,174,20,200,251,2,82,196,197,9,197,27,250,22, -180,7,27,28,23,199,2,28,247,22,135,12,248,80,144,47,58,42,23,200,2, -11,11,28,192,192,6,29,29,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,6,2,2,58,32, -250,22,186,16,0,7,35,114,120,34,92,110,34,23,203,1,249,22,141,8,6, -23,23,10,32,32,102,111,114,32,109,111,100,117,108,101,32,112,97,116,104,58, -32,126,115,10,23,202,2,248,22,178,13,28,23,196,2,251,22,186,12,23,198, -1,247,22,27,248,22,92,23,201,1,23,199,1,86,94,23,196,1,250,22,149, -13,23,197,1,247,22,27,23,198,1,32,86,88,148,8,36,40,53,11,69,115, -115,45,62,114,107,116,222,33,87,19,248,22,160,7,194,28,249,22,162,20,23, -195,4,42,28,249,22,173,9,7,46,249,22,161,7,197,249,22,188,3,23,199, -4,42,28,28,249,22,173,9,7,115,249,22,161,7,197,249,22,188,3,23,199, -4,41,249,22,173,9,7,115,249,22,161,7,197,249,22,188,3,23,199,4,40, -11,249,22,180,7,250,22,179,7,198,39,249,22,188,3,23,200,4,42,2,40, -193,193,193,2,28,249,22,163,7,194,2,36,2,27,28,249,22,163,7,194,2, -35,64,117,112,192,0,8,35,114,120,34,91,46,93,34,32,90,88,148,8,36, -40,50,11,2,31,222,33,91,28,248,22,90,23,194,2,9,250,22,93,6,4, -4,10,32,32,32,248,22,186,15,248,22,105,23,198,2,248,2,90,248,22,174, -20,23,198,1,28,249,22,175,9,248,22,84,23,200,2,23,197,1,28,249,22, -173,9,248,22,173,20,23,200,1,23,196,1,251,22,182,11,2,22,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,180,7,248,2,90,248,22,97,23,201,1,12,12,247,23, -193,1,250,22,161,4,11,196,195,20,13,144,80,144,49,53,41,249,22,82,249, -22,82,23,198,1,23,202,1,23,195,1,20,13,144,80,144,49,41,40,252,80, -144,54,42,40,249,22,31,11,80,144,56,41,40,22,131,5,23,201,2,22,133, -5,248,28,23,208,2,20,20,94,88,148,8,36,40,49,11,9,223,15,33,94, -23,208,1,86,94,23,208,1,22,7,28,248,22,66,23,207,2,23,206,1,28, -28,248,22,80,23,207,2,249,22,173,9,248,22,173,20,23,209,2,2,32,11, -23,206,1,86,94,23,206,1,28,248,22,155,5,23,203,2,27,248,22,157,5, -23,204,2,28,248,22,66,193,249,22,92,2,5,194,192,23,202,2,249,247,22, -180,5,23,201,1,27,248,22,70,248,22,186,15,23,202,1,28,23,204,2,28, -250,22,160,2,248,22,173,20,23,202,1,23,202,1,11,249,22,82,11,205,249, -22,82,194,205,192,86,96,28,248,22,165,5,23,196,2,12,28,248,22,159,4, -23,198,2,250,22,184,11,11,6,15,15,98,97,100,32,109,111,100,117,108,101, -32,112,97,116,104,23,200,2,250,22,186,11,2,22,2,33,23,198,2,28,28, -23,196,2,248,22,155,5,23,197,2,10,12,250,22,186,11,2,22,6,31,31, -40,111,114,47,99,32,35,102,32,114,101,115,111,108,118,101,100,45,109,111,100, -117,108,101,45,112,97,116,104,63,41,23,199,2,28,28,23,197,2,248,22,159, -4,23,198,2,10,12,250,22,186,11,2,22,6,17,17,40,111,114,47,99,32, -35,102,32,115,121,110,116,97,120,63,41,23,200,2,28,28,248,22,80,23,196, -2,249,22,173,9,248,22,173,20,23,198,2,2,5,11,86,97,23,198,1,23, -197,1,23,196,1,23,193,1,248,22,156,5,248,22,104,23,197,1,28,28,248, -22,80,23,196,2,28,249,22,173,9,248,22,173,20,23,198,2,2,34,28,248, -22,80,248,22,104,23,197,2,249,22,173,9,248,22,108,23,198,2,2,5,11, -11,11,86,97,23,198,1,23,197,1,23,196,1,23,193,1,248,22,156,5,249, -2,81,248,22,121,23,199,2,248,22,106,23,199,1,28,28,248,22,80,23,196, -2,28,249,22,173,9,248,22,173,20,23,198,2,2,34,28,28,249,22,175,9, -248,22,104,23,198,2,2,36,10,249,22,175,9,248,22,104,23,198,2,2,35, -28,23,196,2,27,248,22,157,5,23,198,2,28,248,22,66,193,10,28,248,22, -80,193,248,22,66,248,22,173,20,194,11,11,11,11,11,86,96,23,198,1,23, -197,1,23,193,1,27,248,22,157,5,23,198,1,248,22,156,5,249,2,81,28, -248,22,80,23,197,2,248,22,173,20,23,197,2,23,196,2,27,28,249,22,175, -9,248,22,104,23,203,2,2,35,248,22,174,20,200,248,22,106,200,28,248,22, -80,23,198,2,249,22,96,248,22,174,20,199,194,192,28,28,248,22,80,23,196, -2,249,22,173,9,248,22,173,20,23,198,2,2,38,11,86,94,248,80,144,41, -8,28,42,23,194,2,253,24,199,1,23,201,1,23,202,1,23,203,1,23,204, -1,11,80,143,46,59,28,28,248,22,80,23,196,2,28,249,22,173,9,248,22, -173,20,23,198,2,2,34,28,248,22,80,248,22,104,23,197,2,249,22,173,9, -248,22,108,23,198,2,2,38,11,11,11,86,94,248,80,144,41,8,28,42,23, -194,2,253,24,199,1,248,22,104,23,202,2,23,202,1,23,203,1,23,204,1, -248,22,106,23,202,1,80,143,46,59,86,94,23,193,1,27,88,148,8,36,40, -57,8,240,0,0,8,0,1,19,115,104,111,119,45,99,111,108,108,101,99,116, -105,111,110,45,101,114,114,225,2,5,3,33,85,27,28,248,22,80,23,198,2, -28,249,22,173,9,2,34,248,22,173,20,23,200,2,27,248,22,104,23,199,2, -28,28,249,22,175,9,23,195,2,2,36,10,249,22,175,9,23,195,2,2,35, -86,94,23,193,1,28,23,199,2,27,248,22,157,5,23,201,2,28,248,22,80, -193,248,22,173,20,193,192,250,22,182,11,2,22,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,80,23,199,2,28,249,22,173,9, -2,34,248,22,173,20,23,201,2,27,28,28,28,249,22,175,9,248,22,104,23, -202,2,2,36,10,249,22,175,9,248,22,104,23,202,2,2,35,23,200,2,11, -27,248,22,157,5,23,202,2,27,28,249,22,175,9,248,22,104,23,204,2,2, -35,248,22,174,20,23,202,1,248,22,106,23,202,1,28,248,22,80,23,195,2, -249,2,81,248,22,173,20,23,197,2,249,22,96,248,22,174,20,23,199,1,23, -197,1,249,2,81,23,196,1,23,195,1,249,2,81,2,36,28,249,22,175,9, -248,22,104,23,204,2,2,35,248,22,174,20,23,202,1,248,22,106,23,202,1, -28,248,22,80,193,248,22,174,20,193,11,86,94,23,198,1,11,86,94,23,198, -1,11,27,28,248,22,66,23,196,2,27,248,80,144,46,51,42,249,22,82,23, -199,2,248,22,136,17,247,22,149,14,28,23,193,2,192,86,94,23,193,1,90, -144,41,11,89,146,41,39,11,249,80,144,49,57,42,248,22,73,23,201,2,11, -27,28,248,22,90,23,195,2,2,39,249,22,180,7,23,197,2,2,40,252,80, -144,53,8,23,42,23,205,1,28,248,22,90,23,200,2,23,200,1,86,94,23, -200,1,248,22,83,23,200,2,28,248,22,90,23,200,2,86,94,23,199,1,9, -248,22,84,23,200,1,23,198,1,10,28,248,22,157,7,23,196,2,86,94,23, -196,1,27,248,80,144,46,8,29,42,23,202,2,27,248,80,144,47,51,42,249, -22,82,23,200,2,23,197,2,28,23,193,2,192,86,94,23,193,1,90,144,41, -11,89,146,41,39,11,249,80,144,50,57,42,23,201,2,11,28,248,22,90,23, -194,2,86,94,23,193,1,249,22,136,16,23,198,1,248,2,86,23,197,1,250, -22,1,22,136,16,23,199,1,249,22,96,249,22,2,32,0,88,148,8,36,40, -47,11,9,222,33,88,23,200,1,248,22,92,248,2,86,23,201,1,28,248,22, -182,15,23,196,2,86,94,23,196,1,248,80,144,45,8,30,42,248,22,146,16, -28,248,22,143,16,23,198,2,23,197,2,249,22,144,16,23,199,2,248,80,144, -49,8,29,42,23,205,2,28,249,22,173,9,248,22,83,23,198,2,2,32,27, -248,80,144,46,51,42,249,22,82,23,199,2,248,22,136,17,247,22,149,14,28, -23,193,2,192,86,94,23,193,1,90,144,41,11,89,146,41,39,11,249,80,144, -49,57,42,248,22,104,23,201,2,11,27,28,248,22,90,248,22,106,23,201,2, -28,248,22,90,23,195,2,249,22,179,16,2,89,23,197,2,11,10,27,28,23, -194,2,248,2,86,23,197,2,28,248,22,90,23,196,2,2,39,28,249,22,179, -16,2,89,23,198,2,248,2,86,23,197,2,249,22,180,7,23,198,2,2,40, -27,28,23,195,1,86,94,23,197,1,249,22,96,28,248,22,90,248,22,106,23, -205,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,96,249,22,2,80, -144,56,8,31,42,248,22,106,23,208,2,23,198,1,28,248,22,90,23,197,2, -86,94,23,196,1,248,22,92,23,198,1,86,94,23,197,1,23,196,1,252,80, -144,55,8,23,42,23,207,1,248,22,83,23,199,2,248,22,174,20,23,199,1, -23,199,1,10,86,94,23,196,1,28,249,22,173,9,248,22,173,20,23,198,2, -2,37,248,80,144,45,8,30,42,248,22,146,16,249,22,144,16,248,22,148,16, -248,22,104,23,201,2,248,80,144,49,8,29,42,23,205,2,12,86,94,28,28, -248,22,182,15,23,194,2,10,248,22,188,8,23,194,2,12,28,23,201,2,250, -22,184,11,69,114,101,113,117,105,114,101,249,22,141,8,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,83, -23,199,2,6,0,0,23,204,2,250,22,186,11,2,22,2,33,23,198,2,27, -28,248,22,188,8,23,195,2,249,22,129,9,23,196,2,39,249,22,146,16,248, -22,147,16,23,197,2,11,27,28,248,22,188,8,23,196,2,249,22,129,9,23, -197,2,40,248,80,144,47,8,24,42,23,195,2,90,144,42,11,89,146,42,39, -11,28,248,22,188,8,23,199,2,250,22,7,2,41,249,22,129,9,23,203,2, -41,2,41,248,22,139,16,23,198,2,86,95,23,195,1,23,193,1,27,28,248, -22,188,8,23,200,2,249,22,129,9,23,201,2,42,249,80,144,52,61,42,23, -197,2,5,0,27,28,248,22,188,8,23,201,2,249,22,129,9,23,202,2,43, -248,22,156,5,23,200,2,27,250,22,160,2,80,144,55,44,41,248,22,136,17, -247,22,149,14,11,27,28,23,194,2,23,194,1,86,94,23,194,1,27,249,22, -82,247,22,140,2,247,22,140,2,86,94,250,22,158,2,80,144,57,44,41,248, -22,136,17,247,22,149,14,195,192,27,28,23,204,2,248,22,156,5,249,22,82, -248,22,157,5,23,200,2,23,207,2,23,196,2,86,95,28,23,212,2,28,250, -22,160,2,248,22,83,23,198,2,195,11,86,96,23,211,1,23,204,1,23,194, -1,12,27,251,22,31,11,80,144,59,53,41,9,28,248,22,15,80,144,60,54, -41,80,144,59,54,41,247,22,17,27,248,22,136,17,247,22,149,14,86,94,249, -22,3,88,148,8,36,40,57,11,9,226,13,12,2,3,33,92,23,196,2,248, -28,248,22,15,80,144,58,54,41,32,0,88,148,39,40,45,11,9,222,33,93, -80,144,57,8,32,42,20,20,98,88,148,39,39,8,25,8,240,12,64,0,0, -9,233,18,21,14,15,12,11,7,6,4,1,2,33,95,23,195,1,23,194,1, -23,197,1,23,207,1,23,214,1,86,96,23,211,1,23,204,1,23,194,1,12, -28,28,248,22,188,8,23,204,1,86,94,23,212,1,11,28,23,212,1,28,248, -22,157,7,23,206,2,10,28,248,22,66,23,206,2,10,28,248,22,80,23,206, -2,249,22,173,9,248,22,173,20,23,208,2,2,32,11,11,249,80,144,56,52, -42,28,248,22,157,7,23,208,2,249,22,82,23,209,1,248,80,144,59,8,29, -42,23,215,1,86,94,23,212,1,249,22,82,23,209,1,248,22,136,17,247,22, -149,14,252,22,190,8,23,209,1,23,208,1,23,206,1,23,204,1,23,203,1, -12,192,86,96,20,18,144,11,80,143,39,59,248,80,144,40,8,27,40,249,22, -31,11,80,144,42,41,40,248,22,130,5,80,144,40,60,41,248,22,180,5,80, -144,40,40,42,248,22,148,15,80,144,40,48,42,20,18,144,11,80,143,39,59, -248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,20,18,144,11,80, -143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40,145,39, -9,20,122,145,2,1,39,16,1,11,16,0,20,27,15,56,9,2,2,2,2, -29,11,11,11,11,11,11,11,9,9,11,11,11,10,41,80,143,39,39,20,122, -145,2,1,44,16,28,2,3,2,4,30,2,6,1,20,112,97,114,97,109,101, -116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6,30,2,6,1,23, -101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105, -111,110,11,4,30,2,7,74,112,97,116,104,45,115,116,114,105,110,103,63,42, -196,15,2,8,30,2,7,73,114,101,114,111,111,116,45,112,97,116,104,44,196, -16,30,2,7,77,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,44, -196,12,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2, -18,2,19,2,20,2,21,2,22,30,2,7,1,19,112,97,116,104,45,114,101, -112,108,97,99,101,45,115,117,102,102,105,120,44,196,14,30,2,7,75,102,105, -110,100,45,99,111,108,45,102,105,108,101,49,196,4,30,2,7,78,110,111,114, -109,97,108,45,99,97,115,101,45,112,97,116,104,42,196,11,2,23,2,24,30, -2,6,76,114,101,112,97,114,97,109,101,116,101,114,105,122,101,11,7,16,0, -40,42,39,16,0,39,16,16,2,15,2,16,2,8,2,12,2,17,2,18,2, -11,2,4,2,10,2,3,2,20,2,13,2,14,2,9,2,19,2,22,55,11, -11,11,16,3,2,23,2,21,2,24,16,3,11,11,11,16,3,2,23,2,21, -2,24,42,42,40,12,11,11,16,0,16,0,16,0,39,39,11,12,11,11,16, -0,16,0,16,0,39,39,16,24,20,15,16,2,248,22,184,8,71,115,111,45, -115,117,102,102,105,120,80,144,39,39,40,20,15,16,2,88,148,39,41,8,39, -8,189,3,2,4,223,0,33,50,80,144,39,40,40,20,15,16,2,32,0,88, -148,8,36,44,55,11,2,9,222,33,51,80,144,39,47,40,20,15,16,2,20, -28,143,32,0,88,148,8,36,40,45,11,2,10,222,192,32,0,88,148,8,36, -40,45,11,2,10,222,192,80,144,39,48,40,20,15,16,2,247,22,143,2,80, -144,39,44,40,20,15,16,2,8,128,8,80,144,39,49,40,20,15,16,2,249, -22,189,8,8,128,8,11,80,144,39,50,40,20,15,16,2,88,148,8,36,40, -53,8,128,32,2,13,223,0,33,52,80,144,39,51,40,20,15,16,2,88,148, -8,36,41,57,8,128,32,2,14,223,0,33,53,80,144,39,52,40,20,15,16, -2,247,22,78,80,144,39,53,40,20,15,16,2,248,22,16,76,109,111,100,117, -108,101,45,108,111,97,100,105,110,103,80,144,39,54,40,20,15,16,2,11,80, -143,39,55,20,15,16,2,11,80,143,39,56,20,15,16,2,32,0,88,148,39, -41,60,11,2,19,222,33,72,80,144,39,57,40,20,15,16,2,32,0,88,148, -8,36,40,52,11,2,20,222,33,73,80,144,39,58,40,20,15,16,2,11,80, -143,39,59,20,15,16,2,88,149,8,34,40,48,8,240,4,0,16,0,1,21, -112,114,101,112,45,112,108,97,110,101,116,45,114,101,115,111,108,118,101,114,33, -40,224,1,0,33,74,80,144,39,8,28,42,20,15,16,2,88,148,39,40,53, -8,240,0,0,3,0,69,103,101,116,45,100,105,114,223,0,33,75,80,144,39, -8,29,42,20,15,16,2,88,148,39,40,52,8,240,0,0,64,0,74,112,97, -116,104,45,115,115,45,62,114,107,116,223,0,33,76,80,144,39,8,30,42,20, -15,16,2,88,148,8,36,40,48,8,240,0,0,4,0,9,223,0,33,77,80, -144,39,8,31,42,20,15,16,2,88,148,39,40,48,8,240,0,128,0,0,9, -223,0,33,78,80,144,39,8,32,42,20,15,16,2,27,11,20,19,143,39,90, -144,40,10,89,146,40,39,10,20,26,96,2,22,88,148,8,36,41,57,8,32, -9,224,2,1,33,79,88,148,39,42,52,11,9,223,0,33,80,88,148,39,43, -8,32,16,4,8,240,44,240,0,0,8,240,220,241,0,0,40,39,9,224,2, -1,33,96,207,80,144,39,60,40,20,15,16,2,88,148,39,39,48,16,2,8, -134,8,8,176,32,2,23,223,0,33,97,80,144,39,8,25,40,20,15,16,2, -20,28,143,88,148,8,36,39,48,16,2,43,8,144,32,2,24,223,0,33,98, -88,148,8,36,39,48,16,2,43,8,144,32,2,24,223,0,33,99,80,144,39, -8,26,40,96,29,94,2,5,70,35,37,107,101,114,110,101,108,11,29,94,2, -5,71,35,37,109,105,110,45,115,116,120,11,2,7,2,6,9,9,9,39,9, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 9765); +59,44,41,248,22,136,17,247,22,149,14,195,192,27,28,23,204,2,248,22,156, +5,249,22,82,248,22,157,5,23,200,2,23,207,2,23,196,2,86,95,28,23, +214,2,28,250,22,160,2,248,22,83,23,198,2,195,11,86,96,23,213,1,23, +204,1,23,194,1,12,27,251,22,31,11,80,144,61,53,41,9,28,248,22,15, +80,144,8,23,54,41,80,144,61,54,41,247,22,17,27,248,22,136,17,247,22, +149,14,86,94,249,22,3,88,148,8,36,40,57,11,9,226,2,3,12,13,33, +90,23,196,2,248,28,248,22,15,80,144,60,54,41,32,0,88,148,39,40,45, +11,9,222,33,91,80,144,59,8,32,42,20,20,98,88,148,39,39,8,25,8, +240,12,64,0,0,9,233,20,1,2,4,6,7,11,12,14,15,23,33,93,23, +216,1,23,207,1,23,197,1,23,195,1,23,194,1,86,96,23,213,1,23,204, +1,23,194,1,12,28,28,248,22,188,8,23,204,1,86,94,23,214,1,11,28, +23,214,1,28,248,22,157,7,23,206,2,10,28,248,22,66,23,206,2,10,28, +248,22,80,23,206,2,249,22,173,9,248,22,173,20,23,208,2,2,32,11,11, +249,80,144,58,52,42,28,248,22,157,7,23,208,2,249,22,82,23,209,1,248, +80,144,61,8,29,42,23,217,1,86,94,23,214,1,249,22,82,23,209,1,248, +22,136,17,247,22,149,14,252,22,190,8,23,209,1,23,208,1,23,206,1,23, +204,1,23,203,1,12,192,86,96,20,18,144,11,80,143,39,59,248,80,144,40, +8,27,40,249,22,31,11,80,144,42,41,40,248,22,130,5,80,144,40,60,41, +248,22,180,5,80,144,40,40,42,248,22,148,15,80,144,40,48,42,20,18,144, +11,80,143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144,42,41,40, +20,18,144,11,80,143,39,59,248,80,144,40,8,27,40,249,22,31,11,80,144, +42,41,40,145,40,9,20,122,145,2,1,39,16,1,11,16,0,20,27,15,56, +9,2,2,2,2,29,11,11,11,11,11,11,11,9,9,11,11,11,10,42,80, +143,39,39,20,122,145,2,1,44,16,28,2,3,2,4,30,2,6,1,20,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,11,6, +30,2,6,1,23,101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114, +105,122,97,116,105,111,110,11,4,30,2,7,74,112,97,116,104,45,115,116,114, +105,110,103,63,42,196,15,2,8,30,2,7,73,114,101,114,111,111,116,45,112, +97,116,104,44,196,16,30,2,7,77,112,97,116,104,45,97,100,100,45,115,117, +102,102,105,120,44,196,12,2,9,2,10,2,11,2,12,2,13,2,14,2,15, +2,16,2,17,2,18,2,19,2,20,2,21,2,22,30,2,7,1,19,112,97, +116,104,45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,44,196,14,30, +2,7,75,102,105,110,100,45,99,111,108,45,102,105,108,101,49,196,4,30,2, +7,78,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,42,196,11, +2,23,2,24,30,2,6,76,114,101,112,97,114,97,109,101,116,101,114,105,122, +101,11,7,16,0,40,42,39,16,0,39,16,16,2,15,2,16,2,8,2,12, +2,17,2,18,2,11,2,4,2,10,2,3,2,20,2,13,2,14,2,9,2, +19,2,22,55,11,11,11,16,3,2,23,2,21,2,24,16,3,11,11,11,16, +3,2,23,2,21,2,24,42,42,40,12,11,11,16,0,16,0,16,0,39,39, +11,12,11,11,16,0,16,0,16,0,39,39,16,24,20,15,16,2,248,22,184, +8,71,115,111,45,115,117,102,102,105,120,80,144,39,39,40,20,15,16,2,88, +148,39,41,8,39,8,189,3,2,4,223,0,33,50,80,144,39,40,40,20,15, +16,2,32,0,88,148,8,36,44,55,11,2,9,222,33,51,80,144,39,47,40, +20,15,16,2,20,28,143,32,0,88,148,8,36,40,45,11,2,10,222,192,32, +0,88,148,8,36,40,45,11,2,10,222,192,80,144,39,48,40,20,15,16,2, +247,22,143,2,80,144,39,44,40,20,15,16,2,8,128,8,80,144,39,49,40, +20,15,16,2,249,22,189,8,8,128,8,11,80,144,39,50,40,20,15,16,2, +88,148,8,36,40,53,8,128,32,2,13,223,0,33,52,80,144,39,51,40,20, +15,16,2,88,148,8,36,41,57,8,128,32,2,14,223,0,33,53,80,144,39, +52,40,20,15,16,2,247,22,78,80,144,39,53,40,20,15,16,2,248,22,16, +76,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,144,39,54,40,20, +15,16,2,11,80,143,39,55,20,15,16,2,11,80,143,39,56,20,15,16,2, +32,0,88,148,39,41,60,11,2,19,222,33,72,80,144,39,57,40,20,15,16, +2,32,0,88,148,8,36,40,52,11,2,20,222,33,73,80,144,39,58,40,20, +15,16,2,11,80,143,39,59,20,15,16,2,88,149,8,34,40,48,8,240,4, +0,16,0,1,21,112,114,101,112,45,112,108,97,110,101,116,45,114,101,115,111, +108,118,101,114,33,40,224,1,0,33,74,80,144,39,8,28,42,20,15,16,2, +88,148,39,40,53,8,240,0,0,3,0,69,103,101,116,45,100,105,114,223,0, +33,75,80,144,39,8,29,42,20,15,16,2,88,148,39,40,52,8,240,0,0, +64,0,74,112,97,116,104,45,115,115,45,62,114,107,116,223,0,33,76,80,144, +39,8,30,42,20,15,16,2,88,148,8,36,40,48,8,240,0,0,4,0,9, +223,0,33,77,80,144,39,8,31,42,20,15,16,2,88,148,39,40,48,8,240, +0,128,0,0,9,223,0,33,78,80,144,39,8,32,42,20,15,16,2,27,11, +20,19,143,39,90,144,40,10,89,146,40,39,10,20,26,96,2,22,88,148,8, +36,41,57,8,32,9,224,2,1,33,79,88,148,39,42,52,11,9,223,0,33, +80,88,148,39,43,8,34,16,4,8,240,44,240,0,0,8,240,220,241,0,0, +40,39,9,224,2,1,33,94,207,80,144,39,60,40,20,15,16,2,88,148,39, +39,48,16,2,8,134,8,8,176,32,2,23,223,0,33,95,80,144,39,8,25, +40,20,15,16,2,20,28,143,88,148,8,36,39,48,16,2,43,8,144,32,2, +24,223,0,33,96,88,148,8,36,39,48,16,2,43,8,144,32,2,24,223,0, +33,97,80,144,39,8,26,40,96,29,94,2,5,70,35,37,107,101,114,110,101, +108,11,29,94,2,5,71,35,37,109,105,110,45,115,116,120,11,2,7,2,6, +9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 9812); } { - SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,54,46,52,46,48,46,56,84,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,17,0,0,0,1,0,0,8,0,18,0, -24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0,135,0,147, -0,231,0,238,0,8,1,0,0,199,1,0,0,3,1,5,105,110,115,112,48, -71,35,37,98,117,105,108,116,105,110,67,113,117,111,116,101,29,94,2,3,70, -35,37,107,101,114,110,101,108,11,29,94,2,3,70,35,37,101,120,112,111,98, -115,11,29,94,2,3,68,35,37,98,111,111,116,11,29,94,2,3,76,35,37, -112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,3,70,35,37,112, -97,114,97,109,122,11,29,94,2,3,71,35,37,110,101,116,119,111,114,107,11, -29,94,2,3,69,35,37,117,116,105,108,115,11,38,11,93,2,12,36,12,0, -39,38,13,93,143,16,3,39,2,14,2,2,39,36,14,1,150,40,143,2,15, -16,4,2,4,39,39,2,1,143,2,15,16,4,2,5,39,39,2,1,143,2, -15,16,4,2,6,39,39,2,1,143,2,15,16,4,2,7,39,39,2,1,143, -2,15,16,4,2,8,39,39,2,1,143,2,15,16,4,2,9,39,39,2,1, -143,2,15,16,4,2,10,39,39,2,1,16,0,38,15,143,2,14,2,11,18, -143,16,2,143,10,16,3,9,2,11,2,13,143,11,16,3,9,9,2,13,16, -3,9,9,9,145,39,9,20,122,145,2,1,39,16,1,11,16,0,20,27,15, -56,9,2,2,2,2,29,11,11,11,11,11,11,11,9,9,11,11,11,33,16, -39,80,143,39,39,20,122,145,2,1,39,16,0,16,0,40,42,39,16,0,39, -16,0,39,11,11,11,16,0,16,0,16,0,39,39,40,12,11,11,16,0,16, -0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,0,104,2, -4,2,5,29,94,2,3,71,35,37,102,111,114,101,105,103,110,11,29,94,2, -3,70,35,37,117,110,115,97,102,101,11,29,94,2,3,71,35,37,102,108,102, -120,110,117,109,11,2,6,2,7,2,8,2,9,2,10,29,94,2,3,69,35, -37,112,108,97,99,101,11,29,94,2,3,71,35,37,102,117,116,117,114,101,115, -11,9,9,9,39,9,0}; - EVAL_ONE_SIZED_STR((char *)expr, 531); + SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,8,54,46,52,46,48,46,49,51,84,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,1,0,0,8,0,18, +0,24,0,38,0,52,0,64,0,84,0,98,0,113,0,126,0,131,0,135,0, +147,0,231,0,238,0,8,1,0,0,199,1,0,0,3,1,5,105,110,115,112, +48,71,35,37,98,117,105,108,116,105,110,67,113,117,111,116,101,29,94,2,3, +70,35,37,107,101,114,110,101,108,11,29,94,2,3,70,35,37,101,120,112,111, +98,115,11,29,94,2,3,68,35,37,98,111,111,116,11,29,94,2,3,76,35, +37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,3,70,35,37, +112,97,114,97,109,122,11,29,94,2,3,71,35,37,110,101,116,119,111,114,107, +11,29,94,2,3,69,35,37,117,116,105,108,115,11,38,11,93,2,12,36,12, +0,39,38,13,93,143,16,3,39,2,14,2,2,39,36,14,1,150,40,143,2, +15,16,4,2,4,39,39,2,1,143,2,15,16,4,2,5,39,39,2,1,143, +2,15,16,4,2,6,39,39,2,1,143,2,15,16,4,2,7,39,39,2,1, +143,2,15,16,4,2,8,39,39,2,1,143,2,15,16,4,2,9,39,39,2, +1,143,2,15,16,4,2,10,39,39,2,1,16,0,38,15,143,2,14,2,11, +18,143,16,2,143,10,16,3,9,2,11,2,13,143,11,16,3,9,9,2,13, +16,3,9,9,9,145,40,9,20,122,145,2,1,39,16,1,11,16,0,20,27, +15,56,9,2,2,2,2,29,11,11,11,11,11,11,11,9,9,11,11,11,33, +16,40,80,143,39,39,20,122,145,2,1,39,16,0,16,0,40,42,39,16,0, +39,16,0,39,11,11,11,16,0,16,0,16,0,39,39,40,12,11,11,16,0, +16,0,16,0,39,39,11,12,11,11,16,0,16,0,16,0,39,39,16,0,104, +2,4,2,5,29,94,2,3,71,35,37,102,111,114,101,105,103,110,11,29,94, +2,3,70,35,37,117,110,115,97,102,101,11,29,94,2,3,71,35,37,102,108, +102,120,110,117,109,11,2,6,2,7,2,8,2,9,2,10,29,94,2,3,69, +35,37,112,108,97,99,101,11,29,94,2,3,71,35,37,102,117,116,117,114,101, +115,11,9,9,9,39,9,0}; + EVAL_ONE_SIZED_STR((char *)expr, 532); } diff --git a/racket/src/racket/src/eval.c b/racket/src/racket/src/eval.c index 99925364ae..375a305afc 100644 --- a/racket/src/racket/src/eval.c +++ b/racket/src/racket/src/eval.c @@ -2768,7 +2768,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, || (num_rands > prim->mu.maxa && prim->mina >= 0)) { scheme_wrong_count_m(prim->name, prim->mina, prim->mu.maxa, num_rands, rands, - prim->pp.flags & SCHEME_PRIM_IS_METHOD); + 0); return NULL; /* Shouldn't get here */ } @@ -3181,7 +3181,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands, || (num_rands > prim->maxa && prim->maxa >= 0)) { scheme_wrong_count_m(prim->name, prim->mina, prim->maxa, num_rands, rands, - prim->pp.flags & SCHEME_PRIM_IS_METHOD); + 0); return NULL; /* Shouldn't get here */ } diff --git a/racket/src/racket/src/fun.c b/racket/src/racket/src/fun.c index 8e8aff8c83..2f9ef1414a 100644 --- a/racket/src/racket/src/fun.c +++ b/racket/src/racket/src/fun.c @@ -1005,10 +1005,7 @@ scheme_make_closed_prim(Scheme_Closed_Prim *fun, void *data) void scheme_prim_is_method(Scheme_Object *o) { - if (SCHEME_CLSD_PRIMP(o)) - ((Scheme_Closed_Primitive_Proc *)o)->pp.flags |= SCHEME_PRIM_IS_METHOD; - else - ((Scheme_Primitive_Proc *)o)->pp.flags |= SCHEME_PRIM_IS_METHOD; + scheme_signal_error("no longer supported"); } int scheme_has_method_property(Scheme_Object *code) diff --git a/racket/src/racket/src/numarith.c b/racket/src/racket/src/numarith.c index a05222d94d..a15b76fc2b 100644 --- a/racket/src/racket/src/numarith.c +++ b/racket/src/racket/src/numarith.c @@ -92,44 +92,75 @@ void scheme_init_numarith(Scheme_Env *env) Scheme_Object *p; p = scheme_make_folding_prim(scheme_add1, "add1", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("add1", p, env); p = scheme_make_folding_prim(scheme_sub1, "sub1", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("sub1", p, env); p = scheme_make_folding_prim(plus, "+", 0, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("+", p, env); p = scheme_make_folding_prim(minus, "-", 1, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED | SCHEME_PRIM_IS_UNARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("-", p, env); p = scheme_make_folding_prim(mult, "*", 0, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("*", p, env); p = scheme_make_folding_prim(div_prim, "/", 1, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("/", p, env); p = scheme_make_folding_prim(scheme_abs, "abs", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_NUMBER + | SCHEME_PRIM_CLOSED_ON_REALS); scheme_add_global_constant("abs", p, env); p = scheme_make_folding_prim(quotient, "quotient", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_PRODUCES_REAL); scheme_add_global_constant("quotient", p, env); p = scheme_make_folding_prim(rem_prim, "remainder", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_PRODUCES_REAL); scheme_add_global_constant("remainder", p, env); scheme_add_global_constant("quotient/remainder", @@ -140,7 +171,9 @@ void scheme_init_numarith(Scheme_Env *env) env); p = scheme_make_folding_prim(scheme_modulo, "modulo", 2, 2, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_PRODUCES_REAL); scheme_add_global_constant("modulo", p, env); } diff --git a/racket/src/racket/src/number.c b/racket/src/racket/src/number.c index a24dda3990..a0c8b6baa4 100644 --- a/racket/src/racket/src/number.c +++ b/racket/src/racket/src/number.c @@ -61,6 +61,8 @@ READ_ONLY Scheme_Object *scheme_fixnum_p_proc; READ_ONLY Scheme_Object *scheme_flonum_p_proc; READ_ONLY Scheme_Object *scheme_extflonum_p_proc; +READ_ONLY Scheme_Object *scheme_real_p_proc; +READ_ONLY Scheme_Object *scheme_number_p_proc; /* locals */ static Scheme_Object *number_p (int argc, Scheme_Object *argv[]); @@ -472,7 +474,9 @@ scheme_init_number (Scheme_Env *env) #endif #endif + REGISTER_SO(scheme_number_p_proc); p = scheme_make_folding_prim(number_p, "number?", 1, 1, 1); + scheme_number_p_proc = p; SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("number?", p, env); @@ -481,11 +485,12 @@ scheme_init_number (Scheme_Env *env) SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("complex?", p, env); + REGISTER_SO(scheme_real_p_proc); p = scheme_make_folding_prim(real_p, "real?", 1, 1, 1); + scheme_real_p_proc = p; SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED | SCHEME_PRIM_IS_OMITABLE); scheme_add_global_constant("real?", p, env); - p = scheme_make_folding_prim(rational_p, "rational?", 1, 1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_OMITABLE); diff --git a/racket/src/racket/src/numcomp.c b/racket/src/racket/src/numcomp.c index 52c937e839..fc93708aeb 100644 --- a/racket/src/racket/src/numcomp.c +++ b/racket/src/racket/src/numcomp.c @@ -104,49 +104,71 @@ void scheme_init_numcomp(Scheme_Env *env) p = scheme_make_folding_prim(eq, "=", 2, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant("=", p, env); p = scheme_make_folding_prim(lt, "<", 2, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant("<", p, env); p = scheme_make_folding_prim(gt, ">", 2, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant(">", p, env); p = scheme_make_folding_prim(lt_eq, "<=", 2, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant("<=", p, env); p = scheme_make_folding_prim(gt_eq, ">=", 2, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant(">=", p, env); p = scheme_make_folding_prim(zero_p, "zero?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_WANTS_NUMBER + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant("zero?", p, env); p = scheme_make_folding_prim(positive_p, "positive?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant("positive?", p, env); p = scheme_make_folding_prim(negative_p, "negative?", 1, 1, 1); - SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED); + SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_UNARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS); scheme_add_global_constant("negative?", p, env); p = scheme_make_folding_prim(sch_max, "max", 1, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_REAL); scheme_add_global_constant("max", p, env); p = scheme_make_folding_prim(sch_min, "min", 1, -1, 1); SCHEME_PRIM_PROC_FLAGS(p) |= scheme_intern_prim_opt_flags(SCHEME_PRIM_IS_BINARY_INLINED - | SCHEME_PRIM_IS_NARY_INLINED); + | SCHEME_PRIM_IS_NARY_INLINED + | SCHEME_PRIM_WANTS_REAL + | SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS + | SCHEME_PRIM_PRODUCES_REAL); scheme_add_global_constant("min", p, env); } diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index ef0d86ff64..13f52e6079 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -149,7 +149,9 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in static Scheme_Object *optimize_clone(int single_use, Scheme_Object *obj, Optimize_Info *info, Scheme_Hash_Tree *var_map, int as_rator); -static int relevant_predicate(Scheme_Object *pred); +XFORM_NONGCING static int relevant_predicate(Scheme_Object *pred); +XFORM_NONGCING static int predicate_implies(Scheme_Object *pred1, Scheme_Object *pred2); +XFORM_NONGCING static int predicate_implies_not(Scheme_Object *pred1, Scheme_Object *pred2); static int single_valued_noncm_expression(Scheme_Object *expr, int fuel); static Scheme_Object *optimize_ignored(Scheme_Object *e, Optimize_Info *info, int expected_vals, int maybe_omittable, @@ -527,7 +529,8 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int flags, } if (scheme_is_functional_nonfailing_primitive(app->args[0], app->num_args, vals) - || scheme_is_struct_functional(app->args[0], app->num_args, opt_info, vals)) { + || scheme_is_struct_functional(app->args[0], app->num_args, opt_info, vals) + || (SCHEME_APPN_FLAGS(app) & APPN_FLAG_OMITTABLE)) { int i; for (i = app->num_args; i--; ) { if (!scheme_omittable_expr(app->args[i + 1], 1, fuel - 1, flags, opt_info, warn_info)) @@ -548,7 +551,8 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int flags, if (vtype == scheme_application2_type) { Scheme_App2_Rec *app = (Scheme_App2_Rec *)o; if (scheme_is_functional_nonfailing_primitive(app->rator, 1, vals) - || scheme_is_struct_functional(app->rator, 1, opt_info, vals)) { + || scheme_is_struct_functional(app->rator, 1, opt_info, vals) + || (SCHEME_APPN_FLAGS(app) & APPN_FLAG_OMITTABLE)) { if (scheme_omittable_expr(app->rand, 1, fuel - 1, flags, opt_info, warn_info)) return 1; } else if (SAME_OBJ(app->rator, scheme_make_vector_proc) @@ -572,7 +576,8 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int flags, if (vtype == scheme_application3_type) { Scheme_App3_Rec *app = (Scheme_App3_Rec *)o; if (scheme_is_functional_nonfailing_primitive(app->rator, 2, vals) - || scheme_is_struct_functional(app->rator, 2, opt_info, vals)) { + || scheme_is_struct_functional(app->rator, 2, opt_info, vals) + || (SCHEME_APPN_FLAGS(app) & APPN_FLAG_OMITTABLE)) { if (scheme_omittable_expr(app->rand1, 1, fuel - 1, flags, opt_info, warn_info) && scheme_omittable_expr(app->rand2, 1, fuel - 1, flags, opt_info, warn_info)) return 1; @@ -1399,6 +1404,12 @@ static int single_valued_noncm_expression(Scheme_Object *expr, int fuel) return single_valued_noncm_expression(seq->array[0], fuel - 1); } break; + case scheme_with_cont_mark_type: + { + Scheme_With_Continuation_Mark * wcm = (Scheme_With_Continuation_Mark *)expr; + return single_valued_noncm_expression(wcm->body, fuel - 1); + } + break; case scheme_ir_lambda_type: case scheme_case_lambda_sequence_type: case scheme_set_bang_type: @@ -1507,8 +1518,11 @@ static int movable_expression(Scheme_Object *expr, Optimize_Info *info, } break; case scheme_application_type: - can_move = is_movable_prim(((Scheme_App_Rec *)expr)->args[0], ((Scheme_App_Rec *)expr)->num_args, - cross_lambda, cross_k, info); + if (SCHEME_APPN_FLAGS((Scheme_App_Rec *)expr) & APPN_FLAG_OMITTABLE) + can_move = 1; + else + can_move = is_movable_prim(((Scheme_App_Rec *)expr)->args[0], ((Scheme_App_Rec *)expr)->num_args, + cross_lambda, cross_k, info); if (can_move) { int i; for (i = ((Scheme_App_Rec *)expr)->num_args; i--; ) { @@ -1521,7 +1535,10 @@ static int movable_expression(Scheme_Object *expr, Optimize_Info *info, } break; case scheme_application2_type: - can_move = is_movable_prim(((Scheme_App2_Rec *)expr)->rator, 1, cross_lambda, cross_k, info); + if (SCHEME_APPN_FLAGS((Scheme_App2_Rec *)expr) & APPN_FLAG_OMITTABLE) + can_move = 1; + else + can_move = is_movable_prim(((Scheme_App2_Rec *)expr)->rator, 1, cross_lambda, cross_k, info); if (can_move) { if (movable_expression(((Scheme_App2_Rec *)expr)->rand, info, cross_lambda, cross_k, cross_s, @@ -1530,7 +1547,10 @@ static int movable_expression(Scheme_Object *expr, Optimize_Info *info, } break; case scheme_application3_type: - can_move = is_movable_prim(((Scheme_App3_Rec *)expr)->rator, 2, cross_lambda, cross_k, info); + if (SCHEME_APPN_FLAGS((Scheme_App3_Rec *)expr) & APPN_FLAG_OMITTABLE) + can_move = 1; + else + can_move = is_movable_prim(((Scheme_App3_Rec *)expr)->rator, 2, cross_lambda, cross_k, info); if (can_move) { if (movable_expression(((Scheme_App3_Rec *)expr)->rand1, info, cross_lambda, cross_k, cross_s, @@ -2282,6 +2302,21 @@ static void reset_rator(Scheme_Object *app, Scheme_Object *a) } } +static void set_application_omittable(Scheme_Object *app, Scheme_Object *a) +{ + switch (SCHEME_TYPE(app)) { + case scheme_application_type: + SCHEME_APPN_FLAGS((Scheme_App_Rec *)app) |= APPN_FLAG_OMITTABLE; + break; + case scheme_application2_type: + SCHEME_APPN_FLAGS((Scheme_App2_Rec *)app) |= APPN_FLAG_OMITTABLE; + break; + case scheme_application3_type: + SCHEME_APPN_FLAGS((Scheme_App3_Rec *)app) |= APPN_FLAG_OMITTABLE; + break; + } +} + static Scheme_Object *check_app_let_rator(Scheme_Object *app, Scheme_Object *rator, Optimize_Info *info, int argc, int context) /* Convert ((let (....) E) arg ...) to (let (....) (E arg ...)) and @@ -2450,7 +2485,11 @@ int scheme_expr_produces_local_type(Scheme_Object *expr, int *_involves_k_cross) static Scheme_Object *rator_implies_predicate(Scheme_Object *rator, int argc) { if (SCHEME_PRIMP(rator)) { - if ((SAME_OBJ(rator, scheme_cons_proc) + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_PRODUCES_REAL) + return scheme_real_p_proc; + else if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_PRODUCES_NUMBER) + return scheme_number_p_proc; + else if ((SAME_OBJ(rator, scheme_cons_proc) || SAME_OBJ(rator, scheme_unsafe_cons_list_proc))) return scheme_pair_p_proc; else if (SAME_OBJ(rator, scheme_mcons_proc)) @@ -2476,7 +2515,7 @@ static Scheme_Object *rator_implies_predicate(Scheme_Object *rator, int argc) return scheme_void_p_proc; else if (SAME_OBJ(rator, scheme_procedure_specialize_proc)) return scheme_procedure_p_proc; - + { Scheme_Object *p; p = local_type_to_predicate(produces_local_type(rator, argc)); @@ -2524,6 +2563,14 @@ static Scheme_Object *expr_implies_predicate(Scheme_Object *expr, Optimize_Info { Scheme_App2_Rec *app = (Scheme_App2_Rec *)expr; + if (SCHEME_PRIMP(app->rator) + && SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_CLOSED_ON_REALS) { + Scheme_Object *p; + p = expr_implies_predicate(app->rand, info, NULL, fuel-1); + if (p && predicate_implies(p, scheme_real_p_proc)) + return scheme_real_p_proc; + } + return rator_implies_predicate(app->rator, 1); } break; @@ -2542,12 +2589,38 @@ static Scheme_Object *expr_implies_predicate(Scheme_Object *expr, Optimize_Info && IN_FIXNUM_RANGE_ON_ALL_PLATFORMS(SCHEME_INT_VAL(app->rand2)))) return scheme_fixnum_p_proc; } + + if (SCHEME_PRIMP(app->rator) + && SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_CLOSED_ON_REALS) { + Scheme_Object *p; + p = expr_implies_predicate(app->rand1, info, NULL, fuel-1); + if (p && predicate_implies(p, scheme_real_p_proc)) { + p = expr_implies_predicate(app->rand2, info, NULL, fuel-1); + if (p && predicate_implies(p, scheme_real_p_proc)) { + return scheme_real_p_proc; + } + } + } + return rator_implies_predicate(app->rator, 2); } break; case scheme_application_type: { Scheme_App_Rec *app = (Scheme_App_Rec *)expr; + + if (SCHEME_PRIMP(app->args[0]) + && SCHEME_PRIM_PROC_OPT_FLAGS(app->args[0]) & SCHEME_PRIM_CLOSED_ON_REALS) { + Scheme_Object *p; + int i; + for (i = 0; i < app->num_args; i++) { + p = expr_implies_predicate(app->args[i+1], info, NULL, fuel-1); + if (!p || !predicate_implies(p, scheme_real_p_proc)) + break; + } + if (i >= app->num_args) + return scheme_real_p_proc; + } return rator_implies_predicate(app->args[0], app->num_args); } @@ -2622,6 +2695,10 @@ static Scheme_Object *expr_implies_predicate(Scheme_Object *expr, Optimize_Info if (SCHEME_INTP(expr) && IN_FIXNUM_RANGE_ON_ALL_PLATFORMS(SCHEME_INT_VAL(expr))) return scheme_fixnum_p_proc; + if (SCHEME_REALP(expr)) + return scheme_real_p_proc; + if (SCHEME_NUMBERP(expr)) + return scheme_number_p_proc; if (SCHEME_NULLP(expr)) return scheme_null_p_proc; @@ -2911,32 +2988,53 @@ static int appn_flags(Scheme_Object *rator, Optimize_Info *info) return 0; } -static void check_known(Optimize_Info *info, Scheme_Object *app, - Scheme_Object *rator, Scheme_Object *rand, - const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe) -/* Replace the rator with an unsafe version if we know that it's ok. Alternatively, - the rator implies a check, so add type information for subsequent expressions. - If the rand has alredy a different type, mark that this will generate an error. - If unsafe is NULL then rator has no unsafe version, so only check the type. */ +static int check_known_variant(Optimize_Info *info, Scheme_Object *app, + Scheme_Object *rator, Scheme_Object *rand, + const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe, + Scheme_Object *implies_pred) +/* Replace the rator with an unsafe version if we know that it's ok: + if the argument is consistent with `expect_pred`; if `unsafe` is + #t, then just mark the application as omittable. Alternatively, the + rator implies a check, so add type information for subsequent + expressions: the argument is consistent with `implies_pred` (which + must be itself implied by `expected_pred`, but might be weaker). If + the rand has alredy an incompatible type, mark that this will + generate an error. If unsafe is NULL then rator has no unsafe + version, so only check the type. */ { - if (SCHEME_PRIMP(rator) && IS_NAMED_PRIM(rator, who)) { + if (SCHEME_PRIMP(rator) && (!who || IS_NAMED_PRIM(rator, who))) { Scheme_Object *pred; - + pred = expr_implies_predicate(rand, info, NULL, 5); if (pred) { - if (SAME_OBJ(pred, expect_pred)) { - if (unsafe) - reset_rator(app, unsafe); - } else { + if (predicate_implies(pred, expect_pred)) { + if (unsafe) { + if (SAME_OBJ(unsafe, scheme_true)) + set_application_omittable(app, unsafe); + else + reset_rator(app, unsafe); + } + return 1; + } else if (predicate_implies_not(pred, implies_pred)) { info->escapes = 1; } } else { if (SAME_TYPE(SCHEME_TYPE(rand), scheme_ir_local_type)) { if (!SCHEME_VAR(rand)->mutated) - add_type(info, rand, expect_pred); + add_type(info, rand, implies_pred); } } } + + return 0; +} + +static void check_known(Optimize_Info *info, Scheme_Object *app, + Scheme_Object *rator, Scheme_Object *rand, + const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe) +/* When the expected predicate for unsafe substitution is the same as the implied predicate. */ +{ + (void)check_known_variant(info, app, rator, rand, who, expect_pred, unsafe, expect_pred); } static void check_known_rator(Optimize_Info *info, Scheme_Object *rator) @@ -2946,7 +3044,7 @@ static void check_known_rator(Optimize_Info *info, Scheme_Object *rator) pred = expr_implies_predicate(rator, info, NULL, 5); if (pred) { - if (!SAME_OBJ(pred, scheme_procedure_p_proc)) + if (predicate_implies_not(pred, scheme_procedure_p_proc)) info->escapes = 1; } else { if (SAME_TYPE(SCHEME_TYPE(rator), scheme_ir_local_type)) { @@ -2956,28 +3054,13 @@ static void check_known_rator(Optimize_Info *info, Scheme_Object *rator) } } -static void check_known_try(Optimize_Info *info, Scheme_Object *app, - Scheme_Object *rator, Scheme_Object *rand, - const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe) -/* Replace the rator with an unsafe version if rand have the right type. - If not, don't save the type, nor mark this as an error */ -{ - if (SCHEME_PRIMP(rator) && IS_NAMED_PRIM(rator, who)) { - Scheme_Object *pred; - - pred = expr_implies_predicate(rand, info, NULL, 5); - if (pred && SAME_OBJ(pred, expect_pred)) - reset_rator(app, unsafe); - } -} - static void check_known_both_try(Optimize_Info *info, Scheme_Object *app, Scheme_Object *rator, Scheme_Object *rand1, Scheme_Object *rand2, const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe) /* Replace the rator with an unsafe version if both rands have the right type. If not, don't save the type, nor mark this as an error */ { - if (SCHEME_PRIMP(rator) && IS_NAMED_PRIM(rator, who)) { + if (SCHEME_PRIMP(rator) && (!who || IS_NAMED_PRIM(rator, who))) { Scheme_Object *pred1, *pred2; pred1 = expr_implies_predicate(rand1, info, NULL, 5); @@ -2990,16 +3073,55 @@ static void check_known_both_try(Optimize_Info *info, Scheme_Object *app, } } +static void check_known_both_variant(Optimize_Info *info, Scheme_Object *app, + Scheme_Object *rator, Scheme_Object *rand1, Scheme_Object *rand2, + const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe, + Scheme_Object *implies_pred) +{ + if (SCHEME_PRIMP(rator) && (!who || IS_NAMED_PRIM(rator, who))) { + int ok1; + ok1 = check_known_variant(info, app, rator, rand1, who, expect_pred, NULL, implies_pred); + check_known_variant(info, app, rator, rand2, who, expect_pred, (ok1 ? unsafe : NULL), implies_pred); + } +} + +static void check_known_both(Optimize_Info *info, Scheme_Object *app, + Scheme_Object *rator, Scheme_Object *rand1, Scheme_Object *rand2, + const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe) +{ + check_known_both_variant(info, app, rator, rand1, rand2, who, expect_pred, unsafe, expect_pred); +} + + +static void check_known_all(Optimize_Info *info, Scheme_Object *_app, + const char *who, Scheme_Object *expect_pred, Scheme_Object *unsafe) +{ + Scheme_App_Rec *app = (Scheme_App_Rec *)_app; + if (SCHEME_PRIMP(app->args[0]) && (!who || IS_NAMED_PRIM(app->args[0], who))) { + int ok_so_far = 1, i; + + for (i = 0; i < app->num_args; i++) { + if (!check_known_variant(info, (Scheme_Object *)app, app->args[0], app->args[i+1], who, expect_pred, + ((i == app->num_args - 1) && ok_so_far) ? unsafe : NULL, + expect_pred)) + ok_so_far = 0; + } + } +} + static Scheme_Object *finish_optimize_any_application(Scheme_Object *app, Scheme_Object *rator, int argc, Optimize_Info *info, int context) { check_known_rator(info, rator); - if ((context & OPT_CONTEXT_BOOLEAN) && !info->escapes) - if (rator_implies_predicate(rator, argc)){ - Scheme_Object *val = SAME_OBJ(rator, scheme_not_proc) ? scheme_false : scheme_true; - return make_discarding_sequence(app, val, info); - } + if ((context & OPT_CONTEXT_BOOLEAN) && !info->escapes) { + Scheme_Object *pred; + pred = rator_implies_predicate(rator, argc); + if (pred && predicate_implies_not(rator, scheme_not_proc)) + return make_discarding_sequence(app, scheme_true, info); + else if (pred && predicate_implies(rator, scheme_not_proc)) + return make_discarding_sequence(app, scheme_false, info); + } if (SAME_OBJ(rator, scheme_void_proc)) return make_discarding_sequence(app, scheme_void, info); @@ -3092,6 +3214,13 @@ static Scheme_Object *finish_optimize_application(Scheme_App_Rec *app, Optimize_ check_known(info, app_o, rator, rand1, "for-each", scheme_procedure_p_proc, NULL); check_known(info, app_o, rator, rand1, "andmap", scheme_procedure_p_proc, NULL); check_known(info, app_o, rator, rand1, "ormap", scheme_procedure_p_proc, NULL); + + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_WANTS_REAL) + check_known_all(info, app_o, NULL, scheme_real_p_proc, + (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS) ? scheme_true : NULL); + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_WANTS_NUMBER) + check_known_all(info, app_o, NULL, scheme_number_p_proc, + (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS) ? scheme_true : NULL); } } @@ -3143,11 +3272,9 @@ static Scheme_Object *try_reduce_predicate(Scheme_Object *rator, Scheme_Object * /* Change (pair? (list X complex-Y Z)) => (begin complex-Y #t), etc. It's especially nice to avoid the constructions. */ { - int matches; Scheme_Object *pred; - if (!relevant_predicate(rator) - && (!SAME_OBJ(rator, scheme_list_p_proc))) + if (!relevant_predicate(rator)) return NULL; pred = expr_implies_predicate(rand, info, NULL, 5); @@ -3155,19 +3282,12 @@ static Scheme_Object *try_reduce_predicate(Scheme_Object *rator, Scheme_Object * if (!pred) return NULL; - matches = SAME_OBJ(rator, pred); + if (predicate_implies(pred, rator)) + return make_discarding_sequence(rand, scheme_true, info); + else if (predicate_implies_not(pred, rator)) + return make_discarding_sequence(rand, scheme_false, info); - if (SAME_OBJ(rator, scheme_list_p_proc)) { - if (SAME_OBJ(pred, scheme_pair_p_proc)) { - /* a pair may be a list or not */ - return NULL; - } else { - /* otherwise, only null is a list */ - matches = SAME_OBJ(scheme_null_p_proc, pred); - } - } - - return make_discarding_sequence(rand, (matches ? scheme_true : scheme_false), info); + return NULL; } static Scheme_Object *check_ignored_call_cc(Scheme_Object *rator, Scheme_Object *rand, @@ -3481,8 +3601,8 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz /* Try to check the argument's type, and use the unsafe versions if possible. */ Scheme_Object *app_o = (Scheme_Object *)app; - check_known_try(info, app_o, rator, rand, "bitwise-not", scheme_fixnum_p_proc, scheme_unsafe_fxnot_proc); - check_known_try(info, app_o, rator, rand, "fxnot", scheme_fixnum_p_proc, scheme_unsafe_fxnot_proc); + check_known_variant(info, app_o, rator, rand, "bitwise-not", scheme_fixnum_p_proc, scheme_unsafe_fxnot_proc, scheme_real_p_proc); + check_known_variant(info, app_o, rator, rand, "fxnot", scheme_fixnum_p_proc, scheme_unsafe_fxnot_proc, scheme_real_p_proc); check_known(info, app_o, rator, rand, "car", scheme_pair_p_proc, scheme_unsafe_car_proc); check_known(info, app_o, rator, rand, "cdr", scheme_pair_p_proc, scheme_unsafe_cdr_proc); @@ -3492,6 +3612,13 @@ static Scheme_Object *finish_optimize_application2(Scheme_App2_Rec *app, Optimiz check_known(info, app_o, rator, rand, "unbox", scheme_box_p_proc, scheme_unsafe_unbox_proc); check_known(info, app_o, rator, rand, "vector-length", scheme_vector_p_proc, scheme_unsafe_vector_length_proc); + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_WANTS_REAL) + check_known(info, app_o, rator, rand, NULL, scheme_real_p_proc, + (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS) ? scheme_true : NULL); + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_WANTS_NUMBER) + check_known(info, app_o, rator, rand, NULL, scheme_number_p_proc, + (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS) ? scheme_true : NULL); + /* These operation don't have an unsafe replacement. Check to record types and detect errors: */ check_known(info, app_o, rator, rand, "caar", scheme_pair_p_proc, NULL); check_known(info, app_o, rator, rand, "cadr", scheme_pair_p_proc, NULL); @@ -3769,7 +3896,7 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz if (pred1) { pred2 = expr_implies_predicate(app->rand2, info, NULL, 5); if (pred2) { - if (!SAME_OBJ(pred1, pred2)) { + if (predicate_implies_not(pred1, pred2) || predicate_implies_not(pred2, pred1)) { info->preserves_marks = 1; info->single_result = 1; return make_discarding_sequence_3(app->rand1, app->rand2, scheme_false, info); @@ -3785,7 +3912,7 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz info->single_result = -info->single_result; } - /* Ad hoc optimization of (unsafe-fx+ 0), etc. */ + /* Ad hoc optimization of (unsafe-+ 0), etc. */ if (SCHEME_PRIMP(app->rator) && (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_UNSAFE_NONMUTATING)) { int z1, z2; @@ -3901,13 +4028,13 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz if (SCHEME_PRIMP(app->rator)) { Scheme_Object *app_o = (Scheme_Object *)app, *rator = app->rator, *rand1 = app->rand1, *rand2 = app->rand2; - check_known_both_try(info, app_o, rator, rand1, rand2, "bitwise-and", scheme_fixnum_p_proc, scheme_unsafe_fxand_proc); - check_known_both_try(info, app_o, rator, rand1, rand2, "bitwise-ior", scheme_fixnum_p_proc, scheme_unsafe_fxior_proc); - check_known_both_try(info, app_o, rator, rand1, rand2, "bitwise-xor", scheme_fixnum_p_proc, scheme_unsafe_fxxor_proc); + check_known_both_variant(info, app_o, rator, rand1, rand2, "bitwise-and", scheme_fixnum_p_proc, scheme_unsafe_fxand_proc, scheme_real_p_proc); + check_known_both_variant(info, app_o, rator, rand1, rand2, "bitwise-ior", scheme_fixnum_p_proc, scheme_unsafe_fxior_proc, scheme_real_p_proc); + check_known_both_variant(info, app_o, rator, rand1, rand2, "bitwise-xor", scheme_fixnum_p_proc, scheme_unsafe_fxxor_proc, scheme_real_p_proc); - check_known_both_try(info, app_o, rator, rand1, rand2, "fxand", scheme_fixnum_p_proc, scheme_unsafe_fxand_proc); - check_known_both_try(info, app_o, rator, rand1, rand2, "fxior", scheme_fixnum_p_proc, scheme_unsafe_fxior_proc); - check_known_both_try(info, app_o, rator, rand1, rand2, "fxxor", scheme_fixnum_p_proc, scheme_unsafe_fxxor_proc); + check_known_both_variant(info, app_o, rator, rand1, rand2, "fxand", scheme_fixnum_p_proc, scheme_unsafe_fxand_proc, scheme_real_p_proc); + check_known_both_variant(info, app_o, rator, rand1, rand2, "fxior", scheme_fixnum_p_proc, scheme_unsafe_fxior_proc, scheme_real_p_proc); + check_known_both_variant(info, app_o, rator, rand1, rand2, "fxxor", scheme_fixnum_p_proc, scheme_unsafe_fxxor_proc, scheme_real_p_proc); check_known_both_try(info, app_o, rator, rand1, rand2, "=", scheme_fixnum_p_proc, scheme_unsafe_fx_eq_proc); check_known_both_try(info, app_o, rator, rand1, rand2, "<", scheme_fixnum_p_proc, scheme_unsafe_fx_lt_proc); @@ -3916,6 +4043,7 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz check_known_both_try(info, app_o, rator, rand1, rand2, ">=", scheme_fixnum_p_proc, scheme_unsafe_fx_gt_eq_proc); check_known_both_try(info, app_o, rator, rand1, rand2, "min", scheme_fixnum_p_proc, scheme_unsafe_fx_min_proc); check_known_both_try(info, app_o, rator, rand1, rand2, "max", scheme_fixnum_p_proc, scheme_unsafe_fx_max_proc); + rator = app->rator; /* in case it was updated */ check_known_both_try(info, app_o, rator, rand1, rand2, "fx=", scheme_fixnum_p_proc, scheme_unsafe_fx_eq_proc); check_known_both_try(info, app_o, rator, rand1, rand2, "fx<", scheme_fixnum_p_proc, scheme_unsafe_fx_lt_proc); @@ -3925,6 +4053,13 @@ static Scheme_Object *finish_optimize_application3(Scheme_App3_Rec *app, Optimiz check_known_both_try(info, app_o, rator, rand1, rand2, "fxmin", scheme_fixnum_p_proc, scheme_unsafe_fx_min_proc); check_known_both_try(info, app_o, rator, rand1, rand2, "fxmax", scheme_fixnum_p_proc, scheme_unsafe_fx_max_proc); + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_WANTS_REAL) + check_known_both(info, app_o, rator, rand1, rand2, NULL, scheme_real_p_proc, + (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS) ? scheme_true : NULL); + if (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_WANTS_NUMBER) + check_known_both(info, app_o, rator, rand1, rand2, NULL, scheme_number_p_proc, + (SCHEME_PRIM_PROC_OPT_FLAGS(rator) & SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS) ? scheme_true : NULL); + check_known(info, app_o, rator, rand1, "vector-ref", scheme_vector_p_proc, NULL); check_known(info, app_o, rator, rand1, "procedure-closure-contents-eq?", scheme_procedure_p_proc, NULL); @@ -4204,12 +4339,12 @@ static Scheme_Object *collapse_local(Scheme_Object *var, Optimize_Info *info, in pred = expr_implies_predicate(var, info, NULL, 5); if (pred) { - if (SAME_OBJ(pred, scheme_not_proc)) + if (predicate_implies(pred, scheme_not_proc)) return scheme_false; if (context & OPT_CONTEXT_BOOLEAN) { - /* all other predicates recognize non-#f things */ - return scheme_true; + if (predicate_implies_not(pred, scheme_not_proc)) + return scheme_true; } if (SAME_OBJ(pred, scheme_null_p_proc)) @@ -4264,15 +4399,18 @@ static Scheme_Object *equivalent_exprs(Scheme_Object *a, Scheme_Object *b, static void add_type(Optimize_Info *info, Scheme_Object *var, Scheme_Object *pred) { Scheme_Hash_Tree *new_types = info->types; + Scheme_Object *old_pred; if (SCHEME_VAR(var)->mutated) return; - /* Don't add the type if something is already there, this may happen when no_types. */ - if (SCHEME_VAR(var)->val_type - || optimize_get_predicate(info, var, 1)) { + /* Don't add the type if something is already there, which may happen when no_types, + as long as the existing predicate implies the new one. */ + if (SCHEME_VAR(var)->val_type) /* => more specific than other predicates */ + return; + old_pred = optimize_get_predicate(info, var, 1); + if (old_pred && predicate_implies(old_pred, pred)) return; - } if (!new_types) new_types = scheme_make_hash_tree(0); @@ -4319,8 +4457,12 @@ static void intersect_and_merge_types(Optimize_Info *t_info, Optimize_Info *f_in while (i != -1) { scheme_hash_tree_index(f_types, i, &var, &f_pred); t_pred = scheme_hash_tree_get(t_types, var); - if (t_pred && SAME_OBJ(t_pred, f_pred)) - add_type(base_info, var, f_pred); + if (t_pred) { + if (predicate_implies(f_pred, t_pred)) + add_type(base_info, var, t_pred); + else if (predicate_implies(t_pred, f_pred)) + add_type(base_info, var, f_pred); + } i = scheme_hash_tree_next(f_types, i); } } @@ -4329,25 +4471,67 @@ static int relevant_predicate(Scheme_Object *pred) { /* Relevant predicates need to be disjoint for try_reduce_predicate(), finish_optimize_application3() and add_types_for_t_branch(). - As 'not' is included, all the other need to recognize non-#f values. - list? is recognized in try_reduce_predicate as a special case */ + The predicate_implies() and predicate_implies_not() functions must + be kept in sync with this list. */ return (SAME_OBJ(pred, scheme_pair_p_proc) || SAME_OBJ(pred, scheme_null_p_proc) || SAME_OBJ(pred, scheme_mpair_p_proc) || SAME_OBJ(pred, scheme_box_p_proc) + || SAME_OBJ(pred, scheme_list_p_proc) || SAME_OBJ(pred, scheme_vector_p_proc) || SAME_OBJ(pred, scheme_procedure_p_proc) || SAME_OBJ(pred, scheme_syntax_p_proc) || SAME_OBJ(pred, scheme_fixnum_p_proc) || SAME_OBJ(pred, scheme_flonum_p_proc) || SAME_OBJ(pred, scheme_extflonum_p_proc) + || SAME_OBJ(pred, scheme_number_p_proc) + || SAME_OBJ(pred, scheme_real_p_proc) || SAME_OBJ(pred, scheme_void_p_proc) || SAME_OBJ(pred, scheme_eof_object_p_proc) || SAME_OBJ(pred, scheme_not_proc) ); } +static int predicate_implies(Scheme_Object *pred1, Scheme_Object *pred2) +{ + /* P => P */ + if (SAME_OBJ(pred1, pred2)) + return 1; + + /* null? => list? */ + if (SAME_OBJ(pred2, scheme_list_p_proc) + && SAME_OBJ(pred1, scheme_null_p_proc)) + return 1; + + /* real?, fixnum?, or flonum? => number? */ + if (SAME_OBJ(pred2, scheme_number_p_proc) + && (SAME_OBJ(pred1, scheme_real_p_proc) + || SAME_OBJ(pred1, scheme_fixnum_p_proc) + || SAME_OBJ(pred1, scheme_flonum_p_proc))) + return 1; + + /* fixnum? or flonum? => real? */ + if (SAME_OBJ(pred2, scheme_real_p_proc) + && (SAME_OBJ(pred1, scheme_fixnum_p_proc) + || SAME_OBJ(pred1, scheme_flonum_p_proc))) + return 1; + + return 0; +} + +static int predicate_implies_not(Scheme_Object *pred1, Scheme_Object *pred2) +{ + if (SAME_OBJ(pred1, scheme_pair_p_proc) && SAME_OBJ(pred2, scheme_list_p_proc)) + return 0; + if (SAME_OBJ(pred1, scheme_list_p_proc) && SAME_OBJ(pred2, scheme_pair_p_proc)) + return 0; + + /* Otherwise, with our current set of predicates, overlapping matches happen + only when one implies the other: */ + return (!predicate_implies(pred1, pred2) && !predicate_implies(pred2, pred1)); +} + static void add_types_for_t_branch(Scheme_Object *t, Optimize_Info *info, int fuel) { if (fuel < 0) @@ -6666,6 +6850,7 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in if ((pre_body->count == 1) && !pre_body->vars[0]->optimize_used) { Scheme_Sequence *seq; + Scheme_Object *new_body; pre_body->vars[0]->mode = SCHEME_VAR_MODE_NONE; @@ -6682,16 +6867,21 @@ static Scheme_Object *optimize_lets(Scheme_Object *form, Optimize_Info *info, in head->num_clauses--; head->body = pre_body->body; + new_body = (Scheme_Object *)seq; + if (head->num_clauses) seq->array[1] = (Scheme_Object *)head; - else + else if (found_escapes) { + /* don't need the body, because some RHS escapes */ + new_body = rhs; + } else seq->array[1] = head->body; if (prev) - (void)replace_tail_inside((Scheme_Object *)seq, prev, NULL); + (void)replace_tail_inside(new_body, prev, NULL); else - form = (Scheme_Object *)seq; - prev = (Scheme_Object *)seq; + form = new_body; + prev = new_body; body = pre_body->body; } else diff --git a/racket/src/racket/src/schapp.inc b/racket/src/racket/src/schapp.inc index a4280ba274..6db8d25f9d 100644 --- a/racket/src/racket/src/schapp.inc +++ b/racket/src/racket/src/schapp.inc @@ -38,8 +38,7 @@ #if PRIM_CHECK_ARITY if (argc < prim->p.mina || (argc > prim->p.mu.maxa && prim->p.mina >= 0)) { - scheme_wrong_count_m(prim->p.name, prim->p.mina, prim->p.mu.maxa, argc, argv, - prim->p.pp.flags & SCHEME_PRIM_IS_METHOD); + scheme_wrong_count_m(prim->p.name, prim->p.mina, prim->p.mu.maxa, argc, argv, 0); return NULL; /* Shouldn't get here */ } #endif diff --git a/racket/src/racket/src/schnapp.inc b/racket/src/racket/src/schnapp.inc index 2f9cc44d9e..f871df0783 100644 --- a/racket/src/racket/src/schnapp.inc +++ b/racket/src/racket/src/schnapp.inc @@ -25,8 +25,7 @@ static MZ_INLINE Scheme_Object *PRIM_APPLY_NAME_FAST(Scheme_Object *rator, prim = (Scheme_Primitive_Proc *)rator; if (argc < prim->mina || (argc > prim->mu.maxa && prim->mina >= 0)) { - scheme_wrong_count_m(prim->name, prim->mina, prim->mu.maxa, argc, argv, - prim->pp.flags & SCHEME_PRIM_IS_METHOD); + scheme_wrong_count_m(prim->name, prim->mina, prim->mu.maxa, argc, argv, 0); return NULL; /* Shouldn't get here */ } diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 4efbc1afb6..1754777297 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -108,8 +108,22 @@ /* indicates a primitive that is JIT-inlined on some platforms, but not the current one: */ #define SCHEME_PRIM_SOMETIMES_INLINED (1 << 15) +/* indicates a primitive that produces a real or number (or + errors): */ +#define SCHEME_PRIM_PRODUCES_REAL (1 << 16) +#define SCHEME_PRIM_PRODUCES_NUMBER (1 << 17) +/* indicates a primitive that requires certain argument types (all the + same type): */ +#define SCHEME_PRIM_WANTS_REAL (1 << 18) +#define SCHEME_PRIM_WANTS_NUMBER (1 << 19) +/* indicates a primitive that always succeed when given + arguments of the expected type: */ +#define SCHEME_PRIM_OMITTABLE_ON_GOOD_ARGS (1 << 20) +/* indicates a primitive that produces a real number when + given real-number arguments: */ +#define SCHEME_PRIM_CLOSED_ON_REALS (1 << 21) -#define SCHEME_PRIM_OPT_TYPE_SHIFT 16 +#define SCHEME_PRIM_OPT_TYPE_SHIFT 22 #define SCHEME_PRIM_OPT_TYPE_MASK (SCHEME_MAX_LOCAL_TYPE_MASK << SCHEME_PRIM_OPT_TYPE_SHIFT) #define SCHEME_PRIM_OPT_TYPE(x) ((x & SCHEME_PRIM_OPT_TYPE_MASK) >> SCHEME_PRIM_OPT_TYPE_SHIFT) @@ -474,6 +488,8 @@ void scheme_done_os_thread(); extern Scheme_Object *scheme_fixnum_p_proc; extern Scheme_Object *scheme_flonum_p_proc; extern Scheme_Object *scheme_extflonum_p_proc; +extern Scheme_Object *scheme_real_p_proc; +extern Scheme_Object *scheme_number_p_proc; extern Scheme_Object *scheme_apply_proc; extern Scheme_Object *scheme_values_proc; extern Scheme_Object *scheme_procedure_p_proc; @@ -526,6 +542,25 @@ extern Scheme_Object *scheme_unsafe_fxior_proc; extern Scheme_Object *scheme_unsafe_fxxor_proc; extern Scheme_Object *scheme_unsafe_fxrshift_proc; +extern Scheme_Object *scheme_unsafe_real_add1_proc; +extern Scheme_Object *scheme_unsafe_real_sub1_proc; +extern Scheme_Object *scheme_unsafe_real_abs_proc; +extern Scheme_Object *scheme_unsafe_real_plus_proc; +extern Scheme_Object *scheme_unsafe_real_minus_proc; +extern Scheme_Object *scheme_unsafe_real_times_proc; +extern Scheme_Object *scheme_unsafe_real_divide_proc; +extern Scheme_Object *scheme_unsafe_real_modulo_proc; +extern Scheme_Object *scheme_unsafe_real_quotient_proc; +extern Scheme_Object *scheme_unsafe_real_remainder_proc; + +extern Scheme_Object *scheme_unsafe_real_eq_proc; +extern Scheme_Object *scheme_unsafe_real_lt_proc; +extern Scheme_Object *scheme_unsafe_real_gt_proc; +extern Scheme_Object *scheme_unsafe_real_lt_eq_proc; +extern Scheme_Object *scheme_unsafe_real_gt_eq_proc; +extern Scheme_Object *scheme_unsafe_real_min_proc; +extern Scheme_Object *scheme_unsafe_real_max_proc; + extern Scheme_Object *scheme_unsafe_fx_eq_proc; extern Scheme_Object *scheme_unsafe_fx_lt_proc; extern Scheme_Object *scheme_unsafe_fx_gt_proc; @@ -1570,9 +1605,14 @@ enum { /* Flags to indicate to SFS pass that a [tail] application doesn't need clearing before it (because the call is to a immediate primitive or a Racket-implemented function). */ -#define APPN_FLAG_IMMED (1 << 12) #define APPN_FLAG_SFS_TAIL (1 << 13) -#define APPN_FLAG_MASK (APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL) +#define APPN_FLAG_IMMED (1 << 12) +/* The compiler may determine that a call is omittable; usually that + information is encoded in the primitive itself, but sometimes the + optimizer can figure out more (e.g., based on known types of the + arguments): */ +#define APPN_FLAG_OMITTABLE (1 << 11) +#define APPN_FLAG_MASK (APPN_FLAG_OMITTABLE | APPN_FLAG_IMMED | APPN_FLAG_SFS_TAIL) typedef struct { Scheme_Inclhash_Object iso; /* keyex used for flags */ @@ -1580,7 +1620,7 @@ typedef struct { Scheme_Object *rand; } Scheme_App2_Rec; -#define SCHEME_APPN_FLAGS(app) MZ_OPT_HASH_KEY(&app->iso) +#define SCHEME_APPN_FLAGS(app) MZ_OPT_HASH_KEY(&(app)->iso) typedef struct { Scheme_Inclhash_Object iso; /* keyex used for flags */ diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index 98db6838fd..23619258fd 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "6.4.0.12" +#define MZSCHEME_VERSION "6.4.0.13" #define MZSCHEME_VERSION_X 6 #define MZSCHEME_VERSION_Y 4 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 12 +#define MZSCHEME_VERSION_W 13 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)