Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:39782 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 8355 invoked from network); 8 Aug 2008 22:35:35 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 8 Aug 2008 22:35:35 -0000 Authentication-Results: pb1.pair.com smtp.mail=helly@php.net; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=helly@php.net; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 85.214.94.56 as permitted sender) X-PHP-List-Original-Sender: helly@php.net X-Host-Fingerprint: 85.214.94.56 aixcept.net Linux 2.6 Received: from [85.214.94.56] ([85.214.94.56:38473] helo=h1149922.serverkompetenz.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 7F/11-02575-53ACC984 for ; Fri, 08 Aug 2008 18:35:34 -0400 Received: from MBOERGER-ZRH.corp.google.com (133-155.107-92.cust.bluewin.ch [92.107.155.133]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by h1149922.serverkompetenz.net (Postfix) with ESMTP id 12BA011F0AB; Sat, 9 Aug 2008 00:35:29 +0200 (CEST) Date: Sat, 9 Aug 2008 00:34:59 +0200 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <803831941.20080809003459@marcus-boerger.de> To: =?iso-8859-15?Q?Johannes_Schl=FCter?= , Christian Seiler CC: Dmitry Stogov , php-dev List In-Reply-To: <875726149.20080808234837@marcus-boerger.de> References: <48886651.80407@gmx.net> <4889F43D.8030609@gmx.net> <4896B0B4.2090801@zend.com> <1217847553.4175.23.camel@goldfinger.johannes.nop> <875726149.20080808234837@marcus-boerger.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------5AC29A75017FE" Subject: Re: [PHP-DEV] [PATCH] Closures and reflection improvements From: helly@php.net (Marcus Boerger) ------------5AC29A75017FE Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Hello Christian, Johannes, Friday, August 8, 2008, 11:48:37 PM, you wrote: > Hello Christian, > I updated your patch for 5.3 due to recent changes. It works pretty fine > for me. Care to test again, especially with your new tests? Note that test > ext/reflection/tests/closures_001.phpt does not work for me and I have no > clue why. Well, besides that obviously the closure class no longer has an > entry for __closure, so it is more a question of how to know when to add > this. Also, it appears you do not have a cvs account, or did I overlook > something? > Modified patch attached, including the updated reflection tests. Ok, it is actually easy to fix, we just check whether the thing is a closure and add the method manually, done. New patch attached. Johannes, this also adresses the switch from E_ERROR to E_RECOVERABLE_ERROR for the closure handlers. best regards marcus > Monday, August 4, 2008, 12:59:13 PM, you wrote: >> Christian, >> On Mon, 2008-08-04 at 11:33 +0400, Dmitry Stogov wrote: >>> >> http://www.christian-seiler.de/temp/php/2008-07-24-reflection/reflection-closure-fixes-5.3.patch >>> >> >>> >> http://www.christian-seiler.de/temp/php/2008-07-24-reflection/reflection-closure-fixes-6.patch >>> > >> without applying and testing the patch: >> - zend_hash_apply_with_arguments(&ce->function_table TSRMLS_CC, >> (apply_func_args_t) _addmethod, 3, &ce, return_value, filter); >> + zend_hash_apply_with_arguments(&ce->function_table TSRMLS_CC, >> (apply_func_args_t) _addmethod, 3, &ce, return_value, filter, intern->obj); >> that looks a bit strange, probably you want 4 instead of 3 now? >> johannes > Best regards, > Marcus Best regards, Marcus ------------5AC29A75017FE Content-Type: text/plain; name="php-closure-reflection-5.3-20080808.diff.txt" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="php-closure-reflection-5.3-20080808.diff.txt" SW5kZXg6IFplbmQvemVuZF9jbG9zdXJlcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9y ZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfY2xvc3VyZXMuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4zLjIuMTAKZGlmZiAtdSAtcCAtZCAtcjEuMy4yLjEwIHplbmRfY2xvc3VyZXMu YwotLS0gWmVuZC96ZW5kX2Nsb3N1cmVzLmMJNyBBdWcgMjAwOCAxMzozNTo1MSAtMDAwMAkx LjMuMi4xMAorKysgWmVuZC96ZW5kX2Nsb3N1cmVzLmMJOCBBdWcgMjAwOCAyMjozMTo1MSAt MDAwMApAQCAtMjYsMTEgKzI2LDEwIEBACiAjaW5jbHVkZSAiemVuZF9vYmplY3RzX0FQSS5o IgogI2luY2x1ZGUgInplbmRfZ2xvYmFscy5oIgogCi0jZGVmaW5lIFpFTkRfSU5WT0tFX0ZV TkNfTkFNRSAiX19pbnZva2UiCiAjZGVmaW5lIFpFTkRfQ0xPU1VSRV9QUklOVF9OQU1FICJD bG9zdXJlIG9iamVjdCIKIAogI2RlZmluZSBaRU5EX0NMT1NVUkVfUFJPUEVSVFlfRVJST1Io KSBcCi0JemVuZF9lcnJvcihFX0VSUk9SLCAiQ2xvc3VyZSBvYmplY3QgY2Fubm90IGhhdmUg cHJvcGVydGllcyIpCisJemVuZF9lcnJvcihFX1JFQ09WRVJBQkxFX0VSUk9SLCAiQ2xvc3Vy ZSBvYmplY3QgY2Fubm90IGhhdmUgcHJvcGVydGllcyIpCiAKIHR5cGVkZWYgc3RydWN0IF96 ZW5kX2Nsb3N1cmUgewogCXplbmRfb2JqZWN0ICAgIHN0ZDsKQEAgLTM4LDcgKzM3LDggQEAg dHlwZWRlZiBzdHJ1Y3QgX3plbmRfY2xvc3VyZSB7CiAJenZhbCAgICAgICAgICAqdGhpc19w dHI7CiB9IHplbmRfY2xvc3VyZTsKIAotc3RhdGljIHplbmRfY2xhc3NfZW50cnkgKnplbmRf Y2VfY2xvc3VyZTsKKy8qIG5vbi1zdGF0aWMgc2luY2UgaXQgbmVlZHMgdG8gYmUgcmVmZXJl bmNlZCAqLworWkVORF9BUEkgemVuZF9jbGFzc19lbnRyeSAqemVuZF9jZV9jbG9zdXJlOwog c3RhdGljIHplbmRfb2JqZWN0X2hhbmRsZXJzIGNsb3N1cmVfaGFuZGxlcnM7CiAKIFpFTkRf TUVUSE9EKENsb3N1cmUsIF9faW52b2tlKSAvKiB7e3sgKi8KQEAgLTUwLDcgKzUwLDcgQEAg WkVORF9NRVRIT0QoQ2xvc3VyZSwgX19pbnZva2UpIC8qIHt7eyAqLwogCWFyZ3VtZW50cyA9 IGVtYWxsb2Moc2l6ZW9mKHp2YWwqKikgKiBaRU5EX05VTV9BUkdTKCkpOwogCWlmICh6ZW5k X2dldF9wYXJhbWV0ZXJzX2FycmF5X2V4KFpFTkRfTlVNX0FSR1MoKSwgYXJndW1lbnRzKSA9 PSBGQUlMVVJFKSB7CiAJCWVmcmVlKGFyZ3VtZW50cyk7Ci0JCXplbmRfZXJyb3IoRV9FUlJP UiwgIkNhbm5vdCBnZXQgYXJndW1lbnRzIGZvciBjYWxsaW5nIGNsb3N1cmUiKTsKKwkJemVu ZF9lcnJvcihFX1JFQ09WRVJBQkxFX0VSUk9SLCAiQ2Fubm90IGdldCBhcmd1bWVudHMgZm9y IGNhbGxpbmcgY2xvc3VyZSIpOwogCQlSRVRWQUxfRkFMU0U7CiAJfSBlbHNlIGlmIChjYWxs X3VzZXJfZnVuY3Rpb25fZXgoQ0coZnVuY3Rpb25fdGFibGUpLCBOVUxMLCB0aGlzX3B0ciwg JmNsb3N1cmVfcmVzdWx0X3B0ciwgWkVORF9OVU1fQVJHUygpLCBhcmd1bWVudHMsIDEsIE5V TEwgVFNSTUxTX0NDKSA9PSBGQUlMVVJFKSB7CiAJCVJFVFZBTF9GQUxTRTsKQEAgLTc0LDIx ICs3NCwyMSBAQCBaRU5EX01FVEhPRChDbG9zdXJlLCBfX2ludm9rZSkgLyoge3t7ICovCiAK IHN0YXRpYyB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2Nsb3N1cmVfZ2V0X2NvbnN0cnVjdG9yKHp2 YWwgKm9iamVjdCBUU1JNTFNfREMpIC8qIHt7eyAqLwogewotCXplbmRfZXJyb3IoRV9FUlJP UiwgIkluc3RhbnRpYXRpb24gb2YgJ0Nsb3N1cmUnIGlzIG5vdCBhbGxvd2VkIik7CisJemVu ZF9lcnJvcihFX1JFQ09WRVJBQkxFX0VSUk9SLCAiSW5zdGFudGlhdGlvbiBvZiAnQ2xvc3Vy ZScgaXMgbm90IGFsbG93ZWQiKTsKIAlyZXR1cm4gTlVMTDsKIH0KIC8qIH19fSAqLwogCiBz dGF0aWMgaW50IHplbmRfY2xvc3VyZV9zZXJpYWxpemUoenZhbCAqb2JqZWN0LCB1bnNpZ25l ZCBjaGFyICoqYnVmZmVyLCB6ZW5kX3VpbnQgKmJ1Zl9sZW4sIHplbmRfc2VyaWFsaXplX2Rh dGEgKmRhdGEgVFNSTUxTX0RDKSAvKiB7e3sgKi8KIHsKLQl6ZW5kX2Vycm9yKEVfRVJST1Is ICJTZXJpYWxpemF0aW9uIG9mICdDbG9zdXJlJyBpcyBub3QgYWxsb3dlZCIpOworCXplbmRf ZXJyb3IoRV9SRUNPVkVSQUJMRV9FUlJPUiwgIlNlcmlhbGl6YXRpb24gb2YgJ0Nsb3N1cmUn IGlzIG5vdCBhbGxvd2VkIik7CiAJcmV0dXJuIEZBSUxVUkU7CiB9CiAvKiB9fX0gKi8KIAog c3RhdGljIGludCB6ZW5kX2Nsb3N1cmVfdW5zZXJpYWxpemUoenZhbCAqKm9iamVjdCwgemVu ZF9jbGFzc19lbnRyeSAqY2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgemVuZF91aW50 IGJ1Zl9sZW4sIHplbmRfdW5zZXJpYWxpemVfZGF0YSAqZGF0YSBUU1JNTFNfREMpIC8qIHt7 eyAqLwogewotCXplbmRfZXJyb3IoRV9FUlJPUiwgIlVuc2VyaWFsaXphdGlvbiBvZiAnQ2xv c3VyZScgaXMgbm90IGFsbG93ZWQiKTsKKwl6ZW5kX2Vycm9yKEVfUkVDT1ZFUkFCTEVfRVJS T1IsICJVbnNlcmlhbGl6YXRpb24gb2YgJ0Nsb3N1cmUnIGlzIG5vdCBhbGxvd2VkIik7CiAJ cmV0dXJuIEZBSUxVUkU7CiB9CiAvKiB9fX0gKi8KQEAgLTk5LDYgKzk5LDI0IEBAIHN0YXRp YyBpbnQgemVuZF9jbG9zdXJlX2NvbXBhcmVfb2JqZWN0cygKIH0KIC8qIH19fSAqLwogCita RU5EX0FQSSB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2Qo enZhbCAqb2JqIFRTUk1MU19EQykgLyoge3t7ICovCit7CisJemVuZF9jbG9zdXJlICpjbG9z dXJlID0gKHplbmRfY2xvc3VyZSAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3Qob2Jq IFRTUk1MU19DQyk7CQorCXplbmRfZnVuY3Rpb24gKmludm9rZSA9ICh6ZW5kX2Z1bmN0aW9u KillbWFsbG9jKHNpemVvZih6ZW5kX2Z1bmN0aW9uKSk7CisKKwlpbnZva2UgPSAoemVuZF9m dW5jdGlvbiopZW1hbGxvYyhzaXplb2YoemVuZF9mdW5jdGlvbikpOworCWludm9rZS0+Y29t bW9uID0gY2xvc3VyZS0+ZnVuYy5jb21tb247CisJaW52b2tlLT50eXBlID0gWkVORF9JTlRF Uk5BTF9GVU5DVElPTjsKKwlpbnZva2UtPmludGVybmFsX2Z1bmN0aW9uLmhhbmRsZXIgPSBa RU5EX01OKENsb3N1cmVfX19pbnZva2UpOworCWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24u bW9kdWxlID0gMDsKKwlpbnZva2UtPmludGVybmFsX2Z1bmN0aW9uLnNjb3BlID0gemVuZF9j ZV9jbG9zdXJlOworCWludm9rZS0+aW50ZXJuYWxfZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSA9 IGVzdHJuZHVwKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZV TkNfTkFNRSktMSk7CisJaW52b2tlLT5pbnRlcm5hbF9mdW5jdGlvbi5mbl9mbGFncyA9IFpF TkRfQUNDX1BVQkxJQyB8IFpFTkRfQUNDX0NBTExfVklBX0hBTkRMRVI7CisJcmV0dXJuIGlu dm9rZTsKKwkKK30KKy8qIH19fSAqLworCiBzdGF0aWMgemVuZF9mdW5jdGlvbiAqemVuZF9j bG9zdXJlX2dldF9tZXRob2QoenZhbCAqKm9iamVjdF9wdHIsIGNoYXIgKm1ldGhvZF9uYW1l LCBpbnQgbWV0aG9kX2xlbiBUU1JNTFNfREMpIC8qIHt7eyAqLwogewogCWNoYXIgKmxjX25h bWU7CkBAIC0xMDksMTggKzEyNyw4IEBAIHN0YXRpYyB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2Ns b3N1cmVfZ2V0X20KIAlpZiAoKG1ldGhvZF9sZW4gPT0gc2l6ZW9mKFpFTkRfSU5WT0tFX0ZV TkNfTkFNRSktMSkgJiYKIAkJbWVtY21wKGxjX25hbWUsIFpFTkRfSU5WT0tFX0ZVTkNfTkFN RSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSktMSkgPT0gMAogCSkgewotCQl6ZW5k X2Nsb3N1cmUgKmNsb3N1cmUgPSAoemVuZF9jbG9zdXJlICopemVuZF9vYmplY3Rfc3RvcmVf Z2V0X29iamVjdCgqb2JqZWN0X3B0ciBUU1JNTFNfQ0MpOwotCQl6ZW5kX2Z1bmN0aW9uICpp bnZva2UgPSAoemVuZF9mdW5jdGlvbiopZW1hbGxvYyhzaXplb2YoemVuZF9mdW5jdGlvbikp OwotCi0JCWludm9rZS0+Y29tbW9uID0gY2xvc3VyZS0+ZnVuYy5jb21tb247Ci0JCWludm9r ZS0+dHlwZSA9IFpFTkRfSU5URVJOQUxfRlVOQ1RJT047Ci0JCWludm9rZS0+aW50ZXJuYWxf ZnVuY3Rpb24uZm5fZmxhZ3MgPSBaRU5EX0FDQ19DQUxMX1ZJQV9IQU5ETEVSOwotCQlpbnZv a2UtPmludGVybmFsX2Z1bmN0aW9uLmhhbmRsZXIgPSBaRU5EX01OKENsb3N1cmVfX19pbnZv a2UpOwotCQlpbnZva2UtPmludGVybmFsX2Z1bmN0aW9uLm1vZHVsZSA9IDA7Ci0JCWludm9r ZS0+aW50ZXJuYWxfZnVuY3Rpb24uc2NvcGUgPSB6ZW5kX2NlX2Nsb3N1cmU7Ci0JCWludm9r ZS0+aW50ZXJuYWxfZnVuY3Rpb24uZnVuY3Rpb25fbmFtZSA9IGVzdHJuZHVwKFpFTkRfSU5W T0tFX0ZVTkNfTkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSktMSk7CiAJCWZy ZWVfYWxsb2NhKGxjX25hbWUsIHVzZV9oZWFwKTsKLQkJcmV0dXJuIGludm9rZTsKKwkJcmV0 dXJuIHplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21ldGhvZCgqb2JqZWN0X3B0ciBUU1JNTFNf Q0MpOwogCX0KIAlmcmVlX2FsbG9jYShsY19uYW1lLCB1c2VfaGVhcCk7CiAJcmV0dXJuIE5V TEw7CkBAIC0xNzAsNyArMTc4LDcgQEAgc3RhdGljIHZvaWQgemVuZF9jbG9zdXJlX2ZyZWVf c3RvcmFnZSh2bwogCQl6ZW5kX2V4ZWN1dGVfZGF0YSAqZXggPSBFRyhjdXJyZW50X2V4ZWN1 dGVfZGF0YSk7CiAJCXdoaWxlIChleCkgewogCQkJaWYgKGV4LT5vcF9hcnJheSA9PSAmY2xv c3VyZS0+ZnVuYy5vcF9hcnJheSkgewotCQkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNhbm5v dCBkZXN0cm95IGFjdGl2ZSBsYW1iZGEgZnVuY3Rpb24iKTsKKwkJCQl6ZW5kX2Vycm9yKEVf UkVDT1ZFUkFCTEVfRVJST1IsICJDYW5ub3QgZGVzdHJveSBhY3RpdmUgbGFtYmRhIGZ1bmN0 aW9uIik7CiAJCQl9CiAJCQlleCA9IGV4LT5wcmV2X2V4ZWN1dGVfZGF0YTsKIAkJfQpJbmRl eDogWmVuZC96ZW5kX2Nsb3N1cmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9z aXRvcnkvWmVuZEVuZ2luZTIvemVuZF9jbG9zdXJlcy5oLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjEuMi4yCmRpZmYgLXUgLXAgLWQgLXIxLjEuMi4yIHplbmRfY2xvc3VyZXMuaAotLS0g WmVuZC96ZW5kX2Nsb3N1cmVzLmgJMTQgSnVsIDIwMDggMDk6NDg6NTkgLTAwMDAJMS4xLjIu MgorKysgWmVuZC96ZW5kX2Nsb3N1cmVzLmgJOCBBdWcgMjAwOCAyMjozMTo1MSAtMDAwMApA QCAtMjQsMTAgKzI0LDE1IEBACiAKIEJFR0lOX0VYVEVSTl9DKCkKIAorI2RlZmluZSBaRU5E X0lOVk9LRV9GVU5DX05BTUUgIl9faW52b2tlIgorCiB2b2lkIHplbmRfcmVnaXN0ZXJfY2xv c3VyZV9jZShUU1JNTFNfRCk7CiAKK2V4dGVybiBaRU5EX0FQSSB6ZW5kX2NsYXNzX2VudHJ5 ICp6ZW5kX2NlX2Nsb3N1cmU7CisKIFpFTkRfQVBJIHZvaWQgemVuZF9jcmVhdGVfY2xvc3Vy ZSh6dmFsICpyZXMsIHplbmRfZnVuY3Rpb24gKm9wX2FycmF5LCB6ZW5kX2NsYXNzX2VudHJ5 ICpzY29wZSwgenZhbCAqdGhpc19wdHIgVFNSTUxTX0RDKTsKIFpFTkRfQVBJIGludCB6ZW5k X2dldF9jbG9zdXJlKHp2YWwgKm9iaiwgemVuZF9jbGFzc19lbnRyeSAqKmNlX3B0ciwgemVu ZF9mdW5jdGlvbiAqKmZwdHJfcHRyLCB6dmFsICoqem9ial9wdHIsIHp2YWwgKioqem9ial9w dHJfcHRyIFRTUk1MU19EQyk7CitaRU5EX0FQSSB6ZW5kX2Z1bmN0aW9uICp6ZW5kX2dldF9j bG9zdXJlX2ludm9rZV9tZXRob2QoenZhbCAqb2JqIFRTUk1MU19EQyk7CiAKIEVORF9FWFRF Uk5fQygpCiAKSW5kZXg6IGV4dC9yZWZsZWN0aW9uL3BocF9yZWZsZWN0aW9uLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvcGhwLXNyYy9leHQvcmVmbGVjdGlvbi9w aHBfcmVmbGVjdGlvbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2NC4yLjMzLjIuNDUu Mi4yNwpkaWZmIC11IC1wIC1kIC1yMS4xNjQuMi4zMy4yLjQ1LjIuMjcgcGhwX3JlZmxlY3Rp b24uYwotLS0gZXh0L3JlZmxlY3Rpb24vcGhwX3JlZmxlY3Rpb24uYwk4IEF1ZyAyMDA4IDEw OjUyOjQ4IC0wMDAwCTEuMTY0LjIuMzMuMi40NS4yLjI3CisrKyBleHQvcmVmbGVjdGlvbi9w aHBfcmVmbGVjdGlvbi5jCTggQXVnIDIwMDggMjI6MzE6NTMgLTAwMDAKQEAgLTUzNiw2ICs1 MzYsMTQgQEAgc3RhdGljIHZvaWQgX2NsYXNzX3N0cmluZyhzdHJpbmcgKnN0ciwgegogCQkJ CQkgICAgemVuZF9oYXNoX2dldF9jdXJyZW50X2tleV9leCgmY2UtPmZ1bmN0aW9uX3RhYmxl LCAma2V5LCAma2V5X2xlbiwgJm51bV9pbmRleCwgMCwgJnBvcykgIT0gSEFTSF9LRVlfSVNf U1RSSU5HIHx8CiAJCQkJCSAgICB6ZW5kX2JpbmFyeV9zdHJjYXNlY21wKGtleSwga2V5X2xl bi0xLCBtcHRyLT5jb21tb24uZnVuY3Rpb25fbmFtZSwgbGVuKSA9PSAwKSB7CiAKKwkJCQkJ CXplbmRfZnVuY3Rpb24gKmNsb3N1cmVfbXB0cjsKKwkJCQkJCS8qIHNlZSBpZiB0aGlzIGlz IGEgY2xvc3VyZSAqLworCQkJCQkJaWYgKGNlID09IHplbmRfY2VfY2xvc3VyZSAmJiBvYmog JiYgKGxlbiA9PSBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSAmJgorCQkJCQkJ CW1lbWNtcChtcHRyLT5jb21tb24uZnVuY3Rpb25fbmFtZSwgWkVORF9JTlZPS0VfRlVOQ19O QU1FLCBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSA9PSAwICYmCisJCQkJCQkJ KGNsb3N1cmVfbXB0ciA9IHplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21ldGhvZChvYmogVFNS TUxTX0NDKSkgIT0gTlVMTAorCQkJCQkJKSB7CisJCQkJCQkJbXB0ciA9IGNsb3N1cmVfbXB0 cjsKKwkJCQkJCX0KIAkJCQkJCXN0cmluZ19wcmludGYoJmR5biwgIlxuIik7CiAJCQkJCQlf ZnVuY3Rpb25fc3RyaW5nKCZkeW4sIG1wdHIsIGNlLCBzdWJfaW5kZW50LnN0cmluZyBUU1JN TFNfQ0MpOwogCQkJCQkJY291bnQrKzsKQEAgLTE4OTAsMTUgKzE4OTgsMzQgQEAgWkVORF9N RVRIT0QocmVmbGVjdGlvbl9wYXJhbWV0ZXIsIF9fY29ucwogCQkJCWNvbnZlcnRfdG9fc3Ry aW5nX2V4KG1ldGhvZCk7CiAJCQkJbGNuYW1lX2xlbiA9IFpfU1RSTEVOX1BQKG1ldGhvZCk7 CiAJCQkJbGNuYW1lID0gemVuZF9zdHJfdG9sb3dlcl9kdXAoWl9TVFJWQUxfUFAobWV0aG9k KSwgbGNuYW1lX2xlbik7Ci0JCQkJaWYgKHplbmRfaGFzaF9maW5kKCZjZS0+ZnVuY3Rpb25f dGFibGUsIGxjbmFtZSwgbGNuYW1lX2xlbiArIDEsICh2b2lkICoqKSAmZnB0cikgPT0gRkFJ TFVSRSkgeworCQkJCWlmIChjZSA9PSB6ZW5kX2NlX2Nsb3N1cmUgJiYgWl9UWVBFX1BQKGNs YXNzcmVmKSA9PSBJU19PQkpFQ1QgJiYKKwkJCQkJKGxjbmFtZV9sZW4gPT0gc2l6ZW9mKFpF TkRfSU5WT0tFX0ZVTkNfTkFNRSktMSkgJiYKKwkJCQkJbWVtY21wKGxjbmFtZSwgWkVORF9J TlZPS0VfRlVOQ19OQU1FLCBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSA9PSAw ICYmCisJCQkJCShmcHRyID0gemVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0aG9kKCpjbGFz c3JlZiBUU1JNTFNfQ0MpKSAhPSBOVUxMCisJCQkJKSB7CisJCQkJCS8qIGRvIG5vdGhpbmcs IGZwdHIgaXMgYWxyZWFkeSBzZXQgKi8KKwkJCQl9IGVsc2UgaWYgKHplbmRfaGFzaF9maW5k KCZjZS0+ZnVuY3Rpb25fdGFibGUsIGxjbmFtZSwgbGNuYW1lX2xlbiArIDEsICh2b2lkICoq KSAmZnB0cikgPT0gRkFJTFVSRSkgewogCQkJCQllZnJlZShsY25hbWUpOwogCQkJCQl6ZW5k X3Rocm93X2V4Y2VwdGlvbl9leChyZWZsZWN0aW9uX2V4Y2VwdGlvbl9wdHIsIDAgVFNSTUxT X0NDLCAKLQkJCQkJCSJNZXRob2QgJXM6OiVzKCkgZG9lcyBub3QgZXhpc3QiLCBaX1NUUlZB TF9QUChjbGFzc3JlZiksIFpfVFlQRV9QUChtZXRob2QpLCBaX1NUUlZBTF9QUChtZXRob2Qp KTsKKwkJCQkJCSJNZXRob2QgJXM6OiVzKCkgZG9lcyBub3QgZXhpc3QiLCBjZS0+bmFtZSwg Wl9TVFJWQUxfUFAobWV0aG9kKSk7CiAJCQkJCXJldHVybjsKIAkJCQl9CiAJCQkJZWZyZWUo bGNuYW1lKTsKIAkJCX0KIAkJCWJyZWFrOworCQkKKwkJY2FzZSBJU19PQkpFQ1Q6IHsKKwkJ CQljZSA9IFpfT0JKQ0VfUChyZWZlcmVuY2UpOworCQkJCQorCQkJCWlmIChjZSA9PSB6ZW5k X2NlX2Nsb3N1cmUgJiYgKGZwdHIgPSB6ZW5kX2dldF9jbG9zdXJlX2ludm9rZV9tZXRob2Qo cmVmZXJlbmNlIFRTUk1MU19DQykpICE9IE5VTEwpIHsKKwkJCQkJLyogZG8gbm90aGluZywg ZnB0ciBpcyBhbHJlYWR5IHNldCAqLworCQkJCX0gZWxzZSBpZiAoemVuZF9oYXNoX2ZpbmQo JmNlLT5mdW5jdGlvbl90YWJsZSwgWkVORF9JTlZPS0VfRlVOQ19OQU1FLCBzaXplb2YoWkVO RF9JTlZPS0VfRlVOQ19OQU1FKSwgKHZvaWQgKiopJmZwdHIpID09IEZBSUxVUkUpIHsKKwkJ CQkJemVuZF90aHJvd19leGNlcHRpb25fZXgocmVmbGVjdGlvbl9leGNlcHRpb25fcHRyLCAw IFRTUk1MU19DQywKKwkJCQkJCSJNZXRob2QgJXM6OiVzKCkgZG9lcyBub3QgZXhpc3QiLCBj ZS0+bmFtZSwgWkVORF9JTlZPS0VfRlVOQ19OQU1FKTsKKwkJCQkJcmV0dXJuOworCQkJCX0K KwkJCX0KKwkJCWJyZWFrOwogCQkJCiAJCWRlZmF1bHQ6CiAJCQlfRE9fVEhST1coIlRoZSBw YXJhbWV0ZXIgY2xhc3MgaXMgZXhwZWN0ZWQgdG8gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFu IGFycmF5KGNsYXNzLCBtZXRob2QpIik7CkBAIC0yMjA3LDcgKzIyMzQsNyBAQCBaRU5EX01F VEhPRChyZWZsZWN0aW9uX21ldGhvZCwgZXhwb3J0KQogWkVORF9NRVRIT0QocmVmbGVjdGlv bl9tZXRob2QsIF9fY29uc3RydWN0KQogewogCXp2YWwgKm5hbWUsICpjbGFzc25hbWU7Ci0J enZhbCAqb2JqZWN0OworCXp2YWwgKm9iamVjdCwgKm9yaWdfb2JqOwogCXJlZmxlY3Rpb25f b2JqZWN0ICppbnRlcm47CiAJY2hhciAqbGNuYW1lOwogCXplbmRfY2xhc3NfZW50cnkgKipw Y2U7CkBAIC0yMjE3LDcgKzIyNDQsMTEgQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9tZXRo b2QsIF9fY29uc3RydQogCWludCBuYW1lX2xlbiwgdG1wX2xlbjsKIAl6dmFsIHp0bXA7CiAK LQlpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzX2V4KFpFTkRfUEFSU0VfUEFSQU1TX1FVSUVU LCBaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCAienMiLCAmY2xhc3NuYW1lLCAmbmFtZV9z dHIsICZuYW1lX2xlbikgPT0gRkFJTFVSRSkgeworCWlmICh6ZW5kX3BhcnNlX3BhcmFtZXRl cnNfZXgoWkVORF9QQVJTRV9QQVJBTVNfUVVJRVQsIFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNf Q0MsICJvIiwgJmNsYXNzbmFtZSkgPT0gU1VDQ0VTUykgeworCQluYW1lX3N0ciA9IFpFTkRf SU5WT0tFX0ZVTkNfTkFNRTsKKwkJbmFtZV9sZW4gPSBzaXplb2YoWkVORF9JTlZPS0VfRlVO Q19OQU1FKS0xOworCQlvcmlnX29iaiA9IGNsYXNzbmFtZTsKKwl9IGVsc2UgaWYgKHplbmRf cGFyc2VfcGFyYW1ldGVyc19leChaRU5EX1BBUlNFX1BBUkFNU19RVUlFVCwgWkVORF9OVU1f QVJHUygpIFRTUk1MU19DQywgInpzIiwgJmNsYXNzbmFtZSwgJm5hbWVfc3RyLCAmbmFtZV9s ZW4pID09IEZBSUxVUkUpIHsKIAkJaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05V TV9BUkdTKCkgVFNSTUxTX0NDLCAicyIsICZuYW1lX3N0ciwgJm5hbWVfbGVuKSA9PSBGQUlM VVJFKSB7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTIyMzAsNiArMjI2MSwxMSBAQCBaRU5EX01F VEhPRChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCVpWQUxfU1RSSU5HTChjbGFz c25hbWUsIG5hbWVfc3RyLCB0bXBfbGVuLCAxKTsKIAkJbmFtZV9sZW4gPSBuYW1lX2xlbiAt ICh0bXBfbGVuICsgMik7CiAJCW5hbWVfc3RyID0gdG1wICsgMjsKKwkJb3JpZ19vYmogPSBO VUxMOworCX0gZWxzZSBpZiAoWl9UWVBFX1AoY2xhc3NuYW1lKSA9PSBJU19PQkpFQ1QpIHsK KwkJb3JpZ19vYmogPSBjbGFzc25hbWU7CisJfSBlbHNlIHsKKwkJb3JpZ19vYmogPSBOVUxM OwogCX0KIAogCW9iamVjdCA9IGdldFRoaXMoKTsKQEAgLTIyNzUsNyArMjMxMSwxMiBAQCBa RU5EX01FVEhPRChyZWZsZWN0aW9uX21ldGhvZCwgX19jb25zdHJ1CiAJCiAJbGNuYW1lID0g emVuZF9zdHJfdG9sb3dlcl9kdXAobmFtZV9zdHIsIG5hbWVfbGVuKTsKIAotCWlmICh6ZW5k X2hhc2hfZmluZCgmY2UtPmZ1bmN0aW9uX3RhYmxlLCBsY25hbWUsIG5hbWVfbGVuICsgMSwg KHZvaWQgKiopICZtcHRyKSA9PSBGQUlMVVJFKSB7CisJaWYgKGNlID09IHplbmRfY2VfY2xv c3VyZSAmJiBvcmlnX29iaiAmJiAobmFtZV9sZW4gPT0gc2l6ZW9mKFpFTkRfSU5WT0tFX0ZV TkNfTkFNRSktMSkgJiYKKwkJbWVtY21wKGxjbmFtZSwgWkVORF9JTlZPS0VfRlVOQ19OQU1F LCBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSA9PSAwICYmCisJCShtcHRyID0g emVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0aG9kKG9yaWdfb2JqIFRTUk1MU19DQykpICE9 IE5VTEwKKwkpIHsKKwkJLyogZG8gbm90aGluZywgbXB0ciBhbHJlYWR5IHNldCAqLworCX0g ZWxzZSBpZiAoemVuZF9oYXNoX2ZpbmQoJmNlLT5mdW5jdGlvbl90YWJsZSwgbGNuYW1lLCBu YW1lX2xlbiArIDEsICh2b2lkICoqKSAmbXB0cikgPT0gRkFJTFVSRSkgewogCQllZnJlZShs Y25hbWUpOwogCQl6ZW5kX3Rocm93X2V4Y2VwdGlvbl9leChyZWZsZWN0aW9uX2V4Y2VwdGlv bl9wdHIsIDAgVFNSTUxTX0NDLCAKIAkJCSJNZXRob2QgJXM6OiVzKCkgZG9lcyBub3QgZXhp c3QiLCBjZS0+bmFtZSwgbmFtZV9zdHIpOwpAQCAtMzEzOSw3ICszMTgwLDEzIEBAIFpFTkRf TUVUSE9EKHJlZmxlY3Rpb25fY2xhc3MsIGdldE1ldGhvZCkKIAogCUdFVF9SRUZMRUNUSU9O X09CSkVDVF9QVFIoY2UpOwogCWxjX25hbWUgPSB6ZW5kX3N0cl90b2xvd2VyX2R1cChuYW1l LCBuYW1lX2xlbik7Ci0JaWYgKHplbmRfaGFzaF9maW5kKCZjZS0+ZnVuY3Rpb25fdGFibGUs IGxjX25hbWUsIG5hbWVfbGVuICsgMSwgKHZvaWQqKikgJm1wdHIpID09IFNVQ0NFU1MpIHsK KwlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYmIGludGVybi0+b2JqICYmIChuYW1lX2xl biA9PSBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19OQU1FKS0xKSAmJgorCQltZW1jbXAobGNf bmFtZSwgWkVORF9JTlZPS0VfRlVOQ19OQU1FLCBzaXplb2YoWkVORF9JTlZPS0VfRlVOQ19O QU1FKS0xKSA9PSAwICYmCisJCShtcHRyID0gemVuZF9nZXRfY2xvc3VyZV9pbnZva2VfbWV0 aG9kKGludGVybi0+b2JqIFRTUk1MU19DQykpICE9IE5VTEwKKwkpIHsKKwkJcmVmbGVjdGlv bl9tZXRob2RfZmFjdG9yeShjZSwgbXB0ciwgcmV0dXJuX3ZhbHVlIFRTUk1MU19DQyk7CisJ CWVmcmVlKGxjX25hbWUpOworCX0gZWxzZSBpZiAoemVuZF9oYXNoX2ZpbmQoJmNlLT5mdW5j dGlvbl90YWJsZSwgbGNfbmFtZSwgbmFtZV9sZW4gKyAxLCAodm9pZCoqKSAmbXB0cikgPT0g U1VDQ0VTUykgewogCQlyZWZsZWN0aW9uX21ldGhvZF9mYWN0b3J5KGNlLCBtcHRyLCByZXR1 cm5fdmFsdWUgVFNSTUxTX0NDKTsKIAkJZWZyZWUobGNfbmFtZSk7CiAJfSBlbHNlIHsKQEAg LTMxNTIsMTkgKzMxOTksMzYgQEAgWkVORF9NRVRIT0QocmVmbGVjdGlvbl9jbGFzcywgZ2V0 TWV0aG9kKQogLyogfX19ICovCiAKIC8qIHt7eyBfYWRkbWV0aG9kICovCi1zdGF0aWMgaW50 IF9hZGRtZXRob2QoemVuZF9mdW5jdGlvbiAqbXB0ciBUU1JNTFNfREMsIGludCBudW1fYXJn cywgdmFfbGlzdCBhcmdzLCB6ZW5kX2hhc2hfa2V5ICpoYXNoX2tleSkKK3N0YXRpYyB2b2lk IF9hZGRtZXRob2QoemVuZF9mdW5jdGlvbiAqbXB0ciwgemVuZF9jbGFzc19lbnRyeSAqY2Us IHp2YWwgKnJldHZhbCwgbG9uZyBmaWx0ZXIsIHp2YWwgKm9iaiBUU1JNTFNfREMpCiB7CiAJ enZhbCAqbWV0aG9kOwotCXplbmRfY2xhc3NfZW50cnkgKmNlID0gKnZhX2FyZyhhcmdzLCB6 ZW5kX2NsYXNzX2VudHJ5KiopOwotCXp2YWwgKnJldHZhbCA9IHZhX2FyZyhhcmdzLCB6dmFs Kik7Ci0JbG9uZyBmaWx0ZXIgPSB2YV9hcmcoYXJncywgbG9uZyk7CisJdWludCBsZW4gPSBz dHJsZW4obXB0ci0+Y29tbW9uLmZ1bmN0aW9uX25hbWUpOworCXplbmRfZnVuY3Rpb24gKmNs b3N1cmVfbXB0cjsKIAogCWlmIChtcHRyLT5jb21tb24uZm5fZmxhZ3MgJiBmaWx0ZXIpIHsK IAkJQUxMT0NfWlZBTChtZXRob2QpOworCQlpZiAoY2UgPT0gemVuZF9jZV9jbG9zdXJlICYm IG9iaiAmJiAobGVuID09IHNpemVvZihaRU5EX0lOVk9LRV9GVU5DX05BTUUpLTEpICYmCisJ CQltZW1jbXAobXB0ci0+Y29tbW9uLmZ1bmN0aW9uX25hbWUsIFpFTkRfSU5WT0tFX0ZVTkNf TkFNRSwgc2l6ZW9mKFpFTkRfSU5WT0tFX0ZVTkNfTkFNRSktMSkgPT0gMCAmJgorCQkJKGNs b3N1cmVfbXB0ciA9IHplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21ldGhvZChvYmogVFNSTUxT X0NDKSkgIT0gTlVMTAorCQkpIHsKKwkJCW1wdHIgPSBjbG9zdXJlX21wdHI7CisJCX0KIAkJ cmVmbGVjdGlvbl9tZXRob2RfZmFjdG9yeShjZSwgbXB0ciwgbWV0aG9kIFRTUk1MU19DQyk7 CiAJCWFkZF9uZXh0X2luZGV4X3p2YWwocmV0dmFsLCBtZXRob2QpOwogCX0KLQlyZXR1cm4g MDsKK30KKy8qIH19fSAqLworCisvKiB7e3sgX2FkZG1ldGhvZCAqLworc3RhdGljIGludCBf YWRkbWV0aG9kX3ZhKHplbmRfZnVuY3Rpb24gKm1wdHIgVFNSTUxTX0RDLCBpbnQgbnVtX2Fy Z3MsIHZhX2xpc3QgYXJncywgemVuZF9oYXNoX2tleSAqaGFzaF9rZXkpCit7CisJemVuZF9j bGFzc19lbnRyeSAqY2UgPSAqdmFfYXJnKGFyZ3MsIHplbmRfY2xhc3NfZW50cnkqKik7CisJ enZhbCAqcmV0dmFsID0gdmFfYXJnKGFyZ3MsIHp2YWwqKTsKKwlsb25nIGZpbHRlciA9IHZh X2FyZyhhcmdzLCBsb25nKTsKKwl6dmFsICpvYmogPSB2YV9hcmcoYXJncywgenZhbCAqKTsK KwkKKwlfYWRkbWV0aG9kKG1wdHIsIGNlLCByZXR2YWwsIGZpbHRlciwgb2JqIFRTUk1MU19D Qyk7CisJcmV0dXJuIFpFTkRfSEFTSF9BUFBMWV9LRUVQOwogfQogLyogfX19ICovCiAKQEAg LTMxOTAsNyArMzI1NCwxNiBAQCBaRU5EX01FVEhPRChyZWZsZWN0aW9uX2NsYXNzLCBnZXRN ZXRob2RzCiAJR0VUX1JFRkxFQ1RJT05fT0JKRUNUX1BUUihjZSk7CiAKIAlhcnJheV9pbml0 KHJldHVybl92YWx1ZSk7Ci0JemVuZF9oYXNoX2FwcGx5X3dpdGhfYXJndW1lbnRzKCZjZS0+ ZnVuY3Rpb25fdGFibGUgVFNSTUxTX0NDLCAoYXBwbHlfZnVuY19hcmdzX3QpIF9hZGRtZXRo b2QsIDMsICZjZSwgcmV0dXJuX3ZhbHVlLCBmaWx0ZXIpOworCXplbmRfaGFzaF9hcHBseV93 aXRoX2FyZ3VtZW50cygmY2UtPmZ1bmN0aW9uX3RhYmxlIFRTUk1MU19DQywgKGFwcGx5X2Z1 bmNfYXJnc190KSBfYWRkbWV0aG9kX3ZhLCA0LCAmY2UsIHJldHVybl92YWx1ZSwgZmlsdGVy LCBpbnRlcm4tPm9iaik7CisJaWYgKGludGVybi0+b2JqICYmIGluc3RhbmNlb2ZfZnVuY3Rp b24oY2UsIHplbmRfY2VfY2xvc3VyZSkpIHsKKwkJemVuZF9mdW5jdGlvbiAqY2xvc3VyZSA9 IHplbmRfZ2V0X2Nsb3N1cmVfaW52b2tlX21ldGhvZChpbnRlcm4tPm9iaiBUU1JNTFNfQ0Mp OworCQlpZiAoY2xvc3VyZSkgeworCQkJX2FkZG1ldGhvZChjbG9zdXJlLCBjZSwgcmV0dXJu X3ZhbHVlLCBmaWx0ZXIsIGludGVybi0+b2JqIFRTUk1MU19DQyk7CisJCQlpZiAoY2xvc3Vy ZS0+dHlwZSAhPSBaRU5EX1VTRVJfRlVOQ1RJT04gJiYgKGNsb3N1cmUtPmludGVybmFsX2Z1 bmN0aW9uLmZuX2ZsYWdzICYgWkVORF9BQ0NfQ0FMTF9WSUFfSEFORExFUikgIT0gMCkgewor CQkJCWVmcmVlKGNsb3N1cmUpOworCQkJfQorCQl9CisJfQogfQogLyogfX19ICovCiAKSW5k ZXg6IGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMS5waHB0Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMS5waHB0CmRp ZmYgLU4gZXh0L3JlZmxlY3Rpb24vdGVzdHMvY2xvc3VyZXNfMDAxLnBocHQKLS0tIC9kZXYv bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBleHQvcmVmbGVjdGlvbi90ZXN0 cy9jbG9zdXJlc18wMDEucGhwdAk4IEF1ZyAyMDA4IDIyOjMxOjUzIC0wMDAwCkBAIC0wLDAg KzEsNzAgQEAKKy0tVEVTVC0tCitSZWZsZWN0aW9uIG9uIGNsb3N1cmVzCistLUZJTEUtLSAK Kzw/cGhwCisKKyRjbG9zdXJlID0gZnVuY3Rpb24gKCRhLCAkYiA9IDApIHsgfTsKKworJHJv ID0gbmV3IFJlZmxlY3Rpb25PYmplY3QgKCRjbG9zdXJlKTsKKyRybSA9ICRyby0+Z2V0TWV0 aG9kICgnX19pbnZva2UnKTsKK3Zhcl9kdW1wICgkcm0tPmdldE51bWJlck9mUGFyYW1ldGVy cygpKTsKK3Zhcl9kdW1wICgkcm0tPmdldE51bWJlck9mUmVxdWlyZWRQYXJhbWV0ZXJzKCkp OworJHJtcyA9ICRyby0+Z2V0TWV0aG9kcygpOworZm9yZWFjaCAoJHJtcyBhcyAkcm0pIHsK KwlpZiAoJHJtLT5nZXROYW1lICgpID09ICdfX2ludm9rZScpIHsKKwkJdmFyX2R1bXAgKCRy bS0+Z2V0TnVtYmVyT2ZQYXJhbWV0ZXJzKCkpOworCQl2YXJfZHVtcCAoJHJtLT5nZXROdW1i ZXJPZlJlcXVpcmVkUGFyYW1ldGVycygpKTsKKwl9Cit9CisKK2VjaG8gIi0tLVxuIjsKKwor JHJtID0gbmV3IFJlZmxlY3Rpb25NZXRob2QgKCRjbG9zdXJlKTsKK3Zhcl9kdW1wICgkcm0t PmdldE5hbWUgKCkpOwordmFyX2R1bXAgKCRybS0+Z2V0TnVtYmVyT2ZQYXJhbWV0ZXJzKCkp OwordmFyX2R1bXAgKCRybS0+Z2V0TnVtYmVyT2ZSZXF1aXJlZFBhcmFtZXRlcnMoKSk7CisK K2VjaG8gIi0tLVxuIjsKKworJHJwID0gbmV3IFJlZmxlY3Rpb25QYXJhbWV0ZXIgKGFycmF5 ICgkY2xvc3VyZSwgJ19faW52b2tlJyksIDApOwordmFyX2R1bXAgKCRycC0+aXNPcHRpb25h bCAoKSk7CiskcnAgPSBuZXcgUmVmbGVjdGlvblBhcmFtZXRlciAoYXJyYXkgKCRjbG9zdXJl LCAnX19pbnZva2UnKSwgMSk7Cit2YXJfZHVtcCAoJHJwLT5pc09wdGlvbmFsICgpKTsKKyRy cCA9IG5ldyBSZWZsZWN0aW9uUGFyYW1ldGVyIChhcnJheSAoJGNsb3N1cmUsICdfX2ludm9r ZScpLCAnYScpOwordmFyX2R1bXAgKCRycC0+aXNPcHRpb25hbCAoKSk7CiskcnAgPSBuZXcg UmVmbGVjdGlvblBhcmFtZXRlciAoYXJyYXkgKCRjbG9zdXJlLCAnX19pbnZva2UnKSwgJ2In KTsKK3Zhcl9kdW1wICgkcnAtPmlzT3B0aW9uYWwgKCkpOworCitlY2hvICItLS1cbiI7CisK KyRycCA9IG5ldyBSZWZsZWN0aW9uUGFyYW1ldGVyICgkY2xvc3VyZSwgMCk7Cit2YXJfZHVt cCAoJHJwLT5pc09wdGlvbmFsICgpKTsKKyRycCA9IG5ldyBSZWZsZWN0aW9uUGFyYW1ldGVy ICgkY2xvc3VyZSwgMSk7Cit2YXJfZHVtcCAoJHJwLT5pc09wdGlvbmFsICgpKTsKKyRycCA9 IG5ldyBSZWZsZWN0aW9uUGFyYW1ldGVyICgkY2xvc3VyZSwgJ2EnKTsKK3Zhcl9kdW1wICgk cnAtPmlzT3B0aW9uYWwgKCkpOworJHJwID0gbmV3IFJlZmxlY3Rpb25QYXJhbWV0ZXIgKCRj bG9zdXJlLCAnYicpOwordmFyX2R1bXAgKCRycC0+aXNPcHRpb25hbCAoKSk7CisKKz8+Cis9 PT1ET05FPT09CistLUVYUEVDVEYtLQoraW50KDIpCitpbnQoMSkKK2ludCgyKQoraW50KDEp CistLS0KK3N0cmluZyg4KSAiX19pbnZva2UiCitpbnQoMikKK2ludCgxKQorLS0tCitib29s KGZhbHNlKQorYm9vbCh0cnVlKQorYm9vbChmYWxzZSkKK2Jvb2wodHJ1ZSkKKy0tLQorYm9v bChmYWxzZSkKK2Jvb2wodHJ1ZSkKK2Jvb2woZmFsc2UpCitib29sKHRydWUpCis9PT1ET05F PT09CkluZGV4OiBleHQvcmVmbGVjdGlvbi90ZXN0cy9jbG9zdXJlc18wMDIucGhwdAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiBleHQvcmVmbGVjdGlvbi90ZXN0cy9jbG9zdXJlc18wMDIu cGhwdApkaWZmIC1OIGV4dC9yZWZsZWN0aW9uL3Rlc3RzL2Nsb3N1cmVzXzAwMi5waHB0Ci0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgZXh0L3JlZmxlY3Rp b24vdGVzdHMvY2xvc3VyZXNfMDAyLnBocHQJOCBBdWcgMjAwOCAyMjozMTo1MyAtMDAwMApA QCAtMCwwICsxLDI1IEBACistLVRFU1QtLQorUmVmbGVjdGlvbiBvbiBpbnZva2FibGUgb2Jq ZWN0cworLS1GSUxFLS0gCis8P3BocAorCiskcm0gPSBuZXcgUmVmbGVjdGlvbk1ldGhvZCAo bmV3IEMpOwordmFyX2R1bXAgKCRybS0+Z2V0TmFtZSAoKSk7Cit2YXJfZHVtcCAoJHJtLT5n ZXROdW1iZXJPZlBhcmFtZXRlcnMoKSk7Cit2YXJfZHVtcCAoJHJtLT5nZXROdW1iZXJPZlJl cXVpcmVkUGFyYW1ldGVycygpKTsKKworJHJwID0gbmV3IFJlZmxlY3Rpb25QYXJhbWV0ZXIg KG5ldyBDLCAwKTsKK3Zhcl9kdW1wICgkcnAtPmlzT3B0aW9uYWwgKCkpOworCitjbGFzcyBD IHsKKwlmdW5jdGlvbiBfX2ludm9rZSAoJGEpIHsgfQorfQorCis/PgorPT09RE9ORT09PQor LS1FWFBFQ1RGLS0KK3N0cmluZyg4KSAiX19pbnZva2UiCitpbnQoMSkKK2ludCgxKQorYm9v bChmYWxzZSkKKz09PURPTkU9PT0KSW5kZXg6IFplbmQvdGVzdHMvY2xvc3VyZV8wMTcucGhw dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi90ZXN0 cy9jbG9zdXJlXzAxNy5waHB0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMi4xCmRpZmYg LXUgLXAgLWQgLXIxLjEuMi4xIGNsb3N1cmVfMDE3LnBocHQKLS0tIFplbmQvdGVzdHMvY2xv c3VyZV8wMTcucGhwdAkxNCBKdWwgMjAwOCAxMzozNjo0MCAtMDAwMAkxLjEuMi4xCisrKyBa ZW5kL3Rlc3RzL2Nsb3N1cmVfMDE3LnBocHQJOCBBdWcgMjAwOCAyMjozMTo1MyAtMDAwMApA QCAtOSw0ICs5LDQgQEAgJGEoJGEpOwogCiA/PgogLS1FWFBFQ1RGLS0KLUZhdGFsIGVycm9y OiBDYW5ub3QgZGVzdHJveSBhY3RpdmUgbGFtYmRhIGZ1bmN0aW9uIGluICVzIG9uIGxpbmUg JWQKK0NhdGNoYWJsZSBmYXRhbCBlcnJvcjogQ2Fubm90IGRlc3Ryb3kgYWN0aXZlIGxhbWJk YSBmdW5jdGlvbiBpbiAlcyBvbiBsaW5lICVkCkluZGV4OiBaZW5kL3Rlc3RzL2Nsb3N1cmVf MDIyLnBocHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2lu ZTIvdGVzdHMvY2xvc3VyZV8wMjIucGhwdCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjIu MgpkaWZmIC11IC1wIC1kIC1yMS4xLjIuMiBjbG9zdXJlXzAyMi5waHB0Ci0tLSBaZW5kL3Rl c3RzL2Nsb3N1cmVfMDIyLnBocHQJMjIgSnVsIDIwMDggMDc6Mjk6MzEgLTAwMDAJMS4xLjIu MgorKysgWmVuZC90ZXN0cy9jbG9zdXJlXzAyMi5waHB0CTggQXVnIDIwMDggMjI6MzE6NTMg LTAwMDAKQEAgLTgsNSArOCw1IEBAICRmb28gPSBmdW5jdGlvbigpIHVzZSAoJGEpIHsKICRm b28tPmEgPSAxOwogPz4KIC0tRVhQRUNURi0tCi1GYXRhbCBlcnJvcjogQ2xvc3VyZSBvYmpl Y3QgY2Fubm90IGhhdmUgcHJvcGVydGllcyBpbiAlc2Nsb3N1cmVfMDIyLnBocCBvbiBsaW5l IDUKK0NhdGNoYWJsZSBmYXRhbCBlcnJvcjogQ2xvc3VyZSBvYmplY3QgY2Fubm90IGhhdmUg cHJvcGVydGllcyBpbiAlc2Nsb3N1cmVfMDIyLnBocCBvbiBsaW5lIDUKIAo= ------------5AC29A75017FE--