Co_Routines Support for Oberon

http://www.zinnamturm.eu/downloadsAC.htm#Co_ http://sourceforge.net/projects/ta1/files/co2.0
Josef Templ
Posts: 262
Joined: Tue Sep 17, 2013 6:50 am

Re: Co_Routines Support for Oberon

Post by Josef Templ »

Robert wrote:I am not in a position to add anything of technical significance to this discussion, but just wanted to say I have been reading it with great interest.

I particularly liked the hungry philosophers example; so much so I described it to the (non computer) people I was staying with as a guest last weekend. Their reaction was that the philosophers were not doing any thinking, or they would have thought to buy more forks, or eat with their fingers. I have been teased about forks and thinking every mealtime since.
Robert, the 'dining philosophers' example is a famous example by the early E.W.Dijkstra et.al.
used for showing problems inherent in concurrent programming (with preemptive threads).
In the case of coroutines there is no concurrency and some of the problems don't show up.

- Josef
Dmitry Dagaev
Posts: 68
Joined: Wed Mar 29, 2017 3:58 pm

Re: Co_Routines Support for Oberon

Post by Dmitry Dagaev »

Josef,
Dining philosophers is an example of cooperative multitasking problem in Co_. There is the concurrency for limited resources (forks) among tasks. But there in no necessity of data protection, important for preemptive threads. Semaphores are used for flow control only.
Josef Templ
Posts: 262
Joined: Tue Sep 17, 2013 6:50 am

Re: Co_Routines Support for Oberon

Post by Josef Templ »

Dmitry Dagaev wrote:Josef,
Dining philosophers is an example of cooperative multitasking problem in Co_. There is the concurrency for limited resources (forks) among tasks. But there in no necessity of data protection, important for preemptive threads. Semaphores are used for flow control only.
I know.

- Josef
Josef Templ
Posts: 262
Joined: Tue Sep 17, 2013 6:50 am

Re: Co_Routines Support for Oberon

Post by Josef Templ »

Dmitry Dagaev wrote:Josef,
Performance benefits can be reached for background tasks. Co_ObxActions in background gains 400000 times per BlackBox ObxActions example in execution time. Why? Scheduler uses Services.Action time effectively. See ObxActions above.
I have done a few tests now with an optimized version of Task.Sleep(0)
meaning "as fast as possible" but without blocking the user interface.

When I put the Yield (or Sleep(0)) into the innermost loop I get
about 16 seconds with Co_ and about 13 seconds in my version (for to = 256 and attempts = 400000).
When I start two such threads I get a sum of about 35 seconds in Co_ and
about 20 seconds in my version. The differences are explained by the different scheduling
strategies. I actually didn't use a scheduler but a simpler approach.

The latest build is in http://blackboxframework.org/unstable/i ... a1.838.zip.

Let me add one more comment about a possible misunderstanding:
Kernel.Coroutine and Coroutines.Coroutine are not the same.
Kernel.Coroutine is the low-level implementation part of
Coroutines.Coroutine (the fiber and the stack range info).
Kernel.Coroutine is in no way specific for Coroutines but equally well
suited for any other coroutines package.

- Josef
User avatar
Ivan Denisov
Posts: 362
Joined: Tue Sep 17, 2013 12:21 am
Location: Krasnoyarsk, Russia

Re: Co_Routines Support for Oberon

Post by Ivan Denisov »

Josef, we need to step back to your initial Kernel and move WinApi to Host subsystem. You can see how to do this in my prototype for issue-#156.
http://blackboxframework.org/unstable/i ... a1.836.zip
Now I tested that this is easily can be done with a Hook, so there is no reason to hold this decision for further releases.
Kernel should keep stack and traps abilities. However all the Fibers "kitchen" should be moved from the Kernel to HostCoroutines.
Dmitry Dagaev
Posts: 68
Joined: Wed Mar 29, 2017 3:58 pm

Re: Co_Routines Support for Oberon

Post by Dmitry Dagaev »

Josef Templ wrote:When I put the Yield (or Sleep(0)) into the innermost loop I get
about 16 seconds with Co_ and about 13 seconds in my version (for to = 256 and attempts = 400000).The differences are explained by the different scheduling
strategies.
Good results.
40% load by background tasks is set for Co_ Scheduler by default. The parameter load_pct can be increased in example, but there is one problem. The time period between "(a: Action) Do" is a random variable, and Windows is not realtime system. The cpu load increase results in degradation of time period characteristics: mean is increased, variance is increased even more. So the background available load is limited deliberately.
The Sleep(0) uses "as fast as possible" strategy, so the figures provided match the expectations.
Dmitry Dagaev
Posts: 68
Joined: Wed Mar 29, 2017 3:58 pm

Re: Co_Routines Support for Oberon

Post by Dmitry Dagaev »

