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" Subject: Pthread additions (more functions) Content-Type: multipart/mixed; boundary="------------ADCC43FCC770ADCA81C23417" 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--