Re: exportFn and evalStream questions
Joe Wells <[email protected]> Wed, 07 Oct 2009 21:06:38 +0100
| Newsgroups | gmane.comp.lang.sml.smlnj |
|---|---|
| Message-ID | <[email protected]> |
Sm9obiBSZXBweSA8amhyQGNzLnVjaGljYWdvLmVkdT4gd3JpdGVzOgoKPiBPbiBPY3QgNSwgMjAw OSwgYXQgNzo0MyBBTSwgSm9lIFdlbGxzIHdyb3RlOgo+Cj4+IERlYXIgU01ML05KIGd1cnVzLAo+ PiAKPj4gV291bGQgaXQgYmUgcG9zc2libGUgZm9yIHNvbWVvbmUgdG8gcGxlYXNlIGFuc3dlciAx IG9yIG1vcmUgb2YgdGhlCj4+IGZvbGxvd2luZyBxdWVzdGlvbnMgYWJvdXQgZXhwb3J0Rm4gYW5k IGV2YWxTdHJlYW0/Cj4KPiBJIGNhbiBhbnN3ZXIgdGhlIGZpcnN0IHR3by4KClRoYW5rcyEKCj4g RGF2ZSBvciBNYXR0aGlhcyBzaG91bGQgYmUgYWJsZSB0byBhZGRyZXNzIHRoZSBvdGhlcnMuCgpU aGF0IHdvdWxkIGJlIGxvdmVseSwgYnV0IEkgd2FudCB5b3UgdG8ga25vdyB0aGF0IEkgYW0gdmVy eSBncmF0ZWZ1bApmb3IgZXZlbiB0aGUgYW5zd2VycyB5b3UgaGF2ZSBhbHJlYWR5IGdpdmVuIG1l LgoKPj4gMS4gV2hlcmUgZG9lcyBleHBvcnRGbiBkaXNjYXJkIHRoZSBjb250ZW50cyBvZiB0aGUg dG9wLWxldmVsCj4+ICAgZW52aXJvbm1lbnQ/ICBJJ3ZlIGJlZW4gbG9va2luZyB0aHJvdWdoIHRo ZSBzb3VyY2UgY29kZSBhbmQgaWYgSQo+PiAgIGhhdmUgc2VlbiBpdCBJIGNlcnRhaW5seSBoYXZl IG5vdCByZWNvZ25pemVkIGl0LiAgSXQgaXMgY2xlYXIgdGhhdAo+PiAgIHRoaXMgaXMgaGFwcGVu aW5nIGJvdGggZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYWxzbyBmcm9tIHRoZQo+PiAgIGZh Y3QgdGhhdCBzdWJzZXF1ZW50IHVzZXMgb2YgZXZhbFN0cmVhbSBvciB1c2VTdHJlYW0gc2VlbSB0 bwo+PiAgIGNvbXBsYWluIHRoYXQgYWxsIGlkZW50aWZpZXJzIGFyZSB1bmRlZmluZWQuCj4KPiBU aGUgZGlzY2FyZGluZyBvZiB0aGUgZW52aXJvbm1lbnQgaXMgZWZmZWN0aXZlbHkgZG9uZSBieSB0 aGUgR0MuICBXZQo+IGlzb2xhdGUgdGhlIHJldHVybiBjb250aW51YXRpb24gb2YgdGhlIGV4cG9y dGVkIGZ1bmN0aW9uIHNvIHRoYXQgaXQKPiBkb2VzIG5vdCByZWZlciB0byB0aGUgdG9wLWxldmVs LWxvb3AsIGFuZCwgdGh1cywgdGhlIGVudmlyb25tZW50IGJlY29tZXMKPiBnYXJiYWdlLgoKVGhh bmtzIHZlcnkgbXVjaCBmb3IgdGhpcyBhbnN3ZXIuCgpJIG5vdyByZWFsaXplIHRoYXQgSSB3YXMg Y29uZnVzZWQgYWJvdXQgc29tZXRoaW5nLiAgTXkgYmVzdCBndWVzcyBhcwp0byB0aGUgY2F1c2Ug b2YgbXkgY29uZnVzaW9uIGlzIHRoYXQgSSBtdXN0IGhhdmUgbGVmdCBvdXQgYSB2aXRhbApzZW1p Y29sb24gYmV0d2VlbiB0d28gdG9wLWxldmVsIGRlY2xhcmF0aW9ucyB3aGVuIEkgd2FzIHRlc3Rp bmcKdGhpbmdzLCBhbmQgc29tZWhvdyB0aG91Z2h0IHRoZSBtaXNzaW5nIGRlZmluaXRpb25zIGR1 cmluZyBhIGNhbGwgdG8KZXZhbFN0cmVhbSB3ZXJlIGNhdXNlZCBieSBzb21ldGhpbmcgZGVsaWJl cmF0ZWx5IHJlbW92aW5nIHRoZW0gZnJvbQp0aGUgdG9wLWxldmVsIGVudmlyb25tZW50IGR1cmlu ZyBleHBvcnRGbiwgYmVjYXVzZSB0aGUgcHJvYmxlbSB3ZW50CmF3YXkgd2hlbiBJIHN3aXRjaGVk IHRvIGV4cG9ydE1MLgoKVGhlIGFuc3dlciB5b3UgZ2F2ZSBhYm92ZSBtYWRlIG1lIHRoaW5rIHRo aW5ncyB0aHJvdWdoIGFnYWluIGFuZCByZWRvCm15IHRlc3RzLgoKPj4gMi4gSXMgaXQgcG9zc2li bGUgdG8gZ2V0IHRoZSBzYW1lIHNwYWNlLXNhdmluZyBlZmZlY3QgYXMgZXhwb3J0Rm4KPj4gICB3 aXRob3V0IGhhdmluZyB0byB3cml0ZSBhIGhlYXAgaW1hZ2UgdG8gZGlzayBhbmQgdGhlbiBleGVj IGEgZnJlc2gKPj4gICBzbWwgcHJvY2VzcyB0byBsb2FkIHRoZSBoZWFwIGltYWdlPyAgKEFub3Ro ZXIgcHJvYmxlbSB0aGlzIHdvdWxkCj4+ICAgYXZvaWQgaXMgdGhlIGZhY3QgdGhhdCBleHBvcnRG biBjbG9zZXMgYWxsIGZpbGVzIGFuZCBjbGVhcnMgdGhlCj4+ICAgc2lnbmFsIGhhbmRsZXIgdGFi bGUuKSAgSXMgaXQgZW5vdWdoIHRvIGNsZWFyIHRoZSB0b3AtbGV2ZWwKPj4gICBlbnZpcm9ubWVu dCBieSBoYW5kIGFuZCB0aGVuIGxldCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgZG8gaXRzIHdvcms/ Cj4+ICAgQW5kIGRvZXMgYW55b25lIGhhdmUgYW55IGV4YW1wbGUgU01MIGNvZGUgdGhhdCBjbGVh cnMgdGhlIHRvcC1sZXZlbAo+PiAgIGVudmlyb25tZW50IGNvcnJlY3RseT8gIENhbiBkb2luZyB0 aGlzIHJlbGVhc2UgbWVtb3J5IGJhY2sgdG8gdGhlCj4+ICAgc3lzdGVtPyAgSWYgbm90LCBjYW4g ZG9pbmcgdGhpcyBhdCBsZWFzdCByZWR1Y2UgdGhlIGFtb3VudCBvZiB3b3JrCj4+ICAgdGhlIGdh cmJhZ2UgY29sbGVjdG9yIG5lZWRzIHRvIGRvIHJlZ3VsYXJseT8KPgo+IFllcywgYXMgbG9uZyBh cyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4gdG8gdGhlIHRvcC1sZXZlbCBsb29wLgoKT2theSwg c28gdGhpcyBpcyB0aGUga2V5LiAgU28gSSd2ZSBub3cgdHJpZWQgdGhpcy4KCkxldCBtZSBnaXZl IGEgYml0IG9mIHRoZSBiYWNrZ3JvdW5kLiAgSSd2ZSBiZWVuIHdvcmtpbmcgb24gYSBzeXN0ZW0K Zm9yIGxldHRpbmcgcGVvcGxlIHdyaXRlIFNNTC9OSiBzY3JpcHRzLiAgQmVpbmcgYWJsZSB0byB3 cml0ZSBTTUwKc2NyaXB0cyBtYWtlcyBpdCByZWFzb25hYmxlIHRvIHVzZSBTTUwgaW4gYSBsb3Qg bW9yZSBzaXR1YXRpb25zLApiZWNhdXNlIHRoZSB0aW1lIG92ZXJoZWFkIG9mIHNldHRpbmcgdXAg YW5kIGRlYnVnZ2luZyB0aGUgc2NoZW1lIGZvcgpidWlsZGluZyB5b3VyIHByb2dyYW0gaXMgYSBs b3Qgc21hbGxlciAoYmFzaWNhbGx5IHRoaXMgb3ZlcmhlYWQgY29zdApnb2VzIHRvIHplcm8pLiAg VGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gZ2l2aW5nIHByb2JsZW1zIHRvCnN0 dWRlbnRzLCBiZWNhdXNlIHRoZXkgY2FuIGZvY3VzIG9uIHRoZSBwcm9ncmFtbWluZyBhbmQgbm90 IGFib3V0IGhvdwp0byBjb21waWxlIGFuZCBsaW5rIHRoZWlyIGZpbGVzIGFuZCBkdW1wIHRoZSBo ZWFwIGFuZCBzbyBvbi4KCldpdGggbXkgc3lzdGVtLCB0aGUg4oCcaGVsbG8gd29ybGTigJ0gcHJv Z3JhbSBjYW4gbG9vayBsaWtlIHRoaXM6CgogICMhL2RpcmVjdG9yeS9wYXRoL2dvZXMvaGVyZS9z bWxuai1zY3JpcHQKICBwcmludCAiSGVsbG8sIHdvcmxkIVxuIgoKQWN0dWFsbHksIG15IOKAnGhl bGxvIHdvcmxk4oCdIHByb2dyYW0gbG9va3MgbGlrZSB0aGlzOgoKICAjIS91c3IvYmluL2VudiBz bWxuai1zY3JpcHQKICA7KCotKi1TTUwtKi0qKQogIHNpbGVuY2VDb21waWxlciAoKTsKICBwcmlu dCAiSGVsbG8sIHdvcmxkIVxuIjsKClRoZSBleHRyYSB0aGluZ3MgYXJlIGFzIGZvbGxvd3MuICAo MSkgRm9yIG5vdywgSSB1c2Ug4oCcZW524oCdIHRvIHNlYXJjaApmb3Ig4oCcc21sbmotc2NyaXB0 4oCdIGluIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gdGhlIHVzZXIncyBQQVRICmVudmlyb25t ZW50IHZhcmlhYmxlLCBzbyBpdCBjYW4gYmUgaW5zdGFsbGVkIGluIHZhcmlvdXMgcGxhY2VzLiAg KDIpClRoZSBzZWNvbmQgbGluZSBiZWdpbnMgd2l0aCBhIHNlbWktY29sb24gc28gdGhhdCB0aGUg Zmlyc3QgbGluZSBpcyBhdApsZWFzdCBzeW50YWN0aWNhbGx5IHZhbGlkIFNNTCBhbmQgdmFyaW91 cyBwcm9ncmFtIHRvb2xzIChsaWtlIHRoZQpFbWFjcyBTTUwgbW9kZSkgd2lsbCBiZSBsZXNzIGNv bmZ1c2VkLiAgKDMpIFRoZSBjb21tZW50IG9uIHRoZSBzZWNvbmQKbGluZSB0ZWxscyBFbWFjcyB0 byB1c2UgU01MIG1vZGUsIGJlY2F1c2UgRW1hY3MgaGFzbid0IHlldCBiZWVuIHRvbGQKYWJvdXQg d2hpY2ggbW9kZSB0byB1c2Ugd2l0aCB0aGUgaW50ZXJwcmV0ZXIgc3BlY2lmaWVkIG9uIHRoZSBm aXJzdApsaW5lLiAgKDQpIFRoZSBpbnZvY2F0aW9uIG9mIHNpbGVuY2VDb21waWxlciBzaHV0cyB1 cCBhbGwgdXNlcyBvZgpDb250cm9sLlByaW50LnNheSB0byBzdXBwcmVzcyBtZXNzYWdlcyBmb3Ig c3VjY2Vzc2Z1bCBkZWNsYXJhdGlvbnMgYW5kCmF1dG9sb2FkaW5nLiAgSSBkb24ndCBkbyB0aGlz IGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGF0IGFsc28gc3RvcHMgdHlwZQplcnJvciBtZXNzYWdlcy4g IFNvIHRoZSBpZGVhIGlzIG9uY2UgdGhlIHByb2dyYW1tZXIgaXMgbW9zdGx5IGhhcHB5CnRoZXkg d2lsbCBpbnNlcnQgYSBjYWxsIHRvIHNpbGVuY2VDb21waWxlci4KCk9rYXksIHNvIG5vdyB5b3Ug a25vdyB0aGUgYmFja2dyb3VuZC4KClRoZSBwcm9ibGVtIGlzIHRoYXQgZXZlbiB0aGUgc2ltcGxl c3QgcHJvZ3JhbXMgdXNlIHJvdWdobHkgMzAgTSBieXRlcwpvZiB2aXJ0dWFsIG1lbW9yeSwgYW5k IGhhdmUgYSByZXNpZGVudCBzZXQgc2l6ZSAoUlNTKSBvZiBzb21ld2hlcmUKYmV0d2VlbiAxMCBh bmQgMzAgTSBieXRlcy4KCkJlZm9yZSBJIGZvbGxvd2VkIHlvdXIgYWR2aWNlLCB0aGUgcHJvZ3Jh bXMgd2VyZSB1c2luZyByb3VnaGx5IDQwIE0KYnl0ZXMgb2YgdmlydHVhbCBtZW1vcnkuICBTbyBJ IGhhdmUgbm93IHNhdmVkIGFib3V0IDEwIE0gb2YgdmlydHVhbAptZW1vcnkuICBJbiBzb21lIGNh c2UsIHRoZSBSU1Mgd2VudCBkb3duIGJ5IGhhbGYsIHdoaWxlIGluIG90aGVyIGNhc2VzCml0IHN0 YXllZCB0aGUgc2FtZS4KCkFzIHlvdSBjYW4gc2VlIHRob3VnaCwgSSBzdGlsbCBoYXZlIGEgcHJv YmxlbSwgYmVjYXVzZSAzMCBNIGJ5dGVzIG9mCm1lbW9yeSBmb3Ig4oCcaGVsbG8gd29ybGTigJ0g aXMgd2F5IHRvbyBtdWNoLgoKSGVyZSBpcyBhIHNpbXBsZSBzY3JpcHQgdGhhdCBuZWVkcyAzMyBN IGJ5dGVzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZAoyOCBNIGJ5dGVzIG9mIHJlYWwgbWVtb3J5OgoK ICAjIS91c3IvYmluL2VudiBzbWxuai1zY3JpcHQKICA7KCotKi1TTUwtKi0qKQogIHNpbGVuY2VD b21waWxlciAoKTsKICBwcmludCAic2VlIGhvdyBtdWNoIG1lbW9yeSB0aGlzIGlzIHVzaW5nIC4u LlxuIjsKICB2YWwgcGlkID0gV29yZDMyLnRvSW50IChQb3NpeC5Qcm9jZXNzLnBpZFRvV29yZCAo UG9zaXguUHJvY0Vudi5nZXRwaWQgKCkpKTsKICB2YWwgcHNDbWQgPSAicHMgbCAiIF4gSW50LnRv U3RyaW5nIHBpZDsKICBmdW4gZG9QcyAoKSA9IE9TLlByb2Nlc3Muc3lzdGVtIHBzQ21kOwogIGRv UHMoKTsKICBwcmludCAibm93IGV4aXRpbmcgZXZhbExvb3AsIHNlZSBpZiBtZW1vcnkgaGFzIGJl ZW4gZnJlZWQgLi4uXG4iOwogIGZ1biBmaW5pc2ggKCkgPSAod2hpbGUgdHJ1ZSBkbyAoZG9Qcygp OyBPUy5Qcm9jZXNzLnNsZWVwIChUaW1lLmZyb21TZWNvbmRzIDIpKSk7CiAgZmluaXNoRnVuY3Rp b24gOj0gZmluaXNoOwoKVGhlIG9ubHkgdGhpbmcgbm9uLW9idmlvdXMgdG8gZXhwbGFpbiBhYm91 dCB3aGF0IHRoaXMgc2NyaXB0IGRvZXMgaXMKdGhhdCB3aGF0ZXZlciBmdW5jdGlvbiBpcyBzdG9y ZWQgYnkgdGhlIHVzZXIgaW4gdGhlIHJlZiBjZWxsCmZpbmlzaEZ1bmN0aW9uIHdpbGwgYmUgaW52 b2tlZCBieSBzbWxuai1zY3JpcHQgKmFmdGVyKiB0aGUgZXZhbExvb3AKdGhhdCBwcm9jZXNzZWQg dGhlIHNjcmlwdCBmaWxlIHJldHVybnMuICBTbyB0aGUgdXNlciBjYW4gcHV0IHRoZSBtYWluCmxv bmctcnVubmluZyBsb29wIG9mIHRoZWlyIHByb2dyYW0gaW4gZmluaXNoRnVuY3Rpb24gYW5kIHRo aXMgd2lsbAphbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSBzcGFjZSB1c2Vk IGJ5IHRoZSBjb21waWxlci4KSGVyZSBpcyB0aGUgb3V0cHV0IEkgZ2V0IGZyb20gdGhpczoKCiAg c2VlIGhvdyBtdWNoIG1lbW9yeSB0aGlzIGlzIHVzaW5nIC4uLgogIEYgICBVSUQgICBQSUQgIFBQ SUQgUFJJICBOSSAgICBWU1ogICBSU1MgV0NIQU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1B TkQKICAwICAxMDAwICA1OTI2ICA4NTM1ICAyMCAgIDAgIDQwODA0IDM2NTY0IC0gICAgICBTKyAg IHB0cy83ICAgICAgMDowMCBzbWxuai1zY3JpcAogIG5vdyBleGl0aW5nIGV2YWxMb29wLCBzZWUg aWYgbWVtb3J5IGhhcyBiZWVuIGZyZWVkIC4uLgogIEYgICBVSUQgICBQSUQgIFBQSUQgUFJJICBO SSAgICBWU1ogICBSU1MgV0NIQU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1BTkQKICAwICAx MDAwICA1OTI2ICA4NTM1ICAyMCAgIDAgIDMyODY4IDI4Mjg0IC0gICAgICBTKyAgIHB0cy83ICAg ICAgMDowMCBzbWxuai1zY3JpcAogIEYgICBVSUQgICBQSUQgIFBQSUQgUFJJICBOSSAgICBWU1og ICBSU1MgV0NIQU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1BTkQKICAwICAxMDAwICA1OTI2 ICA4NTM1ICAyMCAgIDAgIDMyODY4IDI4Mjg0IC0gICAgICBTKyAgIHB0cy83ICAgICAgMDowMCBz bWxuai1zY3JpcAogIEYgICBVSUQgICBQSUQgIFBQSUQgUFJJICBOSSAgICBWU1ogICBSU1MgV0NI QU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1BTkQKICAwICAxMDAwICA1OTI2ICA4NTM1ICAy MCAgIDAgIDMyODY4IDI4Mjg0IC0gICAgICBSKyAgIHB0cy83ICAgICAgMDowMCBzbWxuai1zY3Jp cAogIC4uLgoKQXMgeW91IGNhbiBzZWUsIHRoZSBHQyB3YXMgYWJsZSB0byByZWNsYWltIGFib3V0 IDggTSBieXRlcyBvZiBtZW1vcnkKd2hlbiB0aGUgZXZhbExvb3Agd2FzIGV4aXRlZC4gIEJ1dCB0 aGUgcHJvZ3JhbSBzdGlsbCB1c2VzIGFyb3VuZCAzMCBNCmJ5dGVzIG9mIG1lbW9yeSBqdXN0IHRv IGRvIHRoaXM6CgogIHdoaWxlIHRydWUgZG8gKGRvUHMoKTsgT1MuUHJvY2Vzcy5zbGVlcCAoVGlt ZS5mcm9tU2Vjb25kcyAyKSkKCk5lZWRpbmcgMzAgTSBieXRlcyBvZiBtZW1vcnkgdG8ga2VlcCBh cm91bmQgdGhlIGltcGxlbWVudGF0aW9uIG9mCk9TLlByb2Nlc3Muc2xlZXAsIFRpbWUuZnJvbVNl Y29uZHMsIGFuZCBPUy5Qcm9jZXNzLnN5c3RlbSBzZWVtcyBhIGJpdAptdWNoIHRvIG1lLgoKSXMg dGhlcmUgYW55dGhpbmcgSSBjYW4gZG8gdG8gaW1wcm92ZSBvbiB0aGlzPyAgSWRlYWxseSB3aXRo b3V0CndyaXRpbmcgYSBoZWFwIGZpbGUgdG8gZGlzaywgd2hpY2ggaXMgYSBiaXQgZXhjZXNzaXZl IGZvciBqdXN0CmltcGxlbWVudGluZyBzY3JpcHRpbmcuCgpGb3IgcmVmZXJlbmNlLCBJJ3ZlIGlu Y2x1ZGVkIHRoZSByZWxldmFudCBiaXRzIG9mIHNtbG5qLXNjcmlwdCBiZWxvdy4KCj4gU2VlIHRo ZSBjb2RlIGluCj4KPiAJYmFzZS9zeXN0ZW0vQmFzaXMvSW1wbGVtZW50YXRpb24vTkovZXhwb3J0 LnNtbAoKSnVzdCBjdXJpb3VzLCBidXQgd2hhdCBzaG91bGQgSSBiZSBzZWVpbmcgaW4gdGhpcyBm aWxlPyAgSSBjYW4ndCBzZWUKd2hhdCBJIHNob3VsZCBiZSBsZWFybmluZyBmcm9tIGl0LgoKQnkg dGhlIHdheSwgSSBhbSBzdGlsbCBpbnRlcmVzdGVkIGluIGFuc3dlcnMgdG8gbXkgb3RoZXIgcXVl c3Rpb25zCihxdW90ZWQganVzdCBiZWxvdykgYmVjYXVzZSB0aGV5IGFyZSBhZGRyZXNzaW5nIG90 aGVyIHF1aXRlIGRpc3RpbmN0CnByb2JsZW1zLgoKPj4gMy4gSXMgaXMgcG9zc2libGUgdG8gcHJl c2VydmUgc29tZSBwb3J0aW9uIG9mIHRoZSB0b3AtbGV2ZWwKPj4gICBlbnZpcm9ubWVudCBhY3Jv c3MgYW4gZXhwb3J0Rm4/ICBJdCB3b3VsZCBiZSBlbm91Z2ggdG8gcHJlc2VydmUgdGhlCj4+ICAg Y29uc3RydWN0b3JzIGFuZCB0eXBlIG5hbWVzIG9mIHNvbWUgZGF0YXR5cGVzIGFuZCBidWlsdC1p biB0eXBlcywKPj4gICBzbyB0aGF0IGV2YWxTdHJlYW0gYW5kIHVzZVN0cmVhbSBjb3VsZCBzdGls bCB3b3JrIGZvciBwYXJzaW5nLCB0eXBlCj4+ICAgY2hlY2tpbmcsIGFuZCBwcmV0dHkgcHJpbnRp bmcgZGF0YXR5cGUgdmFsdWVzLgo+Cj4+IDQuIENhbiBzb21lb25lIHByb3ZpZGUgYW4gZXhhbXBs ZSBvZiBjb25zdHJ1Y3RpbmcgYSBjdXN0b20gZW52aXJvbm1lbnQKPj4gICBmb3IgdXNlIHdpdGgg ZXZhbFN0cmVhbT8gIEFueSBleGFtcGxlIHdvdWxkIGRvLiAgSSBhbHJlYWR5IGtub3cgaG93Cj4+ ICAgdG8gZG8gc29tZXRoaW5nIHRoYXQgc2VlbXMgZXF1aXZhbGVudCB0byB0aGUgdG9wLWxldmVs IGVudmlyb25tZW50Lgo+PiAgIEl0IHdvdWxkIGJlIHBhcnRpY3VsYXJseSBuaWNlIGlmIHRoZSBl eGFtcGxlIHNob3dlZCBob3cgdG8gaW5jbHVkZQo+PiAgIGp1c3QgZGF0YXR5cGUgY29uc3RydWN0 b3JzIGFuZCB0eXBlIG5hbWVzLgo+PiAKPj4gVGhhbmtzIGZvciB5b3VyIHRpbWUgaW4gY29uc2lk ZXJpbmcgbXkgcXVlc3Rpb25zLiAgQW5kIGV4dHJhIHRoYW5rcwo+PiBpZiBhbnlvbmUgYW5zd2Vy cyBldmVuIGp1c3Qgb25lIG9mIG15IHF1ZXN0aW9ucyEKPj4gCj4+IC0tIEpvZQoKVG8gYW55b25l IHdobyB0YWtlcyB0aGUgdGltZSB0byBldmVuIGFkZCBhIHNob3J0IGFuc3dlciwgdGhhbmtzIHZl cnkKbXVjaCEKCi0tIApKb2UKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhl IE1ha2VmaWxlIHRoYXQgYnVpbGRzIHNtbG5qLXNjcmlwdDoKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQouLi4KCnNt bG5qLXNjcmlwdDogc21sbmotc2NyaXB0LnNtbAoJVVNFX0VYUE9SVF9GTj15ZXMgc21sIHNtbG5q LXNjcmlwdC5zbWwKCSNzbWwgc21sbmotc2NyaXB0LnNtbAoJaGVhcDJleGVjIHNtbG5qLXNjcmlw dC54ODYtbGludXggc21sbmotc2NyaXB0CgkjICoqKiBGSVg6IG1ha2UgdGhpcyBNYWtlZmlsZSB1 c2FibGUgYnkgb3RoZXJzISAgZG9uJ3QgaGFyZC13aXJlIG9zL2FyY2ghCgouLi4KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQp0aGUgcmVsZXZhbnQgYml0cyBvZiBzbWxuai1zY3JpcHQuc21sOgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci4uLgoKKCogVGhlIHVzZXIgY2FuIHJlZGVmaW5lIGZpbmlzaEZ1bmN0aW9uIHRvIGdldCBzb21l dGhpbmcgdG8gYmUKICAgZXZhbHVhdGVkIGFmdGVyIHVzZVN0cmVhbSBpcyBkb25lLiAgVGhlIHBv aW50IGlzIHRoYXQgdGhpcyBhbGxvd3MKICAgdGhlIGNvbXBpbGVyIHRvIGJlIGdhcmJhZ2UgY29s bGVjdGVkIHNvIGxvbmctcnVubmluZyBzY3JpcHRzIGRvIG5vdAogICBoYXZlIHRvIHRpZSBkb3du IGh1Z2UgY2h1bmtzIG9mIG1lbW9yeS4gKikKdmFsIGZpbmlzaEZ1bmN0aW9uID0gcmVmIChmbiAo KSA9PiAoKSk7CgpmdW4gZmluaXNoICgpID0KICAgICgoKiBpbnZva2luZyB0aGUgR0Mgd2l0aCBs ZXNzIHRoYW4gdGhlIG1heGltdW0gZ2VuZXJhdGlvbiBzZWVtcyB0bwogICAgICAgIGhhdmUgbm8g ZWZmZWN0ICopCiAgICAgU01Mb2ZOSi5JbnRlcm5hbHMuR0MuZG9HQyAodmFsT2YgSW50Lm1heElu dCk7CiAgICAgKCogaW52b2tpbmcgdGhlIEdDIHdpdGggbWF4aW11bSBnZW5lcmF0aW9uIGp1c3Qg b25jZSBibG93cyB1cAogICAgICAgIG1lbW9yeSB1c2FnZSBlbm9ybW91c2x5IHVudGlsIHRoZSBt YXhpbXVtIGdlbmVyYXRpb24gaXMKICAgICAgICBjb2xsZWN0ZWQgYWdhaW4sIHNvIHdlIGRvIGl0 IHR3aWNlLiAgYXJyZ2ghICopCiAgICAgU01Mb2ZOSi5JbnRlcm5hbHMuR0MuZG9HQyAodmFsT2Yg SW50Lm1heEludCk7CiAgICAgKCogUHJvdmlkZWQgd2UgZHVtcGVkIHdpdGggZXhwb3J0Rm4sIGF0 IHRoaXMgcG9pbnQgb24gbXkgbWFjaGluZQogICAgICAgIHRoZSBzY3JpcHQgd2lsbCBiZSB1c2lu ZyBhYm91dCAxMCBNIGJ5dGVzIGxlc3MgdmlydHVhbCBtZW1vcnkuCiAgICAgICAgVGhlIHJlc2lk ZW50IHNldCBzaXplIHdpbGwgc29tZXRpbWVzIGhhdmUgZGVjcmVhc2VkLiAqKQogICAgICEgZmlu aXNoRnVuY3Rpb24gKCk7CiAgICAgT1MuUHJvY2Vzcy5leGl0IE9TLlByb2Nlc3Muc3VjY2VzcykK CigqIG5vIHNlbWljb2xvbiBoZXJlIGRlbGliZXJhdGVseSB0byBhdm9pZCBhZGRpbmcgdG8gdG9w LWxldmVsIGVudmlyb25tZW50ICopCgooKiBXZSBkZWZpbmUgaGVyZSBhIHNlcGFyYXRlIGZ1bmN0 aW9uIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBleHBvcnRGbgogICBzbyB0aGF0IHdlIGNhbiBlYXNp bHkgc3dpdGNoIHRoZSBpbXBsZW1lbnRhdGlvbiBiZXR3ZWVuIGV4cG9ydE1MIGFuZAogICBleHBv cnRGbi4gKikKZnVuIG1haW4gKF8sIF8gKCogaWdub3JlIHRoaXMgd2hpY2ggc2hvdWxkIGJlIGEg Y29weSBvZiBTTUxvZk5KLmdldEFyZ3MgKCkgKikpID0KICAgIGxldCAoKiAqKiogZ2l2ZSBuaWNl IGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgaXMgbm90IGF0IGxlYXN0IDEgYXJndW1lbnQuICopCiAg ICAgICAgKCogQ29tbWFuZExpbmUuYXJndW1lbnRzIGRvZXMgdGhlIHNhbWUgYXMgU01Mb2ZOSi5n ZXRBcmdzLiAqKQogICAgICAgIHZhbCBmID0gVGV4dElPLm9wZW5JbiAoaGQgKFNNTG9mTkouZ2V0 QXJncyAoKSkpCiAgICBpbiBTTUxvZk5KLnNoaWZ0QXJncyAoKTsKICAgICAgICgqIHNraXAgb3Zl ciAjISBsaW5lICopCiAgICAgICAoKiAqKiogY2hlY2sgdGhhdCAjISBsaW5lIGlzIG9mIGNvcnJl Y3QgZm9ybSAqKQogICAgICAgVGV4dElPLmlucHV0TGluZSBmOwogICAgICAgKCogKioqIGZpbmQg d2F5IHRvIGZpeCBlcnJvciBtZXNzYWdlcyB0byBtZW50aW9uIGNvcnJlY3QgZmlsZSBuYW1lIGFu ZCBsaW5lIG51bWJlciEgKikKICAgICAgIEJhY2tlbmQuSW50ZXJhY3QudXNlU3RyZWFtIGY7CiAg ICAgICBUZXh0SU8uY2xvc2VJbiBmOwogICAgICAgKCogdGFpbCBjYWxsLCBob3BlZnVsbHkgZnJl ZWluZyB0aGUgY2xvc3VyZSBmb3IgdGhpcyBmdW5jdGlvbiAobWFpbikhICopCiAgICAgICBmaW5p c2ggKCkKICAgIGVuZAoKKCogbm8gc2VtaWNvbG9uIGhlcmUgZGVsaWJlcmF0ZWx5IHRvIGF2b2lk IGFkZGluZyB0byB0b3AtbGV2ZWwgZW52aXJvbm1lbnQgKikKCnZhbCBzY3JpcHRJbnRlcnByZXRl ckZpbGUgPSAic21sbmotc2NyaXB0IgoKKCogbm8gc2VtaWNvbG9uIGhlcmUgZGVsaWJlcmF0ZWx5 IHRvIGF2b2lkIGFkZGluZyB0byB0b3AtbGV2ZWwgZW52aXJvbm1lbnQgKikKCigqIFRoaXMgYWxs b3dzIHRoZSBNYWtlZmlsZSB0byBkZWNpZGUgaG93IHRvIGR1bXAgdGhlIGhlYXAuICopCnZhbCB1 c2VFeHBvcnRNTCA9IG5vdCAoaXNTb21lIChPUy5Qcm9jZXNzLmdldEVudiAiVVNFX0VYUE9SVF9G TiIpKQoKKCogbm8gc2VtaWNvbG9uIGhlcmUgZGVsaWJlcmF0ZWx5IHRvIGF2b2lkIGFkZGluZyB0 byB0b3AtbGV2ZWwgZW52aXJvbm1lbnQgKikKCnZhbCAoKSA9IGlmIHVzZUV4cG9ydE1MCiAgICAg ICAgIHRoZW4gaWYgKHByaW50ICJkdW1waW5nIHdpdGggZXhwb3J0TUxcbiI7CiAgICAgICAgICAg ICAgICAgIFNNTG9mTkouZXhwb3J0TUwgc2NyaXB0SW50ZXJwcmV0ZXJGaWxlKQogICAgICAgICAg ICAgIHRoZW4gaWdub3JlIChtYWluIChTTUxvZk5KLmdldENtZE5hbWUgKCksIFNNTG9mTkouZ2V0 QXJncyAoKSkpCiAgICAgICAgICAgICAgZWxzZSBPUy5Qcm9jZXNzLmV4aXQgT1MuUHJvY2Vzcy5z dWNjZXNzCiAgICAgICAgIGVsc2UgKHByaW50ICJkdW1waW5nIHdpdGggZXhwb3J0Rm5cbiI7CiAg ICAgICAgICAgICAgIFNNTG9mTkouZXhwb3J0Rm4gKHNjcmlwdEludGVycHJldGVyRmlsZSwgbWFp bikpCgoKLS0gCkhlcmlvdC1XYXR0IFVuaXZlcnNpdHkgaXMgYSBTY290dGlzaCBjaGFyaXR5CnJl Z2lzdGVyZWQgdW5kZXIgY2hhcml0eSBudW1iZXIgU0MwMDAyNzguCgoKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCkNvbWUgYnVpbGQgd2l0aCB1cyEgVGhlIEJsYWNrQmVycnkoUikgRGV2ZWxvcGVyIENv bmZlcmVuY2UgaW4gU0YsIENBCmlzIHRoZSBvbmx5IGRldmVsb3BlciBldmVudCB5b3UgbmVlZCB0 byBhdHRlbmQgdGhpcyB5ZWFyLiBKdW1wc3RhcnQgeW91cgpkZXZlbG9waW5nIHNraWxscywgdGFr ZSBCbGFja0JlcnJ5IG1vYmlsZSBhcHBsaWNhdGlvbnMgdG8gbWFya2V0IGFuZCBzdGF5IAphaGVh ZCBvZiB0aGUgY3VydmUuIEpvaW4gdXMgZnJvbSBOb3ZlbWJlciA5IC0gMTIsIDIwMDkuIFJlZ2lz dGVyIG5vdyEKaHR0cDovL3Auc2YubmV0L3NmdS9kZXZjb25mZXJlbmNlCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClNtbG5qLWxpc3QgbWFpbGluZyBsaXN0 ClNtbG5qLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBzOi8vbGlzdHMuc291cmNlZm9y Z2UubmV0L2xpc3RzL2xpc3RpbmZvL3NtbG5qLWxpc3QK