Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1glgWr-0001zj-Rc for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Jan 2019 20:50:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1glgWq-0000R1-Cf for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Jan 2019 20:50:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1glgWp-0000P8-JY for pgsql-hackers@lists.postgresql.org; Mon, 21 Jan 2019 20:50:44 +0000 Received: from mail.postgrespro.ru ([93.174.131.138]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1glgWi-0000XQ-1p for pgsql-hackers@postgresql.org; Mon, 21 Jan 2019 20:50:42 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 763F421DCB53; Mon, 21 Jan 2019 23:50:33 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 263D821D9A8E; Mon, 21 Jan 2019 23:50:33 +0300 (MSK) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_4e3215dcf63ce10b878a6ba680fba145" Date: Mon, 21 Jan 2019 23:50:33 +0300 From: a.kondratov@postgrespro.ru To: Andrey Borodin Cc: PostgreSQL-development , Dmitry Dolgov <9erthalion6@gmail.com>, Michael Paquier , Alvaro Herrera , vladimirlesk@yandex-team.ru, dsarafan@yandex-team.ru Subject: Re: [Patch] pg_rewind: options to use restore_command from recovery.conf or command line In-Reply-To: References: <50b94dcb-c744-ff2c-d6a4-3c371f8a7f9a@postgrespro.ru> <20181022171907.ri2tkqtt7n6jm4dh@alvherre.pgsql> <20181029070600.GJ14242@paquier.xyz> <527530a0-3460-7c32-d223-3014ddaeee8e@postgrespro.ru> <20181030030123.GA18366@paquier.xyz> <3e432374-d21b-9ab7-06e0-a0785e5e3fd0@postgrespro.ru> <13ec67dc-2c6b-777e-902a-1141fdb8302e@postgrespro.ru> <8a8d3069-129e-18c4-aab9-707825eca365@postgrespro.ru> Message-ID: X-Sender: a.kondratov@postgrespro.ru User-Agent: Roundcube Webmail/1.3.8 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_4e3215dcf63ce10b878a6ba680fba145 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi Andrey, Thank you for the review! I have updated the patch according to your comments and remarks. Please, find new version attached. On 2019-01-07 12:12, Andrey Borodin wrote: > > Here are some my notes: > 1. RestoreArchivedWAL() shares a lot of code with > RestoreArchivedFile(). Is it possible\viable to refactor and extract > common part? > I am not sure, but I guess that differences in errors reporting and points 2-3 are enough to leave new RestoreArchivedWAL() apart. There are not many common parts left. > > 2. IMV pg_rewind with %r restore_command should fail. %r is designed > to clean archive from WALs, nothing should be deleted in case of > fetching WALs for rewind. Last restartpoint has no meaning during > rewind. Or does it? If so, let's comment about it. > Yes, during rewind we need the last common checkpoint, not restart point. Taking into account that Michael pointed me to this place too and I cannot propose a real-life example of restore_command with %r to use in pg_rewind, I decided to add an exception in such a case. So now pg_rewind will fail with error. > > 3. RestoreArchivedFile() checks for signals, is it done by pg_rewind > elsewhere? > There is a comment part inside RestoreArchivedFile(): * However, if the failure was due to any sort of signal, it's best to * punt and abort recovery. (If we "return false" here, upper levels will * assume that recovery is complete and start up the database!) In other words, there is a possibility to start up the database assuming that recovery went well, while actually it was terminated by signal. It happens since failure is expected during the recovery, so some kind of ambiguity occurs, which we trying to solve checking for termination signals. In contrast, we are looking in the archive for each missing WAL file during pg_rewind and if we failed to restore it by any means rewind will fail indifferent of was it due to the termination signal or file is actually missing in the archive. Thus, there no ambiguity occurs and we do not need to check for signals here. That is how I understand it. Probably someone can explain why I am wrong. > > 4. No documentation is updated > I have updated docs in order to reflect the new functionality as well. > > 5. -R takes precedence over -r without notes. Shouldn't we complain? > Or may be we should take one from config, iif nothing found use -R? > I do not think it is worth of additional complexity and we could expect, that end-users know, what they want to use–either -r or -R–so I added an error message due to the conflicting options. Regards -- Alexey Kondratov Postgres Professional https://www.postgrespro.com Russian Postgres Company --=_4e3215dcf63ce10b878a6ba680fba145 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-pg_rewind-options-to-use-restore_command-v2.1.patch Content-Disposition: attachment; filename=0001-pg_rewind-options-to-use-restore_command-v2.1.patch; size=68243 RnJvbSBjYzY0ZDc5NDNlMjIwYmE2NDM0Yjc2ZGI2M2E1NzljY2I1NDc1MTdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgS29uZHJhdG92IDxhbGV4Lmx1bWlyQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyMSBEZWMgMjAxOCAxNDowMDozMCArMDMwMApTdWJqZWN0OiBbUEFUQ0hd IHBnX3Jld2luZDogb3B0aW9ucyB0byB1c2UgcmVzdG9yZV9jb21tYW5kIGZyb20KIHBvc3RncmVz cWwuY29uZiBvciBjb21tYW5kIGxpbmUuCgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmV3aW5k LnNnbWwgICAgICAgICAgICAgICB8ICAzMCArLQogc3JjL2JhY2tlbmQvTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNp b24uYyAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9NYWtlZmls ZSAgICAgICAgICAgICAgIHwgICA4IC0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgICAg ICAgICAgICAgICAgICB8IDQzNCArKysrKysrKysrKysrLS0KIHNyYy9iaW4vcGdfcmV3aW5kL01h a2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19yZXdpbmQvUmV3 aW5kVGVzdC5wbSAgICAgICAgICAgICAgIHwgIDk2ICsrKy0KIHNyYy9iaW4vcGdfcmV3aW5kL3Bh cnNleGxvZy5jICAgICAgICAgICAgICAgICB8IDE4MCArKysrKy0KIHNyYy9iaW4vcGdfcmV3aW5k L3BnX3Jld2luZC5jICAgICAgICAgICAgICAgICB8IDEwMCArKystCiBzcmMvYmluL3BnX3Jld2lu ZC9wZ19yZXdpbmQuaCAgICAgICAgICAgICAgICAgfCAgMTIgKy0KIHNyYy9iaW4vcGdfcmV3aW5k L3QvMDAxX2Jhc2ljLnBsICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19yZXdpbmQv dC8wMDJfZGF0YWJhc2VzLnBsICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX3Jld2luZC90 LzAwM19leHRyYWZpbGVzLnBsICAgICAgICAgfCAgIDQgKy0KIHNyYy9jb21tb24vTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL3tiYWNrZW5kL3V0aWxzL21p c2MgPT4gY29tbW9ufS9ndWMtZmlsZS5sIHwgNTE0ICsrKystLS0tLS0tLS0tLS0tLQogc3JjL2lu Y2x1ZGUvY29tbW9uL2d1Yy1maWxlLmggICAgICAgICAgICAgICAgIHwgIDUwICsrCiBzcmMvaW5j bHVkZS91dGlscy9ndWMuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKy0KIHNyYy90b29s cy9tc3ZjL01rdmNidWlsZC5wbSAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL3Rvb2xz L21zdmMvY2xlYW4uYmF0ICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiAxOSBmaWxlcyBj aGFuZ2VkLCA5ODcgaW5zZXJ0aW9ucygrKSwgNTA4IGRlbGV0aW9ucygtKQogcmVuYW1lIHNyYy97 YmFja2VuZC91dGlscy9taXNjID0+IGNvbW1vbn0vZ3VjLWZpbGUubCAoNjAlKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2NvbW1vbi9ndWMtZmlsZS5oCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3JlZi9wZ19yZXdpbmQuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmV3aW5k LnNnbWwKaW5kZXggNTNhNjRlZTI5ZS4uMzQwNDZkNjQwNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3JlZi9wZ19yZXdpbmQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jld2luZC5z Z21sCkBAIC02Nyw4ICs2NywxMCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIGFuY2Vz dG9yLiBJbiB0aGUgdHlwaWNhbCBmYWlsb3ZlciBzY2VuYXJpbyB3aGVyZSB0aGUgdGFyZ2V0IGNs dXN0ZXIgd2FzCiAgICBzaHV0IGRvd24gc29vbiBhZnRlciB0aGUgZGl2ZXJnZW5jZSwgdGhpcyBp cyBub3QgYSBwcm9ibGVtLCBidXQgaWYgdGhlCiAgICB0YXJnZXQgY2x1c3RlciByYW4gZm9yIGEg bG9uZyB0aW1lIGFmdGVyIHRoZSBkaXZlcmdlbmNlLCB0aGUgb2xkIFdBTAotICAgZmlsZXMgbWln aHQgbm8gbG9uZ2VyIGJlIHByZXNlbnQuIEluIHRoYXQgY2FzZSwgdGhleSBjYW4gYmUgbWFudWFs bHkKLSAgIGNvcGllZCBmcm9tIHRoZSBXQUwgYXJjaGl2ZSB0byB0aGUgPGZpbGVuYW1lPnBnX3dh bDwvZmlsZW5hbWU+IGRpcmVjdG9yeSwgb3IKKyAgIGZpbGVzIG1pZ2h0IG5vIGxvbmdlciBiZSBw cmVzZW50LiBJbiB0aGF0IGNhc2UsIHRoZXkgY2FuIGJlIGF1dG9tYXRpY2FsbHkKKyAgIGNvcGll ZCBieSA8YXBwbGljYXRpb24+cGdfcmV3aW5kPC9hcHBsaWNhdGlvbj4gZnJvbSB0aGUgV0FMIGFy Y2hpdmUgdG8gdGhlIAorICAgPGZpbGVuYW1lPnBnX3dhbDwvZmlsZW5hbWU+IGRpcmVjdG9yeSBp ZiBlaXRoZXIgPGxpdGVyYWw+LXI8L2xpdGVyYWw+IG9yCisgICA8bGl0ZXJhbD4tUjwvbGl0ZXJh bD4gb3B0aW9ucyBhcmUgc3BlY2lmaWVkLCBvcgogICAgZmV0Y2hlZCBvbiBzdGFydHVwIGJ5IGNv bmZpZ3VyaW5nIDx4cmVmIGxpbmtlbmQ9Imd1Yy1wcmltYXJ5LWNvbm5pbmZvIi8+IG9yCiAgICA8 eHJlZiBsaW5rZW5kPSJndWMtcmVzdG9yZS1jb21tYW5kIi8+LiAgVGhlIHVzZSBvZgogICAgPGFw cGxpY2F0aW9uPnBnX3Jld2luZDwvYXBwbGljYXRpb24+IGlzIG5vdCBsaW1pdGVkIHRvIGZhaWxv dmVyLCBlLmcuICBhIHN0YW5kYnkKQEAgLTIwMCw2ICsyMDIsMzAgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAg ICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tcjwvb3B0aW9uPjwvdGVybT4K KyAgICAgIDx0ZXJtPjxvcHRpb24+LS11c2UtcG9zdGdyZXNxbC1jb25mPC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBVc2UgcmVzdG9yZV9j b21tYW5kIGluIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gdG8KKyAg ICAgICAgcmV0cmVpdmUgbWlzc2luZyBpbiB0aGUgdGFyZ2V0IDxmaWxlbmFtZT5wZ193YWw8L2Zp bGVuYW1lPiBkaXJlY3RvcnkKKyAgICAgICAgV0FMIGZpbGVzIGZyb20gdGhlIFdBTCBhcmNoaXZl LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1SIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5yZXN0b3JlX2NvbW1hbmQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1yZXN0b3JlLWNvbW1hbmQ9PHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnJlc3RvcmVfY29tbWFuZDwvcmVwbGFjZWFibGU+PC9v cHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBT cGVjaWZpZXMgdGhlIHJlc3RvcmVfY29tbWFuZCB0byB1c2UgZm9yIHJldHJpZXZhbCBvZiB0aGUg bWlzc2luZworICAgICAgICBpbiB0aGUgdGFyZ2V0IDxmaWxlbmFtZT5wZ193YWw8L2ZpbGVuYW1l PiBkaXJlY3RvcnkgV0FMIGZpbGVzIGZyb20KKyAgICAgICAgdGhlIFdBTCBhcmNoaXZlLgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZGVidWc8L29wdGlvbj48 L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9NYWtlZmls ZSBiL3NyYy9iYWNrZW5kL01ha2VmaWxlCmluZGV4IDQ3OGE5NmRiOWIuLjcyMWNiNTdlODkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL01ha2VmaWxl CkBAIC0xODYsNyArMTg2LDcgQEAgZGlzdHByZXA6CiAJJChNQUtFKSAtQyByZXBsaWNhdGlvbgly ZXBsX2dyYW0uYyByZXBsX3NjYW5uZXIuYyBzeW5jcmVwX2dyYW0uYyBzeW5jcmVwX3NjYW5uZXIu YwogCSQoTUFLRSkgLUMgc3RvcmFnZS9sbWdyCWx3bG9ja25hbWVzLmggbHdsb2NrbmFtZXMuYwog CSQoTUFLRSkgLUMgdXRpbHMJZGlzdHByZXAKLQkkKE1BS0UpIC1DIHV0aWxzL21pc2MJZ3VjLWZp bGUuYworCSQoTUFLRSkgLUMgY29tbW9uCWd1Yy1maWxlLmMKIAkkKE1BS0UpIC1DIHV0aWxzL3Nv cnQJcXNvcnRfdHVwbGUuYwogCiAKQEAgLTMwNyw3ICszMDcsNyBAQCBtYWludGFpbmVyLWNsZWFu OiBkaXN0Y2xlYW4KIAkgICAgICByZXBsaWNhdGlvbi9zeW5jcmVwX3NjYW5uZXIuYyBcCiAJICAg ICAgc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLmMgXAogCSAgICAgIHN0b3JhZ2UvbG1nci9sd2xv Y2tuYW1lcy5oIFwKLQkgICAgICB1dGlscy9taXNjL2d1Yy1maWxlLmMgXAorCSAgICAgIGNvbW1v bi9ndWMtZmlsZS5jIFwKIAkgICAgICB1dGlscy9zb3J0L3Fzb3J0X3R1cGxlLmMKIAogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHRlbnNpb24uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCmluZGV4IDRmZTcxMTk2YzQuLmI2NGRlY2UyMzYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4dGVuc2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4dGVuc2lvbi5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMv ZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvc2NoZW1hY21kcy5oIgorI2luY2x1ZGUgImNvbW1vbi9ndWMtZmlsZS5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvTWFrZWZpbGUKaW5kZXggZWM3ZWMxMzFlNS4uMjIwNTk1NmE5 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL01ha2VmaWxlCkBAIC0yNSwxMSArMjUsMyBAQCBvdmVycmlkZSBD UFBGTEFHUyArPSAtRFBHX0tSQl9TUlZUQUI9JyIkKGtyYl9zcnZ0YWIpIicKIGVuZGlmCiAKIGlu Y2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKLQotIyBndWMtZmlsZSBp cyBjb21waWxlZCBhcyBwYXJ0IG9mIGd1YwotZ3VjLm86IGd1Yy1maWxlLmMKLQotIyBOb3RlOiBn dWMtZmlsZS5jIGlzIG5vdCBkZWxldGVkIGJ5ICdtYWtlIGNsZWFuJywKLSMgc2luY2Ugd2Ugd2Fu dCB0byBzaGlwIGl0IGluIGRpc3RyaWJ1dGlvbiB0YXJiYWxscy4KLWNsZWFuOgotCUBybSAtZiBs ZXgueXkuYwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKaW5kZXggYzIxNmVkMDkyMi4uYzUyZDFiYzdlNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Yy5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvdmFj dXVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFyaWFibGUuaCIKICNpbmNsdWRlICJjb21tYW5k cy90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29tbW9uL2d1Yy1maWxlLmgiCiAjaW5jbHVkZSAiY29t bW9uL3N0cmluZy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0Lmgi CkBAIC0yMTEsNyArMjEyLDYgQEAgc3RhdGljIHZvaWQgYXNzaWduX3JlY292ZXJ5X3RhcmdldF9s c24oY29uc3QgY2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSk7CiBzdGF0aWMgYm9vbCBjaGVja19w cmltYXJ5X3Nsb3RfbmFtZShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBz b3VyY2UpOwogc3RhdGljIGJvb2wgY2hlY2tfZGVmYXVsdF93aXRoX29pZHMoYm9vbCAqbmV3dmFs LCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpOwogCi0vKiBQcml2YXRlIGZ1bmN0aW9u cyBpbiBndWMtZmlsZS5sIHRoYXQgbmVlZCB0byBiZSBjYWxsZWQgZnJvbSBndWMuYyAqLwogc3Rh dGljIENvbmZpZ1ZhcmlhYmxlICpQcm9jZXNzQ29uZmlnRmlsZUludGVybmFsKEd1Y0NvbnRleHQg Y29udGV4dCwKIAkJCQkJCSAgYm9vbCBhcHBseVNldHRpbmdzLCBpbnQgZWxldmVsKTsKIApAQCAt NDQ2Nyw3ICs0NDY3LDYgQEAgc3RhdGljIGludAlHVUNOZXN0TGV2ZWwgPSAwOwkvKiAxIHdoZW4g aW4gbWFpbiB0cmFuc2FjdGlvbiAqLwogCiAKIHN0YXRpYyBpbnQJZ3VjX3Zhcl9jb21wYXJlKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwotc3RhdGljIGludAlndWNfbmFtZV9jb21wYXJl KGNvbnN0IGNoYXIgKm5hbWVhLCBjb25zdCBjaGFyICpuYW1lYik7CiBzdGF0aWMgdm9pZCBJbml0 aWFsaXplR1VDT3B0aW9uc0Zyb21FbnZpcm9ubWVudCh2b2lkKTsKIHN0YXRpYyB2b2lkIEluaXRp YWxpemVPbmVHVUNPcHRpb24oc3RydWN0IGNvbmZpZ19nZW5lcmljICpnY29uZik7CiBzdGF0aWMg dm9pZCBwdXNoX29sZF92YWx1ZShzdHJ1Y3QgY29uZmlnX2dlbmVyaWMgKmdjb25mLCBHdWNBY3Rp b24gYWN0aW9uKTsKQEAgLTQ5NDQsMzcgKzQ5NDMsNiBAQCBndWNfdmFyX2NvbXBhcmUoY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAlyZXR1cm4gZ3VjX25hbWVfY29tcGFyZShjb25mYS0+ bmFtZSwgY29uZmItPm5hbWUpOwogfQogCi0vKgotICogdGhlIGJhcmUgY29tcGFyaXNvbiBmdW5j dGlvbiBmb3IgR1VDIG5hbWVzCi0gKi8KLXN0YXRpYyBpbnQKLWd1Y19uYW1lX2NvbXBhcmUoY29u c3QgY2hhciAqbmFtZWEsIGNvbnN0IGNoYXIgKm5hbWViKQotewotCS8qCi0JICogVGhlIHRlbXB0 YXRpb24gdG8gdXNlIHN0cmNhc2VjbXAoKSBoZXJlIG11c3QgYmUgcmVzaXN0ZWQsIGJlY2F1c2Ug dGhlCi0JICogYXJyYXkgb3JkZXJpbmcgaGFzIHRvIHJlbWFpbiBzdGFibGUgYWNyb3NzIHNldGxv Y2FsZSgpIGNhbGxzLiBTbywgYnVpbGQKLQkgKiBvdXIgb3duIHdpdGggYSBzaW1wbGUgQVNDSUkt b25seSBkb3duY2FzaW5nLgotCSAqLwotCXdoaWxlICgqbmFtZWEgJiYgKm5hbWViKQotCXsKLQkJ Y2hhcgkJY2hhID0gKm5hbWVhKys7Ci0JCWNoYXIJCWNoYiA9ICpuYW1lYisrOwotCi0JCWlmIChj aGEgPj0gJ0EnICYmIGNoYSA8PSAnWicpCi0JCQljaGEgKz0gJ2EnIC0gJ0EnOwotCQlpZiAoY2hi ID49ICdBJyAmJiBjaGIgPD0gJ1onKQotCQkJY2hiICs9ICdhJyAtICdBJzsKLQkJaWYgKGNoYSAh PSBjaGIpCi0JCQlyZXR1cm4gY2hhIC0gY2hiOwotCX0KLQlpZiAoKm5hbWVhKQotCQlyZXR1cm4g MTsJCQkJLyogYSBpcyBsb25nZXIgKi8KLQlpZiAoKm5hbWViKQotCQlyZXR1cm4gLTE7CQkJCS8q IGIgaXMgbG9uZ2VyICovCi0JcmV0dXJuIDA7Ci19Ci0KLQogLyoKICAqIEluaXRpYWxpemUgR1VD IG9wdGlvbnMgZHVyaW5nIHByb2dyYW0gc3RhcnR1cC4KICAqCkBAIC0xMTM0OCw0ICsxMTMxNiw0 MDIgQEAgY2hlY2tfZGVmYXVsdF93aXRoX29pZHMoYm9vbCAqbmV3dmFsLCB2b2lkICoqZXh0cmEs IEd1Y1NvdXJjZSBzb3VyY2UpCiAJcmV0dXJuIHRydWU7CiB9CiAKLSNpbmNsdWRlICJndWMtZmls ZS5jIgorLyoKKyAqIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIHJlYWQgYW5kIHByb2Nlc3MgdGhlIGNv bmZpZ3VyYXRpb24gZmlsZS4gVGhlCisgKiBwYXJhbWV0ZXIgaW5kaWNhdGVzIGluIHdoYXQgY29u dGV4dCB0aGUgZmlsZSBpcyBiZWluZyByZWFkIC0tLSBlaXRoZXIKKyAqIHBvc3RtYXN0ZXIgc3Rh cnR1cCAoaW5jbHVkaW5nIHN0YW5kYWxvbmUtYmFja2VuZCBzdGFydHVwKSBvciBTSUdIVVAuCisg KiBBbGwgb3B0aW9ucyBtZW50aW9uZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhcmUgc2V0 IHRvIG5ldyB2YWx1ZXMuCisgKiBJZiBhIGhhcmQgZXJyb3Igb2NjdXJzLCBubyB2YWx1ZXMgd2ls bCBiZSBjaGFuZ2VkLiAgKFRoZXJlIGNhbiBhbHNvIGJlCisgKiBlcnJvcnMgdGhhdCBwcmV2ZW50 IGp1c3Qgb25lIHZhbHVlIGZyb20gYmVpbmcgY2hhbmdlZC4pCisgKi8KK3ZvaWQKK1Byb2Nlc3ND b25maWdGaWxlKEd1Y0NvbnRleHQgY29udGV4dCkKK3sKKwlpbnQJCQllbGV2ZWw7CisJTWVtb3J5 Q29udGV4dCBjb25maWdfY3h0OworCU1lbW9yeUNvbnRleHQgY2FsbGVyX2N4dDsKKworCS8qCisJ ICogQ29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQgb24gc3RhcnR1cCAoYnkgdGhlIHBvc3RtYXN0 ZXIgb25seSkgYW5kIG9uCisJICogU0lHSFVQIChieSB0aGUgcG9zdG1hc3RlciBhbmQgaXRzIGNo aWxkcmVuKQorCSAqLworCUFzc2VydCgoY29udGV4dCA9PSBQR0NfUE9TVE1BU1RFUiAmJiAhSXNV bmRlclBvc3RtYXN0ZXIpIHx8CisJCSAgIGNvbnRleHQgPT0gUEdDX1NJR0hVUCk7CisKKwkvKgor CSAqIFRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhlIGxvZywgb25seSB0aGUgcG9zdG1hc3RlciBibGVh dHMgbG91ZGx5IGFib3V0CisJICogcHJvYmxlbXMgd2l0aCB0aGUgY29uZmlnIGZpbGUuCisJICov CisJZWxldmVsID0gSXNVbmRlclBvc3RtYXN0ZXIgPyBERUJVRzIgOiBMT0c7CisKKwkvKgorCSAq IFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgd2l0aGluIGEgcHJvY2Vzcy1saWZlc3Bh biBtZW1vcnkKKwkgKiBjb250ZXh0LiAgVG8gZW5zdXJlIHRoYXQgYW55IG1lbW9yeSBsZWFrZWQg ZHVyaW5nIEdVQyBwcm9jZXNzaW5nIGRvZXMKKwkgKiBub3QgYWNjdW11bGF0ZSBhY3Jvc3MgcmVw ZWF0ZWQgU0lHSFVQIGN5Y2xlcywgZG8gdGhlIHdvcmsgaW4gYSBwcml2YXRlCisJICogY29udGV4 dCB0aGF0IHdlIGNhbiBmcmVlIGF0IGV4aXQuCisJICovCisJY29uZmlnX2N4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgICJjb25maWcg ZmlsZSBwcm9jZXNzaW5nIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwor CWNhbGxlcl9jeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29uZmlnX2N4dCk7CisKKwkvKgor CSAqIFJlYWQgYW5kIGFwcGx5IHRoZSBjb25maWcgZmlsZS4gIFdlIGRvbid0IG5lZWQgdG8gZXhh bWluZSB0aGUgcmVzdWx0LgorCSAqLworCSh2b2lkKSBQcm9jZXNzQ29uZmlnRmlsZUludGVybmFs KGNvbnRleHQsIHRydWUsIGVsZXZlbCk7CisKKwkvKiBDbGVhbiB1cCAqLworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhjYWxsZXJfY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKGNvbmZpZ19jeHQp OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGJvdGggYWN0dWFsIGNvbmZpZyBm aWxlIChyZSlsb2FkcyBhbmQgZXhlY3V0aW9uIG9mCisgKiBzaG93X2FsbF9maWxlX3NldHRpbmdz KCkgKGkuZS4sIHRoZSBwZ19maWxlX3NldHRpbmdzIHZpZXcpLiAgSW4gdGhlIGxhdHRlcgorICog Y2FzZSB3ZSBkb24ndCBhcHBseSBhbnkgb2YgdGhlIHNldHRpbmdzLCBidXQgd2UgbWFrZSBhbGwg dGhlIHVzdWFsIHZhbGlkaXR5CisgKiBjaGVja3MsIGFuZCB3ZSByZXR1cm4gdGhlIENvbmZpZ1Zh cmlhYmxlIGxpc3Qgc28gdGhhdCBpdCBjYW4gYmUgcHJpbnRlZCBvdXQKKyAqIGJ5IHNob3dfYWxs X2ZpbGVfc2V0dGluZ3MoKS4KKyAqLworc3RhdGljIENvbmZpZ1ZhcmlhYmxlICoKK1Byb2Nlc3ND b25maWdGaWxlSW50ZXJuYWwoR3VjQ29udGV4dCBjb250ZXh0LCBib29sIGFwcGx5U2V0dGluZ3Ms IGludCBlbGV2ZWwpCit7CisJYm9vbAkJZXJyb3IgPSBmYWxzZTsKKwlib29sCQlhcHBseWluZyA9 IGZhbHNlOworCWNvbnN0IGNoYXIgKkNvbmZGaWxlV2l0aEVycm9yOworCUNvbmZpZ1ZhcmlhYmxl ICppdGVtLAorCQkJICAgKmhlYWQsCisJCQkgICAqdGFpbDsKKwlpbnQJCQlpOworCisJLyogUGFy c2UgdGhlIG1haW4gY29uZmlnIGZpbGUgaW50byBhIGxpc3Qgb2Ygb3B0aW9uIG5hbWVzIGFuZCB2 YWx1ZXMgKi8KKwlDb25mRmlsZVdpdGhFcnJvciA9IENvbmZpZ0ZpbGVOYW1lOworCWhlYWQgPSB0 YWlsID0gTlVMTDsKKworCWlmICghUGFyc2VDb25maWdGaWxlKENvbmZpZ0ZpbGVOYW1lLCB0cnVl LAorCQkJCQkJIE5VTEwsIDAsIDAsIGVsZXZlbCwKKwkJCQkJCSAmaGVhZCwgJnRhaWwpKQorCXsK KwkJLyogU3ludGF4IGVycm9yKHMpIGRldGVjdGVkIGluIHRoZSBmaWxlLCBzbyBiYWlsIG91dCAq LworCQllcnJvciA9IHRydWU7CisJCWdvdG8gYmFpbF9vdXQ7CisJfQorCisJLyoKKwkgKiBQYXJz ZSB0aGUgUEdfQVVUT0NPTkZfRklMRU5BTUUgZmlsZSwgaWYgcHJlc2VudCwgYWZ0ZXIgdGhlIG1h aW4gZmlsZSB0bworCSAqIHJlcGxhY2UgYW55IHBhcmFtZXRlcnMgc2V0IGJ5IEFMVEVSIFNZU1RF TSBjb21tYW5kLiAgQmVjYXVzZSB0aGlzIGZpbGUKKwkgKiBpcyBpbiB0aGUgZGF0YSBkaXJlY3Rv cnksIHdlIGNhbid0IHJlYWQgaXQgdW50aWwgdGhlIERhdGFEaXIgaGFzIGJlZW4KKwkgKiBzZXQu CisJICovCisJaWYgKERhdGFEaXIpCisJeworCQlpZiAoIVBhcnNlQ29uZmlnRmlsZShQR19BVVRP Q09ORl9GSUxFTkFNRSwgZmFsc2UsCisJCQkJCQkJIE5VTEwsIDAsIDAsIGVsZXZlbCwKKwkJCQkJ CQkgJmhlYWQsICZ0YWlsKSkKKwkJeworCQkJLyogU3ludGF4IGVycm9yKHMpIGRldGVjdGVkIGlu IHRoZSBmaWxlLCBzbyBiYWlsIG91dCAqLworCQkJZXJyb3IgPSB0cnVlOworCQkJQ29uZkZpbGVX aXRoRXJyb3IgPSBQR19BVVRPQ09ORl9GSUxFTkFNRTsKKwkJCWdvdG8gYmFpbF9vdXQ7CisJCX0K Kwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogSWYgRGF0YURpciBpcyBub3Qgc2V0LCB0aGUgUEdf QVVUT0NPTkZfRklMRU5BTUUgZmlsZSBjYW5ub3QgYmUKKwkJICogcmVhZC4gIEluIHRoaXMgY2Fz ZSwgd2UgZG9uJ3Qgd2FudCB0byBhY2NlcHQgYW55IHNldHRpbmdzIGJ1dAorCQkgKiBkYXRhX2Rp cmVjdG9yeSBmcm9tIHBvc3RncmVzcWwuY29uZiwgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlCisJCSAq IG92ZXJ3cml0dGVuIHdpdGggc2V0dGluZ3MgaW4gdGhlIFBHX0FVVE9DT05GX0ZJTEVOQU1FIGZp bGUgd2hpY2gKKwkJICogd2lsbCBiZSByZWFkIGxhdGVyLiBPVE9ILCBzaW5jZSBkYXRhX2RpcmVj dG9yeSBpc24ndCBhbGxvd2VkIGluIHRoZQorCQkgKiBQR19BVVRPQ09ORl9GSUxFTkFNRSBmaWxl LCBpdCB3aWxsIG5ldmVyIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorCQkgKi8KKwkJQ29uZmlnVmFy aWFibGUgKm5ld2xpc3QgPSBOVUxMOworCisJCS8qCisJCSAqIFBydW5lIGFsbCBpdGVtcyBleGNl cHQgdGhlIGxhc3QgImRhdGFfZGlyZWN0b3J5IiBmcm9tIHRoZSBsaXN0LgorCQkgKi8KKwkJZm9y IChpdGVtID0gaGVhZDsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpCisJCXsKKwkJCWlmICghaXRl bS0+aWdub3JlICYmCisJCQkJc3RyY21wKGl0ZW0tPm5hbWUsICJkYXRhX2RpcmVjdG9yeSIpID09 IDApCisJCQkJbmV3bGlzdCA9IGl0ZW07CisJCX0KKworCQlpZiAobmV3bGlzdCkKKwkJCW5ld2xp c3QtPm5leHQgPSBOVUxMOworCQloZWFkID0gdGFpbCA9IG5ld2xpc3Q7CisKKwkJLyoKKwkJICog UXVpY2sgZXhpdCBpZiBkYXRhX2RpcmVjdG9yeSBpcyBub3QgcHJlc2VudCBpbiBmaWxlLgorCQkg KgorCQkgKiBXZSBuZWVkIG5vdCBkbyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLCBpbiBwYXJ0aWN1 bGFyIHdlIGRvbid0IHNldAorCQkgKiBQZ1JlbG9hZFRpbWU7IHRoYXQgd2lsbCBiZSBzZXQgc29v biBieSBzdWJzZXF1ZW50IGZ1bGwgbG9hZGluZyBvZgorCQkgKiB0aGUgY29uZmlnIGZpbGUuCisJ CSAqLworCQlpZiAoaGVhZCA9PSBOVUxMKQorCQkJZ290byBiYWlsX291dDsKKwl9CisKKwkvKgor CSAqIE1hcmsgYWxsIGV4dGFudCBHVUMgdmFyaWFibGVzIGFzIG5vdCBwcmVzZW50IGluIHRoZSBj b25maWcgZmlsZS4gV2UKKwkgKiBuZWVkIHRoaXMgc28gdGhhdCB3ZSBjYW4gdGVsbCBiZWxvdyB3 aGljaCBvbmVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20KKwkgKiB0aGUgZmlsZSBzaW5jZSB3ZSBs YXN0IHByb2Nlc3NlZCBpdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2d1Y192YXJpYWJs ZXM7IGkrKykKKwl7CisJCXN0cnVjdCBjb25maWdfZ2VuZXJpYyAqZ2NvbmYgPSBndWNfdmFyaWFi bGVzW2ldOworCisJCWdjb25mLT5zdGF0dXMgJj0gfkdVQ19JU19JTl9GSUxFOworCX0KKworCS8q CisJICogQ2hlY2sgaWYgYWxsIHRoZSBzdXBwbGllZCBvcHRpb24gbmFtZXMgYXJlIHZhbGlkLCBh cyBhbiBhZGRpdGlvbmFsCisJICogcXVhc2ktc3ludGFjdGljIGNoZWNrIG9uIHRoZSB2YWxpZGl0 eSBvZiB0aGUgY29uZmlnIGZpbGUuICBJdCBpcworCSAqIGltcG9ydGFudCB0aGF0IHRoZSBwb3N0 bWFzdGVyIGFuZCBhbGwgYmFja2VuZHMgYWdyZWUgb24gdGhlIHJlc3VsdHMgb2YKKwkgKiB0aGlz IHBoYXNlLCBlbHNlIHdlIHdpbGwgaGF2ZSBzdHJhbmdlIGluY29uc2lzdGVuY2llcyBhYm91dCB3 aGljaAorCSAqIHByb2Nlc3NlcyBhY2NlcHQgYSBjb25maWcgZmlsZSB1cGRhdGUgYW5kIHdoaWNo IGRvbid0LiAgSGVuY2UsIHVua25vd24KKwkgKiBjdXN0b20gdmFyaWFibGUgbmFtZXMgaGF2ZSB0 byBiZSBhY2NlcHRlZCB3aXRob3V0IGNvbXBsYWludC4gIEZvciB0aGUKKwkgKiBzYW1lIHJlYXNv biwgd2UgZG9uJ3QgYXR0ZW1wdCB0byB2YWxpZGF0ZSB0aGUgb3B0aW9ucycgdmFsdWVzIGhlcmUu CisJICoKKwkgKiBJbiBhZGRpdGlvbiwgdGhlIEdVQ19JU19JTl9GSUxFIGZsYWcgaXMgc2V0IG9u IGVhY2ggZXhpc3RpbmcgR1VDCisJICogdmFyaWFibGUgbWVudGlvbmVkIGluIHRoZSBmaWxlOyBh bmQgd2UgZGV0ZWN0IGR1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZQorCSAqIGZpbGUgYW5kIG1hcmsg dGhlIGVhcmxpZXIgb2NjdXJyZW5jZXMgYXMgaWdub3JhYmxlLgorCSAqLworCWZvciAoaXRlbSA9 IGhlYWQ7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KQorCXsKKwkJc3RydWN0IGNvbmZpZ19nZW5l cmljICpyZWNvcmQ7CisKKwkJLyogSWdub3JlIGFueXRoaW5nIGFscmVhZHkgbWFya2VkIGFzIGln bm9yYWJsZSAqLworCQlpZiAoaXRlbS0+aWdub3JlKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogVHJ5IHRvIGZpbmQgdGhlIHZhcmlhYmxlOyBidXQgZG8gbm90IGNyZWF0ZSBhIGN1c3RvbSBw bGFjZWhvbGRlciBpZgorCQkgKiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5LgorCQkgKi8KKwkJcmVj b3JkID0gZmluZF9vcHRpb24oaXRlbS0+bmFtZSwgZmFsc2UsIGVsZXZlbCk7CisKKwkJaWYgKHJl Y29yZCkKKwkJeworCQkJLyogSWYgaXQncyBhbHJlYWR5IG1hcmtlZCwgdGhlbiB0aGlzIGlzIGEg ZHVwbGljYXRlIGVudHJ5ICovCisJCQlpZiAocmVjb3JkLT5zdGF0dXMgJiBHVUNfSVNfSU5fRklM RSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIE1hcmsgdGhlIGVhcmxpZXIgb2NjdXJyZW5jZShzKSBh cyBkZWFkL2lnbm9yYWJsZS4gIFdlIGNvdWxkCisJCQkJICogYXZvaWQgdGhlIE8oTl4yKSBiZWhh dmlvciBoZXJlIHdpdGggc29tZSBhZGRpdGlvbmFsIHN0YXRlLAorCQkJCSAqIGJ1dCBpdCBzZWVt cyB1bmxpa2VseSB0byBiZSB3b3J0aCB0aGUgdHJvdWJsZS4KKwkJCQkgKi8KKwkJCQlDb25maWdW YXJpYWJsZSAqcGl0ZW07CisKKwkJCQlmb3IgKHBpdGVtID0gaGVhZDsgcGl0ZW0gIT0gaXRlbTsg cGl0ZW0gPSBwaXRlbS0+bmV4dCkKKwkJCQl7CisJCQkJCWlmICghcGl0ZW0tPmlnbm9yZSAmJgor CQkJCQkJc3RyY21wKHBpdGVtLT5uYW1lLCBpdGVtLT5uYW1lKSA9PSAwKQorCQkJCQkJcGl0ZW0t Pmlnbm9yZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJLyogTm93IG1hcmsgaXQgYXMgcHJlc2Vu dCBpbiBmaWxlICovCisJCQlyZWNvcmQtPnN0YXR1cyB8PSBHVUNfSVNfSU5fRklMRTsKKwkJfQor CQllbHNlIGlmIChzdHJjaHIoaXRlbS0+bmFtZSwgR1VDX1FVQUxJRklFUl9TRVBBUkFUT1IpID09 IE5VTEwpCisJCXsKKwkJCS8qIEludmFsaWQgbm9uLWN1c3RvbSB2YXJpYWJsZSwgc28gY29tcGxh aW4gKi8KKwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5F RF9PQkpFQ1QpLAorCQkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgY29uZmlndXJhdGlvbiBwYXJh bWV0ZXIgXCIlc1wiIGluIGZpbGUgXCIlc1wiIGxpbmUgJXUiLAorCQkJCQkJCWl0ZW0tPm5hbWUs CisJCQkJCQkJaXRlbS0+ZmlsZW5hbWUsIGl0ZW0tPnNvdXJjZWxpbmUpKSk7CisJCQlpdGVtLT5l cnJtc2cgPSBwc3RyZHVwKCJ1bnJlY29nbml6ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIiKTsK KwkJCWVycm9yID0gdHJ1ZTsKKwkJCUNvbmZGaWxlV2l0aEVycm9yID0gaXRlbS0+ZmlsZW5hbWU7 CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlJ3ZlIGRldGVjdGVkIGFueSBlcnJvcnMgc28gZmFy LCB3ZSBkb24ndCB3YW50IHRvIHJpc2sgYXBwbHlpbmcgYW55CisJICogY2hhbmdlcy4KKwkgKi8K KwlpZiAoZXJyb3IpCisJCWdvdG8gYmFpbF9vdXQ7CisKKwkvKiBPdGhlcndpc2UsIHNldCBmbGFn IHRoYXQgd2UncmUgYmVnaW5uaW5nIHRvIGFwcGx5IGNoYW5nZXMgKi8KKwlhcHBseWluZyA9IHRy dWU7CisKKwkvKgorCSAqIENoZWNrIGZvciB2YXJpYWJsZXMgaGF2aW5nIGJlZW4gcmVtb3ZlZCBm cm9tIHRoZSBjb25maWcgZmlsZSwgYW5kCisJICogcmV2ZXJ0IHRoZWlyIHJlc2V0IHZhbHVlcyAo YW5kIHBlcmhhcHMgYWxzbyBlZmZlY3RpdmUgdmFsdWVzKSB0byB0aGUKKwkgKiBib290LXRpbWUg ZGVmYXVsdHMuICBJZiBzdWNoIGEgdmFyaWFibGUgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlciBzdGFy dHVwLAorCSAqIHJlcG9ydCB0aGF0IGFuZCBjb250aW51ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2d1Y192YXJpYWJsZXM7IGkrKykKKwl7CisJCXN0cnVjdCBjb25maWdfZ2VuZXJpYyAq Z2NvbmYgPSBndWNfdmFyaWFibGVzW2ldOworCQlHdWNTdGFjayAgICpzdGFjazsKKworCQlpZiAo Z2NvbmYtPnJlc2V0X3NvdXJjZSAhPSBQR0NfU19GSUxFIHx8CisJCQkoZ2NvbmYtPnN0YXR1cyAm IEdVQ19JU19JTl9GSUxFKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZ2NvbmYtPmNvbnRleHQgPCBQ R0NfU0lHSFVQKQorCQl7CisJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9DQU5UX0NIQU5HRV9SVU5USU1FX1BBUkFNKSwKKwkJCQkJIGVycm1zZygicGFyYW1ldGVyIFwi JXNcIiBjYW5ub3QgYmUgY2hhbmdlZCB3aXRob3V0IHJlc3RhcnRpbmcgdGhlIHNlcnZlciIsCisJ CQkJCQkJZ2NvbmYtPm5hbWUpKSk7CisJCQlyZWNvcmRfY29uZmlnX2ZpbGVfZXJyb3IocHNwcmlu dGYoInBhcmFtZXRlciBcIiVzXCIgY2Fubm90IGJlIGNoYW5nZWQgd2l0aG91dCByZXN0YXJ0aW5n IHRoZSBzZXJ2ZXIiLAorCQkJCQkJCQkJCQkgIGdjb25mLT5uYW1lKSwKKwkJCQkJCQkJCSBOVUxM LCAwLAorCQkJCQkJCQkJICZoZWFkLCAmdGFpbCk7CisJCQllcnJvciA9IHRydWU7CisJCQljb250 aW51ZTsKKwkJfQorCisJCS8qIE5vIG1vcmUgdG8gZG8gaWYgd2UncmUganVzdCBkb2luZyBzaG93 X2FsbF9maWxlX3NldHRpbmdzKCkgKi8KKwkJaWYgKCFhcHBseVNldHRpbmdzKQorCQkJY29udGlu dWU7CisKKwkJLyoKKwkJICogUmVzZXQgYW55ICJmaWxlIiBzb3VyY2VzIHRvICJkZWZhdWx0Iiwg ZWxzZSBzZXRfY29uZmlnX29wdGlvbiB3aWxsCisJCSAqIG5vdCBvdmVycmlkZSB0aG9zZSBzZXR0 aW5ncy4KKwkJICovCisJCWlmIChnY29uZi0+cmVzZXRfc291cmNlID09IFBHQ19TX0ZJTEUpCisJ CQlnY29uZi0+cmVzZXRfc291cmNlID0gUEdDX1NfREVGQVVMVDsKKwkJaWYgKGdjb25mLT5zb3Vy Y2UgPT0gUEdDX1NfRklMRSkKKwkJCWdjb25mLT5zb3VyY2UgPSBQR0NfU19ERUZBVUxUOworCQlm b3IgKHN0YWNrID0gZ2NvbmYtPnN0YWNrOyBzdGFjazsgc3RhY2sgPSBzdGFjay0+cHJldikKKwkJ eworCQkJaWYgKHN0YWNrLT5zb3VyY2UgPT0gUEdDX1NfRklMRSkKKwkJCQlzdGFjay0+c291cmNl ID0gUEdDX1NfREVGQVVMVDsKKwkJfQorCisJCS8qIE5vdyB3ZSBjYW4gcmUtYXBwbHkgdGhlIHdp cmVkLWluIGRlZmF1bHQgKGkuZS4sIHRoZSBib290X3ZhbCkgKi8KKwkJaWYgKHNldF9jb25maWdf b3B0aW9uKGdjb25mLT5uYW1lLCBOVUxMLAorCQkJCQkJCSAgY29udGV4dCwgUEdDX1NfREVGQVVM VCwKKwkJCQkJCQkgIEdVQ19BQ1RJT05fU0VULCB0cnVlLCAwLCBmYWxzZSkgPiAwKQorCQl7CisJ CQkvKiBMb2cgdGhlIGNoYW5nZSBpZiBhcHByb3ByaWF0ZSAqLworCQkJaWYgKGNvbnRleHQgPT0g UEdDX1NJR0hVUCkKKwkJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJCShlcnJtc2coInBhcmFtZXRl ciBcIiVzXCIgcmVtb3ZlZCBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZSwgcmVzZXQgdG8gZGVmYXVs dCIsCisJCQkJCQkJCWdjb25mLT5uYW1lKSkpOworCQl9CisJfQorCisJLyoKKwkgKiBSZXN0b3Jl IGFueSB2YXJpYWJsZXMgZGV0ZXJtaW5lZCBieSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IKKwkg KiBkeW5hbWljYWxseS1jb21wdXRlZCBkZWZhdWx0cy4gIFRoaXMgaXMgYSBuby1vcCBleGNlcHQg aW4gdGhlIGNhc2UKKwkgKiB3aGVyZSBvbmUgb2YgdGhlc2UgaGFkIGJlZW4gaW4gdGhlIGNvbmZp ZyBmaWxlIGFuZCBpcyBub3cgcmVtb3ZlZC4KKwkgKgorCSAqIEluIHBhcnRpY3VsYXIsIHdlICpt dXN0IG5vdCogZG8gdGhpcyBkdXJpbmcgdGhlIHBvc3RtYXN0ZXIncyBpbml0aWFsCisJICogbG9h ZGluZyBvZiB0aGUgZmlsZSwgc2luY2UgdGhlIHRpbWV6b25lIGZ1bmN0aW9ucyBpbiBwYXJ0aWN1 bGFyIHNob3VsZAorCSAqIGJlIHJ1biBvbmx5IGFmdGVyIGluaXRpYWxpemF0aW9uIGlzIGNvbXBs ZXRlLgorCSAqCisJICogWFhYIHRoaXMgaXMgYW4gdW5tYWludGFpbmFibGUgY3JvY2ssIGJlY2F1 c2Ugd2UgaGF2ZSB0byBrbm93IGhvdyB0byBzZXQKKwkgKiAob3IgYXQgbGVhc3Qgd2hhdCB0byBj YWxsIHRvIHNldCkgZXZlcnkgdmFyaWFibGUgdGhhdCBjb3VsZCBwb3RlbnRpYWxseQorCSAqIGhh dmUgUEdDX1NfRFlOQU1JQ19ERUZBVUxUIG9yIFBHQ19TX0VOVl9WQVIgc291cmNlLiBIb3dldmVy LCB0aGVyZSdzIG5vCisJICogdGltZSB0byByZWRlc2lnbiBpdCBmb3IgOS4xLgorCSAqLworCWlm IChjb250ZXh0ID09IFBHQ19TSUdIVVAgJiYgYXBwbHlTZXR0aW5ncykKKwl7CisJCUluaXRpYWxp emVHVUNPcHRpb25zRnJvbUVudmlyb25tZW50KCk7CisJCXBnX3RpbWV6b25lX2FiYnJldl9pbml0 aWFsaXplKCk7CisJCS8qIHRoaXMgc2VsZWN0cyBTUUxfQVNDSUkgaW4gcHJvY2Vzc2VzIG5vdCBj b25uZWN0ZWQgdG8gYSBkYXRhYmFzZSAqLworCQlTZXRDb25maWdPcHRpb24oImNsaWVudF9lbmNv ZGluZyIsIEdldERhdGFiYXNlRW5jb2RpbmdOYW1lKCksCisJCQkJCQlQR0NfQkFDS0VORCwgUEdD X1NfRFlOQU1JQ19ERUZBVUxUKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhcHBseSB0aGUgdmFsdWVz IGZyb20gdGhlIGNvbmZpZyBmaWxlLgorCSAqLworCWZvciAoaXRlbSA9IGhlYWQ7IGl0ZW07IGl0 ZW0gPSBpdGVtLT5uZXh0KQorCXsKKwkJY2hhcgkgICAqcHJlX3ZhbHVlID0gTlVMTDsKKwkJaW50 CQkJc2NyZXM7CisKKwkJLyogSWdub3JlIGFueXRoaW5nIG1hcmtlZCBhcyBpZ25vcmFibGUgKi8K KwkJaWYgKGl0ZW0tPmlnbm9yZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEluIFNJR0hVUCBjYXNl cyBpbiB0aGUgcG9zdG1hc3Rlciwgd2Ugd2FudCB0byByZXBvcnQgY2hhbmdlcyAqLworCQlpZiAo Y29udGV4dCA9PSBQR0NfU0lHSFVQICYmIGFwcGx5U2V0dGluZ3MgJiYgIUlzVW5kZXJQb3N0bWFz dGVyKQorCQl7CisJCQljb25zdCBjaGFyICpwcmV2YWwgPSBHZXRDb25maWdPcHRpb24oaXRlbS0+ bmFtZSwgdHJ1ZSwgZmFsc2UpOworCisJCQkvKiBJZiBvcHRpb24gZG9lc24ndCBleGlzdCB5ZXQg b3IgaXMgTlVMTCwgdHJlYXQgYXMgZW1wdHkgc3RyaW5nICovCisJCQlpZiAoIXByZXZhbCkKKwkJ CQlwcmV2YWwgPSAiIjsKKwkJCS8qIG11c3QgZHVwLCBlbHNlIG1pZ2h0IGhhdmUgZGFuZ2xpbmcg cG9pbnRlciBiZWxvdyAqLworCQkJcHJlX3ZhbHVlID0gcHN0cmR1cChwcmV2YWwpOworCQl9CisK KwkJc2NyZXMgPSBzZXRfY29uZmlnX29wdGlvbihpdGVtLT5uYW1lLCBpdGVtLT52YWx1ZSwKKwkJ CQkJCQkJICBjb250ZXh0LCBQR0NfU19GSUxFLAorCQkJCQkJCQkgIEdVQ19BQ1RJT05fU0VULCBh cHBseVNldHRpbmdzLCAwLCBmYWxzZSk7CisJCWlmIChzY3JlcyA+IDApCisJCXsKKwkJCS8qIHZh cmlhYmxlIHdhcyB1cGRhdGVkLCBzbyBsb2cgdGhlIGNoYW5nZSBpZiBhcHByb3ByaWF0ZSAqLwor CQkJaWYgKHByZV92YWx1ZSkKKwkJCXsKKwkJCQljb25zdCBjaGFyICpwb3N0X3ZhbHVlID0gR2V0 Q29uZmlnT3B0aW9uKGl0ZW0tPm5hbWUsIHRydWUsIGZhbHNlKTsKKworCQkJCWlmICghcG9zdF92 YWx1ZSkKKwkJCQkJcG9zdF92YWx1ZSA9ICIiOworCQkJCWlmIChzdHJjbXAocHJlX3ZhbHVlLCBw b3N0X3ZhbHVlKSAhPSAwKQorCQkJCQllcmVwb3J0KGVsZXZlbCwKKwkJCQkJCQkoZXJybXNnKCJw YXJhbWV0ZXIgXCIlc1wiIGNoYW5nZWQgdG8gXCIlc1wiIiwKKwkJCQkJCQkJCWl0ZW0tPm5hbWUs IGl0ZW0tPnZhbHVlKSkpOworCQkJfQorCQkJaXRlbS0+YXBwbGllZCA9IHRydWU7CisJCX0KKwkJ ZWxzZSBpZiAoc2NyZXMgPT0gMCkKKwkJeworCQkJZXJyb3IgPSB0cnVlOworCQkJaXRlbS0+ZXJy bXNnID0gcHN0cmR1cCgic2V0dGluZyBjb3VsZCBub3QgYmUgYXBwbGllZCIpOworCQkJQ29uZkZp bGVXaXRoRXJyb3IgPSBpdGVtLT5maWxlbmFtZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIG5v IGVycm9yLCBidXQgdmFyaWFibGUncyBhY3RpdmUgdmFsdWUgd2FzIG5vdCBjaGFuZ2VkICovCisJ CQlpdGVtLT5hcHBsaWVkID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIHNob3VsZCB1cGRh dGUgc291cmNlIGxvY2F0aW9uIHVubGVzcyB0aGVyZSB3YXMgYW4gZXJyb3IsIHNpbmNlCisJCSAq IGV2ZW4gaWYgdGhlIGFjdGl2ZSB2YWx1ZSBkaWRuJ3QgY2hhbmdlLCB0aGUgcmVzZXQgdmFsdWUg bWlnaHQgaGF2ZS4KKwkJICogKEluIHRoZSBwb3N0bWFzdGVyLCB0aGVyZSB3b24ndCBiZSBhIGRp ZmZlcmVuY2UsIGJ1dCBpdCBkb2VzIG1hdHRlcgorCQkgKiBpbiBiYWNrZW5kcy4pCisJCSAqLwor CQlpZiAoc2NyZXMgIT0gMCAmJiBhcHBseVNldHRpbmdzKQorCQkJc2V0X2NvbmZpZ19zb3VyY2Vm aWxlKGl0ZW0tPm5hbWUsIGl0ZW0tPmZpbGVuYW1lLAorCQkJCQkJCQkgIGl0ZW0tPnNvdXJjZWxp bmUpOworCisJCWlmIChwcmVfdmFsdWUpCisJCQlwZnJlZShwcmVfdmFsdWUpOworCX0KKworCS8q IFJlbWVtYmVyIHdoZW4gd2UgbGFzdCBzdWNjZXNzZnVsbHkgbG9hZGVkIHRoZSBjb25maWcgZmls ZS4gKi8KKwlpZiAoYXBwbHlTZXR0aW5ncykKKwkJUGdSZWxvYWRUaW1lID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOworCitiYWlsX291dDoKKwlpZiAoZXJyb3IgJiYgYXBwbHlTZXR0aW5ncykKKwl7 CisJCS8qIER1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAsIGFueSBlcnJvciBpcyBmYXRhbCAqLwor CQlpZiAoY29udGV4dCA9PSBQR0NfUE9TVE1BU1RFUikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfQ09ORklHX0ZJTEVfRVJST1IpLAorCQkJCQkgZXJybXNnKCJjb25m aWd1cmF0aW9uIGZpbGUgXCIlc1wiIGNvbnRhaW5zIGVycm9ycyIsCisJCQkJCQkJQ29uZkZpbGVX aXRoRXJyb3IpKSk7CisJCWVsc2UgaWYgKGFwcGx5aW5nKQorCQkJZXJlcG9ydChlbGV2ZWwsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHX0ZJTEVfRVJST1IpLAorCQkJCQkgZXJybXNnKCJj b25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIGNvbnRhaW5zIGVycm9yczsgdW5hZmZlY3RlZCBjaGFu Z2VzIHdlcmUgYXBwbGllZCIsCisJCQkJCQkJQ29uZkZpbGVXaXRoRXJyb3IpKSk7CisJCWVsc2UK KwkJCWVyZXBvcnQoZWxldmVsLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTkZJR19GSUxFX0VS Uk9SKSwKKwkJCQkJIGVycm1zZygiY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiBjb250YWlucyBl cnJvcnM7IG5vIGNoYW5nZXMgd2VyZSBhcHBsaWVkIiwKKwkJCQkJCQlDb25mRmlsZVdpdGhFcnJv cikpKTsKKwl9CisKKwkvKiBTdWNjZXNzZnVsIG9yIG90aGVyd2lzZSwgcmV0dXJuIHRoZSBjb2xs ZWN0ZWQgZGF0YSBsaXN0ICovCisJcmV0dXJuIGhlYWQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX3Jld2luZC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfcmV3aW5kL01ha2VmaWxlCmluZGV4IDA0 ZjNiOGY1MjAuLjY1ZWJmM2M3OGMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmV3aW5kL01ha2Vm aWxlCisrKyBiL3NyYy9iaW4vcGdfcmV3aW5kL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBAIHN1 YmRpciA9IHNyYy9iaW4vcGdfcmV3aW5kCiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1vdmVycmlkZSBDUFBGTEFH UyA6PSAtSSQobGlicHFfc3JjZGlyKSAtREZST05URU5EICQoQ1BQRkxBR1MpCitvdmVycmlkZSBD UFBGTEFHUyA6PSAtSS4gLUkkKHNyY2RpcikgLUkkKGxpYnBxX3NyY2RpcikgLURGUk9OVEVORCAk KENQUEZMQUdTKQogTERGTEFHU19JTlRFUk5BTCArPSAkKGxpYnBxX3BncG9ydCkKIAogT0JKUwk9 IHBnX3Jld2luZC5vIHBhcnNleGxvZy5vIHhsb2dyZWFkZXIubyBkYXRhcGFnZW1hcC5vIHRpbWVs aW5lLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXdpbmQvUmV3aW5kVGVzdC5wbSBiL3Ny Yy9iaW4vcGdfcmV3aW5kL1Jld2luZFRlc3QucG0KaW5kZXggODVjYWU3ZTQ3Yi4uYjA3Y2EzNjE3 ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQvUmV3aW5kVGVzdC5wbQorKysgYi9zcmMv YmluL3BnX3Jld2luZC9SZXdpbmRUZXN0LnBtCkBAIC0zOSw3ICszOSw5IEBAIHVzZSBDYXJwOwog dXNlIENvbmZpZzsKIHVzZSBFeHBvcnRlciAnaW1wb3J0JzsKIHVzZSBGaWxlOjpDb3B5OwotdXNl IEZpbGU6OlBhdGggcXcocm10cmVlKTsKK3VzZSBGaWxlOjpHbG9iICc6YnNkX2dsb2InOwordXNl IEZpbGU6OlBhdGggcXcocmVtb3ZlX3RyZWUgbWFrZV9wYXRoKTsKK3VzZSBGaWxlOjpTcGVjOjpG dW5jdGlvbnMgcXcoY2F0cGF0aCBjYXRmaWxlKTsKIHVzZSBJUEM6OlJ1biBxdyhydW4pOwogdXNl IFBvc3RncmVzTm9kZTsKIHVzZSBUZXN0TGliOwpAQCAtMjQ5LDYgKzI1MSw5OCBAQCBzdWIgcnVu X3BnX3Jld2luZAogCQkJXSwKIAkJCSdwZ19yZXdpbmQgcmVtb3RlJyk7CiAJfQorCWVsc2lmICgk dGVzdF9tb2RlIGVxICJhcmNoaXZlIikKKwl7CisKKwkJIyBEbyByZXdpbmQgdXNpbmcgYSBsb2Nh bCBwZ2RhdGEgYXMgc291cmNlIGFuZAorCQkjIHNwZWNpZmllZCBkaXJlY3Rvcnkgd2l0aCB0YXJn ZXQgV0FMcyBhcmNoaXZlLgorCQlteSAkd2Fsc19hcmNoaXZlX2RpciA9IGNhdHBhdGgoJHtUZXN0 TGliOjp0bXBfY2hlY2t9LCAnbWFzdGVyX3dhbHNfYXJjaGl2ZScpOworCQlteSBAd2FsX2ZpbGVz ID0gYnNkX2dsb2IgY2F0cGF0aCgkbWFzdGVyX3BnZGF0YSwgJ3BnX3dhbCcsICcwMDAwMDAwKicp OworCQlteSAkcmVzdG9yZV9jb21tYW5kOworCisJCXJlbW92ZV90cmVlKCR3YWxzX2FyY2hpdmVf ZGlyKTsKKwkJbWFrZV9wYXRoKCR3YWxzX2FyY2hpdmVfZGlyKSBvciBkaWU7CisKKwkJIyBNb3Zl IGFsbCBvbGQgbWFzdGVyIFdBTCBmaWxlcyB0byB0aGUgYXJjaGl2ZS4KKwkJIyBPbGQgbWFzdGVy IHNob3VsZCBiZSBzdG9wcGVkIGF0IHRoaXMgcG9pbnQuCisJCWZvcmVhY2ggbXkgJHdhbF9maWxl IChAd2FsX2ZpbGVzKQorCQl7CisJCQltb3ZlKCR3YWxfZmlsZSwgIiR3YWxzX2FyY2hpdmVfZGly Iikgb3IgZGllOworCQl9CisKKwkJaWYgKCR3aW5kb3dzX29zKQorCQl7CisJCQkkcmVzdG9yZV9j b21tYW5kID0gImNvcHkgJHdhbHNfYXJjaGl2ZV9kaXJcXFwlZiBcJXAiOworCQl9CisJCWVsc2UK KwkJeworCQkJJHJlc3RvcmVfY29tbWFuZCA9ICJjcCAkd2Fsc19hcmNoaXZlX2Rpci9cJWYgXCVw IjsKKwkJfQorCisJCSMgU3RvcCB0aGUgbmV3IG1hc3RlciBhbmQgYmUgcmVhZHkgdG8gcGVyZm9y bSB0aGUgcmV3aW5kLgorCQkkbm9kZV9zdGFuZGJ5LT5zdG9wOworCQljb21tYW5kX29rKAorCQkJ WworCQkJCSdwZ19yZXdpbmQnLAorCQkJCSItLWRlYnVnIiwKKwkJCQkiLS1zb3VyY2UtcGdkYXRh PSRzdGFuZGJ5X3BnZGF0YSIsCisJCQkJIi0tdGFyZ2V0LXBnZGF0YT0kbWFzdGVyX3BnZGF0YSIs CisJCQkJIi0tbm8tc3luYyIsCisJCQkJIi0tcmVzdG9yZS1jb21tYW5kPSRyZXN0b3JlX2NvbW1h bmQiCisJCQldLAorCQkJJ3BnX3Jld2luZCBhcmNoaXZlJyk7CisJfQorCWVsc2lmICgkdGVzdF9t b2RlIGVxICJhcmNoaXZlX2NvbmYiKQorCXsKKworCQkjIERvIHJld2luZCB1c2luZyBhIGxvY2Fs IHBnZGF0YSBhcyBzb3VyY2UgYW5kCisJCSMgc3BlY2lmaWVkIGRpcmVjdG9yeSB3aXRoIHRhcmdl dCBXQUxzIGFyY2hpdmUuCisJCW15ICR3YWxzX2FyY2hpdmVfZGlyID0gY2F0cGF0aCgke1Rlc3RM aWI6OnRtcF9jaGVja30sICdtYXN0ZXJfd2Fsc19hcmNoaXZlJyk7CisJCW15IEB3YWxfZmlsZXMg PSBic2RfZ2xvYiBjYXRwYXRoKCRtYXN0ZXJfcGdkYXRhLCAncGdfd2FsJywgJzAwMDAwMDAqJyk7 CisJCW15ICRtYXN0ZXJfY29uZl9wYXRoID0gY2F0ZmlsZSgkbWFzdGVyX3BnZGF0YSwgJ3Bvc3Rn cmVzcWwuY29uZicpOworCQlteSAkcmVzdG9yZV9jb21tYW5kOworCisJCXJlbW92ZV90cmVlKCR3 YWxzX2FyY2hpdmVfZGlyKTsKKwkJbWFrZV9wYXRoKCR3YWxzX2FyY2hpdmVfZGlyKSBvciBkaWU7 CisKKwkJIyBNb3ZlIGFsbCBvbGQgbWFzdGVyIFdBTCBmaWxlcyB0byB0aGUgYXJjaGl2ZS4KKwkJ IyBPbGQgbWFzdGVyIHNob3VsZCBiZSBzdG9wcGVkIGF0IHRoaXMgcG9pbnQuCisJCWZvcmVhY2gg bXkgJHdhbF9maWxlIChAd2FsX2ZpbGVzKQorCQl7CisJCQltb3ZlKCR3YWxfZmlsZSwgIiR3YWxz X2FyY2hpdmVfZGlyIikgb3IgZGllOworCQl9CisKKwkJaWYgKCR3aW5kb3dzX29zKQorCQl7CisJ CQkkcmVzdG9yZV9jb21tYW5kID0gImNvcHkgJHdhbHNfYXJjaGl2ZV9kaXJcXFwlZiBcJXAiOwor CQl9CisJCWVsc2UKKwkJeworCQkJJHJlc3RvcmVfY29tbWFuZCA9ICJjcCAkd2Fsc19hcmNoaXZl X2Rpci9cJWYgXCVwIjsKKwkJfQorCisJCSMgU3RvcCB0aGUgbmV3IG1hc3RlciBhbmQgYmUgcmVh ZHkgdG8gcGVyZm9ybSB0aGUgcmV3aW5kLgorCQkkbm9kZV9zdGFuZGJ5LT5zdG9wOworCisJCXBy aW50ICJVc2luZyByZXN0b3JlX2NvbW1hbmQ9JHJlc3RvcmVfY29tbWFuZFxuIjsKKwkJcHJpbnQg IkNvbmYgcGF0aCAkbWFzdGVyX2NvbmZfcGF0aFxuIjsKKworCQkjIEFkZCByZXN0b3JlX2NvbW1h bmQgdG8gcG9zdGdyZXNxbC5jb25mIG9mIHRhcmdldCBjbHVzdGVyLgorCQlvcGVuKG15ICRjb25m X2ZkLCAiPj4iLCAkbWFzdGVyX2NvbmZfcGF0aCkgb3IgZGllOworCQlwcmludCAkY29uZl9mZCAi XG5yZXN0b3JlX2NvbW1hbmQ9JyRyZXN0b3JlX2NvbW1hbmQnIjsKKwkJY2xvc2UgJGNvbmZfZmQ7 CisKKwkJY29tbWFuZF9vaygKKwkJCVsKKwkJCQkncGdfcmV3aW5kJywKKwkJCQkiLS1kZWJ1ZyIs CisJCQkJIi0tc291cmNlLXBnZGF0YT0kc3RhbmRieV9wZ2RhdGEiLAorCQkJCSItLXRhcmdldC1w Z2RhdGE9JG1hc3Rlcl9wZ2RhdGEiLAorCQkJCSItLW5vLXN5bmMiLAorCQkJCSItciIKKwkJCV0s CisJCQkncGdfcmV3aW5kIGFyY2hpdmVfY29uZicpOworCX0KIAllbHNlCiAJewogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX3Jld2luZC9wYXJzZXhsb2cuYyBiL3NyYy9iaW4vcGdfcmV3aW5kL3Bh cnNleGxvZy5jCmluZGV4IGUxOWMyNjVjYmIuLjUzN2Q1MGUyMzEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfcmV3aW5kL3BhcnNleGxvZy5jCisrKyBiL3NyYy9iaW4vcGdfcmV3aW5kL3BhcnNleGxv Zy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1 ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKICNpbmNsdWRlICJwZ19yZXdp bmQuaCIKICNpbmNsdWRlICJmaWxlbWFwLmgiCkBAIC00NSw3ICs0NiwxMCBAQCBzdGF0aWMgY2hh ciB4bG9nZnBhdGhbTUFYUEdQQVRIXTsKIHR5cGVkZWYgc3RydWN0IFhMb2dQYWdlUmVhZFByaXZh dGUKIHsKIAljb25zdCBjaGFyICpkYXRhZGlyOworCWNvbnN0IGNoYXIgKnJlc3RvcmVDb21tYW5k OwogCWludAkJCXRsaUluZGV4OworCVhMb2dSZWNQdHIgIG9sZHJlY3B0cjsKKwlUaW1lTGluZUlE ICBvbGR0bGk7CiB9IFhMb2dQYWdlUmVhZFByaXZhdGU7CiAKIHN0YXRpYyBpbnQgU2ltcGxlWExv Z1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRlciwKQEAgLTUzLDYgKzU3LDEwIEBA IHN0YXRpYyBpbnQgU2ltcGxlWExvZ1BhZ2VSZWFkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRl ciwKIAkJCQkgICBpbnQgcmVxTGVuLCBYTG9nUmVjUHRyIHRhcmdldFJlY1B0ciwgY2hhciAqcmVh ZEJ1ZiwKIAkJCQkgICBUaW1lTGluZUlEICpwYWdlVExJKTsKIAorc3RhdGljIGJvb2wgUmVzdG9y ZUFyY2hpdmVkV0FMKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnhsb2dmbmFtZSwKKwkJ CQkJb2ZmX3QgZXhwZWN0ZWRTaXplLCBjb25zdCBjaGFyICpyZXN0b3JlQ29tbWFuZCwKKwkJCQkJ Y29uc3QgY2hhciAqbGFzdFJlc3RhcnRQb2ludEZuYW1lKTsKKwogLyoKICAqIFJlYWQgV0FMIGZy b20gdGhlIGRhdGFkaXIvcGdfd2FsLCBzdGFydGluZyBmcm9tICdzdGFydHBvaW50JyBvbiB0aW1l bGluZQogICogaW5kZXggJ3RsaUluZGV4JyBpbiB0YXJnZXQgdGltZWxpbmUgaGlzdG9yeSwgdW50 aWwgJ2VuZHBvaW50Jy4gTWFrZSBub3RlIG9mCkBAIC02MCwxNSArNjgsMTkgQEAgc3RhdGljIGlu dCBTaW1wbGVYTG9nUGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4bG9ncmVhZGVyLAogICovCiB2 b2lkCiBleHRyYWN0UGFnZU1hcChjb25zdCBjaGFyICpkYXRhZGlyLCBYTG9nUmVjUHRyIHN0YXJ0 cG9pbnQsIGludCB0bGlJbmRleCwKLQkJCSAgIFhMb2dSZWNQdHIgZW5kcG9pbnQpCisJCQkgICBD b250cm9sRmlsZURhdGEgKnRhcmdldENGLCBjb25zdCBjaGFyICpyZXN0b3JlX2NvbW1hbmQpCiB7 CiAJWExvZ1JlY29yZCAqcmVjb3JkOworCVhMb2dSZWNQdHIgZW5kcG9pbnQgPSB0YXJnZXRDRi0+ Y2hlY2tQb2ludDsKIAlYTG9nUmVhZGVyU3RhdGUgKnhsb2dyZWFkZXI7CiAJY2hhcgkgICAqZXJy b3Jtc2c7CiAJWExvZ1BhZ2VSZWFkUHJpdmF0ZSBwcml2YXRlOwogCiAJcHJpdmF0ZS5kYXRhZGly ID0gZGF0YWRpcjsKIAlwcml2YXRlLnRsaUluZGV4ID0gdGxpSW5kZXg7CisJcHJpdmF0ZS5yZXN0 b3JlQ29tbWFuZCA9IHJlc3RvcmVfY29tbWFuZDsKKwlwcml2YXRlLm9sZHJlY3B0ciA9IHRhcmdl dENGLT5jaGVja1BvaW50Q29weS5yZWRvOworCXByaXZhdGUub2xkdGxpID0gdGFyZ2V0Q0YtPmNo ZWNrUG9pbnRDb3B5LlRoaXNUaW1lTGluZUlEOwogCXhsb2dyZWFkZXIgPSBYTG9nUmVhZGVyQWxs b2NhdGUoV2FsU2VnU3osICZTaW1wbGVYTG9nUGFnZVJlYWQsCiAJCQkJCQkJCQkmcHJpdmF0ZSk7 CiAJaWYgKHhsb2dyZWFkZXIgPT0gTlVMTCkKQEAgLTE1NCw5ICsxNjYsOSBAQCByZWFkT25lUmVj b3JkKGNvbnN0IGNoYXIgKmRhdGFkaXIsIFhMb2dSZWNQdHIgcHRyLCBpbnQgdGxpSW5kZXgpCiAg KiBGaW5kIHRoZSBwcmV2aW91cyBjaGVja3BvaW50IHByZWNlZGluZyBnaXZlbiBXQUwgbG9jYXRp b24uCiAgKi8KIHZvaWQKLWZpbmRMYXN0Q2hlY2twb2ludChjb25zdCBjaGFyICpkYXRhZGlyLCBY TG9nUmVjUHRyIGZvcmtwdHIsIGludCB0bGlJbmRleCwKK2ZpbmRMYXN0Q2hlY2twb2ludChjb25z dCBjaGFyICpkYXRhZGlyLCBDb250cm9sRmlsZURhdGEgKnRhcmdldENGLCBYTG9nUmVjUHRyIGZv cmtwdHIsIGludCB0bGlJbmRleCwKIAkJCQkgICBYTG9nUmVjUHRyICpsYXN0Y2hrcHRyZWMsIFRp bWVMaW5lSUQgKmxhc3RjaGtwdHRsaSwKLQkJCQkgICBYTG9nUmVjUHRyICpsYXN0Y2hrcHRyZWRv KQorCQkJCSAgIFhMb2dSZWNQdHIgKmxhc3RjaGtwdHJlZG8sIGNvbnN0IGNoYXIgKnJlc3RvcmVD b21tYW5kKQogewogCS8qIFdhbGsgYmFja3dhcmRzLCBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBy ZWNvcmQgKi8KIAlYTG9nUmVjb3JkICpyZWNvcmQ7CkBAIC0xODEsNiArMTkzLDkgQEAgZmluZExh c3RDaGVja3BvaW50KGNvbnN0IGNoYXIgKmRhdGFkaXIsIFhMb2dSZWNQdHIgZm9ya3B0ciwgaW50 IHRsaUluZGV4LAogCiAJcHJpdmF0ZS5kYXRhZGlyID0gZGF0YWRpcjsKIAlwcml2YXRlLnRsaUlu ZGV4ID0gdGxpSW5kZXg7CisJcHJpdmF0ZS5yZXN0b3JlQ29tbWFuZCA9IHJlc3RvcmVDb21tYW5k OworCXByaXZhdGUub2xkcmVjcHRyID0gdGFyZ2V0Q0YtPmNoZWNrUG9pbnRDb3B5LnJlZG87CisJ cHJpdmF0ZS5vbGR0bGkgPSB0YXJnZXRDRi0+Y2hlY2tQb2ludENvcHkuVGhpc1RpbWVMaW5lSUQ7 CiAJeGxvZ3JlYWRlciA9IFhMb2dSZWFkZXJBbGxvY2F0ZShXYWxTZWdTeiwgJlNpbXBsZVhMb2dQ YWdlUmVhZCwKIAkJCQkJCQkJCSZwcml2YXRlKTsKIAlpZiAoeGxvZ3JlYWRlciA9PSBOVUxMKQpA QCAtMjkxLDkgKzMwNiw1MyBAQCBTaW1wbGVYTG9nUGFnZVJlYWQoWExvZ1JlYWRlclN0YXRlICp4 bG9ncmVhZGVyLCBYTG9nUmVjUHRyIHRhcmdldFBhZ2VQdHIsCiAKIAkJaWYgKHhsb2dyZWFkZmQg PCAwKQogCQl7Ci0JCQlwcmludGYoXygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVzXG4i KSwgeGxvZ2ZwYXRoLAorCQkJYm9vbCAgcmVzdG9yZV9vazsKKwkJCWNoYXIgIGxhc3RSZXN0YXJ0 UG9pbnRGbmFtZVtNQVhGTkFNRUxFTl07CisJCQlYTG9nU2VnTm8gcmVzdGFydFNlZ05vOworCisJ CQkvKgorCQkJICogSWYgd2UgaGF2ZSBubyByZXN0b3JlX2NvbW1hbmQgdG8gZXhlY3V0ZSwgdGhl biBleGl0LgorCQkJICovCisJCQlpZiAocHJpdmF0ZS0+cmVzdG9yZUNvbW1hbmQgPT0gTlVMTCkK KwkJCXsKKwkJCQlwcmludGYoXygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVzXG4iKSwg eGxvZ2ZwYXRoLAogCQkJCSAgIHN0cmVycm9yKGVycm5vKSk7Ci0JCQlyZXR1cm4gLTE7CisJCQkJ cmV0dXJuIC0xOworCQkJfQorCisJCQlYTEJ5dGVUb1NlZyhwcml2YXRlLT5vbGRyZWNwdHIsIHJl c3RhcnRTZWdObywgV2FsU2VnU3opOworCQkJWExvZ0ZpbGVOYW1lKGxhc3RSZXN0YXJ0UG9pbnRG bmFtZSwgcHJpdmF0ZS0+b2xkdGxpLCByZXN0YXJ0U2VnTm8sCisJCQkJCQkgV2FsU2VnU3opOwor CisJCQkvKgorCQkJICogU2luY2Ugd2UgaGF2ZSByZXN0b3JlX2NvbW1hbmQgdG8gZXhlY3V0ZSwg dGhlbiB0cnkgdG8gcmV0cmVpdmUKKwkJCSAqIG1pc3NpbmcgV0FMIGZpbGUgZnJvbSB0aGUgYXJj aGl2ZS4KKwkJCSAqLworCQkJcmVzdG9yZV9vayA9IFJlc3RvcmVBcmNoaXZlZFdBTChwcml2YXRl LT5kYXRhZGlyLAorCQkJCQkJCQkJCQl4bG9nZm5hbWUsCisJCQkJCQkJCQkJCVdhbFNlZ1N6LAor CQkJCQkJCQkJCQlwcml2YXRlLT5yZXN0b3JlQ29tbWFuZCwKKwkJCQkJCQkJCQkJbGFzdFJlc3Rh cnRQb2ludEZuYW1lKTsKKworCQkJaWYgKHJlc3RvcmVfb2spCisJCQl7CisJCQkJeGxvZ3JlYWRm ZCA9IG9wZW4oeGxvZ2ZwYXRoLCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCk7CisKKwkJCQlpZiAo eGxvZ3JlYWRmZCA8IDApCisJCQkJeworCQkJCQlwcmludGYoXygiY291bGQgbm90IG9wZW4gcmVz dG9yZWQgZnJvbSBhcmNoaXZlIGZpbGUgXCIlc1wiOiAlc1xuIiksIHhsb2dmcGF0aCwKKwkJCQkJ CQlzdHJlcnJvcihlcnJubykpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQkJcGdfbG9nKFBHX0RFQlVHLCAidXNpbmcgcmVzdG9yZWQgZnJvbSBhcmNoaXZlIHZlcnNpb24g b2YgZmlsZSBcIiVzXCJcbiIsIHhsb2dmcGF0aCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ cHJpbnRmKF8oImNvdWxkIG5vdCByZXN0b3JlIGZpbGUgXCIlc1wiIGZyb20gYXJjaGl2ZTogJXNc biIpLCB4bG9nZm5hbWUsCisJCQkJCSAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJcmV0dXJuIC0x OworCQkJfQogCQl9CiAJfQogCkBAIC00MDksMyArNDY4LDExNCBAQCBleHRyYWN0UGFnZUluZm8o WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXByb2Nlc3NfYmxvY2tfY2hhbmdlKGZvcmtudW0s IHJub2RlLCBibGtubyk7CiAJfQogfQorCisvKgorICogQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUg c3BlY2lmaWVkIGZpbGUgZnJvbSBvZmYtbGluZSBhcmNoaXZhbCBzdG9yYWdlLgorICogSWYgc3Vj Y2Vzc2Z1bCByZXR1cm4gdHJ1ZS4KKyAqCisgKiBGb3IgZml4ZWQtc2l6ZSBmaWxlcywgdGhlIGNh bGxlciBtYXkgcGFzcyB0aGUgZXhwZWN0ZWQgc2l6ZSBhcyBhbgorICogYWRkaXRpb25hbCBjcm9z c2NoZWNrIG9uIHN1Y2Nlc3NmdWwgcmVjb3ZlcnkuIElmIHRoZSBmaWxlIHNpemUgaXMgbm90Cisg KiBrbm93biwgc2V0IGV4cGVjdGVkU2l6ZSA9IDAuCisgKgorICogVGhpcyBpcyBhIHNpbXBsaWZp ZWQgYW5kIGFkYXB0ZWQgdG8gZnJvbnRlbmQgdmVyc2lvbiBvZgorICogUmVzdG9yZUFyY2hpdmVk RmlsZSBmdW5jdGlvbiBmcm9tIHRyYW5zYW0veGxvZ2FyY2hpdmUuYworICovCitib29sCitSZXN0 b3JlQXJjaGl2ZWRXQUwoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqeGxvZ2ZuYW1lLCBv ZmZfdCBleHBlY3RlZFNpemUsCisJCQkJICAgY29uc3QgY2hhciAqcmVzdG9yZUNvbW1hbmQsIGNv bnN0IGNoYXIgKmxhc3RSZXN0YXJ0UG9pbnRGbmFtZSkKK3sKKwljaGFyCQl4bG9ncGF0aFtNQVhQ R1BBVEhdOworCWNoYXIJCXhsb2dSZXN0b3JlQ21kW01BWFBHUEFUSF07CisJY2hhcgkgICAqZHA7 CisJY2hhcgkgICAqZW5kcDsKKwljb25zdCBjaGFyICpzcDsKKwlpbnQJCQlyYzsKKwlzdHJ1Y3Qg c3RhdCBzdGF0X2J1ZjsKKworCXNucHJpbnRmKHhsb2dwYXRoLCBNQVhQR1BBVEgsICIlcy8iIFhM T0dESVIgIi8lcyIsIHBhdGgsIHhsb2dmbmFtZSk7CisKKwkvKgorCSAqIENvbnN0cnVjdCB0aGUg Y29tbWFuZCB0byBiZSBleGVjdXRlZC4KKwkgKi8KKwlkcCA9IHhsb2dSZXN0b3JlQ21kOworCWVu ZHAgPSB4bG9nUmVzdG9yZUNtZCArIE1BWFBHUEFUSCAtIDE7CisJKmVuZHAgPSAnXDAnOworCisJ Zm9yIChzcCA9IHJlc3RvcmVDb21tYW5kOyAqc3A7IHNwKyspCisJeworCQlpZiAoKnNwID09ICcl JykKKwkJeworCQkJc3dpdGNoIChzcFsxXSkKKwkJCXsKKwkJCQljYXNlICdwJzoKKwkJCQkJLyog JXA6IHJlbGF0aXZlIHBhdGggb2YgdGFyZ2V0IGZpbGUgKi8KKwkJCQkJc3ArKzsKKwkJCQkJU3Ry TkNweShkcCwgeGxvZ3BhdGgsIGVuZHAgLSBkcCk7CisJCQkJCW1ha2VfbmF0aXZlX3BhdGgoZHAp OworCQkJCQlkcCArPSBzdHJsZW4oZHApOworCQkJCQlicmVhazsKKwkJCQljYXNlICdmJzoKKwkJ CQkJLyogJWY6IGZpbGVuYW1lIG9mIGRlc2lyZWQgZmlsZSAqLworCQkJCQlzcCsrOworCQkJCQlT dHJOQ3B5KGRwLCB4bG9nZm5hbWUsIGVuZHAgLSBkcCk7CisJCQkJCWRwICs9IHN0cmxlbihkcCk7 CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3InOgorCQkJCQkvKiAlcjogZmlsZW5hbWUgb2YgbGFz dCByZXN0YXJ0cG9pbnQgKi8KKwkJCQkJcGdfZmF0YWwoInJlc3RvcmVfY29tbWFuZCB3aXRoICUl ciBjYW5ub3QgYmUgdXNlZCBkdXJpbmcgcmV3aW5kIHByb2Nlc3MuXG4iKTsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSAnJSc6CisJCQkJCS8qIGNvbnZlcnQgJSUgdG8gYSBzaW5nbGUgJSAqLworCQkJ CQlzcCsrOworCQkJCQlpZiAoZHAgPCBlbmRwKQorCQkJCQkJKmRwKysgPSAqc3A7CisJCQkJCWJy ZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCS8qIG90aGVyd2lzZSB0cmVhdCB0aGUgJSBhcyBub3Qg c3BlY2lhbCAqLworCQkJCQlpZiAoZHAgPCBlbmRwKQorCQkJCQkJKmRwKysgPSAqc3A7CisJCQkJ CWJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGRwIDwgZW5kcCkKKwkJCQkq ZHArKyA9ICpzcDsKKwkJfQorCX0KKwkqZHAgPSAnXDAnOworCisJLyoKKwkgKiBFeGVjdXRlIHJl c3RvcmVfY29tbWFuZCwgd2hpY2ggc2hvdWxkIGNvcHkKKwkgKiB0aGUgbWlzc2luZyBXQUwgZmls ZSBmcm9tIGFyY2hpdmFsIHN0b3JhZ2UuCisJICovCisJcmMgPSBzeXN0ZW0oeGxvZ1Jlc3RvcmVD bWQpOworCisJaWYgKHJjID09IDApCisJeworCQkvKgorCQkgKiBDb21tYW5kIGFwcGFyZW50bHkg c3VjY2VlZGVkLCBidXQgbGV0J3MgbWFrZSBzdXJlIHRoZSBmaWxlIGlzCisJCSAqIHJlYWxseSB0 aGVyZSBub3cgYW5kIGhhcyB0aGUgY29ycmVjdCBzaXplLgorCQkgKi8KKwkJaWYgKHN0YXQoeGxv Z3BhdGgsICZzdGF0X2J1ZikgPT0gMCkKKwkJeworCQkJaWYgKGV4cGVjdGVkU2l6ZSA+IDAgJiYg c3RhdF9idWYuc3Rfc2l6ZSAhPSBleHBlY3RlZFNpemUpCisJCQl7CisJCQkJcHJpbnRmKF8oImFy Y2hpdmUgZmlsZSBcIiVzXCIgaGFzIHdyb25nIHNpemU6ICVsdSBpbnN0ZWFkIG9mICVsdSwgJXMi KSwKKwkJCQkJCXhsb2dmbmFtZSwgKHVuc2lnbmVkIGxvbmcpIHN0YXRfYnVmLnN0X3NpemUsICh1 bnNpZ25lZCBsb25nKSBleHBlY3RlZFNpemUsCisJCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJ fQorCQkJZWxzZQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogU3Rh dCBmYWlsZWQgKi8KKwkJCXByaW50ZihfKCJjb3VsZCBub3Qgc3RhdCBmaWxlIFwiJXNcIjogJXMi KSwKKwkJCQkJeGxvZ3BhdGgsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCX0KKwl9CisKKwly ZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9wZ19yZXdpbmQu YyBiL3NyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jCmluZGV4IDdjY2RlNWM4N2YuLmFiZTU5 M2E1ODggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jCisrKyBiL3Ny Yy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5jCkBAIC0yNCw4ICsyNCwxMCBAQAogI2luY2x1ZGUg ImFjY2Vzcy94bG9nX2ludGVybmFsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9jYXR2ZXJzaW9uLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCisjaW5jbHVkZSAiY29tbW9uL2NvbnRy b2xkYXRhX3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVybS5oIgogI2luY2x1ZGUg ImNvbW1vbi9maWxlX3V0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL2d1Yy1maWxlLmgiCiAjaW5j bHVkZSAiY29tbW9uL3Jlc3RyaWN0ZWRfdG9rZW4uaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5o IgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNTIsMTEgKzU0LDEzIEBAIGludAkJ CVdhbFNlZ1N6OwogY2hhcgkgICAqZGF0YWRpcl90YXJnZXQgPSBOVUxMOwogY2hhcgkgICAqZGF0 YWRpcl9zb3VyY2UgPSBOVUxMOwogY2hhcgkgICAqY29ubnN0cl9zb3VyY2UgPSBOVUxMOworY2hh cgkgICAqcmVzdG9yZV9jb21tYW5kID0gTlVMTDsKIAogYm9vbAkJZGVidWcgPSBmYWxzZTsKIGJv b2wJCXNob3dwcm9ncmVzcyA9IGZhbHNlOwogYm9vbAkJZHJ5X3J1biA9IGZhbHNlOwogYm9vbAkJ ZG9fc3luYyA9IHRydWU7Citib29sCQlyZXN0b3JlX3dhbHMgPSBmYWxzZTsKIAogLyogVGFyZ2V0 IGhpc3RvcnkgKi8KIFRpbWVMaW5lSGlzdG9yeUVudHJ5ICp0YXJnZXRIaXN0b3J5OwpAQCAtNzUs NiArNzksOSBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtTiwg LS1uby1zeW5jICAgICAgICAgICAgICAgICAgZG8gbm90IHdhaXQgZm9yIGNoYW5nZXMgdG8gYmUg d3JpdHRlblxuIikpOwogCXByaW50ZihfKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzYWZlbHkgdG8gZGlza1xuIikpOwogCXByaW50ZihfKCIgIC1QLCAtLXByb2dyZXNzICAgICAg ICAgICAgICAgICB3cml0ZSBwcm9ncmVzcyBtZXNzYWdlc1xuIikpOworCXByaW50ZihfKCIgIC1y LCAtLXVzZS1wb3N0Z3Jlc3FsLWNvbmYgICAgICB1c2UgcmVzdG9yZV9jb21tYW5kIGluIHRoZSBw b3N0Z3Jlc3FsLmNvbmYgdG9cbiIpKTsKKwlwcmludGYoXygiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0cmVpdmUgV0FMcyBmcm9tIGFyY2hpdmVcbiIpKTsKKwlwcmludGYoXygi ICAtUiwgLS1yZXN0b3JlLWNvbW1hbmQ9Q09NTUFORCAgcmVzdG9yZV9jb21tYW5kXG4iKSk7CiAJ cHJpbnRmKF8oIiAgICAgIC0tZGVidWcgICAgICAgICAgICAgICAgICAgIHdyaXRlIGEgbG90IG9m IGRlYnVnIG1lc3NhZ2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAg ICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKIAlw cmludGYoXygiICAtPywgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAs IHRoZW4gZXhpdFxuIikpOwpAQCAtOTQsOSArMTAxLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQl7ImRyeS1ydW4iLCBub19hcmd1bWVudCwgTlVMTCwgJ24nfSwKIAkJeyJuby1z eW5jIiwgbm9fYXJndW1lbnQsIE5VTEwsICdOJ30sCiAJCXsicHJvZ3Jlc3MiLCBub19hcmd1bWVu dCwgTlVMTCwgJ1AnfSwKKwkJeyJ1c2UtcG9zdGdyZXNxbC1jb25mIiwgbm9fYXJndW1lbnQsIE5V TEwsICdyJ30sCisJCXsicmVzdG9yZS1jb21tYW5kIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws ICdSJ30sCiAJCXsiZGVidWciLCBub19hcmd1bWVudCwgTlVMTCwgM30sCiAJCXtOVUxMLCAwLCBO VUxMLCAwfQogCX07CisJY2hhcgkJcmVjZmlsZV9mdWxscGF0aFtNQVhQR1BBVEhdOwogCWludAkJ CW9wdGlvbl9pbmRleDsKIAlpbnQJCQljOwogCVhMb2dSZWNQdHIJZGl2ZXJnZXJlYzsKQEAgLTEy OSw3ICsxMzksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJEOm5OUCIsIGxvbmdfb3B0aW9ucywg Jm9wdGlvbl9pbmRleCkpICE9IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFy Z3YsICJEOm5OUFI6ciIsIGxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCkpICE9IC0xKQogCXsK IAkJc3dpdGNoIChjKQogCQl7CkBAIC0xNDEsNiArMTUxLDEwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQkJCXNob3dwcm9ncmVzcyA9IHRydWU7CiAJCQkJYnJlYWs7CiAKKwkJCWNh c2UgJ3InOgorCQkJCXJlc3RvcmVfd2FscyA9IHRydWU7CisJCQkJYnJlYWs7CisKIAkJCWNhc2Ug J24nOgogCQkJCWRyeV9ydW4gPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMTU3LDYgKzE3MSwxMCBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlkYXRhZGlyX3RhcmdldCA9IHBnX3N0 cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCisJCQljYXNlICdSJzoKKwkJCQlyZXN0b3JlX2Nv bW1hbmQgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSAxOgkJCQkv KiAtLXNvdXJjZS1wZ2RhdGEgKi8KIAkJCQlkYXRhZGlyX3NvdXJjZSA9IHBnX3N0cmR1cChvcHRh cmcpOwogCQkJCWJyZWFrOwpAQCAtMjIzLDYgKzI0MSw4MCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAogCXVtYXNrKHBnX21vZGVfbWFzayk7CiAKKwlpZiAocmVzdG9yZV9jb21tYW5k ICE9IE5VTEwpCisJeworCQlpZiAocmVzdG9yZV93YWxzKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVy ciwgXygiJXM6IHJlZHVuZGFudCBvcHRpb25zOiBib3RoIC1yIGFuZCAtUiBhcmUgc3BlY2lmaWVk XG4iKSwKKwkJCQlwcm9nbmFtZSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgXygiWW91IG11c3QgcnVu ICVzIHdpdGggZWl0aGVyIC1yLy0tdXNlLXBvc3RncmVzcWwtY29uZiBvciAtUi8tLXJlc3RvcmUt Y29tbWFuZC5cbiIpLAorCQkJCXByb2duYW1lKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlwZ19s b2coUEdfREVCVUcsICJ1c2luZyBjb21tYW5kIGxpbmUgcmVzdG9yZV9jb21tYW5kPVwnJXNcJy5c biIsIHJlc3RvcmVfY29tbWFuZCk7CisJfQorCWVsc2UgaWYgKHJlc3RvcmVfd2FscykKKwl7CisJ CUZJTEUJKmNvbmZfZmlsZTsKKworCQkvKgorCQkgKiBMb29rIGZvciBjb25maWd1cmF0aW9uIGZp bGUgaW4gdGhlIHRhcmdldCBkYXRhIGRpcmVjdG9yeSBhbmQKKwkJICogdHJ5IHRvIGdldCByZXN0 b3JlX2NvbW1hbmQgZnJvbSB0aGVyZS4KKwkJICovCisJCXNucHJpbnRmKHJlY2ZpbGVfZnVsbHBh dGgsIHNpemVvZihyZWNmaWxlX2Z1bGxwYXRoKSwgIiVzLyVzIiwgZGF0YWRpcl90YXJnZXQsIFJF U1RPUkVfQ09NTUFORF9GSUxFKTsKKwkJY29uZl9maWxlID0gZm9wZW4ocmVjZmlsZV9mdWxscGF0 aCwgInIiKTsKKworCQlpZiAoY29uZl9maWxlID09IE5VTEwpCisJCXsKKwkJCWZwcmludGYoc3Rk ZXJyLCBfKCIlczogb3B0aW9uIC1yLy0tdXNlLXBvc3RncmVzcWwtY29uZiBpcyBzcGVjaWZpZWQs IGJ1dCBwb3N0Z3Jlc2xxLmNvbmYgaXMgYWJzZW50IGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5XG4i KSwKKwkJCQkJcHJvZ25hbWUpOworCQkJZnByaW50ZihzdGRlcnIsIF8oIllvdSBoYXZlIHRvIGFk ZCBwb3N0Z3Jlc3FsLmNvbmYgb3IgcGFzcyByZXN0b3JlX2NvbW1hbmQgd2l0aCAtUi8tLXJlc3Rv cmUtY29tbWFuZCBvcHRpb24uXG4iKSk7CisJCQlleGl0KDEpOworCQl9CisJCWVsc2UKKwkJewor CQkJQ29uZmlnVmFyaWFibGUgKml0ZW0sCisJCQkJCQkgICAqaGVhZCA9IE5VTEwsCisJCQkJCQkg ICAqdGFpbCA9IE5VTEw7CisJCQlib29sCQkJY29uZmlnX2lzX3BhcnNlZDsKKworCQkJLyoKKwkJ CSAqIFdlIHBhc3MgYSBmdWxscGF0aCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFzIGNhbGxp bmdfZmlsZSBoZXJlLCBzaW5jZQorCQkJICogcGFyc2VyIHdpbGwgdXNlIGl0cyBwYXJlbnQgZGly ZWN0b3J5IGFzIGJhc2UgZm9yIGFsbCBmdXJ0aGVyIGluY2x1ZGVzCisJCQkgKiBpZiBhbnkgZXhp c3QuCisJCQkgKi8KKwkJCWNvbmZpZ19pc19wYXJzZWQgPSBQYXJzZUNvbmZpZ0ZpbGUoUkVTVE9S RV9DT01NQU5EX0ZJTEUsIHRydWUsCisJCQkJCQkJCQkJCSAgIHJlY2ZpbGVfZnVsbHBhdGgsIDAs IDAsCisJCQkJCQkJCQkJCSAgIFBHX1dBUk5JTkcsICZoZWFkLCAmdGFpbCk7CisJCQlmY2xvc2Uo Y29uZl9maWxlKTsKKworCQkJaWYgKGNvbmZpZ19pc19wYXJzZWQpCisJCQl7CisJCQkJZm9yIChp dGVtID0gaGVhZDsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpCisJCQkJeworCQkJCQlpZiAoc3Ry Y21wKGl0ZW0tPm5hbWUsICJyZXN0b3JlX2NvbW1hbmQiKSA9PSAwKQorCQkJCQl7CisJCQkJCQlp ZiAocmVzdG9yZV9jb21tYW5kICE9IE5VTEwpCisJCQkJCQl7CisJCQkJCQkJcGZyZWUocmVzdG9y ZV9jb21tYW5kKTsKKwkJCQkJCQlyZXN0b3JlX2NvbW1hbmQgPSBOVUxMOworCQkJCQkJfQorCQkJ CQkJcmVzdG9yZV9jb21tYW5kID0gcHN0cmR1cChpdGVtLT52YWx1ZSk7CisJCQkJCQlwZ19sb2co UEdfREVCVUcsICJ1c2luZyByZXN0b3JlX2NvbW1hbmQ9XCclc1wnIGZyb20gJXMuXG4iLCByZXN0 b3JlX2NvbW1hbmQsIFJFU1RPUkVfQ09NTUFORF9GSUxFKTsKKwkJCQkJfQorCQkJCX0KKworCQkJ CWlmIChyZXN0b3JlX2NvbW1hbmQgPT0gTlVMTCkKKwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBm aW5kIHJlc3RvcmVfY29tbWFuZCBpbiAlcyBmaWxlICVzXG4iLCBSRVNUT1JFX0NPTU1BTkRfRklM RSwgcmVjZmlsZV9mdWxscGF0aCk7CisJCQl9CisJCQllbHNlCisJCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBwYXJzZSAlcyBmaWxlICVzXG4iLCBSRVNUT1JFX0NPTU1BTkRfRklMRSwgcmVjZmlsZV9m dWxscGF0aCk7CisKKwkJCUZyZWVDb25maWdWYXJpYWJsZXMoaGVhZCk7CisJCX0KKwl9CisKIAkv KiBDb25uZWN0IHRvIHJlbW90ZSBzZXJ2ZXIgKi8KIAlpZiAoY29ubnN0cl9zb3VyY2UpCiAJCWxp YnBxQ29ubmVjdChjb25uc3RyX3NvdXJjZSk7CkBAIC0yOTQsOSArMzg2LDkgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCWV4aXQoMCk7CiAJfQogCi0JZmluZExhc3RDaGVja3BvaW50 KGRhdGFkaXJfdGFyZ2V0LCBkaXZlcmdlcmVjLAorCWZpbmRMYXN0Q2hlY2twb2ludChkYXRhZGly X3RhcmdldCwgJkNvbnRyb2xGaWxlX3RhcmdldCwgZGl2ZXJnZXJlYywKIAkJCQkJICAgbGFzdGNv bW1vbnRsaUluZGV4LAotCQkJCQkgICAmY2hrcHRyZWMsICZjaGtwdHRsaSwgJmNoa3B0cmVkbyk7 CisJCQkJCSAgICZjaGtwdHJlYywgJmNoa3B0dGxpLCAmY2hrcHRyZWRvLCByZXN0b3JlX2NvbW1h bmQpOwogCXByaW50ZihfKCJyZXdpbmRpbmcgZnJvbSBsYXN0IGNvbW1vbiBjaGVja3BvaW50IGF0 ICVYLyVYIG9uIHRpbWVsaW5lICV1XG4iKSwKIAkJICAgKHVpbnQzMikgKGNoa3B0cmVjID4+IDMy KSwgKHVpbnQzMikgY2hrcHRyZWMsCiAJCSAgIGNoa3B0dGxpKTsKQEAgLTMxOSw3ICs0MTEsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkgKi8KIAlwZ19sb2coUEdfUFJPR1JFU1Ms ICJyZWFkaW5nIFdBTCBpbiB0YXJnZXRcbiIpOwogCWV4dHJhY3RQYWdlTWFwKGRhdGFkaXJfdGFy Z2V0LCBjaGtwdHJlYywgbGFzdGNvbW1vbnRsaUluZGV4LAotCQkJCSAgIENvbnRyb2xGaWxlX3Rh cmdldC5jaGVja1BvaW50KTsKKwkJCQkgICAmQ29udHJvbEZpbGVfdGFyZ2V0LCByZXN0b3JlX2Nv bW1hbmQpOwogCWZpbGVtYXBfZmluYWxpemUoKTsKIAogCWlmIChzaG93cHJvZ3Jlc3MpCmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC9wZ19yZXdpbmQuaCBiL3NyYy9iaW4vcGdfcmV3aW5k L3BnX3Jld2luZC5oCmluZGV4IDgzYjI4OThiOGIuLjVkYzZmNWIxYmEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfcmV3aW5kL3BnX3Jld2luZC5oCisrKyBiL3NyYy9iaW4vcGdfcmV3aW5kL3BnX3Jl d2luZC5oCkBAIC0xNCw5ICsxNCwxMiBAQAogI2luY2x1ZGUgImRhdGFwYWdlbWFwLmgiCiAKICNp bmNsdWRlICJhY2Nlc3MvdGltZWxpbmUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wu aCIKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxl bm9kZS5oIgogCisjZGVmaW5lIFJFU1RPUkVfQ09NTUFORF9GSUxFICJwb3N0Z3Jlc3FsLmNvbmYi CisKIC8qIENvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLwogZXh0ZXJuIGNoYXIgKmRhdGFkaXJfdGFy Z2V0OwogZXh0ZXJuIGNoYXIgKmRhdGFkaXJfc291cmNlOwpAQCAtMzIsMTEgKzM1LDEwIEBAIGV4 dGVybiBpbnQJdGFyZ2V0TmVudHJpZXM7CiAKIC8qIGluIHBhcnNleGxvZy5jICovCiBleHRlcm4g dm9pZCBleHRyYWN0UGFnZU1hcChjb25zdCBjaGFyICpkYXRhZGlyLCBYTG9nUmVjUHRyIHN0YXJ0 cG9pbnQsCi0JCQkgICBpbnQgdGxpSW5kZXgsIFhMb2dSZWNQdHIgZW5kcG9pbnQpOwotZXh0ZXJu IHZvaWQgZmluZExhc3RDaGVja3BvaW50KGNvbnN0IGNoYXIgKmRhdGFkaXIsIFhMb2dSZWNQdHIg c2VhcmNocHRyLAotCQkJCSAgIGludCB0bGlJbmRleCwKLQkJCQkgICBYTG9nUmVjUHRyICpsYXN0 Y2hrcHRyZWMsIFRpbWVMaW5lSUQgKmxhc3RjaGtwdHRsaSwKLQkJCQkgICBYTG9nUmVjUHRyICps YXN0Y2hrcHRyZWRvKTsKKwkJCSAgIGludCB0bGlJbmRleCwgQ29udHJvbEZpbGVEYXRhICp0YXJn ZXRDRiwgY29uc3QgY2hhciAqcmVzdG9yZUNvbW1hbmQpOworZXh0ZXJuIHZvaWQgZmluZExhc3RD aGVja3BvaW50KGNvbnN0IGNoYXIgKmRhdGFkaXIsIENvbnRyb2xGaWxlRGF0YSAqdGFyZ2V0Q0Ys IFhMb2dSZWNQdHIgc2VhcmNocHRyLAorCQkJCSAgIGludCB0bGlJbmRleCwgWExvZ1JlY1B0ciAq bGFzdGNoa3B0cmVjLCBUaW1lTGluZUlEICpsYXN0Y2hrcHR0bGksCisJCQkJICAgWExvZ1JlY1B0 ciAqbGFzdGNoa3B0cmVkbywgY29uc3QgY2hhciAqcmVzdG9yZUNvbW1hbmQpOwogZXh0ZXJuIFhM b2dSZWNQdHIgcmVhZE9uZVJlY29yZChjb25zdCBjaGFyICpkYXRhZGlyLCBYTG9nUmVjUHRyIHB0 ciwKIAkJCSAgaW50IHRsaUluZGV4KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXdpbmQv dC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX3Jld2luZC90LzAwMV9iYXNpYy5wbAppbmRleCA1 M2RiZjQ1YmUyLi4xODYwY2UyZmUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jld2luZC90LzAw MV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX3Jld2luZC90LzAwMV9iYXNpYy5wbApAQCAtMSw3 ICsxLDcgQEAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1c2UgVGVzdExpYjsKLXVzZSBU ZXN0OjpNb3JlIHRlc3RzID0+IDEwOwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjA7CiAKIHVz ZSBSZXdpbmRUZXN0OwogCkBAIC0xMDMsNSArMTAzLDcgQEAgaW4gbWFzdGVyLCBiZWZvcmUgcHJv bW90aW9uCiAjIFJ1biB0aGUgdGVzdCBpbiBib3RoIG1vZGVzCiBydW5fdGVzdCgnbG9jYWwnKTsK IHJ1bl90ZXN0KCdyZW1vdGUnKTsKK3J1bl90ZXN0KCdhcmNoaXZlJyk7CitydW5fdGVzdCgnYXJj aGl2ZV9jb25mJyk7CiAKIGV4aXQoMCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jld2luZC90 LzAwMl9kYXRhYmFzZXMucGwgYi9zcmMvYmluL3BnX3Jld2luZC90LzAwMl9kYXRhYmFzZXMucGwK aW5kZXggMmM5ZTQyNzgzMS4uNDJkNzA4ZGZiZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdp bmQvdC8wMDJfZGF0YWJhc2VzLnBsCisrKyBiL3NyYy9iaW4vcGdfcmV3aW5kL3QvMDAyX2RhdGFi YXNlcy5wbApAQCAtMSw3ICsxLDcgQEAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1c2Ug VGVzdExpYjsKLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDY7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0 cyA9PiAxMjsKIAogdXNlIFJld2luZFRlc3Q7CiAKQEAgLTU5LDUgKzU5LDcgQEAgdGVtcGxhdGUx CiAjIFJ1biB0aGUgdGVzdCBpbiBib3RoIG1vZGVzLgogcnVuX3Rlc3QoJ2xvY2FsJyk7CiBydW5f dGVzdCgncmVtb3RlJyk7CitydW5fdGVzdCgnYXJjaGl2ZScpOworcnVuX3Rlc3QoJ2FyY2hpdmVf Y29uZicpOwogCiBleGl0KDApOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXdpbmQvdC8wMDNf ZXh0cmFmaWxlcy5wbCBiL3NyYy9iaW4vcGdfcmV3aW5kL3QvMDAzX2V4dHJhZmlsZXMucGwKaW5k ZXggNDk2ZjM4YzQ1Ny4uOTY2NjVhYzJmNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXdpbmQv dC8wMDNfZXh0cmFmaWxlcy5wbAorKysgYi9zcmMvYmluL3BnX3Jld2luZC90LzAwM19leHRyYWZp bGVzLnBsCkBAIC0zLDcgKzMsNyBAQAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIHVzZSBU ZXN0TGliOwotdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNDsKK3VzZSBUZXN0OjpNb3JlIHRlc3Rz ID0+IDg7CiAKIHVzZSBGaWxlOjpGaW5kOwogCkBAIC04Nyw1ICs4Nyw3IEBAIHN1YiBydW5fdGVz dAogIyBSdW4gdGhlIHRlc3QgaW4gYm90aCBtb2Rlcy4KIHJ1bl90ZXN0KCdsb2NhbCcpOwogcnVu X3Rlc3QoJ3JlbW90ZScpOworcnVuX3Rlc3QoJ2FyY2hpdmUnKTsKK3J1bl90ZXN0KCdhcmNoaXZl X2NvbmYnKTsKIAogZXhpdCgwKTsKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vTWFrZWZpbGUgYi9z cmMvY29tbW9uL01ha2VmaWxlCmluZGV4IGQwYzJiOTcwZWIuLjNkN2RhNDdmNTYgMTAwNjQ0Ci0t LSBhL3NyYy9jb21tb24vTWFrZWZpbGUKKysrIGIvc3JjL2NvbW1vbi9NYWtlZmlsZQpAQCAtNDgs NyArNDgsNyBAQCBPQkpTX0NPTU1PTiA9IGJhc2U2NC5vIGNvbmZpZ19pbmZvLm8gY29udHJvbGRh dGFfdXRpbHMubyBleGVjLm8gZmlsZV9wZXJtLm8gXAogCWlwLm8ga2V5d29yZHMubyBrd2xvb2t1 cC5vIGxpbmstY2FuYXJ5Lm8gbWQ1Lm8gcGdfbHpjb21wcmVzcy5vIFwKIAlwZ2ZuYW1lcy5vIHBz cHJpbnRmLm8gcmVscGF0aC5vIFwKIAlybXRyZWUubyBzYXNscHJlcC5vIHNjcmFtLWNvbW1vbi5v IHN0cmluZy5vIHVuaWNvZGVfbm9ybS5vIFwKLQl1c2VybmFtZS5vIHdhaXRfZXJyb3IubworCXVz ZXJuYW1lLm8gd2FpdF9lcnJvci5vIGd1Yy1maWxlLm8KIAogaWZlcSAoJCh3aXRoX29wZW5zc2wp LHllcykKIE9CSlNfQ09NTU9OICs9IHNoYTJfb3BlbnNzbC5vCkBAIC03MCw3ICs3MCw3IEBAIEdF Tl9LRVlXT1JETElTVF9ERVBTID0gJChUT09MU0RJUikvZ2VuX2tleXdvcmRsaXN0LnBsICQoVE9P TFNESVIpL1BlcmZlY3RIYXNoLnBtCiAKIGFsbDogbGlicGdjb21tb24uYSBsaWJwZ2NvbW1vbl9z aGxpYi5hIGxpYnBnY29tbW9uX3Nydi5hCiAKLWRpc3RwcmVwOiBrd2xpc3RfZC5oCitkaXN0cHJl cDoga3dsaXN0X2QuaCBndWMtZmlsZS5jCiAKICMgbGlicGdjb21tb24gaXMgbmVlZGVkIGJ5IHNv bWUgY29udHJpYgogaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzCkBAIC0xMzAsMTAgKzEzMCwxMyBA QCBrd2xpc3RfZC5oOiAkKHRvcF9zcmNkaXIpL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAk KEdFTl9LRVlXT1JETElTVF9ERVBTKQogIyB0aGF0IHlvdSBkb24ndCBnZXQgYnJva2VuIHBhcnNp bmcgY29kZSwgZXZlbiBpbiBhIG5vbi1lbmFibGUtZGVwZW5kIGJ1aWxkLgoga2V5d29yZHMubyBr ZXl3b3Jkc19zaGxpYi5vIGtleXdvcmRzX3Nydi5vOiBrd2xpc3RfZC5oCiAKLSMga3dsaXN0X2Qu aCBpcyBpbiB0aGUgZGlzdHJpYnV0aW9uIHRhcmJhbGwsIHNvIGl0IGlzIG5vdCBjbGVhbmVkIGhl cmUuCisjIE5vdGU6IGd1Yy1maWxlLmMgYW5kIGt3bGlzdF9kLmggYXJlIG5vdCBkZWxldGVkIGJ5 ICdtYWtlIGNsZWFuJywKKyMgc2luY2Ugd2Ugd2FudCB0byBzaGlwIHRoZW0gaW4gZGlzdHJpYnV0 aW9uIHRhcmJhbGxzLgogY2xlYW4gZGlzdGNsZWFuOgogCXJtIC1mIGxpYnBnY29tbW9uLmEgbGli cGdjb21tb25fc2hsaWIuYSBsaWJwZ2NvbW1vbl9zcnYuYQogCXJtIC1mICQoT0JKU19GUk9OVEVO RCkgJChPQkpTX1NITElCKSAkKE9CSlNfU1JWKQorCUBybSAtZiBsZXgueXkuYwogCiBtYWludGFp bmVyLWNsZWFuOiBkaXN0Y2xlYW4KIAlybSAtZiBrd2xpc3RfZC5oCisJcm0gLWYgZ3VjLWZpbGUu YwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMtZmlsZS5sIGIvc3JjL2Nv bW1vbi9ndWMtZmlsZS5sCnNpbWlsYXJpdHkgaW5kZXggNjAlCnJlbmFtZSBmcm9tIHNyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjLWZpbGUubApyZW5hbWUgdG8gc3JjL2NvbW1vbi9ndWMtZmlsZS5s CmluZGV4IDFjOGI1ZjdkODQuLjQxMTdhMWRjYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjLWZpbGUubAorKysgYi9zcmMvY29tbW9uL2d1Yy1maWxlLmwKQEAgLTQsMjEg KzQsMzMgQEAKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAxOSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqCi0gKiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy1m aWxlLmwKKyAqIHNyYy9jb21tb24vZ3VjLWZpbGUubAogICovCiAKICV7CiAKLSNpbmNsdWRlICJw b3N0Z3Jlcy5oIgotCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp bmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWZuZGVmIEZST05URU5ECisjaW5jbHVkZSAicG9zdGdy ZXMuaCIKIAogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1 ZGUgInV0aWxzL2Vsb2cuaCIKKyNlbHNlCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8 c2V0am1wLmg+CisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSAiY29tbW9u L2ZlX21lbXV0aWxzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgImNvbW1vbi9ndWMtZmlsZS5oIgog CiAvKgogICogZmxleCBlbWl0cyBhIHl5X2ZhdGFsX2Vycm9yKCkgZnVuY3Rpb24gdGhhdCBpdCBj YWxscyBpbiByZXNwb25zZSB0bwpAQCAtNDgsMTIgKzYwLDYgQEAgc3RhdGljIHNpZ2ptcF9idWYg KkdVQ19mbGV4X2ZhdGFsX2ptcDsKIAogc3RhdGljIHZvaWQgRnJlZUNvbmZpZ1ZhcmlhYmxlKENv bmZpZ1ZhcmlhYmxlICppdGVtKTsKIAotc3RhdGljIHZvaWQgcmVjb3JkX2NvbmZpZ19maWxlX2Vy cm9yKGNvbnN0IGNoYXIgKmVycm1zZywKLQkJCQkJCSBjb25zdCBjaGFyICpjb25maWdfZmlsZSwK LQkJCQkJCSBpbnQgbGluZW5vLAotCQkJCQkJIENvbmZpZ1ZhcmlhYmxlICoqaGVhZF9wLAotCQkJ CQkJIENvbmZpZ1ZhcmlhYmxlICoqdGFpbF9wKTsKLQogc3RhdGljIGludAlHVUNfZmxleF9mYXRh bChjb25zdCBjaGFyICptc2cpOwogc3RhdGljIGNoYXIgKkdVQ19zY2Fuc3RyKGNvbnN0IGNoYXIg KnMpOwogCkBAIC0xMTEsNDA0ICsxMTcsMzUgQEAgU1RSSU5HCQkJXCcoW14nXFxcbl18XFwufFwn XCcpKlwnCiAKIC8qIExDT1ZfRVhDTF9TVE9QICovCiAKLS8qCi0gKiBFeHBvcnRlZCBmdW5jdGlv biB0byByZWFkIGFuZCBwcm9jZXNzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoZQotICogcGFy YW1ldGVyIGluZGljYXRlcyBpbiB3aGF0IGNvbnRleHQgdGhlIGZpbGUgaXMgYmVpbmcgcmVhZCAt LS0gZWl0aGVyCi0gKiBwb3N0bWFzdGVyIHN0YXJ0dXAgKGluY2x1ZGluZyBzdGFuZGFsb25lLWJh Y2tlbmQgc3RhcnR1cCkgb3IgU0lHSFVQLgotICogQWxsIG9wdGlvbnMgbWVudGlvbmVkIGluIHRo ZSBjb25maWd1cmF0aW9uIGZpbGUgYXJlIHNldCB0byBuZXcgdmFsdWVzLgotICogSWYgYSBoYXJk IGVycm9yIG9jY3Vycywgbm8gdmFsdWVzIHdpbGwgYmUgY2hhbmdlZC4gIChUaGVyZSBjYW4gYWxz byBiZQotICogZXJyb3JzIHRoYXQgcHJldmVudCBqdXN0IG9uZSB2YWx1ZSBmcm9tIGJlaW5nIGNo YW5nZWQuKQotICovCi12b2lkCi1Qcm9jZXNzQ29uZmlnRmlsZShHdWNDb250ZXh0IGNvbnRleHQp Ci17Ci0JaW50CQkJZWxldmVsOwotCU1lbW9yeUNvbnRleHQgY29uZmlnX2N4dDsKLQlNZW1vcnlD b250ZXh0IGNhbGxlcl9jeHQ7Ci0KLQkvKgotCSAqIENvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2Vk IG9uIHN0YXJ0dXAgKGJ5IHRoZSBwb3N0bWFzdGVyIG9ubHkpIGFuZCBvbgotCSAqIFNJR0hVUCAo YnkgdGhlIHBvc3RtYXN0ZXIgYW5kIGl0cyBjaGlsZHJlbikKLQkgKi8KLQlBc3NlcnQoKGNvbnRl eHQgPT0gUEdDX1BPU1RNQVNURVIgJiYgIUlzVW5kZXJQb3N0bWFzdGVyKSB8fAotCQkgICBjb250 ZXh0ID09IFBHQ19TSUdIVVApOwotCi0JLyoKLQkgKiBUbyBhdm9pZCBjbHV0dGVyaW5nIHRoZSBs b2csIG9ubHkgdGhlIHBvc3RtYXN0ZXIgYmxlYXRzIGxvdWRseSBhYm91dAotCSAqIHByb2JsZW1z IHdpdGggdGhlIGNvbmZpZyBmaWxlLgotCSAqLwotCWVsZXZlbCA9IElzVW5kZXJQb3N0bWFzdGVy ID8gREVCVUcyIDogTE9HOwotCi0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2Fs bGVkIHdpdGhpbiBhIHByb2Nlc3MtbGlmZXNwYW4gbWVtb3J5Ci0JICogY29udGV4dC4gIFRvIGVu c3VyZSB0aGF0IGFueSBtZW1vcnkgbGVha2VkIGR1cmluZyBHVUMgcHJvY2Vzc2luZyBkb2VzCi0J ICogbm90IGFjY3VtdWxhdGUgYWNyb3NzIHJlcGVhdGVkIFNJR0hVUCBjeWNsZXMsIGRvIHRoZSB3 b3JrIGluIGEgcHJpdmF0ZQotCSAqIGNvbnRleHQgdGhhdCB3ZSBjYW4gZnJlZSBhdCBleGl0Lgot CSAqLwotCWNvbmZpZ19jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsCi0JCQkJCQkJCQkgICAiY29uZmlnIGZpbGUgcHJvY2Vzc2luZyIsCi0JCQkJCQkJCQkg ICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKLQljYWxsZXJfY3h0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGNvbmZpZ19jeHQpOwotCi0JLyoKLQkgKiBSZWFkIGFuZCBhcHBseSB0aGUgY29uZmln IGZpbGUuICBXZSBkb24ndCBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlc3VsdC4KLQkgKi8KLQkodm9p ZCkgUHJvY2Vzc0NvbmZpZ0ZpbGVJbnRlcm5hbChjb250ZXh0LCB0cnVlLCBlbGV2ZWwpOwotCi0J LyogQ2xlYW4gdXAgKi8KLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY2FsbGVyX2N4dCk7Ci0JTWVt b3J5Q29udGV4dERlbGV0ZShjb25maWdfY3h0KTsKLX0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24g aGFuZGxlcyBib3RoIGFjdHVhbCBjb25maWcgZmlsZSAocmUpbG9hZHMgYW5kIGV4ZWN1dGlvbiBv ZgotICogc2hvd19hbGxfZmlsZV9zZXR0aW5ncygpIChpLmUuLCB0aGUgcGdfZmlsZV9zZXR0aW5n cyB2aWV3KS4gIEluIHRoZSBsYXR0ZXIKLSAqIGNhc2Ugd2UgZG9uJ3QgYXBwbHkgYW55IG9mIHRo ZSBzZXR0aW5ncywgYnV0IHdlIG1ha2UgYWxsIHRoZSB1c3VhbCB2YWxpZGl0eQotICogY2hlY2tz LCBhbmQgd2UgcmV0dXJuIHRoZSBDb25maWdWYXJpYWJsZSBsaXN0IHNvIHRoYXQgaXQgY2FuIGJl IHByaW50ZWQgb3V0Ci0gKiBieSBzaG93X2FsbF9maWxlX3NldHRpbmdzKCkuCisgKiBUaGUgYmFy ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBHVUMgbmFtZXMuCiAgKi8KLXN0YXRpYyBDb25maWdW YXJpYWJsZSAqCi1Qcm9jZXNzQ29uZmlnRmlsZUludGVybmFsKEd1Y0NvbnRleHQgY29udGV4dCwg Ym9vbCBhcHBseVNldHRpbmdzLCBpbnQgZWxldmVsKQoraW50CitndWNfbmFtZV9jb21wYXJlKGNv bnN0IGNoYXIgKm5hbWVhLCBjb25zdCBjaGFyICpuYW1lYikKIHsKLQlib29sCQllcnJvciA9IGZh bHNlOwotCWJvb2wJCWFwcGx5aW5nID0gZmFsc2U7Ci0JY29uc3QgY2hhciAqQ29uZkZpbGVXaXRo RXJyb3I7Ci0JQ29uZmlnVmFyaWFibGUgKml0ZW0sCi0JCQkgICAqaGVhZCwKLQkJCSAgICp0YWls OwotCWludAkJCWk7Ci0KLQkvKiBQYXJzZSB0aGUgbWFpbiBjb25maWcgZmlsZSBpbnRvIGEgbGlz dCBvZiBvcHRpb24gbmFtZXMgYW5kIHZhbHVlcyAqLwotCUNvbmZGaWxlV2l0aEVycm9yID0gQ29u ZmlnRmlsZU5hbWU7Ci0JaGVhZCA9IHRhaWwgPSBOVUxMOwotCi0JaWYgKCFQYXJzZUNvbmZpZ0Zp bGUoQ29uZmlnRmlsZU5hbWUsIHRydWUsCi0JCQkJCQkgTlVMTCwgMCwgMCwgZWxldmVsLAotCQkJ CQkJICZoZWFkLCAmdGFpbCkpCi0JewotCQkvKiBTeW50YXggZXJyb3IocykgZGV0ZWN0ZWQgaW4g dGhlIGZpbGUsIHNvIGJhaWwgb3V0ICovCi0JCWVycm9yID0gdHJ1ZTsKLQkJZ290byBiYWlsX291 dDsKLQl9Ci0KLQkvKgotCSAqIFBhcnNlIHRoZSBQR19BVVRPQ09ORl9GSUxFTkFNRSBmaWxlLCBp ZiBwcmVzZW50LCBhZnRlciB0aGUgbWFpbiBmaWxlIHRvCi0JICogcmVwbGFjZSBhbnkgcGFyYW1l dGVycyBzZXQgYnkgQUxURVIgU1lTVEVNIGNvbW1hbmQuICBCZWNhdXNlIHRoaXMgZmlsZQotCSAq IGlzIGluIHRoZSBkYXRhIGRpcmVjdG9yeSwgd2UgY2FuJ3QgcmVhZCBpdCB1bnRpbCB0aGUgRGF0 YURpciBoYXMgYmVlbgotCSAqIHNldC4KLQkgKi8KLQlpZiAoRGF0YURpcikKLQl7Ci0JCWlmICgh UGFyc2VDb25maWdGaWxlKFBHX0FVVE9DT05GX0ZJTEVOQU1FLCBmYWxzZSwKLQkJCQkJCQkgTlVM TCwgMCwgMCwgZWxldmVsLAotCQkJCQkJCSAmaGVhZCwgJnRhaWwpKQotCQl7Ci0JCQkvKiBTeW50 YXggZXJyb3IocykgZGV0ZWN0ZWQgaW4gdGhlIGZpbGUsIHNvIGJhaWwgb3V0ICovCi0JCQllcnJv ciA9IHRydWU7Ci0JCQlDb25mRmlsZVdpdGhFcnJvciA9IFBHX0FVVE9DT05GX0ZJTEVOQU1FOwot CQkJZ290byBiYWlsX291dDsKLQkJfQotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBJZiBEYXRh RGlyIGlzIG5vdCBzZXQsIHRoZSBQR19BVVRPQ09ORl9GSUxFTkFNRSBmaWxlIGNhbm5vdCBiZQot CQkgKiByZWFkLiAgSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGFjY2VwdCBhbnkgc2V0 dGluZ3MgYnV0Ci0JCSAqIGRhdGFfZGlyZWN0b3J5IGZyb20gcG9zdGdyZXNxbC5jb25mLCBiZWNh dXNlIHRoZXkgbWlnaHQgYmUKLQkJICogb3ZlcndyaXR0ZW4gd2l0aCBzZXR0aW5ncyBpbiB0aGUg UEdfQVVUT0NPTkZfRklMRU5BTUUgZmlsZSB3aGljaAotCQkgKiB3aWxsIGJlIHJlYWQgbGF0ZXIu IE9UT0gsIHNpbmNlIGRhdGFfZGlyZWN0b3J5IGlzbid0IGFsbG93ZWQgaW4gdGhlCi0JCSAqIFBH X0FVVE9DT05GX0ZJTEVOQU1FIGZpbGUsIGl0IHdpbGwgbmV2ZXIgYmUgb3ZlcndyaXR0ZW4gbGF0 ZXIuCi0JCSAqLwotCQlDb25maWdWYXJpYWJsZSAqbmV3bGlzdCA9IE5VTEw7Ci0KLQkJLyoKLQkJ ICogUHJ1bmUgYWxsIGl0ZW1zIGV4Y2VwdCB0aGUgbGFzdCAiZGF0YV9kaXJlY3RvcnkiIGZyb20g dGhlIGxpc3QuCi0JCSAqLwotCQlmb3IgKGl0ZW0gPSBoZWFkOyBpdGVtOyBpdGVtID0gaXRlbS0+ bmV4dCkKLQkJewotCQkJaWYgKCFpdGVtLT5pZ25vcmUgJiYKLQkJCQlzdHJjbXAoaXRlbS0+bmFt ZSwgImRhdGFfZGlyZWN0b3J5IikgPT0gMCkKLQkJCQluZXdsaXN0ID0gaXRlbTsKLQkJfQotCi0J CWlmIChuZXdsaXN0KQotCQkJbmV3bGlzdC0+bmV4dCA9IE5VTEw7Ci0JCWhlYWQgPSB0YWlsID0g bmV3bGlzdDsKLQotCQkvKgotCQkgKiBRdWljayBleGl0IGlmIGRhdGFfZGlyZWN0b3J5IGlzIG5v dCBwcmVzZW50IGluIGZpbGUuCi0JCSAqCi0JCSAqIFdlIG5lZWQgbm90IGRvIGFueSBmdXJ0aGVy IHByb2Nlc3NpbmcsIGluIHBhcnRpY3VsYXIgd2UgZG9uJ3Qgc2V0Ci0JCSAqIFBnUmVsb2FkVGlt ZTsgdGhhdCB3aWxsIGJlIHNldCBzb29uIGJ5IHN1YnNlcXVlbnQgZnVsbCBsb2FkaW5nIG9mCi0J CSAqIHRoZSBjb25maWcgZmlsZS4KLQkJICovCi0JCWlmIChoZWFkID09IE5VTEwpCi0JCQlnb3Rv IGJhaWxfb3V0OwotCX0KLQogCS8qCi0JICogTWFyayBhbGwgZXh0YW50IEdVQyB2YXJpYWJsZXMg YXMgbm90IHByZXNlbnQgaW4gdGhlIGNvbmZpZyBmaWxlLiBXZQotCSAqIG5lZWQgdGhpcyBzbyB0 aGF0IHdlIGNhbiB0ZWxsIGJlbG93IHdoaWNoIG9uZXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbQot CSAqIHRoZSBmaWxlIHNpbmNlIHdlIGxhc3QgcHJvY2Vzc2VkIGl0LgorCSAqIFRoZSB0ZW1wdGF0 aW9uIHRvIHVzZSBzdHJjYXNlY21wKCkgaGVyZSBtdXN0IGJlIHJlc2lzdGVkLCBiZWNhdXNlIHRo ZQorCSAqIGFycmF5IG9yZGVyaW5nIGhhcyB0byByZW1haW4gc3RhYmxlIGFjcm9zcyBzZXRsb2Nh bGUoKSBjYWxscy4gU28sIGJ1aWxkCisJICogb3VyIG93biB3aXRoIGEgc2ltcGxlIEFTQ0lJLW9u bHkgZG93bmNhc2luZy4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2d1Y192YXJpYWJsZXM7 IGkrKykKKwl3aGlsZSAoKm5hbWVhICYmICpuYW1lYikKIAl7Ci0JCXN0cnVjdCBjb25maWdfZ2Vu ZXJpYyAqZ2NvbmYgPSBndWNfdmFyaWFibGVzW2ldOwotCi0JCWdjb25mLT5zdGF0dXMgJj0gfkdV Q19JU19JTl9GSUxFOworCQljaGFyCQljaGEgPSAqbmFtZWErKzsKKwkJY2hhcgkJY2hiID0gKm5h bWViKys7CisKKwkJaWYgKGNoYSA+PSAnQScgJiYgY2hhIDw9ICdaJykKKwkJCWNoYSArPSAnYScg LSAnQSc7CisJCWlmIChjaGIgPj0gJ0EnICYmIGNoYiA8PSAnWicpCisJCQljaGIgKz0gJ2EnIC0g J0EnOworCQlpZiAoY2hhICE9IGNoYikKKwkJCXJldHVybiBjaGEgLSBjaGI7CiAJfQotCi0JLyoK LQkgKiBDaGVjayBpZiBhbGwgdGhlIHN1cHBsaWVkIG9wdGlvbiBuYW1lcyBhcmUgdmFsaWQsIGFz IGFuIGFkZGl0aW9uYWwKLQkgKiBxdWFzaS1zeW50YWN0aWMgY2hlY2sgb24gdGhlIHZhbGlkaXR5 IG9mIHRoZSBjb25maWcgZmlsZS4gIEl0IGlzCi0JICogaW1wb3J0YW50IHRoYXQgdGhlIHBvc3Rt YXN0ZXIgYW5kIGFsbCBiYWNrZW5kcyBhZ3JlZSBvbiB0aGUgcmVzdWx0cyBvZgotCSAqIHRoaXMg cGhhc2UsIGVsc2Ugd2Ugd2lsbCBoYXZlIHN0cmFuZ2UgaW5jb25zaXN0ZW5jaWVzIGFib3V0IHdo aWNoCi0JICogcHJvY2Vzc2VzIGFjY2VwdCBhIGNvbmZpZyBmaWxlIHVwZGF0ZSBhbmQgd2hpY2gg ZG9uJ3QuICBIZW5jZSwgdW5rbm93bgotCSAqIGN1c3RvbSB2YXJpYWJsZSBuYW1lcyBoYXZlIHRv IGJlIGFjY2VwdGVkIHdpdGhvdXQgY29tcGxhaW50LiAgRm9yIHRoZQotCSAqIHNhbWUgcmVhc29u LCB3ZSBkb24ndCBhdHRlbXB0IHRvIHZhbGlkYXRlIHRoZSBvcHRpb25zJyB2YWx1ZXMgaGVyZS4K LQkgKgotCSAqIEluIGFkZGl0aW9uLCB0aGUgR1VDX0lTX0lOX0ZJTEUgZmxhZyBpcyBzZXQgb24g ZWFjaCBleGlzdGluZyBHVUMKLQkgKiB2YXJpYWJsZSBtZW50aW9uZWQgaW4gdGhlIGZpbGU7IGFu ZCB3ZSBkZXRlY3QgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlCi0JICogZmlsZSBhbmQgbWFyayB0 aGUgZWFybGllciBvY2N1cnJlbmNlcyBhcyBpZ25vcmFibGUuCi0JICovCi0JZm9yIChpdGVtID0g aGVhZDsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpCi0JewotCQlzdHJ1Y3QgY29uZmlnX2dlbmVy aWMgKnJlY29yZDsKLQotCQkvKiBJZ25vcmUgYW55dGhpbmcgYWxyZWFkeSBtYXJrZWQgYXMgaWdu b3JhYmxlICovCi0JCWlmIChpdGVtLT5pZ25vcmUpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkg KiBUcnkgdG8gZmluZCB0aGUgdmFyaWFibGU7IGJ1dCBkbyBub3QgY3JlYXRlIGEgY3VzdG9tIHBs YWNlaG9sZGVyIGlmCi0JCSAqIGl0J3Mgbm90IHRoZXJlIGFscmVhZHkuCi0JCSAqLwotCQlyZWNv cmQgPSBmaW5kX29wdGlvbihpdGVtLT5uYW1lLCBmYWxzZSwgZWxldmVsKTsKLQotCQlpZiAocmVj b3JkKQotCQl7Ci0JCQkvKiBJZiBpdCdzIGFscmVhZHkgbWFya2VkLCB0aGVuIHRoaXMgaXMgYSBk dXBsaWNhdGUgZW50cnkgKi8KLQkJCWlmIChyZWNvcmQtPnN0YXR1cyAmIEdVQ19JU19JTl9GSUxF KQotCQkJewotCQkJCS8qCi0JCQkJICogTWFyayB0aGUgZWFybGllciBvY2N1cnJlbmNlKHMpIGFz IGRlYWQvaWdub3JhYmxlLiAgV2UgY291bGQKLQkJCQkgKiBhdm9pZCB0aGUgTyhOXjIpIGJlaGF2 aW9yIGhlcmUgd2l0aCBzb21lIGFkZGl0aW9uYWwgc3RhdGUsCi0JCQkJICogYnV0IGl0IHNlZW1z IHVubGlrZWx5IHRvIGJlIHdvcnRoIHRoZSB0cm91YmxlLgotCQkJCSAqLwotCQkJCUNvbmZpZ1Zh cmlhYmxlICpwaXRlbTsKLQotCQkJCWZvciAocGl0ZW0gPSBoZWFkOyBwaXRlbSAhPSBpdGVtOyBw aXRlbSA9IHBpdGVtLT5uZXh0KQotCQkJCXsKLQkJCQkJaWYgKCFwaXRlbS0+aWdub3JlICYmCi0J CQkJCQlzdHJjbXAocGl0ZW0tPm5hbWUsIGl0ZW0tPm5hbWUpID09IDApCi0JCQkJCQlwaXRlbS0+ aWdub3JlID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBOb3cgbWFyayBpdCBhcyBwcmVzZW50 IGluIGZpbGUgKi8KLQkJCXJlY29yZC0+c3RhdHVzIHw9IEdVQ19JU19JTl9GSUxFOwotCQl9Ci0J CWVsc2UgaWYgKHN0cmNocihpdGVtLT5uYW1lLCBHVUNfUVVBTElGSUVSX1NFUEFSQVRPUikgPT0g TlVMTCkKLQkJewotCQkJLyogSW52YWxpZCBub24tY3VzdG9tIHZhcmlhYmxlLCBzbyBjb21wbGFp biAqLwotCQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVE X09CSkVDVCksCi0JCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBjb25maWd1cmF0aW9uIHBhcmFt ZXRlciBcIiVzXCIgaW4gZmlsZSBcIiVzXCIgbGluZSAldSIsCi0JCQkJCQkJaXRlbS0+bmFtZSwK LQkJCQkJCQlpdGVtLT5maWxlbmFtZSwgaXRlbS0+c291cmNlbGluZSkpKTsKLQkJCWl0ZW0tPmVy cm1zZyA9IHBzdHJkdXAoInVucmVjb2duaXplZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciIpOwot CQkJZXJyb3IgPSB0cnVlOwotCQkJQ29uZkZpbGVXaXRoRXJyb3IgPSBpdGVtLT5maWxlbmFtZTsK LQkJfQotCX0KLQotCS8qCi0JICogSWYgd2UndmUgZGV0ZWN0ZWQgYW55IGVycm9ycyBzbyBmYXIs IHdlIGRvbid0IHdhbnQgdG8gcmlzayBhcHBseWluZyBhbnkKLQkgKiBjaGFuZ2VzLgotCSAqLwot CWlmIChlcnJvcikKLQkJZ290byBiYWlsX291dDsKLQotCS8qIE90aGVyd2lzZSwgc2V0IGZsYWcg dGhhdCB3ZSdyZSBiZWdpbm5pbmcgdG8gYXBwbHkgY2hhbmdlcyAqLwotCWFwcGx5aW5nID0gdHJ1 ZTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIHZhcmlhYmxlcyBoYXZpbmcgYmVlbiByZW1vdmVkIGZy b20gdGhlIGNvbmZpZyBmaWxlLCBhbmQKLQkgKiByZXZlcnQgdGhlaXIgcmVzZXQgdmFsdWVzIChh bmQgcGVyaGFwcyBhbHNvIGVmZmVjdGl2ZSB2YWx1ZXMpIHRvIHRoZQotCSAqIGJvb3QtdGltZSBk ZWZhdWx0cy4gIElmIHN1Y2ggYSB2YXJpYWJsZSBjYW4ndCBiZSBjaGFuZ2VkIGFmdGVyIHN0YXJ0 dXAsCi0JICogcmVwb3J0IHRoYXQgYW5kIGNvbnRpbnVlLgotCSAqLwotCWZvciAoaSA9IDA7IGkg PCBudW1fZ3VjX3ZhcmlhYmxlczsgaSsrKQotCXsKLQkJc3RydWN0IGNvbmZpZ19nZW5lcmljICpn Y29uZiA9IGd1Y192YXJpYWJsZXNbaV07Ci0JCUd1Y1N0YWNrICAgKnN0YWNrOwotCi0JCWlmIChn Y29uZi0+cmVzZXRfc291cmNlICE9IFBHQ19TX0ZJTEUgfHwKLQkJCShnY29uZi0+c3RhdHVzICYg R1VDX0lTX0lOX0ZJTEUpKQotCQkJY29udGludWU7Ci0JCWlmIChnY29uZi0+Y29udGV4dCA8IFBH Q19TSUdIVVApCi0JCXsKLQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkoZXJyY29kZShFUlJDT0RF X0NBTlRfQ0hBTkdFX1JVTlRJTUVfUEFSQU0pLAotCQkJCQkgZXJybXNnKCJwYXJhbWV0ZXIgXCIl c1wiIGNhbm5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgcmVzdGFydGluZyB0aGUgc2VydmVyIiwKLQkJ CQkJCQlnY29uZi0+bmFtZSkpKTsKLQkJCXJlY29yZF9jb25maWdfZmlsZV9lcnJvcihwc3ByaW50 ZigicGFyYW1ldGVyIFwiJXNcIiBjYW5ub3QgYmUgY2hhbmdlZCB3aXRob3V0IHJlc3RhcnRpbmcg dGhlIHNlcnZlciIsCi0JCQkJCQkJCQkJCSAgZ2NvbmYtPm5hbWUpLAotCQkJCQkJCQkJIE5VTEws IDAsCi0JCQkJCQkJCQkgJmhlYWQsICZ0YWlsKTsKLQkJCWVycm9yID0gdHJ1ZTsKLQkJCWNvbnRp bnVlOwotCQl9Ci0KLQkJLyogTm8gbW9yZSB0byBkbyBpZiB3ZSdyZSBqdXN0IGRvaW5nIHNob3df YWxsX2ZpbGVfc2V0dGluZ3MoKSAqLwotCQlpZiAoIWFwcGx5U2V0dGluZ3MpCi0JCQljb250aW51 ZTsKLQotCQkvKgotCQkgKiBSZXNldCBhbnkgImZpbGUiIHNvdXJjZXMgdG8gImRlZmF1bHQiLCBl bHNlIHNldF9jb25maWdfb3B0aW9uIHdpbGwKLQkJICogbm90IG92ZXJyaWRlIHRob3NlIHNldHRp bmdzLgotCQkgKi8KLQkJaWYgKGdjb25mLT5yZXNldF9zb3VyY2UgPT0gUEdDX1NfRklMRSkKLQkJ CWdjb25mLT5yZXNldF9zb3VyY2UgPSBQR0NfU19ERUZBVUxUOwotCQlpZiAoZ2NvbmYtPnNvdXJj ZSA9PSBQR0NfU19GSUxFKQotCQkJZ2NvbmYtPnNvdXJjZSA9IFBHQ19TX0RFRkFVTFQ7Ci0JCWZv ciAoc3RhY2sgPSBnY29uZi0+c3RhY2s7IHN0YWNrOyBzdGFjayA9IHN0YWNrLT5wcmV2KQotCQl7 Ci0JCQlpZiAoc3RhY2stPnNvdXJjZSA9PSBQR0NfU19GSUxFKQotCQkJCXN0YWNrLT5zb3VyY2Ug PSBQR0NfU19ERUZBVUxUOwotCQl9Ci0KLQkJLyogTm93IHdlIGNhbiByZS1hcHBseSB0aGUgd2ly ZWQtaW4gZGVmYXVsdCAoaS5lLiwgdGhlIGJvb3RfdmFsKSAqLwotCQlpZiAoc2V0X2NvbmZpZ19v cHRpb24oZ2NvbmYtPm5hbWUsIE5VTEwsCi0JCQkJCQkJICBjb250ZXh0LCBQR0NfU19ERUZBVUxU LAotCQkJCQkJCSAgR1VDX0FDVElPTl9TRVQsIHRydWUsIDAsIGZhbHNlKSA+IDApCi0JCXsKLQkJ CS8qIExvZyB0aGUgY2hhbmdlIGlmIGFwcHJvcHJpYXRlICovCi0JCQlpZiAoY29udGV4dCA9PSBQ R0NfU0lHSFVQKQotCQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkJKGVycm1zZygicGFyYW1ldGVy IFwiJXNcIiByZW1vdmVkIGZyb20gY29uZmlndXJhdGlvbiBmaWxlLCByZXNldCB0byBkZWZhdWx0 IiwKLQkJCQkJCQkJZ2NvbmYtPm5hbWUpKSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFJlc3RvcmUg YW55IHZhcmlhYmxlcyBkZXRlcm1pbmVkIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlcyBvcgotCSAq IGR5bmFtaWNhbGx5LWNvbXB1dGVkIGRlZmF1bHRzLiAgVGhpcyBpcyBhIG5vLW9wIGV4Y2VwdCBp biB0aGUgY2FzZQotCSAqIHdoZXJlIG9uZSBvZiB0aGVzZSBoYWQgYmVlbiBpbiB0aGUgY29uZmln IGZpbGUgYW5kIGlzIG5vdyByZW1vdmVkLgotCSAqCi0JICogSW4gcGFydGljdWxhciwgd2UgKm11 c3Qgbm90KiBkbyB0aGlzIGR1cmluZyB0aGUgcG9zdG1hc3RlcidzIGluaXRpYWwKLQkgKiBsb2Fk aW5nIG9mIHRoZSBmaWxlLCBzaW5jZSB0aGUgdGltZXpvbmUgZnVuY3Rpb25zIGluIHBhcnRpY3Vs YXIgc2hvdWxkCi0JICogYmUgcnVuIG9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxl dGUuCi0JICoKLQkgKiBYWFggdGhpcyBpcyBhbiB1bm1haW50YWluYWJsZSBjcm9jaywgYmVjYXVz ZSB3ZSBoYXZlIHRvIGtub3cgaG93IHRvIHNldAotCSAqIChvciBhdCBsZWFzdCB3aGF0IHRvIGNh bGwgdG8gc2V0KSBldmVyeSB2YXJpYWJsZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5Ci0JICogaGF2 ZSBQR0NfU19EWU5BTUlDX0RFRkFVTFQgb3IgUEdDX1NfRU5WX1ZBUiBzb3VyY2UuIEhvd2V2ZXIs IHRoZXJlJ3Mgbm8KLQkgKiB0aW1lIHRvIHJlZGVzaWduIGl0IGZvciA5LjEuCi0JICovCi0JaWYg KGNvbnRleHQgPT0gUEdDX1NJR0hVUCAmJiBhcHBseVNldHRpbmdzKQotCXsKLQkJSW5pdGlhbGl6 ZUdVQ09wdGlvbnNGcm9tRW52aXJvbm1lbnQoKTsKLQkJcGdfdGltZXpvbmVfYWJicmV2X2luaXRp YWxpemUoKTsKLQkJLyogdGhpcyBzZWxlY3RzIFNRTF9BU0NJSSBpbiBwcm9jZXNzZXMgbm90IGNv bm5lY3RlZCB0byBhIGRhdGFiYXNlICovCi0JCVNldENvbmZpZ09wdGlvbigiY2xpZW50X2VuY29k aW5nIiwgR2V0RGF0YWJhc2VFbmNvZGluZ05hbWUoKSwKLQkJCQkJCVBHQ19CQUNLRU5ELCBQR0Nf U19EWU5BTUlDX0RFRkFVTFQpOwotCX0KLQotCS8qCi0JICogTm93IGFwcGx5IHRoZSB2YWx1ZXMg ZnJvbSB0aGUgY29uZmlnIGZpbGUuCi0JICovCi0JZm9yIChpdGVtID0gaGVhZDsgaXRlbTsgaXRl bSA9IGl0ZW0tPm5leHQpCi0JewotCQljaGFyCSAgICpwcmVfdmFsdWUgPSBOVUxMOwotCQlpbnQJ CQlzY3JlczsKLQotCQkvKiBJZ25vcmUgYW55dGhpbmcgbWFya2VkIGFzIGlnbm9yYWJsZSAqLwot CQlpZiAoaXRlbS0+aWdub3JlKQotCQkJY29udGludWU7Ci0KLQkJLyogSW4gU0lHSFVQIGNhc2Vz IGluIHRoZSBwb3N0bWFzdGVyLCB3ZSB3YW50IHRvIHJlcG9ydCBjaGFuZ2VzICovCi0JCWlmIChj b250ZXh0ID09IFBHQ19TSUdIVVAgJiYgYXBwbHlTZXR0aW5ncyAmJiAhSXNVbmRlclBvc3RtYXN0 ZXIpCi0JCXsKLQkJCWNvbnN0IGNoYXIgKnByZXZhbCA9IEdldENvbmZpZ09wdGlvbihpdGVtLT5u YW1lLCB0cnVlLCBmYWxzZSk7Ci0KLQkJCS8qIElmIG9wdGlvbiBkb2Vzbid0IGV4aXN0IHlldCBv ciBpcyBOVUxMLCB0cmVhdCBhcyBlbXB0eSBzdHJpbmcgKi8KLQkJCWlmICghcHJldmFsKQotCQkJ CXByZXZhbCA9ICIiOwotCQkJLyogbXVzdCBkdXAsIGVsc2UgbWlnaHQgaGF2ZSBkYW5nbGluZyBw b2ludGVyIGJlbG93ICovCi0JCQlwcmVfdmFsdWUgPSBwc3RyZHVwKHByZXZhbCk7Ci0JCX0KLQot CQlzY3JlcyA9IHNldF9jb25maWdfb3B0aW9uKGl0ZW0tPm5hbWUsIGl0ZW0tPnZhbHVlLAotCQkJ CQkJCQkgIGNvbnRleHQsIFBHQ19TX0ZJTEUsCi0JCQkJCQkJCSAgR1VDX0FDVElPTl9TRVQsIGFw cGx5U2V0dGluZ3MsIDAsIGZhbHNlKTsKLQkJaWYgKHNjcmVzID4gMCkKLQkJewotCQkJLyogdmFy aWFibGUgd2FzIHVwZGF0ZWQsIHNvIGxvZyB0aGUgY2hhbmdlIGlmIGFwcHJvcHJpYXRlICovCi0J CQlpZiAocHJlX3ZhbHVlKQotCQkJewotCQkJCWNvbnN0IGNoYXIgKnBvc3RfdmFsdWUgPSBHZXRD b25maWdPcHRpb24oaXRlbS0+bmFtZSwgdHJ1ZSwgZmFsc2UpOwotCi0JCQkJaWYgKCFwb3N0X3Zh bHVlKQotCQkJCQlwb3N0X3ZhbHVlID0gIiI7Ci0JCQkJaWYgKHN0cmNtcChwcmVfdmFsdWUsIHBv c3RfdmFsdWUpICE9IDApCi0JCQkJCWVyZXBvcnQoZWxldmVsLAotCQkJCQkJCShlcnJtc2coInBh cmFtZXRlciBcIiVzXCIgY2hhbmdlZCB0byBcIiVzXCIiLAotCQkJCQkJCQkJaXRlbS0+bmFtZSwg aXRlbS0+dmFsdWUpKSk7Ci0JCQl9Ci0JCQlpdGVtLT5hcHBsaWVkID0gdHJ1ZTsKLQkJfQotCQll bHNlIGlmIChzY3JlcyA9PSAwKQotCQl7Ci0JCQllcnJvciA9IHRydWU7Ci0JCQlpdGVtLT5lcnJt c2cgPSBwc3RyZHVwKCJzZXR0aW5nIGNvdWxkIG5vdCBiZSBhcHBsaWVkIik7Ci0JCQlDb25mRmls ZVdpdGhFcnJvciA9IGl0ZW0tPmZpbGVuYW1lOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogbm8g ZXJyb3IsIGJ1dCB2YXJpYWJsZSdzIGFjdGl2ZSB2YWx1ZSB3YXMgbm90IGNoYW5nZWQgKi8KLQkJ CWl0ZW0tPmFwcGxpZWQgPSB0cnVlOwotCQl9Ci0KLQkJLyoKLQkJICogV2Ugc2hvdWxkIHVwZGF0 ZSBzb3VyY2UgbG9jYXRpb24gdW5sZXNzIHRoZXJlIHdhcyBhbiBlcnJvciwgc2luY2UKLQkJICog ZXZlbiBpZiB0aGUgYWN0aXZlIHZhbHVlIGRpZG4ndCBjaGFuZ2UsIHRoZSByZXNldCB2YWx1ZSBt aWdodCBoYXZlLgotCQkgKiAoSW4gdGhlIHBvc3RtYXN0ZXIsIHRoZXJlIHdvbid0IGJlIGEgZGlm ZmVyZW5jZSwgYnV0IGl0IGRvZXMgbWF0dGVyCi0JCSAqIGluIGJhY2tlbmRzLikKLQkJICovCi0J CWlmIChzY3JlcyAhPSAwICYmIGFwcGx5U2V0dGluZ3MpCi0JCQlzZXRfY29uZmlnX3NvdXJjZWZp bGUoaXRlbS0+bmFtZSwgaXRlbS0+ZmlsZW5hbWUsCi0JCQkJCQkJCSAgaXRlbS0+c291cmNlbGlu ZSk7Ci0KLQkJaWYgKHByZV92YWx1ZSkKLQkJCXBmcmVlKHByZV92YWx1ZSk7Ci0JfQotCi0JLyog UmVtZW1iZXIgd2hlbiB3ZSBsYXN0IHN1Y2Nlc3NmdWxseSBsb2FkZWQgdGhlIGNvbmZpZyBmaWxl LiAqLwotCWlmIChhcHBseVNldHRpbmdzKQotCQlQZ1JlbG9hZFRpbWUgPSBHZXRDdXJyZW50VGlt ZXN0YW1wKCk7Ci0KLWJhaWxfb3V0OgotCWlmIChlcnJvciAmJiBhcHBseVNldHRpbmdzKQotCXsK LQkJLyogRHVyaW5nIHBvc3RtYXN0ZXIgc3RhcnR1cCwgYW55IGVycm9yIGlzIGZhdGFsICovCi0J CWlmIChjb250ZXh0ID09IFBHQ19QT1NUTUFTVEVSKQotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCi0JCQkJCSBlcnJtc2coImNvbmZp Z3VyYXRpb24gZmlsZSBcIiVzXCIgY29udGFpbnMgZXJyb3JzIiwKLQkJCQkJCQlDb25mRmlsZVdp dGhFcnJvcikpKTsKLQkJZWxzZSBpZiAoYXBwbHlpbmcpCi0JCQllcmVwb3J0KGVsZXZlbCwKLQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdfRklMRV9FUlJPUiksCi0JCQkJCSBlcnJtc2coImNv bmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIgY29udGFpbnMgZXJyb3JzOyB1bmFmZmVjdGVkIGNoYW5n ZXMgd2VyZSBhcHBsaWVkIiwKLQkJCQkJCQlDb25mRmlsZVdpdGhFcnJvcikpKTsKLQkJZWxzZQot CQkJZXJlcG9ydChlbGV2ZWwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHX0ZJTEVfRVJS T1IpLAotCQkJCQkgZXJybXNnKCJjb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIGNvbnRhaW5zIGVy cm9yczsgbm8gY2hhbmdlcyB3ZXJlIGFwcGxpZWQiLAotCQkJCQkJCUNvbmZGaWxlV2l0aEVycm9y KSkpOwotCX0KLQotCS8qIFN1Y2Nlc3NmdWwgb3Igb3RoZXJ3aXNlLCByZXR1cm4gdGhlIGNvbGxl Y3RlZCBkYXRhIGxpc3QgKi8KLQlyZXR1cm4gaGVhZDsKKwlpZiAoKm5hbWVhKQorCQlyZXR1cm4g MTsJCQkJLyogYSBpcyBsb25nZXIgKi8KKwlpZiAoKm5hbWViKQorCQlyZXR1cm4gLTE7CQkJCS8q IGIgaXMgbG9uZ2VyICovCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01MjUsNiArMTYyLDcgQEAg QWJzb2x1dGVDb25maWdMb2NhdGlvbihjb25zdCBjaGFyICpsb2NhdGlvbiwgY29uc3QgY2hhciAq Y2FsbGluZ19maWxlKQogCQlyZXR1cm4gcHN0cmR1cChsb2NhdGlvbik7CiAJZWxzZQogCXsKKwkJ I2lmbmRlZiBGUk9OVEVORAogCQlpZiAoY2FsbGluZ19maWxlICE9IE5VTEwpCiAJCXsKIAkJCXN0 cmxjcHkoYWJzX3BhdGgsIGNhbGxpbmdfZmlsZSwgc2l6ZW9mKGFic19wYXRoKSk7CkBAIC01Mzgs NiArMTc2LDEyIEBAIEFic29sdXRlQ29uZmlnTG9jYXRpb24oY29uc3QgY2hhciAqbG9jYXRpb24s IGNvbnN0IGNoYXIgKmNhbGxpbmdfZmlsZSkKIAkJCWpvaW5fcGF0aF9jb21wb25lbnRzKGFic19w YXRoLCBEYXRhRGlyLCBsb2NhdGlvbik7CiAJCQljYW5vbmljYWxpemVfcGF0aChhYnNfcGF0aCk7 CiAJCX0KKwkJI2Vsc2UKKwkJc3RybGNweShhYnNfcGF0aCwgY2FsbGluZ19maWxlLCBzaXplb2Yo YWJzX3BhdGgpKTsKKwkJZ2V0X3BhcmVudF9kaXJlY3RvcnkoYWJzX3BhdGgpOworCQlqb2luX3Bh dGhfY29tcG9uZW50cyhhYnNfcGF0aCwgYWJzX3BhdGgsIGxvY2F0aW9uKTsKKwkJY2Fub25pY2Fs aXplX3BhdGgoYWJzX3BhdGgpOworCQkjZW5kaWYKIAkJcmV0dXJuIHBzdHJkdXAoYWJzX3BhdGgp OwogCX0KIH0KQEAgLTU3NCwxMCArMjE4LDE1IEBAIFBhcnNlQ29uZmlnRmlsZShjb25zdCBjaGFy ICpjb25maWdfZmlsZSwgYm9vbCBzdHJpY3QsCiAJICovCiAJaWYgKGRlcHRoID4gMTApCiAJewor CQkjaWZuZGVmIEZST05URU5ECiAJCWVyZXBvcnQoZWxldmVsLAogCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCiAJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4g Y29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIjogbWF4aW11bSBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVk IiwKIAkJCQkJCWNvbmZpZ19maWxlKSkpOworCQkjZWxzZQorCQlwcmludGYoXygiY291bGQgbm90 IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIjogbWF4aW11bSBuZXN0aW5nIGRlcHRoIGV4 Y2VlZGVkXG4iKSwKKwkJCQljb25maWdfZmlsZSk7CisJCSNlbmRpZgogCQlyZWNvcmRfY29uZmln X2ZpbGVfZXJyb3IoIm5lc3RpbmcgZGVwdGggZXhjZWVkZWQiLAogCQkJCQkJCQkgY2FsbGluZ19m aWxlLCBjYWxsaW5nX2xpbmVubywKIAkJCQkJCQkJIGhlYWRfcCwgdGFpbF9wKTsKQEAgLTU4NSwx NSArMjM0LDIzIEBAIFBhcnNlQ29uZmlnRmlsZShjb25zdCBjaGFyICpjb25maWdfZmlsZSwgYm9v bCBzdHJpY3QsCiAJfQogCiAJYWJzX3BhdGggPSBBYnNvbHV0ZUNvbmZpZ0xvY2F0aW9uKGNvbmZp Z19maWxlLCBjYWxsaW5nX2ZpbGUpOworCSNpZm5kZWYgRlJPTlRFTkQKIAlmcCA9IEFsbG9jYXRl RmlsZShhYnNfcGF0aCwgInIiKTsKKwkjZWxzZQorCWZwID0gZm9wZW4oYWJzX3BhdGgsICJyIik7 CisJI2VuZGlmCiAJaWYgKCFmcCkKIAl7CiAJCWlmIChzdHJpY3QpCiAJCXsKKwkJCSNpZm5kZWYg RlJPTlRFTkQKIAkJCWVyZXBvcnQoZWxldmVsLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKIAkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlIFwi JXNcIjogJW0iLAogCQkJCQkJCWFic19wYXRoKSkpOworCQkJI2Vsc2UKKwkJCXByaW50ZihfKCJj b3VsZCBub3Qgb3BlbiBjb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiXG4iKSwgYWJzX3BhdGgpOwor CQkJI2VuZGlmCiAJCQlyZWNvcmRfY29uZmlnX2ZpbGVfZXJyb3IocHNwcmludGYoImNvdWxkIG5v dCBvcGVuIGZpbGUgXCIlc1wiIiwKIAkJCQkJCQkJCQkJICBhYnNfcGF0aCksCiAJCQkJCQkJCQkg Y2FsbGluZ19maWxlLCBjYWxsaW5nX2xpbmVubywKQEAgLTYwMiw5ICsyNTksMTMgQEAgUGFyc2VD b25maWdGaWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlLCBib29sIHN0cmljdCwKIAkJfQogCQll bHNlCiAJCXsKKwkJCSNpZm5kZWYgRlJPTlRFTkQKIAkJCWVyZXBvcnQoTE9HLAogCQkJCQkoZXJy bXNnKCJza2lwcGluZyBtaXNzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIiLAogCQkJCQkJ CWFic19wYXRoKSkpOworCQkJI2Vsc2UKKwkJCXByaW50ZihfKCJza2lwcGluZyBtaXNzaW5nIGNv bmZpZ3VyYXRpb24gZmlsZSBcIiVzXCJcbiIpLCBhYnNfcGF0aCk7CisJCQkjZW5kaWYKIAkJfQog CQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtNjEzLDcgKzI3NCwxNCBAQCBQYXJzZUNvbmZpZ0ZpbGUo Y29uc3QgY2hhciAqY29uZmlnX2ZpbGUsIGJvb2wgc3RyaWN0LAogCiBjbGVhbnVwOgogCWlmIChm cCkKKwl7CisJCSNpZm5kZWYgRlJPTlRFTkQKIAkJRnJlZUZpbGUoZnApOworCQkjZWxzZQorCQlm Y2xvc2UoZnApOworCQkjZW5kaWYKKwl9CisKIAlwZnJlZShhYnNfcGF0aCk7CiAKIAlyZXR1cm4g T0s7CkBAIC02MjMsNyArMjkxLDcgQEAgY2xlYW51cDoKICAqIENhcHR1cmUgYW4gZXJyb3IgbWVz c2FnZSBpbiB0aGUgQ29uZmlnVmFyaWFibGUgbGlzdCByZXR1cm5lZCBieQogICogY29uZmlnIGZp bGUgcGFyc2luZy4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHJlY29yZF9jb25maWdfZmlsZV9l cnJvcihjb25zdCBjaGFyICplcnJtc2csCiAJCQkJCQkgY29uc3QgY2hhciAqY29uZmlnX2ZpbGUs CiAJCQkJCQkgaW50IGxpbmVubywKQEAgLTcxNSw4ICszODMsMTMgQEAgUGFyc2VDb25maWdGcChG SUxFICpmcCwgY29uc3QgY2hhciAqY29uZmlnX2ZpbGUsIGludCBkZXB0aCwgaW50IGVsZXZlbCwK IAkJICogY29ycnVwdGVkIHBhcnNlciBzdGF0ZS4gIENvbnNlcXVlbnRseSwgYWJhbmRvbiB0aGUg ZmlsZSwgYnV0IHRydXN0CiAJCSAqIHRoYXQgdGhlIHN0YXRlIHJlbWFpbnMgc2FuZSBlbm91Z2gg Zm9yIHl5X2RlbGV0ZV9idWZmZXIoKS4KIAkJICovCisJCSNpZm5kZWYgRlJPTlRFTkQKIAkJZWxv ZyhlbGV2ZWwsICIlcyBhdCBmaWxlIFwiJXNcIiBsaW5lICV1IiwKIAkJCSBHVUNfZmxleF9mYXRh bF9lcnJtc2csIGNvbmZpZ19maWxlLCBDb25maWdGaWxlTGluZW5vKTsKKwkJI2Vsc2UKKwkJcHJp bnRmKF8oIiVzIGF0IGZpbGUgXCIlc1wiIGxpbmUgJXVcbiIpLAorCQkJCUdVQ19mbGV4X2ZhdGFs X2Vycm1zZywgY29uZmlnX2ZpbGUsIENvbmZpZ0ZpbGVMaW5lbm8pOworCQkjZW5kaWYKIAkJcmVj b3JkX2NvbmZpZ19maWxlX2Vycm9yKEdVQ19mbGV4X2ZhdGFsX2Vycm1zZywKIAkJCQkJCQkJIGNv bmZpZ19maWxlLCBDb25maWdGaWxlTGluZW5vLAogCQkJCQkJCQkgaGVhZF9wLCB0YWlsX3ApOwpA QCAtODU1LDIwICs1MjgsMzAgQEAgcGFyc2VfZXJyb3I6CiAJCS8qIHJlcG9ydCB0aGUgZXJyb3Ig Ki8KIAkJaWYgKHRva2VuID09IEdVQ19FT0wgfHwgdG9rZW4gPT0gMCkKIAkJeworCQkJI2lmbmRl ZiBGUk9OVEVORAogCQkJZXJlcG9ydChlbGV2ZWwsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKIAkJCSAgZXJybXNnKCJzeW50YXggZXJyb3IgaW4gZmlsZSBcIiVzXCIgbGlu ZSAldSwgbmVhciBlbmQgb2YgbGluZSIsCiAJCQkJCSBjb25maWdfZmlsZSwgQ29uZmlnRmlsZUxp bmVubyAtIDEpKSk7CisJCQkjZWxzZQorCQkJcHJpbnRmKF8oInN5bnRheCBlcnJvciBpbiBmaWxl IFwiJXNcIiBsaW5lICV1LCBuZWFyIGVuZCBvZiBsaW5lXG4iKSwKKwkJCQkJCQkJCQkJY29uZmln X2ZpbGUsIENvbmZpZ0ZpbGVMaW5lbm8gLSAxKTsKKwkJCSNlbmRpZgogCQkJcmVjb3JkX2NvbmZp Z19maWxlX2Vycm9yKCJzeW50YXggZXJyb3IiLAogCQkJCQkJCQkJIGNvbmZpZ19maWxlLCBDb25m aWdGaWxlTGluZW5vIC0gMSwKIAkJCQkJCQkJCSBoZWFkX3AsIHRhaWxfcCk7CiAJCX0KIAkJZWxz ZQogCQl7CisJCQkjaWZuZGVmIEZST05URU5ECiAJCQllcmVwb3J0KGVsZXZlbCwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJIGVycm1zZygic3ludGF4IGVycm9yIGlu IGZpbGUgXCIlc1wiIGxpbmUgJXUsIG5lYXIgdG9rZW4gXCIlc1wiIiwKIAkJCQkJY29uZmlnX2Zp bGUsIENvbmZpZ0ZpbGVMaW5lbm8sIHl5dGV4dCkpKTsKKwkJCSNlbHNlCisJCQlwcmludGYoXygi c3ludGF4IGVycm9yIGluIGZpbGUgXCIlc1wiIGxpbmUgJXUsIG5lYXIgdG9rZW4gXCIlc1wiXG4i KSwKKwkJCQkJCQkJCQljb25maWdfZmlsZSwgQ29uZmlnRmlsZUxpbmVubywgeXl0ZXh0KTsKKwkJ CSNlbmRpZgogCQkJcmVjb3JkX2NvbmZpZ19maWxlX2Vycm9yKCJzeW50YXggZXJyb3IiLAogCQkJ CQkJCQkJIGNvbmZpZ19maWxlLCBDb25maWdGaWxlTGluZW5vLAogCQkJCQkJCQkJIGhlYWRfcCwg dGFpbF9wKTsKQEAgLTg4MywxMiArNTY2LDIxIEBAIHBhcnNlX2Vycm9yOgogCQkgKiBhcyB3ZWxs IGdpdmUgdXAgaW1tZWRpYXRlbHkuICAoVGhpcyBwcmV2ZW50cyBwb3N0bWFzdGVyIGNoaWxkcmVu CiAJCSAqIGZyb20gYmxvYXRpbmcgdGhlIGxvZ3Mgd2l0aCBkdXBsaWNhdGUgY29tcGxhaW50cy4p CiAJCSAqLworCQkjaWZuZGVmIEZST05URU5ECiAJCWlmIChlcnJvcmNvdW50ID49IDEwMCB8fCBl bGV2ZWwgPD0gREVCVUcxKQorCQkjZWxzZQorCQlpZiAoZXJyb3Jjb3VudCA+PSAxMDApCisJCSNl bmRpZgogCQl7CisJCQkjaWZuZGVmIEZST05URU5ECiAJCQllcmVwb3J0KGVsZXZlbCwKIAkJCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCSAgIGVycm1zZygi dG9vIG1hbnkgc3ludGF4IGVycm9ycyBmb3VuZCwgYWJhbmRvbmluZyBmaWxlIFwiJXNcIiIsCiAJ CQkJCSAgY29uZmlnX2ZpbGUpKSk7CisJCQkjZWxzZQorCQkJcHJpbnRmKF8oInRvbyBtYW55IHN5 bnRheCBlcnJvcnMgZm91bmQsIGFiYW5kb25pbmcgZmlsZSBcIiVzXCJcbiIpLAorCQkJCQkJCQkJ CQkJCQkJCWNvbmZpZ19maWxlKTsKKwkJCSNlbmRpZgogCQkJYnJlYWs7CiAJCX0KIApAQCAtOTM0 LDEzICs2MjYsMjEgQEAgUGFyc2VDb25maWdEaXJlY3RvcnkoY29uc3QgY2hhciAqaW5jbHVkZWRp ciwKIAlib29sCQlzdGF0dXM7CiAKIAlkaXJlY3RvcnkgPSBBYnNvbHV0ZUNvbmZpZ0xvY2F0aW9u KGluY2x1ZGVkaXIsIGNhbGxpbmdfZmlsZSk7CisJI2lmbmRlZiBGUk9OVEVORAogCWQgPSBBbGxv Y2F0ZURpcihkaXJlY3RvcnkpOworCSNlbHNlCisJZCA9IG9wZW5kaXIoZGlyZWN0b3J5KTsKKwkj ZW5kaWYKIAlpZiAoZCA9PSBOVUxMKQogCXsKKwkJI2lmbmRlZiBGUk9OVEVORAogCQllcmVwb3J0 KGVsZXZlbCwKIAkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkgZXJybXNnKCJj b3VsZCBub3Qgb3BlbiBjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKIAkJCQkJ CWRpcmVjdG9yeSkpKTsKKwkJI2Vsc2UKKwkJcHJpbnRmKF8oImNvdWxkIG5vdCBvcGVuIGNvbmZp Z3VyYXRpb24gZGlyZWN0b3J5IFwiJXNcIlxuIiksIGRpcmVjdG9yeSk7CisJCSNlbmRpZgogCQly ZWNvcmRfY29uZmlnX2ZpbGVfZXJyb3IocHNwcmludGYoImNvdWxkIG5vdCBvcGVuIGRpcmVjdG9y eSBcIiVzXCIiLAogCQkJCQkJCQkJCSAgZGlyZWN0b3J5KSwKIAkJCQkJCQkJIGNhbGxpbmdfZmls ZSwgY2FsbGluZ19saW5lbm8sCkBAIC05NTcsNyArNjU3LDExIEBAIFBhcnNlQ29uZmlnRGlyZWN0 b3J5KGNvbnN0IGNoYXIgKmluY2x1ZGVkaXIsCiAJZmlsZW5hbWVzID0gKGNoYXIgKiopIHBhbGxv YyhzaXplX2ZpbGVuYW1lcyAqIHNpemVvZihjaGFyICopKTsKIAludW1fZmlsZW5hbWVzID0gMDsK IAorCSNpZm5kZWYgRlJPTlRFTkQKIAl3aGlsZSAoKGRlID0gUmVhZERpcihkLCBkaXJlY3Rvcnkp KSAhPSBOVUxMKQorCSNlbHNlCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpCisJ I2VuZGlmCiAJewogCQlzdHJ1Y3Qgc3RhdCBzdDsKIAkJY2hhcgkJZmlsZW5hbWVbTUFYUEdQQVRI XTsKQEAgLTk5OCwxMCArNzAyLDE0IEBAIFBhcnNlQ29uZmlnRGlyZWN0b3J5KGNvbnN0IGNoYXIg KmluY2x1ZGVkaXIsCiAJCQkgKiBhIGZpbGUgY2FuJ3QgYmUgYWNjZXNzZWQgbm93IGlzIGlmIGl0 IHdhcyByZW1vdmVkIGJldHdlZW4gdGhlCiAJCQkgKiBkaXJlY3RvcnkgbGlzdGluZyBhbmQgbm93 LgogCQkJICovCisJCQkjaWZuZGVmIEZST05URU5ECiAJCQllcmVwb3J0KGVsZXZlbCwKIAkJCQkJ KGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0 IGZpbGUgXCIlc1wiOiAlbSIsCiAJCQkJCQkJZmlsZW5hbWUpKSk7CisJCQkjZWxzZQorCQkJcHJp bnRmKF8oImNvdWxkIG5vdCBzdGF0IGZpbGUgXCIlc1wiXG4iKSwgZmlsZW5hbWUpOworCQkJI2Vu ZGlmCiAJCQlyZWNvcmRfY29uZmlnX2ZpbGVfZXJyb3IocHNwcmludGYoImNvdWxkIG5vdCBzdGF0 IGZpbGUgXCIlc1wiIiwKIAkJCQkJCQkJCQkJICBmaWxlbmFtZSksCiAJCQkJCQkJCQkgY2FsbGlu Z19maWxlLCBjYWxsaW5nX2xpbmVubywKQEAgLTEwMzIsNyArNzQwLDEzIEBAIFBhcnNlQ29uZmln RGlyZWN0b3J5KGNvbnN0IGNoYXIgKmluY2x1ZGVkaXIsCiAKIGNsZWFudXA6CiAJaWYgKGQpCisJ eworCQkjaWZuZGVmIEZST05URU5ECiAJCUZyZWVEaXIoZCk7CisJCSNlbHNlCisJCWNsb3NlZGly KGQpOworCQkjZW5kaWYKKwl9CiAJcGZyZWUoZGlyZWN0b3J5KTsKIAlyZXR1cm4gc3RhdHVzOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9uL2d1Yy1maWxlLmggYi9zcmMvaW5jbHVk ZS9jb21tb24vZ3VjLWZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5jYTk2OWUyYWVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL2d1Yy1m aWxlLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRlZiBHVUNfRklMRV9ICisjZGVmaW5lIEdVQ19G SUxFX0gKKworI2luY2x1ZGUgImMuaCIKKworLyoKKyAqIFBhcnNpbmcgdGhlIGNvbmZpZ3VyYXRp b24gZmlsZShzKSB3aWxsIHJldHVybiBhIGxpc3Qgb2YgbmFtZS12YWx1ZSBwYWlycworICogd2l0 aCBzb3VyY2UgbG9jYXRpb24gaW5mby4gIFdlIGFsc28gYWJ1c2UgdGhpcyBkYXRhIHN0cnVjdHVy ZSB0byBjYXJyeQorICogZXJyb3IgcmVwb3J0cyBhYm91dCB0aGUgY29uZmlnIGZpbGVzLiAgQW4g ZW50cnkgcmVwb3J0aW5nIGFuIGVycm9yIHdpbGwKKyAqIGhhdmUgZXJybXNnICE9IE5VTEwsIGFu ZCBtaWdodCBoYXZlIE5VTExzIGZvciBuYW1lLCB2YWx1ZSwgYW5kL29yIGZpbGVuYW1lLgorICoK KyAqIElmICJpZ25vcmUiIGlzIHRydWUsIGRvbid0IGF0dGVtcHQgdG8gYXBwbHkgdGhlIGl0ZW0g KGl0IG1pZ2h0IGJlIGFuIGVycm9yCisgKiByZXBvcnQsIG9yIGFuIGl0ZW0gd2UgZGV0ZXJtaW5l ZCB0byBiZSBkdXBsaWNhdGUpLiAgImFwcGxpZWQiIGlzIHNldCB0cnVlCisgKiBpZiB3ZSBzdWNj ZXNzZnVsbHkgYXBwbGllZCwgb3IgY291bGQgaGF2ZSBhcHBsaWVkLCB0aGUgc2V0dGluZy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgQ29uZmlnVmFyaWFibGUKK3sKKwljaGFyCSAgICpuYW1lOworCWNo YXIJICAgKnZhbHVlOworCWNoYXIJICAgKmVycm1zZzsKKwljaGFyCSAgICpmaWxlbmFtZTsKKwlp bnQJCQlzb3VyY2VsaW5lOworCWJvb2wJCWlnbm9yZTsKKwlib29sCQlhcHBsaWVkOworCXN0cnVj dCBDb25maWdWYXJpYWJsZSAqbmV4dDsKK30gQ29uZmlnVmFyaWFibGU7CisKK2V4dGVybiBib29s IFBhcnNlQ29uZmlnRmlsZShjb25zdCBjaGFyICpjb25maWdfZmlsZSwgYm9vbCBzdHJpY3QsCisJ CQkJY29uc3QgY2hhciAqY2FsbGluZ19maWxlLCBpbnQgY2FsbGluZ19saW5lbm8sCisJCQkJaW50 IGRlcHRoLCBpbnQgZWxldmVsLAorCQkJCUNvbmZpZ1ZhcmlhYmxlICoqaGVhZF9wLCBDb25maWdW YXJpYWJsZSAqKnRhaWxfcCk7CitleHRlcm4gYm9vbCBQYXJzZUNvbmZpZ0ZwKEZJTEUgKmZwLCBj b25zdCBjaGFyICpjb25maWdfZmlsZSwKKwkJCSAgaW50IGRlcHRoLCBpbnQgZWxldmVsLAorCQkJ ICBDb25maWdWYXJpYWJsZSAqKmhlYWRfcCwgQ29uZmlnVmFyaWFibGUgKip0YWlsX3ApOworZXh0 ZXJuIGJvb2wgUGFyc2VDb25maWdEaXJlY3RvcnkoY29uc3QgY2hhciAqaW5jbHVkZWRpciwKKwkJ CQkJIGNvbnN0IGNoYXIgKmNhbGxpbmdfZmlsZSwgaW50IGNhbGxpbmdfbGluZW5vLAorCQkJCQkg aW50IGRlcHRoLCBpbnQgZWxldmVsLAorCQkJCQkgQ29uZmlnVmFyaWFibGUgKipoZWFkX3AsCisJ CQkJCSBDb25maWdWYXJpYWJsZSAqKnRhaWxfcCk7CitleHRlcm4gdm9pZCBGcmVlQ29uZmlnVmFy aWFibGVzKENvbmZpZ1ZhcmlhYmxlICpsaXN0KTsKKworZXh0ZXJuIGludAlndWNfbmFtZV9jb21w YXJlKGNvbnN0IGNoYXIgKm5hbWVhLCBjb25zdCBjaGFyICpuYW1lYik7CisKK2V4dGVybiB2b2lk IHJlY29yZF9jb25maWdfZmlsZV9lcnJvcihjb25zdCBjaGFyICplcnJtc2csCisJCQkJCQkgY29u c3QgY2hhciAqY29uZmlnX2ZpbGUsCisJCQkJCQkgaW50IGxpbmVubywKKwkJCQkJCSBDb25maWdW YXJpYWJsZSAqKmhlYWRfcCwKKwkJCQkJCSBDb25maWdWYXJpYWJsZSAqKnRhaWxfcCk7CisKKyNl bmRpZgkJCQkJCQkvKiBHVUNfRklMRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9ndWMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2d1Yy5oCmluZGV4IGMwN2U3Yjk0NWUuLjBiMzM5 MTAwNGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2d1Yy5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2d1Yy5oCkBAIC0xLDggKzEsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogZ3VjLmgK ICAqCi0gKiBFeHRlcm5hbCBkZWNsYXJhdGlvbnMgcGVydGFpbmluZyB0byBiYWNrZW5kL3V0aWxz L21pc2MvZ3VjLmMgYW5kCi0gKiBiYWNrZW5kL3V0aWxzL21pc2MvZ3VjLWZpbGUubAorICogRXh0 ZXJuYWwgZGVjbGFyYXRpb25zIHBlcnRhaW5pbmcgdG8gYmFja2VuZC91dGlscy9taXNjL2d1Yy5j CiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMTksIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCiAgKiBXcml0dGVuIGJ5IFBldGVyIEVpc2VudHJhdXQgPHBldGVyX2VAZ214 Lm5ldD4uCkBAIC0xMjAsNDIgKzExOSw2IEBAIHR5cGVkZWYgZW51bQogCVBHQ19TX1NFU1NJT04J CQkJLyogU0VUIGNvbW1hbmQgKi8KIH0gR3VjU291cmNlOwogCi0vKgotICogUGFyc2luZyB0aGUg Y29uZmlndXJhdGlvbiBmaWxlKHMpIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBuYW1lLXZhbHVlIHBh aXJzCi0gKiB3aXRoIHNvdXJjZSBsb2NhdGlvbiBpbmZvLiAgV2UgYWxzbyBhYnVzZSB0aGlzIGRh dGEgc3RydWN0dXJlIHRvIGNhcnJ5Ci0gKiBlcnJvciByZXBvcnRzIGFib3V0IHRoZSBjb25maWcg ZmlsZXMuICBBbiBlbnRyeSByZXBvcnRpbmcgYW4gZXJyb3Igd2lsbAotICogaGF2ZSBlcnJtc2cg IT0gTlVMTCwgYW5kIG1pZ2h0IGhhdmUgTlVMTHMgZm9yIG5hbWUsIHZhbHVlLCBhbmQvb3IgZmls ZW5hbWUuCi0gKgotICogSWYgImlnbm9yZSIgaXMgdHJ1ZSwgZG9uJ3QgYXR0ZW1wdCB0byBhcHBs eSB0aGUgaXRlbSAoaXQgbWlnaHQgYmUgYW4gZXJyb3IKLSAqIHJlcG9ydCwgb3IgYW4gaXRlbSB3 ZSBkZXRlcm1pbmVkIHRvIGJlIGR1cGxpY2F0ZSkuICAiYXBwbGllZCIgaXMgc2V0IHRydWUKLSAq IGlmIHdlIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLCBvciBjb3VsZCBoYXZlIGFwcGxpZWQsIHRoZSBz ZXR0aW5nLgotICovCi10eXBlZGVmIHN0cnVjdCBDb25maWdWYXJpYWJsZQotewotCWNoYXIJICAg Km5hbWU7Ci0JY2hhcgkgICAqdmFsdWU7Ci0JY2hhcgkgICAqZXJybXNnOwotCWNoYXIJICAgKmZp bGVuYW1lOwotCWludAkJCXNvdXJjZWxpbmU7Ci0JYm9vbAkJaWdub3JlOwotCWJvb2wJCWFwcGxp ZWQ7Ci0Jc3RydWN0IENvbmZpZ1ZhcmlhYmxlICpuZXh0OwotfSBDb25maWdWYXJpYWJsZTsKLQot ZXh0ZXJuIGJvb2wgUGFyc2VDb25maWdGaWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlLCBib29s IHN0cmljdCwKLQkJCQljb25zdCBjaGFyICpjYWxsaW5nX2ZpbGUsIGludCBjYWxsaW5nX2xpbmVu bywKLQkJCQlpbnQgZGVwdGgsIGludCBlbGV2ZWwsCi0JCQkJQ29uZmlnVmFyaWFibGUgKipoZWFk X3AsIENvbmZpZ1ZhcmlhYmxlICoqdGFpbF9wKTsKLWV4dGVybiBib29sIFBhcnNlQ29uZmlnRnAo RklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlLAotCQkJICBpbnQgZGVwdGgsIGludCBl bGV2ZWwsCi0JCQkgIENvbmZpZ1ZhcmlhYmxlICoqaGVhZF9wLCBDb25maWdWYXJpYWJsZSAqKnRh aWxfcCk7Ci1leHRlcm4gYm9vbCBQYXJzZUNvbmZpZ0RpcmVjdG9yeShjb25zdCBjaGFyICppbmNs dWRlZGlyLAotCQkJCQkgY29uc3QgY2hhciAqY2FsbGluZ19maWxlLCBpbnQgY2FsbGluZ19saW5l bm8sCi0JCQkJCSBpbnQgZGVwdGgsIGludCBlbGV2ZWwsCi0JCQkJCSBDb25maWdWYXJpYWJsZSAq KmhlYWRfcCwKLQkJCQkJIENvbmZpZ1ZhcmlhYmxlICoqdGFpbF9wKTsKLWV4dGVybiB2b2lkIEZy ZWVDb25maWdWYXJpYWJsZXMoQ29uZmlnVmFyaWFibGUgKmxpc3QpOwotCiAvKgogICogVGhlIHBv c3NpYmxlIHZhbHVlcyBvZiBhbiBlbnVtIHZhcmlhYmxlIGFyZSBzcGVjaWZpZWQgYnkgYW4gYXJy YXkgb2YKICAqIG5hbWUtdmFsdWUgcGFpcnMuICBUaGUgImhpZGRlbiIgZmxhZyBtZWFucyB0aGUg dmFsdWUgaXMgYWNjZXB0ZWQgYnV0CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvbXN2Yy9Na3ZjYnVp bGQucG0gYi9zcmMvdG9vbHMvbXN2Yy9Na3ZjYnVpbGQucG0KaW5kZXggNTYxOTJmMWIyMC4uNjk1 MmU2MDU1MCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL21zdmMvTWt2Y2J1aWxkLnBtCisrKyBiL3Ny Yy90b29scy9tc3ZjL01rdmNidWlsZC5wbQpAQCAtMTcyLDcgKzE3Miw3IEBAIHN1YiBta3ZjYnVp bGQKIAkkcG9zdGdyZXMtPkFkZEZpbGVzKCdzcmMvYmFja2VuZC9wYXJzZXInLCAnc2Nhbi5sJywg J2dyYW0ueScpOwogCSRwb3N0Z3Jlcy0+QWRkRmlsZXMoJ3NyYy9iYWNrZW5kL2Jvb3RzdHJhcCcs ICdib290c2Nhbm5lci5sJywKIAkJJ2Jvb3RwYXJzZS55Jyk7Ci0JJHBvc3RncmVzLT5BZGRGaWxl cygnc3JjL2JhY2tlbmQvdXRpbHMvbWlzYycsICdndWMtZmlsZS5sJyk7CisJJHBvc3RncmVzLT5B ZGRGaWxlcygnc3JjL2NvbW1vbicsICdndWMtZmlsZS5sJyk7CiAJJHBvc3RncmVzLT5BZGRGaWxl cygKIAkJJ3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uJywgJ3JlcGxfc2Nhbm5lci5sJywKIAkJJ3Jl cGxfZ3JhbS55JywgICAgICAgICAgICAgJ3N5bmNyZXBfc2Nhbm5lci5sJywKZGlmZiAtLWdpdCBh L3NyYy90b29scy9tc3ZjL2NsZWFuLmJhdCBiL3NyYy90b29scy9tc3ZjL2NsZWFuLmJhdAppbmRl eCAwNjlkNmViNTY5Li41M2Q3N2FhZjBhIDEwMDc1NQotLS0gYS9zcmMvdG9vbHMvbXN2Yy9jbGVh bi5iYXQKKysrIGIvc3JjL3Rvb2xzL21zdmMvY2xlYW4uYmF0CkBAIC04MCw3ICs4MCw3IEBAIGlm ICVESVNUJT09MSBpZiBleGlzdCBzcmNcYmFja2VuZFxwYXJzZXJcc2Nhbi5jIGRlbCAvcSBzcmNc YmFja2VuZFxwYXJzZXJcc2Nhbi5jCiBpZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXGJhY2tlbmRc cGFyc2VyXGdyYW0uYyBkZWwgL3Egc3JjXGJhY2tlbmRccGFyc2VyXGdyYW0uYwogaWYgJURJU1Ql PT0xIGlmIGV4aXN0IHNyY1xiYWNrZW5kXGJvb3RzdHJhcFxib290c2Nhbm5lci5jIGRlbCAvcSBz cmNcYmFja2VuZFxib290c3RyYXBcYm9vdHNjYW5uZXIuYwogaWYgJURJU1QlPT0xIGlmIGV4aXN0 IHNyY1xiYWNrZW5kXGJvb3RzdHJhcFxib290cGFyc2UuYyBkZWwgL3Egc3JjXGJhY2tlbmRcYm9v dHN0cmFwXGJvb3RwYXJzZS5jCi1pZiAlRElTVCU9PTEgaWYgZXhpc3Qgc3JjXGJhY2tlbmRcdXRp bHNcbWlzY1xndWMtZmlsZS5jIGRlbCAvcSBzcmNcYmFja2VuZFx1dGlsc1xtaXNjXGd1Yy1maWxl LmMKK2lmICVESVNUJT09MSBpZiBleGlzdCBzcmNcY29tbW9uXGd1Yy1maWxlLmMgZGVsIC9xIHNy Y1xjb21tb25cZ3VjLWZpbGUuYwogaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xiYWNrZW5kXHJl cGxpY2F0aW9uXHJlcGxfc2Nhbm5lci5jIGRlbCAvcSBzcmNcYmFja2VuZFxyZXBsaWNhdGlvblxy ZXBsX3NjYW5uZXIuYwogaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xiYWNrZW5kXHJlcGxpY2F0 aW9uXHJlcGxfZ3JhbS5jIGRlbCAvcSBzcmNcYmFja2VuZFxyZXBsaWNhdGlvblxyZXBsX2dyYW0u YwogaWYgJURJU1QlPT0xIGlmIGV4aXN0IHNyY1xiYWNrZW5kXHJlcGxpY2F0aW9uXHN5bmNyZXBf c2Nhbm5lci5jIGRlbCAvcSBzcmNcYmFja2VuZFxyZXBsaWNhdGlvblxzeW5jcmVwX3NjYW5uZXIu YwotLSAKMi4xOS4xCgo= --=_4e3215dcf63ce10b878a6ba680fba145--