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 1mZwCY-0003gl-Df for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Oct 2021 14:22:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mZwCX-0004Ho-44 for pgsql-hackers@arkaria.postgresql.org; Mon, 11 Oct 2021 14:22:49 +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 1mZwCV-0004Hc-Oe for pgsql-hackers@lists.postgresql.org; Mon, 11 Oct 2021 14:22:48 +0000 Received: from out5-smtp.messagingengine.com ([66.111.4.29]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mZwCN-00031h-03 for pgsql-hackers@postgresql.org; Mon, 11 Oct 2021 14:22:45 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id A7F635C019E for ; Mon, 11 Oct 2021 10:22:36 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Mon, 11 Oct 2021 10:22:36 -0400 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=fnzLn/ KZMq+VrMB1R/PKBQ/VC5q/uRM8RnJ5ceUaElo=; b=eA7vmNS5GdfaeOBRU+OhgC AQlKm39MSBYDS1b9WaYQo5ARS4sq5WIkbDVoCIYVoIQMaKa1e7nMcqD/9nmgrP6k vKjVa8yD+GEy52qkchfrA5P8WIId0wnNI2Z8xv6tnhLI4H6u3De4pmDhYTJo9/rf QraIRPBlbHB4orW1dmeMAR773snC4tQYa4eQO1ZPhH7RrXHUUfxJtNoMvokqKhum 13PRDzLOoQgb0JOMo2NsAAiXdo2C3VMVBK9BlUaNGzPhlR1SyJn7YQLvJhtDyz9K CZqXoZejUXFM2qF8j+o6mbCQpssPYWuzSK7ZFvEzBQQ+SJCyOqsxSwPsrVIIrH+w == X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrvddtiedgjeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefuhffvfhfkffgfgggjtgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepudevieeguddtkeeffedtleevlefhuedvffdvhfekfeeiteevueffueejkeeg lefhnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepph gvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 11 Oct 2021 10:22:35 -0400 (EDT) Subject: Re: automatically generating node support functions From: Peter Eisentraut To: pgsql-hackers References: <2f876203-7142-fa71-6d22-6ce00eb26869@enterprisedb.com> Message-ID: Date: Mon, 11 Oct 2021 16:22:33 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------210D7966796B21788E95ACFA" Content-Language: en-US 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. --------------210D7966796B21788E95ACFA Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 15.09.21 21:01, Peter Eisentraut wrote: > On 17.08.21 16:36, Peter Eisentraut wrote: >> Here is another set of preparatory patches that clean up various >> special cases and similar in the node support. > > This set of patches has been committed.  I'll close this commit fest > entry and come back with the main patch series in the future. Here is an updated version of my original patch, so we have something to continue the discussion around. This takes into account all the preparatory patches that have been committed in the meantime. I have also changed it so that the array size of a pointer is now explicitly declared using pg_node_attr(array_size(N)) instead of picking the most recent scalar field, which was admittedly hacky. I have also added MSVC build support and made the Perl code more portable, so that the cfbot doesn't have to be sad. --------------210D7966796B21788E95ACFA Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v2-0001-Automatically-generate-node-support-functions.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v2-0001-Automatically-generate-node-support-functions.patch" RnJvbSA4Njc4M2ExMTdjMTU0MmUyOTJkOWYxMjA1MmUzM2Q3NWU2MTA3ZDkyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAxMSBPY3QgMjAyMSAxMDo1NToyMSArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjJdIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbm9kZSBzdXBwb3J0IGZ1bmN0 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 b20KLS0tCiBzcmMvYmFja2VuZC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgOCArLQog c3JjL2JhY2tlbmQvbm9kZXMvLmdpdGlnbm9yZSAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tl bmQvbm9kZXMvTWFrZWZpbGUgICAgICAgICAgfCAgNDYgKysKIHNyYy9iYWNrZW5kL25vZGVz L2NvcHlmdW5jcy5jICAgICAgIHwgIDE1ICsKIHNyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVu Y3MuYyAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdHVmZi5w bCB8IDY0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9ub2Rl cy9vdXRmdW5jcy5jICAgICAgICB8ICAyMyArCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVu Y3MuYyAgICAgICB8ICAxOSArLQogc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9yZSAgICAg ICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCAgICAgICAgICAgfCAgIDgg Kwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgfCAgIDIgKy0KIHNyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgIHwgMTMyICsrKy0tLQogc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgfCAgOTAgKystLQogc3JjL2luY2x1ZGUvbm9k ZXMvcHJpbW5vZGVzLmggICAgICAgfCAgMjAgKy0KIHNyYy9pbmNsdWRlL3BnX2NvbmZpZ19t YW51YWwuaCAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAg ICAgICB8ICAgNiArLQogc3JjL3Rvb2xzL21zdmMvU29sdXRpb24ucG0gICAgICAgICAgfCAg NDYgKysKIDE3IGZpbGVzIGNoYW5nZWQsIDk1NCBpbnNlcnRpb25zKCspLCAxMzMgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvbm9kZXMvLmdpdGlnbm9y ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N0dWZm LnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvbm9kZXMvLmdpdGlnbm9yZQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvTWFrZWZp bGUKaW5kZXggMGRhODQ4YjFmZC4uYTMzZGIxYWUwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvTWFrZWZpbGUKQEAgLTE0MywxMSArMTQz LDE1IEBAIHN0b3JhZ2UvbG1nci9sd2xvY2tuYW1lcy5oOiBzdG9yYWdlL2xtZ3IvZ2VuZXJh dGUtbHdsb2NrbmFtZXMucGwgc3RvcmFnZS9sbWdyL2x3CiBzdWJtYWtlLWNhdGFsb2ctaGVh ZGVyczoKIAkkKE1BS0UpIC1DIGNhdGFsb2cgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1z eW1saW5rcwogCisjIHJ1biB0aGlzIHVuY29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5n IHRvIGtub3cgaXRzIGRlcGVuZGVuY2llcyBoZXJlOgorc3VibWFrZS1ub2Rlcy1oZWFkZXJz OgorCSQoTUFLRSkgLUMgbm9kZXMgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5r cworCiAjIHJ1biB0aGlzIHVuY29uZGl0aW9uYWxseSB0byBhdm9pZCBuZWVkaW5nIHRvIGtu b3cgaXRzIGRlcGVuZGVuY2llcyBoZXJlOgogc3VibWFrZS11dGlscy1oZWFkZXJzOgogCSQo TUFLRSkgLUMgdXRpbHMgZGlzdHByZXAgZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcwogCi0u UEhPTlk6IHN1Ym1ha2UtY2F0YWxvZy1oZWFkZXJzIHN1Ym1ha2UtdXRpbHMtaGVhZGVycwor LlBIT05ZOiBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtlLW5vZGVzLWhlYWRlcnMg c3VibWFrZS11dGlscy1oZWFkZXJzCiAKICMgTWFrZSBzeW1saW5rcyBmb3IgdGhlc2UgaGVh ZGVycyBpbiB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuIFRoYXQgd2F5CiAjIHdlIGNhbiBjdXQg ZG93biBvbiB0aGUgLUkgb3B0aW9ucy4gQWxzbywgYSBzeW1saW5rIGlzIGF1dG9tYXRpY2Fs bHkKQEAgLTE2Miw3ICsxNjYsNyBAQCBzdWJtYWtlLXV0aWxzLWhlYWRlcnM6CiAKIC5QSE9O WTogZ2VuZXJhdGVkLWhlYWRlcnMKIAotZ2VuZXJhdGVkLWhlYWRlcnM6ICQodG9wX2J1aWxk ZGlyKS9zcmMvaW5jbHVkZS9wYXJzZXIvZ3JhbS5oICQodG9wX2J1aWxkZGlyKS9zcmMvaW5j bHVkZS9zdG9yYWdlL2x3bG9ja25hbWVzLmggc3VibWFrZS1jYXRhbG9nLWhlYWRlcnMgc3Vi bWFrZS11dGlscy1oZWFkZXJzCitnZW5lcmF0ZWQtaGVhZGVyczogJCh0b3BfYnVpbGRkaXIp L3NyYy9pbmNsdWRlL3BhcnNlci9ncmFtLmggJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRl L3N0b3JhZ2UvbHdsb2NrbmFtZXMuaCBzdWJtYWtlLWNhdGFsb2ctaGVhZGVycyBzdWJtYWtl LW5vZGVzLWhlYWRlcnMgc3VibWFrZS11dGlscy1oZWFkZXJzCiAKICQodG9wX2J1aWxkZGly KS9zcmMvaW5jbHVkZS9wYXJzZXIvZ3JhbS5oOiBwYXJzZXIvZ3JhbS5oCiAJcHJlcmVxZGly PWBjZCAnJChkaXIgJDwpJyA+L2Rldi9udWxsICYmIHB3ZGAgJiYgXApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvLmdpdGlnbm9yZSBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRp Z25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMjMyYzZlMTgx NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzLy5naXRpZ25vcmUKQEAg LTAsMCArMSwzIEBACisvbm9kZS1zdHVmZi1zdGFtcAorL25vZGV0YWdzLmgKKy8qZnVuY3Mu aW5jPy5jCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZSBiL3NyYy9i YWNrZW5kL25vZGVzL01ha2VmaWxlCmluZGV4IDVkMmIxMmE5OTMuLmZjOTIyNmEzM2MgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L25vZGVzL01ha2VmaWxlCkBAIC0zMCwzICszMCw0OSBAQCBPQkpTID0gXAogCXZhbHVlLm8K IAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5taworCitub2Rl X2hlYWRlcnMgPSBcCisJbm9kZXMvbm9kZXMuaCBcCisJbm9kZXMvZXhlY25vZGVzLmggXAor CW5vZGVzL3BsYW5ub2Rlcy5oIFwKKwlub2Rlcy9wcmltbm9kZXMuaCBcCisJbm9kZXMvcGF0 aG5vZGVzLmggXAorCW5vZGVzL2V4dGVuc2libGUuaCBcCisJbm9kZXMvcGFyc2Vub2Rlcy5o IFwKKwlub2Rlcy9yZXBsbm9kZXMuaCBcCisJbm9kZXMvdmFsdWUuaCBcCisJY29tbWFuZHMv dHJpZ2dlci5oIFwKKwljb21tYW5kcy9ldmVudF90cmlnZ2VyLmggXAorCWZvcmVpZ24vZmR3 YXBpLmggXAorCWFjY2Vzcy9hbWFwaS5oIFwKKwlhY2Nlc3MvdGFibGVhbS5oIFwKKwlhY2Nl c3MvdHNtYXBpLmggXAorCXV0aWxzL3JlbC5oIFwKKwlub2Rlcy9zdXBwb3J0bm9kZXMuaCBc CisJZXhlY3V0b3IvdHVwdGFibGUuaCBcCisJbm9kZXMvbG9ja29wdGlvbnMuaCBcCisJYWNj ZXNzL3NkaXIuaAorCisjIHNlZSBhbHNvIGNhdGFsb2cvTWFrZWZpbGUgZm9yIGFuIGV4cGxh bmF0aW9uIG9mIHRoZXNlIG1ha2UgcnVsZXMKKworYWxsOiBkaXN0cHJlcCBnZW5lcmF0ZWQt aGVhZGVyLXN5bWxpbmtzCisKK2Rpc3RwcmVwOiBub2RlLXN0dWZmLXN0YW1wCisKKy5QSE9O WTogZ2VuZXJhdGVkLWhlYWRlci1zeW1saW5rcworCitnZW5lcmF0ZWQtaGVhZGVyLXN5bWxp bmtzOiAkKHRvcF9idWlsZGRpcikvc3JjL2luY2x1ZGUvbm9kZXMvaGVhZGVyLXN0YW1wCisK K25vZGUtc3R1ZmYtc3RhbXA6IGdlbl9ub2RlX3N0dWZmLnBsICQoYWRkcHJlZml4ICQodG9w X3NyY2Rpcikvc3JjL2luY2x1ZGUvLCQobm9kZV9oZWFkZXJzKSkKKwkkKFBFUkwpICReCisJ dG91Y2ggJEAKKworJCh0b3BfYnVpbGRkaXIpL3NyYy9pbmNsdWRlL25vZGVzL2hlYWRlci1z dGFtcDogbm9kZS1zdHVmZi1zdGFtcAorCXByZXJlcWRpcj1gY2QgJyQoZGlyICQ8KScgPi9k ZXYvbnVsbCAmJiBwd2RgICYmIFwKKwljZCAnJChkaXIgJEApJyAmJiBmb3IgZmlsZSBpbiBu b2RldGFncy5oOyBkbyBcCisJICBybSAtZiAkJGZpbGUgJiYgJChMTl9TKSAiJCRwcmVyZXFk aXIvJCRmaWxlIiAuIDsgXAorCWRvbmUKKwl0b3VjaCAkQAorCittYWludGFpbmVyLWNsZWFu OiBjbGVhbgorCXJtIC1mIG5vZGUtc3R1ZmYtc3RhbXAgKmZ1bmNzLmluYz8uYyBub2RldGFn cy5oCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyBiL3NyYy9i YWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IDcwZTllNTRkM2UuLmQ1NGY1ZWYwZmYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC03Myw2ICs3Myw5IEBACiAJKG5ld25vZGUt PmZsZG5hbWUgPSBmcm9tLT5mbGRuYW1lKQogCiAKKyNpbmNsdWRlICJjb3B5ZnVuY3MuaW5j MS5jIgorCisjaWZkZWYgT0JTT0xFVEUKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCQkJCQkgcGxhbm5v ZGVzLmggY29weSBmdW5jdGlvbnMKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0NTQsNiArMTQ1Nyw3 IEBAIF9jb3B5VmFyKGNvbnN0IFZhciAqZnJvbSkKIAogCXJldHVybiBuZXdub2RlOwogfQor I2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogX2NvcHlDb25zdApAQCAtMTQ5Myw2ICsx NDk3LDcgQEAgX2NvcHlDb25zdChjb25zdCBDb25zdCAqZnJvbSkKIAlyZXR1cm4gbmV3bm9k ZTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgogICogX2NvcHlQYXJhbQogICovCkBAIC0y NzI3LDYgKzI3MzIsNyBAQCBfY29weVBhcmFtUmVmKGNvbnN0IFBhcmFtUmVmICpmcm9tKQog CiAJcmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyBB X0NvbnN0ICoKIF9jb3B5QV9Db25zdChjb25zdCBBX0NvbnN0ICpmcm9tKQpAQCAtMjc2NCw2 ICsyNzcwLDcgQEAgX2NvcHlBX0NvbnN0KGNvbnN0IEFfQ29uc3QgKmZyb20pCiAJcmV0dXJu IG5ld25vZGU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIEZ1bmNDYWxsICoKIF9j b3B5RnVuY0NhbGwoY29uc3QgRnVuY0NhbGwgKmZyb20pCiB7CkBAIC00ODg1LDYgKzQ4OTIs NyBAQCBfY29weURyb3BTdWJzY3JpcHRpb25TdG10KGNvbnN0IERyb3BTdWJzY3JpcHRpb25T dG10ICpmcm9tKQogCiAJcmV0dXJuIG5ld25vZGU7CiB9CisjZW5kaWYgLypPQlNPTEVURSov CiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKICAqCQkJCQlleHRlbnNpYmxlLmggY29weSBmdW5jdGlvbnMK QEAgLTQ5MDcsNiArNDkxNSw3IEBAIF9jb3B5RXh0ZW5zaWJsZU5vZGUoY29uc3QgRXh0ZW5z aWJsZU5vZGUgKmZyb20pCiAJcmV0dXJuIG5ld25vZGU7CiB9CiAKKyNpZmRlZiBPQlNPTEVU RQogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgogICoJCQkJCXZhbHVlLmggY29weSBmdW5jdGlvbnMKICAqICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKQEAgLTQ5NjcsNiArNDk3Niw3IEBAIF9jb3B5Rm9yZWlnbktleUNhY2hlSW5m byhjb25zdCBGb3JlaWduS2V5Q2FjaGVJbmZvICpmcm9tKQogCiAJcmV0dXJuIG5ld25vZGU7 CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBjb3B5T2JqZWN0SW1wbCAtLSBp bXBsZW1lbnRhdGlvbiBvZiBjb3B5T2JqZWN0KCk7IHNlZSBub2Rlcy9ub2Rlcy5oCkBAIC00 OTg3LDYgKzQ5OTcsOCBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQogCiAJ c3dpdGNoIChub2RlVGFnKGZyb20pKQogCXsKKyNpbmNsdWRlICJjb3B5ZnVuY3MuaW5jMi5j IgorI2lmZGVmIE9CU09MRVRFCiAJCQkvKgogCQkJICogUExBTiBOT0RFUwogCQkJICovCkBA IC01MzQ0LDYgKzUzNTYsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQog CQljYXNlIFRfQml0U3RyaW5nOgogCQkJcmV0dmFsID0gX2NvcHlCaXRTdHJpbmcoZnJvbSk7 CiAJCQlicmVhazsKKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogCQkJLyoKIAkJCSAqIExJU1Qg Tk9ERVMKQEAgLTUzNjEsNiArNTM3NCw3IEBAIGNvcHlPYmplY3RJbXBsKGNvbnN0IHZvaWQg KmZyb20pCiAJCQlyZXR2YWwgPSBsaXN0X2NvcHkoZnJvbSk7CiAJCQlicmVhazsKIAorI2lm ZGVmIE9CU09MRVRFCiAJCQkvKgogCQkJICogRVhURU5TSUJMRSBOT0RFUwogCQkJICovCkBA IC01ODk3LDYgKzU5MTEsNyBAQCBjb3B5T2JqZWN0SW1wbChjb25zdCB2b2lkICpmcm9tKQog CQljYXNlIFRfRm9yZWlnbktleUNhY2hlSW5mbzoKIAkJCXJldHZhbCA9IF9jb3B5Rm9yZWln bktleUNhY2hlSW5mbyhmcm9tKTsKIAkJCWJyZWFrOworI2VuZGlmIC8qT0JTT0xFVEUqLwog CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTog JWQiLCAoaW50KSBub2RlVGFnKGZyb20pKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25v ZGVzL2VxdWFsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwppbmRl eCAxOWVmZjIwMTAyLi42OTlmNmJmM2Y5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rl cy9lcXVhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCkBA IC0xMCw5ICsxMCw2IEBACiAgKiBiZWNhdXNlIHRoZSBjaXJjdWxhciBsaW5rYWdlcyBiZXR3 ZWVuIFJlbE9wdEluZm8gYW5kIFBhdGggbm9kZXMgY2FuJ3QKICAqIGJlIGhhbmRsZWQgZWFz aWx5IGluIGEgc2ltcGxlIGRlcHRoLWZpcnN0IHRyYXZlcnNhbC4KICAqCi0gKiBDdXJyZW50 bHksIGluIGZhY3QsIGVxdWFsKCkgZG9lc24ndCBrbm93IGhvdyB0byBjb21wYXJlIFBsYW4g dHJlZXMKLSAqIGVpdGhlci4gIFRoaXMgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb21lZGF5 LgotICoKICAqIE5PVEU6IGl0IGlzIGludGVudGlvbmFsIHRoYXQgcGFyc2UgbG9jYXRpb24g ZmllbGRzIChpbiBub2RlcyB0aGF0IGhhdmUKICAqIG9uZSkgYXJlIG5vdCBjb21wYXJlZC4g IFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50LCBmb3IgZXhhbXBsZSwgYSB2YXJpYWJsZQogICog IngiIHRvIGJlIGNvbnNpZGVyZWQgZXF1YWwoKSB0byBhbm90aGVyIHJlZmVyZW5jZSB0byAi eCIgaW4gdGhlIHF1ZXJ5LgpAQCAtMzMsNiArMzAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL2V4 dGVuc2libGUuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKICNpbmNsdWRlICJ1 dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKIC8qCkBAIC05Nyw2 ICs5NSw5IEBACiAJKCh2b2lkKSAwKQogCiAKKyNpbmNsdWRlICJlcXVhbGZ1bmNzLmluYzEu YyIKKworI2lmZGVmIE9CU09MRVRFCiAvKgogICoJU3R1ZmYgZnJvbSBwcmltbm9kZXMuaAog ICovCkBAIC0xODUsNiArMTg2LDcgQEAgX2VxdWFsVmFyKGNvbnN0IFZhciAqYSwgY29uc3Qg VmFyICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0 YXRpYyBib29sCiBfZXF1YWxDb25zdChjb25zdCBDb25zdCAqYSwgY29uc3QgQ29uc3QgKmIp CkBAIC0yMDcsNiArMjA5LDcgQEAgX2VxdWFsQ29uc3QoY29uc3QgQ29uc3QgKmEsIGNvbnN0 IENvbnN0ICpiKQogCQkJCQkJYS0+Y29uc3RieXZhbCwgYS0+Y29uc3RsZW4pOwogfQogCisj aWZkZWYgT0JTT0xFVEUKIHN0YXRpYyBib29sCiBfZXF1YWxQYXJhbShjb25zdCBQYXJhbSAq YSwgY29uc3QgUGFyYW0gKmIpCiB7CkBAIC05NDYsNiArOTQ5LDcgQEAgX2VxdWFsUGxhY2VI b2xkZXJJbmZvKGNvbnN0IFBsYWNlSG9sZGVySW5mbyAqYSwgY29uc3QgUGxhY2VIb2xkZXJJ bmZvICpiKQogCiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8q CiAgKiBTdHVmZiBmcm9tIGV4dGVuc2libGUuaApAQCAtOTY3LDYgKzk3MSw3IEBAIF9lcXVh bEV4dGVuc2libGVOb2RlKGNvbnN0IEV4dGVuc2libGVOb2RlICphLCBjb25zdCBFeHRlbnNp YmxlTm9kZSAqYikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgog ICogU3R1ZmYgZnJvbSBwYXJzZW5vZGVzLmgKICAqLwpAQCAtMjQyMCw2ICsyNDI1LDcgQEAg X2VxdWFsUGFyYW1SZWYoY29uc3QgUGFyYW1SZWYgKmEsIGNvbnN0IFBhcmFtUmVmICpiKQog CiAJcmV0dXJuIHRydWU7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyBib29s CiBfZXF1YWxBX0NvbnN0KGNvbnN0IEFfQ29uc3QgKmEsIGNvbnN0IEFfQ29uc3QgKmIpCkBA IC0yNDM3LDYgKzI0NDMsNyBAQCBfZXF1YWxBX0NvbnN0KGNvbnN0IEFfQ29uc3QgKmEsIGNv bnN0IEFfQ29uc3QgKmIpCiAJcmV0dXJuIHRydWU7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQog c3RhdGljIGJvb2wKIF9lcXVhbEZ1bmNDYWxsKGNvbnN0IEZ1bmNDYWxsICphLCBjb25zdCBG dW5jQ2FsbCAqYikKIHsKQEAgLTMwNDUsNiArMzA1Miw3IEBAIF9lcXVhbFBhcnRpdGlvbkNt ZChjb25zdCBQYXJ0aXRpb25DbWQgKmEsIGNvbnN0IFBhcnRpdGlvbkNtZCAqYikKIAogCXJl dHVybiB0cnVlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogU3R1ZmYgZnJv bSBwZ19saXN0LmgKQEAgLTMxMDUsNiArMzExMyw3IEBAIF9lcXVhbExpc3QoY29uc3QgTGlz dCAqYSwgY29uc3QgTGlzdCAqYikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorI2lmZGVmIE9CU09M RVRFCiAvKgogICogU3R1ZmYgZnJvbSB2YWx1ZS5oCiAgKi8KQEAgLTMxNDAsNiArMzE0OSw3 IEBAIF9lcXVhbEJpdFN0cmluZyhjb25zdCBCaXRTdHJpbmcgKmEsIGNvbnN0IEJpdFN0cmlu ZyAqYikKIAogCXJldHVybiB0cnVlOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgog ICogZXF1YWwKQEAgLTMxNzAsNiArMzE4MCw4IEBAIGVxdWFsKGNvbnN0IHZvaWQgKmEsIGNv bnN0IHZvaWQgKmIpCiAKIAlzd2l0Y2ggKG5vZGVUYWcoYSkpCiAJeworI2luY2x1ZGUgImVx dWFsZnVuY3MuaW5jMi5jIgorI2lmZGVmIE9CU09MRVRFCiAJCQkvKgogCQkJICogUFJJTUlU SVZFIE5PREVTCiAJCQkgKi8KQEAgLTMzNDgsNiArMzM2MCw3IEBAIGVxdWFsKGNvbnN0IHZv aWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAJCWNhc2UgVF9QbGFjZUhvbGRlckluZm86CiAJCQly ZXR2YWwgPSBfZXF1YWxQbGFjZUhvbGRlckluZm8oYSwgYik7CiAJCQlicmVhazsKKyNlbmRp ZiAvKk9CU09MRVRFKi8KIAogCQljYXNlIFRfTGlzdDoKIAkJY2FzZSBUX0ludExpc3Q6CkBA IC0zMzU1LDYgKzMzNjgsNyBAQCBlcXVhbChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi KQogCQkJcmV0dmFsID0gX2VxdWFsTGlzdChhLCBiKTsKIAkJCWJyZWFrOwogCisjaWZkZWYg T0JTT0xFVEUKIAkJY2FzZSBUX0ludGVnZXI6CiAJCQlyZXR2YWwgPSBfZXF1YWxJbnRlZ2Vy KGEsIGIpOwogCQkJYnJlYWs7CkBAIC0zODk3LDYgKzM5MTEsNyBAQCBlcXVhbChjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQogCQljYXNlIFRfUHVibGljYXRpb25UYWJsZToKIAkJ CXJldHZhbCA9IF9lcXVhbFB1YmxpY2F0aW9uVGFibGUoYSwgYik7CiAJCQlicmVhazsKKyNl bmRpZiAvKk9CU09MRVRFKi8KIAogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBub2RlIHR5cGU6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L2dlbl9ub2RlX3N0dWZmLnBsIGIvc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3R1ZmYu cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmRkYWMxMjJkNAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N0dWZmLnBs CkBAIC0wLDAgKzEsNjQyIEBACisjIS91c3IvYmluL3BlcmwKKyMtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisjCisjIEdlbmVyYXRlIG5vZGUgc3VwcG9ydCBmaWxlczoKKyMgLSBub2RldGFncy5oCisj IC0gY29weWZ1bmNzCisjIC0gZXF1YWxmdW5jcworIyAtIHJlYWRmdW5jcworIyAtIG91dGZ1 bmNzCisjCisjIHNyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N0dWZmLnBsCisjCisjLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgRmls ZTo6QmFzZW5hbWU7CisKK3VzZSBGaW5kQmluOwordXNlIGxpYiAiJEZpbmRCaW46OlJlYWxC aW4vLi4vY2F0YWxvZyI7CisKK3VzZSBDYXRhbG9nOyAgIyBmb3IgUmVuYW1lVGVtcEZpbGUK KworCitzdWIgZWxlbQoreworCW15ICR4ID0gc2hpZnQ7CisJcmV0dXJuIGdyZXAgeyAkXyBl cSAkeCB9IEBfOworfQorCisKK215IEBub2RlX3R5cGVzID0gcXcoTm9kZSk7CitteSAlbm9k ZV90eXBlX2luZm87CisKK215IEBub19jb3B5OworbXkgQG5vX3JlYWRfd3JpdGU7CisKK215 IEBzY2FsYXJfdHlwZXMgPSBxdygKKwliaXRzMzIgYm9vbCBjaGFyIGRvdWJsZSBpbnQgaW50 OCBpbnQxNiBpbnQzMiBpbnQ2NCBsb25nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0CisJ QWNsTW9kZSBBdHRyTnVtYmVyIENhcmRpbmFsaXR5IENvc3QgSW5kZXggT2lkIFNlbGVjdGl2 aXR5IFNpemUgU3RyYXRlZ3lOdW1iZXIgU3ViVHJhbnNhY3Rpb25JZCBUaW1lTGluZUlEIFhM b2dSZWNQdHIKKyk7CisKK215IEBlbnVtX3R5cGVzOworCisjIEZvciBhYnN0cmFjdCB0eXBl cyB3ZSB0cmFjayB0aGVpciBmaWVsZHMsIHNvIHRoYXQgc3VidHlwZXMgY2FuIHVzZQorIyB0 aGVtLCBidXQgd2UgZG9uJ3QgZW1pdCBhIG5vZGUgdGFnLCBzbyB5b3UgY2FuJ3QgaW5zdGFu dGlhdGUgdGhlbS4KK215IEBhYnN0cmFjdF90eXBlcyA9IHF3KAorCU5vZGUgRXhwcgorCUJ1 ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCBIZWFwVHVwbGVUYWJsZVNsb3QgTWluaW1hbFR1cGxl VGFibGVTbG90IFZpcnR1YWxUdXBsZVRhYmxlU2xvdAorCUpvaW5QYXRoCisJUGFydGl0aW9u UHJ1bmVTdGVwCispOworCisjIFNwZWNpYWwgY2FzZXMgdGhhdCBlaXRoZXIgZG9uJ3QgaGF2 ZSB0aGVpciBvd24gc3RydWN0IG9yIHRoZSBzdHJ1Y3QKKyMgaXMgbm90IGluIGEgaGVhZGVy IGZpbGUuICBXZSBqdXN0IGdlbmVyYXRlIG5vZGUgdGFncyBmb3IgdGhlbSwgYnV0CisjIHRo ZXkgb3RoZXJ3aXNlIGRvbid0IHBhcnRpY2lwYXRlIGluIG5vZGUgc3VwcG9ydC4KK215IEBl eHRyYV90YWdzID0gcXcoCisJSW50TGlzdCBPaWRMaXN0CisJQWxsb2NTZXRDb250ZXh0IEdl bmVyYXRpb25Db250ZXh0IFNsYWJDb250ZXh0CisJVElEQml0bWFwCisJV2luZG93T2JqZWN0 RGF0YQorKTsKKworIyBUaGlzIGlzIGEgcmVndWxhciBub2RlLCBidXQgd2Ugc2tpcCBwYXJz aW5nIGl0IGZyb20gaXRzIGhlYWRlciBmaWxlCisjIHNpbmNlIHdlIHdvbid0IHVzZSBpdHMg aW50ZXJuYWwgc3RydWN0dXJlIGhlcmUgYW55d2F5LgorcHVzaCBAbm9kZV90eXBlcywgcXco TGlzdCk7CisKKyMgcGF0aG5vZGVzLmggZXhjZXB0aW9ucworcHVzaCBAbm9fY29weSwgcXco CisJUmVsT3B0SW5mbyBJbmRleE9wdEluZm8gUGF0aCBQbGFubmVyR2xvYmFsIEVxdWl2YWxl bmNlQ2xhc3MgRXF1aXZhbGVuY2VNZW1iZXIgRm9yZWlnbktleU9wdEluZm8KKwlHcm91cGlu Z1NldERhdGEgSW5jcmVtZW50YWxTb3J0UGF0aCBJbmRleENsYXVzZSBNaW5NYXhBZ2dJbmZv IFBhdGhUYXJnZXQgUGxhbm5lckluZm8gUGxhbm5lclBhcmFtSXRlbQorCVBhcmFtUGF0aElu Zm8gUm9sbHVwRGF0YSBSb3dJZGVudGl0eVZhckluZm8gU3RhdGlzdGljRXh0SW5mbworKTsK K3B1c2ggQHNjYWxhcl90eXBlcywgcXcoRXF1aXZhbGVuY2VDbGFzcyogRXF1aXZhbGVuY2VN ZW1iZXIqIFF1YWxDb3N0KTsKKworIyBYWFggdmFyaW91cyB0aGluZ3Mgd2UgYXJlIG5vdCBw dWJsaXNoaW5nIHJpZ2h0IG5vdyB0byBzdGF5IGxldmVsCisjIHdpdGggdGhlIG1hbnVhbCBz eXN0ZW0KK3B1c2ggQG5vX2NvcHksIHF3KENhbGxDb250ZXh0IElubGluZUNvZGVCbG9jayk7 CitwdXNoIEBub19yZWFkX3dyaXRlLCBxdyhBY2Nlc3NQcml2IEFsdGVyVGFibGVDbWQgQ2Fs bENvbnRleHQgQ3JlYXRlT3BDbGFzc0l0ZW0gRnVuY3Rpb25QYXJhbWV0ZXIgSW5mZXJDbGF1 c2UgSW5saW5lQ29kZUJsb2NrIE9iamVjdFdpdGhBcmdzIE9uQ29uZmxpY3RDbGF1c2UgUGFy dGl0aW9uQ21kIFJvbGVTcGVjIFZhY3V1bVJlbGF0aW9uKTsKKworCisjIyByZWFkIGlucHV0 CisKK2ZvcmVhY2ggbXkgJGluZmlsZSAoQEFSR1YpCit7CisJbXkgJGluX3N0cnVjdDsKKwlt eSAkc3VibGluZTsKKwlteSAkaXNfbm9kZV9zdHJ1Y3Q7CisJbXkgJHN1cGVydHlwZTsKKwlt eSAkc3VwZXJ0eXBlX2ZpZWxkOworCisJbXkgQG15X2ZpZWxkczsKKwlteSAlbXlfZmllbGRf dHlwZXM7CisJbXkgJW15X2ZpZWxkX2F0dHJzOworCisJb3BlbiBteSAkaWZoLCAnPCcsICRp bmZpbGUgb3IgZGllICJjb3VsZCBub3Qgb3BlbiBcIiRpbmZpbGVcIjogJCEiOworCisJd2hp bGUgKG15ICRsaW5lID0gPCRpZmg+KQorCXsKKwkJY2hvbXAgJGxpbmU7CisJCSRsaW5lID1+ IHMhL1wqLiokISE7CisJCSRsaW5lID1+IHMvXHMqJC8vOworCQluZXh0IGlmICRsaW5lIGVx ICcnOworCQluZXh0IGlmICRsaW5lID1+IG0hXlxzKlwqLiokITsgICMgbGluZSBzdGFydHMg d2l0aCAqLCBwcm9iYWJseSBjb21tZW50IGNvbnRpbnVhdGlvbgorCQluZXh0IGlmICRsaW5l ID1+IC9eIyhkZWZpbmV8aWZkZWZ8ZW5kaWYpLzsKKworCQlpZiAoJGluX3N0cnVjdCkKKwkJ eworCQkJJHN1YmxpbmUrKzsKKworCQkJIyBmaXJzdCBsaW5lIHNob3VsZCBoYXZlIG9wZW5p bmcgYnJhY2UKKwkJCWlmICgkc3VibGluZSA9PSAxKQorCQkJeworCQkJCSRpc19ub2RlX3N0 cnVjdCA9IDA7CisJCQkJJHN1cGVydHlwZSA9IHVuZGVmOworCQkJCW5leHQgaWYgJGxpbmUg ZXEgJ3snOworCQkJCWRpZTsKKwkJCX0KKwkJCSMgc2Vjb25kIGxpbmUgc2hvdWxkIGhhdmUg bm9kZSB0YWcgb3Igc3VwZXJ0eXBlCisJCQllbHNpZiAoJHN1YmxpbmUgPT0gMikKKwkJCXsK KwkJCQlpZiAoJGxpbmUgPX4gL15ccypOb2RlVGFnXHMrdHlwZTsvKQorCQkJCXsKKwkJCQkJ JGlzX25vZGVfc3RydWN0ID0gMTsKKwkJCQkJbmV4dDsKKwkJCQl9CisJCQkJZWxzaWYgKCRs aW5lID1+IC9ccyooXHcrKVxzKyhcdyspOy8gYW5kIGVsZW0gJDEsIEBub2RlX3R5cGVzKQor CQkJCXsKKwkJCQkJJGlzX25vZGVfc3RydWN0ID0gMTsKKwkJCQkJJHN1cGVydHlwZSA9ICQx OworCQkJCQkkc3VwZXJ0eXBlX2ZpZWxkID0gJDI7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJ fQorCisJCQkjIGVuZCBvZiBzdHJ1Y3QKKwkJCWlmICgkbGluZSA9fiAvXlx9XHMqJGluX3N0 cnVjdDskLyB8fCAkbGluZSA9fiAvXlx9OyQvKQorCQkJeworCQkJCWlmICgkaXNfbm9kZV9z dHJ1Y3QpCisJCQkJeworCQkJCQlwdXNoIEBub2RlX3R5cGVzLCAkaW5fc3RydWN0OworCQkJ CQlteSBAZiA9IEBteV9maWVsZHM7CisJCQkJCW15ICVmdCA9ICVteV9maWVsZF90eXBlczsK KwkJCQkJbXkgJWZhID0gJW15X2ZpZWxkX2F0dHJzOworCQkJCQlpZiAoJHN1cGVydHlwZSkK KwkJCQkJeworCQkJCQkJbXkgQHN1cGVyZmllbGRzOworCQkJCQkJZm9yZWFjaCBteSAkc2Yg KEB7JG5vZGVfdHlwZV9pbmZveyRzdXBlcnR5cGV9LT57ZmllbGRzfX0pCisJCQkJCQl7CisJ CQkJCQkJbXkgJGZuID0gIiR7c3VwZXJ0eXBlX2ZpZWxkfS4kc2YiOworCQkJCQkJCXB1c2gg QHN1cGVyZmllbGRzLCAkZm47CisJCQkJCQkJJGZ0eyRmbn0gPSAkbm9kZV90eXBlX2luZm97 JHN1cGVydHlwZX0tPntmaWVsZF90eXBlc317JHNmfTsKKwkJCQkJCQkkZmF7JGZufSA9ICRu b2RlX3R5cGVfaW5mb3skc3VwZXJ0eXBlfS0+e2ZpZWxkX2F0dHJzfXskc2Z9OworCQkJCQkJ CSRmYXskZm59ID1+IHMvYXJyYXlfc2l6ZVwoKFx3KylcKS9hcnJheV9zaXplKCR7c3VwZXJ0 eXBlX2ZpZWxkfS4kMSkvIGlmICRmYXskZm59OworCQkJCQkJfQorCQkJCQkJdW5zaGlmdCBA ZiwgQHN1cGVyZmllbGRzOworCQkJCQl9CisJCQkJCSRub2RlX3R5cGVfaW5mb3skaW5fc3Ry dWN0fS0+e2ZpZWxkc30gPSBcQGY7CisJCQkJCSRub2RlX3R5cGVfaW5mb3skaW5fc3RydWN0 fS0+e2ZpZWxkX3R5cGVzfSA9IFwlZnQ7CisJCQkJCSRub2RlX3R5cGVfaW5mb3skaW5fc3Ry dWN0fS0+e2ZpZWxkX2F0dHJzfSA9IFwlZmE7CisKKwkJCQkJaWYgKGVsZW0gYmFzZW5hbWUo JGluZmlsZSksCisJCQkJCQlxdyhleGVjbm9kZXMuaCB0cmlnZ2VyLmggZXZlbnRfdHJpZ2dl ci5oIGFtYXBpLmggdGFibGVhbS5oCisJCQkJCQkJdHNtYXBpLmggZmR3YXBpLmggdHVwdGFi bGUuaCByZXBsbm9kZXMuaCBzdXBwb3J0bm9kZXMuaCkpCisJCQkJCXsKKwkJCQkJCXB1c2gg QG5vX2NvcHksICRpbl9zdHJ1Y3Q7CisJCQkJCQlwdXNoIEBub19yZWFkX3dyaXRlLCAkaW5f c3RydWN0OworCQkJCQl9CisKKwkJCQkJaWYgKCRzdXBlcnR5cGUgJiYgKCRzdXBlcnR5cGUg ZXEgJ1BhdGgnIHx8ICRzdXBlcnR5cGUgZXEgJ0pvaW5QYXRoJykpCisJCQkJCXsKKwkJCQkJ CXB1c2ggQG5vX2NvcHksICRpbl9zdHJ1Y3Q7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkjIHN0 YXJ0IG5ldyBjeWNsZQorCQkJCSRpbl9zdHJ1Y3QgPSB1bmRlZjsKKwkJCQlAbXlfZmllbGRz ID0gKCk7CisJCQkJJW15X2ZpZWxkX3R5cGVzID0gKCk7CisJCQkJJW15X2ZpZWxkX2F0dHJz ID0gKCk7CisJCQl9CisJCQkjIG5vcm1hbCBzdHJ1Y3QgZmllbGQKKwkJCWVsc2lmICgkbGlu ZSA9fiAvXlxzKiguKylccypcYihcdyspKFxbXHcrXF0pP1xzKig/OnBnX25vZGVfYXR0clwo KFtcdygpIF0qKVwpKT87LykKKwkJCXsKKwkJCQlpZiAoJGlzX25vZGVfc3RydWN0KQorCQkJ CXsKKwkJCQkJbXkgJHR5cGUgPSAkMTsKKwkJCQkJbXkgJG5hbWUgPSAkMjsKKwkJCQkJbXkg JGFycmF5X3NpemUgPSAkMzsKKwkJCQkJbXkgJGF0dHIgPSAkNDsKKworCQkJCQkkdHlwZSA9 fiBzL15jb25zdFxzKi8vOworCQkJCQkkdHlwZSA9fiBzL1xzKiQvLzsKKwkJCQkJJHR5cGUg PX4gcy9ccytcKiQvKi87CisJCQkJCWRpZSBpZiAkdHlwZSBlcSAnJzsKKwkJCQkJJHR5cGUg PSAkdHlwZSAuICRhcnJheV9zaXplIGlmICRhcnJheV9zaXplOworCQkJCQlwdXNoIEBteV9m aWVsZHMsICRuYW1lOworCQkJCQkkbXlfZmllbGRfdHlwZXN7JG5hbWV9ID0gJHR5cGU7CisJ CQkJCSRteV9maWVsZF9hdHRyc3skbmFtZX0gPSAkYXR0cjsKKwkJCQl9CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJaWYgKCRpc19ub2RlX3N0cnVjdCkKKwkJCQl7CisJCQkJCSN3YXJu ICIkaW5maWxlOiQuOiBjb3VsZCBub3QgcGFyc2UgXCIkbGluZVwiXG4iOworCQkJCX0KKwkJ CX0KKwkJfQorCQkjIG5vdCBpbiBhIHN0cnVjdAorCQllbHNlCisJCXsKKwkJCSMgc3RhcnQg b2YgYSBzdHJ1Y3Q/CisJCQlpZiAoJGxpbmUgPX4gL14oPzp0eXBlZGVmICk/c3RydWN0IChc dyspKFxzKlwvXCouKik/JC8gJiYgJDEgbmUgJ05vZGUnKQorCQkJeworCQkJCSRpbl9zdHJ1 Y3QgPSAkMTsKKwkJCQkkc3VibGluZSA9IDA7CisJCQl9CisJCQkjIG9uZSBub2RlIHR5cGUg dHlwZWRlZidlZCBkaXJlY3RseSBmcm9tIGFub3RoZXIKKwkJCWVsc2lmICgkbGluZSA9fiAv XnR5cGVkZWYgKFx3KykgKFx3Kyk7JC8gYW5kIGVsZW0gJDEsIEBub2RlX3R5cGVzKQorCQkJ eworCQkJCW15ICRhbGlhc19vZiA9ICQxOworCQkJCW15ICRuID0gJDI7CisKKwkJCQlwdXNo IEBub2RlX3R5cGVzLCAkbjsKKwkJCQlteSBAZiA9IEB7JG5vZGVfdHlwZV9pbmZveyRhbGlh c19vZn0tPntmaWVsZHN9fTsKKwkJCQlteSAlZnQgPSAleyRub2RlX3R5cGVfaW5mb3skYWxp YXNfb2Z9LT57ZmllbGRfdHlwZXN9fTsKKwkJCQlteSAlZmEgPSAleyRub2RlX3R5cGVfaW5m b3skYWxpYXNfb2Z9LT57ZmllbGRfYXR0cnN9fTsKKwkJCQkkbm9kZV90eXBlX2luZm97JG59 LT57ZmllbGRzfSA9IFxAZjsKKwkJCQkkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfdHlw ZXN9ID0gXCVmdDsKKwkJCQkkbm9kZV90eXBlX2luZm97JG59LT57ZmllbGRfYXR0cnN9ID0g XCVmYTsKKwkJCX0KKwkJCSMgY29sbGVjdCBlbnVtIG5hbWVzCisJCQllbHNpZiAoJGxpbmUg PX4gL150eXBlZGVmIGVudW0gKFx3KykoXHMqXC9cKi4qKT8kLykKKwkJCXsKKwkJCQlwdXNo IEBlbnVtX3R5cGVzLCAkMTsKKwkJCX0KKwkJfQorCX0KKworCWlmICgkaW5fc3RydWN0KQor CXsKKwkJZGllICJydW5hd2F5IFwiJGluX3N0cnVjdFwiIGluIGZpbGUgXCIkaW5maWxlXCJc biI7CisJfQorCisJY2xvc2UgJGlmaDsKK30gIyBmb3IgZWFjaCBmaWxlCisKKworIyMgd3Jp dGUgb3V0cHV0CisKK215ICR0bXBleHQgID0gIi50bXAkJCI7CisKKyMgbm9kZXRhZ3MuaAor CitvcGVuIG15ICRudCwgJz4nLCAnbm9kZXRhZ3MuaCcgLiAkdG1wZXh0IG9yIGRpZSAkITsK KworbXkgJGkgPSAxOworZm9yZWFjaCBteSAkbiAoQG5vZGVfdHlwZXMsQGV4dHJhX3RhZ3Mp Cit7CisJbmV4dCBpZiBlbGVtICRuLCBAYWJzdHJhY3RfdHlwZXM7CisJcHJpbnQgJG50ICJc dFRfJHtufSA9ICRpLFxuIjsKKwkkaSsrOworfQorCitjbG9zZSAkbnQ7CisKKworIyBjb3B5 ZnVuY3MuYywgZXF1YWxmdW5jcy5jCisKK29wZW4gbXkgJGNmLCAnPicsICdjb3B5ZnVuY3Mu aW5jMS5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkZWYsICc+JywgJ2VxdWFs ZnVuY3MuaW5jMS5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkY2YyLCAnPics ICdjb3B5ZnVuY3MuaW5jMi5jJyAuICR0bXBleHQgb3IgZGllICQhOworb3BlbiBteSAkZWYy LCAnPicsICdlcXVhbGZ1bmNzLmluYzIuYycgLiAkdG1wZXh0IG9yIGRpZSAkITsKKworbXkg QGN1c3RvbV9jb3B5ID0gcXcoQV9Db25zdCBDb25zdCBFeHRlbnNpYmxlTm9kZSk7CisKK2Zv cmVhY2ggbXkgJG4gKEBub2RlX3R5cGVzKQoreworCW5leHQgaWYgZWxlbSAkbiwgQGFic3Ry YWN0X3R5cGVzOworCW5leHQgaWYgZWxlbSAkbiwgQG5vX2NvcHk7CisJbmV4dCBpZiAkbiBl cSAnTGlzdCc7CisKKwlwcmludCAkY2YyICIKK1x0XHRjYXNlIFRfJHtufToKK1x0XHRcdHJl dHZhbCA9IF9jb3B5JHtufShmcm9tKTsKK1x0XHRcdGJyZWFrOyI7CisKKwlwcmludCAkZWYy ICIKK1x0XHRjYXNlIFRfJHtufToKK1x0XHRcdHJldHZhbCA9IF9lcXVhbCR7bn0oYSwgYik7 CitcdFx0XHRicmVhazsiOworCisJbmV4dCBpZiBlbGVtICRuLCBAY3VzdG9tX2NvcHk7CisK KwlwcmludCAkY2YgIgorc3RhdGljICRuICoKK19jb3B5JHtufShjb25zdCAkbiAqZnJvbSkK K3sKK1x0JHtufSAqbmV3bm9kZSA9IG1ha2VOb2RlKCRuKTsKKworIjsKKworCXByaW50ICRl ZiAiCitzdGF0aWMgYm9vbAorX2VxdWFsJHtufShjb25zdCAkbiAqYSwgY29uc3QgJG4gKmIp Cit7CisiOworCisJZm9yZWFjaCBteSAkZiAoQHskbm9kZV90eXBlX2luZm97JG59LT57Zmll bGRzfX0pCisJeworCQlteSAkdCA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF90eXBl c317JGZ9OworCQlteSAkYSA9ICRub2RlX3R5cGVfaW5mb3skbn0tPntmaWVsZF9hdHRyc317 JGZ9IHx8ICcnOworCQlteSAkY29weV9pZ25vcmUgPSAoJGEgPX4gL1xiY29weV9pZ25vcmVc Yi8pOworCQlteSAkZXF1YWxfaWdub3JlID0gKCRhID1+IC9cYmVxdWFsX2lnbm9yZVxiLyk7 CisJCWlmICgkdCBlcSAnY2hhcionKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09QWV9TVFJJ TkdfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVmICJc dENPTVBBUkVfU1RSSU5HX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVhbF9pZ25vcmU7CisJ CX0KKwkJZWxzaWYgKCR0IGVxICdCaXRtYXBzZXQqJyB8fCAkdCBlcSAnUmVsaWRzJykKKwkJ eworCQkJcHJpbnQgJGNmICJcdENPUFlfQklUTUFQU0VUX0ZJRUxEKCRmKTtcbiIgdW5sZXNz ICRjb3B5X2lnbm9yZTsKKwkJCXByaW50ICRlZiAiXHRDT01QQVJFX0JJVE1BUFNFVF9GSUVM RCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOworCQl9CisJCWVsc2lmICgkdCBlcSAn aW50JyAmJiAkZiA9fiAnbG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQgJGNmICJcdENPUFlf TE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQg JGVmICJcdENPTVBBUkVfTE9DQVRJT05fRklFTEQoJGYpO1xuIiB1bmxlc3MgJGVxdWFsX2ln bm9yZTsKKwkJfQorCQllbHNpZiAoZWxlbSAkdCwgQHNjYWxhcl90eXBlcyBvciBlbGVtICR0 LCBAZW51bV90eXBlcykKKwkJeworCQkJcHJpbnQgJGNmICJcdENPUFlfU0NBTEFSX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCWlmICgkYSA9fiAvXGJlcXVhbF9p Z25vcmVfaWZfemVyb1xiLykKKwkJCXsKKwkJCQlwcmludCAkZWYgIlx0aWYgKGEtPiRmICE9 IGItPiRmICYmIGEtPiRmICE9IDAgJiYgYi0+JGYgIT0gMClcblx0XHRyZXR1cm4gZmFsc2U7 XG4iOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaW50ICRlZiAiXHRDT01QQVJFX1ND QUxBUl9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlIHx8ICR0IGVxICdDb2Vy Y2lvbkZvcm0nOworCQkJfQorCQl9CisJCWVsc2lmICgkdCA9fiAvKFx3KylcKi8gYW5kIGVs ZW0gJDEsIEBzY2FsYXJfdHlwZXMpCisJCXsKKwkJCW15ICR0dCA9ICQxOworCQkJbXkgJGFy cmF5X3NpemVfZmllbGQ7CisJCQlpZiAoJGEgPX4gL1xiYXJyYXlfc2l6ZS4oW1x3Ll0rKS8p CisJCQl7CisJCQkJJGFycmF5X3NpemVfZmllbGQgPSAkMTsKKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQlkaWUgIm5vIGFycmF5IHNpemUgZGVmaW5lZCBmb3IgJG4uJGYgb2YgdHlwZSAk dCI7CisJCQl9CisJCQlpZiAoJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5cGVzfXsk YXJyYXlfc2l6ZV9maWVsZH0gZXEgJ0xpc3QqJykKKwkJCXsKKwkJCQlwcmludCAkY2YgIlx0 Q09QWV9QT0lOVEVSX0ZJRUxEKCRmLCBsaXN0X2xlbmd0aChmcm9tLT4kYXJyYXlfc2l6ZV9m aWVsZCkgKiBzaXplb2YoJHR0KSk7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQkJcHJp bnQgJGVmICJcdENPTVBBUkVfUE9JTlRFUl9GSUVMRCgkZiwgbGlzdF9sZW5ndGgoYS0+JGFy cmF5X3NpemVfZmllbGQpICogc2l6ZW9mKCR0dCkpO1xuIiB1bmxlc3MgJGVxdWFsX2lnbm9y ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwcmludCAkY2YgIlx0Q09QWV9QT0lOVEVS X0ZJRUxEKCRmLCBmcm9tLT4kYXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIg dW5sZXNzICRjb3B5X2lnbm9yZTsKKwkJCQlwcmludCAkZWYgIlx0Q09NUEFSRV9QT0lOVEVS X0ZJRUxEKCRmLCBhLT4kYXJyYXlfc2l6ZV9maWVsZCAqIHNpemVvZigkdHQpKTtcbiIgdW5s ZXNzICRlcXVhbF9pZ25vcmU7CisJCQl9CisJCX0KKwkJZWxzaWYgKCR0ID1+IC8oXHcrKVwq LyBhbmQgZWxlbSAkMSwgQG5vZGVfdHlwZXMpCisJCXsKKwkJCXByaW50ICRjZiAiXHRDT1BZ X05PREVfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJcHJpbnQgJGVm ICJcdENPTVBBUkVfTk9ERV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3JlOwor CQl9CisJCWVsc2lmICgkdCA9fiAvXHcrXFsvKQorCQl7CisJCQlwcmludCAkY2YgIlx0Q09Q WV9BUlJBWV9GSUVMRCgkZik7XG4iIHVubGVzcyAkY29weV9pZ25vcmU7CisJCQlwcmludCAk ZWYgIlx0Q09NUEFSRV9BUlJBWV9GSUVMRCgkZik7XG4iIHVubGVzcyAkZXF1YWxfaWdub3Jl OworCQl9CisJCWVsc2lmICgkdCBlcSAnc3RydWN0IEN1c3RvbVBhdGhNZXRob2RzKicgfHwJ JHQgZXEgJ3N0cnVjdCBDdXN0b21TY2FuTWV0aG9kcyonKQorCQl7CisJCQlwcmludCAkY2Yg Ilx0Q09QWV9TQ0FMQVJfRklFTEQoJGYpO1xuIiB1bmxlc3MgJGNvcHlfaWdub3JlOworCQkJ cHJpbnQgJGVmICJcdENPTVBBUkVfU0NBTEFSX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRlcXVh bF9pZ25vcmU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBoYW5kbGUg dHlwZSBcIiR0XCIgaW4gc3RydWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9CisJfQor CisJcHJpbnQgJGNmICIKK1x0cmV0dXJuIG5ld25vZGU7Cit9CisiOworCXByaW50ICRlZiAi CitcdHJldHVybiB0cnVlOworfQorIjsKK30KKworY2xvc2UgJGNmOworY2xvc2UgJGVmOwor Y2xvc2UgJGNmMjsKK2Nsb3NlICRlZjI7CisKKworIyBvdXRmdW5jcy5jLCByZWFkZnVuY3Mu YworCitvcGVuIG15ICRvZiwgJz4nLCAnb3V0ZnVuY3MuaW5jMS5jJyAuICR0bXBleHQgb3Ig ZGllICQhOworb3BlbiBteSAkcmYsICc+JywgJ3JlYWRmdW5jcy5pbmMxLmMnIC4gJHRtcGV4 dCBvciBkaWUgJCE7CitvcGVuIG15ICRvZjIsICc+JywgJ291dGZ1bmNzLmluYzIuYycgLiAk dG1wZXh0IG9yIGRpZSAkITsKK29wZW4gbXkgJHJmMiwgJz4nLCAncmVhZGZ1bmNzLmluYzIu YycgLiAkdG1wZXh0IG9yIGRpZSAkITsKKworbXkgQGN1c3RvbV9yZWFkd3JpdGUgPSBxdyhB X0NvbnN0IEFfRXhwciBCb29sRXhwciBDb25zdCBDb25zdHJhaW50IEV4dGVuc2libGVOb2Rl IFF1ZXJ5IFJhbmdlVGJsRW50cnkpOworCitmb3JlYWNoIG15ICRuIChAbm9kZV90eXBlcykK K3sKKwluZXh0IGlmIGVsZW0gJG4sIEBhYnN0cmFjdF90eXBlczsKKwluZXh0IGlmIGVsZW0g JG4sIEBub19yZWFkX3dyaXRlOworCW5leHQgaWYgJG4gZXEgJ0xpc3QnOworCW5leHQgaWYg ZWxlbSAkbiwgcXcoQml0U3RyaW5nIEZsb2F0IEludGVnZXIgU3RyaW5nKTsKKworCSMgWFhY IEZvciBub3csIHNraXAgYWxsICJTdG10InMgZXhjZXB0IHRoYXQgb25lcyB0aGF0IHdlcmUg dGhlcmUgYmVmb3JlLgorCWlmICgkbiA9fiAvU3RtdCQvKQorCXsKKwkJbXkgQGtlZXAgPSBx dyhBbHRlclN0YXRzU3RtdCBDcmVhdGVGb3JlaWduVGFibGVTdG10IENyZWF0ZVN0YXRzU3Rt dCBDcmVhdGVTdG10IERlY2xhcmVDdXJzb3JTdG10IEltcG9ydEZvcmVpZ25TY2hlbWFTdG10 IEluZGV4U3RtdCBOb3RpZnlTdG10IFBsYW5uZWRTdG10IFBMQXNzaWduU3RtdCBSYXdTdG10 IFJldHVyblN0bXQgU2VsZWN0U3RtdCBTZXRPcGVyYXRpb25TdG10KTsKKwkJbmV4dCB1bmxl c3MgZWxlbSAkbiwgQGtlZXA7CisJfQorCisJIyBYWFggQWxzbyBza2lwIHJlYWQgc3VwcG9y dCBmb3IgdGhvc2UgdGhhdCBkaWRuJ3QgaGF2ZSBpdCBiZWZvcmUuCisJbXkgJG5vX3JlYWQg PSAoJG4gZXEgJ0FfU3RhcicgfHwgJG4gZXEgJ0FfQ29uc3QnIHx8ICRuIGVxICdBX0V4cHIn IHx8ICRuIGVxICdDb25zdHJhaW50JyB8fCAkbiA9fiAvUGF0aCQvIHx8ICRuIGVxICdGb3Jl aWduS2V5Q2FjaGVJbmZvJyB8fCAkbiBlcSAnRm9yZWlnbktleU9wdEluZm8nIHx8ICRuIGVx ICdQYXRoVGFyZ2V0Jyk7CisKKwlteSAkTiA9IHVjICRuOworCSROID1+IHMvXy8vZzsKKwor CXByaW50ICRvZjIgIlx0XHRcdGNhc2UgVF8ke259OlxuIi4KKwkgICJcdFx0XHRcdF9vdXQk e259KHN0ciwgb2JqKTtcbiIuCisJICAiXHRcdFx0XHRicmVhaztcbiI7CisKKwlwcmludCAk cmYyICJcdGVsc2UgaWYgKE1BVENIKFwiJE5cIiwgIiAuIGxlbmd0aCgkTikgLiAiKSlcbiIu CisJICAiXHRcdHJldHVybl92YWx1ZSA9IF9yZWFkJHtufSgpO1xuIiB1bmxlc3MgJG5vX3Jl YWQ7CisKKwluZXh0IGlmIGVsZW0gJG4sIEBjdXN0b21fcmVhZHdyaXRlOworCisJcHJpbnQg JG9mICIKK3N0YXRpYyB2b2lkCitfb3V0JHtufShTdHJpbmdJbmZvIHN0ciwgY29uc3QgJG4g Km5vZGUpCit7CitcdFdSSVRFX05PREVfVFlQRShcIiROXCIpOworCisiOworCisJcHJpbnQg JHJmICIKK3N0YXRpYyAkbiAqCitfcmVhZCR7bn0odm9pZCkKK3sKK1x0UkVBRF9MT0NBTFMo JG4pOworCisiIHVubGVzcyAkbm9fcmVhZDsKKworCWZvcmVhY2ggbXkgJGYgKEB7JG5vZGVf dHlwZV9pbmZveyRufS0+e2ZpZWxkc319KQorCXsKKwkJbXkgJHQgPSAkbm9kZV90eXBlX2lu Zm97JG59LT57ZmllbGRfdHlwZXN9eyRmfTsKKwkJbXkgJGEgPSAkbm9kZV90eXBlX2luZm97 JG59LT57ZmllbGRfYXR0cnN9eyRmfSB8fCAnJzsKKwkJbXkgJHJlYWR3cml0ZV9pZ25vcmUg PSAoJGEgPX4gL1xicmVhZHdyaXRlX2lnbm9yZVxiLyk7CisJCW5leHQgaWYgJHJlYWR3cml0 ZV9pZ25vcmU7CisKKwkJIyBYWFggUHJldmlvdXNseSwgZm9yIHN1YnR5cGluZywgb25seSB0 aGUgbGVhZiBmaWVsZCBuYW1lIGlzCisJCSMgdXNlZC4gUG9uZGVyIHdoZXRoZXIgd2Ugd2Fu dCB0byBrZWVwIGl0IHRoYXQgd2F5LgorCisJCWlmICgkdCBlcSAnYm9vbCcpCisJCXsKKwkJ CXByaW50ICRvZiAiXHRXUklURV9CT09MX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmYg Ilx0UkVBRF9CT09MX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVs c2lmICgkdCBlcSAnaW50JyAmJiAkZiA9fiAnbG9jYXRpb24kJykKKwkJeworCQkJcHJpbnQg JG9mICJcdFdSSVRFX0xPQ0FUSU9OX0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmYgIlx0 UkVBRF9MT0NBVElPTl9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQll bHNpZiAoJHQgZXEgJ2ludCcgfHwgJHQgZXEgJ2ludDMyJyB8fCAkdCBlcSAnQXR0ck51bWJl cicgfHwgJHQgZXEgJ1N0cmF0ZWd5TnVtYmVyJykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdS SVRFX0lOVF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfSU5UX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmICgkdCBlcSAndWludDMy JyB8fCAkdCBlcSAnYml0czMyJyB8fCAkdCBlcSAnQWNsTW9kZScgfHwgJHQgZXEgJ0Jsb2Nr TnVtYmVyJyB8fCAkdCBlcSAnSW5kZXgnIHx8ICR0IGVxICdTdWJUcmFuc2FjdGlvbklkJykK KwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX1VJTlRfRklFTEQoJGYpO1xuIjsKKwkJCXBy aW50ICRyZiAiXHRSRUFEX1VJTlRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJ CX0KKwkJZWxzaWYgKCR0IGVxICd1aW50NjQnKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJ VEVfVUlOVDY0X0ZJRUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9VSU5UNjRf RklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdP aWQnKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfT0lEX0ZJRUxEKCRmKTtcbiI7CisJ CQlwcmludCAkcmYgIlx0UkVBRF9PSURfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7 CisJCX0KKwkJZWxzaWYgKCR0IGVxICdsb25nJykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdS SVRFX0xPTkdfRklFTEQoJGYpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0xPTkdfRklF TEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdjaGFy JykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0NIQVJfRklFTEQoJGYpO1xuIjsKKwkJ CXByaW50ICRyZiAiXHRSRUFEX0NIQVJfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7 CisJCX0KKwkJZWxzaWYgKCR0IGVxICdkb3VibGUnKQorCQl7CisJCQlwcmludCAkb2YgIlx0 V1JJVEVfRkxPQVRfRklFTEQoJGYsIFwiJS42ZlwiKTtcbiI7CisJCQlwcmludCAkcmYgIlx0 UkVBRF9GTE9BVF9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNp ZiAoJHQgZXEgJ0NhcmRpbmFsaXR5JykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0ZM T0FUX0ZJRUxEKCRmLCBcIiUuMGZcIik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfRkxP QVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVx ICdDb3N0JykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLCBc IiUuMmZcIik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfRkxPQVRfRklFTEQoJGYpO1xu IiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdRdWFsQ29zdCcpCisJ CXsKKwkJCXByaW50ICRvZiAiXHRXUklURV9GTE9BVF9GSUVMRCgkZi5zdGFydHVwLCBcIiUu MmZcIik7XG4iOworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0ZMT0FUX0ZJRUxEKCRmLnBlcl90 dXBsZSwgXCIlLjJmXCIpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRSRUFEX0ZMT0FUX0ZJRUxE KCRmLnN0YXJ0dXApO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCQlwcmludCAkcmYgIlx0UkVB RF9GTE9BVF9GSUVMRCgkZi5wZXJfdHVwbGUpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0K KwkJZWxzaWYgKCR0IGVxICdTZWxlY3Rpdml0eScpCisJCXsKKwkJCXByaW50ICRvZiAiXHRX UklURV9GTE9BVF9GSUVMRCgkZiwgXCIlLjRmXCIpO1xuIjsKKwkJCXByaW50ICRyZiAiXHRS RUFEX0ZMT0FUX0ZJRUxEKCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lm ICgkdCBlcSAnY2hhcionKQorCQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfU1RSSU5HX0ZJ RUxEKCRmKTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9TVFJJTkdfRklFTEQoJGYpO1xu IiB1bmxlc3MgJG5vX3JlYWQ7CisJCX0KKwkJZWxzaWYgKCR0IGVxICdCaXRtYXBzZXQqJyB8 fCAkdCBlcSAnUmVsaWRzJykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0JJVE1BUFNF VF9GSUVMRCgkZik7XG4iOworCQkJcHJpbnQgJHJmICJcdFJFQURfQklUTUFQU0VUX0ZJRUxE KCRmKTtcbiIgdW5sZXNzICRub19yZWFkOworCQl9CisJCWVsc2lmIChlbGVtICR0LCBAZW51 bV90eXBlcykKKwkJeworCQkJcHJpbnQgJG9mICJcdFdSSVRFX0VOVU1fRklFTEQoJGYsICR0 KTtcbiI7CisJCQlwcmludCAkcmYgIlx0UkVBRF9FTlVNX0ZJRUxEKCRmLCAkdCk7XG4iIHVu bGVzcyAkbm9fcmVhZDsKKwkJfQorCQllbHNpZiAoJHQgPX4gLyhcdyspKFwqfFxbKS8gYW5k IGVsZW0gJDEsIEBzY2FsYXJfdHlwZXMpCisJCXsKKwkJCW15ICR0dCA9IHVjICQxOworCQkJ bXkgJGFycmF5X3NpemVfZmllbGQ7CisJCQlpZiAoJGEgPX4gL1xiYXJyYXlfc2l6ZS4oW1x3 Ll0rKS8pCisJCQl7CisJCQkJJGFycmF5X3NpemVfZmllbGQgPSAkMTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQlkaWUgIm5vIGFycmF5IHNpemUgZGVmaW5lZCBmb3IgJG4uJGYgb2Yg dHlwZSAkdCI7CisJCQl9CisJCQlpZiAoJG5vZGVfdHlwZV9pbmZveyRufS0+e2ZpZWxkX3R5 cGVzfXskYXJyYXlfc2l6ZV9maWVsZH0gZXEgJ0xpc3QqJykKKwkJCXsKKwkJCQlwcmludCAk b2YgIlx0V1JJVEVfJHt0dH1fQVJSQVkoJGYsIGxpc3RfbGVuZ3RoKG5vZGUtPiRhcnJheV9z aXplX2ZpZWxkKSk7XG4iOworCQkJCXByaW50ICRyZiAiXHRSRUFEXyR7dHR9X0FSUkFZKCRm LCBsaXN0X2xlbmd0aChsb2NhbF9ub2RlLT4kYXJyYXlfc2l6ZV9maWVsZCkpO1xuIiB1bmxl c3MgJG5vX3JlYWQ7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcHJpbnQgJG9mICJcdFdS SVRFXyR7dHR9X0FSUkFZKCRmLCBub2RlLT4kYXJyYXlfc2l6ZV9maWVsZCk7XG4iOworCQkJ CXByaW50ICRyZiAiXHRSRUFEXyR7dHR9X0FSUkFZKCRmLCBsb2NhbF9ub2RlLT4kYXJyYXlf c2l6ZV9maWVsZCk7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJCX0KKwkJfQorCQllbHNpZiAo JHQgZXEgJ1JlbE9wdEluZm8qJyAmJiAkYSBlcSAncGF0aF9oYWNrMScpCisJCXsKKwkJCXBy aW50ICRvZiAiXHRhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHN0ciwgXCIgOnBhcmVudF9yZWxp ZHMgXCIpO1xuIi4KKwkJCSAgIlx0b3V0Qml0bWFwc2V0KHN0ciwgbm9kZS0+JGYtPnJlbGlk cyk7XG4iOworCQl9CisJCWVsc2lmICgkdCBlcSAnUGF0aFRhcmdldConICYmICRhIGVxICdw YXRoX2hhY2syJykKKwkJeworCQkJKG15ICRmMiA9ICRmKSA9fiBzL3BhdGh0YXJnZXQvcGFy ZW50LzsKKwkJCXByaW50ICRvZiAiXHRpZiAobm9kZS0+JGYgIT0gbm9kZS0+JGYyLT5yZWx0 YXJnZXQpXG4iLgorCQkJICAiXHRcdFdSSVRFX05PREVfRklFTEQoJGYpO1xuIjsKKwkJfQor CQllbHNpZiAoJHQgZXEgJ1BhcmFtUGF0aEluZm8qJyAmJiAkYSBlcSAncGF0aF9oYWNrMycp CisJCXsKKwkJCXByaW50ICRvZiAiXHRpZiAobm9kZS0+JGYpXG4iLgorCQkJICAiXHRcdG91 dEJpdG1hcHNldChzdHIsIG5vZGUtPiRmLT5wcGlfcmVxX291dGVyKTtcbiIuCisJCQkgICJc dGVsc2VcbiIuCisJCQkgICJcdFx0b3V0Qml0bWFwc2V0KHN0ciwgTlVMTCk7XG4iOworCQl9 CisJCWVsc2lmICgkdCA9fiAvKFx3KylcKi8gYW5kIGVsZW0gJDEsIEBub2RlX3R5cGVzKQor CQl7CisJCQlwcmludCAkb2YgIlx0V1JJVEVfTk9ERV9GSUVMRCgkZik7XG4iOworCQkJcHJp bnQgJHJmICJcdFJFQURfTk9ERV9GSUVMRCgkZik7XG4iIHVubGVzcyAkbm9fcmVhZDsKKwkJ fQorCQllbHNpZiAoJHQgZXEgJ3N0cnVjdCBDdXN0b21QYXRoTWV0aG9kcyonIHx8CSR0IGVx ICdzdHJ1Y3QgQ3VzdG9tU2Nhbk1ldGhvZHMqJykKKwkJeworCQkJcHJpbnQgJG9mIHF7CisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsICIgOm1ldGhvZHMgIik7CisJb3V0VG9rZW4o c3RyLCBub2RlLT5tZXRob2RzLT5DdXN0b21OYW1lKTsKK307CisJCQlwcmludCAkcmYgcSEK Kwl7CisJCS8qIExvb2t1cCBDdXN0b21TY2FuTWV0aG9kcyBieSBDdXN0b21OYW1lICovCisJ CWNoYXIJICAgKmN1c3RvbV9uYW1lOworCQljb25zdCBDdXN0b21TY2FuTWV0aG9kcyAqbWV0 aG9kczsKKwkJdG9rZW4gPSBwZ19zdHJ0b2soJmxlbmd0aCk7IC8qIHNraXAgbWV0aG9kczog Ki8KKwkJdG9rZW4gPSBwZ19zdHJ0b2soJmxlbmd0aCk7IC8qIEN1c3RvbU5hbWUgKi8KKwkJ Y3VzdG9tX25hbWUgPSBudWxsYWJsZV9zdHJpbmcodG9rZW4sIGxlbmd0aCk7CisJCW1ldGhv ZHMgPSBHZXRDdXN0b21TY2FuTWV0aG9kcyhjdXN0b21fbmFtZSwgZmFsc2UpOworCQlsb2Nh bF9ub2RlLT5tZXRob2RzID0gbWV0aG9kczsKKwl9CishIHVubGVzcyAkbm9fcmVhZDsKKwkJ fQorCQllbHNpZiAoJHQgZXEgJ1BhcmFtTGlzdEluZm8nIHx8ICR0ID1+IC9QYXJ0aXRpb25C b3VuZEluZm9EYXRhLyB8fCAkdCBlcSAnUGFydGl0aW9uRGlyZWN0b3J5JyB8fCAkdCBlcSAn UGFydGl0aW9uU2NoZW1lJyB8fCAkdCBlcSAndm9pZConIHx8ICR0ID1+IC9cKlwqJC8pCisJ CXsKKwkJCSMgaWdub3JlCisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgImNvdWxkIG5vdCBo YW5kbGUgdHlwZSBcIiR0XCIgaW4gc3RydWN0IFwiJG5cIiBmaWVsZCBcIiRmXCIiOworCQl9 CisJfQorCisJcHJpbnQgJG9mICJ9CisiOworCXByaW50ICRyZiAiCitcdFJFQURfRE9ORSgp OworfQorIiB1bmxlc3MgJG5vX3JlYWQ7Cit9CisKK2Nsb3NlICRvZjsKK2Nsb3NlICRyZjsK K2Nsb3NlICRvZjI7CitjbG9zZSAkcmYyOworCisKK2ZvcmVhY2ggbXkgJGZpbGUgKHF3KG5v ZGV0YWdzLmggY29weWZ1bmNzLmluYzEuYyBjb3B5ZnVuY3MuaW5jMi5jIGVxdWFsZnVuY3Mu aW5jMS5jIGVxdWFsZnVuY3MuaW5jMi5jIG91dGZ1bmNzLmluYzEuYyBvdXRmdW5jcy5pbmMy LmMgcmVhZGZ1bmNzLmluYzEuYyByZWFkZnVuY3MuaW5jMi5jKSkKK3sKKwlDYXRhbG9nOjpS ZW5hbWVUZW1wRmlsZSgkZmlsZSwgJHRtcGV4dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwpp bmRleCAyZTVlZDc3ZTE4Li5jOWMxM2Q1OTYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9u b2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAg LTI5NSw2ICsyOTUsOSBAQCBvdXREYXR1bShTdHJpbmdJbmZvIHN0ciwgRGF0dW0gdmFsdWUs IGludCB0eXBsZW4sIGJvb2wgdHlwYnl2YWwpCiB9CiAKIAorI2luY2x1ZGUgIm91dGZ1bmNz LmluYzEuYyIKKworI2lmZGVmIE9CU09MRVRFCiAvKgogICoJU3R1ZmYgZnJvbSBwbGFubm9k ZXMuaAogICovCkBAIC0xMTMzLDYgKzExMzYsNyBAQCBfb3V0VmFyKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBWYXIgKm5vZGUpCiAJV1JJVEVfSU5UX0ZJRUxEKHZhcmF0dG5vc3luKTsKIAlX UklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSov CiAKIHN0YXRpYyB2b2lkCiBfb3V0Q29uc3QoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IENvbnN0 ICpub2RlKQpAQCAtMTE1NCw2ICsxMTU4LDcgQEAgX291dENvbnN0KFN0cmluZ0luZm8gc3Ry LCBjb25zdCBDb25zdCAqbm9kZSkKIAkJb3V0RGF0dW0oc3RyLCBub2RlLT5jb25zdHZhbHVl LCBub2RlLT5jb25zdGxlbiwgbm9kZS0+Y29uc3RieXZhbCk7CiB9CiAKKyNpZmRlZiBPQlNP TEVURQogc3RhdGljIHZvaWQKIF9vdXRQYXJhbShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGFy YW0gKm5vZGUpCiB7CkBAIC0xMzI0LDYgKzEzMjksNyBAQCBfb3V0U2NhbGFyQXJyYXlPcEV4 cHIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFNjYWxhckFycmF5T3BFeHByICpub2RlKQogCVdS SVRFX05PREVfRklFTEQoYXJncyk7CiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24p OwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAogX291dEJvb2xFeHBy KFN0cmluZ0luZm8gc3RyLCBjb25zdCBCb29sRXhwciAqbm9kZSkKQEAgLTEzNTIsNiArMTM1 OCw3IEBAIF9vdXRCb29sRXhwcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgQm9vbEV4cHIgKm5v ZGUpCiAJV1JJVEVfTE9DQVRJT05fRklFTEQobG9jYXRpb24pOwogfQogCisjaWZkZWYgT0JT T0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0U3ViTGluayhTdHJpbmdJbmZvIHN0ciwgY29uc3Qg U3ViTGluayAqbm9kZSkKIHsKQEAgLTI2NzAsNiArMjY3Nyw3IEBAIF9vdXRQbGFubmVyUGFy YW1JdGVtKFN0cmluZ0luZm8gc3RyLCBjb25zdCBQbGFubmVyUGFyYW1JdGVtICpub2RlKQog CVdSSVRFX05PREVfRklFTEQoaXRlbSk7CiAJV1JJVEVfSU5UX0ZJRUxEKHBhcmFtSWQpOwog fQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAq CkBAIC0yNjkyLDYgKzI3MDAsNyBAQCBfb3V0RXh0ZW5zaWJsZU5vZGUoU3RyaW5nSW5mbyBz dHIsIGNvbnN0IEV4dGVuc2libGVOb2RlICpub2RlKQogCW1ldGhvZHMtPm5vZGVPdXQoc3Ry LCBub2RlKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKICAqCiAgKglTdHVmZiBmcm9tIHBhcnNlbm9kZXMuaC4KQEAgLTMwMjQsNiArMzAzMyw3 IEBAIF9vdXRTdGF0c0VsZW0oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFN0YXRzRWxlbSAqbm9k ZSkKIAlXUklURV9TVFJJTkdfRklFTEQobmFtZSk7CiAJV1JJVEVfTk9ERV9GSUVMRChleHBy KTsKIH0KKyNlbmRpZiAvKk9CU09MRVRFKi8KIAogc3RhdGljIHZvaWQKIF9vdXRRdWVyeShT dHJpbmdJbmZvIHN0ciwgY29uc3QgUXVlcnkgKm5vZGUpCkBAIC0zMDk2LDYgKzMxMDYsNyBA QCBfb3V0UXVlcnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFF1ZXJ5ICpub2RlKQogCVdSSVRF X0lOVF9GSUVMRChzdG10X2xlbik7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogc3RhdGljIHZv aWQKIF9vdXRXaXRoQ2hlY2tPcHRpb24oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFdpdGhDaGVj a09wdGlvbiAqbm9kZSkKIHsKQEAgLTMyMzQsNiArMzI0NSw3IEBAIF9vdXRTZXRPcGVyYXRp b25TdG10KFN0cmluZ0luZm8gc3RyLCBjb25zdCBTZXRPcGVyYXRpb25TdG10ICpub2RlKQog CVdSSVRFX05PREVfRklFTEQoY29sQ29sbGF0aW9ucyk7CiAJV1JJVEVfTk9ERV9GSUVMRChn cm91cENsYXVzZXMpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAog X291dFJhbmdlVGJsRW50cnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFJhbmdlVGJsRW50cnkg Km5vZGUpCkBAIC0zMzE0LDYgKzMzMjYsNyBAQCBfb3V0UmFuZ2VUYmxFbnRyeShTdHJpbmdJ bmZvIHN0ciwgY29uc3QgUmFuZ2VUYmxFbnRyeSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxE KHNlY3VyaXR5UXVhbHMpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBf b3V0UmFuZ2VUYmxGdW5jdGlvbihTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYmxGdW5j dGlvbiAqbm9kZSkKIHsKQEAgLTMzMzcsNiArMzM1MCw3IEBAIF9vdXRUYWJsZVNhbXBsZUNs YXVzZShTdHJpbmdJbmZvIHN0ciwgY29uc3QgVGFibGVTYW1wbGVDbGF1c2UgKm5vZGUpCiAJ V1JJVEVfTk9ERV9GSUVMRChhcmdzKTsKIAlXUklURV9OT0RFX0ZJRUxEKHJlcGVhdGFibGUp OwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAogX291dEFfRXhwcihT dHJpbmdJbmZvIHN0ciwgY29uc3QgQV9FeHByICpub2RlKQpAQCAtMzQ0OSw2ICszNDYzLDcg QEAgX291dEJpdFN0cmluZyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgQml0U3RyaW5nICpub2Rl KQogCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCBub2RlLT52YWwpOwogfQogCisjaWZk ZWYgT0JTT0xFVEUKIHN0YXRpYyB2b2lkCiBfb3V0Q29sdW1uUmVmKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBDb2x1bW5SZWYgKm5vZGUpCiB7CkBAIC0zNDgwLDYgKzM0OTUsNyBAQCBfb3V0 UmF3U3RtdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmF3U3RtdCAqbm9kZSkKIAlXUklURV9M T0NBVElPTl9GSUVMRChzdG10X2xvY2F0aW9uKTsKIAlXUklURV9JTlRfRklFTEQoc3RtdF9s ZW4pOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiBzdGF0aWMgdm9pZAogX291dEFfQ29u c3QoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFfQ29uc3QgKm5vZGUpCkBAIC0zNDk2LDYgKzM1 MTIsNyBAQCBfb3V0QV9Db25zdChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQV9Db25zdCAqbm9k ZSkKIAlXUklURV9MT0NBVElPTl9GSUVMRChsb2NhdGlvbik7CiB9CiAKKyNpZmRlZiBPQlNP TEVURQogc3RhdGljIHZvaWQKIF9vdXRBX1N0YXIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEFf U3RhciAqbm9kZSkKIHsKQEAgLTM2NDAsNiArMzY1Nyw3IEBAIF9vdXRSYW5nZVRhYmxlRnVu Y0NvbChTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmFuZ2VUYWJsZUZ1bmNDb2wgKm5vZGUpCiAJ V1JJVEVfTk9ERV9GSUVMRChjb2xkZWZleHByKTsKIAlXUklURV9MT0NBVElPTl9GSUVMRChs b2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIHN0YXRpYyB2b2lkCiBfb3V0 Q29uc3RyYWludChTdHJpbmdJbmZvIHN0ciwgY29uc3QgQ29uc3RyYWludCAqbm9kZSkKQEAg LTM3NjAsNiArMzc3OCw3IEBAIF9vdXRDb25zdHJhaW50KFN0cmluZ0luZm8gc3RyLCBjb25z dCBDb25zdHJhaW50ICpub2RlKQogCX0KIH0KIAorI2lmZGVmIE9CU09MRVRFCiBzdGF0aWMg dm9pZAogX291dEZvcmVpZ25LZXlDYWNoZUluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IEZv cmVpZ25LZXlDYWNoZUluZm8gKm5vZGUpCiB7CkBAIC0zODIwLDYgKzM4MzksNyBAQCBfb3V0 UGFydGl0aW9uUmFuZ2VEYXR1bShTdHJpbmdJbmZvIHN0ciwgY29uc3QgUGFydGl0aW9uUmFu Z2VEYXR1bSAqbm9kZSkKIAlXUklURV9OT0RFX0ZJRUxEKHZhbHVlKTsKIAlXUklURV9MT0NB VElPTl9GSUVMRChsb2NhdGlvbik7CiB9CisjZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAg KiBvdXROb2RlIC0KQEAgLTM4NDksNiArMzg2OSw4IEBAIG91dE5vZGUoU3RyaW5nSW5mbyBz dHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAneycp OwogCQlzd2l0Y2ggKG5vZGVUYWcob2JqKSkKIAkJeworI2luY2x1ZGUgIm91dGZ1bmNzLmlu YzIuYyIKKyNpZmRlZiBPQlNPTEVURQogCQkJY2FzZSBUX1BsYW5uZWRTdG10OgogCQkJCV9v dXRQbGFubmVkU3RtdChzdHIsIG9iaik7CiAJCQkJYnJlYWs7CkBAIC00NTIxLDYgKzQ1NDMs NyBAQCBvdXROb2RlKFN0cmluZ0luZm8gc3RyLCBjb25zdCB2b2lkICpvYmopCiAJCQljYXNl IFRfUGFydGl0aW9uUmFuZ2VEYXR1bToKIAkJCQlfb3V0UGFydGl0aW9uUmFuZ2VEYXR1bShz dHIsIG9iaik7CiAJCQkJYnJlYWs7CisjZW5kaWYgLypPQlNPTEVURSovCiAKIAkJCWRlZmF1 bHQ6CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggYWJmMDhiN2EyZi4uZDc1NDQyYTVm MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTI0MCw2ICsyNDAsOCBAQCByZWFkQml0 bWFwc2V0KHZvaWQpCiAJcmV0dXJuIF9yZWFkQml0bWFwc2V0KCk7CiB9CiAKKyNpbmNsdWRl ICJyZWFkZnVuY3MuaW5jMS5jIgorCiAvKgogICogX3JlYWRRdWVyeQogICovCkBAIC0yOTEs NiArMjkzLDcgQEAgX3JlYWRRdWVyeSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZk ZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZE5vdGlmeVN0bXQKICAqLwpAQCAtNTg5LDYgKzU5 Miw3IEBAIF9yZWFkVmFyKHZvaWQpCiAKIAlSRUFEX0RPTkUoKTsKIH0KKyNlbmRpZiAvKk9C U09MRVRFKi8KIAogLyoKICAqIF9yZWFkQ29uc3QKQEAgLTYxNSw2ICs2MTksNyBAQCBfcmVh ZENvbnN0KHZvaWQpCiAJUkVBRF9ET05FKCk7CiB9CiAKKyNpZmRlZiBPQlNPTEVURQogLyoK ICAqIF9yZWFkUGFyYW0KICAqLwpAQCAtODQwLDYgKzg0NSw3IEBAIF9yZWFkU2NhbGFyQXJy YXlPcEV4cHIodm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUq LwogCiAvKgogICogX3JlYWRCb29sRXhwcgpAQCAtODY3LDYgKzg3Myw3IEBAIF9yZWFkQm9v bEV4cHIodm9pZCkKIAlSRUFEX0RPTkUoKTsKIH0KIAorI2lmZGVmIE9CU09MRVRFCiAvKgog ICogX3JlYWRTdWJMaW5rCiAgKi8KQEAgLTE0MjEsNiArMTQyOCw3IEBAIF9yZWFkQXBwZW5k UmVsSW5mbyh2b2lkKQogLyoKICAqCVN0dWZmIGZyb20gcGFyc2Vub2Rlcy5oLgogICovCisj ZW5kaWYgLypPQlNPTEVURSovCiAKIC8qCiAgKiBfcmVhZFJhbmdlVGJsRW50cnkKQEAgLTE1 MTYsNiArMTUyNCw3IEBAIF9yZWFkUmFuZ2VUYmxFbnRyeSh2b2lkKQogCVJFQURfRE9ORSgp OwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8qCiAgKiBfcmVhZFJhbmdlVGJsRnVuY3Rpb24K ICAqLwpAQCAtMjYzNiw2ICsyNjQ1LDcgQEAgX3JlYWRBbHRlcm5hdGl2ZVN1YlBsYW4odm9p ZCkKIAogCVJFQURfRE9ORSgpOwogfQorI2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICog X3JlYWRFeHRlbnNpYmxlTm9kZQpAQCAtMjY2Nyw2ICsyNjc3LDcgQEAgX3JlYWRFeHRlbnNp YmxlTm9kZSh2b2lkKQogCVJFQURfRE9ORSgpOwogfQogCisjaWZkZWYgT0JTT0xFVEUKIC8q CiAgKiBfcmVhZFBhcnRpdGlvbkJvdW5kU3BlYwogICovCkBAIC0yNzAxLDYgKzI3MTIsNyBA QCBfcmVhZFBhcnRpdGlvblJhbmdlRGF0dW0odm9pZCkKIAogCVJFQURfRE9ORSgpOwogfQor I2VuZGlmIC8qT0JTT0xFVEUqLwogCiAvKgogICogcGFyc2VOb2RlU3RyaW5nCkBAIC0yNzI1 LDcgKzI3MzcsMTEgQEAgcGFyc2VOb2RlU3RyaW5nKHZvaWQpCiAjZGVmaW5lIE1BVENIKHRv a25hbWUsIG5hbWVsZW4pIFwKIAkobGVuZ3RoID09IG5hbWVsZW4gJiYgbWVtY21wKHRva2Vu LCB0b2tuYW1lLCBuYW1lbGVuKSA9PSAwKQogCi0JaWYgKE1BVENIKCJRVUVSWSIsIDUpKQor CWlmIChmYWxzZSkKKwkJOworI2luY2x1ZGUgInJlYWRmdW5jcy5pbmMyLmMiCisjaWZkZWYg T0JTT0xFVEUKKwllbHNlIGlmIChNQVRDSCgiUVVFUlkiLCA1KSkKIAkJcmV0dXJuX3ZhbHVl ID0gX3JlYWRRdWVyeSgpOwogCWVsc2UgaWYgKE1BVENIKCJXSVRIQ0hFQ0tPUFRJT04iLCAx NSkpCiAJCXJldHVybl92YWx1ZSA9IF9yZWFkV2l0aENoZWNrT3B0aW9uKCk7CkBAIC0yOTcz LDYgKzI5ODksNyBAQCBwYXJzZU5vZGVTdHJpbmcodm9pZCkKIAkJcmV0dXJuX3ZhbHVlID0g X3JlYWRQYXJ0aXRpb25Cb3VuZFNwZWMoKTsKIAllbHNlIGlmIChNQVRDSCgiUEFSVElUSU9O UkFOR0VEQVRVTSIsIDE5KSkKIAkJcmV0dXJuX3ZhbHVlID0gX3JlYWRQYXJ0aXRpb25SYW5n ZURhdHVtKCk7CisjZW5kaWYgLypPQlNPTEVURSovCiAJZWxzZQogCXsKIAkJZWxvZyhFUlJP UiwgImJhZGx5IGZvcm1hdHRlZCBub2RlIHN0cmluZyBcIiUuMzJzXCIuLi4iLCB0b2tlbik7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy8uZ2l0aWdub3JlIGIvc3JjL2luY2x1 ZGUvbm9kZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi45OWZiMWQzNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv LmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy9ub2RldGFncy5oCisvaGVhZGVyLXN0YW1w CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZXMuaAppbmRleCBlMDA1N2RhYTA2Li5iMTQ2NmE3OTNlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25v ZGVzLmgKQEAgLTI3LDYgKzI3LDggQEAgdHlwZWRlZiBlbnVtIE5vZGVUYWcKIHsKIAlUX0lu dmFsaWQgPSAwLAogCisjaW5jbHVkZSAibm9kZXMvbm9kZXRhZ3MuaCIKKyNpZmRlZiBPQlNP TEVURQogCS8qCiAJICogVEFHUyBGT1IgRVhFQ1VUT1IgTk9ERVMgKGV4ZWNub2Rlcy5oKQog CSAqLwpAQCAtNTI1LDggKzUyNywxNCBAQCB0eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfU3Vw cG9ydFJlcXVlc3RDb3N0LAkJLyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1 cHBvcnRSZXF1ZXN0Um93cywJCS8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCiAJVF9T dXBwb3J0UmVxdWVzdEluZGV4Q29uZGl0aW9uCS8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5o ICovCisjZW5kaWYgLypPQlNPTEVURSovCiB9IE5vZGVUYWc7CiAKKy8qCisgKiB1c2VkIGlu IG5vZGUgZGVmaW5pdGlvbnMgdG8gc2V0IGV4dHJhIGluZm9ybWF0aW9uIGZvciBnZW5fbm9k ZV9zdHVmZi5wbAorICovCisjZGVmaW5lIHBnX25vZGVfYXR0cih4KQorCiAvKgogICogVGhl IGZpcnN0IGZpZWxkIG9mIGEgbm9kZSBvZiBhbnkgdHlwZSBpcyBndWFyYW50ZWVkIHRvIGJl IHRoZSBOb2RlVGFnLgogICogSGVuY2UgdGhlIHR5cGUgb2YgYW55IG5vZGUgY2FuIGJlIGdv dHRlbiBieSBjYXN0aW5nIGl0IHRvIE5vZGUuIERlY2xhcmluZwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCmluZGV4IDMxMzg4Nzc1NTMuLmQyZWEwOTY0OTggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmgKQEAgLTEyMSw3ICsxMjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWVyeQogCiAJ UXVlcnlTb3VyY2UgcXVlcnlTb3VyY2U7CS8qIHdoZXJlIGRpZCBJIGNvbWUgZnJvbT8gKi8K IAotCXVpbnQ2NAkJcXVlcnlJZDsJCS8qIHF1ZXJ5IGlkZW50aWZpZXIgKGNhbiBiZSBzZXQg YnkgcGx1Z2lucykgKi8KKwl1aW50NjQJCXF1ZXJ5SWQgcGdfbm9kZV9hdHRyKGVxdWFsX2ln bm9yZSk7CQkvKiBxdWVyeSBpZGVudGlmaWVyIChjYW4gYmUgc2V0IGJ5IHBsdWdpbnMpICov CiAKIAlib29sCQljYW5TZXRUYWc7CQkvKiBkbyBJIHNldCB0aGUgY29tbWFuZCByZXN1bHQg dGFnPyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDJhNTNhNmUzNDQuLmVjNmU3 Mjg2YzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0yMjcsNyArMjI3LDcgQEAgc3Ry dWN0IFBsYW5uZXJJbmZvCiAJICogR0VRTy4KIAkgKi8KIAlMaXN0CSAgICpqb2luX3JlbF9s aXN0OwkvKiBsaXN0IG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KLQlzdHJ1Y3Qg SFRBQiAqam9pbl9yZWxfaGFzaDsgLyogb3B0aW9uYWwgaGFzaHRhYmxlIGZvciBqb2luIHJl bGF0aW9ucyAqLworCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoIHBnX25vZGVfYXR0cihy ZWFkd3JpdGVfaWdub3JlKTsgLyogb3B0aW9uYWwgaGFzaHRhYmxlIGZvciBqb2luIHJlbGF0 aW9ucyAqLwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEgZHluYW1pYy1wcm9ncmFtbWluZy1z dHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10KQEAgLTMyOSwxMCArMzI5LDEw IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCUxpc3QJICAgKnVwZGF0ZV9jb2xub3M7CiAKIAkv KiBGaWVsZHMgZmlsbGVkIGR1cmluZyBjcmVhdGVfcGxhbigpIGZvciB1c2UgaW4gc2V0cmVm cy5jICovCi0JQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFwOwkvKiBmb3IgR3JvdXBpbmdGdW5j IGZpeHVwICovCisJQXR0ck51bWJlciAqZ3JvdXBpbmdfbWFwIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKHVwZGF0ZV9jb2xub3MpKTsJLyogZm9yIEdyb3VwaW5nRnVuYyBmaXh1cCAqLwog CUxpc3QJICAgKm1pbm1heF9hZ2dzOwkvKiBMaXN0IG9mIE1pbk1heEFnZ0luZm9zICovCiAK LQlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0OwkvKiBjb250ZXh0IGhvbGRpbmcgUGxhbm5l ckluZm8gKi8KKwlNZW1vcnlDb250ZXh0IHBsYW5uZXJfY3h0IHBnX25vZGVfYXR0cihyZWFk d3JpdGVfaWdub3JlKTsJLyogY29udGV4dCBob2xkaW5nIFBsYW5uZXJJbmZvICovCiAKIAlD YXJkaW5hbGl0eQl0b3RhbF90YWJsZV9wYWdlczsJLyogIyBvZiBwYWdlcyBpbiBhbGwgbm9u LWR1bW15IHRhYmxlcyBvZgogCQkJCQkJCQkJICogcXVlcnkgKi8KQEAgLTM2OSw4ICszNjks OCBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAlMaXN0CSAgICpjdXJPdXRlclBhcmFtczsgLyog bm90LXlldC1hc3NpZ25lZCBOZXN0TG9vcFBhcmFtcyAqLwogCiAJLyogVGhlc2UgZmllbGRz IGFyZSB3b3Jrc3BhY2UgZm9yIHNldHJlZnMuYyAqLwotCWJvb2wJICAgKmlzQWx0U3VicGxh bjsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBnbG9iLT5zdWJwbGFucyAqLwotCWJvb2wJ ICAgKmlzVXNlZFN1YnBsYW47CS8qIGFycmF5IGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+c3Vi cGxhbnMgKi8KKwlib29sCSAgICppc0FsdFN1YnBsYW4gcGdfbm9kZV9hdHRyKGFycmF5X3Np emUoY3VyT3V0ZXJQYXJhbXMpKTsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBnbG9iLT5z dWJwbGFucyAqLworCWJvb2wJICAgKmlzVXNlZFN1YnBsYW4gcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUoY3VyT3V0ZXJQYXJhbXMpKTsJLyogYXJyYXkgY29ycmVzcG9uZGluZyB0byBnbG9i LT5zdWJwbGFucyAqLwogCiAJLyogb3B0aW9uYWwgcHJpdmF0ZSBkYXRhIGZvciBqb2luX3Nl YXJjaF9ob29rLCBlLmcuLCBHRVFPICovCiAJdm9pZAkgICAqam9pbl9zZWFyY2hfcHJpdmF0 ZTsKQEAgLTcxMSw4ICs3MTEsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUlRF S2luZAkJcnRla2luZDsJCS8qIFJFTEFUSU9OLCBTVUJRVUVSWSwgRlVOQ1RJT04sIGV0YyAq LwogCUF0dHJOdW1iZXIJbWluX2F0dHI7CQkvKiBzbWFsbGVzdCBhdHRybm8gb2YgcmVsIChv ZnRlbiA8MCkgKi8KIAlBdHRyTnVtYmVyCW1heF9hdHRyOwkJLyogbGFyZ2VzdCBhdHRybm8g b2YgcmVsICovCi0JUmVsaWRzCSAgICphdHRyX25lZWRlZDsJLyogYXJyYXkgaW5kZXhlZCBb bWluX2F0dHIgLi4gbWF4X2F0dHJdICovCi0JaW50MzIJICAgKmF0dHJfd2lkdGhzOwkvKiBh cnJheSBpbmRleGVkIFttaW5fYXR0ciAuLiBtYXhfYXR0cl0gKi8KKwlSZWxpZHMJICAgKmF0 dHJfbmVlZGVkIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogYXJyYXkgaW5k ZXhlZCBbbWluX2F0dHIgLi4gbWF4X2F0dHJdICovCisJaW50MzIJICAgKmF0dHJfd2lkdGhz IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogYXJyYXkgaW5kZXhlZCBbbWlu X2F0dHIgLi4gbWF4X2F0dHJdICovCiAJTGlzdAkgICAqbGF0ZXJhbF92YXJzOwkvKiBMQVRF UkFMIFZhcnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSByZWwgKi8KIAlSZWxpZHMJCWxhdGVy YWxfcmVmZXJlbmNlcnM7CS8qIHJlbHMgdGhhdCByZWZlcmVuY2UgbWUgbGF0ZXJhbGx5ICov CiAJTGlzdAkgICAqaW5kZXhsaXN0OwkJLyogbGlzdCBvZiBJbmRleE9wdEluZm8gKi8KQEAg LTczMywxMyArNzMzLDEzIEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlPaWQJCQl1 c2VyaWQ7CQkJLyogaWRlbnRpZmllcyB1c2VyIHRvIGNoZWNrIGFjY2VzcyBhcyAqLwogCWJv b2wJCXVzZXJpZGlzY3VycmVudDsJLyogam9pbiBpcyBvbmx5IHZhbGlkIGZvciBjdXJyZW50 IHVzZXIgKi8KIAkvKiB1c2UgInN0cnVjdCBGZHdSb3V0aW5lIiB0byBhdm9pZCBpbmNsdWRp bmcgZmR3YXBpLmggaGVyZSAqLwotCXN0cnVjdCBGZHdSb3V0aW5lICpmZHdyb3V0aW5lOwor CXN0cnVjdCBGZHdSb3V0aW5lICpmZHdyb3V0aW5lIHBnX25vZGVfYXR0cihyZWFkd3JpdGVf aWdub3JlKTsKIAl2b2lkCSAgICpmZHdfcHJpdmF0ZTsKIAogCS8qIGNhY2hlIHNwYWNlIGZv ciByZW1lbWJlcmluZyBpZiB3ZSBoYXZlIHByb3ZlbiB0aGlzIHJlbGF0aW9uIHVuaXF1ZSAq LwotCUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVsczsJLyoga25vd24gdW5pcXVlIGZvciB0aGVz ZSBvdGhlciByZWxpZAorCUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVscyBwZ19ub2RlX2F0dHIo cmVhZHdyaXRlX2lnbm9yZSk7CS8qIGtub3duIHVuaXF1ZSBmb3IgdGhlc2Ugb3RoZXIgcmVs aWQKIAkJCQkJCQkJCSAqIHNldChzKSAqLwotCUxpc3QJICAgKm5vbl91bmlxdWVfZm9yX3Jl bHM7CS8qIGtub3duIG5vdCB1bmlxdWUgZm9yIHRoZXNlIHNldChzKSAqLworCUxpc3QJICAg Km5vbl91bmlxdWVfZm9yX3JlbHMgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkv KiBrbm93biBub3QgdW5pcXVlIGZvciB0aGVzZSBzZXQocykgKi8KIAogCS8qIHVzZWQgYnkg dmFyaW91cyBzY2FucyBhbmQgam9pbnM6ICovCiAJTGlzdAkgICAqYmFzZXJlc3RyaWN0aW5m bzsJLyogUmVzdHJpY3RJbmZvIHN0cnVjdHVyZXMgKGlmIGJhc2UgcmVsKSAqLwpAQCAtODM3 LDcgKzgzNyw3IEBAIHN0cnVjdCBJbmRleE9wdEluZm8KIAogCU9pZAkJCWluZGV4b2lkOwkJ LyogT0lEIG9mIHRoZSBpbmRleCByZWxhdGlvbiAqLwogCU9pZAkJCXJlbHRhYmxlc3BhY2U7 CS8qIHRhYmxlc3BhY2Ugb2YgaW5kZXggKG5vdCB0YWJsZSkgKi8KLQlSZWxPcHRJbmZvICpy ZWw7CQkJLyogYmFjay1saW5rIHRvIGluZGV4J3MgdGFibGUgKi8KKwlSZWxPcHRJbmZvICpy ZWwgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkJCS8qIGJhY2stbGluayB0byBp bmRleCdzIHRhYmxlICovCiAKIAkvKiBpbmRleC1zaXplIHN0YXRpc3RpY3MgKGZyb20gcGdf Y2xhc3MgYW5kIGVsc2V3aGVyZSkgKi8KIAlCbG9ja051bWJlciBwYWdlczsJCQkvKiBudW1i ZXIgb2YgZGlzayBwYWdlcyBpbiBpbmRleCAqLwpAQCAtODQ3LDIwICs4NDcsMjAgQEAgc3Ry dWN0IEluZGV4T3B0SW5mbwogCS8qIGluZGV4IGRlc2NyaXB0b3IgaW5mb3JtYXRpb24gKi8K IAlpbnQJCQluY29sdW1uczsJCS8qIG51bWJlciBvZiBjb2x1bW5zIGluIGluZGV4ICovCiAJ aW50CQkJbmtleWNvbHVtbnM7CS8qIG51bWJlciBvZiBrZXkgY29sdW1ucyBpbiBpbmRleCAq LwotCWludAkJICAgKmluZGV4a2V5czsJCS8qIGNvbHVtbiBudW1iZXJzIG9mIGluZGV4J3Mg YXR0cmlidXRlcyBib3RoCisJaW50CQkgICAqaW5kZXhrZXlzIHBnX25vZGVfYXR0cihyZWFk d3JpdGVfaWdub3JlKTsJCS8qIGNvbHVtbiBudW1iZXJzIG9mIGluZGV4J3MgYXR0cmlidXRl cyBib3RoCiAJCQkJCQkJCSAqIGtleSBhbmQgaW5jbHVkZWQgY29sdW1ucywgb3IgMCAqLwot CU9pZAkJICAgKmluZGV4Y29sbGF0aW9uczsJLyogT0lEcyBvZiBjb2xsYXRpb25zIG9mIGlu ZGV4IGNvbHVtbnMgKi8KLQlPaWQJCSAgICpvcGZhbWlseTsJCS8qIE9JRHMgb2Ygb3BlcmF0 b3IgZmFtaWxpZXMgZm9yIGNvbHVtbnMgKi8KLQlPaWQJCSAgICpvcGNpbnR5cGU7CQkvKiBP SURzIG9mIG9wY2xhc3MgZGVjbGFyZWQgaW5wdXQgZGF0YSB0eXBlcyAqLwotCU9pZAkJICAg KnNvcnRvcGZhbWlseTsJLyogT0lEcyBvZiBidHJlZSBvcGZhbWlsaWVzLCBpZiBvcmRlcmFi bGUgKi8KLQlib29sCSAgICpyZXZlcnNlX3NvcnQ7CS8qIGlzIHNvcnQgb3JkZXIgZGVzY2Vu ZGluZz8gKi8KLQlib29sCSAgICpudWxsc19maXJzdDsJLyogZG8gTlVMTHMgY29tZSBmaXJz dCBpbiB0aGUgc29ydCBvcmRlcj8gKi8KLQlieXRlYQkgICoqb3BjbGFzc29wdGlvbnM7IC8q IG9wY2xhc3Mtc3BlY2lmaWMgb3B0aW9ucyBmb3IgY29sdW1ucyAqLwotCWJvb2wJICAgKmNh bnJldHVybjsJCS8qIHdoaWNoIGluZGV4IGNvbHMgY2FuIGJlIHJldHVybmVkIGluIGFuCisJ T2lkCQkgICAqaW5kZXhjb2xsYXRpb25zIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3Jl KTsJLyogT0lEcyBvZiBjb2xsYXRpb25zIG9mIGluZGV4IGNvbHVtbnMgKi8KKwlPaWQJCSAg ICpvcGZhbWlseSBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkvKiBPSURzIG9m IG9wZXJhdG9yIGZhbWlsaWVzIGZvciBjb2x1bW5zICovCisJT2lkCQkgICAqb3BjaW50eXBl IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJCS8qIE9JRHMgb2Ygb3BjbGFzcyBk ZWNsYXJlZCBpbnB1dCBkYXRhIHR5cGVzICovCisJT2lkCQkgICAqc29ydG9wZmFtaWx5IHBn X25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogT0lEcyBvZiBidHJlZSBvcGZhbWls aWVzLCBpZiBvcmRlcmFibGUgKi8KKwlib29sCSAgICpyZXZlcnNlX3NvcnQgcGdfbm9kZV9h dHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBpcyBzb3J0IG9yZGVyIGRlc2NlbmRpbmc/ICov CisJYm9vbAkgICAqbnVsbHNfZmlyc3QgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUp OwkvKiBkbyBOVUxMcyBjb21lIGZpcnN0IGluIHRoZSBzb3J0IG9yZGVyPyAqLworCWJ5dGVh CSAgKipvcGNsYXNzb3B0aW9ucyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7IC8q IG9wY2xhc3Mtc3BlY2lmaWMgb3B0aW9ucyBmb3IgY29sdW1ucyAqLworCWJvb2wJICAgKmNh bnJldHVybiBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CQkvKiB3aGljaCBpbmRl eCBjb2xzIGNhbiBiZSByZXR1cm5lZCBpbiBhbgogCQkJCQkJCQkgKiBpbmRleC1vbmx5IHNj YW4/ICovCiAJT2lkCQkJcmVsYW07CQkJLyogT0lEIG9mIHRoZSBhY2Nlc3MgbWV0aG9kIChp biBwZ19hbSkgKi8KIAotCUxpc3QJICAgKmluZGV4cHJzOwkJLyogZXhwcmVzc2lvbnMgZm9y IG5vbi1zaW1wbGUgaW5kZXggY29sdW1ucyAqLworCUxpc3QJICAgKmluZGV4cHJzIHBnX25v ZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJCS8qIGV4cHJlc3Npb25zIGZvciBub24tc2lt cGxlIGluZGV4IGNvbHVtbnMgKi8KIAlMaXN0CSAgICppbmRwcmVkOwkJLyogcHJlZGljYXRl IGlmIGEgcGFydGlhbCBpbmRleCwgZWxzZSBOSUwgKi8KIAogCUxpc3QJICAgKmluZGV4dGxp c3Q7CQkvKiB0YXJnZXRsaXN0IHJlcHJlc2VudGluZyBpbmRleCBjb2x1bW5zICovCkBAIC04 NzcsMTQgKzg3NywxNCBAQCBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJaHlwb3RoZXRp Y2FsOwkvKiB0cnVlIGlmIGluZGV4IGRvZXNuJ3QgcmVhbGx5IGV4aXN0ICovCiAKIAkvKiBS ZW1haW5pbmcgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgaW5kZXggQU0ncyBBUEkgc3Ry dWN0OiAqLwotCWJvb2wJCWFtY2Fub3JkZXJieW9wOyAvKiBkb2VzIEFNIHN1cHBvcnQgb3Jk ZXIgYnkgb3BlcmF0b3IgcmVzdWx0PyAqLwotCWJvb2wJCWFtb3B0aW9uYWxrZXk7CS8qIGNh biBxdWVyeSBvbWl0IGtleSBmb3IgdGhlIGZpcnN0IGNvbHVtbj8gKi8KLQlib29sCQlhbXNl YXJjaGFycmF5OwkvKiBjYW4gQU0gaGFuZGxlIFNjYWxhckFycmF5T3BFeHByIHF1YWxzPyAq LwotCWJvb2wJCWFtc2VhcmNobnVsbHM7CS8qIGNhbiBBTSBzZWFyY2ggZm9yIE5VTEwvTk9U IE5VTEwgZW50cmllcz8gKi8KLQlib29sCQlhbWhhc2dldHR1cGxlOwkvKiBkb2VzIEFNIGhh dmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICovCi0JYm9vbAkJYW1oYXNnZXRiaXRtYXA7IC8q IGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCi0JYm9vbAkJYW1jYW5w YXJhbGxlbDsJLyogZG9lcyBBTSBzdXBwb3J0IHBhcmFsbGVsIHNjYW4/ICovCi0JYm9vbAkJ YW1jYW5tYXJrcG9zOwkvKiBkb2VzIEFNIHN1cHBvcnQgbWFyay9yZXN0b3JlPyAqLworCWJv b2wJCWFtY2Fub3JkZXJieW9wIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsgLyog ZG9lcyBBTSBzdXBwb3J0IG9yZGVyIGJ5IG9wZXJhdG9yIHJlc3VsdD8gKi8KKwlib29sCQlh bW9wdGlvbmFsa2V5IHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogY2FuIHF1 ZXJ5IG9taXQga2V5IGZvciB0aGUgZmlyc3QgY29sdW1uPyAqLworCWJvb2wJCWFtc2VhcmNo YXJyYXkgcGdfbm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBjYW4gQU0gaGFuZGxl IFNjYWxhckFycmF5T3BFeHByIHF1YWxzPyAqLworCWJvb2wJCWFtc2VhcmNobnVsbHMgcGdf bm9kZV9hdHRyKHJlYWR3cml0ZV9pZ25vcmUpOwkvKiBjYW4gQU0gc2VhcmNoIGZvciBOVUxM L05PVCBOVUxMIGVudHJpZXM/ICovCisJYm9vbAkJYW1oYXNnZXR0dXBsZSBwZ19ub2RlX2F0 dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGRvZXMgQU0gaGF2ZSBhbWdldHR1cGxlIGludGVy ZmFjZT8gKi8KKwlib29sCQlhbWhhc2dldGJpdG1hcCBwZ19ub2RlX2F0dHIocmVhZHdyaXRl X2lnbm9yZSk7IC8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCisJ Ym9vbAkJYW1jYW5wYXJhbGxlbCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8q IGRvZXMgQU0gc3VwcG9ydCBwYXJhbGxlbCBzY2FuPyAqLworCWJvb2wJCWFtY2FubWFya3Bv cyBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2lnbm9yZSk7CS8qIGRvZXMgQU0gc3VwcG9ydCBt YXJrL3Jlc3RvcmU/ICovCiAJLyogUmF0aGVyIHRoYW4gaW5jbHVkZSBhbWFwaS5oIGhlcmUs IHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlzICovCiAJdm9pZAkJKCphbWNv c3Rlc3RpbWF0ZSkgKCk7CS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIH07CkBAIC05MDUs OSArOTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRm9yZWlnbktleU9wdEluZm8KIAlJbmRleAkJ Y29uX3JlbGlkOwkJLyogUlQgaW5kZXggb2YgdGhlIHJlZmVyZW5jaW5nIHRhYmxlICovCiAJ SW5kZXgJCXJlZl9yZWxpZDsJCS8qIFJUIGluZGV4IG9mIHRoZSByZWZlcmVuY2VkIHRhYmxl ICovCiAJaW50CQkJbmtleXM7CQkJLyogbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGZvcmVp Z24ga2V5ICovCi0JQXR0ck51bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdOyAvKiBjb2xz IGluIHJlZmVyZW5jaW5nIHRhYmxlICovCi0JQXR0ck51bWJlcgljb25ma2V5W0lOREVYX01B WF9LRVlTXTsJLyogY29scyBpbiByZWZlcmVuY2VkIHRhYmxlICovCi0JT2lkCQkJY29ucGZl cW9wW0lOREVYX01BWF9LRVlTXTsJLyogUEsgPSBGSyBvcGVyYXRvciBPSURzICovCisJQXR0 ck51bWJlcgljb25rZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG5rZXlzKSk7IC8qIGNvbHMgaW4gcmVmZXJlbmNpbmcgdGFibGUgKi8KKwlBdHRyTnVtYmVy CWNvbmZrZXlbSU5ERVhfTUFYX0tFWVNdIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG5rZXlz KSk7CS8qIGNvbHMgaW4gcmVmZXJlbmNlZCB0YWJsZSAqLworCU9pZAkJCWNvbnBmZXFvcFtJ TkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsJLyogUEsg PSBGSyBvcGVyYXRvciBPSURzICovCiAKIAkvKiBEZXJpdmVkIGluZm8gYWJvdXQgd2hldGhl ciBGSydzIGVxdWFsaXR5IGNvbmRpdGlvbnMgbWF0Y2ggdGhlIHF1ZXJ5OiAqLwogCWludAkJ CW5tYXRjaGVkX2VjOwkvKiAjIG9mIEZLIGNvbHMgbWF0Y2hlZCBieSBFQ3MgKi8KQEAgLTkz NCw3ICs5MzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBTdGF0aXN0aWNFeHRJbmZvCiAJTm9kZVRh ZwkJdHlwZTsKIAogCU9pZAkJCXN0YXRPaWQ7CQkvKiBPSUQgb2YgdGhlIHN0YXRpc3RpY3Mg cm93ICovCi0JUmVsT3B0SW5mbyAqcmVsOwkJCS8qIGJhY2stbGluayB0byBzdGF0aXN0aWMn cyB0YWJsZSAqLworCVJlbE9wdEluZm8gKnJlbCBwZ19ub2RlX2F0dHIocmVhZHdyaXRlX2ln bm9yZSk7CQkJLyogYmFjay1saW5rIHRvIHN0YXRpc3RpYydzIHRhYmxlICovCiAJY2hhcgkJ a2luZDsJCQkvKiBzdGF0aXN0aWNzIGtpbmQgb2YgdGhpcyBlbnRyeSAqLwogCUJpdG1hcHNl dCAgKmtleXM7CQkJLyogYXR0bnVtcyBvZiB0aGUgY29sdW1ucyBjb3ZlcmVkICovCiAJTGlz dAkgICAqZXhwcnM7CQkJLyogZXhwcmVzc2lvbnMgKi8KQEAgLTExMDgsNyArMTEwOCw3IEBA IHR5cGVkZWYgc3RydWN0IFBhdGhUYXJnZXQKIHsKIAlOb2RlVGFnCQl0eXBlOwogCUxpc3QJ ICAgKmV4cHJzOwkJCS8qIGxpc3Qgb2YgZXhwcmVzc2lvbnMgdG8gYmUgY29tcHV0ZWQgKi8K LQlJbmRleAkgICAqc29ydGdyb3VwcmVmczsJLyogY29ycmVzcG9uZGluZyBzb3J0L2dyb3Vw IHJlZm5vcywgb3IgMCAqLworCUluZGV4CSAgICpzb3J0Z3JvdXByZWZzIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKGV4cHJzKSk7CS8qIGNvcnJlc3BvbmRpbmcgc29ydC9ncm91cCByZWZu b3MsIG9yIDAgKi8KIAlRdWFsQ29zdAljb3N0OwkJCS8qIGNvc3Qgb2YgZXZhbHVhdGluZyB0 aGUgZXhwcmVzc2lvbnMgKi8KIAlpbnQJCQl3aWR0aDsJCQkvKiBlc3RpbWF0ZWQgYXZnIHdp ZHRoIG9mIHJlc3VsdCB0dXBsZXMgKi8KIAlWb2xhdGlsZUZ1bmN0aW9uU3RhdHVzIGhhc192 b2xhdGlsZV9leHByOwkvKiBpbmRpY2F0ZXMgaWYgZXhwcnMgY29udGFpbgpAQCAtMTE3OSwx MCArMTE3OSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBQYXRoCiAKIAlOb2RlVGFnCQlwYXRodHlw ZTsJCS8qIHRhZyBpZGVudGlmeWluZyBzY2FuL2pvaW4gbWV0aG9kICovCiAKLQlSZWxPcHRJ bmZvICpwYXJlbnQ7CQkJLyogdGhlIHJlbGF0aW9uIHRoaXMgcGF0aCBjYW4gYnVpbGQgKi8K LQlQYXRoVGFyZ2V0ICpwYXRodGFyZ2V0OwkJLyogbGlzdCBvZiBWYXJzL0V4cHJzLCBjb3N0 LCB3aWR0aCAqLworCVJlbE9wdEluZm8gKnBhcmVudCBwZ19ub2RlX2F0dHIocGF0aF9oYWNr MSk7CQkJLyogdGhlIHJlbGF0aW9uIHRoaXMgcGF0aCBjYW4gYnVpbGQgKi8KKwlQYXRoVGFy Z2V0ICpwYXRodGFyZ2V0IHBnX25vZGVfYXR0cihwYXRoX2hhY2syKTsJCS8qIGxpc3Qgb2Yg VmFycy9FeHBycywgY29zdCwgd2lkdGggKi8KIAotCVBhcmFtUGF0aEluZm8gKnBhcmFtX2lu Zm87CS8qIHBhcmFtZXRlcml6YXRpb24gaW5mbywgb3IgTlVMTCBpZiBub25lICovCisJUGFy YW1QYXRoSW5mbyAqcGFyYW1faW5mbyBwZ19ub2RlX2F0dHIocGF0aF9oYWNrMyk7CS8qIHBh cmFtZXRlcml6YXRpb24gaW5mbywgb3IgTlVMTCBpZiBub25lICovCiAKIAlib29sCQlwYXJh bGxlbF9hd2FyZTsgLyogZW5nYWdlIHBhcmFsbGVsLWF3YXJlIGxvZ2ljPyAqLwogCWJvb2wJ CXBhcmFsbGVsX3NhZmU7CS8qIE9LIHRvIHVzZSBhcyBwYXJ0IG9mIHBhcmFsbGVsIHBsYW4/ ICovCkBAIC0yMDU5LDE5ICsyMDU5LDE5IEBAIHR5cGVkZWYgc3RydWN0IFJlc3RyaWN0SW5m bwogCiAJYm9vbAkJb3V0ZXJqb2luX2RlbGF5ZWQ7CS8qIHRydWUgaWYgZGVsYXllZCBieSBs b3dlciBvdXRlciBqb2luICovCiAKLQlib29sCQljYW5fam9pbjsJCS8qIHNlZSBjb21tZW50 IGFib3ZlICovCisJYm9vbAkJY2FuX2pvaW4gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7 CQkvKiBzZWUgY29tbWVudCBhYm92ZSAqLwogCi0JYm9vbAkJcHNldWRvY29uc3RhbnQ7IC8q IHNlZSBjb21tZW50IGFib3ZlICovCisJYm9vbAkJcHNldWRvY29uc3RhbnQgcGdfbm9kZV9h dHRyKGVxdWFsX2lnbm9yZSk7IC8qIHNlZSBjb21tZW50IGFib3ZlICovCiAKLQlib29sCQls ZWFrcHJvb2Y7CQkvKiB0cnVlIGlmIGtub3duIHRvIGNvbnRhaW4gbm8gbGVha2VkIFZhcnMg Ki8KKwlib29sCQlsZWFrcHJvb2YgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkvKiB0 cnVlIGlmIGtub3duIHRvIGNvbnRhaW4gbm8gbGVha2VkIFZhcnMgKi8KIAotCVZvbGF0aWxl RnVuY3Rpb25TdGF0dXMgaGFzX3ZvbGF0aWxlOwkvKiB0byBpbmRpY2F0ZSBpZiBjbGF1c2Ug Y29udGFpbnMKKwlWb2xhdGlsZUZ1bmN0aW9uU3RhdHVzIGhhc192b2xhdGlsZSBwZ19ub2Rl X2F0dHIoZXF1YWxfaWdub3JlKTsJLyogdG8gaW5kaWNhdGUgaWYgY2xhdXNlIGNvbnRhaW5z CiAJCQkJCQkJCQkJCSAqIGFueSB2b2xhdGlsZSBmdW5jdGlvbnMuICovCiAKIAlJbmRleAkJ c2VjdXJpdHlfbGV2ZWw7IC8qIHNlZSBjb21tZW50IGFib3ZlICovCiAKIAkvKiBUaGUgc2V0 IG9mIHJlbGlkcyAodmFybm9zKSBhY3R1YWxseSByZWZlcmVuY2VkIGluIHRoZSBjbGF1c2U6 ICovCi0JUmVsaWRzCQljbGF1c2VfcmVsaWRzOworCVJlbGlkcwkJY2xhdXNlX3JlbGlkcyBw Z19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIAogCS8qIFRoZSBzZXQgb2YgcmVsaWRzIHJl cXVpcmVkIHRvIGV2YWx1YXRlIHRoZSBjbGF1c2U6ICovCiAJUmVsaWRzCQlyZXF1aXJlZF9y ZWxpZHM7CkBAIC0yMDgzLDQ3ICsyMDgzLDQ3IEBAIHR5cGVkZWYgc3RydWN0IFJlc3RyaWN0 SW5mbwogCVJlbGlkcwkJbnVsbGFibGVfcmVsaWRzOwogCiAJLyogVGhlc2UgZmllbGRzIGFy ZSBzZXQgZm9yIGFueSBiaW5hcnkgb3BjbGF1c2U6ICovCi0JUmVsaWRzCQlsZWZ0X3JlbGlk czsJLyogcmVsaWRzIGluIGxlZnQgc2lkZSBvZiBjbGF1c2UgKi8KLQlSZWxpZHMJCXJpZ2h0 X3JlbGlkczsJLyogcmVsaWRzIGluIHJpZ2h0IHNpZGUgb2YgY2xhdXNlICovCisJUmVsaWRz CQlsZWZ0X3JlbGlkcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogcmVsaWRzIGlu IGxlZnQgc2lkZSBvZiBjbGF1c2UgKi8KKwlSZWxpZHMJCXJpZ2h0X3JlbGlkcyBwZ19ub2Rl X2F0dHIoZXF1YWxfaWdub3JlKTsJLyogcmVsaWRzIGluIHJpZ2h0IHNpZGUgb2YgY2xhdXNl ICovCiAKIAkvKiBUaGlzIGZpZWxkIGlzIE5VTEwgdW5sZXNzIGNsYXVzZSBpcyBhbiBPUiBj bGF1c2U6ICovCi0JRXhwcgkgICAqb3JjbGF1c2U7CQkvKiBtb2RpZmllZCBjbGF1c2Ugd2l0 aCBSZXN0cmljdEluZm9zICovCisJRXhwcgkgICAqb3JjbGF1c2UgcGdfbm9kZV9hdHRyKGVx dWFsX2lnbm9yZSk7CQkvKiBtb2RpZmllZCBjbGF1c2Ugd2l0aCBSZXN0cmljdEluZm9zICov CiAKIAkvKiBUaGlzIGZpZWxkIGlzIE5VTEwgdW5sZXNzIGNsYXVzZSBpcyBwb3RlbnRpYWxs eSByZWR1bmRhbnQ6ICovCi0JRXF1aXZhbGVuY2VDbGFzcyAqcGFyZW50X2VjOwkvKiBnZW5l cmF0aW5nIEVxdWl2YWxlbmNlQ2xhc3MgKi8KKwlFcXVpdmFsZW5jZUNsYXNzICpwYXJlbnRf ZWMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSByZWFkd3JpdGVfaWdub3JlKTsJLyogZ2Vu ZXJhdGluZyBFcXVpdmFsZW5jZUNsYXNzICovCiAKIAkvKiBjYWNoZSBzcGFjZSBmb3IgY29z dCBhbmQgc2VsZWN0aXZpdHkgKi8KLQlRdWFsQ29zdAlldmFsX2Nvc3Q7CQkvKiBldmFsIGNv c3Qgb2YgY2xhdXNlOyAtMSBpZiBub3QgeWV0IHNldCAqLwotCVNlbGVjdGl2aXR5IG5vcm1f c2VsZWM7CQkvKiBzZWxlY3Rpdml0eSBmb3IgIm5vcm1hbCIgKEpPSU5fSU5ORVIpCisJUXVh bENvc3QJZXZhbF9jb3N0IHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJLyogZXZhbCBj b3N0IG9mIGNsYXVzZTsgLTEgaWYgbm90IHlldCBzZXQgKi8KKwlTZWxlY3Rpdml0eSBub3Jt X3NlbGVjIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJLyogc2VsZWN0aXZpdHkgZm9y ICJub3JtYWwiIChKT0lOX0lOTkVSKQogCQkJCQkJCQkgKiBzZW1hbnRpY3M7IC0xIGlmIG5v dCB5ZXQgc2V0OyA+MSBtZWFucyBhCiAJCQkJCQkJCSAqIHJlZHVuZGFudCBjbGF1c2UgKi8K LQlTZWxlY3Rpdml0eSBvdXRlcl9zZWxlYzsJLyogc2VsZWN0aXZpdHkgZm9yIG91dGVyIGpv aW4gc2VtYW50aWNzOyAtMSBpZgorCVNlbGVjdGl2aXR5IG91dGVyX3NlbGVjIHBnX25vZGVf YXR0cihlcXVhbF9pZ25vcmUpOwkvKiBzZWxlY3Rpdml0eSBmb3Igb3V0ZXIgam9pbiBzZW1h bnRpY3M7IC0xIGlmCiAJCQkJCQkJCSAqIG5vdCB5ZXQgc2V0ICovCiAKIAkvKiB2YWxpZCBp ZiBjbGF1c2UgaXMgbWVyZ2Vqb2luYWJsZSwgZWxzZSBOSUwgKi8KLQlMaXN0CSAgICptZXJn ZW9wZmFtaWxpZXM7CS8qIG9wZmFtaWxpZXMgY29udGFpbmluZyBjbGF1c2Ugb3BlcmF0b3Ig Ki8KKwlMaXN0CSAgICptZXJnZW9wZmFtaWxpZXMgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9y ZSk7CS8qIG9wZmFtaWxpZXMgY29udGFpbmluZyBjbGF1c2Ugb3BlcmF0b3IgKi8KIAogCS8q IGNhY2hlIHNwYWNlIGZvciBtZXJnZWNsYXVzZSBwcm9jZXNzaW5nOyBOVUxMIGlmIG5vdCB5 ZXQgc2V0ICovCi0JRXF1aXZhbGVuY2VDbGFzcyAqbGVmdF9lYzsJLyogRXF1aXZhbGVuY2VD bGFzcyBjb250YWluaW5nIGxlZnRoYW5kICovCi0JRXF1aXZhbGVuY2VDbGFzcyAqcmlnaHRf ZWM7IC8qIEVxdWl2YWxlbmNlQ2xhc3MgY29udGFpbmluZyByaWdodGhhbmQgKi8KLQlFcXVp dmFsZW5jZU1lbWJlciAqbGVmdF9lbTsgLyogRXF1aXZhbGVuY2VNZW1iZXIgZm9yIGxlZnRo YW5kICovCi0JRXF1aXZhbGVuY2VNZW1iZXIgKnJpZ2h0X2VtOwkvKiBFcXVpdmFsZW5jZU1l bWJlciBmb3IgcmlnaHRoYW5kICovCi0JTGlzdAkgICAqc2NhbnNlbF9jYWNoZTsJLyogbGlz dCBvZiBNZXJnZVNjYW5TZWxDYWNoZSBzdHJ1Y3RzICovCisJRXF1aXZhbGVuY2VDbGFzcyAq bGVmdF9lYyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlIHJlYWR3cml0ZV9pZ25vcmUpOwkv KiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5pbmcgbGVmdGhhbmQgKi8KKwlFcXVpdmFsZW5j ZUNsYXNzICpyaWdodF9lYyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlIHJlYWR3cml0ZV9p Z25vcmUpOyAvKiBFcXVpdmFsZW5jZUNsYXNzIGNvbnRhaW5pbmcgcmlnaHRoYW5kICovCisJ RXF1aXZhbGVuY2VNZW1iZXIgKmxlZnRfZW0gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7 IC8qIEVxdWl2YWxlbmNlTWVtYmVyIGZvciBsZWZ0aGFuZCAqLworCUVxdWl2YWxlbmNlTWVt YmVyICpyaWdodF9lbSBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogRXF1aXZhbGVu Y2VNZW1iZXIgZm9yIHJpZ2h0aGFuZCAqLworCUxpc3QJICAgKnNjYW5zZWxfY2FjaGUgcGdf bm9kZV9hdHRyKGNvcHlfaWdub3JlIGVxdWFsX2lnbm9yZSk7CS8qIGxpc3Qgb2YgTWVyZ2VT Y2FuU2VsQ2FjaGUgc3RydWN0cyAqLwogCiAJLyogdHJhbnNpZW50IHdvcmtzcGFjZSBmb3Ig dXNlIHdoaWxlIGNvbnNpZGVyaW5nIGEgc3BlY2lmaWMgam9pbiBwYXRoICovCi0JYm9vbAkJ b3V0ZXJfaXNfbGVmdDsJLyogVCA9IG91dGVyIHZhciBvbiBsZWZ0LCBGID0gb24gcmlnaHQg Ki8KKwlib29sCQlvdXRlcl9pc19sZWZ0IHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkv KiBUID0gb3V0ZXIgdmFyIG9uIGxlZnQsIEYgPSBvbiByaWdodCAqLwogCiAJLyogdmFsaWQg aWYgY2xhdXNlIGlzIGhhc2hqb2luYWJsZSwgZWxzZSBJbnZhbGlkT2lkOiAqLwotCU9pZAkJ CWhhc2hqb2lub3BlcmF0b3I7CS8qIGNvcHkgb2YgY2xhdXNlIG9wZXJhdG9yICovCisJT2lk CQkJaGFzaGpvaW5vcGVyYXRvciBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJLyogY29w eSBvZiBjbGF1c2Ugb3BlcmF0b3IgKi8KIAogCS8qIGNhY2hlIHNwYWNlIGZvciBoYXNoY2xh dXNlIHByb2Nlc3Npbmc7IC0xIGlmIG5vdCB5ZXQgc2V0ICovCi0JU2VsZWN0aXZpdHkgbGVm dF9idWNrZXRzaXplOwkvKiBhdmcgYnVja2V0c2l6ZSBvZiBsZWZ0IHNpZGUgKi8KLQlTZWxl Y3Rpdml0eSByaWdodF9idWNrZXRzaXplOwkvKiBhdmcgYnVja2V0c2l6ZSBvZiByaWdodCBz aWRlICovCi0JU2VsZWN0aXZpdHkgbGVmdF9tY3ZmcmVxOwkvKiBsZWZ0IHNpZGUncyBtb3N0 IGNvbW1vbiB2YWwncyBmcmVxICovCi0JU2VsZWN0aXZpdHkgcmlnaHRfbWN2ZnJlcTsJLyog cmlnaHQgc2lkZSdzIG1vc3QgY29tbW9uIHZhbCdzIGZyZXEgKi8KKwlTZWxlY3Rpdml0eSBs ZWZ0X2J1Y2tldHNpemUgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIGF2ZyBidWNr ZXRzaXplIG9mIGxlZnQgc2lkZSAqLworCVNlbGVjdGl2aXR5IHJpZ2h0X2J1Y2tldHNpemUg cGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CS8qIGF2ZyBidWNrZXRzaXplIG9mIHJpZ2h0 IHNpZGUgKi8KKwlTZWxlY3Rpdml0eSBsZWZ0X21jdmZyZXEgcGdfbm9kZV9hdHRyKGVxdWFs X2lnbm9yZSk7CS8qIGxlZnQgc2lkZSdzIG1vc3QgY29tbW9uIHZhbCdzIGZyZXEgKi8KKwlT ZWxlY3Rpdml0eSByaWdodF9tY3ZmcmVxIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkv KiByaWdodCBzaWRlJ3MgbW9zdCBjb21tb24gdmFsJ3MgZnJlcSAqLwogCiAJLyogaGFzaCBl cXVhbGl0eSBvcGVyYXRvciB1c2VkIGZvciBtZW1vaXplIG5vZGVzLCBlbHNlIEludmFsaWRP aWQgKi8KLQlPaWQJCQloYXNoZXFvcGVyYXRvcjsKKwlPaWQJCQloYXNoZXFvcGVyYXRvciBw Z19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsKIH0gUmVzdHJpY3RJbmZvOwogCiAvKgpAQCAt MjE3OCw4ICsyMTc4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTY2FuU2VsQ2FjaGUKIHR5 cGVkZWYgc3RydWN0IFBsYWNlSG9sZGVyVmFyCiB7CiAJRXhwcgkJeHByOwotCUV4cHIJICAg KnBoZXhwcjsJCQkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLwotCVJlbGlkcwkJ cGhyZWxzOwkJCS8qIGJhc2UgcmVsaWRzIHN5bnRhY3RpY2FsbHkgd2l0aGluIGV4cHIgc3Jj ICovCisJRXhwcgkgICAqcGhleHByIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOwkJCS8q IHRoZSByZXByZXNlbnRlZCBleHByZXNzaW9uICovCisJUmVsaWRzCQlwaHJlbHMgcGdfbm9k ZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkJLyogYmFzZSByZWxpZHMgc3ludGFjdGljYWxseSB3 aXRoaW4gZXhwciBzcmMgKi8KIAlJbmRleAkJcGhpZDsJCQkvKiBJRCBmb3IgUEhWICh1bmlx dWUgd2l0aGluIHBsYW5uZXIgcnVuKSAqLwogCUluZGV4CQlwaGxldmVsc3VwOwkJLyogPiAw IGlmIFBIViBiZWxvbmdzIHRvIG91dGVyIHF1ZXJ5ICovCiB9IFBsYWNlSG9sZGVyVmFyOwpA QCAtMjM0MCw3ICsyMzQwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUmVsSW5mbwogCSAq IGNoaWxkIGNvbHVtbiBpcyBkcm9wcGVkIG9yIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHBhcmVu dC4KIAkgKi8KIAlpbnQJCQludW1fY2hpbGRfY29sczsgLyogbGVuZ3RoIG9mIGFycmF5ICov Ci0JQXR0ck51bWJlciAqcGFyZW50X2NvbG5vczsJLyogYXJyYXkgb2YgcGFyZW50IGF0dG5v cywgb3IgemVyb2VzICovCisJQXR0ck51bWJlciAqcGFyZW50X2NvbG5vcyBwZ19ub2RlX2F0 dHIoYXJyYXlfc2l6ZShudW1fY2hpbGRfY29scykpOwkvKiBhcnJheSBvZiBwYXJlbnQgYXR0 bm9zLCBvciB6ZXJvZXMgKi8KIAogCS8qCiAJICogV2Ugc3RvcmUgdGhlIHBhcmVudCB0YWJs ZSdzIE9JRCBoZXJlIGZvciBpbmhlcml0YW5jZSwgb3IgSW52YWxpZE9pZCBmb3IKQEAgLTI0 MjgsNyArMjQyOCw3IEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlPaWQJCQlh Z2dmbm9pZDsJCS8qIHBnX3Byb2MgT2lkIG9mIHRoZSBhZ2dyZWdhdGUgKi8KIAlPaWQJCQlh Z2dzb3J0b3A7CQkvKiBPaWQgb2YgaXRzIHNvcnQgb3BlcmF0b3IgKi8KIAlFeHByCSAgICp0 YXJnZXQ7CQkJLyogZXhwcmVzc2lvbiB3ZSBhcmUgYWdncmVnYXRpbmcgb24gKi8KLQlQbGFu bmVySW5mbyAqc3Vicm9vdDsJCS8qIG1vZGlmaWVkICJyb290IiBmb3IgcGxhbm5pbmcgdGhl IHN1YnF1ZXJ5ICovCisJUGxhbm5lckluZm8gKnN1YnJvb3QgcGdfbm9kZV9hdHRyKHJlYWR3 cml0ZV9pZ25vcmUpOwkJLyogbW9kaWZpZWQgInJvb3QiIGZvciBwbGFubmluZyB0aGUgc3Vi cXVlcnkgKi8KIAlQYXRoCSAgICpwYXRoOwkJCS8qIGFjY2VzcyBwYXRoIGZvciBzdWJxdWVy eSAqLwogCUNvc3QJCXBhdGhjb3N0OwkJLyogZXN0aW1hdGVkIGNvc3QgdG8gZmV0Y2ggZmly c3Qgcm93ICovCiAJUGFyYW0JICAgKnBhcmFtOwkJCS8qIHBhcmFtIGZvciBzdWJwbGFuJ3Mg b3V0cHV0ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDAxYTI0NmQ1MGUuLjMyMjAz ODFkYmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0yNzUsMTAgKzI3NSwxMCBAQCB0 eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCUxpc3QJICAgKm1lcmdlcGxhbnM7CiAJLyog dGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8gaW4gc3RydWN0 IFNvcnQ6ICovCiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBzb3J0LWtleSBjb2x1 bW5zICovCi0JQXR0ck51bWJlciAqc29ydENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4g dGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqc29ydE9wZXJhdG9yczsJLyogT0lEcyBv ZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCi0JT2lkCQkgICAqY29sbGF0aW9uczsJ CS8qIE9JRHMgb2YgY29sbGF0aW9ucyAqLwotCWJvb2wJICAgKm51bGxzRmlyc3Q7CQkvKiBO VUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KKwlBdHRyTnVtYmVyICpzb3J0Q29sSWR4 IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMg aW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lkCQkgICAqc29ydE9wZXJhdG9ycyBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIE9JRHMgb2Ygb3BlcmF0b3JzIHRvIHNv cnQgdGhlbSBieSAqLworCU9pZAkJICAgKmNvbGxhdGlvbnMgcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwkJLyogT0lEcyBvZiBjb2xsYXRpb25zICovCisJYm9vbAkgICAq bnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CQkvKiBOVUxM UyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KIAkvKiBJbmZvIGZvciBydW4tdGltZSBzdWJw bGFuIHBydW5pbmc7IE5VTEwgaWYgd2UncmUgbm90IGRvaW5nIHRoYXQgKi8KIAlzdHJ1Y3Qg UGFydGl0aW9uUHJ1bmVJbmZvICpwYXJ0X3BydW5lX2luZm87CiB9IE1lcmdlQXBwZW5kOwpA QCAtMjk4LDkgKzI5OCw5IEBAIHR5cGVkZWYgc3RydWN0IFJlY3Vyc2l2ZVVuaW9uCiAJLyog UmVtYWluaW5nIGZpZWxkcyBhcmUgemVyby9udWxsIGluIFVOSU9OIEFMTCBjYXNlICovCiAJ aW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZvcgogCQkJ CQkJCQkgKiBkdXBsaWNhdGUtbmVzcyAqLwotCUF0dHJOdW1iZXIgKmR1cENvbElkeDsJCS8q IHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqZHVwT3Bl cmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lk CQkgICAqZHVwQ29sbGF0aW9uczsKKwlBdHRyTnVtYmVyICpkdXBDb2xJZHggcGdfbm9kZV9h dHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFy Z2V0IGxpc3QgKi8KKwlPaWQJCSAgICpkdXBPcGVyYXRvcnMgcGdfbm9kZV9hdHRyKGFycmF5 X3NpemUobnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRo ICovCisJT2lkCQkgICAqZHVwQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShu dW1Db2xzKSk7CiAJbG9uZwkJbnVtR3JvdXBzOwkJLyogZXN0aW1hdGVkIG51bWJlciBvZiBn cm91cHMgaW4gaW5wdXQgKi8KIH0gUmVjdXJzaXZlVW5pb247CiAKQEAgLTc1MCwxMCArNzUw LDEwIEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlSm9pbgogCWJvb2wJCXNraXBfbWFya19yZXN0 b3JlOwkvKiBDYW4gd2Ugc2tpcCBtYXJrL3Jlc3RvcmUgY2FsbHM/ICovCiAJTGlzdAkgICAq bWVyZ2VjbGF1c2VzOwkvKiBtZXJnZWNsYXVzZXMgYXMgZXhwcmVzc2lvbiB0cmVlcyAqLwog CS8qIHRoZXNlIGFyZSBhcnJheXMsIGJ1dCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUg bWVyZ2VjbGF1c2VzIGxpc3Q6ICovCi0JT2lkCQkgICAqbWVyZ2VGYW1pbGllczsJLyogcGVy LWNsYXVzZSBPSURzIG9mIGJ0cmVlIG9wZmFtaWxpZXMgKi8KLQlPaWQJCSAgICptZXJnZUNv bGxhdGlvbnM7CS8qIHBlci1jbGF1c2UgT0lEcyBvZiBjb2xsYXRpb25zICovCi0JaW50CQkg ICAqbWVyZ2VTdHJhdGVnaWVzOwkvKiBwZXItY2xhdXNlIG9yZGVyaW5nIChBU0Mgb3IgREVT QykgKi8KLQlib29sCSAgICptZXJnZU51bGxzRmlyc3Q7CS8qIHBlci1jbGF1c2UgbnVsbHMg b3JkZXJpbmcgKi8KKwlPaWQJCSAgICptZXJnZUZhbWlsaWVzIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG1lcmdlY2xhdXNlcykpOwkvKiBwZXItY2xhdXNlIE9JRHMgb2YgYnRyZWUgb3Bm YW1pbGllcyAqLworCU9pZAkJICAgKm1lcmdlQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShtZXJnZWNsYXVzZXMpKTsJLyogcGVyLWNsYXVzZSBPSURzIG9mIGNvbGxhdGlv bnMgKi8KKwlpbnQJCSAgICptZXJnZVN0cmF0ZWdpZXMgcGdfbm9kZV9hdHRyKGFycmF5X3Np emUobWVyZ2VjbGF1c2VzKSk7CS8qIHBlci1jbGF1c2Ugb3JkZXJpbmcgKEFTQyBvciBERVND KSAqLworCWJvb2wJICAgKm1lcmdlTnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShtZXJnZWNsYXVzZXMpKTsJLyogcGVyLWNsYXVzZSBudWxscyBvcmRlcmluZyAqLwogfSBN ZXJnZUpvaW47CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTc5Myw4ICs3OTMsOCBAQCB0 eXBlZGVmIHN0cnVjdCBNZW1vaXplCiAKIAlpbnQJCQludW1LZXlzOwkJLyogc2l6ZSBvZiB0 aGUgdHdvIGFycmF5cyBiZWxvdyAqLwogCi0JT2lkCQkgICAqaGFzaE9wZXJhdG9yczsJLyog aGFzaCBvcGVyYXRvcnMgZm9yIGVhY2gga2V5ICovCi0JT2lkCQkgICAqY29sbGF0aW9uczsJ CS8qIGNhY2hlIGtleXMgKi8KKwlPaWQJCSAgICpoYXNoT3BlcmF0b3JzIHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG51bUtleXMpKTsJLyogaGFzaCBvcGVyYXRvcnMgZm9yIGVhY2gga2V5 ICovCisJT2lkCQkgICAqY29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1L ZXlzKSk7CQkvKiBjYWNoZSBrZXlzICovCiAJTGlzdAkgICAqcGFyYW1fZXhwcnM7CS8qIGV4 cHJzIGNvbnRhaW5pbmcgcGFyYW1ldGVycyAqLwogCWJvb2wJCXNpbmdsZXJvdzsJCS8qIHRy dWUgaWYgdGhlIGNhY2hlIGVudHJ5IHNob3VsZCBiZSBtYXJrZWQgYXMKIAkJCQkJCQkJICog Y29tcGxldGUgYWZ0ZXIgd2Ugc3RvcmUgdGhlIGZpcnN0IHR1cGxlIGluCkBAIC04MTIsMTAg KzgxMiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBTb3J0CiB7CiAJUGxhbgkJcGxhbjsKIAlpbnQJ CQludW1Db2xzOwkJLyogbnVtYmVyIG9mIHNvcnQta2V5IGNvbHVtbnMgKi8KLQlBdHRyTnVt YmVyICpzb3J0Q29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3Qg Ki8KLQlPaWQJCSAgICpzb3J0T3BlcmF0b3JzOwkvKiBPSURzIG9mIG9wZXJhdG9ycyB0byBz b3J0IHRoZW0gYnkgKi8KLQlPaWQJCSAgICpjb2xsYXRpb25zOwkJLyogT0lEcyBvZiBjb2xs YXRpb25zICovCi0JYm9vbAkgICAqbnVsbHNGaXJzdDsJCS8qIE5VTExTIEZJUlNUL0xBU1Qg ZGlyZWN0aW9ucyAqLworCUF0dHJOdW1iZXIgKnNvcnRDb2xJZHggcGdfbm9kZV9hdHRyKGFy cmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxp c3QgKi8KKwlPaWQJCSAgICpzb3J0T3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG51bUNvbHMpKTsJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCisJ T2lkCQkgICAqY29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7 CQkvKiBPSURzIG9mIGNvbGxhdGlvbnMgKi8KKwlib29sCSAgICpudWxsc0ZpcnN0IHBnX25v ZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJCS8qIE5VTExTIEZJUlNUL0xBU1QgZGly ZWN0aW9ucyAqLwogfSBTb3J0OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC04MzgsOSAr ODM4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgR3JvdXAKIHsKIAlQbGFuCQlwbGFuOwogCWludAkJ CW51bUNvbHM7CQkvKiBudW1iZXIgb2YgZ3JvdXBpbmcgY29sdW1ucyAqLwotCUF0dHJOdW1i ZXIgKmdycENvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICov Ci0JT2lkCQkgICAqZ3JwT3BlcmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29t cGFyZSB3aXRoICovCi0JT2lkCQkgICAqZ3JwQ29sbGF0aW9uczsKKwlBdHRyTnVtYmVyICpn cnBDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogdGhlaXIg aW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICpncnBPcGVyYXRvcnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkvKiBlcXVhbGl0eSBvcGVyYXRv cnMgdG8gY29tcGFyZSB3aXRoICovCisJT2lkCQkgICAqZ3JwQ29sbGF0aW9ucyBwZ19ub2Rl X2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CiB9IEdyb3VwOwogCiAvKiAtLS0tLS0tLS0t LS0tLS0KQEAgLTg2Myw5ICs4NjMsOSBAQCB0eXBlZGVmIHN0cnVjdCBBZ2cKIAlBZ2dTdHJh dGVneSBhZ2dzdHJhdGVneTsJLyogYmFzaWMgc3RyYXRlZ3ksIHNlZSBub2Rlcy5oICovCiAJ QWdnU3BsaXQJYWdnc3BsaXQ7CQkvKiBhZ2ctc3BsaXR0aW5nIG1vZGUsIHNlZSBub2Rlcy5o ICovCiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJlciBvZiBncm91cGluZyBjb2x1bW5zICov Ci0JQXR0ck51bWJlciAqZ3JwQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFy Z2V0IGxpc3QgKi8KLQlPaWQJCSAgICpncnBPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJh dG9ycyB0byBjb21wYXJlIHdpdGggKi8KLQlPaWQJCSAgICpncnBDb2xsYXRpb25zOworCUF0 dHJOdW1iZXIgKmdycENvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7 CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKmdy cE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIGVxdWFs aXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAgICpncnBDb2xsYXRp b25zIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsKIAlsb25nCQludW1Hcm91 cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1dCAqLwogCXVpbnQ2 NAkJdHJhbnNpdGlvblNwYWNlOwkvKiBmb3IgcGFzcy1ieS1yZWYgdHJhbnNpdGlvbiBkYXRh ICovCiAJQml0bWFwc2V0ICAqYWdnUGFyYW1zOwkJLyogSURzIG9mIFBhcmFtcyB1c2VkIGlu IEFnZ3JlZiBpbnB1dHMgKi8KQEAgLTg4MywxMyArODgzLDEzIEBAIHR5cGVkZWYgc3RydWN0 IFdpbmRvd0FnZwogCVBsYW4JCXBsYW47CiAJSW5kZXgJCXdpbnJlZjsJCQkvKiBJRCByZWZl cmVuY2VkIGJ5IHdpbmRvdyBmdW5jdGlvbnMgKi8KIAlpbnQJCQlwYXJ0TnVtQ29sczsJLyog bnVtYmVyIG9mIGNvbHVtbnMgaW4gcGFydGl0aW9uIGNsYXVzZSAqLwotCUF0dHJOdW1iZXIg KnBhcnRDb2xJZHg7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLwot CU9pZAkJICAgKnBhcnRPcGVyYXRvcnM7CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyBmb3IgcGFy dGl0aW9uIGNvbHVtbnMgKi8KLQlPaWQJCSAgICpwYXJ0Q29sbGF0aW9uczsgLyogY29sbGF0 aW9ucyBmb3IgcGFydGl0aW9uIGNvbHVtbnMgKi8KKwlBdHRyTnVtYmVyICpwYXJ0Q29sSWR4 IHBnX25vZGVfYXR0cihhcnJheV9zaXplKHBhcnROdW1Db2xzKSk7CQkvKiB0aGVpciBpbmRl eGVzIGluIHRoZSB0YXJnZXQgbGlzdCAqLworCU9pZAkJICAgKnBhcnRPcGVyYXRvcnMgcGdf bm9kZV9hdHRyKGFycmF5X3NpemUocGFydE51bUNvbHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0 b3JzIGZvciBwYXJ0aXRpb24gY29sdW1ucyAqLworCU9pZAkJICAgKnBhcnRDb2xsYXRpb25z IHBnX25vZGVfYXR0cihhcnJheV9zaXplKHBhcnROdW1Db2xzKSk7IC8qIGNvbGxhdGlvbnMg Zm9yIHBhcnRpdGlvbiBjb2x1bW5zICovCiAJaW50CQkJb3JkTnVtQ29sczsJCS8qIG51bWJl ciBvZiBjb2x1bW5zIGluIG9yZGVyaW5nIGNsYXVzZSAqLwotCUF0dHJOdW1iZXIgKm9yZENv bElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkg ICAqb3JkT3BlcmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgZm9yIG9yZGVyaW5nIGNv bHVtbnMgKi8KLQlPaWQJCSAgICpvcmRDb2xsYXRpb25zOwkvKiBjb2xsYXRpb25zIGZvciBv cmRlcmluZyBjb2x1bW5zICovCisJQXR0ck51bWJlciAqb3JkQ29sSWR4IHBnX25vZGVfYXR0 cihhcnJheV9zaXplKG9yZE51bUNvbHMpKTsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRh cmdldCBsaXN0ICovCisJT2lkCQkgICAqb3JkT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJh eV9zaXplKG9yZE51bUNvbHMpKTsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIGZvciBvcmRlcmlu ZyBjb2x1bW5zICovCisJT2lkCQkgICAqb3JkQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJy YXlfc2l6ZShvcmROdW1Db2xzKSk7CS8qIGNvbGxhdGlvbnMgZm9yIG9yZGVyaW5nIGNvbHVt bnMgKi8KIAlpbnQJCQlmcmFtZU9wdGlvbnM7CS8qIGZyYW1lX2NsYXVzZSBvcHRpb25zLCBz ZWUgV2luZG93RGVmICovCiAJTm9kZQkgICAqc3RhcnRPZmZzZXQ7CS8qIGV4cHJlc3Npb24g Zm9yIHN0YXJ0aW5nIGJvdW5kLCBpZiBhbnkgKi8KIAlOb2RlCSAgICplbmRPZmZzZXQ7CQkv KiBleHByZXNzaW9uIGZvciBlbmRpbmcgYm91bmQsIGlmIGFueSAqLwpAQCAtOTA5LDkgKzkw OSw5IEBAIHR5cGVkZWYgc3RydWN0IFVuaXF1ZQogewogCVBsYW4JCXBsYW47CiAJaW50CQkJ bnVtQ29sczsJCS8qIG51bWJlciBvZiBjb2x1bW5zIHRvIGNoZWNrIGZvciB1bmlxdWVuZXNz ICovCi0JQXR0ck51bWJlciAqdW5pcUNvbElkeDsJCS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhl IHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqdW5pcU9wZXJhdG9yczsJLyogZXF1YWxpdHkg b3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKnVuaXFDb2xsYXRpb25z OyAvKiBjb2xsYXRpb25zIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucyAqLworCUF0dHJOdW1i ZXIgKnVuaXFDb2xJZHggcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyog dGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAgICp1bmlxT3Bl cmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJLyogZXF1YWxpdHkg b3BlcmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLworCU9pZAkJICAgKnVuaXFDb2xsYXRpb25z IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsgLyogY29sbGF0aW9ucyBmb3Ig ZXF1YWxpdHkgY29tcGFyaXNvbnMgKi8KIH0gVW5pcXVlOwogCiAvKiAtLS0tLS0tLS0tLS0K QEAgLTk0NywxMCArOTQ3LDEwIEBAIHR5cGVkZWYgc3RydWN0IEdhdGhlck1lcmdlCiAJaW50 CQkJcmVzY2FuX3BhcmFtOwkvKiBJRCBvZiBQYXJhbSB0aGF0IHNpZ25hbHMgYSByZXNjYW4s IG9yIC0xICovCiAJLyogcmVtYWluaW5nIGZpZWxkcyBhcmUganVzdCBsaWtlIHRoZSBzb3J0 LWtleSBpbmZvIGluIHN0cnVjdCBTb3J0ICovCiAJaW50CQkJbnVtQ29sczsJCS8qIG51bWJl ciBvZiBzb3J0LWtleSBjb2x1bW5zICovCi0JQXR0ck51bWJlciAqc29ydENvbElkeDsJCS8q IHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCi0JT2lkCQkgICAqc29ydE9w ZXJhdG9yczsJLyogT0lEcyBvZiBvcGVyYXRvcnMgdG8gc29ydCB0aGVtIGJ5ICovCi0JT2lk CQkgICAqY29sbGF0aW9uczsJCS8qIE9JRHMgb2YgY29sbGF0aW9ucyAqLwotCWJvb2wJICAg Km51bGxzRmlyc3Q7CQkvKiBOVUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KKwlBdHRy TnVtYmVyICpzb3J0Q29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJ CS8qIHRoZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lkCQkgICAqc29y dE9wZXJhdG9ycyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShudW1Db2xzKSk7CS8qIE9JRHMg b2Ygb3BlcmF0b3JzIHRvIHNvcnQgdGhlbSBieSAqLworCU9pZAkJICAgKmNvbGxhdGlvbnMg cGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwkJLyogT0lEcyBvZiBjb2xsYXRp b25zICovCisJYm9vbAkgICAqbnVsbHNGaXJzdCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShu dW1Db2xzKSk7CQkvKiBOVUxMUyBGSVJTVC9MQVNUIGRpcmVjdGlvbnMgKi8KIAlCaXRtYXBz ZXQgICppbml0UGFyYW07CQkvKiBwYXJhbSBpZCdzIG9mIGluaXRwbGFucyB3aGljaCBhcmUg cmVmZXJyZWQKIAkJCQkJCQkJICogYXQgZ2F0aGVyIG1lcmdlIG9yIG9uZSBvZiBpdCdzIGNo aWxkIG5vZGUgKi8KIH0gR2F0aGVyTWVyZ2U7CkBAIC05OTAsOSArOTkwLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgU2V0T3AKIAlTZXRPcFN0cmF0ZWd5IHN0cmF0ZWd5OwkJLyogaG93IHRvIGRv IGl0LCBzZWUgbm9kZXMuaCAqLwogCWludAkJCW51bUNvbHM7CQkvKiBudW1iZXIgb2YgY29s dW1ucyB0byBjaGVjayBmb3IKIAkJCQkJCQkJICogZHVwbGljYXRlLW5lc3MgKi8KLQlBdHRy TnVtYmVyICpkdXBDb2xJZHg7CQkvKiB0aGVpciBpbmRleGVzIGluIHRoZSB0YXJnZXQgbGlz dCAqLwotCU9pZAkJICAgKmR1cE9wZXJhdG9yczsJLyogZXF1YWxpdHkgb3BlcmF0b3JzIHRv IGNvbXBhcmUgd2l0aCAqLwotCU9pZAkJICAgKmR1cENvbGxhdGlvbnM7CisJQXR0ck51bWJl ciAqZHVwQ29sSWR4IHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJCS8qIHRo ZWlyIGluZGV4ZXMgaW4gdGhlIHRhcmdldCBsaXN0ICovCisJT2lkCQkgICAqZHVwT3BlcmF0 b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKG51bUNvbHMpKTsJLyogZXF1YWxpdHkgb3Bl cmF0b3JzIHRvIGNvbXBhcmUgd2l0aCAqLworCU9pZAkJICAgKmR1cENvbGxhdGlvbnMgcGdf bm9kZV9hdHRyKGFycmF5X3NpemUobnVtQ29scykpOwogCUF0dHJOdW1iZXIJZmxhZ0NvbElk eDsJCS8qIHdoZXJlIGlzIHRoZSBmbGFnIGNvbHVtbiwgaWYgYW55ICovCiAJaW50CQkJZmly c3RGbGFnOwkJLyogZmxhZyB2YWx1ZSBmb3IgZmlyc3QgaW5wdXQgcmVsYXRpb24gKi8KIAls b25nCQludW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIGdyb3VwcyBpbiBpbnB1 dCAqLwpAQCAtMTAyOCw5ICsxMDI4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTGltaXQKIAlOb2Rl CSAgICpsaW1pdENvdW50OwkJLyogQ09VTlQgcGFyYW1ldGVyLCBvciBOVUxMIGlmIG5vbmUg Ki8KIAlMaW1pdE9wdGlvbiBsaW1pdE9wdGlvbjsJLyogbGltaXQgdHlwZSAqLwogCWludAkJ CXVuaXFOdW1Db2xzOwkvKiBudW1iZXIgb2YgY29sdW1ucyB0byBjaGVjayBmb3Igc2ltaWxh cml0eSAgKi8KLQlBdHRyTnVtYmVyICp1bmlxQ29sSWR4OwkJLyogdGhlaXIgaW5kZXhlcyBp biB0aGUgdGFyZ2V0IGxpc3QgKi8KLQlPaWQJCSAgICp1bmlxT3BlcmF0b3JzOwkvKiBlcXVh bGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCi0JT2lkCQkgICAqdW5pcUNvbGxh dGlvbnM7IC8qIGNvbGxhdGlvbnMgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zICovCisJQXR0 ck51bWJlciAqdW5pcUNvbElkeCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29s cykpOwkJLyogdGhlaXIgaW5kZXhlcyBpbiB0aGUgdGFyZ2V0IGxpc3QgKi8KKwlPaWQJCSAg ICp1bmlxT3BlcmF0b3JzIHBnX25vZGVfYXR0cihhcnJheV9zaXplKHVuaXFOdW1Db2xzKSk7 CS8qIGVxdWFsaXR5IG9wZXJhdG9ycyB0byBjb21wYXJlIHdpdGggKi8KKwlPaWQJCSAgICp1 bmlxQ29sbGF0aW9ucyBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZSh1bmlxTnVtQ29scykpOyAv KiBjb2xsYXRpb25zIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucyAqLwogfSBMaW1pdDsKIAog CkBAIC0xMTg5LDkgKzExODksOSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25lZFJlbFBy dW5lSW5mbwogCUJpdG1hcHNldCAgKnByZXNlbnRfcGFydHM7CS8qIEluZGV4ZXMgb2YgYWxs IHBhcnRpdGlvbnMgd2hpY2ggc3VicGxhbnMgb3IKIAkJCQkJCQkJICogc3VicGFydHMgYXJl IHByZXNlbnQgZm9yICovCiAJaW50CQkJbnBhcnRzOwkJCS8qIExlbmd0aCBvZiB0aGUgZm9s bG93aW5nIGFycmF5czogKi8KLQlpbnQJCSAgICpzdWJwbGFuX21hcDsJLyogc3VicGxhbiBp bmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0xICovCi0JaW50CQkgICAqc3VicGFydF9t YXA7CS8qIHN1YnBhcnQgaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMSAqLwotCU9p ZAkJICAgKnJlbGlkX21hcDsJCS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgs IG9yIDAgKi8KKwlpbnQJCSAgICpzdWJwbGFuX21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6 ZShucGFydHMpKTsJLyogc3VicGxhbiBpbmRleCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIC0x ICovCisJaW50CQkgICAqc3VicGFydF9tYXAgcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobnBh cnRzKSk7CS8qIHN1YnBhcnQgaW5kZXggYnkgcGFydGl0aW9uIGluZGV4LCBvciAtMSAqLwor CU9pZAkJICAgKnJlbGlkX21hcCBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShucGFydHMpKTsJ CS8qIHJlbGF0aW9uIE9JRCBieSBwYXJ0aXRpb24gaW5kZXgsIG9yIDAgKi8KIAogCS8qCiAJ ICogaW5pdGlhbF9wcnVuaW5nX3N0ZXBzIHNob3dzIGhvdyB0byBwcnVuZSBkdXJpbmcgZXhl Y3V0b3Igc3RhcnR1cCAoaS5lLiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3By aW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggNDMzNDM3 NjQzZS4uZDhhYmQ5OGI1NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKQEAgLTYzLDcgKzYz LDcgQEAgdHlwZWRlZiBlbnVtIE9uQ29tbWl0QWN0aW9uCiB0eXBlZGVmIHN0cnVjdCBSYW5n ZVZhcgogewogCU5vZGVUYWcJCXR5cGU7Ci0JY2hhcgkgICAqY2F0YWxvZ25hbWU7CS8qIHRo ZSBjYXRhbG9nIChkYXRhYmFzZSkgbmFtZSwgb3IgTlVMTCAqLworCWNoYXIJICAgKmNhdGFs b2duYW1lIHBnX25vZGVfYXR0cihyZWFkd3JpdGVfaWdub3JlKTsJLyogdGhlIGNhdGFsb2cg KGRhdGFiYXNlKSBuYW1lLCBvciBOVUxMICovCiAJY2hhcgkgICAqc2NoZW1hbmFtZTsJCS8q IHRoZSBzY2hlbWEgbmFtZSwgb3IgTlVMTCAqLwogCWNoYXIJICAgKnJlbG5hbWU7CQkvKiB0 aGUgcmVsYXRpb24vc2VxdWVuY2UgbmFtZSAqLwogCWJvb2wJCWluaDsJCQkvKiBleHBhbmQg cmVsIGJ5IGluaGVyaXRhbmNlPyByZWN1cnNpdmVseSBhY3QKQEAgLTE5Niw4ICsxOTYsOCBA QCB0eXBlZGVmIHN0cnVjdCBWYXIKIAlJbmRleAkJdmFybGV2ZWxzdXA7CS8qIGZvciBzdWJx dWVyeSB2YXJpYWJsZXMgcmVmZXJlbmNpbmcgb3V0ZXIKIAkJCQkJCQkJICogcmVsYXRpb25z OyAwIGluIGEgbm9ybWFsIHZhciwgPjAgbWVhbnMgTgogCQkJCQkJCQkgKiBsZXZlbHMgdXAg Ki8KLQlJbmRleAkJdmFybm9zeW47CQkvKiBzeW50YWN0aWMgcmVsYXRpb24gaW5kZXggKDAg aWYgdW5rbm93bikgKi8KLQlBdHRyTnVtYmVyCXZhcmF0dG5vc3luOwkvKiBzeW50YWN0aWMg YXR0cmlidXRlIG51bWJlciAqLworCUluZGV4CQl2YXJub3N5biBwZ19ub2RlX2F0dHIoZXF1 YWxfaWdub3JlKTsJCS8qIHN5bnRhY3RpYyByZWxhdGlvbiBpbmRleCAoMCBpZiB1bmtub3du KSAqLworCUF0dHJOdW1iZXIJdmFyYXR0bm9zeW4gcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9y ZSk7CS8qIHN5bnRhY3RpYyBhdHRyaWJ1dGUgbnVtYmVyICovCiAJaW50CQkJbG9jYXRpb247 CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBWYXI7CiAKQEAg LTMyNCw3ICszMjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBBZ2dyZWYKIAlPaWQJCQlhZ2d0eXBl OwkJLyogdHlwZSBPaWQgb2YgcmVzdWx0IG9mIHRoZSBhZ2dyZWdhdGUgKi8KIAlPaWQJCQlh Z2djb2xsaWQ7CQkvKiBPSUQgb2YgY29sbGF0aW9uIG9mIHJlc3VsdCAqLwogCU9pZAkJCWlu cHV0Y29sbGlkOwkvKiBPSUQgb2YgY29sbGF0aW9uIHRoYXQgZnVuY3Rpb24gc2hvdWxkIHVz ZSAqLwotCU9pZAkJCWFnZ3RyYW5zdHlwZTsJLyogdHlwZSBPaWQgb2YgYWdncmVnYXRlJ3Mg dHJhbnNpdGlvbiB2YWx1ZSAqLworCU9pZAkJCWFnZ3RyYW5zdHlwZSBwZ19ub2RlX2F0dHIo ZXF1YWxfaWdub3JlKTsJLyogdHlwZSBPaWQgb2YgYWdncmVnYXRlJ3MgdHJhbnNpdGlvbiB2 YWx1ZSAqLwogCUxpc3QJICAgKmFnZ2FyZ3R5cGVzOwkvKiB0eXBlIE9pZHMgb2YgZGlyZWN0 IGFuZCBhZ2dyZWdhdGVkIGFyZ3MgKi8KIAlMaXN0CSAgICphZ2dkaXJlY3RhcmdzOwkvKiBk aXJlY3QgYXJndW1lbnRzLCBpZiBhbiBvcmRlcmVkLXNldCBhZ2cgKi8KIAlMaXN0CSAgICph cmdzOwkJCS8qIGFnZ3JlZ2F0ZWQgYXJndW1lbnRzIGFuZCBzb3J0IGV4cHJlc3Npb25zICov CkBAIC0zNzEsOCArMzcxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgR3JvdXBpbmdGdW5jCiAJRXhw cgkJeHByOwogCUxpc3QJICAgKmFyZ3M7CQkJLyogYXJndW1lbnRzLCBub3QgZXZhbHVhdGVk IGJ1dCBrZXB0IGZvcgogCQkJCQkJCQkgKiBiZW5lZml0IG9mIEVYUExBSU4gZXRjLiAqLwot CUxpc3QJICAgKnJlZnM7CQkJLyogcmVzc29ydGdyb3VwcmVmcyBvZiBhcmd1bWVudHMgKi8K LQlMaXN0CSAgICpjb2xzOwkJCS8qIGFjdHVhbCBjb2x1bW4gcG9zaXRpb25zIHNldCBieSBw bGFubmVyICovCisJTGlzdAkgICAqcmVmcyBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlKTsJ CQkvKiByZXNzb3J0Z3JvdXByZWZzIG9mIGFyZ3VtZW50cyAqLworCUxpc3QJICAgKmNvbHMg cGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZSk7CQkJLyogYWN0dWFsIGNvbHVtbiBwb3NpdGlv bnMgc2V0IGJ5IHBsYW5uZXIgKi8KIAlJbmRleAkJYWdnbGV2ZWxzdXA7CS8qIHNhbWUgYXMg QWdncmVmLmFnZ2xldmVsc3VwICovCiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2Nh dGlvbiAqLwogfSBHcm91cGluZ0Z1bmM7CkBAIC01NDAsNyArNTQwLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgT3BFeHByCiB7CiAJRXhwcgkJeHByOwogCU9pZAkJCW9wbm87CQkJLyogUEdfT1BF UkFUT1IgT0lEIG9mIHRoZSBvcGVyYXRvciAqLwotCU9pZAkJCW9wZnVuY2lkOwkJLyogUEdf UFJPQyBPSUQgb2YgdW5kZXJseWluZyBmdW5jdGlvbiAqLworCU9pZAkJCW9wZnVuY2lkIHBn X25vZGVfYXR0cihlcXVhbF9pZ25vcmVfaWZfemVybyk7CQkvKiBQR19QUk9DIE9JRCBvZiB1 bmRlcmx5aW5nIGZ1bmN0aW9uICovCiAJT2lkCQkJb3ByZXN1bHR0eXBlOwkvKiBQR19UWVBF IE9JRCBvZiByZXN1bHQgdmFsdWUgKi8KIAlib29sCQlvcHJldHNldDsJCS8qIHRydWUgaWYg b3BlcmF0b3IgcmV0dXJucyBzZXQgKi8KIAlPaWQJCQlvcGNvbGxpZDsJCS8qIE9JRCBvZiBj b2xsYXRpb24gb2YgcmVzdWx0ICovCkBAIC01OTcsOSArNTk3LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgU2NhbGFyQXJyYXlPcEV4cHIKIHsKIAlFeHByCQl4cHI7CiAJT2lkCQkJb3BubzsJCQkv KiBQR19PUEVSQVRPUiBPSUQgb2YgdGhlIG9wZXJhdG9yICovCi0JT2lkCQkJb3BmdW5jaWQ7 CQkvKiBQR19QUk9DIE9JRCBvZiBjb21wYXJpc29uIGZ1bmN0aW9uICovCi0JT2lkCQkJaGFz aGZ1bmNpZDsJCS8qIFBHX1BST0MgT0lEIG9mIGhhc2ggZnVuYyBvciBJbnZhbGlkT2lkICov Ci0JT2lkCQkJbmVnZnVuY2lkOwkJLyogUEdfUFJPQyBPSUQgb2YgbmVnYXRvciBvZiBvcGZ1 bmNpZCBmdW5jdGlvbgorCU9pZAkJCW9wZnVuY2lkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25v cmVfaWZfemVybyk7CQkvKiBQR19QUk9DIE9JRCBvZiBjb21wYXJpc29uIGZ1bmN0aW9uICov CisJT2lkCQkJaGFzaGZ1bmNpZCBwZ19ub2RlX2F0dHIoZXF1YWxfaWdub3JlX2lmX3plcm8p OwkJLyogUEdfUFJPQyBPSUQgb2YgaGFzaCBmdW5jIG9yIEludmFsaWRPaWQgKi8KKwlPaWQJ CQluZWdmdW5jaWQgcGdfbm9kZV9hdHRyKGVxdWFsX2lnbm9yZV9pZl96ZXJvKTsJCS8qIFBH X1BST0MgT0lEIG9mIG5lZ2F0b3Igb2Ygb3BmdW5jaWQgZnVuY3Rpb24KIAkJCQkJCQkJICog b3IgSW52YWxpZE9pZC4gIFNlZSBhYm92ZSAqLwogCWJvb2wJCXVzZU9yOwkJCS8qIHRydWUg Zm9yIEFOWSwgZmFsc2UgZm9yIEFMTCAqLwogCU9pZAkJCWlucHV0Y29sbGlkOwkvKiBPSUQg b2YgY29sbGF0aW9uIHRoYXQgb3BlcmF0b3Igc2hvdWxkIHVzZSAqLwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvcGdfY29uZmlnX21hbnVhbC5oIGIvc3JjL2luY2x1ZGUvcGdfY29uZmln X21hbnVhbC5oCmluZGV4IDYxNDAzNWUyMTUuLmVlMjJmOWM1YzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3BnX2NvbmZpZ19tYW51YWwuaAorKysgYi9zcmMvaW5jbHVkZS9wZ19jb25m aWdfbWFudWFsLmgKQEAgLTM2NSwxNCArMzY1LDE0IEBACiAgKiBjb3B5T2JqZWN0KCksIHRv IGZhY2lsaXRhdGUgY2F0Y2hpbmcgZXJyb3JzIGFuZCBvbWlzc2lvbnMgaW4KICAqIGNvcHlP YmplY3QoKS4KICAqLwotLyogI2RlZmluZSBDT1BZX1BBUlNFX1BMQU5fVFJFRVMgKi8KKyNk ZWZpbmUgQ09QWV9QQVJTRV9QTEFOX1RSRUVTCiAKIC8qCiAgKiBEZWZpbmUgdGhpcyB0byBm b3JjZSBhbGwgcGFyc2UgYW5kIHBsYW4gdHJlZXMgdG8gYmUgcGFzc2VkIHRocm91Z2gKICAq IG91dGZ1bmNzLmMvcmVhZGZ1bmNzLmMsIHRvIGZhY2lsaXRhdGUgY2F0Y2hpbmcgZXJyb3Jz IGFuZCBvbWlzc2lvbnMgaW4KICAqIHRob3NlIG1vZHVsZXMuCiAgKi8KLS8qICNkZWZpbmUg V1JJVEVfUkVBRF9QQVJTRV9QTEFOX1RSRUVTICovCisjZGVmaW5lIFdSSVRFX1JFQURfUEFS U0VfUExBTl9UUkVFUwogCiAvKgogICogRGVmaW5lIHRoaXMgdG8gZm9yY2UgYWxsIHJhdyBw YXJzZSB0cmVlcyBmb3IgRE1MIHN0YXRlbWVudHMgdG8gYmUgc2Nhbm5lZApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApp bmRleCBiNGZhYTFjMTIzLi5kOTFlZTZhZTg1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtMjcyLDkgKzI3 Miw5IEBAIHR5cGVkZWYgc3RydWN0IEZvcmVpZ25LZXlDYWNoZUluZm8KIAlPaWQJCQljb25m cmVsaWQ7CQkvKiByZWxhdGlvbiByZWZlcmVuY2VkIGJ5IHRoZSBmb3JlaWduIGtleSAqLwog CWludAkJCW5rZXlzOwkJCS8qIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBmb3JlaWduIGtl eSAqLwogCS8qIHRoZXNlIGFycmF5cyBlYWNoIGhhdmUgbmtleXMgdmFsaWQgZW50cmllczog Ki8KLQlBdHRyTnVtYmVyCWNvbmtleVtJTkRFWF9NQVhfS0VZU107IC8qIGNvbHMgaW4gcmVm ZXJlbmNpbmcgdGFibGUgKi8KLQlBdHRyTnVtYmVyCWNvbmZrZXlbSU5ERVhfTUFYX0tFWVNd OwkvKiBjb2xzIGluIHJlZmVyZW5jZWQgdGFibGUgKi8KLQlPaWQJCQljb25wZmVxb3BbSU5E RVhfTUFYX0tFWVNdOwkvKiBQSyA9IEZLIG9wZXJhdG9yIE9JRHMgKi8KKwlBdHRyTnVtYmVy CWNvbmtleVtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtleXMp KTsgLyogY29scyBpbiByZWZlcmVuY2luZyB0YWJsZSAqLworCUF0dHJOdW1iZXIJY29uZmtl eVtJTkRFWF9NQVhfS0VZU10gcGdfbm9kZV9hdHRyKGFycmF5X3NpemUobmtleXMpKTsJLyog Y29scyBpbiByZWZlcmVuY2VkIHRhYmxlICovCisJT2lkCQkJY29ucGZlcW9wW0lOREVYX01B WF9LRVlTXSBwZ19ub2RlX2F0dHIoYXJyYXlfc2l6ZShua2V5cykpOwkvKiBQSyA9IEZLIG9w ZXJhdG9yIE9JRHMgKi8KIH0gRm9yZWlnbktleUNhY2hlSW5mbzsKIAogCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSBiL3NyYy90b29scy9tc3ZjL1NvbHV0aW9u LnBtCmluZGV4IDE2NWE5Mzk4N2EuLjhkZmY2YjRjYjIgMTAwNjQ0Ci0tLSBhL3NyYy90b29s cy9tc3ZjL1NvbHV0aW9uLnBtCisrKyBiL3NyYy90b29scy9tc3ZjL1NvbHV0aW9uLnBtCkBA IC04MzUsNiArODM1LDUyIEBAIEVPRgogCQljbG9zZSgkY2hzKTsKIAl9CiAKKwlpZiAoSXNO ZXdlcignc3JjL2JhY2tlbmQvbm9kZXMvbm9kZS1zdHVmZi1zdGFtcCcsCisJCSdzcmMvYmFj a2VuZC9ub2Rlcy9nZW5fbm9kZV9zdHVmZi5wbCcpKQorCXsKKwkJIyBYWFggZHVwbGljYXRl cyBzcmMvYmFja2VuZC9ub2Rlcy9NYWtlZmlsZQorCisJCW15IEBub2RlX2hlYWRlcnMgPSBx dygKKwkJCW5vZGVzL25vZGVzLmgKKwkJCW5vZGVzL2V4ZWNub2Rlcy5oCisJCQlub2Rlcy9w bGFubm9kZXMuaAorCQkJbm9kZXMvcHJpbW5vZGVzLmgKKwkJCW5vZGVzL3BhdGhub2Rlcy5o CisJCQlub2Rlcy9leHRlbnNpYmxlLmgKKwkJCW5vZGVzL3BhcnNlbm9kZXMuaAorCQkJbm9k ZXMvcmVwbG5vZGVzLmgKKwkJCW5vZGVzL3ZhbHVlLmgKKwkJCWNvbW1hbmRzL3RyaWdnZXIu aAorCQkJY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisJCQlmb3JlaWduL2Zkd2FwaS5oCisJ CQlhY2Nlc3MvYW1hcGkuaAorCQkJYWNjZXNzL3RhYmxlYW0uaAorCQkJYWNjZXNzL3RzbWFw aS5oCisJCQl1dGlscy9yZWwuaAorCQkJbm9kZXMvc3VwcG9ydG5vZGVzLmgKKwkJCWV4ZWN1 dG9yL3R1cHRhYmxlLmgKKwkJCW5vZGVzL2xvY2tvcHRpb25zLmgKKwkJCWFjY2Vzcy9zZGly LmgKKwkJKTsKKworCQljaGRpcignc3JjL2JhY2tlbmQvbm9kZXMnKTsKKworCQlteSBAbm9k ZV9maWxlcyA9IG1hcCB7ICIuLi8uLi8uLi9zcmMvaW5jbHVkZS8kXyIgfSBAbm9kZV9oZWFk ZXJzOworCisJCXN5c3RlbSgicGVybCBnZW5fbm9kZV9zdHVmZi5wbCBAbm9kZV9maWxlcyIp OworCQlvcGVuKG15ICRmLCAnPicsICdub2RlLXN0dWZmLXN0YW1wJykgfHwgY29uZmVzcyAi Q291bGQgbm90IHRvdWNoIG5vZGUtc3R1ZmYtc3RhbXAiOworCQljbG9zZSgkZik7CisJCWNo ZGlyKCcuLi8uLi8uLicpOworCX0KKworCWlmIChJc05ld2VyKAorCQkJJ3NyYy9pbmNsdWRl L25vZGVzL25vZGV0YWdzLmgnLAorCQkJJ3NyYy9iYWNrZW5kL25vZGVzL25vZGV0YWdzLmgn KSkKKwl7CisJCWNvcHlGaWxlKCdzcmMvYmFja2VuZC9ub2Rlcy9ub2RldGFncy5oJywKKwkJ CSdzcmMvaW5jbHVkZS9ub2Rlcy9ub2RldGFncy5oJyk7CisJfQorCiAJb3BlbihteSAkbywg Jz4nLCAiZG9jL3NyYy9zZ21sL3ZlcnNpb24uc2dtbCIpCiAJICB8fCBjcm9hayAiQ291bGQg bm90IHdyaXRlIHRvIHZlcnNpb24uc2dtbFxuIjsKIAlwcmludCAkbyA8PEVPRjsKCmJhc2Ut Y29tbWl0OiA2OGY3YzRiNTdhMjdkYmNkM2U5M2JhM2ZmN2IwYjQ5NjY0YjI1ZTA5Ci0tIAoy LjMzLjAKCg== --------------210D7966796B21788E95ACFA--