ECC Curves for certificate signing (wolfssl)

"Peter G. via Privoxy-users" <[email protected]> Sun, 26 Jan 2025 18:36:27 +0100 (CET)
Newsgroups gmane.comp.web.privoxy.user
Message-ID <[email protected]>
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---1463809792-111540969-1737912087=:9393
Content-Type: text/plain; CHARSET=US-ASCII; format=flowed
Content-ID: <[email protected]>

Hello Fabian, hello list!

First of all many thanks for your continued work on this brilliant 
program, and congrats on the 4.0.0. release.

Based on your comments on wolfssl performance in the Release Notes, as 
well as on the use of ECC vs RSA in the generated certificates somewhere 
else, I tried to switch to ECC in the wolfSSL build as well.

My very-very-alpha version of the resulting wolfssl.c is attached.

Please note that:

1. I am not at all a programmer, much less an experienced 
one, or one familiar with crypto. All I did is adapt the original 
wolfssl.c a bit.
It might be terribly done, and buggy as hell.
But the thing compiles, and does what it's supposed to do.

2. This is possibly using some relatively insecure settings for the 
certificate generation. In my use-case of privoxy that is acceptable 
(as it's a single-user, localhost-only setting).
For any testers, don't expose it to any real-world users before vetting 
it first.

Still I though I'd share, and would love to hear any comments you might 
have.

To build, either replace wolfssl.c, or edit GNUmakefile.in to use 
wolfssl_ecc.c as WOLFSSL_SRC.

Best Regards,
   Peter

-- 
"I do not think the way you think I think."
     -- Kai, last of the Brunnen G
---1463809792-111540969-1737912087=:9393
Content-Type: text/plain; name=wolfssl_ecc.c
Content-Transfer-Encoding: BASE64
Content-ID: <[email protected]>
Content-Description: 
Content-Disposition: attachment; filename=wolfssl_ecc.c

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KICoNCiAqIEZpbGUgICAgICAg
IDogICRTb3VyY2U6IC9jdnNyb290L2lqYnN3YS9jdXJyZW50L3dvbGZzc2wu
Yyx2ICQNCiAqDQogKiBQdXJwb3NlICAgICA6ICBGaWxlIHdpdGggVExTL1NT
TCBleHRlbnNpb24uIENvbnRhaW5zIG1ldGhvZHMgZm9yDQogKiAgICAgICAg
ICAgICAgICBjcmVhdGluZywgdXNpbmcgYW5kIGNsb3NpbmcgVExTL1NTTCBj
b25uZWN0aW9ucw0KICogICAgICAgICAgICAgICAgdXNpbmcgd29sZlNTTC4N
CiAqDQogKiBDb3B5cmlnaHQgICA6ICBDb3B5cmlnaHQgKEMpIDIwMTgtMjAy
NCBieSBGYWJpYW4gS2VpbCA8ZmtAZmFiaWFua2VpbC5kZT4NCiAqICAgICAg
ICAgICAgICAgIENvcHlyaWdodCAoQykgMjAyMCBNYXhpbSBBbnRvbm92IDxt
YW50b25vdkBnbWFpbC5jb20+DQogKiAgICAgICAgICAgICAgICBDb3B5cmln
aHQgKEMpIDIwMTcgVmFjbGF2IFN2ZWMuIEZJVCBDVlVULg0KICoNCiAqICAg
ICAgICAgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdA0KICogICAgICAgICAgICAgICAgYW5k
L29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l
cmFsDQogKiAgICAgICAgICAgICAgICBQdWJsaWMgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUNCiAqICAgICAgICAgICAgICAg
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdA0KICogICAgICAgICAgICAgICAgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLg0KICoNCiAqICAgICAgICAgICAgICAgIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwN
CiAqICAgICAgICAgICAgICAgIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlDQogKiAgICAgICAgICAgICAg
ICBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBDQogKiAgICAgICAgICAgICAgICBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KICogICAgICAgICAg
ICAgICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqICAgICAg
ICAgICAgICAgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaG91
bGQgYmUgaW5jbHVkZWQgd2l0aA0KICogICAgICAgICAgICAgICAgdGhpcyBm
aWxlLiAgSWYgbm90LCB5b3UgY2FuIHZpZXcgaXQgYXQNCiAqICAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbA0K
ICogICAgICAgICAgICAgICAgb3Igd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkNCiAqICAgICAgICAgICAgICAgIFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMw
NywgVVNBLg0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNp
bmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNs
dWRlIDxhc3NlcnQuaD4NCiNpbmNsdWRlICJjb25maWcuaCINCg0KI2luY2x1
ZGUgPHdvbGZzc2wvb3B0aW9ucy5oPg0KI2luY2x1ZGUgPHdvbGZzc2wvb3Bl
bnNzbC94NTA5djMuaD4NCiNpbmNsdWRlIDx3b2xmc3NsL29wZW5zc2wvcGVt
Lmg+DQojaW5jbHVkZSA8d29sZnNzbC9zc2wuaD4NCiNpbmNsdWRlIDx3b2xm
c3NsL3dvbGZjcnlwdC9jb2RpbmcuaD4NCiNpbmNsdWRlIDx3b2xmc3NsL3dv
bGZjcnlwdC9yc2EuaD4NCiNpbmNsdWRlIDx3b2xmc3NsL3dvbGZjcnlwdC9l
Y2MuaD4NCg0KI2luY2x1ZGUgInByb2plY3QuaCINCiNpbmNsdWRlICJtaXNj
dXRpbC5oIg0KI2luY2x1ZGUgImVycmxvZy5oIg0KI2luY2x1ZGUgImVuY29k
ZS5oIg0KI2luY2x1ZGUgImpjYy5oIg0KI2luY2x1ZGUgImpic29ja2V0cy5o
Ig0KI2luY2x1ZGUgInNzbC5oIg0KI2luY2x1ZGUgInNzbF9jb21tb24uaCIN
Cg0Kc3RhdGljIGludCBzc2xfY2VydGlmaWNhdGVfaXNfaW52YWxpZChjb25z
dCBjaGFyICpjZXJ0X2ZpbGUpOw0Kc3RhdGljIGludCBnZW5lcmF0ZV9ob3N0
X2NlcnRpZmljYXRlKHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCwNCiAgIGNv
bnN0IGNoYXIgKmNlcnRpZmljYXRlX3BhdGgsIGNvbnN0IGNoYXIgKmtleV9w
YXRoKTsNCnN0YXRpYyB2b2lkIGZyZWVfY2xpZW50X3NzbF9zdHJ1Y3R1cmVz
KHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCk7DQpzdGF0aWMgdm9pZCBmcmVl
X3NlcnZlcl9zc2xfc3RydWN0dXJlcyhzdHJ1Y3QgY2xpZW50X3N0YXRlICpj
c3ApOw0Kc3RhdGljIGludCBzc2xfc3RvcmVfY2VydChzdHJ1Y3QgY2xpZW50
X3N0YXRlICpjc3AsIFg1MDkgKmNydCk7DQpzdGF0aWMgdm9pZCBsb2dfc3Ns
X2Vycm9ycyhpbnQgZGVidWdsZXZlbCwgY29uc3QgY2hhciogZm10LCAuLi4p
IF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7DQoNCnN0
YXRpYyBpbnQgd29sZnNzbF9pbml0aWFsaXplZCA9IDA7DQoNCi8vaW50IGN1
cnZlSWQgPSBFQ0NfU0VDUDUyMVIxOw0Kc3RhdGljIGludCBjdXJ2ZUlkID0g
RUNDX1NFQ1AyMjRSMTsNCi8vaW50IGN1cnZlSWQgPSBXT0xGU1NMX0VDQ19T
RUNQMjI0UjE7DQovKg0KICogV2hldGhlciBvciBub3Qgc2hhcmluZyB0aGUg
Uk5HIGlzIHRocmVhZC1zYWZlDQogKiBkb2Vzbid0IG1hdHRlciBiZWNhdXNl
IHdlIG9ubHkgdXNlIGl0IHdpdGgNCiAqIHRoZSBjZXJ0aWZpY2F0ZV9tdXRl
eCBsb2NrZWQuDQogKi8NCnN0YXRpYyBXQ19STkcgd29sZnNzbF9ybmc7DQoN
CiNpZm5kZWYgV09MRlNTTF9BTFRfQ0VSVF9DSEFJTlMNCi8qDQogKiBXaXRo
b3V0IFdPTEZTU0xfQUxUX0NFUlRfQ0hBSU5TIHdvbGZTU0wgd2lsbCByZWpl
Y3QgdmFsaWQNCiAqIGNlcnRpZmljYXRlcyBpZiB0aGUgY2VydGlmaWNhdGUg
Y2hhaW4gY29udGFpbnMgQ0EgY2VydGlmaWNhdGVzDQogKiB0aGF0IGFyZSAi
b25seSIgc2lnbmVkIGJ5IHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzIGJ1dCBh
cmVuJ3QNCiAqIHRydXN0ZWQgQ0FzIHRoZW1zZWx2ZXMuDQogKi8NCiN3YXJu
aW5nIHdvbGZTU0wgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBXT0xGU1NM
X0FMVF9DRVJUX0NIQUlOUw0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICB3b2xmc3NsX2luaXQN
CiAqDQogKiBEZXNjcmlwdGlvbiA6ICBJbml0aWFsaXplcyB3b2xmU1NMIGxp
YnJhcnkgb25jZQ0KICoNCiAqIFBhcmFtZXRlcnMgIDogIE4vQQ0KICoNCiAq
IFJldHVybnMgICAgIDogIE4vQQ0KICoNCiAqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovDQpzdGF0aWMgdm9pZCB3b2xmc3NsX2luaXQodm9pZCkNCnsNCiAg
IGlmICh3b2xmc3NsX2luaXRpYWxpemVkID09IDApDQogICB7DQogICAgICBw
cml2b3h5X211dGV4X2xvY2soJnNzbF9pbml0X211dGV4KTsNCiAgICAgIGlm
ICh3b2xmc3NsX2luaXRpYWxpemVkID09IDApDQogICAgICB7DQogICAgICAg
ICBpZiAod29sZlNTTF9Jbml0KCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAg
ICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9GQVRB
TCwgIkZhaWxlZCB0byBpbml0aWFsaXplIHdvbGZTU0wiKTsNCiAgICAgICAg
IH0NCiAgICAgICAgIHdjX0luaXRSbmcoJndvbGZzc2xfcm5nKTsNCiAgICAg
ICAgIHdvbGZzc2xfaW5pdGlhbGl6ZWQgPSAxOw0KICAgICAgfQ0KICAgICAg
cHJpdm94eV9tdXRleF91bmxvY2soJnNzbF9pbml0X211dGV4KTsNCiAgIH0N
Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVu
Y3Rpb24gICAgOiAgaXNfc3NsX3BlbmRpbmcNCiAqDQogKiBEZXNjcmlwdGlv
biA6ICBUZXN0cyBpZiB0aGVyZSBhcmUgc29tZSB3YWl0aW5nIGRhdGEgb24g
c3NsIGNvbm5lY3Rpb24uDQogKiAgICAgICAgICAgICAgICBPbmx5IGNvbnNp
ZGVycyBkYXRhIHRoYXQgaGFzIGFjdHVhbGx5IGJlZW4gcmVjZWl2ZWQNCiAq
ICAgICAgICAgICAgICAgIGxvY2FsbHkgYW5kIGlnbm9yZXMgZGF0YSB0aGF0
IGlzIHN0aWxsIG9uIHRoZSBmbHkNCiAqICAgICAgICAgICAgICAgIG9yIGhh
cyBub3QgeWV0IGJlZW4gc2VudCBieSB0aGUgcmVtb3RlIGVuZC4NCiAqDQog
KiBQYXJhbWV0ZXJzICA6DQogKiAgICAgICAgICAxICA6ICBzc2xfYXR0ciA9
IFNTTCBjb250ZXh0IHRvIHRlc3QNCiAqDQogKiBSZXR1cm5zICAgICA6ICAg
MCA9PiBObyBkYXRhIGFyZSBwZW5kaW5nDQogKiAgICAgICAgICAgICAgICA+
MCA9PiBQZW5kaW5nIGRhdGEgbGVuZ3RoLiBYWFg6IHJlYWxseT8NCiAqDQog
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIHNpemVfdCBpc19z
c2xfcGVuZGluZyhzdHJ1Y3Qgc3NsX2F0dHIgKnNzbF9hdHRyKQ0Kew0KICAg
cmV0dXJuIChzaXplX3Qpd29sZlNTTF9wZW5kaW5nKHNzbF9hdHRyLT53b2xm
c3NsX2F0dHIuc3NsKTsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqDQogKg0KICogRnVuY3Rpb24gICAgOiAgc3NsX3NlbmRfZGF0YQ0KICoN
CiAqIERlc2NyaXB0aW9uIDogIFNlbmRzIHRoZSBjb250ZW50IG9mIGJ1ZiAo
Zm9yIG4gYnl0ZXMpIHRvIGdpdmVuIFNTTA0KICogICAgICAgICAgICAgICAg
Y29ubmVjdGlvbiBjb250ZXh0Lg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAq
ICAgICAgICAgIDEgIDogIHNzbF9hdHRyID0gU1NMIGNvbnRleHQgdG8gc2Vu
ZCBkYXRhIHRvDQogKiAgICAgICAgICAyICA6ICBidWYgPSBQb2ludGVyIHRv
IGRhdGEgdG8gYmUgc2VudA0KICogICAgICAgICAgMyAgOiAgbGVuID0gTGVu
Z3RoIG9mIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgU1NMIGNvbnRleHQNCiAq
DQogKiBSZXR1cm5zICAgICA6ICBMZW5ndGggb2Ygc2VudCBkYXRhIG9yIG5l
Z2F0aXZlIHZhbHVlIG9uIGVycm9yLg0KICoNCiAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovDQpleHRlcm4gaW50IHNzbF9zZW5kX2RhdGEoc3RydWN0IHNz
bF9hdHRyICpzc2xfYXR0ciwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBz
aXplX3QgbGVuKQ0Kew0KICAgV09MRlNTTCAqc3NsOw0KICAgaW50IHJldCA9
IDA7DQogICBpbnQgcG9zID0gMDsgLyogUG9zaXRpb24gb2YgdW5zZW50IHBh
cnQgaW4gYnVmZmVyICovDQogICBpbnQgZmQgPSAtMTsNCg0KICAgaWYgKGxl
biA9PSAwKQ0KICAgew0KICAgICAgcmV0dXJuIDA7DQogICB9DQoNCiAgIHdv
bGZTU0xfRVJSX2NsZWFyX2Vycm9yKCk7DQoNCiAgIHNzbCA9IHNzbF9hdHRy
LT53b2xmc3NsX2F0dHIuc3NsOw0KICAgZmQgPSB3b2xmU1NMX2dldF9mZChz
c2wpOw0KDQogICB3aGlsZSAocG9zIDwgbGVuKQ0KICAgew0KICAgICAgaW50
IHNlbmRfbGVuID0gKGludClsZW4gLSBwb3M7DQoNCiAgICAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfV1JJVElORywgIlRMUyBvbiBzb2NrZXQgJWQ6ICVOIiwN
CiAgICAgICAgIGZkLCBzZW5kX2xlbiwgYnVmK3Bvcyk7DQoNCiAgICAgIHJl
dCA9IHdvbGZTU0xfd3JpdGUoc3NsLCBidWYrcG9zLCBzZW5kX2xlbik7DQog
ICAgICBpZiAocmV0IDw9IDApDQogICAgICB7DQogICAgICAgICBsb2dfc3Ns
X2Vycm9ycyhMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAgICAiU2VuZGlu
ZyBkYXRhIG9uIHNvY2tldCAlZCBvdmVyIFRMUyBmYWlsZWQiLCBmZCk7DQog
ICAgICAgICByZXR1cm4gLTE7DQogICAgICB9DQoNCiAgICAgIC8qIEFkZGlu
ZyBjb3VudCBvZiBzZW50IGJ5dGVzIHRvIHBvc2l0aW9uIGluIGJ1ZmZlciAq
Lw0KICAgICAgcG9zID0gcG9zICsgcmV0Ow0KICAgfQ0KDQogICByZXR1cm4g
KGludClsZW47DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
ICoNCiAqIEZ1bmN0aW9uICAgIDogIHNzbF9yZWN2X2RhdGENCiAqDQogKiBE
ZXNjcmlwdGlvbiA6ICBSZWNlaXZlcyBkYXRhIGZyb20gZ2l2ZW4gU1NMIGNv
bnRleHQgYW5kIHB1dHMNCiAqICAgICAgICAgICAgICAgIGl0IGludG8gYnVm
ZmVyLg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDog
IHNzbF9hdHRyID0gU1NMIGNvbnRleHQgdG8gcmVjZWl2ZSBkYXRhIGZyb20N
CiAqICAgICAgICAgIDIgIDogIGJ1ZiA9IFBvaW50ZXIgdG8gYnVmZmVyIHdo
ZXJlIGRhdGEgd2lsbCBiZSB3cml0dGVuDQogKiAgICAgICAgICAzICA6ICBt
YXhfbGVuZ3RoID0gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZA0K
ICoNCiAqIFJldHVybnMgICAgIDogIE51bWJlciBvZiBieXRlcyByZWFkLCAw
IGZvciBFT0YsIG9yIC0xDQogKiAgICAgICAgICAgICAgICBvbiBlcnJvci4N
CiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KZXh0ZXJuIGludCBz
c2xfcmVjdl9kYXRhKHN0cnVjdCBzc2xfYXR0ciAqc3NsX2F0dHIsIHVuc2ln
bmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW5ndGgpDQp7DQogICBXT0xG
U1NMICpzc2w7DQogICBpbnQgcmV0ID0gMDsNCiAgIGludCBmZCA9IC0xOw0K
DQogICBtZW1zZXQoYnVmLCAwLCBtYXhfbGVuZ3RoKTsNCiAgIHdvbGZTU0xf
RVJSX2NsZWFyX2Vycm9yKCk7DQoNCiAgIC8qDQogICAgKiBSZWNlaXZpbmcg
ZGF0YSBmcm9tIFNTTCBjb250ZXh0IGludG8gYnVmZmVyDQogICAgKi8NCiAg
IHNzbCA9IHNzbF9hdHRyLT53b2xmc3NsX2F0dHIuc3NsOw0KICAgcmV0ID0g
d29sZlNTTF9yZWFkKHNzbCwgYnVmLCAoaW50KW1heF9sZW5ndGgpOw0KICAg
ZmQgPSB3b2xmU1NMX2dldF9mZChzc2wpOw0KDQogICBpZiAocmV0IDwgMCkN
CiAgIHsNCiAgICAgIGxvZ19zc2xfZXJyb3JzKExPR19MRVZFTF9FUlJPUiwN
CiAgICAgICAgICJSZWNlaXZpbmcgZGF0YSBvbiBzb2NrZXQgJWQgb3ZlciBU
TFMgZmFpbGVkIiwgZmQpOw0KDQogICAgICByZXR1cm4gLTE7DQogICB9DQoN
CiAgIGxvZ19lcnJvcihMT0dfTEVWRUxfUkVDRUlWRUQsICJUTFMgZnJvbSBz
b2NrZXQgJWQ6ICVOIiwNCiAgICAgIGZkLCByZXQsIGJ1Zik7DQoNCiAgIHJl
dHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
ICoNCiAqIEZ1bmN0aW9uICAgIDogIGdldF9wdWJsaWNfa2V5X3NpemVfc3Ry
aW5nDQogKg0KICogRGVzY3JpcHRpb24gOiBUcmFuc2xhdGVzIGEgcHVibGlj
IGtleSB0eXBlIHRvIGEgc3RyaW5nLg0KICoNCiAqIFBhcmFtZXRlcnMgIDoN
CiAqICAgICAgICAgIDEgIDogIGtleV90eXBlID0gVGhlIHB1YmxpYyBrZXkg
dHlwZS4NCiAqDQogKiBSZXR1cm5zICAgICA6ICBTdHJpbmcgY29udGFpbmlu
ZyB0aGUgdHJhbnNsYXRlZCBrZXkgc2l6ZS4NCiAqDQogKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLw0Kc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wdWJsaWNf
a2V5X3NpemVfc3RyaW5nKGludCBrZXlfdHlwZSkNCnsNCiAgIHN3aXRjaCAo
a2V5X3R5cGUpDQogICB7DQogICAgICBjYXNlIEVWUF9QS0VZX1JTQToNCiAg
ICAgICAgIHJldHVybiAiUlNBIGtleSBzaXplIjsNCiAgICAgIGNhc2UgRVZQ
X1BLRVlfRFNBOg0KICAgICAgICAgcmV0dXJuICJEU0Ega2V5IHNpemUiOw0K
ICAgICAgY2FzZSBFVlBfUEtFWV9FQzoNCiAgICAgICAgIHJldHVybiAiRUMg
a2V5IHNpemUiOw0KICAgICAgZGVmYXVsdDoNCiAgICAgICAgIHJldHVybiAi
bm9uLVJTQS9EU0EvRUMga2V5IHNpemUiOw0KICAgfQ0KfQ0KDQoNCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBz
c2xfc3RvcmVfY2VydA0KICoNCiAqIERlc2NyaXB0aW9uIDogVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBjZXJ0aWZpY2F0ZSBpbiB0
aGUNCiAqICAgICAgICAgICAgICAgc2VydmVyJ3MgY2VydGlmaWNhdGUgdHJ1
c3RlZCBjaGFpbiBhbmQgcHJlcGFyZXMNCiAqICAgICAgICAgICAgICAgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGNlcnRpZmljYXRlLiBUaGUgaW5mb3JtYXRp
b24gY2FuDQogKiAgICAgICAgICAgICAgIGJlIHVzZWQgdG8gaW5mb3JtIHRo
ZSB1c2VyIGFib3V0IGludmFsaWQgY2VydGlmaWNhdGVzLg0KICoNCiAqIFBh
cmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNzcCA9IEN1cnJlbnQg
Y2xpZW50IHN0YXRlIChidWZmZXJzLCBoZWFkZXJzLCBldGMuLi4pDQogKiAg
ICAgICAgICAyICA6ICBjZXJ0ID0gY2VydGlmaWNhdGUgZnJvbSB0cnVzdGVk
IGNoYWluDQogKg0KICogUmV0dXJucyAgICAgOiAgMCBvbiBzdWNjZXNzIGFu
ZCBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcg0KICoNCiAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovDQpzdGF0aWMgaW50IHNzbF9zdG9yZV9jZXJ0KHN0cnVj
dCBjbGllbnRfc3RhdGUgKmNzcCwgWDUwOSAqY2VydCkNCnsNCiAgIGxvbmcg
bGVuOw0KICAgc3RydWN0IGNlcnRzX2NoYWluICpsYXN0ID0gJihjc3AtPnNl
cnZlcl9jZXJ0c19jaGFpbik7DQogICBpbnQgcmV0ID0gMDsNCiAgIFdPTEZT
U0xfQklPICpiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsNCiAgIFdPTEZT
U0xfRVZQX1BLRVkgKnBrZXkgPSBOVUxMOw0KICAgY2hhciAqYmlvX21lbV9k
YXRhID0gTlVMTDsNCiAgIGNoYXIgKmVuY29kZWRfdGV4dDsNCiAgIGxvbmcg
bDsNCiAgIHVuc2lnbmVkIGNoYXIgc2VyaWFsX251bWJlclszMl07DQogICBp
bnQgIHNlcmlhbF9udW1iZXJfc2l6ZSA9IHNpemVvZihzZXJpYWxfbnVtYmVy
KTsNCiAgIFdPTEZTU0xfWDUwOV9OQU1FICppc3N1ZXJfbmFtZTsNCiAgIFdP
TEZTU0xfWDUwOV9OQU1FICpzdWJqZWN0X25hbWU7DQogICBjaGFyICpzdWJq
ZWN0X2FsdGVybmF0aXZlX25hbWU7DQogICBpbnQgbG9jOw0KICAgaW50IHNh
bl9wcmVmaXhfcHJpbnRlZCA9IDA7DQoNCiAgIGlmICghYmlvKQ0KICAgew0K
ICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkJJT19uZXcoKSBm
YWlsZWQuIik7DQogICAgICByZXR1cm4gLTE7DQogICB9DQoNCiAgIC8qDQog
ICAgKiBTZWFyY2hpbmcgZm9yIGxhc3QgaXRlbSBpbiBjZXJ0aWZpY2F0ZXMg
bGlua2VkIGxpc3QNCiAgICAqLw0KICAgd2hpbGUgKGxhc3QtPm5leHQgIT0g
TlVMTCkNCiAgIHsNCiAgICAgIGxhc3QgPSBsYXN0LT5uZXh0Ow0KICAgfQ0K
DQogICAvKg0KICAgICogUHJlcGFyaW5nIG5leHQgaXRlbSBpbiBsaW5rZWQg
bGlzdCBmb3IgbmV4dCBjZXJ0aWZpY2F0ZQ0KICAgICovDQogICBsYXN0LT5u
ZXh0ID0gemFsbG9jX29yX2RpZShzaXplb2Yoc3RydWN0IGNlcnRzX2NoYWlu
KSk7DQoNCiAgIC8qDQogICAgKiBTYXZpbmcgY2VydGlmaWNhdGUgZmlsZSBp
bnRvIGJ1ZmZlcg0KICAgICovDQogICBpZiAod29sZlNTTF9QRU1fd3JpdGVf
YmlvX1g1MDkoYmlvLCBjZXJ0KSAhPSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7
DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAid29sZlNTTF9Q
RU1fd3JpdGVfYmlvX1g1MDkoKSBmYWlsZWQuIik7DQogICAgICByZXQgPSAt
MTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgbGVuID0gd29sZlNT
TF9CSU9fZ2V0X21lbV9kYXRhKGJpbywgJmJpb19tZW1fZGF0YSk7DQogICBs
YXN0LT5maWxlX2J1ZiA9IG1hbGxvYygoc2l6ZV90KWxlbiArIDEpOw0KICAg
aWYgKGxhc3QtPmZpbGVfYnVmID09IE5VTEwpDQogICB7DQogICAgICBsb2df
ZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIkZhaWxlZCB0byBh
bGxvY2F0ZSAlbHUgYnl0ZXMgdG8gc3RvcmUgdGhlIFg1MDkgUEVNIGNlcnRp
ZmljYXRlLiIsDQogICAgICAgICBsZW4gKyAxKTsNCiAgICAgIHJldCA9IC0x
Ow0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICBzdHJuY3B5KGxhc3Qt
PmZpbGVfYnVmLCBiaW9fbWVtX2RhdGEsIChzaXplX3QpbGVuKTsNCiAgIGxh
c3QtPmZpbGVfYnVmW2xlbl0gPSAnXDAnOw0KICAgd29sZlNTTF9CSU9fZnJl
ZShiaW8pOw0KICAgYmlvID0gd29sZlNTTF9CSU9fbmV3KHdvbGZTU0xfQklP
X3NfbWVtKCkpOw0KICAgaWYgKCFiaW8pDQogICB7DQogICAgICBsb2dfZXJy
b3IoTE9HX0xFVkVMX0VSUk9SLCAid29sZlNTTF9CSU9fbmV3KCkgZmFpbGVk
LiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9
DQoNCiAgIC8qDQogICAgKiBTYXZpbmcgY2VydGlmaWNhdGUgaW5mb3JtYXRp
b24gaW50byBidWZmZXINCiAgICAqLw0KICAgbCA9IHdvbGZTU0xfWDUwOV9n
ZXRfdmVyc2lvbihjZXJ0KTsNCiAgIGlmIChsID49IDAgJiYgbCA8PSAyKQ0K
ICAgew0KICAgICAgaWYgKHdvbGZTU0xfQklPX3ByaW50ZihiaW8sICJjZXJ0
LiB2ZXJzaW9uICAgICA6ICVsZFxuIiwgbCArIDEpIDw9IDApDQogICAgICB7
DQogICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAid29sZlNT
TF9CSU9fcHJpbnRmKCkgZm9yIHZlcnNpb24gZmFpbGVkLiIpOw0KICAgICAg
ICAgcmV0ID0gLTE7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQog
ICB9DQogICBlbHNlDQogICB7DQogICAgICBpZiAod29sZlNTTF9CSU9fcHJp
bnRmKGJpbywgImNlcnQuIHZlcnNpb24gICAgIDogVW5rbm93biAoJWxkKVxu
IiwgbCkgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0df
TEVWRUxfRVJST1IsICJ3b2xmU1NMX0JJT19wcmludGYoKSBmb3IgdmVyc2lv
biBmYWlsZWQuIik7DQogICAgICAgICByZXQgPSAtMTsNCiAgICAgICAgIGdv
dG8gZXhpdDsNCiAgICAgIH0NCiAgIH0NCg0KICAgaWYgKHdvbGZTU0xfQklP
X3B1dHMoYmlvLCAic2VyaWFsIG51bWJlciAgICAgOiAiKSA8PSAwKQ0KICAg
ew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAg
ICJ3b2xmU1NMX0JJT19wdXRzKCkgZm9yIHNlcmlhbCBudW1iZXIgZmFpbGVk
LiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9
DQogICBpZiAod29sZlNTTF9YNTA5X2dldF9zZXJpYWxfbnVtYmVyKGNlcnQs
IHNlcmlhbF9udW1iZXIsICZzZXJpYWxfbnVtYmVyX3NpemUpDQogICAgICAh
PSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9H
X0xFVkVMX0VSUk9SLCAid29sZlNTTF9YNTA5X2dldF9zZXJpYWxfbnVtYmVy
KCkgZmFpbGVkLiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4
aXQ7DQogICB9DQoNCiAgIGlmIChzZXJpYWxfbnVtYmVyX3NpemUgPD0gKGlu
dClzaXplb2YoY2hhcikpDQogICB7DQogICAgICBpZiAod29sZlNTTF9CSU9f
cHJpbnRmKGJpbywgIiVsdSAoMHglbHgpXG4iLCBzZXJpYWxfbnVtYmVyWzBd
LA0KICAgICAgICAgICAgc2VyaWFsX251bWJlclswXSkgPD0gMCkNCiAgICAg
IHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAg
ICAgICAgICAid29sZlNTTF9CSU9fcHJpbnRmKCkgZm9yIHNlcmlhbCBudW1i
ZXIgYXMgc2luZ2xlIGJ5dGUgZmFpbGVkLiIpOw0KICAgICAgICAgcmV0ID0g
LTE7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQogICB9DQogICBl
bHNlDQogICB7DQogICAgICBpbnQgaTsNCiAgICAgIGZvciAoaSA9IDA7IGkg
PCBzZXJpYWxfbnVtYmVyX3NpemU7IGkrKykNCiAgICAgIHsNCiAgICAgICAg
IGlmICh3b2xmU1NMX0JJT19wcmludGYoYmlvLCAiJTAyeCVjIiwgc2VyaWFs
X251bWJlcltpXSwNCiAgICAgICAgICAgICAgICgoaSArIDEgPT0gc2VyaWFs
X251bWJlcl9zaXplKSA/ICdcbicgOiAnOicpKSA8PSAwKQ0KICAgICAgICAg
ew0KICAgICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAg
ICAgICAgICAgICAgICJ3b2xmU1NMX0JJT19wcmludGYoKSBmb3Igc2VyaWFs
IG51bWJlciBieXRlcyBmYWlsZWQuIik7DQogICAgICAgICAgICByZXQgPSAt
MTsNCiAgICAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAgICAgIH0NCiAgICAg
IH0NCiAgIH0NCg0KICAgaWYgKHdvbGZTU0xfQklPX3B1dHMoYmlvLCAiaXNz
dWVyIG5hbWUgICAgICAgOiAiKSA8PSAwKQ0KICAgew0KICAgICAgbG9nX2Vy
cm9yKExPR19MRVZFTF9FUlJPUiwgIndvbGZTU0xfQklPX3B1dHMoKSBmb3Ig
aXNzdWVyIGZhaWxlZC4iKTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290
byBleGl0Ow0KICAgfQ0KICAgaXNzdWVyX25hbWUgPSB3b2xmU1NMX1g1MDlf
Z2V0X2lzc3Vlcl9uYW1lKGNlcnQpOw0KICAgaWYgKHdvbGZTU0xfWDUwOV9O
QU1FX2dldF9zeihpc3N1ZXJfbmFtZSkgPD0gMCkNCiAgIHsNCiAgICAgIGlm
ICh3b2xmU1NMX0JJT19wdXRzKGJpbywgIm5vbmUiKSA8PSAwKQ0KICAgICAg
ew0KICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg
ICAgICAgICJ3b2xmU1NMX0JJT19wdXRzKCkgZm9yIGlzc3VlciBuYW1lIGZh
aWxlZC4iKTsNCiAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAgZ290byBl
eGl0Ow0KICAgICAgfQ0KICAgfQ0KICAgZWxzZSBpZiAod29sZlNTTF9YNTA5
X05BTUVfcHJpbnRfZXgoYmlvLCBpc3N1ZXJfbmFtZSwgMCwgMCkgPCAwKQ0K
ICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg
ICAgICJ3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leCgpIGZvciBpc3N1ZXIg
ZmFpbGVkLiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7
DQogICB9DQoNCiAgIGlmICh3b2xmU1NMX0JJT19wdXRzKGJpbywgIlxuc3Vi
amVjdCBuYW1lICAgICAgOiAiKSA8PSAwKQ0KICAgew0KICAgICAgbG9nX2Vy
cm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJ3b2xmU1NMX0JJT19w
dXRzKCkgZm9yIHN1YmplY3QgbmFtZSBmYWlsZWQuIik7DQogICAgICByZXQg
PSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCiAgIHN1YmplY3RfbmFt
ZSA9IHdvbGZTU0xfWDUwOV9nZXRfc3ViamVjdF9uYW1lKGNlcnQpOw0KICAg
aWYgKHdvbGZTU0xfWDUwOV9OQU1FX2dldF9zeihzdWJqZWN0X25hbWUpIDw9
IDApDQogICB7DQogICAgICBpZiAod29sZlNTTF9CSU9fcHV0cyhiaW8sICJu
b25lIikgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0df
TEVWRUxfRVJST1IsDQogICAgICAgICAgICAid29sZlNTTF9CSU9fcHV0cygp
IGZvciBzdWJqZWN0IG5hbWUgZmFpbGVkLiIpOw0KICAgICAgICAgcmV0ID0g
LTE7DQogICAgICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQogICB9DQogICBl
bHNlIGlmICh3b2xmU1NMX1g1MDlfTkFNRV9wcmludF9leChiaW8sIHN1Ympl
Y3RfbmFtZSwgMCwgMCkgPCAwKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExP
R19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJ3b2xmU1NMX1g1MDlfTkFNRV9w
cmludF9leCgpIGZvciBzdWJqZWN0IG5hbWUgZmFpbGVkLiIpOw0KICAgICAg
cmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIGlmICh3
b2xmU1NMX0JJT19wdXRzKGJpbywgIlxuaXNzdWVkICBvbiAgICAgICAgOiAi
KSA8PSAwKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJP
UiwNCiAgICAgICAgICJ3b2xmU1NMX0JJT19wdXRzKCkgZm9yIGlzc3VlZCBv
biBmYWlsZWQuIik7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhp
dDsNCiAgIH0NCiAgIGlmICghd29sZlNTTF9BU04xX1RJTUVfcHJpbnQoYmlv
LCB3b2xmU1NMX1g1MDlfZ2V0X25vdEJlZm9yZShjZXJ0KSkpDQogICB7DQog
ICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIndv
bGZTU0xfQVNOMV9USU1FX3ByaW50KCkgZm9yIGlzc3VlZCBvbiBmYWlsZWQu
Iik7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0N
Cg0KICAgaWYgKHdvbGZTU0xfQklPX3B1dHMoYmlvLCAiXG5leHBpcmVzIG9u
ICAgICAgICA6ICIpIDw9IDApDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9H
X0xFVkVMX0VSUk9SLA0KICAgICAgICAgIndvbGZTU0xfQklPX3B1dHMoKSBm
b3IgZXhwaXJlcyBvbiBmYWlsZWQuIik7DQogICAgICByZXQgPSAtMTsNCiAg
ICAgIGdvdG8gZXhpdDsNCiAgIH0NCiAgIGlmICghd29sZlNTTF9BU04xX1RJ
TUVfcHJpbnQoYmlvLCB3b2xmU1NMX1g1MDlfZ2V0X25vdEFmdGVyKGNlcnQp
KSkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQog
ICAgICAgICAid29sZlNTTF9BU04xX1RJTUVfcHJpbnQoKSBmb3IgZXhwaXJl
cyBvbiBmYWlsZWQuIik7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8g
ZXhpdDsNCiAgIH0NCg0KICAgLyogWFhYOiBTaG93IHNpZ25hdHVyZSBhbGdv
cml0aG0gKi8NCg0KICAgcGtleSA9IHdvbGZTU0xfWDUwOV9nZXRfcHVia2V5
KGNlcnQpOw0KICAgaWYgKCFwa2V5KQ0KICAgew0KICAgICAgbG9nX2Vycm9y
KExPR19MRVZFTF9FUlJPUiwgIndvbGZTU0xfWDUwOV9nZXRfcHVia2V5KCkg
ZmFpbGVkLiIpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7
DQogICB9DQogICByZXQgPSB3b2xmU1NMX0JJT19wcmludGYoYmlvLCAiXG4l
LTE4czogJWQgYml0cyIsDQogICAgICBnZXRfcHVibGljX2tleV9zaXplX3N0
cmluZyh3b2xmU1NMX0VWUF9QS0VZX2Jhc2VfaWQocGtleSkpLA0KICAgICAg
d29sZlNTTF9FVlBfUEtFWV9iaXRzKHBrZXkpKTsNCiAgIGlmIChyZXQgPD0g
MCkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQog
ICAgICAgICAid29sZlNTTF9CSU9fcHJpbnRmKCkgZm9yIGtleSBzaXplIGZh
aWxlZC4iKTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0K
ICAgfQ0KDQogICAvKg0KICAgICogWFhYOiBTaG93IGNlcnQgdXNhZ2UsIGV0
Yy4NCiAgICAqLw0KICAgbG9jID0gd29sZlNTTF9YNTA5X2dldF9leHRfYnlf
TklEKGNlcnQsIE5JRF9iYXNpY19jb25zdHJhaW50cywgLTEpOw0KICAgaWYg
KGxvYyAhPSAtMSkNCiAgIHsNCiAgICAgIFdPTEZTU0xfWDUwOV9FWFRFTlNJ
T04gKmV4ID0gd29sZlNTTF9YNTA5X2dldF9leHQoY2VydCwgbG9jKTsNCiAg
ICAgIGlmIChCSU9fcHV0cyhiaW8sICJcbmJhc2ljIGNvbnN0cmFpbnRzIDog
IikgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihMT0dfTEVW
RUxfRVJST1IsDQogICAgICAgICAgICAiQklPX3ByaW50ZigpIGZvciBiYXNp
YyBjb25zdHJhaW50cyBmYWlsZWQuIik7DQogICAgICAgICByZXQgPSAtMTsN
CiAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAgIH0NCiAgICAgIGlmICghd29s
ZlNTTF9YNTA5VjNfRVhUX3ByaW50KGJpbywgZXgsIDAsIDApKQ0KICAgICAg
ew0KICAgICAgICAgaWYgKCF3b2xmU1NMX0FTTjFfU1RSSU5HX3ByaW50X2V4
KGJpbywNCiAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9FWFRFTlNJT05f
Z2V0X2RhdGEoZXgpLA0KICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX1JG
QzIyNTMpKQ0KICAgICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9yKExP
R19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAgICAgICJ3b2xmU1NMX0FTTjFf
U1RSSU5HX3ByaW50X2V4KCkgZm9yIGJhc2ljIGNvbnN0cmFpbnRzIGZhaWxl
ZC4iKTsNCiAgICAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAgICAgZ290
byBleGl0Ow0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KDQogICB3aGls
ZSAoKHN1YmplY3RfYWx0ZXJuYXRpdmVfbmFtZSA9IHdvbGZTU0xfWDUwOV9n
ZXRfbmV4dF9hbHRuYW1lKGNlcnQpKQ0KICAgICAgIT0gTlVMTCkNCiAgIHsN
CiAgICAgIGlmIChzYW5fcHJlZml4X3ByaW50ZWQgPT0gMCkNCiAgICAgIHsN
CiAgICAgICAgIHJldCA9IHdvbGZTU0xfQklPX3ByaW50ZihiaW8sICJcbnN1
YmplY3QgYWx0IG5hbWUgIDogIik7DQogICAgICAgICBzYW5fcHJlZml4X3By
aW50ZWQgPSAxOw0KICAgICAgfQ0KICAgICAgaWYgKHJldCA+IDApDQogICAg
ICB7DQogICAgICAgICByZXQgPSB3b2xmU1NMX0JJT19wcmludGYoYmlvLCAi
JXMgIiwgc3ViamVjdF9hbHRlcm5hdGl2ZV9uYW1lKTsNCiAgICAgIH0NCiAg
ICAgIGlmIChyZXQgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAgICAid29sZlNTTF9CSU9f
cHJpbnRmKCkgZm9yIFN1YmplY3QgQWx0ZXJuYXRpdmUgTmFtZSBmYWlsZWQu
Iik7DQogICAgICAgICByZXQgPSAtMTsNCiAgICAgICAgIGdvdG8gZXhpdDsN
CiAgICAgIH0NCiAgIH0NCg0KI2lmIDANCiAgIC8qDQogICAgKiBUaGlzIGNv
ZGUgY29tcGlsZXMgYnV0IGRvZXMgbm90IHdvcmsgYmVjYXVzZSB3b2xmU1NM
DQogICAgKiBzZXRzIE5JRF9uZXRzY2FwZV9jZXJ0X3R5cGUgdG8gTklEX3Vu
ZGVmLg0KICAgICovDQogICBsb2MgPSB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9i
eV9OSUQoY2VydCwgTklEX25ldHNjYXBlX2NlcnRfdHlwZSwgLTEpOw0KICAg
aWYgKGxvYyAhPSAtMSkNCiAgIHsNCiAgICAgIFdPTEZTU0xfWDUwOV9FWFRF
TlNJT04gKmV4ID0gd29sZlNTTF9YNTA5X2dldF9leHQoY2VydCwgbG9jKTsN
CiAgICAgIGlmICh3b2xmU1NMX0JJT19wdXRzKGJpbywgIlxuY2VydC4gdHlw
ZSAgICAgICAgOiAiKSA8PSAwKQ0KICAgICAgew0KICAgICAgICAgbG9nX2Vy
cm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAgICJ3b2xmU1NMX0JJ
T19wcmludGYoKSBmb3IgY2VydCB0eXBlIGZhaWxlZC4iKTsNCiAgICAgICAg
IHJldCA9IC0xOw0KICAgICAgICAgZ290byBleGl0Ow0KICAgICAgfQ0KICAg
ICAgaWYgKCF3b2xmU1NMX1g1MDlWM19FWFRfcHJpbnQoYmlvLCBleCwgMCwg
MCkpDQogICAgICB7DQogICAgICAgICBpZiAoIXdvbGZTU0xfQVNOMV9TVFJJ
TkdfcHJpbnRfZXgoYmlvLA0KICAgICAgICAgICAgICAgd29sZlNTTF9YNTA5
X0VYVEVOU0lPTl9nZXRfZGF0YShleCksDQogICAgICAgICAgICAgICBBU04x
X1NUUkZMR1NfUkZDMjI1MykpDQogICAgICAgICB7DQogICAgICAgICAgICBs
b2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgICAgICAgIndv
bGZTU0xfQVNOMV9TVFJJTkdfcHJpbnRfZXgoKSBmb3IgY2VydCB0eXBlIGZh
aWxlZC4iKTsNCiAgICAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAgICAg
Z290byBleGl0Ow0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KI2VuZGlm
DQoNCiNpZiAwDQogICAvKg0KICAgICogVGhpcyBjb2RlIGNvbXBpbGVzIGJ1
dCBkb2VzIG5vdCB3b3JrLiB3b2xmU1NMX09CSl9vYmoybmlkKCkNCiAgICAq
IHRyaWdnZXJzIGEgJ1g1MDlWM19FWFRfcHJpbnQgbm90IHlldCBpbXBsZW1l
bnRlZCBmb3IgZXh0IHR5cGUnIG1lc3NhZ2UuDQogICAgICovDQogICBsb2Mg
PSB3b2xmU1NMX1g1MDlfZ2V0X2V4dF9ieV9OSUQoY2VydCwgTklEX2tleV91
c2FnZSwgLTEpOw0KICAgaWYgKGxvYyAhPSAtMSkNCiAgIHsNCiAgICAgIFdP
TEZTU0xfWDUwOV9FWFRFTlNJT04gKmV4dGVuc2lvbiA9IHdvbGZTU0xfWDUw
OV9nZXRfZXh0KGNlcnQsIGxvYyk7DQogICAgICBpZiAoQklPX3B1dHMoYmlv
LCAiXG5rZXkgdXNhZ2UgICAgICAgICA6ICIpIDw9IDApDQogICAgICB7DQog
ICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAg
ICAgIndvbGZTU0xfQklPX3ByaW50ZigpIGZvciBrZXkgdXNhZ2UgZmFpbGVk
LiIpOw0KICAgICAgICAgcmV0ID0gLTE7DQogICAgICAgICBnb3RvIGV4aXQ7
DQogICAgICB9DQogICAgICBpZiAoIXdvbGZTU0xfWDUwOVYzX0VYVF9wcmlu
dChiaW8sIGV4dGVuc2lvbiwgMCwgMCkpDQogICAgICB7DQogICAgICAgICBp
ZiAoIXdvbGZTU0xfQVNOMV9TVFJJTkdfcHJpbnRfZXgoYmlvLA0KICAgICAg
ICAgICAgICAgd29sZlNTTF9YNTA5X0VYVEVOU0lPTl9nZXRfZGF0YShleHRl
bnNpb24pLA0KICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdTX1JGQzIyNTMp
KQ0KICAgICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZF
TF9FUlJPUiwNCiAgICAgICAgICAgICAgICJ3b2xmU1NMX0FTTjFfU1RSSU5H
X3ByaW50X2V4KCkgZm9yIGtleSB1c2FnZSBmYWlsZWQuIik7DQogICAgICAg
ICAgICByZXQgPSAtMTsNCiAgICAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAg
ICAgIH0NCiAgICAgIH0NCiAgIH0NCiNlbmRpZg0KDQojaWYgMA0KICAgLyoN
CiAgICAqIFRoaXMgY29tcGlsZXMgYnV0IGRvZXNuJ3Qgd29yay4gd29sZlNT
TF9YNTA5X2V4dF9pc1NldF9ieV9OSUQoKQ0KICAgICogY29tcGxhaW5zIGFi
b3V0ICJOSUQgbm90IGluIHRhYmxlIi4NCiAgICAqLw0KICAgbG9jID0gd29s
ZlNTTF9YNTA5X2dldF9leHRfYnlfTklEKGNlcnQsIE5JRF9leHRfa2V5X3Vz
YWdlLCAtMSk7DQogICBpZiAobG9jICE9IC0xKSB7DQogICAgICBXT0xGU1NM
X1g1MDlfRVhURU5TSU9OICpleCA9IHdvbGZTU0xfWDUwOV9nZXRfZXh0KGNl
cnQsIGxvYyk7DQogICAgICBpZiAod29sZlNTTF9CSU9fcHV0cyhiaW8sICJc
bmV4dCBrZXkgdXNhZ2UgICAgIDogIikgPD0gMCkNCiAgICAgIHsNCiAgICAg
ICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAgICAi
d29sZlNTTF9CSU9fcHJpbnRmKCkgZm9yIGV4dCBrZXkgdXNhZ2UgZmFpbGVk
LiIpOw0KICAgICAgICAgcmV0ID0gLTE7DQogICAgICAgICBnb3RvIGV4aXQ7
DQogICAgICB9DQogICAgICBpZiAoIXdvbGZTU0xfWDUwOVYzX0VYVF9wcmlu
dChiaW8sIGV4LCAwLCAwKSkNCiAgICAgIHsNCiAgICAgICAgIGlmICghd29s
ZlNTTF9BU04xX1NUUklOR19wcmludF9leChiaW8sDQogICAgICAgICAgICAg
ICB3b2xmU1NMX1g1MDlfRVhURU5TSU9OX2dldF9kYXRhKGV4KSwNCiAgICAg
ICAgICAgICAgIEFTTjFfU1RSRkxHU19SRkMyMjUzKSkNCiAgICAgICAgIHsN
CiAgICAgICAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAg
ICAgICAgICAgICAid29sZlNTTF9BU04xX1NUUklOR19wcmludF9leCgpIGZv
ciBleHQga2V5IHVzYWdlIGZhaWxlZC4iKTsNCiAgICAgICAgICAgIHJldCA9
IC0xOw0KICAgICAgICAgICAgZ290byBleGl0Ow0KICAgICAgICAgfQ0KICAg
ICAgfQ0KICAgfQ0KI2VuZGlmDQoNCiNpZiAwDQogICAvKg0KICAgICogVGhp
cyBjb21waWxlcyBidXQgZG9lc24ndCB3b3JrLiB3b2xmU1NMX1g1MDlfZXh0
X2lzU2V0X2J5X05JRCgpDQogICAgKiBjb21wbGFpbnMgYWJvdXQgIk5JRCBu
b3QgaW4gdGFibGUiLiBYWFg6IGFnYWluPw0KICAgICovDQogICBsb2MgPSB3
b2xmU1NMX1g1MDlfZ2V0X2V4dF9ieV9OSUQoY2VydCwgTklEX2NlcnRpZmlj
YXRlX3BvbGljaWVzLCAtMSk7DQogICBpZiAobG9jICE9IC0xKQ0KICAgew0K
ICAgICAgV09MRlNTTF9YNTA5X0VYVEVOU0lPTiAqZXggPSB3b2xmU1NMX1g1
MDlfZ2V0X2V4dChjZXJ0LCBsb2MpOw0KICAgICAgaWYgKHdvbGZTU0xfQklP
X3B1dHMoYmlvLCAiXG5jZXJ0aWZpY2F0ZSBwb2xpY2llcyA6ICIpIDw9IDAp
DQogICAgICB7DQogICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9S
LA0KICAgICAgICAgICAgIndvbGZTU0xfQklPX3ByaW50ZigpIGZvciBjZXJ0
aWZpY2F0ZSBwb2xpY2llcyBmYWlsZWQuIik7DQogICAgICAgICByZXQgPSAt
MTsNCiAgICAgICAgIGdvdG8gZXhpdDsNCiAgICAgIH0NCiAgICAgIGlmICgh
d29sZlNTTF9YNTA5VjNfRVhUX3ByaW50KGJpbywgZXgsIDAsIDApKQ0KICAg
ICAgew0KICAgICAgICAgaWYgKCF3b2xmU1NMX0FTTjFfU1RSSU5HX3ByaW50
X2V4KGJpbywNCiAgICAgICAgICAgICAgIHdvbGZTU0xfWDUwOV9FWFRFTlNJ
T05fZ2V0X2RhdGEoZXgpLA0KICAgICAgICAgICAgICAgQVNOMV9TVFJGTEdT
X1JGQzIyNTMpKQ0KICAgICAgICAgew0KICAgICAgICAgICAgbG9nX2Vycm9y
KExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAgICAgICJ3b2xmU1NMX0FT
TjFfU1RSSU5HX3ByaW50X2V4KCkgZm9yIGNlcnRpZmljYXRlIHBvbGljaWVz
IGZhaWxlZC4iKTsNCiAgICAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAg
ICAgZ290byBleGl0Ow0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KI2Vu
ZGlmDQoNCiAgIC8qIG1ha2UgdmFsZ3JpbmQgaGFwcHkgKi8NCiAgIHN0YXRp
YyBjb25zdCBjaGFyIHplcm8gPSAwOw0KICAgd29sZlNTTF9CSU9fd3JpdGUo
YmlvLCAmemVybywgMSk7DQoNCiAgIGxlbiA9IHdvbGZTU0xfQklPX2dldF9t
ZW1fZGF0YShiaW8sICZiaW9fbWVtX2RhdGEpOw0KICAgaWYgKGxlbiA8PSAw
KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkJJ
T19nZXRfbWVtX2RhdGEoKSByZXR1cm5lZCAlbGQgIg0KICAgICAgICAgIndo
aWxlIGdhdGhlcmluZyBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbi4iLCBsZW4p
Ow0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQog
ICBlbmNvZGVkX3RleHQgPSBodG1sX2VuY29kZShiaW9fbWVtX2RhdGEpOw0K
ICAgaWYgKGVuY29kZWRfdGV4dCA9PSBOVUxMKQ0KICAgew0KICAgICAgbG9n
X2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJGYWlsZWQgdG8g
SFRNTC1lbmNvZGUgdGhlIGNlcnRpZmljYXRlIGluZm9ybWF0aW9uLiIpOw0K
ICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAg
IHN0cmxjcHkobGFzdC0+aW5mb19idWYsIGVuY29kZWRfdGV4dCwgc2l6ZW9m
KGxhc3QtPmluZm9fYnVmKSk7DQogICBmcmVleihlbmNvZGVkX3RleHQpOw0K
ICAgcmV0ID0gMDsNCg0KZXhpdDoNCiAgIGlmIChiaW8pDQogICB7DQogICAg
ICB3b2xmU1NMX0JJT19mcmVlKGJpbyk7DQogICB9DQogICBpZiAocGtleSkN
CiAgIHsNCiAgICAgIHdvbGZTU0xfRVZQX1BLRVlfZnJlZShwa2V5KTsNCiAg
IH0NCiAgIHJldHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGhvc3RfdG9faGFzaA0K
ICoNCiAqIERlc2NyaXB0aW9uIDogIENyZWF0ZXMgYSBzaGEyNTYgaGFzaCBm
cm9tIGhvc3QgbmFtZS4gVGhlIGhvc3QgbmFtZQ0KICogICAgICAgICAgICAg
ICAgaXMgdGFrZW4gZnJvbSB0aGUgY3NwIHN0cnVjdHVyZSBhbmQgc3RvcmVk
IGludG8gaXQuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAgICAg
MSAgOiAgY3NwID0gQ3VycmVudCBjbGllbnQgc3RhdGUgKGJ1ZmZlcnMsIGhl
YWRlcnMsIGV0Yy4uLikNCiAqDQogKiBSZXR1cm5zICAgICA6IC0xID0+IEVy
cm9yIHdoaWxlIGNyZWF0aW5nIGhhc2gNCiAqICAgICAgICAgICAgICAgIDAg
PT4gSGFzaCBjcmVhdGVkIHN1Y2Nlc3NmdWxseQ0KICoNCiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovDQpzdGF0aWMgaW50IGhvc3RfdG9faGFzaChzdHJ1
Y3QgY2xpZW50X3N0YXRlICpjc3ApDQp7DQogICBpbnQgcmV0Ow0KDQogICBy
ZXQgPSB3Y19TaGEyNTZIYXNoKChjb25zdCBieXRlICopY3NwLT5odHRwLT5o
b3N0LA0KICAgICAgKHdvcmQzMilzdHJsZW4oY3NwLT5odHRwLT5ob3N0KSwg
KGJ5dGUgKiljc3AtPmh0dHAtPmhhc2hfb2ZfaG9zdCk7DQogICBpZiAocmV0
ICE9IDApDQogICB7DQogICAgICAgIHJldHVybiAtMTsNCiAgIH0NCg0KICAg
cmV0dXJuIGNyZWF0ZV9oZXhhZGVjaW1hbF9oYXNoX29mX2hvc3QoY3NwKTsN
Cg0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBG
dW5jdGlvbiAgICA6ICBjcmVhdGVfY2xpZW50X3NzbF9jb25uZWN0aW9uDQog
Kg0KICogRGVzY3JpcHRpb24gOiAgQ3JlYXRlcyBhIFRMUy1zZWN1cmVkIGNv
bm5lY3Rpb24gd2l0aCB0aGUgY2xpZW50Lg0KICoNCiAqIFBhcmFtZXRlcnMg
IDoNCiAqICAgICAgICAgIDEgIDogIGNzcCA9IEN1cnJlbnQgY2xpZW50IHN0
YXRlIChidWZmZXJzLCBoZWFkZXJzLCBldGMuLi4pDQogKg0KICogUmV0dXJu
cyAgICAgOiAgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBpZiBjb25u
ZWN0aW9uIHdhc24ndCBjcmVhdGVkDQogKiAgICAgICAgICAgICAgICBzdWNj
ZXNzZnVsbHkuDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmV4
dGVybiBpbnQgY3JlYXRlX2NsaWVudF9zc2xfY29ubmVjdGlvbihzdHJ1Y3Qg
Y2xpZW50X3N0YXRlICpjc3ApDQp7DQogICBzdHJ1Y3Qgc3NsX2F0dHIgKnNz
bF9hdHRyID0gJmNzcC0+c3NsX2NsaWVudF9hdHRyOw0KICAgLyogUGF0aHMg
dG8gY2VydGlmaWNhdGVzIGZpbGUgYW5kIGtleSBmaWxlICovDQogICBjaGFy
ICprZXlfZmlsZSAgPSBOVUxMOw0KICAgY2hhciAqY2VydF9maWxlID0gTlVM
TDsNCiAgIGludCByZXQgPSAwOw0KICAgV09MRlNTTCAqc3NsOw0KDQogICAv
KiBTaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVs
c2UuICovDQogICB3b2xmc3NsX2luaXQoKTsNCg0KICAgLyoNCiAgICAqIFBy
ZXBhcmluZyBoYXNoIG9mIGhvc3QgZm9yIGNyZWF0aW5nIGNlcnRpZmljYXRl
cw0KICAgICovDQogICByZXQgPSBob3N0X3RvX2hhc2goY3NwKTsNCiAgIGlm
IChyZXQgIT0gMCkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxf
RVJST1IsICJHZW5lcmF0aW5nIGhhc2ggb2YgaG9zdCBmYWlsZWQ6ICVkIiwg
cmV0KTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAg
fQ0KDQogICAvKg0KICAgICogUHJlcGFyaW5nIHBhdGhzIHRvIGNlcnRpZmlj
YXRlcyBmaWxlcyBhbmQga2V5IGZpbGUNCiAgICAqLw0KICAgY2VydF9maWxl
ID0gbWFrZV9jZXJ0c19wYXRoKGNzcC0+Y29uZmlnLT5jZXJ0aWZpY2F0ZV9k
aXJlY3RvcnksDQogICAgICAoY29uc3QgY2hhciAqKWNzcC0+aHR0cC0+aGFz
aF9vZl9ob3N0X2hleCwgQ0VSVF9GSUxFX1RZUEUpOw0KICAga2V5X2ZpbGUg
ID0gbWFrZV9jZXJ0c19wYXRoKGNzcC0+Y29uZmlnLT5jZXJ0aWZpY2F0ZV9k
aXJlY3RvcnksDQogICAgICAoY29uc3QgY2hhciAqKWNzcC0+aHR0cC0+aGFz
aF9vZl9ob3N0X2hleCwgS0VZX0ZJTEVfVFlQRSk7DQoNCiAgIGlmIChjZXJ0
X2ZpbGUgPT0gTlVMTCB8fCBrZXlfZmlsZSA9PSBOVUxMKQ0KICAgew0KICAg
ICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIC8q
IERvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYSBuZXcgaG9zdCBjZXJ0aWZpY2F0
ZSBhbmQga2V5PyAqLw0KICAgaWYgKCFmaWxlX2V4aXN0cyhjZXJ0X2ZpbGUp
IHx8ICFmaWxlX2V4aXN0cyhrZXlfZmlsZSkgfHwNCiAgICAgICBzc2xfY2Vy
dGlmaWNhdGVfaXNfaW52YWxpZChjZXJ0X2ZpbGUpKQ0KICAgew0KICAgICAg
LyoNCiAgICAgICAqIFllcyB3ZSBkby4gTG9jayBtdXRleCB0byBwcmV2ZW50
IGNlcnRpZmljYXRlIGFuZA0KICAgICAgICoga2V5IGluY29uc2lzdGVuY2ll
cy4NCiAgICAgICAqLw0KICAgICAgcHJpdm94eV9tdXRleF9sb2NrKCZjZXJ0
aWZpY2F0ZV9tdXRleCk7DQogICAgICByZXQgPSBnZW5lcmF0ZV9ob3N0X2Nl
cnRpZmljYXRlKGNzcCwgY2VydF9maWxlLCBrZXlfZmlsZSk7DQogICAgICBw
cml2b3h5X211dGV4X3VubG9jaygmY2VydGlmaWNhdGVfbXV0ZXgpOw0KICAg
ICAgaWYgKHJldCA8IDApDQogICAgICB7DQogICAgICAgICAvKg0KICAgICAg
ICAgICogTm8gbmVlZCB0byBsb2cgc29tZXRoaW5nLCBnZW5lcmF0ZV9ob3N0
X2NlcnRpZmljYXRlKCkNCiAgICAgICAgICAqIHRvb2sgY2FyZSBvZiBpdC4N
CiAgICAgICAgICAqLw0KICAgICAgICAgcmV0ID0gLTE7DQogICAgICAgICBn
b3RvIGV4aXQ7DQogICAgICB9DQogICB9DQogICBzc2xfYXR0ci0+d29sZnNz
bF9hdHRyLmN0eCA9IHdvbGZTU0xfQ1RYX25ldyh3b2xmU1NMdjIzX21ldGhv
ZCgpKTsNCiAgIGlmIChzc2xfYXR0ci0+d29sZnNzbF9hdHRyLmN0eCA9PSBO
VUxMKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwg
IlVuYWJsZSB0byBjcmVhdGUgVExTIGNvbnRleHQuIik7DQogICAgICByZXQg
PSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgLyogU2V0IHRo
ZSBrZXkgYW5kIGNlcnQgKi8NCiAgIGlmICh3b2xmU1NMX0NUWF91c2VfY2Vy
dGlmaWNhdGVfZmlsZShzc2xfYXR0ci0+d29sZnNzbF9hdHRyLmN0eCwNCiAg
ICAgICAgIGNlcnRfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkgIT0gV09MRlNT
TF9TVUNDRVNTKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9F
UlJPUiwNCiAgICAgICAgICJMb2FkaW5nIGhvc3QgY2VydGlmaWNhdGUgJXMg
ZmFpbGVkLiIsIGNlcnRfZmlsZSk7DQogICAgICByZXQgPSAtMTsNCiAgICAg
IGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKHdvbGZTU0xfQ1RYX3VzZV9Q
cml2YXRlS2V5X2ZpbGUoc3NsX2F0dHItPndvbGZzc2xfYXR0ci5jdHgsDQog
ICAgICAgICBrZXlfZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkgIT0gV09MRlNT
TF9TVUNDRVNTKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9F
UlJPUiwNCiAgICAgICAgICJMb2FkaW5nIGhvc3QgY2VydGlmaWNhdGUgcHJp
dmF0ZSBrZXkgJXMgZmFpbGVkLiIsIGtleV9maWxlKTsNCiAgICAgIHJldCA9
IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICB3b2xmU1NMX0NU
WF9zZXRfb3B0aW9ucyhzc2xfYXR0ci0+d29sZnNzbF9hdHRyLmN0eCwgV09M
RlNTTF9PUF9OT19TU0x2Myk7DQoNCiAgIHNzbCA9IHNzbF9hdHRyLT53b2xm
c3NsX2F0dHIuc3NsID0gd29sZlNTTF9uZXcoc3NsX2F0dHItPndvbGZzc2xf
YXR0ci5jdHgpOw0KDQogICBpZiAod29sZlNTTF9zZXRfZmQoc3NsLCBjc3At
PmNmZCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAgew0KICAgICAgbG9nX2Vy
cm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJ3b2xmU1NMX3NldF9m
ZCgpIGZhaWxlZCB0byBzZXQgdGhlIGNsaWVudCBzb2NrZXQuIik7DQogICAg
ICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYg
KGNzcC0+Y29uZmlnLT5jaXBoZXJfbGlzdCAhPSBOVUxMKQ0KICAgew0KICAg
ICAgaWYgKCF3b2xmU1NMX3NldF9jaXBoZXJfbGlzdChzc2wsIGNzcC0+Y29u
ZmlnLT5jaXBoZXJfbGlzdCkpDQogICAgICB7DQogICAgICAgICBsb2dfZXJy
b3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgICAgIlNldHRpbmcgdGhl
IGNpcGhlciBsaXN0ICclcycgZm9yIHRoZSBjbGllbnQgY29ubmVjdGlvbiBm
YWlsZWQuIiwNCiAgICAgICAgICAgIGNzcC0+Y29uZmlnLT5jaXBoZXJfbGlz
dCk7DQogICAgICAgICByZXQgPSAtMTsNCiAgICAgICAgIGdvdG8gZXhpdDsN
CiAgICAgIH0NCiAgIH0NCg0KICAgLyoNCiAgICAqICBIYW5kc2hha2Ugd2l0
aCBjbGllbnQNCiAgICAqLw0KICAgbG9nX2Vycm9yKExPR19MRVZFTF9DT05O
RUNULA0KICAgICAgIlBlcmZvcm1pbmcgdGhlIFRMUy9TU0wgaGFuZHNoYWtl
IHdpdGggY2xpZW50LiBIYXNoIG9mIGhvc3Q6ICVzIiwNCiAgICAgIGNzcC0+
aHR0cC0+aGFzaF9vZl9ob3N0X2hleCk7DQoNCiAgIHJldCA9IHdvbGZTU0xf
YWNjZXB0KHNzbCk7DQogICBpZiAocmV0ID09IFdPTEZTU0xfU1VDQ0VTUykN
CiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfQ09OTkVDVCwNCiAg
ICAgICAgICJDbGllbnQgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCBvdmVyICVz
ICglcykuIiwNCiAgICAgICAgIHdvbGZTU0xfZ2V0X3ZlcnNpb24oc3NsKSwg
d29sZlNTTF9nZXRfY2lwaGVyX25hbWUoc3NsKSk7DQogICAgICBjc3AtPnNz
bF93aXRoX2NsaWVudF9pc19vcGVuZWQgPSAxOw0KICAgICAgcmV0ID0gMDsN
CiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIGNoYXIgYnVmZmVyWzgwXTsN
CiAgICAgIGludCBlcnJvciA9IHdvbGZTU0xfZ2V0X2Vycm9yKHNzbCwgcmV0
KTsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAgICAg
ICAiVGhlIFRMUyBoYW5kc2hha2Ugd2l0aCB0aGUgY2xpZW50IGZhaWxlZC4g
ZXJyb3IgPSAlZCwgJXMiLA0KICAgICAgICAgZXJyb3IsIHdvbGZTU0xfRVJS
X2Vycm9yX3N0cmluZygodW5zaWduZWQgbG9uZyllcnJvciwgYnVmZmVyKSk7
DQogICAgICByZXQgPSAtMTsNCiAgIH0NCg0KZXhpdDoNCiAgIC8qDQogICAg
KiBGcmVlaW5nIGFsbG9jYXRlZCBwYXRocyB0byBmaWxlcw0KICAgICovDQog
ICBmcmVleihjZXJ0X2ZpbGUpOw0KICAgZnJlZXooa2V5X2ZpbGUpOw0KDQog
ICAvKiBGcmVlaW5nIHN0cnVjdHVyZXMgaWYgY29ubmVjdGlvbiB3YXNuJ3Qg
Y3JlYXRlZCBzdWNjZXNzZnVsbHkgKi8NCiAgIGlmIChyZXQgPCAwKQ0KICAg
ew0KICAgICAgZnJlZV9jbGllbnRfc3NsX3N0cnVjdHVyZXMoY3NwKTsNCiAg
IH0NCiAgIHJldHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIHNodXRkb3duX2Nvbm5l
Y3Rpb24NCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBTaHV0cyBkb3duIGEgVExT
IGNvbm5lY3Rpb24gaWYgdGhlIHNvY2tldCBpcyBzdGlsbA0KICogICAgICAg
ICAgICAgICAgYWxpdmUuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAg
ICAgICAgMSAgOiAgY3NwID0gQ3VycmVudCBjbGllbnQgc3RhdGUgKGJ1ZmZl
cnMsIGhlYWRlcnMsIGV0Yy4uLikNCiAqDQogKiBSZXR1cm5zICAgICA6ICBO
L0ENCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kc3RhdGljIHZv
aWQgc2h1dGRvd25fY29ubmVjdGlvbihXT0xGU1NMICpzc2wsIGNvbnN0IGNo
YXIgKnR5cGUpDQp7DQogICBpbnQgc2h1dGRvd25fYXR0ZW1wdHMgPSAwOw0K
ICAgaW50IHJldDsNCiAgIGludCBmZDsNCiAgIGVudW0geyBNQVhfU0hVVERP
V05fQVRURU1QVFMgPSA1IH07DQoNCiAgIGZkID0gd29sZlNTTF9nZXRfZmQo
c3NsKTsNCg0KICAgZG8NCiAgIHsNCiAgICAgIGlmICghc29ja2V0X2lzX3N0
aWxsX2FsaXZlKGZkKSkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJvcihM
T0dfTEVWRUxfQ09OTkVDVCwgIk5vdCBzaHV0dGluZyBkb3duICVzIGNvbm5l
Y3Rpb24gIg0KICAgICAgICAgICAgIm9uIHNvY2tldCAlZC4gVGhlIHNvY2tl
dCBpcyBubyBsb25nZXIgYWxpdmUuIiwgdHlwZSwgZmQpOw0KICAgICAgICAg
cmV0dXJuOw0KICAgICAgfQ0KICAgICAgcmV0ID0gd29sZlNTTF9zaHV0ZG93
bihzc2wpOw0KICAgICAgc2h1dGRvd25fYXR0ZW1wdHMrKzsNCiAgICAgIGlm
IChXT0xGU1NMX1NVQ0NFU1MgIT0gcmV0KQ0KICAgICAgew0KICAgICAgICAg
bG9nX2Vycm9yKExPR19MRVZFTF9DT05ORUNULCAiRmFpbGVkIHRvIHNodXRk
b3duICVzIGNvbm5lY3Rpb24gIg0KICAgICAgICAgICAgIm9uIHNvY2tldCAl
ZC4gQXR0ZW1wdHMgc28gZmFyOiAlZC4iLCB0eXBlLCBmZCwgc2h1dGRvd25f
YXR0ZW1wdHMpOw0KICAgICAgfQ0KICAgfSB3aGlsZSAocmV0ID09IFdPTEZT
U0xfU0hVVERPV05fTk9UX0RPTkUgJiYNCiAgICAgIHNodXRkb3duX2F0dGVt
cHRzIDwgTUFYX1NIVVRET1dOX0FUVEVNUFRTKTsNCiAgIGlmIChXT0xGU1NM
X1NVQ0NFU1MgIT0gcmV0KQ0KICAgew0KICAgICAgY2hhciBidWZmZXJbODBd
Ow0KICAgICAgaW50IGVycm9yID0gd29sZlNTTF9nZXRfZXJyb3Ioc3NsLCBy
ZXQpOw0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9DT05ORUNULCAiRmFp
bGVkIHRvIHNodXRkb3duICVzIGNvbm5lY3Rpb24gIg0KICAgICAgICAgIm9u
IHNvY2tldCAlZCBhZnRlciAlZCBhdHRlbXB0cy4gcmV0OiAlZCwgZXJyb3I6
ICVkLCAlcyIsDQogICAgICAgICB0eXBlLCBmZCwgc2h1dGRvd25fYXR0ZW1w
dHMsIHJldCwgZXJyb3IsDQogICAgICAgICB3b2xmU1NMX0VSUl9lcnJvcl9z
dHJpbmcoKHVuc2lnbmVkIGxvbmcpZXJyb3IsIGJ1ZmZlcikpOw0KICAgfQ0K
ICAgZWxzZSBpZiAoc2h1dGRvd25fYXR0ZW1wdHMgPiAxKQ0KICAgew0KICAg
ICAgbG9nX2Vycm9yKExPR19MRVZFTF9DT05ORUNULCAiU3VjY2VlZGVkIHRv
IHNodXRkb3duICVzIGNvbm5lY3Rpb24gIg0KICAgICAgICAgIm9uIHNvY2tl
dCAlZCBhZnRlciAlZCBhdHRlbXB0cy4iLCB0eXBlLCBmZCwgc2h1dGRvd25f
YXR0ZW1wdHMpOw0KICAgfQ0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBjbG9zZV9jbGllbnRfc3Ns
X2Nvbm5lY3Rpb24NCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBDbG9zZXMgVExT
IGNvbm5lY3Rpb24gd2l0aCBjbGllbnQuIFRoaXMgZnVuY3Rpb24NCiAqICAg
ICAgICAgICAgICAgIGNoZWNrcyBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgYWxy
ZWFkeSBjcmVhdGVkLg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAg
ICAgIDEgIDogIGNzcCA9IEN1cnJlbnQgY2xpZW50IHN0YXRlIChidWZmZXJz
LCBoZWFkZXJzLCBldGMuLi4pDQogKg0KICogUmV0dXJucyAgICAgOiAgTi9B
DQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiB2b2lk
IGNsb3NlX2NsaWVudF9zc2xfY29ubmVjdGlvbihzdHJ1Y3QgY2xpZW50X3N0
YXRlICpjc3ApDQp7DQogICBzdHJ1Y3Qgc3NsX2F0dHIgKnNzbF9hdHRyID0g
JmNzcC0+c3NsX2NsaWVudF9hdHRyOw0KDQogICBpZiAoY3NwLT5zc2xfd2l0
aF9jbGllbnRfaXNfb3BlbmVkID09IDApDQogICB7DQogICAgICByZXR1cm47
DQogICB9DQoNCiAgIC8qDQogICAgKiBOb3RpZnkgdGhlIHBlZXIgdGhhdCB0
aGUgY29ubmVjdGlvbiBpcyBiZWluZyBjbG9zZWQuDQogICAgKi8NCiAgIHNo
dXRkb3duX2Nvbm5lY3Rpb24oc3NsX2F0dHItPndvbGZzc2xfYXR0ci5zc2ws
ICJjbGllbnQiKTsNCg0KICAgZnJlZV9jbGllbnRfc3NsX3N0cnVjdHVyZXMo
Y3NwKTsNCiAgIGNzcC0+c3NsX3dpdGhfY2xpZW50X2lzX29wZW5lZCA9IDA7
DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICoNCiAqIEZ1
bmN0aW9uICAgIDogIGZyZWVfY2xpZW50X3NzbF9zdHJ1Y3R1cmVzDQogKg0K
ICogRGVzY3JpcHRpb24gOiAgRnJlZXMgc3RydWN0dXJlcyB1c2VkIGZvciBT
U0wgY29tbXVuaWNhdGlvbiB3aXRoDQogKiAgICAgICAgICAgICAgICBjbGll
bnQuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAgICAgMSAgOiAg
Y3NwID0gQ3VycmVudCBjbGllbnQgc3RhdGUgKGJ1ZmZlcnMsIGhlYWRlcnMs
IGV0Yy4uLikNCiAqDQogKiBSZXR1cm5zICAgICA6ICBOL0ENCiAqDQogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLw0Kc3RhdGljIHZvaWQgZnJlZV9jbGll
bnRfc3NsX3N0cnVjdHVyZXMoc3RydWN0IGNsaWVudF9zdGF0ZSAqY3NwKQ0K
ew0KICAgc3RydWN0IHNzbF9hdHRyICpzc2xfYXR0ciA9ICZjc3AtPnNzbF9j
bGllbnRfYXR0cjsNCg0KICAgaWYgKHNzbF9hdHRyLT53b2xmc3NsX2F0dHIu
c3NsKQ0KICAgew0KICAgICAgd29sZlNTTF9mcmVlKHNzbF9hdHRyLT53b2xm
c3NsX2F0dHIuc3NsKTsNCiAgIH0NCiAgIGlmIChzc2xfYXR0ci0+d29sZnNz
bF9hdHRyLmN0eCkNCiAgIHsNCiAgICAgIHdvbGZTU0xfQ1RYX2ZyZWUoc3Ns
X2F0dHItPndvbGZzc2xfYXR0ci5jdHgpOw0KICAgfQ0KfQ0KDQoNCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBj
bG9zZV9zZXJ2ZXJfc3NsX2Nvbm5lY3Rpb24NCiAqDQogKiBEZXNjcmlwdGlv
biA6ICBDbG9zZXMgVExTIGNvbm5lY3Rpb24gd2l0aCBzZXJ2ZXIuIFRoaXMg
ZnVuY3Rpb24NCiAqICAgICAgICAgICAgICAgIGNoZWNrcyBpZiB0aGlzIGNv
bm5lY3Rpb24gaXMgYWxyZWFkeSBvcGVuZWQuDQogKg0KICogUGFyYW1ldGVy
cyAgOg0KICogICAgICAgICAgMSAgOiAgY3NwID0gQ3VycmVudCBjbGllbnQg
c3RhdGUgKGJ1ZmZlcnMsIGhlYWRlcnMsIGV0Yy4uLikNCiAqDQogKiBSZXR1
cm5zICAgICA6ICBOL0ENCiAqDQogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Lw0KZXh0ZXJuIHZvaWQgY2xvc2Vfc2VydmVyX3NzbF9jb25uZWN0aW9uKHN0
cnVjdCBjbGllbnRfc3RhdGUgKmNzcCkNCnsNCiAgIHN0cnVjdCBzc2xfYXR0
ciAqc3NsX2F0dHIgPSAmY3NwLT5zc2xfc2VydmVyX2F0dHI7DQoNCiAgIGlm
IChjc3AtPnNzbF93aXRoX3NlcnZlcl9pc19vcGVuZWQgPT0gMCkNCiAgIHsN
CiAgICAgIHJldHVybjsNCiAgIH0NCg0KICAgLyoNCiAgICogTm90aWZ5IHRo
ZSBwZWVyIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgYmVpbmcgY2xvc2VkLg0K
ICAgKi8NCiAgIHNodXRkb3duX2Nvbm5lY3Rpb24oc3NsX2F0dHItPndvbGZz
c2xfYXR0ci5zc2wsICJzZXJ2ZXIiKTsNCg0KICAgZnJlZV9zZXJ2ZXJfc3Ns
X3N0cnVjdHVyZXMoY3NwKTsNCiAgIGNzcC0+c3NsX3dpdGhfc2VydmVyX2lz
X29wZW5lZCA9IDA7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Kg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGNyZWF0ZV9zZXJ2ZXJfc3NsX2Nv
bm5lY3Rpb24NCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBDcmVhdGVzIFRMUy1z
ZWN1cmVkIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyLg0KICoNCiAqIFBh
cmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNzcCA9IEN1cnJlbnQg
Y2xpZW50IHN0YXRlIChidWZmZXJzLCBoZWFkZXJzLCBldGMuLi4pDQogKg0K
ICogUmV0dXJucyAgICAgOiAgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1
ZSBpZiBjb25uZWN0aW9uIHdhc24ndCBjcmVhdGVkDQogKiAgICAgICAgICAg
ICAgICBzdWNjZXNzZnVsbHkuDQogKg0KICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8NCmV4dGVybiBpbnQgY3JlYXRlX3NlcnZlcl9zc2xfY29ubmVjdGlv
bihzdHJ1Y3QgY2xpZW50X3N0YXRlICpjc3ApDQp7DQogICB3b2xmc3NsX2Nv
bm5lY3Rpb25fYXR0ciAqc3NsX2F0dHJzID0gJmNzcC0+c3NsX3NlcnZlcl9h
dHRyLndvbGZzc2xfYXR0cjsNCiAgIGludCByZXQgPSAwOw0KICAgV09MRlNT
TCAqc3NsOw0KICAgaW50IGNvbm5lY3RfcmV0ID0gMDsNCg0KICAgY3NwLT5z
ZXJ2ZXJfY2VydF92ZXJpZmljYXRpb25fcmVzdWx0ID0gU1NMX0NFUlRfTk9U
X1ZFUklGSUVEOw0KICAgY3NwLT5zZXJ2ZXJfY2VydHNfY2hhaW4ubmV4dCA9
IE5VTEw7DQoNCiAgIHNzbF9hdHRycy0+Y3R4ID0gd29sZlNTTF9DVFhfbmV3
KHdvbGZTU0x2MjNfbWV0aG9kKCkpOw0KICAgaWYgKHNzbF9hdHRycy0+Y3R4
ID09IE5VTEwpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VS
Uk9SLCAiVExTIGNvbnRleHQgY3JlYXRpb24gZmFpbGVkIik7DQogICAgICBy
ZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKGNz
cC0+ZG9udF92ZXJpZnlfY2VydGlmaWNhdGUpDQogICB7DQogICAgICB3b2xm
U1NMX0NUWF9zZXRfdmVyaWZ5KHNzbF9hdHRycy0+Y3R4LCBXT0xGU1NMX1ZF
UklGWV9OT05FLCBOVUxMKTsNCiAgIH0NCiAgIGVsc2UgaWYgKHdvbGZTU0xf
Q1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfYXR0cnMtPmN0eCwNCiAg
ICAgIGNzcC0+Y29uZmlnLT50cnVzdGVkX2Nhc19maWxlLCBOVUxMKSAhPSBX
T0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xF
VkVMX0VSUk9SLCAiTG9hZGluZyB0cnVzdGVkLWNhcy1maWxlICclcycgZmFp
bGVkLiIsDQogICAgICAgICBjc3AtPmNvbmZpZy0+dHJ1c3RlZF9jYXNfZmls
ZSk7DQogICAgICByZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0N
Cg0KICAgd29sZlNTTF9DVFhfc2V0X29wdGlvbnMoc3NsX2F0dHJzLT5jdHgs
IFdPTEZTU0xfT1BfTk9fU1NMdjMpOw0KDQogICBzc2wgPSBzc2xfYXR0cnMt
PnNzbCA9IHdvbGZTU0xfbmV3KHNzbF9hdHRycy0+Y3R4KTsNCg0KICAgaWYg
KHdvbGZTU0xfc2V0X2ZkKHNzbCwgY3NwLT5zZXJ2ZXJfY29ubmVjdGlvbi5z
ZmQpICE9IFdPTEZTU0xfU1VDQ0VTUykNCiAgIHsNCiAgICAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAid29sZlNTTF9zZXRfZmQo
KSBmYWlsZWQgdG8gc2V0IHRoZSBzZXJ2ZXIgc29ja2V0LiIpOw0KICAgICAg
cmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIGlmIChj
c3AtPmNvbmZpZy0+Y2lwaGVyX2xpc3QgIT0gTlVMTCkNCiAgIHsNCiAgICAg
IGlmICh3b2xmU1NMX3NldF9jaXBoZXJfbGlzdChzc2wsIGNzcC0+Y29uZmln
LT5jaXBoZXJfbGlzdCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAgICAgew0K
ICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAg
ICAgICJTZXR0aW5nIHRoZSBjaXBoZXIgbGlzdCAnJXMnIGZvciB0aGUgc2Vy
dmVyIGNvbm5lY3Rpb24gZmFpbGVkLiIsDQogICAgICAgICAgICBjc3AtPmNv
bmZpZy0+Y2lwaGVyX2xpc3QpOw0KICAgICAgICAgcmV0ID0gLTE7DQogICAg
ICAgICBnb3RvIGV4aXQ7DQogICAgICB9DQogICB9DQoNCiAgIHJldCA9IHdv
bGZTU0xfVXNlU05JKHNzbCwgV09MRlNTTF9TTklfSE9TVF9OQU1FLA0KICAg
ICAgY3NwLT5odHRwLT5ob3N0LCAodW5zaWduZWQgc2hvcnQpc3RybGVuKGNz
cC0+aHR0cC0+aG9zdCkpOw0KICAgaWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NF
U1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAi
RmFpbGVkIHRvIHNldCB1c2Ugb2YgU05JLiIpOw0KICAgICAgcmV0ID0gLTE7
DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIHJldCA9IHdvbGZTU0xf
Y2hlY2tfZG9tYWluX25hbWUoc3NsLCBjc3AtPmh0dHAtPmhvc3QpOw0KICAg
aWYgKHJldCAhPSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBjaGFy
IGJ1ZmZlcls4MF07DQogICAgICBpbnQgZXJyb3IgPSB3b2xmU1NMX2dldF9l
cnJvcihzc2wsIHJldCk7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0ZB
VEFMLA0KICAgICAgICAgIkZhaWxlZCB0byBzZXQgY2hlY2sgZG9tYWluIG5h
bWUuIGVycm9yID0gJWQsICVzIiwNCiAgICAgICAgIGVycm9yLCB3b2xmU1NM
X0VSUl9lcnJvcl9zdHJpbmcoKHVuc2lnbmVkIGxvbmcpZXJyb3IsIGJ1ZmZl
cikpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9
DQoNCiNpZmRlZiBIQVZFX1NFQ1VSRV9SRU5FR09USUFUSU9ODQojd2Fybmlu
ZyB3b2xmc3NsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggSEFWRV9TRUNVUkVf
UkVORUdPVElBVElPTiB3aGlsZSB5b3UgcHJvYmFibHkgd2FudCBIQVZFX1JF
TkVHT1RJQVRJT05fSU5ESUNBVElPTg0KICAgaWYod29sZlNTTF9Vc2VTZWN1
cmVSZW5lZ290aWF0aW9uKHNzbCkgIT0gV09MRlNTTF9TVUNDRVNTKQ0KICAg
ew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAg
ICJGYWlsZWQgdG8gZW5hYmxlICdTZWN1cmUnIFJlbmVnb3RpYXRpb24uIENv
bnRpbnVpbmcgYW55d2F5LiIpOw0KICAgfQ0KI2VuZGlmDQojaWZuZGVmIEhB
VkVfUkVORUdPVElBVElPTl9JTkRJQ0FUSU9ODQojd2FybmluZyBMb29rcyBs
aWtlIHdvbGZzc2wgaGFzIGJlZW4gY29tcGlsZWQgd2l0aG91dCBIQVZFX1JF
TkVHT1RJQVRJT05fSU5ESUNBVElPTg0KI2VuZGlmDQoNCiAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfQ09OTkVDVCwNCiAgICAgICJQZXJmb3JtaW5nIHRoZSBU
TFMvU1NMIGhhbmRzaGFrZSB3aXRoIHRoZSBzZXJ2ZXIiKTsNCg0KICAgLyog
d29sZlNTTF9EZWJ1Z2dpbmdfT04oKTsgKi8NCiAgIGNvbm5lY3RfcmV0ID0g
d29sZlNTTF9jb25uZWN0KHNzbCk7DQogICAvKiB3b2xmU1NMX0RlYnVnZ2lu
Z19PRkYoKTsgKi8NCg0KICAgLyoNCiAgIHdvbGZTU0xfRGVidWdnaW5nX09O
KCk7DQogICAqLw0KICAgaWYgKCFjc3AtPmRvbnRfdmVyaWZ5X2NlcnRpZmlj
YXRlKQ0KICAgew0KICAgICAgbG9uZyB2ZXJpZnlfcmVzdWx0ID0gd29sZlNT
TF9nZXRfZXJyb3Ioc3NsLCBjb25uZWN0X3JldCk7DQoNCiNpZiBMSUJXT0xG
U1NMX1ZFUlNJT05fSEVYID4gMHgwNTAwNTAwNA0KICAgICAgaWYgKHZlcmlm
eV9yZXN1bHQgPT0gV09MRlNTTF9YNTA5X1ZfT0spDQojZWxzZQ0KICAgICAg
aWYgKHZlcmlmeV9yZXN1bHQgPT0gWDUwOV9WX09LKQ0KI2VuZGlmDQogICAg
ICB7DQogICAgICAgICByZXQgPSAwOw0KICAgICAgICAgY3NwLT5zZXJ2ZXJf
Y2VydF92ZXJpZmljYXRpb25fcmVzdWx0ID0gU1NMX0NFUlRfVkFMSUQ7DQog
ICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICBXT0xGX1NU
QUNLX09GKFdPTEZTU0xfWDUwOSkgKmNoYWluOw0KDQogICAgICAgICBjc3At
PnNlcnZlcl9jZXJ0X3ZlcmlmaWNhdGlvbl9yZXN1bHQgPSB2ZXJpZnlfcmVz
dWx0Ow0KICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAg
ICAgICAgICAgICJYNTA5IGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmb3Ig
JXMgZmFpbGVkIHdpdGggZXJyb3IgJWxkOiAlcyIsDQogICAgICAgICAgICBj
c3AtPmh0dHAtPmhvc3Rwb3J0LCB2ZXJpZnlfcmVzdWx0LA0KICAgICAgICAg
ICAgd29sZlNTTF9YNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyh2ZXJp
ZnlfcmVzdWx0KSk7DQoNCiAgICAgICAgIGNoYWluID0gd29sZlNTTF9nZXRf
cGVlcl9jZXJ0X2NoYWluKHNzbCk7DQogICAgICAgICBpZiAoY2hhaW4gIT0g
TlVMTCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgIGludCBpOw0KICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IHdvbGZTU0xfc2tfWDUwOV9udW0oY2hh
aW4pOyBpKyspDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICBpZiAo
c3NsX3N0b3JlX2NlcnQoY3NwLCB3b2xmU1NMX3NrX1g1MDlfdmFsdWUoY2hh
aW4sIGkpKSAhPSAwKQ0KICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICAg
ICAgICAgICAgICJzc2xfc3RvcmVfY2VydCgpIGZhaWxlZCBmb3IgY2VydCAl
ZCIsIGkpOw0KICAgICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAg
ICAgICAqIHNzbF9zZW5kX2NlcnRpZmljYXRlX2Vycm9yKCkgd2lsIG5vdCBi
ZSBhYmxlIHRvIHNob3cNCiAgICAgICAgICAgICAgICAgICAqIHRoZSBjZXJ0
aWZpY2F0ZSBidXQgdGhlIHVzZXIgd2lsbCBzdGlsIGdldCB0aGUgZXJyb3IN
CiAgICAgICAgICAgICAgICAgICAqIGRlc2NyaXB0aW9uLg0KICAgICAgICAg
ICAgICAgICAgICovDQogICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9
DQogICAgICAgICB9DQoNCiAgICAgICAgIHJldCA9IC0xOw0KICAgICAgICAg
Z290byBleGl0Ow0KICAgICAgfQ0KICAgfQ0KICAgLyoNCiAgIHdvbGZTU0xf
RGVidWdnaW5nX09GRigpOw0KICAgKi8NCiAgIGlmIChjb25uZWN0X3JldCA9
PSBXT0xGU1NMX1NVQ0NFU1MpDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9H
X0xFVkVMX0NPTk5FQ1QsDQogICAgICAgICAiU2VydmVyIHN1Y2Nlc3NmdWxs
eSBjb25uZWN0ZWQgb3ZlciAlcyAoJXMpLiIsDQogICAgICAgICB3b2xmU1NM
X2dldF92ZXJzaW9uKHNzbCksIHdvbGZTU0xfZ2V0X2NpcGhlcl9uYW1lKHNz
bCkpOw0KICAgICAgY3NwLT5zc2xfd2l0aF9zZXJ2ZXJfaXNfb3BlbmVkID0g
MTsNCiAgICAgIHJldCA9IDA7DQogICB9DQogICBlbHNlDQogICB7DQogICAg
ICBjaGFyIGJ1ZmZlcls4MF07DQogICAgICBpbnQgZXJyb3IgPSB3b2xmU1NM
X2dldF9lcnJvcihzc2wsIHJldCk7DQogICAgICBsb2dfZXJyb3IoTE9HX0xF
VkVMX0VSUk9SLA0KICAgICAgICAgIlRoZSBUTFMgaGFuZHNoYWtlIHdpdGgg
dGhlIHNlcnZlciAlcyBmYWlsZWQuIGVycm9yID0gJWQsICVzIiwNCiAgICAg
ICAgIGNzcC0+aHR0cC0+aG9zdHBvcnQsDQogICAgICAgICBlcnJvciwgd29s
ZlNTTF9FUlJfZXJyb3Jfc3RyaW5nKCh1bnNpZ25lZCBsb25nKWVycm9yLCBi
dWZmZXIpKTsNCiAgICAgIHJldCA9IC0xOw0KICAgfQ0KDQpleGl0Og0KICAg
LyogRnJlZWluZyBzdHJ1Y3R1cmVzIGlmIGNvbm5lY3Rpb24gd2Fzbid0IGNy
ZWF0ZWQgc3VjY2Vzc2Z1bGx5ICovDQogICBpZiAocmV0IDwgMCkNCiAgIHsN
CiAgICAgIGZyZWVfc2VydmVyX3NzbF9zdHJ1Y3R1cmVzKGNzcCk7DQogICB9
DQoNCiAgIHJldHVybiByZXQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGZyZWVfc2VydmVyX3Nz
bF9zdHJ1Y3R1cmVzDQogKg0KICogRGVzY3JpcHRpb24gOiAgRnJlZXMgc3Ry
dWN0dXJlcyB1c2VkIGZvciBTU0wgY29tbXVuaWNhdGlvbiB3aXRoIHNlcnZl
cg0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNz
cCA9IEN1cnJlbnQgY2xpZW50IHN0YXRlIChidWZmZXJzLCBoZWFkZXJzLCBl
dGMuLi4pDQogKg0KICogUmV0dXJucyAgICAgOiAgTi9BDQogKg0KICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyB2b2lkIGZyZWVfc2VydmVy
X3NzbF9zdHJ1Y3R1cmVzKHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCkNCnsN
CiAgIHN0cnVjdCBzc2xfYXR0ciAqc3NsX2F0dHIgPSAmY3NwLT5zc2xfc2Vy
dmVyX2F0dHI7DQoNCiAgIGlmIChzc2xfYXR0ci0+d29sZnNzbF9hdHRyLnNz
bCkNCiAgIHsNCiAgICAgIHdvbGZTU0xfZnJlZShzc2xfYXR0ci0+d29sZnNz
bF9hdHRyLnNzbCk7DQogICB9DQogICBpZiAoc3NsX2F0dHItPndvbGZzc2xf
YXR0ci5jdHgpDQogICB7DQogICAgICB3b2xmU1NMX0NUWF9mcmVlKHNzbF9h
dHRyLT53b2xmc3NsX2F0dHIuY3R4KTsNCiAgIH0NCn0NCg0KDQovKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqDQogKg0KICogRnVuY3Rpb24gICAgOiAgbG9n
X3NzbF9lcnJvcnMNCiAqDQogKiBEZXNjcmlwdGlvbiA6ICBMb2cgU1NMIGVy
cm9ycw0KICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDog
IGRlYnVnbGV2ZWwgPSBEZWJ1ZyBsZXZlbA0KICogICAgICAgICAgMiAgOiAg
ZGVzYyA9IEVycm9yIGRlc2NyaXB0aW9uDQogKg0KICogUmV0dXJucyAgICAg
OiAgTi9BDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnN0YXRp
YyB2b2lkIGxvZ19zc2xfZXJyb3JzKGludCBkZWJ1Z2xldmVsLCBjb25zdCBj
aGFyKiBmbXQsIC4uLikNCnsNCiAgIHVuc2lnbmVkIGxvbmcgZXJyX2NvZGU7
DQogICBjaGFyIHByZWZpeFtFUlJPUl9CVUZfU0laRV07DQogICB2YV9saXN0
IGFyZ3M7DQogICB2YV9zdGFydChhcmdzLCBmbXQpOw0KICAgdnNucHJpbnRm
KHByZWZpeCwgc2l6ZW9mKHByZWZpeCksIGZtdCwgYXJncyk7DQogICBpbnQg
cmVwb3J0ZWQgPSAwOw0KDQogICB3aGlsZSAoKGVycl9jb2RlID0gd29sZlNT
TF9FUlJfZ2V0X2Vycm9yKCkpKQ0KICAgew0KICAgICAgY2hhciBlcnJfYnVm
W0VSUk9SX0JVRl9TSVpFXTsNCiAgICAgIHJlcG9ydGVkID0gMTsNCiAgICAg
IHdvbGZTU0xfRVJSX2Vycm9yX3N0cmluZ19uKGVycl9jb2RlLCBlcnJfYnVm
LCBzaXplb2YoZXJyX2J1ZikpOw0KICAgICAgbG9nX2Vycm9yKGRlYnVnbGV2
ZWwsICIlczogJXMiLCBwcmVmaXgsIGVycl9idWYpOw0KICAgfQ0KICAgdmFf
ZW5kKGFyZ3MpOw0KICAgLyoNCiAgICAqIEluIGNhc2UgaWYgY2FsbGVkIGJ5
IG1pc3Rha2UgYW5kIHRoZXJlIHdlcmUNCiAgICAqIG5vIFRMUyBlcnJvcnMg
bGV0J3MgcmVwb3J0IGl0IHRvIHRoZSBsb2cuDQogICAgKi8NCiAgIGlmICgh
cmVwb3J0ZWQpDQogICB7DQogICAgICBsb2dfZXJyb3IoZGVidWdsZXZlbCwg
IiVzOiBubyBUTFMgZXJyb3JzIGRldGVjdGVkIiwgcHJlZml4KTsNCiAgIH0N
Cn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVu
Y3Rpb24gICAgOiAgc3NsX2Jhc2U2NF9lbmNvZGUNCiAqDQogKiBEZXNjcmlw
dGlvbiA6ICBFbmNvZGUgYSBidWZmZXIgaW50byBiYXNlNjQgZm9ybWF0Lg0K
ICoNCiAqIFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGRzdCA9
IERlc3RpbmF0aW9uIGJ1ZmZlcg0KICogICAgICAgICAgMiAgOiAgZGxlbiA9
IERlc3RpbmF0aW9uIGJ1ZmZlciBsZW5ndGgNCiAqICAgICAgICAgIDMgIDog
IG9sZW4gPSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbg0KICogICAgICAgICAg
NCAgOiAgc3JjID0gU291cmNlIGJ1ZmZlcg0KICogICAgICAgICAgNSAgOiAg
c2xlbiA9IEFtb3VudCBvZiBkYXRhIHRvIGJlIGVuY29kZWQNCiAqDQogKiBS
ZXR1cm5zICAgICA6ICAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ2
aXNlDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmV4dGVybiBp
bnQgc3NsX2Jhc2U2NF9lbmNvZGUodW5zaWduZWQgY2hhciAqZHN0LCBzaXpl
X3QgZGxlbiwgc2l6ZV90ICpvbGVuLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzbGVu
KQ0Kew0KICAgd29yZDMyIG91dHB1dF9sZW5ndGg7DQogICBpbnQgcmV0Ow0K
DQogICAqb2xlbiA9IDQgKiAoKHNsZW4vMykgKyAoKHNsZW4lMykgPyAxIDog
MCkpICsgMTsNCiAgIGlmICgqb2xlbiA+IGRsZW4pDQogICB7DQogICAgICBy
ZXR1cm4gRU5PQlVGUzsNCiAgIH0NCg0KICAgb3V0cHV0X2xlbmd0aCA9ICh3
b3JkMzIpZGxlbjsNCiAgIHJldCA9IEJhc2U2NF9FbmNvZGVfTm9ObChzcmMs
ICh3b3JkMzIpc2xlbiwgZHN0LCAmb3V0cHV0X2xlbmd0aCk7DQogICBpZiAo
cmV0ICE9IDApDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VS
Uk9SLCAiYmFzZTY0IGVuY29kaW5nIGZhaWxlZCB3aXRoICVkIiwgcmV0KTsN
CiAgICAgIHJldHVybiByZXQ7DQogICB9DQogICAqb2xlbiA9IG91dHB1dF9s
ZW5ndGg7DQoNCiAgIHJldHVybiAwOw0KDQp9DQoNCg0KLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIGNsb3NlX2Zp
bGVfc3RyZWFtDQogKg0KICogRGVzY3JpcHRpb24gOiAgQ2xvc2UgZmlsZSBz
dHJlYW0sIHJlcG9ydCBlcnJvciBvbiBjbG9zZSBlcnJvcg0KICoNCiAqIFBh
cmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGYgPSBmaWxlIHN0cmVh
bSB0byBjbG9zZQ0KICogICAgICAgICAgMiAgOiAgcGF0aCA9IHBhdGggZm9y
IGVycm9yIHJlcG9ydA0KICoNCiAqIFJldHVybnMgICAgIDogIE4vQQ0KICoN
CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovDQpzdGF0aWMgdm9pZCBjbG9z
ZV9maWxlX3N0cmVhbShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoKQ0Kew0K
ICAgaWYgKGZjbG9zZShmKSAhPSAwKQ0KICAgew0KICAgICAgbG9nX2Vycm9y
KExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJFcnJvciBjbG9zaW5nIGZp
bGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsNCiAgIH0NCn0N
Cg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVuY3Rp
b24gICAgOiAgd3JpdGVfY2VydGlmaWNhdGUNCiAqDQogKiBEZXNjcmlwdGlv
biA6ICBXcml0ZXMgYSBQRU0tZW5jb2RlZCBjZXJ0aWZpY2F0ZSB0byBhIGZp
bGUuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAgICAgMSAgOiAg
Y2VydGlmaWNhdGVfcGF0aCA9IFBhdGggdG8gdGhlIGZpbGUgdG8gY3JlYXRl
DQogKiAgICAgICAgICAyICA6ICBjZXJ0aWZpY2F0ZSA9IFBFTS1lbmNvZGVk
IGNlcnRpZmljYXRlIHRvIHdyaXRlLg0KICoNCiAqIFJldHVybnMgICAgIDog
IE5VTEwgPT4gRXJyb3IuIE90aGVyd2lzZSBhIGtleTsNCiAqDQogKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLw0Kc3RhdGljIGludCB3cml0ZV9jZXJ0aWZp
Y2F0ZShjb25zdCBjaGFyICpjZXJ0aWZpY2F0ZV9wYXRoLCBjb25zdCBjaGFy
ICpjZXJ0aWZpY2F0ZSkNCnsNCiAgIEZJTEUgKmZwOw0KDQogICBhc3NlcnQo
Y2VydGlmaWNhdGVfcGF0aCAhPSBOVUxMKTsNCiAgIGFzc2VydChjZXJ0aWZp
Y2F0ZSAhPSBOVUxMKTsNCg0KICAgZnAgPSBmb3BlbihjZXJ0aWZpY2F0ZV9w
YXRoLCAid2IiKTsNCiAgIGlmIChOVUxMID09IGZwKQ0KICAgew0KICAgICAg
bG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJGYWlsZWQg
dG8gb3BlbiAlcyB0byB3cml0ZSB0aGUgY2VydGlmaWNhdGU6ICVFIiwNCiAg
ICAgICAgIGNlcnRpZmljYXRlX3BhdGgpOw0KICAgICAgcmV0dXJuIC0xOw0K
ICAgfQ0KICAgaWYgKGZwdXRzKGNlcnRpZmljYXRlLCBmcCkgPCAwKQ0KICAg
ew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkZhaWxlZCB0
byB3cml0ZSBjZXJ0aWZpY2F0ZSB0byAlczogJUUiLA0KICAgICAgICAgY2Vy
dGlmaWNhdGVfcGF0aCk7DQogICAgICBmY2xvc2UoZnApOw0KICAgICAgcmV0
dXJuIC0xOw0KICAgfQ0KICAgZmNsb3NlKGZwKTsNCg0KICAgcmV0dXJuIDA7
DQoNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICog
RnVuY3Rpb24gICAgOiAgZ2VuZXJhdGVfY2VydF9rZXkNCiAqDQogKiBEZXNj
cmlwdGlvbiA6IEdlbmVyYXRlcyBhIG5ldyBSU0Ega2V5IGFuZCBzYXZlcyBp
dCBpbiBhIGZpbGUuDQogKg0KICogUGFyYW1ldGVycyAgOg0KICogICAgICAg
ICAgMSAgOiAgY2VydF9rZXlfcGF0aCA9IFBhdGggdG8gdGhlIGtleSB0aGF0
IHNob3VsZCBiZSB3cml0dGVuLg0KICoNCiAqIFJldHVybnMgICAgIDogIC0x
ID0+IEVycm9yIHdoaWxlIGdlbmVyYXRpbmcgcHJpdmF0ZSBrZXkNCiAqICAg
ICAgICAgICAgICAgICAwID0+IFN1Y2Nlc3MuDQogKg0KICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgZ2VuZXJhdGVfY2VydF9rZXko
Y29uc3QgY2hhciAqY2VydF9rZXlfcGF0aCkNCnsNCiAgIGVjY19rZXkga2V5
Ow0KICAgYnl0ZSBjZXJ0X2tleV9kZXJbNDA5Nl07DQogICBpbnQgcmV0Ow0K
ICAgYnl0ZSBrZXlfcGVtWzQwOTZdOw0KICAgaW50IGRlcl9rZXlfc2l6ZTsN
CiAgIGludCBwZW1fa2V5X3NpemU7DQogICBGSUxFICpmID0gTlVMTDsNCg0K
ICAgYXNzZXJ0KGZpbGVfZXhpc3RzKGNlcnRfa2V5X3BhdGgpICE9IDEpOw0K
DQogICB3Y19lY2NfaW5pdCgma2V5KTsNCg0KICAgbG9nX2Vycm9yKExPR19M
RVZFTF9DT05ORUNULCAiTWFraW5nIGtleSAlcyAuLi4iLCBjZXJ0X2tleV9w
YXRoKTsNCiAgIC8vaW50IGVjY19rZXlfc2l6ZSA9IHdjX2VjY19nZXRfY3Vy
dmVfc2l6ZV9mcm9tX2lkKGN1cnZlSWQpOw0KICAgLy9yZXQgPSB3Y19lY2Nf
bWFrZV9rZXlfZXgoJndvbGZzc2xfcm5nLCBlY2Nfa2V5X3NpemUsICZrZXks
IGN1cnZlSWQpOw0KICAgcmV0ID0gd2NfZWNjX21ha2Vfa2V5KCZ3b2xmc3Ns
X3JuZywgRUNDX01JTl9LRVlfU1osICZrZXkpOw0KICAgaWYgKHJldCAhPSAw
KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIktl
eSBnZW5lcmF0aW9uIGZhaWxlZDogJWQiLCByZXQpOw0KICAgICAgcmV0ID0g
LTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQogICBsb2dfZXJyb3IoTE9H
X0xFVkVMX0NPTk5FQ1QsICJEb25lIG1ha2luZyBrZXkgJXMiLCBjZXJ0X2tl
eV9wYXRoKTsNCg0KICAgZGVyX2tleV9zaXplID0gd2NfRWNjS2V5VG9EZXIo
JmtleSwgY2VydF9rZXlfZGVyLCBzaXplb2YoY2VydF9rZXlfZGVyKSk7DQog
ICB3Y19lY2NfZnJlZSgma2V5KTsNCiAgIGlmIChkZXJfa2V5X3NpemUgPCAw
KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIktl
eSBjb252ZXJzaW9uIHRvIERFUiBmb3JtYXQgZmFpbGVkIik7DQogICAgICBy
ZXQgPSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCiAgIHBlbV9rZXlf
c2l6ZSA9IHdjX0RlclRvUGVtKGNlcnRfa2V5X2RlciwgKHdvcmQzMilkZXJf
a2V5X3NpemUsDQogICAgICBrZXlfcGVtLCBzaXplb2Yoa2V5X3BlbSksICBF
Q0NfUFJJVkFURUtFWV9UWVBFKTsNCg0KICAgaWYgKHBlbV9rZXlfc2l6ZSA8
IDApDQogICB7DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAi
S2V5IGNvbnZlcnNpb24gdG8gUEVNIGZvcm1hdCBmYWlsZWQiKTsNCiAgICAg
IHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICAvKg0K
ICAgICogU2F2aW5nIGtleSBpbnRvIGZpbGUNCiAgICAqLw0KICAgaWYgKChm
ID0gZm9wZW4oY2VydF9rZXlfcGF0aCwgIndiIikpID09IE5VTEwpDQogICB7
DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAg
Ik9wZW5pbmcgZmlsZSAlcyB0byBzYXZlIHByaXZhdGUga2V5IGZhaWxlZDog
JUUiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICByZXQgPSAt
MTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKGZ3cml0ZShr
ZXlfcGVtLCAxLCAoc2l6ZV90KXBlbV9rZXlfc2l6ZSwgZikgIT0gcGVtX2tl
eV9zaXplKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJP
UiwNCiAgICAgICAgICJXcml0aW5nIHByaXZhdGUga2V5IGludG8gZmlsZSAl
cyBmYWlsZWQiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICBj
bG9zZV9maWxlX3N0cmVhbShmLCBjZXJ0X2tleV9wYXRoKTsNCiAgICAgIHJl
dCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0KICAgfQ0KDQogICBjbG9zZV9m
aWxlX3N0cmVhbShmLCBjZXJ0X2tleV9wYXRoKTsNCg0KZXhpdDoNCg0KICAg
cmV0dXJuIHJldDsNCg0KfQ0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBzc2xfY2VydGlmaWNhdGVfbG9h
ZA0KICoNCiAqIERlc2NyaXB0aW9uIDogIExvYWRzIGNlcnRpZmljYXRlIGZy
b20gZmlsZS4NCiAqDQogKiBQYXJhbWV0ZXJzICA6DQogKiAgICAgICAgICAx
ICA6ICBjZXJ0X3BhdGggPSBUaGUgY2VydGlmaWNhdGUgcGF0aCB0byBsb2Fk
DQogKg0KICogUmV0dXJucyAgICAgOiAgIE5VTEwgPT4gZXJyb3IgbG9hZGlu
ZyBjZXJ0aWZpY2F0ZSwNCiAqICAgICAgICAgICAgICAgICAgIHBvaW50ZXIg
dG8gY2VydGlmaWNhdGUgaW5zdGFuY2Ugb3RoZXJ3aXNlDQogKg0KICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyBYNTA5ICpzc2xfY2VydGlm
aWNhdGVfbG9hZChjb25zdCBjaGFyICpjZXJ0X3BhdGgpDQp7DQogICBYNTA5
ICpjZXJ0ID0gTlVMTDsNCiAgIEZJTEUgKmNlcnRfZiA9IE5VTEw7DQoNCiAg
IGlmICghKGNlcnRfZiA9IGZvcGVuKGNlcnRfcGF0aCwgInIiKSkpDQogICB7
DQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAg
IkVycm9yIG9wZW5pbmcgY2VydGlmaWNhdGUgZmlsZSAlczogJXMiLCBjZXJ0
X3BhdGgsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICByZXR1cm4gTlVMTDsN
CiAgIH0NCg0KICAgaWYgKCEoY2VydCA9IFBFTV9yZWFkX1g1MDkoY2VydF9m
LCBOVUxMLCBOVUxMLCBOVUxMKSkpDQogICB7DQogICAgICBsb2dfc3NsX2Vy
cm9ycyhMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAiRXJyb3IgcmVhZGlu
ZyBjZXJ0aWZpY2F0ZSBmaWxlICVzIiwgY2VydF9wYXRoKTsNCiAgIH0NCg0K
ICAgY2xvc2VfZmlsZV9zdHJlYW0oY2VydF9mLCBjZXJ0X3BhdGgpOw0KICAg
cmV0dXJuIGNlcnQ7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Kg0KICoNCiAqIEZ1bmN0aW9uICAgIDogIHNzbF9jZXJ0aWZpY2F0ZV9pc19p
bnZhbGlkDQogKg0KICogRGVzY3JpcHRpb24gOiAgQ2hlY2tzIHdoZXRoZXIg
b3Igbm90IGEgY2VydGlmaWNhdGUgaXMgdmFsaWQuDQogKiAgICAgICAgICAg
ICAgICBDdXJyZW50bHkgb25seSBjaGVja3MgdGhhdCB0aGUgY2VydGlmaWNh
dGUgY2FuIGJlDQogKiAgICAgICAgICAgICAgICBwYXJzZWQgYW5kIHRoYXQg
dGhlICJ2YWxpZCB0byIgZGF0ZSBpcyBpbiB0aGUgZnV0dXJlLg0KICoNCiAq
IFBhcmFtZXRlcnMgIDoNCiAqICAgICAgICAgIDEgIDogIGNlcnRfZmlsZSA9
IFRoZSBjZXJ0aWZpY2F0ZSB0byBjaGVjaw0KICoNCiAqIFJldHVybnMgICAg
IDogICAwID0+IFRoZSBjZXJ0aWZpY2F0ZSBpcyB2YWxpZC4NCiAqICAgICAg
ICAgICAgICAgICAxID0+IFRoZSBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkDQog
Kg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgc3Ns
X2NlcnRpZmljYXRlX2lzX2ludmFsaWQoY29uc3QgY2hhciAqY2VydF9maWxl
KQ0Kew0KICAgaW50IHJldDsNCg0KICAgWDUwOSAqY2VydCA9IE5VTEw7DQoN
CiAgIGlmICghKGNlcnQgPSBzc2xfY2VydGlmaWNhdGVfbG9hZChjZXJ0X2Zp
bGUpKSkNCiAgIHsNCiAgICAgIHJldHVybiAxOw0KICAgfQ0KDQogICByZXQg
PSB3b2xmU1NMX1g1MDlfY21wX2N1cnJlbnRfdGltZSh3b2xmU1NMX1g1MDlf
Z2V0X25vdEFmdGVyKGNlcnQpKTsNCiAgIGlmIChyZXQgPT0gMCkNCiAgIHsN
CiAgICAgIGxvZ19zc2xfZXJyb3JzKExPR19MRVZFTF9FUlJPUiwNCiAgICAg
ICAgICJFcnJvciBjaGVja2luZyBjZXJ0aWZpY2F0ZSAlcyB2YWxpZGl0eSIs
IGNlcnRfZmlsZSk7DQogICAgICByZXQgPSAtMTsNCiAgIH0NCg0KICAgd29s
ZlNTTF9YNTA5X2ZyZWUoY2VydCk7DQoNCiAgIHJldHVybiByZXQgPT0gLTEg
PyAxIDogMDsNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog
Kg0KICogRnVuY3Rpb24gICAgOiAgbG9hZF9jZXJ0X2tleQ0KICoNCiAqIERl
c2NyaXB0aW9uIDogIExvYWQgYSBQRU0tZW5jb2RlZCBSU0EgZmlsZSBpbnRv
IG1lbW9yeS4NCiAqDQogKiBQYXJhbWV0ZXJzICA6DQogKiAgICAgICAgICAx
ICA6ICBjZXJ0X2tleV9wYXRoID0gUGF0aCB0byB0aGUgZmlsZSB0aGF0IGhv
bGRzIHRoZSBrZXkuDQogKiAgICAgICAgICAyICA6ICBwYXNzd29yZCA9IFBh
c3N3b3JkIHRvIHVubG9jayB0aGUga2V5LiBOVUxMIGlmIG5vDQogKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGlzIHJlcXVpcmVkLg0K
ICogICAgICAgICAgMyAgOiAgcnNhX2tleSA9IEluaXRpYWxpemVkIFJTQSBr
ZXkgc3RvcmFnZS4NCiAqICAgICAgICAgIDMgIDogIGVjX2tleSA9IEluaXRp
YWxpemVkIEVDQyBrZXkgc3RvcmFnZS4NCiAqDQogKiBSZXR1cm5zICAgICA6
ICAgMCA9PiBFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUga2V5Lg0KICogICAg
ICAgICAgICAgICAgIDEgPT4gSXQgd29ya2VkDQogKg0KICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgbG9hZF9jZXJ0X2tleShjb25z
dCBjaGFyICpjZXJ0X2tleV9wYXRoLCBjb25zdCBjaGFyICpwYXNzd29yZCwg
UnNhS2V5ICpyc2Ffa2V5LCBlY2Nfa2V5ICplY19rZXkpDQp7DQogICBGSUxF
ICpmcDsNCiAgIHNpemVfdCBsZW5ndGg7DQogICBsb25nIHJldDsNCiAgIHVu
c2lnbmVkIGNoYXIgKmtleV9wZW07DQogICBEZXJCdWZmZXIgKmRlcl9idWZm
ZXI7DQogICB3b3JkMzIgZGVyX2luZGV4ID0gMDsNCiAgIERlckJ1ZmZlciBk
ZWNyeXB0ZWRfZGVyX2J1ZmZlcjsNCiAgIHVuc2lnbmVkIGNoYXIgZGVyX2Rh
dGFbNDA5Nl07DQoNCiAgIGZwID0gZm9wZW4oY2VydF9rZXlfcGF0aCwgInJi
Iik7DQogICBpZiAoTlVMTCA9PSBmcCkNCiAgIHsNCiAgICAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfRVJST1IsICJGYWlsZWQgdG8gb3BlbiAlczogJUUiLCBj
ZXJ0X2tleV9wYXRoKTsNCiAgICAgIHJldHVybiAwOw0KICAgfQ0KDQogICAv
KiBHZXQgZmlsZSBsZW5ndGggKi8NCiAgIGlmIChmc2VlayhmcCwgMCwgU0VF
S19FTkQpKQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJP
UiwNCiAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGZzZWVrKClp
bmcgdG8gdGhlIGVuZCBvZiAlczogJUUiLA0KICAgICAgICAgY2VydF9rZXlf
cGF0aCk7DQogICAgICBmY2xvc2UoZnApOw0KICAgICAgcmV0dXJuIDA7DQog
ICB9DQogICByZXQgPSBmdGVsbChmcCk7DQogICBpZiAoLTEgPT0gcmV0KQ0K
ICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg
ICAgICJVbmV4cGVjdGVkIGZ0ZWxsKCkgZXJyb3Igd2hpbGUgbG9hZGluZyAl
czogJUUiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICBmY2xv
c2UoZnApOw0KICAgICAgcmV0dXJuIDA7DQogICB9DQogICBsZW5ndGggPSAo
c2l6ZV90KXJldDsNCg0KICAgLyogR28gYmFjayB0byB0aGUgYmVnaW5uaW5n
LiAqLw0KICAgaWYgKGZzZWVrKGZwLCAwLCBTRUVLX1NFVCkpDQogICB7DQog
ICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIlVu
ZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZnNlZWsoKWluZyB0byB0aGUgYmVnaW5u
aW5nIG9mICVzOiAlRSIsDQogICAgICAgICBjZXJ0X2tleV9wYXRoKTsNCiAg
ICAgIGZjbG9zZShmcCk7DQogICAgICByZXR1cm4gMDsNCiAgIH0NCg0KICAg
a2V5X3BlbSA9IG1hbGxvY19vcl9kaWUobGVuZ3RoKTsNCg0KICAgaWYgKDEg
IT0gZnJlYWQoa2V5X3BlbSwgbGVuZ3RoLCAxLCBmcCkpDQogICB7DQogICAg
ICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0KICAgICAgICAgIkNvdWxk
bid0IGNvbXBsZXRlbHkgcmVhZCBmaWxlICVzLiIsIGNlcnRfa2V5X3BhdGgp
Ow0KICAgICAgZmNsb3NlKGZwKTsNCiAgICAgIGZyZWV6KGtleV9wZW0pOw0K
ICAgICAgcmV0dXJuIDA7DQogICB9DQoNCiAgIGZjbG9zZShmcCk7DQoNCiAg
IGlmIChwYXNzd29yZCA9PSBOVUxMKQ0KICAgew0KICAgICAgcmV0ID0gd2Nf
UGVtVG9EZXIoa2V5X3BlbSwgKGxvbmcpbGVuZ3RoLCBQUklWQVRFS0VZX1RZ
UEUsDQogICAgICAgICAmZGVyX2J1ZmZlciwgTlVMTCwgTlVMTCwgTlVMTCk7
DQogICB9DQogICBlbHNlDQogICB7DQogICAgICBkZXJfYnVmZmVyID0gJmRl
Y3J5cHRlZF9kZXJfYnVmZmVyOw0KICAgICAgZGVyX2J1ZmZlci0+YnVmZmVy
ID0gZGVyX2RhdGE7DQogICAgICByZXQgPSB3Y19LZXlQZW1Ub0RlcihrZXlf
cGVtLCAoaW50KWxlbmd0aCwgZGVyX2J1ZmZlci0+YnVmZmVyLA0KICAgICAg
ICAgc2l6ZW9mKGRlcl9kYXRhKSwgcGFzc3dvcmQpOw0KICAgICAgaWYgKHJl
dCA8IDApDQogICAgICB7DQogICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVM
X0VSUk9SLA0KICAgICAgICAgICAgIkZhaWxlZCB0byBjb252ZXJ0IFBFTSBr
ZXkgJXMgaW50byBERVIgZm9ybWF0LiBFcnJvcjogJWxkIiwNCiAgICAgICAg
ICAgIGNlcnRfa2V5X3BhdGgsIHJldCk7DQogICAgICAgICBmcmVleihrZXlf
cGVtKTsNCiAgICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZGVy
X2J1ZmZlci0+bGVuZ3RoID0gKHdvcmQzMilyZXQ7DQogICB9DQoNCiAgIGZy
ZWV6KGtleV9wZW0pOw0KDQogICBpZiAocmV0IDwgMCkNCiAgIHsNCiAgICAg
IGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAiRmFpbGVk
IHRvIGNvbnZlcnQgYnVmZmVyIGludG8gREVSIGZvcm1hdCBmb3IgZmlsZSAl
cy4gRXJyb3IgPSAlbGQiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCwgcmV0
KTsNCiAgICAgIHJldHVybiAwOw0KICAgfQ0KDQogICBpZiAocnNhX2tleSkg
ew0KICAgcmV0ID0gd2NfUnNhUHJpdmF0ZUtleURlY29kZShkZXJfYnVmZmVy
LT5idWZmZXIsICZkZXJfaW5kZXgsIHJzYV9rZXksDQogICAgICBkZXJfYnVm
ZmVyLT5sZW5ndGgpOw0KICAgfSBlbHNlIHsNCiAgIHJldCA9IHdjX0VjY1By
aXZhdGVLZXlEZWNvZGUoZGVyX2J1ZmZlci0+YnVmZmVyLCAmZGVyX2luZGV4
LCBlY19rZXksDQogICAgICBkZXJfYnVmZmVyLT5sZW5ndGgpOw0KICAgfQ0K
ICAgaWYgKHBhc3N3b3JkID09IE5VTEwpDQogICB7DQogICAgICBmcmVleihk
ZXJfYnVmZmVyKTsNCiAgIH0NCiAgIGlmIChyZXQgPCAwKQ0KICAgew0KICAg
ICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJGYWls
ZWQgdG8gZGVjb2RlIERFUiBidWZmZXIgaW50byBSU0Ega2V5IHN0cnVjdHVy
ZSBmb3IgJXMiLA0KICAgICAgICAgY2VydF9rZXlfcGF0aCk7DQogICAgICBy
ZXR1cm4gMDsNCiAgIH0NCg0KICAgcmV0dXJuIDE7DQp9DQoNCiNpZm5kZWYg
V09MRlNTTF9BTFRfTkFNRVMNCiNlcnJvciB3b2xmU1NMIGxhY2tzIFN1Ympl
Y3QgQWx0ZXJuYXRpdmUgTmFtZSBzdXBwb3J0IChXT0xGU1NMX0FMVF9OQU1F
Uykgd2hpY2ggaXMgbWFuZGF0b3J5DQojZW5kaWYNCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioNCiAqDQogKiBGdW5jdGlvbiAgICA6ICBzZXRfc3ViamVj
dF9hbHRlcm5hdGl2ZV9uYW1lDQogKg0KICogRGVzY3JpcHRpb24gOiAgU2V0
cyB0aGUgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lIGV4dGVuc2lvbiB0bw0K
ICogICAgICAgICAgICAgICAgYSBjZXJ0IHVzaW5nIHRoZSBhd2Vzb21lICJB
UEkiIHByb3ZpZGVkIGJ5IHdvbGZTU0wuDQogKg0KICogUGFyYW1ldGVycyAg
Og0KICogICAgICAgICAgMSAgOiAgY2VydCA9IFRoZSBjZXJ0aWZpY2F0ZSB0
byBtb2RpZnkNCiAqICAgICAgICAgIDIgIDogIGhvc3RuYW1lID0gVGhlIGhv
c3RuYW1lIHRvIGFkZA0KICoNCiAqIFJldHVybnMgICAgIDogIDwwID0+IEVy
cm9yLg0KICogICAgICAgICAgICAgICAgIDAgPT4gSXQgd29ya2VkDQogKg0K
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgc2V0X3N1
YmplY3RfYWx0ZXJuYXRpdmVfbmFtZShzdHJ1Y3QgQ2VydCAqY2VydGlmaWNh
dGUsIGNvbnN0IGNoYXIgKmhvc3RuYW1lKQ0Kew0KICAgY29uc3Qgc2l6ZV90
IGhvc3RuYW1lX2xlbmd0aCA9IHN0cmxlbihob3N0bmFtZSk7DQoNCiAgIGlm
IChob3N0bmFtZV9sZW5ndGggPj0gMjUzKQ0KICAgew0KICAgICAgLyoNCiAg
ICAgICAqIFdlIGFwcGFyZW50bHkgb25seSBoYXZlIGEgYnl0ZSB0byByZXBy
ZXNlbnQgdGhlIGxlbmd0aA0KICAgICAgICogb2YgdGhlIHNlcXVlbmNlLg0K
ICAgICAgICovDQogICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLA0K
ICAgICAgICAgIkhvc3RuYW1lICclcycgaXMgdG9vIGxvbmcgdG8gc2V0IFN1
YmplY3QgQWx0ZXJuYXRpdmUgTmFtZSIsDQogICAgICAgICBob3N0bmFtZSk7
DQogICAgICByZXR1cm4gLTE7DQogICB9DQogICBjZXJ0aWZpY2F0ZS0+YWx0
TmFtZXNbMF0gPSAweDMwOyAvKiBTZXF1ZW5jZSAqLw0KICAgY2VydGlmaWNh
dGUtPmFsdE5hbWVzWzFdID0gKHVuc2lnbmVkIGNoYXIpaG9zdG5hbWVfbGVu
Z3RoICsgMjsNCg0KICAgY2VydGlmaWNhdGUtPmFsdE5hbWVzWzJdID0gMHg4
MjsgLyogRE5TIG5hbWUgKi8NCiAgIGNlcnRpZmljYXRlLT5hbHROYW1lc1sz
XSA9ICh1bnNpZ25lZCBjaGFyKWhvc3RuYW1lX2xlbmd0aDsNCiAgIG1lbWNw
eSgmY2VydGlmaWNhdGUtPmFsdE5hbWVzWzRdLCBob3N0bmFtZSwgaG9zdG5h
bWVfbGVuZ3RoKTsNCg0KICAgY2VydGlmaWNhdGUtPmFsdE5hbWVzU3ogPSAo
aW50KWhvc3RuYW1lX2xlbmd0aCArIDQ7DQoNCiAgIHJldHVybiAwOw0KfQ0K
DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqDQogKiBGdW5jdGlv
biAgICA6ICBnZW5lcmF0ZV9ob3N0X2NlcnRpZmljYXRlDQogKg0KICogRGVz
Y3JpcHRpb24gOiAgQ3JlYXRlcyBjZXJ0aWZpY2F0ZSBmaWxlIGluIHByZXNl
dHRlZCBkaXJlY3RvcnkuDQogKiAgICAgICAgICAgICAgICBJZiBjZXJ0aWZp
Y2F0ZSBhbHJlYWR5IGV4aXN0cywgbm8gb3RoZXIgY2VydGlmaWNhdGUNCiAq
ICAgICAgICAgICAgICAgIHdpbGwgYmUgY3JlYXRlZC4gU3ViamVjdCBvZiBj
ZXJ0aWZpY2F0ZSBpcyBuYW1lZA0KICogICAgICAgICAgICAgICAgYnkgY3Nw
LT5odHRwLT5ob3N0IGZyb20gcGFyYW1ldGVyLiBUaGlzIGZ1bmN0aW9uIGFs
c28NCiAqICAgICAgICAgICAgICAgIHRyaWdnZXJzIGdlbmVyYXRpbmcgb2Yg
cHJpdmF0ZSBrZXkgZm9yIG5ldyBjZXJ0aWZpY2F0ZS4NCiAqDQogKiBQYXJh
bWV0ZXJzICA6DQogKiAgICAgICAgICAxICA6ICBjc3AgPSBDdXJyZW50IGNs
aWVudCBzdGF0ZSAoYnVmZmVycywgaGVhZGVycywgZXRjLi4uKQ0KICogICAg
ICAgICAgMiAgOiAgY2VydGlmaWNhdGVfcGF0aCA9IFBhdGggdG8gdGhlIGNl
cnRmaWNhdGUgdG8gZ2VuZXJhdGUuDQogKiAgICAgICAgICAzICA6ICBjZXJ0
X2tleV9wYXRoID0gUGF0aCB0byB0aGUga2V5IHRvIGdlbmVyYXRlIGZvciB0
aGUNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRpZmlj
YXRlLg0KICoNCiAqIFJldHVybnMgICAgIDogIC0xID0+IEVycm9yIHdoaWxl
IGNyZWF0aW5nIGNlcnRpZmljYXRlLg0KICogICAgICAgICAgICAgICAgIDAg
PT4gQ2VydGlmaWNhdGUgYWxyZWFkeSBleGlzdHMuDQogKiAgICAgICAgICAg
ICAgICAgMSA9PiBDZXJ0aWZpY2F0ZSBjcmVhdGVkDQogKg0KICoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8NCnN0YXRpYyBpbnQgZ2VuZXJhdGVfaG9zdF9j
ZXJ0aWZpY2F0ZShzdHJ1Y3QgY2xpZW50X3N0YXRlICpjc3AsDQogICBjb25z
dCBjaGFyICpjZXJ0aWZpY2F0ZV9wYXRoLCBjb25zdCBjaGFyICpjZXJ0X2tl
eV9wYXRoKQ0Kew0KICAgc3RydWN0IENlcnQgY2VydGlmaWNhdGU7DQogICBS
c2FLZXkgY2Ffa2V5Ow0KICAgZWNjX2tleSBjZXJ0X2tleTsNCiAgIGludCBy
ZXQ7DQogICBieXRlIGNlcnRpZmljYXRlX2Rlcls0MDk2XTsNCiAgIGludCBk
ZXJfY2VydGlmaWNhdGVfbGVuZ3RoOw0KICAgYnl0ZSBjZXJ0aWZpY2F0ZV9w
ZW1bNDA5Nl07DQogICBpbnQgcGVtX2NlcnRpZmljYXRlX2xlbmd0aDsNCg0K
ICAgaWYgKGZpbGVfZXhpc3RzKGNlcnRpZmljYXRlX3BhdGgpID09IDEpDQog
ICB7DQogICAgICAvKiBUaGUgZmlsZSBleGlzdHMsIGJ1dCBpcyBpdCB2YWxp
ZD8gKi8NCiAgICAgIGlmIChzc2xfY2VydGlmaWNhdGVfaXNfaW52YWxpZChj
ZXJ0aWZpY2F0ZV9wYXRoKSkNCiAgICAgIHsNCiAgICAgICAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfQ09OTkVDVCwNCiAgICAgICAgICAgICJDZXJ0aWZpY2F0
ZSAlcyBpcyBubyBsb25nZXIgdmFsaWQuIFJlbW92aW5nIGl0LiIsDQogICAg
ICAgICAgICBjZXJ0aWZpY2F0ZV9wYXRoKTsNCiAgICAgICAgIGlmICh1bmxp
bmsoY2VydGlmaWNhdGVfcGF0aCkpDQogICAgICAgICB7DQogICAgICAgICAg
ICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLCAiRmFpbGVkIHRvIHVubGlu
ayAlczogJUUiLA0KICAgICAgICAgICAgICAgY2VydGlmaWNhdGVfcGF0aCk7
DQogICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICB9DQogICAgICAg
ICBpZiAodW5saW5rKGNlcnRfa2V5X3BhdGgpKQ0KICAgICAgICAgew0KICAg
ICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkZhaWxlZCB0
byB1bmxpbmsgJXM6ICVFIiwNCiAgICAgICAgICAgICAgIGNlcnRfa2V5X3Bh
dGgpOw0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgfQ0KICAg
ICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgcmV0dXJuIDA7
DQogICAgICB9DQogICB9DQogICBlbHNlDQogICB7DQogICAgICBsb2dfZXJy
b3IoTE9HX0xFVkVMX0NPTk5FQ1QsICJDcmVhdGluZyBuZXcgY2VydGlmaWNh
dGUgJXMiLA0KICAgICAgICAgY2VydGlmaWNhdGVfcGF0aCk7DQogICB9DQog
ICBpZiAoZW5mb3JjZV9zYW5lX2NlcnRpZmljYXRlX3N0YXRlKGNlcnRpZmlj
YXRlX3BhdGgsIGNlcnRfa2V5X3BhdGgpKQ0KICAgew0KICAgICAgcmV0dXJu
IC0xOw0KICAgfQ0KDQogICB3Y19lY2NfaW5pdCgmY2VydF9rZXkpOw0KICAg
d2NfSW5pdFJzYUtleSgmY2Ffa2V5LCBOVUxMKTsNCg0KICAgaWYgKGdlbmVy
YXRlX2NlcnRfa2V5KGNlcnRfa2V5X3BhdGgpID09IC0xKQ0KICAgew0KICAg
ICAgcmV0dXJuIC0xOw0KICAgfQ0KDQogICB3Y19Jbml0Q2VydCgmY2VydGlm
aWNhdGUpOw0KDQogICBzdHJuY3B5KGNlcnRpZmljYXRlLnN1YmplY3QuY291
bnRyeSwgQ0VSVF9QQVJBTV9DT1VOVFJZX0NPREUsIENUQ19OQU1FX1NJWkUp
Ow0KICAgc3RybmNweShjZXJ0aWZpY2F0ZS5zdWJqZWN0Lm9yZywgIlByaXZv
eHkiLCBDVENfTkFNRV9TSVpFKTsNCiAgIHN0cm5jcHkoY2VydGlmaWNhdGUu
c3ViamVjdC51bml0LCAiRGV2ZWxvcG1lbnQiLCBDVENfTkFNRV9TSVpFKTsN
CiAgIHN0cm5jcHkoY2VydGlmaWNhdGUuc3ViamVjdC5jb21tb25OYW1lLCBj
c3AtPmh0dHAtPmhvc3QsIENUQ19OQU1FX1NJWkUpOw0KICAgY2VydGlmaWNh
dGUuZGF5c1ZhbGlkID0gOTA7DQogICBjZXJ0aWZpY2F0ZS5zZWxmU2lnbmVk
ID0gMDsNCiAgIGNlcnRpZmljYXRlLnNpZ1R5cGUgPSBDVENfU0hBMjU2d1JT
QTsNCiAgIC8vY2VydGlmaWNhdGUuc2lnVHlwZSA9IENUQ19TSEF3RUNEU0E7
DQogICBpZiAoIWhvc3RfaXNfaXBfYWRkcmVzcyhjc3AtPmh0dHAtPmhvc3Qp
ICYmDQogICAgICAgc2V0X3N1YmplY3RfYWx0ZXJuYXRpdmVfbmFtZSgmY2Vy
dGlmaWNhdGUsIGNzcC0+aHR0cC0+aG9zdCkpDQogICB7DQogICAgICByZXQg
PSAtMTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgcmV0ID0gd2Nf
U2V0SXNzdWVyKCZjZXJ0aWZpY2F0ZSwgY3NwLT5jb25maWctPmNhX2NlcnRf
ZmlsZSk7DQogICBpZiAocmV0IDwgMCkNCiAgIHsNCiAgICAgIGxvZ19lcnJv
cihMT0dfTEVWRUxfRVJST1IsDQogICAgICAgICAiRmFpbGVkIHRvIHNldCBJ
c3N1ZXIgZmlsZSAlcyIsIGNzcC0+Y29uZmlnLT5jYV9jZXJ0X2ZpbGUpOw0K
ICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAg
IGlmIChsb2FkX2NlcnRfa2V5KGNlcnRfa2V5X3BhdGgsIE5VTEwsIE5VTEws
ICZjZXJ0X2tleSkgIT0gMSkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0df
TEVWRUxfRVJST1IsDQogICAgICAgICAiRmFpbGVkIHRvIGxvYWQgY2VydGlm
aWNhdGUga2V5ICVzIiwgY2VydF9rZXlfcGF0aCk7DQogICAgICByZXQgPSAt
MTsNCiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgLyogd29sZlNTTF9E
ZWJ1Z2dpbmdfT04oKTsgKi8NCiAgIGRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGgg
PSB3Y19NYWtlQ2VydCgmY2VydGlmaWNhdGUsIGNlcnRpZmljYXRlX2RlciwN
CiAgICAgIHNpemVvZihjZXJ0aWZpY2F0ZV9kZXIpLCBOVUxMLCAmY2VydF9r
ZXksICZ3b2xmc3NsX3JuZyk7DQogICAvKiB3b2xmU1NMX0RlYnVnZ2luZ19P
RkYoKTsgKi8NCg0KICAgaWYgKGRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGggPCAw
KQ0KICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkZh
aWxlZCB0byBtYWtlIGNlcnRpZmljYXRlIik7DQogICAgICByZXQgPSAtMTsN
CiAgICAgIGdvdG8gZXhpdDsNCiAgIH0NCg0KICAgaWYgKGxvYWRfY2VydF9r
ZXkoY3NwLT5jb25maWctPmNhX2tleV9maWxlLCBjc3AtPmNvbmZpZy0+Y2Ff
cGFzc3dvcmQsDQogICAgICAmY2Ffa2V5LCBOVUxMKSAhPSAxKQ0KICAgew0K
ICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAgICAgICJG
YWlsZWQgdG8gbG9hZCBDQSBrZXkgJXMiLCBjc3AtPmNvbmZpZy0+Y2Ffa2V5
X2ZpbGUpOw0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQog
ICB9DQoNCiAgIGRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGggPSB3Y19TaWduQ2Vy
dChjZXJ0aWZpY2F0ZS5ib2R5U3osIGNlcnRpZmljYXRlLnNpZ1R5cGUsDQog
ICAgICBjZXJ0aWZpY2F0ZV9kZXIsIHNpemVvZihjZXJ0aWZpY2F0ZV9kZXIp
LCAmY2Ffa2V5LCBOVUxMLCAmd29sZnNzbF9ybmcpOw0KICAgd2NfRnJlZVJz
YUtleSgmY2Ffa2V5KTsNCiAgIGlmIChkZXJfY2VydGlmaWNhdGVfbGVuZ3Ro
IDwgMCkNCiAgIHsNCiAgICAgIGxvZ19lcnJvcihMT0dfTEVWRUxfRVJST1Is
ICJGYWlsZWQgdG8gc2lnbiBjZXJ0aWZpY2F0ZSIpOw0KICAgICAgcmV0ID0g
LTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9DQoNCiAgIHBlbV9jZXJ0aWZp
Y2F0ZV9sZW5ndGggPSB3Y19EZXJUb1BlbShjZXJ0aWZpY2F0ZV9kZXIsDQog
ICAgICAod29yZDMyKWRlcl9jZXJ0aWZpY2F0ZV9sZW5ndGgsIGNlcnRpZmlj
YXRlX3BlbSwNCiAgICAgIHNpemVvZihjZXJ0aWZpY2F0ZV9wZW0pLCBDRVJU
X1RZUEUpOw0KICAgaWYgKHBlbV9jZXJ0aWZpY2F0ZV9sZW5ndGggPCAwKQ0K
ICAgew0KICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwNCiAgICAg
ICAgICJGYWlsZWQgdG8gY29udmVydCBjZXJ0aWZpY2F0ZSBmcm9tIERFUiB0
byBQRU0iKTsNCiAgICAgIHJldCA9IC0xOw0KICAgICAgZ290byBleGl0Ow0K
ICAgfQ0KICAgY2VydGlmaWNhdGVfcGVtW3BlbV9jZXJ0aWZpY2F0ZV9sZW5n
dGhdID0gJ1wwJzsNCg0KICAgaWYgKHdyaXRlX2NlcnRpZmljYXRlKGNlcnRp
ZmljYXRlX3BhdGgsIChjb25zdCBjaGFyKiljZXJ0aWZpY2F0ZV9wZW0pKQ0K
ICAgew0KICAgICAgcmV0ID0gLTE7DQogICAgICBnb3RvIGV4aXQ7DQogICB9
DQoNCiAgIHJldCA9IDE7DQoNCmV4aXQ6DQogICB3Y19lY2NfZnJlZSgmY2Vy
dF9rZXkpOw0KICAgd2NfRnJlZVJzYUtleSgmY2Ffa2V5KTsNCg0KICAgcmV0
dXJuIDE7DQoNCn0NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog
Kg0KICogRnVuY3Rpb24gICAgOiAgc3NsX2NydF92ZXJpZnlfaW5mbw0KICoN
CiAqIERlc2NyaXB0aW9uIDogIFJldHVybnMgYW4gaW5mb3JtYXRpb25hbCBz
dHJpbmcgYWJvdXQgdGhlIHZlcmlmaWNhdGlvbg0KICogICAgICAgICAgICAg
ICAgc3RhdHVzIG9mIGEgY2VydGlmaWNhdGUuDQogKg0KICogUGFyYW1ldGVy
cyAgOg0KICogICAgICAgICAgMSAgOiAgYnVmID0gQnVmZmVyIHRvIHdyaXRl
IHRvDQogKiAgICAgICAgICAyICA6ICBzaXplID0gTWF4aW11bSBzaXplIG9m
IGJ1ZmZlcg0KICogICAgICAgICAgMyAgOiAgY3NwID0gY2xpZW50IHN0YXRl
DQogKg0KICogUmV0dXJucyAgICAgOiAgTi9BDQogKg0KICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8NCmV4dGVybiB2b2lkIHNzbF9jcnRfdmVyaWZ5X2lu
Zm8oY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IGNsaWVudF9zdGF0
ZSAqY3NwKQ0Kew0KICAgc3RybmNweShidWYsIHdvbGZTU0xfWDUwOV92ZXJp
ZnlfY2VydF9lcnJvcl9zdHJpbmcoDQogICAgICBjc3AtPnNlcnZlcl9jZXJ0
X3ZlcmlmaWNhdGlvbl9yZXN1bHQpLCBzaXplKTsNCiAgIGJ1ZltzaXplIC0g
MV0gPSAwOw0KfQ0KDQoNCiNpZmRlZiBGRUFUVVJFX0dSQUNFRlVMX1RFUk1J
TkFUSU9ODQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKg0KICogRnVu
Y3Rpb24gICAgOiAgc3NsX3JlbGVhc2UNCiAqDQogKiBEZXNjcmlwdGlvbiA6
ICBSZWxlYXNlIGFsbCBTU0wgcmVzb3VyY2VzDQogKg0KICogUGFyYW1ldGVy
cyAgOg0KICoNCiAqIFJldHVybnMgICAgIDogIE4vQQ0KICoNCiAqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovDQpleHRlcm4gdm9pZCBzc2xfcmVsZWFzZSh2
b2lkKQ0Kew0KICAgaWYgKHdvbGZzc2xfaW5pdGlhbGl6ZWQgPT0gMSkNCiAg
IHsNCiAgICAgIHdjX0ZyZWVSbmcoJndvbGZzc2xfcm5nKTsNCiAgICAgIHdv
bGZTU0xfQ2xlYW51cCgpOw0KICAgfQ0KfQ0KI2VuZGlmIC8qIGRlZiBGRUFU
VVJFX0dSQUNFRlVMX1RFUk1JTkFUSU9OICovDQo=

---1463809792-111540969-1737912087=:9393
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Privoxy-users mailing list
[email protected]
https://lists.privoxy.org/mailman/listinfo/privoxy-users

---1463809792-111540969-1737912087=:9393--