[PATCH] Adding tracing documentation in user manual

Vidushi Vashishth reachvidu at gmail.com
Tue Jun 5 20:44:45 UTC 2018


Sorry for the length of the email. I could not hide the noise created by
the images I added.
Also let me know your thoughts about the requirements of the function
tracing use case. Do you think the options considered as viable?

Thanks!
Vidushi

On Wed, Jun 6, 2018 at 2:09 AM, Vidushi Vashishth <reachvidu at gmail.com>
wrote:

> I am just sending a revised version with incorporations of your
> suggestions. I will create a fresh version 2 patch after everyone has
> reviewed.
> Sorry for the spelling mistakes earlier!
> ---
>  images/user/ctf-stream-packet.png | Bin 0 -> 21843 bytes
>  images/user/ctf-trace.png         | Bin 0 -> 16038 bytes
>  user/index.rst                    |   2 +
>  user/tracing/captureengine.rst    |  10 ++++
>  user/tracing/development.rst      |  12 +++++
>  user/tracing/index.rst            |  25 +++++++++
>  user/tracing/introduction.rst     |  97 +++++++++++++++++++++++++++++++++
>  user/tracing/tracelinker.rst      |  10 ++++
>  user/tracing/usecases.rst         | 109 ++++++++++++++++++++++++++++++
> ++++++++
>  9 files changed, 265 insertions(+)
>  create mode 100644 images/user/ctf-stream-packet.png
>  create mode 100644 images/user/ctf-trace.png
>  create mode 100644 user/tracing/captureengine.rst
>  create mode 100644 user/tracing/development.rst
>  create mode 100644 user/tracing/index.rst
>  create mode 100644 user/tracing/introduction.rst
>  create mode 100644 user/tracing/tracelinker.rst
>  create mode 100644 user/tracing/usecases.rst
>
> diff --git a/images/user/ctf-stream-packet.png b/images/user/ctf-stream-
> packet.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..
> 0c41fcfb015d5f7ad2afef0fcc09d07ea4a9b155
> GIT binary patch
> literal 21843
> zcmag_1yCMaumuW#1cJLKSdak02?T<>B{&3kcL^c5B{&3km*DR17Tn!ExJ!b){hf2}
> zz4ia~s$LcHF|%i8 at 9x#zYxQh`<Ygt$kY6H0AP_VuNl`@z<XJfQyo(4AetP9M8-rg+
> zc9QB25C{qm^cx0}ltKuBAj_GHh{(&E*?zHgFtfFLB_$&A%I>qRiMbWH!g(Q8$y8Zs
> z51;R5<x==#pm)qiTSYv?SBk<R-nfy}bmT~w9|FlU=kXLeu*AgRh<;@R!iI%;hvF$P
> zpavt)A#9Ong?-Ns3?8^!cgwb%X};MReyo}0-z~mKtr|sWM?{U2WK($Ojanc~inaE=
> zue*1Bi%HN2naU1=iCASs?(jef1G)9&<)x=+M`(q>I8UM=LfU1L+gXSMo-p=>6SZKx
> zePP<aM85xs=#2{zbPW^Eg$Rnnc&8>%D?u{gAbNv_2AdFhMu;Ab*UluwJM}iv4F;ka
> zLyiZN5ea#PV;m?7G2?+0kE#TVLDX0vxF#RFxgc|l5Edy_6G=#U9i)8(6QvS at hzem*
> z2=sdcfpdfC{i39FhWI8zaK+D6dC%xeF?Z>Jr4lQ78>qO%d^8am?GaQ}nMi3zqzLG7
> zIrN|DCkZljx+K1M>%)$*b}<BjWJKbD)m}U}kD!;1jBte2qU$p5x4}PA7#M6mZjTn(
> z2|^(2Up&Vj8JMeHdh@`0TR&#KK87>XLCJ8u2{Ea}5Uhb@>@BEX*g<V0mKo77Kfk at T
> zHTR)gSW|yM)#K5$Q at 369!Rn7E at BPiyTI&Xt&s%LD3Ao#}&Y?@`9OBU^BwvH2op6c!
> zI+Uk-l1YkgDT4+zI^0bKZ2K_Lq|l4EITS&{QEz%)PdpiItTNoe@~^&wlw0t_xJ5GN
> zYa7B|f26 at w`_jH~1A&}3*>+6PBEou`eP17SdO8t!kjQuq at ivi)vWGx)M5&mR2dV`6
> z5FrrJ3?I63A)?C;LWXvD;*RG_9VqvD9KOO--JQai!pKJ6#Gm!v6n_(@^&c)Lq0?iY
> z5+q at 7S1|LBwnJy?{8W$5XNU1uA2F?iw%G>>PUsgRjz0N9AdEq<8f6$FL89L+d50t%
> zb_mt0{y<y>ijR at +Bv}=Mm0x|5Bsu5%{ERC=OT00X=NIJdw|oC)3Dy{&N(H_t)Ebe7
> ze9o7?;#nwTMqgNy!tpbb$39oT<O}7<+#M at 2!&nIC7wKbZ|4oR%)@{YY)Y~Oo at ty%G
> z+HkOfq8PQP_hq?CF>F)NmEmZG6CAdWSUVC2oRjb?eNrJwHEA{3Im!H2#8m893rL(u
> zu)YeNG!)VKAFHVwvHo-u8oXr<P?Kb!oWTyqVa9X|6zS%q!VVI7OVbeXOse9i@&xvT
> z_=Jrj<sL&pGP~qU%IN+DBg;wzt{8?_^uPSJQn$Lc*tUqa$j>#AQw;>|f8Hu>&?*jC
> ze0Z^qxy`-}Z=CQ}=u>u*;&OhbGS<6r4dIf^TE#MjfP5Tw$0V-d at Ay(5b4s#eCtsQo
> znBAC{{r=L3wH!+-8$YHxF}Nr3JN`H9r4uTeKi>DgKvUWm$%F`mrZ1cb%Mzq>UrdI)
> z=u>9lWIagOO~gpF{iH@$OXrRkIe;AdA(lFph>lsgpfI;^r4Z%Q#iv2#@B$qrk5chZ
> zY)YF2NK<h|p9)ju50r?MObdAO0}4&^ZIuOnda6GJ!K-&kcgczTRLH2%-E8iCg<|-k
> z%9(-O60OMJ(dS(^b;a<!`&YWAga?wQ5Wd2KOfC_&4{WMciWe~^0tlN4_O~ftWRZ4h
> z^WrZ&gI91*-fX-f%4L^sU^UjVER2hfQ!A1zQYex*XyGV5%1g~{5o=Pv^FbHt`#_^b
> zBVigo@;r4{X<lhL4>=EChL8KIl&R1%hbXg2)TzxT?>Hf?RmVF`+BR>+rDgXou?O>m
> z@`Lr?yekP*HTWu2D)>dz5klUcclNftB+Pw_X9^<PU4kMx`my@)>%Nf<<Gk6^;y=VO
> zLd|=%HmNqPd#!u3so|-~sXxl>%N!>u$~5G@$>ovek?tEF8qOM?Nqm>g$2$9VH+eUC
> zHhHy9Ps3S*p*Fv^-dL(~OCwkPxVG8GPlHQ6N9~h_c9nQZYRT)Frjn*Sth@%<XxXB)
> z8Pl%vv)caJg1Q&w+jH=XrM1?z9{Q#R1g3R8rCrC-Ezus09zP!V5YPhV(ThklNIV^?
> zKjU(%aIYkdq#O%)^jya6F`KH5Vvf$SZPwxpzUekkRZ5<eFeNZ;aQJ=^7!vgH+aOas
> zKT|SM at A9vftq)(W?6ucjC$3VHtCBm9@)ygFIgZVb1D4W<*wf#nsk1qZb^Q`qQ`jCC
> zKuM2fv0N?oloOHjF|FC9WHw}uR4th;ugh^NywN`);J at booW9Aw$;-L&c12xxh_k)!
> zSKXjomu;G^->Qfg<&)8q>(e+S&-*ouDQu9BkdNlGyIWUx^0qJm?nUG4%K0Oq(2NEl
> zJfZM!CEvC?O32NA9Y&Op-|QxgM2?uF`^kI$o*6^X-_Z~0@<gTa3-D9*7YMTpRC_tj
> z8vo8|d`ZM%RrIfDoajojDXSb;8RLg{bo_-(7Q73bjqHsAy-X(RL(^)hYEo7oiMg2Q
> zN;zz-T37FnE&?`EH&8a+2ojioY1_GEj&xr7<>41FVKZ>Y2}%dbzK=N-!lcW`4}E=(
> z<McWV*`<@D)0BdFoMSw2PDG22RQ6nwPR2FrFtYib3snzW4#ReXFHJ#2voxCYax!-s
> ze$v-h)^GW^TUftGMMl^Q7m~|F*P8B|?wEWXEH?J5eC)9asbeOMMd-JziYR`r&WKzq
> zocmi at gLak<q0-b?)ue4WXn-rOD2;yjXsBvnF at iJYB>m|KyAyjosy4^}qbehb+D=Qc
> z1y?1ny~`r<Cf;*;e--#*-umELI_qh<q9fJ#QqLA at R~btmosNNT9W^kP2PmJAxBWa0
> zmS&H%<<ywfS8MeD`lk}{;{^qm;w}=z<9W@|E;(-#1=tR>B`(EO7Zi0j7>$}tnC$JW
> zFs5mu#}&r!#G~7w%`a4=t*TTXU0sVUGRF_oE;fCy6=}$B<E?Kt&g&l;<`Gc-seGyY
> zSDE8 at V!1|t_SR<nn8>a9n*DHkQM38xfxo|X at e|A^nQ4=0<2$LlsvCjQpu)Y|xI1g@
> z5?O2eqdwRP*arkk^xD~mscDi4K4r!58TtbW^ggoI$J7%iMl=qzPd`$6Hz at 5yUAFda
> zkXCO<(YP1BhPoB6BTSNgB{3yowh&G_PZCd7O1jfD&}@_&;vb*cUva&cSR}(pVdqtM
> z`Ea4!Z@#eiZ8F;Qd^9vQHr2zE>CckhVpgr&uHne41%~ZOBj%U&39+Y;U7lv15v}w3
> zFXxqu+c>KAs!3(sy4L$&_IV$pC*}H at Qks%V8?-DNj$K=7+)Qrvh|)MmmM>de&hVdR
> zrqj6imRl}dZEt#Ru2%7vJwMYtj0`r-JJB4MG|M&XUJ4!w&5JAtObci}F3p`Rd0DhO
> zWn7FeN!-BueII>{yb8w<c^;k^KIo6;e~|W`pNnfl;Pb=YeV)ju(I|Bq!DH6rU?~AU
> zv*+#f!R*L*!gyx<d3<!6wR_IPe*3|Tvc=xcUeeZnXEs)yOO?B$4yPq2l9TLJ47n}$
> zS6;MFW`8QKl*aPzqF+QuKf%E!T-+P7F)jkW`N~jIQ3e8WeGP$le}_Q+Jb~YP5QrlS
> z1hTIOfp8~4AOyBix;^3$$Olg;Q6XjLg~JvXJFPyCle<(jHbRE)9pc|8AjnjR!Oz4Z
> z^wg==6DXc*sBXk658yE_1{vJF5nHKeSd4v7o%*w~`9Mn{%yvLCisIs&VezDQMo~q|
> zQ+a?~TK$bu);S^*1p}5ZViW`}V$KBq6+BzQ(SyA#*(LE1D*Ryat!JS;WM^pa_~L*+
> zuWfg>?U>`ffA53>reuE<X^W<BYE^>3c?Ao?4EtL~<V7k39md(SVdD0Bg?U%zx#!XF
> zNy*lA)7)1F#C9Rbol=5Vk*gQU^Rb2qoQnbvY+*@$18HF`lA+B5f(--m>Y}gal1eWy
> zq$oI}&A0XkJ38=OZD|S}@)p9B7<Cq>SA8*s&k?Ks-eoMzLxMSv^63g+{tU|(dC>X(
> zcM_&2+d*<aP^Y&zz7MHKWVZ0*Y>p>Wcd`<n+!qce+Lb7^m0-#!@9!G^yV1YoybgVn
> z@^mDF at 8$Bn$P`D9K3(j^cK;H(dRie&HEC`}m)b?SYxwEzYwd at oHBm#VAYdu~WD_y4
> zK%PTBfjfKgIh6hUhtYy<*=6Ng%z_&CVi}vP=TX8{MB~rK&r&yYii>C)OLAF5%pZ@~
> zbruO~`DufM8$1U4v{-c-4RYp5vvs&{&8U4N4tw&yax)iT9Lx3_j%RpMJIVG at jl)6u
> zrbk_;M>guGDq4R&E*Fr-^O5&Wk&z#UeO$Fx9sRK at g>7Cx)fU|^$G at ZeWIK!0r!?Wz
> z{ZtZV#-EqAScrq}y0Psj+9FFX8YVUCBLC3#iSHysnFdX9_dt2jQ66e8ucnwC*5#W^
> z^DUzO+EtZ32UY(C+va<%!0RXu$t&8r<Pou2A}Y*q62-*Si)xQEzO(bWR}ai&(Ylop
> z-48#@2!s*I)sJ1Q#$4EaIZH(LAz>d<#}uyIvcB`sxp2tpbBq+Ka_>yJeDj^%E}vQ_
> ziRGmW@>k<wB`S)Q_RKPj4sZF1LzXwyc2l%RraD+5^053Ss3LoRwZfnQd;4{B-JRpJ
> zN+Ikno-ZVBc^1)z`z`@fCnu_tpP$v|#vPO=ov=!+k%mQz^9T1CEtFyUr7MPWN?s*~
> zT_;O>22jam|JsZxU9QI;x7j#*^X^FJ>ZQi?+g{7N&QdTC31;b4YMt)GGX4Cz{5ST@
> zBIsJU)?5zd$#x`^$v-0oZN|7dre3o`u&(m7XA|pS301u`3<CuvSNx55&|T^qD1+`_
> z8f?*Y6HsA%%DW^vo3D4(7S<XeXp5ySgBQi<bL{0pK;mVQmHHw&b>6Q-O)ji~<@K9=
> z^;hgQkFF>4$7i3M<J at uxu<b`G#Hy1;YbVp=^N&K_23<R8IqBrZsF+5X8~EG^ko!iU
> z8piRmF%9*Gk at PJkv^x|3AouOIQ^}(;h_meUXX{<<-=ax(lH4yA)tblZzo6u<>YCsx
> zDU^AMuO`mLY>LWSLCF8waiS#Z!T3at=bWvTRflLO_L_)ZK+;;?883WaCt*u%$RD?j
> zu-o#kkLBPE-dSDWP6OxeM~56)GYa2`6o5}P3er7VlK_!T;F4M4FLMU at r-&vr4uP^K
> zE(|s*4!r34U*G;BPt6F4O{d+(>JM?y+OOu$Il#9!=~SXMs20^yx#RsR6*D`SkjgOb
> zJ)hZZM1$}?=cM-IhEVrF5cy};CAtlUNKx&bw+$1XINLPcpYo=d<Rp#F;urRX3R0Oa
> zjp^q<1Lsksow;bMlY87Cni#%|mWsv{mP8Nk!%6sY5u(Sz^zn;XiM&7Tri;SMsm<9b
> zS&=Vmotik7`PSr}uduV(c=M3qRipm&Z}Yx(^nM$_%JXO4mx@}<^|LgIa^_cB at fVxh
> zuT47A6vOvgKAvHc_Sz4P<nsM|WX at yeRSB4W^2^Kr6fZ84R<o{U(ROzJoeH<dR>Aah
> z(~J1hGAEcL@$Rd%4-;u;3$1~Uq^g6=0sg$qsd;2Oaxv7viNsy67_nEF9P2;#QMvJT
> zV-|d*+0n>3sW(WW?@J6)dm9<96kpnm8*$G$6(&J?J?VC|v7N`9cPq_Qce`4^!xTp{
> z-e>o&yPrl!r{ZugSPA{XG34`aYpT4}Qu;hvkus{R6bN@)%gvw*ThS*CD)-jwMWXDq
> ziDl2-K{;L1vxToG6bnCyDd#bFSH|l4MXkwLt;o}94*7JG9IU#<I+4h!oVpE}UUhF?
> z6gT#CjU-}%cnIl9Fx<woHv}0Mk(>&akRlSXL=cf2{2A3Li32_8iy18O&oALK$$w6~
> z4RFcPsju$-C|fyUD!uFaP!Wbi?z=@tzkG4q2RSxid!;Ul=Pi))0*sdDHL;a=VB~;}
> z5+i<Io at DaM7c;6PLG||PiP4)L!jHbjX at yROqGQ63qDLen1ZJSAzL(a=18GHHyMsuB
> zb6v#GPs<=S<G5f(w4_z>UZ2Fa*w~-<zv?`=bz*-Gon7DIt~$gEJtHCa)r)UB(7ED<
> zb9IZ+vW9!fDn+0QmQnsQig at b)6s<Wyr3iMB|2;%Wo0fhuhD-Hh>;SsB4c34^ZV(v=
> zIyfZrzlRcGPCr3b;o^_U3j+STze~Fmgp~Fy-1jH8D+zS<#3o6vsCA#8o<MZqSY#a{
> zaNC!Szzw&kE_r)*D7;lOP<3&lkbgT;0Ru#jT at a?Xc~_oXA$^j at uGISHK~$!hyR7`1
> zkVoWp2lnUcCjSf-K1;|;f!J}@f5A}af8Uh^{Ly1biu3H0MjjuXIfLuh+y7Y|?=F?M
> z4a7 at YDdM&8f2+gmRE4>J<K1M2TnYEz-RgyJF+bdIu8!dvMgF%ud%v?fdFqjBa0u()
> zi7>Bmhxa=mv_ByMA9x1ryh8Cl;Kmk4>?iu|qD4pp!7UQ at jxfrcjRb+YA~?F)i3sD2
> z-#!XyM(-h#lBD=|jjCf8^>&`HYmBs2Wk`t_{~8JJl9ws047MI(On66`^u62XA8WcG
> z at P&tLQbL}dt!c79mx8o}LCZh7D=ER~>a+T1Yn$@^l}M5QK2Jw at baSHt*7)`>fCoFm
> zxX{0Am3SNQA21@<Y~DgI$L}KZJZZplSr0S0`}}(P+1fkE4aJX-H_naC^o{FGh7UR4
> zo^l=^ab{ShUO(L*D!lZ;jQR at J$4!vg&HKnDBlMqPC8FST5$q7#;gbw{y40ZHa{0k)
> z<w4*r at a)v(%C-_x{0TqdNL+gPa*~k#%H%DPd}W7!KZZvj93?yOe}wxwC4?Dro9E?u
> z{aZqqcLt{3yh2^S7PnoGeM}lf1>M`l5s|zOE7E+y_O$^W3M at p}hWio<D2zxuxQ=$z
> zXZ!+?sSusxa0U)~1{He0%`C>EK=^1%Y0YBMQ15Y4akHpSs3Sb}SzhW at Xy{j{!>omi
> z%H4!EWO&c07kZ{}K=j+yq+uE+SYrLLuE8>`p<yPVP_w}%%&YPO_3}Lv0(tzt$4^*`
> z?SIxBf#+R_S2VZC$QJ1hqt6^rriy(Db-%ilJa4XdL?2={AL at 5MHXGGW64C#xU&-DX
> z?2TJxEA{vv_9QBK|DJ_mvB3HZyOLe}IsV6ah&`0*9Ktr!cfT4WU6B6qGA(I;C3YeQ
> z1g2fBbN#@*+2KE&O2(x|EFvmN5yInGN6P(&)X1N{l4IVdB$T0AjWlJ)FaN=mJa1GC
> zRuW66+2#b_pJ)HwRLUZV_SwYN&l^^<W5R!i6&nq)3%Me$vUaKwe;X$inj74kZ9r}b
> z8<cRn;5f8tCct~01Mv>wEX&M3;QiYte){`bJHI49*ky%zqzxA0{N=7Rq3`Kz>Od+!
> zvo;I42Je&e-Ts}6xuHI#ewE+UuwU{l3kO$+{|CfO=OHTcc&yxD%+5&@Z_2rbfPF{Q
> zr5)=k;;h^j7owHczx+&T518P2;HFGg#p)qXXBSThhEBW*X=moEN2D*?r!zev-cG&Y
> z0~?C$)5SfDs;hl-B%@J1pIU?aoS*Sx$-J{X1M~Y$MwIDH1x>L at fvetus}Ln~LUN1%
> zJ_j^clK6n&D8*_{TM>y_KlSiAOfWeg=3_6^CQci1aER8&$uVDGziPl>z2qKqSp at cC
> zXI`<5w25;CMX-ODV0Tr>S}Znh<oHMOI3K&W_0 at rb!l9s;)SFWDtIeaL6T_R{;W;&>
> zqHP-A+?MuWgycHQXEHwzQqQtmT$1Tl3Ki7!dU}${I(77VdXqGyM{nO at 6p`Ae{gP`v
> z7X7mq-r{jpSMPkWKukWbT!p{#LI7%%B#Rk?n_f5QrE^<w+ at 5ZvhS4}?1*;hgR<PnH
> z((;1X!Ulg7CApEBWLWSW_R_SPl?V^&d98|c%aB+Tk27K1xBH$5Ut`CAEcVnN6)7iB
> z8yDdCwoJsiIeye6ub>z#T!iPRLQfY=lFy*hoX&VKWBF~bKpSHXoQ7Iw?}b3x!XIzy
> zQ~tJHa$vbh-Y*o|<j!QvttdKe6o=p(gw$#!?6Cq1>N95djm!jNyj_^~%TV2mv61+6
> z_aU%af@@yi+ at u<X&a;p^vdMv0k7bNyoxq*d#hT$|B<~U3d_Li10Puj>&FdkNJ7ny#
> z4vPv~+#9MRX0p=#((=*i+op-zwa#?6e=<~fdfF_Q-F2q$bE<GNgV^5O;{%isCZ`DA
> zjCt=E-}U@)Vz0Ogxj0z^F0mBZYkU6`Ms3zs|HKLfG>J9=?&xa7XX!vDthR!{O-tvq
> z!?JPUWZk)oh`8g+P-dIv-13mXMQQ4`U~FSV-Ixp2=PK@=qaq5k%!ilZc{&nLbBNGo
> zH?w)V-)#+^j@&{m3Plkx-X;J^2f>Yizix_`srr5(CSV6~K4ZREJ4vrlXAmhoWz+gy
> z2 at evm51*?zo8Eu?Ai`{C5R?l1bQ%651Hfb__24%*8K=y;BW{+`HN1G<V)!!ANzeD;
> z#djE~3|e=6{xGzpqFl>=BKRs*1OATx+#z8WP>{7hT6xh%%}-{vQi`OZk05x~yMR*c
> zd^|ZiR1nR|Ap@<C_}B{mWilfy-|BvQ41N9WsHNlUZLVJDIU*X{=Du+QMKr<aBlli)
> zRFDg9g%9HuQMucu32)7T4;QOXKcX^ucelJVSi9%zVN6|gWE3lhM_KANVe>#20Q)30
> zJl3$I;YH{r!#e<?3SUc0@;gENv$K9cBu8?mqr&lRfq#Wc7}9WUSi4Fd3ZCB>01t)O
> zwOgIUFubS5E^I#S8?mR`)5 at LMm1dcslcM}ikY>IYiNGpUxSwtO1>@N}xLi%2Wjn>Z
> zty^v4v*?tSn0;>DpT4aJ=CH682gP+3)o+7snt}OJ*B8kaGaCh|7-k~p4~CSt02pIn
> zkrH($-#~O0i9A3bXDx;YZY!^;;0KNe2S+m)HB*vPp<nWvL_`cCDt$s+e?u96+^_iC
> zQ5sF)K3sPLAh>H5op{P$hyKHdv+L=bc#rv%y0X^rxW8!5U=7f3h{-G;F#zOb at 9^y)
> zji*3v-31gE*^5r=%;~otkYIw79w*NdG?;^c>i8~8Q|9swO9XU_ZMTPe9sp#?g!I-F
> zgX`*g9S9ViXYq3P{AmkU5FPj3S&(0dVs!x0 at ehz70JE4nymtr9+P#68mCmSMw=KJn
> zR|ZaY`4p5JKPlkg&_GEbVtp1jE%bUOa>IVU0)&61P0P-o5Kg#d<*KhEQLF}?l23Dz
> z6ZX-aMY(bx-I+|t4<=(wUmb+^n<KN%^08xnGVxFcORYKC`*Td@&T5gM^_1%TXK(Ng
> zfAk>ZV;zB7c38-q5|@s0OytKaOyNssJ{;We7pf=J?akbQYt}dvLICr0`ntKkxV}rc
> z*HnCnXZ1^icv!-}J_k!&2fv`kekL3(E|VX@;8PJs1sixP1~`=o;YGr8Uz#5*rRW{<
> zghED1D}7ep;4}_{k**CmkNc&_2o}rOY-%gxhE?+z`JZYA<-9ZDlVHu78BiJqEjmcT
> zOrWxA^#3OLmlFZ%h$H$8-nWIgb%g4l0uH6cV!sT1$4UJ=IzM%>*>nC|Smk+l at b$$6
> zKkubo{!5I(rOE$Sz9(I1{&yS$dELIpR%N*PzswEr<-8ziB5#Nu!}_Ts_wlp;nOzFa
> z7DuNtwtt7H=6?h^VoUw>+IKw=X5|H2uBkMl#Ah$*X|uqL@>g(fLYU$rR8mB6tR$!H
> z1PP+=v8B!bd_YNI!B1QxC6>uV8!A`-Aa7>hZYEhOr6$Zqo8I`NvH%NwYM>uuG+9#f
> zVBTkL!EkuhPV<c1<wLtN#7P0KH$;V8kM7sO?$U=wl?A4jSvr>c^_w(U at 4#gRZZ8QU
> z4!tjhnAdM<tX{unN&4(%d1yzAxVlBvY(qd7lB at q#d<QRVb0wL!l;L|zF(I|Xano~=
> z4$S6bo_e-@@rD*p9T;<@KNWj3V#S4}f-dTB7~+<!5eP~+Ac7&QeJimM?)cArUiB{H
> z)bsKB(-&!CvZ!BNbJaza#@2pZtwC;1LrSO>SVD(*Syv2uMLG3;`xZqvH<-dgcwyMR
> zsK?%EK<^6!5BD%h%R&>zdI_&ZTU?&`a{|UNZLZynz0;zuLytwT_dvp at KkfAHQ}lN=
> zU6Y=|!p{lP4VJKN9o`qU!b>N~y#pS~*p+Wt5<_X3=zKf$+Ph;glsF_-_;*z%Y9_w!
> zHL1va`TKwp;*yfa+M%Hs6_3`dq4;et at lQ)&YdhSbagU2RteZNkyHAiy+iuEBp at zxG
> zi`hFNA3R4Nh!qx7km#=unM-@#4i-jYy#L;^piL$5c~GBSHzfOwfT=B^On;A^KV>Fw
> zUB`Wu_|Q6Jh>KtAgp+X0v_fw(G+j<gSOwFh3Tfx`{%rWqX^N)Q?1#miM-2i-Qlx%@
> ze~BPI0^p4H{{uhlDE9vWvM<&1f4Cmtl;l$XgIY;R#eat~kd*$ARzbbw&JEA1d^xpJ
> z#k^DTh#_k at z*l{b!4`t{>1vVna(%HF0*xFhBXh*EO`5#pF+%fpql(PxeH+wOUW}(0
> zo_#et>UWw#D$}+SM>`(4;XqfMN&cG1oMmMT#qjhFiac=OXD(?Z5(|47y2Kl<Cx{jO
> zj_4~T?y3Imj*IfFt;C-sHwYvx@?hbn at Sv{CsG>td89sSANUuF06Ju4}t`|XKdRc=T
> zHv(uvZo&)6bJAXJ6S7QijGE+|O!r|Ei1+ldD0ni9x>f#sInhBa|1(I!IcnzD3x2D)
> zvsDOW+wxcloTvRfr8mIld;ac5uPbcTuR#zi2EvXd1!(@eG3Z at gN!a>wwc9v%tDf8+
> zk`q2-beuS57J4Rcm}}Lcd2bXfRo_)55H^I-pWNF*23VZHEz1{D2cBTaJnzV!vT{_b
> z^f_~vL<n2$VZhAHcd`C8TL;SwYt?0&*Gr|exoE>)1OdTe|7CC?t*%2jHEqdPn&PiC
> z{MU23q8_@=_$?Dg$;v%)Kt}+J)8m3E4aS(#nha4wP*>}{lhB&pm2I5<m{jQe3~aYe
> zZd}n};Upd;4)j*ych+z!Tm53gxY_Vozc)7#9IPgycp;nL$ug9GXkIo3$hVqQy~I#Y
> zSR$(E5#I#8X5`G>$SuZ8Zj&@M*6 at du^cfS8aNsWh1>m-f;YQNGr`EW!C1KokPY;u)
> zZrVr}$OXH$UbmL at Q)d_#p6O7PO-cST)NzPG=SF at hi2l4WoRV|YaDWZ>YCgsdF`oNT
> z=z{-m-cl0g;nUg|WeqSFGuGHH3k~WJw9IyPdLL-70!a#L_>U}WAw&lWhc^ZurK^d(
> zCyrt+gn5Jnz&URMz`9QKilN;JfGf#~|ARU1|G^yX|6oqu9Cq`+W8RW=9+>6)m;9-y
> zu>QSbkNouk?+jP)*==squDhqF8LsJH{5JH(svBE%<(GG}vm2dbh~h1+)i1tUOT9xc
> zwoShHle12mLUO3_r7=J=O-=cw+kwW}%C7*z<m)YCk=%bC(64`{W>%3=FcHM&A(EuG
> zsI2ZkYGn at REr#+d_XAC7Xd{99$Y%1fc>1oaMvr0Ue6YAF;|Tg!^KaIME+lDI3kZ-9
> z{D>bT8d at YLnx|X{Gj;lUpWj<=oXOIL-sIjpdkuv1WZHeWc$*}hZ$sN at ck;@U1UZK)
> z+#nh&Ii$G0>{qZsH0yy?d6b&8w(kShtw55G7p-@>z>O|Ts0wWHJAAbhI`44{wMY)N
> zLO#%~rY3#98z4T;S9thnx33}a=z7vu-ja)L`qy86msVU;8;$OW1JWL=z$vSJfZ&~P
> zxFU#|S9+B_iqkT at RGUPnykPzNVoB&GA4Mis*1g&0-61}kcng0@<4m|h8OEX|9Sj8g
> zVBJZTE%JuLl`{<g*ig!O$9?uAHN9(QUmV!7b0Ny&P-`+YSQr7aw(m@~a(Dm-eU3MV
> z?X{x;SUcTO$@CA}x>)d;kgwE}o!hd)L5A%RpQtyN&$+4$$8eI=s>EihRp2;TvcWqA
> z)$hz}^*p1#5>>2-PQijBr)Q>!b0(MJNS?(PW6A0CY5DW!liHDBKX2A+B at Q(thH9qH
> zRu<k9X9X3lP`UsdYNg{@F<RWttptMOWT&+`<ACwnbE|S(H%#HU+s?Qk=_7o$)-O*U
> zb1F(XF4$zNUpN=`Ep~`43%_i9yjewPGFI8Got|DxJi5`-l)?MU7oG2byE%VXmocO8
> zjXvAPs;HoIR-l#SYsib5Fl>lmNj4ST4{0T{+6}uwoH>o<d>3qtV%x5fcf$^0)(mA`
> z>v1&lX0;Z(C%{B`Cmw{FMMSJDT%k3ur{6D~!_CAgZvvaus&H-;@$ml;uEMkYSolte
> zE-#X9rD;<{>eGu4bR;a>L1u3gWoQe&Wc(~dJy||0ktEu((7xqI&M2;jGwylqLYX8@
> z9sO0NHT)U<1pLPe1ac$upUN`UWd)+C*@WJ2t+dVS)@$fz_3IMG`Sv?)|Jr1_P5GgS
> zP~IN2kbPe^=mkKSV>EGpS|0pO>X<p|AaOzaEV!>?L?M)al;nPG`DP6bZd^qb*7jAP
> z?ZXalv(Kx)yiTWw51QpAxyWVO4PmAytKVizwbD0Rq!GXh-<{P~G^6ABp*N4;aR5)3
> zhTW_m>JhkVJviHLiMSi??gE<_SUOT7533Nj-O_;*gbBnmyuqK7V57U<d!BugMtGQO
> z0Gm&Q1X>-AO%u at n0;3fpjYZFntN}Z}cR3m&J~5{Iopj!%pcEU=847rdcD7A5*CG83
> ze1i(XV+W*gaPVRR{`FU$rSH+ at Wp$-$L=3&8z7Y)g;lOX!Y70b&8+q|=cKT*;kg?r{
> z?{cNOAz&5Q%jEeK3aCy_;f>X8FlGjqAccVCLNX?7poXgBZ{RV}NHnsRs^MTbLc2Zv
> zaAU6Z@)!n!DvfTa`+!bt<3h1dyiS7KwG5zsWE)AHff^)-5If%kjDed}a!c0c at ZLmY
> z&xo7YXEG*zg(JJ)chAm9Z1L6XJ_UAQyV207zI60>proGhq8{t at D_^4uXZNFlE82A$
> zv!bF7kav3hGO_M2KVyKrmO!BxD8j0#5jetnQvJ0xP at nkf@9E?qp8~}Nm^Iy at --~yr
> z{g$R#zUg|qNhZW<tNtIm_?&a@*g at d2iv7e4FsQA@Oa<WwPT{}%?rOF0UA0k8B53GF
> zoL{t|B!)2++7X{;Cfy|G{bryT(p(%)!Ew?HorI-osim+IVn4vp`$<k;kQn)^a<Ept
> zZr*|fd3H-pvrpXf-m!!XBw>qPMEgXUvoK-8XJgbgzXtyzR=DVS5XtKBWFyItQ}rnF
> z8C+kVg_Lc8H~=}i3#60g`PrZr$C3puVXa_&TQG- at dHKcgH8+PLF2zsZCqYeTbW1b&
> zUuIK{WF5ttY$U3nP583o at v7$bZ(p5+hYrAe%x)MpWO3huUC1TZR#J1n4>%pf!C4~X
> zkGZy1e2^r|3o22=Z5uUlvNniWtsaN2-GBvmUYD>nq%?D$lV4Atw5vL~bMIe(^ae89
> z6x<q!?4%4{p1B;xD>jnL&8-?X=Sp+3>zNu0gY)*k95R8y4&CK{CU5vdg{vH;4x|AI
> zPyn2U7Eq at y&e1M`?J#cq6sh3>Qozd;np|{ekY6tt8P8F at -l$k*3p#0Yd-0IgpU@}K
> z!he62{8TXPdwe5pL4hIf-!yuOmf5KjxF;x>{QLaDiP><72Mx0DGHTKX0wCJ at bZk7u
> z6|7)ZA(~2gURX|Gv6~Can)rGJF1ErP<8haV+3YL?L|4);*qHU>s_)t$C0pR=LDp`2
> zR9TOcArNb{{=Ez`5OHC;?w^ts7}MD}jyfDny?j4w7JOv_-Q8_{_fuHuP_6U}7xU?5
> zC=c7(ae;#kmW1*(K;*#kvKu{l24<IFA*Z2Qv#qMyZ6tss%w)ZtJCuck<wy0n<@m<N
> z|Gw~eW};uELNs}+O-2!0=m;bizWoXRBpeS3_p(t38Viog{Mo$WTKq5Jjaf71Q)C2|
> z{QIV#LaHYkdN;p}g_EkbaZIKB=Gkxq>rpUpuv*9lgD>m<X8+G%u_8%&U8e*vX)C}`
> zp&T-%Y#tQ?_*(vQGX|Iwpst3?GZGMpQX2V`%}M|o&m$2e!+n?!dLB?*X%~O_)*Vv7
> zJeybuXoX?CsnN}F7N~GISTC-r0foUI{eR_{LK;wx>9g?v!!b{d|GzlqICZrYwH1^X
> z`RCJqS&Q^vUO*QFo&daJ9RO^>>D)u^TohDEU(U6V1`Q#)ijq?C>9pE}KJgW9*wvD4
> zUHWOGs?PDs=bNUZ#@#cY+!pjSwMnk#L*1Tjo}`Jix763F&P;?x<%(an-R at V;$`tPF
> zSNz9j&n}_t(xl5q?MODJtU&??S)~aFe37{wGH10i^NQ=3V~Z7TY=HIqZbU{9Z}#VU
> zsA(#eFiuz3G-3e;RdYnkRzc&!adz2)(Wkvn7fWc(F*iHi;ZcDCBUimF!teFr{7bc!
> z5SVaikOT-vwE<!~T}A52#NyxtMh(@Fl}%=b{;-04qRpmM^=XwnUJ+Kqd5GR^@AE0E
> zxe}KUf7_HWY*YX*`qYXZ_ at d<(ui-zxSfFaNj>0~>1y#t-(~LcbExD(7AJiaSERwy?
> z&KW9|1oTAaUuG<Dvc2bDCvBzrcAwa<!W|baK$?2|LHS)sN;|t|BiIdcfEa(92D}gu
> zlkBg2=kV_DL2&0#o>Y()4ON^kYR(4Rulm+P9zkLPLuzWIZa}QxRflND(jk-7msxyQ
> zLD&20<y0}y-h0l?7{<9Q{q?5ZE!%cv_uA31yrk5Bcf(jlI__l2r+gIQriW>G6CR?(
> zc~^51Tf^RER at Jd#myuD7OP)>!_0+Fj2?dXmIN4k{qxPeq0iLxpy=f7Q&el@&6(SGX
> z)dmszJgw^}nIESszbAQpwt1YoFOe5!r!%cA*`zrRh|5g+bH!uW-*p-(#j!Z(?ssm*
> zrg8NtzFtuZT0Q8Dag$6wWyuQmKI_1!eo?P;gE?c(=M7a-?x)|kxNSpZlC^}A$Ef#e
> zr9N~UD&;6GR&jp{Of^vn{-sukV3FfiQ5gwx2}p`#aGK#oULzDI8%~+?g^V3k-MMq4
> z?x28xyfUZS1`9YqjrzUZ>KzL_b%4Ejy~HAl_ThI=koTda4{(6P63ZUIA3 at Bnquo|t
> z30-~U9*$py=2qt=Q1`+0_Fv0UbeGS}=NLHv%M{M8!UvSS{VZfaKDVBFev+Hy(vlt{
> zX7Pi9!tY;!&Y==>yCTzR95M_V1H=pR7Jo)a@)ss^g9-}ytZ56&z<#W<te*u~z$2&2
> zFK4<FtR3IM>$<_lz1?;V*|%h)CdDBywLJfT at yrH;m{Ai1&kq2~jQdBD^7q82%YX4c
> zaJ<X1kRt-u7>3yud+Z~@Es;v=?D=FHqkvNzf6vG|8(r~ccpnkn>-<^gm%mq*469w-
> zQvPnadd6Ukew1)B!!n?eRCTTshBr9#^k{A!cW}FgKucHD0e)#n at B@WTOQ%WVX!CTJ
> zw|>)zy at RJXy83uJYge#Iw)4PmEu8$blll!&Z7E=*fSb14ux86?H;oe^c7jhOrSQpg
> zgOFDPBIb1o6<!`C)Tp3-G=JT0{F?TD2MsPeZbd3)2b9Kg%^^T%N9X;hr_+R6IA2HZ
> zil3lG at rk)&OwCnG9HfZ-HAQIBtDCdao%W~27+Yyn0Ypq=;qyzXs{5_FCx0k|g+{z<
> zBRil~vm<5)&igl10w7?JhG>$ndzMGFhDx98XNeXRW#u at ILV&uUX?x%V>?nI&z33>1
> zX+g5sni1zHePwgM5BMLXwC?FMeyDzcB1dC6FjzRCR?ZE`DuKl-7pN{+_zgJBsfli0
> zZHoyw{Le$<O)Ru07V^>(F4S)>R{c(9$|*8xZ4`KaXyOU6x#S?!$nn9P{NQICVcxpQ
> zwvbDvMi=21uzCEQr;s(|WJ!4ZQ5%4xw)o5krAKi`5MTvj5>VndRs(|d&Vaz?>0A{O
> zvu;SfMO}88QJnK4+x7we`Y-npTO>XN1ee7u>G>a4$0{=L7#|Re3HEXz-Z8$HwfIDg
> zhL?{9e8S*E{Fo at hW4qRqPPuhKxpvn5Lt+>XDzA}{&RsqK|Kv4H&c2n}Q;g=p+MU3A
> zlGqt2Ac~jDlj8afL}*!39Y^2&LlBHN>@{U#Yo9J3uLk4;)aKlPJQ=w}>#$+nWYc^J
> zxV=5le`)ic7)f-gfP3lU_(J|+gMGEr%9#^3lih|{>^-Mnxd{*mnwkPf6r5E>P3d|0
> zg(1kJKTaD{T3yiZ_MJpsf{id at By}139YC;h#Lcb)dQef(EK4+lo0bCT;i%Miqcop>
> zeO{+)2~evt#??cByaQZa9Y^!5Irf|AT_Os`1yDWJjp4BZ5E-oziLCqXXV=1k&jwhU
> zF^m3|aBjbo+5T*V6GUx{Xm9k!A;U;1o0^u<7#)-aGw$<Pu1-|QeVxsyEByVuV~cpQ
> z3{f0BWVB~c1NG;PIN89-s*itH`fRD#0io^n8<DHzmkN~y3Pd(>Z)oZLo at T7A=hS^+
> zK?S<Cz0&LD^Qn=0I8Kq``Fl}m9)+4Q^yLRZSKPn-3Hxqne<Ccm@;!V6hx!W+sYK^P
> zQpa`O5qiUO-6v;qKw<N%7yn1$D9y&`=bN6Wie}9fo(8)Pfv5w5 at Iw<?>{lXS at C6s3
> zsyEASJW(M#GD?VjUtEa&0&@GN!_)7tSF^Z#fQ=N=l8ZJyl6J*k;p3Ct$gJ(Tk%>2y
> zd<jF?hkgn#(#0V($gjv6^C5F;@qwb>`mO)z5+XUdTgBTT%&GGs1M;`s*C7QX^wELw
> zev_P|<_EUOFw`3lQRFM0JJ3c0VENW{S)Vn{r|=U(Uh8-oBxpLn^doSz)h^oEzAWsb
> z1>&+Q3vDFew6Uktqu?XaKurwSn&*LZO!*Xb+FWsY3|E$@VeLknBTwnB!|-N!yIGa~
> z{jvi{nc`APhB3RWml0&!Hz(fxCVn?2x?1*y1d|Z?hTTnCOY`2_c?UwTn-qL_%mZF5
> z94W;9(?OF$>^MWxJXn~XMLlM?4C$|bI(+2T5D at r%azEtNHVuKU1jnbib<OmpAGRK!
> z>p0vQM{q*C++c;QZ<78 at z(vgTboi-m at 82H6UdA3zLVE>3MS)ymX`t9`-=8KpUf_xY
> zSC1?=U3cU8Vs+)tSOzz6*$k>IT*#`VSoV697{U_{8$LMdB#K_6h8!@mYl3Q#fTM_M
> zD|Zfj0r0B_IzvExCcUx-RACPq1W-!JOdIlA!841GAgRRc%gjh3+|=*l>4j^bD{HBE
> z8qFI+jC#J{z=f%Nmp$JIY_`ycI-BgDQb8~=&*dp9KM|`B5JSuJ25XPw;5T)|PPMeY
> zg5(Fl1jPTyis{9zwuxK_;>X0&MLSaIbFaGiMhrzo=D6xKeb&bLCcO1&!P?p6j!(ng
> zD1A4KV~ck&atL45N+f}HSenAgHH&Q)Ma<>5P3Er^F2G{|HJ{-M8PPia?GOo?2RyUv
> zmaG})@4&o46&Atq6Q-3zcu?qThS8k at +-qV<bC%nb!=Vu9=`)~QdFQJ!ylM|FG at OM&
> z72l>GV7R85jW!dw06GBF?$Z?Vot)|h(LYF<{9vS?NfCY}km0<h>0hx9==*egappiR
> z$hL}-HR$0DYjzaJk&j;H1M5`bwcRh at zirxul2FIvUz(;n+Vrf4N;>$Q?%QqIH at 7Gu
> zI-0DXLeu#I&Qp2Ds?Cq>+}n>7s2i)<yPPcF?}VCxaEDfHP|$~q-g{oB;GZ<?oJo|g
> z(?9X;r+lka1ebE|@(TY##tAo|7skRsqCE?)bUFpH7qq!%sr!Cu5+3X7hIo!rf!K5i
> z>-oTzY9HpRUk4gbpckRP#OVX7m3it3 at aTdlg!Sj_=Kd_4?%Qvd6LuKTqz9T6fVi9)
> zP4a^h6dIh(>vDwpwbZ;fTITLF)j?qJgIw6DVvmT{?0g3kko8F{E&!ZfWA}(JQ)?DP
> zQOE%`;3siBY%N3s7&8-QP)PbaKU5&jpiUWA)WE$$P!kj7Dfih$*MVGc^T^cGydD9n
> z%mi_)rBj$Ohz?pN|GGzkeXy$CS_69_9t*~{KRMTutDc%tZk$FQP(c_^lA<J<-KyX_
> zriH}Us7d$$df^)0mf=DMYZLy}eXE4cq1lnbe-u#gR?RM!1*@b8X_~*4J>2~B%h|Ea
> zYuD|KuCXdAXKs~EG&@&*?w&vv&{-7~=~vHZ9lmwRkw{i&Y>otMX~F)%r2!jW5V2?T
> zts4pGmet``{YHa318s(dv?-vRc?LFV{d2rr8xYdxC-PI{rIQjjhFfK=)p6zrzc at DA
> zhVAY^|LnC~s`E at m_>kWEJHxN91SCe#MH~kt0I2JifGKnlwb)AJL>9a#e*4#Q%<Y#i
> zB0k&n5q>g$A1BArxJd;-G|(JB06XCL$vnd2aY6iOHM<-AK?$+(i)(`~0n at m>x^ypv
> z&V7b^DZ|30`QB*ys8TAe4(ohn;GJ-K{JmH4=H9EVi at qO@(${Vk{Ihb`5zm#uF{;Go
> zt5vL7wN{4!4tfpL)xO47(LcZ2it5tcb!uIVkusgNsG-u at nz|a(=^JPX*R!yH(~t-{
> zSJ_MS<-~-8xF2xtjw=@&&eDz$Y at 7iEHcDvcJI08jsgB0ywleGq4rSqelMi!<;p04y
> z;yU@^PB?vr4sw`I;$DWp0PJgCMGB9z!~_<~i5CgPy- at f1nH&%^t8l!M`-|o7b`l?p
> zE_J2YFRbZx4CpZkYs#HN9T)hrTentr93*yONh=0)gid}kz*@9qnKon)`?1gF_+GXU
> z<^+mOt<b at CaIFS8mGaKN9(Oql>$&r6>{h5;dC_7je&QIk-7ua<cEIylry|Uh=lswP
> zt4vkl_gEY&HjeP6fjns%fk<)C1eGrXdc`#*xzV=XPb5i>3E;FZV`YpM{Kv^-_>=gg
> z-Jq+qfZ3Yxo^k|das5bZl6P0Fm>ulu!i)m at 1ig*uY06SNK%m|Bj*P-2{2+-Xkcj6C
> z6IKpZAKGX(nxLw(BfH8`0`{+s)uo<PLk8j%^Zbt0^IB`la~UKQT62pOCr)B}+2WIV
> z6;(@3?%t5^xNaJ&kK1MMiDjWLFU|-K<4hNWk6!rg%7>9Wj5MT+^|%jgoPl5l(cY6%
> zkW4%5TotN{y(HnW2b5{1h1_CF;@qCBVZp5YKM&q03?QAlPD`_w)7#&<$4Lz3Nai@;
> zU18m9I-?13vAqOW5CL6K`MJ&ZpO+nMXC~YGo9}Uk>wn-~Bn|<~ZtuG$KyM#&vXp5(
> z%;{LAi$f3MhjwuRHF`Ms#SL8VDqn#2BJ5oww>3SVecGKO0brMAq>Vt6TjN(8HY7LB
> zV}P^=VwHCOr at I70v39Ei)UU-wD#KEgsme>Mg^V?n*ZJso?yT`x!KRdaozZ5M>buU^
> zhVuej7xX-TmfB!JHrVr^q6*O)q9o at Eo!ea^IyGNZJ}$8o%dS#coYgpFxtJzNpNV_N
> zUEYcY=$;wr0-*G2n#!bsD-znpN_4`{A2a at 7h03^<1J1VyuM{JaLZ26j(pdovAj~fS
> zz6!6aGu?O5p=P`;paB`a<cM17sbRF;sLG<N6tIK#sbNnw)w0f{J~E%2q0FEUK=B)^
> z#-#F;?`I;w(0&|IJ~HnDCxzONgcLj&RroG5YD0q65H-`qxhrD0^mJA8tl4NqQ*(x3
> zLb@`wn`qO^$ESuLX^Hlp=a!F#x=~mJBvr=ka9zjO at w3ktJAAE%?!3ho#t&)^|10Nt
> zXS?t>^_+hnin{Qo6~WATZd0-=kZo!b<SN3sS$HV5e|p_-6oDQxDwHZ5C0uTnazbcP
> z%E;7KbC0r1<tP{50Ivc4fZBQu4^@fBA;D-p3x1qlmr9|{j_`o!vr7CzZN7B?Whig>
> zeQgX^_47J0-gL>fC(uhfpLqct1r`4>Tr9Uq23<f81Ogpur+fJA&R{l$eL`xSdm7eR
> z<g7a+LF^`{lq)2Nr`BfNiXC8H8vN%1vGdt({llQHSPo^a&E?ABWLQwM-|Q!610?c!
> zn1B+betpn+P(W!#A$P9d4l-VpXvrGOENOcK?dWL=gIdj8bfb`t at i7th_+u3Zu5dYU
> z)LNUPCJ_ at Jit6B<@*qz>)rVD}d?q6sH1Aw&omu|Q*h0O7Wk>I2x|E%vqx)85`?+xr
> z3ovgj{?y5~w!F$q<B#f?ayolLe;$IJzJjKN0g%hhoPS at bT%gtS(bCdy5C0R4Mh$EH
> z`ycy^Qfp#8v{R{7jIgL`M>SESRbAPAEGpHrYv-zFXU+FCRm(nDI3-(AtX;3oFq^6}
> zVBUEgw1ihOZtEWb3FSlJRf-x928zsd(tkwk=YMY{BZ*FVtw4}<2KrBPnzMyHZvn2S
> z4G4U;XrAxgC?Md<ZF_tovIDXOym5f`V;A|tWZbGfIt_ystW3aUK>$~0ZcSqxO&Yuq
> zW60_^5&QEn&>d;ilZq(`rdO at r_o!K?Ffj%76$rzD8PDXGP;UaMU+ih78&m$lsW}_d
> zp+9&V&^e8iyc_X!e2h2#t=lI(m9H~U=gU0yo!*UFg1$|o4HgYxz@)!jsHg(gfjLY8
> zi(cr)5Pb2i75KFSs70}>8fb$;2J?l08#<`b_VF1oCIN1<po3tu==qMuLomn~mtp{n
> z1T8)21y|{JsL)u!$Dy6Tv`^R*>?Xo5De}8B*vPa5dBeeKt7RP8Ub2p>El+-Qt9&>*
> z*p~-!X?9KKc2iAF3<TD#twRARG=Gr~KD$xS<pz)a&G#rA<0Rj`bM=1&AZ`e2a1Iej
> zuxtS58V9%VHV9PBO33QEQ&SHGu3N5_=r7%m%hfb*0Vua0`2bn=A?fA2 at r9?2BGxj#
> ztqX~H+QSR;zDtgYMMc!*0C!I<fkzRL6Os&{qGSd{i7H~S!1nV<%t~o!?#Hox&pl&h
> z`mhi}o-VL|uV%@%KN)^S!c`_+e3C!C+LWp=h&$|L-9JY=bJbHt1}q(KZQTp#WqmIt
> zxjMWdSdZ at zRwJ;}YvMGycmMWypj|f=@O~7Y54w|KCqs9Vbs4a-b-Q=u>d5~bgYJNb
> zZYP3fk0|1dF*CvUxC4WhC;`H>>@QWS(LR?jq2j{|uiNP?yuwBA(o>)3PzwdGTyevx
> z2F;i%I}ci;<7amqS37nn4uWfiN~irCe>{)YvDH~v8>uFkc{vzd+hK4h1l<Cl-s{oB
> zAstq4Z|eSRUC+~bwX*~BI8;vWbN7!Dv06Oy?^-1&i`w}0C(@m4jx at H-wwZQ>X$3rX
> zGP0dt<Bi1@^xlA1K at 4akwbX;MLH&WFC3HP*N;;rB&WbniFjDx-NHn?ya#KPlRxqF7
> z#KA&{N?WGwXUBp#yJn^{?Kf^Bx+lxiO!jB3^<B`ZG*!-ak#5UN*siWOc;>y&V3Acc
> z<z352dOHuRd`dDPv0-mfLs9ekP$~t%D^prhDSSl}j&&S#9{%<6NqBXe?}*+`$S7F;
> zFxKlY2xsDUwY3wFf0Wynceaw(xQP+LiWAxpt~qCz^(+Wh^*B<hO!HvTqMiFlN~U$F
> zvJ0!c-?j2fU?nWKTtJb1r<Nsn at dB&ztuzee9*?a&j9?7&pHzMxbW^P294cNdBiAMB
> z!0_O+&q-l~GKmR!mIFih4L+g8O8wt)-{`?EPNUj2r`(ouQ4027Z}rX-X-Qw3q`=^g
> z-AVo$zz+wTt;%Lk*j`dd&9%quawM#N#AMgN+(O+*$(>d7PW$$ZcP;f>Y^VL7?riWz
> z+x5)sI!Q03pHx7Mg;03x{Zr_nyYooNPs^MmMX!<&{BXbL<hL|57nPZ}C(>DCZ at pl_
> zZmkPfG?C<-FDoYv!G$cx=cjv7*{BJOzbiE=W_kRCk^79hFge;WStzV>b`>yL#aWc_
> zy&W0cn!`7bk?KPVRk|H)UTf1^$N#m|Zg#GQW8Eh0tL{tXT&c68^)(MCQYy8_#fOV7
> z_n|DCWvNcwB?#Z_DYCP4My1SVg8QB#mH2UqBYE7sY8}{s7F}tJfrdIAOW&1bmqm#m
> zcF^~Qzr0DF;q&i8p`nd-2iLS<tJwC{e@|?+{Nbwp*mc5(0Ksa?W-q`I)`x9oGr4_6
> z?MqqUMwr0x+-|Da$1(#WQn at tVB(U8CsY3_Tx1UgI0v<*hf%g=F1}kjK(^Q{5LGN9B
> z#@L4U8>v}Gp|ODTf<@Ykuufv+ at _->2_Z~6A`aCSl#<C86R;lj{Y?i3gv>dn_7Pr(t
> zGPC>Z(fNngOq^L9NOJn0)wN)6iWRXK*1mR>E&ZRZTP-S(Q&(zyCelf%`dg+~#J=Nh
> z$#S~Fao!!+J`LQyWA#Yu=1jk$k*{5a3E7BFb+C5H_X|)(Pk%dO3KZ17`n4k=DZ6<k
> zZFFO0ne9Y~rOBnY^;OB2LF0WACCev2%+Ct%bEAR<;VAJJIPtUbVZ|BXtx`<#;mH38
> zer=-&fMvPu#i~`U%0*O1rEXWo6L;<mERXM`HhxAT=)&@iHMp<7S=Feswt$5oiw0~F
> zM0=h>D%P#|ETOoVQ5fIZDY-~E&>0PJbzR<q?hT6g+Pjx5BF4D!{6#QAkSl&yG9WOd
> z-$i1Ewkr4 at 6{%_ZQiTZNg?YjXlOp#iE4>KRi_z(GX;8E3u6+akF^QIRavVc8oZNs(
> zwA;$`2Ub+5T`?*-Hk>dMa^DwutWdorX`Ug8 at L@y=mT%K+TDmb2?wH|}k;OU;@3W-S
> z-e?TJq%<Ox-X<5N5Hw41L(W5SC5@)Ef-vDF+oi{^NC<z%`a~awcy`O&k(gM_RNiqS
> z-mNG6GsCw=LXvm=H)@yOGhst&?-7#VK8CITr-dtzhqC+P4^ku)Whz6Kv6Y>Q#y%6q
> zzJz))!r0Pl9m^OZ*=Z~zJ7X!-;0-S#TlLzP$vQ+RW8cY|_&w_P*L|MP=YH<<oO{nX
> z_j}Jh-&5l&xEN at w5c)VbjCS=yIsnvzTq{+^z$d4E$+e@|F{d=wB#_HwpqDC$Df7UF
> z*}m004}ImKC$b~`kN|KBtE48`wgOh=+$VrFG72fcbl`M;eIJ-2A(IWRg|uEFt;J7m
> z1#zjR5ZDcyD_Wz~Mq)nGq+N;UFS)+DBAm%cqy|QPE+Cq}(a?;$EDoxOa~w>OTV~2z
> z<;KKW{5QF`4ID`f<Mbe*>S%#PQVy_QmL}F3{A0VTVYsglLZWj9-o7mN4PG02%!V2D
> zlrIXhqt4L<ayGkd-<1~n&746u%}T`i%^T8<Gft5Y7$&O?2Q)YKuY_~~N4_$+Qu#5C
> zit)p(N-ao`o1{U at A!~>MU}HPP8QKOYotYxOzDR)aOT1wcV41!gB1I>fE5_6z;pM{<
> z?_TWwbEZV2B6Rf3R3yNAW?iKx(Rjl@(eb`Cgbs_?$l}!SVnP&(v<EKGg2i_Rk6D_d
> zuEQWL>}-Ld5+UMn8~hf2p?%gKIAR6q$3+8)- at y16?k?38jD<hn_T&d{hsXlnt;U&z
> z!0=l--E_bty~mn{p_NOu5G=EO=2F=4*=Byxa?P+3*ewQs)@De*5ES*XZcjSJ1BUW6
> z;Yd88nI&&s2;l^dB8Ifh&->Bs`HAxGQe6mf1N3YUq+YCPFe3y&4_p}D^i0+^H`)wk
> z4wwN?Sf|$L>eak4jFzIjsogA#a`oYbe4tJ6#F6PY70rb at yrD))gnx>^Ct}W&UX0gu
> zJl)I=KwpW0TcjRjGF%q-5JD!>#KMj2ppzdsgrgFZ-!fViIw>m9O*H|<1;6`IEthQ6
> z(#y598;t=6nVEP%N!J^5$q$h(>K$8nUse!!LSHti3ns>2-Dgg|c}>wip2n?ukC6re
> z!kh^u`HVmANQz7{uAfUj&w7$R-^r|gr5Dc at 5<R4|8MekS0!;ap|5vJj(ix$5sJT(0
> z6v#AnF<EHjWY>53<^%8ohLwMzc-L<OJ8Gl839cYzR3dlIvvwaZilB~HB!Cn5?*=O{
> zNqZJaQ?Q|5e_*B%0DhJ$9^w+=Fv9~->6Gr8f(dYGl1~^ME=Q|VVHW%1$wIokr$y{A
> za%=!OZ at EV=CAEnG!g}INdIAwa>&cY?D8k0&khS8E8;A at +@+kdOkOzn9bp>Vz+?!*K
> zKf_H#avZncwn)-lekxme&=l&4tyN=Dz+_+7FshG-stbUFl^$M7zJm8Fk3q40K0D<A
> zkWR0Y<iV8F4~Bz3^ZzWAb>Jz7w$LWqOGI%ehLB at OGbB&k6!bdL6(5^b>Gte1LKBuh
> zWwlXv{D3lG<eY<OX2RoXNuVj>yI64eZ2J|xMep!$jIU?T00DzPX&~t>VfjN^8}(M%
> z*>?Ae3=l~$PE8K6ZJz2$G?iCRXQntLn{+XSKt7E8c5U5$bb;rZCCzVk2tbV at -hfQB
> zxY>5aznb}%up7HZ)#BoXe>6o7IHGT^xjzKc6$RG4MG-lZxr$y%65t9IaCaUw{C^oX
> zIYnJncpv%@&)J8{k^`X4wi$v>E{xMW1JNTDpOJs2O~Xh at iL&txA=}NKcdqFd at 4I(c
> zNd(0{0LRi9cE#<1HmD(g;dpdBeh!p)CGj6YlB2nfFX<>ScIcZUMt{-n=qH*tvbY_B
> z;W7Kud#97rsf;DQNsdR*<|k$f1_MyV9xjjeJDm0OEv`+GzfB?g at U)u9yJZHHRPZT>
> z>iJJbDZKo(`mqO4{so~^EkFH}fA{(t$k6#&OOc%O at +pOWPZuDaf++TiY-m&L9sTJ#
> z`&~0#&YtWA9Y2k}U%LWFnDl@)ZX7-xDX)c&Zi|&iXuf0k^YamVH at 5ka+Sf<VO?iIS
> zec^t1<K0&m;e9%rR;CW6*-QRC*XZ^v&6QCy!CIU&p+H|uise+9UKj?7fN|tq0--TT
> zwllfxLVtpiPx3Z at Hzx-O@a-h>a?+g8vQA+1KJw$MfJW at 5Dlo+dKtc#gwX>!G`m~1~
> z-JAj)lzu%h&OY)U_lluyx at DfYq31=G at vAG~T|lDw^hrSliDANxr-F~hmh=&5un0r+
> zjP~>xzA4Ms-beNLE7mD}b*Hw(XAn!fv5!`bJ`mW53k#@Mj-Hzdqzr`x-K|^E*S?h)
> zH at 6|QE!+k9GGt)K57juVYRP((@p^TT%XIazU?R^}w(s^A?*8OSnX1Yj?A6Dll7bll
> zV;iiV@^IeSMm95N$(h;=c8ZmT$;ZIhuxm+f`36<foVT-dgX~?+uA#pR!}BKUzv~-A
> zm&}^hk|x%}=VNw#sbz(0_k!Qw`$x?w?gz2Q@>qB*w~+eufmFUfUOA65Qj5c1h at kC@
> zdvIL~EchYXww1Q6BxL!-;@tcHbSkYkkqSc;xo<KmqE$S$_y!)El;ugjQ8 at a&$D6sT
> z#eSdHBt+e6s?W-geTAHG|CP7an at qJYW#7M?j$URL>*4ILIy?5mu57p5OutgyVivg@
> zb5w_ag|ASri!>}gzLwap%3p;m!j_gMef{Br32hlRF2RoqS-U^$9WH~dZnY>;xJ<M*
> zzP!+$-oH#K)uS5c%kJt><oe3cDa-lpv8*Q9Rk}XAfpLw+2&&;t*!kFvFDe}4&l*rl
> z16F*Pa9Pq^x%z>G+p>K>L#0^|_u~Y&CmX@<fA|#zOgFqN^s~}0vd~|8_akI*vb$~2
> z8$Kj&i2C?Y2G_-&l{)CUcyCL!jCbkYRuF2 at Svo#)gUK;c7oD{1trH-q!ZbBb-!)0z
> z5{Kzjnr*r{EPfc~vkoqz_4JLEt8Zrf5bl#in;fs+i|<0`+t>NxtPb4padmA<`?Xl!
> z?9&TZlggW%SvG(5z2UqN at D!_~PexFCZIU{fvh at k5TOO!e7o>0o3u~q(mhMK!?iK^e
> z!q$^wC_Y7>?G$D%Q>~3v2W`q*^X-uju(d5DC3&W}0J(Cu-`hx13lXs-nvPe0G7%FH
> zOXcE*;iDl%_DQ+Kp8~(++QgJCxUshgsW$cax2C(@&v*3%!*bdbpl0rSoQv`E^QuD1
> zM)1L7>;6yHO!|=I`)aAQj`M8<9rymC1cl*wX~#$b1JulY=ZQ_rm-9+Hy6oF*-K~;!
> zFm*4DUvOiq>7v0cybQcvp!1}(L~Z-#t`0jH!Q7wR)t{MnYbbYXhe^t^sF$!}!VTwF
> zUZ1XtMK7e8&edL+$oZ6XS>ZY^lh7hI_W`#FhvCYRyjn?bkDs7uF@&SygNFMXW*Q|c
> z7AwPIIPWiWwHD}<)i&=(=*U-_&=+ at X5*s<2Z*IdQht{CPQ>(Tp|5$n1p%ieYioTC`
> zvGyOsu~JX6x5nq9bDX-2wc0rUCC|xl at 9+_rDbx?=hK=)`j3a5UR}vN%9)?!$RbVB)
> zt6Z}PUiv8zq&jr{D}JReAXBR8{%-EPD~Iv`=uoVHO?|;T?WSqmu>upH!_O?^zFPh&
> zXRL2%5dT`AFaba^Y7Se)`+XKBoCQ7q`y7bX<{=(E_g8AQT-E5DOvhxDFN%J}YUfz>
> ziK&v1_(y3))>!QcmZIL-isx3SFAp0J!;Bs$)L&>oeQA=@wA2ne3b+Gff7y5h$IiTn
> zubo95--B{T*?uq=w=*%nibjHhMz79b9!D^$P*VQV+NvUddNc2-V<*AAD1uHmEDn8V
> zO>N|!b%~9w4Nj`9G3eQ{iuYlc+)392?@g4T#EG}0)OxM*JA+^y4dc%2dk7A8AXT!V
> zg%+eC5)jWHutQd9HNalhO_v at dtL!;^JJ_V}TGNy5dCZ)Z+8_`)Xh54`%p$u(>_)Ve
> z{)LwZe$w3d@{PHwKtUMCX8L!qV&ityj~ed_QgY>c$;pmn?AHoNjWP?owPnz_9*<KD
> z(=M4C^#Y%L8Lh`2Q3Re|`={IPKTZE5tE3S_&^z9(*l$^MO*zmLgso}&W@|Zx-lm{m
> zBUFp=maZ?9?s|#Gvh;DDA at KQj7l>cXjzY)S%HZIy2s5C*#<Vz9K)&U!W+8pGY2ln3
> zdii>7(%h-U$NTZHbjMpBrz$4~3(|P5XZ)k=19OJ3n(!#ckD}Cd^XzkcN66$<&MwTc
> zKUK13OE8K+<h<qFHvX*|v$+_>e+OBg8%4foOSe+DlhQF-7+YF^S)Bm|%KyJ8L)RPT
> zV<41a@#2F0RYuRXnx$2e|KFZsL7)>8CfaCaH42Y9T?KKQ%!K$1fSsQ><jy^3X+`99
> zW=+fP^VL(9v`a;b4CUqsM%aZ>r!LO2$v{m86ks at huFTsn4IZqDx5Ras%Jg1vFPTnb
> zeW&swY=!299Gnzz6E at x_QC~FO?2xZ~%K7LQ)S}DJ=#6Cqk3BBUt}2$TW9)Jw?=s8w
> zI%otn6e4N4fj<8eH<xR0-wxVjtb9BoOv~(FZ$<suxFTsdTp|5uwVARZ=}2s$<*xq<
> z8~M2FJJLXqh;9o9?FO%SA$oNSLvjMe_g`6b=x#;ung=7rOXWWK$WJ!#Q9HUkztoL$
> zLHZ#JYcu|^Oj4BKi=P>o9G9>X?Q at CRuvK-RL=Rj#bYGL$5bvet3D0MUnGw1k;NzZ9
> zY7(%S5W1)5|8Q70r*1-M_ABpna4J at RrT>{uukK4BsrbI=`B#p#rG6WtX(~mdYcc_u
> zaZrKrN?gY*7uT5P`{o&fJ5Z<Zz?e-ns-zB;Ofuy#E>9UwryOl`_TRus+Etwif+u#3
> z<W)vCHt=a$u0{<^*i{Apx>>`}3?5k&S9DcSu|`tW1iLErhUY(gxYktK=yRNOUke7k
> zkMRj&t(#Ma1M)okI$9BnA`@HsDuq&(CDoUgj^cdW-^2RE8*hx=G{4g^D>7NYDsynQ
> zRM|7p1H{(%l^i+vd09)|v?RLyhAat(!ehJDy+wat_zhgVa*l(6wmeerQ|mrDuxb^6
> Mx@&+e(|8#AKeclho&W#<
>
> literal 0
> HcmV?d00001
>
> diff --git a/images/user/ctf-trace.png b/images/user/ctf-trace.png
> new file mode 100644
> index 0000000000000000000000000000000000000000..
> 64a389c21b9bfc3ef57de7d8699b019ebfc7dfa2
> GIT binary patch
> literal 16038
> zcmb_ at Wmp}{x at O}9CwQ=h1PJaB++9L&ch>;H-Ce at QEkJOG0KqK*f=h6R;BLWTdhLDY
> zK6B=|XYQZr2k2GR)kW23Rp0y8ihQRejgImP1pokaSs97<005f+eqKgK1plHPiVcCc
> z7fv$TE&zav1O0^oGO`E(07cnaT>RZTD at RvH7b{06h^)9c#L3yw!rIOp06Z45RV~$2
> z_wWU;S1!fmBLe=CcYKeB40$gW9e|riLr?JnOD=*UZyryj8(UHmo_OGM1YBHPKn$J=
> zBU%*79MW%!{J7wPh^WE)b?*Y(nYQcgk*9`Pp`D70?D{dJE at ZS684eY$0JKsuGVHbB
> z{_lP3znMh>QK+2&EaZAK3YSMJ7~sZFK!Aa=3#kKu at t8tI2D%h8yI4uWpE38v()C~h
> zLSVXF6M5y418 at NmuQ;(HKtu{AAUlml75EGf7!8 at 4Yy$6?03%xe?I|E2`zGBR2GISB
> z0uSbMA^^cLkB|VY_<@QsjVMV#ixt4NkpKP`m}3H1Wi>5ifSM+tYZME$4nRf&SXClI
> z-vIF5fYAUIl?M=#4&X|iYYLn(RAKGVgOW<G6KJM>D;cPZ%=7_CQ<IsDZd8_l0hikt
> z);L3ixyLh|h&_-KbM0an06r(;fwR4M^ccmc8Xe`1Ys4^Q+V4bsrZh3xeA*f-cM<`B
> zbyvTMCq|a~R{{Kp0rpS%uaDua3{XFRypFc0!xU)%KJP7PUN}KzBbk at bJU_qn`}dsO
> zcQIY#K~3K$%O1ln%}2XiKY at qqtF?{|>Ogk=Kxz1!wVvTig+h|CPcK4DmbT-iADU2~
> zA4sPtzss65YtiFws=WLVCy^0z!CpuiDfa2jkJppWW*e)F_i#e1TtJPD5R7*sQ;EJQ
> z+#h*bEG^frjcWinZ*}bcMTZO*U=_SR=Kg#l{3!kTH4tDS`{@G!7)Vevs}0r*_ag&<
> z#OFZz8d2iQZbHT`M3QcVrEb&*Bkm9}>hC>bSYjw<0VK{wZz_Vs=)y*7Na>AOeu<EB
> zcBxo}B{^X*_o#ov5Ol)4Ge*worfUm)0WUg$jAKl(5CLNnr9~BoOpqRWL(we*|1z2y
> z at -qTgg;G9|ONQ-zlo~``hV)#}8TM_so>WUB{{X-q^bpo2&GuJdor>Tuv<C6!5}sEf
> zQu(OkX0B`*@%W!J$DO~v5{%)_+Zivn!d!?K67Og2+9gEd_- at C_+}A5s%ggv8$#kfe
> zvI4EV?^TUP1zc<7mFZZmJN(N)$*vdN at a|#|V=_ at 0Ed?#5Ihhg&2{kA7!V8`ka3Lx^
> zw3JCD@?U9Muy4N;ny|BlYsoND&Ag1qVZri_5dY3Y{W4OVowhjvR<`zw+T_bgsY!?T
> zRC|o2nVd4OsFHpznAz4Lz5R<3!Y~l}JNtL<Z;s!@zbVdjQL;@$K76 at R-Jp9vXd_3o
> zg|)@Gg=n6}E~;LT at qW1^PYs(ZUPr7lukn4gN_Ytl=f{k<Bf<Ex@`aW8$y2Ya2&}HH
> zt9M;nu$Pm`lv2kvCx`Z=cT;!aF5S`4!|;OpBP{8NG6|6gEs5L-tJ4&Uh^C^6`qfx@
> z*bdTm(lOH=)wSpw>3#4L2T_vcl4+8O=~>iD%ZkcY%23rW)Q8mKOAS<gtEAL9R5wds
> z{7NZTFUx*+ph~Q2S;}7$US?V1s3!cyPx~<vQM*^6S6Tdv%I8|c&9*)Wswq*u2P1_o
> zdU at E#K(6mJwIlOBZuG5bkEE^9f at P(7Z^b#}I5g|uU;JeujI^2d;U>#f>BSCRaq5L%
> z)C%s&n~gWbMVt!FZ035lWhtpCTIDk3D&^7#?c7yI#o0yelC9eJff%Cwa<qE1(w6a~
> z2-!QT^Qz0mD8=}Sf_zt1%w at KP#Cfd}?wt<B$7wko1_3z=j>RjU?K^iQzATSwkM?)P
> zSJG%&i1ldHh>K{WgaSXfJ~#@Hvh**Wsfg?Miij5)CmW}(ha@&n2oy|9#Y$nuSoi5|
> zQg7P#+4mLDAkt9K$SdwE9%sB)Y%Y3J#IL}w&_6Ofl0Pz&&Xp<1Hp{+~xsy4Yx!Po;
> z<DtXYSkm~-T(<7FPLcL;W1B;$&Rgw5Ep;9Jda26n%GWckm953t#m!1dO655-mc2D+
> zjXxVpn}}+*<`5UF8tof>jV(<GESr8*^&Tg+C;7Jc#y$!np at +|7l#}X^`nh~{#^uxC
> zTge#BIu`c*ahbBmVyQKTH8#hw*@!dr=DT&aYUY%*C4ptLOYlWRbfkRH5Ob;!b0%@$
> z@<97<IoGQX`s-ekSJ|2MnLS4(i`B>6$JWQ;OS!|Gxo>i`Ib6nj2gKJ at wkCv8bCX$Z
> zS1bIK#gzjs8+NEzOj!~&D`#t(3f;@DjZX-K{s=keZVGJ*@T{<}Xd4dmbTth$4Jr3J
> z<`{;qiu+SNn>~9yPXNUMuVF0VA_GMObz$#synHA+<AnJZ&HvQRABo0%ZWhH8jSs2}
> z+Ul;Puo^f_sHC{wNgGWZwZ;g2=eIjEj%2)T9Np`OMjIL)su?C6=M<s!YJx45%Y9-=
> z++|hbP9jBOCDW2k`E50m92dP%8MBSR0#6HPi*O&ah4%2YR<@R`ojl1~X8I~_2fL2d
> zhog(|jqDB7O>crUmH~Yy&%Du|%g|!{Qs$S8d?_Ld5lXy&or+ at 7m*B^|KF4u?9f#uC
> zL)v3W$uhw`5iuvOM^C17E<>;A_31FNjmwkz2S*{}R&xk#X+oO<y25fMUk-kT8^oSn
> zkguIB_)}uS2eC2=#iT~deameNx1kF2(7LA|4$)04WXVWBZR-;%5VV<48pVos)pY1)
> z>5=Lz%{47LM<NH`rj+L}j2sQu4=yI~WS!(bAHD2(x&EoKFic*PiBxO5y~5^goxlgr
> zMU+iE1copT#0r6LQH}KW)5_&XnyFQO?KEDBwt)uSgF)R5Ft!J%>L^>Gz6VRQNBYWI
> zEZVCL#&==a#6ozHQB}B$1gUubb974{Tg2gxgPrM1e|;@2|K4miW-)28x4puYql=MJ
> zmb#sa;ebBB at D+Vk<LlAYAIU|Q)DgPH*5F3*=7LUvZ*AtqKSxLSh1I^OU8>!waUV}E
> zHyF>}I7}Q9d$;}JJe*$CZM%LH`q{Cl4x_F(Z82?rFMD5qEnF2 at ws(_qZ?9jeWdGr)
> zA8r!v5s3<;aklx_H0h+E+WYt!h68Dge)5i|>=Sn;bZ&I@*sQ({Dkllg-+R|DR<Fs>
> z`4-$_yerm`rpVn$ElF8y#4^q^q%u`A?sZLcTa<@|CT8|mydI<%$uYAy1++coF4TTn
> zFYE<PC0U-2#bhUE`}#58E*UN6H+t`wj;`8ZI-ay(xvo!2K1c8HxABkaoquyZuUp*0
> z(fp>FQO##)zwf#)@RT&A+~1njno-rPXWM-2)!yK3alJ>J!!x>k+3tCU|2#9D^Hy-V
> z{ld%f`p5OvD*m#cGwtK(Q0u%q?QvzBa+~3$$dTy0_;UEPu<p~++{u!^O_%%Ui-{%a
> zYsAptv8TkVcuaAG`1JUpF!Zp49A2TfZ#RUUANL-L#mCIXXmSXi@}GvP2=H0_Zl(`r
> zM<>!I@>0)JlRE8v3Lp2o4v4B3`+EAwI(~X^uo+xx+#hwjFS(PR6s%$@|Mr3S(>+_=
> z)?TTO7vColB_%z>!=+t3m~t>Jg8NN~smyyt0PuPZ00F at OaQh72_W<A{D*)^p0RUeb
> z01!BSGW;P002~vt5~6Az3x~`0c52tzET<=)8E-EHHh0)~ErQqx(O%F{uPtFYy>!l8
> zNhne&zmc*hXmDIm8(EQaFU)LRn3h{Kux6-inUuQUaGOT5PoZmXa+l}cYn08hYuTds
> z5*E-+=!D41x>igiJaRGI%(9)e>B-p`Xq0&(4eM<&I`v?2cyV=-^-KiwRs)CyUR|C<
> zMt~RE3t$#T4=w=<C;`Y|SP_k0iezw6f>*u(JHQiQ14zFHuJ`gjkcgyQQ9!FHwE?zA
> zZ*}-JB-ZX0ENpD-2}K3qG#bDKh-QMJJvvariC}9ZLHp1_MwEfxO#-N)xBp!D&kb~r
> z%~Ap)Qu0_}=g>bZbw08MG{NY>pW*?5C>QOe{*N}H{m(_izL;=nFisifw9tQ*zqQ8z
> zJfQ|)0uKt9iH0yWFS`7ZSWzGu1h~pOp`COAI=%~-K+LeIFUvu963nNF2=F&0k55qG
> zi6Ovn|2i9y6>V)S;Xtk<o2MNca&b~V-AR at yO}A9wzZ|0HUXKx=-ziw&7)%<vJpOQ1
> z`P17Dv0nduxZiV8oBeG73kx<AfdCTNW73glAj7IPuu6v#)g-QHuv;-T`>ZaA#&=om
> zAGTzCJms19G5*Qp$u#qF5d-kgSLUf;*;G#8XH=H>%2)#@D={?jW3eVin4#s7hwez`
> z>1A`=PWZq_<fenX6RyWIKHnV7tLlE>0lB&AcdwTgXNos=b5()3|KUhmm#r)H>bAVR
> z1X_ZGgnQV;V=JB`KElLp*yO_nP59MqhZar3!c}$gMaQdb8OUtl1HGZ#-&$&^k4d;@
> zl^Y{^NF*EgYYZ at 7-tS5i^g at 2nGCXlghoqCcbw<p?2;IUo#<4JAGtvG%Q5 at 5*VU7Xx
> zcWe)lWIfEwc~=XL&d-Zp5laSND at 7bazKLVTOZ9({%5{@?zK(f{kFe4<g32dzHsRp>
> zF_~;K28Nk at Z8XM=OzK!bMmoJeZm;{aI_kJuva0o_`mW9UTx<);v- at 1yGw|Hf$2!ug
> z87qPR!##<-sKihN8`h6qa2tNxJCT`iaEeYa(khi}X_0fFqsn>ogFT-3dKO<%wRn}s
> zCF$1Urtakg`@|q1D*;}pC<)NPgBN}X)CM9V2qAxa#D6aQj}88L6>3i4<$!vtVR8I0
> z*b#=Fjp^UJ?dqeB^#d^_34CN_Jykb<P`j7TGe&lIvlH&;d3v|=3POJHbY6y(yYN_B
> zFo>EtgrJgg69x4!rVsP3MHJjzSAyaFkAku(<WG-*hWh%u?D)ROtyhWmhVE*f>!+SX
> zWYF=ayiiG5JM~;IInReaGW^Ak-|9TQx7*mP?}G;&R|-YuA_7?PqzCr}f;^r7eUu97
> z#m>}nFX2T?z*=gsh`n5}p7a_5I&FSvf_4y|(v-8|w#RUr_6_;D<*&gdOCQy5gf56y
> zl1-My<0w2O9>f>;C3w{$Q&Ad*ZRocLvnWM464-S=V1L*ILPj5(l2S$}iK3~9ltqTj
> zEOO<$i-z4>zfS6CROD%V;8SFHUPvx4*4Pt#cX?-HZg{e>^ZxiFQ)M{akkgHT)15#9
> zuKDPl#rro3 at zSh<WTG_5^cOReH}$#_?{Rs{+nm(zx7AlmYn^0$Bd^Ryv<(quGRQ>%
> zPLTkOSCj~O5MJcw=g-fnnFg$6I2P_F+jh<7;sb_t2~BNn0ctflljHe$50A;c2P80!
> z)b;z<)*^iA672Zl%Lidv6cQF3+6wXE6ml=AwP7#I(bUj*bkY}6Le?e;tCO3nAwDUn
> zPFp?B%>hEyI?1R_$*H<Eu9bSbGgz5fJ-<)s9x81qbO)b%<Y-mDaXZ08O~Xny^q6Qe
> zguSP)aC9|!iNhmRQ&#zL^v>W&7)i1r<LdQHDwm}%!?b&?2Xf|d9&0wgvDRM_Up6D7
> zk_tCIMAX5nY{&Np4Kl#iNe1TYu;Ik1WjR;~pn+1hYY at Rgz;{@=!h;;-d3)KlZMaUE
> zZoX4vI2gLC+paii+aCgCIZw#xu}dYK<AC&%x$G~QNw`ED>yd-}!Kd)l(LG{JjUD(1
> zQ=7?fcb6U^SLVLjE*b8=M3BgBVh93EMoQ()w<2>?%#*30gG||C2B93;Vv3rM3YG);
> zirY^mEdLmeFY|wPlN2fgnJk4U#sdPh-1Zy~noLQ)B<)M2;5kMOEj-j74pr2QF=O?_
> z5u1qDI1EJ{@lEy<w&j}ISWZ;zaTh#Q6zK*_v<!B7(=jP`QX~(X>j)!F-K!xU^pVj8
> zvziLNhJH4NKYiiy7<gTeIrF1^$UinZ^vrBGcpNPUqh>hTx}fI&ghvz;2S+ at lQ$Na3
> zH!4pl;>O)zRNhG>G>rl5k~fEmixXgF<cMf~M)xZ&KJ*dn_5;8|<>6*^E+6}e{VBiT
> zX=~dqy1vd!mKb`5-BTW_waTB<W}L45O^Ub at RvBRxev!o3u#9!EDp-kHzon&L1Od@)
> zr%l at Ji{WSKrFfurmW7tm&^G%d2!XZt_8v9O2ujmo1;LgC4GQHZqN?ggK|9_Ky0lM^
> zhs6x^B30Ks#t_bsz;Qf4Bz7v+my};+({(eJik#Ud-7OmL;877Z$MJbndDG}*9j{>u
> z)S2x}`bUHJFm(*$VWUO(mtoB7*%MekWu*Fn-0(gPH}~<Y($r*<dMBf<2n$$f at eo2H
> z1mOGB8xMO7 at G&?uF>12*!Xu!@4Au;k0_l?l*hP2o!r5>OQ|{0o^9H?sY*rx^r2tA<
> znJ at 1x2>+6J0UJ<JM3JK)G6kq$eWu4B_yi9FyHRQ;yNine<5rFr5U}Tg`-!gGzFs_q
> z+DaRJ>Wt8&6khL+{3UlZLgZg~6J|a?9(r2Xu)F7NQ(dm6TU!oZX{_(AX=_mv9Vyzr
> z+jKqPids(^Lrjn<HcrM9a9Y**^-T~9xHN2!>0Y;$G=AS*G;Iq3Zm2yl$XekRPaH%0
> zk3}exdwvdy>b+_YM9Mfp0yt-XZF*6+<%|6m*+p47IAGdCZu{_Ce2z&&V16aAXkTxQ
> zEHmSK_eyUB4bJO$Qa*RYeinVYc{bNZ2UwtOb~f53l~~z+U!-9u)`~q)d}q`M!fB>d
> zztZ_i+?0yJrXO^&nF@}BHfq=}$_)ker3m3+%xTNtApuSTQK{S~BH^7xU=40anUUGo
> zHKFPeW4GO)^~B7o`pQOZQuJ$>J1?)GN6 at sko%tR{ki(?MH5QSpZNilss0fK99e3aV
> zi2Dqho1G0Ce_@~V<{mCzrp_=%F<3>8E}D!7-^LYDtZGr*kao5d+tT)MiepuNwmKbP
> z3;*4W4;?!|^4aN+6(vUaG-5O(Rf<9vC4<xAVcNI_N{?xBFM?zW8+LXeT|~)8Pe>G{
> z#mf(KxTyPrpp_zvCpzZ}R?5`fKDHZaF5+`~m4CP!l+-dKB7RWB0v`ICr*;><;+2=%
> zobGLn)huX6w`Vr3S8kRDo!%7M$LEh8Nh&|TD5(n~XndwEi9#q23$m&z?bjrm4}EsI
> zr1G#IT^h?>eo@`~B4&m7YWewQO6$b2$J at 6Zp>uAP_uRPK6twR-usWh6lWq>X?ctY;
> zRaq66JL9VF`P;b)4H7>0S6~Z|+frYskKd6)eIyvv6ml&XmTX7(s at wQhr-6Bm#WYk?
> zs?hAej6C4|A18F(scSmM8`1OjUcmQKS$u015`@XjLKQcd#;6_%tP&yK*ux#&UHtRo
> zqb{h1h?Vizb7lx*6^pRy8ctTbum)C(VFA_nPz8tQz^r9o(4z8X8f3zOErLAw%n>IM
> zQwgelAN;!A5Ph0Et<HnZp9i>HyicfAuqfo~^Tv>4n&Z;LB<MrU_z+-Vsbz!ckP{@Z
> zqZlbN6d)<kpC0>q0>-An^&rZv9#hW5fL at zWMp?r23=zuo?|;!5C08SYUS&F!bh?n8
> z79+_<6kSzfD04-|5;LaiRLcGJS9Q-GL$feSkty4y)M$Yt9ddNV=f17LDU0ACi{7%b
> zS3Ux~0m>|x8>*gI$_?(gjMvTf*(D#n$6dDJ at 2cQyo8JIU%YlZZ_n3NQq<ytxh^HgV
> zhFxCIHV=P(k=GU!qSG>CZb(cR4i7DZl^6G~iixu;Gl!3R=6+FQgkfaz2N&)0skJVZ
> zxHZ?VtcC=)_nEdsm54AjvWg8=8QA*Wk at IGQJEjSQ6TY>O!2fKk+Sv9&2kMbfcNESN
> zjuqcgs{fY~2l!YbT_8gr*YNiXNBB`3I{o%#WThu}*%5oGc&o_IG5QOd<4j}8MULC#
> zsJgD;??=Q3z-V^~emLHduM4X5N at XR9rz{aJ8bo<uuJ#lv#(r9P>;KZeA=V?$KC^kr
> zgHQeJK at r%_yWcoDp%w)sBDNtJW_;#klS-ELH8L+N%1HAeAl)!(20>}=ey9)c;8Kuq
> zS(es5fee1i;{Tm3w}0?+MD^fY1j{*C4j%d4mt?`JA?pUw(_xJKw;%RkM^^_P6JJKf
> z6ij!bWM;zF45GjTvy`Sz2PcISrAuS70?9qP{qeBl?+*TK at 9+MhOjKI$i7juA`|^Y|
> zfx1XOG_CPW$Qs{Un}49Yc?mqtFCuwkW_BhZiD{0{w_qzbx_3F$?q8#CZNso~rri5t
> zE7A<(ti|@KDo!_m at r?JwS<t-xz!5cya!<8ev$o+(YJ)}gNhB!N_6B-}CXxg&_8^FI
> za^k&7ry(R0weo_^R%8N$4frX4&B>#-#!smbTc8!z-W<-5l|3ph?0$Uy7p(f~hn;Xu
> z)7F?B!Z?=YstmS$J_7iUcW>jke*{&eNU~>((PW0&)Z&JY&5zNmGvS-n*XQyGlE(KG
> zF08*lviJrcP`f8<#)S?GfI%r;u6ox{Be*v&-v#2L?pDTqXtNk|w)ZCM6^e<S%}dPX
> zRUOu9Y!n!y&9Zxxmiq9qT+yAD*j>FQY(Yz<wChga2fB?t>d!D&2IOH>>v;OBpbhCe
> z3niV&dx5K?sg)i4$<>t!c)RCw!&fkU2tsn+5s6h)#6MK~^YQR|M_e`n?d<dAs=saA
> zj2$$_(EaaSLi?!u6<>l>%|Z$J;OO;vuW}lk^mc27k;nH3%{K{u;P21k+sW6*#}RJS
> z_&dG at d<4zz?5>o`<M9`Eo68e5XlRoHj8*jbB(GWmW|c{sx8iK5Q&6>T3&tLm#`Mv1
> zq<9s~*=4?{f-&F|-Trl9o^^m??QaZAd3L=rbPaRvQw7?Mv?yugCLLpST<XbYr7vY#
> z36q8lxyyx^brY*uo`J4~E~VT+SK$QlE-^~}!WQ>fbn`1Rac~8M8?jxlo3CvtLyUKv
> z3u^dS at 6UaWIJP-{%VA|m+T}a_ at tXiQ8t|>U2*3BP<V62~hk&F?1#hT*dIZMlVG;ql
> z?iKCp)T^>$y%OV0?@Br%-Oei|a6jw=cU9XDphP!}PK?1Nl3m&Xwomq?S?A<nPMcNv
> zX*3kNd$gVLES$cra)Sh~V~1?296}9>-UPAQa>hPTxnc9vp7(2ZHMmrQz6zBTbO9`N
> zyAT*|b}NyB*q7ULj?HrRRATSP$YT-(TW at oGwyYYp<R#;pwT$5uR&}k~-C0f_w$j$Z
> zLnt$08{15}6rboT;jCVMA&Qmo(*j$OT2AcCa(<7kyOEhQtZFTt9yfnh89Ho$D|he<
> zL4jg+q8kz=nf!?Lp94|P=6F#tram?(q_#80x<=Waf=ZjGSJ2pZx`4jBQi~J>DD>s?
> z`dMSy9uT97{obCo9dG!+u)@0(tSrPIeso>kpHg&BfecHN&%t}Aee5inxXVdqZ5>>u
> zb?QhPUwLzf5fV0xA?8QWJts at J9MtLaWD7X&2(^2+5a?#=qPQW)S1pD>B^$ruhXWPt
> z&p#L!- at Q!9HoZ4%W=&X-dhY5vD!2~X{(1qp!SObY6LsFl`@1)EymlHQUUT<4olMDo
> zXO7T)irmJH<WnZ-uAK|6OGS?t`eXQ6;mE%cv)aCTO3%BHMVHnEr8XWi?j8~id0Q;w
> zyWV7C$4Q@!-X^^sIy~hmU>LU`%a1Eo^|*hKy^PoE<>7Zr)+=WxiQj05UuBuw-mvF_
> zwQq(I at 4NkUJ9NL36izT3`U^AJh9_ML7r`n6QL(clMuXM=m{@x_d&<gy;XPL3;Fl5R
> z!ZQy!at~8idK|A*m6wtO`5|h2u at xzy)N*%){sCI-)>R6)5?baUzH6Jqqy3Gkp6Bbv
> z{nrgyE?nVTSN0c{$<=mmilq7>+KjI+MpE*ujKMU_M(4w=%E_4tA9lZjKnjoSdX}HE
> zx&!g$?0n(E2POeTkzjRlEjU24Pa4Jw-0wIol6=c2NBppObUH^un1f7}BiC)}-eu|z
> zymIn93~Sad%m3W18VaTp2RNIOTvPPF_)mPlsC(e-UH8)zPyFi0v-4%i-47o*V)TvH
> z at TlCjZSQ<hFolB<o;auo2Nc|q7jr4a&l9mKed2K=11^<nihutZpJUDc8RE(BpYvcY
> znRLeQ96`^`7P^hZo$Px!SzK&<@y+3$PkWVLch$RL#z%Se@%l0rRrKMJ$56YWOR{n0
> z3b2N6jctgv;N`%OCP2Nh!Hyik4WTm~m$Ra0Ke?cb6=nZ1#4atYEIG(LrIpI2_+)xJ
> z1n<0~2(FC?i+XL9LcZVK3)eC`J9PJ~MtMZ=PnsJBS8>e|D|^ldB|bS1O-8{=Of>2I
> z5UFp2HIwxndd*f at Vqv~tXq{}U{;oQ6rtI^;kdVlV{IOe?u`jrE_-y at huZ3}zMaySn
> zwsqmy5>pe%)^Yk)#_9X?h^nu7_9(?V(%I?ZxB2c$?_+b}nhc1wxFSU`!az|4Hj$Um
> z+dr8iSXjo(C`!)_QH_H{Y)NH~!|pTuOjfQ=F`FmZQ~oEfT&@K3$_XF;v^wp9nL&aH
> z4K>^D;@$Bcv-j3>zBy6x{JvynpWfix)LtnTt(BZ>R5>Q6{-2pEMdnXP=1(z|N*8z;
> zym?o|c~0@)Jx_xOlRt6apTTE=wbIF$r4ldqBtGefBDi5sMpA?Idea?){EPeaUp8LM
> zfZdH~uX=(hxmn5$*<5+Sr1|}z-gWH_rN4_obZyT^!YdY?iKF>9QB_x(&g<tJwsbZK
> zQ#OUfdS3Ptl{a1y&Al^Vwto0k442{gh+2*^OWlCl^aI$n)%@Y1%LIx)?@p7xjx`g*
> z%)4^l?4o4<qrqv_@=G#0FW-i`>L!ibmTa9ZTkfbj_}2c|j3V^}reyxMI!RH}104{W
> zV8h7~p~+^xnAuRuPostcCMCKqtBMD$Hobfbv9YPYQnd_cvaZYnzT8d-E9<0fvR%-W
> zClgS<E>S{KD-Qng4bH3_!N6az?a2#&6JvUIb`CH!g^TV6K?7IIKS}?M-k2_cQtJgR
> z?j&P`zX7K_I~q8}sXn1ufG9WTEr@)WT>Vo&_nY%2#{`e?EZ}*(OYYCcK_<${4&z4o
> z_tS7YnqVt4SdL9&Jzlp5f at tl&e3s3Nd$`UP8<lBkILt=>-u)VXS*#Gg4r(Y~C!bkl
> z-5Z&{+X=6H`S{T5f48;ugHar)A?|wnH>MV`otIot1MS*M^gkmI|MuixK;6I9{da|b
> z>UJ9w9L=|{_{nXw8alR!qssi$u|lAD-rxl1krzFg|HXb+Xf7tn({DZoF$vdr#DPX>
> za_#AduA+E*2U<o9ehFC<uE>%KJDRD4tVq8xlO}&<+`{ntXQxa0axsaoK1_F5jsDAz
> zhE2`- at 0OXvq$xA*31X>5KeigVw5}PtKhJ7oQ|5bfiqMxeEbf1;50c<?)F>v6vN^JN
> z9T9On0lYyLYk)YTVPG?@U5C+$VTIUe1V!wUp at R^xgv9rMP|tteps?_N)%{!He{Aqi
> zYl++6g*Dh?$8({yjY1)Oj(EV@?z|9*zyo&BY;~UZm;wANjpXc;E~HKb!1ctl<#1D2
> z;B<<=u01eJ3Vf8e^Su^f?B3?uk7Vzpb+0Yn&I%0SVI9%IP3D=TW$5~t4*j~)LL03)
> zpgtXb>Ys?Xoy<oc3wlquf4~BJQhoT%(<ybI(csbGElg5|&eLO at g@Uo6=7e=*I|Ccw
> z=}kixF5ZymJEDUo-8XU{>+kN6ncElF_(yVNvBQFir0l3 at s{Q;S8ZY?5#8vPc>9Y5q
> zb5dncBu$6lcIBW=-NUV)x$Wa`Dw3Nu_q+CB!nl~t>Ep-Or1jt!KG5 at OIT>cpA_2UU
> ztL{?{`q at n=@pc0Uog;yIgn}M7REJi!(qLV0;s at yKX_5WIaoKFy6I^zN^)q^wv%!lK
> zE*pff=&>Fq2X6Jj8J)4W@#xZhsEx&wKH$W8n%F!Z>F<~^Hs(oNhwanB*D>sCMZ~H8
> z94#S)+i(<TM)r?*#(D|2ni6Dj;{}GPLq|v3dCS#8w&Z}gsoE`inZ+BH?lGKIy>!<~
> zwuBLGBi=q14k`)M%|`t=mq0DoHOY#wADZ;opEKH6&|?sq%SmOZhDrBW&<K4Akj at OB
> zXLDEo^j3Z}AaA)o{LzsePXUezI%H7Z3$wq2bo^3}bqzf*K*5>tvd5)+psn8ZxIm@$
> z%d>p#oxO#Xa|w6bLOVIAS)SG$uvtd;pa-MJW7(|_%<x;o_AyI`YV5jJuyauFYggq~
> zhV}T>0?#J%J2!(DEcu}3>P_##Pd#~M7Q0+xM%Ov*(B3(I34zn at xC-3?fbIj$iFV8C
> z=D6mW&Vov)4)aHKL&2dy%~CVR9~)EvuNtv|=aVD{1P6q;2WzND0~u#!bxSl`uL+i(
> z)&p}j4rRy$9=tiSpxyd;tXYDxq#Cb5`M5$~uj;uLyqZ4M4$eZ^&KKGL4%6S(Z4ble
> zlpmbqIB19`<ib#s<@IXB6n^@1z5dSL!%Uo?q-<m<1yq6yKWSOzh7Xd^4QbADE$RvR
> zGrS;e+&ZY#aZvq!=b46?7q9dOClj(3b2_34u-g38Pf!ec at B4*C!O0@*gl at B3^shd3
> zc)o%G6#6$TSQ&E~JsvsE2*F_%Z at X|8aVbfbT-?dERR8VDp7Jrhl}#I<$BCcbO?!sE
> zH*ML|A_3%jVkas&M#r*-oXkjaL#vEeNA+J*%<#@mAlKanx>emqUFo+4+&{LSZaVru
> z7cC2Ho?c at 9@kat>*XI9_6g9Pi9F7`f37YfsgYZ+!7knPwP8Hitu3<ywzt{5>4XFf<
> z7LD7OxU`9 at jIlb0*@!LYysz(_I551)1sB6}AGT+=Z!@=GouAgyZ-*@hNW&V}*Vb3T
> z{D|J|YlG&Y2-)6AZ{m~C*J|r-99{BBBs%@H*$Y8Xrl5E&9O at _9AG)6$$GjiGS$;iV
> zo_2xUGjAgfA1>ZPU1<9eYIh|U8te7r4Xus(pm at MuO?hATIZ?;>@{{+1ri&NS^H7b1
> z=^s*Hd5<DxN!(ot#wT7iT~QvFs#`RrOq;OTj_7(gm-Dg0VFD|w at 6hQh+l`<LvA4wE
> zb~j8SpMozAs~mS9%nrK{$3oubUO}y?eZ7jj=c)Di8qwfrC7%5783Xj$3^-{oB@*3V
> zAMqVi;m9AL{;>fnQ7B+(UAusokAz4XbpJC@)Z}0k<A6 at WujZK_;bQjQ$KwD*iQfJo
> zZ3X`u{itQd<~(Wh#IHW%y~*C8P^#8oFs|-=X9J_vvfk=My|0(P3+b=t$JHm=r%Upu
> z#^1M~9Vfmmq3cBKO+0%$3k_!1WH4P0zz#m&rvKBQr}B=XzQsE1TR0_W(UOPt-K8tC
> zUWB}#c?(!pRuZRo4VgL8+5+~+ZNj<D%mt`6SyPq at j!UVXJ_Wk7?jLH*_%=!8OyBl-
> zg;5z_l(We-Px|zkHYbkFf^TzThGI(hxCre$SYM1Ga2 at lcXzC3;?5ICz6<!et&pymr
> zQB<QZ^Y at 6)o;p6CPN`SGV^7pgw@|}U|GgocIDe7wz-R|$h;^|3Ge`VyPyRDu++qp$
> zrO4V;hkFR+<-~)(qgnkpr+rK^gtA2%&Wt{XHz6&q4!U$krqjKT{GJINi{LAW_>S<s
> zq at 6R$S*f)d$Dzba74vxoe6aAHrpU?nbc00;Tza<@4Gv=-{dv9A8|mU_s;uwAOd9;4
> z8<c<c0QS7eG7m!oKk{;OZ+B14H9{h+JaK?SM5nmIzj-uIt1Y_!Uz7Z|>HizAo<ElB
> z!@%M0XKvUVHX7b(?84VUA7KJF1m!%N<c2J&`-?1B1iW`QbII?vx(_M_P*4)$Kl*!4
> z2P+>v&8cjKj%)?d$yd;T&b?e`$2WzQnQ at oXyZMwuJ%suE)Ky(oM=w8=k7?W_RCja`
> zN6$hc#L^4p50^WfDCM1Q+MLupC+-FstLrHl=tRntq?<;LOrYDu-MAWXTaz8<pkac5
> zAR~%ZCK;J64QjkaoI>&w1X+xWp*9G#hreUW-#NlRslvq3>w0*GtfH-s;j=W)`cvWG
> zV<pMWV>d-kY};t#Q4V8Dd3X-*&bYUk-Z2;i7U5NPco3h at R^utqMo^kXBY=dPXx6<W
> zEmNi>JH9k~PC&}fVWHF@#q<+5>%xW#E%C|?*9?uP1_n*#%1Q6fyI0eL9V<V^3YQLa
> zbTCy?KvH$>(i8G#FzagM%lkC4cq1=?AO(8$?aIP4%ch7gbWR$c>t%mN$~#m|*FW98
> zJZROkRYFU+^u&P|frGayq<D{o5)_<pk9p_cyoa#KX6$zDFq)#v9rExR)pKYFRR-bU
> z4LZ}S!BxYzZKK#m^6ce)xrkqqWWn at cuH7L5Pt1%v>Bpr9VLr9!r`IB#3hF<c3X)6h
> zWs#X<&ver7QF<(!0ZnGcRMg#zGWBLBUC(9&`Psox2lU#XZxk@%dsbWU>k1z*D6$pS
> z7rGGWG*EG;QKI!L3FS&_Iwm4z6_yCQ%Nl3i9(XrAli*I<%%p0qZt1z`Wc-VJB%Yv^
> zqntdG`0?}o8LxzP5Zy(;spu9S%zVCxN at dy$X?i6d4l>XQL>hG<5wNH{CwC|bSL1?$
> z+y)<7_G&-Sl_i6jn5M!=B+MtP$cM?7iE`9C$O(~A%d#zRWfQ@~rKAlGLs`V6*!b+K
> zfi8`#nq<7Vp9;+TTJvo{F-pi&iJ-u8GU=XuP#nT1TPa4E<w;V~^btr>5;uaTqN&^3
> zF8}5U|0?`jT?<3X_t5YBnL0Jot7y44NB|Vn$jd`TR#g7XFpk(crRvs^V<ZfK1&u#v
> zAV8OX&3%(icB5|q@?K1(1Oxw2U%M~<P;m-=ke)3ZsPpSSoj-`QtkeF&kuK at a8ZlxL
> zs$L5b;Ar at KOQL}{UlFFoUTfkvN9MSgKdVt)2U(LcBiV7(6K8M#rd&Vwt&E82Dwg-A
> zzZc{rgF9cGsl6nSuC7kI>v;Ip@#!8>Ow(z1$y$QoR%qXDIizyL_H3aQiGXu;W*c83
> z=>=Ly7?{tcHWcCQRk=ezNOl+HD+M80_d#(Sl!?GTo!%&9;?EmIp**7tN>qWTDnP!m
> zf$3@^RW1gpIgsH)-chuC(A{<WI(?J+D|!<|j<#YkDb~tE%e0OkGDQd4N$Yg*iI`9o
> zr;HNuw0{3EyimY`*ZLj$oc;dfPj^d?&_dbD5gY)LLz{OJgy4EhX6Mii!hz8SMe4Pm
> zOUvB4F9e$^anKD`qsmUa{F9msNRjosL2BS%Fe}(@*@P>#73-ed{}qT&{|&QFMSaxd
> zPY{}p0~t#YCpB`z2?l!3=nNLx;6MTrta*oZ9+Wr{bPs}Cz-NEX5F?M at MF)1}_7c*)
> zz5yLMpaMZ)zc~xTpCf1;`|C7!Px->S>JhS()C6%$2v`fd^2)_ms_A_)o-21lTK0R>
> z<}+6m5ahNXR5M3-ET8~6s(>cMGuOexuPKY81PhJ6$JMeLLmx?CHgUG#={|)>(3^*e
> z%Kilb25eq!{DkL3$3lQ9GYMpr#ezU`<S11xiE8s9T at DSfSgfS+VlQ8Rvv&h|P^NNY
> zJ~DB}<N)~-iA6?y>h~HFNoRN$aPFp*LG`oDJNxDCA7{BLdM3I-nt^>GbLMm3-i$47
> zFKsS5BvGlCp21_SqoL%3Hw4)2^dbuGosH`G5~Nr at D*~L#o{|W-AvLb9qQox;f at D%s
> zYVbEsFE~ujRZIX%vR%n|NPeUM8G=&-Lr2-2Es!$qaj1pDiY}JC++2~t?cpFzAV<dU
> zdW;rl*z&Fp?$~Y_9`LBHCYWaC$yxXn2=ZtXX0YL-+1(;m16daB{#;>wQW|PIVOQpr
> zktq^Lb(M{51btE{?ja!R_;gp$gc7uIgi^us)gDAWp(HxUd4kX`2#ed*!Dd!;fhuWu
> zJC0}7+qWPE!offn!K}R~NHMQ_;DX8k*)x-{UQqIRAR-Jhb6^XXW~tpH(7cP><zsKf
> zrf@(@J_C(4d08W~;xp}B{PW^-|LY426+BeNx*!GaXghAyXh!h{Ef at f!9GyEFZ%+X+
> z2+{?TX|80Fq9P#CnK}{&LXLkEoksOqi3-IO at -IQ6a}JjQ_s#YER1|gQ>ME*RgT3he
> zKG0WG%!(Ip0?xW|wNvO?2;@0I*~U+lzR)s9{o}9_Htm@$U7o)tzex6@;DCFJ at 8Tbt
> z^DB2n->C$=K`V}-ry0S_uV1~kF57-&he{r#quxawP^$;|8Y7U2FjY<3wOclGb3G at o
> z*Ht_8f7lChh+Q`MF{CUQ4)XjX*_ZCQJ{Xu)*4^WC$TnGIApI#+am};m4**<Bm}UA7
> zP-v<$l5~K7%Pnj1dUBf-p~+DA<CiZ~)~-Y#<W7PK<?=^J?=a%i!mGW59=G$(K}Yct
> zPhC?z0>efg?VMxSLaG^p?iGeLFPY>!e}!Z`Fz#LWC{aN=U7o(ot8=ChD;Lw}bXvRe
> z#M<93J>_Fb3{2YXCcS<k`-lU}sR(imV(i&L0L&+9QCxVLd}PTKEJYeDdFao2<2-7L
> z?v|5iqM3q(C6*%fT8$1UZ>b`h1Q{B(*C<+B<$=pKKjto}+uUerOjSU9onarTYGpI@
> zj0m53IxOW*o!9sEwT^PX$!=_x^y)h-d~MO#A-LiZ#MF^6b#<;A4<{hkfb4tmIV8vC
> zgih<&Wsy(i;Lqos;TM<sFHBri0f$z&PQE|n-vsz#OmorKGFv+XuAZiEj!K11q~(c~
> z^vJ$P$`fd)`Oe;JX0FciF8{5L4}C>6A6Q)pK at c8vnEcWf4A37yX@jC)H>y6<V)-Nd
> z<l60Q=(qotQ+;*=^s9|=kOv22HRv$a?cP{$c@%R@?KjaZ{^+`y|1<!-?qU7G8YDk6
> z{w79D0 at _TonY2ZH5`&S^egrFssV0811|wHU5iQ89nYh91>^r|&mZtJ}wfz0l78u1Q
> zoXA1O|MUJ1>h?dBn-!z`o0sq+AyydqvPG)f6i2S0 at l$t~El{AqLV!JmJ^^><KjTed
> zk-G}V=tb^W=CY%t=Sr`yu6}Qqf;2yJv*>GBFs`-b`>$nb5W|lhLNahtnb#g-^^k;c
> ziKNT@@wj;qjFRz?fhx(qwV7u^qU_04=~CPkK0n-mFr6kIP3b0rNLLgB2fdMx)K}N*
> z|Dq{(x&Di$^ekp4KNPe(z5$oC|4ma?xsM`=i8p%!Xt7&<76m^;-i~+iqRpx4M}wy-
> za0pn^^s|;mzd6<P%AHJtM~k>7J|RP?H?2i2_Pg7y at LUmAfgtzM+^p-mZ5IqP<r?xc
> zHFkIAFP%h&dQFADvF?1t$|j6CF`|i$e-Xaz&?73SauI!3oV#hI$~a)7O+EF-tWLWG
> zUtZ-V>(NJR+C-F_|K4+I>WogWjFfrWAxs`1%*>I{n1TQ`1MHtllOH`x{s&5u%aL`e
> zPyHIt)e<vTIC%6U at kFx&mDgw%>xuvUjmq~aSrNGXb|EzB9)^|<e_sEV-)(HBmfxPw
> zirF~1gRbwqz}tIvNcUVKY_rP<XnCk^D}9hKo;V+?mFFq{=gPPAjioI!OCSE`!W9{o
> z^#zgGL5h}_?8j&u3>|O^p2`79Gri7{)XF_On{N3`_pX!kd at wkI{Ny1aYzgn=Td=u6
> zwwSIx6=f}vgbByo{I4Kz<*N_&xRl4d&CZERCDj>?aY`FB1JBn$A}Og=ex1mRPXU=G
> zKS at VZ%)Y7VcGK<eNsy?X(H&|qR73?y at LA6Y6uMjZx}^#YNcp>LBTOcb7A^ols+8kr
> zN4f}`)J1{kT^kRyNHr8p&g#%1i~jwxR{|Zzs53JojkI3DJ0Er*h`v^1taa at 3>5&m5
> z0!x~z(d&_VR!a?jF5SkpW2R=$pZ2!_UcWt9 at TiWY>c`6YL?UE#@PNb`lorEUi{^JD
> zh>7zD*D8<*FR1^BGjpFg+zsE{jqqO-q!NgEgA}BW_3_<Vk74#LJd6E&q@&xR7^?tm
> z^$1L^jkM$Lq<trispIa;1sh`M at g@%o{o at RuzTFe>%ntaCH3Pq!$U6NoFl4sC+I!rt
> z(*nOSq&t0|zIbZ2-JCXJGipXDaJyTRm*<P9Gj4nOeDb4P;3ZnLbr-{e2hB_ZC-M`P
> zbyLad0x4m7R+kzhO6mwku}v at l$sRGH<TgcA&+UC7i_0cJq<tnFkvG8GS6nn+YeCwG
> zFq1yJ$%$b|es2e0Rxbw}lX^ptyUZA)Hd7I68#`(t5)KCKi2B4$8?n8DH^1v$=KP+$
> z?5tbJgCItfe8B~|*$99{{*=d;Li93|?#^t1#*G7htXJ&(T(`@wOfBtP&7aP1t6>JR
> zP5&J48Q9r7yqP-_YH`3ZSgIu!_PSSuvc9y7{KJW5eFA;ged|9Sm@%P;2xq>UypsRF
> z$wysov1B~E3VY7hz+?<*B%g+e?-nSd6r6~aAw`rILh+M?Y46(@H=oAUz8td0ek7Xu
> zEu7M+Kqc~j&{NlX;VT3e4|2QVat)aZR8io%5?o|xD8-N_d>zZUJ!(B{qunk~N0}^}
> zsV}#A_LtCU->w?XrF|-Rz?6<6S&6FLoFej*-yS)5bS8rV2LW3{TU28xV at DC+VdxOO
> z@<yoA<30KhWua_^9&Pm}z6jL<(*(wpPq!9B at 4m8DD%f*XetRgn_F&77Fr^_I%KYM_
> z)LBg5gnoBF`Tw919i0FF(})NE(1;VUuZsH*y9k4^W3oAccAUdE&4QfVF;?uxE2Fuz
> z{@N2}4{;<YF^UR#w}Fc0<gJ%`)^h??iycZc*P}Dn29;MnHh!C8SpLr=ni_0%Om8Z|
> zQ;w6Q++%=t+s+KVzv^E^Ur~k_aAXIW<QY(~Bv)<l;6~0-5?)_1rGEdKpOIXeTBKg3
> zF52#(QyxUgau0a2G%v!0gWg00A%fg$&w)sS#8=3_u?GKDaCNuJu<(1S^fm~RLToRF
> zT2f7|*&zn<Qrj~ACScCiqWyO^X#G$(XhEUNU?`!hQi+h8FOHfdTWEZ(-jUWZwIfQC
> zZjy(uyK06KNAI|Gr{M{vdhU|bSs)E_+yb&jb~LDx4Wrl)b+aiVvnjMh)B{Rj&kUv1
> z19tQ+?3aSUa5c(ESIVDCqe1)S6xlMAc*<SsN980=W#tJ`v|#e&{^M6x3eBIGlhAfP
> zdi}=g;g96eEayBs4TKDO;VRGhc*{B2`MWy)uL+o0I>PcbSSvMJx(jEeennM>r}5h{
> z>EaG3F-X*&uPWtJ_h at fHkp+4XSr{1=BB(q~U43YjXQ(v)@yZ6Tc<SqUwSKdgP4Wty
> zWOcR1pQ{;q!zR^opAjjQ6r<~JDpOxk>I$91H5=)y?DV7e&R8vaa0b3inXl+9u at NMh
> z5n<#aeY8Dpwf5Dt*9tGKJ^LGCAb~;*t~|TBv`kP;Bx!mOHSwidF<jYHx5-kZp at 0S|
> zNacAvUNQEOmQ`2R!gTZ@;s;;7ZsE9>1;0rFUjNWpR(l9CAZu5bj>Z6`Xx$~alLA59
> ztl~Qe2%YVv!+{WjMgrLSIO1P4o^~W2E at X`Kag)WOk19fnrb`J5*DN#7D<Dn`z+3e7
> zesem!VbMw~w45lY@%LZT)MP5Vvs&x^<ETaYhvh}kyMAX7*qNxD<h18y!+A_yi|okt
> zzftaN8;)WWgbi2*Mr(1Qrp1X_NfN3E{e;@{4{7yZ)&;HnZwmii-M{fzu44!TxIpAT
> zI9z4|@P!&c0SE#JZN;EHx}3sB$ap#FA&I~xASRgGLuEu4kJbhE8BwJ3^Qtx6IPzz*
> pfY5(^D at GRJ0rcRo?w{d+x3;sgB{vq}cYgsuR#Hi#O3Wzee*yMzYQ+Em
>
> literal 0
> HcmV?d00001
>
> diff --git a/user/index.rst b/user/index.rst
> index 8cbcd1b..a764fe8 100644
> --- a/user/index.rst
> +++ b/user/index.rst
> @@ -52,6 +52,8 @@ to the Community Project hosted at http://www.rtems.org/
> .
>
>      tools/index
>
> +        tracing/index
> +
>      support/index
>
>      glossary/index
> diff --git a/user/tracing/captureengine.rst b/user/tracing/captureengine.
> rst
> new file mode 100644
> index 0000000..f0e2b01
> --- /dev/null
> +++ b/user/tracing/captureengine.rst
> @@ -0,0 +1,10 @@
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. comment: All rights reserved.
> +
> +.. _capturengine:
> +
> +Capture Engine
> +**************
> +
> +[TBD]
> diff --git a/user/tracing/development.rst b/user/tracing/development.rst
> new file mode 100644
> index 0000000..ad74d8f
> --- /dev/null
> +++ b/user/tracing/development.rst
> @@ -0,0 +1,12 @@
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. comment: All rights reserved.
> +
> +.. _development:
> +
> +Tracing Development
> +*******************
> +
> +RTEMS trace is an open source project currently under development.
> +
> +This section can contain how to build the rtems-tools after making
> changes to the trace linker.
> diff --git a/user/tracing/index.rst b/user/tracing/index.rst
> new file mode 100644
> index 0000000..d2d9993
> --- /dev/null
> +++ b/user/tracing/index.rst
> @@ -0,0 +1,25 @@
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. comment: All rights reserved.
> +
> +.. _tracing-framework:
> +
> +RTEMS Tracing Framework
> +***********************
> +.. index:: Tracing Framework
> +
> +RTEMS Tracing Framework is an on-target software based system which helps
> track
> +the ongoings inside applications, 3rd party packages, and the kernel in
> real time.
> +
> +Software based tracing is a complex process which requires components on
> both the
> +target and the host to work together. However its portability across all
> architectures
> +and board support packages makes it a useful asset. A key requirement in
> RTEMS trace process
> +is to take existing code in compiled format (ELF) and instrument it in
> order to log various events
> +and records in real time. However instrumenting of the code for tracing
> should happen without rebuilding
> +the code from the source and without annotating the source with trace
> code.
> +
> +.. toctree::
> +
> +   introduction
> +   usecases
> +   development
> diff --git a/user/tracing/introduction.rst b/user/tracing/introduction.rst
> new file mode 100644
> index 0000000..596bc25
> --- /dev/null
> +++ b/user/tracing/introduction.rst
> @@ -0,0 +1,97 @@
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. comment: All rights reserved.
> +
> +.. _introduction:
> +
> +Introduction to Tracing
> +***********************
> +
> +Tracing is an important function which has several applications including
> identification of
> +complex threading, detection of deadlocks, tracing functions along with
> their argument values,
> +and return values through progression of several function calls and audit
> the performance of an
> +application according to required specifications.
> +
> +RTEMS tracing framework is under development and welcomes contribution by
> users.
> +
> +RTEMS has the following trace components:
> +
> +- RTEMS :ref:`tracelinker`
> +- RTEMS :ref:`capturengine`
> +- Common Trace Format Integration
> +
> +
> +RTEMS trace framework can currently function using the following methods:
> +
> +.. _tracebuffering:
> +
> +RTEMS Trace Using Trace Buffering
> +=================================
> +
> +TBD
> +
> +.. _printk:
> +
> +RTEMS Trace Using Printk
> +========================
> +
> +TBD
> +
> +RTEMS Trace Using CTF
> +=====================
> +
> +`Common Trace Format <http://diamon.org/ctf/>`_ (CTF) is a binary trace
> format which is fast to write
> +and has great flexibility. It allows traces to be developed by bare-metal
> applications or by any
> +other C/C++ system. RTEMS tracing framework can benefit from these
> features of CTF.
> +
> +A typical CTF *trace* consists of multiple *streams* of binary *events*.
> The *metadata* stream is a mandatory
> +stream which describes the layout of all the other streams in a trace.
> This metadata stream is written
> +using *Trace Stream Description Language* (TSDL).
> +
> +.. figure:: ../../images/user/ctf-trace.png
> +  :align: center
> +  :width: 75%
> +
> +A binary *stream* is further a concatenation of several packets each
> containing the following:
> +
> +- A packet header
> +- An optional packet context
> +- A set of concatenated events each containing:
> + - An event header
> + - A stream-specific context
> + - An event-specific context
> + - A payload
> +
> +.. figure:: ../../images/user/ctf-stream-packet.png
> +  :align: center
> +  :width: 75%
> +
> +All the headers, contexts and payloads are written in TSDL using CTF data
> types. CTF supports a rich set of
> +configurable datatypes which makes it possible to describe a larger
> variety of binary structure. Moreover types
> +in CTF are organized as type classes where type specifications can be
> inherited to allow deriving types. These factors
> +make CTF flexible. CTF enables fast writing of binary data as it usually
> involves appending memory contents, as it is
> +to a binary CTF stream. CTF streams are capable of being sent or received
> over the network without any data being
> +written to disk and hence can be useful in transporting traces from the
> target to the host machine for analysis.
> +
> +Due to these advantages tracing using CTF will prove to be beneficial for
> the users.
> +This method of tracing is currently under development. Currently the
> RTEMS tracing framework is able to output
> +trace data in the form of trace buffers, console output and csv files. A
> conversion tool which transforms
> +these trace output formats to CTF will be viable approach to generating
> CTF traces. In this regard we utilize babeltrace,
> +which is described in the following section.
> +
> +Babeltrace
> +----------
> +
> +Babeltrace is an open source trace format converter which can be used to
> convert RTEMS traces into CTF.
> +It is also a reference parser implementation of CTF. Babeltrace currently
> supports the following output
> +formats for traces:
> +
> +- Text
> +- CTF
> +- CTF-metadata
> +- Dummy
> +- lttng-live
> +
> +Babeltrace comes in the form of a library, python bindings (python3) and
> command line tool called ``babeltrace``.
> +To install babeltrace on your host you can install a distribution package
> or build from source using tarballs or
> +git repositories of babeltrace. Refer to http://diamon.org/babeltrace/
> for further details.
> diff --git a/user/tracing/tracelinker.rst b/user/tracing/tracelinker.rst
> new file mode 100644
> index 0000000..6685367
> --- /dev/null
> +++ b/user/tracing/tracelinker.rst
> @@ -0,0 +1,10 @@
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. comment: All rights reserved.
> +
> +.. _tracelinker:
> +
> +Trace Linker
> +************
> +
> +[TBD]
> diff --git a/user/tracing/usecases.rst b/user/tracing/usecases.rst
> new file mode 100644
> index 0000000..418e8b8
> --- /dev/null
> +++ b/user/tracing/usecases.rst
> @@ -0,0 +1,109 @@
> +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
> +
> +.. comment: All rights reserved.
> +
> +.. _usecases:
> +
> +Tracing Use Cases
> +*****************
> +
> +Following are the use cases of the tracing framework that are currently
> under development:
> +
> +Function Tracing
> +================
> +
> +Tracing the entry and exit of a function as well as the values of the
> arguments and
> +return values can prove to be an important application for the tracing
> framework.
> +
> +Objective
> +---------
> +
> +This use case can prove to be helpful in debugging of applications for
> the users. It can also
> +be used to understand the working of existing application code bases.
> Capturing of argument and
> +return values maybe useful in tracking unexpected output results from the
> applications.
> +
> +Requirements
> +------------
> +
> +The current tracing framework provides this functionality with
> :ref:`tracebuffering`. The output is
> +provided in the form of printing on console or saving the buffer in the
> form of a bin file. In order to
> +develop this use case using CTF we need to be able to convert either the
> bin file or console output to CTF.
> +The saved bin file must also first be transported to the host from the
> target for this purpose. On the other
> +hand console output could be written to a text file which can then be
> converted to CTF.
> +
> +Example
> +-------
> +
> +As a start to the development of function tracing using CTF we can work
> on the fileio
> +sample testsuite and trace all the calls to malloc, calloc, free and
> realloc functions.
> +Along with the calls made to these functions the trace must also capture
> the values of
> +their arguments at entry and the return values at function exit. As an
> example of an application
> +having the following progression of function calls:
> +
> +.. code-block:: c
> +
> +  #include <stdlib.h>
> +  int main(int argc, char** argv)
> +  {
> +    int* a = malloc(sizeof(int));
> +    free(a);
> +    a = calloc(1, sizeof(int));
> +    return 0;
> +  }
> +
> +
> +The trace of such an application must be output of the following kind:
> +
> +.. code-block:: shell
> +
> +  Timestamp1    entry of malloc > argument value
> +  Timestamp2    exit of malloc < return value
> +  Timestamp3    entry of free > argument value
> +  Timestamp4    exit of free < return value (null)
> +  Timestamp5    entry of calloc > argument1 value, argument2 value
> +  Timestamp6    exit of calloc < return value1
> +
> +There could be additional columns of details including current priority,
> task state etc.
> +
> +
> +Tracing Thread Operations
> +=========================
> +
> +Tracing thread creation, switching and termination operation in a
> thread's lifetime within an application.
> +
> +Objective
> +---------
> +
> +Real time applications inherently utilize parallel programming which
> entails several
> +tasks executing simultaneously and competing for common resources. On
> single processor systems
> +the CPU performs context switching between each of these tasks rapidly.
> By tracing the creation and
> +termination of tasks as well as the context switches between them one can
> possibly identify probable race
> +conditions or complex threading operations.
> +
> +Requirements
> +------------
> +
> +[TBD]
> +
> +Example
> +-------
> +
> +A sample trace tracking two tasks Ta and Tb could have an output of the
> following kind:
> +
> +.. code-block:: shell
> +
> +  Timestamp1 taskid Ta CREATED
> +  Timestamp1 taskid Ta SWITCHED-IN
> +  Timestamp1 taskid Ta BEGIN
> +  Timestamp1 taskid Tb CREATED
> +  Timestamp1 taskid Ta SWITCHED-OUT
> +  Timestamp1 taskid Tb SWITCHED-IN
> +  Timestamp1 taskid Tb BEGIN
> +  Timestamp1 taskid Tb SWITCHED-OUT
> +  Timestamp1 taskid Tb TERMINATED
> +  Timestamp1 taskid Ta SWITCHED-IN
> +  Timestamp1 taskid Ta SWITCHED-OUT
> +  Timestamp1 taskid Ta TERMINATED
> +
> +
> +
> --
> 2.7.4
>
>
> On Tue, Jun 5, 2018 at 9:54 PM, Gedare Bloom <gedare at rtems.org> wrote:
>
>> On Tue, Jun 5, 2018 at 11:40 AM, Vidushi Vashishth <reachvidu at gmail.com>
>> wrote:
>> > ---
>> >  user/index.rst                |  2 +
>> >  user/tracing/development.rst  | 12 ++++++
>> >  user/tracing/index.rst        | 25 ++++++++++++
>> >  user/tracing/introduction.rst | 90 ++++++++++++++++++++++++++++++
>> +++++++++++++
>> >  user/tracing/usecases.rst     | 77 ++++++++++++++++++++++++++++++
>> ++++++
>> >  5 files changed, 206 insertions(+)
>> >  create mode 100644 user/tracing/development.rst
>> >  create mode 100644 user/tracing/index.rst
>> >  create mode 100644 user/tracing/introduction.rst
>> >  create mode 100644 user/tracing/usecases.rst
>> >
>> > diff --git a/user/index.rst b/user/index.rst
>> > index 8cbcd1b..a764fe8 100644
>> > --- a/user/index.rst
>> > +++ b/user/index.rst
>> > @@ -52,6 +52,8 @@ to the Community Project hosted at
>> http://www.rtems.org/.
>> >
>> >         tools/index
>> >
>> > +        tracing/index
>> > +
>> >         support/index
>> >
>> >         glossary/index
>> > diff --git a/user/tracing/development.rst b/user/tracing/development.rst
>> > new file mode 100644
>> > index 0000000..ad74d8f
>> > --- /dev/null
>> > +++ b/user/tracing/development.rst
>> > @@ -0,0 +1,12 @@
>> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
>> > +
>> > +.. comment: All rights reserved.
>> > +
>> > +.. _development:
>> > +
>> > +Tracing Development
>> > +*******************
>> > +
>> > +RTEMS trace is an open source project currently under development.
>> > +
>> > +This section can contain how to build the rtems-tools after making
>> changes to the trace linker.
>> > diff --git a/user/tracing/index.rst b/user/tracing/index.rst
>> > new file mode 100644
>> > index 0000000..ad22439
>> > --- /dev/null
>> > +++ b/user/tracing/index.rst
>> > @@ -0,0 +1,25 @@
>> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
>> > +
>> > +.. comment: All rights reserved.
>> > +
>> > +.. _tracing-framework:
>> > +
>> > +RTEMS Tracing Framework
>> > +***********************
>> > +.. index:: Tracing Framework
>> > +
>> > +RTEMS Tracing Framework is an on-target software based system which
>> helps track
>> > +the ongoings inside applications, 3rd party packages and the kernel in
>> real time.
>> > +
>>
>> I don't know how it is elsewhere, but I would prefer to see the Oxford
>> comma here, i.e., "3rd party packages, and the kernel"
>>
>> > +Software based tracing is a complex process which requires components
>> on both the
>> > +target and the host to work together. However its portability across
>> all architectures
>> > +and board support packages makes it a useful asset. A key requirement
>> in RTEMS trace process
>> > +is to take existing code in compiled format (ELF) and instrument it in
>> order to log various events
>> > +and records in real time. However instrumenting of the code for
>> tracing should happen without rebuilding
>> > +the code from the source and without annotating the source with trace
>> code.
>> > +
>> > +.. toctree::
>> > +
>> > +   introduction
>> > +   usecases
>> > +   development
>> > diff --git a/user/tracing/introduction.rst b/user/tracing/
>> introduction.rst
>> > new file mode 100644
>> > index 0000000..3314447
>> > --- /dev/null
>> > +++ b/user/tracing/introduction.rst
>> > @@ -0,0 +1,90 @@
>> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
>> > +
>> > +.. comment: All rights reserved.
>> > +
>> > +.. _introduction:
>> > +
>> > +Introduction to Tracing
>> > +***********************
>> > +
>> > +Tracing is an important function which has several applications
>> including identification of
>> > +complex threading, detection of deadlocks, tracing functions along
>> with their argument values,
>> > +and return values through progression of several function calls and
>> audit the performance of an
>> > +application according to required specifications.
>> > +
>> > +RTEMS tracing framework is under development and welcomes contribution
>> by users.
>> > +
>> > +RTEMS has the following trace components:
>> > +
>> > +- RTEMS Trace Linker
>> > +- Capture Engine
>> > +- Common Trace Format Integration
>> > +
>> > +.. note::
>> > +
>> > +        I could create separate pages to explain the aforementioned
>> components in detail.
>> > +
>> Remove this note, and create/link the separate pages with the "TBD" stub.
>>
>> > +
>> > +RTEMS trace framework can currently function using the following
>> methods:
>> > +
>> > +RTEMS Trace Using Trace Buffering
>> > +=================================
>> > +
>> > +To be completed
>> > +
>> > +RTEMS Trace Using Printk
>> > +========================
>> > +
>> > +To be completed
>> > +
>> > +RTEMS Trace Using CTF
>> > +=====================
>> > +
>> > +`Common Trace Format <http://diamon.org/ctf/>`_ is a binary trace
>> format which is fast to write
>> > +and has great flexibility. It allows traces to be developed by
>> bare-metal applications or by any
>> > +other C/C++ system. RTEMS tracing framework can benefit from these
>> features of CTF.
>> > +
>> > +A typical CTF *trace* consists of multiple *streams* of binary
>> *events*. It is upto us how many
>> > +streams we want to divide our tracer generated events into. The
>> *metadata* stream is a mandatory
>>
>> Delete "It is upto us ... events into." This is an unnecessary
>> statement in user documentation.
>>
>> > +stream which describes the layout of all the other streams in a trace.
>> This metadata stream is written
>> > +using *Trace Stream Description Language* (TSDL).
>> > +
>> > +A binary *stream* is further a concatenation of several packets each
>> containing the following:
>> > +
>> > +- A header
>>
>> "A packet header" maybe better, more precise?
>>
>> > +- An optional context
>>
>> "packet context" ?
>>
>> > +- A set of concatenated events each containing:
>> > + - A header
>>
>> "An event header" ?
>>
>> > + - A stream-specific context
>> > + - An event-specific context
>> > + - A payload
>> > +
>>
>> On second thought, it's not clear to me if a user needs this much
>> detail about what is happening inside CTF. They want to know what are
>> the advantages/disadvantages and how do I use it. These details about
>> the packet formats may be superfluous, I guess that remains to be
>> seen.
>>
>> > +This method of tracing is currently under development and can utilise
>> the following 3rd party package:
>>
>> Rewrite this sentence to better introduce the reader to the need that
>> is filled by babeltrace.
>>
>> > +
>> > +Babeltrace
>> > +----------
>> > +
>> > +Babeltrace is an open source trace format converter which can be used
>> to convert RTEMS traces into CTF.
>> > +It is also a reference parser implementation of CTF. Babeltrace
>> currently supports the following output
>> > +formats for traces:
>> > +
>> > +- Text
>> > +- CTF
>> > +- CTF-metadata
>> > +- Dummy
>> > +- lttng-live
>> > +
>> > +Babeltrace comes in the form of a library, python bindings (python3)
>> and command line tool called ``babeltrace``.
>> > +To install babeltrace on your host you can follow one of the following
>> methods:
>> > +
>> > +Using Distribution Packages:
>> > +
>> > +1) On ubuntu/debian run: ``sudo apt-get install babeltrace``
>> > +
>> > +2) On fedora run: ``sudo yum install babeltrace``
>> > +
>> > +3) On Arch linux run: ``yaourt -S babeltrace`` or ``yaourt -S
>> babeltrace-git`` for the latest git version
>> > +
>>
>> I would just refer the reader to the babeltrace instructions
>> themselves. We don't want to provide an exhaustive list here.
>>
>> > +
>> > +You can also build from source using tarballs or git repositories of
>> babeltrace. Refer to http://diamon.org/babeltrace/
>> > +for further details.
>>
>> Yes, just refer to the URL and be done with it.
>>
>> > diff --git a/user/tracing/usecases.rst b/user/tracing/usecases.rst
>> > new file mode 100644
>> > index 0000000..323fe15
>> > --- /dev/null
>> > +++ b/user/tracing/usecases.rst
>> > @@ -0,0 +1,77 @@
>> > +.. comment SPDX-License-Identifier: CC-BY-SA-4.0
>> > +
>> > +.. comment: All rights reserved.
>> > +
>> > +.. _usecases:
>> > +
>> > +Tracing Use Cases
>> > +*****************
>> > +
>> > +Following are the use cases of the tracing framework that are
>> currently under development:
>> > +
>> > +Function Tracing
>> > +================
>> > +
>> > +Tracing the entry and exit of a function as well as the values of the
>> arguments and
>> > +return values can prove to be an important application for the tracing
>> framework.
>> > +
>>
>> Why is it important? What purpose does it serve? (Debugging aid?
>> Program behavior comprehension?)
>>
>> I suggest you devise a templated approach to describe these use cases.
>> Something like:
>> Name
>> =====
>>
>> Brief description.
>>
>> Objective
>> -------------
>> What purpose this use case intends to accomplish / its goal / user's
>> need filled by it.
>>
>> Requirements
>> ------------------
>> What the use case needs out of the trace to accomplish its purpose.
>>
>> Example
>> ------------
>> Like what you have below.
>>
>>
>> > +As a start to the development of function tracing using CTF we can
>> work on the fileio
>> > +sample testsuit and trace all the calls to malloc, calloc, free and
>> realloc functions.
>>
>> typo: testsuite
>>
>> > +Along with the calls made to these functions the trace must also
>> capture the values of
>> > +their arguments at entry and the return values at function exit. As an
>> example of an application
>> > +having the following progression of function calls:
>> > +
>> > +.. code-block:: c
>> > +
>> > +  #include <stdlib.h>
>> > +  int main(int argc, char** argv)
>> > +  {
>> > +    int* a = malloc(sizeof(int));
>> > +    free(a);
>> > +    a = calloc(1, sizeof(int));
>> > +    return 0;
>> > +  }
>> > +
>> > +
>> > +The trace of such an application must be output of the following kind:
>> > +
>>
>> Eventually, you would be able to show some actual output. For now, you
>> should try to "mock" the expected output as closely as you can.
>>
>> > +.. code-block:: shell
>> > +
>> > +  Timestamp1    entry of malloc > argument value
>> > +  Timestamp2    exit of malloc < return value
>> > +  Timestamp3    entry of free > argument value
>> > +  Timestamp4    exit of free < return value (null)
>> > +  Timestamp5    entry of calloc > argument1 value, argument2 value
>> > +  Timestamp6    exit of calloc < return value1
>> > +
>> > +There could be additional coulmns of details including current
>> priority, task state etc.
>> > +
>>
>> spelling: coulmns.
>>
>> > +
>> > +Tracing Thread Operations
>> > +=========================
>> > +
>>
>> Here you would instantiate a new use case template and fill it in.
>>
>> > +Real time applications inherently utilise parallel programming which
>> entails several
>> > +tasks executing simulataneously and competing for common resources. On
>> single processor systems
>>
>> spelling: simultaneously. Please use a spell checker when writing
>> documentation.
>>
>> > +the CPU performs context switching between each of these tasks
>> rapidly. By tracing the creation and
>> > +termination of tasks as well as the context swicthes between them one
>> can possibly identify probable race
>>
>> sp: swicthes.
>>
>> > +conditions or complex threading operations.
>> > +
>> > +A sample trace tracking two tasks Ta and Tb could have an output of
>> the following kind:
>> > +
>> > +.. code-block:: shell
>> > +
>> > +  Timestamp1 taskid Ta CREATED
>> > +  Timestamp1 taskid Ta SWITCHED-IN
>> > +  Timestamp1 taskid Ta BEGIN
>> > +  Timestamp1 taskid Tb CREATED
>> > +  Timestamp1 taskid Ta SWITCHED-OUT
>> > +  Timestamp1 taskid Tb SWITCHED-IN
>> > +  Timestamp1 taskid Tb BEGIN
>> > +  Timestamp1 taskid Tb SWITCHED-OUT
>> > +  Timestamp1 taskid Tb TERMINATED
>> > +  Timestamp1 taskid Ta SWITCHED-IN
>> > +  Timestamp1 taskid Ta SWITCHED-OUT
>> > +  Timestamp1 taskid Ta TERMINATED
>> > +
>> > +
>> > +
>> > --
>> > 2.7.4
>> >
>> > _______________________________________________
>> > devel mailing list
>> > devel at rtems.org
>> > http://lists.rtems.org/mailman/listinfo/devel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20180606/8692dc10/attachment-0002.html>


More information about the devel mailing list