Dimensional analysis with fundeps (some physics comments)

Ashley Yakeley ashley@semantic.org
Tue, 10 Apr 2001 21:51:07 -0700


--Emailer_-1225003723
Content-Type: text/plain; charset="US-ASCII"

At 2001-04-10 18:16, I wrote:

>That's easy:
>
>--
>type Unit rep       = Dimensioned Zero Zero Zero rep;
>
>instance (Real a) => Real (Unit a) where
>     {
>     -- put instances here
>     };
>--
>
>Of course you'll have to appropriately declare superclasses of Real, such 
>as Num, Ord, Show, Eq etc.

I've put this together in the enclosed files (same as previously posted 
to the libraries list), which derive from anatoli's work.


-- 
Ashley Yakeley, Seattle WA

--Emailer_-1225003723
Content-Type: application/octet-stream; name="MarkerType.hs";
 x-mac-type="54455854";
 x-mac-creator="522A6368"
Content-transfer-encoding: base64
Content-Disposition: Attachment; filename="MarkerType.hs"

LS0gVGhpcyBpcyB3cml0dGVuIGluIEhhc2tlbGwuCm1vZHVsZSBNYXJrZXJUeXBlIHdoZXJlCgl7
CgktLSBCb29sZWFucyBleHByZXNzZWQgYXMgSGFza2VsbCB0eXBlcy4KCWRhdGEgVHJ1ZTsKCWRh
dGEgRmFsc2U7CgkKCWNsYXNzIElzIGE7CglpbnN0YW5jZSBJcyBUcnVlOwoKCWNsYXNzIElzbnQg
YTsKCWluc3RhbmNlIElzbnQgRmFsc2U7CgoJY2xhc3MgRWl0aGVySXMgYSBiOwoJaW5zdGFuY2Ug
RWl0aGVySXMgVHJ1ZSBiOwoJaW5zdGFuY2UgRWl0aGVySXMgRmFsc2UgVHJ1ZTsKCgljbGFzcyBC
b3RoQXJlIGEgYjsKCWluc3RhbmNlIEJvdGhBcmUgVHJ1ZSBUcnVlOwoJCgljbGFzcyBOb3QgYSBi
IHwgYSAtPiBiOwoJaW5zdGFuY2UgTm90IFRydWUgRmFsc2U7CglpbnN0YW5jZSBOb3QgRmFsc2Ug
VHJ1ZTsKCQoJY2xhc3MgT3IgYSBiIGMgfCBhIGIgLT4gYzsKCWluc3RhbmNlIE9yIFRydWUgYiBU
cnVlOwoJaW5zdGFuY2UgT3IgRmFsc2UgYiBiOwoJCgljbGFzcyBBbmQgYSBiIGMgfCBhIGIgLT4g
YzsKCWluc3RhbmNlIEFuZCBUcnVlIGIgYjsKCWluc3RhbmNlIEFuZCBGYWxzZSBiIEZhbHNlOwoK
CXstLQoJSW50ZWdlcnMgZXhwcmVzc2VkIGFzIEhhc2tlbGwgdHlwZXMuIFplcm8gaXMgMC4KCUlm
IHR5cGUgYSBpcyBaZXJvIG9yIHBvc2l0aXZlLCB0aGVuIChTdWNjIGEpIGlzIHBvc2l0aXZlOwoJ
aWYgdHlwZSBhIGlzIFplcm8gb3IgbmVnYXRpdmUsIHRoZW4gKFByZWQgYSkgaXMgbmVnYXRpdmUu
CglUaGlzIGlzIHZlcnkgY3J1ZGUgYW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHNpZ24tbWFn
bml0dWRlIAoJcmVwcmVzZW50YXRpb24uCgktLX0KCglkYXRhIFplcm87CglkYXRhIFN1Y2MgbjsK
CWRhdGEgUHJlZCBuOwoKCXR5cGUgT25lID0gU3VjYyBaZXJvOwoJdHlwZSBUd28gPSBTdWNjIE9u
ZTsKCXR5cGUgVGhyZWUgPSBTdWNjIFR3bzsKCXR5cGUgTWludXNPbmUgPSBQcmVkIFplcm87Cgl0
eXBlIE1pbnVzVHdvID0gUHJlZCBNaW51c09uZTsKCXR5cGUgTWludXNUaHJlZSA9IFByZWQgTWlu
dXNUd287CgoJY2xhc3MgU3VjY2Vzc29yIGEgYiB8IGEgLT4gYjsKCWluc3RhbmNlIFN1Y2Nlc3Nv
ciBaZXJvIE9uZTsKCWluc3RhbmNlIFN1Y2Nlc3NvciAoU3VjYyBhKSAoU3VjYyAoU3VjYyBhKSk7
CglpbnN0YW5jZSBTdWNjZXNzb3IgKFByZWQgYSkgYTsKCgljbGFzcyBQcmVkZWNlc3NvciBhIGIg
fCBhIC0+IGI7CglpbnN0YW5jZSBQcmVkZWNlc3NvciBaZXJvIE1pbnVzT25lOwoJaW5zdGFuY2Ug
UHJlZGVjZXNzb3IgKFN1Y2MgYSkgYTsKCWluc3RhbmNlIFByZWRlY2Vzc29yIChQcmVkIGEpIChQ
cmVkIChQcmVkIGEpKTsKCgljbGFzcyBBdExlYXN0IGEgYjsgLS0gYSA+PSBiCglpbnN0YW5jZSBB
dExlYXN0IFplcm8gWmVybzsKCWluc3RhbmNlIEF0TGVhc3QgKFN1Y2MgYSkgWmVybzsKCWluc3Rh
bmNlIEF0TGVhc3QgWmVybyAoUHJlZCBiKTsKCWluc3RhbmNlIEF0TGVhc3QgKFN1Y2MgYSkgKFBy
ZWQgYik7CglpbnN0YW5jZSAoQXRMZWFzdCBhIGIpID0+IEF0TGVhc3QgKFN1Y2MgYSkgKFN1Y2Mg
Yik7CglpbnN0YW5jZSAoQXRMZWFzdCBhIGIpID0+IEF0TGVhc3QgKFByZWQgYSkgKFByZWQgYik7
CgoJY2xhc3MgTmF0dXJhbCBhOwoJaW5zdGFuY2UgTmF0dXJhbCBaZXJvOwoJaW5zdGFuY2UgTmF0
dXJhbCAoU3VjYyBhKTsKCgljbGFzcyBBdExlYXN0T25lIGE7CglpbnN0YW5jZSAoTmF0dXJhbCBh
KSA9PiBBdExlYXN0T25lIChTdWNjIGEpOwoKCWNsYXNzIEV2ZW4gYTsKCWluc3RhbmNlIEV2ZW4g
WmVybzsKCWluc3RhbmNlIChFdmVuIGEpID0+IEV2ZW4gKFN1Y2MgKFN1Y2MgYSkpOwoJaW5zdGFu
Y2UgKEV2ZW4gYSkgPT4gRXZlbiAoUHJlZCAoUHJlZCBhKSk7CgoJLS0gSW50ZWdlciBhZGRpdGlv
bi4gQm90aCBvcGVyYW5kcyBhcmUgZWl0aGVyIHBvc2l0aXZlLCBuZWdhdGl2ZQoJLS0gb3IgemVy
bywgc28gd2UgY29uc2lkZXIgMyozPTkgY2FzZXMuCgljbGFzcyBBZGQgYSBiIGMgfCBhIGIgLT4g
YzsKCglpbnN0YW5jZSBBZGQgWmVybyBaZXJvIFplcm87CgoJaW5zdGFuY2UgQWRkIFplcm8gKFN1
Y2MgYikgKFN1Y2MgYik7CglpbnN0YW5jZSBBZGQgWmVybyAoUHJlZCBiKSAoUHJlZCBiKTsKCglp
bnN0YW5jZSBBZGQgKFN1Y2MgYikgWmVybyAoU3VjYyBiKTsKCWluc3RhbmNlIEFkZCAoUHJlZCBi
KSBaZXJvIChQcmVkIGIpOwoKCWluc3RhbmNlIEFkZCBhIGIgYyA9PiBBZGQgKFN1Y2MgYSkgKFN1
Y2MgYikgKFN1Y2MgKFN1Y2MgYykpOwoJaW5zdGFuY2UgQWRkIGEgYiBjID0+IEFkZCAoUHJlZCBh
KSAoUHJlZCBiKSAoUHJlZCAoUHJlZCBjKSk7CgoJaW5zdGFuY2UgQWRkIGEgYiBjID0+IEFkZCAo
U3VjYyBhKSAoUHJlZCBiKSBjOwoJaW5zdGFuY2UgQWRkIGEgYiBjID0+IEFkZCAoUHJlZCBhKSAo
U3VjYyBiKSBjOwoKCS0tIFN1YnRyYWN0aW9uIGlzIHZlcnkgc2ltaWxhciB0byBhZGRpdGlvbi4K
CWNsYXNzIFN1YiBhIGIgYyB8IGEgYiAtPiBjOwoKCWluc3RhbmNlIFN1YiBaZXJvIFplcm8gWmVy
bzsKCglpbnN0YW5jZSBTdWIgWmVybyAoU3VjYyBiKSAoUHJlZCBiKTsKCWluc3RhbmNlIFN1YiBa
ZXJvIChQcmVkIGIpIChTdWNjIGIpOwoKCWluc3RhbmNlIFN1YiAoU3VjYyBiKSBaZXJvIChTdWNj
IGIpOwoJaW5zdGFuY2UgU3ViIChQcmVkIGIpIFplcm8gKFByZWQgYik7CgoJaW5zdGFuY2UgU3Vi
IGEgYiBjID0+IFN1YiAoU3VjYyBhKSAoU3VjYyBiKSBjOwoJaW5zdGFuY2UgU3ViIGEgYiBjID0+
IFN1YiAoUHJlZCBhKSAoUHJlZCBiKSBjOwoKCWluc3RhbmNlIFN1YiBhIGIgYyA9PiBTdWIgKFN1
Y2MgYSkgKFByZWQgYikgKFN1Y2MgKFN1Y2MgYykpOwoJaW5zdGFuY2UgU3ViIGEgYiBjID0+IFN1
YiAoUHJlZCBhKSAoU3VjYyBiKSAoUHJlZCAoUHJlZCBjKSk7Cgl9Cg==
--Emailer_-1225003723
Content-Type: application/octet-stream; name="Dimension.hs";
 x-mac-type="54455854";
 x-mac-creator="522A6368"
