Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n2Wox-0000AC-9y for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Dec 2021 11:08:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1n2Wov-000645-7B for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Dec 2021 11:08:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n2Wot-00063u-VC for pgsql-hackers@lists.postgresql.org; Wed, 29 Dec 2021 11:08:36 +0000 Received: from wout3-smtp.messagingengine.com ([64.147.123.19]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1n2Woj-00059X-W5 for pgsql-hackers@postgresql.org; Wed, 29 Dec 2021 11:08:33 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id 4F9583200A1B for ; Wed, 29 Dec 2021 06:08:21 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Wed, 29 Dec 2021 06:08:21 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=EpSc7h AAunJZkZOBpvfurO5bB25EfPUYKJlbU2iq8+8=; b=kv7hcFO/CiJU8KglNmfDyi Y/f/iT/rI3CdSkZy/qpuLE+731P38VB1fT70vlj8UfE00QxqXauKNk62pkJjTXSF d8xs8p5IZ4/WvJlBUzyUCL3cPpNGzkMj25J64soF95xsp/FCVXUmY8goK1dnKcPy tIepDEAC7YyIIt0UQXDWV25RVJ5G1ZcKoyTjg+vRTTVLEm6c0+rj1iWKFtUAbx+7 G8O2fg2q1YO75dafOERZOc83NI296bo0XhuCR2v4shFIWgHO5PbKjL5oiRTEbukR QYtqpeH0NM3e2bY1M3mW+1SFKau6JDJbf0Qenx/xV4umcLGuMYkCJs0tshrqjltg == X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvuddruddvuddgvdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffvfhfhjgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepkeeiveeugfdvkeffudegueevtdfhjefgtdejhfffueegueduvefflefggfet hfevnecuffhomhgrihhnpehpohhsthhgrhgvshhqlhdrohhrghenucevlhhushhtvghruf hiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvghrrdgvihhsvghnthhr rghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 29 Dec 2021 06:08:19 -0500 (EST) Content-Type: multipart/mixed; boundary="------------0hTWC0E08GDb6l8e8y7n9Tfc" Message-ID: <7848b872-7a10-67b2-b55f-7c9c475ae863@enterprisedb.com> Date: Wed, 29 Dec 2021 12:08:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Subject: Re: automatically generating node support functions Content-Language: en-US To: pgsql-hackers References: <2f876203-7142-fa71-6d22-6ce00eb26869@enterprisedb.com> <50fedc80-4104-bdc8-d777-04f030fc550f@dunslane.net> From: Peter Eisentraut In-Reply-To: <50fedc80-4104-bdc8-d777-04f030fc550f@dunslane.net> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------0hTWC0E08GDb6l8e8y7n9Tfc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12.10.21 15:52, Andrew Dunstan wrote: > I haven't been through the whole thing, but I did notice this: the > comment stripping code looks rather fragile. I think it would blow up if > there were a continuation line not starting with  qr/\s*\*/. It's a lot > simpler and more robust to do this if you slurp the file in whole. > Here's what we do in the buildfarm code: > >     my $src = file_contents($_); > # strip C comments >     # We used to use the recipe in perlfaq6 but there is actually no point. >     # We don't need to keep the quoted string values anyway, and >     # on some platforms the complex regex causes perl to barf and crash. >     $src =~ s{/\*.*?\*/}{}gs; > > After you've done that splitting it into lines is pretty simple. Here is an updated patch, with some general rebasing, and the above improvement. It now also generates #include lines necessary in copyfuncs etc. to pull in all the node types it operates on. Further, I have looked more into the "metadata" approach discussed in [0]. It's pretty easy to generate that kind of output from the data structures my script produces. You just loop over all the node types and print stuff and keep a few counters. I don't plan to work on that at this time, but I just wanted to point out that if people wanted to move into that direction, my patch wouldn't be in the way. [0]: https://www.postgresql.org/message-id/flat/20190828234136.fk2ndqtld3onfrrp%40alap3.anarazel.de --------------0hTWC0E08GDb6l8e8y7n9Tfc Content-Type: text/plain; charset=UTF-8; name="v3-0001-Automatically-generate-node-support-functions.patch" Content-Disposition: attachment; filename*0="v3-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 RnJvbSBlMmMwOGQ4Yjc5MzIwMGEwN2I4ZmU1YWU4NWRkMjNmNDAxZGRjZWYxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAyOSBEZWMgMjAyMSAxMjowMDo0MSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjNdIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbm9kZSBzdXBwb3J0IGZ1bmN0 aW9ucwoKQWRkIGEgc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIG5vZGUg c3VwcG9ydCBmdW5jdGlvbnMKKGNvcHksIGVxdWFsLCBvdXQsIGFuZCByZWFkLCBhcyB3ZWxs IGFzIHRoZSBub2RlIHRhZ3MgZW51bSkgZnJvbSB0aGUKc3RydWN0IGRlZmluaXRpb25zLgoK Rm9yIGVhY2ggb2YgdGhlIGZvdXIgbm9kZSBzdXBwb3J0IGZpbGVzLCBpdCBjcmVhdGVzIHR3 byBpbmNsdWRlIGZpbGVzLAplLmcuLCBjb3B5ZnVuY3MuaW5jMS5jIGFuZCBjb3B5ZnVuY3Mu aW5jMi5jLCB0byBpbmNsdWRlIGluIHRoZSBtYWluCmZpbGUuICBBbGwgdGhlIHNjYWZmb2xk aW5nIG9mIHRoZSBtYWluIGZpbGUgc3RheXMgaW4gcGxhY2UuCgpUT0RPOiBJbiB0aGlzIHBh dGNoLCBJIGhhdmUgb25seSBpZmRlZidlZCBvdXQgdGhlIGNvZGUgdG8gY291bGQgYmUKcmVt b3ZlZCwgbWFpbmx5IHNvIHRoYXQgaXQgd29uJ3QgY29uc3RhbnRseSBoYXZlIG1lcmdlIGNv bmZsaWN0cy4KRXZlbnR1YWxseSwgdGhhdCBzaG91bGQgYWxsIGJlIGNoYW5nZWQgdG8gZGVs ZXRlIHRoZSBjb2RlLiAgV2hlbiB3ZSBkbwp0aGF0LCBzb21lIGNvZGUgY29tbWVudHMgc2hv dWxkIHByb2JhYmx5IGJlIHByZXNlcnZlZCBlbHNld2hlcmUsIHNvCnRoYXQgd2lsbCBuZWVk IGFub3RoZXIgcGFzcyBvZiBjb25zaWRlcmF0aW9uLgoKSSBoYXZlIHRyaWVkIHRvIG1vc3Rs eSBtYWtlIHRoZSBjb3ZlcmFnZSBvZiB0aGUgb3V0cHV0IG1hdGNoIHdoYXQgaXMKY3VycmVu dGx5IHRoZXJlLiAgRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBub3cgZG8gb3V0L3JlYWQgY292 ZXJhZ2Ugb2YKdXRpbGl0eSBzdGF0ZW1lbnQgbm9kZXMsIGJ1dCBJIGhhdmUgbWFudWFsbHkg ZXhjbHVkZWQgdGhvc2UgZm9yIG5vdy4KVGhlIHJlYXNvbiBpcyBtYWlubHkgdGhhdCBpdCdz IGVhc2llciB0byBkaWZmIHRoZSBiZWZvcmUgYW5kIGFmdGVyLAphbmQgYWRkaW5nIGEgYnVu Y2ggb2Ygc3R1ZmYgbGlrZSB0aGlzIG1pZ2h0IHJlcXVpcmUgYSBzZXBhcmF0ZQphbmFseXNp cyBhbmQgcmV2aWV3LgoKU3VidHlwaW5nIChUaWRTY2FuIC0+IFNjYW4pIGlzIHN1cHBvcnRl ZC4KCkZvciB0aGUgaGFyZCBjYXNlcywgeW91IGNhbiBqdXN0IHdyaXRlIGEgbWFudWFsIGZ1 bmN0aW9uIGFuZCBleGNsdWRlCmdlbmVyYXRpbmcgb25lLiAgRm9yIHRoZSBub3Qgc28gaGFy ZCBjYXNlcywgdGhlcmUgaXMgYSB3YXkgb2YKYW5ub3RhdGluZyBzdHJ1Y3QgZmllbGRzIHRv IGdldCBzcGVjaWFsIGJlaGF2aW9ycy4gIEZvciBleGFtcGxlLApwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKSBoYXMgdGhlIGZpZWxkIGlnbm9yZWQgaW4gZXF1YWwgZnVuY3Rpb25zLgoK RGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0 L2MxMDk3NTkwLWE2YTQtNDg2YS02NGIxLWUxZjljYzA1MzNjZSU0MGVudGVycHJpc2VkYi5j b20KLS0tCiBzcmMvYmFja2VuZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICA4ICst CiBzcmMvYmFja2VuZC9ub2Rlcy8uZ2l0aWdub3JlICAgICAgICAgIHwgICAzICsKIHNyYy9i YWNrZW5kL25vZGVzL01ha2VmaWxlICAgICAgICAgICAgfCAgNDYgKysKIHNyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL25vZGVz L2VxdWFsZnVuY3MuYyAgICAgICAgfCAgMjIgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2dlbl9u b2RlX3N1cHBvcnQucGwgfCA2NjAgKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9i YWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgfCAgMzAgKy0KIHNyYy9iYWNrZW5k L25vZGVzL3JlYWRmdW5jcy5jICAgICAgICAgfCAgMjMgKy0KIHNyYy9pbmNsdWRlL25vZGVz Ly5naXRpZ25vcmUgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMu aCAgICAgICAgICAgICB8ICAgOCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg ICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAg IHwgMTM0ICsrKy0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICB8 ICA5MCArKy0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgIHwgIDIw ICstCiBzcmMvaW5jbHVkZS9wZ19jb25maWdfbWFudWFsLmggICAgICAgIHwgICA0ICstCiBz cmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdG9v bHMvbXN2Yy9Tb2x1dGlvbi5wbSAgICAgICAgICAgIHwgIDQ2ICsrCiAxNyBmaWxlcyBjaGFu Z2VkLCA5NzYgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9yZQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvTWFrZWZpbGUKaW5kZXggMGRhODQ4YjFm ZC4uYTMzZGIxYWUwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvTWFrZWZpbGUKQEAgLTE0MywxMSArMTQzLDE1IEBAIHN0b3JhZ2UvbG1n ci9sd2xvY2tuYW1lcy5oOiBzdG9yYWdlL2xtZ3IvZ2VuZXJhdGUtbHdsb2NrbmFtZXMucGwg c3RvcmFnZS9sbWdyL2x3CiBzdWJtYWtlLWNhdGFsb2ctaGVhZGVyczoKIAkkKE1BS0UpIC1D IGNhdGFsb2cgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcwogCisjIHJ1biB0 aGlzIHVuY29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5nIHRvIGtub3cgaXRzIGRlcGVu ZGVuY2llcyBoZXJlOgorc3VibWFrZS1ub2Rlcy1oZWFkZXJzOgorCSQoTUFLRSkgLUMgbm9k ZXMgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcworCiAjIHJ1biB0aGlzIHVu Y29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5nIHRvIGtub3cgaXRzIGRlcGVuZGVuY2ll cyBoZXJlOgogc3VibWFrZS11dGlscy1oZWFkZXJzOgogCSQoTUFLRSkgLUMgdXRpbHMgZGlz dHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcwogCi0uUEhPTlk6IHN1Ym1ha2UtY2F0 YWxvZy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycworLlBIT05ZOiBzdWJtYWtlLWNh dGFsb2ctaGVhZGVycyBzdWJtYWtlLW5vZGVzLWhlYWRlcnMgc3VibWFrZS11dGlscy1oZWFk ZXJzCiAKICMgTWFrZSBzeW1saW5rcyBmb3IgdGhlc2UgaGVhZGVycyBpbiB0aGUgaW5jbHVk ZSBkaXJlY3RvcnkuIFRoYXQgd2F5CiAjIHdlIGNhbiBjdXQgZG93biBvbiB0aGUgLUkgb3B0 aW9ucy4gQWxzbywgYSBzeW1saW5rIGlzIGF1dG9tYXRpY2FsbHkKQEAgLTE2Miw3ICsxNjYs NyBAQCBzdWJtYWtlLXV0aWxzLWhlYWRlcnM6CiAKIC5QSE9OWTogZ2VuZXJhdGVkLWhlYWRl cnMKIAotZ2VuZXJhdGVkLWhlYWRlcnM6ICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9w YXJzZXIvZ3JhbS5oICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9j a25hbWVzLmggc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMgc3VibWFrZS11dGlscy1oZWFkZXJz CitnZW5lcmF0ZWQtaGVhZGVyczogJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3BhcnNl ci9ncmFtLmggJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbmFt ZXMuaCBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLW5vZGVzLWhlYWRlcnMgc3Vi bWFrZS11dGlscy1oZWFkZXJzCiAKICQodG9wX2J1aWxkZGlyKS9zcmMvaW5jbHVkZS9wYXJz ZXIvZ3JhbS5oOiBwYXJzZXIvZ3JhbS5oCiAJcHJlcmVxZGlyPWBjZCAnJChkaXIgJDwpJyA+ L2Rldi9udWxsICYmIHB3ZGAgJiYgXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv LmdpdGlnbm9yZSBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMmE3OWVlNmVkOAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvbm9k ZS1zdXBwb3J0LXN0YW1wCisvbm9kZXRhZ3MuaAorLypmdW5jcy5pbmM/LmMKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFr ZWZpbGUKaW5kZXggNWQyYjEyYTk5My4uNTZjZGRjMDZkYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvbm9kZXMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvTWFrZWZpbGUK QEAgLTMwLDMgKzMwLDQ5IEBAIE9CSlMgPSBcCiAJdmFsdWUubwogCiBpbmNsdWRlICQodG9w X3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCisKK25vZGVfaGVhZGVycyA9IFwKKwlu b2Rlcy9ub2Rlcy5oIFwKKwlub2Rlcy9leGVjbm9kZXMuaCBcCisJbm9kZXMvcGxhbm5vZGVz LmggXAorCW5vZGVzL3ByaW1ub2Rlcy5oIFwKKwlub2Rlcy9wYXRobm9kZXMuaCBcCisJbm9k ZXMvZXh0ZW5zaWJsZS5oIFwKKwlub2Rlcy9wYXJzZW5vZGVzLmggXAorCW5vZGVzL3JlcGxu b2Rlcy5oIFwKKwlub2Rlcy92YWx1ZS5oIFwKKwljb21tYW5kcy90cmlnZ2VyLmggXAorCWNv bW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBcCisJZm9yZWlnbi9mZHdhcGkuaCBcCisJYWNjZXNz L2FtYXBpLmggXAorCWFjY2Vzcy90YWJsZWFtLmggXAorCWFjY2Vzcy90c21hcGkuaCBcCisJ dXRpbHMvcmVsLmggXAorCW5vZGVzL3N1cHBvcnRub2Rlcy5oIFwKKwlleGVjdXRvci90dXB0 YWJsZS5oIFwKKwlub2Rlcy9sb2Nrb3B0aW9ucy5oIFwKKwlhY2Nlc3Mvc2Rpci5oCisKKyMg c2VlIGFsc28gY2F0YWxvZy9NYWtlZmlsZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlc2Ug bWFrZSBydWxlcworCithbGw6IGRpc3RwcmVwIGdlbmVyYXRlZC1oZWFkZXItc3ltbGlua3MK KworZGlzdHByZXA6IG5vZGUtc3VwcG9ydC1zdGFtcAorCisuUEhPTlk6IGdlbmVyYXRlZC1o ZWFkZXItc3ltbGlua3MKKworZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rczogJCh0b3BfYnVp bGRkaXIpL3NyYy9pbmNsdWRlL25vZGVzL2hlYWRlci1zdGFtcAorCitub2RlLXN1cHBvcnQt c3RhbXA6IGdlbl9ub2RlX3N1cHBvcnQucGwgJChhZGRwcmVmaXggJCh0b3Bfc3JjZGlyKS9z cmMvaW5jbHVkZS8sJChub2RlX2hlYWRlcnMpKQorCSQoUEVSTCkgJF4KKwl0b3VjaCAkQAor CiskKHRvcF9idWlsZGRpcikvc3JjL2luY2x1ZGUvbm9kZXMvaGVhZGVyLXN0YW1wOiBub2Rl LXN1cHBvcnQtc3RhbXAKKwlwcmVyZXFkaXI9YGNkICckKGRpciAkPCknID4vZGV2L251bGwg JiYgcHdkYCAmJiBcCisJY2QgJyQoZGlyICRAKScgJiYgZm9yIGZpbGUgaW4gbm9kZXRhZ3Mu aDsgZG8gXAorCSAgcm0gLWYgJCRmaWxlICYmICQoTE5fUykgIiQkcHJlcmVxZGlyLyQkZmls ZSIgLiA7IFwKKwlkb25lCisJdG91Y2ggJEAKKworbWFpbnRhaW5lci1jbGVhbjogY2xlYW4K KwlybSAtZiBub2RlLXN1cHBvcnQtc3RhbXAgKmZ1bmNzLmluYz8uYyBub2RldGFncy5oCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IGRmMGI3NDc4ODMuLjY5MzIxNzg2OTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL2NvcHlmdW5jcy5jCkBAIC0yMywxMSArMjMsNyBAQAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKLSNpbmNsdWRlICJub2Rlcy9leHRl bnNpYmxlLmgiCi0jaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCi0jaW5jbHVkZSAibm9k ZXMvcGxhbm5vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKLSNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKIAogCiAvKgpAQCAtNzMsNiArNjksOSBAQAogCShuZXdub2RlLT5mbGRu YW1lID0gZnJvbS0+ZmxkbmFtZSkKIAogCisjaW5jbHVkZSAiY29weWZ1bmNzLmluYzEuYyIK KworI2lmZGVmIE9CU09MRVRFCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJIHBsYW5ub2Rlcy5o IGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDU2LDYgKzE0NTUsNyBAQCBf Y29weVZhcihjb25zdCBWYXIgKmZyb20pCiAKIAlyZXR1cm4gbmV3bm9kZTsKIH0KKyNlbmRp ZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIF9jb3B5Q29uc3QKQEAgLTE0OTUsNiArMTQ5NSw3 IEBAIF9jb3B5Q29uc3QoY29uc3QgQ29uc3QgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIF9jb3B5UGFyYW0KICAqLwpAQCAtMjczMCw2 ICsyNzMxLDcgQEAgX2NvcHlQYXJhbVJlZihjb25zdCBQYXJhbVJlZiAqZnJvbSkKIAogCXJl dHVybiBuZXdub2RlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgQV9Db25z dCAqCiBfY29weUFfQ29uc3QoY29uc3QgQV9Db25zdCAqZnJvbSkKQEAgLTI3NjcsNiArMjc2 OSw3IEBAIF9jb3B5QV9Db25zdChjb25zdCBBX0NvbnN0ICpmcm9tKQogCXJldHVybiBuZXdu b2RlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBGdW5jQ2FsbCAqCiBfY29weUZ1 bmNDYWxsKGNvbnN0IEZ1bmNDYWxsICpmcm9tKQogewpAQCAtNDkwMiw2ICs0OTA1LDcgQEAg X2NvcHlEcm9wU3Vic2NyaXB0aW9uU3RtdChjb25zdCBEcm9wU3Vic2NyaXB0aW9uU3RtdCAq ZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKgkJCQkJZXh0ZW5zaWJsZS5oIGNvcHkgZnVuY3Rpb25zCkBAIC00 OTI0LDYgKzQ5MjgsNyBAQCBfY29weUV4dGVuc2libGVOb2RlKGNvbnN0IEV4dGVuc2libGVO b2RlICpmcm9tKQogCXJldHVybiBuZXdub2RlOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICAqCQkJCQl2YWx1ZS5oIGNvcHkgZnVuY3Rpb25zCiAgKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCkBAIC00OTg0LDYgKzQ5ODksNyBAQCBfY29weUZvcmVpZ25LZXlDYWNoZUluZm8oY29u c3QgRm9yZWlnbktleUNhY2hlSW5mbyAqZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQor I2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogY29weU9iamVjdEltcGwgLS0gaW1wbGVt ZW50YXRpb24gb2YgY29weU9iamVjdCgpOyBzZWUgbm9kZXMvbm9kZXMuaApAQCAtNTAwNCw2 ICs1MDEwLDggQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAogCXN3aXRj aCAobm9kZVRhZyhmcm9tKSkKIAl7CisjaW5jbHVkZSAiY29weWZ1bmNzLmluYzIuYyIKKyNp ZmRlZiBPQlNPTEVURQogCQkJLyoKIAkJCSAqIFBMQU4gTk9ERVMKIAkJCSAqLwpAQCAtNTM2 MSw2ICs1MzY5LDcgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAkJY2Fz ZSBUX0JpdFN0cmluZzoKIAkJCXJldHZhbCA9IF9jb3B5Qml0U3RyaW5nKGZyb20pOwogCQkJ YnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJCS8qCiAJCQkgKiBMSVNUIE5PREVT CkBAIC01Mzc4LDYgKzUzODcsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9t KQogCQkJcmV0dmFsID0gbGlzdF9jb3B5KGZyb20pOwogCQkJYnJlYWs7CiAKKyNpZmRlZiBP QlNPTEVURQogCQkJLyoKIAkJCSAqIEVYVEVOU0lCTEUgTk9ERVMKIAkJCSAqLwpAQCAtNTkx Nyw2ICs1OTI3LDcgQEAgY29weU9iamVjdEltcGwoY29uc3Qgdm9pZCAqZnJvbSkKIAkJY2Fz ZSBUX0ZvcmVpZ25LZXlDYWNoZUluZm86CiAJCQlyZXR2YWwgPSBfY29weUZvcmVpZ25LZXlD YWNoZUluZm8oZnJvbSk7CiAJCQlicmVhazsKKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogCQlk ZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwg KGludCkgbm9kZVRhZyhmcm9tKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9l cXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggY2I3 ZGRkNDYzYy4uYzYxZmQ2NjUwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1 YWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMTAs OSArMTAsNiBAQAogICogYmVjYXVzZSB0aGUgY2lyY3VsYXIgbGlua2FnZXMgYmV0d2VlbiBS ZWxPcHRJbmZvIGFuZCBQYXRoIG5vZGVzIGNhbid0CiAgKiBiZSBoYW5kbGVkIGVhc2lseSBp biBhIHNpbXBsZSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwuCiAgKgotICogQ3VycmVudGx5LCBp biBmYWN0LCBlcXVhbCgpIGRvZXNuJ3Qga25vdyBob3cgdG8gY29tcGFyZSBQbGFuIHRyZWVz Ci0gKiBlaXRoZXIuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgZml4ZWQgc29tZWRheS4KLSAq CiAgKiBOT1RFOiBpdCBpcyBpbnRlbnRpb25hbCB0aGF0IHBhcnNlIGxvY2F0aW9uIGZpZWxk cyAoaW4gbm9kZXMgdGhhdCBoYXZlCiAgKiBvbmUpIGFyZSBub3QgY29tcGFyZWQuICBUaGlz IGlzIGJlY2F1c2Ugd2Ugd2FudCwgZm9yIGV4YW1wbGUsIGEgdmFyaWFibGUKICAqICJ4IiB0 byBiZSBjb25zaWRlcmVkIGVxdWFsKCkgdG8gYW5vdGhlciByZWZlcmVuY2UgdG8gIngiIGlu IHRoZSBxdWVyeS4KQEAgLTMwLDggKzI3LDYgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5jbHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5o IgotI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVt LmgiCiAKIApAQCAtOTcsNiArOTIsOSBAQAogCSgodm9pZCkgMCkKIAogCisjaW5jbHVkZSAi ZXF1YWxmdW5jcy5pbmMxLmMiCisKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqCVN0dWZmIGZy b20gcHJpbW5vZGVzLmgKICAqLwpAQCAtMTg1LDYgKzE4Myw3IEBAIF9lcXVhbFZhcihjb25z dCBWYXIgKmEsIGNvbnN0IFZhciAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8q T0JTT0xFVEUqLwogCiBzdGF0aWMgYm9vbAogX2VxdWFsQ29uc3QoY29uc3QgQ29uc3QgKmEs IGNvbnN0IENvbnN0ICpiKQpAQCAtMjA3LDYgKzIwNiw3IEBAIF9lcXVhbENvbnN0KGNvbnN0 IENvbnN0ICphLCBjb25zdCBDb25zdCAqYikKIAkJCQkJCWEtPmNvbnN0Ynl2YWwsIGEtPmNv bnN0bGVuKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgYm9vbAogX2VxdWFsUGFy YW0oY29uc3QgUGFyYW0gKmEsIGNvbnN0IFBhcmFtICpiKQogewpAQCAtOTQ2LDYgKzk0Niw3 IEBAIF9lcXVhbFBsYWNlSG9sZGVySW5mbyhjb25zdCBQbGFjZUhvbGRlckluZm8gKmEsIGNv bnN0IFBsYWNlSG9sZGVySW5mbyAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8q T0JTT0xFVEUqLwogCiAvKgogICogU3R1ZmYgZnJvbSBleHRlbnNpYmxlLmgKQEAgLTk2Nyw2 ICs5NjgsNyBAQCBfZXF1YWxFeHRlbnNpYmxlTm9kZShjb25zdCBFeHRlbnNpYmxlTm9kZSAq YSwgY29uc3QgRXh0ZW5zaWJsZU5vZGUgKmIpCiAJcmV0dXJuIHRydWU7CiB9CiAKKyNpZmRl ZiBPQlNPTEVURQogLyoKICAqIFN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oCiAgKi8KQEAgLTI0 MzIsNiArMjQzNCw3IEBAIF9lcXVhbFBhcmFtUmVmKGNvbnN0IFBhcmFtUmVmICphLCBjb25z dCBQYXJhbVJlZiAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUq LwogCiBzdGF0aWMgYm9vbAogX2VxdWFsQV9Db25zdChjb25zdCBBX0NvbnN0ICphLCBjb25z dCBBX0NvbnN0ICpiKQpAQCAtMjQ0OSw2ICsyNDUyLDcgQEAgX2VxdWFsQV9Db25zdChjb25z dCBBX0NvbnN0ICphLCBjb25zdCBBX0NvbnN0ICpiKQogCXJldHVybiB0cnVlOwogfQogCisj aWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBib29sCiBfZXF1YWxGdW5jQ2FsbChjb25zdCBGdW5j Q2FsbCAqYSwgY29uc3QgRnVuY0NhbGwgKmIpCiB7CkBAIC0zMDU4LDYgKzMwNjIsNyBAQCBf ZXF1YWxQYXJ0aXRpb25DbWQoY29uc3QgUGFydGl0aW9uQ21kICphLCBjb25zdCBQYXJ0aXRp b25DbWQgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAog LyoKICAqIFN0dWZmIGZyb20gcGdfbGlzdC5oCkBAIC0zMTE4LDYgKzMxMjMsNyBAQCBfZXF1 YWxMaXN0KGNvbnN0IExpc3QgKmEsIGNvbnN0IExpc3QgKmIpCiAJcmV0dXJuIHRydWU7CiB9 CiAKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqIFN0dWZmIGZyb20gdmFsdWUuaAogICovCkBA IC0zMTUzLDYgKzMxNTksNyBAQCBfZXF1YWxCaXRTdHJpbmcoY29uc3QgQml0U3RyaW5nICph LCBjb25zdCBCaXRTdHJpbmcgKmIpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZiAvKk9C U09MRVRFKi8KIAogLyoKICAqIGVxdWFsCkBAIC0zMTgzLDYgKzMxOTAsOCBAQCBlcXVhbChj b25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCiAJc3dpdGNoIChub2RlVGFnKGEpKQog CXsKKyNpbmNsdWRlICJlcXVhbGZ1bmNzLmluYzIuYyIKKyNpZmRlZiBPQlNPTEVURQogCQkJ LyoKIAkJCSAqIFBSSU1JVElWRSBOT0RFUwogCQkJICovCkBAIC0zMzYxLDYgKzMzNzAsNyBA QCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRfUGxhY2VI b2xkZXJJbmZvOgogCQkJcmV0dmFsID0gX2VxdWFsUGxhY2VIb2xkZXJJbmZvKGEsIGIpOwog CQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJY2FzZSBUX0xpc3Q6CiAJCWNh c2UgVF9JbnRMaXN0OgpAQCAtMzM2OCw2ICszMzc4LDcgQEAgZXF1YWwoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYikKIAkJCXJldHZhbCA9IF9lcXVhbExpc3QoYSwgYik7CiAJCQli cmVhazsKIAorI2lmZGVmIE9CU09MRVRFCiAJCWNhc2UgVF9JbnRlZ2VyOgogCQkJcmV0dmFs ID0gX2VxdWFsSW50ZWdlcihhLCBiKTsKIAkJCWJyZWFrOwpAQCAtMzkxMyw2ICszOTI0LDcg QEAgZXF1YWwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAkJY2FzZSBUX1B1Ymxp Y2F0aW9uVGFibGU6CiAJCQlyZXR2YWwgPSBfZXF1YWxQdWJsaWNhdGlvblRhYmxlKGEsIGIp OwogCQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJZGVmYXVsdDoKIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0LnBsIGIvc3JjL2JhY2tlbmQvbm9k ZXMvZ2VuX25vZGVfc3VwcG9ydC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi43NTQ4ODM3N2E1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvbm9k ZXMvZ2VuX25vZGVfc3VwcG9ydC5wbApAQCAtMCwwICsxLDY2MCBAQAorIyEvdXNyL2Jpbi9w ZXJsCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBHZW5lcmF0ZSBub2RlIHN1cHBvcnQgZmls ZXM6CisjIC0gbm9kZXRhZ3MuaAorIyAtIGNvcHlmdW5jcworIyAtIGVxdWFsZnVuY3MKKyMg LSByZWFkZnVuY3MKKyMgLSBvdXRmdW5jcworIworIyBzcmMvYmFja2VuZC9ub2Rlcy9nZW5f bm9kZV9zdXBwb3J0LnBsCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzOworCit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3VzZSBGaW5kQmluOwor dXNlIGxpYiAiJEZpbmRCaW46OlJlYWxCaW4vLi4vY2F0YWxvZyI7CisKK3VzZSBDYXRhbG9n OyAgIyBmb3IgUmVuYW1lVGVtcEZpbGUKKworCitzdWIgZWxlbQoreworCW15ICR4ID0gc2hp ZnQ7CisJcmV0dXJuIGdyZXAgeyAkXyBlcSAkeCB9IEBfOworfQorCisKK215IEBub2RlX3R5 cGVzID0gcXcoTm9kZSk7CitteSAlbm9kZV90eXBlX2luZm87CisKK215IEBub19jb3B5Owor bXkgQG5vX3JlYWRfd3JpdGU7CisKK215IEBzY2FsYXJfdHlwZXMgPSBxdygKKwliaXRzMzIg Ym9vbCBjaGFyIGRvdWJsZSBpbnQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCBsb25nIHVpbnQ4 IHVpbnQxNiB1aW50MzIgdWludDY0CisJQWNsTW9kZSBBdHRyTnVtYmVyIENhcmRpbmFsaXR5 IENvc3QgSW5kZXggT2lkIFNlbGVjdGl2aXR5IFNpemUgU3RyYXRlZ3lOdW1iZXIgU3ViVHJh bnNhY3Rpb25JZCBUaW1lTGluZUlEIFhMb2dSZWNQdHIKKyk7CisKK215IEBlbnVtX3R5cGVz OworCisjIEZvciBhYnN0cmFjdCB0eXBlcyB3ZSB0cmFjayB0aGVpciBmaWVsZHMsIHNvIHRo YXQgc3VidHlwZXMgY2FuIHVzZQorIyB0aGVtLCBidXQgd2UgZG9uJ3QgZW1pdCBhIG5vZGUg dGFnLCBzbyB5b3UgY2FuJ3QgaW5zdGFudGlhdGUgdGhlbS4KK215IEBhYnN0cmFjdF90eXBl cyA9IHF3KAorCU5vZGUgRXhwcgorCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCBIZWFwVHVw bGVUYWJsZVNsb3QgTWluaW1hbFR1cGxlVGFibGVTbG90IFZpcnR1YWxUdXBsZVRhYmxlU2xv dAorCUpvaW5QYXRoCisJUGFydGl0aW9uUHJ1bmVTdGVwCispOworCisjIFNwZWNpYWwgY2Fz ZXMgdGhhdCBlaXRoZXIgZG9uJ3QgaGF2ZSB0aGVpciBvd24gc3RydWN0IG9yIHRoZSBzdHJ1 Y3QKKyMgaXMgbm90IGluIGEgaGVhZGVyIGZpbGUuICBXZSBqdXN0IGdlbmVyYXRlIG5vZGUg dGFncyBmb3IgdGhlbSwgYnV0CisjIHRoZXkgb3RoZXJ3aXNlIGRvbid0IHBhcnRpY2lwYXRl IGluIG5vZGUgc3VwcG9ydC4KK215IEBleHRyYV90YWdzID0gcXcoCisJSW50TGlzdCBPaWRM aXN0CisJQWxsb2NTZXRDb250ZXh0IEdlbmVyYXRpb25Db250ZXh0IFNsYWJDb250ZXh0CisJ VElEQml0bWFwCisJV2luZG93T2JqZWN0RGF0YQorKTsKKworIyBUaGlzIGlzIGEgcmVndWxh ciBub2RlLCBidXQgd2Ugc2tpcCBwYXJzaW5nIGl0IGZyb20gaXRzIGhlYWRlciBmaWxlCisj IHNpbmNlIHdlIHdvbid0IHVzZSBpdHMgaW50ZXJuYWwgc3RydWN0dXJlIGhlcmUgYW55d2F5 LgorcHVzaCBAbm9kZV90eXBlcywgcXcoTGlzdCk7CisKKyMgcGF0aG5vZGVzLmggZXhjZXB0 aW9ucworcHVzaCBAbm9fY29weSwgcXcoCisJUmVsT3B0SW5mbyBJbmRleE9wdEluZm8gUGF0 aCBQbGFubmVyR2xvYmFsIEVxdWl2YWxlbmNlQ2xhc3MgRXF1aXZhbGVuY2VNZW1iZXIgRm9y ZWlnbktleU9wdEluZm8KKwlHcm91cGluZ1NldERhdGEgSW5jcmVtZW50YWxTb3J0UGF0aCBJ bmRleENsYXVzZSBNaW5NYXhBZ2dJbmZvIFBhdGhUYXJnZXQgUGxhbm5lckluZm8gUGxhbm5l clBhcmFtSXRlbQorCVBhcmFtUGF0aEluZm8gUm9sbHVwRGF0YSBSb3dJZGVudGl0eVZhcklu Zm8gU3RhdGlzdGljRXh0SW5mbworKTsKK3B1c2ggQHNjYWxhcl90eXBlcywgcXcoRXF1aXZh bGVuY2VDbGFzcyogRXF1aXZhbGVuY2VNZW1iZXIqIFF1YWxDb3N0KTsKKworIyBYWFggdmFy aW91cyB0aGluZ3Mgd2UgYXJlIG5vdCBwdWJsaXNoaW5nIHJpZ2h0IG5vdyB0byBzdGF5IGxl dmVsCisjIHdpdGggdGhlIG1hbnVhbCBzeXN0ZW0KK3B1c2ggQG5vX2NvcHksIHF3KENhbGxD b250ZXh0IElubGluZUNvZGVCbG9jayk7CitwdXNoIEBub19yZWFkX3dyaXRlLCBxdyhBY2Nl c3NQcml2IEFsdGVyVGFibGVDbWQgQ2FsbENvbnRleHQgQ3JlYXRlT3BDbGFzc0l0ZW0gRnVu Y3Rpb25QYXJhbWV0ZXIgSW5mZXJDbGF1c2UgSW5saW5lQ29kZUJsb2NrIE9iamVjdFdpdGhB cmdzIE9uQ29uZmxpY3RDbGF1c2UgUGFydGl0aW9uQ21kIFJvbGVTcGVjIFZhY3V1bVJlbGF0 aW9uKTsKKworCisjIyByZWFkIGlucHV0CisKK2ZvcmVhY2ggbXkgJGluZmlsZSAoQEFSR1Yp Cit7CisJbXkgJGluX3N0cnVjdDsKKwlteSAkc3VibGluZTsKKwlteSAkaXNfbm9kZV9zdHJ1 Y3Q7CisJbXkgJHN1cGVydHlwZTsKKwlteSAkc3VwZXJ0eXBlX2ZpZWxkOworCisJbXkgQG15 X2ZpZWxkczsKKwlteSAlbXlfZmllbGRfdHlwZXM7CisJbXkgJW15X2ZpZWxkX2F0dHJzOwor CisJb3BlbiBteSAkaWZoLCAnPCcsICRpbmZpbGUgb3IgZGllICJjb3VsZCBub3Qgb3BlbiBc IiRpbmZpbGVcIjogJCEiOworCisJbXkgJGZpbGVfY29udGVudCA9IGRvIHsgbG9jYWwgJC87 IDwkaWZoPiB9OworCisJIyBzdHJpcCBDIGNvbW1lbnRzCisJJGZpbGVfY29udGVudCA9fiBz ey9cKi4qP1wqL317fWdzOworCisJZm9yZWFjaCBteSAkbGluZSAoc3BsaXQgL1xuLywgJGZp bGVfY29udGVudCkKKwl7CisJCWNob21wICRsaW5lOworCQkkbGluZSA9fiBzL1xzKiQvLzsK KwkJbmV4dCBpZiAkbGluZSBlcSAnJzsKKwkJbmV4dCBpZiAkbGluZSA9fiAvXiMoZGVmaW5l fGlmZGVmfGVuZGlmKS87CisKKwkJaWYgKCRpbl9zdHJ1Y3QpCisJCXsKKwkJCSRzdWJsaW5l Kys7CisKKwkJCSMgZmlyc3QgbGluZSBzaG91bGQgaGF2ZSBvcGVuaW5nIGJyYWNlCisJCQlp ZiAoJHN1YmxpbmUgPT0gMSkKKwkJCXsKKwkJCQkkaXNfbm9kZV9zdHJ1Y3QgPSAwOworCQkJ CSRzdXBlcnR5cGUgPSB1bmRlZjsKKwkJCQluZXh0IGlmICRsaW5lIGVxICd7JzsKKwkJCQlk aWU7CisJCQl9CisJCQkjIHNlY29uZCBsaW5lIHNob3VsZCBoYXZlIG5vZGUgdGFnIG9yIHN1 cGVydHlwZQorCQkJZWxzaWYgKCRzdWJsaW5lID09IDIpCisJCQl7CisJCQkJaWYgKCRsaW5l ID1+IC9eXHMqTm9kZVRhZ1xzK3R5cGU7LykKKwkJCQl7CisJCQkJCSRpc19ub2RlX3N0cnVj dCA9IDE7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCWVsc2lmICgkbGluZSA9fiAvXHMqKFx3 KylccysoXHcrKTsvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCQl7CisJCQkJCSRp c19ub2RlX3N0cnVjdCA9IDE7CisJCQkJCSRzdXBlcnR5cGUgPSAkMTsKKwkJCQkJJHN1cGVy dHlwZV9maWVsZCA9ICQyOworCQkJCQluZXh0OworCQkJCX0KKwkJCX0KKworCQkJIyBlbmQg b2Ygc3RydWN0CisJCQlpZiAoJGxpbmUgPX4gL15cfVxzKiRpbl9zdHJ1Y3Q7JC8gfHwgJGxp bmUgPX4gL15cfTskLykKKwkJCXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJCXsK KwkJCQkJcHVzaCBAbm9kZV90eXBlcywgJGluX3N0cnVjdDsKKwkJCQkJbXkgQGYgPSBAbXlf ZmllbGRzOworCQkJCQlteSAlZnQgPSAlbXlfZmllbGRfdHlwZXM7CisJCQkJCW15ICVmYSA9 ICVteV9maWVsZF9hdHRyczsKKwkJCQkJaWYgKCRzdXBlcnR5cGUpCisJCQkJCXsKKwkJCQkJ CW15IEBzdXBlcmZpZWxkczsKKwkJCQkJCWZvcmVhY2ggbXkgJHNmIChAeyRub2RlX3R5cGVf aW5mb3skc3VwZXJ0eXBlfS0+e2ZpZWxkc319KQorCQkJCQkJeworCQkJCQkJCW15ICRmbiA9 ICIke3N1cGVydHlwZV9maWVsZH0uJHNmIjsKKwkJCQkJCQlwdXNoIEBzdXBlcmZpZWxkcywg JGZuOworCQkJCQkJCSRmdHskZm59ID0gJG5vZGVfdHlwZV9pbmZveyRzdXBlcnR5cGV9LT57 ZmllbGRfdHlwZXN9eyRzZn07CisJCQkJCQkJJGZheyRmbn0gPSAkbm9kZV90eXBlX2luZm97 JHN1cGVydHlwZX0tPntmaWVsZF9hdHRyc317JHNmfTsKKwkJCQkJCQkkZmF7JGZufSA9fiBz L2FycmF5X3NpemVcKChcdyspXCkvYXJyYXlfc2l6ZSgke3N1cGVydHlwZV9maWVsZH0uJDEp LyBpZiAkZmF7JGZufTsKKwkJCQkJCX0KKwkJCQkJCXVuc2hpZnQgQGYsIEBzdXBlcmZpZWxk czsKKwkJCQkJfQorCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZHN9 ID0gXEBmOworCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZF90eXBl c30gPSBcJWZ0OworCQkJCQkkbm9kZV90eXBlX2luZm97JGluX3N0cnVjdH0tPntmaWVsZF9h dHRyc30gPSBcJWZhOworCisJCQkJCWlmIChlbGVtIGJhc2VuYW1lKCRpbmZpbGUpLAorCQkJ CQkJcXcoZXhlY25vZGVzLmggdHJpZ2dlci5oIGV2ZW50X3RyaWdnZXIuaCBhbWFwaS5oIHRh YmxlYW0uaAorCQkJCQkJCXRzbWFwaS5oIGZkd2FwaS5oIHR1cHRhYmxlLmggcmVwbG5vZGVz Lmggc3VwcG9ydG5vZGVzLmgpKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19jb3B5LCAkaW5f c3RydWN0OworCQkJCQkJcHVzaCBAbm9fcmVhZF93cml0ZSwgJGluX3N0cnVjdDsKKwkJCQkJ fQorCisJCQkJCWlmICgkc3VwZXJ0eXBlICYmICgkc3VwZXJ0eXBlIGVxICdQYXRoJyB8fCAk c3VwZXJ0eXBlIGVxICdKb2luUGF0aCcpKQorCQkJCQl7CisJCQkJCQlwdXNoIEBub19jb3B5 LCAkaW5fc3RydWN0OworCQkJCQl9CisJCQkJfQorCisJCQkJIyBzdGFydCBuZXcgY3ljbGUK KwkJCQkkaW5fc3RydWN0ID0gdW5kZWY7CisJCQkJQG15X2ZpZWxkcyA9ICgpOworCQkJCSVt eV9maWVsZF90eXBlcyA9ICgpOworCQkJCSVteV9maWVsZF9hdHRycyA9ICgpOworCQkJfQor CQkJIyBub3JtYWwgc3RydWN0IGZpZWxkCisJCQllbHNpZiAoJGxpbmUgPX4gL15ccyooLisp XHMqXGIoXHcrKShcW1x3K1xdKT9ccyooPzpwZ19ub2RlX2F0dHJcKChbXHcoKSBdKilcKSk/ Oy8pCisJCQl7CisJCQkJaWYgKCRpc19ub2RlX3N0cnVjdCkKKwkJCQl7CisJCQkJCW15ICR0 eXBlID0gJDE7CisJCQkJCW15ICRuYW1lID0gJDI7CisJCQkJCW15ICRhcnJheV9zaXplID0g JDM7CisJCQkJCW15ICRhdHRyID0gJDQ7CisKKwkJCQkJJHR5cGUgPX4gcy9eY29uc3Rccyov LzsKKwkJCQkJJHR5cGUgPX4gcy9ccyokLy87CisJCQkJCSR0eXBlID1+IHMvXHMrXCokLyov OworCQkJCQlkaWUgaWYgJHR5cGUgZXEgJyc7CisJCQkJCSR0eXBlID0gJHR5cGUgLiAkYXJy YXlfc2l6ZSBpZiAkYXJyYXlfc2l6ZTsKKwkJCQkJcHVzaCBAbXlfZmllbGRzLCAkbmFtZTsK KwkJCQkJJG15X2ZpZWxkX3R5cGVzeyRuYW1lfSA9ICR0eXBlOworCQkJCQkkbXlfZmllbGRf YXR0cnN7JG5hbWV9ID0gJGF0dHI7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWlmICgkaXNfbm9kZV9zdHJ1Y3QpCisJCQkJeworCQkJCQkjd2FybiAiJGluZmlsZTokLjog Y291bGQgbm90IHBhcnNlIFwiJGxpbmVcIlxuIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJIyBu b3QgaW4gYSBzdHJ1Y3QKKwkJZWxzZQorCQl7CisJCQkjIHN0YXJ0IG9mIGEgc3RydWN0Pwor CQkJaWYgKCRsaW5lID1+IC9eKD86dHlwZWRlZiApP3N0cnVjdCAoXHcrKShccypcL1wqLiop PyQvICYmICQxIG5lICdOb2RlJykKKwkJCXsKKwkJCQkkaW5fc3RydWN0ID0gJDE7CisJCQkJ JHN1YmxpbmUgPSAwOworCQkJfQorCQkJIyBvbmUgbm9kZSB0eXBlIHR5cGVkZWYnZWQgZGly ZWN0bHkgZnJvbSBhbm90aGVyCisJCQllbHNpZiAoJGxpbmUgPX4gL150eXBlZGVmIChcdysp IChcdyspOyQvIGFuZCBlbGVtICQxLCBAbm9kZV90eXBlcykKKwkJCXsKKwkJCQlteSAkYWxp YXNfb2YgPSAkMTsKKwkJCQlteSAkbiA9ICQyOworCisJCQkJcHVzaCBAbm9kZV90eXBlcywg JG47CisJCQkJbXkgQGYgPSBAeyRub2RlX3R5cGVfaW5mb3skYWxpYXNfb2Z9LT57ZmllbGRz fX07CisJCQkJbXkgJWZ0ID0gJXskbm9kZV90eXBlX2luZm97JGFsaWFzX29mfS0+e2ZpZWxk X3R5cGVzfX07CisJCQkJbXkgJWZhID0gJXskbm9kZV90eXBlX2luZm97JGFsaWFzX29mfS0+ e2ZpZWxkX2F0dHJzfX07CisJCQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkc30gPSBc QGY7CisJCQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfSA9IFwlZnQ7CisJ CQkJJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX2F0dHJzfSA9IFwlZmE7CisJCQl9CisJ CQkjIGNvbGxlY3QgZW51bSBuYW1lcworCQkJZWxzaWYgKCRsaW5lID1+IC9edHlwZWRlZiBl bnVtIChcdyspKFxzKlwvXCouKik/JC8pCisJCQl7CisJCQkJcHVzaCBAZW51bV90eXBlcywg JDE7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoJGluX3N0cnVjdCkKKwl7CisJCWRpZSAicnVu YXdheSBcIiRpbl9zdHJ1Y3RcIiBpbiBmaWxlIFwiJGluZmlsZVwiXG4iOworCX0KKworCWNs b3NlICRpZmg7Cit9ICMgZm9yIGVhY2ggZmlsZQorCisKKyMjIHdyaXRlIG91dHB1dAorCitt eSAkdG1wZXh0ICA9ICIudG1wJCQiOworCisjIG5vZGV0YWdzLmgKKworb3BlbiBteSAkbnQs ICc+JywgJ25vZGV0YWdzLmgnIC4gJHRtcGV4dCBvciBkaWUgJCE7CisKK215ICRpID0gMTsK K2ZvcmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzLEBleHRyYV90YWdzKQoreworCW5leHQgaWYg ZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCXByaW50ICRudCAiXHRUXyR7bn0gPSAkaSxc biI7CisJJGkrKzsKK30KKworY2xvc2UgJG50OworCisKKyMgI2luY2x1ZGUgbGluZXMgbmVj ZXNzYXJ5IHRvIHB1bGwgaW4gYWxsIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMKK215ICRub2Rl X2luY2x1ZGVzID0gJyc7Citmb3JlYWNoIG15ICRpbmZpbGUgKHNvcnQgQEFSR1YpCit7CisJ JGluZmlsZSA9fiBzIS4qc3JjL2luY2x1ZGUvISE7CisJJG5vZGVfaW5jbHVkZXMgLj0gcXF7 I2luY2x1ZGUgIiRpbmZpbGUiXG59OworfQorCisKKyMgY29weWZ1bmNzLmMsIGVxdWFsZnVu Y3MuYworCitvcGVuIG15ICRjZiwgJz4nLCAnY29weWZ1bmNzLmluYzEuYycgLiAkdG1wZXh0 IG9yIGRpZSAkITsKK29wZW4gbXkgJGVmLCAnPicsICdlcXVhbGZ1bmNzLmluYzEuYycgLiAk dG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJGNmMiwgJz4nLCAnY29weWZ1bmNzLmluYzIu YycgLiAkdG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJGVmMiwgJz4nLCAnZXF1YWxmdW5j cy5pbmMyLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7CisKK3ByaW50ICRjZiAkbm9kZV9pbmNs dWRlczsKK3ByaW50ICRlZiAkbm9kZV9pbmNsdWRlczsKKworbXkgQGN1c3RvbV9jb3B5ID0g cXcoQV9Db25zdCBDb25zdCBFeHRlbnNpYmxlTm9kZSk7CisKK2ZvcmVhY2ggbXkgJG4gKEBu b2RlX3R5cGVzKQoreworCW5leHQgaWYgZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCW5l eHQgaWYgZWxlbSAkbiwgQG5vX2NvcHk7CisJbmV4dCBpZiAkbiBlcSAnTGlzdCc7CisKKwlw cmludCAkY2YyICIKK1x0XHRjYXNlIFRfJHtufToKK1x0XHRcdHJldHZhbCA9IF9jb3B5JHtu fShmcm9tKTsKK1x0XHRcdGJyZWFrOyI7CisKKwlwcmludCAkZWYyICIKK1x0XHRjYXNlIFRf JHtufToKK1x0XHRcdHJldHZhbCA9IF9lcXVhbCR7bn0oYSwgYik7CitcdFx0XHRicmVhazsi OworCisJbmV4dCBpZiBlbGVtICRuLCBAY3VzdG9tX2NvcHk7CisKKwlwcmludCAkY2YgIgor c3RhdGljICRuICoKK19jb3B5JHtufShjb25zdCAkbiAqZnJvbSkKK3sKK1x0JHtufSAqbmV3 bm9kZSA9IG1ha2VOb2RlKCRuKTsKKworIjsKKworCXByaW50ICRlZiAiCitzdGF0aWMgYm9v bAorX2VxdWFsJHtufShjb25zdCAkbiAqYSwgY29uc3QgJG4gKmIpCit7CisiOworCisJZm9y ZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRzfX0pCisJeworCQlt eSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBlc317JGZ9OworCQlteSAk YSA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9hdHRyc317JGZ9IHx8ICcnOworCQlt eSAkY29weV9pZ25vcmUgPSAoJGEgPX4gL1xiY29weV9pZ25vcmVcYi8pOworCQlteSAkZXF1 YWxfaWdub3JlID0gKCRhID1+IC9cYmVxdWFsX2lnbm9yZVxiLyk7CisJCWlmICgkdCBlcSAn Y2hhcionKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9TVFJJTkdfRklFTEQoJGYpO1xu IiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENPTVBBUkVfU1RSSU5H X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0KKwkJZWxzaWYgKCR0 IGVxICdCaXRtYXBzZXQqJyB8fCAkdCBlcSAnUmVsaWRzJykKKwkJeworCQkJcHJpbnQgJGNm ICJcdENPUFlfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsK KwkJCXByaW50ICRlZiAiXHRDT01QQVJFX0JJVE1BUFNFVF9GSUVMRCgkZik7XG4iIHVubGVz cyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lmICgkdCBlcSAnaW50JyAmJiAkZiA9fiAn bG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQgJGNmICJcdENPUFlfTE9DQVRJT05fRklFTEQo JGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENPTVBBUkVf TE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJfQorCQll bHNpZiAoZWxlbSAkdCwgQHNjYWxhcl90eXBlcyBvciBlbGVtICR0LCBAZW51bV90eXBlcykK KwkJeworCQkJcHJpbnQgJGNmICJcdENPUFlfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNz ICRjb3B5X2lnbm9yZTsKKwkJCWlmICgkYSA9fiAvXGJlcXVhbF9pZ25vcmVfaWZfemVyb1xi LykKKwkJCXsKKwkJCQlwcmludCAkZWYgIlx0aWYgKGEtPiRmICE9IGItPiRmICYmIGEtPiRm ICE9IDAgJiYgYi0+JGYgIT0gMClcblx0XHRyZXR1cm4gZmFsc2U7XG4iOworCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCXByaW50ICRlZiAiXHRDT01QQVJFX1NDQUxBUl9GSUVMRCgkZik7 XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlIHx8ICR0IGVxICdDb2VyY2lvbkZvcm0nOworCQkJ fQorCQl9CisJCWVsc2lmICgkdCA9fiAvKFx3KylcKi8gYW5kIGVsZW0gJDEsIEBzY2FsYXJf dHlwZXMpCisJCXsKKwkJCW15ICR0dCA9ICQxOworCQkJbXkgJGFycmF5X3NpemVfZmllbGQ7 CisJCQlpZiAoJGEgPX4gL1xiYXJyYXlfc2l6ZS4oW1x3Ll0rKS8pCisJCQl7CisJCQkJJGFy cmF5X3NpemVfZmllbGQgPSAkMTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlkaWUgIm5v IGFycmF5IHNpemUgZGVmaW5lZCBmb3IgJG4uJGYgb2YgdHlwZSAkdCI7CisJCQl9CisJCQlp ZiAoJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfXskYXJyYXlfc2l6ZV9maWVs ZH0gZXEgJ0xpc3QqJykKKwkJCXsKKwkJCQlwcmludCAkY2YgIlx0Q09QWV9QT0lOVEVSX0ZJ RUxEKCRmLCBsaXN0X2xlbmd0aChmcm9tLT4kYXJyYXlfc2l6ZV9maWVsZCkgKiBzaXplb2Yo JHR0KSk7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQkJcHJpbnQgJGVmICJcdENPTVBB UkVfUE9JTlRFUl9GSUVMRCgkZiwgbGlzdF9sZW5ndGgoYS0+JGFycmF5X3NpemVfZmllbGQp ICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9yZTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlwcmludCAkY2YgIlx0Q09QWV9QT0lOVEVSX0ZJRUxEKCRmLCBmcm9t LT4kYXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRjb3B5X2ln bm9yZTsKKwkJCQlwcmludCAkZWYgIlx0Q09NUEFSRV9QT0lOVEVSX0ZJRUxEKCRmLCBhLT4k YXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25v cmU7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwg QG5vZGVfdHlwZXMpCisJCXsKKwkJCXByaW50ICRjZiAiXHRDT1BZX05PREVfRklFTEQoJGYp O1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENPTVBBUkVfTk9E RV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lmICgk dCA9fiAvXHcrXFsvKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9BUlJBWV9GSUVMRCgk Zik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAkZWYgIlx0Q09NUEFSRV9B UlJBWV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lm ICgkdCBlcSAnc3RydWN0IEN1c3RvbVBhdGhNZXRob2RzKicgfHwJJHQgZXEgJ3N0cnVjdCBD dXN0b21TY2FuTWV0aG9kcyonKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9TQ0FMQVJf RklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJcdENP TVBBUkVfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJCX0K KwkJZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBoYW5kbGUgdHlwZSBcIiR0XCIgaW4g c3RydWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9CisJfQorCisJcHJpbnQgJGNmICIK K1x0cmV0dXJuIG5ld25vZGU7Cit9CisiOworCXByaW50ICRlZiAiCitcdHJldHVybiB0cnVl OworfQorIjsKK30KKworY2xvc2UgJGNmOworY2xvc2UgJGVmOworY2xvc2UgJGNmMjsKK2Ns b3NlICRlZjI7CisKKworIyBvdXRmdW5jcy5jLCByZWFkZnVuY3MuYworCitvcGVuIG15ICRv ZiwgJz4nLCAnb3V0ZnVuY3MuaW5jMS5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBt eSAkcmYsICc+JywgJ3JlYWRmdW5jcy5pbmMxLmMnIC4gJHRtcGV4dCBvciBkaWUgJCE7Citv cGVuIG15ICRvZjIsICc+JywgJ291dGZ1bmNzLmluYzIuYycgLiAkdG1wZXh0IG9yIGRpZSAk ITsKK29wZW4gbXkgJHJmMiwgJz4nLCAncmVhZGZ1bmNzLmluYzIuYycgLiAkdG1wZXh0IG9y IGRpZSAkITsKKworcHJpbnQgJG9mICRub2RlX2luY2x1ZGVzOworcHJpbnQgJHJmICRub2Rl X2luY2x1ZGVzOworCitteSBAY3VzdG9tX3JlYWR3cml0ZSA9IHF3KEFfQ29uc3QgQV9FeHBy IEJvb2xFeHByIENvbnN0IENvbnN0cmFpbnQgRXh0ZW5zaWJsZU5vZGUgUXVlcnkgUmFuZ2VU YmxFbnRyeSk7CisKK2ZvcmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzKQoreworCW5leHQgaWYg ZWxlbSAkbiwgQGFic3RyYWN0X3R5cGVzOworCW5leHQgaWYgZWxlbSAkbiwgQG5vX3JlYWRf d3JpdGU7CisJbmV4dCBpZiAkbiBlcSAnTGlzdCc7CisJbmV4dCBpZiBlbGVtICRuLCBxdyhC aXRTdHJpbmcgRmxvYXQgSW50ZWdlciBTdHJpbmcpOworCisJIyBYWFggRm9yIG5vdywgc2tp cCBhbGwgIlN0bXQicyBleGNlcHQgdGhhdCBvbmVzIHRoYXQgd2VyZSB0aGVyZSBiZWZvcmUu CisJaWYgKCRuID1+IC9TdG10JC8pCisJeworCQlteSBAa2VlcCA9IHF3KEFsdGVyU3RhdHNT dG10IENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgQ3JlYXRlU3RhdHNTdG10IENyZWF0ZVN0bXQg RGVjbGFyZUN1cnNvclN0bXQgSW1wb3J0Rm9yZWlnblNjaGVtYVN0bXQgSW5kZXhTdG10IE5v dGlmeVN0bXQgUGxhbm5lZFN0bXQgUExBc3NpZ25TdG10IFJhd1N0bXQgUmV0dXJuU3RtdCBT ZWxlY3RTdG10IFNldE9wZXJhdGlvblN0bXQpOworCQluZXh0IHVubGVzcyBlbGVtICRuLCBA a2VlcDsKKwl9CisKKwkjIFhYWCBBbHNvIHNraXAgcmVhZCBzdXBwb3J0IGZvciB0aG9zZSB0 aGF0IGRpZG4ndCBoYXZlIGl0IGJlZm9yZS4KKwlteSAkbm9fcmVhZCA9ICgkbiBlcSAnQV9T dGFyJyB8fCAkbiBlcSAnQV9Db25zdCcgfHwgJG4gZXEgJ0FfRXhwcicgfHwgJG4gZXEgJ0Nv bnN0cmFpbnQnIHx8ICRuID1+IC9QYXRoJC8gfHwgJG4gZXEgJ0ZvcmVpZ25LZXlDYWNoZUlu Zm8nIHx8ICRuIGVxICdGb3JlaWduS2V5T3B0SW5mbycgfHwgJG4gZXEgJ1BhdGhUYXJnZXQn KTsKKworCW15ICROID0gdWMgJG47CisJJE4gPX4gcy9fLy9nOworCisJcHJpbnQgJG9mMiAi XHRcdFx0Y2FzZSBUXyR7bn06XG4iLgorCSAgIlx0XHRcdFx0X291dCR7bn0oc3RyLCBvYmop O1xuIi4KKwkgICJcdFx0XHRcdGJyZWFrO1xuIjsKKworCXByaW50ICRyZjIgIlx0ZWxzZSBp ZiAoTUFUQ0goXCIkTlwiLCAiIC4gbGVuZ3RoKCROKSAuICIpKVxuIi4KKwkgICJcdFx0cmV0 dXJuX3ZhbHVlID0gX3JlYWQke259KCk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKworCW5leHQg aWYgZWxlbSAkbiwgQGN1c3RvbV9yZWFkd3JpdGU7CisKKwlwcmludCAkb2YgIgorc3RhdGlj IHZvaWQKK19vdXQke259KFN0cmluZ0luZm8gc3RyLCBjb25zdCAkbiAqbm9kZSkKK3sKK1x0 V1JJVEVfTk9ERV9UWVBFKFwiJE5cIik7CisKKyI7CisKKwlwcmludCAkcmYgIgorc3RhdGlj ICRuICoKK19yZWFkJHtufSh2b2lkKQoreworXHRSRUFEX0xPQ0FMUygkbik7CisKKyIgdW5s ZXNzICRub19yZWFkOworCisJZm9yZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59 LT57ZmllbGRzfX0pCisJeworCQlteSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVs ZF90eXBlc317JGZ9OworCQlteSAkYSA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9h dHRyc317JGZ9IHx8ICcnOworCQlteSAkcmVhZHdyaXRlX2lnbm9yZSA9ICgkYSA9fiAvXGJy ZWFkd3JpdGVfaWdub3JlXGIvKTsKKwkJbmV4dCBpZiAkcmVhZHdyaXRlX2lnbm9yZTsKKwor CQkjIFhYWCBQcmV2aW91c2x5LCBmb3Igc3VidHlwaW5nLCBvbmx5IHRoZSBsZWFmIGZpZWxk IG5hbWUgaXMKKwkJIyB1c2VkLiBQb25kZXIgd2hldGhlciB3ZSB3YW50IHRvIGtlZXAgaXQg dGhhdCB3YXkuCisKKwkJaWYgKCR0IGVxICdib29sJykKKwkJeworCQkJcHJpbnQgJG9mICJc dFdSSVRFX0JPT0xfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0JPT0xf RklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdp bnQnICYmICRmID1+ICdsb2NhdGlvbiQnKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVf TE9DQVRJT05fRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0xPQ0FUSU9O X0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAn aW50JyB8fCAkdCBlcSAnaW50MzInIHx8ICR0IGVxICdBdHRyTnVtYmVyJyB8fCAkdCBlcSAn U3RyYXRlZ3lOdW1iZXInKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfSU5UX0ZJRUxE KCRmKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9JTlRfRklFTEQoJGYpO1xuIiB1bmxl c3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICd1aW50MzInIHx8ICR0IGVxICdi aXRzMzInIHx8ICR0IGVxICdBY2xNb2RlJyB8fCAkdCBlcSAnQmxvY2tOdW1iZXInIHx8ICR0 IGVxICdJbmRleCcgfHwgJHQgZXEgJ1N1YlRyYW5zYWN0aW9uSWQnKQorCQl7CisJCQlwcmlu dCAkb2YgIlx0V1JJVEVfVUlOVF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJF QURfVUlOVF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAo JHQgZXEgJ3VpbnQ2NCcpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9VSU5UNjRfRklF TEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX1VJTlQ2NF9GSUVMRCgkZik7XG4i IHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ09pZCcpCisJCXsKKwkJ CXByaW50ICRvZiAiXHRXUklURV9PSURfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAi XHRSRUFEX09JRF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNp ZiAoJHQgZXEgJ2xvbmcnKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfTE9OR19GSUVM RCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfTE9OR19GSUVMRCgkZik7XG4iIHVu bGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ2NoYXInKQorCQl7CisJCQlw cmludCAkb2YgIlx0V1JJVEVfQ0hBUl9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJc dFJFQURfQ0hBUl9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNp ZiAoJHQgZXEgJ2RvdWJsZScpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9GTE9BVF9G SUVMRCgkZiwgXCIlLjZmXCIpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0ZMT0FUX0ZJ RUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAnQ2Fy ZGluYWxpdHknKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYs IFwiJS4wZlwiKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9GTE9BVF9GSUVMRCgkZik7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ0Nvc3QnKQorCQl7 CisJCQlwcmludCAkb2YgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYsIFwiJS4yZlwiKTtcbiI7 CisJCQlwcmludCAkcmYgIlx0UkVBRF9GTE9BVF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9f cmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ1F1YWxDb3N0JykKKwkJeworCQkJcHJpbnQg JG9mICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLnN0YXJ0dXAsIFwiJS4yZlwiKTtcbiI7CisJ CQlwcmludCAkb2YgIlx0V1JJVEVfRkxPQVRfRklFTEQoJGYucGVyX3R1cGxlLCBcIiUuMmZc Iik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfRkxPQVRfRklFTEQoJGYuc3RhcnR1cCk7 XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0ZMT0FUX0ZJRUxE KCRmLnBlcl90dXBsZSk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQg ZXEgJ1NlbGVjdGl2aXR5JykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0ZMT0FUX0ZJ RUxEKCRmLCBcIiUuNGZcIik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfRkxPQVRfRklF TEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdjaGFy KicpCisJCXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9TVFJJTkdfRklFTEQoJGYpO1xuIjsK KwkJCXByaW50ICRyZiAiXHRSRUFEX1NUUklOR19GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9f cmVhZDsKKwkJfQorCQllbHNpZiAoJHQgZXEgJ0JpdG1hcHNldConIHx8ICR0IGVxICdSZWxp ZHMnKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfQklUTUFQU0VUX0ZJRUxEKCRmKTtc biI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9CSVRNQVBTRVRfRklFTEQoJGYpO1xuIiB1bmxl c3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKGVsZW0gJHQsIEBlbnVtX3R5cGVzKQorCQl7 CisJCQlwcmludCAkb2YgIlx0V1JJVEVfRU5VTV9GSUVMRCgkZiwgJHQpO1xuIjsKKwkJCXBy aW50ICRyZiAiXHRSRUFEX0VOVU1fRklFTEQoJGYsICR0KTtcbiIgdW5sZXNzICRub19yZWFk OworCQl9CisJCWVsc2lmICgkdCA9fiAvKFx3KykoXCp8XFspLyBhbmQgZWxlbSAkMSwgQHNj YWxhcl90eXBlcykKKwkJeworCQkJbXkgJHR0ID0gdWMgJDE7CisJCQlteSAkYXJyYXlfc2l6 ZV9maWVsZDsKKwkJCWlmICgkYSA9fiAvXGJhcnJheV9zaXplLihbXHcuXSspLykKKwkJCXsK KwkJCQkkYXJyYXlfc2l6ZV9maWVsZCA9ICQxOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CWRpZSAibm8gYXJyYXkgc2l6ZSBkZWZpbmVkIGZvciAkbi4kZiBvZiB0eXBlICR0IjsKKwkJ CX0KKwkJCWlmICgkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfdHlwZXN9eyRhcnJheV9z aXplX2ZpZWxkfSBlcSAnTGlzdConKQorCQkJeworCQkJCXByaW50ICRvZiAiXHRXUklURV8k e3R0fV9BUlJBWSgkZiwgbGlzdF9sZW5ndGgobm9kZS0+JGFycmF5X3NpemVfZmllbGQpKTtc biI7CisJCQkJcHJpbnQgJHJmICJcdFJFQURfJHt0dH1fQVJSQVkoJGYsIGxpc3RfbGVuZ3Ro KGxvY2FsX25vZGUtPiRhcnJheV9zaXplX2ZpZWxkKSk7XG4iIHVubGVzcyAkbm9fcmVhZDsK KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludCAkb2YgIlx0V1JJVEVfJHt0dH1fQVJS QVkoJGYsIG5vZGUtPiRhcnJheV9zaXplX2ZpZWxkKTtcbiI7CisJCQkJcHJpbnQgJHJmICJc dFJFQURfJHt0dH1fQVJSQVkoJGYsIGxvY2FsX25vZGUtPiRhcnJheV9zaXplX2ZpZWxkKTtc biIgdW5sZXNzICRub19yZWFkOworCQkJfQorCQl9CisJCWVsc2lmICgkdCBlcSAnUmVsT3B0 SW5mbyonICYmICRhIGVxICdwYXRoX2hhY2sxJykKKwkJeworCQkJcHJpbnQgJG9mICJcdGFw cGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBcIiA6cGFyZW50X3JlbGlkcyBcIik7XG4iLgor CQkJICAiXHRvdXRCaXRtYXBzZXQoc3RyLCBub2RlLT4kZi0+cmVsaWRzKTtcbiI7CisJCX0K KwkJZWxzaWYgKCR0IGVxICdQYXRoVGFyZ2V0KicgJiYgJGEgZXEgJ3BhdGhfaGFjazInKQor CQl7CisJCQkobXkgJGYyID0gJGYpID1+IHMvcGF0aHRhcmdldC9wYXJlbnQvOworCQkJcHJp bnQgJG9mICJcdGlmIChub2RlLT4kZiAhPSBub2RlLT4kZjItPnJlbHRhcmdldClcbiIuCisJ CQkgICJcdFx0V1JJVEVfTk9ERV9GSUVMRCgkZik7XG4iOworCQl9CisJCWVsc2lmICgkdCBl cSAnUGFyYW1QYXRoSW5mbyonICYmICRhIGVxICdwYXRoX2hhY2szJykKKwkJeworCQkJcHJp bnQgJG9mICJcdGlmIChub2RlLT4kZilcbiIuCisJCQkgICJcdFx0b3V0Qml0bWFwc2V0KHN0 ciwgbm9kZS0+JGYtPnBwaV9yZXFfb3V0ZXIpO1xuIi4KKwkJCSAgIlx0ZWxzZVxuIi4KKwkJ CSAgIlx0XHRvdXRCaXRtYXBzZXQoc3RyLCBOVUxMKTtcbiI7CisJCX0KKwkJZWxzaWYgKCR0 ID1+IC8oXHcrKVwqLyBhbmQgZWxlbSAkMSwgQG5vZGVfdHlwZXMpCisJCXsKKwkJCXByaW50 ICRvZiAiXHRXUklURV9OT0RFX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVB RF9OT0RFX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgk dCBlcSAnc3RydWN0IEN1c3RvbVBhdGhNZXRob2RzKicgfHwJJHQgZXEgJ3N0cnVjdCBDdXN0 b21TY2FuTWV0aG9kcyonKQorCQl7CisJCQlwcmludCAkb2YgcXsKKwlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKHN0ciwgIiA6bWV0aG9kcyAiKTsKKwlvdXRUb2tlbihzdHIsIG5vZGUtPm1l dGhvZHMtPkN1c3RvbU5hbWUpOworfTsKKwkJCXByaW50ICRyZiBxIQorCXsKKwkJLyogTG9v a3VwIEN1c3RvbVNjYW5NZXRob2RzIGJ5IEN1c3RvbU5hbWUgKi8KKwkJY2hhcgkgICAqY3Vz dG9tX25hbWU7CisJCWNvbnN0IEN1c3RvbVNjYW5NZXRob2RzICptZXRob2RzOworCQl0b2tl biA9IHBnX3N0cnRvaygmbGVuZ3RoKTsgLyogc2tpcCBtZXRob2RzOiAqLworCQl0b2tlbiA9 IHBnX3N0cnRvaygmbGVuZ3RoKTsgLyogQ3VzdG9tTmFtZSAqLworCQljdXN0b21fbmFtZSA9 IG51bGxhYmxlX3N0cmluZyh0b2tlbiwgbGVuZ3RoKTsKKwkJbWV0aG9kcyA9IEdldEN1c3Rv bVNjYW5NZXRob2RzKGN1c3RvbV9uYW1lLCBmYWxzZSk7CisJCWxvY2FsX25vZGUtPm1ldGhv ZHMgPSBtZXRob2RzOworCX0KKyEgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgk dCBlcSAnUGFyYW1MaXN0SW5mbycgfHwgJHQgPX4gL1BhcnRpdGlvbkJvdW5kSW5mb0RhdGEv IHx8ICR0IGVxICdQYXJ0aXRpb25EaXJlY3RvcnknIHx8ICR0IGVxICdQYXJ0aXRpb25TY2hl bWUnIHx8ICR0IGVxICd2b2lkKicgfHwgJHQgPX4gL1wqXCokLykKKwkJeworCQkJIyBpZ25v cmUKKwkJfQorCQllbHNlCisJCXsKKwkJCWRpZSAiY291bGQgbm90IGhhbmRsZSB0eXBlIFwi JHRcIiBpbiBzdHJ1Y3QgXCIkblwiIGZpZWxkIFwiJGZcIiI7CisJCX0KKwl9CisKKwlwcmlu dCAkb2YgIn0KKyI7CisJcHJpbnQgJHJmICIKK1x0UkVBRF9ET05FKCk7Cit9CisiIHVubGVz cyAkbm9fcmVhZDsKK30KKworY2xvc2UgJG9mOworY2xvc2UgJHJmOworY2xvc2UgJG9mMjsK K2Nsb3NlICRyZjI7CisKKworZm9yZWFjaCBteSAkZmlsZSAocXcobm9kZXRhZ3MuaCBjb3B5 ZnVuY3MuaW5jMS5jIGNvcHlmdW5jcy5pbmMyLmMgZXF1YWxmdW5jcy5pbmMxLmMgZXF1YWxm dW5jcy5pbmMyLmMgb3V0ZnVuY3MuaW5jMS5jIG91dGZ1bmNzLmluYzIuYyByZWFkZnVuY3Mu aW5jMS5jIHJlYWRmdW5jcy5pbmMyLmMpKQoreworCUNhdGFsb2c6OlJlbmFtZVRlbXBGaWxl KCRmaWxlLCAkdG1wZXh0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCmluZGV4IDkxYTg5YjZk NTEuLjI2NGJiZjNmN2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpAQCAtMzEsMTEgKzMxLDEw IEBACiAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgotI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKLSNpbmNsdWRlICJub2Rlcy9w YXRobm9kZXMuaCIKLSNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJu b2Rlcy9iaXRtYXBzZXQuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUg Im5vZGVzL3BnX2xpc3QuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgotI2luY2x1ZGUg InV0aWxzL3JlbC5oIgogCiBzdGF0aWMgdm9pZCBvdXRDaGFyKFN0cmluZ0luZm8gc3RyLCBj aGFyIGMpOwogCkBAIC0yOTUsNiArMjk0LDkgQEAgb3V0RGF0dW0oU3RyaW5nSW5mbyBzdHIs IERhdHVtIHZhbHVlLCBpbnQgdHlwbGVuLCBib29sIHR5cGJ5dmFsKQogfQogCiAKKyNpbmNs dWRlICJvdXRmdW5jcy5pbmMxLmMiCisKKyNpZmRlZiBPQlNPTEVURQogLyoKICAqCVN0dWZm IGZyb20gcGxhbm5vZGVzLmgKICAqLwpAQCAtMTEzNSw2ICsxMTM3LDcgQEAgX291dFZhcihT dHJpbmdJbmZvIHN0ciwgY29uc3QgVmFyICpub2RlKQogCVdSSVRFX0lOVF9GSUVMRCh2YXJh dHRub3N5bik7CiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogfQorI2VuZGlm IC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAogX291dENvbnN0KFN0cmluZ0luZm8gc3Ry LCBjb25zdCBDb25zdCAqbm9kZSkKQEAgLTExNTYsNiArMTE1OSw3IEBAIF9vdXRDb25zdChT dHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3QgKm5vZGUpCiAJCW91dERhdHVtKHN0ciwgbm9k ZS0+Y29uc3R2YWx1ZSwgbm9kZS0+Y29uc3RsZW4sIG5vZGUtPmNvbnN0Ynl2YWwpOwogfQog CisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0UGFyYW0oU3RyaW5nSW5mbyBz dHIsIGNvbnN0IFBhcmFtICpub2RlKQogewpAQCAtMTMyNiw2ICsxMzMwLDcgQEAgX291dFNj YWxhckFycmF5T3BFeHByKFN0cmluZ0luZm8gc3RyLCBjb25zdCBTY2FsYXJBcnJheU9wRXhw ciAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGFyZ3MpOwogCVdSSVRFX0xPQ0FUSU9OX0ZJ RUxEKGxvY2F0aW9uKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQK IF9vdXRCb29sRXhwcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgQm9vbEV4cHIgKm5vZGUpCkBA IC0xMzU0LDYgKzEzNTksNyBAQCBfb3V0Qm9vbEV4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IEJvb2xFeHByICpub2RlKQogCVdSSVRFX0xPQ0FUSU9OX0ZJRUxEKGxvY2F0aW9uKTsKIH0K IAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dFN1YkxpbmsoU3RyaW5nSW5m byBzdHIsIGNvbnN0IFN1YkxpbmsgKm5vZGUpCiB7CkBAIC0yNjc0LDYgKzI2ODAsNyBAQCBf b3V0UGxhbm5lclBhcmFtSXRlbShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGxhbm5lclBhcmFt SXRlbSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGl0ZW0pOwogCVdSSVRFX0lOVF9GSUVM RChwYXJhbUlkKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCiAgKgpAQCAtMjY5Niw2ICsyNzAzLDcgQEAgX291dEV4dGVuc2libGVOb2Rl KFN0cmluZ0luZm8gc3RyLCBjb25zdCBFeHRlbnNpYmxlTm9kZSAqbm9kZSkKIAltZXRob2Rz LT5ub2RlT3V0KHN0ciwgbm9kZSk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCiAgKgogICoJU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmguCkBAIC0z MDI4LDYgKzMwMzYsNyBAQCBfb3V0U3RhdHNFbGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBT dGF0c0VsZW0gKm5vZGUpCiAJV1JJVEVfU1RSSU5HX0ZJRUxEKG5hbWUpOwogCVdSSVRFX05P REVfRklFTEQoZXhwcik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lk CiBfb3V0UXVlcnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFF1ZXJ5ICpub2RlKQpAQCAtMzEw MCw2ICszMTA5LDcgQEAgX291dFF1ZXJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBRdWVyeSAq bm9kZSkKIAlXUklURV9JTlRfRklFTEQoc3RtdF9sZW4pOwogfQogCisjaWZkZWYgT0JTT0xF VEUKIHN0YXRpYyB2b2lkCiBfb3V0V2l0aENoZWNrT3B0aW9uKFN0cmluZ0luZm8gc3RyLCBj b25zdCBXaXRoQ2hlY2tPcHRpb24gKm5vZGUpCiB7CkBAIC0zMjM4LDYgKzMyNDgsNyBAQCBf b3V0U2V0T3BlcmF0aW9uU3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgU2V0T3BlcmF0aW9u U3RtdCAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKGNvbENvbGxhdGlvbnMpOwogCVdSSVRF X05PREVfRklFTEQoZ3JvdXBDbGF1c2VzKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAog c3RhdGljIHZvaWQKIF9vdXRSYW5nZVRibEVudHJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBS YW5nZVRibEVudHJ5ICpub2RlKQpAQCAtMzMxOCw2ICszMzI5LDcgQEAgX291dFJhbmdlVGJs RW50cnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhbmdlVGJsRW50cnkgKm5vZGUpCiAJV1JJ VEVfTk9ERV9GSUVMRChzZWN1cml0eVF1YWxzKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBz dGF0aWMgdm9pZAogX291dFJhbmdlVGJsRnVuY3Rpb24oU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IFJhbmdlVGJsRnVuY3Rpb24gKm5vZGUpCiB7CkBAIC0zMzQxLDYgKzMzNTMsNyBAQCBfb3V0 VGFibGVTYW1wbGVDbGF1c2UoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFRhYmxlU2FtcGxlQ2xh dXNlICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoYXJncyk7CiAJV1JJVEVfTk9ERV9GSUVM RChyZXBlYXRhYmxlKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQK IF9vdXRBX0V4cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFfRXhwciAqbm9kZSkKQEAgLTM0 NTMsNiArMzQ2Niw3IEBAIF9vdXRCaXRTdHJpbmcoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEJp dFN0cmluZyAqbm9kZSkKIAlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgbm9kZS0+dmFs KTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMgdm9pZAogX291dENvbHVtblJlZihT dHJpbmdJbmZvIHN0ciwgY29uc3QgQ29sdW1uUmVmICpub2RlKQogewpAQCAtMzQ4NCw2ICsz NDk4LDcgQEAgX291dFJhd1N0bXQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhd1N0bXQgKm5v ZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQoc3RtdF9sb2NhdGlvbik7CiAJV1JJVEVfSU5U X0ZJRUxEKHN0bXRfbGVuKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZv aWQKIF9vdXRBX0NvbnN0KFN0cmluZ0luZm8gc3RyLCBjb25zdCBBX0NvbnN0ICpub2RlKQpA QCAtMzUwMCw2ICszNTE1LDcgQEAgX291dEFfQ29uc3QoU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IEFfQ29uc3QgKm5vZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogfQog CisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0QV9TdGFyKFN0cmluZ0luZm8g c3RyLCBjb25zdCBBX1N0YXIgKm5vZGUpCiB7CkBAIC0zNjQ0LDYgKzM2NjAsNyBAQCBfb3V0 UmFuZ2VUYWJsZUZ1bmNDb2woU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhbmdlVGFibGVGdW5j Q29sICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoY29sZGVmZXhwcik7CiAJV1JJVEVfTE9D QVRJT05fRklFTEQobG9jYXRpb24pOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0 aWMgdm9pZAogX291dENvbnN0cmFpbnQoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbnN0cmFp bnQgKm5vZGUpCkBAIC0zNzY1LDYgKzM3ODIsNyBAQCBfb3V0Q29uc3RyYWludChTdHJpbmdJ bmZvIHN0ciwgY29uc3QgQ29uc3RyYWludCAqbm9kZSkKIAl9CiB9CiAKKyNpZmRlZiBPQlNP TEVURQogc3RhdGljIHZvaWQKIF9vdXRGb3JlaWduS2V5Q2FjaGVJbmZvKFN0cmluZ0luZm8g c3RyLCBjb25zdCBGb3JlaWduS2V5Q2FjaGVJbmZvICpub2RlKQogewpAQCAtMzgyNSw2ICsz ODQzLDcgQEAgX291dFBhcnRpdGlvblJhbmdlRGF0dW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0 IFBhcnRpdGlvblJhbmdlRGF0dW0gKm5vZGUpCiAJV1JJVEVfTk9ERV9GSUVMRCh2YWx1ZSk7 CiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogfQorI2VuZGlmIC8qT0JTT0xF VEUqLwogCiAvKgogICogb3V0Tm9kZSAtCkBAIC0zODU0LDYgKzM4NzMsOCBAQCBvdXROb2Rl KFN0cmluZ0luZm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCWFwcGVuZFN0cmluZ0luZm9D aGFyKHN0ciwgJ3snKTsKIAkJc3dpdGNoIChub2RlVGFnKG9iaikpCiAJCXsKKyNpbmNsdWRl ICJvdXRmdW5jcy5pbmMyLmMiCisjaWZkZWYgT0JTT0xFVEUKIAkJCWNhc2UgVF9QbGFubmVk U3RtdDoKIAkJCQlfb3V0UGxhbm5lZFN0bXQoc3RyLCBvYmopOwogCQkJCWJyZWFrOwpAQCAt NDUyNiw2ICs0NTQ3LDcgQEAgb3V0Tm9kZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qgdm9pZCAq b2JqKQogCQkJY2FzZSBUX1BhcnRpdGlvblJhbmdlRGF0dW06CiAJCQkJX291dFBhcnRpdGlv blJhbmdlRGF0dW0oc3RyLCBvYmopOwogCQkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUq LwogCiAJCQlkZWZhdWx0OgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9yZWFk ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCmluZGV4IGQ3OWFmNmU1 NmUuLmI2NmE0MjE4OGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jCkBAIC0zMyw5ICszMyw3 IEBACiAjaW5jbHVkZSA8bWF0aC5oPgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCi0jaW5j bHVkZSAibm9kZXMvZXh0ZW5zaWJsZS5oIgotI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMu aCIKLSNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9iaXRt YXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9yZWFkZnVuY3MuaCIKIAogCkBAIC0yMzgsNiAr MjM2LDggQEAgcmVhZEJpdG1hcHNldCh2b2lkKQogCXJldHVybiBfcmVhZEJpdG1hcHNldCgp OwogfQogCisjaW5jbHVkZSAicmVhZGZ1bmNzLmluYzEuYyIKKwogLyoKICAqIF9yZWFkUXVl cnkKICAqLwpAQCAtMjg5LDYgKzI4OSw3IEBAIF9yZWFkUXVlcnkodm9pZCkKIAlSRUFEX0RP TkUoKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX3JlYWROb3RpZnlTdG10CiAg Ki8KQEAgLTU4Nyw2ICs1ODgsNyBAQCBfcmVhZFZhcih2b2lkKQogCiAJUkVBRF9ET05FKCk7 CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZENvbnN0CkBAIC02MTMs NiArNjE1LDcgQEAgX3JlYWRDb25zdCh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZk ZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZFBhcmFtCiAgKi8KQEAgLTgzOCw2ICs4NDEsNyBA QCBfcmVhZFNjYWxhckFycmF5T3BFeHByKHZvaWQpCiAKIAlSRUFEX0RPTkUoKTsKIH0KKyNl bmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIF9yZWFkQm9vbEV4cHIKQEAgLTg2NSw2ICs4 NjksNyBAQCBfcmVhZEJvb2xFeHByKHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNpZmRl ZiBPQlNPTEVURQogLyoKICAqIF9yZWFkU3ViTGluawogICovCkBAIC0xNDE5LDYgKzE0MjQs NyBAQCBfcmVhZEFwcGVuZFJlbEluZm8odm9pZCkKIC8qCiAgKglTdHVmZiBmcm9tIHBhcnNl bm9kZXMuaC4KICAqLworI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX3JlYWRSYW5n ZVRibEVudHJ5CkBAIC0xNTE0LDYgKzE1MjAsNyBAQCBfcmVhZFJhbmdlVGJsRW50cnkodm9p ZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX3JlYWRS YW5nZVRibEZ1bmN0aW9uCiAgKi8KQEAgLTI2MzYsNiArMjY0Myw3IEBAIF9yZWFkQWx0ZXJu YXRpdmVTdWJQbGFuKHZvaWQpCiAKIAlSRUFEX0RPTkUoKTsKIH0KKyNlbmRpZiAvKk9CU09M RVRFKi8KIAogLyoKICAqIF9yZWFkRXh0ZW5zaWJsZU5vZGUKQEAgLTI2NjcsNiArMjY3NSw3 IEBAIF9yZWFkRXh0ZW5zaWJsZU5vZGUodm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lm ZGVmIE9CU09MRVRFCiAvKgogICogX3JlYWRQYXJ0aXRpb25Cb3VuZFNwZWMKICAqLwpAQCAt MjcwMSw2ICsyNzEwLDcgQEAgX3JlYWRQYXJ0aXRpb25SYW5nZURhdHVtKHZvaWQpCiAKIAlS RUFEX0RPTkUoKTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogLyoKICAqIHBhcnNlTm9k ZVN0cmluZwpAQCAtMjcyNSw3ICsyNzM1LDExIEBAIHBhcnNlTm9kZVN0cmluZyh2b2lkKQog I2RlZmluZSBNQVRDSCh0b2tuYW1lLCBuYW1lbGVuKSBcCiAJKGxlbmd0aCA9PSBuYW1lbGVu ICYmIG1lbWNtcCh0b2tlbiwgdG9rbmFtZSwgbmFtZWxlbikgPT0gMCkKIAotCWlmIChNQVRD SCgiUVVFUlkiLCA1KSkKKwlpZiAoZmFsc2UpCisJCTsKKyNpbmNsdWRlICJyZWFkZnVuY3Mu aW5jMi5jIgorI2lmZGVmIE9CU09MRVRFCisJZWxzZSBpZiAoTUFUQ0goIlFVRVJZIiwgNSkp CiAJCXJldHVybl92YWx1ZSA9IF9yZWFkUXVlcnkoKTsKIAllbHNlIGlmIChNQVRDSCgiV0lU SENIRUNLT1BUSU9OIiwgMTUpKQogCQlyZXR1cm5fdmFsdWUgPSBfcmVhZFdpdGhDaGVja09w dGlvbigpOwpAQCAtMjk3Myw2ICsyOTg3LDcgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAJ CXJldHVybl92YWx1ZSA9IF9yZWFkUGFydGl0aW9uQm91bmRTcGVjKCk7CiAJZWxzZSBpZiAo TUFUQ0goIlBBUlRJVElPTlJBTkdFREFUVU0iLCAxOSkpCiAJCXJldHVybl92YWx1ZSA9IF9y ZWFkUGFydGl0aW9uUmFuZ2VEYXR1bSgpOworI2VuZGlmIC8qT0JTT0xFVEUqLwogCWVsc2UK IAl7CiAJCWVsb2coRVJST1IsICJiYWRseSBmb3JtYXR0ZWQgbm9kZSBzdHJpbmcgXCIlLjMy c1wiLi4uIiwgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGln bm9yZSBiL3NyYy9pbmNsdWRlL25vZGVzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uOTlmYjFkMzc4NwotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvbm9kZXRhZ3Mu aAorL2hlYWRlci1zdGFtcApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggN2M2NTdjMTI0MS4uMDEyYjQ3 OGE3NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC0yNyw2ICsyNyw4IEBAIHR5cGVkZWYgZW51bSBO b2RlVGFnCiB7CiAJVF9JbnZhbGlkID0gMCwKIAorI2luY2x1ZGUgIm5vZGVzL25vZGV0YWdz LmgiCisjaWZkZWYgT0JTT0xFVEUKIAkvKgogCSAqIFRBR1MgRk9SIEVYRUNVVE9SIE5PREVT IChleGVjbm9kZXMuaCkKIAkgKi8KQEAgLTUyNyw4ICs1MjksMTQgQEAgdHlwZWRlZiBlbnVt IE5vZGVUYWcKIAlUX1N1cHBvcnRSZXF1ZXN0Q29zdCwJCS8qIGluIG5vZGVzL3N1cHBvcnRu b2Rlcy5oICovCiAJVF9TdXBwb3J0UmVxdWVzdFJvd3MsCQkvKiBpbiBub2Rlcy9zdXBwb3J0 bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVlc3RJbmRleENvbmRpdGlvbgkvKiBpbiBub2Rl cy9zdXBwb3J0bm9kZXMuaCAqLworI2VuZGlmIC8qT0JTT0xFVEUqLwogfSBOb2RlVGFnOwog CisvKgorICogdXNlZCBpbiBub2RlIGRlZmluaXRpb25zIHRvIHNldCBleHRyYSBpbmZvcm1h dGlvbiBmb3IgZ2VuX25vZGVfc3VwcG9ydC5wbAorICovCisjZGVmaW5lIHBnX25vZGVfYXR0 cih4KQorCiAvKgogICogVGhlIGZpcnN0IGZpZWxkIG9mIGEgbm9kZSBvZiBhbnkgdHlwZSBp cyBndWFyYW50ZWVkIHRvIGJlIHRoZSBOb2RlVGFnLgogICogSGVuY2UgdGhlIHR5cGUgb2Yg YW55IG5vZGUgY2FuIGJlIGdvdHRlbiBieSBjYXN0aW5nIGl0IHRvIE5vZGUuIERlY2xhcmlu ZwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDRjNWE4YTM5YmYuLjYyOWE3ODU4NjUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCB0eXBlZGVm IHN0cnVjdCBRdWVyeQogCiAJUXVlcnlTb3VyY2UgcXVlcnlTb3VyY2U7CS8qIHdoZXJlIGRp ZCBJIGNvbWUgZnJvbT8gKi8KIAotCXVpbnQ2NAkJcXVlcnlJZDsJCS8qIHF1ZXJ5IGlkZW50 aWZpZXIgKGNhbiBiZSBzZXQgYnkgcGx1Z2lucykgKi8KKwl1aW50NjQJCXF1ZXJ5SWQgcGdf bm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkvKiBxdWVyeSBpZGVudGlmaWVyIChjYW4gYmUg c2V0IGJ5IHBsdWdpbnMpICovCiAKIAlib29sCQljYW5TZXRUYWc7CQkvKiBkbyBJIHNldCB0 aGUgY29tbWFuZCByZXN1bHQgdGFnPyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4 IDMyNGQ5Mjg4MGIuLjlkMGU0MDY4ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0y MjcsNyArMjI3LDcgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJICogR0VRTy4KIAkgKi8KIAlM aXN0CSAgICpqb2luX3JlbF9saXN0OwkvKiBsaXN0IG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0 SW5mb3MgKi8KLQlzdHJ1Y3QgSFRBQiAqam9pbl9yZWxfaGFzaDsgLyogb3B0aW9uYWwgaGFz aHRhYmxlIGZvciBqb2luIHJlbGF0aW9ucyAqLworCXN0cnVjdCBIVEFCICpqb2luX3JlbF9o YXNoIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsgLyogb3B0aW9uYWwgaGFzaHRh YmxlIGZvciBqb2luIHJlbGF0aW9ucyAqLwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEgZHlu YW1pYy1wcm9ncmFtbWluZy1zdHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10K QEAgLTMyOSwxMCArMzI5LDEwIEBAIHN0cnVjdCBQbGFubmVySW5mbwogCUxpc3QJICAgKnVw ZGF0ZV9jb2xub3M7CiAKIAkvKiBGaWVsZHMgZmlsbGVkIGR1cmluZyBjcmVhdGVfcGxhbigp IGZvciB1c2UgaW4gc2V0cmVmcy5jICovCi0JQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFwOwkv KiBmb3IgR3JvdXBpbmdGdW5jIGZpeHVwICovCisJQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFw IHBnX25vZGVfYXR0cihhcnJheV9zaXplKHVwZGF0ZV9jb2xub3MpKTsJLyogZm9yIEdyb3Vw aW5nRnVuYyBmaXh1cCAqLwogCUxpc3QJICAgKm1pbm1heF9hZ2dzOwkvKiBMaXN0IG9mIE1p bk1heEFnZ0luZm9zICovCiAKLQlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0OwkvKiBjb250 ZXh0IGhvbGRpbmcgUGxhbm5lckluZm8gKi8KKwlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0 IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogY29udGV4dCBob2xkaW5nIFBs YW5uZXJJbmZvICovCiAKIAlDYXJkaW5hbGl0eQl0b3RhbF90YWJsZV9wYWdlczsJLyogIyBv ZiBwYWdlcyBpbiBhbGwgbm9uLWR1bW15IHRhYmxlcyBvZgogCQkJCQkJCQkJICogcXVlcnkg Ki8KQEAgLTM2OSw4ICszNjksOCBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAlMaXN0CSAgICpj dXJPdXRlclBhcmFtczsgLyogbm90LXlldC1hc3NpZ25lZCBOZXN0TG9vcFBhcmFtcyAqLwog CiAJLyogVGhlc2UgZmllbGRzIGFyZSB3b3Jrc3BhY2UgZm9yIHNldHJlZnMuYyAqLwotCWJv b2wJICAgKmlzQWx0U3VicGxhbjsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBnbG9iLT5z dWJwbGFucyAqLwotCWJvb2wJICAgKmlzVXNlZFN1YnBsYW47CS8qIGFycmF5IGNvcnJlc3Bv bmRpbmcgdG8gZ2xvYi0+c3VicGxhbnMgKi8KKwlib29sCSAgICppc0FsdFN1YnBsYW4gcGdf bm9kZV9hdHRyKGFycmF5X3NpemUoY3VyT3V0ZXJQYXJhbXMpKTsJLyogYXJyYXkgY29ycmVz cG9uZGluZyB0byBnbG9iLT5zdWJwbGFucyAqLworCWJvb2wJICAgKmlzVXNlZFN1YnBsYW4g cGdfbm9kZV9hdHRyKGFycmF5X3NpemUoY3VyT3V0ZXJQYXJhbXMpKTsJLyogYXJyYXkgY29y cmVzcG9uZGluZyB0byBnbG9iLT5zdWJwbGFucyAqLwogCiAJLyogb3B0aW9uYWwgcHJpdmF0 ZSBkYXRhIGZvciBqb2luX3NlYXJjaF9ob29rLCBlLmcuLCBHRVFPICovCiAJdm9pZAkgICAq am9pbl9zZWFyY2hfcHJpdmF0ZTsKQEAgLTcxMSw4ICs3MTEsOCBAQCB0eXBlZGVmIHN0cnVj dCBSZWxPcHRJbmZvCiAJUlRFS2luZAkJcnRla2luZDsJCS8qIFJFTEFUSU9OLCBTVUJRVUVS WSwgRlVOQ1RJT04sIGV0YyAqLwogCUF0dHJOdW1iZXIJbWluX2F0dHI7CQkvKiBzbWFsbGVz dCBhdHRybm8gb2YgcmVsIChvZnRlbiA8MCkgKi8KIAlBdHRyTnVtYmVyCW1heF9hdHRyOwkJ LyogbGFyZ2VzdCBhdHRybm8gb2YgcmVsICovCi0JUmVsaWRzCSAgICphdHRyX25lZWRlZDsJ LyogYXJyYXkgaW5kZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCi0JaW50MzIJICAg KmF0dHJfd2lkdGhzOwkvKiBhcnJheSBpbmRleGVkIFttaW5fYXR0ciAuLiBtYXhfYXR0cl0g Ki8KKwlSZWxpZHMJICAgKmF0dHJfbmVlZGVkIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdu b3JlKTsJLyogYXJyYXkgaW5kZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCisJaW50 MzIJICAgKmF0dHJfd2lkdGhzIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyog YXJyYXkgaW5kZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCiAJTGlzdAkgICAqbGF0 ZXJhbF92YXJzOwkvKiBMQVRFUkFMIFZhcnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSByZWwg Ki8KIAlSZWxpZHMJCWxhdGVyYWxfcmVmZXJlbmNlcnM7CS8qIHJlbHMgdGhhdCByZWZlcmVu Y2UgbWUgbGF0ZXJhbGx5ICovCiAJTGlzdAkgICAqaW5kZXhsaXN0OwkJLyogbGlzdCBvZiBJ bmRleE9wdEluZm8gKi8KQEAgLTczMywxMyArNzMzLDEzIEBAIHR5cGVkZWYgc3RydWN0IFJl bE9wdEluZm8KIAlPaWQJCQl1c2VyaWQ7CQkJLyogaWRlbnRpZmllcyB1c2VyIHRvIGNoZWNr IGFjY2VzcyBhcyAqLwogCWJvb2wJCXVzZXJpZGlzY3VycmVudDsJLyogam9pbiBpcyBvbmx5 IHZhbGlkIGZvciBjdXJyZW50IHVzZXIgKi8KIAkvKiB1c2UgInN0cnVjdCBGZHdSb3V0aW5l IiB0byBhdm9pZCBpbmNsdWRpbmcgZmR3YXBpLmggaGVyZSAqLwotCXN0cnVjdCBGZHdSb3V0 aW5lICpmZHdyb3V0aW5lOworCXN0cnVjdCBGZHdSb3V0aW5lICpmZHdyb3V0aW5lIHBnX25v ZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsKIAl2b2lkCSAgICpmZHdfcHJpdmF0ZTsKIAog CS8qIGNhY2hlIHNwYWNlIGZvciByZW1lbWJlcmluZyBpZiB3ZSBoYXZlIHByb3ZlbiB0aGlz IHJlbGF0aW9uIHVuaXF1ZSAqLwotCUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVsczsJLyoga25v d24gdW5pcXVlIGZvciB0aGVzZSBvdGhlciByZWxpZAorCUxpc3QJICAgKnVuaXF1ZV9mb3Jf cmVscyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGtub3duIHVuaXF1ZSBm b3IgdGhlc2Ugb3RoZXIgcmVsaWQKIAkJCQkJCQkJCSAqIHNldChzKSAqLwotCUxpc3QJICAg Km5vbl91bmlxdWVfZm9yX3JlbHM7CS8qIGtub3duIG5vdCB1bmlxdWUgZm9yIHRoZXNlIHNl dChzKSAqLworCUxpc3QJICAgKm5vbl91bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJl YWR3cml0ZV9pZ25vcmUpOwkvKiBrbm93biBub3QgdW5pcXVlIGZvciB0aGVzZSBzZXQocykg Ki8KIAogCS8qIHVzZWQgYnkgdmFyaW91cyBzY2FucyBhbmQgam9pbnM6ICovCiAJTGlzdAkg ICAqYmFzZXJlc3RyaWN0aW5mbzsJLyogUmVzdHJpY3RJbmZvIHN0cnVjdHVyZXMgKGlmIGJh c2UgcmVsKSAqLwpAQCAtODM3LDcgKzgzNyw3IEBAIHN0cnVjdCBJbmRleE9wdEluZm8KIAog CU9pZAkJCWluZGV4b2lkOwkJLyogT0lEIG9mIHRoZSBpbmRleCByZWxhdGlvbiAqLwogCU9p ZAkJCXJlbHRhYmxlc3BhY2U7CS8qIHRhYmxlc3BhY2Ugb2YgaW5kZXggKG5vdCB0YWJsZSkg Ki8KLQlSZWxPcHRJbmZvICpyZWw7CQkJLyogYmFjay1saW5rIHRvIGluZGV4J3MgdGFibGUg Ki8KKwlSZWxPcHRJbmZvICpyZWwgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkJ CS8qIGJhY2stbGluayB0byBpbmRleCdzIHRhYmxlICovCiAKIAkvKiBpbmRleC1zaXplIHN0 YXRpc3RpY3MgKGZyb20gcGdfY2xhc3MgYW5kIGVsc2V3aGVyZSkgKi8KIAlCbG9ja051bWJl ciBwYWdlczsJCQkvKiBudW1iZXIgb2YgZGlzayBwYWdlcyBpbiBpbmRleCAqLwpAQCAtODQ3 LDIwICs4NDcsMjAgQEAgc3RydWN0IEluZGV4T3B0SW5mbwogCS8qIGluZGV4IGRlc2NyaXB0 b3IgaW5mb3JtYXRpb24gKi8KIAlpbnQJCQluY29sdW1uczsJCS8qIG51bWJlciBvZiBjb2x1 bW5zIGluIGluZGV4ICovCiAJaW50CQkJbmtleWNvbHVtbnM7CS8qIG51bWJlciBvZiBrZXkg Y29sdW1ucyBpbiBpbmRleCAqLwotCWludAkJICAgKmluZGV4a2V5czsJCS8qIGNvbHVtbiBu dW1iZXJzIG9mIGluZGV4J3MgYXR0cmlidXRlcyBib3RoCisJaW50CQkgICAqaW5kZXhrZXlz IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJCS8qIGNvbHVtbiBudW1iZXJzIG9m IGluZGV4J3MgYXR0cmlidXRlcyBib3RoCiAJCQkJCQkJCSAqIGtleSBhbmQgaW5jbHVkZWQg Y29sdW1ucywgb3IgMCAqLwotCU9pZAkJICAgKmluZGV4Y29sbGF0aW9uczsJLyogT0lEcyBv ZiBjb2xsYXRpb25zIG9mIGluZGV4IGNvbHVtbnMgKi8KLQlPaWQJCSAgICpvcGZhbWlseTsJ CS8qIE9JRHMgb2Ygb3BlcmF0b3IgZmFtaWxpZXMgZm9yIGNvbHVtbnMgKi8KLQlPaWQJCSAg ICpvcGNpbnR5cGU7CQkvKiBPSURzIG9mIG9wY2xhc3MgZGVjbGFyZWQgaW5wdXQgZGF0YSB0 eXBlcyAqLwotCU9pZAkJICAgKnNvcnRvcGZhbWlseTsJLyogT0lEcyBvZiBidHJlZSBvcGZh bWlsaWVzLCBpZiBvcmRlcmFibGUgKi8KLQlib29sCSAgICpyZXZlcnNlX3NvcnQ7CS8qIGlz IHNvcnQgb3JkZXIgZGVzY2VuZGluZz8gKi8KLQlib29sCSAgICpudWxsc19maXJzdDsJLyog ZG8gTlVMTHMgY29tZSBmaXJzdCBpbiB0aGUgc29ydCBvcmRlcj8gKi8KLQlieXRlYQkgICoq b3BjbGFzc29wdGlvbnM7IC8qIG9wY2xhc3Mtc3BlY2lmaWMgb3B0aW9ucyBmb3IgY29sdW1u cyAqLwotCWJvb2wJICAgKmNhbnJldHVybjsJCS8qIHdoaWNoIGluZGV4IGNvbHMgY2FuIGJl IHJldHVybmVkIGluIGFuCisJT2lkCQkgICAqaW5kZXhjb2xsYXRpb25zIHBnX25vZGVfYXR0 cihyZWFkd3JpdGVfaWdub3JlKTsJLyogT0lEcyBvZiBjb2xsYXRpb25zIG9mIGluZGV4IGNv bHVtbnMgKi8KKwlPaWQJCSAgICpvcGZhbWlseSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2ln bm9yZSk7CQkvKiBPSURzIG9mIG9wZXJhdG9yIGZhbWlsaWVzIGZvciBjb2x1bW5zICovCisJ T2lkCQkgICAqb3BjaW50eXBlIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJCS8q IE9JRHMgb2Ygb3BjbGFzcyBkZWNsYXJlZCBpbnB1dCBkYXRhIHR5cGVzICovCisJT2lkCQkg ICAqc29ydG9wZmFtaWx5IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogT0lE cyBvZiBidHJlZSBvcGZhbWlsaWVzLCBpZiBvcmRlcmFibGUgKi8KKwlib29sCSAgICpyZXZl cnNlX3NvcnQgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBpcyBzb3J0IG9y ZGVyIGRlc2NlbmRpbmc/ICovCisJYm9vbAkgICAqbnVsbHNfZmlyc3QgcGdfbm9kZV9hdHRy KHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBkbyBOVUxMcyBjb21lIGZpcnN0IGluIHRoZSBzb3J0 IG9yZGVyPyAqLworCWJ5dGVhCSAgKipvcGNsYXNzb3B0aW9ucyBwZ19ub2RlX2F0dHIocmVh ZHdyaXRlX2lnbm9yZSk7IC8qIG9wY2xhc3Mtc3BlY2lmaWMgb3B0aW9ucyBmb3IgY29sdW1u cyAqLworCWJvb2wJICAgKmNhbnJldHVybiBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9y ZSk7CQkvKiB3aGljaCBpbmRleCBjb2xzIGNhbiBiZSByZXR1cm5lZCBpbiBhbgogCQkJCQkJ CQkgKiBpbmRleC1vbmx5IHNjYW4/ICovCiAJT2lkCQkJcmVsYW07CQkJLyogT0lEIG9mIHRo ZSBhY2Nlc3MgbWV0aG9kIChpbiBwZ19hbSkgKi8KIAotCUxpc3QJICAgKmluZGV4cHJzOwkJ LyogZXhwcmVzc2lvbnMgZm9yIG5vbi1zaW1wbGUgaW5kZXggY29sdW1ucyAqLworCUxpc3QJ ICAgKmluZGV4cHJzIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJCS8qIGV4cHJl c3Npb25zIGZvciBub24tc2ltcGxlIGluZGV4IGNvbHVtbnMgKi8KIAlMaXN0CSAgICppbmRw cmVkOwkJLyogcHJlZGljYXRlIGlmIGEgcGFydGlhbCBpbmRleCwgZWxzZSBOSUwgKi8KIAog CUxpc3QJICAgKmluZGV4dGxpc3Q7CQkvKiB0YXJnZXRsaXN0IHJlcHJlc2VudGluZyBpbmRl eCBjb2x1bW5zICovCkBAIC04NzcsMTQgKzg3NywxNCBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZv CiAJYm9vbAkJaHlwb3RoZXRpY2FsOwkvKiB0cnVlIGlmIGluZGV4IGRvZXNuJ3QgcmVhbGx5 IGV4aXN0ICovCiAKIAkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSB0aGUg aW5kZXggQU0ncyBBUEkgc3RydWN0OiAqLwotCWJvb2wJCWFtY2Fub3JkZXJieW9wOyAvKiBk b2VzIEFNIHN1cHBvcnQgb3JkZXIgYnkgb3BlcmF0b3IgcmVzdWx0PyAqLwotCWJvb2wJCWFt b3B0aW9uYWxrZXk7CS8qIGNhbiBxdWVyeSBvbWl0IGtleSBmb3IgdGhlIGZpcnN0IGNvbHVt bj8gKi8KLQlib29sCQlhbXNlYXJjaGFycmF5OwkvKiBjYW4gQU0gaGFuZGxlIFNjYWxhckFy cmF5T3BFeHByIHF1YWxzPyAqLwotCWJvb2wJCWFtc2VhcmNobnVsbHM7CS8qIGNhbiBBTSBz ZWFyY2ggZm9yIE5VTEwvTk9UIE5VTEwgZW50cmllcz8gKi8KLQlib29sCQlhbWhhc2dldHR1 cGxlOwkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICovCi0JYm9vbAkJ YW1oYXNnZXRiaXRtYXA7IC8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ ICovCi0JYm9vbAkJYW1jYW5wYXJhbGxlbDsJLyogZG9lcyBBTSBzdXBwb3J0IHBhcmFsbGVs IHNjYW4/ICovCi0JYm9vbAkJYW1jYW5tYXJrcG9zOwkvKiBkb2VzIEFNIHN1cHBvcnQgbWFy ay9yZXN0b3JlPyAqLworCWJvb2wJCWFtY2Fub3JkZXJieW9wIHBnX25vZGVfYXR0cihyZWFk d3JpdGVfaWdub3JlKTsgLyogZG9lcyBBTSBzdXBwb3J0IG9yZGVyIGJ5IG9wZXJhdG9yIHJl c3VsdD8gKi8KKwlib29sCQlhbW9wdGlvbmFsa2V5IHBnX25vZGVfYXR0cihyZWFkd3JpdGVf aWdub3JlKTsJLyogY2FuIHF1ZXJ5IG9taXQga2V5IGZvciB0aGUgZmlyc3QgY29sdW1uPyAq LworCWJvb2wJCWFtc2VhcmNoYXJyYXkgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUp OwkvKiBjYW4gQU0gaGFuZGxlIFNjYWxhckFycmF5T3BFeHByIHF1YWxzPyAqLworCWJvb2wJ CWFtc2VhcmNobnVsbHMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBjYW4g QU0gc2VhcmNoIGZvciBOVUxML05PVCBOVUxMIGVudHJpZXM/ICovCisJYm9vbAkJYW1oYXNn ZXR0dXBsZSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGRvZXMgQU0gaGF2 ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWhhc2dldGJpdG1hcCBwZ19u b2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7IC8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1h cCBpbnRlcmZhY2U/ICovCisJYm9vbAkJYW1jYW5wYXJhbGxlbCBwZ19ub2RlX2F0dHIocmVh ZHdyaXRlX2lnbm9yZSk7CS8qIGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLwor CWJvb2wJCWFtY2FubWFya3BvcyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8q IGRvZXMgQU0gc3VwcG9ydCBtYXJrL3Jlc3RvcmU/ICovCiAJLyogUmF0aGVyIHRoYW4gaW5j bHVkZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlz ICovCiAJdm9pZAkJKCphbWNvc3Rlc3RpbWF0ZSkgKCk7CS8qIEFNJ3MgY29zdCBlc3RpbWF0 b3IgKi8KIH07CkBAIC05MDUsOSArOTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktl eU9wdEluZm8KIAlJbmRleAkJY29uX3JlbGlkOwkJLyogUlQgaW5kZXggb2YgdGhlIHJlZmVy ZW5jaW5nIHRhYmxlICovCiAJSW5kZXgJCXJlZl9yZWxpZDsJCS8qIFJUIGluZGV4IG9mIHRo ZSByZWZlcmVuY2VkIHRhYmxlICovCiAJaW50CQkJbmtleXM7CQkJLyogbnVtYmVyIG9mIGNv bHVtbnMgaW4gdGhlIGZvcmVpZ24ga2V5ICovCi0JQXR0ck51bWJlcgljb25rZXlbSU5ERVhf TUFYX0tFWVNdOyAvKiBjb2xzIGluIHJlZmVyZW5jaW5nIHRhYmxlICovCi0JQXR0ck51bWJl cgljb25ma2V5W0lOREVYX01BWF9LRVlTXTsJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxl ICovCi0JT2lkCQkJY29ucGZlcW9wW0lOREVYX01BWF9LRVlTXTsJLyogUEsgPSBGSyBvcGVy YXRvciBPSURzICovCisJQXR0ck51bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25v ZGVfYXR0cihhcnJheV9zaXplKG5rZXlzKSk7IC8qIGNvbHMgaW4gcmVmZXJlbmNpbmcgdGFi bGUgKi8KKwlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG5rZXlzKSk7CS8qIGNvbHMgaW4gcmVmZXJlbmNlZCB0YWJsZSAqLwor CU9pZAkJCWNvbnBmZXFvcFtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3Np emUobmtleXMpKTsJLyogUEsgPSBGSyBvcGVyYXRvciBPSURzICovCiAKIAkvKiBEZXJpdmVk IGluZm8gYWJvdXQgd2hldGhlciBGSydzIGVxdWFsaXR5IGNvbmRpdGlvbnMgbWF0Y2ggdGhl IHF1ZXJ5OiAqLwogCWludAkJCW5tYXRjaGVkX2VjOwkvKiAjIG9mIEZLIGNvbHMgbWF0Y2hl ZCBieSBFQ3MgKi8KQEAgLTkzNCw3ICs5MzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0aXN0 aWNFeHRJbmZvCiAJTm9kZVRhZwkJdHlwZTsKIAogCU9pZAkJCXN0YXRPaWQ7CQkvKiBPSUQg b2YgdGhlIHN0YXRpc3RpY3Mgcm93ICovCi0JUmVsT3B0SW5mbyAqcmVsOwkJCS8qIGJhY2st bGluayB0byBzdGF0aXN0aWMncyB0YWJsZSAqLworCVJlbE9wdEluZm8gKnJlbCBwZ19ub2Rl X2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkJLyogYmFjay1saW5rIHRvIHN0YXRpc3RpYydz IHRhYmxlICovCiAJY2hhcgkJa2luZDsJCQkvKiBzdGF0aXN0aWNzIGtpbmQgb2YgdGhpcyBl bnRyeSAqLwogCUJpdG1hcHNldCAgKmtleXM7CQkJLyogYXR0bnVtcyBvZiB0aGUgY29sdW1u cyBjb3ZlcmVkICovCiAJTGlzdAkgICAqZXhwcnM7CQkJLyogZXhwcmVzc2lvbnMgKi8KQEAg LTExMDgsNyArMTEwOCw3IEBAIHR5cGVkZWYgc3RydWN0IFBhdGhUYXJnZXQKIHsKIAlOb2Rl VGFnCQl0eXBlOwogCUxpc3QJICAgKmV4cHJzOwkJCS8qIGxpc3Qgb2YgZXhwcmVzc2lvbnMg dG8gYmUgY29tcHV0ZWQgKi8KLQlJbmRleAkgICAqc29ydGdyb3VwcmVmczsJLyogY29ycmVz cG9uZGluZyBzb3J0L2dyb3VwIHJlZm5vcywgb3IgMCAqLworCUluZGV4CSAgICpzb3J0Z3Jv dXByZWZzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKGV4cHJzKSk7CS8qIGNvcnJlc3BvbmRp bmcgc29ydC9ncm91cCByZWZub3MsIG9yIDAgKi8KIAlRdWFsQ29zdAljb3N0OwkJCS8qIGNv c3Qgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgKi8KIAlpbnQJCQl3aWR0aDsJCQkv KiBlc3RpbWF0ZWQgYXZnIHdpZHRoIG9mIHJlc3VsdCB0dXBsZXMgKi8KIAlWb2xhdGlsZUZ1 bmN0aW9uU3RhdHVzIGhhc192b2xhdGlsZV9leHByOwkvKiBpbmRpY2F0ZXMgaWYgZXhwcnMg Y29udGFpbgpAQCAtMTE3OSwxMCArMTE3OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBQYXRoCiAK IAlOb2RlVGFnCQlwYXRodHlwZTsJCS8qIHRhZyBpZGVudGlmeWluZyBzY2FuL2pvaW4gbWV0 aG9kICovCiAKLQlSZWxPcHRJbmZvICpwYXJlbnQ7CQkJLyogdGhlIHJlbGF0aW9uIHRoaXMg cGF0aCBjYW4gYnVpbGQgKi8KLQlQYXRoVGFyZ2V0ICpwYXRodGFyZ2V0OwkJLyogbGlzdCBv ZiBWYXJzL0V4cHJzLCBjb3N0LCB3aWR0aCAqLworCVJlbE9wdEluZm8gKnBhcmVudCBwZ19u b2RlX2F0dHIocGF0aF9oYWNrMSk7CQkJLyogdGhlIHJlbGF0aW9uIHRoaXMgcGF0aCBjYW4g YnVpbGQgKi8KKwlQYXRoVGFyZ2V0ICpwYXRodGFyZ2V0IHBnX25vZGVfYXR0cihwYXRoX2hh Y2syKTsJCS8qIGxpc3Qgb2YgVmFycy9FeHBycywgY29zdCwgd2lkdGggKi8KIAotCVBhcmFt UGF0aEluZm8gKnBhcmFtX2luZm87CS8qIHBhcmFtZXRlcml6YXRpb24gaW5mbywgb3IgTlVM TCBpZiBub25lICovCisJUGFyYW1QYXRoSW5mbyAqcGFyYW1faW5mbyBwZ19ub2RlX2F0dHIo cGF0aF9oYWNrMyk7CS8qIHBhcmFtZXRlcml6YXRpb24gaW5mbywgb3IgTlVMTCBpZiBub25l ICovCiAKIAlib29sCQlwYXJhbGxlbF9hd2FyZTsgLyogZW5nYWdlIHBhcmFsbGVsLWF3YXJl IGxvZ2ljPyAqLwogCWJvb2wJCXBhcmFsbGVsX3NhZmU7CS8qIE9LIHRvIHVzZSBhcyBwYXJ0 IG9mIHBhcmFsbGVsIHBsYW4/ICovCkBAIC0yMDYxLDE5ICsyMDYxLDE5IEBAIHR5cGVkZWYg c3RydWN0IFJlc3RyaWN0SW5mbwogCiAJYm9vbAkJb3V0ZXJqb2luX2RlbGF5ZWQ7CS8qIHRy dWUgaWYgZGVsYXllZCBieSBsb3dlciBvdXRlciBqb2luICovCiAKLQlib29sCQljYW5fam9p bjsJCS8qIHNlZSBjb21tZW50IGFib3ZlICovCisJYm9vbAkJY2FuX2pvaW4gcGdfbm9kZV9h dHRyKGVxdWFsX2lnbm9yZSk7CQkvKiBzZWUgY29tbWVudCBhYm92ZSAqLwogCi0JYm9vbAkJ cHNldWRvY29uc3RhbnQ7IC8qIHNlZSBjb21tZW50IGFib3ZlICovCisJYm9vbAkJcHNldWRv Y29uc3RhbnQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7IC8qIHNlZSBjb21tZW50IGFi b3ZlICovCiAKLQlib29sCQlsZWFrcHJvb2Y7CQkvKiB0cnVlIGlmIGtub3duIHRvIGNvbnRh aW4gbm8gbGVha2VkIFZhcnMgKi8KKwlib29sCQlsZWFrcHJvb2YgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZSk7CQkvKiB0cnVlIGlmIGtub3duIHRvIGNvbnRhaW4gbm8gbGVha2VkIFZh cnMgKi8KIAotCVZvbGF0aWxlRnVuY3Rpb25TdGF0dXMgaGFzX3ZvbGF0aWxlOwkvKiB0byBp bmRpY2F0ZSBpZiBjbGF1c2UgY29udGFpbnMKKwlWb2xhdGlsZUZ1bmN0aW9uU3RhdHVzIGhh c192b2xhdGlsZSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogdG8gaW5kaWNhdGUg aWYgY2xhdXNlIGNvbnRhaW5zCiAJCQkJCQkJCQkJCSAqIGFueSB2b2xhdGlsZSBmdW5jdGlv bnMuICovCiAKIAlJbmRleAkJc2VjdXJpdHlfbGV2ZWw7IC8qIHNlZSBjb21tZW50IGFib3Zl ICovCiAKIAkvKiBUaGUgc2V0IG9mIHJlbGlkcyAodmFybm9zKSBhY3R1YWxseSByZWZlcmVu Y2VkIGluIHRoZSBjbGF1c2U6ICovCi0JUmVsaWRzCQljbGF1c2VfcmVsaWRzOworCVJlbGlk cwkJY2xhdXNlX3JlbGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIFRo ZSBzZXQgb2YgcmVsaWRzIHJlcXVpcmVkIHRvIGV2YWx1YXRlIHRoZSBjbGF1c2U6ICovCiAJ UmVsaWRzCQlyZXF1aXJlZF9yZWxpZHM7CkBAIC0yMDg1LDQ4ICsyMDg1LDQ4IEBAIHR5cGVk ZWYgc3RydWN0IFJlc3RyaWN0SW5mbwogCVJlbGlkcwkJbnVsbGFibGVfcmVsaWRzOwogCiAJ LyogVGhlc2UgZmllbGRzIGFyZSBzZXQgZm9yIGFueSBiaW5hcnkgb3BjbGF1c2U6ICovCi0J UmVsaWRzCQlsZWZ0X3JlbGlkczsJLyogcmVsaWRzIGluIGxlZnQgc2lkZSBvZiBjbGF1c2Ug Ki8KLQlSZWxpZHMJCXJpZ2h0X3JlbGlkczsJLyogcmVsaWRzIGluIHJpZ2h0IHNpZGUgb2Yg Y2xhdXNlICovCisJUmVsaWRzCQlsZWZ0X3JlbGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdu b3JlKTsJLyogcmVsaWRzIGluIGxlZnQgc2lkZSBvZiBjbGF1c2UgKi8KKwlSZWxpZHMJCXJp Z2h0X3JlbGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogcmVsaWRzIGluIHJp Z2h0IHNpZGUgb2YgY2xhdXNlICovCiAKIAkvKiBUaGlzIGZpZWxkIGlzIE5VTEwgdW5sZXNz IGNsYXVzZSBpcyBhbiBPUiBjbGF1c2U6ICovCi0JRXhwcgkgICAqb3JjbGF1c2U7CQkvKiBt b2RpZmllZCBjbGF1c2Ugd2l0aCBSZXN0cmljdEluZm9zICovCisJRXhwcgkgICAqb3JjbGF1 c2UgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkvKiBtb2RpZmllZCBjbGF1c2Ugd2l0 aCBSZXN0cmljdEluZm9zICovCiAKIAkvKiBUaGlzIGZpZWxkIGlzIE5VTEwgdW5sZXNzIGNs YXVzZSBpcyBwb3RlbnRpYWxseSByZWR1bmRhbnQ6ICovCi0JRXF1aXZhbGVuY2VDbGFzcyAq cGFyZW50X2VjOwkvKiBnZW5lcmF0aW5nIEVxdWl2YWxlbmNlQ2xhc3MgKi8KKwlFcXVpdmFs ZW5jZUNsYXNzICpwYXJlbnRfZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSByZWFkd3Jp dGVfaWdub3JlKTsJLyogZ2VuZXJhdGluZyBFcXVpdmFsZW5jZUNsYXNzICovCiAKIAkvKiBj YWNoZSBzcGFjZSBmb3IgY29zdCBhbmQgc2VsZWN0aXZpdHkgKi8KLQlRdWFsQ29zdAlldmFs X2Nvc3Q7CQkvKiBldmFsIGNvc3Qgb2YgY2xhdXNlOyAtMSBpZiBub3QgeWV0IHNldCAqLwot CVNlbGVjdGl2aXR5IG5vcm1fc2VsZWM7CQkvKiBzZWxlY3Rpdml0eSBmb3IgIm5vcm1hbCIg KEpPSU5fSU5ORVIpCisJUXVhbENvc3QJZXZhbF9jb3N0IHBnX25vZGVfYXR0cihlcXVhbF9p Z25vcmUpOwkJLyogZXZhbCBjb3N0IG9mIGNsYXVzZTsgLTEgaWYgbm90IHlldCBzZXQgKi8K KwlTZWxlY3Rpdml0eSBub3JtX3NlbGVjIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJ Lyogc2VsZWN0aXZpdHkgZm9yICJub3JtYWwiIChKT0lOX0lOTkVSKQogCQkJCQkJCQkgKiBz ZW1hbnRpY3M7IC0xIGlmIG5vdCB5ZXQgc2V0OyA+MSBtZWFucyBhCiAJCQkJCQkJCSAqIHJl ZHVuZGFudCBjbGF1c2UgKi8KLQlTZWxlY3Rpdml0eSBvdXRlcl9zZWxlYzsJLyogc2VsZWN0 aXZpdHkgZm9yIG91dGVyIGpvaW4gc2VtYW50aWNzOyAtMSBpZgorCVNlbGVjdGl2aXR5IG91 dGVyX3NlbGVjIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkvKiBzZWxlY3Rpdml0eSBm b3Igb3V0ZXIgam9pbiBzZW1hbnRpY3M7IC0xIGlmCiAJCQkJCQkJCSAqIG5vdCB5ZXQgc2V0 ICovCiAKIAkvKiB2YWxpZCBpZiBjbGF1c2UgaXMgbWVyZ2Vqb2luYWJsZSwgZWxzZSBOSUwg Ki8KLQlMaXN0CSAgICptZXJnZW9wZmFtaWxpZXM7CS8qIG9wZmFtaWxpZXMgY29udGFpbmlu ZyBjbGF1c2Ugb3BlcmF0b3IgKi8KKwlMaXN0CSAgICptZXJnZW9wZmFtaWxpZXMgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIG9wZmFtaWxpZXMgY29udGFpbmluZyBjbGF1c2Ug b3BlcmF0b3IgKi8KIAogCS8qIGNhY2hlIHNwYWNlIGZvciBtZXJnZWNsYXVzZSBwcm9jZXNz aW5nOyBOVUxMIGlmIG5vdCB5ZXQgc2V0ICovCi0JRXF1aXZhbGVuY2VDbGFzcyAqbGVmdF9l YzsJLyogRXF1aXZhbGVuY2VDbGFzcyBjb250YWluaW5nIGxlZnRoYW5kICovCi0JRXF1aXZh bGVuY2VDbGFzcyAqcmlnaHRfZWM7IC8qIEVxdWl2YWxlbmNlQ2xhc3MgY29udGFpbmluZyBy aWdodGhhbmQgKi8KLQlFcXVpdmFsZW5jZU1lbWJlciAqbGVmdF9lbTsgLyogRXF1aXZhbGVu Y2VNZW1iZXIgZm9yIGxlZnRoYW5kICovCi0JRXF1aXZhbGVuY2VNZW1iZXIgKnJpZ2h0X2Vt OwkvKiBFcXVpdmFsZW5jZU1lbWJlciBmb3IgcmlnaHRoYW5kICovCi0JTGlzdAkgICAqc2Nh bnNlbF9jYWNoZTsJLyogbGlzdCBvZiBNZXJnZVNjYW5TZWxDYWNoZSBzdHJ1Y3RzICovCisJ RXF1aXZhbGVuY2VDbGFzcyAqbGVmdF9lYyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlIHJl YWR3cml0ZV9pZ25vcmUpOwkvKiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5pbmcgbGVmdGhh bmQgKi8KKwlFcXVpdmFsZW5jZUNsYXNzICpyaWdodF9lYyBwZ19ub2RlX2F0dHIoZXF1YWxf aWdub3JlIHJlYWR3cml0ZV9pZ25vcmUpOyAvKiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5p bmcgcmlnaHRoYW5kICovCisJRXF1aXZhbGVuY2VNZW1iZXIgKmxlZnRfZW0gcGdfbm9kZV9h dHRyKGVxdWFsX2lnbm9yZSk7IC8qIEVxdWl2YWxlbmNlTWVtYmVyIGZvciBsZWZ0aGFuZCAq LworCUVxdWl2YWxlbmNlTWVtYmVyICpyaWdodF9lbSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdu b3JlKTsJLyogRXF1aXZhbGVuY2VNZW1iZXIgZm9yIHJpZ2h0aGFuZCAqLworCUxpc3QJICAg KnNjYW5zZWxfY2FjaGUgcGdfbm9kZV9hdHRyKGNvcHlfaWdub3JlIGVxdWFsX2lnbm9yZSk7 CS8qIGxpc3Qgb2YgTWVyZ2VTY2FuU2VsQ2FjaGUgc3RydWN0cyAqLwogCiAJLyogdHJhbnNp ZW50IHdvcmtzcGFjZSBmb3IgdXNlIHdoaWxlIGNvbnNpZGVyaW5nIGEgc3BlY2lmaWMgam9p biBwYXRoICovCi0JYm9vbAkJb3V0ZXJfaXNfbGVmdDsJLyogVCA9IG91dGVyIHZhciBvbiBs ZWZ0LCBGID0gb24gcmlnaHQgKi8KKwlib29sCQlvdXRlcl9pc19sZWZ0IHBnX25vZGVfYXR0 cihlcXVhbF9pZ25vcmUpOwkvKiBUID0gb3V0ZXIgdmFyIG9uIGxlZnQsIEYgPSBvbiByaWdo dCAqLwogCiAJLyogdmFsaWQgaWYgY2xhdXNlIGlzIGhhc2hqb2luYWJsZSwgZWxzZSBJbnZh bGlkT2lkOiAqLwotCU9pZAkJCWhhc2hqb2lub3BlcmF0b3I7CS8qIGNvcHkgb2YgY2xhdXNl IG9wZXJhdG9yICovCisJT2lkCQkJaGFzaGpvaW5vcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKTsJLyogY29weSBvZiBjbGF1c2Ugb3BlcmF0b3IgKi8KIAogCS8qIGNhY2hl IHNwYWNlIGZvciBoYXNoY2xhdXNlIHByb2Nlc3Npbmc7IC0xIGlmIG5vdCB5ZXQgc2V0ICov Ci0JU2VsZWN0aXZpdHkgbGVmdF9idWNrZXRzaXplOwkvKiBhdmcgYnVja2V0c2l6ZSBvZiBs ZWZ0IHNpZGUgKi8KLQlTZWxlY3Rpdml0eSByaWdodF9idWNrZXRzaXplOwkvKiBhdmcgYnVj a2V0c2l6ZSBvZiByaWdodCBzaWRlICovCi0JU2VsZWN0aXZpdHkgbGVmdF9tY3ZmcmVxOwkv KiBsZWZ0IHNpZGUncyBtb3N0IGNvbW1vbiB2YWwncyBmcmVxICovCi0JU2VsZWN0aXZpdHkg cmlnaHRfbWN2ZnJlcTsJLyogcmlnaHQgc2lkZSdzIG1vc3QgY29tbW9uIHZhbCdzIGZyZXEg Ki8KKwlTZWxlY3Rpdml0eSBsZWZ0X2J1Y2tldHNpemUgcGdfbm9kZV9hdHRyKGVxdWFsX2ln bm9yZSk7CS8qIGF2ZyBidWNrZXRzaXplIG9mIGxlZnQgc2lkZSAqLworCVNlbGVjdGl2aXR5 IHJpZ2h0X2J1Y2tldHNpemUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIGF2ZyBi dWNrZXRzaXplIG9mIHJpZ2h0IHNpZGUgKi8KKwlTZWxlY3Rpdml0eSBsZWZ0X21jdmZyZXEg cGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIGxlZnQgc2lkZSdzIG1vc3QgY29tbW9u IHZhbCdzIGZyZXEgKi8KKwlTZWxlY3Rpdml0eSByaWdodF9tY3ZmcmVxIHBnX25vZGVfYXR0 cihlcXVhbF9pZ25vcmUpOwkvKiByaWdodCBzaWRlJ3MgbW9zdCBjb21tb24gdmFsJ3MgZnJl cSAqLwogCiAJLyogaGFzaCBlcXVhbGl0eSBvcGVyYXRvcnMgdXNlZCBmb3IgbWVtb2l6ZSBu b2RlcywgZWxzZSBJbnZhbGlkT2lkICovCi0JT2lkCQkJbGVmdF9oYXNoZXFvcGVyYXRvcjsK LQlPaWQJCQlyaWdodF9oYXNoZXFvcGVyYXRvcjsKKwlPaWQJCQlsZWZ0X2hhc2hlcW9wZXJh dG9yIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOworCU9pZAkJCXJpZ2h0X2hhc2hlcW9w ZXJhdG9yIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwogfSBSZXN0cmljdEluZm87CiAK IC8qCkBAIC0yMTgxLDggKzIxODEsOCBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZVNjYW5TZWxD YWNoZQogdHlwZWRlZiBzdHJ1Y3QgUGxhY2VIb2xkZXJWYXIKIHsKIAlFeHByCQl4cHI7Ci0J RXhwcgkgICAqcGhleHByOwkJCS8qIHRoZSByZXByZXNlbnRlZCBleHByZXNzaW9uICovCi0J UmVsaWRzCQlwaHJlbHM7CQkJLyogYmFzZSByZWxpZHMgc3ludGFjdGljYWxseSB3aXRoaW4g ZXhwciBzcmMgKi8KKwlFeHByCSAgICpwaGV4cHIgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9y ZSk7CQkJLyogdGhlIHJlcHJlc2VudGVkIGV4cHJlc3Npb24gKi8KKwlSZWxpZHMJCXBocmVs cyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCQkvKiBiYXNlIHJlbGlkcyBzeW50YWN0 aWNhbGx5IHdpdGhpbiBleHByIHNyYyAqLwogCUluZGV4CQlwaGlkOwkJCS8qIElEIGZvciBQ SFYgKHVuaXF1ZSB3aXRoaW4gcGxhbm5lciBydW4pICovCiAJSW5kZXgJCXBobGV2ZWxzdXA7 CQkvKiA+IDAgaWYgUEhWIGJlbG9uZ3MgdG8gb3V0ZXIgcXVlcnkgKi8KIH0gUGxhY2VIb2xk ZXJWYXI7CkBAIC0yMzQzLDcgKzIzNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBBcHBlbmRSZWxJ bmZvCiAJICogY2hpbGQgY29sdW1uIGlzIGRyb3BwZWQgb3IgZG9lc24ndCBleGlzdCBpbiB0 aGUgcGFyZW50LgogCSAqLwogCWludAkJCW51bV9jaGlsZF9jb2xzOyAvKiBsZW5ndGggb2Yg YXJyYXkgKi8KLQlBdHRyTnVtYmVyICpwYXJlbnRfY29sbm9zOwkvKiBhcnJheSBvZiBwYXJl bnQgYXR0bm9zLCBvciB6ZXJvZXMgKi8KKwlBdHRyTnVtYmVyICpwYXJlbnRfY29sbm9zIHBn X25vZGVfYXR0cihhcnJheV9zaXplKG51bV9jaGlsZF9jb2xzKSk7CS8qIGFycmF5IG9mIHBh cmVudCBhdHRub3MsIG9yIHplcm9lcyAqLwogCiAJLyoKIAkgKiBXZSBzdG9yZSB0aGUgcGFy ZW50IHRhYmxlJ3MgT0lEIGhlcmUgZm9yIGluaGVyaXRhbmNlLCBvciBJbnZhbGlkT2lkIGZv cgpAQCAtMjQzMSw3ICsyNDMxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTWluTWF4QWdnSW5mbwog CU9pZAkJCWFnZ2Zub2lkOwkJLyogcGdfcHJvYyBPaWQgb2YgdGhlIGFnZ3JlZ2F0ZSAqLwog CU9pZAkJCWFnZ3NvcnRvcDsJCS8qIE9pZCBvZiBpdHMgc29ydCBvcGVyYXRvciAqLwogCUV4 cHIJICAgKnRhcmdldDsJCQkvKiBleHByZXNzaW9uIHdlIGFyZSBhZ2dyZWdhdGluZyBvbiAq LwotCVBsYW5uZXJJbmZvICpzdWJyb290OwkJLyogbW9kaWZpZWQgInJvb3QiIGZvciBwbGFu bmluZyB0aGUgc3VicXVlcnkgKi8KKwlQbGFubmVySW5mbyAqc3Vicm9vdCBwZ19ub2RlX2F0 dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkvKiBtb2RpZmllZCAicm9vdCIgZm9yIHBsYW5uaW5n IHRoZSBzdWJxdWVyeSAqLwogCVBhdGgJICAgKnBhdGg7CQkJLyogYWNjZXNzIHBhdGggZm9y IHN1YnF1ZXJ5ICovCiAJQ29zdAkJcGF0aGNvc3Q7CQkvKiBlc3RpbWF0ZWQgY29zdCB0byBm ZXRjaCBmaXJzdCByb3cgKi8KIAlQYXJhbQkgICAqcGFyYW07CQkJLyogcGFyYW0gZm9yIHN1 YnBsYW4ncyBvdXRwdXQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5u b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYmUzYzMwNzA0 YS4uYjc3MmQ5MWUyZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTI3NSwxMCArMjc1 LDEwIEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAJTGlzdAkgICAqbWVyZ2VwbGFu czsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIGp1c3QgbGlrZSB0aGUgc29ydC1rZXkgaW5mbyBp biBzdHJ1Y3QgU29ydDogKi8KIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIHNvcnQt a2V5IGNvbHVtbnMgKi8KLQlBdHRyTnVtYmVyICpzb3J0Q29sSWR4OwkJLyogdGhlaXIgaW5k ZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICpzb3J0T3BlcmF0b3JzOwkv KiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpjb2xs YXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0JYm9vbAkgICAqbnVsbHNGaXJz dDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLworCUF0dHJOdW1iZXIgKnNv cnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIg aW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpzb3J0T3BlcmF0b3Jz IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJLyogT0lEcyBvZiBvcGVyYXRv cnMgdG8gc29ydCB0aGVtIGJ5ICovCisJT2lkCQkgICAqY29sbGF0aW9ucyBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBPSURzIG9mIGNvbGxhdGlvbnMgKi8KKwli b29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJ CS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwogCS8qIEluZm8gZm9yIHJ1bi10 aW1lIHN1YnBsYW4gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLwog CXN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsKIH0gTWVyZ2VB cHBlbmQ7CkBAIC0yOTgsOSArMjk4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVjdXJzaXZlVW5p b24KIAkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSB6ZXJvL251bGwgaW4gVU5JT04gQUxMIGNh c2UgKi8KIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIGNvbHVtbnMgdG8gY2hlY2sg Zm9yCiAJCQkJCQkJCSAqIGR1cGxpY2F0ZS1uZXNzICovCi0JQXR0ck51bWJlciAqZHVwQ29s SWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAg ICpkdXBPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGgg Ki8KLQlPaWQJCSAgICpkdXBDb2xsYXRpb25zOworCUF0dHJOdW1iZXIgKmR1cENvbElkeCBw Z19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGlu IHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKmR1cE9wZXJhdG9ycyBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21w YXJlIHdpdGggKi8KKwlPaWQJCSAgICpkdXBDb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsKIAlsb25nCQludW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVt YmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogfSBSZWN1cnNpdmVVbmlvbjsKIApAQCAtNzUw LDEwICs3NTAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VKb2luCiAJYm9vbAkJc2tpcF9t YXJrX3Jlc3RvcmU7CS8qIENhbiB3ZSBza2lwIG1hcmsvcmVzdG9yZSBjYWxscz8gKi8KIAlM aXN0CSAgICptZXJnZWNsYXVzZXM7CS8qIG1lcmdlY2xhdXNlcyBhcyBleHByZXNzaW9uIHRy ZWVzICovCiAJLyogdGhlc2UgYXJlIGFycmF5cywgYnV0IGhhdmUgdGhlIHNhbWUgbGVuZ3Ro IGFzIHRoZSBtZXJnZWNsYXVzZXMgbGlzdDogKi8KLQlPaWQJCSAgICptZXJnZUZhbWlsaWVz OwkvKiBwZXItY2xhdXNlIE9JRHMgb2YgYnRyZWUgb3BmYW1pbGllcyAqLwotCU9pZAkJICAg Km1lcmdlQ29sbGF0aW9uczsJLyogcGVyLWNsYXVzZSBPSURzIG9mIGNvbGxhdGlvbnMgKi8K LQlpbnQJCSAgICptZXJnZVN0cmF0ZWdpZXM7CS8qIHBlci1jbGF1c2Ugb3JkZXJpbmcgKEFT QyBvciBERVNDKSAqLwotCWJvb2wJICAgKm1lcmdlTnVsbHNGaXJzdDsJLyogcGVyLWNsYXVz ZSBudWxscyBvcmRlcmluZyAqLworCU9pZAkJICAgKm1lcmdlRmFtaWxpZXMgcGdfbm9kZV9h dHRyKGFycmF5X3NpemUobWVyZ2VjbGF1c2VzKSk7CS8qIHBlci1jbGF1c2UgT0lEcyBvZiBi dHJlZSBvcGZhbWlsaWVzICovCisJT2lkCQkgICAqbWVyZ2VDb2xsYXRpb25zIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG1lcmdlY2xhdXNlcykpOwkvKiBwZXItY2xhdXNlIE9JRHMgb2Yg Y29sbGF0aW9ucyAqLworCWludAkJICAgKm1lcmdlU3RyYXRlZ2llcyBwZ19ub2RlX2F0dHIo YXJyYXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsJLyogcGVyLWNsYXVzZSBvcmRlcmluZyAoQVND IG9yIERFU0MpICovCisJYm9vbAkgICAqbWVyZ2VOdWxsc0ZpcnN0IHBnX25vZGVfYXR0cihh cnJheV9zaXplKG1lcmdlY2xhdXNlcykpOwkvKiBwZXItY2xhdXNlIG51bGxzIG9yZGVyaW5n ICovCiB9IE1lcmdlSm9pbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzkzLDggKzc5 Myw4IEBAIHR5cGVkZWYgc3RydWN0IE1lbW9pemUKIAogCWludAkJCW51bUtleXM7CQkvKiBz aXplIG9mIHRoZSB0d28gYXJyYXlzIGJlbG93ICovCiAKLQlPaWQJCSAgICpoYXNoT3BlcmF0 b3JzOwkvKiBoYXNoIG9wZXJhdG9ycyBmb3IgZWFjaCBrZXkgKi8KLQlPaWQJCSAgICpjb2xs YXRpb25zOwkJLyogY2FjaGUga2V5cyAqLworCU9pZAkJICAgKmhhc2hPcGVyYXRvcnMgcGdf bm9kZV9hdHRyKGFycmF5X3NpemUobnVtS2V5cykpOwkvKiBoYXNoIG9wZXJhdG9ycyBmb3Ig ZWFjaCBrZXkgKi8KKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9z aXplKG51bUtleXMpKTsJCS8qIGNhY2hlIGtleXMgKi8KIAlMaXN0CSAgICpwYXJhbV9leHBy czsJLyogZXhwcnMgY29udGFpbmluZyBwYXJhbWV0ZXJzICovCiAJYm9vbAkJc2luZ2xlcm93 OwkJLyogdHJ1ZSBpZiB0aGUgY2FjaGUgZW50cnkgc2hvdWxkIGJlIG1hcmtlZCBhcwogCQkJ CQkJCQkgKiBjb21wbGV0ZSBhZnRlciB3ZSBzdG9yZSB0aGUgZmlyc3QgdHVwbGUgaW4KQEAg LTgxNSwxMCArODE1LDEwIEBAIHR5cGVkZWYgc3RydWN0IFNvcnQKIHsKIAlQbGFuCQlwbGFu OwogCWludAkJCW51bUNvbHM7CQkvKiBudW1iZXIgb2Ygc29ydC1rZXkgY29sdW1ucyAqLwot CUF0dHJOdW1iZXIgKnNvcnRDb2xJZHg7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJn ZXQgbGlzdCAqLwotCU9pZAkJICAgKnNvcnRPcGVyYXRvcnM7CS8qIE9JRHMgb2Ygb3BlcmF0 b3JzIHRvIHNvcnQgdGhlbSBieSAqLwotCU9pZAkJICAgKmNvbGxhdGlvbnM7CQkvKiBPSURz IG9mIGNvbGxhdGlvbnMgKi8KLQlib29sCSAgICpudWxsc0ZpcnN0OwkJLyogTlVMTFMgRklS U1QvTEFTVCBkaXJlY3Rpb25zICovCisJQXR0ck51bWJlciAqc29ydENvbElkeCBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0 YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKnNvcnRPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnVtQ29scykpOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0g YnkgKi8KKwlPaWQJCSAgICpjb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51 bUNvbHMpKTsJCS8qIE9JRHMgb2YgY29sbGF0aW9ucyAqLworCWJvb2wJICAgKm51bGxzRmly c3QgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogTlVMTFMgRklSU1Qv TEFTVCBkaXJlY3Rpb25zICovCiB9IFNvcnQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAg LTg0MSw5ICs4NDEsOSBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cAogewogCVBsYW4JCXBsYW47 CiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBncm91cGluZyBjb2x1bW5zICovCi0J QXR0ck51bWJlciAqZ3JwQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0 IGxpc3QgKi8KLQlPaWQJCSAgICpncnBPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9y cyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpncnBDb2xsYXRpb25zOworCUF0dHJO dW1iZXIgKmdycENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkv KiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKmdycE9w ZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIGVxdWFsaXR5 IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAgICpncnBDb2xsYXRpb25z IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIH0gR3JvdXA7CiAKIC8qIC0t LS0tLS0tLS0tLS0tLQpAQCAtODY2LDkgKzg2Niw5IEBAIHR5cGVkZWYgc3RydWN0IEFnZwog CUFnZ1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5OwkvKiBiYXNpYyBzdHJhdGVneSwgc2VlIG5vZGVz LmggKi8KIAlBZ2dTcGxpdAlhZ2dzcGxpdDsJCS8qIGFnZy1zcGxpdHRpbmcgbW9kZSwgc2Vl IG5vZGVzLmggKi8KIAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIGdyb3VwaW5nIGNv bHVtbnMgKi8KLQlBdHRyTnVtYmVyICpncnBDb2xJZHg7CQkvKiB0aGVpciBpbmRleGVzIGlu IHRoZSB0YXJnZXQgbGlzdCAqLwotCU9pZAkJICAgKmdycE9wZXJhdG9yczsJLyogZXF1YWxp dHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKmdycENvbGxhdGlv bnM7CisJQXR0ck51bWJlciAqZ3JwQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51 bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lk CQkgICAqZ3JwT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJ LyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLworCU9pZAkJICAgKmdy cENvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCWxvbmcJ CW51bUdyb3VwczsJCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgZ3JvdXBzIGluIGlucHV0ICov CiAJdWludDY0CQl0cmFuc2l0aW9uU3BhY2U7CS8qIGZvciBwYXNzLWJ5LXJlZiB0cmFuc2l0 aW9uIGRhdGEgKi8KIAlCaXRtYXBzZXQgICphZ2dQYXJhbXM7CQkvKiBJRHMgb2YgUGFyYW1z IHVzZWQgaW4gQWdncmVmIGlucHV0cyAqLwpAQCAtODg2LDEzICs4ODYsMTMgQEAgdHlwZWRl ZiBzdHJ1Y3QgV2luZG93QWdnCiAJUGxhbgkJcGxhbjsKIAlJbmRleAkJd2lucmVmOwkJCS8q IElEIHJlZmVyZW5jZWQgYnkgd2luZG93IGZ1bmN0aW9ucyAqLwogCWludAkJCXBhcnROdW1D b2xzOwkvKiBudW1iZXIgb2YgY29sdW1ucyBpbiBwYXJ0aXRpb24gY2xhdXNlICovCi0JQXR0 ck51bWJlciAqcGFydENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBs aXN0ICovCi0JT2lkCQkgICAqcGFydE9wZXJhdG9yczsJLyogZXF1YWxpdHkgb3BlcmF0b3Jz IGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLwotCU9pZAkJICAgKnBhcnRDb2xsYXRpb25zOyAv KiBjb2xsYXRpb25zIGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLworCUF0dHJOdW1iZXIgKnBh cnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUocGFydE51bUNvbHMpKTsJCS8qIHRo ZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lkCQkgICAqcGFydE9wZXJh dG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShwYXJ0TnVtQ29scykpOwkvKiBlcXVhbGl0 eSBvcGVyYXRvcnMgZm9yIHBhcnRpdGlvbiBjb2x1bW5zICovCisJT2lkCQkgICAqcGFydENv bGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUocGFydE51bUNvbHMpKTsgLyogY29s bGF0aW9ucyBmb3IgcGFydGl0aW9uIGNvbHVtbnMgKi8KIAlpbnQJCQlvcmROdW1Db2xzOwkJ LyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gb3JkZXJpbmcgY2xhdXNlICovCi0JQXR0ck51bWJl ciAqb3JkQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8K LQlPaWQJCSAgICpvcmRPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyBmb3Igb3Jk ZXJpbmcgY29sdW1ucyAqLwotCU9pZAkJICAgKm9yZENvbGxhdGlvbnM7CS8qIGNvbGxhdGlv bnMgZm9yIG9yZGVyaW5nIGNvbHVtbnMgKi8KKwlBdHRyTnVtYmVyICpvcmRDb2xJZHggcGdf bm9kZV9hdHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBp biB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpvcmRPcGVyYXRvcnMgcGdfbm9kZV9h dHRyKGFycmF5X3NpemUob3JkTnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgZm9y IG9yZGVyaW5nIGNvbHVtbnMgKi8KKwlPaWQJCSAgICpvcmRDb2xsYXRpb25zIHBnX25vZGVf YXR0cihhcnJheV9zaXplKG9yZE51bUNvbHMpKTsJLyogY29sbGF0aW9ucyBmb3Igb3JkZXJp bmcgY29sdW1ucyAqLwogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNlIG9w dGlvbnMsIHNlZSBXaW5kb3dEZWYgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNldDsJLyogZXhw cmVzc2lvbiBmb3Igc3RhcnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJICAgKmVuZE9m ZnNldDsJCS8qIGV4cHJlc3Npb24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55ICovCkBAIC05 MTIsOSArOTEyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgVW5pcXVlCiB7CiAJUGxhbgkJcGxhbjsK IAlpbnQJCQludW1Db2xzOwkJLyogbnVtYmVyIG9mIGNvbHVtbnMgdG8gY2hlY2sgZm9yIHVu aXF1ZW5lc3MgKi8KLQlBdHRyTnVtYmVyICp1bmlxQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhl cyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICp1bmlxT3BlcmF0b3JzOwkvKiBl cXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqdW5pcUNv bGxhdGlvbnM7IC8qIGNvbGxhdGlvbnMgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zICovCisJ QXR0ck51bWJlciAqdW5pcUNvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xz KSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAg KnVuaXFPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkvKiBl cXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCisJT2lkCQkgICAqdW5pcUNv bGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOyAvKiBjb2xsYXRp b25zIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucyAqLwogfSBVbmlxdWU7CiAKIC8qIC0tLS0t LS0tLS0tLQpAQCAtOTUwLDEwICs5NTAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgR2F0aGVyTWVy Z2UKIAlpbnQJCQlyZXNjYW5fcGFyYW07CS8qIElEIG9mIFBhcmFtIHRoYXQgc2lnbmFscyBh IHJlc2Nhbiwgb3IgLTEgKi8KIAkvKiByZW1haW5pbmcgZmllbGRzIGFyZSBqdXN0IGxpa2Ug dGhlIHNvcnQta2V5IGluZm8gaW4gc3RydWN0IFNvcnQgKi8KIAlpbnQJCQludW1Db2xzOwkJ LyogbnVtYmVyIG9mIHNvcnQta2V5IGNvbHVtbnMgKi8KLQlBdHRyTnVtYmVyICpzb3J0Q29s SWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAg ICpzb3J0T3BlcmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBzb3J0IHRoZW0gYnkg Ki8KLQlPaWQJCSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCi0J Ym9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAq LworCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVt Q29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJ CSAgICpzb3J0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJ LyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCisJT2lkCQkgICAqY29s bGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBPSURzIG9m IGNvbGxhdGlvbnMgKi8KKwlib29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG51bUNvbHMpKTsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGlyZWN0aW9ucyAqLwog CUJpdG1hcHNldCAgKmluaXRQYXJhbTsJCS8qIHBhcmFtIGlkJ3Mgb2YgaW5pdHBsYW5zIHdo aWNoIGFyZSByZWZlcnJlZAogCQkJCQkJCQkgKiBhdCBnYXRoZXIgbWVyZ2Ugb3Igb25lIG9m IGl0J3MgY2hpbGQgbm9kZSAqLwogfSBHYXRoZXJNZXJnZTsKQEAgLTk5Myw5ICs5OTMsOSBA QCB0eXBlZGVmIHN0cnVjdCBTZXRPcAogCVNldE9wU3RyYXRlZ3kgc3RyYXRlZ3k7CQkvKiBo b3cgdG8gZG8gaXQsIHNlZSBub2Rlcy5oICovCiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJl ciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZvcgogCQkJCQkJCQkgKiBkdXBsaWNhdGUtbmVzcyAq LwotCUF0dHJOdW1iZXIgKmR1cENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRh cmdldCBsaXN0ICovCi0JT2lkCQkgICAqZHVwT3BlcmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVy YXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqZHVwQ29sbGF0aW9uczsKKwlB dHRyTnVtYmVyICpkdXBDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykp OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpk dXBPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkvKiBlcXVh bGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCisJT2lkCQkgICAqZHVwQ29sbGF0 aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiAJQXR0ck51bWJlcglm bGFnQ29sSWR4OwkJLyogd2hlcmUgaXMgdGhlIGZsYWcgY29sdW1uLCBpZiBhbnkgKi8KIAlp bnQJCQlmaXJzdEZsYWc7CQkvKiBmbGFnIHZhbHVlIGZvciBmaXJzdCBpbnB1dCByZWxhdGlv biAqLwogCWxvbmcJCW51bUdyb3VwczsJCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgZ3JvdXBz IGluIGlucHV0ICovCkBAIC0xMDMxLDkgKzEwMzEsOSBAQCB0eXBlZGVmIHN0cnVjdCBMaW1p dAogCU5vZGUJICAgKmxpbWl0Q291bnQ7CQkvKiBDT1VOVCBwYXJhbWV0ZXIsIG9yIE5VTEwg aWYgbm9uZSAqLwogCUxpbWl0T3B0aW9uIGxpbWl0T3B0aW9uOwkvKiBsaW1pdCB0eXBlICov CiAJaW50CQkJdW5pcU51bUNvbHM7CS8qIG51bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZv ciBzaW1pbGFyaXR5ICAqLwotCUF0dHJOdW1iZXIgKnVuaXFDb2xJZHg7CQkvKiB0aGVpciBp bmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwotCU9pZAkJICAgKnVuaXFPcGVyYXRvcnM7 CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICp1 bmlxQ29sbGF0aW9uczsgLyogY29sbGF0aW9ucyBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMg Ki8KKwlBdHRyTnVtYmVyICp1bmlxQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKHVu aXFOdW1Db2xzKSk7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwor CU9pZAkJICAgKnVuaXFPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUodW5pcU51 bUNvbHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLworCU9p ZAkJICAgKnVuaXFDb2xsYXRpb25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKHVuaXFOdW1D b2xzKSk7IC8qIGNvbGxhdGlvbnMgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zICovCiB9IExp bWl0OwogCiAKQEAgLTExOTIsOSArMTE5Miw5IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlv bmVkUmVsUHJ1bmVJbmZvCiAJQml0bWFwc2V0ICAqcHJlc2VudF9wYXJ0czsJLyogSW5kZXhl cyBvZiBhbGwgcGFydGl0aW9ucyB3aGljaCBzdWJwbGFucyBvcgogCQkJCQkJCQkgKiBzdWJw YXJ0cyBhcmUgcHJlc2VudCBmb3IgKi8KIAlpbnQJCQlucGFydHM7CQkJLyogTGVuZ3RoIG9m IHRoZSBmb2xsb3dpbmcgYXJyYXlzOiAqLwotCWludAkJICAgKnN1YnBsYW5fbWFwOwkvKiBz dWJwbGFuIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgLTEgKi8KLQlpbnQJCSAgICpz dWJwYXJ0X21hcDsJLyogc3VicGFydCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0x ICovCi0JT2lkCQkgICAqcmVsaWRfbWFwOwkJLyogcmVsYXRpb24gT0lEIGJ5IHBhcnRpdGlv biBpbmRleCwgb3IgMCAqLworCWludAkJICAgKnN1YnBsYW5fbWFwIHBnX25vZGVfYXR0cihh cnJheV9zaXplKG5wYXJ0cykpOwkvKiBzdWJwbGFuIGluZGV4IGJ5IHBhcnRpdGlvbiBpbmRl eCwgb3IgLTEgKi8KKwlpbnQJCSAgICpzdWJwYXJ0X21hcCBwZ19ub2RlX2F0dHIoYXJyYXlf c2l6ZShucGFydHMpKTsJLyogc3VicGFydCBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9y IC0xICovCisJT2lkCQkgICAqcmVsaWRfbWFwIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5w YXJ0cykpOwkJLyogcmVsYXRpb24gT0lEIGJ5IHBhcnRpdGlvbiBpbmRleCwgb3IgMCAqLwog CiAJLyoKIAkgKiBpbml0aWFsX3BydW5pbmdfc3RlcHMgc2hvd3MgaG93IHRvIHBydW5lIGR1 cmluZyBleGVjdXRvciBzdGFydHVwIChpLmUuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcHJpbW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRl eCA0MzM0Mzc2NDNlLi5kOGFiZDk4YjU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAt NjMsNyArNjMsNyBAQCB0eXBlZGVmIGVudW0gT25Db21taXRBY3Rpb24KIHR5cGVkZWYgc3Ry dWN0IFJhbmdlVmFyCiB7CiAJTm9kZVRhZwkJdHlwZTsKLQljaGFyCSAgICpjYXRhbG9nbmFt ZTsJLyogdGhlIGNhdGFsb2cgKGRhdGFiYXNlKSBuYW1lLCBvciBOVUxMICovCisJY2hhcgkg ICAqY2F0YWxvZ25hbWUgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiB0aGUg Y2F0YWxvZyAoZGF0YWJhc2UpIG5hbWUsIG9yIE5VTEwgKi8KIAljaGFyCSAgICpzY2hlbWFu YW1lOwkJLyogdGhlIHNjaGVtYSBuYW1lLCBvciBOVUxMICovCiAJY2hhcgkgICAqcmVsbmFt ZTsJCS8qIHRoZSByZWxhdGlvbi9zZXF1ZW5jZSBuYW1lICovCiAJYm9vbAkJaW5oOwkJCS8q IGV4cGFuZCByZWwgYnkgaW5oZXJpdGFuY2U/IHJlY3Vyc2l2ZWx5IGFjdApAQCAtMTk2LDgg KzE5Niw4IEBAIHR5cGVkZWYgc3RydWN0IFZhcgogCUluZGV4CQl2YXJsZXZlbHN1cDsJLyog Zm9yIHN1YnF1ZXJ5IHZhcmlhYmxlcyByZWZlcmVuY2luZyBvdXRlcgogCQkJCQkJCQkgKiBy ZWxhdGlvbnM7IDAgaW4gYSBub3JtYWwgdmFyLCA+MCBtZWFucyBOCiAJCQkJCQkJCSAqIGxl dmVscyB1cCAqLwotCUluZGV4CQl2YXJub3N5bjsJCS8qIHN5bnRhY3RpYyByZWxhdGlvbiBp bmRleCAoMCBpZiB1bmtub3duKSAqLwotCUF0dHJOdW1iZXIJdmFyYXR0bm9zeW47CS8qIHN5 bnRhY3RpYyBhdHRyaWJ1dGUgbnVtYmVyICovCisJSW5kZXgJCXZhcm5vc3luIHBnX25vZGVf YXR0cihlcXVhbF9pZ25vcmUpOwkJLyogc3ludGFjdGljIHJlbGF0aW9uIGluZGV4ICgwIGlm IHVua25vd24pICovCisJQXR0ck51bWJlcgl2YXJhdHRub3N5biBwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKTsJLyogc3ludGFjdGljIGF0dHJpYnV0ZSBudW1iZXIgKi8KIAlpbnQJCQls b2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiB9IFZh cjsKIApAQCAtMzI0LDcgKzMyNCw3IEBAIHR5cGVkZWYgc3RydWN0IEFnZ3JlZgogCU9pZAkJ CWFnZ3R5cGU7CQkvKiB0eXBlIE9pZCBvZiByZXN1bHQgb2YgdGhlIGFnZ3JlZ2F0ZSAqLwog CU9pZAkJCWFnZ2NvbGxpZDsJCS8qIE9JRCBvZiBjb2xsYXRpb24gb2YgcmVzdWx0ICovCiAJ T2lkCQkJaW5wdXRjb2xsaWQ7CS8qIE9JRCBvZiBjb2xsYXRpb24gdGhhdCBmdW5jdGlvbiBz aG91bGQgdXNlICovCi0JT2lkCQkJYWdndHJhbnN0eXBlOwkvKiB0eXBlIE9pZCBvZiBhZ2dy ZWdhdGUncyB0cmFuc2l0aW9uIHZhbHVlICovCisJT2lkCQkJYWdndHJhbnN0eXBlIHBnX25v ZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkvKiB0eXBlIE9pZCBvZiBhZ2dyZWdhdGUncyB0cmFu c2l0aW9uIHZhbHVlICovCiAJTGlzdAkgICAqYWdnYXJndHlwZXM7CS8qIHR5cGUgT2lkcyBv ZiBkaXJlY3QgYW5kIGFnZ3JlZ2F0ZWQgYXJncyAqLwogCUxpc3QJICAgKmFnZ2RpcmVjdGFy Z3M7CS8qIGRpcmVjdCBhcmd1bWVudHMsIGlmIGFuIG9yZGVyZWQtc2V0IGFnZyAqLwogCUxp c3QJICAgKmFyZ3M7CQkJLyogYWdncmVnYXRlZCBhcmd1bWVudHMgYW5kIHNvcnQgZXhwcmVz c2lvbnMgKi8KQEAgLTM3MSw4ICszNzEsOCBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cGluZ0Z1 bmMKIAlFeHByCQl4cHI7CiAJTGlzdAkgICAqYXJnczsJCQkvKiBhcmd1bWVudHMsIG5vdCBl dmFsdWF0ZWQgYnV0IGtlcHQgZm9yCiAJCQkJCQkJCSAqIGJlbmVmaXQgb2YgRVhQTEFJTiBl dGMuICovCi0JTGlzdAkgICAqcmVmczsJCQkvKiByZXNzb3J0Z3JvdXByZWZzIG9mIGFyZ3Vt ZW50cyAqLwotCUxpc3QJICAgKmNvbHM7CQkJLyogYWN0dWFsIGNvbHVtbiBwb3NpdGlvbnMg c2V0IGJ5IHBsYW5uZXIgKi8KKwlMaXN0CSAgICpyZWZzIHBnX25vZGVfYXR0cihlcXVhbF9p Z25vcmUpOwkJCS8qIHJlc3NvcnRncm91cHJlZnMgb2YgYXJndW1lbnRzICovCisJTGlzdAkg ICAqY29scyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJCQkvKiBhY3R1YWwgY29sdW1u IHBvc2l0aW9ucyBzZXQgYnkgcGxhbm5lciAqLwogCUluZGV4CQlhZ2dsZXZlbHN1cDsJLyog c2FtZSBhcyBBZ2dyZWYuYWdnbGV2ZWxzdXAgKi8KIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRv a2VuIGxvY2F0aW9uICovCiB9IEdyb3VwaW5nRnVuYzsKQEAgLTU0MCw3ICs1NDAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBPcEV4cHIKIHsKIAlFeHByCQl4cHI7CiAJT2lkCQkJb3BubzsJCQkv KiBQR19PUEVSQVRPUiBPSUQgb2YgdGhlIG9wZXJhdG9yICovCi0JT2lkCQkJb3BmdW5jaWQ7 CQkvKiBQR19QUk9DIE9JRCBvZiB1bmRlcmx5aW5nIGZ1bmN0aW9uICovCisJT2lkCQkJb3Bm dW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsJCS8qIFBHX1BST0Mg T0lEIG9mIHVuZGVybHlpbmcgZnVuY3Rpb24gKi8KIAlPaWQJCQlvcHJlc3VsdHR5cGU7CS8q IFBHX1RZUEUgT0lEIG9mIHJlc3VsdCB2YWx1ZSAqLwogCWJvb2wJCW9wcmV0c2V0OwkJLyog dHJ1ZSBpZiBvcGVyYXRvciByZXR1cm5zIHNldCAqLwogCU9pZAkJCW9wY29sbGlkOwkJLyog T0lEIG9mIGNvbGxhdGlvbiBvZiByZXN1bHQgKi8KQEAgLTU5Nyw5ICs1OTcsOSBAQCB0eXBl ZGVmIHN0cnVjdCBTY2FsYXJBcnJheU9wRXhwcgogewogCUV4cHIJCXhwcjsKIAlPaWQJCQlv cG5vOwkJCS8qIFBHX09QRVJBVE9SIE9JRCBvZiB0aGUgb3BlcmF0b3IgKi8KLQlPaWQJCQlv cGZ1bmNpZDsJCS8qIFBHX1BST0MgT0lEIG9mIGNvbXBhcmlzb24gZnVuY3Rpb24gKi8KLQlP aWQJCQloYXNoZnVuY2lkOwkJLyogUEdfUFJPQyBPSUQgb2YgaGFzaCBmdW5jIG9yIEludmFs aWRPaWQgKi8KLQlPaWQJCQluZWdmdW5jaWQ7CQkvKiBQR19QUk9DIE9JRCBvZiBuZWdhdG9y IG9mIG9wZnVuY2lkIGZ1bmN0aW9uCisJT2lkCQkJb3BmdW5jaWQgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZV9pZl96ZXJvKTsJCS8qIFBHX1BST0MgT0lEIG9mIGNvbXBhcmlzb24gZnVu Y3Rpb24gKi8KKwlPaWQJCQloYXNoZnVuY2lkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmVf aWZfemVybyk7CQkvKiBQR19QUk9DIE9JRCBvZiBoYXNoIGZ1bmMgb3IgSW52YWxpZE9pZCAq LworCU9pZAkJCW5lZ2Z1bmNpZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlX2lmX3plcm8p OwkJLyogUEdfUFJPQyBPSUQgb2YgbmVnYXRvciBvZiBvcGZ1bmNpZCBmdW5jdGlvbgogCQkJ CQkJCQkgKiBvciBJbnZhbGlkT2lkLiAgU2VlIGFib3ZlICovCiAJYm9vbAkJdXNlT3I7CQkJ LyogdHJ1ZSBmb3IgQU5ZLCBmYWxzZSBmb3IgQUxMICovCiAJT2lkCQkJaW5wdXRjb2xsaWQ7 CS8qIE9JRCBvZiBjb2xsYXRpb24gdGhhdCBvcGVyYXRvciBzaG91bGQgdXNlICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9wZ19jb25maWdfbWFudWFsLmggYi9zcmMvaW5jbHVkZS9w Z19jb25maWdfbWFudWFsLmgKaW5kZXggNDI3ZmZhYmQxNC4uYjcyZmYzNzk0ZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVhbC5oCisrKyBiL3NyYy9pbmNsdWRl L3BnX2NvbmZpZ19tYW51YWwuaApAQCAtMzcxLDE0ICszNzEsMTQgQEAKICAqIGNvcHlPYmpl Y3QoKSwgdG8gZmFjaWxpdGF0ZSBjYXRjaGluZyBlcnJvcnMgYW5kIG9taXNzaW9ucyBpbgog ICogY29weU9iamVjdCgpLgogICovCi0vKiAjZGVmaW5lIENPUFlfUEFSU0VfUExBTl9UUkVF UyAqLworI2RlZmluZSBDT1BZX1BBUlNFX1BMQU5fVFJFRVMKIAogLyoKICAqIERlZmluZSB0 aGlzIHRvIGZvcmNlIGFsbCBwYXJzZSBhbmQgcGxhbiB0cmVlcyB0byBiZSBwYXNzZWQgdGhy b3VnaAogICogb3V0ZnVuY3MuYy9yZWFkZnVuY3MuYywgdG8gZmFjaWxpdGF0ZSBjYXRjaGlu ZyBlcnJvcnMgYW5kIG9taXNzaW9ucyBpbgogICogdGhvc2UgbW9kdWxlcy4KICAqLwotLyog I2RlZmluZSBXUklURV9SRUFEX1BBUlNFX1BMQU5fVFJFRVMgKi8KKyNkZWZpbmUgV1JJVEVf UkVBRF9QQVJTRV9QTEFOX1RSRUVTCiAKIC8qCiAgKiBEZWZpbmUgdGhpcyB0byBmb3JjZSBh bGwgcmF3IHBhcnNlIHRyZWVzIGZvciBETUwgc3RhdGVtZW50cyB0byBiZSBzY2FubmVkCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L3JlbC5oCmluZGV4IDMxMjgxMjc5Y2YuLjIwZmJhODRhOTkgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3V0aWxzL3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC0y NzMsOSArMjczLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktleUNhY2hlSW5mbwogCU9p ZAkJCWNvbmZyZWxpZDsJCS8qIHJlbGF0aW9uIHJlZmVyZW5jZWQgYnkgdGhlIGZvcmVpZ24g a2V5ICovCiAJaW50CQkJbmtleXM7CQkJLyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGZv cmVpZ24ga2V5ICovCiAJLyogdGhlc2UgYXJyYXlzIGVhY2ggaGF2ZSBua2V5cyB2YWxpZCBl bnRyaWVzOiAqLwotCUF0dHJOdW1iZXIJY29ua2V5W0lOREVYX01BWF9LRVlTXTsgLyogY29s cyBpbiByZWZlcmVuY2luZyB0YWJsZSAqLwotCUF0dHJOdW1iZXIJY29uZmtleVtJTkRFWF9N QVhfS0VZU107CS8qIGNvbHMgaW4gcmVmZXJlbmNlZCB0YWJsZSAqLwotCU9pZAkJCWNvbnBm ZXFvcFtJTkRFWF9NQVhfS0VZU107CS8qIFBLID0gRksgb3BlcmF0b3IgT0lEcyAqLworCUF0 dHJOdW1iZXIJY29ua2V5W0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShua2V5cykpOyAvKiBjb2xzIGluIHJlZmVyZW5jaW5nIHRhYmxlICovCisJQXR0ck51bWJl cgljb25ma2V5W0lOREVYX01BWF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5 cykpOwkvKiBjb2xzIGluIHJlZmVyZW5jZWQgdGFibGUgKi8KKwlPaWQJCQljb25wZmVxb3Bb SU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5rZXlzKSk7CS8qIFBL ID0gRksgb3BlcmF0b3IgT0lEcyAqLwogfSBGb3JlaWduS2V5Q2FjaGVJbmZvOwogCiAKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtIGIvc3JjL3Rvb2xzL21zdmMv U29sdXRpb24ucG0KaW5kZXggMmM4Y2Q1MjFlOS4uMjkwMTk3ZWQ0ZCAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0KKysrIGIvc3JjL3Rvb2xzL21zdmMvU29sdXRp b24ucG0KQEAgLTgzMiw2ICs4MzIsNTIgQEAgRU9GCiAJCWNsb3NlKCRjaHMpOwogCX0KIAor CWlmIChJc05ld2VyKCdzcmMvYmFja2VuZC9ub2Rlcy9ub2RlLXN1cHBvcnQtc3RhbXAnLAor CQknc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbCcpKQorCXsKKwkJIyBY WFggZHVwbGljYXRlcyBzcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZQorCisJCW15IEBub2Rl X2hlYWRlcnMgPSBxdygKKwkJCW5vZGVzL25vZGVzLmgKKwkJCW5vZGVzL2V4ZWNub2Rlcy5o CisJCQlub2Rlcy9wbGFubm9kZXMuaAorCQkJbm9kZXMvcHJpbW5vZGVzLmgKKwkJCW5vZGVz L3BhdGhub2Rlcy5oCisJCQlub2Rlcy9leHRlbnNpYmxlLmgKKwkJCW5vZGVzL3BhcnNlbm9k ZXMuaAorCQkJbm9kZXMvcmVwbG5vZGVzLmgKKwkJCW5vZGVzL3ZhbHVlLmgKKwkJCWNvbW1h bmRzL3RyaWdnZXIuaAorCQkJY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisJCQlmb3JlaWdu L2Zkd2FwaS5oCisJCQlhY2Nlc3MvYW1hcGkuaAorCQkJYWNjZXNzL3RhYmxlYW0uaAorCQkJ YWNjZXNzL3RzbWFwaS5oCisJCQl1dGlscy9yZWwuaAorCQkJbm9kZXMvc3VwcG9ydG5vZGVz LmgKKwkJCWV4ZWN1dG9yL3R1cHRhYmxlLmgKKwkJCW5vZGVzL2xvY2tvcHRpb25zLmgKKwkJ CWFjY2Vzcy9zZGlyLmgKKwkJKTsKKworCQljaGRpcignc3JjL2JhY2tlbmQvbm9kZXMnKTsK KworCQlteSBAbm9kZV9maWxlcyA9IG1hcCB7ICIuLi8uLi8uLi9zcmMvaW5jbHVkZS8kXyIg fSBAbm9kZV9oZWFkZXJzOworCisJCXN5c3RlbSgicGVybCBnZW5fbm9kZV9zdXBwb3J0LnBs IEBub2RlX2ZpbGVzIik7CisJCW9wZW4obXkgJGYsICc+JywgJ25vZGUtc3VwcG9ydC1zdGFt cCcpIHx8IGNvbmZlc3MgIkNvdWxkIG5vdCB0b3VjaCBub2RlLXN1cHBvcnQtc3RhbXAiOwor CQljbG9zZSgkZik7CisJCWNoZGlyKCcuLi8uLi8uLicpOworCX0KKworCWlmIChJc05ld2Vy KAorCQkJJ3NyYy9pbmNsdWRlL25vZGVzL25vZGV0YWdzLmgnLAorCQkJJ3NyYy9iYWNrZW5k L25vZGVzL25vZGV0YWdzLmgnKSkKKwl7CisJCWNvcHlGaWxlKCdzcmMvYmFja2VuZC9ub2Rl cy9ub2RldGFncy5oJywKKwkJCSdzcmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFncy5oJyk7CisJ fQorCiAJb3BlbihteSAkbywgJz4nLCAiZG9jL3NyYy9zZ21sL3ZlcnNpb24uc2dtbCIpCiAJ ICB8fCBjcm9hayAiQ291bGQgbm90IHdyaXRlIHRvIHZlcnNpb24uc2dtbFxuIjsKIAlwcmlu dCAkbyA8PEVPRjsKCmJhc2UtY29tbWl0OiBjYWI1YjlhYjJjMDY2YmE5MDRmMTNkZTI2ODE4 NzJkY2RhMzFlMjA3Ci0tIAoyLjM0LjEKCg== --------------0hTWC0E08GDb6l8e8y7n9Tfc--