Octave gateway to NetLibs rkf45.f

"John Weatherwax" <[email protected]> Tue, 22 Nov 2005 19:28:16 -0600
Newsgroups gmane.comp.gnu.octave.sources
Message-ID <[email protected]>
This is a multi-part message in MIME format.

------=_NextPart_000_41f3_6a1_7092
Content-Type: text/plain; format=flowed

Hello,

As practice writting gateway routines in C++ to existing FORTRAN code
I have written routines that call the Netlib ordinary differential
equations solver code: rkf45.f.  The user can pass in a simple octave
function to be integrated and let the existing FORTRAN code to the
actual integration.

Please let me know of any comments about code/style etc anyone may have.

I know that octave has a very good existing ODE solver but for practice I
worked on these...

Thanks,

John Weatherwax

_________________________________________________________________
On the road to retirement? Check out MSN Life Events for advice on how to 
get there! http://lifeevents.msn.com/category.aspx?cid=Retirement

------=_NextPart_000_41f3_6a1_7092
Content-Type: application/octet-stream; name="F.m"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="F.m"

ZnVuY3Rpb24gWyByZXMgXSA9IEYodCx4KQogIAolcmVzID0gMTsgCiVyZXMg
PSBzaW4odCk7IAolcmVzID0gc2luKHgpOyAKcmVzID0gWyB4KDEpKnNpbih4
KDIpKnQpOyB4KDIpKmNvcyh0KSBdOyAKCg==


------=_NextPart_000_41f3_6a1_7092
Content-Type: application/octet-stream; name="mkRKF45"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mkRKF45"

IyEvYmluL3NoCgpta29jdGZpbGUgcmtmNDVnLmNjIHJrZjQ1LmYKCgo=


------=_NextPart_000_41f3_6a1_7092
Content-Type: application/octet-stream; name="orbit.m"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="orbit.m"

ZnVuY3Rpb24gWyByZXMgXSA9IG9yYml0KHQseCkKJSAKJSBBIHRlc3QgYW5k
IHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBya2Y0NSBmcm9tIHRoZSBi
b29rIAolIAolIENvbXB1dGVyIE1ldGhvZHMgZm9yIE1hdGhlbWF0aWNhbCBD
b21wdXRhdGlvbnMKJSBieSBHZW9yZ2UgRS4gRm9yc3l0aGUsIE1pY2hhZWwg
QS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVyLgolIAolIG9uIHBhZ2Ug
MTMzCiUgCiUgV3JpdHRlbiBieToKJSAtLSAKJSBKb2huIEwuIFdlYXRoZXJ3
YXggICAgICAgICAgICAgICAgMjAwNS0xMC0yOQolIAolIGVtYWlsOiB3YXhA
YWx1bS5taXQuZWR1CiUgCiUgUGxlYXNlIHNlbmQgY29tbWVudHMgYW5kIGVz
cGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCiUgYWJvdmUgZW1haWwgYWRk
cmVzcy4KJSAKJS0tLS0tCgphbHBoYSA9IHBpLzQ7IAphbHBoYXNxID0gYWxw
aGFeMjsgClIgPSB4KDEpKngoMSkgKyB4KDIpKngoMik7ClIgPSBSKnNxcnQo
UikvYWxwaGFzcTsKCnJlcyA9IFsgeCgzKTsgeCg0KTsgLXgoMSkvUjsgLXgo
MikvUiBdOyAK


------=_NextPart_000_41f3_6a1_7092
Content-Type: application/octet-stream; name="rkf45.f"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rkf45.f"