Content-transfer-encoding: base64
Content-Disposition: Attachment; filename="Dimension.hs"

LS0gVGhpcyBpcyB3cml0dGVuIGluIEhhc2tlbGwuCm1vZHVsZSBEaW1lbnNpb24KCShwbHVzLG1p
bnVzLHRpbWVzLGRpdmJ5LAoJRGltZW5zaW9uZWQsCglVbml0LE1hc3MsTGVuZ3RoLFRpbWUsCgl1
bml0LGtpbG9ncmFtbWUsbWV0cmUsc2Vjb25kCgkpIHdoZXJlCgl7CglpbXBvcnQgTWFya2VyVHlw
ZTsKCgl7LS0KCUEgRGltZW5zaW9uZWQgdHlwZSBjYXJyaWVzIGFsb25nIGV4cG9uZW50cyBmb3Ig
dGhyZWUgYmFzaWMKCWRpbWVuc2lvbnM6IG1hc3MsIGxlbmd0aCwgYW5kIHRpbWUuCgktLX0KCglu
ZXd0eXBlIERpbWVuc2lvbmVkIG1hc3MgbGVuZ3RoIHRpbWUgcmVwID0gTWtEaW1lbnNpb25lZCBy
ZXA7CgoJLS0gU29tZSBoYW5keSBhYmJyZXZpYXRpb25zLgoJdHlwZSBVbml0IHJlcAk9IERpbWVu
c2lvbmVkIFplcm8gWmVybyBaZXJvIHJlcDsKCXR5cGUgTWFzcyByZXAJPSBEaW1lbnNpb25lZCBP
bmUgIFplcm8gWmVybyByZXA7Cgl0eXBlIExlbmd0aCByZXAJPSBEaW1lbnNpb25lZCBaZXJvIE9u
ZSAgWmVybyByZXA7Cgl0eXBlIFRpbWUgcmVwCT0gRGltZW5zaW9uZWQgWmVybyBaZXJvIE9uZSAg
cmVwOwoJCgktLSBpbnN0YW5jZSBwcm9wZXJ0aWVzIGZvciBEaW1lbnNpb25lZHMgaW4gZ2VuZXJh
bCBhbmQgVW5pdHMKCS0tIGluIHBhcnRpY3VsYXIKCXVuZGltZW5zaW9uMSAgZiAoTWtEaW1lbnNp
b25lZCB4KSA9IGYgeDsKCXVuZGltZW5zaW9uMXIgZiB4ID0gTWtEaW1lbnNpb25lZCAodW5kaW1l
bnNpb24xIGYgeCk7Cgl1bmRpbWVuc2lvbjIgIGYgKE1rRGltZW5zaW9uZWQgeCkgKE1rRGltZW5z
aW9uZWQgeSkgPSBmIHggeTsKCXVuZGltZW5zaW9uMnIgZiB4IHkgPSBNa0RpbWVuc2lvbmVkICh1
bmRpbWVuc2lvbjIgZiB4IHkpOwoKCWluc3RhbmNlIChFcSByZXApID0+IEVxIChEaW1lbnNpb25l
ZCBtYXNzIGxlbmd0aCB0aW1lIHJlcCkgd2hlcmUKCQl7CgkJKD09KSA9IHVuZGltZW5zaW9uMiAo
PT0pOwoJCX07CgoJaW5zdGFuY2UgKE9yZCByZXApID0+IE9yZCAoRGltZW5zaW9uZWQgbWFzcyBs
ZW5ndGggdGltZSByZXApIHdoZXJlCgkJewoJCWNvbXBhcmUgPSB1bmRpbWVuc2lvbjIgY29tcGFy
ZTsKCQl9OwoKCWluc3RhbmNlIChTaG93IHJlcCkgPT4gU2hvdyAoVW5pdCByZXApIHdoZXJlCgkJ
ewoJCXNob3cgPSB1bmRpbWVuc2lvbjEgc2hvdzsKCQl9OwoKCWluc3RhbmNlIChOdW0gcmVwKSA9
PiBOdW0gKFVuaXQgcmVwKSB3aGVyZQoJCXsKCQkoKykJCQk9IHVuZGltZW5zaW9uMnIgKCspOwoJ
CSgtKQkJCT0gdW5kaW1lbnNpb24yciAoLSk7CgkJKCopCQkJPSB1bmRpbWVuc2lvbjJyICgqKTsK
CQluZWdhdGUJCT0gdW5kaW1lbnNpb24xciBuZWdhdGU7CgkJYWJzCQkJPSB1bmRpbWVuc2lvbjFy
IGFiczsKCQlzaWdudW0JCT0gdW5kaW1lbnNpb24xciBzaWdudW07CgkJZnJvbUludGVnZXIJPSBN
a0RpbWVuc2lvbmVkIC4gZnJvbUludGVnZXI7CgkJZnJvbUludAkJPSBNa0RpbWVuc2lvbmVkIC4g
ZnJvbUludDsKCQl9OwoKCWluc3RhbmNlIChSZWFsIHJlcCkgPT4gUmVhbCAoVW5pdCByZXApIHdo
ZXJlCgkJewoJCXRvUmF0aW9uYWwgPSB1bmRpbWVuc2lvbjEgdG9SYXRpb25hbDsKCQl9OwoKCWlu
c3RhbmNlIChGcmFjdGlvbmFsIHJlcCkgPT4gRnJhY3Rpb25hbCAoVW5pdCByZXApIHdoZXJlCgkJ
ewoJCSgvKQkJCQk9IHVuZGltZW5zaW9uMnIgKC8pOwoJCXJlY2lwCQkJPSB1bmRpbWVuc2lvbjFy
IHJlY2lwOwoJCWZyb21SYXRpb25hbAk9IE1rRGltZW5zaW9uZWQgLiBmcm9tUmF0aW9uYWw7CgkJ
ZnJvbURvdWJsZQkJPSBNa0RpbWVuc2lvbmVkIC4gZnJvbURvdWJsZTsKCQl9OwoKCWluc3RhbmNl
IChGbG9hdGluZyByZXApID0+IEZsb2F0aW5nIChVbml0IHJlcCkgd2hlcmUKCQl7CgkJcGkJCT0J
TWtEaW1lbnNpb25lZCBwaTsKCQlleHAJCT0JdW5kaW1lbnNpb24xciBleHA7CgkJbG9nCQk9CXVu
ZGltZW5zaW9uMXIgbG9nOwoJCXNxcnQJPQl1bmRpbWVuc2lvbjFyIHNxcnQ7CgkJKCoqKQk9CXVu
ZGltZW5zaW9uMnIgKCoqKTsKCQlsb2dCYXNlCT0JdW5kaW1lbnNpb24yciBsb2dCYXNlOwoJCXNp
bgkJPQl1bmRpbWVuc2lvbjFyIHNpbjsKCQljb3MJCT0JdW5kaW1lbnNpb24xciBjb3M7CgkJdGFu
CQk9CXVuZGltZW5zaW9uMXIgdGFuOwoJCWFzaW4JPQl1bmRpbWVuc2lvbjFyIGFzaW47CgkJYWNv
cwk9CXVuZGltZW5zaW9uMXIgYWNvczsKCQlhdGFuCT0JdW5kaW1lbnNpb24xciBhdGFuOwoJCXNp
bmgJPQl1bmRpbWVuc2lvbjFyIHNpbmg7CgkJY29zaAk9CXVuZGltZW5zaW9uMXIgY29zaDsKCQl0
YW5oCT0JdW5kaW1lbnNpb24xciB0YW5oOwoJCWFzaW5oCT0JdW5kaW1lbnNpb24xciBhc2luaDsK
CQlhY29zaAk9CXVuZGltZW5zaW9uMXIgYWNvc2g7CgkJYXRhbmgJPQl1bmRpbWVuc2lvbjFyIGF0
YW5oOwoJCX07CgkKCWluc3RhbmNlIChSZWFsRnJhYyByZXApID0+IFJlYWxGcmFjIChVbml0IHJl
cCkgd2hlcmUKCQl7CgkJcHJvcGVyRnJhY3Rpb24gKE1rRGltZW5zaW9uZWQgeCkgPSAocCxNa0Rp
bWVuc2lvbmVkIHEpIHdoZXJlCgkJCXsKCQkJKHAscSkgPSBwcm9wZXJGcmFjdGlvbiB4OwoJCQl9
OwoJCXRydW5jYXRlCQk9IHVuZGltZW5zaW9uMSB0cnVuY2F0ZTsKCQlyb3VuZAkJCT0gdW5kaW1l
bnNpb24xIHJvdW5kOwoJCWNlaWxpbmcJCQk9IHVuZGltZW5zaW9uMSBjZWlsaW5nOwoJCWZsb29y
CQkJPSB1bmRpbWVuc2lvbjEgZmxvb3I7CgkJfTsKCQoJaW5zdGFuY2UgKFJlYWxGbG9hdCByZXAp
ID0+IFJlYWxGbG9hdCAoVW5pdCByZXApIHdoZXJlCgkJewoJCWZsb2F0UmFkaXgJCT0gdW5kaW1l
bnNpb24xIGZsb2F0UmFkaXg7CgkJZmxvYXREaWdpdHMJCT0gdW5kaW1lbnNpb24xIGZsb2F0RGln
aXRzOwoJCWZsb2F0UmFuZ2UJCT0gdW5kaW1lbnNpb24xIGZsb2F0UmFuZ2U7CgkJZGVjb2RlRmxv
YXQJCT0gdW5kaW1lbnNpb24xIGRlY29kZUZsb2F0OwoJCWVuY29kZUZsb2F0IHggaQk9IE1rRGlt
ZW5zaW9uZWQgKGVuY29kZUZsb2F0IHggaSk7CgkJZXhwb25lbnQJCT0gdW5kaW1lbnNpb24xIGV4
cG9uZW50OwoJCXNpZ25pZmljYW5kCQk9IHVuZGltZW5zaW9uMXIgc2lnbmlmaWNhbmQ7CgkJc2Nh
bGVGbG9hdCBpCT0gdW5kaW1lbnNpb24xciAoc2NhbGVGbG9hdCBpKTsKCQlpc05hTgkJCT0gdW5k
aW1lbnNpb24xIGlzTmFOOwoJCWlzSW5maW5pdGUJCT0gdW5kaW1lbnNpb24xIGlzSW5maW5pdGU7
CgkJaXNEZW5vcm1hbGl6ZWQJPSB1bmRpbWVuc2lvbjEgaXNEZW5vcm1hbGl6ZWQ7CgkJaXNOZWdh
dGl2ZVplcm8JPSB1bmRpbWVuc2lvbjEgaXNOZWdhdGl2ZVplcm87CgkJaXNJRUVFCQkJPSB1bmRp
bWVuc2lvbjEgaXNJRUVFOwoJCWF0YW4yCQkJPSB1bmRpbWVuc2lvbjJyIGF0YW4yOwoJCX07CgoJ
LS0gWW91IGNhbiBhZGQgb3Igc3VidHJhY3Qgb25seSBpZGVudGljYWxseSBkaW1lbnNpb25lZCBx
dWFudGl0aWVzLgoJcGx1cywgbWludXMgOjogTnVtIHJlcCA9PgoJCURpbWVuc2lvbmVkIG1hc3Mg
bGVuZ3RoIHRpbWUgcmVwIC0+CgkJRGltZW5zaW9uZWQgbWFzcyBsZW5ndGggdGltZSByZXAgLT4K
CQlEaW1lbnNpb25lZCBtYXNzIGxlbmd0aCB0aW1lIHJlcDsKCXBsdXMgIChNa0RpbWVuc2lvbmVk
IHgpIChNa0RpbWVuc2lvbmVkIHkpID0gTWtEaW1lbnNpb25lZCAoeCt5KTsKCW1pbnVzIChNa0Rp
bWVuc2lvbmVkIHgpIChNa0RpbWVuc2lvbmVkIHkpID0gTWtEaW1lbnNpb25lZCAoeC15KTsKCgkt
LSBZb3UgY2FuIG11bHRpcGx5IGFueSB0d28gZGltZW5zaW9uZWQgcXVhbnRpdGllczsgZXhwb25l
bnRzCgktLSBmcm9tIHRoZSBvcGVyYW5kcyBhZGQgdXAgaW4gdGhlIHJlc3VsdC4KCXRpbWVzIDo6
IChOdW0gcmVwLAoJCUFkZCBtYXNzIG1hc3MnIG1hc3MnJywKCQlBZGQgbGVuZ3RoIGxlbmd0aCcg
bGVuZ3RoJycsCgkJQWRkIHRpbWUgdGltZScgdGltZScnKSA9PgoJCURpbWVuc2lvbmVkIG1hc3Mg
bGVuZ3RoIHRpbWUgcmVwIC0+CgkJRGltZW5zaW9uZWQgbWFzcycgbGVuZ3RoJyB0aW1lJyByZXAg
LT4KCQlEaW1lbnNpb25lZCBtYXNzJycgbGVuZ3RoJycgdGltZScnIHJlcDsKCXRpbWVzIChNa0Rp
bWVuc2lvbmVkIHgpIChNa0RpbWVuc2lvbmVkIHkpID0gTWtEaW1lbnNpb25lZCAoeCAqIHkpOwoK
CS0tIFNpbWlsYXJseSBmb3IgZGl2aXNpb24sIGV4Y2VwdCBleHBvbmVudHMgYXJlIHN1YnRyYWN0
ZWQuCglkaXZieSA6OiAoRnJhY3Rpb25hbCByZXAsCgkJU3ViIG1hc3MgbWFzcycgbWFzcycnLAoJ
CVN1YiBsZW5ndGggbGVuZ3RoJyBsZW5ndGgnJywKCQlTdWIgdGltZSB0aW1lJyB0aW1lJycpID0+
CgkJRGltZW5zaW9uZWQgbWFzcyBsZW5ndGggdGltZSByZXAgLT4KCQlEaW1lbnNpb25lZCBtYXNz
JyBsZW5ndGgnIHRpbWUnIHJlcCAtPgoJCURpbWVuc2lvbmVkIG1hc3MnJyBsZW5ndGgnJyB0aW1l
JycgcmVwOwoJZGl2YnkgKE1rRGltZW5zaW9uZWQgeCkgKE1rRGltZW5zaW9uZWQgeSkgPSBNa0Rp
bWVuc2lvbmVkICh4IC8geSk7CgoJLS0gYmFzZSB1bml0cyBhcyBTSS4KCWtpbG9ncmFtbWUJOjog
KE51bSByZXApID0+IE1hc3MgcmVwOwoJa2lsb2dyYW1tZQk9IChNa0RpbWVuc2lvbmVkIDEpOwoJ
bWV0cmUJCTo6IChOdW0gcmVwKSA9PiBMZW5ndGggcmVwOwoJbWV0cmUJCT0gKE1rRGltZW5zaW9u
ZWQgMSk7CglzZWNvbmQJCTo6IChOdW0gcmVwKSA9PiBUaW1lIHJlcDsKCXNlY29uZAkJPSAoTWtE
aW1lbnNpb25lZCAxKTsKCXVuaXQJCTo6IChOdW0gcmVwKSA9PiBVbml0IHJlcDsKCXVuaXQJCT0g
MTsKCX0K
--Emailer_-1225003723--