----boundary-LibPST-iamunique-674043135_-_-
Content-type: text/plain
Fyodor
Your comments below suggest that the interface design
of LibRandom.Variate (for example) could be improved
by being more flexible.
I both agree and disagree.
As I user maybe today I just need some Exponential
Random numbers in a hurry. Prehaps I am used to something
like the FORTRAN NAG library, where there probably is a
function that does exactly what I want with an eight character
name like RNDX7FK3. No flexibility, just a simple function
call (and my wallet is $5000 lighter!).
With LibRandom you have to create a 'Variate' object, but
first you have to pass it a 'Base' object (yes, there are
defaults). The Base object knows about pseudo random number
generators, the Variate object knows about 'Exponential'
distributions. These concerns are separated, you have more
flexibility, but more hassle. Arguably the design is already
'too objecty'.
Your suggestion seems to give some more flexibility, but it
also gives both the writer of new Variate distributions, and
the user of both old and new ones, more work. For example
to use the default implementation of Cdf a shell method needs
to be written, whereas with the existing design, using EXTENSIBLE
PROCEDUREs, no work at all is required.
As a software designer both my existing design and your suggestion
are still too inflexible. They support two ways of describing
Variates (Probability Density Function & Cumulative Distribution
Function), but have no provision for adding new descriptions (eg
Characteristic Function, or Moment Generating Function etc).
So what is a good answer?
An 'ideal' theoretical solution is not a good solution if
it 0) - Requires excessive design and implementation effort
& 1) - Assumes an unrealistic degree of 'computer science
sophistication' on the part of the user (whose
expertise is in some other application domain.)
So we need to compromise, knowing that tomorrow we will
revise our opinion about the suitability of todays choices.
A goal of "as flexible as possible" (extract from private
communication) may be an admirable aim, but in the real
world we make small and imperfect steps towards it and
accept a balance with other more pragmatic concerns.
BOTTOM LINE: EXTENSIBLE PROCEDUREs allow useful
design options.
Robert
ps - I have also commented on your 'Side remark' below.
>> -----Original Message-----
>> From: Fyodor Tkachov [mailto:fyodor.tkachov{([at]})nowhere.xy>> Sent: 28 November 2004 11:54
>> To: Campbell, Robert D (UK Edinburgh)
>> Cc: Blackbox Mailing-List
>> Subject: RE: An extended discussion of extensibility
>>
>> Robert
>>
>> Many thanks for an interesting example (especially that it
>> gave me an opportunity to further study your excellent
>> library; the excerpt from your message I'd like to take
>> issue with, is appended).
>>
>> However, it is now my turn to point out an unstated
>> assumption in your design.
>> The assumption is that mathematically equivalent entities
>> (the functions Cdf and Pdf) are represented in
>> syntactically equivalent ways. In your case:
>>
>> Variate = POINTER TO ABSTRACT RECORD
>> ...
>> (rv: Variate) Cdf (x: REAL): REAL, NEW, EXTENSIBLE;
>> ...
>> (rv: Variate) Pdf (x: REAL): REAL, NEW, EXTENSIBLE;
>> ...
>> END;
>>
>> A software implementation ought to (I would say, must) also
>> reflect practical considerations (usage etc.).
>>
>> In your specific case, you pointed it out yourself that
>> there are great differences between Cdf and Pdf in that respect.
>>
>> I would implement your Variate as follows:
>>
>> Variate = POINTER TO ABSTRACT RECORD
>> (rv: Variate) Pdf (): Function, NEW, ABSTRACT;
>> (* necessary *)
>> (rv: Variate) Cdf (VAR x: Function), NEW,
>> EMPTY; (* unnecessary *)
>> ...
>> END;
>>
>> with
>>
>> Function = POINTER TO ABSTRACT RECORD
>> (f: Function) Eval (x: REAL): REAL
>> END;
>>
>> defined somewhere for general use.
>> Plus, I would provide an independent procedure:
>>
>> PROCEDURE Cdf (v: Variate): Function;
>>
>> or a non-extensible method:
>>
>> (rv: Variate) DefaultCdf (): Function, NEW;
>>
>> It would incorporate knowledge about special cases such as
>> Exponential, as well as provide a default.
>>
>> Separation of Cdf and Pdf from Variate is advantageous for
>> reasons of flexibility (you will agree it is hard to
>> predict all possible types of application problems).
>> The lack of symmetry between Cdf and Pdf reflects their
>> (very) different usage.
>>
>> A side remark: in a large class of problems I deal with,
>> Pdf's are not available, so I would make Variate.Pdf an
>> EMPTY method too.
The EXTENSIBLE procedure Pdf also has a default
implementation, which is made available if a
Variate implementor does NO WORK.
In Version Chill_08 it is HALT. In version Chill_09
it is RETURN undef.
(undef is a defined CONST.)
As I say, simple & pragmatic.
>> To summarize, your statement about desirability of
>> EXTENSIBLE methods does not, in my view, stand up to
>> scrutiny, and is only valid within a somewhat narrow and
>> somewhat inflexible implementation scheme you adopted.
>>
>> Cheers
>> Fyodor
>>
>>
>> > >> So with this the argument for EXTENSIBLE procedures
>> vanished and they are
>> > >> a matter of personal style as were EXTENSIBLE RECORDs
>> and Fjodor is right,
>> > >> both might - on the level of Component Pascal at
>> least - be banned.
>> >
>> > I think there is a flaw in the above conclusions,
>> resulting from an unstated assumption.
>> >
>> > People consider only what is NEEDED for correct function
>> (usually using 'Initialisation' as an example.
>> > There is also the question of what is DESIRABLE for
>> correct function.
>> >
>> > I give an example (taken from LibRandom, but there are
>> many others).
>> > This implements an ABSTRACT type meant to represent a
>> mathematical object called
>> > a Random Variate (or RV).
>> > These come in various flavours with names such as
>> 'Normal', 'Exponential',
>> > and in millions of user specific flavours.
>> >
>> > They can be (mathematically) described in many different
>> > (but essentially equivalent) ways.
>> > Two of the most common (and useful) are called the 'Pdf'
>> and the 'Cdf'.
>> >
>> > The ABSTRACT base type 'Variate' uses the (ABSTRACT)
>> 'Pdf' to compute the 'Cdf'.
>> > When Variate is extended to, for example, Exponential,
>> > it is NECESSARY to implement the ABSTRACT base procedure Pdf,
>> > it is NOT NECESSARY to implement the EXTENSIBLE procedure Cdf.
>> >
>>
>> > However, for the Exponential RV, Cdf has a very simple
>> mathematical form and
>> > it is very easy and very desirable (vastly faster, more
>> accurate, simpler)
>> > to reimplement Cdf as well.
>> >
>> > On the other hand, for user defined RV's, it may be very
>> difficult, if not impossible,
>> > to reimplement Cdf directly, and depending on the application
>> > there may be no desire to use the Cdf much anyway,
>> > so run-time efficiency is secondary to minimising coding effort.
>> >
>> > The Component Pascal attribute EXTENSIBLE simply supports
>> this 'optional' reimplementation;
>> > I don't see an equally simple alternative.
>>
>> Powered by the E-mail PIM - Info Select - www.miclog.com
>>
>>
********************************************************************
This email and any attachments are confidential to the intended
recipient and may also be privileged. If you are not the intended
recipient please delete it from your system and notify the sender.
You should not copy it or use it for any purpose nor disclose or
distribute its contents to any other person.
********************************************************************
--------------------------------------------
To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
blackbox-request{([at]})nowhere.xy
To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.
Send any problem reports or questions related to this email list to the list owner at
owner-blackbox{([at]})nowhere.xy
Current posting policy:
a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.
b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.
----boundary-LibPST-iamunique-674043135_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwIFxwYXINCkZ5b2RvclxwYXINClxwYXINCllvdXIg
Y29tbWVudHMgYmVsb3cgc3VnZ2VzdCB0aGF0IHRoZSBpbnRlcmZhY2UgZGVzaWduXHBhcg0Kb2Yg
TGliUmFuZG9tLlZhcmlhdGUgKGZvciBleGFtcGxlKSBjb3VsZCBiZSBpbXByb3ZlZFxwYXINCmJ5
IGJlaW5nIG1vcmUgZmxleGlibGUuXHBhcg0KXHBhcg0KSSBib3RoIGFncmVlIGFuZCBkaXNhZ3Jl
ZS5ccGFyDQpccGFyDQpBcyBJIHVzZXIgbWF5YmUgdG9kYXkgSSBqdXN0IG5lZWQgc29tZSBFeHBv
bmVudGlhbFxwYXINClJhbmRvbSBudW1iZXJzIGluIGEgaHVycnkuIFByZWhhcHMgSSBhbSB1c2Vk
IHRvIHNvbWV0aGluZ1xwYXINCmxpa2UgdGhlIEZPUlRSQU4gTkFHIGxpYnJhcnksIHdoZXJlIHRo
ZXJlIHByb2JhYmx5IGlzIGFccGFyDQpmdW5jdGlvbiB0aGF0IGRvZXMgZXhhY3RseSB3aGF0IEkg
d2FudCB3aXRoIGFuIGVpZ2h0IGNoYXJhY3RlclxwYXINCm5hbWUgbGlrZSBSTkRYN0ZLMy4gTm8g
ZmxleGliaWxpdHksIGp1c3QgYSBzaW1wbGUgZnVuY3Rpb25ccGFyDQpjYWxsIChhbmQgbXkgd2Fs
bGV0IGlzICQ1MDAwIGxpZ2h0ZXIhKS5ccGFyDQpccGFyDQpXaXRoIExpYlJhbmRvbSB5b3UgaGF2
ZSB0byBjcmVhdGUgYSAnVmFyaWF0ZScgb2JqZWN0LCBidXRccGFyDQpmaXJzdCB5b3UgaGF2ZSB0
byBwYXNzIGl0IGEgJ0Jhc2UnIG9iamVjdCAoeWVzLCB0aGVyZSBhcmVccGFyDQpkZWZhdWx0cyku
IFRoZSBCYXNlIG9iamVjdCBrbm93cyBhYm91dCBwc2V1ZG8gcmFuZG9tIG51bWJlclxwYXINCmdl
bmVyYXRvcnMsIHRoZSBWYXJpYXRlIG9iamVjdCBrbm93cyBhYm91dCAnRXhwb25lbnRpYWwnXHBh
cg0KZGlzdHJpYnV0aW9ucy4gVGhlc2UgY29uY2VybnMgYXJlIHNlcGFyYXRlZCwgeW91IGhhdmUg
bW9yZVxwYXINCmZsZXhpYmlsaXR5LCBidXQgbW9yZSBoYXNzbGUuIEFyZ3VhYmx5IHRoZSBkZXNp
Z24gaXMgYWxyZWFkeVxwYXINCid0b28gb2JqZWN0eScuXHBhcg0KXHBhcg0KWW91ciBzdWdnZXN0
aW9uIHNlZW1zIHRvIGdpdmUgc29tZSBtb3JlIGZsZXhpYmlsaXR5LCBidXQgaXRccGFyDQphbHNv
IGdpdmVzIGJvdGggdGhlIHdyaXRlciBvZiBuZXcgVmFyaWF0ZSBkaXN0cmlidXRpb25zLCBhbmRc
cGFyDQp0aGUgdXNlciBvZiBib3RoIG9sZCBhbmQgbmV3IG9uZXMsIG1vcmUgd29yay4gRm9yIGV4
YW1wbGVccGFyDQp0byB1c2UgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgQ2RmIGEgc2hl
bGwgbWV0aG9kIG5lZWRzXHBhcg0KdG8gYmUgd3JpdHRlbiwgd2hlcmVhcyB3aXRoIHRoZSBleGlz
dGluZyBkZXNpZ24sIHVzaW5nIEVYVEVOU0lCTEVccGFyDQpQUk9DRURVUkVzLCBubyB3b3JrIGF0
IGFsbCBpcyByZXF1aXJlZC5ccGFyDQpccGFyDQpBcyBhIHNvZnR3YXJlIGRlc2lnbmVyIGJvdGgg
bXkgZXhpc3RpbmcgZGVzaWduIGFuZCB5b3VyIHN1Z2dlc3Rpb25ccGFyDQphcmUgc3RpbGwgdG9v
IGluZmxleGlibGUuIFRoZXkgc3VwcG9ydCB0d28gd2F5cyBvZiBkZXNjcmliaW5nXHBhcg0KVmFy
aWF0ZXMgKFByb2JhYmlsaXR5IERlbnNpdHkgRnVuY3Rpb24gJiBDdW11bGF0aXZlIERpc3RyaWJ1
dGlvblxwYXINCkZ1bmN0aW9uKSwgYnV0IGhhdmUgbm8gcHJvdmlzaW9uIGZvciBhZGRpbmcgbmV3
IGRlc2NyaXB0aW9ucyAoZWdccGFyDQpDaGFyYWN0ZXJpc3RpYyBGdW5jdGlvbiwgb3IgTW9tZW50
IEdlbmVyYXRpbmcgRnVuY3Rpb24gZXRjKS5ccGFyDQpccGFyDQpTbyB3aGF0IGlzIGEgZ29vZCBh
bnN3ZXI/XHBhcg0KXHBhcg0KQW4gJ2lkZWFsJyB0aGVvcmV0aWNhbCBzb2x1dGlvbiBpcyBub3Qg
YSBnb29kIHNvbHV0aW9uIGlmXHBhcg0KaXQgMCkgLSBSZXF1aXJlcyBleGNlc3NpdmUgZGVzaWdu
IGFuZCBpbXBsZW1lbnRhdGlvbiBlZmZvcnRccGFyDQomICAxKSAtIEFzc3VtZXMgYW4gdW5yZWFs
aXN0aWMgZGVncmVlIG9mICdjb21wdXRlciBzY2llbmNlXHBhcg0KICAgICAgICBzb3BoaXN0aWNh
dGlvbicgb24gdGhlIHBhcnQgb2YgdGhlIHVzZXIgKHdob3NlXHBhcg0KICAgICAgICBleHBlcnRp
c2UgaXMgaW4gc29tZSBvdGhlciBhcHBsaWNhdGlvbiBkb21haW4uKVxwYXINClxwYXINClNvIHdl
IG5lZWQgdG8gY29tcHJvbWlzZSwga25vd2luZyB0aGF0IHRvbW9ycm93IHdlIHdpbGxccGFyDQpy
ZXZpc2Ugb3VyIG9waW5pb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRvZGF5cyBjaG9pY2Vz
LlxwYXINCkEgZ29hbCBvZiAiYXMgZmxleGlibGUgYXMgcG9zc2libGUiIChleHRyYWN0IGZyb20g
cHJpdmF0ZVxwYXINCmNvbW11bmljYXRpb24pIG1heSBiZSBhbiBhZG1pcmFibGUgYWltLCBidXQg
aW4gdGhlIHJlYWxccGFyDQp3b3JsZCB3ZSBtYWtlIHNtYWxsIGFuZCBpbXBlcmZlY3Qgc3RlcHMg
dG93YXJkcyBpdCBhbmRccGFyDQphY2NlcHQgYSBiYWxhbmNlIHdpdGggb3RoZXIgbW9yZSBwcmFn
bWF0aWMgY29uY2VybnMuXHBhcg0KXHBhcg0KQk9UVE9NIExJTkU6IEVYVEVOU0lCTEUgUFJPQ0VE
VVJFcyBhbGxvdyB1c2VmdWxccGFyDQpkZXNpZ24gb3B0aW9ucy5ccGFyDQpccGFyDQpSb2JlcnRc
cGFyDQpccGFyDQpwcyAtIEkgaGF2ZSBhbHNvIGNvbW1lbnRlZCBvbiB5b3VyICdTaWRlIHJlbWFy
aycgYmVsb3cuXHBhcg0KXHBhcg0KXHBhcg0KXHBhcg0KPj4gIC0tLS0tT3JpZ2luYWwgTWVzc2Fn
ZS0tLS0tXHBhcg0KPj4gIEZyb206IEZ5b2RvciBUa2FjaG92IFttYWlsdG86ZnlvZG9yLnRrYWNo
b3ZAY2Vybi5jaF1ccGFyDQo+PiAgU2VudDogMjggTm92ZW1iZXIgMjAwNCAxMTo1NFxwYXINCj4+
ICBUbzogQ2FtcGJlbGwsIFJvYmVydCBEIChVSyBFZGluYnVyZ2gpXHBhcg0KPj4gIENjOiBCbGFj
a2JveCBNYWlsaW5nLUxpc3RccGFyDQo+PiAgU3ViamVjdDogUkU6IEFuIGV4dGVuZGVkIGRpc2N1
c3Npb24gb2YgZXh0ZW5zaWJpbGl0eVxwYXINCj4+IFxwYXINClxwYXINCj4+ICBSb2JlcnRccGFy
DQo+PiBccGFyDQpccGFyDQo+PiAgTWFueSB0aGFua3MgZm9yIGFuIGludGVyZXN0aW5nIGV4YW1w
bGUgKGVzcGVjaWFsbHkgdGhhdCBpdFxwYXINClxwYXINCj4+ICBnYXZlIG1lIGFuIG9wcG9ydHVu
aXR5IHRvIGZ1cnRoZXIgc3R1ZHkgeW91ciBleGNlbGxlbnRccGFyDQpccGFyDQo+PiAgbGlicmFy
eTsgdGhlIGV4Y2VycHQgZnJvbSB5b3VyIG1lc3NhZ2UgSSdkIGxpa2UgdG8gdGFrZVxwYXINClxw
YXINCj4+ICBpc3N1ZSB3aXRoLCBpcyBhcHBlbmRlZCkuXHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4g
IEhvd2V2ZXIsIGl0IGlzIG5vdyBteSB0dXJuIHRvIHBvaW50IG91dCBhbiB1bnN0YXRlZFxwYXIN
ClxwYXINCj4+ICBhc3N1bXB0aW9uIGluIHlvdXIgZGVzaWduLlxwYXINCj4+ICBUaGUgYXNzdW1w
dGlvbiBpcyB0aGF0IG1hdGhlbWF0aWNhbGx5IGVxdWl2YWxlbnQgZW50aXRpZXNccGFyDQpccGFy
DQo+PiAgKHRoZSBmdW5jdGlvbnMgQ2RmIGFuZCBQZGYpIGFyZSByZXByZXNlbnRlZCBpblxwYXIN
ClxwYXINCj4+ICBzeW50YWN0aWNhbGx5IGVxdWl2YWxlbnQgd2F5cy4gSW4geW91ciBjYXNlOlxw
YXINCj4+IFxwYXINClxwYXINCj4+ICBcdGFiIFZhcmlhdGUgPSBQT0lOVEVSIFRPIEFCU1RSQUNU
IFJFQ09SRFxwYXINCj4+ICBcdGFiIFx0YWIgLi4uXHBhcg0KPj4gIFx0YWIgXHRhYiAocnY6IFZh
cmlhdGUpIENkZiAoeDogUkVBTCk6IFJFQUwsIE5FVywgRVhURU5TSUJMRTtccGFyDQo+PiAgXHRh
YiBcdGFiIC4uLlxwYXINCj4+ICBcdGFiIFx0YWIgKHJ2OiBWYXJpYXRlKSBQZGYgKHg6IFJFQUwp
OiBSRUFMLCBORVcsIEVYVEVOU0lCTEU7XHBhcg0KPj4gIFx0YWIgXHRhYiAuLi5ccGFyDQo+PiAg
XHRhYiBFTkQ7XHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4gIEEgc29mdHdhcmUgaW1wbGVtZW50YXRp
b24gb3VnaHQgdG8gKEkgd291bGQgc2F5LCBtdXN0KSBhbHNvXHBhcg0KXHBhcg0KPj4gIHJlZmxl
Y3QgcHJhY3RpY2FsIGNvbnNpZGVyYXRpb25zICh1c2FnZSBldGMuKS5ccGFyDQo+PiBccGFyDQpc
cGFyDQo+PiAgSW4geW91ciBzcGVjaWZpYyBjYXNlLCB5b3UgcG9pbnRlZCBpdCBvdXQgeW91cnNl
bGYgdGhhdFxwYXINClxwYXINCj4+ICB0aGVyZSBhcmUgZ3JlYXQgZGlmZmVyZW5jZXMgYmV0d2Vl
biBDZGYgYW5kIFBkZiBpbiB0aGF0IHJlc3BlY3QuXHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4gIEkg
d291bGQgaW1wbGVtZW50IHlvdXIgVmFyaWF0ZSBhcyBmb2xsb3dzOlxwYXINCj4+IFxwYXINClxw
YXINCj4+ICBcdGFiIFZhcmlhdGUgPSBQT0lOVEVSIFRPIEFCU1RSQUNUIFJFQ09SRFxwYXINCj4+
ICBcdGFiIFx0YWIgKHJ2OiBWYXJpYXRlKSBQZGYgKCk6IEZ1bmN0aW9uLCBORVcsIEFCU1RSQUNU
O1xwYXINClxwYXINCj4+ICAoKiBuZWNlc3NhcnkgKilccGFyDQo+PiAgXHRhYiBcdGFiIChydjog
VmFyaWF0ZSkgQ2RmIChWQVIgeDogRnVuY3Rpb24pLCBORVcsXHBhcg0KXHBhcg0KPj4gIEVNUFRZ
OyAoKiB1bm5lY2Vzc2FyeSAqKVxwYXINCj4+ICBcdGFiIFx0YWIgLi4uXHBhcg0KPj4gIFx0YWIg
RU5EO1xwYXINCj4+IFxwYXINClxwYXINCj4+ICB3aXRoXHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4g
IFx0YWIgRnVuY3Rpb24gPSBQT0lOVEVSIFRPIEFCU1RSQUNUIFJFQ09SRFxwYXINCj4+ICBcdGFi
IFx0YWIgKGY6IEZ1bmN0aW9uKSBFdmFsICh4OiBSRUFMKTogUkVBTFxwYXINCj4+ICBcdGFiIEVO
RDtccGFyDQo+PiBccGFyDQpccGFyDQo+PiAgZGVmaW5lZCBzb21ld2hlcmUgZm9yIGdlbmVyYWwg
dXNlLlxwYXINCj4+ICBQbHVzLCBJIHdvdWxkIHByb3ZpZGUgYW4gaW5kZXBlbmRlbnQgcHJvY2Vk
dXJlOlxwYXINCj4+IFxwYXINClxwYXINCj4+ICBcdGFiIFBST0NFRFVSRSBDZGYgKHY6IFZhcmlh
dGUpOiBGdW5jdGlvbjtccGFyDQo+PiBccGFyDQpccGFyDQo+PiAgb3IgYSBub24tZXh0ZW5zaWJs
ZSBtZXRob2Q6XHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4gIFx0YWIgXHRhYiAocnY6IFZhcmlhdGUp
IERlZmF1bHRDZGYgKCk6IEZ1bmN0aW9uLCBORVc7XHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4gIEl0
IHdvdWxkIGluY29ycG9yYXRlIGtub3dsZWRnZSBhYm91dCBzcGVjaWFsIGNhc2VzIHN1Y2ggYXNc
cGFyDQpccGFyDQo+PiAgRXhwb25lbnRpYWwsIGFzIHdlbGwgYXMgcHJvdmlkZSBhIGRlZmF1bHQu
XHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4gIFNlcGFyYXRpb24gb2YgQ2RmIGFuZCBQZGYgZnJvbSBW
YXJpYXRlIGlzIGFkdmFudGFnZW91cyBmb3JccGFyDQpccGFyDQo+PiAgcmVhc29ucyBvZiBmbGV4
aWJpbGl0eSAoeW91IHdpbGwgYWdyZWUgaXQgaXMgaGFyZCB0b1xwYXINClxwYXINCj4+ICBwcmVk
aWN0IGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBhcHBsaWNhdGlvbiBwcm9ibGVtcykuXHBhcg0KPj4g
IFRoZSBsYWNrIG9mIHN5bW1ldHJ5IGJldHdlZW4gQ2RmIGFuZCBQZGYgcmVmbGVjdHMgdGhlaXJc
cGFyDQpccGFyDQo+PiAgKHZlcnkpIGRpZmZlcmVudCB1c2FnZS5ccGFyDQo+PiBccGFyDQpccGFy
DQo+PiAgQSBzaWRlIHJlbWFyazogaW4gYSBsYXJnZSBjbGFzcyBvZiBwcm9ibGVtcyBJIGRlYWwg
d2l0aCxccGFyDQpccGFyDQo+PiAgUGRmJ3MgYXJlIG5vdCBhdmFpbGFibGUsIHNvIEkgd291bGQg
bWFrZSBWYXJpYXRlLlBkZiBhblxwYXINClxwYXINCj4+ICBFTVBUWSBtZXRob2QgdG9vLlxwYXIN
ClxwYXINClRoZSBFWFRFTlNJQkxFIHByb2NlZHVyZSBQZGYgYWxzbyBoYXMgYSBkZWZhdWx0XHBh
cg0KaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIG1hZGUgYXZhaWxhYmxlIGlmIGFccGFyDQpWYXJp
YXRlIGltcGxlbWVudG9yIGRvZXMgTk8gV09SSy5ccGFyDQpccGFyDQpJbiBWZXJzaW9uIENoaWxs
XzA4IGl0IGlzIEhBTFQuIEluIHZlcnNpb24gQ2hpbGxfMDlccGFyDQppdCBpcyBSRVRVUk4gdW5k
ZWYuXHBhcg0KKHVuZGVmIGlzIGEgZGVmaW5lZCBDT05TVC4pXHBhcg0KXHBhcg0KQXMgSSBzYXks
IHNpbXBsZSAmIHByYWdtYXRpYy5ccGFyDQpccGFyDQpccGFyDQo+PiAgVG8gc3VtbWFyaXplLCB5
b3VyIHN0YXRlbWVudCBhYm91dCBkZXNpcmFiaWxpdHkgb2ZccGFyDQpccGFyDQo+PiAgRVhURU5T
SUJMRSBtZXRob2RzIGRvZXMgbm90LCBpbiBteSB2aWV3LCBzdGFuZCB1cCB0b1xwYXINClxwYXIN
Cj4+ICBzY3J1dGlueSwgYW5kIGlzIG9ubHkgdmFsaWQgd2l0aGluIGEgc29tZXdoYXQgbmFycm93
IGFuZFxwYXINClxwYXINCj4+ICBzb21ld2hhdCBpbmZsZXhpYmxlIGltcGxlbWVudGF0aW9uIHNj
aGVtZSB5b3UgYWRvcHRlZC5ccGFyDQo+PiBccGFyDQpccGFyDQo+PiAgQ2hlZXJzXHBhcg0KPj4g
IEZ5b2RvclxwYXINCj4+IFxwYXINClxwYXINCj4+IFxwYXINClxwYXINCj4+ICA+ID4+ICBTbyB3
aXRoIHRoaXMgdGhlIGFyZ3VtZW50IGZvciBFWFRFTlNJQkxFIHByb2NlZHVyZXNccGFyDQpccGFy
DQo+PiAgdmFuaXNoZWQgYW5kIHRoZXkgYXJlXHBhcg0KPj4gID4gPj4gIGEgbWF0dGVyIG9mIHBl
cnNvbmFsIHN0eWxlIGFzIHdlcmUgRVhURU5TSUJMRSBSRUNPUkRzXHBhcg0KXHBhcg0KPj4gIGFu
ZCBGam9kb3IgaXMgcmlnaHQsXHBhcg0KPj4gID4gPj4gIGJvdGggbWlnaHQgLSBvbiB0aGUgbGV2
ZWwgb2YgQ29tcG9uZW50IFBhc2NhbCBhdFxwYXINClxwYXINCj4+ICBsZWFzdCAtIGJlIGJhbm5l
ZC5ccGFyDQo+PiAgPlxwYXINCj4+ICA+IEkgdGhpbmsgdGhlcmUgaXMgYSBmbGF3IGluIHRoZSBh
Ym92ZSBjb25jbHVzaW9ucyxccGFyDQpccGFyDQo+PiAgcmVzdWx0aW5nIGZyb20gYW4gdW5zdGF0
ZWQgYXNzdW1wdGlvbi5ccGFyDQo+PiAgPlxwYXINCj4+ICA+IFBlb3BsZSBjb25zaWRlciBvbmx5
IHdoYXQgaXMgTkVFREVEIGZvciBjb3JyZWN0IGZ1bmN0aW9uXHBhcg0KXHBhcg0KPj4gICh1c3Vh
bGx5IHVzaW5nICdJbml0aWFsaXNhdGlvbicgYXMgYW4gZXhhbXBsZS5ccGFyDQo+PiAgPiBUaGVy
ZSBpcyBhbHNvIHRoZSBxdWVzdGlvbiBvZiB3aGF0IGlzIERFU0lSQUJMRSBmb3JccGFyDQpccGFy
DQo+PiAgY29ycmVjdCBmdW5jdGlvbi5ccGFyDQo+PiAgPlxwYXINCj4+ICA+IEkgZ2l2ZSBhbiBl
eGFtcGxlICh0YWtlbiBmcm9tIExpYlJhbmRvbSwgYnV0IHRoZXJlIGFyZVxwYXINClxwYXINCj4+
ICBtYW55IG90aGVycykuXHBhcg0KPj4gID4gVGhpcyBpbXBsZW1lbnRzIGFuIEFCU1RSQUNUIHR5
cGUgbWVhbnQgdG8gcmVwcmVzZW50IGFccGFyDQpccGFyDQo+PiAgbWF0aGVtYXRpY2FsIG9iamVj
dCBjYWxsZWRccGFyDQo+PiAgPiBhIFJhbmRvbSBWYXJpYXRlIChvciBSVikuXHBhcg0KPj4gID4g
VGhlc2UgY29tZSBpbiB2YXJpb3VzIGZsYXZvdXJzIHdpdGggbmFtZXMgc3VjaCBhc1xwYXINClxw
YXINCj4+ICAnTm9ybWFsJywgJ0V4cG9uZW50aWFsJyxccGFyDQo+PiAgPiBhbmQgaW4gbWlsbGlv
bnMgb2YgdXNlciBzcGVjaWZpYyBmbGF2b3Vycy5ccGFyDQo+PiAgPlxwYXINCj4+ICA+IFRoZXkg
Y2FuIGJlIChtYXRoZW1hdGljYWxseSkgZGVzY3JpYmVkIGluIG1hbnkgZGlmZmVyZW50XHBhcg0K
Pj4gID4gKGJ1dCBlc3NlbnRpYWxseSBlcXVpdmFsZW50KSB3YXlzLlxwYXINCj4+ICA+IFR3byBv
ZiB0aGUgbW9zdCBjb21tb24gKGFuZCB1c2VmdWwpIGFyZSBjYWxsZWQgdGhlICdQZGYnXHBhcg0K
XHBhcg0KPj4gIGFuZCB0aGUgJ0NkZicuXHBhcg0KPj4gID5ccGFyDQo+PiAgPiBUaGUgQUJTVFJB
Q1QgYmFzZSB0eXBlICdWYXJpYXRlJyB1c2VzIHRoZSAoQUJTVFJBQ1QpXHBhcg0KXHBhcg0KPj4g
ICdQZGYnIHRvIGNvbXB1dGUgdGhlICdDZGYnLlxwYXINCj4+ICA+IFdoZW4gVmFyaWF0ZSBpcyBl
eHRlbmRlZCB0bywgZm9yIGV4YW1wbGUsIEV4cG9uZW50aWFsLFxwYXINCj4+ICA+IGl0IGlzIE5F
Q0VTU0FSWSB0byBpbXBsZW1lbnQgdGhlIEFCU1RSQUNUIGJhc2UgcHJvY2VkdXJlIFBkZixccGFy
DQo+PiAgPiBpdCBpcyBOT1QgTkVDRVNTQVJZIHRvIGltcGxlbWVudCB0aGUgRVhURU5TSUJMRSBw
cm9jZWR1cmUgQ2RmLlxwYXINCj4+ICA+XHBhcg0KPj4gXHBhcg0KXHBhcg0KPj4gID4gSG93ZXZl
ciwgZm9yIHRoZSBFeHBvbmVudGlhbCBSViwgQ2RmIGhhcyBhIHZlcnkgc2ltcGxlXHBhcg0KXHBh
cg0KPj4gIG1hdGhlbWF0aWNhbCBmb3JtIGFuZFxwYXINCj4+ICA+IGl0IGlzIHZlcnkgZWFzeSBh
bmQgdmVyeSBkZXNpcmFibGUgKHZhc3RseSBmYXN0ZXIsIG1vcmVccGFyDQpccGFyDQo+PiAgYWNj
dXJhdGUsIHNpbXBsZXIpXHBhcg0KPj4gID4gdG8gcmVpbXBsZW1lbnQgQ2RmIGFzIHdlbGwuXHBh
cg0KPj4gID5ccGFyDQo+PiAgPiBPbiB0aGUgb3RoZXIgaGFuZCwgZm9yIHVzZXIgZGVmaW5lZCBS
VidzLCBpdCBtYXkgYmUgdmVyeVxwYXINClxwYXINCj4+ICBkaWZmaWN1bHQsIGlmIG5vdCBpbXBv
c3NpYmxlLFxwYXINCj4+ICA+IHRvIHJlaW1wbGVtZW50IENkZiBkaXJlY3RseSwgYW5kIGRlcGVu
ZGluZyBvbiB0aGUgYXBwbGljYXRpb25ccGFyDQo+PiAgPiB0aGVyZSBtYXkgYmUgbm8gZGVzaXJl
IHRvIHVzZSB0aGUgQ2RmIG11Y2ggYW55d2F5LFxwYXINCj4+ICA+IHNvIHJ1bi10aW1lIGVmZmlj
aWVuY3kgaXMgc2Vjb25kYXJ5IHRvIG1pbmltaXNpbmcgY29kaW5nIGVmZm9ydC5ccGFyDQo+PiAg
PlxwYXINCj4+ICA+IFRoZSBDb21wb25lbnQgUGFzY2FsIGF0dHJpYnV0ZSBFWFRFTlNJQkxFIHNp
bXBseSBzdXBwb3J0c1xwYXINClxwYXINCj4+ICB0aGlzICdvcHRpb25hbCcgcmVpbXBsZW1lbnRh
dGlvbjtccGFyDQo+PiAgPiBJIGRvbid0IHNlZSBhbiBlcXVhbGx5IHNpbXBsZSBhbHRlcm5hdGl2
ZS5ccGFyDQo+PiBccGFyDQpccGFyDQo+PiAgUG93ZXJlZCBieSB0aGUgRS1tYWlsIFBJTSAtIElu
Zm8gU2VsZWN0IC0gd3d3Lm1pY2xvZy5jb21ccGFyDQo+PiBccGFyDQpccGFyDQo+PiBccGFyDQpc
cGFyDQpccGFyDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlxwYXINClRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50
cyBhcmUgY29uZmlkZW50aWFsIHRvIHRoZSBpbnRlbmRlZFxwYXINCnJlY2lwaWVudCBhbmQgbWF5
IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkXHBhcg0KcmVj
aXBpZW50IHBsZWFzZSBkZWxldGUgaXQgZnJvbSB5b3VyIHN5c3RlbSBhbmQgbm90aWZ5IHRoZSBz
ZW5kZXIuXHBhcg0KWW91IHNob3VsZCBub3QgY29weSBpdCBvciB1c2UgaXQgZm9yIGFueSBwdXJw
b3NlIG5vciBkaXNjbG9zZSBvclxwYXINCmRpc3RyaWJ1dGUgaXRzIGNvbnRlbnRzIHRvIGFueSBv
dGhlciBwZXJzb24uXHBhcg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipccGFyDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxwYXINClxwYXINClRvIHVuc3Vic2NyaWJlIGZyb20gdGhp
cyBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHdvcmQgInVuc3Vi
c2NyaWJlIiB0bzpccGFyDQogICBibGFja2JveC1yZXF1ZXN0QG9iZXJvbi5jaFxwYXINClxwYXIN
ClRvIGdldCBhIGxpc3Qgb2YgdmFsaWQgZS1tYWlsIGNvbW1hbmRzIGFuZCBpbnN0cnVjdGlvbnMg
b24gdGhlaXIgdXNhZ2UsIHNlbmQgYSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHdvcmQgImhlbHAi
IHRvIHRoZSBhYm92ZSBhZGRyZXNzLlxwYXINClxwYXINClNlbmQgYW55IHByb2JsZW0gcmVwb3J0
cyBvciBxdWVzdGlvbnMgcmVsYXRlZCB0byB0aGlzIGVtYWlsIGxpc3QgdG8gdGhlIGxpc3Qgb3du
ZXIgYXRccGFyDQogICBvd25lci1ibGFja2JveEBvYmVyb24uY2hccGFyDQpccGFyDQpDdXJyZW50
IHBvc3RpbmcgcG9saWN5OlxwYXINClxwYXINCmEpIFRvIHBvc3QgeW91IHNob3VsZCB1c2UgdGhl
IHNhbWUgYWRkcmVzcyBieSB3aGljaCB5b3UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIG1haWxpbmcg
bGlzdC4gVGhhdCB3YXksIHRoZSBsaXN0IHNlcnZlciB3aWxsIHJlY29nbml6ZSB5b3UgYXMgc3Vi
c2NyaWJlciBhbmQgZm9yd2FyZCB5b3VyIHBvc3RpbmcgaW1tZWRpYXRlbHksIHdpdGhvdXQgY3Jl
YXRpbmcgYW55IG92ZXJoZWFkLlxwYXINClxwYXINCmIpIElmLCBmb3Igc29tZSByZWFzb24sIHlv
dSBjYW5ub3QgcG9zdCBmcm9tIHRoZSBhZGRyZXNzLCBieSB3aGljaCB5b3UgYXJlIHN1YnNjcmli
ZWQsIHlvdXIgbWVzc2FnZSB3aWxsIGJlIG1vZGVyYXRlZCB0byBhdm9pZCBzcGFtLiBQbGVhc2Ug
dW5kZXJzdGFuZCB0aGF0IG1vZGVyYXRpb24gd2lsbCBvZnRlbiBjYXVzZSBzb21lIGRlbGF5LCBp
biBwYXJ0aWN1bGFyIG92ZXIgd2Vla2VuZHMgb3IgaG9seWRhfX0AbVZuWVhKaw=
----boundary-LibPST-iamunique-674043135_-_---
Received on Tue Nov 30 2004 - 13:23:23 UTC