Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:33432 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 6232 invoked by uid 1010); 26 Nov 2007 06:12:06 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 6216 invoked from network); 26 Nov 2007 06:12:06 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 Nov 2007 06:12:06 -0000 Authentication-Results: pb1.pair.com smtp.mail=m@digitalsandwich.com; spf=softfail; sender-id=softfail Authentication-Results: pb1.pair.com header.from=m@digitalsandwich.com; sender-id=softfail Received-SPF: softfail (pb1.pair.com: domain digitalsandwich.com does not designate 68.230.241.39 as permitted sender) X-PHP-List-Original-Sender: m@digitalsandwich.com X-Host-Fingerprint: 68.230.241.39 fed1rmmtao107.cox.net Solaris 10 (beta) Received: from [68.230.241.39] ([68.230.241.39:38684] helo=fed1rmmtao107.cox.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 5B/25-63037-4B36A474 for ; Mon, 26 Nov 2007 01:12:05 -0500 Received: from fed1rmimpo03.cox.net ([70.169.32.75]) by fed1rmmtao107.cox.net (InterMail vM.7.08.02.01 201-2186-121-102-20070209) with ESMTP id <20071126061200.BJHN25420.fed1rmmtao107.cox.net@fed1rmimpo03.cox.net> for ; Mon, 26 Nov 2007 01:12:00 -0500 Received: from [192.168.0.101] ([68.96.248.22]) by fed1rmimpo03.cox.net with bizsmtp id HJC01Y00L0Vk8yk0000000; Mon, 26 Nov 2007 01:12:01 -0500 Message-ID: <4749F328.8080506@digitalsandwich.com> Date: Sun, 25 Nov 2007 22:11:52 +0000 User-Agent: Thunderbird 2.0.0.9 (X11/20071121) MIME-Version: 1.0 To: PHP Developers Mailing List References: <4740C654.3020302@digitalsandwich.com> <474154E0.4070302@zend.com> <47417C65.8010708@iamjochem.com> <474130B3.9070303@digitalsandwich.com> <4741DC81.6000506@zend.com> <4741D574.2020800@digitalsandwich.com> <474247A2.5050301@zend.com> <4741D9D1.6030106@digitalsandwich.com> <47424B4F.2@zend.com> <4743CED7.5050402@avalon.aut.bme.hu> In-Reply-To: <4743CED7.5050402@avalon.aut.bme.hu> Content-Type: multipart/mixed; boundary="------------080502010504020903010607" Subject: [PATCH] late binding for parent (and other options) - Was Re: [PHP-DEV] late static binding php6 From: m@digitalsandwich.com (Mike Lively) --------------080502010504020903010607 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit I have come up with three different patches that allow us to work around the issue of parent:: being considered an 'explicit class reference' and thus disallowing static:: to effectively used. The patches are against 5.3. I also have patches against HEAD but I was having problems getting run-tests.php to run against that code base (it would hang on the first test no matter which set of tests I ws running.) All three patches have different levels of intrusiveness to the engine and all three patches have been tested against (and pass) the existing lsb tests in Zend/tests/lsb_*.phpt 1.) lsb.parent-forwarding.patch This patch modifies the behavior of only parent:: to not change EG(called_class) to the parent of the current scope. With this change. will output: A B It should be noticed that with this patch parent:: will always resolve to the parent of the current scope, it will just not make any changes to the called_scope (effectively) 2.) lsb.new-keyword.patch This patch effectively does the same thing as the parent forwarding patch, but does it by introducing a new keyword. I had no idea what to call this keyword so for the time being I am using '__parentf'. If this is a direction people want to go this can of course be changed with a relatively simple search & replace in the patch file. The code above would need to be changed to: This patch carries the same costs as the parent forwarding patch with the additional costs of having to check for a new keyword when declaring classes/namespaces/interfaces and calling static methods. Perhaps someone knows a cheaper way to do this? 3.) lsb.forward_static_call.patch This patch implements my desired functionality by using two new functions: forward_static_call() and forward_static_call_array(). These functions ares similar to the call_user_func*() functions however the first parameter is not a callback but a string specifying the desired static method that exists in the current scope's parent class. The function will error out with messages similar to parent:: if called from outside of a class or from within a class that does not have a parent. So with this patch the code would change to: This patch is completely outside of the Zend engine and as such existing lsb functionality is not affected at all. So, with these three options on the table I think it is very clear that what we are asking for can be done with varying levels of 'intrusiveness', so what does everyone think? If one of these options looks worth pursuing I can put together the tests I have written for all of them, cleanup the code, help with documentation, etc. - Mike Lively http://www.digitalsandwich.com --------------080502010504020903010607 Content-Type: text/plain; name="lsb.forward_static_call.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="lsb.forward_static_call.patch" PyAuY3Byb2plY3QKPyAucHJvamVjdAo/IFplbmQKPyBsc2IuZm9yd2FyZF9zdGF0aWNfY2Fs bC5wYXRjaAo/IGxzYi5uZXcta2V5d29yZC5wYXRjaAo/IGxzYi5wYXJlbnQtZm9yd2FyZGlu Zy5wYXRjaAo/IHBlYXIvc2NyaXB0cwpJbmRleDogZXh0L3N0YW5kYXJkL2Jhc2ljX2Z1bmN0 aW9ucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L3BocC1zcmMvZXh0 L3N0YW5kYXJkL2Jhc2ljX2Z1bmN0aW9ucy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcy NS4yLjMxLjIuNjQuMi4xNApkaWZmIC11IC1yMS43MjUuMi4zMS4yLjY0LjIuMTQgYmFzaWNf ZnVuY3Rpb25zLmMKLS0tIGV4dC9zdGFuZGFyZC9iYXNpY19mdW5jdGlvbnMuYwkyMSBOb3Yg MjAwNyAxMDoyNDoyMSAtMDAwMAkxLjcyNS4yLjMxLjIuNjQuMi4xNAorKysgZXh0L3N0YW5k YXJkL2Jhc2ljX2Z1bmN0aW9ucy5jCTI2IE5vdiAyMDA3IDA0OjAxOjQ4IC0wMDAwCkBAIC04 MTAsNiArODEwLDE5IEBACiBaRU5EX0VORF9BUkdfSU5GTygpCiAKIHN0YXRpYworWkVORF9C RUdJTl9BUkdfSU5GT19FWChhcmdpbmZvX2ZvcndhcmRfc3RhdGljX2NhbGwsIDAsIDAsIDEp CisJWkVORF9BUkdfSU5GTygwLCBtZXRob2RfbmFtZSkKKwlaRU5EX0FSR19JTkZPKDAsIHBh cm1ldGVyKQorCVpFTkRfQVJHX0lORk8oMCwgLi4uKQorWkVORF9FTkRfQVJHX0lORk8oKQor c3RhdGljCitaRU5EX0JFR0lOX0FSR19JTkZPX0VYKGFyZ2luZm9fZm9yd2FyZF9zdGF0aWNf Y2FsbF9hcnJheSwgMCwgMCwgMikKKwlaRU5EX0FSR19JTkZPKDAsIG1ldGhvZF9uYW1lKQor CVpFTkRfQVJHX0lORk8oMCwgcGFyYW1ldGVycykgLyogQVJSQVlfSU5GTygwLCBwYXJhbWV0 ZXJzLCAxKSAqLworWkVORF9FTkRfQVJHX0lORk8oKQorCisKK3N0YXRpYwogWkVORF9CRUdJ Tl9BUkdfSU5GTyhhcmdpbmZvX3JlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uLCAwKQogCVpF TkRfQVJHX0lORk8oMCwgZnVuY3Rpb25fbmFtZSkKIFpFTkRfRU5EX0FSR19JTkZPKCkKQEAg LTMzNTcsNiArMzM3MCw4IEBACiAJUEhQX0ZFKGNhbGxfdXNlcl9mdW5jX2FycmF5LAkJCQkJ CQkJCQkJYXJnaW5mb19jYWxsX3VzZXJfZnVuY19hcnJheSkKIAlQSFBfREVQX0ZFKGNhbGxf dXNlcl9tZXRob2QsCQkJCQkJCQkJCQlhcmdpbmZvX2NhbGxfdXNlcl9tZXRob2QpCiAJUEhQ X0RFUF9GRShjYWxsX3VzZXJfbWV0aG9kX2FycmF5LAkJCQkJCQkJCQlhcmdpbmZvX2NhbGxf dXNlcl9tZXRob2RfYXJyYXkpCisJUEhQX0ZFKGZvcndhcmRfc3RhdGljX2NhbGwsCQkJCQkJ CQkJCQkJYXJnaW5mb19mb3J3YXJkX3N0YXRpY19jYWxsKQorCVBIUF9GRShmb3J3YXJkX3N0 YXRpY19jYWxsX2FycmF5LAkJCQkJCQkJCQlhcmdpbmZvX2ZvcndhcmRfc3RhdGljX2NhbGxf YXJyYXkpCiAJUEhQX0ZFKHNlcmlhbGl6ZSwJCQkJCQkJCQkJCQkJCWFyZ2luZm9fc2VyaWFs aXplKQogCVBIUF9GRSh1bnNlcmlhbGl6ZSwJCQkJCQkJCQkJCQkJCWFyZ2luZm9fdW5zZXJp YWxpemUpCiAKQEAgLTUyMTQsNiArNTIyOSwxMjYgQEAKIH0KIC8qIH19fSAqLwogCisvKiB7 e3sgcHJvdG8gbWl4ZWQgZm9yd2FyZF9zdGF0aWNfY2FsbChzdHJpbmcgbWV0aG9kX25hbWUg WywgbWl4ZWQgcGFybWV0ZXJdIFssIG1peGVkIC4uLl0pCisgICBDYWxsIGEgbWV0aG9kIG9u IHRoZSBjdXJyZW50IHNjb3BlIHBhcmVudCdzIGNsYXNzIHVzaW5nIHRoZSBjdXJyZW50IGNs YXNzIGFzIHRoZSBjYWxsZXIgKi8KK1BIUF9GVU5DVElPTihmb3J3YXJkX3N0YXRpY19jYWxs KQoreworCWNoYXIgKm1ldGhvZF9uYW1lOworCWludCBtZXRob2RfbmFtZV9sZW47CisJenZh bCAqKipwYXJhbXMgPSBOVUxMOworCXplbmRfdWludCBwYXJhbV9jb3VudCA9IDA7CisJCisJ enZhbCAqcmV0dmFsX3B0ciA9IE5VTEw7CisJemVuZF9mY2FsbF9pbmZvIGZjaTsKKwl6ZW5k X2ZjYWxsX2luZm9fY2FjaGUgZmNpX2NhY2hlOworCXp2YWwgKmNhbGxhYmxlOworCQorCWlm ICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgInMq IiwgJm1ldGhvZF9uYW1lLCAmbWV0aG9kX25hbWVfbGVuLCAmcGFyYW1zLCAmcGFyYW1fY291 bnQpID09IEZBSUxVUkUpIHsKKwkJcmV0dXJuOworCX0KKwkKKwlpZiAoIUVHKGFjdGl2ZV9v cF9hcnJheSktPnNjb3BlKSB7CisJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNhbm5vdCBjYWxs IGZvcndhcmRfc3RhdGljX2NhbGwoKSB3aGVuIG5vIGNsYXNzIHNjb3BlIGlzIGFjdGl2ZSIp OworCX0gZWxzZSBpZiAoIUVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlLT5wYXJlbnQpIHsK KwkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2Fubm90IGNhbGwgZm9yd2FyZF9zdGF0aWNfY2Fs bCgpIHdoZW4gY3VycmVudCBjbGFzcyBzY29wZSBoYXMgbm8gcGFyZW50Iik7CisJfQorCQor CS8qKgorCSAqIFNldHVwIHRoZSBjYWxsYWJsZSB6dmFsCisJICovCisJQUxMT0NfSU5JVF9a VkFMKGNhbGxhYmxlKTsKKwlhcnJheV9pbml0KGNhbGxhYmxlKTsKKwlhZGRfbmV4dF9pbmRl eF9zdHJpbmcoY2FsbGFibGUsICJwYXJlbnQiLCAxKTsKKwlhZGRfbmV4dF9pbmRleF9zdHJp bmdsKGNhbGxhYmxlLCBtZXRob2RfbmFtZSwgbWV0aG9kX25hbWVfbGVuLCAxKTsKKworCS8q KgorCSAqIFNldHVwIHRoZSBmY2FsbF9pbmZvIGFuZCBmY2FsbF9pbmZvX2NhY2hlCisJICov CisJaWYgKHplbmRfZmNhbGxfaW5mb19pbml0KGNhbGxhYmxlLCAmZmNpLCAmZmNpX2NhY2hl LCBOVUxMKSA9PSBTVUNDRVNTKSB7CisJCWZjaS5wYXJhbXMgPSBwYXJhbXM7CisJCWZjaS5w YXJhbV9jb3VudCA9IHBhcmFtX2NvdW50OworCQlmY2lfY2FjaGUuY2FsbGluZ19zY29wZSA9 IEVHKGNhbGxlZF9zY29wZSk7CisJCisJCS8qKgorCQkgKiBQb2ludCB0aGUgZnVuY3Rpb24g cmV0dXJuIHRvIHRoZSBjYWxsZWQgZnVuY3Rpb24gYW5kIGNhbGwgaXQKKwkJICovCisJCWZj aS5yZXR2YWxfcHRyX3B0ciA9ICZyZXR2YWxfcHRyOworCQorCQlpZiAoemVuZF9jYWxsX2Z1 bmN0aW9uKCZmY2ksICZmY2lfY2FjaGUgVFNSTUxTX0NDKSA9PSBTVUNDRVNTICYmIGZjaS5y ZXR2YWxfcHRyX3B0ciAmJiAqZmNpLnJldHZhbF9wdHJfcHRyKSB7CisJCQlDT1BZX1BaVkFM X1RPX1pWQUwoKnJldHVybl92YWx1ZSwgKmZjaS5yZXR2YWxfcHRyX3B0cik7CisJCX0KKwl9 IGVsc2UgeworCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJmb3J3YXJkX3N0YXRpY19jYWxsKCkg ZXhwZWN0cyBwYXJhbWV0ZXIgMSB0byBiZSBhIHN0YXRpYyBtZXRob2QgZm91bmQgaW4gY2xh c3MgJyVzJywgJyVzJyBnaXZlbiIsIEVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlLT5wYXJl bnQtPm5hbWUsIG1ldGhvZF9uYW1lKTsKKwl9CisJLyoqCisJICogQ2xlYW51cAorCSAqLwor CXp2YWxfcHRyX2R0b3IoJmNhbGxhYmxlKTsKKwlpZiAoZmNpLnBhcmFtcykgeworCQllZnJl ZShmY2kucGFyYW1zKTsKKwl9Cit9CisvKiB9fX0gKi8KKworLyoge3t7IHByb3RvIG1peGVk IGNhbGxfdXNlcl9mdW5jX2FycmF5KHN0cmluZyBtZXRob2RfbmFtZSwgYXJyYXkgcGFyYW1l dGVycykKKyAgIENhbGwgYSB1c2VyIGZ1bmN0aW9uIHdoaWNoIGlzIHRoZSBmaXJzdCBwYXJh bWV0ZXIgd2l0aCB0aGUgYXJndW1lbnRzIGNvbnRhaW5lZCBpbiBhcnJheSAqLworUEhQX0ZV TkNUSU9OKGZvcndhcmRfc3RhdGljX2NhbGxfYXJyYXkpCit7CisJY2hhciAqbWV0aG9kX25h bWU7CisJaW50IG1ldGhvZF9uYW1lX2xlbjsKKwkKKwl6dmFsICpwYXJhbXMsICpyZXR2YWxf cHRyID0gTlVMTDsKKwkKKwl6ZW5kX2ZjYWxsX2luZm8gZmNpOworCXplbmRfZmNhbGxfaW5m b19jYWNoZSBmY2lfY2FjaGU7CisJenZhbCAqY2FsbGFibGU7CisKKwlpZiAoemVuZF9wYXJz ZV9wYXJhbWV0ZXJzKFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsICJzYS8iLCAmbWV0aG9k X25hbWUsICZtZXRob2RfbmFtZV9sZW4sICZwYXJhbXMpID09IEZBSUxVUkUpIHsKKwkJcmV0 dXJuOworCX0KKwkKKwlpZiAoIUVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlKSB7CisJCXpl bmRfZXJyb3IoRV9FUlJPUiwgIkNhbm5vdCBjYWxsIGZvcndhcmRfc3RhdGljX2NhbGxfYXJy YXkoKSB3aGVuIG5vIGNsYXNzIHNjb3BlIGlzIGFjdGl2ZSIpOworCX0gZWxzZSBpZiAoIUVH KGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlLT5wYXJlbnQpIHsKKwkJemVuZF9lcnJvcihFX0VS Uk9SLCAiQ2Fubm90IGNhbGwgZm9yd2FyZF9zdGF0aWNfY2FsbF9hcnJheSgpIHdoZW4gY3Vy cmVudCBjbGFzcyBzY29wZSBoYXMgbm8gcGFyZW50Iik7CisJfQorCQorCQorCS8qKgorCSAq IFNldHVwIHRoZSBjYWxsYWJsZSB6dmFsCisJICovCisJQUxMT0NfSU5JVF9aVkFMKGNhbGxh YmxlKTsKKwlhcnJheV9pbml0KGNhbGxhYmxlKTsKKwlhZGRfbmV4dF9pbmRleF9zdHJpbmco Y2FsbGFibGUsICJwYXJlbnQiLCAxKTsKKwlhZGRfbmV4dF9pbmRleF9zdHJpbmdsKGNhbGxh YmxlLCBtZXRob2RfbmFtZSwgbWV0aG9kX25hbWVfbGVuLCAxKTsKKworCS8qKgorCSAqIFNl dHVwIHRoZSBmY2FsbF9pbmZvIGFuZCBmY2FsbF9pbmZvX2NhY2hlCisJICovCisJaWYgKHpl bmRfZmNhbGxfaW5mb19pbml0KGNhbGxhYmxlLCAmZmNpLCAmZmNpX2NhY2hlLCBOVUxMKSA9 PSBTVUNDRVNTKSB7CisJCWZjaV9jYWNoZS5jYWxsaW5nX3Njb3BlID0gRUcoY2FsbGVkX3Nj b3BlKTsKKwkJemVuZF9mY2FsbF9pbmZvX2FyZ3MoJmZjaSwgcGFyYW1zIFRTUk1MU19DQyk7 CisJCisJCS8qKgorCQkgKiBQb2ludCB0aGUgZnVuY3Rpb24gcmV0dXJuIHRvIHRoZSBjYWxs ZWQgZnVuY3Rpb24gYW5kIGNhbGwgaXQKKwkJICovCisJCWZjaS5yZXR2YWxfcHRyX3B0ciA9 ICZyZXR2YWxfcHRyOworCQorCQlpZiAoemVuZF9jYWxsX2Z1bmN0aW9uKCZmY2ksICZmY2lf Y2FjaGUgVFNSTUxTX0NDKSA9PSBTVUNDRVNTICYmIGZjaS5yZXR2YWxfcHRyX3B0ciAmJiAq ZmNpLnJldHZhbF9wdHJfcHRyKSB7CisJCQlDT1BZX1BaVkFMX1RPX1pWQUwoKnJldHVybl92 YWx1ZSwgKmZjaS5yZXR2YWxfcHRyX3B0cik7CisJCX0KKwl9IGVsc2UgeworCQl6ZW5kX2Vy cm9yKEVfRVJST1IsICJmb3J3YXJkX3N0YXRpY19jYWxsX2FycmF5KCkgZXhwZWN0cyBwYXJh bWV0ZXIgMSB0byBiZSBhIHN0YXRpYyBtZXRob2QgZm91bmQgaW4gY2xhc3MgJyVzJywgJyVz JyBnaXZlbiIsIEVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlLT5wYXJlbnQtPm5hbWUsIG1l dGhvZF9uYW1lKTsKKwl9CisJCisJLyoqCisJICogQ2xlYW51cAorCSAqLworCXp2YWxfcHRy X2R0b3IoJmNhbGxhYmxlKTsKKwl6ZW5kX2ZjYWxsX2luZm9fYXJnc19jbGVhcigmZmNpLCAx KTsKK30KKy8qIH19fSAqLworCiB2b2lkIHVzZXJfc2h1dGRvd25fZnVuY3Rpb25fZHRvcihw aHBfc2h1dGRvd25fZnVuY3Rpb25fZW50cnkgKnNodXRkb3duX2Z1bmN0aW9uX2VudHJ5KSAv KiB7e3sgKi8KIHsKIAlpbnQgaTsKSW5kZXg6IGV4dC9zdGFuZGFyZC9iYXNpY19mdW5jdGlv bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9waHAtc3JjL2V4dC9z dGFuZGFyZC9iYXNpY19mdW5jdGlvbnMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzku Mi40LjIuNi4yLjMKZGlmZiAtdSAtcjEuMTM5LjIuNC4yLjYuMi4zIGJhc2ljX2Z1bmN0aW9u cy5oCi0tLSBleHQvc3RhbmRhcmQvYmFzaWNfZnVuY3Rpb25zLmgJMiBOb3YgMjAwNyAxOTo0 MDozOSAtMDAwMAkxLjEzOS4yLjQuMi42LjIuMworKysgZXh0L3N0YW5kYXJkL2Jhc2ljX2Z1 bmN0aW9ucy5oCTI2IE5vdiAyMDA3IDA0OjAxOjQ4IC0wMDAwCkBAIC04NCw2ICs4NCw4IEBA CiBQSFBfRlVOQ1RJT04oY2FsbF91c2VyX2Z1bmNfYXJyYXkpOwogUEhQX0ZVTkNUSU9OKGNh bGxfdXNlcl9tZXRob2QpOwogUEhQX0ZVTkNUSU9OKGNhbGxfdXNlcl9tZXRob2RfYXJyYXkp OworUEhQX0ZVTkNUSU9OKGZvcndhcmRfc3RhdGljX2NhbGwpOworUEhQX0ZVTkNUSU9OKGZv cndhcmRfc3RhdGljX2NhbGxfYXJyYXkpOwogCiBQSFBfRlVOQ1RJT04ocmVnaXN0ZXJfc2h1 dGRvd25fZnVuY3Rpb24pOwogUEhQX0ZVTkNUSU9OKGhpZ2hsaWdodF9maWxlKTsK --------------080502010504020903010607 Content-Type: text/plain; name="lsb.new-keyword.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="lsb.new-keyword.patch" SW5kZXg6IFplbmQvemVuZF9BUEkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3Np dG9yeS9aZW5kRW5naW5lMi96ZW5kX0FQSS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI5 Ni4yLjI3LjIuMzQuMi4xMgpkaWZmIC11IC1yMS4yOTYuMi4yNy4yLjM0LjIuMTIgemVuZF9B UEkuYwotLS0gWmVuZC96ZW5kX0FQSS5jCTIyIE5vdiAyMDA3IDEzOjI3OjExIC0wMDAwCTEu Mjk2LjIuMjcuMi4zNC4yLjEyCisrKyBaZW5kL3plbmRfQVBJLmMJMjYgTm92IDIwMDcgMDA6 MDQ6MjQgLTAwMDAKQEAgLTIyODcsNyArMjI4Nyw3IEBACiB9CiAvKiB9fX0gKi8KIAotc3Rh dGljIGludCB6ZW5kX2lzX2NhbGxhYmxlX2NoZWNrX2Z1bmMoaW50IGNoZWNrX2ZsYWdzLCB6 dmFsICoqKnpvYmpfcHRyX3B0ciwgemVuZF9jbGFzc19lbnRyeSAqY2Vfb3JnLCB6dmFsICpj YWxsYWJsZSwgemVuZF9jbGFzc19lbnRyeSAqKmNlX3B0ciwgemVuZF9mdW5jdGlvbiAqKmZw dHJfcHRyIFRTUk1MU19EQykgLyoge3t7ICovCitzdGF0aWMgaW50IHplbmRfaXNfY2FsbGFi bGVfY2hlY2tfZnVuYyhpbnQgY2hlY2tfZmxhZ3MsIHp2YWwgKioqem9ial9wdHJfcHRyLCB6 ZW5kX2NsYXNzX2VudHJ5ICpjZV9vcmcsIHp2YWwgKmNhbGxhYmxlLCB6ZW5kX2NsYXNzX2Vu dHJ5ICoqY2VfcHRyLCB6ZW5kX3VpbnQgKmZldGNoX3R5cGUsIHplbmRfZnVuY3Rpb24gKipm cHRyX3B0ciBUU1JNTFNfREMpIC8qIHt7eyAqLwogewogCWludCByZXR2YWw7CiAJY2hhciAq bG1uYW1lLCAqY29sb247CkBAIC0yMzMzLDcgKzIzMzMsOCBAQAogCQkvKiBUaGlzIGlzIGEg Y29tcG91bmQgbmFtZS4KIAkJICogVHJ5IHRvIGZldGNoIGNsYXNzIGFuZCB0aGVuIGZpbmQg c3RhdGljIG1ldGhvZC4gKi8KICAJCSpjZV9wdHIgPSB6ZW5kX2ZldGNoX2NsYXNzKFpfU1RS VkFMX1AoY2FsbGFibGUpLCBjbGVuLCBaRU5EX0ZFVENIX0NMQVNTX0FVVE8gVFNSTUxTX0ND KTsKKwkJKmZldGNoX3R5cGUgPSB6ZW5kX2dldF9jbGFzc19mZXRjaF90eXBlKFpfU1RSVkFM X1AoY2FsbGFibGUpLCBjbGVuKTsKCQlpZiAoISpjZV9wdHIpIHsKIAkJCXJldHVybiAwOwog CQl9CiAJCWZ0YWJsZSA9ICYoKmNlX3B0ciktPmZ1bmN0aW9uX3RhYmxlOwpAQCAtMjM5NSwx MSArMjM5NiwxMiBAQAogfQogLyogfX19ICovCiAKLVpFTkRfQVBJIHplbmRfYm9vbCB6ZW5k X2lzX2NhbGxhYmxlX2V4KHp2YWwgKmNhbGxhYmxlLCB1aW50IGNoZWNrX2ZsYWdzLCBjaGFy ICoqY2FsbGFibGVfbmFtZSwgaW50ICpjYWxsYWJsZV9uYW1lX2xlbiwgemVuZF9jbGFzc19l bnRyeSAqKmNlX3B0ciwgemVuZF9mdW5jdGlvbiAqKmZwdHJfcHRyLCB6dmFsICoqKnpvYmpf cHRyX3B0ciBUU1JNTFNfREMpIC8qIHt7eyAqLworWkVORF9BUEkgemVuZF9ib29sIHplbmRf aXNfY2FsbGFibGVfZXgoenZhbCAqY2FsbGFibGUsIHVpbnQgY2hlY2tfZmxhZ3MsIGNoYXIg KipjYWxsYWJsZV9uYW1lLCBpbnQgKmNhbGxhYmxlX25hbWVfbGVuLCB6ZW5kX2NsYXNzX2Vu dHJ5ICoqY2VfcHRyLCB6ZW5kX3VpbnQgKmZldGNoX3R5cGUsIHplbmRfZnVuY3Rpb24gKipm cHRyX3B0ciwgenZhbCAqKip6b2JqX3B0cl9wdHIgVFNSTUxTX0RDKSAvKiB7e3sgKi8KIHsK IAljaGFyICpsY25hbWU7CiAJaW50IGNhbGxhYmxlX25hbWVfbGVuX2xvY2FsOwogCXplbmRf Y2xhc3NfZW50cnkgKmNlX2xvY2FsLCAqKnBjZTsKKwl6ZW5kX3VpbnQgZmV0Y2hfdHlwZV9s b2NhbDsKIAl6ZW5kX2Z1bmN0aW9uICpmcHRyX2xvY2FsOwogCXp2YWwgKip6b2JqX3B0cl9s b2NhbDsKIApAQCAtMjQxOCw3ICsyNDIwLDEyIEBACiAJaWYgKHpvYmpfcHRyX3B0ciA9PSBO VUxMKSB7CiAJCXpvYmpfcHRyX3B0ciA9ICZ6b2JqX3B0cl9sb2NhbDsKIAl9CisJaWYgKGZl dGNoX3R5cGUgPT0gTlVMTCkgeworCQlmZXRjaF90eXBlID0gJmZldGNoX3R5cGVfbG9jYWw7 CisJfQorCQogCSpjZV9wdHIgPSBOVUxMOworCSpmZXRjaF90eXBlID0gMDsKIAkqZnB0cl9w dHIgPSBOVUxMOwogCSp6b2JqX3B0cl9wdHIgPSBOVUxMOwogCkBAIC0yNDMyLDcgKzI0Mzks NyBAQAogCQkJCXJldHVybiAxOwogCQkJfQogCi0JCQlyZXR1cm4gemVuZF9pc19jYWxsYWJs ZV9jaGVja19mdW5jKGNoZWNrX2ZsYWdzfElTX0NBTExBQkxFX0NIRUNLX0lTX1NUQVRJQywg em9ial9wdHJfcHRyLCBOVUxMLCBjYWxsYWJsZSwgY2VfcHRyLCBmcHRyX3B0ciBUU1JNTFNf Q0MpOworCQkJcmV0dXJuIHplbmRfaXNfY2FsbGFibGVfY2hlY2tfZnVuYyhjaGVja19mbGFn c3xJU19DQUxMQUJMRV9DSEVDS19JU19TVEFUSUMsIHpvYmpfcHRyX3B0ciwgTlVMTCwgY2Fs bGFibGUsIGNlX3B0ciwgZmV0Y2hfdHlwZSwgZnB0cl9wdHIgVFNSTUxTX0NDKTsKIAogCQlj YXNlIElTX0FSUkFZOgogCQkJewpAQCAtMjQ3MCwxMyArMjQ3NywyMCBAQAogCQkJCQkJCVpf U1RSTEVOX1BQKG9iaikgPT0gc2l6ZW9mKCJzZWxmIikgLSAxICYmCiAJCQkJCQkJIW1lbWNt cChsY25hbWUsICJzZWxmIiwgc2l6ZW9mKCJzZWxmIikgLSAxKSkgewogCQkJCQkJCWNlID0g RUcoYWN0aXZlX29wX2FycmF5KS0+c2NvcGU7CisJCQkJCQkJKmZldGNoX3R5cGUgPSBaRU5E X0ZFVENIX0NMQVNTX1NFTEY7CiAJCQkJCQl9IGVsc2UgaWYgKEVHKGFjdGl2ZV9vcF9hcnJh eSkgJiYgRUcoYWN0aXZlX29wX2FycmF5KS0+c2NvcGUgJiYKIAkJCQkJCQlaX1NUUkxFTl9Q UChvYmopID09IHNpemVvZigicGFyZW50IikgLSAxICYmIAogCQkJCQkJCSFtZW1jbXAobGNu YW1lLCAicGFyZW50Iiwgc2l6ZW9mKCJwYXJlbnQiKSAtIDEpKSB7CiAJCQkJCQkJY2UgPSBF RyhhY3RpdmVfb3BfYXJyYXkpLT5zY29wZS0+cGFyZW50OworCQkJCQkJCSpmZXRjaF90eXBl ID0gWkVORF9GRVRDSF9DTEFTU19QQVJFTlQ7CiAJCQkJCQl9IGVsc2UgaWYgKFpfU1RSTEVO X1BQKG9iaikgPT0gc2l6ZW9mKCJzdGF0aWMiKSAtIDEgJiYKIAkJCQkJCQkhbWVtY21wKGxj bmFtZSwgInN0YXRpYyIsIHNpemVvZigic3RhdGljIikgLSAxKSkgewogCQkJCQkJCWNlID0g RUcoY2FsbGVkX3Njb3BlKTsKKwkJCQkJCQkqZmV0Y2hfdHlwZSA9IFpFTkRfRkVUQ0hfQ0xB U1NfU1RBVElDOworCQkJCQkJfSBlbHNlIGlmIChaX1NUUkxFTl9QUChvYmopID09IHNpemVv ZigiX19wYXJlbnRmIikgLSAxICYmCisJCQkJCQkJIW1lbWNtcChsY25hbWUsICJfX3BhcmVu dGYiLCBzaXplb2YoIl9fcGFyZW50ZiIpIC0gMSkpIHsKKwkJCQkJCQljZSA9IEVHKGFjdGl2 ZV9vcF9hcnJheSktPnNjb3BlLT5wYXJlbnQ7CisJCQkJCQkJKmZldGNoX3R5cGUgPSBaRU5E X0ZFVENIX0NMQVNTX19fUEFSRU5URjsKIAkJCQkJCX0gZWxzZSBpZiAoemVuZF9sb29rdXBf Y2xhc3MoWl9TVFJWQUxfUFAob2JqKSwgWl9TVFJMRU5fUFAob2JqKSwgJnBjZSBUU1JNTFNf Q0MpID09IFNVQ0NFU1MpIHsKIAkJCQkJCQljZSA9ICpwY2U7CiAJCQkJCQl9CkBAIC0yNTA1 LDcgKzI1MTksNyBAQAogCQkJCQl9CiAKIAkJCQkJaWYgKGNlKSB7Ci0JCQkJCQlyZXR1cm4g emVuZF9pc19jYWxsYWJsZV9jaGVja19mdW5jKGNoZWNrX2ZsYWdzLCB6b2JqX3B0cl9wdHIs IGNlLCAqbWV0aG9kLCBjZV9wdHIsIGZwdHJfcHRyIFRTUk1MU19DQyk7CisJCQkJCQlyZXR1 cm4gemVuZF9pc19jYWxsYWJsZV9jaGVja19mdW5jKGNoZWNrX2ZsYWdzLCB6b2JqX3B0cl9w dHIsIGNlLCAqbWV0aG9kLCBjZV9wdHIsIGZldGNoX3R5cGUsIGZwdHJfcHRyIFRTUk1MU19D Qyk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKGNhbGxhYmxlX25hbWUpIHsKIAkJCQkJKmNh bGxhYmxlX25hbWUgPSBlc3RybmR1cCgiQXJyYXkiLCBzaXplb2YoIkFycmF5IiktMSk7CkBA IC0yNTM0LDcgKzI1NDgsNyBAQAogewogCVRTUk1MU19GRVRDSCgpOwogCi0JcmV0dXJuIHpl bmRfaXNfY2FsbGFibGVfZXgoY2FsbGFibGUsIGNoZWNrX2ZsYWdzLCBjYWxsYWJsZV9uYW1l LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIFRTUk1MU19DQyk7CisJcmV0dXJuIHplbmRfaXNf Y2FsbGFibGVfZXgoY2FsbGFibGUsIGNoZWNrX2ZsYWdzLCBjYWxsYWJsZV9uYW1lLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIFRTUk1MU19DQyk7CiB9CiAvKiB9fX0gKi8KIApA QCAtMjU0NCw3ICsyNTU4LDcgQEAKIAl6ZW5kX2Z1bmN0aW9uICpmcHRyOwogCXp2YWwgKip6 b2JqX3B0cjsKIAotCWlmICh6ZW5kX2lzX2NhbGxhYmxlX2V4KGNhbGxhYmxlLCAwLCBjYWxs YWJsZV9uYW1lLCBOVUxMLCAmY2UsICZmcHRyLCAmem9ial9wdHIgVFNSTUxTX0NDKSkgewor CWlmICh6ZW5kX2lzX2NhbGxhYmxlX2V4KGNhbGxhYmxlLCAwLCBjYWxsYWJsZV9uYW1lLCBO VUxMLCAmY2UsIE5VTEwsICZmcHRyLCAmem9ial9wdHIgVFNSTUxTX0NDKSkgewogCQlpZiAo Wl9UWVBFX1AoY2FsbGFibGUpID09IElTX1NUUklORyAmJiBjZSkgewogCQkJenZhbF9kdG9y KGNhbGxhYmxlKTsKIAkJCWFycmF5X2luaXQoY2FsbGFibGUpOwpAQCAtMjU2NCw4ICsyNTc4 LDkgQEAKIAl6ZW5kX2NsYXNzX2VudHJ5ICpjZTsKIAl6ZW5kX2Z1bmN0aW9uICpmdW5jOwog CXp2YWwgKipvYmo7CisJemVuZF91aW50IGZldGNoX3R5cGU7CiAKLQlpZiAoIXplbmRfaXNf Y2FsbGFibGVfZXgoY2FsbGFibGUsIElTX0NBTExBQkxFX1NUUklDVCwgY2FsbGFibGVfbmFt ZSwgTlVMTCwgJmNlLCAmZnVuYywgJm9iaiBUU1JNTFNfQ0MpKSB7CisJaWYgKCF6ZW5kX2lz X2NhbGxhYmxlX2V4KGNhbGxhYmxlLCBJU19DQUxMQUJMRV9TVFJJQ1QsIGNhbGxhYmxlX25h bWUsIE5VTEwsICZjZSwgJmZldGNoX3R5cGUsICZmdW5jLCAmb2JqIFRTUk1MU19DQykpIHsK IAkJcmV0dXJuIEZBSUxVUkU7CiAJfQogCkBAIC0yNTkxLDcgKzI2MDYsMTEgQEAKIAl9IGVs c2UgewogCQlmY2MtPmluaXRpYWxpemVkID0gMTsKIAkJZmNjLT5mdW5jdGlvbl9oYW5kbGVy ID0gZnVuYzsKLQkJZmNjLT5jYWxsaW5nX3Njb3BlID0gY2U7CisJCWlmIChmZXRjaF90eXBl ID09IFpFTkRfRkVUQ0hfQ0xBU1NfX19QQVJFTlRGKSB7CisJCQlmY2MtPmNhbGxpbmdfc2Nv cGUgPSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJZmNjLT5jYWxsaW5nX3Nj b3BlID0gY2U7CisJCX0KIAkJZmNjLT5vYmplY3RfcHAgPSBvYmo7CiAJfQogCWVmcmVlKGxj bmFtZSk7CkluZGV4OiBaZW5kL3plbmRfQVBJLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9BUEkuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4yMDcuMi44LjIuOC4yLjUKZGlmZiAtdSAtcjEuMjA3LjIuOC4yLjguMi41IHplbmRf QVBJLmgKLS0tIFplbmQvemVuZF9BUEkuaAkyIE5vdiAyMDA3IDE5OjQwOjM3IC0wMDAwCTEu MjA3LjIuOC4yLjguMi41CisrKyBaZW5kL3plbmRfQVBJLmgJMjYgTm92IDIwMDcgMDA6MDQ6 MjUgLTAwMDAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiAjZGVmaW5lIElTX0NBTExBQkxFX1NU UklDVCAgKElTX0NBTExBQkxFX0NIRUNLX0lTX1NUQVRJQykKIAotWkVORF9BUEkgemVuZF9i b29sIHplbmRfaXNfY2FsbGFibGVfZXgoenZhbCAqY2FsbGFibGUsIHVpbnQgY2hlY2tfZmxh Z3MsIGNoYXIgKipjYWxsYWJsZV9uYW1lLCBpbnQgKmNhbGxhYmxlX25hbWVfbGVuLCB6ZW5k X2NsYXNzX2VudHJ5ICoqY2VfcHRyLCB6ZW5kX2Z1bmN0aW9uICoqZnB0cl9wdHIsIHp2YWwg Kioqem9ial9wdHJfcHRyIFRTUk1MU19EQyk7CitaRU5EX0FQSSB6ZW5kX2Jvb2wgemVuZF9p c19jYWxsYWJsZV9leCh6dmFsICpjYWxsYWJsZSwgdWludCBjaGVja19mbGFncywgY2hhciAq KmNhbGxhYmxlX25hbWUsIGludCAqY2FsbGFibGVfbmFtZV9sZW4sIHplbmRfY2xhc3NfZW50 cnkgKipjZV9wdHIsIHplbmRfdWludCAqZmV0Y2hfdHlwZSwgemVuZF9mdW5jdGlvbiAqKmZw dHJfcHRyLCB6dmFsICoqKnpvYmpfcHRyX3B0ciBUU1JNTFNfREMpOwogWkVORF9BUEkgemVu ZF9ib29sIHplbmRfaXNfY2FsbGFibGUoenZhbCAqY2FsbGFibGUsIHVpbnQgY2hlY2tfZmxh Z3MsIGNoYXIgKipjYWxsYWJsZV9uYW1lKTsKIFpFTkRfQVBJIHplbmRfYm9vbCB6ZW5kX21h a2VfY2FsbGFibGUoenZhbCAqY2FsbGFibGUsIGNoYXIgKipjYWxsYWJsZV9uYW1lIFRTUk1M U19EQyk7CiBaRU5EX0FQSSBjb25zdCBjaGFyICp6ZW5kX2dldF9tb2R1bGVfdmVyc2lvbihj b25zdCBjaGFyICptb2R1bGVfbmFtZSk7CkluZGV4OiBaZW5kL3plbmRfY29tcGlsZS5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9yZXBvc2l0b3J5L1plbmRFbmdpbmUyL3plbmRfY29t cGlsZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0Ny4yLjI3LjIuNDEuMi4yNgpkaWZm IC11IC1yMS42NDcuMi4yNy4yLjQxLjIuMjYgemVuZF9jb21waWxlLmMKLS0tIFplbmQvemVu ZF9jb21waWxlLmMJMjIgTm92IDIwMDcgMTM6Mjc6MTEgLTAwMDAJMS42NDcuMi4yNy4yLjQx LjIuMjYKKysrIFplbmQvemVuZF9jb21waWxlLmMJMjYgTm92IDIwMDcgMDA6MDQ6MjYgLTAw MDAKQEAgLTE2MzEsNiArMTYzMSw3IEBACiAJCQljYXNlIFpFTkRfRkVUQ0hfQ0xBU1NfU0VM RjoKIAkJCWNhc2UgWkVORF9GRVRDSF9DTEFTU19QQVJFTlQ6CiAJCQljYXNlIFpFTkRfRkVU Q0hfQ0xBU1NfU1RBVElDOgorCQkJY2FzZSBaRU5EX0ZFVENIX0NMQVNTX19fUEFSRU5URjoK IAkJCQlTRVRfVU5VU0VEKG9wbGluZS0+b3AyKTsKIAkJCQlvcGxpbmUtPmV4dGVuZGVkX3Zh bHVlID0gZmV0Y2hfdHlwZTsKIAkJCQl6dmFsX2R0b3IoJmNsYXNzX25hbWUtPnUuY29uc3Rh bnQpOwpAQCAtMzA1OSw3ICszMDYwLDcgQEAKIAogCWxjbmFtZSA9IHplbmRfc3RyX3RvbG93 ZXJfZHVwKGNsYXNzX25hbWUtPnUuY29uc3RhbnQudmFsdWUuc3RyLnZhbCwgY2xhc3NfbmFt ZS0+dS5jb25zdGFudC52YWx1ZS5zdHIubGVuKTsKIAotCWlmICghKHN0cmNtcChsY25hbWUs ICJzZWxmIikgJiYgc3RyY21wKGxjbmFtZSwgInBhcmVudCIpKSkgeworCWlmICghKHN0cmNt cChsY25hbWUsICJzZWxmIikgJiYgc3RyY21wKGxjbmFtZSwgInBhcmVudCIpICYmIHN0cmNt cChsY25hbWUsICJfX3BhcmVudGYiKSkpIHsKIAkJZWZyZWUobGNuYW1lKTsKIAkJemVuZF9l cnJvcihFX0NPTVBJTEVfRVJST1IsICJDYW5ub3QgdXNlICclcycgYXMgY2xhc3MgbmFtZSBh cyBpdCBpcyByZXNlcnZlZCIsIGNsYXNzX25hbWUtPnUuY29uc3RhbnQudmFsdWUuc3RyLnZh bCk7CiAJfQpAQCAtMzExMyw2ICszMTE0LDkgQEAKIAkJCWNhc2UgWkVORF9GRVRDSF9DTEFT U19TVEFUSUM6CiAJCQkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJST1IsICJDYW5ub3QgdXNl ICdzdGF0aWMnIGFzIGNsYXNzIG5hbWUgYXMgaXQgaXMgcmVzZXJ2ZWQiKTsKIAkJCQlicmVh azsKKwkJCWNhc2UgWkVORF9GRVRDSF9DTEFTU19fX1BBUkVOVEY6CisJCQkJemVuZF9lcnJv cihFX0NPTVBJTEVfRVJST1IsICJDYW5ub3QgdXNlICdfX3BhcmVudGYnIGFzIGNsYXNzIG5h bWUgYXMgaXQgaXMgcmVzZXJ2ZWQiKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJ YnJlYWs7CiAJCX0KQEAgLTMyMjMsNiArMzIyNyw5IEBACiAJCWNhc2UgWkVORF9GRVRDSF9D TEFTU19TVEFUSUM6CiAJCQl6ZW5kX2Vycm9yKEVfQ09NUElMRV9FUlJPUiwgIkNhbm5vdCB1 c2UgJ3N0YXRpYycgYXMgaW50ZXJmYWNlIG5hbWUgYXMgaXQgaXMgcmVzZXJ2ZWQiKTsKIAkJ CWJyZWFrOworCQljYXNlIFpFTkRfRkVUQ0hfQ0xBU1NfX19QQVJFTlRGOgorCQkJemVuZF9l cnJvcihFX0NPTVBJTEVfRVJST1IsICJDYW5ub3QgdXNlICdfX3BhcmVudGYnIGFzIGludGVy ZmFjZSBuYW1lIGFzIGl0IGlzIHJlc2VydmVkIik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoK IAkJCWlmIChDRyhhY3RpdmVfb3BfYXJyYXkpLT5sYXN0ID4gMCkgewogCQkJCW9wbGluZSA9 ICZDRyhhY3RpdmVfb3BfYXJyYXkpLT5vcGNvZGVzW0NHKGFjdGl2ZV9vcF9hcnJheSktPmxh c3QtMV07CkBAIC00NjY4LDYgKzQ2NzUsOSBAQAogCX0gZWxzZSBpZiAoKGNsYXNzX25hbWVf bGVuID09IHNpemVvZigic3RhdGljIiktMSkgJiYKIAkJIW1lbWNtcChjbGFzc19uYW1lLCAi c3RhdGljIiwgc2l6ZW9mKCJzdGF0aWMiKS0xKSkgewogCQlyZXR1cm4gWkVORF9GRVRDSF9D TEFTU19TVEFUSUM7CisJfSBlbHNlIGlmICgoY2xhc3NfbmFtZV9sZW4gPT0gc2l6ZW9mKCJf X3BhcmVudGYiKS0xKSAmJgorCQkhbWVtY21wKGNsYXNzX25hbWUsICJfX3BhcmVudGYiLCBz aXplb2YoIl9fcGFyZW50ZiIpLTEpKSB7CisJCXJldHVybiBaRU5EX0ZFVENIX0NMQVNTX19f UEFSRU5URjsKIAl9IGVsc2UgewogCQlyZXR1cm4gWkVORF9GRVRDSF9DTEFTU19ERUZBVUxU OwogCX0KQEAgLTQ3MjgsNyArNDczOCw5IEBACiAJaWYgKCgoWl9TVFJMRU4obmFtZS0+dS5j b25zdGFudCkgPT0gc2l6ZW9mKCJzZWxmIiktMSkgJiYKIAkgICAgICAhbWVtY21wKGxjbmFt ZSwgInNlbGYiLCBzaXplb2YoInNlbGYiKS0xKSkgfHwKIAkgICAgKChaX1NUUkxFTihuYW1l LT51LmNvbnN0YW50KSA9PSBzaXplb2YoInBhcmVudCIpLTEpICYmCi0gICAgICAgICAgIW1l bWNtcChsY25hbWUsICJwYXJlbnQiLCBzaXplb2YoInBhcmVudCIpLTEpKSkgeworICAgICAg ICAgICFtZW1jbXAobGNuYW1lLCAicGFyZW50Iiwgc2l6ZW9mKCJwYXJlbnQiKS0xKSkgfHwK KyAgCSAgICAoKFpfU1RSTEVOKG5hbWUtPnUuY29uc3RhbnQpID09IHNpemVvZigiX19wYXJl bnRmIiktMSkgJiYKKyAgICAgICAgICAhbWVtY21wKGxjbmFtZSwgIl9fcGFyZW50ZiIsIHNp emVvZigiX19wYXJlbnRmIiktMSkpKSB7CiAJCXplbmRfZXJyb3IoRV9DT01QSUxFX0VSUk9S LCAiQ2Fubm90IHVzZSAnJXMnIGFzIG5hbWVzcGFjZSBuYW1lIiwgWl9TVFJWQUwobmFtZS0+ dS5jb25zdGFudCkpOwogCX0KIAllZnJlZShsY25hbWUpOwpAQCAtNDc3NCw3ICs0Nzg2LDkg QEAKIAlpZiAoKChaX1NUUkxFTl9QKG5hbWUpID09IHNpemVvZigic2VsZiIpLTEpICYmCiAg ICAgICAgICAgIW1lbWNtcChsY25hbWUsICJzZWxmIiwgc2l6ZW9mKCJzZWxmIiktMSkpIHx8 CiAJICAgICgoWl9TVFJMRU5fUChuYW1lKSA9PSBzaXplb2YoInBhcmVudCIpLTEpICYmCi0g ICAgICAgICAgIW1lbWNtcChsY25hbWUsICJwYXJlbnQiLCBzaXplb2YoInBhcmVudCIpLTEp KSkgeworICAgICAgICAgICFtZW1jbXAobGNuYW1lLCAicGFyZW50Iiwgc2l6ZW9mKCJwYXJl bnQiKS0xKSkgfHwKKyAgCSAgICAoKFpfU1RSTEVOX1AobmFtZSkgPT0gc2l6ZW9mKCJfX3Bh cmVudGYiKS0xKSAmJgorICAgICAgICAgICFtZW1jbXAobGNuYW1lLCAiX19wYXJlbnRmIiwg c2l6ZW9mKCJfX3BhcmVudGYiKS0xKSkpIHsKIAkJemVuZF9lcnJvcihFX0NPTVBJTEVfRVJS T1IsICJDYW5ub3QgdXNlICVzIGFzICVzIGJlY2F1c2UgJyVzJyBpcyBhIHNwZWNpYWwgY2xh c3MgbmFtZSIsIFpfU1RSVkFMX1AobnMpLCBaX1NUUlZBTF9QKG5hbWUpLCBaX1NUUlZBTF9Q KG5hbWUpKTsKIAl9CiAKSW5kZXg6IFplbmQvemVuZF9jb21waWxlLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9jb21waWxlLmgsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzE2LjIuOC4yLjEyLjIuMTAKZGlmZiAtdSAtcjEuMzE2 LjIuOC4yLjEyLjIuMTAgemVuZF9jb21waWxlLmgKLS0tIFplbmQvemVuZF9jb21waWxlLmgJ MjIgTm92IDIwMDcgMTM6Mjc6MTEgLTAwMDAJMS4zMTYuMi44LjIuMTIuMi4xMAorKysgWmVu ZC96ZW5kX2NvbXBpbGUuaAkyNiBOb3YgMjAwNyAwMDowNDoyNiAtMDAwMApAQCAtNjAxLDYg KzYwMSw3IEBACiAjZGVmaW5lIFpFTkRfRkVUQ0hfQ0xBU1NfQVVUTwkJNQogI2RlZmluZSBa RU5EX0ZFVENIX0NMQVNTX0lOVEVSRkFDRQk2CiAjZGVmaW5lIFpFTkRfRkVUQ0hfQ0xBU1Nf U1RBVElDCQk3CisjZGVmaW5lIFpFTkRfRkVUQ0hfQ0xBU1NfX19QQVJFTlRGCQk4CiAjZGVm aW5lIFpFTkRfRkVUQ0hfQ0xBU1NfTUFTSyAgICAgICAgMHgwZgogI2RlZmluZSBaRU5EX0ZF VENIX0NMQVNTX1JUX05TX0NIRUNLIDB4MjAKICNkZWZpbmUgWkVORF9GRVRDSF9DTEFTU19S VF9OU19OQU1FICAweDQwCkluZGV4OiBaZW5kL3plbmRfY29uc3RhbnRzLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9jb25zdGFudHMu Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MS4yLjUuMi43LjIuNgpkaWZmIC11IC1yMS43 MS4yLjUuMi43LjIuNiB6ZW5kX2NvbnN0YW50cy5jCi0tLSBaZW5kL3plbmRfY29uc3RhbnRz LmMJMjAgTm92IDIwMDcgMTY6MzQ6MjUgLTAwMDAJMS43MS4yLjUuMi43LjIuNgorKysgWmVu ZC96ZW5kX2NvbnN0YW50cy5jCTI2IE5vdiAyMDA3IDAwOjA0OjI2IC0wMDAwCkBAIC0zMzEs NiArMzMxLDE2IEBACiAJCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2Fubm90IGFjY2VzcyBz dGF0aWM6OiB3aGVuIG5vIGNsYXNzIHNjb3BlIGlzIGFjdGl2ZSIpOwogCQkJfQogCQkJZWZy ZWUobGNuYW1lKTsKKwkJfSBlbHNlIGlmIChjbGFzc19uYW1lX2xlbiA9PSBzaXplb2YoIl9f cGFyZW50ZiIpLTEgJiYKKwkJICAgICAgICAgICAhbWVtY21wKGxjbmFtZSwgIl9fcGFyZW50 ZiIsIHNpemVvZigiX19wYXJlbnRmIiktMSkpIHsKKwkJCWlmICghc2NvcGUpIHsKKwkJCQl6 ZW5kX2Vycm9yKEVfRVJST1IsICJDYW5ub3QgYWNjZXNzIF9fcGFyZW50Zjo6IHdoZW4gbm8g Y2xhc3Mgc2NvcGUgaXMgYWN0aXZlIik7CisJCQl9IGVsc2UgaWYgKCFzY29wZS0+cGFyZW50 KSB7CisJCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2Fubm90IGFjY2VzcyBfX3BhcmVudGY6 OiB3aGVuIGN1cnJlbnQgY2xhc3Mgc2NvcGUgaGFzIG5vIHBhcmVudCIpOworCQkJfSBlbHNl IHsKKwkJCQljZSA9IHNjb3BlLT5wYXJlbnQ7CisJCQl9CisJCQllZnJlZShsY25hbWUpOwog CQl9IGVsc2UgewogCQkJLyogQ2hlY2sgZm9yIG5hbWVzcGFjZSBjb25zdGFudCAqLwogCQkJ Y2hhciAqbnNuYW1lOwpJbmRleDogWmVuZC96ZW5kX2V4ZWN1dGVfQVBJLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9leGVjdXRlX0FQ SS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzMS4yLjIwLjIuMjQuMi4xMwpkaWZmIC11 IC1yMS4zMzEuMi4yMC4yLjI0LjIuMTMgemVuZF9leGVjdXRlX0FQSS5jCi0tLSBaZW5kL3pl bmRfZXhlY3V0ZV9BUEkuYwkyMiBOb3YgMjAwNyAxMzoyNzoxMSAtMDAwMAkxLjMzMS4yLjIw LjIuMjQuMi4xMworKysgWmVuZC96ZW5kX2V4ZWN1dGVfQVBJLmMJMjYgTm92IDIwMDcgMDA6 MDQ6MjcgLTAwMDAKQEAgLTcxOSw2ICs3MTksNyBAQAogCQkJCQlmb3VuZCA9ICgqY2UgIT0g TlVMTD9TVUNDRVNTOkZBSUxVUkUpOwogCQkJCQlmY2ktPm9iamVjdF9wcCA9IEVHKFRoaXMp PyZFRyhUaGlzKTpOVUxMOwogCQkJCQlFWChvYmplY3QpID0gRUcoVGhpcyk7CisJCQkJCWNh bGxpbmdfc2NvcGUgPSAqY2U7CiAJCQkJfSBlbHNlIGlmIChzdHJjbXAoWl9TVFJWQUxfUFAo ZmNpLT5vYmplY3RfcHApLCAicGFyZW50IikgPT0gMCAmJiBFRyhhY3RpdmVfb3BfYXJyYXkp KSB7CiAKIAkJCQkJaWYgKCFFRyhhY3RpdmVfb3BfYXJyYXkpLT5zY29wZSkgewpAQCAtNzMx LDYgKzczMiw3IEBACiAJCQkJCWZvdW5kID0gKCpjZSAhPSBOVUxMP1NVQ0NFU1M6RkFJTFVS RSk7CiAJCQkJCWZjaS0+b2JqZWN0X3BwID0gRUcoVGhpcyk/JkVHKFRoaXMpOk5VTEw7CiAJ CQkJCUVYKG9iamVjdCkgPSBFRyhUaGlzKTsKKwkJCQkJY2FsbGluZ19zY29wZSA9ICpjZTsK IAkJCQl9IGVsc2UgaWYgKFpfU1RSTEVOX1BQKGZjaS0+b2JqZWN0X3BwKSA9PSBzaXplb2Yo InN0YXRpYyIpIC0gMSAmJgogCQkJCQkhbWVtY21wKFpfU1RSVkFMX1BQKGZjaS0+b2JqZWN0 X3BwKSwgInN0YXRpYyIsIHNpemVvZigic3RhdGljIikgLSAxKQogCQkJCSkgewpAQCAtNzQx LDYgKzc0MywyNiBAQAogCQkJCQlmb3VuZCA9ICgqY2UgIT0gTlVMTD9TVUNDRVNTOkZBSUxV UkUpOwogCQkJCQlmY2ktPm9iamVjdF9wcCA9IEVHKFRoaXMpPyZFRyhUaGlzKTpOVUxMOwog CQkJCQlFWChvYmplY3QpID0gRUcoVGhpcyk7CisJCQkJCWNhbGxpbmdfc2NvcGUgPSAqY2U7 CisJCQkJfSBlbHNlIGlmIChaX1NUUkxFTl9QUChmY2ktPm9iamVjdF9wcCkgPT0gc2l6ZW9m KCJfX3BhcmVudGYiKSAtIDEgJiYKKwkJCQkJIW1lbWNtcChaX1NUUlZBTF9QUChmY2ktPm9i amVjdF9wcCksICJfX3BhcmVudGYiLCBzaXplb2YoIl9fcGFyZW50ZiIpIC0gMSkKKwkJCQkp IHsKKworCQkJCQlpZiAoIUVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlKSB7CisJCQkJCQl6 ZW5kX2Vycm9yKEVfRVJST1IsICJDYW5ub3QgYWNjZXNzIF9fcGFyZW50Zjo6IHdoZW4gbm8g Y2xhc3Mgc2NvcGUgaXMgYWN0aXZlIik7CisJCQkJCX0KKwkJCQkJaWYgKCFFRyhhY3RpdmVf b3BfYXJyYXkpLT5zY29wZS0+cGFyZW50KSB7CisJCQkJCQl6ZW5kX2Vycm9yKEVfRVJST1Is ICJDYW5ub3QgYWNjZXNzIF9fcGFyZW50Zjo6IHdoZW4gY3VycmVudCBjbGFzcyBzY29wZSBo YXMgbm8gcGFyZW50Iik7CisJCQkJCX0KKwkJCQkJY2UgPSBFRyhhY3RpdmVfb3BfYXJyYXkp LT5zY29wZS0+cGFyZW50OworCQkJCQlmb3VuZCA9ICgqY2UgIT0gTlVMTD9TVUNDRVNTOkZB SUxVUkUpOworCQkJCQlmY2ktPm9iamVjdF9wcCA9IEVHKFRoaXMpPyZFRyhUaGlzKTpOVUxM OworCQkJCQlFWChvYmplY3QpID0gRUcoVGhpcyk7CisJCQkJCWlmIChFRyhjYWxsZWRfc2Nv cGUpKSB7CisJCQkJCQljYWxsaW5nX3Njb3BlID0gRUcoY2FsbGVkX3Njb3BlKTsKKwkJCQkJ fSBlbHNlIHsKKwkJCQkJCWNhbGxpbmdfc2NvcGUgPSAqY2U7CisJCQkJCX0KIAkJCQl9IGVs c2UgewogCQkJCQl6ZW5kX2NsYXNzX2VudHJ5ICpzY29wZTsKIAkJCQkJc2NvcGUgPSBFRyhh Y3RpdmVfb3BfYXJyYXkpID8gRUcoYWN0aXZlX29wX2FycmF5KS0+c2NvcGUgOiBOVUxMOwpA QCAtNzU3LDEyICs3NzksMTIgQEAKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWZjaS0+b2JqZWN0 X3BwID0gTlVMTDsKIAkJCQkJfQorCQkJCQljYWxsaW5nX3Njb3BlID0gKmNlOwogCQkJCX0K IAkJCQlpZiAoZm91bmQgPT0gRkFJTFVSRSkKIAkJCQkJcmV0dXJuIEZBSUxVUkU7CiAKIAkJ CQlmY2ktPmZ1bmN0aW9uX3RhYmxlID0gJigqY2UpLT5mdW5jdGlvbl90YWJsZTsKLQkJCQlj YWxsaW5nX3Njb3BlID0gKmNlOwogCQkJfSBlbHNlIHsKIAkJCQl6ZW5kX2Vycm9yKEVfTk9U SUNFLCAiTm9uLWNhbGxhYmxlIGFycmF5IHBhc3NlZCB0byB6ZW5kX2NhbGxfZnVuY3Rpb24o KSIpOwogCQkJCXJldHVybiBGQUlMVVJFOwpAQCAtODIwLDYgKzg0MiwxMCBAQAogCQkJCQlt ZW1jbXAobGNuYW1lLCAic3RhdGljIiwgc2l6ZW9mKCJzdGF0aWMiKSAtIDEpCiAJCQkJKSB7 CiAJCQkJCWNlX2NoaWxkID0gRUcoY2FsbGVkX3Njb3BlKTsKKwkJCQl9IGVsc2UgaWYgKGNs ZW4gPT0gc2l6ZW9mKCJfX3BhcmVudGYiKSAtIDEgJiYKKwkJCQkJbWVtY21wKGxjbmFtZSwg Il9fcGFyZW50ZiIsIHNpemVvZigiX19wYXJlbnRmIikgLSAxKQorCQkJCSkgeworCQkJCQlj ZV9jaGlsZCA9IEVHKGFjdGl2ZV9vcF9hcnJheSkgJiYgRUcoYWN0aXZlX29wX2FycmF5KS0+ c2NvcGUgPyBFRyhzY29wZSktPnBhcmVudCA6IE5VTEw7CiAJCQkJfSBlbHNlIGlmICh6ZW5k X2xvb2t1cF9jbGFzcyhsY25hbWUsIGNsZW4sICZwY2UgVFNSTUxTX0NDKSA9PSBTVUNDRVNT KSB7CiAJCQkJCWNlX2NoaWxkID0gKnBjZTsKIAkJCQl9CkBAIC0xNTU1LDYgKzE1ODEsMTUg QEAKIAkJCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDYW5ub3QgYWNjZXNzIHN0YXRpYzo6IHdo ZW4gbm8gY2xhc3Mgc2NvcGUgaXMgYWN0aXZlIik7CiAJCQl9CiAJCQlyZXR1cm4gRUcoY2Fs bGVkX3Njb3BlKTsKKwkJY2FzZSBaRU5EX0ZFVENIX0NMQVNTX19fUEFSRU5URjoKKwkJCWlm ICghRUcoc2NvcGUpKSB7CisJCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2Fubm90IGFjY2Vz cyBfX3BhcmVudGY6OiB3aGVuIG5vIGNsYXNzIHNjb3BlIGlzIGFjdGl2ZSIpOworCQkJfQor CQkJaWYgKCFFRyhzY29wZSktPnBhcmVudCkgeworCQkJCXplbmRfZXJyb3IoRV9FUlJPUiwg IkNhbm5vdCBhY2Nlc3MgX19wYXJlbnRmOjogd2hlbiBjdXJyZW50IGNsYXNzIHNjb3BlIGhh cyBubyBwYXJlbnQiKTsKKwkJCX0KKwkJCXJldHVybiBFRyhzY29wZSktPnBhcmVudDsKKwkJ CXJldHVybiBFRyhjYWxsZWRfc2NvcGUpOwogCQljYXNlIFpFTkRfRkVUQ0hfQ0xBU1NfQVVU TzogewogCQkJCWZldGNoX3R5cGUgPSB6ZW5kX2dldF9jbGFzc19mZXRjaF90eXBlKGNsYXNz X25hbWUsIGNsYXNzX25hbWVfbGVuKTsKIAkJCQlpZiAoZmV0Y2hfdHlwZSE9WkVORF9GRVRD SF9DTEFTU19ERUZBVUxUKSB7CkluZGV4OiBaZW5kL3plbmRfdm1fZGVmLmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF92bV9kZWYuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OS4yLjI5LjIuNDguMi4yMwpkaWZmIC11IC1yMS41 OS4yLjI5LjIuNDguMi4yMyB6ZW5kX3ZtX2RlZi5oCi0tLSBaZW5kL3plbmRfdm1fZGVmLmgJ MjIgTm92IDIwMDcgMDk6MDI6NTQgLTAwMDAJMS41OS4yLjI5LjIuNDguMi4yMworKysgWmVu ZC96ZW5kX3ZtX2RlZi5oCTI2IE5vdiAyMDA3IDAwOjA0OjI4IC0wMDAwCkBAIC0xODA3LDgg KzE4MDcsMTUgQEAKIAkJaWYgKCFjZSkgewogCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2xh c3MgJyVzJyBub3QgZm91bmQiLCBaX1NUUlZBTChvcGxpbmUtPm9wMS51LmNvbnN0YW50KSk7 CiAJCX0KKwkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwogCX0gZWxzZSB7CiAJCWNlID0gRVhf VChvcGxpbmUtPm9wMS51LnZhcikuY2xhc3NfZW50cnk7CisJCQorCQlpZiAob3BsaW5lLT5v cDEudS5FQS50eXBlID09IFpFTkRfRkVUQ0hfQ0xBU1NfX19QQVJFTlRGKSB7CisJCQlFWChj YWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Njb3BlKTsKKwkJfSBlbHNlIHsKKwkJCUVYKGNh bGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0KIAlpZihPUDJfVFlQRSAhPSBJU19VTlVTRUQp IHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2YWw7CkBAIC0xODQ5LDggKzE4NTYsNiBA QAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVjdG9yOwogCX0KIAotCUVYKGNhbGxlZF9zY29w ZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19T VEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5VTEw7CiAJfSBlbHNlIHsKSW5kZXg6IFplbmQv emVuZF92bV9leGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkv WmVuZEVuZ2luZTIvemVuZF92bV9leGVjdXRlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NjIuMi4zMC4yLjQ5LjIuMjQKZGlmZiAtdSAtcjEuNjIuMi4zMC4yLjQ5LjIuMjQgemVuZF92 bV9leGVjdXRlLmgKLS0tIFplbmQvemVuZF92bV9leGVjdXRlLmgJMjMgTm92IDIwMDcgMTU6 MDM6MDIgLTAwMDAJMS42Mi4yLjMwLjIuNDkuMi4yNAorKysgWmVuZC96ZW5kX3ZtX2V4ZWN1 dGUuaAkyNiBOb3YgMjAwNyAwMDowNDozNSAtMDAwMApAQCAtMjM5MCw4ICsyMzkwLDE1IEBA CiAJCWlmICghY2UpIHsKIAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90 IGZvdW5kIiwgWl9TVFJWQUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVY KGNhbGxlZF9zY29wZSkgPSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5v cDEudS52YXIpLmNsYXNzX2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUg PT0gWkVORF9GRVRDSF9DTEFTU19fX1BBUkVOVEYpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkg PSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9 IGNlOworCQl9CiAJfQogCWlmKElTX0NPTlNUICE9IElTX1VOVVNFRCkgewogCQljaGFyICpm dW5jdGlvbl9uYW1lX3N0cnZhbDsKQEAgLTI0MzIsOCArMjQzOSw2IEBACiAJCUVYKGZiYykg PSBjZS0+Y29uc3RydWN0b3I7CiAJfQogCi0JRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwotCiAJ aWYgKEVYKGZiYyktPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJQykgewogCQlF WChvYmplY3QpID0gTlVMTDsKIAl9IGVsc2UgewpAQCAtMjkzOCw4ICsyOTQzLDE1IEBACiAJ CWlmICghY2UpIHsKIAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZv dW5kIiwgWl9TVFJWQUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNh bGxlZF9zY29wZSkgPSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEu dS52YXIpLmNsYXNzX2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0g WkVORF9GRVRDSF9DTEFTU19fX1BBUkVOVEYpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBF RyhjYWxsZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNl OworCQl9CiAJfQogCWlmKElTX1RNUF9WQVIgIT0gSVNfVU5VU0VEKSB7CiAJCWNoYXIgKmZ1 bmN0aW9uX25hbWVfc3RydmFsOwpAQCAtMjk4MCw4ICsyOTkyLDYgQEAKIAkJRVgoZmJjKSA9 IGNlLT5jb25zdHJ1Y3RvcjsKIAl9CiAKLQlFWChjYWxsZWRfc2NvcGUpID0gY2U7Ci0KIAlp ZiAoRVgoZmJjKS0+Y29tbW9uLmZuX2ZsYWdzICYgWkVORF9BQ0NfU1RBVElDKSB7CiAJCUVY KG9iamVjdCkgPSBOVUxMOwogCX0gZWxzZSB7CkBAIC0zMzg2LDggKzMzOTYsMTUgQEAKIAkJ aWYgKCFjZSkgewogCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2xhc3MgJyVzJyBub3QgZm91 bmQiLCBaX1NUUlZBTChvcGxpbmUtPm9wMS51LmNvbnN0YW50KSk7CiAJCX0KKwkJRVgoY2Fs bGVkX3Njb3BlKSA9IGNlOwogCX0gZWxzZSB7CiAJCWNlID0gRVhfVChvcGxpbmUtPm9wMS51 LnZhcikuY2xhc3NfZW50cnk7CisKKwkJaWYgKG9wbGluZS0+b3AxLnUuRUEudHlwZSA9PSBa RU5EX0ZFVENIX0NMQVNTX19fUEFSRU5URikgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IEVH KGNhbGxlZF9zY29wZSk7CisJCX0gZWxzZSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gY2U7 CisJCX0KIAl9CiAJaWYoSVNfVkFSICE9IElTX1VOVVNFRCkgewogCQljaGFyICpmdW5jdGlv bl9uYW1lX3N0cnZhbDsKQEAgLTM0MjgsOCArMzQ0NSw2IEBACiAJCUVYKGZiYykgPSBjZS0+ Y29uc3RydWN0b3I7CiAJfQogCi0JRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwotCiAJaWYgKEVY KGZiYyktPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJQykgewogCQlFWChvYmpl Y3QpID0gTlVMTDsKIAl9IGVsc2UgewpAQCAtMzYwMCw4ICszNjE1LDE1IEBACiAJCWlmICgh Y2UpIHsKIAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZvdW5kIiwg Wl9TVFJWQUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNhbGxlZF9z Y29wZSkgPSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEudS52YXIp LmNsYXNzX2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0gWkVORF9G RVRDSF9DTEFTU19fX1BBUkVOVEYpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBFRyhjYWxs ZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOworCQl9 CiAJfQogCWlmKElTX1VOVVNFRCAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25f bmFtZV9zdHJ2YWw7CkBAIC0zNjQyLDggKzM2NjQsNiBAQAogCQlFWChmYmMpID0gY2UtPmNv bnN0cnVjdG9yOwogCX0KIAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChm YmMpLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0 KSA9IE5VTEw7CiAJfSBlbHNlIHsKQEAgLTQwMTYsOCArNDAzNiwxNSBAQAogCQlpZiAoIWNl KSB7CiAJCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDbGFzcyAnJXMnIG5vdCBmb3VuZCIsIFpf U1RSVkFMKG9wbGluZS0+b3AxLnUuY29uc3RhbnQpKTsKIAkJfQorCQlFWChjYWxsZWRfc2Nv cGUpID0gY2U7CiAJfSBlbHNlIHsKIAkJY2UgPSBFWF9UKG9wbGluZS0+b3AxLnUudmFyKS5j bGFzc19lbnRyeTsKKworCQlpZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVU Q0hfQ0xBU1NfX19QQVJFTlRGKSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVk X3Njb3BlKTsKKwkJfSBlbHNlIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQog CX0KIAlpZihJU19DViAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9z dHJ2YWw7CkBAIC00MDU4LDggKzQwODUsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVj dG9yOwogCX0KIAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5j b21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5V TEw7CiAJfSBlbHNlIHsKQEAgLTk3MTAsOCArOTczNSwxNSBAQAogCQlpZiAoIWNlKSB7CiAJ CQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDbGFzcyAnJXMnIG5vdCBmb3VuZCIsIFpfU1RSVkFM KG9wbGluZS0+b3AxLnUuY29uc3RhbnQpKTsKIAkJfQorCQlFWChjYWxsZWRfc2NvcGUpID0g Y2U7CiAJfSBlbHNlIHsKIAkJY2UgPSBFWF9UKG9wbGluZS0+b3AxLnUudmFyKS5jbGFzc19l bnRyeTsKKworCQlpZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVUQ0hfQ0xB U1NfX19QQVJFTlRGKSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Njb3Bl KTsKKwkJfSBlbHNlIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0KIAlp ZihJU19DT05TVCAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2 YWw7CkBAIC05NzUyLDggKzk3ODQsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVjdG9y OwogCX0KIAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5jb21t b24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5VTEw7 CiAJfSBlbHNlIHsKQEAgLTExNDAzLDggKzExNDMzLDE1IEBACiAJCWlmICghY2UpIHsKIAkJ CXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZvdW5kIiwgWl9TVFJWQUwo b3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNhbGxlZF9zY29wZSkgPSBj ZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEudS52YXIpLmNsYXNzX2Vu dHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0gWkVORF9GRVRDSF9DTEFT U19fX1BBUkVOVEYpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBFRyhjYWxsZWRfc2NvcGUp OworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOworCQl9CiAJfQogCWlm KElTX1RNUF9WQVIgIT0gSVNfVU5VU0VEKSB7CiAJCWNoYXIgKmZ1bmN0aW9uX25hbWVfc3Ry dmFsOwpAQCAtMTE0NDUsOCArMTE0ODIsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVj dG9yOwogCX0KIAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5j b21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5V TEw7CiAJfSBlbHNlIHsKQEAgLTEzMDY4LDggKzEzMTAzLDE1IEBACiAJCWlmICghY2UpIHsK IAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZvdW5kIiwgWl9TVFJW QUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNhbGxlZF9zY29wZSkg PSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEudS52YXIpLmNsYXNz X2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0gWkVORF9GRVRDSF9D TEFTU19fX1BBUkVOVEYpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBFRyhjYWxsZWRfc2Nv cGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOworCQl9CiAJfQog CWlmKElTX1ZBUiAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2 YWw7CkBAIC0xMzExMCw4ICsxMzE1Miw2IEBACiAJCUVYKGZiYykgPSBjZS0+Y29uc3RydWN0 b3I7CiAJfQogCi0JRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwotCiAJaWYgKEVYKGZiYyktPmNv bW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJQykgewogCQlFWChvYmplY3QpID0gTlVM TDsKIAl9IGVsc2UgewpAQCAtMTM5MDYsOCArMTM5NDYsMTUgQEAKIAkJaWYgKCFjZSkgewog CQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2xhc3MgJyVzJyBub3QgZm91bmQiLCBaX1NUUlZB TChvcGxpbmUtPm9wMS51LmNvbnN0YW50KSk7CiAJCX0KKwkJRVgoY2FsbGVkX3Njb3BlKSA9 IGNlOwogCX0gZWxzZSB7CiAJCWNlID0gRVhfVChvcGxpbmUtPm9wMS51LnZhcikuY2xhc3Nf ZW50cnk7CisKKwkJaWYgKG9wbGluZS0+b3AxLnUuRUEudHlwZSA9PSBaRU5EX0ZFVENIX0NM QVNTX19fUEFSRU5URikgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IEVHKGNhbGxlZF9zY29w ZSk7CisJCX0gZWxzZSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gY2U7CisJCX0KIAl9CiAJ aWYoSVNfVU5VU0VEICE9IElTX1VOVVNFRCkgewogCQljaGFyICpmdW5jdGlvbl9uYW1lX3N0 cnZhbDsKQEAgLTEzOTQ4LDggKzEzOTk1LDYgQEAKIAkJRVgoZmJjKSA9IGNlLT5jb25zdHJ1 Y3RvcjsKIAl9CiAKLQlFWChjYWxsZWRfc2NvcGUpID0gY2U7Ci0KIAlpZiAoRVgoZmJjKS0+ Y29tbW9uLmZuX2ZsYWdzICYgWkVORF9BQ0NfU1RBVElDKSB7CiAJCUVYKG9iamVjdCkgPSBO VUxMOwogCX0gZWxzZSB7CkBAIC0xNTI3Miw4ICsxNTMxNywxNSBAQAogCQlpZiAoIWNlKSB7 CiAJCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDbGFzcyAnJXMnIG5vdCBmb3VuZCIsIFpfU1RS VkFMKG9wbGluZS0+b3AxLnUuY29uc3RhbnQpKTsKIAkJfQorCQlFWChjYWxsZWRfc2NvcGUp ID0gY2U7CiAJfSBlbHNlIHsKIAkJY2UgPSBFWF9UKG9wbGluZS0+b3AxLnUudmFyKS5jbGFz c19lbnRyeTsKKworCQlpZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVUQ0hf Q0xBU1NfX19QQVJFTlRGKSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Nj b3BlKTsKKwkJfSBlbHNlIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0K IAlpZihJU19DViAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2 YWw7CkBAIC0xNTMxNCw4ICsxNTM2Niw2IEBACiAJCUVYKGZiYykgPSBjZS0+Y29uc3RydWN0 b3I7CiAJfQogCi0JRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwotCiAJaWYgKEVYKGZiYyktPmNv bW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJQykgewogCQlFWChvYmplY3QpID0gTlVM TDsKIAl9IGVsc2UgewpJbmRleDogZXh0L3NwbC9waHBfc3BsLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL3JlcG9zaXRvcnkvcGhwLXNyYy9leHQvc3BsL3BocF9zcGwuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS41Mi4yLjI4LjIuMTcuMi41CmRpZmYgLXUgLXIxLjUyLjIuMjgu Mi4xNy4yLjUgcGhwX3NwbC5jCi0tLSBleHQvc3BsL3BocF9zcGwuYwkyMiBOb3YgMjAwNyAx MzoyNzoxMyAtMDAwMAkxLjUyLjIuMjguMi4xNy4yLjUKKysrIGV4dC9zcGwvcGhwX3NwbC5j CTI2IE5vdiAyMDA3IDAwOjA0OjQ3IC0wMDAwCkBAIC00MjMsNyArNDIzLDcgQEAKIAkJCX0K IAkJfQogCQotCQlpZiAoIXplbmRfaXNfY2FsbGFibGVfZXgoemNhbGxhYmxlLCBJU19DQUxM QUJMRV9TVFJJQ1QsICZmdW5jX25hbWUsICZmdW5jX25hbWVfbGVuLCAmYWxmaS5jZSwgJmFs ZmkuZnVuY19wdHIsICZvYmpfcHRyIFRTUk1MU19DQykpIHsKKwkJaWYgKCF6ZW5kX2lzX2Nh bGxhYmxlX2V4KHpjYWxsYWJsZSwgSVNfQ0FMTEFCTEVfU1RSSUNULCAmZnVuY19uYW1lLCAm ZnVuY19uYW1lX2xlbiwgJmFsZmkuY2UsIE5VTEwsICZhbGZpLmZ1bmNfcHRyLCAmb2JqX3B0 ciBUU1JNTFNfQ0MpKSB7CiAJCQlpZiAoWl9UWVBFX1AoemNhbGxhYmxlKSA9PSBJU19BUlJB WSkgewogCQkJCWlmICghb2JqX3B0ciAmJiBhbGZpLmZ1bmNfcHRyICYmICEoYWxmaS5mdW5j X3B0ci0+Y29tbW9uLmZuX2ZsYWdzICYgWkVORF9BQ0NfU1RBVElDKSkgewogCQkJCQlpZiAo ZG9fdGhyb3cpIHsKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYg KCF6ZW5kX2lzX2NhbGxhYmxlX2V4KHpjYWxsYWJsZSwgSVNfQ0FMTEFCTEVfQ0hFQ0tfU1lO VEFYX09OTFksICZmdW5jX25hbWUsICZmdW5jX25hbWVfbGVuLCBOVUxMLCBOVUxMLCAmb2Jq X3B0ciBUU1JNTFNfQ0MpKSB7CisJaWYgKCF6ZW5kX2lzX2NhbGxhYmxlX2V4KHpjYWxsYWJs ZSwgSVNfQ0FMTEFCTEVfQ0hFQ0tfU1lOVEFYX09OTFksICZmdW5jX25hbWUsICZmdW5jX25h bWVfbGVuLCBOVUxMLCBOVUxMLCBOVUxMLCAmb2JqX3B0ciBUU1JNTFNfQ0MpKSB7CiAJCWlm IChmdW5jX25hbWUpIHsKIAkJCWVmcmVlKGZ1bmNfbmFtZSk7CiAJCX0K --------------080502010504020903010607 Content-Type: text/plain; name="lsb.parent-forwarding.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="lsb.parent-forwarding.patch" SW5kZXg6IFplbmQvemVuZF9BUEkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3Np dG9yeS9aZW5kRW5naW5lMi96ZW5kX0FQSS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI5 Ni4yLjI3LjIuMzQuMi4xMgpkaWZmIC11IC1yMS4yOTYuMi4yNy4yLjM0LjIuMTIgemVuZF9B UEkuYwotLS0gWmVuZC96ZW5kX0FQSS5jCTIyIE5vdiAyMDA3IDEzOjI3OjExIC0wMDAwCTEu Mjk2LjIuMjcuMi4zNC4yLjEyCisrKyBaZW5kL3plbmRfQVBJLmMJMjUgTm92IDIwMDcgMjM6 MDc6NTIgLTAwMDAKQEAgLTIyODcsNyArMjI4Nyw3IEBACiB9CiAvKiB9fX0gKi8KIAotc3Rh dGljIGludCB6ZW5kX2lzX2NhbGxhYmxlX2NoZWNrX2Z1bmMoaW50IGNoZWNrX2ZsYWdzLCB6 dmFsICoqKnpvYmpfcHRyX3B0ciwgemVuZF9jbGFzc19lbnRyeSAqY2Vfb3JnLCB6dmFsICpj YWxsYWJsZSwgemVuZF9jbGFzc19lbnRyeSAqKmNlX3B0ciwgemVuZF9mdW5jdGlvbiAqKmZw dHJfcHRyIFRTUk1MU19EQykgLyoge3t7ICovCitzdGF0aWMgaW50IHplbmRfaXNfY2FsbGFi bGVfY2hlY2tfZnVuYyhpbnQgY2hlY2tfZmxhZ3MsIHp2YWwgKioqem9ial9wdHJfcHRyLCB6 ZW5kX2NsYXNzX2VudHJ5ICpjZV9vcmcsIHp2YWwgKmNhbGxhYmxlLCB6ZW5kX2NsYXNzX2Vu dHJ5ICoqY2VfcHRyLCB6ZW5kX3VpbnQgKmZldGNoX3R5cGUsIHplbmRfZnVuY3Rpb24gKipm cHRyX3B0ciBUU1JNTFNfREMpIC8qIHt7eyAqLwogewogCWludCByZXR2YWw7CiAJY2hhciAq bG1uYW1lLCAqY29sb247CkBAIC0yMzMzLDYgKzIzMzMsNyBAQAogCQkvKiBUaGlzIGlzIGEg Y29tcG91bmQgbmFtZS4KIAkJICogVHJ5IHRvIGZldGNoIGNsYXNzIGFuZCB0aGVuIGZpbmQg c3RhdGljIG1ldGhvZC4gKi8KICAJCSpjZV9wdHIgPSB6ZW5kX2ZldGNoX2NsYXNzKFpfU1RS VkFMX1AoY2FsbGFibGUpLCBjbGVuLCBaRU5EX0ZFVENIX0NMQVNTX0FVVE8gVFNSTUxTX0ND KTsKKyAJCSpmZXRjaF90eXBlID0gemVuZF9nZXRfY2xhc3NfZmV0Y2hfdHlwZShaX1NUUlZB TF9QKGNhbGxhYmxlKSwgY2xlbik7CiAJCWlmICghKmNlX3B0cikgewogCQkJcmV0dXJuIDA7 CiAJCX0KQEAgLTIzOTUsMTEgKzIzOTYsMTIgQEAKIH0KIC8qIH19fSAqLwogCi1aRU5EX0FQ SSB6ZW5kX2Jvb2wgemVuZF9pc19jYWxsYWJsZV9leCh6dmFsICpjYWxsYWJsZSwgdWludCBj aGVja19mbGFncywgY2hhciAqKmNhbGxhYmxlX25hbWUsIGludCAqY2FsbGFibGVfbmFtZV9s ZW4sIHplbmRfY2xhc3NfZW50cnkgKipjZV9wdHIsIHplbmRfZnVuY3Rpb24gKipmcHRyX3B0 ciwgenZhbCAqKip6b2JqX3B0cl9wdHIgVFNSTUxTX0RDKSAvKiB7e3sgKi8KK1pFTkRfQVBJ IHplbmRfYm9vbCB6ZW5kX2lzX2NhbGxhYmxlX2V4KHp2YWwgKmNhbGxhYmxlLCB1aW50IGNo ZWNrX2ZsYWdzLCBjaGFyICoqY2FsbGFibGVfbmFtZSwgaW50ICpjYWxsYWJsZV9uYW1lX2xl biwgemVuZF9jbGFzc19lbnRyeSAqKmNlX3B0ciwgemVuZF91aW50ICpmZXRjaF90eXBlLCB6 ZW5kX2Z1bmN0aW9uICoqZnB0cl9wdHIsIHp2YWwgKioqem9ial9wdHJfcHRyIFRTUk1MU19E QykgLyoge3t7ICovCiB7CiAJY2hhciAqbGNuYW1lOwogCWludCBjYWxsYWJsZV9uYW1lX2xl bl9sb2NhbDsKIAl6ZW5kX2NsYXNzX2VudHJ5ICpjZV9sb2NhbCwgKipwY2U7CisJemVuZF91 aW50IGZldGNoX3R5cGVfbG9jYWw7CiAJemVuZF9mdW5jdGlvbiAqZnB0cl9sb2NhbDsKIAl6 dmFsICoqem9ial9wdHJfbG9jYWw7CiAKQEAgLTI0MTgsNyArMjQyMCwxMiBAQAogCWlmICh6 b2JqX3B0cl9wdHIgPT0gTlVMTCkgewogCQl6b2JqX3B0cl9wdHIgPSAmem9ial9wdHJfbG9j YWw7CiAJfQorCWlmIChmZXRjaF90eXBlID09IE5VTEwpIHsKKwkJZmV0Y2hfdHlwZSA9ICZm ZXRjaF90eXBlX2xvY2FsOworCX0KKwkKIAkqY2VfcHRyID0gTlVMTDsKKwkqZmV0Y2hfdHlw ZSA9IDA7CiAJKmZwdHJfcHRyID0gTlVMTDsKIAkqem9ial9wdHJfcHRyID0gTlVMTDsKIApA QCAtMjQzMiw3ICsyNDM5LDcgQEAKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAotCQkJcmV0dXJu IHplbmRfaXNfY2FsbGFibGVfY2hlY2tfZnVuYyhjaGVja19mbGFnc3xJU19DQUxMQUJMRV9D SEVDS19JU19TVEFUSUMsIHpvYmpfcHRyX3B0ciwgTlVMTCwgY2FsbGFibGUsIGNlX3B0ciwg ZnB0cl9wdHIgVFNSTUxTX0NDKTsKKwkJCXJldHVybiB6ZW5kX2lzX2NhbGxhYmxlX2NoZWNr X2Z1bmMoY2hlY2tfZmxhZ3N8SVNfQ0FMTEFCTEVfQ0hFQ0tfSVNfU1RBVElDLCB6b2JqX3B0 cl9wdHIsIE5VTEwsIGNhbGxhYmxlLCBjZV9wdHIsIGZldGNoX3R5cGUsIGZwdHJfcHRyIFRT Uk1MU19DQyk7CiAKIAkJY2FzZSBJU19BUlJBWToKIAkJCXsKQEAgLTI0NzAsMTMgKzI0Nzcs MTYgQEAKIAkJCQkJCQlaX1NUUkxFTl9QUChvYmopID09IHNpemVvZigic2VsZiIpIC0gMSAm JgogCQkJCQkJCSFtZW1jbXAobGNuYW1lLCAic2VsZiIsIHNpemVvZigic2VsZiIpIC0gMSkp IHsKIAkJCQkJCQljZSA9IEVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlOworCQkJCQkJCSpm ZXRjaF90eXBlID0gWkVORF9GRVRDSF9DTEFTU19TRUxGOwogCQkJCQkJfSBlbHNlIGlmIChF RyhhY3RpdmVfb3BfYXJyYXkpICYmIEVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3BlICYmCiAJ CQkJCQkJWl9TVFJMRU5fUFAob2JqKSA9PSBzaXplb2YoInBhcmVudCIpIC0gMSAmJiAKIAkJ CQkJCQkhbWVtY21wKGxjbmFtZSwgInBhcmVudCIsIHNpemVvZigicGFyZW50IikgLSAxKSkg ewogCQkJCQkJCWNlID0gRUcoYWN0aXZlX29wX2FycmF5KS0+c2NvcGUtPnBhcmVudDsKKwkJ CQkJCQkqZmV0Y2hfdHlwZSA9IFpFTkRfRkVUQ0hfQ0xBU1NfUEFSRU5UOwogCQkJCQkJfSBl bHNlIGlmIChaX1NUUkxFTl9QUChvYmopID09IHNpemVvZigic3RhdGljIikgLSAxICYmCiAJ CQkJCQkJIW1lbWNtcChsY25hbWUsICJzdGF0aWMiLCBzaXplb2YoInN0YXRpYyIpIC0gMSkp IHsKIAkJCQkJCQljZSA9IEVHKGNhbGxlZF9zY29wZSk7CisJCQkJCQkJKmZldGNoX3R5cGUg PSBaRU5EX0ZFVENIX0NMQVNTX1NUQVRJQzsKIAkJCQkJCX0gZWxzZSBpZiAoemVuZF9sb29r dXBfY2xhc3MoWl9TVFJWQUxfUFAob2JqKSwgWl9TVFJMRU5fUFAob2JqKSwgJnBjZSBUU1JN TFNfQ0MpID09IFNVQ0NFU1MpIHsKIAkJCQkJCQljZSA9ICpwY2U7CiAJCQkJCQl9CkBAIC0y NTA1LDcgKzI1MTUsNyBAQAogCQkJCQl9CiAKIAkJCQkJaWYgKGNlKSB7Ci0JCQkJCQlyZXR1 cm4gemVuZF9pc19jYWxsYWJsZV9jaGVja19mdW5jKGNoZWNrX2ZsYWdzLCB6b2JqX3B0cl9w dHIsIGNlLCAqbWV0aG9kLCBjZV9wdHIsIGZwdHJfcHRyIFRTUk1MU19DQyk7CisJCQkJCQly ZXR1cm4gemVuZF9pc19jYWxsYWJsZV9jaGVja19mdW5jKGNoZWNrX2ZsYWdzLCB6b2JqX3B0 cl9wdHIsIGNlLCAqbWV0aG9kLCBjZV9wdHIsIGZldGNoX3R5cGUsIGZwdHJfcHRyIFRTUk1M U19DQyk7CiAJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKGNhbGxhYmxlX25hbWUpIHsKIAkJCQkJ KmNhbGxhYmxlX25hbWUgPSBlc3RybmR1cCgiQXJyYXkiLCBzaXplb2YoIkFycmF5IiktMSk7 CkBAIC0yNTM0LDcgKzI1NDQsNyBAQAogewogCVRTUk1MU19GRVRDSCgpOwogCi0JcmV0dXJu IHplbmRfaXNfY2FsbGFibGVfZXgoY2FsbGFibGUsIGNoZWNrX2ZsYWdzLCBjYWxsYWJsZV9u YW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIFRTUk1MU19DQyk7CisJcmV0dXJuIHplbmRf aXNfY2FsbGFibGVfZXgoY2FsbGFibGUsIGNoZWNrX2ZsYWdzLCBjYWxsYWJsZV9uYW1lLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIFRTUk1MU19DQyk7CiB9CiAvKiB9fX0gKi8K IApAQCAtMjU0NCw3ICsyNTU0LDcgQEAKIAl6ZW5kX2Z1bmN0aW9uICpmcHRyOwogCXp2YWwg Kip6b2JqX3B0cjsKIAotCWlmICh6ZW5kX2lzX2NhbGxhYmxlX2V4KGNhbGxhYmxlLCAwLCBj YWxsYWJsZV9uYW1lLCBOVUxMLCAmY2UsICZmcHRyLCAmem9ial9wdHIgVFNSTUxTX0NDKSkg eworCWlmICh6ZW5kX2lzX2NhbGxhYmxlX2V4KGNhbGxhYmxlLCAwLCBjYWxsYWJsZV9uYW1l LCBOVUxMLCAmY2UsIE5VTEwsICZmcHRyLCAmem9ial9wdHIgVFNSTUxTX0NDKSkgewogCQlp ZiAoWl9UWVBFX1AoY2FsbGFibGUpID09IElTX1NUUklORyAmJiBjZSkgewogCQkJenZhbF9k dG9yKGNhbGxhYmxlKTsKIAkJCWFycmF5X2luaXQoY2FsbGFibGUpOwpAQCAtMjU2NCw4ICsy NTc0LDkgQEAKIAl6ZW5kX2NsYXNzX2VudHJ5ICpjZTsKIAl6ZW5kX2Z1bmN0aW9uICpmdW5j OwogCXp2YWwgKipvYmo7CisJemVuZF91aW50IGZldGNoX3R5cGU7CiAKLQlpZiAoIXplbmRf aXNfY2FsbGFibGVfZXgoY2FsbGFibGUsIElTX0NBTExBQkxFX1NUUklDVCwgY2FsbGFibGVf bmFtZSwgTlVMTCwgJmNlLCAmZnVuYywgJm9iaiBUU1JNTFNfQ0MpKSB7CisJaWYgKCF6ZW5k X2lzX2NhbGxhYmxlX2V4KGNhbGxhYmxlLCBJU19DQUxMQUJMRV9TVFJJQ1QsIGNhbGxhYmxl X25hbWUsIE5VTEwsICZjZSwgJmZldGNoX3R5cGUsICZmdW5jLCAmb2JqIFRTUk1MU19DQykp IHsKIAkJcmV0dXJuIEZBSUxVUkU7CiAJfQogCkBAIC0yNTkxLDcgKzI2MDIsMTEgQEAKIAl9 IGVsc2UgewogCQlmY2MtPmluaXRpYWxpemVkID0gMTsKIAkJZmNjLT5mdW5jdGlvbl9oYW5k bGVyID0gZnVuYzsKLQkJZmNjLT5jYWxsaW5nX3Njb3BlID0gY2U7CisJCWlmIChmZXRjaF90 eXBlID09IFpFTkRfRkVUQ0hfQ0xBU1NfUEFSRU5UKSB7CisJCQlmY2MtPmNhbGxpbmdfc2Nv cGUgPSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJZmNjLT5jYWxsaW5nX3Nj b3BlID0gY2U7CisJCX0KIAkJZmNjLT5vYmplY3RfcHAgPSBvYmo7CiAJfQogCWVmcmVlKGxj bmFtZSk7CkluZGV4OiBaZW5kL3plbmRfQVBJLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF9BUEkuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4yMDcuMi44LjIuOC4yLjUKZGlmZiAtdSAtcjEuMjA3LjIuOC4yLjguMi41IHplbmRf QVBJLmgKLS0tIFplbmQvemVuZF9BUEkuaAkyIE5vdiAyMDA3IDE5OjQwOjM3IC0wMDAwCTEu MjA3LjIuOC4yLjguMi41CisrKyBaZW5kL3plbmRfQVBJLmgJMjUgTm92IDIwMDcgMjM6MDc6 NTMgLTAwMDAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiAjZGVmaW5lIElTX0NBTExBQkxFX1NU UklDVCAgKElTX0NBTExBQkxFX0NIRUNLX0lTX1NUQVRJQykKIAotWkVORF9BUEkgemVuZF9i b29sIHplbmRfaXNfY2FsbGFibGVfZXgoenZhbCAqY2FsbGFibGUsIHVpbnQgY2hlY2tfZmxh Z3MsIGNoYXIgKipjYWxsYWJsZV9uYW1lLCBpbnQgKmNhbGxhYmxlX25hbWVfbGVuLCB6ZW5k X2NsYXNzX2VudHJ5ICoqY2VfcHRyLCB6ZW5kX2Z1bmN0aW9uICoqZnB0cl9wdHIsIHp2YWwg Kioqem9ial9wdHJfcHRyIFRTUk1MU19EQyk7CitaRU5EX0FQSSB6ZW5kX2Jvb2wgemVuZF9p c19jYWxsYWJsZV9leCh6dmFsICpjYWxsYWJsZSwgdWludCBjaGVja19mbGFncywgY2hhciAq KmNhbGxhYmxlX25hbWUsIGludCAqY2FsbGFibGVfbmFtZV9sZW4sIHplbmRfY2xhc3NfZW50 cnkgKipjZV9wdHIsIHplbmRfdWludCAqZmV0Y2hfdHlwZSwgemVuZF9mdW5jdGlvbiAqKmZw dHJfcHRyLCB6dmFsICoqKnpvYmpfcHRyX3B0ciBUU1JNTFNfREMpOwogWkVORF9BUEkgemVu ZF9ib29sIHplbmRfaXNfY2FsbGFibGUoenZhbCAqY2FsbGFibGUsIHVpbnQgY2hlY2tfZmxh Z3MsIGNoYXIgKipjYWxsYWJsZV9uYW1lKTsKIFpFTkRfQVBJIHplbmRfYm9vbCB6ZW5kX21h a2VfY2FsbGFibGUoenZhbCAqY2FsbGFibGUsIGNoYXIgKipjYWxsYWJsZV9uYW1lIFRTUk1M U19EQyk7CiBaRU5EX0FQSSBjb25zdCBjaGFyICp6ZW5kX2dldF9tb2R1bGVfdmVyc2lvbihj b25zdCBjaGFyICptb2R1bGVfbmFtZSk7CkluZGV4OiBaZW5kL3plbmRfZXhlY3V0ZV9BUEku Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcmVwb3NpdG9yeS9aZW5kRW5naW5lMi96ZW5k X2V4ZWN1dGVfQVBJLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMxLjIuMjAuMi4yNC4y LjEzCmRpZmYgLXUgLXIxLjMzMS4yLjIwLjIuMjQuMi4xMyB6ZW5kX2V4ZWN1dGVfQVBJLmMK LS0tIFplbmQvemVuZF9leGVjdXRlX0FQSS5jCTIyIE5vdiAyMDA3IDEzOjI3OjExIC0wMDAw CTEuMzMxLjIuMjAuMi4yNC4yLjEzCisrKyBaZW5kL3plbmRfZXhlY3V0ZV9BUEkuYwkyNSBO b3YgMjAwNyAyMzowNzo1MyAtMDAwMApAQCAtNzE5LDYgKzcxOSw3IEBACiAJCQkJCWZvdW5k ID0gKCpjZSAhPSBOVUxMP1NVQ0NFU1M6RkFJTFVSRSk7CiAJCQkJCWZjaS0+b2JqZWN0X3Bw ID0gRUcoVGhpcyk/JkVHKFRoaXMpOk5VTEw7CiAJCQkJCUVYKG9iamVjdCkgPSBFRyhUaGlz KTsKKwkJCQkJY2FsbGluZ19zY29wZSA9ICpjZTsKIAkJCQl9IGVsc2UgaWYgKHN0cmNtcCha X1NUUlZBTF9QUChmY2ktPm9iamVjdF9wcCksICJwYXJlbnQiKSA9PSAwICYmIEVHKGFjdGl2 ZV9vcF9hcnJheSkpIHsKIAogCQkJCQlpZiAoIUVHKGFjdGl2ZV9vcF9hcnJheSktPnNjb3Bl KSB7CkBAIC03MzEsNiArNzMyLDExIEBACiAJCQkJCWZvdW5kID0gKCpjZSAhPSBOVUxMP1NV Q0NFU1M6RkFJTFVSRSk7CiAJCQkJCWZjaS0+b2JqZWN0X3BwID0gRUcoVGhpcyk/JkVHKFRo aXMpOk5VTEw7CiAJCQkJCUVYKG9iamVjdCkgPSBFRyhUaGlzKTsKKwkJCQkJaWYgKEVHKGNh bGxlZF9zY29wZSkpIHsKKwkJCQkJCWNhbGxpbmdfc2NvcGUgPSBFRyhjYWxsZWRfc2NvcGUp OworCQkJCQl9IGVsc2UgeworCQkJCQkJY2FsbGluZ19zY29wZSA9ICpjZTsKKwkJCQkJfQog CQkJCX0gZWxzZSBpZiAoWl9TVFJMRU5fUFAoZmNpLT5vYmplY3RfcHApID09IHNpemVvZigi c3RhdGljIikgLSAxICYmCiAJCQkJCSFtZW1jbXAoWl9TVFJWQUxfUFAoZmNpLT5vYmplY3Rf cHApLCAic3RhdGljIiwgc2l6ZW9mKCJzdGF0aWMiKSAtIDEpCiAJCQkJKSB7CkBAIC03NDEs NiArNzQ3LDcgQEAKIAkJCQkJZm91bmQgPSAoKmNlICE9IE5VTEw/U1VDQ0VTUzpGQUlMVVJF KTsKIAkJCQkJZmNpLT5vYmplY3RfcHAgPSBFRyhUaGlzKT8mRUcoVGhpcyk6TlVMTDsKIAkJ CQkJRVgob2JqZWN0KSA9IEVHKFRoaXMpOworCQkJCQljYWxsaW5nX3Njb3BlID0gKmNlOwog CQkJCX0gZWxzZSB7CiAJCQkJCXplbmRfY2xhc3NfZW50cnkgKnNjb3BlOwogCQkJCQlzY29w ZSA9IEVHKGFjdGl2ZV9vcF9hcnJheSkgPyBFRyhhY3RpdmVfb3BfYXJyYXkpLT5zY29wZSA6 IE5VTEw7CkBAIC03NTcsMTIgKzc2NCwxMiBAQAogCQkJCQl9IGVsc2UgewogCQkJCQkJZmNp LT5vYmplY3RfcHAgPSBOVUxMOwogCQkJCQl9CisJCQkJCWNhbGxpbmdfc2NvcGUgPSAqY2U7 CiAJCQkJfQogCQkJCWlmIChmb3VuZCA9PSBGQUlMVVJFKQogCQkJCQlyZXR1cm4gRkFJTFVS RTsKIAogCQkJCWZjaS0+ZnVuY3Rpb25fdGFibGUgPSAmKCpjZSktPmZ1bmN0aW9uX3RhYmxl OwotCQkJCWNhbGxpbmdfc2NvcGUgPSAqY2U7CiAJCQl9IGVsc2UgewogCQkJCXplbmRfZXJy b3IoRV9OT1RJQ0UsICJOb24tY2FsbGFibGUgYXJyYXkgcGFzc2VkIHRvIHplbmRfY2FsbF9m dW5jdGlvbigpIik7CiAJCQkJcmV0dXJuIEZBSUxVUkU7CkluZGV4OiBaZW5kL3plbmRfdm1f ZGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIv emVuZF92bV9kZWYuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OS4yLjI5LjIuNDguMi4y MwpkaWZmIC11IC1yMS41OS4yLjI5LjIuNDguMi4yMyB6ZW5kX3ZtX2RlZi5oCi0tLSBaZW5k L3plbmRfdm1fZGVmLmgJMjIgTm92IDIwMDcgMDk6MDI6NTQgLTAwMDAJMS41OS4yLjI5LjIu NDguMi4yMworKysgWmVuZC96ZW5kX3ZtX2RlZi5oCTI1IE5vdiAyMDA3IDIzOjA3OjU0IC0w MDAwCkBAIC0xODA3LDggKzE4MDcsMTUgQEAKIAkJaWYgKCFjZSkgewogCQkJemVuZF9lcnJv cihFX0VSUk9SLCAiQ2xhc3MgJyVzJyBub3QgZm91bmQiLCBaX1NUUlZBTChvcGxpbmUtPm9w MS51LmNvbnN0YW50KSk7CiAJCX0KKwkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwogCX0gZWxz ZSB7CiAJCWNlID0gRVhfVChvcGxpbmUtPm9wMS51LnZhcikuY2xhc3NfZW50cnk7CisJCQor CQlpZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVUQ0hfQ0xBU1NfUEFSRU5U KSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Njb3BlKTsKKwkJfSBlbHNl IHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0KIAlpZihPUDJfVFlQRSAh PSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2YWw7CkBAIC0xODQ5 LDggKzE4NTYsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVjdG9yOwogCX0KIAotCUVY KGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5jb21tb24uZm5fZmxhZ3Mg JiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5VTEw7CiAJfSBlbHNlIHsK SW5kZXg6IFplbmQvemVuZF92bV9leGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L3JlcG9zaXRvcnkvWmVuZEVuZ2luZTIvemVuZF92bV9leGVjdXRlLmgsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuNjIuMi4zMC4yLjQ5LjIuMjQKZGlmZiAtdSAtcjEuNjIuMi4zMC4yLjQ5 LjIuMjQgemVuZF92bV9leGVjdXRlLmgKLS0tIFplbmQvemVuZF92bV9leGVjdXRlLmgJMjMg Tm92IDIwMDcgMTU6MDM6MDIgLTAwMDAJMS42Mi4yLjMwLjIuNDkuMi4yNAorKysgWmVuZC96 ZW5kX3ZtX2V4ZWN1dGUuaAkyNSBOb3YgMjAwNyAyMzowODowMSAtMDAwMApAQCAtMjM5MCw4 ICsyMzkwLDE1IEBACiAJCWlmICghY2UpIHsKIAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNs YXNzICclcycgbm90IGZvdW5kIiwgWl9TVFJWQUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkp OwogCQl9CisJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVY X1Qob3BsaW5lLT5vcDEudS52YXIpLmNsYXNzX2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9w MS51LkVBLnR5cGUgPT0gWkVORF9GRVRDSF9DTEFTU19QQVJFTlQpIHsKKwkJCUVYKGNhbGxl ZF9zY29wZSkgPSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVk X3Njb3BlKSA9IGNlOworCQl9CiAJfQogCWlmKElTX0NPTlNUICE9IElTX1VOVVNFRCkgewog CQljaGFyICpmdW5jdGlvbl9uYW1lX3N0cnZhbDsKQEAgLTI0MzIsOCArMjQzOSw2IEBACiAJ CUVYKGZiYykgPSBjZS0+Y29uc3RydWN0b3I7CiAJfQogCi0JRVgoY2FsbGVkX3Njb3BlKSA9 IGNlOwotCiAJaWYgKEVYKGZiYyktPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJ QykgewogCQlFWChvYmplY3QpID0gTlVMTDsKIAl9IGVsc2UgewpAQCAtMjkzOCw4ICsyOTQz LDE1IEBACiAJCWlmICghY2UpIHsKIAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICcl cycgbm90IGZvdW5kIiwgWl9TVFJWQUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9 CisJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3Bs aW5lLT5vcDEudS52YXIpLmNsYXNzX2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVB LnR5cGUgPT0gWkVORF9GRVRDSF9DTEFTU19QQVJFTlQpIHsKKwkJCUVYKGNhbGxlZF9zY29w ZSkgPSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3Bl KSA9IGNlOworCQl9CiAJfQogCWlmKElTX1RNUF9WQVIgIT0gSVNfVU5VU0VEKSB7CiAJCWNo YXIgKmZ1bmN0aW9uX25hbWVfc3RydmFsOwpAQCAtMjk4MCw4ICsyOTkyLDYgQEAKIAkJRVgo ZmJjKSA9IGNlLT5jb25zdHJ1Y3RvcjsKIAl9CiAKLQlFWChjYWxsZWRfc2NvcGUpID0gY2U7 Ci0KIAlpZiAoRVgoZmJjKS0+Y29tbW9uLmZuX2ZsYWdzICYgWkVORF9BQ0NfU1RBVElDKSB7 CiAJCUVYKG9iamVjdCkgPSBOVUxMOwogCX0gZWxzZSB7CkBAIC0zMzg2LDggKzMzOTYsMTUg QEAKIAkJaWYgKCFjZSkgewogCQkJemVuZF9lcnJvcihFX0VSUk9SLCAiQ2xhc3MgJyVzJyBu b3QgZm91bmQiLCBaX1NUUlZBTChvcGxpbmUtPm9wMS51LmNvbnN0YW50KSk7CiAJCX0KKwkJ RVgoY2FsbGVkX3Njb3BlKSA9IGNlOwogCX0gZWxzZSB7CiAJCWNlID0gRVhfVChvcGxpbmUt Pm9wMS51LnZhcikuY2xhc3NfZW50cnk7CisKKwkJaWYgKG9wbGluZS0+b3AxLnUuRUEudHlw ZSA9PSBaRU5EX0ZFVENIX0NMQVNTX1BBUkVOVCkgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9 IEVHKGNhbGxlZF9zY29wZSk7CisJCX0gZWxzZSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0g Y2U7CisJCX0KIAl9CiAJaWYoSVNfVkFSICE9IElTX1VOVVNFRCkgewogCQljaGFyICpmdW5j dGlvbl9uYW1lX3N0cnZhbDsKQEAgLTM0MjgsOCArMzQ0NSw2IEBACiAJCUVYKGZiYykgPSBj ZS0+Y29uc3RydWN0b3I7CiAJfQogCi0JRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwotCiAJaWYg KEVYKGZiYyktPmNvbW1vbi5mbl9mbGFncyAmIFpFTkRfQUNDX1NUQVRJQykgewogCQlFWChv YmplY3QpID0gTlVMTDsKIAl9IGVsc2UgewpAQCAtMzYwMCw4ICszNjE1LDE1IEBACiAJCWlm ICghY2UpIHsKIAkJCXplbmRfZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZvdW5k IiwgWl9TVFJWQUwob3BsaW5lLT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNhbGxl ZF9zY29wZSkgPSBjZTsKIAl9IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEudS52 YXIpLmNsYXNzX2VudHJ5OworCisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0gWkVO RF9GRVRDSF9DTEFTU19QQVJFTlQpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBFRyhjYWxs ZWRfc2NvcGUpOworCQl9IGVsc2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOworCQl9 CiAJfQogCWlmKElTX1VOVVNFRCAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25f bmFtZV9zdHJ2YWw7CkBAIC0zNjQyLDggKzM2NjQsNiBAQAogCQlFWChmYmMpID0gY2UtPmNv bnN0cnVjdG9yOwogCX0KIAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChm YmMpLT5jb21tb24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0 KSA9IE5VTEw7CiAJfSBlbHNlIHsKQEAgLTQwMTYsOCArNDAzNiwxNSBAQAogCQlpZiAoIWNl KSB7CiAJCQl6ZW5kX2Vycm9yKEVfRVJST1IsICJDbGFzcyAnJXMnIG5vdCBmb3VuZCIsIFpf U1RSVkFMKG9wbGluZS0+b3AxLnUuY29uc3RhbnQpKTsKIAkJfQorCQlFWChjYWxsZWRfc2Nv cGUpID0gY2U7CiAJfSBlbHNlIHsKIAkJY2UgPSBFWF9UKG9wbGluZS0+b3AxLnUudmFyKS5j bGFzc19lbnRyeTsKKworCQlpZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVU Q0hfQ0xBU1NfUEFSRU5UKSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Nj b3BlKTsKKwkJfSBlbHNlIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0K IAlpZihJU19DViAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2 YWw7CkBAIC00MDU4LDggKzQwODUsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVjdG9y OwogCX0KIAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5jb21t b24uZm5fZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5VTEw7 CiAJfSBlbHNlIHsKQEAgLTk3MTAsOCArOTczNSwxNSBAQAogCQlpZiAoIWNlKSB7CiAJCQl6 ZW5kX2Vycm9yKEVfRVJST1IsICJDbGFzcyAnJXMnIG5vdCBmb3VuZCIsIFpfU1RSVkFMKG9w bGluZS0+b3AxLnUuY29uc3RhbnQpKTsKIAkJfQorCQlFWChjYWxsZWRfc2NvcGUpID0gY2U7 CiAJfSBlbHNlIHsKIAkJY2UgPSBFWF9UKG9wbGluZS0+b3AxLnUudmFyKS5jbGFzc19lbnRy eTsKKworCQlpZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVUQ0hfQ0xBU1Nf UEFSRU5UKSB7CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Njb3BlKTsKKwkJ fSBlbHNlIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0KIAlpZihJU19D T05TVCAhPSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2YWw7CkBA IC05NzUyLDggKzk3ODQsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVjdG9yOwogCX0K IAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5jb21tb24uZm5f ZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5VTEw7CiAJfSBl bHNlIHsKQEAgLTExNDAzLDggKzExNDMzLDE1IEBACiAJCWlmICghY2UpIHsKIAkJCXplbmRf ZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZvdW5kIiwgWl9TVFJWQUwob3BsaW5l LT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKIAl9 IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEudS52YXIpLmNsYXNzX2VudHJ5Owor CisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0gWkVORF9GRVRDSF9DTEFTU19QQVJF TlQpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVs c2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOworCQl9CiAJfQogCWlmKElTX1RNUF9W QVIgIT0gSVNfVU5VU0VEKSB7CiAJCWNoYXIgKmZ1bmN0aW9uX25hbWVfc3RydmFsOwpAQCAt MTE0NDUsOCArMTE0ODIsNiBAQAogCQlFWChmYmMpID0gY2UtPmNvbnN0cnVjdG9yOwogCX0K IAotCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKLQogCWlmIChFWChmYmMpLT5jb21tb24uZm5f ZmxhZ3MgJiBaRU5EX0FDQ19TVEFUSUMpIHsKIAkJRVgob2JqZWN0KSA9IE5VTEw7CiAJfSBl bHNlIHsKQEAgLTEzMDY4LDggKzEzMTAzLDE1IEBACiAJCWlmICghY2UpIHsKIAkJCXplbmRf ZXJyb3IoRV9FUlJPUiwgIkNsYXNzICclcycgbm90IGZvdW5kIiwgWl9TVFJWQUwob3BsaW5l LT5vcDEudS5jb25zdGFudCkpOwogCQl9CisJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKIAl9 IGVsc2UgewogCQljZSA9IEVYX1Qob3BsaW5lLT5vcDEudS52YXIpLmNsYXNzX2VudHJ5Owor CisJCWlmIChvcGxpbmUtPm9wMS51LkVBLnR5cGUgPT0gWkVORF9GRVRDSF9DTEFTU19QQVJF TlQpIHsKKwkJCUVYKGNhbGxlZF9zY29wZSkgPSBFRyhjYWxsZWRfc2NvcGUpOworCQl9IGVs c2UgeworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOworCQl9CiAJfQogCWlmKElTX1ZBUiAh PSBJU19VTlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2YWw7CkBAIC0xMzEx MCw4ICsxMzE1Miw2IEBACiAJCUVYKGZiYykgPSBjZS0+Y29uc3RydWN0b3I7CiAJfQogCi0J RVgoY2FsbGVkX3Njb3BlKSA9IGNlOwotCiAJaWYgKEVYKGZiYyktPmNvbW1vbi5mbl9mbGFn cyAmIFpFTkRfQUNDX1NUQVRJQykgewogCQlFWChvYmplY3QpID0gTlVMTDsKIAl9IGVsc2Ug ewpAQCAtMTM5MDYsOCArMTM5NDYsMTUgQEAKIAkJaWYgKCFjZSkgewogCQkJemVuZF9lcnJv cihFX0VSUk9SLCAiQ2xhc3MgJyVzJyBub3QgZm91bmQiLCBaX1NUUlZBTChvcGxpbmUtPm9w MS51LmNvbnN0YW50KSk7CiAJCX0KKwkJRVgoY2FsbGVkX3Njb3BlKSA9IGNlOwogCX0gZWxz ZSB7CiAJCWNlID0gRVhfVChvcGxpbmUtPm9wMS51LnZhcikuY2xhc3NfZW50cnk7CisKKwkJ aWYgKG9wbGluZS0+b3AxLnUuRUEudHlwZSA9PSBaRU5EX0ZFVENIX0NMQVNTX1BBUkVOVCkg eworCQkJRVgoY2FsbGVkX3Njb3BlKSA9IEVHKGNhbGxlZF9zY29wZSk7CisJCX0gZWxzZSB7 CisJCQlFWChjYWxsZWRfc2NvcGUpID0gY2U7CisJCX0KIAl9CiAJaWYoSVNfVU5VU0VEICE9 IElTX1VOVVNFRCkgewogCQljaGFyICpmdW5jdGlvbl9uYW1lX3N0cnZhbDsKQEAgLTEzOTQ4 LDggKzEzOTk1LDYgQEAKIAkJRVgoZmJjKSA9IGNlLT5jb25zdHJ1Y3RvcjsKIAl9CiAKLQlF WChjYWxsZWRfc2NvcGUpID0gY2U7Ci0KIAlpZiAoRVgoZmJjKS0+Y29tbW9uLmZuX2ZsYWdz ICYgWkVORF9BQ0NfU1RBVElDKSB7CiAJCUVYKG9iamVjdCkgPSBOVUxMOwogCX0gZWxzZSB7 CkBAIC0xNTI3Miw4ICsxNTMxNywxNSBAQAogCQlpZiAoIWNlKSB7CiAJCQl6ZW5kX2Vycm9y KEVfRVJST1IsICJDbGFzcyAnJXMnIG5vdCBmb3VuZCIsIFpfU1RSVkFMKG9wbGluZS0+b3Ax LnUuY29uc3RhbnQpKTsKIAkJfQorCQlFWChjYWxsZWRfc2NvcGUpID0gY2U7CiAJfSBlbHNl IHsKIAkJY2UgPSBFWF9UKG9wbGluZS0+b3AxLnUudmFyKS5jbGFzc19lbnRyeTsKKworCQlp ZiAob3BsaW5lLT5vcDEudS5FQS50eXBlID09IFpFTkRfRkVUQ0hfQ0xBU1NfUEFSRU5UKSB7 CisJCQlFWChjYWxsZWRfc2NvcGUpID0gRUcoY2FsbGVkX3Njb3BlKTsKKwkJfSBlbHNlIHsK KwkJCUVYKGNhbGxlZF9zY29wZSkgPSBjZTsKKwkJfQogCX0KIAlpZihJU19DViAhPSBJU19V TlVTRUQpIHsKIAkJY2hhciAqZnVuY3Rpb25fbmFtZV9zdHJ2YWw7CkBAIC0xNTMxNCw4ICsx NTM2Niw2IEBACiAJCUVYKGZiYykgPSBjZS0+Y29uc3RydWN0b3I7CiAJfQogCi0JRVgoY2Fs bGVkX3Njb3BlKSA9IGNlOwotCiAJaWYgKEVYKGZiYyktPmNvbW1vbi5mbl9mbGFncyAmIFpF TkRfQUNDX1NUQVRJQykgewogCQlFWChvYmplY3QpID0gTlVMTDsKIAl9IGVsc2UgewpJbmRl eDogZXh0L3NwbC9waHBfc3BsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRv cnkvcGhwLXNyYy9leHQvc3BsL3BocF9zcGwuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41 Mi4yLjI4LjIuMTcuMi41CmRpZmYgLXUgLXIxLjUyLjIuMjguMi4xNy4yLjUgcGhwX3NwbC5j Ci0tLSBleHQvc3BsL3BocF9zcGwuYwkyMiBOb3YgMjAwNyAxMzoyNzoxMyAtMDAwMAkxLjUy LjIuMjguMi4xNy4yLjUKKysrIGV4dC9zcGwvcGhwX3NwbC5jCTI1IE5vdiAyMDA3IDIzOjEw OjIwIC0wMDAwCkBAIC00MjMsNyArNDIzLDcgQEAKIAkJCX0KIAkJfQogCQotCQlpZiAoIXpl bmRfaXNfY2FsbGFibGVfZXgoemNhbGxhYmxlLCBJU19DQUxMQUJMRV9TVFJJQ1QsICZmdW5j X25hbWUsICZmdW5jX25hbWVfbGVuLCAmYWxmaS5jZSwgJmFsZmkuZnVuY19wdHIsICZvYmpf cHRyIFRTUk1MU19DQykpIHsKKwkJaWYgKCF6ZW5kX2lzX2NhbGxhYmxlX2V4KHpjYWxsYWJs ZSwgSVNfQ0FMTEFCTEVfU1RSSUNULCAmZnVuY19uYW1lLCAmZnVuY19uYW1lX2xlbiwgJmFs ZmkuY2UsIE5VTEwsICZhbGZpLmZ1bmNfcHRyLCAmb2JqX3B0ciBUU1JNTFNfQ0MpKSB7CiAJ CQlpZiAoWl9UWVBFX1AoemNhbGxhYmxlKSA9PSBJU19BUlJBWSkgewogCQkJCWlmICghb2Jq X3B0ciAmJiBhbGZpLmZ1bmNfcHRyICYmICEoYWxmaS5mdW5jX3B0ci0+Y29tbW9uLmZuX2Zs YWdzICYgWkVORF9BQ0NfU1RBVElDKSkgewogCQkJCQlpZiAoZG9fdGhyb3cpIHsKQEAgLTUx NSw3ICs1MTUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCF6ZW5kX2lzX2NhbGxhYmxl X2V4KHpjYWxsYWJsZSwgSVNfQ0FMTEFCTEVfQ0hFQ0tfU1lOVEFYX09OTFksICZmdW5jX25h bWUsICZmdW5jX25hbWVfbGVuLCBOVUxMLCBOVUxMLCAmb2JqX3B0ciBUU1JNTFNfQ0MpKSB7 CisJaWYgKCF6ZW5kX2lzX2NhbGxhYmxlX2V4KHpjYWxsYWJsZSwgSVNfQ0FMTEFCTEVfQ0hF Q0tfU1lOVEFYX09OTFksICZmdW5jX25hbWUsICZmdW5jX25hbWVfbGVuLCBOVUxMLCBOVUxM LCBOVUxMLCAmb2JqX3B0ciBUU1JNTFNfQ0MpKSB7CiAJCWlmIChmdW5jX25hbWUpIHsKIAkJ CWVmcmVlKGZ1bmNfbmFtZSk7CiAJCX0K --------------080502010504020903010607--