Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u03yO-00ArQ8-TU for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Apr 2025 19:42:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u03yN-00HTNm-BC for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Apr 2025 19:42:03 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u03yM-00HTNX-Ew for pgsql-hackers@lists.postgresql.org; Wed, 02 Apr 2025 19:42:03 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1u03yH-002bde-07 for pgsql-hackers@lists.postgresql.org; Wed, 02 Apr 2025 19:42:01 +0000 Received: from [192.168.1.112] (iptv-hkibng21-58c090-167.dhcp.inet.fi [88.192.144.167]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4ZSZxn0b4fz49PyZ; Wed, 2 Apr 2025 22:41:49 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743622909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=UQE9qjXJgbvKvNqmn1vKCaKDuy5700rd3pzDYoMkT58=; b=ESLrQRuI056gmW12vE0ivRa5V7wBzN3waHhd4sHKzyiTmx/f7WErcrt3gU0oZvU4kHCQA6 +3Hj+MZyHbtN/yJ5wTcb5ZRrq7dWRXcwhbDm+Nysee8RH5bNCdV+AgqUVA0AZoY+AAkDo0 K7bcn8DnkZL5OIQ5H/EzHeEaQLQmjstjGdTlkms3YrAUtFnReIanXKVytMqxRgeyXcPQBZ KuG7Vx4EDae2au6KzVQE+jvOzt4jEhALl6qXHqwOPQiyxkrN24eXwabTJlrJ4+eKBY24vb cVcev7Dq/CWiLCINzhGRtC9CsyHqfSA7lJt1Mj5LxHEPDC7Xk9zunPdwG6qNww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1743622909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=UQE9qjXJgbvKvNqmn1vKCaKDuy5700rd3pzDYoMkT58=; b=GgK+Cm6E8irU2OgTMhpqV/kNdr6vgHWa0kUHQ5l+Hvizo7f3vDCh4KUaQXe/r4A+9ow2sg YfOW0I7bFynr86gP4qmP9HHTZSBdSUudPJ5iIERPWRrYAo0fiJleBZOmeQwzmQgoysVtUW cDFCEBol0O+M90kwDlZtHRb38P93nf+KZZgYOhcx1WCUchNF1Q+hgpfOfGsvCk0cf7osdV qiY2pg3mS49LEupqA07vo9cIDTspkcg1gU44jlQtNaXGJr4EIIsjBATyoNkNswMcrY5gmc /mNXaVMqjhYjGhT/yZJdAlTUHCraB9L2z3x66UW9vh93Muv20hzfiL7a1SyR6g== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1743622909; a=rsa-sha256; cv=none; b=heplxJt21tzgHHBtejSfMFJ9AeXzttXYXiyBAg+SqOWeZK1h6X5nyWmvH/x7lLir+ZqYBf PILQEan+qTzUyvXEmquOnzXn3s/14OfDVL2c7Ngo8ZFlmjOZUWXqHJhI9pGfXGZOJuHl6i u7enbzWa8UFQ7yKXL78kkXu9qDQIcpkPJC12dPAg25+YCyQOEe5aEdsQa7tt6jRIsIMfID 6u7JnVGECAWPfKQKPuo8u9tg4OTdNPcvtMk3VOzRKMue+Ebnwutis7rgyuEJZnVtQQ1+x3 k9ZTQjrTq6yetLcDKROIUdBT2QshojLdaiBIIXkWp+xBJtSG1VBxF+JxPa+z0A== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------ybIzJTIr0K8bkZ462Udehfno" Message-ID: <2d3078fa-4700-431f-99a5-91ae8ee3bf86@iki.fi> Date: Wed, 2 Apr 2025 22:41:48 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Add sortsupport for range types and btree_gist From: Heikki Linnakangas To: Bernd Helmle , Andrey Borodin Cc: Michael Paquier , jian he , PostgreSQL Hackers References: <7C9400DF-66FE-4308-BAD8-92FE3D0E55C6@yandex-team.ru> <0d9fbd59de15e2fc987a850c3d1f8a79a6ede825.camel@oopsware.de> <19c62e62c79b727d2c9a82eaeecfea5017001099.camel@oopsware.de> <4BADF8DD-A4D3-43AA-AA08-037F6FFA40BC@yandex-team.ru> <61128550659807032dd29c8c8a71674c818cbbb6.camel@oopsware.de> <7095B5FA-FADB-4524-B858-ECD14998710B@yandex-team.ru> <0176b173adfcff250543fe0aee2ef6137bd71953.camel@oopsware.de> <78499920f1e9ed5895423e735272ca2fdb90baf6.camel@oopsware.de> <770DB2DA-0B56-464A-87CE-5620CF12E114@yandex-team.ru> <6bd891c9e3aa12baea5c938267bdb5a1e50a299e.camel@oopsware.de> <64d324ce2a6d535d3f0f3baeeea7b25beff82ce4.camel@oopsware.de> Content-Language: en-US In-Reply-To: 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. --------------ybIzJTIr0K8bkZ462Udehfno Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 02/04/2025 20:18, Heikki Linnakangas wrote: > So I added it for the btree opfamily too, and moved the function to > rangetypes.c since it's not just for gist anymore. I Ccmmitted that > part, and will start looking more closely at the remaining btree_gist > parts now. Here's an updated version of the remaining parts. Found a couple of bugs: * The stuff to save the FmgrInfo for gbt_enum_sortsupport() was broken. It saved the address of FmgrInfo struct that was allocated in a local variable, on the stack, in SortSupport->ssup-extra, and expected it to be valid on subsequent call to gbt_enum_ssup_cmp(). It went unnoticed because enum_cmp() only accesses the FmgrInfo struct if it encounters odd enum values, i.e. enum values that have been added with ALTER TYPE ADD VALUE. I fixed that, and modified the existing enum test to cover that case. * The gist_bpchar_ops opfamily was using the built-in bpchar_sortsupport() function directly. That's not right, you need to have a shim that extracts and comparse just the 'lower' value, just like for all other datatypes. I think that was just a simple oversight, but it happened to pass the tests because bpchar_sortsupport() would not outright crash, even though we were passing it garbage. It's interesting that because the gist sortsupport function is used just to order the input during build, everything still works if it sorts the input to a completely bogus ordering, it just gets slower. At one point while fixing that, I also accidentally used "btcharcmp" instead of "bpcharcmp", and all the tests passed with that too. Those are now fixed. I also harmonized the comments to use the same phrasing for all the datatypes, marked all the sortsupport functions as PARALLEL SAFE, and reformatted slightly. > + > + By default btree_gist builds GiST index with > + sortsupport in sorted mode. This usually results in > + much faster index built speed. It is still possible to revert to buffered built strategy > + by using the buffering parameter when creating the index. > + I'm inclined to leave out this paragraph. That's not specific to the btree_gist module, you can make any GiST index slower by disabling the sorted mode; but why would you do that? Let's mention in the release notes that btree_gist index builds got faster, and leave it at that. -- Heikki Linnakangas Neon (https://neon.tech) --------------ybIzJTIr0K8bkZ462Udehfno Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Add-support-for-sorted-gist-index-builds-to-btree.patch" Content-Disposition: attachment; filename*0="v2-0001-Add-support-for-sorted-gist-index-builds-to-btree.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNDQ3ZjhlYmUyNTEwZGM3ZDY0OTRhNWE2ZTZlYTdiMDljODU0MmJlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMiBBcHIgMjAyNSAyMjoyNDo1NSArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjIgMS8xXSBBZGQgc3VwcG9ydCBmb3Igc29ydGVkIGdpc3QgaW5k ZXggYnVpbGRzIHRvIGJ0cmVlX2dpc3QKClRoaXMgZW5hYmxlcyBzb3J0c3VwcG9ydCBpbiB0 aGUgYnRyZWVfZ2lzdCBleHRlbnNpb24gZm9yIGZhc3RlcgpidWlsZHMgb2YgZ2lzdCBpbmRl eGVzLgoKU29ydGVkIGdpc3QgaW5kZXggYnVpbGQgc3RyYXRlZ3kgaXMgdGhlIG5ldyBkZWZh dWx0IG5vdy4gUmVncmVzc2lvbgp0ZXN0cyBhcmUgdW5jaGFuZ2VkIChleGNlcHQgZm9yIG9u ZSBzbWFsbCBjaGFuZ2UgaW4gdGhlICdlbnVtJyB0ZXN0IHRvCmFkZCBjb3ZlcmFnZSBmb3Ig ZW51bSB2YWx1ZXMgYWRkZWQgbGF0ZXIpIGFuZCBhcmUgdXNpbmcgdGhlIHNvcnRlZApidWls ZCBzdHJhdGVneSBpbnN0ZWFkLgoKT25lIHZlcnNpb24gb2YgdGhpcyB3YXMgY29tbWl0dGVk IGEgbG9uZyB0aW1lIGFnbyBhbHJlYWR5LCBpbiBjb21taXQKOWY5ODRiYTZkMiwgYnV0IGl0 IHdhcyByZXZlcnRlZCBiZWNhdXNlIG9mIGJ1aWxkZmFybSBmYWlsdXJlcy4gVGhlCmZhaWx1 cmVzIHdlcmUgcHJlc3VtYWJseSBjYXVzZWQgYnkgc29tZSBzbWFsbCBidWdzLCBidXQgd2Ug bmV2ZXIgZ290CmFyb3VuZCB0byBkZWJ1ZyBhbmQgY29tbWl0IGl0IGFnYWluLiBUaGlzIHBh dGNoIHdhcyB3cml0dGVuIGZyb20Kc2NyYXRjaCwgaW1wbGVtZW50aW5nIHRoZSBzYW1lIGlk ZWEsIHdpdGggc29tZSBmcmFnbWVudHMgY29waWVkIGZyb20KdGhlIG9yaWdpbmFsIHBhdGNo LgoKQXV0aG9yOiBCZXJuZCBIZWxtbGUgPG1haWxpbmdzQG9vcHN3YXJlLmRlPgpBdXRob3I6 IEFuZHJleSBCb3JvZGluIDx4NG1tbUB5YW5kZXgtdGVhbS5ydT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC82NGQzMjRjZTJhNmQ1MzVkM2Yw ZjNiYWVlZWE3YjI1YmVmZjgyY2U0LmNhbWVsQG9vcHN3YXJlLmRlCi0tLQogY29udHJpYi9i dHJlZV9naXN0L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArLQogY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX2JpdC5jICAgICAgICAgICAgICB8ICA0NiArKysrKwogY29udHJp Yi9idHJlZV9naXN0L2J0cmVlX2Jvb2wuYyAgICAgICAgICAgICB8ICAyMyArKysKIGNvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9ieXRlYS5jICAgICAgICAgICAgfCAgMzUgKysrKwogY29u dHJpYi9idHJlZV9naXN0L2J0cmVlX2Nhc2guYyAgICAgICAgICAgICB8ICAzMCArKysKIGNv bnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9kYXRlLmMgICAgICAgICAgICAgfCAgMjcgKysrCiBj b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZW51bS5jICAgICAgICAgICAgIHwgIDM5ICsrKysK IGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9mbG9hdDQuYyAgICAgICAgICAgfCAgMjYgKysr CiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxvYXQ4LmMgICAgICAgICAgIHwgIDI1ICsr KwogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QtLTEuOC0tMS45LnNxbCB8IDE5NyAr KysrKysrKysrKysrKysrKysrKwogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuY29u dHJvbCAgICAgICB8ICAgMiArLQogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2luZXQuYyAg ICAgICAgICAgICB8ICAyOCArKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnQyLmMg ICAgICAgICAgICAgfCAgMjcgKysrCiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50NC5j ICAgICAgICAgICAgIHwgIDI5ICsrLQogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDgu YyAgICAgICAgICAgICB8ICAyNyArKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnRl cnZhbC5jICAgICAgICAgfCAgMjUgKysrCiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbWFj YWRkci5jICAgICAgICAgIHwgIDI3ICsrKwogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX21h Y2FkZHI4LmMgICAgICAgICB8ICAyNSArKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9u dW1lcmljLmMgICAgICAgICAgfCAgMzQgKysrKwogY29udHJpYi9idHJlZV9naXN0L2J0cmVl X29pZC5jICAgICAgICAgICAgICB8ICAyOCArKysKIGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV90ZXh0LmMgICAgICAgICAgICAgfCAgNjkgKysrKysrKwogY29udHJpYi9idHJlZV9naXN0 L2J0cmVlX3RpbWUuYyAgICAgICAgICAgICB8ICAyNiArKysKIGNvbnRyaWIvYnRyZWVfZ2lz dC9idHJlZV90cy5jICAgICAgICAgICAgICAgfCAgMjUgKysrCiBjb250cmliL2J0cmVlX2dp c3QvYnRyZWVfdXRpbHNfdmFyLmggICAgICAgIHwgIDEyICstCiBjb250cmliL2J0cmVlX2dp c3QvYnRyZWVfdXVpZC5jICAgICAgICAgICAgIHwgIDI1ICsrKwogY29udHJpYi9idHJlZV9n aXN0L2V4cGVjdGVkL2VudW0ub3V0ICAgICAgICB8ICAgNSArLQogY29udHJpYi9idHJlZV9n aXN0L21lc29uLmJ1aWxkICAgICAgICAgICAgICB8ICAgMSArCiBjb250cmliL2J0cmVlX2dp c3Qvc3FsL2VudW0uc3FsICAgICAgICAgICAgIHwgICA2ICstCiBkb2Mvc3JjL3NnbWwvYnRy ZWUtZ2lzdC5zZ21sICAgICAgICAgICAgICAgIHwgICA3ICsKIDI5IGZpbGVzIGNoYW5nZWQs IDg3MCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LS0xLjgtLTEuOS5zcWwKCmRpZmYgLS1n aXQgYS9jb250cmliL2J0cmVlX2dpc3QvTWFrZWZpbGUgYi9jb250cmliL2J0cmVlX2dpc3Qv TWFrZWZpbGUKaW5kZXggN2FjMmRmMjZjMTAuLjY4MTkwYWM1ZTQ2IDEwMDY0NAotLS0gYS9j b250cmliL2J0cmVlX2dpc3QvTWFrZWZpbGUKKysrIGIvY29udHJpYi9idHJlZV9naXN0L01h a2VmaWxlCkBAIC0zNCw3ICszNCw3IEBAIERBVEEgPSBidHJlZV9naXN0LS0xLjAtLTEuMS5z cWwgXAogICAgICAgIGJ0cmVlX2dpc3QtLTEuMS0tMS4yLnNxbCBidHJlZV9naXN0LS0xLjIu c3FsIGJ0cmVlX2dpc3QtLTEuMi0tMS4zLnNxbCBcCiAgICAgICAgYnRyZWVfZ2lzdC0tMS4z LS0xLjQuc3FsIGJ0cmVlX2dpc3QtLTEuNC0tMS41LnNxbCBcCiAgICAgICAgYnRyZWVfZ2lz dC0tMS41LS0xLjYuc3FsIGJ0cmVlX2dpc3QtLTEuNi0tMS43LnNxbCBcCi0gICAgICAgYnRy ZWVfZ2lzdC0tMS43LS0xLjguc3FsCisgICAgICAgYnRyZWVfZ2lzdC0tMS43LS0xLjguc3Fs IGJ0cmVlX2dpc3QtLTEuOC0tMS45LnNxbAogUEdGSUxFREVTQyA9ICJidHJlZV9naXN0IC0g Qi10cmVlIGVxdWl2YWxlbnQgR2lTVCBvcGVyYXRvciBjbGFzc2VzIgogCiBSRUdSRVNTID0g aW5pdCBpbnQyIGludDQgaW50OCBmbG9hdDQgZmxvYXQ4IGNhc2ggb2lkIHRpbWVzdGFtcCB0 aW1lc3RhbXB0eiBcCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYml0 LmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYml0LmMKaW5kZXggZjM0NmI5NTZmYTku LjVlMGFkYmU1MWVmIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYml0 LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2JpdC5jCkBAIC02LDYgKzYsNyBA QAogI2luY2x1ZGUgImJ0cmVlX2dpc3QuaCIKICNpbmNsdWRlICJidHJlZV91dGlsc192YXIu aCIKICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRpbHMvc29y dHN1cHBvcnQuaCIKICNpbmNsdWRlICJ1dGlscy92YXJiaXQuaCIKIAogCkBAIC0xOCwxMCAr MTksMzMgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfYml0X3BpY2tzcGxpdCk7CiBQR19G VU5DVElPTl9JTkZPX1YxKGdidF9iaXRfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZP X1YxKGdidF9iaXRfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9iaXRfc2Ft ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF9iaXRfc29ydHN1cHBvcnQpOworUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfdmFyYml0X3NvcnRzdXBwb3J0KTsKIAogCiAvKiBkZWZpbmUg Zm9yIGNvbXBhcmlzb24gKi8KIAorc3RhdGljIGludAorZ2J0X2JpdF9zc3VwX2NtcChEYXR1 bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCUdCVF9WQVJLRVkgKmtleTEg PSBQR19ERVRPQVNUX0RBVFVNKHgpOworCUdCVF9WQVJLRVkgKmtleTIgPSBQR19ERVRPQVNU X0RBVFVNKHkpOworCisJR0JUX1ZBUktFWV9SIGFyZzEgPSBnYnRfdmFyX2tleV9yZWFkYWJs ZShrZXkxKTsKKwlHQlRfVkFSS0VZX1IgYXJnMiA9IGdidF92YXJfa2V5X3JlYWRhYmxlKGtl eTIpOworCURhdHVtCQlyZXN1bHQ7CisKKwkvKiBmb3IgbGVhZiBpdGVtcyB3ZSBleHBlY3Qg bG93ZXIgPT0gdXBwZXIsIHNvIG9ubHkgY29tcGFyZSBsb3dlciAqLworCXJlc3VsdCA9IERp cmVjdEZ1bmN0aW9uQ2FsbDIoYnl0ZWFjbXAsCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0dW0o YXJnMS5sb3dlciksCisJCQkJCQkJCSBQb2ludGVyR2V0RGF0dW0oYXJnMi5sb3dlcikpOwor CisJR0JUX0ZSRUVfSUZfQ09QWShrZXkxLCB4KTsKKwlHQlRfRlJFRV9JRl9DT1BZKGtleTIs IHkpOworCisJcmV0dXJuIERhdHVtR2V0SW50MzIocmVzdWx0KTsKK30KKwogc3RhdGljIGJv b2wKIGdidF9iaXRndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBPaWQgY29sbGF0 aW9uLCBGbWdySW5mbyAqZmxpbmZvKQogewpAQCAtMjA3LDMgKzIzMSwyNSBAQCBnYnRfYml0 X3BlbmFsdHkoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fUE9JTlRFUihnYnRfdmFy X3BlbmFsdHkocmVzdWx0LCBvLCBuLCBQR19HRVRfQ09MTEFUSU9OKCksCiAJCQkJCQkJCQkg ICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pKTsKIH0KKworRGF0dW0KK2didF9iaXRfc29ydHN1 cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRT dXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBn YnRfYml0X3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVU VVJOX1ZPSUQoKTsKK30KKworRGF0dW0KK2didF92YXJiaXRfc29ydHN1cHBvcnQoUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19H RVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBnYnRfYml0X3NzdXBf Y21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9ib29sLmMgYi9jb250 cmliL2J0cmVlX2dpc3QvYnRyZWVfYm9vbC5jCmluZGV4IGFkYjcyNGUxNmFjLi4wOGQ2OTEy YmI0ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Jvb2wuYworKysg Yi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYm9vbC5jCkBAIC01LDYgKzUsNyBAQAogCiAj aW5jbHVkZSAiYnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgor I2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYgc3RydWN0IGJvb2xr ZXkKIHsKQEAgLTIyLDYgKzIzLDE3IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xf cGlja3NwbGl0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xfY29uc2lzdGVudCk7 CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9ib29sX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05f SU5GT19WMShnYnRfYm9vbF9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Jvb2xf c29ydHN1cHBvcnQpOworCitzdGF0aWMgaW50CitnYnRfYm9vbF9zc3VwX2NtcChEYXR1bSB4 LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCWJvb2xLRVkgICAgKmFyZzEgPSAo Ym9vbEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJYm9vbEtFWSAgICAqYXJnMiA9IChi b29sS0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsKKworCS8qIGZvciBsZWFmIGl0ZW1zIHdl IGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28gb25seSBjb21wYXJlIGxvd2VyICovCisJcmV0 dXJuIChpbnQzMikgYXJnMS0+bG93ZXIgLSAoaW50MzIpIGFyZzItPmxvd2VyOworfQogCiBz dGF0aWMgYm9vbAogZ2J0X2Jvb2xndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBG bWdySW5mbyAqZmxpbmZvKQpAQCAtMTY2LDMgKzE3OCwxNCBAQCBnYnRfYm9vbF9zYW1lKFBH X0ZVTkNUSU9OX0FSR1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwg KHZvaWQgKikgYjIsICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lO VEVSKHJlc3VsdCk7CiB9CisKK0RhdHVtCitnYnRfYm9vbF9zb3J0c3VwcG9ydChQR19GVU5D VElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dF VEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9ib29sX3NzdXBf Y21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9ieXRlYS5jIGIvY29u dHJpYi9idHJlZV9naXN0L2J0cmVlX2J5dGVhLmMKaW5kZXggMmUxNGJkZmQzMjguLmVmZTNj MjEyMzY3IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYnl0ZWEuYwor KysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfYnl0ZWEuYwpAQCAtNiw2ICs2LDcgQEAK ICNpbmNsdWRlICJidHJlZV9naXN0LmgiCiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfdmFyLmgi CiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRz dXBwb3J0LmgiCiAKIAogLyoKQEAgLTE3LDcgKzE4LDQxIEBAIFBHX0ZVTkNUSU9OX0lORk9f VjEoZ2J0X2J5dGVhX3BpY2tzcGxpdCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9ieXRl YV9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2J5dGVhX3BlbmFsdHkp OwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfYnl0ZWFfc2FtZSk7CitQR19GVU5DVElPTl9J TkZPX1YxKGdidF9ieXRlYV9zb3J0c3VwcG9ydCk7CiAKKy8qIHNvcnRzdXBwb3J0IHN1cHBv cnQgKi8KKworc3RhdGljIGludAorZ2J0X2J5dGVhX3NzdXBfY21wKERhdHVtIHgsIERhdHVt IHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJR0JUX1ZBUktFWSAqa2V5MSA9IFBHX0RFVE9B U1RfREFUVU0oeCk7CisJR0JUX1ZBUktFWSAqa2V5MiA9IFBHX0RFVE9BU1RfREFUVU0oeSk7 CisKKwlHQlRfVkFSS0VZX1IgeGtleSA9IGdidF92YXJfa2V5X3JlYWRhYmxlKGtleTEpOwor CUdCVF9WQVJLRVlfUiB5a2V5ID0gZ2J0X3Zhcl9rZXlfcmVhZGFibGUoa2V5Mik7CisJRGF0 dW0JCXJlc3VsdDsKKworCS8qIGZvciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1 cHBlciwgc28gb25seSBjb21wYXJlIGxvd2VyICovCisJcmVzdWx0ID0gRGlyZWN0RnVuY3Rp b25DYWxsMihieXRlYWNtcCwKKwkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bSh4a2V5Lmxvd2Vy KSwKKwkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bSh5a2V5Lmxvd2VyKSk7CisKKwlHQlRfRlJF RV9JRl9DT1BZKGtleTEsIHgpOworCUdCVF9GUkVFX0lGX0NPUFkoa2V5MiwgeSk7CisKKwly ZXR1cm4gRGF0dW1HZXRJbnQzMihyZXN1bHQpOworfQorCitEYXR1bQorZ2J0X2J5dGVhX3Nv cnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChT b3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9y ID0gZ2J0X2J5dGVhX3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogLyogZGVmaW5lIGZvciBjb21wYXJpc29uICovCiAK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9jYXNoLmMgYi9jb250cmli L2J0cmVlX2dpc3QvYnRyZWVfY2FzaC5jCmluZGV4IGMxOGMzNGM4YjgzLi5iOTgwZWRiYWY0 NCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Nhc2guYworKysgYi9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfY2FzaC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1 ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKICNpbmNs dWRlICJ1dGlscy9jYXNoLmgiCisjaW5jbHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAog dHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTI1LDYgKzI2LDI0IEBAIFBHX0ZVTkNUSU9OX0lORk9f VjEoZ2J0X2Nhc2hfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9jYXNo X2Rpc3RhbmNlKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2Nhc2hfcGVuYWx0eSk7CiBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9jYXNoX3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfY2FzaF9zb3J0c3VwcG9ydCk7CisKK2V4dGVybiBEYXR1bSBjYXNoX2NtcChQR19G VU5DVElPTl9BUkdTKTsKKworc3RhdGljIGludAorZ2J0X2Nhc2hfc3N1cF9jbXAoRGF0dW0g eCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwljYXNoS0VZICAgICphcmcxID0g KGNhc2hLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOworCWNhc2hLRVkgICAgKmFyZzIgPSAo Y2FzaEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwkvKiBmb3IgbGVhZiBpdGVtcyB3 ZSBleHBlY3QgbG93ZXIgPT0gdXBwZXIsIHNvIG9ubHkgY29tcGFyZSBsb3dlciAqLworCWlm IChhcmcxLT5sb3dlciA+IGFyZzItPmxvd2VyKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChh cmcxLT5sb3dlciA8IGFyZzItPmxvd2VyKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1 cm4gMDsKK30KIAogc3RhdGljIGJvb2wKIGdidF9jYXNoZ3QoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYiwgRm1nckluZm8gKmZsaW5mbykKQEAgLTIxNSwzICsyMzQsMTQgQEAgZ2J0 X2Nhc2hfc2FtZShQR19GVU5DVElPTl9BUkdTKQogCSpyZXN1bHQgPSBnYnRfbnVtX3NhbWUo KHZvaWQgKikgYjEsICh2b2lkICopIGIyLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKTsKIAlQ R19SRVRVUk5fUE9JTlRFUihyZXN1bHQpOwogfQorCitEYXR1bQorZ2J0X2Nhc2hfc29ydHN1 cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRT dXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBn YnRfY2FzaF9zc3VwX2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBHX1JF VFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf ZGF0ZS5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2RhdGUuYwppbmRleCA3YTRhOWQ3 YTg1My4uYWRiM2EyMTdlMzAgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV9kYXRlLmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2RhdGUuYwpAQCAtNyw2 ICs3LDcgQEAKICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKICNpbmNsdWRlICJ1dGls cy9mbWdycHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0ZS5oIgorI2luY2x1ZGUgInV0 aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0yNSw2ICsyNiwz MiBAQCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9kYXRlX2NvbnNpc3RlbnQpOwogUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfZGF0ZV9kaXN0YW5jZSk7CiBQR19GVU5DVElPTl9JTkZPX1Yx KGdidF9kYXRlX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZGF0ZV9zYW1l KTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2RhdGVfc29ydHN1cHBvcnQpOworCisvKiBz b3J0c3VwcG9ydCBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludAorZ2J0X2RhdGVfc3N1cF9j bXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlkYXRlS0VZICAg ICpha2V5ID0gKGRhdGVLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOworCWRhdGVLRVkgICAg KmJrZXkgPSAoZGF0ZUtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwkvKiBmb3IgbGVh ZiBpdGVtcyB3ZSBleHBlY3QgbG93ZXIgPT0gdXBwZXIsIHNvIG9ubHkgY29tcGFyZSBsb3dl ciAqLworCXJldHVybiBEYXR1bUdldEludDMyKERpcmVjdEZ1bmN0aW9uQ2FsbDIoZGF0ZV9j bXAsCisJCQkJCQkJCQkJCSBEYXRlQURUR2V0RGF0dW0oYWtleS0+bG93ZXIpLAorCQkJCQkJ CQkJCQkgRGF0ZUFEVEdldERhdHVtKGJrZXktPmxvd2VyKSkpOworfQorCitEYXR1bQorZ2J0 X2RhdGVfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBz c3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNv bXBhcmF0b3IgPSBnYnRfZGF0ZV9zc3VwX2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVM TDsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CiAKIHN0YXRpYyBib29sCiBnYnRfZGF0ZWd0 KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYg LS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZW51bS5jIGIvY29udHJpYi9idHJl ZV9naXN0L2J0cmVlX2VudW0uYwppbmRleCAwNWQwMmU3MDRhMC4uYTI5YjU5ZWI2OTggMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9lbnVtLmMKKysrIGIvY29udHJp Yi9idHJlZV9naXN0L2J0cmVlX2VudW0uYwpAQCAtNyw2ICs3LDggQEAKICNpbmNsdWRlICJi dHJlZV91dGlsc19udW0uaCIKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMv Zm1ncnByb3Rvcy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAi dXRpbHMvc29ydHN1cHBvcnQuaCIKIAogLyogZW51bXMgYXJlIHJlYWxseSBPaWRzLCBzbyB3 ZSBqdXN0IHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgKi8KIApAQCAtMjYsOCArMjgsMjMgQEAg UEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZW51bV9waWNrc3BsaXQpOwogUEdfRlVOQ1RJT05f SU5GT19WMShnYnRfZW51bV9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0 X2VudW1fcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9lbnVtX3NhbWUpOwor UEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZW51bV9zb3J0c3VwcG9ydCk7CiAKIAorc3RhdGlj IGludAorZ2J0X2VudW1fc3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQg c3N1cCkKK3sKKwlvaWRLRVkJICAgKmFyZzEgPSAob2lkS0VZICopIERhdHVtR2V0UG9pbnRl cih4KTsKKwlvaWRLRVkJICAgKmFyZzIgPSAob2lkS0VZICopIERhdHVtR2V0UG9pbnRlcih5 KTsKKworCS8qIGZvciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28g b25seSBjb21wYXJlIGxvd2VyICovCisJcmV0dXJuIERhdHVtR2V0SW50MzIoQ2FsbGVyRklu Zm9GdW5jdGlvbkNhbGwyKGVudW1fY21wLAorCQkJCQkJCQkJCQkJICBzc3VwLT5zc3VwX2V4 dHJhLAorCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJCQkJICBhcmcxLT5s b3dlciwKKwkJCQkJCQkJCQkJCSAgYXJnMi0+bG93ZXIpKTsKK30KKwogc3RhdGljIGJvb2wK IGdidF9lbnVtZ3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1nckluZm8gKmZs aW5mbykKIHsKQEAgLTE4MywzICsyMDAsMjUgQEAgZ2J0X2VudW1fc2FtZShQR19GVU5DVElP Tl9BUkdTKQogCSpyZXN1bHQgPSBnYnRfbnVtX3NhbWUoKHZvaWQgKikgYjEsICh2b2lkICop IGIyLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKTsKIAlQR19SRVRVUk5fUE9JTlRFUihyZXN1 bHQpOwogfQorCitEYXR1bQorZ2J0X2VudW1fc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9J TlRFUigwKTsKKwlGbWdySW5mbyAgICpmbGluZm87CisKKwlzc3VwLT5jb21wYXJhdG9yID0g Z2J0X2VudW1fc3N1cF9jbXA7CisKKwkvKgorCSAqIFNpbmNlIGdidF9lbnVtX3NzdXBfY21w KCkgdXNlcyBlbnVtX2NtcCgpIGxpa2UgdGhlIHJlc3Qgb2YgdGhlCisJICogY29tcGFyaXNv biBmdW5jdGlvbnMsIGl0IGFsc28gbmVlZHMgdG8gcGFzcyBmbGluZm8gd2hlbiBjYWxsaW5n IGl0LiBUaGUKKwkgKiBjYWxsZXIgdG8gYSBTb3J0U3VwcG9ydCBjb21wYXJpc29uIGZ1bmN0 aW9uIGRvZXNuJ3QgcHJvdmlkZSBhbiBGbWdySW5mbworCSAqIHN0cnVjdCwgc28gbG9vayBp dCB1cCBub3csIHNhdmUgaXQgaW4gc3N1cF9leHRyYSBhbmQgdXNlIGl0IGluCisJICogZ2J0 X2VudW1fc3N1cF9jbXAoKSBsYXRlci4KKwkgKi8KKwlmbGluZm8gPSBNZW1vcnlDb250ZXh0 QWxsb2Moc3N1cC0+c3N1cF9jeHQsIHNpemVvZihGbWdySW5mbykpOworCWZtZ3JfaW5mb19j eHQoRl9FTlVNX0NNUCwgZmxpbmZvLCBzc3VwLT5zc3VwX2N4dCk7CisJc3N1cC0+c3N1cF9l eHRyYSA9IGZsaW5mbzsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxvYXQ0LmMgYi9jb250cmliL2J0cmVlX2dpc3Qv YnRyZWVfZmxvYXQ0LmMKaW5kZXggZDEzOGFhOTRiZjIuLjBiNGNlMTZlYWRhIDEwMDY0NAot LS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxvYXQ0LmMKKysrIGIvY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX2Zsb2F0NC5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAi YnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgorI2luY2x1ZGUg InV0aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKIAogdHlw ZWRlZiBzdHJ1Y3QgZmxvYXQ0a2V5CkBAIC0yNCw2ICsyNSwzMSBAQCBQR19GVU5DVElPTl9J TkZPX1YxKGdidF9mbG9hdDRfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdi dF9mbG9hdDRfZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZmxvYXQ0X3Bl bmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZmxvYXQ0X3NhbWUpOworUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfZmxvYXQ0X3NvcnRzdXBwb3J0KTsKKworZXh0ZXJuIERhdHVt IGJ0ZmxvYXQ0Y21wKFBHX0ZVTkNUSU9OX0FSR1MpOworCisvKiBzb3J0c3VwcG9ydCBmdW5j dGlvbnMgKi8KK3N0YXRpYyBpbnQKK2didF9mbG9hdDRfc3N1cF9jbXAoRGF0dW0geCwgRGF0 dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlmbG9hdDRLRVkgICphcmcxID0gKGZsb2F0 NEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJZmxvYXQ0S0VZICAqYXJnMiA9IChmbG9h dDRLRVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogZm9yIGxlYWYgaXRlbXMgd2Ug ZXhwZWN0IGxvd2VyID09IHVwcGVyLCBzbyBvbmx5IGNvbXBhcmUgbG93ZXIgKi8KKwlyZXR1 cm4gZmxvYXQ0X2NtcF9pbnRlcm5hbChhcmcxLT5sb3dlciwgYXJnMi0+bG93ZXIpOworfQor CitEYXR1bQorZ2J0X2Zsb2F0NF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQorewor CVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDAp OworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9mbG9hdDRfc3N1cF9jbXA7CisJc3N1cC0+ c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQogCiBzdGF0aWMg Ym9vbAogZ2J0X2Zsb2F0NGd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJ bmZvICpmbGluZm8pCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxv YXQ4LmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZmxvYXQ4LmMKaW5kZXggYTc0Y2Qy MDA1MjkuLmJmYTdmODI1MDAwIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRy ZWVfZmxvYXQ4LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2Zsb2F0OC5jCkBA IC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiYnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0 cmVlX3V0aWxzX251bS5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5j bHVkZSAidXRpbHMvZmxvYXQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgZmxvYXQ4a2V5CkBAIC0y NCw3ICsyNSwzMSBAQCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9mbG9hdDhfY29uc2lzdGVu dCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9mbG9hdDhfZGlzdGFuY2UpOwogUEdfRlVO Q1RJT05fSU5GT19WMShnYnRfZmxvYXQ4X3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfZmxvYXQ4X3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfZmxvYXQ4X3Nv cnRzdXBwb3J0KTsKIAorZXh0ZXJuIERhdHVtIGJ0ZmxvYXQ4Y21wKFBHX0ZVTkNUSU9OX0FS R1MpOworCisvKiBzb3J0c3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQKK2didF9m bG9hdDhfc3N1cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sK KwlmbG9hdDhLRVkgICphcmcxID0gKGZsb2F0OEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7 CisJZmxvYXQ4S0VZICAqYXJnMiA9IChmbG9hdDhLRVkgKikgRGF0dW1HZXRQb2ludGVyKHkp OworCisJLyogZm9yIGxlYWYgaXRlbXMgd2UgZXhwZWN0IGxvd2VyID09IHVwcGVyLCBzbyBv bmx5IGNvbXBhcmUgbG93ZXIgKi8KKwlyZXR1cm4gZmxvYXQ4X2NtcF9pbnRlcm5hbChhcmcx LT5sb3dlciwgYXJnMi0+bG93ZXIpOworfQorCitEYXR1bQorZ2J0X2Zsb2F0OF9zb3J0c3Vw cG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1 cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdi dF9mbG9hdDhfc3N1cF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19S RVRVUk5fVk9JRCgpOworfQogCiBzdGF0aWMgYm9vbAogZ2J0X2Zsb2F0OGd0KGNvbnN0IHZv aWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYgLS1naXQgYS9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS44LS0xLjkuc3FsIGIvY29udHJpYi9i dHJlZV9naXN0L2J0cmVlX2dpc3QtLTEuOC0tMS45LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNGIzODc0OWJmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS44LS0xLjkuc3FsCkBAIC0wLDAgKzEs MTk3IEBACisvKiBjb250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC0tMS43LS0xLjguc3Fs ICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhl ciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVOU0lP TiBidHJlZV9naXN0IFVQREFURSBUTyAnMS45JyIgdG8gbG9hZCB0aGlzIGZpbGUuIFxxdWl0 CisKK0NSRUFURSBGVU5DVElPTiBnYnRfYml0X3NvcnRzdXBwb3J0KGludGVybmFsKQorUkVU VVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUg UEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfdmFyYml0X3Nv cnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1F JworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFU RSBGVU5DVElPTiBnYnRfYm9vbF9zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9p ZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFBBUkFMTEVM IFNBRkUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2J5dGVhX3NvcnRzdXBwb3J0 KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VB R0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElP TiBnYnRfY2FzaF9zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9pZAorQVMgJ01P RFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFBBUkFMTEVMIFNBRkUgU1RS SUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2RhdGVfc29ydHN1cHBvcnQoaW50ZXJuYWwp CitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVU QUJMRSBQQVJBTExFTCBTQUZFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF9lbnVt X3NvcnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhO QU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NS RUFURSBGVU5DVElPTiBnYnRfZmxvYXQ0X3NvcnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJO UyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFS QUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfZmxvYXQ4X3NvcnRz dXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJwor TEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFURSBG VU5DVElPTiBnYnRfaW5ldF9zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9pZAor QVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFBBUkFMTEVMIFNB RkUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2ludDJfc29ydHN1cHBvcnQoaW50 ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBD IElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdi dF9pbnQ0X3NvcnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7 CisKK0NSRUFURSBGVU5DVElPTiBnYnRfaW50OF9zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JF VFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxF IFBBUkFMTEVMIFNBRkUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X2ludHZfc29y dHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUn CitMQU5HVUFHRSBDIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFNUUklDVDsKKworQ1JFQVRF IEZVTkNUSU9OIGdidF9tYWNhZGRyX3NvcnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2 b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxM RUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBnYnRfbWFjYWQ4X3NvcnRzdXBw b3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFO R1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5D VElPTiBnYnRfbnVtZXJpY19zb3J0c3VwcG9ydChpbnRlcm5hbCkKK1JFVFVSTlMgdm9pZAor QVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFBBUkFMTEVMIFNB RkUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0X29pZF9zb3J0c3VwcG9ydChpbnRl cm5hbCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMg SU1NVVRBQkxFIFBBUkFMTEVMIFNBRkUgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gZ2J0 X3RleHRfc29ydHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVf UEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFNUUklDVDsK KworQ1JFQVRFIEZVTkNUSU9OIGdidF9icGNoYXJfc29ydHN1cHBvcnQoaW50ZXJuYWwpCitS RVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJM RSBQQVJBTExFTCBTQUZFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF90aW1lX3Nv cnRzdXBwb3J0KGludGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1F JworTEFOR1VBR0UgQyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0NSRUFU RSBGVU5DVElPTiBnYnRfdHNfc29ydHN1cHBvcnQoaW50ZXJuYWwpCitSRVRVUk5TIHZvaWQK K0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBQQVJBTExFTCBT QUZFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIGdidF91dWlkX3NvcnRzdXBwb3J0KGlu dGVybmFsKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0Ug QyBJTU1VVEFCTEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1Q7CisKK0FMVEVSIE9QRVJBVE9SIEZB TUlMWSBnaXN0X2JpdF9vcHMgVVNJTkcgZ2lzdCBBREQKKwlGVU5DVElPTgkxMSAgKGJpdCwg Yml0KSBnYnRfYml0X3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRP UiBGQU1JTFkgZ2lzdF92Yml0X29wcyBVU0lORyBnaXN0IEFERAorCUZVTkNUSU9OCTExICAo dmFyYml0LCB2YXJiaXQpIGdidF92YXJiaXRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisK K0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2Jvb2xfb3BzIFVTSU5HIGdpc3QgQURECisJ RlVOQ1RJT04JMTEgIChib29sLCBib29sKSBnYnRfYm9vbF9zb3J0c3VwcG9ydCAoaW50ZXJu YWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfYnl0ZWFfb3BzIFVTSU5HIGdp c3QgQURECisJRlVOQ1RJT04JMTEgIChieXRlYSwgYnl0ZWEpIGdidF9ieXRlYV9zb3J0c3Vw cG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfY2FzaF9v cHMgVVNJTkcgZ2lzdCBBREQKKwlGVU5DVElPTgkxMSAgKG1vbmV5LCBtb25leSkgZ2J0X2Nh c2hfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBn aXN0X2RhdGVfb3BzIFVTSU5HIGdpc3QgQURECisJRlVOQ1RJT04JMTEgIChkYXRlLCBkYXRl KSBnYnRfZGF0ZV9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1Ig RkFNSUxZIGdpc3RfZW51bV9vcHMgVVNJTkcgZ2lzdCBBREQKKwlGVU5DVElPTgkxMSAgKGFu eWVudW0sIGFueWVudW0pIGdidF9lbnVtX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitB TFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9mbG9hdDRfb3BzIFVTSU5HIGdpc3QgQURECisJ RlVOQ1RJT04JMTEgIChmbG9hdDQsIGZsb2F0NCkgZ2J0X2Zsb2F0NF9zb3J0c3VwcG9ydCAo aW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfZmxvYXQ4X29wcyBV U0lORyBnaXN0IEFERAorCUZVTkNUSU9OCTExICAoZmxvYXQ4LCBmbG9hdDgpIGdidF9mbG9h dDhfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBn aXN0X2luZXRfb3BzIFVTSU5HIGdpc3QgQURECisJRlVOQ1RJT04JMTEgIChpbmV0LCBpbmV0 KSBnYnRfaW5ldF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1Ig RkFNSUxZIGdpc3RfY2lkcl9vcHMgVVNJTkcgZ2lzdCBBREQKKwlGVU5DVElPTgkxMSAgKGNp ZHIsIGNpZHIpIGdidF9pbmV0X3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBP UEVSQVRPUiBGQU1JTFkgZ2lzdF9pbnQyX29wcyBVU0lORyBnaXN0IEFERAorCUZVTkNUSU9O CTExICAoaW50MiwgaW50MikgZ2J0X2ludDJfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisK K0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X2ludDRfb3BzIFVTSU5HIGdpc3QgQURECisJ RlVOQ1RJT04JMTEgIChpbnQ0LCBpbnQ0KSBnYnRfaW50NF9zb3J0c3VwcG9ydCAoaW50ZXJu YWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfaW50OF9vcHMgVVNJTkcgZ2lz dCBBREQKKwlGVU5DVElPTgkxMSAgKGludDgsIGludDgpIGdidF9pbnQ4X3NvcnRzdXBwb3J0 IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF9pbnRlcnZhbF9v cHMgVVNJTkcgZ2lzdCBBREQKKwlGVU5DVElPTgkxMSAgKGludGVydmFsLCBpbnRlcnZhbCkg Z2J0X2ludHZfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZB TUlMWSBnaXN0X21hY2FkZHJfb3BzIFVTSU5HIGdpc3QgQURECisJRlVOQ1RJT04JMTEgICht YWNhZGRyLCBtYWNhZGRyKSBnYnRfbWFjYWRkcl9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsK KworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfbWFjYWRkcjhfb3BzIFVTSU5HIGdpc3Qg QURECisJRlVOQ1RJT04JMTEgIChtYWNhZGRyOCwgbWFjYWRkcjgpIGdidF9tYWNhZDhfc29y dHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X251 bWVyaWNfb3BzIFVTSU5HIGdpc3QgQURECisJRlVOQ1RJT04JMTEgIChudW1lcmljLCBudW1l cmljKSBnYnRfbnVtZXJpY19zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BF UkFUT1IgRkFNSUxZIGdpc3Rfb2lkX29wcyBVU0lORyBnaXN0IEFERAorCUZVTkNUSU9OCTEx ICAob2lkLCBvaWQpIGdidF9vaWRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CisKK0FMVEVS IE9QRVJBVE9SIEZBTUlMWSBnaXN0X3RleHRfb3BzIFVTSU5HIGdpc3QgQURECisJRlVOQ1RJ T04JMTEgICh0ZXh0LCB0ZXh0KSBnYnRfdGV4dF9zb3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsK KworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3RfYnBjaGFyX29wcyBVU0lORyBnaXN0IEFE RAorCUZVTkNUSU9OCTExICAoYnBjaGFyLCBicGNoYXIpIGdidF9icGNoYXJfc29ydHN1cHBv cnQgKGludGVybmFsKSA7CisKK0FMVEVSIE9QRVJBVE9SIEZBTUlMWSBnaXN0X3RpbWVfb3Bz IFVTSU5HIGdpc3QgQURECisJRlVOQ1RJT04JMTEgICh0aW1lLCB0aW1lKSBnYnRfdGltZV9z b3J0c3VwcG9ydCAoaW50ZXJuYWwpIDsKKworQUxURVIgT1BFUkFUT1IgRkFNSUxZIGdpc3Rf dGltZXR6X29wcyBVU0lORyBnaXN0IEFERAorCUZVTkNUSU9OCTExICAodGltZXR6LCB0aW1l dHopIGdidF90aW1lX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRP UiBGQU1JTFkgZ2lzdF90aW1lc3RhbXBfb3BzIFVTSU5HIGdpc3QgQURECisJRlVOQ1RJT04J MTEgICh0aW1lc3RhbXAsIHRpbWVzdGFtcCkgZ2J0X3RzX3NvcnRzdXBwb3J0IChpbnRlcm5h bCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1JTFkgZ2lzdF90aW1lc3RhbXB0el9vcHMgVVNJ TkcgZ2lzdCBBREQKKwlGVU5DVElPTgkxMSAgKHRpbWVzdGFtcHR6LCB0aW1lc3RhbXB0eikg Z2J0X3RzX3NvcnRzdXBwb3J0IChpbnRlcm5hbCkgOworCitBTFRFUiBPUEVSQVRPUiBGQU1J TFkgZ2lzdF91dWlkX29wcyBVU0lORyBnaXN0IEFERAorCUZVTkNUSU9OCTExICAodXVpZCwg dXVpZCkgZ2J0X3V1aWRfc29ydHN1cHBvcnQgKGludGVybmFsKSA7CmRpZmYgLS1naXQgYS9j b250cmliL2J0cmVlX2dpc3QvYnRyZWVfZ2lzdC5jb250cm9sIGIvY29udHJpYi9idHJlZV9n aXN0L2J0cmVlX2dpc3QuY29udHJvbAppbmRleCBhYmY2NjUzOGYzMi4uNjlkOTM0MWEwYWQg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9naXN0LmNvbnRyb2wKKysr IGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2dpc3QuY29udHJvbApAQCAtMSw2ICsxLDYg QEAKICMgYnRyZWVfZ2lzdCBleHRlbnNpb24KIGNvbW1lbnQgPSAnc3VwcG9ydCBmb3IgaW5k ZXhpbmcgY29tbW9uIGRhdGF0eXBlcyBpbiBHaVNUJwotZGVmYXVsdF92ZXJzaW9uID0gJzEu OCcKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjknCiBtb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRp ci9idHJlZV9naXN0JwogcmVsb2NhdGFibGUgPSB0cnVlCiB0cnVzdGVkID0gdHJ1ZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2luZXQuYyBiL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV9pbmV0LmMKaW5kZXggNGNmZmQzNDkwOTEuLmFkZTg1Yjg1M2U4IDEw MDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW5ldC5jCisrKyBiL2NvbnRy aWIvYnRyZWVfZ2lzdC9idHJlZV9pbmV0LmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAi YnRyZWVfdXRpbHNfbnVtLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5j bHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5o IgogCiB0eXBlZGVmIHN0cnVjdCBpbmV0a2V5CiB7CkBAIC0yMyw4ICsyNCwyNCBAQCBQR19G VU5DVElPTl9JTkZPX1YxKGdidF9pbmV0X3BpY2tzcGxpdCk7CiBQR19GVU5DVElPTl9JTkZP X1YxKGdidF9pbmV0X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW5l dF9wZW5hbHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2luZXRfc2FtZSk7CitQR19G VU5DVElPTl9JTkZPX1YxKGdidF9pbmV0X3NvcnRzdXBwb3J0KTsKIAogCitzdGF0aWMgaW50 CitnYnRfaW5ldF9zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3Vw KQoreworCWluZXRLRVkgICAgKmFyZzEgPSAoaW5ldEtFWSAqKSBEYXR1bUdldFBvaW50ZXIo eCk7CisJaW5ldEtFWSAgICAqYXJnMiA9IChpbmV0S0VZICopIERhdHVtR2V0UG9pbnRlcih5 KTsKKworCS8qIGZvciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28g b25seSBjb21wYXJlIGxvd2VyICovCisJaWYgKGFyZzEtPmxvd2VyIDwgYXJnMi0+bG93ZXIp CisJCXJldHVybiAtMTsKKwllbHNlIGlmIChhcmcxLT5sb3dlciA+IGFyZzItPmxvd2VyKQor CQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBzdGF0aWMgYm9vbAogZ2J0 X2luZXRndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZv KQogewpAQCAtMTg0LDMgKzIwMSwxNCBAQCBnYnRfaW5ldF9zYW1lKFBHX0ZVTkNUSU9OX0FS R1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIs ICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7 CiB9CisKK0RhdHVtCitnYnRfaW5ldF9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQor eworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVS KDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9pbmV0X3NzdXBfY21wOworCXNzdXAt PnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAtLWdp dCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnQyLmMgYi9jb250cmliL2J0cmVlX2dp c3QvYnRyZWVfaW50Mi5jCmluZGV4IDE3NTFhNmMwNTVkLi44NzY1NWIzMzU5OCAxMDA2NDQK LS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDIuYworKysgYi9jb250cmliL2J0 cmVlX2dpc3QvYnRyZWVfaW50Mi5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAiYnRy ZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgorI2luY2x1ZGUgInV0 aWxzL3NvcnRzdXBwb3J0LmgiCiAjaW5jbHVkZSAiY29tbW9uL2ludC5oIgogCiB0eXBlZGVm IHN0cnVjdCBpbnQxNmtleQpAQCAtMjQsNiArMjUsMzIgQEAgUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfaW50Ml9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludDJf ZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50Ml9wZW5hbHR5KTsKIFBH X0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludDJfc2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1Yx KGdidF9pbnQyX3NvcnRzdXBwb3J0KTsKKworLyogc29ydHN1cHBvcnQgZnVuY3Rpb25zICov CitzdGF0aWMgaW50CitnYnRfaW50Ml9zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0 U3VwcG9ydCBzc3VwKQoreworCWludDE2S0VZICAgKmFyZzEgPSAoaW50MTZLRVkgKikgRGF0 dW1HZXRQb2ludGVyKHgpOworCWludDE2S0VZICAgKmFyZzIgPSAoaW50MTZLRVkgKikgRGF0 dW1HZXRQb2ludGVyKHkpOworCisJLyogZm9yIGxlYWYgaXRlbXMgd2UgZXhwZWN0IGxvd2Vy ID09IHVwcGVyLCBzbyBvbmx5IGNvbXBhcmUgbG93ZXIgKi8KKwlpZiAoYXJnMS0+bG93ZXIg PCBhcmcyLT5sb3dlcikKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGFyZzEtPmxvd2VyID4g YXJnMi0+bG93ZXIpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK0Rh dHVtCitnYnRfaW50Ml9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRT dXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJ c3N1cC0+Y29tcGFyYXRvciA9IGdidF9pbnQyX3NzdXBfY21wOworCVBHX1JFVFVSTl9WT0lE KCk7Cit9CiAKIHN0YXRpYyBib29sCiBnYnRfaW50Mmd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0 IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVl X2dpc3QvYnRyZWVfaW50NC5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludDQuYwpp bmRleCA5MGQxODNiZTZlOC4uZTBkZGViNmU3NzUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRy ZWVfZ2lzdC9idHJlZV9pbnQ0LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2lu dDQuYwpAQCAtMiwxMCArMiwxMCBAQAogICogY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2lu dDQuYwogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKLQorI2luY2x1ZGUgImNvbW1vbi9p bnQuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogI2luY2x1ZGUgImJ0cmVl X2dpc3QuaCIKICNpbmNsdWRlICJidHJlZV91dGlsc19udW0uaCIKLSNpbmNsdWRlICJjb21t b24vaW50LmgiCiAKIHR5cGVkZWYgc3RydWN0IGludDMya2V5CiB7CkBAIC0yNCw3ICsyNCw3 IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludDRfY29uc2lzdGVudCk7CiBQR19GVU5D VElPTl9JTkZPX1YxKGdidF9pbnQ0X2Rpc3RhbmNlKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEo Z2J0X2ludDRfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnQ0X3NhbWUp OwotCitQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnQ0X3NvcnRzdXBwb3J0KTsKIAogc3Rh dGljIGJvb2wKIGdidF9pbnQ0Z3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgRm1n ckluZm8gKmZsaW5mbykKQEAgLTkwLDYgKzkwLDI5IEBAIHN0YXRpYyBjb25zdCBnYnRyZWVf bmluZm8gdGluZm8gPQogCWdidF9pbnQ0X2Rpc3QKIH07CiAKK3N0YXRpYyBpbnQKK2didF9p bnQ0X3NzdXBfY21wKERhdHVtIGEsIERhdHVtIGIsIFNvcnRTdXBwb3J0IHNzdXApCit7CisJ aW50MzJLRVkgICAqaWEgPSAoaW50MzJLRVkgKikgRGF0dW1HZXRQb2ludGVyKGEpOworCWlu dDMyS0VZICAgKmliID0gKGludDMyS0VZICopIERhdHVtR2V0UG9pbnRlcihiKTsKKworCS8q IGZvciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28gb25seSBjb21w YXJlIGxvd2VyICovCisJaWYgKGlhLT5sb3dlciA8IGliLT5sb3dlcikKKwkJcmV0dXJuIC0x OworCWVsc2UgaWYgKGlhLT5sb3dlciA+IGliLT5sb3dlcikKKwkJcmV0dXJuIDE7CisJZWxz ZQorCQlyZXR1cm4gMDsKK30KKworRGF0dW0KK2didF9pbnQ0X3NvcnRzdXBwb3J0KFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdf R0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X2ludDRfc3N1 cF9jbXA7CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogUEdfRlVOQ1RJT05fSU5GT19WMShp bnQ0X2Rpc3QpOwogRGF0dW0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJl ZV9pbnQ4LmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50OC5jCmluZGV4IDY2MWNm ODE4OWZjLi42YzUyNWM2NzIyMCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0 cmVlX2ludDguYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50OC5jCkBAIC02 LDYgKzYsNyBAQAogI2luY2x1ZGUgImJ0cmVlX2dpc3QuaCIKICNpbmNsdWRlICJidHJlZV91 dGlsc19udW0uaCIKICNpbmNsdWRlICJjb21tb24vaW50LmgiCisjaW5jbHVkZSAidXRpbHMv c29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgaW50NjRrZXkKIHsKQEAgLTI0LDcg KzI1LDMzIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludDhfY29uc2lzdGVudCk7CiBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnQ4X2Rpc3RhbmNlKTsKIFBHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X2ludDhfcGVuYWx0eSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9pbnQ4 X3NhbWUpOworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50OF9zb3J0c3VwcG9ydCk7CiAK Ky8qIHNvcnRzdXBwb3J0IGZ1bmN0aW9ucyAqLworc3RhdGljIGludAorZ2J0X2ludDhfc3N1 cF9jbXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlpbnQ2NEtF WSAgICphcmcxID0gKGludDY0S0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwlpbnQ2NEtF WSAgICphcmcyID0gKGludDY0S0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsKKworCS8qIGZv ciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28gb25seSBjb21wYXJl IGxvd2VyICovCisJaWYgKGFyZzEtPmxvd2VyIDwgYXJnMi0+bG93ZXIpCisJCXJldHVybiAt MTsKKwllbHNlIGlmIChhcmcxLT5sb3dlciA+IGFyZzItPmxvd2VyKQorCQlyZXR1cm4gMTsK KwllbHNlCisJCXJldHVybiAwOworCit9CisKK0RhdHVtCitnYnRfaW50OF9zb3J0c3VwcG9y dChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBv cnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9p bnQ4X3NzdXBfY21wOworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CiAKIHN0YXRpYyBib29sCiBn YnRfaW50OGd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGlu Zm8pCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfaW50ZXJ2YWwuYyBi L2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9pbnRlcnZhbC5jCmluZGV4IDhmOTlhNDE2OTY1 Li41ODYzM2Y1YTg5NCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2lu dGVydmFsLmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX2ludGVydmFsLmMKQEAg LTYsNiArNiw3IEBACiAjaW5jbHVkZSAiYnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVl X3V0aWxzX251bS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRl ICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgog CiB0eXBlZGVmIHN0cnVjdApAQCAtMjcsOCArMjgsMjEgQEAgUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfaW50dl9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludHZf ZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfaW50dl9wZW5hbHR5KTsKIFBH X0ZVTkNUSU9OX0lORk9fVjEoZ2J0X2ludHZfc2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1Yx KGdidF9pbnR2X3NvcnRzdXBwb3J0KTsKIAogCitzdGF0aWMgaW50CitnYnRfaW50dl9zc3Vw X2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCWludHZLRVkg ICAgKmFyZzEgPSAoaW50dktFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJaW50dktFWSAg ICAqYXJnMiA9IChpbnR2S0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsKKworCS8qIGZvciBs ZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28gb25seSBjb21wYXJlIGxv d2VyICovCisJcmV0dXJuIERhdHVtR2V0SW50MzIoRGlyZWN0RnVuY3Rpb25DYWxsMihpbnRl cnZhbF9jbXAsCisJCQkJCQkJCQkJCSBJbnRlcnZhbFBHZXREYXR1bSgmYXJnMS0+bG93ZXIp LAorCQkJCQkJCQkJCQkgSW50ZXJ2YWxQR2V0RGF0dW0oJmFyZzItPmxvd2VyKSkpOworfQor CiBzdGF0aWMgYm9vbAogZ2J0X2ludHZndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi LCBGbWdySW5mbyAqZmxpbmZvKQogewpAQCAtMjk1LDMgKzMwOSwxNCBAQCBnYnRfaW50dl9z YW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAq KSBiMSwgKHZvaWQgKikgYjIsICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVS Tl9QT0lOVEVSKHJlc3VsdCk7CiB9CisKK0RhdHVtCitnYnRfaW50dl9zb3J0c3VwcG9ydChQ R19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQp IFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF9pbnR2 X3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZP SUQoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9tYWNhZGRy LmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbWFjYWRkci5jCmluZGV4IDU1OGNmYTIx NzJmLi5jZWNmZTIyNzFlNSAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVl X21hY2FkZHIuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfbWFjYWRkci5jCkBA IC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1ZGUg InV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9pbmV0LmgiCisjaW5jbHVk ZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKQEAgLTI1LDYg KzI2LDMyIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X21hY2FkX3BpY2tzcGxpdCk7CiBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZF9jb25zaXN0ZW50KTsKIFBHX0ZVTkNUSU9O X0lORk9fVjEoZ2J0X21hY2FkX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf bWFjYWRfc2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZGRyX3NvcnRzdXBw b3J0KTsKKworLyogc29ydHN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CitnYnRf bWFjYWRkcl9zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQor eworCW1hY0tFWQkgICAqYXJnMSA9IChtYWNLRVkgKikgRGF0dW1HZXRQb2ludGVyKHgpOwor CW1hY0tFWQkgICAqYXJnMiA9IChtYWNLRVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJ LyogZm9yIGxlYWYgaXRlbXMgd2UgZXhwZWN0IGxvd2VyID09IHVwcGVyLCBzbyBvbmx5IGNv bXBhcmUgbG93ZXIgKi8KKwlyZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNh bGwyKG1hY2FkZHJfY21wLAorCQkJCQkJCQkJCQkgTWFjYWRkclBHZXREYXR1bSgmYXJnMS0+ bG93ZXIpLAorCQkJCQkJCQkJCQkgTWFjYWRkclBHZXREYXR1bSgmYXJnMi0+bG93ZXIpKSk7 CisKK30KKworRGF0dW0KK2didF9tYWNhZGRyX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BP SU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJhdG9yID0gZ2J0X21hY2FkZHJfc3N1cF9jbXA7 CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7CisKKwlQR19SRVRVUk5fVk9JRCgpOworfQog CiAKIHN0YXRpYyBib29sCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf bWFjYWRkcjguYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV9tYWNhZGRyOC5jCmluZGV4 IDVkMGM1NTA5ZjUxLi40ODFjMzAzNzk1ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9n aXN0L2J0cmVlX21hY2FkZHI4LmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX21h Y2FkZHI4LmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfbnVtLmgi CiAjaW5jbHVkZSAidXRpbHMvZm1ncnByb3Rvcy5oIgogI2luY2x1ZGUgInV0aWxzL2luZXQu aCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5oIgogCiB0eXBlZGVmIHN0cnVjdAog ewpAQCAtMjUsOCArMjYsMjEgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfbWFjYWQ4X3Bp Y2tzcGxpdCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZDhfY29uc2lzdGVudCk7 CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9tYWNhZDhfcGVuYWx0eSk7CiBQR19GVU5DVElP Tl9JTkZPX1YxKGdidF9tYWNhZDhfc2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF9t YWNhZDhfc29ydHN1cHBvcnQpOwogCiAKK3N0YXRpYyBpbnQKK2didF9tYWNhZGRyOF9zc3Vw X2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQoreworCW1hYzhLRVkg ICAgKmFyZzEgPSAobWFjOEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJbWFjOEtFWSAg ICAqYXJnMiA9IChtYWM4S0VZICopIERhdHVtR2V0UG9pbnRlcih5KTsKKworCS8qIGZvciBs ZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28gb25seSBjb21wYXJlIGxv d2VyICovCisJcmV0dXJuIERhdHVtR2V0SW50MzIoRGlyZWN0RnVuY3Rpb25DYWxsMihtYWNh ZGRyOF9jbXAsCisJCQkJCQkJCQkJCSBNYWNhZGRyOFBHZXREYXR1bSgmYXJnMS0+bG93ZXIp LAorCQkJCQkJCQkJCQkgTWFjYWRkcjhQR2V0RGF0dW0oJmFyZzItPmxvd2VyKSkpOworfQor CiBzdGF0aWMgYm9vbAogZ2J0X21hY2FkOGd0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQg KmIsIEZtZ3JJbmZvICpmbGluZm8pCiB7CkBAIC0xOTQsMyArMjA4LDE0IEBAIGdidF9tYWNh ZDhfc2FtZShQR19GVU5DVElPTl9BUkdTKQogCSpyZXN1bHQgPSBnYnRfbnVtX3NhbWUoKHZv aWQgKikgYjEsICh2b2lkICopIGIyLCAmdGluZm8sIGZjaW5mby0+ZmxpbmZvKTsKIAlQR19S RVRVUk5fUE9JTlRFUihyZXN1bHQpOwogfQorCitEYXR1bQorZ2J0X21hY2FkOF9zb3J0c3Vw cG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1 cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdi dF9tYWNhZGRyOF9zc3VwX2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBH X1JFVFVSTl9WT0lEKCk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRy ZWVfbnVtZXJpYy5jIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX251bWVyaWMuYwppbmRl eCBkNTMzNjQ4YTI5NS4uNzM2ODk2ZTc3NTUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVf Z2lzdC9idHJlZV9udW1lcmljLmMKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX251 bWVyaWMuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CiAjaW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgor I2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIC8qCiAqKiBCeXRlYSBvcHMKQEAg LTIxLDcgKzIyLDQwIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X251bWVyaWNfcGlja3Nw bGl0KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X251bWVyaWNfY29uc2lzdGVudCk7CiBQ R19GVU5DVElPTl9JTkZPX1YxKGdidF9udW1lcmljX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05f SU5GT19WMShnYnRfbnVtZXJpY19zYW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X251 bWVyaWNfc29ydHN1cHBvcnQpOwogCisvKiBTb3J0c3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0 YXRpYyBpbnQKK2didF9udW1lcmljX3NzdXBfY21wKERhdHVtIHgsIERhdHVtIHksIFNvcnRT dXBwb3J0IHNzdXApCit7CisJR0JUX1ZBUktFWSAqa2V5MSA9IFBHX0RFVE9BU1RfREFUVU0o eCk7CisJR0JUX1ZBUktFWSAqa2V5MiA9IFBHX0RFVE9BU1RfREFUVU0oeSk7CisKKwlHQlRf VkFSS0VZX1IgYXJnMSA9IGdidF92YXJfa2V5X3JlYWRhYmxlKGtleTEpOworCUdCVF9WQVJL RVlfUiBhcmcyID0gZ2J0X3Zhcl9rZXlfcmVhZGFibGUoa2V5Mik7CisJRGF0dW0JCXJlc3Vs dDsKKworCS8qIGZvciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1cHBlciwgc28g b25seSBjb21wYXJlIGxvd2VyICovCisJcmVzdWx0ID0gRGlyZWN0RnVuY3Rpb25DYWxsMihu dW1lcmljX2NtcCwKKwkJCQkJCQkJIFBvaW50ZXJHZXREYXR1bShhcmcxLmxvd2VyKSwKKwkJ CQkJCQkJIFBvaW50ZXJHZXREYXR1bShhcmcyLmxvd2VyKSk7CisKKwlHQlRfRlJFRV9JRl9D T1BZKGtleTEsIHgpOworCUdCVF9GUkVFX0lGX0NPUFkoa2V5MiwgeSk7CisKKwlyZXR1cm4g RGF0dW1HZXRJbnQzMihyZXN1bHQpOworfQorCitEYXR1bQorZ2J0X251bWVyaWNfc29ydHN1 cHBvcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRT dXBwb3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBn YnRfbnVtZXJpY19zc3VwX2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBH X1JFVFVSTl9WT0lEKCk7Cit9CiAKIC8qIGRlZmluZSBmb3IgY29tcGFyaXNvbiAqLwogCmRp ZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfb2lkLmMgYi9jb250cmliL2J0 cmVlX2dpc3QvYnRyZWVfb2lkLmMKaW5kZXggZDE5NzZmNGYwOTEuLmM2YjdkYzYxMzY2IDEw MDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfb2lkLmMKKysrIGIvY29udHJp Yi9idHJlZV9naXN0L2J0cmVlX29pZC5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSAi YnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgorI2luY2x1ZGUg InV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0yMyw3ICsy NCwzNCBAQCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF9vaWRfY29uc2lzdGVudCk7CiBQR19G VU5DVElPTl9JTkZPX1YxKGdidF9vaWRfZGlzdGFuY2UpOwogUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfb2lkX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfb2lkX3NhbWUp OworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfb2lkX3NvcnRzdXBwb3J0KTsKIAorLyogU29y dHN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CitnYnRfb2lkX3NzdXBfY21wKERh dHVtIHgsIERhdHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJb2lkS0VZCSAgICphcmcx ID0gKG9pZEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJb2lkS0VZCSAgICphcmcyID0g KG9pZEtFWSAqKSBEYXR1bUdldFBvaW50ZXIoeSk7CisKKwkvKiBmb3IgbGVhZiBpdGVtcyB3 ZSBleHBlY3QgbG93ZXIgPT0gdXBwZXIsIHNvIG9ubHkgY29tcGFyZSBsb3dlciAqLworCWlm IChhcmcxLT5sb3dlciA+IGFyZzItPmxvd2VyKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChh cmcxLT5sb3dlciA8IGFyZzItPmxvd2VyKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1 cm4gMDsKK30KKworRGF0dW0KK2didF9vaWRfc29ydHN1cHBvcnQoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBwb3J0KSBQR19HRVRBUkdfUE9J TlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBnYnRfb2lkX3NzdXBfY21wOworCXNz dXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogc3Rh dGljIGJvb2wKIGdidF9vaWRndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdy SW5mbyAqZmxpbmZvKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3Rl eHQuYyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90ZXh0LmMKaW5kZXggOGY4MGY1NDI0 MGYuLjU3ODNkYzRjYzdkIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVf dGV4dC5jCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90ZXh0LmMKQEAgLTcsNiAr Nyw3IEBACiAjaW5jbHVkZSAiYnRyZWVfdXRpbHNfdmFyLmgiCiAjaW5jbHVkZSAibWIvcGdf d2NoYXIuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdycHJvdG9zLmgiCisjaW5jbHVkZSAidXRp bHMvc29ydHN1cHBvcnQuaCIKIAogLyoKICoqIFRleHQgb3BzCkBAIC0xOSw3ICsyMCw0MiBA QCBQR19GVU5DVElPTl9JTkZPX1YxKGdidF90ZXh0X2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfYnBjaGFyX2NvbnNpc3RlbnQpOwogUEdfRlVOQ1RJT05fSU5GT19W MShnYnRfdGV4dF9wZW5hbHR5KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RleHRfc2Ft ZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF90ZXh0X3NvcnRzdXBwb3J0KTsKK1BHX0ZV TkNUSU9OX0lORk9fVjEoZ2J0X2JwY2hhcl9zb3J0c3VwcG9ydCk7CiAKKy8qIFNvcnRzdXBw b3J0IGZ1bmN0aW9ucyAqLworc3RhdGljIGludAorZ2J0X3RleHRfc3N1cF9jbXAoRGF0dW0g eCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwlHQlRfVkFSS0VZICprZXkxID0g UEdfREVUT0FTVF9EQVRVTSh4KTsKKwlHQlRfVkFSS0VZICprZXkyID0gUEdfREVUT0FTVF9E QVRVTSh5KTsKKworCUdCVF9WQVJLRVlfUiBhcmcxID0gZ2J0X3Zhcl9rZXlfcmVhZGFibGUo a2V5MSk7CisJR0JUX1ZBUktFWV9SIGFyZzIgPSBnYnRfdmFyX2tleV9yZWFkYWJsZShrZXky KTsKKwlEYXR1bQkJcmVzdWx0OworCisJLyogZm9yIGxlYWYgaXRlbXMgd2UgZXhwZWN0IGxv d2VyID09IHVwcGVyLCBzbyBvbmx5IGNvbXBhcmUgbG93ZXIgKi8KKwlyZXN1bHQgPSBEaXJl Y3RGdW5jdGlvbkNhbGwyQ29sbChidHRleHRjbXAsCisJCQkJCQkJCQkgc3N1cC0+c3N1cF9j b2xsYXRpb24sCisJCQkJCQkJCQkgUG9pbnRlckdldERhdHVtKGFyZzEubG93ZXIpLAorCQkJ CQkJCQkJIFBvaW50ZXJHZXREYXR1bShhcmcyLmxvd2VyKSk7CisKKwlHQlRfRlJFRV9JRl9D T1BZKGtleTEsIHgpOworCUdCVF9GUkVFX0lGX0NPUFkoa2V5MiwgeSk7CisKKwlyZXR1cm4g RGF0dW1HZXRJbnQzMihyZXN1bHQpOworfQorCitEYXR1bQorZ2J0X3RleHRfc29ydHN1cHBv cnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlTb3J0U3VwcG9ydCBzc3VwID0gKFNvcnRTdXBw b3J0KSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKworCXNzdXAtPmNvbXBhcmF0b3IgPSBnYnRf dGV4dF9zc3VwX2NtcDsKKwlzc3VwLT5zc3VwX2V4dHJhID0gTlVMTDsKKworCVBHX1JFVFVS Tl9WT0lEKCk7Cit9CiAKIC8qIGRlZmluZSBmb3IgY29tcGFyaXNvbiAqLwogCkBAIC05Myw2 ICsxMjksMzkgQEAgc3RhdGljIGdidHJlZV92aW5mbyB0aW5mbyA9CiAKIC8qIGJwY2hhciBu ZWVkcyBpdHMgb3duIGNvbXBhcmlzb24gcnVsZXMgKi8KIAorc3RhdGljIGludAorZ2J0X2Jw Y2hhcl9zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3VwcG9ydCBzc3VwKQorewor CUdCVF9WQVJLRVkgKmtleTEgPSBQR19ERVRPQVNUX0RBVFVNKHgpOworCUdCVF9WQVJLRVkg KmtleTIgPSBQR19ERVRPQVNUX0RBVFVNKHkpOworCisJR0JUX1ZBUktFWV9SIGFyZzEgPSBn YnRfdmFyX2tleV9yZWFkYWJsZShrZXkxKTsKKwlHQlRfVkFSS0VZX1IgYXJnMiA9IGdidF92 YXJfa2V5X3JlYWRhYmxlKGtleTIpOworCURhdHVtCQlyZXN1bHQ7CisKKwkvKiBmb3IgbGVh ZiBpdGVtcyB3ZSBleHBlY3QgbG93ZXIgPT0gdXBwZXIsIHNvIG9ubHkgY29tcGFyZSBsb3dl ciAqLworCXJlc3VsdCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDJDb2xsKGJwY2hhcmNtcCwKKwkJ CQkJCQkJCSBzc3VwLT5zc3VwX2NvbGxhdGlvbiwKKwkJCQkJCQkJCSBQb2ludGVyR2V0RGF0 dW0oYXJnMS5sb3dlciksCisJCQkJCQkJCQkgUG9pbnRlckdldERhdHVtKGFyZzIubG93ZXIp KTsKKworCUdCVF9GUkVFX0lGX0NPUFkoa2V5MSwgeCk7CisJR0JUX0ZSRUVfSUZfQ09QWShr ZXkyLCB5KTsKKworCXJldHVybiBEYXR1bUdldEludDMyKHJlc3VsdCk7Cit9CisKK0RhdHVt CitnYnRfYnBjaGFyX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1 cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlz c3VwLT5jb21wYXJhdG9yID0gZ2J0X2JwY2hhcl9zc3VwX2NtcDsKKwlzc3VwLT5zc3VwX2V4 dHJhID0gTlVMTDsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKIHN0YXRpYyBib29sCiBn YnRfYnBjaGFyZ3QoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgT2lkIGNvbGxhdGlv biwgRm1nckluZm8gKmZsaW5mbykKIHsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lz dC9idHJlZV90aW1lLmMgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdGltZS5jCmluZGV4 IDJmNzg1OTM0MGY2Li42YzBmMDYyOGY5ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9n aXN0L2J0cmVlX3RpbWUuYworKysgYi9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdGltZS5j CkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1 ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRlLmgiCisjaW5j bHVkZSAidXRpbHMvc29ydHN1cHBvcnQuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAu aCIKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTI4LDYgKzI5LDggQEAgUEdfRlVOQ1RJT05fSU5G T19WMShnYnRfdGltZV9kaXN0YW5jZSk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF90aW1l dHpfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF90aW1lX3BlbmFsdHkp OwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGltZV9zYW1lKTsKK1BHX0ZVTkNUSU9OX0lO Rk9fVjEoZ2J0X3RpbWVfc29ydHN1cHBvcnQpOworUEdfRlVOQ1RJT05fSU5GT19WMShnYnRf dGltZXR6X3NvcnRzdXBwb3J0KTsKIAogCiAjaWZkZWYgVVNFX0ZMT0FUOF9CWVZBTApAQCAt MzcsNiArNDAsMTggQEAgUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdGltZV9zYW1lKTsKICNl bmRpZgogCiAKK3N0YXRpYyBpbnQKK2didF90aW1la2V5X3NzdXBfY21wKERhdHVtIHgsIERh dHVtIHksIFNvcnRTdXBwb3J0IHNzdXApCit7CisJdGltZUtFWSAgICAqYXJnMSA9ICh0aW1l S0VZICopIERhdHVtR2V0UG9pbnRlcih4KTsKKwl0aW1lS0VZICAgICphcmcyID0gKHRpbWVL RVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogZm9yIGxlYWYgaXRlbXMgd2UgZXhw ZWN0IGxvd2VyID09IHVwcGVyLCBzbyBvbmx5IGNvbXBhcmUgbG93ZXIgKi8KKwlyZXR1cm4g RGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKHRpbWVfY21wLAorCQkJCQkJCQkJ CQkgVGltZUFEVEdldERhdHVtRmFzdChhcmcxLT5sb3dlciksCisJCQkJCQkJCQkJCSBUaW1l QURUR2V0RGF0dW1GYXN0KGFyZzItPmxvd2VyKSkpOworfQorCiBzdGF0aWMgYm9vbAogZ2J0 X3RpbWVndChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCBGbWdySW5mbyAqZmxpbmZv KQogewpAQCAtMzMyLDMgKzM0NywxNCBAQCBnYnRfdGltZV9zYW1lKFBHX0ZVTkNUSU9OX0FS R1MpCiAJKnJlc3VsdCA9IGdidF9udW1fc2FtZSgodm9pZCAqKSBiMSwgKHZvaWQgKikgYjIs ICZ0aW5mbywgZmNpbmZvLT5mbGluZm8pOwogCVBHX1JFVFVSTl9QT0lOVEVSKHJlc3VsdCk7 CiB9CisKK0RhdHVtCitnYnRfdGltZV9zb3J0c3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQor eworCVNvcnRTdXBwb3J0IHNzdXAgPSAoU29ydFN1cHBvcnQpIFBHX0dFVEFSR19QT0lOVEVS KDApOworCisJc3N1cC0+Y29tcGFyYXRvciA9IGdidF90aW1la2V5X3NzdXBfY21wOworCXNz dXAtPnNzdXBfZXh0cmEgPSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KZGlmZiAt LWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9idHJlZV90cy5jIGIvY29udHJpYi9idHJlZV9n aXN0L2J0cmVlX3RzLmMKaW5kZXggOWUwZDk3OWRkYTkuLjA2YTc0NWJlODY1IDEwMDY0NAot LS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdHMuYworKysgYi9jb250cmliL2J0cmVl X2dpc3QvYnRyZWVfdHMuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgInV0aWxzL2Zt Z3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJ1 dGlscy9mbG9hdC5oIgorI2luY2x1ZGUgInV0aWxzL3NvcnRzdXBwb3J0LmgiCiAKIHR5cGVk ZWYgc3RydWN0CiB7CkBAIC0zMSw2ICszMiw3IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0 X3RzdHpfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZPX1YxKGdidF90c3R6X2Rpc3Rh bmNlKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RzX3BlbmFsdHkpOwogUEdfRlVOQ1RJ T05fSU5GT19WMShnYnRfdHNfc2FtZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKGdidF90c19z b3J0c3VwcG9ydCk7CiAKIAogI2lmZGVmIFVTRV9GTE9BVDhfQllWQUwKQEAgLTM5LDYgKzQx LDI5IEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3RzX3NhbWUpOwogI2RlZmluZSBUaW1l c3RhbXBHZXREYXR1bUZhc3QoWCkgUG9pbnRlckdldERhdHVtKCYoWCkpCiAjZW5kaWYKIAor LyogU29ydHN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50CitnYnRfdHNfc3N1cF9j bXAoRGF0dW0geCwgRGF0dW0geSwgU29ydFN1cHBvcnQgc3N1cCkKK3sKKwl0c0tFWQkgICAq YXJnMSA9ICh0c0tFWSAqKSBEYXR1bUdldFBvaW50ZXIoeCk7CisJdHNLRVkJICAgKmFyZzIg PSAodHNLRVkgKikgRGF0dW1HZXRQb2ludGVyKHkpOworCisJLyogZm9yIGxlYWYgaXRlbXMg d2UgZXhwZWN0IGxvd2VyID09IHVwcGVyLCBzbyBvbmx5IGNvbXBhcmUgbG93ZXIgKi8KKwly ZXR1cm4gRGF0dW1HZXRJbnQzMihEaXJlY3RGdW5jdGlvbkNhbGwyKHRpbWVzdGFtcF9jbXAs CisJCQkJCQkJCQkJCSBUaW1lc3RhbXBHZXREYXR1bUZhc3QoYXJnMS0+bG93ZXIpLAorCQkJ CQkJCQkJCQkgVGltZXN0YW1wR2V0RGF0dW1GYXN0KGFyZzItPmxvd2VyKSkpOworfQorCitE YXR1bQorZ2J0X3RzX3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1 cHBvcnQgc3N1cCA9IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlz c3VwLT5jb21wYXJhdG9yID0gZ2J0X3RzX3NzdXBfY21wOworCXNzdXAtPnNzdXBfZXh0cmEg PSBOVUxMOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KIAogc3RhdGljIGJvb2wKIGdidF90 c2d0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIEZtZ3JJbmZvICpmbGluZm8pCmRp ZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNfdmFyLmggYi9jb250 cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNfdmFyLmgKaW5kZXggOTMwMmQ0MWNlZDYuLmY3 OWI1NTNhMWUxIDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXRpbHNf dmFyLmgKKysrIGIvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V0aWxzX3Zhci5oCkBAIC00 MSw3ICs0MSwxNyBAQCB0eXBlZGVmIHN0cnVjdAogCUdCVF9WQVJLRVkgKigqZl9sMm4pIChH QlRfVkFSS0VZICosIEZtZ3JJbmZvICpmbGluZm8pOwkvKiBjb252ZXJ0IGxlYWYgdG8gbm9k ZSAqLwogfSBnYnRyZWVfdmluZm87CiAKLQorLyoKKyAqIEZyZWUgcHRyMSBpbiBjYXNlIGl0 cyBhIGNvcHkgb2YgcHRyMi4KKyAqCisgKiBUaGlzIGlzIGFkYXB0ZWQgZnJvbSB2YXJsZW5h J3MgUEdfRlJFRV9JRl9DT1BZLCB0aG91Z2gKKyAqIGRvZXNuJ3QgcmVxdWlyZSBmY2luZm8g YWNjZXNzLgorICovCisjZGVmaW5lIEdCVF9GUkVFX0lGX0NPUFkocHRyMSwgcHRyMikgXAor CWRvIHsgXAorCQlpZiAoKFBvaW50ZXIpIChwdHIxKSAhPSBEYXR1bUdldFBvaW50ZXIocHRy MikpIFwKKwkJCXBmcmVlKHB0cjEpOyBcCisJfSB3aGlsZSAoMCkKIAogZXh0ZXJuIEdCVF9W QVJLRVlfUiBnYnRfdmFyX2tleV9yZWFkYWJsZShjb25zdCBHQlRfVkFSS0VZICprKTsKIApk aWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L2J0cmVlX3V1aWQuYyBiL2NvbnRyaWIv YnRyZWVfZ2lzdC9idHJlZV91dWlkLmMKaW5kZXggZjRjNWM2ZTU4OTIuLmNlMDQwYTAyNWU3 IDEwMDY0NAotLS0gYS9jb250cmliL2J0cmVlX2dpc3QvYnRyZWVfdXVpZC5jCisrKyBiL2Nv bnRyaWIvYnRyZWVfZ2lzdC9idHJlZV91dWlkLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVk ZSAiYnRyZWVfZ2lzdC5oIgogI2luY2x1ZGUgImJ0cmVlX3V0aWxzX251bS5oIgogI2luY2x1 ZGUgInBvcnQvcGdfYnN3YXAuaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9ydC5oIgog I2luY2x1ZGUgInV0aWxzL3V1aWQuaCIKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTI1LDcgKzI2 LDMxIEBAIFBHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3V1aWRfcGlja3NwbGl0KTsKIFBHX0ZV TkNUSU9OX0lORk9fVjEoZ2J0X3V1aWRfY29uc2lzdGVudCk7CiBQR19GVU5DVElPTl9JTkZP X1YxKGdidF91dWlkX3BlbmFsdHkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShnYnRfdXVpZF9z YW1lKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEoZ2J0X3V1aWRfc29ydHN1cHBvcnQpOwogCitz dGF0aWMgaW50CXV1aWRfaW50ZXJuYWxfY21wKGNvbnN0IHBnX3V1aWRfdCAqYXJnMSwgY29u c3QgcGdfdXVpZF90ICphcmcyKTsKKworLyogU29ydHN1cHBvcnQgZnVuY3Rpb25zICovCitz dGF0aWMgaW50CitnYnRfdXVpZF9zc3VwX2NtcChEYXR1bSB4LCBEYXR1bSB5LCBTb3J0U3Vw cG9ydCBzc3VwKQoreworCXV1aWRLRVkgICAgKmFyZzEgPSAodXVpZEtFWSAqKSBEYXR1bUdl dFBvaW50ZXIoeCk7CisJdXVpZEtFWSAgICAqYXJnMiA9ICh1dWlkS0VZICopIERhdHVtR2V0 UG9pbnRlcih5KTsKKworCS8qIGZvciBsZWFmIGl0ZW1zIHdlIGV4cGVjdCBsb3dlciA9PSB1 cHBlciwgc28gb25seSBjb21wYXJlIGxvd2VyICovCisJcmV0dXJuIHV1aWRfaW50ZXJuYWxf Y21wKCZhcmcxLT5sb3dlciwgJmFyZzItPmxvd2VyKTsKK30KKworRGF0dW0KK2didF91dWlk X3NvcnRzdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJU29ydFN1cHBvcnQgc3N1cCA9 IChTb3J0U3VwcG9ydCkgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlzc3VwLT5jb21wYXJh dG9yID0gZ2J0X3V1aWRfc3N1cF9jbXA7CisJc3N1cC0+c3N1cF9leHRyYSA9IE5VTEw7CisK KwlQR19SRVRVUk5fVk9JRCgpOworfQogCiBzdGF0aWMgaW50CiB1dWlkX2ludGVybmFsX2Nt cChjb25zdCBwZ191dWlkX3QgKmFyZzEsIGNvbnN0IHBnX3V1aWRfdCAqYXJnMikKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9lbnVtLm91dCBiL2NvbnRyaWIv YnRyZWVfZ2lzdC9leHBlY3RlZC9lbnVtLm91dAppbmRleCBjNGI3NjlkZDRiNy4uNTc4MmY0 Mzg4MzggMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lzdC9leHBlY3RlZC9lbnVtLm91 dAorKysgYi9jb250cmliL2J0cmVlX2dpc3QvZXhwZWN0ZWQvZW51bS5vdXQKQEAgLTEsNSAr MSw4IEBACiAtLSBlbnVtIGNoZWNrCi1jcmVhdGUgdHlwZSByYWluYm93IGFzIGVudW0gKCdy JywnbycsJ3knLCdnJywnYicsJ2knLCd2Jyk7CitjcmVhdGUgdHlwZSByYWluYm93IGFzIGVu dW0gKCdyJywnbycsJ2cnLCdiJywnaScsJ3YnKTsKKy0tIGVudW0gdmFsdWVzIGFkZGVkIGxh dGVyIHRha2Ugc29tZSBkaWZmZXJlbnQgY29kZXBhdGhzIGludGVybmFsbHksCistLSBzbyBt YWtlIHN1cmUgd2UgaGF2ZSBjb3ZlcmFnZSBmb3IgdGhvc2UgdG9vCithbHRlciB0eXBlIHJh aW5ib3cgYWRkIHZhbHVlICd5JyBiZWZvcmUgJ2cnOwogQ1JFQVRFIFRBQkxFIGVudW10bXAg KGEgcmFpbmJvdyk7CiBcY29weSBlbnVtdG1wIGZyb20gJ2RhdGEvZW51bS5kYXRhJwogU0VU IGVuYWJsZV9zZXFzY2FuPW9uOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idHJlZV9naXN0L21l c29uLmJ1aWxkIGIvY29udHJpYi9idHJlZV9naXN0L21lc29uLmJ1aWxkCmluZGV4IGY0ZmE5 NTc0ZjFmLi44OTkzMmRkMzg0NCAxMDA2NDQKLS0tIGEvY29udHJpYi9idHJlZV9naXN0L21l c29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvYnRyZWVfZ2lzdC9tZXNvbi5idWlsZApAQCAtNTEs NiArNTEsNyBAQCBpbnN0YWxsX2RhdGEoCiAgICdidHJlZV9naXN0LS0xLjUtLTEuNi5zcWwn LAogICAnYnRyZWVfZ2lzdC0tMS42LS0xLjcuc3FsJywKICAgJ2J0cmVlX2dpc3QtLTEuNy0t MS44LnNxbCcsCisgICdidHJlZV9naXN0LS0xLjgtLTEuOS5zcWwnLAogICBrd2FyZ3M6IGNv bnRyaWJfZGF0YV9hcmdzLAogKQogCmRpZmYgLS1naXQgYS9jb250cmliL2J0cmVlX2dpc3Qv c3FsL2VudW0uc3FsIGIvY29udHJpYi9idHJlZV9naXN0L3NxbC9lbnVtLnNxbAppbmRleCA0 NzYyMTFlOTc5NS4uZDY2MmNiNjMyMjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYnRyZWVfZ2lz dC9zcWwvZW51bS5zcWwKKysrIGIvY29udHJpYi9idHJlZV9naXN0L3NxbC9lbnVtLnNxbApA QCAtMSw2ICsxLDEwIEBACiAtLSBlbnVtIGNoZWNrCiAKLWNyZWF0ZSB0eXBlIHJhaW5ib3cg YXMgZW51bSAoJ3InLCdvJywneScsJ2cnLCdiJywnaScsJ3YnKTsKK2NyZWF0ZSB0eXBlIHJh aW5ib3cgYXMgZW51bSAoJ3InLCdvJywnZycsJ2InLCdpJywndicpOworCistLSBlbnVtIHZh bHVlcyBhZGRlZCBsYXRlciB0YWtlIHNvbWUgZGlmZmVyZW50IGNvZGVwYXRocyBpbnRlcm5h bGx5LAorLS0gc28gbWFrZSBzdXJlIHdlIGhhdmUgY292ZXJhZ2UgZm9yIHRob3NlIHRvbwor YWx0ZXIgdHlwZSByYWluYm93IGFkZCB2YWx1ZSAneScgYmVmb3JlICdnJzsKIAogQ1JFQVRF IFRBQkxFIGVudW10bXAgKGEgcmFpbmJvdyk7CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9idHJlZS1naXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvYnRyZWUtZ2lzdC5zZ21sCmluZGV4 IDMxZTdjNzhhYWVmLi5hNGMxYjk5YmUxZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2J0 cmVlLWdpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvYnRyZWUtZ2lzdC5zZ21sCkBAIC01 Miw2ICs1MiwxMyBAQAogICA8dHlwZT5vaWQ8L3R5cGU+LCBhbmQgPHR5cGU+bW9uZXk8L3R5 cGU+LgogIDwvcGFyYT4KIAorIDxwYXJhPgorICBCeSBkZWZhdWx0IDxmaWxlbmFtZT5idHJl ZV9naXN0PC9maWxlbmFtZT4gYnVpbGRzIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IGluZGV4 IHdpdGgKKyAgPGZ1bmN0aW9uPnNvcnRzdXBwb3J0PC9mdW5jdGlvbj4gaW4gPGZpcnN0dGVy bT5zb3J0ZWQ8L2ZpcnN0dGVybT4gbW9kZS4gVGhpcyB1c3VhbGx5IHJlc3VsdHMgaW4KKyAg bXVjaCBmYXN0ZXIgaW5kZXggYnVpbHQgc3BlZWQuIEl0IGlzIHN0aWxsIHBvc3NpYmxlIHRv IHJldmVydCB0byBidWZmZXJlZCBidWlsdCBzdHJhdGVneQorICBieSB1c2luZyB0aGUgPGxp dGVyYWw+YnVmZmVyaW5nPC9saXRlcmFsPiBwYXJhbWV0ZXIgd2hlbiBjcmVhdGluZyB0aGUg aW5kZXguCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIFRoaXMgbW9kdWxlIGlzIGNvbnNpZGVy ZWQgPHF1b3RlPnRydXN0ZWQ8L3F1b3RlPiwgdGhhdCBpcywgaXQgY2FuIGJlCiAgIGluc3Rh bGxlZCBieSBub24tc3VwZXJ1c2VycyB3aG8gaGF2ZSA8bGl0ZXJhbD5DUkVBVEU8L2xpdGVy YWw+IHByaXZpbGVnZQotLSAKMi4zOS41Cgo= --------------ybIzJTIr0K8bkZ462Udehfno--