ICAgICAgc3Vicm91dGluZSBya2Y0NShmLG5lcW4seSx0LHRvdXQscmVsZXJy
LGFic2VycixpZmxhZyx3b3JrLGl3b3JrKQpjCmMgICAgIGZlaGxiZXJnIGZv
dXJ0aC1maWZ0aCBvcmRlciBydW5nZS1rdXR0YSBtZXRob2QKYwpjICAgICB3
cml0dGVuIGJ5IGguYS53YXR0cyBhbmQgbC5mLnNoYW1waW5lCmMgICAgICAg
ICAgICAgICAgICAgc2FuZGlhIGxhYm9yYXRvcmllcwpjICAgICAgICAgICAg
ICAgICAgYWxidXF1ZXJxdWUsbmV3IG1leGljbwpjCmMgICAgcmtmNDUgaXMg
cHJpbWFyaWx5IGRlc2lnbmVkIHRvIHNvbHZlIG5vbi1zdGlmZiBhbmQgbWls
ZGx5IHN0aWZmCmMgICAgZGlmZmVyZW50aWFsIGVxdWF0aW9ucyB3aGVuIGRl
cml2YXRpdmUgZXZhbHVhdGlvbnMgYXJlIGluZXhwZW5zaXZlLgpjICAgIHJr
ZjQ1IHNob3VsZCBnZW5lcmFsbHkgbm90IGJlIHVzZWQgd2hlbiB0aGUgdXNl
ciBpcyBkZW1hbmRpbmcKYyAgICBoaWdoIGFjY3VyYWN5LgpjCmMgYWJzdHJh
Y3QKYwpjICAgIHN1YnJvdXRpbmUgIHJrZjQ1ICBpbnRlZ3JhdGVzIGEgc3lz
dGVtIG9mIG5lcW4gZmlyc3Qgb3JkZXIKYyAgICBvcmRpbmFyeSBkaWZmZXJl
bnRpYWwgZXF1YXRpb25zIG9mIHRoZSBmb3JtCmMgICAgICAgICAgICAgZHko
aSkvZHQgPSBmKHQseSgxKSx5KDIpLC4uLix5KG5lcW4pKQpjICAgICAgICAg
ICAgICB3aGVyZSB0aGUgeShpKSBhcmUgZ2l2ZW4gYXQgdCAuCmMgICAgdHlw
aWNhbGx5IHRoZSBzdWJyb3V0aW5lIGlzIHVzZWQgdG8gaW50ZWdyYXRlIGZy
b20gdCB0byB0b3V0IGJ1dCBpdApjICAgIGNhbiBiZSB1c2VkIGFzIGEgb25l
LXN0ZXAgaW50ZWdyYXRvciB0byBhZHZhbmNlIHRoZSBzb2x1dGlvbiBhCmMg
ICAgc2luZ2xlIHN0ZXAgaW4gdGhlIGRpcmVjdGlvbiBvZiB0b3V0LiAgb24g
cmV0dXJuIHRoZSBwYXJhbWV0ZXJzIGluCmMgICAgdGhlIGNhbGwgbGlzdCBh
cmUgc2V0IGZvciBjb250aW51aW5nIHRoZSBpbnRlZ3JhdGlvbi4gdGhlIHVz
ZXIgaGFzCmMgICAgb25seSB0byBjYWxsIHJrZjQ1IGFnYWluIChhbmQgcGVy
aGFwcyBkZWZpbmUgYSBuZXcgdmFsdWUgZm9yIHRvdXQpLgpjICAgIGFjdHVh
bGx5LCBya2Y0NSBpcyBhbiBpbnRlcmZhY2luZyByb3V0aW5lIHdoaWNoIGNh
bGxzIHN1YnJvdXRpbmUKYyAgICBya2ZzIGZvciB0aGUgc29sdXRpb24uICBy
a2ZzIGluIHR1cm4gY2FsbHMgc3Vicm91dGluZSAgZmVobCB3aGljaApjICAg
IGNvbXB1dGVzIGFuIGFwcHJveGltYXRlIHNvbHV0aW9uIG92ZXIgb25lIHN0
ZXAuCmMKYyAgICBya2Y0NSAgdXNlcyB0aGUgcnVuZ2Uta3V0dGEtZmVobGJl
cmcgKDQsNSkgIG1ldGhvZCBkZXNjcmliZWQKYyAgICBpbiB0aGUgcmVmZXJl
bmNlCmMgICAgZS5mZWhsYmVyZyAsIGxvdy1vcmRlciBjbGFzc2ljYWwgcnVu
Z2Uta3V0dGEgZm9ybXVsYXMgd2l0aCBzdGVwc2l6ZQpjICAgICAgICAgICAg
ICAgICBjb250cm9sICwgbmFzYSB0ciByLTMxNQpjCmMgICAgdGhlIHBlcmZv
cm1hbmNlIG9mIHJrZjQ1IGlzIGlsbHVzdHJhdGVkIGluIHRoZSByZWZlcmVu
Y2UKYyAgICBsLmYuc2hhbXBpbmUsaC5hLndhdHRzLHMuZGF2ZW5wb3J0LCBz
b2x2aW5nIG5vbi1zdGlmZiBvcmRpbmFyeQpjICAgICAgICAgICAgICAgICBk
aWZmZXJlbnRpYWwgZXF1YXRpb25zLXRoZSBzdGF0ZSBvZiB0aGUgYXJ0ICwK
YyAgICAgICAgICAgICAgICAgc2FuZGlhIGxhYm9yYXRvcmllcyByZXBvcnQg
c2FuZDc1LTAxODIgLApjICAgICAgICAgICAgICAgICB0byBhcHBlYXIgaW4g
c2lhbSByZXZpZXcuCmMKYwpjICAgIHRoZSBwYXJhbWV0ZXJzIHJlcHJlc2Vu
dC0KYyAgICAgIGYgLS0gc3Vicm91dGluZSBmKHQseSx5cCkgdG8gZXZhbHVh
dGUgZGVyaXZhdGl2ZXMgeXAoaSk9ZHkoaSkvZHQKYyAgICAgIG5lcW4gLS0g
bnVtYmVyIG9mIGVxdWF0aW9ucyB0byBiZSBpbnRlZ3JhdGVkCmMgICAgICB5
KCopIC0tIHNvbHV0aW9uIHZlY3RvciBhdCB0CmMgICAgICB0IC0tIGluZGVw
ZW5kZW50IHZhcmlhYmxlCmMgICAgICB0b3V0IC0tIG91dHB1dCBwb2ludCBh
dCB3aGljaCBzb2x1dGlvbiBpcyBkZXNpcmVkCmMgICAgICByZWxlcnIsYWJz
ZXJyIC0tIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBlcnJvciB0b2xlcmFuY2Vz
IGZvciBsb2NhbApjICAgICAgICAgICAgZXJyb3IgdGVzdC4gYXQgZWFjaCBz
dGVwIHRoZSBjb2RlIHJlcXVpcmVzIHRoYXQKYyAgICAgICAgICAgICAgICAg
YWJzKGxvY2FsIGVycm9yKSAubGUuIHJlbGVyciphYnMoeSkgKyBhYnNlcnIK
YyAgICAgICAgICAgIGZvciBlYWNoIGNvbXBvbmVudCBvZiB0aGUgbG9jYWwg
ZXJyb3IgYW5kIHNvbHV0aW9uIHZlY3RvcnMKYyAgICAgIGlmbGFnIC0tIGlu
ZGljYXRvciBmb3Igc3RhdHVzIG9mIGludGVncmF0aW9uCmMgICAgICB3b3Jr
KCopIC0tIGFycmF5IHRvIGhvbGQgaW5mb3JtYXRpb24gaW50ZXJuYWwgdG8g
cmtmNDUgd2hpY2ggaXMKYyAgICAgICAgICAgIG5lY2Vzc2FyeSBmb3Igc3Vi
c2VxdWVudCBjYWxscy4gbXVzdCBiZSBkaW1lbnNpb25lZApjICAgICAgICAg
ICAgYXQgbGVhc3QgIDMrNipuZXFuCmMgICAgICBpd29yaygqKSAtLSBpbnRl
Z2VyIGFycmF5IHVzZWQgdG8gaG9sZCBpbmZvcm1hdGlvbiBpbnRlcm5hbCB0
bwpjICAgICAgICAgICAgcmtmNDUgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBz
dWJzZXF1ZW50IGNhbGxzLiBtdXN0IGJlCmMgICAgICAgICAgICBkaW1lbnNp
b25lZCBhdCBsZWFzdCAgNQpjCmMKYyAgZmlyc3QgY2FsbCB0byBya2Y0NQpj
CmMgICAgdGhlIHVzZXIgbXVzdCBwcm92aWRlIHN0b3JhZ2UgaW4gaGlzIGNh
bGxpbmcgcHJvZ3JhbSBmb3IgdGhlIGFycmF5cwpjICAgIGluIHRoZSBjYWxs
IGxpc3QgIC0gICAgICB5KG5lcW4pICwgd29yaygzKzYqbmVxbikgLCBpd29y
ayg1KSAgLApjICAgIGRlY2xhcmUgZiBpbiBhbiBleHRlcm5hbCBzdGF0ZW1l
bnQsIHN1cHBseSBzdWJyb3V0aW5lIGYodCx5LHlwKSBhbmQKYyAgICBpbml0
aWFsaXplIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycy0KYwpjICAgICAgbmVx
biAtLSBudW1iZXIgb2YgZXF1YXRpb25zIHRvIGJlIGludGVncmF0ZWQuICAo
bmVxbiAuZ2UuIDEpCmMgICAgICB5KCopIC0tIHZlY3RvciBvZiBpbml0aWFs
IGNvbmRpdGlvbnMKYyAgICAgIHQgLS0gc3RhcnRpbmcgcG9pbnQgb2YgaW50
ZWdyYXRpb24gLCBtdXN0IGJlIGEgdmFyaWFibGUKYyAgICAgIHRvdXQgLS0g
b3V0cHV0IHBvaW50IGF0IHdoaWNoIHNvbHV0aW9uIGlzIGRlc2lyZWQuCmMg
ICAgICAgICAgICB0PXRvdXQgaXMgYWxsb3dlZCBvbiB0aGUgZmlyc3QgY2Fs
bCBvbmx5LCBpbiB3aGljaCBjYXNlCmMgICAgICAgICAgICBya2Y0NSByZXR1
cm5zIHdpdGggaWZsYWc9MiBpZiBjb250aW51YXRpb24gaXMgcG9zc2libGUu
CmMgICAgICByZWxlcnIsYWJzZXJyIC0tIHJlbGF0aXZlIGFuZCBhYnNvbHV0
ZSBsb2NhbCBlcnJvciB0b2xlcmFuY2VzCmMgICAgICAgICAgICB3aGljaCBt
dXN0IGJlIG5vbi1uZWdhdGl2ZS4gcmVsZXJyIG11c3QgYmUgYSB2YXJpYWJs
ZSB3aGlsZQpjICAgICAgICAgICAgYWJzZXJyIG1heSBiZSBhIGNvbnN0YW50
LiB0aGUgY29kZSBzaG91bGQgbm9ybWFsbHkgbm90IGJlCmMgICAgICAgICAg
ICB1c2VkIHdpdGggcmVsYXRpdmUgZXJyb3IgY29udHJvbCBzbWFsbGVyIHRo
YW4gYWJvdXQgMS5lLTggLgpjICAgICAgICAgICAgdG8gYXZvaWQgbGltaXRp
bmcgcHJlY2lzaW9uIGRpZmZpY3VsdGllcyB0aGUgY29kZSByZXF1aXJlcwpj
ICAgICAgICAgICAgcmVsZXJyIHRvIGJlIGxhcmdlciB0aGFuIGFuIGludGVy
bmFsbHkgY29tcHV0ZWQgcmVsYXRpdmUKYyAgICAgICAgICAgIGVycm9yIHBh
cmFtZXRlciB3aGljaCBpcyBtYWNoaW5lIGRlcGVuZGVudC4gaW4gcGFydGlj
dWxhciwKYyAgICAgICAgICAgIHB1cmUgYWJzb2x1dGUgZXJyb3IgaXMgbm90
IHBlcm1pdHRlZC4gaWYgYSBzbWFsbGVyIHRoYW4KYyAgICAgICAgICAgIGFs
bG93YWJsZSB2YWx1ZSBvZiByZWxlcnIgaXMgYXR0ZW1wdGVkLCBya2Y0NSBp
bmNyZWFzZXMKYyAgICAgICAgICAgIHJlbGVyciBhcHByb3ByaWF0ZWx5IGFu
ZCByZXR1cm5zIGNvbnRyb2wgdG8gdGhlIHVzZXIgYmVmb3JlCmMgICAgICAg
ICAgICBjb250aW51aW5nIHRoZSBpbnRlZ3JhdGlvbi4KYyAgICAgIGlmbGFn
IC0tICsxLC0xICBpbmRpY2F0b3IgdG8gaW5pdGlhbGl6ZSB0aGUgY29kZSBm
b3IgZWFjaCBuZXcKYyAgICAgICAgICAgIHByb2JsZW0uIG5vcm1hbCBpbnB1
dCBpcyArMS4gdGhlIHVzZXIgc2hvdWxkIHNldCBpZmxhZz0tMQpjICAgICAg
ICAgICAgb25seSB3aGVuIG9uZS1zdGVwIGludGVncmF0b3IgY29udHJvbCBp
cyBlc3NlbnRpYWwuIGluIHRoaXMKYyAgICAgICAgICAgIGNhc2UsIHJrZjQ1
IGF0dGVtcHRzIHRvIGFkdmFuY2UgdGhlIHNvbHV0aW9uIGEgc2luZ2xlIHN0
ZXAKYyAgICAgICAgICAgIGluIHRoZSBkaXJlY3Rpb24gb2YgdG91dCBlYWNo
IHRpbWUgaXQgaXMgY2FsbGVkLiBzaW5jZSB0aGlzCmMgICAgICAgICAgICBt
b2RlIG9mIG9wZXJhdGlvbiByZXN1bHRzIGluIGV4dHJhIGNvbXB1dGluZyBv
dmVyaGVhZCwgaXQKYyAgICAgICAgICAgIHNob3VsZCBiZSBhdm9pZGVkIHVu
bGVzcyBuZWVkZWQuCmMKYwpjICBvdXRwdXQgZnJvbSBya2Y0NQpjCmMgICAg
ICB5KCopIC0tIHNvbHV0aW9uIGF0IHQKYyAgICAgIHQgLS0gbGFzdCBwb2lu
dCByZWFjaGVkIGluIGludGVncmF0aW9uLgpjICAgICAgaWZsYWcgPSAyIC0t
IGludGVncmF0aW9uIHJlYWNoZWQgdG91dC4gaW5kaWNhdGVzIHN1Y2Nlc3Nm
dWwgcmV0dXIKYyAgICAgICAgICAgICAgICAgICBhbmQgaXMgdGhlIG5vcm1h
bCBtb2RlIGZvciBjb250aW51aW5nIGludGVncmF0aW9uLgpjICAgICAgICAg
ICAgPS0yIC0tIGEgc2luZ2xlIHN1Y2Nlc3NmdWwgc3RlcCBpbiB0aGUgZGly
ZWN0aW9uIG9mIHRvdXQKYyAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiB0
YWtlbi4gbm9ybWFsIG1vZGUgZm9yIGNvbnRpbnVpbmcKYyAgICAgICAgICAg
ICAgICAgICBpbnRlZ3JhdGlvbiBvbmUgc3RlcCBhdCBhIHRpbWUuCmMgICAg
ICAgICAgICA9IDMgLS0gaW50ZWdyYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQg
YmVjYXVzZSByZWxhdGl2ZSBlcnJvcgpjICAgICAgICAgICAgICAgICAgIHRv
bGVyYW5jZSB3YXMgdG9vIHNtYWxsLiByZWxlcnIgaGFzIGJlZW4gaW5jcmVh
c2VkCmMgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVseSBmb3IgY29u
dGludWluZy4KYyAgICAgICAgICAgID0gNCAtLSBpbnRlZ3JhdGlvbiB3YXMg
bm90IGNvbXBsZXRlZCBiZWNhdXNlIG1vcmUgdGhhbgpjICAgICAgICAgICAg
ICAgICAgIDMwMDAgZGVyaXZhdGl2ZSBldmFsdWF0aW9ucyB3ZXJlIG5lZWRl
ZC4gdGhpcwpjICAgICAgICAgICAgICAgICAgIGlzIGFwcHJveGltYXRlbHkg
NTAwIHN0ZXBzLgpjICAgICAgICAgICAgPSA1IC0tIGludGVncmF0aW9uIHdh
cyBub3QgY29tcGxldGVkIGJlY2F1c2Ugc29sdXRpb24KYyAgICAgICAgICAg
ICAgICAgICB2YW5pc2hlZCBtYWtpbmcgYSBwdXJlIHJlbGF0aXZlIGVycm9y
IHRlc3QKYyAgICAgICAgICAgICAgICAgICBpbXBvc3NpYmxlLiBtdXN0IHVz
ZSBub24temVybyBhYnNlcnIgdG8gY29udGludWUuCmMgICAgICAgICAgICAg
ICAgICAgdXNpbmcgdGhlIG9uZS1zdGVwIGludGVncmF0aW9uIG1vZGUgZm9y
IG9uZSBzdGVwCmMgICAgICAgICAgICAgICAgICAgaXMgYSBnb29kIHdheSB0
byBwcm9jZWVkLgpjICAgICAgICAgICAgPSA2IC0tIGludGVncmF0aW9uIHdh
cyBub3QgY29tcGxldGVkIGJlY2F1c2UgcmVxdWVzdGVkCmMgICAgICAgICAg
ICAgICAgICAgYWNjdXJhY3kgY291bGQgbm90IGJlIGFjaGlldmVkIHVzaW5n
IHNtYWxsZXN0CmMgICAgICAgICAgICAgICAgICAgYWxsb3dhYmxlIHN0ZXBz
aXplLiB1c2VyIG11c3QgaW5jcmVhc2UgdGhlIGVycm9yCmMgICAgICAgICAg
ICAgICAgICAgdG9sZXJhbmNlIGJlZm9yZSBjb250aW51ZWQgaW50ZWdyYXRp
b24gY2FuIGJlCmMgICAgICAgICAgICAgICAgICAgYXR0ZW1wdGVkLgpjICAg
ICAgICAgICAgPSA3IC0tIGl0IGlzIGxpa2VseSB0aGF0IHJrZjQ1IGlzIGlu
ZWZmaWNpZW50IGZvciBzb2x2aW5nCmMgICAgICAgICAgICAgICAgICAgdGhp
cyBwcm9ibGVtLiB0b28gbXVjaCBvdXRwdXQgaXMgcmVzdHJpY3RpbmcgdGhl
CmMgICAgICAgICAgICAgICAgICAgbmF0dXJhbCBzdGVwc2l6ZSBjaG9pY2Uu
IHVzZSB0aGUgb25lLXN0ZXAgaW50ZWdyYXRvcgpjICAgICAgICAgICAgICAg
ICAgIG1vZGUuCmMgICAgICAgICAgICA9IDggLS0gaW52YWxpZCBpbnB1dCBw
YXJhbWV0ZXJzCmMgICAgICAgICAgICAgICAgICAgdGhpcyBpbmRpY2F0b3Ig
b2NjdXJzIGlmIGFueSBvZiB0aGUgZm9sbG93aW5nIGlzCmMgICAgICAgICAg
ICAgICAgICAgc2F0aXNmaWVkIC0gICBuZXFuIC5sZS4gMApjICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdD10b3V0ICBhbmQgIGlmbGFnIC5u
ZS4gKzEgb3IgLTEKYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbGVyciBvciBhYnNlcnIgLmx0LiAwLgpjICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWZsYWcgLmVxLiAwICBvciAgLmx0LiAtMiAgb3Ig
IC5ndC4gOApjICAgICAgd29yaygqKSxpd29yaygqKSAtLSBpbmZvcm1hdGlv
biB3aGljaCBpcyB1c3VhbGx5IG9mIG5vIGludGVyZXN0CmMgICAgICAgICAg
ICAgICAgICAgdG8gdGhlIHVzZXIgYnV0IG5lY2Vzc2FyeSBmb3Igc3Vic2Vx
dWVudCBjYWxscy4KYyAgICAgICAgICAgICAgICAgICB3b3JrKDEpLC4uLix3
b3JrKG5lcW4pIGNvbnRhaW4gdGhlIGZpcnN0IGRlcml2YXRpdmVzCmMgICAg
ICAgICAgICAgICAgICAgb2YgdGhlIHNvbHV0aW9uIHZlY3RvciB5IGF0IHQu
IHdvcmsobmVxbisxKSBjb250YWlucwpjICAgICAgICAgICAgICAgICAgIHRo
ZSBzdGVwc2l6ZSBoIHRvIGJlIGF0dGVtcHRlZCBvbiB0aGUgbmV4dCBzdGVw
LgpjICAgICAgICAgICAgICAgICAgIGl3b3JrKDEpIGNvbnRhaW5zIHRoZSBk
ZXJpdmF0aXZlIGV2YWx1YXRpb24gY291bnRlci4KYwpjCmMgIHN1YnNlcXVl
bnQgY2FsbHMgdG8gcmtmNDUKYwpjICAgIHN1YnJvdXRpbmUgcmtmNDUgcmV0
dXJucyB3aXRoIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29udGludWUK
YyAgICB0aGUgaW50ZWdyYXRpb24uIGlmIHRoZSBpbnRlZ3JhdGlvbiByZWFj
aGVkIHRvdXQsIHRoZSB1c2VyIG5lZWQgb25sCmMgICAgZGVmaW5lIGEgbmV3
IHRvdXQgYW5kIGNhbGwgcmtmNDUgYWdhaW4uIGluIHRoZSBvbmUtc3RlcCBp
bnRlZ3JhdG9yCmMgICAgbW9kZSAoaWZsYWc9LTIpIHRoZSB1c2VyIG11c3Qg
a2VlcCBpbiBtaW5kIHRoYXQgZWFjaCBzdGVwIHRha2VuIGlzCmMgICAgaW4g
dGhlIGRpcmVjdGlvbiBvZiB0aGUgY3VycmVudCB0b3V0LiB1cG9uIHJlYWNo
aW5nIHRvdXQgKGluZGljYXRlZApjICAgIGJ5IGNoYW5naW5nIGlmbGFnIHRv
IDIpLHRoZSB1c2VyIG11c3QgdGhlbiBkZWZpbmUgYSBuZXcgdG91dCBhbmQK
YyAgICByZXNldCBpZmxhZyB0byAtMiB0byBjb250aW51ZSBpbiB0aGUgb25l
LXN0ZXAgaW50ZWdyYXRvciBtb2RlLgpjCmMgICAgaWYgdGhlIGludGVncmF0
aW9uIHdhcyBub3QgY29tcGxldGVkIGJ1dCB0aGUgdXNlciBzdGlsbCB3YW50
cyB0bwpjICAgIGNvbnRpbnVlIChpZmxhZz0zLDQgY2FzZXMpLCBoZSBqdXN0
IGNhbGxzIHJrZjQ1IGFnYWluLiB3aXRoIGlmbGFnPTMKYyAgICB0aGUgcmVs
ZXJyIHBhcmFtZXRlciBoYXMgYmVlbiBhZGp1c3RlZCBhcHByb3ByaWF0ZWx5
IGZvciBjb250aW51aW5nCmMgICAgdGhlIGludGVncmF0aW9uLiBpbiB0aGUg
Y2FzZSBvZiBpZmxhZz00IHRoZSBmdW5jdGlvbiBjb3VudGVyIHdpbGwKYyAg
ICBiZSByZXNldCB0byAwIGFuZCBhbm90aGVyIDMwMDAgZnVuY3Rpb24gZXZh
bHVhdGlvbnMgYXJlIGFsbG93ZWQuCmMKYyAgICBob3dldmVyLGluIHRoZSBj
YXNlIGlmbGFnPTUsIHRoZSB1c2VyIG11c3QgZmlyc3QgYWx0ZXIgdGhlIGVy
cm9yCmMgICAgY3JpdGVyaW9uIHRvIHVzZSBhIHBvc2l0aXZlIHZhbHVlIG9m
IGFic2VyciBiZWZvcmUgaW50ZWdyYXRpb24gY2FuCmMgICAgcHJvY2VlZC4g
aWYgaGUgZG9lcyBub3QsZXhlY3V0aW9uIGlzIHRlcm1pbmF0ZWQuCmMKYyAg
ICBhbHNvLGluIHRoZSBjYXNlIGlmbGFnPTYsIGl0IGlzIG5lY2Vzc2FyeSBm
b3IgdGhlIHVzZXIgdG8gcmVzZXQKYyAgICBpZmxhZyB0byAyIChvciAtMiB3
aGVuIHRoZSBvbmUtc3RlcCBpbnRlZ3JhdGlvbiBtb2RlIGlzIGJlaW5nIHVz
ZWQpCmMgICAgYXMgd2VsbCBhcyBpbmNyZWFzaW5nIGVpdGhlciBhYnNlcnIs
cmVsZXJyIG9yIGJvdGggYmVmb3JlIHRoZQpjICAgIGludGVncmF0aW9uIGNh
biBiZSBjb250aW51ZWQuIGlmIHRoaXMgaXMgbm90IGRvbmUsIGV4ZWN1dGlv
biB3aWxsCmMgICAgYmUgdGVybWluYXRlZC4gdGhlIG9jY3VycmVuY2Ugb2Yg
aWZsYWc9NiBpbmRpY2F0ZXMgYSB0cm91YmxlIHNwb3QKYyAgICAoc29sdXRp
b24gaXMgY2hhbmdpbmcgcmFwaWRseSxzaW5ndWxhcml0eSBtYXkgYmUgcHJl
c2VudCkgYW5kIGl0CmMgICAgb2Z0ZW4gaXMgaW5hZHZpc2FibGUgdG8gY29u
dGludWUuCmMKYyAgICBpZiBpZmxhZz03IGlzIGVuY291bnRlcmVkLCB0aGUg
dXNlciBzaG91bGQgdXNlIHRoZSBvbmUtc3RlcApjICAgIGludGVncmF0aW9u
IG1vZGUgd2l0aCB0aGUgc3RlcHNpemUgZGV0ZXJtaW5lZCBieSB0aGUgY29k
ZSBvcgpjICAgIGNvbnNpZGVyIHN3aXRjaGluZyB0byB0aGUgYWRhbXMgY29k
ZXMgZGUvc3RlcCxpbnRycC4gaWYgdGhlIHVzZXIKYyAgICBpbnNpc3RzIHVw
b24gY29udGludWluZyB0aGUgaW50ZWdyYXRpb24gd2l0aCBya2Y0NSwgaGUg
bXVzdCByZXNldApjICAgIGlmbGFnIHRvIDIgYmVmb3JlIGNhbGxpbmcgcmtm
NDUgYWdhaW4uIG90aGVyd2lzZSxleGVjdXRpb24gd2lsbCBiZQpjICAgIHRl
cm1pbmF0ZWQuCmMKYyAgICBpZiBpZmxhZz04IGlzIG9idGFpbmVkLCBpbnRl
Z3JhdGlvbiBjYW4gbm90IGJlIGNvbnRpbnVlZCB1bmxlc3MKYyAgICB0aGUg
aW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBjb3JyZWN0ZWQuCmMKYyAg
ICBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGUgYXJyYXlzIHdvcmssaXdv
cmsgY29udGFpbiBpbmZvcm1hdGlvbgpjICAgIHJlcXVpcmVkIGZvciBzdWJz
ZXF1ZW50IGludGVncmF0aW9uLiBhY2NvcmRpbmdseSwgd29yayBhbmQgaXdv
cmsKYyAgICBzaG91bGQgbm90IGJlIGFsdGVyZWQuCmMKYwogICAgICBpbnRl
Z2VyIG5lcW4saWZsYWcsaXdvcmsoNSkKICAgICAgZG91YmxlIHByZWNpc2lv
biB5KG5lcW4pLHQsdG91dCxyZWxlcnIsYWJzZXJyLHdvcmsoMSkKYwogICAg
ICBleHRlcm5hbCBmCmMKICAgICAgaW50ZWdlciBrMSxrMixrMyxrNCxrNSxr
NixrMW0KYwpjCmMgICAgIGNvbXB1dGUgaW5kaWNlcyBmb3IgdGhlIHNwbGl0
dGluZyBvZiB0aGUgd29yayBhcnJheQpjCiAgICAgIGsxbT1uZXFuKzEKICAg
ICAgazE9azFtKzEKICAgICAgazI9azErbmVxbgogICAgICBrMz1rMituZXFu
CiAgICAgIGs0PWszK25lcW4KICAgICAgazU9azQrbmVxbgogICAgICBrNj1r
NStuZXFuCmMKYyAgICAgdGhpcyBpbnRlcmZhY2luZyByb3V0aW5lIG1lcmVs
eSByZWxpZXZlcyB0aGUgdXNlciBvZiBhIGxvbmcKYyAgICAgY2FsbGluZyBs
aXN0IHZpYSB0aGUgc3BsaXR0aW5nIGFwYXJ0IG9mIHR3byB3b3JraW5nIHN0
b3JhZ2UKYyAgICAgYXJyYXlzLiBpZiB0aGlzIGlzIG5vdCBjb21wYXRpYmxl
IHdpdGggdGhlIHVzZXJzIGNvbXBpbGVyLApjICAgICBoZSBtdXN0IHVzZSBy
a2ZzIGRpcmVjdGx5LgpjCiAgICAgIGNhbGwgcmtmcyhmLG5lcW4seSx0LHRv
dXQscmVsZXJyLGFic2VycixpZmxhZyx3b3JrKDEpLHdvcmsoazFtKSwKICAg
ICAxICAgICAgICAgIHdvcmsoazEpLHdvcmsoazIpLHdvcmsoazMpLHdvcmso
azQpLHdvcmsoazUpLHdvcmsoazYpLAogICAgIDIgICAgICAgICAgd29yayhr
NisxKSxpd29yaygxKSxpd29yaygyKSxpd29yaygzKSxpd29yayg0KSxpd29y
ayg1KSkKYwogICAgICByZXR1cm4KICAgICAgZW5kCiAgICAgIHN1YnJvdXRp
bmUgcmtmcyhmLG5lcW4seSx0LHRvdXQscmVsZXJyLGFic2VycixpZmxhZyx5
cCxoLGYxLGYyLGYzLAogICAgIDEgICAgICAgICAgICAgICAgZjQsZjUsc2F2
cmUsc2F2YWUsbmZlLGtvcCxpbml0LGpmbGFnLGtmbGFnKQpjCmMgICAgIGZl
aGxiZXJnIGZvdXJ0aC1maWZ0aCBvcmRlciBydW5nZS1rdXR0YSBtZXRob2QK
YwpjCmMgICAgIHJrZnMgaW50ZWdyYXRlcyBhIHN5c3RlbSBvZiBmaXJzdCBv
cmRlciBvcmRpbmFyeSBkaWZmZXJlbnRpYWwKYyAgICAgZXF1YXRpb25zIGFz
IGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgZm9yIHJrZjQ1IC4KYyAgICAg
dGhlIGFycmF5cyB5cCxmMSxmMixmMyxmNCxhbmQgZjUgKG9mIGRpbWVuc2lv
biBhdCBsZWFzdCBuZXFuKSBhbmQKYyAgICAgdGhlIHZhcmlhYmxlcyBoLHNh
dnJlLHNhdmFlLG5mZSxrb3AsaW5pdCxqZmxhZyxhbmQga2ZsYWcgYXJlIHVz
ZWQKYyAgICAgaW50ZXJuYWxseSBieSB0aGUgY29kZSBhbmQgYXBwZWFyIGlu
IHRoZSBjYWxsIGxpc3QgdG8gZWxpbWluYXRlCmMgICAgIGxvY2FsIHJldGVu
dGlvbiBvZiB2YXJpYWJsZXMgYmV0d2VlbiBjYWxscy4gYWNjb3JkaW5nbHks
IHRoZXkKYyAgICAgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLiBpdGVtcyBvZiBw
b3NzaWJsZSBpbnRlcmVzdCBhcmUKYyAgICAgICAgIHlwIC0gZGVyaXZhdGl2
ZSBvZiBzb2x1dGlvbiB2ZWN0b3IgYXQgdApjICAgICAgICAgaCAgLSBhbiBh
cHByb3ByaWF0ZSBzdGVwc2l6ZSB0byBiZSB1c2VkIGZvciB0aGUgbmV4dCBz
dGVwCmMgICAgICAgICBuZmUtIGNvdW50ZXIgb24gdGhlIG51bWJlciBvZiBk
ZXJpdmF0aXZlIGZ1bmN0aW9uIGV2YWx1YXRpb25zCmMKYwogICAgICBsb2dp
Y2FsIGhmYWlsZCxvdXRwdXQKYwogICAgICBpbnRlZ2VyICBuZXFuLGlmbGFn
LG5mZSxrb3AsaW5pdCxqZmxhZyxrZmxhZwogICAgICBkb3VibGUgcHJlY2lz
aW9uICB5KG5lcW4pLHQsdG91dCxyZWxlcnIsYWJzZXJyLGgseXAobmVxbiks
CiAgICAgMSAgZjEobmVxbiksZjIobmVxbiksZjMobmVxbiksZjQobmVxbiks
ZjUobmVxbiksc2F2cmUsCiAgICAgMiAgc2F2YWUKYwogICAgICBleHRlcm5h
bCBmCmMKICAgICAgZG91YmxlIHByZWNpc2lvbiAgYSxhZSxkdCxlZSxlZW9l
dCxlc3R0b2wsZXQsaG1pbixyZW1pbixyZXIscywKICAgICAxICBzY2FsZSx0
b2wsdG9sbix0d29lcHMsdTI2LHlwawpjCiAgICAgIGludGVnZXIgIGssbWF4
bmZlLG1mbGFnCmMKICAgICAgZG91YmxlIHByZWNpc2lvbiAgZGFicyxkbWF4
MSxkbWluMSxkc2lnbixkMW1hY2gKYwpjICByZW1pbiBpcyB0aGUgbWluaW11
bSBhY2NlcHRhYmxlIHZhbHVlIG9mIHJlbGVyci4gIGF0dGVtcHRzCmMgIHRv
IG9idGFpbiBoaWdoZXIgYWNjdXJhY3kgd2l0aCB0aGlzIHN1YnJvdXRpbmUg
YXJlIHVzdWFsbHkKYyAgdmVyeSBleHBlbnNpdmUgYW5kIG9mdGVuIHVuc3Vj
Y2Vzc2Z1bC4KYwogICAgICBkYXRhIHJlbWluLzEuZC0xMi8KYwpjCmMgICAg
IHRoZSBleHBlbnNlIGlzIGNvbnRyb2xsZWQgYnkgcmVzdHJpY3RpbmcgdGhl
IG51bWJlcgpjICAgICBvZiBmdW5jdGlvbiBldmFsdWF0aW9ucyB0byBiZSBh
cHByb3hpbWF0ZWx5IG1heG5mZS4KYyAgICAgYXMgc2V0LCB0aGlzIGNvcnJl
c3BvbmRzIHRvIGFib3V0IDUwMCBzdGVwcy4KYwogICAgICBkYXRhIG1heG5m
ZS8zMDAwLwpjCmMgICBoZXJlIHR3byBjb25zdGFudHMgZW1ib2RpbmcgdGhl
IG1hY2hpbmUgZXBzaWxvbiBpcyBwcmVzZW50CmMgICB0d29lc3AgaXMgc2V0
IHRvIHR3aWNlIHRoZSBtYWNoaW5lIGVwc2lsb24gd2hpbGUgdTI2IGlzIHNl
dApjICAgdG8gMjYgdGltZXMgdGhlIG1hY2hpbmUgZXBzaWxvbgpjCmMgICAg
IGRhdGEgdHdvZXBzLCB1MjYvNC40ZC0xNiwgNS43MmQtMTUvICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICoqKgogICAgICB0d29lcHMgPSAyLipk
MW1hY2goNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKioKICAgICAgdTI2ID0gMTMuKnR3b2VwcyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCmMK
YwpjICAgICBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzCmMKYwogICAgICBpZiAo
bmVxbiAubHQuIDEpIGdvIHRvIDEwCiAgICAgIGlmICgocmVsZXJyIC5sdC4g
MC4wZDApICAub3IuICAoYWJzZXJyIC5sdC4gMC4wZDApKSBnbyB0byAxMAog
ICAgICBtZmxhZz1pYWJzKGlmbGFnKQogICAgICBpZiAoKG1mbGFnIC5nZS4g
MSkgIC5hbmQuICAobWZsYWcgLmxlLiA4KSkgZ28gdG8gMjAKYwpjICAgICBp
bnZhbGlkIGlucHV0CiAgIDEwIGlmbGFnPTgKICAgICAgcmV0dXJuCmMKYyAg
ICAgaXMgdGhpcyB0aGUgZmlyc3QgY2FsbAogICAyMCBpZiAobWZsYWcgLmVx
LiAxKSBnbyB0byA1MApjCmMgICAgIGNoZWNrIGNvbnRpbnVhdGlvbiBwb3Nz
aWJpbGl0aWVzCmMKICAgICAgaWYgKCh0IC5lcS4gdG91dCkgLmFuZC4gKGtm
bGFnIC5uZS4gMykpIGdvIHRvIDEwCiAgICAgIGlmIChtZmxhZyAubmUuIDIp
IGdvIHRvIDI1CmMKYyAgICAgaWZsYWcgPSArMiBvciAtMgogICAgICBpZiAo
a2ZsYWcgLmVxLiAzKSBnbyB0byA0NQogICAgICBpZiAoaW5pdCAuZXEuIDAp
IGdvIHRvIDQ1CiAgICAgIGlmIChrZmxhZyAuZXEuIDQpIGdvIHRvIDQwCiAg
ICAgIGlmICgoa2ZsYWcgLmVxLiA1KSAgLmFuZC4gIChhYnNlcnIgLmVxLiAw
LjBkMCkpIGdvIHRvIDMwCiAgICAgIGlmICgoa2ZsYWcgLmVxLiA2KSAgLmFu
ZC4gIChyZWxlcnIgLmxlLiBzYXZyZSkgIC5hbmQuCiAgICAgMSAgICAoYWJz
ZXJyIC5sZS4gc2F2YWUpKSBnbyB0byAzMAogICAgICBnbyB0byA1MApjCmMg
ICAgIGlmbGFnID0gMyw0LDUsNiw3IG9yIDgKICAgMjUgaWYgKGlmbGFnIC5l
cS4gMykgZ28gdG8gNDUKICAgICAgaWYgKGlmbGFnIC5lcS4gNCkgZ28gdG8g
NDAKICAgICAgaWYgKChpZmxhZyAuZXEuIDUpIC5hbmQuIChhYnNlcnIgLmd0
LiAwLjBkMCkpIGdvIHRvIDQ1CmMKYyAgICAgaW50ZWdyYXRpb24gY2Fubm90
IGJlIGNvbnRpbnVlZCBzaW5jZSB1c2VyIGRpZCBub3QgcmVzcG9uZCB0bwpj
ICAgICB0aGUgaW5zdHJ1Y3Rpb25zIHBlcnRhaW5pbmcgdG8gaWZsYWc9NSw2
LDcgb3IgOAogICAzMCBzdG9wCmMKYyAgICAgcmVzZXQgZnVuY3Rpb24gZXZh
bHVhdGlvbiBjb3VudGVyCiAgIDQwIG5mZT0wCiAgICAgIGlmIChtZmxhZyAu
ZXEuIDIpIGdvIHRvIDUwCmMKYyAgICAgcmVzZXQgZmxhZyB2YWx1ZSBmcm9t
IHByZXZpb3VzIGNhbGwKICAgNDUgaWZsYWc9amZsYWcKICAgICAgaWYgKGtm
bGFnIC5lcS4gMykgbWZsYWc9aWFicyhpZmxhZykKYwpjICAgICBzYXZlIGlu
cHV0IGlmbGFnIGFuZCBzZXQgY29udGludWF0aW9uIGZsYWcgdmFsdWUgZm9y
IHN1YnNlcXVlbnQKYyAgICAgaW5wdXQgY2hlY2tpbmcKICAgNTAgamZsYWc9
aWZsYWcKICAgICAga2ZsYWc9MApjCmMgICAgIHNhdmUgcmVsZXJyIGFuZCBh
YnNlcnIgZm9yIGNoZWNraW5nIGlucHV0IG9uIHN1YnNlcXVlbnQgY2FsbHMK
ICAgICAgc2F2cmU9cmVsZXJyCiAgICAgIHNhdmFlPWFic2VycgpjCmMgICAg
IHJlc3RyaWN0IHJlbGF0aXZlIGVycm9yIHRvbGVyYW5jZSB0byBiZSBhdCBs
ZWFzdCBhcyBsYXJnZSBhcwpjICAgICAyKmVwcytyZW1pbiB0byBhdm9pZCBs
aW1pdGluZyBwcmVjaXNpb24gZGlmZmljdWx0aWVzIGFyaXNpbmcKYyAgICAg
ZnJvbSBpbXBvc3NpYmxlIGFjY3VyYWN5IHJlcXVlc3RzCmMKICAgICAgcmVy
PXR3b2VwcytyZW1pbgogICAgICBpZiAocmVsZXJyIC5nZS4gcmVyKSBnbyB0
byA1NQpjCmMgICAgIHJlbGF0aXZlIGVycm9yIHRvbGVyYW5jZSB0b28gc21h
bGwKICAgICAgcmVsZXJyPXJlcgogICAgICBpZmxhZz0zCiAgICAgIGtmbGFn
PTMKICAgICAgcmV0dXJuCmMKICAgNTUgZHQ9dG91dC10CmMKICAgICAgaWYg
KG1mbGFnIC5lcS4gMSkgZ28gdG8gNjAKICAgICAgaWYgKGluaXQgLmVxLiAw
KSBnbyB0byA2NQogICAgICBnbyB0byA4MApjCmMgICAgIGluaXRpYWxpemF0
aW9uIC0tCmMgICAgICAgICAgICAgICAgICAgICAgIHNldCBpbml0aWFsaXph
dGlvbiBjb21wbGV0aW9uIGluZGljYXRvcixpbml0CmMgICAgICAgICAgICAg
ICAgICAgICAgIHNldCBpbmRpY2F0b3IgZm9yIHRvbyBtYW55IG91dHB1dCBw
b2ludHMsa29wCmMgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlIGlu
aXRpYWwgZGVyaXZhdGl2ZXMKYyAgICAgICAgICAgICAgICAgICAgICAgc2V0
IGNvdW50ZXIgZm9yIGZ1bmN0aW9uIGV2YWx1YXRpb25zLG5mZQpjICAgICAg
ICAgICAgICAgICAgICAgICBldmFsdWF0ZSBpbml0aWFsIGRlcml2YXRpdmVz
CmMgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVyIGZvciBmdW5j
dGlvbiBldmFsdWF0aW9ucyxuZmUKYyAgICAgICAgICAgICAgICAgICAgICAg
ZXN0aW1hdGUgc3RhcnRpbmcgc3RlcHNpemUKYwogICA2MCBpbml0PTAKICAg
ICAga29wPTAKYwogICAgICBhPXQKICAgICAgY2FsbCBmKGEseSx5cCkKICAg
ICAgbmZlPTEKICAgICAgaWYgKHQgLm5lLiB0b3V0KSBnbyB0byA2NQogICAg
ICBpZmxhZz0yCiAgICAgIHJldHVybgpjCmMKICAgNjUgaW5pdD0xCiAgICAg
IGg9ZGFicyhkdCkKICAgICAgdG9sbj0wLgogICAgICBkbyA3MCBrPTEsbmVx
bgogICAgICAgIHRvbD1yZWxlcnIqZGFicyh5KGspKSthYnNlcnIKICAgICAg
ICBpZiAodG9sIC5sZS4gMC4pIGdvIHRvIDcwCiAgICAgICAgdG9sbj10b2wK
ICAgICAgICB5cGs9ZGFicyh5cChrKSkKICAgICAgICBpZiAoeXBrKmgqKjUg
Lmd0LiB0b2wpIGg9KHRvbC95cGspKiowLjJkMAogICA3MCBjb250aW51ZQog
ICAgICBpZiAodG9sbiAubGUuIDAuMGQwKSBoPTAuMGQwCiAgICAgIGg9ZG1h
eDEoaCx1MjYqZG1heDEoZGFicyh0KSxkYWJzKGR0KSkpCiAgICAgIGpmbGFn
PWlzaWduKDIsaWZsYWcpCmMKYwpjICAgICBzZXQgc3RlcHNpemUgZm9yIGlu
dGVncmF0aW9uIGluIHRoZSBkaXJlY3Rpb24gZnJvbSB0IHRvIHRvdXQKYwog
ICA4MCBoPWRzaWduKGgsZHQpCmMKYyAgICAgdGVzdCB0byBzZWUgaWYgcmtm
NDUgaXMgYmVpbmcgc2V2ZXJlbHkgaW1wYWN0ZWQgYnkgdG9vIG1hbnkKYyAg
ICAgb3V0cHV0IHBvaW50cwpjCiAgICAgIGlmIChkYWJzKGgpIC5nZS4gMi4w
ZDAqZGFicyhkdCkpIGtvcD1rb3ArMQogICAgICBpZiAoa29wIC5uZS4gMTAw
KSBnbyB0byA4NQpjCmMgICAgIHVubmVjZXNzYXJ5IGZyZXF1ZW5jeSBvZiBv
dXRwdXQKICAgICAga29wPTAKICAgICAgaWZsYWc9NwogICAgICByZXR1cm4K
YwogICA4NSBpZiAoZGFicyhkdCkgLmd0LiB1MjYqZGFicyh0KSkgZ28gdG8g
OTUKYwpjICAgICBpZiB0b28gY2xvc2UgdG8gb3V0cHV0IHBvaW50LGV4dHJh
cG9sYXRlIGFuZCByZXR1cm4KYwogICAgICBkbyA5MCBrPTEsbmVxbgogICA5
MCAgIHkoayk9eShrKStkdCp5cChrKQogICAgICBhPXRvdXQKICAgICAgY2Fs
bCBmKGEseSx5cCkKICAgICAgbmZlPW5mZSsxCiAgICAgIGdvIHRvIDMwMApj
CmMKYyAgICAgaW5pdGlhbGl6ZSBvdXRwdXQgcG9pbnQgaW5kaWNhdG9yCmMK
ICAgOTUgb3V0cHV0PSAuZmFsc2UuCmMKYyAgICAgdG8gYXZvaWQgcHJlbWF0
dXJlIHVuZGVyZmxvdyBpbiB0aGUgZXJyb3IgdG9sZXJhbmNlIGZ1bmN0aW9u
LApjICAgICBzY2FsZSB0aGUgZXJyb3IgdG9sZXJhbmNlcwpjCiAgICAgIHNj
YWxlPTIuMGQwL3JlbGVycgogICAgICBhZT1zY2FsZSphYnNlcnIKYwpjCmMg
ICAgIHN0ZXAgYnkgc3RlcCBpbnRlZ3JhdGlvbgpjCiAgMTAwIGhmYWlsZD0g
LmZhbHNlLgpjCmMgICAgIHNldCBzbWFsbGVzdCBhbGxvd2FibGUgc3RlcHNp
emUKYwogICAgICBobWluPXUyNipkYWJzKHQpCmMKYyAgICAgYWRqdXN0IHN0
ZXBzaXplIGlmIG5lY2Vzc2FyeSB0byBoaXQgdGhlIG91dHB1dCBwb2ludC4K
YyAgICAgbG9vayBhaGVhZCB0d28gc3RlcHMgdG8gYXZvaWQgZHJhc3RpYyBj
aGFuZ2VzIGluIHRoZSBzdGVwc2l6ZSBhbmQKYyAgICAgdGh1cyBsZXNzZW4g
dGhlIGltcGFjdCBvZiBvdXRwdXQgcG9pbnRzIG9uIHRoZSBjb2RlLgpjCiAg
ICAgIGR0PXRvdXQtdAogICAgICBpZiAoZGFicyhkdCkgLmdlLiAyLjBkMCpk
YWJzKGgpKSBnbyB0byAyMDAKICAgICAgaWYgKGRhYnMoZHQpIC5ndC4gZGFi
cyhoKSkgZ28gdG8gMTUwCmMKYyAgICAgdGhlIG5leHQgc3VjY2Vzc2Z1bCBz
dGVwIHdpbGwgY29tcGxldGUgdGhlIGludGVncmF0aW9uIHRvIHRoZQpjICAg
ICBvdXRwdXQgcG9pbnQKYwogICAgICBvdXRwdXQ9IC50cnVlLgogICAgICBo
PWR0CiAgICAgIGdvIHRvIDIwMApjCiAgMTUwIGg9MC41ZDAqZHQKYwpjCmMK
YyAgICAgY29yZSBpbnRlZ3JhdG9yIGZvciB0YWtpbmcgYSBzaW5nbGUgc3Rl
cApjCmMgICAgIHRoZSB0b2xlcmFuY2VzIGhhdmUgYmVlbiBzY2FsZWQgdG8g
YXZvaWQgcHJlbWF0dXJlIHVuZGVyZmxvdyBpbgpjICAgICBjb21wdXRpbmcg
dGhlIGVycm9yIHRvbGVyYW5jZSBmdW5jdGlvbiBldC4KYyAgICAgdG8gYXZv
aWQgcHJvYmxlbXMgd2l0aCB6ZXJvIGNyb3NzaW5ncyxyZWxhdGl2ZSBlcnJv
ciBpcyBtZWFzdXJlZApjICAgICB1c2luZyB0aGUgYXZlcmFnZSBvZiB0aGUg
bWFnbml0dWRlcyBvZiB0aGUgc29sdXRpb24gYXQgdGhlCmMgICAgIGJlZ2lu
bmluZyBhbmQgZW5kIG9mIGEgc3RlcC4KYyAgICAgdGhlIGVycm9yIGVzdGlt
YXRlIGZvcm11bGEgaGFzIGJlZW4gZ3JvdXBlZCB0byBjb250cm9sIGxvc3Mg
b2YKYyAgICAgc2lnbmlmaWNhbmNlLgpjICAgICB0byBkaXN0aW5ndWlzaCB0
aGUgdmFyaW91cyBhcmd1bWVudHMsIGggaXMgbm90IHBlcm1pdHRlZApjICAg
ICB0byBiZWNvbWUgc21hbGxlciB0aGFuIDI2IHVuaXRzIG9mIHJvdW5kb2Zm
IGluIHQuCmMgICAgIHByYWN0aWNhbCBsaW1pdHMgb24gdGhlIGNoYW5nZSBp
biB0aGUgc3RlcHNpemUgYXJlIGVuZm9yY2VkIHRvCmMgICAgIHNtb290aCB0
aGUgc3RlcHNpemUgc2VsZWN0aW9uIHByb2Nlc3MgYW5kIHRvIGF2b2lkIGV4
Y2Vzc2l2ZQpjICAgICBjaGF0dGVyaW5nIG9uIHByb2JsZW1zIGhhdmluZyBk
aXNjb250aW51aXRpZXMuCmMgICAgIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkg
ZmFpbHVyZXMsIHRoZSBjb2RlIHVzZXMgOS8xMCB0aGUgc3RlcHNpemUKYyAg
ICAgaXQgZXN0aW1hdGVzIHdpbGwgc3VjY2VlZC4KYyAgICAgYWZ0ZXIgYSBz
dGVwIGZhaWx1cmUsIHRoZSBzdGVwc2l6ZSBpcyBub3QgYWxsb3dlZCB0byBp
bmNyZWFzZSBmb3IKYyAgICAgdGhlIG5leHQgYXR0ZW1wdGVkIHN0ZXAuIHRo
aXMgbWFrZXMgdGhlIGNvZGUgbW9yZSBlZmZpY2llbnQgb24KYyAgICAgcHJv
YmxlbXMgaGF2aW5nIGRpc2NvbnRpbnVpdGllcyBhbmQgbW9yZSBlZmZlY3Rp
dmUgaW4gZ2VuZXJhbApjICAgICBzaW5jZSBsb2NhbCBleHRyYXBvbGF0aW9u
IGlzIGJlaW5nIHVzZWQgYW5kIGV4dHJhIGNhdXRpb24gc2VlbXMKYyAgICAg
d2FycmFudGVkLgpjCmMKYyAgICAgdGVzdCBudW1iZXIgb2YgZGVyaXZhdGl2
ZSBmdW5jdGlvbiBldmFsdWF0aW9ucy4KYyAgICAgaWYgb2theSx0cnkgdG8g
YWR2YW5jZSB0aGUgaW50ZWdyYXRpb24gZnJvbSB0IHRvIHQraApjCiAgMjAw
IGlmIChuZmUgLmxlLiBtYXhuZmUpIGdvIHRvIDIyMApjCmMgICAgIHRvbyBt
dWNoIHdvcmsKICAgICAgaWZsYWc9NAogICAgICBrZmxhZz00CiAgICAgIHJl
dHVybgpjCmMgICAgIGFkdmFuY2UgYW4gYXBwcm94aW1hdGUgc29sdXRpb24g
b3ZlciBvbmUgc3RlcCBvZiBsZW5ndGggaApjCiAgMjIwIGNhbGwgZmVobChm
LG5lcW4seSx0LGgseXAsZjEsZjIsZjMsZjQsZjUsZjEpCiAgICAgIG5mZT1u
ZmUrNQpjCmMgICAgIGNvbXB1dGUgYW5kIHRlc3QgYWxsb3dhYmxlIHRvbGVy
YW5jZXMgdmVyc3VzIGxvY2FsIGVycm9yIGVzdGltYXRlcwpjICAgICBhbmQg
cmVtb3ZlIHNjYWxpbmcgb2YgdG9sZXJhbmNlcy4gbm90ZSB0aGF0IHJlbGF0
aXZlIGVycm9yIGlzCmMgICAgIG1lYXN1cmVkIHdpdGggcmVzcGVjdCB0byB0
aGUgYXZlcmFnZSBvZiB0aGUgbWFnbml0dWRlcyBvZiB0aGUKYyAgICAgc29s
dXRpb24gYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzdGVwLgpj
CiAgICAgIGVlb2V0PTAuMGQwCiAgICAgIGRvIDI1MCBrPTEsbmVxbgogICAg
ICAgIGV0PWRhYnMoeShrKSkrZGFicyhmMShrKSkrYWUKICAgICAgICBpZiAo
ZXQgLmd0LiAwLjBkMCkgZ28gdG8gMjQwCmMKYyAgICAgICBpbmFwcHJvcHJp
YXRlIGVycm9yIHRvbGVyYW5jZQogICAgICAgIGlmbGFnPTUKICAgICAgICBy
ZXR1cm4KYwogIDI0MCAgIGVlPWRhYnMoKC0yMDkwLjBkMCp5cChrKSsoMjE5
NzAuMGQwKmYzKGspLTE1MDQ4LjBkMCpmNChrKSkpKwogICAgIDEgICAgICAg
ICAgICAgICAgICAgICAgICAoMjI1MjguMGQwKmYyKGspLTI3MzYwLjBkMCpm
NShrKSkpCiAgMjUwICAgZWVvZXQ9ZG1heDEoZWVvZXQsZWUvZXQpCmMKICAg
ICAgZXN0dG9sPWRhYnMoaCkqZWVvZXQqc2NhbGUvNzUyNDAwLjBkMApjCiAg
ICAgIGlmIChlc3R0b2wgLmxlLiAxLjBkMCkgZ28gdG8gMjYwCmMKYwpjICAg
ICB1bnN1Y2Nlc3NmdWwgc3RlcApjICAgICAgICAgICAgICAgICAgICAgICBy
ZWR1Y2UgdGhlIHN0ZXBzaXplICwgdHJ5IGFnYWluCmMgICAgICAgICAgICAg
ICAgICAgICAgIHRoZSBkZWNyZWFzZSBpcyBsaW1pdGVkIHRvIGEgZmFjdG9y
IG9mIDEvMTAKYwogICAgICBoZmFpbGQ9IC50cnVlLgogICAgICBvdXRwdXQ9
IC5mYWxzZS4KICAgICAgcz0wLjFkMAogICAgICBpZiAoZXN0dG9sIC5sdC4g
NTkwNDkuMGQwKSBzPTAuOWQwL2VzdHRvbCoqMC4yZDAKICAgICAgaD1zKmgK
ICAgICAgaWYgKGRhYnMoaCkgLmd0LiBobWluKSBnbyB0byAyMDAKYwpjICAg
ICByZXF1ZXN0ZWQgZXJyb3IgdW5hdHRhaW5hYmxlIGF0IHNtYWxsZXN0IGFs
bG93YWJsZSBzdGVwc2l6ZQogICAgICBpZmxhZz02CiAgICAgIGtmbGFnPTYK
ICAgICAgcmV0dXJuCmMKYwpjICAgICBzdWNjZXNzZnVsIHN0ZXAKYyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JlIHNvbHV0aW9uIGF0IHQraApjICAg
ICAgICAgICAgICAgICAgICAgICAgYW5kIGV2YWx1YXRlIGRlcml2YXRpdmVz
IHRoZXJlCmMKICAyNjAgdD10K2gKICAgICAgZG8gMjcwIGs9MSxuZXFuCiAg
MjcwICAgeShrKT1mMShrKQogICAgICBhPXQKICAgICAgY2FsbCBmKGEseSx5
cCkKICAgICAgbmZlPW5mZSsxCmMKYwpjICAgICAgICAgICAgICAgICAgICAg
ICBjaG9vc2UgbmV4dCBzdGVwc2l6ZQpjICAgICAgICAgICAgICAgICAgICAg
ICB0aGUgaW5jcmVhc2UgaXMgbGltaXRlZCB0byBhIGZhY3RvciBvZiA1CmMg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZXAgZmFpbHVyZSBoYXMganVz
dCBvY2N1cnJlZCwgbmV4dApjICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGVwc2l6ZSBpcyBub3QgYWxsb3dlZCB0byBpbmNyZWFzZQpjCiAgICAgIHM9
NS4wZDAKICAgICAgaWYgKGVzdHRvbCAuZ3QuIDEuODg5NTY4ZC00KSBzPTAu
OWQwL2VzdHRvbCoqMC4yZDAKICAgICAgaWYgKGhmYWlsZCkgcz1kbWluMShz
LDEuMGQwKQogICAgICBoPWRzaWduKGRtYXgxKHMqZGFicyhoKSxobWluKSxo
KQpjCmMgICAgIGVuZCBvZiBjb3JlIGludGVncmF0b3IKYwpjCmMgICAgIHNo
b3VsZCB3ZSB0YWtlIGFub3RoZXIgc3RlcApjCiAgICAgIGlmIChvdXRwdXQp
IGdvIHRvIDMwMAogICAgICBpZiAoaWZsYWcgLmd0LiAwKSBnbyB0byAxMDAK
YwpjCmMgICAgIGludGVncmF0aW9uIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQK
YwpjICAgICBvbmUtc3RlcCBtb2RlCiAgICAgIGlmbGFnPS0yCiAgICAgIHJl
dHVybgpjCmMgICAgIGludGVydmFsIG1vZGUKICAzMDAgdD10b3V0CiAgICAg
IGlmbGFnPTIKICAgICAgcmV0dXJuCmMKICAgICAgZW5kCiAgICAgIHN1YnJv
dXRpbmUgZmVobChmLG5lcW4seSx0LGgseXAsZjEsZjIsZjMsZjQsZjUscykK
YwpjICAgICBmZWhsYmVyZyBmb3VydGgtZmlmdGggb3JkZXIgcnVuZ2Uta3V0
dGEgbWV0aG9kCmMKYyAgICBmZWhsIGludGVncmF0ZXMgYSBzeXN0ZW0gb2Yg
bmVxbiBmaXJzdCBvcmRlcgpjICAgIG9yZGluYXJ5IGRpZmZlcmVudGlhbCBl
cXVhdGlvbnMgb2YgdGhlIGZvcm0KYyAgICAgICAgICAgICBkeShpKS9kdD1m
KHQseSgxKSwtLS0seShuZXFuKSkKYyAgICB3aGVyZSB0aGUgaW5pdGlhbCB2
YWx1ZXMgeShpKSBhbmQgdGhlIGluaXRpYWwgZGVyaXZhdGl2ZXMKYyAgICB5
cChpKSBhcmUgc3BlY2lmaWVkIGF0IHRoZSBzdGFydGluZyBwb2ludCB0LiBm
ZWhsIGFkdmFuY2VzCmMgICAgdGhlIHNvbHV0aW9uIG92ZXIgdGhlIGZpeGVk
IHN0ZXAgaCBhbmQgcmV0dXJucwpjICAgIHRoZSBmaWZ0aCBvcmRlciAoc2l4
dGggb3JkZXIgYWNjdXJhdGUgbG9jYWxseSkgc29sdXRpb24KYyAgICBhcHBy
b3hpbWF0aW9uIGF0IHQraCBpbiBhcnJheSBzKGkpLgpjICAgIGYxLC0tLSxm
NSBhcmUgYXJyYXlzIG9mIGRpbWVuc2lvbiBuZXFuIHdoaWNoIGFyZSBuZWVk
ZWQKYyAgICBmb3IgaW50ZXJuYWwgc3RvcmFnZS4KYyAgICB0aGUgZm9ybXVs
YXMgaGF2ZSBiZWVuIGdyb3VwZWQgdG8gY29udHJvbCBsb3NzIG9mIHNpZ25p
ZmljYW5jZS4KYyAgICBmZWhsIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhbiBo
IG5vdCBzbWFsbGVyIHRoYW4gMTMgdW5pdHMgb2YKYyAgICByb3VuZG9mZiBp
biB0IHNvIHRoYXQgdGhlIHZhcmlvdXMgaW5kZXBlbmRlbnQgYXJndW1lbnRz
IGNhbiBiZQpjICAgIGRpc3Rpbmd1aXNoZWQuCmMKYwogICAgICBpbnRlZ2Vy
ICBuZXFuCiAgICAgIGRvdWJsZSBwcmVjaXNpb24gIHkobmVxbiksdCxoLHlw
KG5lcW4pLGYxKG5lcW4pLGYyKG5lcW4pLAogICAgIDEgIGYzKG5lcW4pLGY0
KG5lcW4pLGY1KG5lcW4pLHMobmVxbikKYwogICAgICBkb3VibGUgcHJlY2lz
aW9uICBjaAogICAgICBpbnRlZ2VyICBrCmMKICAgICAgY2g9aC80LjBkMAog
ICAgICBkbyAyMjEgaz0xLG5lcW4KICAyMjEgICBmNShrKT15KGspK2NoKnlw
KGspCiAgICAgIGNhbGwgZih0K2NoLGY1LGYxKQpjCiAgICAgIGNoPTMuMGQw
KmgvMzIuMGQwCiAgICAgIGRvIDIyMiBrPTEsbmVxbgogIDIyMiAgIGY1KGsp
PXkoaykrY2gqKHlwKGspKzMuMGQwKmYxKGspKQogICAgICBjYWxsIGYodCsz
LjBkMCpoLzguMGQwLGY1LGYyKQpjCiAgICAgIGNoPWgvMjE5Ny4wZDAKICAg
ICAgZG8gMjIzIGs9MSxuZXFuCiAgMjIzICAgZjUoayk9eShrKStjaCooMTkz
Mi4wZDAqeXAoaykrKDcyOTYuMGQwKmYyKGspLTcyMDAuMGQwKmYxKGspKSkK
ICAgICAgY2FsbCBmKHQrMTIuMGQwKmgvMTMuMGQwLGY1LGYzKQpjCiAgICAg
IGNoPWgvNDEwNC4wZDAKICAgICAgZG8gMjI0IGs9MSxuZXFuCiAgMjI0ICAg
ZjUoayk9eShrKStjaCooKDgzNDEuMGQwKnlwKGspLTg0NS4wZDAqZjMoaykp
KwogICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDI5NDQwLjBk
MCpmMihrKS0zMjgzMi4wZDAqZjEoaykpKQogICAgICBjYWxsIGYodCtoLGY1
LGY0KQpjCiAgICAgIGNoPWgvMjA1MjAuMGQwCiAgICAgIGRvIDIyNSBrPTEs
bmVxbgogIDIyNSAgIGYxKGspPXkoaykrY2gqKCgtNjA4MC4wZDAqeXAoaykr
KDkyOTUuMGQwKmYzKGspLQogICAgIDEgICAgICAgICA1NjQzLjBkMCpmNChr
KSkpKyg0MTA0MC4wZDAqZjEoayktMjgzNTIuMGQwKmYyKGspKSkKICAgICAg
Y2FsbCBmKHQraC8yLjBkMCxmMSxmNSkKYwpjICAgICBjb21wdXRlIGFwcHJv
eGltYXRlIHNvbHV0aW9uIGF0IHQraApjCiAgICAgIGNoPWgvNzYxODA1MC4w
ZDAKICAgICAgZG8gMjMwIGs9MSxuZXFuCiAgMjMwICAgcyhrKT15KGspK2No
KigoOTAyODgwLjBkMCp5cChrKSsoMzg1NTczNS4wZDAqZjMoayktCiAgICAg
MSAgICAgICAgMTM3MTI0OS4wZDAqZjQoaykpKSsoMzk1MzY2NC4wZDAqZjIo
aykrCiAgICAgMiAgICAgICAgMjc3MDIwLjBkMCpmNShrKSkpCmMKICAgICAg
cmV0dXJuCiAgICAgIGVuZAo=