Josef Templ wrote: Let me add one more comment about a possible misunderstanding:
Kernel.Coroutine and Coroutines.Coroutine are not the same.
Kernel.Coroutine is the low-level implementation part of
Coroutines.Coroutine (the fiber and the stack range info).
Kernel.Coroutine is in no way specific for Coroutines but equally well
suited for any other coroutines package.
1. Kernel.InitCoroutine is not suited for Co_. At least, I have intensive logic in Co_, where primary := WinApi.ConvertThreadToFiber(0); is used. You are trying to hide this implementation and main.fiber in Kernel.
2. I can change Coroutines implementation in future for efficiency, either in ASSEMBLY or using XDS module for 32-bit BB.
3. I need Linux-portability (ucontext-based) even more than Windows.

Really, I make no decisions here, I'll just explain my opinion.
The proposed new Coroutines package (specially for BlackBox) has architectural problem contradictory to BlackBox style
Design Practices wrote:Split an abstraction into two interfaces, if it needs to be extended independently in two different dimensions.
First dimension is Kernel support: local stacks and trap cleaners. They must be platform-independent and must be located in Kernel.
The second dimension - Coroutines stack switching - must reside somewhere in Host Subsystem, as Ivan Denisov proposed and insisted. Implementation can be based of Fibers, ucontexts, assembly code or XDS COROUTINE. There a lot of things that can be reimplemented in Coroutines with custom Host. Also, connecting existing Co_ software with Kernel meets no problem.

As for Co_, my intentions are different from intentions of BB center. For example, I'm going to make Win-64/Lin-64 port for Co_ with Vishap compiler.
My mission here was to explain Co_ package and to make some proposals for Coroutines Kernel support. It's complete.
If necessary, I'll customize existing Kernel for my tasks with stacks&traps cleaning procedures.
Josef Templ
Posts: 262
Joined: Tue Sep 17, 2013 6:50 am

Re: Co_Routines Support for Oberon

Post by Josef Templ »

Dmitry Dagaev wrote: 1. Kernel.InitCoroutine is not suited for Co_. At least, I have intensive logic in Co_, where primary := WinApi.ConvertThreadToFiber(0); is used. You are trying to hide this implementation and main.fiber in Kernel.
You basically have to replace

Code: Select all

primary: Fiber;
by

Code: Select all

primary: Coroutine;
This is exactly the same situation as in my module Coroutines.
I noticed that whenever there was a call to MarkRegion support routines
there was also a call to the WinApi fibers. They are always coupled.
That's what makes it possible to move it into Kernel.
Then Kernel can do whatever is needed for the Coroutine implementation.
It encapsulates the complete coroutine support in one place leading to two advantages:
1. it gives the coroutine support procedures more flexibility in its implementation, and
2. it avoids inconsistencies by design. It is not possible to switch to one MarkRegion
in the Kernel and to another unrelated fiber outside the Kernel.
They are always kept together and they are always switched synchronously!
(Such errors are very hard to detect and crash the system occasionally in the garbage collector.)
This is a big advantage from my point of view.

I bet the Co_ package will get simpler, not more complicated, by that
and I also bet that it is straightforward to implement.
You replace any call of a fiber operation by the corresponding call of the
Kernel coroutine support. That's the core of it.

From your posted measurements I drew the conclusion that XDS assembly code is
not much different from Windows fibers regarding the performance.
So why should it be exchanged? And if there is any much better implementation
why shouldn't it be used in the first place? I cannot see any practical relevance
for exchangeability here.

- Josef
Josef Templ
Posts: 262
Joined: Tue Sep 17, 2013 6:50 am

Re: Co_Routines Support for Oberon

Post by Josef Templ »

Seeing is believing ;)
Here is a straightforward (1:1) adaptation of your module Co_Routines to the Kernel's coroutine services.

- Josef

