www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/1999/04/12/22:13:58

Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm
Sender: cygwin-developers-owner AT sourceware DOT cygnus DOT com
Delivered-To: mailing list cygwin-developers AT sourceware DOT cygnus DOT com
From: fortinj AT ibm DOT net
Message-ID: <3712A8C8.F886188F@ibm.net>
Date: Mon, 12 Apr 1999 22:15:36 -0400
Reply-To: fortinj AT ibm DOT net
X-Sender: "" <@smtp-gw01.ny.us.ibm.net> (Unverified)
X-Mailer: Mozilla 4.5 [en]C-gatewaynet (Win98; U)
X-Accept-Language: en
MIME-Version: 1.0
To: "cygwin-developers AT sourceware DOT cygnus DOT com"
<cygwin-developers AT sourceware DOT cygnus DOT com>
Subject: Pthread additions (more functions)

This is a multi-part message in MIME format.
--------------ADCC43FCC770ADCA81C23417
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

All,

   The attached patches (tarred) against the 3/28 snapshot implement the
following:

pthread_exit()
pthread_join()
pthread_detach()
pthread_suspend()
pthread_continue()

   All have worked correctly, and also seem to return proper error
conditions.

   I will be adding further as time allows.  If there are preferences or
priorities,
please let me know.
 
   Is anybody else working on pthread implementation?

   Does anyone know for certain if the newest snapshots of gdb support
win32 threads?  I compiled the latest and it didn't seem to.

Thanks,
John Fortin
fortinj AT ibm DOT net
--------------ADCC43FCC770ADCA81C23417
Content-Type: application/x-tar;
 name="pthread-patch.tar"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="pthread-patch.tar"

