Mail Archives: cygwin/1997/06/14/10:35:27
----=_33a2c7cf31032108aad679.MFSBCHJLHS
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
The thing that has bugged me the most about gnu-cygwin32 ever since I
started using it, is that you couldn't really see what was going on, your
code gets to the dll, and it disappears, and writing in your own debugging
messages via debug_printf, is a real pain in the tail, so I finally fixed it.
Attached are the necessary files, to make a static libcygwin_g.a, along
with a specs file that allows you to link with it.
All you have to do to link with the static lib, is add -g to your link line.
I also added a utility stripdll, so that your production dll will be the usual
size, ~320K and fixed the Makefile so it will strip the extra debugging
information from libcygwin.a automatically so you (and I ;^) don't
have to remember every time. and for those of you who already have
the Micros*** SDK I included a better version of lib2def.
There are at least two problems with this, the debuggable executables, are
huge, ~3M at least, so most people won't want to use this for installed stuff ;^)
The libcygwin_g.a is also huge ~11M, so I won't be posting it anywhere,
if you're into debugging dll code, you're going to have to build the
dll anyway ;^)
The other thing is that the by now famous win95 lseek() bug will
catch you once in a while, at least I think that's what's happening
so if the new .exe will run, but gdb segfaults when loading it, just relink,
and try again.
But I think that being able to debug the .dll code directly is well worth it ;^))))))).
I have built and run /bin/bash.exe linked to /bin/sh "static",
~3M w/debug code, 520K after strip --strip-all and it seems to work fine,
with one exception, you can reinvoke sh as many times as you want,
but running shell scripts can lockup, I suspect that changes would
need to be made to the fork() code, to make this a truly workable
alternative for people who want to just send out the executables,
without the dll.
If you need to make changes to dll startup code in either dcrt0.cc, or libccrt0.cc,
like Sergey's patch does, you will want to make those same changes in gcrt0.cc
to debug them.
WARNING compiling with -g on your link line WILL be seriously
hazardous to your free disk space once you do this,
YOU HAVE BEEN WARNED!! ;^)
If you haven't mounted your filsystems -b already, you really should.
the attached files are LF only. you may be able to get away with adding
--ignore-whitespace to the patch line below, I don't know.
To create libcygwin_g.a
BACKUP YOUR SPECS FILE FIRST!!!!
replace your .../H-i386-cygwin32/lib/gcc-lib/i386-cygwin32/$VERSION/specs
with the attached one.
cd into the .../cdk/winsup/ directory, and type patch -p0 < static.dif
find -name \*.rej there better not be any.
find -name \*.orig or \*.~1~|xargs rm
#depending on if you have export VERSION_CONTROL=numbered in .bashrc
..cd into your .../obj dir, and configure and make as usual.
I didn't have the static lib install by default, because of it's size. so to get the static lib
made and installed you will need to do
make prefix=/your/inst/dir exec_prefix=/your/inst/dir/H-i386-cygwin32 install-static
or just
make libcygwin_g.a
and copy it wherever you want.
All that being said, have FUN!!!
Mikey
../* DECLARATION
I, Jeffrey DeBeer, grant to the public domain my entire right, title,
and interest (including all rights under copyright) in my changes and
enhancements to the Cygwin32 library. These changes and enhancements are
herein called the "Work". The Work granted to the public domain shall
also include any future revisions of these changes and enhancements
hereafter made by me.
I represent and warrant that I am the sole author of the Work and that
I have the right and power to make this grant. I make no other express
or implied warranty (including without limitation, in this disclaimer of
warranty, any warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE).
Jeffrey DeBeer
12 June 1997
*/
On Sat, 7 Jun 1997 21:13:14 -0700 (PDT), you wrote:
>Chris Faylor wrote:
>[...]
>> I am at a loss, however, as to how to debug this. I've built a cygwin.dll
>> from scratch with Sergey's patches, but then, how do I debug it? Attempting
>> to invoke gdb remotely hangs due to the problem I mentioned above.
>[...]
>
>A future change that needs to be made is to always build cygwin.dll
>and libcygwin.a as well as (new) cygwindebug.dll and libcygwindebug.a.
>Everything other than gdb would get linked against cygwin.dll whereas
>gdb would be linked against cygwindebug.dll.
>
>So if you need to debug a non-functional cygwin.dll, you could use any
>previously working gdb since it would depend on a working cygwin.dll.
>Alternatively, we could somehow statically link the code inside the
>cygwin.dll inside gdb.
>
>--
>Geoffrey Noer
>noer AT cygnus DOT com
>-
>For help on using this list (especially unsubscribing), send a message to
>"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
>
----=_33a2c7cf31032108aad679.MFSBCHJLHS
Content-Type: application/octet-stream; name=static.dif
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=static.dif
ZGlmZiAtdXJiQiAuLi9jZGsvd2luc3VwL01ha2VmaWxlLmluIC4vTWFrZWZpbGUuaW4KLS0tIC4u
L2Nkay93aW5zdXAvTWFrZWZpbGUuaW4JVGh1IE1heSAwMSAxMDo0NDo0MyAxOTk3CisrKyAuL01h
a2VmaWxlLmluCUZyaSBKdW4gMTMgMDk6Mjg6MzUgMTk5NwpAQCAtMzgsMTIgKzM4LDEzIEBACiBJ
TlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFM
TF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfRElSUyA9IEBJTlNUQUxMQCAt
ZAogCiBDQyA9IEBDQ0AKICMgRklYTUU6IFdoaWNoIGlzIGl0LCBDQyBvciBDQ19GT1JfVEFSR0VU
PwogQ0NfRk9SX1RBUkdFVCA9ICQoQ0MpCi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1hYRkxBR1MgPSBA
Q1hYRkxBR1NACitDRkxBR1MgPSBAQ0ZMQUdTQCAtZworQ1hYRkxBR1MgPSBAQ1hYRkxBR1NAIC1n
CiAKIElOQ0xVREVTID0gLUkuL21zaW5jbHVkZSAtSSQoc3JjZGlyKS9pbmNsdWRlIC1JJChzcmNk
aXIpIC1JJChzcmNkaXIpLy4uL2xpYnN0ZGMrKy9zdGwgLUkkKHNyY2RpcikvLi4vbGliaW8gLUku
Li9saWJpbyAtSSQoc3JjZGlyKS8uLi9uZXdsaWIvbGliYy9pbmNsdWRlIC1ub3N0ZGluYysrCiAK
QEAgLTc0LDcgKzc1LDggQEAKIAlBUj0iJChBUikiIFwKIAlSQU5MSUI9IiQoUkFOTElCKSIgXAog
CUxEPSIkKExEKSIgXAotCURMTFRPT0w9IiQoRExMVE9PTCkiCisJRExMVE9PTD0iJChETExUT09M
KSIgXAorCXByZWZpeD0iJChwcmVmaXgpIgogCiAKICMgVGhpcyBpcyB0aGUgZmluYWwgbmFtZSBv
ZiB0aGUgY3lnd2luLmRsbC4KQEAgLTk2LDYgKzk4LDcgQEAKIExJQklCRVJUWU9TPS4uL2xpYmli
ZXJ0eS9nZXRvcHQubyAuLi9saWJpYmVydHkvZ2V0b3B0MS5vCiAKIExJQkNPUz1saWJjY3J0MC5v
IGxpYmNjdHlwZS5vIGxpYmNlcnIubyBsaWJjbWFpbi5vICQoTElCSUJFUlRZT1MpCitMSUJHT1M9
JChmaWx0ZXItb3V0IGxpYmNjcnQwLm8sJChMSUJDT1MpKQogCiAjIEJ1aWxkIGFzIG1hbnkgLmEg
ZmlsZXMgYXMgd2UgaGF2ZSAuZGVmIGZpbGVzCiAKQEAgLTE1MiwyNyArMTU1LDM5IEBACiByZWFk
bWUuaW5mbzokKHNyY2RpcikvZG9jL3JlYWRtZS50ZXhpbmZvCiAJJChNQUtFSU5GTykgLUkkKHNy
Y2RpcikvZG9jICAkPAogCi1pbnN0YWxsOiAkKFRIRUlSTElCUykgJChMSUJOQU1FKSBuZXctJChE
TExOQU1FKSByZWFsLWhlYWRlcnMKK2luc3RhbGwtc3RhdGljOiBsaWJjeWd3aW5fZy5hCisJJChJ
TlNUQUxMX0RBVEEpICQ8ICQodG9vbGRpcikvbGliLyQ8CisKK2luc3RhbGwtdGhlaXJsaWJzOiAk
KFRIRUlSTElCUykgJChMSUJOQU1FKQogCWZvciBpIGluICQoVEhFSVJMSUJTKSAkKExJQk5BTUUp
OyBkbyBcCiAJCSQoSU5TVEFMTF9EQVRBKSAkJGkgJCh0b29sZGlyKS9saWIvJCRpIDsgXAogCWRv
bmUKKwlzdHJpcC5leGUgLS1zdHJpcC1kZWJ1ZyAkKHRvb2xkaXIpL2xpYi8kKExJQk5BTUUpCisK
K2luc3RhbGwtZGxsOiBuZXctJChETExOQU1FKQogCWZvciBpIGluICQoRExMTkFNRSk7IGRvIFwK
LQkgICQoSU5TVEFMTF9EQVRBKSBuZXctJCRpICQodG9vbGRpcikvbGliLyQkaSA7IFwKIAkgIGJp
bm5hbWU9YHQ9JyQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSknOyBlY2hvICIkJGkiIHwgc2VkIC1l
ICQkdGAgOyBcCiAJICBlY2hvICJwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSQocHJvZ3JhbV90cmFu
c2Zvcm1fbmFtZSksIGk9JCRpLCBiaW5uYW1lPSQkYmlubmFtZSI7IFwKIAkgIHJtIC1mICQoYmlu
ZGlyKS8kJGJpbm5hbWUgOyBcCi0JICBsbiAkKHRvb2xkaXIpL2xpYi8kJGkgJChiaW5kaXIpLyQk
YmlubmFtZSA+L2Rldi9udWxsIDI+JjEgfHwgJChJTlNUQUxMX0RBVEEpIG5ldy0kJGkgJChiaW5k
aXIpLyQkYmlubmFtZSA7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSBuZXctJCRpICQoYmluZGlyKS8k
JGJpbm5hbWUgOyBcCiAJZG9uZQorCWZvciBpIGluICQoRExMTkFNRSk7ZG8gdXRpbHMvc3RyaXBk
bGwgJChiaW5kaXIpLyQkaTtkb25lCisKK2luc3RhbGwtcmVhbC1oZWFkZXJzOiByZWFsLWhlYWRl
cnMKIAlmb3Igc3ViIGluIGluY2x1ZGUgaW5jbHVkZS9hcnBhIGluY2x1ZGUvYXNtIGluY2x1ZGUv
V2luZG93czMyIFwKIAkgICBpbmNsdWRlL2N5Z3dpbjMyIGluY2x1ZGUvbmV0IGluY2x1ZGUvbmV0
aW5ldCBpbmNsdWRlL3N5cyA7IGRvIFwKKwkJJChJTlNUQUxMX0RJUlMpICQodG9vbGRpcikvJCRz
dWI7IFwKIAkJZm9yIGkgaW4gJChzcmNkaXIpLyQkc3ViLyouaCA7IGRvIFwKIAkJICAkKElOU1RB
TExfREFUQSkgJCRpICQodG9vbGRpcikvJCRzdWIvYGJhc2VuYW1lICQkaWAgOyBcCiAJCWRvbmUg
OyBcCiAJZG9uZQorCitpbnN0YWxsLXV0aWxzOgogCXJvb3RtZT1gcHdkYCA7IGV4cG9ydCByb290
bWUgOyBcCiAJcm9vdHNyYz1gKGNkICQoc3JjZGlyKSA7IHB3ZClgIDsgZXhwb3J0IHJvb3RzcmMg
OyBcCiAJY2QgdXRpbHM7ICQoTUFLRSkgaW5zdGFsbCAkKEZMQUdTX1RPX1BBU1MpCiAKK2luc3Rh
bGw6IGluc3RhbGwtdGhlaXJsaWJzIGluc3RhbGwtZGxsIGluc3RhbGwtcmVhbC1oZWFkZXJzIGlu
c3RhbGwtdXRpbHMKIAkjIHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91J3ZlIG1ha2VkIHN0bXBf
bXNfaW5jbHVkZSBiZWxvdy4KIAkjCWlmIFsgLWUgbXNfaW5jbHVkZS93aW5kb3dzLmggXSA7IHRo
ZW4gIFwKIAkjCQlmb3IgaSBpbiBtc19pbmNsdWRlLyouaCA7IGRvIFwKQEAgLTI1NCw2ICsyNjks
NyBAQAogIyB3ZSBidWlsZCBvdXIgb3duIGltcG9ydCBsaWJyYXJ5IHRvIGdldCBhdCB0aGUgd2lu
c29jayBmdW5jdGlvbnMKICMgYnkgZGlmZmVyZW50IG5hbWVzLgogCitTVEFUSUNPUz0kKGZpbHRl
ci1vdXQgaW5pdC5vIG1hbGxvYy5vIGRjcnQwLm8sJChETExfT0ZJTEVTKSkKICNsaWJteXdpbnNv
Y2suYTpteXdpbnNvY2suZGVmCiAjCSQoRExMVE9PTCkgLS1hcz0kKEFTKSAtayAtLWRsbG5hbWUg
d3NvY2szMi5kbGwgLS1vdXRwdXQtbGliIGxpYm15d2luc29jay5hIC0tZGVmICQ8CiAKQEAgLTI5
MSw4ICszMDcsMTggQEAKIAkkKERMTFRPT0wpICQoRExMX1NUVUZGKQogCSQoTEQpIGN5Z3dpbi5l
eHAgJChMRF9TVFVGRikKIAorbGliY3lnd2luX2cuYTogZ2NydDAubyBsaWJjeWd3aW4uYSBuZXct
JChETExOQU1FKQorCSQoQVIpIGNydnMgbGliY3lnd2luX2cuYSAkKExJQkdPUykgZ2NydDAubyAk
KFNUQVRJQ09TKSBnbG9iL2dsb2IubyBnbG9iL2ZubWF0Y2gubworCiBjbGVhbjoKIAktcm0gLWYg
Ki5vICouZGxsICouYSAqLmV4cCBqdW5rICouYmFzZQorCSQoTUFLRSkgLUMgZ2xvYiAkQAorCSQo
TUFLRSkgLUMgdXRpbHMgJEAKKworZGlzdGNsZWFuOiBjbGVhbgorCS1ybSAtZiBNYWtlZmlsZSBj
b25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGN5Z3dpbi5kZWYKKwkkKE1BS0Up
IC1DIGdsb2IgJEAKKwkkKE1BS0UpIC1DIHV0aWxzICRACiAKIG1haW50YWluZXItY2xlYW4gcmVh
bGNsZWFuOiBjbGVhbiAKIAlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWlu
dGFpbmVycyB0byB1c2U7IgpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvY3lnd2luLmRpbiAuL2N5
Z3dpbi5kaW4KLS0tIC4uL2Nkay93aW5zdXAvY3lnd2luLmRpbglGcmkgTWF5IDAyIDExOjU3OjQ3
IDE5OTcKKysrIC4vY3lnd2luLmRpbglGcmkgSnVuIDEzIDA2OjMyOjEzIDE5OTcKQEAgLTk0NSw4
ICs5NDUsNiBAQAogX2Nsb3NlbG9nID0gY2xvc2Vsb2cKIG9wZW5sb2cKIF9vcGVubG9nID0gb3Bl
bmxvZwotdGdldGVudAotX3RnZXRlbnQgPSB0Z2V0ZW50CiB2aGFuZ3VwCiBfdmhhbmd1cCA9IHZo
YW5ndXAKIG5pY2UKZGlmZiAtdXJiQiAuLi9jZGsvd2luc3VwL2djcnQwLmNjIC4vZ2NydDAuY2MK
LS0tIC4uL2Nkay93aW5zdXAvZ2NydDAuY2MJVGh1IEp1biAxMiAwODo1MjoyMSAxOTk3CisrKyAu
L2djcnQwLmNjCUZyaSBKdW4gMTMgMDk6MDQ6NDEgMTk5NwpAQCAtMCwwICsxLDgxMyBAQAorLyog
Z2NydDAuY2MgLS0gYSBiaXQgb2YgY3J0MCB0aGF0IGxpdmVzIGluIGxpYmN5Z3dpbl9nLmEKKwor
ICAgQ29weXJpZ2h0IDE5OTYsIDE5OTcgQ3lnbnVzIFNvbHV0aW9ucworCitUaGlzIHByb2dyYW0g
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisv
KiBtb2RpZmllZCBmcm9tIGRjcnQwLmNjIGxpYmNjcnQwLmNjIGFuZCBtYWxsb2MuY2MgYnkKKygq
amVmZmRiQG5ldHpvbmUubm9zcGFtLmNvbSkgTWlrZXkgcmVtb3ZlICombm9zcGFtIHRvIGNvbnRh
Y3QKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xBUkFUSU9OCisgCitJLCBKZWZm
cmV5IERlQmVlciwgZ3JhbnQgdG8gdGhlIHB1YmxpYyBkb21haW4gbXkgZW50aXJlIHJpZ2h0LCB0
aXRsZSwKK2FuZCBpbnRlcmVzdCAoaW5jbHVkaW5nIGFsbCByaWdodHMgdW5kZXIgY29weXJpZ2h0
KSBpbiBteSBjaGFuZ2VzIGFuZAorZW5oYW5jZW1lbnRzIHRvIHRoZSBDeWd3aW4zMiBsaWJyYXJ5
LiBUaGVzZSBjaGFuZ2VzIGFuZCBlbmhhbmNlbWVudHMgYXJlCitoZXJlaW4gY2FsbGVkIHRoZSAi
V29yayIuIFRoZSBXb3JrIGdyYW50ZWQgdG8gdGhlIHB1YmxpYyBkb21haW4gc2hhbGwKK2Fsc28g
aW5jbHVkZSBhbnkgZnV0dXJlIHJldmlzaW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBlbmhhbmNl
bWVudHMKK2hlcmVhZnRlciBtYWRlIGJ5IG1lLiAKKworSSAgcmVwcmVzZW50IGFuZCB3YXJyYW50
IHRoYXQgSSBhbSB0aGUgc29sZSBhdXRob3Igb2YgdGhlIFdvcmsgYW5kIHRoYXQKK0kgaGF2ZSB0
aGUgcmlnaHQgYW5kIHBvd2VyIHRvIG1ha2UgdGhpcyBncmFudC4gSSBtYWtlIG5vIG90aGVyIGV4
cHJlc3MKK29yIGltcGxpZWQgd2FycmFudHkgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24s
IGluIHRoaXMgZGlzY2xhaW1lciBvZgord2FycmFudHksIGFueSB3YXJyYW50eSBvZiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFKS4KKworSmVmZnJl
eSBEZUJlZXIKKzEyIEp1bmUgMTk5NworKi8KKworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxyZWVudC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgIndpbnN1cC5oIgorI2luY2x1ZGUgImdsb2IvZ2xvYi5oIgorI2luY2x1ZGUgImV4
Y2VwdGlvbnMuaCIKKworcGVyX3Byb2Nlc3MgKnU7CisKK2V4dGVybiAiQyIKK3sKKyAgLyogVXNl
ZCBmb3IgdGhlIGxpYmMgc3R1ZmYgd2hpY2ggdXNlcyBlbnZpcm9uLAorICAgICB3ZSBjb3B5IHRo
aXMgaW50byB0aGUgcmVhbCBjcnQwLiAgKi8KKyAgY2hhciAqKmVudmlyb247CisgIC8qIF9fcHJv
Z25hbWUgdXNlZCBpbiBnZXRvcHQgZXJyb3IgbWVzc2FnZSAqLworICBjaGFyICpfX3Byb2duYW1l
OworICBzdHJ1Y3QgX3JlZW50IHJlZW50X2RhdGE7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGN5
Z3dpbl9kbGxfdmVyc2lvbl9tYWpvciA9IENZR1dJTl9ETExfVkVSU0lPTl9NQUpPUjsKK3N0YXRp
YyBjb25zdCBpbnQgY3lnd2luX2RsbF92ZXJzaW9uX21pbm9yID0gQ1lHV0lOX0RMTF9WRVJTSU9O
X01JTk9SOworc3RhdGljIGNoYXIgKnRpdGxlOworCisKKy8qIHRoaXMgaXMgYSBob3JyaWJsZSBo
YWNrIHRvIGF2b2lkIGNoYW5naW5nIHBlcl9wcm9jZXNzICovCisKK3ZvaWQgKgorbWFsbG9jIChz
aXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcmVzOworICByZXMgPSBfbWFsbG9jX3IgKF9pbXB1cmVf
cHRyLCBzaXplKTsKKyAgcmV0dXJuIHJlczsKK30KKwordm9pZAorZnJlZSAodm9pZCAqcCkKK3sK
KyAgX2ZyZWVfciAoX2ltcHVyZV9wdHIsIHApOworfQorCit2b2lkICoKK3JlYWxsb2MgKHZvaWQg
KnAsIHNpemVfdCBzaXplKQoreworICB2b2lkICpyZXM7CisgIHJlcyA9IF9yZWFsbG9jX3IgKF9p
bXB1cmVfcHRyLCBwLCBzaXplKTsKKyAgcmV0dXJuIHJlczsKK30KKwordm9pZAorZXhwb3J0X2Zy
ZWUgKHZvaWQgKnApCit7CisgIF9mcmVlX3IgKF9pbXB1cmVfcHRyLCBwKTsKK30KKwordm9pZCAq
CitleHBvcnRfbWFsbG9jIChpbnQgc2l6ZSkKK3sKKyAgdm9pZCAqcmVzOworICByZXMgPSBfbWFs
bG9jX3IgKF9pbXB1cmVfcHRyLCBzaXplKTsKKyAgcmV0dXJuIHJlczsKK30KKwordm9pZCAqCitl
eHBvcnRfcmVhbGxvYyAodm9pZCAqcCwgaW50IHNpemUpCit7CisgIHZvaWQgKnJlczsKKyAgcmVz
ID0gX3JlYWxsb2NfciAoX2ltcHVyZV9wdHIsIHAsIHNpemUpOworICByZXR1cm4gcmVzOworfQor
CisvKiB3ZSBuZWVkIHRoaXMgaW5zdGVhZCB0byByZXBsYWNlIHNlbGVjdCBpbiBjeWd3aW4uZXhw
ICovCitleHRlcm4gIkMiIHsKKworZXh0ZXJuIGludCBjeWd3aW4zMl9zZWxlY3QoaW50LGZkX3Nl
dCAqLGZkX3NldCAqLGZkX3NldCAqLHN0cnVjdCB0aW1ldmFsICopOworCitpbnQgc2VsZWN0IChp
bnQgbiwgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAg
ICAgICAgZmRfc2V0ICpleGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICp0bykKK3sKK3JldHVybiBj
eWd3aW4zMl9zZWxlY3QgKG4sIHJlYWRmZHMsIHdyaXRlZmRzLCBleGNlcHRmZHMsIHRvKTsKK30K
KworfQorCisvKiBSZXR1cm4gbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgbWljcm9zb2Z0IHN0eWxl
IGVudiBsaXN0LiAgCisgICAKKyAgIFRoZSAiZW52aXJvbm1lbnQgYmxvY2siIGlzIGEgbnVsbCB0
ZXJtaW5hdGVkIGJsb2NrIG9mIHN0cmluZ3MKKyAgICh0d28gbnVsbHMgdGVybWluYXRlIHRoZSBi
bG9jaykuICAqLworCitzdGF0aWMgaW50CitudW1fbXNfZW52X3ZhcnMgKGNvbnN0IGNoYXIgKnJh
d2VudikKK3sKKyAgaW50IGkgPSAwOworICBpbnQgY291bnQgPSAwOworICB3aGlsZSAoMSkKKyAg
ICB7CisgICAgICBpZiAocmF3ZW52W2ldID09IDApCisJeworCSAgY291bnQrKzsKKwkgIGlmIChy
YXdlbnZbaSArIDFdID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICAgIGkrKzsKKyAgICB9Cisg
IHJldHVybiBjb3VudDsKK30KKworLyogQnVpbGQgYXJndiBmcm9tIHN0cmluZyBwYXNzZWQgZnJv
bSBXaW5kb3dzLiAgKi8KKworc3RhdGljIHZvaWQKK2J1aWxkX2FyZ3YgKGNoYXIgKmluLCBjaGFy
ICoqb3V0LCBpbnQgbGVuKQoreworICBpbnQgY291bnQgPSAwOworICBjaGFyICplID0gaW4gKyBs
ZW47CisgIGNoYXIgKnM7CisKKyAgZm9yIChzID0gaW47IHMgPCBlOyBzKyspCisgICAgeworICAg
ICAgZGVidWdfcHJpbnRmICgiYnVpbGRfYXJndjogZmlsbCBpdGVyYXRpb24gJXNcbiIsIHMpOwor
CisgICAgICAvKiBEZWxldGUgbGVhZGluZyBzcGFjZXMuICAqLworICAgICAgd2hpbGUgKCpzID09
ICcgJyB8fCAqcyA9PSAnXHQnKQorCXMrKzsKKworICAgICAgaWYgKCEqcykKKwlicmVhazsKKwor
ICAgICAgLyogR290IHRvIGFuIGFyZy4gICovCisKKyAgICAgIGNoYXIgKmQ7CisgICAgICBvdXRb
Y291bnRdID0gZCA9IHM7CisgICAgICAKKyAgICAgIGlmICgqcyA9PSAnIicpCisJeworCSAgcysr
OworCSAgd2hpbGUgKHNbMF0gJiYgKHNbMF0gIT0gJyInIHx8IChzWzBdID09ICciJyAmJiBzWzFd
ID09ICciJykpKQorCSAgICB7CisJICAgICAgaWYgKCpzPT0gJyInKQorCQlzKys7CisJICAgICAg
KmQrKyA9ICpzKys7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKCpzICYm
ICpzICE9ICcgJyAmJiAqcyAhPSAnXHQnKQorCSAgICB7CisJICAgICAgKmQrKyA9ICpzKys7CisJ
ICAgIH0KKwl9CisgICAgICAqZCsrID0gMDsKKyAgICAgIGRlYnVnX3ByaW50ZiAoImJ1aWxkX2Fy
Z3Y6IGFyZ3ZbJWRdPSVzXG4iLCBjb3VudCwgb3V0W2NvdW50XSk7CisgICAgICBjb3VudCsrOwor
ICAgIH0KKyAgb3V0W2NvdW50XSA9IDA7CisKKyAgLyogRklYTUU6IFZlcmlmeSBjb3VudCA9PSBs
ZW4/ICAqLworfQorCisvKiBDb21wdXRlIGFyZ2MuCisgICBXaW5kb3dzIHBhc3NlcyBqdXN0IGEg
c3RyaW5nIHdoaWNoIHdlIG5lZWQgdG8gYnJlYWsgdXAgaW50byBhcmdjL2FyZ3YuCisgICBUaGlz
IHBhc3MgY29tcHV0ZXMgYXJnYy4gICovCisKK3N0YXRpYyBpbnQKK2NvbXB1dGVfYXJnYyAoY2hh
ciAqaW4pCit7CisgIGNoYXIgKnNyYzsKKyAgaW50IGNvdW50PTA7CisKKyAgZGVidWdfcHJpbnRm
ICgiY29tcHV0ZV9hcmdjICglcylcbiIsIGluKTsKKworICBmb3IgKHNyYyA9IGluOyAqc3JjOyBz
cmMrKykKKyAgICB7CisgICAgICB3aGlsZSAoKnNyYyA9PSAnICcgfHwgKnNyYyA9PSAnXHQnICkK
KwlzcmMrKzsKKyAgICAgIAorICAgICAgaWYgKCEqc3JjKQorCWJyZWFrOworICAgICAgCisgICAg
ICBkZWJ1Z19wcmludGYgKCJjb21wdXRlX2FyZ2M6IHNyYyBpcyBub3cgJXNcbiIsIHNyYyk7Cisg
ICAgICBpZiAoKnNyYyA9PSAnIicpCisJeworCSAgc3JjKys7CisJICB3aGlsZSAoc3JjWzBdKQor
CSAgICB7CisJICAgICAgaWYgKHNyY1swXSA9PSAnIicpIAorCQl7CisJCSAgc3JjKys7CisJCSAg
aWYgKHNyY1swXSAhPSAnIicpIGJyZWFrOworCQl9CisJICAgICAgCisJICAgICAgc3JjKys7CisJ
ICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKCpzcmMgIT0gJyAnICYmICpzcmMg
IT0gJ1x0JyAmJiAqc3JjICE9IDApCisJICAgIHNyYysrOworCX0KKyAgICAgIGNvdW50Kys7Cisg
ICAgfQorICBkZWJ1Z19wcmludGYgKCJjb21wdXRlX2FyZ2M6IGNvdW50IGlzICVkXG4iLCBjb3Vu
dCk7CisgIHJldHVybiBjb3VudDsKK30KKworLyogUGVyZm9ybSB2YXJpb3VzIHN0YXJ0IHVwIHNh
bml0eSBjaGVja3MuICAqLworCitzdGF0aWMgdm9pZAorY2hlY2tvdXQgKCkKK3sKKyNpZmRlZiBf
X1BQQ19fCisgIGptcF9idWYgeDsKKworICBpZiAoc2l6ZW9mICh4KSAhPSAzMio4KQorICAgIHsK
KyAgICAgIHNtYWxsX3ByaW50ZiAoIkNvbmZpZ3VyYXRpb24gZXJyb3Igd2l0aCBzZXRqbXBcbiIp
OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorZ2xvYmlmeSAoaW50ICphY3AsIGNo
YXIgKioqYXZwKQoreworICAvKiBZZXMgSSBrbm93IEkgY291bGQgdXNlIHJlZmVyZW5jZXMsIGJ1
dCB0aGV5IGhpZGUgdGhlIHNpZGUgZWZmZWN0cyAqLworICBpbnQgYWMgPSAqYWNwOworICBjaGFy
ICoqYXYgPSAqYXZwOworICBnbG9iX3QgZ2xvYnNbYWNdOworICBpbnQgcmNbYWNdOworICBpbnQg
aTsKKyAgaW50IG5ld2FjID0gMDsKKyAgaW50IGRvbmVzb21ldGhpbmcgPSAwOworCisgIGZvciAo
aSA9IDA7IGkgPCBhYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJwYnJrIChhdltpXSwgIj8q
WyIpICE9IE5VTEwpCisJeworCSAgZ2xvYnNbaV0uZ2xfb2ZmcyA9IDA7CisJICByY1tpXSA9IGds
b2IgKGF2W2ldLCAKKwkJCUdMT0JfTk9DSEVDSyB8IEdMT0JfTk9FU0NBUEUsCisJCQkwLAorCQkJ
Jmdsb2JzW2ldKTsKKwkgIG5ld2FjICs9IHJjW2ldID09IDAgPyBnbG9ic1tpXS5nbF9wYXRoYyA6
IDE7CisJICBkb25lc29tZXRoaW5nID0gcmNbaV0gPT0gMDsKKwl9CisgICAgICBlbHNlCisJewor
CSAgcmNbaV0gPSAtMTsgLyogZ2xvYiBub3QgY2FsbGVkICovCisJICArK25ld2FjOworCX0KKyAg
ICB9CisgIAorICBpZiAoZG9uZXNvbWV0aGluZykKKyAgICB7CisgICAgICBjaGFyICoqbmV3YXYg
PSAoY2hhciAqKiltYWxsb2MgKHNpemVvZiAoY2hhciAqKikgKiAobmV3YWMgKyAxKSk7CisgICAg
ICBpbnQgZCA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgYWM7IGkrKykKKwl7CisJICBpZiAo
cmNbaV0gPT0gMCkKKwkgICAgeworCSAgICAgIGRlYnVnX3ByaW50ZiAoImdsb2I6IGAlcycgY29u
dmVydGVkIHRvOiIsIGF2W2ldKTsKKwkgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdsb2JzW2ld
LmdsX3BhdGhjOyBqKyspCisJCXsKKwkJICBkZWJ1Z19wcmludGYgKCIgJXMiLCBnbG9ic1tpXS5n
bF9wYXRodltqXSk7CisJCSAgbmV3YXZbZCsrXSA9IGdsb2JzW2ldLmdsX3BhdGh2W2pdOworCQl9
CisJICAgICAgZGVidWdfcHJpbnRmICgiXG4iKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJ
ICAgICAgZGVidWdfcHJpbnRmICgiZ2xvYjogYCVzJyBub3QgY29udmVydGVkLCBnbG9iIHJjID0g
MHgleFxuIiwKKwkJCSAgICBhdltpXSwgcmNbaV0pOworCSAgICAgIG5ld2F2W2QrK10gPSBhdltp
XTsKKwkgICAgfQorCX0KKyAgICAgIG5ld2F2W2RdID0gMDsKKyAgICAgICphY3AgPSBuZXdhYzsK
KyAgICAgICphdnAgPSBuZXdhdjsKKyAgICB9Cit9CisKKy8qIFV0aWxpdHkgdG8gcHJvYmUgdGhl
IHN0YWNrLiAgKi8KKworc3RhdGljIHZvaWQKK3JlY3VyICh2b2lkICpwLCB2b2lkICopCit7Cisg
IGNoYXIgYlsxMDAwXTsKKyAgaW50IHg7CisKKyAgaWYgKCZ4ID4gcCkKKyAgICByZWN1ciAocCwg
Yik7Cit9CisKKy8qIExpc3Qgb2YgbmFtZXMgd2hpY2ggYXJlIGNvbnZlcnRlZCBmcm9tIGRvcyB0
byB1bml4CisgICBvbiB0aGUgd2F5IGluIGFuZCBiYWNrIGFnYWluIG9uIHRoZSB3YXkgb3V0Lgor
CisgICBQQVRIIG5lZWRzIHRvIGJlIGhlcmUgYmVjYXVzZSBDcmVhdGVQcm9jZXNzIHVzZXMgaXQg
YW5kIGdkYiB1c2VzCisgICBDcmVhdGVQcm9jZXNzLiAgSGF2aW5nIHRvbyBtYW55IG1vcmUgaGVy
ZSBpcyBkdWJpb3VzLiAgKi8KKworY29uc3QgY2hhciAqY29udl9wYXRoX25hbWVzW10gPQorewor
ICAiUEFUSD0iLAorICAwCit9OworCit2b2lkCitfX2RvX2dsb2JhbF9kdG9ycyAoKQoreworICBp
bnQgaTsKKyAgdm9pZCAoKipwZnVuYykoKSA9IHUtPmR0b3JzOworCisgIC8qIFJ1biBkdG9ycyBi
YWNrd2FyZHMsIHNvIHNraXAgdGhlIGZpcnN0IGVudHJ5IGFuZCBmaW5kIGhvdyBtYW55CisgICAg
IHRoZXJlIGFyZSwgdGhlbiBydW4gdGhlbS4gICovCisgIAorICBpZiAocGZ1bmMpIAorICAgIHsK
KyAgICAgIGZvciAoaSA9IDE7IHBmdW5jW2ldOyBpKyspIAorCTsKKyAgICAgIGZvciAoaSA9IGkg
LSAxOyBpID4gMDsgaS0tKQorCXsKKwkgIChwZnVuY1tpXSkoKTsKKwl9CisgICAgfQorfQorCit2
b2lkCitfX2RvX2dsb2JhbF9jdG9ycyAoKQoreworICBpbnQgaTsKKyAgdm9pZCAoKipwZnVuYyko
KSA9IHUtPmN0b3JzOworICAKKyAgZm9yIChpID0gMTsgcGZ1bmNbaV07IGkrKykKKyAgICB7Cisg
ICAgICAocGZ1bmNbaV0pKCk7CisgICAgfQorICBhdGV4aXQgKF9fZG9fZ2xvYmFsX2R0b3JzKTsK
K30KKwordm9pZAorX19tYWluICgpCit7CisgIGlmICghIHUtPnJ1bl9jdG9yc19wKQorICAgIHsK
KyAgICAgIHUtPnJ1bl9jdG9yc19wID0gMTsKKyAgICAgIF9fZG9fZ2xvYmFsX2N0b3JzICgpOwor
ICAgIH0KK30KKwordm9pZAorX2V4aXQgKGludCBuKQoreworICBzeXNjYWxsX3ByaW50ZiAoIl9l
eGl0ICglZClcbiIsIG4pOworICBzeXNjYWxsX3ByaW50ZiAoIlRlcm1pbmF0aW5nLlxuIik7Cisg
IC8qIHJlc3RvcmUgY29uc29sZSB0aXRsZSAqLworICBpZiAodGl0bGUpCisgICAgU2V0Q29uc29s
ZVRpdGxlICh0aXRsZSk7CisKKyAgaWYodS0+c2VsZi0+cGlkICE9IHUtPnNlbGYtPnBwaWQpCisg
IGtpbGwodS0+c2VsZi0+cHBpZCwgU0lHQ0hMRCk7CisgIGNsb3NlX2FsbF9maWxlcyAoKTsKKyAg
dS0+c2VsZi0+dGVybWluYXRlICgpOworICBzaGFyZWRfdGVybWluYXRlICgpOworICBmb3JrX3Rl
cm1pbmF0ZSAoKTsKKworICAvKiBNdXN0IGJlIGRvbmUgbGFzdCAqLworICB1LT5zZWxmLT5yZWNv
cmRfZGVhdGgoKTsKKworICBkZXN0cm95X3BpbmZvX2xvY2soKTsKKyAgRXhpdFByb2Nlc3MgKG4p
OworfQorCit2b2lkCithcGlfZmF0YWwgKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgc21hbGxfcHJp
bnRmICgiY3lnd2luOiAlc1xuIiwgbXNnKTsKKyAgLyogV2UgYXJlIGdvaW5nIGRvd24gd2l0aG91
dCBtZXJjeSAtIG1ha2Ugc3VyZSB3ZSByZXNldAorICAgICBvdXIgaW51c2VfcC4gKi8KKyAgaWYo
KHUgIT0gMCkgJiYgKHUtPnNlbGYgIT0gMCkpCisgICAgdS0+c2VsZi0+cmVjb3JkX2RlYXRoX25v
bG9jaygpOworCisgIEV4aXRQcm9jZXNzICgxKTsKK30KKworCisvKiBXcmFwIHRoZSByZWFsIG9u
ZSwgb3RoZXJ3aXNlIGdkYiBnZXRzIGNvbmZ1c2VkIGFib3V0CisgICB0d28gc3ltYm9scyB3aXRo
IHRoZSBzYW1lIG5hbWUsIGJ1dCBkaWZmZXJlbnQgYWRkcmVzc2VzLgorCisgICBVUFRSIGlzIGEg
cG9pbnRlciB0byBnbG9iYWwgZGF0YSB0aGF0IGxpdmVzIG9uIHRoZSBsaWJjIHNpZGUgb2YgdGhl
CisgICBsaW5lIFtpZiBvbmUgZGlzdGluZ3Vpc2hlcyB0aGUgYXBwbGljYXRpb24gZnJvbSB0aGUg
ZGxsXS4gICovCisKKy8qIFRoaXMgaXMgbmVlZGVkIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZiBp
bXBvcnQgc3R1ZmYgKi8KK2FzbSAoIi5zZWN0aW9uIC5pZGF0YSQzXG4iICIubG9uZyAwLDAsMCww
LDAiKTsKKworLyogRm9yIGZvcmsgKi8KKyNpZmRlZiBfUE9XRVIKK2V4dGVybiBjaGFyIF9fZGF0
YV9zdGFydF9fOworZXh0ZXJuIGNoYXIgX19kYXRhX2VuZF9fOworZXh0ZXJuIGNoYXIgX19ic3Nf
c3RhcnRfXzsKK2V4dGVybiBjaGFyIF9fYnNzX2VuZF9fOworI2Vsc2UKK2V4dGVybiBjaGFyIF9k
YXRhX3N0YXJ0X187CitleHRlcm4gY2hhciBfZGF0YV9lbmRfXzsKK2V4dGVybiBjaGFyIF9ic3Nf
c3RhcnRfXzsKK2V4dGVybiBjaGFyIF9ic3NfZW5kX187CisjZW5kaWYKKworZXh0ZXJuICJDIiAK
K3sKKy8qICBjaGFyICoqZW52aXJvbjsgKi8KKyAgdm9pZCBjeWd3aW5fY3J0MCgpOworICBleHRl
cm4gdm9pZCAoKl9fQ1RPUl9MSVNUX18pKHZvaWQpOworICBleHRlcm4gdm9pZCAoKl9fRFRPUl9M
SVNUX18pKHZvaWQpOworICBpbnQgbWFpbiAoaW50LCBjaGFyICoqLCBjaGFyICoqKTsKKyAgc3Ry
dWN0IF9yZWVudCAqX2ltcHVyZV9wdHI7CisgIGludCBfZm1vZGU7Cit9OworCitzdGF0aWMgcGVy
X3Byb2Nlc3MgY3lnd2luX3N0YXR1OworCisvKiBTZXQgdXAgcG9pbnRlcnMgdG8gdmFyaW91cyBw
aWVjZXMgc28gdGhlIGRsbCBjYW4gdGhlbiB1c2UgdGhlbSwKKyAgIGFuZCB0aGVuIGp1bXAgdG8g
dGhlIGRsbC4gICovCisKK3ZvaWQgY3lnd2luX2NydDAoKQoreworICAvKiBUaGlzIGlzIHVzZWQg
dG8gcmVjb3JkIHdoYXQgdGhlIGluaXRpYWwgc3Agd2FzLiAgVGhlIHZhbHVlIGlzIG5lZWRlZAor
ICAgICB3aGVuIGNvcHlpbmcgdGhlIHBhcmVudCdzIHN0YWNrIHRvIHRoZSBjaGlsZCBkdXJpbmcg
YSBmb3JrLiAgKi8KKyAgaW50IG9uc3RhY2s7CisKKyAgLyogVGhlIHZlcnNpb24gbnVtYmVycyBh
cmUgdGhlIG1haW4gc291cmNlIG9mIGNvbXBhdGliaWxpdHkgY2hlY2tpbmcuCisgICAgIEFzIGEg
YmFja3VwIHRvIHRoZW0sIHdlIHVzZSB0aGUgc2l6ZSBvZiB0aGUgcGVyX3Byb2Nlc3Mgc3RydWN0
LiAgKi8KKyAgY3lnd2luX3N0YXR1Lm1hZ2ljX2Jpc2N1aXQgPSBzaXplb2YgKHBlcl9wcm9jZXNz
KTsKKworICAvKiBjeWd3aW4uZGxsIHZlcnNpb24gbnVtYmVyIGluIGVmZmVjdCBhdCB0aGUgdGlt
ZSB0aGUgYXBwIHdhcyBjcmVhdGVkLiAgKi8KKyAgY3lnd2luX3N0YXR1LnZlcnNpb25fbWFqb3Ig
PSBDWUdXSU5fRExMX1ZFUlNJT05fTUFKT1I7CisgIGN5Z3dpbl9zdGF0dS52ZXJzaW9uX21pbm9y
ID0gQ1lHV0lOX0RMTF9WRVJTSU9OX01JTk9SOworCisgIGN5Z3dpbl9zdGF0dS5jdG9ycyA9ICZf
X0NUT1JfTElTVF9fOworICBjeWd3aW5fc3RhdHUuZHRvcnMgPSAmX19EVE9SX0xJU1RfXzsKKyAg
Y3lnd2luX3N0YXR1LmVudnB0ciA9ICZlbnZpcm9uOworICBjeWd3aW5fc3RhdHUuaW1wdXJlX3B0
cl9wdHIgPSAmX2ltcHVyZV9wdHI7CisgIGN5Z3dpbl9zdGF0dS5tYWluID0gJm1haW47CisgIGN5
Z3dpbl9zdGF0dS5mbW9kZV9wdHIgPSAmX2Ztb2RlOworICBjeWd3aW5fc3RhdHUuaW5pdGlhbF9z
cCA9IChjaGFyICopICZvbnN0YWNrOworCisgIC8qIFJlbWVtYmVyIHdoYXRldmVyIHRoZSB1c2Vy
IGxpbmtlZCBoaXMgYXBwbGljYXRpb24gd2l0aCAtIG9yCisgICAgIHBvaW50IHRvIGVudHJpZXMg
aW4gdGhlIGRsbC4gICovCisgIGN5Z3dpbl9zdGF0dS5tYWxsb2MgPSAmbWFsbG9jOyAKKyAgY3ln
d2luX3N0YXR1LmZyZWUgPSAmZnJlZTsKKyAgY3lnd2luX3N0YXR1LnJlYWxsb2MgPSAmcmVhbGxv
YzsKKworICAvKiBTZXR1cCB0aGUgbW9kdWxlIGhhbmRsZSBzbyBmb3JrIGNhbiBnZXQgdGhlIHBh
dGggbmFtZS4gKi8KKyAgY3lnd2luX3N0YXR1Lmhtb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoMCk7
CisKKyAgLyogdmFyaWFibGVzIGZvciBmb3JrICovCisjaWZkZWYgX1BPV0VSCisgIGN5Z3dpbl9z
dGF0dS5kYXRhX3N0YXJ0ID0gJl9fZGF0YV9zdGFydF9fOworICBjeWd3aW5fc3RhdHUuZGF0YV9l
bmQgPSAmX19kYXRhX2VuZF9fOworICBjeWd3aW5fc3RhdHUuYnNzX3N0YXJ0ID0gJl9fYnNzX3N0
YXJ0X187CisgIGN5Z3dpbl9zdGF0dS5ic3NfZW5kID0gJl9fYnNzX2VuZF9fOworI2Vsc2UKKyAg
Y3lnd2luX3N0YXR1LmRhdGFfc3RhcnQgPSAmX2RhdGFfc3RhcnRfXzsKKyAgY3lnd2luX3N0YXR1
LmRhdGFfZW5kID0gJl9kYXRhX2VuZF9fOworICBjeWd3aW5fc3RhdHUuYnNzX3N0YXJ0ID0gJl9i
c3Nfc3RhcnRfXzsKKyAgY3lnd2luX3N0YXR1LmJzc19lbmQgPSAmX2Jzc19lbmRfXzsKKyNlbmRp
ZgorCisgIC8qIEp1bXAgaW50byB0aGUgZGxsLiAgKi8KK3Blcl9wcm9jZXNzICp1cHRyID0gJmN5
Z3dpbl9zdGF0dTsKKworICBpbnQgYXJnYzsKKyAgY2hhciAqKmFyZ3Y7CisgIGludCBpOworICAv
KiBBY2NvcmRpbmcgdG8gb25ub0BzdGFjay51cmMudHVlLm5sLCB0aGUgZXhjZXB0aW9uIGhhbmRs
ZXIgcmVjb3JkIG11c3QKKyAgICAgYmUgb24gdGhlIHN0YWNrLiAgKi8KKyAgLyogRklYTUU6IFZl
cmlmeSBmb3JrZWQgY2hpbGRyZW4gZ2V0IHRoZWlyIGV4Y2VwdGlvbiBoYW5kbGVyIHNldCB1cCBv
ay4gICovCisgIHN0cnVjdCBleGNlcHRpb25fbGlzdCBjeWd3aW5fZXhjZXB0X2VudHJ5OworCisg
IC8qIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgZGV2ZWxvcGVycyBkaWRuJ3QgY2hhbmdlIHRo
ZSBwZXJfcHJvY2VzcworICAgICBzdHJ1Y3Qgd2l0aG91dCB1cGRhdGluZyBTSVpFT0ZfUEVSX1BS
T0NFU1MgW2l0IG1ha2VzIHRoZW0gdGhpbmsgdHdpY2UKKyAgICAgYWJvdXQgY2hhbmdpbmcgaXRd
LiAgKi8KKyAgaWYgKHNpemVvZiAocGVyX3Byb2Nlc3MpICE9IFNJWkVPRl9QRVJfUFJPQ0VTUykK
KyAgICB7CisgICAgICBzbWFsbF9wcmludGYgKCJwZXJfcHJvY2VzcyBzYW5pdHkgY2hlY2sgZmFp
bGVkXG4iKTsKKyAgICAgIEV4aXRQcm9jZXNzICgxKTsKKyAgICB9CisKKyAgLyogTWFrZSBzdXJl
IHRoYXQgdGhlIGFwcCBhbmQgdGhlIGRsbCBhcmUgaW4gc3luYy4KKyAgICAgbWFnaWNfYmlzY3Vp
dCAhPSAwIGlmIHVzaW5nIHRoZSBvbGQgc3R5bGUgdmVyc2lvbiBudW1iZXJpbmcgc2NoZW1lLiAg
Ki8KKyAgaWYgKHVwdHItPm1hZ2ljX2Jpc2N1aXQgIT0gU0laRU9GX1BFUl9QUk9DRVNTCisgICAg
ICB8fCB1cHRyLT52ZXJzaW9uX21ham9yICE9IGN5Z3dpbl9kbGxfdmVyc2lvbl9tYWpvcikKKyAg
ICB7CisgICAgICBzbWFsbF9wcmludGYgKCJDWUdXSU4gRExMIGFuZCBBUFAgb3V0IG9mIHN5bmMs
IHlvdSdsbCBoYXZlIHRvIHJlbGluaywgc29ycnkuXG4iKTsKKyAgICAgIHNtYWxsX3ByaW50ZiAo
Im1hZ2ljIG51bWJlcnMgKGFwcCAlZCwgZGxsICVkKVxuIiwKKwkJICAgIHVwdHItPm1hZ2ljX2Jp
c2N1aXQsIDApOworICAgICAgaWYgKHVwdHItPm1hZ2ljX2Jpc2N1aXQgPT0gMCkKKwlzbWFsbF9w
cmludGYgKCJjeWd3aW4gdmVyc2lvbiBudW1iZXJzIChhcHAgJWQuJWQsIGRsbCAlZC4lZClcbiIs
CisJCSAgICAgIHVwdHItPnZlcnNpb25fbWFqb3IsIHVwdHItPnZlcnNpb25fbWlub3IsCisJCSAg
ICAgIGN5Z3dpbl9kbGxfdmVyc2lvbl9tYWpvciwgY3lnd2luX2RsbF92ZXJzaW9uX21pbm9yKTsK
KyAgICAgIEV4aXRQcm9jZXNzICgxKTsKKyAgICB9CisKKyAgLyogU2V0IHRoZSBsb2NhbCBjb3B5
IG9mIHRoZSBwb2ludGVyIGludG8gdGhlIHVzZXIgc3BhY2UuICAqLworICB1ID0gdXB0cjsKKwor
ICAvKiBOYXN0eSBzdGF0aWMgc3R1ZmYgbmVlZGVkIGJ5IG5ld2xpYiAgLSBwb2ludCB0byBhCisg
ICAgIGxvY2FsIGNvcHkgb2YgdGhlIHJlZW50IHN0dWZmLiAKKyAgICAgTkIuIFRoaXMgTVVTVCBi
ZSBkb25lIGhlcmUgKGJlZm9yZSB0aGUgZm9ya2VlIGNvZGUpIGFzIHRoZQorICAgICBmb3JrIGNv
cHkgY29kZSBkb2Vzbid0IGNvcHkgdGhlIGRhdGEgaW4gbGliY2NydDAuY2MgKHRoYXQncyB3aHkg
d2UKKyAgICAgcGFzcyBpbiB0aGUgcGVyX3Byb2Nlc3Mgc3RydWN0IGludG8gdGhlIC5kbGwgZnJv
bSBsaWJjY3J0MCkuCisgICovCisKKyAgKih1LT5pbXB1cmVfcHRyX3B0cikgPSAmcmVlbnRfZGF0
YTsKKyAgX2ltcHVyZV9wdHIgPSAmcmVlbnRfZGF0YTsKKworI2lmIDAKKyAgc21hbGxfcHJpbnRm
KCImcmVlbnRfZGF0YSA9ICV4LCAmX2ltcHVyZV9wdHIgPSAleCwgX2ltcHVyZV9wdHIgPSAleFxu
IiwKKwkJJnJlZW50X2RhdGEsICZfaW1wdXJlX3B0ciwgX2ltcHVyZV9wdHIpOworI2VuZGlmCisK
KyAgLyogRW5hYmxlIHN0cmFjaW5nIGFzIHNvb24gYXMgcG9zc2libGUuICAqLworICBzdHJhY2Vf
aW5pdCAoKTsKKworICAvKiBJbml0aWFsaXplIHRoZSBjeWd3aW4zMiBzdWJzeXN0ZW0gaWYgdGhp
cyBpcyB0aGUgZmlyc3QgcHJvY2VzcywKKyAgICAgb3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgZGF0
YSBzdHJ1Y3R1cmUgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcuICAqLworICBzaGFyZWRfaW5pdCAo
KTsKKworICAvKiBJbml0aWFsaXplIFNJR1NFR1YgaGFuZGxpbmcsIGV0Yy4KKyAgICAgVGhlIGV4
Y2VwdGlvbiBoYW5kbGVyIHJlZmVyZW5jZXMgZGF0YSBpbiB0aGUgc2hhcmVkIGFyZWEsIHNvIHRo
aXMgY2FuJ3QKKyAgICAgYmUgZG9uZSB1bnRpbCBhZnRlciBzaGFyZWRfaW5pdC4gICovCisgIC8q
IEZJWE1FOiBGb3IgdGhlIGZvcmtlZSwgb3VyIHN0YWNrZWQgY29weSBvZiBjeWd3aW5fZXhjZXB0
X2VudHJ5IHdpbGwKKyAgICAgZ2V0IG92ZXJ3cml0dGVuLCBidXQgcHJlc3VtYWJseSB3aXRoIHRo
ZSBzYW1lIGRhdGEuICBOb3Qgc3VyZSB3aGF0CisgICAgIGhhcHBlbnMgaW4gdGhlIGZvcmtlZSBp
ZiBhIFNJR1NFR1YgaGFwcGVucyBiZWZvcmUgbm93LiAgKi8KKyAgaW5pdF9leGNlcHRpb25zICgm
Y3lnd2luX2V4Y2VwdF9lbnRyeSk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgZm9yayBtZWNoYW5p
c20uICAqLworICBmb3JrX2luaXQgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgaGVhcC4gICov
CisgIGhlYXBfaW5pdCAoKTsKKworICBjaGFyICpsaW5lID0gR2V0Q29tbWFuZExpbmVBICgpOwor
ICAvKiBTYXZlIGN1cnJlbnQgY29uc29sZSB0aXRsZSBhbmQgc2V0IG5ldyBvbmUgKi8KKyAgdGl0
bGUgPSAoY2hhciAqKSBhbGxvY2EgKFRJVExFU0laRSk7CisgIGlmICghR2V0Q29uc29sZVRpdGxl
ICh0aXRsZSwgVElUTEVTSVpFKSkKKyAgICB0aXRsZSA9IE5VTEw7CisgIFNldENvbnNvbGVUaXRs
ZSAobGluZSk7CisKKyAgLyogSWYgdGhpcyBpcyBhIGZvcmssIHRoZW4gZG8gdGhhdCBub3cuICBB
bGwgdGhlIG90aGVyIHN0dWZmIHdpbGwKKyAgICAgaGF2ZSBiZWVuIHNldCB1cCBieSB0aGUgdGFz
ayB0aGF0IGZvcmtlZCB1cy4gICovCisKKyAgaWYgKHUtPmZvcmtlZSkKKyAgICB7CisgICAgICBl
bnZpcm9uID0gKnUtPmVudnB0cjsKKworICAgICAgLyogV2hlbiBhIGZvcmtlZCBjaGlsZCBzdGFy
dHMsIGl0cyBzdGFjayBpcyBxdWl0ZSBzbWFsbC4KKwkgSG93ZXZlciwgd2hlbiBpdCBsb25nam1w
J3MsIHRoZSBzdGFjayBiZWNvbWVzIHRoYXQgb2YgaXRzIHBhcmVudAorCSB3aGljaCBpcyBhcmJp
dHJhcmlseSBsYXJnZS4gIFRoaXMgY2FuIGNhdXNlIHRoZSBjaGlsZCB0byBjcmFzaCBzbworCSBw
cm9iZSB0aGUgc3RhY2sgb3V0LiAgKi8KKyAgICAgIC8qIEZJWE1FOiBGaXggaGFyZGNvZGluZyBv
ZiBzaXplIGFmdGVyIG1pZ3JhdGlvbi4gICovCisgICAgICByZWN1ciAoKGNoYXIgKikmaSAtIDB4
MjAwMDAsIDApOworCisgICAgICBkZWJ1Z19wcmludGYgKCJjaGlsZCBhYm91dCB0byBsb25nam1w
XG4iKTsKKyAgICAgIGR1bXBfam1wX2J1ZiAodS0+c2VsZi0+cmVzdG9yZSk7CisKKyAgICAgIC8q
IFRoZSBjb3JyZXNwb25kaW5nIHNldGptcCBpcyBpbiBmb3JrLmNjLiAgKi8KKyAgICAgIGxvbmdq
bXAgKHUtPnNlbGYtPnJlc3RvcmUsIHUtPmZvcmtlZSk7CisgICAgfQorCisgIC8qIE5hc3R5IHN0
YXRpYyBzdHVmZiBuZWVkZWQgYnkgbmV3bGliIC0gaW5pdGlhbGl6ZSBpdC4gCisgICAgIE5vdGUg
dGhhdCBpbXB1cmVfcHRyIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoaXMg
YWJvdmUKKyAgICAgTkIuIFRoaXMgKk1VU1QqIGJlIGRvbmUgaGVyZSwganVzdCBhZnRlciB0aGUg
Zm9ya2VlIGNvZGUgYXMgc29tZQorICAgICBvZiB0aGUgY2FsbHMgYmVsb3cgKGVnLiB1aW5mb19p
bml0KSBkbyBzdGRpbyBjYWxscyAtIHRoaXMgYXJlYSBtdXN0CisgICAgIGJlIHNldCB0byB6ZXJv
IGJlZm9yZSB0aGVuLgorICAqLworICBtZW1zZXQgKCZyZWVudF9kYXRhLCAwLCBzaXplb2YgKHJl
ZW50X2RhdGEpKTsKKyAgcmVlbnRfZGF0YS5fZXJybm8gPSAwOworICByZWVudF9kYXRhLl9zdGRp
biA9ICByZWVudF9kYXRhLl9fc2YgKyAwOworICByZWVudF9kYXRhLl9zdGRvdXQgPSByZWVudF9k
YXRhLl9fc2YgKyAxOworICByZWVudF9kYXRhLl9zdGRlcnIgPSByZWVudF9kYXRhLl9fc2YgKyAy
OworCisgIC8qIFBlcmZvcm0gdmFyaW91cyBzdGFydHVwIHNhbml0eSBjaGVja3MuICAqLworICBj
aGVja291dCAoKTsKKworICAvKiBJbml0aWFsaXplIG91ciBwcm9jZXNzIHRhYmxlIGVudHJ5LiAg
Ki8KKyAgcGluZm9faW5pdCAoKTsKKworICAvKiBJbml0aWFsaXplIHRoZSBmaWxlIGRlc2NyaXB0
b3IgdGFibGUuICAqLworICBobWFwX2luaXQgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB1aWQsIGdp
ZC4gICovCisgIHVpbmZvX2luaXQgKCk7CisKKyAgLyogSW5pdGlhbGl6ZSB3aW5zb2NrICovCisg
IHNvY2tldF9jaGVja2luaXQoKTsKKworICBzeXNjYWxsX3ByaW50ZiAoIkFwcGxpY2F0aW9uIENZ
R1dJTiB2ZXJzaW9uOiAlZC4lZFxuIiwKKwkJICB1LT52ZXJzaW9uX21ham9yLCB1LT52ZXJzaW9u
X21pbm9yKTsKKyAgc3lzY2FsbF9wcmludGYgKCJDWUdXSU4gRExMIHZlcnNpb24gICAgICAgIDog
JWQuJWRcbiIsCisJCSAgY3lnd2luX2RsbF92ZXJzaW9uX21ham9yLCBjeWd3aW5fZGxsX3ZlcnNp
b25fbWlub3IpOworCisgIC8qIFNjYW4gdGhlIGNvbW1hbmQgbGluZSBhbmQgYnVpbGQgYXJndi4g
ICovCisgIGludCBsZW4gPSBzdHJsZW4gKGxpbmUpOworICBjaGFyICptaW5lID0gKGNoYXIgKilh
bGxvY2EgKGxlbiArIDIpOworICBtZW1jcHkgKG1pbmUsIGxpbmUsIGxlbik7CisgIG1pbmVbbGVu
XSA9IDA7CisgIG1pbmVbbGVuKzFdID0gMDsKKyAgYXJnYyA9IGNvbXB1dGVfYXJnYyAobWluZSk7
CisgIGFyZ3YgPShjaGFyICoqKSBhbGxvY2EgKChhcmdjICsgMSkgKiBzaXplb2YgKGNoYXIgKikp
OworICBidWlsZF9hcmd2IChtaW5lLCBhcmd2LCBsZW4pOworCisgIC8qIEV4cGFuZCAqLmMsIGV0
Yy4gICovCisgIGlmICghIHUtPnNlbGYtPmN5Z3dpbl9wYXJlbnRfcCkKKyAgICBnbG9iaWZ5ICgm
YXJnYywgJmFyZ3YpOworCisgIC8qIERlYWwgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAq
LworICB7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IHJhd2VudiA9IEdldEVudmlyb25tZW50U3Ry
aW5ncyAoKTsKKworICAgIGludCBlbnZjID0gbnVtX21zX2Vudl92YXJzIChyYXdlbnYpOworCisg
ICAgZGVidWdfcHJpbnRmICgiUHJvY2Vzc2luZyAlZCBlbnYgdmFycyAuLi5cbiIsIGVudmMpOwor
CisgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZXNlICgrIHRoZSB0cmFpbGluZyBOVUxMKS4g
ICovCisgICAgKnUtPmVudnB0ciA9IChjaGFyICoqKWFsbG9jYSAoKGVudmMgKyAxKSAqIHNpemVv
ZiAoY2hhciAqKSk7CisKKyAgICAvKiBDdXJyZW50IGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBpcyBy
ZWNvcmRlZCBhcyB2YXJpYWJsZXMgb2YgdGhlCisgICAgICAgZm9ybSAiPVg6PVg6XGZvb1xiYXI7
IHRoZXNlIG11c3QgYmUgY2hhbmdlZCBpbnRvIHNvbWV0aGluZyBsZWdhbAorICAgICAgICh3ZSBj
b3VsZCBqdXN0IGlnbm9yZSB0aGVtIGJ1dCBtYXliZSBhbiBhcHBsaWNhdGlvbiB3aWxsCisgICAg
ICAgZXZlbnR1YWxseSB3YW50IHRvIHVzZSB0aGVtKS4gICovCisgICAgaW50IGkgPSAwOworICAg
IGludCBuID0gMDsKKyAgICB3aGlsZSAocmF3ZW52W2ldKQorICAgICAgeworCWNoYXIgKmM7CisJ
YyA9IChjaGFyICopYWxsb2NhIChzdHJsZW4gKHJhd2VudiArIGkpICsgMSk7CisJc3RyY3B5IChj
LCByYXdlbnYgKyBpKTsKKwlpZiAoY1swXSA9PSAnPScpCisJICBjWzBdID0gJyEnOworCQorCSgq
dS0+ZW52cHRyKVtuXSA9IGM7CisJCisJLyogU2tpcCB0byB0aGUgbmV4dCBvbmUuICAqLworCXdo
aWxlIChyYXdlbnZbaV0pCisJICArK2k7CisJKytpOworCSsrbjsKKyAgICAgIH0KKyAgICAoKnUt
PmVudnB0cilbbl0gPSAwOworCisgICAgLyogQW1hemluZ2x5LCBOVCBoYXMgYSBjYXNlIHNlbnNp
dGl2ZSBlbnZpcm9ubWVudCBuYW1lIGxpc3QsCisgICAgICAgb25seSBzb21ldGltZXMuCisgICAg
ICAgZWcsIGl0J3Mgbm9ybWFsIHRvIGhhdmUgTlQgc2V0IHlvdXIgIlBhdGgiIHRvIHNvbWV0aGlu
Zy4KKyAgICAgICBMYXRlciwgeW91IHNldCAiUEFUSCIgdG8gc29tZXRoaW5nIGVsc2UuICBUaGlz
IGFsdGVycyAiUGF0aCIuCisgICAgICAgQnV0IGlmIHlvdSB0cnkgYW5kIGRvIGEgbmFpdmUgZ2V0
ZW52IG9uICJQQVRIIiB5b3UnbGwgZ2V0IG5vdGhpbmcuIAorICAgICAgIAorICAgICAgIFNvIHdl
IHVwcGVyIGNhc2UgdGhlIGxhYmVscyBoZXJlIHRvIHByZXZlbnQgY29uZnVzaW9uIGxhdGVyLgor
ICAgICAgIFdlIGRvIGl0IG9ubHkgZm9yIHRoZSBmaXJzdCBwcm9jZXNzIGluIGEgc2Vzc2lvbiBn
cm91cCAqLworICAgIAorICAgIGlmICh1LT5zZWxmLT5waWQgPT0gdS0+c2VsZi0+cHBpZCkKKyAg
ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgIHsKKwkgIGNoYXIgKnA7CisJICBm
b3IgKHAgPSAoKnUtPmVudnB0cilbaV07ICpwICE9ICc9JyAmJiAqcDsgcCsrKQorCSAgICBpZiAo
aXNsb3dlciAoKnApKQorCSAgICAgICpwID0gdG91cHBlciAoKnApOworICAgICAgICB9CisKKyAg
ICAvKiBJZiB3ZSdyZSB1c2luZyBwb3NpeCBwYXRocywgd2UgZG8gYSBzcGVjaWFsIHRoaW5nIGZv
ciB0aGUgUEFUSAorICAgICAgIFthbmQgcG90ZW50aWFsbHkgb3RoZXJzXS4gIFRoZXkgbWlnaHQg
YmUgaW4gbmF0aXZlIGZvcm1hdCBzbyB3ZSB0dXJuCisgICAgICAgdGhlbSBpbnRvIHRoZWlyIHBv
c2l4IGVxdWl2YWxlbnQuICAqLworCisgICAgaWYgKHMtPm1vdW50LnBvc2l4X3BhdGhfcCAoKSkK
KyAgICAgIHsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCSAgeworCSAgICBmb3IgKGludCBq
ID0gMDsgY29udl9wYXRoX25hbWVzW2pdOyBqKyspIAorCSAgICAgIHsKKwkJY2hhciAqc3JjID0g
KCp1LT5lbnZwdHIpW2ldOworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbiAoY29udl9wYXRoX25hbWVz
W2pdKTsKKworCQlpZiAoc3RybmNhc2VjbXAgKHNyYywgY29udl9wYXRoX25hbWVzW2pdLCBuYW1l
bGVuKSAhPSAwKQorCQkgIGNvbnRpbnVlOworCisJCS8qIFR1cm4gYWxsIHRoZSBpdGVtcyBpbiBo
ZXJlIGZyb20gYzo8Zm9vPjs8YmFyPiBpbnRvIHRoZWlyIAorCQkgICBtb3VudGVkIGVxdWl2YWxl
bnRzIC0gaWYgdGhleSBoYXZlIG9uZS4gICovCisJCWNoYXIgKnZhbHVlID0gc3JjICsgbmFtZWxl
bjsKKwkJY2hhciAqZW52dmFyID0gKGNoYXIgKikgYWxsb2NhICh3aW4zMl90b19wb3NpeF9wYXRo
X2xpc3RfYnVmX3NpemUgKHZhbHVlKSk7CisJCWNoYXIgKm91dGVudiA9IGVudnZhcjsKKworCQlk
ZWJ1Z19wcmludGYgKCJuZWVkIHRvIGNvbnZlcnQgJWQgJXNcbiIsIGksIHNyYyk7CisKKwkJbWVt
Y3B5IChvdXRlbnYsIGNvbnZfcGF0aF9uYW1lc1tqXSwgbmFtZWxlbik7CisJCW91dGVudiArPSBu
YW1lbGVuOworCisjaWYgMCAvKiBXb3VsZCByYXRoZXIgbm90IGhhdmUgdGhpcywgYnV0IG1heSBo
YXZlIHRvLiAgKi8KKwkJLyogUEFUSCBpbiB3aW4zMiBhbHdheXMgaGFzIGEgdmlydHVhbCAiOiIg
YXQgdGhlIGZyb250CisJCSAgICh0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYWx3YXlzIHNlYXJj
aGVkIGZpcnN0KS4gIEVuc3VyZQorCQkgICBQQVRIIGhhcyBhIGxlYWRpbmcgIjoiLiAgKi8KKwkJ
aWYgKHN0cmNtcCAoY29udl9wYXRoX25hbWVzW2pdLCAiUEFUSD0iKSA9PSAwKQorCQkgIHsKKwkJ
ICAgIGlmICgqdmFsdWUgIT0gJzsnCisJCQkmJiAhKHZhbHVlWzBdID09ICcuJyAmJiB2YWx1ZVsx
XSA9PSAnOycpKQorCQkgICAgICAqb3V0ZW52KysgPSAnOic7CisJCSAgfQorI2VuZGlmCisKKwkJ
d2luMzJfdG9fcG9zaXhfcGF0aF9saXN0ICh2YWx1ZSwgb3V0ZW52KTsKKworCQlkZWJ1Z19wcmlu
dGYgKCJlbnYgdmFyIGNvbnZlcnRlZCB0byAlc1xuIiwgZW52dmFyKTsKKwkJKCp1LT5lbnZwdHIp
W2ldID0gZW52dmFyOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgIC8qIEZJWE1FOiBT
b21ldGltZXMgdGhlIGRsbCB1c2VzIEdldEVudmlyb25tZW50VmFyaWFibGUsCisgICAgICAgc29t
ZXRpbWVzIGl0IHVzZXMgZ2V0ZW52LiAgTmVlZCB0byBwaWNrICpvbmUqLiAgKi8KKyAgICBlbnZp
cm9uID0gKnUtPmVudnB0cjsKKyAgICBGcmVlRW52aXJvbm1lbnRTdHJpbmdzQSAoKGNoYXIgKikg
cmF3ZW52KTsKKyAgfQorCisgIC8qIFNhdmUgdGhlIHByb2dyYW0gbmFtZS4gIEl0J3MgdXNlZCBp
biBkZWJ1Z2dpbmcgbWVzc2FnZXMgYW5kIGJ5CisgICAgIHRoZSBmb3JrIGNvZGUgKGZvcmtpbmcg
c3Bhd25zIGEgY29weSBvZiB1cykuICBDb3B5IGl0IGludG8gYSB0ZW1wIGFuZAorICAgICB0aGVu
IGludG8gdGhlIGZpbmFsIHNwb3QgYmVjYXVzZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdXNlCisgICAg
IHUtPnNlbGYtPnByb2duYW1lLiBUcnkgZ2V0dGluZyB0aGUgYWJzb2x1dGUgcGF0aCBmcm9tIHRo
ZQorICAgICBtb2R1bGUgaGFuZGxlLCBpZiB0aGlzIGZhaWxzIGdldCB0aGUgbmFtZSBmcm9tIHRo
ZSBwYXRoLgorICAgICBUaGlzIGNhbGwgcmVmZXJlbmNlcyAkUEFUSCBzbyB3ZSBjYW4ndCBkbyB0
aGlzIHVudGlsIHRoZSBlbnZpcm9ubWVudAorICAgICB2YXJzIGFyZSBzZXQgdXAuICAqLworICAv
KiBGSVhNRTogV2hhdCBpZiBhcmd2WzBdIGlzIHJlbGF0aXZlLCAkUEFUSCBjaGFuZ2VzLCBhbmQg
dGhlbiB0aGUgcHJvZ3JhbQorICAgICB0cmllcyB0byBkbyBhIGZvcms/ICAqLworICB7CisgICAg
Y2hhciB0bXBbTUFYX1BBVEhdOworCisgICAgaWYodS0+aG1vZHVsZSAhPSAwKQorICAgICAgewor
ICAgICAgICBpZihHZXRNb2R1bGVGaWxlTmFtZSh1LT5obW9kdWxlLCB0bXAsIE1BWF9QQVRIKT09
MCkKKyAgICAgICAgICBmaW5kX2V4ZWMgKGFyZ3ZbMF0sIHRtcCk7CisgICAgICB9CisgICAgZWxz
ZQorICAgICAgZmluZF9leGVjIChhcmd2WzBdLCB0bXApOworICAgIHN0cmNweSAodS0+c2VsZi0+
cHJvZ25hbWUsIHRtcCk7CisgIH0KKworICAvKiBDb252ZXJ0IGFyZ3ZbMF0gdG8gcG9zaXggcnVs
ZXMgaWYgd2UncmUgdXNpbmcgdGhlbSBhbmQgaXQncyBjdXJyZW50bHkKKyAgICAgYmxhdGFudGx5
IHdpbjMyIHN0eWxlLiAgKi8KKyAgaWYgKHMtPm1vdW50LnBvc2l4X3BhdGhfcCAoKQorICAgICAg
JiYgKHN0cmNociAoYXJndlswXSwgJzonKSB8fCBzdHJjaHIgKGFyZ3ZbMF0sICdcXCcpKSkKKyAg
ICB7CisgICAgICBjaGFyICpuZXdfYXJndjAgPSAoY2hhciAqKSBhbGxvY2EgKE1BWF9QQVRIKTsK
KyAgICAgIGNvbnZfdG9fcG9zaXhfcGF0aCAoYXJndlswXSwgbmV3X2FyZ3YwKTsKKyAgICAgIGFy
Z3ZbMF0gPSBuZXdfYXJndjA7CisgICAgfQorCisgIC8qIFNldCB1cCBfX3Byb2duYW1lIGZvciBn
ZXRvcHQgZXJyb3IgY2FsbCAqLworICBfX3Byb2duYW1lID0gYXJndlswXTsKKworICBpZiAodS0+
c3RyYWNlX21hc2sgJiAoX1NUUkFDRV9TVEFSVFVQIHwgX1NUUkFDRV9BTEwpKQorICAgIHsKKyAg
ICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyArK2kpCisJX19zeXNfcHJpbnRmICgiYXJndlslZF0g
PSAlc1xuIiwgaSwgYXJndltpXSk7CisgICAgICBmb3IgKGkgPSAwOyAoKnUtPmVudnB0cilbaV07
ICsraSkKKwlfX3N5c19wcmludGYgKCJlbnZwWyVkXSA9ICV4ICVzXG4iLCBpLCAoKnUtPmVudnB0
cilbaV0sICgqdS0+ZW52cHRyKVtpXSk7CisgICAgfQorCisgIHN5c2NhbGxfcHJpbnRmICgiQ1lH
V0lOIFJlbGVhc2UgJWQuJWQsIGNvbXBpbGVkICVzICVzXG4iLAorCQkgIGN5Z3dpbl9kbGxfdmVy
c2lvbl9tYWpvciwgY3lnd2luX2RsbF92ZXJzaW9uX21pbm9yLAorCQkgIF9fREFURV9fLCBfX1RJ
TUVfXyk7CisKKyAgZXhpdCAodS0+bWFpbiAoYXJnYywgYXJndiwgZW52aXJvbikpOworfQorCisv
KiBUaGlzIGlzIG5lZWRlZCB0byB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2YgaW5wb3J0IHN0dWZmICov
CisvKiBGSVhNRTogRG9lc24ndCB0aGUgcHBjIHBvcnQgaGFuZGxlIHRoaXMgZGlmZmVyZW50bHk/
ICBTdGFuZGFyZGl6ZS4gICovCithc20gKCIuc2VjdGlvbiAuaWRhdGEkM1xuIiAiLmxvbmcgMCww
LDAsMCwwLDAsMCwwIik7CisKZGlmZiAtdXJiQiAuLi9jZGsvd2luc3VwL21pc2MuY2MgLi9taXNj
LmNjCi0tLSAuLi9jZGsvd2luc3VwL21pc2MuY2MJVGh1IEFwciAyNCAxNjo0NTozNyAxOTk3Cisr
KyAuL21pc2MuY2MJRnJpIEp1biAxMyAwNToxMjo0NyAxOTk3CkBAIC0xMDMsMTMgKzEwMyw2IEBA
CiAKIGV4dGVybiAiQyIKIGludAotdGdldGVudCAoKQotewotICByZXR1cm4gLTE7Ci19Ci0KLWV4
dGVybiAiQyIKLWludAogdmhhbmd1cCAoKQogewogICBzZXRfZXJybm8gKEVOT1NZUyk7Ck9ubHkg
aW4gLjogc3RhdGljLmRpZgpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvdXRpbHMvTWFrZWZpbGUu
aW4gLi91dGlscy9NYWtlZmlsZS5pbgotLS0gLi4vY2RrL3dpbnN1cC91dGlscy9NYWtlZmlsZS5p
bglUaHUgQXByIDI0IDE2OjQ2OjAzIDE5OTcKKysrIC4vdXRpbHMvTWFrZWZpbGUuaW4JRnJpIEp1
biAxMyAwNDoyMjo1NSAxOTk3CkBAIC0zMyw4ICszMyw4IEBACiAKIENDID0gQENDQAogCi1DRkxB
R1MgPSBAQ0ZMQUdTQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitvdmVycmlkZSBDRkxBR1MgPSBA
Q0ZMQUdTQAorb3ZlcnJpZGUgQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiAKICMgJChzcmNkaXIpLy4u
Ly4uL2luY2x1ZGUgaXMgZm9yIGdldG9wdC5oCiBJTkNMVURFUyA9IC1JJChzcmNkaXIpLy4uIC1J
JChzcmNkaXIpLy4uL2luY2x1ZGUgLUkkKHNyY2RpcikvLi4vLi4vaW5jbHVkZQpAQCAtNDYsMTAg
KzQ2LDEwIEBACiBFWEVfTERGTEFHUyA9CiAKIFBST0dTID0gbW91bnQgdW1vdW50IHBzIGtpbGwg
Y3lnd2luIG1rcGFzc3dkIG1rZ3JvdXAKLQorU0NSSVBUUyA9IHN0cmlwZGxsIGxpYjJkZWYKIFdJ
TlNVUF9ERVBTID0gJChzcmNkaXIpLy4uL3dpbnN1cC5oCiAKLWFsbDogJChQUk9HUykKK2FsbDog
JChQUk9HUykgJChTQ1JJUFRTKQogCiBtb3VudDogbW91bnQuY2MgJChXSU5TVVBfREVQUykKIAkk
KENDKSAtbyAkQCAkKHNyY2RpcikvbW91bnQuY2MgJChBTExfQ1hYRkxBR1MpICQoRVhFX0xERkxB
R1MpCkBAIC03Miw2ICs3MiwxMiBAQAogbWtncm91cDogbWtncm91cC5jICQoV0lOU1VQX0RFUFMp
CiAJJChDQykgLW8gJEAgJChzcmNkaXIpL21rZ3JvdXAuYyAkKEFMTF9DWFhGTEFHUykgJChFWEVf
TERGTEFHUykgLWxuZXRhcGkzMiAtbGFkdmFwaTMyCiAKK3N0cmlwZGxsOiBzdHJpcGRsbC5zaAor
CWNhdCAkKHNyY2Rpcikvc3RyaXBkbGwuc2ggPiAkQAorCitsaWIyZGVmOiBsaWIyZGVmLnNoCisJ
Y2F0ICQoc3JjZGlyKS9saWIyZGVmLnNoID4gJEAKKwogY2xlYW46CiAJcm0gLWYgKi5vICQoUFJP
R1MpCiAKQEAgLTc5LDcgKzg1LDcgQEAKIAlybSAtZiAgTWFrZWZpbGUgY29uZmlnLmNhY2hlIAog
CiBpbnN0YWxsOgotCWZvciBmIGluICQoUFJPR1MpIDsgXAorCWZvciBmIGluICQoUFJPR1MpICQo
U0NSSVBUUyk7IFwKIAlkbyBcCiAJICAkKElOU1RBTExfWEZPUk0pICQkZiAkKGJpbmRpcikgOyBc
CiAJZG9uZQpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvdXRpbHMvbGliMmRlZi5zaCAuL3V0aWxz
L2xpYjJkZWYuc2gKLS0tIC4uL2Nkay93aW5zdXAvdXRpbHMvbGliMmRlZi5zaAlUaHUgSnVuIDEy
IDEwOjM0OjQzIDE5OTcKKysrIC4vdXRpbHMvbGliMmRlZi5zaAlGcmkgSnVuIDEzIDA0OjIyOjU1
IDE5OTcKQEAgLTAsMCArMSwyMyBAQAorIyEvYmluL3NoCisKK3Rsb3coKXsKK2VjaG8gJDF8dHIg
QS1aIGEtegorfQorCitpZiBbIHgiJDEiID0geCIiIF07dGhlbgorICBlY2hvICJzaGVsbCBzY3Jp
cHQgdG8gZ2VuZXJhdGUgLmRlZiBmaWxlcyBmcm9tIC5MSUIgZmlsZXMKKyAgJDAgZmlsZW5hbWUg
Li4uIgorICBleGl0IDAKK2Vsc2UKKyAgZWNobyBMSUJSQVJZIGBiYXNlbmFtZSAkMSAubGliYCAK
KyAgZWNobyBFWFBPUlRTCisgIG5tIC0tZXh0ZXJuLW9ubHkgJDF8ZWdyZXAgJ14uLi4uLi4uLiBb
VFJdJyBcCisgIHxmZ3JlcCAtdiAnJEFBJ1wKKyAgfGZncmVwIC12ICdDQF8wJ1wKKyAgfGZncmVw
IC12ICdAQCcgXAorICB8c29ydCBcCisgIHxzZWQgLWUgJ3MvW15fXSpfLy8nIC1lICdzL1teP10q
Py8vJyAKK2ZpCisKKyMgVD0gLnRleHQgc2VjdGlvbiBSPSByZWFkb25seSAuZGF0YSBzZWN0aW9u
IChleHBvcnRlZCB2YXJpYWJsZXMpCisjICRBQSBDQF8wIEBAIGV4cG9ydGVkIHN0cnVjdHVyZS9p
bnRlcm5hbCBmdW5jdGlvbiBkZWZpbml0aW9ucwpkaWZmIC11cmJCIC4uL2Nkay93aW5zdXAvdXRp
bHMvc3RyaXBkbGwuc2ggLi91dGlscy9zdHJpcGRsbC5zaAotLS0gLi4vY2RrL3dpbnN1cC91dGls
cy9zdHJpcGRsbC5zaAlUaHUgSnVuIDEyIDA4OjUyOjMxIDE5OTcKKysrIC4vdXRpbHMvc3RyaXBk
bGwuc2gJRnJpIEp1biAxMyAwNDoyMjo1NSAxOTk3CkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9z
aAorI3NldCAteHYgI2RlYnVnaW5nCisjIHRoaXMgYXNzdW1lcyAudGV4dCAuYnNzIC5kYXRhIC5l
ZGF0YSAuaWRhdGEgLnN0YWIgLnN0YWJzdHIgLnJlbG9jIC5yc3JjCisjIG9yZGVyIGZvciBzZWN0
aW9ucywgd2hpY2ggaGFzIGJlZW4gdHJ1ZSBmb3IgYWxsIHRoZSBvbmVzIEkndmUgc2VlbgorIyBh
bmQgYWNjb3JkaW5nIHRvIE1yLiBOb2VyIHRoaXMgd2lsbCBiZSBuZWVkZWQgdW50aWwgQjE4KyBj
b21lcyBvdXQKK1NFQ1RJT049LnJlbG9jCitpZiBbIHgiJDEiID0geCIiIC1vIHgiJDIiICE9IHgi
IiBdO3RoZW4KKyAgZWNobyB1c2FnZSAkMCBkbGxuYW1lLmRsbCAxPiYyICMgZXJyb3JzIHRvIHN0
ZGVycgorICBleGl0IDE7CitlbGlmICEgeyBEVU1QPWBvYmpkdW1wIC0taGVhZGVycyAkMWAgJiYg
ZWNobyAkRFVNUCB8Z3JlcCBwZWktaTM4NiAmPi9kZXYvbnVsbCA7fTt0aGVuCisgIGVjaG8gJDA6
IG5vdCBhbiBvYmplY3QgZmlsZSAxPiYyCisgIGV4aXQgMTsgIyBub3QgYW4gZXhlIGRsbCAuYSBv
ciAubyBmaWxlIAorZWxpZiAhIGVjaG8gJERVTVB8Z3JlcCAiNSAuIiAmPi9kZXYvbnVsbCA7dGhl
bgorICBleGl0IDA7ICMgYWxyZWFkeSBzdHJpcGVkIHN0YXRpYworZWxpZiBlY2hvICREVU1QfGdy
ZXAgIjUgLnJlbG9jICIgJj4vZGV2L251bGwgO3RoZW4KKyAgZXhpdCAwOyAjIGFscmVhZHkgc3Ry
aXBlZCAucmVsb2MKK2VsaWYgZWNobyAkRFVNUHxncmVwICIucnNyYyIgJj4vZGV2L251bGwgO3Ro
ZW4KKyAgaWYgZWNobyAkRFVNUHxncmVwICI3IC5yZWxvYyAiICY+L2Rldi9udWxsIDt0aGVuCisg
ICAgZWNobyAkMDogUGxlYXNlIGFkanVzdCAucnNyYyBWTUEgYnkgaGFuZCBtYXAgaXMgaW4gYGRp
cm5hbWUgJDFgL3N0cmlwbWFwLiQkIDE+JjIKKyAgICBvYmpkdW1wIC0taGVhZGVycyAkMSAmPiAg
YGRpcm5hbWUgJDFgL3N0cmlwbWFwLiQkCisgIGVsc2UKKyAgICBTRUNUSU9OPS5yc3JjCisgIGZp
CitmaQoraWYgISBlY2hvICREVU1QfGdyZXAgIjcgLnJlbG9jICIgJj4vZGV2L251bGwgO3RoZW4K
KyAgaWYgZWNobyAkRFVNUHxncmVwICI1IC5zdGFiICIgJj4vZGV2L251bGwgO3RoZW4KKyAgICBz
dHJpcCAkMSAjIHN0YXRpYyAuZGxsCisgICAgZXhpdCAwOworICBlbHNlCisgICAgZWNobyAkMDog
dW5rbm93biBFcnJvciAxPiYyCisgICAgZXhpdCAxOyAjIG5vIGNsdWUKKyAgZmkKK2Vsc2UKKyAg
TkVXVk1BPWBvYmpkdW1wIC0taGVhZGVycyAkMXxncmVwICI1IC5zdGFiICJ8Z2F3ayAtLXRyYWRp
dGlvbmFsICd7cHJpbnQgJDR9J2AKKyAgaWYgWyB4IiRORVdWTUEiICE9IHgiIiBdO3RoZW4KKyAg
ICBvYmpjb3B5IC1TIC0tYWRqdXN0LXNlY3Rpb24tdm1hICRTRUNUSU9OPTB4JE5FV1ZNQSAkMTsK
KyAgICBleGl0IDA7CisgIGVsc2UKKyAgICBlY2hvICQwOiB1bmtub3duIEVycm9yIDE+JjIKKyAg
ICBleGl0IDE7ICMgbm8gY2x1ZQorICBmaQorZmkKK1sgLWYgYGRpcm5hbWUgJDFgL3N0cmlwbWFw
LiQkIF0gJiYgY2F0IHN0cmlwbWFwLiQkICYmIC0tb2JqZHVtcCAtLWhlYWRlcnMgJDEgJiYgZWNo
byBvYmpjb3B5IC1TIC0tYWRqdXN0LXNlY3Rpb24tdm1hIC5yc3JjPTB4TkVXVk1BICQxCg==
----=_33a2c7cf31032108aad679.MFSBCHJLHS
Content-Type: application/octet-stream; name=specs
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=specs
KmFzbToKCgoqYXNtX2ZpbmFsOgoKCipjcHA6CiUoY3BwX2NwdSkgJVtjcHBfY3B1XSAle3Bvc2l4
Oi1EX1BPU0lYX1NPVVJDRX0gJXtjb25zb2xlOi1JL3Vzci9sb2NhbC9pbmNsdWRlL3dpbjMyfSAl
e3dpbmRvd3M6LUkvdXNyL2xvY2FsL2luY2x1ZGUvd2luMzJ9CgoqY2MxOgoleyFtY3B1KjogJXtt
Mzg2Oi1tY3B1PWkzODYgLW1hcmNoPWkzODZ9ICV7bW5vLTQ4NjotbWNwdT1pMzg2IC1tYXJjaD1p
Mzg2fSAle200ODY6LW1jcHU9aTQ4NiAtbWFyY2g9aTQ4Nn0gJXttbm8tMzg2Oi1tY3B1PWk0ODYg
LW1hcmNoPWk0ODZ9ICV7bW5vLXBlbnRpdW06LW1jcHU9aTQ4NiAtbWFyY2g9aTQ4Nn0gJXttcGVu
dGl1bTotbWNwdT1wZW50aXVtfSAle21uby1wZW50aXVtcHJvOi1tY3B1PXBlbnRpdW19ICV7bXBl
bnRpdW1wcm86LW1jcHU9cGVudGl1bXByb319CgoqY2MxcGx1czoKCgoqZW5kZmlsZToKCgoqbGlu
azoKJXttd2luZG93czotLXN1YnN5c3RlbSB3aW5kb3dzfSAle3dpbmRvd3M6LS1zdWJzeXN0ZW0g
d2luZG93c30gJXtkbGw6LS1kbGwgLWUgX2RsbF9lbnRyeUAxMn0KCipsaWI6CiV7ZzotbHVzZXIz
MiAtbGdkaTMyIC1sYWR2YXBpMzIgLWxjb21kbGczMiAtbHdzb2NrMzIgLWxuZXRhcGkzMiAtbGcg
LWxtfSAleyFnOi1sY3lnd2lufSAle3dpbmRvd3M6LWx1c2VyMzIgLWxnZGkzMiAtbGNvbWRsZzMy
fSAle2NvbnNvbGU6LWx1c2VyMzJ9ICV7bXdpbmRvd3M6LWx1c2VyMzIgLWxnZGkzMiAtbGNvbWRs
ZzMyfSAtbGtlcm5lbDMyCgoqbGliZ2NjOgole2c6LWxjeWd3aW5fZ30gLWxnY2MKCipzdGFydGZp
bGU6CmNydDAlTyVzICV7ZGxsOi91c3IvbG9jYWwvbGliL2ZpeHVwLm99Cgoqc3dpdGNoZXNfbmVl
ZF9zcGFjZXM6CgoKKnNpZ25lZF9jaGFyOgole2Z1bnNpZ25lZC1jaGFyOi1EX19DSEFSX1VOU0lH
TkVEX199CgoqcHJlZGVmaW5lczoKLURpMzg2IC1EX1dJTjMyICAgLURQT1NJWCAtRF9fQ1lHV0lO
MzJfXyAtRFdJTk5UICAtRF9YODZfPTEgLURfX1NURENfXz0xICAtRF9fc3RkY2FsbD1fX2F0dHJp
YnV0ZV9fKChfX3N0ZGNhbGxfXykpICAgLURfX2NkZWNsPV9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpICAgLUFzeXN0ZW0od2lubnQpIC1BY3B1KGkzODYpIC1BbWFjaGluZShpMzg2KQoKKmNyb3Nz
X2NvbXBpbGU6CjEKCip2ZXJzaW9uOgpjeWdudXMtMi43LjItOTcwNDA0CgoqbXVsdGlsaWI6Ci4g
OwoKKm11bHRpbGliX2RlZmF1bHRzOgoKCiptdWx0aWxpYl9leHRyYToKCgoqbXVsdGlsaWJfbWF0
Y2hlczoKCgoqY3BwX2NwdToKLURpMzg2ICAtQXN5c3RlbSh1bml4KSAtQWNwdShpMzg2KSAtQW1h
Y2hpbmUoaTM4NikgJXttY3B1PWk0ODY6LURpNDg2fSAle200ODY6LURpNDg2fSAle21wZW50aXVt
Oi1EcGVudGl1bSAtRGk1ODZ9ICV7bWNwdT1wZW50aXVtOi1EcGVudGl1bSAtRGk1ODZ9ICV7bXBl
bnRpdW1wcm86LURwZW50aXVtcHJvIC1EaTY4Nn0gJXttY3B1PXBlbnRpdW1wcm86LURwZW50aXVt
cHJvIC1EaTY4Nn0KCg==
----=_33a2c7cf31032108aad679.MFSBCHJLHS--
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -