kbbby nameby nameBUILDd k\Abb./AA k8mbbb&./lpp_namemm4 R S cluster.es.svcpprc { cluster.es.svcpprc.rte 7.2.6.1 01 N U en_US PowerHA SystemMirror Enterprise Edition - SVC PPRC support - Runtime Environment [ *ifreq cluster.es.server.rte (7.2.0.0) 7.2.6.1 % /usr/es/sbin/cluster/svcpprc/utils 480 /usr/lpp/SAVESPACE 480 /usr/lib/objrepos 8 INSTWORK 248 208 % % % IJ39105 2 SVCPPRC change volumes not supported error appeared % SYSTEM PRIVATE % % BUILDDATE 0743 ] } k\Abb./usrAA k#Abb./usr/lppAA kAbb./usr/lpp/cluster.es.svcpprc/cluster.es.svcpprc.rte/7.2.6.1AA l(mPtbbb&./usr/lpp/cluster.es.svcpprc/cluster.es.svcpprc.rte/7.2.6.1/liblpp.amm   _ces "=dilmoprt'./agnuv-0fhqy12>ACDENPRSx,34568:IVb$79OUz|HMT\kw+FL G`BY?JKXj();<][$ /H,'0 ?"# ?îm``v$Ni:}2 @@ H # H X`(/NqO D|`ـ<[xn8.y&⸄ *S 0(8@!ig$isl -C֛!(pX$ EO2&6|0 r,!dE$XHI)O s`nHa)H$6| ܖɷYnx$D86r.Kf7@2)` Aa@aa? P$,XXEG?ێ'OVL^ٓ<0Ӫ1(k:,+ͧ)(k+pus(7Mg_VqOF4åHC\.x#yJ's1ξ>]k2l( ΟVBQ<?LpNu1ξ(-/z FSY RP7~Ni^ٓeINPCYէc+`% enN_PjJ 9Yn;g`%9 8c䷆ƚٶÈ@ _ǀVPe kOWZ̛.jJ's镹>OO):Pn Φ>9%_Rk:`jJO)о>]k2l(?Ly{}JJO(%:~uB3% g_Vq5:9}BE(7Mg_S0eK\tkcJ'sq#.m5kfx':~C1ֽ&˚enO%9k:@L|sJ sK޾%qѧuqjJO)о>]k2l(?Ly{}JJO(%:~uB3% g_Vq5:9}BԔs2ejJ'sqB96˞3^p1"x':~C1ֽ&˚enO%9k:@JPn Φ>9%_Rk:`@%qѧ__Vq6\Ԕ FP<ξ%qѧG_R}? :v%LJFaԔs[n;g&YHv$x':~C1ֽ&˚enO%9k:@(7SbI@tie5}@p0$Zt/OWZ̛.jJO(^_R#INPCYn;g`% enN_PjJ 9Yny"w5%9 ,3Ć@y%%9g_Vq6\ԔOO+r}|!( ΟSY A':_QJ sK޾%qѧujJO)о>]k2l(?Ly{}JJO(%:~uB3% g_UJ5:9}BԔs'ێv\ԔO#78c䔔OO(c]}Z}2׶dsRQ<?Lx':~Mg_c}F(-/z FSYԔ FS}}Z}2׶dsRP7~@: FP>}JJu4f Jξ`ʖ8T5:9}B(7Mg_U2X[m)( ϯ-ā@@D3㋛`nlTOO(c]}Z}2׶dsRQ<?Lx':~Mg_pNu1ξ)(-/z FSY(?LBeulɲ椠n:42u)(?L| :i5}L,qsl ѭ(k+pusRPn Κξu8ĝeIDN}}AK4(HlO,$ !G\tkbx':~C1ֽ&˚enO9k:@-(7S5IAni{Ԥn:42ξ8 $n:42 1ֽ&˚Ԥn:42RST#0bPu3TͰ7F:i5}V>X[w5%9~r@ "qͰ7F*J's1ξ>]k2l( ΟVJQ<?LA':_QJ sK޾%qѧu %qѧ__Vq6\Ԕ FP<ξ%qѧG_R}? :2ejJFaԔs[c+&YHC8l⒉e kOWZ̛.jJ's镹>OO)L|sJ sK޾%qѧu"ũ(?LBeulɲ椠n:42u)(?L| :i5}Lc+RPV4 5}Vc+'qsRQ<_P`3 78ǵҼRQ<?Lvui^ٓeIDNt2'e5| J 9:RP[^)(?L n:42 1ֽ&˚Ԥn:42RST#0bPu3VqICY[ӟ,-IA':k:~qeIDN}}B8x83q+%9g_Vq6\ԔOO+r}|!( ΟSYiA':_QJ sK޾%qѧu!"Ԕ FS}}Z}2׶dsRP7~@: FP>}JJuiocmlD;.jJ 9Yny"m)(fMg_Uێv\ɷ[>T[Hv%4L„(4?Lvui^ٓeIA)enO%uiD:6>J-­`%TVZ0}F1RQ"M n9ioξ%e n9ioξ%c}LRP7~Mg_Rt/IN-CY bPu[q<;˚pNtu[q<6 dB3l 'ێv\ɷ[>T[Hv%#ߔ25էc+&˚K~Sܟ_J -O)! D:6>J-­`%TVZ0}F1RQ"M n9ioξ%e n9ioξ%c}LRP7~Mg_Rt/IN-CY bPu[nqeIA':k:7OVMY%%iX>Y;˙6B3RP4K~VjK~u 8ǵҼ<iP%1ξ>]k2l(4?Lߔ2ξL|sIAaʜ*^FRQoeNn/ua>%,FRQpPFRPn Φ>9%qѧu)(?LBߔ5% g_UO1칩(7Mg_UO1o`IID#6k:~qe̛{!(^ѥ+qs5IA:@@D3^pߞp8J -O(c]}Z}WZ̛.jJ -O+r}|!(4?L҉u)(0l6}}CԔ[S[h}JJ-­`6c'ԤEs(ߝ}JJ.s(ߝ}JJ 9:n:42ξ%:4 dCYn6ؓ칩(7Mg_U\tkbMY%%iXc`nlIv\ɷ[>T[HC88LJ YaBC`T[Pƻ:eulɲ椠ߔ2'RK~Sk:Hc}JJ  _P%TVZ0_R{*pq{> Ɖ)(`&74_RF274_RpNu1ξ)(?LI@tie:Ԥ_F1(k:|Ͱ7F$;.jJ 9Yn.m5&Fmu[c`nlIv\ɷ[>T[HC88LJRPio~C1ֽ&˚K~Sܟ_ J -O)! D:6>J-­`%TVZ0}F1RQ"M n9ioξ%e n9ioξ%c}LRP7~Mg_R}[CY bPu[c-lD5RQͰ6ξqleH{!(^ѥ+qs5IA:YHv$ߔ25էc+{fM5%镹>[SYҋ{*p(Yh=n;g+OVUU3O%RQyt3:6>%TLnu)( cv~J Ɖ)(4k@҃qZ+:n:42ξ8-I@tie:էc+{fM5%:@ġXq<6 dB3l cmlDI@-[˟_P% Yg+ ā1lJJ -O(c]}Z}2׶dsRPio~[ A)e5|[S`__QGl+A4qԔ[S1p?%QcDEK~qVߕJ-ek@ҁk:`P%qѧ__Vq6\Ԕ'ێ䉷k$`m5}V>v$MY"mfi{FeϯzK~u~r@y%%1ξ>]k2l(4?Lߔ2ξTX'Q"J{M*v$Vq{4tjuRQyt3:6>J-˜ݸ(Yh=n;g+OVUUۧڒ{*p7n0ٌh_P}Hio*Ԕ[VuiAh|ZP7~Mg_P  RP7~Ni^ٓeI@tieRP7~@@u))ս5% g_U3OVMY%%iiɷ[>T[-ā@@D3^u%1ξ>]k2l(4?Lߔ2ξ%TX'Q"J{M*v$Vq{4u\ >e|UqlfqIAz:`]> ξ% ϯIE8S]}JJ-˜ݸf1}}JJ -Z+:vV ξ-(?L -I@tie:էc+{fM5%qѧ/sI@tieԤ_VPH5}Vc+&Fmu[nq{!(^ѥ+qsߝ}AK4q!Z{*p7n0ٌh_P}Hio*Ԕ[VuiAh|ZP7~Mg_P -I@tie:էc+{fM5%qѧ/sI@tieԤ_VPH5}V?OVMY%%iI}2mod#5%K4n;.}}CԔ[Goq#xߔ25էc+{fM5%镹>[SYढʜ+;dViZi[1ofnejJ =IF RP`l( cv~KEfUH>YViVnqIE8SUl4OQX 4jJ -Z+:vV ξ-(?L n:42 1ֽ&˚Ԥ_VPH5}Vc`nlIk$`m5}Vc`nlI[>T[-ā@@D3㋛`nlT[Pƻ:eulɲ椠ߔ2'RK~Sk:@ [S`__QGl+A4q]k2l(?Ly{}JJO(%:@ġXc`nlIk$`m5}V,qsl ѭ6B3RP4K~V=IA:iC`x83qqsl ѭK~Sg_Vq6\Ԕ[VJPio~Mg_TX'Q"J{M*v$Vq{4u8IAz:`]> ξ% ϯ%TLnuvȬҴJc+**8IE8SUl4OQX 4jJ -Z+:vV ξ-(?L (?LBeulɲ椠n:42u)(?L| :'\tkbMY%%iI6ؓo`H{!(^ѥ+qsߝ}B8x83qqsl ѭK~Sg_Vq6\Ԕ[VJPio~Mg_ҋ{*p(Yh=n;g+OVUUO8IAz:(<|}JJ  _P%TLnuvȬҴJc+**8IE8SUl4OQX 4jJ -Z+:vV ξ-(?L )(?LBeulɲ椠n:42u))ս5}Vq<6B3RPV4 ۡ2-Ԥߝ}B@y.[IA)e kOWZ̛.jJ -O+r}|!(4?LEL|s%l>>95%l>Vu8JQ,se5% h_Pz{*p7gO3IE8SRQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P n:42 1ֽ&˚}[PCYn-od#5% enN_PjJݺs(ߝ}JJ -$ ;g0v)(4?Lvui^ٓeIA)enO%uH%(jc}RRQCc}SRQCZg_Kc: IDe'*JJ-œݝ> ξ%TNnϯIE8Sf1}}JJsv\RPyn;)޾ 5x,6zqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ8n:42 1ֽ&˚}[PCYn-od#5% enN_PJ7n74_RK~u@ _ǀVP[Pƻ:eulɲ椠ߔ2'K~Sk:$B51ξ)(g!1ξTaցYť6XξRQ`Ɖ %TNnΟg_R{*p7g<̟aC[]k2l(4?Lߔ2ξ B51ξTa_TԔaցYX8jJ#,>MRQoeNfu)( sv}}JJ-œݝF1RP6jqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO)(?LBeulɲ椧_VT#0bPu[c-lDICY[ӟ, RPFRPioξ pg q<ˁK7T[Pƻ:eulɲ椠ߔ2'K~Sk:@(B51ξTa_TԔaցYX8 IDe'(ʜ)RQoeN[S9:6c'Ԥ:meϯ%㲚k0OJݍ[RPyn;6Pƻ:[ͧ镹>-(<O)҂'Gz FSY(?LBeulɲ椧_VT#0bPu[c-lDICY[ӟ, RPFRPioξ|'H )(4?Lvui^ٓeIA)enO%uZQ:RQCc}SRQCZg_6XξRQ`Ɖ ʜ)RQoeN[S9:6c'Ԥ:meϯ%㲚k0OJݍ[RPyn;6Pƻ:[ͧ镹>-(<O)҂'Gz FSYRP7~Ni^ٓeINF`ġ[䉷Q?X(Z7n74_RK~u;[Pƻ:lDsRPio~[(4?L@D#S5IF9uMIF9h|J%l}@2wRQoeNfu)( sv}}JJ-œݝF1RP6jqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO)T FS}}Z}2׶dsRS{*1(k:6v$NMԔ5:9}BԔ1t1Q:-ߝ}BX$ ;g.4L%1ξ>]k2l(4?Lߔ2ξRF>9j6rS5IF9h|ZQ,se5% h_PRQoeNfu)( sv}}E+4ҭlEiʷJ;tRQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_Rt/OWZ̛.jJuoeB3% g_Uێ䉷Q?X@% n n9ioξ p`xXRPioξ pg q<-ߔ25էc+{fM5%镹>[SYb҈F>9j6rS5IF9h|ZQ,se2j{*p7gO3IE8SRQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P RP7~Ni^ٓeINF`ġXq<6B3RPV4 ۡ2-n4⒃K~u @y.[IA)e kOWZ̛.jJ -O+r}|!(4?LRF>9j6rSꚒ6rZ+:%(9u2ʜ)RQoeN[S9:6c'Ԥ:meϯ%㲚k0OJݍ[RPyn;6Pƻ:[ͧ镹>-(<O)҂'Gz FSYT FS}}Z}2׶dsRS{*1(k:6v$MԔ5:9}BA*Jݺs(ߝ}B @)(4_P838Kؤߔ25էc+{fM5%镹>[SY uIIF9uMIF9h|ZQ,se5% h_P)( svt3:[S9>%TNnΣ Ɖ)(yΛkqs5IA즚҆7cGz$ח!`!J-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:`Zt/OWZ̛.jJuoeB3% g_Uێ䉷Q?XZ7n74_P4P% @$?g/)(4?Lvui^ٓeIA)enO!IA)e5}@ZF>9%l>>9j6rZ+:X8=IDe'+T[S9:|}JJ-œݟ_QGlҠǙ,0kg (@QK~p,EiVtG0%IE8Sf1}}JJsv\RPyn;)޾%ie kIA~[҃qٴ2ξ-(-tyn;7I@tie5}@p0@jJO)о>]k2l)ս5}Vn;g&FjJF`jJݺs(ߝ}@%pph c%J -O(c]}Z}2׶dsRPio~[RPio~Mg_P(ZF>9Ԥ : ִ ξKc:(cD5IE8SԤʜ))( svul4OICt[˟_QJ-e4`_1<Ԥvm?Lvu)(<O+r}|ZPyn;6SYťN-f)(?Ln:42 1ֽ&˚}[PCYny"mfi)(cvcq̣K~uDCDBT[Hv%IJk84C%1ξ>]k2l(4?Lߔ2ξ %L|s%l>>95%l>Vu@-(9uRQ`Ɖ ( svt3:[S9>%TNnΣ Ɖ)(yΛkqs5IA즚҆7cGz[ͧ1ξ%ienOJ-fk:޾%qѧu*JO)о>]k2l)ս5}Vn;g&FjJF`J7n74_PXRPioξ|'H )(4?Lvui^ٓeIA)enO!IA)e5}@0%L|s%l>>95%l>Vu8JQ,se21IE8SԤʜ))( svul4OICt[˟_QJ-e4`_1<Ԥvm?Lvu)(<O+r}|ZPyn;6SYťN-f)(?L n:42 1ֽ&˚}[PCYny"mfi (cvcq̣K~u   %ppk[Pƻ:eulɲ椠ߔ2'K~Sk: B51ξTa_QJ0}k@҉`,g_QJ#,>%TNnΟg_R{*p7gԤʜ)a>%9mn;.}}F(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ8,!I@tie:էc+{fM5%:cmlDICY[ӟ,ۡ2-P%w%~)(4?Lvu[䉲椠ߔ2'@2Pio~Mg_҈F>9j6rSꚒ6rZ+:(Kc: IDe'(ʜ)RQoeN[S9:6c'Ԥ:meϯ%㲚k0OJݍ[RPyn;6Pƻ:[ͧ镹>-(<O)҂'Gz FSYń(?LBeulɲ椧_VT#0bPu[q<;˙6B3RPV4 RPFM-ߝ}B@y.[GIA)e kOWZ̛.jJ -O+r}}A J -O)TB51ξTa_QJ0}k@҉`,g_QJ#,>%TNnΟg_R{*p7gQ"J{M*v$Vq{4sO%TNnΣ Ɖ)(yΛkqs5IA즚҆7cGz[ͧ1ξ%ienOJ-fk:޾%qѧu)(?LBʄf Jξtn;g&6B3RPV4 RPFP%RPio~C1ֽ&˚K~Sܟ_RK~Sk:B51ξTa_QJ0}k@҉`,g_P% h_R{*p7gO3IE8SRQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_Rt/INF`ġiɷQ?X@% n n9ioξ%qu<6JGRPio~C1ֽ&˚K~Sܟ_PBK~Sk:pJF>9j6rSꚒ6rZ+:X8jJ#,>F%TNnΟg_R{*p7gԤʜ)a>%9mn;.}}F(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ8$-I@tie:էc+{fM5%:[c+&FjJFa"Ԕ1t1Q:[BMyrā1l\<⒃K~Sg_Vq6\Ԕ[V[SY RQ: : ִ ξ-(9u4OS{*p7gO3IE8SfO@ !;dP=d?Oq<[e(J08*J-œݝF1RP6RPyn;)޾%ie kIA~[҃qٴ2ξ-(-tyn;7I@tie5}@p0H Zt/OWZ̛.jJuoeB3% g_U3OVMԔ5:9}BԔ1t1Q:[,6ppߊJ -O(c]}Z}2׶dsRPio~[RPio~Mg_P@@%L|sJ0}L|sjJ0}k@҉`,g_P(cDʜ)RQoeNǙ,0ii,v%FYGlҬL (`J{*p7gQcDX[4;dP=gOaDqCT[S9:6c'Ԥ:meϯzqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO)ABԔ FS}}Z}2׶dsRS{*1(k:ű}2mfi ۡ2-Ԥߝ}A[Pƻ:eulɲ椠ߔ2'K~Sk:@H!(jc}RRQCc}SRQCZg_Kc: IDe'*jJ-œݝ> ξ%TNnϯIE8Sf1}}JJsv\RPyn;)޾ @0,T[ͧ1ξ%ienOJ-fk:޾%qѧu Bt/OWZ̛.jJuoeB3% g_U3OVMԔ5:9}BBԔ1t1Q:[B'$<R\w6%1ξ>]k2l(4?Lߔ2ξ J!_Ta_TԔaցYť6XξRQ`Ɖ RQoeNfu)( sv}}JJ-œݝF1RP6jqM5'ť nƏ-f P$,T[ͧ1ξ%ienOJ-fk:޾%qѧu Rt/OWZ̛.jJuoeB3% g_Uv\ɷQ?Z7n74_Q[K?1ā@@D3^pߞpK4(HlJK~Sg_Vq6\Ԕ[V[SYu :RQCZg_Kc: IDe'*Ԕ[S9:|}JJ-œݟ_QGl+A4qZ{*p7gQcD]k2l)ս5}Vc+&FjJFaԔ1t1Q:(rK~u 8g ݞc%~)(4?Lvui^ٓeIA)enO!IA)e5}AjJ!_QJ0}L|s%l>VuiDq͖3z4OQJ-œݝ> ξ%TNnϯIE8Sf1}}JJsv\RPyn;)޾%ie kIA~[҃qٴ2ξ-(-tyn;7I@tie5}@p0H(RP7~Ni^ٓeINF`ġX>Y6B3RPV4 ۡ2-n4⒃K~u @ " ngI@ߊJ -O(c]}Z}2׶dsRPio~[RPio~Mg_P@$ZF>9j6rSꚒ6rZ+:X8j4OPz{*p7gO3IE8SRQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P  RP7~Ni^ٓeINF`ġX>Y6B3RPV4 RPFPT[BMyrā1l\<⒃K~Sg_Vq6\Ԕ[V[SY RQ: : ִ ξ-(9u4OSԔ[S9:|}JJ-œݟ_T2|Q >Q"4%}ێߜ (@U>)u RQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P RP7~Ni^ٓeINF`ġX>Y6B3RPV4  RPF @@"*K~u&4@y.[IA)e kOWZ̛.jJ -O+r}}A J -O)u9IF9uMIF9h|ZQ,se5% h_P{*p7gO3IE8SfO@ !;dP=d?Oq<[e(J08*J-œݝF1RP6jqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO)@p%qѧ__Vq6\Ԕʄf Jξu1od#5% enN_PH% n n9ioξ %uRQ: : ִ ξ-(9uRQ`Ɖ RQoeNfu)( sv}}PcD48ǁe(J2Y,qsl ѭ[e(J08*J-œݝF1RP6=IA즚҆7cGz[ͧ1ξ%ienOJ-fk:޾%qѧuqbԔ FS}}Z}2׶dsRS{*1(k:7OVMԔ5:9}BBԔ1t1Q:(4DD)(4_Pd"?a%1ξ>]k2l(4?Lߔ2ξJ!_Ta_QJ0}k@҉`,g_P(cDMIE8SԤʜ))( svul4OICt[˟_QJ-e4`_1<C0 *qٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ8$RP7~Ni^ٓeINF`ġX>Y6B3RPV4 (cvcq̣K~uB04RPioξ Cx J9p?$?T[Pƻ:eulɲ椠ߔ2'K~Sk:@H)(jc}RRQCc}F(g!J%l}@2"ʜ)RQoeN[S9:6c'Ԥ:meϯ%㲚k0OJݍ[ @0aHX(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO)A@%qѧ__Vq6\Ԕʄf Jξtc+'qs&FjJFjJݺs(ߝ}U"I[K?1ā@@D3^pߞp8J -O(c]}Z}2׶dsRPio~[RPio~Mg_P@(ZF>9j6rS5IF9h|ZQ,se5IDe'Ԥʜ)RQoeN;dViZi[1ofnvԔ[S9:6c'Ԥ:meϯ%㲚k0OJݍ[RPyn;6Pƻ:[ͧ镹>-(<O)҂'Gz FSY RP7~Ni^ٓeINF`ġI}2mod#5% enN_P% n n9ioξ ߝ}JJ -O(c]}Z}2׶dsRPio~[RPio~Mg_RF>9j6rS5IF9h|ZQ,se2j{*p7gO3IE8SRQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_R}[PCYn-8ě{!(k+pus RPFRPioξqsl ѭ-ߔ25էc+{fM5%镹>%uE(jc}F(g!1ξ(g!J%l}@2oRQoeNfu)( sv}}JJ-œݝF1RP6jqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO)Ԕ FS}}Z}2׶dsRS{*1(k:ű6ؓod#5% enN_P8% n n9ioξ%^\pktpi ߔ25էc+{fM5%镹>%uRQ:RQCc}SRQCZg_Kc: IDe')IE8SԤʜ))( svul4OICt[˟_QJ-e4`_1<Ԥvm?Lvu)(<O+r}|ZPyn;6SYťN-f)(?L RP7~Ni^ٓeINF`ġK\tkbMԔ5:9}BԔ1t1Q:[,6@G2 J -O(c]}Z}2׶dsRPio~[ RPio~Mg_P -ID#S5IF9uMIF9h|ZQ,se5% h_PԔ[S9:|}JJ-œݟ_R{*p7gQcD9j6rS5IF9h|ZQ,se5% h_PRQoeNfu)( sv}}E+4ҭlEiʷJ;e.m5RQoeN0ٌh_R鶷>T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P )(?LBeulɲ椧_VT#0bPu[lͰ7F$ICY[ӟ, Z7n74_Pp`h$ J -#.m5[Pƻ:eulɲ椠ߔ2'ߔ2ξH%L|s%l>>9j6rZ+:X8=IDe'(%TNnΟg_R{*p7gԤʜ)a>%9mn;.}}F(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ8  RP7~Ni^ٓeINF`ġXc`nlIQ?XH% n n9ioξpѥ[?O6ߊJ -O(c]}Z}2׶dsRPio~[ RPio~Mg_P@jJ!_QJ0}L|sjJ0}k@҉`,g_QJ#,>AJ-œݝ> ξ%TNnϯIE8Sf1}}JJsv\RPyn;)޾%ie kIA~[҃qٴ2ξ-(-tyn;7I@tie5}@p0@(Zt/OWZ̛.jJuoeB3% g_U\tkbMԔ5:9}BԔ1t1Q:A,DPph4H*K~uI.C8584ѐRPio~C1ֽ&˚K~Sܟ_PJK~Sk:E(jc}F(g!1ξ(g!J%l}@2%TNnΟg_R{*p7gԤʜ)a>%9mn;.}}F(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ8 n:42 1ֽ&˚}[PCYn6ؓod#5% enN_PH% n n9ioξ$084$IA:k\pktpi ߔ25էc+{fM5%镹>%uԔB51ξTa_TԔaցYť6XξRQ`Ɖ -IE8SԤʜ))( svul4OICt[˟_QJ-e4`_1<Ԥvm?Lvu)(<O+r}|ZPyn;6SYťN-f)(?LRP7~Ni^ٓeINF`ġI6ؓ칓od#5% enN_P% n n9ioξ`$ߊJ -%˟6ߞp8J -O(c]}Z}2׶dsRPio~[ RPio~Mg_P@@%L|s%l>>9j6rZ+:X8j4OIE8SԤʜ)vȬҴJc+**8IE8Sf1}}JJsv\RPyn;)޾%ie kIA~[҃qٴ2ξ-(-tyn;7I@tie5}A `jJO)о>]k2l)ս5}V>X[mod#5% enN_P% n n9ioξ T[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_R}[PCYVoeK5ICY[ӟ ۡ2-$   %q#sl8l(4?Lvu[䉲椠ߔ2'RK~Sk:%L|sJ0}L|sjJ0}k@҉`,g_P% h_P80@@D2C(D8HDCʜ)RQoeNǙ,0iQ"4%}2 p`ePp-IE8SԤʜ)A3' X`1,EiFK#eup7[ly;dP=gOaDqCT[S9:6c'Ԥ:meϯzqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO) FS}}Vy*eINF`ġsɷՌ2MÂ5:9}@jJݺs(ߝ}B@  RPioξ pg 96˞3^jK~Sg_UH.jJ -O+r}|%(4?LRQ: : ִ ξ-(9u2Pp H`rԔ[S9:|}JJ-œݟ_T2|Q >_;dP=d?OWWu<6Ǚ(,EiVtG0%IE8Sf1}}JJsv\(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ0 ,!I@tie:n;g6\Ԕʄf Jξ<}X*Y8<8%ICY[ӟ ۡ2-$   %q#sl8l(4?Lvu[䉲椠ߔ2'RK~Sk:%L|sJ0}L|sjJ0}k@҉`,g_QJ#,> p`ePp-IE8SԤʜ)A3' X`1,EiFK#eup7[ly;dP=gOaDqCT[S9:6c'Ԥ:meϯzqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO) FS}}Vy*eINF`ġsɷՌ2MÀJFX@% n n9ioξ p`ePp)(4_P83qes`t5IA)e kv$M5%镹>[SYp@)(jc}NRQCc}SRQCZg_Kc:RQ`Ɖ C(D8BC$D09jJ-œݝ> ξ%TNnϯ y>(qe(J2Yc+ݞc̔xQ"4:|S#ʜ)a>%9mn;.}}CԔ[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P@n:42 PD.jJuoeB3% g_U[Ma,lRPV4(cvcq̣K~u C(D8BC$D09IA:@@D3\.x#yJ -O(c]}Vy"l(4?Lߔ2ξID#Sr6rSꚒ6rZ+:X8j4OH "B!"$"!RQoeNfu)( sv}}PcD4e| (@Q>]\ diY@QP%TNnΣ Ɖ)(yΛkqsvSMf iCqٽ}JJ-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:0%qѧ__UJ$sRS{*1(k:mc fglJQ?-ICCe[H "B!"$"!J -$ !G"sq+RPio~CeIA)enOu J!_Sa_TԔaցYť6XξTFX1}}B@  Z{*p7gO3IE8SfO@ !c+YGlҌGng%vȠ{M*Ο:( svul4OICt[˟_P%㲚k0OJݍ[RPyn;6Pƻ:[ͧ镹>-(<O)҂'Gz FSY)(?LBlT5&˚}[PCYVoeK4;g)(k+pusaԔ1t1Q:!"!B!@@"ߝ}B@ "r.m1d }2vȠ{M(d~qvxm2QYGlҬL (`J{*p7gQcD-(<O)҂'Gz FSY)(?LBlT5&˚}[PCYVoeK4;g(k+pusaԔ1t1Q:!"!B!@@"ߝ}B@ "r.m1d }2vȠ{M(d~qvxm2QYGlҬL (`J{*p7gQcD p`ePp-IE8SԤʜ)A3' X`1,EiFK#eup7[ly;dP=gOaDqCT[S9:6c'Ԥ:meϯzqM5'ť nƏ-f)(<O(c]}JJ-fܟ_[ͧuiAmqٽ}JJO) FS}}Vy*eINF`ġsɷՌ2MÃD JFX@% n n9ioξ p`ePp)(4_P83qes`t5IA)e kv$M5%镹>[SYp@)(jc}NRQCc}SRQCZg_Kc:RQ`Ɖ C(D8BC$D09jJ-œݝ> ξ%TNnϯ y>(qe(J2Yc+ݞc̔xQ"4:|S#ʜ)a>%9mn;.}}CԔ[i>-(cv4yn;7IA~CRPyn;6Vvm?LJ h[RP7~Mg_P@n:42 PD.jJuoeB3% g_U[Ma,l RPV4(cvcq̣K~u C(D8BC$D09IA:@@D3\.x#yJ -O(c]}Vy"l(4?Lߔ2ξID#Sr6rSꚒ6rZ+:X8j4OH "B!"$"!RQoeNfu)( sv}}PcD4e| (@Q>]\ diY@QP%TNnΣ Ɖ)(yΛkqsvSMf iCqٽ}JJ-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:0%qѧ__UJ$sRS{*1(k:mc fgl&5:9}@jJݺs(ߝ}B@  RPioξ pg 96˞3^jK~Sg_UH.jJ -O+r}|%(4?LRQ: : ִ ξ-(9u2Pp H`rԔ[S9:|}JJ-œݟ_T2|Q >_;dP=d?OWWu<6Ǚ(,EiVtG0%IE8Sf1}}JJsv\(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ0 ,!I@tie:n;g6\Ԕʄf Jξ<}X*Y8)u RQoeN0ٌh_R鶷>J-e4`_1<Ԥvm?Lvu)(<O+r}|ZPyn;6SYťN-f)(?L  RP7~N[kM5%:&V0ʖi6vl8i RPFPp H`rK~u 8gȹ\G6JT[Pƻ:lDsRPio~[)A)e5|F>9%l>>95%l>VuiDq͖3% h_P80@@D2C(D8HDCʜ)RQoeNǙ,0iQ"4%}2_;dP=d?OWWu<6Ǚ(,EiVtG0%IE8Sf1}}JJsv\(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ0 ,!I@tie:n;g6\Ԕʄf Jξ<}X*Y8-(<O)҂'Gz FSY)(?LBlT5&˚}[PCYVoeK4;g6x i RPFPp H`rK~u 8gȹ\G6JT[Pƻ:lDsRPio~[)A)e5|F>9%l>>95%l>VuiDq͖3% h_P80@@D2C(D8HDCʜ)RQoeNǙ,0iQ"4%}21d }2vȠ{M(d~qvxm2QYGlҬL (`J{*p7gQcD)u RQoeN0ٌh_R鶷>J-e4`_1<Ԥvm?Lvu)(<O+r}|ZPyn;6SYťN-f)(?L  RP7~N[kM5%:&V0ʖi6vl84@i RPFPp H`rK~u 8gȹ\G6JT[Pƻ:lDsRPio~[)A)e5|F>9%l>>95%l>VuiDq͖3% h_P80@@D2C(D8HDCʜ)RQoeNǙ,0iQ"4%}2_;dP=d?OWWu<6Ǚ(,EiVtG0%IE8Sf1}}JJsv\(<Y}|ZPhvo_Rqٴ25Ԥvm?LiA~Mg_:<Ԥn:42ξ0 ,!I@tie:n;g6\Ԕʄf Jξ<}X*Y81d }2vȠ{M(d~qvxm2QYGlҬL (`J{*p7gQcD]\ diY@QP%TNnΣ Ɖ)(yΛkqsvSMf iCqٽ}JJ-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:0%qѧ__UJ$sRS{*1(k:mc fgl RPV4(cvcq̣K~u C(D8BC$D09IA:@@D3\.x#yJ -O(c]}Vy"l(4?Lߔ2ξID#Sr6rSꚒ6rZ+:X8j4OH "B!"$"!RQoeNfu)( sv}}PcD4e| (@Q>]\ diY@QP%TNnΣ Ɖ)(yΛkqsvSMf iCqٽ}JJ-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:0%qѧ__UJ$sRS{*1(k:mc fgl RPV4(cvcq̣K~u C(D8BC$D09IA:@@D3\.x#yJ -O(c]}Vy"l(4?Lߔ2ξID#Sr6rSꚒ6rZ+:X8j4OH "B!"$"!RQoeNfu)( sv}}PcD4e| (@Q>]\ diY@QP%TNnΣ Ɖ)(yΛkqsvSMf iCqٽ}JJ-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:0%qѧ__UJ$sRS{*1(k:mc fgl  RPV4(cvcq̣K~u C(D8BC$D09IA:@@D3\.x#yJ -O(c]}Vy"l(4?Lߔ2ξID#Sr6rSꚒ6rZ+:X8j4OH "B!"$"!RQoeNfu)( sv}}PcD4e| (@Q>]\ diY@QP%TNnΣ Ɖ)(yΛkqsvSMf iCqٽ}JJ-fg_Rqٴ2'ťie5|ZP[Dvo_Rk:0%qѧ__UJ$sRRP$$P$,XXEG@#q<9ɔ>]k2N6 yl`S=qP~uB3u5|}K6JiipV4y':k:}2f !\+]3{Y[ӟ,9YȷS0a \as1dӪ;i0F@dpn ΚξC0eK\tkc+rir`dz*_ONF|Pc+`8Xxok+pusa5|`1fQ9ɃvO8}}? :CξEJaὬi G  [c-lD5!\+PMg_!2.m58Xxok+pusy':k:c`nlIk$BW)yF& {1<4gk: ,qsl ѭ{Y[ӟ,9YȷXc`nlIv\W 3(Ӝf;'T>PMg_!2.m58Xxok+pusa5|t,qsl ѭ;˙ \as1dӪ;3VqF@dpn ΚξE3OVMY"¹L490cَT#>(wSYf >Y,<7:9|a"a5|u1칐fQ9ɃvO8}}? :CξC0eiaὬi #pNtu-~qe̅pS09LcyCߔ5u5|u칐fQ9ɃvO8}}[\PnlD;.d+rir`dz*_F;[nqe̅pS09LcyCߔ5u5|tc+'qs!\+(wSYȷ[䉷,<7:9|aW 3(Ӝf;'T>F|Pn-od#28Xxok+pusEfQ9ɃvO8}}[PMg_"[n;g&FdpV4HW 3(Ӝf;'T>F|Pn-od#28Xxok+pusW 3(Ӝf;'T>F|Pn-od#28Xxok+pus¹L490cَ{*;[c-lD̎F@H$pS09LcyCʄgk:q<6B3#Q?,,pS09LcyCʄgk:n;g'qs&FdpV4fQ9ɃvO8}}[PMg_"cmlD̎F@d+rir`dz*_VT#>(wSYȷXq<6B3#Q?,$Y \as1dսϊu-6v$MaὬi fQ9ɃvO8}}[PMg_"cmlD̎F@8¹L490cَ{*;[mH{!{Y[ӟBW)yF& {1F|PnlD;.d̎F@¹L490cَ{*;[q<6 d,<7:9|d+rir`dz*_VT#>(wSYȷiɷ,<7:9|aW 3(Ӝf;'T>F|Pn-1od#28Xxok+pusEfQ9ɃvO8}}[PMg_"[c+&FdpV4ŐfQ9ɃvO8}}[PMg_"[c+&FdpV4fQ9ɃvO8}}[PMg_"[c+&FdpV4EfQ9ɃvO8}}[PMg_"[c+&FdpV4fQ9ɃvO8}}[PMg_"cted;.d̎F@¹L490cَ{*;[nq{!{Y[ӟ,pS09LcyCʄgk:c+&FdpV4!\+(wSYȷX>Y6B3#Q?,,pS09LcyCʄgk:c+&FdpV4EfQ9ɃvO8}}[PMg_"cted̎F@P¹L490cَ{*;[nq{!{Y[ӟ !\+F|Pned5&FdpV4fQ9ɃvO8}}[PMg_"[,qsl ѭ6B3#Q?, Y \as1dսϊu-ű6ؓod#28Xxok+pusW 3(Ӝf;'T>F|Pn-8ě{!{Y[ӟBW)yF& {1(wSYȫsɷՌ2L28Xxok+pusd+rir`dz*_VT#>(wSYȫsɷՌ2MÂaὬifQ9ɃvO8}}[PMg_"&V0ʖi6v #Q? BW)yF& {1F|PVoeK4;g{Y[ӟ !\+F|PVoeK4;g6x#Q? BW)yF& {1(wSYȫsɷՌ2MĀ0hA,<7:9|X@¹L490cَ{*;UR&@4$F@, Y \as1dսϊu*mc fgl #Q? BW)yF& {1]k2`dzTgu$H,p^7 J`Ǚu5|}K6JiipV4y':k:}2f !__ONF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|>]3{Y[ӟ,9YȷS0a ~uB3A\ DJNqO 1ֽ&Pcc<̟;i0F@dpn ΚξC0eK\tkc+iυpH, *v$Ni:}2e<'OWZ̙A-L2|Pc+`8Xxok+pusa5|`1T#>Q pph4Dq<9ɔ>]k2e<10cCξEJaὬi G  [c-lD5!__ONF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|q<3{Y[ӟ,9YȷXq<;˙ ~uB3A\ DJNqO 1ֽ&Pcc<̟;[䩘0F@88Xxo7Mg_"'ێv\WӪ (X884"UHtedxNq2[1dMg_!2.m58Xxok+pusy':k:c`nlIk$BPPWDlD擧c+&Steulɔ3'k: ,qsl ѭ{Y[ӟ,9YȷXc`nlIv\WӪ (X884"UHtedxNq2[1dMg_!2.m58Xxok+pusa5|t,qsl ѭ;˙ ~uB3A\ DJNqO 1ֽ&Pcc<̟;3VqF@dpn ΚξE3OVMY"4g‚ $ n;g'4>Y2c+{fLǖ& y>(wSYf >Y,<7:9|a"a5|u1칐T#>Q pph4Dq<9ɔ>]k2e<10cCξC0eiaὬi #pNtu-~qe̅}}? :A%['OVL^ٓ(1屉fOu-6v$NB-CY.Q pph4Dq<9ɔ>]k2e<10cCξEO칐K~PKpH, *v$Ni:}2e<'OWZ̙A-L2|Pn}2w2iopA%['OVL^ٓ(1屉fOu-~qe̅}}[\(+A`hVy"sI1):}2׶d ylb`Ǚu5|u8ĝe̅}}[\(+A`hVy"sI1):}2׶d ylb`Ǚu5|t,qsl ѭ;˙ 4 dPWDlD擧c+&Steulɔ3'k:q<6 dWս5A\ DJNqO 1ֽ&Pcc<̟;[mH{D+pA%['OVL^ٓ(1屉fOu-}H{D+pA%['OVL^ٓ(1屉fOu-ű}2m{(k%‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷX>Y6 dWս5A\ DJNqO 1ֽ&Pcc<̟;[>Y6 dWս5A\ DJNqO 1ֽ&Pcc<̟;[c%.m5& \(+A`hVy"sI1):}2׶d ylb`Ǚu5|u8ě{D+pA%['OVL^ٓ(1屉fOu-|Ͱ7F$5!__VPKpH, *v$Ni:}2e<'OWZ̙A-L2|Pn-od#28Xxok+pus{* (X884"UHtedxNq2[1dMg_"[n;g&FdpV4!__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE2v$MaὬi {* (X884"UHtedxNq2[1dMg_"[n;g&FdpV4Ő{* (X884"UHtedxNq2[1dMg_"[n;g&FdpV4D+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷ[䉷,<7:9|`I A%['OVL^ٓ(1屉fOu-űy"mfG  enN_ X(Y A%['OVL^ٓ(1屉fOu-6v$NMaὬi !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξEێ䉷,<7:9|aWսυpH, *v$Ni:}2e<'OWZ̙A-L2|Pny"mfG  enN_ XHoeB3A\ DJNqO 1ֽ&Pcc<̟;[mH{!{Y[ӟ !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξEێ䉷,<7:9|`qd+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷXq<6B3#Q?,,}}[PPWDlD擧c+&Steulɔ3'k:n;g&FdpV4D+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷXq<6B3#Q?, !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξEێ䉷,<7:9|`I A%['OVL^ٓ(1屉fOu-6v$MaὬi {* (X884"UHtedxNq2[1dMg_"'ێv\ɷ,<7:9|d+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷIy"mod#28Xxok+pusWսυpH, *v$Ni:}2e<'OWZ̙A-L2|Pn-1od#28Xxok+pus{* (X884"UHtedxNq2[1dMg_"[c+&FdpV4!__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE3OVMaὬi !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE3OVMaὬi  !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE3OVMaὬi !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE3OVMaὬi  !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξEv\ɷ,<7:9|d+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷX>Y6B3#Q?, Y A%['OVL^ٓ(1屉fOu-7OVMaὬi BF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|u1od#28Xxok+pusWսυpH, *v$Ni:}2e<'OWZ̙A-L2|Pn}2mfG  enN_ X Y A%['OVL^ٓ(1屉fOu-7OVMaὬi !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξEɷ,<7:9|`d+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷX>Y6B3#Q?,BF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|tc+'qs&FdpV4{* (X884"UHtedxNq2[1dMg_"'ɷk$MaὬi !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE2X[mfG  enN_ X@oeB3A\ DJNqO 1ֽ&Pcc<̟;[c%.m5&FdpV4Ő{* (X884"UHtedxNq2[1dMg_"[,qsl ѭ6B3#Q?,,}}[PPWDlD擧c+&Steulɔ3'k:,qsl ѭ;˙6B3#Q?,}}[PPWDlD擧c+&Steulɔ3'k:,qsl ѭ6B3#Q?, Y A%['OVL^ٓ(1屉fOu-6X[mfG  enN_ XHoeB3A\ DJNqO 1ֽ&Pcc<̟;[lͰ7F$̎F@@oeB3A\ DJNqO 1ֽ&Pcc<̟;[lͰ7F$̎F@HoeB3A\ DJNqO 1ֽ&Pcc<̟;[c`nlIv\ɷ,<7:9|d+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȷI6ؓo`H{!{Y[ӟBF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|<}X*YpV4aWսυpH, *v$Ni:}2e<'OWZ̙A-L2|PVoeK4BdpV4aWսυpH, *v$Ni:}2e<'OWZ̙A-L2|PVoeK4;g{Y[ӟ !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE[Ma,lG  enN_ ,}}[PPWDlD擧c+&Steulɔ3'k:ny6TIpxpF@, Y A%['OVL^ٓ(1屉fOu*mc fglA,<7:9|X@oeB3A\ DJNqO 1ֽ&Pcc<̟;UR&8Xxok+pusd+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȫsɷՌ2MÃDaὬi{* (X884"UHtedxNq2[1dMg_"&V0ʖi6v  #Q? BF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|<}X*Y8<84@G  enN_ ,}}[PPWDlD擧c+&Steulɔ3'k:ny6TIpxph F@, Y A%['OVL^ٓ(1屉fOu*mc fglI,<7:9|X@oeB3A\ DJNqO 1ֽ&Pcc<̟;UR&M{Y[ӟ !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE[Ma,l$pI,<7:9|X@oeB3A\ DJNqO 1ֽ&Pcc<̟;UR&MaὬi{* (X884"UHtedxNq2[1dMg_"&V0ʖi6vl8G  enN_ ,}}[PPWDlD擧c+&Steulɔ3'k:ny6TIpxg8Xxok+pusd+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȫsɷՌ2Mě< #Q? BF|(+A`hVy"sI1):}2׶d ylb`Ǚu5|<}X*Y8Y2c+{fLǖ& y>(wSYȫsɷՌ2Mě< {Y[ӟ !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE[Ma,l$ph F@, Y A%['OVL^ٓ(1屉fOu*mc fgl&D$pV4aWսυpH, *v$Ni:}2e<'OWZ̙A-L2|PVoeK4;g`Ђ8Xxok+pusd+ʄg‚ $ n;g'4>Y2c+{fLǖ& y>(wSYȫsɷՌ2MĀ0hI,<7:9|X@oeB3A\ DJNqO 1ֽ&Pcc<̟;UR&@4G  enN_ ,}}[PPWDlD擧c+&Steulɔ3'k:ny6TIpx {Y[ӟ !__VT#>Q pph4Dq<9ɔ>]k2e<10cCξE[Ma,l$A$pV4aWսυpH, *v$Ni:}2e<'OWZ̙A-M|1>A%['OVL^ٓ(1屉HƦ {1<4gk:lӈaὬi #pNtu4etBW)yF& {1<4gk:}2f #Q?, Y,<7sn;g`¹L490cَT#>(wSY10a,<7:9|a"a5|`ʖ8HW 3(Ӝf;'T>PMg_#OWLpV4őy':k: c+!\+(wSYȷS0a,<7:9|`qdpn ΚξEO칐fQ9ɃvO8}}? :CξC0eK\tkcpV4 #pNtu-ű6ؓo`HpS09LcyCiϊu*X[#Q?,$Y,<7sn6ؓ칐fQ9ɃvO8}}? :CξC0eK\tkcpV4őy':k:>X[w2¹L490cَT#>(wSYf >Y,<7:9|aa5|qlfq{D+rir`dz*_ONF|PZ}28Xxok+pusEy':k:c+'qs!\+Y;˙ \as1dѥ(k%k:n;g'qs!\+-CY.(wSYȷX>Y;˙ \as1dѥ(k%k:?OVNBW)yF& {1F|Pn-od#28Xxok+pusfQ9ɃvO8}}[PMg_"[n;g&FdpV4!\+(wSYȷ[䉷,<7:9|`I \as1dսϊu-űy"mfG  enN_ X(Y \as1dսϊu-6v$NMaὬi !\+F|Pny"mfG  enN_ XH¹L490cَ{*;[mH{!{Y[ӟ !\+(wSYȷXq<6B3#Q?,,pS09LcyCʄgk:n;g&FdpV4D+rir`dz*_VT#>(wSYȷXq<6B3#Q?, !\+(wSYȷIy"mod#28Xxok+pusW 3(Ӝf;'T>F|Pn-1od#28Xxok+pusfQ9ɃvO8}}[PMg_"[c+&FdpV4!\+(wSYȷX>Y6B3#Q?, Y \as1dսϊu-7OVMaὬi BW)yF& {1F|Pn}2mfG  enN_ X Y \as1dսϊu-7OVMaὬi !\+(wSYȷX>Y6B3#Q?,BW)yF& {1(wSYȷI6ؓo`H{!{Y[ӟBW)yF& {1F|PVoeK4BdpV4aW 3(Ӝf;'T>F|PVoeK4;g{Y[ӟ !\+(wSYȫsɷՌ2MÃDaὬifQ9ɃvO8}}[PMg_"&V0ʖi6v  #Q? BW)yF& {1(wSYȫsɷՌ2Mě< #Q? BW)yF& {1(wSYȫsɷՌ2Mě< {Y[ӟ !\+F|PVoeK4;g`Ђ8Xxok+pusd+rir`dz*_VT#>(wSYȫsɷՌ2MĀ0hI,<7:9|X@¹L490cَ{*;UR&@4G  enN_ ,pS09LcyCʄgk:ny6TIpx {Y[ӟ !\+9^_.1p3M? $< n;g'4>Y2'h| s@`#)(Yh=n;g+OVQk>]7@Ee b 7%M?(x3: >9^_.1p3M? $< n;g'4>Y2'h|$,4BAAIIGl+A4q]F3̨ 曀nK2P:=Gfu-?|s 4C޾\bf~8Hxv$Ni:}2eYGMҴeuc"<{MuBOJG=? ξEu(rˌ\< Og ['OVLZg_BI倍9}@P }IIGl+A4q]0F̹1?&̔_Y28vȬҴJc+(i(NJ  p@,ZJ;dS*x- 8O` 8+H X( ~,?@ v$Ni:}2e<$0(Yh=n;g+OVQkuK'!5$vȬҴJc+(U2 $EfUH>YGMҭynk Vun;gI%+4ҭlEi:mvnM>eup4cLI%+4ҭlEi:mvnM>eu{ZI(Yh=n;g+OVQku6 =J;dViZi[1t(̝iVy*kIGl+A4qYGMҴeul20cn$ViVy"ee6J1en,ĒQ"J{M*v$VqiZ}2*9I(Yh=n;g+OVQk>]FXy\q$vȬҴJc+(Vq)GC5$vȬҴJc+(VqIm#f\ 0Hp@ $ @( ?(/n;g'4>Y21l.e#& J -8@JPX?g"}|H "if8a?F0%(Kr%vnOzlDnn2\x0$$Q!q<9ɔH(hJIl\F6˛`o-$  tYg>9n2tKM3 r.X@?$уOWWF4gA2vxmtJGu `\i{i0hOA?74a< n;w :1`!|H~[)B@ts@:xif8n:1B'$tϒ%۾X\cɦH4IH@/ ?bA@X'`8Gy"sI1)%Ĺ<i 8@H R ?/////T $Aa?H$P$$ @ 0(_p8,X/8 eskHtedxM#ێ'OVL^ٓ<0ێ'OVL^ْqccHtedxNq0cَvy"sI1)-46pn;g'4>Y2ێ'OVLn;g'4>Y21l.e;q<9ɔ\\t@U2 k꒸'wb֝ab&./usr/es/sbin/cluster/svcpprc/utils/cl_retry_ssh#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/cl_retry_ssh.sh 1.5 # # Licensed Materials - Property of IBM # # COPYRIGHT International Business Machines Corp. 2009,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/cl_retry_ssh.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ################################################################################ # # cl_retry_ssh will encapsulate SSH calls, performing on retriable errors # Upon completion, the following values will be set: # # Input: # $* - command to pass to ssh for execution # # Output: # stdout = stdout from successful ssh call # return = 0 for successfull call # non-zero on failure # # Notes: # If ssh does not succeed, it returns 255. # Otherwise, it returns the rc of the command run on the remote system. # Therefore, we only retry on 255. # # The number of retries and the delay between retries can be controlled # by variables in /etc/environment: # HASSH_MAX_RETRIES # HASSH_RETRY_DELAY # # Questions? Comments? Expressions of Astonishment? mailto:hafeedbk@us.ibm.com # ##################################################################################### PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" export PATH [[ $VERBOSE_LOGGING == high ]] && set -x [[ $VERBOSE_LOGGING == high ]] && version='@(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/cl_retry_ssh.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' # : The retries and delay values can be set for a node : in /etc/environment. If any such values have been set, : use them.But if HASSH_MAX_RETRIES and HASSH_RETRY_DELAY : are already set use them and do not check for the values : in /etc/environment. # if [[ -z $HASSH_MAX_RETRIES ]];then RETRIES_VAR=$(grep "^HASSH_MAX_RETRIES" /etc/environment) if [[ -n $RETRIES_VAR ]] then eval $RETRIES_VAR fi fi typeset max_retries=${HASSH_MAX_RETRIES:-3} # '3' is the default number of retries if [[ -z $HASSH_RETRY_DELAY ]];then DELAY_VAR=$(grep "^HASSH_RETRY_DELAY" /etc/environment) if [[ -n $DELAY_VAR ]] then eval $DELAY_VAR fi fi typeset delay=${HASSH_RETRY_DELAY:-5} # '5' is the default delay between retries typeset SSH_RC=0 typeset SSH_STDOUT=${HASSH_LOGDIR}/$$.ssh.out typeset SSH_STDERR=${HASSH_LOGDIR}/$$.ssh.err integer f1=0 f2=0 integer total_sleep=0 float total_wait=0 float wait_val=0 # : Ensure sane values for environment-based variables : We will always try the ssh call at least once. # if (( $max_retries < 1 )); then max_retries=1 fi if (( $delay < 1 )); then delay=1 fi # : Check to see if this SVC is defined as having a secondary : or alternative address to try, should the first fail. First : field in the command is 'user_name@ssh_ip' # SVC_IP_ADDR=$(print $@ | cut -f1 -d' ' | cut -f2 -d'@') if [[ -n $SVC_IP_ADDR ]] then ALT_SVC_IP_ADDR=$(clodmget -q "cluster_ip = $SVC_IP_ADDR" -f cluster_2nd_ip -n HACMPsvc) fi # : Loop through all retries # for (( retry=0 ; retry < max_retries ; retry++ )) ; do # : Attempt the ssh command. Time the response. # LC_ALL=C /usr/bin/time -p /usr/bin/ssh -n -o AddressFamily=any -o BatchMode=yes $* >$SSH_STDOUT 2>$SSH_STDERR SSH_RC=$? grep -iw '^real' $SSH_STDERR | read keyword wait_val (( total_wait = total_wait + wait_val )) # accumulate ssh wait time for reporting # : If we succeeded, quit now # if (( $SSH_RC != 255 )) then break fi if [[ -n $ALT_SVC_IP_ADDR ]] then # : Yes, this SVC has an secondary IP address. After the briefest : of pauses to allow it to stabilize its state and collect its : muddled wits, try the secondary IP address. # sleep 1 (( total_sleep = total_sleep + 1 )) # accumulate sleep time for reporting # : Re-issue the given command, but to the secondary IP address. Time the response. # LC_ALL=C /usr/bin/time -p /usr/bin/ssh -n -o AddressFamily=any -o BatchMode=yes $(print $@ | sed "s/$SVC_IP_ADDR/$ALT_SVC_IP_ADDR/") >$SSH_STDOUT 2>$SSH_STDERR SSH_RC=$? grep -iw '^real' $SSH_STDERR | read keyword wait_val (( total_wait = total_wait + wait_val )) # accumulate ssh wait time for reporting # : If we succeeded, quit now # if (( $SSH_RC != 255 )) then break fi fi # : Retry $retry of $max_retries # if (( $retry < $max_retries - 1 )) then # : Delay computations to avoid the thundering herd. The alert reader will : note the use of a modified Fibonacci series to produce a boundedly varying : delay each loop iteration. # (( f1 = f1 / 2 + f2 )) (( f2 = 1 + $RANDOM % $delay )) sleep $(( $f1 + $f2 )) (( total_sleep = total_sleep + f1 + f2 )) # accumualte sleep time for reporting else # : $max_retries retries exhausted. Game over, man. Game over. # fi done # : Display stdout and stderr from the last ssh, trimming off the appened time information # if [[ -s $SSH_STDOUT ]] then cat $SSH_STDOUT rm -f $SSH_STDOUT fi if [[ -s $SSH_STDERR ]] then grep -vi '^real' $SSH_STDERR | grep -vi '^user' | grep -vi '^sys' | grep -v '^$' >&2 if (( $SSH_RC == 0 )) # keep it around if there was an error then rm -f $SSH_STDERR fi fi # : The ssh operation completed after $retry retries, total sleep time of $total_sleep seconds, : total ssh wait time of $total_wait seconds, with return code $SSH_RC # return $SSH_RC nt. k^(w&b֝ab&&./usr/es/sbin/cluster/svcpprc/utils/cl_svc_info#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2017,2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/cl_svc_info.sh 1.20.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/cl_svc_info.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # COMPONENT_NAME: HACMP.SVCPPRC # # Function: Return the SVC IP address associated with a given consistency group [[ $VERBOSE_LOGGING == high ]] && set -x [[ $VERBOSE_LOGGING == high ]] && version='@(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/cl_svc_info.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' PROGNAME=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/events/utils:/usr/es/sbin/cluster/utilities UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" SVC_PPRC_CMDS_DIR="/usr/es/sbin/cluster/svcpprc/cmds" SVC_PPRC_CLI_DIR="/usr/svcpprc/cli" export PATH=$PATH:$UTILDIR:$SVC_PPRC_CMDS_DIR:$SVC_PPRC_CLI_DIR SEP="!" # : Include useful utilities # . $UTILDIR/svcpprc_lib ############################################################################### # # Name: ls_cluster # # Function: Run the appropriate lscluster command for the given IP address # and check if the IP address matches what the lscluster command # returns # # Input: IP address of SVC # User Name to access SVC using SSH # # Output: IP address written to sdtout, if it matches what is returned # by lscluster # return code of 0 indicates success # non-zero return code indicates some failure along the way # function ls_cluster { [[ $VERBOSE_LOGGING == high ]] && set -x integer rc=0 integer VRMF=0 # : Pick up passed IP address # IP_addr=$1 typeset user_name="" user_name=$2 # : Check the SVC to see if its SVC 5.1 or an earlier one # cluster_name=$(clodmget -q "cluster_ip = $IP_addr" -f svccluster_name -n HACMPsvc) # get the svc cluster id stored in ODM # the cluster ID has been introduced # to check against the cluster id of the # svc we are accessing. cluster_id=$(clodmget -q "cluster_ip = $IP_addr" -f svc_cluster_id -n HACMPsvc) # The following condition is checked keeping in mind # migration where ODM may not contain cluster_id # If cluster_id is not there proceed with # the previous code flow if [[ -n $cluster_id ]] then # validate if the cluster id stored in ODM # matches with the actual svc cluster id # got from SVC cluster $UTILDIR/cl_validate_svc_cluster $IP_addr $cluster_id $cluster_name rc=$? # A zero return value means svc cluster id matches # hence return the IP with which SSH was succesfull # for SVC. if [[ $rc == 0 ]] then print "$IP_addr" else print "" fi return $rc else if [[ -n $cluster_name ]] then # : Get detailed information about the SVC cluster that has been defined as being : at the given IP address # SVC_detailed_info=$(cl_retry_ssh $user_name@$IP_addr LC_ALL=C svcinfo lscluster -delim "$SEP" $cluster_name) rc=$? # errors get interpreted as old style fi if [[ -n $SVC_detailed_info ]] then # : If we got the detailed information above, extract the SVC code level # integer V R M F typeset -Z2 R # two digit release typeset -Z3 M # three digit modification typeset -Z3 F # three digit fix integer VRMF=0 print "$SVC_detailed_info" | grep -w '^code_level' | cut -f2 -d "$SEP" | cut -f1 -d' ' | IFS=. read V R M F VRMF=$V$R$M$F fi if (( $VRMF < 501000000 )) # for SVC 5.1, the command syntax changed then # : Old style, pre 5.1 : The IP address the cluster responds to can be extracted from the lscluster output # IP_addr_out=$(cl_retry_ssh $user_name@$IP_addr svcinfo lscluster -nohdr -delim "$SEP") rc=$? IP_addr_out=$(print "$IP_addr_out" | cut -f6 -d"$SEP") else # : New style, 5.1 and later : The IP addresses the cluster responds to must be extracted from the output of the : lsclusterip command. Note that with dual ethernet capability, there could be more : than one IP address returned by lsclusterip. # IP_addr_out=$(cl_retry_ssh $user_name@$IP_addr LC_ALL=C svcinfo lsclusterip -delim "$SEP" $cluster_name) rc=$? IP_addr_out=$(print "$IP_addr_out" | grep '^IP_address' | cut -f2 -d "$SEP") fi if (( $rc == 0 )) # ssh to the SVC worked and the command ran then # : Check here to see if the address coming back from the SVC is the one we : expected # host_info=$(LC_ALL=C host ${IP_addr}) rc=$? if (( $rc == 0 )) then IP_addr=$(print $host_info | cut -f3 -d' ' | sed 's/,$//') # numeric, to match SVC output fi if print $IP_addr | grep -q ':' then # : If we are dealing with IPv6 addresses, turn them into a cannonical : form for proper comparisons. This is required by the multiple ways : that an IPv6 address can be expressed # cannonical_IP_addr=$(isipv6addr $IP_addr |cut -f3 -d " ") for addr in $IP_addr_out ; do if print $addr | grep -q ':' then # : Cannonical IPv6 address comparison # cannonical_IP_addr_out=$(isipv6addr $addr |cut -f3 -d " ") # : If we find the given address in the addresses returned from : the SVC, display it # print $cannonical_IP_addr_out | grep -w $cannonical_IP_addr grc=$? if (( $grc == 0 )) then rc=0 break # addresses match fi else rc=$? # '$addr' is not IPv6 fi done [[ -n $grc ]] && (( $grc != 0 )) && dspmsg -s 3 svcpprc.cat 320 "WARNING: %s is not defined in SVC configuration.\n" $cannonical_IP_addr_out else # : For IPv4 addresses, if we find the given address in the addresses : returned from the SVC, display it # print "$IP_addr_out" | grep -w $IP_addr (( $? != 0 )) && dspmsg -s 3 svcpprc.cat 320 "WARNING: %s is not defined in SVC configuration.\n" $IP_addr_out fi fi fi return $rc } ############################################################################### # : Main # # : Check for valid invocation # if (( $# == 0 )) # no consistency group name given then exit 1 # not a valid request fi CONSIST_GRP=$1 # pick up consistency group name integer STATUS=0 # : Find out what we know about the given consistency group # CL_LS_SVC_PPRC_OUTPUT=$($SVC_PPRC_CMDS_DIR/cllssvcpprc -n $CONSIST_GRP -ch 2>/dev/null) if [[ -z $CL_LS_SVC_PPRC_OUTPUT ]] then exit 1 # never heard of it fi # : Find the configured master and auxiliary SVCs for the given consistency group # MASTER_SVC=$(print $CL_LS_SVC_PPRC_OUTPUT | cut -f2 -d":") AUXILIARY_SVC=$(print $CL_LS_SVC_PPRC_OUTPUT | cut -f3 -d":") # : Find the configured IP addresses for the above determined master and : auxiliary SVCs # if [[ -n $MASTER_SVC ]] then MASTER_IP=$(cllssvc -n $MASTER_SVC -hJ "$SEP" | cut -f4,8 -d"$SEP" 2>/dev/null) master_user_name=$(echo $MASTER_IP|cut -f2 -d "$SEP" 2>/dev/null) MASTER_IP=$(echo $MASTER_IP|cut -f1 -d "$SEP" 2>/dev/null) fi if [[ -n $AUXILIARY_SVC ]] then AUXILIARY_IP=$(cllssvc -n $AUXILIARY_SVC -hJ "$SEP" | cut -f4,8 -d"$SEP" 2>/dev/null) aux_user_name=$(echo $AUXILIARY_IP|cut -f2 -d "$SEP" 2>/dev/null) AUXILIARY_IP=$(echo $AUXILIARY_IP|cut -f1 -d "$SEP" 2>/dev/null) fi # : Check to see if we can talk to the master SVC # if [[ -n $MASTER_IP ]] && is_svc_reachable $MASTER_IP $master_user_name >/dev/null then # : The master SVC responds to SSH. Now go check its IP address # SVC_INFO_MAX_IP=$(ls_cluster $MASTER_IP $master_user_name) STATUS=$? if [[ -n $SVC_INFO_MAX_IP ]] then dspmsg -s 3 svcpprc.cat 10 "Active SVC IP Address=%s\n" $SVC_INFO_MAX_IP fi elif [[ -n $AUXILIARY_IP ]] && is_svc_reachable $AUXILIARY_IP $aux_user_name >/dev/null then # : The master SVC did not respond to SSH, but the auxilliary did. So, : go check its IP address # SVC_INFO_AUX_IP=$(ls_cluster $AUXILIARY_IP $aux_user_name) STATUS=$? if [[ -n $SVC_INFO_AUX_IP ]] then dspmsg -s 3 svcpprc.cat 10 "Active SVC IP Address=%s\n" $SVC_INFO_AUX_IP fi else # : Unable to determine active SVC IP address. This is most likely : because nobody answers to SSH, but could also be due to bad : configuration - no defined IP addresses. # STATUS=1 fi return $STATUS $(L k7)wfb֝ab&f./usr/es/sbin/cluster/svcpprc/utils/cl_validate_svc_cluster#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/cl_validate_svc_cluster.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM [[ $VERBOSE_LOGGING == high ]] && set -x PROGNAME=${0##*/} PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" . $UTILDIR/svcpprc_lib export PATH=$PATH SEP="!" ############################################################################### # : Main # # This utility checks if passed svc cluster id # matches with the actual svc cluster id, If # it matches then 0 is returned else 1 is returned. # # Input: Master SVC cluster IP # SVC cluster id stored in ODM # SVC cluster name stored in ODM # Output: 0 If cluster id matches # 1 If cluster Id doesn't match # ############################################################################## # : Check for valid invocation # if (( $# <= 2 )) # no svc cluster name,IP Address given then exit 1 # not a valid request fi rc=1 IP_addr=$1 odm_cluster_id=$2 cluster_name=$3 #Getting user name to ssh svc storage from HACMPsvc ODM. typeset user_name="" user_name=$(get_svc_user_name -i $IP_addr) # : Get detailed information about the SVC cluster that has been defined : with the name $cluster_name # SVC_detailed_info=$(cl_retry_ssh $user_name@$IP_addr LC_ALL=C svcinfo lscluster -delim "$SEP" $cluster_name) if [[ -n $SVC_detailed_info ]] then echo $SVC_detailed_info|cut -d ' ' -f1|cut -d '!' -f2|read svc_cluster_id if [[ $svc_cluster_id == $odm_cluster_id ]] then rc=0 fi fi exit $rc  l*wBXbKbʏb&./usr/es/sbin/cluster/svcpprc/utils/cl_verify_svcpprc_config   e #adinorst$_cfhlmpu-:ACMPRSVgkvy"'().2=DEGINOT\w%,/1HLU[]bx{|}!+034Fq&*5@678>?BWYz9;^JKXjQ)[@Q,j֛z=QEVn%Q cXլ]F/MKvӱkF/MԤoaTrHPsČ\ u7f45k?x-|To(T;YB5k?yB:BMӾG'{C%1^Q ,EPwJpB FV[f-- O7*C0 <չ^]g/tℷ=SQRJ/Ye ZMW$GNrw*Cu:zn5k?sӔ.(PϔPefQcVG DHV]MҷR|dQZBg-9*{E-QH(;QZK>Q)[rӒSwsIYyiU4\b}_xEӄ)%bdrAj׀YB)K>B9!JO3R{F["IZG'yB8SЄmTtJEA(:fXկݟ(9iU5k ^IVߌ¨IYyiU(9cV;R]%Hd!JwI+3wU襟!oaTwdԜ%8T)RP$tp=+'կ=$Bg-9*8Gw;SE/7ϑѼB%ua()NܒY!JO3R;$ϼ䪛yxf<$NIYljZrUF5k? ى$wSwsIYyiU1UR jH2D{ot>šnQKYtw|(_. 1_#Q0SFœ#>Q)[rӒc(xQZ;QZKQ0RIVߌ¨ϔi Vy䪛Єm9B2Dj%[;w*K}կC$ƭx%%f}%T3 *C$HvP=շIYtկFxM >z=![cXլ6yzn,F>,R,XJ#5k?I.v FF;*CE/7ޜ'9O-Z:D`4\b}{\JF߃7q!M1^Xo!(FHiC%ЄaXJ,j׀Cw;IՄD`nyi;*@´ϔi Vy5k-9*NeKuOG7"K}°XկADd7NʻF9drZp>v FJ1^]!i:hhB0%ݾЄmBP't'VFY) CNʬo/wo\5H'oi:hP75kCtd(9iU)/i:hƭg(@To(Ts(7 t}Q# QД|9V.7 |շ1kTV+(wz p@V9+XF+™I+{9'3եdb { D+AXXJ }䢒Z.ޭrYI+> l= OJ~)%4XJ,j }BrOQ)$oA:"5cV+Q˝Y>OU0}ϒr4$_F%kƱʷA`F%k3ϔk}Ct!ӹSXծvJ]8J~J\XJ4q2;ta*V5k7 ҽr7}q|"[z}rØ5k| A,R)й\#!GƮ%ƭaG+s taMS"[Q<Y+J ´լUi]ՊU|\ғ[a.)Gf1\#pTaNrV1j.Hr[Wt>&P>œaAj IYyiU3I'|ULsPD8# $QZ  DVghwtӾ'tP "d3BeZ-9*լ<;(T8G7"K=%i[B @*=Z섣HR%TB @*=E&xw ebƭϒzRHON9is~Qe ƭ&$xt_IS!ua()F5kCv FJn$|[ݘ|(_uwi aTwf cV]ܨB A3*@;լbF.fs RSR]vas!(q1_(@nBT]\B~as=5TF5kGNZt%>ޤC1 TmZ  RGշ0=QKt_UaTXխ3"K=%i[>ü]SNuEҔ%W7*UZBS>/K`=QR)UեAk$ToSӺQŮ?]:082b0=f $v9+J8!XJ:PcX5[a(M;hAI) FҲ(w?%YE]\@>IkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵk DH@1sNRg| 0R @ABbi0E@|"=%i["QI=7х $H′i0E@|"=%i["QIVJ D1B">`+ C$$THT\DP!ZLtPIZV` pBb"@gjJb'bALaA"B@(Rֿ7VSFT=MM~|i8#җF1OIWޭ-RլatcXPD8.( (RgcX;]U2C]e'|'gSQ H2 Q))$<\ h`!ZLtPIZVVJzG c #`KzJC8hk*şavRSh`!ZLtPIZVVJzIQGMB$P 8\P1r`&11RSb 4V0մ}ưBM%tМ)XA3 Rg/wJ8纮JEa%:-tzW$t_ZxGdDXưwC=%oМJrFU` FSR!Q{Jߡ9'.Rʬk 'ӵ1_HJ#*Y;ҥ JuńH 4V %R ҶNrP "d3 YYC"\rB}ZrR=>5 zj +PE <b ,PR ha%J=E&xj۟(9iU(YBHzIR Z۔*B (TCI*P"; t.mGB8E M7V[~3.N!A ~h'̪7]5L{MAM碜 sE5a6!1kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ5F%k5cNQq`z98˩&$^7[pw(y!Tny+JLG|W[~QcXֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵct-DH``IF/aIt^i"bbȉ0VO\)QCJOLR gʉbGńD±qrw @(\rE +bT+xㄺ `0~N€ hD#ܐa1XK=ZPƼpk BrPD =$HV.X JuƗ pN6X!A  W  HVO$ƀ^h.G"HR$ƀ^iHVJ2YzG>'BaJ @x &v$L1) Ci[L'9O(TH2,XJ<)'5t_U[Æ"H"LY1`bHJ9|LC=#}#x0=v|d~{>QH&;7iB>W=ь탿>Q9aD81@ 5m\ GJ\[aTX ACITHـDUI 2`n69NtU?w$>=Qnz.1y$ߪ迚"Ygt-DH h;EDd3sm20鄲ӵ1Xldbŋ1s> iLšQ3VO\)QL\-FO1Cu'4VO\)\%sAr= XcF{'YuF W"} nHeiz.l[XY>pD W4#ܐaLB B k~>Q5%+'.|WB4B>鸳WFQ`F/Lf %cX5kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkXp(Jixݾߡ9'ۏGxި(y$Hd!Uœ#J$W`}ToV0ճhJ}QRBdtoIխI`եIչZ-|F6}`b2ߦꞍӪ7"K>QB D9cZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵst-DH``Ib-(Jit'$q8b!y "$%>2}h`R|zG>'BaJ @x &vN8YD)QМ'6 $LXLTy,!AdQ 7 zGNOT  B/9!!$LETRS]yGygպT@fzoҢJ)i"bbȉĉ'Hf 3Jda9yB &C˧|)UU%o2}Oህc _ "%>Үl47Ak?, _C1Ռl>O}N=E&~XmdKo n% >2}`h1DńG͌l6gOLngzc-[: *>Kg-`;8 qР&0䕼@@@C8P`p H!@%3GRx^.q /i# Otd9X V΃i2HPE6g*(c u6^-;Sc SG aհ#J9J ΜS0ŞqFׅxK\j٢0 Ќd FO188 d,{MALhF2}ã'i2HPG4^PFa0r88 d٢0 Ќd +jxq.p@!A>Q5%ЂW/i# Orb ϔjF$:zc9ah/^Q1kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ5'u,n%7oNI!ꋫ!œǢzW QuxVP>Ku0}wXum}ToFTa}7)B~2G0P;))߃FHn<JFttaMIԯ xKޭ-N9QaTzz`ϒIYŁEgzR-ܖP|>1 Λz7N߂"K>QB D9cZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵst-DHa``IF/aI(T"H"Lke|UL<@d#[-s q;qq (Tࠬ0Ԝ#\(YBH X0J@(v$N(T®Nb-n(Tԅo(TV(K B] Nভ.gE;X3}NH8| @' M6yxDP m7W+x6*(Ks;00m"1f&,&*mn(Tԅl›I#;Y9` ?!kR*ӵ1Xmn(TԅmF9Q:"PLF&,&*/.?P<ۏE4RIZVp,is:.NL(TǢzV ha 8\J CYTn,YBVp!J qng Z۫KN fw=Ql[Xߔ*C4XD 8U]8ʼJ/,@W(4{ts;yϔ^Co)Z1mb cA%i[y„p97/::vp=+ BYt\ fU$HNz.b;0҅HNz.xᡬ_Qk(T$ ing [ui}Q|LwJ1A=#Elm0% <_@p' MG?((T6L @R-ϔ^ n{tMA^0ŬDńG"qBrwP$+s8Ping "qBrvš>Q5% `҅HNz.|)~qJ r pℷ=Q㖄!80=]+u+褢uP)g3J q;qX9Q:"PL$Xmd%}Ɩi[zVb M O(T6h1a41a1QDEHP\*@ig bŎ"}FHs)(e( 𮛋:\i}efz˫/\*ŎNQFHe!p-$e 8Jҷ3\zGN3'RKrvM(T%< !ҡ+J/5($H+ bxHA%i[®N RppJ qng ; Yiژќ))䂰zƼ(҂Dk;]:yB8;uOG7F+ Dضa0 0a'*@W'xiB W'x8/r*rwM7TCVC9%=ه%@-k? q"D YЊ40fNV3P(K8x, C%D}Ɨ}J  X h 8"d,@' 4R$Lq %iژR;:va$}Ɩt9V°zƠxQabXq|"[z|+u/JZ\ ,7%R~Z!`|.H =ULsbJDҙ0h74R$LqT_Qp<@()_0h74R$LqT@+qb;\SrPzJŭZ~(HҰ>|b\`҅HH2}Ɨ[50?Yt ыXN[T]D`F3ϒj$GQDΐsʸ>#R䚉:7NTRQ#=RwJ[ØYB$Hp>K:* iB$Hp>KgLta*@D84xfU$1kkߊ!¸˩Uԕ)zWY򉋝qJ q"D _Yn\LZ~a+xKK`n69 8"d,語1k7-b9c}ƗrJZv`ZK3Jb 034R$LqS-FJ7@ C ~`>X4UAQV1FY gДfn/(Tĉ pn$ ha;̝J#.gE 4R+K8P pX,@C(KJ["_iA<(҂D/g_B$HuUF*@D8 UYЊ ]Nӕl9p` :% VVk($H+ ejcFwXaQ CpKqP&@*Ugx8NYzG>'B`Fig/A >i"bbȉĉ'!$LSëoR$N(T®NÆ"1k41a1QDEHP\03]Uhhk?ЃY;ת7nçҼJ}Q6F/.\P&@*UgxfU$1g哺]zzP>K:pp=+<a JJj:bRuhe 8"d/`C"*CV=+)G#/}Ur] ͟㿃ˌꞎ9ak?,"D +Jx'Z"I9CzJҷ3Cq͡=%i[~Y0h768ngA(*Tx,PDH@ (.$LQDp8FHD[L"PL <a``I&,O(TzJҷ= +0=Q.N0yP 7#{>Kx"[7(M|JKF/ϔPego!ϋህ&,&*|e]7TqUZ?=%i[J} ;$_7Ҳ_)Q^i"bbȉf8Jҷ3,"DH*ၝ*@CYiRg,<T0x၈ V8ngA0m q+J΃%,<T0~4 ¨`V'xh p/_F/MԤoaTz},ESܕnquo%Ҝ QTe2mI7L(Ks;Cq BX٥ 9ZY„ ҅HA%i[„p97-gst-DHxXmenp@"[(39*n(Ks;00yД0m"1k41a1QDH$+s8>/8PiB W'lZŬwךּ]CwK>Q{g=%i[(Ks;4]LwYB OvzJҷ>2 @p'b;OIչx0(gTN݌qKB' 0I.2{z;tVvꌕ,Z;WzI;9zwJ8ы[YPut!CHfdQis:.NI 9ZY„Yb:>BZT=%i[5($H+4RIZVp-pl+SRuƀޣ2Я;JKbS*].@FGFw{Zӓua(k.\h #oTgw]5<2 PŭI5(TϺ [΄PVNƌ`>O^V($H+ g\jk%E۟p)YRd@JL&KZҷRť)FHi>1k`fiRd@pH8᡻qbzG>'B`Fig/Q "$;EDbP ҅HA%i[®NS}SE!ۺY38-|kœe]ݥf-.QINꋫ*d;Ѿ|L(Ks;1$Wޭ-XH"Y 8Jҷ3\klZůrѼR.|LwJo!xt_!›JZ]QuxW=誊Jub9ng/t{twT]]7TnQ# Q!{z<+ _C`n=Ҽ +J%.gE!`RI_Qk[XwT"JE n{tӪ7*C/ p>J;bϔ^N9(<ŭc7)Qu,ſBrO7ϔ^Lf %ꞏT]] >ޤeZ~wJ1k[XP{tt2u(j'`$ +J%< !ҡ+J5($H+4RIZVp-k; 036g(ᡬZTn,ZzG>'BaJ @x &v#Ɋ Ѿ[~(Ks;.6U'p}ӄm f&,&*g1`{bֵ M= ORrR$tIF.)œ V=Q5RJwEPLGa'tZ-kYe$s ACy 8Jҷ3 a#ծ5#+ bֵ){9s3pojNk,Lh bֵmbֵw0=bwJg58RQbֵZֵQHBG9VBPk#ծ5#+ bֵI5=ьܑ„s3pZv4g4F2rG 9| h74Jҷ3 'xiB W'x8ŭk\4صk`fl0 bֵXk_{tM=-kZЃҥZֹ h,= ϔjFe O*ℌ1kZ(T-k[Xc _hℌ;)œ#҅+ʗcFH1kZŭkRppE gIZa,Lh3P$+s8PV6 IZVp|^p#(TV*s<@bֿ ŭC ͙ !hk}NH8|  MG{Fϔ^ n{t@>*CWN2z=QW%*C}°F"1kZ$LXLTy, +J%P$+s8U-kB Z*[Ϣж6~ig/ 80$$y1QAQ1<},EPwJhJx6|*ʸ>"1k_ "%A%i[y„J qng ;bB7W #]+1ihJ},E|bЂֿfw=S} ! 8Jҷ3\aA}EQBBSܒ]QB^Zx03K~s-ni7a}ǟt3Oit!V/fNV3P(K%DeJ|(]7)}J  4^PF(TV*&*apL\B,_4ؿ!f|457-gst-DH$h;&LX섕Ie][pFeJ ryB00y\ A Z(TV*4RIZVp&-a*@CX xZTFT…r|BSMj\_NQԽ+1irC7*@9k & 0,`h۟J qng ; %DeJ|(\88 d<(҂Dҥb,R\ӌꞏTo}°Xst-DH$&v$L1<{KHuFHg+s\ MqtSIF Z$LXLTy,҅HA%i[®NJ qng "qBrvt` ggKbŎV\J4rC4RIZVp ?)g/tℷ=QkP*;qVA'.YKuW$_|P 1pCsAr=*BTRRbŋk9bޔrYB8Sz.a.)šΚ2Y(͋kzG>'B`Fig/A # 41a1QDbDɋ $+s"qBrwЄme?(fsSz.a $LXLTy,a'*@W'l_`gJ.ҥb,]iʷ*C8ʼǢzVšn3 +zXˡXD¬_YNGJN=Quq`ZP/iqU+]8Nr"X9kzG>'BaJ @xC0$$y1QAQ1غ7ӕo(T>0yN2Na.)$'f.5ӄ)%EnN$[Æ!¼)Uj:u].e'|I=Y D/bi"bbȉf8R ;bЃ?Ѓ(ֵm/Ҕdw(T5kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkX6y~Q iwGo(TF YYX5kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkY0ت0~CYTn,=#Elm0QIH"C"dʼnqtnwœت0~P Jҷ=#o,n`C4FHg+s#oV0ŚH"YU3`t` bcֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵcX;UE/utԯ(>𦤆nvU7E~vѷ09:"ƱkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ' 4+g% T+ c(+۟lURY>V>LBJ8ň3 O|#RY>bF *ӵ1XldbŋBJ8ňU)B |l4qQ (X8qbŎ+y![rwqOl[YzG>'BaJ @x@, 6 LTPTLvJC70PV# SBͦ]8ʺ.1{gRotb*%+;ꋫ'7N$3sꩺ/H&c^i"bbȉflUF5kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkX6y~|HR%TϔPefQДF8,Fn'cXֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵa( ci(&q Xmd%Bg-9*"H"LaI閺P`(%v FJcc"JQI6hD^PF 'i:h'P8Љ2HPD&!)%*@"d3}NH8| AllFn'NJ͠BIDK4DgY9`T";SaQR"Dg4+qQB}wI+3P;х8S0~3g|(N3oM˧D7<iHd9glsOKMCs?ŋk;nw)ϔi Vy䪛R8DwGmVgZrUF-\#[-sUL q1:(Xѐ.at80Cᡬ]Qb,bsqkꋫ VK7%f}%T]Q3Bg-9*ЄmQӯ$% RpsOKMC..a st-DH$00$ĉ&;!(8䪘4+qQ-58S>QBiyB2 +J\B A3W8ʻF=Q<T0~,"G='R H"Y%kA(:fYҮl45AŵlQuz} N2BQu+sT!b!AT!.YzG>'BaJ @x($LXLTy!ؑ2bB &C!(8䪙%(TBJpM3/ǪPṫ D+bi"bbȉf( WUZ6 Jŵ Fn'NJ|ZjpWwsIYyiUgst-DIDHv#Ɋ  H2 Fn'%T>Q-58S;gJNJ1a41a1QDOKMF>Qk_w7(kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZ5ӄot_/7KrC(&B/i/`|(_iYB2 ;cXх8E M7V3Ԝ_rJsϔi Vy7ѳ%]tRn}Iqo.Bc(T8v ``t_$)gѪFqBoJ{ΐy!3хl;ꋫ9`0("ƵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵ=#Elm0% <_@IDHwF/i:hpBIDIl1;!karvt"kezt"k~EuF.ny…E pTo}HsXJ4F SEqUo V0("Ʊ f.fsr!Z.1zyW…ЄmjꋣwAIN#Hf ;WƮ%.n%nw踳^2ǥ]:%'${N%#)Єme<9aI閺Pi:h:.N]Jʾ.t"PIPXJ4F a.H^8/XQWEs?Q0P;Ⱥ|(\;:S:3D 3leYT]^v FLN%#t !JO3P;*Reӌ"X9g\k@?y{MAL&Q0R̜ZrU@B&.p@!AР۟E5a0 Ќc8R0䨌S 1sI K~@@ eYb:}v|\;?Ѕ@@g.ne_ :.NΔ΃  G>Qpn3XcF.nyW…S}yq+›K{;JEG7|(\<+B%=nmb3JhP@Љ…>I*N}@0BA&Ř΄_aC#\䒩Xѐ,0310 hByЋ i -y…w\1qw80,€@W sdkZmgKbŎ]Ⱥ_ M#owqrw^*I.*sXH)as+B%=nmb3JhP@Љ…>I*N}@0BE f'gB/NmfqITs a,dhk|\0 hByЋ iЋ FETo*P hg*@ B [?JTa(PvԸP\O?Tog>Q1$Rr>HDs?䒩4"asJhP 0PAgyЋ hbkY|U8BK?2Xqb3JhP@Љ…>I*N}@0BE f'gB/NmfqITs a,dhk|\0 1gS}Q[U~B\#"JQ0PF9e_ @QB0PGt_ʾ/ބ䞕*a}%jgYX  )a@(V 5ZO:}x fu+s*Prvtth#p$*#u'4,`@,hY @,hY'gB/^ Haza,a|>.p0PG0P‚9…΋  4Bpp9Fŵ9'ʾ/@kTot%>ދB[Xꋫʾ/xSQӯ$:z/ A-YiژsL>.p0PG4"/i# 9U`Í$BxKFh' c XP@/ nBSEsABSEs,\lpQ|(\`V1uF)5qi:h%4XJ,_X@(D}.ѹXJ4F 'y]Jʾ.t\)f0c!as9 8PG4BEj/  EsAk˜JϢж6~ig/ Q "$;%8&ʾ/\H|(\;:S:R"XHhNIXJ4F fua((t\ӌ)褢ݗc/;ga $LXLTy,.ne_ :.NΔ΃d3D ͝Q0P; ش JŞϢж6~ig/ Q "$;%8&ʾ/\H|(\;:S:Мi:h͝Q0P;*IXrHff0c 1DńG"VUsL?6v FC6C1KP =AolЈ&u+s:v FJ1sI ưw\ToB A3|(_PF(T;IՄD`:tX;U\P迅i,kJOL;IՄD`rvB A2Us%"JQ0S uB~2P ( ;'VE=PdBEҙ!%(T&qB0P ja0A ,qBaQR 4"b  7/$:z^qB0P4 0P%Sϴ( hb6A9{MAL&4#!%(TL9*#*TBƄL\B!<%߅0@Y`΄_a'gB/!iςnH5oazn< \xrwL2ËœYV[YiRضcF 39W…S}y\xW8ʻK{;JEG7|(\; Ѕ Ovz,[X䒩4"asJhP 0PrvlYЋ hbkY|U8BK?2ņf'gB/ aZt"arvt"31gEQ}9!ЅHpnwJTo4VO q…g…>I*N}AC? ja0A ,qBaQR 4"b  ..8$q9 |(\䒩0PBxLw}8S}#oskB}8G7n}͟g%*BxS(T;JKj\_q?䒩4"asJhP 0PAgyЋ hbkY|U8BK?2Xqb3JhP@Љ…>I*N}@0BE f'gB/NmfqITs a,dhk|\0 1/@a<гP@/ hBJ 'gJgAf0aW B8GRpsBV:}慚b:}慚arvt"0Y>(T @(^Bs (#|(\;gY9`TToB A3|(_Pi:h宽QYW…`7|(_F rw9'DeJ|(_QZ34i… s?ŋk;*rO7|(_ ^  J}Q…ضmY;=%W7|(_ 𦣧^HuF_ ,[Xӵ1|(\`hD^PF 8r+1sI 𖍹N@(^ঋB= NঋBX!AFPAbŋk;Sk/ua()(JiXQAB%]qsgi:h:.NGPt̕|(\;:S:͐a*C4BsL>.pi…΋(_ 8("B85' 41v-=#Elm0% <_@xQ "$;B A3|(_5T!*Prvtt9B3d3D Мi:h͝Q0P;+W>SIEe/ |(_wD>Æ"H"YA(:fJ.t\)f0c!;IՄD`rw@hA-=#Elm0% <_@$LXLTy!BJBq4z%LW…΋3 >v FLN%#2G(Tlc8R $LXLTy, 3%_ :.NΔ΃gi:h:.Nd3D Fja0@BJi:hq8 dMk,_To>I)QaTz|'V\콙cXՋzn9ӴXJ4F S)1Q0P;J.t\)"XH 8("|(\ABE B@T_ 8 cXՋxT'VEP *Prvtt/¤3D ;М3si:hվЄaXJ4Rue<*i}¨qrw{To}°@Q],E%Rp705X7|(\`P 0P‚!@}~as+tBrO7*CJʕ0P|MxsƬ]‘|(\`V EsAӽ \񱔡c65kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkXJ$;qIYyiU4%Q"1g*C$HvP=շIYt;*UE%:GJNJMBu0E(FGʨnLk? c'ZӒb%T/ŀ V @"Ӓs?şst-DQ "$;&LX7't>9U3KNJn ޤy! E(FGU+t х5$3œe^[~*C$Hህc _ "%ZrUFt` gamAk?,Q;S4䪚.}QtyFHd!JwI+3Tl?-5i]%Krwbg}a(23tVgB40]q^ZrULC4䪛.N R q1"G(, &@H+a+xJ 0'6vӺIYg% W c'FCp8hk?ŋ%;1 +Bv|\̈1hJ|Vg:wI+3Jo;<XJ"TRgOF9IYxK=ZP T@ғ-uƁxQiU1 ӒcP'1C$ZrU@)sI+'.?&.`. +ӵ1Xldbŋk9e MXz.|d͌l_X9Q:"PL$2}`i+K^ՌǢzV1aY "%>ؿ*ŞϢж6~ig/!FAllRN-zr>0yД$ϼ䪘6 IDK62}斜Q[X߁P+^P uE͌|)(ϭ*|;y…=y!RHP;ѼNU.v$V{;Ra(Eܒ\d@Ǥ+{ylrIe c.HVØb}RCI*Ri,L(c'LpVـDUI,%q_ XY>(T =$C\iA"AXK-;S 4"PHLЈgl&hD VـDUI,%qq($H+ bd8j‚4 4^PFa0c-[:4$(".`ni+' V1uFϢж6~ig/@p 41a1QDbDɋt M)o,n`C4F*W62}P nybe V0H"Y4,@x,R Z:UV0 5U-1k;qiwf-*rCnn%sc'IYyiU3KNJŎS*C(TH2D{ot>ϔi Vy䪔Ʊc}G7?#Kwq j%[;cE$|i:hwi:hEb~azFG7V7>QT! O?/ ZFN%#3 ENQ ^رߺq9k*@ڇN%f}lCt>J1b, _$|'VR"DsJ(TӵJbL*;}z>Q*-9*ת7VM~.|\|>QR?I*P)3(TӵJƞ۟;ȺA(:frwI+3N%#))R*!f> !hk?ş]J$pbT"VD,(҂DzƠJ  gnng+Krv heH(H|G\jׅPHPk?Ⱥ(H| іiR3 =Hk@xQҥFU9 +YzG>'BaJ @x(F&,&*BrӒnwu$3sYk;Մ" GBrO(T?I*Nua()r',Lhl'VK'V"0G b' @8hk?şXJ4F !CHfdQJV3EԭBG{ҤϝQ0S6v F@ 6v FC$-;S3&Vq+J΋nng|(\; 9PǤ+s:.NNT q…΋%dRpsCaxK𡈅aXVn~EԭHd]J0P=PdHcA(:fN0PJůg'i:h6v FLi,P ( ;#Mԭr%LqbV焱@( n~Eԭ ]J(T'5ʄ 38KvA(:fN0P=PdH1_X6y} O>Q)[p}f=QR;IՄD`_FT#o<T0{k4.ng*CKu'4,PRK-;Su+s8R ZŋZHD[L?4A3$p0$ĉ&;(T6\#ua()hœe]#o,n` DńG"VqB3gi:hbֿΕuU aZ|XE[b  ƀ^hBJ!H%k@ (P %sGPt̜P-Fů_( ci(&q.Aؑ2be €+yN%#00mSЄmeV)UhB6Hf 1a_DńG͝Q0S4RN:wI+3_`gJ-5U-AAk;Y `z9B8G7ua();H;LqU$gujѷ-pCRpsEd8RYiژ,g4[ bTn,Zůrd͌|#%f}%T-9*2GiJ-;Pj;GV<'V-迅7V=Ye "VqBja@4#;IՄD`L ja0AR3i:hq8 dO c Z`(_;s Nas= NঋBy*ů`n4L>.p0PG Bpp; -;S5… p20ճi۟9…΋;HwJk7-kHD[L?4A3!>i"bbȉĉ'!$L.p0PG4VO(#L%vȾ.t\/9G,t\U_Qk^zG>'BaJ @x IDHv$Lص03]UhhkJűk\G,t\PaX8ŭuFŭbֿ߀MV|(\`i… s)(dŭQ4K1$NgiBE^$wWN2)nY`ى$wP;+^JtxE M7Vbֿߧt_YuE,1k_YzG>'BaJ @x$LXLTy!B2Dt';IՄD`|WB4 ͝r/ '`|z Wwf$ZrU@ህc ZֳIDK6v FLG"Prv !klZůrd͌{t*!+^TnyB8GQ0S6vrvůZ9Q:"PLHxH"C"dʼnrHd!O6v FMS+$N>Quwˌ)褢(62} D+bֳIDK6v FLů03]Uhhk Qi:h*@ڇN%f}omk_{!*CumVg8G4䪌|kZ_)#ZrUNwI+3-9*>JgF/W3;B#ًĒU;NJY0h7bgB#QAq"%0 I Ď(EĈQ (x,7- OB#LL(P$q@ (.$D17V3q*T]^|x>ҐwڗӔw$bI*%TD^2(F՜5boO/*, 8L0AITX "$p1`a"r|(_c5 1om&&qQ`X0dŁ8,DH2bE0Yx^1%S5P  ƀ^haI閺@(䪘iiU7E\1p@°PIN%f}s?gh8,DH2bE0p9F!A =)=2\hS-9*迋C(V @)$ϰgQb~)'=ԾQf$ZrUJpTaNwI+3iU3KNJaFtJ…*Ӕ﬷ɋkzG>'BaJ @x |(DńGHbx]Qd'9*O+ig|(_}%>wI+3-9*iiU"1&,&*Z.<3.?-v FNTE-zyR3i:h(|#ǪPt̝;IՄD`Zv5(gi:h:.NfJ  fE5a0 ;IՄD`$BxKgiژpυ ~V(ЉA"A0%K{? cUX?Tn,kӄoQn u7j]τwsXJ4F 1kkӵ1FsTʫE5a0 *@B&.p@!An~|(\;tUԅl@'7 4+g% T+ ejcLf'>.u![ b0h7yze/ -9*!ZrUM'xLx"(P=S*^!|(\QHV{ÒV .rX(y$t>pp9_QkY( ci(&qX$ǽmڗs| m1U AhB0% O7Єm3/i¨`8b!xH"Y]…΋.rpυ 'ypυ {?I5ƍC%;8b#-9*%Tb@ 8DPc$UX'BaJ @x(&v.pP6*  ` oӌR|#Q0P8b!xH"Ypυ 'ypυ { T-gst-DH8Xmb7 `i¨` qxGw;IՄD`pB-&,&*/=QR)*'9*, 8L0FL[Xߋ)sua(t|xzC1b-pCqi ѓ&`gAƘ$pp9]Qkk߉+7^P8G4D-b2bg9s* haiژќbgi ѓ&`gAƘ$Cv-Fŭmbֱ߁RV/ BS)JyiUZ ŭ1mk[{!'.^2i134bg9s+_Qkk߀M7;*}evP)] O4DG7Opm![9(RZ~.)šrt^3+KNq'8G7%f}%Tb;KNJO(RBt\kk9Q:"PL$<0$ĉ&; UuTo|(^#JyiU00yМ/)F bք*@;҅HHVJŭg\LhiBЈ&si:hq8 dO c ZזG 4"PHLЉQ3aB+j‚!3B%°0ŭxP@, nBSx)мʉ# 8Brg…0P‚9Q3aB|(\W'|bTn,=#Elm0% <_@@&v$L12.}eft%.piB-k]knT]+%4"f-A[Z OP ?\h8F.q…-uFůZ~(rD ދ_WBJZ-ه…eK>.p0PGMj:uToV0ճy!kJ#  gnT]^P qrHjNUob-st-DHx``I&,Lv6#JyiU00m8GJNJiqP BFߺ![  D/bֳIDK40|bg-9*m![:.Nصt` b|XE[bքŭZ~>Q5%TLP|;]QB*(#kD asCY E aTqA-c40s>.pOҢg…R:p-c/ ǝQ0P9[Xua(( ha%IN%#1D%iژPB%D asBa#B%D as\C Y'a$Sk4N%#0p9]Qnp@T]\XD| +;~a|fGuOGQ!ua()|(_QY;To ''{IVߌ¨IYyiU7E3>/,"Gu1I- !ua()UhB6ńHkà_ F(FN%#@M(Rk68/¢@R q1"G(, &@Kt_PC4䪁X3I[C%;%<\i4Jg2 B40fNMԭis:.NI]J$p} -*LB-50H VNƌ;H;Y/xk?Дd"sIJ?&$ ha;̝J#[t\H(H|>BZTXJ4F f!'a4l:BX8qgfyЊ ]“u+s8ngEI7R3>.tMԭ 'a'*8ngEIʄ0PxIʄ0Prv *NhxL/ u1+ \ȺP [ :ȺasB A2qB1 3'|(\?B A2q…΋*@g…0P]JD "Vq…΃I]J(T? qQ3aB|(\.nqrv iR3>.t\HP*@g…0P*3""T!8BA$ 3'*A 80s>.pB L\=Pd '`$ 3'*AACsB%D asBxC (TD as(TD asU(:fECpKg*&p(\ *'`$0҅HTLP 8[\(TD asU(:fb7Tn,Q0P@d"=X@^j?FF0h7yXJ4F `s?şst-DHx0$ĉ&;NI%S䪘6#%f}%TIM7( `m 0@ m0z m8S;yN%#"3DńG*&p(_4DKNJTLP 8UiQ3aB|(\ABt\8F.q…rvΕuU a>Q"1kB o9N, Fua()à_$yO}QgVj? ql@C/ T$_`>qb-F 08iQ3aB|(\A~*&p(_8Gb;N%#3gi:h./}Ei:hM_!JO3SFœ#%f}%T-9*sk!('P@J0zLk? eja@8Ќ'V0hծ5N5cY  ƀ^i Fn'8䪘8qg;̝J#[t\H(H|>BZTXJ4F fua()ӵ19!JO2qiU%q .v 8HR̜ZrUF  ƀ^iB!('STn,=#Elm0% <_@ MH1bcN%#00yQ5t#LB6x 6J/Kuӄp0Nm![ m8S;sBg-9*pBH"YXJ4F f8F.q…rwTLP 8PG40|bg-9*m![:.NҮl455UTi VyNJ iB!('QAA_hk4 ¢ H2$q1"dE$%BdӒnӒb%T C%;Zŋ_( ci(&qp0$ĉ&;!(8䪘Qf I s)(-Xͧ`6#nHV0ͧ qxGv^2|HR%T^0ůf&,&*Q"kB ZjaYbg Y0 Ќd +jxq.p@!A%sJ# 8QA-Fŭgst-DH&v$L1،(_NAaTrEEp0m1S%bQ'ld^0ŭ&,&*z=![gZֶJ}sIT-9*IYyiUr#gꋫ$Hd!JwI+3#%f}%T-9*?-ӽR[F8(y$`k?ДڇN%f}lCt>Jɋ(TӵJ40 ?ڇN%f}OD54҅H;P$ϼbşst-DIDHv$LJG&'ZrUN*!xpB-f&,&*KNJΕuU a_amB bŎ6y~K7ua()MԤoaTsJ tCt>رߺwЄme"Ik;IՄD` RpsJ tCt>zƠ^8,5BSi:xG6v FJ1o0h7yze/ Q0P;3gi:BPIPXJ4F sTn,=#uDsSu+s9Z\΋iR3 =C(KJ>v FLN%%¢+ g\kjKϋCq3Tn;?=#Elm0% <_ $LXLTy!ؑ2bB &CQ0S6v GJr!JO3J;P$Ͼ*!xpB-&,&*Үl45AB [gc? _.;S4䪙]ӌtМ=![?Jo~%KF ^(lNwJ|c _7O(Rn=ER} Ow>,wEܢӄz|VgZrUN2}Bbš%b'؀PSOͤ+gFOl[ I5&&p`RK-;SO/XX͌|)=![ͤ+{-9*kBJFOc'|ؿ žQ.`n4Pyѓ.X9Q:"PLHH"C"dʼnqtnwœeO >#oJ%T-9*pB-f&,&*Q)[rӒSt_ua()MŝҽQqUe ϔPefQD8J:f@QFn'NJM;IՄD`;NnzyB5kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkY0UVᡬ7Ϣж6~ig/ @&vV %Bg-9*7t#JFHg(@ua(D/41a1QDOKMFVua(C7$L;IՄD`7E!JO3R<Ù9b+;ꋫ%k=QRn:{FߘrJ)%*@"d1gst-DH``IR #ϔi Vy䪘< D/41a1QDOKMF-X@uF+ Epn%Qj%[;|Zj1mbI*P)3>Q-51@(vN.nxBJQ0RNr/ҬYR3 =(`lsHQ 4 %q pƼ(҂DY[t\g,.ng 8{0~5F$.ng 8{1C,eEԭBG{=ZP^iA"AAbǪPt̜(H| =$Cc=PgXQa,k@ .5F$*9Z\΋C,e=PdBG{=ZPƼ(҂DY=PdBG{ heGPt̜(H|G\jk($H(5[XߐF/sw f#%R~/wK>Q{g%ҚTo"Vŵ ‡PNz.y]J$py.gE`ـDUI&.Xs p#40&(A+s+X% =)=2\h)fu+s8PcPIZVp|^t D   4x,\H(H"$p97-mb;D1tc*宻i}e( М"Vp#kfgVnK>Q{g%ҁ)]8Fe\fS.ՋXZqt^3X>NŭZHD[L?4A3 a``IHbcU's ӔqB[)hB%Y38-|IД06 H"Y]JH(H|G(T„""O4[.ng 8{1G(T„""MB Zc,wךּ]CTKϔ^ n{tǪPṯmb0yӷ^hBJ =k.gE!`RI7/x,\H(H"$ +I.A+J BJOLG+s: bA(:fN$paX3V1C%CCq 8R 8x<bŋ[XQ fʹkwE%_Ye '$GPt̜(H|ZYդ"[iϔ^ n{twWNWˁzb;Ve](fSkk9Q:"PL$Xm`<섕Ie\F>B00yPwJ`` x2n|L(Ks;00m4%<  B-&,&*Q-54]L*ŀ x/t_&-ua()@>Ŭw3}?ԯYg[ꌩ|'V)9)8:krҎ-x˩”V߸#!YuFB!JO3P9[X(Vؿ >"01s*Xa9bT.ҥϪH'9L\ʖ DH\Zֶg.UC|)ЄmZc,wE IZV7:#);umnFPIo!VcncOIZV7:#9N%#8ݿBy"D1c=uTo̳V;H\e]I0;;}Ү "Ƽ۫ FJn!JO3JNqŎGN)Bgst-DHQ "$;#gKj:uΈLuP .n{RA(:fF"1&,&*PIZV}J  HxKbQWE($H+ @NzJҷ3JGz_ŭZ~ J}QvzcsДHkk!AHV !ӕo4ngE !=Pg.ng(71OIZVt\k]Zb(c _.To>QBQӬnziR=7TnQ<[Fŵ4Eԭ:瀢A(:fpp97Ϣж6~ig/@Fi"bbȉĉ'QӬntF h>=Ү #oQu+sT!.naEW$W҅ncOIZV7:#Pb!XIDK4[hBJ.nl WUZ6(Vŵ.R/)Fr:uBSB A2ŵB A2rcs bHfdQ*9Z\΋hBJ =C(KJ+sƾ҂xQcc$_<%1(+F$'=%i[rw#XJ= @/b-cE%>;NUGNJyA(:fX\Ԥ{ Giʷ` zJҷ3"V烁Zŋ_BJt+s:.Nصn.ŭ1m[XߐF/W7(ߨ7= O4z%LΛz7N @-# Qb!AA(:fNQӬnx !Eԭqg( ci(&qx$aF&,&*QB A2tUrIp=(Q4nzcs0PF"1k41a1QDGPtu+sB A2ΕuU a_amA[XߐVd!(9iU9G7*C=%i[:M=Ŏ<[Fŵ;̝J#B+KrvMB A2p#`E iRg(i}J  Hx nfE؁%VNƁc9%Tn,k9d%Bg-9*ii)۞g)Zx0|Iv rVyiUV,_=iBSQ9Z6*C6b\*%I`ݖS>v%>Nؿ˕Q+5%K=F 1sS>c.awJ81bHD[L?4A3 00$$y1QAQ1 Fn'%TrSQ-51+sB A2@`flQ CXqb-c!;ua(C7(9iU0}f9]JEA(:ftZ~ $duVqϓt_&{=;ZFQRb;qwV,۫}Qv FJnea k!JO3P9[XϢж6~ig/@ 41a1QDbDɋJ4+q<'9*ii%RW|շbQ™ Fn'%TL۫oB%N%#( H"Y%ΕuU aZϔkl_bЃcCJ@%)%]Lw#oДBg-9*iiŎ]U:xXHE=Մ)Fua#3n}!-\W$F.eK00X`sTn,_,XƖJ@$T/L,bALZc,w'nFE1Di:h3 FBg-9*iiŎQ R=Q<[Fŵ=#Elm0% <_@h;+sa'VДBg-9*6 $LXLTy,QJ|'V擴XJ4F Q|9Q:"PL$A[3i:hӄsBg-9* B-f&,&*/4%>v FLN%/-;S )N% `N%#(t@B&.p@!A@(X .N.ng|(\;:S8PG"VqB:R3.pEԭ⯅ '} N=Pd⯅ 'gJg A(:fN(TBSB A2qW…ǪPt̜UsҬ_R2 !B$]J*PrvtpL"VqBaL_BJ !B#A(:fN*PrvtpLB A2qBaLbYl|XJ4F fua(ny#oPC6[F=QRn:x(y$+ DUF-QHf\_;IՄD`(FHoӌꞏTo DB%? Ji]m_/o!xs/v FC$ ha;̝J#[t\H(H|>BZTXJ4F c_iA<(҂D/5%[$D;H;6v D(5;0ٟ`>` Aua((t"p97-mb;'V\6v GrSJeKg,2H䱻꫒>/N1$['$yw hB0%-mgLtU+9jq (fT-aQAJ  ;IՄD`Њ 8FH@'0hD A 8O4"<7 c Zn~AYSJ"sS q$R wEԭ̫Bg;N"VqB2 w=PdBg;NB A2qBŬƧu+s*PЊ 4"AYS|(\&MVs.ng*@&ŬƧT!*PЊ 4"AYSPt̕|(\&MVs 3'*@&-pCsOKML@C4ƧD1k7-b9bBSO7K$:{TToOi VyuTo%!({˝Q0S}°@ ů4AYS|(\E `(iR2 ,l wEԭ̫B !Eԭ⯅ (#` AYS|(_D3HUs9Q:"PL$ MH1bcv FL m8S}%!(~h"[7V|(_u00mFV)Єm*C&u:znny…Sh1a&,&*JeKb9hNIFPIo!V7ЄmZů`nig;N!(L@C4D_Qk[XwsXJ4F fua(;Ls|HR%T>Q-5Z;V-W{>ST9Zů}NH8| 0NA;IՄD`6)Єme?u4\b-% 2` zM#oR 6l(g/h1a[MJ%>S^€~ꋫºn:y) C+ Db!x?$LXLTy,N%W$F.eK"VAYSIC52ZHfdQJV3EԭBG{u Ngua();IՄŭs<@bָ!f|45ZşϢж6~ig/ H&v$L< t;NF/7B"[Q0SBSb!xH"YXJ,03]Uhho|XE[gA_KbֶkXѼR]JT]^v FLN%*Ӵ6-k>Q-5=ZuQӴ>HfVswsڒJL wBJ/u9(o,W$F.eKbֱߋ g$)*.ưX=#Elm0% <_@NAؑ2bd%BgSMSQ0R*(g. DńG>Q-5( ci(&qY) Ci[L'9OMSw;IՄD`3 !% TH`` c(wUuOG7*C ϝQ0S/ 6 S4yU)ʗAYSIC52}NH8| @(F\|I$3[Re)ϯToS0ŭ`܂.k3sm20v F@-k iFHdVXJ4F n٫@V迡1t` gam_biA  >Q-51 wBQ٣ϪH'9L\ʗfVsPLx8ŮX_勣}!J%N%#3gi:w%;s躝Qp,s䡖-S*Xˍ>v΄C_amZbЃ+.v FN.Nߛ;IՄB9G7*@;х?To=ԾQVK>QB D;R0>z6yv/rꋫ>/N1$[NʻxGw;IՄD`s/v FC$ ha;̝J#[t\H(H|>BZTXJ4F c_iA<(҂D/5%[$Ias@.ng|(\; bx 036g`n69XJ4F ,bŋZk;IՄD`Њ XP@҂D۟м! V,t'V;XXѽ7RQ"AQ0PE zGN3'RVr'`$.ng 8{>P&|'VPO 4 ldB Va+xRnng|(\;4[_ :.NƒX hC ͙ᡸ4l'VB(Kqb֤Fua((t"(4.v/;BK;IՄV-mb;toMԭ0P4z%L_ :.NQuq]QZk#ua();IՄMN<#ua((ŬwB"XN%Fis`Z.1}eS VZϢж6~ig/ xXmbDɋt ӄyN%#00m8SrS<Σ^HsXJ4F ``$ D/bi"bbȉfu+s8BEl'Vm!J%QbzG>'BaJ @x,JFua()&ӄzy) Cua()ͧ(FHiJo!xpB-ua(B"XN%-aJ45YamB _'VB(H@:wY:G57R3;&u+s8P0|"3i:hƾ҂xQcc$_.B A2qW…΋?T]\fFVZXJ4F fua(SrS<XJ4F 1k+:v D;ѽZ\$_Yt¼sst-DH00$ĉ&;B A3|(_Ni:hAMN:y!ua()h1a_ "%=Pd⯅ 'yXJ9+:v EY( ci(&q(U;IՄD`N3s;IՄD`6!+Єm ;IՄaRci:X}*@-g5U/1XJ4F !CHfdQJV3EԭBG{ҤϝQ0SJ F$|A*9%o r>.t\=Pd⯅ 'aA_4ؿ!f@Cl 6v FC%_QkRppgi:h:BAXKPH;s!J%Qtk7Pg0P4z%L_ :.NQuq]QZk#ua();IՄMN<#ua((ŬwB"XN%Fis`Z.1}eS VZŬ}NH8| FAؑ2bcA(:fs `i<'V6))۞gQӯ$9N%#00m"1k41a1QDGPt̜Us6v G6aNua(k=#Elm0% <_@@~% si:hi=Qn`~Si:hӔzyB4եp}8b!xgi:sl! V,t'Vϥ]UhŬF1b,Ve;uo7ua((=#Elm0% <_@@``IlQ0SM O is>3w MI`m7WДBg-9*Ci9B00m7W)^0ŬDńG͝Q"Vq…HT!8BA(:fsOKML.ng 8{Q-53Db<@`a?D0457/9Q:"PL$@ 41a1QDbDɋXJ4F fua(TU;umؔh0;IՄD` g[x D+41a1QDgi:X:UV0 A|kZ OrIsXJ4F QmkZ_)I,Fn'NJF!k_{!Ү%v]Et5kZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkZֵkY0UV !hk*şst-D>i"bbȉħ9NV/\DTo%!(~P+i) $H EVn%(TH2;IՄD`1{\JF ]Uh1a6uU?+s=Մ*5M7$>^i)ft ӄwtT|'gS3PP""" "Dc@A+y5b)J=+`K3E V AdÀLh%o&CYwy0 (x,DP?1/i# 8q.p@!A{MALhQB G1sTAT2*AiWUZ D+6uU?f=R%f-,3DlcqbŎQq`>p=#8ˣ^3)ЂWN1oe<E V AdÀLiEO>Bj5L<{MALiEO>ABlZf3E5a0@4$(#/i# (("(M-x3E5a0@4$("}҈*5b.qf!2wUgUVs䡖- k`'+w,b֝ab&,./usr/es/sbin/cluster/svcpprc/utils/cl_verify_svcpprc_cspoc#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/cl_verify_svcpprc_cspoc.sh 1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2011 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)19 1.3 src/43haes/usr/sbin/cluster/svcpprc/utils/cl_verify_svcpprc_cspoc.sh, hacmp.svcpprc, 61haes_r714 11/28/11 15:13:09 ############################################################################### # COMPONENT_NAME: SVCPPRC_UTILS # # FUNCTIONS: rdsort # ######################################################################### ######################################################################### # # # Name: cl_verify_svcpprc_cspoc # # # # Description: This script verify that SVC PPRC-controlled disk(s) # # are in a right state for C-SPOC operations # # # # Called by: _verify_replicated_volumes in lvm_utils.cel # # # # # # # # Returns: 0 success # # nonzero failure # # # ######################################################################### PROGNAME=$(basename ${0}) HACMPDIR="/usr/es/sbin/cluster/utilities" SVCPPRC_UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" SVCPPRC_CMDSDIR="/usr/es/sbin/cluster/svcpprc" export PATH=$PATH:$SVCPPRC_UTILDIR:$SVCPPRC_CMDSDIR:$HACMPDIR ODMDIR=/etc/es/objrepos [[ "$VERBOSE_LOGGING" = "high" ]] && set -x [[ "$VERBOSE_LOGGING" = "high" ]] && version='1.3 $Source: 61haes_r711 43haes/usr/sbin/cluster/svcpprc/utils/cl_verify_svcpprc_cspoc.sh 1$' integer STATUS=0 if [[ -z "$EMULATE" ]] then EMULATE="REAL" fi VG=$1 ACTIVENODENAME=$2 IMPORTVGNODES=$3 RRESOURCEGROUP=`odmget -q"name=VOLUME_GROUP AND value=VG" HACMPresource |grep group |cut -f2 -d'"'` VOLUMESETS=`cllsres -g $RRESOURCEGROUP |grep SVCPPRC_REP_RESOURCE |cut -f2 -d'"'` if [[ -z "$VOLUMESETS" ]] then # VG is not a SVC PPRC-protected Volume Group dspmsg -s 3 svcpprc.cat 35 "WARNING: There are no SVC PPRC VolumeSets defined in PowerHA SystemMirror for Volume Group $VG.\n" $VG ((STATUS=STATUS+1)) exit $STATUS else # Verify that the C-SPOC operations will be run only at one site # All C-SPOC operations may succeed if run on nodes at the same site ACTIVESITE=$(cllssite -c -n| grep -v "#nodename" | grep $ACTIVENODENAME | cut -f2 -d":") MULTI_CSPOC_SITES=0 for node in $IMPORTVGNODES do REM_SITE=$(cllssite -c -n| grep -v "#nodename" | grep $node | \ cut -f2 -d":") if [ $ACTIVESITE != $REM_SITE ] then # This importvg node is at same site MULTI_CSPOC_SITES=1 fi done if [[ $MULTI_CSPOC_SITES -eq 0 ]] then # CSPOC operation on nodes at same site may succeed return 0 else # The CSPOC operation nodes are not at the same site # Since the cluster is not active at the node with vg varied on # the changes may not be known at the remote site. # Proceed to Verify that SVC PPRC Volumes relationship has # been established# and in InSync or PPRC-XD Mode. # Add/remove/change filesystem and logical volume operations # may succeed if pprc relationships have been established # Do not allow the CSPOC operations otherwise continue fi fi RODUCTIONSITE=$(odmget -qname=$VolumeSet HACMPsvcpprc | grep production_site | cut -f2 -d'"') SVCPPRCCMDRESULT=`$ERCMFDIR/svcpprc_run_client display $VolumeSet` VOLUMESETSTATE=`echo $SVCPPRCCMDRESULT |cut -d"," -f1` # CURRENTPRODUCTIONSITENAME=`echo $ERCMFCMDRESULT |cut -d" ," -f2` case $VOLUMESETSTATE in InSync) # There is no SVC PPRC relationship between the volumes so the changes made # at the active site may not be known at the remote site. For C-SPOC operations # to succeed at the remote site, the SVC PPRC pairs need to be established. Allow the # user to decide whether to start the SVC PPRC pairs or not. dspmsg -s 3 svcpprc.cat 40 "WARNING: There is no SVC PPRC relationship between volumes on $ACTIVENODENAME at $ACTIVESITE.\n" $ACTIVENODENAME $ACTIVESITE dspmsg -s 3 svcpprc.cat 45 "Do you wish to start the SVC PPRC Relationship? y(es) n(o)?\n" read RESP ; RESP=$(yesno $RESP) case $RESP in y*|Y*) dspmsg -s 3 svcpprc.cat 50 "Continuing...\n" continue;; *) # Cancel CSPOC operation dspmsg -s 3 svcpprc.cat 55 "You have cancelled the CSPOC operation.\n" exit 1;; esac # All PPRC Pairs are InSync. This is the preferred state # to be in for Synchronous PPRC # STATUS=0 continue;; XDMode) # XD copy is being used. # If this is a Sych PPRC SVC PPRC will eventually # move it to InSync. Do Nothing STATUS=0 continue;; SplitSite) # PPRC pairs are consistent in and of themselves # but not necessarily with one another # The state achieved after a site split svcpprc_run_client resync $VolumeSet if (($?!=0)) then STATUS=1 fi ;; *) # All other states, we leave it to the user. dspmsg -s 3 svcpprc.cat 60 "SVC PPRC volumes on $ACTIVENODENAME at $ACTIVESITE are in $VOLUMESETSTATE state.\n" $ACTIVENODENAME $ACTIVESITE $VOLUMESETSTATE exit 1 ;; esac G" = k,w!b֝ab&!./usr/es/sbin/cluster/svcpprc/utils/cl_vpath_to_vdiskcs#!/bin/ksh # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/cl_vpath_to_vdisk.sh 1.22 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2005,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/cl_vpath_to_vdisk.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # COMPONENT_NAME: HACMP.SVCPPRC # # # cl_vpath_to_vdisk # # Verifies the configuration of the HACMP-SVCPPRC setup # # PROGNAME=cl_vpath_to_vdisk CMDSDIR=/usr/es/sbin/cluster/svcpprc/cmds HACMPDIR=/usr/es/sbin/cluster/utilities SVCPPRC_UTILS=/usr/es/sbin/cluster/svcpprc/utils SEP="~" user_name="" . $SVCPPRC_UTILS/svcpprc_lib export PATH=$PATH:$HACMPDIR:$CMDSDIR:$SVCPPRC_UTILS remove_dup_paths [[ $Debug_level -ge $Debug_low ]] && set -x [[ $Debug_level -ge $Debug_low ]] && version='1.20';export PS4='${PROGNAME}[${LINENO}] ' if [[ $# < 1 ]] then exit 1 fi notavpath="false" HDISK=" " VPATH=$1 lsvpcfgfile=$2 verifyPID=$$ TempDir=`GetHacmpOut`/svcpprc/verify if [ ! -d "$TempDir" ];then mkdir -p $TempDir fi if [ -z "$lsvpcfgfile" ];then lsvpcfgfile=$TempDir/vdisk.out$$ lsvpcfg -d 2145 > $TempDir/vdisk.out$$ 2>&1 fi echo $VPATH |grep "hdisk" >/dev/null if (($? == 0)) then # This is an HDISK notavpath="true" HDISK=$VPATH LUN_ID=$(clodmget -q"name=$HDISK AND attribute=lun_id" -f attribute -n CuAt) fi LocalNode=`$HACMPDIR/get_local_nodename` if [[ $3 != "" ]] then HOSTNAME=$3 LOCALSITE=`$HACMPDIR/cllssite -c |grep $HOSTNAME |cut -f1 -d":"` if [ "$LocalNode" != "$HOSTNAME" ];then rcmd="$HACMPDIR/cl_rsh $HOSTNAME" else rcmd="" fi if [[ $notavpath = "false" ]] ; then VPATHSERIALNUM=`awk '{ split($1,DISK); if ( DISK[1] == VPATH ) { TMPFS = FS; FS=")"; split($2,devid,"="); printf("%s\n", devid[1]); FS = TMPFS; } }' VPATH=$VPATH $lsvpcfgfile` else if [ -z "$LUN_ID" ] ; then VPATHSERIALNUM=`$rcmd odmget -q"name=$HDISK AND attribute=unique_id" CuAt | \ grep value |cut -d'"' -f2 |cut -c-10-41` else VPATHSERIALNUM=`$rcmd lscfg -vl $HDISK | awk '{ if ( /Serial Number/ ) { gsub("\\\."," "); printf("%s\n",$3); } }'` fi fi VDISKSNAME=" " LOCALSVC=`$CMDSDIR/cllssvc -aJ "$SEP" | awk 'FS="$SEP" { if ($3 == LOCALSITE ) { print $1; } }' LOCALSITE=$LOCALSITE` SVCIPADDR=`$CMDSDIR/cllssvc -n $LOCALSVC -hJ "$SEP" 2>/dev/null |cut -d"$SEP" -f4,8` user_name=$(echo $SVCIPADDR|cut -d"$SEP" -f2 2>/dev/null) SVCIPADDR=$(echo $SVCIPADDR|cut -d"$SEP" -f1 2>/dev/null) if [[ -z $SVCIPADDR ]] then continue else is_svc_reachable $SVCIPADDR $user_name>/dev/null SVCIPADDRrc=$? if [ $SVCIPADDRrc -eq 0 ];then HOSTONSVC=`cl_retry_ssh $user_name@$SVCIPADDR svcinfo lshost -delim : |\ awk 'FS=":" { if ( $2 == HOSTNAME ) { print $2; } }' HOSTNAME=$HOSTNAME ` if [ ! -f "$TempDir/${HOSTNAME}.${SVCIPADDR}.lshostvdisk.$$" ];then if [ -z "$LUN_ID" ] ; then cl_retry_ssh $user_name@$SVCIPADDR svcinfo lshostvdiskmap -delim : >\ "$TempDir/${HOSTNAME}.${SVCIPADDR}.lshostvdisk.$$" else cl_retry_ssh $user_name@$SVCIPADDR svcinfo lshostvdiskmap -delim : $HOSTNAME >\ "$TempDir/${HOSTNAME}.${SVCIPADDR}.lshostvdisk.$$" fi fi if [ -z "$VPATHSERIALNUM" ];then echo "Failed to get the Vdisks serial number" exit 1 fi VDISKNAME=`grep -w $VPATHSERIALNUM $TempDir/${HOSTNAME}.${SVCIPADDR}.lshostvdisk.$$ |cut -f5 -d":"|uniq` fi echo $VDISKNAME exit fi else if [[ $notavpath = "false" ]] ; then VPATHSERIALNUM=`awk '{ split($1,DISK); if ( DISK[1] == VPATH ) { TMPFS = FS; FS=")"; split($2,devid,"="); printf("%s\n", devid[1]); FS = TMPFS; } }' VPATH=$VPATH $lsvpcfgfile` else if [ -z "$LUN_ID" ] ; then VPATHSERIALNUM=`odmget -q"name=$HDISK AND attribute=unique_id" CuAt \ |grep value |cut -d'"' -f2 |cut -c-10-41` else VPATHSERIALNUM=`lscfg -vl $HDISK | awk '{ if ( /Serial Number/ ) { gsub("\\\."," "); printf("%s\n",$3); } }'` fi fi CLLSSVC=`$CMDSDIR/cllssvc` # make a list of the hostvdiskmaps from all the svc service ip's for SVC in $CLLSSVC; do SVCIPADDR=`$CMDSDIR/cllssvc -n $SVC -hJ "$SEP" 2>/dev/null |cut -d"$SEP" -f4,8` user_name=$(echo $SVCIPADDR|cut -d"$SEP" -f2 2>/dev/null) SVCIPADDR=$(echo $SVCIPADDR|cut -d"$SEP" -f1 2>/dev/null) if [[ -z $SVCIPADDR ]]; then # if there is no ipaddress there is no point in trying anything else continue else # make sure we have not already got this service ip hostvdiskmap. # we only want to get each src ip once since it will always be the # same. echo "$SVCIPADD_LIST" | grep -w "$SVCIPADDR" if [ $? -ne 0 ];then is_svc_reachable $SVCIPADDR $user_name >/dev/null SVCIPADDRrc=$? if [ $SVCIPADDRrc -eq 0 ];then SVCIPADD_LIST="$SVCIPADDR $SVCIPADD_LIST" cl_retry_ssh $user_name@$SVCIPADDR svcinfo lshostvdiskmap -delim : > \ "$TempDir/FullList.${SVCIPADDR}.$verifyPID" fi fi fi done for SVC in $CLLSSVC; do VDISKSNAME=" " SVCIPADDR=`$CMDSDIR/cllssvc -n $SVC -hJ "$SEP" 2>/dev/null |cut -d"$SEP" -f4` if [[ -z $SVCIPADDR ]]; then continue else for f in $VPATHSERIALNUM;do # striping out the leading and trailing spaces VPATHSERIALNUM=$f done if [ -z "$VPATHSERIALNUM" ];then echo "Failed to get the Vdisks serial number" exit 1 fi # prepending the letter "a" to both the passed in id as well as in the awk test # for argument 7. This is done because when the id happens to be all numeric and # it is very large it will be converted by awk to a floating point value. This is # fine as long as the passed in id is not larger then the specific system can handle # as a float. If it is then what happens it the id is truncated. If there is more # then one vdisk that has a similar id (only the least significant bits are different # then all those vdisks will match. By adding the letter "a" to the strings that # ensures that awk will never convert them to a float so they will be compared as # ascii strings and not a truncated float. VDISKSNAME=`awk 'FS=":" {if ( "a"$7 == id) { print $5; exit; } }' id=a$VPATHSERIALNUM $TempDir/FullList.${SVCIPADDR}.$verifyPID` if [[ -n $VDISKSNAME ]]; then VPATHTOVDISKSNAME=$VDISKSNAME break fi fi done fi echo $VPATHTOVDISKSNAME rm -f $TempDir/vdisk.out$$ for f in $SVCIPADD_LIST;do rm -f $TempDir/FullList.${f}.$verifyPID $TempDir/${HOSTNAME}.${f}.lshostvdisk.$$ done "$L kB-wFb֝ab&F./usr/es/sbin/cluster/svcpprc/utils/get_svc_cluster_ids#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/get_svc_cluster_id.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM PATH="$(/usr/es/sbin/cluster/utilities/cl_get_path all)" export PATH UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" # : Include useful utilities # . $UTILDIR/svcpprc_lib # COMPONENT_NAME: HACMP.SVCPPRC ############################################################################### # : Main # # This script checks if an svc cluster is reachable # using the passed IP addresses, if reachable # it prints either the cluster id of svc cluster # or the string "INVALID_SVC_CLUSTER_NAME" in case passed # svc cluster name is not found in svc machine # to standard output.If svc cluster is not # reachable it prints blank string. # INPUT: SVC cluster name # master ip address # auxillary ip address # OUTPUT: Always exits with exit status 0 # # prints svc cluster id if svc cluster # is reachable and cluster id is retrieved # # prints "INVALID_SVC_CLUSTER_NAME" if svc cluster # name is not found in svc machine # # prints empty string if svc cluster # is not reachable. # ############################################################################## # : Check for valid invocation # SEP="!" typeset user_name="" if (( $# <= 1 )) # no IP address given then exit 1 # not a valid request fi svc_cluster_name=$1 ip_address=$2 user_name=$3 secondry_ip_address=$4 # If user_name passed is equal to double quotes # then set the user_name as "admin". if [[ $user_name == "\"\"" ]];then user_name="admin" fi typeset ip_address_in_svc="" typeset svc_cluster_id="" typeset reachable_ip="" #Exporting HASSH_MAX_RETRIES and HASSH_RETRY_DELAY #which are used by cl_retry_ssh. Setting these #variables to a smaller value so that we can #reduce the wait time for the completion status #of ssh to SVC clusters. export HASSH_MAX_RETRIES=1 export HASSH_RETRY_DELAY=1 # check if master ip address is reachable # If reachable set svc cluster id. # If not reachable, check if secondary IP has # been passed and check if secondary IP is # reachable. if is_svc_reachable $ip_address $user_name >/dev/null 2>&1;then reachable_ip=$ip_address elif [[ -n $secondry_ip_address ]] && is_svc_reachable $secondry_ip_address $user_name >/dev/null 2>&1;then reachable_ip=$secondry_ip_address fi #Get the svc_cluster_id using the reachable ip address if [[ -n $reachable_ip ]];then SVC_detailed_info=$(cl_retry_ssh $user_name@$reachable_ip LC_ALL=C svcinfo lscluster -delim "$SEP" $svc_cluster_name) #If SVC_detailed_info is not empty we can get svc_cluster_id from it #else it means svc_cluster_name is not found in the SVC machine #reached using reachable_ip. if [[ -n $SVC_detailed_info ]];then echo $SVC_detailed_info|cut -d ' ' -f1|cut -d '!' -f2|read svc_cluster_id else svc_cluster_id="INVALID_SVC_CLUSTER_NAME" fi fi echo $svc_cluster_id exit 0 t l.w ^b֝ab&'9./usr/es/sbin/cluster/svcpprc/utils/svcpprc_get_disk_vg_fs   Saceinorst#$CENRT_fhp":=AGIMOPYdglmuy!-./DLUV[]kvw()019;Hbx,23\47?Fz|%'56BWXq*8>@J{}~j4()fCHj*HaBcGMi[yл(6 1jX)@^5 ^ 1yUcu J* Q[`8jYp1`pp8` iiiiiiiiiiiiiiiiiiii<DQADi$z sMiOLy\/KRi4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M54M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M5kM%׬+RVPHi Y/yRbZV {#d$xD);օDRV 7>E -c0֚XJ`"V7P"Ua5c1ŭނXJ JjYK AA"JjYK Au-w 3 ic YK AEL- .dYHc}@fe,%׬V D+5c1ҍVvb7`*5EV?5iiiiiiiiiiiiiiiiii"9p5@ b  XůJ5ǒ$<0,zCB`%01kơVF/"HGyH`Tl`d-x*P]z*XSH QU+fC) pq$z U kb ^Hj`,Y<$P51cs$I#<[ǤĽC + r 8z#1KH±hͿkģ[J  dwXrcS p;ZkEJP/kMiQp&'PrDg>xrZD8zh( 8g [o/j^# iK.^p`Ga(.`|P[LNW[]yx5 f+8DG"4)5tc\N<>,#ޝ֎+p+^3havѧ<9z(4,-!CPh``y"IjcǤXJ Jj8({Aɨ9"X AACh\ţ^o/e CWh_<+ C"@%-7Àcu,% Z5Ro/"YOLxr 88PhXZ@f^VRPR|x0spq$аZ5Ro/aE"$36Fm5e-ޛ g~ZV . oo 7Fma`|Kc~SV.ʓ>J);J׌g+Z]5^Q5ћX+9ar!IVZ/Y}LkƹǑEܚMAk˭gk1Y5kEgkX5VMkWpq$0f(א@Ae֌J X(&\Zs"4<%“xBʵ\ ά10>5ћX+9aע);J+U"4<$3FmcƦဏkWsg % =ް'iZj+ ES9wqQp&'PrDhͬc?A%(b D4h`@Ac?f1LjagKI\9@/.!IVZ>y\=ɠ&ћX1`!c?՗bnĵɍL5-7tWpqfWLYc2VES#<5BxZ]x5浟uxW8({Aɨ9"\y\=ɠ%k?ReS<);Skw]c _*dv_1p*Q'+6^0zkES-gg$<ԉb׍Eb g֌\9@/.zkǑEܚMAhͿWsg % =ް'iZjd]3} ҰqQp&'PrDu61`!ɿɭgKI\ecn>z`E V @tc\N<s <_a(]w);J+UiXG^.˾׍s"4<$3Fmc?A%(b D4h`@Ac.f1LjadKI\9@/.!IVZ>y\=ɠ&ћX1`!cXd,3)E{ BW1g2׬F ykX 5'iZԱjrQ(IVgu,fpZfֳ[w=<.DjH+gErh"y5$IG&54u"臭8#+/)e1:Džk?ReS8qIXG -ZW^P",gD%5x~q$<f(xV hk%p|8yP#NWՄ);J+U"臭x8({Aɨ9"Mc.f3J yPi"0f(CF 6Z3k&50 ĴY BﰏkzkCǑEܚMAku6rcS pCXd1Y5ɬIVgu!Ee@5uxW8({Aɨ9"\y\=ɠ%oZ:wRVmmi GV2exˆ_х&Q3y[|!Z@եz)2qDB[kI!O.^57Fmc$ J}{^+\WF<.DjHX˭rcS pGi+9a}oXBr_Vp"臭x8({Aɨ9"Mc.f3J yPi"0f(CF hͬc\0kWsg % =ERvV#kgErh"y5$Ig֌1ɍL5 c?ՓXddP)kY"2fֳ[w=<.DjH+gErh"y5$IG&54lMi[^%;]Y-K}LilI3mjeyOVES=hZ!-gI b3c82[}c ahҸexˆ浟Wsg % =ް'iZj+ ES9wqQp&'PrDrcS pCYP)dʨRV'8(k?k?ű}\ȢMO&rqQp&'PrDrcSA֎*arOҶ+^GJ%yRvZK}'iZ :0ybܧh"艹-)ȱmWXJu "؍8Rjȩ-i G6^R%xۥ{^l1;ȷuϼ;-%daB NqSyWa8Yפpk?ű(}Ii/ȱn|+ʓM ħk k?Űm߽:}oh+^3hap1ֳJp,}wG[+\Wa!zȻg.^5<.DjHYu6,{-J X H'q$DiS*/Mh+^3ha|-ݯE׉M){ȡiL%hRs/ QǑEܚMA0/bE Au>$ ☚{ĺN[@u;Ǖ/*֕N1uw̦4730/bE Au>$ ☚ҍbV0'"ŵ'(GV ~-)$ ,{-J X H'֏ Nҵ8ֆI0>Pb2:Ħv' -;{Ǖ()!(Ԭg3ĵ0/bE Au>$ $ȍ 5“xr&v^%7̦&v1FTbz}o Lb<.DjHY5rcS p;X 5IVgu JФ^%gg:z+y\=ɠ.V<.DjHLjh5浟,{-L|GHF@^A0ܧxJ3>V 1*Ġ881YĒ"9k?ܘ\0Mk!IVgu JФ^%gg:z+y\=ɠ.V<.DjHLjh5浟WIȇ OLyq1D40V hͬckgKI\s <_a(]z/XBr_|![8({Aɨ9"^2Fmc?ܘ\01Y5ɬD2k?k?ű}\ȢMO&rqQp&'PrDrcSA֕]I3uJ6LNҵ8VN>hk?ŰNҵ8V֔}J%yRvZK|kFp:tѮeǔեKӲ ߕJbkF{;J׌gZ][VUV/JAJbkF}֎kD*NI~VPJwY-Z9kp3 /҂hZ:Q,ʓ]daBuz+hv:0KYkYR˗\"J X8q$Di3-wD;ʓnJ3I"#AɍL5 `(kbZJC@)C\ (題D8zh(b ћobj WhLdXS8qIXGVIVg9ZǑEܚMAo![>)}֏ Nҵ8ֆw 6qQp&'PrDrcSAs"4<$ֲS'iZԵ(k?k?ű}\ȢMO&rqQp&'PrDrcSA֕[ NqSxd]3Y-ҽbSxQb֎“(ntB6ح+WZ5 uHFz`x k?k?I!O3XYu?I\9@/.zkBwȢMO&{X˭rcS pCXdĴ$<ԉb׍Eb g֌I\9@/.zkBwȢMO&5ћX&50 5VMgk@);J׌(L5]Es"4<%ǑEܚMAQɍM[ZVm)9N}rUw+o#kHZ-g+JoLNqDpaZ; Lg['K#kHZ:]h'Dhbe8Qs2_1cƳ[ ES=0RyO]zЭck浌x~q$<`Qw@Ae֌\s <_a(]w);J+U"艹B#y\=ɠ&hͿLjaookYW$R'.^55Z3kWpq$3\kV 3fY Bﰏa9^ V+\WwErh"y5$IÀCV8ћo=bRzu1Xa9^ ru~FXe%2|}%' >ǒx>ywſϾ^3 o9@/.zkBw]k+J9ǑEܚMAo`0+@Ն0ffhͿ__1;ȷu}݌ V F Au+k]qQp&'PrDRvK' %p(:  |RvK' 7zNrxRvV0op,}wGRvV ES;s"4<$a!ɿɿɿWs ffhͿWIȇ OLyq1D40V ɍL5vĴY BﰏkzkCǑEܚMAo֌Ʀဆ&&Wpq$0f(א@Agh͌c\9@/.!IVZ>y\=ɠ&ћX1`#2% J}{]a Nҵ|!ZVwErh"y5$Ic.f1\s <_a(]z/XBr_|![8({Aɨ9"Mc?f3ɍL5 c?Փ&Y5c@(ZS*k?k?ű}\ȢMO&rqQp&'PrDrcSA֕[ NqSxƘȴS9IXFƯWd]3օaf#;3)u;+W<(KYkY%p|8yP#RvV Ұd]378({Aɨ9"Mg֌91`!VM`(ֲE JeT)+Bax5浟qQp&'PrD[8({Aɨ9"J91bkGna尹XFܧi[Yuϼ;-%W>xZlZ_}cnSrUwZXB+߬^Sq:Dž lF)5dT_yR{y Jy[^}ZW)ѼmҽEg[҉gT20xۅ'8)0mS hؔK>촗XzvINqSx6uޝckxRvV0O\9@/.zkB#/Y}L0 <.DjHYu6,{-J X H'q$DiS*/Mh+^3ha|-ݯE׉M){ȡiL%hRs/ QǑEܚMA0/bE Au>$ Z;x^6~W}_"(uX:eZҲ\3rUwƘ`&bZWa(.`A WkGJ69Z֠D\Z*L&bWa(.`A SZ<);J׌g+Z_'8-C`ڔk֐0{ӌbkVLR"SY֋X–\%׬`H$8DG"4֏ Nҵ8ֆ؛]x2!YS]J38({Aɨ9"BdֳɍL5`(ֲS'iZ)+Bax5浟qQp&'PrD[8({Aɨ9"J91Wv0}I"#AyrQ([@,īLgHFArcS pCX 5“xI0JZluxW8({Aɨ9"\y\=ɠ%k?k?A%(b D4h`@Ck?f1ɍL5vgKI\wbSZ3ߟIVg8gJڲ±}P'~V SZ3ue[_J%yRvZK"SlϤ+^3uha}֔פ~GxW҉gTg# }^G>xqաZZ\P]z&$Dr#H / ynSj%T+ubP I5Ljak@ fֳ[w=<.DjH+gErh"y5$IG&54Z\P]z&$Dr#H / ynSj%T+ubP I5Ljak@χɭnbrcS s@  ka/w/b֝ab&/./usr/es/sbin/cluster/svcpprc/utils/svcpprc_join_cleanups#!/bin/ksh # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_join_cleanup.sh 1.20.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_join_cleanup.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ################################################################## # svcpprc_join_cleanup.sh # # Determines ESS action strings from the parameters passed to it # # Inputs # svcpprc_join_cleanup # # Returns: # action_string ############################################################ PROGNAME=${0##*/} PATH=$PATH:/usr/es/sbin/cluster/events/utils:/usr/es/sbin/cluster/utilities UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" PPRCCMDSDIR="/usr/es/sbin/cluster/svcpprc/cmds" SVCPPRC_UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" HADIR="/usr/es/sbin/cluster/utilities" EVENTDIR="/usr/es/sbin/cluster/events/utils" CMDAPI="$HADIR/cmdapi" SEP="~" user_name="" . $SVCPPRC_UTILDIR/svcpprc_lib [[ "$VERBOSE_LOGGING" = "high" ]] && set -x [[ "$VERBOSE_LOGGING" = "high" ]] && version='@(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_join_cleanup.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' STATUS=0 echo LOCALSITENAME=$LOCALSITENAME echo LOCALNODENAME=$LOCALNODENAME echo SIBLING_ACQUIRING_NODES=$SIBLING_ACQUIRING_NODES echo GROUPNAME=$GROUPNAME NODENAME=$2 NODENAME_ACQUIRING_NODE=`echo $SIBLING_ACQUIRING_NODES |grep -w $NODENAME` OWNERNODE=`$HADIR/clRGinfo -s $GROUPNAME |grep -v SECONDARY |grep ONLINE |cut -f3 -d":"` if [[ -z "$NODENAME_ACQUIRING_NODE" || "$LOCALNODENAME" != "$OWNERNODE" ]] ; then exit 0 fi LocalNode=`$HADIR/get_local_nodename` ISSVCPPRCRESOURCEGRP=`$HADIR/cllsres -g $GROUPNAME |grep SVCPPRC_REP_RESOURCE |cut -f2 -d'"'` if [[ -z $ISSVCPPRCRESOURCEGRP ]] then exit $STATUS fi HacmpOut=`GetHacmpOut`/hacmp.out VOLUMEGROUPS="" VOLUMEGROUPS=$(clodmget -q"group=$GROUPNAME AND name like '*VOLUME_GROUP'" -f value -n HACMPresource) if [[ -z $VOLUMEGROUPS ]] then FILE_SYSTEMS=$(clodmget -q"group=$GROUPNAME AND name=FILESYSTEM" -f value -n HACMPresource) if [[ -z $FILE_SYSTEMS ]] then dspmsg -s 3 svcpprc.cat 75 "No Volume Group nor Filesystem exists for $GROUPNAME.\n" $GROUPNAME exit 0 fi for fs in $FILE_SYSTEMS do VOLUMEGROUPS="$VOLUMEGROUPS $($EVENTDIR/cl_fs2disk -v $fs)" done fi # Deal with disk reservation on the remote node for VG in $VOLUMEGROUPS do for node in `$HADIR/cllsnode -cS | cut -f1 -d":"` do if [[ $node = $LOCALNODENAME ]]; then continue fi if [ "$LocalNode" != "$node" ];then rcmd="cl_rsh $node" else rmcd="" fi VG_ONLINE=`$rcmd lsvg -o |grep -v root |grep -w $VG 2>/dev/null` if [[ -n "$VG_ONLINE" ]]; then # Verify Filesystem is still mounted at the remote site. VG_FS=$($rcmd lsvg -l $VG | awk '$2 ~ /jfs2*$/ && $7 ~ /^\// {print $7}' 2>/dev/null) for FS in $VG_FS; do lv=$($rcmd lsfs -c "$FS" | tail -1 | cut -d: -f2 | cut -c6- 2>/dev/null) $rcmd $CMDAPI mount | awk '{ print $1 }' | fgrep -s -x "/dev/$lv" 2>>$HacmpOut if [ $? -eq 0 ]; then # This file is still mounted; $rcmd $CMDAPI fuser -k -u -x /dev/$lv 2>>$HacmpOut $rcmd $CMDAPI umount $FS 2>>$HacmpOut else continue fi done # Varyoff the Volume Group # rsh $node /usr/sbin/varyonvg -b -u $VG 2>/dev/null #$rcmd /usr/sbin/varyoffvg $VG 2>/dev/null $rcmd $CMDAPI varyoffvg $VG 2>>$HacmpOut # Handle disk reservation and ghost disks # rsh $node $EVENTDIR/cl_disk_available $HDISK 2>/dev/null NODE_SITE=$($HADIR/cllssite -c -n| grep -v "#nodename" | \ grep -w $node |cut -f2 -d":") if [[ $NODE_SITE != $LOCALSITENAME ]] then HDISK=`$rcmd $EVENTDIR/cl_fs2disk -pg $VG` HDISK=$(echo $HDISK | tr ' ' '\n' | sort -u) echo $HDISK | grep "vpath" > /dev/null if (($? == 0)) then $rcmd $EVENTDIR/cl_disk_available $HDISK 2>/dev/null for disk in $HDISK do #$rcmd /usr/sbin/lquerypr -rh /dev/$disk $rcmd $CMDAPI lquerypr -rh /dev/$disk done else $rcmd $EVENTDIR/cl_disk_available $HDISK 2>/dev/null fi fi fi done # for node done # for VG in VOLUMEGROUPS CONSISTENCYGRPS=`$HADIR/cllsres -g $GROUPNAME 2>/dev/null|grep SVCPPRC_REP_RESOURCE |cut -f2 -d'"'` for CONSISTENCYGRP in $CONSISTENCYGRPS do SVCIPADDR=$(LC_ALL=C $SVCPPRC_UTILDIR/cl_svc_info $CONSISTENCYGRP |cut -f2 -d"=") #Getting user name to ssh svc storage from HACMPsvc ODM. user_name=$(get_svc_user_name -i $SVCIPADDR) is_svc_reachable $SVCIPADDR $user_name > /dev/null if [ $? -eq 0 ];then SSHCMD="cl_retry_ssh $user_name@$SVCIPADDR" else unset SSHCMD dspmsg -s 3 svcpprc.cat 100 "$PROGNAME: service ip is not available" $PROGNAME exit 1 fi SVCINFOCMDRESULT=`$SSHCMD svcinfo lsrcconsistgrp -delim : |grep -w $CONSISTENCYGRP` CONSISTENCYGRPSTATE=`echo $SVCINFOCMDRESULT |cut -f8 -d":"` PRIMARY=`echo $SVCINFOCMDRESULT |cut -f7 -d":"` MASTERSVCCLUSTER=`echo $SVCINFOCMDRESULT |cut -f4 -d":"` AUXSVCCLUSTER=`echo $SVCINFOCMDRESULT |cut -f6 -d":"` MASTERCLUSTERSITE=`$PPRCCMDSDIR/cllssvc -n $MASTERSVCCLUSTER -hJ "$SEP" |cut -d"$SEP" -f3` AUXCLUSTERSITE=`$PPRCCMDSDIR/cllssvc -n $AUXSVCCLUSTER -hJ "$SEP" | cut -d"$SEP" -f3` if [[ "$MASTERCLUSTERSITE" = "$LOCALSITENAME" ]] then # If I am at the HACMP site with the Master Vdisk for this Consistency Group dspmsg -s 3 svcpprc.cat 135 "I am attached to the Master VDisk for this consistency group $CONSISTENCYGRP.\n" $CONSISTENCYGRP case $CONSISTENCYGRPSTATE in inconsistent_stopped) # This is a connected state. The Primary is # accessible accessible for read and write # I/O but the Secondary is not accessible # for either. A copy process needs to # be started to if [[ "$PRIMARY" = "master" ]] then $SSHCMD svctask startrcconsistgrp -primary master $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else # The Primary is accessible but do we want to allow I?O dspmsg -s 3 svcpprc.cat 65 "$PROGNAME: The Consistency Group $CONSISTENCYGRP is in an inconsistent state. Exiting!!\n" $PROGNAME $CONSISTENCYGRP STATUS=1 exit $STATUS fi elif [[ "$PRIMARY" = "aux" ]] then $SSHCMD svctask startrcconsistgrp -primary master $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi fi;; consistent_stopped) # The secondary contains a consistent # image but it might be out-of-date with # respect to primary CONGRPSYNCSTATE=`$SSHCMD svcinfo lsrcconsistgrp -delim : $CONSISTENCYGRP |awk 'FS=":" { if ($1 ~/^status/ || $1 ~/^sync/) {print $2}}'` ONLINE_STATUS=`echo $CONGRPSYNCSTATE |awk '{print $1}'` SYNC_STATUS=`echo $CONGRPSYNCSTATE |awk '{print $2}'` if [[ "$PRIMARY" = "master" ]] then if [[ "$ONLINE_STATUS" = "online" ]] ; then if [[ "$SYNC_STATUS" = "in_sync" ]] then $SSHCMD svctask startrcconsistgrp $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi else $SSHCMD svctask startrcconsistgrp -force $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi fi fi elif [[ "$PRIMARY" = "aux" ]] then if [[ "$ONLINE_STATUS" = "online" ]] then $SSHCMD svctask switchrcconsistgrp -primary master $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi fi fi;; idling) # This is a connected state # Both Master and Auxiliary disks are # operating in the Primary role. # Consequently both are accessible for write I/O. $SSHCMD svctask startrcconsistgrp -force -primary master $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi ;; *) STATUS=0 continue ;; esac elif [[ "$AUXCLUSTERSITE" = "$LOCALSITENAME" ]] then # If I am at the HACMP site with the Auxillary Vdisk for this Consistency Group case $CONSISTENCYGRPSTATE in inconsistent_stopped) # This is a connected state. The Primary is # accessible accessible for read and write # I/O but the Secondary is not accessible for # either. A copy process needs to # be started. if [[ "$PRIMARY" = "aux" ]] then $SSHCMD svctask startrcconsistgrp $CONSISTENCYGRP if(( $?!=0 )) then STATUS=1 exit $STATUS fi elif [[ "$PRIMARY" = "master" ]] then $SSHCMD svctask switchrcconsistgrp -primary aux $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi fi;; consistent_stopped) # The secondary contains a consistent # image but it might be out-of-date with # respect to primary CONGRPSYNCSTATE=`$SSHCMD svcinfo lsrcconsistgrp -delim : $CONSISTENCYGRP |awk 'FS=":" { if ($1 ~/^status/ || $1 ~/^sync/) {print $2}}'` ONLINE_STATUS=`echo $CONGRPSYNCSTATE |awk '{print $1}'` SYNC_STATUS=`echo $CONGRPSYNCSTATE |awk '{print $2}'` SVCSTATUS=`$SSHCMD svcinfo lsrcconsistgrp -delim : $CONSISTENCYGRP |grep status |cut -d":" -f2` if [[ "$PRIMARY" = "aux" ]] then if [[ "$ONLINE_STATUS" = "online" ]] ; then if [[ "$SYNC_STATUS" = "in_sync" ]] then $SSHCMD svctask startrcconsistgrp $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi else $SSHCMD svctask startrcconsistgrp -force $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi fi fi elif [[ "$PRIMARY" = "master" ]] then if [[ "$SVCSTATUS" = "online" ]] then $SSHCMD svctask switchrcconsistgrp -primary aux $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi fi fi;; idling) # This is a connected state # Both Master and Auxiliary disks are # operating in the Primary role. # Consequently both are accessible for write I/O. $SSHCMD svctask startrcconsistgrp -force -primary aux $CONSISTENCYGRP if(( $?==0 )) then STATUS=0 continue else STATUS=1 exit $STATUS fi ;; *) STATUS=0 exit $STATUS ;; esac fi done # CONSISTENCYGRP exit $STATUS  l[0w=Qb֝ab&8'./usr/es/sbin/cluster/svcpprc/utils/svcpprc_lib   # eitaflnors"0=cdghmpu$(),.1:AEGMNOPRS[_vwy&-;CDILT]bk{}%+/234 ?QXY|Hq1@p@HS@9M2K4V5)0'T?SIK6 ԍB$ FăƃIH`$ }&,-5:>$  Ł!O*802.baObv'5 ZsZfxZFe&DJD A.D, ,j I2V3&kLLt = D0xxSx=ւk)5II IN8O+M0VR*kV =:'AV`Apj@ֱ >̦qSIb N E#$ xXTS5:>#IAN2ړ e#,*YPå =kBU<&z)ItRa6$?F#D,"R4cih8`>p GB<7BY0( @(L2@Ba& 6,2Ԭ+ŠWϴ,Ȥ9DP\]ZYq1`l$z$aW5,d INb4уBiB褺YuE^\Ԓ4|=^,d INJ,2 R m.bjI?ic[I[W.kIbUY.. 18:"V&{ڍ52֖Hf-0jiE(c$AvA1iv8nW@ZXI$`D,$F" WU"2)]a!c%jLZ`p6W IHԯ&%碈MSv5洙eP. .&Rb`8 +t0`֖I#G%00kK $a0l(@)nWLP-_xEƠQP0kKVz˭EkWm,4Q ,֬ f-, ije<5ڌ52mEŀ@<ciD("Ip:5H`J@l(1Bk(0kK #%5HAjU_(Yr洙i"^˴ZXI$5X% ș@lx\+ZT"V5$k5"e,,psI>6UªWUo0'Yqe ɉ$y-iek)bjt2,ZY8 0{Im2 Yt -*'VRbӱ K.jI?M9_@I54U KQВ`40Ycae ɉ$q+9 ZYt=5$:Q$R%" @pŠE(eQ]a!c%jLZ`8l(aȲdž idĒHl(1Bk(0kK # Yc ªªt2,ZX D$HaE,d INJ,d INjC"5I!0% @7 +"Me iac%jLZa(dž idĒHl-_UU,x`֖Q2BDAjW [$Dm,4Q -=Yȥ J $,d IL `Q ,6HŠ$pa1b(P`֖`D4ªª$pa@h-XT5$@,YcdRS26%*8r)5|(镱 HZSH1c"Bt=idL02.(,$*'MmYQIgieY55؜dhkVu,`d\PXHTN<τ2Y550J` #a:Xȸe1$0jF؜[HZYhRYSR(zNԖzMaxXȸy .e)#Iʤ 9JQg,` @ &X ediU9ȥHdC,zԍA3kAO.TIsJYKQkN4a؄S&`DR8>Z1brhZMB<Ɩ3P)HDCˠ4~RdUi0㖒l& 'D8`tJIi&I,OSG@X&҅PQ_04DAAU&H,1d# ( 4x'5(Lh`XtH:@Dj"BŠ0mcUU"c  UE$z*Cl(a%@5_WN `E_W֯ +LAHɈ " *W a"B+g =hi`!!zkWQ_! 皛I+*y5_EȤI$ L 8 1 &"@:@N  DWU_=5E H@ a$p0i2b$WU_RLAHH+E @`ŠaHU WQ_Ã$Jj(z`"H -_R $`$ $HLAHɐ"A_U+LAHɐ " zkWÃ@ UWI`A$,X pI42H+* 1 &"@:$6**NRDAdh" ȤBHpQ_80&X0HmH"@45_EÉ"$tIUWMj +" ĈI" $\֓,$6q$U\G,$6jpaRDULI6$6pZʒ"ċeH$H@5_2MHp WMj,H˒.kI  DjparDULI6>ZI"*a$HB   <1à $F ! WN `E_=5pabD !0i 2b$zkA6CUa& Ӥ@dHGԯ80"D`MbI41aLAHɈ*W a"HA RDa& Ӥ@dDWMvX"0H&D WN ]$H $Ua& Ӥ@dG]0$U0i 2dªYà DCUW *H$`j$t *Yà $F   1 &"@:+g .H$`j$t zkLAHɈ*W *H$a"HLAHɐ "80"D`M  1 &@:+g .H$a"HLAHɐg a"HLAHɐ* g .y"ECUWA WQ_b :@DɠBURªU+*aW %B*ie)!WMjY2 WKiWRP&"覻a iB)Jwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwu:4~q -H]FeY=vI%KF)PE~ laSj҃~2I*2Q$ɭ4!%MaRZG@X&81Ėi2ƄZWae ƀe̘Zu{–'AKbfSYKQ,a;LM#E*>,M^ɚe5F“a؄ja:4XMsZIFC[D("IsN9dڲ!if'&jk>>> The following command was not executed \n" echo "$SVCPPRCUTILDIR/svcpprc_release_disk_vg_fs $CONSISTENCYGROUP $LOCALSITENAME" # $SVCPPRCUTILDIR/svcpprc_release_disk_vg_fs $CONSISTENCYGROUP $LOCALSITENAME else $SVCPPRCUTILDIR/svcpprc_release_disk_vg_fs $CONSISTENCYGROUP $LOCALSITENAME if (($? != 0)) then dspmsg -s 3 svcpprc.cat 145 "$PROGNAME: svcpprc_release_disk_vg_fs execution failed. Exiting.\n" $PROGNAME ((STATUS=STATUS+1)) exit $STATUS fi fi done # for VG fi exit $STATUS _fs k2w%b֝ab&%./usr/es/sbin/cluster/svcpprc/utils/svcpprc_predisk_available#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_predisk_available.sh 1.33.1.3 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2014 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_predisk_available.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ######################################################################### # # COMPONENT_NAME: HACMP.SVCPPRC # # FUNCTIONS: none # ######################################################################### ######################################################################### # # # Name: svcpprc_predisk_available # # # # Description: This script is called from get_disk_vg_fs # # program to activate a eRCMF controlled disk. # # # # Called by: get_disk_vg_fs program # # # # Calls to: svcpprc_get_disk_vg_fs # # # # Returns: 0 success # # 1 failure # # # ######################################################################### PROGNAME=${0##*/} HAUTILDIR="/usr/es/sbin/cluster/utilities" SVCPPRCFUTILDIR="/usr/es/sbin/cluster/svcpprc/utils" SVCPPRCCMDSDIR="/usr/es/sbin/cluster/svcpprc/cmds" ODMDIR=/etc/es/objrepos export PATH=$PATH:$HAUTILDIR:$SVCPPRCFUTILDIR:$SVCPPRCCMDSDIR SEP="~" # export FLASHCOPY_USER_EXIT=true integer STATUS=0 if [[ $VERBOSE_LOGGING == high ]] then set -x fi echo PRINCIPAL_ACTION=$PRINCIPAL_ACTION if [[ $PRINCIPAL_ACTION != "ACQUIRE" ]] then # If the Resource Group is not to be acquired we do nothing dspmsg -s 3 svcpprc.cat 140 "No action on SVCPPRC-controlled disk.\n" ((STATUS = STATUS + 3)) exit $STATUS fi LogUserAction () { set -A Sites $($SVCPPRCCMDSDIR/cllssvc -haJ "$SEP"|cut -f4,8 -d "$SEP") echo ${Sites[0]}|tr $SEP ' '|read site0 site0_user echo ${Sites[1]}|tr $SEP ' '|read site1 site1_user cat << EOF RECOMMENDED USER ACTIONS: We are at this stage because both HACMP and SVC links are DOWN (scenario (b)). It is the responsibility of the user to check if the production site is active or down STEP 1: Verify if HACMP Production site nodes are UP or DOWN STEP 2: Verify if Production site SVC is UP or DOWN Case 1) Production site SVC and HACMP nodes are both DOWN. STEP 3: On the SVC GUI, check the states of the SVC consistency groups If the consistency groups at the remote site are in "consistent_disconnected" state, Select the consistency groups and run the "stoprcconsistgrp -access" command against them to enable I/O to the backup VDisks. EOF for f in $CONSISTENCYGRPS;do cat << EOF ssh -n $site0_user@$site0 svctask stoprcconsistgrp -access $f EOF done cat << EOF NOTE:If the consistency groups are in any other state please consult the IBM Storage Systems SVC documentation for what further instructions are needed STEP 4: Wait until the consistency groups state is "idling_disconnected" STEP 5: Using smitty hacmp select the node you want the RG to be online at. smitty hacmp -> System Management (C-SPOC) -> HACMP Resource Group and Application Management -> Bring a Resource Group Online for the node where you want the RG to come online Once this completes the RG should be online on the selected site. Case 2) If Production site SVC cluster and HACMP nodes are both UP. STEP 3: On the SVC GUI, check the states of the SVC consistency groups If the consistency groups at the remote site are in "consistent_disconnected" state, Select the consistency groups and run the "stoprcconsistgrp -access" command. EOF for f in $CONSISTENCYGRPS;do cat << EOF ssh -n $site0_user@$site0 svctask stoprcconsistgrp -access $f EOF done cat << EOF NOTE: If the consistency groups are in any other state, please consult the IBM Storage Systems SVC documentation for what further actions are needed Wait until the consistency groups state is "idling_disconnected" you can check them with the following command. EOF for f in $CONSISTENCYGRPS;do cat << EOF ssh -n $site0_user@$site0 svcinfo lsrcconsistgrp -delim : $f ssh -n $site1_user@$site1 svcinfo lsrcconsistgrp -delim : $f EOF done cat << EOF STEP 4: Check and re-connect all physical links (HACMP and SVC links). On the SVC GUI, check the states of the SVC consistency groups If the consistency groups are in "idling" state, determine which HACMP site that the RG should be coming online. Once you do that run /usr/es/sbin/cluster/svcpprc/cmds/cllssvc -ah EOF /usr/es/sbin/cluster/svcpprc/cmds/cllssvc -ah cat << EOF so if you want the RG's online on the secondary site you would pick $site1 which is the auxiliary So next run this command for all the Consistancy groups so we restart them in the correct direction. This example is to use the aux site.. however if you wanted to use the master site you should change -primary aux to be -primary master. EOF for f in $CONSISTENCYGRPS;do cat << EOF ssh -n $site0_user@$site0 svctask startrcconsistgrp -force -primary [ aux | master ] $f EOF done cat << EOF If the cluster links are not up we will get the error: CMMVC5975E The operation was not performed because the cluster partnership is not connected. NOTE: If the consistency groups are in any other state please consult the IBM Storage Systems SVC documentation for further instructions. STEP 5: Wait until the consistency groups state is "consistent_synchronized" or "inconsistent_copying". Run the following commands and check the consistency group state. EOF for f in $CONSISTENCYGRPS;do cat << EOF ssh -n $site0_user@$site0 svcinfo lsrcconsistgrp -delim : $f ssh -n $site1_user@$site1 svcinfo lsrcconsistgrp -delim : $f EOF done cat << EOF Sample output from one of the above commands: id:255 name:FVT_CG1 master_cluster_id:00000200648056E6 master_cluster_name:HACMPSVC1 aux_cluster_id:0000020061401C7A aux_cluster_name:HACMPSVC2 primary:aux state:consistent_synchronized relationship_count:1 freeze_time: status:online sync: copy_type:global RC_rel_id:98 RC_rel_name:FVT_REL1 Note: Be sure before you fix the connection from the primary HACMP to secondary HACMP site nodes that you make sure only one site is running HACMP with the resource groups online. If they both have the resources when the network connection is repaired one of the 2 sites will be halted. STEP 6: Using smitty hacmp select the node you want the RG to be online at. smitty hacmp -> System Management (C-SPOC) -> HACMP Resource Group and Application Management -> Bring a Resource Group Online for the node where you want the RG to come online Once this completes the RG should be online on the selected site. END RECOMMENDED USER ACTIONS: EOF } echo GROUPNAME=$GROUPNAME echo LOCALSITENAME=$LOCALSITENAME CONSISTENCY_GRPS=$(clodmget -q "group = $GROUPNAME and name = SVCPPRC_REP_RESOURCE" -f value -n HACMPresource) for CONSISTENCY_GRP in $CONSISTENCY_GRPS do dspmsg -s 3 svcpprc.cat 85 "Processing $CONSISTENCYGRP...\n" $CONSISTENCYGRP $SVCPPRCFUTILDIR/svcpprc_get_disk_vg_fs $CONSISTENCY_GRP $LOCALSITENAME rc=$? if (($rc == 0)) then continue elif (( $rc == 2 )) then LogUserAction dspmsg -s 3 svcpprc.cat 150 "$PROGNAME: svcpprc_get_disk_vg_fs execution failed. Exiting.\n" $PROGNAME ((STATUS = STATUS + 1)) break else dspmsg -s 3 svcpprc.cat 150 "$PROGNAME: svcpprc_get_disk_vg_fs execution failed. Exiting.\n" $PROGNAME ((STATUS = STATUS + 1)) break fi done # for CONSISTENCYGRP return $STATUS i kFp3wXb֝ab&X./usr/es/sbin/cluster/svcpprc/utils/svcpprc_prevg_offlineble#!/bin/ksh # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_prevg_offline.sh 1.2 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2005 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)25 1.2 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_prevg_offline.sh, hacmp.svcpprc, 61haes_r714 1/11/05 13:18:45 ######################################################################### # # COMPONENT_NAME: HACMP.PPRC # # FUNCTIONS: none # ######################################################################### ######################################################################### # # # Name: pprc_prevg_offline # # # # Description: This script is called from get_disk_vg_fs # # program to activate a PPRC controlled disk. # # # # Called by: release_vg_fs program # # # # # # Returns: 0 Varyoff the Volume Group # # # 3 Skip Varyoffvg # # # ######################################################################### PROGNAME=$(basename ${0}) UTIL_DIR="/usr/es/sbin/cluster/svcpprc/utils" SKIPVARYOFF=0 [[ "$VERBOSE_LOGGING" = "high" ]] && set -x [[ "$VERBOSE_LOGGING" = "high" ]] && version='1.2' echo PRINCIPAL_ACTION=$PRINCIPAL_ACTION exit $SKIPVARYOFF  k~[4wb֝ab&./usr/es/sbin/cluster/svcpprc/utils/svcpprc_prevg_onlineble#!/bin/ksh93 # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_prevg_online.sh 1.3.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2012 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#)26 1.3.1.1 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_prevg_online.sh, hacmp.svcpprc, 61haes_r714 12/14/12 05:01:23 ######################################################################### # # COMPONENT_NAME: HACMP.PPRC # # FUNCTIONS: none # ######################################################################### ######################################################################### # # # Name: svcpprc_prevg_online # # # # Description: This script is called from get_disk_vg_fs # # program to activate a PPRC controlled disk. # # # # Called by: get_disk_vg_fs program # # # # Calls to: svcpprc_get_disk_vg_fs # # # # Arguments: none # # # # Returns: 0 Varyon the Volume Group # # 3 Skip Varyonvg # # # ######################################################################### PROGNAME=${0##*/} SKIPVARYON=0 if [[ $VERBOSE_LOGGING == "high" ]] then set -x version='1.3.1.1' fi echo PRINCIPAL_ACTION=$PRINCIPAL_ACTION return $SKIPVARYON  kh5wb֝ab&./usr/es/sbin/cluster/svcpprc/utils/svcpprc_release_disk_vg_fs#!/bin/ksh # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_release_disk_vg_fs.sh 1.14.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_release_disk_vg_fs.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ############################################################################### # COMPONENT_NAME: PPRC_UTILS # # FUNCTIONS: rdsort # ######################################################################### ######################################################################### # # # Name: svcpprc_get_disk_vg_fs # # # # Description: This script makes PPRC-controlled disk(s) # # available # # # # Called by: get_disk_vg_fs # # # # Calls to: cl_svc_info, cl_svc_vg_info, cl_svcpprc_state, # # cl_svc_fullcopy, cl_execute_task, # # cl_svcpprc_fc_exit # # # # Returns: 0 success # # nonzero failure # # # ######################################################################### PROGNAME=$(basename ${0}) HA_DIR="/usr/es/sbin/cluster/utilities" SVCPPRC_UTILDIR="/usr/es/sbin/cluster/svcpprc/utils" SVCPPRC_CMDSDIR="/usr/es/sbin/cluster/svcpprc/cmds" export PATH=$PATH:$SVCPPRC_UTILDIR:$SVCPPRC_CMDSDIR ODMDIR=/etc/es/objrepos SEP="~" . $SVCPPRC_UTILDIR/svcpprc_lib [[ "$VERBOSE_LOGGING" = "high" ]] && set -x [[ "$VERBOSE_LOGGING" = "high" ]] && version='1.14.1.1' integer STATUS=0 CONSISTENCYGRP=$1 LOCALSITENAME=$2 FULLCOPY_NODE="" SVCIPADDR=$(LC_ALL=C $SVCPPRC_UTILDIR/cl_svc_info $CONSISTENCYGRP |cut -f2 -d"=") #Getting user name to ssh svc storage from HACMPsvc ODM. typeset user_name="" user_name=$(get_svc_user_name -i $SVCIPADDR) is_svc_reachable $SVCIPADDR $user_name >/dev/null if [ $? -eq 0 ];then SSHCMD="cl_retry_ssh $user_name@$SVCIPADDR" SVCINFOCMDRESULT=`$SSHCMD svcinfo lsrcconsistgrp -delim : |grep -w $CONSISTENCYGRP` else unset SSHCMD dspmsg -s 3 svcpprc.cat 100 "$PROGNAME: service ip is not available" $PROGNAME exit 1 fi CONSISTENCYGRPSTATE=`echo $SVCINFOCMDRESULT |cut -f8 -d":"` PRIMARY=`echo $SVCINFOCMDRESULT |cut -f7 -d":"` MASTERSVCCLUSTER=`echo $SVCINFOCMDRESULT |cut -f4 -d":"` AUXSVCCLUSTER=`echo $SVCINFOCMDRESULT |cut -f6 -d":"` MASTERCLUSTERSITE=`$SVCPPRC_CMDSDIR/cllssvc -n $MASTERSVCCLUSTER -J "$SEP"|grep -v "#SVCNAME" |cut -d"$SEP" -f3` AUXCLUSTERSITE=`$SVCPPRC_CMDSDIR/cllssvc -n $AUXSVCCLUSTER -J "$SEP" |grep -v "#SVCNAME" |cut -d"$SEP" -f3` if [ $MASTERCLUSTERSITE = $LOCALSITENAME ] then # If I am at the HACMP site with the Master Vdisk for this Consistency Group dspmsg -s 3 svcpprc.cat 90 "I am attached to the primary SVC for this consistency group $CONSISTENCYGRP.\n" $CONSISTENCYGRP case $CONSISTENCYGRPSTATE in inconsistent_copying) # This is a connected state. The Primary is accessible # for read and write I/O but the Secondary is # not accessible for either. Background copying # from primary to seconadry in pprogress. if [[ "$PRIMARY" = "master" ]] then svcpprc_wait4state $CONSISTENCYGRP consistent_synchronised rc=$? if [ $rc -eq 0 ];then $SSHCMD svctask switchrcconsistgrp -primary aux $CONSISTENCYGRP if(( $?!=0 )); then STATUS=1 exit $STATUS else STATUS=0 continue fi else exit $rc fi fi;; consistent_synchronized|consistent_synchronised) # The primary Vdisk is accessible for read and write I/O # The secondary Vdisk is accessible for read-only I/O. if [[ $PRIMARY = "master" ]] then $SSHCMD svctask switchrcconsistgrp -primary aux $CONSISTENCYGRP if(( $?!=0 )) then STATUS=1 exit $STATUS else STATUS=0 continue fi fi;; *) # Any Other state. Leave it alone continue;; esac elif [[ "$AUXCLUSTERSITE" = "$LOCALSITENAME" ]] then # If I am at the HACMP site with the Auxillary Vdisk for this Consistency Group case $CONSISTENCYGRPSTATE in inconsistent_copying) # This is a connected state. The Primary is accessible # for read and write I/O but the Secondary is # not accessible for either. Background copying # from primary to seconadry in pprogress. if [ $PRIMARY = "aux" ] then svcpprc_wait4state $CONSISTENCYGRP consistent_synchronised $SSHCMD svctask switchrcconsistgrp -primary master $CONSISTENCYGRP if(( $?!=0 )) then STATUS=1 exit $STATUS else STATUS=0 continue fi fi;; consistent_synchronized|consistent_synchronised) # The primary Vdisk is accessible for read and write I/O # The secondary Vdisk is accessible for read-only I/O. if [ $PRIMARY = "aux" ] then $SSHCMD svctask switchrcconsistgrp -primary master $CONSISTENCYGRP if(( $?!=0 )) then STATUS=1 exit $STATUS else STATUS=0 continue fi fi;; *) # Any other state. Leave me alone. esac fi exit $STATUS DRESU kR6wb֝ab&./usr/es/sbin/cluster/svcpprc/utils/svcpprc_wait4statek#!/bin/ksh93 # ALTRAN_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # Copyright (C) Altran ACT S.A.S. 2018,2019,2021. All rights reserved. # # ALTRAN_PROLOG_END_TAG # # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # 61haes_r714 src/43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_wait4state.sh 1.12.1.1 # # Licensed Materials - Property of IBM # # Restricted Materials of IBM # # COPYRIGHT International Business Machines Corp. 2004,2013 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # @(#) 7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_wait4state.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM ########################################################################### # # Name: svcpprc_wait4state # # Function: Waits for the synchronisation of all pairs in a volume # group to complete, and a given pair state to be achieved # # Input: 1. Consistency group name # 2. Desired state # # No validity checking is done # # Output: return code 0 if state was achieved # return code 1 if state was not achieved within timeout # return code 2 if the SVC could not be contacted # PROGNAME=${0##*/} [[ $VERBOSE_LOGGING == high ]] && set -x [[ $VERBOSE_LOGGING == high ]] && version='7d4c34b 43haes/usr/sbin/cluster/svcpprc/utils/svcpprc_wait4state.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM' # : Pick up the passed consistency group name and desired state # CONSISTENCY_GRP_NAME=$1 DESIRED_STATE=$2 SVCPPRC_UTILS_DIR="/usr/es/sbin/cluster/svcpprc/utils" export PATH=$PATH:$SVCPPRC_UTILS_DIR # : Timing constants # integer MaxSSHTry=120 # number of tries to SSH the SVC integer SSHWait=5 # seconds to wait between each SSH integer MaxSVCTry=120 # number of tries to see if the SVC has # reached the desired state integer SVCWait=10 # seconds to wait when SVC state does # not match desired value integer TotalSleep=0 # accumulated sleep time # : Include various useful utilities # . $SVCPPRC_UTILS_DIR/svcpprc_lib # : Determine the IP address of the SVC # SVC_IP_ADDR=$(LC_ALL=C cl_svc_info $CONSISTENCY_GRP_NAME | cut -f2 -d"=") # : Wait for the Desired State # dspmsg -s 3 svcpprc.cat 95 "$PROGNAME: Waiting on Consistency Group State $DESIRED_STATE.\n" $PROGNAME $DESIRED_STATE # : Try to contact the SVC via SSH, and then try to query its state # for (( SVCcount=0 ; SVCcount < MaxSVCTry ; SVCcount++ )) ; do # : Can we talk to the SVC # for (( SSHCount=0 ; SSHCount < MaxSSHTry ; SSHCount++ )) ; do # : See if the SVC will answer to SSH # #Getting user name to ssh svc storage from HACMPsvc ODM. typeset user_name="" user_name=$(get_svc_user_name -i $SVC_IP_ADDR) if is_svc_reachable $SVC_IP_ADDR $user_name > /dev/null then # : SVC answered to SSH. Now see what the state of consistency group $CONSISTENCY_GRP_NAME is # SVCPPRC_STATE=$(cl_retry_ssh $user_name@$SVC_IP_ADDR LC_ALL=C svcinfo lsrcconsistgrp -delim : $CONSISTENCY_GRP_NAME | grep state | cut -d":" -f2) # SVC supports both consistent_synchronized & consistent_synchronised cg states, # so, we better need to handle this here if [[ $DESIRED_STATE == $SVCPPRC_STATE ]] || \ [[ $DESIRED_STATE == @(consistent_synchronized|consistent_synchronised) && \ $SVCPPRC_STATE == @(consistent_synchronized|consistent_synchronised) ]] then # : Consistency group $CONSISTENCY_GRP_NAME is now in desired state $SVCPPRC_STATE : After $(( SVCcount + 1 )) queries to the SVC, $(( SVCcount * MaxSSHTry + SSHCount )) SSH attempts, and $TotalSleep sleep time # dspmsg -s 3 svcpprc.cat 100 "$PROGNAME: VolumeSet State $SVCPPRC_STATE is the same as the desired state $DESIRED_STATE.\n" $PROGNAME $SVCPPRC_STATE $DESIRED_STATE return 0 else # : The SVC is in $SVCPPR_STATE, which is not the state we want. Wait $SVCWait seconds and try again # sleep $SVCWait (( TotalSleep += SVCWait )) break fi else # : SVC did not respond to SSH # if (( $SSHCount < $MaxSSHTry -1 )) then # : Wait $SSHWait seconds and try again # sleep $SSHWait (( TotalSleep += SSHWait )) else # : The SVC did not respond to $MaxSSHTry SSH attempts. Give up : After $(( SVCcount + 1 )) queries to the SVC, $(( SVCcount * MaxSSHTry + SSHCount )) SSH attempts, and $TotalSleep sleep time # return 2 # SVC never responded to SSH fi fi done done # : Only get here when retries are exhausted : After $(( SVCcount + 1 )) queries to the SVC, $(( SVCcount * MaxSSHTry + SSHCount )) SSH attempts, and $TotalSleep sleep time # return 1 k%/sat 100 "$PROGNAME: VolumeSet State $SVCPPRC_STATE is the same as the desired state $DESIRED_STATE.\n" $PROGNAME $SVCPPRC_STATE $DESIRED_STATE return 0 else # : The SVC is in $SVCPPR_STATE, which is not the state we want. Wait $SVCWait seconds and try again # sleep $SVCWait (( TotalSleep += SVCWait )) break fi else # : SVC did not respond to SSH # if (( $SSHCount < $MaxSSHTry -1 )) then # : Wait $SSHWait seconds and try again # sleep $SSHWait (( TotalSleep += SSHWait )) else # : The SVC did not respond to $MaxSSHTry SSH attempts. Give up : After $(( SVCcount + 1 )) queries to the SVC, $(( SVCcount * MaxSSHTry + SSHCount )) SSH attempts, and $TotalSleep sleep time # return 2 # SVC never responded to SSH