------=_NextPart_000_41f3_6a1_7092
Content-Type: application/octet-stream; name="rkf45g.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rkf45g.cc"

I2luY2x1ZGUgPG9jdGF2ZS9vY3QuaD4KI2luY2x1ZGUgPG9jdGF2ZS9wYXJz
ZS5oPgojaW5jbHVkZSA8b2N0YXZlL2Y3Ny1mY24uaD4KCi8qIAoKQW4gb2N0
YXZlIGdhdGV3YXkgcm91dGluZSB0byB0aGUgRk9SVFJBTiBjb2RlIHJrZjQ1
LmYgZXhwbGFpbmVkIGluCmRldGFpbCBpbgoKQ29tcHV0ZXIgTWV0aG9kcyBm
b3IgTWF0aGVtYXRpY2FsIENvbXB1dGF0aW9ucwpieSBHZW9yZ2UgRS4gRm9y
c3l0aGUsIE1pY2hhZWwgQS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVy
LgpvbiBwYWdlcyAxMjktLTE0NwoKQW5kIGZvdW5kIGF0CgpodHRwOi8vY20u
YmVsbC1sYWJzLmNvbS9uZXRsaWIvb2RlLwoKV3JpdHRlbiBieToKLS0gCkpv
aG4gTC4gV2VhdGhlcndheCAgICAgICAgICAgICAgICAyMDA1LTEwLTI5Cgpl
bWFpbDogd2F4QGFsdW0ubWl0LmVkdQoKUGxlYXNlIHNlbmQgY29tbWVudHMg
YW5kIGVzcGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCmFib3ZlIGVtYWls
IGFkZHJlc3MuCgotLS0tLQoqLyAKCnR5cGVkZWYgRjc3X1JFVF9UICgqZm9y
dF9mY25fcHRyX2RlYykgKGNvbnN0IGRvdWJsZSYsZG91YmxlKiwgZG91Ymxl
Kik7CgpleHRlcm4gIkMiCnsKICBGNzdfUkVUX1QgRjc3X0ZVTkMocmtmNDUs
UktGNDUpKGZvcnRfZmNuX3B0cl9kZWMsIGNvbnN0IGludCYsIGRvdWJsZSos
IAoJCQkJICBkb3VibGUmLCBkb3VibGUmLCAKCQkJCSAgY29uc3QgZG91Ymxl
JiwgY29uc3QgZG91YmxlJiwgCgkJCQkgIGludCYsIGRvdWJsZSosIGludCog
KTsKfQoKc3RhdGljIG9jdGF2ZV9mdW5jdGlvbiAqcmtmNDVnX29jdF9mY247
CnN0YXRpYyBpbnQgTkVRTjsgCgpzdGF0aWMgRjc3X1JFVF9UCnJrZjQ1Z19m
X2Zjbihjb25zdCBkb3VibGUmIHQsIGRvdWJsZSogeCwgZG91YmxlKiB4cCkK
ewogIFJvd1ZlY3RvciBydl94KE5FUU4pOyAKICBmb3IoIGludCBpaT0wOyBp
aSA8IE5FUU47IGlpKysgKSBydl94KGlpKT14W2lpXTsKCiAgb2N0YXZlX3Zh
bHVlX2xpc3QgYXJnczsKICBhcmdzKDApID0gdDsgYXJncygxKSA9IHJ2X3g7
IAogIGludCBuYXJnb3V0ID0gMTsKCiAgb2N0YXZlX3ZhbHVlX2xpc3QgcmV0
dmFsID0gZmV2YWwocmtmNDVnX29jdF9mY24sIGFyZ3MsIG5hcmdvdXQpOwoK
ICBpZiAoISBlcnJvcl9zdGF0ZSAmJiByZXR2YWwubGVuZ3RoICgpID09IDEp
CiAgICB7CiAgICAgIE1hdHJpeCBtX3hwID0gcmV0dmFsKDApLm1hdHJpeF92
YWx1ZSgpOwogICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgTkVRTjsgaWkr
Kyl7Cgl4cFtpaV0gPSBtX3hwKGlpKTsKICAgICAgfQoKICAgICAgaWYgKGVy
cm9yX3N0YXRlKQoJZXJyb3IgKCJmYWlsdXJlIGV2YWx1YXRpbmcgdXNlci1z
dXBwbGllZCBmdW5jdGlvbiIpOwogICAgfQogIGVsc2UKICAgIGVycm9yICgi
ZmFpbHVyZSBldmFsdWF0aW5nIHVzZXItc3VwcGxpZWQgZnVuY3Rpb24iKTsK
CiAgRjc3X1JFVFVSTigwKTsKfQoKLy8gQysrIG9jdGF2ZSBBUEkgY2FsbHMg
b2YgdGhlIHVzZXIncyBpbnB1dCBmdW5jdGlvbjoKLy8KQ29sdW1uVmVjdG9y
CnJrZjQ1X2ZfZnVuY3Rpb24oZG91YmxlIHQsIGNvbnN0IENvbHVtblZlY3Rv
ciYgeCkKewogIENvbHVtblZlY3RvciByZXR2YWw7CgogIG9jdGF2ZV92YWx1
ZV9saXN0IGFyZ3M7CiAgYXJncygwKSA9IHQ7IGFyZ3MoMSkgPSB4OwoKICBp
ZiAocmtmNDVnX29jdF9mY24pCiAgICB7CiAgICAgIG9jdGF2ZV92YWx1ZV9s
aXN0IHRtcCA9IHJrZjQ1Z19vY3RfZmNuLT5kb19tdWx0aV9pbmRleF9vcCAo
MSwgYXJncyk7CgogICAgICBpZiAoZXJyb3Jfc3RhdGUpCgl7CgkgIGdyaXBl
X3VzZXJfc3VwcGxpZWRfZXZhbCAoInJrZjQ1Z19vY3RfZmNuIik7CgkgIHJl
dHVybiByZXR2YWw7Cgl9CgogICAgICBpZiAodG1wLmxlbmd0aCAoKSA+IDAg
JiYgdG1wKDApLmlzX2RlZmluZWQgKCkpCgl7CgkgIHJldHZhbCA9IENvbHVt
blZlY3RvciAodG1wKDApLnZlY3Rvcl92YWx1ZSAoKSk7CgoJICBpZiAoZXJy
b3Jfc3RhdGUgfHwgcmV0dmFsLmxlbmd0aCAoKSA9PSAwKQoJICAgIGdyaXBl
X3VzZXJfc3VwcGxpZWRfZXZhbCAoInJrZjQ1Z19vY3RfZmNuIik7Cgl9CiAg
ICAgIGVsc2UKCWdyaXBlX3VzZXJfc3VwcGxpZWRfZXZhbCAoInJrZjQ1Z19v
Y3RfZmNuIik7CiAgICB9CgogIHJldHVybiByZXR2YWw7Cn0KCgpERUZVTl9E
TEQgKHJrZjQ1ZywgYXJncywgbmFyZ291dCwKICAieF90ID0gcmtmNDVnKGZj
biwgeF8wLCB0KTogSW50ZWdyYXRlcyBkeC9kdCA9IGZjbiBmcm9tIDAgdG8g
dCIpCnsKICBvY3RhdmVfdmFsdWVfbGlzdCByZXR2YWw7CgogIGlmKCBhcmdz
Lmxlbmd0aCgpICE9IDMgKXsgcHJpbnRfdXNhZ2UoInJrZjQ1ZyIpOyByZXR1
cm4gcmV0dmFsOyB9CiAgaWYoIG5hcmdvdXQgPiAxICkgeyBwcmludF91c2Fn
ZSgicmtmNDVnIik7IHJldHVybiByZXR2YWw7IH0KCiAgLy8gRXh0cmFjdCB0
aGUgdXNlciBpbnB1dDoKICAvLwogIHJrZjQ1Z19vY3RfZmNuID0gZXh0cmFj
dF9mdW5jdGlvbihhcmdzKDApLCAicmtmNDVnIiwgIl9fcmtmNDVnX29jdF9m
Y25fXyIsCgkgICAgICJmdW5jdGlvbiBGID0gX19ya2Y0NWdfb2N0X2Zjbl9f
ICh0LCB4KSAiLCAiOyBlbmRmdW5jdGlvbiIpOwogIGlmKGVycm9yX3N0YXRl
KXsKICAgIGVycm9yKCAicmtmNDVnOiBleHBlY3RpbmcgYSBmdW5jdGlvbiBm
b3IgdGhlIGZpcnN0IGFyZ3VtZW50IiApOyAKICB9CiAgQ29sdW1uVmVjdG9y
IHhfMCggYXJncygxKS52ZWN0b3JfdmFsdWUoKSApOwogIGlmKGVycm9yX3N0
YXRlKXsKICAgIGVycm9yKCJya2Y0NWc6IGV4cGVjdGluZyBhIHZlY3RvciBm
b3IgdGhlIHNlY29uZCBhcmd1bWVudCIgKTsgCiAgfQogIE5FUU4gPSB4XzAu
bGVuZ3RoKCk7IAogIGRvdWJsZSBURklOQUwgPSBhcmdzKDIpLmRvdWJsZV92
YWx1ZSgpOwogIGlmKGVycm9yX3N0YXRlKXsKICAgIGVycm9yKCJya2Y0NWc6
IGV4cGVjdGluZyBhIHNjYWxhciBmb3IgdGhlIHRoaXJkIGFyZ3VtZW50IiAp
OyAKICB9CgogIC8vIEZPUlRSQU4gdmFyaWFibGVzOgogIGRvdWJsZSBUPTAu
MDsgCiAgZG91YmxlIFJFTEVSUiA9IDEuZS05OwogIGRvdWJsZSBBQlNFUlIg
PSAwLjA7CiAgLy8gIGRvdWJsZSBURklOQUwgPSAxMC4wOyAKICBkb3VibGUg
VFBSSU5UID0gMC41OwogIGludCBJRkxBRyA9ICsxOyAKCiAgLy8gQ3JlYXRl
IHRoZSB3b3JrL2l3b3JrIHZlY3RvcnM6IAogIGludCBOV09SSyA9IDMrNipO
RVFOOwogIE9DVEFWRV9MT0NBTF9CVUZGRVIoIGRvdWJsZSwgV09SS1AsIE5X
T1JLICk7IAogIGludCBOSVdPUksgPSA1OwogIE9DVEFWRV9MT0NBTF9CVUZG
RVIoIGludCwgSVdPUktQLCBOSVdPUksgKTsKICBPQ1RBVkVfTE9DQUxfQlVG
RkVSKCBkb3VibGUsIFhQLCBORVFOICk7IAogIGZvciggaW50IGlpPTA7IGlp
IDwgTkVRTjsgaWkrKyApIFhQW2lpXT14XzAoaWkpOwoKICAvLyBDcmVhdGUg
b2N0YXZlIG91dHB1dCBtYXRyaXg6IAogIGludCBub3V0cyA9IDEgKyAoIChp
bnQpICggKFRGSU5BTC1UKS9UUFJJTlQgKSArIDEgKTsKICBNYXRyaXggeV9v
dXQoTkVRTixub3V0cyk7CiAgZm9yKCBpbnQgaWk9MDsgaWkgPCBORVFOOyBp
aSsrICkgeV9vdXQoaWksMCk9eF8wKGlpKTsKCiAgLy8gSW5pdGlhbGl6YXRp
b24gY2FsbCB0byBSS0Y0NToKICBkb3VibGUgVE9VVD1UOwogIEY3N19GVU5D
KHJrZjQ1LFJLRjQ1KShya2Y0NWdfZl9mY24sTkVRTixYUCxULFRPVVQsXAoJ
CQlSRUxFUlIsQUJTRVJSLElGTEFHLFdPUktQLElXT1JLUCk7CgogIGZvcigg
aW50IGlpdD0xOyBpaXQgPCBub3V0czsgaWl0KysgKXsgLy8gUGVyZm9ybSBl
YWNoIGludGVncmF0aW9uIHN0ZXA6CiAgICBUT1VUID0gKCAoVCtUUFJJTlQp
PD1URklOQUwgPyAoVCtUUFJJTlQpIDogVEZJTkFMICk7CiAgICBGNzdfRlVO
Qyhya2Y0NSxSS0Y0NSkocmtmNDVnX2ZfZmNuLE5FUU4sWFAsVCxUT1VULFwK
CQkJICBSRUxFUlIsQUJTRVJSLElGTEFHLFdPUktQLElXT1JLUCk7CgogICAg
Q29sdW1uVmVjdG9yIHhfb3V0KE5FUU4pOyAKICAgIGZvciggaW50IGlpPTA7
IGlpIDwgTkVRTjsgaWkrKyApewogICAgICB5X291dChpaSxpaXQpID0gWFBb
aWldOwogICAgfQogIH0KCiAgcmV0dmFsLmFwcGVuZCh5X291dCk7IAogIHJl
dHVybiByZXR2YWw7Cn0K


