From efefb2782fdde8e98fdeb6a785e8e25020e689b4 Mon Sep 17 00:00:00 2001 From: bossiel Date: Thu, 18 Feb 2010 14:45:56 +0000 Subject: [PATCH] - Remove all references to SMC complier (replaced by our own FSM implementation). - Change the win32 network transport to correctly handle "WSAECONNRESET" error (DGRAMS only). --- trunk/SMC_6_0_0/Smc.jar | Bin 380700 -> 0 bytes trunk/tinyNET/src/tnet_transport_win32.c | 10 +- .../include/tinysip/dialogs/tsip_dialog.h | 11 - .../tinysip/dialogs/tsip_dialog_message.h | 17 +- .../tinysip/smc/tsip_dialog_message_sm.h | 69 -- .../tinysip/smc/tsip_dialog_register_sm.h | 71 -- .../tinysip/smc/tsip_dialog_subscribe_sm.h | 73 -- .../include/tinysip/smc/tsip_transac_ict_sm.h | 42 -- .../include/tinysip/smc/tsip_transac_ist_sm.h | 42 -- .../tinysip/smc/tsip_transac_nict_sm.h | 62 -- .../tinysip/smc/tsip_transac_nist_sm.h | 58 -- .../tinysip/transactions/tsip_transac.h | 8 +- .../tinysip/transactions/tsip_transac_ict.h | 7 +- .../tinysip/transactions/tsip_transac_ist.h | 7 +- .../tinysip/transactions/tsip_transac_nict.h | 22 +- .../tinysip/transactions/tsip_transac_nist.h | 17 +- trunk/tinySIP/smc.bat | 25 - trunk/tinySIP/smc/tsip_dialog_message.sm | 145 ---- trunk/tinySIP/smc/tsip_dialog_register.sm | 204 ------ trunk/tinySIP/smc/tsip_dialog_subscribe.sm | 219 ------ trunk/tinySIP/smc/tsip_transac_ict.sm | 48 -- trunk/tinySIP/smc/tsip_transac_ist.sm | 48 -- trunk/tinySIP/smc/tsip_transac_nict.sm | 173 ----- trunk/tinySIP/smc/tsip_transac_nist.sm | 154 ----- trunk/tinySIP/src/dialogs/tsip_dialog.c | 3 - .../tinySIP/src/dialogs/tsip_dialog_message.c | 310 +++++++-- .../src/dialogs/tsip_dialog_register.client.c | 4 +- .../dialogs/tsip_dialog_subscribe.client.c | 6 +- .../tinySIP/src/smc/tsip_dialog_message_sm.c | 502 -------------- .../tinySIP/src/smc/tsip_dialog_register_sm.c | 574 ---------------- .../src/smc/tsip_dialog_subscribe_sm.c | 627 ------------------ trunk/tinySIP/src/smc/tsip_transac_ict_sm.c | 75 --- trunk/tinySIP/src/smc/tsip_transac_ist_sm.c | 75 --- trunk/tinySIP/src/smc/tsip_transac_nict_sm.c | 445 ------------- trunk/tinySIP/src/smc/tsip_transac_nist_sm.c | 353 ---------- trunk/tinySIP/src/transactions/tsip_transac.c | 6 +- .../src/transactions/tsip_transac_ict.c | 4 +- .../src/transactions/tsip_transac_ist.c | 4 +- .../src/transactions/tsip_transac_nict.c | 304 +++++++-- .../src/transactions/tsip_transac_nist.c | 247 +++++-- trunk/tinySIP/test/test/test_stack.h | 24 +- 41 files changed, 723 insertions(+), 4372 deletions(-) delete mode 100644 trunk/SMC_6_0_0/Smc.jar delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_dialog_message_sm.h delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_dialog_register_sm.h delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_dialog_subscribe_sm.h delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_transac_ict_sm.h delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_transac_ist_sm.h delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_transac_nict_sm.h delete mode 100644 trunk/tinySIP/include/tinysip/smc/tsip_transac_nist_sm.h delete mode 100644 trunk/tinySIP/smc.bat delete mode 100644 trunk/tinySIP/smc/tsip_dialog_message.sm delete mode 100644 trunk/tinySIP/smc/tsip_dialog_register.sm delete mode 100644 trunk/tinySIP/smc/tsip_dialog_subscribe.sm delete mode 100644 trunk/tinySIP/smc/tsip_transac_ict.sm delete mode 100644 trunk/tinySIP/smc/tsip_transac_ist.sm delete mode 100644 trunk/tinySIP/smc/tsip_transac_nict.sm delete mode 100644 trunk/tinySIP/smc/tsip_transac_nist.sm delete mode 100644 trunk/tinySIP/src/smc/tsip_dialog_message_sm.c delete mode 100644 trunk/tinySIP/src/smc/tsip_dialog_register_sm.c delete mode 100644 trunk/tinySIP/src/smc/tsip_dialog_subscribe_sm.c delete mode 100644 trunk/tinySIP/src/smc/tsip_transac_ict_sm.c delete mode 100644 trunk/tinySIP/src/smc/tsip_transac_ist_sm.c delete mode 100644 trunk/tinySIP/src/smc/tsip_transac_nict_sm.c delete mode 100644 trunk/tinySIP/src/smc/tsip_transac_nist_sm.c diff --git a/trunk/SMC_6_0_0/Smc.jar b/trunk/SMC_6_0_0/Smc.jar deleted file mode 100644 index 010f3b84a569c09f0d3da153b9652f13303ec32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380700 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≀Dz1XDA>2ofPh+6K~w|YQZhpoXuK^qNw z!agB|Tq}jhnZFl(WuEK8DM;Cfty+b#>)-yCTTo zuGy9py3L*Ts2?T15XT-im)C(Gv8dy+jZ73+S|=Uef$&cR=nowcPaYfX-;fF}R@H9# zLJqwp4`gtBQw0sAxe@8t3tTw(3I%-Z3E~3w-48%Ak`>bE~BEDCB+oqWa zYDxE~$W>#gqlv0gf^nt0JJJ01WaE-2yAFu!Lmp4k)vS0;TvXVdpoRdbAVfc@U8f|% z_gp#`sbaRlfnsYF8~h=r9JK}IDKv#^rx}pJms+0;u8{mUWA9p{e2a1y19M-|ZWubV zHw-+DC(`%hGY--*!y}?#9f-p0LUOo4sEqH*?z=CY3gb(u+#9>#X@E}pRS+67UrwvYE@cIgZkZXq6JGj-?iU3>%Hk70{lIybmkZD-}xa2 zO@Kv|`fOhdv+nNr^f_Mwj#46PM~U}}f_$`qkQXgz(N|KJS0$3Llv+u|jxQq2O5*K6 zcuTuMB9vF(1k#v_t$kbX>6u)P#W+V=o)ddv*0P&YTcyr@95z-J`MiLLSVh8en|a#e zDS4UBe{0kP#j+}#eqZrb+M?Y^gja@37PuA5E6rq!^Mp=wo7}i~hR_E+it@Rymsz;ryOm=iVSj8*8Y!L) z{v#eex|Wl6KVa$=^#3IuY5tdZba41D?YQps;iwa9y5v%Gy{L5I=7CD5L;7+U41|MQ z0p|Te4gU2jf-02aNYHo&ew`2sO=Hd60Uuk@k;Be@O>@lwyBYW6adgpjAU0ooBx*TQ|?%Y@uX%04tP?{;CJHLM@j24o;>brDd+q zl!&T7+zXiEk@sv9w^ULh%4UF=!OMu3F>f3a!US?ei5duoVBL8pK)?VEYLJEuuhx|g z=@kaZnmn84iWO8W!z;3#2AE7}k>6ehOvZauL2fY4p8yPT9=VXelCPDJI{-t1M=eB# zOrPe8nSAg9*s%tUSgW;-38+r;07H-f9A&lTbRFW`jYOJ(8D#pDS6(0v$quD$xrpa+ zfW1;qv$PG^BLlKZzVYKq9^@|d$^hz4@o0v4lWml{Nno5OdUQj^k8LBpY}9mKv$h+g zgq~~Vrm{hCWL6x{%SMU;e{Sb#yoV;w|eZXtdCu>ANc-Ro6~@4bSk+I&;dM`SyLDDNs6 z(oFs?w#@_hM{}hIx{!L!fIMIZp^*8N#0ey{sQCH;uh2m`(yy}H2Y_zHxvr!~_eNOd zTMfX!+?d;(<2P&aehw@@>n(S<{YOdGgw$|G0Y+!f!vaN95vq@nAbk=n5Ix~TPP8hW z%e!=pIBH_XaUUEP3+c3jtIP+BW8-Hb1s%ORX;X&8MnD)LHrLKV1sEl949;cA-x4+L z=wjZ`)M;fUKpGMT6>08u46Y21kI$|>IKrh}Y1;Z0{P5AFs*-Yxhv}7}QX#2zpsUoB z3j`vD9rx8Hp=seqQ0`aTQGCuWtW~_JOWR89LxR&3gT7)MUUcvfv7kl*ivB4OK(7D5@$$;-DmvQ}QNbSz+Z$D$z6RHWkZ|jBqGnIv*SCyF-G^`z2n@PivbC+cRx< z;8Kch$A1y-7A(WUlZr-?h7Oy|V3Vg_h!C~L*G{t2D!|DN>wHKSEy%5-iC0C9Wo1vC z0~Mk7PyZR-!V&(9A*v&Fvo6)g!AhZI|BX!}3=hLkIki;5VTU`r{aPr8|G>ilZsv~OUE=4 z(Ojj2Bha3^Guc&$?N9Akqz7DR#&cKDMP&M$@R*Hq!8hsJMvceK4V zai|4Eg%s8Gb_iO7%y==PCw=9pUTzKUbsR(cD3Z=jI}dq1pdIcirM20e=5mEf+*Si? z<)lI^wex0&k4+D3z|VJ<5~-xu}Aja$C58otUiE^5F=Ydl@BUuExFI zBXSv~LI6X(Ur6%2*-*wj;eiY0AJOEdU?bOcy$nmMgcc8gl-DtGV`5$ORA_x39THMv zMxHBjcB#~C(WCOfMb8`mL`;)PmjO*J`I$|Q_rXq8Zus&U+A3$vtcnCj#P9v0eGy}s zo%8$okh)7sudIu%1T;0V;aYk1FanA(L(5VHTR0BD`1US0CM#ZgdU{G6;VS*IAx}C* z-*j7&%2<^FQ)9oNy0eUr)`+)wr8ky#OWrNMi;dLKXo>#NoF&YRRjo{v3IcIbw!;fG z%?j@LIjvUW*%)#x74}@dibc!i#G&q}(7@j!aK^>Cl)*}JU9N@Tl3 zGxkHt5X12mZBzUbxDX4PL1a*p>s{I3Lv4x}h4Qtw=sS!oUMlmd0iSo5|8Y{;6Q&6z z>o(-UA$79t5_c#B`)H^;NO4Y!SAtffOkdTU*_h_gtVncSf=7n|{{+ z4o{n;aqvDPO&+vmN>Se-TlejnTYuj$Z8x+dICIZ*85m|HWp0{~@RcWEUO`&AFQ@~E zt$$g^d-um2#-%<#+`3(iKHHcL)CSN@P!KVTx4V?4dQBh4Y)m=AJ zEz7EWviLq}fL)}({dw=5rlTSU(5AsLu{`=bYgrG4Ftk`HK+$W}Q6cFlVsxVM2{Eqj z@i(*YPw1o0U<_6`{X)WNauDTfyhWhfoOKlBh;d~VLU9;IZ5S^t=7TOujPbT&shR{AR|x@6gou|6>hQ3@{eAQ4sP_B0~NZQm{%k((S*|i(42DaMWBZtIeeiXAW*? zXxH4%3|Do(xN8j0Yk77sW%@zXcE`k2R|=_{3J~qSVEw$Q`gM_1frqJK70~4`p)YEa z<>>}&?dhRGRSrWEv9UIAGsH+e|a&NI_u})6L7OTiUTOHNh7c%{Oyn46O zq+U$2A`UL~RQh7=pq9wm{$m)4Z1S9nxy!3;GHzmklyU-VXrAu}Xqt=>fE=3A2`nL5 z;q++5e<*h*XTY!Ktx_fHM=E2TkRQ;rnIG~m4dc!eHsl57$@9o6SN4=%D;0h z&8^YPm{roez6C@?AmrH}M~Yq9hVsL@!?gZ(Fm^U-)Gs<}QeN4#X4E(U)_&aIG%4hD+bDD3(rhFqId4<^@)eW~rb-yIT;ftzsOX0BeR0 z{?^o;&D9%#ZnLt5lSnBOhw4;6(pStIk>@To8g_q(TRDr1-{rbHWz3m*s7(&pp7+ub zb<3rpy_J#38q=@i)h(won|HBE*jsQpN=Vznq{|KcNd4o+z<@0rEgRe~(j=*JvDA>o zsJI`+OCqV0+|`n+t&#Uv(<>Iuwr|cKQ*>r&MW+#+Eo~W%OZ-HuN1nb0*&uu@7XrxZnnJq+2UH>tNwgdoo0;?ZXNlyRCqu97(8I97Eur#$u}OHRr%Y01c);7Gx|tJy8n@+4&2kR#m9ULn^q zY??5AolWJnk(h7JwpcU%QFZUuW`OE%c4k7=^I2l*{wR>TPYSr3IiEXZvAR*oya)zhM z0Xlxzp3+SbkKf!`b$E}-dYsDV!Q>_?@d?5@wJCQ7KrhrKCoj~o!soukOANl8qGpZn z*mXy<2Hd>FH(FY)3K)1HX1Quqh%5+vA!#8SeHFGn7vuzAC#Pmbaz4RR1=jzB6*@V) zy9DwUAH8gOdIXfv9*PB~hQ14;E>01{1Ms}y^}mXURQHtsv^r!91R}kGzL(|-peN<# zF2Y}193llWv)xh%=_7TDDPlSL;lCSQ(7UrZ9t-Kb8$PO|)*l+G&h~#p;2+d!!>#aX z#bjpPbPSNizHAd*Q2(R;>21=n=T-N^HUiZo?DvFx3APUjl#8ntA6YdIH;;wQMg5U_ zGU|)!MPl>I2qJdRCY# zqY|ZWVC@68!wmn_nm&m%_cDsP(|&>6Ib?p84)i?fIFwXBRi>3w6F-mwFzpyp@wnk9 zrO?mqU_OCwmk>z9RjgN|v#<$%URdu2F-F{jdxv%(nQs>)!!YDp{&wth+u1sMxIG%4lcIJ_n$~pWJ=Kcfn z+C^R2Y$LF-%}}ULgxq<^j?@-eZ7Zf^J4hhQXx7~Anu#ib-^`FvLGNYfI(AY2tlrLp;kfT57^B!RlSgwF#+C^RfgB@= z-!d}(V$@xCT@c2SDftT`t5>Bk!}l=N#g+RQBKV5~%Y|ZGot0>9ZT~mR?uXWjQON>t zP;z1`@0{m3mWn-cdNIKR(zSdwKS z!R)la?YNTh_s!|Z`M|~brZRz6JNn7=IpmLndSjEXG?Zf?A?gr@m)LshTHji^At!O7 zMyf`tcRsp5b+~EuC@IIgTEc7FTGK)khq8&)q?USn&oF%r1sk0bb%r7}e)ng7ibr+n zCT(ipwrJ(9kJR8ML4hR%k)QagJNXa zBLCe)c!W_1VCO}LTFmdEorcI+Y$2rvxaYz)|D@oL(Dxy#zhoO5^f!V!?<0yb{xRC0 zT|xY;`RS!b`gC;AP{557tG4yfJksHN`H)ZrJZwFi=Gej(>b(xZNL7#Fsra`Vp4wpB zLFFdGu=<1AsLs&6Q^Ja$JhcKZpC#(;9lyQc4mkzDUIBSiA0Xcu`W!njhHjKN17e3j zJ~Tvqu@EVrA4DVl9yqbvCS8Ey%UMSn0b-Pclx-J3I`u1jhp*j;=2x&a=>nnkPm!Eq z-2pd`VVpUM?2pYJtp8wQ(J1IqxjZTkqY=fJh^Rw%;El)@!r@yq31SSDqGbk@T4aHP z;o+N3X#MB|cs8gfHA=d{N{*Q9po|)=wGdj!N7lj+6Mgm&cw0@E?mdDsa`IC3iZGkv ze)A|a#2ly9BY7Ho5qH2NMk(e1A9f37FxMlOiO}D8tp6|G(2f^r6gI9>$C4%}1;>25 za4^K9&=KB_^}N?Q>a1nh1FxDzfAA!_`SR-ybjS4LXM1KpNJcb!$3T)td0JR=TIZFU zGjPLFzOQ|ZreifT@*y?yQoo+)f<It3S9IET5>2{<#%4@z_FoPD9&p2K{wa(5Zk~Kn? z<#=zm_Rv{1^IY{ovRULqVyl}cOtgBxIg!KTYVequ`svc3*NN9vpO?@*qD;$sbai77%{uZa;K9hz)U z;A;30m4Or;Jiskdr7+{};$;>+65qAVqkc+g>$UMUxhfuB$|d(>yhkc<^%dh?EQ#f} zpdXw78Xv_=F;q0whZ(#ptIj%;LDC(xkSPN13+w-9OYJ0*lj zd1P|R9>oN;CNf63^!u!OfJc<1r(_L|?ZLOkJC^1^ExjTH5g`#+SR}7(G4g^&XlI{= zpc-UDQoNTeIZDKP6H|{S=p=Xf>U9jDUY)_R=QI}~7AEYtaV$HR)Y3n3Gq3l51={qF0{O`*?Zxd=xiSyt=FCAwaLfTf2O_bI zCl|Juz|U^1k4smI5G)~>@&M>%qg05n;y`kbt~%mSEq95rp@qraR9|vmsSR%CI7v-5 zThG@8IF351wchkizlCoowVb>YfJ^L!&jR(}KTB3grx?JW*3?6MV5g;7hc7&dPIL7R zG(7m`be# zb`X&}^(~`W100FS2Hn6i+MJcnIc%8~^1sRCY%7tn9BoG<4Qzo}Fn3UioF(y)V33cls4&XRGwYFE-^YWbH-$c%-kQ3^46aZra9p}Q-bFqX2ZC( zg=o=5zae&G&@$_Q{x~o7r#9PChI&XBhd-n3+6mSRG@D)1O68(jz>2G%En|D*8AE!{ zK%0GCE6c^(QHJjIKann(e{cIyR*r`;Hq?JVr+~{A|NgKE7)>P9#)&_j(nlM+HMI+& zZ5HkoXB@ye8YM%kqTzF6(WSteeO_q72A!K`Y_1EpqRpicr=SPuuU~yMvQE7PxZ|uY ziN$NUEA6taYd+L8EL1M;+k{xd+u3^S#S+g%FKFKl>(kpU{M~JVeY0mxPnd?w2{yaV zSp8$nFF3yuv`bD*^6!!HsaN7B+$u8EJ(XCY`R4a~Ai=nPaL6e+Ty08jK&SBZp<0A^ zb#Lpbf&$Bd@BMUOpQGS*g+5G zYCfMbM&E4Ei2n%tpjvN=Xd)7iOl$`&!*m4e4azK2@Mkt&Be)S)o1ol$xUcxrJO7}V zR9`Zk67nbe_642l@CUs0p=|Y_>`(}VV_zP1gir4Fd$17?o8LJ4&QOkZDH6EV`coa8aK2h>lWU3JAKbrv;f#uk($-*flM%*!k*4gly6Rzz3|kA;v|~zM z<>e|H=c6cbyUr)EJlJPdg0LSX_%9_BpT3Av+|L_Ks>4CQC;=yaGHf%SR<|M4#C4yY zN)8+-qu$dyd>Sq#SC8uiM6Q7ki@_M3j-r<-Au#TNFXe@*#o=Ze6N1or9>agdxRuup*a;geZ znqS;^^`J22BuI-!8qGz7F)Ul-tMiekG2YwOQx2Ai4E4n{AElend zpx4O$$WjPt*#UOz+a&4;$jav^=Oc6mO&*=x6q81#D?WE+o-gimT00X^zB?9|?WvpV zb3Kf*_qp87vrlKvEhjd&8Imp%N~K_o&p_=+g#Br-BN?!L`3;U2K8dljaKYx)F$C{- zF_lKi-)T+FB1pU)w4ccPcJXG3+Z4R^v44tXh@8PlJ(0BuJPN^0!j&ECUVoZdoF%WI z?DijblQ@@rTNqNtAY@4l!NtF0AYVD!{VVlH$}VgF+$v|a#IHYB>@@hs0AUDy%qFD% z=GJeEfyobmzYlJ{1LJA zV#N5Oi&1Yc_UjC-P&b@8n|#Dmfhq6-8}`PCDJCWI$|owd2L%oN$%P3N2Eic0ntcQr zaU1+FyNn!=?GhT>Uj&8tlxsqW(J3zvM3MZ}fcqB__^FYAcrjB3_85>k$)Ip7HysMxV{Z|@0MxbMUJgr@x&lbD!ua>TQXvgbOI*{XWDt*S%i7q)hAZhaVP_1FRX< z%A_1e?8V2snF)5z3G&_4N9;pfde^!)f?0luhsMZ@N6k>s<3?G28H{5Dzh~_cN5(fe zzsOJ>5gB3`l|IXnX)VOY_!!=I(P2ih-#Bmz>BFU`X%?Yhfs&@dfHOlTQOXE1Qr`2A8he zqdFH3g6XfYuavT|jlJ>za3?oZ$sFwU|Mu?NrB+Bs`6@|0C^Wx&EmaESA53Kjy`bEk zg(j~nvdwWQdR2DtG3KDU2b`9pA48u8<4JJ+z0H)GxX;z1)~^HpGrS&5y51#wvnxOQ zc|+`&X_0o5hQEZcYWbGm#-btz-$do^&GgK{H!Pn1;;LltHCc@mvC!0eR_96(_eW(p7BNKcjm8q_UKM{|tTVRVGS% zDR@v`Hy|qiZ%NZOIO$UJz-`%~U1|1RW#8vc#Kf4&1h4;h7}_tAeAUSH*{5lzYszuX zP#UW*p~mytyl~LZVN>BER|cFm2^ZZ^|3Ne)h_k=Q{P^^#Nb-Ln8g%~)(NM84boy^f zW4;5{BWd8CllMT@)7;yQ1L`xJj0Jq0;unZwfprpv5C*EF6c$`CS&^csB1UaWd0t?| zZ<3{&KoWI~0s5sXz1DkrH^J*1&rvguWx>mhzc)UA^X&KeocA+X%+2J}($=w2c%Q%g zD8SC5*}{dNY%`>?aqoA&?C?9Cip9R&5qtBH63}-`T)2z~*3e`8qVL>)Qllc^CgmX_ zvXOL|{QlAu>`wNo)7Sod#s`0KGDz&PDf0LSnz*0x`KlDEo%~gz`JZgx0iY}HvM{*X zC9#^^hjdE^{;$-dzVYk#EeUu5sYk6oBKU5}N3}kCfM3dGnB8S@a5vd0+s~Yg+km&{ ztL9+nXZuP~5;U?rQJQ$ET|kJaNM6!m!eR1Z{2}--@h}A^E|r3*#4F;*8=Q>nqCX26 zd*YI=5h5rJpd)QVUfT#ECHq*3svC(K@qn}dt1_qGYx5!U03MmK~-2Vgj*{O(b#37=a+mfCEV& zm{Y?j4dMjC1Wd+hQrAiwHA3(}H)InjErQ#^AaiM5vMV4clAJ!?qY2_nMi2fEqr%#q ze`lQLms!0`qekbRcvfSu4Fh0E@`#5-lIxRPDT7j^I&|gGI)sh&sjmzG)d?Pr5Nook zDYB~h#zmPifId`f4{7 z%hND;k>ru$*Q&G4hv%9P@h0D(yz&E~Nct#livT#J)__-rpjgQ@k}D;U4%@kL+tv;s zC+@KzK%o_it+?2Ao*gv#fvIe}fhMJV^tX{g43a)dk#`Ax9l$Hhw+A&)wUm$EwmjRF zV~Ssg;bw-NMU4GXSl(k3#GUM2XS*HmGTX1Cnwa=-DD3$v9`SrImfUY!eOzEZb{+7K z^oj+PBl9Y}odW1icx;5&vj*9d`%zwbuOGsK1dh7}q+YeQi9p>JUft5Ka_+^&ey{Xb zC?NmiZ3DoA^qTpmAN0SkBwv$~z^W*pnSXfCogQ{rJj_@ukDZ6igUL-oiRp+B)jIx7P9uL+bOum_yvZ-vxQqz+x=Y(#9hBY83Ndw?AFcByEv{ zYf0vfauZC|f!YM+vcLZ1S*YCwhhRqh@-{PVFj^>C>d>S{rBeJ=mI|nKF|l+h`Yii( znf4LljwP_HTo7dud2ZUooj7DklcQIumP zV=iNwG02>9@K+a<72rvpoQjH#sigzwrE#=4+qxI%=+bnczQ}NYl4^d|Q_)ji>HN)I zMUY=m!KtpkE(4AzLnzOmFAM7+(ZN$IRZ^_948iJC!S7nPAvAIVRF$+Z;_=1ucrl%g;aTb1TPV@c8C60|Oq7@^VDRv{W% zgqGmC=w%tYSKVkCbJcO%s5bTdghFQS?wXFGI!UElRnf?OQS(8dow$;xmaC0WV>a~s z^oW&?f3}5^QbpNFHi;~JG51+%%!5LwW92=JU^@AvBU|sO=LY3~0}?01!KuDnpL{AyTfD-s2CGCoBiI732Aal*sb=A~Xsg{G z5xyRCdaXWl+CVMt2mli$c07C`NnJsbfK36+j9pmkxN!Xo(AY7qL|B!PDrrSA7hUgF z>VQ$H{gPi;D7D)$fQ90{0_VIy<6)Qhd>$3zbR)P@aGn&B-%g$S&@uT+V!V?>3lUcuVfebVRKPSo2tC!9~<)C%`?~65l2?0nqB?)w6ydU_H!;iVyxh1+-6#j@#HIy?DjYkyO!+I9Fbl?{W<5W zhO$=ANH03|H=45RK1OM9?v=85YYM^}e8 zyn>Iv1?>#mN}DJGwz}HT{{6#@3r=-~5(%Tdhm?z%mZzGlloD9@&lKEQBI@8`l3L1G z^d4q9n$&QblD8U%Odm}Y=DcdMD#M(Yv{pO^y*gKOL76m4z0q7nE?NJGjBAn+DQhv2 zsc~lm%(!akf{f0Ly8cQ!(T9imZCZ(@2F}wGA5U3a6@F`hB~RLOK~oe8tCSj`M9g4| zNLg~kMZSS+I$KO5SU`hC7mXV-RnN%t~3t8o12FL zeF^w>w88h#{X&)2<{leW4y+DWQ%`}EUC(tKZs@flj*sIx46GW{mxiMoAGL|G$Gne4 z9Z8OO>g*PtH7sOE0Qd{{#GFZ%xj#)P&63xOqgm-2%!*h`ORJ%l7n?81)LVG7;l+Cq zGn@&w*1>@ozi%br#@ncXW=Wu7#T(evzOA>_d8wN|z1n=|BRH*Fdgb=b@Z~8TyZ?RF z!ofo+5zP!-$W^UqE2;w~R7!r4JtZi=V~viVD;$7d(aii^OjB8Gb~nFmL0-vd);fFY zIX#n}S~OydK*H?im!^MQiH^_nS&nuQj3@9DlN6ei0{#qr{xBxyXpAhcVxZ#M$T|4t zrn7PYqK83J~@cFCe7q_i4|rt-K#$jz1|)5p6T&Gh;bf*Q4)-qrv`}n~;vHFHL8`J2TVNEv4r0?v$4)PWYnjw5@TSY*lxn3OlJnR@Wdz9a7FwbM0?6)Ru|+>aNrhDW zRf@zwJG;=*1Yx87_&0omfle74H;@V172D*tz%IG2y;ro<0H@km?2dvcn|9zCao16ft_0h2uP1WuSX>s(8s?II;`Xrr{Gda~% zZx{Y1^QhIJ%BHT@j?`I{9@|-uifYWa7T7K9GO%aal#5;`=Qlb=Wc`%&$143pG3i-a z0<2bN5g8BR%<&`#&$B&O6Y`Y&5d>{aG4Hac4F&=TS4}uD4JyOD){;DBPczPp>j<@; zDMeGlNX{G7YSq0>8!4iQnQcTnKPg0ODFH7`OpA=Y!njuT^*}kmc{^Fd-r&GmW0EIi zxjko5?~k$hnB=9#vvFw8%4b)p2;Y-^@rX~FVJT|u;BRJ&(oztnb4z{X^`J5HPc}CtS5{?Srn<@|T|MvPMn(>Wvusw&qGQE^ z$ZcrK0-o@<9o~m%ISk=2?u2JUk6ibvf+$31k$|>qTSMf{5Ky-~flM~l7#)q51AI0N~B|PMW@9_L(U9|8L$G)=TUr$7^=Oc@d3$MO@ z!J_;k|M97mHb_JkZe?;n|Bl{^ct3A!Va@4a~r_fZb-JSL1Xi`{Qt+-IsMn+ zd|$t@-PpG6#y+v_#zcQRnn^8H{gh_PIfgMq%d|ujeCBtt)9Aq%x4ol{UVN)#Lu1_`1yevF}{x^S{We zwP@#h%;K8TKMLc^;;i{Ul$-d^EJja?ve$2y)(<^Xq}?8zOqxXho_jTgai7YHla;(Y zjit$4J)rddCi*ZfYy4T(3-t@S@Hg+}&sGrzp0wMS<`mTdOo9GfcI9tdw199%UpmL6h$mMF3tXTM0P+S+xRz?6up3t_J8>J{pesZWhJY>;9|HWn6Kt(#K?f+ z!7}7NH>13Q{M3uS5dGq~W*1}x{`fnj$UPLxyoLSgJ~<}{^l?Z{qG8mSP<=;0_-Ie{ijydm7_GGRL-fu`rCOy zhV$wmCo_l!=%u%$3A;TV+KGLf{x%?!p&{s2qN~P==|nRVqZQBYQKF-?aw>hI&?H@} zgw;E3hgc(MPh3U+abo$`^!!EgbAq95vS|a1*kM z*47RRHN5j2yz`qqx6jEvDi-8P1e3JGb}q=4k_y8W(|h<7!xKsPb;w>3w8Odkepw6e*r-FYPwrS6^8`y7Okw7l=dRVlL~t-P zpYTLzwCHRKzcdhLmwsxNSlPreus3tzjA1xt0DvILtTJ&;j+rHB%@nJ1DoxjH>i?X- z|GM0p7<^`y=&O#n6;d@OE8e*A%XNC~ypj*n#AM$t>T(eXYf1d$e53r!3#3J~m9ts@ zET=nJ#GFRas@v1tXpX@9+)K5e%3AS0b>#rNgd}^a&X$9CvHJgEA?n=P*rR}Qf{S3_ z>3r^(=Kz-wxhRRkuFezHad1>lw8SmB$uR@p8E8 z>g-1r)cGHD;XmsPK&{d4R-;)aO?mZ;>AJ-H)KKy6?+q;UCWh(*7bvP`nvPJQ2Q~Dw z0>~9gn3@Wh%d!@}roioF`a3_yHLWGiFun>Dl|zI;@--0>SYjWed3vS#j8^8Snm2`7B9Of!{Z4(Q-3^_cU>Y zFB14>#j$deW-ZLl;nR1z03}ifaWwM%AkM2n2(|Q%42zm;|1Ql{4U2Yr@kht*TJ3wL4Q4cF~?VR3Zam)wcg(wxzRQ%Qu2q*@d zq&J3X&dI9!G>oQ+UuDxTSQGnSrFSz=W@a}T0U`YkFs80PicsZGj=DLwigoe- zRgmb)Msrsu+<(s0{Kv|EP}lE)K@sR^2>B9jhM1$+=I<}tP_ddo{U>ml@^|;6AzJ&e zMI-rGx2mV_nHj6E10s>yBj3pl59<&e*5nhS-4aUnyx3u2UCH3&lxy_Nq()>)t-`rZ zosSi!*b=b+@jZPye+WkD`_s@Ex0fmw%FJkFyV|K>xB|hrO_f9U;ca|*y*v|-!*A(ZmHqKbI6-nt@Rfr(VYUK+ehb0gHzdm zvdQ5%#zKB8zFKLb)-JYv&Plg)J>QL8WegKG>l6OIZ2Jzq!tKc6?iu9w*|n*@SFa4Q zxd5&2EQ5vnkssOasuu0Nx*zTB1+~4M8agocy}^%=*4G%SPJD(#nx^iWE=M z%@M$rYF!pK`F%pxRTN)|Cpp>zi9g<+nll~!*n&{^M*+3Mq^B#pPqcxQk!r0mWqXq0 z5&k`mPj*k)zg{H~>f6-YiO3_~dyLmyf8_tLB}Vu7rKzk%%&(YDlkLt_uc)v|x2Djq z5MxQC`xf_DinOA`L``rEll9IxuUK=mL4)ZQtTj~c`#kr&TN0=Pl%+TYu)&!S`^-gm z2y9>iz7J^3=MW_Pjzu^UdsriTIFT#Jz$+*SB4`_(Z(>Af_IuJGvu@)c-BNM;^?n7S1oHr5nA2_ae+Gn9b61)s#nXqJuJYhF2%#TIu3#rdQ zBQDang<|LL#3-LAJq&FDX9zgL&*_yZw&V7|=h!91! zdu?`R3_@`{{EFCo4Kfk_Lgl#=-9r`I1DFm-C!@YZo0~M_!6wGAH)!S|Cq^&tyQo4c zN6CAuF@;u)xO(duKx~dY-Nor3&Bt_`cCSItN7L^4fFQ5XyZ2x~EImvjVcH`vcU534 zBhGI|ygd!e6Tybk&^v6ddrH4}dn}QG?eY6}1?-3-Y=8)~_~m`dU(g~v4EtE-82+|Q zk=tX~cckXn{#ILvg@lCrNQb82r8QV%eAdC$F&6L`7`>0XFZec|bRW)~^@EQ7gX;6H z*&fx;0_TIGd#JvN^@AocWcOGWEKvX-G&R|vjWZ~s3;TZT57sY0f;*yCVXPOUaFR|U zL_hwNJvN^>@;tiN{C;o9b@U(Hz|Vbhcaix^I#Hoy6Zl7_u={4%epT!0!WXBz)6+EJ(s0J@ zdhDj|wlVV3>*`P-Sf0aZFtetuNvSU2Qv!C#%jPN-8K zl7ZI(X77ws8-oKM{Q2je@KbM*p|S#2kik5O(0nsmrVoC>Ey|v&6H?E>CMxTr=WuLK zz@6ExNzaIWaHjA0zU2>TGtd%ZK!5+_O*h8Zvp-b?Fgjz!Xdf- ztb10wEdFaREFuT*$nD_1@!CFP5W6w6$W0~~C>p2yrhlmZ?-^Vpiq`&~ICT0c;S%`; z?LR1rVf?5(ocY0dXZeK>j`>pb{~ILIchXN}{9+s__-W^y86@0y-H$7JFB(JoUO1@y zS%2X8B?!(A;tjm{!s);JN-%!2162o))I*7V&@2%2qqvXULiOH74*dAwR|)omJiJ>S zs08bq(EP*yJ=70ry}vU6)4}RYeS=mr(ht?X7cwCIA>0scw#P0HHLs52oqsDU zX*SW+`)t!*a%=>;`s=;l>je>a)mo$}|3T z&NJn8#xw0KidqitF_+cmbmL?W_hd2d+n&q9-+4PL$!5^N%ccNp5Ge}iCCa775{2^p(IUU*EsAs8HU9Ns z=ONN2k#$BsMpQZz$PH@(hqz#nq9Cf=yBK`7l#`L880JYlcjfLCdy+04br7Vgj$F6l z7>jiFeGJ=&n9;-VM{Z;23q`Q3l8dUpiv(k8UV6rd_cM`%K&l}&Yo?(i$5FD=X|@&* zR9axpXtwVEz{W?kQ~@kO`5dACX48M9xMU(Jj+7fnp>D~r&~E}tC*v|X7K=A+AK+Xl zc+yEsdwN;V2fq2vjUqxktok1>ZfUt5_CDcQ4n6*gkLxFn_xKW>@}|TV@RZ zpb?$Aa(+7GuZc;;_{pSG^k&x~?F$GAuc8`d`}(e6M{(AVJO^|ciOdZ())xquirFWl zu)oePYq37JX9sN(=#+4oJiXgfSB&oG@kN$N4s`fWtj^^lg%TkK*!L*;Ss|#tToV z_$zQi4aIKK9#bT)kNz`j<|Sp$ZxSJLectkY^0OSUd6d1%!O~V|2~PNfCAKfJ;=#FI z?qnf!XfV~W*pud>-dB82l{l4JK-^p4-Ij8lNMsd(|wU{5c<4lG?B<{rXgD@5Gnz?)7=}2Z`Gj~!D6c2oY>vM>K{kI)F+pTml z>W4yh%PUd^x32Q92qGU1txb?%H{|tf&o90^mxK4~+~{yzY0KuVG};=f@ZXEz$Jcbg z6j=63q$gnN`L#sh0&7sIG@#wrF1;nH{_py0ouYQ;?2)K%DxJDcW@FCAa1h{kra>x8{KiuDd! z*(~c4$J3AJ@kW_$$|Gfwom(PckMpS*f8OiM`8(^b_9Um^E%B1<8{{vXd*+SJQy&snRa-iaPyrC!|-1C)N1am!}%q(B~&A zujg@SzZ`o-PNB(+$N4cWGYWf)gYy5XUYjTXaOXD$(DJIRz_y&;QoAhS8|t~FD4CBt z@43X61nly>EW~GCT!nE`<)Z>eSfJEgk#Q>LdHa$78*yh|pt9By=>+qmj4Rw{w2)*F zP2#fg1nL{(x?B(?>B8>h=_A@b@n`CX*cYVuOGxBRr289hOBozlE(FmuU7R&?IU6cx zRpz0sXTFoDGc#+_cUz-R(cq}{CgD9w{oXKsETU{AC? z1Sp+v0zG1D$$rh!EGVzbJqq$9{~H6C0+q~Ic(Tiy>962D87>C^*4w&iPv%ngc#KxR zbmH=7tmw`ZpPX>2EvW4=a%VFd`L8&5G7aaa*7UUIZmh8Fv8v7Vb-Ddw|27z}`L`7^ zA5Gx6;pz`9udjc=x20J(yZI=4l8_E$fH1E7jb>Q(+}5f8V_J=6HdMd9UJ(RR>kn!- zU4k91d;`(+CrM4K!OK^$ePP=ZyC%FKw6)m}g|>*Vk(K*^E1bc#T8aTjEao+V#e`bi zb^9>Blx=d@2EkEy&rH1G8=TZNVKaeEx|1fqQ6bMlzFc8Ct!5=N;?4hpkRwNVo}<<# zNw7(qYhkSu@lBtB$-^YKcK3 zk4Cg>pys_93@7M6yBLiK&G>K`12$^ZwFQqsxtdZxyO?U9LAsC`_d1j|9fL??!iNdX zC`)7f6_63zxSc(l$l=fso+Py(lXZ{?oCz@V*t#wquPRNoCi59P&X@rbq77@x<5Yni zT9yyp&BL-M+}hGZv#$`BmO5bSR?Zu>MczIlv&jVusvbT%CTBUoU3M#DJxw?i{@C0UPZj?GlawqP%!dmMrKSlu4rlX z&SjZfsQShlGgqnSpk(*Ryge^$kL8Ng3rc!{UMn^!UrDnAa-w!}{b7@R2Gb-wSikLR zp{Kf~QIvHi&oui!Di*hEplua-^F_~@E>8S+q7FYg#oS+|p|rbB$sC*Owprr^x6)K? zs*?6r!+_BAz{KumjsK26AKJe+?5Yp^lZAMHAWOEzqAch~t@rcGW#f5QOWG=gd~Oe| zjCLk7KD*_aF(0YofEQ)x>gZl3^i5=~wQ!4%UiQN7-TznM%oZyNryT@g zv?)X_9?oxkE<(?Rya55^n&iQYF8q$N(A@(D@N*Ia`q!?On7UwLj%i?CaSrJ`54UDx zYu!WS@pj&a7?#TZsa2EGZiF{rblDL_7325nPE(_!60buiaFDO&2@^IuCW;YzApkuU z2XooU1M3Ft!Ab_@FE4xsV6|~eqTvZq-Q!bdNPui{Z$1&ybr?EnzW`qNO*GQ zkt(#LJp#(r9xp*=V~)VSC)0=?3BUoSKFUj9U1QrzBtTa%6l00H#4n6wkEumO;q`ZJA7_?-Nq?qMb2+Q#6St1QIML ztu2sFEeLUsupN`yJE=%rabIJ)C+D{$o?S_uZ{S4He$Xg~F_8cbNJ9IBkR`kYh~{$# z<$Cz@#`J$6%md|jFmdjA8sgf+r@aL`3akh9c1Uhch)u9=;S)iCJE2?T`UiXO%+mqK z9hkmj!+q@?6k8t_`GQE(9b)|lO7_^7v4S4f=R=u&wjDGX&@UH?+r$bG1YauJh`b0q zE{MD%4{ekY%+`~DHs0zF?YK9-FKrYo2nK|jCBWJpqF;hrR(L#&_rfgINp z%Ei5}78`}i#gwm=?o5U9v>+R`b9aQq#aJ-1FLt4vHc0o8$4LD4pzJYF zB(ra1`i!?H^xshRIRy5bf=FWctN%(4tC{Wx6HhR!mHO*{4F}^Xc};nhSymOB5h(_T z4xr&ky;bG|HUqa#+0fTtd#L_w;fd9TaWM0hPaxxF<)L|$M>-IXOa%z9>RP;h$M(kRNO^+$2lEX`g0b}lb)R3$$&@wk&FjP zkE>s`0^x!bO-1VDl|e6Ho`3W~5nqFa$8ccJ{locKE&oWoA!Bs&R|Sf46E|?R8T~Fb z%c)be9k|}utM!4{zfSMCAo8{c*3s$@MiAo}PQTqX}!7k2p{cv|56n-tPsPYClxaDx&4>CA&fdFws3W)kwrIiY$D#Q`m{^%$ z<}uFN$I$%9zYX%~23HhJoazX?`mtEd2<|fk$|5~hOHd5QY%^TY*w=cT$101p;AusE zyvgtV11JKo15D2-Tfcw9r+WvPKdth+HNSVHdE4{jR;N2nws5g5t5K&?M-MeuZkIlm zEhn*4_2S@Qnnvt1=DFc;u9Cs+9f5t44Xdip0N5bD>1QdvN&P^A@ENA+vJ3MPirGF7eSYotB0Ch2RXy=7~9ZPd-m zf1wL%;pTz)wI5tGtNag>-1Gij=Xp{=7+!$BMa^y=Z2cc(yHf96gl;o732^L0vTI}MMd7ZH|%j77){?JM=k4K&q#@K2OK0xa)efn$}9fC%z5 zL_EhNc+wsPbi*8J_eQ?4y;&czS=e0eE^9d1U$O0QBZc(I;LfOdr}n(+Gy@Jaj>@fxvgoq85Ygi@SMfEF@BDTO8}{&0s96dzT|3BY24KUvenX^HTw zm^)ceOhT#FQ82mdAnScm=NYPQ37k8Y@IKulQbg2_bI%!6cnNDBLqcfQ8JuN_=nO8@ zo*p~ABhL5$EIafKu7qhd9_)O~{#^CT^}Eb2o~)?q8aiP7HtW7_!%Y^JDIep z9Xocj)OWuqiYwL_myWDx^HHWeD)|PTnX%3iWZWoMA#II4>H}m0at08&YJ6fWfxqs| zc>9R>hh$!~ajXTB_Izh6G(za$RI`OAN) z-^5E_^|mT*EN$phI@olbpFy9?ewHtD%W5+yRWQma$24elYc3Jm?c;n(z~AA=h3jJ* zC!WJn#?*!P^Cbikx~%J5e$Q}qXHdRdtzyyJRLA9E+ilB++r<8q6S$>JwVmXD=2;sg z;G3)F1QB8K+KJi}FTA9p!fy3t0tLR5XwIL5lD7c(LT} z?(9xM>LSZLE05#`nT|8Kog2|~FAxq7)Yq44;j(?K8riqnWuE_44fe@}j$HRTetbzZ9$n7+|_A$Wjy)Z*=1#f9ucuxOlX-fXOX~4# zSQJkNVcV$JH|qkdS5u?oFZW5kgeY5LfHUNJa$DJb{+1?*^9#E&L3MdFJS5UKY^Tu23%HL=3}>d*Y9+aC-uOYKJ&|6Y7klBd7l(TM3If~INjnq+ki^-Mi(~*FU zZDk1T2#>>TPpM?s)+gghaT|p?QUj57YQf~%jhI`6d4~#7w{;qfp%J}#9I~fq;6?Q*4cI)pZdV5C|p`kkyzv0Mr>2H1n zHd#*4E*%&{i_&!+uo534hyS>m2sK(*VmEm z8-qJ0@XN?*2wrDOkk1782wqicI)3)Fm}=C-?3J=nr#bA&F+lG&e5}fmBOX1U|y;w%Hd=>l)tFHUllbo%h`O})W1*evlrc}mlsKy z{|AKAm{f*s7QQR$D^ZYcy4@q!l&Ac)hI?Wqo}_5$G)N=GY9Xy^L|vijg@ur#52c(` zqsOs6H{qm=y=vc9Qt11l3pX6NgkU>4`W!wjos;wG+B;^&B3hO4DB!&uVc_voQ(^3j zGGRZ!f(|8eBPQU8D?sx_g{#JG?M=g0PC!o7eL7-QW{|(EmU{Rf`K`*S%F9W8O#qG+$7Q?;~ldi9mO_X>iluslE!`6YrvPZbx!EUoRU`lm=pgRirtjxIuAv})dagbd zg13|zwmypEvDMNga6+D?zj6k?Xwr0C;e`C5wQDYjv2z?8FJyW}z8Nn%Sv@AgX(#}w zbdHkuAz{xvLv-b`SG5YRZ1{yHWXobwwg?*N8{}3; zj~zRViO_rjRxMA;Gv1XG-n}ZtaZceWX)c8q$YbobCv=2%@$lQIq zDgX9@JogdwKZlaXX#X!6u5aIVeg7|q64U?TP?B*qb^iJPVPtCs{=>-r{d>B_J3W15 znM*bB4S^heLSBdJf~wfW0t<713{ldQ13x8Xl4?dVxIstv4}+r)uK`B5$u{<{4s8d9 z7QI#5(bgNS%V+IRjESJRfLkRRQ*noW(*5Htzj@)8t>!{PG@^h!hyVY60OHP9A z*yTo#pgUmI!KqbdIZ*job79EXoIY&9qEMPdr6toLVJ@;1sG~KKGh?P7lZ}VYaHZyT zF_aoam1ZP~(v^IAqyDf+VD$;X*eji@V0$K2m$;ZRA<>nDLn1av8IZM*dcnXl?V3vo z)P3Vj0cM#s@YU&4YCev9im6B-6e!b`U^mq>?Yb z9dN2YyZ6b7|HOrD&HvMiC#XuZM%4v%e*PHc0Tbjt(_~&7^PnjtF$%*_PRw_8-AJZj0n!?8$%{mH*14U4+ObSwCLI%l5~c54@Qsz`XIkwr*(P- z*B$~-#)`D~KNEBQ(Apu=M;RLOnR!vq*Z$n>&Iz!3!?!`Tze{@(vf0;YZ?+pbmjT7E z1#iKLoi-p}NF*V0(ZqN;h0;k<>4`$(M=AN?Y5C#Voh51G1>Ac{J@K;E*`0H8WxHi} zw+OH@a%9i+2gELY0o(QJPxmU(qlYCk!TgP*2QIKUJ7?7@R>F*v6SaX1<#Nuo{xK5S zo?;ICdsOy7OK?Rp4GuXK7x-e6;K@b4!SaHjzCK;5a-IrSze)(hDOE%sv2Ecgpx~sT zk>H*gX`%8>7Ns4ocPz9gaTiZl`*rvq{Lq4twj)h847h9Awt8AO=GjWwF1{kWLknKq zd33byxg|vs7(^u=QJ2vcC8{F8iJ6|!#I&`w>nIX?qe=+!)<&nU#1PzBV|DT;c(6i| z5yCjImo=!-GqMnFZ41w>n$@QQ$+DcAGv;0pbXnUeT&Af|W(UU?>GpXN>+F$Z+w_@8 z%wzy%C$Ny48LquKQBHFuhVt;KFtlNW_8Ssq;}fRW{sh-&_n2F_ld{`5*gpUX-nysU zji{I+h1Tl@H30^HUR9CHHwe;*^kqE`qq|{uIh6Iu)T(2dvqx}aMhq0q*A-Eu#jpR? zT%_SCT_6Ieq9>q^x^S?|h&IARjEDb_8JhiYg8M~C0N`ol9gQ(QSWca?)WHXkXQ=^+ zor>drO#X-w5$p>%%dtjk%*Ocn(_n<&NJ1q+OF2sN$BDe2Lj1mKn<$a#rGurm>X1lR z1*VN7cl-bwypux1;6jX{X!3+kz-%oB2jwg&l^9%aMAG|c``3;uXTU|~ z72!kd97pLu=uQY5MW3SiRSe8#;*p1hC3L(6CJ1iRpD0jHa-W2g5GSa95Y|acs8|}6 z76WwxR7Wx{kM4T7e2syS3W&1J!F%Nem(Ei6HLMO72r~du7@~4l#QP=~5(v)9f;72Q zciZgoNqNuk9@UQ!oe;sH@yRqB=;d4T&mB~2n6}T*A9nnb;rhZx0K!&g2l9HSoI*pJ z0d{&DWc7+~?T%Lw9)~DTj-wEA{eG-zJK|y%t$bZn5jpqo z3pg~rOvMWpBt&%dqP!eJpnL&?Xo^Yftp9z}q$KDI zX0-+5ZYh{*3}@b1q8OW&)I-w0aEnZY)?;-Z5TRTvjNp7Uo`~T7eVxI-vOZo$Z!dzA%|Bwo`5f7C3})&m!)nzWU&PY zaxe?{%uC_-C`RcVQLud^@ZpeK+F2hrzYsOG?y-QQ`;tc6my~xU2T0j32A>E{oX(i?en50@6D)N@}=v_max`gahoG&-G1EZ4sz}uS7P{UEu zh$#OV=ho!wa1Rt`uBIdjDryQpm|s82y*==TT%T%ycM*va0j(xQrI;{N^dFnDH!;BU&elsv{@pMVsbIPIe`#_5NQ$l zCzZ~_<8c%bL9+p^CUejC8Tez{tbp8G9Z`5l*}^0xneHOg z$Wbh?!SLcg*z+$;IA^;SP#}vZ&u@ILu)XZIw%lI=jV_w){NueM!uXK)>Uvl0;LQ>R zMcgPTYD;Exk3Ugq!tS;DoNG+sAEug06YxkCbPgh&~=_jZsj#^%E<$yzwD`!j+ zR{xgXfP-bMk$o9@;|@uolw{&+&HB&C9&l11dc0Bcg6*$uq*2EJqW%8}s(V>kvfB5N z6$E8`%t{E*ii$hb&GtGx=W&Y{6#@cKHz4pJ6@sEOJK_@eTEh`%rhdVV#xPKd^ z2M2I)Y}nnpmo}trMd?v5U0AT@+c1$AXR;OUjWFNg4@~&8QTVdy`=f#WY4<%MOWK7J z?;gisUgLec`X`J-n_ePd`IO%%Mf5MOdoK;4>yd613huX3RtYhlZSD7V!`^5>a)z{= zL(DpT)2Qo741n)rf1R1R_DO?>Ok?Dw+1!CO;Rnt+jn3cY!lu$+rwxR&@#p@jzMZIE z8X(rC%VaU`fcd+66>~yPoD<&Gq<&pA`Yux4d+R3KS2*6&9UA4I@{*+5jcZj0x+RMg zDEtZNCPW5MtB|;w11Kl~#L&iQybCYV1idhoNs6K}*f{))^f3ws8H#r0%*zFpRx}m@ z99W#KGo_JY^zM2jke8o8`aPOAnlSNQO*UkfV4)6l$MQu>0qPDI&u_A4S^^lCUj5mx%AdEW$GzOOmDViGodscb4eE8rX+=`KZ>e1jp~Z_JVKV^QnoEuwn|^FKs%Yr zi2{EIz|jpwQuIXv3~0b5iHzJwgKjiZCYxjq4{sTJ(}Pxkw`R>3CEnO0KTGqyjdppx#>ceBY?DKe+(OhJxQ`|qMya9v7T^9Zm{ zI(nm_eF3G?M402vHs;q%)10WF1f0!*vP-JtmJl>g zj524_tz3W7s|zOdEx5QVk1x)$Y>M!uGuzm*TCPa8vd>;8Z4^54sWzS~aw@*KW^r;V zDeyC|l-*2f$jwlLqGveTXKvOHn#L_{O#7LhoK+lBs@XHISjI)ND7`bIxp*_WHw|#i ztcIT0H0owK5%PAX*CKPo=pzb+RRfni!icxWO-$YXn8=*L=B|#L?C1R+Jh_Cm%W{ul z9R065LOxtN88w+vMvP{jbj_!9Dl%$G4OPd@)bPHZaFZ+8wJF$j+Fj!kuIm%WcKT93 z$7u%htZ{qRK*l35f`pX*HCIpX{CIDNi0&Sict#aNOijIr0-{jr!?5v|5Y6bRyH%Qf zyhB2Ms|lR-D2}!hT_4nH1&=P`j~?&osLPO_{-(h3M(9sxFrGPoao9Lgus+> zA*Yr80^c0LSQ>+craV30TJJC|o3u@!dLS~@KBy#Agw@}Q{!k_^b;Y)pynj;3Wl?C1FB?}PE*2#n=X zT#DHE8mX51-`HW`qL&w_0po*a?5G$hd>UNl89L$X2SP+FECb00t}|Gx2Xu{4GO>aU zKei&N54f4IZ})US2nkrmhu$D8fC?rEni`6hVck20gJ3$nQKvXBE`7=(?>|*hx+?@g z^Lfwx_}iR@(YWr^rcSMYoLiccOMxpiu1>_ExB@v#lj6W=24YRK;%GCon{(wc)1!`% zj+1VJ$h4My(^mX6^LxYSJ#+-qt=Y&ueVaa(Oa9;J%UTKNFc0VgJLWNCecA(`6}gT@ z0Tf={(><$8-Hy>N$oclVvDg~kJ*`VX&xkLrk?nSDrf%WDbS>*4_DZ{R?h{te)El>v z-6uqSv*)2_Zp`ZD(w)_&(Q|-9WXZjo}=tIBRO(^MW_4H9=C;P zTzhoQzU~-hFDjY-1}eR*FIDV@vea{8mQ>p#Ekm;C0EdqrW=}#zl40);sY~?^ojK~E zu(hAg9#{nxZq(&JV0vU9iAvz-*iMXo-76IOrNnUZSM;D{3(QYJ;4v#JXg&{Fbmo*? zkt3Zfr=&9uR=5=zd}BPe$yq|gy(FSTasSn?5^}0y`Zy~^Btpbmm{jO3&w&EF!F7%Y z8RyK+fIDZDM$90FLdSv8(uV<_^M}YA^f~+XNqDB^q`;rHDF0{8`+K2HA@6uH!nnp+ zvig8@y*QV)$~*0KvmP-jx1SXWUsm70X6gRr0+qv=ji9NwEqG7`KW0&#*7u8ucQSUp z9{XjvSqI1`=J;l06G=k$F(u%3sEcxs4uy6+iH&92hW%V$1KuEsAaG51x494d*Oh}R zsoxRCh(Z{jOnLDw?^&r~?)u5jZpm4$Q!Q*n`~LtlkXOllrrQs8y2W>Qa>f6ePQ;G> zGoHw(o^<8jl-&FYsqmk|40&D4zo;F%ExE?i_4bx-ot0Z4)`c6ydEpI37p-5I&L`}P zP(V>}VN)ex%yT!*+#Z9H!9ke6=b>+q!IG6}6MMjmo}y-z+K_0HDOHbkmFI0KPB@sP z_;Y&8iq+OqF-ozI=u!Ugb~XH7@_xS!Bw~K??JBBWBr^D|tstdA z$KMgQh-jF@*oc+kBvY^Oi^3U~#R`-0cODh++uuY~76f&$O!Fq@mv|kOM9ZIqyt&P= z8;$7Yp{t6UFfFr4L^)f$B`O6;i;k@`3m{imXS(}*k{f2L%(m0ywW*QPO$mjt?lbp; z!Q`JX=TX~7a?CisO-1K)w^oEYmo^0zOg%d-oXYaq8qSa>HC)3#M|g;GmJul7rPA0b zIMqp9669)T-Nj^9N=sWNB$;M&dDB+j?v~?=>#pF-f{pfyQu;94H<51)BJgrxc;tbA zr1-?4pZ>`5AQwJ_LLfbuYi7uLPw^_0+WQ*;NJ=MxH96Qgg2x|wW&g4P<_i(`AlDg& z1n37M_Wr&bZVkF^AQc7Tg3P^9M9a?Z@Ou)C2TsA**eu580)b)wqYxnn4NQWuRu0J@ z59ilnWSpD7_2`f}VnNnpA?}Dv&9Rt{`vGHKkl;iZQtt4RL*JzY`ozQM{V1^d(ZlZi z_A%*T;Wd#lY|OGIaE7G{@TkXPAXQlqN4Zp~PNFdzW#cf6R2d-6dVXTjMztPDHX7zJ zIpR9Hv}aL~V5W{Po5ifL0x;^M7+jJ(1IYkb#!~OT9Ao}CQuX~8SESLny_QSEL+GatGRuQ2 zT(-q@9A4f-3QYkCFmM&5NQD(nNwEBvtKi6J@miEjwP`8twP(*D@@QtsvBQK_9TN_2 zn8R*~Nxwron1Y-hwFRpMDPiqqBczf6=HaWrL$X1YVg`0F9mEK7Vg*QVd!rqwuBiNi6) zQ)1yBf*_x)b=>h_&;E25k4y}>Oin6}+ALwlQtpc1QVL((7UJFu^yA}XL$JQJWZH;a zW3Su|FZd8|7e4iLPrfKOerp=hO`^q7xTL3&*VW)^DEQ8>7a?gpZni6_YtCM8j_Q*+ zm{NJ`QC=evCCiY!E3N2IQy$kEO^Tc8%CpBSZHFL==t85v--he*p&84ENBi9+&f~kw zz_Dk0_F>b7{9Xrgj>2&Va>o1Nv&TxG&7vizHP7@B=v#-^pk^KPgU!@UlZ$QAts1X* z+v|vVe4h|CUcDfKmFwS08oWPrd!0{XF5SH;r*B`{EXsLBFTvQ45Sb1h1!v*)z}cJSIHN$q{lW*ARC(*C3traXS6 zDZbK=rf&&~mQ5i4p%pC~IiW50<;=U1zY4|TOT}~>oqIreTkJ{2d-uelg*w+5>uO=4 zbF~Q|b%&KAb@-3j3vdH7E7jB3}!c$+(V9$_b@{NOA11d>gh1A4EmS}8&J)KI~)jg zsM?1TANYgwJJA1;u|(jGYI#c-Al^n#?{hYy^kMghlaBnQ8}YP_bs92oVLXZ5{N3A2 zylsZ76}`=;eS__!{sCRhs>>k7O#1Zsq9Gmm|dh_TQ_qf47RIWm7P&iv=BK|W#bE9d)d9w4DZw45O> z&x?I5$8pq03kBM=GInWDc0YAS5goRnM3aCa34I(HZU`<%3-SF<^BnVr9Z9a>1mkL1 z^f3soor`wY{#QGP(@PfVwys7`Ww3Tw@uZ4Y_PQ%eT1$i5`aPG#HwFKs!edB^dl9Y@ z^YnEtc5?nmF}iu9Q`1Yp)j&b!#jP>H&do^t#~)r3%u?r^qAsl;U1lNVF;LPBa%|Fa z5g>U)4LU$prNzMcl!;D_#jqRr$db+rfMd^U2_#u_1J^Zbjp;jip z9sQDVeWc0h@tCI1U`I^>JX`~08Yt)}ku1Niky$W+cgl+0=Di{Lf7N>@lDvhP3 zo+sw1ZvNdShg~^$>kW?cLgE(j9-WndcD`<&%`vI|_p7tO_|WIS&9OJJuA&7&roZzb z0mm8#fv`vP%~9_JSw%B2?Hp)UbggVMy5Ep~)&X?kNy-2__OQ_$VL#ocjh(y5aUqg- zktR}L7~F3$)yUx>U}B1pnV}n}dVZ$&1E0_%`Z6t((b__`zw^}?6s|2wm&yXd7Cqrx z95-l7%3{O5ZY3m4nxlA-YVs{rE7Np!#3khT9IMsXEzSTs8hpSJ4*KOLV%KIhH^-2w znm<7OA`ZsCE=bfr?Qo{UpFMsQ8vv505n6hnmJC+@A7AGbTv^y{?U=h`+qRvKZQD+E zob0eWwr$(C)nUiB%}&S3-(Q`ozfOG@XI;IuF4xUF=Ne-?W0AnH?Y491`*tA3Fp^@u zR#MZSaFw=a?|Qm#=8r;XR_N`?M=bI>BB?t73t2>Ux*Fw@<^kLZTOK_fNJ9%j9e?y@ zI{Xr8>N$(h0RdX+&kv_A(n`Rsj7TGhTs1zBY(@58?lj&yd$Fs&zeY8lI-n+tYxOxM z2rhvpU|3)@{kz{k(LTPqC*iws;5*;0*MaAu0SNuwx$)u)>_4)aH%zC^2Obz08rT0N ztNmZ#KPeYSM-Q+6*41?3ebpuA>&~yux8Kfdb_3%t-E#35t%d?5}emD%L zd2bmkX)JAhRi39=`ER|jfJLK*;qwgi2N~SLDY_L9Q{S1f2_x-|Vff3t4-WB6_n$Fk z2e5z3w%E0YJh|P_zvf%)m&FF%u>eT}9?~o5Agi4HVVL^KpPh>#?Ew1LyDBhDrlm#S z^zC=iAk*+b09WFR{sVm$h`5t9-BLvsmVV~R=aQLzZ^$4RE}T{CT^C3(m|W{!85l0y z_P{a#Kg)jL-KzcW_|(eagZQ^-+|`LI`W9K3-2HwHru0Y$m|8BUn1C|8_T~NsfIv=G z#0LO!1s7BrV1?Vh-QV<0V65Nun?M{Tkmc4Fl9}aJ6!M4Ft^`u|DzsEnvmBs%v47`b zL(*S=G|tjr|2oie`33J|i9$8k#sS!d~-rQO0+TFZK?t9i!<$&C*Z^m%}R{4(B+ zLF$fxp2gsPxM76Z9_+b#cc}_!!v*pGb_omc#Cw*4Y;zgQ19VUJcV%>kjcnWP`oREQ zjl&R^&G6eCxo`a;J?mlkU+#VeAmcrwBq8HJhX=&rJzGH%v)?*v-ZH;GS3%}E4IDjF z2ul~00emyZt)A}~gmVwZ9^OF#Cw_AgeYQVN`*IBCbFyD)6`)(K^zEHHDerFI54eks z^gbV8L|Uwb6e89@3x|k!oP(o{OXG+Tj6Z2-%2?oZQ2bR};!^Rb)($5!9lZ#P+ISK& zIB>p|jjzHPPDPu|N?VZ7pXYR!+-9jU413;8&Z8jMxM zgc8GOZ$|}QJDU3a;ofT?Wq=B*x;WH2Ufn)(0mHgDv;=PEb+>U@@$71O!+!W75g3;b6 zjH_WG~r1(mu<8Bh=))<)jFjzBQ7PQpe~ zQ5Lb8I)9uoGGf#s*NUE|b(7ohYj?T$BAh6GelshJ_l9+Mz4*MvxWPu|50{EttDA$b z8j;U9jP6X54(3vV99Y5dB6yC0>?^sQz34sA@!Ija2>RxhePIQS4^gAg5E3ynwOpGs z0_ld%_&u!&wGrYU?DBx}N=i4dyhA8Rb*2hC?zeLfZ$V2slCHdK%K|6A4E+}KkM#Re z`NDj05l9nhTi0n5dnfPw8TB7d69Ees)k(X%IT*1qqy&{pdszfEma0i=+&VtX*&(`< zeWDkeOY6NiTQY?<2*;i%8da&9h9(iSp(3MGkhf+BPf= zF1E(YynkPBOKGfEDP>wrq-AAHhEu~e< zBAo?fsYZf#)RUa&lDnobfJxzMo*nmOp++&^9X*pAv3+ga-dk#?(}bs(o3j|dwuxtu zdwX4d;ZkDfMPgfPr+&fB(bBR!e*uQSEDFUeA|jjiH$43EW3K|*GawqQO-Z z5c=UGxyP0ZPU<;*+G2;K%fBGL-NZBk}TE8hrrQktb_)V_+ znupaHdoe6uGFxR$6zcx_D=cSLAFaU1QNqzIuKCPka{J;341m}a?N@7#m@K5<6h#^W3>F)te)*iFo<-mv38EJi1Qwy8ms%LnO3ZCce1hQhP=KjIYe9s;%0TLZ2Eoza(8Z=(gRaJE4 z9q7zCe5=FO#tpw~o4g z`GB{wV^b~{;J>C$Yf9GVOGYknpYjtJ_N*0cyHUj@qz6px7gU?}<@<_jeauMr3)j&d zbgXF?Ltpd3LLGw$)lE~lF3<33Lfi1C)R82cMAqrF+a!*D`NGLx=T6nMmy<@I!$0Sl z6Co)NRW`*txk=fsPAkjy5!w5Quu5n55-UVJboLf3cZWG1f31z$@_erZ`j~gL2v$b* zsY3OQSVbj}Q_+l87{;>=E~Hcc-ca_4o{FKAJSgwT(xb+_+6c6~rnYc#Kh2B*H`9LrO1lN+7yvx6e>LiCFl|h4UX=+4oYMgw zQ4oG?HV}r~sZv&*(ruXalOGg9Ir;>qu2CU{x2s~|4!N{JBs*L@Or&j7+f2HuXCfRj z5j00R+eheHn@Y_-lQcpRF1d9V`EJ4zaCZv*AMOnr)j>VaSX@Y#f~j32)`l(MJvrib zz=dB#Rn91NA2?X~@(kSenr%4r`V^kTvR4<1pWcZ#!85;%4pOPvTE5tDG-j^^qf z-sW@aG~a)@8+ok#uW%VrWImA_hWAC;!*gwgoZe|vz0V0A;f_e};T4egNznyic} z4ar>LxA-zCl3Z@(Q#OIg($^)|#h2f~k$v$}GZW=27Dj1jyvtlX^grTd?^H9ny=Boh z!W|+aY>(C%KVlps-CgRa3Vw^_1UtW2!acMv-84GiI1=Rev_5i%RNAvDPh^es0(p6Q zg+iy1oFhUgzS-niGbV=S`3c!Vplr@#Vy+~OWu0dqMGAUt34!{Nx}A?qziO??AGyZ1 zV`hFpFBO_SSW z-(|>L{BH5EwMYW0Y;h&Q8;A7V7I*&mHG8~{8UxK(4;kdeb8yTjI=2@6>3cT--sLgy z4ttA4HYmF#zqSHnSm!x*Hkjqt!(wqFGGH=mY;xc_1!Vy#Qslpki z>tt(mTmK^7a*nnx;9V*OdnJa+14k4p_45aS?v5x#c;SK7`wjo_JJ!cvOiZ6ya#`6P zI%Y;@!QTm1hrAE^UbtS@-BVX2H>Io)L}g`B{*cw71@+*cqKgt#!ta>5v-f_t6ao_S z8Qz&R1r=7|iJ9K1G$j=$yI#@@i-@;m#dhb8;=CM>XeyzlpNh$9YRu?I^NaN27S`t) zg`1hLuqqiG4|cbmHaQP+nd6Z8{&d%18WM5Mw%)~Wn1Y0#9Nu`Je+u9F&z#-Ahf-~F zCD@?r5XMhKedL)X}DT~IH)r}a~%9MJ{ zlQ_cu5xceWYV!F0Be=?hLJbm>(CzQq8h};AoyD`kZ={65_v>1%6&R$j59SWp?mmRl zWo5lG{JORBc&+dNxcIpzN4L51eGQVublhW}T;Vu@AL;U^O0KUrXyJa-hT82r_#C0~ zsb@>jP}Z@hjgExiADUJ|ZBx&V%i4KhWb&HWWS9G&WWIGG@7d1@95c^o1=hf1f)h^= z;T9G+;z1P4cHXpq-L3rT&me9SDpo~`mCW^LnHrDDX$kl$b(1Ro2smK+;I-G^st#n2i5jG+2n8 z%~^1WeO@GFNpoQ1*6}S62rIocc&lT+D4hTz30IF55^g&T3+U-;3?g0j!Z_)~ao+Ox zD7q4oq+Ys~32L-lIjQN!a*ri)Mbj=w{s3-*9GTuadmd`cg?}qq08d=Dn)~hf0<(Fv zxe08LYtJl?MY|4Yva}aBs1$AsxO=+DVTK8vIrsxP3^%u5RLI`Y^sZI2ctYV|97ghE z`UcO$jTD@^BEbIOL44R15bMJR?P2kttQP=)A@EN8@&CFz;Qa9S#6RU|-}P{9V`Re(ZLH-eLD!%v@xn1IcF??twNCx^I~0;1h`XJsNqC z`B`f<= z1h5e}NLY5x;o5OxBPFN*L_)X*XsJja=k(QxqTvH=irgX7JHFKLrv`c7(4&1R0!BXP zXbz|9%OFe_7R7io=fdo0e_nj*Nm~JNrcqqBpG`+D+2l&29WIy@Y0x@Ec?e zqn7Te1Vn{GIqz-sDU3!(?j7{Wghxy6=>;^8cJC&lT5Nfk)JEF%V}{U|NI{92QPZ~I zt>q&)YT)`6io+V`=K4jN2fFT9xwTBg?&mK0b+sc+OIQL@TM_t+O`rg8Xl7N%y^(YB zZgIbev`XUfDuVK-pJ~fekdDe=Goe}eINQN(B#785#{OCB`um=Le8biO&a}?ma*nvB zg3$X1{8ke|aN!{>at@-^(&efi|LvA=834Kc!VAEdFgjUYPVqc+pXV1ihABB8n z)bRkCjssf7Mx8ixhGBIPF1yYyNj9ihlPA`~LQ3$1Z4}*b$rcBm=0!GZPswcQY@g_9 zcaS9{!t)ht2#|a>Z~O$eNs#^?{mk%R9^inRVEtd$C2C(h#@yejr#G^~S#z8?%>Ob$ zWElJv3WRf=V(+0T49h5LX7kA(1ow$n)UC@scTzrJHc?2})?s8evuk44F%7sE!LLlxns1s`ipofl`G-j}lt44_!&!pZ8BAK_bp|&LxnV_$hA+0k zsS%J4W||SK_=_hI%5qFHZhxo>)Ndeg>xdI6bPl4IUe-Kxier+|k|h#Gs;({DuX(t% zDRY#EJ%pAfH?yiF60IcWyDnPBx?`uQZGhMOtxx$|ujUP)m*ccgk-#AK6K+l*-j`AI zv65b>^0DqKm71(*O+pX!5Lg_nV@a90a*q$qg4eGL>jgmqhO`gd?wEo2WJlz zKG1!K{yiYr4*g@KW;KGJHe84aB@Z3K2or4w8$lS|=DA0DOz>SN{c{pi(fOxSglGcg zXt+JA%wf3BqAsO?X~Hk`mcl%16iBynFX($?sJ-PnsIfrRI5$ER0Gv+zO+L3w`J=#+ z`)?6U!UJTuLZeVwLM8wL_(AnHlB`HNd635xl`JjX_FkM562d?8<#)cd+W!8vR`X4W zi|W=W+BH@ya-4cdfC_;>%EYj^TpvdRU?E&gG*#OaI=wfUulNFtU0EF!p!%~xEZkxZ zdD!NBcyBOy)WKT-k0Vzs9F~pWBst>il;Tkz{&q_yS`)cQS9OPokG|dq8*mn^>QqKx zK9rAXF(Kb9&l%k?Pf%VU5L?|7JyP6YMrxL~@R08RR!_dtY=(?svu_(}GsR-U*ORS2 zUZP<`qOGr|VLIsM4qwD!_9**fU5Gx4i6uO5X2JXWXGT4cd2Q|7X(fv7TwORQj}VLG|m)i?8rz;zq_;2}4j z=cePU%IiQQ1WA_T2EKGu=Pn5uw_Ab19WhGM=c#-?WSA8P2x zhpE++k$ErCO66+!B6%HjRnpOh$t!mkLQ807jf6EMLq|zbH9T$=fyqU?^d<7#4xiyB zdG=h37Ej=F4QN>drNbEJs?)^nZiU7g;W6!c`Z7E{5w|bigGcxy-<^|i zNP$?CrcpS|KvXsHu5?Bq`or+mK8_O`=S>PgY1N4CyIp zx&+T@KfDJsri&(X!3I=STZT98NKQM)why`V6xHEWe;#A=Zwy?nkQ=pOvsi+6jM#|kjYpeaHdR@8k(#G2xyr*y7!KTJYDvI3@xwGL{g&2NSoMUFeBLtX@I12mLJNahd zDd=SR&Urt74}xUufTrDrDRqTxDRV;7DzoTPZ_XGa3iST@xbh1A;db|sHl{O5Jyg_x z8=StZf1Ocq^KsI3ay!F-YN`CdCpkz+-^_pj-L73sfs1GW#U@` zg2vX*Rr%+bmm>V(!{Yy#N)k!2?hLYa=G=HrAZS5wv23r`y99jWKOB+GwJ&l( zC=ZF**Bb!DY~zk&C;DCxG7DZJjx$_{vX#xEoxTX3{8dzo?UDut#Ynu%Is@_bM=c_0 zT{)6;7ms{V*TJ>iep;ayS0SWvCj}enG#?7BmMfBc{++RsxgVXrHO{p|x2Jw(L!0gE z`Z%KXb9zx|_6?-W8(C`S2ezB1rv z^aTH?7zz9M446A6A|X0mu^!zVdXwD#v?zjl%vkJA(*VJ5aBaY^3x!(YSwvq;)Moou)`r`?Gr zc_ZMjMPGg|m1a~Las@Z?`Dk72VfmS|3Q0~V?L3{-m!`@@xGF1kWP?L&>sOK`Gc#S} zIxDH&5n90JA?bH?he0kP-eL0Q(ls}u=c@f;Q`?Xk|6h+ zYflINu6ObKNWr?uI6~Y?J1lS&LJZeWAgiE{d*K20gOarASJt?)S5Y2Km<(@Z_Zn4- z!69e*5tZN2;MgnI#Y4JRs+6;>tv{04>N?Z`&s+(-Y-iq6mV-dV4~fI)StNeO(1xDf z;Z(!tnM;dzjm|bhxh*KMP8ZY?5 ztkGkJ5w}6a^(ROEvY`^J&b?B2-YR#d=S{VN5nh?L%;;Bx4%FTojc+mio zQ&{AQU|#N>Xi^@GoAtpk@8NDI$xSk=19)9Xr;?-wobR=HByzzn%mwvHf}A?+gD;K{ ztkY0I;*xvNUI^W!S_80+--Obt_Ncw++$Pvr3~Gn;y{M3qt@hwLh$fF-v`Lx!&+bL5 z6Vvup?%C{9wGO=Q@iuAdM(mE<+a-Xd;Xd@+^p0aW_e8$x+hIQv2%oz*W542`4t!i- z{h5dd>yC<^i+ok3U!t8Rtt4`NRRGD%5qtL*Dhx)b2Zwg1iM~=(i8qmSFAdr>!l+~8 zN)kcu^4Uy%XjbEnBQP(768m4_HTO~t2A^a^i9RDn=4GJV!2@B8$fsnKJi4^i8nzNu z9X2(KNq;&iBrPJH;@8Q$3Hq|~0GC=k3heR$mk2znI4yGXB0SnGjb3{-=zDn$8fImQ zdsz*#IxUNPO%0|SP0V}vqcrA9nR|CmG5>1I@w!F(mn1&y=?8*?E8>PJuHseE9cVTc=5 zfpLE2QieDlKrPChDgntnWQKx3x$<}qZmNvIxVdr|;`0DoK*`t6#vAL?`WzP1mI@0k z1>T=C zt=FhMrC)*R<9W;ea-!W}iivaZeg!vw-qMDWMLA7`Cp#dMRwZA3;hW~Yu5*yrSxMl-xDnpiy_66D5T2)FR zmqPV%CH?N-viNC7*$bO}t#y^-IIPlk(G+g<<&$Tj@HsCdr{XtN4u^JB(WB@7(5|sSxMD@H zEl!yo80OANC-RswvDKX4_p1PvLtZmxz?>&WABHV#Y|AGdkUip{Pcusz2~=M>%pTJ1 z(W3JkQ*VR>pm4t|_BV{ODeEeA{hIXsMZ|%ut1g701sA3Y-=w%RLh)s~8SQGFE00%a zvo)f#(qva6dV7(v9&Ucf^47wmsb0%1v-zbA;n zz!t>*w@F~eFPraQ-1h%JO#ezQz3f?Zf;4q(X-afEwg$%ot_}MC2oZfQL&2qXb7SxwE)W1jt+NPa&cOEN^w@ zw=!v{4|8hP$SslNV^vAa=~if{mltBC=(dGoLaZQe?v9>4m*8{nQ*~4;jFD|JI7Q*NndbC6KwLlrvD?MSu9FwLpsumn zrLH$NaUy&a-X~%{+m)D}5Cus3elXG^PaKg3gh3ObKF9PIsg9W8f(Wi~SAS9;HqH%G z1xzPC$^?`_`M)%)9<)-YqLiDBW=qU)?NYWajtWy2%rnyb*Cx$XiT@}s* zNf>wGqu){oXhDB6+-CM)+#e#LJGMKsZDWAsjLZ6&0{Y;(8E<3zfdQV-+vp&p-8u*# zC?S+*<^zl5i%NACIpL!gQn^sUfeHK9cRW~Y|w@~b*5!Qdttp#Iex2+^btJhUp|kC9Epp@Xs-n1_*e8!j z2X6Syd@5`qco++ZFfW<{!9;%aV07g~1Y0|w#j<5_s%JtEecdnOGe8eKA2bI~>zAk-H?>Rt6xgm#*R1mGZ2X%PD$3MP*)8^twP|1U?3Pxg9to z|H|x~K6O6!qmEt1a8fKo11W2qh;C$)d{JVyT*HPSHZyTydc=_NabDOw~n0 zhOCN}x0?;cx1vL|YLF4NPmr8MkT7{aHCb9}wKYYm&X5=AuFzaze)PPgKNUm7Fq&qc z3;Qo2h5SjG_QOngMb)Mt!cpKE3l`3=JH*f@de|d>=d`rJmP~ z-|?Cv6xP)4Cwr4S4v?9mhft)h3xiSSGkM;lUl8MEL$d5JaBP7hL_V7TzC2HvDTvS>JHdT&JtdQTm#0SxC@FZAW@8On}A5GPRbsRlS zot>WIty-FmWzSb7jig8Um6OalbiqQ3CkIvPsM%__y->gCQrRFscQ&s|-<|U29;6rf zYA%G>v%Q}B>dmh@^;^uqnFquE(Q6GOiFQHET?qMG(H;>V=}_W|9sO=7v1jy~$>JH? zTFI|$?7Atr&nG`6cr$Oa6l5TC+%;JTbPDLE)3Oz~e$Pj54%kNX(lU`)sGd2%>*p+T(mm!SQKkdbu;NP;|ro zNHU9w#9o51`&!zdoxMx({zPg>)YB=qYtlc(xWo3%g|6xXYs9%l(edj9nLj&Pc9$uFgrwYqnektD zhvvYapKuS>+JjYDeE~F*yAbc`1y!aeDnU)jzRV1Zjc)KSxbqn5WAU{lS)^hjkJjHa z1MyIQ%8AI~vSBtylNRKYh@BzWn*OTEM-jtCKwv*qQDzs*sD7~*H{FiNsZQ#MMvk=& zV+~8=$WwX7(O-|QkJMabbf+231eE&A2iS=I zEOYD!+deWsxlgpZosSKWwacq!Z?auyEpMc$;y`L9uTzb{C(u$(R_356u(o!@Sg!s% z)cN;v_cjJcVcY>Q@hfjkC3 z`D`-5arxUwLus?FjOC<*U&DL8FsqvoW`d#g;wH%3MWzfAISeDTI-S1EcO^$9?oVH# zieGYmqObmLf7?BxjiOvrg3Zv_C@D$*t`bGYs8J(mH~4`@9#eJpwMe3)#LCB&;S@sPCxPie{h?EWpM!P zSh2W^FxqyZHY3@p#h`&h5Y;D|Ues;-UCu&8V|dL6F!shX)K1u3`{4GbmzDxC)D4(Q zdzc=!u(<<3fhgpLlpi!b-*rF{Fb5WRAy?|rE2rAsiqs~s)BX4y*pBmL-4a+H^Qzqn zRtJQ9*j;C$-Evy{f}KP@r<%UfPrKyaa6V`7zVdpv@D4*|f9QmY44$*M$I_ayzviFQ zO1Qvan@ye->H9?-1o$}opPOCgo7al%?n=xqMl&IUt7xPN;PIJ=P@{cIpyLZ&PRK8>>p~!n_M261dc(h zSNVk@>KNi}P~^D@0#8P&O=KVwPd%ET1U2G!eq`}Ln1h3H@Ru9cWFGeu&}`|VfA!K_dakw z8HGM#Gg9nNU=wPNv#U&9kqm}?csU)8iJr-c-094AY+MdAZrCGRP0bTBl|zTAlM9D~ zRSEEwDaGocBp6Rpxl^7r1AKWLNfSC%fJ2r>bYt@ z^eU_|nC{4q=8iCK(hxW?`{tjC;mCTlTetqIQ4G{LP271LL7BVsCfaQ^m` zl*I$^oE-thGYwF6%5Q~d5TuSUJlg6HVH(Ul($lLUBm^zl1>&X*`zSN&EIy zN)dK!V*aRw(bTaSGA0;~$T{O7LH8N~pW?cU`k*mJU8$sf>HHsyav^kP02u%b%oXQ< zZy(eDwSD|w7UlohKK^U@XwiW;R?}D(+VPXwRxs49*Dm2~_#+D8U|9_se% zr0#y(>nZmt_iEeqVXzmLh_rC-SyeTw_^bUCY5k?I8-6WYZ3qdzQ_9xWg)`fLKxNm|^J%6|^EuP;o3P znpDRrO>_zlHLIa%Alc)2dbzk#Vmbq>#J{fZ3bX}^QaKEnsdySq5W73UL7`6M2}6jm z-oAFk0fp?Mbww;&1TRx&R0rAvMQj>PT6uhWUGc*zL_`Q$6oq0uj|!`RjA_I04TWNA zc`}d0Aa#Ryp=_b>47)vh2Iazt-?5 ziccEnhT*)$Dav!_ipD+pmeURdHsT+eM1Au6E)nz;waM+WF`p7=?k&T75s&9@coBA( zTQCt96t!9tTlr>1vG^jfG6BXUY|!cnYA%(I8FlsB*wu^-alsG+>k(gF32W4nUoO}` z?ImKC{FU1hzt0*iZ`KbJSKcyKoFqgij?x)@Kp4^F_Z9`UN*j;>CK%yg$wT%s2c5(; zOlpKrkzdGS3I^{(D|P&hT7=!??XAgv!G%@YLOgz+_12HKMDdYu7frzhziY_P4R$VO z$nQ&5RN)Jof4m@t_`7|7EtRZRzcT#*flc zf5{>X7|rK2g~E^WO{nC%pl4kDrTgsnZSU0nmyz0U)f#48AiSmo^^^uoq0wK904EZN z^DK17aF|x}9=5@$`}v58)*0yo)gLTQox)J(W{lmuXytKC-DF(jSoK-y??_UE@^>jtv{t<*7JGPTp^4y$y}s~+_x=d197P`@I>U4AB(aU76D?N9AmmqQXZ`~bPy zONjZZ4`xyk4il(pXB8zr?<=255+_#k6wwxPAO%&HT*|4LG%0Qlw`6+45puf*tT-d4 z9VQP{1oi_I*%uk2I>-pgR+X1N@r+#khNHQ*3BP|Nxi$`}+|B!GM5YR=I7!oIYA!Wo z4vc$^)vRIEGoVCryzv~tQjXm;S9P?Ou2R?4bT{y-ALZdH&s?pwh-1=(tX0xW)f)2J zx?8jt7$2Q35rnz}*P|8e^|*l}4#3S?BF|Y(ZZ5MZe9y|?T~6GvJG5Y9<_W@n?azt-0V*2;&HulfHDdfw$=hpR2i(pkHz`1o-{58LKb;%cVO(&I@h2_!#cL>AfP~S*cJ$? ztsyJ$vYzFnJP&hJ)U^@bSbyJ z6N|~|0A65RW^Ystl&LlxW0kyUbw_|GlRyd-r~~n(EAUifWS)*9f)dkG*idmIdfp1j zTs3FvRi&3EwC7SKG&M{W`7z3_BQ9JID7&W$fM_5d0`ICNPEO_uWOXmo(7)bAgKl<# zbD`{^U3jz#<;G`PSmI72JIGMRoewZuWMnIj3<4<7~{AlhtcXy zgsPy3Ep)AeQN8ArA$K%8;~G<0#oQ8WAgnV(sp}RZ-sJ8B`t>bs1d== z%%wGkV)UrD)hR2rgce^{wTs7E^u9y|YboP-KhIQh_DKcD&R&xLn3;ABnb2=DqH%5N z3wf-+bPI=G0&PThZ{=!!AlC*zj;a_&Gjxcy7 z)N12udf5&i(T-U+MP?dt610RavxT%ChFolXZ3kw*Faz3cdnLw=M^&6F!ieA!{Iy|#jZRA z@DBr#I5;p%&&dvM6R)fEV|f@mbCY$pK9FPbF~3?YpSZb)nG_p4G^_e&X2unk>*=y% zU$1L7>xP!ZK1;oYMsHiw)zp)dH^Vt*9BuEzA{hc@FHpuJfTXZ^i2rbT!{_q2eNu@g zOLY~@rLv~<4^#FtD-SSLN98wvCW0;7d@Rzgwd(**3hMfVkDtahw#n(~U6&?dhbWX( zH8a>u4uF^G2gB83Ed{T52MrU>4kTh`A?z@dzOw1o5sm8-nvlVjXr&s z9j))*tV)Eqwb;v=@Y5iE^h4k*y%YQ#q-<0py+-`_HI3uzz)N&YO#P3s5%!%$|CND?v8?a|RkC$ca`Z&)divC- z`1;sp059uYyc$1%cl<)pxJcf@yaV&<(ETv>j zu=YWjOBY;bYVg1x3Nwj{jG5EHW*+#U4BCctO1)Q{I`YW`>#Ik?}U)*l(#G2|AYE!IjAKXfFgo!Mc>#oyE^wUR5AW5pxJF zovNOVKehoDMZ^5yhy6TdjL%ixX!UBL!c`uzK(?YZ+4=BSoD*NgGP7^pmW_dVa>1?Sh#PVFLUpHyt@w1T!~UQMfW1QSEfm0E-G+ z75yWf8M16#zaH<@1&pDv-~g(a+S}{~zG7LWQGvSN3cs{*3kh4~W|k<_2-h-dH46(g zs;WfNTFp*3+N7bxRGFmorzdut?Zr<^!)k3w&Wrs;cD2qcwhwLBqR1jQ?(KZS>XA|~afV?_0J9GqjyV7%{XB7|tu_alTp@24}uJo=1-0Vl2zZj0ON+Yw< zyn%X|9VWa%dZ`Z`1|7kAF^`+oo5KzhSU}}gm&rR4!6C+9O@GL)@>k9*)+Op@tpI)s zjgGbW# z!>O1HAY}uMQ>V}m<-pgy?wnq(VVtNLF|JEkYHdPLQ!}W3|(opqRYDrfhN%_R?z4P>*R^;2?mt z7CUOH$4ck0q;1OoZK+k`c4I~?=1O&OeYs%9gB+rDTHCe@`>}NerMV|ea^nPUt#{02 zqpyCDY1Wk6sZ$V={_3NCA~$B~uV}Ujaa_}-1kZ+HpzGxk&koUm?whSXun$aYm3buP zuY3E1Kl!I=AG+2?n_12We05u2xZS1Wp6;8}s__@v%G!_q$G?K@0|h2ULoxV-8SUe9 z#N7NY&QWF@T)b2Vnq%^t$LV1kgw*>;VZ>R4BKFQ42a02On@8GFU4%bI1!Etds}86( zFIEE`V&7)ZK?ECw{7!iX3Y$02ILJJ`gF&%3ckyP-M9U5!@taVoM?;W2arD?DDoB(# zjQX(xBrA-hbb$$y6o&tO&IwX<9DaC3=+4gz!G4UY7wdyyK3h4k_~7a;bR4OA9a^mr z4q5r5b=&!gv^^_4koCF(lKX;oym-5fb=x<{2ry_Q-cDM3mOef}=OxOUuz8kG-M?`` z?M)Q&CBL|1@%{u zM;XSUfPDX&5}Z|QJ?}%v7Oy5xwqXH(RLGlQ_6*EO0% z?b|S5<)Co&F);ngTY=!jTPwL;2)m@#Q6l5Qigj#>=@?ISirqW>Af~r)6Nic}I>EG; zRfK`1GzvXN)j6@@d$#?vc!~&egzkX8Vf|So+vF0}ZczeIniO^s8JBy^XYOQ?G1g*D z-!UhNe#YyaJAX&1F^j05H{YJSIjM0@nY%Tiabq#sbU;U>(iHlfg3#{4TJxM9+c0Wh zr^4->;-T7kMOvFmg}u>pShCVSD5J+&b42$<)!|^#JXcsR^~+?uK2IL9n)L)Y(cI1> zY=%pPO}#=_8>=Vdd0dn?@|zbcY+*y-;!yfdC;RAvXKUYdaURDzjK0ByV;;^sjkK-v zFv38DwK-~=T-ose-Fv4yuo1s+9`+bB*~C|gxRRbmkCoU$$kYZ&mb^Kul8#uB-$-FfH85RM zU>xE6pln4D!-oGC)vAOT4x8JYS#V84lqbc_)ENyS+-v$#;WS6#HB^rwascUK{KM#e2=EDkyP+_|;Abv(lD zwvlNyl74X3-W8N4OsO?R897`a^XWt69=;bTeF-$h=^F=8@Wy{ zAKbi4YYlggu)AxvEQ%X+f64R=^T(Q=)4wL`Za3~PVO${ zHHjLYF#;Rs_*#APz3|EEo9NH_cCaRrSb zjvl}N?)7CG+UXOG_7st4cGx_stP!q$4yV;%Jfu?Zz@(Cby|DRfEhBaMfkv(Pa5_O; zF_4DnSFAhEA=+ZR%kRg?E(NEyCm0^{&G&UJL29%f#Mf_~C13luG7cDCY{5 z^iz}!-Q^0)fG~*)!gi>}Kxd3=ZmQz@m?gJcIk=)uUKlfuU|tRWKMI#4hUt{3IekPi zgp$ja?w+u#O~gsXMDl`-vSV}JvuKP_H%(g{>ZhWTHhxwqOL2!*?^bnOzuz*#gVz4j zu0{qmH1)aWbA?ndgw45Wb8Ui<3w#<0z5g38qHYpc%SSHZZbHAyPf;+ig1IYDm-1;! zsI@AXkt2xFUrWHtivcUz2@F~4+j~(t+ptHjr;YOb%mhl?0fMyAwHxtybm)gj8q-^4 z`EhibFa#a`L#pSeWFH3hgs-5D7eIKB{lj8$4SCe-2-p0kl7P?0&2k% z6fxdA`0RO{F@fD9|c2CEVBEdHH)OR9z`O>ItkvHl4t z=A4tNilnkEnRR6pE7DHGu|zLlOi@Z)5=phDx5{n?+Al24n4jCuJ2kA}rAkZ>qG;m_ z;#TBxw79+zwhy|}^T*nA>d`zUc@-Q}#LOM@y`&!V9Q?^CJTK@j=1wA6gP6`kgJn_Q z_+Na^X(xK$#5t{d)-mGH!BzCtQ`-;fXh-?378WT{3i*%GH@HN`4c+Q0a1Rw_hQ z4L;U7m1$!I=V?|YYwOl7YF93)4{9{sKNB;legB(%+3|>yX!>#B*gp9+miKOQaqZF=yTS0CC$@+J@i8 zfIgsbZz-0y224_tGNwsk}V{e+WwfK8gh{1%HjAVh|$C$?J#93LddhPT_FuiK^F25*dVhm6v&Z^$lLK?l%Luf5CItxEA97_JJ&2(W|{@i5XUWiloT4n_Cs#gq-d1z z9jc>S;OKQk5)>KYBZlY*)`Ag51B(?a{qGMJk9f!D5z?>} zn?=-p7G~s>0WOjoMgMF>(;xgubvTSZ^;24U3^RI>z=zf@0z}T1>$0Upd;=1MHG;AE z+IQ1Rgkdm3{|IQou+fEM-Sh_z2SYm3zRdt;;J0-FGDeNy4bw|;PXVI{?9?f-)+%Qu zGJJt5!I_^lQuI9(Gkt_ihoy*(x3uYU`Gz{bDOWXwI)X>t`_mfhWe&_Erj3v#$Z#SY zjs2{6Q%5Ij7e*^DJf+Ib)>j%)@S&=Bw}j#Y*^q42C4YE|=TVyCAAgr1kDTF4ajh`1 z0Xr4DsC1^%V_-IGB2(8Svovy(;eY3%oBoB_ieGZ&g>zbS;$rHZj&)h2h;zi?2?M83 zR9$VwgiD2syr+B!5@7lX9VAjL6VzYzpOH8?QR>7ZE>mPOaH=_^A7=SyKjbchVMj`@ z`ai`n=Nmft@$9y~Li+u=Q+X#%{Po>$F)UnN1Ch1TPzs`r>^Mk_@Z%fNQU+Lbg=K^j z$cfckEYBxHo<4(NG9?q;)f_%YQ2aUlb?DNw z-?d^tZq&>3pIZ^Ru9|B9bO--QkQsK!Xs2;%v0|dby*G)@8NIa}1>alp+zYU^zMdCg zgPY4&I6PXXBhv+;17KlhhrVh>V3`M67&3|K-D`ZCi!~Tv=1=8eV z3Wnbg>5Uv)*b%GG5~i(=Y%2){$qWVhWs|3K2H0HT@@LY2|SX-sJs6l>;Lf@@yGbJ`?hZN zSGC)2NY982_RZBSwIpeWz0XdObjH9CzcwEBP2om2wU<@>0{=;&rkPRhwv3u94wP+m z!Ge$s-O^DAnOqj0PR{{PYNK_@?_;5lU9?weK!FW;dD3A6@e*0b1JDuFq|YRy2MU>- zbZnKN?=OkpXLjz_QYLi7D69iKG#0KTjMVe)ae*C&x8h~d9ELDr8LmU|CKT20=URrC z(wy{(hAO%jvnMC>HF;Y)i*GCo?Yg#yb6Pzu{0k$Yow>5XUKR$YfTuBMa#IuOBGz=2 zc+WVUFuq9{6$<~7IS%G*8GkRM!fPPdR<_s<7Tep3YVwapWhbtDCx_0(WWJRxxA0_g zyqRmkolG=d2m-Xz_%&51^EuIe^o{CVPdJOdkA`Z0`)3R7nT&#UPKu&&*&iGKqPlyF3EsJH2OYbf{#Q}a zp051m0Nlk!Q}3#+!~3S0sGPWp)_vgQr3H7DHa%&ckBJ>=#wKELiqtsxDz%a#70Hmy z)UhNL_@5$5zJN*5W&Zd94}KG$CG0qzVyvMs9C3v+4-Y3Tbnw2;$yg~A2Tv0jcx<*; zQj5G;UzHI#@nvx^`xJ@DTfny{`9)kk$<$2YB10ZfxiONCocL^4i+@8MJZ_Ju{mee0 zz)Xs}`gTrFJ6Ry0q^_TLMDUFNTr8tx%-Sa?%oQcG0nl3FMAi1l`EG89D%F%L&s+S7Ozp@O$X zbeAVyR||8YK&O-6(d`XvOR?jlZ9~~O%To05`>(Lh@@(;#Z(4o}BZ^LrMP~z5SA5>} zXS#0p0z&^SO`Uo8CO`)ohtvErakmm~tLM-?fOf8csGzLn>_ z@hfXV>iYY|$kmod$aL=Nq6=i9EhG7`bdSTP;q}+lFK{x`w9CI6mxvSQVg1A~KY!r| zn36%atzI+B-N>qsnRfplmZ1tTj0D0P32zsjgZ>(UI%NwjMnM#IXlC^2seh+aevJLg zDsa2+%=lW^MEz4@Y&r6)f4ArY-@u;*0HaPSlTKSJaf8(aA|&TD-q}y%Xf+x3|}5g zbV_dzlR(@F3(q}cE`|y2XgC?YCZZO=S}cyTC@h%df~mCw>! zbqmEz%~x3E>&rylW4m_y<1d~VX@iDK<+uNnxhH^pedl-0_b1?lc>F7m^tG#nMdYmn1#8)&@fZLQ?;eX&T{(PK zjI|(mPa+6oh_i8NMdUPwWF~n?{eA&1%OLJJ+%R?}`WJy_|PqEFgyquSHtkC5Wzm#iQRIxEDwg7=W||vYPJT2-LWD zWletH7_rg1qnc`1YJ_13z~my8%nTuuiSi8Qv>n1Rjr5Dwin{y~CnMd^oC(L;WNzE1 zNSSFz!2+{wJjql5?f*t_*&b6SU{A{^L3&Axz>CLgLZGreY>zQGe-`Ivys|1?}ys<7TP3#O#?_TsZcf+;wn2wUi zk)HJ{qzMGE$MwE_-NQQq=JxbLOd1uH1zXWp-&HjYgzFh!5fqoe4acLg#+%j{o91$$ zEP2urE$?U_9ir)cnWxw2_Q17NcC5dPxrIJu=BgQ4pV42zOuH47X43%z0#~X>%dd1= zYmbGj(9K0#CK?*kODYRTiF~esa!I_1xH;wl&DnN4?#^5R%!wcF`}8T7)?)R;Ar4B_YVR2TseBi~9 zY&#qxM1R2r`!Wx%F2#L^&l_F`VzeR4k1rLs!*ntP-H6!HIwmX^w=cdnzW9ky{V=`f z_kxV#vM4Mvoggu-Le=%3C`23}3RfDT4{Ct4a0Kh;1H6-Q=4}=vYE-D-L#vBgEHS&} zwu?Nh;NFuTX5h+&^hQ0ppk>tj#&$F+wJ&^bC~dJtRn)%*^DDtV_AxrnI(Oul&KM^- z8*Gep@Ox^EI(yW+BO{oVxU*2&p!ayz2W+d<_-ft#F89c&gyBKN7xdK(YiAag*T;2} z(~fhQbu{7^_Md7&!#sN}wV&2o`e$WQA9eWs_sF(NSJ_-Izn$$FRG2F5`{<*0!VQ1O z<-T8GP5FFMUry4?%olU&UKcVTr1~pQPsH~q>P1?24foD0#dN=i!3vxOl`U3EkKoeK zE5JFCD2i566i@DzHNOUCgu!EghY=a}G|JO8H3T{uamC>wh7#byqpC;BehbA#PY7)y zBUrwHI0fTH>xc<8N9MOmB7sp@34J^Xy_BN|pjZI`SSDAoSGx|Nc*#H4Nz7DpmP#Un zprmp!{A_wUEEeXl%o{sM`UX0KW1DGl;?4~{#K{EYf;BiO_nE$n@ zZ<^mLBym!@nTA_ zHa<@A)$bkH!j76+>@{y3n2cksvfV13$gJxfnB%)Um)KA*(sbW%cIUUtrxa6s%*!mx(ArAlI6#KBC05_hd z(KO-BG<)WsfSJ|8IWWS`)wnAB#m91~p-zhr+JIA~VqNFvNfn**<63}`wFT5Ocb>7C z_l{V+I)6TVj;4+A%|LEO*ccx<9>pF85_+m}lBHMzJk5BxwsfL84n0Z4=Vr;@fQSDr zD(q-E=-Wj7*Eb;jfAtRN{~x^rX(M-|{{vPW?11x47Jm@-ol5u0;cqG2MEkKIgZ?M} zYeYmUND6rlORO)5wCz6*3Rdw98sNp6&tUxn#CQ`M%j~?%P^-g6Qe2N;UHZe~&?_fX z2gCHeD|gyw*^g&B$z>{w*JaAXJV&7AG%);&VQE_a6;voHtRs^B_nn?A(sxfyVdB|1 z$@_iQch8Nuf@_3O1=uTEU+rD?@40GES^YwyGX# zK=Y=&tMUD_;>sp;+j439<*MV$SC{z0rK(Elpgv$24WQi8K^%;AUSQb@^23f%Y|I6ff)aodw16thXwW-0QJ!Tb z2pT&^g+qV#n>Z%6oHB=&QX7aCh@#A)Hp?MC@5e#@B{kka*!%@zC?5W8$2p_OvKb_b zJ*niH1_EPGs&OdHq61@9U6Z(0W`T$Fd=g5bAQ&JWwi+#vR=dp;0aVMk62wbMZS3uQ9E!P zmS3fhKgcrb<55LCm-a<>R(V>wWtNrY>w18_~Lz zLZGR-9%L>rF52YpfoL|rcOnrIsA6LxXBLAv4oFo^VFWG?0q8PL0AuEiWm*0GR9-OT z=s_{a$%qv;#&GH!fE=r_A0e%yPbXoTl#iNI84R&%s)GOwX;m|EllilQ`-va5rTHNL z>xC7BI>0xEqo5%?dQJAaVqW}WP_}Rz~RgGp?;*d@I_4IbOq2MKGE^Ge!f&L*%qT?dDktzbZl&NwX`_jKleJ{YV zeL9>$UBQ2VU8eDP#@!pY8V5%k7m~WF`VfFX?=fD0flH~D)*jiv;ol229!KM&_TlDF zJ>7k6WLGQrFf=sLTqUJVyz6;b?P3_-X;)Y!ewoKH+8Y8r zx7N+ENgF`LRAqjpV@7)~p>|p6<1!DHjyZL_>Ew6T1~w%zOY7C8u8ojcdvIOy1>c?3 zbcG#YOsTd!o79|uC=vKpJaX?T`8_q|Vir%g&fEE=NjNBkb^&~~>{C4|lURVpoGd#v)f+I$~UIylTAC_C_nu?xw-2`B?8BP{P8UAjZFIouumY z3)SEYnqZeTYv%>9cLI&nbQ3k8X)L37II*JzO6vA2& zeR#ETk*gZ~V@WQrdI$vfg;T8Oc=+qG)CS zSVeP+15QAMWUYp8(Ia>G4dj?Zsnbkmm%A9anFHlyh$)hucnLv+a&q^xY=VVz5(O{) z?P20|%7Swu;p6>b?Ud*-T4b|QQc|QM{r$hrz(ssUky1+OOMNH^xr%%;+{~qA)e9(p zO-tjiqP{2?X(fE6l8cf_b@1?orFp=HkHn8)X^|!{I`g0v%7;D7QQo^D z%T>zZmD~oo8n}VyPTJ?vH_At$*d};2xJMOiLDU_t&f@#V)SE{|i)}1Fl*@=RvF~DT z=WH(FKhul@?4r{g2Yxjr%{Q!*QSezgy}PoTpL+V6=r(A7$wpa~0*oYebu|_>%e#VOWM?g<{zgv0>nT@x8oIb4gQXvM1l{z+mg7foH#N(Y z-}+eY&}NWyCPZQC$J&R2mCT=kGKT2~)-Syv(87u}y5M0RUhq+hAQAInnI(8D(B z7zUUR_9_0%=l6PPp*h4(kuSBg*3{2a>Qv_v3JcRzaS>&dfrxkT{Jsz}2oZCzqtDGO zw_b>Fe4h!>b!xQb+ zU3_a2ClZwl1_qN`TG@UvtRnhyl@bmH9n@U%I@^Lo{HnQzgz~5sR-$eywnITCt1Q}u zxY*ek?sYHb+_sV@fXSXv1fjzh;BuL-M3Bz__2v`%aNr2!o7sI__S8KA^rYbWKi?J7 zVPlG-N_hvrN^bf{leekJ7pFyfPH4IsJGz-{*VNYLEOB1-I!@TQXjMrG{2~bnSmbgh zSLAup3M||u;d6`k#J35h?ox1=(5}6ksSvon5#|B$X4Q6o=omrjCRhm5>A?uec z?+X?+yNR3t&hfh&lZ_~h8nzsEQT1eYQtv9O&@CVIw1Rfyv0bAWG?a7n2zl&{sm-hV zu^|Bg#=Gmy_@!e{DP>1bJfy~j2Af^Aaq_oTIw5h;su7PAL$Ong6BD;YyS5s`&h@Q7 zOYAa3st1789HD80dnUfo zP}Dy%re;53S+iVkO~l^rsyKO(*3TsV6PF*`vmc|t?mKf0t!R`gHfCPv$MMRZ`f)4w z7C!`=M2h+o)nL`L8T?Q*$W5UkGJRRzn`3gzki&@S>lFp2S0@$_~A& z{=v#1lPo)@LOFs|pN;~#ovo$7TjhK>hxvZo>N!qvbQk4O_$A(Q+i2?=dZ5_9@2wbu!UCqY(}jU5%2>xOe}E5u*`1Q;Y+oU*H0Q2Hq6ITqOjDuExZrc zzdLdk1aa^_tWkS@WTN%||fA)wJSO|XSANwwgOW!wl(on#rqm_#~yO-BEdO=+h zf16g2!a^+aNuq!WEd1{>65fYQz+qtmT0j3VP3`2_%Bj#aBB$#DMc84ooltPU?D^VG zS@##S!09}@MdAD%zMs7I4_U1$r*GMgg?1u3x_u8KCQ?Z!`%wbRF9-<5tV8T9FP|J8 z2%1@5(`+Wow*Yz8T6{zEJ(Ma|bSJ(lo_=bs8MKI!Il;D_QHB|x9X7vq<+Q9->2;CO zw`)wQ6op(C{ZIafnX(3a508z9nPYn!!CQnsGWajpcgT@_#!~(2`Fgq6hixi*Voh?6 zE#FQH%_b;n7KNv(i6)&eKDlTTmw$4dC64hil7|f_u3=;NoQhTojZUmj#%+=(%Vl{> zP)o3RB$hm`66OA+G95LQG{+9J>cv{kzDp9w#GxFfa{owV+MrCA3?i_gS}y$UG;Q

Gh~|{2Sl~(3~o~<9F9br z^0C~w6vu<1MMJk3J6cryLwD^FKB!>P(OYk|r2#sCfIBIx7PMYplmrPTu9G}hASldW z{GP_S(>^ArHa-nR|I$(ursa>|9nz(K&Hoiye?Qdi-Y$dC)Er!492dn{=AbP^-_5z7 z9jrf}C0}AKqcA`DxK@z)zS%gxjY-jHd1Hna$MA05PhCtMb@G$~W3>8d zVIcK3ZJ_jYpVX$YnEn0x`s)N~uberb;kZ{MNxcQnEm6-uE9+xjB=@QiQ<^zb1DN=7 zAP&m+mOyXTOWw>)PirsxHyl)A)O}27!=W3_uVqctaW+OYk=sO}{T;DNW+5Bnrl<^@ z%w=c)7@}=mrTMh}30@g|EuLw7m$o+V9f|Vx(cAc`UnbH|0{tzmAgA^^G?}!L%eo1f zdOtlVKoO4C0RQ!2>h#gl87H{MoS7%p{`ZQHFQ6PdEUV88``8c1 zqN%pFTOTEf?Nl3&h5v?(2>v~;OD1KMC=&NX(CfSVqh7?M-~`}u>!;`uG^!Shybb6% zHIwmYkq2qH_vqp{?A-SCMWn;rC(Xdmi0L9R2wPw{bomqF=6_ZCdt<(0ll?^2j&eQFI07Hu+aG?58R|<7ey)l;+?y{^g)l^59ypGx5SVA7?VlkKnoKO0;hYAn$5Y2 z+_IJ2O)R7`dFVc;^*uM-+Q$dhz90^s9c;B4_WbP+cTaTY@OvzQPl+SVE6jz10@qf@7uqUqCp*Y72)Y!YB0YxL=97WJ!SE0ok;A*J5jTb)6X1Qyqy?Z!_5D{Lk}xhp3y}b%8+|n z=ZK$94_okHN@ArGbTeXBp1u%u&km`#~z%gBx(y9j)SPK1hP6~W98CBU9)}DZlEA5R_ z)V~S}j;&?-yGT^7eG``E{)ZAgY2we|a52$mfAZM2J61oD_UvtJfv9&&_oo>epHu#@ z@vO%De+vh-;I6f{^TnxoG6ABszmM$6;ogFKe73*ITPut1t0=ReXRzT(@A;IYFY9uX5T&vNoBy? ztM5cpAwexmYSLjatl3&E+yuQYBqt^5Ur>-xXYAHR@|L`Yr!T7lUow z26S_I3M=^7`WK1tcQYE%^-nq9bu#vKkI2-`nc+y9y^ zq?Ak4nfEqK;0#q%XmAZ$N8+5d{IVoM{VEr}tp&hKU&4Cy4nEndV0WqKE89@Ps zRb2tz16{OKdY5XpQhG`HQJ#g})8rSA5i!Kqza<4$W)}vttyRiZ(mAV^HE)pI1yww)0!#h4B@=gnsDnZk)3 zVeUdtjnFo}fOjPDkh%NBTJg<$8Cg)Z^Dyi~0j3jL>7SZ{DS!P!?|*RIIS`^?W!K8O6T_;A2F|C3!ld&MLl^5_Kc z4RYC0$wJNDHGU$D3$JSZ+C8AM+vCaQ8=l(x=!yIm(bCJ+iRj;td_^FHvVKiK@djnL z5i9hklm_~J0UvsSAXxP`DIf?RYfu&tuEhb5O08B-DD_B`Q&}eo5= z;BK-yV|7!?p4yUi=NcboO&wG3X(j!&_bF^=pLRI6_T!%1QqPt7DQ)MVH-b)O%a!^m zdFSK{#;5&z#AzjwXNTP`kvr9v)zPk=J9Fncam3?FQR^0Q?BnX|zJw2(kR?gPzyx1qxT?)k7|!@EGYZBJOu z%H>|g1CH-d{A*)8m=uPxOl&yv-uOX@qu~#=P4r}=ph{&BjO2L*PPvNZaTDRw8@j0{;B zQ3w?l1F>Cg4Uvg(dBUx~rYhU*2$iD>hz!H!6czVYED(C8s>3$Vl=m*XD(~QGV}9df zgp|w&8@1u{QyIzy^a^+ma19r81SJ!Y%=kX?1IjI?om!|YMJMLfQ3=XV76%nFN$5s3V3 z7se`%$-lV!uT)qNk1k&>fA_9t=Hsqb=;vN5U>9$h2zB@up@ML@5fARsPaJ=kuW>u| zd94}bn+dvyxXXP6o>-}&1A~Ouv4@_iqjeypxW4ZrIHHdA^BPs5-*tZ{$5&N{dua{| zI{y<$5Si!_s4Mh#x1!KiN`2JnD)30vdLH1_MzP;^mY!VKhhSXze?(0MYr z2Zx3)c?)rgr=2g6-%7_*;cWeeRyiY8$!TF6IOAB!ZehHd->2y? zHNY1Ryz(q&fS{kmASvKnsg)lT@CV8;guD;>0!`dz@ z%d9HL`lb9V=D#=)u(xQW*W?es9OK!>OuwZ2l7ZyY9k!9E*bWy{JO4S($I3~*M^6y~o|m01 z>*;S)&*?$2OZbsk!++8Ht{EFa? z?Wned|ETuF$Q<1m{{AWt`6^8)$Zvx`v}+-&UmvGQCMU>n6xP#N8}S=S2=&nxoPwN8 zh_!+b&C*M53sDC+UO&pB6KEm0$BWEl2dDeOF~+fT<099_&t|qJn46adU1K1{IGWP~ zrO!b*wwjUNFD0^TUUMmv^OX8Yv3^BwH7UJr^H45>#CPWZ^a$%YiFIO9m7+dOR#QTI zB{AIIm9BoH4h&Rz+;%9r_Z&9)v>*1F`n0O>a=cN$6(+Lh+?H8a=-QsO|M!nSNBuCw z1#}z#8|7!6Nb2qTyT%K-9mtJIUQkg^S_s=)gdE4Na?Y|MgBAFU)7s%z)K|u}l2o#y z&}znUY7R;wE67$WbKNYLrd4cPI46~__v@MYOmEEkiQ_yLE-Z1a$2biXbLSOe%J<%O zB%XkG2r@t3wo7|pe0OUKK1_dZd)}5POwVvh^C2=^vS;99nRrs{+HYDbcfF|b5#4M`}aIV zh9|WQ@nY%pM*~In;eJu2@GDR`VQiv$IxB-CqWtO83 zcM=`ivKvndaqveuHf5t~(ww!Dghd3YYyL{+641!CU?toh_jS&jHHa%x>8=n@E^`pi zTjflF1PBd5WKHo$+dtM|{ppI6DCWQ_j)Vpm$;K)djW$21$to&~(=b5hR9cD~9#v#q zt;raRW&tE06yL+EQ)fWqc0S)8G`?1Fs$8Ln#Z&+S>a-Zp9e~=`P>*YLfPqJl(i>fh zG}gH3e+;Q@#-V4V>SG_q$qeY! z^alsVRh{y>ln%JdBlmmW&+)CZxJdBwlyFAke^Y;i~neXFokkiD4q{BMXt-`;yHNAo{=E-{jA=k3V z=x#yxKd4mz@nlJ3hmw-j?RTaZTb-Y%kQXs#rZWZN#G?DUuuF(b@-iw6ML zF}6DYYPP^3F#AtD7HBk870h?$y7Qxz+)i8h2K+J|UV7%VK8?E0bp85@ysNF5Nwfcm zOuM}C=vr#oIr=~$DE#*u&PM`!bt>s(a&abUawfYw1W|Y@p5HBO;?c!uhWyJpXEFvVScy5B)1 zz~Kyk@Oqz62Tc^zW+}<8o#*3UTcx-ki3F!$N)Z*eAE^k)8Ic;otVmQ(hQe_Y2)z6v zsprJ6xrZ`><{?tuig+{Fg@%5bA0NY`x&cQ%_|Bql8)CHwl}1h+@@$OBfb$u&KM1ZB z5%_8|P~e#2iNS=S09M<>Z~Y~J*b;SQ)a8jzjFGu(b&b)psaJ@B>qE`e8-(WUICdwy~~eKwWPj8;8$Rbtn%{%R_5(mMp9 z4c9Iuy4e)n??;qX1w)a;U&A%3$D-}O{vso+WE7}aZO&N`TIz^EXAmA4b!2H4!_cU+ zQ@nuGM9Tbtl5>0MpYRB6-l*9=+qw*;-gM{Kf7SQYs(((a5-}rj;&6n8S+b`n6UOB@ z;2OIin8dWeo$f;O~#=NAAyF$&*s`4WfBFA zZ2eOLs{ncI$4LAuo*3y5jTC$_Qc?q)JxYL1EiTOU98WXekp2b4pX{67Gxg9xF1)`6 z-EzAivx_2Z%FhyYP1NSm#UpP?vcrw94_h#qofFjw;L8~^Y7Xko!?VAY=UH-%{jTuE z>`t*i34I-_!>Gm#<9@9hi4eTu?GbOdZm`2d{I#a2xA0SD`2~sNKMos%(Xc}9>rELa zS~0Gfx31m9MOphTgsjt@t-nV!kdzjjW{j+VcjTy2(Eam;fGGB@6y(n;5RVq)w&hH& z!{qH#?7K~(>sCCtD|F2xK%Zf@mhLlE`EbFDDVD)JtXcI%@&Lr)7G%|*h-oi8Ws|l< zzYv=?du-O0hF-#!$gZkfQ5lPBc-Dw9ZNCbm3#uyY`2rt?Y9s@bC>%MqaEMUsi;;Zn zkCChgVVf8{bC*bTd;;}Y&asJz8w(y{9cv76ow8<;-26peD#QtHn?;g0SsC>mupHmb zS^#nx>d$WYuu2kx-*vQenT=nxpFH#p8Ewt^CXm`)DTGJmvmY1E^pvw1a66h$RiM}J zY3Dh|U;R(-J*Br|610D8BOOqcjAb7@Q1SN=NuW{|J!ta;jo$KV>VJXqB83}?;^ELo z>N=o|ZeR-idE<;nR`c8F27pIf6B>Erz>*llqoI$A_!rqRs}nurFQa2!Cw6s8OW&k3 z(FX11@0c5TPuVTR>AIR8rpsW|zwfnb_92%CR8Pq*0Y6BF^L)SF{#C(CP%z2&g$*CI zaEkUtp&mbS3iE|J8pW-X?hcXpJMJ0e3!{)yvxk4P?V0aOv^>ULE8ZRX8GpGGe52>9 z-W|$3{&;2g3{`TAdQI?*{_#)DrFX-AGdfL6(V~p|40E6SdEolNcuw6@qU20KMAK7< z@61m`>Y-d@TcnL>Sw;y_m6_vB5l_|O(zAfE%*HOfSC1gBXM^C=M+vn!L-^@stJHH8 z)h!Zi+|UIptBrpz>LqCl4hpF=vyPpRQ)&4P_Nfay6)qYKR6?2af589kAB+#x*r|($ zso2oTlC=#4UrEdVO7|ouG_p?$QvL4d$fys4f5-bb-6xm98%8>tm`~r^DvmZ=k@r0E zd*YW!%)bd#P|jyT@JR9#PL7`Lxr*qd!nyR8E@^ z3Z_qaE(hY@W=<=YLy?Gnd`^A@$$Vp(Z)R2}bESG9OuQ1NGh#L4*4#+qStKHv^b`Ea zJ&O`cE@7YaOS^cJA?>SCoOokT9)ovia&A#E@Wa&d%>^wv?rU0{HyiMVoyXb4VCdsn zDEtQdz=Bs*U8#GHwSL>Nhk&iQ-GGjt)TmX6meYU=&b3e%@!+L_B!z{GG3D+tNbL>t z`~f2mC4up(W8BPHGSI5#GjNrNi1nC8tflumc>v>`JaOf(z9~x`L;2ybr+M;eL<0o6 z=^pjV8lKm_?lztu8CEZ_%D47RD0e`%eQ_9svYB*eaJ36Ylr95D{ZhYvb+*dseaZPV zR2Q5-eUW)Q`tL!T-QFa?Wx=DT(!&@s-eT6uV4uQK~M)HzFBEhl+hMn8-s_T5O zx~;MvMBa!ThtD;P-p7w5Fg>KqKDMbu;GX2rKD95}COCSTYAMQY#M zUz(`LEZ4zxy87)0x(JAC#$Y4+*0eq)v)0?l!?2{BHoQ+3c7HNMq2Osw!R*}ws@TC8 z^7H)CtY&(60=!)vGeTTA(cV3~NKUMFEgw-58$6`Ohd>M)9;9Xv%LV{J$p(wiFeWT= z2`|n1992>a(Com-GCCTQ`L4A;fB>|s@BWD^mWBpt$$e^`^|O` zttvFlh;c}u0@g=U#xYMVO0<$MTKk@7ijTNN2bpJDI}Cftxw1}u2VqHCV2}@ex=FrI zrs|)c>{QlwiI2dbVXE)3%H`VSRN!rjkEBHhH@ zG1MuecfWV0e&bd?cjYHb%2Rx^R_@H@5)Rao1*oM-4NKF2HRUO#Zs5^4`X1UOl4MZU zCNs_Aor10^S3IUkCd;;f2TbLZz&N1RjK$c@cu^m`2gNV??{o~rJ!iNM%Vrd+y&b^m zh`@Jc1xYlLn&=E&y`Is1d{_)2{(>Y9!3bh4p9OeODYxuRs>_N&4 z==ZyGjhNY?mU?Xc?AHy+gK66+Q>wz6%3pJz3}0{#sc$mIBa{{6Y z4l(mX-TX;))63Ecm>_1xf;_idT5qwSz&AlRYq1v|{22$GT_Tg;h?(ohuSR zB_?%%1gDrB71SeMJg(_NaoijmV7@v=c^~h?@Hc}={#*rAC&fvij*xHz>RhnD-PczO z@>1p?xa90Y3%l>K7*eDEv?F$YB@u?z)pV={RZ(I=CNz2Gb#sRuJ z^Y6o5*KHZwKe6YcUolxnBZ28!F>E@A7cod?QcL^aBlC#TJ^e*T?tAvrX>09AMmz*j z#8sRyFUAemUK4Hc;kRz2Xd5y{6}@;xFECgZ`B0GC)dx`C?5dmPzmk1XYFZS6mu;PS zDilVZ3IP7Xo?Ti6Jv)Z%do}`?*$||T{ETWKki$&Pp@~iw?w1_*Ki9JZbQ5?B0%FHI zI@7u3wDl})J@P*=^T(NZA2~C!4xI_^b~;WdzKv_mGIN0me>~fHhwgX*>b%P!Se^&QH~vzi(s)Ch99{orq(!$Ojrbes zl&b7F#+T+GA+4)!>5(=5`n~YlrAJ)cl?$K7_@fJ-!Fc|aM_}BQYmef%!TFmEKI0Nl zqsAPR6Vur_5*EkPDZT3eF6O*LXszxe2c=PQlhBQ&mm87NKpl~*3x zu{kq~L9kPGq{gE^t6YCLXUC&oedMNpO_<}63#*>ZTDJ~_z;`f3=k2gMIi4@8yCFrsE%vD@Zg2*2+ros^+<f>*_^u+Vto|#i}B04@2ar(=T z`@JQ^A$D8-G3f9V9hY$Rksa^9eCvo)IPZ`d-{ldgJW}Bin6=JZ1Zv^uF9RKT1m=J0 zF95~9KFIN3&)=Hj>Km>#Tt9j1BinA-@n2cqyHNKX0RkZ{(1VUl9MDF7hcm2yX+KYh z{W}VM^yyIGIAgx8_|?ia{i85QEK}uNK|*RW2OSH#N}aTbSoZtrMESW{v#tLYhJHyV z^w-MMxA9?#VR5kHMWjkxO&7r$N8EevuVQ)IUp@JZf+z|IiQ_+3)c&HxwfZ2~b->hEMP< zydd@mb=$@dK$M*&o;n5q-Y{JaEQ?^PWK10hNCD0r)?02K4{4lwouQs2pfAmhU9Jdr$_5(vyo+EBZeqQ1j#G=%03cY zN$PSxy2 zJ}XPKS;o7?Pi3kEm=XiEg$z-mpEo%MEBm;fb^0PR$wCo92{fO%X_lKk|*3&i{EK)H`1TY<4^#<4z{%j**5UW=bKhF2dN*r% zT`?(r{*~*#Y0XH#s?))TVe^vu*fd=X3zJv0yeCq)0hrffdR!u`$c92;9^RrG~#D`I(EeV$xvgI?6$wl|j5!|D?i zHA#q)_4bfec@*b7ZVr09=$aP{WdQBN(&Aw+^M?kw3H~kw!4RUQ!LT12 za$^r8hP~-sKJbAXs@*O$bPr=`kWfw(p0$FJc;>UJn#VfW&|^PCgHPvkb@}V9{Z_B7 zjh{T}#bkzqC%`Bb)Xitirgp-{EQ7Z|_NrNUL}I@*4-3GJXqP>Cds^9Sw{G!q^l)y^ zIrP??5HD4uNR?l@o;85km{L^bxy(IO%~5>vptxeayQZ{H0ExQv zR|TydOt|_-Psp=8PNAwW!#q-E*aXUE*!gHd!geAkg#^jhYK~v!0e!Q{ZxZmPZ9cKX zfhpnN>Sg>KJtI2WLgHT6aV4xH<0DAiaD+JZL2ZFuP@ZB8H)QzEC3uGyZ9iB=9TF`f zeCAN|Ba2a1w%jC_93qOL146?!jLC`$Pkysj*qB^~Xa^Se=tv?jg&+1Syh1M{`D)ei zg2*9zm1>#_x>@=ERABzmFNXCOH6e0G=p)=EC~#?YM9Af!r;!3Ryn?khf)^r@7P}ix z>4yT=5UhgBk&xOVmN8LyWL*I9h`a7CN6c@joouq?bn^%y;|Aieh{7-|ae2()PU>SZ zbR!VYY=lnYs8J}9lnCWM;Wck;I9VpQrk|_DnN>L$KFP}6CB*x#wn6BiXsNjY3BGon zS2lYs~qdjPG05vW&$U_~urQlRLRgD!zqMdx5Bm+G*sG?48yqdBZVTC9m{d9*^5tL7dN_=EVKK6aNBvx2ravcexs(7`N%C zi`1WU4K&qKAMi@vv$NHhHM69p(;2EovFEi_U{_4!+$QVAf^FXLRRU!JpyK|&9~1X@ zmn_4gruuf7vgWlfIDP`l9*ffiC$ftZ&0yt-tA1a}N4)o#I}$nen&0NDYfdJ6j=%d* z0o7bjNzkU`+6?G(*iZE~P0c^!5HH${%3@h-#)EBnTvEa8ok3MAz=rVHZgHNQ6wL%m zwG2|_=r0eliLC|MP08?uLxgteXfG}n8z?giR99wmR5e`MwHtGXH5c%3S7rmE89DXH zpR>4|&k`7mTIFT~L#qFD5F8p>$H0hNXwQQ|p(=-qYD}v@35Jr=U*vAGcC*ll0GT_3R9c!} zJCBr+em=AOtn{q&VaHSaKNj$gi~s~t`KqWNL|qu<6Xi>Gg~C~Y4-Ap^UH=W1Pk1TQ zD}}1CVmu-#>JP0_RuMrsHq_oBgt7s?MGo6yX7{5eH zVMRZ3s!&#bxmx9FCzT-)Uv6P^Zc2fERQ zXqcR7n-B)-lYg7o=~ENLHj#wyncJURxqSjV%%^8dyM%W5-<|1J+0iX$cVJb8zL|M5 z|4QtKFsRI?f{%*?1XSb7EFkXUnc-wvToM#s z&vRpY>Fuu#4KTJjN6KgLvRG^2!yH0olw}xXH5V1Tnt3Gi#v|xFLL*Ni2+j2Jah4Sd&%xBqsl5MJar~<>>V|cD=3#AP1do*$)_ppKnU8{ z`7;hqbvTWGZ)|4FNNgvvmcrAd$IN!XOc8`s%G?H95roeaXJqa{u>O`W7(1GncFb9X zP!nw*jO=Sscl5&RV=+a2sc<`FeB!T_}!x+gqAm=FU24$VV%_D7?bgl<{oM;Ki^Tgsef_+B? zt||A%zW~m7RLxEePlkz4#*K6%$W1?|kGbg5lbuRxhG4ic;}h9EYI?9JC*`=bz6i=E zZZxUCBbJZ#xb$vEXx?%1$X<_R-$B%;LAfOS!YOScoY^twmVZ0-ts!Ds4m&2Q$H}xf zd1P^5E3C_p;MfuTX)W!Lg*B|j7~`=+U$gm#2yTsfl)dP{S!tLQw}BRK-C!->4rAOP z>lX5d(zd2MrnX_OTi*e=w-br zfDR95Boj8}M3as~SF|YkHvlizE>nl z=Ji)p6!GCPJu+#)>&O;EyysA-t~mo*S-Pi>n#l5|Qpgu)Gc79=7=az`!ofe1GH0cIfw7Kd^TAP!;EK(~!3 z_n~JG!JQc1LwlbeUonWNOM*Y|P?mh6x({iix*YC3!F)iLfnqa*=?#pxgNJW0aU<(a z9Jj-x9R|Cq6S=0TA>WF}FdM&+|FRo}BPhXYy{$;Tg&A|@B9%+Wc0ps8QS&WYnU=8s z0i#o4)lGrs9BPL_HBaujqY7~0V_=An%ZlX{WsW1R^$9Tx1U*|e5||haqND~}now9q zgW#Fa5iEw>N-IJS6rs+!j?ULvwyLohS{<0BF)Lg>mHm#S1nPIh~id?rqXf|9J!u2 zM2Sahf5RgfXV|!Ps*rZX)%7g#q7S`CchhQHB2!mdwN=~v97TWm-CWg&sot1&JLKGo zo@aw)%4ao#Uk~}OFQhEj&WZQ?$zaPf&aB)@b?v)&G7^XG%I1sK*0+6ROg&E;NlGf< z7Ve^(XgGO}zfPTrZicg7BbQN}(q-_|6*?g2aI#^>(s+s`n1SIGUF^&|I&@-7vlyL^ zKtnh^xO?fkJ%UTJyE~vI5pD_hhzK9j01uqC@-HUHO!&c2d<|cdD9CFxtNRSc zAy!rCema%|*F>ok7mU*=ebt|50HVZr(hx{mQ9?fbr(x_O!8v45$407O{r7-OV^>5jd%G`Ju^4m)X8Gf&$fEkUOe_+LXk#U6@hH?$ zW@C!y96EWV=n>n-j4g5ioKqB3l!}<>O2j@?{|4PpfOwf`gjXgv9m-bX{bTU&s}q(#zP$J(IniyC1Q5YH1!YIs zIfc)-6z!pworWTyL}pf>#@eANDVmrdMx{S+c_l`+5j!oztlDEmnl(%lmNq2?jyYsX zH`QE}SuY4r*DEUVzD1hw0sz)Ay)yX2k`k|o3ty>_wokn>97Ye=Db1jI9u?0lN1g*u zB7D%Dj)GABuQkU``xDwJTU#*FrqpXdVCE(a8RHLcE|kuT8Pq0Y(i>8_ofx%CIBsZc-t+piMMbTqs)x zii}RM-=n1m$hd{SY=a5`ELcJVn#2s@%wW++qZk=9Z9{ZU=yYfrBC#D1Y0-9$Z5KO zMzkHk)kml&(0f$CN2W&#`ilNjx`*^v59JO3G?7{Wt#{OqS<#0sOeG7Oz7H*VM8i1j zO?(D@U%Bd!{EE`06nhjVbi|HWM{-%fnfXyUF znAE4y>V@-c@jkVY;izfX*J)ZnEIlvUof*SM66NflHza2(5-PTrJ_lt6Wu-2)Z9a=K z*mTCu2V5LANXzC3^eIJ#ERSQ-BuZ}8Bd%^oig&*tUiB&e5|C86BNG|jSEF%W66lN2 zy38#J;>(`BV{Iu{P;T0g3!T)*i{UO=AK=KTQ?@k!yb;xso!qdSe49uM>?PjKiS%^I zJX>MKXW5~VDJv5d8<$Xk*s}~ zixv?-FdCe;@rJ2HVn=?a{muCc_9DDc{{*lU)JJ20Z+2S!gx)gkiB|VX~=;JGBiD#Ci`2H7c;F?lenV*kCVvUg=YdW+VVJMXFc;FVJt z1amy)zqs(Jtvcf?Hkf~mrVf;IrKx&~{`DkBrR|VLUX$91sCZ7bGH7$WlEtt()^I;+ zVo=iDfQ#DDouv8vD$Hb?8|Pt`Jp~vqtG&vub81d4jZWQz()h7_n0}g}<p50R-xs!w$?iCE|4hi?D=(4X$8orXW!#s-8(hESYX+0z%l} z1;_Y|L1*61TP`D~pTqUd1%5xLd4^UB9TeFW?(%5RQk?N=$8lnI*Zo(c3}X2|q17z! z0oSy_dIkc$ym?RQw0KHYY)6vCw-w~bziB*Yuy#1V&zq5NbZB>Lyl-P@jj!zJ-};N6 z3%;}0NR%u0Tj!;8!35eea{Nw9U36VJXa8_oF3+jlF8r@|m)8186?UjK**Z>RzQFDz z2Ch?AamL#Zbd?0SqnfFOK;0_bk9tv||pbw^R>I}cA zF^h;Xjq-G3Ku<0-No*W*YKD)@K-DLa{+MBjG(qc_vgXmwk3}DA?~tq?x_J`p(J>D3 z9z*m<=m#NA$~dL(M9fdiy@mDQy-ru(qjti7lh%(C9zP4Gb4J;2((pY{FiY-{L>=cE zr}W6gr1OrVy%%sveQC|4BStPC4;SeRkjy2=M?e2=-yq6IOP?$swR_NV%JZ*Z>S3T%CU1qV7*}mL{kgPyB6a_tAMtznd_6Amvv2(veTkpW1w2 z?bIYlaD9NqPTHSnec<&h=88m%JQfQ@nk4>w`)+VG^xT=O<=-J}3tKg8rt(#qdY30^VY!jtjOS3B7%GB<}SQWRn zX@Rlp<&f@{#jUnm^SQJrXOnJt9e%IUbW{PPQ;>%tyRs>TaZ$?en(wZ9s~}tLjX75y z_dxKoWfjT=sWc!eb>L);y7RwaI-+AmuF#bEKTq*NLG z2N&9G5P2iTK~>?2#93uf;q*-6O~QAws(JhHNPfkmWj>o1ygV-$>|1#m!35JjNLNiK z=hN-tj%q(sCL_)b(%0ml$M6%xIl@!soL&SGR#$=&(qZ-ure=uY#ZO!i&)c6vOWo$= zE70WJ?x-8eZI=ORxHxx>gr%s+X{Y?HW{V@>FPJ;eW)_3Z!SO5gQ% z_fZ{vdE;hvew|Bek;BluMA1fp0tqRQL58DG`SG(TC0wQ{L=tBcK4_}BKtL%UoR|+-4E|1swbS9Iv{O-?_11|ws0J3e_ zNH948AW(w&dXSk*o&O)o>G9090v~?>7KzI5frTNJL*~>pLXA>h6=-GMrU`I~WL^1? zMFew7)7AitZgP!BI|Ch`Gb{i;k+5V0#7>3UE+r$yXnQ2F764PBGzGm3^(O^POYqqcGEh<0Q(`5LvpG0G9j6?t8v zN6kp9b-OD{e6mN+2r5|}C$OF%qlANBsnIuSB$+&~D2yY+qiSTCj|o&E{f#ryLUN~~ zLqG+fg)*P^<{o)QC2#ddxAlz=aW;?9DR~5zOrHu!5{W6(BMK-*VNCAO0$@a@%k&5X z)c;|E9ddwFl=>u())5;reOe$-Bs|J@r5kx(UAjl`2rl^^8PL3SmHyJH8fAoM^ymU+ zDSmrpT!08D6p2{b9!@Sm z0#u5Om-5lYe>J!ShD3h941~UwcrAG5C%v_dSdaMkd;=OuG2pGE? z3HwN#%28&kQQW0`Z!Pc|HJqF)8@u{S~}`-wcr-d5B_B0yl|H#cKKVnYI+ znt1sTC2wxU5Fzcw3BS6_nsJ(IO0d4inS z1@ml=81*(4g*8-=xw_~fWGg0AQ`J(yr;T45Jz{eSbE=j)r|&1bsA^#d7sRQq(N$E$ z;-yJeX4Pf_F(^TmOmkUO+G33F)Wm{A9lh3yl~|gn>GRd4O>#h8AH7nSgRO^JD>`6| z6CoBkI7OYB_!~zvZH(5ssutP7RZfXaziY`$rm~Khp(wE` zgI@F^WrgJ}1q%f`nV023aVdWrg>b=2rc zff8t^_U-IMjFOF3wEDeKb1g1q?Z9fSC|J&>mQ$itK6fdtK9`FY`^foL&S3>oMp;mN$%2%L@N2N8w4owxTSmcx&V0iNL99V@8bASTfeE zmj(-SQ8MM^@%s#Z&uK%cHI7T|OBGICk-D1UXI`kXSK1ZVrfEA$yZV}$DapBJ(vzo` ziSs@FHY0n_1?+5<)RGXq<>j)Y{ow6^h8=&=lpcaaHYj~I-4nNxQ&S5Wv$3(JTuVjm zw+}KGubxhg)q+&zFay*-@$7q&(^J(^_-mEeQ*UwTlD*{WV%HY!{-Io})Kt_`QR&W6 zU3zHY5Fxc9(biiV0xzl4FV?D`n~T@G zDY^>dUi&D0z366BOSY;vtycm#b9tqh8<$Lr|+e_Zdgj@&CMk zo;Fq!i6?B#!%%-eVBV2Cy&UH6SP%bLG3odEEF+MEqq;>q&V=)gVU{O>Jqazc87|ah zBdDr|R&gl_lxh|sZ$1mBP@u^ZOnHhDzqTZxhov{bELsl#tv+_tdiaw(vXJ?os4%PR z;aritKsS0Ssw=B1A?l&fabg_oNWgr6m2A0i>itnsKM*i@VnUHDaB5EQKqqi&Ch)*2 zkT#_3OBY+Jf@Vca3^VkXrpnsp5D?^U?^{s*oNOl%U?GsFk7%+E~vw zq)7P4iYUB}kdq#72GHMf`I*?Ns#IT$YFcSFh|r6HZ{B`M1@Q((RIM;)#YL zf%;vO(^Y&}KtbD&%0f;~OzZae(qp%aDVM%?BC6N3Gm

zB3;vIbW#;x+$8M{>O4^s7D8dVEm?Sql!>oAQ8t?y|7=7|NDy)i`04T!u-|#KIi5sZ zrP5)ICK~N^*_?vo(qWEga}?X(o}Gx~Xap`KTw++cU8s2t@g!r$_|0m3yOK&(Z)+`M2F7(GnpJU~ zQ#cpr+w^NTZ3)^d0D{OL4osb_LMeK9Ew37JG)l>(i@h5DW034t)okQ>b<3|8mkCie z^rhvvwPejzfb2ss&n8@LWAm)0rWQlx=))g$+9KC?Rm+r=lhiROwQ+Wv+O)W>J{z5NPfcGj@>C@> z@|2@llVD%lhzG@8-nd|awE7pEsuxDZw#Z}e1k(T+Ut27hQl_mjx~(m+!lhp2;q^ZK{QgRdW`qZlURb0=U%Q4!Qa&rzrSc#A>FE0WdN|D>S8OrwOOz6B(KDH>?HTvaLmNf6tmTGoBx%w40;13ef ztr&kc*vJo!$*(S=b^_#|!4LwgmJO0Dukf}^S+yNjo%SLdUcPl4 zP7q%W_)Zqz@T%R!CZ?pa$h)A&siV;S5=}s;PqgK1H6*3G>CB74>3GoD!JQ){cdVVM z$fa0nP<)=%rHFYG=$!e5TT##;v?iO>;qmi|X*;C5$qLqucj+TBb$St{9sbT`YI8uE ziUIbzTCyA#v6(f*jmiIHh`J?C%|6T6U?(wbYv~5NWihu$)kP-!XsasMw`{SKRnp2^x}4M?CjF%kr%hhqT_>p-R*p+J7xZitt zIFRc#KCAF8d!|_QWD58Z90jlt;s=TgzIIYv`5@w#9}S*fNJ>O#e8V0fJ{IT0jv>Vc zpgMk<|AN>7Q5e9z2Ul(b?ay_@;uBIp^!>RaLdb>wCAYx6=H-EsxAY`(&&DURg8oD& zBr7tHJi`9OCnPMwxNsX5_65oqC?mp%YHEFs9#j(MhH|{NPz~nE))GxrAEr+_QC_$X zEnS$qAHZ3=YzATZ%J5?k7lJb=LkzJvgrKgWpd6dS!^mq-kLd5M_`T)8)eiwkNvD7n zaY>aQf79)Qzu+vE96)0eGQYvV9&w3nXx~;P{T|_Nusbljh(i7fefR!aJu_P{5ZXl| z2s7kTNxrm4MKoWU3M*TGGK?q7er=&%_V3MU++!2pe(J=e!iV+tFcM!Vc1PLX2!&bE zd4~56c3HY^sJ{8*H+RZFQsVeWC&fo7U&OrVCwnHyVM^N-WSgc#EZlE#$pr2>L;L7K zJ_|?3q(?X@mbAMcBE0QdLT3wMN6$WHqte2?gVBafPOsTy4jSd-Tp zr1LKCgIVI8g@RN<}xNIdjCC_O-Vn<~_ZOYQ4fPRPwD^u_{kin#pV@jbX=mhWa6f)t( zL+9A4(^;|4Jwp8({arz*3s_*uNi@aC`(>~t^~c{Sz|4Qe0MEBzQj*dR_ya}zOM+bW zkN+v9GOj)izq`LOjW!pa#P{wx^iL4NTXL(VF%YVfkt(IaG^;(F zGVIJ-^7C>oY9yJqp{lKBq}YdNZC&lUb@U_>58I=+5ZWDU|L`XokK+;D{&=Quwp6o# zQnQHQb%Yw!sT6*LJo((Nknc?T{hmz()h^7j0}*`ah6U|Dz}10T_QMIzeVD{DM0o>Y zd;p>&e+&yUWJ?V77ca#1-DlSxi!{I$G?6AE$nD>V4 z#&leWFWt`%E%MK?OXLly2wPH?HfZkcpdj{wL3JDNoPNN0npDOCK$~G zVACNR9N__3=g{T2_7ge=CPqkO@;Vl=IL zxl=GLsDiuecz@>~KxQ4WN16>=-ceQ{xaA*_GQQL zP5e97kHf#GiarB)v4~ly_r%T+0=9GG5;JCR6`d%AtQtrCGpP5_k8Gdqo(KX~`e6#0 z8i(?a=02;oBYLMIZ&~kTefD3F`%L>ooU`#j`bS=$?VZ>=$*{XAG#>@G!B;cF&tIp9 z;SWTgl5yklC#s*KbAt*e#-Fljhi6R?{RuWe8BZ2J`uQ=3W3ji|ov8iEE101QU2u8 zF3bkD*G0Nry+M{8r&ITOi_F_)t+Wpx3`YlZ{@wK^{aYPPhu7Yk_zxwF--6?Rx(v)V zZ(p?pUomYH#%F)?>une+Fmj9}4?pk^Zz|4nam=tr!oSWKlkz!l3gwa4ETEbd^D}cS zIpgt;GzZ24bB4#f7>rQ)z74}Y?G459csI%BMQoeSq&Q|DS!iE+M$5bfOj!B$n=|wH zZPV5boqH;6>)d~2pW#noc))H7--)`Fxbx@$^aj$rNNqdYlTy8|v{t-->KyXNrh3mC z(e|b{z}#`T#k_hoX|5t}N)TLX-w*5D!)K zO{?Qz0Wd~+L)Zh-p~uL2Vt9ct1tKChp*a0)a*hPV4>W;bStW1>%_lx*W^e&Ynk81~ z?qSU1@tr)a3=o4w+p6(c*c$X(!p1G_!aqdv>0t%+hq%9(de(>9yJU`l_Q7{9=@h%& z*nR7ISqyuyhmb*VePU&U@h#!dg5I}5-zfZuV7+I<3SGf1*`F`-U}gi1qCR9;FP?tj z`LnyXVD8>Tt7UDRLUx2o+lT>5P#lTFb4-Vvs9CZhBmJj>L9eJ?ksY`XS%!RX$tI{l zp$dd@Xv9ecS{WghB+Uz}CXCr@V0&|kyWp8p3$n-b$m}hIG_q)5w}C?5hD!v7-iK4Y zj+*g{A0GJstXawv((*DQJ4NMrStQ7y6PvKjVQ0?{Bw|-|ge{HMiG@b36OJss)f78r z2uZ}{LxpG*+t@lLt(kG9c!dE1>vKiA=DG6S(hoO5EjE56XDC8K?+Z@wa`|K|!Gm4R zqHoP%8*hQc@*0(7`3><7mVabRf9kg5!4iW9)Pf}A!}_&hcr~~(CE!DX+w#YlQx0jm z!O$6(3sdug(rjuqB>u&pvpBPI&JmYxi;$fa8zYj0_p&lMV8VbXlscU-B+WIzrU++W z5Sgz^J1G+taZct?QiXxh6S@wkrjV}n<9|&|tH8af6T55^r7;$r5`l{^H_0n7ZSF(X zB^Oa0mt!Yz-bxR?nVt|0A8iu>XHQBdj?M*4#^J7s#^cs{)td8dpmE!(DdAiW-T+SQ~&(Z4H$utw% z9@&kdTuTDy5tmJ1af))kMzWiWA>-DS;Ff>Dt2t^UszfNLkOm@1-}B0@0_DZn2y0hJ zGsH=!kaJ+0A~#%U>#KV}Z16QYZfv|cl{kpDNww-aBcJ~IiwFKJcl*`b3M$=>mtez< zPZOJSCaFBangYsGNVfkVY?N5PlfW$6NsK9{fRNpz$o(2ylFG2#)`bVL-F7IL93$*m z0RPpDcC5UxnN}F$3vURaXS9EZzIYnAof(X}JCkB4U6h@fbZ%ZoQMG1hZPAs<_T?TW z(~0jHa=NQvUFULV6`fl{m|0WmFWPW{a)xx)EDH84d@h|Ai%n?7)-6(m=xv!F^_18J z&mLK9=_|azF6yzO?ZHpT7GeiwkX!?mT)XHhNnYw|$!%e?l)vv%Km?wa1h(B;bzQJ!W|c2ybeY6|dyqM)ciqUs3t$SKgdb_BK70?Iv5sLjsrE&H zzoV=rGn#DrfY2T&afE3!kn}~R-b=S7tT&weqc;H6n>hO8^2f|>6!Fcl9{k-o^+xLt zCY$s=^xJds7WKgAYu_)87kt6Un^Q{XL50JMPu0EH{JD?&SiboDNko8!4d*wTsZ!pw ztI{FqnSClxrDL?-WywJ(lU_O#wFk9qVbCGAq*>(x=HCox{TCdt8uV)=EbCfDzd5Hz zGIn&ZiP^`WH}{n_hn`!9$=PSVH%%0h?e~3dkG>v1npJ-Ug7CqEf@QkY3tSiV`;={u z)>SnODL7%cEsH5&doP}TVg4=shvV;wD~NM~znPxz#iUEnA|ODPKdS z8k1h!87Z&4GEoaPdyc4*n(Hh2M|;W@@@Bk%-K3b`rI;_zTcN}1MQUcOv0#*Ko@d!- z6=j=uXT@)qWcoL1P+_)MvC6`hUHzqKaTQzVnWG2#`b+Gya1P9KBv#^gv|jmzrokUQx@(!xH$Jk8p6%gv!D^mB6=qDq{E)nGd8^rcM*6)vM?rgV5U8c z)EDyQ_o^G2kf3Y>jjVZcGgkK3ApZu|{3<}cRXPW8Y6-=gunzHt1%;RUF5H}{F7WPV zk8LPE@w97CpsSUZDIq|+=TKzo&KTMtM;l-Wb@9V?Im<3&-2WN;c9JmvPwe4?8*{87 zoM8Zd^uEdzX#l$X-pUld59Z{@n=_4j$l`~nJ9!t5`yT8_=?_M5pfEuDX|*w%FEM8z z%D5kz`RR%`vp>Y-k4X9W+8E*=0Q(;9!S)TM0gR_!eM3_?HuyJwHhlU1!P)QaDb_v` zm1D0Rx!(ctKm+R44Y|rO0%`Uaz?l!>7a7+rCdCznPffn0k%%Y_F8R`iN8((R7zD5G z+a_}nCa=(w5w57gi+kcU15)rNIZ3`9s>tSZQNS*7SmVct<4XtDU>;`ZHMtX&w+7yr z0IJxvH*@F>`f?`{t4CDEYrr!?YzwJ3&= z*7}W`WQ-BnsZVa@@oE&uuU&JR5b5f@86euHk~6Z8O!=rVO8vdW;gl z%%sOdtyErh=Xqf8zNOBcpYB&=c$f#VP%qTOL#kV7&Lm>HjbXnBR@~6uJ&9>#xgo*} zF%=O*STnOI?I!?+3;ttCvkYcW9>ol=Dw$roD5gQaoGOw2;$%2Lpr}K-!D<ZYj-9NaW7|f@NyoNrn=9^c#ZI4m=iKd!eQ|!nJ4TJSs-Bwj zI{T=W-WmuV{(Mb6t5DFe&chYp!0=35XK;v8$?Q7^7n7p95$IeVbdj%&N7p7){L5d{ zF#0h+?gdd{mU_!6d#3?_jc`LGeFJMArBsmqOyDxS$}H+D$M*|4dN{sL^c`Y(--=uD zA`sCuzs7Q8(F;pViGI$K8CTM}NKME=fMZ@jP$QcH7d>>@U|5iG$aZS+hlgfiAvgqD1Y~1nmI`OnkyIk|&C&BMk^2b4=x_=>i|1S!0 z@J%1Af#ln_Y03ZJD1@?wi{1Yaz;%1W`lc)|Kk+;Xvbla~<0&9;Rsta!5<QHBZ)Gz<}i$Pnf=}NA8rK5SJq=x>O z??iBxEpwbg`0ZCO@(pn7D97jO@n61ca+$xcIr6s{Y&p!la;Fabyg?VPyb!i$wf_9f z_srq^br}$SURB*ftSbm3R0HmWuIhM!-{Fr6cRqYsM}IiHzV><8XIp|$GzR0bzmi&; zIBBdq?_6q|Od9At`Z zxE}`Br4F=!^DhOtgbHZ^LI-|e8kT^t;c7LX1P~-Y-|3VJ!$MR1f1* z78q-HK=o;Nr1Znz!9z@duWK673Md-d+6K}LZFRo9gu7M-lnp3`_8!0JPYCXmfE+@f zK!sbCATGG;gW)bCAUK@=q)obuSLeVk?Nlv{&o-YYCw8 zjPvh}d-FYbfEweIDgM3~{@-cXH3Q!L2Ulqur+Y9bX9`I-2%c?h%w!1f*&FDLc*t)m*UXc1r3TTAUQwgfozajG9 zIhoykz610B%nPA>E*OXhs0n!_$0}j?{Q(if{i^`6h5l20ZXaO6@EafWD*^4o^&Z#v zs61B>Tx0mnQu!$Z0{#hn*f#KjV5~J1s{7C4(k%Lw?TvNVmd(|h zm!Y$;Aw?DRTj*lPqDq-X9W-p2RnZ*iVOy8d>5*HY!~&)D%FRXOekm|7@o&~-1SJq4 zEpu^lKr6w8G*3fVq3|!26w+c;QO7nPjz<~)CdG-WPZ8oz6O3X~7MY{(x&tS=f*? zgaBtSspP=0vny4ZPJ*kouWrS=C&;c!GILjJqYYwaXY#<+{YjYZ1#8KW!56Bf$=TdQ z9#KjV@_F3FN2V}MnVNXI&rMb!{DYyaR*SEBYi+1UZIxoXnRiY!nndrr`PydX!j>@K zLs~2_t;f60hrQ@g_+vfrNMy0FvZtB@O<&Aa77lVoXKn@c&&e>7)c1n1AZd~TKBeHK z%D*gZ6*h2EYw8qdH10Sk{&qiCtBTlK!jG2(KbXji4&p03r_kzE;a+t8IWyF^93(;@s_4l*Re+uiO)b9;6x2(s7Z zs0chh=B~_xa;342G-w(+_TzqVS}HotNb4u)wS#kpG~rf38365^*gPJt^MXH=YKi$= zY8yHd@@uKtiq&zj<}o^oF~KL-2*g&(E@-Uuvq}|g?3-mpa?m?kdR((bth?le6$zlg z&G|~*Z?uQu2fG2E6+?pEY|Z(0^+#{xgv$$RFLS12yK*mEcwerU=uDtu{g9QkO}-og z{Y8w(v?^CNQaS~Sitg%e{w99ALENHXxweWgbI!Pp#SfFqm}6mXf(scA6>3XPXuUB@ zMfG^E;`Zw5U$|fakqd_ggF#ox85?ajmiiL1K2iV)d7g@$9kt7ah#f0OLgne4YF#DJ zF1xxKsu#5yYorw1)C$=1N|X;cMkPwz zN3D35IZ)#De~mN;n>91KX?iaMl~v*zDCm_Vi86th8%m;n7Y%Lt$g?j9#t_& z;-p_Tmh-Lc>9wp#-Q6EmM~H8HQ1YMb*F84YGc@sQPst_L+Ovmk==x5b3ii&DLq!G> z0YkO^;$ejA0gC&HSi}(|aMoOJsomK*&};A5%V(Kcax9OYe1>2WMXk!n3GPEHj0D(Z z;nHVdLv&>re=tD`&=|@u!k**V#G`VuT|iIddn0aTYz9zL>t}KPwjs zHQWf@Vy~7OR=BciKybV4MtM?)Q3xHzQX^dPV+UU#65m7Am%@OpCmsJ&ikH&V7v57B z4y*yNq~eJdF`WgXY5HcFACh<_h*;F zGrOj>tK?BA0FgbSIoSs7E|+~UlfH|kb6~zAGA+giT!C>h`I4*yC-k5RZ)S*=$>IR- zp21wm$3~NF*3Nip>ehwkid4&Y@%%I(Ce$-R;^Mee zva!9~&Wl;qWHiF-<;9NTth!q~woB<|ds><${)0C5az~MxzK}z5IZxNH`*%Z&iy_DI zn?2L)Pr_laoNfPKF@hqBx=UT1Q8=nJmmqy-q0=ygZ7{KIMRqD{r~vQl7eam`QRt3Dj*dQT8*AN1CTt( zalCG~uFL9vS3oP&=#{!pIl}^$YZkmI{&}WEdE)*nf1_2;b=Ms|>W8 zg`U&TLw&BH%M07rhe*krAL3#(;;`JXFv)nwQ|g?cjt9Z=NK)*P*3L==uC$hG!^;EXj?Q$5zHo|c$v!_W2qj&%1>q1CpWw%TlhF^ z@l~(UC1|S9Uenh+!SrUJEykblqz1=X+cjn1%M*!@MRtZKawKXCFNc%IE2KDIFt=Sx zPm(Jh{!)nDSS>z7UG&;DSn zt;$GOBvB~#?H(CYHY_p>>fB2lvg-(y4OlH0mlszqV2X9E`A0yvj;D$#pLzw-rnM$M zRMAcH{+{2og?pWxZkQmRJM^HR?sMwsp+a(E+uT;IQECdEgNVf_$EF%vjf}$@O1@=; z{d}vQh=woWSnAt`e8^|Lk2Mf^+C!VH5#*6sB`?@tM4&;l^=uW2m+cjRo$57Y?TaBrytufA`g#+rFW+m3 zn+lUOBkGGMjgyrT(l(UzT=1$`fU@!~xj92Sw$A7WYkB!f7$KVXA4xuw1Jvww!W}YnR3npaqxdS7c)~yk1r7h%q z^k_s~H55?arVt{sJ*J|IY$Ztat5@T5v?q9~7>AgiyDWYL^CHW|mNB}TRAc|y`x7VZ z+BT}Hon^OffPIH@j*-HH zFRFEA6i(<0yAtNo<{jC80`52Qz3*grKlf$uy;6C%XR`~41)fn{LVgPT07cE=*$k#4 zma@6N{Ayvcn!?ugFt*&fi$rzcO`mnhebG0~%ENstF1&!vpzfhMc8@yY-1Pn}TPBbv z65(c(uwQEYBmeG@_rqI5CT&$*j%|bYUWdam^&=-0t@Q+^=ru!f>%3`Hlhv7`7ddyw z&_3xwbPZxK%*IZbbJo-CRVK^*+~#;$+fml`nB&nI^934Q0Z4Z)0ApfvJ<2$rZ)nGG zG(W(G`|y%7^zp6V#kzk=7jMqR5g3%rz}-mP2~eeQ2WhJlxIk$A#>fjj3HaAWlL8(u|E+352Z8Ei_A*o?YXIv+*Dg|2PGwl@ykl5q!ifxP- z6CekqOsZjh0M3FMTCRh&_B0x17HlbC8M+mdmKN|SaCN=WcfN z3*o(npH)AS^n}xOkU0auj&vAH)l&oy{@%ZX((=9$&r>99bq!vuYlQJ@Zk4G&+OVzN zhFywvR(jwe_Ky--6e|_V9HCeV^`jRaO5>^OiFXRBS1kUpc^hZTUL!qRIrFQ)nc#%& zDLqmNAq=8A1dydklJFx5_DVewSbJSQtX;*EZO_zTn@(Hk*-Loj6Zq`S3qTPq7UgUf z<*XLvIP&W5d3qTLHo2s?N61%lVa3&9{D~Z4K{g2gLAMCu~`!>$I+6 zP~RNr>cP4d+K9u`%W#A*d$jNr3EJN1>0p#U?I^FUiS|iRYUE?A4=tf!#=t`eeWr6u z=*kqn@D3`$hmmdV`}T~95UOX)z6CezgfAb)XUw|=TP94sG*An4YlGJ8b2P@>k|OCK zWDFuKu225-fqCp3tV1Ru1?(uywL|xWkD>yRPs6C4zFiEP)FF@dsc9ql4~&D@6~nEZ zIRAaZ@`pzQA^G7S4_pAKn?OqbaJ0Sr0b2lUSDa^GHh{@OuyfDA7vVEXso&?B)i>a} zZ}$fL8AT{K9;Ek-)47LUu%|YU+=CJfluJZ3iv0d8DIefCto|IQI!!#J&rO5XZ=wQi zUIx?xrskIQ4PDTi6)@>+r&z^>J zj2P!Q#tcD9g00|{w2grdOwFM3EY*Rk3bw0ac-8+&y8#NvWdsYcz* z@ZR;355AeP`YI%WhvAig5PjhlyS{+F*U~PDTEb=W+V(=?n@Gx=BD|@%dw&ayj$Hal zu?al-<5~PWzm%qc901U4=rz#WQ{l`QfQaRQU*T&8hS&y(_-v$;3z;8agDt!D6Yo z&KKI0Ni5F{mC{6GUxu2C9(T0oCUoJ?6gmX9cNcKspIe@+5lv=b)1RpuTHJ^-%4K1n zeaLhei6N*#aY*$Pp5xo!|2Z?^c0N7wSjB_|?TRae3gqHoxSP_Wb0sdyCg;ph-F7bP zFMRKfB5YbGDhw?v@m|>e+bs?eYB)PMM;Bm6#Y5H3*H25`-W=N!viEx%t%0Ucuf$f= zo7Q38g*(m`eZ@`rBJ1q0`0L)rX;O*OIwWDefaa5p*W$d#@U4iGLHi-)r+tYbQ|!UXA$9-3 z$-Vq%wr8l?05Je1Zvqaae<1jc%{`Ebg}Ao=2EeegXQ>~=W%{jkU$%=-3rGlH+=;{n zZUcVoM0*0k+tB^PJ8ww0#CCr@`)tL>@8hd`6B7^m1Bt&(2BP1t(8)ncWXSpGl+Rt< zL`En_ZAMf5*u%cQGW5ggk(-8?*!#9a_O7~-dbzAVt-(yI-yz|yJ?IiHg- zqhSfU_{$=mWUo|J^1*z5_Vr-yF;Sdai9_;XPBnm`+a*#t<;1WMbsovPbTIHE=4m4& z94cs2G#SOQv=17~`u0Bo-kFU8-v(~~ev7r(DB*1sqSAXm3c6?f$qpnC2)U-cfk>Hx zFl}b-d$JRP@Y@doS9XKJvNi!=$8gaWb3s;{B}%gt6BJ}i=rPK3WS-Ofs_%4!r66>E z2A{h|QIO%Y?eq_(s%DRFqM8HzO$pi+&+zWw5>0OU1E2XPqkY9DZ=7~PoMXzgsE`I1 z7Yi4+TQoB9PyLi3@f6nc^9#OX}j_VT>{U%$S#LCDLD)&(n z6qA(eRFV5~A2yP%^Yfie(yTVxTS_EHzwJGO@%{Z@IK2BmRF)o{pXlV3XuT>V`<_1A zKBU9v$9OYX)!O~UqifwsR)4sb@tR{PZI{>`@si6%vkw)b8_HN{OVGP^4m0SWwNML6 zhtU5}2P&)W!#+%ii(XoWBb5KXZXH6}6@l|Z&U^+3+(?a~ezO<|$Q%G$9)OJwg`X+R zDT;KWrP!)dq!^S02L6!XwJYR5)J%l+jQp%KFzQ@@dd`>MNB^D1xA)`r>NTxxtidLPcnh=*(k61SC z(f)xIjc8iYCcG34FVWa0?G_QM?poibuTRGrIXM)&FDvOMdfFcnsVG0{7xHwysV$$u z7rSzyF%a$U@dK)8te0k^gM0#Buc(?Bt;G^;gDTo3np9QXUY#x=|7R?_3Y;9f7GOv< z`iJUI3oY9p70>+qjxLZEVM-?cNl74u2|nEG?Pts_`?!7-bGDE+nLB6;wtequOo+&R zn`wA7*5RWpLwXi->WR3_xx=?TF z_etzG07Pm-@ZyAT&LIHQyCFGkIz!1` zKxp}a2ERsEU|BR*y+T)5CGC`u(K{p)`t?53@UBzi^S4%&HUIEu6k-%&pu-Jq2}Zuk z8HlHctf!D2X!frC9$*w543H+kLV_jJz%%{r29xg=<@*=yz#=JwDS24+FRB8oLWp_C z8VTDlCF|E6C3NKZp>ZxdKT@WXPzjtN0fKcC^e~pwY#0xB$Q}o#l`sd=a^OEfoX9~Z z?*1EJJu&%u4jhO=lpdXAaIt3&yeY`)msGqd+yO3Kksd9(IpeF}2HHjaTQWYV3vT;` zgkKzVdBP^9*i*B!-`f?ViSLVeTTr_|8oX6AYVgwh428NH4wliCp?Qec4k3}Q@Pa&k zne!kv`V2({VV)mBl28K`2_8#^9>0y;5U{!pQ277I*ejtcIb%D&%~unJ0WXF~$DB>B zz{YUAapKrs%FF%#NM7)x*KcdhW0|A6@3B+-77iVN*C5V?XFE@)s%bxDakw2_~ogpNqwZS3t#55`0x$B>u=h~ zn0Tz49CO0ARUhru#c>vHn;TU%*O9mhNchZ2%TQ=^7oI6obb4< zQ-W0QA1h(Kejd{vv7YhTaOkEWM$K!_U#A9ZQvV1$nnm=s(Q>mcFEuwe6={S9#N+y1 z9m7iV84?Pf9-*9k)IO|posyR8Fym%j(2FpvF7EZ3tSYagOujcBi(EEEGiXywviz_Z zJ{K@Ye5)IGm&nnz#B%mn-PIi;g8SMtHta6KA`fw0aPpiy>HX&J0nQt|L)hkp9j-y% z)%lFSj+Ugqs=;*;Q5_;AKd^RZ&gU?)Wg$F1J;qZ7(^|4h9~_Ouw~mtaUS*B0S?LCk zUWcGpm2{2k#|Aye`Acg{d^kX_)<2?qic(De0=I~MbT}l6_F#(s?1d!~w5}{2Mdp`x z+|Ct1e6RNrjWUpJc|W%xm=u=6pqy!OD$4t2T`R<9XqJB&PN&@}fN?x_qfAcSN5%ttc63uGlJ|{k%mtu66SR6n05H<*H}RtDI1;^J!ae}B zLnx(K?WyASLA4WPTcA6nFto|k3{HZkk)B*beiL zP+tBJkQyZy9d5c*`AR9K5RcK`is_IFCAl6^H>mhgX-zPhcfPCEr2R`fZ5amvQnfAxtC83H31X8A1J zfZ1|pK~_s#Bb>%q;+SN@fpRwre2qByq79a%jFT}=8-mag-_e^9QK@$4(xL_KNflcN z0wESWw>UwZuzkrkS*xvaQ+|u`Qa2PA=KP>+`N$AxNQ#Ga@^W|jlcfehIs;n^(8tk> zW?UZaW&sj>1;_9+OqwaGOy<;u2hK6KTDUDn7*E>Q_<4X?sv2pG#@1E+JYXuIKMsyC zfrn%ixLRAIh;yFtTZ|1mg*VFWXQ^=mId-%&f2fI{6w;RmF-B2Z$d$;2($C%-Zjo@% znJhd`8Hf`znwSFRO7P)~Ci7SMKzewb;vrZ9spRevfpFkOILlV#rL7r@;(^O2F{Qxu z{v%;qA|tZ`yl`vBjEsLLDsTU8r6DJ>-2jFAPYqHhS`)Qrf89TuH5CKq%U%N41S9WP z!Z2sclqYa*&|`2WOrz z8x^IRfmF8FhbhCw7VB$+(8R^=$2+ic3cPX6HCAA^!uXJAfq!5q<%2z+ul3gyf{q)d zb<3wz9~94Z!+n(ml&3okRxFKJ%TeKk8zWTb6aw;z-ST16yL~}rLfWUw zg+eO8E|NxuqRS4EQpi4-WEWLh-&qiW=rhdsz%MeyXr;y9Z}=4rc1hzq|En`obE2cD zE_|EswR`Q^m~EHP`Hv}t>F$@~&QzDz^)Jig%iFEMa3b&k71Q>>MZ_Fnn3Yp0z7^2U zFXirl#*g4KXj|K4kAO>aUmyGg7Z4NpCF0!egWPIK`05YC)Lqm)pLNAr^l z&OCVuaT;ww#H7?U>~$M`c;JIjD|p&g#@&I4Q$B_0N-koIoVP{eeU?~DrpA?ll{q*p z%x7VuF}Q1%dp6*!bvw;aHEbYr@Kt<3RA3n%AS!YdhZ&sYobp9 z%E5A7>&^^bDC^ld7GLp@$Ig9_wQHsC9HA@E3eAkqkr^Zj?r7S~g%5}h++5S}X9j74 zJG$;)@~7E#5BBk8c1`wmB6f}T`5JpT?vb{-vs5;WZ_ zk{2AIBjN(VuDlipcIG^%;Li-;cnVHGzDE*wuG7vkKU4+!bAoul^SMBfME7JupZi1U zTOfSjOk(r3A5c9udqyvpj_-h2;@Z0dM8B@T17yCFeXWRJMt}`IMc-A#)&1u8XK0}v zv(Rh&=fFT>yk{kFAy$wXxDX3St>u{wT*&IHls!|P|C{LZ$9--N{CB+Ki15DBca8AA z)AtYOIXKWq`#c`%bI7$w;%&XJTmI@mV#{%l$!-|TuW3;%fOL*FL`^!RDH3rSv3?u| z{+3P=p&BWbGc4;|_GFX{aoQdIvo-COaz*Kr3_@c?6gP`+trm`I1SzZ#O-|M5 z+QJgvr8XK2>pjm(mEkk|LYP6itik$)pZ3;G6&+2CTLf_-UzF~J7lq}!Gd-*IYjl)_ zqQtX}un|y`vU>D|DSS}4b}5(mz%sijA+9Ph(sBqnEQ6#w&6i58CKaOXoUCBwH41d* zME*TZO^jXskz>XVVOeDm4MIx+V4;`$lDEFaYG&`=#<4QDVAoR2)tVA&y8LjQ-P#^n z1rwfCsOdTs!zW?c8OW{mzD9}_c7_x{ zBU*|kySUjBb+)K^l2AzkPl4v~&!f!tLX$L6O|)tatt8qdJ$(B!2Yw~|ex2LaoA<*L>K{qUt5^N_+?Jq5_rRD4qQ04M~KI@ zu&WCN)tN*!h|L@$SQNbT+dx%b=vNC~S3L&Yf{_slKdB}C#7|m|v!neYU9&$8X|pnu zRt_=j0y&2`(?F-`F6ET5eKD6PTJKv3xBv_-6sVHC#_^FxMR<*DSDb_-XPahsq#VR) z4&d>Zb|5zk18HIbi<+a|Et!Y3tRhrb4#^rXP1kU>pu#Gl?iG*lG$L{Hd_y!b>uO6d znop*%b9pD*Tq%nP&Enq1){frRx~6_bedT6efW0<5X?-Ix+*kO51;eJ(fGRoslRVTAyBPQ{zgKr%0^A;j- zV}VpjnfSz`e695*CGM2DT<8Pi9a%4gmANXNHj=8rt<4O&`Jk&mEgw}1csbsWD^znT z&0jOuE($MNgDpz5TN?x!hBokQ?Uo-sgxo~ge)TNN?4H_D>ZC#%7w&a$s|%%3A!e0g z7;0=qq$3f@gHqwE)z-l3znmhzmf&JewTh@cAr?uUEAia!A7g5jg$k7CQn?c<#XZa5 zvvAlVSyF8h9a4a2;E`0=*nI^3d~lNze-cjazzM2=1kn2Q=otss^yVp_wbY~jY*Mw+xiTZlmBESe2D zg96x$==c7BuONUS(LBB(6`LG)PGpek%I+xnE1Zz1A4S)n*rfPBX~$XdUN#b$nze6zP<|<^<>oC(2%>X;HxY%OH zRvSI4*{%Im^>yraPc#N-rxf+iF-=`!O>g=YPq zC}j@Wa}~nLNqZf!GTqwAZ=0e)JV7_c%!%8bKB6cqvL)W*62JS@RZk0gkoY+{7A6*L-^e*tX<}9DapbfTP@BKKe0`OFHH_! zwqErjJ&=oK#YbTGU!oMy`PW_NPSnvvAeIBr-$ z1eObe*3`rGPf-@)L(yK>)WeU%ScI*jb+C5O$42-X1kos}^>Vv3NF7FhkEg+qAX1si zSZO4mP>dB9J?DM{k}QR*tLs2>_DI35(uX`mppC?tY|B%Sim{g^Z(H+{uB4uzmc+#E z3{jFNxFR6SXH}Waz-%N*U?^NFdgS$P%BNe7b$CA&!YpDsnJ5!5;^-R zSYS*<3pfAC(UcL;;pj`oq4};5;w=c6vUVM#N)6a<(k;f$V)_lg{}-X4f)D6#=0DB$S_IW)Hp|aO#QB@rz7WpKul+1Kkg!$I+H`ZT8*EnE>9+>C3>e zOn%(>EU)If)I#4}O{jxvJ;sW=pUEHl*My_F$zy80R-|okAO`|s=1O=62`OvkyWtbN z8qPYFgH3GpBAUC5l9l51v*|`2yq7)pUvRnbOKxX=AuOLEwEC2+)4C&~2?@LblkNJO zOM~x56DSH`nG3Ur9SLbAwi^2wlSvxxMrx#0A3~k+@3q(T+f8Q{j}mINT`488(Vk)M z{|-4kW!~W?WUgKBmy>6SasUd)RZ+U&jngw>X$xKyoR)=S5PT~XT&}Q_j|R%LX3 zSU0i6t|-Fll-to0{J$FKaU5!*m(N#ST$7Fzsu>b-b}QM3E-0^Z&0PlE3mXM7s+Sl^ z!Q|SY6oC2dKa>!(?kL!jg0ue?d%}_5JUJ3d!^ihxm|jaGhRAP`sx?DZ zk9m}05?0R4W>s}NaZd?#%~ms8W&8aR=0zQzv6dxv{>9OABqRL~y}#swdqk9KR5GGmIsBgx&`i6e(H}3@6CF=c+mjU! z*O&>f-sTon<|3Q(1V-Mfav3PxdaO_yjhSFSlWD4fjz&T|`W$Uc3llv7qlN_|rEavUiC|HouIW>RkiRuc^2-(%8PH`{x2js%8 z;uitHZceT(pY`l_`1XZI9sz*|aqa(TmwPe}&DpmP1JtPcE$ zxfr=lEqsvRZ5qQ~!mb0lrcoAyZqX5lEH~AJLw1=VEuY!w19{}F14H}er$^C2R%o6# zEswqDX=s~$3m9n*w#etDsFsV;?t};nh(&hC^PDUrR7kCn^_(m-RB@+O16+A9{<>CD z_py9rV{s&|)ONQ2PJhF*vh-j3HKS8O5_bG*sQxRxX^-SHhS6zj6P4+yLwK?1m(XO-4`k$K_#3 z*1SZ&e5b8udd>RE%A71822$)b^fZxH2lzyVz1~~)xF9dx@)b9z-hp@Hs0brv`4T_woq*8& z;C-wG-$Fyc2ZBY-iwa-a6%eGvVuV|9;)z%g*(6|mBGBvOwL^amkDp>&nF=|hK4PZ> zh3j#__a&!LJ@-(Yg^)1gO=s7A? z+HV>7CH*2sCzzZI-jNxTpq(mQ_E}RyCsT>P2~+j?a#dRs~rY8&II)jughBdaJrCql%6 zgkCF+FUs z_f4IlFC2E9+`q!@fn)H)%U~VI%Y?;lJ1j@M!XwXI^Fqv&-U9Z!)+W3C2i5%-ey~sH zoDM=Iubi13ENH@eeKdJBv)mNB61A{qw;4`pf1EUi9oWf}Vz@yp`D3Bz7hN^O*bn8G2h!jqNE8`de5ihbsb0ffDnkP8*y!dUAAyO{0fkJie7<56m zpI|`Fz12=&w!KNB5XWH=a^O76*||V7;blrk@=g8ZOJE&T>|fgj7|sl)MY;3-r44<l+<) zsl}#x_Nbww0^e-yl$7RIYNa_X?OUOqSKO_6cxWS@f-~>=v->Uyg8sS|VCPA(2@*r? z4<`iUljaNiQW!!??NMb!Wdmut@Qx3#w8K_~acYAbK~QZtt^Jq~Z>xJ>cK97|&;9N? z@aynZC+aRS(kC`wgr1Qynysr+<~IacUo3%VtErI_W@w|n@4l!~2a`BMT6G9UgQ?F@ zc_IJ$V0yyOZ+`LP3-!r?$h*LW`rmHUe9?r8P>uG^pDCSvW1&I#-|HMDu>7c@_MY~c z-{WceiHEqi$R|KjDuF_gq0f!nU{9)`9qPh1qnxQbP<0zH24%gB$D(!08d~fCX2z{4mK`_V~uwv>_Ob&(IAa?U6tpHAp=m zEh{Q7M`+5`VI2~Ja8r)t3+Ek~n^6<2FXYVR%{|sH?2PU0-aaW(6VNubenpO3n)@c5 zPMf}YFFo};5o3eK)VxKkC$cz0W-SwQR0Xj?u~QD*R`tX$Ls+^C8>)Gb22^~!plt_q zkBq#a&7{{}4Gc*9_?@%XuLD;TOtS+o@F-@qIQF6ZJF@<*AfL)%j0KYAEq z^!!A*q%Pw?oW7ifxj3j{pYa(b9<0pG^d?vKBsC-#%k7!4vta%jfTAcRo2xltzJAm3 zijcg9BL4%F>m_8jhq`TYrGs^xH=S{=M1IBXmOSI?r*M++&nH*zU*+?YM| za5jyDck)4LncUVr)#$XGpMZnMHxE4dlGx)S@SS9r9m535S7D|3cqB`I96BiB0vs5# zA(9LVs6lzu0NF(F(a1sLb{wc!GGtwGuqv!jrw*FHyJ6`y8p(c4Q}!)tq;RPr?lsDh z!8=p3E;6eAw|(j7vJ5z*2y0MxhRDMglOuMbf{HiFCJT;$l+L*-BU~y9vQ1Q(fi!KO zuAV>%O9KG4EPE2=-4#Ld`_*rpnTsTD~+OvR#Shw2Jj6OX;h#+}Ucs=|;NCin;1078qC z!ZAc4cTK&AnQ`^9EEInz{^;&V7Zs=N64LcpJs_tVw3sBp5VmbZnXCl;oReZ| zR7NFOHXY`zH!<~;c9pX18X%(*6kUTD#gcWj?RlGo5*pB?Dmb2Cegk6*-pu!$4gHQb6u z)!4W@Pq^=bao@vP$!Ku^e)iuQA5I;JcuDTrz=K{BR_K#g+%WnV+6horw6I*ee@AiC zJ1sNQXK0SK>MMHZVY44a=I zx`FklP@~qpWVu8;L>Q?Vu9eWYm&+k})o&-Ix!Iqv*UoJ9{58+xd+CY0j%jE3+cRUk zyQ)xsq@UzQXgPv*F3H#}yn~Dn|C|~$|KU`jF_#d9dJ}cbWhrsDNtn=$Th8eEB2awZ z5H#!`5^Dn)ySwtqKmHX#=QQu+9HiA>Q@?hw_kiiq!pEDOHtYh+N3XcPHzhmd}y0ld<)*ol&|1J5r>i} z0Cry_gMlc>jAq>yGk%cw1|o;nqhDfQr%j(9T5rf`kLreQi}n+WZ|EHK^)<=EbVQrz zg>;N=g+1C0tR3nEH9kYr-GF%yhp!oRg^LYIY10Vyv+S$oQ1lG2-Y`|67#*T+ntk zq=O~}$)sK-@(4&ICq#IUcEALGHeV&M8b`W^ABN_e@IJ13DhT!2{o*E=p*r1L>!n5OVrjzFFPsT7m#8|&$ZVK5P@7GyUB z4z9R8oaMq@Yd^iW1JWZ1e-n6?O**!g*o`Uq(%r-G+8E4VShEhM*V^|x9H={SS##j( zEzoK(JGFWpfFHE;y*FKG3-p@1&Bn)IX%)CTKBee??C=GltY)6gU;h}Bw>7s66iSv_ z=*2s9SQ4I*dgEFlnThsVQ&@o!yv64l#PLsCQ7v{hyvvYwZHy(+@sNuQi;?TZcaq}* zSDd@&R3NT|c3e5_C6z{0LpI$e%{aI&Pyw(#-=EnPVmUIK;m5S{wuoA{L?^s3?-I)! z$M{bS^!=P@*U&pY3|vvgj~QQ=x#-!Xw{NvA?(N8sBQ;{drWSa}sR?wO1pZ2f-YFQ? zI-fZ=uGnqGXMGpco16d4d*4~~%kQJw@?wi=k*8&!KEY{Uf2Uy5ap@YqJ|;8MVjVT0 z8r{w|k#!jrh!k_5>|Qc;Wb)jXEpBw&>abZyxyN{34Y?0uTfA3WRi8z zC<^cnNA2zo4-h`iO_>jaKbUSW==9CR!Q$Gfc32p}3EW)r4!f;9o2Nl{WZW93r`@D+ zHWV=+sZi_u)=*G>RGv%c-v=@h7oXpcTNTD#-RKBt+RU-6#vJCc<-t{ruk;-8S3+ce{G{A&Sn$o0EGKryZb=sc82A=i(oosZJu4MQ>$PsPoYjZgHLe z_$uc7$j43}UmeE3{dLpxF6_%Fgt0pwKTPxz`K;qd8~QF=I(c29^hxqIDZr}rNfUjf zX<efBcE}8jiv8?!JG*7r0RZh-j zdEsBp7@Pifti^7Y$1SCl2g^C*SnvzZLtra&eDG-G`jm6U3&kg6I-jvu&Ro%+SIcft zV~b%PyM|tzg3Hwf&=6a}ct{?vm9ue8j1gd;ZpE;&j;`}^6~#_QG82nyI53~nJ8y?Kn}nJaG=M_`5CS^DA+a}Rgu%vFSp-}4nq zT+}So!p{j9UtFmI3U4mwoIobLD(9?D;(XJmy_!-IpT++q^mY>$77ws-EU7}fU(Ms* za2Fo?2Rw93jnK<%Z)d)5(yCp&oP+cIBXiTIih15;|37@4Q+rYN z+iDuSv2EKn8na=)*vZL0m-}MhtY`g#g?G*|#}m=2uhl=}fW)RTfs77foeF;@oDX+O zzSU_nYe|?7|9UpqcH+$Bpi1%Yv*-;Ps_{6}_V}Sh_sIVKSnj3=$z$U?&2JyIm+*UoGs6rWT=o8Mx0;SZi@C`03ixBVKO*HRrDo_ zL6Pll#0g~rwOT$Qn~K?>n~1bX(}~7+E#RT6=`XFnxIcewd%5(ZyT4+bL zRfGJlfbEI#bG2rj_k1u1*qs^s8DpXlVN>ZjJ9;>OH`5uT<@+1cKN35K5GLHakO>-nTm!&CeUkx`~hy z!PX@?GmekZyvEG2qX!0~zLLOwD$=B7UeKqXV9e4S)hY7#z`m|aH2Md!)?}$J8>c36 zR3!?PE0XB@LxrxS!(LBD>!uXN>XAc+wh)$fA^gsAthXLzugz;fke#lx|1NO0AJBY$ zLI0KF_lARrFrZcMHgOs@8(OqS*j<}Su=jxJ29_NGeSZdQ&C z|J}&Yfi+4Qc?fho`E%Kp?U-Co8horbm=sD*pt5|dbi@h=3Mq_&pKgY(!PVvL8Crm) zh*5=E!&Q!f93|P1*Pte5OV>j5K%KV?j@+zM()zIX^L;n_-y3JP8F=$o>Eq$dbl1tu z^uM0WqnFUWZ72{^@#usR-n908VS0B{+=L@Voy{zX*DhGn&He=poSSQ_lGSmRDiLIV)kwJ*VJMj!@BTl$I** z2ud(-I$xW2)`DS$cXq+K7F}`SMvV*O5I}f(;gyvDzkVP>sJP~wlo0C<5FMk~@+?gd zTx}SQw(Kwl+(BzEs8FqTk_NeN!LX>;nSyhrIg?c%Zt&(6nTm}`5Ek){y4fw>=n)?B zQo6~VuU8+s5Y8<%h>v0Neu|CVZ44^DH2o56dUg%Q7XhThZ#(g>o_QrDVBf`!C&{{X zrxZ2Fj7_<9=ZLoGjM2HhXQJ1cu^e>BjODX=b0pRppW_kMt=wQ&zwr{*t=&KoIvxdQ zyLD@i>1OCn*{q#;(LwKVQtezvU~(r)t~Om6-dchOUeDhsw2<)blpJnP_a+Hu=d7Pc zOaX~Lf8sx#d*vrQxn5|#Z%pSyKi}DY0{#wy`ALmMZj-;k1QM;>un_)n^V1vK{o5`+ zwtM~zk-b@Yn9S>78eQh*msRtjFlOoY&hPmlJZ9;>ReMP6?w6qcB|Ub!;kyaS^!NEk zGSkiAoXbIe?lY^%>aY`gPEH(ipV{ih!0~``l2Nnqa<>_Pz&-=G`=G|q8X$vBVx?;8 zP8znQy>C_C+2L$WEg;y=F2cW~-LPq7Cd^E9(z;SXksgi?Q_@sea8xe#Q7&eBRUVRdZT=YXM0*J#TYAYxv7ti(ujVu`RYXOCc<3M?BNPMK$2#??^T{guJMy;N@So@ z2~Z0KX=P`_tlc$j=UvEh`vb#HPOIof$v><*i-Eu4hmI{`xpqWNnyEK8s=^Nh zYH4IKGI7>H;S3hXM~H+P1TId}C?Ip#&PjK6^8R>vr5P=ELa7m8J&KvTD6a#6^TXjp zZZuRGu1ApU)Q#(I;F4~MauQ|oaEM;p#p|ra=jf|iMzJ&zCW5=?2 zeAVDvg!L938NFcUVsV5z0Tj#hy+m~`8%YZXuvculN`EtEbjv%<&sD>vW z6c@K_SqFb(LYF*?K(<~vom9(v@=!saam8F=+*+q#XOb){!aQxw%jyKT_zJ?k8=aI_ zwlO-Xe_@^=ZtVf%Jrf}1vn~JVKvCD2A{8QB&V!bT7rUxmMUSs_n8->pnnVyxrpvZO zc0%kr>|uv1lgH24I5D)qVs(5#SGsQdlh6j1N|nLZJW)pZFv=!|Lq3{|{L+3_X>XWt zImeMp+EzWq$;&3JmFnNhL7akIVi=zEX?+U8zc(rR)#en1+UUI_{q63Ao?ohg*Y^s9 zd8H@Ajm@o9s|Li!i+j^eZLL2itCT6Iyl7-uBieO;9Ia4KR=1l*Yq!z0#9PT`M)8qN z|J*3^g{n1UW6!^ntOEp2PiBdk9>17s{xX!OL-2wzqyn;jvt&#CZO?a{fja}aP@kB) z6cq)ZO0wU-ViX@YTK&=gaGwPNg!b{y^Et;1`7L_`Uz;mmQelcBUu#%N)J_dM2Nh@E zWYZ{;<%5+0Nt0nNjRIJXFzUDOGN}o#Ueyb8Ey03&Tu#^lMthO<;YdQ}g-HzlW_x4L zu%M*J3tE6P&B$z!ss8QuWRSIf#Tzyeeekb{eEes~&s?DbTP^R{%mcS08}CCDgJ{;9>jMv&qY`s_As1h z%rS4|UTGqoj{g3@y|u9ZRtudSq>=9qLspZGgr=8JWd@X%SFT&eicnDfB~#7CMZ;fu&sqk5-J z>jt5jJ18)71=!Sz%9qiWDxG=1W9kVT+Ty%Dsl8?Se@%_LVI0 z(2ZXdgRl6c(7RxkT7aWWzDeQc8kF7mYorUwR>^#WF&T0b0Ykxhf|J*~qdz3QDyI*F zzVt#LI;pn_C9U21F11nc9*D!X(m-8gpMKoJuK>?vUZCV>P>G>%6*rKZT1BGiA*4`I zvbCw_${j(o5rFHNifQ>zsjsr^W2z>ER~RjvJ-=k;;i13_l5o5;MvJ}i$6ncR3P*}l zZNlS*upJi!411W--^qXDnyLpkdvLX6)K|;vM#534B65%#)=?R~eKczB`=YMSd|%7 zqPIk|`X4^E@CZpmoi049-f|CvbEpZkAjX;VP37=DKR`x|rJJMZeT}n8Z;f@4LDj@F zNqt=70Id~D^b0-&P*%R1*4@$a2&;qQS81ulo+F^euXiKz=1H5S}KKra_PgV3?7)`iMd&9 z5U}v;<1$qYPtFzBo4EN~L0_NO#Qd_YW^UCh=!hMPlFYnBz3!mZuFx^P>E)%+ z`axs`R-!JMHX519)hZmchJ8cQzR~b}9XXG7M|xOtYE?gfhK%@ajHBf9z%fMgmAU$x zKv_F%$}d}|${cC^-8wNMUoh86qihw^^sEg-dCz2`g?~1tw=huM;;?3NmXI$i<8Z&S z%~ahL1*v+b-R)*KRtJVtsH@|q3(&1Ei|vWD?a1kLx@(6oL9}LR7v#lltVQTS4xc4b zfXm7tfB$cYqn$%M{tI64V{zRG8mgM9vm9Wqi;-YtV4l$sulNzQs^h6xV^-Ozbf>)c z7VB<)EM8=;nN@i%cTwqbInnvjJN8=U*_mY<4ODzCU(V2UR(-g?zvy)Ewc{0B@@XG0 zvgb|}x?V;}#VVjCF1o~fs8lxZz0$6!Xs~d{m~OHYboJu3m+gJE@aS6lQ)&#KIj*)D zDp!gfWXIvmhuTos!P%ZI$;_djF4Mx{dOBUAMQ&p%U(lQ$WSRhjz~;c{$;~q56aE{G z;|}!v+8gRP_63BZ)OD1!CatY(hA$~myX?u{mh!H2j;oA&Ex=^|41Hy~wS40XrM4gE znF9dxUZgs4g94D-l`MaNI}%3vxM0FR6R)GL16o5Sgj9oB1{>_rI$@h(<3Q$(2@8k; zz=%rfvOgiMf(PpHh{$Z>X^`!K?Th~+cl)sxXO|tL(PDf;s4L2A#H?d{&{~5yz(nEihl%Cw-x45(CRAxiDt!kkSqk4z3@CI^K@0$O{g#i0bI@S zt(wjb%S#nCgo^6eeyTrG|25FWZ^ulsM~{&A+9ZjDeGRM?_qnSc;QXuJK*$((4KY87an6?pX*P04L7FJE6K|imk~8+zWLA?QgdrxYHf8shla!3 zLSJkPXzLPq7Xrd0v(P6361V?stw4?R%Mmip<>=3#+tP8qX2gh^P}h{ged_?Mjn6oe z!Ln>Peu2aiCm2;3W9R-OI^*7)Mowyb``rqkNjqps5AO9%B6a;^3(fFWP&hTok{Q4x zrNp0MoNOFhG|8m-pnIvfCfoqAFs7=DqqkB@!8|HO2g2>m&j!Uiq9v#?M!bK$n6&vp z{e@%3A&SY6*PI#aP|4lNXQGy)SKL*I31pp!3CP?!17}NM38IX9DU26xAy?aKeBDUd z?pgfoJ+adWzDA|;IacWEoX)@GbGF32()gLXri5Dfnaig7^?dg*vbj@XBB0_6Km!rr zqkA)v9vIx@*3g=_;KH4tg-3Fgz&uf5?889pLeA#lR-BM?pq_@b>v7Wtz){GQY)G{_ ze+rp{3s3YwkR_sO*->P8r3D>OfJJk`5baPHt;_$ckL=&m#j}pQDjy!FVQ zeL(+bD8bNwK-=|1-+gG2y3j$$tHD^6IN?Z`-@4Pqd>#aMBQE#Rsq2b*2_GYP1SAfl z!6y8#;&e!;$OlRdkde`rPVHWxl2L2*a+kwN2d4Dch9=?9Sajli3BPy~(mJ>m9!H2L zNVyHt_8MFepv*w1#%Z{v^TLvk0RRQY0U9`m{0P68MC?2&9F9F199X9Q*q`!uQzbYb zxGu~R4JQJ~BL`(bR^e`8RO?{PeU5o&lr1ZnC>Ds0z+gflY!MyOCMF4z4_<2zW~yq2JliJTbXp zv+i&U*Mc)&XD@>;ZRG`_q3_+O0;Ye~c!poHb)Hle232iY+6Ci*7Ed1I{BsDW=h=a% zYO-t7Z~Y@2Ys79?>0_gQ-Xpr;Zf#v?s^PEN1P7^SBlD0#i9}c*fkbju3w(78kMY;e zD%!8@Ep0woX&%_%{KLbkTa2%3PT49Ei_-z*LTRBAl$RH%{;Sm{&F+4|!$tT38&9?H z$cIb79jj!;c|U6NH`3LJWHyx43oqrs1Sgck2_X+sl^KR=UnL{5r5@sfBn;7sCSuRs1<93Lck;rub(hVDV zIKvIKW&*Ny_+u+b_QnC>P$KS-5;Cn{7 z9*uNHj`vGUgc}|UgZ?8%D!>>6KPuGFO-VMQO-};OFryII%s8kZ?0uy!cy>$_F2aG z@rTGcKM?sK+lI6y;b~w*V;8Z0wo#aBd(^HF=MU;=R8pEIQUgjaB`hpYq0W9gR1d7< zR|RudJ~!y+NCqPKh%?YpJ%UXo9W|Y&NxyjL-Wq#@^}!{d<^@q2%_5m|@KObSyqAJv zw}crE_b})2Cs>U_D6|n6=)M4sNoSbW33GEe%vgCDwN$dM%2{=`jpyPiuaUxaB#aK{OJ`I-uppsqS0G0?b37hp}c0787q<$^lyu!^U#_ zHH%MUi^T1haHVwNY8QMAb77oxSSIoh;eEF_@pSU)et?&TQ0W}L-T(S(@1~=JstXf=ZU(Z^SBAw+yrDaa#oRmT zV(J*f^jWWWOD$nx)K_QVbV}jE#RKzZ`S(sTy67AXvLp7Q|SRxWCeRb zUfqVM7wqL3TV$1x8N)C#Nv$Peh|3tQ7m^KVUq0$-MA{2&sX~E2ppP~ z4kj4M@eH{Y6c{N9q+5^q3bF(m0tr5|X^$K$ct43elvmz(hGBQC${V53s>?{+ zs?tXX3R=a$4V0|#IifA7snj%r?u=_nN`X2`z4u^hYy(7O+Bo+^iB51D{5VJ&wY+NP zY+7sQ>OsrO;t}rfel_V>8QMFX)VX4JTPkhnBlJlRqZ{r`$kKmZXDVjmLhc?aCxxyyEJaHmhr9StaNzD?F@Pps9%(PC6?Tu4;?c0P*e#^q&ZHNOpfL(_hwW4S|+&M4xZ zAFg2P>DV44JnI=@LpDm>lEozV(t&pp{F8ysS>}_`D3ioE4Sb6dkzgcwW?8(+FjQD| z58&yj*L@J^&^71k$hL)@YKa}^XnQhonXB0%`w+#T5=?W>Kcjv-VSx40`Lo*~E2}z3 zVeJTKQ8+JOvSEJ9(%u}GonlQCs;-f$2qjTA`93wx`gO|*tOf7vZeQk`Id2qC94x`J z?rLuNfLshX^U+e@(}BjOP1amz`_gX9G<*@%3t6T^1P`e4LDwtU&dsuiF8)HNT&(4Z z6(W%u3#1`@*P+I6XBGT$H@dma4Ry6|Y z6yFZxfLdh~+75P&sW~`wa0(1-$NMB%?Uy~k^AgpA{}+3)$L7rMN9G`e!c`=@72-b} z4{>$@v*aP5_U%BjCq6I$?S=(NohhM5*qF0Ef0=}H1;I%8iS z+24=oAJg(%W7+iSevy}c5OtX}&y-&WWvc96|Bp2~oZ}|Hfb-co|W1v23D znr!d^FR=1wO$m`=5c7$atr345trMye($kK~AbNTyWs>QIb``+2@i%5*E@|U$^e)d_ z^D7O=ZhK6>KR^wjILY_OoyT~qiQ%d?kQ4rc*T+E-kHspTp^& zE9=YU*Lday7l)iIC5p0o_Y{SM{iFMX2lFpl>|8xxM5Y1mta< zc+C)TtcIMY_i>7%z>)pXp@c6ncYFyFFHeE@=|J*(!G#%iHPKZ057 zjF)Fys_Go8Q!?BZ1OrnsMX_^CBU9uF00w81qWg1lG)zo!4)jBzb+zW)C?j z%k)NuFV^)24ED0w7oOFLItoBL)!r3Bg|EHfrD0!YOQfcBN;zsBhl%>Px~z0eBIf#e zdzeqHEp%Pl`k*d_WT#{qNOX_>ZwTcE6eCt&iBuqL!GtRgJ6}Y|4{9v7Zvf$jXBy2= zwC5QrYuMm9dL6oI7*vZ4a*Le9OXwU}%)ZBS7OZKG)J^7U+;$0RI03d!2d_LXkiqa~ zLd^5MzhzXNGUU`vKYD1!!iPU1wjq8rU-*PsH)?yn@@{O#y6g__v z`-0=XM+L zc}@yWy&X>tzr^^d^ePZIPGTSFxmjr;3JU9T1126^PY3wKF@U%|;+_01Q1#FkonS|Qmtoh)v$Cw5Yu z2nTwBFsif(a48fwo2x+Y2~3wPUt@w@Q`WBiRcL`Fe=JA&>q6Tsi+ts*UZ`|dz+WAMLd)MgQwdYBC~B)N9tHK${Aa~B8$7~_ ztHOmGKBmQ1o#&t!>_g@<-oN4=r=~_CpOznMvPtgW$XfgMJ@Tk6wyB^xIb?I{dVV

IjRT;UHPp4}J_04B4m z$cpzrDMK{uOgY;p+xWN0OzT&D+k~3O!e6<^gQ(%6@RH96mUZCsV!3b2`L2M-&>0uR z!~;)*m>mj;>Zch6I>yPKC-hqti5Yq0>iFco^Ve+a2;E=1)z{`LYJ=98kMed_Wf!X9 zAJ7QPrBivUo1Y$@N8un}!BHAgWo9V3F#~Qy5&bas+;NLB`&Kn!9?rOGwq*NmHE1E5 z)ZChMky!Thde!l&YZ1;TaVmjEF44SYZs$f6uPcsZiXo;>Fu7W=E6fV|6znZ;hzBaB zT4JVpX{VtcL2ZLnyz2eu+Iz_=nEeH-yF+qh?(f)iwCosR&{j73pO50%2pgNulPx02 zT*q0#Lw`#}uo(zuS-HX9sA-15-r=!`{=EtQC$Lq~OG(!t1OaIm_+No7-Tw$|RoqRy z|0}K?(S`L=6Thviyq@TmGeB|y8RE%-C53Kd-EzSV|Ct)}qn4XInK?u5U>ZVr84|E+ z&cFH~VsF`_&#wS= zLcf!Ke`K(JYCKz`=-?8f^#n2iH=1OHNi*$exk)wcXvrWaV7h;ZpPT3dN`cv_FgSU6 z&1{8zq`%_aGz&W702N9>GnH+Nd#PWW=x;)kx^pq@Bm!VEUefnB@~rZR9{AMCoHvw4 zd1gRz#Ms_Dd-X76rPkk3Q$)aQzc>_;)HC0+hN{&d zQ_vj2t>jk4?7I^JS!;K$fu?mz2);l7OvPLJ{zki4zC5K~TEp?G4erxSwX9UnvD_m@ z(5rjDl?0#T0)lZFlw+(^9Q*+PD$ZimApQp3(ZHG1RrM|Qj-d>U_n^S*)a<`8{cj#$ z<~>%WYooskv3s=NcH1i#T0`r+mJ0~QafhY8RUTsj?#K$X;My_St08*M)sd$7T3zoHpKsc_^Hnc_`B|hzA!ZCqWemAtRm(EImf}6!HbXBN)VfF5y>(!eqLN>>GKjek>Xlv(`5!*fyTBt3jS)LH!_o zu-BYiZ&bn{4OHO9p^INlk+`Umu?^ifB1f@}N|~*z<1Mv5tK3i+fe351Dz2nd!v_37 zS>ffw4K;E}$1RYmkCCi4kxhdHUm1`RiC4yq8l~0bXarNVC!cS(Q*aWmM*^K{|AA)) zeqpf!Y147w6}Ei7w^*uk!N<16>}sxF&w^$14FOv3N1O#~t*~Cu@o)8OK!86ecX6Oq zR~%~BFp+iA>X~!><%qasT8sG(m_`4p{`?!^^JtpuGEn{EN<}?aI*O-&6d_s$Ne0tX z6V5dv;{G^Dmn-oYB>N1rr?y8n=6ZsA{py3m+c5n8}@KaK@%zUJjQa z-9R%>ft8$nL5&U6n-8wY)1zdh=d6Ih5FbMB`mqRQ)2dru+qv22V$nmmSAOtf{FlkN z`ysUcb&$$$kA7Xk>U~pveljg|tIAk)2{7XwZUKaDI7Rx;@IBee(i%bh=EHi~|V0SR4Tx0?weMfmMKD4`~5S8>?_tKlrI;mG}m*?cObBj~9nyHmlmrYh@ zC!4=S8+Y^M7`&8Ry3n@@<2*T_et`B8eI$F-D#Z_E^kx+*Z@Zx)-nO`|a6l}}Zy2!qO zE&kg$iiOu-D@C(=(m!P7+pz^rw%BiWpBtj{%MVo5{YqozZs5^957Pl|KbgLd(qo}a zd!<5m;|(*PIRb`|aE`KB<}?NB7P(v{w9R1$ql5*rfuSqCB~^ai3WfuXTGb1Nm8*Ja zD;}%tVm6@^lbA!z30YF2J&Gfs-z)pWjyL$|eW8&rcqw8RD{{Va??iz@An1W=4?B!! zzci1Zs?eo8H6TypjFh$A+;uSozQZ zCDEpchP_ZE5_^8=$a~n+tdy;2%ySuG08~_1iQ0s7OhaD04DXk|6k2zT#1 zo_*?zd|xjG0rOlFWj3;fQz9IG%PzT;+3+n6kJ*)rY)8CoOP^+ra=EK8H8>FQ}Sbf*phmbK`E;2UY|mhG*U zDR=6`HODOo0Mcsz(R! ztmpT>TCdGH98a2fHeP5Fn1Geu#!y90r`VGz*I7PnCC*hy(#s7_ZII-Hv&0CY72%*& zeQiXxZySw$>`$#GNL|QWC`s?_M;0}_O(fI0T8waRw>b|4Gyc1jnaRd$=O<`W`K0Jf;Vy^f1!kO|B2ZEaD`Bi3f*Pae2&nJG0!a`l!g>jcRz93-zF`+F6T z)tX1xFLINre{B%xDxx7m%OJ17kE=b=>bRD){r!v#qV%48R^ul3NZS1@0`Q7sN0C=O;HFCJhYE-pBqKCLPgdNIdA+S5OrvQ!~8&t%Vu zk)tg|OLeC;?6^!Vt~bypt%2Qo9Q4+pVm}yKJRy!;*c5j0vvf03-q~vce?`Mob{?zj zG$Jt}-c@lA)RPTuAjcSl7&F<2p`z)9c~*E)o0 zS$13Du)$X|T9i`XDC$XtJyp%dOuX{al+$0Bx6 zT)c1&MC2)MOA5VLWnzW>_~inJ4voJpP~L#w1>;n8T>LBCt7!akiQ_YDl~F&aWw`VaAt*mQS}OTlm-ysA5@G(iw0a zt|sFcFphd$p+#3VboW!Z`^7yeL$8i3z%RSm;~Nc@%en?R)N<}0CODOXsSz`@F-h8? zUm<0P6*X%g1>w$3u#&Z$t(n2EV%~x^EEM_YU23MsJ+jw6HhnDp_MwLlQ_zlP+(6byyUeP)^0KX(tB86OZ`}N&0iF3 z(idSUDp;}$XG2%DEkdkbdeFD^Em4xqw-;11yU|dvWapzCPf};DW|ZDU`-o8Xyf`_=g9{*a&;H%~yvlR~QQh@xnx|@seMjX}5r)qlggJ-_nB zQ+lKuZUm!@9r8TqG$QrRrn7zi+@A*{*HjS2$tUUkw+APEbnW2^sm;@?oi2Nz1%;xi zZky3(5+??)Baw|fJx2xZbJLSBLQqmYVr%H@Ayk;JF?9OV&6?~_NZj`&O>O{wQ$_hY z-JPB{jrTQxjEQ3|IX%ttq{I>0nd*tOJzp023qlL>V;}I$CyT9fxDV>3bn!GG3S_p` zTqL7UN+U9twmM@;D^4Sdr0Opz$pw-ZTbZr?hl+_9X#gx+)umbX`TC zo&M4FSdo^}Is>MMDie45F=AY&CToI& z*<~MG=Md#z@HOTXV z?%2NICm@6uaVU_fIuh9l@^X-Ej|_nP8IL_Q)($E#aIvrYPUjclIh6iP;uo$sxb_U^ z7wR~a_{{PS-51f*j{KMuls^s*O^vL>V=AfO0%_^->peq+Z9)DxLnd}!RF)<8oF!Dl z2&-nqp_$0_FY9#4%zCcFD3KfXVaoyn>#3=-)}P!axi{K3=1nJk6RC+ zA5A%^#DqNo1>LzgBfdxsG65^rDNZZKRGdEnoes#{fQ5{G;oRMhLlq;>Ep0b2ae$Qb z!(&hFhFbxB?hy4rJ%?gvY~w%`pmI6D+CZH6%K@Ncu}`ppe>yp!#VG5X2Oyw3!pLDt z9F*Z9#vVs^E~p+cHHSz{u5wP&i;O*n^a|-FNFTRt(D}r)J=$)U69}3*R``4&Se;sH z|Fj2)Uk^sTgB9KS#!X;7b|2hcJd4={$#~%!7%TL^TJ#Hgr7wB^ix{lZkqM;%;&mfY zURjI=fPccC-Sg%X>QiMKBXmzxJFtEs2DfR+XkK0nL(%sj{$u9qIx_Im9D^cy;qNXp z4W)m=-Q9%VeW%`ZD{solKX`9Z5CR7{ks<833eTcF#X0PiAbC9 zyck2Kg4O8Xjb_a3PFN!n#X}(Tm)fK@;m70$%?KZ9JgU{smW5OoF>OX(Als8ANIRlX zqO(o0D%);nzjuIVf#_pyd+&H5=#cHOb$`9}@5TIcd2>9i-&Xw>C$j)QQrE5Qw41Tl zc*ZzBM%Xw8m10w^rV{U^%MF_pv$<06%)^fg@t7zqbf8>Ct#h7*Q(={uI~8}8yt_?+ zExb2DXl}V}+Fz@~+XPX?*9W`IX?f5;^0HkPQ#-KV@8c)limjaT#-f-{*ozt$+A2Px z5PAcb`7@0}x2mh<8glJ6^H%2fbzjn>XQz(G{qF&2o{puPstYyMK&SjsTu8|Q0>-r< z__f;+ZRid!tb3F9>&OdZY6A!gFPgZKDI;0~By%rFf}xCFoVqZZEtrRA?5G2ac96OV z-5Z_tNv%L)&Y>bNHb89K5Su~NgxaUAy+}E2EpN}*2D-e`^Fwz-AAlUSVCMQPG z6jva0Y_F*uCx6Jsj|l%pTrZw!f8&|eAgpc=$`7$_bnOPq5B%R~TgQn$qhP=O`&{}n z>1PzNG2Lgj3J@JHB!2%!R7u-vcW@S#CUU(kx=l9d3cZ&O*9?M+COVT=y6aEZ_(gjMXY%!W#Bl55U$rcw%sm z`L1c|n!*^`qj$Qxt~cIOoqA*(C94M)o8iSr)Ro$I zh4tyMy9&mkv(&g3S9NFusc% zN^kl!WW})co2PW;0LK&VjXwFQAOn>bkUlin5o2ZZeru^!+>RbFEL~h+TD)sj5>oc8 zZ?L8S#ju7HMPe5r+m%6<1>sFR$9uOieT8a^y z#S6--+i|N@qxbM-VSbCdiIb(tQg^{ad&PrAK081jza3-u%YzOwAXG5%(YHG<_viIP zdDgN8^A*WZVYZ>jk;BxFS#R_>mfK2O@`1bK=>$m;z;ouaX*AD9EC^cfXo!{C@J_G zkv@b|u!DrKqnNPcXs`+8$%^j(z=OiCK&dS=Y5#tkv(Sd?v!nI?UH~%0hkm%>baGcn z6~X3E%N-mUv0^P?5XegIsbwXYv%{Y**dZ(=c@YtYV=obOhn(!Ys|B~IQ0z#<1GRO= zn_UQ&MsMV>seb)V9xpCQkrzIfrcyPmEc1(*hv7{{DoS;Os3|NuW7m5Q-aO{jNAtuH;dDB+V@Tj*(x?k|yj=G&R2^B2!}zNHY~ z9+m%0f+Z^J+hbM@1FQNw9n2L%4C><4ZqvyX%qs-y34_wT3zJNNZZ@{Hi0XS8 zT@w<`R^B|Metfz(`(QD%UM_L`x9e}6B^|tNi=`~-Deeh1oy7^U^imEkb5Xh_LUe-o zJ+pjZp@?+(BT&gA$dG{QvC@^{3@2hZDJNE*Lzp@Q0Jga(_RxJF#;iVdPD>(e2 zvhhZL;yI(4J|=;$-skr%n=_+-9T=JW?Bh1(r?^@0I_!kxXaf%75Fd}hZII^&TP1?< z=;e0Bxub4GUmXW%4oY#R1kLH3?U0E{9X(p`&( zgb%mU#~+;x3T`d89`1*>{tSnE)-mWq$0K-nC5BiRM^#eFW|L0g+HmxmZ|X4~oq{V0 ze82ifagl^Naa&Gg}Z>8@IMzvug8AZdQ0lM~Db5 z`KqqGoju1|o09joc_y(s&|f#_CcLk3dnC)G_zjW|mUFV(g<5K(bY>mh{`|YDyi=o0 z&z+iTY2@K#GEAI^8)|FvvaQ*$eed4U%ze;d`zWyOpS`nmlaJj|n*wW6+5*3TU!nTr zh5Wt{FmGlnF>J^_rzzKh$Y|tg7ly$zTeQo?M6cJ3xjL2X<>z|Q6uyHH%fIFrvEiK; z?<6MK#3*BOp5Mvbhx^*}F6k|LdPR_ACgn?X4%zhFzcT{k!gV*VF<#)?FZ<`WpnW9i zH=4EJ&;08;lI0#o?zf~d7C+S8UuW)wydV&MNZY@-&*1#<_@0X?(ytO*7iY> z^7DT`?NRs;?-V2Nk!?a6E=txX3P=d&|CY`-Ch|}C_zOS%{rM8oJA8A`p-|@NjN~5~ zYlW<_l&GcnHPCX;@494gQu@)Jq~ion*#8G&UxO3~NqU30Kj;ZjCNdbm3yVyIa+X5N zI)Sl~GJ~*ac(jPJ5GxTQz^;5>l4$~>9u?dig zb2}K~LR%Fg!pnfuuFnB?3BS#32cayKEMaMfK^kM^m z*eq7gYsjsgr)FCJgMA)JF(Dv0r=a$_#2f!abNRKzG1u;mtzi^lg0>SYF|8&y$fuI1 zeU2^n3a|2?JRLON+<$%<=I{&V?maifl^hsX(DK3UnaCl z^l+YjBdFP(Ji9MmADs(zCwfOuX>-~9aJ6ZXng6Y`D1i;Vv{i_ ztm4S!(e`Hf1$HGUEbb@|#ZS))j63?6F;$VWtnSfD8nBK*7!0V`Q+5rRO4IwqpqP2+ zipAuomU(U}g}`FGv83KIJyQw9O2>Zga`w&?{FCj2t=9|rP77kOM|eCl-fMzyw+;hI z&oXJy0sFcURr<3fzw)Atmrm)hedBLuvau&?w>F<~Lm_gWQ7_jN5zFtp?>@Si1{;E= z^t=+}Gl05wYo)`s0B*i*Kw`!ZuBTQ8sXrjx=z?ny$C0b1shsS${;`t~SD8h!#7Mk8 z;6)}Y9jg-Ng+DYf|h6F~H9B-MHd1XhdE$@Aw!Gq$R zYvsM%TLeBm(MBVx%qG`XyF5R!u5V6SyLD+}g1U8n3AT^?NYRGI{IA2AXsUFc8wk#| zY6@0rW&OgTy*xnDlz`jDj+!S4^aLqT;SJT3x3scPcW-8aQ1*Z&%VDAck}t|0pRc5* zfC2c7I=eS)2`B>uD0omhWwD|9L`ySk$wlm&z{O#x?lZF>zMD|WVKx~>WFSgLlNE@h z42UR$mPJE4Wokia#*R4U!}KQ?;u&CZ09&-6-bNQ@Q1H5-?2=8L_^< z?5l@-oUv-rPWN0Byt2?w3G=I1)5g0RjEZX9k4HHnEm=E@ z)^gn1r52#VnCf~oK|f+v0+3`(!Jafd#=M2_E(1tAoUTTir~2t=Olg|c_{l~bMY?os z&5%8g^L7}ncIh<^m`_G2?Dz^3EAX%VRiZ#NG%H+2gBA^Kpn~S&aih5xWs>b6$b!56 zVlG=3LxU5oFV%+ zNbZBNP8`|{&1Zt2m&A3z=p{2iR3UiZB^_yIi&>?&NR$m6DY?$nkf7fD)X!WbWK5j3$06K^Ok8&hCUPPh= zxb47|YV8{4GtJoz*J9?b7NH7EkE`&Me520ER%GGq2dQ~sLpoo!r=O!9uTQS0`bR*G zopwW8p{IgvXm{dsj_qxz>qwv4?J+9(@I*+B=cu9;NA~sD3!M0WS=lJs80Nb(PBSU% zP}4KKoYFHpHsJP2q1|xV-tYXpfefcYDp-8D7r#9+eH!jGtE#uOIoo=1Pm8!MLJhyJ znpgIIS>ELGWIIlEFss!@s(1_RM!`Qf8$ul4DmvwKLxA0?aElut&>dseYZz1{SFo(c z90Wc&v40*4tl4+D`A0%bv%Adib6r$k3W{g+R75#I?% z-D#jb@+K7gp!H98?V)#Dea&>mUEf`txvw(dpFCwI?CqbgKmp)lT~}3SW#_A|I{)1z zQx_3f(D#JX0Xuq`@4k1={zxXbERp1RkqD9Gq-iU3-VhI^hL1DjESqz0v}C4NbN9ED zgccp!r+}F8SDvXHK!X=MyIm|Qz4Xwzot`jp%*LDE({z0pleK76%z)p-BscnjvX-62 z<^Yy5?|W2it9=rltX|n5t9ZrkK>Bv^2U88@sGMCgq(+x>JhsHX4*J@}^8{rr*A2$m z=I=GmZ>~D;BpfBr;Q*I1&-y@{GSB|tE5j=xx{u{X57+E9p7L{b_)ZS6I}9(^JwF^P z*S$V0E4O8KP(o>7ad1reIXg@z*S$DAL+QZcTotXE>D5x+JTq)7*S$Kto9&ewz1DRD z#Y8{0bnILNaQHQ*rqaotW9Vto#2sJBJ|Mns7`1W!tuG`xL*jZQHhO^OSAdwr$&1 zpF8Qnjp#||j>z1Rqa7JJ*ty=7&$?!IXq|d5?BX>)5FzKMo#Zn-$dmS78X7g;b3n;s zyqC1#C!5M+zsEw!W4q_#;J*!l5j|jg3yfgMd`paA$a*tFIz#jL8Xi(RzO^Fnu|2>c z@3A=0BJZIa=pl)7+kVT%s2P4e?qBfHKL{iDCAITQ8Qnd)ujl1Y7%e64+vVeg7GSw| zVqkd_#@EYyLqO?ezPCd8w^n)NzE%gl(qA(}ev{O@S#LpDhYPS&as_pTE_Mt(SCl!{E9KSB9MzBSS@T4XCUVJ7{-up ze&hq{S4VCb`BSM4vOj%A8AoU=6U8Qa%0{c1ctH_OcfODBhf9WSKU8!-wXAD1N6gx! z2`yh=)`(PfM^kO5qoSmXe*x11YBW=G0;8%zqmOl8Lv|K4_-Q3Iv%_5E=+3^OcUu-I@|t=`f`V<>0Y%R6i00~iUyvAU?232c}!g}91G6C z^Hx1*zY>ndysBNd85{ewx)zE>?7y;Db?(zhiN(J9wA3YCVSPk#c(7XYMj>572e|IC zCyUl9+sYb<=6Koni6)*+%n0I#Tm2w4yK&H({z>2jl%Xb?&T_Qid_H7*>OZEvxrm1- ztu1cc6McAyQB{T|dTQ>9gp)eL;|jnEEsKXIz*Dw~Z6vuy9nh8#7Dz=_me^lrPN&3% z6C6NQI+NB98AW|sX;p6Edp^CN zi8A<%6xG>TQqF{~fs^zd6{2O>0tc&`oFWxBe0<8G)>O~lfS&KB7G~^Lm-DcPI+F87 zGl4&H5OZO=0+LU~Pl(MFKZWlj*ofi^2xnfyWTRk)sm>h%N;*u;;lH9+CycR&>yldG;_lR=e*SyexHmE&@-jPXIUaVZBX~H5+8H3U=vrSpU!dSyqSn7DLq2- zE1`RS62~;daJRBG-V|Z!a5HCaYO0ZUd0BGHoa7z;?v;CByT z#?Bp5UsJYERRc$2n|6`>qsq85gJDc z%>Ntrq1Y$>y~p;l-LRsc%VDocLMW%f7}=Q62(YJj~>(QWe=hw))e zbktb+4vLQxgKFQ5#o@=6G5W*&!>HX5ufA7UKLCjceznTyl64=+QEW)f7H)A@$1D^_#7)1a%ENnOoPH#2BAsrEXncd z8S!PKiDzLEu_D$)enpUw3U=RB_*Y3Vm0V!hlLgy|?(!+Ji>5tR$bEo!ojKnuUH`$- z3nn3Lx;6axEi7>5B?YvwIbUDYs7fCFBJT)}IjvniJmHFVUK2msQ64jyFhD;UQoovz zS^a2OQgbx3imTl8)qztpb7MWDY=2u{(m{#zHnVZD)AsUZ(LM znB3qH9Cu_pG&n~<1C;=e_|zqQkWmxEnQ~%{b1_Hp@85WjSy*!Kj@gEb|8}g{J&daI z>-FuI=ao+B%gQR!InqkQa09?u3h&{QFufi!^^J^WPSn(OZmv^4Ycyt9Kq;repU1;JXau?q+0&jhV~KVw|)Q-H$HiT97FY)A&+ zy-ayx+3~nBAKzt{JXB3mvc zDV-LUW1}8xKk&o64*Iale3bcPsB|IlXUc+Hi4d{2*jOX;qdHhI37KXbN|N<2D8Np$ zn3JzM^xBSX(X+SOoEK^!m&C=$wkrL=J<_y_bxVue6N zV`Qs2hrzlg^mp~A+_l7=3~cgo7Rbiski7A#Vm^Stbhnt4P0q2}v08tJ6g;GY6p7doa?g%CV z`Fh0#@b$k#IJv;($RtAfDJ(NK&>L(hFnO1AORRqe=-5-@QpfMzBC=}IP;c$|7hp5B zLoZ?vMH6ttm~$83$~3{ji;+o~{OfUj&188i86>W(En@)<+U$MKVwhOOm6=ADPjxk8 z8q)VTGYta=I;0U7(D_)t`e_Ex} z)zkRZ>foPG@+Bckg{qB?SH!$?&t2Lzl-S4za2)FdGC5I_)6^KY7n5KGMj3E#M|4t* z##_cA)hl?wx&|!R+~Idgp?~ot?Pmp5R*oZf z(7}8{2V~mzM?tIRu84|yTFc93Qwe)@ol9`eW^y#W7kwIjdC0Y6&b3oG?SC{^0p!b~ z@*S$H5e@_9Jt(MEAXsXvcs4miXAB(j$cvSyvstsM7S$G(v838?F#?27(r`BOD_k$l zr~^YwzL`}b&?kVQxDM}1gQzZjF*F9Fs9yViB=&4>4x0l0)(vB@&o&M8>sA5nonSvsXw{=HQ3R{o<@wO0NE)ehV56fOSk51dwJ_v5&I6abGMPVEtdJss^1 zkQkYOw$pn8I`i8(eEXY4=tATTSln(W$b!q@DJyff*grUZBKYrYOV$rAKCK5bFd0u@ zFWlEcD~RVf!Hpz?4>EY#MS?FB$&Yqc$I^-Q^C{Nq#$h+lr$z%m&px4SISWVz50QTz zR;W}Z!vM(~gR$iNt|{i2;lxWU2TumPehEJx#jb+UUzTzxBoWF%^{LQyRP@( z+k|zeE2s8vT-wsy>c_|8dG>BhF=*p9O_V7C(o7oyrV!EFfvH0f6qpuGgRZz7MThb7 zVuVH%(Pp6~zjN}QeM{2oofqsVJGT$vH%;Sb>7#uGK@W11+%cVt{ zJ{2sU?iKSE4J9PXrGg?)dw;@+>6hTsXMA36Mz4?a_E}9`HS509Fq~Iu&91^xlb*ap z7uX5bZAPx>Zy}ECoU-$!N|{=57Cp9iPTjl&s3T72;VZ%T;3JG&-LTuJ#w~<%{YM>f zIZG=K-Em`8B&}$jzs3&o@Wxu+5fW3Ih4QoCX22YWLN<7I=J}#<*W)Cc)$pR6SL-FM z=v&C?43b_~@c?)ahaDMK87%f)i)A+!gD5R5@hjWv5W_Le+R?+@!J9n%sqy*}5`T%` z=vp~g((Me~cP5CAsn6ilMEu&ILWOve`w8|C+rUctT+`uNh0(TvmhCZ?`nTsGUkAC@ zph^en;VC=!k=-F{g8$(^-%z$-;|6l>K*KUhIhA?g@*ELABZF37VQ+f-tj{+na6yZ`}4Gra8^<{Ck|kYQq_mg3Gb#1 z^)Uy*|AWIMm{mt$GyJm@3vwolE5XAg5qF5_2^6+4%9-6Wfb;}{t_Xong%GRki(CA$ zZ_b7~T4sn_I&wf{i5#oOaxbqEfwD}TU6i_SjMiUXfn-+3#;KGO+qfjgD{M0W-HaBe zyt;4QjCWerS+96K(te?kU7I^txK!!h1AIC*!Q3((A}FDjMDkOM_y&zI->5M)M>njRztI$ryA6S zywel7J++D-_R@v*3!5cGX?2Xe<9hY5pbUFvXqznpmIduO>T$jp_51Dr%nQgn{O=9B zCxG?~CbrQ$Mk!-aU|(yDNmV%DW|IA3pV=yx36?(8j|n5rV88}F#EQKXcelTnXwrp| zf~7-F5sV^Xf8}3|m;#x8)%#6>f?2oZJx17*PQwTIb1ll}s{KDv{WWgax>!w?nRI4a{BU>#(vyA*lpW{*cz$YI z4s2WJb|$)gf>J=xBhTBO$unbxfbEfSMG(eKgm@l&8#uG4X@GEzXKp{7)yx<^==@@p zMhl}#{Pv=BhCz4X^NE-&5Dc(@h=~FOEO#H7FYpJJE0$3MS?K}{wk*&Pf@u8 zK80W7fi!?u&jHl78ONi`d}?hN;Zw$ zap7_0pAH-;(v{ECX&qZ!%DpJ-RFad+T1~s$#BwEe&xFvIVIAgvv$BJB*0UC z>W5200eb5$Z0Q|Jxpt|34*r3gta|PHeY9 zMQ_M~H^%Hxzd)yZ$$z$o6VOkxHgvtvtb3I24p27TQANX>=pxHYm_)@A~N&B6v z)S%AM$mrP6>3C3W0*1gpMn2g49nVBxcd{h8i2}UI;(xyAiuf@lJFEd8bI#o1)Kr2| zWdbUX=6G;R0VgVBK}3HUbNbWwSi!xaAjtpN^trKs(mXNIdbM%a48h_*GkvL@=^H#m z*S}B_$jKzk;5UM?fNgQbX9sCuZ>2Hon;F5Ua}MrLsR|6hW|PEr4DY_KO)*3~PchDE!qk9l{9#TFBxRzyvfmI4;$EGu!Y=U7SKrFs5-b6(gyz8$Hc#Yj@$dZT`){F zCi_nY{WUklX(}`@oScI@VJb^Z90p`-*ftMW-gmQq8v>L|fPO3^B2aswkT9zwPW$7R zQlpD--XWT-@-o9dStcEEVuzt#B!jAms69}lpJ?in)L4SB;xG`;+f^UVC4w$ZW1n8B zZ8A`MYYnDFYEn18k{imc$6q{>n`Z~>ka>d$Q9|y_Q4%Ap54QU{Ly~AN4HcNB3Nd|s zr~ZCbSRZ$-eSs?wui1aU0Fn7$&Yb8l;$KI|1qsR`1;$LVK~QXvMGIQxh5owm5h1n^ zLSYm_u_S#yJaDr`W6r#izGGInmU-v41k-+3Zs3~&X!i`$K`mAc{=bELEER#Z7DQKt zMs4Wa=q%<;Cl1$1a+7VbT=4|9XM)@*D3(xgmCo9x;y?`e)m0KT>_eb{El-0a@h)Ix=9+bSd+2uy@z2 zDYho@y+J}hvf%HXm`ArIDb5Hve_j_fH-t*(zn$s%1Tp3b&ZRsh`toQ7eXVO*VfFRE z?{wH1v$TU`2Yg}6ZF&2#hN;bxfxZyEo;>kW{P+4{4hpkBjr_p(om<+`IGNWnWogoa zO6856#CoN}5D7L{poy^FV6v;)jUA@nBjJh2`A7Dh|7+!agXJyn&kMrevaJr-WvK%A zkE7~GLc~sUSJ~?br=24XU`m}{+UKuf%*^i(=*My5J-Y0L&#B{LBH$Wv5zT4Z$4j)5 z?x)g0weqffFk31Z&cPFn3c5mM%@+c-#Eq;CDRWNCW<0(Mp73+dU(D5>@Q<}99m3Z< zFDNnp2l4y~smgNF$@8~Yhv12~RqKqZ73J$2*%?OIH$oUfY=sZs1n;kNL;{rs`xz(e z7(GT$!a*X(yH9AtBpG}TOY2fOmXyo1Jn=kbwL0Rs4lPG|pl2_P#}cOdsDT@OYJ)?`Lc_aWCw zmkrJr(`+Z$&FKr<)L%KbZ?lrR@n@bZBD-=NzQ!CQ#0Fvqo!z<2bwIRkvLkGfRv9_K~hIP@K4hd3L$ z$nreu!u^WuiDgXa@_JSoJZYyTPR+6rCFv0JpiIHj%E2>7wu~ATr885ulpBRbi`GoZ zxC)J@XzoN^mBw>Em2#SF@xK_>2l339Jt4H5!#y7pL!RmSA@EiE-10RG3-@T4Lul*r z@EA-rQAZ85QL(4a+dUtKG~7fdK6oRfLtVu|aQ8c16+tn<>8Dp4q=Is5&EtZe>JVA1 zJB>NqckLdhH~j|4NAAD2gZuvm47+}$2RwY+)66>m)fm07bw^kGwfSU7crtWH`Gv=N zNN?oGJ*=@SeG|H`XVQQQ9W?#Z=2b|Ziz~aES;j_?m0xP5X@ww9A&4~C-WfLnTvEfU zkbGO(9grWS&pmq@+*J74#XUX4fL=4~ERHz25$=)2EYL3oj5`4eV@T@@%)LZa8_H_s zK>t2JuQBCA-mNzgN|C#0Esn5;xA#wZb^$x6V^Bxe0oNnsC7Y(8{E>H%lWqIU7)JTK zv0k_jQ0A}J^IAUUNMJ1B+}5zR;}*@E0>RYf32NwcVaKqZgM=X8#&5JdmkzE|x1I$Q z!cAZ!GMf`HsSc999Qc8uUfFJdEx&%63}XqzQClZO2a8v_UpIdBvUaPWFNXyVcdvhT z2Z1QO-~;c;jQflM@W`nLX7l9NYcTV3*V}9QD|hlt>-f)Sle2Ap<8dp;$kd~CKv&HX z&y`8&2KfcMcW*FB?Gl%pE1r8F@L7)5->S>L8a&5Ub03jQ8P>4W@yf{}72FNrbH%Y^ zb%R2+ziM6hmuL(}jv(##$cttv>0LYF^p_@fYe1cyQg`AB8En3Hu)dZea1R zm4{Fr7HrlPs|vxc?XV~r)&<#rkMB|1$M_2!?Y`70nF?Gt?j6K8U`xgQ+P48H7q`a6 z+sB*ETwUeNQB^Z-U+h)j@=<-ou|T!l=ncz;XO*dagw3d8Wru&2>4FldVGoy}Ae(kv=8sVom^JMEv*?Szp$+OcWe=MAz`o7y3=-{(XFr@tX#Tw zFYExZQ{%bEZ^m&eAH73*2Ia5G9l%&xeCzN87m%MlNV^dI68pyTlebG$yp5OZ26$YE zTvYx@1uc&%SMlf9U$A8U?I}6Gz^PCckWcwQpi>f1$oa^SRl;*l6>6H7cTU(Z*o5QQ zwsSuhB1yvMXgCKW3Df2HdJ342;%E7opB3w2jt-z6gsj*ZA!J*_EQpK-cBxY+f@g_b zrY-z4%^|gHXw<~LgIReI6Qt6}q+87buVRKx5b~z=G?Vec_|+W+IgGI4j#k4$VkO-p>M+VN z!4KbmTn=Z9VDctwtuu~NE{E8|)3SUxoxIb(xxDNfaXn+Eb#QeoZG-*0EdcfAV$C3n zwnL#lF51e_U$Uo*8HzUt-u)t8(HLesG<6#fk6Gt8aKzRgC7Sc3SDnVM_&hN#_lZ?9 zj^WiiLZr*?wm%Ql9{+inEctuIE451#_rn( z$jLJsuRa)xpWnGx#dYE7O@orGvB@5$IOOGrI(@`yLkz{q`n%Nz3(rJvHrow+f~_`C zKcWhWqt-7uVyZs5e-C^3%6&*+Wr6zJy`Ax4{U8|x$0_M2<3kGLiJ7N3+`O!=1BU4! zuxiAaG23!9-`%$cGq~>f?_Xn;1IHp{!(Ztt4}u<|!MBeh5>*Q;H=6_Cs~yf6x!~}W-1iIo zKR5zGm4MnN!vFr05&QpjLns>}@-Wn_ zgX8am$B6S$;;s=pq2}!JROsgDd|hT$3+5V7apNv3A|>*&q=*t}#jqqa-$*JY8Lr7>DWwYO z4ATkc4$TUga)sAkg9+H5lsY-nOy(%?aqGP7>m)8 zuB=#!P4ur{#!3c9UzIG-+~V@obbWIXUM#DNi#2?JUAVOzqS8uyq!@A*@p;<@kAz$c zUoMg|JE_sSeF%uTCA}I5@xfL&x7V@}xK1dUiI;jS_ z+-SkknuyAVQ9`OZH-eEENyb$uUk>V?9YCCW6UVUA5GtUGoEW7rGy*L`0tX2LN=nmk zvvcF>d(PPM{l>hC1xJp|Mw&1~6MI~2^IFG(S(MH&AvW46Gq#!By|SBy#Vb+aR1gQt z&2_l*Aj4giu_TXx`)n-up+E9u1Z<*Nv^oP`$X*^>(V3Eo#Jbek>r7W>_ zU+d1Kk`#0Gf$~B-a9q$k7b+#rjLxCQR9lF%#wq!ls!By9CG?rnzorcdv>a$)$Ly6N z*Ig2)`Zp?`Fy2LV!{8rF#qc7Zt^g$+$xQYxvK8!eDPxW!4Yt=NoleB@#~(h0O*gFenW1oYseRXXmBpMa4-2 zWmjqHDv{g+sf2@;8i@{*x>ucYcnny}IG?JaH*Tezs6`vB6zU0y&+=e8jWcTtaSiq87|^n3=t2;f;q4U7 z>r98ERf*Ba&bnH|NvjzTGCF;d6J0r4%A^al(rpqq03BK@2@86;yg-H#@t~F-XO`UX z`JaK1{!}RCuA?rdXoeKh%5k`7&2%@{a$O_>K&wGLiMfgXyCs5o}tsE1_^nkilMVeCI_rcFauV`J^O{Vw2njm5uNP-^wAIJM(1-c z%9(WL`|J7Uv+{laSR14mx%Fhb zooIr>9U4Wcka3&3G#&G?`5tiR7IuMLaxBn31|Jv=a8iD)>1t4*D$|dKF)IDPlRLhr z`eCBU(#qm{oaM<}rkji_ts6;+H|ZjvTbal@RW@iX)a144c#{9-H0XAJn*xyA!rt+r z>laiTLdg!H0Nh0pJ{_4ma@4WO#Pfv>g)OO3ksflCO=-u4;eJnI-D;&3U_*!u z-kFohBZIPZen+*M`jVR4EYDBiGX2T@kjvg#;%e-5|FHyqv~uMcf56~&aY4HNE}uO7 zK3?5yX3m4|5Z6u?gT|?>+*l-5V3+5J6!QS^inA1rd1E- znp3pbqMfvqzD-e4g~NTCa-TUQ`OG<$>F#-vD4}ZMsbnyc^+@z&87N-Otl91fQu+Yq zTPVBNMWo)M<0u#6GkKLN&gLV2!btsu#}W>Ndv_|JK9{!p8U5GJR`JeB#G`F&1L=X{L<-IMK7-{!ZBWD zQg&pbf*GwMrcS66n_focg*|*e>S7A9QC3Fn>d?eu+p;sAQ8!-j4&F|;Yf)VYys)|4 z9s2lFmnn`xyXJbi8XKftK9VfpBI^Kn1CK7Y#rMY1_Kw_eyv4c`8;?PKYpKg+d&7l& znA>gZ=}sqI%=gsW=#e@l%6mM028)b#d!<-;Y|X%|QtKY7!w_BZEchb>Q9G1%71mA8 z05kN?&V1vEnTn;tDlqrqz|pR~c8ivQ>NO2wqWWQhApeZf0@k?w;~nD&FRpT4^o%=; zpwqrRm0-a3D&HAQM`&zrPFGkI`-7DzF0^LIOuj0A_JG=*ttl>EPDBlbneB;7m<;=a zm#82See3T40>r308ktevv zk+?E~9t(wh?ZG_|Jwlr`;#jtVU?wudK*0_qGyO8^!FC2{JwY*V^z_5i=EJWR%L4O$ ztqVM@`!t+Idit3*MmJzJ!)YGmZT~d~_ev314|(?_c?Q(pZ%yQU)6M?K8b!y|&4+#S ze|?i)_xsiHoxvrA-CA{tP6owj&sbM*1wwj%O}I|oS8Gp>V`wDm0kiJNgHPQF*9U@INt%isv|`t%hq)628?bGosT{D!NBfi?g9 z-Sv3(LMzJiGPNNbE6Y%^st{m< z5g~RNA*_7%JV^oV{t%vZW9;oZ^2f6tqdzt{ZO*u&u#QjupvC1)AwJ^IprLK)`WKu6N(Lz3My_1l6u7ZlNAa9BE&L= ztEGK;IU-Ew6p?yfF#f?v{nW2$VnoHDRnj`CS#xgm@_cxQb~2{1vCShiNb}gJ zbWxvrw_PRASH&eT0*O0Jxi!lD_+Q1H($q-MRDM_;s(=UxzCkSC1g#IOjeB;=%jr}L zMS5|sJ~{umwP$3zH!Q?G>krnf{6=H)13*z=bo>31@ZE@X)JafRmIaW^h3tH%08w*Mb>8#bso1!Mck!D`s~h zq=WgH5!rR$+dD^P3_zz=zfqsM*dkKp!9gf^*)u86^&f&wcZiD}f;7|leAd`L2Rc!~ zxm1jpb;EfyTH8j+QGv{he9KPWm*cBeZ5?zdRoS6(2H21)&7JV1?UuIV8)pO`F9 zIRyC|VIrWO3SmTfl=ty8ZY3mZ*hBD%z)GGO@L;to(}xhUpWjr+W#E3iX&K)WgidzL z{=wRYX}QZW%Lqo2%}T_xE=lWJ)s@i~LLDQ~6%JBU*yv~ok6&LmI~)*_F5-@ZdMb{3 z9J|4enYd=ow||3kFehs_%M**{P*3hAo$HJ0#TvqyDiRxT(k9W`r1)d3j-<3H^7>;O z(QH$F+T{4d#E)P&$@PY!9IIyvRh(_3Q5Fz1_;}Uh>bXav)MK=_uDNixbFx5VFRKuz z43d9fs@WXBcSmqtKl~7P;_7rqhksBojdF+9;fr=3;my>yZljghoQ(=y)e3n)VjRr! zO32MjEAnSoTwi-ic$JIzluOc&ah|5&(rI`9G;bwm>5V8>@;G2neW#bvDL5I)%p_v# zK>V@7@pnM>t=UD{^vb)S$+hLGL7&|X+NzXdbL<7OG^wH*6 z$<*dpPPN~jq93j4I^L8G>TZL;=&06&xU2)LIR^Fc*v|`DFUv=z$FJt1cli`Z(AplCcs{YcQYmP~8^Vr>dWtZOTiT{lzhbs_D|Ux+ z9-P=tp{UUuocA>h?U3H#C9l0WL!(A{a?pt4*R9x3hkj~U>6|YKS9UthKJ0om2jhD0 zPqjN8wPV%t>TPO^nT6pBH#`s3v)xyBq7fUnfeqYbl7!Ef@)evH7}Dm74soPV9n(># zaWjg-9cFKbaA-&HIu^Q0%G;lOfP9%Wl1>?&r;|I70$Ay z8VmHwSYJu`siz`RNRa8kkdN$Hs6bIAkXFZj!pKAoc46>r7`149vl#LfuNC!v>x@xI@Y%dXrin!-{O0~-$T`_($8i)Uy zlP4m2%(|T?PNW|_B0&;RXHMUblo3~W3igZfKiUDlo1pyx!hin}{mY+| z2Y`U0{s;N*neoZy{&#ue|2FD>Z~w3CIb|d3|D_yEdqH`lioV==sVuXwB|%Ao1H+!i zgF-^>qnmIhD-|Nf6B0r?NRUGu5wi%vE3D!mbh!xigMex1h=$Zr21WsQxF3YH9(Zof?&I~ud- z5ZW=NoaVG_lG-ul+P~?ZJH%z19VLo9n}(UpDYuPQDNcqga#6AbhgUCckW66!HX}Cx zre033B3qTJPExOWAROU>JP6HjFyzVMJSvLJAn%7!If?viTs~xi%#hrseeiEC)jeWJ zK%z_e;NMi5d&q%fF-ooDpkSA#j;chL*nO|+flFp5O0C-Kk2ef6ZQ@({&?p%{kwfDU9WqXK+cMm+RCI4yFU^uk7D`_7TQbgs zL+4N_*^T_3Y{aa@SLMPHeZ(yFd~Q;k7SWZ$tVO%mb{!-}`}z1IvR?cfN5m&-59K{s z1OvcZ^q|u6!wUHo;H`6jgS?ykmO9i*h9CbHJLE>zQ@SMj&{Z2=qnw67>PvY~0_I!g z{2DP7ge>54u)A&F$#u*Ukw??TuyhP?d6zm^MebEF^rg8cK<-U?>mKrx`brxjSh|b5 zct}F|y$*%AH*+DX>6Q3WIj}=UC=VFCaQveaTQPZiv2ZrbTd$eVGN*dalayTM)iWvlY=$Bep)wE}Z=p_~9 zG&phl=(4h!@Mz)m)a{RZKaNC!$&YguJfY}nDxw`K6q*VVuxFJ=VVA|gN9tx)w&DJX z^ZpKK7dyB}2@g@s{MDfg`69ozCcn0dHb0FrZe@(h0GgqRr4huUb6+OpoVx^V&eZIcRnx`fP zbv0?tNe(PSIeiQM*|M^_+eksAy(nlt!1XGyQo<<3vK|GR0#1$l2u-CKvWgfcKd1cW zLqgQ#_e(+^vW{FyFgn~`B_8x;n2eK3y%H2&JP;{!o$DrB_&MH`DG>k$~T~4o~ZL_ib2JY8W~=f zaZ3suzk6C)FyDcSu-J%0Zqo7wnu3x76|Y+}o+rB*njcO*?`#4s;p3FSMK0ZiiZDV_ zcrYGGqcCM@8ca$`R7hEdxRgSEA3MJwQgB|~$dY^DWR+3}EBct2sApRyOZ|sVc6>%z z%#~~}e#YChw8521hDx!WQMh!Xb}NsCjT8w6YXmO$oV9FW4FzZ#Z|&^Z@`7 z^=1N}uTAK4R$UdiX~!PYh^YKwp@|f?dQe_jTACrbWD}{QP}WggYihQU!icqFkJr{B zppR>JL)(;ECU%MIRkj*^)&;)|k11PO!@4i!c&{C>7j;9;w@FBm%zPK?udnJbG3Vdu zHq0nMyoahS)Lkq2%{eho5||>$ylQrT<Z5#gy9AEr896gr13}Yl*v|Ij@ zkNn$3=8L?Ur-L7{1pZM;_5@?a1+co95dL18_%O#Vc41TTRiSwY@kPLykbS62+Sfs@ z*K3n<;2s_ft@jUuGXtTF_F98vPc&=~i!m(qT(hudJzh;s!H3iESkS}JRF`u}&66tK zuh1s`gj;Nk7igkXmn@v>jn3|q6ToK|tG}L0Tuc9ml&V-sZjsG@2SPTX#W^)Nlmy(x z3Ij#j4NvSx0>e-Cg zEfmY`Cj!DqT%Ic=o){|I{gpel=dVv&eGe94K@IO4AOq;sz(NM*-g2zHn~Oy=YXktl z3SjZMCk7~M|3RmZvI`>c=xB^%(WZ@QwJ!`ltY;`gQZY9_KT^{~exou^SV>86>BM0f z@m|rgC%it&^BV4`Bw1oY&cyA9}O-4bQu<0)@lgSobPCY z7O-eAxMi5`$@yQ+GB-1C4U+e(t#q9vk9l5*BmurBsij!Ud9#$kVoX$$-^AY<$&WEm zkK-Qo-1GI|q6-4%Su6x+Z%_W|`88;f<~R8r+&Wxt;Vk{E>+o2S+M;WEN(A?-$sec7 zOKNGsERYn-xxHHi6|iBbc{34j=4j8-eWaBVl|0!p*&k(;SY*;>f7_%c8_rELNJFi5 zTVOj$F`*J=+~zH-D%JlKNd}nGSz_(kPtsnG4zsDKur2#4g+$<6y1=)huOH+$1A9i2 zHYx3jq7lqeU2pU_(ab6d4cc8l_PO_zDrmLkh!H;{iCTEF|-$C7FMJ~c6Bo9AT+!uJA*q@?^vc<9LZXtWC`9wIF0i@C_S=$bQ;2~sC~ ztprTyAy)%^P$}KU|MjLw&G2m|Xj1GJ3YMtPa7=`+!dLx!kjY?>TWb7w<;EaMMSgJo zsdj9zqzvbL7Iq~m8Vl8v*|~x{>n|57X-Ng)d^^}~x)WwSo$(^&U$*1dc^8*{GU{=! zv*_9b6IORE1tb55(-I+@iy~Y%d7_K&d?lTyc9ZL$^^`w}2c__zJJP-UFQPtlxP-V9 zQjZq^fQXBSOTNCOu8hlZqJN$}ZiaCrS@QOb!D7~^-DIJ1?v#9o8-{31*u|2%A2Ibj zNrMSG>T}#7zC(0lMoLJvIo-EHqK_u{)q08MgtBmy!dEuBMPDo&lal$TX}`k4!&{~W0l`{I?#*NhiHtasag7QZYCdbALI7H2EK$YMUq~uj@~LF4Vq>}} zzR2>jnk8(W6>T)rbK$HkB(t@xu5@*oV^<)s0dul7`bZ^hEa;VtpJM|y%h5!Ms`cTD z?b0HErmPUB^kiP4^k3ELX&g~_Em$ghI%PTL!-)bo4zcv7v!XMHMOZqSL$>CY$yTO9 z-&Cq#DQ{Q20|OV!Lv01x1;erm_J%)&7rAgDv9#A1_~@!yC<>6F^o?VJWeb2}N{k3N zXnfULY8g_T8SaD@+H0i(iwX=}76x0#eBi9qwXa~YNOPYX=LXSf4Kn^0651bvOWWU3 zJbRAoPxVeu^R#UWU5uS#>%j}Yig%?cBQ%Y23)cCY!lWCDbMT_o64cFL7xWN1>hqJq z$jl$5aPgsN#KG&WHE;E1?Ij&D4--#Z(Q*|`PjC+#g~n8#*%g_l33(TdBJJIiESj;} zit6&H`0NH^!&|pcQ{vI4+MMHl`+yY$r1atrGKXX~kDV|1`gVy%m7+|y=H~nhWN!4K zq>klymmy_*l=AwxI-5)iA*Ev_Lr+VoW7FGFp|CA|leUmV+VK3f%JU-y@*>%ulj^Yb!WXZb(A``rKKA=$ENbKTNHywV=E3m&NwWV z5AxoS6*c*JbDDaTVsOct!ut;>p5QN(!08zB_gLcB=d-YOcXBK_^IMs<3?bf&P17IbOM3(g{$q8HfBPHCPZn-*b_?nN=OY$BH+OmmhKc=w z+yfjI+Cx58o^J=4i2adDm=^jY6t5++ivhrRR`Jhl6ykD{@doRM3;81mj)(G-H;Z=u1&)S(*V*9)cX1khA4ETw zG7<9=?mcm7S%bVp+79*!MlO8)^;h--_X=a}ldMdjQ16>dpT@>5{6@{&0;fQUGPau) zOk~h#M0yoO;Ny~%k!Zop6_&z0fde&<+Fd>yJRIXE#?MPYCumMq)~hg4=teVEgfBYx zD6}?iSWtr6nR_!`s?lWTrVBV=|N2n{MvIOOVj>4Z10G34hbJdwqle#k<1|7!h|aME zF&pwoCosF3;xsZF#>z@x^QIuvHSIbFiy)A(Rh%iO%ae&1Jig*IQaX%ABR5^2s4gAu z7dY*8ygYZHoDOGUXJLwPI+V^6HLBLe&^15r2m-Oq+kDbmbLZ`K*(7O9VWAqeJD20r zd{+{bkx{bk%)jprruW+MJJ5*M_Nv)l(b)@C6HyB?!gbK+)uB2FRk5w~aSNA1eM+RrRV8b!wYS zD=VaN)%fBC*B)2stoRMlgr;yiYxAy|X#VsBiR*dBdeYeQrpzYR3Iqj1D^lGKjTPj3 z;bx!es@n#X=D%2UbP}5)k2xCuauOywr$(? zDczo)*Lj$=GX6nEuE>ZT-xj<3Q`GuA5HUuv$e>=fI>*YO*n@oCJ5h(m)D|oYtwhoM z?-*6#M(9>x_ohy*Z&#f35o`?;EI_O&;rJt&4fm>5>_h$1f-*e}pbmmEf~<+`Y(Sws zAkl(G8aCMwi}BB~5D+HIHl|}AK=eX=8}#r3%PVv7gu+3<%TTzRUbNX6T>NN7qq`|^?^@Uk}63Oc~iseM*HMO9Q_8*ts#G5lBcT!YPScB z(pkvIi;?mER zZYX&~4xcuJTQ0@)cbIcW2eM?;v{Q*zbnyrQx5Q4|@kqW?j~6Ia6oFUQMvP_DPX^Q8 zu=J5DJ@Wps*&~|*2QnN2mjYXlSNtMQIbN?*#3GR;uIQtlDf=Aj+{otGrdOUb;T($y z_j<)BsVNL(+_ZC^vj8SuyGf-pR~inIN#`TD2KIL2k{42STxiDv5Oa7e0h=XY+$RzZ zi$~=VG!hAmFXC8boLlcKBW#*r`H@r-naN{jTo(To2sJM5RcQ)gaMpoP@39k3hmZGw zJ5JfN_K0q9?uDqyYcPn15A`51PUV$+Y}>Q>NVazcBye=)eN0ebs&nxeTb+Z~JI0Um z%KJXZO9zfgI?H zFf3Zf;3_`+0-M-C#|qFZlJ%oTdJ*YUaK_`N)8{ zLwxzjI|+b1&72-U^lZZifOnGi=d35uY)vg^`trB^TsMB7sDhf_9IG5F%ZVd;B!&dv z2hGd6sr{)1Kp%FPEg0M0dOgE$wQi>B?C$O|1Jp1m(hZIokY_z>ife6fjn_*&tFGkMsv)dYB^~!R zRwQAnAO~giE}}sOac4%==4k>&Gk8Yj)Hs94IUB184FjYIqe4Gt{`?j6TW%mSAzn*t+C?5Bp!9qW%coK#$8ADW9> z7zIy70vb$dog~G^4c?11*nwv3nzB^3rqW)V!pTv6W7?pSW2d3dUQMQSJW|&$@*3@A z8>aU_Xo8+S}9=MCOR}kKriJV+}^Gjd58bRz6dPsgTZXZX|qN9O$`4 zQj?|7Hqx_F#$;OcIQ^1%RX@&sfNwZ6eH`U2UM;bm`q%XQxLRkikM}WJn}BkRg1Co9>kfPMZ6N4Hn)gEAlJEt6-WbM_cy3#^a;4?MTx;$|#Dgo&2_t8v)~8xO&B1DiW0F5KD(Bfm468KK$;W7qgli&Q$Cby6CRi`TN3i7M{8uM+{l{^SbSy< zpB;?1V|+6b&zKG2&X^rWslgs^LZvq%$r+S!CZrpNsKFG|+H`5l(w}TwinU+7^QCm6eNISvuL~38jh30>HFe8!J3?_P z$d>_$&exURn@n5I$Qz%!VL5&G;H9Wg4!qw?$aPfa+0g*7=M;)Q;uKsyEhGU(VL%-~>!r78x8ytuM45xgnyA`0W{2KwY$ zjPsM(LkLtF_m1-k+AQl2qIIT*RCne^RjGZ^gFDzL%PV3*6|pjP6ruEO-|xLf(hUrT zMu+eDoxfRWK&~H0Um=G7&VrQAH}U*T@ODBPFzcj#ziQw;wqeg>l%3-Wl3jI1oOZTD z;R`}}-x0{?Z6}!(X<$dcN~+dW7n|s(1dUbwm2Ff|%KIEahtfg+t7&Scx?qcRJQ?7b zSS={)enEIK@g{=w#{Xi>G(h~u1>NA!oYo5saYKr(I)~}m+qd3IN+Kj!XiBx9tfChCc^kYpr3%OyVMs=fu#O^;Tu22xA)D+)BHD&dMB>Bn z%94lh%}d2fEB8@d%1ZZS2W_CK@rwR4z>^8pb2N}Ul5AapXwpFh2yc(w)beXa+-g{E z7xjeg%xXiG#n-u@7$kQp=31-b?ai7+23?O0A2B|=a&QyeN*adlosoM+)+a=UkDW5z zjIL{igs(Qgp0ZSITlF|d7L$E>FQ(R!ZmM|89b2&XR@$wiIDSbxz7C#acLaII^Q0aD zX(;L0{kh8bZX5cu+nt|a&bRGOC=;v&m6i-oal!P-q2%HAflqvQ*+x4!y9aMO4>0tK zPJV2uHwvzSF-WU!Tzr#??Q}W6zbUSF7FtYmRNn}3Ur~3Ttq*oxz8p8iUZOqv8CGCO zqbPTW8dsmLbf^5N>)bx$9Efq5F5j8}78&cdLn`!uY?J*==2X99c4nZJ(=*FLS^@+S z5!CL7*Tp2&Z$=?7$R|JSAvh!Me0Ve5P_83$K7!91dF|1} zD=d9LLy*Yhk=83(b6B?rQt+tt0U==k$&Us92&-r?-4ri?hharXNcM zKqwq&9+?GT%$;bO{;40Z2|!>xTt6=Lqu86MALRqac_H=Va6RcdvGrr*pS2&lekTA? z4a2`aY`%l`qYa;0foT0$cptoDKp)BvefnIXA)g2N8l=D+ghR!K#GYXJ1KrKdZzem; z{V~8ta!r!Z=+%dZ2g?57+JohW&wrY2;X>mc54$%IeUZ24zMEfuL|-ZWGkwSP4Tiw# zoX2%9)Ik05Y0ClzJrnn66{EgY3Y*YXW&&60rPjd@X4&_wqz9^t;LeToq66G&zSN<* zrY==`wUH(=s`rZyK#Qybfhf)`#xewXWLpZ&jLG77Knq~>?uLlBj<98J~TLQW1Jn$cAdvFL-A zw;!Z3u0^Z)bWwXfNneL3y7BV&zAi@UcxE=o#v=4|ysVn)%K7t+gbdnvxi2~|Eld3G zG&Cq8P{;e?KaQM&Pd+?uSJ)I5_5B8QQ=ZID@__P ziUj#zlaXD}UUGpY3lRn5U^H&K*ixm}Xu<6He)yb1AiprOw(7!#`^@e!e>6Ct%wF|j#Mv#6q!nzFmeZRekBk5oe{N-^V-rn`OHP0#M~&_kvXX;e z?u%Uk9Pp2&Hng=a^M*HC7(Y6e9diPq^xy=qz1yfWPh!WF6v@)OqT#9xe|*7GtYrQ@ zncJ#$)>*8)C~wiy)$Jw%+?)d#SGC0ENvkECtxVO#+yAwlOBZDp_h+$q3a|b-)36Hy zg|lafmGxA1>W%v6(`V13%PyV( zNXu($D-wuc!sm(fqi8YDseam6zCIGqr*zWK36HO5(k;r5Gv-cl*}Z{do?1MY{v`t& zB@*ZC{_=P1!i!No#L0*sI>wJ+O+98|wK>`4EK7d76lYwIQG(d|S9{qjVzY;1TxTy; z$G2qdsbT(|4#cFg>h;gxQqH0ycb2%?a2PC38qum#a&22%7JJ2H%{(H6*yUQK%Fog- z&^@ig;wYvu8{yvOb|Doj+Nz$$&&DFX9UUeef<};<67(;@(_JL$;{fQ&Z?cOKp@@GV z-iuiz5yHRdkPl2o)PGSyzv;N+0_8E5xR?|Fg0y~Pb)*r6Yy(j?$gyuQ5V@)K9%`k6 z^Tl*eion`X2pU5l3Ju+c`ikHXQ3RYyCI(_z$WZ)$CyShCG-QuBfB%SaC+4l3;z-PG^(?v!lI}+6p9)#wZ`zGGzJW~O>+~J zZUcG?uIN&`)Q&&9RB6qUBd2!N9U%f_b(X%P2sdEPXkU6eGXco$&H1CW9%40Tayyg0 zQ5^h|JF`$x?%!sQAVTsr=O0HT0c}9GdI)-u+33~mhCw4Y_p zE1g-0O@XVAZEj`t0Oi3rL!q6jvOUDB8=*0~fDUohkx;0hqKag1m{+;|RC?`lb2|P& zia#^YC-&NyKTqV3W-6J7zLj77wPY1sT)lg^lzZW0W*ze7jICb@o!GD3ST6T)tKUe+ z=K3VO1?`VLb;!AYEN_O4xs$58e~l^NmkNSY^5L0Ff3m5k>j+}o*bS?~$V3D+LMW=X z(&t$41Bzd>*I>pZ@I{qq<=EFQll`*%lei==$n(o=#QE`jxQ1HSy7LDgWm+383OA0_ z4b}#R|Lm)JOj(5`j*qR48qxW^FWeC3wd4#lwgAsy{B((n6qS63zjRM#lq?k3U&QP_vL-~T(FbO z^CY4<@|4_AJ~+Y`jwu6^5;QrcDZ_fjpl5ig$edNJ&G00h^S_wl*CR6*7bN+9ts4$) z8}>=I#QYf)MNm*;Aou@%2;m0pmBM?9@`+r(L?-A?QBY{_8!!Zs3na@Ij`5xC-d79l zd|9t;J;|cFE5qTk!$=wH`5MTNM7AU3f_E;I*9cX;r3lv^n9JnFCYj!O5yifa=Bm zCT?M#<7`|bT`LD?_nWFNE=kD5D+_2+A}C6s#8PZaFyiP@Bs^iivuL16-y(XAg~i2L*5erf8^1^I zR^b3Xx4nOFWM;X((vp);@TY!u?-TC5`}jXC_BJ;&H~%+wxq6!JqsxC8{kf=csvXkx z+kkU?J+$vo5OP>g;CnIc4cNI1MXz}`QT&cXx*zI(Jtq9|sUP}cAN&dM1K|Qb3j0Y3 z5xyOe!4j>SA!OaKgeTDLR6M}^v`HT(!{)01TZSyr1*@H!hZtbWT7+dg=n|;OtB=2n-5ZSQ;6Xlp1PrWjygpz!t4dc|~s#yEp;5 zyV{DhvZc5_y1RNxT}5`$9l(eBsDObmID^6qc5yn4+`B?HzlYS_fU=@y^xWFc zoMNJLT3*G)58R&Li{Stbnl7n?7n7fk5z+L|1EelFA+4)ZK%J6XX+XD(P~BRB?Tcw^ zfZp|}x?671wg1jLow`f2xkqvFr>4h%-f$5Nz}djH6bc|*x<|Tp7A(3@7DvGSn^830D(mpFfJV3# zW<;p2qpZURYAi7}G8!%m_mz&Jk@7NMU&~lajq{do{G{L%z-mb{v6wn)95xbNig7sU zehN3V$_9&-!b0h7Vy0mWi(=;?T zumiS$Xw*gP&n{IdJYTZ*{#l=-44uGU<_>R3AESL2M=61=l8 zDdyd%W!|GpIa+m!X$Aa>+qxP;V3tguvI_BJTTk61!#PeLBMN3m0h(BONru{*`Xg7L z)vz&X=xJfMB;Ej8I-B8Xn^(PcOpSG3(=rG6n=O$rPEX&&afP1jq?UM`JUPk&`OnhAHsWdH z8+(d}+MeK-kB`sD8ix&PE%%^pntpppT|*bQ0X=p-US@Iqlsn7XcuUvH1-FK#24`1O z(MBema?$$vAkO+(O)G)dLcrbI;Rvp$h#jtgAk`=Q3L`pW{Z#WFw!XSHM^#tJm^(qQ zjKB+h|D2QIrt=dm_d`4*T}|cUe@j$l6^-VHE*6_?ONvyfO;b}<5Ix*Ce+Zy8(a*U) zT$~OkO|wZ*tFCM?#e02Y^lWu#-Qxr#EURjz>1!Al2lJpP>Fh9LE0=v5_i$L`w`sAi zv@bSo)=ZMz6Ka)J!Ixyb$@YfY+KaC{R0tqdv(7K^8A9S3Oa`Vfz%(&eQqF6zTaqN3 z-Go7Wmn{%!e{G4(LtJ?OcnJ%&U5&@Qs0105X@b7c_MR24gS|lhs0!`DFX(cE7m6Bq ztDC#q%lrKIgq!!3vzThm+kbV6UJ$q_i(diS64&P10=uyNq7dY<(A@*8iTk#SyzW}ZnE7bWJwk7_Vi%cRcBb5B4@5Sc~0opC)XJixbX6D3%o!l zzYJYn4W07rl+MoJQr6bWF(IyVAFq+J7K?L#m$^=Il@{4~`vi~HQ2x`FUbT87DKZ&x z?|x_x=2fEH9+|a*_!s0pi~2+->+a|cvXBT|MaGQhfcT5eKdQ{xP{w14Ob}kITuoIu zx!YI9i|N-YZ`2(fq;ID=xpU#O1f(wlnY+c_tqQ&2?E7h?=BpPG+oSaLrxC@`9$(bC z(U$S`^}S(ZE(Lh}WRl;tSuHiVX#`ZhEzDf{V(w-a6H1%?ixQWITisVN;$?DrqKuaIX~a1I{a%Gd12I1F78Ivwi>jC*TwM8KzZx0pW(6{rZ(kmUoZK@A1Wisb!8|qQAKWDAre+Zq#$RCg z9Ht*UKmi(<-%t160tW-eEl#4mA4%;we|U0o@f|5n)Pp*pX=rNry>YxGAR zaFd78SEt!1!`Z-IS`A|L-wffMo!o5}K>S7bdFxO)c=NhrLHx_Le~Fy`ob`kFD+)C% zHgm82t#B0|f&J*IKE549<)kdfz`9OrNu%7-?{03nt5bE|K*h-tTnVY@X5&D~=9$So zxS$rQs~eK>xx4|mAJV{We&-gaDH=59Rq(f2N_T8M-q$hsZ^OhYM9x&0AG=tB>9X!F zOkp0Y^O+Bt%ypP@8#S-owXG}x!c%qRn)x%wrRbjAtuKMIf!w!SdO7}?qZ3==%~X7q zOsdb91WeDT?5Z&zoi*brX|^%w43p<-DCTHwFCgPZjG3*AF{H*ZoVIN%Q+T?A7#Yn3 zcgJndKIi6h)w|j^ZSu9bYQd#mos@>e`4vv=dE^0|yQ%|+JQ(Pv`(ca(82 zAutkO@$uumFDoapw2W>16ve(`dha!qi_|VsX3LGC5W%Xl(5JbjICs!t4&$eBunqJ^1aGRm$vx?x5b>!=U~7 zq2hJa5T#?(i714&hBwgHqBfi}9vXxf5mD@^y8k$J#YqtroR@6=Het#%SR_}DpGtDi zYBpfiDU)44&H}f%wzfXgT_ofla+!<2WC+m1(`wb9PpeJrjE&VxZcPwBn_2!v@NY3j zz=uWQl)zA8x*-dP>U&dkvJIb^ql;t;hD`^l_Vr}-pLs(qPGy_tHSlh=rq&)xlTU#( zQ%&>uPKJ~Zb-JncokZc)S{iV5d-hP4l)X!=Vj@o9w-K(fm!U$}j(+8;W$CJ zhu`Y)xfLUJ@0*J;q?(v|N1ko5$uOl{G=;L8d|t`j+&L8Av<5jt!_!f4fNZqRtsIlY z=DqB)!xUp)+6sXazk0ObRGWh$DpGRdR+SPGTNE{s_hpPlg0!I6g$na_aLQ}?S+QuE z3y$V&%PDj}WbrH(@oLOpow=3^Lv?;WJCV(r3FD$~u@%iPuv3E~O?FpCT)kOVV69<# z179OYaJ$HWnRF`IdAZwcQmZ-+($;(`*JjaJFiII2*x{Ot$XFlC-Q(5Cj$&zcMUhzm zg}XTdbrE=R4)P7g>Xz7EV8F~K0F;aA7F*A@VJo=hYtZe>C?FP2i$qRY3nfh{0_Wi739g1p*oMf`}LXa0cn*kD6}PC&%XcAx@DndyH~sKPDxkgzHSy(+7-_> zy4UX(6{vz$Ah0G#-p3q|xY+u;r2*u2)uDZ!S0idVm}=QQ7KCGoPg%O_^lB|&iQcwN z@A@WomkkW`p&{ruKmD9_g!=+6a>*{=(X{FGi@UB2yC>C7Q;5S3EHsJPZ|os>Xe0qF zWEr6zewv}k^at7sY6dvyerRy95NL^9GpBFB-b6D!T=9;mhJo&uOAhVsbGAirNaQZR z(}r*-O%~<9Toc&k@wANF?l>u)9tvNb^I#)Jb!W$5YYFukOVvP6OJzWc`m@Hr5-T)~ z6h$8ANVEP_OW8T;@T~UE&P|4^t&OpH>EkA5GWjd9=C)2RD@bbbzeMh~o+=OTfRZif zC{CZ_{IjH1tF=(+QcuvLTB}GStAu4fg<39u`mJZi6@}7YiDjj)+)>qoZ=Ls^q+ z+?o3@pZ^W{SUXVo_SfClFw}Bmql@kL_`=HU+7e*i?-XumG&6pJZsqW9^LTb?2nd)P z=M$mKp(*KR_%A=!S62}zrx#`Z*{-g_$IWH?KxHJVb6n>$CpK+6Go?f2g zXZrfm8#p0cd%DGrTnKf$qF?-sZsCFb-&EC+<)eCoI8{q zFlfGGuo7v;S<$p;OtpV26&biSldPHH_BYYz`K&$c!ck%al%V*kOGI3^qWTZ6(5P-= za)|eQ0J?nmj|xJ}ZlE=E*cLnA#JFkO)?3&3A)nFQ)U4ksV~bt>+rXh8Qx3HFuTf#e z&C%txK$1h>*C&Q{y1K(EN7?#v&8?3~=4CK2Mjac5W$WWY|wS3yJU_^wjAj{SXMI)JDRREGYxWxbb8+i|$#INn0S~3>WJlE~rAWli$p) z6hZ=>kV5KpnXMR0O}GQym`PuPpn{M;pPpdgK+TYz)z4d5MAke$a)&Tv5eE}oFllJ6 z---wnWc+Y6og^_$@?a%4#0(?)S9ts89rj`J-IQ;ex+G-Vs5`SZHuo>n@k_)!x5^g> z%vR-z-+@q(jGe_`V#mClL!~j7Hw`gmS0=|MF1K4VAhTIZrVUq^VC%gcjF9bwEIx0s zDnc@F8tCOjv7Ehc#q#hNKHb0bv42=~GFjOm)eRw&zD^;RC$N+A&+EZti<34Jyy<#N{4B$H zessDym*^jc=;BI?@c{y&{L37mJk?D;nq)AVtAKSLrZ*gy_|uvmK{KwA!P7S+wN_|* ziM{rh$ zGIzxL%Ge)GtbD&pxE$2teO4^3zWkR|KO4V0I+GVZ21o~UKg{xRVj(ifyBX|`W|M=t zcqW@hxE!?nvmI>u`IulnA;>#WtPW<0<0|Zq7?T6W_~35xzP@xq9jz|Az&oc-I6aj7 z!Bmz{eT@8X8>|jWiT+h6p4auU^FV$0r)$##hp1p(G%!z7_#Jshr|19d+BhYS8Caa! z3A5(+Fhl+H{hog0er_ML@3<>io&2lg){fH1|Ar^MC}33xwM@Mu(}e|g4Cp^v-wC#~ zx+lQxY)|F96X2GA{WVpnor3fdP}l@PYBPKOU1Qc&mI)g@`KqvpxQtT9NdO}K>Rd@Y6}iDr2-;< z4M=i>2#yaQ!tq1)jleu`%!N2Mfb@-yJ`k)8ynFF}2b~WlctL!JaShCSL4Ak357uvh z^dG7|VD*7?Kgw@}-VX|XgW^6)f`8*B0)U3(XFJ zU>K2N7)Q;GndyXAx*@fdOESmh4I;jvdX%&`p!Fu?Ueevj2$>>nMGJ(F7?A$*jp5wT zbQ=vI1#2EP&LE2)`p<+P5n0u_AR{hx1e9NnesHh|GcqcbTTL%2GKTIE+8K?IX3ey2 zBWQR;f?tL|VR-bKTcjtHY_yzP#xHU_%FwB0Bh<7c*wh?)e3BiXY57rW6Y2THh+hG5 z9L5D-Atl)aS|o>b+Nr8$*!oE>hf&kGuLsm}0?)au2h4K%>%r@TdoD5i5&Q!; zk9vQs^9e17s(z%?<4u}hzJ=97Pfuk#6`rYgdsehs8b;esBA31o|)YE=or7A z3H=CbG5&O%xt4KGcH z+yYO}++#Fm2EJ$GCLuke)2osPmx+z)==4mkXDBB|GmFA2RXbcWd-@Ug*-p>i0I;65 ze&l{;@73$gwPz$4#g(aeGskL- z==#PFK=Btlg<7HtUSx(Rc%2;<=Z$V0R1U}GEkDA{Qvfs0ZTyy8(F9LB3EI8x2G0c$ zfFb8NJ6GOBhL7KXzb_5xG|`Tg$p6Wf9(t@2>}&iy5V&*SDUm%2s0aPkh}_Qrs^aZR)0P6wW9QE>OMfd;{I3Fc1(0-`mO388dz!g;MfZ1=>u{1 z^y$>jh4JpyeIV#a$>{@y;*~)D6i;%PE4IWJBj-rs-4i42Z98!;ko&y{M}5#660&zq zz1STuvgb>^x&51F&$1%!9Yf~Tp}1}Dy)yS**5>{vn%B!yMUqIF$`I83t+lkS&mraR zT6Wi8v?9_G{PiWS)S$0&Wt%JV6Nsr)R-f|uX;Yc+NMZiLSYo%InsVG7{rR=F46+Z2 zd$BDQ>ZfbfaPN+L?_vWCt{yzPl)*HWgp6yll)q?D(R<+d$L@%`isIo zCIlG!Oel5!&ky%LUv~U+*e$0YKnYA=7W=!&zS$2b1J)N-{+Df?^_Pf!_b>737g0IR zf9Ft*F1G6o@gbI&;_LuPg-n)eaGUZ|`v2*bcH(A$jx9MF z0EdOLP?9bP!i2zFJo=5m0Fxte8VpxK>I9(<=}?di=BeaZxG7aju z{4^lhLi)gviwR8Cfb>|pgh`tF=h4uNy0yFsvwM*f2G7fN$jr-hNX;u`%&wopoXMz= zA)ih@Q$CF*a|sBu>0&j8&`)(@)X#O|(NA^~s8#3)caW+m$3r75%0}f}+zP98lN}Pe zTnl@@Yzv#W)*te8^Bp2`lN=J%A$n2rXO{AWTE56L^6X;Dkbj4YTmlf=Fd`7Z-3(A8PR8WNCT4o#6yx2V8 z+`|8kY6I^tI}Z_Bd>+hw5g}b%6BFvq*oZKYxshX{vRI&t2D@AxA-jkh*?iG3VX>F3 zDY=cFzPKH6z04hvwU#_;eQ`KqcnLVN_#}SB_+)m*^G^c)^3MYD_-6yr{L_J0Kggt? zEGOmpB9$+a)Vcq`n=cs_3cq+-Vc){X73vqlv{0oeeu=nNvZ#>~t5Gnw=qX*;k%&}> z;dDuOiEzPTbg2SGkYEEZU=opiguz7}qed2dNzp&$$ioBBCkutdv&qpbr3DuSY1B(7 z+);9qB4QY&kHr#7tcx_49*aCx3MW?HNpl>#TpeV`idiCE58N&y$(+&2mjs;H2}6rX z!Zn5;F&Q)GA}F{a$3;+ULs0R@1yC#D=UR0{)xeRCyv876nS>7-;XefUu%}F^D`1H+ z5{}{1Yo3V5uM$U`E8wY)$d&TKwZf8d&QCkkj9eeTr!tqWrk!sXb3#-}P96_2b^AwV z|5!cC_CT@P1w=O+C(EaE!?ta^Ne>UUxFJ%!2G?;a?6-8h|Av%VpB?tQCY(rj z>Y$@oBLo!vaQSJ&3Tjebcv6D(#KBD_`!!X)D{n3WSg$QKx?}0 zfv#k$MsUBV=v-YXyB?!}KOXoetIGj(-T%QsG2Z`okEGY6!w7gw6lc+7g57)V z8}Byog>@?GZBv|4|J&=n*+er7v6rCud>_jF=fB^MSGja>fm!=F2Bi@>hY&BLGd+5a z8ahT~eo~)(W47?GtD!UzpGQwW)U>4RhVhksXSR<^+_Z!j(4=c-FP@agrg^awJYaD_ z)4xWHjiLsT(M1d5uwe;Cm@h~pL>-;sPohkXqb5QVkGLn$(2Tk=pj}7EsWFoa_2k0M zO>lE4%7!UOi8NwxoRSY{C1-*ej>Nq5XTm*4_G_47~2h=@drlH3o^m4!`cckYToEQ!x%BdHiV!&05!+_G}f%jjphW6@#u@RjJ zrTjqE1jhkm`Z51V%}=vtKylO>7{?73h-P_2=!^;D%m^{+y`qq#czFamg^smk)Ch=( ziLuJ*$S8}FwMy&AIg6pIRMQh*J;K$Y(OCXC(&hBb1uIizeDvO*)<93(1b^Ok7hXvU=imh zj>p0i3-;2Y$4rRAeXQV?=ck-QNr;&qk#NrS5~)GU9uYW_e*EJl(L=)-^F9K1r21F{ zROq1$K&g)rI6|%c0hWB{l4;N3!+q8P9Mx=<=Md^eGGv`eZw3UnilA@>X#Vhy^3*mhm5^G>v1I zeZc5jeSo8$-`#qeXONneZS1B!(~9XR4nH%0>grHjV#x@8;7xyNI3Y1E#PTTo?2Jvc zzrjJeF;g0s*5&WQZsKhE5ldeAr5U-J=7<`OzUYw*6CvA$?I|2$pUIq`Tr?#j9JXk^ zs=93(XxXfb6WxtnX9G$kydpetS-Q1$bGDerX)H}qE@5YDud`tHxl=a8CMkCl4ssWa zncQ4jT4+0M%9C`*SVQc*kf1&lDa|)icTVW_CnmWUYgWfK5{t_6U&ZHyPd;z|3a$S& zoPFg-$v?xj9@Fq*p51`XC#ebl^6VF3~&E3bfDeKa# zwf;pCCug;i;Y{%`lMz-ar(y}!)IKas z*TP0p^%cp1UCw{`m3=urlm*vx)8OY;6D-0aIw5s^Ub@L?$Ta;YN`V3;rIpkvh01z~ zt+?XXfSL6w(r2#viL`NLJ_GSJHS5;!XKcA&qHTvCGU4c%kOXE>7ZiLV@i*X+({s!! z9>Fk8bTdhpO2plRq?-f^X#z%>Hwczf@EuwfLmW*+JEYAAM67s(X*>@lH%Rl7zaAp+ zq4`dTfntae_ov7}eZ=tHCnxq(lnm;G5kyuj--&;Jh=ifxQzv{9Ns~PM@a0ph9IEjH z5gts%wBrXg9>V#g@k0t1(7H4<=h~du>r?a{;_@R29)$e#yc5VqWkK@1 zbflQ|Q?eudj|$*QRV3jt?}c-tq(e%?4msG9^rnI!#q#NLQ-YraV$%GSu}d>PS$?{> zOSK-oVPg5j`l-xET91@Ny5_|D$?6kWr$zwv^{J#w=ywK>KWY1f;%W60Tc>EiONlC_hMB+U$BST6o(kXT1ezmuFM$vu6_=*m=hHbMoJ`|3zjFwI<M0j4W=w63^9>%t=_vwE2H;PdN@Op~2htip zs1D9ArPXZu7ZpHqk4vxyq`P*TT8WGMoU2iac*gc5_g;6SPYdz&U+#-kE*7?={x=iq z8!p|jY`)jW#)!N^E{s3}P2+sIIS-`OrdrWfdVj4_)zKb3{VIkD_3v+z^=msl)36RA z9I0omeHte<`4%T3mbyJkdtN=jvwKK$GGZA7Sw1EBzu35`QA9&M_RAXh{6T`7i%k#C z9^s+U3N&gM6&d*)I5@}dFw`O75En$`(lsVMW^j`z@85f&!g_}OneE?O$)}f4K-j70 z3RO0A-0};Edn^t8??Uw%;RPdM$kG3mZk;({=w3m>3fT!HwWUg|RjpYq0cTweq zO7nFg`*8o1V1Yv8IpE2WeEkSIW9T41$M)}$);pJEQSKi~Phri@?B`p;3##|Q-@EwIFXL*aARa7`CS@$pP&ko?%%;roED;Cfrqpw+h~uEW zf$T1gbJ!7qw+_Z|EYGWK z&hid%Z_$+zn43o>;gbhp5c!{7**YJPh@=q(Gh`po0GAE5S>_cBBD0VDkMK3KTlCHY zoi>bTJo-yp=evfkDpumc16l7~#J6^Y@ZxgN)kFBnAjA58ySdw=-DRxPV@|368NKDy z+?5aN9|ytGuikZxs#66@gU%frcWREKxi$uoayz+tM2QK^*EJL$h>Ek7j(2pP-zoiV zHzTj0ibPTq=|%w7YwHb#CMVp|=O%lRjd@Z5NWr_A#^{0Y{wxc(qh3ju1sZ{|`cmQA z#XNs>A%gYS2J`=L3DX;^#Z3GOanM-+_h^WEr4q2zDm;gaoNjC!mV?EO9JuNF8Cmzy za){Oe(?9a_y|0ec{=#_*VFzTPsXAy-O1lls{PxjB(M8!R)7i2eT~*jKNg!yEEjr zx?%4{vHy(0%zwpVAaGIrEc+k|N7Mn!?bs@5jlQYf7V|i(w646H<7XKCoEBziC`}T+ z_BkMt>p_F$CF|NGboGq+$KHh(&rEFXRC$-_LZemb<$5^d-{eWV=;}9+FS8?+@_;7_ zmvR2;$i20vb89R+nbR<}T4skVZGGgc8b!rWZgI8qE#d9anh7a07u?qVQ2pdE+TOWf zA}sD|b6t)9c8*k6E!7gRKT5gy#bN&WZcKA8GI#zn4spQ781|8Tv+>_!E;jwkf80HJ!ys_@Fw;Y$j0eydJ^LGsQju*^xESFQ& zqay#J7n*D=ftGbo0u~O@G4C;2&pZ&Fh)wXg=06_GS0<6Ys@;y6P;>S690K4b;_RL zBu(Aa=rBZ=RP{{k1^GOCbxO*Y#B!c?yiFGxgQ#>Tb(Y_22c@6)HO{%eC6@_+S+zv) zsi$6d>7-4ze zdHFDUoi*NQnO^+OoR{bVvwMt|ihMUuN&E6B(Ur+n;Tyaq2k+NRTV#Gp(vIM;=srL7 z6Mzwl%-nq}3Np<=C zU8uqjZt9O*k03-!KlGN>y=493nwYZf)$|2ljghn`S5PmS6~e3Nw{YDnU&Q*!dL$`o zH{YuvuWjptH)EEw%B2Uz49G~`^W(NpJ_k=LWzwk|v<>~Hl;U2o_*c!{Fp7RoAM&_A<-5L&kz&ow=We>=0p8Q6E(T{{&A+u` zGF^H?Y|N0~4=G`9ojf9H?GiA_yuRDBTq>kUs$=WJfy2t5@;cqSE8uvMTo=%`|FGTDFySYBQZI{%*S7-mGnnudd69<9yB^k!l}DZ7+PraxT39 zzcbkM6XwmKqjX6F7Oh5|9aciYZzJT#%G5vL;-1aem$y$^@N-%;%lI@uE}UT?oL9HF z--6n=1qO?A`FUQQW%m7`lR9X~yF!4rczcHdXGVqfa09h(d(irzZpmzbp}_Vv5C z^HNuDqin2q3ZtuL_IRv$gPe)I+@`$R9kMPh zK54oRb=m$nkC^g$wViR=4sOn}{dL($;jAkvz7AoABNdOBRx>{l?MNudI%W4NJNU;p zx)wvdb?4S3pGZ#&=SWRUxjZt!j-{;lOuh(s9_r)c=|DqAsvYF@k`HQzqtglF%{Zhh$ z)g7#G&TPeXtKn}yJs-ely7}R$Q!ZL1K3Cq1u2s)tNq3o8XLz8r=c(PkSlPYG71H{G zjP3FJ?`7&@>^0s+dom={s1#bo;J-A~tHondPqkwBc)uw$UakM+yt2Vesx<4S7}wR_ z#!?4*Q}pl+%u=E4XJk)ji)S~!#zcI;REPQ6t~6GTYw&^ZZ)iWW9J#W^xvuegQQXN3 z?o}*GPfIR7_<$u`eux{O5|O(WLeZ*D`sB)*3YX!$qAn)pV%^-!PqJtayU)& zgeSHyI`V6V<}tPbc(+jJ@EyBGB|Yrp`w6;9Po|_E;pqfA88|4;rz0{5Sg8?kA-v z9F5$xO8vn>@M}7{f!}p~`o7t1O}k|$io2@SK9O`E(TrcRs7z8vTfMF2FoV2j`H3g= zUmtAh9qk!4X+AOfrpeL|-BA?Y*Zo-K!x`-H7j|b4jJZD<70<4beQCtk5_Y1*A?WOwMEDhx50h+O`f_PC-_8#wPhZ{Wagk-r9&t@(9DhhMVK8jCUNHGkziA3S-9Mv%47~vRx<(JG1NG;NJf22XEfOeVOvR zp(5F~8MDD56m!&^TXIkiJY%Nht(U6U@Oeq^iZ-|KyN~wo(#DJGSPxta!=Q$^)ixX7 z4C}CLTkV&x^>XzO>3n8=_CU+w)$b4}!ICf|*R_+fjq=$7ekPeaA4+SmcOP7)to1{q z7d2?W7xqnheEY6wji%7O9lJD^G`)LKo67as`eVN}M~I;+Y;U zf|?sx72!;-YP~O2l>ITO4ZXb@OmChbGh((Hv29}uUVXXbaO=%4B}+SZ3wNbT)cIwy z=EE-}2_OfKOX;sSD>Jx`eOV-SL-A2%RIJzZE~{iC{u4{BJQF<%Jrz8>l@|7o_ z+d(GTijxCdR@Kla-;gdo>ro`Hd=lPZd(Q2_f%X$!i5qlppV>S-5w7ztq-B}nx9!1E zWo>LFZQl@zNrjhK*~H$iO`bTu)u?jOyR1zAlY^TFdEhXiubx|v)_Kre)|Zw?|{1Za8Dn7M4j||5suo&p@=c|;%@&9*9?@V z??p`G?Y>*=%dWQ0=24FQ7=2NxQuyA(6k+z93#q~%kKA58`dyyOM!lOoXWt_RCC-F; z2eT>s%)OgP_ve-PO^diXyEK1ej<3~*DOr{9`6^|?K>qGuWs#Cx5|-h$Uq z&~jaSTida*vt_9HEM_dT3z4h(*lg+c;nwD15pUB?%CDtfb&D&UcZn17utYrRsALIM{7^B=lY*C!7F@Y3DVlV+<}wZ#F6{Sf$@VIU1UOQwMuzd zjfJPyqLX+yuZ!p$=2D3f7Y~l+>ELX6eC2%k#4gxvF}if2?q|1Q_6Y_bDhXqROHGaO z^F=UN9w+f*Z>00V3gY>|gfLJ18V!tV-Jck7D$C#Md%9i!Q-;VTrTx|hENt;@LDx82 z%(oV-QCVl)u4dqT>Bcg?9qdcn^Lr7NMk;1Ygm)f`+EaHYKci{0GhPNW*pMWH8A`9L zn1ba6K3XlCT@Pn3E-eKw*9bnvvg<|vz&d$8u@BdMGI|AqTRx}8)JETAPboG)zL^Nt z5n@pe7zt5%=X->;&Q3(u#%wt3x$JwdVkGM0Q1X`sIn`;#nsFiT?l8s!3VYX_@yhYd zao(5u{LJg?64&v0QeLW!t8TsY7-BkFE6nmGNZ{boABSI0?Co4-V8!%9o1PV~-}v>s zM3{Qt_z(N5_55u?%KIe|xC$3T4P|*(g*%y++utmYQ}x3}#-R&8o_1o5XczQ;U7l&Z zqRC*)^fDul+S-yBiAbgkvbyr2EP7(`rFH|cv^YL|It&Qy+@9r-`$@?#sXS8rS zANknZ&t|M=ow;63$f+@=YR68PQ)-_~v?N-t2b15pv@(RgVYz)wFXNWonE^Mn_Ju{n zzcn%tOcz}roX{2-Eh4#IMPbE*+Vgkxyds871Oqhe%&gAWJriX;b6DMP4BSF}8m}on zzEQ;bLDAXEd(yf@`*XGYrk^N@#!9NI`tRqIw=0R{leycHHFG!DAqbUr8W+I4J@kOo zp%F~JaNguvw5CGX7?bw88bMRsm2fFf5l7r0E)Zwf^@hP|I;LR5z5UZ{gfLu_eAix` z9tK;&NG%LE&I>~`cRQrLlRMH*-3Nj6z&fGae+Fh~^g&(vy_{iPqX>C9{hNicTh5Ei zXkF8-=G!L19jx~;%C}(o`+d)&-k>};V4FGKXsTn(MMchsrY2z;6dM)mzCU`;cTC1~ zt(}oH{L#Z3rRj)jCtv$)H%lhucg_SKJ+vC* zk>_5uv8THdxA+y)ivl~uw}qIlot@<#GWxl!`(4X1ZPlk&*|t!1A1xBhm}3K`&2lY63#6W zIwZI^ig(ME6ZQzx=-@OK)9ig^cEv7!5{AO-{9x;AwjT`Nn9O?)dpY&!r|-$Q86STJ zk7L(@SBS}FBlFW9FlX}C>|T<)DcI=S1oo$(19pfQ9c-f&ESV&z=OHJWo ze1}0)wDWgWZ4vO=;t0nVXH+c4m2bpb1>Ci~=TXrZA^Is}Pt~njN1;cDTHY{&L*kY$ z%JEx!b?;l7%N>FXMzvEzf zko6($vX&>mt3w9*Z?~Ww)W50!KXDq zT%sSbFmXc&>%rX}JmC(%S_>(Z@5A(sTp-MNEl7p=0@@c8>SqlgMj-r#h7+?xHvO%uQUnv6I~MMv>WDSs`NRf;@k72|L+aIvPq&rr4Hd#$^9%Rf;5OXE2Q*ID|o&t(PjdnqoD)1kp%|#;tu8XI;g9pfI3?SG4 z5fXfQZbTjq>_!MnlLy;$YkgllkV_A2UqGWv*@Pk(d8jD*x9`P)Tr~`&YOb*+52fh| zN83@7EGMU~sR!)6aIYj)Gtrg`9C_Ia;cJ!1+w8tGc`$vr2PMhuIWJ8K14R$bbAX5& zWw5Q}C8INs(XR$-UIS`E9gu{g2u2=CuD^cgB_NYEfD?iQMi!1dlo1>acSB-{(~~&T zlq1$nPl3unx17`ksYl5J63w-w=_OpZe(!Q1nKmec!Vu{O!^ngE>4D_+)wAjRa*Ga# z$3z-%deP(&&7D9`Mg2oDS_TntZ!84P1CGWZ(U59HDAWm=&AwS6_UnMf2vgRdE0FB> zK>^W2`XJH5rYINWubGS3Xavl@q{%KdJ{W9VmbAk8C6beA4s*W22xy&y)`nMrSZ~1p zqJP8#pV$kiq5ay*B$p2a*vsFpcXk6mSb*5u27zU}`7f{rNN-h?8=;bdq$4kRxjxIY zHz4ISLABotp)e}?&lEOlNPD=aD^?gnYy)B!{cF3H)D1q}MZH%+l&uCyO6c2vuHusa zo1VO;5m+`JB+xVqXbLrEZN+mTn(pnU0#86d+W(0eQ)GHiQ5V;QLUm0jX>(@7x3UQm~yVO55wl@wIy>6rOT zzJsuO#Z4Mk)%E{3J$ZW{+cDMW1oCq~7?q%5CHnMVsOAa_g#u3~1DvjS9$OH(k|1)W zAuj#g{!bJrPc#Bau>?Fs!SSs?gL*J1>O?}#;-BeXFst5vBAT)1>{)J|?b5e{L-D1W5aA3OxfUXHaj~V$d=)VJIjt*2e z*STF1(pC}J&2~c;bbi}L6U-Q#kNtv52ep`30J^%j0FLo-Ld$nv3 z@&~RyKF`&w7B7t31c4&At|Jt@AEqrUH9=lJ2Xi|#zLv5rkd$&}25c=Z+zv=b*1=#J z5FbC{UKptbMbA3ChxVaoBvkO7M2m)*?1lQugKjHq|*P+-6CR(1} z%>hO}3mUi~1b^82zv2Jx1-}_>etuFxJ7CBg&32E}sR2Mf3do^#k;jfknWgVVeFV|_ zZZT=Es|x!s=zo&-C!38r<(Lg&WD>auw6Ovn1KYkt*M^7%aTSG&NyXr&C9z3>SW)Nz?<8$Z5NH?5LHCaEu1rB#&nu@!Js}6?O z0RBFZYf#mX&Cq}!i^fq*HS;>QYhJ+LcR{K_mvs*q>Ho1z{;XeQ>WjKNpr(>(-piR; zV}RZ)KyPT6m#{3H+{Xz^QEl{RvHase?INHybU|6oK@(;wT9>P7;M4*4@_8nIxN^bV zT1dDZ60PCnN+HXH-?rOm0P+bC>d<}?&bMH4Z8r}TrTc&UhVM}bK+FfUhSqdVa9-%& z`Z2{o({@L=dfFi=tL?N(Hm?vwTG+fu6WO$2b{$VQ4~miY!w2E32=uO;7is33X~Rr; zA*L4~xaSSfnqgisXWL2>Zi-{e(s~?M5@5ywdqeXJB~KG(D)}Yi(mb{v%$u?7q*WzE zX~En;W6Jv_QJhP(P5`alf!6wvKC)Jo7R*$X*6LVs{PM3gBD94GXwi(CN(=LTbD@eb zvi+DB=9+pm;>RK>jH+_acSuG7?nK~l6NuUO8qMY`!kJMXln(n5xPyCP4+!Umb^~r`_kM?<2{*;<;B7Xq zV`G86KZCU_bZ9|3(TbU3LC<4pD$@pPmjbo*A<>3)rv*8cIMcim3>yN}&K#uF+p)Bu zrcz%N%7UeffXU}K&~)F0Q+r|@Dcbu^05|Urp!EC(+7Lh+X37mzCwiohaNmJ(USbD_ z(uA901FclbP)q^L^BZX2Nt!TI@wJ7qg4wlSzJ}J*?@=`2rgkckP+82&$9V!l2cO_1 zofS7GELZ>&CpQmQ~upQ=A;~ z`SLlEf!2Y4#8l7gI=__1&i-ITfdeWQlC%1L_w7383ni z;1?{xY=%)Ge_dxVRRPpL0ET5Kxlto+$Y;;Slh5({n=`KG1I>fM$Ov7HMm(hr`Rs#7 z6b9BU4}_+df_QfYhZdo$qp}X#uoLb@kk{NlpMIMo7ahMh{rhb=ohO}O2q2Oj-_X1vvR z8j@2nK3C76@9aJZ59v*9D<+2jYZr!ml$EZK5)cF(+yg{7xHCd@`LO&G&+pqYRN6+( z@t%MjV9x8{@R$e@1=zjj{1=ixqR%~0#Ypl%703~yi=GdH>VR}d&fajF_ZWl5<7HaM z!BMF}ZBoIuQGx*as*?O}C+RM=PsQ{2*FfD4ut6?PBo=rmawi4B2&mw(ufG6mu1{ms z1xK4MYmpvFGSs31?BVejT+auU7c{|B7hS$Em;^-NF()dxCXR6Q-=KY&%bcb_3NMp` z!8Svntj-pde_q7+x4` z3q)wn4$9C!cXa<29NH<28N2|O5!f4Q>&St>VgE(!+r|C&UV;J12!sgq_yHYw{D5fZ z*5P+TfVlf9w&5XXYLXMIayfo|`6(c>y*+7ID|0YXgx7(4!T%z6D7Q^>DLCTUszMsp zg36SE^*sNE+Xu6vE8qvG=ru?Mma(FY`wy1LyD3re1ccscHB#W6;9xE#LxYpOu79ya zb@sq3dEh+_O;SrZr&0lSq?UyQ*BM*IpD_o;w`3=2(0v1w9Yuk0SVxrmUqp^^XzvsO zwonFX2rYKkUQmWM_B`~rB;0Klm|F({0@f|L?Gaqy%R+26y^#7 z0`a>BHbM|kr$`Yfy;^`&D&lA3q4B%~Y@1`|-i`KWXM{2^6Ei`kWbog;M1& diff --git a/trunk/tinyNET/src/tnet_transport_win32.c b/trunk/tinyNET/src/tnet_transport_win32.c index bfd1023a..cfa88643 100644 --- a/trunk/tinyNET/src/tnet_transport_win32.c +++ b/trunk/tinyNET/src/tnet_transport_win32.c @@ -516,9 +516,15 @@ void *tnet_transport_mainthread(void *param) /* Receive the waiting data. */ if(WSARecv(active_socket->fd, &wsaBuffer, 1, &readCount, &flags, 0, 0) == SOCKET_ERROR) { - if(WSAGetLastError() == WSAEWOULDBLOCK) + ret = WSAGetLastError(); + if(ret == WSAEWOULDBLOCK) { - TSK_DEBUG_INFO("WSAEWOULDBLOCK error for READ operation"); + TSK_DEBUG_WARN("WSAEWOULDBLOCK error for READ operation"); + } + else if(ret == WSAECONNRESET && TNET_SOCKET_TYPE_IS_DGRAM(transport->master->type)) + { /* For DGRAM ==> The sent packet gernerated "ICMP Destination/Port unreachable" result. */ + TSK_FREE(wsaBuffer.buf); + continue; // ignore and retry. } else { diff --git a/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h b/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h index dabb9772..009f4ed8 100644 --- a/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h +++ b/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog.h @@ -50,21 +50,12 @@ TSIP_BEGIN_DECLS #define TSIP_DIALOG_GET_STATE(self) TSIP_DIALOG(self)->state #define TSIP_DIALOG_GET_STACK(self) TSIP_STACK(TSIP_DIALOG(self)->stack) -#define TSIP_DIALOG_SYNC_BEGIN(self) tsk_safeobj_lock(TSIP_DIALOG(self)) -#define TSIP_DIALOG_SYNC_END(self) tsk_safeobj_unlock(TSIP_DIALOG(self)) - #define DIALOG_TIMER_CANCEL(TX) \ tsk_timer_manager_cancel(TSIP_DIALOG_GET_STACK(self)->timer_mgr, self->timer##TX.id) #define TSIP_DIALOG_TIMER_SCHEDULE(name, TX) \ self->timer##TX.id = tsk_timer_manager_schedule(TSIP_DIALOG_GET_STACK(self)->timer_mgr, TSK_TIME_S_2_MS(self->timer##TX.timeout), TSK_TIMER_CALLBACK(tsip_dialog_##name##_timer_callback), self) -//#define TSIP_DIALOG_ALERT_USER(self, code, reason_phrase, incoming, type) \ -// tsip_stack_alert(TSIP_DIALOG(self)->stack, /*tsip_operation_get_id(TSIP_DIALOG(self)->operation)*/0, code, reason_phrase, incoming, type) - -//#define DIALOG_REMOVE_SCHEDULE() \ -// tsk_timer_manager_schedule(TSIP_DIALOG_GET_STACK(self)->timer_mgr, 0, TSK_TIMER_CALLBACK(tsip_dialog_remove_callback), self) - #define TSIP_DIALOG_EXPIRES_DEFAULT 3600 typedef enum tsip_dialog_state_e @@ -142,8 +133,6 @@ typedef struct tsip_dialog_s tsip_challenges_L_t *challenges; tsip_dialog_event_callback callback; - - TSK_DECLARE_SAFEOBJ; // FIXME } tsip_dialog_t; diff --git a/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h b/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h index c07dff57..e3e24bb8 100644 --- a/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h +++ b/trunk/tinySIP/include/tinysip/dialogs/tsip_dialog_message.h @@ -32,7 +32,8 @@ #include "tinysip_config.h" #include "tinysip/dialogs/tsip_dialog.h" -#include "tinysip/smc/tsip_dialog_message_sm.h" + +#include "tsk_fsm.h" TSIP_BEGIN_DECLS @@ -44,7 +45,7 @@ typedef struct tsip_dialog_message { TSIP_DECLARE_DIALOG; - struct tsip_dialog_messageContext _fsm; + tsk_fsm_t *fsm; tsip_message_t *msg; @@ -55,18 +56,6 @@ tsip_dialog_message_t; //int tsip_dialog_message_send(tsip_dialog_message_t *self); //int tsip_dialog_message_recv(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Started_2_Sending_X_sendMESSAGE(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Sending_2_Sending_X_1xx(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Sending_2_Terminated_X_2xx(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Sending_2_Sending_X_401_407_421_494(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Sending_2_Terminated_X_300_to_699(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Sending_2_Terminated_X_cancel(tsip_dialog_message_t *self); -void tsip_dialog_message_Receiving_2_Terminated_X_accept(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Receiving_2_Terminated_X_reject(tsip_dialog_message_t *self, const tsip_message_t *message); -void tsip_dialog_message_Any_2_Terminated_X_transportError(tsip_dialog_message_t *self); -void tsip_dialog_message_OnTerminated(tsip_dialog_message_t *self); - TINYSIP_GEXTERN const void *tsip_dialog_message_def_t; diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_dialog_message_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_dialog_message_sm.h deleted file mode 100644 index 1671fb8b..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_dialog_message_sm.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_dialog_message.sm - */ - -#ifndef _H_TSIP_DIALOG_MESSAGE_SM -#define _H_TSIP_DIALOG_MESSAGE_SM - -#include - - -struct tsip_dialog_message; -struct tsip_dialog_messageContext; - -struct tsip_dialog_messageState -{ - void(*Entry)(struct tsip_dialog_messageContext*); - - void(*sm_1xx)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_2xx)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_300_to_699)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_401_407_421_494)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_accept)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_cancel)(struct tsip_dialog_messageContext*); - void(*sm_error)(struct tsip_dialog_messageContext*); - void(*sm_receiveMESSAGE)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_reject)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_sendMESSAGE)(struct tsip_dialog_messageContext*, const tsip_message_t*); - void(*sm_transportError)(struct tsip_dialog_messageContext*); - - void(*Default)(struct tsip_dialog_messageContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_dialog_messageState tsip_dialog_message_Started; -extern const struct tsip_dialog_messageState tsip_dialog_message_Sending; -extern const struct tsip_dialog_messageState tsip_dialog_message_Receiving; -extern const struct tsip_dialog_messageState tsip_dialog_message_Terminated; - -struct tsip_dialog_messageContext -{ - FSM_MEMBERS(tsip_dialog_message) - struct tsip_dialog_message *_owner; -}; - -extern void tsip_dialog_messageContext_Init(struct tsip_dialog_messageContext*, struct tsip_dialog_message*); -extern void tsip_dialog_messageContext_EnterStartState(struct tsip_dialog_messageContext*); -extern void tsip_dialog_messageContext_sm_1xx(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_2xx(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_300_to_699(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_401_407_421_494(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_accept(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_cancel(struct tsip_dialog_messageContext*); -extern void tsip_dialog_messageContext_sm_error(struct tsip_dialog_messageContext*); -extern void tsip_dialog_messageContext_sm_receiveMESSAGE(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_reject(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_sendMESSAGE(struct tsip_dialog_messageContext*, const tsip_message_t*); -extern void tsip_dialog_messageContext_sm_transportError(struct tsip_dialog_messageContext*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_dialog_register_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_dialog_register_sm.h deleted file mode 100644 index a0ab6c81..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_dialog_register_sm.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_dialog_register.sm - */ - -#ifndef _H_TSIP_DIALOG_REGISTER_SM -#define _H_TSIP_DIALOG_REGISTER_SM - -#include - - -struct tsip_dialog_register; -struct tsip_dialog_registerContext; - -struct tsip_dialog_registerState -{ - void(*Entry)(struct tsip_dialog_registerContext*); - - void(*sm_1xx)(struct tsip_dialog_registerContext*, const tsip_message_t*); - void(*sm_2xx)(struct tsip_dialog_registerContext*, int, const tsip_message_t*); - void(*sm_300_to_699)(struct tsip_dialog_registerContext*, const tsip_message_t*); - void(*sm_401_407_421_494)(struct tsip_dialog_registerContext*, const tsip_message_t*); - void(*sm_423)(struct tsip_dialog_registerContext*, const tsip_message_t*); - void(*sm_cancel)(struct tsip_dialog_registerContext*); - void(*sm_error)(struct tsip_dialog_registerContext*); - void(*sm_hangup)(struct tsip_dialog_registerContext*); - void(*sm_refresh)(struct tsip_dialog_registerContext*); - void(*sm_send)(struct tsip_dialog_registerContext*); - void(*sm_transportError)(struct tsip_dialog_registerContext*); - void(*sm_unregister)(struct tsip_dialog_registerContext*); - - void(*Default)(struct tsip_dialog_registerContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_dialog_registerState tsip_dialog_register_Started; -extern const struct tsip_dialog_registerState tsip_dialog_register_Trying; -extern const struct tsip_dialog_registerState tsip_dialog_register_Connected; -extern const struct tsip_dialog_registerState tsip_dialog_register_Terminated; - -struct tsip_dialog_registerContext -{ - FSM_MEMBERS(tsip_dialog_register) - struct tsip_dialog_register *_owner; -}; - -extern void tsip_dialog_registerContext_Init(struct tsip_dialog_registerContext*, struct tsip_dialog_register*); -extern void tsip_dialog_registerContext_EnterStartState(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_1xx(struct tsip_dialog_registerContext*, const tsip_message_t*); -extern void tsip_dialog_registerContext_sm_2xx(struct tsip_dialog_registerContext*, int, const tsip_message_t*); -extern void tsip_dialog_registerContext_sm_300_to_699(struct tsip_dialog_registerContext*, const tsip_message_t*); -extern void tsip_dialog_registerContext_sm_401_407_421_494(struct tsip_dialog_registerContext*, const tsip_message_t*); -extern void tsip_dialog_registerContext_sm_423(struct tsip_dialog_registerContext*, const tsip_message_t*); -extern void tsip_dialog_registerContext_sm_cancel(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_error(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_hangup(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_refresh(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_send(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_transportError(struct tsip_dialog_registerContext*); -extern void tsip_dialog_registerContext_sm_unregister(struct tsip_dialog_registerContext*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_dialog_subscribe_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_dialog_subscribe_sm.h deleted file mode 100644 index 442cd1ef..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_dialog_subscribe_sm.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_dialog_subscribe.sm - */ - -#ifndef _H_TSIP_DIALOG_SUBSCRIBE_SM -#define _H_TSIP_DIALOG_SUBSCRIBE_SM - -#include - - -struct tsip_dialog_subscribe; -struct tsip_dialog_subscribeContext; - -struct tsip_dialog_subscribeState -{ - void(*Entry)(struct tsip_dialog_subscribeContext*); - - void(*sm_1xx)(struct tsip_dialog_subscribeContext*, const tsip_message_t*); - void(*sm_2xx)(struct tsip_dialog_subscribeContext*, int, const tsip_response_t*); - void(*sm_300_to_699)(struct tsip_dialog_subscribeContext*, const tsip_response_t*); - void(*sm_401_407_421_494)(struct tsip_dialog_subscribeContext*, const tsip_response_t*); - void(*sm_423)(struct tsip_dialog_subscribeContext*, const tsip_response_t*); - void(*sm_NOTIFY)(struct tsip_dialog_subscribeContext*, int, const tsip_request_t*); - void(*sm_cancel)(struct tsip_dialog_subscribeContext*); - void(*sm_error)(struct tsip_dialog_subscribeContext*); - void(*sm_hangup)(struct tsip_dialog_subscribeContext*); - void(*sm_refresh)(struct tsip_dialog_subscribeContext*); - void(*sm_send)(struct tsip_dialog_subscribeContext*); - void(*sm_transportError)(struct tsip_dialog_subscribeContext*); - void(*sm_unsubscribe)(struct tsip_dialog_subscribeContext*); - - void(*Default)(struct tsip_dialog_subscribeContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Started; -extern const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Trying; -extern const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Connected; -extern const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Terminated; - -struct tsip_dialog_subscribeContext -{ - FSM_MEMBERS(tsip_dialog_subscribe) - struct tsip_dialog_subscribe *_owner; -}; - -extern void tsip_dialog_subscribeContext_Init(struct tsip_dialog_subscribeContext*, struct tsip_dialog_subscribe*); -extern void tsip_dialog_subscribeContext_EnterStartState(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_1xx(struct tsip_dialog_subscribeContext*, const tsip_message_t*); -extern void tsip_dialog_subscribeContext_sm_2xx(struct tsip_dialog_subscribeContext*, int, const tsip_response_t*); -extern void tsip_dialog_subscribeContext_sm_300_to_699(struct tsip_dialog_subscribeContext*, const tsip_response_t*); -extern void tsip_dialog_subscribeContext_sm_401_407_421_494(struct tsip_dialog_subscribeContext*, const tsip_response_t*); -extern void tsip_dialog_subscribeContext_sm_423(struct tsip_dialog_subscribeContext*, const tsip_response_t*); -extern void tsip_dialog_subscribeContext_sm_NOTIFY(struct tsip_dialog_subscribeContext*, int, const tsip_request_t*); -extern void tsip_dialog_subscribeContext_sm_cancel(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_error(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_hangup(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_refresh(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_send(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_transportError(struct tsip_dialog_subscribeContext*); -extern void tsip_dialog_subscribeContext_sm_unsubscribe(struct tsip_dialog_subscribeContext*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_transac_ict_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_transac_ict_sm.h deleted file mode 100644 index 74e4d698..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_transac_ict_sm.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_ict.sm - */ - -#ifndef _H_TSIP_TRANSAC_ICT_SM -#define _H_TSIP_TRANSAC_ICT_SM - -#include - - -struct tsip_transac_ict; -struct tsip_transac_ictContext; - -struct tsip_transac_ictState -{ - - - void(*Default)(struct tsip_transac_ictContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_transac_ictState tsip_transac_ict_Started; - -struct tsip_transac_ictContext -{ - FSM_MEMBERS(tsip_transac_ict) - struct tsip_transac_ict *_owner; -}; - -extern void tsip_transac_ictContext_Init(struct tsip_transac_ictContext*, struct tsip_transac_ict*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_transac_ist_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_transac_ist_sm.h deleted file mode 100644 index faedcc17..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_transac_ist_sm.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_ist.sm - */ - -#ifndef _H_TSIP_TRANSAC_IST_SM -#define _H_TSIP_TRANSAC_IST_SM - -#include - - -struct tsip_transac_ist; -struct tsip_transac_istContext; - -struct tsip_transac_istState -{ - - - void(*Default)(struct tsip_transac_istContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_transac_istState tsip_transac_ist_Started; - -struct tsip_transac_istContext -{ - FSM_MEMBERS(tsip_transac_ist) - struct tsip_transac_ist *_owner; -}; - -extern void tsip_transac_istContext_Init(struct tsip_transac_istContext*, struct tsip_transac_ist*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_transac_nict_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_transac_nict_sm.h deleted file mode 100644 index a9fbcbc6..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_transac_nict_sm.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_nict.sm - */ - -#ifndef _H_TSIP_TRANSAC_NICT_SM -#define _H_TSIP_TRANSAC_NICT_SM - -#include - - -struct tsip_transac_nict; -struct tsip_transac_nictContext; - -struct tsip_transac_nictState -{ - void(*Entry)(struct tsip_transac_nictContext*); - - void(*sm_1xx)(struct tsip_transac_nictContext*, const tsip_message_t*); - void(*sm_200_to_699)(struct tsip_transac_nictContext*, const tsip_message_t*); - void(*sm_send)(struct tsip_transac_nictContext*); - void(*sm_timerE)(struct tsip_transac_nictContext*); - void(*sm_timerF)(struct tsip_transac_nictContext*); - void(*sm_timerK)(struct tsip_transac_nictContext*); - void(*sm_transportError)(struct tsip_transac_nictContext*); - - void(*Default)(struct tsip_transac_nictContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_transac_nictState tsip_transac_nict_Started; -extern const struct tsip_transac_nictState tsip_transac_nict_Trying; -extern const struct tsip_transac_nictState tsip_transac_nict_Proceeding; -extern const struct tsip_transac_nictState tsip_transac_nict_Completed; -extern const struct tsip_transac_nictState tsip_transac_nict_Terminated; - -struct tsip_transac_nictContext -{ - FSM_MEMBERS(tsip_transac_nict) - struct tsip_transac_nict *_owner; -}; - -extern void tsip_transac_nictContext_Init(struct tsip_transac_nictContext*, struct tsip_transac_nict*); -extern void tsip_transac_nictContext_EnterStartState(struct tsip_transac_nictContext*); -extern void tsip_transac_nictContext_sm_1xx(struct tsip_transac_nictContext*, const tsip_message_t*); -extern void tsip_transac_nictContext_sm_200_to_699(struct tsip_transac_nictContext*, const tsip_message_t*); -extern void tsip_transac_nictContext_sm_send(struct tsip_transac_nictContext*); -extern void tsip_transac_nictContext_sm_timerE(struct tsip_transac_nictContext*); -extern void tsip_transac_nictContext_sm_timerF(struct tsip_transac_nictContext*); -extern void tsip_transac_nictContext_sm_timerK(struct tsip_transac_nictContext*); -extern void tsip_transac_nictContext_sm_transportError(struct tsip_transac_nictContext*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/smc/tsip_transac_nist_sm.h b/trunk/tinySIP/include/tinysip/smc/tsip_transac_nist_sm.h deleted file mode 100644 index 1a8b9a5c..00000000 --- a/trunk/tinySIP/include/tinysip/smc/tsip_transac_nist_sm.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_nist.sm - */ - -#ifndef _H_TSIP_TRANSAC_NIST_SM -#define _H_TSIP_TRANSAC_NIST_SM - -#include - - -struct tsip_transac_nist; -struct tsip_transac_nistContext; - -struct tsip_transac_nistState -{ - void(*Entry)(struct tsip_transac_nistContext*); - - void(*sm_request)(struct tsip_transac_nistContext*, const tsip_request_t*); - void(*sm_send_1xx)(struct tsip_transac_nistContext*, const tsip_response_t*); - void(*sm_send_200_to_699)(struct tsip_transac_nistContext*, const tsip_response_t*); - void(*sm_timerJ)(struct tsip_transac_nistContext*); - void(*sm_transportError)(struct tsip_transac_nistContext*); - - void(*Default)(struct tsip_transac_nistContext*); - - STATE_MEMBERS -}; - -extern const struct tsip_transac_nistState tsip_transac_nist_Started; -extern const struct tsip_transac_nistState tsip_transac_nist_Trying; -extern const struct tsip_transac_nistState tsip_transac_nist_Proceeding; -extern const struct tsip_transac_nistState tsip_transac_nist_Completed; -extern const struct tsip_transac_nistState tsip_transac_nist_Terminated; - -struct tsip_transac_nistContext -{ - FSM_MEMBERS(tsip_transac_nist) - struct tsip_transac_nist *_owner; -}; - -extern void tsip_transac_nistContext_Init(struct tsip_transac_nistContext*, struct tsip_transac_nist*); -extern void tsip_transac_nistContext_EnterStartState(struct tsip_transac_nistContext*); -extern void tsip_transac_nistContext_sm_request(struct tsip_transac_nistContext*, const tsip_request_t*); -extern void tsip_transac_nistContext_sm_send_1xx(struct tsip_transac_nistContext*, const tsip_response_t*); -extern void tsip_transac_nistContext_sm_send_200_to_699(struct tsip_transac_nistContext*, const tsip_response_t*); -extern void tsip_transac_nistContext_sm_timerJ(struct tsip_transac_nistContext*); -extern void tsip_transac_nistContext_sm_transportError(struct tsip_transac_nistContext*); - -#endif - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/include/tinysip/transactions/tsip_transac.h b/trunk/tinySIP/include/tinysip/transactions/tsip_transac.h index 41a800ec..e1e1a00d 100644 --- a/trunk/tinySIP/include/tinysip/transactions/tsip_transac.h +++ b/trunk/tinySIP/include/tinysip/transactions/tsip_transac.h @@ -57,10 +57,6 @@ TSIP_BEGIN_DECLS #define TRANSAC_TIMER_CANCEL(TX) \ tsk_timer_manager_cancel((tsk_timer_manager_handle_t*)TSIP_TRANSAC(self)->timer_mgr, self->timer##TX.id) -#define TRANSAC_REMOVE_SCHEDULE() \ - tsk_timer_manager_schedule((tsk_timer_manager_handle_t*)TSIP_TRANSAC(self)->timer_mgr, 0, TSK_TIMER_CALLBACK(tsip_transac_remove_callback), self) - - typedef enum tsip_transac_event_type_e { tsip_transac_incoming_msg, @@ -122,8 +118,6 @@ typedef struct tsip_transac_s char* callid; tsip_transac_event_callback callback; - - TSK_DECLARE_SAFEOBJ; } tsip_transac_t; @@ -138,7 +132,7 @@ int tsip_transac_deinit(tsip_transac_t *self); int tsip_transac_start(tsip_transac_t *self, const tsip_request_t* request); int tsip_transac_send(tsip_transac_t *self, const char *branch, const tsip_message_t *msg); int tsip_transac_cmp(const tsip_transac_t *t1, const tsip_transac_t *t2); -int tsip_transac_remove_callback(const tsip_transac_t* self, tsk_timer_id_t timer_id); +int tsip_transac_remove(const tsip_transac_t* self); TSIP_END_DECLS diff --git a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ict.h b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ict.h index b3cf30bc..038436b9 100644 --- a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ict.h +++ b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ict.h @@ -31,20 +31,21 @@ #define TINYSIP_TRANSAC_ICT_H #include "tinysip_config.h" -#include "tinysip/smc/tsip_transac_ict_sm.h" #include "tinysip/transactions/tsip_transac.h" +#include "tsk_fsm.h" + TSIP_BEGIN_DECLS typedef struct tsip_transac_ict { TSIP_DECLARE_TRANSAC; - struct tsip_transac_ictContext _fsm; /**< The state machine context. */ + tsk_fsm_t *fsm; } tsip_transac_ict_t; -void tsip_transac_ict_init(tsip_transac_ict_t *self); +int tsip_transac_ict_init(tsip_transac_ict_t *self); TSIP_END_DECLS diff --git a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ist.h b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ist.h index fce2213b..21dc4037 100644 --- a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ist.h +++ b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_ist.h @@ -31,20 +31,21 @@ #define TINYSIP_TRANSAC_IST_H #include "tinysip_config.h" -#include "tinysip/smc/tsip_transac_ist_sm.h" #include "tinysip/transactions/tsip_transac.h" +#include "tsk_fsm.h" + TSIP_BEGIN_DECLS typedef struct tsip_transac_ist { TSIP_DECLARE_TRANSAC; - struct tsip_transac_istContext _fsm; /**< The state machine context. */ + tsk_fsm_t *fsm; } tsip_transac_ist_t; -void tsip_transac_ist_init(tsip_transac_ist_t *self); +int tsip_transac_ist_init(tsip_transac_ist_t *self); TSIP_END_DECLS diff --git a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nict.h b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nict.h index 7e5ef194..835edcee 100644 --- a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nict.h +++ b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nict.h @@ -35,7 +35,7 @@ #include "tinysip/transactions/tsip_transac.h" #include "tinysip/tsip_message.h" -#include "tinysip/smc/tsip_transac_nict_sm.h" +#include "tsk_fsm.h" TSIP_BEGIN_DECLS @@ -47,7 +47,7 @@ typedef struct tsip_transac_nict { TSIP_DECLARE_TRANSAC; - struct tsip_transac_nictContext _fsm; /**< The state machine context. */ + tsk_fsm_t *fsm; tsip_request_t* request; tsip_timer_t timerE; @@ -56,25 +56,7 @@ typedef struct tsip_transac_nict } tsip_transac_nict_t; -void tsip_transac_nict_init(tsip_transac_nict_t *self); int tsip_transac_nict_start(tsip_transac_nict_t *self, const tsip_request_t* request); -void tsip_transac_nict_OnTerminated(tsip_transac_nict_t *self); - -void tsip_transac_nict_Started_2_Trying_X_send(tsip_transac_nict_t *self); -void tsip_transac_nict_Trying_2_Trying_X_timerE(tsip_transac_nict_t *self); -void tsip_transac_nict_Trying_2_Terminated_X_timerF(tsip_transac_nict_t *self); -void tsip_transac_nict_Trying_2_Terminated_X_transportError(tsip_transac_nict_t *self); -void tsip_transac_nict_Trying_2_Proceedding_X_1xx(tsip_transac_nict_t *self, const tsip_message_t* msg); -void tsip_transac_nict_Trying_2_Completed_X_200_to_699(tsip_transac_nict_t *self, const tsip_message_t* msg); -void tsip_transac_nict_Trying_2_Trying_X_unknown(tsip_transac_nict_t *self); -void tsip_transac_nict_Proceeding_2_Proceeding_X_timerE(tsip_transac_nict_t *self); -void tsip_transac_nict_Proceeding_2_Terminated_X_timerF(tsip_transac_nict_t *self); -void tsip_transac_nict_Proceeding_2_Terminated_X_transportError(tsip_transac_nict_t *self); -void tsip_transac_nict_Proceeding_2_Proceeding_X_1xx(tsip_transac_nict_t *self, const tsip_message_t* msg); -void tsip_transac_nict_Proceeding_2_Completed_X_200_to_699(tsip_transac_nict_t *self, const tsip_message_t* msg); -void tsip_transac_nict_Completed_2_Terminated_X_timerK(tsip_transac_nict_t *self); -void tsip_transac_nict_Any_2_Terminated_X_transportError(tsip_transac_nict_t *self); - TINYSIP_GEXTERN const void *tsip_transac_nict_def_t; diff --git a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nist.h b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nist.h index 0f02c86a..76e7b264 100644 --- a/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nist.h +++ b/trunk/tinySIP/include/tinysip/transactions/tsip_transac_nist.h @@ -35,7 +35,7 @@ #include "tinysip/transactions/tsip_transac.h" #include "tinysip/tsip_message.h" -#include "tinysip/smc/tsip_transac_nist_sm.h" +#include "tsk_fsm.h" TSIP_BEGIN_DECLS @@ -47,28 +47,15 @@ typedef struct tsip_transac_nist { TSIP_DECLARE_TRANSAC; - struct tsip_transac_nistContext _fsm; /**< The state machine context. */ + tsk_fsm_t *fsm; tsip_response_t* lastResponse; tsip_timer_t timerJ; } tsip_transac_nist_t; -void tsip_transac_nist_init(tsip_transac_nist_t *self); int tsip_transac_nist_start(tsip_transac_nist_t *self, const tsip_request_t* request); -void tsip_transac_nist_Started_2_Trying_X_request(tsip_transac_nist_t *self, const tsip_request_t* request); -void tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(tsip_transac_nist_t *self, const tsip_response_t* response); -void tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(tsip_transac_nist_t *self, const tsip_response_t* response); -void tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(tsip_transac_nist_t *self, const tsip_response_t* response); -void tsip_transac_nist_Proceeding_2_Proceeding_X_request(tsip_transac_nist_t *self, const tsip_request_t* request); -void tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(tsip_transac_nist_t *self, const tsip_response_t* response); -void tsip_transac_nist_Completed_2_Completed_X_request(tsip_transac_nist_t *self, const tsip_request_t* request); -void tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(tsip_transac_nist_t *self); -void tsip_transac_nist_Any_2_Terminated_X_transportError(tsip_transac_nist_t *self); - -void tsip_transac_nist_OnTerminated(tsip_transac_nist_t *self); - TINYSIP_GEXTERN const void *tsip_transac_nist_def_t; TSIP_END_DECLS diff --git a/trunk/tinySIP/smc.bat b/trunk/tinySIP/smc.bat deleted file mode 100644 index 2ecbdd69..00000000 --- a/trunk/tinySIP/smc.bat +++ /dev/null @@ -1,25 +0,0 @@ -@echo off - -REM SMC (The State Machine Compiler) -REM For more information about SMC: http://smc.sourceforge.net/ - -set TSIP_SMC_SRC=%DOUBANGO_HOME%\tinySIP\source\smc -set TSIP_SMC_SRC_TMP=%TSIP_SMC_SRC%\tmp -set TSIP_SMC_INC=%DOUBANGO_HOME%\tinySIP\include\tinysip\smc -set TSIP_SMC_SM=%DOUBANGO_HOME%\tinySIP\smc -set TSIP_SMC_GRAPH=%DOUBANGO_HOME%\tinySIP\graph - -set DOT_DIR="C:\Program Files\Graphviz2.24\bin" - -set TOOLS=%DOUBANGO_HOME%\thirdparties\win32\tools - -MKDIR %TSIP_SMC_SRC_TMP% - -FOR /f %%i IN ('dir /b %TSIP_SMC_SM%\*.sm') DO ( -java -jar %DOUBANGO_HOME%\SMC_6_0_0\Smc.jar -c -d %TSIP_SMC_SRC_TMP% -headerd %TSIP_SMC_INC% %TSIP_SMC_SM%\%%i -%TOOLS%\BatchSubstitute.bat "C:\Projects\Doubango\tinySIP\include\tinysip\smc\" "tinysip/smc/" %TSIP_SMC_SRC_TMP%\%%~ni_sm.c > %TSIP_SMC_SRC%\%%~ni_sm.c - -:: java -jar %DOUBANGO_HOME%\SMC_6_0_0\Smc.jar -graph -glevel 2 -d %TSIP_SMC_GRAPH% %TSIP_SMC_SM%\%%i -:: %DOT_DIR%\dot -Tpng -o %TSIP_SMC_GRAPH%\%%~ni_sm.png %TSIP_SMC_GRAPH%\%%~ni_sm.dot -) -RMDIR /S /Q %TSIP_SMC_SRC_TMP% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_dialog_message.sm b/trunk/tinySIP/smc/tsip_dialog_message.sm deleted file mode 100644 index 0e929a90..00000000 --- a/trunk/tinySIP/smc/tsip_dialog_message.sm +++ /dev/null @@ -1,145 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_dialog_message.sm. - * @brief SIP dialog MESSAGE. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -%} - - -%class tsip_dialog_message -%header "tinysip/dialogs/tsip_dialog_message.h" -%header "tinysip/tsip_message.h" -%start tsip_dialog_message::Started -%include "tsk_debug.h" - -%map tsip_dialog_message -%% - -//------------------------ -//------------------------ -Started -{ - sm_sendMESSAGE(msg: const tsip_message_t*) - Sending - { - Started_2_Sending_X_sendMESSAGE(msg); - } - sm_receiveMESSAGE(msg: const tsip_message_t*) - Receiving - { - Started_2_Receiving_X_recvMESSAGE(msg); - } -} - -//------------------------ -//------------------------ -Sending -{ - sm_1xx(msg: const tsip_message_t*) - nil - { - Sending_2_Sending_X_1xx(msg); - } - - sm_2xx(msg: const tsip_message_t*) - Terminated - { - Sending_2_Terminated_X_2xx(msg); - } - - sm_401_407_421_494(msg: const tsip_message_t*) - nil - { - Sending_2_Sending_X_401_407_421_494(msg); - } - - sm_300_to_699(msg: const tsip_message_t*) - Terminated - { - Sending_2_Terminated_X_300_to_699(msg); - } - - sm_cancel() - Terminated - { - Sending_2_Terminated_X_cancel(); - } -} - -//------------------------ -//------------------------ -Receiving -{ - sm_accept(msg: const tsip_message_t*) - Terminated - { - Receiving_2_Terminated_X_accept(msg); - } - - sm_reject(msg: const tsip_message_t*) - Terminated - { - Receiving_2_Terminated_X_reject(msg); - } -} - -//------------------------ -//------------------------ -Terminated - Entry - { - OnTerminated(); - } -{ - Default - nil - { - } -} - -//------------------------ -//------------------------ -Default -{ - sm_transportError() - Terminated - { - Any_2_Terminated_X_transportError(); - } - - sm_error() - Terminated - { - } - - Default - nil - { - } -} -%% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_dialog_register.sm b/trunk/tinySIP/smc/tsip_dialog_register.sm deleted file mode 100644 index 045fab41..00000000 --- a/trunk/tinySIP/smc/tsip_dialog_register.sm +++ /dev/null @@ -1,204 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_dialog_register.sm. - * @brief SIP dialog REGISTER. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - -//#define tsip_dialog_register_TSIP_DIALOG_BEGIN_TRANSIT(self) TSIP_DIALOG_BEGIN_TRANSIT(self) -//#define tsip_dialog_register_TSIP_DIALOG_END_TRANSIT(self) TSIP_DIALOG_END_TRANSIT(self) -%} - - -%class tsip_dialog_register -%header "tinysip/dialogs/tsip_dialog_register.h" -%header "tinysip/tsip_message.h" -%start tsip_dialog_register::Started -%include "tsk_debug.h" - -%map tsip_dialog_register -%% - -//------------------------ -//------------------------ -Started - Entry - { - } - Exit - { - } -{ - sm_send() - Trying - { - Started_2_Trying_X_send(); - } - - Default - nil - { - } -} - -//------------------------ -//------------------------ -Trying - Entry - { - } - Exit - { - } -{ - sm_1xx(msg: const tsip_message_t*) - nil - { - Trying_2_Trying_X_1xx(msg); - } - - sm_2xx(unregistering: int, msg: const tsip_message_t*) [unregistering] - Terminated - { - Trying_2_Terminated_X_2xx(msg); - } - - sm_2xx(unregistering: int, msg: const tsip_message_t*) [!unregistering] - Connected - { - Trying_2_Connected_X_2xx(msg); - } - - sm_401_407_421_494(msg: const tsip_message_t*) - nil - { - Trying_2_Trying_X_401_407_421_494(msg); - } - - sm_423(msg: const tsip_message_t*) - nil - { - Trying_2_Trying_X_423(msg); - } - - sm_300_to_699(msg: const tsip_message_t*) - Terminated - { - Trying_2_Terminated_X_300_to_699(msg); - } - - sm_cancel() - Terminated - { - Trying_2_Terminated_X_cancel(); - } - - Default - nil - { - } -} - -//------------------------ -//------------------------ -Connected - Entry - { - } - Exit - { - } -{ - sm_unregister() - Trying - { - Connected_2_Trying_X_unregister(); - } - - sm_refresh() - Trying - { - Connected_2_Trying_X_refresh(); - } - - Default - nil - { - } -} - -//------------------------ -//------------------------ -Terminated - Entry - { - OnTerminated(); - } - - Exit - { - } -{ - Default - nil - { - } -} - -//------------------------ -//------------------------ -Default - Entry - { - } - Exit - { - } -{ - sm_hangup() - Trying - { - Any_2_Trying_X_hangup(); - } - - sm_transportError() - Terminated - { - Any_2_Terminated_X_transportError(); - } - - sm_error() - Terminated - { - } - - Default - nil - { - } -} -%% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_dialog_subscribe.sm b/trunk/tinySIP/smc/tsip_dialog_subscribe.sm deleted file mode 100644 index d355fca6..00000000 --- a/trunk/tinySIP/smc/tsip_dialog_subscribe.sm +++ /dev/null @@ -1,219 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_dialog_subscribe.sm. - * @brief SIP dialog SUBSCRIBE (RFC 2543). - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - -%} - - -%class tsip_dialog_subscribe -%header "tinysip/dialogs/tsip_dialog_subscribe.h" -%header "tinysip/tsip_message.h" -%start tsip_dialog_subscribe::Started -%include "tsk_debug.h" - -%map tsip_dialog_subscribe -%% - -//------------------------ -//------------------------ -Started - Entry - { - } - Exit - { - } -{ - sm_send() - Trying - { - Started_2_Trying_X_send(); - } - - Default - nil - { - } -} - -//------------------------ -//------------------------ -Trying - Entry - { - } - Exit - { - } -{ - sm_1xx(msg: const tsip_message_t*) - nil - { - Trying_2_Trying_X_1xx(msg); - } - - sm_2xx(unsubscribeing: int, response: const tsip_response_t*) [unsubscribeing] - Terminated - { - Trying_2_Terminated_X_2xx(response); - } - - sm_2xx(unsubscribeing: int, response: const tsip_response_t*) [!unsubscribeing] - Connected - { - Trying_2_Connected_X_2xx(response); - } - - sm_401_407_421_494(response: const tsip_response_t*) - nil - { - Trying_2_Trying_X_401_407_421_494(response); - } - - sm_423(response: const tsip_response_t*) - nil - { - Trying_2_Trying_X_423(response); - } - - sm_300_to_699(response: const tsip_response_t*) - Terminated - { - Trying_2_Terminated_X_300_to_699(response); - } - - sm_cancel() - Terminated - { - Trying_2_Terminated_X_cancel(); - } - sm_NOTIFY(sterminated: int, request: const tsip_request_t*) - nil - { - Trying_2_Trying_X_NOTIFY(request); - } - - Default - nil - { - } -} - -//------------------------ -//------------------------ -Connected - Entry - { - } - Exit - { - } -{ - sm_unsubscribe() - Trying - { - Connected_2_Trying_X_unsubscribe(); - } - - sm_refresh() - Trying - { - Connected_2_Trying_X_refresh(); - } - - sm_NOTIFY(sterminated: int, request: const tsip_request_t*)[!sterminated] - nil - { - Connected_2_Connected_X_NOTIFY(request); - } - - sm_NOTIFY(sterminated: int, request: const tsip_request_t*)[sterminated] - Terminated - { - Connected_2_Terminated_X_NOTIFY(request); - } - - Default - nil - { - } -} - -//------------------------ -//------------------------ -Terminated - Entry - { - OnTerminated(); - } - - Exit - { - } -{ - Default - nil - { - } -} - -//------------------------ -//------------------------ -Default - Entry - { - } - Exit - { - } -{ - sm_hangup() - Trying - { - Any_2_Trying_X_hangup(); - } - - sm_transportError() - Terminated - { - Any_2_Terminated_X_transportError(); - } - - sm_error() - Terminated - { - } - - Default - nil - { - } -} -%% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_transac_ict.sm b/trunk/tinySIP/smc/tsip_transac_ict.sm deleted file mode 100644 index 9e3fbc42..00000000 --- a/trunk/tinySIP/smc/tsip_transac_ict.sm +++ /dev/null @@ -1,48 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_ict.c - * @brief SIP INVITE Client Transaction as per RFC 3261 subclause 17.1.1. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -%} - -%class tsip_transac_ict -%header "tinysip/transactions/tsip_transac_ict.h" -%start tsip_transac_ict::Started - -%map tsip_transac_ict -%% - -//------------------------ -// -Started -{ - -} - - -%% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_transac_ist.sm b/trunk/tinySIP/smc/tsip_transac_ist.sm deleted file mode 100644 index dbf1ffad..00000000 --- a/trunk/tinySIP/smc/tsip_transac_ist.sm +++ /dev/null @@ -1,48 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_ist.sm - * @brief SIP INVITE Server Transaction as per RFC 3261 subclause 17.2.1. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -%} - -%class tsip_transac_ist -%header "tinysip/transactions/tsip_transac_ist.h" -%start tsip_transac_ist::Started - -%map tsip_transac_ist -%% - -//------------------------ -// -Started -{ - -} - - -%% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_transac_nict.sm b/trunk/tinySIP/smc/tsip_transac_nict.sm deleted file mode 100644 index 1836cec8..00000000 --- a/trunk/tinySIP/smc/tsip_transac_nict.sm +++ /dev/null @@ -1,173 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_nict.sm - * @brief SIP Non-INVITE Client Transaction as per RFC 3261 subcaluse 17.1.2. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -%} - - -%class tsip_transac_nict -%header "tinysip/transactions/tsip_transac_nict.h" -%header "tinysip/tsip_message.h" -%start tsip_transac_nict::Started - -%map tsip_transac_nict -%% - -//------------------------ -//------------------------ -Started - Entry - { - - } -{ - sm_send() - Trying - { - Started_2_Trying_X_send(); - } -} - -//------------------------ -//------------------------ -Trying - Entry - { - } -{ - sm_timerE() - nil - { - Trying_2_Trying_X_timerE(); - } - - sm_timerF() - Terminated - { - Trying_2_Terminated_X_timerF(); - } - - sm_transportError() - Terminated - { - Trying_2_Terminated_X_transportError(); - } - - sm_1xx(msg: const tsip_message_t*) - Proceeding - { - Trying_2_Proceedding_X_1xx(msg); - } - - sm_200_to_699(msg: const tsip_message_t*) - Completed - { - Trying_2_Completed_X_200_to_699(msg); - } -} - -//------------------------ -//------------------------ -Proceeding - Entry - { - } -{ - sm_timerE() - nil - { - Proceeding_2_Proceeding_X_timerE(); - } - - sm_timerF() - Terminated - { - Proceeding_2_Terminated_X_timerF(); - } - - sm_transportError() - Terminated - { - Proceeding_2_Terminated_X_transportError(); - } - - sm_1xx(msg: const tsip_message_t*) - nil - { - Proceeding_2_Proceeding_X_1xx(msg); - } - - sm_200_to_699(msg: const tsip_message_t*) - Completed - { - Proceeding_2_Completed_X_200_to_699(msg); - } -} - -//------------------------ -//------------------------ -Completed - Entry - { - } -{ - sm_timerK() - Terminated - { - Completed_2_Terminated_X_timerK(); - } -} - -//------------------------ -//------------------------ -Terminated - Entry - { - OnTerminated(); - } -{ -} - -//------------------------ -//------------------------ -Default -{ - sm_transportError() - Terminated - { - Any_2_Terminated_X_transportError(); - } - - Default - nil - { - } -} - -%% \ No newline at end of file diff --git a/trunk/tinySIP/smc/tsip_transac_nist.sm b/trunk/tinySIP/smc/tsip_transac_nist.sm deleted file mode 100644 index c63be333..00000000 --- a/trunk/tinySIP/smc/tsip_transac_nist.sm +++ /dev/null @@ -1,154 +0,0 @@ -%{ -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_nist.sm - * @brief SIP Non-INVITE Server Transaction as per RFC 3261 subclause 17.2.2. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -%} - -%class tsip_transac_nist -%header "tinysip/transactions/tsip_transac_nist.h" -%header "tinysip/tsip_message.h" -%start tsip_transac_nist::Started - -%map tsip_transac_nist -%% - - -//------------------------ -//------------------------ -Started - Entry - { - - } -{ - sm_request(request: const tsip_request_t*) - Trying - { - Started_2_Trying_X_request(request); - } -} - -//------------------------ -//------------------------ -Trying - Entry - { - - } -{ - sm_send_1xx(response: const tsip_response_t*) - Proceeding - { - Trying_2_Proceeding_X_send_1xx(response); - } - - sm_send_200_to_699(response: const tsip_response_t*) - Completed - { - Trying_2_Completed_X_send_200_to_699(response); - } - -} - -//------------------------ -//------------------------ -Proceeding - Entry - { - } -{ - sm_send_1xx(response: const tsip_response_t*) - nil - { - Proceeding_2_Proceeding_X_send_1xx(response); - } - - sm_send_200_to_699(response: const tsip_response_t*) - Completed - { - Proceeding_2_Completed_X_send_200_to_699(response); - } - - sm_request(request: const tsip_request_t*) - nil - { - Proceeding_2_Proceeding_X_request(request); - } -} - - -//------------------------ -//------------------------ -Completed - Entry - { - } -{ - sm_request(request: const tsip_request_t*) - nil - { - Completed_2_Completed_X_request(request); - } - - sm_timerJ() - Terminated - { - Completed_2_Terminated_X_tirmerJ(); - } -} - - - -//------------------------ -//------------------------ -Terminated - Entry - { - OnTerminated(); - } -{ -} - -//------------------------ -//------------------------ -Default -{ - sm_transportError() - Terminated - { - Any_2_Terminated_X_transportError(); - } - - Default - nil - { - } -} - -%% \ No newline at end of file diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog.c b/trunk/tinySIP/src/dialogs/tsip_dialog.c index 069afcef..b08420a0 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog.c @@ -688,8 +688,6 @@ int tsip_dialog_init(tsip_dialog_t *self, tsip_dialog_type_t type, tsip_stack_ha return -2; } - tsk_safeobj_init(self); - self->state = tsip_initial; self->type = type; self->stack = tsk_object_ref(stack); @@ -793,7 +791,6 @@ int tsip_dialog_deinit(tsip_dialog_t *self) TSK_OBJECT_SAFE_FREE(self->challenges); self->initialized = 0; - tsk_safeobj_deinit(self); return 0; } diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_message.c b/trunk/tinySIP/src/dialogs/tsip_dialog_message.c index 01d72522..ddd2b6b2 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_message.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_message.c @@ -42,14 +42,57 @@ tsip_dialog_messageContext_sm_error(&TSIP_DIALOG_MESSAGE(self)->_fsm); \ TSIP_DIALOG_SYNC_END(self); +/* ======================== internal functions ======================== */ int send_message(tsip_dialog_message_t *self); int send_response(tsip_dialog_message_t *self, short status, const char* phrase, const tsip_request_t *request); +int tsip_dialog_message_OnTerminated(tsip_dialog_message_t *self); +/* ======================== transitions ======================== */ +int tsip_dialog_message_Started_2_Sending_X_sendMESSAGE(va_list *app); +int tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE(va_list *app); +int tsip_dialog_message_Sending_2_Sending_X_1xx(va_list *app); +int tsip_dialog_message_Sending_2_Terminated_X_2xx(va_list *app); +int tsip_dialog_message_Sending_2_Sending_X_401_407_421_494(va_list *app); +int tsip_dialog_message_Sending_2_Terminated_X_300_to_699(va_list *app); +int tsip_dialog_message_Sending_2_Terminated_X_cancel(va_list *app); +int tsip_dialog_message_Receiving_2_Terminated_X_accept(va_list *app); +int tsip_dialog_message_Receiving_2_Terminated_X_reject(va_list *app); +int tsip_dialog_message_Any_2_Terminated_X_transportError(va_list *app); +int tsip_dialog_message_Any_2_Terminated_X_Error(va_list *app); + +/* ======================== conds ======================== */ + +/* ======================== actions ======================== */ +typedef enum _fsm_action_e +{ + _fsm_action_sendMESSAGE, + _fsm_action_receiveMESSAGE, + _fsm_action_1xx, + _fsm_action_2xx, + _fsm_action_401_407_421_494, + _fsm_action_300_to_699, + _fsm_action_cancel, + _fsm_action_accept, + _fsm_action_reject, + _fsm_action_transporterror, + _fsm_action_error, +} +_fsm_action_t; + +/* ======================== states ======================== */ +typedef enum _fsm_state_e +{ + _fsm_state_Started, + _fsm_state_Sending, + _fsm_state_Receiving, + _fsm_state_Terminated +} +_fsm_state_t; int tsip_dialog_message_event_callback(const tsip_dialog_message_t *self, tsip_dialog_event_type_t type, const tsip_message_t *msg) { - TSIP_DIALOG_SYNC_BEGIN(self); + int ret = -1; switch(type) { @@ -62,26 +105,26 @@ int tsip_dialog_message_event_callback(const tsip_dialog_message_t *self, tsip_d short status_code = TSIP_RESPONSE_CODE(msg); if(status_code <=199) { - tsip_dialog_messageContext_sm_1xx(&TSIP_DIALOG_MESSAGE(self)->_fsm, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_1xx, self, msg, self, msg); } else if(status_code<=299) { - tsip_dialog_messageContext_sm_2xx(&TSIP_DIALOG_MESSAGE(self)->_fsm, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_2xx, self, msg, self, msg); } else if(status_code == 401 || status_code == 407 || status_code == 421 || status_code == 494) { - tsip_dialog_messageContext_sm_401_407_421_494(&TSIP_DIALOG_MESSAGE(self)->_fsm, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_401_407_421_494, self, msg, self, msg); } else { // Alert User - TSIP_DIALOG_MESSAGE_SIGNAL_ERROR(self); + ret = tsk_fsm_act(self->fsm, _fsm_action_error, self, msg, self, msg); TSK_DEBUG_WARN("Not supported status code: %d", status_code); } } else { - tsip_dialog_messageContext_sm_receiveMESSAGE(&TSIP_DIALOG_MESSAGE(self)->_fsm, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_receiveMESSAGE, self, msg, self, msg); } } break; @@ -89,7 +132,7 @@ int tsip_dialog_message_event_callback(const tsip_dialog_message_t *self, tsip_d case tsip_dialog_canceled: { - tsip_dialog_messageContext_sm_cancel(&TSIP_DIALOG_MESSAGE(self)->_fsm); + ret = tsk_fsm_act(self->fsm, _fsm_action_cancel, self, msg, self, msg); break; } @@ -98,27 +141,69 @@ int tsip_dialog_message_event_callback(const tsip_dialog_message_t *self, tsip_d case tsip_dialog_error: case tsip_dialog_transport_error: { - tsip_dialog_messageContext_sm_transportError(&TSIP_DIALOG_MESSAGE(self)->_fsm); + ret = tsk_fsm_act(self->fsm, _fsm_action_transporterror, self, msg, self, msg); break; } } - TSIP_DIALOG_SYNC_END(self); - - return 0; + return ret; } -void tsip_dialog_message_init(tsip_dialog_message_t *self) +int tsip_dialog_message_init(tsip_dialog_message_t *self) { - /* Initialize the state machine. - */ - tsip_dialog_messageContext_Init(&self->_fsm, self); + /* Initialize the state machine. */ + tsk_fsm_set(self->fsm, + + /*======================= + * === Started === + */ + // Started -> (send) -> Sending + TSK_FSM_ADD_ALWAYS(_fsm_state_Started, _fsm_action_sendMESSAGE, _fsm_state_Sending, tsip_dialog_message_Started_2_Sending_X_sendMESSAGE, "tsip_dialog_message_Started_2_Sending_X_sendMESSAGE"), + // Started -> (receive) -> Receiving + TSK_FSM_ADD_ALWAYS(_fsm_state_Started, _fsm_action_receiveMESSAGE, _fsm_state_Receiving, tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE, "tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE"), + // Started -> (Any) -> Started + TSK_FSM_ADD_ALWAYS_NOTHING(_fsm_state_Started, "tsip_dialog_message_Started_2_Started_X_any"), + + + /*======================= + * === Sending === + */ + // Sending -> (1xx) -> Sending + TSK_FSM_ADD_ALWAYS(_fsm_state_Sending, _fsm_action_1xx, _fsm_state_Sending, tsip_dialog_message_Sending_2_Sending_X_1xx, "tsip_dialog_message_Sending_2_Sending_X_1xx"), + // Sending -> (2xx) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Sending, _fsm_action_2xx, _fsm_state_Terminated, tsip_dialog_message_Sending_2_Terminated_X_2xx, "tsip_dialog_message_Sending_2_Terminated_X_2xx"), + // Sending -> (401/407/421/494) -> Sending + TSK_FSM_ADD_ALWAYS(_fsm_state_Sending, _fsm_action_401_407_421_494, _fsm_state_Sending, tsip_dialog_message_Sending_2_Sending_X_401_407_421_494, "tsip_dialog_message_Sending_2_Sending_X_401_407_421_494"), + // Sending -> (300_to_699) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Sending, _fsm_action_300_to_699, _fsm_state_Terminated, tsip_dialog_message_Sending_2_Terminated_X_300_to_699, "tsip_dialog_message_Sending_2_Terminated_X_300_to_699"), + // Sending -> (cancel) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Sending, _fsm_action_cancel, _fsm_state_Terminated, tsip_dialog_message_Sending_2_Terminated_X_cancel, "tsip_dialog_message_Sending_2_Terminated_X_cancel"), + // Sending -> (Any) -> Sending + TSK_FSM_ADD_ALWAYS_NOTHING(_fsm_state_Sending, "tsip_dialog_message_Sending_2_Sending_X_any"), + + /*======================= + * === Receiving === + */ + // Receiving -> (accept) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Receiving, _fsm_action_accept, _fsm_state_Terminated, tsip_dialog_message_Receiving_2_Terminated_X_accept, "tsip_dialog_message_Receiving_2_Terminated_X_accept"), + // Receiving -> (rejected) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Receiving, _fsm_action_reject, _fsm_state_Terminated, tsip_dialog_message_Receiving_2_Terminated_X_reject, "tsip_dialog_message_Receiving_2_Terminated_X_reject"), + // Receiving -> (Any) -> Receiving + TSK_FSM_ADD_ALWAYS_NOTHING(_fsm_state_Receiving, "tsip_dialog_message_Receiving_2_Receiving_X_any"), + + /*======================= + * === Any === + */ + // Any -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_dialog_message_Any_2_Terminated_X_transportError, "tsip_dialog_message_Any_2_Terminated_X_transportError"), + // Any -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_error, _fsm_state_Terminated, tsip_dialog_message_Any_2_Terminated_X_Error, "tsip_dialog_message_Any_2_Terminated_X_Error"), + + TSK_FSM_ADD_NULL()); TSIP_DIALOG(self)->callback = TSIP_DIALOG_EVENT_CALLBACK(tsip_dialog_message_event_callback); -#if defined(_DEBUG) || defined(DEBUG) - setDebugFlag(&(self->_fsm), DEBUG_STATE_MACHINE); -#endif + return 0; } @@ -143,6 +228,129 @@ int tsip_dialog_message_recv(tsip_dialog_message_t *self, const tsip_message_t * return ret; }*/ + + + + +//-------------------------------------------------------- +// == STATE MACHINE BEGIN == +//-------------------------------------------------------- + + +/* Started -> (sendMESSAGE) -> Sending +*/ +int tsip_dialog_message_Started_2_Sending_X_sendMESSAGE(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_request_t *request = va_arg(*app, const tsip_request_t *); + + return 0; +} + +/* Started -> (recvMESSAGE) -> Receiving +*/ +int tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_request_t *request = va_arg(*app, const tsip_request_t *); + + return send_response(self, 200, "OK", request); +} + +/* Sending -> (1xx) -> Sending +*/ +int tsip_dialog_message_Sending_2_Sending_X_1xx(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + + return 0; +} + +/* Sending -> (2xx) -> Sending +*/ +int tsip_dialog_message_Sending_2_Terminated_X_2xx(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + + return 0; +} + +/* Sending -> (401/407/421/494) -> Sending +*/ +int tsip_dialog_message_Sending_2_Sending_X_401_407_421_494(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + + return 0; +} + +/* Sending -> (300 to 699) -> Terminated +*/ +int tsip_dialog_message_Sending_2_Terminated_X_300_to_699(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + + return 0; +} + +/* Sending -> (cancel) -> Terminated +*/ +int tsip_dialog_message_Sending_2_Terminated_X_cancel(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + + return 0; +} + +/* Receiving -> (accept) -> Terminated +*/ +int tsip_dialog_message_Receiving_2_Terminated_X_accept(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + + return 0; +} + +/* Receiving -> (reject) -> Terminated +*/ +int tsip_dialog_message_Receiving_2_Terminated_X_reject(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + + return 0; +} + +/* Any -> (transport error) -> Terminated +*/ +int tsip_dialog_message_Any_2_Terminated_X_transportError(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + + return 0; +} + +/* Any -> (error) -> Terminated +*/ +int tsip_dialog_message_Any_2_Terminated_X_Error(va_list *app) +{ + tsip_dialog_message_t *self = va_arg(*app, tsip_dialog_message_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + + return 0; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// == STATE MACHINE END == +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + int send_response(tsip_dialog_message_t *self, short status, const char* phrase, const tsip_request_t *request) { tsip_response_t *response; @@ -165,62 +373,12 @@ int send_response(tsip_dialog_message_t *self, short status, const char* phrase, } - -//-------------------------------------------------------- -// == STATE MACHINE BEGIN == -//-------------------------------------------------------- - - -void tsip_dialog_message_Started_2_Sending_X_sendMESSAGE(tsip_dialog_message_t *self, const tsip_message_t *message) +int tsip_dialog_message_OnTerminated(tsip_dialog_message_t *self) { -} + TSK_DEBUG_INFO("=== MESSAGE Dialog terminated ==="); -void tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE(tsip_dialog_message_t *self, const tsip_message_t *message) -{ - send_response(self, 200, "OK", message); -} - -void tsip_dialog_message_Sending_2_Sending_X_1xx(tsip_dialog_message_t *self, const tsip_message_t *message) -{ -} - -void tsip_dialog_message_Sending_2_Terminated_X_2xx(tsip_dialog_message_t *self, const tsip_message_t *message) -{ -} - -void tsip_dialog_message_Sending_2_Sending_X_401_407_421_494(tsip_dialog_message_t *self, const tsip_message_t *message) -{ -} - -void tsip_dialog_message_Sending_2_Terminated_X_300_to_699(tsip_dialog_message_t *self, const tsip_message_t *message) -{ -} - -void tsip_dialog_message_Sending_2_Terminated_X_cancel(tsip_dialog_message_t *self) -{ -} - -void tsip_dialog_message_Receiving_2_Terminated_X_accept(tsip_dialog_message_t *self, const tsip_message_t *message) -{ -} - -void tsip_dialog_message_Receiving_2_Terminated_X_reject(tsip_dialog_message_t *self, const tsip_message_t *message) -{ -} - -void tsip_dialog_message_Any_2_Terminated_X_transportError(tsip_dialog_message_t *self) -{ -} - - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// == STATE MACHINE END == -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - - -void tsip_dialog_message_OnTerminated(tsip_dialog_message_t *self) -{ + /* Remove from the dialog layer. */ + return tsip_dialog_remove(TSIP_DIALOG(self)); } @@ -255,6 +413,11 @@ static void* tsip_dialog_message_create(void * self, va_list * app) tsip_stack_handle_t *stack = va_arg(*app, tsip_stack_handle_t *); tsip_operation_handle_t *operation = va_arg(*app, tsip_operation_handle_t *); + /* create FSM */ + dialog->fsm = TSK_FSM_CREATE(_fsm_state_Started, _fsm_state_Terminated); + dialog->fsm->debug = DEBUG_STATE_MACHINE; + tsk_fsm_set_callback_terminated(dialog->fsm, TSK_FSM_ONTERMINATED(tsip_dialog_message_OnTerminated), (const void*)dialog); + /* Initialize base class */ tsip_dialog_init(TSIP_DIALOG(self), tsip_dialog_message, stack, 0, operation); @@ -269,6 +432,9 @@ static void* tsip_dialog_message_destroy(void * self) tsip_dialog_message_t *dialog = self; if(dialog) { + /* FSM */ + TSK_OBJECT_SAFE_FREE(dialog->fsm); + /* DeInitialize base class */ tsip_dialog_deinit(TSIP_DIALOG(self)); } diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c b/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c index 621d2dad..87723352 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_register.client.c @@ -663,9 +663,7 @@ int tsip_dialog_register_OnTerminated(tsip_dialog_register_t *self) TSIP_DIALOG_REGISTER_SIGNAL_INCOMING(self, tsip_register_terminated, 700, "Dialog terminated."); /* Remove from the dialog layer. */ - tsip_dialog_remove(TSIP_DIALOG(self)); - - return 0; + return tsip_dialog_remove(TSIP_DIALOG(self)); } diff --git a/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c b/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c index 72f5e58e..aabd2789 100644 --- a/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c +++ b/trunk/tinySIP/src/dialogs/tsip_dialog_subscribe.client.c @@ -172,7 +172,7 @@ int tsip_dialog_subscribe_event_callback(const tsip_dialog_subscribe_t *self, ts else { // Alert User - ret = tsk_fsm_act((self)->fsm, _fsm_action_error, self, msg, self, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_error, self, msg, self, msg); TSK_DEBUG_WARN("Not supported status code: %d", TSIP_RESPONSE_CODE(msg)); } } @@ -661,9 +661,7 @@ int tsip_dialog_subscribe_OnTerminated(tsip_dialog_subscribe_t *self) TSIP_DIALOG_SUBSCRIBE_SIGNAL_INCOMING(self, tsip_subscribe_terminated, 700, "Dialog terminated."); /* Remove from the dialog layer. */ - tsip_dialog_remove(TSIP_DIALOG(self)); - - return 0; + return tsip_dialog_remove(TSIP_DIALOG(self)); } diff --git a/trunk/tinySIP/src/smc/tsip_dialog_message_sm.c b/trunk/tinySIP/src/smc/tsip_dialog_message_sm.c deleted file mode 100644 index 9bc35006..00000000 --- a/trunk/tinySIP/src/smc/tsip_dialog_message_sm.c +++ /dev/null @@ -1,502 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_dialog_message.sm - */ - - -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_dialog_message.sm. - * @brief SIP dialog MESSAGE. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - - -#include -#include "tinysip/dialogs/tsip_dialog_message.h" -#include "tsk_debug.h" -#include "tinysip/smc/tsip_dialog_message_sm.h" - -#define getOwner(fsm) \ - (fsm)->_owner - -#define POPULATE_STATE(state) \ - state##_Entry, \ - state##_sm_1xx, \ - state##_sm_2xx, \ - state##_sm_300_to_699, \ - state##_sm_401_407_421_494, \ - state##_sm_accept, \ - state##_sm_cancel, \ - state##_sm_error, \ - state##_sm_receiveMESSAGE, \ - state##_sm_reject, \ - state##_sm_sendMESSAGE, \ - state##_sm_transportError, \ - state##_Default - -#define ENTRY_STATE(state) \ - if ((state)->Entry != NULL) { \ - (state)->Entry(fsm); \ - } - -#define EXIT_STATE(state) - -static void tsip_dialog_messageState_sm_1xx(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_2xx(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_300_to_699(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_401_407_421_494(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_accept(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_cancel(struct tsip_dialog_messageContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_error(struct tsip_dialog_messageContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_receiveMESSAGE(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_reject(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_sendMESSAGE(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_sm_transportError(struct tsip_dialog_messageContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_dialog_messageState_Default(struct tsip_dialog_messageContext *fsm) -{ - State_Default(fsm); -} - -#define tsip_dialog_message_Started_sm_1xx tsip_dialog_messageState_sm_1xx -#define tsip_dialog_message_Started_sm_2xx tsip_dialog_messageState_sm_2xx -#define tsip_dialog_message_Started_sm_300_to_699 tsip_dialog_messageState_sm_300_to_699 -#define tsip_dialog_message_Started_sm_401_407_421_494 tsip_dialog_messageState_sm_401_407_421_494 -#define tsip_dialog_message_Started_sm_accept tsip_dialog_messageState_sm_accept -#define tsip_dialog_message_Started_sm_cancel tsip_dialog_messageState_sm_cancel -#define tsip_dialog_message_Started_sm_error tsip_dialog_messageState_sm_error -#define tsip_dialog_message_Started_sm_receiveMESSAGE tsip_dialog_messageState_sm_receiveMESSAGE -#define tsip_dialog_message_Started_sm_reject tsip_dialog_messageState_sm_reject -#define tsip_dialog_message_Started_sm_sendMESSAGE tsip_dialog_messageState_sm_sendMESSAGE -#define tsip_dialog_message_Started_sm_transportError tsip_dialog_messageState_sm_transportError -#define tsip_dialog_message_Started_Default tsip_dialog_messageState_Default -#define tsip_dialog_message_Started_Entry NULL -#define tsip_dialog_message_Started_Exit NULL -#define tsip_dialog_message_Sending_sm_1xx tsip_dialog_messageState_sm_1xx -#define tsip_dialog_message_Sending_sm_2xx tsip_dialog_messageState_sm_2xx -#define tsip_dialog_message_Sending_sm_300_to_699 tsip_dialog_messageState_sm_300_to_699 -#define tsip_dialog_message_Sending_sm_401_407_421_494 tsip_dialog_messageState_sm_401_407_421_494 -#define tsip_dialog_message_Sending_sm_accept tsip_dialog_messageState_sm_accept -#define tsip_dialog_message_Sending_sm_cancel tsip_dialog_messageState_sm_cancel -#define tsip_dialog_message_Sending_sm_error tsip_dialog_messageState_sm_error -#define tsip_dialog_message_Sending_sm_receiveMESSAGE tsip_dialog_messageState_sm_receiveMESSAGE -#define tsip_dialog_message_Sending_sm_reject tsip_dialog_messageState_sm_reject -#define tsip_dialog_message_Sending_sm_sendMESSAGE tsip_dialog_messageState_sm_sendMESSAGE -#define tsip_dialog_message_Sending_sm_transportError tsip_dialog_messageState_sm_transportError -#define tsip_dialog_message_Sending_Default tsip_dialog_messageState_Default -#define tsip_dialog_message_Sending_Entry NULL -#define tsip_dialog_message_Sending_Exit NULL -#define tsip_dialog_message_Receiving_sm_1xx tsip_dialog_messageState_sm_1xx -#define tsip_dialog_message_Receiving_sm_2xx tsip_dialog_messageState_sm_2xx -#define tsip_dialog_message_Receiving_sm_300_to_699 tsip_dialog_messageState_sm_300_to_699 -#define tsip_dialog_message_Receiving_sm_401_407_421_494 tsip_dialog_messageState_sm_401_407_421_494 -#define tsip_dialog_message_Receiving_sm_accept tsip_dialog_messageState_sm_accept -#define tsip_dialog_message_Receiving_sm_cancel tsip_dialog_messageState_sm_cancel -#define tsip_dialog_message_Receiving_sm_error tsip_dialog_messageState_sm_error -#define tsip_dialog_message_Receiving_sm_receiveMESSAGE tsip_dialog_messageState_sm_receiveMESSAGE -#define tsip_dialog_message_Receiving_sm_reject tsip_dialog_messageState_sm_reject -#define tsip_dialog_message_Receiving_sm_sendMESSAGE tsip_dialog_messageState_sm_sendMESSAGE -#define tsip_dialog_message_Receiving_sm_transportError tsip_dialog_messageState_sm_transportError -#define tsip_dialog_message_Receiving_Default tsip_dialog_messageState_Default -#define tsip_dialog_message_Receiving_Entry NULL -#define tsip_dialog_message_Receiving_Exit NULL -#define tsip_dialog_message_Terminated_sm_1xx tsip_dialog_messageState_sm_1xx -#define tsip_dialog_message_Terminated_sm_2xx tsip_dialog_messageState_sm_2xx -#define tsip_dialog_message_Terminated_sm_300_to_699 tsip_dialog_messageState_sm_300_to_699 -#define tsip_dialog_message_Terminated_sm_401_407_421_494 tsip_dialog_messageState_sm_401_407_421_494 -#define tsip_dialog_message_Terminated_sm_accept tsip_dialog_messageState_sm_accept -#define tsip_dialog_message_Terminated_sm_cancel tsip_dialog_messageState_sm_cancel -#define tsip_dialog_message_Terminated_sm_error tsip_dialog_messageState_sm_error -#define tsip_dialog_message_Terminated_sm_receiveMESSAGE tsip_dialog_messageState_sm_receiveMESSAGE -#define tsip_dialog_message_Terminated_sm_reject tsip_dialog_messageState_sm_reject -#define tsip_dialog_message_Terminated_sm_sendMESSAGE tsip_dialog_messageState_sm_sendMESSAGE -#define tsip_dialog_message_Terminated_sm_transportError tsip_dialog_messageState_sm_transportError -#define tsip_dialog_message_Terminated_Default tsip_dialog_messageState_Default -#define tsip_dialog_message_Terminated_Entry NULL -#define tsip_dialog_message_Terminated_Exit NULL -#define tsip_dialog_message_DefaultState_sm_1xx tsip_dialog_messageState_sm_1xx -#define tsip_dialog_message_DefaultState_sm_2xx tsip_dialog_messageState_sm_2xx -#define tsip_dialog_message_DefaultState_sm_300_to_699 tsip_dialog_messageState_sm_300_to_699 -#define tsip_dialog_message_DefaultState_sm_401_407_421_494 tsip_dialog_messageState_sm_401_407_421_494 -#define tsip_dialog_message_DefaultState_sm_accept tsip_dialog_messageState_sm_accept -#define tsip_dialog_message_DefaultState_sm_cancel tsip_dialog_messageState_sm_cancel -#define tsip_dialog_message_DefaultState_sm_error tsip_dialog_messageState_sm_error -#define tsip_dialog_message_DefaultState_sm_receiveMESSAGE tsip_dialog_messageState_sm_receiveMESSAGE -#define tsip_dialog_message_DefaultState_sm_reject tsip_dialog_messageState_sm_reject -#define tsip_dialog_message_DefaultState_sm_sendMESSAGE tsip_dialog_messageState_sm_sendMESSAGE -#define tsip_dialog_message_DefaultState_sm_transportError tsip_dialog_messageState_sm_transportError - -#undef tsip_dialog_message_Started_sm_transportError -#define tsip_dialog_message_Started_sm_transportError tsip_dialog_message_DefaultState_sm_transportError -#undef tsip_dialog_message_Sending_sm_transportError -#define tsip_dialog_message_Sending_sm_transportError tsip_dialog_message_DefaultState_sm_transportError -#undef tsip_dialog_message_Receiving_sm_transportError -#define tsip_dialog_message_Receiving_sm_transportError tsip_dialog_message_DefaultState_sm_transportError -#undef tsip_dialog_message_Terminated_sm_transportError -#define tsip_dialog_message_Terminated_sm_transportError tsip_dialog_message_DefaultState_sm_transportError -#undef tsip_dialog_message_DefaultState_sm_transportError -static void tsip_dialog_message_DefaultState_sm_transportError(struct tsip_dialog_messageContext *fsm) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Any_2_Terminated_X_transportError(ctxt); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_dialog_message_Started_sm_error -#define tsip_dialog_message_Started_sm_error tsip_dialog_message_DefaultState_sm_error -#undef tsip_dialog_message_Sending_sm_error -#define tsip_dialog_message_Sending_sm_error tsip_dialog_message_DefaultState_sm_error -#undef tsip_dialog_message_Receiving_sm_error -#define tsip_dialog_message_Receiving_sm_error tsip_dialog_message_DefaultState_sm_error -#undef tsip_dialog_message_Terminated_sm_error -#define tsip_dialog_message_Terminated_sm_error tsip_dialog_message_DefaultState_sm_error -#undef tsip_dialog_message_DefaultState_sm_error -static void tsip_dialog_message_DefaultState_sm_error(struct tsip_dialog_messageContext *fsm) -{ - - EXIT_STATE(getState(fsm)); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_dialog_message_Started_Default -#define tsip_dialog_message_Started_Default tsip_dialog_message_DefaultState_Default -#undef tsip_dialog_message_Sending_Default -#define tsip_dialog_message_Sending_Default tsip_dialog_message_DefaultState_Default -#undef tsip_dialog_message_Receiving_Default -#define tsip_dialog_message_Receiving_Default tsip_dialog_message_DefaultState_Default -#undef tsip_dialog_message_Terminated_Default -#define tsip_dialog_message_Terminated_Default tsip_dialog_message_DefaultState_Default -#undef tsip_dialog_message_DefaultState_Default -static void tsip_dialog_message_DefaultState_Default(struct tsip_dialog_messageContext *fsm) -{ - -} - -#undef tsip_dialog_message_Started_sm_receiveMESSAGE -static void tsip_dialog_message_Started_sm_receiveMESSAGE(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Started_2_Receiving_X_recvMESSAGE(ctxt, msg); - setState(fsm, &tsip_dialog_message_Receiving); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_dialog_message_Started_sm_sendMESSAGE -static void tsip_dialog_message_Started_sm_sendMESSAGE(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Started_2_Sending_X_sendMESSAGE(ctxt, msg); - setState(fsm, &tsip_dialog_message_Sending); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_dialog_messageState tsip_dialog_message_Started = { POPULATE_STATE(tsip_dialog_message_Started), "tsip_dialog_message_Started", 0 }; - -#undef tsip_dialog_message_Sending_sm_1xx -static void tsip_dialog_message_Sending_sm_1xx(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - const struct tsip_dialog_messageState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_dialog_message_Sending_2_Sending_X_1xx(ctxt, msg); - setState(fsm, EndStateName); -} - -#undef tsip_dialog_message_Sending_sm_2xx -static void tsip_dialog_message_Sending_sm_2xx(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Sending_2_Terminated_X_2xx(ctxt, msg); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_dialog_message_Sending_sm_300_to_699 -static void tsip_dialog_message_Sending_sm_300_to_699(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Sending_2_Terminated_X_300_to_699(ctxt, msg); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_dialog_message_Sending_sm_401_407_421_494 -static void tsip_dialog_message_Sending_sm_401_407_421_494(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - const struct tsip_dialog_messageState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_dialog_message_Sending_2_Sending_X_401_407_421_494(ctxt, msg); - setState(fsm, EndStateName); -} - -#undef tsip_dialog_message_Sending_sm_cancel -static void tsip_dialog_message_Sending_sm_cancel(struct tsip_dialog_messageContext *fsm) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Sending_2_Terminated_X_cancel(ctxt); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_dialog_messageState tsip_dialog_message_Sending = { POPULATE_STATE(tsip_dialog_message_Sending), "tsip_dialog_message_Sending", 1 }; - -#undef tsip_dialog_message_Receiving_sm_accept -static void tsip_dialog_message_Receiving_sm_accept(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Receiving_2_Terminated_X_accept(ctxt, msg); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_dialog_message_Receiving_sm_reject -static void tsip_dialog_message_Receiving_sm_reject(struct tsip_dialog_messageContext *fsm, const tsip_message_t* msg) -{ - struct tsip_dialog_message* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_dialog_message_Receiving_2_Terminated_X_reject(ctxt, msg); - setState(fsm, &tsip_dialog_message_Terminated); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_dialog_messageState tsip_dialog_message_Receiving = { POPULATE_STATE(tsip_dialog_message_Receiving), "tsip_dialog_message_Receiving", 2 }; - -#undef tsip_dialog_message_Terminated_Entry -void tsip_dialog_message_Terminated_Entry(struct tsip_dialog_messageContext *fsm) -{ - struct tsip_dialog_message *ctxt = getOwner(fsm); - - tsip_dialog_message_OnTerminated(ctxt); -} - -#undef tsip_dialog_message_Terminated_Default -static void tsip_dialog_message_Terminated_Default(struct tsip_dialog_messageContext *fsm) -{ - -} - -const struct tsip_dialog_messageState tsip_dialog_message_Terminated = { POPULATE_STATE(tsip_dialog_message_Terminated), "tsip_dialog_message_Terminated", 3 }; - -void tsip_dialog_messageContext_Init(struct tsip_dialog_messageContext* fsm, struct tsip_dialog_message* owner) -{ - FSM_INIT(fsm, &tsip_dialog_message_Started); - fsm->_owner = owner; -} - -void tsip_dialog_messageContext_EnterStartState(struct tsip_dialog_messageContext* fsm) -{ - ENTRY_STATE(getState(fsm)); -} - -void tsip_dialog_messageContext_sm_1xx(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_1xx"); - state->sm_1xx(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_2xx(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_2xx"); - state->sm_2xx(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_300_to_699(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_300_to_699"); - state->sm_300_to_699(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_401_407_421_494(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_401_407_421_494"); - state->sm_401_407_421_494(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_accept(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_accept"); - state->sm_accept(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_cancel(struct tsip_dialog_messageContext* fsm) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_cancel"); - state->sm_cancel(fsm); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_error(struct tsip_dialog_messageContext* fsm) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_error"); - state->sm_error(fsm); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_receiveMESSAGE(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_receiveMESSAGE"); - state->sm_receiveMESSAGE(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_reject(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_reject"); - state->sm_reject(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_sendMESSAGE(struct tsip_dialog_messageContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_sendMESSAGE"); - state->sm_sendMESSAGE(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_dialog_messageContext_sm_transportError(struct tsip_dialog_messageContext* fsm) -{ - const struct tsip_dialog_messageState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_transportError"); - state->sm_transportError(fsm); - setTransition(fsm, NULL); -} - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/src/smc/tsip_dialog_register_sm.c b/trunk/tinySIP/src/smc/tsip_dialog_register_sm.c deleted file mode 100644 index f0792fbb..00000000 --- a/trunk/tinySIP/src/smc/tsip_dialog_register_sm.c +++ /dev/null @@ -1,574 +0,0 @@ -///* -// * ex: set ro: -// * DO NOT EDIT. -// * generated by smc (http://smc.sourceforge.net/) -// * from file : tsip_dialog_register.sm -// */ -// -// -///* -//* Copyright (C) 2009 Mamadou Diop. -//* -//* Contact: Mamadou Diop -//* -//* This file is part of Open Source Doubango Framework. -//* -//* DOUBANGO is free software: you can redistribute it and/or modify -//* it under the terms of the GNU General Public License as published by -//* the Free Software Foundation, either version 3 of the License, or -//* (at your option) any later version. -//* -//* DOUBANGO is distributed in the hope that it will be useful, -//* but WITHOUT ANY WARRANTY; without even the implied warranty of -//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//* GNU General Public License for more details. -//* -//* You should have received a copy of the GNU General Public License -//* along with DOUBANGO. -//* -//*/ -// -///**@file tsip_dialog_register.sm. -// * @brief SIP dialog REGISTER. -// * -// * @author Mamadou Diop -// * -// * @date Created: Sat Nov 8 16:54:58 2009 mdiop -// */ -// -////#define tsip_dialog_register_TSIP_DIALOG_BEGIN_TRANSIT(self) TSIP_DIALOG_BEGIN_TRANSIT(self) -////#define tsip_dialog_register_TSIP_DIALOG_END_TRANSIT(self) TSIP_DIALOG_END_TRANSIT(self) -// -// -//#include -//#include "tinysip/dialogs/tsip_dialog_register.h" -//#include "tsk_debug.h" -//#include "tinysip/smc/tsip_dialog_register_sm.h" -// -//#define getOwner(fsm) \ -// (fsm)->_owner -// -//#define POPULATE_STATE(state) \ -// state##_Entry, \ -// state##_sm_1xx, \ -// state##_sm_2xx, \ -// state##_sm_300_to_699, \ -// state##_sm_401_407_421_494, \ -// state##_sm_423, \ -// state##_sm_cancel, \ -// state##_sm_error, \ -// state##_sm_hangup, \ -// state##_sm_refresh, \ -// state##_sm_send, \ -// state##_sm_transportError, \ -// state##_sm_unregister, \ -// state##_Default -// -//#define ENTRY_STATE(state) \ -// if ((state)->Entry != NULL) { \ -// (state)->Entry(fsm); \ -// } -// -//#define EXIT_STATE(state) -// -//static void tsip_dialog_registerState_sm_1xx(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_2xx(struct tsip_dialog_registerContext *fsm, int unregistering, const tsip_message_t* msg) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_300_to_699(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_401_407_421_494(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_423(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_cancel(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_error(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_hangup(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_refresh(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_send(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_transportError(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_sm_unregister(struct tsip_dialog_registerContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_registerState_Default(struct tsip_dialog_registerContext *fsm) -//{ -// State_Default(fsm); -//} -// -//#define tsip_dialog_register_Started_sm_1xx tsip_dialog_registerState_sm_1xx -//#define tsip_dialog_register_Started_sm_2xx tsip_dialog_registerState_sm_2xx -//#define tsip_dialog_register_Started_sm_300_to_699 tsip_dialog_registerState_sm_300_to_699 -//#define tsip_dialog_register_Started_sm_401_407_421_494 tsip_dialog_registerState_sm_401_407_421_494 -//#define tsip_dialog_register_Started_sm_423 tsip_dialog_registerState_sm_423 -//#define tsip_dialog_register_Started_sm_cancel tsip_dialog_registerState_sm_cancel -//#define tsip_dialog_register_Started_sm_error tsip_dialog_registerState_sm_error -//#define tsip_dialog_register_Started_sm_hangup tsip_dialog_registerState_sm_hangup -//#define tsip_dialog_register_Started_sm_refresh tsip_dialog_registerState_sm_refresh -//#define tsip_dialog_register_Started_sm_send tsip_dialog_registerState_sm_send -//#define tsip_dialog_register_Started_sm_transportError tsip_dialog_registerState_sm_transportError -//#define tsip_dialog_register_Started_sm_unregister tsip_dialog_registerState_sm_unregister -//#define tsip_dialog_register_Started_Default tsip_dialog_registerState_Default -//#define tsip_dialog_register_Started_Entry NULL -//#define tsip_dialog_register_Started_Exit NULL -//#define tsip_dialog_register_Trying_sm_1xx tsip_dialog_registerState_sm_1xx -//#define tsip_dialog_register_Trying_sm_2xx tsip_dialog_registerState_sm_2xx -//#define tsip_dialog_register_Trying_sm_300_to_699 tsip_dialog_registerState_sm_300_to_699 -//#define tsip_dialog_register_Trying_sm_401_407_421_494 tsip_dialog_registerState_sm_401_407_421_494 -//#define tsip_dialog_register_Trying_sm_423 tsip_dialog_registerState_sm_423 -//#define tsip_dialog_register_Trying_sm_cancel tsip_dialog_registerState_sm_cancel -//#define tsip_dialog_register_Trying_sm_error tsip_dialog_registerState_sm_error -//#define tsip_dialog_register_Trying_sm_hangup tsip_dialog_registerState_sm_hangup -//#define tsip_dialog_register_Trying_sm_refresh tsip_dialog_registerState_sm_refresh -//#define tsip_dialog_register_Trying_sm_send tsip_dialog_registerState_sm_send -//#define tsip_dialog_register_Trying_sm_transportError tsip_dialog_registerState_sm_transportError -//#define tsip_dialog_register_Trying_sm_unregister tsip_dialog_registerState_sm_unregister -//#define tsip_dialog_register_Trying_Default tsip_dialog_registerState_Default -//#define tsip_dialog_register_Trying_Entry NULL -//#define tsip_dialog_register_Trying_Exit NULL -//#define tsip_dialog_register_Connected_sm_1xx tsip_dialog_registerState_sm_1xx -//#define tsip_dialog_register_Connected_sm_2xx tsip_dialog_registerState_sm_2xx -//#define tsip_dialog_register_Connected_sm_300_to_699 tsip_dialog_registerState_sm_300_to_699 -//#define tsip_dialog_register_Connected_sm_401_407_421_494 tsip_dialog_registerState_sm_401_407_421_494 -//#define tsip_dialog_register_Connected_sm_423 tsip_dialog_registerState_sm_423 -//#define tsip_dialog_register_Connected_sm_cancel tsip_dialog_registerState_sm_cancel -//#define tsip_dialog_register_Connected_sm_error tsip_dialog_registerState_sm_error -//#define tsip_dialog_register_Connected_sm_hangup tsip_dialog_registerState_sm_hangup -//#define tsip_dialog_register_Connected_sm_refresh tsip_dialog_registerState_sm_refresh -//#define tsip_dialog_register_Connected_sm_send tsip_dialog_registerState_sm_send -//#define tsip_dialog_register_Connected_sm_transportError tsip_dialog_registerState_sm_transportError -//#define tsip_dialog_register_Connected_sm_unregister tsip_dialog_registerState_sm_unregister -//#define tsip_dialog_register_Connected_Default tsip_dialog_registerState_Default -//#define tsip_dialog_register_Connected_Entry NULL -//#define tsip_dialog_register_Connected_Exit NULL -//#define tsip_dialog_register_Terminated_sm_1xx tsip_dialog_registerState_sm_1xx -//#define tsip_dialog_register_Terminated_sm_2xx tsip_dialog_registerState_sm_2xx -//#define tsip_dialog_register_Terminated_sm_300_to_699 tsip_dialog_registerState_sm_300_to_699 -//#define tsip_dialog_register_Terminated_sm_401_407_421_494 tsip_dialog_registerState_sm_401_407_421_494 -//#define tsip_dialog_register_Terminated_sm_423 tsip_dialog_registerState_sm_423 -//#define tsip_dialog_register_Terminated_sm_cancel tsip_dialog_registerState_sm_cancel -//#define tsip_dialog_register_Terminated_sm_error tsip_dialog_registerState_sm_error -//#define tsip_dialog_register_Terminated_sm_hangup tsip_dialog_registerState_sm_hangup -//#define tsip_dialog_register_Terminated_sm_refresh tsip_dialog_registerState_sm_refresh -//#define tsip_dialog_register_Terminated_sm_send tsip_dialog_registerState_sm_send -//#define tsip_dialog_register_Terminated_sm_transportError tsip_dialog_registerState_sm_transportError -//#define tsip_dialog_register_Terminated_sm_unregister tsip_dialog_registerState_sm_unregister -//#define tsip_dialog_register_Terminated_Default tsip_dialog_registerState_Default -//#define tsip_dialog_register_Terminated_Entry NULL -//#define tsip_dialog_register_Terminated_Exit NULL -//#define tsip_dialog_register_DefaultState_sm_1xx tsip_dialog_registerState_sm_1xx -//#define tsip_dialog_register_DefaultState_sm_2xx tsip_dialog_registerState_sm_2xx -//#define tsip_dialog_register_DefaultState_sm_300_to_699 tsip_dialog_registerState_sm_300_to_699 -//#define tsip_dialog_register_DefaultState_sm_401_407_421_494 tsip_dialog_registerState_sm_401_407_421_494 -//#define tsip_dialog_register_DefaultState_sm_423 tsip_dialog_registerState_sm_423 -//#define tsip_dialog_register_DefaultState_sm_cancel tsip_dialog_registerState_sm_cancel -//#define tsip_dialog_register_DefaultState_sm_error tsip_dialog_registerState_sm_error -//#define tsip_dialog_register_DefaultState_sm_hangup tsip_dialog_registerState_sm_hangup -//#define tsip_dialog_register_DefaultState_sm_refresh tsip_dialog_registerState_sm_refresh -//#define tsip_dialog_register_DefaultState_sm_send tsip_dialog_registerState_sm_send -//#define tsip_dialog_register_DefaultState_sm_transportError tsip_dialog_registerState_sm_transportError -//#define tsip_dialog_register_DefaultState_sm_unregister tsip_dialog_registerState_sm_unregister -// -//#undef tsip_dialog_register_Started_sm_hangup -//#define tsip_dialog_register_Started_sm_hangup tsip_dialog_register_DefaultState_sm_hangup -//#undef tsip_dialog_register_Trying_sm_hangup -//#define tsip_dialog_register_Trying_sm_hangup tsip_dialog_register_DefaultState_sm_hangup -//#undef tsip_dialog_register_Connected_sm_hangup -//#define tsip_dialog_register_Connected_sm_hangup tsip_dialog_register_DefaultState_sm_hangup -//#undef tsip_dialog_register_Terminated_sm_hangup -//#define tsip_dialog_register_Terminated_sm_hangup tsip_dialog_register_DefaultState_sm_hangup -//#undef tsip_dialog_register_DefaultState_sm_hangup -//static void tsip_dialog_register_DefaultState_sm_hangup(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Any_2_Trying_X_hangup(ctxt); -// setState(fsm, &tsip_dialog_register_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_register_Started_sm_transportError -//#define tsip_dialog_register_Started_sm_transportError tsip_dialog_register_DefaultState_sm_transportError -//#undef tsip_dialog_register_Trying_sm_transportError -//#define tsip_dialog_register_Trying_sm_transportError tsip_dialog_register_DefaultState_sm_transportError -//#undef tsip_dialog_register_Connected_sm_transportError -//#define tsip_dialog_register_Connected_sm_transportError tsip_dialog_register_DefaultState_sm_transportError -//#undef tsip_dialog_register_Terminated_sm_transportError -//#define tsip_dialog_register_Terminated_sm_transportError tsip_dialog_register_DefaultState_sm_transportError -//#undef tsip_dialog_register_DefaultState_sm_transportError -//static void tsip_dialog_register_DefaultState_sm_transportError(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Any_2_Terminated_X_transportError(ctxt); -// setState(fsm, &tsip_dialog_register_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_register_Started_sm_error -//#define tsip_dialog_register_Started_sm_error tsip_dialog_register_DefaultState_sm_error -//#undef tsip_dialog_register_Trying_sm_error -//#define tsip_dialog_register_Trying_sm_error tsip_dialog_register_DefaultState_sm_error -//#undef tsip_dialog_register_Connected_sm_error -//#define tsip_dialog_register_Connected_sm_error tsip_dialog_register_DefaultState_sm_error -//#undef tsip_dialog_register_Terminated_sm_error -//#define tsip_dialog_register_Terminated_sm_error tsip_dialog_register_DefaultState_sm_error -//#undef tsip_dialog_register_DefaultState_sm_error -//static void tsip_dialog_register_DefaultState_sm_error(struct tsip_dialog_registerContext *fsm) -//{ -// -// EXIT_STATE(getState(fsm)); -// setState(fsm, &tsip_dialog_register_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_register_Started_Default -//#define tsip_dialog_register_Started_Default tsip_dialog_register_DefaultState_Default -//#undef tsip_dialog_register_Trying_Default -//#define tsip_dialog_register_Trying_Default tsip_dialog_register_DefaultState_Default -//#undef tsip_dialog_register_Connected_Default -//#define tsip_dialog_register_Connected_Default tsip_dialog_register_DefaultState_Default -//#undef tsip_dialog_register_Terminated_Default -//#define tsip_dialog_register_Terminated_Default tsip_dialog_register_DefaultState_Default -//#undef tsip_dialog_register_DefaultState_Default -//static void tsip_dialog_register_DefaultState_Default(struct tsip_dialog_registerContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_register_Started_Default -//static void tsip_dialog_register_Started_Default(struct tsip_dialog_registerContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_register_Started_sm_send -//static void tsip_dialog_register_Started_sm_send(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Started_2_Trying_X_send(ctxt); -// setState(fsm, &tsip_dialog_register_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//const struct tsip_dialog_registerState tsip_dialog_register_Started = { POPULATE_STATE(tsip_dialog_register_Started), "tsip_dialog_register_Started", 0 }; -// -//#undef tsip_dialog_register_Trying_Default -//static void tsip_dialog_register_Trying_Default(struct tsip_dialog_registerContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_register_Trying_sm_1xx -//static void tsip_dialog_register_Trying_sm_1xx(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// const struct tsip_dialog_registerState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_register_Trying_2_Trying_X_1xx(ctxt, msg); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_register_Trying_sm_2xx -//static void tsip_dialog_register_Trying_sm_2xx(struct tsip_dialog_registerContext *fsm, int unregistering, const tsip_message_t* msg) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// if (!unregistering) { -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Trying_2_Connected_X_2xx(ctxt, msg); -// setState(fsm, &tsip_dialog_register_Connected); -// ENTRY_STATE(getState(fsm)); -// } -// else if (unregistering) { -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Trying_2_Terminated_X_2xx(ctxt, msg); -// setState(fsm, &tsip_dialog_register_Terminated); -// ENTRY_STATE(getState(fsm)); -// } else { -// tsip_dialog_register_DefaultState_sm_2xx(fsm, unregistering, msg); -// } -//} -// -//#undef tsip_dialog_register_Trying_sm_300_to_699 -//static void tsip_dialog_register_Trying_sm_300_to_699(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Trying_2_Terminated_X_300_to_699(ctxt, msg); -// setState(fsm, &tsip_dialog_register_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_register_Trying_sm_401_407_421_494 -//static void tsip_dialog_register_Trying_sm_401_407_421_494(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// const struct tsip_dialog_registerState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_register_Trying_2_Trying_X_401_407_421_494(ctxt, msg); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_register_Trying_sm_423 -//static void tsip_dialog_register_Trying_sm_423(struct tsip_dialog_registerContext *fsm, const tsip_message_t* msg) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// const struct tsip_dialog_registerState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_register_Trying_2_Trying_X_423(ctxt, msg); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_register_Trying_sm_cancel -//static void tsip_dialog_register_Trying_sm_cancel(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Trying_2_Terminated_X_cancel(ctxt); -// setState(fsm, &tsip_dialog_register_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//const struct tsip_dialog_registerState tsip_dialog_register_Trying = { POPULATE_STATE(tsip_dialog_register_Trying), "tsip_dialog_register_Trying", 1 }; -// -//#undef tsip_dialog_register_Connected_Default -//static void tsip_dialog_register_Connected_Default(struct tsip_dialog_registerContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_register_Connected_sm_refresh -//static void tsip_dialog_register_Connected_sm_refresh(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Connected_2_Trying_X_refresh(ctxt); -// setState(fsm, &tsip_dialog_register_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_register_Connected_sm_unregister -//static void tsip_dialog_register_Connected_sm_unregister(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_register_Connected_2_Trying_X_unregister(ctxt); -// setState(fsm, &tsip_dialog_register_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//const struct tsip_dialog_registerState tsip_dialog_register_Connected = { POPULATE_STATE(tsip_dialog_register_Connected), "tsip_dialog_register_Connected", 2 }; -// -//#undef tsip_dialog_register_Terminated_Entry -//void tsip_dialog_register_Terminated_Entry(struct tsip_dialog_registerContext *fsm) -//{ -// struct tsip_dialog_register *ctxt = getOwner(fsm); -// -// tsip_dialog_register_OnTerminated(ctxt); -//} -// -//#undef tsip_dialog_register_Terminated_Default -//static void tsip_dialog_register_Terminated_Default(struct tsip_dialog_registerContext *fsm) -//{ -// -//} -// -//const struct tsip_dialog_registerState tsip_dialog_register_Terminated = { POPULATE_STATE(tsip_dialog_register_Terminated), "tsip_dialog_register_Terminated", 3 }; -// -//void tsip_dialog_registerContext_Init(struct tsip_dialog_registerContext* fsm, struct tsip_dialog_register* owner) -//{ -// FSM_INIT(fsm, &tsip_dialog_register_Started); -// fsm->_owner = owner; -//} -// -//void tsip_dialog_registerContext_EnterStartState(struct tsip_dialog_registerContext* fsm) -//{ -// ENTRY_STATE(getState(fsm)); -//} -// -//void tsip_dialog_registerContext_sm_1xx(struct tsip_dialog_registerContext* fsm, const tsip_message_t* msg) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_1xx"); -// state->sm_1xx(fsm, msg); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_2xx(struct tsip_dialog_registerContext* fsm, int unregistering, const tsip_message_t* msg) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_2xx"); -// state->sm_2xx(fsm, unregistering, msg); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_300_to_699(struct tsip_dialog_registerContext* fsm, const tsip_message_t* msg) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_300_to_699"); -// state->sm_300_to_699(fsm, msg); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_401_407_421_494(struct tsip_dialog_registerContext* fsm, const tsip_message_t* msg) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_401_407_421_494"); -// state->sm_401_407_421_494(fsm, msg); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_423(struct tsip_dialog_registerContext* fsm, const tsip_message_t* msg) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_423"); -// state->sm_423(fsm, msg); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_cancel(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_cancel"); -// state->sm_cancel(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_error(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_error"); -// state->sm_error(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_hangup(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_hangup"); -// state->sm_hangup(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_refresh(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_refresh"); -// state->sm_refresh(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_send(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_send"); -// state->sm_send(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_transportError(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_transportError"); -// state->sm_transportError(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_registerContext_sm_unregister(struct tsip_dialog_registerContext* fsm) -//{ -// const struct tsip_dialog_registerState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_unregister"); -// state->sm_unregister(fsm); -// setTransition(fsm, NULL); -//} -// -///* -// * Local variables: -// * buffer-read-only: t -// * End: -// */ diff --git a/trunk/tinySIP/src/smc/tsip_dialog_subscribe_sm.c b/trunk/tinySIP/src/smc/tsip_dialog_subscribe_sm.c deleted file mode 100644 index f8471af1..00000000 --- a/trunk/tinySIP/src/smc/tsip_dialog_subscribe_sm.c +++ /dev/null @@ -1,627 +0,0 @@ -///* -// * ex: set ro: -// * DO NOT EDIT. -// * generated by smc (http://smc.sourceforge.net/) -// * from file : tsip_dialog_subscribe.sm -// */ -// -// -///* -//* Copyright (C) 2009 Mamadou Diop. -//* -//* Contact: Mamadou Diop -//* -//* This file is part of Open Source Doubango Framework. -//* -//* DOUBANGO is free software: you can redistribute it and/or modify -//* it under the terms of the GNU General Public License as published by -//* the Free Software Foundation, either version 3 of the License, or -//* (at your option) any later version. -//* -//* DOUBANGO is distributed in the hope that it will be useful, -//* but WITHOUT ANY WARRANTY; without even the implied warranty of -//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -//* GNU General Public License for more details. -//* -//* You should have received a copy of the GNU General Public License -//* along with DOUBANGO. -//* -//*/ -// -///**@file tsip_dialog_subscribe.sm. -// * @brief SIP dialog SUBSCRIBE (RFC 2543). -// * -// * @author Mamadou Diop -// * -// * @date Created: Sat Nov 8 16:54:58 2009 mdiop -// */ -// -// -// -//#include -//#include "tinysip/dialogs/tsip_dialog_subscribe.h" -//#include "tsk_debug.h" -//#include "tinySIP/smc/tsip_dialog_subscribe_sm.h" -// -//#define getOwner(fsm) \ -// (fsm)->_owner -// -//#define POPULATE_STATE(state) \ -// state##_Entry, \ -// state##_sm_1xx, \ -// state##_sm_2xx, \ -// state##_sm_300_to_699, \ -// state##_sm_401_407_421_494, \ -// state##_sm_423, \ -// state##_sm_NOTIFY, \ -// state##_sm_cancel, \ -// state##_sm_error, \ -// state##_sm_hangup, \ -// state##_sm_refresh, \ -// state##_sm_send, \ -// state##_sm_transportError, \ -// state##_sm_unsubscribe, \ -// state##_Default -// -//#define ENTRY_STATE(state) \ -// if ((state)->Entry != NULL) { \ -// (state)->Entry(fsm); \ -// } -// -//#define EXIT_STATE(state) -// -//static void tsip_dialog_subscribeState_sm_1xx(struct tsip_dialog_subscribeContext *fsm, const tsip_message_t* msg) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_2xx(struct tsip_dialog_subscribeContext *fsm, int unsubscribeing, const tsip_response_t* response) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_300_to_699(struct tsip_dialog_subscribeContext *fsm, const tsip_response_t* response) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_401_407_421_494(struct tsip_dialog_subscribeContext *fsm, const tsip_response_t* response) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_423(struct tsip_dialog_subscribeContext *fsm, const tsip_response_t* response) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_NOTIFY(struct tsip_dialog_subscribeContext *fsm, int sterminated, const tsip_request_t* request) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_cancel(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_error(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_hangup(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_refresh(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_send(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_transportError(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_sm_unsubscribe(struct tsip_dialog_subscribeContext *fsm) -//{ -// getState(fsm)->Default(fsm); -//} -// -//static void tsip_dialog_subscribeState_Default(struct tsip_dialog_subscribeContext *fsm) -//{ -// State_Default(fsm); -//} -// -//#define tsip_dialog_subscribe_Started_sm_1xx tsip_dialog_subscribeState_sm_1xx -//#define tsip_dialog_subscribe_Started_sm_2xx tsip_dialog_subscribeState_sm_2xx -//#define tsip_dialog_subscribe_Started_sm_300_to_699 tsip_dialog_subscribeState_sm_300_to_699 -//#define tsip_dialog_subscribe_Started_sm_401_407_421_494 tsip_dialog_subscribeState_sm_401_407_421_494 -//#define tsip_dialog_subscribe_Started_sm_423 tsip_dialog_subscribeState_sm_423 -//#define tsip_dialog_subscribe_Started_sm_NOTIFY tsip_dialog_subscribeState_sm_NOTIFY -//#define tsip_dialog_subscribe_Started_sm_cancel tsip_dialog_subscribeState_sm_cancel -//#define tsip_dialog_subscribe_Started_sm_error tsip_dialog_subscribeState_sm_error -//#define tsip_dialog_subscribe_Started_sm_hangup tsip_dialog_subscribeState_sm_hangup -//#define tsip_dialog_subscribe_Started_sm_refresh tsip_dialog_subscribeState_sm_refresh -//#define tsip_dialog_subscribe_Started_sm_send tsip_dialog_subscribeState_sm_send -//#define tsip_dialog_subscribe_Started_sm_transportError tsip_dialog_subscribeState_sm_transportError -//#define tsip_dialog_subscribe_Started_sm_unsubscribe tsip_dialog_subscribeState_sm_unsubscribe -//#define tsip_dialog_subscribe_Started_Default tsip_dialog_subscribeState_Default -//#define tsip_dialog_subscribe_Started_Entry NULL -//#define tsip_dialog_subscribe_Started_Exit NULL -//#define tsip_dialog_subscribe_Trying_sm_1xx tsip_dialog_subscribeState_sm_1xx -//#define tsip_dialog_subscribe_Trying_sm_2xx tsip_dialog_subscribeState_sm_2xx -//#define tsip_dialog_subscribe_Trying_sm_300_to_699 tsip_dialog_subscribeState_sm_300_to_699 -//#define tsip_dialog_subscribe_Trying_sm_401_407_421_494 tsip_dialog_subscribeState_sm_401_407_421_494 -//#define tsip_dialog_subscribe_Trying_sm_423 tsip_dialog_subscribeState_sm_423 -//#define tsip_dialog_subscribe_Trying_sm_NOTIFY tsip_dialog_subscribeState_sm_NOTIFY -//#define tsip_dialog_subscribe_Trying_sm_cancel tsip_dialog_subscribeState_sm_cancel -//#define tsip_dialog_subscribe_Trying_sm_error tsip_dialog_subscribeState_sm_error -//#define tsip_dialog_subscribe_Trying_sm_hangup tsip_dialog_subscribeState_sm_hangup -//#define tsip_dialog_subscribe_Trying_sm_refresh tsip_dialog_subscribeState_sm_refresh -//#define tsip_dialog_subscribe_Trying_sm_send tsip_dialog_subscribeState_sm_send -//#define tsip_dialog_subscribe_Trying_sm_transportError tsip_dialog_subscribeState_sm_transportError -//#define tsip_dialog_subscribe_Trying_sm_unsubscribe tsip_dialog_subscribeState_sm_unsubscribe -//#define tsip_dialog_subscribe_Trying_Default tsip_dialog_subscribeState_Default -//#define tsip_dialog_subscribe_Trying_Entry NULL -//#define tsip_dialog_subscribe_Trying_Exit NULL -//#define tsip_dialog_subscribe_Connected_sm_1xx tsip_dialog_subscribeState_sm_1xx -//#define tsip_dialog_subscribe_Connected_sm_2xx tsip_dialog_subscribeState_sm_2xx -//#define tsip_dialog_subscribe_Connected_sm_300_to_699 tsip_dialog_subscribeState_sm_300_to_699 -//#define tsip_dialog_subscribe_Connected_sm_401_407_421_494 tsip_dialog_subscribeState_sm_401_407_421_494 -//#define tsip_dialog_subscribe_Connected_sm_423 tsip_dialog_subscribeState_sm_423 -//#define tsip_dialog_subscribe_Connected_sm_NOTIFY tsip_dialog_subscribeState_sm_NOTIFY -//#define tsip_dialog_subscribe_Connected_sm_cancel tsip_dialog_subscribeState_sm_cancel -//#define tsip_dialog_subscribe_Connected_sm_error tsip_dialog_subscribeState_sm_error -//#define tsip_dialog_subscribe_Connected_sm_hangup tsip_dialog_subscribeState_sm_hangup -//#define tsip_dialog_subscribe_Connected_sm_refresh tsip_dialog_subscribeState_sm_refresh -//#define tsip_dialog_subscribe_Connected_sm_send tsip_dialog_subscribeState_sm_send -//#define tsip_dialog_subscribe_Connected_sm_transportError tsip_dialog_subscribeState_sm_transportError -//#define tsip_dialog_subscribe_Connected_sm_unsubscribe tsip_dialog_subscribeState_sm_unsubscribe -//#define tsip_dialog_subscribe_Connected_Default tsip_dialog_subscribeState_Default -//#define tsip_dialog_subscribe_Connected_Entry NULL -//#define tsip_dialog_subscribe_Connected_Exit NULL -//#define tsip_dialog_subscribe_Terminated_sm_1xx tsip_dialog_subscribeState_sm_1xx -//#define tsip_dialog_subscribe_Terminated_sm_2xx tsip_dialog_subscribeState_sm_2xx -//#define tsip_dialog_subscribe_Terminated_sm_300_to_699 tsip_dialog_subscribeState_sm_300_to_699 -//#define tsip_dialog_subscribe_Terminated_sm_401_407_421_494 tsip_dialog_subscribeState_sm_401_407_421_494 -//#define tsip_dialog_subscribe_Terminated_sm_423 tsip_dialog_subscribeState_sm_423 -//#define tsip_dialog_subscribe_Terminated_sm_NOTIFY tsip_dialog_subscribeState_sm_NOTIFY -//#define tsip_dialog_subscribe_Terminated_sm_cancel tsip_dialog_subscribeState_sm_cancel -//#define tsip_dialog_subscribe_Terminated_sm_error tsip_dialog_subscribeState_sm_error -//#define tsip_dialog_subscribe_Terminated_sm_hangup tsip_dialog_subscribeState_sm_hangup -//#define tsip_dialog_subscribe_Terminated_sm_refresh tsip_dialog_subscribeState_sm_refresh -//#define tsip_dialog_subscribe_Terminated_sm_send tsip_dialog_subscribeState_sm_send -//#define tsip_dialog_subscribe_Terminated_sm_transportError tsip_dialog_subscribeState_sm_transportError -//#define tsip_dialog_subscribe_Terminated_sm_unsubscribe tsip_dialog_subscribeState_sm_unsubscribe -//#define tsip_dialog_subscribe_Terminated_Default tsip_dialog_subscribeState_Default -//#define tsip_dialog_subscribe_Terminated_Entry NULL -//#define tsip_dialog_subscribe_Terminated_Exit NULL -//#define tsip_dialog_subscribe_DefaultState_sm_1xx tsip_dialog_subscribeState_sm_1xx -//#define tsip_dialog_subscribe_DefaultState_sm_2xx tsip_dialog_subscribeState_sm_2xx -//#define tsip_dialog_subscribe_DefaultState_sm_300_to_699 tsip_dialog_subscribeState_sm_300_to_699 -//#define tsip_dialog_subscribe_DefaultState_sm_401_407_421_494 tsip_dialog_subscribeState_sm_401_407_421_494 -//#define tsip_dialog_subscribe_DefaultState_sm_423 tsip_dialog_subscribeState_sm_423 -//#define tsip_dialog_subscribe_DefaultState_sm_NOTIFY tsip_dialog_subscribeState_sm_NOTIFY -//#define tsip_dialog_subscribe_DefaultState_sm_cancel tsip_dialog_subscribeState_sm_cancel -//#define tsip_dialog_subscribe_DefaultState_sm_error tsip_dialog_subscribeState_sm_error -//#define tsip_dialog_subscribe_DefaultState_sm_hangup tsip_dialog_subscribeState_sm_hangup -//#define tsip_dialog_subscribe_DefaultState_sm_refresh tsip_dialog_subscribeState_sm_refresh -//#define tsip_dialog_subscribe_DefaultState_sm_send tsip_dialog_subscribeState_sm_send -//#define tsip_dialog_subscribe_DefaultState_sm_transportError tsip_dialog_subscribeState_sm_transportError -//#define tsip_dialog_subscribe_DefaultState_sm_unsubscribe tsip_dialog_subscribeState_sm_unsubscribe -// -//#undef tsip_dialog_subscribe_Started_sm_hangup -//#define tsip_dialog_subscribe_Started_sm_hangup tsip_dialog_subscribe_DefaultState_sm_hangup -//#undef tsip_dialog_subscribe_Trying_sm_hangup -//#define tsip_dialog_subscribe_Trying_sm_hangup tsip_dialog_subscribe_DefaultState_sm_hangup -//#undef tsip_dialog_subscribe_Connected_sm_hangup -//#define tsip_dialog_subscribe_Connected_sm_hangup tsip_dialog_subscribe_DefaultState_sm_hangup -//#undef tsip_dialog_subscribe_Terminated_sm_hangup -//#define tsip_dialog_subscribe_Terminated_sm_hangup tsip_dialog_subscribe_DefaultState_sm_hangup -//#undef tsip_dialog_subscribe_DefaultState_sm_hangup -//static void tsip_dialog_subscribe_DefaultState_sm_hangup(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Any_2_Trying_X_hangup(ctxt); -// setState(fsm, &tsip_dialog_subscribe_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_subscribe_Started_sm_transportError -//#define tsip_dialog_subscribe_Started_sm_transportError tsip_dialog_subscribe_DefaultState_sm_transportError -//#undef tsip_dialog_subscribe_Trying_sm_transportError -//#define tsip_dialog_subscribe_Trying_sm_transportError tsip_dialog_subscribe_DefaultState_sm_transportError -//#undef tsip_dialog_subscribe_Connected_sm_transportError -//#define tsip_dialog_subscribe_Connected_sm_transportError tsip_dialog_subscribe_DefaultState_sm_transportError -//#undef tsip_dialog_subscribe_Terminated_sm_transportError -//#define tsip_dialog_subscribe_Terminated_sm_transportError tsip_dialog_subscribe_DefaultState_sm_transportError -//#undef tsip_dialog_subscribe_DefaultState_sm_transportError -//static void tsip_dialog_subscribe_DefaultState_sm_transportError(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Any_2_Terminated_X_transportError(ctxt); -// setState(fsm, &tsip_dialog_subscribe_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_subscribe_Started_sm_error -//#define tsip_dialog_subscribe_Started_sm_error tsip_dialog_subscribe_DefaultState_sm_error -//#undef tsip_dialog_subscribe_Trying_sm_error -//#define tsip_dialog_subscribe_Trying_sm_error tsip_dialog_subscribe_DefaultState_sm_error -//#undef tsip_dialog_subscribe_Connected_sm_error -//#define tsip_dialog_subscribe_Connected_sm_error tsip_dialog_subscribe_DefaultState_sm_error -//#undef tsip_dialog_subscribe_Terminated_sm_error -//#define tsip_dialog_subscribe_Terminated_sm_error tsip_dialog_subscribe_DefaultState_sm_error -//#undef tsip_dialog_subscribe_DefaultState_sm_error -//static void tsip_dialog_subscribe_DefaultState_sm_error(struct tsip_dialog_subscribeContext *fsm) -//{ -// -// EXIT_STATE(getState(fsm)); -// setState(fsm, &tsip_dialog_subscribe_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_subscribe_Started_Default -//#define tsip_dialog_subscribe_Started_Default tsip_dialog_subscribe_DefaultState_Default -//#undef tsip_dialog_subscribe_Trying_Default -//#define tsip_dialog_subscribe_Trying_Default tsip_dialog_subscribe_DefaultState_Default -//#undef tsip_dialog_subscribe_Connected_Default -//#define tsip_dialog_subscribe_Connected_Default tsip_dialog_subscribe_DefaultState_Default -//#undef tsip_dialog_subscribe_Terminated_Default -//#define tsip_dialog_subscribe_Terminated_Default tsip_dialog_subscribe_DefaultState_Default -//#undef tsip_dialog_subscribe_DefaultState_Default -//static void tsip_dialog_subscribe_DefaultState_Default(struct tsip_dialog_subscribeContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_subscribe_Started_Default -//static void tsip_dialog_subscribe_Started_Default(struct tsip_dialog_subscribeContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_subscribe_Started_sm_send -//static void tsip_dialog_subscribe_Started_sm_send(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Started_2_Trying_X_send(ctxt); -// setState(fsm, &tsip_dialog_subscribe_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Started = { POPULATE_STATE(tsip_dialog_subscribe_Started), "tsip_dialog_subscribe_Started", 0 }; -// -//#undef tsip_dialog_subscribe_Trying_Default -//static void tsip_dialog_subscribe_Trying_Default(struct tsip_dialog_subscribeContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_1xx -//static void tsip_dialog_subscribe_Trying_sm_1xx(struct tsip_dialog_subscribeContext *fsm, const tsip_message_t* msg) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// const struct tsip_dialog_subscribeState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Trying_X_1xx(ctxt, msg); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_2xx -//static void tsip_dialog_subscribe_Trying_sm_2xx(struct tsip_dialog_subscribeContext *fsm, int unsubscribeing, const tsip_response_t* response) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// if (unsubscribeing) { -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Terminated_X_2xx(ctxt, response); -// setState(fsm, &tsip_dialog_subscribe_Terminated); -// ENTRY_STATE(getState(fsm)); -// } -// else if (!unsubscribeing) { -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Connected_X_2xx(ctxt, response); -// setState(fsm, &tsip_dialog_subscribe_Connected); -// ENTRY_STATE(getState(fsm)); -// } else { -// tsip_dialog_subscribe_DefaultState_sm_2xx(fsm, unsubscribeing, response); -// } -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_300_to_699 -//static void tsip_dialog_subscribe_Trying_sm_300_to_699(struct tsip_dialog_subscribeContext *fsm, const tsip_response_t* response) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Terminated_X_300_to_699(ctxt, response); -// setState(fsm, &tsip_dialog_subscribe_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_401_407_421_494 -//static void tsip_dialog_subscribe_Trying_sm_401_407_421_494(struct tsip_dialog_subscribeContext *fsm, const tsip_response_t* response) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// const struct tsip_dialog_subscribeState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Trying_X_401_407_421_494(ctxt, response); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_423 -//static void tsip_dialog_subscribe_Trying_sm_423(struct tsip_dialog_subscribeContext *fsm, const tsip_response_t* response) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// const struct tsip_dialog_subscribeState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Trying_X_423(ctxt, response); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_NOTIFY -//static void tsip_dialog_subscribe_Trying_sm_NOTIFY(struct tsip_dialog_subscribeContext *fsm, int sterminated, const tsip_request_t* request) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// const struct tsip_dialog_subscribeState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Trying_X_NOTIFY(ctxt, request); -// setState(fsm, EndStateName); -//} -// -//#undef tsip_dialog_subscribe_Trying_sm_cancel -//static void tsip_dialog_subscribe_Trying_sm_cancel(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Trying_2_Terminated_X_cancel(ctxt); -// setState(fsm, &tsip_dialog_subscribe_Terminated); -// ENTRY_STATE(getState(fsm)); -//} -// -//const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Trying = { POPULATE_STATE(tsip_dialog_subscribe_Trying), "tsip_dialog_subscribe_Trying", 1 }; -// -//#undef tsip_dialog_subscribe_Connected_Default -//static void tsip_dialog_subscribe_Connected_Default(struct tsip_dialog_subscribeContext *fsm) -//{ -// -//} -// -//#undef tsip_dialog_subscribe_Connected_sm_NOTIFY -//static void tsip_dialog_subscribe_Connected_sm_NOTIFY(struct tsip_dialog_subscribeContext *fsm, int sterminated, const tsip_request_t* request) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// if (!sterminated) { -// const struct tsip_dialog_subscribeState* EndStateName = getState(fsm); -// -// clearState(fsm); -// tsip_dialog_subscribe_Connected_2_Connected_X_NOTIFY(ctxt, request); -// setState(fsm, EndStateName); -// } -// else if (sterminated) { -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Connected_2_Terminated_X_NOTIFY(ctxt, request); -// setState(fsm, &tsip_dialog_subscribe_Terminated); -// ENTRY_STATE(getState(fsm)); -// } else { -// tsip_dialog_subscribe_DefaultState_sm_NOTIFY(fsm, sterminated, request); -// } -//} -// -//#undef tsip_dialog_subscribe_Connected_sm_refresh -//static void tsip_dialog_subscribe_Connected_sm_refresh(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Connected_2_Trying_X_refresh(ctxt); -// setState(fsm, &tsip_dialog_subscribe_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//#undef tsip_dialog_subscribe_Connected_sm_unsubscribe -//static void tsip_dialog_subscribe_Connected_sm_unsubscribe(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe* ctxt = getOwner(fsm); -// -// EXIT_STATE(getState(fsm)); -// clearState(fsm); -// tsip_dialog_subscribe_Connected_2_Trying_X_unsubscribe(ctxt); -// setState(fsm, &tsip_dialog_subscribe_Trying); -// ENTRY_STATE(getState(fsm)); -//} -// -//const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Connected = { POPULATE_STATE(tsip_dialog_subscribe_Connected), "tsip_dialog_subscribe_Connected", 2 }; -// -//#undef tsip_dialog_subscribe_Terminated_Entry -//void tsip_dialog_subscribe_Terminated_Entry(struct tsip_dialog_subscribeContext *fsm) -//{ -// struct tsip_dialog_subscribe *ctxt = getOwner(fsm); -// -// tsip_dialog_subscribe_OnTerminated(ctxt); -//} -// -//#undef tsip_dialog_subscribe_Terminated_Default -//static void tsip_dialog_subscribe_Terminated_Default(struct tsip_dialog_subscribeContext *fsm) -//{ -// -//} -// -//const struct tsip_dialog_subscribeState tsip_dialog_subscribe_Terminated = { POPULATE_STATE(tsip_dialog_subscribe_Terminated), "tsip_dialog_subscribe_Terminated", 3 }; -// -//void tsip_dialog_subscribeContext_Init(struct tsip_dialog_subscribeContext* fsm, struct tsip_dialog_subscribe* owner) -//{ -// FSM_INIT(fsm, &tsip_dialog_subscribe_Started); -// fsm->_owner = owner; -//} -// -//void tsip_dialog_subscribeContext_EnterStartState(struct tsip_dialog_subscribeContext* fsm) -//{ -// ENTRY_STATE(getState(fsm)); -//} -// -//void tsip_dialog_subscribeContext_sm_1xx(struct tsip_dialog_subscribeContext* fsm, const tsip_message_t* msg) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_1xx"); -// state->sm_1xx(fsm, msg); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_2xx(struct tsip_dialog_subscribeContext* fsm, int unsubscribeing, const tsip_response_t* response) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_2xx"); -// state->sm_2xx(fsm, unsubscribeing, response); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_300_to_699(struct tsip_dialog_subscribeContext* fsm, const tsip_response_t* response) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_300_to_699"); -// state->sm_300_to_699(fsm, response); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_401_407_421_494(struct tsip_dialog_subscribeContext* fsm, const tsip_response_t* response) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_401_407_421_494"); -// state->sm_401_407_421_494(fsm, response); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_423(struct tsip_dialog_subscribeContext* fsm, const tsip_response_t* response) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_423"); -// state->sm_423(fsm, response); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_NOTIFY(struct tsip_dialog_subscribeContext* fsm, int sterminated, const tsip_request_t* request) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_NOTIFY"); -// state->sm_NOTIFY(fsm, sterminated, request); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_cancel(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_cancel"); -// state->sm_cancel(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_error(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_error"); -// state->sm_error(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_hangup(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_hangup"); -// state->sm_hangup(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_refresh(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_refresh"); -// state->sm_refresh(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_send(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_send"); -// state->sm_send(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_transportError(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_transportError"); -// state->sm_transportError(fsm); -// setTransition(fsm, NULL); -//} -// -//void tsip_dialog_subscribeContext_sm_unsubscribe(struct tsip_dialog_subscribeContext* fsm) -//{ -// const struct tsip_dialog_subscribeState* state = getState(fsm); -// -// assert(state != NULL); -// setTransition(fsm, "sm_unsubscribe"); -// state->sm_unsubscribe(fsm); -// setTransition(fsm, NULL); -//} -// -///* -// * Local variables: -// * buffer-read-only: t -// * End: -// */ diff --git a/trunk/tinySIP/src/smc/tsip_transac_ict_sm.c b/trunk/tinySIP/src/smc/tsip_transac_ict_sm.c deleted file mode 100644 index 60d14286..00000000 --- a/trunk/tinySIP/src/smc/tsip_transac_ict_sm.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_ict.sm - */ - - -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_ict.c - * @brief SIP INVITE Client Transaction as per RFC 3261 subclause 17.1.1. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - - -#include -#include "tinysip/transactions/tsip_transac_ict.h" -#include "tinysip/smc/tsip_transac_ict_sm.h" - -#define getOwner(fsm) \ - (fsm)->_owner - -#define POPULATE_STATE(state) \ - state##_Default - -#define ENTRY_STATE(state) - -#define EXIT_STATE(state) - -static void tsip_transac_ictState_Default(struct tsip_transac_ictContext *fsm) -{ - State_Default(fsm); -} - -#define tsip_transac_ict_Started_Default tsip_transac_ictState_Default -#define tsip_transac_ict_Started_Entry NULL -#define tsip_transac_ict_Started_Exit NULL - -const struct tsip_transac_ictState tsip_transac_ict_Started = { POPULATE_STATE(tsip_transac_ict_Started), "tsip_transac_ict_Started", 0 }; - -void tsip_transac_ictContext_Init(struct tsip_transac_ictContext* fsm, struct tsip_transac_ict* owner) -{ - FSM_INIT(fsm, &tsip_transac_ict_Started); - fsm->_owner = owner; -} - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/src/smc/tsip_transac_ist_sm.c b/trunk/tinySIP/src/smc/tsip_transac_ist_sm.c deleted file mode 100644 index 76ed0e28..00000000 --- a/trunk/tinySIP/src/smc/tsip_transac_ist_sm.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_ist.sm - */ - - -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_ist.sm - * @brief SIP INVITE Server Transaction as per RFC 3261 subclause 17.2.1. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - - -#include -#include "tinysip/transactions/tsip_transac_ist.h" -#include "tinysip/smc/tsip_transac_ist_sm.h" - -#define getOwner(fsm) \ - (fsm)->_owner - -#define POPULATE_STATE(state) \ - state##_Default - -#define ENTRY_STATE(state) - -#define EXIT_STATE(state) - -static void tsip_transac_istState_Default(struct tsip_transac_istContext *fsm) -{ - State_Default(fsm); -} - -#define tsip_transac_ist_Started_Default tsip_transac_istState_Default -#define tsip_transac_ist_Started_Entry NULL -#define tsip_transac_ist_Started_Exit NULL - -const struct tsip_transac_istState tsip_transac_ist_Started = { POPULATE_STATE(tsip_transac_ist_Started), "tsip_transac_ist_Started", 0 }; - -void tsip_transac_istContext_Init(struct tsip_transac_istContext* fsm, struct tsip_transac_ist* owner) -{ - FSM_INIT(fsm, &tsip_transac_ist_Started); - fsm->_owner = owner; -} - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/src/smc/tsip_transac_nict_sm.c b/trunk/tinySIP/src/smc/tsip_transac_nict_sm.c deleted file mode 100644 index 669616d1..00000000 --- a/trunk/tinySIP/src/smc/tsip_transac_nict_sm.c +++ /dev/null @@ -1,445 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_nict.sm - */ - - -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_nict.sm - * @brief SIP Non-INVITE Client Transaction as per RFC 3261 subcaluse 17.1.2. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - - -#include -#include "tinysip/transactions/tsip_transac_nict.h" -#include "tinysip/smc/tsip_transac_nict_sm.h" - -#define getOwner(fsm) \ - (fsm)->_owner - -#define POPULATE_STATE(state) \ - state##_Entry, \ - state##_sm_1xx, \ - state##_sm_200_to_699, \ - state##_sm_send, \ - state##_sm_timerE, \ - state##_sm_timerF, \ - state##_sm_timerK, \ - state##_sm_transportError, \ - state##_Default - -#define ENTRY_STATE(state) \ - if ((state)->Entry != NULL) { \ - (state)->Entry(fsm); \ - } - -#define EXIT_STATE(state) - -static void tsip_transac_nictState_sm_1xx(struct tsip_transac_nictContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_sm_200_to_699(struct tsip_transac_nictContext *fsm, const tsip_message_t* msg) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_sm_send(struct tsip_transac_nictContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_sm_timerE(struct tsip_transac_nictContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_sm_timerF(struct tsip_transac_nictContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_sm_timerK(struct tsip_transac_nictContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_sm_transportError(struct tsip_transac_nictContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nictState_Default(struct tsip_transac_nictContext *fsm) -{ - State_Default(fsm); -} - -#define tsip_transac_nict_Started_sm_1xx tsip_transac_nictState_sm_1xx -#define tsip_transac_nict_Started_sm_200_to_699 tsip_transac_nictState_sm_200_to_699 -#define tsip_transac_nict_Started_sm_send tsip_transac_nictState_sm_send -#define tsip_transac_nict_Started_sm_timerE tsip_transac_nictState_sm_timerE -#define tsip_transac_nict_Started_sm_timerF tsip_transac_nictState_sm_timerF -#define tsip_transac_nict_Started_sm_timerK tsip_transac_nictState_sm_timerK -#define tsip_transac_nict_Started_sm_transportError tsip_transac_nictState_sm_transportError -#define tsip_transac_nict_Started_Default tsip_transac_nictState_Default -#define tsip_transac_nict_Started_Entry NULL -#define tsip_transac_nict_Started_Exit NULL -#define tsip_transac_nict_Trying_sm_1xx tsip_transac_nictState_sm_1xx -#define tsip_transac_nict_Trying_sm_200_to_699 tsip_transac_nictState_sm_200_to_699 -#define tsip_transac_nict_Trying_sm_send tsip_transac_nictState_sm_send -#define tsip_transac_nict_Trying_sm_timerE tsip_transac_nictState_sm_timerE -#define tsip_transac_nict_Trying_sm_timerF tsip_transac_nictState_sm_timerF -#define tsip_transac_nict_Trying_sm_timerK tsip_transac_nictState_sm_timerK -#define tsip_transac_nict_Trying_sm_transportError tsip_transac_nictState_sm_transportError -#define tsip_transac_nict_Trying_Default tsip_transac_nictState_Default -#define tsip_transac_nict_Trying_Entry NULL -#define tsip_transac_nict_Trying_Exit NULL -#define tsip_transac_nict_Proceeding_sm_1xx tsip_transac_nictState_sm_1xx -#define tsip_transac_nict_Proceeding_sm_200_to_699 tsip_transac_nictState_sm_200_to_699 -#define tsip_transac_nict_Proceeding_sm_send tsip_transac_nictState_sm_send -#define tsip_transac_nict_Proceeding_sm_timerE tsip_transac_nictState_sm_timerE -#define tsip_transac_nict_Proceeding_sm_timerF tsip_transac_nictState_sm_timerF -#define tsip_transac_nict_Proceeding_sm_timerK tsip_transac_nictState_sm_timerK -#define tsip_transac_nict_Proceeding_sm_transportError tsip_transac_nictState_sm_transportError -#define tsip_transac_nict_Proceeding_Default tsip_transac_nictState_Default -#define tsip_transac_nict_Proceeding_Entry NULL -#define tsip_transac_nict_Proceeding_Exit NULL -#define tsip_transac_nict_Completed_sm_1xx tsip_transac_nictState_sm_1xx -#define tsip_transac_nict_Completed_sm_200_to_699 tsip_transac_nictState_sm_200_to_699 -#define tsip_transac_nict_Completed_sm_send tsip_transac_nictState_sm_send -#define tsip_transac_nict_Completed_sm_timerE tsip_transac_nictState_sm_timerE -#define tsip_transac_nict_Completed_sm_timerF tsip_transac_nictState_sm_timerF -#define tsip_transac_nict_Completed_sm_timerK tsip_transac_nictState_sm_timerK -#define tsip_transac_nict_Completed_sm_transportError tsip_transac_nictState_sm_transportError -#define tsip_transac_nict_Completed_Default tsip_transac_nictState_Default -#define tsip_transac_nict_Completed_Entry NULL -#define tsip_transac_nict_Completed_Exit NULL -#define tsip_transac_nict_Terminated_sm_1xx tsip_transac_nictState_sm_1xx -#define tsip_transac_nict_Terminated_sm_200_to_699 tsip_transac_nictState_sm_200_to_699 -#define tsip_transac_nict_Terminated_sm_send tsip_transac_nictState_sm_send -#define tsip_transac_nict_Terminated_sm_timerE tsip_transac_nictState_sm_timerE -#define tsip_transac_nict_Terminated_sm_timerF tsip_transac_nictState_sm_timerF -#define tsip_transac_nict_Terminated_sm_timerK tsip_transac_nictState_sm_timerK -#define tsip_transac_nict_Terminated_sm_transportError tsip_transac_nictState_sm_transportError -#define tsip_transac_nict_Terminated_Default tsip_transac_nictState_Default -#define tsip_transac_nict_Terminated_Entry NULL -#define tsip_transac_nict_Terminated_Exit NULL -#define tsip_transac_nict_DefaultState_sm_1xx tsip_transac_nictState_sm_1xx -#define tsip_transac_nict_DefaultState_sm_200_to_699 tsip_transac_nictState_sm_200_to_699 -#define tsip_transac_nict_DefaultState_sm_send tsip_transac_nictState_sm_send -#define tsip_transac_nict_DefaultState_sm_timerE tsip_transac_nictState_sm_timerE -#define tsip_transac_nict_DefaultState_sm_timerF tsip_transac_nictState_sm_timerF -#define tsip_transac_nict_DefaultState_sm_timerK tsip_transac_nictState_sm_timerK -#define tsip_transac_nict_DefaultState_sm_transportError tsip_transac_nictState_sm_transportError - -#undef tsip_transac_nict_Started_sm_transportError -#define tsip_transac_nict_Started_sm_transportError tsip_transac_nict_DefaultState_sm_transportError -#undef tsip_transac_nict_Trying_sm_transportError -#define tsip_transac_nict_Trying_sm_transportError tsip_transac_nict_DefaultState_sm_transportError -#undef tsip_transac_nict_Proceeding_sm_transportError -#define tsip_transac_nict_Proceeding_sm_transportError tsip_transac_nict_DefaultState_sm_transportError -#undef tsip_transac_nict_Completed_sm_transportError -#define tsip_transac_nict_Completed_sm_transportError tsip_transac_nict_DefaultState_sm_transportError -#undef tsip_transac_nict_Terminated_sm_transportError -#define tsip_transac_nict_Terminated_sm_transportError tsip_transac_nict_DefaultState_sm_transportError -#undef tsip_transac_nict_DefaultState_sm_transportError -static void tsip_transac_nict_DefaultState_sm_transportError(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Any_2_Terminated_X_transportError(ctxt); - setState(fsm, &tsip_transac_nict_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nict_Started_Default -#define tsip_transac_nict_Started_Default tsip_transac_nict_DefaultState_Default -#undef tsip_transac_nict_Trying_Default -#define tsip_transac_nict_Trying_Default tsip_transac_nict_DefaultState_Default -#undef tsip_transac_nict_Proceeding_Default -#define tsip_transac_nict_Proceeding_Default tsip_transac_nict_DefaultState_Default -#undef tsip_transac_nict_Completed_Default -#define tsip_transac_nict_Completed_Default tsip_transac_nict_DefaultState_Default -#undef tsip_transac_nict_Terminated_Default -#define tsip_transac_nict_Terminated_Default tsip_transac_nict_DefaultState_Default -#undef tsip_transac_nict_DefaultState_Default -static void tsip_transac_nict_DefaultState_Default(struct tsip_transac_nictContext *fsm) -{ - -} - -#undef tsip_transac_nict_Started_sm_send -static void tsip_transac_nict_Started_sm_send(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Started_2_Trying_X_send(ctxt); - setState(fsm, &tsip_transac_nict_Trying); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nictState tsip_transac_nict_Started = { POPULATE_STATE(tsip_transac_nict_Started), "tsip_transac_nict_Started", 0 }; - -#undef tsip_transac_nict_Trying_sm_1xx -static void tsip_transac_nict_Trying_sm_1xx(struct tsip_transac_nictContext *fsm, const tsip_message_t* msg) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Trying_2_Proceedding_X_1xx(ctxt, msg); - setState(fsm, &tsip_transac_nict_Proceeding); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nict_Trying_sm_200_to_699 -static void tsip_transac_nict_Trying_sm_200_to_699(struct tsip_transac_nictContext *fsm, const tsip_message_t* msg) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Trying_2_Completed_X_200_to_699(ctxt, msg); - setState(fsm, &tsip_transac_nict_Completed); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nict_Trying_sm_timerE -static void tsip_transac_nict_Trying_sm_timerE(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - const struct tsip_transac_nictState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_transac_nict_Trying_2_Trying_X_timerE(ctxt); - setState(fsm, EndStateName); -} - -#undef tsip_transac_nict_Trying_sm_timerF -static void tsip_transac_nict_Trying_sm_timerF(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Trying_2_Terminated_X_timerF(ctxt); - setState(fsm, &tsip_transac_nict_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nict_Trying_sm_transportError -static void tsip_transac_nict_Trying_sm_transportError(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Trying_2_Terminated_X_transportError(ctxt); - setState(fsm, &tsip_transac_nict_Terminated); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nictState tsip_transac_nict_Trying = { POPULATE_STATE(tsip_transac_nict_Trying), "tsip_transac_nict_Trying", 1 }; - -#undef tsip_transac_nict_Proceeding_sm_1xx -static void tsip_transac_nict_Proceeding_sm_1xx(struct tsip_transac_nictContext *fsm, const tsip_message_t* msg) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - const struct tsip_transac_nictState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_transac_nict_Proceeding_2_Proceeding_X_1xx(ctxt, msg); - setState(fsm, EndStateName); -} - -#undef tsip_transac_nict_Proceeding_sm_200_to_699 -static void tsip_transac_nict_Proceeding_sm_200_to_699(struct tsip_transac_nictContext *fsm, const tsip_message_t* msg) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Proceeding_2_Completed_X_200_to_699(ctxt, msg); - setState(fsm, &tsip_transac_nict_Completed); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nict_Proceeding_sm_timerE -static void tsip_transac_nict_Proceeding_sm_timerE(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - const struct tsip_transac_nictState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_transac_nict_Proceeding_2_Proceeding_X_timerE(ctxt); - setState(fsm, EndStateName); -} - -#undef tsip_transac_nict_Proceeding_sm_timerF -static void tsip_transac_nict_Proceeding_sm_timerF(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Proceeding_2_Terminated_X_timerF(ctxt); - setState(fsm, &tsip_transac_nict_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nict_Proceeding_sm_transportError -static void tsip_transac_nict_Proceeding_sm_transportError(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Proceeding_2_Terminated_X_transportError(ctxt); - setState(fsm, &tsip_transac_nict_Terminated); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nictState tsip_transac_nict_Proceeding = { POPULATE_STATE(tsip_transac_nict_Proceeding), "tsip_transac_nict_Proceeding", 2 }; - -#undef tsip_transac_nict_Completed_sm_timerK -static void tsip_transac_nict_Completed_sm_timerK(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nict_Completed_2_Terminated_X_timerK(ctxt); - setState(fsm, &tsip_transac_nict_Terminated); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nictState tsip_transac_nict_Completed = { POPULATE_STATE(tsip_transac_nict_Completed), "tsip_transac_nict_Completed", 3 }; - -#undef tsip_transac_nict_Terminated_Entry -void tsip_transac_nict_Terminated_Entry(struct tsip_transac_nictContext *fsm) -{ - struct tsip_transac_nict *ctxt = getOwner(fsm); - - tsip_transac_nict_OnTerminated(ctxt); -} - -const struct tsip_transac_nictState tsip_transac_nict_Terminated = { POPULATE_STATE(tsip_transac_nict_Terminated), "tsip_transac_nict_Terminated", 4 }; - -void tsip_transac_nictContext_Init(struct tsip_transac_nictContext* fsm, struct tsip_transac_nict* owner) -{ - FSM_INIT(fsm, &tsip_transac_nict_Started); - fsm->_owner = owner; -} - -void tsip_transac_nictContext_EnterStartState(struct tsip_transac_nictContext* fsm) -{ - ENTRY_STATE(getState(fsm)); -} - -void tsip_transac_nictContext_sm_1xx(struct tsip_transac_nictContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_1xx"); - state->sm_1xx(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_transac_nictContext_sm_200_to_699(struct tsip_transac_nictContext* fsm, const tsip_message_t* msg) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_200_to_699"); - state->sm_200_to_699(fsm, msg); - setTransition(fsm, NULL); -} - -void tsip_transac_nictContext_sm_send(struct tsip_transac_nictContext* fsm) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_send"); - state->sm_send(fsm); - setTransition(fsm, NULL); -} - -void tsip_transac_nictContext_sm_timerE(struct tsip_transac_nictContext* fsm) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_timerE"); - state->sm_timerE(fsm); - setTransition(fsm, NULL); -} - -void tsip_transac_nictContext_sm_timerF(struct tsip_transac_nictContext* fsm) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_timerF"); - state->sm_timerF(fsm); - setTransition(fsm, NULL); -} - -void tsip_transac_nictContext_sm_timerK(struct tsip_transac_nictContext* fsm) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_timerK"); - state->sm_timerK(fsm); - setTransition(fsm, NULL); -} - -void tsip_transac_nictContext_sm_transportError(struct tsip_transac_nictContext* fsm) -{ - const struct tsip_transac_nictState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_transportError"); - state->sm_transportError(fsm); - setTransition(fsm, NULL); -} - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/src/smc/tsip_transac_nist_sm.c b/trunk/tinySIP/src/smc/tsip_transac_nist_sm.c deleted file mode 100644 index fc61e043..00000000 --- a/trunk/tinySIP/src/smc/tsip_transac_nist_sm.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * ex: set ro: - * DO NOT EDIT. - * generated by smc (http://smc.sourceforge.net/) - * from file : tsip_transac_nist.sm - */ - - -/* -* Copyright (C) 2009 Mamadou Diop. -* -* Contact: Mamadou Diop -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsip_transac_nist.sm - * @brief SIP Non-INVITE Server Transaction as per RFC 3261 subclause 17.2.2. - * - * @author Mamadou Diop - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ - - -#include -#include "tinysip/transactions/tsip_transac_nist.h" -#include "tinysip/smc/tsip_transac_nist_sm.h" - -#define getOwner(fsm) \ - (fsm)->_owner - -#define POPULATE_STATE(state) \ - state##_Entry, \ - state##_sm_request, \ - state##_sm_send_1xx, \ - state##_sm_send_200_to_699, \ - state##_sm_timerJ, \ - state##_sm_transportError, \ - state##_Default - -#define ENTRY_STATE(state) \ - if ((state)->Entry != NULL) { \ - (state)->Entry(fsm); \ - } - -#define EXIT_STATE(state) - -static void tsip_transac_nistState_sm_request(struct tsip_transac_nistContext *fsm, const tsip_request_t* request) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nistState_sm_send_1xx(struct tsip_transac_nistContext *fsm, const tsip_response_t* response) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nistState_sm_send_200_to_699(struct tsip_transac_nistContext *fsm, const tsip_response_t* response) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nistState_sm_timerJ(struct tsip_transac_nistContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nistState_sm_transportError(struct tsip_transac_nistContext *fsm) -{ - getState(fsm)->Default(fsm); -} - -static void tsip_transac_nistState_Default(struct tsip_transac_nistContext *fsm) -{ - State_Default(fsm); -} - -#define tsip_transac_nist_Started_sm_request tsip_transac_nistState_sm_request -#define tsip_transac_nist_Started_sm_send_1xx tsip_transac_nistState_sm_send_1xx -#define tsip_transac_nist_Started_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699 -#define tsip_transac_nist_Started_sm_timerJ tsip_transac_nistState_sm_timerJ -#define tsip_transac_nist_Started_sm_transportError tsip_transac_nistState_sm_transportError -#define tsip_transac_nist_Started_Default tsip_transac_nistState_Default -#define tsip_transac_nist_Started_Entry NULL -#define tsip_transac_nist_Started_Exit NULL -#define tsip_transac_nist_Trying_sm_request tsip_transac_nistState_sm_request -#define tsip_transac_nist_Trying_sm_send_1xx tsip_transac_nistState_sm_send_1xx -#define tsip_transac_nist_Trying_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699 -#define tsip_transac_nist_Trying_sm_timerJ tsip_transac_nistState_sm_timerJ -#define tsip_transac_nist_Trying_sm_transportError tsip_transac_nistState_sm_transportError -#define tsip_transac_nist_Trying_Default tsip_transac_nistState_Default -#define tsip_transac_nist_Trying_Entry NULL -#define tsip_transac_nist_Trying_Exit NULL -#define tsip_transac_nist_Proceeding_sm_request tsip_transac_nistState_sm_request -#define tsip_transac_nist_Proceeding_sm_send_1xx tsip_transac_nistState_sm_send_1xx -#define tsip_transac_nist_Proceeding_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699 -#define tsip_transac_nist_Proceeding_sm_timerJ tsip_transac_nistState_sm_timerJ -#define tsip_transac_nist_Proceeding_sm_transportError tsip_transac_nistState_sm_transportError -#define tsip_transac_nist_Proceeding_Default tsip_transac_nistState_Default -#define tsip_transac_nist_Proceeding_Entry NULL -#define tsip_transac_nist_Proceeding_Exit NULL -#define tsip_transac_nist_Completed_sm_request tsip_transac_nistState_sm_request -#define tsip_transac_nist_Completed_sm_send_1xx tsip_transac_nistState_sm_send_1xx -#define tsip_transac_nist_Completed_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699 -#define tsip_transac_nist_Completed_sm_timerJ tsip_transac_nistState_sm_timerJ -#define tsip_transac_nist_Completed_sm_transportError tsip_transac_nistState_sm_transportError -#define tsip_transac_nist_Completed_Default tsip_transac_nistState_Default -#define tsip_transac_nist_Completed_Entry NULL -#define tsip_transac_nist_Completed_Exit NULL -#define tsip_transac_nist_Terminated_sm_request tsip_transac_nistState_sm_request -#define tsip_transac_nist_Terminated_sm_send_1xx tsip_transac_nistState_sm_send_1xx -#define tsip_transac_nist_Terminated_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699 -#define tsip_transac_nist_Terminated_sm_timerJ tsip_transac_nistState_sm_timerJ -#define tsip_transac_nist_Terminated_sm_transportError tsip_transac_nistState_sm_transportError -#define tsip_transac_nist_Terminated_Default tsip_transac_nistState_Default -#define tsip_transac_nist_Terminated_Entry NULL -#define tsip_transac_nist_Terminated_Exit NULL -#define tsip_transac_nist_DefaultState_sm_request tsip_transac_nistState_sm_request -#define tsip_transac_nist_DefaultState_sm_send_1xx tsip_transac_nistState_sm_send_1xx -#define tsip_transac_nist_DefaultState_sm_send_200_to_699 tsip_transac_nistState_sm_send_200_to_699 -#define tsip_transac_nist_DefaultState_sm_timerJ tsip_transac_nistState_sm_timerJ -#define tsip_transac_nist_DefaultState_sm_transportError tsip_transac_nistState_sm_transportError - -#undef tsip_transac_nist_Started_sm_transportError -#define tsip_transac_nist_Started_sm_transportError tsip_transac_nist_DefaultState_sm_transportError -#undef tsip_transac_nist_Trying_sm_transportError -#define tsip_transac_nist_Trying_sm_transportError tsip_transac_nist_DefaultState_sm_transportError -#undef tsip_transac_nist_Proceeding_sm_transportError -#define tsip_transac_nist_Proceeding_sm_transportError tsip_transac_nist_DefaultState_sm_transportError -#undef tsip_transac_nist_Completed_sm_transportError -#define tsip_transac_nist_Completed_sm_transportError tsip_transac_nist_DefaultState_sm_transportError -#undef tsip_transac_nist_Terminated_sm_transportError -#define tsip_transac_nist_Terminated_sm_transportError tsip_transac_nist_DefaultState_sm_transportError -#undef tsip_transac_nist_DefaultState_sm_transportError -static void tsip_transac_nist_DefaultState_sm_transportError(struct tsip_transac_nistContext *fsm) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nist_Any_2_Terminated_X_transportError(ctxt); - setState(fsm, &tsip_transac_nist_Terminated); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nist_Started_Default -#define tsip_transac_nist_Started_Default tsip_transac_nist_DefaultState_Default -#undef tsip_transac_nist_Trying_Default -#define tsip_transac_nist_Trying_Default tsip_transac_nist_DefaultState_Default -#undef tsip_transac_nist_Proceeding_Default -#define tsip_transac_nist_Proceeding_Default tsip_transac_nist_DefaultState_Default -#undef tsip_transac_nist_Completed_Default -#define tsip_transac_nist_Completed_Default tsip_transac_nist_DefaultState_Default -#undef tsip_transac_nist_Terminated_Default -#define tsip_transac_nist_Terminated_Default tsip_transac_nist_DefaultState_Default -#undef tsip_transac_nist_DefaultState_Default -static void tsip_transac_nist_DefaultState_Default(struct tsip_transac_nistContext *fsm) -{ - -} - -#undef tsip_transac_nist_Started_sm_request -static void tsip_transac_nist_Started_sm_request(struct tsip_transac_nistContext *fsm, const tsip_request_t* request) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nist_Started_2_Trying_X_request(ctxt, request); - setState(fsm, &tsip_transac_nist_Trying); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nistState tsip_transac_nist_Started = { POPULATE_STATE(tsip_transac_nist_Started), "tsip_transac_nist_Started", 0 }; - -#undef tsip_transac_nist_Trying_sm_send_1xx -static void tsip_transac_nist_Trying_sm_send_1xx(struct tsip_transac_nistContext *fsm, const tsip_response_t* response) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(ctxt, response); - setState(fsm, &tsip_transac_nist_Proceeding); - ENTRY_STATE(getState(fsm)); -} - -#undef tsip_transac_nist_Trying_sm_send_200_to_699 -static void tsip_transac_nist_Trying_sm_send_200_to_699(struct tsip_transac_nistContext *fsm, const tsip_response_t* response) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(ctxt, response); - setState(fsm, &tsip_transac_nist_Completed); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nistState tsip_transac_nist_Trying = { POPULATE_STATE(tsip_transac_nist_Trying), "tsip_transac_nist_Trying", 1 }; - -#undef tsip_transac_nist_Proceeding_sm_request -static void tsip_transac_nist_Proceeding_sm_request(struct tsip_transac_nistContext *fsm, const tsip_request_t* request) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - const struct tsip_transac_nistState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_transac_nist_Proceeding_2_Proceeding_X_request(ctxt, request); - setState(fsm, EndStateName); -} - -#undef tsip_transac_nist_Proceeding_sm_send_1xx -static void tsip_transac_nist_Proceeding_sm_send_1xx(struct tsip_transac_nistContext *fsm, const tsip_response_t* response) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - const struct tsip_transac_nistState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(ctxt, response); - setState(fsm, EndStateName); -} - -#undef tsip_transac_nist_Proceeding_sm_send_200_to_699 -static void tsip_transac_nist_Proceeding_sm_send_200_to_699(struct tsip_transac_nistContext *fsm, const tsip_response_t* response) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(ctxt, response); - setState(fsm, &tsip_transac_nist_Completed); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nistState tsip_transac_nist_Proceeding = { POPULATE_STATE(tsip_transac_nist_Proceeding), "tsip_transac_nist_Proceeding", 2 }; - -#undef tsip_transac_nist_Completed_sm_request -static void tsip_transac_nist_Completed_sm_request(struct tsip_transac_nistContext *fsm, const tsip_request_t* request) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - const struct tsip_transac_nistState* EndStateName = getState(fsm); - - clearState(fsm); - tsip_transac_nist_Completed_2_Completed_X_request(ctxt, request); - setState(fsm, EndStateName); -} - -#undef tsip_transac_nist_Completed_sm_timerJ -static void tsip_transac_nist_Completed_sm_timerJ(struct tsip_transac_nistContext *fsm) -{ - struct tsip_transac_nist* ctxt = getOwner(fsm); - - EXIT_STATE(getState(fsm)); - clearState(fsm); - tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(ctxt); - setState(fsm, &tsip_transac_nist_Terminated); - ENTRY_STATE(getState(fsm)); -} - -const struct tsip_transac_nistState tsip_transac_nist_Completed = { POPULATE_STATE(tsip_transac_nist_Completed), "tsip_transac_nist_Completed", 3 }; - -#undef tsip_transac_nist_Terminated_Entry -void tsip_transac_nist_Terminated_Entry(struct tsip_transac_nistContext *fsm) -{ - struct tsip_transac_nist *ctxt = getOwner(fsm); - - tsip_transac_nist_OnTerminated(ctxt); -} - -const struct tsip_transac_nistState tsip_transac_nist_Terminated = { POPULATE_STATE(tsip_transac_nist_Terminated), "tsip_transac_nist_Terminated", 4 }; - -void tsip_transac_nistContext_Init(struct tsip_transac_nistContext* fsm, struct tsip_transac_nist* owner) -{ - FSM_INIT(fsm, &tsip_transac_nist_Started); - fsm->_owner = owner; -} - -void tsip_transac_nistContext_EnterStartState(struct tsip_transac_nistContext* fsm) -{ - ENTRY_STATE(getState(fsm)); -} - -void tsip_transac_nistContext_sm_request(struct tsip_transac_nistContext* fsm, const tsip_request_t* request) -{ - const struct tsip_transac_nistState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_request"); - state->sm_request(fsm, request); - setTransition(fsm, NULL); -} - -void tsip_transac_nistContext_sm_send_1xx(struct tsip_transac_nistContext* fsm, const tsip_response_t* response) -{ - const struct tsip_transac_nistState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_send_1xx"); - state->sm_send_1xx(fsm, response); - setTransition(fsm, NULL); -} - -void tsip_transac_nistContext_sm_send_200_to_699(struct tsip_transac_nistContext* fsm, const tsip_response_t* response) -{ - const struct tsip_transac_nistState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_send_200_to_699"); - state->sm_send_200_to_699(fsm, response); - setTransition(fsm, NULL); -} - -void tsip_transac_nistContext_sm_timerJ(struct tsip_transac_nistContext* fsm) -{ - const struct tsip_transac_nistState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_timerJ"); - state->sm_timerJ(fsm); - setTransition(fsm, NULL); -} - -void tsip_transac_nistContext_sm_transportError(struct tsip_transac_nistContext* fsm) -{ - const struct tsip_transac_nistState* state = getState(fsm); - - assert(state != NULL); - setTransition(fsm, "sm_transportError"); - state->sm_transportError(fsm); - setTransition(fsm, NULL); -} - -/* - * Local variables: - * buffer-read-only: t - * End: - */ diff --git a/trunk/tinySIP/src/transactions/tsip_transac.c b/trunk/tinySIP/src/transactions/tsip_transac.c index f7cd82cc..b214f7f1 100644 --- a/trunk/tinySIP/src/transactions/tsip_transac.c +++ b/trunk/tinySIP/src/transactions/tsip_transac.c @@ -42,8 +42,6 @@ int tsip_transac_init(tsip_transac_t *self, const tsip_stack_handle_t * stack, t { if(self && !self->initialized) { - tsk_safeobj_init(self); - self->stack = stack; self->timer_mgr = tsip_stack_get_timer_mgr(stack); self->type = type; @@ -67,8 +65,6 @@ int tsip_transac_deinit(tsip_transac_t *self) TSK_FREE(self->cseq_method); TSK_FREE(self->callid); - tsk_safeobj_deinit(self); - self->initialized = 0; return 0; @@ -125,7 +121,7 @@ int tsip_transac_cmp(const tsip_transac_t *t1, const tsip_transac_t *t2) return -1; } -int tsip_transac_remove_callback(const tsip_transac_t* self, tsk_timer_id_t timer_id) +int tsip_transac_remove(const tsip_transac_t* self) { return tsip_transac_layer_remove(TSIP_STACK(self->stack)->layer_transac, TSIP_TRANSAC(self)); } diff --git a/trunk/tinySIP/src/transactions/tsip_transac_ict.c b/trunk/tinySIP/src/transactions/tsip_transac_ict.c index b569c1cc..73e1ff50 100644 --- a/trunk/tinySIP/src/transactions/tsip_transac_ict.c +++ b/trunk/tinySIP/src/transactions/tsip_transac_ict.c @@ -29,7 +29,7 @@ */ #include "tinysip/transactions/tsip_transac_ict.h" -void tsip_transac_ict_init(tsip_transac_ict_t *self) +int tsip_transac_ict_init(tsip_transac_ict_t *self) { - tsip_transac_ictContext_Init(&self->_fsm, self); + return 0; } diff --git a/trunk/tinySIP/src/transactions/tsip_transac_ist.c b/trunk/tinySIP/src/transactions/tsip_transac_ist.c index e9c861ee..d8cf249b 100644 --- a/trunk/tinySIP/src/transactions/tsip_transac_ist.c +++ b/trunk/tinySIP/src/transactions/tsip_transac_ist.c @@ -29,7 +29,7 @@ */ #include "tinysip/transactions/tsip_transac_ist.h" -void tsip_transac_ist_init(tsip_transac_ist_t *self) +int tsip_transac_ist_init(tsip_transac_ist_t *self) { - tsip_transac_istContext_Init(&self->_fsm, self); + return 0; } diff --git a/trunk/tinySIP/src/transactions/tsip_transac_nict.c b/trunk/tinySIP/src/transactions/tsip_transac_nict.c index 00410920..e441859f 100644 --- a/trunk/tinySIP/src/transactions/tsip_transac_nict.c +++ b/trunk/tinySIP/src/transactions/tsip_transac_nict.c @@ -79,6 +79,53 @@ #define TRANSAC_NICT_TIMER_SCHEDULE(TX) TRANSAC_TIMER_SCHEDULE(nict, TX) +/* ======================== internal functions ======================== */ +int tsip_transac_nict_init(tsip_transac_nict_t *self); +int tsip_transac_nict_OnTerminated(tsip_transac_nict_t *self); + +/* ======================== transitions ======================== */ +int tsip_transac_nict_Started_2_Trying_X_send(va_list *app); +int tsip_transac_nict_Trying_2_Trying_X_timerE(va_list *app); +int tsip_transac_nict_Trying_2_Terminated_X_timerF(va_list *app); +int tsip_transac_nict_Trying_2_Terminated_X_transportError(va_list *app); +int tsip_transac_nict_Trying_2_Proceedding_X_1xx(va_list *app); +int tsip_transac_nict_Trying_2_Completed_X_200_to_699(va_list *app); +int tsip_transac_nict_Proceeding_2_Proceeding_X_timerE(va_list *app); +int tsip_transac_nict_Proceeding_2_Terminated_X_timerF(va_list *app); +int tsip_transac_nict_Proceeding_2_Terminated_X_transportError(va_list *app); +int tsip_transac_nict_Proceeding_2_Proceeding_X_1xx(va_list *app); +int tsip_transac_nict_Proceeding_2_Completed_X_200_to_699(va_list *app); +int tsip_transac_nict_Completed_2_Terminated_X_timerK(va_list *app); +int tsip_transac_nict_Any_2_Terminated_X_transportError(va_list *app); +int tsip_transac_nict_Any_2_Terminated_X_Error(va_list *app); + +/* ======================== conds ======================== */ + +/* ======================== actions ======================== */ +typedef enum _fsm_action_e +{ + _fsm_action_send, + _fsm_action_timerE, + _fsm_action_timerF, + _fsm_action_timerK, + _fsm_action_1xx, + _fsm_action_200_to_699, + _fsm_action_transporterror, + _fsm_action_error, +} +_fsm_action_t; + +/* ======================== states ======================== */ +typedef enum _fsm_state_e +{ + _fsm_state_Started, + _fsm_state_Trying, + _fsm_state_Proceeding, + _fsm_state_Completed, + _fsm_state_Terminated +} +_fsm_state_t; + /** * @fn int tsip_transac_nict_event_callback(const void *arg, tsip_transac_event_type_t type, @@ -97,8 +144,8 @@ * @return Zero if succeed and no-zero error code otherwise. **/ int tsip_transac_nict_event_callback(const tsip_transac_nict_t *self, tsip_transac_event_type_t type, const tsip_message_t *msg) -{ - TSIP_TRANSAC_SYNC_BEGIN(self); +{ + int ret = 0; switch(type) { @@ -108,11 +155,11 @@ int tsip_transac_nict_event_callback(const tsip_transac_nict_t *self, tsip_trans { if(TSIP_RESPONSE_IS_1XX(msg)) { - tsip_transac_nictContext_sm_1xx(&TSIP_TRANSAC_NICT(self)->_fsm, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_1xx, self, msg, self, msg); } else if(TSIP_RESPONSE_IS_23456(msg)) { - tsip_transac_nictContext_sm_200_to_699(&TSIP_TRANSAC_NICT(self)->_fsm, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_200_to_699, self, msg, self, msg); } else { @@ -123,34 +170,24 @@ int tsip_transac_nict_event_callback(const tsip_transac_nict_t *self, tsip_trans } case tsip_transac_canceled: - { - break; - } - case tsip_transac_terminated: - { - break; - } - case tsip_transac_timedout: - { - break; - } + break; case tsip_transac_error: { + ret = tsk_fsm_act(self->fsm, _fsm_action_error, self, msg, self, msg); break; } case tsip_transac_transport_error: { + ret = tsk_fsm_act(self->fsm, _fsm_action_transporterror, self, msg, self, msg); break; } } - TSIP_TRANSAC_SYNC_END(self); - - return 0; + return ret; } int tsip_transac_nict_timer_callback(const tsip_transac_nict_t* self, tsk_timer_id_t timer_id) @@ -159,32 +196,25 @@ int tsip_transac_nict_timer_callback(const tsip_transac_nict_t* self, tsk_timer_ if(self) { - TSIP_TRANSAC_SYNC_BEGIN(self); - if(timer_id == self->timerE.id) { - tsip_transac_nictContext_sm_timerE(&TSIP_TRANSAC_NICT(self)->_fsm); - ret = 0; + ret = tsk_fsm_act(self->fsm, _fsm_action_timerE, self, TSK_NULL, self, TSK_NULL); } else if(timer_id == self->timerF.id) { - tsip_transac_nictContext_sm_timerF(&TSIP_TRANSAC_NICT(self)->_fsm); - ret = 0; + ret = tsk_fsm_act(self->fsm, _fsm_action_timerF, self, TSK_NULL, self, TSK_NULL); } else if(timer_id == self->timerK.id) { - tsip_transac_nictContext_sm_timerK(&TSIP_TRANSAC_NICT(self)->_fsm); - ret = 0; + ret = tsk_fsm_act(self->fsm, _fsm_action_timerK, self, TSK_NULL, self, TSK_NULL); } - - TSIP_TRANSAC_SYNC_END(self); } return ret; } /** - * @fn void tsip_transac_nict_init(tsip_transac_nict_t *self) + * @fn int tsip_transac_nict_init(tsip_transac_nict_t *self) * * @brief Initializes the transaction. * @@ -193,20 +223,72 @@ int tsip_transac_nict_timer_callback(const tsip_transac_nict_t* self, tsk_timer_ * * @param [in,out] self The transaction to initialize. **/ -void tsip_transac_nict_init(tsip_transac_nict_t *self) +int tsip_transac_nict_init(tsip_transac_nict_t *self) { - /* Initialize the state machine. - */ - tsip_transac_nictContext_Init(&self->_fsm, self); + /* Initialize the state machine. */ + tsk_fsm_set(self->fsm, + + /*======================= + * === Started === + */ + // Started -> (Send) -> Trying + TSK_FSM_ADD_ALWAYS(_fsm_state_Started, _fsm_action_send, _fsm_state_Trying, tsip_transac_nict_Started_2_Trying_X_send, "tsip_transac_nict_Started_2_Trying_X_send"), + // Started -> (Any) -> Started + TSK_FSM_ADD_ALWAYS_NOTHING(_fsm_state_Started, "tsip_transac_nict_Started_2_Started_X_any"), + + + /*======================= + * === Trying === + */ + // Trying -> (timerE) -> Trying + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_timerE, _fsm_state_Trying, tsip_transac_nict_Trying_2_Trying_X_timerE, "tsip_transac_nict_Trying_2_Trying_X_timerE"), + // Trying -> (timerF) -> Trying + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_timerF, _fsm_state_Terminated, tsip_transac_nict_Trying_2_Terminated_X_timerF, "tsip_transac_nict_Trying_2_Terminated_X_timerF"), + // Trying -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_transporterror, _fsm_state_Terminated, tsip_transac_nict_Trying_2_Terminated_X_transportError, "tsip_transac_nict_Trying_2_Terminated_X_transportError"), + // Trying -> (1xx) -> Proceeding + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_1xx, _fsm_state_Proceeding, tsip_transac_nict_Trying_2_Proceedding_X_1xx, "tsip_transac_nict_Trying_2_Proceedding_X_1xx"), + // Trying -> (200 to 699) -> Completed + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_200_to_699, _fsm_state_Completed, tsip_transac_nict_Trying_2_Completed_X_200_to_699, "tsip_transac_nict_Trying_2_Completed_X_200_to_699"), + + + /*======================= + * === Proceeding === + */ + // Proceeding -> (timerE) -> Proceeding + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_timerE, _fsm_state_Proceeding, tsip_transac_nict_Proceeding_2_Proceeding_X_timerE, "tsip_transac_nict_Proceeding_2_Proceeding_X_timerE"), + // Proceeding -> (timerF) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_timerF, _fsm_state_Terminated, tsip_transac_nict_Proceeding_2_Terminated_X_timerF, "tsip_transac_nict_Proceeding_2_Terminated_X_timerF"), + // Proceeding -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_transporterror, _fsm_state_Terminated, tsip_transac_nict_Proceeding_2_Terminated_X_transportError, "tsip_transac_nict_Proceeding_2_Terminated_X_transportError"), + // Proceeding -> (1xx) -> Proceeding + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_1xx, _fsm_state_Proceeding, tsip_transac_nict_Proceeding_2_Proceeding_X_1xx, "tsip_transac_nict_Proceeding_2_Proceeding_X_1xx"), + // Proceeding -> (200 to 699) -> Completed + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_200_to_699, _fsm_state_Completed, tsip_transac_nict_Proceeding_2_Completed_X_200_to_699, "tsip_transac_nict_Proceeding_2_Completed_X_200_to_699"), + + + /*======================= + * === Completed === + */ + // Completed -> (timer K) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Completed, _fsm_action_timerK, _fsm_state_Terminated, tsip_transac_nict_Completed_2_Terminated_X_timerK, "tsip_transac_nict_Completed_2_Terminated_X_timerK"), + + + /*======================= + * === Any === + */ + // Any -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_transac_nict_Any_2_Terminated_X_transportError, "tsip_transac_nict_Any_2_Terminated_X_transportError"), + // Any -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_error, _fsm_state_Terminated, tsip_transac_nict_Any_2_Terminated_X_Error, "tsip_transac_nict_Any_2_Terminated_X_Error"), + + + TSK_FSM_ADD_NULL()); /* Set callback function to call when new messages arrive or errors happen in the transport layer. */ TSIP_TRANSAC(self)->callback = TSIP_TRANSAC_EVENT_CALLBACK(tsip_transac_nict_event_callback); - -#if defined(_DEBUG) || defined(DEBUG) - setDebugFlag(&(self->_fsm), DEBUG_STATE_MACHINE); -#endif self->timerE.id = TSK_INVALID_TIMER_ID; self->timerF.id = TSK_INVALID_TIMER_ID; @@ -215,6 +297,8 @@ void tsip_transac_nict_init(tsip_transac_nict_t *self) self->timerE.timeout = TSIP_TIMER_GET(E); self->timerF.timeout = TSIP_TIMER_GET(F); self->timerK.timeout = TSIP_TRANSAC(self)->reliable ? 0 : TSIP_TIMER_GET(K); /* RFC 3261 - 17.1.2.2*/ + + return 0; } @@ -236,9 +320,6 @@ int tsip_transac_nict_start(tsip_transac_nict_t *self, const tsip_request_t* req int ret = -1; if(self && request && !TSIP_TRANSAC(self)->running) { - /* Set state machine state to started */ - setState(&self->_fsm, &tsip_transac_nict_Started); - /* Add branch to the new client transaction. */ TSIP_TRANSAC(self)->branch = tsk_strdup(TSIP_TRANSAC_MAGIC_COOKIE); { @@ -249,9 +330,8 @@ int tsip_transac_nict_start(tsip_transac_nict_t *self, const tsip_request_t* req TSIP_TRANSAC(self)->running = 1; self->request = tsk_object_ref((void*)request); - tsip_transac_nictContext_sm_send(&self->_fsm); - ret = 0; + ret = tsk_fsm_act(self->fsm, _fsm_action_send, self, TSK_NULL, self, TSK_NULL); } return ret; } @@ -265,14 +345,16 @@ int tsip_transac_nict_start(tsip_transac_nict_t *self, const tsip_request_t* req -//======================================================== -// State Machine -// - +//-------------------------------------------------------- +// == STATE MACHINE BEGIN == +//-------------------------------------------------------- /* Started -> (send) -> Trying */ -void tsip_transac_nict_Started_2_Trying_X_send(tsip_transac_nict_t *self) +int tsip_transac_nict_Started_2_Trying_X_send(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + //== Send the request tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, TSIP_MESSAGE(self->request)); @@ -291,12 +373,17 @@ void tsip_transac_nict_Started_2_Trying_X_send(tsip_transac_nict_t *self) { TRANSAC_NICT_TIMER_SCHEDULE(E); } + + return 0; } /* Trying -> (Timer E) -> Trying */ -void tsip_transac_nict_Trying_2_Trying_X_timerE(tsip_transac_nict_t *self) +int tsip_transac_nict_Trying_2_Trying_X_timerE(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + //== Send the request tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, self->request); @@ -309,12 +396,17 @@ void tsip_transac_nict_Trying_2_Trying_X_timerE(tsip_transac_nict_t *self) */ self->timerE.timeout = TSK_MIN(self->timerE.timeout*2, TSIP_TIMER_GET(T2)); TRANSAC_NICT_TIMER_SCHEDULE(E); + + return 0; } /* Trying -> (Timer F) -> Terminated */ -void tsip_transac_nict_Trying_2_Terminated_X_timerF(tsip_transac_nict_t *self) +int tsip_transac_nict_Trying_2_Terminated_X_timerF(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* RFC 3261 - 17.1.2.2 If Timer F fires while the client transaction is still in the "Trying" state, the client transaction SHOULD inform the TU about the @@ -324,21 +416,31 @@ void tsip_transac_nict_Trying_2_Terminated_X_timerF(tsip_transac_nict_t *self) /* Timers will be canceled by "tsip_transac_nict_OnTerminated" */ TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, 0); + + return 0; } /* Trying -> (Transport Error) -> Terminated */ -void tsip_transac_nict_Trying_2_Terminated_X_transportError(tsip_transac_nict_t *self) +int tsip_transac_nict_Trying_2_Terminated_X_transportError(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* Timers will be canceled by "tsip_transac_nict_OnTerminated" */ TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, 0); + + return 0; } /* Trying -> (1xx) -> Proceeding */ -void tsip_transac_nict_Trying_2_Proceedding_X_1xx(tsip_transac_nict_t *self, const tsip_message_t* msg) +int tsip_transac_nict_Trying_2_Proceedding_X_1xx(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* RFC 3261 - 17.1.2.2 If a provisional response is received while in the "Trying" state, the response MUST be passed to the TU, and then the client transaction @@ -352,13 +454,18 @@ void tsip_transac_nict_Trying_2_Proceedding_X_1xx(tsip_transac_nict_t *self, con } TRANSAC_TIMER_CANCEL(F); - TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, msg); + TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, message); + + return 0; } /* Trying -> (200-699) -> Completed */ -void tsip_transac_nict_Trying_2_Completed_X_200_to_699(tsip_transac_nict_t *self, const tsip_message_t* msg) +int tsip_transac_nict_Trying_2_Completed_X_200_to_699(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* RFC 3261 - 17.1.2.2 If a final response (status codes 200-699) is received while in the "Trying" state, the response MUST be passed to the TU, and the client transaction MUST transition @@ -373,22 +480,21 @@ void tsip_transac_nict_Trying_2_Completed_X_200_to_699(tsip_transac_nict_t *self } TRANSAC_TIMER_CANCEL(F); - TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, msg); + TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, message); /* SCHEDULE timer K */ TRANSAC_NICT_TIMER_SCHEDULE(K); -} -/* Trying -> (unknown) -> Trying -*/ -void tsip_transac_nict_Trying_2_Trying_X_unknown(tsip_transac_nict_t *self) -{ + return 0; } /* Proceeding -> (TimerE) -> Proceeding */ -void tsip_transac_nict_Proceeding_2_Proceeding_X_timerE(tsip_transac_nict_t *self) +int tsip_transac_nict_Proceeding_2_Proceeding_X_timerE(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + //== Send the request tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, self->request); @@ -399,12 +505,17 @@ void tsip_transac_nict_Proceeding_2_Proceeding_X_timerE(tsip_transac_nict_t *sel */ self->timerE.timeout = TSK_MIN(self->timerE.timeout*2, TSIP_TIMER_GET(T2)); TRANSAC_NICT_TIMER_SCHEDULE(E); + + return 0; } /* Proceeding -> (Timer F) -> Proceeding */ -void tsip_transac_nict_Proceeding_2_Terminated_X_timerF(tsip_transac_nict_t *self) +int tsip_transac_nict_Proceeding_2_Terminated_X_timerF(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* RFC 3261 - 17.1.2.2 If timer F fires while in the "Proceeding" state, the TU MUST be informed of a timeout, and the client transaction MUST transition to the terminated state. @@ -413,31 +524,46 @@ void tsip_transac_nict_Proceeding_2_Terminated_X_timerF(tsip_transac_nict_t *sel /* Timers will be canceled by "tsip_transac_nict_OnTerminated" */ TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, 0); + + return 0; } /* Proceeding -> (Transport error) -> Terminated */ -void tsip_transac_nict_Proceeding_2_Terminated_X_transportError(tsip_transac_nict_t *self) +int tsip_transac_nict_Proceeding_2_Terminated_X_transportError(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* Timers will be canceles by On */ TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, 0); + + return 0; } /* Proceeding -> (1xx) -> Proceeding */ -void tsip_transac_nict_Proceeding_2_Proceeding_X_1xx(tsip_transac_nict_t *self, const tsip_message_t* msg) +int tsip_transac_nict_Proceeding_2_Proceeding_X_1xx(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + if(!TSIP_TRANSAC(self)->reliable) { TRANSAC_TIMER_CANCEL(E); } - TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, msg); + TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, message); + + return 0; } /* Proceeding -> (200-699) -> Completed */ -void tsip_transac_nict_Proceeding_2_Completed_X_200_to_699(tsip_transac_nict_t *self, const tsip_message_t* msg) +int tsip_transac_nict_Proceeding_2_Completed_X_200_to_699(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* RFC 3261 - 17.1.2.2 If a final response (status codes 200-699) is received while in the "Proceeding" state, the response MUST be passed to the TU, and the @@ -461,16 +587,21 @@ void tsip_transac_nict_Proceeding_2_Completed_X_200_to_699(tsip_transac_nict_t * TRANSAC_TIMER_CANCEL(E); } - TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, msg); + TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, message); /* SCHEDULE timer K */ TRANSAC_NICT_TIMER_SCHEDULE(K); + + return 0; } /* Completed -> (Timer K) -> Terminated */ -void tsip_transac_nict_Completed_2_Terminated_X_timerK(tsip_transac_nict_t *self) +int tsip_transac_nict_Completed_2_Terminated_X_timerK(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* RFC 3261 - 17.1.2.2 If Timer K fires while in this state (Completed), the client transaction MUST transition to the "Terminated" state. @@ -483,22 +614,46 @@ void tsip_transac_nict_Completed_2_Terminated_X_timerK(tsip_transac_nict_t *self /* Timers will be canceled by "tsip_transac_nict_OnTerminated" */ //TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transac_ok, 0); + + return 0; } /* Any -> (Transport Error) -> Terminated */ -void tsip_transac_nict_Any_2_Terminated_X_transportError(tsip_transac_nict_t *self) +int tsip_transac_nict_Any_2_Terminated_X_transportError(va_list *app) { + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + /* Timers will be canceled by "tsip_transac_nict_OnTerminated" */ TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, 0); + + return 0; } +/* Any -> (Error) -> Terminated +*/ +int tsip_transac_nict_Any_2_Terminated_X_Error(va_list *app) +{ + tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *); + const tsip_message_t *message = va_arg(*app, const tsip_message_t *); + + return 0; +} + + + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// == STATE MACHINE END == +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + /*== TERMINATED */ -void tsip_transac_nict_OnTerminated(tsip_transac_nict_t *self) +int tsip_transac_nict_OnTerminated(tsip_transac_nict_t *self) { /* Cancel timers */ if(!TSIP_TRANSAC(self)->reliable) @@ -512,7 +667,8 @@ void tsip_transac_nict_OnTerminated(tsip_transac_nict_t *self) TSK_DEBUG_INFO("=== NICT terminated ==="); - TRANSAC_REMOVE_SCHEDULE(); + /* Remove (and destroy) the transaction from the layer. */ + return tsip_transac_remove(TSIP_TRANSAC(self)); } @@ -544,6 +700,11 @@ static void* tsip_transac_nict_create(void * self, va_list * app) const char *cseq_method = va_arg(*app, const char *); const char *callid = va_arg(*app, const char *); + /* create FSM */ + transac->fsm = TSK_FSM_CREATE(_fsm_state_Started, _fsm_state_Terminated); + transac->fsm->debug = DEBUG_STATE_MACHINE; + tsk_fsm_set_callback_terminated(transac->fsm, TSK_FSM_ONTERMINATED(tsip_transac_nict_OnTerminated), (const void*)transac); + /* Initialize base class */ tsip_transac_init(TSIP_TRANSAC(transac), stack, tsip_nict, reliable, cseq_value, cseq_method, callid); @@ -563,6 +724,9 @@ static void* tsip_transac_nict_destroy(void * self) /* DeInitialize base class */ tsip_transac_deinit(TSIP_TRANSAC(transac)); + + /* FSM */ + TSK_OBJECT_SAFE_FREE(transac->fsm); } return self; } diff --git a/trunk/tinySIP/src/transactions/tsip_transac_nist.c b/trunk/tinySIP/src/transactions/tsip_transac_nist.c index 78c0ee98..25bcd35b 100644 --- a/trunk/tinySIP/src/transactions/tsip_transac_nist.c +++ b/trunk/tinySIP/src/transactions/tsip_transac_nist.c @@ -79,12 +79,51 @@ #define TRANSAC_NIST_TIMER_SCHEDULE(TX) TRANSAC_TIMER_SCHEDULE(nist, TX) - +/* ======================== internal functions ======================== */ +int tsip_transac_nist_init(tsip_transac_nist_t *self); int tsip_transac_nist_handle_request(const tsip_transac_nist_t *self, const tsip_request_t* request); +int tsip_transac_nist_OnTerminated(tsip_transac_nist_t *self); + +/* ======================== transitions ======================== */ +int tsip_transac_nist_Started_2_Trying_X_request(va_list *app); +int tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(va_list *app); +int tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(va_list *app); +int tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(va_list *app); +int tsip_transac_nist_Proceeding_2_Proceeding_X_request(va_list *app); +int tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(va_list *app); +int tsip_transac_nist_Completed_2_Completed_X_request(va_list *app); +int tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(va_list *app); +int tsip_transac_nist_Any_2_Terminated_X_transportError(va_list *app); +int tsip_transac_nist_Any_2_Terminated_X_Error(va_list *app); + +/* ======================== conds ======================== */ + +/* ======================== actions ======================== */ +typedef enum _fsm_action_e +{ + _fsm_action_request, + _fsm_action_send_1xx, + _fsm_action_send_200_to_699, + _fsm_action_timerJ, + _fsm_action_transporterror, + _fsm_action_error, +} +_fsm_action_t; + +/* ======================== states ======================== */ +typedef enum _fsm_state_e +{ + _fsm_state_Started, + _fsm_state_Trying, + _fsm_state_Proceeding, + _fsm_state_Completed, + _fsm_state_Terminated +} +_fsm_state_t; int tsip_transac_nist_event_callback(const tsip_transac_nist_t *self, tsip_transac_event_type_t type, const tsip_message_t *msg) { - TSIP_TRANSAC_SYNC_BEGIN(self); + int ret = -1; switch(type) { @@ -92,7 +131,7 @@ int tsip_transac_nist_event_callback(const tsip_transac_nist_t *self, tsip_trans { if(msg && TSIP_MESSAGE_IS_REQUEST(msg)) { - tsip_transac_nist_handle_request(self, msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_request, self, msg, self, msg); } break; } @@ -103,45 +142,35 @@ int tsip_transac_nist_event_callback(const tsip_transac_nist_t *self, tsip_trans { if(TSIP_RESPONSE_IS_1XX(msg)) { - tsip_transac_nistContext_sm_send_1xx(&(TSIP_TRANSAC_NIST(self)->_fsm), msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_send_1xx, self, msg, self, msg); } else if(TSIP_RESPONSE_IS_23456(msg)) { - tsip_transac_nistContext_sm_send_200_to_699(&(TSIP_TRANSAC_NIST(self)->_fsm), msg); + ret = tsk_fsm_act(self->fsm, _fsm_action_send_200_to_699, self, msg, self, msg); } } break; } case tsip_transac_canceled: - { - break; - } - case tsip_transac_terminated: - { - break; - } - case tsip_transac_timedout: - { - break; - } + break; case tsip_transac_error: { + ret = tsk_fsm_act(self->fsm, _fsm_action_error, self, msg, self, msg); break; } case tsip_transac_transport_error: { + ret = tsk_fsm_act(self->fsm, _fsm_action_transporterror, self, msg, self, msg); break; } } - TSIP_TRANSAC_SYNC_END(self); - - return 0; + return ret; } int tsip_transac_nist_timer_callback(const tsip_transac_nist_t* self, tsk_timer_id_t timer_id) @@ -150,36 +179,78 @@ int tsip_transac_nist_timer_callback(const tsip_transac_nist_t* self, tsk_timer_ if(self) { - TSIP_TRANSAC_SYNC_BEGIN(self); - if(timer_id == self->timerJ.id) { - tsip_transac_nistContext_sm_timerJ(&(TSIP_TRANSAC_NIST(self)->_fsm)); - ret = 0; + ret = tsk_fsm_act(self->fsm, _fsm_action_timerJ, self, TSK_NULL, self, TSK_NULL); } - - TSIP_TRANSAC_SYNC_END(self); } return ret; } -void tsip_transac_nist_init(tsip_transac_nist_t *self) +int tsip_transac_nist_init(tsip_transac_nist_t *self) { /* Initialize the state machine. */ - tsip_transac_nistContext_Init(&self->_fsm, self); + tsk_fsm_set(self->fsm, + + /*======================= + * === Started === + */ + // Started -> (receive request) -> Trying + TSK_FSM_ADD_ALWAYS(_fsm_state_Started, _fsm_action_request, _fsm_state_Trying, tsip_transac_nist_Started_2_Trying_X_request, "tsip_transac_nist_Started_2_Trying_X_request"), + // Started -> (Any) -> Started + TSK_FSM_ADD_ALWAYS_NOTHING(_fsm_state_Started, "tsip_transac_nist_Started_2_Started_X_any"), + + + /*======================= + * === Trying === + */ + // Trying -> (send 1xx) -> Proceeding + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_send_1xx, _fsm_state_Proceeding, tsip_transac_nist_Trying_2_Proceeding_X_send_1xx, "tsip_transac_nist_Trying_2_Proceeding_X_send_1xx"), + // Trying -> (send 200 to 699) -> Completed + TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_send_200_to_699, _fsm_state_Completed, tsip_transac_nist_Trying_2_Completed_X_send_200_to_699, "tsip_transac_nist_Trying_2_Completed_X_send_200_to_699"), + + + /*======================= + * === Proceeding === + */ + // Proceeding -> (send 1xx) -> Proceeding + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_send_1xx, _fsm_state_Proceeding, tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx, "tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx"), + // Proceeding -> (send 200 to 699) -> Completed + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_send_200_to_699, _fsm_state_Completed, tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699, "tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699"), + // Proceeding -> (receive request) -> Proceeding + TSK_FSM_ADD_ALWAYS(_fsm_state_Proceeding, _fsm_action_request, _fsm_state_Proceeding, tsip_transac_nist_Proceeding_2_Proceeding_X_request, "tsip_transac_nist_Proceeding_2_Proceeding_X_request"), + + + /*======================= + * === Completed === + */ + // Completed -> (receive request) -> Completed + TSK_FSM_ADD_ALWAYS(_fsm_state_Completed, _fsm_action_request, _fsm_state_Completed, tsip_transac_nist_Completed_2_Completed_X_request, "tsip_transac_nist_Completed_2_Completed_X_request"), + // Completed -> (timer J) -> Terminated + TSK_FSM_ADD_ALWAYS(_fsm_state_Completed, _fsm_action_timerJ, _fsm_state_Terminated, tsip_transac_nist_Completed_2_Terminated_X_tirmerJ, "tsip_transac_nist_Completed_2_Terminated_X_tirmerJ"), + + + /*======================= + * === Any === + */ + // Any -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_transac_nist_Any_2_Terminated_X_transportError, "tsip_transac_nist_Any_2_Terminated_X_transportError"), + // Any -> (transport error) -> Terminated + TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_error, _fsm_state_Terminated, tsip_transac_nist_Any_2_Terminated_X_Error, "tsip_transac_nist_Any_2_Terminated_X_Error"), + + + TSK_FSM_ADD_NULL()); /* Set callback function to call when new messages arrive or errors happen in the transport layer. */ TSIP_TRANSAC(self)->callback = TSIP_TRANSAC_EVENT_CALLBACK(tsip_transac_nist_event_callback); -#if defined(_DEBUG) || defined(DEBUG) - setDebugFlag(&(self->_fsm), DEBUG_STATE_MACHINE); -#endif - self->timerJ.timeout = TSIP_TRANSAC(self)->reliable ? 0 : TSIP_TIMER_GET(J); /* RFC 3261 - 17.2.2*/ + + return 0; } int tsip_transac_nist_start(tsip_transac_nist_t *self, const tsip_request_t* request) @@ -198,18 +269,33 @@ int tsip_transac_nist_start(tsip_transac_nist_t *self, const tsip_request_t* req int tsip_transac_nist_handle_request(const tsip_transac_nist_t *self, const tsip_request_t* request) { - /* Alert the state machine */ - tsip_transac_nistContext_sm_request(&(TSIP_TRANSAC_NIST(self)->_fsm), request); - - /* Alert the dialog */ - return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, request); + int ret = -1; + if(!(ret = tsk_fsm_act(self->fsm, _fsm_action_request, self, TSK_NULL, self, TSK_NULL))){ + /* Alert the dialog */ + ret = TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_msg, request); + } + return ret; } + + + + + + + +//-------------------------------------------------------- +// == STATE MACHINE BEGIN == +//-------------------------------------------------------- + /* Started --> (INCOMING REQUEST) --> Trying */ -void tsip_transac_nist_Started_2_Trying_X_request(tsip_transac_nist_t *self, const tsip_request_t* request) +int tsip_transac_nist_Started_2_Trying_X_request(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 The state machine is initialized in the "Trying" state and is passed a request other than INVITE or ACK when initialized. This request is @@ -218,12 +304,17 @@ void tsip_transac_nist_Started_2_Trying_X_request(tsip_transac_nist_t *self, con matches the same server transaction, using the rules specified in Section 17.2.3. */ + + return 0; } /* Trying --> (1xx) --> Proceeding */ -void tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(tsip_transac_nist_t *self, const tsip_response_t* response) +int tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 While in the "Trying" state, if the TU passes a provisional response to the server transaction, the server transaction MUST enter the @@ -235,12 +326,17 @@ void tsip_transac_nist_Trying_2_Proceeding_X_send_1xx(tsip_transac_nist_t *self, /* Update last response */ TSK_OBJECT_SAFE_FREE(self->lastResponse); self->lastResponse = tsk_object_ref((void*)response); + + return 0; } /* Trying --> (200-699) --> Completed */ -void tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(tsip_transac_nist_t *self, const tsip_response_t* response) +int tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, response); /* RFC 3261 - 17.2.2 @@ -253,12 +349,17 @@ void tsip_transac_nist_Trying_2_Completed_X_send_200_to_699(tsip_transac_nist_t /* Update last response */ TSK_OBJECT_SAFE_FREE(self->lastResponse); self->lastResponse = tsk_object_ref((void*)response); + + return 0; } /* Proceeding --> (1xx) --> Proceeding */ -void tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(tsip_transac_nist_t *self, const tsip_response_t* response) +int tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 Any further provisional responses that are received from the TU while in the "Proceeding" state MUST be passed @@ -269,12 +370,17 @@ void tsip_transac_nist_Proceeding_2_Proceeding_X_send_1xx(tsip_transac_nist_t *s /* Update last response */ TSK_OBJECT_SAFE_FREE(self->lastResponse); self->lastResponse = tsk_object_ref((void*)response); + + return 0; } /* Proceeding -> (INCOMING REQUEST) -> Proceeding */ -void tsip_transac_nist_Proceeding_2_Proceeding_X_request(tsip_transac_nist_t *self, const tsip_request_t* request) +int tsip_transac_nist_Proceeding_2_Proceeding_X_request(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 If a retransmission of the request is received while in the "Proceeding" state, the most recently sent provisional response MUST be passed to the transport @@ -284,12 +390,17 @@ void tsip_transac_nist_Proceeding_2_Proceeding_X_request(tsip_transac_nist_t *se { tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, self->lastResponse); } + + return 0; } /* Proceeding --> (200-699) --> Completed */ -void tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(tsip_transac_nist_t *self, const tsip_response_t* response) +int tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 If the TU passes a final response (status codes 200-699) to the server while in the "Proceeding" state, the @@ -308,12 +419,17 @@ void tsip_transac_nist_Proceeding_2_Completed_X_send_200_to_699(tsip_transac_nis /* Update last response */ TSK_OBJECT_SAFE_FREE(self->lastResponse); self->lastResponse = tsk_object_ref((void*)response); + + return 0; } /* Completed --> (INCOMING REQUEST) --> Completed */ -void tsip_transac_nist_Completed_2_Completed_X_request(tsip_transac_nist_t *self, const tsip_request_t* request) +int tsip_transac_nist_Completed_2_Completed_X_request(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 While in the "Completed" state, the server transaction MUST pass the final response to the transport layer for retransmission whenever a retransmission of the request is received. @@ -322,12 +438,17 @@ void tsip_transac_nist_Completed_2_Completed_X_request(tsip_transac_nist_t *self { tsip_transac_send(TSIP_TRANSAC(self), TSIP_TRANSAC(self)->branch, self->lastResponse); } + + return 0; } /* Complete --> (Timer J) --> Terminated */ -void tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(tsip_transac_nist_t *self) +int tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(va_list *app) { + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + /* RFC 3261 - 17.2.2 The server transaction remains in this state (Completed) until Timer J fires, at which point it MUST transition to the "Terminated" state. @@ -336,19 +457,40 @@ void tsip_transac_nist_Completed_2_Terminated_X_tirmerJ(tsip_transac_nist_t *sel /* RFC 3261 - 17.2.2 THE SERVER TRANSACTION MUST BE DESTROYED THE INSTANT IT ENTERS THE "TERMINATED" STATE. */ + return 0; } /* Any --> (Transport error) --> Terminated */ -void tsip_transac_nist_Any_2_Terminated_X_transportError(tsip_transac_nist_t *self) +int tsip_transac_nist_Any_2_Terminated_X_transportError(va_list *app) { - + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + + return 0; } +/* Any --> (error) --> Terminated +*/ +int tsip_transac_nist_Any_2_Terminated_X_Error(va_list *app) +{ + tsip_transac_nist_t *self = va_arg(*app, tsip_transac_nist_t *); + const tsip_response_t *response = va_arg(*app, const tsip_response_t *); + + return 0; +} + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// == STATE MACHINE END == +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + + + /*== Callback function called when the state machine enter in the "terminated" state. */ -void tsip_transac_nist_OnTerminated(tsip_transac_nist_t *self) +int tsip_transac_nist_OnTerminated(tsip_transac_nist_t *self) { /* Cancel timers */ TRANSAC_TIMER_CANCEL(J); @@ -357,7 +499,8 @@ void tsip_transac_nist_OnTerminated(tsip_transac_nist_t *self) TSK_DEBUG_INFO("=== NIST terminated ==="); - TRANSAC_REMOVE_SCHEDULE(); + /* Remove (and destroy) the transaction from the layer. */ + return tsip_transac_remove(TSIP_TRANSAC(self)); } @@ -394,6 +537,11 @@ static void* tsip_transac_nist_create(void * self, va_list * app) const char *cseq_method = va_arg(*app, const char *); const char *callid = va_arg(*app, const char *); + /* create FSM */ + transac->fsm = TSK_FSM_CREATE(_fsm_state_Started, _fsm_state_Terminated); + transac->fsm->debug = DEBUG_STATE_MACHINE; + tsk_fsm_set_callback_terminated(transac->fsm, TSK_FSM_ONTERMINATED(tsip_transac_nist_OnTerminated), (const void*)transac); + /* Initialize base class */ tsip_transac_init(TSIP_TRANSAC(transac), stack, tsip_nist, reliable, cseq_value, cseq_method, callid); @@ -413,6 +561,9 @@ static void* tsip_transac_nist_destroy(void * self) /* DeInitialize base class */ tsip_transac_deinit(TSIP_TRANSAC(transac)); + + /* FSM */ + TSK_OBJECT_SAFE_FREE(transac->fsm); } return self; } diff --git a/trunk/tinySIP/test/test/test_stack.h b/trunk/tinySIP/test/test/test_stack.h index 86f8bd75..d6638750 100644 --- a/trunk/tinySIP/test/test/test_stack.h +++ b/trunk/tinySIP/test/test/test_stack.h @@ -92,7 +92,7 @@ int tsip_registration_callback(const tsip_register_event_t *sipevent) void test_stack() { - + /* tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback, TSIP_STACK_SET_DISPLAY_NAME("2233392625"), TSIP_STACK_SET_PUBLIC_IDENTITY("sip:2233392625@sip2sip.info"), @@ -108,7 +108,7 @@ void test_stack() TSIP_STACK_SET_MOBILITY("fixed"), TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"), TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"), - +*/ /* tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback, TSIP_STACK_SET_DISPLAY_NAME("Mamadou"), @@ -126,6 +126,22 @@ void test_stack() TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"), TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"), */ + tsip_stack_handle_t *stack = tsip_stack_create(test_stack_callback, + TSIP_STACK_SET_DISPLAY_NAME("Mamadou"), + TSIP_STACK_SET_PUBLIC_IDENTITY("sip:mamadou@ims.inexbee.com"), + TSIP_STACK_SET_PRIVATE_IDENTITY("mamadou@ims.inexbee.com"), + TSIP_STACK_SET_PASSWORD("mamadou"), + TSIP_STACK_SET_REALM("sip:ims.inexbee.com"), // FIXME: without sip: + TSIP_STACK_SET_LOCAL_IP(LOCAL_IP), + //TSIP_STACK_SET_DISCOVERY_NAPTR(1), + TSIP_STACK_SET_PROXY_CSCF("192.168.16.225", "udp", 0), + //TSIP_STACK_SET_PROXY_CSCF("192.168.0.15", "udp", 0), + TSIP_STACK_SET_PROXY_CSCF_PORT(4060), + TSIP_STACK_SET_SEC_AGREE_MECH("ipsec-3gpp"), + TSIP_STACK_SET_MOBILITY("fixed"), + TSIP_STACK_SET_DEVICE_ID("DD1289FA-C3D7-47bd-A40D-F1F1B2CC5FFC"), + TSIP_STACK_SET_NETINFO("ADSL;utran-cell-id-3gpp=00000000"), + TSIP_STACK_SET_NULL()); tsip_operation_handle_t *op = TSIP_OPERATION_CREATE(stack, @@ -148,9 +164,9 @@ void test_stack() { tsip_operation_handle_t *op2 = TSIP_OPERATION_CREATE(stack, TSIP_OPERATION_SET_PARAM("expires", "30"), - TSIP_OPERATION_SET_PARAM("package", "presence"), + TSIP_OPERATION_SET_PARAM("package", "reg"), TSIP_OPERATION_SET_PARAM("accept", "application/reginfo+xml"), - TSIP_OPERATION_SET_PARAM("to", "sip:2233392625@sip2sip.info"), + TSIP_OPERATION_SET_PARAM("to", "sip:mamadou@ims.inexbee.com"), TSIP_OPERATION_SET_NULL()); tsip_subscribe(stack, op2);