Y3lnd2luLmRpbi1wYXRjaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAA
ICAgNzY0IAAgICAxNDQgACAgICAgICAxNTc0ICA2NzA0NTIzMDE0ICAxMzIxNAAgMAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGpvaG4A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZXZlcnlvbmUAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKiogY3lnd2luLmRpbi1vcmlnCVN1biBBcHIg
MDQgMjM6Mjg6MzIgMTk5OQ0KLS0tIGN5Z3dpbi5kaW4JVHVlIEFwciAwNiAyMDo0MToxOCAx
OTk5DQoqKioqKioqKioqKioqKiogc2NhbmRpcg0KKioqIDU0Niw1NTMgKioqKg0KICBfc2Nh
bmRpciA9IHNjYW5kaXINCiAgc2NhbmYNCiAgX3NjYW5mID0gc2NhbmYNCi0gc2Vla2Rpcg0K
LSBfc2Vla2RpciA9IHNlZWtkaXINCiAgc2V0YnVmDQogIF9zZXRidWYgPSBzZXRidWYNCiAg
c2V0ZHRhYmxlc2l6ZQ0KLS0tIDU0Niw1NTEgLS0tLQ0KKioqKioqKioqKioqKioqIHRjc2V0
YXR0cg0KKioqIDcyNyw3MzQgKioqKg0KICBfdGNzZXRhdHRyID0gdGNzZXRhdHRyDQogIHRj
c2V0cGdycA0KICBfdGNzZXRwZ3JwID0gdGNzZXRwZ3JwDQotIHRlbGxkaXINCi0gX3RlbGxk
aXIgPSB0ZWxsZGlyDQogIHRlbXBuYW0NCiAgX3RlbXBuYW0gPSB0ZW1wbmFtDQogIHRpbWUN
Ci0tLSA3MjUsNzMwIC0tLS0NCioqKioqKioqKioqKioqKiBjeWd3aW4zMl9pbnRlcm5hbCA9
IGN5Z3dpbl9pbnRlcm5hbA0KKioqIDk4NCw5ODkgKioqKg0KLS0tIDk4MCw5ODkgLS0tLQ0K
ICBAUFRIX0FMTE9XQHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUNCiAgQFBUSF9BTExPV0Bw
dGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplDQogIEBQVEhfQUxMT1dAcHRocmVhZF9leGl0DQor
IEBQVEhfQUxMT1dAcHRocmVhZF9qb2luDQorIEBQVEhfQUxMT1dAcHRocmVhZF9kZXRhY2gN
CisgQFBUSF9BTExPV0BwdGhyZWFkX3N1c3BlbmQNCisgQFBUSF9BTExPV0BwdGhyZWFkX2Nv
bnRpbnVlDQogIEBQVEhfQUxMT1dAcHRocmVhZF9rZXlfY3JlYXRlDQogIEBQVEhfQUxMT1dA
cHRocmVhZF9rZXlfZGVsZXRlDQogIEBQVEhfQUxMT1dAcHRocmVhZF9zZXRzcGVjaWZpYw0K
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHRocmVhZC5jYy1wYXRjaAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAADEwMDY0NCAAICAgNzY0IAAgICAxNDQgACAgICAgICAyNzcwICA2
NzA0NTIzMDEyICAxMzE1MwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAB1c3RhciAgAGpvaG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZXZl
cnlvbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKiog
cHRocmVhZC5jYy1vcmlnCVN1biBBcHIgMDQgMjM6MTM6NTQgMTk5OQ0KLS0tIHB0aHJlYWQu
Y2MJVHVlIEFwciAwNiAyMToyNToyNiAxOTk5DQoqKioqKioqKioqKioqKiogcHRocmVhZF9h
dHRyX2dldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyXw0KKioqIDUyLDYyICoqKioNCiAgDQog
IC8qIFRocmVhZCBFeGl0ICovDQogIGludA0KISBwdGhyZWFkX2V4aXQgKHZvaWQgKnZhbHVl
X3B0cikNCiAgew0KICAgIHJldHVybiBfX3B0aHJlYWRfZXhpdCAodmFsdWVfcHRyKTsNCiAg
fQ0KICANCiAgdW5zaWduZWQgbG9uZw0KICBwdGhyZWFkX2dldHNlcXVlbmNlX25wIChwdGhy
ZWFkX3QgKiB0aHJlYWQpDQogIHsNCi0tLSA1Miw4NiAtLS0tDQogIA0KICAvKiBUaHJlYWQg
RXhpdCAqLw0KICBpbnQNCiEgcHRocmVhZF9leGl0ICh2b2lkICogdmFsdWVfcHRyKQ0KICB7
DQogICAgcmV0dXJuIF9fcHRocmVhZF9leGl0ICh2YWx1ZV9wdHIpOw0KICB9DQogIA0KKyBp
bnQNCisgcHRocmVhZF9qb2luKHB0aHJlYWRfdCB0aHJlYWQsIHZvaWQgKipyZXR1cm5fdmFs
KQ0KKyB7DQorICAgcmV0dXJuIF9fcHRocmVhZF9qb2luKCZ0aHJlYWQsICh2b2lkICoqKXJl
dHVybl92YWwpOw0KKyB9DQorIA0KKyBpbnQNCisgcHRocmVhZF9kZXRhY2gocHRocmVhZF90
IHRocmVhZCkNCisgew0KKyAgIHJldHVybiBfX3B0aHJlYWRfZGV0YWNoKCZ0aHJlYWQpOw0K
KyB9DQorIA0KKyBpbnQNCisgcHRocmVhZF9zdXNwZW5kKHB0aHJlYWRfdCB0aHJlYWQpDQor
IHsNCisgICAgcmV0dXJuIF9fcHRocmVhZF9zdXNwZW5kKCZ0aHJlYWQpOw0KKyB9DQorIA0K
KyBpbnQNCisgcHRocmVhZF9jb250aW51ZShwdGhyZWFkX3QgdGhyZWFkKQ0KKyB7DQorICAg
IHJldHVybiBfX3B0aHJlYWRfY29udGludWUoJnRocmVhZCk7DQorIH0NCisgDQogIHVuc2ln
bmVkIGxvbmcNCiAgcHRocmVhZF9nZXRzZXF1ZW5jZV9ucCAocHRocmVhZF90ICogdGhyZWFk
KQ0KICB7DQoqKioqKioqKioqKioqKiogcHRocmVhZF9zaWdtYXNrIChpbnQgb3BlcmF0aW9u
LCBjb25zdCBzaQ0KKioqIDEwMywxMTggKioqKg0KICANCiAgLyogIElEICovDQogIA0KISBw
dGhyZWFkX3QgDQogIHB0aHJlYWRfc2VsZiAoKQ0KICB7DQogICAgcmV0dXJuIF9fcHRocmVh
ZF9zZWxmICgpOw0KICB9DQogIA0KICBpbnQNCiEgcHRocmVhZF9lcXVhbCAocHRocmVhZF90
ICogdDEsIHB0aHJlYWRfdCAqIHQyKQ0KICB7DQohICAgcmV0dXJuIF9fcHRocmVhZF9lcXVh
bCAodDEsIHQyKTsNCiAgfQ0KICANCiAgLyogTXV0ZXhlcyAgKi8NCi0tLSAxMjcsMTQyIC0t
LS0NCiAgDQogIC8qICBJRCAqLw0KICANCiEgcHRocmVhZF90DQogIHB0aHJlYWRfc2VsZiAo
KQ0KICB7DQogICAgcmV0dXJuIF9fcHRocmVhZF9zZWxmICgpOw0KICB9DQogIA0KICBpbnQN
CiEgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IHQxLCBwdGhyZWFkX3QgdDIpDQogIHsNCiEg
ICByZXR1cm4gX19wdGhyZWFkX2VxdWFsICggJnQxLCAmdDIpOw0KICB9DQogIA0KICAvKiBN
dXRleGVzICAqLw0KAAAAAAAAAAB0aHJlYWQuY2MtcGF0Y2gAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAMTAwNjQ0IAAgICA3NjQgACAgIDE0NCAAICAgICAgMzcwNjUgIDY3MDQ1
MjMwMTIgIDEzMDIwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAHVzdGFyICAAam9obgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABldmVyeW9u
ZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiB0aHJl
YWQuY2Mtb3JpZwlTdW4gQXByIDA0IDIzOjE0OjEyIDE5OTkNCi0tLSB0aHJlYWQuY2MJVHVl
IEFwciAwNiAyMzo0NToxMCAxOTk5DQoqKioqKioqKioqKioqKiogX3JlZW50X3dpbnN1cCAo
KQ0KKioqIDg5LDk1ICoqKioNCiAgICByZXR1cm4gX3ItPl93aW5zdXA7DQogIH07DQogIA0K
ISB2b2lkIA0KICBTZXRSZXNvdXJjZUxvY2sgKGludCBfcmVzX2lkLCBpbnQgX21vZGUsIGNv
bnN0IGNoYXIgKl9mdW5jdGlvbikNCiAgew0KICAjaWYgMA0KLS0tIDg5LDk1IC0tLS0NCiAg
ICByZXR1cm4gX3ItPl93aW5zdXA7DQogIH07DQogIA0KISB2b2lkDQogIFNldFJlc291cmNl
TG9jayAoaW50IF9yZXNfaWQsIGludCBfbW9kZSwgY29uc3QgY2hhciAqX2Z1bmN0aW9uKQ0K
ICB7DQogICNpZiAwDQoqKioqKioqKioqKioqKiogU2V0UmVzb3VyY2VMb2NrIChpbnQgX3Jl
c19pZCwgaW50IF9tb2RlLA0KKioqIDEwNSwxMTEgKioqKg0KICAjZW5kaWYNCiAgfQ0KICAN
CiEgdm9pZCANCiAgUmVsZWFzZVJlc291cmNlTG9jayAoaW50IF9yZXNfaWQsIGludCBfbW9k
ZSwgY29uc3QgY2hhciAqX2Z1bmN0aW9uKQ0KICB7DQogICNpZiAwDQotLS0gMTA1LDExMSAt
LS0tDQogICNlbmRpZg0KICB9DQogIA0KISB2b2lkDQogIFJlbGVhc2VSZXNvdXJjZUxvY2sg
KGludCBfcmVzX2lkLCBpbnQgX21vZGUsIGNvbnN0IGNoYXIgKl9mdW5jdGlvbikNCiAgew0K
ICAjaWYgMA0KKioqKioqKioqKioqKioqIFJlbGVhc2VSZXNvdXJjZUxvY2sgKGludCBfcmVz
X2lkLCBpbnQgX20NCioqKiAxMjUsMTMxICoqKioNCiAgfTsNCiAgDQogICNpZmRlZiBfQ1lH
X1RIUkVBRF9GQUlMU0FGRQ0KISB2b2lkIA0KICBBc3NlcnRSZXNvdXJjZU93bmVyIChpbnQg
X3Jlc19pZCwgaW50IF9tb2RlKQ0KICB7DQogIA0KLS0tIDEyNSwxMzEgLS0tLQ0KICB9Ow0K
ICANCiAgI2lmZGVmIF9DWUdfVEhSRUFEX0ZBSUxTQUZFDQohIHZvaWQNCiAgQXNzZXJ0UmVz
b3VyY2VPd25lciAoaW50IF9yZXNfaWQsIGludCBfbW9kZSkNCiAgew0KICANCioqKioqKioq
KioqKioqKiBGaW5kICh2b2lkICpfdmFsdWUsIGludCAoKmNvbXApICh2b2lkICosDQoqKiog
MTk0LDIwMCAqKioqDQogICAgICB7DQogICAgICAgIGN1cnJlbnQgPSBfbGlzdC0+aXRlbXNb
X2luZGV4XTsNCiAgICAgICAgaWYgKGN1cnJlbnQtPnVzZWQgJiYgY29tcCAoY3VycmVudCwg
X3ZhbHVlKSkNCiEgCWJyZWFrOw0KICAgICAgICBjdXJyZW50ID0gTlVMTDsNCiAgICAgIH07
DQogICAgcmV0dXJuIGN1cnJlbnQ7DQotLS0gMTk0LDIwMCAtLS0tDQogICAgICB7DQogICAg
ICAgIGN1cnJlbnQgPSBfbGlzdC0+aXRlbXNbX2luZGV4XTsNCiAgICAgICAgaWYgKGN1cnJl
bnQtPnVzZWQgJiYgY29tcCAoY3VycmVudCwgX3ZhbHVlKSkNCiEgICAgICAgICBicmVhazsN
CiAgICAgICAgY3VycmVudCA9IE5VTEw7DQogICAgICB9Ow0KICAgIHJldHVybiBjdXJyZW50
Ow0KKioqKioqKioqKioqKioqIEZpbmQgKE1UaXRlbSAmIF9pdGVtLCBNVExpc3QgKiBfbGlz
dCkNCioqKiAyMDksMjE1ICoqKioNCiAgICAgIHsNCiAgICAgICAgY3VycmVudCA9IF9saXN0
LT5pdGVtc1tfaW5kZXhdOw0KICAgICAgICBpZiAoY3VycmVudC0+dXNlZCAmJiBjdXJyZW50
ID09ICZfaXRlbSkNCiEgCWJyZWFrOw0KICAgICAgfTsNCiAgICByZXR1cm4gKF9pbmRleCA9
PSBfbGlzdC0+aW5kZXggPyAtMSA6IF9pbmRleCk7DQogIH07DQotLS0gMjA5LDIxNSAtLS0t
DQogICAgICB7DQogICAgICAgIGN1cnJlbnQgPSBfbGlzdC0+aXRlbXNbX2luZGV4XTsNCiAg
ICAgICAgaWYgKGN1cnJlbnQtPnVzZWQgJiYgY3VycmVudCA9PSAmX2l0ZW0pDQohICAgICAg
ICAgYnJlYWs7DQogICAgICB9Ow0KICAgIHJldHVybiAoX2luZGV4ID09IF9saXN0LT5pbmRl
eCA/IC0xIDogX2luZGV4KTsNCiAgfTsNCioqKioqKioqKioqKioqKiBpbnQgTVRpbnRlcmZh
Y2U6Og0KKioqIDIxOCwyMjQgKioqKg0KICBGaW5kTmV4dFVudXNlZCAoTVRMaXN0ICogX2xp
c3QpDQogIHsNCiAgICByZWdpc3RlciBpbnQgaSA9IDA7DQohICAgZm9yICg7IGkgPCBfbGlz
dC0+aW5kZXggJiYgX2xpc3QtPml0ZW1zW2ldICE9IE5VTEwgJiYgX2xpc3QtPml0ZW1zW2ld
LT51c2VkOyBpKyspOw0KICAgIHJldHVybiBpOw0KICB9Ow0KICANCi0tLSAyMTgsMjI0IC0t
LS0NCiAgRmluZE5leHRVbnVzZWQgKE1UTGlzdCAqIF9saXN0KQ0KICB7DQogICAgcmVnaXN0
ZXIgaW50IGkgPSAwOw0KISAgIGZvciAoOyBpIDwgX2xpc3QtPmluZGV4ICYmIF9saXN0LT5p
dGVtc1tpXSAhPSBOVUxMICYmIF9saXN0LT5pdGVtc1tpXS0+dXNlZCAmJiBfbGlzdC0+aXRl
bXNbaV0tPmpvaW5hYmxlICE9ICdZJzsgIGkrKyk7DQogICAgcmV0dXJuIGk7DQogIH07DQog
IA0KKioqKioqKioqKioqKioqIFNldEl0ZW0gKGludCBfaW5kZXgsIE1UaXRlbSAqIF9pdGVt
LCBNVEwNCioqKiAyMzYsMjQ4ICoqKioNCiAgICByZXR1cm4gKF9pbmRleCA8IF9saXN0LT5p
bmRleCA/IF9saXN0LT5pdGVtc1tfaW5kZXhdID0gX2l0ZW0gOiBOVUxMKTsNCiAgfTsNCiAg
DQohIGludCANCiAgQ21wUHRocmVhZE9iaiAodm9pZCAqX2ksIHZvaWQgKl92YWx1ZSkNCiAg
ew0KICAgIHJldHVybiAoKE1UaXRlbSAqKSBfaSktPklkICgpID09ICooaW50ICopIF92YWx1
ZTsNCiAgfTsNCiAgDQohIGludCANCiAgQ21wVGhyZWFkSWQgKHZvaWQgKl9pLCB2b2lkICpf
aWQpDQogIHsNCiAgICByZXR1cm4gKChUaHJlYWRJdGVtICopIF9pKS0+dGhyZWFkX2lkID09
ICooRFdPUkQgKikgX2lkOw0KLS0tIDIzNiwyNDggLS0tLQ0KICAgIHJldHVybiAoX2luZGV4
IDwgX2xpc3QtPmluZGV4ID8gX2xpc3QtPml0ZW1zW19pbmRleF0gPSBfaXRlbSA6IE5VTEwp
Ow0KICB9Ow0KICANCiEgaW50DQogIENtcFB0aHJlYWRPYmogKHZvaWQgKl9pLCB2b2lkICpf
dmFsdWUpDQogIHsNCiAgICByZXR1cm4gKChNVGl0ZW0gKikgX2kpLT5JZCAoKSA9PSAqKGlu
dCAqKSBfdmFsdWU7DQogIH07DQogIA0KISBpbnQNCiAgQ21wVGhyZWFkSWQgKHZvaWQgKl9p
LCB2b2lkICpfaWQpDQogIHsNCiAgICByZXR1cm4gKChUaHJlYWRJdGVtICopIF9pKS0+dGhy
ZWFkX2lkID09ICooRFdPUkQgKikgX2lkOw0KKioqKioqKioqKioqKioqIENyZWF0ZVRocmVh
ZCAocHRocmVhZF90ICogdCwgVEZEIChmdW5jKSwNCioqKiAzMjQsMzMxICoqKioNCiAgICAg
IGl0ZW0gPSAoVGhyZWFkSXRlbSAqKSBTZXRJdGVtIChpLCBuZXcgVGhyZWFkSXRlbSAoKSwg
JnRocmVhZGxpc3QpOw0KICAgIGlmICghaXRlbSkNCiAgICAgIHN5c3RlbV9wcmludGYgKCJ0
aHJlYWQgY3JlYXRpb24gZmFpbGVkIik7DQotICAgaXRlbS0+dXNlZCA9IHRydWU7DQogIA0K
ICAgIGl0ZW0tPmZ1bmN0aW9uID0gZnVuYzsNCiAgICBpdGVtLT5hcmcgPSBhcmc7DQogICAg
aXRlbS0+YXR0ciA9IGE7DQotLS0gMzI0LDMzMSAtLS0tDQogICAgICBpdGVtID0gKFRocmVh
ZEl0ZW0gKikgU2V0SXRlbSAoaSwgbmV3IFRocmVhZEl0ZW0gKCksICZ0aHJlYWRsaXN0KTsN
CiAgICBpZiAoIWl0ZW0pDQogICAgICBzeXN0ZW1fcHJpbnRmICgidGhyZWFkIGNyZWF0aW9u
IGZhaWxlZCIpOw0KICANCisgICBpdGVtLT51c2VkID0gdHJ1ZTsNCiAgICBpdGVtLT5mdW5j
dGlvbiA9IGZ1bmM7DQogICAgaXRlbS0+YXJnID0gYXJnOw0KICAgIGl0ZW0tPmF0dHIgPSBh
Ow0KKioqKioqKioqKioqKioqIHRocmVhZF9pbml0X3dyYXBwZXIgKHZvaWQgKl9hcmcpDQoq
KiogNDc5LDQ4OCAqKioqDQogICAgc3RydWN0IF9yZWVudCBsb2NhbF9jbGliOw0KICANCiAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIF9zaWdzW05TSUddOw0KISAgIHNpZ3NldF90IF9zaWdfbWFz
azsJCS8qIG9uZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgdG8gaWdub3JlLiAqLw0KICAgIExPTkcg
X3NpZ3RvZG9bTlNJRyArIF9fU0lHT0ZGU0VUXTsNCiAgDQohIC8vIHNldHVwIHNpZ25hbCBz
dHJ1Y3R1cmVzIA0KICAgIHRocmVhZC0+c2lncyA9IF9zaWdzOw0KICAgIHRocmVhZC0+c2ln
bWFzayA9ICZfc2lnX21hc2s7DQogICAgdGhyZWFkLT5zaWd0b2RvID0gX3NpZ3RvZG87DQot
LS0gNDc5LDQ4OCAtLS0tDQogICAgc3RydWN0IF9yZWVudCBsb2NhbF9jbGliOw0KICANCiAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIF9zaWdzW05TSUddOw0KISAgIHNpZ3NldF90IF9zaWdfbWFz
azsgICAgICAgICAgIC8qIG9uZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgdG8gaWdub3JlLiAqLw0K
ICAgIExPTkcgX3NpZ3RvZG9bTlNJRyArIF9fU0lHT0ZGU0VUXTsNCiAgDQohIC8vIHNldHVw
IHNpZ25hbCBzdHJ1Y3R1cmVzDQogICAgdGhyZWFkLT5zaWdzID0gX3NpZ3M7DQogICAgdGhy
ZWFkLT5zaWdtYXNrID0gJl9zaWdfbWFzazsNCiAgICB0aHJlYWQtPnNpZ3RvZG8gPSBfc2ln
dG9kbzsNCioqKioqKioqKioqKioqKiB0aHJlYWRfaW5pdF93cmFwcGVyICh2b2lkICpfYXJn
KQ0KKioqIDUxOCw1MjkgKioqKg0KICANCiAgLy8gRklYIE1FIDogY2xlYW51cCBjb2RlDQog
IA0KISAgIHRocmVhZC0+dXNlZCA9IGZhbHNlOwkJLy8gcmVsZWFzZSB0aHJlYWQgZW50cnkN
CiEgDQogICAgcmV0dXJuIHJldDsNCiAgfQ0KICANCiEgaW50IA0KICBfX3B0aHJlYWRfY3Jl
YXRlIChwdGhyZWFkX3QgKiB0aHJlYWQsIGNvbnN0IHB0aHJlYWRfYXR0cl90ICogYXR0ciwg
VEZEIChzdGFydF9yb3V0aW5lKSwgdm9pZCAqYXJnKQ0KICB7DQogICAgU2V0UmVzb3VyY2VM
b2NrIChMT0NLX1RIUkVBRF9MSVNULCBXUklURV9MT0NLIHwgUkVBRF9MT0NLLCAiX19wdGhy
ZWFkX2NyZWF0ZSIpOw0KLS0tIDUxOCw1MjkgLS0tLQ0KICANCiAgLy8gRklYIE1FIDogY2xl
YW51cCBjb2RlDQogIA0KISAvLyAgdGhyZWFkLT51c2VkID0gZmFsc2U7ICAgICAgICAgLy8g
cmVsZWFzZSB0aHJlYWQgZW50cnkNCiEgICAgIHRocmVhZC0+cmV0dXJuX3B0ciA9IHJldDsN
CiAgICByZXR1cm4gcmV0Ow0KICB9DQogIA0KISBpbnQNCiAgX19wdGhyZWFkX2NyZWF0ZSAo
cHRocmVhZF90ICogdGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIFRGRCAo
c3RhcnRfcm91dGluZSksIHZvaWQgKmFyZykNCiAgew0KICAgIFNldFJlc291cmNlTG9jayAo
TE9DS19USFJFQURfTElTVCwgV1JJVEVfTE9DSyB8IFJFQURfTE9DSywgIl9fcHRocmVhZF9j
cmVhdGUiKTsNCioqKioqKioqKioqKioqKiBfX3B0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3Qg
KiB0aHJlYWQsIGNvDQoqKiogNTM5LDU4NSAqKioqDQogICAgICAgIGl0ZW0gPSBNVF9JTlRF
UkZBQ0UtPkNyZWF0ZVRocmVhZCAodGhyZWFkLCBzdGFydF9yb3V0aW5lLCBhcmcsIGEpOw0K
ICAgICAgfTsNCiAgDQogICAgQ0hFQ0tJVEVNIChMT0NLX1RIUkVBRF9MSVNULCBXUklURV9M
T0NLIHwgUkVBRF9MT0NLLCAiX19wdGhyZWFkX2NyZWF0ZSIpDQogIA0KISAgICAgUmVsZWFz
ZVJlc291cmNlTG9jayAoTE9DS19USFJFQURfTElTVCwgV1JJVEVfTE9DSyB8IFJFQURfTE9D
SywgIl9fcHRocmVhZF9jcmVhdGUiKTsNCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGlu
dCANCiAgX19wdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKiBhdHRyKQ0KICB7
DQogICAgYXR0ci0+c3RhY2tzaXplID0gMDsNCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQoh
IGludCANCiAgX19wdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAq
IGF0dHIsIHNpemVfdCBzaXplKQ0KICB7DQogICAgYXR0ci0+c3RhY2tzaXplID0gc2l6ZTsN
CiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGludCANCiAgX19wdGhyZWFkX2F0dHJfZ2V0
c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCAqIHNpemUpDQogIHsN
CiAgICAqc2l6ZSA9IGF0dHItPnN0YWNrc2l6ZTsNCiAgICByZXR1cm4gMDsNCiAgfTsNCiAg
DQohIGludCANCiAgX19wdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKiBh
dHRyKQ0KICB7DQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQgDQogIF9fcHRocmVh
ZF9leGl0ICh2b2lkICp2YWx1ZV9wdHIpDQogIHsNCiEgICBOT1RfSU1QICgiX3B0aHJlYWRf
ZXhpdFxuIik7DQogIH07DQogIA0KICANCiEgdW5zaWduZWQgbG9uZyANCiAgX19wdGhyZWFk
X2dldHNlcXVlbmNlX25wIChwdGhyZWFkX3QgKiB0aHJlYWQpDQogIHsNCiAgICBHRVRUSFJF
QUQgKCJfX3B0aHJlYWRfZ2V0c2VxdWVuY2VfbnAiKTsNCi0tLSA1MzksNjY3IC0tLS0NCiAg
ICAgICAgaXRlbSA9IE1UX0lOVEVSRkFDRS0+Q3JlYXRlVGhyZWFkICh0aHJlYWQsIHN0YXJ0
X3JvdXRpbmUsIGFyZywgYSk7DQogICAgICB9Ow0KICANCisgDQorIA0KICAgIENIRUNLSVRF
TSAoTE9DS19USFJFQURfTElTVCwgV1JJVEVfTE9DSyB8IFJFQURfTE9DSywgIl9fcHRocmVh
ZF9jcmVhdGUiKQ0KICANCiEgICBSZWxlYXNlUmVzb3VyY2VMb2NrIChMT0NLX1RIUkVBRF9M
SVNULCBXUklURV9MT0NLIHwgUkVBRF9MT0NLLCAiX19wdGhyZWFkX2NyZWF0ZSIpOw0KICAg
IHJldHVybiAwOw0KICB9Ow0KICANCiEgaW50DQogIF9fcHRocmVhZF9hdHRyX2luaXQgKHB0
aHJlYWRfYXR0cl90ICogYXR0cikNCiAgew0KICAgIGF0dHItPnN0YWNrc2l6ZSA9IDA7DQog
ICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQNCiAgX19wdGhyZWFkX2F0dHJfc2V0c3Rh
Y2tzaXplIChwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBzaXplKQ0KICB7DQogICAg
YXR0ci0+c3RhY2tzaXplID0gc2l6ZTsNCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGlu
dA0KICBfX3B0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICogYXR0
ciwgc2l6ZV90ICogc2l6ZSkNCiAgew0KICAgICpzaXplID0gYXR0ci0+c3RhY2tzaXplOw0K
ICAgIHJldHVybiAwOw0KICB9Ow0KICANCiEgaW50DQogIF9fcHRocmVhZF9hdHRyX2Rlc3Ry
b3kgKHB0aHJlYWRfYXR0cl90ICogYXR0cikNCiAgew0KICAgIHJldHVybiAwOw0KICB9Ow0K
ICANCiEgaW50DQogIF9fcHRocmVhZF9leGl0ICh2b2lkICp2YWx1ZV9wdHIpDQogIHsNCiEg
ICBUaHJlYWRJdGVtICppdGVtID0gTVRfSU5URVJGQUNFLT5HZXRDYWxsaW5nVGhyZWFkKCk7
DQohICAgaXRlbS0+cmV0dXJuX3B0ciA9IHZhbHVlX3B0cjsNCiEgICBFeGl0VGhyZWFkKDAp
Ow0KISAgIHJldHVybiAwOw0KISB9DQohIA0KISBpbnQNCiEgX19wdGhyZWFkX2pvaW4ocHRo
cmVhZF90ICogdGhyZWFkLCB2b2lkICoqcmV0dXJuX3ZhbCkNCiEgew0KISAgIFRocmVhZEl0
ZW0gKml0ZW09dXNlcl9kYXRhLT50aHJlYWRpbnRlcmZhY2UtPkdldFRocmVhZCh0aHJlYWQp
Ow0KISANCiEgDQohICAgaWYgKCFpdGVtKQ0KISAgICAgIHJldHVybiBFU1JDSDsNCiEgDQoh
ICAgaWYgKGl0ZW0tPmpvaW5hYmxlID09ICdOJykNCiEgICB7DQohICAgICAgaWYgKHJldHVy
bl92YWwpDQohICAgICAgICAgKnJldHVybl92YWwgPSBOVUxMOw0KISAgICAgIHJldHVybiBF
SU5WQUw7DQohICAgfQ0KISAgIGVsc2UNCiEgICB7DQohICAgICAgaXRlbS0+am9pbmFibGUg
PSAnTic7DQohICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCgoSEFORExFKSp0aHJlYWQsIElO
RklOSVRFKTsNCiEgICAgICBpZiAocmV0dXJuX3ZhbCkNCiEgICAgICAgICAqcmV0dXJuX3Zh
bCA9IGl0ZW0tPnJldHVybl9wdHI7DQohICAgfS8qIEVuZCBpZiovDQohIA0KISAgIHJldHVy
biAwOw0KICB9Ow0KICANCisgaW50DQorIF9fcHRocmVhZF9kZXRhY2gocHRocmVhZF90ICog
dGhyZWFkKQ0KKyB7DQorICAgVGhyZWFkSXRlbSAqaXRlbT11c2VyX2RhdGEtPnRocmVhZGlu
dGVyZmFjZS0+R2V0VGhyZWFkKHRocmVhZCk7DQorICAgaWYgKCFpdGVtKQ0KKyAgICAgIHJl
dHVybiBFU1JDSDsNCisgDQorICAgaWYgKGl0ZW0tPmpvaW5hYmxlID09ICdOJykNCisgICB7
DQorICAgICAgaXRlbS0+cmV0dXJuX3B0ciA9IE5VTEw7DQorICAgICAgcmV0dXJuIEVJTlZB
TDsNCisgICB9DQogIA0KISAgIGl0ZW0tPmpvaW5hYmxlID0gJ04nOw0KISAgIHJldHVybiAw
Ow0KISB9DQohIA0KISBpbnQNCiEgX19wdGhyZWFkX3N1c3BlbmQocHRocmVhZF90ICogdGhy
ZWFkKQ0KISB7DQohICAgVGhyZWFkSXRlbSAqaXRlbT11c2VyX2RhdGEtPnRocmVhZGludGVy
ZmFjZS0+R2V0VGhyZWFkKHRocmVhZCk7DQohICAgaWYgKCFpdGVtKQ0KISAgICAgIHJldHVy
biBFU1JDSDsNCiEgDQohICAgaWYgKGl0ZW0tPnN1c3BlbmRlZCA9PSBmYWxzZSkNCiEgICB7
DQohICAgICAgaXRlbS0+c3VzcGVuZGVkID0gdHJ1ZTsNCiEgICAgICBTdXNwZW5kVGhyZWFk
KCAoSEFORExFKSp0aHJlYWQpOw0KISAgIH0NCiEgDQohICAgcmV0dXJuIDA7DQohIH0NCiEg
DQohIA0KISBpbnQNCiEgX19wdGhyZWFkX2NvbnRpbnVlKHB0aHJlYWRfdCAqIHRocmVhZCkN
CiEgew0KISAgIGludCBSZXN1bWVUaHJlYWRDb3VudDsNCiEgICBUaHJlYWRJdGVtICppdGVt
PXVzZXJfZGF0YS0+dGhyZWFkaW50ZXJmYWNlLT5HZXRUaHJlYWQodGhyZWFkKTsNCiEgICBp
ZiAoIWl0ZW0pDQohICAgICAgcmV0dXJuIEVTUkNIOw0KISANCiEgICBpZiAoaXRlbS0+c3Vz
cGVuZGVkID09IHRydWUpDQohICAgICAgICAgUmVzdW1lVGhyZWFkKCAoSEFORExFKSp0aHJl
YWQpOw0KISAgIGl0ZW0tPnN1c3BlbmRlZCA9IGZhbHNlOw0KISANCiEgICByZXR1cm4gMDsN
CiEgfQ0KISANCiEgDQohIA0KISANCiEgdW5zaWduZWQgbG9uZw0KICBfX3B0aHJlYWRfZ2V0
c2VxdWVuY2VfbnAgKHB0aHJlYWRfdCAqIHRocmVhZCkNCiAgew0KICAgIEdFVFRIUkVBRCAo
Il9fcHRocmVhZF9nZXRzZXF1ZW5jZV9ucCIpOw0KKioqKioqKioqKioqKioqIF9fcHRocmVh
ZF9nZXRzZXF1ZW5jZV9ucCAocHRocmVhZF90ICogdGgNCioqKiA1ODcsNjA0ICoqKioNCiAg
fTsNCiAgDQogIC8qIFRocmVhZCBTcGVjaWZpY0RhdGEgKi8NCiEgaW50IA0KICBfX3B0aHJl
YWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqIGtleSkNCiAgew0KICAgIE5PVF9JTVAg
KCJfcF9rZXlfY3JlYXRlXG4iKTsNCiAgfTsNCiAgDQohIGludCANCiAgX19wdGhyZWFkX2tl
eV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgKiBrZXkpDQogIHsNCiAgICBOT1RfSU1QICgiX3Bf
a2V5X2RlbGV0ZVxuIik7DQogIH07DQohIGludCANCiAgX19wdGhyZWFkX3NldHNwZWNpZmlj
IChwdGhyZWFkX2tleV90ICoga2V5LCBjb25zdCB2b2lkICp2YWx1ZSkNCiAgew0KICAgIE5P
VF9JTVAgKCJfcF9rZXlfc2V0c3BcbiIpOw0KLS0tIDY2OSw2ODYgLS0tLQ0KICB9Ow0KICAN
CiAgLyogVGhyZWFkIFNwZWNpZmljRGF0YSAqLw0KISBpbnQNCiAgX19wdGhyZWFkX2tleV9j
cmVhdGUgKHB0aHJlYWRfa2V5X3QgKiBrZXkpDQogIHsNCiAgICBOT1RfSU1QICgiX3Bfa2V5
X2NyZWF0ZVxuIik7DQogIH07DQogIA0KISBpbnQNCiAgX19wdGhyZWFkX2tleV9kZWxldGUg
KHB0aHJlYWRfa2V5X3QgKiBrZXkpDQogIHsNCiAgICBOT1RfSU1QICgiX3Bfa2V5X2RlbGV0
ZVxuIik7DQogIH07DQohIGludA0KICBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRf
a2V5X3QgKiBrZXksIGNvbnN0IHZvaWQgKnZhbHVlKQ0KICB7DQogICAgTk9UX0lNUCAoIl9w
X2tleV9zZXRzcFxuIik7DQoqKioqKioqKioqKioqKiogX19wdGhyZWFkX2dldHNwZWNpZmlj
IChwdGhyZWFkX2tleV90ICogaw0KKioqIDYxMCw2MTkgKioqKg0KICB9Ow0KICANCiAgLyog
VGhyZWFkIHNpZ25hbCAqLw0KISBpbnQgDQogIF9fcHRocmVhZF9raWxsIChwdGhyZWFkX3Qg
KiB0aHJlYWQsIGludCBzaWcpDQogIHsNCiEgLy8gbG9jayBteXNlbGYsIGZvciB0aGUgdXNl
IG9mIHRocmVhZDJzaWduYWwgDQogICAgLy8gdHdvIGRpZmZlciBraWxscyBtaWdodCBjbGFz
aDogRklYIE1FDQogICAgR0VUVEhSRUFEICgiX19wdGhyZWFkX2tpbGwiKTsNCiAgDQotLS0g
NjkyLDcwMSAtLS0tDQogIH07DQogIA0KICAvKiBUaHJlYWQgc2lnbmFsICovDQohIGludA0K
ICBfX3B0aHJlYWRfa2lsbCAocHRocmVhZF90ICogdGhyZWFkLCBpbnQgc2lnKQ0KICB7DQoh
IC8vIGxvY2sgbXlzZWxmLCBmb3IgdGhlIHVzZSBvZiB0aHJlYWQyc2lnbmFsDQogICAgLy8g
dHdvIGRpZmZlciBraWxscyBtaWdodCBjbGFzaDogRklYIE1FDQogICAgR0VUVEhSRUFEICgi
X19wdGhyZWFkX2tpbGwiKTsNCiAgDQoqKioqKioqKioqKioqKiogX19wdGhyZWFkX2tpbGwg
KHB0aHJlYWRfdCAqIHRocmVhZCwgaW50IA0KKioqIDYyNiw2MzkgKioqKg0KICANCiAgfTsN
CiAgDQohIGludCANCiAgX19wdGhyZWFkX3NpZ21hc2sgKGludCBvcGVyYXRpb24sIGNvbnN0
IHNpZ3NldF90ICogc2V0LCBzaWdzZXRfdCAqIG9sZF9zZXQpDQogIHsNCiAgICBTZXRSZXNv
dXJjZUxvY2sgKExPQ0tfVEhSRUFEX0xJU1QsIFJFQURfTE9DSywgIl9fcHRocmVhZF9zaWdt
YXNrIik7DQogICAgVGhyZWFkSXRlbSAqaXRlbSA9IE1UX0lOVEVSRkFDRS0+R2V0Q2FsbGlu
Z1RocmVhZCAoKTsNCiAgICBSZWxlYXNlUmVzb3VyY2VMb2NrIChMT0NLX1RIUkVBRF9MSVNU
LCBSRUFEX0xPQ0ssICJfX3B0aHJlYWRfc2lnbWFzayIpOw0KICANCiEgLy8gbG9jayB0aGlz
IG15c2VsZiwgZm9yIHRoZSB1c2Ugb2YgdGhyZWFkMnNpZ25hbCANCiAgICAvLyB0d28gZGlm
ZmVydCBraWxscyBtaWdodCBjbGFzaDogRklYIE1FDQogIA0KICAgIG15c2VsZi0+c2V0dGhy
ZWFkMnNpZ25hbCAoaXRlbSk7DQotLS0gNzA4LDcyMSAtLS0tDQogIA0KICB9Ow0KICANCiEg
aW50DQogIF9fcHRocmVhZF9zaWdtYXNrIChpbnQgb3BlcmF0aW9uLCBjb25zdCBzaWdzZXRf
dCAqIHNldCwgc2lnc2V0X3QgKiBvbGRfc2V0KQ0KICB7DQogICAgU2V0UmVzb3VyY2VMb2Nr
IChMT0NLX1RIUkVBRF9MSVNULCBSRUFEX0xPQ0ssICJfX3B0aHJlYWRfc2lnbWFzayIpOw0K
ICAgIFRocmVhZEl0ZW0gKml0ZW0gPSBNVF9JTlRFUkZBQ0UtPkdldENhbGxpbmdUaHJlYWQg
KCk7DQogICAgUmVsZWFzZVJlc291cmNlTG9jayAoTE9DS19USFJFQURfTElTVCwgUkVBRF9M
T0NLLCAiX19wdGhyZWFkX3NpZ21hc2siKTsNCiAgDQohIC8vIGxvY2sgdGhpcyBteXNlbGYs
IGZvciB0aGUgdXNlIG9mIHRocmVhZDJzaWduYWwNCiAgICAvLyB0d28gZGlmZmVydCBraWxs
cyBtaWdodCBjbGFzaDogRklYIE1FDQogIA0KICAgIG15c2VsZi0+c2V0dGhyZWFkMnNpZ25h
bCAoaXRlbSk7DQoqKioqKioqKioqKioqKiogX19wdGhyZWFkX3NpZ21hc2sgKGludCBvcGVy
YXRpb24sIGNvbnN0IA0KKioqIDY0Niw2NTIgKioqKg0KICB9Ow0KICANCiAgLyogIElEICov
DQohIHB0aHJlYWRfdCANCiAgX19wdGhyZWFkX3NlbGYgKCkNCiAgew0KICAgIFNldFJlc291
cmNlTG9jayAoTE9DS19USFJFQURfTElTVCwgUkVBRF9MT0NLLCAiX19wdGhyZWFkX3NlbGYi
KTsNCi0tLSA3MjgsNzM0IC0tLS0NCiAgfTsNCiAgDQogIC8qICBJRCAqLw0KISBwdGhyZWFk
X3QNCiAgX19wdGhyZWFkX3NlbGYgKCkNCiAgew0KICAgIFNldFJlc291cmNlTG9jayAoTE9D
S19USFJFQURfTElTVCwgUkVBRF9MT0NLLCAiX19wdGhyZWFkX3NlbGYiKTsNCioqKioqKioq
KioqKioqKiBfX3B0aHJlYWRfc2VsZiAoKQ0KKioqIDY1OCw2NjQgKioqKg0KICANCiAgfTsN
CiAgDQohIGludCANCiAgX19wdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgKiB0MSwgcHRocmVh
ZF90ICogdDIpDQogIHsNCiAgICByZXR1cm4gKCp0MSAtICp0Mik7DQotLS0gNzQwLDc0NiAt
LS0tDQogIA0KICB9Ow0KICANCiEgaW50DQogIF9fcHRocmVhZF9lcXVhbCAocHRocmVhZF90
ICogdDEsIHB0aHJlYWRfdCAqIHQyKQ0KICB7DQogICAgcmV0dXJuICgqdDEgLSAqdDIpOw0K
KioqKioqKioqKioqKioqIF9fcHRocmVhZF9lcXVhbCAocHRocmVhZF90ICogdDEsIHB0aHJl
YWQNCioqKiA2NjYsNjcyICoqKioNCiAgDQogIC8qIE11dGV4ZXMgICovDQogIA0KISBpbnQg
DQogIF9fcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFkX211dGV4X3QgKiBtdXRleCwgY29u
c3QgcHRocmVhZF9tdXRleGF0dHJfdCAqIF9hdHRyKQ0KICB7DQogICAgU2V0UmVzb3VyY2VM
b2NrIChMT0NLX01VVEVYX0xJU1QsIFdSSVRFX0xPQ0sgfCBSRUFEX0xPQ0ssICJfX3B0aHJl
YWRfbXV0ZXhfaW5pdCIpOw0KLS0tIDc0OCw3NTQgLS0tLQ0KICANCiAgLyogTXV0ZXhlcyAg
Ki8NCiAgDQohIGludA0KICBfX3B0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90
ICogbXV0ZXgsIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiBfYXR0cikNCiAgew0KICAg
IFNldFJlc291cmNlTG9jayAoTE9DS19NVVRFWF9MSVNULCBXUklURV9MT0NLIHwgUkVBRF9M
T0NLLCAiX19wdGhyZWFkX211dGV4X2luaXQiKTsNCioqKioqKioqKioqKioqKiBfX3B0aHJl
YWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICogDQoqKiogNjc5LDY4NSAqKioqDQog
ICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQgDQogIF9fcHRocmVhZF9tdXRleF9sb2Nr
IChwdGhyZWFkX211dGV4X3QgKiBtdXRleCkNCiAgew0KICAgIEdFVE1VVEVYICgiX3B0aGVy
YWRfbXV0ZXhfbG9jayIpOw0KLS0tIDc2MSw3NjcgLS0tLQ0KICAgIHJldHVybiAwOw0KICB9
Ow0KICANCiEgaW50DQogIF9fcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3Qg
KiBtdXRleCkNCiAgew0KICAgIEdFVE1VVEVYICgiX3B0aGVyYWRfbXV0ZXhfbG9jayIpOw0K
KioqKioqKioqKioqKioqIF9fcHRocmVhZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3Qg
KiANCioqKiA2ODksNjk1ICoqKioNCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGludCAN
CiAgX19wdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4KQ0K
ICB7DQogICAgR0VUTVVURVggKCJfcHRoZXJhZF9tdXRleF9sb2NrIik7DQotLS0gNzcxLDc3
NyAtLS0tDQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQNCiAgX19wdGhyZWFkX211
dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4KQ0KICB7DQogICAgR0VUTVVU
RVggKCJfcHRoZXJhZF9tdXRleF9sb2NrIik7DQoqKioqKioqKioqKioqKiogX19wdGhyZWFk
X211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdA0KKioqIDcwMCw3MDYgKioqKg0KICAg
IHJldHVybiAwOw0KICB9Ow0KICANCiEgaW50IA0KICBfX3B0aHJlYWRfbXV0ZXhfdW5sb2Nr
IChwdGhyZWFkX211dGV4X3QgKiBtdXRleCkNCiAgew0KICAgIEdFVE1VVEVYICgiX3B0aGVy
YWRfbXV0ZXhfbG9jayIpOw0KLS0tIDc4Miw3ODggLS0tLQ0KICAgIHJldHVybiAwOw0KICB9
Ow0KICANCiEgaW50DQogIF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhf
dCAqIG11dGV4KQ0KICB7DQogICAgR0VUTVVURVggKCJfcHRoZXJhZF9tdXRleF9sb2NrIik7
DQoqKioqKioqKioqKioqKiogX19wdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRl
eF90IA0KKioqIDcxMCw3MTYgKioqKg0KICAgIHJldHVybiAwOw0KICB9Ow0KICANCiEgaW50
IA0KICBfX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICogbXV0ZXgp
DQogIHsNCiAgICBTZXRSZXNvdXJjZUxvY2sgKExPQ0tfTVVURVhfTElTVCwgUkVBRF9MT0NL
IHwgV1JJVEVfTE9DSywgIl9fcHRocmVhZF9tdXRleF9kZXN0cm95Iik7DQotLS0gNzkyLDc5
OCAtLS0tDQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQNCiAgX19wdGhyZWFkX211
dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4KQ0KICB7DQogICAgU2V0UmVz
b3VyY2VMb2NrIChMT0NLX01VVEVYX0xJU1QsIFJFQURfTE9DSyB8IFdSSVRFX0xPQ0ssICJf
X3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIpOw0KKioqKioqKioqKioqKioqIF9fcHRocmVhZF9t
dXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QNCioqKiA3MjgsNzM0ICoqKioNCiAgfTsN
CiAgDQogIC8qIFNlbWFwaG9yZXMgKi8NCiEgaW50IA0KICBfX3NlbV9pbml0IChzZW1fdCAq
IHNlbSwgaW50IHBzaGFyZWQsIHVuc2lnbmVkIGludCB2YWx1ZSkNCiAgew0KICAgIFNldFJl
c291cmNlTG9jayAoTE9DS19TRU1fTElTVCwgUkVBRF9MT0NLIHwgV1JJVEVfTE9DSywgIl9f
c2VtX2luaXQiKTsNCi0tLSA4MTAsODE2IC0tLS0NCiAgfTsNCiAgDQogIC8qIFNlbWFwaG9y
ZXMgKi8NCiEgaW50DQogIF9fc2VtX2luaXQgKHNlbV90ICogc2VtLCBpbnQgcHNoYXJlZCwg
dW5zaWduZWQgaW50IHZhbHVlKQ0KICB7DQogICAgU2V0UmVzb3VyY2VMb2NrIChMT0NLX1NF
TV9MSVNULCBSRUFEX0xPQ0sgfCBXUklURV9MT0NLLCAiX19zZW1faW5pdCIpOw0KKioqKioq
KioqKioqKioqIF9fc2VtX2luaXQgKHNlbV90ICogc2VtLCBpbnQgcHNoYXJlZCwgdW4NCioq
KiA3NDEsNzQ3ICoqKioNCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGludCANCiAgX19z
ZW1fZGVzdHJveSAoc2VtX3QgKiBzZW0pDQogIHsNCiAgICBTZXRSZXNvdXJjZUxvY2sgKExP
Q0tfU0VNX0xJU1QsIFJFQURfTE9DSyB8IFdSSVRFX0xPQ0ssICJfX3NlbV9kZXN0cm95Iik7
DQotLS0gODIzLDgyOSAtLS0tDQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQNCiAg
X19zZW1fZGVzdHJveSAoc2VtX3QgKiBzZW0pDQogIHsNCiAgICBTZXRSZXNvdXJjZUxvY2sg
KExPQ0tfU0VNX0xJU1QsIFJFQURfTE9DSyB8IFdSSVRFX0xPQ0ssICJfX3NlbV9kZXN0cm95
Iik7DQoqKioqKioqKioqKioqKiogX19zZW1fZGVzdHJveSAoc2VtX3QgKiBzZW0pDQoqKiog
NzU4LDc2NCAqKioqDQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQgDQogIF9fc2Vt
X3dhaXQgKHNlbV90ICogc2VtKQ0KICB7DQogICAgR0VUU0VNQSAoIl9fc2VtX3dhaXQiKTsN
Ci0tLSA4NDAsODQ2IC0tLS0NCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGludA0KICBf
X3NlbV93YWl0IChzZW1fdCAqIHNlbSkNCiAgew0KICAgIEdFVFNFTUEgKCJfX3NlbV93YWl0
Iik7DQoqKioqKioqKioqKioqKiogX19zZW1fd2FpdCAoc2VtX3QgKiBzZW0pDQoqKiogNzY4
LDc3NCAqKioqDQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQgDQogIF9fc2VtX3Ry
eXdhaXQgKHNlbV90ICogc2VtKQ0KICB7DQogICAgR0VUU0VNQSAoIl9fc2VtX3RyeXdhaXQi
KTsNCi0tLSA4NTAsODU2IC0tLS0NCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQohIGludA0K
ICBfX3NlbV90cnl3YWl0IChzZW1fdCAqIHNlbSkNCiAgew0KICAgIEdFVFNFTUEgKCJfX3Nl
bV90cnl3YWl0Iik7DQoqKioqKioqKioqKioqKiogX19zZW1fdHJ5d2FpdCAoc2VtX3QgKiBz
ZW0pDQoqKiogNzc5LDc4NSAqKioqDQogICAgcmV0dXJuIDA7DQogIH07DQogIA0KISBpbnQg
DQogIF9fc2VtX3Bvc3QgKHNlbV90ICogc2VtKQ0KICB7DQogICAgR0VUU0VNQSAoIl9fc2Vt
X3Bvc3QiKTsNCi0tLSA4NjEsODY3IC0tLS0NCiAgICByZXR1cm4gMDsNCiAgfTsNCiAgDQoh
IGludA0KICBfX3NlbV9wb3N0IChzZW1fdCAqIHNlbSkNCiAgew0KICAgIEdFVFNFTUEgKCJf
X3NlbV9wb3N0Iik7DQoqKioqKioqKioqKioqKiogZXh0ZXJuICJDIg0KKioqIDgyMyw4Mjgg
KioqKg0KLS0tIDkwNSw5MTYgLS0tLQ0KICAgIHsNCiAgICAgIHJldHVybiAtMTsNCiAgICB9
Ow0KKyANCisgICBpbnQgX19wdGhyZWFkX2pvaW4ocHRocmVhZF90IHRocmVhZF9pZCwgdm9p
ZCAqKnJldHVybl92YWwpDQorICAgew0KKyAgICAgIHJldHVybiAtMTsNCisgICB9DQorIA0K
ICAgIHVuc2lnbmVkIGxvbmcgX19wdGhyZWFkX2dldHNlcXVlbmNlX25wIChwdGhyZWFkX3Qg
KiB0aHJlYWQpDQogICAgew0KICAgICAgcmV0dXJuIDA7DQoqKioqKioqKioqKioqKiogZXh0
ZXJuICJDIg0KKioqIDkwNSw5MDggKioqKg0KICAgIH07DQogIH0NCiAgDQohICNlbmRpZgkJ
CQkvLyBNVF9TQUZFDQotLS0gOTkzLDk5NiAtLS0tDQogICAgfTsNCiAgfQ0KICANCiEgI2Vu
ZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNVF9TQUZFDQoAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB0aHJlYWQuaC1wYXRjaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAMTAwNjQ0IAAgICA3NjQgACAgIDE0NCAAICAgICAgIDI0NjAgIDY3MDQ1MjMwMTQg
IDEyNjMzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHVzdGFyICAAam9obgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABldmVyeW9uZQAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoqKiB0aHJlYWQuaC1v
cmlnCVN1biBBcHIgMDQgMjM6MTQ6MjIgMTk5OQ0KLS0tIHRocmVhZC5oCVR1ZSBBcHIgMDYg
MjI6MzM6MTIgMTk5OQ0KKioqKioqKioqKioqKioqIHB1YmxpYzoNCioqKiAxNTQsMTU5ICoq
KioNCi0tLSAxNTQsMTYwIC0tLS0NCiAgSEFORExFIHdpbjMyX29ial9pZDsNCiAgVUlOVCBy
ZXR1cm5fdmFsdWU7DQogIGJvb2wgdXNlZDsNCisgY2hhciBqb2luYWJsZTsgICAgICAgLy8g
Zm9yIHRocmVhZCBvbmx5DQogIGJvb2wgSGFuZGxlT2tlICgpIHtyZXR1cm4gd2luMzJfb2Jq
X2lkO307DQogIHZpcnR1YWwgdm9pZCBEZXN0cm95ICgpOw0KICB2aXJ0dWFsIGludCBJZCAo
KSB7cmV0dXJuIChpbnQpIHdpbjMyX29ial9pZDt9Ow0KKioqKioqKioqKioqKioqIHB1Ymxp
YzoNCioqKiAxNjUsMTcwICoqKioNCi0tLSAxNjYsMTczIC0tLS0NCiAgcHRocmVhZF9hdHRy
X3QgYXR0cjsNCiAgVEZEIChmdW5jdGlvbik7DQogIHZvaWQgKmFyZzsNCisgdm9pZCAqcmV0
dXJuX3B0cjsNCisgYm9vbCBzdXNwZW5kZWQ7DQogIERXT1JEIHRocmVhZF9pZDsNCiAgRFdP
UkQgR2V0VGhyZWFkSWQgKCkge3JldHVybiB0aHJlYWRfaWQ7fTsNCiAgDQoqKioqKioqKioq
KioqKiogX19wdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyKC4uLik7DQoqKiogMjYyLDI2NyAq
KioqDQotLS0gMjY1LDI3NyAtLS0tDQogIA0KICAvKiBUaHJlYWQgRXhpdCAqLw0KICBpbnQg
X19wdGhyZWFkX2V4aXQgKHZvaWQgKnZhbHVlX3B0cik7DQorIGludCBfX3B0aHJlYWRfam9p
bihwdGhyZWFkX3QgKnRocmVhZCwgdm9pZCAqKnJldHVybl92YWwpOw0KKyBpbnQgX19wdGhy
ZWFkX2RldGFjaChwdGhyZWFkX3QgKnRocmVhZCk7DQorIA0KKyAvKiBUaHJlYWQgc3VzcGVu
ZCAqLw0KKyANCisgaW50IF9fcHRocmVhZF9zdXNwZW5kKHB0aHJlYWRfdCAqdGhyZWFkKTsN
CisgaW50IF9fcHRocmVhZF9jb250aW51ZShwdGhyZWFkX3QgKnRocmVhZCk7DQogIA0KICB1
bnNpZ25lZCBsb25nIF9fcHRocmVhZF9nZXRzZXF1ZW5jZV9ucCAocHRocmVhZF90ICogdGhy
ZWFkKTsNCiAgDQoqKioqKioqKioqKioqKiogaW50IF9fc2VtX3Bvc3QgKHNlbV90ICogc2Vt
KTsNCioqKiAyOTcsMzAyICoqKioNCiAgDQogIH07DQogIA0KISAjZW5kaWYJCQkJLy8gTVRf
U0FGRQ0KICANCiEgI2VuZGlmCQkJCS8vIF9DWUdOVVNfVEhSRUFEU18NCi0tLSAzMDcsMzEy
IC0tLS0NCiAgDQogIH07DQogIA0KISAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE1UX1NBRkUNCiAgDQohICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
X0NZR05VU19USFJFQURTXw0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGluY2x1ZGUvcHRocmVhZC5oLXBhdGNoAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAxMDA2NDQgACAgIDc2NCAAICAgMTQ0IAAgICAgICAgMzIzMSAgNjcwNDUyMzAxNCAgMTQ0
MzMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0
YXIgIABqb2huAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGV2ZXJ5b25lAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKioqIGluY2x1ZGUvcHRocmVh
ZC5oLW9yaWcJU3VuIEFwciAwNCAyMzoxMzoxNCAxOTk5DQotLS0gaW5jbHVkZS9wdGhyZWFk
LmgJVHVlIEFwciAwNiAyMToyNzoxNiAxOTk5DQoqKioqKioqKioqKioqKiogaW50IHB0aHJl
YWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqIA0KKioqIDQ5LDYxICoqKioNCiAgaW50
IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqIGF0dHIpOw0KICBpbnQg
cHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzaXpl
X3Qgc2l6ZSk7DQogIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChwdGhyZWFkX2F0
dHJfdCAqIGF0dHIsIHNpemVfdCAqIHNpemUpOw0KLSAvKg0KLSAgcHRocmVhZF9hdHRyX3Nl
dHN0YWNrYWRkciguLi4pOw0KLSAgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciguLi4pOw0K
LSAqLw0KICANCiAgLyogVGhyZWFkIEV4aXQgKi8NCiAgaW50IHB0aHJlYWRfZXhpdCAodm9p
ZCAqdmFsdWVfcHRyKTsNCiAgDQogIC8qIFRocmVhZCBTcGVjaWZpY0RhdGEgKi8NCiAgaW50
IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqIGtleSk7DQotLS0gNDksNjQg
LS0tLQ0KICBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICogYXR0
cik7DQogIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAq
IGF0dHIsIHNpemVfdCBzaXplKTsNCiAgaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUg
KHB0aHJlYWRfYXR0cl90ICogYXR0ciwgc2l6ZV90ICogc2l6ZSk7DQogIA0KICAvKiBUaHJl
YWQgRXhpdCAqLw0KICBpbnQgcHRocmVhZF9leGl0ICh2b2lkICp2YWx1ZV9wdHIpOw0KKyBp
bnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgdGhyZWFkX2lkLCB2b2lkICoqcmV0dXJuX3Zh
bCk7DQorIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IHRocmVhZF9pZCk7DQorIA0K
KyAvKiBUaHJlYWQgc3VzcGVuZCAqLw0KKyANCisgaW50IHB0aHJlYWRfc3VzcGVuZChwdGhy
ZWFkX3QgdGhyZWFkX2lkKTsNCisgaW50IHB0aHJlYWRfY29udGludWUocHRocmVhZF90IHRo
cmVhZF9pZCk7DQogIA0KICAvKiBUaHJlYWQgU3BlY2lmaWNEYXRhICovDQogIGludCBwdGhy
ZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKiBrZXkpOw0KKioqKioqKioqKioqKioq
IGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBvcGVyYXRpb24sIGNvbnMNCioqKiA2OSw3NSAq
KioqDQogIA0KICAvKiAgSUQgKi8NCiAgcHRocmVhZF90IHB0aHJlYWRfc2VsZiAoKTsNCiEg
aW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCAqIHQxLCBwdGhyZWFkX3QgKiB0Mik7DQog
IA0KICAvKiBNdXRleGVzICAqLw0KICBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFk
X211dGV4X3QgKiBtdXRleCwgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqKTsNCi0tLSA3
Miw3OCAtLS0tDQogIA0KICAvKiAgSUQgKi8NCiAgcHRocmVhZF90IHB0aHJlYWRfc2VsZiAo
KTsNCiEgaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCB0MSwgcHRocmVhZF90IHQyKTsN
CiAgDQogIC8qIE11dGV4ZXMgICovDQogIGludCBwdGhyZWFkX211dGV4X2luaXQgKHB0aHJl
YWRfbXV0ZXhfdCAqIG11dGV4LCBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICopOw0KAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDaGFuZ2VMb2cuZm9ydGluAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAwNjQ0IAAgICA3NjQgACAgIDE0NCAAICAgICAg
IDMyNzMgIDY3MDQ1MjI3NTQgIDEzMjA1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAam9obgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABldmVyeW9uZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAFN1biBBcHIgNCAyMzowMDowMCAxOTk5ICBKb2huIEZvcnRpbiAoZm9ydGluakBpYm0u
bmV0KQoKICAgICAgICAqIHB0aHJlYWQuaCAgOiBhZGRlZCBwdGhyZWFkX2pvaW4gYW5kIHB0
aHJlYWRfZGV0YWNoIHByb3RvdHlwZXMuCiAgICAgICAgKiBwdGhyZWFkLmNjIDogYWRkZWQg
YWJvdmUgZnVuY3Rpb24gY2FsbHMuCiAgICAgICAgKiBjeWd3aW4uZGluIDogYWRkZWQgYWJv
dmUgZnVuY3Rpb25zIGZvciBleHBvcnRzLgogICAgICAgICogdGhyZWFkLmggICA6IGFkZGVk
IGNoYXIgam9pbmFibGUgdG8gTVRpdGVtIGNsYXNzLiAgVGhpcyBmbGFnIGlzCiAgICAgICAg
c2V0IGF0IHRocmVhZCBjcmVhdGlvbiB0byAnWScuICBJdCBpcyBzZXQgdG8gJ04nIGJ5IF9f
cHRocmVhZF9kZXRhY2guCiAgICAgICAgQWxzbyBtYWtlIGFsbG9jYXRlZCBUaHJlYWRJdGVt
IHVudXNhYmxlIGlmID0gJ1knIHdoaWNoIGlzIHRoZSBjYXNlIGlmCiAgICAgICAgYSB0aHJl
YWQgaXMgbm90IGRldGFjaGVkLiAgcHRocmVhZF9qb2luIG1heSBiZSBjYWxsZWQgYXQgc29t
ZSB0aW1lIGFuZAogICAgICAgIHdlIGRvbid0IHdhbnQgdG8gbG9zZSB0aGUgcmV0dXJuIGRh
dGEgKCBpZiBhbnkuKQogICAgICAgICogdGhyZWFkLmggICA6IGFkZGVkIHZvaWQgKiByZXR1
cm5fcHRyIHRvIFRocmVhZEl0ZW0gY2xhc3MgdG8gcmVjaWV2ZSBwb2ludGVyIGZyb20gcHRo
cmVhZF8KICAgICAgICBleGl0LiAgSXMgYWxzbyB1c2VkIGJ5IHB0aHJlYWRfam9pbi4KICAg
ICAgICAqIHRocmVhZC5oICAgOiBhZGRlZCBfX3B0aHJlYWRfam9pbiBhbmQgX19wdGhyZWFk
X2RldGFjaCBwcm90b3R5cGVzLgogICAgICAgICogdGhyZWFkLmNjICA6IGltcGxlbWVudGVk
IF9fcHRocmVhZF9qb2luIGFuZCBfX3B0aHJlYWRfZGV0YWNoLgogICAgICAgICogdGhyZWFk
LmNjICA6IGltcGxlbWVudGVkIF9fcHRocmVhZF9leGl0ICAoIHdhcyBOT1RfSU1QICkKICAg
ICAgICAqIHRocmVhZC5jYyAgOiBjaGFuZ2VkIHRocmVhZF9pbml0X3dyYXBwZXIgdG8gc2V0
IGl0ZW0tPnJldHVybl9wdHI9cmV0CiAgICAgICAgYW5kIGNvbW1lbnRlZCBvdXQgaXRlbS0+
dXNlZCA9IGZhbHNlLiAgTmVlZCB0byBsb29rIGF0IHRoaXMgbW9yZS4KICAgICAgICAqIHRo
cmVhZC5jYyAgOiAoTVRpbnRlcmZhY2U6OkZpbmROZXh0VW51c2VkKSA6IHVzZSBqb2luYWJs
ZSAhPSAnWScgYXMKICAgICAgICBhbiBhZGRpdGlvbmFsIGNvbmRpdGlvbmFsLiAgV2UgbWF5
IG5lZWQgdG8gdXNlIHRoaXMgaW5mbyBpbiBwdGhyZWFkX2pvaW4uCgpXZWQgQXByIDcgMjA6
MDA6MDAgMTk5OSAgSm9obiBGb3J0aW4gKGZvcnRpbmpAaWJtLm5ldCkKCiAgICAgICAgKiBw
dGhyZWFkLmggIDogYWRkZWQgcHRocmVhZF9zdXNwZW5kIGFuZCBwdGhyZWFkX2NvbnRpbnVl
IHByb3RvdHlwZXMKICAgICAgICAqIHB0aHJlYWQuY2MgOiBhZGRlZCBhYm92ZSBmdW5jdGlv
biBjYWxscy4KICAgICAgICAqIGN5Z3dpbi5kaW4gOiBhZGRlZCBhYm92ZSBmdW5jdGlvbnMu
CiAgICAgICAgKiB0aHJlYWQuaCAgIDogYWRkZWQgJ2Jvb2wgc3VzcGVuZGVkJyB0byBjbGFz
cyBNVGl0ZW0uCiAgICAgICAgKiB0aHJlYWQuaCAgIDogcHJvdG90eXBlcyBmb3IgX19wdGhy
ZWFkX3N1c3BlbmQgX19wdGhyZWFkX2NvbnRpbnVlCiAgICAgICAgKiB0aHJlYWQuY2MgIDog
aW1wbGVtZW50IF9fcHRocmVhZF9zdXNwZW5kIGFuZCBfX3B0aHJlYWRfY29udGludWUuCgoA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--------------ADCC43FCC770ADCA81C23417--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019