Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rURHd-00AtXc-D6 for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 13:02:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rURHc-00EA0m-EF for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 13:02:40 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rURHb-00EA0d-Nt for pgsql-hackers@lists.postgresql.org; Mon, 29 Jan 2024 13:02:40 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rURHW-003yDu-M5 for pgsql-hackers@lists.postgresql.org; Mon, 29 Jan 2024 13:02:38 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id A74D4600FD; Mon, 29 Jan 2024 22:02:29 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_e48aba3f7a679819cb12c6db13d6ad92" Content-Transfer-Encoding: 7bit Date: Mon, 29 Jan 2024 22:02:29 +0900 From: torikoshia To: pgsql-hackers@lists.postgresql.org Cc: =?UTF-8?Q?=C3=89tienne_BERSAC?= , Andres Freund , jtc331@gmail.com, ashutosh.bapat.oss@gmail.com, rafaelthca@gmail.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: References: <4e1e4e5d022964953e84468fe4e511b0@oss.nttdata.com> <4af7712833d4ce989cf5e658106e42da@oss.nttdata.com> <7ab57ab0ba3416e2dbf54927752bc310@oss.nttdata.com> <20231006155850.kjjb2vwbkawj7moq@alap3.anarazel.de> <0e0e7ca08dff077a625c27a5e0c2ef0a@oss.nttdata.com> <2d6d7846b6b794c0e727c431852a113c@oss.nttdata.com> <0eb66e8c72f23695957466db5c76c69c@oss.nttdata.com> <9c36599db62ef7466a297843fe812fc60e827cd2.camel@dalibo.com> <66d29d2c10ca9181c7e183eeeb4525f8@oss.nttdata.com> <7bc1cc1bcc3289e9354ebb00ac1c8440c01b736c.camel@dalibo.com> <0eafbfbe8dc39e80bce358b48a258510@oss.nttdata.com> <6d13f7485091f51ad7d11cb7c65f75038c10d747.camel@dalibo.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: <61b4add9a01f21011789b6ee04085751@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_e48aba3f7a679819cb12c6db13d6ad92 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, Updated the patch to fix typos and move ProcessLogQueryPlanInterruptActive from errfinish() to AbortTransaction. BTW since the thread is getting long, I list the some points of the discussion so far: # Safety concern ## Catalog access inside CFI - it seems safe if the CFI call is inside an existing valid transaction/query state[1] - We did some tests, for example calling ProcessLogQueryPlanInterrupt() in every single CHECK_FOR_INTERRUPTS()[2]. This test passed on my env but was stucked on James's env, so I modified to exit ProcessLogQueryPlanInterrupt() when target process is inside of lock acquisition code[3] ## Risk of calling EXPLAIN code in CFI - EXPLAIN is not a simple logic code, and there exists risk calling it from CFI. For example, if there is a bug, we may find ourselves in a situation where we can't cancel the query - it's a trade-off that's worth making for the introspection benefits this patch would provide?[4] # Design - Although some suggested it should be in auto_explain, current patch introduces this feature to the core[5] - When the target query is nested, only the most inner query's plan is explained. In future, all the nested queries' plans are expected to explained optionally like auto_explain.log_nested_statements[6] - When the target process is a parallel worker, the plan is not shown[6] - When the target query is nested and its subtransaction is aborted, pg_log_query_plan cannot log the parental query plan after the abort even parental query is running[7] - The output corresponds to EXPLAIN with VERBOSE, COST, SETTINGS and FORMAT text. It doesn't do ANALYZE or show the progress of the query execution. Future work proposed by Rafael Thofehrn Castro may realize this[8] - To prevent assertion error, this patch ensures no page lock is held by checking all the LocalLock entries before running explain code, but there is a discussion that ginInsertCleanup() should be modified[9] It may be not so difficult to improve some of restrictions in "Design", but I'd like to limit the scope of the 1st patch to make it simpler. [1] https://www.postgresql.org/message-id/CAAaqYe9euUZD8bkjXTVcD9e4n5c7kzHzcvuCJXt-xds9X4c7Fw%40mail.gmail.com [2] https://www.postgresql.org/message-id/CAAaqYe8LXVXQhYy3yT0QOHUymdM%3Duha0dJ0%3DBEPzVAx2nG1gsw%40mail.gmail.com [3] https://www.postgresql.org/message-id/0e0e7ca08dff077a625c27a5e0c2ef0a%40oss.nttdata.com [4] https://www.postgresql.org/message-id/CAAaqYe8LXVXQhYy3yT0QOHUymdM%3Duha0dJ0%3DBEPzVAx2nG1gsw%40mail.gmail.com [5] https://www.postgresql.org/message-id/CAAaqYe_1EuoTudAz8mr8-qtN5SoNtYRm4JM2J9CqeverpE3B2A%40mail.gmail.com [6] https://www.postgresql.org/message-id/CAExHW5sh4ahrJgmMAGfptWVmESt1JLKCNm148XVxTunRr%2B-6gA%40mail.gmail.com [7] https://www.postgresql.org/message-id/3d121ed5f81cef588bac836b43f5d1f9%40oss.nttdata.com [8] https://www.postgresql.org/message-id/c161b5e7e1888eb9c9eb182a7d9dcf89%40oss.nttdata.com [9] https://www.postgresql.org/message-id/20220201.172757.1480996662235658750.horikyota.ntt%40gmail.com -- Regards, -- Atsushi Torikoshi NTT DATA Group Corporation --=_e48aba3f7a679819cb12c6db13d6ad92 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v35-0001-Add-function-to-log-the-plan-of-the-query.patch Content-Disposition: attachment; filename=v35-0001-Add-function-to-log-the-plan-of-the-query.patch; size=30836 RnJvbSA2NTc4NmFkNmMyYTliNjU2YzNmZDM2YTQ1MTE4YTM5YTY2ZGEwMjM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMjE6NDA6MDQgKzA5MDAKU3ViamVjdDog W1BBVENIIHYzNV0gQWRkIGZ1bmN0aW9uIHRvIGxvZyB0aGUgcGxhbiBvZiB0aGUgcXVlcnkKCkN1 cnJlbnRseSwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUgcXVlcnkgZXhlY3V0aW9uIHRvIGZpbmlz aAp0byBjaGVjayBpdHMgcGxhbi4gVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCB3aGVuCmludmVz dGlnYXRpbmcgbG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMK d2hlcmUgd2UgY2Fubm90IHVzZSBkZWJ1Z2dlcnMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24s IHRoaXMgcGF0Y2ggYWRkcwpwZ19sb2dfcXVlcnlfcGxhbigpIGZ1bmN0aW9uIHRoYXQgcmVxdWVz dHMgdG8gbG9nIHRoZQpwbGFuIG9mIHRoZSBzcGVjaWZpZWQgYmFja2VuZCBwcm9jZXNzLgoKQnkg ZGVmYXVsdCwgb25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHJlcXVlc3QgdG8gbG9nIHRo ZQpwbGFucyBiZWNhdXNlIGFsbG93aW5nIGFueSB1c2VycyB0byBpc3N1ZSB0aGlzIHJlcXVlc3Qg YXQgYW4KdW5ib3VuZGVkIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2FnZXMgYW5k IHdoaWNoIGNhbgpsZWFkIHRvIGRlbmlhbCBvZiBzZXJ2aWNlLgoKT24gcmVjZWlwdCBvZiB0aGUg cmVxdWVzdCwgYXQgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwKdGhlIHRhcmdldCBi YWNrZW5kIGxvZ3MgaXRzIHBsYW4gYXQgTE9HX1NFUlZFUl9PTkxZIGxldmVsLCBzbwp0aGF0IHRo ZXNlIHBsYW5zIHdpbGwgYXBwZWFyIGluIHRoZSBzZXJ2ZXIgbG9nIGJ1dCBub3QgYmUgc2VudAp0 byB0aGUgY2xpZW50LgoKUmV2aWV3ZWQtYnk6IEJoYXJhdGggUnVwaXJlZGR5LCBGdWppaSBNYXNh bywgRGlsaXAgS3VtYXIsCk1hc2FoaXJvIElrZWRhLCBFa2F0ZXJpbmEgU29rb2xvdmEsIEp1c3Rp biBQcnl6YnksIEt5b3Rhcm8KSG9yaWd1Y2hpLCBSb2JlcnQgVHJlYXQsIEFsZW5hIFJ5YmFraW5h LCBBc2h1dG9zaCBCYXBhdAoKQ28tYXV0aG9yZWQtYnk6IEphbWVzIENvbGVtYW4gPGphbWVjb2xl bWFuQHBheXBhbC5jb20+Ci0tLQogY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMg ICAgICAgICAgfCAgMjMgKy0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAgICAgICAg ICAgICAgIHwgIDUwICsrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgICAg ICAgICAgICB8ICAxNyArKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNx bCAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAg ICAgfCAyMDggKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01h aW4uYyAgICAgICAgICAgICAgfCAgMTQgKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2Nz aWduYWwuYyAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMg ICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAg ICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAg ICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAg ICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAgICAgICAg ICB8ICAgOSArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaCAgICAgICAgICAgICAgICAgICB8ICAg MiAtCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQgfCAgNTQgKysrKy0KIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCAgICAgIHwgIDQxICsrKy0KIDE5 IGZpbGVzIGNoYW5nZWQsIDQwMiBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYyBiL2NvbnRyaWIvYXV0 b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCmluZGV4IGM3YWFjZDc4MTIuLmMwZjJjYTRjMTggMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCisrKyBiL2NvbnRy aWIvYXV0b19leHBsYWluL2F1dG9fZXhwbGFpbi5jCkBAIC0zOTksMjYgKzM5OSw5IEBAIGV4cGxh aW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQllcy0+Zm9ybWF0ID0gYXV0 b19leHBsYWluX2xvZ19mb3JtYXQ7CiAJCQllcy0+c2V0dGluZ3MgPSBhdXRvX2V4cGxhaW5fbG9n X3NldHRpbmdzOwogCi0JCQlFeHBsYWluQmVnaW5PdXRwdXQoZXMpOwotCQkJRXhwbGFpblF1ZXJ5 VGV4dChlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMoZXMsIHF1ZXJ5 RGVzYy0+cGFyYW1zLCBhdXRvX2V4cGxhaW5fbG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsKLQkJ CUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5RGVzYyk7Ci0JCQlpZiAoZXMtPmFuYWx5emUgJiYg YXV0b19leHBsYWluX2xvZ190cmlnZ2VycykKLQkJCQlFeHBsYWluUHJpbnRUcmlnZ2Vycyhlcywg cXVlcnlEZXNjKTsKLQkJCWlmIChlcy0+Y29zdHMpCi0JCQkJRXhwbGFpblByaW50SklUU3VtbWFy eShlcywgcXVlcnlEZXNjKTsKLQkJCUV4cGxhaW5FbmRPdXRwdXQoZXMpOwotCi0JCQkvKiBSZW1v dmUgbGFzdCBsaW5lIGJyZWFrICovCi0JCQlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3Ry LT5kYXRhW2VzLT5zdHItPmxlbiAtIDFdID09ICdcbicpCi0JCQkJZXMtPnN0ci0+ZGF0YVstLWVz LT5zdHItPmxlbl0gPSAnXDAnOwotCi0JCQkvKiBGaXggSlNPTiB0byBvdXRwdXQgYW4gb2JqZWN0 ICovCi0JCQlpZiAoYXV0b19leHBsYWluX2xvZ19mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfSlNP TikKLQkJCXsKLQkJCQllcy0+c3RyLT5kYXRhWzBdID0gJ3snOwotCQkJCWVzLT5zdHItPmRhdGFb ZXMtPnN0ci0+bGVuIC0gMV0gPSAnfSc7Ci0JCQl9CisJCQlFeHBsYWluQXNzZW1ibGVMb2dPdXRw dXQoZXMsIHF1ZXJ5RGVzYywgYXV0b19leHBsYWluX2xvZ19mb3JtYXQsCisJCQkJCQkJCQkgYXV0 b19leHBsYWluX2xvZ190cmlnZ2VycywKKwkJCQkJCQkJCSBhdXRvX2V4cGxhaW5fbG9nX3BhcmFt ZXRlcl9tYXhfbGVuZ3RoKTsKIAogCQkJLyoKIAkJCSAqIE5vdGU6IHdlIHJlbHkgb24gdGhlIGV4 aXN0aW5nIGxvZ2dpbmcgb2YgY29udGV4dCBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1 bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggNjc4OGJhOGVmNC4uNDhlODc0 OGZkMSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvZnVuYy5zZ21sCkBAIC0yNjUyNCw2ICsyNjUyNCwyNSBAQCBTRUxFQ1QgY29sbGF0aW9uIGZv ciAoJ2ZvbycgQ09MTEFURSAiZGVfREUiKTsKICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAg IDwvcm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2Vu dHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+Cisg ICAgICAgICA8cHJpbWFyeT5wZ19sb2dfcXVlcnlfcGxhbjwvcHJpbWFyeT4KKyAgICAgICAgPC9p bmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5wZ19sb2dfcXVlcnlfcGxhbjwvZnVuY3Rpb24+ ICggPHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4gKQorICAg ICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBSZXF1ZXN0cyB0byBsb2cgdGhlIHBsYW4gb2YgdGhlIHF1 ZXJ5IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZQorICAgICAgICBiYWNrZW5kIHdpdGggc3BlY2lm aWVkIHByb2Nlc3MgSUQuCisgICAgICAgIEl0IHdpbGwgYmUgbG9nZ2VkIGF0IDxsaXRlcmFsPkxP RzwvbGl0ZXJhbD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAgd2lsbCBhcHBlYXIgaW4gdGhl IHNlcnZlciBsb2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBjb25maWd1cmF0aW9uIHNldCAo U2VlIDx4cmVmIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dpbmciLz4KKyAgICAgICAgZm9y IG1vcmUgaW5mb3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgY2xpZW50Cisg ICAgICAgIHJlZ2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3VjLWNsaWVudC1taW4tbWVzc2Fn ZXMiLz4uCisgICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAgIDxy b3c+CiAgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1 bmNfc2lnbmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KQEAgLTI3MzAwLDYgKzI3MzE5LDM3 IEBAIExPRzogIEdyYW5kIHRvdGFsOiAxNjUxOTIwIGJ5dGVzIGluIDIwMSBibG9ja3M7IDYyMjM2 MCBmcmVlICg4OCBjaHVua3MpOyAxMDI5NTYwCiAgICAgYmVjYXVzZSBpdCBtYXkgZ2VuZXJhdGUg YSBsYXJnZSBudW1iZXIgb2YgbG9nIG1lc3NhZ2VzLgogICAgPC9wYXJhPgogCisgICA8cGFyYT4K KyAgICA8ZnVuY3Rpb24+cGdfbG9nX3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAor ICAgIHRvIGxvZyB0aGUgcGxhbiBvZiBhIGJhY2tlbmQgcHJvY2Vzcy4gRm9yIGV4YW1wbGU6Cis8 cHJvZ3JhbWxpc3Rpbmc+Citwb3N0Z3Jlcz0jIFNFTEVDVCBwZ19sb2dfcXVlcnlfcGxhbigyMDEx MTYpOworIHBnX2xvZ19xdWVyeV9wbGFuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 CisoMSByb3cpCis8L3Byb2dyYW1saXN0aW5nPgorVGhlIGZvcm1hdCBvZiB0aGUgcXVlcnkgcGxh biBpcyB0aGUgc2FtZSBhcyB3aGVuIDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+LAorPGxpdGVy YWw+Q09TVFM8L2xpdGVyYWw+LCA8bGl0ZXJhbD5TRVRUSU5HUzwvbGl0ZXJhbD4gYW5kCis8bGl0 ZXJhbD5GT1JNQVQgVEVYVDwvbGl0ZXJhbD4gYXJlIHVzZWQgaW4gdGhlIDxjb21tYW5kPkVYUExB SU48L2NvbW1hbmQ+Citjb21tYW5kLiBGb3IgZXhhbXBsZToKKzxzY3JlZW4+CitMT0c6ICBxdWVy eSBwbGFuIHJ1bm5pbmcgb24gYmFja2VuZCB3aXRoIFBJRCAyMDExMTYgaXM6CisgICAgICAgIFF1 ZXJ5IFRleHQ6IFNFTEVDVCAqIEZST00gcGdiZW5jaF9hY2NvdW50czsKKyAgICAgICAgU2VxIFNj YW4gb24gcHVibGljLnBnYmVuY2hfYWNjb3VudHMgIChjb3N0PTAuMDAuLjUyNzg3LjAwIHJvd3M9 MjAwMDAwMCB3aWR0aD05NykKKyAgICAgICAgICBPdXRwdXQ6IGFpZCwgYmlkLCBhYmFsYW5jZSwg ZmlsbGVyCisgICAgICAgIFNldHRpbmdzOiB3b3JrX21lbSA9ICcxTUInCisgICAgICAgIFF1ZXJ5 IElkZW50aWZpZXI6IDg2MjEyNTU1NDY1NjA3Mzk2ODAKKzwvc2NyZWVuPgorICAgIE5vdGUgdGhh dCB3aGVuIHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uLCBvbmx5IHRo ZQorICAgIHBsYW4gb2YgdGhlIG1vc3QgZGVlcGx5IG5lc3RlZCBxdWVyeSBpcyBsb2dnZWQuCisg ICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFdoZW4gYSBzdWJ0cmFuc2FjdGlvbiBpcyBhYm9y dGVkLCA8ZnVuY3Rpb24+cGdfbG9nX3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPgorICAgIGNhbm5vdCBs b2cgdGhlIHF1ZXJ5IHBsYW4gYWZ0ZXIgdGhlIGFib3J0LgorICAgPC9wYXJhPgorCiAgIDwvc2Vj dDI+CiAKICAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtYWRtaW4tYmFja3VwIj4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hhY3QuYwppbmRleCA0NjQ4NTgxMTdlLi5kMGI1OTU0NjI3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGFjdC5jCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j YXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbGFkdC5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc21nci5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL2Nv bWJvY2lkLmgiCkBAIC0yNzUwLDYgKzI3NTEsMTQgQEAgQWJvcnRUcmFuc2FjdGlvbih2b2lkKQog CSAqLwogCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmVW5CbG9ja1NpZywgTlVMTCk7CiAKKwkv KgorCSAqIFJlc2V0IHBnX2xvZ19xdWVyeV9wbGFuKCkgcmVsYXRlZCBnbG9iYWwgdmFyaWFibGVz LgorCSAqIFdoZW4gQWN0aXZlUXVlcnlEZXNjIGlzIHJlZmVyZW5jZWQgYWZ0ZXIgYWJvcnQsIHNv bWUgb2YgaXRzIGVsZW1lbnRzCisJICogYXJlIGZyZWVkLiBUbyBhdm9pZCBhY2Nlc3NpbmcgdGhl bSwgcmVzZXQgQWN0aXZlUXVlcnlEZXNjIGhlcmUuCisJICovCisJQWN0aXZlUXVlcnlEZXNjID0g TlVMTDsKKwlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlID0gZmFsc2U7CisKIAkv KgogCSAqIGNoZWNrIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHN0YXRlCiAJICovCkBAIC01MTA5 LDYgKzUxMTgsMTQgQEAgQWJvcnRTdWJUcmFuc2FjdGlvbih2b2lkKQogCSAqLwogCXNpZ3Byb2Nt YXNrKFNJR19TRVRNQVNLLCAmVW5CbG9ja1NpZywgTlVMTCk7CiAKKwkvKgorCSAqIFJlc2V0IHBn X2xvZ19xdWVyeV9wbGFuKCkgcmVsYXRlZCBnbG9iYWwgdmFyaWFibGVzLgorCSAqIFdoZW4gQWN0 aXZlUXVlcnlEZXNjIGlzIHJlZmVyZW5jZWQgYWZ0ZXIgYWJvcnQsIHNvbWUgb2YgaXRzIGVsZW1l bnRzCisJICogYXJlIGZyZWVkLiBUbyBhdm9pZCBhY2Nlc3NpbmcgdGhlbSwgcmVzZXQgQWN0aXZl UXVlcnlEZXNjIGhlcmUuCisJICovCisJQWN0aXZlUXVlcnlEZXNjID0gTlVMTDsKKwlQcm9jZXNz TG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlID0gZmFsc2U7CisKIAkvKgogCSAqIGNoZWNrIHRo ZSBjdXJyZW50IHRyYW5zYWN0aW9uIHN0YXRlCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fZnVuY3Rpb25zLnNxbAppbmRleCAzNDZjZmI5OGEwLi5jNjRjYTk5NDZlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKQEAgLTc1Nyw2ICs3NTcsOCBAQCBSRVZP S0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sc19sb2dpY2FsbWFwZGlyKCkgRlJPTSBQVUJMSUM7 CiAKIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xzX3JlcGxzbG90ZGlyKHRleHQpIEZS T00gUFVCTElDOwogCitSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfcXVlcnlfcGxh bihpbnRlZ2VyKSBGUk9NIFBVQkxJQzsKKwogLS0KIC0tIFdlIGFsc28gc2V0IHVwIHNvbWUgdGhp bmdzIGFzIGFjY2Vzc2libGUgdG8gc3RhbmRhcmQgcm9sZXMuCiAtLQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jCmluZGV4IDg0MzQ3MmU2ZGQuLjZkOGQyYzJmOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFzaC5oIgogI2luY2x1 ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgorI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKICNpbmNsdWRlICJub2Rl cy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTI4LDcgKzI5 LDEwIEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInJld3JpdGUv cmV3cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRl ICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvYmFja2VuZF9zdGF0dXMuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y190YWJsZXMuaCIK ICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCkBAIC00MCw2ICs0NCw3IEBACiAjaW5jbHVkZSAidXRp bHMvdHlwY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy94bWwuaCIKIAorYm9vbCBQcm9jZXNzTG9n UXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlID0gZmFsc2U7CiAKIC8qIEhvb2sgZm9yIHBsdWdpbnMg dG8gZ2V0IGNvbnRyb2wgaW4gRXhwbGFpbk9uZVF1ZXJ5KCkgKi8KIEV4cGxhaW5PbmVRdWVyeV9o b29rX3R5cGUgRXhwbGFpbk9uZVF1ZXJ5X2hvb2sgPSBOVUxMOwpAQCAtNzM3LDYgKzc0MiwzNyBA QCBFeHBsYWluUHJpbnRTZXR0aW5ncyhFeHBsYWluU3RhdGUgKmVzKQogCX0KIH0KIAorLyoKKyAq IEV4cGxhaW5Bc3NlbWJsZUxvZ091dHB1dCAtCisgKiAgIEFzc2VtYmxlIGVzLT5zdHIgZm9yIGxv Z2dpbmcgYWNjb3JkaW5nIHRvIHNwZWNpZmllZCBjb250ZW50cyBhbmQgZm9ybWF0CisgKi8KKwor dm9pZAorRXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0KEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVz YyAqcXVlcnlEZXNjLCBpbnQgbG9nRm9ybWF0LAorCQkJCQkJIGJvb2wgbG9nVHJpZ2dlcnMsIGlu dCBsb2dQYXJhbWV0ZXJNYXhMZW5ndGgpCit7CisJRXhwbGFpbkJlZ2luT3V0cHV0KGVzKTsKKwlF eHBsYWluUXVlcnlUZXh0KGVzLCBxdWVyeURlc2MpOworCUV4cGxhaW5RdWVyeVBhcmFtZXRlcnMo ZXMsIHF1ZXJ5RGVzYy0+cGFyYW1zLCBsb2dQYXJhbWV0ZXJNYXhMZW5ndGgpOworCUV4cGxhaW5Q cmludFBsYW4oZXMsIHF1ZXJ5RGVzYyk7CisJaWYgKGVzLT5hbmFseXplICYmIGxvZ1RyaWdnZXJz KQorCQlFeHBsYWluUHJpbnRUcmlnZ2VycyhlcywgcXVlcnlEZXNjKTsKKwlpZiAoZXMtPmNvc3Rz KQorCQlFeHBsYWluUHJpbnRKSVRTdW1tYXJ5KGVzLCBxdWVyeURlc2MpOworCUV4cGxhaW5FbmRP dXRwdXQoZXMpOworCisJLyogUmVtb3ZlIGxhc3QgbGluZSBicmVhayAqLworCWlmIChlcy0+c3Ry LT5sZW4gPiAwICYmIGVzLT5zdHItPmRhdGFbZXMtPnN0ci0+bGVuIC0gMV0gPT0gJ1xuJykKKwkJ ZXMtPnN0ci0+ZGF0YVstLWVzLT5zdHItPmxlbl0gPSAnXDAnOworCisJLyogRml4IEpTT04gdG8g b3V0cHV0IGFuIG9iamVjdCAqLworCWlmIChsb2dGb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfSlNP TikKKwl7CisJCWVzLT5zdHItPmRhdGFbMF0gPSAneyc7CisJCWVzLT5zdHItPmRhdGFbZXMtPnN0 ci0+bGVuIC0gMV0gPSAnfSc7CisJfQorfQorCiAvKgogICogRXhwbGFpblByaW50UGxhbiAtCiAg KgkgIGNvbnZlcnQgYSBRdWVyeURlc2MncyBwbGFuIHRyZWUgdG8gdGV4dCBhbmQgYXBwZW5kIGl0 IHRvIGVzLT5zdHIKQEAgLTE2NDcsNiArMTY4Myw5IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGZvcmNpYmx5 IGNsZWFuIHVwIHRoZSBpbnN0cnVtZW50YXRpb24gc3RhdGUgYmVjYXVzZSB3ZQogCSAqIGhhdmVu J3QgZG9uZSBFeGVjdXRvckVuZCB5ZXQuICBUaGlzIGlzIHByZXR0eSBncm90dHkgLi4uCisJICog VGhpcyBjbGVhbnVwIHNob3VsZCBub3QgYmUgZG9uZSB3aGVuIHRoZSBxdWVyeSBoYXMgYWxyZWFk eSBiZWVuCisJICogZXhlY3V0ZWQgYW5kIGV4cGxhaW4gaGFzIGJlZW4gY2FsbGVkIGJ5IHNpZ25h bCwgYXMgdGhlIHRhcmdldCBxdWVyeQorCSAqIG1heSB1c2UgaW5zdHJ1bWVudGF0aW9uIGFuZCBj bGVhbiBpdHNlbGYgdXAuCiAJICoKIAkgKiBOb3RlOiBjb250cmliL2F1dG9fZXhwbGFpbiBjb3Vs ZCBjYXVzZSBpbnN0cnVtZW50YXRpb24gdG8gYmUgc2V0IHVwCiAJICogZXZlbiB0aG91Z2ggd2Ug ZGlkbid0IGFzayBmb3IgaXQgaGVyZS4gIEJlIGNhcmVmdWwgbm90IHRvIHByaW50IGFueQpAQCAt MTY1NCw3ICsxNjkzLDcgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3Qg KmFuY2VzdG9ycywKIAkgKiBJbnN0ckVuZExvb3AgY2FsbCBhbnl3YXksIGlmIHBvc3NpYmxlLCB0 byByZWR1Y2UgdGhlIG51bWJlciBvZiBjYXNlcwogCSAqIGF1dG9fZXhwbGFpbiBoYXMgdG8gY29u dGVuZCB3aXRoLgogCSAqLwotCWlmIChwbGFuc3RhdGUtPmluc3RydW1lbnQpCisJaWYgKHBsYW5z dGF0ZS0+aW5zdHJ1bWVudCAmJiAhZXMtPnNpZ25hbGVkKQogCQlJbnN0ckVuZExvb3AocGxhbnN0 YXRlLT5pbnN0cnVtZW50KTsKIAogCWlmIChlcy0+YW5hbHl6ZSAmJgpAQCAtNTA4MiwzICs1MTIx LDE3MCBAQCBlc2NhcGVfeWFtbChTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgY2hhciAqc3RyKQogewog CWVzY2FwZV9qc29uKGJ1Ziwgc3RyKTsKIH0KKworLyoKKyAqIEhhbmRsZUxvZ1F1ZXJ5UGxhbklu dGVycnVwdAorICoJCUhhbmRsZSByZWNlaXB0IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGxv Z2dpbmcgdGhlIHBsYW4gb2YKKyAqCQl0aGUgY3VycmVudGx5IHJ1bm5pbmcgcXVlcnkuCisgKgor ICogQWxsIHRoZSBhY3R1YWwgd29yayBpcyBkZWZlcnJlZCB0byBQcm9jZXNzTG9nUXVlcnlQbGFu SW50ZXJydXB0KCksCisgKiBiZWNhdXNlIHdlIGNhbm5vdCBzYWZlbHkgZW1pdCBhIGxvZyBtZXNz YWdlIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRsZUxvZ1F1ZXJ5 UGxhbkludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRpbmcgPSB0cnVlOworCUxvZ1F1 ZXJ5UGxhblBlbmRpbmcgPSB0cnVlOworCS8qIGxhdGNoIHdpbGwgYmUgc2V0IGJ5IHByb2NzaWdu YWxfc2lndXNyMV9oYW5kbGVyICovCit9CisKKy8qCisgKiBQcm9jZXNzTG9nUXVlcnlQbGFuSW50 ZXJydXB0CisgKiAJCVBlcmZvcm0gbG9nZ2luZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5IHJ1 bm5pbmcgcXVlcnkgb24gdGhpcworICogCQliYWNrZW5kIHByb2Nlc3MuCisgKgorICogQW55IGJh Y2tlbmQgdGhhdCBwYXJ0aWNpcGF0ZXMgaW4gUHJvY1NpZ25hbCBzaWduYWxpbmcgbXVzdCBhcnJh bmdlIHRvIGNhbGwKKyAqIHRoaXMgZnVuY3Rpb24gaWYgd2Ugc2VlIExvZ1F1ZXJ5UGxhblBlbmRp bmcgc2V0LgorICogSXQgaXMgY2FsbGVkIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgd2hp Y2ggaXMgZW5vdWdoIGJlY2F1c2UgdGhlIHRhcmdldAorICogcHJvY2VzcyBmb3IgbG9nZ2luZyBw bGFuIGlzIGEgYmFja2VuZC4KKyAqLwordm9pZAorUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVw dCh2b2lkKQoreworCUV4cGxhaW5TdGF0ZSAqZXM7CisJSEFTSF9TRVFfU1RBVFVTIHN0YXR1czsK KwlMT0NBTExPQ0sgICpsb2NhbGxvY2s7CisJTWVtb3J5Q29udGV4dCBjeHQ7CisJTWVtb3J5Q29u dGV4dCBvbGRfY3h0OworCUxvZ1F1ZXJ5UGxhblBlbmRpbmcgPSBmYWxzZTsKKworCS8qIENhbm5v dCByZS1lbnRlci4gKi8KKwlpZiAoUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSkK KwkJcmV0dXJuOworCisJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFjdGl2ZSA9IHRydWU7 CisKKwlpZiAoQWN0aXZlUXVlcnlEZXNjID09IE5VTEwpCisJeworCQllcmVwb3J0KExPR19TRVJW RVJfT05MWSwKKwkJCQllcnJtc2coImJhY2tlbmQgd2l0aCBQSUQgJWQgaXMgbm90IHJ1bm5pbmcg YSBxdWVyeSBvciBhIHN1YnRyYW5zYWN0aW9uIGlzIGFib3J0ZWQiLAorCQkJCQlNeVByb2NQaWQp LAorCQkJCWVycmhpZGVzdG10KHRydWUpLAorCQkJCWVycmhpZGVjb250ZXh0KHRydWUpKTsKKwor CQlQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlID0gZmFsc2U7CisJCXJldHVybjsK Kwl9CisKKwkvKgorCSAqIEVuc3VyZSBubyBwYWdlIGxvY2sgaXMgaGVsZCBvbiB0aGlzIHByb2Nl c3MuCisJICoKKwkgKiBJZiBwYWdlIGxvY2sgaXMgaGVsZCBhdCB0aGUgdGltZSBvZiB0aGUgaW50 ZXJydXB0LCB3ZSBjYW4ndCBhY3F1aXJlIGFueQorCSAqIG90aGVyIGhlYXZ5d2VpZ2h0IGxvY2ss IHdoaWNoIG1pZ2h0IGJlIG5lY2Vzc2FyeSBmb3IgZXhwbGFpbmluZyB0aGUgcGxhbgorCSAqIHdo ZW4gcmV0cmlldmluZyBjb2x1bW4gbmFtZXMuCisJICoKKwkgKiBUaGlzIG1heSBiZSBvdmVya2ls bCwgYnV0IHNpbmNlIHBhZ2UgbG9ja3MgYXJlIGhlbGQgZm9yIGEgc2hvcnQgZHVyYXRpb24KKwkg KiB3ZSBjaGVjayBhbGwgdGhlIExvY2FsTG9jayBlbnRyaWVzIGFuZCB3aGVuIGZpbmRpbmcgZXZl biBvbmUsIGdpdmUgdXAKKwkgKiBsb2dnaW5nIHRoZSBwbGFuLgorCSAqLworCWhhc2hfc2VxX2lu aXQoJnN0YXR1cywgR2V0TG9ja01ldGhvZExvY2FsSGFzaCgpKTsKKwl3aGlsZSAoKGxvY2FsbG9j ayA9IChMT0NBTExPQ0sgKikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCXsK KwkJaWYgKExPQ0FMTE9DS19MT0NLVEFHKCpsb2NhbGxvY2spID09IExPQ0tUQUdfUEFHRSkKKwkJ eworCQkJZXJlcG9ydChMT0dfU0VSVkVSX09OTFksCisJCQkJZXJybXNnKCJpZ25vcmVkIHJlcXVl c3QgZm9yIGxvZ2dpbmcgcXVlcnkgcGxhbiBkdWUgdG8gcGFnZSBsb2NrIGNvbmZsaWN0cyIpLAor CQkJCWVycmRldGFpbCgiWW91IGNhbiB0cnkgYWdhaW4gaW4gYSBtb21lbnQuIikpOworCQkJaGFz aF9zZXFfdGVybSgmc3RhdHVzKTsKKworCQkJUHJvY2Vzc0xvZ1F1ZXJ5UGxhbkludGVycnVwdEFj dGl2ZSA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBFbnN1cmUgbm8g bG9jayBpcyBhbHJlYWR5IGhlbGQgb24gdGhlIGxvY2thYmxlIG9iamVjdC4KKwkgKiBPdGhlcndp c2UgRVhQTEFJTiBjYW4gYmUgYWxzbyBob2xkIG9uIGl0LgorCSAqLworCWlmIChNeVByb2MtPmhl bGRMb2NrcykKKwl7CisJCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJZXJybXNnKCJpZ25v cmVkIHJlcXVlc3QgZm9yIGxvZ2dpbmcgcXVlcnkgcGxhbiBkdWUgdG8gbG9jayBjb25mbGljdHMi KSwKKwkJCWVycmRldGFpbCgiWW91IGNhbiB0cnkgYWdhaW4gaW4gYSBtb21lbnQuIikpOworCQkJ cmV0dXJuOworCX0KKworCWN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5 Q29udGV4dCwKKwkJCQkJCQkJImxvZ19xdWVyeV9wbGFuIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJ CQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlvbGRfY3h0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKGN4dCk7CisKKwllcyA9IE5ld0V4cGxhaW5TdGF0ZSgpOworCisJZXMtPmZvcm1h dCA9IEVYUExBSU5fRk9STUFUX1RFWFQ7CisJZXMtPnNldHRpbmdzID0gdHJ1ZTsKKwllcy0+dmVy Ym9zZSA9IHRydWU7CisJZXMtPnNpZ25hbGVkID0gdHJ1ZTsKKworCUV4cGxhaW5Bc3NlbWJsZUxv Z091dHB1dChlcywgQWN0aXZlUXVlcnlEZXNjLCBFWFBMQUlOX0ZPUk1BVF9URVhULCAwLCAtMSk7 CisKKwllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJCWVycm1zZygicXVlcnkgcGxhbiBydW5u aW5nIG9uIGJhY2tlbmQgd2l0aCBQSUQgJWQgaXM6XG4lcyIsCisJCQkJCU15UHJvY1BpZCwgZXMt PnN0ci0+ZGF0YSksCisJCQkgZXJyaGlkZXN0bXQodHJ1ZSksCisJCQkgZXJyaGlkZWNvbnRleHQo dHJ1ZSkpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jeHQpOworCU1lbW9yeUNvbnRl eHREZWxldGUoY3h0KTsKKworCVByb2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHRBY3RpdmUgPSBm YWxzZTsKK30KKworLyoKKyAqIHBnX2xvZ19xdWVyeV9wbGFuCisgKgkJU2lnbmFsIGEgYmFja2Vu ZCBwcm9jZXNzIHRvIGxvZyB0aGUgcXVlcnkgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeS4KKyAq CisgKiBCeSBkZWZhdWx0LCBvbmx5IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gc2lnbmFsIHRv IGxvZyB0aGUgcGxhbiBiZWNhdXNlCisgKiBhbGxvd2luZyBhbnkgdXNlcnMgdG8gaXNzdWUgdGhp cyByZXF1ZXN0IGF0IGFuIHVuYm91bmRlZCByYXRlIHdvdWxkCisgKiBjYXVzZSBsb3RzIG9mIGxv ZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQgdG8gZGVuaWFsIG9mIHNlcnZpY2UuCisgKiBB ZGRpdGlvbmFsIHJvbGVzIGNhbiBiZSBwZXJtaXR0ZWQgd2l0aCBHUkFOVC4KKyAqLworRGF0dW0K K3BnX2xvZ19xdWVyeV9wbGFuKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50CQkJcGlkID0gUEdf R0VUQVJHX0lOVDMyKDApOworCVBHUFJPQwkgICAqcHJvYzsKKwlQZ0JhY2tlbmRTdGF0dXMJKmJl X3N0YXR1czsKKworCXByb2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhwaWQpOworCisJaWYgKHByb2Mg PT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRoaXMgaXMganVzdCBhIHdhcm5pbmcgc28gYSBsb29w LXRocm91Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFib3J0CisJCSAqIGlmIG9uZSBiYWNrZW5kIHRl cm1pbmF0ZWQgb24gaXRzIG93biBkdXJpbmcgdGhlIHJ1bi4KKwkJICovCisJCWVyZXBvcnQoV0FS TklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBiYWNrZW5kIHBy b2Nlc3MiLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwliZV9zdGF0 dXMgPSBwZ3N0YXRfZ2V0X2JlZW50cnlfYnlfYmFja2VuZF9pZChwcm9jLT5iYWNrZW5kSWQpOwor CWlmIChiZV9zdGF0dXMtPnN0X2JhY2tlbmRUeXBlICE9IEJfQkFDS0VORCkKKwl7CisJCWVyZXBv cnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBjbGll bnQgYmFja2VuZCBwcm9jZXNzIiwgcGlkKSkpOworCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJ fQorCisJaWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19MT0dfUVVFUllfUExBTiwgcHJv Yy0+YmFja2VuZElkKSA8IDApCisJeworCQkvKiBBZ2FpbiwganVzdCBhIHdhcm5pbmcgdG8gYWxs b3cgbG9vcHMgKi8KKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBz ZW5kIHNpZ25hbCB0byBwcm9jZXNzICVkOiAlbSIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0wo ZmFsc2UpOworCX0KKworCVBHX1JFVFVSTl9CT09MKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNN YWluLmMKaW5kZXggMTNhOWI3ZGE4My4uNGM3ZmUzNWY4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFp bi5jCkBAIC03OCw2ICs3OCw5IEBAIEV4ZWN1dG9yRW5kX2hvb2tfdHlwZSBFeGVjdXRvckVuZF9o b29rID0gTlVMTDsKIC8qIEhvb2sgZm9yIHBsdWdpbiB0byBnZXQgY29udHJvbCBpbiBFeGVjQ2hl Y2tQZXJtaXNzaW9ucygpICovCiBFeGVjdXRvckNoZWNrUGVybXNfaG9va190eXBlIEV4ZWN1dG9y Q2hlY2tQZXJtc19ob29rID0gTlVMTDsKIAorLyogQ3VycmVudGx5IGV4ZWN1dGluZyBxdWVyeSdz IFF1ZXJ5RGVzYyAqLworUXVlcnlEZXNjICpBY3RpdmVRdWVyeURlc2MgPSBOVUxMOworCiAvKiBk ZWNscyBmb3IgbG9jYWwgcm91dGluZXMgb25seSB1c2VkIHdpdGhpbiB0aGlzIG1vZHVsZSAqLwog c3RhdGljIHZvaWQgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIGludCBlZmxhZ3MpOwog c3RhdGljIHZvaWQgQ2hlY2tWYWxpZFJvd01hcmtSZWwoUmVsYXRpb24gcmVsLCBSb3dNYXJrVHlw ZSBtYXJrVHlwZSk7CkBAIC0zMDMsMTAgKzMwNiwyMSBAQCBFeGVjdXRvclJ1bihRdWVyeURlc2Mg KnF1ZXJ5RGVzYywKIAkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCB1aW50NjQgY291bnQsCiAJ CQlib29sIGV4ZWN1dGVfb25jZSkKIHsKKwkvKgorCSAqIFVwZGF0ZSBBY3RpdmVRdWVyeURlc2Mg aGVyZSB0byBlbmFibGUgcmV0cmlldmFsIG9mIHRoZSBjdXJyZW50bHkKKwkgKiBydW5uaW5nIHF1 ZXJ5RGVzYyBmb3IgbmVzdGVkIHF1ZXJpZXMuCisJICovCisJUXVlcnlEZXNjICpzYXZlX0FjdGl2 ZVF1ZXJ5RGVzYzsKKworCXNhdmVfQWN0aXZlUXVlcnlEZXNjID0gQWN0aXZlUXVlcnlEZXNjOwor CUFjdGl2ZVF1ZXJ5RGVzYyA9IHF1ZXJ5RGVzYzsKKwogCWlmIChFeGVjdXRvclJ1bl9ob29rKQog CQkoKkV4ZWN1dG9yUnVuX2hvb2spIChxdWVyeURlc2MsIGRpcmVjdGlvbiwgY291bnQsIGV4ZWN1 dGVfb25jZSk7CiAJZWxzZQogCQlzdGFuZGFyZF9FeGVjdXRvclJ1bihxdWVyeURlc2MsIGRpcmVj dGlvbiwgY291bnQsIGV4ZWN1dGVfb25jZSk7CisKKwlBY3RpdmVRdWVyeURlc2MgPSBzYXZlX0Fj dGl2ZVF1ZXJ5RGVzYzsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5j CmluZGV4IGU4NDYxOWU1YTUuLjY5NjM4ZTY0YmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j c2lnbmFsLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIK ICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtl ci5oIgpAQCAtNjU4LDYgKzY1OSw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05B TF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQp KQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9j U2lnbmFsKFBST0NTSUdfTE9HX1FVRVJZX1BMQU4pKQorCQlIYW5kbGVMb2dRdWVyeVBsYW5JbnRl cnJ1cHQoKTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9N RVNTQUdFKSkKIAkJSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VJbnRlcnJ1cHQoKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9sb2NrLmMKaW5kZXggYzcwYTFhZGI5YS4uZmVkMmVhMTkyNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbG9jay5jCkBAIC02MDIsMTcgKzYwMiwxOCBAQCBMb2NrSGVsZEJ5TWUoY29uc3Qg TE9DS1RBRyAqbG9ja3RhZywgTE9DS01PREUgbG9ja21vZGUpCiAJcmV0dXJuIChsb2NhbGxvY2sg JiYgbG9jYWxsb2NrLT5uTG9ja3MgPiAwKTsKIH0KIAotI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcKIC8qCi0gKiBHZXRMb2NrTWV0aG9kTG9jYWxIYXNoIC0tIHJldHVybiB0aGUgaGFzaCBvZiBs b2NhbCBsb2NrcywgZm9yIG1vZHVsZXMgdGhhdAotICoJCWV2YWx1YXRlIGFzc2VydGlvbnMgYmFz ZWQgb24gYWxsIGxvY2tzIGhlbGQuCisgKiBHZXRMb2NrTWV0aG9kTG9jYWxIYXNoIC0tIHJldHVy biB0aGUgaGFzaCBvZiBsb2NhbCBsb2NrcywgbWFpbmx5IGZvcgorICoJCW1vZHVsZXMgdGhhdCBl dmFsdWF0ZSBhc3NlcnRpb25zIGJhc2VkIG9uIGFsbCBsb2NrcyBoZWxkLgorICoKKyAqIE5PVEU6 IFdoZW4gdGhlcmUgYXJlIG1hbnkgZW50cmllcyBpbiBMb2NrTWV0aG9kTG9jYWxIYXNoLCBjYWxs aW5nIHRoaXMKKyAqIGZ1bmN0aW9uIGFuZCBsb29raW5nIGludG8gYWxsIG9mIHRoZW0gY2FuIGxl YWQgdG8gcGVyZm9ybWFuY2UgcHJvYmxlbXMuCiAgKi8KIEhUQUIgKgogR2V0TG9ja01ldGhvZExv Y2FsSGFzaCh2b2lkKQogewogCXJldHVybiBMb2NrTWV0aG9kTG9jYWxIYXNoOwogfQotI2VuZGlm CiAKIC8qCiAgKiBMb2NrSGFzV2FpdGVycyAtLSBsb29rIHVwICdsb2NrdGFnJyBhbmQgY2hlY2sg aWYgcmVsZWFzaW5nIHRoaXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCAxYTM0YmQzNzE1Li4wNzc5N2Vm N2RkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21t YW5kcy9ldmVudF90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgogI2lu Y2x1ZGUgImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJjb21tb24vcGdfcHJuZy5oIgog I2luY2x1ZGUgImppdC9qaXQuaCIKQEAgLTM0NTcsNiArMzQ1OCw5IEBAIFByb2Nlc3NJbnRlcnJ1 cHRzKHZvaWQpCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVt b3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKExvZ1F1ZXJ5UGxhblBlbmRpbmcpCisJCVBy b2Nlc3NMb2dRdWVyeVBsYW5JbnRlcnJ1cHQoKTsKKwogCWlmIChQYXJhbGxlbEFwcGx5TWVzc2Fn ZVBlbmRpbmcpCiAJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcygpOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYwppbmRleCA4OGIwM2U4ZmEzLi4wNjNhOTJhNWJjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYwpAQCAtMzcsNiArMzcsOCBAQCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRs ZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IFBy b2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IExv Z01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRs ZVN0YXRzVXBkYXRlVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKK3ZvbGF0aWxlIHNpZ19hdG9taWNf dCBMb2dRdWVyeVBsYW5QZW5kaW5nID0gZmFsc2U7CisKIHZvbGF0aWxlIHVpbnQzMiBJbnRlcnJ1 cHRIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIFF1ZXJ5Q2FuY2VsSG9sZG9mZkNv dW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBDcml0U2VjdGlvbkNvdW50ID0gMDsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CmluZGV4IDI5YWY0Y2U2NWQuLjI2YjExZDZhMTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdApAQCAtODI3NCw2ICs4Mjc0LDEyIEBACiAgIHByb3JldHR5cGUgPT4gJ2Jvb2wn LCBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCiAgIHByb3NyYyA9PiAncGdfbG9nX2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzJyB9LAogCisjIGxvZ2dpbmcgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeSBv biB0aGUgc3BlY2lmaWVkIGJhY2tlbmQKK3sgb2lkID0+ICc4MDAwJywgZGVzY3IgPT4gJ2xvZyBw bGFuIG9mIHRoZSBydW5uaW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFja2VuZCcsCisgIHBy b25hbWUgPT4gJ3BnX2xvZ19xdWVyeV9wbGFuJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9y ZXR0eXBlID0+ICdib29sJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludDQnLCBwcm9zcmMgPT4gJ3Bn X2xvZ19xdWVyeV9wbGFuJyB9LAorCiAjIG5vbi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3IK IHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25vbi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0 b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9zZXJpZXMnLCBwcm9yb3dzID0+ICcxMDAwJywK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCAxYjQ0ZDQ4M2Q2Li5iYmNhMTA2ZTkyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXhwbGFpbi5oCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSAibGliL3N0cmluZ2lu Zm8uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgogCitleHRlcm4gUEdETExJTVBP UlQgYm9vbCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0QWN0aXZlOworCiB0eXBlZGVmIGVu dW0gRXhwbGFpbkZvcm1hdAogewogCUVYUExBSU5fRk9STUFUX1RFWFQsCkBAIC02MCw2ICs2Miw3 IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCWJvb2wJCWhpZGVfd29ya2VyczsJLyog c2V0IGlmIHdlIGZpbmQgYW4gaW52aXNpYmxlIEdhdGhlciAqLwogCS8qIHN0YXRlIHJlbGF0ZWQg dG8gdGhlIGN1cnJlbnQgcGxhbiBub2RlICovCiAJRXhwbGFpbldvcmtlcnNTdGF0ZSAqd29ya2Vy c19zdGF0ZTsgLyogbmVlZGVkIGlmIHBhcmFsbGVsIHBsYW4gKi8KKwlib29sCQlzaWduYWxlZDsJ CS8qIHdoZXRoZXIgZXhwbGFpbiBpcyBjYWxsZWQgYnkgc2lnbmFsICovCiB9IEV4cGxhaW5TdGF0 ZTsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBFeHBsYWluT25lUXVl cnkoKSAqLwpAQCAtOTQsNiArOTcsMTAgQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9uZVBsYW4oUGxh bm5lZFN0bXQgKnBsYW5uZWRzdG10LCBJbnRvQ2xhdXNlICppbnRvLAogCQkJCQkJICAgY29uc3Qg aW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLAogCQkJCQkJICAgY29uc3QgQnVmZmVyVXNhZ2UgKmJ1 ZnVzYWdlKTsKIAorZXh0ZXJuIHZvaWQgRXhwbGFpbkFzc2VtYmxlTG9nT3V0cHV0KEV4cGxhaW5T dGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLAorCQkJCQkJCQkJIGludCBsb2dGb3JtYXQs IGJvb2wgbG9nVHJpZ2dlcnMsCisJCQkJCQkJCQkgaW50IGxvZ1BhcmFtZXRlck1heExlbmd0aCk7 CisKIGV4dGVybiB2b2lkIEV4cGxhaW5QcmludFBsYW4oRXhwbGFpblN0YXRlICplcywgUXVlcnlE ZXNjICpxdWVyeURlc2MpOwogZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFp blN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MpOwogCkBAIC0xMjYsNCArMTMzLDYgQEAg ZXh0ZXJuIHZvaWQgRXhwbGFpbk9wZW5Hcm91cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBj aGFyICpsYWJlbG5hbWUsCiBleHRlcm4gdm9pZCBFeHBsYWluQ2xvc2VHcm91cChjb25zdCBjaGFy ICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJlbG5hbWUsCiAJCQkJCQkJICBib29sIGxhYmVsZWQs IEV4cGxhaW5TdGF0ZSAqZXMpOwogCitleHRlcm4gdm9pZCBIYW5kbGVMb2dRdWVyeVBsYW5JbnRl cnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50ZXJydXB0KHZv aWQpOwogI2VuZGlmCQkJCQkJCS8qIEVYUExBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAwYjAxYzFmMDkz Li4zOTE0YmE5ZjcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAorKysgYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTUsNiArOTUsNyBAQCBleHRlcm4gUEdETExJTVBP UlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRl cm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVu ZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVtb3J5 Q29udGV4dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190 IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nOworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBMb2dRdWVyeVBsYW5QZW5kaW5nOwogCiBleHRlcm4gUEdETExJTVBP UlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmc7CiBl eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25M b3N0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2xvY2suaAppbmRleCAwMDY3OTYyNGY3Li4zODI5MzAwNzNhIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2xv Y2suaApAQCAtNTY5LDkgKzU2OSw3IEBAIGV4dGVybiB2b2lkIExvY2tSZWxlYXNlU2Vzc2lvbihM T0NLTUVUSE9ESUQgbG9ja21ldGhvZGlkKTsKIGV4dGVybiB2b2lkIExvY2tSZWxlYXNlQ3VycmVu dE93bmVyKExPQ0FMTE9DSyAqKmxvY2FsbG9ja3MsIGludCBubG9ja3MpOwogZXh0ZXJuIHZvaWQg TG9ja1JlYXNzaWduQ3VycmVudE93bmVyKExPQ0FMTE9DSyAqKmxvY2FsbG9ja3MsIGludCBubG9j a3MpOwogZXh0ZXJuIGJvb2wgTG9ja0hlbGRCeU1lKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsIExP Q0tNT0RFIGxvY2ttb2RlKTsKLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiBleHRlcm4gSFRB QiAqR2V0TG9ja01ldGhvZExvY2FsSGFzaCh2b2lkKTsKLSNlbmRpZgogZXh0ZXJuIGJvb2wgTG9j a0hhc1dhaXRlcnMoY29uc3QgTE9DS1RBRyAqbG9ja3RhZywKIAkJCQkJCSAgIExPQ0tNT0RFIGxv Y2ttb2RlLCBib29sIHNlc3Npb25Mb2NrKTsKIGV4dGVybiBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAq R2V0TG9ja0NvbmZsaWN0cyhjb25zdCBMT0NLVEFHICpsb2NrdGFnLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaAppbmRleCA1MmRjYjRjMmFkLi40MDBjNTI3MjkyIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nz aWduYWwuaApAQCAtMzUsNiArMzUsNyBAQCB0eXBlZGVmIGVudW0KIAlQUk9DU0lHX1dBTFNORF9J TklUX1NUT1BQSU5HLAkvKiBhc2sgd2Fsc2VuZGVycyB0byBwcmVwYXJlIGZvciBzaHV0ZG93biAg Ki8KIAlQUk9DU0lHX0JBUlJJRVIsCQkJLyogZ2xvYmFsIGJhcnJpZXIgaW50ZXJydXB0ICAqLwog CVBST0NTSUdfTE9HX01FTU9SWV9DT05URVhULCAvKiBhc2sgYmFja2VuZCB0byBsb2cgdGhlIG1l bW9yeSBjb250ZXh0cyAqLworCVBST0NTSUdfTE9HX1FVRVJZX1BMQU4sIC8qIGFzayBiYWNrZW5k IHRvIGxvZyBwbGFuIG9mIHRoZSBjdXJyZW50IHF1ZXJ5ICovCiAJUFJPQ1NJR19QQVJBTExFTF9B UFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwog CiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdGNvcC9wcXVlcnkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5LmgKaW5kZXggMDczZmIz MjNiYy4uM2RkN2VkZjkzYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaAor KysgYi9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCkBAIC0yMSw3ICsyMSw3IEBAIHN0cnVjdCBQ bGFubmVkU3RtdDsJCQkJLyogYXZvaWQgaW5jbHVkaW5nIHBsYW5ub2Rlcy5oIGhlcmUgKi8KIAog CiBleHRlcm4gUEdETExJTVBPUlQgUG9ydGFsIEFjdGl2ZVBvcnRhbDsKLQorZXh0ZXJuIFBHRExM SU1QT1JUIFF1ZXJ5RGVzYyAqQWN0aXZlUXVlcnlEZXNjOwogCiBleHRlcm4gUG9ydGFsU3RyYXRl Z3kgQ2hvb3NlUG9ydGFsU3RyYXRlZ3koTGlzdCAqc3RtdHMpOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9lbG9nLmggYi9zcmMvaW5jbHVkZS91dGlscy9lbG9nLmgKaW5kZXggNzYx ZWUyNTEyZC4uM2Q1YjRiMzdmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2Vsb2cuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIHN0cnVj dCBOb2RlOwogCiBleHRlcm4gYm9vbCBtZXNzYWdlX2xldmVsX2lzX2ludGVyZXN0aW5nKGludCBl bGV2ZWwpOwogCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBQcm9jZXNzTG9nUXVlcnlQbGFuSW50 ZXJydXB0QWN0aXZlOwogZXh0ZXJuIGJvb2wgZXJyc3RhcnQoaW50IGVsZXZlbCwgY29uc3QgY2hh ciAqZG9tYWluKTsKIGV4dGVybiBwZ19hdHRyaWJ1dGVfY29sZCBib29sIGVycnN0YXJ0X2NvbGQo aW50IGVsZXZlbCwgY29uc3QgY2hhciAqZG9tYWluKTsKIGV4dGVybiB2b2lkIGVycmZpbmlzaChj b25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqZnVuY25hbWUpOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dAppbmRleCA3YzE1 NDc3MTA0Li5mMzRmMmJjZDdiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L21pc2NfZnVuY3Rpb25zLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2Nf ZnVuY3Rpb25zLm91dApAQCAtMjc2LDE0ICsyNzYsMTUgQEAgU0VMRUNUIHRlc3RfY2Fub25pY2Fs aXplX3BhdGgoJy4vYWJjLy4vZGVmLy4uLy4vZ2hpLy4uLy4uLy4uL2prbC9tbm8nKTsKICAuLi9q a2wvbW5vCiAoMSByb3cpCiAKKy0tIFRlc3QgbG9nZ2luZyBmdW5jdGlvbnMKIC0tCi0tLSBwZ19s b2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQotLS0KLS0tIE1lbW9yeSBjb250ZXh0cyBhcmUg bG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgorLS0gVGhl IG91dHB1dHMgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBsb2dnZWQgYW5kIHRoZXkgYXJlIG5vdCBy ZXR1cm5lZCB0bworLS0gdGhlIGZ1bmN0aW9uLgogLS0gRnVydGhlcm1vcmUsIHRoZWlyIGNvbnRl bnRzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLiBIb3dldmVyLAogLS0gd2UgY2Fu IGF0IGxlYXN0IHZlcmlmeSB0aGF0IHRoZSBjb2RlIGRvZXNuJ3QgZmFpbCwgYW5kIHRoYXQgdGhl CiAtLSBwZXJtaXNzaW9ucyBhcmUgc2V0IHByb3Blcmx5LgogLS0KKy0tIHBnX2xvZ19iYWNrZW5k X21lbW9yeV9jb250ZXh0cygpCiBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KHBnX2JhY2tlbmRfcGlkKCkpOwogIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTcsOCArMjk4LDggQEAgU0VMRUNU IHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwaWQpIEZST00gcGdfc3RhdF9hY3Rpdml0 eQogIHQKICgxIHJvdykKIAotQ1JFQVRFIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5OwotU0VMRUNU IGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX21lbW9yeScsCitDUkVBVEUgUk9M RSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK1NFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlKCdy ZWdyZXNzX2xvZ19mdW5jdGlvbicsCiAgICdwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMo aW50ZWdlciknLCAnRVhFQ1VURScpOyAtLSBubwogIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UgCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwNiwxNSArMzA3LDE1IEBAIFNFTEVDVCBoYXNf ZnVuY3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19tZW1vcnknLAogKDEgcm93KQogCiBHUkFO VCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhpbnRl Z2VyKQotICBUTyByZWdyZXNzX2xvZ19tZW1vcnk7Ci1TRUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZp bGVnZSgncmVncmVzc19sb2dfbWVtb3J5JywKKyAgVE8gcmVncmVzc19sb2dfZnVuY3Rpb247CitT RUxFQ1QgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSgncmVncmVzc19sb2dfZnVuY3Rpb24nLAogICAn cGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0g eWVzCiAgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IHQKICgxIHJvdykKIAotU0VUIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5OworU0VUIFJPTEUgcmVn cmVzc19sb2dfZnVuY3Rpb247CiBTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KHBnX2JhY2tlbmRfcGlkKCkpOwogIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjMsOCArMzI0LDQxIEBAIFNFTEVD VCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CiAKIFJF U0VUIFJPTEU7CiBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfYmFja2VuZF9tZW1v cnlfY29udGV4dHMoaW50ZWdlcikKLSAgRlJPTSByZWdyZXNzX2xvZ19tZW1vcnk7Ci1EUk9QIFJP TEUgcmVncmVzc19sb2dfbWVtb3J5OworICBGUk9NIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworLS0g cGdfbG9nX3F1ZXJ5X3BsYW4oKQorU0VMRUNUIHBnX2xvZ19xdWVyeV9wbGFuKHBnX2JhY2tlbmRf cGlkKCkpOworIHBnX2xvZ19xdWVyeV9wbGFuIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0 aW9uJywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0gbm8K KyBoYXNfZnVuY3Rpb25fcHJpdmlsZWdlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgor KDEgcm93KQorCitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpCisgIFRPIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworU0VMRUNUIGhhc19mdW5jdGlvbl9w cml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0aW9uJywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGlu dGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0geWVzCisgaGFzX2Z1bmN0aW9uX3ByaXZpbGVnZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworU0VUIFJPTEUgcmVncmVzc19s b2dfZnVuY3Rpb247CitTRUxFQ1QgcGdfbG9nX3F1ZXJ5X3BsYW4ocGdfYmFja2VuZF9waWQoKSk7 CisgcGdfbG9nX3F1ZXJ5X3BsYW4gCistLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQor CitSRVNFVCBST0xFOworUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfbG9nX3F1ZXJ5X3Bs YW4oaW50ZWdlcikKKyAgRlJPTSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKK0RST1AgUk9MRSByZWdy ZXNzX2xvZ19mdW5jdGlvbjsKIC0tCiAtLSBUZXN0IHNvbWUgYnVpbHQtaW4gU1JGcwogLS0KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbCBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAppbmRleCA4NTFkYWQ5MGY0Li5mNDcy YTgzOWJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsCkBAIC02OCwz OSArNjgsNjAgQEAgU0VMRUNUIHRlc3RfY2Fub25pY2FsaXplX3BhdGgoJy4vYWJjLy4vZGVmLy4n KTsKIFNFTEVDVCB0ZXN0X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uLy4vZGVmLy4nKTsKIFNF TEVDVCB0ZXN0X2Nhbm9uaWNhbGl6ZV9wYXRoKCcuL2FiYy8uL2RlZi8uLi8uL2doaS8uLi8uLi8u Li9qa2wvbW5vJyk7CiAKKy0tIFRlc3QgbG9nZ2luZyBmdW5jdGlvbnMKIC0tCi0tLSBwZ19sb2df YmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQotLS0KLS0tIE1lbW9yeSBjb250ZXh0cyBhcmUgbG9n Z2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgorLS0gVGhlIG91 dHB1dHMgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBsb2dnZWQgYW5kIHRoZXkgYXJlIG5vdCByZXR1 cm5lZCB0bworLS0gdGhlIGZ1bmN0aW9uLgogLS0gRnVydGhlcm1vcmUsIHRoZWlyIGNvbnRlbnRz IGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLiBIb3dldmVyLAogLS0gd2UgY2FuIGF0 IGxlYXN0IHZlcmlmeSB0aGF0IHRoZSBjb2RlIGRvZXNuJ3QgZmFpbCwgYW5kIHRoYXQgdGhlCiAt LSBwZXJtaXNzaW9ucyBhcmUgc2V0IHByb3Blcmx5LgogLS0KIAorLS0gcGdfbG9nX2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzKCkKKwogU0VMRUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhwZ19iYWNrZW5kX3BpZCgpKTsKIAogU0VMRUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250 ZXh0cyhwaWQpIEZST00gcGdfc3RhdF9hY3Rpdml0eQogICBXSEVSRSBiYWNrZW5kX3R5cGUgPSAn Y2hlY2twb2ludGVyJzsKIAotQ1JFQVRFIFJPTEUgcmVncmVzc19sb2dfbWVtb3J5OworQ1JFQVRF IFJPTEUgcmVncmVzc19sb2dfZnVuY3Rpb247CiAKLVNFTEVDVCBoYXNfZnVuY3Rpb25fcHJpdmls ZWdlKCdyZWdyZXNzX2xvZ19tZW1vcnknLAorU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2Uo J3JlZ3Jlc3NfbG9nX2Z1bmN0aW9uJywKICAgJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIG5vCiAKIEdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJ T04gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKGludGVnZXIpCi0gIFRPIHJlZ3Jlc3Nf bG9nX21lbW9yeTsKKyAgVE8gcmVncmVzc19sb2dfZnVuY3Rpb247CiAKLVNFTEVDVCBoYXNfZnVu Y3Rpb25fcHJpdmlsZWdlKCdyZWdyZXNzX2xvZ19tZW1vcnknLAorU0VMRUNUIGhhc19mdW5jdGlv bl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0aW9uJywKICAgJ3BnX2xvZ19iYWNrZW5kX21l bW9yeV9jb250ZXh0cyhpbnRlZ2VyKScsICdFWEVDVVRFJyk7IC0tIHllcwogCi1TRVQgUk9MRSBy ZWdyZXNzX2xvZ19tZW1vcnk7CitTRVQgUk9MRSByZWdyZXNzX2xvZ19mdW5jdGlvbjsKIFNFTEVD VCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CiBSRVNF VCBST0xFOwogCiBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19sb2dfYmFja2VuZF9tZW1v cnlfY29udGV4dHMoaW50ZWdlcikKLSAgRlJPTSByZWdyZXNzX2xvZ19tZW1vcnk7CisgIEZST00g cmVncmVzc19sb2dfZnVuY3Rpb247CisKKy0tIHBnX2xvZ19xdWVyeV9wbGFuKCkKK1NFTEVDVCBw Z19sb2dfcXVlcnlfcGxhbihwZ19iYWNrZW5kX3BpZCgpKTsKKworU0VMRUNUIGhhc19mdW5jdGlv bl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0aW9uJywKKyAgJ3BnX2xvZ19xdWVyeV9wbGFu KGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0gbm8KKworR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElP TiBwZ19sb2dfcXVlcnlfcGxhbihpbnRlZ2VyKQorICBUTyByZWdyZXNzX2xvZ19mdW5jdGlvbjsK KworU0VMRUNUIGhhc19mdW5jdGlvbl9wcml2aWxlZ2UoJ3JlZ3Jlc3NfbG9nX2Z1bmN0aW9uJywK KyAgJ3BnX2xvZ19xdWVyeV9wbGFuKGludGVnZXIpJywgJ0VYRUNVVEUnKTsgLS0geWVzCisKK1NF VCBST0xFIHJlZ3Jlc3NfbG9nX2Z1bmN0aW9uOworU0VMRUNUIHBnX2xvZ19xdWVyeV9wbGFuKHBn X2JhY2tlbmRfcGlkKCkpOworUkVTRVQgUk9MRTsKKworUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJ T04gcGdfbG9nX3F1ZXJ5X3BsYW4oaW50ZWdlcikKKyAgRlJPTSByZWdyZXNzX2xvZ19mdW5jdGlv bjsKIAotRFJPUCBST0xFIHJlZ3Jlc3NfbG9nX21lbW9yeTsKK0RST1AgUk9MRSByZWdyZXNzX2xv Z19mdW5jdGlvbjsKIAogLS0KIC0tIFRlc3Qgc29tZSBidWlsdC1pbiBTUkZzCgpiYXNlLWNvbW1p dDogNmExZWEwMmM0OTFkMTY0NzRhNjIxNDYwM2RjZTQwYjViMTIyZDRkMQotLSAKMi4zOS4yCgo= --=_e48aba3f7a679819cb12c6db13d6ad92--