StdCoder.Decode ..,, ..Se,...3QwdONl9RhOO9vRbf9b8R7fJHPNGomCrlAyIhgs,CbKBhZ
xi2,CoruKu4qouqm8rtuGfa4.hOO9vRb1Y66wb8RTfQ9vQRtIdvPZHWKqtCa.E.U5UfI16.5Qw
dONlnayKmKKqCLLCJuGqayKm6F9vQ5nsH3.bnayKmKa2,Cor.kay4.qorGqmQCU2,CJuyKtQC9
8P9PP7ONbXmb.2.YzLk5EuT,,6.,.Xe.cU.ktAcoZimBhWhiohgnZcZRC.,.D,0.p.,6.M.EJ2
XkD.6.VQ.k8k.8Mtf.2.410E.c4E.k.0.e0M.6YE.O2I.AU2.3gwJ.,6.Q56.I16.M.,.J,.th
.E66.1s2EI4.1s7k,k,8Mtf.2.W40.e,2.AU.6.e06.2Uw0e.w1s,6.,,5c1kYl,y.IU.k,a.0
Eak,e.0Esk.S0Y,YU0Ky8.,..e,2.AU.Ue.8.07c46.L35.QX0E0G,0Ec4.5c0kTF0S,0kpl.y
10EvE04F.kC4.16E,U.IC0UJ.HE.AUQU.o5QUCU.oHAUcU.Y,QU4U2A.0E.CR,s.9.7.0k,4.5
M0kUk,O.0EDl.S0Y,Q.6,E.qCCE2E0U.Ik,kzrobGoemoW0mVyqj8prKLuaKrKqtin4qEIeGJ0
m4aklyKrGLtaKlsPZvQHMD,d67OPH9RZPS,dJR7F1vN1PNhf6PM0NPO5PNRvQ996v7637IffMN
PO5967uPPPMHfP3N1Jd8HN1HM1H68J7638P1vMLfET9S,tJHfP7vPjvQ,NGP9QNPNPPNR9R19R
HvPR96JN8PM0HOHVuHZ8J,tEd96pND,tETHe4qtiqtmGECpgCJeKoamGEiom8LrKKqin4qk2Co
buodGJEqk2akVWoWCoZyJd4IbSoWypW8JdyIdeGEqHEKHMiHEuoYmoj0pbaIbGpW8JJ0mSMAr7
6RuHduL1eJ1OGNOE38H9e8,ND,FNin4ak2qoeCJeyJVKoj0Jdaoa4IdaJJ0mSsAr765OER8Jze
E90.EOiHEaIbOpUmoYGojOoYuoYCJYeGEqHEgav2YBAV7AcHRe3JeIxf7pdTJeDheIBdChce2Y
xEPiHEaIbGpWod,ZdThcGJ8.jtC,N1HkVyYIJeDZdTZc3pd7hc2JZUg5WnR0GdKoWuIe8pUuIe
ypW83.ntC,N1qk2qUIBfEhcBAV72ZeM9PN9PN9UUQcjJijhioVU2YhgZhM9UUIZdg,HsETfQT1
IZUEcyoYu2Z86duH,tETfQ.7ONQbBAV7QcT3eGxd1JZUgbUAVEJeDRc3ZcJJe33YcQgu2Y1xhm
,AZvgV7A,T1EWEJ0mSAc0ReIJe,RcI3YGhc1xdGZcU2Z1ZiiYeVRifZcZRCHN1HM0HMNTfQPdC
,dETuHNOF1eHrN1Hk2CLu4qliqjCroermeGR0mYuIewc3JevgV7km8LtyKteHE8ob.UYBhn3iu
2Y1ZiiYcdRikBgoRgchgmRbBUaJijhhu2Y1xB.rN1HUdhhkZhu2Y9hgmViQcjJij,.bPOpPNN7
619N7fQN76dPSVPNH9Np76HeH.kdGrk8LuqGK0mbuqdGrr0LJmGEGJt4KrCLnKKtqGR0mVyJc8
3rN1HkWuIWin4ak2qk2gdVBB5uPZ166v76V0I8cI9uE.TfQ.H769eH7uCqU7QeZhhV3icxhmhg
e228pWC2qk2ak2OrkmqKeHEaIbsF.HcQTPRER0mVy4UvU3,Hk4oe,JeBAV7QgpJimhgiZiu2Y1
xB.Es8roqqk8rweHEC2.gV768.P,2Y1,EE00g3EEe00JdyY3,CpmGLWaqt05EEWmle1dHekR0G
meHECIuY6.AZvgV7Ic3xc7pdBAV7685uPZ1M8R7NHvQ0GRqXYhV7gcC76bONd144sCqk203.8p
uuqVyaj,0GImKs0pk8rkqqmGrm8LK0GmKrqqqw4HK0GmK58HR0mY.amRqU7oe,765fC,lr.Q5H
cE.2YugbUQeNR8oZKBcA3Z1xB.N76N9QV0UdU7QdZJiiVHhgoRcjJCU0BgnhgcQgiAhh3CHtCP
M0CKLGorWmlamRqk2km8LtyaUIbx2YcQgUQYU2imBhhVdQbBkU.FdT5f99fQ69,NGReJA7.am4
akWu2ZORR1T1Q5qk203.Ooo8qm8rdGrk8bGxhpZC22.Uu22.EV.Q7UIJit3ZGhii,Ug..Y3V79
,7AHtCPk2i2.1fPkVyKt.WGs8roUiAhh3Cqk2U4BhW,.kRg,.kYuqoGLc8roq4in4cJ2YhJbUg
dVBhiVj,2YYxhihgu2Y0,U0,cH9uJFNPHtC,dH9uJFFLaqqkRkZ.aIraKuCor.QicghiMPYZUY
gjpBHtCME.7vPRHK0mYuIeIeCB6.HtC6Q.,dCv76PvCPM09eHAdiBBV0sCq..sIdPMZHEWmle1
.AZvk2O3,7NTfPe1..U7pcU2imBB66v76ROGN86d8G9eHPM0aklK566pNDuoYQbBA,HMGRPOd1
kRA,9WvU,,QgpJim,v76RWg2YBheHZ8U7,HtCP..umtGrkC4EEunS0GMmGECIYKoV...aIXQgi
AhhFECGEuoY22.i2EdKqqyKvKqVyKt.Wmlu0AZBM098HbOF,dH9uJCKLa4.R0QgisPZ96pV4Bc
ARe3RbBA,L0ME79N5uPZ1.EKocd,Ed.mWHB9.WmYuIew6mGECqImGE0HK2ag6NM8kU.G4gV7g6
0mdcQin4q..68e1.AZUoc7pd,Zd7Jf3hZvgV7I666PM0HMG.22...I8y4.68.H,M1H.,dFHeHU
vgV7g,V0.deQ112Yc..AZvEVUBkU.u5yag2YCxdINE.AZvk2.QA3PMbPN,NDEKQcDpdI,o7AZv
g,.En8rrqKEqHE.ZOF90..QABfQcCvllKLtUvgV7ME.AB22.ROGNuL.ZO8r,5PRUUI5QbBA,L0
6J.C2T123UdQ5238mUCrtKKtGroyKrAhi3Y1xB.NltKqm0GuWqm0mtKqlyKrGKEGLt4Ks0GnyK
t0GmKKu4qomqt8GEemIM010cTcQU,ReHh6y3MJkIin4MGB09vP0GH0GICKLyIrC30mF00aGEGJ
YKYUQgiw7EICqI0mWuYB.G3Uvg,.UHNNV96F7Rp765WIlp.6F.FXd.hWUQgu..rN1HcE.CKEEu
WmVy4UdU7A6EICqu.q1Y3P082...u5yagcH....F7N,t6,,HFH0GIGKEqHECKLGqoCbdYZUQcD
,Ebg6..5f9H1,,Y3RWT,I8klK5ERsMkZ.ErU1lr.F,M8EI.K4..EK..EEEs....cTcQU,tIsL.
.MGkm66sMy266Ud6J.T023.UHNNin4q..6G19PdvIdvPV96FtMpVo7JM8rN182UckuCrm0mVyK
LCJukouqtGrm4Km0GJam4A,UcQgUgbUo7m0TW,,.g62dVZBkRqk2qUE,U7V1,EJ2ZXJ5y4Uv22
eHECIusL7uPHtCPEV.QcopZ7pBd9J1vQL98599,7NT99,tI99Rkk6OY3b8R0LK0GY44kIin4AV
XpZHNM2YukdGrksCA,GJt4KrUUIbx6JZ1sCakWkYu450.PM1aEIM9M9UU2emxhXhgYhimhgn3Y
UgZhkK.,d86I.MKHPNN9NJ76FN8rN1o80Wg2YXZijJ5y4.,dNZvPPfCiom.5Wj,6Rp76kksC.G
2.i130kU.gCUX22kV4Ibwf0,.kl00Cqu.r7659RT96pNDu2r,HeFWmluGnEEq1A3B,84QYUo76
JM1AVXpZWBAuGbKKwGrYuqdCKoKKmWmlu0YZUYig2YYBZvg,akYEu0mF00c7YCHuI,tET1kI0G
eW2k2CKuyKEEu..r,akU.W05,.7nS6RuGma4H79.UCNF.K2Pk2K2r,HWXZij3YX2YX3YI3d3,a
2uGnUX2222.aklK566pVXpZaVvgV7M0HcN66p,UiAhhlR0mluGnEEEbsCk2i2Ee.Q6.WGn8rrA
ZBAV7AV3Z7HeF,tMd1u2,,U7QA.sMdnRqk2M0B1,,c9HPPM1HU7Q7....M8kWMFPM0Hk2C4.o7
i1AV9,...2CUi.HN1MFRm4.g60mgaqmsCPM103.CZjd8,78UKFECLuOoouqoCLoKKmeHEkdGrk
Grmin4I6.10sMf1s6EK...M0b9RBOO.RtQd96pV1Zii6JzeFH0FOF7uCMGMRZ1uGmaqt2YX.,,
k2C4.c9bONCJu4Ku2ZXhim,Ug2YnZi4,M8rN1g6iX7sM.Kqr8buEe8peKoR0m4AVNBhZZBPM06
6bmrQ5P..QcpJimVe2YccC,tE.QbBAV0,cI98JfeIR865PRUBAV3V1him,rN1P..QeghgZ3ie2
YcAhiZiZJiqBggJbUYdDpd5BdCZedQ5aEfkleX1,.82U,,.66Ug...k2CKEklK5sCa.RtI59OQ
eghAWWg2Ydpho,amRq.n0.CJqK4rN1AVc.g3EECpmqqk.,76kK.,d8..gAf8QJ76FdJ1eI,tQp
76bONPPMUd2YvgV7I6.HeH588bf9hPMN1Ad4tQRdR2Yx2Yk2YI37k242ktuGtyquUUQYU.u2..
M0..ELGqo66.A7z0gcG,QiiIij,.R7PTvMLPN796pNDO2Q5H..2Yug5RWvk2K2P.0WZhhJtC6I
..7uPjfPJ76FdJ.MM.rV0,6F9uEFtQR,H,HMG.00PNA,7JF0AV,,QAUU.mW1Fe..U7..ELG400
UClj..QC.UX,Q5..R,u0.Y8M1HUN,AV3l4g600G2in4q..sENvPbPNrN1o8YgjFRkb.a..V1.2
Yug5RWvU9,A7.UndHH8HNFmyKrAZvkWkVmqrUBQcAxdHhcBAV1ZhjRCPMFR8FwhTJej,oZBIkl
beZlVyKrGbjZhghgmRiiQ87vEdfQN9F9vQ59.XDJW5.ELCoruKu.GomCrl0U1xB44QCEt...kt
u0.Y62Um1,.d.,.H.0..4E,5TeEdKLqKKtCLLC3ZORNX2V.AyI,ktuGdKLqKa2V.Iy12.0E.se
s,sc6.,k,Z8.CLLC3b8Rn9P99F9vQ0ks,Uikwm46.ZD00U..60cK2U.2.8ss,UiAco,gA70,E0
E...7,,M.,.,.,tcpW.6.tfj1kDz41.1.,6.IkmL,6..EBU.U,.JFyuv.2U.6.VQ.E...8d...
.
--- end of encoding ---
Dmitry Dagaev
Posts: 68
Joined: Wed Mar 29, 2017 3:58 pm

