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 1pPn2q-0002K2-MA for pgsql-bugs@arkaria.postgresql.org; Wed, 08 Feb 2023 16:11:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pPn2o-0007As-Dz for pgsql-bugs@arkaria.postgresql.org; Wed, 08 Feb 2023 16:11:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pPn2n-0007Aj-Qe for pgsql-bugs@lists.postgresql.org; Wed, 08 Feb 2023 16:11:38 +0000 Received: from meesny.iki.fi ([195.140.195.201]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pPn2f-0007nj-Es for pgsql-bugs@lists.postgresql.org; Wed, 08 Feb 2023 16:11:36 +0000 Received: from [192.168.1.113] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (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 meesny.iki.fi (Postfix) with ESMTPSA id B53EA20153; Wed, 8 Feb 2023 18:11:24 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1675872684; 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=jOnjlfjSQl5xoCywrZiLZONEs/MBkDc7JHbu51IFeXE=; b=pLDZbzOBQk0Q2AmBbKT58wrFuc/pVnfRmcfNImh/LlB9MF2bxfh7dxmOpKxRIhcrGhUxlT 3x6aX1CZAZrYxM3vH6w2fehMWpodYFL02z8RhotNr3lGb8vYIPgKMzb53QuowO5p5T6AxY oBJyGSWeZxpmV7UbJQhAEdkD/VDD68M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1675872684; 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=jOnjlfjSQl5xoCywrZiLZONEs/MBkDc7JHbu51IFeXE=; b=YcH4wdjRB78LfRgcwL4jHIRqZx7HAMu1Cvsak4CBR+OrQOdvk0qe9eDZr7jqRk17HLr21c cC5fNNuCf/F+MB+jPU/P9AYAQxBNdgkbUhgnI0pFtWApUnf1uMWSCyQc8QfBh1bGKd66Or SnMFCGc/E8b/htM3l7Ct8+eAdYIRApY= ARC-Seal: i=1; s=meesny; d=iki.fi; t=1675872684; a=rsa-sha256; cv=none; b=h66O4Z8L3s8tOETWblaH5hRc/PhsvFfCkpETXtl8lgwafCEV5Wmhs2bfDbfEqVq2QDEaNd 0nQjcbcVCRArVau//FNVFhhNeynarD9pTST7FHol3SNo5CPafWos9afhPxKl7t4tlJTVuu xZ6GJxiHEfihKyZlrFCz8z63E+SfHc4= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------43Ico1G1Di5MBpZOOCS0raC5" Message-ID: <584842ed-e476-6bac-bb36-2aec204e9eef@iki.fi> Date: Wed, 8 Feb 2023 18:11:24 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Subject: Re: BUG #17760: SCRAM authentication fails with "modern" (rsassaPss signature) server certificate From: Heikki Linnakangas To: gunnar.bluth@pro-open.de, pgsql-bugs@lists.postgresql.org References: <17760-b6c61e752ec07060@postgresql.org> Content-Language: en-US Cc: Jacob Champion , Michael Paquier 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. --------------43Ico1G1Di5MBpZOOCS0raC5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit cc'ing Jacob and Michael who have poked around channel binding before. If you have a chance to review this patch, I would appreciate that. On 05/02/2023 03:28, Heikki Linnakangas wrote: > On 25/01/2023 13:32, PG Bug reporting form wrote: >> I do think however that this is an oversight on our side and has to be >> addressed. If not in code, the docs should point out that certain server >> certificate types (PSS) may not work with SCRAM auth (or libpq needs to be >> compiled against a minimum version of OpenSSL, if that's the root cause). > > There are a few things we change in PostgreSQL for this: > > 1. If the server cannot compute a hash of the certificate, because it > cannot unambiguously determine the hash algorithm to use, it should not > offer the SCRAM-SHA-256-PLUS authentication method to the client. In > other words, if the server cannot do channel binding with it's > certificate, it should say so, instead of erroring out later. Here's a patch for that. > 2. Similarly in the client: if libpq cannot determinate the hash > algorithm to use with the server's certificate, it should not attempt > channel binding. > > I believe this is OK from a security point of view. If the server is > using a certificate that cannot be used with channel binding, and the > client doesn't require channel binding, it's OK to not do it. A man in > the middle can present a certificate to the client that cannot be used > with channel binding, but if they can do that they could also just not > offer the SCRAM-SHA-256-PLUS option to the client. So I don't see risk > of downgrade attacks here. On second thoughts, the above is wrong. We cannot safely downgrade to not using channel binding just because we don't support the certificate's signature algorithm. Otherwise a MITM could indeed do what I said above and send a certificate that uses an unsupported signature algorithm, to force downgrade. It cannot just modify the SASL mechanism negotiation by leaving out the SCRAM-SHA-256-PLUS, because the SCRAM handshake catches that case. The client sends a different gs2-cbind-flag when it chooses to not do channel binding even though the server supports it, and when it doesn't use channel binding because the server didn't support it. I improved the error message in the client, but I'm afraid that's the best we can do in the client side. Fortunately, it is enough to upgrade the server to include this fix, to allow clients to connect. (Albeit without channel binding). > 3. Add support for channel binding with RSA-PSS. The problem is that > be_tls_get_certificate_hash() doesn't know which digest algorithm to > use. As you noted, OBJ_find_sigid_algs() returns "undef" (NID_undef) for > rsassaPss certificates. I did some googling: when certificate uses > RSASSA-PSS as the signature algorithm, there is a separate field, > RSASSA-PSS-params that specifies the hash algorithm > (https://www.rfc-editor.org/rfc/rfc4055#section-3.1). If you ask me, > OBJ_find_sigid_algs() should look into RSASSA-PSS-params and figure it > out, but I'm no expert in the OpenSSL codebase so maybe that would be > the wrong place to do it. I didn't dare to make any such changes for now. Maybe we could do that in 'master', but I would be wary of backpatching. - Heikki --------------43Ico1G1Di5MBpZOOCS0raC5 Content-Type: text/x-patch; charset=UTF-8; name="0001-Don-t-advertise-channel-binding-to-client-when-we-ca.patch" Content-Disposition: attachment; filename*0="0001-Don-t-advertise-channel-binding-to-client-when-we-ca.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5YThlNmQxMWQ2ZmRiZmVkOTA3ZGUyYzk5OTEyOWJhODEwNWQ2YWZmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgOCBGZWIgMjAyMyAxNzozOToyNSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggMS8xXSBEb24ndCBhZHZlcnRpc2UgY2hhbm5lbCBiaW5kaW5nIHRv IGNsaWVudCB3aGVuIHdlIGNhbm5vdAogc3VwcG9ydCBpdC4KCldpdGggY2VydGFpbiBraW5k cyBvZiBUTFMgc2VydmVyIGNlcnRpZmljYXRlcywgd2UgY2Fubm90IGRvIFNDUkFNCmNoYW5u ZWwgYmluZGluZyAodGxzLXNlcnZlci1lbmQtcG9pbnQpLCBiZWNhdXNlIHRoZSBoYXNoIGFs Z29yaXRobSB0bwp1c2UgaXMgbm90IHdlbGwgZGVmaW5lZCwgb3IgaXMgbm90IHN1cHBvcnRl ZCBieSBPcGVuU1NMLiBJZiB5b3UgdHJ5IHRvCnVzZSBjaGFubmVsIGJpbmRpbmcgd2l0aCBz dWNoIGEgY2VydGlmaWNhdGUsIHlvdSBnZXQgYW4gb2JzY3VyZSBlcnJvcgppbiB0aGUgY2xp ZW50IGR1cmluZyB0aGUgYXV0aGVudGljYXRpb246CgogICAgY291bGQgbm90IGZpbmQgZGln ZXN0IGZvciBOSUQgVU5ERUYKClRvIGZpeCwgZG9uJ3QgYWR2ZXJ0aXNlIFNDUkFNLVNIQS0y NTYtUExVUyBpZiB3ZSBjYW5ub3QgY2FsY3VsYXRlIHRoZQpoYXNoLiBQcmludCBhIExPRyBt ZXNzYWdlIG9uY2Ugb24gc2VydmVyIHN0YXJ0dXAsIGFuZCBhdCBjb25maWcKcmVsb2FkLCBp ZiB0aGUgc2VydmVyIGlzIHVzaW5nIHN1Y2ggYSBjZXJ0aWZpY2F0ZS4gVG8gZG8gdGhhdCwK Y2FsY3VsYXRlIHRoZSBjZXJ0aWZpY2F0ZSBoYXNoIHdoZW4gdGhlIGNlcnRpZmljYXRlIGlz IGxvYWRlZCwgaW5zdGVhZApvZiB3aGVuIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4K ClRoZSBhdmFpbGFiaWxpdHkgb2YgY2hhbm5lbCBiaW5kaW5nIG5vdyBkZXBlbmRzIG9uIHRo ZSBpbnN0YWxsZWQKY2VydGlmaWNhdGUsIHNvIHRoaXMgcmVtb3ZlcyBIQVZFX0JFX1RMU19H RVRfQ0VSVElGSUNBVEVfSEFTSCBhbmQKcmVwbGFjZXMgaXQgd2l0aCBhIG5ldyBmdW5jdGlv biwgc2NyYW1fY2hhbm5lbF9iaW5kaW5nX3Bvc3NpYmxlKCkuIElmCnRoZSBzZXJ2ZXIgaXMg Y29tcGlsZWQgd2l0aCBhIHZlcnNpb24gb2YgT3BlblNTTCB0aGF0IGRvZXNuJ3QgaGF2ZSB0 aGUKWDUwOV9nZXRfc2lnbmF0dXJlX25pZCgpIGZ1bmN0aW9uLCBhbmQgaGVuY2UgY2Fubm90 IHN1cHBvcnQgb3VyCmNoYW5uZWwgYmluZGluZyBhdCBhbGwsIGl0IHdpbGwganVzdCBhbHdh eXMgcmV0dXJuIGZhbHNlLgoKVGhlIGxpYnFxIGNsaWVudCBjb2RlIGhhcyBhIHNpbWlsYXIg aXNzdWUuIEl0IHdpbGwgY2hvb3NlClNDUkFNLVNIQS0yNTYtUExVUyBpZiB0aGUgc2VydmVy IGFkdmVydGlzZXMgaXQsIGV2ZW4gaWYgaXQgZG9lc24ndApzdXBwb3J0IHRoZSBzZXJ2ZXIg Y2VydGlmaWNhdGUncyBzaWduYXR1cmUgYWxnb3JpdGhtLCBvbmx5IHRvIGZhaWwKbGF0ZXIg aW4gdGhlIGF1dGhlbnRpY2F0aW9uLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpc24ndCBtdWNo IHdlIGNhbiBkbwppbiB0aGUgY2xpZW50OiBpdCBjYW5ub3Qgc2FmZWx5IGZhbGwgYmFjayB0 byBub3QgdXNpbmcgY2hhbm5lbCBiaW5kaW5nCmlmIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUg c2VydmVyJ3MgY2VydGlmaWNhdGUncyBoYXNoaW5nIGFsZ29yaXRobSwKYmVjYXVzZSB0aGF0 IGNvdWxkIGxlYWQgdG8gYSBkb3duZ3JhZGUgYXR0YWNrLiBTbyBpbiB0aGUgY2xpZW50LCBq dXN0Cm1ha2UgdGhlIGVycm9yIG1lc3NhZ2UgbW9yZSBjbGVhci4KCldlIGNvdWxkIHRyeSBo YXJkZXIgdG8gZGV0ZXJtaW5lIGEgaGFzaCBhbGdvcml0aG0gaWYgdGhlIGNlcnRpZmljYXRl CmRvZXNuJ3Qgc3BlY2lmeSBvbmUgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHdlIGNv dWxkIGZhbGwgYmFjayB0bwpTSEEtMjU2LiBIb3dldmVyLCBJJ20gbm90IGNvbWZvcnRhYmxl IGludmVudGluZyBuZXcgcnVsZXMgZXNwZWNpYWxseQppbiBiYWNrLWJyYW5jaGVzLiBPcGVu U1NMIGFsc28gaGFzIGEgZnVuY3Rpb24gWDUwOV9kaWdlc3Rfc2lnKCkgdGhhdApjb250YWlu cyBzb21lIGZhbGxiYWNrIHJ1bGVzIGxpa2UgdGhhdCwgYnV0IEFGQUlDUyBpdCB3YXNuJ3Qg d3JpdHRlbgp3aXRoIGNoYW5uZWwgYmluZGluZyBpbiBtaW5kLCBzbyBJJ20gbm90IGNvbmZp ZGVudCBzd2l0Y2hpbmcgdG8gdGhhdAplaXRoZXIuIEluIHRoZSBmdXR1cmUsIHdlIHByb2Jh Ymx5IHNob3VsZCBzd2l0Y2ggdG8gdGhlIHRscy1leHBvcnRlcgpjaGFubmVsIGJpbmRpbmcg dHlwZSBhcyBzcGVjaWZpZWQgaW4gUkZDIDkyNjYuCgpGaXhlcyBidWcgIzE3NzYwLiBXZSBz dGlsbCBkb24ndCBzdXBwb3J0IGNoYW5uZWwgYmluZGluZyB3aXRoIFJTQS1QU1MKY2VydGlm aWNhdGVzLCBidXQgYXQgbGVhc3Qgd2UgZmFsbCBiYWNrIG1vcmUgZ3JhY2VmdWxseSBub3cu CgpSZXBvcnRlZC1ieTogR3VubmFyICJOaWNrIiBCbHV0aApEaXNjdXNzaW9uOiBodHRwczov L3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzE3NzYwLWI2YzYxZTc1MmVjMDcwNjBA cG9zdGdyZXNxbC5vcmcKQmFja3BhdGNoOiAxMS0gKGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnMp Ci0tLQogc3JjL2JhY2tlbmQvbGlicHEvYXV0aC1zY3JhbS5jICAgICAgICAgICB8ICA1NCAr KysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2JlLXNlY3VyZS1vcGVuc3NsLmMgICAg fCAxMDIgKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2xpYnBxL2JlLXNl Y3VyZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUu aCAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1z Y3JhbS5jICAgICB8ICAxNyArKystCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUt b3BlbnNzbC5jIHwgICA1ICstCiBzcmMvdGVzdC9zc2wvY29uZi9zZXJ2ZXItcnNhcHNzLmNv bmZpZyAgIHwgIDE0ICsrKysKIHNyYy90ZXN0L3NzbC9zc2wvc2VydmVyLXJzYXBzcy5jcnQg ICAgICAgfCAgMjEgKysrKysKIHNyYy90ZXN0L3NzbC9zc2wvc2VydmVyLXJzYXBzcy5rZXkg ICAgICAgfCAgMjggKysrKysrKwogc3JjL3Rlc3Qvc3NsL3NzbGZpbGVzLm1rICAgICAgICAg ICAgICAgICB8ICAyMiArKysrLQogc3JjL3Rlc3Qvc3NsL3QvMDAyX3NjcmFtLnBsICAgICAg ICAgICAgICB8ICAxNCArKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAyNDIgaW5zZXJ0aW9ucygr KSwgNDUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3NsL2Nv bmYvc2VydmVyLXJzYXBzcy5jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9z c2wvc3NsL3NlcnZlci1yc2Fwc3MuY3J0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv c3NsL3NzbC9zZXJ2ZXItcnNhcHNzLmtleQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xp YnBxL2F1dGgtc2NyYW0uYyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtc2NyYW0uYwppbmRl eCA0NDQxZTBkNzc0NS4uZmIzOTA1MWJmYTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xp YnBxL2F1dGgtc2NyYW0uYworKysgYi9zcmMvYmFja2VuZC9saWJwcS9hdXRoLXNjcmFtLmMK QEAgLTE5MSw2ICsxOTEsMzYgQEAgc3RhdGljIGNoYXIgKnNjcmFtX21vY2tfc2FsdChjb25z dCBjaGFyICp1c2VybmFtZSwKIAkJCQkJCQkgcGdfY3J5cHRvaGFzaF90eXBlIGhhc2hfdHlw ZSwKIAkJCQkJCQkgaW50IGtleV9sZW5ndGgpOwogCisvKgorICogSXMgY2hhbm5lbCBiaW5k aW5nIHBvc3NpYmxlPworICoKKyAqIFNDUkFNLVNIQS0yNTYtUExVUyBpbiBQb3N0Z3JlU1FM IGltcGxpZXMgdGhlIHRscy1zZXJ2ZXItZW5kLXBvaW50IGNoYW5uZWwKKyAqIGJpbmRpbmcg dHlwZSwgd2hpY2ggaXMgYmFzZWQgb24gdGhlIGhhc2ggb2YgdGhlIHNlcnZlcidzIGNlcnRp ZmljYXRlLiAgVHJ5CisgKiB0byBnZXQgdGhlIGhhc2guICBJdCBtaWdodCBub3QgYmUgYXZh aWxhYmxlLCBpZiB0aGUgY2VydGlmaWNhdGUgdXNlcyBhbgorICogdW5zdXBwb3J0ZWQgb3Ig YW1iaWd1b3VzIGRpZ2VzdCBhbGdvcml0aG0uCisgKgorICogWFhYOiBCeSBzdXBwb3J0aW5n IG9ubHkgdGxzLXNlcnZlci1lbmQtcG9pbnQsIHdlIGFyZSB2aW9sYXRpbmcgUkZDIDU4MDIs CisgKiB3aGljaCBzdGF0ZXMgdGhhdCB0aGUgc2VydmVyIE1VU1Qgc3VwcG9ydCB0bHMtdW5p cXVlIGNoYW5uZWwgYmluZGluZyB0eXBlCisgKiBpZiBjaGFubmVsIGJpbmRpbmcgaXMgc3Vw cG9ydGVkIGF0IGFsbC4gIFdlIGNob29zZSB0byB2aW9sYXRlIHRoZSBSRkMKKyAqIGJlY2F1 c2UgdGxzLXVuaXF1ZSB3YXMgbm90IHN1cHBvcnRlZCBieSBhbGwgdmVyc2lvbnMgb2YgT3Bl blNTTCB3aGVuIHRoaXMKKyAqIHdhcyBpbXBsZW1lbnRlZCwgYW5kIGFsc28gcmVxdWlyZXMg RXh0ZW5kZWQgTWFzdGVyIEtleSBFeHRlbnNpb24gW1JGQzc2MjddCisgKiBvciBUTFMgdjEu MyB0byBiZSBzZWN1cmUuICBJbiB0aGUgZnV0dXJlLCB3ZSBzaG91bGQgaW1wbGVtZW50IHRo ZQorICogdGxzLWV4cG9ydGVyIGNoYW5uZWwgYmluZGluZyB0eXBlIGFzIGRlZmluZWQgaW4g UkZDOTI2Ni4KKyAqLworc3RhdGljIGJvb2wKK3NjcmFtX2NoYW5uZWxfYmluZGluZ19wb3Nz aWJsZShQb3J0ICpwb3J0KQoreworCXNpemVfdAkJZHVtbXlfbGVuOworCisJaWYgKCFwb3J0 LT5zc2xfaW5fdXNlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoYmVfdGxzX2dldF9jZXJ0 aWZpY2F0ZV9oYXNoKHBvcnQsICZkdW1teV9sZW4pICE9IE5VTEwpCisJCXJldHVybiB0cnVl OworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogR2V0IGEgbGlzdCBvZiBT QVNMIG1lY2hhbmlzbXMgdGhhdCB0aGlzIG1vZHVsZSBzdXBwb3J0cy4KICAqCkBAIC0yMDMs MTcgKzIzMywxMyBAQCBzY3JhbV9nZXRfbWVjaGFuaXNtcyhQb3J0ICpwb3J0LCBTdHJpbmdJ bmZvIGJ1ZikKIHsKIAkvKgogCSAqIEFkdmVydGlzZSB0aGUgbWVjaGFuaXNtcyBpbiBkZWNy ZWFzaW5nIG9yZGVyIG9mIGltcG9ydGFuY2UuICBTbyB0aGUKLQkgKiBjaGFubmVsLWJpbmRp bmcgdmFyaWFudHMgZ28gZmlyc3QsIGlmIHRoZXkgYXJlIHN1cHBvcnRlZC4gIENoYW5uZWwK LQkgKiBiaW5kaW5nIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggU1NMLCBhbmQgb25seSBpZiB0 aGUgU1NMIGltcGxlbWVudGF0aW9uCi0JICogaGFzIGEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBj ZXJ0aWZpY2F0ZSdzIGhhc2guCisJICogY2hhbm5lbC1iaW5kaW5nIHZhcmlhbnRzIGdvIGZp cnN0LCBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQuCiAJICovCi0jaWZkZWYgSEFWRV9CRV9UTFNf R0VUX0NFUlRJRklDQVRFX0hBU0gKLQlpZiAocG9ydC0+c3NsX2luX3VzZSkKKwlpZiAoc2Ny YW1fY2hhbm5lbF9iaW5kaW5nX3Bvc3NpYmxlKHBvcnQpKQogCXsKIAkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsIFNDUkFNX1NIQV8yNTZfUExVU19OQU1FKTsKIAkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoYnVmLCAnXDAnKTsKIAl9Ci0jZW5kaWYKIAlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgU0NSQU1fU0hBXzI1Nl9OQU1FKTsKIAlhcHBlbmRTdHJpbmdJbmZvQ2hh cihidWYsICdcMCcpOwogfQpAQCAtMjUyLDEyICsyNzgsOSBAQCBzY3JhbV9pbml0KFBvcnQg KnBvcnQsIGNvbnN0IGNoYXIgKnNlbGVjdGVkX21lY2gsIGNvbnN0IGNoYXIgKnNoYWRvd19w YXNzKQogCSAqIGNsaWVudCBuZXZlcnRoZWxlc3MgdHJpZXMgdG8gc2VsZWN0IGl0LCBpdCdz IGEgcHJvdG9jb2wgdmlvbGF0aW9uIGxpa2UKIAkgKiBzZWxlY3RpbmcgYW55IG90aGVyIFNB U0wgbWVjaGFuaXNtIHdlIGRvbid0IHN1cHBvcnQuCiAJICovCi0jaWZkZWYgSEFWRV9CRV9U TFNfR0VUX0NFUlRJRklDQVRFX0hBU0gKLQlpZiAoc3RyY21wKHNlbGVjdGVkX21lY2gsIFND UkFNX1NIQV8yNTZfUExVU19OQU1FKSA9PSAwICYmIHBvcnQtPnNzbF9pbl91c2UpCisJaWYg KHN0cmNtcChzZWxlY3RlZF9tZWNoLCBTQ1JBTV9TSEFfMjU2X1BMVVNfTkFNRSkgPT0gMCAm JiBzY3JhbV9jaGFubmVsX2JpbmRpbmdfcG9zc2libGUocG9ydCkpCiAJCXN0YXRlLT5jaGFu bmVsX2JpbmRpbmdfaW5fdXNlID0gdHJ1ZTsKLQllbHNlCi0jZW5kaWYKLQlpZiAoc3RyY21w KHNlbGVjdGVkX21lY2gsIFNDUkFNX1NIQV8yNTZfTkFNRSkgPT0gMCkKKwllbHNlIGlmIChz dHJjbXAoc2VsZWN0ZWRfbWVjaCwgU0NSQU1fU0hBXzI1Nl9OQU1FKSA9PSAwKQogCQlzdGF0 ZS0+Y2hhbm5lbF9iaW5kaW5nX2luX3VzZSA9IGZhbHNlOwogCWVsc2UKIAkJZXJlcG9ydChF UlJPUiwKQEAgLTEwMDUsMTQgKzEwMjgsMTIgQEAgcmVhZF9jbGllbnRfZmlyc3RfbWVzc2Fn ZShzY3JhbV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmlucHV0KQogCQkJCQkJIGVycm1z ZygibWFsZm9ybWVkIFNDUkFNIG1lc3NhZ2UiKSwKIAkJCQkJCSBlcnJkZXRhaWwoIlRoZSBj bGllbnQgc2VsZWN0ZWQgU0NSQU0tU0hBLTI1Ni1QTFVTLCBidXQgdGhlIFNDUkFNIG1lc3Nh Z2UgZG9lcyBub3QgaW5jbHVkZSBjaGFubmVsIGJpbmRpbmcgZGF0YS4iKSkpOwogCi0jaWZk ZWYgSEFWRV9CRV9UTFNfR0VUX0NFUlRJRklDQVRFX0hBU0gKLQkJCWlmIChzdGF0ZS0+cG9y dC0+c3NsX2luX3VzZSkKKwkJCWlmIChzY3JhbV9jaGFubmVsX2JpbmRpbmdfcG9zc2libGUo c3RhdGUtPnBvcnQpKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfQVVUSE9SSVpBVElPTl9TUEVDSUZJQ0FUSU9OKSwKIAkJCQkJCSBlcnJt c2coIlNDUkFNIGNoYW5uZWwgYmluZGluZyBuZWdvdGlhdGlvbiBlcnJvciIpLAogCQkJCQkJ IGVycmRldGFpbCgiVGhlIGNsaWVudCBzdXBwb3J0cyBTQ1JBTSBjaGFubmVsIGJpbmRpbmcg YnV0IHRoaW5rcyB0aGUgc2VydmVyIGRvZXMgbm90LiAgIgogCQkJCQkJCQkgICAiSG93ZXZl ciwgdGhpcyBzZXJ2ZXIgZG9lcyBzdXBwb3J0IGNoYW5uZWwgYmluZGluZy4iKSkpOwotI2Vu ZGlmCiAJCQlwKys7CiAJCQlpZiAoKnAgIT0gJywnKQogCQkJCWVyZXBvcnQoRVJST1IsCkBA IC0xMzAxLDcgKzEzMjIsNiBAQCByZWFkX2NsaWVudF9maW5hbF9tZXNzYWdlKHNjcmFtX3N0 YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqaW5wdXQpCiAJY2hhbm5lbF9iaW5kaW5nID0gcmVh ZF9hdHRyX3ZhbHVlKCZwLCAnYycpOwogCWlmIChzdGF0ZS0+Y2hhbm5lbF9iaW5kaW5nX2lu X3VzZSkKIAl7Ci0jaWZkZWYgSEFWRV9CRV9UTFNfR0VUX0NFUlRJRklDQVRFX0hBU0gKIAkJ Y29uc3QgY2hhciAqY2JpbmRfZGF0YSA9IE5VTEw7CiAJCXNpemVfdAkJY2JpbmRfZGF0YV9s ZW4gPSAwOwogCQlzaXplX3QJCWNiaW5kX2hlYWRlcl9sZW47CkBAIC0xMzQzLDEwICsxMzYz LDYgQEAgcmVhZF9jbGllbnRfZmluYWxfbWVzc2FnZShzY3JhbV9zdGF0ZSAqc3RhdGUsIGNv bnN0IGNoYXIgKmlucHV0KQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX0FVVEhPUklaQVRJT05fU1BFQ0lGSUNBVElPTiksCiAJCQkJCSBlcnJt c2coIlNDUkFNIGNoYW5uZWwgYmluZGluZyBjaGVjayBmYWlsZWQiKSkpOwotI2Vsc2UKLQkJ Lyogc2hvdWxkbid0IGhhcHBlbiwgYmVjYXVzZSB3ZSBjaGVja2VkIHRoaXMgZWFybGllciBh bHJlYWR5ICovCi0JCWVsb2coRVJST1IsICJjaGFubmVsIGJpbmRpbmcgbm90IHN1cHBvcnRl ZCBieSB0aGlzIGJ1aWxkIik7Ci0jZW5kaWYKIAl9CiAJZWxzZQogCXsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2xpYnBxL2JlLXNlY3VyZS1vcGVuc3NsLmMgYi9zcmMvYmFja2VuZC9s aWJwcS9iZS1zZWN1cmUtb3BlbnNzbC5jCmluZGV4IGUzYzdjMTJhYTBlLi43NTExODk2MDBm OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLW9wZW5zc2wuYwor KysgYi9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUtb3BlbnNzbC5jCkBAIC02MSw2ICs2 MSw3IEBAIHN0YXRpYyBpbnQJbXlfc29ja193cml0ZShCSU8gKmgsIGNvbnN0IGNoYXIgKmJ1 ZiwgaW50IHNpemUpOwogc3RhdGljIEJJT19NRVRIT0QgKm15X0JJT19zX3NvY2tldCh2b2lk KTsKIHN0YXRpYyBpbnQJbXlfU1NMX3NldF9mZChQb3J0ICpwb3J0LCBpbnQgZmQpOwogCitz dGF0aWMgY2hhciAqY2FsY3VsYXRlX2NlcnRpZmljYXRlX2hhc2goWDUwOSAqY2VydCwgc2l6 ZV90ICpsZW4sIGJvb2wgaXNTZXJ2ZXJTdGFydCk7CiBzdGF0aWMgREggICpsb2FkX2RoX2Zp bGUoY2hhciAqZmlsZW5hbWUsIGJvb2wgaXNTZXJ2ZXJTdGFydCk7CiBzdGF0aWMgREggICps b2FkX2RoX2J1ZmZlcihjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW4pOwogc3RhdGlj IGludAlzc2xfZXh0ZXJuYWxfcGFzc3dkX2NiKGNoYXIgKmJ1ZiwgaW50IHNpemUsIGludCBy d2ZsYWcsIHZvaWQgKnVzZXJkYXRhKTsKQEAgLTczLDcgKzc0LDExIEBAIHN0YXRpYyBjb25z dCBjaGFyICpTU0xlcnJtZXNzYWdlKHVuc2lnbmVkIGxvbmcgZWNvZGUpOwogCiBzdGF0aWMg Y2hhciAqWDUwOV9OQU1FX3RvX2NzdHJpbmcoWDUwOV9OQU1FICpuYW1lKTsKIAorLyogY3Vy cmVudCBTU0wgY29udGV4dCwgYW5kIGhhc2ggb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBp biB1c2UgaW4gdGhlIGNvbnRleHQgKi8KIHN0YXRpYyBTU0xfQ1RYICpTU0xfY29udGV4dCA9 IE5VTEw7CitzdGF0aWMgY2hhciAqc3NsX2NlcnRfaGFzaCA9IE5VTEw7CitzdGF0aWMgaW50 CXNzbF9jZXJ0X2hhc2hfbGVuID0gMDsKKwogc3RhdGljIGJvb2wgU1NMX2luaXRpYWxpemVk ID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBkdW1teV9zc2xfcGFzc3dkX2NiX2NhbGxlZCA9IGZh bHNlOwogc3RhdGljIGJvb2wgc3NsX2lzX3NlcnZlcl9zdGFydDsKQEAgLTk0LDYgKzk5LDkg QEAgYmVfdGxzX2luaXQoYm9vbCBpc1NlcnZlclN0YXJ0KQogCVNTTF9DVFggICAgKmNvbnRl eHQ7CiAJaW50CQkJc3NsX3Zlcl9taW4gPSAtMTsKIAlpbnQJCQlzc2xfdmVyX21heCA9IC0x OworCVg1MDkJICAgKm5ld19jZXJ0OworCWNoYXIJICAgKm5ld19oYXNoID0gTlVMTDsKKwlz aXplX3QJCW5ld19oYXNoX2xlbiA9IDA7CiAKIAkvKiBUaGlzIHN0dWZmIG5lZWQgYmUgZG9u ZSBvbmx5IG9uY2UuICovCiAJaWYgKCFTU0xfaW5pdGlhbGl6ZWQpCkBAIC0xNTYsNiArMTY0 LDMwIEBAIGJlX3Rsc19pbml0KGJvb2wgaXNTZXJ2ZXJTdGFydCkKIAlpZiAoIWNoZWNrX3Nz bF9rZXlfZmlsZV9wZXJtaXNzaW9ucyhzc2xfa2V5X2ZpbGUsIGlzU2VydmVyU3RhcnQpKQog CQlnb3RvIGVycm9yOwogCisJLyoKKwkgKiBQcmUtY2FsY3VsYXRlIHRoZSBoYXNoIG9mIHRo ZSBjZXJ0aWZpY2F0ZSwgZm9yIHVzZSBpbiBjaGFubmVsIGJpbmRpbmcuCisJICovCisJbmV3 X2NlcnQgPSBTU0xfQ1RYX2dldDBfY2VydGlmaWNhdGUoY29udGV4dCk7CisJaWYgKG5ld19j ZXJ0ID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUaGUgU1NMX0NUWF91c2VfY2VydGlmaWNh dGVfY2hhaW5fZmlsZSgpIGNhbGwgYWJvdmUgc3VjY2VlZGVkLCBidXQKKwkJICogdGhlcmUg aXMgbm8gY2VydGlmaWNhdGUgaW4gdGhlIGNvbnRleHQuICBOb3QgY2xlYXIgaWYgdGhpcyBj YW4KKwkJICogaGFwcGVuLCBidXQgd2UgY2VydGFpbmx5IGNhbid0IGRvIHRscy1zZXJ2ZXIt ZW5kLXBvaW50IGNoYW5uZWwKKwkJICogYmluZGluZyB3aXRob3V0IGEgY2VydGlmaWNhdGUu CisJCSAqLworCQluZXdfaGFzaCA9IE5VTEw7CisJCW5ld19oYXNoX2xlbiA9IDA7CisJfQor CWVsc2UKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCW9sZGN4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKwkJbmV3X2hhc2ggPSBjYWxj dWxhdGVfY2VydGlmaWNhdGVfaGFzaChuZXdfY2VydCwgJm5ld19oYXNoX2xlbiwgaXNTZXJ2 ZXJTdGFydCk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCX0KKwogCS8q CiAJICogT0ssIHRyeSB0byBsb2FkIHRoZSBwcml2YXRlIGtleSBmaWxlLgogCSAqLwpAQCAt MzgwLDggKzQxMiwxMiBAQCBiZV90bHNfaW5pdChib29sIGlzU2VydmVyU3RhcnQpCiAJICov CiAJaWYgKFNTTF9jb250ZXh0KQogCQlTU0xfQ1RYX2ZyZWUoU1NMX2NvbnRleHQpOworCWlm IChzc2xfY2VydF9oYXNoKQorCQlwZnJlZShzc2xfY2VydF9oYXNoKTsKIAogCVNTTF9jb250 ZXh0ID0gY29udGV4dDsKKwlzc2xfY2VydF9oYXNoID0gbmV3X2hhc2g7CisJc3NsX2NlcnRf aGFzaF9sZW4gPSBuZXdfaGFzaF9sZW47CiAKIAkvKgogCSAqIFNldCBmbGFnIHRvIHJlbWVt YmVyIHdoZXRoZXIgQ0Egc3RvcmUgaGFzIGJlZW4gbG9hZGVkIGludG8gU1NMX2NvbnRleHQu CkBAIC0zOTcsNiArNDMzLDggQEAgYmVfdGxzX2luaXQoYm9vbCBpc1NlcnZlclN0YXJ0KQog ZXJyb3I6CiAJaWYgKGNvbnRleHQpCiAJCVNTTF9DVFhfZnJlZShjb250ZXh0KTsKKwlpZiAo bmV3X2hhc2gpCisJCXBmcmVlKG5ld19oYXNoKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTQw Nyw2ICs0NDUsOSBAQCBiZV90bHNfZGVzdHJveSh2b2lkKQogCQlTU0xfQ1RYX2ZyZWUoU1NM X2NvbnRleHQpOwogCVNTTF9jb250ZXh0ID0gTlVMTDsKIAlzc2xfbG9hZGVkX3ZlcmlmeV9s b2NhdGlvbnMgPSBmYWxzZTsKKwlpZiAoc3NsX2NlcnRfaGFzaCkKKwkJcGZyZWUoc3NsX2Nl cnRfaGFzaCk7CisJc3NsX2NlcnRfaGFzaCA9IE5VTEw7CiB9CiAKIGludApAQCAtMTQyOSwx MSArMTQ3MCwyOSBAQCBiZV90bHNfZ2V0X3BlZXJfc2VyaWFsKFBvcnQgKnBvcnQsIGNoYXIg KnB0ciwgc2l6ZV90IGxlbikKIAkJcHRyWzBdID0gJ1wwJzsKIH0KIAotI2lmZGVmIEhBVkVf WDUwOV9HRVRfU0lHTkFUVVJFX05JRAogY2hhciAqCiBiZV90bHNfZ2V0X2NlcnRpZmljYXRl X2hhc2goUG9ydCAqcG9ydCwgc2l6ZV90ICpsZW4pCiB7Ci0JWDUwOQkgICAqc2VydmVyX2Nl cnQ7CisJKmxlbiA9IHNzbF9jZXJ0X2hhc2hfbGVuOworCXJldHVybiBzc2xfY2VydF9oYXNo OworfQorCisvKgorICogQ2FsY3VsYXRlIGhhc2ggb2YgdGhlIGdpdmVuIGNlcnRpZmljYXRl LCBmb3IgdXNlIGluIHRscy1zZXJ2ZXItZW5kLXBvaW50CisgKiBjaGFubmVsIGJpbmRpbmcu CisgKgorICogVGhlIHJldHVybmVkIGhhc2ggaXMgcGFsbG9jJ2QsIGFuZCBpdHMgbGVuZ3Ro IGlzIHJldHVybmVkIGluICpsZW4uCisgKgorICogSWYgdGhlIGhhc2ggY291bGQgbm90IGJl IGNhbGN1bGF0ZWQgYmVjYXVzZSB0aGUgaGFzaCBhbGdvcml0aG0gc3BlY2lmaWVkIGluCisg KiB0aGUgY2VydGlmaWNhdGUncyBzaWduYXR1cmUgaXMgbm90IHN1cHBvcnRlZCwgb3IgaXQg ZG9lc24ndCB1bmFtYmlndW91c2x5CisgKiBzcGVjaWZ5IGFuIGFsZ29yaXRobSB0byB1c2Us IHJldHVybnMgTlVMTCBhbmQgbG9ncyB0aGUgZXJyb3IuICBPbiBvdGhlcgorICogbGVzcyBl eHBlY3RlZCBlcnJvcnMsIGVyZXBvcnRzIHRoZSBlcnJvciB3aXRoIEZBVEFMIG9yIExPRyBk ZXBlbmRpbmcgb24KKyAqIHdoZXRoZXIgJ2lzU2VydmVyU3RhcnQnIGlzIHRydWUuCisgKi8K K3N0YXRpYyBjaGFyICoKK2NhbGN1bGF0ZV9jZXJ0aWZpY2F0ZV9oYXNoKFg1MDkgKmNlcnQs IHNpemVfdCAqbGVuLCBib29sIGlzU2VydmVyU3RhcnQpCit7CisjaWZkZWYgSEFWRV9YNTA5 X0dFVF9TSUdOQVRVUkVfTklECiAJY2hhcgkgICAqY2VydF9oYXNoOwogCWNvbnN0IEVWUF9N RCAqYWxnb190eXBlID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyIGhhc2hbRVZQX01BWF9NRF9T SVpFXTsJLyogc2l6ZSBmb3IgU0hBLTUxMiAqLwpAQCAtMTQ0MSwxNyArMTUwMCwxOCBAQCBi ZV90bHNfZ2V0X2NlcnRpZmljYXRlX2hhc2goUG9ydCAqcG9ydCwgc2l6ZV90ICpsZW4pCiAJ aW50CQkJYWxnb19uaWQ7CiAKIAkqbGVuID0gMDsKLQlzZXJ2ZXJfY2VydCA9IFNTTF9nZXRf Y2VydGlmaWNhdGUocG9ydC0+c3NsKTsKLQlpZiAoc2VydmVyX2NlcnQgPT0gTlVMTCkKLQkJ cmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEdldCB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobSBv ZiB0aGUgY2VydGlmaWNhdGUgdG8gZGV0ZXJtaW5lIHRoZSBoYXNoCiAJICogYWxnb3JpdGht IHRvIHVzZSBmb3IgdGhlIHJlc3VsdC4KIAkgKi8KLQlpZiAoIU9CSl9maW5kX3NpZ2lkX2Fs Z3MoWDUwOV9nZXRfc2lnbmF0dXJlX25pZChzZXJ2ZXJfY2VydCksCi0JCQkJCQkJICZhbGdv X25pZCwgTlVMTCkpCi0JCWVsb2coRVJST1IsICJjb3VsZCBub3QgZGV0ZXJtaW5lIHNlcnZl ciBjZXJ0aWZpY2F0ZSBzaWduYXR1cmUgYWxnb3JpdGhtIik7CisJaWYgKE9CSl9maW5kX3Np Z2lkX2FsZ3MoWDUwOV9nZXRfc2lnbmF0dXJlX25pZChjZXJ0KSwKKwkJCQkJCQkmYWxnb19u aWQsIE5VTEwpID09IDApCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJjaGFu bmVsIGJpbmRpbmcgaXMgZGlzYWJsZWQ7IHNlcnZlciBjZXJ0aWZpY2F0ZSBoYXMgdW5rbm93 biBzaWduYXR1cmUgYWxnb3JpdGhtIikpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCiAJLyoK IAkgKiBUaGUgVExTIHNlcnZlcidzIGNlcnRpZmljYXRlIGJ5dGVzIG5lZWQgdG8gYmUgaGFz aGVkIHdpdGggU0hBLTI1NiBpZgpAQCAtMTQ2MSw2ICsxNTIxLDEwIEBAIGJlX3Rsc19nZXRf Y2VydGlmaWNhdGVfaGFzaChQb3J0ICpwb3J0LCBzaXplX3QgKmxlbikKIAkgKi8KIAlzd2l0 Y2ggKGFsZ29fbmlkKQogCXsKKwkJY2FzZSBOSURfdW5kZWY6CisJCQllcmVwb3J0KExPRywK KwkJCQkJKGVycm1zZygiY2hhbm5lbCBiaW5kaW5nIGlzIGRpc2FibGVkOyBzZXJ2ZXIgY2Vy dGlmaWNhdGUgZG9lcyBub3QgdW5hbWJpZ3VvdXNseSBzcGVjaWZ5IGEgc2lnbmF0dXJlIGFs Z29yaXRobSIpKSk7CisJCQlyZXR1cm4gTlVMTDsKIAkJY2FzZSBOSURfbWQ1OgogCQljYXNl IE5JRF9zaGExOgogCQkJYWxnb190eXBlID0gRVZQX3NoYTI1NigpOwpAQCAtMTQ2OCwyMiAr MTUzMiwzNCBAQCBiZV90bHNfZ2V0X2NlcnRpZmljYXRlX2hhc2goUG9ydCAqcG9ydCwgc2l6 ZV90ICpsZW4pCiAJCWRlZmF1bHQ6CiAJCQlhbGdvX3R5cGUgPSBFVlBfZ2V0X2RpZ2VzdGJ5 bmlkKGFsZ29fbmlkKTsKIAkJCWlmIChhbGdvX3R5cGUgPT0gTlVMTCkKLQkJCQllbG9nKEVS Uk9SLCAiY291bGQgbm90IGZpbmQgZGlnZXN0IGZvciBOSUQgJXMiLAotCQkJCQkgT0JKX25p ZDJzbihhbGdvX25pZCkpOworCQkJeworCQkJCWVyZXBvcnQoaXNTZXJ2ZXJTdGFydCA/IEZB VEFMIDogTE9HLAorCQkJCQkJZXJybXNnKCJjb3VsZCBub3QgZmluZCBkaWdlc3QgZm9yIE5J RCAlcyIsCisJCQkJCQkJICAgT0JKX25pZDJzbihhbGdvX25pZCkpKTsKKwkJCQlyZXR1cm4g TlVMTDsKKwkJCX0KIAkJCWJyZWFrOwogCX0KIAogCS8qIGdlbmVyYXRlIGFuZCBzYXZlIHRo ZSBjZXJ0aWZpY2F0ZSBoYXNoICovCi0JaWYgKCFYNTA5X2RpZ2VzdChzZXJ2ZXJfY2VydCwg YWxnb190eXBlLCBoYXNoLCAmaGFzaF9zaXplKSkKLQkJZWxvZyhFUlJPUiwgImNvdWxkIG5v dCBnZW5lcmF0ZSBzZXJ2ZXIgY2VydGlmaWNhdGUgaGFzaCIpOworCWlmICghWDUwOV9kaWdl c3QoY2VydCwgYWxnb190eXBlLCBoYXNoLCAmaGFzaF9zaXplKSkKKwl7CisJCWVyZXBvcnQo aXNTZXJ2ZXJTdGFydCA/IEZBVEFMIDogTE9HLAorCQkJCShlcnJtc2coImNoYW5uZWwgYmlu ZGluZyBpcyBkaXNhYmxlZDsgY291bGQgbm90IGdlbmVyYXRlIHNlcnZlciBjZXJ0aWZpY2F0 ZSBoYXNoIikpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCUFzc2VydChoYXNoX3NpemUgPD0g c2l6ZW9mKGhhc2gpKTsKIAogCWNlcnRfaGFzaCA9IHBhbGxvYyhoYXNoX3NpemUpOwogCW1l bWNweShjZXJ0X2hhc2gsIGhhc2gsIGhhc2hfc2l6ZSk7CiAJKmxlbiA9IGhhc2hfc2l6ZTsK IAogCXJldHVybiBjZXJ0X2hhc2g7Ci19CisjZWxzZQorCSpsZW4gPSAwOworCXJldHVybiBO VUxMOwogI2VuZGlmCit9CiAKIC8qCiAgKiBDb252ZXJ0IGFuIFg1MDkgc3ViamVjdCBuYW1l IHRvIGEgY3N0cmluZy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2JlLXNlY3Vy ZS5jIGIvc3JjL2JhY2tlbmQvbGlicHEvYmUtc2VjdXJlLmMKaW5kZXggYTBmNzA4NDAxODMu LjhjOTkxMDk5Nzg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUu YworKysgYi9zcmMvYmFja2VuZC9saWJwcS9iZS1zZWN1cmUuYwpAQCAtNDcsNiArNDcsNyBA QCBib29sCQlzc2xfcGFzc3BocmFzZV9jb21tYW5kX3N1cHBvcnRzX3JlbG9hZDsKIAogI2lm ZGVmIFVTRV9TU0wKIGJvb2wJCXNzbF9sb2FkZWRfdmVyaWZ5X2xvY2F0aW9ucyA9IGZhbHNl OworY2hhcgkgICAqc3NsX2NlcnRfaGFzaCA9IE5VTEw7CiAjZW5kaWYKIAogLyogR1VDIHZh cmlhYmxlIGNvbnRyb2xsaW5nIFNTTCBjaXBoZXIgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJl LmgKaW5kZXggOGM3MGIyZmQ1YmUuLmRkYTI5OWEyNDFmIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9saWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJl LmgKQEAgLTMwMywxNSArMzAzLDEwIEBAIGV4dGVybiB2b2lkIGJlX3Rsc19nZXRfcGVlcl9z ZXJpYWwoUG9ydCAqcG9ydCwgY2hhciAqcHRyLCBzaXplX3QgbGVuKTsKICAqIHRscy1zZXJ2 ZXItZW5kLXBvaW50LgogICoKICAqIFRoZSByZXN1bHQgaXMgYSBwYWxsb2MnZCBoYXNoIG9m IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgd2l0aCBpdHMKLSAqIHNpemUsIGFuZCBOVUxMIGlm IHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGF2YWlsYWJsZS4KLSAqCi0gKiBUaGlzIGlzIG5v dCBzdXBwb3J0ZWQgd2l0aCBvbGQgdmVyc2lvbnMgb2YgT3BlblNTTCB0aGF0IGRvbid0IGhh dmUKLSAqIHRoZSBYNTA5X2dldF9zaWduYXR1cmVfbmlkKCkgZnVuY3Rpb24uCisgKiBzaXpl LCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGF2YWlsYWJsZSBvciB3ZSBj b3VsZCBub3QKKyAqIHVuYW1iaWd1b3VzbHkgY2FsY3VsYXRlIGEgaGFzaCBmb3IgaXQuCiAg Ki8KLSNpZiBkZWZpbmVkKFVTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfWDUwOV9HRVRf U0lHTkFUVVJFX05JRCkKLSNkZWZpbmUgSEFWRV9CRV9UTFNfR0VUX0NFUlRJRklDQVRFX0hB U0gKIGV4dGVybiBjaGFyICpiZV90bHNfZ2V0X2NlcnRpZmljYXRlX2hhc2goUG9ydCAqcG9y dCwgc2l6ZV90ICpsZW4pOwotI2VuZGlmCiAKIC8qIGluaXQgaG9vayBmb3IgU1NMLCB0aGUg ZGVmYXVsdCBzZXRzIHRoZSBwYXNzd29yZCBjYWxsYmFjayBpZiBhcHByb3ByaWF0ZSAqLwog I2lmZGVmIFVTRV9PUEVOU1NMCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1hdXRoLXNjcmFtLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMK aW5kZXggOWM0MmVhNGY4MTkuLmZjMGE1Y2QyNjRhIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLXNjcmFtLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtYXV0aC1zY3JhbS5jCkBAIC00ODcsNyArNDg3LDIyIEBAIGJ1aWxkX2NsaWVudF9maW5h bF9tZXNzYWdlKGZlX3NjcmFtX3N0YXRlICpzdGF0ZSkKIAkJCQkJCQkJCQkJJmNiaW5kX2Rh dGFfbGVuKTsKIAkJaWYgKGNiaW5kX2RhdGEgPT0gTlVMTCkKIAkJewotCQkJLyogZXJyb3Ig bWVzc2FnZSBpcyBhbHJlYWR5IHNldCBvbiBlcnJvciAqLworCQkJLyoKKwkJCSAqIENvdWxk IG5vdCBjYWxjdWxhdGUgaGFzaCBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuICBFcnJv cgorCQkJICogbWVzc2FnZSBpcyBhbHJlYWR5IHNldCBieSBwZ3Rsc19nZXRfcGVlcl9jZXJ0 aWZpY2F0ZV9oYXNoKCkuCisJCQkgKgorCQkJICogVGhpcyBpcyBrbm93biB0byBoYXBwZW4g d2l0aCBjZXJ0aWZpY2F0ZXMgdXNpbmcgJ3JzYXNzYVBzcycsCisJCQkgKiAnRUQyNTUxOScg YW5kICdFRDQ0OCcgc2lnbmF0dXJlcywgYmVjYXVzZSB0aGV5IGRvbid0IHNwZWNpZnkgYW4K KwkJCSAqIHVuYW1iaWd1b3VzIGRpZ2VzdCBhbGdvcml0aG0gdG8gdXNlLiAgVGhlIHNlcnZl ciBzaG91bGQgbm90CisJCQkgKiBvZmZlciBQTFVTLXZhcmlhbnRzIHdpdGggc3VjaCBjZXJ0 aWZpY2F0ZXMsIGJ1dCBvbGRlciB2ZXJzaW9ucworCQkJICogaW5jb3JyZWN0bHkgZGlkLiAg SWYgY2hhbm5lbCBiaW5kaW5nIGlzIHJlcXVpcmVkLCB3ZSBuYXR1cmFsbHkKKwkJCSAqIG11 c3QgZmFpbCwgYnV0IGV2ZW4gaWYgY2hhbm5lbCBiaW5kaW5nIGlzIG1lcmVseSBwcmVmZXJy ZWQsIHdlCisJCQkgKiBjYW5ub3Qgc2FmZWx5IGZhbGwgYmFjayB0byBkaXNhYmxpbmcgY2hh bm5lbCBiaW5kaW5nLCBiZWNhdXNlCisJCQkgKiB0aGF0IGNvdWxkIGxlYWQgdG8gYSBkb3du Z3JhZGUgYXR0YWNrOiBBIG1hbi1pbi10aGUtbWlkZGxlCisJCQkgKiBjb3VsZCBpbnRlbnRp b25hbGx5IG9mZmVyIHVzIGEgY2VydGlmaWNhdGUgd2l0aCBhbiB1bnJlY29nbml6ZWQKKwkJ CSAqIHNpZ25hdHVyZSBhbGdvcml0aG0sIHRvIGZvcmNlIHRoZSBjbGllbnQgdG8gZGlzYWJs ZSBjaGFubmVsCisJCQkgKiBiaW5kaW5nLgorCQkJICovCiAJCQl0ZXJtUFFFeHBCdWZmZXIo JmJ1Zik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtc2VjdXJlLW9wZW5zc2wuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LXNlY3VyZS1vcGVuc3NsLmMKaW5kZXggOTgzNTM2ZGUyNTEuLjk2MTY4YThiZDdlIDEwMDY0 NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUtb3BlbnNzbC5jCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLXNlY3VyZS1vcGVuc3NsLmMKQEAgLTM4OSw3ICsz ODksNyBAQCBwZ3Rsc19nZXRfcGVlcl9jZXJ0aWZpY2F0ZV9oYXNoKFBHY29ubiAqY29ubiwg c2l6ZV90ICpsZW4pCiAJaWYgKCFPQkpfZmluZF9zaWdpZF9hbGdzKFg1MDlfZ2V0X3NpZ25h dHVyZV9uaWQocGVlcl9jZXJ0KSwKIAkJCQkJCQkgJmFsZ29fbmlkLCBOVUxMKSkKIAl7Ci0J CWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJjb3VsZCBub3QgZGV0ZXJtaW5lIHNl cnZlciBjZXJ0aWZpY2F0ZSBzaWduYXR1cmUgYWxnb3JpdGhtIik7CisJCWxpYnBxX2FwcGVu ZF9jb25uX2Vycm9yKGNvbm4sICJjb3VsZCBub3QgZGV0ZXJtaW5lIHNpZ25hdHVyZSBhbGdv cml0aG0gdG8gdXNlIHdpdGggc2VydmVyJ3MgY2VydGlmaWNhdGU7IGNoYW5uZWwgYmluZGlu ZyBub3QgcG9zc2libGUiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MDEsNiArNDAx LDkgQEAgcGd0bHNfZ2V0X3BlZXJfY2VydGlmaWNhdGVfaGFzaChQR2Nvbm4gKmNvbm4sIHNp emVfdCAqbGVuKQogCSAqLwogCXN3aXRjaCAoYWxnb19uaWQpCiAJeworCQljYXNlIE5JRF91 bmRlZjoKKwkJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJjb3VsZCBub3QgZGV0 ZXJtaW5lIHNpZ25hdHVyZSBhbGdvcml0aG0gdG8gdXNlIHdpdGggc2VydmVyJ3MgY2VydGlm aWNhdGU7IGNoYW5uZWwgYmluZGluZyBub3QgcG9zc2libGUiKTsKKwkJCXJldHVybiBOVUxM OwogCQljYXNlIE5JRF9tZDU6CiAJCWNhc2UgTklEX3NoYTE6CiAJCQlhbGdvX3R5cGUgPSBF VlBfc2hhMjU2KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zc2wvY29uZi9zZXJ2ZXItcnNh cHNzLmNvbmZpZyBiL3NyYy90ZXN0L3NzbC9jb25mL3NlcnZlci1yc2Fwc3MuY29uZmlnCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNDcwMWJkYjM2YgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3NzbC9jb25mL3NlcnZlci1yc2Fwc3MuY29uZmln CkBAIC0wLDAgKzEsMTQgQEAKKyMgQW4gT3BlblNTTCBmb3JtYXQgQ1NSIGNvbmZpZyBmaWxl IGZvciBjcmVhdGluZyBhIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMKKyMgVGhpcyBpcyBpZGVu dGljYWwgdG8gc2VydmVyLWNuLW9ubHkgY2VydGlmaWNhdGUsIGJ1dCB3ZSBzcGVjaWZ5Cisj IFJTQS1QU1MgYXMgdGhlIGFsZ29yaXRobSBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitbIHJl cSBdCitkaXN0aW5ndWlzaGVkX25hbWUgICAgID0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQor cHJvbXB0ICAgICAgICAgICAgICAgICA9IG5vCisKK1sgcmVxX2Rpc3Rpbmd1aXNoZWRfbmFt ZSBdCitDTiA9IGNvbW1vbi1uYW1lLnBnLXNzbHRlc3QudGVzdAorT1UgPSBQb3N0Z3JlU1FM IHRlc3Qgc3VpdGUKKworIyBObyBTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWVzCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9zc2wvc3NsL3NlcnZlci1yc2Fwc3MuY3J0IGIvc3JjL3Rlc3Qvc3Ns L3NzbC9zZXJ2ZXItcnNhcHNzLmNydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYmVmMjlhZGIxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zc2wv c3NsL3NlcnZlci1yc2Fwc3MuY3J0CkBAIC0wLDAgKzEsMjEgQEAKKy0tLS0tQkVHSU4gQ0VS VElGSUNBVEUtLS0tLQorTUlJRGN6Q0NBaW9DRkI2cDNZcVI4M0RWTW42d1RQMUFJOUUzYWtz d01ENEdDU3FHU0liM0RRRUJDakF4b0EwdworQ3dZSllJWklBV1VEQkFJQm9Sb3dHQVlKS29a SWh2Y05BUUVJTUFzR0NXQ0dTQUZsQXdRQ0FhSUVBZ0lBM2pCRworTVNRd0lnWURWUVFEREJ0 amIyMXRiMjR0Ym1GdFpTNXdaeTF6YzJ4MFpYTjBMblJsYzNReEhqQWNCZ05WQkFzTQorRlZC dmMzUm5jbVZUVVV3Z2RHVnpkQ0J6ZFdsMFpUQWVGdzB5TXpBeU1EZ3hOREl6TXpSYUZ3MHlN ekF6TVRBeAorTkRJek16UmFNRVl4SkRBaUJnTlZCQU1NRzJOdmJXMXZiaTF1WVcxbExuQm5M WE56YkhSbGMzUXVkR1Z6ZERFZQorTUJ3R0ExVUVDd3dWVUc5emRHZHlaVk5SVENCMFpYTjBJ SE4xYVhSbE1JSUJJREFMQmdrcWhraUc5dzBCQVFvRAorZ2dFUEFEQ0NBUW9DZ2dFQkFMYW9S cGNlMGx6a1JLRVJxNGNVQU5Fb2lWdE9QZktuRzRuNGNpZk1KWXRvK0RsRQorVElCNVBmZU5l dUxvTGRLbm9oWWxJQ1FETHVWN1czcjkzTW9pbVo4dGJZdDc4T1EwNkcvNnF0eWM2RmpsR1RL UAorNitVTFY4QVZCYmhjeVFQdEtocHpxK1diWC82THo0aFZ0bXMvYWVFbEI2MFpiQXM2d3pT dDhYQlRtZmpuT3J0eQorNXcvazIvKy9YMER6UkUxYVlUblZsRlRsVnl1RjFUaDdQc20xRU9m dkFkamJWTENzbzRUdHBzaXhxMElMYXJBbQoreFFmYzVjTzYvZFhSRHNqQ25seSs1Q1ZOV1lD RTErQUI0RzlOdmtsT1JMQXBrZGM0VUJqeEZwRE9vaDVwTkhaYQorb2ZFeFV0aGJHd3lVZllP d0dEUFRQTlllWVZzaFVabEF2Z1RKSXJNQ0F3RUFBVEErQmdrcWhraUc5dzBCQVFvdworTWFB Tk1Bc0dDV0NHU0FGbEF3UUNBYUVhTUJnR0NTcUdTSWIzRFFFQkNEQUxCZ2xnaGtnQlpRTUVB Z0dpQkFJQworQU40RGdnRUJBSXlUR01qNVorUmwvbGh2UGtMTTVUQXRsL3BHUDIzd0hhNmhz ZitTcGd3UEdGUWU1cUM1VGJyZAorK3cvNUtLNW1oNDArUU1XR05vK2thREdKWTNOK1dWNjlW azRhTXZLdnhWSUdnSDVpdHd2QkUvZW1ZRlRoYk1tdworc0dsVzlmMzMrRWRiMnBFQUVHRWVi L0FjZXNDWUNGMHRwdHlEMUZwaEdWSmFWRnhvOXV3d0kwUjN0L09nb2s1SAorNTc2V0h6Nkw1 Ni9CcXg1cXBGKzZoM2NTRG9tM3VHUzBCWUpsS0J1REczRjg5Z05TQnNpeGhmUEhhSVp4eStK YworeDVUZWRwMXNBcXZ4T1ExbGV6OUxNUHhkWUFvM1F1Ync3YzhIN2J6eWF1aVpuVHQweHVU d09QSkdGeHdwNUxNTgorNytLWXd5QXpzSGFnbEMvMXlTUEhBZnNnMFhrcTRRMD0KKy0tLS0t RU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9zc2wvc2Vy dmVyLXJzYXBzcy5rZXkgYi9zcmMvdGVzdC9zc2wvc3NsL3NlcnZlci1yc2Fwc3Mua2V5Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MWExZGNlYmQzMwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3NzbC9zc2wvc2VydmVyLXJzYXBzcy5rZXkKQEAg LTAsMCArMSwyOCBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlFdmdJQkFE QUxCZ2txaGtpRzl3MEJBUW9FZ2dTcU1JSUVwZ0lCQUFLQ0FRRUF0cWhHbHg3U1hPUkVvUkdy CitoeFFBMFNpSlcwNDk4cWNiaWZoeUo4d2xpMmo0T1VSTWdIazk5NDE2NHVndDBxZWlGaVVn SkFNdTVYdGJldjNjCit5aUtabnkxdGkzdnc1RFRvYi9xcTNKem9XT1VaTW8vcjVRdFh3QlVG dUZ6SkErMHFHbk9yNVp0Zi9vdlBpRlcyCithejlwNFNVSHJSbHNDenJETkszeGNGT1orT2M2 dTNMbkQrVGIvNzlmUVBORVRWcGhPZFdVVk9WWEs0WFZPSHMrCit5YlVRNSs4QjJOdFVzS3lq aE8ybXlMR3JRZ3Rxc0NiRkI5emx3N3I5MWRFT3lNS2VYTDdrSlUxWmdJVFg0QUhnCitiMDIr U1U1RXNDbVIxemhRR1BFV2tNNmlIbWswZGxxaDhURlMyRnNiREpSOWc3QVlNOU04MWg1aFd5 RlJtVUMrCitCTWtpc3dJREFRQUJBb0lCQVFDQTRoM2xGZjl6UWpKV3dLUWFqUGZDbmVyRnZX Q2lybDBWTG5SR05wc3JVbWNMCis2WEJkbXE4cDFPK24yaEl6T010NitybENEK2p3VGVtUDBE OFJkZmFWeGJVdEhjZ3REbFFRWjN4V2JIVFovTldaCit3c205ZFJKMjI1Nk1weFBEckgzdjZq eVpwOWZGUVp1dlpHTnlLMjJuU3J5dTNHaExTQ3hqS0hWYlAvSStHS0UzCitYVXFOOGNvQzl3 MEl6bmxVUnp4T0N0TjFNUWZmN1pBcmlYUnRBTVgwYVdTemRrdy9oMk1rV3NXR3lCNlpwZXZB CitpV0txR1N6QnVRaXJZY3d2azNOZTZJcU9VODNRUmJMTzRPN3kySUJpd0V6K0JEQjFsMC9v SVYzbXd4Mis0cUxKCis4SGxGZUFoUG9DWUZEL1UzdytaZVFIZXZVOFk2K2xGdDZZcWNHWGZa QW9HQkFOd1A2KzRnUWtPK2ZSZzEzbmNkCis3cGxXdWViZUVpL0daTnBJazM2LytVMTRaODhz WjBhcEI4c3pta1lyZWJEdzFhREFzTWRnMzEzTGxSUWRianpTCis5cTNYd3g2WnNvMENHRStx WjUzQkJ5SW1JY3BjT3F5dXk2WFNqZDZidUFLMW1JR3RVT3ZNRVFBaENLYUt6R1pICittQVNO NmFRYXpFUFArYkxMNDNHaFRVLzlBb0dCQU5SOGxGSHhNRmYwdVVYMEY5UTB5eGNtVUdrVzJi bUhRWFFsCitqblNDR2R2TVp6aTIxVkxONE1qb0xuS1VzZm82M1RIRlowSXNoTmVaYmNNZkE4 d3RzMjZjUHdKUEUvRVVwcHdKCitPa2RhdHA0emIwUG01clJ1ZGhucE12TkVMTmpJeEtTUTFH cGYzZVh2cGVnRTk3bnNBcEF2TzdOekVBMHlmTko5CitoTzdkcVlSdkFvR0JBTTJhZHBVcVFK OG9wNW5xSXFycUpWWFF5S25pQzkzbEg2OHVKZGhEcHJweDU1T1I2Z0FECit4MHRjTUNTbFUv STBZWFBxOUgramk2NEhtb2FMcE1aaFdLWTlzNGl3a3pqWm56czNlODNSWGtmU2xybUppQ3gw Cit0OEo3UVorZG44T3dSUWZMbFpKcE8rMEI4Q0lpQml6OWNSTzRQM1hhcjhRZjJTenEvOXJY bVBORkFvR0JBTGx1CitIbUdFQVpSQVZJN2ZmUXdMSmxDRmR4YStnaktOL21qRmZaUGZGWUhp MXhGL1BKcU9YK1B6K3RTelByNElNSkFHCituUjM2aTlNNmFiY2xrY0xVL3dsQUFSeWF0ZVJs Q1NDU1RQR0lFR1h1ck9LczFoZ1BiYkVlK1AraU55RFgxQU5wCitBSFgwUTBrdDRiS2c0eTYw NzJlMFVIMUJwSGhmM3Q0eCs1Z1lpSjZ4QW9HQkFKZEQwR3hMcGUzQXlHNTc3T282Cit4MzBX MC9sNEE0ZlBQa2RSQSs5enVrdDlZYmdzL0tub0h6eWRCQXFidU5CbGo5RHpxUnVYbFpBK3pr dEpkeVkxCitIQzJvUThxZW03SGJ6YkQxMHdMTU41NlZaV0VvaGhFZ3c1QTRFV2RJY3dZUktt SUFsaUdUd3l1SitUUTR3bDB4CisrQVZuNU1hMlF6eFR2VTFScncwb2swdzUKKy0tLS0tRU5E IFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9zc2xmaWxlcy5t ayBiL3NyYy90ZXN0L3NzbC9zc2xmaWxlcy5tawppbmRleCA1ZDlkYzA5YTRiMC4uYTU2NWU5 MGU0ZjEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3NzbC9zc2xmaWxlcy5taworKysgYi9zcmMv dGVzdC9zc2wvc3NsZmlsZXMubWsKQEAgLTM3LDEzICszNywxNyBAQCBDTElFTlRTIDo9IGNs aWVudCBjbGllbnQtZG4gY2xpZW50LXJldm9rZWQgY2xpZW50X2V4dCBjbGllbnQtbG9uZyBc CiAJY2xpZW50LXJldm9rZWQtdXRmOAogCiAjCi0jIFRvIGFkZCBhIG5ldyBub24tc3RhbmRh cmQga2V5LCBhZGQgaXQgdG8gU1BFQ0lBTF9LRVlTIGFuZCB0aGVuIGFkZCBhIHJlY2lwZQot IyBmb3IgY3JlYXRpbmcgaXQgdG8gdGhlICJTcGVjaWFsLWNhc2Uga2V5cyIgc2VjdGlvbiBi ZWxvdy4KKyMgVG8gYWRkIGEgbmV3IG5vbi1zdGFuZGFyZCBjZXJ0aWZpY2F0ZSwgYWRkIGl0 IHRvIFNQRUNJQUxfQ0VSVFMgYW5kIHRoZW4gYWRkCisjIGEgcmVjaXBlIGZvciBjcmVhdGlu ZyBpdCB0byB0aGUgIlNwZWNpYWwtY2FzZSBjZXJ0aWZpY2F0ZXMiIHNlY3Rpb24gYmVsb3cu CiAjCitTUEVDSUFMX0NFUlRTIDo9IHNzbC9zZXJ2ZXItcnNhcHNzLmNydAorCisjIExpa2V3 aXNlIGZvciBub24tc3RhbmRhcmQga2V5cwogU1BFQ0lBTF9LRVlTIDo9IHNzbC9zZXJ2ZXIt cGFzc3dvcmQua2V5IFwKIAlzc2wvY2xpZW50LWRlci5rZXkgXAogCXNzbC9jbGllbnQtZW5j cnlwdGVkLXBlbS5rZXkgXAotCXNzbC9jbGllbnQtZW5jcnlwdGVkLWRlci5rZXkKKwlzc2wv Y2xpZW50LWVuY3J5cHRlZC1kZXIua2V5IFwKKwlzc2wvc2VydmVyLXJzYXBzcy5rZXkKIAog IwogIyBUaGVzZSBmaWxlcyBhcmUganVzdCBjb25jYXRlbmF0aW9ucyBvZiBvdGhlciBmaWxl cy4gWW91IGNhbiBhZGQgbmV3IG9uZXMgdG8KQEAgLTY2LDcgKzcwLDkgQEAgQ1JMUyA6PSBz c2wvcm9vdC5jcmwgXAogCXNzbC9jbGllbnQuY3JsIFwKIAlzc2wvc2VydmVyLmNybAogCi1T U0xGSUxFUyA6PSAkKFNUQU5EQVJEX0NFUlRTKSAkKFNUQU5EQVJEX0tFWVMpICQoU1BFQ0lB TF9LRVlTKSAkKENPTUJJTkFUSU9OUykgJChDUkxTKQorU1NMRklMRVMgOj0gJChTVEFOREFS RF9DRVJUUykgJChTVEFOREFSRF9LRVlTKSBcCisgICAgICAgICAgICAkKFNQRUNJQUxfQ0VS VFMpICQoU1BFQ0lBTF9LRVlTKSBcCisgICAgICAgICAgICAkKENPTUJJTkFUSU9OUykgJChD UkxTKQogU1NMRElSUyA6PSBzc2wvY2xpZW50LWNybGRpciBcCiAJc3NsL3NlcnZlci1jcmxk aXIgXAogCXNzbC9yb290K2NsaWVudC1jcmxkaXIgXApAQCAtODYsNiArOTIsMTAgQEAgc3Ns ZmlsZXM6ICQoU1NMRklMRVMpICQoU1NMRElSUykKIHNzbC9yb290X2NhLmNydDogc3NsL3Jv b3RfY2Eua2V5IGNvbmYvcm9vdF9jYS5jb25maWcKIAkkKE9QRU5TU0wpIHJlcSAtbmV3IC14 NTA5IC1jb25maWcgY29uZi9yb290X2NhLmNvbmZpZyAtZGF5cyAxMDAwMCAta2V5ICQ8IC1v dXQgJEAKIAorIyBDZXJ0aWZpY2F0ZSB1c2luZyBSU0EtUFNTIGFsZ29yaXRobS4gQWxzbyBz ZWxmLXNpZ25lZC4KK3NzbC9zZXJ2ZXItcnNhcHNzLmNydDogc3NsL3NlcnZlci1yc2Fwc3Mu a2V5IGNvbmYvc2VydmVyLXJzYXBzcy5jb25maWcKKwkkKE9QRU5TU0wpIHJlcSAtbmV3IC14 NTA5IC1jb25maWcgY29uZi9zZXJ2ZXItcnNhcHNzLmNvbmZpZyAta2V5ICQ8IC1vdXQgJEAK KwogIwogIyBTcGVjaWFsLWNhc2Uga2V5cwogIwpAQCAtOTYsNiArMTA2LDEwIEBAIHNzbC9y b290X2NhLmNydDogc3NsL3Jvb3RfY2Eua2V5IGNvbmYvcm9vdF9jYS5jb25maWcKIHNzbC9z ZXJ2ZXItcGFzc3dvcmQua2V5OiBzc2wvc2VydmVyLWNuLW9ubHkua2V5CiAJJChPUEVOU1NM KSByc2EgLWFlczI1NiAtaW4gJDwgLW91dCAkQCAtcGFzc291dCAncGFzczpzZWNyZXQxJwog CisjIEtleSB0aGF0IHVzZXMgdGhlIFJTQS1QU1MgYWxnb3JpdGhtCitzc2wvc2VydmVyLXJz YXBzcy5rZXk6CisJJChPUEVOU1NMKSBnZW5wa2V5IC1hbGdvcml0aG0gcnNhLXBzcyAtb3V0 ICRACisKICMgREVSLWVuY29kZWQgdmVyc2lvbiBvZiBjbGllbnQua2V5CiBzc2wvY2xpZW50 LWRlci5rZXk6IHNzbC9jbGllbnQua2V5CiAJJChPUEVOU1NMKSByc2EgLWluICQ8IC1vdXRm b3JtIERFUiAtb3V0ICRACmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zc2wvdC8wMDJfc2NyYW0u cGwgYi9zcmMvdGVzdC9zc2wvdC8wMDJfc2NyYW0ucGwKaW5kZXggMGYzZDE4MGNmYTkuLmEx NGZhM2NiMDliIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zc2wvdC8wMDJfc2NyYW0ucGwKKysr IGIvc3JjL3Rlc3Qvc3NsL3QvMDAyX3NjcmFtLnBsCkBAIC0xMzYsNCArMTM2LDE4IEBAICRu b2RlLT5jb25uZWN0X29rKAogCQlxci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0ZWQ6IGlkZW50 aXR5PSJzc2x0ZXN0dXNlciIgbWV0aG9kPXNjcmFtLXNoYS0yNTYvCiAJXSk7CiAKKyMgTm93 IHRlc3Qgd2l0aCBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB0aGF0IHVzZXMgdGhlIFJTQS1QU1Mg YWxnb3JpdGhtLiAgSXQKKyMgY2Fubm90IGJlIHVzZWQgZm9yIGNoYW5uZWwgYmluZGluZyBj dXJyZW50bHksIGJ1dCBjaGVjayB0aGF0IGNvbm5lY3RpbmcKKyMgd2l0aG91dCBjaGFubmVs IGJpbmRpbmcgaXMgc3RpbGwgcG9zc2libGUuIChzZWUgYnVnICMxNzc2MCkKK3N3aXRjaF9z ZXJ2ZXJfY2VydCgkbm9kZSwgY2VydGZpbGUgPT4gJ3NlcnZlci1yc2Fwc3MnKTsKKyRub2Rl LT5jb25uZWN0X2ZhaWxzKAorCSIkY29tbW9uX2Nvbm5zdHIgdXNlcj1zc2x0ZXN0dXNlciBj aGFubmVsX2JpbmRpbmc9cmVxdWlyZSIsCisJIlNDUkFNIHdpdGggU1NMIGFuZCBjaGFubmVs X2JpbmRpbmc9cmVxdWlyZSwgc2VydmVyIGNlcnRpZmljYXRlIHVzZXMgJ3JzYXNzYVBzcyci LAorCWV4cGVjdGVkX3N0ZGVyciA9PgorCSAgcXIvY2hhbm5lbCBiaW5kaW5nIGlzIHJlcXVp cmVkLCBidXQgc2VydmVyIGRpZCBub3Qgb2ZmZXIgYW4gYXV0aGVudGljYXRpb24gbWV0aG9k IHRoYXQgc3VwcG9ydHMgY2hhbm5lbCBiaW5kaW5nLworICApOworJG5vZGUtPmNvbm5lY3Rf b2soCisJIiRjb21tb25fY29ubnN0ciB1c2VyPXNzbHRlc3R1c2VyIGNoYW5uZWxfYmluZGlu Zz1wcmVmZXIiLAorCSJTQ1JBTSB3aXRoIFNTTCBhbmQgY2hhbm5lbF9iaW5kaW5nPXByZWZl ciwgc2VydmVyIGNlcnRpZmljYXRlIHVzZXMgJ3JzYXNzYVBzcyciKTsKKwogZG9uZV90ZXN0 aW5nKCk7Ci0tIAoyLjMwLjIKCg== --------------43Ico1G1Di5MBpZOOCS0raC5--