Changeset 71a4d7 in git


Ignore:
Timestamp:
Feb 18, 2013, 5:10:09 PM (11 years ago)
Author:
Oleksandr Motsak <malex984@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
65148c4d2a607796fbd578ae2f3219965019aaae
Parents:
d826a82d3b17fc5f6da647679a15d4f1af7657fdf1becf6c8965f6addf0a63ca09a9418a48c294be
Message:
Merge pull request #264 from mmklee/sync

Sync Master and Spielwiese
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • Singular/feOptTab.h

    rf1becf6 r71a4d7  
    136136  "SECS",     "Do not display times smaller than SECS (in seconds)",   feOptString, (void*) "0.5",  0},
    137137
     138  {"cpus",            required_argument,    LONG_OPTION_RETURN,
     139   "#CPUs",   "maximal number of CPUs to use",                         feOptInt,    (void*)2,      0},
     140
     141
    138142  {"MPport",           required_argument,   LONG_OPTION_RETURN,
    139143   "PORT",     "Use PORT number for conections",                       feOptString,    0,      0},
  • Singular/ipshell.cc

    rf1becf6 r71a4d7  
    51045104      else // (0/p, a, b, ..., z)
    51055105      {
    5106         assume( (ch == 0) || (ch==IsPrime(ch)) );
    5107 
    5108 //         if ((pars > 1) && (ffChar))
    5109 //         {
    5110 //           WerrorS("too many parameters");
    5111 //           goto rInitError;
    5112 //         }
     5106        if ((ch!=0) && (ch!=IsPrime(ch)))
     5107        {
     5108          WerrorS("too many parameters");
     5109          goto rInitError;
     5110        }
    51135111
    51145112        char ** names = (char**)omAlloc0(pars * sizeof(char_ptr));
  • Tst/BuchDL/Ex_L6.res.gz.uu

    rf1becf6 r71a4d7  
    11begin 644 Ex_L6.res.gz
    2 M'XL("+HMSU```T5X7TPV+G)E<P#<6UMO&SF6?O>OX,S+2"F5FG>R[&TO=C*=
    3 M7@?>;L#VOFS0:<ARV58B2X8D)RHW]K_O=\BZL"3E_K8&XI3(PW,^GCM9\N75
    4 MO\Y^8XR)4W9^]D_V]\UZ,Y[/KO]^<G19S\A3AL$_9XO99C`\.:+_V>DI^V7[
    5 MY[D=+\J/X_5FLFFIU2EKG_6X>S9C]M-//Q_\8>`U>7B<E\R./3M,4_^T[.R8
    6 M+1\WL^5BL"IO+O\Y[."Z4[::+>[8!?N9\1';#L1X;(8C-G_L:/PI>US.*W8K
    7 M0`2*X5N9T7^9?+$=R"%^F?BLZ%DGW(MFI<1*HA##L"0+O]HEA@8TV+8K!6]6
    8 MJG2EBBN#?!49Z,B@6RF:E3I=J1.T*HK+:%TJ4S8K3;K2)"O#(A7EIS)AQME-
    9 M.9FS,ZR\%6_EZ%;2+S6ZU:-;TQ'J4S:?K3?LG.@FT_7F9G"6\#&G;#U[+@?G
    10 MPQ-&/S_]Q!9/#]?EBBUOV;K<K-ELP3;W);LII\N'Q^5Z1D8]$K+E8$^Q*#\E
    11 M%^T&W9B=OQ'\CY.C/]^(/WXV85>YP"<9/^GX2<5/*G[2\9.,GTS\!*OKEJ]O
    12 MA?7Y-O/%N)M/)=7SDB?SJ>QF7B3S*9IF7B;S!_!)-:ZU+1-UCQJ8G=ZE;O0N
    13 M,2@Z`:;39C>(8(HA(W9BYJ:+&>E2CY@]3!X'%Z/$TM)W@2^#FMCM;,M>GA^S
    14 M^QG,?3_9L,NSWW[][_/_N&`EC'[]=/<W_+#!PV0QO7\`XP_+<CZ?W6%?\_7T
    15 MOERS7U9WY?5BMAXVC!7T&[;5>AKMKIT5W>;:,;FSHE-6;ZDZL#1)7\HDSW8_
    16 ME:4I3"@VF"X7F]GBJ;R!CZ_7\.@A^V1B:_G"J6>W;+!8;@8WY>UL4=X,-JO9
    17 M9''W7_\Y'`[_JO-S&(DIFOUON]:/*9JB%5N;J**QV:^PV=UJ"6V6*XK/$(B]
    18 M!,IF:S:9K\K)346<&A::U_%]!0X-FL&OX'!U<H00.3YJ8H6T>M0$!H7%41,%
    19 M%`-'C<O';'?4>'A(OCJ+N>FMRF(R/@*/CG/AK+$RVNVMX`B75$PNNDG7DYDW
    20 MPVI'>NZ\D(9WN?YMD25<?(LNPLK4#K7-6EJ3B2/(2\`:99U6PFK>$DE@EEP(
    21 M)[QKMY%UVQ#B1:P6(//"*2\;?'4M>"M<)JPP'#_)J,M505+B*)'I3!>J%J%;
    22 M903^J!'"2..=+VID+7.;B\@G&;2Y]A%'3:0R)_FN/F4L))ET*4,)L%P*)[U)
    23 MU"J*'$J`!EJX1:?H1M->:%LXV1B\A>AS';T@Q>AS9:T4O%"M6DVFG4B,TT:S
    24 M[I)#<-MFN,NX/4=NIE5_NG'M9EKWIQMG;Z9-?[IS_X;`]@D^'1#-`M<N""'2
    25 M#/N]7>P'34-;'-Q2/XQJ6L,/[B\)K(90?&*G7PRUAH'<T\37!5^SOC-4",=F
    26 M6.\KYAL"M.%B]E3V-2'[9CP>_]'RL'NJ_*ZP[#-U>VK_MHCL<_/[-OB^N.RS
    27 M+;K::7GR++Y01_7WU5$K/U5'_UPOYQ_*KI:&C[NEU,*34O+!U4CRNGNEJBDY
    28 MNYG=S="YKN^73_,;=HWF=;9^G$^J\N8(!"]>L//)W5.Y6I4L<%@=LZOEDJ'/
    29 MJ=AL4ZXF5';7?ZMI5\OEYB6V.0'0U?%QL^*W99A9L]OET^+F;Y0I_YW-:[['
    30 M;-&;KF?+R0=J`-IM'1\W"^)6/DF6[K?5@VX39G]3G]A-LZR+E6_:7[/<[AOO
    31 M<35[P/'@UZO_Z4Q7C^T9SS7M2M<%672FL\6&O1^]Z\;0&=TN5VSP_F=QPM[_
    32 MV\^A1[R"F=]GV;!U40=W9>PO<$/W@U]9UP)1,_E<KI87DYO!U9OW?P!:@L.A
    33 MVO2=Z")XT?\C_W#RN_S#J1_R#X>$?L!P%XWE_F+PC,4&([`)TGTP2JCH^P7Q
    34 M.RJ!Z\Y/:9O@NN3^R;KKNES]/8)]??*[N@RNB*VUSNS:-O_UZ/7KT?EY.^-Y
    35 MZ^;R@+9:,F3BOQA['3F_[SA[1?[/SNO#_6:YHO6O(7PDAP2!;+@J-T^KQ1HN
    36 MMT"Z7F\FB+5(O&;+Q;QJF9G`+.!Y1]9[5^,YI\N!=RD>%R@)$F$Z/W_S[H_1
    37 MZS=R/`[TKX<)PF(<,W.MF,N,M#1X_9HR=AN.!3;8?9#UV?CJ,DGKW:U$=/:G
    38 M^63%KB<H.\GQN4B.B8*U::*`4R)9L8N7[2&I"?O+&/84R_](9_[!ICAK;5#8
    39 M)N'L/:)[D(_WL^D]!H*A5^$W\$1D:S;8W)?$A^Y)YN66XO,IQ%8XNZVA[_)F
    40 M3`172S:93E$OP\5*PV9OV8AMJL>2#9!NB6XQ>2C9!?LXP3D0I?9N$:O99AEF
    41 MHY'9A\G\J1R&TT[XZ<Z<$>])IQ.Z^6EF7[;V*NQIT"J-AVS(V/1^LH*[8&B]
    42 MF4W9,>-4]P/8X[;8CMCDYB;<#<'-V]%AY"#8(U@\E.!!H([9&8L3#[-%N/^J
    43 M?X[9X(Q:H7I99_(/$^CWF)DX'GZNY\OI^\#[F"U7-P$PFS\F%-W/<5#>FH6L
    44 M((:,&C!&K1VCGBAFBGW.,N7\LE602]/J#VJGX>G'/9[[^FHIBS[E)Q48Z07G
    45 M??H#*FTH19_RLTINUL@#:[Y-[0TG]1GI!PTAN*YOCH)CATS12Q-[\72D9+NV
    46 M*Q/)(%VS$2_T_EW>H>#:W,]6-RVC]EHEYV/?WH3PL6PO&L*S3IY-]]P(Z]PH
    47 M.0\)WFOQDX,P#M'I3".]GA2]<V!R\A1"["P;8)VPPG.E"N^=+GRAO?8R/WN!
    48 M">&,<=QP;;PN-(J?;T_+0O2.@"EJH7:%\#$_(",+,@H<=(3B2IJ"*^Z$UK*3
    49 MT3L/!ATV,^;K9.1?EM$[Z07;-#/N*Y65?5E9OCU("=$=L(3DR3-L\WXVG[.+
    50 MT8487;P<O1N]/VDG0_OVN5<QPJ(-+S^RRZ\]>0FZGJ[?O<2+Y,%V5(V>>R]?
    51 M!%U-=Q?)SR9[5KE\EKD<L4IFS\@N([:5F:RV^3:O<LRH;BWBB@KMJUX_<D;]
    52 MB$"$OCHY>D5'?&*")QS3B7>[N'N3$*G2N<XR<9UL6R^<[]/K\0$?389Q9SO[
    53 M0A?V,'EDC_<SD%V,:.N3=E:A$ZMSQP+3\7$`VL&K(00"?)-J,7D2S8;9D\^Q
    54 M%*TBGS%-O,Z:AJ;Y08)9/UVC<FR>-B4Z"VJ^GEG;N0@%+PBKUS-8?79;#<Z>
    55 MT=J=8/`DX;$J'Y8?2D;G'797+JBI1W=W=/9,>H35!I-0%/"9;I,DW5Y59+UL
    56 MD$]@O]9KDVOV9FT[U47F'IO.3G0/W^R95(66YVE:$F@ZCU5T!NMOF8<M5^F6
    57 M[6F].-ES56^Z.L$F*D+6;JF*8/+MWF9<LIFPAJ@2K#YVA:^"L,1=`W%T6!+X
    58 M*BYN_8UN[1M?K/EV3'67B5_5T#I/U:+Q5!D]]?J@IVJY[ZG7W:SZC*>*;_#4
    59 MA*7^<4_5Y@<\E29;;]UWTT2]=L]!L\%UVO$D-["'W/TZ]1#=>L".`S3VQPS9
    60 M/PAJ%Z7F/PB!;F4/W9&@`4QOMYJAG3L281HON:R3]/5HVGO7)XQL[/4+2*X5
    61 MY>9I@Z*C4C$9T^&P%3_X!=O"`?2<D$]MIJ8:_V1F,$+7IC])#.`S'C"B0-.R
    62 MZ^Z;]A<W-%V1WF?7T-B$IB?`-=&A8G30KK>]R#"^VU)XQ7DY.D\VO)/A:3&)
    63 M&`4P+9D]F.K/8^PTX8(U.X&T+_>KA"5%H)?38I#MI35XZT!.<_H>0#:8RGR:
    64 M=XV+E?L)[3/4ZHOIK9??B`,M;]/68)KX='+;F-"G!&8_\0UZ>&S7^5B7//M>
    65 M%R1'%VITV>FO^&(;5'QK&T2WAKT`BQDX"3#7?J5CQ.[H*R@5*D>55RHV/_1)
    66 M5AE&1+>D^2['*I2]]=.<+EH&MZ.[T1:J7IT<53ZO7%;97%4FJW0&;F#4YA77
    67 MU=Y/4':RZ)*M->@J.%&=7^N;[D]?]O3>"5?M*\XH2%8*V5:T+R;IN3G@B)$8
    68 MM4&<W+.EAQ2W\Q)%1!;-[,[;$)ED5;?S;D/M0FKHNF-0>LSQO0.0!-1V!5V>
    69 MU1%(_6$Y1R9<3#;E(`R2@89DH9:<.BZ8]4P$]!88\H`AZ3A]TB9]CJQGID!)
    70 MIMHQ0?*ZO+_C1/$MQ\-J]Y]5NS^@]D.J]?ZP:GL'SP1,D1QEZ`*O?99U0'=1
    71 M'._E]J/XHGR8K-XCB"7_UB"F.[W/!S'=</6"6%(4-:<7F<0N77KMA>Q1I=OY
    72 MKI-,!J&N3SK3G_WFN2CZWUNJ9*,MR3LM2BZ2YSTM2OY%+:IOU*+D>MS[-EXX
    73 M$&YZ>I2\U2,I,=\HV4W9>HKT6^4;[;.-L=G&<OR3^*<Z4A??\DPF=`<[>RA7
    74 MW53S=;_[O=2Y&794T.']"3O:6I6;PA36;"V:.;FUHLHLVF*D13QGRAKKK-]:
    75 M7F7:ZJTI8&O'/=8(A]$<\P9UV=),CA.6<U[SK?$@TYP6..1;73B'3HR69Q((
    76 MN4$X$U&&>-)2*6>)4&9**UM(#P86RZ26Q,%0=-%R)T'F,W2:6FD-L%B3"UYH
    77 M:W5A:0T.UAJGSXC!("*M<T9S[K=&(Z<(;CDQ1R7(T?U""P%ACI#2!BR#W%P#
    78 M$PII%`W/UE(:*7W@`5!(:A[TFMCH#"R5]H%8(A$HXY0%&X%Z`Q<S2BGPS*6S
    79 M1GO2D@%BHG=>:F((;1KNM?;$#K804G$A.7%##I12R2+H2A!D902J/7WDX`_P
    80 M2`];7:"\"0X=<N*?26/!F_2AJPR>8K"ON&F9:2C1(4(]\5>9$AQ&#>($[45P
    81 MXQV"B/B;3$BGN$<9(A$VPQ'/<S#G6^TA49*30&/:H<!*;8J"]I-I'T@@#0N@
    82 M>DV;EI3(H0OLFTPA2(U6%1QJ#7O1&2:XXL2N@&0K"PYZ2Y(L]H#S,@<?B(*M
    83 M<!3EA3/X:"$9QI6&M&"J@C1"RD$+[Z4(3B5QW)'P%A=U"&MR[>&R-,>A;[J/
    84 M*@H':T*P)EM#%-D:DJ%**Z0)QH5H`#':%MX92:)=YI0I*"8@VF=P6UF02*VK
    85 M(K,*5+"I5I7@.:F*-)XKCVT$9</)"K"2A`).ZYWGU@5;`I,V6%$KFIR@T(57
    86 ML!E`P`G0VGMX5@`!SRH</)!\#C!<#M^'8A&@A`/:*32"`TH&D((XH3&2F),$
    87 MRSMKPV9$)42.2(1.1*ZTB,J!I%HO`$A:(38>^!RB-.S4`9V&=CAE"*`QN;=P
    88 MH6`X0]C@`,;`A0D,+.=L84S!`QI/V]0RF%5"8T()^*6*:#CMTB+'X",'.+@W
    89 MPE_"IU51"?@2^3,V4`37S)7B$1L2"#R?O(&R#J*/NZ`F^!<BL(AN`I3!]8**
    90 MT!6JH&M.H!S<25/4!E`^1V[R&K*`J<@UV9MF.`%$E,(;X"B$2-#W=I0G=2D/
    91 M@(`/Q`C(K7*50/XCOZ;8)I"9B;JCS*)4<&-@+70P!7)=[BS*H29T!CG$V>A'
    92 ME$_@)EX'\R'B/>(KS`FXGY"0&`.!DS8Y\JV"HP=X/*.EUF.3!$]D""\X$8%W
    93 MA%8A`WE"I2RA18@H2K9;92JA<V#.5%!I[DD7R+*9HY2J*<'B?&X#5J0/6]"6
    94 M=<BNJ`HRVA8JYI2.@!/^Z3C<QQ-*C_`R'"F8$T@4!FV0!2"),`(R,@\G]R",
    95 M(C/P:AD4;(,'4,)&V@\8D4T<J@;M7FF"[)TKD,&W"N&'/!;<$?5(!Y,K"EQ)
    96 M,#5E#T)/F=O!OX.E+1S<F.AZ#@60(Z-)@@C`AA*B)81%1M_ULB;BXYFEG01P
    97 M%$*(?2B(L)$O(/D$[0(;*0R9@C(,@4/&H=MN39:1A-5:2DB81!18>D=.X%#^
    98 M"A$BPU!X4E!R2LA041&046Q1B!(P^()#+H[`X+7@W9@67NL!GX09PHG\;@)J
    99 M'7!R2S51!V`J!V9![DZX$#_('!2.A,MDA4+],V##"25D6635K82KN<Q$>P*\
    100 M(.]4/E0G0<&G0JDPH1P!#TR.>B8C&F1)I#58,:"!BQHOB2F!08=)=8JL+0F:
    101 M#J6(!S`Z-\8;:AD(#!R/&W0C$$9H*#WR($)ZP@:%"=J%A,F0@+P,.,B]@]]1
    102 M"9&HI#2LR:@*AX%:(="6=2$H9`"$7J0@M0IROT)3>B8`&I$<7(_$4P%!.4<G
    103 M1>)MAJ1)\()X\JP0D=(&+`:6@&$E5%%DD5VH'39T4224D@R7];8I)1M'`'CP
    104 M?VM,+92*6%%0?))0)#OHM(A;MNC60I=#,EV&HB@)#43Z#*F-=B<UR7<P/<PH
    105 MT3(@RQ(O$B,S#,)=2(JBO&E\W)G.J(GP0092EG&BE@$?A42X+LEPU$&0=Y`,
    106 MVK&@>@\9HLBMH/#;2DD"E8BJ0+E&YA<!L`L;XP5U3<29VAQ#442<;68HAP?&
    107 ME!A=PY@L6U`N!6-L2UJO?&2,_()F"NXM>9""ZHNZ)%#KPG<<741IFQV#%V),
    108 M.4`.O'P>&B5B!?0H$V1(3N`1,U0;B1-J*D<BDEOAB2T*!&`))'[5[$H0IVAA
    109 MK";#.XH-6LRIT<3^:"VUX4!!2U'A.&4+80,;M(I;@=RFHY6(F-?>3-0"S:6,
    110 MQ!)5+](B_SGBAMY3AVY\*V!G$YV."&0=ND2A<FH6B0#JIWPK8"(J2X0!>K0Q
    111 MBFBTSE(TBCP&<P@H!$Z/>,-^8F(H:`7E80!U*"=;@/0AS0%B*#.07U#&1C/,
    112 M\ZI]GRSI+XJ:[R+]X)FE9=F]S?W18TS+LGNKFWXK5";O=+]S^^%+-W>#^]TW
    113 M"?5-57BQOMQ,YD2U*LLCJ]JEW35',FCK]_V'&/:_(%2N'M;T<'^$R&[7=X?X
    114 M=+1[3RN3][22WM/6MY*3]I6>E.)+MY%2?^L1G/ZF:.\(_CS:C)X&<HA?:M@_
    115 MCDO5',<'`C.W1(7?:AA/YR,ZA\L1>\9!O5NC#Y^P`P>2\X+89"3L!;$:L>3@
    116 M32]U[T^.MF_5BZ?PEVQOY0M:DU?QO^<PW%)W;VB^=H5K+NA>_@YXTV5Y>[L>
    117 MU/_=!S74>N@@^=/N)OWE[^T%Z.XKIC6;/"RAVN1-$]SBY>_Q?@;X\N?X)VE`
    118 MV-[$2KES6Q/IZDF5_@G9[DI%KV[ZZ@WV(6WFH,PZRNXN?V="'6"A(HL^$)TJ
    119 M.AGO_A1**IL\N\:C6S4J_R5W5O);W5D5B3L/^.AI]&'T<9A\U2!Q9<U[?^>I
    120 MLBI/[]2E%NE?<X;[NTQO,XT3<D<CTZ\K/&VS#U7V\7GT?^4<NW+C.*SW5[BX
    121 MPI&B&8F0)7DRLY6;*U)=OSNRX[M-D=@3KVXM??T!E`2"+^717D5;A$"`>(@$
    122 M"*Y_GE_._VS^+G#,-?]3^,^\.>7''G-\\>6"D_[2_MK\.69&)@=UH@-U^A@@
    123 M]KT]W]://]@94];T]>W\^[IYS#V7-+UOG!(!4DL(BBWC$/5^YB%*3;.])\J>
    124 M3K_D`!-B?="/\.T%0>CA]OG#JE#)#1=.98*^.<6%37*CH`U^U1)RTFF38P_%
    125 M:AH"H0B0*A-:_5;XPH`?/8(?\"F!JR$M&P*'`==/V-67`W[GJZ3?X@,"'51*
    126 M>*"G,R*51JWH64U95\"'N.5+>@*C`6``C5GU=+PC1]0(34&-/.FICTJ8U%!J
    127 MF!Y;5.$$(7#-C.V`G_QDJ)A?4PWZOV$9K2L21=W266+.-NQS-]%0<IHANZ&A
    128 M#9SDP;^0\(-R[$\'KOW*`'E(D?QL1Z3C1B*A'2D1C5---.M':LAN`RW$D&B5
    129 M#F`EC@J1D<$M5"B+H=P2(TWSW.?7>1%5.@VGJ<HT59FF*ANIRD:JTAO)05.5
    130 M#;R:<`N/J'(*&26^9XA`<1B==^+^0&U8)M\/EH(INXC'GQN3;6&[%D4YZKVB
    131 M'/A:<:NBHAR9SLZ*^_Q^8.6JYD7'/K]-)T2TALW=I:U[-\L?HLNZ9<?S^>U)
    132 MYTJN,;T<4I-Y1+M`L=4)&B7KY>!D(TT^$C>3096J_,08JU3EI\4&3H:IRL]'
    133 M2I)FJ)VG(P/G_U2=!S6@+FP-D-E*W*1/<KB.<LA)$D8.M9$#9?41RI)#[<BA
    134 M=^70?T@.(@/,,M&L`3N%@7:$R:"]`5E:W-K#J6(52!6S:`*)8B&:0*K8HV8&
    135 M791/DWL6+&3;%$'I-6K1?JDB@W^7XO<VM)]HJO<68&7QV0584]L+L)8N"\`%
    136 MY&%JCV-[%TB9JH8OWJ"51TN5A:TN[.RQQ;U!;]9=S4ZNW0X$>IA`#P[H+I?+
    137 MN*.^Y"(]$G"/#=W'T1O8PKK8`O=#N(3#%Q_XI)FB^I#0NDT6`3Z=+J?7)SKR
    138 ML'YK7Y_.+^OCS_/S$75^1D*&I"N1:&VUVA`#=VAM&D&PV;1QD-4,\T4T-#Z8
    139 MIYNCWO/82#>M!(F.'T5CQO?1K!8I/L0'%O0K:V"?QTT;9HH:03_!;(YZQ`^@
    140 M6:1_1G,(3</(U#0;B_S')D6-[V-C5-/LR3Z@"I&&D9D%2%!W/C0"(S/NUE&2
    141 M!9RN`C&R.D`96%BB&L,X&5GC(OLT3H%L)]GTQ>X)L?#T;%;)$2.("IJ8(@>T
    142 MRU%@1E;$>?5Q>M8L-7;&J"(8E[0V-#8CG(X-7N36DSLICH3>,FOUY0>)]OA$
    143 M)?X^CM<4Z1Z5M&-/L=Q--Q",`"HYCO<14)\-8C`@-H)RD&!GJ3N_TTE?[@,>
    144 M?X92$Q&9#:-&3N!N(L%#8E,Y$>$AD60R'YI&_;9'B1C*@;*YE9@,6Y(B<#`Y
    145 MS$^@]@3[@)+X"0)FHG0S$3]/(N,!BT$SVBRM"*"<4:T8DQQLWM1(CK)DZI##
    146 M;`6@;*&ES/7,&$B>4I5X`/9043S*9B=KQ_D,HOBNC+69Q;$PJJ#6IE9\'G(3
    147 MVH.\=L["Q==\9K$'?.SJ8BZ,NMR9[IW<2UPH+#:&38FJ,6H:8)+9#\Z/9QP!
    148 ME;!-.:BG0FE"-JBD&EM^PK+.L*#?U5M+GZ):Y]EOP)V$;=SR`^Y8(<_HZG?(
    149 M4MZQ?25<4L`Y2C,$A\NX&W,,-.+Y)7+',L4G(RRIN.,SR(6O"G\6O(^"<E7-
    150 M?+@@\>URMA>1[IO,A`_'0U'828,O&X[M`RAWQ[]!_"YYL\FG1V%,JBWN-;>?
    151 MW&M"4<6#_;:SH>Q;*-2_7ANJFW>C_5#LK&A_^N\M_=WS'G&&4OG"#M&+[%\O
    152 M[=OU9)(N4ZB?D14RS+\J@#M,"D<\G)9/5NB>.\MOMI^>YTM,E-I^$\'_R2WO
    153 M)9)*5KG\A7-.L3K375MN>PS463MC2H\^OY[LF)R^[I$KI:W`D#F?WHD`70=I
    154 MI]*Z$_&Y+AJ?`]6$@D"@=EX0B%^!W`L"=1P$`BB\()"@:`927OBG2PT*"`5X
    155 M`,IX>`XHN6;"<S3Y%*#CR:?:13'YU_CD]Y^??!&5ZT14KA-1N8[B8!V%P;JE
    156 MF!R(TD@I#O"O*3/B\*\E$^(H_8O('%IF0/\B,B$2][:W[<C>W!L66%DN1>2@
    157 M-/E0H,S:)+X?!4P2+.XY40YE[0@0P489QL72&+%D2HA%";%D4-)4[%275F43
    158 M%TP9MA/W3C@I&/<..!48;P8-&$UF$(6LQ?2"+YK,8"Z#HK%S*!ZW6[&&W=;B
    159 9-^HA76E,%Q=W5_SR/?RQ^@^C>X2/"%D`````
     2M'XL(""A!(E$``T5X7TPV+G)E<P#<6UMS&S>6?M>OP,S+D&XV@SO0TD9;.]XX
     3M*Y<VJ9*\+^N*4Y34DAA3I(JD'%*I^>_[':`;C2;I^]NJRG(3.#CGP[D#35V^
     4M^<^S7QACXI2=G_V3_7V]6H]GTZN_GQQ=-C/RE&'P]^E\NAX,3X[H?W9ZRG[:
     5M_'YNQ_/ZS_%J/5DG:G7*TK,>=\]FS'[XX<>#/PR\)@^/LYK9L6>':9J?Q,Z.
     6MV>)Q/5W,!\OZYO*?PPZN.V7+Z?R.7;`?&1^QS4",QV8X8K/'CL:?LL?%;,MN
     7M!8A`,7PG"_JOD"\V`SG$+Q.?%3WKC'O5KI18211B&)84X5=:8FA`@VU:*7B[
     8M4N4K55P9Y*O(0$<&W4K1KM3Y2IVA55%<0>MRF;)=:?*5)EL9%JDH/Y<),TYO
     9MZLF,G6'EK7@G1[>2?JG1K1[=FHY0G[+9=+5FYT0WN5ZM;P9G&1]SRE;3YWIP
     10M/CQA]//##VS^]'!5+]GBEJWJ]8I-YVQ]7[.;^GKQ\+A83<FH1T(F#O84B\I3
     11M<M%NT(W9^5O!?SLY^OVM^.U'$W95"GR2\9..GU3\I.(G'3_)^,G$3["Z3GQ]
     12M$M;GV\Y7XVX^E]3,2Y[-Y[+;>9'-YVC:>9G-'\`GU;C1MLS4/6IA=GJ7NM6[
     13MQ*#H!)A.F]T@@BF&C-B)F9LN9J3+/6+Z,'D<7(PR2TO?!;X,:F*WTPU[>7[,
     14M[J<P]_UDS2[/?OGY?\[_XX+5,/K5T]W?\,,&#Y/Y]?T#&']8U+/9]`[[FJVN
     15M[^L5^VEY5U_-IZMARUA!OV%;R=-H=VE6=)M+8W)G1:>LWE)U8&F6OI3)GNU^
     16M*LM3F%!L<+V8KZ?SI_H&/KY:P:.'[*.)+?&%4T]OV6"^6`]NZMOIO+X9K)?3
     17MR?SNO_]K.!S^U>3G,!)3-/M76NO'%$W1BLDFJFIM]C-L=K=<0)OUDN(S!&(O
     18M@;+IBDUFRWIRLR5.+0O-F_A^`PXMFL'/X/#FY`@A<GS4Q@II]:@-#`J+HS8*
     19M*`:.6I>/V>ZH]?"0?'41<],[5<1D?`0>'>?*66-EM-L[P1$NN9A2=).N)[-L
     20MA]6.]-)Y(0WO<OV[JLBX^(0NPBK4#K4M$JTIQ!'D96"-LDXK835/1!*8)1?"
     21M">_2-HIN&T*\B-4"9%XXY66+KZD%[X0KA!6&XR<;=:6J2$H<)3)=Z$HU(G12
     22M1N"/&B&,--[YJD&6F-M21#[9H"VUCS@:(E4XR7?U*6,A*:3+&4J`Y5(XZ4VF
     23M5E&54`(TD.!6G:);37NA;>5D:_`$T9<Z>D&.T9?*6BEXI9):3:&=R(R3HEEW
     24MR2&X;3O<9=R>([?3JC_=NG8[K?O3K;.WTZ8_W;E_2V#[!!\/B':!2PM"B+3#
     25M?F\7^T'3TE8'M]0/HX;6\(/[RP*K)10?V>EG0ZUE(/<T\67!UZ[O#!7"L1W6
     26M^XKYB@!MN9@]E7U)R+X=C\>_)1YV3Y7?%)9]IFY/[5\7D7UN?M\&WQ:7?;95
     27M5SLMSY[%9^JH_K8Z:N7'ZNCOJ\7L0]W5TO!QMY1:>%)./G@SDKSI7JEJ2LYN
     28MIG=3=*ZK^\73[(9=H7F=KAYGDVU]<P2"%R_8^>3NJ5XN:Q8X+(_9F\6"H<_9
     29MLNFZ7DZH[*[^UM`N%XOU2VQS`J#+X^-VQ2^+,+-BMXNG^<W?*%/^.YLU?(_9
     30MO#?=S-:3#]0`I&T='[<+XE8^2I;O-^E!IX39W]1'=M,NZV+EJ_;7+K?[QGM<
     31M3A]P//CYS?]VIFO&]HSGVG:EZX(L.M/I?,W>C_[HQM`9W2Z6;/#^1W'"WO_;
     32MCZ%'?`,SOR^*87)1!W=E["]P0_>#7T77`E$S^5PO%Q>3F\&;M^]_`[0,AT.U
     33MZ3O11?"B_T?^X>0W^8=3W^4?#@G]@.$N6LO]Q>`9\S5&8!.D^V"44-'W"^(W
     34M5`+7G9_R-L%UR?VC===UN?I;!/OFY/?F,K@BMI:<V:4V__7H]>O1^7F:\3RY
     35MN3R@K42&3/P78Z\CY_<=9Z_(_]EY<[A?+Y:T_C6$C^20()`-E_7Z:3E?P>7F
     36M2->K]02Q%HE7;#&?;1,S$Y@%/'^0]?YH\)S3Y<`?.1X7*`D283H_?_O';Z/7
     37M;^5X'.A?#S.$U3AFYD8QEP5I:?#Z-67L%(X5-MA]D,W9^,UEEM:[6XGH[$^S
     38MR9)=35!VLN-SE1T3!4MIHH)3(EFQBY?ID-2&_64,>XKE?^0S_V#7.&NM4=@F
     39MX>P]HGN0/^^GU_<8"(9>AM_`$Y&MV&!]7Q,?NB>9U1N*SZ<06^'LMH*^ZYLQ
     40M$;Q9L,GU->IEN%AIV>PM&['U]K%F`Z1;HIM/'FIVP?Z<X!R(4GLWC]5LO0BS
     41MT<CLPV3V5`_#:2?\=&?.B/>DTPG=_+2S+Y.]*GL:M$KC(1LR=GT_6<)=,+1:
     42M3Z_9,>-4]P/8XU1L1VQR<Q/NAN#F:708.0CV"!8/-7@0J&-VQN+$PW0>[K^:
     43MGV,V.*-6J%G6F?S#!/H]9B:.AY^KV>+Z?>!]S!;+FP"8S1XSBN[G."AOQ4)6
     44M$$-&#1BCUHY13Q0SQ3YGF7-^F13D\K3ZG=II>?IQC^>^OA)EU:?\J`(CO>"\
     45M3W]`I2VEZ%-^4LGM&GE@S=>IO>6D/B']H"$$U\W-47#LD"EZ:6(OGHZ43&N[
     46M,I$-TC4;\4+OW^4="J[U_71YDQBE:Y62CWVZ">%CF2X:PK/.GDWWW`KKW"@[
     47M#PG>:_&S@S`.T?E,*[V9%+US8';R%$+L+!M@G;#"<Z4J[YVN?*6]]K(\>X$)
     48MX8QQW'!MO*XTBI]/IV4A>D?`'+50NT+XF!^04009%0XZ0G$E3<45=T)KV<GH
     49MG0>##ML9\V4RRL_+Z)WT@FW:&?>%RBH^KRR?#E)"=`<L(7GV#-N\G\YF[&)T
     50M(487+T=_C-Z?I,G0OGWJ58RP:,/K/]GEEYZ\!%U/-^]>XD7R8#/:CIY[+U\$
     51M74UW%\G/IGA6I7R6I1RQK2R>D5U&;",+N=V4FW);8D9U:Q%75&A?]?J1,^I'
     52M!"+TU<G1*SKB$Q,\X9A.O-/B[DU"I,KG.LO$=3*U7CC?Y]?C`SZ:#./.=O:%
     53M+NQA\L@>[Z<@NQC1UB=I5J$3:W+''-/Q<0#:P:LA!`)\FVHQ>8(C4'?ZN9_B
     54MU!/LB,>3?WU*B$BJ?<8T<3]K6YSV!REG]72%6K)^6M?H-:@=>V:IEQ$*?A%6
     55MKZ;P@^GM=G#VC&;O!(,G&8]E_;#X4#,Z`;&[>DYM/OJ]H[-GTBSL.)B$,H'/
     56M=+\DZ3YK2_8L!N4$%DU^G%V\MVO35!>K>VPZR]'-?+MG4AZ:H*?KFD#3"6U+
     57MI[+^EGG8\C;?LCUM%F=[WC:;WIY@$UM"EK:TC6#*S=YF7+:9L(:H,JP^]HFO
     58M@K#,@0-Q=&$2^"HN3AY(]_BM=S9\.Z:ZR\VO&FB=[VK1^JZ,OGMUT'>UW/?=
     59MJVY6?<)WQ7?Y;B9$?[_O:O,=ODN3R7_W'3=3N-USV6)PE7=%V2WMH0"XRGU&
     60M)Y_8<8G6(S!#'A$$I46Y0QR$0#>WA^Y1T"3F-V#MT,X]BC"MWUPVB?QJ=-U[
     61M'RB,;.WU$TBN%.7OZQ9%1Z5BPJ8#9!(_^`G;PB'UG)!?VT)=:_R3A<$(7:W^
     62M(#&`SWC`B`)-8M?=2>TO;FFZ0K[/KJ6Q&4U/@&OC1<5XH5UO>K%B?+>E\!KT
     63M<G2>;7BG"M!B$C$*8!*9/5@.SF,TM?&"-3NAM2_WBX1E9:&7Y6*0[24Z>.M`
     64M7I?T78%B<"W+Z[)K;JS<3W&?H%:?37B]C$<<:'E*9(/KS*>S&\F,/B<P^ZEP
     65MT,-CN^[(NNS9]SHE.;I0H\M.?]5G6Z7J:ULENEGL!5C,R5F`N?2UCQ&[HZ^I
     66M;%%+MN56Q0:)/LEM@1'1+6F_[[$,A7#U-*/+F,'MZ&ZT@:J7)T=;7VY=L;6E
     67MVIIBJPMP`Z.45UQ7C3]"V<FBB[ADT&5PHB:_-K?A'[\0ZKTWWJ;7H%&0W"ID
     68M6Y%>7M)S>P@2(S%*09S=Q>4'&;?SHD5$%NWLSAL3F655M_/^0^U":NFZHU)^
     69M%/*]0Y($U+2"+MB:"*0>LIXA$\XGZWH0!LE`0[)0(J<>#&8]$P&]!88R8,BZ
     70M4I\U3I\BZYDI4)*I=DR0O5+O[SA3?.)X6.W^DVKW!]1^2+7>'U9M[W":@:FR
     71MXPY=\J5GV01T%\7Q[FX_BB_JA\GR/8)8\J\-8KKW^W00TRU8+X@E15%[PI%9
     72M[-+%V%[('FUUFN]ZRVP0ZOJH,_W>;Z>KJO_=IJULM25YIT7)1?:\IT7)/ZM%
     73M]95:E%R/>]_8"X?&=4^/DB<]DA++M9+=E&VF2+_;<JU]L3:V6%N.?Q+_5$?J
     74MXIN@R83N::</];*;:K\2>+^7.M?#C@HZO#]A1QNK2E.9RIJ-13,G-U9L"XM&
     75M&6D1SX6RQCKK-Y9O"VWUQE2PM>,>:X3#:(EY@[IL::;$F<LYK_G&>)!I3@L<
     76M\JVNG$,G1LL+"83<()R)J$`\::F4LT0H"Z65K:0'`XME4DOB8"BZ:+F3(/,%
     77M.DVMM`98K"D%K[2UNK*T!H=OC1-JQ&`0D=8YHSGW&Z.14P2WG)BC$I3H?J&%
     78M@+!$2&D#ED%NJ8$)A32*AF=K*8V4/O``*"0U#WI-;'0!EDK[0"R1")1QRH*-
     79M0+V!BQFE%'B6TEFC/6G)`#'1.R\U,80V#?=:>V('6PBIN)"<N"$'2JED%70E
     80M"+(R`M6>/G+P!WBDAXVN4-X$APXY\2^DL>!-^M#;`IYBL*^X:5EH*-$A0CWQ
     81M5X42'$8-X@3M17#C'8*(^)M"2*>X1QDB$;;`H<]S,.<;[2%1DI-`8]JAP$IM
     82MJHKV4V@?2"`-"Z!Z39N6E,BA"^R;3"%(C595'&H->]$%)KCBQ*Z"9"LK#GI+
     83MDBSV@!,T!Q^(@JUP..65,_AH(1G&E8:T8+85:824@Q;>2Q&<2N*X(^$M+NH0
     84MUN3:PV5ICD/?=&=550[6A&!-MH8HLC4D0Y562!.,"]$`8K2MO#.21+O"*5-1
     85M3$"T+^"VLB*16F^KPBI0P:9:;04O256D\5)Y;",H&TY6@94D%'!:[SRW+M@2
     86MF+3!BD;1Y`25KKR"S0`"3H#6WL.S`@AX5N7@@>1S@.%*^#X4BP`E'-!.I1$<
     87M4#*`5,0)C9'$G"18WED;-B.V0I2(1.A$E$J+J!Q(:O0"@*058N.!SR%*PTX=
     88MT&EHAU.&`!I3>@L7"H8SA`T.8`Q<F,#`<LY6QE0\H/&T32V#624T)I2`7ZJ(
     89MAM,N+7(,/G*`@WLC_"5\6E5;`5\B?\8&JN":I5(\8D,"@>>3-U#60?1Q%]0$
     90M_T($5M%-@#*X7E`1ND(5=,T)E(,[:8K:`,J7R$U>0Q8P5:4F>],,)X"(4G@#
     91M'(40"?INC_*D+N4!$/"!&`&Y46XKD/_(KRFV"61AHNXHLR@5W!A8*QU,@5Q7
     92M.HMRJ`F=00YQ-OH1Y1.XB=?!?(AXC_@*<P+N)R0DQD#@I$V.?*O@Z`$>+VBI
     93M]=@DP1,%P@M.1.`=H57(0)Y0*4MH$2**DNU&F:W0)3`7*JBT]*0+9-G"44K5
     94ME&!Q/K<!*]*'K6C+.F175`49;0L5<TI'P`G_=!SNXPFE1W@9CA3,"20*@S;(
     95M`I!$&`$9F8>3>Q!&41AXM0P*ML$#*&$C[0>,R"8.58-VKS1!]LY5R.`;A?!#
     96M'@ONB'JD@\D5!:XDF)JR!Z&GS.W@W\'2%@YN3'0]AP+(D=$D001@0PG1$L*J
     97MH.^#61/Q\<+23@(X"B'$/A1$V,@7D'R"=H&-%(9,01F&P"'CT(VX)LM(PFHM
     98M)21,(@HLO4<G<"A_E0B182@\*2@Y)62HJ`K(*+8H1`D8?,$A%T=@\%KP;DT+
     99MK_6`3\(,X41^-P&U#CBYI9JH`S!5`K,@=R=<B!]D#@I'PF6*2J'^&;#AA!*R
     100M+++J1L+57&&B/0%>D'<J'ZJ3H.!3H5284(Z`!R9'/9,1#;(DTAJL&-#`18V7
     101MQ)3`H,.D.D76E@1-AU+$`QA=&N,-M0P$!H['#;H1"",TE!YY$"$]88/"!.U"
     102MPF1(0%X&'.3>P>^HA$A44AK69%2%PT"C$&C+NA`4,@!"+U*16@6Y7Z4I/1,`
     103MC4@.KD?BJ8"@G*.3(O&V0-(D>$$\>5:(2&D#%@-+P+`2JJB*R"[4#ANZ*!)*
     104M28;+9MN4DHTC`#SXOS6F$4I%K*HH/DDHDAUT6L4M6W1KH<LAF:Y`492$!B)]
     105M@=1&NY.:Y#N8'F:4:!F098D7B9$%!N$N)$51WC0^[DP7U$3X(`,IRSC1R("/
     106M0B)<EV0XZB#(.T@&[5A0O8<,49564/AMI"2!2D15H%PC\XL`V(6-\8JZ)N),
     107M;8ZA*"+.MC"4PP-C2HRN94R6K2B7@C&V):U7/C)&?D$S!?>6/$A!]45=$JAU
     108MX7N0+J*T[8[!"S&F'"`'7KX,C1*Q`GJ4"3(D)_"(&:J-Q`DUE2,1R8WPQ!8%
     109M`K`$$K]J=R6(4[0P5I/A'<4&+>;4:&)_M);:<*"@I:APG+*%L($-6L6-0&[3
     110MT4I$S!MO)FJ!YE)&8HFJ%VF1_QQQ0^^I0S>^$;"SB4Y'!+()7:)0)36+1`#U
     111M4[X5,!&5)<(`/=H8133:9"D:11Z#.004`J='O&$_,3%4M(+R,(`ZE),-0/J0
     112MY@`QE!G(KRACHQGFY3:]<Y;T5T?M]Y6^\\R26'9O?+_W&)-8=F]^\V^.RNR]
     113M[S=N/WPQYVYPO_LFH;FI"B_?%^O)C*B6=7UD55K:77-D@[;Y3L`AAOTO$=7+
     114MAQ4]W!\ALM/Z[A"?CW;O<F7V+E?2N]SF5G*27O))*3YW&RGUUQ[!Z>^.]H[@
     115MSZ/UZ&D@A_BEAOWCN%3M<7P@,'-+5/BMAO%T/J)SN!RQ9QS4NS7Z\`D[<"`Y
     116M+XA-0<)>$*L1RP[>].+W_N1H\TZ]>`I_[?9.OJ`UY3;^]QR&$W7WAN9+5[CV
     117M@N[EKX!WO:AO;U>#YK_[H(9&#QTD?]K=I+_\-5V`[KYB6K')PP*JS=XTP2U>
     118M_AKO9X"O?(Y_M@:$Z296RIW;FDC73*K\S\QV5RIZ==-7;[`/:;,$9=%1=G?Y
     119M.Q/J``L56?2!Z%S1V7CWYU)2V>S9M1Z=U*C\Y]Q9R:]U9U5E[CS@HZ?1A]&?
     120MP^SK")DK:][[6U!5;,O\3EUJD?_%9[B_*_2FT#@A=S0R_TK#TZ;XOW*.7;EQ
     121M'-;[*UQ<X4C1C$3(DCR9V<K-%:FNWQW%\=ZF2.R)5QM+7W\`)8'@2WFT5]$6
     122M(1`@'B(!@G_Z]&VX7?\Z/9_^W?PL<,PU_U/XS[PYY<?N<WSQ^8R3_MS^WOP]
     123M9D8F!W6D0W?ZJ"#VO3Y=U_<_V!E3UO3E]?1VV=SGGDN:WC=.B0"I)03%EG&(
     124MFD#S$*6FV=X398_'WW*`";$^#$CX]H(@]'#[_&Y5J.2*"Z<R0=^<XL(FN5+0
     125M!K]J"3GIM,FQAV(U#8%0!$B5":U^*WQAP(\>P0_XE,#5D)8-@<.`ZR?LZLL!
     126MO_-5TF_Q`8$.*B4\T-,YDDJC5O2LIJPKX$/<\B4]@=$`,(#&K'HZ`I(C:H2F
     127MH$:>]-1'94YJ*#5,CRVJ<((0N&;&=L!/?C)4S*^I&/W?L(S6%8FB;NF\,6<;
     128M]KF;:"@YS9!=T=`&3O+@7TCX03GVIP/7AV6`/*1(?K8CTG$CD=".E(C&J2::
     129M]2,U9->!%F)(M$H'L!)'A<C(X!8JE,50;AF2IGGN\VO!B"J=AM-499JJ3%.5
     130MC51E(U7IE>2@J<H&7DVXQ4E4786,$M\S1*"`C,Y$<7^@?BR3[P?+Q91=Z.//
     131MC<FVL%V+PAWU7N$.?*T`5E'ACDQG9\5M?CNP<E7SHF.?7Z<3(EK#YN[2UKVK
     132MY0_195VSP^GT^JAS)9>87@ZIR3RB7:#8Z@2-DO5R<+*1)A^)F\F@2E5^8HQ5
     133MJO+38@,GPU3EYR,E23/4SM.1@?-_JLZ#&E`7M@;(;"5NTB<Y7$8YY"0)(X?:
     134MR(&R^@AER:%VY-"[<N@_)`>1`6:9:-:`G<)`.\)DT-Z`+"UN[>%4L0JDBEDT
     135M@42Q$$T@5>Q1,X,NRJ?)/0L6LFV*H/0:M6B_5+7!OTOQ>QO:3S35>PNPLOCL
     136M`JRI[0582Q<*X`+R86H/8WL32)FJAB_GH)5'2]6'K2[^[+'%O4%OUEW-3J[=
     137M'@CT80)]<$!WN5S&'?1%&.F!@'MLZ,Z.WL`6UN47N!_")1R^>,<GS135D(36
     138M;;)0\/%X/KX\TI&']6O[\GAZ7A]^G9X.J/,S$C(D7:U$:ZO5AABX06O3"(+-
     139MIHV#K&:8+Z*A\<$\W1STGL=&NFDE2'3\*!HSOH]FM4CQ0WQ@0;^R!O9YW+1A
     140MIJ@1]!/,YJ!'_`":1?IG-`^A:1B9FF9CD?_8I*CQ?6R,:IH]V0=4(=(P,K,`
     141M">K.AT9@9,;=.DJR@--5($96!R@#"TM48Q@G(VM<9)_&*9#M))N^V#TA%IZ>
     142MS2HY8@1191-3Y(!V.0K,R(HXKSY.SYJEQLX8503CDM:&QF:$T['!L]QZ<B?%
     143MD=!;9JV^("'1'I^HQ-^'\2HCW:.2=NPIEKOIEH(10"6'\<X"ZK-!#`;$1E`.
     144M$NPL=>=W.NG+?<#CSU!J(B*S8=3("=Q,)'A(;"HG(CPDDDSF0].HW_8H$4,Y
     145M4#:W$I-A2U($#B:'^0G4GF`?4!(_0<!,E&XFXN=)9#Q@,6A&FZ45`90SJA5C
     146MDH/-FQK)499,'7*8K0"4+;24N9X9`\E3JA(/P!XJBD?9[&3M.)]!%-^5L3:S
     147M.!9&%=3:U(K/0VY">Y#7SEFX^)K/+/:`CUV=S:52YQO3O9-[B3.%Q<:P*5$U
     148M1DT#3#+[P?GQC".@$K8I!_54*$W(!I548\M/6-89%O2[>FOI4U3K//L-N).P
     149MC5M^P!TKY!E=_0Y9RCNVKX1+"CA':8;@<!EW8XZ!1CR_1.Y8IOADA"45=WP&
     150MN?!5X<^"]U%0KJJ9#Q<DOEW.]B+2?9.9\.%X*`H[:?!EP[%]`.7N^#>(WR5O
     151M-OGT*(Q)M<6]YO:3>TTHJGBPWW8VE'T+A?K7:T-U\VZT'XJ=%>U/_US3MY[W
     152MB#.4RA=VB%YD_W)N7R]'DW290OV,K)!A_E4!W&%2..+AM'RR0O?<67ZS_?0\
     153M7V*BU/:;"/Y/;GDOD52RRN4?G'.*U9GNVG+;8Z#.VAE3>O3IY6C'Y/25D%Q-
     154M;06&S/GT3@3H.D@[E=:=B,]UT?@<J"84!`*U\X)`_`KD7A"HXR`00.$%@01%
     155M,Y#RPC]=:E!`*,`#4,;#<T#)-1.>H\FG`!U//E4SBLF_Q">___SDBZA<)Z)R
     156MG8C*=10'ZR@,UBW%Y$`42TIQ@'^5F1&'?W69$$?I7U;FT#(#^I>5"9&X-\)M
     157M1_;FWK#`RG(I(@>ER8<"9=8F\?TH8))@<<N)<BAK1X`(-LHP+I;&B"530BQ*
     158MB"6#DJ9BI[JT*INX8,JPG;CWQDG!N/?$J<!X,VC`:#*#*&0MIA=\T60&<QD4
     159DC9U#\;C=BC7LMA:_40_IVF.ZW+B[X)?O[J_5?U[(X&HL60``
    160160`
    161161end
  • Tst/BuchDL/Ex_L6.stat

    rf1becf6 r71a4d7  
    1 1 >> tst_memory_0 :: 1355754937:3150:3-1-5:x86_64-Linux:snork:429544
    2 1 >> tst_memory_1 :: 1355754937:3150:3-1-5:x86_64-Linux:snork:2338816
    3 1 >> tst_memory_2 :: 1355754937:3150:3-1-5:x86_64-Linux:snork:2469808
    4 1 >> tst_timer_1 :: 1355754937:3150:3-1-5:x86_64-Linux:snork:228
     11 >> tst_memory_0 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:334160
     21 >> tst_memory_1 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:2396160
     31 >> tst_memory_2 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:2416640
     41 >> tst_timer_1 :: 1361199400:3.1.3.sw $Id: e8c4b88 Thu Feb 7 20:01:52 2013 +0100$:spielwiese:version:dilbert:103
  • Tst/BuchDL/Ex_L6.tst

    rf1becf6 r71a4d7  
    123123ring R1 = (0,a), (x,y), lp;
    124124map phi = R,x,y,a;
    125 number n = number(phi(F)[2]); minpoly = n; kill phi; map phi = R,x,y,a;
     125number n = number(phi(F)[2]); minpoly = n; if(defined(phi)){kill phi;} map phi = R,x,y,a;
    126126ideal Iz = phi(I);              // substitute a for z   
    127127Iz = simplify(Iz,2); Iz;        // remove zero generators
     
    136136ring R2 = (0,b), (x,y), lp;
    137137map phi = R,x,y,b;
    138 number n = number(phi(F)[1]); minpoly = n; kill phi; map phi = R,x,y,b;
     138number n = number(phi(F)[1]); minpoly = n; if(defined(phi)){kill phi;} map phi = R,x,y,b;
    139139ideal Iz = phi(I);              // substitute a for z   
    140140Iz = simplify(Iz,2); Iz;        // remove zero generators   
  • Tst/Long/gcdp_l.res.gz.uu

    rd826a8 r71a4d7  
    11begin 644 gcdp_l.res.gz
    2 M'XL("+)(PE```V=C9'!?;"YR97,`[%M;CQ['<7W7KQCHQ<OOXT=U5]]MD(`#
     2M'XL(",?V&%$``V=C9'!?;"YR97,`[%M;CQ['<7W7KQCHQ<OOXT=U5]]MD(`#
    33M`X&!)`A@YU76B%Q2"RQWB>5*'B?(?\\Y5=T]LR9]`6(CL"(]:&?FZVM=SJFJ
    44M;O[FM[_Z];\MR^)?+5]]]<5O^IN\P-OR[O6;#[^[??'X\7&Y++?W=^^6Q^N/
     
    123123M($T>K^>X1R7J_FT$N%*UPLJO*<Y`AN%.R$/,A3<\0R>_)GJZ5W8JDT,6*'I+
    124124MDEG?K-CQ^FE&8C+@SVN>:T%18`$FV%U&;38C2M[-\D%&D$-T3+6K6E_^I[UO
    125 MVY'E1K9[UU?HP0][NE2>Y)V$<>8;_.!G`8UR[VFC<3S&2(9_W[%67,AJ:82Q
    126 M<6`8=@O80F>RDF22P>"*B!7,4NQ^WR(/;2CO'4L2EXAWN-(4`V_8?7BIM]:4
    127 MRQ5*AH:U82,HR[72L#_I:PZ]*?IGJR:&0%UM2JNJ,>!CN;:>Z7`%Q"/])K!I
    128 MN-:4I:M1';E=0J,#\O>MTK%(VE::<SE_LZ>P?S)617APR5FKO;K6;!K0PNVK
    129 MA%L-JK&O&&Y<7FL,5YM@KIG6[*7%<(OTR^#$'H6PX*BA-8?YP>3/V@Y+P;QE
    130 M82K45+>IL#08`X-BKV"HPW8\="%F4UQICJ'[`'\4(T<E6;<F$RR(B*K[VY:Y
    131 MSN#'[-NH!`<P)`$Z<^:V0F<NC4#S?MN(5Q9%2N&9HER40V-.9\M,\%VV&WN&
    132 MXQ.:<2;7?8".QI.&5-1U>-MR*K$+(/J8Z@QG&WPE]F=3^]2#[X)N3V];#_,'
    133 MLG&I@@$MJ)_F`L+XA[LMS^I/%6Q.W?QMHP;.H3;,3_9"`?/-E&9)]B/X1PYG
    134 MF\C0/)W9L_N&(Q=5N>70GFE$:`/J$-;BUIFRS,;VMXUK#M>L?6U_6TDM`(A<
    135 M5=-J4)ND/"S$`'VX-7GT\&6G=+G%T)K>ZQO?8*GG\&K*55]]NE^@7J1'`$:M
    136 M")MT.&`O%P+8#S5,AG(I\CI,AGSX1_+OLI0)F"M<4;(.Z(:YNF#K&_9F@:L9
    137 M8%9,,\)GT$)?L6(7?$DR;?Q%I=--%*W@W2&X\)7YU8*7D>;:^!/ZY6950"W*
    138 MZ!6$$4'&=]C$^$&^?2N5=H5LD_`5W058"V06+<0*!/7+P-,P@66B320:%RT#
    139 M5LM*_K;4=LBE577L25_NJ](<@C=*1O>B\=%I6@#,O3+T2-_AA&?QNF">C$3?
    140 MXJSS`JB?]#P.&%2RF*4%,8:6E,.;@E>@:23K3CI0,`@"+#%,;=*A)B+('LA`
    141 MYGI5^A6ER5=2`<L%Y^5TU^::L$ARAW5T[RVC_Z+]W:57]04&'J/MMN"6%/,S
    142 M7'IBO-/B@V,.D*/*$$A'UA4^/5'11>V:BD966^.5&0'NU;N+1H2%A1%H75Y(
    143 M+*/+'7K2YD0I2'PHE__$9KJ2&X=5EC:&.'$*9,9@%>6:S*DY9(OC"Z[%%X!U
    144 M1.]Q4;<FI`U4G::MKA"OBYY"P2P+4U<%2$(`9=L.Z1)-!&^FK%:^^94YN0)?
    145 M3;SN(B>9[LZ<T#;BQ6R[+A,PD=:+MB>8'*@#T@ZZBLL72->=[DP9!LB'#.8K
    146 MZ2[+1`PD(_7*4@(H:=*P>I8Q/@***EW7`T[9(=O(JVP$?'T*6$N8/QAXG5:G
    147 M5`C[-B=UNL+R%"6&3@C.016S#[QGJ^K>UO$3XYDK11;/*S95]&+F/DW*9#N&
    148 M"-`#30<Y%Y)(W70?>F_N?%TT;\7<D!F9/;OS6+0E';NB&CE4330/7;=E>X\3
    149 MRF!?"VY%.U7TI'2UUVZ2)CH;E8@LX5WAI+BO1&E74<M-)770`RSF_*(GH*BL
    150 M29NJE<I0%_LE`/X5ML>J)FZM5X[FG.A`OT1X@([SZ4'.AV,S3_4@(W$J,$Y&
    151 M9L&!<43_)L<X<&4;:47JW28H+(&Y[>-,9UG8AJ(1NMF&LF`WIH2#JQ\.41%A
    152 MV]7DH@XEP`#]UG[X0P'W#X=HYNY@?R]-]*%#M(57"^9?WSA9`XCN%B?FL=NB
    153 MJ0,:\<"(\(5I6'$[1*?F*27ER!P.4>G"&54<R`\+AVA6/$4F=3VB]3!;#IR#
    154 M^=OQ^LMSP&2CB-[!'QJ^9*`9V4RRHYQ>EM\6?!IXH")&-P^[4"2U1K2^KQ+1
    155 M^GIBG'RE#2(*]7L+GV@KV0Q#.`>BJ<QLAN@?Q&.8MUWIM'H<"M;JR$?,OHBB
    156 M.;RB@EZN,`Q%+"VS#2'9Z"`D(/<C9"]V;`VWJ,QA=90C(G#8AF6.;1MVG%BA
    157 M*`=>>:-7BLU_X)PYZF$>RE:T/:/%L@/RM0[K,+>P]ND*&&X>9F-KX^[5MF]4
    158 M-C$?,@$WS9`1\*VF34(80FR0)=8=2368B/6R`,A0BZ<=L.CPI!8F&GP3N.&H
    159 MK"@+(IQO,@\XTL2-SZS,4_QJM+"&Z);+^?#8R5;4NQN?*X4?+X1);,JR+7^Y
    160 M:M/FEZZ[JGF1&/@9V#=C?%.8V3`\EX?<Y6)8=N9M1X!A3Z96#J-3!-K<V'+1
    161 M-/P!TW2J.\NMS@S\&6:G;!]I.^LLLZ_#0;1.P[-N`P#.NU+-:H>YJ03\S"-F
    162 M5K14;\RI"<L3'K[FEJ<8WVH4PZDWTZF6>[[B*41[4SCLADX0E/7([9E#U<.-
    163 MACC_\H`3G7G+_7IY[G?2G(,GC]VTP#XN+K-R$[-!PM"'0V9NTYB75W:]7"P#
    164 M6/Z,1V!5MG$J97G#'"PJ40S%6%1BOX7+`[IW>YP0H4AS<STL/X5:>4;DCZ2I
    165 M64_CLT7$"1?%_75P2<13B#>N&HH%N5C-%0OD8#'U0N-7Y4DQKXAPD-_A?#)H
    166 M9KLWE35E:KGG'7A#H*K;,H(NEA5F]V7S:(>[3N#\%;H<>[YSR2`J8_IML6T.
    167 MK2P24,*9F(\-%UFE5_/;5]KT&DQT/8E4S/,RI;PLU0H."UVD$:J*B;V0KWJ%
    168 MV6F$9>KMT$"B@?/T369Q?"ZW.I5Z1EY=]E>A^REF%.JXC`A'RV)K=C?X*IC;
    169 MO6$R*Z>.4,>3"<#(QIWM,#S3"B<TKJ[F(>G:G`WKLTA-$'S%!B*B^3<:R%[]
    170 M61V7(Q12_D&NC<!26!:R`Q*^-S'.8)MUQ_?`'301`//%1*@-EH\@6$/W8C41
    171 MFXOF`F(5Z9''+R)S8/L"`D>!,0?+!'&X5_FI$CX009*5))6O[E$ID#&N9K!>
    172 MU`B"/;)N2*3("(FY639HEN5+K2;&S-:@Z;$8,B.F+]>"702Z=D7S"S&W7'LQ
    173 M3"_"#1/]+LL1=I6LH09$SV@3*3&BJM&_/AJZ/PL,PWJI75E@F*Y&P]/()J+J
    174 M!(HW&D>`\]*O1*.B,6Z7"Y"RF(8YP'QA!Q?,,(`9406OR+PM!N5%_.!"&(4\
    175 M#Y$^6A1JV"PR10CEX<Q6DT,&L/=B/!"9&]J%J5XC<W(0U5N"<!3()U9>C=!3
    176 MLMIEPX**L&D;#9XBT`/C*]83#($^8="T+^'Y$I[_?>%QM70$+$HUHM$*>-M(
    177 M$`D"3)MT"^CNR(MAOY*-/T!THZ=_:TERFZ=NQ`UGSUUV6TR,P)G(MZXS?+.-
    178 MR&RJ)FZ(#C!$Q]LI@KRM\<0,WQ\;MN%F=J)<:"8R[K8K-'B]B5$?+U1!=]2]
    179 ML55&@)K=OC:GJ"&I(DA1FOIM]EX#K[DPL05_#C(C]"$0QZ[`IRW3'C#LCCU9
    180 M\[CQ9^_5=_RF!Z$$XRF!_6A#1V!>--&<Q))X)[B`]WC#-C(;MC&'4;.GR,&-
    181 MH'J%XW\'R"NC9!8:J60T-_L9G&B.:BM(0BTL7UQV#\4CB7AIOAOND[^D#X$_
    182 M%#(D5]7I-I7<2_)!D'><>CS"S=?A5>V,0.HT(5L>Q#O]DZ=VV#.(HJ\2;]1`
    183 MCE0!JLS:)N+FGRO%,%0D#+5H"5#,+0*<6:,$H@KX?FV.&29]Q_R1G@\RESZ$
    184 M8Q,U8P;.QA(CQT!Z0'N<BV*T-'JRF![/PU*"L8H,?W5&Z!-)E(,Y6^3OJ?:-
    185 M_,4\>'N$@#RLCGKM:&5EH,B.7Q$K,B(!9=U&#[2(`R5&L_!+(1E;T]80%P@I
    186 M+9CW%20!G-TBNE(;XD4M=A])M_$43+04E%I<#@]9RX5EQ8W;;!&Q*5CY82T7
    187 MRH%%A)$U?EV7WX?OTA\209C%!Z'@*)W+^D;N&`E+A9R+$.R"Q5_V&^%R6'!1
    188 M+F;WTX7ZBB54F,$9P5RRLLV'5LB\T*1U^O8#TA;L5"/(++A<TT"M7$S-,"O8
    189 M,=V$@G$.7_>VVV6G,7'C@4:CV7T>*Q!VNXA;`'I>+A\&V/3U,JJ-F!%!Y\Q<
    190 M^>.PW=-T_B2CQA;_A;;8+HW,Y3X/LDT;!J(90<[-DO)E]*XS:-PVU10$FQ76
    191 M^VS3SF!:?3L%X2*Y8HO`F3W=0Y^,)J_(PULA0;#613@.XSU9%!.LF\N.<&KL
    192 M2[@6D.'2RV&\IUA'+%/F!XSW,O<HP%HO1]A8%(G'F@M#DO7%(LAA?9(Y&I.4
    193 M=?UOA^JZ_%RIUG;OX#];ZS#=X?U*;KJ/5NUTHLQ<RNU0W1D-I-Z4'OE/<VH"
    194 M*'G$.[)(:D7L*Z34Y"NH-F!WV/UV1HU%H8=X,[D-^6KN4!UANK>V`Y\`#'W;
    195 M^V#G)Z,8PKDZU(UX\"S*$?_#(=1__9=O:X0QV^CW"S=>PYE,%A'%WWJ(EOPU
    196 M]QI3,..31]CCFP<NUK7\5\&P`(`1)1B(!9ZF;+1+P!SF$`'\E!$Y!8W^IQGM
    197 MT.EG:@9E1F7C_1[>$""8'%JP,;.D78YR,M>$_CGV^A(,0X)7`!T!)R;YN.B+
    198 M7BLBG1F<(L$PJ^1XJ)#6-1SII*1&?2-YK!Q()V.\#Z33BZUEN5B:;]K@I]JT
    199 M&H$P8\5>(%<UNR6->,%JCG.,[&4X!Q(8D.I"KOOE0*?IB<H*AD+?`L"``KEQ
    200 MC@QXN0+GC*5GDHDTM'"A`,K439RO=/Z60#E53Y"3/]>(B']%]L@50B>7O?D6
    201 M+PIM5KO+(U,"Y=#M$2@'+L(1**=V/T^O[==IM)%\AN1R73E`CB!)>E$`A60=
    202 M1SLB"C.2!P!FA@4$*J(#>@`;H$\-FE1E.#=8&;A<*P7$R4D/],&?<Y,':]"?
    203 M#>/(_#1'.4/SVH%W>@H+0P!,F1N&PL/4C<5>Z7ST4V4$=^9HAR2'&F]$ZF@)
    204 MH)-A.NJ?9:?C`<+TV*0*3[\QYRHN+CW87?Z<!V0A$S[B(L`VHY@O#67TLQGF
    205 MV2`>9]NDO><0]S13ZW+16K*C#,M&KT`Z.=A\1#K3F;$B`(6<#`5`X6C'V5[I
    206 M!#IP]B9'.HRCZY_E:N%C!K3)95-PH0O:%4@'"][NRZN.P$=P.H_P1!8BX"O`
    207 M3M9#&'!Z@2X!@SHXA#V@)9!/-U)4(?5%SZS*S-X[HA1KLPT+>5".JD""2?:C
    208 MLKVQA?M6R!TPS>7"6NB`[/:S/H*JA"A%8F):0)U4#8C)1;74#ODKAT]_BC%_
    209 M'3&*,&2(;?281_[9-\D+F3`S`HS`-MWHJN07ZPD8^)4:;8%TKJU_`&FH!?5O
    210 M4#:;W3Y"F23$C7`Q&UTN.=:1Z>M&D,OIH.YBRNL.;N`DBAY0IU_9?@2ZT,&0
    211 MR]#+&^H@-'8%U"EM&M21GHX#Z^2R]TO2XIK9WKS0(]`R@O^;5\=,IR!Z$?M4
    212 MCR:1=7P9VD'&V9'N+4,QHBD[-2[BQRW9N8W`P?VDR;6=[</XL8DK\[WU?%)&
    213 M,.;.U\#>4#=U%ZZ057:L8MBQ,)/#?``>D)HWX+&D([NH^;)#SL;846<(Q09)
    214 M7<\M\D!%*BKDZ6!)E8,#4'YS_KFRI!";@Q/ORIGI:"F](B8/-U)3+]PD>439
    215 M#'<Q#<<K<DKH18(73A`P$_H6F345N7!WT9%,?*BW;[.GH7D79-8@<5):$'V(
    216 M<I!_P%>GFZLKW0$F+_QL%6Y&`0W?\(T%$'<FR#6P^49]Q=$69*<T..*6F)5D
    217 M;61Z"F&TO^)P"O81!!<QR-F&F#KL!&CH3."H3+]@2I\@%E*DZ*Q#IBD8+NQ$
    218 M95I%8U*@C-="&YUDLEGH3:N#^2.3WD"Q%%"^0$X!C9`M($<$IQFH/P\,HP&.
    219 ME>8]5K!;ZIQ\RY640M0*W:D8QEI)CT'V)XX,HS.QKO)ZQS%%*`>UI3"U%%^F
    220 M0$(BF"&@1-+964$3JE7>"$-P:8H*CE.$PQ"#6,$2`CF)F9^D(HGU"G>J[-.L
    221 M`<[@Q!079&'!E8S,Q_MJ3'`I2R=A*&V%[E+17ZA?MCVT4$@2RHT.S;'(SVFB
    222 M85\![C'&A2[A2[8+_`).1M)OD@@GCL9!)PH&L2VD\=Q7I<]73!T0D5;',,@^
    223 M]TU>"A6(`D$G!?-4T+CH%"W56ICZFA?)=#6+6&,O@5^Z8"`1LX/75D<22/85
    224 MWC],5,E,@&4-M3%#!LXC+!AR<PK&411CHKB:J$WV006E7)QI)NT(FD$?"YE0
    225 ME6R^S'&LG7Y;Y&YCH%=?<&N3'I3)#TH<@<7DU50;,G2!K%%.=M#JFH$K:DG9
    226 M7`UN:>6#80SE92]2RC1/>#5ZCG4(R%1K$,+"XP/INR]8+:)=L_/6$*-D6`$]
    227 ME,T-PH;33X*U)MH6OFU@!+8Q"NE>@J2<MH;%JE0KL!N137(A3:F3=$C:VM41
    228 M?8#?G`,)+_NM*!$K,R$J(P,:+ZI-J`-\74Y:PXI46B(6'C]B(A),&IX3(RF$
    229 MR@ID&TC?DI4RDP4I2BF4QZHN_"2PDM3'HLG$_0?J2+B@F9*<&B6?Y$1*JNE(
    230 MG-A#P19K!?7,"XL?&L^4I)COVLQ`)`$\J%?-P38E><<V0NVD4DNN*8G_R90D
    231 M5$W!I,UKD,,IZPJ965=Q)2GHII`HB)QMS3"75L5(*9>IR;XT()%E`"A:2'L&
    232 MA_(:KB5%=IA<+6-$,FNEDBB-JA9Z,GE/Q<!D3QOHL#ABVO0D#C!A-R[&E$PP
    233 M9!-P-8E4-G)RJ8<FPQ9CD,9)19F-BRCX7[.K!7B3[CI"5ZY)*F'5'/4LH_YZ
    234 MEQ583%?6S,F`LYB[!>>TCC%,5XH*8YZ\S"KIK&)[HY,X(\24);_LLS.\%W<+
    235 MV1$NTY78.%[5!<C0CFY(I7`%45OB`T-5*:.9E-O.J:BN*Q&BAI98"S-^Q\D7
    236 M2*,G41&Z$OLQ]P-())+\DK0@;^J*4K/\I)"[R85^DA(\35&"O4MM+:^`YSN(
    237 MD+);)=>48@I240)X(GPD1K3T4#,>BS)3L\:GDJ;1"QXLI"F2Z0A5*7LAWQ'T
    238 M26Y:&?S7-;C\H"O;5;0"?4<!/=PRF?,(52DHR\XKX&$!.#)=1J&UXLJR3MU1
    239 M!S,=)]8Y5$@V58FUSDT+_AL=1='%LNL7TY6(W)!X7!EA1,`-)^%>IBFQ74!5
    240 MHJ0H]JB%FQHE@;JR%"9,+FHAV6/E#7OJKBEA>7`>*$A%C!29I4N+BR9K@OJ,
    241 MP"C$8+14&25MH28UB@IW"U488ID8H[[9O5GE@,)<L;UAOKE?44V68CFBLE7@
    242 M)2&K,/JGZTE$4XQ<S5U7@)K\(F>E?VLDDJ/($_K),9XDRF<QX$Q10F\C%#LU
    243 ME)J`4N0Q5:3!22T'/:V>G]D3:7XZ`+/$(9(_/7YZ^]-/@E;??_KXT_%9N53S
    244 MT_/EW^^:Z^\><_F/Z_R#`R__X*%HKOWE?^''Q^%H=?BIEO]1_K]_,OUDR^?;
    245 MQ]CQ(V4H1789CHEZ_"RVQ)M8"=_EW\?/^#3!A9N7W*QR,\M-.`0N_>UEOZTO
    246 M[U)0[OKK)7?;RW>YTP$K^--E%13^LM[+_BDJ:"_OK)O1:SXPI:3+G<%S-^Q&
    247 M8Q?>V8FQ;U?M`FLH]W%%!:BZ2X&\"S^9@/N#%7]G+9WXS>\V[1^KJ7=_R6'U
    248 M#"GA^?J\V^7N8!TX;2EN=>V@CU-!6$E+FO41PPKG1CQ2K8_UY8-Q*+G=6/EW
    249 MJP<./*VG60O%ZJG^KLT::%K/S]D'K5D#Z'R[5X2O'G*#U;.C1<<2*7-:T*V?
    250 ME6.)0<A6TJRC33J*>T7N3?:R<"BEDF:WAW6R:B>U]F*U-ZWC9SN4Q4J:];+?
    251 M_&Z6N\MJ'_=B=Z9UO.H(X^-]5C*LYXT]UWO=^MPA`%HO:_UN-?3;P^HL]F0]
    252 M?C>LMY##O*WA=K"Q&@[`>EY!4KO4N!>/""+?3?I[7RZ;W_%JQYJ!E&5VEA/>
    253 M=-@''YVV9IK_]#M6WN<%TV,IF4Q>=C/KR++]T2@!G?6N6#+5Q?$[UC^'7`]L
    254 M40FR9<19QM%K>C=KUW2YW(K>];X52N'T.N1NUO5CJZJ:8#9;0S!'[;8OMNRB
    255 MV:P@6Y^YA`30N61ZKZM-\F4BY2LKZTH74>E64JSKNHA0LJPD^PMP&=WG%D5?
    256 M7YGB:$LI'^NKA$0N*RG685M+(5>^DKAN;OHB5M&,5<.F][J@O!\R>-!MVN=3
    257 MHB"//ZE8PC7S$)3PO;P#!>3'F_R=W_/'[=L;;LM?F;;JE1^%15*",/<CXY?O
    258 M+'W@I^\?A27I(=CRNS^5'D5^]U%^\`;>_O3G;X^SC3]K^V=#9SN[%?WMV5!^
    259 M:DC;\7<^XG:MQRXV]90AVYHR-0*D4\?^]=AQSMGR^SD$LMRB)M]@5!6/N+?W
    260 MO8H?KRC(A]C9=T99-IZV0+;-@/C>8EHL2/I`MU8P\;IEWO7M1'=""%`947#N
    261 MA;(J9Q0<>R'VA[COR[C>LS;JFXEOA>W>:A38FK4U"&+-H2-,3JURWTU\/^RW
    262 ML@O.[1#QHB@XMD.L/][WG</WO>8-EY?G?:]8TZ[Z?2,[SFDZ/N68\"G'OQZ"
    263 M0_2C&I1SZM#'Q&@O;KGI&I&*Z#H$J(2VR7HWA,KD1'<(UW"A8URFJ%]X:,4\
    264 M!*HZZEF]QI[23WG1764ZV@&./T2KF/H><"EOP6HA*77&?C,.*='M9JE\'"*F
    265 MLC=@5H]#P&K(S,J'?/60F'S%]F.J#I._9:N$L/#UV[$R5%2JPYJ\!0Y?(#KD
    266 MR@4.'V4ZI*J&]+".>JP)E9UY2)2+&D+IQW;B@E;98#X$^;-^/E!V_WP4T2?]
    267 M7*E1YSO]BIT*]?MXKQ_(AQ4U#"W8Y3)K\1O4=)-K."#>\&25"_5)/AH?+?)H
    268 MF8_ZQB<+GVQ5*LY\M.#1@JH+GRY\>CY869'+1OV['IW/4W%363W:&RO(JJ'+
    269 MD"8RJ\BL(E_21M'-!I6@B6I[@?E<UV.P"M0P'OV-3W]4+6S2@.Y5>#I+[;8E
    270 M==L0)G[.7T.?/P8>]^XFJ0T/2U,_Q&!B-ZJ/8SRYR=3'\YA*,[CY:6#_;!-C
    271 MPZN]C_'5%?X\PE;Y.<A6=3X'VNHN>[1Y_)IU2H<;O)S',=H\P?W38%O=QWA;
    272 MS7F/.:&=O1GJ`1A?NK?KN.,'^7$,N^*48^31.=WT=1RR[_K?H^_)Q!1C[T)_
    273 M@&1\RM4V:-5VB$,]``G?ML(D<+."9.M;=6$Y;F]5>,]^VZQ0N3GAJ7^ZG[?N
    274 M,YVZ"T_]A^GLWM`*5:Q*3C8*(TUM-1^:[I:/HB==9T=M!(1@;?.>VW7<+Z?2
    275 MN\^\TE&83]4G[U;*+CS5WRW9&7L;96PE*#9*2T=I>=*%<*R6HS0_J<0T=Y&I
    276 M;-D=[\7'V*"(M361OGV4U%.1PO^;CL+RI$Z+4;&?3!8S$X\J;2]"&-OOMD/K
    277 M%]T[\YA'83TU-/@=YY.^`S1]W7P=98Z,8#S6Z27UV"&JO5@_"WV?4&NRUGJ4
    278 M.4KJ9O\>16[=X%0\N^VXQ^U=,9/Z/,I\[VE\L^<RQU&=+Q;3<EH_8I+>H\`A
    279 MD]O!_>X'5C^;/]U$\2AR`VA0%+WW!P3K[-]1X`80GBA[TSP^C9SP:60WK-W=
    280 M5"EC`<**+:E!9$)MPA4F(&E>>N<)?>;0(<?:6$1DQ'T'O,Q;?[AHXSBPT!LN
    281 M;/PX7D\."0-O(HJUE45(9N\U]$0)D2SC,E#H8H/3"T(_Z,.RMNH)"/,6/V0T
    282 MNDJH(7C%JMAB@""C@[\2+A">1I:/U5]"HO!NL?9;"!-.15)<:+.NO=45KY7.
    283 M^^!P^4+/(57X4MBQRFN(5+]FK'&7C>PUJ\""'.6HD/K4G!TS?!*N357B9G=H
    284 MZ8ITV#*?X:W`*TP`YG5BQ6QU]'NK#BU=;P[=+^+WKC&G:N+L,-*UW]"QC/NN
    285 M^.:>:%]%U6X?]LKQ]>[4/Q]0\WN&?B7T44._$/7HUJQH1U&,0P^#,4,!038@
    286 M8W!`(8Q"$T=Q*"ZZ^2LNT8W?(`FQ1J-!7QQ($(4JPB-0$$SY47_P7KJW(#IJ
    287 MWH*GWG[J[%-7W6GPU-O\U-O=V<]=+9^ZFI^[6ME5'_O#;L37NQW/X".+RI02
    288 M'3!MI7SH40+%>-)2,EZV.X+?8;4,`2T*:Q*DTF[GO$I1?]G.BI3O/<UU%FU_
    289 M1;K,D[U+#QN3QQ1.+VLOVZ&!S\3F5L^B[=?`1Z2N=9:=KHW%;QN.H_APJD'5
    290 MS6C1MDQ4R7RH4LZ2[1-)3&$:9^'I%L%+MGD]E1_>$:J'86<?:_'A?T.2AW]%
    291 M@GN'AA<2/DQSO*5OJPK]>&+%FN4L/1TL,D*CE706GVX6?/2JV3$)5AS>%@[2
    292 M&.UL^<5\C]2^]S+B36USUC[)[IO+4]'IK>%18"6UL_QTVD`PZWQ^_O#=8*-;
    293 M]>EI!R:FOWM?1^F+^5ZIPW<*@F%X=3O+&+=K#T/ZY!?B((_V].#I'I)![G6+
    294 M3/KD).*7^N99ZOBFV>XVZE/=X>+E)B'[SCB[]F*N:NX4"(?'L]?+&97A]TK2
    295 M.@M/%Q63Y>VP`BL^'54BRJ,_%T>81C?[8XH\RK9\4[K5U<_"[+.@6]-8[>P7
    296 M"HOO3V%GF7,J//@R2=5I]%IRAHAPI&<=Z2@]W6M([.\QP>OE*58D$]1:.IMT
    297 M/[>&]P#(SV:+3X_NF_S&V2[-/C]3=W(SZ;:K+:%32S9TLP0=1^U(%4^L*?TH
    298 M.\-5.%,OY&6^/(>L>(YH*"B/2#J@G_*B,8+N-E[V)OS^>#D?+3YK&BQ:]2C+
    299 M/FE+<=LN0@&Z0V6XED\T]A>/C?";[WT>)6?0+)&!7X_2,W"&;U;6&#B+E0:"
    300 M7+>Q!\=#IF9*_*QG=Y:CM/I43H5`S0_IW88HYW*IN7SV*?M4RO,?NZB_G-$[
    301 MJ$+/M=&R,Y*'(]3G.`K/<!Y.F?#LV!VZ=2M&UI^?U+K=[<M>!!]K64=9]7E<
    302 MG,=Z]J?X/.(U9"*U!%MI!)GPN1<?M*:O%W`91T&N<1VE\\#,_-QK;ODH'@=X
    303 MQF>&ZCH*`T;K9+4ZSM+FD[6H%I]:K3Y3?(UR]Z5>]44<B2=\R?@H6@<:3Z2"
    304 M]O/)>8!R?#TY9,<#U(;-^9FCL]YNL[$X&]%3M\PY&>RIK"HK*];30/:)A[/-
    305 MLWP=`!]?0PMAM4AWH'QD?,QV':7#AG:]F-MY%W4?5_9(!M;*LO?(;01\M.HH
    306 M<WMPZNB4\[EI@[,4]=2CR-WU;*V[YO"VW,#`MQ.C9-FK+2KK_83'$UC5D3/7
    307 M#]_VN,),QXD'90-:VS;VS<"JZ::@^4"QNJ/>6Z?7W^"KH5">"-&2WM_X4Q6@
    308 M5F.X5;>Q,K5%!ZPEH!Q2"`*J!JI,2E#4DHTF5W1=0>H'O\B,CW@?T-1@HB`?
    309 M),P>F#00(DES-*,-D#HXE#FM2+)@P0:%\[[L9<O+]AKB[.Z>RPDR`_`5?I@X
    310 M'CE]AG@W63K7QI<.\V2><;2;>E$"WHV[\UL,5[)M'*L[Y@DF`[J)`D[I"4<&
    311 M:D/6J7MY?SZ]BC)Q'0>.!8!TK#9!'K[&BWEN`J/UN^9G;VP8F`6(O]03%@8`
    312 M*W!@/6'"`%\)O)8Z3D#HR&OQK(4###KH&O@<4'LQ5U&@+7X%.BA2(9L(RFXG
    313 MTNF>A*S@[*$#]06,RK>13H]V0"A^BZ=&,X=C$EN5]??:!L1X,7_WCE8&:*K.
    314 M]EEN5#AH@*UR`KB`1.56<"+U1F^!AQ+`YCR0FV,A&++XSOU&;0Z$Z'2;;0,V
    315 MAT`M^$#K1#]!G#"H9MV%WVL-]XB=7E(@\VOU`Z`%N,'I,"<X<UP#_;JNTR7O
    316 MH&;>J]<4,CEC=.?&9(YCZLV))B/L!=WF24$^0%7@%`"RW`Y$%2`%'Q"O7G*Z
    317 M61=UWPFD')UP>)<3U\(R6$\#W`WXFU;S"7&0%/`#;JYZ`J2`'CQ?F-+E\,AA
    318 M!Y:W4X]<L>DFCF9.IV"@C7X_X(VW+2O+^4>.SVW?SB>@"0"!SY?BP.F-9AP^
    319 M<+#F&65V\#!N[GUWA-SMM64,/4CL\%CWZ(@T^UYD^[./NH,01P/S?B*(V.OI
    320 M10VFDB/3&2^RW%OHL%0WYY,;YU!PFK8]BAP&+O9M[]SC",J-S^>(?78F-@:E
    321 M$4-L&DH>[_T#OC$+)'>YS!IVSA:4[G"FM8=%I3L];6^-_KN.6"$T#Z/*X[VA
    322 MJJD1Y2Y7ZNWK'E)N<@L!U&(1Y2K7R&\00;6@<I$[4F5YL($L5])5&8/."+,%
    323 M=T4BND:9+;`+YK6'F3VPNWJR4#/<D(PF2\^*A:XKPZC@0]&S63^&IHQ<C>%H
    324 MC_1>J6L\.L*\+7<+25N4%QS[)&T7<V!V938A4%_5@RE52[O2COQ-VCD^AO!8
    325 M1]27R0./^;:#OO=<5Y6FCZ`O7;J=[<B-H<U<TG*E_U-JSJ@7!T!YT!=LVL=Z
    326 MBZ!OQP^F^H%9`[8Y::7`0SIO2G9\X%CK[QK;!VZ0&E$#?J_E"Q5\S!]<CMS=
    327 MZY*T';Y;F!C5?ISRQ*CVXY-,_5D%]!2L0ZX^2U6XB4.NM)G\+%K:4CFD2UNJ
    328 MGR0L?Y*PSP+V6;RTL6<!T[;R*6/:6/DL9N63F.7?B-EOI.PW,J:MA91I2_F3
    329 MH-7?"%KYC:#EWPC:9SG[)&7MDY#53T)6/@M9_B1D_5G&VK.(51,QUVI'"''4
    330 MD]D_VE-F0/T7I=A_(\?^I]_F!8S^]/3@T__I_6U_KOK[W__VKU+1CZ]_?_OQ
    331 MU_>__?)F=\J/_^.__/K^XW][_?OKO[[]^O;W7Z*2R4H>[Z__]:]O__G'7_^F
    332 M??'/6_^RVUYGV_/:.0DS_6Y.PC]ZFS_(2/B'CT13^2__]$^/49_U=[,19OO=
    333 M;(1YY#',\96-\)6-\)6-<-@&_T0VPIS'"EI?V0@O7]D(_\>S$=:U97"E/[0K
    334 M'AEXPA(.@`-`-]!L`4TN`./?$A"8&/"6F3O@R08?!>D([Q_EW[`F[WD^WJ)\
    335 MY11\Y13\DSD%JQZ"T[YR"KYR"D)V_BUS"M:!E=?X0RU;'QT<>/AF!@GKR!QH
    336 M;TJ#)[=_&M6\S$=_,PY[KC"GS+)5[M52WKC2_\>;TM&13"`VKAJEFK)0S/Z=
    337 MZ@8@57P\YINRS)DKT.4)M2X+VBEFPC))P(QEI6&M-S++-2-`3'>:CT@N:/(0
    338 MC=$[W3-F\6IF@/P,1F*&WT/-2S12U5+]08?#WLE&I,:`*&O,1D27V1Z4OL=$
    339 M66,^)*3H^Y#HXCI&I1Z#HG0R'14EX/O`D-:_1T:7V#$XY]CD/39*VH^A:<?(
    340 MY&-DM%T;&N.XQ?`<H^,R=2#)M;XH^U^4_2_*_A=E_^<_HNR+3@J=D:_T1=G_
    341 MHNS_?T_9SU<^UD3Y0YQV'PGQ-&SQ]U1SG@_=NW%4488KG!$#@7$BAH]FI':`
    342 M'V7`Z^/8WPE/2FL"LT!IQQ,#0$*9[UY;5IJ\_*X_Q@?\G@W8X1VP)&E@#S#D
    343 M!^V1P27MD0`+ZXW!)>N-)1!XCVZ[-P1+VIOH"6NQ7B@Z03<4F;`?M^B##V`]
    344 M!K-]\>Z_>/<O7[S[+][]6?C%NX_2+][]%^_^BW?_Q;O_XMW__/\<[SY?_8#"
    345 MXXMW_\6[_^+=?_'NOWCW7[S[+]Y]@)#_&WGW^9K'SKW^V",H^!!'KX$R39=@
    346 M8;RR?8"_5Y;&+/O'3:S8S)`E8[57[TU#EN`\-Q%KBUKVCWQO:3)HR6!M:LT"
    347 MN96>P)XL:-D0U\6#&K?L^'&MM3-NR>"DU#,U<HG0)$[Y[A:Z1'RRB+5ID<L&
    348 MGQY[J^%+D+:7[%>/E)0*W'N?#&6265QG6A;,1&RSYS0LH%D_]-M#EP4U&\/"
    349 M&)^WIM1OV6QJ>B0-_N*L?]#:WQCA%*NP#8U^(LIYEQ]Z^!.\:(QMLB!H_="Q
    350 M1BRZ&=.[U8D.OX%KC"_;@1Z?P5.&09D0?2UD/2,`B-AZ56JU5E.D&G"XK7O7
    351 M6_Z8^)R,=$<&8-[I@>UO&-=I,U[?,$-30]6=FX7-/..[-NMD__NLSSWEZ3HF
    352 M7&GC-N4W,M1CQC7)8D\YO;Y[PC4OP./T8)OO"6?JQ#'A94_WK1U3K<D%.M7&
    353 M(_>Y5KIZS/6-N1=[KIG>$5-]CUF^6;J!!K))(X]9)BM]SS)S+/8L,Y4C)OE6
    354 MC@FVE`6=85+1;8)O]&CO^46*AL\O3[_1N?5.Z>22NFZSRVP+F]U;3*RM_W3]
    355 <A6SL7WY]_?6___(M_>D__+L?_B>&O>/$C-``````
     125MV['D1K9[UU?,@Q\T5=J>3-X)X\PW^,'/`@KEZFFC<3S&2(9_W[%67!B[1R.,
     126MC0/#L$M`"Y7)G223#`971*Q@UFKWQQ%Y:$-Y[UB2N$2\PY6F&'C3[L-+?;2F
     127M7.Y0,C2L#1M!6>Y]3_N3ON;0FZ)_CFIB"-35IK2J&@,^ENOHF0%70#PR7@4V
     128M3=>:LG0UJB.W:VAT0/YQ5#H623]*<VWG;XX[[)^"51$>7'+6VFBN-;L&M'#[
     129MJN%6@VH<.X8;E]>>T]4FF&NF-4?M,=PB_3(XL4<A+#A;:,UI?C#YL_5D*9BW
     130M+$R%=K=C*FP-QL"@."L8ZK"GAR[$;*HKS3EU'^"/8N2H)-O19((%$5%U?]LV
     131MUQG\F.,8E>``AB1`9Z[2=^C,K1%HWN\'\<JBN._P3%$N:M*8R]DR"WR7X\9>
     132MX?B$9ERWZSY`1^-)0RK:3MZV<M?8!1!]O-L*9QM\)?9G5_O4@^^";K.W;83Y
     133M`]FX5,&`%C2RN8`P?G*WE=7\J8K-:9B_;;;`.=2&Y<E>J&"^F=*LM_T(_I'D
     134M;!,96MF9O89O.'+1E%L.[7G/"&U`'<):/#I3EMD\_K9YK>F:=>SC;ZMW#P`B
     135M5\VT&M0F*0\;,4`?;DT>3;[L^[[<8NA=[XV#;[#42W@UY6KLL=POT"[2(P"C
     136M=H1-!ARPEPL![(<6)D.]%'DEDZ$D_TCY398R`7.#*TK6`=TPUQ!L_8J]6>!J
     137M`9@5TXSP&;30-ZS8#5^23!M_T>AT$T4K>'<*+GQC?K7@9:2Y=OZ$?KG5%%"+
     138M,GH#8420\0,V,7Y07G^LC7:%;)/P%3T$6`MD%BW$"@3UR\#3,(%EHDW<-"YZ
     139M`:R6E?SC5MNAU-[4L2=]>>Q&<PC>*!G=B\;'H&D!,/?&T"-]APN>Q>N">3)O
     140M^A976Q=`_:+G<<*@DL4L+8@QM*4<WA2\`DTC67?2@8I!$&")8>J+#C410?9`
     141M!K*TJ]&O*$V^D0I8+S@OE[LV]X)%4@:LH\?H!?T7[>\NO:8O,/$8;;<-MZ28
     142MG^'2$^.=%A\<<X`<389`.K*O\.F)BJYJUS0TLON>;\P(<*_>0S0B+"R,0!_R
     143M0F(97>[0DS872D'B0[G\)S;3=;MQV&1I8XAO3H',&*RBTFYS:D[9XOB">_,%
     144M8!W1>US5K0EI`U6G:ZL[Q.NBIU`PR\;4-0&2$$#9MD.Z1!/!FRFKE6]^%4ZN
     145MP%<3KX?(2:&[L]QH&_%BMMVV"9A(ZT7;$TP.U`%I!UW%Y0NDZT%WI@P#Y$,&
     146M\XUTEVTB!I*1>F4I`90T:5@]RQ@?`46-KNL)I^R4;>1--@*^/@6LWY@_&'B#
     147M5J=4"/NVW.ITA>4I2@R=$)R#*M:8>,_>U+VMXR?&,U>*+)XW;*KHQ2ICF93)
     148M=@P1H`>:#G(N))&ZY3[TT=WYNFG>BKDA,[)&<>>Q:$LZ=D4U<JBZ:!ZZ;NOQ
     149M'M\H@WTMN!7M--&3TM71ADF:Z&Q4(K*$=X63XK%O2KN*6NDJJ9,>8#'G-ST!
     150M565-VE2M5*>ZV"\!\&^P/78S<>NC<3370@?&)<(#=%RR![DDQV99ZD%&XE1@
     151MG(+,@H1Q1/_>CG'@RC;2BM1[3%!8`NO8QX7.LK`-12,,LPUEP1Y,"0?72`Y1
     152M$6';U>2B327``/VVD?RA@/O)(5JX.]C?6Q-]Z!#MX=6"^3<.3M8`HKO%B7GL
     153MMFCJ@$8\,")\81I6/`[1I7E*MW)DDD-4NI"CBA/Y8>$0+8JGR*1N*5H/LR7A
     154M',S?B==?G@,F&T7T#O[0\"4#S<AF4ASEC+K]MN#3P`,-,;J5[$*1U!;1^K%K
     155M1.M;QCCEN@^(J-3O/7RBO18S#.$<B*8*LQFB?Q"/:=YVI=/J<2A8J[.DF'T5
     156M19.\HH)>KC`,12PMLPTAV>@@)*",%+(7.[:%6U3FL#G*$1%(MF%=\]B&`R=6
     157M*,J!5][HE6+S)YRS9DOFH6Q%QS-:+3N@7#M9AZ6'M4]7P'3SL!A;&W>O?GRC
     158MLHGYD`FXZ8:,@&\U;1+"$&*#++'A2*K#1&R7!4"F6CP]P:+D2:U,-/A1X(:C
     159MLJHLB'"^R3S@2!,W/HLR3_&KV<,:HENNE.2QDZUH##<^]QU^O!`FL2GKL?SE
     160MJB^;7[KNFN9%8N!78-^"\;W#S(;AN3WD+A?3LC-?3P08]N3=:S(Z1:#-C2T7
     161M7<,?,$V7NK/<ZBS`GV%VRO9Q'V>=9?8-.(AV-CS;,0#@O*O-K':8FTK`+SQB
     162M9D=+[94Y-6%YPL/7W?(4XUN-8CCUUIW5\BA7/(5H[QT.NZD3!&4]2W_F4(UP
     163MHR'.OSW@1&?>=K]>6>>=-.?@R6.W++"/B\NLW)O9(&'HPR&SCFG,RZNX7JZ6
     164M`2Q_QB.P*OO,2EG>L`2+2A1#-1:5V&_A\H#N/1XG1"CN=;@>EI]"K;PB\D?2
     165MU&K9^.P1<<)%=7\=7!+Q%.*-NX5B02Y6=\4".=A,O=#X57U2S#LB'.1W.)\,
     166MFMGN+65-F5H>Y03>$*@:MHR@BV6%V7W9/'IRUPF<OT*78\]W+AE$92Z_+;9-
     167MTLHB`36<B25MN,@JO;K?ONY#K\%$MTRD8IZ7*>5MJ59P6.@BC5!53.R%?-4K
     168MS$XC+%-OAP82#5R6;S*;XW.YU:G4,_+JBK\*W4\QHU#'=48X6A9;M[O!5\'<
     169MG@V363EMACI>3`!&-N[JR?"\=SBA<75U#TFW[FQ8GT5J@N`K=A`1S;_10?8:
     170MS^JXIE!(_0>Y-@)+85G(#DCXWL4X@VTV'-\#=]!$`,P7$Z%U6#Z"8`W=B]5$
     171M;"Z:"XA5I$<>OXC,@>TK"!P5QAPL$\3AWN2G2OA`!$E6DE2^AT>E0,:XNL%Z
     172M42,(]LBZ(9&B("3F9MFD658NM9H8,]N3IL=FR(R8OEX;=A'HV@W-;\3<2AO5
     173M,+T(-TSTARQ'V%6RACH0/:--I,2(JD;_QNSH_JHP#-NE=F6%8;H[#4\CFXBJ
     174M$RC>:1P!SDN_;AH5G7&[4H&4Q30L`>8K.[AAA@',B"IX0^9M-2@OX@<7PJSD
     175M>8CTT:)0PV:3*4(H#V>VFAPR@&-4XX'(W-`NO-LU"R<'4;TM"$>!_,W*FQ%Z
     176M:E&[;%I0$39MI\%3!7I@?,5Z@B$P%@R:_BD\G\+SOR\\KI92P*(V(QKM@+>=
     177M!)$@P/1%MX#NCKR8]BO9^`-$=WKZCY8DMWGI1MQQ]MQEM\7$")R)?.NVPC?;
     178MB<R6:N*.Z`!#=+Q]1Y"W=YZ8X?MCQS;<S4Z4"\U$QMU^A09OKV+4QPLUT!UU
     179M;^R-$:!NMZ_#*>I(J@A2E*9^F[W7P6NN3&S!GY/,"'T(Q+$K\&DOM`<,NV-/
     180MUCQN_#E&\QV_ZT$HP7BZP7ZTH2,PKYIH3F))O!-<P&>\81N9#=N9PZC94^3@
     181M1E"]P?%_`N2-43(+C30RFKO]#$XT1[4-)*$>EB\NAX?BD42\-=\-]\E?TH?`
     182M'PH9DJOF=)M&[B7Y(,@[OD<\PLW7X54;C$#J-"%;'L0[_9.G=M@SB*+O&F_4
     183M08Y4`6K,VB;BYI_[CF%H2!CJT1*@F%L$.+-&"40-\/TZ'#-,^HGY(ST?9"Y]
     184M",<F:L8,G(TU1HZ!](#V.!?%:&GT9#$]GH>E!&,5&?[JC-`G;E$.YFR1OY?:
     185M-_(7\^#M$0+RL#K:=:*5C8$B.WY%K,B(!-3].D>@11PH,;N%7RK)V)JVAKA`
     186M2&G%O.\@">#L%M&5VA`O6K7[2+J-IV"BW4&IQ>7TD+5<6%;<?%T](C85*S^L
     187MY4HYL(@PLL:OZ_+[\%WZ0R((J_H@5!RE<UG?R!TC8:F2<Q&"7;'XZWDC7$X+
     188M+LK%&GZZT-BQA"HS.".82U:V^=`JF1>:M$[??D#:BIUJ!ID%EWL9J)6+I1EF
     189M%3NFFU`PSN'K/G:[[#0F;CS0:':[SV,%PFX7<0M`S\OMPP";OEU&M1$S(NB<
     190MA2M_)MO]7LZ?9-38XK_0%L>E4;C<5R+;]&D@FA'DTBTI7T;ORD'C?JBF(-CL
     191ML-Y77W8&TQ['*0@7R15;!,[L&1[Z9#1Y1Q[>#@F"M2["D8SWVZ*88-U<=H13
     192M9U_"M8`,EU&3\7['.F*9,C]@O-=U1@'6>DUA8U$D'FNN#$FV%XL@A_5)YFA,
     193M4M'U?QRJ^_)SI7H_O8/_;.]DNL/[=;OI/GNSTXD*<RF/0_5D-)!Z4T?D/ZVE
     194M":#D$9_((JD5L:^04E.NH-J`W6'W>XX:BT(/\69R&_+5W*$ZPW3O_00^`1C&
     195ML??!SK^-8@CGZE0W8N)9U!3_PR'4?_F7'_<,8[;3[Q=NO(XSF2PBBK_U$"WY
     196M:YTUIF#&)X^PQS</7.QK^Z^"80$`(THP$`L\3<5HEX`YS"$"^*DS<@HZ_4\K
     197MVJ'3S]0,RHS*QOLCO"%`,"6T8&=F2;\<Y12N"?USGO4E&(8$KP`Z`DY,\G$Q
     198M-KU61#HK.$6"878M\5`EK6LZTKEO->H[R6,U(9V"\4Y(9U1;RW*Q-=^TPT]U
     199M:#4"8>:.O4"N6G%+&O&"W1WG&-G+<`XD,"#5A5SWRX%.UQ.5%0R%O@6``07R
     200MX!P9\'H%SIE;SR03:>CA0@&4:8<XW^C\K8%RFIX@)W_N&1'_ANR1*X1.+D?W
     201M+5X4VFIVET>F!,JAVR-0#ER$,U!.&WZ>7C^OTVDC^0S)Y;Y*@!Q!DO2B``K)
     202M.HYV1!16)`\`S$P+"#1$!_0`-D"?%C2IQG!NL#)PN?<=$*?<>J`/_ER'/-B"
     203M_FP81^:G.\J9FM<.O#/NL#`$P-1U8"@\3,-8[(W.1S]51G!GB79(<FCQ1J2.
     204MU@`Z!::C_EE/.AX@S(A-JO+T&W.NXN+2@]WESY4@"YGP$1<!MIG5?&DHHY_-
     205M,,\!\3C;YCY[#G%/-[4N%[W?=I1A/>@52*<$FX](9SDS5@2@DI.A`"@<[3C;
     206MZ\Y`!\[>VY$.X^CZ9[UZ^)@!;4H]%%SH@GX%TL&"M_ORJC/P$9S.,SR1E0CX
     207M"K!3]!`&G%Z@2\"@#@YA#V@)Y#.,%%5)?=$SJPJS]U*48A^V824/RE$52#"W
     208M_:@>;VSEOA5R!TQSN;!6.B"'_6S,H"HA2G$S,2V@SMT,B,E%L]0.^:N$3W^)
     209M,7^E&$48,L0V>LPC_QR'Y(5,F!4!1F";8715\HOU!`S\2HVV0#K7T3^`--2"
     210M^C<HF]UNIU`F"7$S7,Q&E[L=Z\CT#2/(E3M1=S'E[00W<!+%"*@SKF(_`ETH
     211M,>0*]/*!.@B-70%U:E\&=:2G,V&=4L]^25I<-]N;%WH$6D'P__#JF.D41"]B
     212MG^;1)+*.+T,[R#A+Z=XR%#.:LE/C(G[<;SNW$3AX9)I</]D^C!^;N#+?6\\G
     213M901CG7P-[`WM4'?A"MGUQ"JF'0NS.,P)\(#4?`"/)1W912N7'7(VYXDZ0R@.
     214M2!IZ;I$'*NZJ0GXGEE1-'(#Z=^>?*TL*L3DX\:Y2F(YVWV^(R<.-U-4+MT@>
     215M43;#0TS#^8:<$GJ1X(43!,R$ODUF34,NW$-T)!,?VNN/:]Q3\R[(K$'BI+0@
     216M^A#E(/^`KTXWUU"Z`TQ>^-D:W(P"&G[$-Q9`W%D@U\#FF^T-1UN0G=+AB-MB
     217M5I*U4>@IA-'^AL,IV$<07,0@9QMBZK`3H*$S@:,Q_8(I?8)82)&BLPZ9IF"X
     218ML!.-:16=28$R7AMM#)+)5J4WK4WFCRQZ`\520/D&.04T0K:`'!&<9J#^/#",
     219M)CA6FO?8P&YI:_$M]ZT4HE[I3L4PMD9Z#+(_<608G8EMU[<'CBE".:@ME:FE
     220M^#(%$A+!#`$EDL[.!II0:_)&&()+4U1PG"(<AAC$!I80R$G,_"052:Q7N%-E
     221MGV8-<`;?3'%!%A9<R<A\?.S.!)>Z=1*FTE;H+A7]A?IEVT,+E22ATNG0G)O\
     222MG"X:]@W@'F-<Z1*^9+O`+^!D)/WF%N'$T3CH1,4@]HTTGL=N]/F*J0,BTAX8
     223M!MGG?I270@6B0-!)P3P--"XZ16NS%I:^YD4R72LBUMA+X)>N&$C$[."UU9$$
     224MDGV#]P\350L38%E#Z\R0@?,("X;<G(IQ%,5X4UQ-U!;[H()2+\XTDW8$S:"/
     225ME4RH1C9?X3BV0;\M<K<QT'MLN+5)#RKD!]T<@<WDU;MU9.@"6:.<[*`]-`-7
     226MU)*RN3K<TLH'PQC*RUZDE&F>\.[T'.L0D*G6(825QP?2=U^Q6D2[%N>M(4;)
     227ML`)Z*)L;A`VGGP1K3;0M?-O`"&QC5M*]!$DY;0V+5:E68#<BF^1"FM(@Z9"T
     228MM6L@^@"_.0<27O;7JD2LPH2H@@QHO*@VH0[P?3EI#2M2:8E8>/R(B4@P:7A.
     229MC*00*BN0;2!]2U;*NBU(46NE/#9UX=\"*TE]K)I,/'Z@CH0+FBG)=Z?DDYQ(
     230M234=B1-[*-ABK:">=6'Q0^.9DA3S79N9B"2`!_6F.=BF)!_81JB=5&K)-27Q
     231M_S8E"553,6GKFN1PRKI"9M9574D*NJDD"B)G6S/,I54Q4NIE:G)L#4@4&0"*
     232M%M*>P:&\IFM)D1TF5\L8D<S:J"1JIZJ%GKR]IV)@LJ<==%@<,6UZ$@>8L!L7
     233M8THF&+()N)I$*ALYN=1#BV&+.4GCI*(LQD44_*_9U0*\27>=H2OW(I6P:8YZ
     234MD5%_>\@*K*8K6^%DP%G,W8)SVN:<IBM%A3%/7F:5=%:QO=%)G!%BRI)?]CD9
     235MWIN[A>P(E^E*;!QOZ@)D:$<WI%JY@J@M\8&AII310LKMX%0TUY4(44-+[(T9
     236M?^#D"Z31DZ@(78G]F/L!)!))?K>T(&_JBE*S_*20N\F%?I(2O$Q1@KU+;2VO
     237M@.<'B)"R6]VN*<44I*($\$3X2(QHZ:%F/%9EIA:-3]V:1B]XL)*F2*8C5*7L
     238MA7Q'T">Y:17P7_?D\H.N[%?5"O0=!?1PRV3.(U2EH"P[KX"'!>#(=!F%WJLK
     239MR[9T1YW,=%Q8YU`AQ50EUCHW+?AO=!1%%\NN7TU7(G)#XG%CA!$!-YR$>YFF
     240MQ'8!58F2JMBC56YJE`3JREJ9,+FIA62/E3<<]W!-"<N#\T!!JF*DR"Q=6EPU
     241M61/49P1&(0:SWXU1TAYJ4J.H<+=0A2&6B3$:A]U;5`XHS`W;&^:;^Q759*V6
     242M(RI;!5X2L@JC?[F>1#3%R-7<=06HR2]*4?JW1B(YBCRAGQSC1:)\$0/.%"7T
     243M-D*Q2T.I-U"*/*:*-#BI-='36O[,GDCSTP&8-0Z1_.G]IX\__B1H]>M/W_Z8
     244M/BMWM_+T?/WWI^;VF\=<_N,Z?^?`R]]Y*)KK?_Y?^'$Z'*U-/]7R/\K_ST^6
     245MGVSY?#N-'3]2AE)DE^&8J/>?Q9;X$"OAB_S[]C,^37#AYB4WF]PL<A,.@4M_
     246M>]EOV\M7*:@/_?66N_WEB]P9@!7\Z;8**G_9'O7\%!7TEZ^LF]%K/K"D9,B=
     247MR7,W[$9G%[ZR$_/<;MH%UE`?\XH*4/60`GD7?C(!]R<K_L):!O&;W^W:/U;3
     248M'OZ2T^J94L+S]7EWR-W).G#:4MP:VD$?IXJPDI9TZR.&%<Z->*19']O+-\:A
     249MY'9GY5^L'CCPM)YN+52KI_F[=FN@:ST_%Q^T;@V@\_W1$+YZEQNLGAVM.I9(
     250MF=."8?UL'$L,0K&2;AWMTE'<JW)OL9>50RF5=+L]K9--.ZFU5ZN]:QT_VZ$L
     251M5M*ME^/5[Q:YNZWV^:AV9UG'FXXP/MYG)=-ZWMESO3>LSP,"H/6RUB]6PWA]
     252MMSJK/=G2[Z;U%G)8CC7<$QNKXP"LYQ4DM4N-9_&((/+=I+^/[;+Y!:^6U@RD
     253MK+"SG/"NPS[YZ+(UT_VG7[#ROE\P(Y:2R>1E-XN.+-N?G1(P6.^.)=-<'+]@
     254M_7/(]<`6E2!;1IQE'+VF=XMV39?+:]6[WK=**5Q>A]PMNGYL5343S&YK".:H
     255MW?;%5EPTNQ44ZS.7D``ZETSO=;-)ODRD?&457>DB*L-*JG5=%Q%*MI44?P$N
     256MH\<ZHNCKJU`<;2F5M+YJ2.2VDFH=MK44<N4KB>OF55_$*EJQ:MCT61>4]R2#
     257MB6[3OS\E"O+XDXHE7#/O@A*^U*]``>7]0_XN7\NWUQ\_<%O^*K15K_)>620E
     258M"'._%_SR*TO?\=.OWRI+[G?!EE_\J?N]RN^^U1^\@8\__NG']]S&G[3]W%!N
     259MY[2BO\T-E:>&M!U_YQ2WZR-VL:6G#-G65*@1()TZ]F]IQ\FSY?=+"&1]C9I\
     260M@U%5/./>V?<:?KRCH"2QL^^,LFP^;8%LFP'QL\7T6)#T@1ZM8.+U6GC7MQ/=
     261M"2%`=49!W@ME5:XH2'LA]H>X[\NX/8HVZIN);X7]T5L4V)JU-0AB3=(1)J=6
     262MN>\FOA^.UWH*\G:(>%$4I.T0ZX_W?>?P?:][P_7E>=^KUK2K?M_(TCE-Z5..
     263M-S[E^)<D.$0_JD$YIPY]3(S.XI:;KA&IB*XD0#6T3=&[(50F)[I#N(8+'>,R
     264M1?W"0RM6$JCFJ&>/%GO*R/*BN\IRM`,<GT2KFOJ><"D?P>HA*6W%?C.3E.AV
     265MLU4^DHBI[$V8U3,)6`N9V27)UPB)*5=L/Z;J,/E'MFH("U^_IY6AHM(<UI0C
     266M</@"49(K%SA\E"E)50OI81TMK0F5G94DRD4-H?2TG;B@-398DB!_KY\3RA[?
     267M'T7TG7YNU*CK*_V*@PKUR_S:OB$?5M0PM."0RZ+%'U#37:[A@/C`DTTNU"?Y
     268MWOEHE4?K>F\??++RR=ZDXL)'*QZMJ+KRZ<JGUSLKJW+9J7_W^^#S5-Q45N_]
     269M@Q44U=!U2A.%511642YIH^IF@TK01+.]P'RN^WVR"M0PW\<'G_[6M+!+`[I7
     270MX>DBM=N6-&Q#6/@Y?PU]_C[QN'?WEMKPL#3U0PPF=J/VGL:3FTQ[?QY3:08W
     271MOQO8/]G$V/!J[V-\=84_C[!5G@?9JBYYH*WN>D:;QZ]9IW2XP<MY3Z/-$]R_
     272M&VRK.XVWU5S.F!/:V9NA'H#QK7N[CCM^4-[3L"M.22./SNFFK^-0?-?_$GV_
     273M34PQ]B[T"23C4ZZV0:NV0QSJ'9#PXRA,`C<KN&U]JRZLZ?91A8_BM\T*E9L+
     274MGOJG^^7H/M.IIS#K/TSG\(9VJ&)5<K)1&&GJJ/G0=*\E%3WI.CMJ(R`$:UN/
     275MTJ]TOV:E]UAEWZFP9-4G[U;K*<SJ[_6V,_8.RCA*4&R4?J?2^J0+X5BMJ;0\
     276MJ<1[G2)3V;([/JJ/L4$1:VLA?3N5M*Q(X?^]4V%]4J?5J-A/)HN9B:E*VXL0
     277MQO:[/6G]JGMGF2L5MJRAP>_(3_H.T/5URY7*'!G!>&S+2UK:(9J]V,B%OD^H
     278M-=E:2V6.DH;9OZG(K1N<BF>W'?>XO2MFTEBIS/>>SC=[+G,<-?AB,2W9^A&3
     279M]!$%#IG<#AX//[#ZV?P9)HJIR`V@25'TWB<(-MB_5.`&$)ZH9]-,GT:^\6ED
     280M-ZS=W=0H8P'"JBVI261";<(5)B!I77KG"7V6T"%I;6PB,N*^!"_+T1\NVC@.
     281M+/2&"QL_CC=NAX2!-Q'%.LHB)'.,%GJBADC6>1DH=+'!Z06A'_1A65LM`\)R
     282MQ`\9C:X26@A>M2J.&"#(Z."OA@N$IY&5M/IK2!3>+=9^#V'"J4B*"VW6M;>Z
     283MXK72]9@<+E_H):0*7PI+J[R%2(UKQ1IWV2A>LPHLR%&."JE/S=FQPB?AVE0E
     284M;@V'EJY(IRWS%=X*O,("8-X9*Q:K8SQZ<VCI>G/J?A&_=XVY5!,7AY&N_::.
     285M9=QWQ;?.1/LJ:G8[V2OIZ]WW^/Z`FM\R]!NACQKZE:A'MV9%.XIB''H8C)D*
     286M"(H!&8,#"F$4FCB*0W'5S5]QB6[\!DF(-3H-^NI`@BA4$1Z!@F#*;^T'[Z5[
     287M"Z*CYBUXZNUWG7WJJCL-GGI;GGI[.OM]5^MW72W/76WLJH]]LAOQ]6[',_C(
     288MHC*E1`<L6RG?]"B!:CQI*9DOQQW![[!:AH`6A34)4NFP<UZE:+P<9\5='N->
     289M.Q<=?\5]F2?[E"8;D\<4+B_K+\>A@<_$EMYRT?%KX"-2U\YEV;6Q^6W#F8J3
     290M4PVJ;D6+MF6B2N9#U9I+CD_D9@K3S(79+8*7[.MZ*D_>$:J':6<?:W'ROR')
     291MP[\BP;U#PPLW/DR3WM*W585^/+%BKYI+LX-%1FCV>N?B[&;!1Z^Z'9-@Q>%M
     292MX2#-V7/++^9[I/9]U!EO:INS]DEVWU*?BK*WAD>!U;OG\NRT@6"V]?Q\\MU@
     293MH]OMZ6D')J:_Q]BI],5\K]3A)P7!,+RZG66,^W6&X?[.+\1!GOWIP>P>DD$>
     294M[8C,_9V3B%_J6[G4\4VWW6VVI[K#Q<M-0O:=F;OV8JYJ[A0(A\>SUTN.RO![
     295M)??.A=E%Q61Y.ZS`BK.C2D1YCN?B"-/H9I^FR*-LVS>EU[9'+BP^"[HUS=US
     296MOU!8?7\*.\N<4^'!ETEJ3J/7DAPBPI&>;=ZI-+O7D-@_8H+WRU.L2":H]SLW
     297MZ7YN#>\!D.=FJT^/[IO\QMDI+3X_2W=R,^F.J^U&I[9LZ&8).HXZD2J>6%-'
     298M*LOA*IRI%_*R7IY#5CQ'-!241R0=T"]YT1A!=QMO>Q-^?[SF1ZO/F@:+=DME
     299MQ2=M*VX[12A`=Z@,]_:)QO[BL1%^\WVL5)*#9C<9^"V5YL`9OEG98N`L5AH(
     300M<K_.,S@>,C53XF<]N[.FTN93N10"=3^D]QBBG,NMYG+N4_&IE.>_G:+QDJ-W
     301M4(6>:Z-E.9*'(]373(4YG(=3)CP[]H1NW8J1]><GM1YW^[87P<=:=BIK/H^;
     302M\]AR?ZK/(UY#)E)+L)5&D`F?>_%!Z_IZ`9=Q%.2>5RI="3/S<Z^EEU0\$WC&
     303M9X;:3H4!HW6R>INYM/MD;:K%IU:;SQ1?HSY\J3=]$4?B-[YDG(IV0N,WJ:`C
     304M/[D2*,?7DT-V/$!MV)R?.<KU#IN-S=F(GKIESLE@3V5565FUG@:ROWDXV\KE
     305M.P%\?`TMA-4BW8'RD?&Q^I5*IPWM?C&W\RD:/J[LD0RLE17OD=L(^&A5*G-[
     306M<.GHU/S<LL'9BGI:*G)W/5L;KCF\+3<P\.W$*-GV:IO*^CSA\016E7+F1O)M
     307MSRO,=)QX4`^@M6WCW`RL>K\J:$XH5G?41Q_T^AM\-13*$R'ZK?</_E0%J-48
     308M;M5MK"YMT0%K#2B'%(*`JH$J;R4H:LE!DSNZKB#U&[_(C(]X)VAJ,%&0#Q)F
     309M$R8-A$C2',UH`Z0.#F5.&Y(L6'!`X7IL>]GZ<KR&.+M[E)I!9@"^R@\3QR/9
     310M9XAWDZ5S'7SI,$_F&4>[J1<EX-U\.+_%<"7;QK&Z<V4P&=!-%/!]/^'(0&W(
     311M.G4O[\_9JR@3-W#@6`!(QVH+Y.%KOICG)C#:>&A^]L&&@5F`^&O+L#``6(4#
     312MZPD3!OBZP6MI,P-"1UZ;9RTD,.B@:^)S0/W%7$6!MO@5Z*!(A6PB*'N<2-D]
     313M"5G!V4,)]06,*J_SSA[M@%#\%D^+9I)C$EN5]?<Z!L1\,7_WB58&:&K.]MEN
     314M5#AH@*V2`5Q`HOI:<2+U06^!AVZ`S960FV,A&++XSOU!;0Z$Z'1;_0`VAT`]
     315M^$`[HY\@3AA4L^["[[6G>\2REQ3(_-HC`;0`-S@=)H,SQS70K_O*+GD'->O1
     316MO*:0R16CNPXF<QS37IUH,L->T&V>%.0$J@*G`)"5GA!5@!1\0+QY27:S;NJ^
     317M#*0<G7!XMQ/7PC+83P,\#/B;5O,)<9`4\`-NKI8!4D`/GB],Z7)XY+`#R]NI
     318M1Z[8=!-',]DI&&AC/!*\\;9E93G_R/&Y[=LE`YH`$/A\*0Z</FC&X0,':^4H
     319MLX.'^>K>=T?(PUY;QM"#Q`Z/=8^.2+/O1;8_^Z@["'$TL!X90<1>3R]J,)4<
     320MF:YXD>W>0H>ENCEG;IQ#P67:-A4Y#-SLV]FY9PK*S>_/$?O.F8B<OTIOWOK*
     321M*.!HZLS[,K^.;[@QRVTQY2%W&$KEO6(AZJ&N-3YH@>IA@6JI^J/3KS<8<RP7
     322M@\WS:Y>:]]!`\Y"KH@=C6Z"YRQUX^>:P0'.3&XRI>JBYR@T$)<<[ZR]R*9TO
     323M&G:.B&^]-?1LT=Y2/?+LH?1R;8L^PS/9<0B5M-C,,SDT$E_8A%SK*52U=P:H
     324M+?;[$&A^:8C:([_X9L"V,'5$?N<LTG@UIZ:.=$'K3;V:\]6F@B,F-Q;#W>M]
     325MGV`P)'^\KX\3"EY7;=)XC@3?:+JJ,Q24=6FUT1^ZG)>%$Z$B"@P9?-\?$0;&
     326M3YJT0=<P*I#J*_RE\CB\=N\XX_J+-M6KM'Y?>!B_9/'&D]_6#TF<X/W5=WN6
     327M*CIUM>#OI(M!;QN0[Z6,X6\M^RUQ^U.2:1,\;(7O(7CW^D[L4D>>I"]UHCQ)
     328M8>I!S=*86F]'+&7%CDQ%X"PFN42:P-_)96H[BV=JN3R):6JZ)G'%)W%M!)6J
     329M<%&B,T^AE_&>914Y(O??26IJ^%E@4\/%!9=\\,MFI]BBP"C4)+N/TK837TQX
     330M&:1(PDO2U1'?@DK[$5YPPU57J>P.E-<CN@1MJJ<HO^304@,I4>5F(,/%5TN;
     331MR:^KSQ2KG"VG$,S^E(+0_D6Y_#^2S/_3WR<@S/'T].33_^GKQ_DN]I>__?5?
     332MI:(_O/WMXP^_?OWK+Q]VI_[A?_R77[_^X;^]_>WM7S]^_?C;+U')8B7O7]_^
     333MZU\^_O,??OVK]L6_H_W+:7OGMM=UDA_6_9O)#__H;7XG]>$?/A)-E3__TS]-
     334MH[[:;Z8]K/Z;:0\K)4RL^9GV\)GV\)GVD(R0?R+M8:VT@O9GVL/+9]K#__&T
     335MAWT=&=SW[QHPFC10`"H>MX;[@08LU/]!9/&P0#^R#(9"`B0C\-&/HCD+^I/Z
     336M\4US`@01??U6?["*-6^"]1:K4W_%*BV/@OD-5IWG3'RK#ZO)WZ:D-ZN?"0V?
     337M"0W_9$+#;DEP^F="PV="0\C.OV5"PT[X><_?U;SM?8"`CWR$2;8\G"7]0SGX
     338M3"Q8QG.OZWU\&(&^T,ECIK`2O[:2UC7W8'XH%QZ9#&(4J]VJ^1+5#&;JUOLB
     339M3WV^KP^EN#-18<@3:G%6M%/-RJ7;R*QKW1CV!VGMFHXP/PI-2OBGNCQ$`_6Q
     340MX`HRHUC3$N1G,!P+'"QJ<J*1IM;K#SH<]DXV(BT&1"EK-B*ZS,Z@C#,F2EGS
     341M(6%^@`^)+JXT*BT-BNY?.BK*_O>!84[!&1E=8FEP\MB4,S::,1!#T]/(E#0R
     342MVJX-C>VZ,3QI=%RF$KK<^S-?X#-?X#-?X#-?X.??RQ<0G10ZHUSW9[[`9[[`
     343M__?Y`N4J:4W4W[>0YRW[/W9[Z5XK9;WKWHUSD@IM8407$#X9`E>,40_PH_1[
     344M?1S[.^%)[5U@%OCT#PMT?"CMWFLKRM&7WXWW^0V^T`[L\!6PA!WY0`OM!^V1
     345MP27MD0`+ZXW!)>N-92]XCUY/;PB6M#?1$]9BO5!T@FXH,F$_7J,//H`M#6;_
     346M)/U_DOY?/DG_GZ3_7/A)^H_23]+_)^G_D_3_2?K_)/W__/\<Z;]<(T'A^4GZ
     347M_R3]?Y+^/TG_GZ3_3]+_)^D_0,C_C:3_<JVT<^_?]0BJXP[ARH&0YU1>M#+X
     348M&:\<WUZ+AF\1I=U#(Y6=-!E0_S5:.>"9(Q]^>YBVWAJM;+A8'L'M=!9J'D$U
     349M+C>Y[0A7,B9)$CT#EHA(@JBO\4H&)>>P:&6''X^]U)#E^-:,T7XK)5@)\HA?
     350M,DZI1'P-85:&=[=%,1OBN\W"F!T_Y9!\=&.,*]/=8IJDR-_7A\8T2;EGO).<
     351M967V:\03;.E=+.@)8K9F#R@/W-CR]\>7;U-)]AM>RF_8?,"Q5\JS9@5TJ0$4
     352M:XU[=V5S:Y^N#U"AI0,5E.8F+3>2H]T9BXE8&HL>W`UL>AG`U:DE']TG]UYY
     353M<O/,DCIN,_O*@?6IQ3A+7_+DGIDU[K=/[2L9YS&UY+JGR:WUS.UK/_/Z2JZW
     354MS:N1QV->25F/:<6W!>\SKPCS]#2S9U*5X&VS2NZX3ZI2T6-2R8!/<RK[_4JS
     355M6L^D*F/69O65_'.;U5>ZK'U>'Q3WF-9Z9M4ZQ6E5OKI.+>DY,;LQL;;`[^O/
     356<I&#_\NO;K__]EQ_O/_Z'?_?#_P3'2XZ&ZM``````
    356357`
    357358end
  • Tst/Long/gcdp_l.stat

    rd826a8 r71a4d7  
    1 1 >> tst_memory_0 :: 1354909874:3150:3-1-5:ix86-Linux:mamawutz:340616
    2 1 >> tst_memory_1 :: 1354909874:3150:3-1-5:ix86-Linux:mamawutz:2369600
    3 1 >> tst_memory_2 :: 1354909874:3150:3-1-5:ix86-Linux:mamawutz:2402384
    4 1 >> tst_timer_1 :: 1354909874:3150:3-1-5:ix86-Linux:mamawutz:110
     11 >> tst_memory_0 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:307644
     21 >> tst_memory_1 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:2345020
     31 >> tst_memory_2 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:2385992
     41 >> tst_timer_1 :: 1360590534:3160:3-1-6:ix86-Linux:mamawutz:124
  • Tst/Short/gcdp_s.res.gz.uu

    rd826a8 r71a4d7  
    11begin 644 gcdp_s.res.gz
    2 M'XL("*8PPE```V=C9'!?<RYR97,`W5I;;QLW%G[WKR""!2J--#+OEP86T$6!
    3 M18'=18%V7]-,I)$UL"P9TCA1N^A_[^%E2(Y&<A0G#XN%$8E#'AZ>&S]^0^67
    4 M7W_\Z=\((3)'M[<WOX0G.H,G=+]8/OUVF+6'%I7HL-[M6]36A_:`5KN]'42+
    5 M:K-XWE1ML]L>T.-NB9YF406;Y0JY4_C#9H.>M\W':M]4;8VVNVW9[IN/3;5!
    6 M];%Z?-K4![38/=9HM=\]VA7^`\(_SU;U,2H23I%?WXW^L'E:5U8D+2U[2RLW
    7 MX]=UW:V!FBUR)GRPZ[VOOINB]PO[4</';#8#MSH3WC]OVZ;=U$LZDK=/MV3\
    8 M752KG5I0=6B7_WK>M&#*/Q;+6;--=IC<#H*]'3OTX^[[V$EZ(C[L._3H](4H
    9 M#0+]J6G7Z*G:@Y5MO3_$V;V($XAX;$/0_OG3W]$;R.1LTWQX\S:.R#F"SM^:
    10 M;=..QF]O[#>:S[O,;^M/LT-;M5%<S9-2W5O.^0IELGK>+IR9,0P4YX*4)+LH
    11 M[8TX^]&A@1PUJ]\AF*,Q*'S:-]O6!:$"UVNH(/C>[O:/U:;YHU[:D;04[RD$
    12 MMY_VNT6N$HW0TV[S.UI-_?<]&D=Q*)O_Q@>H&N1%EG>PQ,C.`.$8.6JLP#(^
    13 M,V*?NY5&:#E%)!-GX-R?\8&G,#*1F\QD"",X?8_VY(Y1C-GT.%VFG<54;X9.
    14 M\61@D\OF/<2G'J$W0RUOWUBC8(DD]_V9Q:+=',]?'";)$P[9]+&]*XT0O#B^
    15 MXR6AV@AHL9)@3!FT:"DI@4;2P>8A%ZDK"Q#W._Y@8>$4+*(,A,TF"4\1!O=P
    16 M[%?SKI\1RF#(?L51[4<Y$\Q/M*TX:N:]6HRZHW:!!Q)A%0)_G1#I"Z7%<B&:
    17 M_!50*2=:5R!M(WKD$Q?/(YNX:![IQ,;R>'/D)3VRTD`'CU`I>'_EE5_V%8I$
    18 M9IWL6T>MQ]["W!\U6)J<"8W.])J494CLX6*J):#)%Q:8A!3<QRFL9(P3*S<Y
    19 ME:,#J^_!XB,M(1;^LY-DR7+)G4&$4&GMD!!9(JU^`;%ET@0K?1^;:"/MVFE1
    20 M88TC6#I)#5Y(9;U0$Z]-6TVV5]OYD#>0=/Y.5%^//&\\6"$QQI!8R*MOT@N]
    21 MG:8,Y*5VSBE#K!VF))QCZ>Q45$AG)L6&6DM+2DPPE@H6W.:2.;=+103NVVM<
    22 M4@C7S+I+0`03*TOHA`B(EVT2<%Q+FS6"(:Z&,V>%T<H.:QM@EU,%>IAR\9(2
    23 M\Q`R9GR),!J,,(QK5R#>YFB+PN=C=Q,3KC*<4[U32[$>8M.[D8?):NR1$CTV
    24 M6XMN=Q4D3RO&BPIR5T'U$:*)*JH)B<BN>L>7$@G9E3R+[(/5+J/[0#2J5O//
    25 MBL!&_;P;2=RD8&G\ND-!D\&AH#.0U#[JJV9_:*<>-78KU`+'VY,!9&@^0-03
    26 M)-?B"B37\@HDU]GFT?HBDA<=`A<=!!?'#H\<"!<6A6T?B$9]YB*@OTJ?P<E6
    27 M0Z[!=3-$R#.X;C)T-/Q*7#?BBW'=R.MPW0Q/HP[7BV/WU<EF9Y(Q7X/L8/8W
    28 M07:"R8O(7F0@7F38?MK?:4N[")QPR=GN/DW3^U>S_;C;?+2`8+=3M;FO/^RK
    29 M9A'?F.)D=^Z-*"%<63`(<4E/@!.$4WB@[H$J":A=^;:![&8M/X&-D\_N5!Q)
    30 M(CMM$'W!9-`F)P+6=<I"OVLHX7')F<*5#M(B3/5-@[5P+<`Z%DV%%$=Y2(7"
    31 M@G:V2J5P:$$E=K9.*)R$G7>PYXR79Q/)M#QQYOS1/(*S3<B*C0M(V:ATH:M8
    32 M:8-6P3YEC%80-,+'=G./;,O),IOA4<4<"E>TU)#?RJ.PDX1G8J6ZQ566;^U3
    33 M1F%G><,)F0AMNAC#(:MD',*PNB(ZC!F++RR,F0EE*GAL)L*3@PFEF,H@#F<S
    34 M'/Y=1.%):IL;UZ9<*>U;FDL<9BA;+CA,`%JA<<B9@LG$2X"31J:"8%3Q6!%`
    35 M-72H"$:(._KMCJ589M7)N(E%P;!1)E2%EL1U9DES_&2D76*[Z``DJ10>(X6)
    36 MT:%:*AK#PX5@(3I@@O;Q$:`LA@>J+P6',XU#<`!/'(&Q+1SW$KAN-&4Q.E)3
    37 M'H(#A2)\Q`Q3*3@4Z!B.P;$@;4)T*)7<<:7D+#E/@$:00LYLJ4%Y04T"?LD*
    38 M?%.V)A74K*)0L-9.&"TYA8HMM=081J6M:(@PU"SL50S#A@I3E<96^XV=;(&)
    39 M5%X4L!+:U(UU)B7&14C.N`CI,R[6L99VW'M/)H3W9B4V1<AY-G6JZ04V-1"-
    40 MJB.;NBRB,\],I$>C:\Z^E#**3PD25$Y2[*]6/D.0T.BP:>[7+6AYW"V;55,O
    41 MQU'!\#6T3YH(Y6=)4]'VV`"\#'R>-L$)FYFNAK3IUBKUR,;=\68ASD*?XSD7
    42 M*0X$\IM2)G@%278R?(8RW;:GI`D(TA6D";`LT\RN(TV$\2\E382)JT@381?>
    43 M)\^0)L*R,X;Y>]%/-;K?H=W67U9VU15)!-I6CYD;Y^^MX@ZJIHMI/9Z"#>OI
    44 MP_C*G3F<U"UG[[0>FLT&A%,?&>S;%Q1DN>*LV\$_PV<2X=WV['>+;":@D)MT
    45 MY[&P6`!8K^#?`V0M]!1UL8)G-EG`""O6Q4-9.YFUE4IHX"ZZO*X%R-E9:\@0
    46 MS+<ZBW5/]G1/V'E3/QVD5O#726;5+G"T=O&..QM%8==:65M@CUCK:V]7>')V
    47 MOJ/>#F]%\9#LL#=CP>;2*[)3O1KK,DU*P&W:*>D[+D[?2/K.9!M,L,P9'ITI
    48 MM0\]#Z&6D]@1(OZ.=UW,A?/!4I78$;,A)ET6P168[;RUS##F-N3"+E)FO7X=
    49 M)\TSQT2,3B>K0GQA=PMC-/3(%%>(LX(>T5D$.A]*[1T+-<!B;GA<%7P+CK$@
    50 M89EM]-6KXC;^(<,^XZ$"B$R..04V"*[J6)@J>AD_Q923REL'5K`8%P\G3YV&
    51 M#&E$_@,$$:;'"GBXK1ZUT^,X9P4R_S4"B.7ICT,'_\//GJ-J7\.!N3N$GX+V
    52 M[,(/+T3ZLW:QKK;W@''MSML0?V)*:[/>VND7&B+%600\]>(%W!N(1M5R_EF1
    53 M+*KVQN]UC,3>Z)TP$I5N&(@B7\E([+W;RXQ$L<N,I+UIHQB_@I&H#*F5_#97
    54 M\D0-;R)>=25/5,8AE3G#0XHA#]%#DG^&A^B,1&IZ)0^QUW%?R$,TOXZ'G%[-
    55 MM<7%:WFB,Q:IU9?S$'MA]](N=(Q@>@T+N3@E+F4Z#L)CG\&#G7IINLFR9.A9
    56 M!F+8609B>#93?#L&XB[CKF0@@PNYBPPDNXXC[CKN6S(0ZF[HOI*!T,'U7-^9
    57 MDB]N%E$V$4=J+]_^MSD(O-?_WW$0BL6+Z5H`[?"L@S[T'[KYX7],V/\6\7P8
    58 /D?';O]W\!2VBLVQ$(P``
     2M'XL("++V&%$``V=C9'!?<RYR97,`W5I;C^.V%7Z?7R$L"L26+0_OERQF@!0!
     3MB@!M$2#IZV857\;">.R!K=EU4O2_]QR2(BG+GO5>'HIBL#9%'AZ>&S]^HO>7
     4M7W_\Z9]%4=#[XO;VYI?PQ&;P5#S,%\^_'6;MH2VJXK#>[=NB71[:0[':[7&P
     5MF->;^<NF;IO=]E`\[1;%\RRJX+-<H7`*?]ALBI=M\Z'>-W6[++:[;=7NFP]-
     6MO2F6Q_KI>;,\%//=T[)8[7=/N,*_0/CGV6IYC(JD4^37=Z,_;)[7-8JDI55O
     7M:>UF_+I>=FL4S;9P)OR.Z[VOOYL6[^?XL82/V6P&;G4FO'_9MDV[62[82-T^
     8MW]+Q=U&M<6I!U:%=_.-ETX(I?YLO9LTVV6%S.RCQ=NR*'W??QT[:$_%AWQ5/
     9M3E^(TB#0'YMV73S7>["R7>X/<78OXA0B'ML0M+__]-?B#61RMFE^?_,VCJC[
     10M`CI_:[9-.QJ_O<'OXOZ^R_QV^7%V:.LVBNO[I-3TEG.^0IFL7K9S9V8,`R.Y
     11M(*/)+L9Z(\[^XM!`CIK5'Q#,T1@4/N^;;>N"4(/K2Z@@^-[N]D_UIOESN<"1
     12MM)3H*02WG_>[>:ZR&!7/N\T?Q6KJOQ^*<12'LOEW?("J*;S(X@Z6&.$,$(Z1
     13M8Q8%%O&94WSN5AH5BVE!,W$.SOTG/H@41BYSD[D*802G'XH]O>.,$#X]3A=I
     14M9W'=FV%2/#G8Y++Y`/%9CHHW0RUOWZ!1L$22^_[,8M%N0>Y?':;)$P'9]+&]
     15MJZR4HCR^$Q5EQDIH\8H2PCBT6*48A4;2P>]#+E)7%B#A=_P!8>$4+*(,A`V3
     16M1*8%`?=([-?W73^GC,,0?L51XT<%E]Q/Q%8<M?>]6HRZHW9)!A)A%0I_G1#M
     17M"Z7%<B&6_)50*2=:5R"-$3V*B8OGD4]<-(]L@K$\WAQ%Q8Z\LM`A(E1*T5]Y
     18MY9?]`D4RLT[UK6/HL;<P]T</EJ9G0F,RO39E&1)[N)AJ!6CRF06F(`4/<0JO
     19M.!<4Y2:G<FQ@]0-8?&05Q,)_=I(\6:Z$,XA2IM`.!9&E"O5+B"U7-ECI^_C$
     20M6(5KIT4E&D>)<I(&O%`:O=`3K\V@)NPU.!_R!I+.WXGNZU'GC0<K%"$$$@MY
     21M]4UVH;?3E(&\,LXY;2G:82LJ!%'.3LVD<F8R8AE:6C%J@[%,\N"V4-RY76DJ
     22M2=]>ZY)"A>'H+@410E&6L@F5$"]L4G#<*,P:)1!7*[BSPAJ-PP8#['*J00_7
     23M+EY*$1%"QJTO$<Z"$98+XPK$VQQMT>1\[&YBPG6&<[IW:FG>0VQV-_(P68\]
     24M4A9/S1;1[:Z&Y!G-15E#[FJH/DH-U64]H1'9=>_XTC(ANU9GD7VPVF5T'XA&
     25MU?K^DR*P43_M1A*W*5B&?-FA8.C@4#`92!H?]56S/[13CQJ[5=$"Q]O3`608
     26M,4#4$R0W\@HD-^H*)#?9YC'F(I*7'0*7'027QPZ/'`B7B,+8!Z)1G[T(Z%^D
     27MSY)DJZ77X+H=(N097+<9.EIQ):Y;^=FX;M5UN&Z'IU&'Z^6Q^^IDLS/)VJ]!
     28M=C#[FR`[)?159"\S$"\S;#_M[[2E701.N.1L=Q^GZ?VKV7[8;3X@(.!VJC</
     29MR]_W=3./;TQQLCOW1HQ2H1$,0ES2$^`$%0P>F'M@6@%JU[YM(;M9RT_@X^2S
     30M.Q5'BJI.&T1?<A6TJ8F$=9VRT.\:6GI<<J8(;8*T#%-]TQ(C70NPCD=3(<51
     31M'E*AB62=K4IK$EI0B9VM$P8G8><=[#GKY?E$<:-.G#E_-(_@;).JYN,24C:J
     32M7.AJ7F'0:MBGG+,:@D;%&#?W"%M.EF.&1S5W*%RSRD!^:X_"3A*>*4IUB^LL
     33MW\:GC,'.\H93.I'&=C&&0U:K.$1@=4U-&+.(+SR,V0GC.GAL)]*3@PECA*D@
     34M#F<S'/Y=1.%)&<R-:S.AM?$M(Q0),S26"PD3@%88$G*F83+U$N"D5:D@.-,B
     35M5@10#1,J@E/JCG[<L8RHK#JYL+$H.+':AJHPBKK.+&F.GXR,2VP7'8`DG<)C
     36ME;0Q.LPHS6)XA)0\1`=,,#X^$I3%\$#UI>`(;D@(#N")(S#8(G$O@>O6,!ZC
     37MHPP3(3A0*-)'S'*=@L.`CI$8'`1I&Z+#F!*.*R5GZ7D"-((4"HZE!N4%-0GX
     38MI6KP36--:JA9S:!@T4X8K02#BJV,,@1&%58T1!AJ%O8J@6'+I*TKB]5^@Y,1
     39MF&CM10$KH<W<6&=28ER4YHR+TC[CXAUK:<>]]V1*16]68E.4GF=3IYI>85,#
     40MT:@ZLJG+(B;SS$9Z-+KF[$LI8^24($'E),7^:N43!*D8'3;-P[H%+4^[1;-J
     41MEHMQ5#!\#>V3)LK$6=)4MCTV`"\#GZ9-<,)FINLA;;I%I1[9A#O>$.(0^AS/
     42MN4AQ()#?E#+!*TBRDY,SE.FV/25-0)"N($V`99EF?AUIHEQ\+FFB7%Y%FBB_
     43M\#YYAC11GITQW-^+?EP6#[MBM_67E5UU11)1;.NGS(WS]U9Q!]73^70YGH(-
     44MZ^GC^,J=.9S4+8=W6H_-9@/"J8\.]NTK"K)<"=[MX)_A,XF(;GOVNV4V$U#(
     45M3;KS6%C.`:Q7\.\1LA9ZRF6Y@F<^F<,(+]?E8[5T,FN42FC@+KJ\KCG(X:PU
     46M9`CFH\YRW9,]W1,X;^JG@]0*_CK)K-HEB=;.WPEGHRQQK17:`GL$K5]ZN\*3
     47ML_,=\W9X*\K'9`?>C`6;*Z\(IWHUZ#)+2L!MUBGI.RY/WTCZSF0;3/+,&1&=
     48MJ8P/O0BA5I/8$2+^3G1=W(7S$:E*[(C9D),NB^`*S';>(C.,N0VYP$6JK->O
     49MXZ1%YIB,T>ED=8@O[&YIK8$>E>(*<=;0(SN+0.=C9;QCH09XS(V(JX)OP3$>
     50M))#91E^]*H'Q#QGV&0\50%5RS"G`(+BJXV&J[&7\%%/ZR8(<K]:3T7Q</MY@
     51MP_GMGKKY&<[(_.<'*FV/$XAP5SUJI\=QS@E4_EL$T,K3GX8._F>?O2CJ_1*.
     52MR]TA_!"TYQ=^=J'*G[3S=;U]`(1K=]Z&^`-36IOWUDZ_SU`ES^+?J1>OH-Y`
     53M-*I6]Y\4R:**]WU?QD?P/N^$C^ATOT`U_4H^@K=NK_,1S2_SD?:FC6+B"CZB
     54M,YS6ZMM<R%,]O(?XH@MYJC,&J>T9%E(.68@94OPS+,1D%-*P*UD(7L9])@LQ
     55MXCH6<GHQUY87+^6IR3BDT9_/0O"Z[K5=Z/C`]!H.<G%*7,IV#$3$/DL&._72
     56M=)MER;*S_,/RL_S#BFRF_';\PUW%7<D_!M=Q%_E'=AE'W67<M^0?S-W/?27_
     57M8(/+N;XS<_CK)!-I9'CQ]K_-/^"=_O^.?S`B7^<?[@9VOEJ[AIVSQQMX\`'$
     58;ATY+^#\3^!\C7@XC.G[[EYO_`NRSL1)&(P``
    5959`
    6060end
  • Tst/Short/gcdp_s.stat

    rd826a8 r71a4d7  
    1 1 >> tst_memory_0 :: 1354903718:3150:3-1-5:ix86-Linux:mamawutz:316920
    2 1 >> tst_memory_1 :: 1354903718:3150:3-1-5:ix86-Linux:mamawutz:2369600
    3 1 >> tst_memory_2 :: 1354903718:3150:3-1-5:ix86-Linux:mamawutz:2402384
    4 1 >> tst_timer_1 :: 1354903718:3150:3-1-5:ix86-Linux:mamawutz:6
     11 >> tst_memory_0 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:283948
     21 >> tst_memory_1 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:2345020
     31 >> tst_memory_2 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:2385992
     41 >> tst_timer_1 :: 1360590513:3160:3-1-6:ix86-Linux:mamawutz:6
  • factory/cf_gcd.cc

    rd826a8 r71a4d7  
    607607gcd_poly_p( const CanonicalForm & f, const CanonicalForm & g )
    608608{
     609    if (f.inCoeffDomain() || g.inCoeffDomain()) //zero case should be caught by gcd
     610      return 1;
    609611    CanonicalForm pi, pi1;
    610612    CanonicalForm C, Ci, Ci1, Hi, bi, pi2;
    611     bool bpure;
     613    bool bpure, ezgcdon= isOn (SW_USE_EZGCD_P);
    612614    int delta = degree( f ) - degree( g );
    613615
     
    620622        pi = g; pi1 = f; delta = -delta;
    621623    }
    622     Ci = content( pi ); Ci1 = content( pi1 );
    623     pi1 = pi1 / Ci1; pi = pi / Ci;
     624    if (pi.isUnivariate())
     625      Ci= 1;
     626    else
     627    {
     628      if (!ezgcdon)
     629        On (SW_USE_EZGCD_P);
     630      Ci = content( pi );
     631      if (!ezgcdon)
     632        Off (SW_USE_EZGCD_P);
     633      pi = pi / Ci;
     634    }
     635    if (pi1.isUnivariate())
     636      Ci1= 1;
     637    else
     638    {
     639      if (!ezgcdon)
     640        On (SW_USE_EZGCD_P);
     641      Ci1 = content( pi1 );
     642      if (!ezgcdon)
     643        Off (SW_USE_EZGCD_P);
     644      pi1 = pi1 / Ci1;
     645    }
    624646    C = gcd( Ci, Ci1 );
    625647    int d= 0;
     
    683705        pi = pi1; pi1 = pi2;
    684706        maxNumVars= tmax (getNumVars (pi), getNumVars (pi1));
    685         if (!(pi1.isUnivariate()) && (size (pi1)/maxNumVars > 500))
     707        if (!pi1.isUnivariate() && (size (pi1)/maxNumVars > 500))
    686708        {
    687709            On (SW_USE_FF_MOD_GCD);
     
    701723            if (!(pi.isUnivariate() && pi1.isUnivariate()))
    702724            {
    703               if (size (Hi)*size (pi)/(maxNumVars*3) > 500) //maybe this needs more tuning
     725              if (size (Hi)*size (pi)/(maxNumVars*3) > 1500) //maybe this needs more tuning
    704726              {
    705727                On (SW_USE_FF_MOD_GCD);
     
    717739      return C;
    718740    }
    719     pi /= content( pi );
     741    if (!pi.isUnivariate())
     742    {
     743      if (!ezgcdon)
     744        On (SW_USE_EZGCD_P);
     745      Ci= gcd (LC (oldPi,v), LC (oldPi1,v));
     746      pi /= LC (pi,v)/Ci;
     747      Ci= content (pi);
     748      pi /= Ci;
     749      if (!ezgcdon)
     750        Off (SW_USE_EZGCD_P);
     751    }
    720752    if ( bpure )
    721753        pi /= pi.lc();
  • factory/cf_gcd_smallp.cc

    rd826a8 r71a4d7  
    3333#include "cfNewtonPolygon.h"
    3434#include "cf_algorithm.h"
     35#include "cf_primes.h"
    3536
    3637// iinline helper functions:
     
    820821        cH= uni_content (H);
    821822      ppH= H/cH;
     823      ppH /= Lc (ppH);
    822824      CanonicalForm lcppH= gcdlcAlcB/cH;
    823       CanonicalForm ccoF= lcA/lcppH;
    824       ccoF /= Lc (ccoF);
    825       CanonicalForm ccoG= lcB/lcppH;
    826       ccoG /= Lc (ccoG);
     825      CanonicalForm ccoF= lcppH/Lc (lcppH);
     826      CanonicalForm ccoG= lcppH/Lc (lcppH);
    827827      ppCoF= coF/ccoF;
    828828      ppCoG= coG/ccoG;
     
    836836          CFList u, v;
    837837          DEBOUTLN (cerr, "ppH before mapDown= " << ppH);
    838           ppH /= Lc(ppH);
    839838          ppH= mapDown (ppH, prim_elem, im_prim_elem, alpha, u, v);
    840839          ppCoF= mapDown (ppCoF, prim_elem, im_prim_elem, alpha, u, v);
    841           ppCoF= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v);
     840          ppCoG= mapDown (ppCoG, prim_elem, im_prim_elem, alpha, u, v);
    842841          DEBOUTLN (cerr, "ppH after mapDown= " << ppH);
    843842          if (compressConvexDense)
     
    12141213    {
    12151214      if (inextension)
     1215      {
     1216        ppA= GFMapDown (ppA, k);
     1217        ppB= GFMapDown (ppB, k);
    12161218        setCharacteristic (p, k, gf_name_buf);
     1219      }
    12171220      coF= N (ppA*(cA/gcdcAcB));
    12181221      coG= N (ppB*(cB/gcdcAcB));
     
    12671270        cH= uni_content (H);
    12681271      ppH= H/cH;
     1272      ppH /= Lc (ppH);
    12691273      CanonicalForm lcppH= gcdlcAlcB/cH;
    1270       CanonicalForm ccoF= lcA/lcppH;
    1271       ccoF /= Lc (ccoF);
    1272       CanonicalForm ccoG= lcB/lcppH;
    1273       ccoG /= Lc (ccoG);
     1274      CanonicalForm ccoF= lcppH/Lc (lcppH);
     1275      CanonicalForm ccoG= lcppH/Lc (lcppH);
    12741276      ppCoF= coF/ccoF;
    12751277      ppCoG= coG/ccoG;
     
    16241626      G_random_element=
    16251627      GCD_Fp_extension (ppA (random_element, x), ppB (random_element, x),
    1626                         coF_random_element, coG_random_element, alpha,
     1628                        coF_random_element, coG_random_element, V_buf,
    16271629                        list, topLevel);
    16281630      TIMING_END_AND_PRINT (gcd_recursion,
     
    39053907      l.append (random_element);
    39063908
    3907     if ((getCharacteristic() > 3 && size (skeleton) < 100))
     3909    if ((getCharacteristic() > 3 && size (skeleton) < 200))
    39083910    {
    39093911      CFArray Monoms;
     
    41204122      } while (1); //end of second do
    41214123    }
     4124    else
     4125      return N(gcdcAcB*GCD_small_p (ppA, ppB));
    41224126  } while (1); //end of first do
    41234127}
     
    43814385
    43824386  CFList evaluation;
     4387  long termEstimate= size (U);
    43834388  for (int i= A.min(); i <= A.max(); i++)
     4389  {
     4390    if (!A[i].isZero() && (getCharacteristic() > degree (U,i))) //TODO find a good estimate for getCharacteristic() <= degree (U,i)
     4391    {
     4392      termEstimate *= degree (U,i)*2;
     4393      termEstimate /= 3;
     4394    }
    43844395    evaluation.append (A [i]);
     4396  }
     4397  if (termEstimate/getNumVars(U) > 500)
     4398    return -1;
    43854399  CFList UEval;
    43864400  CanonicalForm shiftedU= myShift2Zero (U, UEval, evaluation);
     
    45484562    if( F.mvar() == G.mvar() )
    45494563      d *= gcd( F, G );
     4564    else
     4565      return N (d);
    45504566    return N (d);
     4567  }
     4568  if ( F.isUnivariate())
     4569  {
     4570    g= content (G,G.mvar());
     4571    return N(d*gcd(F,g));
     4572  }
     4573  if ( G.isUnivariate())
     4574  {
     4575    f= content (F,F.mvar());
     4576    return N(d*gcd(G,f));
    45514577  }
    45524578
     
    49344960        }
    49354961        else
    4936           return N (d*GCD_small_p (F,G));
     4962        {
     4963          if (p >= cf_getBigPrime(0))
     4964            return N (d*sparseGCDFp (F,G));
     4965          else
     4966            return N (d*GCD_small_p (F,G));
     4967        }
    49374968      }
    49384969
  • factory/facFactorize.cc

    rd826a8 r71a4d7  
    413413
    414414  if (w.level() != 1)
    415   {
    416     A= swapvar (A, y, w);
    417     int i= A.level();
    418     CanonicalForm evalPoint;
    419     for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--)
    420     {
    421       if (i == w.level())
    422       {
    423         evalPoint= iter.getItem();
    424         iter.getItem()= evaluation.getLast();
    425         evaluation.removeLast();
    426         evaluation.append (evalPoint);
    427         break;
    428       }
    429     }
    430     for (i= 0; i < lengthAeval2; i++)
    431     {
    432       if (oldAeval[i].isEmpty())
    433         continue;
    434       if (oldAeval[i].getFirst().level() == w.level())
    435       {
    436         CFArray tmp= copy (oldAeval[i]);
    437         oldAeval[i]= biFactors;
    438         for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++)
    439           iter.getItem()= swapvar (iter.getItem(), w, y);
    440         for (int ii= 0; ii < tmp.size(); ii++)
    441           tmp[ii]= swapvar (tmp[ii], w, y);
    442         CFArray tmp2= CFArray (tmp.size());
    443         CanonicalForm buf;
    444         for (int ii= 0; ii < tmp.size(); ii++)
    445         {
    446           buf= tmp[ii] (evaluation.getLast(),y);
    447           buf /= Lc (buf);
    448           tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
    449         }
    450         biFactors= CFList();
    451         for (int j= 0; j < tmp2.size(); j++)
    452           biFactors.append (tmp2[j]);
    453       }
    454     }
    455   }
    456 
    457   CFListIterator iter;
     415    changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2,
     416                          uniFactors, w);
     417
    458418  CanonicalForm oldA= A;
    459419  CFList oldBiFactors= biFactors;
    460   if (!leadingCoeffs.getFirst().inCoeffDomain())
    461   {
    462     CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);
    463     A *= tmp;
    464     tmp= leadingCoeffs.getFirst();
    465     iter= evaluation;
    466     for (int i= A.level(); i > 2; i--, iter++)
    467       tmp= tmp (iter.getItem(), i);
    468     if (!tmp.inCoeffDomain())
    469     {
    470       for (CFListIterator i= biFactors; i.hasItem(); i++)
    471       {
    472         i.getItem() *= tmp/LC (i.getItem(), 1);
    473         i.getItem() /= Lc (i.getItem());
    474       }
    475     }
    476   }
    477420
    478421  CanonicalForm LCmultiplier= leadingCoeffs.getFirst();
     
    480423  leadingCoeffs.removeFirst();
    481424
     425  if (!LCmultiplierIsConst)
     426    distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier);
     427
    482428  //prepare leading coefficients
    483429  CFList* leadingCoeffs2= new CFList [lengthAeval2];
    484   prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors,
    485                         evaluation);
    486 
    487 
    488   Aeval= evaluateAtEval (A, evaluation, 2);
    489 
    490   CanonicalForm hh= 1/Lc (Aeval.getFirst());
    491 
    492   for (iter= Aeval; iter.hasItem(); iter++)
    493     iter.getItem() *= hh;
    494 
    495   A *= hh;
    496 
    497   CFListIterator iter2;
     430  prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), leadingCoeffs,
     431                        biFactors, evaluation);
     432
     433  CFListIterator iter;
    498434  CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1];
    499435  bufBiFactors= biFactors;
    500436  bufA= A;
    501   CanonicalForm bufLCmultiplier= LCmultiplier;
    502   CanonicalForm testVars;
     437  CanonicalForm testVars, bufLCmultiplier= LCmultiplier;
    503438  if (!LCmultiplierIsConst)
    504439  {
     
    571506      LCheuristic= true;
    572507      factors= oldFactors;
    573       CanonicalForm cont;
    574508      CFList contents, LCs;
    575       int index=1;
    576509      bool foundTrueMultiplier= false;
    577       for (iter= factors; iter.hasItem(); iter++, index++)
    578       {
    579         cont= content (iter.getItem(), 1);
    580         cont= gcd (cont , LCmultiplier);
    581         contents.append (cont);
    582         if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there
    583         {
    584           foundTrueMultiplier= true;
    585           int index2= 1;
    586           for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++,
    587                                                                     index2++)
    588           {
    589             if (index2 == index)
    590               continue;
    591             iter2.getItem() /= LCmultiplier;
    592           }
     510      LCHeuristic2 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1],
     511                    contents, LCs, foundTrueMultiplier);
     512      if (foundTrueMultiplier)
     513      {
    593514          A= oldA;
    594515          leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
    595516          for (int i= lengthAeval2-1; i > -1; i--)
    596517            leadingCoeffs2[i]= CFList();
    597           prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs,
    598                                 biFactors, evaluation );
    599           Aeval= evaluateAtEval (A, evaluation, 2);
    600 
    601           hh= 1/Lc (Aeval.getFirst());
    602 
    603           for (iter2= Aeval; iter2.hasItem(); iter2++)
    604             iter2.getItem() *= hh;
    605 
    606           A *= hh;
    607           break;
    608         }
    609         else
    610           LCs.append (LC (iter.getItem()/cont, 1));
    611       }
    612       if (!foundTrueMultiplier)
    613       {
    614         index= 1;
    615         iter2= factors;
     518          prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),
     519                                leadingCoeffs, biFactors, evaluation);
     520      }
     521      else
     522      {
    616523        bool foundMultiplier= false;
    617         for (iter= contents; iter.hasItem(); iter++, iter2++, index++)
    618         {
    619           if (fdivides (iter.getItem(), LCmultiplier))
    620           {
    621             if ((LCmultiplier/iter.getItem()).inCoeffDomain() &&
    622                 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff
    623             {
    624               Variable xx= Variable (2);
    625               CanonicalForm vars;
    626               vars= power (xx, degree (LC (getItem(oldBiFactors, index),1),
    627                                         xx));
    628               for (int i= 0; i < lengthAeval2; i++)
    629               {
    630                 if (oldAeval[i].isEmpty())
    631                   continue;
    632                 xx= oldAeval[i].getFirst().mvar();
    633                 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1),
    634                                            xx));
    635               }
    636               if (vars.level() <= 2)
    637               {
    638                 int index2= 1;
    639                 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1];
    640                      iter3.hasItem(); iter3++, index2++)
    641                 {
    642                   if (index2 == index)
    643                   {
    644                     iter3.getItem() /= LCmultiplier;
    645                     break;
    646                   }
    647                 }
    648                 A /= LCmultiplier;
    649                 foundMultiplier= true;
    650                 iter.getItem()= 1;
    651               }
    652             }
    653           }
    654         }
     524        LCHeuristic3 (LCmultiplier, factors, oldBiFactors, contents, oldAeval,
     525                      A, leadingCoeffs2, lengthAeval2, foundMultiplier);
    655526        // coming from above: divide out more LCmultiplier if possible
    656527        if (foundMultiplier)
    657528        {
    658529          foundMultiplier= false;
    659           index=1;
    660           iter2= factors;
    661           for (iter= contents; iter.hasItem(); iter++, iter2++, index++)
    662           {
    663             if (!iter.getItem().isOne() &&
    664                 fdivides (iter.getItem(), LCmultiplier))
    665             {
    666               if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff
    667               {
    668                 int index2= 1;
    669                 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    670                      iter2++, index2++)
    671                 {
    672                   if (index2 == index)
    673                   {
    674                     iter2.getItem() /= iter.getItem();
    675                     foundMultiplier= true;
    676                     break;
    677                   }
    678                 }
    679                 A /= iter.getItem();
    680                 LCmultiplier /= iter.getItem();
    681                 iter.getItem()= 1;
    682               }
    683               else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff
    684               {
    685                 Variable xx= Variable (2);
    686                 CanonicalForm vars;
    687                 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1),
    688                                           xx));
    689                 for (int i= 0; i < lengthAeval2; i++)
    690                 {
    691                   if (oldAeval[i].isEmpty())
    692                     continue;
    693                   xx= oldAeval[i].getFirst().mvar();
    694                   vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1),
    695                                              xx));
    696                 }
    697                 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1))
    698                     /myGetVars (LCmultiplier) == vars)
    699                 {
    700                   int index2= 1;
    701                   for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    702                        iter2++, index2++)
    703                   {
    704                     if (index2 == index)
    705                     {
    706                       iter2.getItem() /= LCmultiplier;
    707                       foundMultiplier= true;
    708                       break;
    709                     }
    710                   }
    711                   A /= LCmultiplier;
    712                   iter.getItem()= 1;
    713                 }
    714               }
    715             }
    716           }
     530          LCHeuristic4 (oldBiFactors, oldAeval, contents, factors, testVars,
     531                        lengthAeval2, leadingCoeffs2, A, LCmultiplier,
     532                        foundMultiplier);
    717533        }
    718534        else
    719535        {
    720           CanonicalForm pLCs= prod (LCs);
    721           if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A
    722           {
    723             A= oldA;
    724             iter2= leadingCoeffs2[lengthAeval2-1];
    725             for (iter= contents; iter.hasItem(); iter++, iter2++)
    726               iter2.getItem() /= iter.getItem();
    727             foundMultiplier= true;
    728           }
     536          LCHeuristicCheck (LCs, contents, A, oldA,
     537                            leadingCoeffs2[lengthAeval2-1], foundMultiplier);
    729538          if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars))
    730539          {
    731             Variable xx;
    732             CFList vars1;
    733             CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    734             if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    735               sqrfMultiplier.removeFirst();
    736             sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    737             xx= Variable (2);
    738             for (iter= oldBiFactors; iter.hasItem(); iter++)
    739               vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    740             for (int i= 0; i < lengthAeval2; i++)
    741             {
    742               if (oldAeval[i].isEmpty())
    743                 continue;
    744               xx= oldAeval[i].getFirst().mvar();
    745               iter2= vars1;
    746               for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    747                 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx));
    748             }
    749             CanonicalForm tmp;
    750             iter2= vars1;
    751             for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++,
    752                                                                     iter2++)
    753             {
    754               tmp= iter.getItem()/LCmultiplier;
    755               for (int i=1; i <= tmp.level(); i++)
    756               {
    757                 if (degree(tmp,i) > 0 &&
    758                     (degree(iter2.getItem(),i) > degree (tmp,i)))
    759                   iter2.getItem() /= power (Variable (i), degree (tmp,i));
    760               }
    761             }
    762             int multi;
    763             for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    764             {
    765               multi= 0;
    766               for (iter= vars1; iter.hasItem(); iter++)
    767               {
    768                 tmp= iter.getItem();
    769                 while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    770                 {
    771                   multi++;
    772                   tmp /= myGetVars (ii.getItem().factor());
    773                 }
    774               }
    775               if (multi == ii.getItem().exp())
    776               {
    777                 index= 1;
    778                 for (iter= vars1; iter.hasItem(); iter++, index++)
    779                 {
    780                   while (fdivides (myGetVars(ii.getItem().factor()),
    781                                    iter.getItem()
    782                                   )
    783                         )
    784                   {
    785                     int index2= 1;
    786                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    787                          iter2++, index2++)
    788                     {
    789                       if (index2 == index)
    790                         continue;
    791                       else
    792                       {
    793                         tmp= ii.getItem().factor();
    794                         iter2.getItem() /= tmp;
    795                         CFListIterator iter3= evaluation;
    796                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    797                           tmp= tmp (iter3.getItem(), jj);
    798                         if (!tmp.inCoeffDomain())
    799                         {
    800                           int index3= 1;
    801                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    802                                                                   index3++)
    803                           {
    804                             if (index3 == index2)
    805                             {
    806                               iter3.getItem() /= tmp;
    807                               iter3.getItem() /= Lc (iter3.getItem());
    808                               break;
    809                             }
    810                           }
    811                         }
    812                         A /= ii.getItem().factor();
    813                       }
    814                     }
    815                     iter.getItem() /= getVars (ii.getItem().factor());
    816                   }
    817                 }
    818               }
    819               else
    820               {
    821                 index= 1;
    822                 for (iter= vars1; iter.hasItem(); iter++, index++)
    823                 {
    824                   if (!fdivides (myGetVars (ii.getItem().factor()),
    825                                  iter.getItem()
    826                                 )
    827                      )
    828                   {
    829                     int index2= 1;
    830                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    831                          iter2++, index2++)
    832                     {
    833                       if (index2 == index)
    834                       {
    835                         tmp= power (ii.getItem().factor(), ii.getItem().exp());
    836                         iter2.getItem() /= tmp;
    837                         A /= tmp;
    838                         CFListIterator iter3= evaluation;
    839                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    840                           tmp= tmp (iter3.getItem(), jj);
    841                         if (!tmp.inCoeffDomain())
    842                         {
    843                           int index3= 1;
    844                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    845                                                                   index3++)
    846                           {
    847                             if (index3 == index2)
    848                             {
    849                               iter3.getItem() /= tmp;
    850                               iter3.getItem() /= Lc (iter3.getItem());
    851                               break;
    852                             }
    853                           }
    854                         }
    855                       }
    856                     }
    857                   }
    858                 }
    859               }
    860             }
     540            LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     541                         lengthAeval2, evaluation, oldBiFactors);
    861542          }
    862543        }
     
    866547        for (int i= lengthAeval2-1; i > -1; i--)
    867548          leadingCoeffs2[i]= CFList();
    868         prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors,
    869                               evaluation);
    870         Aeval= evaluateAtEval (A, evaluation, 2);
    871 
    872         hh= 1/Lc (Aeval.getFirst());
    873 
    874         for (CFListIterator i= Aeval; i.hasItem(); i++)
    875           i.getItem() *= hh;
    876 
    877         A *= hh;
     549        prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs,
     550                              biFactors, evaluation);
    878551      }
    879552      factors= CFList();
     
    898571  {
    899572    LCheuristic= true;
    900     int index;
    901     Variable xx;
    902     CFList vars1;
    903     CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    904     if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    905       sqrfMultiplier.removeFirst();
    906     sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    907     xx= Variable (2);
    908     for (iter= oldBiFactors; iter.hasItem(); iter++)
    909       vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    910     for (int i= 0; i < lengthAeval2; i++)
    911     {
    912       if (oldAeval[i].isEmpty())
    913         continue;
    914       xx= oldAeval[i].getFirst().mvar();
    915       iter2= vars1;
    916       for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    917         iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
    918     }
    919     CanonicalForm tmp;
    920     iter2= vars1;
    921     for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++)
    922     {
    923       tmp= iter.getItem()/LCmultiplier;
    924       for (int i=1; i <= tmp.level(); i++)
    925       {
    926         if (degree(tmp,i) > 0 && (degree(iter2.getItem(),i) > degree (tmp,i)))
    927           iter2.getItem() /= power (Variable (i), degree (tmp,i));
    928       }
    929     }
    930     int multi;
    931     for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    932     {
    933       multi= 0;
    934       for (iter= vars1; iter.hasItem(); iter++)
    935       {
    936         tmp= iter.getItem();
    937         while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    938         {
    939           multi++;
    940           tmp /= myGetVars (ii.getItem().factor());
    941         }
    942       }
    943       if (multi == ii.getItem().exp())
    944       {
    945         index= 1;
    946         for (iter= vars1; iter.hasItem(); iter++, index++)
    947         {
    948           while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    949           {
    950             int index2= 1;
    951             for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++,
    952                                                                       index2++)
    953             {
    954               if (index2 == index)
    955                 continue;
    956               else
    957               {
    958                 tmp= ii.getItem().factor();
    959                 iter2.getItem() /= tmp;
    960                 CFListIterator iter3= evaluation;
    961                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    962                   tmp= tmp (iter3.getItem(), jj);
    963                 if (!tmp.inCoeffDomain())
    964                 {
    965                   int index3= 1;
    966                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    967                   {
    968                     if (index3 == index2)
    969                     {
    970                       iter3.getItem() /= tmp;
    971                       iter3.getItem() /= Lc (iter3.getItem());
    972                       break;
    973                     }
    974                   }
    975                 }
    976                 A /= ii.getItem().factor();
    977               }
    978             }
    979             iter.getItem() /= getVars (ii.getItem().factor());
    980           }
    981         }
    982       }
    983       else
    984       {
    985         index= 1;
    986         for (iter= vars1; iter.hasItem(); iter++, index++)
    987         {
    988           if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    989           {
    990             int index2= 1;
    991             for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++,
    992                                                                       index2++)
    993             {
    994               if (index2 == index)
    995               {
    996                 tmp= power (ii.getItem().factor(), ii.getItem().exp());
    997                 iter2.getItem() /= tmp;
    998                 A /= tmp;
    999                 CFListIterator iter3= evaluation;
    1000                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    1001                   tmp= tmp (iter3.getItem(), jj);
    1002                 if (!tmp.inCoeffDomain())
    1003                 {
    1004                   int index3= 1;
    1005                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    1006                   {
    1007                     if (index3 == index2)
    1008                     {
    1009                       iter3.getItem() /= tmp;
    1010                       iter3.getItem() /= Lc (iter3.getItem());
    1011                       break;
    1012                     }
    1013                   }
    1014                 }
    1015               }
    1016             }
    1017           }
    1018         }
    1019       }
    1020     }
     573    LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     574                 lengthAeval2, evaluation, oldBiFactors);
    1021575
    1022576    leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
    1023577    for (int i= lengthAeval2-1; i > -1; i--)
    1024578      leadingCoeffs2[i]= CFList();
    1025     prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors,
    1026                           evaluation);
    1027     Aeval= evaluateAtEval (A, evaluation, 2);
    1028 
    1029     hh= 1/Lc (Aeval.getFirst());
    1030 
    1031     for (CFListIterator i= Aeval; i.hasItem(); i++)
    1032       i.getItem() *= hh;
    1033 
    1034     A *= hh;
     579    prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs,
     580                          biFactors, evaluation);
    1035581
    1036582    if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1])))
     
    1087633    commonDenominators.append (bCommonDen (iter.getItem()));
    1088634  CanonicalForm tmp1, tmp2, tmp3=1;
     635  CFListIterator iter2;
    1089636  for (int i= 0; i < lengthAeval2; i++)
    1090637  {
  • factory/facFqBivar.h

    rd826a8 r71a4d7  
    4949            );
    5050
    51 /// factorize a squarefree bivariate polynomial over \f$ F_{p} \f$.
    52 ///
    53 /// @return @a FpBiSqrfFactorize returns a list of monic factors, the first
    54 ///         element is the leading coefficient.
    55 /// @sa FqBiSqrfFactorize(), GFBiSqrfFactorize()
    56 inline
    57 CFList FpBiSqrfFactorize (const CanonicalForm & G ///< [in] a bivariate poly
    58                          )
     51inline CFList
     52biSqrfFactorizeHelper (const CanonicalForm& G, ExtensionInfo& info)
    5953{
    60   ExtensionInfo info= ExtensionInfo (false);
    6154  CFMap N;
    6255  CanonicalForm F= compress (G, N);
     
    6558  F /= (contentX*contentY);
    6659  CFFList contentXFactors, contentYFactors;
    67   contentXFactors= factorize (contentX);
    68   contentYFactors= factorize (contentY);
     60  if (info.getAlpha().level() != 1)
     61  {
     62    contentXFactors= factorize (contentX, info.getAlpha());
     63    contentYFactors= factorize (contentY, info.getAlpha());
     64  }
     65  else if (info.getAlpha().level() == 1 && info.getGFDegree() == 1)
     66  {
     67    contentXFactors= factorize (contentX);
     68    contentYFactors= factorize (contentY);
     69  }
     70  else if (info.getAlpha().level() == 1 && info.getGFDegree() != 1)
     71  {
     72    CFList bufContentX, bufContentY;
     73    bufContentX= biFactorize (contentX, info);
     74    bufContentY= biFactorize (contentY, info);
     75    for (CFListIterator iter= bufContentX; iter.hasItem(); iter++)
     76      contentXFactors.append (CFFactor (iter.getItem(), 1));
     77    for (CFListIterator iter= bufContentY; iter.hasItem(); iter++)
     78      contentYFactors.append (CFFactor (iter.getItem(), 1));
     79  }
     80
    6981  if (contentXFactors.getFirst().factor().inCoeffDomain())
    7082    contentXFactors.removeFirst();
     
    97109}
    98110
     111/// factorize a squarefree bivariate polynomial over \f$ F_{p} \f$.
     112///
     113/// @return @a FpBiSqrfFactorize returns a list of monic factors, the first
     114///         element is the leading coefficient.
     115/// @sa FqBiSqrfFactorize(), GFBiSqrfFactorize()
     116inline
     117CFList FpBiSqrfFactorize (const CanonicalForm & G ///< [in] a bivariate poly
     118                         )
     119{
     120  ExtensionInfo info= ExtensionInfo (false);
     121  return biSqrfFactorizeHelper (G, info);
     122}
     123
    99124/// factorize a squarefree bivariate polynomial over \f$ F_{p}(\alpha ) \f$.
    100125///
     
    108133{
    109134  ExtensionInfo info= ExtensionInfo (alpha, false);
    110   CFMap N;
    111   CanonicalForm F= compress (G, N);
    112   CanonicalForm contentX= content (F, 1);
    113   CanonicalForm contentY= content (F, 2);
    114   F /= (contentX*contentY);
    115   CFFList contentXFactors, contentYFactors;
    116   contentXFactors= factorize (contentX, alpha);
    117   contentYFactors= factorize (contentY, alpha);
    118   if (contentXFactors.getFirst().factor().inCoeffDomain())
    119     contentXFactors.removeFirst();
    120   if (contentYFactors.getFirst().factor().inCoeffDomain())
    121     contentYFactors.removeFirst();
    122   if (F.inCoeffDomain())
    123   {
    124     CFList result;
    125     for (CFFListIterator i= contentXFactors; i.hasItem(); i++)
    126       result.append (N (i.getItem().factor()));
    127     for (CFFListIterator i= contentYFactors; i.hasItem(); i++)
    128       result.append (N (i.getItem().factor()));
    129     normalize (result);
    130     result.insert (Lc (G));
    131     return result;
    132   }
    133   mat_ZZ M;
    134   vec_ZZ S;
    135   F= compress (F, M, S);
    136   CFList result= biFactorize (F, info);
    137   for (CFListIterator i= result; i.hasItem(); i++)
    138     i.getItem()= N (decompress (i.getItem(), M, S));
    139   for (CFFListIterator i= contentXFactors; i.hasItem(); i++)
    140     result.append (N(i.getItem().factor()));
    141   for (CFFListIterator i= contentYFactors; i.hasItem(); i++)
    142     result.append (N (i.getItem().factor()));
    143   normalize (result);
    144   result.insert (Lc(G));
    145   return result;
     135  return biSqrfFactorizeHelper (G, info);
    146136}
    147137
     
    158148          "GF as base field expected");
    159149  ExtensionInfo info= ExtensionInfo (getGFDegree(), gf_name, false);
    160   CFMap N;
    161   CanonicalForm F= compress (G, N);
    162   CanonicalForm contentX= content (F, 1);
    163   CanonicalForm contentY= content (F, 2);
    164   F /= (contentX*contentY);
    165   CFList contentXFactors, contentYFactors;
    166   contentXFactors= biFactorize (contentX, info);
    167   contentYFactors= biFactorize (contentY, info);
    168   if (contentXFactors.getFirst().inCoeffDomain())
    169     contentXFactors.removeFirst();
    170   if (contentYFactors.getFirst().inCoeffDomain())
    171     contentYFactors.removeFirst();
    172   if (F.inCoeffDomain())
    173   {
    174     CFList result;
    175     for (CFListIterator i= contentXFactors; i.hasItem(); i++)
    176       result.append (N (i.getItem()));
    177     for (CFListIterator i= contentYFactors; i.hasItem(); i++)
    178       result.append (N (i.getItem()));
    179     normalize (result);
    180     result.insert (Lc (G));
    181     return result;
    182   }
    183   mat_ZZ M;
    184   vec_ZZ S;
    185   F= compress (F, M, S);
    186   CFList result= biFactorize (F, info);
    187   for (CFListIterator i= result; i.hasItem(); i++)
    188     i.getItem()= N (decompress (i.getItem(), M, S));
    189   for (CFListIterator i= contentXFactors; i.hasItem(); i++)
    190     result.append (N(i.getItem()));
    191   for (CFListIterator i= contentYFactors; i.hasItem(); i++)
    192     result.append (N (i.getItem()));
    193   normalize (result);
    194   result.insert (Lc(G));
    195   return result;
     150  return biSqrfFactorizeHelper (G, info);
    196151}
    197152
  • factory/facFqFactorize.cc

    rd826a8 r71a4d7  
    4949TIMING_DEFINE_PRINT(fac_fq_check_mainvar)
    5050TIMING_DEFINE_PRINT(fac_fq_compress)
     51
    5152
    5253static inline
     
    12081209  int k= factors1.length();
    12091210  int l= factors2.length();
    1210   int n= 1;
     1211  int n= 0;
    12111212  int m;
    12121213  CFFListIterator j;
    12131214  for (CFFListIterator i= factors1; (n < k && i.hasItem()); i++, n++)
    12141215  {
    1215     m= 1;
     1216    m= 0;
    12161217    for (j= factors2; (m < l && j.hasItem()); j++, m++)
    12171218    {
     
    13241325             const CFArray& evalPoint)
    13251326{
    1326   CanonicalForm tmp;
    1327   CFListIterator j;
    1328   for (CFListIterator i= uniFactors; i.hasItem(); i++)
    1329   {
    1330     tmp= i.getItem();
    1331     if (i.hasItem())
    1332       i++;
    1333     else
    1334       break;
    1335     for (j= i; j.hasItem(); j++)
    1336     {
    1337       if (tmp == j.getItem())
    1338         return 0;
    1339     }
    1340   }
    1341 
    13421327  CanonicalForm F= G;
    13431328  CFFList sqrfFactorization;
     
    13591344
    13601345  CFFList sqrfFactors;
     1346  CanonicalForm tmp;
    13611347  CFList tmp2;
    13621348  int k= 0;
     
    14841470      result.insert (Lc (LCF));
    14851471    else
    1486     {
    1487       for (CFListIterator i= result; i.hasItem(); i++)
    1488         i.getItem() *= LCF;
    14891472      result.insert (LCF);
    1490     }
     1473
    14911474    return result;
    14921475  }
     
    15521535        bufBufFactors= bufFactors;
    15531536        evalPoint= CFArray (evaluation.length() - 1);
    1554         for (int k= 0; k < evaluation.length()-1; k++)
     1537        for (int k= 1; k < evaluation.length(); k++)
    15551538        {
    15561539          if (N (Variable (k+1)).level() != y.level())
    1557             evalPoint[k]= buf[k+1];
     1540            evalPoint[k-1]= buf[k];
    15581541          else
    1559             evalPoint[k]= buf[0];
     1542            evalPoint[k-1]= buf[0];
    15601543        }
    15611544        pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors,
     
    15791562            result.append (1);
    15801563          result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs);
    1581           if (!result.getFirst().inCoeffDomain())
    1582           {
    1583             CFListIterator iter= result;
    1584             CanonicalForm tmp= iter.getItem();
    1585             iter++;
    1586             for (; iter.hasItem(); iter++)
    1587               iter.getItem() *= tmp;
    1588           }
    15891564          y= Variable (1);
    15901565          delete [] bufSqrfFactors;
     
    16011576      result.append (1);
    16021577    result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs);
    1603     if (!result.getFirst().inCoeffDomain())
    1604     {
    1605       CFListIterator iter= result;
    1606       CanonicalForm tmp= iter.getItem();
    1607       iter++;
    1608       for (; iter.hasItem(); iter++)
    1609         iter.getItem() *= tmp;
    1610     }
    16111578    y= Variable (1);
    16121579    delete [] bufSqrfFactors;
     
    16831650      {
    16841651        int* liftBounds= new int [sqrfPartF.level() - 1];
    1685         liftBounds [0]= liftBound;
    16861652        bool noOneToOne= false;
    16871653        CFList *leadingCoeffs2= new CFList [sqrfPartF.level()-2];
     
    17001666
    17011667        int liftBoundsLength= sqrfPartF.level() - 1;
    1702         for (int i= 1; i < liftBoundsLength; i++)
     1668        for (int i= 0; i < liftBoundsLength; i++)
    17031669          liftBounds [i]= degree (sqrfPartF, i + 2) + 1;
    17041670        evalSqrfPartF= evaluateAtZero (sqrfPartF);
     
    17641730  if (!result.getFirst().inCoeffDomain())
    17651731  {
    1766     CFListIterator i= result;
    1767     CanonicalForm tmp;
     1732    // prepare input for recursion
    17681733    if (foundDifferent)
    1769       i.getItem()= swapvar (i.getItem(), Variable (2), y);
    1770 
    1771     tmp= i.getItem();
    1772 
    1773     i++;
    1774     for (; i.hasItem(); i++)
    1775     {
    1776       if (foundDifferent)
    1777         i.getItem()= swapvar (i.getItem(), Variable (2), y)*tmp;
     1734    {
     1735      for (CFListIterator i= result; i.hasItem(); i++)
     1736        i.getItem()= swapvar (i.getItem(), Variable (2), y);
     1737      CFList l= differentSecondVarLCs [j];
     1738      for (CFListIterator i= l; i.hasItem(); i++)
     1739        i.getItem()= swapvar (i.getItem(), y, z);
     1740      differentSecondVarLCs [j]= l;
     1741    }
     1742
     1743    F= result.getFirst();
     1744    int level= 0;
     1745    if (foundDifferent)
     1746    {
     1747      level= y.level() - 2;
     1748      for (int i= y.level(); i > 1; i--)
     1749      {
     1750        if (degree (F,i) > 0)
     1751        {
     1752          if (y.level() == 3)
     1753            level= 0;
     1754          else
     1755            level= i-3;
     1756        }
     1757      }
     1758    }
     1759lcretry:
     1760    if (lSecondVarLCs - level > 0)
     1761    {
     1762      CFList evaluation2= evaluation;
     1763      int j= lSecondVarLCs+2;
     1764      CanonicalForm swap;
     1765      CFListIterator i;
     1766      for (i= evaluation2; i.hasItem(); i++, j--)
     1767      {
     1768        if (j==y.level())
     1769        {
     1770          swap= i.getItem();
     1771          i.getItem()= evaluation2.getLast();
     1772          evaluation2.removeLast();
     1773          evaluation2.append (swap);
     1774        }
     1775      }
     1776
     1777      CFList newLCs= differentSecondVarLCs[level];
     1778      if (newLCs.isEmpty())
     1779      {
     1780        if (degree (F, level+3) > 0)
     1781        {
     1782          delete [] bufSqrfFactors;
     1783          return result; //TODO handle this case
     1784        }
     1785        level=level+1;
     1786        goto lcretry;
     1787      }
     1788      i= newLCs;
     1789      CFListIterator iter= result;
     1790      iter++;
     1791      CanonicalForm quot;
     1792      for (;iter.hasItem(); iter++, i++)
     1793      {
     1794        swap= iter.getItem();
     1795        if (degree (swap, level+3) > 0)
     1796        {
     1797          int count= evaluation.length()+1;
     1798          for (CFListIterator iter2= evaluation2; iter2.hasItem(); iter2++,
     1799                                                                    count--)
     1800          {
     1801            if (count != level+3)
     1802              swap= swap (iter2.getItem(), count);
     1803          }
     1804          if (fdivides (swap, i.getItem(), quot))
     1805            i.getItem()= quot;
     1806        }
     1807      }
     1808      CFList * differentSecondVarLCs2= new CFList [lSecondVarLCs - level - 1];
     1809      for (int j= level+1; j < lSecondVarLCs; j++)
     1810      {
     1811        if (degree (F, j+3) > 0)
     1812        {
     1813          if (!differentSecondVarLCs[j].isEmpty())
     1814          {
     1815            differentSecondVarLCs2[j - level - 1]= differentSecondVarLCs[j];
     1816            i= differentSecondVarLCs2[j-level - 1];
     1817            iter=result;
     1818            iter++;
     1819            for (;iter.hasItem(); iter++, i++)
     1820            {
     1821              swap= iter.getItem();
     1822              if (degree (swap, j+3) > 0)
     1823              {
     1824                int count= evaluation.length()+1;
     1825                for (CFListIterator iter2= evaluation2; iter2.hasItem();iter2++,
     1826                                                                        count--)
     1827                {
     1828                  if (count != j+3)
     1829                    swap= swap (iter2.getItem(), count);
     1830                }
     1831                if (fdivides (swap, i.getItem(), quot))
     1832                  i.getItem()= quot;
     1833              }
     1834            }
     1835          }
     1836        }
     1837      }
     1838
     1839      for (int j= 0; j < level+1; j++)
     1840        evaluation2.removeLast();
     1841      Variable dummyvar= Variable (1);
     1842
     1843      CanonicalForm newLCF= result.getFirst();
     1844      newLCF=swapvar (newLCF, Variable (2), Variable (level+3));
     1845      for (i=newLCs; i.hasItem(); i++)
     1846        i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3));
     1847      for (int j= 1; j < lSecondVarLCs-level;j++)
     1848      {
     1849        for (i= differentSecondVarLCs2[j-1]; i.hasItem(); i++)
     1850          i.getItem()= swapvar (i.getItem(), Variable (2+j),
     1851                                             Variable (level+3+j));
     1852        newLCF= swapvar (newLCF, Variable (2+j), Variable (level+3+j));
     1853      }
     1854
     1855      CFList recursiveResult=
     1856      precomputeLeadingCoeff (newLCF, newLCs, alpha, evaluation2,
     1857                              differentSecondVarLCs2, lSecondVarLCs - level - 1,
     1858                              dummyvar);
     1859
     1860      if (dummyvar.level() != 1)
     1861      {
     1862        for (i= recursiveResult; i.hasItem(); i++)
     1863          i.getItem()= swapvar (i.getItem(), Variable (2), dummyvar);
     1864      }
     1865      for (i= recursiveResult; i.hasItem(); i++)
     1866      {
     1867        for (int j= lSecondVarLCs-level-1; j > 0; j--)
     1868          i.getItem()=swapvar (i.getItem(), Variable (2+j),
     1869                                      Variable (level+3+j));
     1870        i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3));
     1871      }
     1872
     1873      if (recursiveResult.getFirst() == result.getFirst())
     1874      {
     1875        delete [] bufSqrfFactors;
     1876        delete [] differentSecondVarLCs2;
     1877        return result;
     1878      }
    17781879      else
    1779         i.getItem() *= tmp;
     1880      {
     1881        iter=recursiveResult;
     1882        i= result;
     1883        i.getItem()= iter.getItem();
     1884        i++;
     1885        iter++;
     1886        for (; i.hasItem(); i++, iter++)
     1887          i.getItem() *= iter.getItem();
     1888        delete [] differentSecondVarLCs2;
     1889      }
    17801890    }
    17811891  }
     
    19842094  CFArray l;
    19852095  int pos, index;
     2096  bool leaveLoop=false;
    19862097  for (int j= 0; j < AevalLength; j++)
    19872098  {
     
    19912102      for (iter= evaluation; iter.hasItem(); iter++, i--)
    19922103      {
    1993         if (i == Aeval[j].getFirst().level())
    1994         {
    1995           evalPoint= iter.getItem();
     2104        for (iter2= Aeval[j]; iter2.hasItem(); iter2++)
     2105        {
     2106          if (i == iter2.getItem().level())
     2107          {
     2108            evalPoint= iter.getItem();
     2109            leaveLoop= true;
     2110            break;
     2111          }
     2112        }
     2113        if (leaveLoop)
     2114        {
     2115          leaveLoop= false;
    19962116          break;
    19972117        }
     
    20402160                      int minFactorsLength)
    20412161{
    2042   CFListIterator iter;
     2162  CFListIterator iter, iter2;
    20432163  CanonicalForm evalPoint;
    20442164  int i;
     
    20462166  Variable y= Variable (2);
    20472167  CFList list;
     2168  bool leaveLoop= false;
    20482169  for (int j= 0; j < A.level() - 2; j++)
    20492170  {
     
    20542175      for (iter= evaluation; iter.hasItem(); iter++, i--)
    20552176      {
    2056         if (i == Aeval[j].getFirst().level())
    2057         {
    2058           evalPoint= iter.getItem();
     2177        for (iter2= Aeval[j]; iter2.hasItem(); iter2++)
     2178        {
     2179          if (i == iter2.getItem().level())
     2180          {
     2181            evalPoint= iter.getItem();
     2182            leaveLoop= true;
     2183            break;
     2184          }
     2185        }
     2186        if (leaveLoop)
     2187        {
     2188          leaveLoop= false;
    20592189          break;
    20602190        }
     
    20722202}
    20732203
    2074 void prepareLeadingCoeffs (CFList*& LCs, int n, const CFList& leadingCoeffs,
    2075                            const CFList& biFactors, const CFList& evaluation)
     2204void
     2205prepareLeadingCoeffs (CFList*& LCs, CanonicalForm& A, CFList& Aeval, int n,
     2206                      const CFList& leadingCoeffs, const CFList& biFactors,
     2207                      const CFList& evaluation)
    20762208{
    20772209  CFList l= leadingCoeffs;
     
    20982230      j.getItem() *= ii.getItem();
    20992231  }
     2232
     2233  Aeval= evaluateAtEval (A, evaluation, 2);
     2234
     2235  CanonicalForm hh= 1/Lc (Aeval.getFirst());
     2236
     2237  for (iter= Aeval; iter.hasItem(); iter++)
     2238    iter.getItem() *= hh;
     2239
     2240  A *= hh;
    21002241}
    21012242
     
    22172358}
    22182359
     2360void
     2361changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation,
     2362                      CFList*& oldAeval, int lengthAeval2,
     2363                      const CFList& uniFactors, const Variable& w)
     2364{
     2365  Variable y= Variable (2);
     2366  A= swapvar (A, y, w);
     2367  int i= A.level();
     2368  CanonicalForm evalPoint;
     2369  for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--)
     2370  {
     2371    if (i == w.level())
     2372    {
     2373      evalPoint= iter.getItem();
     2374      iter.getItem()= evaluation.getLast();
     2375      evaluation.removeLast();
     2376      evaluation.append (evalPoint);
     2377      break;
     2378    }
     2379  }
     2380  for (i= 0; i < lengthAeval2; i++)
     2381  {
     2382    if (oldAeval[i].isEmpty())
     2383      continue;
     2384    if (oldAeval[i].getFirst().level() == w.level())
     2385    {
     2386      CFArray tmp= copy (oldAeval[i]);
     2387      oldAeval[i]= biFactors;
     2388      for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++)
     2389        iter.getItem()= swapvar (iter.getItem(), w, y);
     2390      for (int ii= 0; ii < tmp.size(); ii++)
     2391        tmp[ii]= swapvar (tmp[ii], w, y);
     2392      CFArray tmp2= CFArray (tmp.size());
     2393      CanonicalForm buf;
     2394      for (int ii= 0; ii < tmp.size(); ii++)
     2395      {
     2396        buf= tmp[ii] (evaluation.getLast(),y);
     2397        buf /= Lc (buf);
     2398        tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
     2399      }
     2400      biFactors= CFList();
     2401      for (int j= 0; j < tmp2.size(); j++)
     2402        biFactors.append (tmp2[j]);
     2403    }
     2404  }
     2405}
     2406
     2407void
     2408distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs,
     2409                        CFList& biFactors, const CFList& evaluation,
     2410                        const CanonicalForm& LCmultipler)
     2411{
     2412  CanonicalForm tmp= power (LCmultipler, biFactors.length() - 1);
     2413  A *= tmp;
     2414  tmp= LCmultipler;
     2415  CFListIterator iter= leadingCoeffs;
     2416  for (;iter.hasItem(); iter++)
     2417    iter.getItem() *= LCmultipler;
     2418  iter= evaluation;
     2419  for (int i= A.level(); i > 2; i--, iter++)
     2420    tmp= tmp (iter.getItem(), i);
     2421  if (!tmp.inCoeffDomain())
     2422  {
     2423    for (CFListIterator i= biFactors; i.hasItem(); i++)
     2424    {
     2425      i.getItem() *= tmp/LC (i.getItem(), 1);
     2426      i.getItem() /= Lc (i.getItem());
     2427    }
     2428  }
     2429}
     2430
     2431void
     2432LCHeuristic (CanonicalForm& A, const CanonicalForm& LCmultiplier,
     2433             CFList& biFactors, CFList*& leadingCoeffs, const CFList* oldAeval,
     2434             int lengthAeval, const CFList& evaluation,
     2435             const CFList& oldBiFactors)
     2436{
     2437  CFListIterator iter, iter2;
     2438  int index;
     2439  Variable xx;
     2440  CFList vars1;
     2441  CFFList sqrfMultiplier= sqrFree (LCmultiplier);
     2442  if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
     2443    sqrfMultiplier.removeFirst();
     2444  sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
     2445  xx= Variable (2);
     2446  for (iter= oldBiFactors; iter.hasItem(); iter++)
     2447    vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
     2448  for (int i= 0; i < lengthAeval; i++)
     2449  {
     2450    if (oldAeval[i].isEmpty())
     2451      continue;
     2452    xx= oldAeval[i].getFirst().mvar();
     2453    iter2= vars1;
     2454    for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
     2455      iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
     2456  }
     2457  CanonicalForm tmp;
     2458  iter2= vars1;
     2459  for (iter= leadingCoeffs[lengthAeval-1]; iter.hasItem(); iter++, iter2++)
     2460  {
     2461    tmp= iter.getItem()/LCmultiplier;
     2462    for (int i=1; i <= tmp.level(); i++)
     2463    {
     2464      if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i)))
     2465        iter2.getItem() /= power (Variable (i), degree (tmp,i));
     2466    }
     2467  }
     2468  int multi;
     2469  for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
     2470  {
     2471    multi= 0;
     2472    for (iter= vars1; iter.hasItem(); iter++)
     2473    {
     2474      tmp= iter.getItem();
     2475      while (fdivides (myGetVars (ii.getItem().factor()), tmp))
     2476      {
     2477        multi++;
     2478        tmp /= myGetVars (ii.getItem().factor());
     2479      }
     2480    }
     2481    if (multi == ii.getItem().exp())
     2482    {
     2483      index= 1;
     2484      for (iter= vars1; iter.hasItem(); iter++, index++)
     2485      {
     2486        while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
     2487        {
     2488          int index2= 1;
     2489          for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem();iter2++,
     2490                                                                    index2++)
     2491          {
     2492            if (index2 == index)
     2493              continue;
     2494            else
     2495            {
     2496              tmp= ii.getItem().factor();
     2497              iter2.getItem() /= tmp;
     2498              CFListIterator iter3= evaluation;
     2499              for (int jj= A.level(); jj > 2; jj--, iter3++)
     2500                tmp= tmp (iter3.getItem(), jj);
     2501              if (!tmp.inCoeffDomain())
     2502              {
     2503                int index3= 1;
     2504                for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
     2505                {
     2506                  if (index3 == index2)
     2507                  {
     2508                    iter3.getItem() /= tmp;
     2509                    iter3.getItem() /= Lc (iter3.getItem());
     2510                    break;
     2511                  }
     2512                }
     2513              }
     2514              A /= ii.getItem().factor();
     2515            }
     2516          }
     2517          iter.getItem() /= getVars (ii.getItem().factor());
     2518        }
     2519      }
     2520    }
     2521    else
     2522    {
     2523      index= 1;
     2524      for (iter= vars1; iter.hasItem(); iter++, index++)
     2525      {
     2526        if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
     2527        {
     2528          int index2= 1;
     2529          for (iter2= leadingCoeffs[lengthAeval-1];iter2.hasItem();iter2++,
     2530                                                                    index2++)
     2531          {
     2532            if (index2 == index)
     2533            {
     2534              tmp= power (ii.getItem().factor(), ii.getItem().exp());
     2535              iter2.getItem() /= tmp;
     2536              A /= tmp;
     2537              CFListIterator iter3= evaluation;
     2538              for (int jj= A.level(); jj > 2; jj--, iter3++)
     2539                tmp= tmp (iter3.getItem(), jj);
     2540              if (!tmp.inCoeffDomain())
     2541              {
     2542                int index3= 1;
     2543                for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
     2544                {
     2545                  if (index3 == index2)
     2546                  {
     2547                    iter3.getItem() /= tmp;
     2548                    iter3.getItem() /= Lc (iter3.getItem());
     2549                    break;
     2550                  }
     2551                }
     2552              }
     2553            }
     2554          }
     2555        }
     2556      }
     2557    }
     2558  }
     2559}
     2560
     2561void
     2562LCHeuristicCheck (const CFList& LCs, const CFList& contents, CanonicalForm& A,
     2563                  const CanonicalForm& oldA, CFList& leadingCoeffs,
     2564                  bool& foundTrueMultiplier)
     2565{
     2566  CanonicalForm pLCs= prod (LCs);
     2567  if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A
     2568  {
     2569    A= oldA;
     2570    CFListIterator iter2= leadingCoeffs;
     2571    for (CFListIterator iter= contents; iter.hasItem(); iter++, iter2++)
     2572      iter2.getItem() /= iter.getItem();
     2573    foundTrueMultiplier= true;
     2574  }
     2575}
     2576
     2577void
     2578LCHeuristic2 (const CanonicalForm& LCmultiplier, const CFList& factors,
     2579              CFList& leadingCoeffs, CFList& contents, CFList& LCs,
     2580              bool& foundTrueMultiplier)
     2581{
     2582  CanonicalForm cont;
     2583  int index= 1;
     2584  CFListIterator iter2;
     2585  for (CFListIterator iter= factors; iter.hasItem(); iter++, index++)
     2586  {
     2587    cont= content (iter.getItem(), 1);
     2588    cont= gcd (cont, LCmultiplier);
     2589    contents.append (cont);
     2590    if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there
     2591    {
     2592      foundTrueMultiplier= true;
     2593      int index2= 1;
     2594      for (iter2= leadingCoeffs; iter2.hasItem(); iter2++, index2++)
     2595      {
     2596        if (index2 == index)
     2597          continue;
     2598        iter2.getItem() /= LCmultiplier;
     2599      }
     2600      break;
     2601    }
     2602    else
     2603      LCs.append (LC (iter.getItem()/cont, 1));
     2604  }
     2605}
     2606
     2607void
     2608LCHeuristic3 (const CanonicalForm& LCmultiplier, const CFList& factors,
     2609              const CFList& oldBiFactors, const CFList& contents,
     2610              const CFList* oldAeval, CanonicalForm& A, CFList*& leadingCoeffs,
     2611              int lengthAeval, bool& foundMultiplier)
     2612{
     2613  int index= 1;
     2614  CFListIterator iter, iter2= factors;
     2615  for (iter= contents; iter.hasItem(); iter++, iter2++, index++)
     2616  {
     2617    if (fdivides (iter.getItem(), LCmultiplier))
     2618    {
     2619      if ((LCmultiplier/iter.getItem()).inCoeffDomain() &&
     2620          !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff
     2621      {
     2622        Variable xx= Variable (2);
     2623        CanonicalForm vars;
     2624        vars= power (xx, degree (LC (getItem(oldBiFactors, index),1),
     2625                                  xx));
     2626        for (int i= 0; i < lengthAeval; i++)
     2627        {
     2628          if (oldAeval[i].isEmpty())
     2629            continue;
     2630          xx= oldAeval[i].getFirst().mvar();
     2631          vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1),
     2632                                      xx));
     2633        }
     2634        if (vars.level() <= 2)
     2635        {
     2636          int index2= 1;
     2637          for (CFListIterator iter3= leadingCoeffs[lengthAeval-1];
     2638                iter3.hasItem(); iter3++, index2++)
     2639          {
     2640            if (index2 == index)
     2641            {
     2642              iter3.getItem() /= LCmultiplier;
     2643              break;
     2644            }
     2645          }
     2646          A /= LCmultiplier;
     2647          foundMultiplier= true;
     2648          iter.getItem()= 1;
     2649        }
     2650      }
     2651    }
     2652  }
     2653}
     2654
     2655void
     2656LCHeuristic4 (const CFList& oldBiFactors, const CFList* oldAeval,
     2657              const CFList& contents, const CFList& factors,
     2658              const CanonicalForm& testVars, int lengthAeval,
     2659              CFList*& leadingCoeffs, CanonicalForm& A,
     2660              CanonicalForm& LCmultiplier, bool& foundMultiplier)
     2661{
     2662  int index=1;
     2663  CFListIterator iter, iter2= factors;
     2664  for (iter= contents; iter.hasItem(); iter++, iter2++, index++)
     2665  {
     2666    if (!iter.getItem().isOne() &&
     2667        fdivides (iter.getItem(), LCmultiplier))
     2668    {
     2669      if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff
     2670      {
     2671        int index2= 1;
     2672        for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem();
     2673              iter2++, index2++)
     2674        {
     2675          if (index2 == index)
     2676          {
     2677            iter2.getItem() /= iter.getItem();
     2678            foundMultiplier= true;
     2679            break;
     2680          }
     2681        }
     2682        A /= iter.getItem();
     2683        LCmultiplier /= iter.getItem();
     2684        iter.getItem()= 1;
     2685      }
     2686      else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff
     2687      {
     2688        Variable xx= Variable (2);
     2689        CanonicalForm vars;
     2690        vars= power (xx, degree (LC (getItem(oldBiFactors, index),1),
     2691                                  xx));
     2692        for (int i= 0; i < lengthAeval; i++)
     2693        {
     2694          if (oldAeval[i].isEmpty())
     2695            continue;
     2696          xx= oldAeval[i].getFirst().mvar();
     2697          vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1),
     2698                                      xx));
     2699        }
     2700        if (myGetVars(content(getItem(leadingCoeffs[lengthAeval-1],index),1))
     2701            /myGetVars (LCmultiplier) == vars)
     2702        {
     2703          int index2= 1;
     2704          for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem();
     2705                iter2++, index2++)
     2706          {
     2707            if (index2 == index)
     2708            {
     2709              iter2.getItem() /= LCmultiplier;
     2710              foundMultiplier= true;
     2711              break;
     2712            }
     2713          }
     2714          A /= LCmultiplier;
     2715          iter.getItem()= 1;
     2716        }
     2717      }
     2718    }
     2719  }
     2720}
     2721
    22192722CFList
    22202723extFactorize (const CanonicalForm& F, const ExtensionInfo& info);
     
    23622865  bool fail= false;
    23632866  int swapLevel2= 0;
    2364   int level;
     2867  //int level;
    23652868  int factorNums= 3;
    23662869  CFList biFactors, bufBiFactors;
     
    23912894    if (fail && (i == 0))
    23922895    {
    2393       if (!swapLevel)
     2896      /*if (!swapLevel) //uncomment to reenable search for new main variable
    23942897        level= 2;
    23952898      else
    2396         level= swapLevel + 1;
    2397 
    2398       CanonicalForm g;
    2399       swapLevel2= newMainVariableSearch (A, Aeval, evaluation, alpha, level, g);
    2400 
    2401       if (!swapLevel2) // need to pass to an extension
    2402       {
     2899        level= swapLevel + 1;*/
     2900
     2901      //CanonicalForm g;
     2902      //swapLevel2= newMainVariableSearch (A, Aeval, evaluation, alpha, level, g);
     2903
     2904      /*if (!swapLevel2) // need to pass to an extension
     2905      {*/
    24032906        factors= extFactorize (A, info);
    24042907        appendSwapDecompress (factors, contentAFactors, N, swapLevel, x);
     
    24072910        delete [] Aeval2;
    24082911        return factors;
    2409       }
     2912      /*}
    24102913      else
    24112914      {
     
    24262929        bufA= A;
    24272930        bufEvaluation= evaluation;
    2428       }
     2931      }*/ //end uncomment
    24292932    }
    24302933    else if (fail && (i > 0))
     
    25913094
    25923095  if (v.level() != 1)
    2593   {
    2594     A= swapvar (A, y, v);
    2595     int i= A.level();
    2596     CanonicalForm evalPoint;
    2597     for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--)
    2598     {
    2599       if (i == v.level())
    2600       {
    2601         evalPoint= iter.getItem();
    2602         iter.getItem()= evaluation.getLast();
    2603         evaluation.removeLast();
    2604         evaluation.append (evalPoint);
    2605         break;
    2606       }
    2607     }
    2608     for (i= 0; i < lengthAeval2; i++)
    2609     {
    2610       if (oldAeval[i].isEmpty())
    2611         continue;
    2612       if (oldAeval[i].getFirst().level() == v.level())
    2613       {
    2614         CFArray tmp= copy (oldAeval[i]);
    2615         oldAeval[i]= biFactors;
    2616         for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++)
    2617           iter.getItem()= swapvar (iter.getItem(), v, y);
    2618         for (int ii= 0; ii < tmp.size(); ii++)
    2619           tmp[ii]= swapvar (tmp[ii], v, y);
    2620         CFArray tmp2= CFArray (tmp.size());
    2621         CanonicalForm buf;
    2622         for (int ii= 0; ii < tmp.size(); ii++)
    2623         {
    2624           buf= tmp[ii] (evaluation.getLast(),y);
    2625           buf /= Lc (buf);
    2626           tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
    2627         }
    2628         biFactors= CFList();
    2629         for (int j= 0; j < tmp2.size(); j++)
    2630           biFactors.append (tmp2[j]);
    2631       }
    2632     }
    2633   }
    2634 
    2635   CFListIterator iter;
     3096    changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2,
     3097                          uniFactors, v);
     3098
    26363099  CanonicalForm oldA= A;
    26373100  CFList oldBiFactors= biFactors;
    2638   if (!leadingCoeffs.getFirst().inCoeffDomain())
    2639   {
    2640     CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);
    2641     A *= tmp;
    2642     tmp= leadingCoeffs.getFirst();
    2643     iter= evaluation;
    2644     for (int i= A.level(); i > 2; i--, iter++)
    2645       tmp= tmp (iter.getItem(), i);
    2646     if (!tmp.inCoeffDomain())
    2647     {
    2648       for (CFListIterator i= biFactors; i.hasItem(); i++)
    2649       {
    2650         i.getItem() *= tmp/LC (i.getItem(), 1);
    2651         i.getItem() /= Lc (i.getItem());
    2652       }
    2653     }
    2654   }
    26553101
    26563102  CanonicalForm LCmultiplier= leadingCoeffs.getFirst();
     
    26583104  leadingCoeffs.removeFirst();
    26593105
     3106  if (!LCmultiplierIsConst)
     3107    distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier);
     3108
    26603109  //prepare leading coefficients
    26613110  CFList* leadingCoeffs2= new CFList [lengthAeval2];
    2662   prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors,
    2663                         evaluation);
    2664 
    2665   Aeval= evaluateAtEval (A, evaluation, 2);
    2666   CanonicalForm hh= 1/Lc (Aeval.getFirst());
    2667   for (iter= Aeval; iter.hasItem(); iter++)
    2668     iter.getItem() *= hh;
    2669 
    2670   A *= hh;
    2671 
    2672 
    2673   CFListIterator iter2;
     3111  prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), leadingCoeffs,
     3112                        biFactors, evaluation);
     3113
     3114  CFListIterator iter;
    26743115  CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1];
    26753116  bufBiFactors= biFactors;
    26763117  bufA= A;
    2677   CanonicalForm bufLCmultiplier= LCmultiplier;
    2678   CanonicalForm testVars;
     3118  CanonicalForm testVars, bufLCmultiplier= LCmultiplier;
    26793119  if (!LCmultiplierIsConst)
    26803120  {
     
    27523192      LCheuristic= true;
    27533193      factors= oldFactors;
    2754       CanonicalForm cont;
    27553194      CFList contents, LCs;
    2756       int index=1;
    27573195      bool foundTrueMultiplier= false;
    2758       for (iter= factors; iter.hasItem(); iter++, index++)
    2759       {
    2760         cont= content (iter.getItem(), 1);
    2761         cont= gcd (cont , LCmultiplier);
    2762         contents.append (cont);
    2763         if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there
    2764         {
    2765           foundTrueMultiplier= true;
    2766           int index2= 1;
    2767           for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++,
    2768                                                                     index2++)
    2769           {
    2770             if (index2 == index)
    2771               continue;
    2772             iter2.getItem() /= LCmultiplier;
    2773           }
     3196      LCHeuristic2 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1],
     3197                    contents, LCs, foundTrueMultiplier);
     3198      if (foundTrueMultiplier)
     3199      {
    27743200          A= oldA;
    27753201          leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
    27763202          for (int i= lengthAeval2-1; i > -1; i--)
    27773203            leadingCoeffs2[i]= CFList();
    2778           prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs,
    2779                                 biFactors, evaluation );
    2780           Aeval= evaluateAtEval (A, evaluation, 2);
    2781 
    2782           hh= 1/Lc (Aeval.getFirst());
    2783 
    2784           for (iter2= Aeval; iter2.hasItem(); iter2++)
    2785             iter2.getItem() *= hh;
    2786 
    2787           A *= hh;
    2788           break;
    2789         }
    2790         else
    2791           LCs.append (LC (iter.getItem()/cont, 1));
    2792       }
    2793       if (!foundTrueMultiplier)
    2794       {
    2795         index= 1;
    2796         iter2= factors;
     3204          prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),
     3205                                leadingCoeffs, biFactors, evaluation);
     3206      }
     3207      else
     3208      {
    27973209        bool foundMultiplier= false;
    2798         for (iter= contents; iter.hasItem(); iter++, iter2++, index++)
    2799         {
    2800           if (fdivides (iter.getItem(), LCmultiplier))
    2801           {
    2802             if ((LCmultiplier/iter.getItem()).inCoeffDomain() &&
    2803                 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff
    2804             {
    2805               Variable xx= Variable (2);
    2806               CanonicalForm vars;
    2807               vars= power (xx, degree (LC (getItem(oldBiFactors, index),1),
    2808                                         xx));
    2809               for (int i= 0; i < lengthAeval2; i++)
    2810               {
    2811                 if (oldAeval[i].isEmpty())
    2812                   continue;
    2813                 xx= oldAeval[i].getFirst().mvar();
    2814                 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1),
    2815                                            xx));
    2816               }
    2817               if (vars.level() <= 2)
    2818               {
    2819                 int index2= 1;
    2820                 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1];
    2821                      iter3.hasItem(); iter3++, index2++)
    2822                 {
    2823                   if (index2 == index)
    2824                   {
    2825                     iter3.getItem() /= LCmultiplier;
    2826                     break;
    2827                   }
    2828                 }
    2829                 A /= LCmultiplier;
    2830                 foundMultiplier= true;
    2831                 iter.getItem()= 1;
    2832               }
    2833             }
    2834           }
    2835         }
     3210        LCHeuristic3 (LCmultiplier, factors, oldBiFactors, contents, oldAeval,
     3211                      A, leadingCoeffs2, lengthAeval2, foundMultiplier);
     3212
    28363213        // coming from above: divide out more LCmultiplier if possible
    28373214        if (foundMultiplier)
    28383215        {
    28393216          foundMultiplier= false;
    2840           index=1;
    2841           iter2= factors;
    2842           for (iter= contents; iter.hasItem(); iter++, iter2++, index++)
    2843           {
    2844             if (!iter.getItem().isOne() &&
    2845                 fdivides (iter.getItem(), LCmultiplier))
    2846             {
    2847               if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff
    2848               {
    2849                 int index2= 1;
    2850                 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    2851                      iter2++, index2++)
    2852                 {
    2853                   if (index2 == index)
    2854                   {
    2855                     iter2.getItem() /= iter.getItem();
    2856                     foundMultiplier= true;
    2857                     break;
    2858                   }
    2859                 }
    2860                 A /= iter.getItem();
    2861                 LCmultiplier /= iter.getItem();
    2862                 iter.getItem()= 1;
    2863               }
    2864               else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff
    2865               {
    2866                 //TODO maybe use a sqrffree decomposition of LCmultiplier as below
    2867                 Variable xx= Variable (2);
    2868                 CanonicalForm vars;
    2869                 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1),
    2870                                           xx));
    2871                 for (int i= 0; i < lengthAeval2; i++)
    2872                 {
    2873                   if (oldAeval[i].isEmpty())
    2874                     continue;
    2875                   xx= oldAeval[i].getFirst().mvar();
    2876                   vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1),
    2877                                              xx));
    2878                 }
    2879                 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1))
    2880                     /myGetVars (LCmultiplier) == vars)
    2881                 {
    2882                   int index2= 1;
    2883                   for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    2884                        iter2++, index2++)
    2885                   {
    2886                     if (index2 == index)
    2887                     {
    2888                       iter2.getItem() /= LCmultiplier;
    2889                       foundMultiplier= true;
    2890                       break;
    2891                     }
    2892                   }
    2893                   A /= LCmultiplier;
    2894                   iter.getItem()= 1;
    2895                 }
    2896               }
    2897             }
    2898           }
     3217          LCHeuristic4 (oldBiFactors, oldAeval, contents, factors, testVars,
     3218                        lengthAeval2, leadingCoeffs2, A, LCmultiplier,
     3219                        foundMultiplier);
    28993220        }
    29003221        else
    29013222        {
    2902           CanonicalForm pLCs= prod (LCs);
    2903           if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A
    2904           {
    2905             A= oldA;
    2906             iter2= leadingCoeffs2[lengthAeval2-1];
    2907             for (iter= contents; iter.hasItem(); iter++, iter2++)
    2908               iter2.getItem() /= iter.getItem();
    2909             foundMultiplier= true;
    2910           }
     3223          LCHeuristicCheck (LCs, contents, A, oldA,
     3224                            leadingCoeffs2[lengthAeval2-1], foundMultiplier);
    29113225          if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars))
    29123226          {
    2913             Variable xx;
    2914             CFList vars1;
    2915             CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    2916             if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    2917               sqrfMultiplier.removeFirst();
    2918             sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    2919             xx= Variable (2);
    2920             for (iter= oldBiFactors; iter.hasItem(); iter++)
    2921               vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    2922             for (int i= 0; i < lengthAeval2; i++)
    2923             {
    2924               if (oldAeval[i].isEmpty())
    2925                 continue;
    2926               xx= oldAeval[i].getFirst().mvar();
    2927               iter2= vars1;
    2928               for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    2929                 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx));
    2930             }
    2931             CanonicalForm tmp;
    2932             iter2= vars1;
    2933             for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++,
    2934                                                                     iter2++)
    2935             {
    2936               tmp= iter.getItem()/LCmultiplier;
    2937               for (int i=1; i <= tmp.level(); i++)
    2938               {
    2939                 if (degree(tmp,i) > 0 &&
    2940                     (degree(iter2.getItem(),i) > degree (tmp,i)))
    2941                   iter2.getItem() /= power (Variable (i), degree (tmp,i));
    2942               }
    2943             }
    2944             int multi;
    2945             for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    2946             {
    2947               multi= 0;
    2948               for (iter= vars1; iter.hasItem(); iter++)
    2949               {
    2950                 tmp= iter.getItem();
    2951                 while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    2952                 {
    2953                   multi++;
    2954                   tmp /= myGetVars (ii.getItem().factor());
    2955                 }
    2956               }
    2957               if (multi == ii.getItem().exp())
    2958               {
    2959                 index= 1;
    2960                 for (iter= vars1; iter.hasItem(); iter++, index++)
    2961                 {
    2962                   while (fdivides (myGetVars(ii.getItem().factor()),
    2963                                    iter.getItem()
    2964                                   )
    2965                         )
    2966                   {
    2967                     int index2= 1;
    2968                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    2969                          iter2++, index2++)
    2970                     {
    2971                       if (index2 == index)
    2972                         continue;
    2973                       else
    2974                       {
    2975                         tmp= ii.getItem().factor();
    2976                         iter2.getItem() /= tmp;
    2977                         CFListIterator iter3= evaluation;
    2978                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    2979                           tmp= tmp (iter3.getItem(), jj);
    2980                         if (!tmp.inCoeffDomain())
    2981                         {
    2982                           int index3= 1;
    2983                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    2984                                                                   index3++)
    2985                           {
    2986                             if (index3 == index2)
    2987                             {
    2988                               iter3.getItem() /= tmp;
    2989                               iter3.getItem() /= Lc (iter3.getItem());
    2990                               break;
    2991                             }
    2992                           }
    2993                         }
    2994                         A /= ii.getItem().factor();
    2995                       }
    2996                     }
    2997                     iter.getItem() /= getVars (ii.getItem().factor());
    2998                   }
    2999                 }
    3000               }
    3001               else
    3002               {
    3003                 index= 1;
    3004                 for (iter= vars1; iter.hasItem(); iter++, index++)
    3005                 {
    3006                   if (!fdivides (myGetVars (ii.getItem().factor()),
    3007                                  iter.getItem()
    3008                                 )
    3009                      )
    3010                   {
    3011                     int index2= 1;
    3012                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    3013                          iter2++, index2++)
    3014                     {
    3015                       if (index2 == index)
    3016                       {
    3017                         tmp= power (ii.getItem().factor(), ii.getItem().exp());
    3018                         iter2.getItem() /= tmp;
    3019                         A /= tmp;
    3020                         CFListIterator iter3= evaluation;
    3021                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    3022                           tmp= tmp (iter3.getItem(), jj);
    3023                         if (!tmp.inCoeffDomain())
    3024                         {
    3025                           int index3= 1;
    3026                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    3027                                                                   index3++)
    3028                           {
    3029                             if (index3 == index2)
    3030                             {
    3031                               iter3.getItem() /= tmp;
    3032                               iter3.getItem() /= Lc (iter3.getItem());
    3033                               break;
    3034                             }
    3035                           }
    3036                         }
    3037                       }
    3038                     }
    3039                   }
    3040                 }
    3041               }
    3042             }
     3227            LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     3228                         lengthAeval2, evaluation, oldBiFactors);
    30433229          }
    30443230        }
     
    30483234        for (int i= lengthAeval2-1; i > -1; i--)
    30493235          leadingCoeffs2[i]= CFList();
    3050         prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors,
    3051                               evaluation);
    3052         Aeval= evaluateAtEval (A, evaluation, 2);
    3053 
    3054         hh= 1/Lc (Aeval.getFirst());
    3055 
    3056         for (CFListIterator i= Aeval; i.hasItem(); i++)
    3057           i.getItem() *= hh;
    3058 
    3059         A *= hh;
     3236        prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs,
     3237                              biFactors, evaluation);
    30603238      }
    30613239      factors= CFList();
     
    30803258  {
    30813259    LCheuristic= true;
    3082     int index;
    3083     Variable xx;
    3084     CFList vars1;
    3085     CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    3086     if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    3087       sqrfMultiplier.removeFirst();
    3088     sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    3089     xx= Variable (2);
    3090     for (iter= oldBiFactors; iter.hasItem(); iter++)
    3091       vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    3092     for (int i= 0; i < lengthAeval2; i++)
    3093     {
    3094       if (oldAeval[i].isEmpty())
    3095         continue;
    3096       xx= oldAeval[i].getFirst().mvar();
    3097       iter2= vars1;
    3098       for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    3099         iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
    3100     }
    3101     CanonicalForm tmp;
    3102     iter2= vars1;
    3103     for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++)
    3104     {
    3105       tmp= iter.getItem()/LCmultiplier;
    3106       for (int i=1; i <= tmp.level(); i++)
    3107       {
    3108         if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i)))
    3109           iter2.getItem() /= power (Variable (i), degree (tmp,i));
    3110       }
    3111     }
    3112     int multi;
    3113     for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    3114     {
    3115       multi= 0;
    3116       for (iter= vars1; iter.hasItem(); iter++)
    3117       {
    3118         tmp= iter.getItem();
    3119         while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    3120         {
    3121           multi++;
    3122           tmp /= myGetVars (ii.getItem().factor());
    3123         }
    3124       }
    3125       if (multi == ii.getItem().exp())
    3126       {
    3127         index= 1;
    3128         for (iter= vars1; iter.hasItem(); iter++, index++)
    3129         {
    3130           while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    3131           {
    3132             int index2= 1;
    3133             for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();iter2++,
    3134                                                                       index2++)
    3135             {
    3136               if (index2 == index)
    3137                 continue;
    3138               else
    3139               {
    3140                 tmp= ii.getItem().factor();
    3141                 iter2.getItem() /= tmp;
    3142                 CFListIterator iter3= evaluation;
    3143                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    3144                   tmp= tmp (iter3.getItem(), jj);
    3145                 if (!tmp.inCoeffDomain())
    3146                 {
    3147                   int index3= 1;
    3148                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    3149                   {
    3150                     if (index3 == index2)
    3151                     {
    3152                       iter3.getItem() /= tmp;
    3153                       iter3.getItem() /= Lc (iter3.getItem());
    3154                       break;
    3155                     }
    3156                   }
    3157                 }
    3158                 A /= ii.getItem().factor();
    3159               }
    3160             }
    3161             iter.getItem() /= getVars (ii.getItem().factor());
    3162           }
    3163         }
    3164       }
    3165       else
    3166       {
    3167         index= 1;
    3168         for (iter= vars1; iter.hasItem(); iter++, index++)
    3169         {
    3170           if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    3171           {
    3172             int index2= 1;
    3173             for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++,
    3174                                                                       index2++)
    3175             {
    3176               if (index2 == index)
    3177               {
    3178                 tmp= power (ii.getItem().factor(), ii.getItem().exp());
    3179                 iter2.getItem() /= tmp;
    3180                 A /= tmp;
    3181                 CFListIterator iter3= evaluation;
    3182                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    3183                   tmp= tmp (iter3.getItem(), jj);
    3184                 if (!tmp.inCoeffDomain())
    3185                 {
    3186                   int index3= 1;
    3187                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    3188                   {
    3189                     if (index3 == index2)
    3190                     {
    3191                       iter3.getItem() /= tmp;
    3192                       iter3.getItem() /= Lc (iter3.getItem());
    3193                       break;
    3194                     }
    3195                   }
    3196                 }
    3197               }
    3198             }
    3199           }
    3200         }
    3201       }
    3202     }
     3260    LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     3261                 lengthAeval2, evaluation, oldBiFactors);
    32033262
    32043263    leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
    32053264    for (int i= lengthAeval2-1; i > -1; i--)
    32063265      leadingCoeffs2[i]= CFList();
    3207     prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors,
    3208                           evaluation);
    3209     Aeval= evaluateAtEval (A, evaluation, 2);
    3210 
    3211     hh= 1/Lc (Aeval.getFirst());
    3212 
    3213     for (CFListIterator i= Aeval; i.hasItem(); i++)
    3214       i.getItem() *= hh;
    3215 
    3216     A *= hh;
     3266    prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),leadingCoeffs,
     3267                          biFactors, evaluation);
    32173268
    32183269    if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1])))
     
    32833334  if (noOneToOne)
    32843335  {
    3285 
    32863336    if (!LCmultiplierIsConst && LCheuristic)
    32873337    {
  • factory/facFqFactorize.h

    rd826a8 r71a4d7  
    608608/// normalize precomputed leading coefficients such that leading coefficients
    609609/// evaluated at @a evaluation in K^(n-2) equal the leading coeffs wrt
    610 /// Variable(1) of bivariate factors
    611 void
    612 prepareLeadingCoeffs (CFList*& LCs,               ///<[in,out]
     610/// Variable(1) of bivariate factors and change @a A and @a Aeval accordingly
     611void
     612prepareLeadingCoeffs (CFList*& LCs,               ///<[in,out]
     613                      CanonicalForm& A,           ///<[in,out]
     614                      CFList& Aeval,              ///<[in,out]
    613615                      int n,                      ///<[in] level of poly to be
    614616                                                  ///< factored
     
    684686                       );
    685687
     688/// changes the second variable to be @a w and updates all relevant data
     689void
     690changeSecondVariable (CanonicalForm& A,        ///<[in,out] a multivariate poly
     691                      CFList& biFactors,       ///<[in,out] bivariate factors
     692                      CFList& evaluation,      ///<[in,out] evaluation point
     693                      CFList*& oldAeval,       ///<[in,out] old bivariate factors
     694                                               ///< wrt. different second vars
     695                      int lengthAeval2,        ///<[in] length of oldAeval
     696                      const CFList& uniFactors,///<[in] univariate factors
     697                      const Variable& w        ///<[in] some variable
     698                     );
     699
     700/// distributes a divisor LCmultiplier of LC(A,1) on the bivariate factors and
     701/// the precomputed leading coefficients
     702void
     703distributeLCmultiplier (CanonicalForm& A,               ///<[in,out] some poly
     704                        CFList& leadingCoeffs,          ///<[in,out] leading
     705                                                        ///< coefficients
     706                        CFList& biFactors,              ///<[in,out] bivariate
     707                                                        ///< factors
     708                        const CFList& evaluation,       ///<[in] eval. point
     709                        const CanonicalForm& LCmultipler///<[in] multiplier
     710                       );
     711
     712/// heuristic to distribute @a LCmultiplier onto factors based on the variables
     713/// that occur in @a LCmultiplier and in the leading coeffs of bivariate factors
     714void
     715LCHeuristic (CanonicalForm& A,                 ///<[in,out] a poly
     716             const CanonicalForm& LCmultiplier,///<[in,out] divisor of LC (A,1)
     717             CFList& biFactors,                ///<[in,out] bivariate factors
     718             CFList*& leadingCoeffs,           ///<[in,out] leading coeffs
     719             const CFList* oldAeval,           ///<[in] bivariate factors wrt.
     720                                               ///< different second vars
     721             int lengthAeval,                  ///<[in] length of oldAeval
     722             const CFList& evaluation,         ///<[in] evaluation point
     723             const CFList& oldBiFactors        ///<[in] bivariate factors
     724                                               ///< without LCmultiplier
     725                                               ///< distributed on them
     726            );
     727
     728/// checks if prod(LCs)==LC (oldA,1) and if so divides elements of leadingCoeffs
     729/// by elements in contents, sets A to oldA and sets foundTrueMultiplier to true
     730void
     731LCHeuristicCheck (const CFList& LCs,        ///<[in] leading coeffs computed
     732                  const CFList& contents,   ///<[in] content of factors
     733                  CanonicalForm& A,         ///<[in,out] oldA*LCmultiplier^m
     734                  const CanonicalForm& oldA,///<[in] some poly
     735                  CFList& leadingCoeffs,    ///<[in,out] leading coefficients
     736                  bool& foundTrueMultiplier ///<[in,out] success?
     737                 );
     738
     739/// heuristic to distribute @a LCmultiplier onto factors based on the contents
     740/// of @a factors. @a factors are assumed to come from LucksWangSparseHeuristic.
     741/// If not successful @a contents will contain the content of each element of @a
     742/// factors and @a LCs will contain the LC of each element of @a factors divided
     743/// by its content
     744void
     745LCHeuristic2 (const CanonicalForm& LCmultiplier,///<[in] divisor of LC (A,1)
     746              const CFList& factors,            ///<[in] result of
     747                                                ///< LucksWangSparseHeuristic
     748              CFList& leadingCoeffs,            ///<[in,out] leading coeffs
     749              CFList& contents,                 ///<[in,out] content of factors
     750              CFList& LCs,                      ///<[in,out] LC of factors
     751                                                ///< divided by content of
     752                                                ///< factors
     753              bool& foundTrueMultiplier         ///<[in,out] success?
     754             );
     755
     756/// heuristic to remove @a LCmultiplier from a factor based on the contents
     757/// of @a factors. @a factors are assumed to come from LucksWangSparseHeuristic.
     758void
     759LCHeuristic3 (const CanonicalForm& LCmultiplier,///<[in] divisor of LC (A,1)
     760              const CFList& factors,            ///<[in] result of
     761                                                ///< LucksWangSparseHeuristic
     762              const CFList& oldBiFactors,       ///<[in] bivariate factors
     763                                                ///< without LCmultiplier
     764                                                ///< distributed on them
     765              const CFList& contents,           ///<[in] content of factors
     766              const CFList* oldAeval,           ///<[in] bivariate factors wrt.
     767                                                ///< different second vars
     768              CanonicalForm& A,                 ///<[in,out] poly
     769              CFList*& leadingCoeffs,           ///<[in,out] leading coeffs
     770              int lengthAeval,                  ///<[in] length of oldAeval
     771              bool& foundMultiplier             ///<[in,out] success?
     772             );
     773
     774/// heuristic to remove factors of @a LCmultiplier from @a factors.
     775/// More precisely checks if elements of @a contents divide @a LCmultiplier.
     776/// Assumes LCHeuristic3 is run before it and was successful.
     777void
     778LCHeuristic4 (const CFList& oldBiFactors,   ///<[in] bivariate factors
     779                                            ///< without LCmultiplier
     780                                            ///< distributed on them
     781              const CFList* oldAeval,       ///<[in] bivariate factors wrt.
     782                                            ///< different second vars
     783              const CFList& contents,       ///<[in] content of factors
     784              const CFList& factors,        ///<[in] result of
     785                                            ///< LucksWangSparseHeuristic
     786              const CanonicalForm& testVars,///<[in] product of second vars that
     787                                            ///< occur among oldAeval
     788              int lengthAeval,              ///<[in] length of oldAeval
     789              CFList*& leadingCoeffs,       ///<[in,out] leading coeffs
     790              CanonicalForm& A,             ///<[in,out] poly
     791              CanonicalForm& LCmultiplier,  ///<[in,out] divisor of LC (A,1)
     792              bool& foundMultiplier         ///<[in] success?
     793             );
     794
    686795#endif
    687796/* FAC_FQ_FACTORIZE_H */
  • factory/facHensel.cc

    rd826a8 r71a4d7  
    918918    M (j + 1, 1)= mulNTL (bufFactors[0] [j], bufFactors[1] [j], b);
    919919  CanonicalForm uIZeroJ;
    920   if (j == 1)
    921   {
    922     if (degBuf0 > 0 && degBuf1 > 0)
    923       uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]),
    924                   (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1);
    925     else if (degBuf0 > 0)
    926       uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b);
    927     else if (degBuf1 > 0)
    928       uIZeroJ= mulNTL (bufFactors[0], buf[1], b);
    929     else
    930       uIZeroJ= 0;
    931     if (b.getp() != 0)
    932       uIZeroJ= b (uIZeroJ);
    933     Pi [0] += xToJ*uIZeroJ;
    934     if (b.getp() != 0)
    935       Pi [0]= b (Pi[0]);
    936   }
     920
     921  if (degBuf0 > 0 && degBuf1 > 0)
     922    uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]),
     923                    (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1);
     924  else if (degBuf0 > 0)
     925    uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b);
     926  else if (degBuf1 > 0)
     927    uIZeroJ= mulNTL (bufFactors[0], buf[1], b);
    937928  else
    938   {
    939     if (degBuf0 > 0 && degBuf1 > 0)
    940       uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]),
    941                   (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1);
    942     else if (degBuf0 > 0)
    943       uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b);
    944     else if (degBuf1 > 0)
    945       uIZeroJ= mulNTL (bufFactors[0], buf[1], b);
    946     else
    947       uIZeroJ= 0;
    948     if (b.getp() != 0)
    949       uIZeroJ= b (uIZeroJ);
    950     Pi [0] += xToJ*uIZeroJ;
    951     if (b.getp() != 0)
    952       Pi [0]= b (Pi[0]);
    953   }
     929    uIZeroJ= 0;
     930  if (b.getp() != 0)
     931    uIZeroJ= b (uIZeroJ);
     932  Pi [0] += xToJ*uIZeroJ;
     933  if (b.getp() != 0)
     934    Pi [0]= b (Pi[0]);
     935
    954936  CFArray tmp= CFArray (factors.length() - 1);
    955937  for (k= 0; k < factors.length() - 1; k++)
     
    14451427    M (j + 1, 1)= mulMod (bufFactors[0] [j], bufFactors[1] [j], MOD);
    14461428  CanonicalForm uIZeroJ;
    1447   if (j == 1)
    1448   {
    1449     if (degBuf0 > 0 && degBuf1 > 0)
    1450       uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]),
     1429
     1430  if (degBuf0 > 0 && degBuf1 > 0)
     1431    uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]),
    14511432                  (bufFactors[1] [0] + buf[1]), MOD) - M(1, 1) - M(j + 1, 1);
    1452     else if (degBuf0 > 0)
    1453       uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD);
    1454     else if (degBuf1 > 0)
    1455       uIZeroJ= mulMod (bufFactors[0], buf[1], MOD);
    1456     else
    1457       uIZeroJ= 0;
    1458     Pi [0] += xToJ*uIZeroJ;
    1459   }
     1433  else if (degBuf0 > 0)
     1434    uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD);
     1435  else if (degBuf1 > 0)
     1436    uIZeroJ= mulMod (bufFactors[0], buf[1], MOD);
    14601437  else
    1461   {
    1462     if (degBuf0 > 0 && degBuf1 > 0)
    1463       uIZeroJ= mulMod ((bufFactors[0] [0] + bufFactors[0] [j]),
    1464                   (bufFactors[1] [0] + buf[1]), MOD) - M(1, 1) - M(j + 1, 1);
    1465     else if (degBuf0 > 0)
    1466       uIZeroJ= mulMod (bufFactors[0] [j], bufFactors[1], MOD);
    1467     else if (degBuf1 > 0)
    1468       uIZeroJ= mulMod (bufFactors[0], buf[1], MOD);
    1469     else
    1470       uIZeroJ= 0;
    1471     Pi [0] += xToJ*uIZeroJ;
    1472   }
     1438    uIZeroJ= 0;
     1439  Pi [0] += xToJ*uIZeroJ;
    14731440
    14741441  CFArray tmp= CFArray (factors.length() - 1);
     
    18871854      uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]);
    18881855    else if (degBuf > 0)
    1889       uIZeroJ= mulNTL (Pi[l - 1], buf[1]);
     1856      uIZeroJ= mulNTL (Pi[l - 1], buf[l+1]);
    18901857    else
    18911858      uIZeroJ= 0;
     
    22702237      uIZeroJ= mulMod (uIZeroJ, bufFactors[l + 1], MOD);
    22712238    else if (degBuf > 0)
    2272       uIZeroJ= mulMod (Pi[l - 1], buf[1], MOD);
     2239      uIZeroJ= mulMod (Pi[l - 1], buf[l + 1], MOD);
    22732240    else
    22742241      uIZeroJ= 0;
  • factory/fac_ezgcd.cc

    rd826a8 r71a4d7  
    296296
    297297  CFList evaluation;
     298  long termEstimate= size (U);
    298299  for (int i= A.min(); i <= A.max(); i++)
     300  {
     301    if (!A[i].isZero())
     302    {
     303      termEstimate *= degree (U,i)*2;
     304      termEstimate /= 3;
     305    }
    299306    evaluation.append (A [i]);
     307  }
     308  if (termEstimate/getNumVars(U) > 500)
     309    return -1;
    300310  CFList UEval;
    301311  CanonicalForm shiftedU= myShift2Zero (U, UEval, evaluation);
     
    425435  int degF, degG, delta, t, count, maxeval;
    426436  REvaluation bt;
    427   bool gcdfound = false;
     437  int gcdfound = 0;
    428438  Variable x = Variable(1);
    429439  count= 0;
     
    470480    if(F.mvar()==G.mvar())
    471481      d*=gcd(F,G);
     482    else
     483      return N (d);
    472484    return N (d);
     485  }
     486  if ( F.isUnivariate())
     487  {
     488    g= content (G,G.mvar());
     489    return N(d*gcd(F,g));
     490  }
     491  if ( G.isUnivariate())
     492  {
     493    f= content (F,F.mvar());
     494    return N(d*gcd(G,f));
    473495  }
    474496
Note: See TracChangeset for help on using the changeset viewer.