Re: Co_Routines Support for Oberon

Post by Dmitry Dagaev »

Josef Templ wrote:The only surprise was that the Co_ author previously thought that it is not possible.
Josef Templ wrote:Seeing is believing ;)
Here is a straightforward (1:1) adaptation of your module Co_Routines to the Kernel's coroutine services.
Why did you bring these daggers from the place?
They must lie there: go carry them; and smear
The sleepy grooms with blood.
...
Infirm of purpose!
Give me the daggers: the sleeping and the dead
Are but as pictures.

Lady Macbeth

-----------

Your Co_'s adaptation is working (one bug fix in procedure Start), but I have comprehensive test ObxAllocators below, which shows unproper results. Coroutine Do contains local pointer "list", which lifetime equals to coroutine lifetime. An expected behavior is as following:
1. after each Co.Yield "list" is used by coroutine;
2. before the coroutine end must be printed "=== Finalizers allowed"
3. at the end of coroutine Co.Stop is called and local stacks can be freed
4. finalizers print messages for each object.

When I ran this example, I discovered that finalizers are called BEFORE the end on Coroutine Do.

StdCoder.Decode ..,1 ..j.....5uPzu9PuP7v9ZuPf9RHfP9vQRtP7vMCory3sH39S18PNvP
5PMdvPZvQRtP71w,,...
1Ak...Ci,...58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.ikB
E.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7ONbXmb.2.
AfOk2kce,,E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.rT46.,sUGpmWbB
xhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.964w,gzLU.2.Ae0U00.bnUGLu8ro8quGrmCLWKqtE0E.
kHU.EBE.0.4.I3l6w1.0E65.g0AU0KyBU.2.412.e,2.AU.Ue.4.072UH,3.16,E,9z4U.kRU.
EBE.0.4E.EJ.ES9.200k.C,2Z,k.S0Q.QU0KyB.,UcF.0.e,2.AU.6.e06.2Uw0e.w1s,6.,,5
c1kYl,y.IU.k,a.0Eak,e.0Esk.S0Y,YU0KyB.,..e,2.AU.Ue.8.07c46.L35.QX0E0G,0Ea4
.5c0kTF0S,0kpl.y10EvE04F.kC4.16E6.ZX.M3k22.1656.x,5c16.x21686.N.5c,6,1U.2U
HL.Ck0E0U.QU,k,a.A6QU4U.oHAUb.N.5.G.2UhX12,Y.6.3Q.wzBxd2heAhcUQcjxfGxhpZid
phZRivgVB2ZeIZUgV7QgjphoJidJAyKtCr2qHE8GWqqoGLtaLEOJLGokSqkKKvmGEeorCrmOKE
GpmqKsmKFqk2mqoCqmuqtKKEqHE8GcKLlmqoCKEGorqqkaKr8m4eGJam4ak4aEIeGE8Iq4qliK
VyKw0mfaKrGqrSrt0mYqKsmqmqqmMMdPOTfP,d8HN1HMGP8ITeId8658R,dCv765uPGpkCrpCL
K0mdapdGpWqIK0mZKKtuqmmqRqk4akVyIbCJe0m4ak2CIYKoVioj8pUuoXKojKId8pb8JJ0mS0
mO0nR0GbaIayJcyoYuIeKIdeGEq1XtC,dHT8JzOEhOEH8H1eENOFJ76v768nRqk2akaKpdGpj8
oWyJc8pYqoU8pgeGEq1btC,tE1eHduL3OF..GnR0mYuIf4IaaIWyJXaIbaodWIJ0mS0WpQbUgV
7AV,ReHhcGZeTBdCxfGxdJZe7pd3JZUg5OnR0mYuIeKYCBcAxf3JeG,sBr76PM0CobYeGxdAxf
2hcCBd3Zce2YxEQiHE8pWKIbGJd4IbGpjKId.MCr76Pk4ak4YeN3e3hV7AVcI3PN9PN9P,2Y1x
hmxhpZC2YUgZhg3P,2YeAZBM05uPZvPUe220pbaIbcI,7JT865uPZ16F9XvgV7AV1xfEJeDRce
2Yx2Y72eGxd1hc2heGhcU2ZXJbUQcjJCUdQbBAV7sP.G2eGEqX,JcHZeGBc1ZeUIe3RcDJe23Y
cQcopZIBgnRh2hgnN8PM0HM09vPZP9p763uHT8H9OERuCPM0aktGrkCqpyptaKxKKJeHEaIbGZ
5hcGRbBA,KKt8rr8LR0GVy2.YgdRikJbUQcopZ2Bhn3iVZiX3hZJivg,ogmxhhJbUQcj,sCPM0
Ahh3igJbUQdZJCoZ1xhmxB.sQHfS999,NM79NZ99,7Rn9Q9PO7fC,NGR0.CJu4KtGrKmGEyIrC
JuyKseGK0Ge8rkuqtOqm8rKeHECoj0JdsCPM0KIbGoRqk2ak4aUBBgdtETfQ.,ND,7IUG,ZOF5
0sPZ1M8,NFR8Frl4AVHhghBgk3hjJiZJZUEdKoVk4ak2aEv4KqqGR0mYu2D0M0ZvPf1eHECor.
Q5g6M0qUKBcGhV7AVXhimJiZphoJbUQcj,.0Ltaqq4KtaLR0mV.UBA,F,M9UUQ6.0GEUh.0GJE
c8pbg6kdKKuGooCLs.0GICKR6RG3iHEGKR0mVGb2,UdQbBAV0hc5BdChV7A,FtETfQ.Hd97POb
HEenSYgBAV3p7,tI99Rkk.rl4aEc.EdKLrCorwBEEWGq0Lc4Kt4qqKKuKKtmGEGquqqqarMmGE
GquENeHEa2kIin4AVKB6,tMp76y4UvM030UUIbx2YHBfHVioe,ZdcQcj,69,7PV9I.A3AV9hgm
pBQeZZi1xhm,IcVRiZ3ZXpZdhhkN8rN1HkluGW2ZXBZvgV7UZJimxB,dCv76FtM,t6,7QZPOP1
HtCPU,,WGzCKLKKtEK0mYuIfMG.AZBAV3p78puu4y4sCgV728.ocdJgZJiHZiVJCZuPf9R66..
p76.U0,sG.deQn98ZORR1.N,.690HK0GMamRqU7Q7.4KrU1xhm,2ZkJid,RNOP9QgV7.BOO31.
UvM1.U7phdZiEJidhBQbBEf66PfC,NH1POR1T1667vPRPNp7630.30EbKofWmqamR0GbKofWWi
AhhVvU9,AdiBhoRcj,sQFNPRlq69,7NTfPamRkU.Gqruag2Y7pdIdIROE.amREs.0GRqHEqqRq
k2KIbMGRPO03kRg,.kdGrk8bU2ZXJ5.M8rV7o80GmyKrI5...HeF,7QZPOEEqHEuoYmIEGJYKI
bqk2AVXhCEEenSod7tCPM0akYuqoG5UvM0K2r,10sMffQZ1qHEu2N76POJb8J.H0amRq..oZnZ
iVRAUUobx2YkYZUQc6hc1,..Ad4tMRNOPXUQYUod776.Q7UGhghxhqhg1xhm,2ZXp3M8Pk2K2E
bklumoUvUXp3TfQ,dCoc,ZdHhcvgV7sG.18N7vETfQ..mW4BB.83EKQeN,EIaIbGZ5FK0mlaGK
0GMmWkY371H,42EmUBAV3FEC3ZnRqk4..FFR.Ud2Y4BdCBcABdOhchQbBAV0,,N1HM0H0UU...
UGlr..F,M8P.gV7UUoc7p7kRqk2qUE,UIJiV,0GI..amRcEk4ME.x1THK0GbyIeA6.amRM0.Ca
WBgnhgUg569CobuIe.u2amRq..cNZvPP96v76UGhc3,..CaaJCIbxsMffQkRqk2A6.a400UCBd
Ax9UGBZvUXhCEEe1in4aU9,Y8.5Wj,W0kIi1W03NEbvQ9fQdPOTfPaKr0mVy4UgsQ9PN,7RFPN
,tQ9vMTfP796dfQ19Q,dNTfQ,7N99R1PONvQ376JN8AV,,oDICkUCpdK2z0g8M8rN1Ad4VZxB,
d7,785f9TePb0,t6,,H76d8G9GECKLy2685P8,NFRm4.d0kRq..kdggk3YcYiu2Y1FesO.Y6Uc
lIUKFECKR.UvgV7I6.5966RFtET1kIk242685PR.v,mWB,30...x1THKo7...UcYgUQYUUdc7,
78796v765f97PObnImGECob.cHK2.UXpZdVU.mWClj.83sMf1cCQAsG.cPkVsPUc.A368.91..
69..666Q....oDICkUQ8w9..A7MN22QAT022kIY8UD,W0.kdgArN1P..2dVZhoReoxhk3YcQgu
EuY8AZvg,30EIMRbPN,tETf9b8RMORvQdPN19N,d8HN1a.EICKEqHEu2NVDlU..K2Wokm4sCPM
0PEc.kYkV.c8Wmle1T1kR00p7658Rwf2xhdQbBcE.CIuumYuaoZeVRif3ZXZZUYgjZZUQeZZCM
M2BmWHZCV99,7G11M8rN1aklumdAA0GRsIdPMQ5a.deQ1fPEEenSYem,Q5HMFMGRX1,UBg,H68
g3g3EE0JtyqlKKmKLtKqt0GEqmKM9UUI328.AfdhggZge2YcAZvg,O3,FK0mlGrre1T1UUogmx
hhJ5LONU1lr.Yiu22MMQ5.70.rV0,ME.K5kF00sE1eHyJV..sM,,5PRUv2YXZij3Yug5RWvU7p
6FtMRdN66v,aWa.31CGEu2Y8g,akluGl44RdH99SdPGRvI59O99NFtMR,mGEGLK0GmamRq.HMG
6R,t6,,o2Gb7ReUQcj,M8,7JF0M059RT966R.Uv.HME.FVX.UYNDYCR7NHXdY3.Ebg6.9WBM09
WvU7llGrr0mF0ml0GeWoW.H0RdNkF0000.HsMf12YukluGnkRqk2AV7oA2Yu.ELaqqsC,tMRdN
66cHQ5M0L06J.C2.FdNZvPam4ak2akWmodaIX0mlG5o700.HsM.klGbvgV7k2O400ELaqqk4a.
HsG....kIU3lWqk2aU7QA.cHQ5M0L0...6Q.R,am4kWuYB.MF2YNBhZlRqk428.Q8THJ0GI.hW
UQiopcdphdRichgYJbUUHZiVZiZRbBcE.42klK5kFUg...k2CLuOoo.umtGLEe158RRFeyJXa2
WoWGoRkYku85oZYBhn765,00U7QA.ELCpmQeoBgo785PRZ1.N76b9RB0kIin4MFQ5Hkl.ggjJC
pVIJeJhcv2YBM0nOO99Pqk2EECZjtCq..sEffQZ1J76FFR0mV.sCPM030EdKIeKJduIECqu.PM
0905ORZ1in4q..sINPN99QJ76FNOR9R9fQhPMNfC,7HTeHDOGR8JHtCAVKVXJ550.I6.10.EE.
N,..U7QgUUXhCkRA,umdCKosINPN23N76HfPd1AZvg,a3.QeghAin4M0F,M9UUQeZhhV,0GEUh
.0GJ..MNKJseGEWGf4Id0mteHECpmqqk.H76rN1HcE.aIbCIICLLOrkm4MGBmtuGv66v76V76d
8GU7A6UnpZmxhp,,t6,,o7..k2..UiYgdFE.MGy3MFZ0sQRdQT1.uGqyqliqmGKEenSo6sCa..
66pNDu2rV7g6q.229PPfmREc..GorSLreGEWGf.kk.i130EWKoVWmtu0a0akY.22qmM0GeW2M0
10sM.,,Y35WI,..H..UiYA22.RWT,.sQ..51sC..u0o3.6Jk4a.n0M09WBMF22Y6QbBg,.kVmq
rCrmin4cJ6NTXuUD,A,.05.66pNDu2r,L0MG..bHbaIamWYxhiN8rV3V1Zhj,PsENuHbOFPM05
8PTvQqkWuIWsPzeIT1c9PcUXDJ9X1xhiZCT9PNPNZvQRtIGqVGLtmKWKqtCK.4Dl1.c95uPR9R
.7ONbvM,kVy411C5cQ...sQR,.G20EtV.UIU.U7.,..1cUXDJcIf9P9fQbf9bWGhigFWE.4Te.
sQRdIf9P9HWE.8z,0.,6.QJw.QI2U.sUG3.bf9bWHZitZhZZcZRC,Mw.ELMSN12Umz.,6.0.E2
Eh6.,6.Ikl1.RNEd1MNG20U2U...G00k.0.0.0mFf3,E.mLT5UTyB4.4.0E.cUZT1E..UO.,.1
.eWwpr,6.,E.0t.U..61lL.m.mmBjZ92T,eUXDFkmsQCor..62,U...W.0.A,,Uohfn76Dtc0M
yfU.az86x,9O0OJWd..wU....
1Ak...jl....58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.my3
E.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7ONbXmb.2.
Ib9k2ENi.,E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.ti0E.CcIhgsNHT
9N9ntQ8qorG4704D.CbB,708T1U.EnX.T.xC02U..bO.cU.ktAcoZimBhWhiohgnZcZRCY.2.w
22U.EBU.U,U.I3l6w1.0E65.g,AU0KyBU.2.010.u,2.AU.U,JidBgg74VT.E.07c0E0E,8Mtr
.2.010.u,2.A.ME.M.6YE.S24kgC.5cUZT1E.6A2U.US.,.16.ME.c.6YUDU,wp,E08Mtr.2..
c56.,.16.ME.6.2UwK.6,M.bT.2U4U,Q,wzBxd2heAhcUQcjxfDJgsBcgZhjRgVZijJin3YvgV
B2ZeIZUgV7QgjphoJidJAyKtAVx2YWYchBhoJit3YKpZ2BgbBgZpiWgV7YhdRgZphnhgUgbUIY
EhiWZhdRgUYcjhhVBhiJYBIZeAZBgV7AdB3eDJeI3Y1ZiUIbx2Y1xBdOMbvOb99,tET96pND,,
ZuPf9RHfP9vQN76LONZfP99PN76NuPDvCPM0PM0dOKVOFPM0HcH1PP996v761eIZOEn86bdA,t
HB8658G1eIrN1HM0R0b96v7610Aak2YDpcUodVhhZRbBAV7YddRio3Yx2YExd7pdIhcG3YIxdU
YddRioZcZRiXRbBAV7.EEqHE8pWCob8JWqk2ak2uqkqqmeHEuoksCM0BPORPMNPOpPN7fC,dET
uHNOF1eHrN1HUihgsZiu2YABhnN1HkWuIWin4ak2qk2aEWaqlGLEq1.EWaqlGLWK4r,70EE.66
FtETf95uPZvPf9R6F9XdgV7M044p,Q5g6M1HcJ1eIPM0H68J7PHvQeHEm2iHJam4aEc8pbCoWG
oe8pW0GImqoeHEmooM8,dFHeH18HHeK9uCPM03OFDOGRO1HM0NPORdNHfP112Yug5deIfOFrN1
HM0NuPDf9b8RZPORvNFd6BOORPMEE8mIiHEmorSKL.YhdpZiBAamR0GaEauq4akWuYUoc7p7.q
UE,U,ZgYpdZ3jo3YcYgdRgoJbUYcdRAr76NPOb9RpFakIin4aEV.Ad43YYBhXd9RPMPHECGE8G
F0GeWoWuo4aU7A7mqoCbiohZ3DqHEuoYmIEGJYK2M0ROFj88NPOb1M8rN1ak2aEqQio,uGr44e
nS0GmaqlkksCk2m2C3EF0GE4KmGKEuqkqqmeXWAZvYdjxgi.6NHvM.HFay4NmRqk2M0FlUCpdK
IdGJIGqo.2YXktKqlyKrGKFmGE8HMamRemIqU7M05uPRNKHPNN9NPM0akWsCa.H0UZFECGEuoY
m2.akUGKmu2WGmEK0Gqaqt.am4ak2g6qk2g6MFRGE4ImG4QbBg,V0.7uP,78dfC,tEdf9dOMbv
OHtCPM0OpU2YYBBeX2Vv.mGEcCUvg,30Eakd.8mSqnS0GXaKr.ZvQ,7QZvPFPO3POdPN7f6HtC
,,m2cH.aWUYhdFLuqkERc63tCPM0GqoCKu0GR6RF7FHvMamRq.1068EKktA36P0GRqXgBhntCA
VL3d7Zd33YgBhUQYUo7YcDhV7AV7Y7Q8.,Fr44v763N8m2.YBR,aWBA,a2oZa,6NGJY66NuPD1
UWc8Jd8fvQ9P91fNdPNZP9BPOR1IZeIZWAZUgcCZcv.N0N06P.uGrKKwgV7A,Q5Y7Q8.v,.IC4
KqmqrSrmGKFaWU.N0Q6CJuyKsqk2K2,7FTvCPM0PEc.EdKLremRqk2o8.p,Q5RPMPnteHEuokk
R0GpeHEaIbGpWSoW8pRqU0,cH6NHXd.5W7phdZi1xhmxBoBF7NHvMmW2xhdQbBEmELCJu4KtGL
IGqoM8ErUP3aR3Yug53dNHfQb9R3tC,dP114ni0GRq1bPNEFiHE.8ni0GRq1d9OHfQ7f6r,kNq
JEenSc6M0J96pND,7ArN1Hkf.x9NHXiggjJiUoYU2Ze3Yw2YmAZUYcDh,aEmUiVUUiBghtQeqi
in4a.UIJiVphnpgZJicYgdRAH,AdCRccIhdgV7AV3lRkZKKtu4RtET9PNPN59RrFIeGEOqo8rt
2YoBhhhgUIZdg,S3.oZZV2xdBk2G4oB2Yu.QC..d0.M8U7,kW.WWgVUI5uoYmoRemIkZ..2YU2
Ze2YnhgXxB0Gua4e0KIb2YGhiiRbBgV3pd2tETvLT0sMUiIklbeZlVyKrGbjZhghgmRiiQeoZg
1ZimZh2tQ0ks,.ELCoruKu.GomCrl0U1VV,u0IC...Qii..70,cwE.E8E.k22.,6..M.3QwdON
IepZhZJinpZHFdKLq6F6.XDJ.QiiIepZhZ7F6.Zz.,U.2.i8S.C80E.QE.sQRtIQeoBjghg2hg
n7.X5.u0n9PU.Iy56.2.U6UOV.2.86.c918R.9HWE.Y.2..EGE.4E.E.EECOh6.0kXat.wnj7.
1.1.,6.Ikmj,6..EBU.U,.JFkns.U.2m,.,.E4WDN.Ntarm3Wj.Jklb6MNkVy4..V.,..2,2.M
00.dPLbHESmF3kwL,,AzJEu1Ko2oe2H.2i1...
--- end of encoding ---
Post Reply