ࡱ> 9 R1bjbjr&-jl^^^r<<<<<xroH8  >K_ GGGGGGG$J LG^k" kkG'I H0'''kV^G'kG''#C^G >*(r <{E,G3H<oHEM'MG'rrMulti-Phase Startup (version 2.3e) 2002, Apr.2 HIRANABE Kenji Name Multi-Phase Startup Aliases Bootstrap, Run Level, One, Two, Three! Hop, Step, Jump! Problem How do you startup a system with subsystems that are dependent on one another? Context You are working with a real-time system or operating system. The system is composed of a number of subsystems and the subsystems are dependent on one another. Because of the dependency, it is impossible to sequentially startup one subsystem after another. Forces You want to startup a system that is composed of several subsystems. Each of the subsystems has several services. The subsystems are dependent on one another because one service of a subsystem uses services of other subsystems. You must ensure that all subsystems ultimately get started. If the startup procedure is not well organized, the system can deadlock due to circular dependency. Solution Introduce intermediate state(s) between each subsystems inactive(or initial) state and active(or ready) state. During the startup procedure, first, move the subsystems from the initial inactive state to an intermediate state, and then into the final "active" state. Introducing sublevels for bootstrapping can avoid the problem of circular dependency and deadlock. As you introduce the intermediate levels, define the meaning of each level over the whole system to determine the bootstrapping procedure. To label the intermediate states, define an integer value, sometimes called a "run level," and use the integers to determine the startup order for the system. The system starts from the initial inactive state, to run level 1, then to run level 2, and then to the final active state. A typical strategy for labeling run levels is: Run level 1 go as far as each subsystem can go alone without depending on others services. Run level 2 go as far as each subsystem can go using others run level 1 services. Run level n go as far as each subsystem can go using others run level n-1 services. This process is sketched as follows (fig.1); fig.  SEQ fig. \* ARABIC 1 Startup Process A typical structure and collaboration can be sketched as the following diagrams (fig.2-6). Note that these UML diagrams illustrate only one typical design example with objects but this pattern has little to do with Object-Oriented design. Structure  fig.  SEQ fig. \* ARABIC 2 Structure Participants System Represents the whole system responsible for starting up its subsystems. Comprise subsystems. SubSystem An abstract class for concrete subsystems. Provides an entry point(enterRunlevel) for System. Provides an hot spot(doRunlevel) for ConcreteSubSystems. ConcreteSubSystem Represents concrete subsystems. Describes subsystem-specific behavior for each run level. Collaborations The System object requests its SubSystem objects to enter a certain run level. Each SubSystem object enters the specified run level and takes action to get into the level.  fig.  SEQ fig. \* ARABIC 3 Collaborations As a variation of this pattern, a 3-phase variation is sometimes adopted. The levels can be expressed as the three degenerate cases: "new, init, and start."  fig.  SEQ fig. \* ARABIC 4 3-Phase Implementation Another variation is a composite recursive hierarchy of the System and SubSystems for multi-layer architectures.  fig.  SEQ fig. \* ARABIC 5 Layered Implementation There is also a more flexible variation in which the System object does not control the level of the system in a top-down basis but allows each Subsystem object to resolve the dependency, retain its context, and elevate its run level. In this variation, the System object repeatedly calls the SubSystems' start() method until all subsystems enter the final active state.  fig.  SEQ fig. \* ARABIC 6 Non -top-down Implementation This variation makes the subsystems more autonomous but more difficult to ensure that the system reaches the final active state. Each subsystem needs to observe the other subsystems and subsystem startup depends on the observed progress of the other subsystems. During startup, system deadlock can be produced by one subsystem waiting for another elevation and vice versa. In the implementation of this pattern, you might have to consider error-recovering policy. If one subsystem is not able to enter the specified run level, the System needs to recognize it as an error, and to decide whether to stop moving into the next level or to retry after a while. Resulting Context The system can startup the mutually dependent subsystems reliably. The structure and process of the startup procedure is well defined. You can safely startup the system and avoid deadlock. The startup procedure might get complicated and the arrangement of the startup order requires detailed knowledge of all the subsystems. The startup procedure is fixed at design-time. If flexibility is more important to the system, an autonomous variation of this pattern might be suitable, in which the actual order of startup is deferred until run-time. When a new subsystem or a service of a subsystem is added, you need to determine new startup run levels. You might need a services vs. run levels mapping table. Examples An operating system has one subsystem called "File System (FS)" and another called "Network Interface (NI)." It starts up FS first and reads a configuration file containing the IP address and other information for NI. Then it starts up NI to reach the final active system state. Recently this operating system added a new FS feature "Network File System (NFS)." This feature introduced a mutual-dependency problem between FS and NI: NI depends on FS for its configuration. FS depends on NI for the new NFS feature. As this example shows, mutual dependency between subsystems prevents the system startup from behaving as a simple sequence (i.e. first FS, then NI). Therefore, the following solution is adopted. FS first starts up only the local file system service. In this state, the system does not have any network services. Label this state as "run level 1." NI then connects to the network based on the configuration file using the local file system service of FS. In this state, the system is started up with the local file system and the simple network. Label this state as "run level 2." Finally, FS builds the NFS service using the NI network service. In this state, the system is started up with the full feature. Label this state as "run level 3," which is the final active state of the system. The strategy here is to divide the subsystems' state into intermediate levels and to use these intermediate levels to resolve the problem of the mutual dependency. The Multi-Phase Startup pattern provides a solution to the mutual dependency problem that often occurs in system's bootstrapping. Rationale Each subsystems services are mutually dependent. To find a bootstrap path, you have to divide the subsystems' services into ordered phases or levels and arrange the subsystems, so you can gradually start the whole system by starting the subsystems in order. Consider an n-space where one variable represents one subsystem's state. In this state space, the transition path from the initial state to the final active state can be considered a movement of a point in the space. Non-top-down autonomous implementation cannot avoid the point's passing deadlock areas in this space. Top-down management defines 'check points labeled with each run level within this state space. Introducing checkpoints can deliberately avoid the deadlock areas. This approach is equivalent to that of "introducing a butler to the dining philosophers" to avoid deadlock. Whether to adopt the top-down approach or the autonomous approach means consideration of, for example, the complexity of the system, requirements for error recovery, real-time constraints, flexibility of the system.  fig.  SEQ fig. \* ARABIC 7 System's State Space and Deadlock Areas Known Uses Run levels and bootstrap scripts of UNIX systems. UNIX systems have run levels(init states) and startup scripts called rc script. For example SolarisTM defines 8 states and startup scripts for each state and places startup scripts in /etc/rc?.d where ? is one of the run levels. The meanings of the run levels are as follows. 0 Power off. s Single user mode. File systems are mounted. 1 System administration mode. File systems are mounted and users can login. 2 Multi-user mode. All daemons are started except the NFS server. 3 Multi-user mode. NFS resource is also shared. A Complicated real-time system I experienced. I used to work with a subway passengers guidance system working in Nagoya, Japan. In that project, we divided systems into six subsystems and each subsystem defined numbered entry points for startup. (-- I could write a war story about this! We wore hard-hats and observed 20 stations 5:00am(the first train) every morning and debugged after the last train The system was written in C++ and run on VxWorks.) Related Patterns Singleton [Gamma+95] is often used for the implementation of the System class. Composite [Gamma+95] is used for the multi-layer variation of this pattern. Separating Initialization from Instantiation [Cope92] also discusses an after you/after you circular dependency. SICO First and Always in Fault-Tolerant Telecommunication System Patterns [Hanmer+95] describes the importance and difficulties of the system's ability to (re) initialize the system to keep its integrity and sanity. SICO (System Integrity Control Program) can be viewed as the System class in this pattern. Craig Larman [Larman98] states in 19.8.1 of Applying UML and Patterns: an introduction to object-oriented analysis and design, that collaboration diagrams for a startUp use case should be deferred till all the other collaborations are analyzed well. This means that the initialization phase division depends on the analysis of subsystems' services. Apart from startup procedures, Federation [Fujino99] discusses negotiation among subsystems that are derived from totally different concepts. Acknowledgements I'd like to thank JPLoP members for a lot of advice in the course of refinement of this pattern, especially for an autonomous variation that is from HIRASAWA Akira and for the insight into the problem of the autonomous variation and the essential heuristicness behind this pattern that is from FUJINO 'Terry' Terunobu. Ms. Linda Rising gave me tremendous help and advice during the shepherding of this pattern for the MensorePLoP2001. She helped me refine this pattern in such a clear form and compelling words. Also Id like to thank Si-Sa team of MensorePLoP2001 for pointing out good things and suggestions on this pattern, I love you all. References [Gamma+95] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns, Addison Wesley Publishing Company [Cope92] James O. Coplien, Advanced C++, Addison Wesley Publishing Company [Hanmer+95] Michael Adams, James Coplien, Robert Gamoke, Robert Hanmer, Fred Keeve, Keith Nicodemus, AT&T Bell Laboratories, SICO First and Always in Fault-Tolerant Telecommunication System, http://www.rcnchicago.com/~jcoplien/Patterns/PLoP95_telecom.html [Larman98] Craig Larman, Applying UML and Patterns: an introduction to object-oriented analysis and design, Pearson Education [Fujino99] FUJINO Terunobu, Federation Pattern, http://www.kame-net.com/jplop/PatternRepository/PatternBody/Federation01/FedPat_v09.pdf Author HIRANABE Kenji Intermediate level Active level Inactive level dependency resolution Subsystem B Subsystem A #>CWuvyz~78#$!:P <@DMNVW^pq   B*o(pho(0JB*nHo(phtHnHtH 56\] nHo(tH5OJQJ\nHo(tHP#/>CW_GCEƀmZ& x`$4$a$$a$ &11Gt"y6CEƀmZ&CEƀmZ&CEƀmZ&" B mCEƀmZ& x`CEƀmZ& $ 7 8 , P Q Y Z f g r t } ~ 5 6 @ A N O s x      " # 7 8 9 : : E F G L M a b c d e n o mHnHu jUjUmHnHtHu 6]o(o(nHtH nHo(tH0J>*B*phQB  K : D E ylb`bX` ^  x`  & F^`CEƀmZ&CEƀmZ&E G o | bCEƀmZ&CEƀmZ& ^  $x`a$ .;AG^hn&R[%fghinostu|}~ %&'(-.BCDEG]^|QZ jU jy UnHtH mHnHu jU jUo( OJQJ^J nHo(tHR y6CEƀmZ&CEƀmZ&CEƀmZ&Iy6CEƀmZ&CEƀmZ&CEƀmZ&Myq.CEƀmZ& ^ CEƀmZ&CEƀmZ&M}&(^ x` $x`a$  & F^CEƀmZ&Z`f8[_rs{Zd9:AE[_uv  XY()%&gnHtH nHo(tH mHnHu jU jm)Uo( OJQJ^JW9oy64CEƀmZ& CEƀmZ& CEƀmZ& v2ywm x`CEƀmZ& CEƀmZ& 2ZHidZ x` & FK pEƀmZ&.^ `pK pEƀmZ&.^ `pHiK pEƀmZ&.^ `pK pEƀmZ&.^ `pJ & F EƀmZ&.VDWDghSTDWX`jk !!*!+!8!9!F!G!6"7"""""""""#####=#?#S#T#c#k#{#|############ mHnHu jUB*nHo(phtHj>B*UnHo(phtHnHtH6]o( nHo(tHM!""">#?#J#|#$$$#%KxEƀmZ&`$xWD`a$ x` & F##I$J$K$L$k$$$$$$$$%%&%i%j%%%%%%%&&&&&&0'1'e'v''''''''''''((0(=(C(E(F(Y(Z(m(n(((((((((( )!)])^)b)c)))))))6*5+?+G+I+++=,B,I, 6]o( OJQJ^J6]o(nHtH nHo(tHH*nHo(tHV#%g%%%%%&e'v''fCEƀmZ& x`CEƀmZ& & F '(()+w4CEƀmZ&CEƀmZ&CEƀmZ&+++,9.D../ 0kCEƀmZ& x`CEƀmZ&I,J,],b,,,,,,,,----8.9.;.D...../j/l//////0 00 0"0u0000000011%1&1,1?1@1M1N1]1^1t1u111111B*CJOJPJQJaJph5B*CJPJ\aJphB*OJPJQJph6] 6]o(o(B*nHo(phtHnHtH nHo(tH= 0011&1'1(1)1*1+1,1?1ywmkkkkkkc1$7$8$H$ x`CEƀmZ&CEƀmZ& ?1@1M1N1]1^1i1t1u1111111 x`1$7$8$H$/ =!("(#$%Dd: V  C 2Astartup1.gifb0t+ڮX́`({ Dnt+ڮX́`({PNG  IHDR&ݑ PLTE]hbKGDH cmPPJCmp0712Om}IDATx8([CjWD9OK'$Pᯜ*;$b۱f!cbWRWi-X)+e߶R>'mq= ^B@?2S!tJn { \F/Xf dR-3)7s,)/4&%gSSrjPW̹MG.dX ])aWJ|1'C_@rHFaJ+?PqYq &3\W^nZeNX,5rCߕ-Vl[(Lda%ID?J85̣oCxalִB)zhrM^nC F6ٍ7|h8l~>Ek5mD8Ohx->P&* [޸PV-@p;S۷sH@3R0+gfwxjtzUec93my9[μ̷ )QEӪyaJ|ǧ>\wZ3/H9g[Y]3/G6ʰuغ8lPwy-;)ovFd-%uQ˓(Uw3߻/'Pڻ)^Wet0.?BSx&8#'(ϘF+62V虼U=W!*PŒ3P^+q*/qa*XCz,KK2xxZCQHLaa4E=Niq9:<C_)aE}x+a[Ru)7wwkDh߅2imzeeuy|d^2ORVJY)}oʤZ(i>GkPnܾRioze,Mܾ2hnJB!MS4o%4EsTaʍ۷RQ[I(jIq”DmRN{[IENDB`Dda V  C 2Astartup2.gifb`!g!n`!g!PNG  IHDRV PLTE]hbKGDH cmPPJCmp0712OmBIDATxK0`+O1U 0p(+"+$PSm^.w#趥|N~ca7)HA Ajy xs@y 6{* MDj45VuJi] "=qtt!Î;ZUg(͋Ly!{ԛFQd<.#`.#F캏z] Q+͋Ly!{7kD%FQO Qo Q8zLE=+"8kx+ȷGNT]9V@5Q W24zϓu #mˏo,fdkOt)ϭ.7r"]!w7GΟT9ܾ0t<&"*UآuzJs#h_ Cgt"S& 3Yv|/$:ِ6:̖#a˰ {M)%r?/0+RH`kdA(fDϦvbPhbfEܮ7?-jh$/;'#w?qOa%]`*b*h]ǻC+34!3ZA~BDPkW_gGF5xC1"D\Q+djv2c?FQ_wdێ"tEt2nt|RYO_:4BD<FȈʔ{\$qS:RvS*DԷw&d*BF=F=3";@dzƑWLk+"07BN%B9}bI%C:"җcR$!t9rz,~c<6#dH#ěIҗ:|'\>K_aȖF2zU VnP>O/0A #7(VS$K7&ypԇqKL#IDzD+!BGqRF'un 67\7SK%}7u}x <QK n[?ЍFyAʏ>g ܕNIAAVEk؂.2gpy9dR+HA R}6ZynIENDB`Dd? V  C 2Astartup3.gifbj&\A}u|F n>&\A}u|PNG  IHDR@k PLTE]hbKGDH cmPPJCmp0712OmIDATxN0(d V(wVڞ@|&q!ufJHh݇84c*Vǹخws !F $|W} DAnmkV@F+Kq = *=MoFCjSXV|s (΀A&ܝ{!/BN֝m#&39ЇK>3/+2W%AƚBأKP2 J^}%3}-_ 0N |?9=1pϯ`ؒ!k2(32o0z^zv'L0l0aq Vh6j`ZJ!#hN0 Y} 8) pEdpH `= XcH 6|\ V6PH wnzHpۮf>gi('}ZVsbON @rZ ƋCZ8XTJpZ&VGKN'gy\dĤCS96j{~.~pGo |};pup7{}RvC~=;z=(o%?U/RkObg5(`= oц*"06Bm(6UoZ1lxʪˇ쫓@\T0lxʪWӆ![lO{Bϔ]E͋IK]El]] da'R9Dr8VܢýM]Gp-:n蔩dN5gOPE NuU-.`G[^]}L>vzK_n=JWϖM5V>K0ȦvzqNj[ S]S05!) #ĥ]'Z%hs}m[~lng{lyq{Ib`3.Pᅳujj:LvaGbh2gxnw:hbvWETU4Jh^P=$p;vUwh]j^*C}ޣvޣ1)& e4iKY] `½&iS8ƬS*v8=gc%~du3 ʳLoN;S0 \5xa0WbZh~ FV aҕaίΟKVa#w-FW\R 8>Ekh7q_a6DqDvU ͒B^a;8b*vaqo?h~р΍v--%]6Q&`+sG{=yK}]}Hfp^R2`pb7|><L39]vnr#S61>0Zu $8};Dܮd~{l;/.)W} HvD5J(5}ί, w0sX}IIt mAyN5NFD v-wG * icW3V55\?*kWVP?R^L케 ]&Bo+Z&)=κ[Dov~脁`G炰 C\2Ҫ&U9Q}{ɋ:G]l{eo&<#YvO{wYZ9;sC2IURm)E*i8 qMn;; Sz'ŝ];js=2ʻ?7eqw[Wn$[RtVh]^MBzloTh0 {)Î]nkl/Ƚ6f,WwutִINMRS@{B.{'Tڨ$^c#4vX)^DObw#{G5o#2DNpכץڔ*5F/bwyVk43Tvװ7x<. |EYvxpw@Ǜj2fMT'{Vv;N;$q~Kt6}/mۻ<7B+ ]PsJk_Gv0Oxw2 X2d-LfWj_E@S&}?{va:rag#11GQD( vS`׮]e;/}є,^lGUpfiC͘J6volA- } ;c/Жϣ.Z< pgHLPϞcΈ<Ye`RĮ)Έ=nZTJy&\0Ͱ3~ݒ`Ff{EtȄX]RC%X~8w|Kkd/Ϊx9"s6N,v:LH'酰Fް7v#(בv4!S{5[j\`; Y|'](br߼ 9v?]j3k^95;vqq .8nYRN;zM|KTq44;аO#Iqa6 no쐹]CdhjpNfҙZZTaPDƐLdMl]*22*1n0y飱a~u߂ujLC &$sd1Nع7]shSynonv|ݐu6 Wt5|4ֻ!ue}Hnd `S83.KJTnF$d]rxd,#o Kc(j90ak {l|8JTĜA}f* Ʈ"m-l{Gzpn7FZ89궂C{GƈlׯcgKlGxH\W `>Oy(H7h?\YC &^[)nJ70`b߀XȠܱo]ZjvMyFN!K6jEsJNbd;l'l\WX+JT,lW(,ĒvMZXC`' ndrJ6548U _\`W +׈X`%kIFtS{5v[:ӟg?':%LF>N1H;1pAV%5lDG~e|d?sgU5s]awfb avzdAg+Y[9s#uk,mӃҾvGf_Dl7t3`;9܁}csk;7ƚ坙@Y-| 蹲w4V7]km5nm_9;f@ܤ ]vr \3dǹ]vr \CUŽU|fx=rgݞqyW޳{nϸ+`=`g\^{y3./\%IENDB`yDd V  C 2Astartup5.gifbB|C)nB|CPNG  IHDR#&PLTE@ @ @@@@@``@``@@@@ @ @ @ @@ @ @ ` `@ ` ` @ @ @ @ @@@@@@ @ @@ @ @@@@@@@@@@`@`@@`@`@@@@@@@@@@@@@@@@@@@@``@``` ` @` ` `@`@@`@`@````@``````@````@````@````@``@ @ @@@@@``@``@@@@@ @ @@@@@``@``@@@@@ @ @@@@@``@``@@@@@ @ @@@@@``@``@@@@0bKGDH cmPPJCmp0712Hs(IDATx^흋*ϣ7DQ(֤ΙvPi)i&11&)pވOy 7"crĘy#2?1&)pވOy 7"crĘy#2?cP\a5=Ck\(RG%Z 7KT~Q^D ,0`•Y^<](5ZΤk y&N溒hʋ*Fm!X 'X %6axr\l^M1ᩦ[ I8$9. B01&11&)pވOy MDܼqEd%W3 [hlvޥ _+vV7p`RwQ쬞2H:Dziӂi V5.h%hg }^?911&)pވOV1!ÓzUCVQ1?Y8/Q1& -bL2YBŘ07d10 zL?91Yd̅VONDϣbLy 7"crĘy#2?a⎉gZ5&rEj*DXKŘdke3&2&P1)p\Ws ˠc"Q: X(?'݀aLԓS}?,r *tpui W+޿dc-{xGCEEkYyv|R_|G#|+adSH9~mJx l ~?iIz8Gq!&9ޘB)ġIŮXaC-vɏcq/@ '? ˬŲdS!"cH(d1lCqcA.DEkK  o+j?I)DŽMcUn jH'wr<g#蠫Xnc2OdҊQ?)V_}yYXԝ)I~sǘ$X@^||v;lr'$XCw:LIrN/38L|RgV1U&PddR}'_?'5b fİ$픐P_/Û-2Y3YvUe; l6p]o sM '&DsL 竪ۥ؁bNnzs'\)8VWu;Plژ|UFo{`æ6켋TD}wA7ذ)vm0&l&6z${ O6L.bWUKŦ煝hA.&V} OSNq)6|v)vش1 M9mRy#f}\S`po]O%j&*fէ@-i `>DP(nx#KvW?}  ڢ侒_m[r՚[NNx/_]ծL0Z'sr5Ng(~ 9-.gEdf1A~2&>(䓡ot䀟#V+N wB b6D1oLnJ̄vm&A ַ`~Xmi'.kC\ > %{?(G*OLX߂Ɍ]#[) cL_W ~up=$=8X4u͆Fm&߂CN' ;p9x[r-Rg4a; 3_ˤk Ӄ{L'H&X6&=.G1_W :G-&M1n~B3i3 i .+R5Of"ћSgOnoY&8ʍΫ^xChB$ h Wd8Ij98U5I2?cgh.N0/: \'8!dRg1q%}:q9%-ؘ0$o!:|n>u2&hC82nΕִ,5WݣqD 9PY? N !5^:ijȭL+r5n@&p-LNoehx& q^K"ގI;1~{a~1Q~RcG?Ng1q3IpT8"[9ЎU2Y%x/bJ?H1!Z@/b}zLnrxqQ*ä|fhO,Ln>*$v+ͥM-bBe J>=ZعB0'ɣ`i?vbeX $2J0&8 ߬Bwt y @F$M`@N6hR P$t1()ED'~U*W {2/vCLp@Gr*sT3 H9IVp1e.abLs<$32W=o !j#f]뇤*Ky2ЙSO%K y#RDȤ/ʌd]?zδZ604Uwɭ3.f40|&Q_aOpI8[01]E9ך˘wvV(#LǮd+p/RlȾ.qn@xOSLe0SѼY,0@3.Q0y@^`YvE#M% bYsl?eni#H7 } xB>A&|4mXV,n]lOwKZ@c"LY,?hp1>]צEFcׯ2s ZK =fHI >O0Hda{N)Cku^6k)jr<~n>"DžYȟW12 Gc!фN*Z'K)ؕMK|"v@G = CRQLfeOã[khLZ -Z|9&!YZ$V+k vV dOVkØӟ<%YQT@bnCh^ YCa+u;0&ÒW0&w`L%S`ag%$3:0&6&<19OFd~bLS8oD'<yLO  IENDB` DdZ  C 6AStateSpace.gifb^^u?Π:*?n2^u?ΠPNG  IHDR`PLTE@ @ @@@@@``@``@@@@ @ @ @ @@ @ @ ` `@ ` ` @ @ @ @ @@@@@@ @ @@ @ @@@@@@@@@@`@`@@`@`@@@@@@@@@@@@@@@@@@@@``@``` ` @` ` `@`@@`@`@````@``````@````@````@````@``@ @ @@@@@``@``@@@@@ @ @@@@@``@``@@@@@ @ @@@@@``@``@@@@@ @ @@@@@``@``@@@@0bKGDH cmPPJCmp0712HsIDATx^]v8ݴuXu20o7UB!!!KAE,.pTTKAE,.pTTKAE,.pTTKAE,.pTTK⒁YPu׀}J߿8|gUKyϗ?4hՈ5sY$ >?>yS5SgQݡ9uIT "O]}\ YZSQq(%KrդݨgBɳT2Ub$U.* -|juV]K6 fU8T u\#8w ÊjQ&T]ȢãEPw.er]vߩ,=FgyGNŻn%-{tV;Ge(-|?H*12ҠH#z\6d1ѨQ,ެP%zk5@dI.2U\bc{(P[He^At1fRs@*uc~q \iv35ϥb˅dUY + &càl*5D7A"zRx˕Bc a :.c aS a9?^E,3cP{9b <%da2Z~pAǠ0J1Yę6uW"S/df*d#~u`> z1(>ղb~žb,4VŐECՎ(?!q˾.7U YUypiw"*wM,ۺ,ڲ$&]ZY^46  ѠPZ?ϴnVq._D[n4*0'W!d].τylB[;j^qy|3n,-\.X_6태_z-Ff,tw 3HۇhKö> 1Ot-Y=`$84Rnɔte* Z\_YLJ0:4%>_Oҳ2P.FT >E,IթVK.R6nyr?A{b'ץZIqĮZ-ukPBym>ERdrlǿW\ts@9D@Y{o;ֿÂAq-B+J\e422; BCrC9w-CCrC9w-CCrC9w-CCrC9w-CCrC9w-,Gw]Q\26:`?Gkذ<*锓{DY\ihhRvw 'VrSŊ1GVGmw'rbQ>diڧb犷j\ѝ"z ]{9v*t&iiɲ_%<|dS-[j񨩲&<]^Y-`2poS=Vrj<w,Fn=~_&m9Y"m:h/% iYe{9*k SEQ#Jq>&5dA(]Ύ.mR0|D&#^uVxU[nFr2lNJeprlr&(dB #rzrM,|N&?*9hȆT䮝> #l+9Ncj-H5007Z4i h`r *d!?6 Y R1C> 4K1Pe/el6:?2a*d+!ߩbv;fP S6`Tv_:1#U.,J.nLBaihݗ3?v: Yd90ټqLv#5BCʱ=Ml*rGo]TYWeBN8/q1$`.. FwoBL.Z$\)1# f_@#f,S1,gU5ԯ/VRY˒.v(#v,[hDaw.k ]bnRB`ħ!ص!%(6[A QBPtGk+5}Or|NM5)?bsrzFQ؞ȳ4ء*UMh1>K6ĒKELF(馺ddbʥ&#[[d]aRENR-wE0)٢zshIԹ"WLQLsTdb\j+LN(9LbRGiV}+tIJ~#)Lw3LV(%wB\S% XSLR(7W?*:?䤇T+u#lPzG+}`2RC YdݹJKA/LBZ(W?_ZlIH s9/LBKs9Q},oqBcLB vkA3d^`ҁ,53榊V8t,f]朹n'7x&(E]O헙O-w&}zr۲1 /!'Sr(!l~,Gr4$K\}aX` hoŲ$Nj4X*%_0)R\<]]iFR]GdI߭G t1P7JmC[̣ScC3KT#q3u KBr_d7ᬠ,'^54^,xLT/M0b;y4dqZN'2lmr_ّz}&g𕆓w.`diYCmMֵO5-mOh-m#K-=.A-Dت|{,{eO,ѯ7kŚJv)HfRs-.e*czEcܘ8/Xx~SY/ZZWK1*0 !>`à`T% aB|8AJ0(*p! Q(0aPTC*Q`à 0 FUAQ!ć*aَj~KNEoD1#lv @jPNy#{frDuϏtܔ+$W&%6wxdIϻOOgM*Brqd\\99{@)sUxKJ8|<'|~?]a2g2&.%nNTTT39C׽kG%WgKYxAl}im b|=.e`Z] ȗFj"Y, y0! /u"Y, y0! /u"Y9 3)e(IENDB` i(@( jn_HmH sH tH 8@8 QW0 1$@&CJOJPJQJaJ>@> QW0 2$<@&56CJOJQJD@D QW0 3$d@&VDXDd^ OJPJQJA@ k=0000(Z( f_j0W0 OJQJ^J$'@$ 0000SgqCJaJ"" 0000eW[R>Y"> QW0000-D M OJPJQJ*U@1* 0000000 >*B*ph4B@B4 ,ge2dWDXD2YDd`$0@R$ {agfM0  & F(:@b( k=juS 2  & F @6@r@ {agfM0 2 & F^`nHtH@7@@ {agfM0 3! & FpVDWD8^`p0"@0 VhjuS$xa$5\2V@2 h:yW0_00000000 >*B* ph(8O\i-|{(8O\il   -r#/>CW_Gt"BK: D E G o |  I M }  & ( ^ 9ov2ZH>?J| #!g!!!!!"e#v##$$%'''(9*D**+ ,,--&-'-(-)-*-+-,-?-@-M-N-]-^-i-t-u------0000>0W000 0 0 0 0 00 0 0 000(0; ; 0; ( 0p  p  p  0 p  p  p  p  0 p  p  p ( 0  0 0  0  0 0  0 0   0   0 0  0 0 0 0 00w w w0ww 0w w w0ww000 0@@ @ @  @  @  @  @0@ 0@@@0 0f# 0f# 0f# 0f# 0f# 0f#0''0 0:* 0:* 0:* 0:* 0:*0-0000000000000@0000000 Zg#I,1#&+026G"B E M2H#%'+ 0?11!"$%'()*,-./1345781 "79L a c - B D -       8@  (  f h ``  u# #" `B v c $DԔP@@`B w c $DԔ   `B x c $DԔZ2 y S   q Z2 z S  0p f { S  ̙p    r | s * ̙ 0   Z2 } S   Z2 ~ S  0Z2  S  & Z2  S  %0ZB  S DZ Z _ ZB  S D  ^ ZB  S D 7 ZB  S DZ 8Z fB  s *D  fB B s *D  r  s * ̙ ` F  f  S  ̙ J   f  S ̙@ f  S ̙z Z  S ̙`` B S  ?-u'T _Hlt528992150 _Hlt528992151,,-@@,,-&-- G J ( . Y ^  ( + ? B &--3333333333333#C8: E G L b o ( - C ^ !!--&-,->-@-L-N-\-^-s-u-----s^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQGC:\WINDOWS\Application Data\Microsoft\Word\R000000 ^ startup-2_3-e.asds^K0ePPQGC:\WINDOWS\Application Data\Microsoft\Word\R000000 ^ startup-2_3-e.asds^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQ+C:\WINDOWS\}xo\JPLoP\startup-2_3-e.docs^K0ePPQGC:\WINDOWS\Application Data\Microsoft\Word\R000000 ^ startup-2_3-e.asd2 \> ^> `\.\^`\()\^`\F T6s1AEU{ Snt obYTt8KUujYT@f |P        /Tf       C                 |P                 |P        |P        |P        ^        (dD        >"                 @JJd22JJ-@@Unknown Linda Rising G:Times New Roman5Symbol3& :Arial7& Verdana?5 :Courier New96 -3 00000G -3 fgMS MinchoK5  -3 0000MS Gothic;Wingdings"h dFdFdFn:%O20d- 2QJ ------------------------------------------------------------------------ Linda Risings^K0ePPQ Oh+'0$0D Xd    K ------------------------------------------------------------------------ -- Linda Rising---indind Normal.dotg @g14Microsoft Word 9.0-@]@&'@Xy@1(:% ՜.+,D՜.+,|8 hp  SelfaO- K ------------------------------------------------------------------------ Title, 8@ _PID_HLINKSA$QCE  startup1.gifQ@ startup2.gifQA} startup3.gifd&& layered.gifQG startup5.gif#v"StateSpace.gif  !"#$%&'()*+,-./0123456789;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdfghijklmnopqrstuvwxyz{|}~Root Entry F`*(Data :U1TableeMWordDocumentrSummaryInformation(DocumentSummaryInformation8CompObjfObjectPool`*(`*(  FMicrosoft Word MSWordDocWord.Document.89q