[comp.os.minix] Booting Minix from 1.44m floppies

Peter_Van_Epp@cc.sfu.ca (01/10/90)

The following uue encoded shar file will allow Minix to be booted from 1.44m
3.5 inch floppies (and 1.2m AT floppies and 720k 3.5 floppies and last but
not least 360k 5.25 floppies) and has been booted succesfully from all of them!
I would characterize the mods as experimental at the moment (although I don't
forsee any changes to this part of things), there is a portability problem to
Minix ST due to the changes that has not been addressed here (but is easy to 
fix if required). A little history to explain why this was done, I have a
PS/2 model 55 at work that has only a 1.44m floppy and a 60m hard drive, and
neither 1.3 nor 1.5.0 could boot from a 1.44m floppy. In the course of modifying
bootblok.s to do that I discovered that 720k support depended on a hard coded
Prom address (bad news for people without that prom!) but that keeping the 
current test procedure (which involved seeking to track 64 to see if this is
a 720k drive) ground the heads on my 360k floppy when the rom table was 
replaced with a proper 720k table (probably why the rom table was there!).
To fix this (and to start addressing a similar problem in floppy.c!) I looked
at the data in the DOS boot sector (in Advanced MSDOS by Ray Duncan good book!).
and discovered that the total number of sectors, number of sectors per track,
and number of heads are written into offset 0x13 to 0x1B of the boot block.
I have now modified bootblok.s (here in source form since the cdif was 10k and
the source was 11k and change!), build.c and the makefile. The change involves
build reading the disk boot sector (meaning no more build to a file, sorry!)
, saveing the values in 0x13 to 0x1B, then, when patching the Minix sizes into
the boot block, also patch the disk values back into offset 0x13 to 0x1B (this
needs to be either conditional compiled out or the same space needs to be kept
free of code for the ST in order to use the same build for both neither of which
I have done so far!) At boot time, bootblok.s has been modified to read the 
total size of the disk from location 0x13 (put there by build) and checks that
it is one of 720, 1440, 2400, or 2800 sectors (360k etc.) and selects the 
correct parameter block for the floppy controller (or complains if the drive
doesn't match!). As mentioned, this code has been used to succesfully boot
all of these disks (and 720k in 1.44m drives but not 360k in 1.2m) and it all
seems to work. I intend to now look at doing the same thing to floppy.c and 
mkfs (to stop mkfs zeroing the boot block most likely) since I suspect that 
we should always be able to read the boot block from a floppy in at most 2
tries, we will then have hard information from the floppy, (to take care of
720k media in a 1.44m drive) and this both allow better error checking (we
know what the end block of this media is not the end block of the largest
media possible etc.) and may take less time to figure out what kind of floppy 
is in the drive. Here is the bootblok, build and makefile portion:     
--------------------- cut here -------------------------
table
 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
begin 644 boot.shar
M96-H;R!X("T@8G5I;&0N8RYC9&EF"G-E9" G+UY8+W,O+R\G(#X@8G5I;&0Nz
M8RYC9&EF(#P\("<O)PI8*BHJ("]U<W(O<W)C+S$N-5]B87-E+W1O;VQS+V)Uy
M:6QD+F,)5V5D($1E8R R-R R,3HP,3HP-R Q.3@Y"E@M+2T@+BXO=&]O;',Ox
M8G5I;&0N8PE&<FD@2F%N(" U(# P.C(U.C4X(#$Y.3 *6"HJ*BHJ*BHJ*BHJw
M*BHJ*@I8*BHJ(#(P+#0V("HJ*BH*6" @("H@069T97(@=&AE(&)O;W0@:6UAv
M9V4@:&%S(&)E96X@8G5I;'0L(&)U:6QD(&=O97,@8F%C:R!A;F0@;6%K97,@u
M<V5V97)A; I8(" @*B!P871C:&5S('1O('1H92!I;6%G92!F:6QE(&]R(&1It
M<VME='1E.@I8(" @*@I8(2 @*B @(" @(#$N(%1H92!L87-T(#0@=V]R9',@s
M;V8@=&AE(&)O;W0@8FQO8VL@87)E('-E="!A<R!F;VQL;W=S.@I8(" @*@D@r
M("!7;W)D(&%T(#4P-#H)3G5M8F5R(&]F('-E8W1O<G,@=&\@;&]A9 I8(" @q
M*@D@("!7;W)D(&%T(#4P-CH)1%,@=F%L=64@9F]R(')U;FYI;F<@9G-C:PI8p
M(" @*@D@("!7;W)D(&%T(#4P.#H)4$,@=F%L=64@9F]R('-T87)T:6YG(&9So
M8VL*6" @("H)(" @5V]R9"!A=" U,3 Z"4-3('9A;'5E(&9O<B!R=6YN:6YGn
M(&9S8VL*6" @("H*6"$@("H),BX@0G5I;&0@=W)I=&5S(&$@=&%B;&4@:6YTm
M;R!T:&4@9FER<W0@."!W;W)D<R!O9B!T:&4@:V5R;F5L)W,*6" @("H)(" @l
M9&%T82!S<&%C92X@($ET(&AA<R T(&5N=')I97,L('1H92!C<R!A;F0@9',@k
M=F%L=65S(&9O<B!E86-H"E@@(" J"2 @('!R;V=R86TN("!4:&4@:V5R;F5Lj
M(&YE961S('1H:7,@:6YF;W)M871I;VX@=&\@<G5N(&UM+"!F<RP@86YD"E@@i
M(" J"2 @(&EN:70N("!"=6EL9"!A;'-O('=R:71E<R!T:&4@:V5R;F5L)W,@h
M1%,@=F%L=64@:6YT;R!A9&1R97-S(#0*6" @("H)(" @;V8@=&AE(&ME<FYEg
M;"=S(%1%6%0@<V5G;65N="P@<V\@=&AE(&ME<FYE;"!C86X@<V5T(&ET<V5Lf
M9B!U<"X*6" @("H*6"$@("H@(" @(" S+B!4:&4@;W)I9VEN(&%N9"!S:7IEe
M(&]F('1H92!I;FET('!R;V=R86T@87)E('!A=&-H960@:6YT;R!B>71E<R Td
M+3D*6" @("H@(" @(" @("!O9B!T:&4@9FEL92!S>7-T96T@9&%T82!S<&%Cc
M92X@5&AE(&9I;&4@<WES=&5M(&YE961S('1H:7,*6" @("H@(" @(" @("!Ib
M;F9O<FUA=&EO;BP@86YD(&5X<&5C=',@=&\@9FEN9"!I="!H97)E+@I8(" @a
M*@I8(" @*B!"=6EL9"!I<R!C86QL960@8GDZ"E@@(" J"E@A(" J(" @(" @z
M8G5I;&0@8F]O=&)L;VL@:V5R;F5L(&UM(&9S(&EN:70@9G-C:R!I;6%G90I8y
M(2 @*@I8(2 @*B!T;R!G970@=&AE(')E<W5L=&EN9R!I;6%G92!O;G1O('1Hx
M92!F:6QE(")I;6%G92(N"E@@(" J+PI8(" *6" @+RH@36]D:69I960@8GD@w
M0G)U8V4@179A;G,L(#(Q($YO=B X."!T;R!L;V%D('-Y;6)O;"!T86)L97,@v
M9F]R(&1E8G5G9V5R+@I8+2TM(#(P+#4T("TM+2T*6" @("H@069T97(@=&AEu
M(&)O;W0@:6UA9V4@:&%S(&)E96X@8G5I;'0L(&)U:6QD(&=O97,@8F%C:R!At
M;F0@;6%K97,@<V5V97)A; I8(" @*B!P871C:&5S('1O('1H92!I;6%G92!Fs
M:6QE(&]R(&1I<VME='1E.@I8(" @*@I8(2 @*@DQ+B!4:&4@=&]T86P@<VEZr
M92!O9B!T:&4@9&ES:RP@;G5M8F5R(&]F('-E8W1O<G,@<&5R('1R86-K(&%Nq
M9"!T:&4@"E@A(" J"2 @(&YU;6)E<B!O9B!H96%D<R H86QL(&]B=&%I;F5Dp
M(&9R;VT@=&AE(&)O;W0@<V5C=&]R('=R:71T96X@8GD*6"$@("H)(" @9F]Ro
M;6%T('=H96X@=&AE(&1I<VL@=V%S(&9O<FUA='1E9"D@87)E('!A=&-H960@n
M:6YT;R!T:&4@8F]O= I8(2 @*@D@("!B;&]C:R H8F]O=&)L;VLN<R!K;F]Wm
M<R!T:&5Y(&%R92!T:&5R92$I(&%S(&9O;&QO=W,Z"E@A(" J"2 @(%=O<F0@l
M870@,3DZ(%1O=&%L('-I>F4@;V8@=&AE(&1I<VL@:6X@<V5C=&]R<PI8(2 @k
M*@D@("!7;W)D(&%T(#(T.B!396-T;W)S('!E<B!T<F%C:R!F;W(@=&AI<R!Dj
M:7-K"E@A(" J"2 @(%=O<F0@870@,C8Z($YU;6)E<B!O9B!H96%D<R!O;B!Ti
M:&ES(&1R:79E("AN;W0@8W5R<F5N=&QY('5S960A*0I8(2 @*@I8(2 @*B @h
M(" @(#(N(%1H92!L87-T(#0@=V]R9',@;V8@=&AE(&)O;W0@8FQO8VL@87)Eg
M('-E="!A<R!F;VQL;W=S.@I8(" @*@D@("!7;W)D(&%T(#4P-#H)3G5M8F5Rf
M(&]F('-E8W1O<G,@=&\@;&]A9 I8(" @*@D@("!7;W)D(&%T(#4P-CH)1%,@e
M=F%L=64@9F]R(')U;FYI;F<@9G-C:PI8(" @*@D@("!7;W)D(&%T(#4P.#H)d
M4$,@=F%L=64@9F]R('-T87)T:6YG(&9S8VL*6" @("H)(" @5V]R9"!A=" Uc
M,3 Z"4-3('9A;'5E(&9O<B!R=6YN:6YG(&9S8VL*6" @("H*6"$@("H),RX@b
M0G5I;&0@=W)I=&5S(&$@=&%B;&4@:6YT;R!T:&4@9FER<W0@."!W;W)D<R!Oa
M9B!T:&4@:V5R;F5L)W,*6" @("H)(" @9&%T82!S<&%C92X@($ET(&AA<R Tz
M(&5N=')I97,L('1H92!C<R!A;F0@9',@=F%L=65S(&9O<B!E86-H"E@@(" Jy
M"2 @('!R;V=R86TN("!4:&4@:V5R;F5L(&YE961S('1H:7,@:6YF;W)M871Ix
M;VX@=&\@<G5N(&UM+"!F<RP@86YD"E@@(" J"2 @(&EN:70N("!"=6EL9"!Aw
M;'-O('=R:71E<R!T:&4@:V5R;F5L)W,@1%,@=F%L=64@:6YT;R!A9&1R97-Sv
M(#0*6" @("H)(" @;V8@=&AE(&ME<FYE;"=S(%1%6%0@<V5G;65N="P@<V\@u
M=&AE(&ME<FYE;"!C86X@<V5T(&ET<V5L9B!U<"X*6" @("H*6"$@("H@(" @t
M(" T+B!4:&4@;W)I9VEN(&%N9"!S:7IE(&]F('1H92!I;FET('!R;V=R86T@s
M87)E('!A=&-H960@:6YT;R!B>71E<R T+3D*6" @("H@(" @(" @("!O9B!Tr
M:&4@9FEL92!S>7-T96T@9&%T82!S<&%C92X@5&AE(&9I;&4@<WES=&5M(&YEq
M961S('1H:7,*6" @("H@(" @(" @("!I;F9O<FUA=&EO;BP@86YD(&5X<&5Cp
M=',@=&\@9FEN9"!I="!H97)E+@I8(" @*@I8(" @*B!"=6EL9"!I<R!C86QLo
M960@8GDZ"E@@(" J"E@A(" J(" @(" @8G5I;&0@8F]O=&)L;VL@:V5R;F5Ln
M(&UM(&9S(&EN:70@9G-C:R O9&5V+V9D, I8(2 @*@I8(2 @*B!T;R!G970@m
M=&AE(')E<W5L=&EN9R!I;6%G92!O;G1O('1H92!F;&]P<'D@:6X@9')I=F4@l
M,2X*6" @("HO"E@@( I8(" O*B!-;V1I9FEE9"!B>2!"<G5C92!%=F%N<RP@k
M,C$@3F]V(#@X('1O(&QO860@<WEM8F]L('1A8FQE<R!F;W(@9&5B=6=G97(Nj
M"E@J*BHJ*BHJ*BHJ*BHJ*BH*6"HJ*B U,RPU." J*BHJ"E@M+2T@-C$L-S @i
M+2TM+0I8(" *6" @(" @0D1%(#@@1F5B(#@Y+B!#3$E#2U]325I%(#(U-B!Ih
M;G-T96%D(&]F(#$V+@I8(" @("!"1$4@,B!-87(@.#DN($-,24-+7U-)6D4@g
M86YD($-,24-+7U-(2494('9A<FEA8FQE<R!C;&EC:W-I>F4L(&-L:6-K7W-Hf
M:69T+@I8*R @(" *6"L@(" @4%9%(#8@2F%N(#DP+B!-;V1I9GD@=&\@<F5Te
M86EN('1H92!D:7-K('!A<F%M971E<B!V86QU97,@*')E860L('1H96X@<&%Td
M8V@*6"L@(" @(" @(" @(" @(" @("!I;G1O('1H92!B;V]T(&)L;V-K*2!Wc
M<FET=&5N('1O('1H92!D:7-K(&)Y(&9O<FUA="!T;R!T96QL"E@K(" @(" @b
M(" @(" @(" @(" @8F]O=&)L;VLN<R!T:&4@9F]R;6%T(&]F('1H92!D:7-Ka
M(&9O<B!B;V]T:6YG+@I8(" @*B\*6" @"E@@( I8*BHJ*BHJ*BHJ*BHJ*BHJz
M"E@J*BH@.#,L.#@@*BHJ*@I8+2TM(#DU+#$P." M+2TM"E@@("-D969I;F4@y
M4UE-7U!/4R U(" @(" @(" @(" @(" @+RH@=VAE<F4@:7,@<WEM('-I>F4@x
M:6X@:&5A9&5R("HO"E@@("-D969I;F4@4T507TE$7T))5" P>#(P(" @(" @w
M(" @+RH@8FET('1H870@=&5L;',@:68@9FEL92!I<R!S97!A<F%T92!)("8@v
M1" J+PI8(" *6"L@+RH@3V9F<V5T<R!I;G1O('1H92!B;V]T(&)L;V-K('=Hu
M97)E('1H92!D:7-K('!A<F%M971E<B!V86QU97,@<VAO=6QD(&)E( I8*R @t
M*B!R96%D(&9R;VT@86YD('=R:71T96X@=&\N"E@K(" J+PI8*R *6"L@(V1Es
M9FEN92!325I%7T]&1E-%5 DQ.0I8*R C9&5F:6YE(%-%0U1?3T9&4T54"3(Tr
M"E@K("-D969I;F4@2$5!1%]/1D93150),C8*6"L@"E@@("-I9F1E9B!-4T1/q
M4PI8(" C(&1E9FEN92!"4D5!1" T(" @(" @(" @(" @(" @("\J('9A;'5Ep
M(# @;65A;G,@05-#24D@<F5A9" J+PI8(" C96QS90I8*BHJ*BHJ*BHJ*BHJo
M*BHJ"E@J*BH@,3$P+#$Q-2 J*BHJ"E@M+2T@,3,P+#$T-2 M+2TM"E@@(" @n
M:6YT('-E<%]I9#L@(" @(" @(" @(" @(" @(" @+RH@,2!I9B!S97!A<F%Tm
M92P@,"!I9B!N;W0@*B\*6" @?2!S:7IE<UM04D]'4D%-4UT["E@@( I8*R!Sl
M=')U8W0@9&ES:U]P87)M<R!["E@K(" @=6YS:6=N960@9&ES:U]S:7IE.PD)k
M+RH@<VEZ92!O9B!D:7-K("AI;B!S96-T;W)S*2 @(" J+PI8*R @('5N<VEGj
M;F5D('-E8W1O<G-?=')A8VL["2\J(&YU;6)E<B!O9B!S96-T;W)S+W!E<B!Ti
M<F%C:R @*B\*6"L@("!U;G-I9VYE9"!N;U]H96%D<SL)"2\J(&YU;6)E<B!Oh
M9B!H96%D<R!O;B!D:7-K"2HO"E@K('T@8F]O=%]P87)M<SL*6"L@"E@K("\Jg
M("!-86-R;W,@=&\@<F5A9"!A;B!I;G1E9V5R('9A;'5E(&%T(&%N>2!O9F9Sf
M970@:6X@82!D:7-K(&)L;V-K("HO"E@K( I8*R C9&5F:6YE(&=E=%]I;G0He
M8G5F9BD)"2@H*BAB=69F("L@,2D@/#P@."D@?" H*F)U9F8@)B P>&9F*2D*d
M6"L@"E@@(&-H87(@*FYA;65;72 ]('LB7&YK97)N96PB+" B;6T@(" @(BP@c
M(F9S(" @("(L(")I;FET(" B+" B9G-C:R @(GT["E@@( I8("!M86EN*&%Rb
M9V,L(&%R9W8I"E@J*BHJ*BHJ*BHJ*BHJ*BH*6"HJ*B Q,C(L,3(Y("HJ*BH*a
M6" @"E@@(" @:68@*&%R9V,@(3T@4%)/1U)!35,K,RD@<&5X:70H(G-E=F5Nz
M(&9I;&4@;F%M97,@97AP96-T960N("(L("(B*3L*6" @"E@A(" @24]I;FETy
M*"D["0D)+RH@8VAE8VL@9F]R($1-06]V97)R=6X@*$1/4RD@*B\*6"$@("!Cx
M<F5A=&5?:6UA9V4H87)G=ELW72D[(" @(" @(" @(" @(" O*B!C<F5A=&4@w
M=&AE(&]U='!U="!F:6QE("HO"E@@( I8(" @("\J($=O(&=E="!T:&4@8F]Ov
M="!B;&]C:R!A;F0@8V]P>2!I="!T;R!T:&4@;W5T<'5T(&9I;&4@;W(@9&ESu
M:V5T=&4N("HO"E@@(" @8V]P>3$H87)G=ELQ72D["E@M+2T@,34R+#$V," Mt
M+2TM"E@@( I8(" @(&EF("AA<F=C("$](%!23T=204U3*S,I('!E>&ET*")Ss
M979E;B!F:6QE(&YA;65S(&5X<&5C=&5D+B B+" B(BD["E@@( I8(2 @($E/r
M:6YI="@I.PD)"0DO*B!C:&5C:R!F;W(@1$U!;W9E<G)U;B H1$]3*2 J+PI8q
M(2 @(&=E=%]D:7-K7W!A<FUS*"9B;V]T7W!A<FUS+&%R9W9;-UTI.R @+RH@p
M<F5A9"!T:&4@8F]O="!S96-T;W(@<&%R86UE=&5R<R J+PI8(2 @(&-R96%To
M95]I;6%G92AA<F=V6S==*3L)"2\J(&-R96%T92!T:&4@;W5T<'5T(&9I;&4@n
M*B\*6" @"E@@(" @+RH@1V\@9V5T('1H92!B;V]T(&)L;V-K(&%N9"!C;W!Ym
M(&ET('1O('1H92!O=71P=70@9FEL92!O<B!D:7-K971T92X@*B\*6" @("!Cl
M;W!Y,2AA<F=V6S%=*3L*6"HJ*BHJ*BHJ*BHJ*BHJ*@I8*BHJ(#$S,BPQ-3,@k
M*BHJ*@I8(" @(&9O<B H:2 ](# [(&D@/"!04D]'4D%-4SL@:2LK*2!C;W!Yj
M,BAI+"!A<F=V6VDK,ETI.PI8(" @(&9L=7-H*"D["E@@(" @<')I;G1F*"(@i
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @h
M("TM+2TM(" @(" @+2TM+2U<;B(I.PI8(2 C:69D968@4$-)6 I8(2 @('!Rg
M:6YT9B@B3W!E<F%T:6YG('-Y<W1E;2!S:7IE(" E,CEL9" @(" @("4U;'A<f
M;B(L(&-U;5]S:7IE+"!C=6U?<VEZ92D["E@A(" @<')I;G1F*")<;E1O=&%Le
M('-I>F4@:6YC;'5D:6YG(&9S8VL@:7,@)6QD+EQN(BP@86QL7W-I>F4I.PI8d
M(2 C96QS90I8(2 @('!R:6YT9B@B3W!E<F%T:6YG('-Y<W1E;2!S:7IE(" Ec
M,CE$(" @(" @)3587&XB+"!C=6U?<VEZ92P@8W5M7W-I>F4I.PI8(2 @('!Rb
M:6YT9B@B7&Y4;W1A;"!S:7IE(&EN8VQU9&EN9R!F<V-K(&ES("5$+EQN(BP@a
M86QL7W-I>F4I.PI8(2 C96YD:68*6"$@"E@A(" @+RH@36%K92!T:&4@=&ARz
M964@<&%T8VAE<R!T;R!T:&4@;W5T<'5T(&9I;&4@;W(@9&ES:V5T=&4N("HOy
M"E@A(" @<&%T8V@Q*&%L;%]S:7IE*3L*6" @("!P871C:#(H*3L*6" @("!Px
M871C:#,H*3L*6" @("!E>&ET*# I.PI8("!]"E@@( I8(" *6" @"E@@(&-Ow
M<'DQ*&9I;&5?;F%M92D*6" @8VAA<B J9FEL95]N86UE.PI8+2TM(#$V,RPQv
M.38@+2TM+0I8(" @(&9O<B H:2 ](# [(&D@/"!04D]'4D%-4SL@:2LK*2!Cu
M;W!Y,BAI+"!A<F=V6VDK,ETI.PI8(" @(&9L=7-H*"D["E@@(" @<')I;G1Ft
M*"(@(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @s
M(" @("TM+2TM(" @(" @+2TM+2U<;B(I.PI8(2 @('!R:6YT9B@B3W!E<F%Tr
M:6YG('-Y<W1E;2!S:7IE(" E,CEL9" @(" @("4U;'A<;B(L(&-U;5]S:7IEq
M+"!C=6U?<VEZ92D["E@A(" @<')I;G1F*")<;E1O=&%L('-I>F4@:6YC;'5Dp
M:6YG(&9S8VL@:7,@)6QD+EQN(BP@86QL7W-I>F4I.PI8(2 *6"$@(" O*B!-o
M86ME('1H92!T:')E92!P871C:&5S('1O('1H92!O=71P=70@9FEL92!O<B!Dn
M:7-K971T92X@*B\*6"$@("!P871C:#$H86QL7W-I>F4L)F)O;W1?<&%R;7,Im
M.PI8(" @('!A=&-H,B@I.PI8(" @('!A=&-H,R@I.PI8(" @(&5X:70H,"D[l
M"E@@('T*6" @"E@@( I8*R!G971?9&ES:U]P87)M<RAB;V]T7W!A<FUS+&9Ik
M;&4I"E@K('-T<G5C="!D:7-K7W!A<FUS("IB;V]T7W!A<FUS.PI8*R!C:&%Rj
M("IF:6QE.PI8*R!["E@K(" @8VAA<B!B=69F6U-%0U1/4E]325I%73L*6"L@i
M"E@K("-I9FYD968@35-$3U,*6"L@("!I9B H("AI;6%G92 ](&]P96XH9FELh
M92P@0E)%040I*2 \(# I('!E>&ET*")C86XG="!O<&5N("(L(&9I;&4I.PI8g
M*R C96YD:68*6"L@("!R96%D7V)L;V-K*" H=6YS:6=N960I(# L(&)U9F8If
M.PD*6"L@("!B;V]T7W!A<FUS+3YD:7-K7W-I>F4@(" @(#T@9V5T7VEN="@Fe
M8G5F9EM325I%7T]&1E-%5%TI.PI8*R @(&)O;W1?<&%R;7,M/G-E8W1O<G-?d
M=')A8VL@/2!G971?:6YT*"9B=69F6U-%0U1?3T9&4T5472D["E@K(" @8F]Oc
M=%]P87)M<RT^;F]?:&5A9',)(" @(#T@9V5T7VEN="@F8G5F9EM(14%$7T]&b
M1E-%5%TI.PI8*R C:69N9&5F($U31$]3"E@K(" @8VQO<V4@*&9I;&4I.PI8a
M*R C96YD:68)"E@K('T*6" @"E@@(&-O<'DQ*&9I;&5?;F%M92D*6" @8VAAz
M<B J9FEL95]N86UE.PI8*BHJ*BHJ*BHJ*BHJ*BHJ"E@J*BH@,C,V+#(T,B Jy
M*BHJ"E@@( I8(" @("\J(%!R:6YT(&$@;65S<V%G92!G:79I;F<@=&AE('!Rx
M;V=R86T@;F%M92!A;F0@<VEZ92P@97AC97!T(&9O<B!F<V-K+B J+PI8(" @w
M(&EF("AN=6T@/"!&4T-+*2![( I8(2 @(" @(" @('!R:6YT9B@B)7,@('1Ev
M>'0])35U("!D871A/24U=2 @8G-S/24U=2 @=&]T/24U1" @:&5X/24U6" @u
M)7-<;B(L"E@@(" @(" @(" @(" @(" @("!N86UE6VYU;5TL('1E>'1?8GETt
M97,L(&1A=&%?8GET97,L(&)S<U]B>71E<RP@=&]T7V)Y=&5S+ I8(" @(" @s
M(" @(" @(" @(" @=&]T7V)Y=&5S+" H<VEZ97-;;G5M72YS97!?:60@/R Br
M4V5P87)A=&4@22 F($0B(#H@(B(I*3L*6" @("!]"E@M+2T@,C<Y+#(X-2 Mq
M+2TM"E@@( I8(" @("\J(%!R:6YT(&$@;65S<V%G92!G:79I;F<@=&AE('!Rp
M;V=R86T@;F%M92!A;F0@<VEZ92P@97AC97!T(&9O<B!F<V-K+B J+PI8(" @o
M(&EF("AN=6T@/"!&4T-+*2![( I8(2 @(" @(" @('!R:6YT9B@B)7,@('1En
M>'0])35U("!D871A/24U=2 @8G-S/24U=2 @=&]T/24U;&0@(&AE>#TE-6QXm
M(" E<UQN(BP*6" @(" @(" @(" @(" @(" @(&YA;65;;G5M72P@=&5X=%]Bl
M>71E<RP@9&%T85]B>71E<RP@8G-S7V)Y=&5S+"!T;W1?8GET97,L"E@@(" @k
M(" @(" @(" @(" @("!T;W1?8GET97,L("AS:7IE<UMN=6U=+G-E<%]I9" _j
M(")397!A<F%T92!)("8@1"(@.B B(BDI.PI8(" @('T*6"HJ*BHJ*BHJ*BHJi
M*BHJ*@I8*BHJ(#0R,RPT,S@@*BHJ*@I8("!]"E@@( I8(" *6"$@<&%T8V@Qh
M*&%L;%]S:7IE*0I8(2!L;VYG(&%L;%]S:7IE.PI8(2!["E@A("\J(%!U="!Tg
M:&4@:7 @86YD(&-S('9A;'5E<R!F;W(@9G-C:R!I;B!T:&4@;&%S="!T=V\@f
M=V]R9',@;V8@=&AE(&)O;W0@8FQK+@I8(" @*B!)9B!F<V-K(&ES('-E<"!)e
M)D0@=V4@;75S="!A;'-O('!R;W9I9&4@=&AE(&1S+79A;'5E("AA9&1R+B Ud
M,#8I+@I8(" @*B!0=70@:6X@8F]O=&)L;VLM;V9F<V5T(#4P-"!T:&4@;G5Mc
M8F5R(&]F('-E8W1O<G,@=&\@;&]A9"X*6" @("HO"E@@( I8(" @(&QO;F<@b
M9G-C:U]O<F<["E@A(" @=6YS:6=N960@<VAO<G0@:7 L(&-S+"!D<RP@=6)Ua
M9EM314-43U)?4TE:12\R72P@<V5C=')S.PI8(" *6" @("!I9B H8W5M7W-Iz
M>F4@)2!C;&EC:W-I>F4@(3T@,"D*6" @"7!E>&ET*")-24Y)6"!I<R!N;W0@y
M;75L=&EP;&4@;V8@8VQI8VMS:7IE(&)Y=&5S(BP@(B(I.PI8+2TM(#0V-BPTx
M.#<@+2TM+0I8("!]"E@@( I8(" *6"$@<&%T8V@Q*&%L;%]S:7IE+&)O;W1?w
M<&%R;7,I"E@A(&QO;F<@86QL7W-I>F4["E@A('-T<G5C="!D:7-K7W!A<FUSv
M("IB;V]T7W!A<FUS.PI8(2!["E@A("\J(%!U="!T:&4@=&]T86P@;G5M8F5Ru
M(&]F('-E8W1O<G,@;VX@=&AE(&1I<VLL('1H92!N=6UB97(@;V8@<V5C=&]Rt
M<R!P97(*6"$@("H@=')A8VL@86YD('1H92!N=6UB97(@;V8@:&5A9',@;VX@s
M=&AE(&1I<VL@*&%L;"!O8G1A:6YE9"!F<F]M('1H92!B;V]T"E@A(" J(&)Lr
M;V-K(&]R:6=I;F%L;'D@=W)I='1E;B!W:&5N('1H92!D:7-K('=A<R!F;W)Mq
M871T960A*2!I;G1O('1H92!C;W)R96-T"E@A(" J(&QO8V%T:6]N<R!I;B!Tp
M:&4@8F]O="!B;&]C:RX*6"$@("H@4'5T('1H92!I<"!A;F0@8W,@=F%L=65So
M(&9O<B!F<V-K(&EN('1H92!L87-T('1W;R!W;W)D<R!O9B!T:&4@8F]O="!Bn
M;&LN"E@@(" J($EF(&9S8VL@:7,@<V5P($DF1"!W92!M=7-T(&%L<V\@<')Om
M=FED92!T:&4@9',M=F%L=64@*&%D9'(N(#4P-BDN"E@@(" J(%!U="!I;B!Bl
M;V]T8FQO:RUO9F9S970@-3 T('1H92!N=6UB97(@;V8@<V5C=&]R<R!T;R!Lk
M;V%D+@I8(" @*B\*6" @"E@@(" @;&]N9R!F<V-K7V]R9SL*6"$@("!U;G-Ij
M9VYE9"!S:&]R="!I<"P@8W,L(&1S+"!S96-T<G,["E@A(" @=6YS:6=N960@i
M8VAA<B!U8G5F6U-%0U1/4E]325I%73L@"E@@( I8(" @(&EF("AC=6U?<VEZh
M92 E(&-L:6-K<VEZ92 A/2 P*0I8(" )<&5X:70H(DU)3DE8(&ES(&YO="!Mg
M=6QT:7!L92!O9B!C;&EC:W-I>F4@8GET97,B+" B(BD["E@J*BHJ*BHJ*BHJf
M*BHJ*BH*6"HJ*B T-3 L-#8R("HJ*BH*6" @(" @(" K*W-E8W1R<SL*6" @e
M"E@@(" @<F5A9%]B;&]C:R@P+"!U8G5F*3L@(" @(" @(" @+RH@<F5A9"!Id
M;B!B;V]T(&)L;V-K("HO"E@A(" @=6)U9ELH4T5#5$]27U-)6D4O,BD@+2 Tc
M72 ]('-E8W1R<SL*6"$@("!U8G5F6RA314-43U)?4TE:12\R*2 M(#-=(#T@b
M9',["E@A(" @=6)U9ELH4T5#5$]27U-)6D4O,BD@+2 R72 ](&EP.PI8(2 @a
M('5B=69;*%-%0U1/4E]325I%+S(I("T@,5T@/2!C<SL*6" @("!W<FET95]Bz
M;&]C:R@P+"!U8G5F*3L*6" @?0I8(" *6" @<&%T8V@R*"D*6" @>PI8(" Oy
M*B!4:&ES('!R;V=R86T@;F]W(&AA<R!I;F9O<FUA=&EO;B!A8F]U="!T:&4@x
M<VEZ97,@;V8@=&AE(&ME<FYE;"P@;6TL(&9S+"!A;F0*6"TM+2 T.3DL-3(Tw
M("TM+2T*6" @(" @(" K*W-E8W1R<SL*6" @"E@@(" @<F5A9%]B;&]C:R@Pv
M+"!U8G5F*3L@(" @(" @(" @+RH@<F5A9"!I;B!B;V]T(&)L;V-K("HO"E@Au
M( I8(2 @('!U=%]I;G0H8F]O=%]P87)M<RT^9&ES:U]S:7IE+" F=6)U9EM3t
M25I%7T]&1E-%5%TI.PI8(2 @('!U=%]I;G0H8F]O=%]P87)M<RT^<V5C=&]Rs
M<U]T<F%C:RP@)G5B=69;4T5#5%]/1D93151=*3L*6"$@("!P=71?:6YT*&)Or
M;W1?<&%R;7,M/FYO7VAE861S+" F=6)U9EM(14%$7T]&1E-%5%TI.PI8(2 @q
M('!U=%]I;G0H<V5C=')S+" F=6)U9EM314-43U)?4TE:12 M(#A=*3L*6"$@p
M"E@A(" @<'5T7VEN="AD<RP@)G5B=69;4T5#5$]27U-)6D4@+2 V72D["E@Ao
M(" @<'5T7VEN="AI<"P@)G5B=69;4T5#5$]27U-)6D4@+2 T72D["E@A(" @n
M<'5T7VEN="AC<RP@)G5B=69;4T5#5$]27U-)6D4@+2 R72D["E@@(" @=W)Im
M=&5?8FQO8VLH,"P@=6)U9BD["E@@('T*6" @"E@K('!U=%]I;G0H=F%L=64Ll
M(&)U9F9E<BD*6"L@:6YT('9A;'5E.PI8*R!U;G-I9VYE9"!C:&%R("IB=69Fk
M97(["E@K('L*6"L@"2IB=69F97(K*R ]('9A;'5E("8@,'AF9CL*6"L@"2IBj
M=69F97(@(" ]('9A;'5E(#X^(#@["E@K('T*6"L@"E@@('!A=&-H,B@I"E@@i
M('L*6" @+RH@5&AI<R!P<F]G<F%M(&YO=R!H87,@:6YF;W)M871I;VX@86)Oh
M=70@=&AE('-I>F5S(&]F('1H92!K97)N96PL(&UM+"!F<RP@86YD"E@J*BHJg
M*BHJ*BHJ*BHJ*BH*6"HJ*B V-S L-C@P("HJ*BH*6" @8VAA<B!B=69F,EM3f
M14-43U)?4TE:15T["E@@(&EN="!D<FEV93L*6" @"E@A($E/:6YI="@I"0D)e
M+RH@8VAE8VL@:68@;F\@1$U!;W9E<G)U;B F(&%S<VEG;B!T:&4@8G5F9F5Rd
M("HO"E@A('L*6"$@("!I9B H1$U!;W9E<G)U;BAB=69F,2DI"E@A(" @(" @c
M8G5F9B ](&)U9F8R.PI8(2 @(&5L<V4*6" @(" @("!B=69F(#T@8G5F9C$[b
M"E@@('T*6" @"E@M+2T@-S,R+#<S.2 M+2TM"E@@(&-H87(@8G5F9C);4T5#a
M5$]27U-)6D5=.PI8("!I;G0@9')I=F4["E@@( I8(2!)3VEN:70H*0D)"2\Jz
M(&%S<VEG;B!T:&4@8G5F9F5R("HO"E@A('L*6" @(" @("!B=69F(#T@8G5Fy
M9C$["E@@('T*6" @"E@J*BHJ*BHJ*BHJ*BHJ*BH*6"HJ*B V.#DL-CDU("HJx
M*BH*6" @"E@@(" @<F5T<FEE<R ]($U!6%]215122453.PI8(" @(&1O"E@Aw
M(" @(" @(&5R<B ](&%B<W)E860@*&1R:79E+"!B;&]C:VYR+"!B=69F*3L*v
M6" @("!W:&EL92 H97)R("8F("TM<F5T<FEE<RD["E@@( I8(" @(&EF("@Au
M<F5T<FEE<RD*6"TM+2 W-#@L-S4T("TM+2T*6" @"E@@(" @<F5T<FEE<R ]t
M($U!6%]215122453.PI8(" @(&1O"E@A(" @(" @(&5R<B ](&%B<W)E860@s
M*&1R:79E+" Q+"!B;&]C:VYR+"!B=69F*3L*6" @("!W:&EL92 H97)R("8Fr
M("TM<F5T<FEE<RD["E@@( I8(" @(&EF("@A<F5T<FEE<RD*6"HJ*BHJ*BHJq
M*BHJ*BHJ*@I8*BHJ(#<Q-"PW,C @*BHJ*@I8(" *6" @("!R971R:65S(#T@p
M34%87U)%5%))15,["E@@(" @9&\*6"$@(" @(" @97)R(#T@86)S=W)I=&4@o
M*&1R:79E+"!B;&]C:VYR+"!B=69F*3L*6" @("!W:&EL92 H97)R("8F("TMn
M<F5T<FEE<RD["E@@( I8(" @(&EF("@A<F5T<FEE<RD*6"TM+2 W-S,L-S<Ym
M("TM+2T*6" @"E@@(" @<F5T<FEE<R ]($U!6%]215122453.PI8(" @(&1Ol
M"E@A(" @(" @(&5R<B ](&%B<W=R:71E("AD<FEV92P@,2P@8FQO8VMN<BP@k
M8G5F9BD["E@@(" @=VAI;&4@*&5R<B F)B M+7)E=')I97,I.PI8(" *6" @j
M("!I9B H(7)E=')I97,I"B\*96-H;R!X("T@;6%K969I;&4N8V1I9@IS960@i
M)R]>6"]S+R\O)R ^(&UA:V5F:6QE+F-D:68@/#P@)R\G"E@J*BH@+W5S<B]Sh
M<F,O,2XU7V)A<V4O=&]O;',O;6%K969I;&4)5V5D($1E8R R-R Q-CHU,#HSg
M," Q.3@Y"E@M+2T@+BXO=&]O;',O;6%K969I;&4)1G)I($IA;B @-2 P,#HUf
M.#HP." Q.3DP"E@J*BHJ*BHJ*BHJ*BHJ*BH*6"HJ*B T-BPU-B J*BHJ"E@@e
M(",@)VUA:V4@;F5T)R!D;V5S('1H92!S86UE('1H:6YG+"!O;FQY('=I=&@@d
M=&AE(&YE='=O<FMI;F<@8V]D92!F<F]M('1H90I8(" C("=A;6]E8F$@9&ERc
M96-T;W)Y(&EN8VQU9&5D"E@@(",*6"$@:6UA9V4Z"6)U:6QD(&)O;W1B;&]Kb
M( I8(2 )0&=E=&QF("));G-E<G0@8FQA;FL@9&ES:V5T=&4@:6X@9')I=F4@a
M,"!A;F0@:&ET(')E='5R;B(*6"$@"4!B=6EL9"!B;V]T8FQO:R N+B]K97)Nz
M96PO:V5R;F5L("XN+VUM+VUM("XN+V9S+V9S(&EN:70@9G-C:R!I;6%G90I8y
M(2 )0&-P(&EM86=E("]D978O9F0P"E@A( I8("!N970Z"6)U:6QD(&)O;W1Bx
M;&]K( I8(" )0&=E=&QF("));G-E<G0@8FQA;FL@9&ES:V5T=&4@:6X@9')Iw
M=F4@,"!A;F0@:&ET(')E='5R;B(*6" @"4!B=6EL9"!B;V]T8FQO:R N+B]Av
M;6]E8F$O:V5R;F5L+VME<FYE;" N+B]A;6]E8F$O;6TO;6T@7 I8+2TM(#0Vu
M+#4U("TM+2T*6" @(R G;6%K92!N970G(&1O97,@=&AE('-A;64@=&AI;F<Lt
M(&]N;'D@=VET:"!T:&4@;F5T=V]R:VEN9R!C;V1E(&9R;VT@=&AE"E@@(",@s
M)V%M;V5B82!D:7)E8W1O<GD@:6YC;'5D960*6" @(PI8(2!I;6%G93H)8G5Ir
M;&0@8F]O=&)L;VL@+BXO:V5R;F5L+VME<FYE;" N+B]M;2]M;2 N+B]F<R]Fq
M<R!I;FET(&9S8VL@"E@A( E 9V5T;&8@(DEN<V5R="!B;&%N:R!D:7-K971Tp
M92!I;B!D<FEV92 P(&%N9"!H:70@<F5T=7)N(@I8(2 )0&)U:6QD(&)O;W1Bo
M;&]K("XN+VME<FYE;"]K97)N96P@+BXO;6TO;6T@+BXO9G,O9G,@:6YI="!Fn
M<V-K("]D978O9F0P"E@A( D*6" @;F5T.@EB=6EL9"!B;V]T8FQO:R *6" @m
M"4!G971L9B B26YS97)T(&)L86YK(&1I<VME='1E(&EN(&1R:79E(# @86YDl
M(&AI="!R971U<FXB"E@@( E 8G5I;&0@8F]O=&)L;VL@+BXO86UO96)A+VMEk
M<FYE;"]K97)N96P@+BXO86UO96)A+VUM+VUM(%P*+PIE8VAO('@@+2!B;V]Tj
M8FQO:RYS"G-E9" G+UY8+W,O+R\G(#X@8F]O=&)L;VLN<R \/" G+R<*6'P@i
M5VAE;B!T:&4@4$,@:7,@<&]W97)E9"!O;BP@:70@<F5A9',@=&AE(&9I<G-Th
M(&)L;V-K(&9R;VT@=&AE(&9L;W!P>0I8?"!D:7-K(&EN=&\@861D<F5S<R Pg
M>#=#,# @86YD(&IU;7!S('1O(&ET+B @5&AI<R!B;V]T(&)L;V-K(&UU<W0@f
M8V]N=&%I;@I8?"!T:&4@8F]O="!P<F]G<F%M(&EN('1H:7,@9FEL92X@(%1He
M92!B;V]T('!R;V=R86T@9FER<W0@8V]P:65S(&ET<V5L9B!T;PI8?"!A9&1Rd
M97-S(#$Y,DL@+2 U,3(@*'1O(&=E="!I='-E;&8@;W5T(&]F('1H92!W87DIc
M+B @5&AE;B!I="!L;V%D<R!T:&4@"EA\(&]P97)A=&EN9R!S>7-T96T@9G)Ob
M;2!T:&4@8F]O="!D:7-K971T92!I;G1O(&UE;6]R>2P@86YD('1H96X@:G5Ma
M<',@=&\@9G-C:RX*6'P@3&]A9&EN9R!I<R!N;W0@=')I=FEA;"!B96-A=7-Ez
M('1H92!00R!I<R!U;F%B;&4@=&\@<F5A9"!A('1R86-K(&EN=&\*6'P@;65My
M;W)Y(&%C<F]S<R!A(#8T2R!B;W5N9&%R>2P@<V\@=&AE('!O<VET:6]N:6YGx
M(&]F(&5V97)Y=&AI;F<@:7,@8W)I=&EC86PN"EA\(%1H92!N=6UB97(@;V8@w
M<V5C=&]R<R!T;R!L;V%D(&ES(&-O;G1A:6YE9"!A="!A9&1R97-S(#4P-"!Ov
M9B!T:&ES(&)L;V-K+@I8?"!4:&4@=F%L=64@:7,@<'5T('1H97)E(&)Y('1Hu
M92!B=6EL9"!P<F]G<F%M(&%F=&5R(&ET(&AA<R!D:7-C;W9E<F5D(&AO=PI8t
M?"!B:6<@=&AE(&]P97)A=&EN9R!S>7-T96T@:7,N("!7:&5N('1H92!B;V]Ts
M8FQO:R!P<F]G<F%M(&ES(&9I;FES:&5D(&QO861I;F<L"EA\(&ET(&IU;7!Sr
M(&EN9&ER96-T;'D@=&\@=&AE('!R;V=R86T@*&9S8VLI('=H:6-H(&%D9')Eq
M<W,@:7,@9VEV96X@8GD@=&AE"EA\(&QA<W0@='=O('=O<F1S(&EN('1H92!Bp
M;V]T(&)L;V-K+B *6'P*6'P@4W5M;6%R>2!O9B!T:&4@=V]R9',@<&%T8VAEo
M9"!I;G1O('1H92!B;V]T(&)L;V-K(&)Y(&)U:6QD.@I8? I8?"!7;W)D(&%Tn
M(" Q.3H@(R!T;W1A;"!S96-T;W)S(&]N('1H92!D:7-K"EA\(%=O<F0@870@m
M(#(T.B C('-E8W1O<G,@<&5R('1R86-K"EA\(%=O<F0@870@(#(V.B C(&AEl
M861S(&]N(&1R:79E"EA\(%=O<F0@870@-3 T.B C('-E8W1O<G,@=&\@;&]Ak
M9 I8?"!7;W)D(&%T(#4P-CH@(R!$4R!V86QU92!F;W(@9G-C:PI8?"!7;W)Dj
M(&%T(#4P.#H@(R!00R!V86QU92!F;W(@9G-C:PI8?"!7;W)D(&%T(#4Q,#H@i
M(R!#4R!V86QU92!F;W(@9G-C:PI8? I8?"!4:&ES('9E<G-I;VX@;V8@=&AEh
M(&)O;W0@8FQO8VL@;75S="!B92!A<W-E;6)L960@=VET:&]U="!S97!A<F%Tg
M92!)("8@1 I8?"!S<&%C92X@( I8?" @(" *6'P@069T97(@;6]D:69I8V%Tf
M:6]N<R!D;R!A(&QS("UL(&)O;W1B;&]K+"!T:&4@<VEZ92!M=7-T(&)E(&QEe
M<W,@=&AA;B U,#0A"EA\"EA\($IA;B V(#$Y.3 Z($UO9&EF:65D('1O(&=Ed
M="!T:&4@9&ES:R!P87)A;65T97)S(&9R;VT@=&AE(&)O;W0@<V5C=&]R(&]Fc
M"EA\(" @(" @(" @(" @('1H92!D:7-K("AP=70@;VX@=&AE(&1I<VL@8GD@b
M=&AE(&9O<FUA="!P<F]G<F%M*2!T;R!A=F]I9 I8? D@(" @("!H879I;F<@a
M=&\@=')Y('1O(&9I9W5R92!O=70@=VAA="!K:6YD(&]F(&1I<VL@:7,@:6X@z
M=&AE( I8? D@(" @("!D<FEV92X@0V]R<F5S<&]N9&EN9R!M;V1I9FEC871Iy
M;VYS(&YE961E9"!I;B!B=6EL9"YC"EA\"2 @(" @(%!E=&5R(%9A;B!%<' *x
M6 I8"E@*6" @(" @(" @3$]!1%-%1R ](#!X,# V," @(" @(" @('P@:&5Rw
M92!T:&4@8F]O="!B;&]C:R!W:6QL('-T87)T(&QO861I;F<*6" @(" @(" @v
M0DE/4U-%1R ](#!X,#=#," @(" @(" @('P@:&5R92!T:&4@8F]O="!B;&]Cu
M:R!I='-E;&8@:7,@;&]A9&5D"E@@(" @(" @($)/3U1314<@/2 P>#)&13 @t
M(" @(" @("!\(&AE<F4@:70@=VEL;"!C;W!Y(&ET<V5L9B H,3DR2RTU,3)Bs
M*0I8(" @(" @("!$4TM"05-%(#T@,3(P(" @(" @(" @(" @?" Q,C @/2 Tr
M("H@,'@Q12 ]('!T<B!T;R!D:7-K('!A<F%M971E<G,*6 I89FEN86P@(" @q
M/2 U,#0*6&9S8VM?9',@(#T@-3 V"EAF<V-K7W!C(" ](#4P. I89G-C:U]Cp
M<R @/2 U,3 *6 I8"E@N9VQO8FP@8F5G=&5X="P@8F5G9&%T82P@8F5G8G-So
M+"!E;F1T97AT+"!E;F1D871A+"!E;F1B<W,@('P@87-L9"!N965D<R!T:&5Sn
M90I8+G1E>'0*6&)E9W1E>'0Z"E@N9&%T80I88F5G9&%T83H*6"YB<W,*6&)Em
M9V)S<SH*6"YT97AT"E@*6'P@8V]P>2!B;V]T8FQO8VL@=&\@8F]O='-E9PI8l
M(" @(" @("!M;W8@(" @(&%X+"-"24]34T5'"E@@(" @(" @(&UO=B @(" @k
M9',L87@*6" @(" @(" @>&]R(" @("!S:2QS:2 @(" @(" @(" @?"!D<SISj
M:2 M(&]R:6=I;F%L(&)L;V-K"E@@(" @(" @(&UO=B @(" @87@L(T)/3U13i
M14<*6" @(" @(" @;6]V(" @("!E<RQA> I8(" @(" @("!X;W(@(" @(&1Ih
M+&1I(" @(" @(" @("!\(&5S.F1I("T@;F5W(&)L;V-K"E@@(" @(" @(&UOg
M=B @(" @8W@L(S(U-B @(" @(" @('P@(R @=V]R9',@=&\@;6]V90I8"6IMf
M< EM;W9E"0E\(&)R86YC:"!A<F]U;F0@=&AE('-I>F4@<&%R86UE=&5R<PI8e
M"EA\(%1H92 Y(&)Y=&5S(&%T(&]F9G-E=" P>#$S(&EN('1H92!B;V]T('-Ed
M8W1O<B!A<F4@<F5S97)V960@9F]R('9A;'5E<PI8?"!F:6QL960@:6X@8GD@c
M8G5I;&0@=7-I;F<@=&AE('9A;'5E<R!F;W(@=&AE(&1I<VL@<&%R86UE=&5Rb
M<R!T:&%T('=E<F4*6'P@<V5T('=H96X@=&AE(&1I<VL@=V%S(&9O<FUA='1Ea
M9"!B>2!$3U,@*&]R(&$@36EN:7@@9F]R;6%T('!R;V=R86TA*2X@"EA\(%-Iz
M;F-E($1/4R!P=71S('1H92!V86QU97,@870@=&AE('-P96-I86P@;&]C871Iy
M;VYS('5S960@:&5R92P@8G5I;&0@9&]E<PI8?"!T:&4@<V%M92 H979E;B!Tx
M:&]U9V@@:70@;6%K97,@=&AE(&-O9&4@;65S<WDI('-O('1H870@8G5I;&0@w
M9&]E<VXG="!H879E"EA\('1O(&9I9W5R92!O=70@:68@=&AI<R!I<R!A($1/v
M4R!F;W)M871T960@9&ES:RP@;W(@86X@;VQD($UI;FEX(&1I<VLL(&ET"EA\u
M(&IU<W0@8V]P:65S('1H92!V86QU97,@9F]R('1H92 Y(&)Y=&5S(&9R;VT@t
M=&AE(&)O;W0@<V5C=&]R(&]F('1H92!D:7-K"EA\(&%N9"!P871C:&5S('1Hs
M96T@:6YT;R!T:&4@8F]O=&)L;VL@:6UA9V4@870@=&AE('-A;64@<&QA8V4@r
M=&AA="!$3U,@<'5T<PI8?"!T:&5M+B!!="!P<F5S96YT+"!T:&4@;G5M8F5Rq
M(&]F(&AE861S(&ES(&%S<W5M960@=&\@8F4@,B!S:6YC92!S:6YG;&4@<VEDp
M960*6'P@9&ES:W,@87)E(&YO="!S=7!P;W)T960N(%1H92!V86QU92!I<R!Ho
M97)E('1O(&%L;&]W('-U<'!O<G0@=&\@8F4@861D960@"EA\(&QA=&5R(&5An
M<VEL>2 H:68@<V]M96]N92!N965D<R!I="$I+@I8"EAS:7IE.@I8"2YW;W)Dm
M( DP"0E\('1O=&%L(&1I<VL@<VEZ92 H9FEL;&5D(&EN(&)Y(&)U:6QD*0I8l
M"E@)+G=O<F0), D)?"!P860@8GET97,@<&%S="!U;G5S960@1$]3('!A<F%Mk
M971E<G,*6 DN8GET90DP"E@*6'1R86-K<VEZ.@I8"2YW;W)D"3 )"7P@<V5Cj
M=&]R<R]T<F%C:R H9FEL;&5D(&EN(&)Y(&)U:6QD*0I8:&5A9',Z"E@)+G=Oi
M<F0), D)?"!N=6UB97(@;V8@:&5A9',@*&9I;&QE9"!I;B!B>2!B=6EL9"D*h
M6 I8? ET:&4@8F]O="!C;V1E('-T87)T<R!A9V%I;B!H97)E(0I8"EAM;W9Eg
M.@ER97 *6 EM;W9W"0D)?"!C;W!Y(&QO;W *6 D*6'P@<W1A<G0@8F]O="!Pf
M<F]C961U<F4*6 EJ;7!I"7-T87)T+"!"3T]44T5'"7P@<V5T(&-S('1O($)/e
M3U1314<*6 I8<W1A<G0Z"E@);6]V(" @("!D>"QC<PI8(" @(" @("!M;W8@d
M(" @(&1S+&1X(" @(" @(" @("!\('-E="!D<R!T;R!C<PI8(" @(" @("!Xc
M;W(@(" @(&%X+&%X"E@@(" @(" @(&UO=B @(" @97,L87@@(" @(" @(" @b
M('P@<V5T(&5S('1O(# *6" @(" @(" @;6]V(" @("!S<RQD>" @(" @(" @a
M(" @?"!S970@<W,@=&\@8W,@:2YE+BP@<W1A8VL@:6X@:&EG:"!C;W)E"E@@z
M(" @(" @(&UO=B @(" @<W L(S$U,S8@(" @(" @('P@:6YI=&EA;&EZ92!Sy
M<"!T;R!H:6=H(&-O<F4*6 I8?"!P<FEN="!G<F5E=&EN9PI8"6UO=@EA>"PCx
M,@D)?"!R97-E="!V:61E;PI8"6EN= DP>#$P"E@*6" @(" @(" @;6]V(" @w
M("!A>"PC,'@P,C P"7P@0DE/4R!C86QL(&EN('!U="!C=7)S;W(@:6X@=6P@v
M8V]R;F5R"E@@(" @(" @('AO<B @(" @8G@L8G@*6" @(" @(" @>&]R(" @u
M("!D>"QD> I8(" @(" @("!I;G0@(" @(#!X,3 *6" @(" @(" @;6]V(" @t
M("!B>"PC9W)E970*6" @(" @(" @8V%L;" @("!P<FEN= I8"EA\($EN:71Is
M86QI>F4@9&ES:R!P87)A;65T97)S(&)Y(')E861I;F<@=VAA="!F;W)M870@r
M<V%I9"!T:&4@9&ES:R!W87,@=VAE;@I8?"!I="!W87,@9F]R;6%T=&5D+B!)q
M9B!T:&4@<VEZ92!O9B!T:&4@9&ES:R!I<R P("AT:&4@:6YI=&EA;"!V86QUp
M92!A8F]V92D*6'P@8V]M<&QA:6X@86)O=70@86X@;VQD('9E<G-I;VX@;V8@o
M8G5I;&0@8F5I;F<@=7-E9"!T;R!M86ME('1H92!D:7-K+ I8?"!O=&AE<G=In
M<V4@<V5T('5P('1H92!N=6UB97(@;V8@<V5C=&]R<R!P97(@=')A8VL@=F%Lm
M=64L('-E;&5C="!A('!A<F%M=&5R"EA\('-E="!A;F0@<F5S970@=&AE(&1Il
M<VL@8V]N=')O;&QE<B!V:6$@0FEO<R!B969O<F4@8V]N=&EN=6EN9R!W:71Hk
M('1H92!B;V]T+@I8"E@)8VUP"7-I>F4L(S )"7P@:68@=&AE('1O=&%L(&1Ij
M<VL@<VEZ92!I<R P('1H96X@8V]M<&QA:6X*6 EM;W8)8G@L(V)U:6QD;7-Gi
M"7P@<V5T('1H92!E<G)O<B!M97-S86=E(&EN(&-A<V4@;V8@97)R;W(*6 EJh
M90EE<G)O<@I8"0D)"0I8"6UO=@EA>"QS:7IE"0E\(&=E="!T:&4@=&]T86P@g
M;G5M8F5R(&]F('-E8W1O<G,@=&\@<V5L96-T"E@);6]V"6-X+"-F9#$T-&T)f
M?"!S970@=7 @9F]R(&$@,2XT-&T@,RXU(&EN8V@@9')I=F4*6 EC;7 )87@Le
M(V9D,30T<PE\(&EF(&ET(&ES('1H96X@8G)A;F-H('1O('-E="!T:&4@<&%Rd
M86UE=&5R<PI8"6IE"7)E<V5T"E@*6 EM;W8)8W@L(V9D,3)M"7P@:68@;F]Tc
M+"!S970@=7 @9F]R(#$N,DT@-2XR-2!I;F-H(&1R:79E"E@)8VUP"6%X+"-Fb
M9#$R<PE\(&EF(&ET(&ES('1H96X@8G)A;F-H('1O('-E="!T:&4@<&%R86UEa
M=&5R<PI8"6IE"7)E<V5T"E@*6 EM;W8)8W@L(V9D-S(P:PE\(&EF(&YO="P@z
M<V5T('5P(&9O<B!A(#<R,&L@,RXU(&EN8V@@9')I=F4*6 EC;7 )87@L(V9Dy
M-S(P<PE\(&EF(&ET(&ES('1H96X@8G)A;F-H('1O('-E="!T:&4@<&%R86UEx
M=&5R<PI8"6IE"7)E<V5T"E@*6 EM;W8)8W@L(V9D,S8P:PE\(&EF(&YO="!Sw
M970@=7 @9F]R(&$@,S8P:R U+C(U(&EN8V@@9')I=F4*6 EC;7 )87@L(V9Dv
M,S8P<PE\(&EF(&ET(&ES('1H96X@8G)A;F-H('1O('-E="!T:&4@<&%R86UEu
M=&5R<PI8"6UO=@EB>"PC8F%D7V1R:79E"7P@=&AE('1H92!B860@9')I=F4@t
M;65S<V%G92!I;B!C87-E(&]F(&5R<F]R"E@):FYE"65R<F]R"0E\(&EF(&YOs
M="!R97!O<G0@=&AA="!T:&ES(&1R:79E(&ES(&YO="!S=7!P;W)T960A"E@*r
M6')E<V5T.@I8"E@)>&]R"6%X+&%X"0E\('-E="!%4R!T;R!S96=M96YT(# @q
M=&\@861D<F5S<R P,# W."!W:&EC: I8"6UO=@EE<RQA> D)?"!I<R!);G0@p
M,'@Q12!W:&5R92!$3U,@97AP96-T<R!T:&4@9&ES:PI8"7-E9PEE<PD)?"!Po
M87)A;65T97)S('!O:6YT960@=&\@86)O=F4@=&\@8F4N(%!U= I8"6UO=@E$n
M4TM"05-%+&-X"7P@;W5R(&1A=&$@<V5G;65N="!A;F0@=&AE(&]F9G-E="!Om
M9B!T:&4@"E@);6]V"6%X+&1S"0E\(&1I<VL@<&%R86UE=&5R('1A8FQE(&1El
M=&5R;6EN960@86)O=F4@:6YT;PI8"7-E9PEE<PD)?"!T:&4@8V]R<F5C="!Lk
M;V-A=&EO;G,@=&AE;B!R97-E="!T:&4@9&ES:PI8"6UO=@E$4TM"05-%*S(Lj
M87@)?"!D<FEV92!V:6$@82!C86QL('1O($1/4R!B969O<F4@<')O8V5E9&ENi
M9PI8"0D)"0I8"7AO<@EA>"QA> D)?"!T;R!L;V%D($UI;FEX(&EN+@I8"6ENh
M= DP>#$S"E@)"EA\($QO860@=&AE(&]P97)A=&EN9R!S>7-T96T@9G)O;2!Dg
M:7-K971T92X*6&QO860Z"E@)8V%L; ES971R96<)"7P@<V5T('5P(&%H+"!Cf
M>"P@9'@*6 EM;W8)8G@L9&ES:W-E8PE\(&)X(#T@;G5M8F5R(&]F(&YE>'0@e
M<V5C=&]R('1O(')E860*6 EA9&0)8G@L(S()"7P@9&ES:V5T=&4@<V5C=&]Rd
M(#$@9V]E<R!A=" Q-3,V("@B<V5C=&]R(B S*0I8"7-H; EB>"PC,0D)?"!Mc
M=6QT:7!L>2!S96-T;W(@;G5M8F5R(&)Y(#,R"E@)<VAL"6)X+",Q"0E\(&1Ib
M='1O"E@)<VAL"6)X+",Q"0E\(&1I='1O"E@)<VAL"6)X+",Q"0E\(&1I='1Oa
M"E@)<VAL"6)X+",Q"0E\(&1I='1O"E@);6]V"65S+&)X"0E\(&-O<F4@861Dz
M<F5S<R!I<R!E<SIB>" H=VET:"!B>" ](# I"E@)>&]R"6)X+&)X"0E\('-Ey
M92!A8F]V90I8"6%D9 ED:7-K<V5C+&%X"7P@87@@=&5L;',@:&]W(&UA;GD@x
M<V5C=&]R<R!T;R!R96%D"E@);6]V8@EA:"PC,@D)?"!O<&-O9&4@9F]R(')Ew
M860*6 EI;G0),'@Q,PD)?"!C86QL('1H92!"24]3(&9O<B!A(')E860*6" @v
M(" @(" @;6]V(" @("!B>"PC9F1E<G()?"!S970@=7 @=&AE(&5R<F]R(&UEu
M<W-A9V4@:6X@8V%S92!O9B!E<G)O<@I8"6IB"65R<F]R"0E\(&IU;7 @;VX@t
M9&ES:V5T=&4@97)R;W(*6 EM;W8)87@L9&ES:W-E8PE\('-E92!I9B!W92!As
M<F4@9&]N92!L;V%D:6YG"E@)8VUP"6%X+&9I;F%L"7P@9&ET=&\*6 EJ8@ELr
M;V%D"0E\(&IU;7 @:68@=&AE<F4@:7,@;6]R92!T;R!L;V%D"E@*6'P@3&]Aq
M9&EN9R!D;VYE+B @1FEN:7-H('5P+@I8(" @(" @("!M;W8@(" @(&1X+",Pp
M># S1C(@(" @("!\(&MI;&P@=&AE(&UO=&]R"E@@(" @(" @(&UO=B @(" @o
M87@L(S!X,# P0PI8(" @(" @("!O=70*6" @(" @(" @8VQI"E@);6]V"6)Xn
M+'1R86-K<VEZ"7P@9G-C:R!E>'!E8W1S(",@<V5C=&]R<R]T<F%C:R!I;B!Bm
M> I8(" @(" @("!M;W8@(" @(&%X+&9S8VM?9',@(" @("!\('-E="!S96=Ml
M96YT(')E9VES=&5R<PI8(" @(" @("!M;W8@(" @(&1S+&%X(" @(" @(" @k
M("!\('=H96X@<V5P($DF1"!$4R A/2!#4PI8(" @(" @("!M;W8@(" @(&5Sj
M+&%X(" @(" @(" @("!\(&]T:&5R=VES92!T:&5Y(&%R92!T:&4@<V%M92X*i
M6" @(" @(" @;6]V(" @("!S<RQA>" @(" @(" @(" @?"!W;W)D<R U,#0@h
M+2 U,3 @87)E('!A=&-H960@8GD@8G5I;&0*6 I8"7-E9R!C<PI8"6IM<&D)g
M0&9S8VM?<&,)?"!J;7 @=&\@9G-C:PI8"EA\($=I=F5N('1H92!N=6UB97(@f
M;V8@=&AE(&YE>'0@9&ES:R!B;&]C:R!T;R!R96%D+"!D:7-K<V5C+"!C;VUPe
M=71E('1H90I8?"!C>6QI;F1E<BP@<V5C=&]R+"!H96%D+"!A;F0@;G5M8F5Rd
M(&]F('-E8W1O<G,@=&\@<F5A9"!A<R!F;VQL;W=S.@I8?"!A:" ](",@<V5Cc
M=&]R<R!T;R!R96%D.R @8VP@/2!S96-T;W(@(SL@(&-H(#T@8WEL.R @9&@@b
M/2!H96%D.R!D;" ](# *6'-E=')E9SH)"E@);6]V"7-I+'1R86-K<VEZ"7P@a
M.2 H4$,I(&]R(#$U("A!5"D@<V5C=&]R<R!P97(@=')A8VL*6 EM;W8@"6%Xz
M+&1I<VMS96,)?"!A>" ](&YE>'0@<V5C=&]R('1O(')E860*6 EX;W()9'@Ly
M9'@)"7P@9'@Z87@@/2 S,BUB:70@9&EV:61E;F0*6 ED:78)<VD)"7P@9&EVx
M:61E('-E8W1O<B C(&)Y('1R86-K('-I>F4*6 EM;W8)8W@L87@)"7P@8W@@w
M/2!T<F%C:R C.R!D>" ]('-E8W1O<B H,"UO<FEG:6XI"E@);6]V"6)X+&1Xv
M"0E\(&)X(#T@<V5C=&]R(&YU;6)E<B H,"UO<FEG:6XI"E@);6]V"6%X+&1Iu
M<VMS96,)?"!A>" ](&YE>'0@<V5C=&]R('1O(')E860*6 EA9&0)87@L<VD)t
M"7P@87@@/2!L87-T('-E8W1O<B!T;R!R96%D("L@,0I8"61E8PEA> D)?"!As
M>" ](&QA<W0@<V5C=&]R('1O(')E860*6 EX;W()9'@L9'@)"7P@9'@Z87@@r
M/2 S,BUB:70@9&EV:61E;F0*6 ED:78)=')A8VMS:7H)?"!D:79I9&4@;&%Sq
M="!S96-T;W(@8GD@=')A8VL@<VEZ90I8"6-M<&()86PL8VP)"7P@:7,@<W1Ap
M<G1I;F<@=')A8VL@/2!E;F1I;F<@=')A8VL*6 EJ90ES970Q"0E\(&IU;7 @o
M:68@=VAO;&4@<F5A9"!O;B Q(&-Y;&EN9&5R"E@)<W5B"7-I+&1X"0E\(&-On
M;7!U=&4@;&]W97(@<V5C=&]R(&-O=6YT"E@)9&5C"7-I"0E\('-I(#T@(R!Sm
M96-T;W)S('1O(')E860*6 I8?"!#:&5C:R!T;R!S964@:68@=&AI<R!R96%Dl
M(&-R;W-S97,@82 V-$L@8F]U;F1A<GD@*#$R."!S96-T;W)S*2X*6'P@4W5Ck
M:"!C86QL<R!M=7-T(&)E(&%V;VED960N("!4:&4@0DE/4R!G971S('1H96T@j
M=W)O;F<N"EAS970Q.@EM;W8)87@L9&ES:W-E8PE\(&%X(#T@;F5X="!S96-Ti
M;W(@=&\@<F5A9 I8"6%D9 EA>"PC,@D)?"!D:7-K('-E8W1O<B Q(&=O97,@h
M:6X@8V]R92!S96-T;W(@,PI8"6UO=@ED>"QA> D)?"!D>" ](&YE>'0@<V5Cg
M=&]R('1O(')E860*6 EA9&0)9'@L<VD)"7P@9'@@/2!O;F4@<V5C=&]R(&)Ef
M>6]N9"!E;F0@;V8@<F5A9 I8"61E8PED> D)?"!D>" ](&QA<W0@<V5C=&]Re
M('1O(')E860*6 ES:&P)87@L(S$)"7P@86@@/2!W:&EC:" V-$L@8F%N:R!Dd
M;V5S(')E860@<W1A<G0@870*6 ES:&P)9'@L(S$)"7P@9&@@/2!W:&EC:" Vc
M-$L@8F%N:R!F;V5S(')E860@96YD(&EN"E@)8VUP8@EA:"QD: D)?"!A:" Ab
M/2!D:"!M96%N<R!R96%D(&-R;W-S97,@-C1+(&)O=6YD87)Y"E@):F4)<V5Ta
M,@D)?"!J=6UP(&EF(&YO(&)O=6YD87)Y(&-R;W-S960*6 ES:')B"61L+",Qz
M"0E\(&1L(#T@97AC97-S(&)E>6]N9" V-$L@8F]U;F1A<GD*6 EX;W)B"61Hy
M+&1H"0E\(&1X(#T@97AC97-S(&)E>6]N9" V-$L@8F]U;F1A<GD*6 ES=6()x
M<VDL9'@)"7P@861J=7-T('-I"E@)9&5C"7-I"0E\('-I(#T@;G5M8F5R(&]Fw
M('-E8W1O<G,@=&\@<F5A9 I8"EAS970R.@EM;W8)87@L<VD)"7P@87@@/2!Nv
M=6UB97(@;V8@<V5C=&]R<R!T;R!R96%D"E@)>&]R"61X+&1X"0E\(&1H(#T@u
M:&5A9"P@9&P@/2!D<FEV90I8"6UO=F()9&@L8VP)"7P@9&@@/2!T<F%C:PI8t
M"6%N9&()9&@L(S!X,#$)?"!D:" ](&AE860*6 EM;W9B"6-H+&-L"0E\(&-Hs
M(#T@=')A8VL@=&\@<F5A9 I8"7-H<F()8V@L(S$)"7P@8V@@/2!C>6QI;F1Er
M<@I8"6UO=F()8VPL8FP)"7P@8VP@/2!S96-T;W(@;G5M8F5R("@P+6]R:6=Iq
M;BD*6 EI;F-B"6-L"0E\(&-L(#T@<V5C=&]R(&YU;6)E<B H,2UO<FEG:6XIp
M"E@)>&]R8@ED;"QD; D)?"!D;" ](&1R:79E(&YU;6)E<B H,"D*6 ER970)o
M"0E\(')E='5R;B!V86QU97,@:6X@87@L(&-X+"!D> I8"E@*6'PM+2TM+2TMn
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM*PI8?" @("!E<G)O<B F('!R:6YTm
M(')O=71I;F5S(" @("!\"EA\+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TMl
M+2TM+2L*6 I8?" )<')I;G0@=&AE(&5R<F]R(&UE<W-A9V4@<&]I;G1E9"!Tk
M;R!B>2!"6"!T:&5N(')E8F]O="$)"E@*6&5R<F]R.@I8(" @(" @("!P=7-Hj
M(" @(&%X"E@@(" @(" @(&-A;&P@(" @<')I;G0@(" @(" @(" @('P@<')Ii
M;G0@;7-G"E@)>&]R"6-X+&-X"EAE<G(Q.@EM=6P), D)?"!D96QA>0I8"6QOh
M;W )97)R,0I8"6EN= DP>#$Y"E@*6 I8<')I;G0Z(" @(" @(" @(" @(" @g
M(" @(" @(" @("!\('!R:6YT('-T<FEN9R H8G@I"E@@(" @(" @(&UO=F()f
M86PL*&)X*0D@(" @(" @('P@86P@8V]N=&%I;G,@8VAA<B!T;R!B92!P<FENe
M=&5D"E@@(" @(" @('1E<W1B(" @86PL86P@(" @(" @(" @('P@;G5L;"!Cd
M:&%R/PI8(" @(" @("!J;F4@(" @('!R=#$@(" @(" @(" @("!\(&YO"E@@c
M(" @(" @(')E=" @(" @(" @(" @(" @(" @(" @('P@96QS92!R971U<FX*b
M6'!R=#$Z(" @;6]V8B @("!A:"PC,30@(" @(" @(" @?" Q-" ]('!R:6YTa
M(&-H87(*6" @(" @(" @:6YC(" @("!B>" @(" @(" @(" @(" @?"!I;F-Rz
M96UE;G0@<W1R:6YG('!O:6YT97(*6" @(" @(" @<'5S:" @("!B>" @(" @y
M(" @(" @(" @?"!S879E(&)X"E@@(" @(" @(&UO=F(@(" @8FPL(S$@(" @x
M(" @(" @('P@9F]R96=R;W5N9"!C;VQO<@I8"7AO<F()8F@L8F@)"7P@<&%Gw
M92 P"E@@(" @(" @(&EN=" @(" @,'@Q," @(" @(" @(" @('P@8V%L;"!"v
M24]3(%9)1$5/7TE/"E@@(" @(" @('!O<" @(" @8G@@(" @(" @(" @(" @u
M('P@<F5S=&]R92!B> I8(" @(" @("!J;7 @(" @('!R:6YT(" @(" @(" @t
M("!\(&YE>'0@8VAA<F%C=&5R"E@*6'P)9&%T82!A<F5A"E@*6&1I<VMS96,Zs
M+G=O<F0@,0I8"E@*6 I8?"TM+2TM+2TM+2TM+2TM+2T@1FQO<'!Y(&1I<VL@r
M<&%R86UE=&5R('1A8FQE<R M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM"E@*q
M6'P@,2XT-"!M96<@,RXU(&EN8V@@9FQO<'!Y('!A<F%M971E<G,@*%!3+S(@p
M;6%C:&EN97,I( I8"EAF9#$T-',@/2 R.#@P"7P@;G5M8F5R(&]F('-E8W1Oo
M<G,@;VX@,2XT-&T@9&ES:PI8"0I89F0Q-#1M.@DN8GET90DP>$$Q+" P># Rn
M+" P>#(U+" R+" Q."P@,'@Q0BP@,'A&1BP@,'@V0RP@,'A&-BP@,'@P1BP@m
M- I8"EA\(#$N,B!M96<@-2XR-2!I;F-H(&9L;W!P>2!P87)A;65T97)S("A!l
M5"!H:6=H(&1E;G-I='DI"E@*6&9D,3)S(" ](#(T,# )?"!N=6UB97(@;V8@k
M<V5C=&]R<R!O;B!A(#$N,FT@9&ES:PI8"EAF9#$R;3H)+F)Y=&4),'A$1BP@j
M,'@P,BP@,'@R-2P@,BP@,34L(#!X,4(L(#!X1D8L(#!X-30L(#!X1C8L(#!Xi
M,#$L(#@@"E@@"EA\(#<R,&L@,RXU(&EN8V@@9FQO<'!Y('!A<F%M971E<G,@h
M*%!3+S(G<R _*0I8"EAF9#<R,',@/2 Q-#0P"7P@;G5M8F5R(&]F('-E8W1Og
M<G,@;VX@9&ES:PI8"EAF9#<R,&LZ"2YB>71E"3!X1$8L(#!X,#(L(#!X,C4Lf
M(#(L(#DL(#!X,D$L(#!X1D8L(#!X-3 L(#!X1C8L(#!X,$8L(#(@"E@*6'P@e
M,S8P:R U+C(U(&EN8V@@9FQO<'!Y('!A<F%M971E<G,@*%!#(%A4(&5T8RXId
M"E@*6&9D,S8P<R ](#<R, E\(&YU;6)E<B!O9B!S96-T;W)S(&]N(&$@,S8Pc
M:R!D:7-K"E@*6&9D,S8P:SH)+F)Y=&4),'A$1BP@,'@P,BP@,'@R-2P@,BP@b
M(#DL(#!X,D$L(#!X1D8L(#!X-3 L(#!X1C8L(#!X,#$L(#,@"E@*6'PM+2TMa
M+2TM+2TM+2TM+2TM+2TM+2!%;F0@;V8@9FQO<'!Y('!A<F%M971E<B!T86)Lz
M97,@+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2T*6 I88G5I;&1M<V<Z"E@)+F%Sy
M8VEZ(")$:7-K('-I>F4@,%QR7&XB( I8"EAB861?9')I=F4Z"E@)+F%S8VEZx
M(")"860@9')I=F4@='EP95QR7&XB"E@*6&9D97)R.@DN87-C:7H@(E)E860@w
M97)R;W(N7')<;B(*6 I89W)E970Z"2YA<V-I>B B7')";V]T:6YG($U)3DE8v
M(#$N-2XP+B @0V]P>7)I9VAT(#$Y.3 @4')E;G1I8V4M2&%L;"P@26YC+EQRu
M7&XB"E@*6'P@1&]N)W0@9F]R9V5T('1H870@=V]R9',@-3 P("T@-3$P(&%Rt
M92!F:6QL960@:6X@8GD@8G5I;&0N("!4:&4@<F5G=6QA<@I8?"!C;V1E(&AAs
M9"!B971T97(@;F]T(&=E="!T:&%T(&9A<BX*6"YT97AT"EAE;F1T97AT.@I8r
A+F1A=&$*6&5N9&1A=&$Z"E@N8G-S"EAE;F1B<W,Z"B\*q
 p
end

aubrey@rpp386.cactus.org (Aubrey McIntosh) (01/11/90)

I think Glen Overby first mentioned using a descriptor block on a disk.

I agree that a disk description should be in the first sector on the disk.
Also, that it is the job of the Format program to place it there, as well
as doing any interleaving.

The MS-DOS diskette description is a useful one, since there are tools
such as Norton's utilities, that let us repair boo boos in an environment
that many of us are fluent in.  Other descriptions exist, such as the one
from OS-9.  That one is excellent, but there is no provision for the block
 to be executable.  So I'd go for the MS descriptor, but I'd also like to
hear what else is out there.

Also, about grinding heads...   I get the impression that people are
seeking out to track 79 to see if its a big disk.  My machine sounds
like it will explode or something, the dog runs under the sofa, the wife
comes in to help...
Why not just seek to track 40?
-- 
Aubrey McIntosh        
comp.os.minix, comp.lang.modula2, soc.culture.celtic         
Austin, TX 78723 
1-(512)-452-1540  (v)

paula@bcsaic.UUCP (Paul Allen) (01/12/90)

In article <7806@nigel.udel.EDU> Peter_Van_Epp@cc.sfu.ca writes:
>The following uue encoded shar file will allow Minix to be booted from 1.44m
>3.5 inch floppies (and 1.2m AT floppies and 720k 3.5 floppies and last but
>not least 360k 5.25 floppies) and has been booted succesfully from all of them!

Great!  Thanks!

[Description of problems determining floppy type]

>To fix this (and to start addressing a similar problem in floppy.c!) I looked
>at the data in the DOS boot sector (in Advanced MSDOS by Ray Duncan good book!).
>and discovered that the total number of sectors, number of sectors per track,
>and number of heads are written into offset 0x13 to 0x1B of the boot block.
>I have now modified bootblok.s (here in source form since the cdif was 10k and
>the source was 11k and change!), build.c and the makefile. 
[...]
>                At boot time, bootblok.s has been modified to read the 
>total size of the disk from location 0x13 (put there by build) and checks that
>it is one of 720, 1440, 2400, or 2800 sectors (360k etc.) and selects the 
>correct parameter block for the floppy controller (or complains if the drive
>doesn't match!). As mentioned, this code has been used to succesfully boot
>all of these disks (and 720k in 1.44m drives but not 360k in 1.2m) and it all
>seems to work. I intend to now look at doing the same thing to floppy.c and 
>mkfs  [...]

All this is fine for boot disks and disks with filesystems on them.  People
tinkering with code to do floppy formatting under Minix should probably try
to create a bootblock as close to the one DOS creates as possible.

But please remember that not all floppies have boot blocks.  Since I have a
nice big hard disk, I almost never put a file system on a floppy.  99% of my
Minix floppies contain raw data such as tar archives.  I suppose we could 
redefine the meaning of "raw device" such that the first block on a floppy is
reserved, but that invalidates all my existing backup disks.  It would seem that
the only reliable way to 'discover' the media type at run time is to try
various combinations of sector numbers and track numbers to find out what works.
Does it destroy a 40-track drive if you seek to track 41?  Is there a hard
stop that prevents seeking one track past the last track?

Here, briefly, is a restatement of what I think may be a solution for the
floppy problem:

Create dev_open() and dev_close() routines to replace the floppy driver's current null
routines.  The new fl_open() uses some heuristic (probably some combination of seeks 
and reads) to determine the drive/media combination.  A message is sent to fs informing
it of the current size of the device.  Now fs can do the right thing at end-of-volume
without the size-in-the-inode kluge.  The floppy driver doesn't need the logic to
try different values for the drive/media code, since fl_open() has already figured it
out.  The new fl_close() routine sends a message to the fs invalidating the device
size information for the drive.

I haven't implemented any of this, and probably won't have time to try for another
week or so.  If anybody can see problems with what I propose, please let me know.
(Gently, please!  I'm a sensitive sort of guy!  :-)

Paul Allen
-- 
------------------------------------------------------------------------
Paul L. Allen                       | pallen@atc.boeing.com
Boeing Advanced Technology Center   | ...!uw-beaver!bcsaic!pallen

Peter_Van_Epp@cc.sfu.ca (01/12/90)

>I think Glen Overby first mentioned using a descriptor block on a disk.
 
 Glen probably discovered (as I did) that Paul is right anything
doing I/O to the raw device will overwrite the block, I can't see
a way to do this but am open to suggestions!
 
>Also, about grinding heads...   I get the impression that people are
>seeking out to track 79 to see if its a big disk.  My machine sounds
>like it will explode or something, the dog runs under the sofa, the wife
>comes in to help...
>Why not just seek to track 40?
>--
>Aubrey McIntosh
>comp.os.minix, comp.lang.modula2, soc.culture.celtic
>Austin, TX 78723
 
Because some 5.25s will get to track 41, and because the floppy
controller doesn't know how many tracks the drive has (and in 
at least some cases neither does the drive except via a mechanical
stop!) so if you seek any thing past the end of the drive you risk
damaging the drive (with the note that I am not a drive designer 
but it sure sounds dangerous!).  I should point out that the above
problem does not affect my boot mods (which I suspect is where the
grinding you hear is) and will not seek past the end of the drive
because it figures out from the bootblock how big the drive is.
 
Peter Van Epp

evans@ditsyda.oz (Bruce Evans) (01/16/90)

In article <7961@nigel.udel.EDU> Peter_Van_Epp@cc.sfu.ca writes:
[Aubrey McIntosh writes]
>>Why not just seek to track 40?
>[...]
>Because some 5.25s will get to track 41, and because the floppy
>controller doesn't know how many tracks the drive has (and in 
>at least some cases neither does the drive except via a mechanical
>stop!)

This is one reason I don't much like the idea of a "media sensitive"
floppy device. Even the floppy driver itself can only guess!

Paul Allen suggested detecting the media type in the dev_open routine
for the floppy device. This routine lives in FS and would have a hard
time getting the necessary information from the existing floppy
driver.  It should be just a stub which asks the floppy driver to
decide. The driver would return mainly the size of the device (which
can be stored into the inode field so existing code works). My changes
to FS in 1.5 would be better if they knew how many blocks per track are
on the device.

The floppy driver can do a better job than now, without bashing the
heads. I added code to the 1.5 driver to read the sector ids off the
disk. This can be used used to count the number of sectors by reading
track 0. (I once use the ids to handle a couple of ancient weird
formats with track 0 special.) If the wrong rate or steps_per_cyl is
tried, I think there will be an error between tracks 0 and 1. So
looking at tracks 0 and 1 gives a lot of info, enough to determine the
index 'd' into the tables in the floppy driver, except for types 0 and
2 (360K and 720K). This is slow, and too much work for a guess. Yet
the DOS method of relying on the parameter block is no good. If there
is no parameter block, DOS has to give up.

I prefer the other idea of encoding the device type in the minor
number. We should also consider encoding the type in the device name,
e.g. /dev/fd2s80t10s (360K disks formatted to 800K in an AT drive!).
The advantage is that the driver need not be changed to handle minor
variations - 80t10s looks like 80t9s and ancient 40t8s looks like
40t9s. To provide for both cases, dev_open could build a message
containing the minor number and the device name, and rely on the floppy
driver to decide the size and other useful info.

There is little need to keep the media-sensitive device. For booting,
a DOS-style parameter table can be used. Earl Chew's "shoelace" boot
program already does this. In 1.5, FS knows which device contains the
root image (e.g. 1.5 can boot from /dev/at0, then read the root file
system off /dev/at1) and will have no trouble with the encoding.  Now
the default is in <minix/boot.h> and this can be changed at boot time.
Shoelace is more flexible. The default is in a text file /etc/config
and it will be easy to convert the DOS parameter block to a device
number, so everything will be automatic.
-- 
Bruce Evans		evans@ditsyda.oz.au

gwr@linus.UUCP (Gordon W. Ross) (01/17/90)

In article <7961@nigel.udel.EDU> Peter_Van_Epp@cc.sfu.ca writes:
[Aubrey McIntosh writes]
>>Why not just seek to track 40?
>[...]
>Because some 5.25s will get to track 41, and because the floppy
>controller doesn't know how many tracks the drive has (and in 
>at least some cases neither does the drive except via a mechanical
>stop!)

The standard way to determine 40 vs. 80 track drive is as follows:
(Pseudo code, based on IBM BIOS listing)

	Recalibrate drive,
	seek to track 48 (40 track drives can't seek this far)
	seek to track 10 (40 track drive now has position < 10)
	for (trk=10; trk; trk--) {
		Tell FDC to sense-status of floppy
		if floppy status has TRACK_0 bit on
			disk is only 40 tracks
			return(disk_is_40_tracks);
	}
	return(disk_is_80_tracks);

Note that this test only needs to be done once at driver
initialization time.  The number of tracks on the DRIVE never changes,
though a 360KB disk in a 1.2MB drive only uses (40) even cylinders.

This is one reason I don't much like the idea of a "media sensitive"
floppy device. Even the floppy driver itself can only guess!

Automatically sensing the media type (of a formatted disk) can be done
by reading track 0 and track 1, as Bruce Evans suggested.  This should
be done on every dev_open call to the floppy driver.

An algorithm for determining media format is as follows:
	(We already know the size of the DRIVE.)
	If drive has 80 tracks,
		Seek to track 1
		If sector 1 is readable,
			It's an 80 track format
		Else
			Assume 40 track disk in 80 track drive.
			(Double-stepping required)
		EndIf
	Else (drive is 40 track)
		Format uses 40 track (no double-stepping)
	EndIf
Now we determine the number of sectors/track (MAX_SPT=18)
	Seek to track 0,
	Try reading sectors, starting with highest number
	(If no error, that was the right format)
The combinations to try reading (in order) are:
    sector  data rate (Kbps)	Format description
	18	500		HD, 1.44 MB drive (300 RPM)
	15	500		HD, 1.2 MB drive, (360 RPM)
	9	250/300		DD, 360KB drive/1.2 MB drive
	8	250/300		DD, 360KB drive/1.2 MB drive
Note that the 8 and 9 sector formats require a data rate of 250 Kbps
for a 360KB drive (300 RPM) and 300 Kbps for a 1.2 MB drive (360 RPM).
The driver therefore has to know which of these it is dealing with.
(Are other formats desired?  Maybe 10 or 16 sectors/track?)

There are two ways to determine which type of drive we are dealing
with.  The easy way is to ask the BIOS at boot time.  The harder
(but more reliable) way is to measure the drive speed by timing index
pulses from the drive (this requires a diskette in the drive).
The drive speed never changes, so this test need only be done once.

I believe it would be relatively easy to add a media sensitive (minor)
device to the minix floppy driver using the above sensing methods.
Also, we would still need minor devices that force a particular format
for use when the media sensitive device gets it wrong, or (eventually)
for use with a diskette formatting program.

Sys V/386 uses exactly this scheme, where normal read/write activity
can safely use the media sensitive device (/dev/dsk/f0) and formatting
or other special programs use /dev/dsk/f0{format}{t?} where:
	f0 means drive 0
	{format} specifies a format
	{t}	if present means use whole disk, including cyl. 0
		without the 't' the device starts on cylinder one.
Standard tar floppies used by Sys.V/386 are read in using /dev/dsk/f0
(the device that starts on cylinder one).

As far as I can tell, there are no special parameter tables on the
floppies used by SysV/386, so I presume it does media sensing as
described above.  Media sensing works on both /dev/dsk/f0 and
/dev/dsk/f0t (the "whole disk" device).  Mountable file systems use
the /dev/dsk/f0 (starts on cylinder one) device.

Anybody for file system compatibility?
-- 
Gordon W. Ross (E025)	ARPA:  gwr@linus.mitre.org
The MITRE Corporation	UUCP:  {decvax,philabs}!linus!gwr
Burlington Road, Bedford, MA 01730	(617) 271-3205