Re: (MEMBER ...) with literal symbol(s)

David Scherfgen via Maxima-discuss <[email protected]> Fri, 2 May 2025 23:27:49 +0200
Newsgroups gmane.comp.mathematics.maxima.general,gmane.lisp.gcl.devel
Message-ID <CAMTHLKgYYHcoxvTtskZzneFOwtkVQ4xFb1QAE9bQ3OCEcF1D1Q@mail.gmail.com>
--===============0800716271649280252==
Content-Type: multipart/alternative; boundary="000000000000250a9306342dd358"

--000000000000250a9306342dd358
Content-Type: text/plain; charset="UTF-8"

Thanks for the explanation, Camm.

Optimizations 2) and 1) should suffice for this very common case in
Maxima's source to be optimized in GCL (just like SBCL does), optimization
5) shouldn't be necessary.

Let's take the example (member x '(a b c)), i.e. unknown x and a list of
literal symbols.

Via 2), GCL should unroll that into (or (eql x 'a) (eql x 'b) (eql x 'c)).

Via 1), GCL should replace each of the (eql ...) with (eq ...), as one of
the arguments is a literal symbol.

But that doesn't seem to be what's happening, right?

Best regards
David Scherfgen


Camm Maguire <[email protected]> schrieb am Fr., 2. Mai 2025, 22:28:

> Greetings!  Glad you noticed this.
>
> This touches on 4 optimizations currently in place in the compiler, and
> one that is not.
>
> 1) GCL will optimize eql to eq when it can infer the types on either arg
> that would permit this.
>
> 2) GCL will unroll loops over constant (and non-constant) lists up to
> *src-loop-unroll-limit* (default 20)
>
> 3) GCL will pull the type-of on unknown x out of the loop and use it as
> a key to a switch table inside the loop.
>
> 4) GCL will replace the loop entirely with its known result when
> possible.
>
> 5) GCL will not attempt to aggregate the types across all elements of a
> list, i.e. this whole list is of type symbol, so pull that out of the
> loop as well.  This seems ill-advised and unpractical to me at least at
> the moment.
>
> You can get more info on what is happening by setting
> compiler::*annotate* to t before running disassemble.  If you only want
> the C code and not the disassembly, (setq
> compiler::*disassemble-objdump* nil).
>
> You can also see the lisp source of member:
>
> ('si::fle is shorthand for 'function-lambda-expression)
>
>
> =============================================================================
> (si::fle 'member)
>
> =============================================================================
> (LAMBDA
>  (SYSTEM::ITEM LIST &KEY SYSTEM::KEY SYSTEM::TEST SYSTEM::TEST-NOT)
>  (DECLARE (OPTIMIZE (SAFETY 1))) (CHECK-TYPE LIST PROPER-LIST)
>  (CHECK-TYPE SYSTEM::TEST (OR NULL SYSTEM::FUNCTION-DESIGNATOR))
>  (CHECK-TYPE SYSTEM::TEST-NOT (OR NULL SYSTEM::FUNCTION-DESIGNATOR))
>  (CHECK-TYPE SYSTEM::KEY (OR NULL SYSTEM::FUNCTION-DESIGNATOR))
>  (BLOCK
>   MEMBER
>   (LET*
>    ((#:G568
>      (COERCE (OR SYSTEM::TEST SYSTEM::TEST-NOT #'EQL) 'FUNCTION))
>     (#:G569
>      (IF
>       (EQ #:G568 #'EQ) 0
>       (IF
>        (EQ #:G568 #'EQL) 1
>        (IF
>         (EQ #:G568 #'EQUAL) 2
>         (IF (EQ #:G568 #'EQUALP) 3 (IF (EQ #:G568 #'FUNCALL) 4 5))))))
>     (#:G570 (IF SYSTEM::KEY (COERCE SYSTEM::KEY 'FUNCTION)))
>     (#:G570 (IF (NOT (EQ #:G570 #'IDENTITY)) #:G570)))
>    (AND
>     SYSTEM::TEST SYSTEM::TEST-NOT
>     (ERROR "both test and test not supplied"))
>    (LET*
>     NIL
>     (LABELS
>      ((SYSTEM::KEY
>        (SYSTEM::X) (IF #:G570 (FUNCALL #:G570 SYSTEM::X) SYSTEM::X))
>       (SYSTEM::TEST-NO-KEY
>        (SYSTEM::X SYSTEM::Y)
>        (IF
>         (CASE
>          #:G569 (0 (EQ SYSTEM::X SYSTEM::Y))
>          (1 (EQL SYSTEM::X SYSTEM::Y)) (2 (EQUAL SYSTEM::X SYSTEM::Y))
>          (3 (EQUALP SYSTEM::X SYSTEM::Y))
>          (4 (FUNCALL SYSTEM::X SYSTEM::Y))
>          (OTHERWISE (FUNCALL #:G568 SYSTEM::X SYSTEM::Y)))
>         (NOT SYSTEM::TEST-NOT) SYSTEM::TEST-NOT))
>       (SYSTEM::TEST
>        (SYSTEM::X SYSTEM::Y)
>        (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))))
>      (DECLARE (IGNORABLE #'SYSTEM::TEST))
>      (IF
>       (CASE
>        #:G569
>        ((1 2 3)
>         (OR
>          (CASE
>           #:G569 (1 (EQL-IS-EQ SYSTEM::ITEM))
>           (2 (EQUAL-IS-EQ SYSTEM::ITEM))
>           (3 (EQUALP-IS-EQ SYSTEM::ITEM))))))
>       (SETQ #:G569 0))
>      (MACROLET
>       ((SYSTEM::COLLECT
>         (SYSTEM::A SYSTEM::B SYSTEM::C)
>         (LIST
>          'LET (LIST (LIST 'SYSTEM::TMP SYSTEM::A))
>          (LIST
>           'SETQ SYSTEM::C
>           (LIST
>            'IF SYSTEM::C
>            (LIST 'CDR (LIST 'RPLACD SYSTEM::C 'SYSTEM::TMP))
>            (LIST 'SETQ SYSTEM::B 'SYSTEM::TMP))))))
>       (IF
>        (NOT
>         (MAPL
>          (LAMBDA
>           (SYSTEM::X)
>           (IF
>            (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))
>            (RETURN-FROM MEMBER SYSTEM::X)))
>          LIST))
>        NIL)))))))
>
> =============================================================================
>
> Some examples:
>
>
> =============================================================================
> Unknown x & y, (disassemble '(lambda (x y) (member x y))
> loop not unrolled, type-of x pulled out, eql used unless runtime
> determination of x allows eq.
>
> =============================================================================
> static object LI1__CMP_ANON___gazonk_2205667_0(register object V3,object
> V4)
> {        VMB1 VMS1 VMV1
>         /*(MEMBER X Y)*/
>         {register fixnum V5;
>         V5= 1;
>         /*(EQL-IS-EQ SYSTEM::ITEM)*/
>         switch(/* (APPLIED TP4 SYSTEM::X) */tp4(V3)){
>         case -1:
>         goto T7;
> T7:;
>         goto T5;
>
>         case 1:
>         goto T8;
> T8:;
>         case 2:
>         goto T9;
> T9:;
>         case 3:
>         goto T10;
> T10:;
>         case 4:
>         goto T11;
> T11:;
>         case 5:
>         goto T12;
> T12:;
>         case 6:
>         goto T13;
> T13:;
>         goto T3;
>
>         default:
>         goto T14;
> T14:;
>         goto T5;
>
>         goto T3;
>         }
>         goto T3;
>
>         /* END (EQL-IS-EQ SYSTEM::ITEM)*/
>         goto T5;
> T5:;
>         V5= 0;
>         goto T2;
>
>         goto T3;
> T3:;
>         goto T2;
> T2:;
>         /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         {register object V6;
>         V6= (V4);
>         goto T24;
> T24:;
>         if(((V6))==Cnil){
>         goto T26;
>         }
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V5){
>         case 0:
>         goto T36;
> T36:;
>         if(!(((V3))==(/* (SYSTEM::KEY SYSTEM::Y) */(V6)->c.c_car))){
>         goto T33;
>         }
>         goto T34;
>
>         case 1:
>         goto T37;
> T37:;
>         if(!(eql((V3),/* (SYSTEM::KEY SYSTEM::Y) */(V6)->c.c_car))){
>         goto T33;
>         }
>         goto T34;
>
>         goto T33;
>         }
>         goto T33;
>
>         goto T34;
> T34:;
>         goto T32;
>
>         goto T33;
> T33:;
>         goto T30;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T32;
> T32:;
>         {object V8 = (V6);
>         VMR1(V8);}
>         goto T30;
> T30:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         {object V9;
>         V9= /* (APPLIED CDR SYSTEM::X) */V6->c.c_cdr;
>         V6= (V9);
>         goto T24;
>         }
>         goto T26;
> T26:;
>         goto T22;
>
>         goto T22;
>         }
>         /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         goto T22;
> T22:;
>         if(((V4))==Cnil){
>         goto T20;
>         }
>         /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         goto T17;
>
>         goto T20;
> T20:;
>         {object V10 = Cnil;
>         VMR1(V10);}
>         goto T17;
> T17:;
>         {object V11 = Cnil;
>         VMR1(V11);}}
>         /* END (MEMBER X Y)*/
> }
>
> =============================================================================
> symbol x, unknown y, (disassemble '(lambda (x y) (declare (symbol x))
> (member x y)))
> loop not unrolled, eql->eq, no typing
>
> =============================================================================
> static object LI1__CMP_ANON___gazonk_2205667_0(register object V3,object
> V4)
> {        VMB1 VMS1 VMV1
>         /*(MEMBER X Y)*/
>         /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         {register object V5;
>         V5= (V4);
>         goto T9;
> T9:;
>         if(((V5))==Cnil){
>         goto T11;
>         }
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         if(!(((V3))==(/* (SYSTEM::KEY SYSTEM::Y) */(V5)->c.c_car))){
>         goto T18;
>         }
>         goto T17;
>
>         goto T18;
> T18:;
>         goto T15;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T17;
> T17:;
>         {object V7 = (V5);
>         VMR1(V7);}
>         goto T15;
> T15:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         {object V8;
>         V8= /* (APPLIED CDR SYSTEM::X) */V5->c.c_cdr;
>         V5= (V8);
>         goto T9;
>         }
>         goto T11;
> T11:;
>         goto T7;
>
>         goto T7;
>         }
>         /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         goto T7;
> T7:;
>         if(((V4))==Cnil){
>         goto T5;
>         }
>         /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         goto T2;
>
>         goto T5;
> T5:;
>         {object V9 = Cnil;
>         VMR1(V9);}
>         goto T2;
> T2:;
>         {object V10 = Cnil;
>         VMR1(V10);}
>         /* END (MEMBER X Y)*/
> }
>
> =============================================================================
> Unknown x, known list, (disassemble '(lambda (x y z w)  (member x (list y
> z w))))
> loop unrolled, type-of x pulled out
>
> =============================================================================
> static object LI1__CMP_ANON___gazonk_2205667_1(object V5,object V6,object
> V7,object V8)
> {        VMB1 VMS1 VMV1
>         /*(MEMBER X (LIST Y Z ...))*/
>         {object V9;
>         V9= list(3,(V6),(V7),(V8));
>         {fixnum V10;
>         V10= 1;
>         /*(EQL-IS-EQ SYSTEM::ITEM)*/
>         switch(/* (APPLIED TP4 SYSTEM::X) */tp4(V5)){
>         case -1:
>         goto T8;
> T8:;
>         goto T6;
>
>         case 1:
>         goto T9;
> T9:;
>         case 2:
>         goto T10;
> T10:;
>         case 3:
>         goto T11;
> T11:;
>         case 4:
>         goto T12;
> T12:;
>         case 5:
>         goto T13;
> T13:;
>         case 6:
>         goto T14;
> T14:;
>         goto T4;
>
>         default:
>         goto T15;
> T15:;
>         goto T6;
>
>         goto T4;
>         }
>         goto T4;
>
>         /* END (EQL-IS-EQ SYSTEM::ITEM)*/
>         goto T6;
> T6:;
>         V10= 0;
>         goto T3;
>
>         goto T4;
> T4:;
>         goto T3;
> T3:;
>         /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V10){
>         case 0:
>         goto T27;
> T27:;
>         if(!(((V5))==((V6)))){
>         goto T24;
>         }
>         goto T25;
>
>         case 1:
>         goto T28;
> T28:;
>         if(!(eql((V5),(V6)))){
>         goto T24;
>         }
>         goto T25;
>
>         goto T24;
>         }
>         goto T24;
>
>         goto T25;
> T25:;
>         goto T23;
>
>         goto T24;
> T24:;
>         goto T21;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T23;
> T23:;
>         {object V11 = (V9);
>         VMR1(V11);}
>         goto T21;
> T21:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V10){
>         case 0:
>         goto T37;
> T37:;
>         if(!(((V5))==((V7)))){
>         goto T34;
>         }
>         goto T35;
>
>         case 1:
>         goto T38;
> T38:;
>         if(!(eql((V5),(V7)))){
>         goto T34;
>         }
>         goto T35;
>
>         goto T34;
>         }
>         goto T34;
>
>         goto T35;
> T35:;
>         goto T33;
>
>         goto T34;
> T34:;
>         goto T31;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T33;
> T33:;
>         {object V12 = /* (CDR SYSTEM::X) */V9->c.c_cdr;
>         VMR1(V12);}
>         goto T31;
> T31:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V10){
>         case 0:
>         goto T47;
> T47:;
>         if(!(((V5))==((V8)))){
>         goto T44;
>         }
>         goto T45;
>
>         case 1:
>         goto T48;
> T48:;
>         if(!(eql((V5),(V8)))){
>         goto T44;
>         }
>         goto T45;
>
>         goto T44;
>         }
>         goto T44;
>
>         goto T45;
> T45:;
>         goto T43;
>
>         goto T44;
> T44:;
>         goto T41;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T43;
> T43:;
>         {object V13 = /* (CDR SYSTEM::X) */V9->c.c_cdr->c.c_cdr;
>         VMR1(V13);}
>         goto T41;
> T41:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         {object V14 = Cnil;
>         VMR1(V14);}}}
>         /* END (MEMBER X (LIST Y Z ...))*/
> }
>
> =============================================================================
> Known result, (disassemble '(lambda (x y z w)  (declare (symbol z))
>         (member z (list 3 z w))))
> loop eliminated
>
> =============================================================================
> static object LI1__CMP_ANON___gazonk_2205667_1(object V5,object V6,object
> V7,object V8)
> {        VMB1 VMS1 VMV1
>         /*(MEMBER Z (LIST 3 Z ...))*/
>         {object V9;
>         V9= list(3,make_fixnum(3),(V7),(V8));
>         /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         {object V10 = /* (CDR SYSTEM::X) */V9->c.c_cdr;
>         VMR1(V10);}
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/}
>         /* END (MEMBER Z (LIST 3 Z ...))*/
> }
>
> =============================================================================
> Unknown x, known list of symbols (disassemble '(lambda (x y z w)
>         (declare (symbol y z w )) (member x (list y z w))))
> loop unrolled, type-of x pulled out, when x is e.g. integer eql still
>         optimized to eq element wise as all list elements are symbol.
>
> =============================================================================
> static object LI1__CMP_ANON___gazonk_2205667_1(object V5,object V6,object
> V7,object V8)
> {        VMB1 VMS1 VMV1
>         /*(MEMBER X (LIST Y Z ...))*/
>         {object V9;
>         V9= list(3,(V6),(V7),(V8));
>         {fixnum V10;
>         V10= 1;
>         /*(EQL-IS-EQ SYSTEM::ITEM)*/
>         switch(/* (APPLIED TP4 SYSTEM::X) */tp4(V5)){
>         case -1:
>         goto T8;
> T8:;
>         goto T6;
>
>         case 1:
>         goto T9;
> T9:;
>         case 2:
>         goto T10;
> T10:;
>         case 3:
>         goto T11;
> T11:;
>         case 4:
>         goto T12;
> T12:;
>         case 5:
>         goto T13;
> T13:;
>         case 6:
>         goto T14;
> T14:;
>         goto T4;
>
>         default:
>         goto T15;
> T15:;
>         goto T6;
>
>         goto T4;
>         }
>         goto T4;
>
>         /* END (EQL-IS-EQ SYSTEM::ITEM)*/
>         goto T6;
> T6:;
>         V10= 0;
>         goto T3;
>
>         goto T4;
> T4:;
>         goto T3;
> T3:;
>         /*(MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         /*(SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /*(SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V10){
>         case 0:
>         goto T27;
> T27:;
>         if(!(((V5))==((V6)))){
>         goto T24;
>         }
>         goto T25;
>
>         case 1:
>         goto T28;
> T28:;
>         if(!(((V5))==((V6)))){
>         goto T24;
>         }
>         goto T25;
>
>         goto T24;
>         }
>         goto T24;
>
>         goto T25;
> T25:;
>         goto T23;
>
>         goto T24;
> T24:;
>         goto T21;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T23;
> T23:;
>         {object V11 = (V9);
>         VMR1(V11);}
>         goto T21;
> T21:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V10){
>         case 0:
>         goto T37;
> T37:;
>         if(!(((V5))==((V7)))){
>         goto T34;
>         }
>         goto T35;
>
>         case 1:
>         goto T38;
> T38:;
>         if(!(((V5))==((V7)))){
>         goto T34;
>         }
>         goto T35;
>
>         goto T34;
>         }
>         goto T34;
>
>         goto T35;
> T35:;
>         goto T33;
>
>         goto T34;
> T34:;
>         goto T31;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T33;
> T33:;
>         {object V12 = /* (CDR SYSTEM::X) */V9->c.c_cdr;
>         VMR1(V12);}
>         goto T31;
> T31:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /*((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /*(SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         /*(SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         switch(V10){
>         case 0:
>         goto T47;
> T47:;
>         if(!(((V5))==((V8)))){
>         goto T44;
>         }
>         goto T45;
>
>         case 1:
>         goto T48;
> T48:;
>         if(!(((V5))==((V8)))){
>         goto T44;
>         }
>         goto T45;
>
>         goto T44;
>         }
>         goto T44;
>
>         goto T45;
> T45:;
>         goto T43;
>
>         goto T44;
> T44:;
>         goto T41;
>
>         /* END (SYSTEM::TEST-NO-KEY SYSTEM::X (SYSTEM::KEY SYSTEM::Y))*/
>         /* END (SYSTEM::TEST SYSTEM::ITEM (CAR SYSTEM::X))*/
>         goto T43;
> T43:;
>         {object V13 = /* (CDR SYSTEM::X) */V9->c.c_cdr->c.c_cdr;
>         VMR1(V13);}
>         goto T41;
> T41:;
>         /* END ((LAMBDA (SYSTEM::X) (DECLARE #) ...) SYSTEM::X)*/
>         /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /* END (SYSTEM::LMAP SYSTEM::F (CDR SYSTEM::X))*/
>         /* END (SYSTEM::LMAP SYSTEM::F SYSTEM::X)*/
>         /* END (SYSTEM::LMAPR SYSTEM::FUN LIST)*/
>         /* END (MAPL (LAMBDA (SYSTEM::X) (IF # #)) LIST)*/
>         {object V14 = Cnil;
>         VMR1(V14);}}}
>         /* END (MEMBER X (LIST Y Z ...))*/
> }
>
> =============================================================================
>
> Take care,
>
> David Scherfgen via Maxima-discuss
> <[email protected]> writes:
>
> > Hello,
> >
> > I noticed that GCL 2.7.1 compiles these functions differently:
> >
> > (defun f (x) (member x '(a b c)))
> > (defun g (x) (member x '(a b c) :test #'eq))
> >
> > I suppose that's because F uses the default EQL as the test. I tried to
> understand the C code it generated, but it was incomprehensible to me.
> Anyways, I saw
> > that the second function, G, had inlined the MEMBER call into (OR (EQ X
> 'A) (EQ X 'B) (EQ Y 'C)), which is reasonable. But why does F get compiled
> differently?
> >
> > Shouldn't the compiler notice that the second argument to MEMBER is a
> literal list of symbols and automatically use EQ instead of the default EQL
> test? That
> > would be an easy and safe optimization.
> >
> > The same goes for the case where the first argument to MEMBER is a
> literal symbol.
> >
> > Maxima is full of such instances where MEMBER is used as a shorter way
> to write (OR (EQ ...) (EQ ...) ...), and ":test #'eq" has mostly been
> removed because it was
> > believed that any modern Lisp compiler would apply this optimization
> automatically. At least SBCL does. (CCL doesn't, I have filed a report
> already.)
> >
> > Best regards
> > David Scherfgen
> >
> > _______________________________________________
> > Maxima-discuss mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/maxima-discuss
> >
>
> --
> Camm Maguire                                        [email protected]
> ==========================================================================
> "The earth is but one country, and mankind its citizens."  --  Baha'u'llah
>

--000000000000250a9306342dd358
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

PGRpdiBkaXI9ImF1dG8iPlRoYW5rcyBmb3IgdGhlIGV4cGxhbmF0aW9uLCBDYW1tLjxkaXYgZGly
PSJhdXRvIj48YnI+PGRpdiBkaXI9ImF1dG8iPk9wdGltaXphdGlvbnMgMikgYW5kIDEpIHNob3Vs
ZCBzdWZmaWNlwqBmb3IgdGhpcyB2ZXJ5IGNvbW1vbiBjYXNlIGluIE1heGltYSYjMzk7cyBzb3Vy
Y2UgdG8gYmUgb3B0aW1pemVkIGluIEdDTCAoanVzdCBsaWtlIFNCQ0wgZG9lcyksIG9wdGltaXph
dGlvbiA1KSBzaG91bGRuJiMzOTt0IGJlIG5lY2Vzc2FyeS48L2Rpdj48ZGl2IGRpcj0iYXV0byI+
PGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+TGV0JiMzOTtzIHRha2Ug
dGhlIGV4YW1wbGUgKG1lbWJlciB4ICYjMzk7KGEgYiBjKSksIGkuZS4gdW5rbm93biB4IGFuZCBh
IGxpc3Qgb2YgbGl0ZXJhbCBzeW1ib2xzLjwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+
PGRpdiBkaXI9ImF1dG8iPlZpYSAyKSwgR0NMIHNob3VsZCB1bnJvbGwgdGhhdCBpbnRvIChvciAo
ZXFsIHggJiMzOTthKSAoZXFsIHggJiMzOTtiKSAoZXFsIHggJiMzOTtjKSkuPC9kaXY+PGRpdiBk
aXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+VmlhIDEpLCBHQ0wgc2hvdWxkIHJl
cGxhY2UgZWFjaCBvZiB0aGUgKGVxbCAuLi4pIHdpdGggKGVxIC4uLiksIGFzIG9uZSBvZiB0aGUg
YXJndW1lbnRzIGlzIGEgbGl0ZXJhbCBzeW1ib2wuPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjxicj48
L2Rpdj48ZGl2IGRpcj0iYXV0byI+QnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB3aGF0
JiMzOTtzIGhhcHBlbmluZywgcmlnaHQ/PC9kaXY+PGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj48
ZGl2IGRpcj0iYXV0byI+QmVzdCByZWdhcmRzPC9kaXY+PGRpdiBkaXI9ImF1dG8iPkRhdmlkIFNj
aGVyZmdlbjwvZGl2PjwvZGl2Pjxicj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUgZ21haWxf
cXVvdGVfY29udGFpbmVyIiBkaXI9ImF1dG8iPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9h
dHRyIj5DYW1tIE1hZ3VpcmUgJmx0OzxhIGhyZWY9Im1haWx0bzpjYW1tQG1hZ3VpcmVmYW1pbHku
b3JnIj5jYW1tQG1hZ3VpcmVmYW1pbHkub3JnPC9hPiZndDsgc2NocmllYiBhbSBGci4sIDIuIE1h
aSAyMDI1LCAyMjoyODo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBz
dHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2Io
MjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPkdyZWV0aW5ncyHCoCBHbGFkIHlvdSBub3Rp
Y2VkIHRoaXMuPGJyPg0KPGJyPg0KVGhpcyB0b3VjaGVzIG9uIDQgb3B0aW1pemF0aW9ucyBjdXJy
ZW50bHkgaW4gcGxhY2UgaW4gdGhlIGNvbXBpbGVyLCBhbmQ8YnI+DQpvbmUgdGhhdCBpcyBub3Qu
PGJyPg0KPGJyPg0KMSkgR0NMIHdpbGwgb3B0aW1pemUgZXFsIHRvIGVxIHdoZW4gaXQgY2FuIGlu
ZmVyIHRoZSB0eXBlcyBvbiBlaXRoZXIgYXJnPGJyPg0KdGhhdCB3b3VsZCBwZXJtaXQgdGhpcy48
YnI+DQo8YnI+DQoyKSBHQ0wgd2lsbCB1bnJvbGwgbG9vcHMgb3ZlciBjb25zdGFudCAoYW5kIG5v
bi1jb25zdGFudCkgbGlzdHMgdXAgdG88YnI+DQoqc3JjLWxvb3AtdW5yb2xsLWxpbWl0KiAoZGVm
YXVsdCAyMCk8YnI+DQo8YnI+DQozKSBHQ0wgd2lsbCBwdWxsIHRoZSB0eXBlLW9mIG9uIHVua25v
d24geCBvdXQgb2YgdGhlIGxvb3AgYW5kIHVzZSBpdCBhczxicj4NCmEga2V5IHRvIGEgc3dpdGNo
IHRhYmxlIGluc2lkZSB0aGUgbG9vcC48YnI+DQo8YnI+DQo0KSBHQ0wgd2lsbCByZXBsYWNlIHRo
ZSBsb29wIGVudGlyZWx5IHdpdGggaXRzIGtub3duIHJlc3VsdCB3aGVuPGJyPg0KcG9zc2libGUu
IDxicj4NCjxicj4NCjUpIEdDTCB3aWxsIG5vdCBhdHRlbXB0IHRvIGFnZ3JlZ2F0ZSB0aGUgdHlw
ZXMgYWNyb3NzIGFsbCBlbGVtZW50cyBvZiBhPGJyPg0KbGlzdCwgaS5lLiB0aGlzIHdob2xlIGxp
c3QgaXMgb2YgdHlwZSBzeW1ib2wsIHNvIHB1bGwgdGhhdCBvdXQgb2YgdGhlPGJyPg0KbG9vcCBh
cyB3ZWxsLsKgIFRoaXMgc2VlbXMgaWxsLWFkdmlzZWQgYW5kIHVucHJhY3RpY2FsIHRvIG1lIGF0
IGxlYXN0IGF0PGJyPg0KdGhlIG1vbWVudC48YnI+DQo8YnI+DQpZb3UgY2FuIGdldCBtb3JlIGlu
Zm8gb24gd2hhdCBpcyBoYXBwZW5pbmcgYnkgc2V0dGluZzxicj4NCmNvbXBpbGVyOjoqYW5ub3Rh
dGUqIHRvIHQgYmVmb3JlIHJ1bm5pbmcgZGlzYXNzZW1ibGUuwqAgSWYgeW91IG9ubHkgd2FudDxi
cj4NCnRoZSBDIGNvZGUgYW5kIG5vdCB0aGUgZGlzYXNzZW1ibHksIChzZXRxPGJyPg0KY29tcGls
ZXI6OipkaXNhc3NlbWJsZS1vYmpkdW1wKiBuaWwpLjxicj4NCjxicj4NCllvdSBjYW4gYWxzbyBz
ZWUgdGhlIGxpc3Agc291cmNlIG9mIG1lbWJlcjo8YnI+DQo8YnI+DQooJiMzOTtzaTo6ZmxlIGlz
IHNob3J0aGFuZCBmb3IgJiMzOTtmdW5jdGlvbi1sYW1iZGEtZXhwcmVzc2lvbik8YnI+DQo8YnI+
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PTxicj4NCihzaTo6ZmxlICYjMzk7bWVtYmVyKTxicj4NCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PGJyPg0KKExBTUJEQTxicj4NCsKgKFNZU1RFTTo6SVRFTSBMSVNU
ICZhbXA7S0VZIFNZU1RFTTo6S0VZIFNZU1RFTTo6VEVTVCBTWVNURU06OlRFU1QtTk9UKTxicj4N
CsKgKERFQ0xBUkUgKE9QVElNSVpFIChTQUZFVFkgMSkpKSAoQ0hFQ0stVFlQRSBMSVNUIFBST1BF
Ui1MSVNUKTxicj4NCsKgKENIRUNLLVRZUEUgU1lTVEVNOjpURVNUIChPUiBOVUxMIFNZU1RFTTo6
RlVOQ1RJT04tREVTSUdOQVRPUikpPGJyPg0KwqAoQ0hFQ0stVFlQRSBTWVNURU06OlRFU1QtTk9U
IChPUiBOVUxMIFNZU1RFTTo6RlVOQ1RJT04tREVTSUdOQVRPUikpPGJyPg0KwqAoQ0hFQ0stVFlQ
RSBTWVNURU06OktFWSAoT1IgTlVMTCBTWVNURU06OkZVTkNUSU9OLURFU0lHTkFUT1IpKTxicj4N
CsKgKEJMT0NLPGJyPg0KwqAgTUVNQkVSPGJyPg0KwqAgKExFVCo8YnI+DQrCoCDCoCgoIzpHNTY4
PGJyPg0KwqAgwqAgwqAoQ09FUkNFIChPUiBTWVNURU06OlRFU1QgU1lTVEVNOjpURVNULU5PVCAj
JiMzOTtFUUwpICYjMzk7RlVOQ1RJT04pKTxicj4NCsKgIMKgICgjOkc1Njk8YnI+DQrCoCDCoCDC
oChJRjxicj4NCsKgIMKgIMKgIChFUSAjOkc1NjggIyYjMzk7RVEpIDA8YnI+DQrCoCDCoCDCoCAo
SUY8YnI+DQrCoCDCoCDCoCDCoChFUSAjOkc1NjggIyYjMzk7RVFMKSAxPGJyPg0KwqAgwqAgwqAg
wqAoSUY8YnI+DQrCoCDCoCDCoCDCoCAoRVEgIzpHNTY4ICMmIzM5O0VRVUFMKSAyPGJyPg0KwqAg
wqAgwqAgwqAgKElGIChFUSAjOkc1NjggIyYjMzk7RVFVQUxQKSAzIChJRiAoRVEgIzpHNTY4ICMm
IzM5O0ZVTkNBTEwpIDQgNSkpKSkpKTxicj4NCsKgIMKgICgjOkc1NzAgKElGIFNZU1RFTTo6S0VZ
IChDT0VSQ0UgU1lTVEVNOjpLRVkgJiMzOTtGVU5DVElPTikpKTxicj4NCsKgIMKgICgjOkc1NzAg
KElGIChOT1QgKEVRICM6RzU3MCAjJiMzOTtJREVOVElUWSkpICM6RzU3MCkpKTxicj4NCsKgIMKg
KEFORDxicj4NCsKgIMKgIFNZU1RFTTo6VEVTVCBTWVNURU06OlRFU1QtTk9UPGJyPg0KwqAgwqAg
KEVSUk9SICZxdW90O2JvdGggdGVzdCBhbmQgdGVzdCBub3Qgc3VwcGxpZWQmcXVvdDspKTxicj4N
CsKgIMKgKExFVCo8YnI+DQrCoCDCoCBOSUw8YnI+DQrCoCDCoCAoTEFCRUxTPGJyPg0KwqAgwqAg
wqAoKFNZU1RFTTo6S0VZPGJyPg0KwqAgwqAgwqAgwqAoU1lTVEVNOjpYKSAoSUYgIzpHNTcwIChG
VU5DQUxMICM6RzU3MCBTWVNURU06OlgpIFNZU1RFTTo6WCkpPGJyPg0KwqAgwqAgwqAgKFNZU1RF
TTo6VEVTVC1OTy1LRVk8YnI+DQrCoCDCoCDCoCDCoChTWVNURU06OlggU1lTVEVNOjpZKTxicj4N
CsKgIMKgIMKgIMKgKElGPGJyPg0KwqAgwqAgwqAgwqAgKENBU0U8YnI+DQrCoCDCoCDCoCDCoCDC
oCM6RzU2OSAoMCAoRVEgU1lTVEVNOjpYIFNZU1RFTTo6WSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAo
MSAoRVFMIFNZU1RFTTo6WCBTWVNURU06OlkpKSAoMiAoRVFVQUwgU1lTVEVNOjpYIFNZU1RFTTo6
WSkpPGJyPg0KwqAgwqAgwqAgwqAgwqAoMyAoRVFVQUxQIFNZU1RFTTo6WCBTWVNURU06OlkpKTxi
cj4NCsKgIMKgIMKgIMKgIMKgKDQgKEZVTkNBTEwgU1lTVEVNOjpYIFNZU1RFTTo6WSkpPGJyPg0K
wqAgwqAgwqAgwqAgwqAoT1RIRVJXSVNFIChGVU5DQUxMICM6RzU2OCBTWVNURU06OlggU1lTVEVN
OjpZKSkpPGJyPg0KwqAgwqAgwqAgwqAgKE5PVCBTWVNURU06OlRFU1QtTk9UKSBTWVNURU06OlRF
U1QtTk9UKSk8YnI+DQrCoCDCoCDCoCAoU1lTVEVNOjpURVNUPGJyPg0KwqAgwqAgwqAgwqAoU1lT
VEVNOjpYIFNZU1RFTTo6WSk8YnI+DQrCoCDCoCDCoCDCoChTWVNURU06OlRFU1QtTk8tS0VZIFNZ
U1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkpKTxicj4NCsKgIMKgIMKgKERFQ0xBUkUg
KElHTk9SQUJMRSAjJiMzOTtTWVNURU06OlRFU1QpKTxicj4NCsKgIMKgIMKgKElGPGJyPg0KwqAg
wqAgwqAgKENBU0U8YnI+DQrCoCDCoCDCoCDCoCM6RzU2OTxicj4NCsKgIMKgIMKgIMKgKCgxIDIg
Myk8YnI+DQrCoCDCoCDCoCDCoCAoT1I8YnI+DQrCoCDCoCDCoCDCoCDCoChDQVNFPGJyPg0KwqAg
wqAgwqAgwqAgwqAgIzpHNTY5ICgxIChFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSk8YnI+DQrCoCDC
oCDCoCDCoCDCoCAoMiAoRVFVQUwtSVMtRVEgU1lTVEVNOjpJVEVNKSk8YnI+DQrCoCDCoCDCoCDC
oCDCoCAoMyAoRVFVQUxQLUlTLUVRIFNZU1RFTTo6SVRFTSkpKSkpKTxicj4NCsKgIMKgIMKgIChT
RVRRICM6RzU2OSAwKSk8YnI+DQrCoCDCoCDCoChNQUNST0xFVDxicj4NCsKgIMKgIMKgICgoU1lT
VEVNOjpDT0xMRUNUPGJyPg0KwqAgwqAgwqAgwqAgKFNZU1RFTTo6QSBTWVNURU06OkIgU1lTVEVN
OjpDKTxicj4NCsKgIMKgIMKgIMKgIChMSVNUPGJyPg0KwqAgwqAgwqAgwqAgwqAmIzM5O0xFVCAo
TElTVCAoTElTVCAmIzM5O1NZU1RFTTo6VE1QIFNZU1RFTTo6QSkpPGJyPg0KwqAgwqAgwqAgwqAg
wqAoTElTVDxicj4NCsKgIMKgIMKgIMKgIMKgICYjMzk7U0VUUSBTWVNURU06OkM8YnI+DQrCoCDC
oCDCoCDCoCDCoCAoTElTVDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgJiMzOTtJRiBTWVNURU06OkM8
YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChMSVNUICYjMzk7Q0RSIChMSVNUICYjMzk7UlBMQUNEIFNZ
U1RFTTo6QyAmIzM5O1NZU1RFTTo6VE1QKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChMSVNUICYj
Mzk7U0VUUSBTWVNURU06OkIgJiMzOTtTWVNURU06OlRNUCkpKSkpKTxicj4NCsKgIMKgIMKgIChJ
Rjxicj4NCsKgIMKgIMKgIMKgKE5PVDxicj4NCsKgIMKgIMKgIMKgIChNQVBMPGJyPg0KwqAgwqAg
wqAgwqAgwqAoTEFNQkRBPGJyPg0KwqAgwqAgwqAgwqAgwqAgKFNZU1RFTTo6WCk8YnI+DQrCoCDC
oCDCoCDCoCDCoCAoSUY8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChTWVNURU06OlRFU1QgU1lTVEVN
OjpJVEVNIChDQVIgU1lTVEVNOjpYKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoChSRVRVUk4tRlJP
TSBNRU1CRVIgU1lTVEVNOjpYKSkpPGJyPg0KwqAgwqAgwqAgwqAgwqBMSVNUKSk8YnI+DQrCoCDC
oCDCoCDCoE5JTCkpKSkpKSk8YnI+DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTxicj4NCjxicj4NClNv
bWUgZXhhbXBsZXM6PGJyPg0KPGJyPg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08YnI+DQpVbmtub3du
IHggJmFtcDsgeSwgKGRpc2Fzc2VtYmxlICYjMzk7KGxhbWJkYSAoeCB5KSAobWVtYmVyIHggeSkp
PGJyPg0KbG9vcCBub3QgdW5yb2xsZWQsIHR5cGUtb2YgeCBwdWxsZWQgb3V0LCBlcWwgdXNlZCB1
bmxlc3MgcnVudGltZTxicj4NCmRldGVybWluYXRpb24gb2YgeCBhbGxvd3MgZXEuPGJyPg0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT08YnI+DQpzdGF0aWMgb2JqZWN0IExJMV9fQ01QX0FOT05fX19nYXpv
bmtfMjIwNTY2N18wKHJlZ2lzdGVyIG9iamVjdCBWMyxvYmplY3QgVjQpPGJyPg0Ke8KgIMKgIMKg
IMKgIFZNQjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAgwqAgLyooTUVNQkVSIFggWSkqLzxicj4N
CsKgIMKgIMKgIMKgIHtyZWdpc3RlciBmaXhudW0gVjU7PGJyPg0KwqAgwqAgwqAgwqAgVjU9IDE7
PGJyPg0KwqAgwqAgwqAgwqAgLyooRVFMLUlTLUVRIFNZU1RFTTo6SVRFTSkqLzxicj4NCsKgIMKg
IMKgIMKgIHN3aXRjaCgvKiAoQVBQTElFRCBUUDQgU1lTVEVNOjpYKSAqL3RwNChWMykpezxicj4N
CsKgIMKgIMKgIMKgIGNhc2UgLTE6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNzs8YnI+DQpUNzo7
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDE6
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUODs8YnI+DQpUODo7PGJyPg0KwqAgwqAgwqAgwqAgY2Fz
ZSAyOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDk7PGJyPg0KVDk6Ozxicj4NCsKgIMKgIMKgIMKg
IGNhc2UgMzo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMDs8YnI+DQpUMTA6Ozxicj4NCsKgIMKg
IMKgIMKgIGNhc2UgNDo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMTs8YnI+DQpUMTE6Ozxicj4N
CsKgIMKgIMKgIMKgIGNhc2UgNTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMjs8YnI+DQpUMTI6
Ozxicj4NCsKgIMKgIMKgIMKgIGNhc2UgNjo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxMzs8YnI+
DQpUMTM6Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAg
ZGVmYXVsdDo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxNDs8YnI+DQpUMTQ6Ozxicj4NCsKgIMKg
IMKgIMKgIGdvdG8gVDU7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzs8YnI+DQrCoCDC
oCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDC
oCAvKiBFTkQgKEVRTC1JUy1FUSBTWVNURU06OklURU0pKi88YnI+DQrCoCDCoCDCoCDCoCBnb3Rv
IFQ1Ozxicj4NClQ1Ojs8YnI+DQrCoCDCoCDCoCDCoCBWNT0gMDs8YnI+DQrCoCDCoCDCoCDCoCBn
b3RvIFQyOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7PGJyPg0KVDM6Ozxicj4NCsKg
IMKgIMKgIMKgIGdvdG8gVDI7PGJyPg0KVDI6Ozxicj4NCsKgIMKgIMKgIMKgIC8qKE1BUEwgKExB
TUJEQSAoU1lTVEVNOjpYKSAoSUYgIyAjKSkgTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZ
U1RFTTo6TE1BUFIgU1lTVEVNOjpGVU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RF
TTo6TE1BUCBTWVNURU06OkYgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAge3JlZ2lzdGVy
IG9iamVjdCBWNjs8YnI+DQrCoCDCoCDCoCDCoCBWNj0gKFY0KTs8YnI+DQrCoCDCoCDCoCDCoCBn
b3RvIFQyNDs8YnI+DQpUMjQ6Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCgoVjYpKT09Q25pbCl7PGJy
Pg0KwqAgwqAgwqAgwqAgZ290byBUMjY7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKg
IMKgIC8qKChMQU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88
YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRFU1QgU1lTVEVNOjpJVEVNIChDQVIgU1lTVEVN
OjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RFTTo6VEVTVC1OTy1LRVkgU1lTVEVNOjpY
IChTWVNURU06OktFWSBTWVNURU06OlkpKSovPGJyPg0KwqAgwqAgwqAgwqAgc3dpdGNoKFY1KXs8
YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDA6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzY7PGJyPg0K
VDM2Ojs8YnI+DQrCoCDCoCDCoCDCoCBpZighKCgoVjMpKT09KC8qIChTWVNURU06OktFWSBTWVNU
RU06OlkpICovKFY2KS0mZ3Q7Yy5jX2NhcikpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMzs8
YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0KPGJyPg0K
wqAgwqAgwqAgwqAgY2FzZSAxOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM3Ozxicj4NClQzNzo7
PGJyPg0KwqAgwqAgwqAgwqAgaWYoIShlcWwoKFYzKSwvKiAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZ
KSAqLyhWNiktJmd0O2MuY19jYXIpKSl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzM7PGJyPg0K
wqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM0Ozxicj4NCjxicj4NCsKgIMKg
IMKgIMKgIGdvdG8gVDMzOzxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3Rv
IFQzMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzNDs8YnI+DQpUMzQ6Ozxicj4NCsKg
IMKgIMKgIMKgIGdvdG8gVDMyOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDMzOzxicj4N
ClQzMzo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzA7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAg
LyogRU5EIChTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVN
OjpZKSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpURVNUIFNZU1RFTTo6SVRF
TSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMjs8YnI+DQpUMzI6
Ozxicj4NCsKgIMKgIMKgIMKgIHtvYmplY3QgVjggPSAoVjYpOzxicj4NCsKgIMKgIMKgIMKgIFZN
UjEoVjgpO308YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMDs8YnI+DQpUMzA6Ozxicj4NCsKgIMKg
IMKgIMKgIC8qIEVORCAoKExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RF
TTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIHtvYmplY3QgVjk7PGJyPg0KwqAgwqAgwqAgwqAgVjk9
IC8qIChBUFBMSUVEIENEUiBTWVNURU06OlgpICovVjYtJmd0O2MuY19jZHI7PGJyPg0KwqAgwqAg
wqAgwqAgVjY9IChWOSk7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjQ7PGJyPg0KwqAgwqAgwqAg
wqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI2Ozxicj4NClQyNjo7PGJyPg0KwqAgwqAgwqAg
wqAgZ290byBUMjI7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjI7PGJyPg0KwqAgwqAg
wqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiBT
WVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMjs8YnI+DQpUMjI6Ozxicj4NCsKg
IMKgIMKgIMKgIGlmKCgoVjQpKT09Q25pbCl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjA7PGJy
Pg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQUiBT
WVNURU06OkZVTiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNQVBMIChMQU1CREEg
KFNZU1RFTTo6WCkgKElGICMgIykpIExJU1QpKi88YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxNzs8
YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMDs8YnI+DQpUMjA6Ozxicj4NCsKgIMKgIMKg
IMKgIHtvYmplY3QgVjEwID0gQ25pbDs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFYxMCk7fTxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDE3Ozxicj4NClQxNzo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVj
dCBWMTEgPSBDbmlsOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjExKTt9fTxicj4NCsKgIMKgIMKg
IMKgIC8qIEVORCAoTUVNQkVSIFggWSkqLzxicj4NCn08YnI+DQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PTxicj4NCnN5bWJvbCB4LCB1bmtub3duIHksIChkaXNhc3NlbWJsZSAmIzM5OyhsYW1iZGEgKHgg
eSkgKGRlY2xhcmUgKHN5bWJvbCB4KSkgKG1lbWJlciB4IHkpKSk8YnI+DQpsb29wIG5vdCB1bnJv
bGxlZCwgZXFsLSZndDtlcSwgbm8gdHlwaW5nPGJyPg0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08YnI+
DQpzdGF0aWMgb2JqZWN0IExJMV9fQ01QX0FOT05fX19nYXpvbmtfMjIwNTY2N18wKHJlZ2lzdGVy
IG9iamVjdCBWMyxvYmplY3QgVjQpPGJyPg0Ke8KgIMKgIMKgIMKgIFZNQjEgVk1TMSBWTVYxPGJy
Pg0KwqAgwqAgwqAgwqAgLyooTUVNQkVSIFggWSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKE1BUEwg
KExBTUJEQSAoU1lTVEVNOjpYKSAoSUYgIyAjKSkgTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8q
KFNZU1RFTTo6TE1BUFIgU1lTVEVNOjpGVU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZ
U1RFTTo6TE1BUCBTWVNURU06OkYgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAge3JlZ2lz
dGVyIG9iamVjdCBWNTs8YnI+DQrCoCDCoCDCoCDCoCBWNT0gKFY0KTs8YnI+DQrCoCDCoCDCoCDC
oCBnb3RvIFQ5Ozxicj4NClQ5Ojs8YnI+DQrCoCDCoCDCoCDCoCBpZigoKFY1KSk9PUNuaWwpezxi
cj4NCsKgIMKgIMKgIMKgIGdvdG8gVDExOzxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDC
oCDCoCAvKigoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSov
PGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpURVNUIFNZU1RFTTo6SVRFTSAoQ0FSIFNZU1RF
TTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6
WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkqLzxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWMykp
PT0oLyogKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkgKi8oVjUpLSZndDtjLmNfY2FyKSkpezxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDE4Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDC
oCBnb3RvIFQxNzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQxODs8YnI+DQpUMTg6Ozxi
cj4NCsKgIMKgIMKgIMKgIGdvdG8gVDE1Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAo
U1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkpKi88
YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBT
WVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTc7PGJyPg0KVDE3Ojs8YnI+DQrC
oCDCoCDCoCDCoCB7b2JqZWN0IFY3ID0gKFY1KTs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFY3KTt9
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTU7PGJyPg0KVDE1Ojs8YnI+DQrCoCDCoCDCoCDCoCAv
KiBFTkQgKChMQU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88
YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY4Ozxicj4NCsKgIMKgIMKgIMKgIFY4PSAvKiAoQVBQ
TElFRCBDRFIgU1lTVEVNOjpYKSAqL1Y1LSZndDtjLmNfY2RyOzxicj4NCsKgIMKgIMKgIMKgIFY1
PSAoVjgpOzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDk7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDExOzxicj4NClQxMTo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBU
Nzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ3Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+
DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgU1lTVEVNOjpYKSov
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNzs8YnI+DQpUNzo7PGJyPg0KwqAgwqAgwqAgwqAgaWYo
KChWNCkpPT1DbmlsKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ1Ozxicj4NCsKgIMKgIMKgIMKg
IH08YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUFIgU1lTVEVNOjpGVU4gTElT
VCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoTUFQTCAoTEFNQkRBIChTWVNURU06OlgpIChJ
RiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjs8YnI+DQo8YnI+DQrCoCDC
oCDCoCDCoCBnb3RvIFQ1Ozxicj4NClQ1Ojs8YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY5ID0g
Q25pbDs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFY5KTt9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBU
Mjs8YnI+DQpUMjo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTAgPSBDbmlsOzxicj4NCsKg
IMKgIMKgIMKgIFZNUjEoVjEwKTt9PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNRU1CRVIgWCBZ
KSovPGJyPg0KfTxicj4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PGJyPg0KVW5rbm93biB4LCBrbm93
biBsaXN0LCAoZGlzYXNzZW1ibGUgJiMzOTsobGFtYmRhICh4IHkgeiB3KcKgIChtZW1iZXIgeCAo
bGlzdCB5IHogdykpKSk8YnI+DQpsb29wIHVucm9sbGVkLCB0eXBlLW9mIHggcHVsbGVkIG91dDxi
cj4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PGJyPg0Kc3RhdGljIG9iamVjdCBMSTFfX0NNUF9BTk9O
X19fZ2F6b25rXzIyMDU2NjdfMShvYmplY3QgVjUsb2JqZWN0IFY2LG9iamVjdCBWNyxvYmplY3Qg
VjgpPGJyPg0Ke8KgIMKgIMKgIMKgIFZNQjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAgwqAgLyoo
TUVNQkVSIFggKExJU1QgWSBaIC4uLikpKi88YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY5Ozxi
cj4NCsKgIMKgIMKgIMKgIFY5PSBsaXN0KDMsKFY2KSwoVjcpLChWOCkpOzxicj4NCsKgIMKgIMKg
IMKgIHtmaXhudW0gVjEwOzxicj4NCsKgIMKgIMKgIMKgIFYxMD0gMTs8YnI+DQrCoCDCoCDCoCDC
oCAvKihFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgc3dpdGNoKC8q
IChBUFBMSUVEIFRQNCBTWVNURU06OlgpICovdHA0KFY1KSl7PGJyPg0KwqAgwqAgwqAgwqAgY2Fz
ZSAtMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ4Ozxicj4NClQ4Ojs8YnI+DQrCoCDCoCDCoCDC
oCBnb3RvIFQ2Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDCoCDCoCDC
oCBnb3RvIFQ5Ozxicj4NClQ5Ojs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDI6PGJyPg0KwqAgwqAg
wqAgwqAgZ290byBUMTA7PGJyPg0KVDEwOjs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDM6PGJyPg0K
wqAgwqAgwqAgwqAgZ290byBUMTE7PGJyPg0KVDExOjs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDQ6
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTI7PGJyPg0KVDEyOjs8YnI+DQrCoCDCoCDCoCDCoCBj
YXNlIDU6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTM7PGJyPg0KVDEzOjs8YnI+DQrCoCDCoCDC
oCDCoCBjYXNlIDY6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTQ7PGJyPg0KVDE0Ojs8YnI+DQrC
oCDCoCDCoCDCoCBnb3RvIFQ0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGRlZmF1bHQ6PGJyPg0K
wqAgwqAgwqAgwqAgZ290byBUMTU7PGJyPg0KVDE1Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ2
Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChFUUwt
SVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNjs8YnI+DQpUNjo7
PGJyPg0KwqAgwqAgwqAgwqAgVjEwPSAwOzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7PGJyPg0K
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDs8YnI+DQpUNDo7PGJyPg0KwqAgwqAgwqAgwqAgZ290
byBUMzs8YnI+DQpUMzo7PGJyPg0KwqAgwqAgwqAgwqAgLyooTUFQTCAoTEFNQkRBIChTWVNURU06
OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQUiBT
WVNURU06OkZVTiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQIFNZU1RF
TTo6RiBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNURU06Olgp
IChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVN
OjpURVNUIFNZU1RFTTo6SVRFTSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAv
KihTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkq
Lzxicj4NCsKgIMKgIMKgIMKgIHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMDo8
YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNzs8YnI+DQpUMjc6Ozxicj4NCsKgIMKgIMKgIMKgIGlm
KCEoKChWNSkpPT0oKFY2KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+DQrCoCDC
oCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0KPGJyPg0KwqAgwqAgwqAg
wqAgY2FzZSAxOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI4Ozxicj4NClQyODo7PGJyPg0KwqAg
wqAgwqAgwqAgaWYoIShlcWwoKFY1KSwoVjYpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI0
Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNTs8YnI+DQo8YnI+
DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAg
wqAgZ290byBUMjQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0KVDI1Ojs8
YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQy
NDs8YnI+DQpUMjQ6Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDIxOzxicj4NCjxicj4NCsKgIMKg
IMKgIMKgIC8qIEVORCAoU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZ
IFNZU1RFTTo6WSkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNU
RU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjM7PGJy
Pg0KVDIzOjs8YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFYxMSA9IChWOSk7PGJyPg0KwqAgwqAg
wqAgwqAgVk1SMShWMTEpO308YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMTs8YnI+DQpUMjE6Ozxi
cj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoKExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFSRSAjKSAu
Li4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RFTTo6TE1BUCBTWVNURU06
OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooKExBTUJEQSAoU1lTVEVN
OjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZ
U1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAg
wqAgLyooU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6
WSkpKi88YnI+DQrCoCDCoCDCoCDCoCBzd2l0Y2goVjEwKXs8YnI+DQrCoCDCoCDCoCDCoCBjYXNl
IDA6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzc7PGJyPg0KVDM3Ojs8YnI+DQrCoCDCoCDCoCDC
oCBpZighKCgoVjUpKT09KChWNykpKSl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0K
wqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxicj4NCjxicj4NCsKgIMKg
IMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzODs8YnI+DQpUMzg6Ozxicj4N
CsKgIMKgIMKgIMKgIGlmKCEoZXFsKChWNSksKFY3KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3Rv
IFQzNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzU7PGJyPg0K
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKg
IMKgIMKgIGdvdG8gVDM0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxicj4NClQz
NTo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzM7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290
byBUMzQ7PGJyPg0KVDM0Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMTs8YnI+DQo8YnI+DQrC
oCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVC1OTy1LRVkgU1lTVEVNOjpYIChTWVNURU06
OktFWSBTWVNURU06OlkpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OlRFU1Qg
U1lTVEVNOjpJVEVNIChDQVIgU1lTVEVNOjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDMz
Ozxicj4NClQzMzo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTIgPSAvKiAoQ0RSIFNZU1RF
TTo6WCkgKi9WOS0mZ3Q7Yy5jX2Nkcjs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFYxMik7fTxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDMxOzxicj4NClQzMTo7PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5E
ICgoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSovPGJyPg0K
wqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiAoQ0RSIFNZU1RFTTo6WCkpKi88
YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikg
U1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpURVNUIFNZU1RFTTo6SVRF
TSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRFU1QtTk8t
S0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkqLzxicj4NCsKgIMKgIMKgIMKg
IHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMDo8YnI+DQrCoCDCoCDCoCDCoCBn
b3RvIFQ0Nzs8YnI+DQpUNDc6Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWNSkpPT0oKFY4KSkp
KXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAg
wqAgwqAgwqAgZ290byBUNDU7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgY2FzZSAxOjxicj4NCsKg
IMKgIMKgIMKgIGdvdG8gVDQ4Ozxicj4NClQ0ODo7PGJyPg0KwqAgwqAgwqAgwqAgaWYoIShlcWwo
KFY1KSwoVjgpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ0Ozxicj4NCsKgIMKgIMKgIMKg
IH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3Rv
IFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDQ7PGJyPg0K
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDU7PGJyPg0KVDQ1Ojs8YnI+DQrCoCDCoCDCoCDCoCBn
b3RvIFQ0Mzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQpUNDQ6Ozxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDQxOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lT
VEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkpKi88YnI+
DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBTWVNU
RU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDM7PGJyPg0KVDQzOjs8YnI+DQrCoCDC
oCDCoCDCoCB7b2JqZWN0IFYxMyA9IC8qIChDRFIgU1lTVEVNOjpYKSAqL1Y5LSZndDtjLmNfY2Ry
LSZndDtjLmNfY2RyOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjEzKTt9PGJyPg0KwqAgwqAgwqAg
wqAgZ290byBUNDE7PGJyPg0KVDQxOjs8YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKChMQU1CREEg
KFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDC
oCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0K
wqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OkxNQVAgU1lTVEVNOjpGIChDRFIgU1lTVEVNOjpY
KSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiBTWVNU
RU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUFIgU1lTVEVNOjpG
VU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoTUFQTCAoTEFNQkRBIChTWVNURU06
OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTQgPSBDbmls
Ozxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjE0KTt9fX08YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQg
KE1FTUJFUiBYIChMSVNUIFkgWiAuLi4pKSovPGJyPg0KfTxicj4NCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PGJyPg0KS25vd24gcmVzdWx0LCAoZGlzYXNzZW1ibGUgJiMzOTsobGFtYmRhICh4IHkgeiB3
KcKgIChkZWNsYXJlIChzeW1ib2wgeikpPGJyPg0KwqAgwqAgwqAgwqAgKG1lbWJlciB6IChsaXN0
IDMgeiB3KSkpKTxicj4NCmxvb3AgZWxpbWluYXRlZDxicj4NCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PGJyPg0Kc3RhdGljIG9iamVjdCBMSTFfX0NNUF9BTk9OX19fZ2F6b25rXzIyMDU2NjdfMShvYmpl
Y3QgVjUsb2JqZWN0IFY2LG9iamVjdCBWNyxvYmplY3QgVjgpPGJyPg0Ke8KgIMKgIMKgIMKgIFZN
QjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAgwqAgLyooTUVNQkVSIFogKExJU1QgMyBaIC4uLikp
Ki88YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFY5Ozxicj4NCsKgIMKgIMKgIMKgIFY5PSBsaXN0
KDMsbWFrZV9maXhudW0oMyksKFY3KSwoVjgpKTs8YnI+DQrCoCDCoCDCoCDCoCAvKihNQVBMIChM
QU1CREEgKFNZU1RFTTo6WCkgKElGICMgIykpIExJU1QpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihT
WVNURU06OkxNQVBSIFNZU1RFTTo6RlVOIExJU1QpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNU
RU06OkxNQVAgU1lTVEVNOjpGIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RF
TTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyoo
KExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKg
IMKgIMKgIMKgIHtvYmplY3QgVjEwID0gLyogKENEUiBTWVNURU06OlgpICovVjktJmd0O2MuY19j
ZHI7PGJyPg0KwqAgwqAgwqAgwqAgVk1SMShWMTApO308YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQg
KChMQU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88YnI+DQrC
oCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06Olgp
KSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OkxNQVAgU1lTVEVNOjpGIFNZU1RF
TTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQUiBTWVNURU06OkZV
TiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNQVBMIChMQU1CREEgKFNZU1RFTTo6
WCkgKElGICMgIykpIExJU1QpKi99PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChNRU1CRVIgWiAo
TElTVCAzIFogLi4uKSkqLzxicj4NCn08YnI+DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PTxicj4NClVu
a25vd24geCwga25vd24gbGlzdCBvZiBzeW1ib2xzIChkaXNhc3NlbWJsZSAmIzM5OyhsYW1iZGEg
KHggeSB6IHcpPGJyPg0KwqAgwqAgwqAgwqAgKGRlY2xhcmUgKHN5bWJvbCB5IHogdyApKSAobWVt
YmVyIHggKGxpc3QgeSB6IHcpKSkpPGJyPg0KbG9vcCB1bnJvbGxlZCwgdHlwZS1vZiB4IHB1bGxl
ZCBvdXQsIHdoZW4geCBpcyBlLmcuIGludGVnZXIgZXFsIHN0aWxsPGJyPg0KwqAgwqAgwqAgwqAg
b3B0aW1pemVkIHRvIGVxIGVsZW1lbnQgd2lzZSBhcyBhbGwgbGlzdCBlbGVtZW50cyBhcmUgc3lt
Ym9sLjxicj4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PGJyPg0Kc3RhdGljIG9iamVjdCBMSTFfX0NN
UF9BTk9OX19fZ2F6b25rXzIyMDU2NjdfMShvYmplY3QgVjUsb2JqZWN0IFY2LG9iamVjdCBWNyxv
YmplY3QgVjgpPGJyPg0Ke8KgIMKgIMKgIMKgIFZNQjEgVk1TMSBWTVYxPGJyPg0KwqAgwqAgwqAg
wqAgLyooTUVNQkVSIFggKExJU1QgWSBaIC4uLikpKi88YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0
IFY5Ozxicj4NCsKgIMKgIMKgIMKgIFY5PSBsaXN0KDMsKFY2KSwoVjcpLChWOCkpOzxicj4NCsKg
IMKgIMKgIMKgIHtmaXhudW0gVjEwOzxicj4NCsKgIMKgIMKgIMKgIFYxMD0gMTs8YnI+DQrCoCDC
oCDCoCDCoCAvKihFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgc3dp
dGNoKC8qIChBUFBMSUVEIFRQNCBTWVNURU06OlgpICovdHA0KFY1KSl7PGJyPg0KwqAgwqAgwqAg
wqAgY2FzZSAtMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ4Ozxicj4NClQ4Ojs8YnI+DQrCoCDC
oCDCoCDCoCBnb3RvIFQ2Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDC
oCDCoCDCoCBnb3RvIFQ5Ozxicj4NClQ5Ojs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDI6PGJyPg0K
wqAgwqAgwqAgwqAgZ290byBUMTA7PGJyPg0KVDEwOjs8YnI+DQrCoCDCoCDCoCDCoCBjYXNlIDM6
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTE7PGJyPg0KVDExOjs8YnI+DQrCoCDCoCDCoCDCoCBj
YXNlIDQ6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTI7PGJyPg0KVDEyOjs8YnI+DQrCoCDCoCDC
oCDCoCBjYXNlIDU6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTM7PGJyPg0KVDEzOjs8YnI+DQrC
oCDCoCDCoCDCoCBjYXNlIDY6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTQ7PGJyPg0KVDE0Ojs8
YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGRlZmF1bHQ6
PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMTU7PGJyPg0KVDE1Ojs8YnI+DQrCoCDCoCDCoCDCoCBn
b3RvIFQ2Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KwqAgwqAgwqAgwqAg
fTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5E
IChFUUwtSVMtRVEgU1lTVEVNOjpJVEVNKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNjs8YnI+
DQpUNjo7PGJyPg0KwqAgwqAgwqAgwqAgVjEwPSAwOzxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM7
PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDs8YnI+DQpUNDo7PGJyPg0KwqAgwqAgwqAg
wqAgZ290byBUMzs8YnI+DQpUMzo7PGJyPg0KwqAgwqAgwqAgwqAgLyooTUFQTCAoTEFNQkRBIChT
WVNURU06OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpM
TUFQUiBTWVNURU06OkZVTiBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQ
IFNZU1RFTTo6RiBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNU
RU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyoo
U1lTVEVNOjpURVNUIFNZU1RFTTo6SVRFTSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDC
oCDCoCAvKihTWVNURU06OlRFU1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVN
OjpZKSkqLzxicj4NCsKgIMKgIMKgIMKgIHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNh
c2UgMDo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNzs8YnI+DQpUMjc6Ozxicj4NCsKgIMKgIMKg
IMKgIGlmKCEoKChWNSkpPT0oKFY2KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+
DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0KPGJyPg0KwqAg
wqAgwqAgwqAgY2FzZSAxOjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDI4Ozxicj4NClQyODo7PGJy
Pg0KwqAgwqAgwqAgwqAgaWYoISgoKFY1KSk9PSgoVjYpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdv
dG8gVDI0Ozxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNTs8YnI+
DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAg
wqAgwqAgwqAgZ290byBUMjQ7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMjU7PGJyPg0K
VDI1Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBn
b3RvIFQyNDs8YnI+DQpUMjQ6Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDIxOzxicj4NCjxicj4N
CsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RF
TTo6S0VZIFNZU1RFTTo6WSkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVT
VCBTWVNURU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBU
MjM7PGJyPg0KVDIzOjs8YnI+DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFYxMSA9IChWOSk7PGJyPg0K
wqAgwqAgwqAgwqAgVk1SMShWMTEpO308YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQyMTs8YnI+DQpU
MjE6Ozxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoKExBTUJEQSAoU1lTVEVNOjpYKSAoREVDTEFS
RSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qKFNZU1RFTTo6TE1BUCBT
WVNURU06OkYgKENEUiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooKExBTUJEQSAo
U1lTVEVNOjpYKSAoREVDTEFSRSAjKSAuLi4pIFNZU1RFTTo6WCkqLzxicj4NCsKgIMKgIMKgIMKg
IC8qKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENBUiBTWVNURU06OlgpKSovPGJyPg0KwqAg
wqAgwqAgwqAgLyooU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZ
U1RFTTo6WSkpKi88YnI+DQrCoCDCoCDCoCDCoCBzd2l0Y2goVjEwKXs8YnI+DQrCoCDCoCDCoCDC
oCBjYXNlIDA6PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzc7PGJyPg0KVDM3Ojs8YnI+DQrCoCDC
oCDCoCDCoCBpZighKCgoVjUpKT09KChWNykpKSl7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7
PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxicj4NCjxicj4N
CsKgIMKgIMKgIMKgIGNhc2UgMTo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzODs8YnI+DQpUMzg6
Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWNSkpPT0oKFY3KSkpKXs8YnI+DQrCoCDCoCDCoCDC
oCBnb3RvIFQzNDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzU7
PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzQ7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4N
CsKgIMKgIMKgIMKgIGdvdG8gVDM0Ozxicj4NCjxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDM1Ozxi
cj4NClQzNTo7PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUMzM7PGJyPg0KPGJyPg0KwqAgwqAgwqAg
wqAgZ290byBUMzQ7PGJyPg0KVDM0Ojs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQzMTs8YnI+DQo8
YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVC1OTy1LRVkgU1lTVEVNOjpYIChT
WVNURU06OktFWSBTWVNURU06OlkpKSovPGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06
OlRFU1QgU1lTVEVNOjpJVEVNIChDQVIgU1lTVEVNOjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIGdv
dG8gVDMzOzxicj4NClQzMzo7PGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTIgPSAvKiAoQ0RS
IFNZU1RFTTo6WCkgKi9WOS0mZ3Q7Yy5jX2Nkcjs8YnI+DQrCoCDCoCDCoCDCoCBWTVIxKFYxMik7
fTxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDMxOzxicj4NClQzMTo7PGJyPg0KwqAgwqAgwqAgwqAg
LyogRU5EICgoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMpIC4uLikgU1lTVEVNOjpYKSov
PGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpMTUFQIFNZU1RFTTo6RiAoQ0RSIFNZU1RFTTo6
WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKigoTEFNQkRBIChTWVNURU06OlgpIChERUNMQVJFICMp
IC4uLikgU1lTVEVNOjpYKSovPGJyPg0KwqAgwqAgwqAgwqAgLyooU1lTVEVNOjpURVNUIFNZU1RF
TTo6SVRFTSAoQ0FSIFNZU1RFTTo6WCkpKi88YnI+DQrCoCDCoCDCoCDCoCAvKihTWVNURU06OlRF
U1QtTk8tS0VZIFNZU1RFTTo6WCAoU1lTVEVNOjpLRVkgU1lTVEVNOjpZKSkqLzxicj4NCsKgIMKg
IMKgIMKgIHN3aXRjaChWMTApezxicj4NCsKgIMKgIMKgIMKgIGNhc2UgMDo8YnI+DQrCoCDCoCDC
oCDCoCBnb3RvIFQ0Nzs8YnI+DQpUNDc6Ozxicj4NCsKgIMKgIMKgIMKgIGlmKCEoKChWNSkpPT0o
KFY4KSkpKXs8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJy
Pg0KwqAgwqAgwqAgwqAgZ290byBUNDU7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgY2FzZSAxOjxi
cj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ4Ozxicj4NClQ0ODo7PGJyPg0KwqAgwqAgwqAgwqAgaWYo
ISgoKFY1KSk9PSgoVjgpKSkpezxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQ0Ozxicj4NCsKgIMKg
IMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDC
oCBnb3RvIFQ0NDs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDQ7
PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDU7PGJyPg0KVDQ1Ojs8YnI+DQrCoCDCoCDC
oCDCoCBnb3RvIFQ0Mzs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBnb3RvIFQ0NDs8YnI+DQpUNDQ6
Ozxicj4NCsKgIMKgIMKgIMKgIGdvdG8gVDQxOzxicj4NCjxicj4NCsKgIMKgIMKgIMKgIC8qIEVO
RCAoU1lTVEVNOjpURVNULU5PLUtFWSBTWVNURU06OlggKFNZU1RFTTo6S0VZIFNZU1RFTTo6WSkp
Ki88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6VEVTVCBTWVNURU06OklURU0gKENB
UiBTWVNURU06OlgpKSovPGJyPg0KwqAgwqAgwqAgwqAgZ290byBUNDM7PGJyPg0KVDQzOjs8YnI+
DQrCoCDCoCDCoCDCoCB7b2JqZWN0IFYxMyA9IC8qIChDRFIgU1lTVEVNOjpYKSAqL1Y5LSZndDtj
LmNfY2RyLSZndDtjLmNfY2RyOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjEzKTt9PGJyPg0KwqAg
wqAgwqAgwqAgZ290byBUNDE7PGJyPg0KVDQxOjs8YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKChM
QU1CREEgKFNZU1RFTTo6WCkgKERFQ0xBUkUgIykgLi4uKSBTWVNURU06OlgpKi88YnI+DQrCoCDC
oCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUCBTWVNURU06OkYgKENEUiBTWVNURU06OlgpKSov
PGJyPg0KwqAgwqAgwqAgwqAgLyogRU5EIChTWVNURU06OkxNQVAgU1lTVEVNOjpGIChDRFIgU1lT
VEVNOjpYKSkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoU1lTVEVNOjpMTUFQIFNZU1RFTTo6
RiBTWVNURU06OlgpKi88YnI+DQrCoCDCoCDCoCDCoCAvKiBFTkQgKFNZU1RFTTo6TE1BUFIgU1lT
VEVNOjpGVU4gTElTVCkqLzxicj4NCsKgIMKgIMKgIMKgIC8qIEVORCAoTUFQTCAoTEFNQkRBIChT
WVNURU06OlgpIChJRiAjICMpKSBMSVNUKSovPGJyPg0KwqAgwqAgwqAgwqAge29iamVjdCBWMTQg
PSBDbmlsOzxicj4NCsKgIMKgIMKgIMKgIFZNUjEoVjE0KTt9fX08YnI+DQrCoCDCoCDCoCDCoCAv
KiBFTkQgKE1FTUJFUiBYIChMSVNUIFkgWiAuLi4pKSovPGJyPg0KfTxicj4NCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PGJyPg0KPGJyPg0KVGFrZSBjYXJlLDxicj4NCjxicj4NCkRhdmlkIFNjaGVyZmdl
biB2aWEgTWF4aW1hLWRpc2N1c3M8YnI+DQombHQ7PGEgaHJlZj0ibWFpbHRvOm1heGltYS1kaXNj
dXNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJl
ciI+bWF4aW1hLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PC9hPiZndDsgd3JpdGVzOjxi
cj4NCjxicj4NCiZndDsgSGVsbG8sPGJyPg0KJmd0Ozxicj4NCiZndDsgSSBub3RpY2VkIHRoYXQg
R0NMIDIuNy4xIGNvbXBpbGVzIHRoZXNlIGZ1bmN0aW9ucyBkaWZmZXJlbnRseTo8YnI+DQomZ3Q7
PGJyPg0KJmd0OyAoZGVmdW4gZiAoeCkgKG1lbWJlciB4ICYjMzk7KGEgYiBjKSkpPGJyPg0KJmd0
OyAoZGVmdW4gZyAoeCkgKG1lbWJlciB4ICYjMzk7KGEgYiBjKSA6dGVzdCAjJiMzOTtlcSkpPGJy
Pg0KJmd0Ozxicj4NCiZndDsgSSBzdXBwb3NlIHRoYXQmIzM5O3MgYmVjYXVzZSBGIHVzZXMgdGhl
IGRlZmF1bHQgRVFMIGFzIHRoZSB0ZXN0LiBJIHRyaWVkIHRvIHVuZGVyc3RhbmQgdGhlIEMgY29k
ZSBpdCBnZW5lcmF0ZWQsIGJ1dCBpdCB3YXMgaW5jb21wcmVoZW5zaWJsZSB0byBtZS4gQW55d2F5
cywgSSBzYXc8YnI+DQomZ3Q7IHRoYXQgdGhlIHNlY29uZCBmdW5jdGlvbiwgRywgaGFkIGlubGlu
ZWQgdGhlIE1FTUJFUiBjYWxsIGludG8gKE9SIChFUSBYICYjMzk7QSkgKEVRIFggJiMzOTtCKSAo
RVEgWSAmIzM5O0MpKSwgd2hpY2ggaXMgcmVhc29uYWJsZS4gQnV0IHdoeSBkb2VzIEYgZ2V0IGNv
bXBpbGVkIGRpZmZlcmVudGx5Pzxicj4NCiZndDs8YnI+DQomZ3Q7IFNob3VsZG4mIzM5O3QgdGhl
IGNvbXBpbGVyIG5vdGljZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gTUVNQkVSIGlzIGEg
bGl0ZXJhbCBsaXN0IG9mIHN5bWJvbHMgYW5kIGF1dG9tYXRpY2FsbHkgdXNlIEVRIGluc3RlYWQg
b2YgdGhlIGRlZmF1bHQgRVFMIHRlc3Q/IFRoYXQ8YnI+DQomZ3Q7IHdvdWxkIGJlIGFuIGVhc3kg
YW5kIHNhZmUgb3B0aW1pemF0aW9uLjxicj4NCiZndDs8YnI+DQomZ3Q7IFRoZSBzYW1lIGdvZXMg
Zm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBmaXJzdCBhcmd1bWVudCB0byBNRU1CRVIgaXMgYSBsaXRl
cmFsIHN5bWJvbC48YnI+DQomZ3Q7PGJyPg0KJmd0OyBNYXhpbWEgaXMgZnVsbCBvZiBzdWNoIGlu
c3RhbmNlcyB3aGVyZSBNRU1CRVIgaXMgdXNlZCBhcyBhIHNob3J0ZXIgd2F5IHRvIHdyaXRlIChP
UiAoRVEgLi4uKSAoRVEgLi4uKSAuLi4pLCBhbmQgJnF1b3Q7OnRlc3QgIyYjMzk7ZXEmcXVvdDsg
aGFzIG1vc3RseSBiZWVuIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXM8YnI+DQomZ3Q7IGJlbGlldmVk
IHRoYXQgYW55IG1vZGVybiBMaXNwIGNvbXBpbGVyIHdvdWxkIGFwcGx5IHRoaXMgb3B0aW1pemF0
aW9uIGF1dG9tYXRpY2FsbHkuIEF0IGxlYXN0IFNCQ0wgZG9lcy4gKENDTCBkb2VzbiYjMzk7dCwg
SSBoYXZlIGZpbGVkIGEgcmVwb3J0IGFscmVhZHkuKTxicj4NCiZndDs8YnI+DQomZ3Q7IEJlc3Qg
cmVnYXJkczxicj4NCiZndDsgRGF2aWQgU2NoZXJmZ2VuPGJyPg0KJmd0Ozxicj4NCiZndDsgX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+DQomZ3Q7IE1h
eGltYS1kaXNjdXNzIG1haWxpbmcgbGlzdDxicj4NCiZndDsgPGEgaHJlZj0ibWFpbHRvOk1heGlt
YS1kaXNjdXNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9y
ZWZlcnJlciI+TWF4aW1hLWRpc2N1c3NAbGlzdHMuc291cmNlZm9yZ2UubmV0PC9hPjxicj4NCiZn
dDsgPGEgaHJlZj0iaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8v
bWF4aW1hLWRpc2N1c3MiIHJlbD0ibm9yZWZlcnJlciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFu
ayI+aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vbWF4aW1hLWRp
c2N1c3M8L2E+PGJyPg0KJmd0Ozxicj4NCjxicj4NCi0tIDxicj4NCkNhbW0gTWFndWlyZcKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDxh
IGhyZWY9Im1haWx0bzpjYW1tQG1hZ3VpcmVmYW1pbHkub3JnIiB0YXJnZXQ9Il9ibGFuayIgcmVs
PSJub3JlZmVycmVyIj5jYW1tQG1hZ3VpcmVmYW1pbHkub3JnPC9hPjxicj4NCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PGJyPg0KJnF1b3Q7VGhlIGVhcnRoIGlzIGJ1dCBvbmUgY291bnRyeSwgYW5kIG1hbmtp
bmQgaXRzIGNpdGl6ZW5zLiZxdW90O8KgIC0twqAgQmFoYSYjMzk7dSYjMzk7bGxhaDxicj4NCjwv
YmxvY2txdW90ZT48L2Rpdj48L2Rpdj48L2Rpdj4NCg==
--000000000000250a9306342dd358--


--===============0800716271649280252==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============0800716271649280252==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Maxima-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/maxima-discuss

--===============0800716271649280252==--