From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: Trying coccinelle Date: Mon, 18 Jun 2012 20:44:34 +0400 Message-ID: <4FDF5AF2.2080503@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040903070908080803030000" X-Trace: dough.gmane.org 1340037893 10236 80.91.229.3 (18 Jun 2012 16:44:53 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Mon, 18 Jun 2012 16:44:53 +0000 (UTC) To: Emacs development discussions Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Jun 18 18:44:51 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Sgf4L-000822-Vf for ged-emacs-devel@m.gmane.org; Mon, 18 Jun 2012 18:44:50 +0200 Original-Received: from localhost ([::1]:58629 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sgf4L-0003MY-WF for ged-emacs-devel@m.gmane.org; Mon, 18 Jun 2012 12:44:50 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:53015) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sgf4F-0003MM-Hr for emacs-devel@gnu.org; Mon, 18 Jun 2012 12:44:47 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sgf4A-000677-Ce for emacs-devel@gnu.org; Mon, 18 Jun 2012 12:44:43 -0400 Original-Received: from forward1.mail.yandex.net ([77.88.46.6]:55195) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sgf49-000672-A3 for emacs-devel@gnu.org; Mon, 18 Jun 2012 12:44:38 -0400 Original-Received: from smtp1.mail.yandex.net (smtp1.mail.yandex.net [77.88.46.101]) by forward1.mail.yandex.net (Yandex) with ESMTP id 6A27E12422D4 for ; Mon, 18 Jun 2012 20:44:33 +0400 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1340037873; bh=LFN2gQQfpFylRGJkHvt0nh9US4cTKSCCLwFeQeXaaew=; h=Message-ID:Date:From:MIME-Version:To:Subject:Content-Type; b=lWS47NXEIkmthMyhhyo2R1hkqMELswUg9mr20xPALS7vfGDs0RpP2G0KWtetBz96r wdQxv+tlMXj3F32nNv9GNA5j895Wqf+OHUVsS6ShHqdueVWdlFfLq9YbHcZu3Ft3Hz 805EASAJVjaAjG0SOv1DYY1e/DxN1OFoED4px858= Original-Received: from smtp1.mail.yandex.net (localhost [127.0.0.1]) by smtp1.mail.yandex.net (Yandex) with ESMTP id 5795EAA031D for ; Mon, 18 Jun 2012 20:44:33 +0400 (MSK) Original-Received: from 213-148-21-55.gelicon.ru (213-148-21-55.gelicon.ru [213.148.21.55]) by smtp1.mail.yandex.net (nwsmtp/Yandex) with ESMTP id iWAWZl8T-iWAKKDNQ; Mon, 18 Jun 2012 20:44:32 +0400 X-Yandex-Rcpt-Suid: emacs-devel@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1340037873; bh=LFN2gQQfpFylRGJkHvt0nh9US4cTKSCCLwFeQeXaaew=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: Content-Type; b=YFWCMcsLTcN+zCNNhAy441g0A7a2++MGU7asT3tDvykrBjtN34AVYVv/78KhTQld9 PrhXIGj1yMPGTNGPSLolI902Y4BAR3Kw4/mPaF8CdmnxjdwoIKtByieuvCh5HbcJkt 1wVBD+75Oj6gAnSrpKi/T+zCo4onHV0Lji6A0Cnc= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 77.88.46.6 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:150988 Archived-At: This is a multi-part message in MIME format. --------------040903070908080803030000 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Some time ago it was noticed (http://lists.gnu.org/archive/html/emacs-devel/2012-03/msg00371.html) that coccinelle tool (http://coccinelle.lip6.fr) might be useful for get rid of the GCPROs; but it seems that this tool opens a lot of other opportunities. For example, attached patch was generated with the very simple "semantic patch": @expression@ identifier I1, I2; expression E1, E2; @@ ( - XVECTOR (I1)->contents[I2++] = E1 + ASET (I1, I2, E1), I2++ | - XVECTOR (I1)->contents[E1] = E2 + ASET (I1, E1, E2) | -XVECTOR (I1)->contents[E1] +AREF (I1, E1) ) and following minimal manual intervention, so I suspect that more useful cleanups may be done with this tool. Dmitry --------------040903070908080803030000 Content-Type: text/plain; charset=UTF-8; name="vector_access.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vector_access.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9hbGxvYy5jJwotLS0gc3JjL2FsbG9jLmMJMjAxMi0w Ni0xNiAxMjoyNDoxNSArMDAwMAorKysgc3JjL2FsbG9jLmMJMjAxMi0wNi0xOCAxNjoxNjoy MCArMDAwMApAQCAtNTI5NCw3ICs1Mjk0LDcgQEAKIAlzaXplICY9IFBTRVVET1ZFQ1RPUl9T SVpFX01BU0s7CiAgICAgICB2ZWMgPSBYVkVDVE9SIChtYWtlX3B1cmVfdmVjdG9yIChzaXpl KSk7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCXZlYy0+Y29udGVudHNb aV0gPSBGcHVyZWNvcHkgKFhWRUNUT1IgKG9iaiktPmNvbnRlbnRzW2ldKTsKKwl2ZWMtPmNv bnRlbnRzW2ldID0gRnB1cmVjb3B5IChBUkVGIChvYmosIGkpKTsKICAgICAgIGlmIChDT01Q SUxFRFAgKG9iaikpCiAJewogCSAgWFNFVFBWRUNUWVBFICh2ZWMsIFBWRUNfQ09NUElMRUQp OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9ieXRlY29kZS5jJwotLS0gc3JjL2J5dGVjb2Rl LmMJMjAxMi0wNi0xNiAxMjoyNDoxNSArMDAwMAorKysgc3JjL2J5dGVjb2RlLmMJMjAxMi0w Ni0xOCAxNjoxNjoyMCArMDAwMApAQCAtMTg2Nyw4ICsxODY3LDggQEAKICAgewogICAgIGlu dCBpID0gMjU2OwogICAgIHdoaWxlIChpLS0pCi0gICAgICBYVkVDVE9SIChWYnl0ZV9jb2Rl X21ldGVyKS0+Y29udGVudHNbaV0gPQotCUZtYWtlX3ZlY3RvciAobWFrZV9udW1iZXIgKDI1 NiksIG1ha2VfbnVtYmVyICgwKSk7CisgICAgICBBU0VUIChWYnl0ZV9jb2RlX21ldGVyLCBp LAorICAgICAgICAgICBGbWFrZV92ZWN0b3IgKG1ha2VfbnVtYmVyICgyNTYpLCBtYWtlX251 bWJlciAoMCkpKTsKICAgfQogI2VuZGlmCiB9Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Nj bC5jJwotLS0gc3JjL2NjbC5jCTIwMTItMDItMTAgMTg6NTg6NDggKzAwMDAKKysrIHNyYy9j Y2wuYwkyMDEyLTA2LTE4IDE2OjE2OjIwICswMDAwCkBAIC02MSw3ICs2MSw3IEBACiAKIC8q IFJldHVybiBhIGhhc2ggdGFibGUgb2YgaWQgbnVtYmVyIElELiAgKi8KICNkZWZpbmUgR0VU X0hBU0hfVEFCTEUoaWQpIFwKLSAgKFhIQVNIX1RBQkxFIChYQ0RSIChYVkVDVE9SIChWdHJh bnNsYXRpb25faGFzaF90YWJsZV92ZWN0b3IpLT5jb250ZW50c1soaWQpXSkpKQorICAoWEhB U0hfVEFCTEUgKFhDRFIgKEFSRUYgKFZ0cmFuc2xhdGlvbl9oYXNoX3RhYmxlX3ZlY3Rvciwg KGlkKSkpKSkKIAogLyogQ0NMIChDb2RlIENvbnZlcnNpb24gTGFuZ3VhZ2UpIGlzIGEgc2lt cGxlIGxhbmd1YWdlIHdoaWNoIGhhcwogICAgb3BlcmF0aW9ucyBvbiBvbmUgaW5wdXQgYnVm ZmVyLCBvbmUgb3V0cHV0IGJ1ZmZlciwgYW5kIDcgcmVnaXN0ZXJzLgoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy9jb2RpbmcuYycKLS0tIHNyYy9jb2RpbmcuYwkyMDEyLTA2LTE3IDA3OjU3 OjI4ICswMDAwCisrKyBzcmMvY29kaW5nLmMJMjAxMi0wNi0xOCAxNjoxNjoyMCArMDAwMApA QCAtMzE4OSw3ICszMTg5LDcgQEAKIAkgICAgYnJlYWs7CiAJY2hlY2tfZXh0cmFfbGF0aW46 CiAJICBpZiAoISBWRUNUT1JQIChWbGF0aW5fZXh0cmFfY29kZV90YWJsZSkKLQkgICAgICB8 fCBOSUxQIChYVkVDVE9SIChWbGF0aW5fZXh0cmFfY29kZV90YWJsZSktPmNvbnRlbnRzW2Nd KSkKKwkgICAgICB8fCBOSUxQIChBUkVGIChWbGF0aW5fZXh0cmFfY29kZV90YWJsZSwgYykp KQogCSAgICB7CiAJICAgICAgcmVqZWN0ZWQgPSBDQVRFR09SWV9NQVNLX0lTTzsKIAkgICAg ICBicmVhazsKQEAgLTU0NjQsNyArNTQ2NCw3IEBACiAJICBpZiAoYyA8IDB4QTAKIAkgICAg ICAmJiBjaGVja19sYXRpbl9leHRyYQogCSAgICAgICYmICghVkVDVE9SUCAoVmxhdGluX2V4 dHJhX2NvZGVfdGFibGUpCi0JCSAgfHwgTklMUCAoWFZFQ1RPUiAoVmxhdGluX2V4dHJhX2Nv ZGVfdGFibGUpLT5jb250ZW50c1tjXSkpKQorCQkgIHx8IE5JTFAgKEFSRUYgKFZsYXRpbl9l eHRyYV9jb2RlX3RhYmxlLCBjKSkpKQogCSAgICBicmVhazsKIAkgIGZvdW5kID0gQ0FURUdP UllfTUFTS19DSEFSU0VUOwogCX0KQEAgLTEwNTYwLDcgKzEwNTYwLDcgQEAKICAgICBWY29k aW5nX2NhdGVnb3J5X2xpc3QgPSBRbmlsOwogICAgIGZvciAoaSA9IGNvZGluZ19jYXRlZ29y eV9tYXggLSAxOyBpID49IDA7IGktLSkKICAgICAgIFZjb2RpbmdfY2F0ZWdvcnlfbGlzdAot CT0gRmNvbnMgKFhWRUNUT1IgKFZjb2RpbmdfY2F0ZWdvcnlfdGFibGUpLT5jb250ZW50c1tp XSwKKwk9IEZjb25zIChBUkVGIChWY29kaW5nX2NhdGVnb3J5X3RhYmxlLCBpKSwKIAkJIFZj b2RpbmdfY2F0ZWdvcnlfbGlzdCk7CiAgIH0KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9j b21wb3NpdGUuYycKLS0tIHNyYy9jb21wb3NpdGUuYwkyMDEyLTA2LTE2IDEyOjI0OjE1ICsw MDAwCisrKyBzcmMvY29tcG9zaXRlLmMJMjAxMi0wNi0xOCAxNjoxNjoyMCArMDAwMApAQCAt MjQwLDEzICsyNDAsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbmNoYXJzOyBpKyspCiAJICB7 CiAJICAgIEZFVENIX1NUUklOR19DSEFSX0FEVkFOQ0UgKGNoLCBzdHJpbmcsIGNoYXJwb3Ms IGJ5dGVwb3MpOwotCSAgICBYVkVDVE9SIChrZXkpLT5jb250ZW50c1tpXSA9IG1ha2VfbnVt YmVyIChjaCk7CisJICAgIEFTRVQgKGtleSwgaSwgbWFrZV9udW1iZXIgKGNoKSk7CiAJICB9 CiAgICAgICBlbHNlCiAJZm9yIChpID0gMDsgaSA8IG5jaGFyczsgaSsrKQogCSAgewogCSAg ICBGRVRDSF9DSEFSX0FEVkFOQ0UgKGNoLCBjaGFycG9zLCBieXRlcG9zKTsKLQkgICAgWFZF Q1RPUiAoa2V5KS0+Y29udGVudHNbaV0gPSBtYWtlX251bWJlciAoY2gpOworCSAgICBBU0VU IChrZXksIGksIG1ha2VfbnVtYmVyIChjaCkpOwogCSAgfQogICAgIH0KICAgZWxzZQoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy9kYXRhLmMnCi0tLSBzcmMvZGF0YS5jCTIwMTItMDYtMTgg MTU6NTc6NDEgKzAwMDAKKysrIHNyYy9kYXRhLmMJMjAxMi0wNi0xOCAxNjoxNjoyMCArMDAw MApAQCAtMjEzNCw3ICsyMTM0LDcgQEAKICAgICB7CiAgICAgICBpZiAoaWR4dmFsIDwgMCB8 fCBpZHh2YWwgPj0gQVNJWkUgKGFycmF5KSkKIAlhcmdzX291dF9vZl9yYW5nZSAoYXJyYXks IGlkeCk7Ci0gICAgICBYVkVDVE9SIChhcnJheSktPmNvbnRlbnRzW2lkeHZhbF0gPSBuZXdl bHQ7CisgICAgICBBU0VUIChhcnJheSwgaWR4dmFsLCBuZXdlbHQpOwogICAgIH0KICAgZWxz ZSBpZiAoQk9PTF9WRUNUT1JfUCAoYXJyYXkpKQogICAgIHsKCj09PSBtb2RpZmllZCBmaWxl ICdzcmMvZG9zZm5zLmMnCi0tLSBzcmMvZG9zZm5zLmMJMjAxMi0wNi0xNiAxMjoyNDoxNSAr MDAwMAorKysgc3JjL2Rvc2Zucy5jCTIwMTItMDYtMTggMTY6MTY6MjAgKzAwMDAKQEAgLTY1 LDI3ICs2NSwyNyBAQAogICBpZiAobm8gPCAwIHx8IG5vID4gMHhmZiB8fCBBU0laRSAocmVn aXN0ZXJzKSAhPSA4KQogICAgIHJldHVybiBRbmlsOwogICBmb3IgKGkgPSAwOyBpIDwgODsg aSsrKQotICAgIENIRUNLX05VTUJFUiAoWFZFQ1RPUiAocmVnaXN0ZXJzKS0+Y29udGVudHNb aV0pOworICAgIENIRUNLX05VTUJFUiAoQVJFRiAocmVnaXN0ZXJzLCBpKSk7CiAKLSAgaW5y ZWdzLnguYXggICAgPSAodW5zaWduZWQgbG9uZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lz dGVycyktPmNvbnRlbnRzWzBdKTsKLSAgaW5yZWdzLnguYnggICAgPSAodW5zaWduZWQgbG9u ZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lzdGVycyktPmNvbnRlbnRzWzFdKTsKLSAgaW5y ZWdzLnguY3ggICAgPSAodW5zaWduZWQgbG9uZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lz dGVycyktPmNvbnRlbnRzWzJdKTsKLSAgaW5yZWdzLnguZHggICAgPSAodW5zaWduZWQgbG9u ZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lzdGVycyktPmNvbnRlbnRzWzNdKTsKLSAgaW5y ZWdzLnguc2kgICAgPSAodW5zaWduZWQgbG9uZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lz dGVycyktPmNvbnRlbnRzWzRdKTsKLSAgaW5yZWdzLnguZGkgICAgPSAodW5zaWduZWQgbG9u ZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lzdGVycyktPmNvbnRlbnRzWzVdKTsKLSAgaW5y ZWdzLnguY2ZsYWcgPSAodW5zaWduZWQgbG9uZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lz dGVycyktPmNvbnRlbnRzWzZdKTsKLSAgaW5yZWdzLnguZmxhZ3MgPSAodW5zaWduZWQgbG9u ZykgWEZBU1RJTlQgKFhWRUNUT1IgKHJlZ2lzdGVycyktPmNvbnRlbnRzWzddKTsKKyAgaW5y ZWdzLnguYXggICAgPSAodW5zaWduZWQgbG9uZykgWEZBU1RJTlQgKEFSRUYgKHJlZ2lzdGVy cywgMCkpOworICBpbnJlZ3MueC5ieCAgICA9ICh1bnNpZ25lZCBsb25nKSBYRkFTVElOVCAo QVJFRiAocmVnaXN0ZXJzLCAxKSk7CisgIGlucmVncy54LmN4ICAgID0gKHVuc2lnbmVkIGxv bmcpIFhGQVNUSU5UIChBUkVGIChyZWdpc3RlcnMsIDIpKTsKKyAgaW5yZWdzLnguZHggICAg PSAodW5zaWduZWQgbG9uZykgWEZBU1RJTlQgKEFSRUYgKHJlZ2lzdGVycywgMykpOworICBp bnJlZ3MueC5zaSAgICA9ICh1bnNpZ25lZCBsb25nKSBYRkFTVElOVCAoQVJFRiAocmVnaXN0 ZXJzLCA0KSk7CisgIGlucmVncy54LmRpICAgID0gKHVuc2lnbmVkIGxvbmcpIFhGQVNUSU5U IChBUkVGIChyZWdpc3RlcnMsIDUpKTsKKyAgaW5yZWdzLnguY2ZsYWcgPSAodW5zaWduZWQg bG9uZykgWEZBU1RJTlQgKEFSRUYgKHJlZ2lzdGVycywgNikpOworICBpbnJlZ3MueC5mbGFn cyA9ICh1bnNpZ25lZCBsb25nKSBYRkFTVElOVCAoQVJFRiAocmVnaXN0ZXJzLCA3KSk7CiAK ICAgaW50ODYgKG5vLCAmaW5yZWdzLCAmb3V0cmVncyk7CiAKLSAgWFZFQ1RPUiAocmVnaXN0 ZXJzKS0+Y29udGVudHNbMF0gPSBtYWtlX251bWJlciAob3V0cmVncy54LmF4KTsKLSAgWFZF Q1RPUiAocmVnaXN0ZXJzKS0+Y29udGVudHNbMV0gPSBtYWtlX251bWJlciAob3V0cmVncy54 LmJ4KTsKLSAgWFZFQ1RPUiAocmVnaXN0ZXJzKS0+Y29udGVudHNbMl0gPSBtYWtlX251bWJl ciAob3V0cmVncy54LmN4KTsKLSAgWFZFQ1RPUiAocmVnaXN0ZXJzKS0+Y29udGVudHNbM10g PSBtYWtlX251bWJlciAob3V0cmVncy54LmR4KTsKLSAgWFZFQ1RPUiAocmVnaXN0ZXJzKS0+ Y29udGVudHNbNF0gPSBtYWtlX251bWJlciAob3V0cmVncy54LnNpKTsKLSAgWFZFQ1RPUiAo cmVnaXN0ZXJzKS0+Y29udGVudHNbNV0gPSBtYWtlX251bWJlciAob3V0cmVncy54LmRpKTsK LSAgWFZFQ1RPUiAocmVnaXN0ZXJzKS0+Y29udGVudHNbNl0gPSBtYWtlX251bWJlciAob3V0 cmVncy54LmNmbGFnKTsKLSAgWFZFQ1RPUiAocmVnaXN0ZXJzKS0+Y29udGVudHNbN10gPSBt YWtlX251bWJlciAob3V0cmVncy54LmZsYWdzKTsKKyAgQVNFVCAocmVnaXN0ZXJzLCAwLCBt YWtlX251bWJlciAob3V0cmVncy54LmF4KSk7CisgIEFTRVQgKHJlZ2lzdGVycywgMSwgbWFr ZV9udW1iZXIgKG91dHJlZ3MueC5ieCkpOworICBBU0VUIChyZWdpc3RlcnMsIDIsIG1ha2Vf bnVtYmVyIChvdXRyZWdzLnguY3gpKTsKKyAgQVNFVCAocmVnaXN0ZXJzLCAzLCBtYWtlX251 bWJlciAob3V0cmVncy54LmR4KSk7CisgIEFTRVQgKHJlZ2lzdGVycywgNCwgbWFrZV9udW1i ZXIgKG91dHJlZ3MueC5zaSkpOworICBBU0VUIChyZWdpc3RlcnMsIDUsIG1ha2VfbnVtYmVy IChvdXRyZWdzLnguZGkpKTsKKyAgQVNFVCAocmVnaXN0ZXJzLCA2LCBtYWtlX251bWJlciAo b3V0cmVncy54LmNmbGFnKSk7CisgIEFTRVQgKHJlZ2lzdGVycywgNywgbWFrZV9udW1iZXIg KG91dHJlZ3MueC5mbGFncykpOwogCiAgIHJldHVybiByZWdpc3RlcnM7CiB9CkBAIC0xMDks NyArMTA5LDcgQEAKICAgZG9zbWVtZ2V0IChvZmZzLCBsZW4sIGJ1Zik7CiAKICAgZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKQotICAgIFhWRUNUT1IgKHZlY3RvciktPmNvbnRlbnRzW2ld ID0gbWFrZV9udW1iZXIgKGJ1ZltpXSk7CisgICAgQVNFVCAodmVjdG9yLCBpLCBtYWtlX251 bWJlciAoYnVmW2ldKSk7CiAKICAgcmV0dXJuIHZlY3RvcjsKIH0KQEAgLTEzMiw4ICsxMzIs OCBAQAogCiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICB7Ci0gICAgICBDSEVD S19OVU1CRVIgKFhWRUNUT1IgKHZlY3RvciktPmNvbnRlbnRzW2ldKTsKLSAgICAgIGJ1Zltp XSA9ICh1bnNpZ25lZCBjaGFyKSBYRkFTVElOVCAoWFZFQ1RPUiAodmVjdG9yKS0+Y29udGVu dHNbaV0pICYgMHhGRjsKKyAgICAgIENIRUNLX05VTUJFUiAoQVJFRiAodmVjdG9yLCBpKSk7 CisgICAgICBidWZbaV0gPSAodW5zaWduZWQgY2hhcikgWEZBU1RJTlQgKEFSRUYgKHZlY3Rv ciwgaSkpICYgMHhGRjsKICAgICB9CiAKICAgZG9zbWVtcHV0IChidWYsIGxlbiwgb2Zmcyk7 Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZvbnQuYycKLS0tIHNyYy9mb250LmMJMjAxMi0w Ni0xNiAxMjoyNDoxNSArMDAwMAorKysgc3JjL2ZvbnQuYwkyMDEyLTA2LTE4IDE2OjE2OjIw ICswMDAwCkBAIC00ODc3LDEzICs0ODc3LDEzIEBACiAgIGZvbnQgPSBYRk9OVF9PQkpFQ1Qg KGZvbnRfb2JqZWN0KTsKIAogICBpbmZvID0gRm1ha2VfdmVjdG9yIChtYWtlX251bWJlciAo NyksIFFuaWwpOwotICBYVkVDVE9SIChpbmZvKS0+Y29udGVudHNbMF0gPSBBUkVGIChmb250 X29iamVjdCwgRk9OVF9OQU1FX0lOREVYKTsKLSAgWFZFQ1RPUiAoaW5mbyktPmNvbnRlbnRz WzFdID0gQVJFRiAoZm9udF9vYmplY3QsIEZPTlRfRlVMTE5BTUVfSU5ERVgpOwotICBYVkVD VE9SIChpbmZvKS0+Y29udGVudHNbMl0gPSBtYWtlX251bWJlciAoZm9udC0+cGl4ZWxfc2l6 ZSk7Ci0gIFhWRUNUT1IgKGluZm8pLT5jb250ZW50c1szXSA9IG1ha2VfbnVtYmVyIChmb250 LT5oZWlnaHQpOwotICBYVkVDVE9SIChpbmZvKS0+Y29udGVudHNbNF0gPSBtYWtlX251bWJl ciAoZm9udC0+YmFzZWxpbmVfb2Zmc2V0KTsKLSAgWFZFQ1RPUiAoaW5mbyktPmNvbnRlbnRz WzVdID0gbWFrZV9udW1iZXIgKGZvbnQtPnJlbGF0aXZlX2NvbXBvc2UpOwotICBYVkVDVE9S IChpbmZvKS0+Y29udGVudHNbNl0gPSBtYWtlX251bWJlciAoZm9udC0+ZGVmYXVsdF9hc2Nl bnQpOworICBBU0VUIChpbmZvLCAwLCBBUkVGIChmb250X29iamVjdCwgRk9OVF9OQU1FX0lO REVYKSk7CisgIEFTRVQgKGluZm8sIDEsIEFSRUYgKGZvbnRfb2JqZWN0LCBGT05UX0ZVTExO QU1FX0lOREVYKSk7CisgIEFTRVQgKGluZm8sIDIsIG1ha2VfbnVtYmVyIChmb250LT5waXhl bF9zaXplKSk7CisgIEFTRVQgKGluZm8sIDMsIG1ha2VfbnVtYmVyIChmb250LT5oZWlnaHQp KTsKKyAgQVNFVCAoaW5mbywgNCwgbWFrZV9udW1iZXIgKGZvbnQtPmJhc2VsaW5lX29mZnNl dCkpOworICBBU0VUIChpbmZvLCA1LCBtYWtlX251bWJlciAoZm9udC0+cmVsYXRpdmVfY29t cG9zZSkpOworICBBU0VUIChpbmZvLCA2LCBtYWtlX251bWJlciAoZm9udC0+ZGVmYXVsdF9h c2NlbnQpKTsKIAogI2lmIDAKICAgLyogQXMgZm9udF9vYmplY3QgaXMgc3RpbGwgaW4gRk9O VF9PQkpMSVNUIG9mIHRoZSBlbnRpdHksIHdlIGNhbid0Cgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL2ltYWdlLmMnCi0tLSBzcmMvaW1hZ2UuYwkyMDEyLTA2LTEyIDEwOjA4OjM5ICswMDAw CisrKyBzcmMvaW1hZ2UuYwkyMDEyLTA2LTE4IDE2OjE2OjIwICswMDAwCkBAIC0yMzY2LDcg KzIzNjYsNyBAQAogCSAgICAgZm9yIG9uZSBsaW5lIG9mIHRoZSBpbWFnZS4gICovCiAJICBm b3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpCiAJICAgIHsKLQkgICAgICBMaXNwX09iamVj dCBlbHQgPSBYVkVDVE9SIChkYXRhKS0+Y29udGVudHNbaV07CisJICAgICAgTGlzcF9PYmpl Y3QgZWx0ID0gQVJFRiAoZGF0YSwgaSk7CiAKIAkgICAgICBpZiAoU1RSSU5HUCAoZWx0KSkK IAkJewpAQCAtMjkzOSw3ICsyOTM5LDcgQEAKIAkgICAgICBwID0gYml0cyA9IChjaGFyICop IGFsbG9jYSAobmJ5dGVzICogaW1nLT5oZWlnaHQpOwogCSAgICAgIGZvciAoaSA9IDA7IGkg PCBpbWctPmhlaWdodDsgKytpLCBwICs9IG5ieXRlcykKIAkJewotCQkgIExpc3BfT2JqZWN0 IGxpbmUgPSBYVkVDVE9SIChkYXRhKS0+Y29udGVudHNbaV07CisJCSAgTGlzcF9PYmplY3Qg bGluZSA9IEFSRUYgKGRhdGEsIGkpOwogCQkgIGlmIChTVFJJTkdQIChsaW5lKSkKIAkJICAg IG1lbWNweSAocCwgU0RBVEEgKGxpbmUpLCBuYnl0ZXMpOwogCQkgIGVsc2UKQEAgLTM3NDks NyArMzc0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGFyc19sZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgIExpc3BfT2JqZWN0IGNvbG9yKQogewotICBYVkVDVE9S IChjb2xvcl90YWJsZSktPmNvbnRlbnRzWypjaGFyc19zdGFydF0gPSBjb2xvcjsKKyAgQVNF VCAoY29sb3JfdGFibGUsICpjaGFyc19zdGFydCwgY29sb3IpOwogfQogCiBzdGF0aWMgTGlz cF9PYmplY3QKQEAgLTM3NTcsNyArMzc1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzX3N0YXJ0LAogICAgICAgICAgICAgICAgICAg ICAgICBpbnQgY2hhcnNfbGVuKQogewotICByZXR1cm4gWFZFQ1RPUiAoY29sb3JfdGFibGUp LT5jb250ZW50c1sqY2hhcnNfc3RhcnRdOworICByZXR1cm4gQVJFRiAoY29sb3JfdGFibGUs ICpjaGFyc19zdGFydCk7CiB9CiAKIHN0YXRpYyBMaXNwX09iamVjdApAQCAtODUwMyw3ICs4 NTAzLDcgQEAKICAgICAgIGlmIChBU0laRSAodGVtKSAhPSA0KQogCXJldHVybiAwOwogICAg ICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKLQlpZiAoIUlOVEVHRVJQIChYVkVDVE9SICh0 ZW0pLT5jb250ZW50c1tpXSkpCisJaWYgKCFJTlRFR0VSUCAoQVJFRiAodGVtLCBpKSkpCiAJ ICByZXR1cm4gMDsKICAgICB9CiAgIGVsc2UKCj09PSBtb2RpZmllZCBmaWxlICdzcmMva2V5 Ym9hcmQuYycKLS0tIHNyYy9rZXlib2FyZC5jCTIwMTItMDYtMTYgMTI6MjQ6MTUgKzAwMDAK KysrIHNyYy9rZXlib2FyZC5jCTIwMTItMDYtMTggMTY6MTY6MjAgKzAwMDAKQEAgLTYyNSw3 ICs2MjUsNyBAQAogCSAgaWYgKGkgPT0gdGhpc19zaW5nbGVfY29tbWFuZF9rZXlfc3RhcnQp CiAJICAgIGJlZm9yZV9jb21tYW5kX2VjaG9fbGVuZ3RoID0gZWNob19sZW5ndGggKCk7CiAK LQkgIGMgPSBYVkVDVE9SICh0aGlzX2NvbW1hbmRfa2V5cyktPmNvbnRlbnRzW2ldOworCSAg YyA9IEFSRUYgKHRoaXNfY29tbWFuZF9rZXlzLCBpKTsKIAkgIGlmICghIChFVkVOVF9IQVNf UEFSQU1FVEVSUyAoYykKIAkJICYmIEVRIChFVkVOVF9IRUFEX0tJTkQgKEVWRU5UX0hFQUQg KGMpKSwgUW1vdXNlX21vdmVtZW50KSkpCiAJICAgIGVjaG9fY2hhciAoYyk7CkBAIC00MjY5 LDcgKzQyNjksNyBAQAogCiAgICAgICBpZiAoIVZFQ1RPUlAgKHRpbWVyKSB8fCBBU0laRSAo dGltZXIpICE9IDgpCiAJY29udGludWU7Ci0gICAgICBYVkVDVE9SICh0aW1lciktPmNvbnRl bnRzWzBdID0gUW5pbDsKKyAgICAgIEFTRVQgKHRpbWVyLCAwLCBRbmlsKTsKICAgICB9CiB9 CiAKQEAgLTYyNzIsNyArNjI3Miw3IEBACiAgIG1vZGlmaWVyX2xpc3QgPSBRbmlsOwogICBm b3IgKGkgPSAwOyAoMTw8aSkgPD0gbW9kaWZpZXJzICYmIGkgPCBOVU1fTU9EX05BTUVTOyBp KyspCiAgICAgaWYgKG1vZGlmaWVycyAmICgxPDxpKSkKLSAgICAgIG1vZGlmaWVyX2xpc3Qg PSBGY29ucyAoWFZFQ1RPUiAobW9kaWZpZXJfc3ltYm9scyktPmNvbnRlbnRzW2ldLAorICAg ICAgbW9kaWZpZXJfbGlzdCA9IEZjb25zIChBUkVGIChtb2RpZmllcl9zeW1ib2xzLCBpKSwK IAkJCSAgICAgbW9kaWZpZXJfbGlzdCk7CiAKICAgcmV0dXJuIG1vZGlmaWVyX2xpc3Q7CkBA IC02NTAzLDcgKzY1MDMsNyBAQAogCSAgKnN5bWJvbF90YWJsZSA9IEZtYWtlX3ZlY3RvciAo c2l6ZSwgUW5pbCk7CiAJfQogCi0gICAgICB2YWx1ZSA9IFhWRUNUT1IgKCpzeW1ib2xfdGFi bGUpLT5jb250ZW50c1tzeW1ib2xfbnVtXTsKKyAgICAgIHZhbHVlID0gQVJFRiAoKnN5bWJv bF90YWJsZSwgc3ltYm9sX251bSk7CiAgICAgfQogCiAgIC8qIEhhdmUgd2UgYWxyZWFkeSB1 c2VkIHRoaXMgc3ltYm9sIGJlZm9yZT8gICovCkBAIC02NTQ2LDcgKzY1NDYsNyBAQAogICAg ICAgaWYgKENPTlNQICgqc3ltYm9sX3RhYmxlKSkKICAgICAgICAgKnN5bWJvbF90YWJsZSA9 IEZjb25zIChGY29ucyAoc3ltYm9sX2ludCwgdmFsdWUpLCAqc3ltYm9sX3RhYmxlKTsKICAg ICAgIGVsc2UKLQlYVkVDVE9SICgqc3ltYm9sX3RhYmxlKS0+Y29udGVudHNbc3ltYm9sX251 bV0gPSB2YWx1ZTsKKwlBU0VUICgqc3ltYm9sX3RhYmxlLCBzeW1ib2xfbnVtLCB2YWx1ZSk7 CiAKICAgICAgIC8qIEZpbGwgaW4gdGhlIGNhY2hlIGVudHJpZXMgZm9yIHRoaXMgc3ltYm9s OyB0aGlzIGFsc28KIAkgYnVpbGRzIHRoZSBRZXZlbnRfc3ltYm9sX2VsZW1lbnRzIHByb3Bl cnR5LCB3aGljaCB0aGUgdXNlcgpAQCAtNzU1MywyMyArNzU1MywyMyBAQAogICAgICAgaW50 IGVuZCA9IG1lbnVfYmFyX2l0ZW1zX2luZGV4OwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwg ZW5kOyBpICs9IDQpCi0JaWYgKEVRIChYQ0FSICh0YWlsKSwgWFZFQ1RPUiAobWVudV9iYXJf aXRlbXNfdmVjdG9yKS0+Y29udGVudHNbaV0pKQorCWlmIChFUSAoWENBUiAodGFpbCksIEFS RUYgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgaSkpKQogCSAgewogCSAgICBMaXNwX09iamVj dCB0ZW0wLCB0ZW0xLCB0ZW0yLCB0ZW0zOwogCSAgICAvKiBNb3ZlIHRoZSBpdGVtIGF0IGlu ZGV4IEkgdG8gdGhlIGVuZCwKIAkgICAgICAgc2hpZnRpbmcgYWxsIHRoZSBvdGhlcnMgZm9y d2FyZC4gICovCi0JICAgIHRlbTAgPSBYVkVDVE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3Ip LT5jb250ZW50c1tpICsgMF07Ci0JICAgIHRlbTEgPSBYVkVDVE9SIChtZW51X2Jhcl9pdGVt c192ZWN0b3IpLT5jb250ZW50c1tpICsgMV07Ci0JICAgIHRlbTIgPSBYVkVDVE9SIChtZW51 X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tpICsgMl07Ci0JICAgIHRlbTMgPSBYVkVD VE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tpICsgM107CisJICAgIHRl bTAgPSBBUkVGIChtZW51X2Jhcl9pdGVtc192ZWN0b3IsIGkgKyAwKTsKKwkgICAgdGVtMSA9 IEFSRUYgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgaSArIDEpOworCSAgICB0ZW0yID0gQVJF RiAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBpICsgMik7CisJICAgIHRlbTMgPSBBUkVGICht ZW51X2Jhcl9pdGVtc192ZWN0b3IsIGkgKyAzKTsKIAkgICAgaWYgKGVuZCA+IGkgKyA0KQot CSAgICAgIG1lbW1vdmUgKCZYVkVDVE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250 ZW50c1tpXSwKLQkJICAgICAgICZYVkVDVE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5j b250ZW50c1tpICsgNF0sCisJICAgICAgbWVtbW92ZSAoJkFSRUYgKG1lbnVfYmFyX2l0ZW1z X3ZlY3RvciwgaSksCisJCSAgICAgICAmQVJFRiAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBp ICsgNCksCiAJCSAgICAgICAoZW5kIC0gaSAtIDQpICogc2l6ZW9mIChMaXNwX09iamVjdCkp OwotCSAgICBYVkVDVE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tlbmQg LSA0XSA9IHRlbTA7Ci0JICAgIFhWRUNUT1IgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciktPmNv bnRlbnRzW2VuZCAtIDNdID0gdGVtMTsKLQkgICAgWFZFQ1RPUiAobWVudV9iYXJfaXRlbXNf dmVjdG9yKS0+Y29udGVudHNbZW5kIC0gMl0gPSB0ZW0yOwotCSAgICBYVkVDVE9SIChtZW51 X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tlbmQgLSAxXSA9IHRlbTM7CisJICAgIEFT RVQgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgZW5kIC0gNCwgdGVtMCk7CisJICAgIEFTRVQg KG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgZW5kIC0gMywgdGVtMSk7CisJICAgIEFTRVQgKG1l bnVfYmFyX2l0ZW1zX3ZlY3RvciwgZW5kIC0gMiwgdGVtMik7CisJICAgIEFTRVQgKG1lbnVf YmFyX2l0ZW1zX3ZlY3RvciwgZW5kIC0gMSwgdGVtMyk7CiAJICAgIGJyZWFrOwogCSAgfQog ICAgIH0KQEAgLTc1ODEsMTAgKzc1ODEsMTAgQEAKICAgICAgIG1lbnVfYmFyX2l0ZW1zX3Zl Y3RvciA9CiAJbGFyZ2VyX3ZlY3RvciAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCA0LCAtMSk7 CiAgICAgLyogQWRkIHRoaXMgaXRlbS4gICovCi0gICAgWFZFQ1RPUiAobWVudV9iYXJfaXRl bXNfdmVjdG9yKS0+Y29udGVudHNbaSsrXSA9IFFuaWw7Ci0gICAgWFZFQ1RPUiAobWVudV9i YXJfaXRlbXNfdmVjdG9yKS0+Y29udGVudHNbaSsrXSA9IFFuaWw7Ci0gICAgWFZFQ1RPUiAo bWVudV9iYXJfaXRlbXNfdmVjdG9yKS0+Y29udGVudHNbaSsrXSA9IFFuaWw7Ci0gICAgWFZF Q1RPUiAobWVudV9iYXJfaXRlbXNfdmVjdG9yKS0+Y29udGVudHNbaSsrXSA9IFFuaWw7Cisg ICAgQVNFVCAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBpLCBRbmlsKSwgaSsrOworICAgIEFT RVQgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgaSwgUW5pbCksIGkrKzsKKyAgICBBU0VUICht ZW51X2Jhcl9pdGVtc192ZWN0b3IsIGksIFFuaWwpLCBpKys7CisgICAgQVNFVCAobWVudV9i YXJfaXRlbXNfdmVjdG9yLCBpLCBRbmlsKSwgaSsrOwogICAgIG1lbnVfYmFyX2l0ZW1zX2lu ZGV4ID0gaTsKICAgfQogCkBAIC03NjEwLDExICs3NjEwLDExIEBACiAJIGRpc2NhcmQgYW55 IHByZXZpb3VzbHkgbWFkZSBtZW51IGJhciBpdGVtLiAgKi8KIAogICAgICAgZm9yIChpID0g MDsgaSA8IG1lbnVfYmFyX2l0ZW1zX2luZGV4OyBpICs9IDQpCi0JaWYgKEVRIChrZXksIFhW RUNUT1IgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciktPmNvbnRlbnRzW2ldKSkKKwlpZiAoRVEg KGtleSwgQVJFRiAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBpKSkpCiAJICB7CiAJICAgIGlm IChtZW51X2Jhcl9pdGVtc19pbmRleCA+IGkgKyA0KQotCSAgICAgIG1lbW1vdmUgKCZYVkVD VE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tpXSwKLQkJICAgICAgICZY VkVDVE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tpICsgNF0sCisJICAg ICAgbWVtbW92ZSAoJkFSRUYgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgaSksCisJCSAgICAg ICAmQVJFRiAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBpICsgNCksCiAJCSAgICAgICAobWVu dV9iYXJfaXRlbXNfaW5kZXggLSBpIC0gNCkgKiBzaXplb2YgKExpc3BfT2JqZWN0KSk7CiAJ ICAgIG1lbnVfYmFyX2l0ZW1zX2luZGV4IC09IDQ7CiAJICB9CkBAIC03NjM4LDExICs3NjM4 LDExIEBACiAgIGlmICghaSkKICAgICByZXR1cm47CiAKLSAgaXRlbSA9IFhWRUNUT1IgKGl0 ZW1fcHJvcGVydGllcyktPmNvbnRlbnRzW0lURU1fUFJPUEVSVFlfREVGXTsKKyAgaXRlbSA9 IEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9QRVJUWV9ERUYpOwogCiAgIC8qIEZp bmQgYW55IGV4aXN0aW5nIGl0ZW0gZm9yIHRoaXMgS0VZLiAgKi8KICAgZm9yIChpID0gMDsg aSA8IG1lbnVfYmFyX2l0ZW1zX2luZGV4OyBpICs9IDQpCi0gICAgaWYgKEVRIChrZXksIFhW RUNUT1IgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciktPmNvbnRlbnRzW2ldKSkKKyAgICBpZiAo RVEgKGtleSwgQVJFRiAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBpKSkpCiAgICAgICBicmVh azsKIAogICAvKiBJZiB3ZSBkaWQgbm90IGZpbmQgdGhpcyBLRVksIGFkZCBpdCBhdCB0aGUg ZW5kLiAgKi8KQEAgLTc2NTIsMjIgKzc2NTIsMjIgQEAKICAgICAgIGlmIChpICsgNCA+IEFT SVpFIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpKQogCW1lbnVfYmFyX2l0ZW1zX3ZlY3RvciA9 IGxhcmdlcl92ZWN0b3IgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgNCwgLTEpOwogICAgICAg LyogQWRkIHRoaXMgaXRlbS4gICovCi0gICAgICBYVkVDVE9SIChtZW51X2Jhcl9pdGVtc192 ZWN0b3IpLT5jb250ZW50c1tpKytdID0ga2V5OwotICAgICAgWFZFQ1RPUiAobWVudV9iYXJf aXRlbXNfdmVjdG9yKS0+Y29udGVudHNbaSsrXQotCT0gWFZFQ1RPUiAoaXRlbV9wcm9wZXJ0 aWVzKS0+Y29udGVudHNbSVRFTV9QUk9QRVJUWV9OQU1FXTsKLSAgICAgIFhWRUNUT1IgKG1l bnVfYmFyX2l0ZW1zX3ZlY3RvciktPmNvbnRlbnRzW2krK10gPSBGY29ucyAoaXRlbSwgUW5p bCk7Ci0gICAgICBYVkVDVE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tp KytdID0gbWFrZV9udW1iZXIgKDApOworICAgICAgQVNFVCAobWVudV9iYXJfaXRlbXNfdmVj dG9yLCBpLCBrZXkpLCBpKys7CisgICAgICBBU0VUIChtZW51X2Jhcl9pdGVtc192ZWN0b3Is IGksCisJICAgIEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9QRVJUWV9OQU1FKSks IGkrKzsKKyAgICAgIEFTRVQgKG1lbnVfYmFyX2l0ZW1zX3ZlY3RvciwgaSwgRmNvbnMgKGl0 ZW0sIFFuaWwpKSwgaSsrOworICAgICAgQVNFVCAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBp LCBtYWtlX251bWJlciAoMCkpLCBpKys7CiAgICAgICBtZW51X2Jhcl9pdGVtc19pbmRleCA9 IGk7CiAgICAgfQogICAvKiBXZSBkaWQgZmluZCBhbiBpdGVtIGZvciB0aGlzIEtFWS4gIEFk ZCBJVEVNIHRvIGl0cyBsaXN0IG9mIG1hcHMuICAqLwogICBlbHNlCiAgICAgewogICAgICAg TGlzcF9PYmplY3Qgb2xkOwotICAgICAgb2xkID0gWFZFQ1RPUiAobWVudV9iYXJfaXRlbXNf dmVjdG9yKS0+Y29udGVudHNbaSArIDJdOworICAgICAgb2xkID0gQVJFRiAobWVudV9iYXJf aXRlbXNfdmVjdG9yLCBpICsgMik7CiAgICAgICAvKiBJZiB0aGUgbmV3IGFuZCB0aGUgb2xk IGl0ZW1zIGFyZSBub3QgYm90aCBrZXltYXBzLAogCSB0aGUgbG9va3VwIHdpbGwgb25seSBm aW5kIGBpdGVtJy4gICovCiAgICAgICBpdGVtID0gRmNvbnMgKGl0ZW0sIEtFWU1BUFAgKGl0 ZW0pICYmIEtFWU1BUFAgKFhDQVIgKG9sZCkpID8gb2xkIDogUW5pbCk7Ci0gICAgICBYVkVD VE9SIChtZW51X2Jhcl9pdGVtc192ZWN0b3IpLT5jb250ZW50c1tpICsgMl0gPSBpdGVtOwor ICAgICAgQVNFVCAobWVudV9iYXJfaXRlbXNfdmVjdG9yLCBpICsgMiwgaXRlbSk7CiAgICAg fQogfQogDApAQCAtODE4NCw3ICs4MTg0LDcgQEAKIHBhcnNlX3Rvb2xfYmFyX2l0ZW0gKExp c3BfT2JqZWN0IGtleSwgTGlzcF9PYmplY3QgaXRlbSkKIHsKICAgLyogQWNjZXNzIHNsb3Qg d2l0aCBpbmRleCBJRFggb2YgdmVjdG9yIHRvb2xfYmFyX2l0ZW1fcHJvcGVydGllcy4gICov Ci0jZGVmaW5lIFBST1AoSURYKSBYVkVDVE9SICh0b29sX2Jhcl9pdGVtX3Byb3BlcnRpZXMp LT5jb250ZW50c1tJRFhdCisjZGVmaW5lIFBST1AoSURYKSBBUkVGICh0b29sX2Jhcl9pdGVt X3Byb3BlcnRpZXMsIChJRFgpKQogCiAgIExpc3BfT2JqZWN0IGZpbHRlciA9IFFuaWw7CiAg IExpc3BfT2JqZWN0IGNhcHRpb247CkBAIC04NjI5LDcgKzg2MjksNyBAQAogCiAJICAvKiBM b29rIGF0IHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIG1hcC4gICovCiAJICBpZiAoaWR4ID49 IDApCi0JICAgIGVsdCA9IFhWRUNUT1IgKHZlY3RvciktPmNvbnRlbnRzW2lkeF07CisJICAg IGVsdCA9IEFSRUYgKHZlY3RvciwgaWR4KTsKIAkgIGVsc2UKIAkgICAgZWx0ID0gRmNhcl9z YWZlIChyZXN0KTsKIApAQCAtODY2NCw3ICs4NjY0LDcgQEAKIAkJICBMaXNwX09iamVjdCB1 cGNhc2VkX2V2ZW50LCBkb3duY2FzZWRfZXZlbnQ7CiAJCSAgTGlzcF9PYmplY3QgZGVzYyA9 IFFuaWw7CiAJCSAgTGlzcF9PYmplY3QgcwotCQkgICAgPSBYVkVDVE9SIChpdGVtX3Byb3Bl cnRpZXMpLT5jb250ZW50c1tJVEVNX1BST1BFUlRZX05BTUVdOworCQkgICAgPSBBUkVGIChp dGVtX3Byb3BlcnRpZXMsIElURU1fUFJPUEVSVFlfTkFNRSk7CiAKIAkJICB1cGNhc2VkX2V2 ZW50ID0gRnVwY2FzZSAoZXZlbnQpOwogCQkgIGRvd25jYXNlZF9ldmVudCA9IEZkb3duY2Fz ZSAoZXZlbnQpOwpAQCAtODY4MiwxMiArODY4MiwxMiBAQAogCQkgICAgcyA9IGNvbmNhdDIg KHMsIHRlbSk7CiAjZW5kaWYKIAkJICB0ZW0KLQkJICAgID0gWFZFQ1RPUiAoaXRlbV9wcm9w ZXJ0aWVzKS0+Y29udGVudHNbSVRFTV9QUk9QRVJUWV9UWVBFXTsKKwkJICAgID0gQVJFRiAo aXRlbV9wcm9wZXJ0aWVzLCBJVEVNX1BST1BFUlRZX1RZUEUpOwogCQkgIGlmIChFUSAodGVt LCBRQ3JhZGlvKSB8fCBFUSAodGVtLCBRQ3RvZ2dsZSkpCiAJCSAgICB7CiAJCSAgICAgIC8q IEluc2VydCBidXR0b24gcHJlZml4LiAgKi8KIAkJICAgICAgTGlzcF9PYmplY3Qgc2VsZWN0 ZWQKLQkJCT0gWFZFQ1RPUiAoaXRlbV9wcm9wZXJ0aWVzKS0+Y29udGVudHNbSVRFTV9QUk9Q RVJUWV9TRUxFQ1RFRF07CisJCQk9IEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9Q RVJUWV9TRUxFQ1RFRCk7CiAJCSAgICAgIGlmIChFUSAodGVtLCBRQ3JhZGlvKSkKIAkJCXRl bSA9IGJ1aWxkX3N0cmluZyAoTklMUCAoc2VsZWN0ZWQpID8gIigqKSAiIDogIiggKSAiKTsK IAkJICAgICAgZWxzZQpAQCAtOTQ1Nyw3ICs5NDU3LDcgQEAKIAkgICAgICAmJiBjdXJyZW50 X2J1ZmZlciAhPSBzdGFydGluZ19idWZmZXIpCiAJICAgIHsKIAkgICAgICBHUk9XX1JBV19L RVlCVUY7Ci0JICAgICAgWFZFQ1RPUiAocmF3X2tleWJ1ZiktPmNvbnRlbnRzW3Jhd19rZXli dWZfY291bnQrK10gPSBrZXk7CisJICAgICAgQVNFVCAocmF3X2tleWJ1ZiwgcmF3X2tleWJ1 Zl9jb3VudCwga2V5KSwgcmF3X2tleWJ1Zl9jb3VudCsrOwogCSAgICAgIGtleWJ1Zlt0Kytd ID0ga2V5OwogCSAgICAgIG1vY2tfaW5wdXQgPSB0OwogCSAgICAgIFZxdWl0X2ZsYWcgPSBR bmlsOwpAQCAtOTUzNSw3ICs5NTM1LDcgQEAKIAkJICAgICAgJiYgQlVGRkVSUCAoWFdJTkRP VyAod2luZG93KS0+YnVmZmVyKQogCQkgICAgICAmJiBYQlVGRkVSIChYV0lORE9XICh3aW5k b3cpLT5idWZmZXIpICE9IGN1cnJlbnRfYnVmZmVyKQogCQkgICAgewotCQkgICAgICBYVkVD VE9SIChyYXdfa2V5YnVmKS0+Y29udGVudHNbcmF3X2tleWJ1Zl9jb3VudCsrXSA9IGtleTsK KwkJICAgICAgQVNFVCAocmF3X2tleWJ1ZiwgcmF3X2tleWJ1Zl9jb3VudCwga2V5KSwgcmF3 X2tleWJ1Zl9jb3VudCsrOwogCQkgICAgICBrZXlidWZbdF0gPSBrZXk7CiAJCSAgICAgIG1v Y2tfaW5wdXQgPSB0ICsgMTsKIApAQCAtMTA1NjYsNyArMTA1NjYsNyBAQAogICBpZiAoTklM UCAoa2VlcF9yZWNvcmQpKQogICAgIHsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBBU0laRSAo cmVjZW50X2tleXMpOyArK2kpCi0JWFZFQ1RPUiAocmVjZW50X2tleXMpLT5jb250ZW50c1tp XSA9IFFuaWw7CisJQVNFVCAocmVjZW50X2tleXMsIGksIFFuaWwpOwogICAgICAgdG90YWxf a2V5cyA9IDA7CiAgICAgICByZWNlbnRfa2V5c19pbmRleCA9IDA7CiAgICAgfQpAQCAtMTE1 ODUsNyArMTE1ODUsNyBAQAogICAgIG1vZGlmaWVyX3N5bWJvbHMgPSBGbWFrZV92ZWN0b3Ig KG1ha2VfbnVtYmVyIChsZW4pLCBRbmlsKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCiAgICAgICBpZiAobW9kaWZpZXJfbmFtZXNbaV0pCi0JWFZFQ1RPUiAobW9kaWZpZXJf c3ltYm9scyktPmNvbnRlbnRzW2ldID0gaW50ZXJuX2Nfc3RyaW5nIChtb2RpZmllcl9uYW1l c1tpXSk7CisJQVNFVCAobW9kaWZpZXJfc3ltYm9scywgaSwgaW50ZXJuX2Nfc3RyaW5nICht b2RpZmllcl9uYW1lc1tpXSkpOwogICAgIHN0YXRpY3BybyAoJm1vZGlmaWVyX3N5bWJvbHMp OwogICB9CiAKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbHJlYWQuYycKLS0tIHNyYy9scmVh ZC5jCTIwMTItMDYtMTYgMTI6MjQ6MTUgKzAwMDAKKysrIHNyYy9scmVhZC5jCTIwMTItMDYt MTggMTY6MTY6MjAgKzAwMDAKQEAgLTM3NDgsNyArMzc0OCw3IEBACiAgICAgICBTRVRfU1lN Qk9MX1ZBTCAoWFNZTUJPTCAoc3ltKSwgc3ltKTsKICAgICB9CiAKLSAgcHRyID0gJlhWRUNU T1IgKG9iYXJyYXkpLT5jb250ZW50c1tYSU5UICh0ZW0pXTsKKyAgcHRyID0gJkFSRUYgKG9i YXJyYXksIFhJTlQodGVtKSk7CiAgIGlmIChTWU1CT0xQICgqcHRyKSkKICAgICBYU1lNQk9M IChzeW0pLT5uZXh0ID0gWFNZTUJPTCAoKnB0cik7CiAgIGVsc2UKQEAgLTM4MjcsMTggKzM4 MjcsMTggQEAKIAogICBoYXNoID0gb2Jsb29rdXBfbGFzdF9idWNrZXRfbnVtYmVyOwogCi0g IGlmIChFUSAoWFZFQ1RPUiAob2JhcnJheSktPmNvbnRlbnRzW2hhc2hdLCB0ZW0pKQorICBp ZiAoRVEgKEFSRUYgKG9iYXJyYXksIGhhc2gpLCB0ZW0pKQogICAgIHsKICAgICAgIGlmIChY U1lNQk9MICh0ZW0pLT5uZXh0KQotCVhTRVRTWU1CT0wgKFhWRUNUT1IgKG9iYXJyYXkpLT5j b250ZW50c1toYXNoXSwgWFNZTUJPTCAodGVtKS0+bmV4dCk7CisJWFNFVFNZTUJPTCAoQVJF RiAob2JhcnJheSwgaGFzaCksIFhTWU1CT0wgKHRlbSktPm5leHQpOwogICAgICAgZWxzZQot CVhTRVRJTlQgKFhWRUNUT1IgKG9iYXJyYXkpLT5jb250ZW50c1toYXNoXSwgMCk7CisJWFNF VElOVCAoQVJFRiAob2JhcnJheSwgaGFzaCksIDApOwogICAgIH0KICAgZWxzZQogICAgIHsK ICAgICAgIExpc3BfT2JqZWN0IHRhaWwsIGZvbGxvd2luZzsKIAotICAgICAgZm9yICh0YWls ID0gWFZFQ1RPUiAob2JhcnJheSktPmNvbnRlbnRzW2hhc2hdOworICAgICAgZm9yICh0YWls ID0gQVJFRiAob2JhcnJheSwgaGFzaCk7CiAJICAgWFNZTUJPTCAodGFpbCktPm5leHQ7CiAJ ICAgdGFpbCA9IGZvbGxvd2luZykKIAl7CkBAIC0zODc3LDcgKzM4NzcsNyBAQAogICAvKiBU aGlzIGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4gdGhlIG1pZGRsZSBvZiBHQy4gICovCiAgIG9i c2l6ZSAmPSB+QVJSQVlfTUFSS19GTEFHOwogICBoYXNoID0gaGFzaF9zdHJpbmcgKHB0ciwg c2l6ZV9ieXRlKSAlIG9ic2l6ZTsKLSAgYnVja2V0ID0gWFZFQ1RPUiAob2JhcnJheSktPmNv bnRlbnRzW2hhc2hdOworICBidWNrZXQgPSBBUkVGIChvYmFycmF5LCBoYXNoKTsKICAgb2Js b29rdXBfbGFzdF9idWNrZXRfbnVtYmVyID0gaGFzaDsKICAgaWYgKEVRIChidWNrZXQsIG1h a2VfbnVtYmVyICgwKSkpCiAgICAgOwpAQCAtMzkwNSw3ICszOTA1LDcgQEAKICAgQ0hFQ0tf VkVDVE9SIChvYmFycmF5KTsKICAgZm9yIChpID0gQVNJWkUgKG9iYXJyYXkpIC0gMTsgaSA+ PSAwOyBpLS0pCiAgICAgewotICAgICAgdGFpbCA9IFhWRUNUT1IgKG9iYXJyYXkpLT5jb250 ZW50c1tpXTsKKyAgICAgIHRhaWwgPSBBUkVGIChvYmFycmF5LCBpKTsKICAgICAgIGlmIChT WU1CT0xQICh0YWlsKSkKIAl3aGlsZSAoMSkKIAkgIHsKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvbWVudS5jJwotLS0gc3JjL21lbnUuYwkyMDEyLTAyLTEwIDE4OjU4OjQ4ICswMDAwCisr KyBzcmMvbWVudS5jCTIwMTItMDYtMTggMTY6MTY6MjAgKzAwMDAKQEAgLTE5Nyw3ICsxOTcs NyBAQAogcHVzaF9zdWJtZW51X3N0YXJ0ICh2b2lkKQogewogICBlbnN1cmVfbWVudV9pdGVt cyAoMSk7Ci0gIFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1ttZW51X2l0ZW1zX3Vz ZWQrK10gPSBRbmlsOworICBBU0VUIChtZW51X2l0ZW1zLCBtZW51X2l0ZW1zX3VzZWQsIFFu aWwpLCBtZW51X2l0ZW1zX3VzZWQrKzsKICAgbWVudV9pdGVtc19zdWJtZW51X2RlcHRoKys7 CiB9CiAKQEAgLTIwNyw3ICsyMDcsNyBAQAogcHVzaF9zdWJtZW51X2VuZCAodm9pZCkKIHsK ICAgZW5zdXJlX21lbnVfaXRlbXMgKDEpOwotICBYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29u dGVudHNbbWVudV9pdGVtc191c2VkKytdID0gUWxhbWJkYTsKKyAgQVNFVCAobWVudV9pdGVt cywgbWVudV9pdGVtc191c2VkLCBRbGFtYmRhKSwgbWVudV9pdGVtc191c2VkKys7CiAgIG1l bnVfaXRlbXNfc3VibWVudV9kZXB0aC0tOwogfQogCkBAIC0yMTksNyArMjE5LDcgQEAKIHB1 c2hfbGVmdF9yaWdodF9ib3VuZGFyeSAodm9pZCkKIHsKICAgZW5zdXJlX21lbnVfaXRlbXMg KDEpOwotICBYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbbWVudV9pdGVtc191c2Vk KytdID0gUXF1b3RlOworICBBU0VUIChtZW51X2l0ZW1zLCBtZW51X2l0ZW1zX3VzZWQsIFFx dW90ZSksIG1lbnVfaXRlbXNfdXNlZCsrOwogfQogCiAvKiBTdGFydCBhIG5ldyBtZW51IHBh bmUgaW4gbWVudV9pdGVtcy4KQEAgLTIzMSw5ICsyMzEsOSBAQAogICBlbnN1cmVfbWVudV9p dGVtcyAoTUVOVV9JVEVNU19QQU5FX0xFTkdUSCk7CiAgIGlmIChtZW51X2l0ZW1zX3N1Ym1l bnVfZGVwdGggPT0gMCkKICAgICBtZW51X2l0ZW1zX25fcGFuZXMrKzsKLSAgWFZFQ1RPUiAo bWVudV9pdGVtcyktPmNvbnRlbnRzW21lbnVfaXRlbXNfdXNlZCsrXSA9IFF0OwotICBYVkVD VE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbbWVudV9pdGVtc191c2VkKytdID0gbmFtZTsK LSAgWFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW21lbnVfaXRlbXNfdXNlZCsrXSA9 IHByZWZpeF92ZWM7CisgIEFTRVQgKG1lbnVfaXRlbXMsIG1lbnVfaXRlbXNfdXNlZCwgUXQp LCBtZW51X2l0ZW1zX3VzZWQrKzsKKyAgQVNFVCAobWVudV9pdGVtcywgbWVudV9pdGVtc191 c2VkLCBuYW1lKSwgbWVudV9pdGVtc191c2VkKys7CisgIEFTRVQgKG1lbnVfaXRlbXMsIG1l bnVfaXRlbXNfdXNlZCwgcHJlZml4X3ZlYyksIG1lbnVfaXRlbXNfdXNlZCsrOwogfQogCiAv KiBQdXNoIG9uZSBtZW51IGl0ZW0gaW50byB0aGUgY3VycmVudCBwYW5lLiAgTkFNRSBpcyB0 aGUgc3RyaW5nIHRvCkBAIC0zNDMsMTAgKzM0MywxMCBAQAogICBpZiAoIXJlcykKICAgICBy ZXR1cm47CQkJLyogTm90IGEgbWVudSBpdGVtLiAgKi8KIAotICBtYXAgPSBYVkVDVE9SIChp dGVtX3Byb3BlcnRpZXMpLT5jb250ZW50c1tJVEVNX1BST1BFUlRZX01BUF07CisgIG1hcCA9 IEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9QRVJUWV9NQVApOwogCi0gIGVuYWJs ZWQgPSBYVkVDVE9SIChpdGVtX3Byb3BlcnRpZXMpLT5jb250ZW50c1tJVEVNX1BST1BFUlRZ X0VOQUJMRV07Ci0gIGl0ZW1fc3RyaW5nID0gWFZFQ1RPUiAoaXRlbV9wcm9wZXJ0aWVzKS0+ Y29udGVudHNbSVRFTV9QUk9QRVJUWV9OQU1FXTsKKyAgZW5hYmxlZCA9IEFSRUYgKGl0ZW1f cHJvcGVydGllcywgSVRFTV9QUk9QRVJUWV9FTkFCTEUpOworICBpdGVtX3N0cmluZyA9IEFS RUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9QRVJUWV9OQU1FKTsKIAogICBpZiAoIU5J TFAgKG1hcCkgJiYgU1JFRiAoaXRlbV9zdHJpbmcsIDApID09ICdAJykKICAgICB7CkBAIC0z NjMsMTEgKzM2MywxMSBAQAogICAgICBmcm9udCBvZiB0aGVtLiAgKi8KICAgewogICAgIExp c3BfT2JqZWN0IHByZWZpeCA9IFFuaWw7Ci0gICAgTGlzcF9PYmplY3QgdHlwZSA9IFhWRUNU T1IgKGl0ZW1fcHJvcGVydGllcyktPmNvbnRlbnRzW0lURU1fUFJPUEVSVFlfVFlQRV07Cisg ICAgTGlzcF9PYmplY3QgdHlwZSA9IEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9Q RVJUWV9UWVBFKTsKICAgICBpZiAoIU5JTFAgKHR5cGUpKQogICAgICAgewogCUxpc3BfT2Jq ZWN0IHNlbGVjdGVkCi0JICA9IFhWRUNUT1IgKGl0ZW1fcHJvcGVydGllcyktPmNvbnRlbnRz W0lURU1fUFJPUEVSVFlfU0VMRUNURURdOworCSAgPSBBUkVGIChpdGVtX3Byb3BlcnRpZXMs IElURU1fUFJPUEVSVFlfU0VMRUNURUQpOwogCiAJaWYgKHNrcC0+bm90YnV0dG9ucykKIAkg IC8qIFRoZSBmaXJzdCBidXR0b24uIExpbmUgdXAgcHJldmlvdXMgaXRlbXMgaW4gdGhpcyBt ZW51LiAgKi8KQEAgLTM3OCw3ICszNzgsNyBAQAogCSAgICB3aGlsZSAoaWR4IDwgbWVudV9p dGVtc191c2VkKQogCSAgICAgIHsKIAkJdGVtCi0JCSAgPSBYVkVDVE9SIChtZW51X2l0ZW1z KS0+Y29udGVudHNbaWR4ICsgTUVOVV9JVEVNU19JVEVNX05BTUVdOworCQkgID0gQVJFRiAo bWVudV9pdGVtcywgaWR4ICsgTUVOVV9JVEVNU19JVEVNX05BTUUpOwogCQlpZiAoTklMUCAo dGVtKSkKIAkJICB7CiAJCSAgICBpZHgrKzsKQEAgLTM5Nyw4ICszOTcsOCBAQAogCQkgIHsK IAkJICAgIGlmICghc3VibWVudSAmJiBTUkVGICh0ZW0sIDApICE9ICdcMCcKIAkJCSYmIFNS RUYgKHRlbSwgMCkgIT0gJy0nKQotCQkgICAgICBYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29u dGVudHNbaWR4ICsgTUVOVV9JVEVNU19JVEVNX05BTUVdCi0JCQk9IGNvbmNhdDIgKGJ1aWxk X3N0cmluZyAoIiAgICAiKSwgdGVtKTsKKwkJICAgICAgQVNFVCAobWVudV9pdGVtcywgaWR4 ICsgTUVOVV9JVEVNU19JVEVNX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25jYXQyIChidWlsZF9zdHJpbmcgKCIgICAgIiksIHRlbSkpOwogCQkgICAgaWR4ICs9IE1F TlVfSVRFTVNfSVRFTV9MRU5HVEg7CiAJCSAgfQogCSAgICAgIH0KQEAgLTQzMCwxMSArNDMw LDExIEBACiAjZW5kaWYgLyogSEFWRV9YX1dJTkRPV1MgfHwgTVNET1MgKi8KIAogICBwdXNo X21lbnVfaXRlbSAoaXRlbV9zdHJpbmcsIGVuYWJsZWQsIGtleSwKLQkJICBYVkVDVE9SIChp dGVtX3Byb3BlcnRpZXMpLT5jb250ZW50c1tJVEVNX1BST1BFUlRZX0RFRl0sCi0JCSAgWFZF Q1RPUiAoaXRlbV9wcm9wZXJ0aWVzKS0+Y29udGVudHNbSVRFTV9QUk9QRVJUWV9LRVlFUV0s Ci0JCSAgWFZFQ1RPUiAoaXRlbV9wcm9wZXJ0aWVzKS0+Y29udGVudHNbSVRFTV9QUk9QRVJU WV9UWVBFXSwKLQkJICBYVkVDVE9SIChpdGVtX3Byb3BlcnRpZXMpLT5jb250ZW50c1tJVEVN X1BST1BFUlRZX1NFTEVDVEVEXSwKLQkJICBYVkVDVE9SIChpdGVtX3Byb3BlcnRpZXMpLT5j b250ZW50c1tJVEVNX1BST1BFUlRZX0hFTFBdKTsKKwkJICBBUkVGIChpdGVtX3Byb3BlcnRp ZXMsIElURU1fUFJPUEVSVFlfREVGKSwKKwkJICBBUkVGIChpdGVtX3Byb3BlcnRpZXMsIElU RU1fUFJPUEVSVFlfS0VZRVEpLAorCQkgIEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9Q Uk9QRVJUWV9UWVBFKSwKKwkJICBBUkVGIChpdGVtX3Byb3BlcnRpZXMsIElURU1fUFJPUEVS VFlfU0VMRUNURUQpLAorCQkgIEFSRUYgKGl0ZW1fcHJvcGVydGllcywgSVRFTV9QUk9QRVJU WV9IRUxQKSk7CiAKICNpZiBkZWZpbmVkIChVU0VfWF9UT09MS0lUKSB8fCBkZWZpbmVkIChV U0VfR1RLKSB8fCBkZWZpbmVkIChIQVZFX05TKSB8fCBkZWZpbmVkIChIQVZFX05UR1VJKQog ICAvKiBEaXNwbGF5IGEgc3VibWVudSB1c2luZyB0aGUgdG9vbGtpdC4gICovCkBAIC02NDUs MjcgKzY0NSwyNyBAQAogICBpID0gc3RhcnQ7CiAgIHdoaWxlIChpIDwgZW5kKQogICAgIHsK LSAgICAgIGlmIChFUSAoWFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2ldLCBRbmls KSkKKyAgICAgIGlmIChFUSAoQVJFRiAobWVudV9pdGVtcywgaSksIFFuaWwpKQogCXsKIAkg IHN1Ym1lbnVfc3RhY2tbc3VibWVudV9kZXB0aCsrXSA9IHNhdmVfd3Y7CiAJICBzYXZlX3d2 ID0gcHJldl93djsKIAkgIHByZXZfd3YgPSAwOwogCSAgaSsrOwogCX0KLSAgICAgIGVsc2Ug aWYgKEVRIChYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaV0sIFFsYW1iZGEpKQor ICAgICAgZWxzZSBpZiAoRVEgKEFSRUYgKG1lbnVfaXRlbXMsIGkpLCBRbGFtYmRhKSkKIAl7 CiAJICBwcmV2X3d2ID0gc2F2ZV93djsKIAkgIHNhdmVfd3YgPSBzdWJtZW51X3N0YWNrWy0t c3VibWVudV9kZXB0aF07CiAJICBpKys7CiAJfQotICAgICAgZWxzZSBpZiAoRVEgKFhWRUNU T1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1tpXSwgUXQpCisgICAgICBlbHNlIGlmIChFUSAo QVJFRiAobWVudV9pdGVtcywgaSksIFF0KQogCSAgICAgICAmJiBzdWJtZW51X2RlcHRoICE9 IDApCiAJaSArPSBNRU5VX0lURU1TX1BBTkVfTEVOR1RIOwogICAgICAgLyogSWdub3JlIGEg bmlsIGluIHRoZSBpdGVtIGxpc3QuCiAJIEl0J3MgbWVhbmluZ2Z1bCBvbmx5IGZvciBkaWFs b2cgYm94ZXMuICAqLwotICAgICAgZWxzZSBpZiAoRVEgKFhWRUNUT1IgKG1lbnVfaXRlbXMp LT5jb250ZW50c1tpXSwgUXF1b3RlKSkKKyAgICAgIGVsc2UgaWYgKEVRIChBUkVGIChtZW51 X2l0ZW1zLCBpKSwgUXF1b3RlKSkKIAlpICs9IDE7Ci0gICAgICBlbHNlIGlmIChFUSAoWFZF Q1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2ldLCBRdCkpCisgICAgICBlbHNlIGlmIChF USAoQVJFRiAobWVudV9pdGVtcywgaSksIFF0KSkKIAl7CiAJICAvKiBDcmVhdGUgYSBuZXcg cGFuZS4gICovCiAJICBMaXNwX09iamVjdCBwYW5lX25hbWU7CkBAIC02NzMsNyArNjczLDcg QEAKIAogCSAgcGFuZXNfc2VlbisrOwogCi0JICBwYW5lX25hbWUgPSBYVkVDVE9SIChtZW51 X2l0ZW1zKS0+Y29udGVudHNbaSArIE1FTlVfSVRFTVNfUEFORV9OQU1FXTsKKwkgIHBhbmVf bmFtZSA9IEFSRUYgKG1lbnVfaXRlbXMsIGkgKyBNRU5VX0lURU1TX1BBTkVfTkFNRSk7CiAK ICNpZmRlZiBIQVZFX05UR1VJCiAJICBpZiAoU1RSSU5HUCAocGFuZV9uYW1lKSkKQEAgLTg5 MywyNSArODkzLDI1IEBACiAKICAgd2hpbGUgKGkgPCBtZW51X2Jhcl9pdGVtc191c2VkKQog ICAgIHsKLSAgICAgIGlmIChFUSAoWFZFQ1RPUiAodmVjdG9yKS0+Y29udGVudHNbaV0sIFFu aWwpKQorICAgICAgaWYgKEVRIChBUkVGICh2ZWN0b3IsIGkpLCBRbmlsKSkKIAl7CiAJICBz dWJwcmVmaXhfc3RhY2tbc3VibWVudV9kZXB0aCsrXSA9IHByZWZpeDsKIAkgIHByZWZpeCA9 IGVudHJ5OwogCSAgaSsrOwogCX0KLSAgICAgIGVsc2UgaWYgKEVRIChYVkVDVE9SICh2ZWN0 b3IpLT5jb250ZW50c1tpXSwgUWxhbWJkYSkpCisgICAgICBlbHNlIGlmIChFUSAoQVJFRiAo dmVjdG9yLCBpKSwgUWxhbWJkYSkpCiAJewogCSAgcHJlZml4ID0gc3VicHJlZml4X3N0YWNr Wy0tc3VibWVudV9kZXB0aF07CiAJICBpKys7CiAJfQotICAgICAgZWxzZSBpZiAoRVEgKFhW RUNUT1IgKHZlY3RvciktPmNvbnRlbnRzW2ldLCBRdCkpCisgICAgICBlbHNlIGlmIChFUSAo QVJFRiAodmVjdG9yLCBpKSwgUXQpKQogCXsKLQkgIHByZWZpeCA9IFhWRUNUT1IgKHZlY3Rv ciktPmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX1BBTkVfUFJFRklYXTsKKwkgIHByZWZpeCA9 IEFSRUYgKHZlY3RvciwgaSArIE1FTlVfSVRFTVNfUEFORV9QUkVGSVgpOwogCSAgaSArPSBN RU5VX0lURU1TX1BBTkVfTEVOR1RIOwogCX0KICAgICAgIGVsc2UKIAl7Ci0JICBlbnRyeSA9 IFhWRUNUT1IgKHZlY3RvciktPmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX0lURU1fVkFMVUVd OworCSAgZW50cnkgPSBBUkVGICh2ZWN0b3IsIGkgKyBNRU5VX0lURU1TX0lURU1fVkFMVUUp OwogCSAgLyogVHJlYXQgdGhlIHBvaW50ZXIgYXMgYW4gaW50ZWdlci4gIFRoZXJlJ3Mgbm8g cHJvYmxlbQogCSAgICAgYXMgbG9uZyBhcyBwb2ludGVycyBoYXZlIGVub3VnaCBiaXRzIHRv IGhvbGQgc21hbGwgaW50ZWdlcnMuICAqLwogCSAgaWYgKChpbnRwdHJfdCkgY2xpZW50X2Rh dGEgPT0gaSkKQEAgLTk3NiwzMiArOTc2LDMyIEBACiAKICAgd2hpbGUgKGkgPCBtZW51X2l0 ZW1zX3VzZWQpCiAgICAgewotICAgICAgaWYgKEVRIChYVkVDVE9SIChtZW51X2l0ZW1zKS0+ Y29udGVudHNbaV0sIFFuaWwpKQorICAgICAgaWYgKEVRIChBUkVGIChtZW51X2l0ZW1zLCBp KSwgUW5pbCkpCiAgICAgICAgIHsKICAgICAgICAgICBzdWJwcmVmaXhfc3RhY2tbc3VibWVu dV9kZXB0aCsrXSA9IHByZWZpeDsKICAgICAgICAgICBwcmVmaXggPSBlbnRyeTsKICAgICAg ICAgICBpKys7CiAgICAgICAgIH0KLSAgICAgIGVsc2UgaWYgKEVRIChYVkVDVE9SIChtZW51 X2l0ZW1zKS0+Y29udGVudHNbaV0sIFFsYW1iZGEpKQorICAgICAgZWxzZSBpZiAoRVEgKEFS RUYgKG1lbnVfaXRlbXMsIGkpLCBRbGFtYmRhKSkKICAgICAgICAgewogICAgICAgICAgIHBy ZWZpeCA9IHN1YnByZWZpeF9zdGFja1stLXN1Ym1lbnVfZGVwdGhdOwogICAgICAgICAgIGkr KzsKICAgICAgICAgfQotICAgICAgZWxzZSBpZiAoRVEgKFhWRUNUT1IgKG1lbnVfaXRlbXMp LT5jb250ZW50c1tpXSwgUXQpKQorICAgICAgZWxzZSBpZiAoRVEgKEFSRUYgKG1lbnVfaXRl bXMsIGkpLCBRdCkpCiAgICAgICAgIHsKICAgICAgICAgICBwcmVmaXgKLSAgICAgICAgICAg ID0gWFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX1BBTkVf UFJFRklYXTsKKyAgICAgICAgICAgID0gQVJFRiAobWVudV9pdGVtcywgaSArIE1FTlVfSVRF TVNfUEFORV9QUkVGSVgpOwogICAgICAgICAgIGkgKz0gTUVOVV9JVEVNU19QQU5FX0xFTkdU SDsKICAgICAgICAgfQogICAgICAgLyogSWdub3JlIGEgbmlsIGluIHRoZSBpdGVtIGxpc3Qu CiAgICAgICAgICBJdCdzIG1lYW5pbmdmdWwgb25seSBmb3IgZGlhbG9nIGJveGVzLiAgKi8K LSAgICAgIGVsc2UgaWYgKEVRIChYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaV0s IFFxdW90ZSkpCisgICAgICBlbHNlIGlmIChFUSAoQVJFRiAobWVudV9pdGVtcywgaSksIFFx dW90ZSkpCiAgICAgICAgIGkgKz0gMTsKICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAg ICAgIGVudHJ5Ci0gICAgICAgICAgICA9IFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50 c1tpICsgTUVOVV9JVEVNU19JVEVNX1ZBTFVFXTsKLSAgICAgICAgICBpZiAoJlhWRUNUT1Ig KG1lbnVfaXRlbXMpLT5jb250ZW50c1tpXSA9PSBjbGllbnRfZGF0YSkKKyAgICAgICAgICAg ID0gQVJFRiAobWVudV9pdGVtcywgaSArIE1FTlVfSVRFTVNfSVRFTV9WQUxVRSk7CisgICAg ICAgICAgaWYgKCZBUkVGIChtZW51X2l0ZW1zLCBpKSA9PSBjbGllbnRfZGF0YSkKICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgaWYgKGtleW1hcHMgIT0gMCkKICAgICAgICAgICAg ICAgICB7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL21pbmlidWYuYycKLS0tIHNyYy9taW5p YnVmLmMJMjAxMi0wNi0xNiAxMjoyNDoxNSArMDAwMAorKysgc3JjL21pbmlidWYuYwkyMDEy LTA2LTE4IDE2OjE2OjIwICswMDAwCkBAIC0xMjY2LDcgKzEyNjYsNyBAQAogICAgIHsKICAg ICAgIGNvbGxlY3Rpb24gPSBjaGVja19vYmFycmF5IChjb2xsZWN0aW9uKTsKICAgICAgIG9i c2l6ZSA9IEFTSVpFIChjb2xsZWN0aW9uKTsKLSAgICAgIGJ1Y2tldCA9IFhWRUNUT1IgKGNv bGxlY3Rpb24pLT5jb250ZW50c1tpZHhdOworICAgICAgYnVja2V0ID0gQVJFRiAoY29sbGVj dGlvbiwgaWR4KTsKICAgICB9CiAKICAgd2hpbGUgKDEpCkBAIC0xMzAxLDcgKzEzMDEsNyBA QAogCSAgICBicmVhazsKIAkgIGVsc2UKIAkgICAgewotCSAgICAgIGJ1Y2tldCA9IFhWRUNU T1IgKGNvbGxlY3Rpb24pLT5jb250ZW50c1tpZHhdOworCSAgICAgIGJ1Y2tldCA9IEFSRUYg KGNvbGxlY3Rpb24sIGlkeCk7CiAJICAgICAgY29udGludWU7CiAJICAgIH0KIAl9CkBAIC0x NTI5LDcgKzE1MjksNyBAQAogICAgIHsKICAgICAgIGNvbGxlY3Rpb24gPSBjaGVja19vYmFy cmF5IChjb2xsZWN0aW9uKTsKICAgICAgIG9ic2l6ZSA9IEFTSVpFIChjb2xsZWN0aW9uKTsK LSAgICAgIGJ1Y2tldCA9IFhWRUNUT1IgKGNvbGxlY3Rpb24pLT5jb250ZW50c1tpZHhdOwor ICAgICAgYnVja2V0ID0gQVJFRiAoY29sbGVjdGlvbiwgaWR4KTsKICAgICB9CiAKICAgd2hp bGUgKDEpCkBAIC0xNTY0LDcgKzE1NjQsNyBAQAogCSAgICBicmVhazsKIAkgIGVsc2UKIAkg ICAgewotCSAgICAgIGJ1Y2tldCA9IFhWRUNUT1IgKGNvbGxlY3Rpb24pLT5jb250ZW50c1tp ZHhdOworCSAgICAgIGJ1Y2tldCA9IEFSRUYgKGNvbGxlY3Rpb24sIGlkeCk7CiAJICAgICAg Y29udGludWU7CiAJICAgIH0KIAl9CkBAIC0xNzcyLDcgKzE3NzIsNyBAQAogCXsKIAkgIGZv ciAoaSA9IEFTSVpFIChjb2xsZWN0aW9uKSAtIDE7IGkgPj0gMDsgaS0tKQogCSAgICB7Ci0J ICAgICAgdGFpbCA9IFhWRUNUT1IgKGNvbGxlY3Rpb24pLT5jb250ZW50c1tpXTsKKwkgICAg ICB0YWlsID0gQVJFRiAoY29sbGVjdGlvbiwgaSk7CiAJICAgICAgaWYgKFNZTUJPTFAgKHRh aWwpKQogCQl3aGlsZSAoMSkKIAkJICB7Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL21zZG9z LmMnCi0tLSBzcmMvbXNkb3MuYwkyMDEyLTA1LTI3IDAxOjA2OjQ0ICswMDAwCisrKyBzcmMv bXNkb3MuYwkyMDEyLTA2LTE4IDE2OjE2OjIwICswMDAwCkBAIC0yNDY2LDEyICsyNDY2LDEw IEBACiAgICAgICBzYyA9IHJlZ3MuaC5haDsKIAogICAgICAgdG90YWxfZG9za2V5cyArPSAy OwotICAgICAgWFZFQ1RPUiAocmVjZW50X2Rvc2tleXMpLT5jb250ZW50c1tyZWNlbnRfZG9z a2V5c19pbmRleCsrXQotCT0gbWFrZV9udW1iZXIgKGMpOworICAgICAgQVNFVCAocmVjZW50 X2Rvc2tleXMsIHJlY2VudF9kb3NrZXlzX2luZGV4LCBtYWtlX251bWJlciAoYykpLCByZWNl bnRfZG9za2V5c19pbmRleCsrOwogICAgICAgaWYgKHJlY2VudF9kb3NrZXlzX2luZGV4ID09 IE5VTV9SRUNFTlRfRE9TS0VZUykKIAlyZWNlbnRfZG9za2V5c19pbmRleCA9IDA7Ci0gICAg ICBYVkVDVE9SIChyZWNlbnRfZG9za2V5cyktPmNvbnRlbnRzW3JlY2VudF9kb3NrZXlzX2lu ZGV4KytdCi0JPSBtYWtlX251bWJlciAoc2MpOworICAgICAgQVNFVCAocmVjZW50X2Rvc2tl eXMsIHJlY2VudF9kb3NrZXlzX2luZGV4LCBtYWtlX251bWJlciAoc2MpKSwgcmVjZW50X2Rv c2tleXNfaW5kZXgrKzsKICAgICAgIGlmIChyZWNlbnRfZG9za2V5c19pbmRleCA9PSBOVU1f UkVDRU5UX0RPU0tFWVMpCiAJcmVjZW50X2Rvc2tleXNfaW5kZXggPSAwOwogCgo9PT0gbW9k aWZpZWQgZmlsZSAnc3JjL3ByaW50LmMnCi0tLSBzcmMvcHJpbnQuYwkyMDEyLTA2LTE2IDEy OjI0OjE1ICswMDAwCisrKyBzcmMvcHJpbnQuYwkyMDEyLTA2LTE4IDE2OjE2OjIwICswMDAw CkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogCSAgaWYgKHNpemUgJiBQU0VVRE9WRUNUT1JfRkxB RykKIAkgICAgc2l6ZSAmPSBQU0VVRE9WRUNUT1JfU0laRV9NQVNLOwogCSAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykKLQkgICAgcHJpbnRfcHJlcHJvY2VzcyAoWFZFQ1RPUiAob2Jq KS0+Y29udGVudHNbaV0pOworCSAgICBwcmludF9wcmVwcm9jZXNzIChBUkVGIChvYmosIGkp KTsKIAkgIGlmIChIQVNIX1RBQkxFX1AgKG9iaikpCiAJICAgIHsgLyogRm9yIGhhc2ggdGFi bGVzLCB0aGUga2V5X2FuZF92YWx1ZSBzbG90IGlzIHBhc3QKIAkJIGBzaXplJyBiZWNhdXNl IGl0IG5lZWRzIHRvIGJlIG1hcmtlZCBzcGVjaWFsbHkgaW4gY2FzZQpAQCAtMTk2MCw3ICsx OTYwLDcgQEAKIAkgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkgICAgICB7CiAJ CWlmIChpKSBQUklOVENIQVIgKCcgJyk7Ci0JCXRlbSA9IFhWRUNUT1IgKG9iaiktPmNvbnRl bnRzW2ldOworCQl0ZW0gPSBBUkVGIChvYmosIGkpOwogCQlwcmludF9vYmplY3QgKHRlbSwg cHJpbnRjaGFyZnVuLCBlc2NhcGVmbGFnKTsKIAkgICAgICB9CiAJICAgIGlmIChzaXplIDwg cmVhbF9zaXplKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9zeW50YXguYycKLS0tIHNyYy9z eW50YXguYwkyMDEyLTA2LTE2IDEyOjI0OjE1ICswMDAwCisrKyBzcmMvc3ludGF4LmMJMjAx Mi0wNi0xOCAxNjoxNjoyMCArMDAwMApAQCAtOTg4LDcgKzk4OCw3IEBACiAgICAgICB9CiAK ICAgaWYgKHZhbCA8IEFTSVpFIChWc3ludGF4X2NvZGVfb2JqZWN0KSAmJiBOSUxQIChtYXRj aCkpCi0gICAgcmV0dXJuIFhWRUNUT1IgKFZzeW50YXhfY29kZV9vYmplY3QpLT5jb250ZW50 c1t2YWxdOworICAgIHJldHVybiBBUkVGIChWc3ludGF4X2NvZGVfb2JqZWN0LCB2YWwpOwog ICBlbHNlCiAgICAgLyogU2luY2Ugd2UgY2FuJ3QgdXNlIGEgc2hhcmVkIG9iamVjdCwgbGV0 J3MgbWFrZSBhIG5ldyBvbmUuICAqLwogICAgIHJldHVybiBGY29ucyAobWFrZV9udW1iZXIg KHZhbCksIG1hdGNoKTsKQEAgLTMzODYsMzIgKzMzODYsMzEgQEAKICAgLyogQ3JlYXRlIG9i amVjdHMgd2hpY2ggY2FuIGJlIHNoYXJlZCBhbW9uZyBzeW50YXggdGFibGVzLiAgKi8KICAg VnN5bnRheF9jb2RlX29iamVjdCA9IEZtYWtlX3ZlY3RvciAobWFrZV9udW1iZXIgKFNtYXgp LCBRbmlsKTsKICAgZm9yIChpID0gMDsgaSA8IEFTSVpFIChWc3ludGF4X2NvZGVfb2JqZWN0 KTsgaSsrKQotICAgIFhWRUNUT1IgKFZzeW50YXhfY29kZV9vYmplY3QpLT5jb250ZW50c1tp XQotICAgICAgPSBGY29ucyAobWFrZV9udW1iZXIgKGkpLCBRbmlsKTsKKyAgICBBU0VUIChW c3ludGF4X2NvZGVfb2JqZWN0LCBpLCBGY29ucyAobWFrZV9udW1iZXIgKGkpLCBRbmlsKSk7 CiAKICAgLyogTm93IHdlIGFyZSByZWFkeSB0byBzZXQgdXAgdGhpcyBwcm9wZXJ0eSwgc28g d2UgY2FuCiAgICAgIGNyZWF0ZSBzeW50YXggdGFibGVzLiAgKi8KICAgRnB1dCAoUXN5bnRh eF90YWJsZSwgUWNoYXJfdGFibGVfZXh0cmFfc2xvdHMsIG1ha2VfbnVtYmVyICgwKSk7CiAK LSAgdGVtcCA9IFhWRUNUT1IgKFZzeW50YXhfY29kZV9vYmplY3QpLT5jb250ZW50c1soaW50 KSBTd2hpdGVzcGFjZV07CisgIHRlbXAgPSBBUkVGIChWc3ludGF4X2NvZGVfb2JqZWN0LCAo aW50KSBTd2hpdGVzcGFjZSk7CiAKICAgVnN0YW5kYXJkX3N5bnRheF90YWJsZSA9IEZtYWtl X2NoYXJfdGFibGUgKFFzeW50YXhfdGFibGUsIHRlbXApOwogCiAgIC8qIENvbnRyb2wgY2hh cmFjdGVycyBzaG91bGQgbm90IGJlIHdoaXRlc3BhY2UuICAqLwotICB0ZW1wID0gWFZFQ1RP UiAoVnN5bnRheF9jb2RlX29iamVjdCktPmNvbnRlbnRzWyhpbnQpIFNwdW5jdF07CisgIHRl bXAgPSBBUkVGIChWc3ludGF4X2NvZGVfb2JqZWN0LCAoaW50KSBTcHVuY3QpOwogICBmb3Ig KGkgPSAwOyBpIDw9ICcgJyAtIDE7IGkrKykKICAgICBTRVRfUkFXX1NZTlRBWF9FTlRSWSAo VnN0YW5kYXJkX3N5bnRheF90YWJsZSwgaSwgdGVtcCk7CiAgIFNFVF9SQVdfU1lOVEFYX0VO VFJZIChWc3RhbmRhcmRfc3ludGF4X3RhYmxlLCAwMTc3LCB0ZW1wKTsKIAogICAvKiBFeGNl cHQgdGhhdCBhIGZldyByZWFsbHkgYXJlIHdoaXRlc3BhY2UuICAqLwotICB0ZW1wID0gWFZF Q1RPUiAoVnN5bnRheF9jb2RlX29iamVjdCktPmNvbnRlbnRzWyhpbnQpIFN3aGl0ZXNwYWNl XTsKKyAgdGVtcCA9IEFSRUYgKFZzeW50YXhfY29kZV9vYmplY3QsIChpbnQpIFN3aGl0ZXNw YWNlKTsKICAgU0VUX1JBV19TWU5UQVhfRU5UUlkgKFZzdGFuZGFyZF9zeW50YXhfdGFibGUs ICcgJywgdGVtcCk7CiAgIFNFVF9SQVdfU1lOVEFYX0VOVFJZIChWc3RhbmRhcmRfc3ludGF4 X3RhYmxlLCAnXHQnLCB0ZW1wKTsKICAgU0VUX1JBV19TWU5UQVhfRU5UUlkgKFZzdGFuZGFy ZF9zeW50YXhfdGFibGUsICdcbicsIHRlbXApOwogICBTRVRfUkFXX1NZTlRBWF9FTlRSWSAo VnN0YW5kYXJkX3N5bnRheF90YWJsZSwgMDE1LCB0ZW1wKTsKICAgU0VUX1JBV19TWU5UQVhf RU5UUlkgKFZzdGFuZGFyZF9zeW50YXhfdGFibGUsIDAxNCwgdGVtcCk7CiAKLSAgdGVtcCA9 IFhWRUNUT1IgKFZzeW50YXhfY29kZV9vYmplY3QpLT5jb250ZW50c1soaW50KSBTd29yZF07 CisgIHRlbXAgPSBBUkVGIChWc3ludGF4X2NvZGVfb2JqZWN0LCAoaW50KSBTd29yZCk7CiAg IGZvciAoaSA9ICdhJzsgaSA8PSAneic7IGkrKykKICAgICBTRVRfUkFXX1NZTlRBWF9FTlRS WSAoVnN0YW5kYXJkX3N5bnRheF90YWJsZSwgaSwgdGVtcCk7CiAgIGZvciAoaSA9ICdBJzsg aSA8PSAnWic7IGkrKykKQEAgLTM0MzksMTQgKzM0MzgsMTQgQEAKICAgU0VUX1JBV19TWU5U QVhfRU5UUlkgKFZzdGFuZGFyZF9zeW50YXhfdGFibGUsICdcXCcsCiAJCQlGY29ucyAobWFr ZV9udW1iZXIgKChpbnQpIFNlc2NhcGUpLCBRbmlsKSk7CiAKLSAgdGVtcCA9IFhWRUNUT1Ig KFZzeW50YXhfY29kZV9vYmplY3QpLT5jb250ZW50c1soaW50KSBTc3ltYm9sXTsKKyAgdGVt cCA9IEFSRUYgKFZzeW50YXhfY29kZV9vYmplY3QsIChpbnQpIFNzeW1ib2wpOwogICBmb3Ig KGkgPSAwOyBpIDwgMTA7IGkrKykKICAgICB7CiAgICAgICBjID0gIl8tKyovJnw8Pj0iW2ld OwogICAgICAgU0VUX1JBV19TWU5UQVhfRU5UUlkgKFZzdGFuZGFyZF9zeW50YXhfdGFibGUs IGMsIHRlbXApOwogICAgIH0KIAotICB0ZW1wID0gWFZFQ1RPUiAoVnN5bnRheF9jb2RlX29i amVjdCktPmNvbnRlbnRzWyhpbnQpIFNwdW5jdF07CisgIHRlbXAgPSBBUkVGIChWc3ludGF4 X2NvZGVfb2JqZWN0LCAoaW50KSBTcHVuY3QpOwogICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkr KykKICAgICB7CiAgICAgICBjID0gIi4sOzo/ISNAfl4nYCJbaV07CkBAIC0zNDU0LDcgKzM0 NTMsNyBAQAogICAgIH0KIAogICAvKiBBbGwgbXVsdGlieXRlIGNoYXJhY3RlcnMgaGF2ZSBz eW50YXggYHdvcmQnIGJ5IGRlZmF1bHQuICAqLwotICB0ZW1wID0gWFZFQ1RPUiAoVnN5bnRh eF9jb2RlX29iamVjdCktPmNvbnRlbnRzWyhpbnQpIFN3b3JkXTsKKyAgdGVtcCA9IEFSRUYg KFZzeW50YXhfY29kZV9vYmplY3QsIChpbnQpIFN3b3JkKTsKICAgY2hhcl90YWJsZV9zZXRf cmFuZ2UgKFZzdGFuZGFyZF9zeW50YXhfdGFibGUsIDB4ODAsIE1BWF9DSEFSLCB0ZW1wKTsK IH0KIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93aW5kb3cuYycKLS0tIHNyYy93aW5kb3cu YwkyMDEyLTA2LTE2IDEyOjI0OjE1ICswMDAwCisrKyBzcmMvd2luZG93LmMJMjAxMi0wNi0x OCAxNjoxNjoyMCArMDAwMApAQCAtNjAzNiw4ICs2MDM2LDggQEAKICAgdGVtID0gRm1ha2Vf dmVjdG9yIChtYWtlX251bWJlciAobl93aW5kb3dzKSwgUW5pbCk7CiAgIGRhdGEtPnNhdmVk X3dpbmRvd3MgPSB0ZW07CiAgIGZvciAoaSA9IDA7IGkgPCBuX3dpbmRvd3M7IGkrKykKLSAg ICBYVkVDVE9SICh0ZW0pLT5jb250ZW50c1tpXQotICAgICAgPSBGbWFrZV92ZWN0b3IgKG1h a2VfbnVtYmVyIChWRUNTSVpFIChzdHJ1Y3Qgc2F2ZWRfd2luZG93KSksIFFuaWwpOworICAg IEFTRVQgKHRlbSwgaSwKKyAgICAgICAgIEZtYWtlX3ZlY3RvciAobWFrZV9udW1iZXIgKFZF Q1NJWkUgKHN0cnVjdCBzYXZlZF93aW5kb3cpKSwgUW5pbCkpOwogICBzYXZlX3dpbmRvd19z YXZlIChGUkFNRV9ST09UX1dJTkRPVyAoZiksIFhWRUNUT1IgKHRlbSksIDApOwogICBYU0VU V0lORE9XX0NPTkZJR1VSQVRJT04gKHRlbSwgZGF0YSk7CiAgIHJldHVybiAodGVtKTsKCj09 PSBtb2RpZmllZCBmaWxlICdzcmMveG1lbnUuYycKLS0tIHNyYy94bWVudS5jCTIwMTItMDYt MTYgMTI6MjQ6MTUgKzAwMDAKKysrIHNyYy94bWVudS5jCTIwMTItMDYtMTggMTY6MTY6MjAg KzAwMDAKQEAgLTEwNDAsOSArMTA0MCw5IEBACiAJewogCSAgTGlzcF9PYmplY3Qga2V5LCBz dHJpbmcsIG1hcHM7CiAKLQkgIGtleSA9IFhWRUNUT1IgKGl0ZW1zKS0+Y29udGVudHNbNCAq IGldOwotCSAgc3RyaW5nID0gWFZFQ1RPUiAoaXRlbXMpLT5jb250ZW50c1s0ICogaSArIDFd OwotCSAgbWFwcyA9IFhWRUNUT1IgKGl0ZW1zKS0+Y29udGVudHNbNCAqIGkgKyAyXTsKKwkg IGtleSA9IEFSRUYgKGl0ZW1zLCA0ICogaSk7CisJICBzdHJpbmcgPSBBUkVGIChpdGVtcywg NCAqIGkgKyAxKTsKKwkgIG1hcHMgPSBBUkVGIChpdGVtcywgNCAqIGkgKyAyKTsKIAkgIGlm IChOSUxQIChzdHJpbmcpKQogCSAgICBicmVhazsKIApAQCAtMTA5Myw3ICsxMDkzLDcgQEAK ICAgICAgIC8qIENvbXBhcmUgdGhlIG5ldyBtZW51IGl0ZW1zIHdpdGggdGhlIG9uZXMgY29t cHV0ZWQgbGFzdCB0aW1lLiAgKi8KICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmV2aW91c19t ZW51X2l0ZW1zX3VzZWQ7IGkrKykKIAlpZiAobWVudV9pdGVtc191c2VkID09IGkKLQkgICAg fHwgKCFFUSAocHJldmlvdXNfaXRlbXNbaV0sIFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250 ZW50c1tpXSkpKQorCSAgICB8fCAoIUVRIChwcmV2aW91c19pdGVtc1tpXSwgQVJFRiAobWVu dV9pdGVtcywgaSkpKSkKIAkgIGJyZWFrOwogICAgICAgaWYgKGkgPT0gbWVudV9pdGVtc191 c2VkICYmIGkgPT0gcHJldmlvdXNfbWVudV9pdGVtc191c2VkICYmIGkgIT0gMCkKIAl7CkBA IC0xMTE4LDcgKzExMTgsNyBAQAogICAgICAgZm9yIChpID0gMDsgaSA8IEFTSVpFIChpdGVt cyk7IGkgKz0gNCkKIAl7CiAJICBMaXNwX09iamVjdCBzdHJpbmc7Ci0JICBzdHJpbmcgPSBY VkVDVE9SIChpdGVtcyktPmNvbnRlbnRzW2kgKyAxXTsKKwkgIHN0cmluZyA9IEFSRUYgKGl0 ZW1zLCBpICsgMSk7CiAJICBpZiAoTklMUCAoc3RyaW5nKSkKICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgIHd2LT5uYW1lID0gU1NEQVRBIChzdHJpbmcpOwpAQCAtMTE0NSw3ICsx MTQ1LDcgQEAKIAl7CiAJICBMaXNwX09iamVjdCBzdHJpbmc7CiAKLQkgIHN0cmluZyA9IFhW RUNUT1IgKGl0ZW1zKS0+Y29udGVudHNbaSArIDFdOworCSAgc3RyaW5nID0gQVJFRiAoaXRl bXMsIGkgKyAxKTsKIAkgIGlmIChOSUxQIChzdHJpbmcpKQogCSAgICBicmVhazsKIApAQCAt MTY3Nyw3ICsxNjc3LDcgQEAKICAgaSA9IDA7CiAgIHdoaWxlIChpIDwgbWVudV9pdGVtc191 c2VkKQogICAgIHsKLSAgICAgIGlmIChFUSAoWFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRl bnRzW2ldLCBRbmlsKSkKKyAgICAgIGlmIChFUSAoQVJFRiAobWVudV9pdGVtcywgaSksIFFu aWwpKQogCXsKIAkgIHN1Ym1lbnVfc3RhY2tbc3VibWVudV9kZXB0aCsrXSA9IHNhdmVfd3Y7 CiAJICBzYXZlX3d2ID0gcHJldl93djsKQEAgLTE2ODUsMjEgKzE2ODUsMjEgQEAKIAkgIGZp cnN0X3BhbmUgPSAxOwogCSAgaSsrOwogCX0KLSAgICAgIGVsc2UgaWYgKEVRIChYVkVDVE9S IChtZW51X2l0ZW1zKS0+Y29udGVudHNbaV0sIFFsYW1iZGEpKQorICAgICAgZWxzZSBpZiAo RVEgKEFSRUYgKG1lbnVfaXRlbXMsIGkpLCBRbGFtYmRhKSkKIAl7CiAJICBwcmV2X3d2ID0g c2F2ZV93djsKIAkgIHNhdmVfd3YgPSBzdWJtZW51X3N0YWNrWy0tc3VibWVudV9kZXB0aF07 CiAJICBmaXJzdF9wYW5lID0gMDsKIAkgIGkrKzsKIAl9Ci0gICAgICBlbHNlIGlmIChFUSAo WFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2ldLCBRdCkKKyAgICAgIGVsc2UgaWYg KEVRIChBUkVGIChtZW51X2l0ZW1zLCBpKSwgUXQpCiAJICAgICAgICYmIHN1Ym1lbnVfZGVw dGggIT0gMCkKIAlpICs9IE1FTlVfSVRFTVNfUEFORV9MRU5HVEg7CiAgICAgICAvKiBJZ25v cmUgYSBuaWwgaW4gdGhlIGl0ZW0gbGlzdC4KIAkgSXQncyBtZWFuaW5nZnVsIG9ubHkgZm9y IGRpYWxvZyBib3hlcy4gICovCi0gICAgICBlbHNlIGlmIChFUSAoWFZFQ1RPUiAobWVudV9p dGVtcyktPmNvbnRlbnRzW2ldLCBRcXVvdGUpKQorICAgICAgZWxzZSBpZiAoRVEgKEFSRUYg KG1lbnVfaXRlbXMsIGkpLCBRcXVvdGUpKQogCWkgKz0gMTsKLSAgICAgIGVsc2UgaWYgKEVR IChYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaV0sIFF0KSkKKyAgICAgIGVsc2Ug aWYgKEVRIChBUkVGIChtZW51X2l0ZW1zLCBpKSwgUXQpKQogCXsKIAkgIC8qIENyZWF0ZSBh IG5ldyBwYW5lLiAgKi8KIAkgIExpc3BfT2JqZWN0IHBhbmVfbmFtZSwgcHJlZml4OwpAQCAt MTc4OSw3ICsxNzg5LDcgQEAKIAkgICAgIG1ha2UgdGhlIGNhbGxfZGF0YSBudWxsIHNvIHRo YXQgaXQgd29uJ3QgZGlzcGxheSBhIGJveAogCSAgICAgd2hlbiB0aGUgbW91c2UgaXMgb24g aXQuICAqLwogCSAgd3YtPmNhbGxfZGF0YQotCSAgICA9ICghTklMUCAoZGVmKSA/ICh2b2lk ICopICZYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaV0gOiAwKTsKKwkgICAgPSAo IU5JTFAgKGRlZikgPyAodm9pZCAqKSAmQVJFRiAobWVudV9pdGVtcywgaSkgOiAwKTsKIAkg IHd2LT5lbmFibGVkID0gIU5JTFAgKGVuYWJsZSk7CiAKIAkgIGlmIChOSUxQICh0eXBlKSkK QEAgLTE4NjUsMzIgKzE4NjUsMzIgQEAKICAgICAgIGkgPSAwOwogICAgICAgd2hpbGUgKGkg PCBtZW51X2l0ZW1zX3VzZWQpCiAJewotCSAgaWYgKEVRIChYVkVDVE9SIChtZW51X2l0ZW1z KS0+Y29udGVudHNbaV0sIFFuaWwpKQorCSAgaWYgKEVRIChBUkVGIChtZW51X2l0ZW1zLCBp KSwgUW5pbCkpCiAJICAgIHsKIAkgICAgICBzdWJwcmVmaXhfc3RhY2tbc3VibWVudV9kZXB0 aCsrXSA9IHByZWZpeDsKIAkgICAgICBwcmVmaXggPSBlbnRyeTsKIAkgICAgICBpKys7CiAJ ICAgIH0KLQkgIGVsc2UgaWYgKEVRIChYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNb aV0sIFFsYW1iZGEpKQorCSAgZWxzZSBpZiAoRVEgKEFSRUYgKG1lbnVfaXRlbXMsIGkpLCBR bGFtYmRhKSkKIAkgICAgewogCSAgICAgIHByZWZpeCA9IHN1YnByZWZpeF9zdGFja1stLXN1 Ym1lbnVfZGVwdGhdOwogCSAgICAgIGkrKzsKIAkgICAgfQotCSAgZWxzZSBpZiAoRVEgKFhW RUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1tpXSwgUXQpKQorCSAgZWxzZSBpZiAoRVEg KEFSRUYgKG1lbnVfaXRlbXMsIGkpLCBRdCkpCiAJICAgIHsKIAkgICAgICBwcmVmaXgKLQkJ PSBYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaSArIE1FTlVfSVRFTVNfUEFORV9Q UkVGSVhdOworCQk9IEFSRUYgKG1lbnVfaXRlbXMsIGkgKyBNRU5VX0lURU1TX1BBTkVfUFJF RklYKTsKIAkgICAgICBpICs9IE1FTlVfSVRFTVNfUEFORV9MRU5HVEg7CiAJICAgIH0KIAkg IC8qIElnbm9yZSBhIG5pbCBpbiB0aGUgaXRlbSBsaXN0LgogCSAgICAgSXQncyBtZWFuaW5n ZnVsIG9ubHkgZm9yIGRpYWxvZyBib3hlcy4gICovCi0JICBlbHNlIGlmIChFUSAoWFZFQ1RP UiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2ldLCBRcXVvdGUpKQorCSAgZWxzZSBpZiAoRVEg KEFSRUYgKG1lbnVfaXRlbXMsIGkpLCBRcXVvdGUpKQogCSAgICBpICs9IDE7CiAJICBlbHNl CiAJICAgIHsKIAkgICAgICBlbnRyeQotCQk9IFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250 ZW50c1tpICsgTUVOVV9JVEVNU19JVEVNX1ZBTFVFXTsKLQkgICAgICBpZiAobWVudV9pdGVt X3NlbGVjdGlvbiA9PSAmWFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2ldKQorCQk9 IEFSRUYgKG1lbnVfaXRlbXMsIGkgKyBNRU5VX0lURU1TX0lURU1fVkFMVUUpOworCSAgICAg IGlmIChtZW51X2l0ZW1fc2VsZWN0aW9uID09ICZBUkVGIChtZW51X2l0ZW1zLCBpKSkKIAkJ ewogCQkgIGlmIChrZXltYXBzICE9IDApCiAJCSAgICB7CkBAIC0yMDU4LDggKzIwNTgsOCBA QAogICB7CiAgICAgTGlzcF9PYmplY3QgcGFuZV9uYW1lLCBwcmVmaXg7CiAgICAgY29uc3Qg Y2hhciAqcGFuZV9zdHJpbmc7Ci0gICAgcGFuZV9uYW1lID0gWFZFQ1RPUiAobWVudV9pdGVt cyktPmNvbnRlbnRzW01FTlVfSVRFTVNfUEFORV9OQU1FXTsKLSAgICBwcmVmaXggPSBYVkVD VE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbTUVOVV9JVEVNU19QQU5FX1BSRUZJWF07Cisg ICAgcGFuZV9uYW1lID0gQVJFRiAobWVudV9pdGVtcywgTUVOVV9JVEVNU19QQU5FX05BTUUp OworICAgIHByZWZpeCA9IEFSRUYgKG1lbnVfaXRlbXMsIE1FTlVfSVRFTVNfUEFORV9QUkVG SVgpOwogICAgIHBhbmVfc3RyaW5nID0gKE5JTFAgKHBhbmVfbmFtZSkKIAkJICAgPyAiIiA6 IFNTREFUQSAocGFuZV9uYW1lKSk7CiAgICAgcHJldl93diA9IHhtYWxsb2Nfd2lkZ2V0X3Zh bHVlICgpOwpAQCAtMjA3OCwxMCArMjA3OCwxMCBAQAogCiAJLyogQ3JlYXRlIGEgbmV3IGl0 ZW0gd2l0aGluIGN1cnJlbnQgcGFuZS4gICovCiAJTGlzcF9PYmplY3QgaXRlbV9uYW1lLCBl bmFibGUsIGRlc2NyaXA7Ci0JaXRlbV9uYW1lID0gWFZFQ1RPUiAobWVudV9pdGVtcyktPmNv bnRlbnRzW2kgKyBNRU5VX0lURU1TX0lURU1fTkFNRV07Ci0JZW5hYmxlID0gWFZFQ1RPUiAo bWVudV9pdGVtcyktPmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX0lURU1fRU5BQkxFXTsKKwlp dGVtX25hbWUgPSBBUkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19JVEVNX05BTUUp OworCWVuYWJsZSA9IEFSRUYgKG1lbnVfaXRlbXMsIGkgKyBNRU5VX0lURU1TX0lURU1fRU5B QkxFKTsKIAlkZXNjcmlwCi0JICA9IFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1tp ICsgTUVOVV9JVEVNU19JVEVNX0VRVUlWX0tFWV07CisJICA9IEFSRUYgKG1lbnVfaXRlbXMs IGkgKyBNRU5VX0lURU1TX0lURU1fRVFVSVZfS0VZKTsKIAogCWlmIChOSUxQIChpdGVtX25h bWUpKQogCSAgewpAQCAtMjExMCw3ICsyMTEwLDcgQEAKIAlpZiAoIU5JTFAgKGRlc2NyaXAp KQogCSAgd3YtPmtleSA9IFNTREFUQSAoZGVzY3JpcCk7CiAJd3YtPnZhbHVlID0gU1NEQVRB IChpdGVtX25hbWUpOwotCXd2LT5jYWxsX2RhdGEgPSAodm9pZCAqKSAmWFZFQ1RPUiAobWVu dV9pdGVtcyktPmNvbnRlbnRzW2ldOworCXd2LT5jYWxsX2RhdGEgPSAodm9pZCAqKSAmQVJF RiAobWVudV9pdGVtcywgaSk7CiAJd3YtPmVuYWJsZWQgPSAhTklMUCAoZW5hYmxlKTsKIAl3 di0+aGVscCA9IFFuaWw7CiAJcHJldl93diA9IHd2OwpAQCAtMjE3NywxMyArMjE3NywxMyBA QAogCXsKIAkgIExpc3BfT2JqZWN0IGVudHJ5OwogCi0JICBpZiAoRVEgKFhWRUNUT1IgKG1l bnVfaXRlbXMpLT5jb250ZW50c1tpXSwgUXQpKQorCSAgaWYgKEVRIChBUkVGIChtZW51X2l0 ZW1zLCBpKSwgUXQpKQogCSAgICB7CiAJICAgICAgcHJlZml4Ci0JCT0gWFZFQ1RPUiAobWVu dV9pdGVtcyktPmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX1BBTkVfUFJFRklYXTsKKwkJPSBB UkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19QQU5FX1BSRUZJWCk7CiAJICAgICAg aSArPSBNRU5VX0lURU1TX1BBTkVfTEVOR1RIOwogCSAgICB9Ci0JICBlbHNlIGlmIChFUSAo WFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2ldLCBRcXVvdGUpKQorCSAgZWxzZSBp ZiAoRVEgKEFSRUYgKG1lbnVfaXRlbXMsIGkpLCBRcXVvdGUpKQogCSAgICB7CiAJICAgICAg LyogVGhpcyBpcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBsZWZ0LXNpZGUgZWx0cyBhbmQKIAkJ IHJpZ2h0LXNpZGUgZWx0cy4gICovCkBAIC0yMTkyLDggKzIxOTIsOCBAQAogCSAgZWxzZQog CSAgICB7CiAJICAgICAgZW50cnkKLQkJPSBYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVu dHNbaSArIE1FTlVfSVRFTVNfSVRFTV9WQUxVRV07Ci0JICAgICAgaWYgKG1lbnVfaXRlbV9z ZWxlY3Rpb24gPT0gJlhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1tpXSkKKwkJPSBB UkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19JVEVNX1ZBTFVFKTsKKwkgICAgICBp ZiAobWVudV9pdGVtX3NlbGVjdGlvbiA9PSAmQVJFRiAobWVudV9pdGVtcywgaSkpCiAJCXsK IAkJICBpZiAoa2V5bWFwcyAhPSAwKQogCQkgICAgewpAQCAtMjM1Myw3ICsyMzUzLDcgQEAK ICAgbHBhbmUgPSBYTV9GQUlMVVJFOwogICB3aGlsZSAoaSA8IG1lbnVfaXRlbXNfdXNlZCkK ICAgICB7Ci0gICAgICBpZiAoRVEgKFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1tp XSwgUXQpKQorICAgICAgaWYgKEVRIChBUkVGIChtZW51X2l0ZW1zLCBpKSwgUXQpKQogCXsK IAkgIC8qIENyZWF0ZSBhIG5ldyBwYW5lLiAgKi8KIAkgIExpc3BfT2JqZWN0IHBhbmVfbmFt ZSwgcHJlZml4OwpAQCAtMjM2MSw4ICsyMzYxLDggQEAKIAogICAgICAgICAgIG1heGxpbmVz ID0gbWF4IChtYXhsaW5lcywgbGluZXMpOwogICAgICAgICAgIGxpbmVzID0gMDsKLQkgIHBh bmVfbmFtZSA9IFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5jb250ZW50c1tpICsgTUVOVV9JVEVN U19QQU5FX05BTUVdOwotCSAgcHJlZml4ID0gWFZFQ1RPUiAobWVudV9pdGVtcyktPmNvbnRl bnRzW2kgKyBNRU5VX0lURU1TX1BBTkVfUFJFRklYXTsKKwkgIHBhbmVfbmFtZSA9IEFSRUYg KG1lbnVfaXRlbXMsIGkgKyBNRU5VX0lURU1TX1BBTkVfTkFNRSk7CisJICBwcmVmaXggPSBB UkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19QQU5FX1BSRUZJWCk7CiAJICBwYW5l X3N0cmluZyA9IChOSUxQIChwYW5lX25hbWUpCiAJCQkgPyAiIiA6IFNTREFUQSAocGFuZV9u YW1lKSk7CiAJICBpZiAoa2V5bWFwcyAmJiAhTklMUCAocHJlZml4KSkKQEAgLTIzODIsNyAr MjM4Miw3IEBACiAJICB3aGlsZSAoaiA8IG1lbnVfaXRlbXNfdXNlZCkKIAkgICAgewogCSAg ICAgIExpc3BfT2JqZWN0IGl0ZW07Ci0JICAgICAgaXRlbSA9IFhWRUNUT1IgKG1lbnVfaXRl bXMpLT5jb250ZW50c1tqXTsKKwkgICAgICBpdGVtID0gQVJFRiAobWVudV9pdGVtcywgaik7 CiAJICAgICAgaWYgKEVRIChpdGVtLCBRdCkpCiAJCWJyZWFrOwogCSAgICAgIGlmIChOSUxQ IChpdGVtKSkKQEAgLTIzOTksNyArMjM5OSw3IEBACiAJfQogICAgICAgLyogSWdub3JlIGEg bmlsIGluIHRoZSBpdGVtIGxpc3QuCiAJIEl0J3MgbWVhbmluZ2Z1bCBvbmx5IGZvciBkaWFs b2cgYm94ZXMuICAqLwotICAgICAgZWxzZSBpZiAoRVEgKFhWRUNUT1IgKG1lbnVfaXRlbXMp LT5jb250ZW50c1tpXSwgUXF1b3RlKSkKKyAgICAgIGVsc2UgaWYgKEVRIChBUkVGIChtZW51 X2l0ZW1zLCBpKSwgUXF1b3RlKSkKIAlpICs9IDE7CiAgICAgICBlbHNlCiAJewpAQCAtMjQw OCwxMSArMjQwOCwxMSBAQAogCSAgY2hhciAqaXRlbV9kYXRhOwogCSAgY2hhciBjb25zdCAq aGVscF9zdHJpbmc7CiAKLQkgIGl0ZW1fbmFtZSA9IFhWRUNUT1IgKG1lbnVfaXRlbXMpLT5j b250ZW50c1tpICsgTUVOVV9JVEVNU19JVEVNX05BTUVdOwotCSAgZW5hYmxlID0gWFZFQ1RP UiAobWVudV9pdGVtcyktPmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX0lURU1fRU5BQkxFXTsK KwkgIGl0ZW1fbmFtZSA9IEFSRUYgKG1lbnVfaXRlbXMsIGkgKyBNRU5VX0lURU1TX0lURU1f TkFNRSk7CisJICBlbmFibGUgPSBBUkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19J VEVNX0VOQUJMRSk7CiAJICBkZXNjcmlwCi0JICAgID0gWFZFQ1RPUiAobWVudV9pdGVtcykt PmNvbnRlbnRzW2kgKyBNRU5VX0lURU1TX0lURU1fRVFVSVZfS0VZXTsKLQkgIGhlbHAgPSBY VkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaSArIE1FTlVfSVRFTVNfSVRFTV9IRUxQ XTsKKwkgICAgPSBBUkVGIChtZW51X2l0ZW1zLCBpICsgTUVOVV9JVEVNU19JVEVNX0VRVUlW X0tFWSk7CisJICBoZWxwID0gQVJFRiAobWVudV9pdGVtcywgaSArIE1FTlVfSVRFTVNfSVRF TV9IRUxQKTsKIAkgIGhlbHBfc3RyaW5nID0gU1RSSU5HUCAoaGVscCkgPyBTU0RBVEEgKGhl bHApIDogTlVMTDsKIAogCSAgaWYgKCFOSUxQIChkZXNjcmlwKSkKQEAgLTI1MjYsMTEgKzI1 MjYsMTEgQEAKICAgICAgIGkgPSAwOwogICAgICAgd2hpbGUgKGkgPCBtZW51X2l0ZW1zX3Vz ZWQpCiAJewotCSAgaWYgKEVRIChYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNbaV0s IFF0KSkKKwkgIGlmIChFUSAoQVJFRiAobWVudV9pdGVtcywgaSksIFF0KSkKIAkgICAgewog CSAgICAgIGlmIChwYW5lID09IDApCiAJCXBhbmVfcHJlZml4Ci0JCSAgPSBYVkVDVE9SICht ZW51X2l0ZW1zKS0+Y29udGVudHNbaSArIE1FTlVfSVRFTVNfUEFORV9QUkVGSVhdOworCQkg ID0gQVJFRiAobWVudV9pdGVtcywgaSArIE1FTlVfSVRFTVNfUEFORV9QUkVGSVgpOwogCSAg ICAgIHBhbmUtLTsKIAkgICAgICBpICs9IE1FTlVfSVRFTVNfUEFORV9MRU5HVEg7CiAJICAg IH0KQEAgLTI1NDEsNyArMjU0MSw3IEBACiAJCSAgaWYgKHNlbGlkeCA9PSAwKQogCQkgICAg ewogCQkgICAgICBlbnRyeQotCQkJPSBYVkVDVE9SIChtZW51X2l0ZW1zKS0+Y29udGVudHNb aSArIE1FTlVfSVRFTVNfSVRFTV9WQUxVRV07CisJCQk9IEFSRUYgKG1lbnVfaXRlbXMsIGkg KyBNRU5VX0lURU1TX0lURU1fVkFMVUUpOwogCQkgICAgICBpZiAoa2V5bWFwcyAhPSAwKQog CQkJewogCQkJICBlbnRyeSA9IEZjb25zIChlbnRyeSwgUW5pbCk7Cgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL3hzZWxlY3QuYycKLS0tIHNyYy94c2VsZWN0LmMJMjAxMi0wNi0xNiAxMjoy NDoxNSArMDAwMAorKysgc3JjL3hzZWxlY3QuYwkyMDEyLTA2LTE4IDE2OjE2OjIwICswMDAw CkBAIC0xODE2LDEyICsxODE2LDEyIEBACiAgICAgICBwdHJkaWZmX3QgaTsKICAgICAgIHB0 cmRpZmZfdCBzaXplID0gQVNJWkUgKG9iaik7CiAKLSAgICAgIGlmIChTWU1CT0xQIChYVkVD VE9SIChvYmopLT5jb250ZW50cyBbMF0pKQorICAgICAgaWYgKFNZTUJPTFAgKEFSRUYgKG9i aiwgMCkpKQogCS8qIFRoaXMgdmVjdG9yIGlzIGFuIEFUT00gc2V0ICovCiAJewogCSAgaWYg KE5JTFAgKHR5cGUpKSB0eXBlID0gUUFUT007CiAJICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsg aSsrKQotCSAgICBpZiAoIVNZTUJPTFAgKFhWRUNUT1IgKG9iaiktPmNvbnRlbnRzIFtpXSkp CisJICAgIGlmICghU1lNQk9MUCAoQVJFRiAob2JqLCBpKSkpCiAJICAgICAgc2lnbmFsX2Vy cm9yICgiQWxsIGVsZW1lbnRzIG9mIHNlbGVjdGlvbiB2ZWN0b3IgbXVzdCBoYXZlIHNhbWUg dHlwZSIsIG9iaik7CiAKIAkgICpkYXRhX3JldCA9IHhubWFsbG9jIChzaXplLCBzaXplb2Yg KEF0b20pKTsKQEAgLTE4MjksNyArMTgyOSw3IEBACiAJICAqc2l6ZV9yZXQgPSBzaXplOwog CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkgICAgKCooQXRvbSAqKikgZGF0YV9y ZXQpIFtpXQotCSAgICAgID0gc3ltYm9sX3RvX3hfYXRvbSAoZHB5aW5mbywgWFZFQ1RPUiAo b2JqKS0+Y29udGVudHMgW2ldKTsKKwkgICAgICA9IHN5bWJvbF90b194X2F0b20gKGRweWlu Zm8sIEFSRUYgKG9iaiwgaSkpOwogCX0KICAgICAgIGVsc2UKIAkvKiBUaGlzIHZlY3RvciBp cyBhbiBJTlRFR0VSIHNldCwgb3Igc29tZXRoaW5nIGxpa2UgaXQgKi8KQEAgLTE4MzksNyAr MTgzOSw3IEBACiAJICBpZiAoTklMUCAodHlwZSkpIHR5cGUgPSBRSU5URUdFUjsKIAkgIGZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCiAJICAgIHsKLQkgICAgICBpZiAoISBSQU5HRURf SU5URUdFUlAgKFhfU0hSVF9NSU4sIFhWRUNUT1IgKG9iaiktPmNvbnRlbnRzW2ldLAorCSAg ICAgIGlmICghIFJBTkdFRF9JTlRFR0VSUCAoWF9TSFJUX01JTiwgQVJFRiAob2JqLCBpKSwK IAkJCQkgICAgIFhfU0hSVF9NQVgpKQogCQl7CiAJCSAgLyogVXNlIHNpemVvZiAobG9uZykg ZXZlbiBpZiBpdCBpcyBtb3JlIHRoYW4gMzIgYml0cy4KQEAgLTE4NTcsMTAgKzE4NTcsMTAg QEAKIAkgICAgewogCSAgICAgIGlmIChmb3JtYXQgPT0gMzIpCiAJCSgqKCh1bnNpZ25lZCBs b25nICoqKSBkYXRhX3JldCkpIFtpXSA9Ci0JCSAgY29uc190b194X2xvbmcgKFhWRUNUT1Ig KG9iaiktPmNvbnRlbnRzW2ldKTsKKwkJICBjb25zX3RvX3hfbG9uZyAoQVJFRiAob2JqLCBp KSk7CiAJICAgICAgZWxzZQogCQkoKigoc2hvcnQgKiopIGRhdGFfcmV0KSkgW2ldID0KLQkJ ICBYSU5UIChYVkVDVE9SIChvYmopLT5jb250ZW50c1tpXSk7CisJCSAgWElOVCAoQVJFRiAo b2JqLCBpKSk7CiAJICAgIH0KIAl9CiAgICAgfQpAQCAtMTg5NSwxMSArMTg5NSwxMCBAQAog ICAgICAgcHRyZGlmZl90IHNpemUgPSBBU0laRSAob2JqKTsKICAgICAgIExpc3BfT2JqZWN0 IGNvcHk7CiAgICAgICBpZiAoc2l6ZSA9PSAxKQotCXJldHVybiBjbGVhbl9sb2NhbF9zZWxl Y3Rpb25fZGF0YSAoWFZFQ1RPUiAob2JqKS0+Y29udGVudHMgWzBdKTsKKwlyZXR1cm4gY2xl YW5fbG9jYWxfc2VsZWN0aW9uX2RhdGEgKEFSRUYgKG9iaiwgMCkpOwogICAgICAgY29weSA9 IEZtYWtlX3ZlY3RvciAobWFrZV9udW1iZXIgKHNpemUpLCBRbmlsKTsKICAgICAgIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspCi0JWFZFQ1RPUiAoY29weSktPmNvbnRlbnRzIFtpXQot CSAgPSBjbGVhbl9sb2NhbF9zZWxlY3Rpb25fZGF0YSAoWFZFQ1RPUiAob2JqKS0+Y29udGVu dHMgW2ldKTsKKwlBU0VUIChjb3B5LCBpLCBjbGVhbl9sb2NhbF9zZWxlY3Rpb25fZGF0YSAo QVJFRiAob2JqLCBpKSkpOwogICAgICAgcmV0dXJuIGNvcHk7CiAgICAgfQogICByZXR1cm4g b2JqOwoK --------------040903070908080803030000--