------=_NextPart_000_41f3_6a1_7092
Content-Type: application/octet-stream; name="test_rkf45g.m"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test_rkf45g.m"

JSAKJSBBIHRlc3QgYW5kIHZlcmlmaWNhdGlvbiBvZiB0aGUgcm91dGluZSBy
a2Y0NSBmcm9tIHRoZSBib29rIAolIAolIENvbXB1dGVyIE1ldGhvZHMgZm9y
IE1hdGhlbWF0aWNhbCBDb21wdXRhdGlvbnMKJSBieSBHZW9yZ2UgRS4gRm9y
c3l0aGUsIE1pY2hhZWwgQS4gTWFsY29sbSwgYW5kIENsZXZlIEIuIE1vbGVy
LgolIAolIG9uIHBhZ2UgMTMzCiUgCiUgV3JpdHRlbiBieToKJSAtLSAKJSBK
b2huIEwuIFdlYXRoZXJ3YXggICAgICAgICAgICAgICAgMjAwNS0xMC0yOQol
IAolIGVtYWlsOiB3YXhAYWx1bS5taXQuZWR1CiUgCiUgUGxlYXNlIHNlbmQg
Y29tbWVudHMgYW5kIGVzcGVjaWFsbHkgYnVnIHJlcG9ydHMgdG8gdGhlCiUg
YWJvdmUgZW1haWwgYWRkcmVzcy4KJSAKJS0tLS0tCgphbHBoYSA9IHBpLzQ7
IAplY2MgPSAwLjI1OyAKeF8wID0gWyAxLWVjYzsgMDsgMDsgYWxwaGEqc3Fy
dCggKDErZWNjKS8oMS1lY2MpICkgXTsgCgp5b3V0ID0gcmtmNDVnKCAib3Ji
aXQiLCB4XzAsIDEyLjAgKTsgCmZvcm1hdCBsb25nOyAKeW91dCgxOjIsOiku
Jwpmb3JtYXQgc2hvcnQ7IAoK


------=_NextPart_000_41f3_6a1_7092--