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.96) (envelope-from ) id 1w5DIO-0030zi-2z for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 01:44:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5DIN-00AFDr-0M for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 01:44:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w5DIM-00AFDj-2H for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 01:44:31 +0000 Received: from mail-ot1-x329.google.com ([2607:f8b0:4864:20::329]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5DIK-00000000ykl-0i4A for pgsql-hackers@postgresql.org; Wed, 25 Mar 2026 01:44:30 +0000 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-7d91f82d819so1672975a34.1 for ; Tue, 24 Mar 2026 18:44:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774403066; cv=none; d=google.com; s=arc-20240605; b=jWfjJhw32v5d0/4BbjtxlWBqTcQPN5HhdxtHwLyx6RAHXkfC8wLcACcQ2CaPncaaAi BLUOt/G7uHDj7L2DHO2PhVxPd31+4z7Dlj6M4gvXueV73MwETtIsyzdt2FbgC4wY66rW IJGEUr792Qyh8FjwJmn/mUmYCSvTKEuUdCgLNByxIGbQ1RlmQEb6GlfcZMu2aABBN7Yg kRq4VcK2UBa5p8JJIkZDciXal9/T4Lxa1fMZClr9/VZY1wEfSXXWXlrXKoHxfQN284bz jiaTz8bLNNlF8PLZ+QJDw7hXVXxcz69Vep7puVGudTdFWkB0Ib1b/r55Epql3KRUyKeA xwUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=7qFwE6JspjviomszOg5q8rzys+FANiXN63v7e9WDnHI=; fh=RfrkJab44jNT7RraF/sJO97r9/nkUL0AAgzmC7PBS2w=; b=kpkKUtjxy2TxVe3i1ItyUoMkytTcwgyiALW33ZyRJ8sKKmDX5NgO5Py5hw+P6eMuv+ eM3rF1znuCcwwH0duih/p7TQsIH/zx2dWS1M8o5lqHUrp1aarikOXtElfs/OlswAX7hC X6obuXOEeKZyt+yWFvXh7PEhh0IH3fEmd9X+ZMI0iz80rcbbI/J03zzg8NEPvl0Yl7CD uzTtC9E5X6SdUQAmtXIvhCCki1OTmwj1gmhY3Km//5Bs+NE/m1RN/VDhT4mhvXX8BKKR vnAS/YeCngzZj4ZxGls03YybEYKsf3t7hnRN2l2/7eM5/0DC6glXi9mSKBOcFkZDQnPy VFmg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774403066; x=1775007866; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=7qFwE6JspjviomszOg5q8rzys+FANiXN63v7e9WDnHI=; b=bLrPSGU+VIAgFx++WkqdVzP1EcnRtzG+R2DgeYkQ+H8NXjwHQqwgusDuQ5ULtScVnt gAGXinIu8jWLfQnfb9/phehMssLn96C1SL9hyPzqfpXOkHWFYMvLh+PF28RRq94vjKuh /O0i49ZZiNlZSzj4IuAAlPim7bqkYJ4x0buGEW4PdUEtF5hD68DFrKphUhQzUi43OGFf 5XvGmfevU2OlylNCv5moNRNxuiFMhtPH8T0ZXE7zxVs3dRR5Q79u+coZczonLh066sHO qy+3bgvDx2tnoJ2+0gfA3VkoCIZ/BwxEsngI8kDdWZOBJuWY8/LYDyUHkhdl1eFGmmgq /QZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774403066; x=1775007866; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=7qFwE6JspjviomszOg5q8rzys+FANiXN63v7e9WDnHI=; b=V6ownWH8kBG8BA/zh7pMDLKJRkGH2+mPeykAa1eLauQ4d/1WlL0qOt99Dkj5xI1Vdz RiEsy7uQaj8q3dhXdklt9wsipirg+DHeH3W5YQEXLvuleRUvt3KkJgXTemFXNemwSLey eYuh/kMyuNfPgfd34Mt4Qwb0d0o932QlkV/SYeb7tXt5jEa1FUxgAeAUQqmo5ZeRPPsV z83MINfN3OivY2XPrPHBjpq7kjkFgRWFHPHUwU/GsjpPAD7DFGyM0jnplmzERbA1G83v J2vv6sdXplCPKk95W2wa2MTtVUH/M858oUW0Hus2LDkpXFanRXG+LDMPaR1WYsaAKrRX UKlw== X-Gm-Message-State: AOJu0YzTKSRWos/6Y/7CabB8rT1GlnWk1TpYL5rINCx6iu3RRt+yaXRv VZTTZ6RJejT0Ydo55xKHdqf7FPc3mfyu6dXkGzQFnk6letppw2vp6XqQ9MRdODMDGVaNGbI0JCQ 6M3lbJ73BWCnmv/2HkpozIlJ2OmfNXk2umruBzRI= X-Gm-Gg: ATEYQzwHJ4FDENIv/lm+azfQsSfHcZThYKlUMq7ksoeDQ8JtjRuQyhVmJyfMfwT4Jpu f17nrsjpQrJ+AUzZIU38mMu2HEOplbzZ9x06mLwJHHUe+4J0ZdEk9Uc6eTwQFtGDwR7ASnRDGa+ mRGDoSM5190L7ui6uwBy9j1xlIvSVezyx4OemU1BLUsRJvoWXKIr+NtkUpn8q/bxk2vD0PNHU20 8DUrTV6cz/Tg0j94pCMslnB79dvNFOFwglHlM5Vxp4E6EgFVwAhx9P6Pw8b61Y0/RfU8JhuU4kd 5JELujab3nWSKaFiqg== X-Received: by 2002:a4a:ee83:0:b0:67c:3125:5a1c with SMTP id 006d021491bc7-67dff5b1c28mr1033069eaf.70.1774403066154; Tue, 24 Mar 2026 18:44:26 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Andrew Jackson Date: Tue, 24 Mar 2026 20:43:49 -0500 X-Gm-Features: AaiRm51Dz6Ve9FB5JkfP3d6p2IRmxrIWfeQFQzYMxP_lAIC6wN81s_S13c9AeM8 Message-ID: Subject: Re: Add http connection service file functionality To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000734ca0064dcf682c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000734ca0064dcf682c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, Apologies, forgot to attach the past and the links to the references i made= . [0]: https://www.postgresql.org/docs/current/libpq-ldap.html [1]: https://www.postgresql.org/message-id/flat/CAKK5BkFOFGfKJNbTuYBvE0PfpH= mW8iZEmdNogaCYqjAOhtNgDg@mail.gmail.com [2]: https://www.postgresql.org/message-id/flat/CAKK5BkESSc69sp2TiTWHvvOHCU= ey0rDWXSrR9pinyRqyfamUYg@mail.gmail.com [3]: https://www.postgresql.org/message-id/AM9PR09MB49008B02CDF003054D5D4E0= 0977DA@AM9PR09MB4900.eurprd09.prod.outlook.com Thanks Andrew Jackson On Tue, Mar 24, 2026 at 8:13=E2=80=AFPM Andrew Jackson wrote: > > Hello, > > This patch adds an exported function to the libpq-oauth shared object > file that uses libcurl to look up connection service files > from an HTTP address instead of just on the local filesystem. > The goal here is to provide the ability for managed service > operators a single source of truth for connection details. > This enables a form of built-in libpq service discovery > format. This would allow administrators to add, remove, and > change hosts in multi host connection strings without > coordinating with every end user who may hardcode their > connection strings in a lot of different places. > > Currently libpq has functionality which accomplishes some of > the above by allowing entry of connection parameters into > LDAP servers[0], though this cannot be specified directly in > a connection string (though there is a patch that adds this > functionality [1]). Another potential issue here is that > setting up LDAP infrastructure is a lot less accessible to > many administrators than setting up an HTTP web server. > > The current state of this patch is very rough and is being > presented as more of a RFC than anything else. > Some obvious issues: > 1. Lots of duplicated logic between the parse_service_file_curl > and parseServiceFile. > 2. Bundling this functionality in with libpq-oauth.so seems odd. > It would probably make more sense to rename libpq-oauth.so to > libpq-oauth.so to libpq-libcurl.so or create an entirely new > .so file for this logic. > > Despite these shortcomings this approach may be a more natural > alternative to previous attempts [2, 3] at allowing administrators > to mix read-only/read-write nodes into overloaded A records. > > Would appreciate any feedback. > > Thanks, > Andrew Jackson --000000000000734ca0064dcf682c Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-http-connection-service-file-functionality.patch" Content-Disposition: attachment; filename="0001-Add-http-connection-service-file-functionality.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5dqxf10 RnJvbSBlOGFhZTA5NDA0NGY2NzBkZjZlNjU1ZWIyNjJkMzZmZTczY2ZiMjRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgSmFja3NvbiA8YW5kcmV3amFja3Nvbjk0N0BnbWFp bC5jb20+CkRhdGU6IFN1biwgMjMgTWFyIDIwMjUgMjI6MDM6NDUgLTA1MDAKU3ViamVjdDogW1BB VENIXSBBZGQgaHR0cCBjb25uZWN0aW9uIHNlcnZpY2UgZmlsZSBmdW5jdGlvbmFsaXR5CgpBZGRz IGFuIGV4cG9ydGVkIGZ1bmN0aW9uIHRvIHRoZSBsaWJwcS1vYXV0aCBzaGFyZWQgb2JqZWN0CmZp bGUgdGhhdCB1c2VzIGxpYmN1cmwgdG8gbG9vayB1cCBjb25uZWN0aW9uIHNlcnZpY2UgZmlsZXMK ZnJvbSBhbiBIVFRQIGFkZHJlc3MgaW5zdGVhZCBvZiBqdXN0IG9uIHRoZSBsb2NhbCBmaWxlc3lz dGVtLgpUaGUgZ29hbCBoZXJlIGlzIHRvIHByb3ZpZGUgdGhlIGFiaWxpdHkgZm9yIG1hbmFnZWQg c2VydmljZQpvcGVyYXRvcnMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBjb25uZWN0aW9u IGRldGFpbHMuClRoaXMgZW5hYmxlcyBhIGZvcm0gb2YgYnVpbHQtaW4gbGlicHEgc2VydmljZSBk aXNjb3ZlcnkKZm9ybWF0LiBUaGlzIHdvdWxkIGFsbG93IGFkbWluaXN0cmF0b3JzIHRvIGFkZCwg cmVtb3ZlLCBhbmQKY2hhbmdlIGhvc3RzIGluIG11bHRpIGhvc3QgY29ubmVjdGlvbiBzdHJpbmdz IHdpdGhvdXQKY29vcmRpbmF0aW5nIHdpdGggZXZlcnkgZW5kIHVzZXIgd2hvIG1heSBoYXJkY29k ZSB0aGVpcgpjb25uZWN0aW9uIHN0cmluZ3MgaW4gYSBsb3Qgb2YgZGlmZmVyZW50IHBsYWNlcy4K CkN1cnJlbnRseSBsaWJwcSBoYXMgZnVuY3Rpb25saXR5IHdoaWNoIGFjY29tcGxpc2hlcyBzb21l IG9mCnRoZSBhYm92ZSBieSBhbGxvd2luZyBlbnRyeSBvZiBjb25uY2V0aW9uIHBhcmFtYXRlcnMg aW50bwpMREFQIHNlcnZlcnNbMF0sIHRob3VnaCB0aGlzIGNhbm5vdCBiZSBzcGVjaWZpZWQgZGly ZWN0bHkgaW4KYSBjb25uZWN0aW9uIHN0cmluZyAodGhvdWdoIHRoZXJlIGlzIGEgcGF0Y2ggdGhh dCBhZGRzIHRoaXMKZnVuY3Rpb25hbGl0eSBbMV0pLiBBbm90aGVyIHBvdGVudGlhbCBpc3N1ZSBo ZXJlIGlzIHRoYXQKc2V0dGluZyB1cCBMREFQIGluZnJhc3RydWN0dXJlIGlzIGEgbG90IGxlc3Mg YWNjZXNzaWJsZSB0bwptYW55IGFkbWluaXN0cmF0b3JzIHRoYW4gc2V0dGluZyB1cCBhbiBIVFRQ IHdlYiBzZXJ2ZXIuCgpUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHBhdGNoIGlzIHZlcnkgcm91 Z2ggYW5kIGlzIGJlaW5nCnByZXNlbnRlZCBhcyBtb3JlIG9mIGEgUkZDIHRoYW4gYW55dGhpbmcg ZWxzZS4KU29tZSBvYnZpb3VzIGlzc3VlczoKMS4gTG90cyBvZiBkdXBsaWNhdGVkIGxvZ2ljIGJl dHdlZW4gdGhlIHBhcnNlX3NlcnZpY2VfZmlsZV9jdXJsCiAgIGFuZCBwYXJzZVNlcnZpY2VGaWxl LgoyLiBCdW5kbGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gd2l0aCBsaWJwcS1vYXV0aC5zbyBz ZWVtcyBvZGQuCiAgIEl0IHdvdWxkIHByb2JhYmx5IG1ha2UgbW9yZSBzZW5zZSB0byByZW5hbWUg bGlicHEtb2F1dGguc28gdG8KICAgbGlicHEtb2F1dGguc28gdG8gbGlicHEtbGliY3VybC5zbyBv ciBjcmVhdGUgYW4gZW50aXJlbHkgbmV3CiAgIC5zbyBmaWxlIGZvciB0aGlzIGxvZ2ljLgoKRGVz cGl0ZSB0aGVzZSBzaG9ydGNvbWluZ3MgdGhpcyBhcHByb2FjaCBtYXkgYmUgYSBtb3JlIG5hdHVy YWwKYWx0ZXJuYXRpdmUgdG8gcHJldmlvdXMgYXR0ZW1wdHMgWzIsIDNdIGF0IGFsbG93aW5nIGFk bWluaXN0cmF0b3JzCnRvIG1peCByZWFkLW9ubHkvcmVhZC13cml0ZSBub2RlcyBpbnRvIG92ZXJs b2FkZWQgQSByZWNvcmRzLgoKWzBdOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1 cnJlbnQvbGlicHEtbGRhcC5odG1sClsxXTogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVz c2FnZS1pZC9mbGF0L0NBS0s1QmtGT0ZHZktKTmJUdVlCdkUwUGZwSG1XOGlaRW1kTm9nYUNZcWpB T2h0TmdEZ0BtYWlsLmdtYWlsLmNvbQpbMl06IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvZmxhdC9DQUtLNUJrRVNTYzY5c3AyVGlUV0h2dk9IQ1VleTByRFdYU3JSOXBpbnlS cXlmYW1VWWdAbWFpbC5nbWFpbC5jb20KWzNdOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL0FNOVBSMDlNQjQ5MDA4QjAyQ0RGMDAzMDU0RDVENEUwMDk3N0RBQEFNOVBSMDlN QjQ5MDAuZXVycHJkMDkucHJvZC5vdXRsb29rLmNvbQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS1v YXV0aC9leHBvcnRzLnR4dCAgICAgICAgfCAgIDUgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL2h0dHAtc2VydmljZS5jICAgICB8IDU2MCArKysrKysrKysrKysrKysrKysKIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL2h0dHAtc2VydmljZS5oICAgICB8ICAzMCArCiBzcmMvaW50ZXJm YWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtY29ubmVjdC5jICAgICAgICAgICAgIHwgIDM0ICsrCiBzcmMvdGVzdC9tb2R1 bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxl cy9odHRwX3BnX3NlcnZpY2UvTWFrZWZpbGUgICAgIHwgIDM3ICsrCiBzcmMvdGVzdC9tb2R1bGVz L2h0dHBfcGdfc2VydmljZS9tZXNvbi5idWlsZCAgfCAgMTcgKwogLi4uL3QvMDAxX2h0dHBfc2Vy dmljZV9maWxlLnBsICAgICAgICAgICAgICAgIHwgMTE3ICsrKysKIC4uLi9odHRwX3BnX3NlcnZp Y2UvdC9QZ0h0dHBTZXJ2aWNlL1NlcnZlci5wbSB8IDE0MSArKysrKwogLi4uL2h0dHBfcGdfc2Vy dmljZS90L2h0dHBfc2VydmljZV9zZXJ2ZXIucHkgIHwgIDczICsrKwogMTIgZmlsZXMgY2hhbmdl ZCwgMTAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2h0dHAtc2VydmljZS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvaHR0cC1zZXJ2aWNlLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2VydmljZS9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL21lc29uLmJ1 aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2Uv dC8wMDFfaHR0cF9zZXJ2aWNlX2ZpbGUucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL2h0dHBfcGdfc2VydmljZS90L1BnSHR0cFNlcnZpY2UvU2VydmVyLnBtCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvdC9odHRwX3NlcnZp Y2Vfc2VydmVyLnB5CgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFr ZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZQppbmRleCAxMWUxYTNj ZjUyOC4uNmQ0YTFmMjQwY2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRo L01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCkBAIC00 Miw2ICs0Miw3IEBAIE9CSlNfU1RBVElDID0gb2F1dGgtY3VybC5vCiBPQkpTX1NITElCID0gXAog CW9hdXRoLWN1cmxfc2hsaWIubyBcCiAJb2F1dGgtdXRpbHMubyBcCisJaHR0cC1zZXJ2aWNlLm8g XAoKIG9hdXRoLXV0aWxzLm86IG92ZXJyaWRlIENQUEZMQUdTICs9ICQoQ1BQRkxBR1NfU0hMSUIp CgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgYi9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dAppbmRleCA3YmMxMmI4NjBkNy4u Y2Q0OTBhMjlhNTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9y dHMudHh0CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CkBAIC0x LDMgKzEsNCBAQAogIyBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dAotbGli cHFfb2F1dGhfaW5pdCAgICAgICAgICAxCi1wZ19zdGFydF9vYXV0aGJlYXJlciAgICAgIDIKK2xp YnBxX29hdXRoX2luaXQgICAgICAgICAgICAgMQorcGdfc3RhcnRfb2F1dGhiZWFyZXIgICAgICAg ICAyCitwYXJzZV9zZXJ2aWNlX2ZpbGVfY3VybCAgICAgIDMKZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL2h0dHAtc2VydmljZS5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEt b2F1dGgvaHR0cC1zZXJ2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmI0YTZlM2UzYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEt b2F1dGgvaHR0cC1zZXJ2aWNlLmMKQEAgLTAsMCArMSw1NjAgQEAKKyNpbmNsdWRlIDxjdXJsL2N1 cmwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg PHN0ZGJvb2wuaD4KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSAicHFleHBi dWZmZXIuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgIm9hdXRoLXV0aWxzLmgiCisj aW5jbHVkZSAiaHR0cC1zZXJ2aWNlLmgiCisKK2VudW0gZmN1cmxfdHlwZV9lIHsKKyAgQ0ZUWVBF X05PTkUgPSAwLAorICBDRlRZUEVfRklMRSA9IDEsCisgIENGVFlQRV9DVVJMID0gMgorfTsKK3N0 cnVjdCBmY3VybF9kYXRhCit7CisgIGVudW0gZmN1cmxfdHlwZV9lIHR5cGU7ICAgICAvKiB0eXBl IG9mIGhhbmRsZSAqLworICB1bmlvbiB7CisgICAgQ1VSTCAqY3VybDsKKyAgICBGSUxFICpmaWxl OworICB9IGhhbmRsZTsgICAgICAgICAgICAgICAgICAgLyogaGFuZGxlICovCisKKyAgY2hhciAq YnVmZmVyOyAgICAgICAgICAgICAgIC8qIGJ1ZmZlciB0byBzdG9yZSBjYWNoZWQgZGF0YSovCisg IHNpemVfdCBidWZmZXJfbGVuOyAgICAgICAgICAvKiBjdXJyZW50bHkgYWxsb2NhdGVkIGJ1ZmZl cnMgbGVuZ3RoICovCisgIHNpemVfdCBidWZmZXJfcG9zOyAgICAgICAgICAvKiBlbmQgb2YgZGF0 YSBpbiBidWZmZXIqLworICBpbnQgc3RpbGxfcnVubmluZzsgICAgICAgICAgLyogSXMgYmFja2dy b3VuZCB1cmwgZmV0Y2ggc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KK307CisKK3R5cGVkZWYgc3RydWN0 IGZjdXJsX2RhdGEgVVJMX0ZJTEU7CisKKy8qIGV4cG9ydGVkIGZ1bmN0aW9ucyAqLworVVJMX0ZJ TEUgKnVybF9mb3Blbihjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKm9wZXJhdGlvbik7Citp bnQgdXJsX2ZjbG9zZShVUkxfRklMRSAqZmlsZSk7CitpbnQgdXJsX2Zlb2YoVVJMX0ZJTEUgKmZp bGUpOworc2l6ZV90IHVybF9mcmVhZCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1l bWIsIFVSTF9GSUxFICpmaWxlKTsKK2NoYXIgKnVybF9mZ2V0cyhjaGFyICpwdHIsIHNpemVfdCBz aXplLCBVUkxfRklMRSAqZmlsZSk7Cit2b2lkIHVybF9yZXdpbmQoVVJMX0ZJTEUgKmZpbGUpOwor CisvKiB3ZSB1c2UgYSBnbG9iYWwgb25lIGZvciBjb252ZW5pZW5jZSAqLworc3RhdGljIENVUkxN ICptdWx0aV9oYW5kbGU7CisKKy8qIGN1cmwgY2FsbHMgdGhpcyByb3V0aW5lIHRvIGdldCBtb3Jl IGRhdGEgKi8KK3N0YXRpYyBzaXplX3Qgd3JpdGVfY2FsbGJhY2soY2hhciAqYnVmZmVyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IG5pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqdXNlcnApCit7CisgIGNoYXIgKm5ld2J1ZmY7CisgIHNpemVfdCByZW1idWZmOworCisg IFVSTF9GSUxFICp1cmwgPSAoVVJMX0ZJTEUgKil1c2VycDsKKyAgc2l6ZSAqPSBuaXRlbXM7CisK KyAgcmVtYnVmZiA9IHVybC0+YnVmZmVyX2xlbiAtIHVybC0+YnVmZmVyX3BvczsgLyogcmVtYWlu aW5nIHNwYWNlIGluIGJ1ZmZlciAqLworCisgIGlmKHNpemUgPiByZW1idWZmKSB7CisgICAgLyog bm90IGVub3VnaCBzcGFjZSBpbiBidWZmZXIgKi8KKyAgICBuZXdidWZmID0gcmVhbGxvYyh1cmwt PmJ1ZmZlciwgdXJsLT5idWZmZXJfbGVuICsgKHNpemUgLSByZW1idWZmKSk7CisgICAgaWYoIW5l d2J1ZmYpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FsbGJhY2sgYnVmZmVyIGdyb3cgZmFp bGVkXG4iKTsKKyAgICAgIHNpemUgPSByZW1idWZmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg IC8qIHJlYWxsb2Mgc3VjY2VlZGVkIGluY3JlYXNlIGJ1ZmZlciBzaXplKi8KKyAgICAgIHVybC0+ YnVmZmVyX2xlbiArPSBzaXplIC0gcmVtYnVmZjsKKyAgICAgIHVybC0+YnVmZmVyID0gbmV3YnVm ZjsKKyAgICB9CisgIH0KKworICBtZW1jcHkoJnVybC0+YnVmZmVyW3VybC0+YnVmZmVyX3Bvc10s IGJ1ZmZlciwgc2l6ZSk7CisgIHVybC0+YnVmZmVyX3BvcyArPSBzaXplOworCisgIHJldHVybiBz aXplOworfQorCisvKiB1c2UgdG8gYXR0ZW1wdCB0byBmaWxsIHRoZSByZWFkIGJ1ZmZlciB1cCB0 byByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzICovCitzdGF0aWMgaW50IGZpbGxfYnVmZmVyKFVS TF9GSUxFICpmaWxlLCBzaXplX3Qgd2FudCkKK3sKKyAgZmRfc2V0IGZkcmVhZDsKKyAgZmRfc2V0 IGZkd3JpdGU7CisgIGZkX3NldCBmZGV4Y2VwOworICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0Owor ICBpbnQgcmM7CisgIENVUkxNY29kZSBtYzsgLyogY3VybF9tdWx0aV9mZHNldCgpIHJldHVybiBj b2RlICovCisKKyAgLyogb25seSBhdHRlbXB0IHRvIGZpbGwgYnVmZmVyIGlmIHRyYW5zYWN0aW9u cyBzdGlsbCBydW5uaW5nIGFuZCBidWZmZXIKKyAgICogZG9lcyBub3QgZXhjZWVkIHJlcXVpcmVk IHNpemUgYWxyZWFkeQorICAgKi8KKyAgaWYoKCFmaWxlLT5zdGlsbF9ydW5uaW5nKSB8fCAoZmls ZS0+YnVmZmVyX3BvcyA+IHdhbnQpKQorICAgIHJldHVybiAwOworCisgIC8qIGF0dGVtcHQgdG8g ZmlsbCBidWZmZXIgKi8KKyAgZG8geworICAgIGludCBtYXhmZCA9IC0xOworICAgIGxvbmcgY3Vy bF90aW1lbyA9IC0xOworCisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9aRVJPKCZmZHdy aXRlKTsKKyAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKworICAgIC8qIHNldCBhIHN1aXRhYmxlIHRp bWVvdXQgdG8gZmFpbCBvbiAqLworICAgIHRpbWVvdXQudHZfc2VjID0gNjA7IC8qIDEgbWludXRl ICovCisgICAgdGltZW91dC50dl91c2VjID0gMDsKKworICAgIGN1cmxfbXVsdGlfdGltZW91dCht dWx0aV9oYW5kbGUsICZjdXJsX3RpbWVvKTsKKyAgICBpZihjdXJsX3RpbWVvID49IDApIHsKKyAg ICAgIHRpbWVvdXQudHZfc2VjID0gY3VybF90aW1lbyAvIDEwMDA7CisgICAgICBpZih0aW1lb3V0 LnR2X3NlYyA+IDEpCisgICAgICAgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgICAgIGVsc2UKKyAg ICAgICAgdGltZW91dC50dl91c2VjID0gKGN1cmxfdGltZW8gJSAxMDAwKSAqIDEwMDA7CisgICAg fQorCisgICAgLyogZ2V0IGZpbGUgZGVzY3JpcHRvcnMgZnJvbSB0aGUgdHJhbnNmZXJzICovCisg ICAgbWMgPSBjdXJsX211bHRpX2Zkc2V0KG11bHRpX2hhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUs ICZmZGV4Y2VwLCAmbWF4ZmQpOworCisgICAgaWYobWMgIT0gQ1VSTE1fT0spIHsKKyAgICAgIGZw cmludGYoc3RkZXJyLCAiY3VybF9tdWx0aV9mZHNldCgpIGZhaWxlZCwgY29kZSAlZC5cbiIsIG1j KTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIE9uIHN1Y2Nlc3MgdGhlIHZhbHVlIG9m IG1heGZkIGlzIGd1YXJhbnRlZWQgdG8gYmUgPj0gLTEuIFdlIGNhbGwKKyAgICAgICBzZWxlY3Qo bWF4ZmQgKyAxLCAuLi4pOyBzcGVjaWFsbHkgaW4gY2FzZSBvZiAobWF4ZmQgPT0gLTEpIHRoZXJl IGFyZQorICAgICAgIG5vIGZkcyByZWFkeSB5ZXQgc28gd2UgY2FsbCBzZWxlY3QoMCwgLi4uKSAt LW9yIFNsZWVwKCkgb24gV2luZG93cy0tCisgICAgICAgdG8gc2xlZXAgMTAwbXMsIHdoaWNoIGlz IHRoZSBtaW5pbXVtIHN1Z2dlc3RlZCB2YWx1ZSBpbiB0aGUKKyAgICAgICBjdXJsX211bHRpX2Zk c2V0KCkgZG9jLiAqLworCisgICAgaWYobWF4ZmQgPT0gLTEpIHsKKyNpZmRlZiBfV0lOMzIKKyAg ICAgIFNsZWVwKDEwMCk7CisgICAgICByYyA9IDA7CisjZWxzZQorICAgICAgLyogUG9ydGFibGUg c2xlZXAgZm9yIHBsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3MuICovCisgICAgICBzdHJ1Y3Qg dGltZXZhbCB3YWl0ID0geyAwLCAxMDAgKiAxMDAwIH07IC8qIDEwMG1zICovCisgICAgICByYyA9 IHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmd2FpdCk7CisjZW5kaWYKKyAgICB9CisgICAg ZWxzZSB7CisgICAgICAvKiBOb3RlIHRoYXQgb24gc29tZSBwbGF0Zm9ybXMgJ3RpbWVvdXQnIG1h eSBiZSBtb2RpZmllZCBieSBzZWxlY3QoKS4KKyAgICAgICAgIElmIHlvdSBuZWVkIGFjY2VzcyB0 byB0aGUgb3JpZ2luYWwgdmFsdWUgc2F2ZSBhIGNvcHkgYmVmb3JlaGFuZC4gKi8KKyAgICAgIHJj ID0gc2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91 dCk7CisgICAgfQorCisgICAgc3dpdGNoKHJjKSB7CisgICAgY2FzZSAtMToKKyAgICAgIC8qIHNl bGVjdCBlcnJvciAqLworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDA6CisgICAgZGVmYXVsdDoK KyAgICAgIC8qIHRpbWVvdXQgb3IgcmVhZGFibGUvd3JpdGFibGUgc29ja2V0cyAqLworICAgICAg Y3VybF9tdWx0aV9wZXJmb3JtKG11bHRpX2hhbmRsZSwgJmZpbGUtPnN0aWxsX3J1bm5pbmcpOwor ICAgICAgYnJlYWs7CisgICAgfQorICB9IHdoaWxlKGZpbGUtPnN0aWxsX3J1bm5pbmcgJiYgKGZp bGUtPmJ1ZmZlcl9wb3MgPCB3YW50KSk7CisgIHJldHVybiAxOworfQorCisvKiB1c2UgdG8gcmVt b3ZlIHdhbnQgYnl0ZXMgZnJvbSB0aGUgZnJvbnQgb2YgYSBmaWxlcyBidWZmZXIgKi8KK3N0YXRp YyBpbnQgdXNlX2J1ZmZlcihVUkxfRklMRSAqZmlsZSwgc2l6ZV90IHdhbnQpCit7CisgIC8qIHNv cnQgb3V0IGJ1ZmZlciAqLworICBpZihmaWxlLT5idWZmZXJfcG9zIDw9IHdhbnQpIHsKKyAgICAv KiBkaXRjaCBidWZmZXIgLSB3cml0ZSB3aWxsIHJlY3JlYXRlICovCisgICAgZnJlZShmaWxlLT5i dWZmZXIpOworICAgIGZpbGUtPmJ1ZmZlciA9IE5VTEw7CisgICAgZmlsZS0+YnVmZmVyX3BvcyA9 IDA7CisgICAgZmlsZS0+YnVmZmVyX2xlbiA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgLyogbW92 ZSByZXN0IGRvd24gbWFrZSBpdCBhdmFpbGFibGUgZm9yIGxhdGVyICovCisgICAgbWVtbW92ZShm aWxlLT5idWZmZXIsCisgICAgICAgICAgICAmZmlsZS0+YnVmZmVyW3dhbnRdLAorICAgICAgICAg ICAgKGZpbGUtPmJ1ZmZlcl9wb3MgLSB3YW50KSk7CisKKyAgICBmaWxlLT5idWZmZXJfcG9zIC09 IHdhbnQ7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK1VSTF9GSUxFICp1cmxfZm9wZW4oY29uc3Qg Y2hhciAqdXJsLCBjb25zdCBjaGFyICpvcGVyYXRpb24pCit7CisgIC8qIHRoaXMgY29kZSBjb3Vs ZCBjaGVjayBmb3IgVVJMcyBvciB0eXBlcyBpbiB0aGUgJ3VybCcgYW5kCisgICAgIGJhc2ljYWxs eSB1c2UgdGhlIHJlYWwgZm9wZW4oKSBmb3Igc3RhbmRhcmQgZmlsZXMgKi8KKworICBVUkxfRklM RSAqZmlsZTsKKyAgKHZvaWQpb3BlcmF0aW9uOworCisgIGZpbGUgPSBjYWxsb2MoMSwgc2l6ZW9m KFVSTF9GSUxFKSk7CisgIGlmKCFmaWxlKQorICAgIHJldHVybiBOVUxMOworCisgIGZpbGUtPmhh bmRsZS5maWxlID0gZm9wZW4odXJsLCBvcGVyYXRpb24pOworICBpZihmaWxlLT5oYW5kbGUuZmls ZSkKKyAgICBmaWxlLT50eXBlID0gQ0ZUWVBFX0ZJTEU7IC8qIG1hcmtlZCBhcyBVUkwgKi8KKwor ICBlbHNlIHsKKyAgICBmaWxlLT50eXBlID0gQ0ZUWVBFX0NVUkw7IC8qIG1hcmtlZCBhcyBVUkwg Ki8KKyAgICBmaWxlLT5oYW5kbGUuY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKyAgICBjdXJs X2Vhc3lfc2V0b3B0KGZpbGUtPmhhbmRsZS5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKyAgICBj dXJsX2Vhc3lfc2V0b3B0KGZpbGUtPmhhbmRsZS5jdXJsLCBDVVJMT1BUX1dSSVRFREFUQSwgZmls ZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChmaWxlLT5oYW5kbGUuY3VybCwgQ1VSTE9QVF9WRVJC T1NFLCAwTCk7CisgICAgY3VybF9lYXN5X3NldG9wdChmaWxlLT5oYW5kbGUuY3VybCwgQ1VSTE9Q VF9XUklURUZVTkNUSU9OLCB3cml0ZV9jYWxsYmFjayk7CisKKyAgICBpZighbXVsdGlfaGFuZGxl KQorICAgICAgbXVsdGlfaGFuZGxlID0gY3VybF9tdWx0aV9pbml0KCk7CisKKyAgICBjdXJsX211 bHRpX2FkZF9oYW5kbGUobXVsdGlfaGFuZGxlLCBmaWxlLT5oYW5kbGUuY3VybCk7CisKKyAgICAv KiBsZXRzIHN0YXJ0IHRoZSBmZXRjaCAqLworICAgIGN1cmxfbXVsdGlfcGVyZm9ybShtdWx0aV9o YW5kbGUsICZmaWxlLT5zdGlsbF9ydW5uaW5nKTsKKworICAgIGlmKChmaWxlLT5idWZmZXJfcG9z ID09IDApICYmICghZmlsZS0+c3RpbGxfcnVubmluZykpIHsKKyAgICAgIC8qIGlmIHN0aWxsX3J1 bm5pbmcgaXMgMCBub3csIHdlIHNob3VsZCByZXR1cm4gTlVMTCAqLworCisgICAgICAvKiBtYWtl IHN1cmUgdGhlIGVhc3kgaGFuZGxlIGlzIG5vdCBpbiB0aGUgbXVsdGkgaGFuZGxlIGFueW1vcmUg Ki8KKyAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtdWx0aV9oYW5kbGUsIGZpbGUtPmhh bmRsZS5jdXJsKTsKKworICAgICAgLyogY2xlYW51cCAqLworICAgICAgY3VybF9lYXN5X2NsZWFu dXAoZmlsZS0+aGFuZGxlLmN1cmwpOworCisgICAgICBmcmVlKGZpbGUpOworCisgICAgICBmaWxl ID0gTlVMTDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZpbGU7Cit9CisKK2ludCB1cmxfZmNsb3Nl KFVSTF9GSUxFICpmaWxlKQoreworICBpbnQgcmV0ID0gMDsvKiBkZWZhdWx0IGlzIGdvb2QgcmV0 dXJuICovCisKKyAgc3dpdGNoKGZpbGUtPnR5cGUpIHsKKyAgY2FzZSBDRlRZUEVfRklMRToKKyAg ICByZXQgPSBmY2xvc2UoZmlsZS0+aGFuZGxlLmZpbGUpOyAvKiBwYXNzdGhyb3VnaCAqLworICAg IGJyZWFrOworCisgIGNhc2UgQ0ZUWVBFX0NVUkw6CisgICAgLyogbWFrZSBzdXJlIHRoZSBlYXN5 IGhhbmRsZSBpcyBub3QgaW4gdGhlIG11bHRpIGhhbmRsZSBhbnltb3JlICovCisgICAgY3VybF9t dWx0aV9yZW1vdmVfaGFuZGxlKG11bHRpX2hhbmRsZSwgZmlsZS0+aGFuZGxlLmN1cmwpOworCisg ICAgLyogY2xlYW51cCAqLworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGZpbGUtPmhhbmRsZS5jdXJs KTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OiAvKiB1bmtub3duIG9yIHN1cHBvcnRlZCB0eXBl IC0gb2ggZGVhciAqLworICAgIHJldCA9IEVPRjsKKyAgICBlcnJubyA9IEVCQURGOworICAgIGJy ZWFrOworICB9CisKKyAgZnJlZShmaWxlLT5idWZmZXIpOy8qIGZyZWUgYW55IGFsbG9jYXRlZCBi dWZmZXIgc3BhY2UgKi8KKyAgZnJlZShmaWxlKTsKKworICByZXR1cm4gcmV0OworfQorCitpbnQg dXJsX2Zlb2YoVVJMX0ZJTEUgKmZpbGUpCit7CisgIGludCByZXQgPSAwOworCisgIHN3aXRjaChm aWxlLT50eXBlKSB7CisgIGNhc2UgQ0ZUWVBFX0ZJTEU6CisgICAgcmV0ID0gZmVvZihmaWxlLT5o YW5kbGUuZmlsZSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICBpZigo ZmlsZS0+YnVmZmVyX3BvcyA9PSAwKSAmJiAoIWZpbGUtPnN0aWxsX3J1bm5pbmcpKQorICAgICAg cmV0ID0gMTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OiAvKiB1bmtub3duIG9yIHN1cHBvcnRl ZCB0eXBlIC0gb2ggZGVhciAqLworICAgIHJldCA9IC0xOworICAgIGVycm5vID0gRUJBREY7Cisg ICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIHJldDsKK30KKworc2l6ZV90IHVybF9mcmVhZCh2b2lk ICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIFVSTF9GSUxFICpmaWxlKQoreworICBz aXplX3Qgd2FudDsKKworICBzd2l0Y2goZmlsZS0+dHlwZSkgeworICBjYXNlIENGVFlQRV9GSUxF OgorICAgIHdhbnQgPSBmcmVhZChwdHIsIHNpemUsIG5tZW1iLCBmaWxlLT5oYW5kbGUuZmlsZSk7 CisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoKKyAgICB3YW50ID0gbm1lbWIgKiBz aXplOworCisgICAgZmlsbF9idWZmZXIoZmlsZSwgd2FudCk7CisKKyAgICAvKiBjaGVjayBpZiB0 aGVyZSdzIGRhdGEgaW4gdGhlIGJ1ZmZlciAtIGlmIG5vdCBmaWxsX2J1ZmZlcigpCisgICAgICog ZWl0aGVyIGVycm9yZWQgb3IgRU9GICovCisgICAgaWYoIWZpbGUtPmJ1ZmZlcl9wb3MpCisgICAg ICByZXR1cm4gMDsKKworICAgIC8qIGVuc3VyZSBvbmx5IGF2YWlsYWJsZSBkYXRhIGlzIGNvbnNp ZGVyZWQgKi8KKyAgICBpZihmaWxlLT5idWZmZXJfcG9zIDwgd2FudCkKKyAgICAgIHdhbnQgPSBm aWxlLT5idWZmZXJfcG9zOworCisgICAgLyogeGZlciBkYXRhIHRvIGNhbGxlciAqLworICAgIG1l bWNweShwdHIsIGZpbGUtPmJ1ZmZlciwgd2FudCk7CisKKyAgICB1c2VfYnVmZmVyKGZpbGUsIHdh bnQpOworCisgICAgd2FudCA9IHdhbnQgLyBzaXplOyAgICAgLyogbnVtYmVyIG9mIGl0ZW1zICov CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDogLyogdW5rbm93biBvciBzdXBwb3J0ZWQgdHlwZSAt IG9oIGRlYXIgKi8KKyAgICB3YW50ID0gMDsKKyAgICBlcnJubyA9IEVCQURGOworICAgIGJyZWFr OworCisgIH0KKyAgcmV0dXJuIHdhbnQ7Cit9CisKK2NoYXIgKnVybF9mZ2V0cyhjaGFyICpwdHIs IHNpemVfdCBzaXplLCBVUkxfRklMRSAqZmlsZSkKK3sKKyAgc2l6ZV90IHdhbnQgPSBzaXplIC0g MTsvKiBhbHdheXMgbmVlZCB0byBsZWF2ZSByb29tIGZvciB6ZXJvIHRlcm1pbmF0aW9uICovCisg IHNpemVfdCBsb29wOworCisgIHN3aXRjaChmaWxlLT50eXBlKSB7CisgIGNhc2UgQ0ZUWVBFX0ZJ TEU6CisgICAgcHRyID0gZmdldHMocHRyLCAoaW50KXNpemUsIGZpbGUtPmhhbmRsZS5maWxlKTsK KyAgICBicmVhazsKKworICBjYXNlIENGVFlQRV9DVVJMOgorICAgIGZpbGxfYnVmZmVyKGZpbGUs IHdhbnQpOworCisgICAgLyogY2hlY2sgaWYgdGhlcmUncyBkYXRhIGluIHRoZSBidWZmZXIgLSBp ZiBub3QgZmlsbCBlaXRoZXIgZXJyb3JlZCBvcgorICAgICAqIEVPRiAqLworICAgIGlmKCFmaWxl LT5idWZmZXJfcG9zKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBlbnN1cmUgb25seSBh dmFpbGFibGUgZGF0YSBpcyBjb25zaWRlcmVkICovCisgICAgaWYoZmlsZS0+YnVmZmVyX3BvcyA8 IHdhbnQpCisgICAgICB3YW50ID0gZmlsZS0+YnVmZmVyX3BvczsKKworICAgIC8qYnVmZmVyIGNv bnRhaW5zIGRhdGEgKi8KKyAgICAvKiBsb29rIGZvciBuZXdsaW5lIG9yIGVvZiAqLworICAgIGZv cihsb29wID0gMDsgbG9vcCA8IHdhbnQ7IGxvb3ArKykgeworICAgICAgaWYoZmlsZS0+YnVmZmVy W2xvb3BdID09ICdcbicpIHsKKyAgICAgICAgd2FudCA9IGxvb3AgKyAxOy8qIGluY2x1ZGUgbmV3 bGluZSAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiB4ZmVyIGRh dGEgdG8gY2FsbGVyICovCisgICAgbWVtY3B5KHB0ciwgZmlsZS0+YnVmZmVyLCB3YW50KTsKKyAg ICBwdHJbd2FudF0gPSAwOy8qIGFsd2F5cyBudWxsIHRlcm1pbmF0ZSAqLworCisgICAgdXNlX2J1 ZmZlcihmaWxlLCB3YW50KTsKKworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6IC8qIHVua25vd24g b3Igc3VwcG9ydGVkIHR5cGUgLSBvaCBkZWFyICovCisgICAgcHRyID0gTlVMTDsKKyAgICBlcnJu byA9IEVCQURGOworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHB0cjsvKnN1Y2Nlc3MgKi8K K30KKwordm9pZCB1cmxfcmV3aW5kKFVSTF9GSUxFICpmaWxlKQoreworICBzd2l0Y2goZmlsZS0+ dHlwZSkgeworICBjYXNlIENGVFlQRV9GSUxFOgorICAgIHJld2luZChmaWxlLT5oYW5kbGUuZmls ZSk7IC8qIHBhc3N0aHJvdWdoICovCisgICAgYnJlYWs7CisKKyAgY2FzZSBDRlRZUEVfQ1VSTDoK KyAgICAvKiBoYWx0IHRyYW5zYWN0aW9uICovCisgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxl KG11bHRpX2hhbmRsZSwgZmlsZS0+aGFuZGxlLmN1cmwpOworCisgICAgLyogcmVzdGFydCAqLwor ICAgIGN1cmxfbXVsdGlfYWRkX2hhbmRsZShtdWx0aV9oYW5kbGUsIGZpbGUtPmhhbmRsZS5jdXJs KTsKKworICAgIC8qIGRpdGNoIGJ1ZmZlciAtIHdyaXRlIHdpbGwgcmVjcmVhdGUgLSByZXNldHMg c3RyZWFtIHBvcyovCisgICAgZnJlZShmaWxlLT5idWZmZXIpOworICAgIGZpbGUtPmJ1ZmZlciA9 IE5VTEw7CisgICAgZmlsZS0+YnVmZmVyX3BvcyA9IDA7CisgICAgZmlsZS0+YnVmZmVyX2xlbiA9 IDA7CisKKyAgICBicmVhazsKKworICBkZWZhdWx0OiAvKiB1bmtub3duIG9yIHN1cHBvcnRlZCB0 eXBlIC0gb2ggZGVhciAqLworICAgIGJyZWFrOworICB9Cit9CisKK2ludAorcGFyc2Vfc2Vydmlj ZV9maWxlX2N1cmwoY29uc3QgY2hhciAqc2VydmljZUZpbGUsCisJCQkJCSAgICBjb25zdCBjaGFy ICpzZXJ2aWNlLAorCQkJCQkgICAgUFFjb25uaW5mb09wdGlvbiAqb3B0aW9ucywKKwkJCQkJICAg IFBRRXhwQnVmZmVyIGVycm9yTWVzc2FnZSwKKwkJCQkJICAgIGJvb2wgKmdyb3VwX2ZvdW5kKQor eworCWludAkJCXJlc3VsdCA9IDAsCisJCQkJbGluZW5yID0gMCwKKwkJCQlpOworCVVSTF9GSUxF ICpmOworCWNoYXIJICAgKmxpbmU7CisJY2hhcgkJYnVmWzEwMjRdOworCisJKmdyb3VwX2ZvdW5k ID0gZmFsc2U7CisKKwlmID0gdXJsX2ZvcGVuKHNlcnZpY2VGaWxlLCAiciIpOworCWlmIChmID09 IE5VTEwpCisJeworCQkvLyBsaWJwcV9hcHBlbmRfZXJyb3IoZXJyb3JNZXNzYWdlLCAic2Vydmlj ZSBmaWxlIFwiJXNcIiBub3QgZm91bmQiLCBzZXJ2aWNlRmlsZSk7CisJCXJldHVybiAxOworCX0K KworCXdoaWxlICgobGluZSA9IHVybF9mZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkgIT0gTlVM TCkKKwl7CisJCWludAkJCWxlbjsKKworCQlsaW5lbnIrKzsKKworCQlpZiAoc3RybGVuKGxpbmUp ID49IHNpemVvZihidWYpIC0gMSkKKwkJeworCQkJLy8gbGlicHFfYXBwZW5kX2Vycm9yKGVycm9y TWVzc2FnZSwKKwkJCQkJCQkgICAvLyAibGluZSAlZCB0b28gbG9uZyBpbiBzZXJ2aWNlIGZpbGUg XCIlc1wiIiwKKwkJCQkJCQkgICAvLyBsaW5lbnIsCisJCQkJCQkJICAgLy8gc2VydmljZUZpbGUp OworCQkJcmVzdWx0ID0gMjsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS8qIGlnbm9yZSB3aGl0 ZXNwYWNlIGF0IGVuZCBvZiBsaW5lLCBlc3BlY2lhbGx5IHRoZSBuZXdsaW5lICovCisJCWxlbiA9 IHN0cmxlbihsaW5lKTsKKwkJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hh cikgbGluZVtsZW4gLSAxXSkpCisJCQlsaW5lWy0tbGVuXSA9ICdcMCc7CisKKwkJLyogaWdub3Jl IGxlYWRpbmcgd2hpdGVzcGFjZSB0b28gKi8KKwkJd2hpbGUgKCpsaW5lICYmIGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpIGxpbmVbMF0pKQorCQkJbGluZSsrOworCisJCS8qIGlnbm9yZSBjb21tZW50 cyBhbmQgZW1wdHkgbGluZXMgKi8KKwkJaWYgKGxpbmVbMF0gPT0gJ1wwJyB8fCBsaW5lWzBdID09 ICcjJykKKwkJCWNvbnRpbnVlOworCisJCS8qIENoZWNrIGZvciByaWdodCBncm91cG5hbWUgKi8K KwkJaWYgKGxpbmVbMF0gPT0gJ1snKQorCQl7CisJCQlpZiAoKmdyb3VwX2ZvdW5kKQorCQkJewor CQkJCS8qIGVuZCBvZiBkZXNpcmVkIGdyb3VwIHJlYWNoZWQ7IHJldHVybiBzdWNjZXNzICovCisJ CQkJZ290byBleGl0OworCQkJfQorCisJCQlpZiAoc3RybmNtcChsaW5lICsgMSwgc2VydmljZSwg c3RybGVuKHNlcnZpY2UpKSA9PSAwICYmCisJCQkJbGluZVtzdHJsZW4oc2VydmljZSkgKyAxXSA9 PSAnXScpCisJCQkJKmdyb3VwX2ZvdW5kID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQkqZ3JvdXBfZm91 bmQgPSBmYWxzZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICgqZ3JvdXBfZm91bmQpCisJCQl7 CisJCQkJLyoKKwkJCQkgKiBGaW5hbGx5LCB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGdyb3VwIGFuZCBj YW4gcGFyc2UgdGhlIGxpbmUKKwkJCQkgKi8KKwkJCQljaGFyCSAgICprZXksCisJCQkJCQkgICAq dmFsOworCQkJCWJvb2wJCWZvdW5kX2tleXdvcmQ7CisKKyNpZmRlZiBVU0VfTERBUAorCQkJCWlm IChzdHJuY21wKGxpbmUsICJsZGFwIiwgNCkgPT0gMCkKKwkJCQl7CisJCQkJCWludAkJCXJjID0g bGRhcFNlcnZpY2VMb29rdXAobGluZSwgb3B0aW9ucywgZXJyb3JNZXNzYWdlKTsKKworCQkJCQkv KiBpZiByYyA9IDIsIGdvIG9uIHJlYWRpbmcgZm9yIGZhbGxiYWNrICovCisJCQkJCXN3aXRjaCAo cmMpCisJCQkJCXsKKwkJCQkJCWNhc2UgMDoKKwkJCQkJCQlnb3RvIGV4aXQ7CisJCQkJCQljYXNl IDE6CisJCQkJCQljYXNlIDM6CisJCQkJCQkJcmVzdWx0ID0gMzsKKwkJCQkJCQlnb3RvIGV4aXQ7 CisJCQkJCQljYXNlIDI6CisJCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYK KworCQkJCWtleSA9IGxpbmU7CisJCQkJdmFsID0gc3RyY2hyKGxpbmUsICc9Jyk7CisJCQkJaWYg KHZhbCA9PSBOVUxMKQorCQkJCXsKKwkJCQkJLy8gbGlicHFfYXBwZW5kX2Vycm9yKGVycm9yTWVz c2FnZSwKKwkJCQkvLyAJCQkJCSAgICJzeW50YXggZXJyb3IgaW4gc2VydmljZSBmaWxlIFwiJXNc IiwgbGluZSAlZCIsCisJCQkJLy8gCQkJCQkgICBzZXJ2aWNlRmlsZSwKKwkJCQkvLyAJCQkJCSAg IGxpbmVucik7CisJCQkJCXJlc3VsdCA9IDM7CisJCQkJCWdvdG8gZXhpdDsKKwkJCQl9CisJCQkJ KnZhbCsrID0gJ1wwJzsKKworCQkJCWlmIChzdHJjbXAoa2V5LCAic2VydmljZSIpID09IDApCisJ CQkJeworCQkJCQkvLyBsaWJwcV9hcHBlbmRfZXJyb3IoZXJyb3JNZXNzYWdlLAorCQkJCS8vCQkJ CQkgICAibmVzdGVkIHNlcnZpY2Ugc3BlY2lmaWNhdGlvbnMgbm90IHN1cHBvcnRlZCBpbiBzZXJ2 aWNlIGZpbGUgXCIlc1wiLCBsaW5lICVkIiwKKwkJCQkvLwkJCQkJICAgc2VydmljZUZpbGUsCisJ CQkJLy8JCQkJCSAgIGxpbmVucik7CisJCQkJCXJlc3VsdCA9IDM7CisJCQkJCWdvdG8gZXhpdDsK KwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFNldCB0aGUgcGFyYW1ldGVyIC0tLSBidXQgZG9uJ3Qg b3ZlcnJpZGUgYW55IHByZXZpb3VzCisJCQkJICogZXhwbGljaXQgc2V0dGluZy4KKwkJCQkgKi8K KwkJCQlmb3VuZF9rZXl3b3JkID0gZmFsc2U7CisJCQkJZm9yIChpID0gMDsgb3B0aW9uc1tpXS5r ZXl3b3JkOyBpKyspCisJCQkJeworCQkJCQlpZiAoc3RyY21wKG9wdGlvbnNbaV0ua2V5d29yZCwg a2V5KSA9PSAwKQorCQkJCQl7CisJCQkJCQlpZiAob3B0aW9uc1tpXS52YWwgPT0gTlVMTCkKKwkJ CQkJCQlvcHRpb25zW2ldLnZhbCA9IHN0cmR1cCh2YWwpOworCQkJCQkJaWYgKCFvcHRpb25zW2ld LnZhbCkKKwkJCQkJCXsKKwkJCQkJCQkvLyBsaWJwcV9hcHBlbmRfZXJyb3IoZXJyb3JNZXNzYWdl LCAib3V0IG9mIG1lbW9yeSIpOworCQkJCQkJCXJlc3VsdCA9IDM7CisJCQkJCQkJZ290byBleGl0 OworCQkJCQkJfQorCQkJCQkJZm91bmRfa2V5d29yZCA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJ CQkJfQorCQkJCX0KKworCQkJCWlmICghZm91bmRfa2V5d29yZCkKKwkJCQl7CisJCQkJCS8vIGxp YnBxX2FwcGVuZF9lcnJvcihlcnJvck1lc3NhZ2UsCisJCQkJCS8vCQkJCSAgICJzeW50YXggZXJy b3IgaW4gc2VydmljZSBmaWxlIFwiJXNcIiwgbGluZSAlZCIsCisJCQkJCS8vCQkJCSAgIHNlcnZp Y2VGaWxlLAorCQkJCQkvLwkJCQkgICBsaW5lbnIpOworCQkJCQlyZXN1bHQgPSAzOworCQkJCQln b3RvIGV4aXQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCitleGl0OgorCXVybF9mY2xvc2UoZik7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9odHRwLXNlcnZpY2UuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2h0dHAt c2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNzEzMjM3 MDcyMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2h0dHAt c2VydmljZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGh0 dHAtc2VydmljZS4KKyAqCisgKgkgIERlZmluaXRpb25zIGZvciBIVFRQIHNlcnZpY2UgZmlsZQor ICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW50ZXJmYWNl cy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaWZuZGVmIEhUVFBfU0VSVklDRV9ICisjZGVmaW5lIEhUVFBfU0VSVklDRV9ICisKKyNpbmNs dWRlICJsaWJwcS1mZS5oIgorCisvKiBFeHBvcnRlZCBmbG93IGNhbGxiYWNrLiAqLworCitleHRl cm4gUEdETExFWFBPUlQgaW50CitwYXJzZV9zZXJ2aWNlX2ZpbGVfY3VybChjb25zdCBjaGFyICpz ZXJ2aWNlRmlsZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJCQkJCSAgICBQUWNv bm5pbmZvT3B0aW9uICpvcHRpb25zLAorCQkJCQkgICAgUFFFeHBCdWZmZXIgZXJyb3JNZXNzYWdl LAorCQkJCQkgICAgYm9vbCAqZ3JvdXBfZm91bmQpOworCisKKyNlbmRpZgkJCQkJCQkvKiBIVFRQ X1NFUlZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVz b24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZAppbmRleCBl YTNhOTAwZjRmMS4uMzc3OTU1ZWQ3MDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29u LmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBAIGxpYnBxX29hdXRoX3NvdXJjZXMgPSBmaWxlcygKICMg VGhlIHNoYXJlZCBsaWJyYXJ5IG5lZWRzIGFkZGl0aW9uYWwgZ2x1ZSBzeW1ib2xzLgogbGlicHFf b2F1dGhfc29fc291cmNlcyA9IGZpbGVzKAogICAnb2F1dGgtdXRpbHMuYycsCisgICdodHRwLXNl cnZpY2UuYycsCiApCiBsaWJwcV9vYXV0aF9zb19jX2FyZ3MgPSBbCiAgICctRFVTRV9EWU5BTUlD X09BVVRIJywKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwppbmRleCBkYjliNGM4ZWRiZi4uNDJk NzE2ODAxZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwor KysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKQEAgLTE1LDYgKzE1LDcgQEAK CiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKCisjaW5jbHVkZSA8ZGxmY24uaD4KICNpbmNsdWRl IDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KQEAg LTUwMiw2ICs1MDMsMTEgQEAgc3RhdGljIGludAlwYXJzZVNlcnZpY2VGaWxlKGNvbnN0IGNoYXIg KnNlcnZpY2VGaWxlLAogCQkJCQkJCSBQUWNvbm5pbmZvT3B0aW9uICpvcHRpb25zLAogCQkJCQkJ CSBQUUV4cEJ1ZmZlciBlcnJvck1lc3NhZ2UsCiAJCQkJCQkJIGJvb2wgKmdyb3VwX2ZvdW5kKTsK K3N0YXRpYyBpbnQJcGFyc2VTZXJ2aWNlRmlsZUN1cmwoY29uc3QgY2hhciAqc2VydmljZUZpbGUs CisJCQkJCQkJIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJCQkJCQkJIFBRY29ubmluZm9PcHRpb24g Km9wdGlvbnMsCisJCQkJCQkJIFBRRXhwQnVmZmVyIGVycm9yTWVzc2FnZSwKKwkJCQkJCQkgYm9v bCAqZ3JvdXBfZm91bmQpOwogc3RhdGljIGNoYXIgKnB3ZGZNYXRjaGVzU3RyaW5nKGNoYXIgKmJ1 ZiwgY29uc3QgY2hhciAqdG9rZW4pOwogc3RhdGljIGNoYXIgKnBhc3N3b3JkRnJvbUZpbGUoY29u c3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKnBvcnQsCiAJCQkJCQkJICBjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKnVzZXJuYW1lLApAQCAtNTk5Miw3ICs1OTk4LDE3IEBAIHBh cnNlU2VydmljZUluZm8oUFFjb25uaW5mb09wdGlvbiAqb3B0aW9ucywgUFFFeHBCdWZmZXIgZXJy b3JNZXNzYWdlKQogCWNoYXIJICAgKmVudjsKIAlib29sCQlncm91cF9mb3VuZCA9IGZhbHNlOwog CWludAkJCXN0YXR1czsKKwl2b2lkCSAgICpidWlsdGluX2Zsb3c7CisJaW50CQkJKCpwYXJzZV9z ZXJ2aWNlX2ZpbGVfY3VybCkgKGNvbnN0IGNoYXIgKnNlcnZpY2VGaWxlLCBjb25zdCBjaGFyICpz ZXJ2aWNlLCBQUWNvbm5pbmZvT3B0aW9uICpvcHRpb25zLCBQUUV4cEJ1ZmZlciBlcnJvck1lc3Nh Z2UsIGJvb2wgKmdyb3VwX2ZvdW5kKTsKKwlQR2Nvbm4gKmNvbm47CisJUEdvYXV0aEJlYXJlclJl cXVlc3RWMiAqcmVxdWVzdDsKIAlzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKwljb25zdCBjaGFyICpj b25zdCBtb2R1bGVfbmFtZSA9CisjaWYgZGVmaW5lZChfX2Rhcndpbl9fKQorCQlMSUJESVIgIi9s aWJwcS1vYXV0aCIgRExTVUZGSVg7CisjZWxzZQorCQkibGlicHEtb2F1dGgiIERMU1VGRklYOwor I2VuZGlmCgogCS8qCiAJICogV2UgaGF2ZSB0byBzcGVjaWFsLWNhc2UgdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlIFBHU0VSVklDRSBoZXJlLCBzaW5jZQpAQCAtNjAyNiw2ICs2MDQyLDI0IEBAIHBh cnNlU2VydmljZUluZm8oUFFjb25uaW5mb09wdGlvbiAqb3B0aW9ucywgUFFFeHBCdWZmZXIgZXJy b3JNZXNzYWdlKQogCQkJZ290byBuZXh0X2ZpbGU7CiAJfQoKKwlpZiAoc3RybmNtcChzZXJ2aWNl RmlsZSwgImh0dHAiLCA0KSA9PSAwKXsKKwkJYnVpbHRpbl9mbG93ID0gZGxvcGVuKG1vZHVsZV9u YW1lLCBSVExEX05PVyB8IFJUTERfTE9DQUwpOworCQlpZiAoYnVpbHRpbl9mbG93KQorCQl7CisJ CQlpZiAoKHBhcnNlX3NlcnZpY2VfZmlsZV9jdXJsID0gZGxzeW0oYnVpbHRpbl9mbG93LCAicGFy c2Vfc2VydmljZV9maWxlX2N1cmwiKSkgIT0gTlVMTCkKKwkJCXsKKwkJCQlzdGF0dXMgPSBwYXJz ZV9zZXJ2aWNlX2ZpbGVfY3VybChzZXJ2aWNlRmlsZSwgc2VydmljZSwgb3B0aW9ucywgZXJyb3JN ZXNzYWdlLCAmZ3JvdXBfZm91bmQpOworCQkJCWlmIChncm91cF9mb3VuZCB8fCBzdGF0dXMgIT0g MCkKKwkJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0gZWxzZSB7CisJCQl9CisJCX0gZWxzZSB7CisJ CQlpZiAob2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKCkpCisJCQkJZnByaW50ZihzdGRl cnIsICJmYWlsZWQgZGxvcGVuIGZvciBsaWJwcS1vYXV0aDogJXNcbiIsIGRsZXJyb3IoKSk7CisJ CX0KKworCX0KKwogCXN0YXR1cyA9IHBhcnNlU2VydmljZUZpbGUoc2VydmljZUZpbGUsIHNlcnZp Y2UsIG9wdGlvbnMsIGVycm9yTWVzc2FnZSwgJmdyb3VwX2ZvdW5kKTsKIAlpZiAoZ3JvdXBfZm91 bmQgfHwgc3RhdHVzICE9IDApCiAJCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCAyOGNl M2IzNWVkYS4uMGIyOWZjM2E1NTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZp bGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQCBTVUJE SVJTID0gXAogCQkgIGluZGV4IFwKIAkJICBsaWJwcV9waXBlbGluZSBcCiAJCSAgb2F1dGhfdmFs aWRhdG9yIFwKKwkJICBodHRwX3BnX3NlcnZpY2UgXAogCQkgIHBsc2FtcGxlIFwKIAkJICBzcGdp c3RfbmFtZV9vcHMgXAogCQkgIHRlc3RfYWlvIFwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvaHR0cF9wZ19zZXJ2aWNlL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3Nl cnZpY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY4 ZWJjNDI0ZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3Nl cnZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSwzNyBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMg TWFrZWZpbGUgZm9yIHNyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yCisjCisjIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorIworIyBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci9NYWtlZmlsZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUEdGSUxFREVTQyA9ICJodHRw X3BnX3NlcnZpY2UgLSB0ZXN0IGh0dHBfc2VydmljZSBtb2R1bGUiCisKK1BHQVBQSUNPTiA9IHdp bjMyCisKK1BHX0NQUEZMQUdTID0gLUkkKGxpYnBxX3NyY2RpcikKK1BHX0xJQlNfSU5URVJOQUwg Kz0gJChsaWJwcV9wZ3BvcnQpCisKK05PX0lOU1RBTExDSEVDSyA9IDEKKworVEFQX1RFU1RTID0g MQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hl bGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0g c3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4u Ly4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRl ICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworCitleHBvcnQgUFlUSE9O CitleHBvcnQgd2l0aF9saWJjdXJsCitleHBvcnQgd2l0aF9weXRob24KKworZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL21lc29uLmJ1aWxkIGIvc3Jj L3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvbWVzb24uYnVpbGQKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM4YWNlNGFhYTEwCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwx NyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAnaHR0cF9wZ19zZXJ2aWNlJywKKyAgJ3Nk JzogbWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVp bGRfZGlyKCksCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2h0dHBf c2VydmljZV9maWxlLnBsJywKKyAgICBdLAorICAgICdlbnYnOiB7CisgICAgICAnUFlUSE9OJzog cHl0aG9uLnBhdGgoKSwKKyAgICAgICd3aXRoX2xpYmN1cmwnOiBsaWJjdXJsLmZvdW5kKCkgPyAn eWVzJyA6ICdubycsCisgICAgICAnd2l0aF9weXRob24nOiAneWVzJywKKyAgICB9LAorICB9LAor fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvdC8wMDFfaHR0 cF9zZXJ2aWNlX2ZpbGUucGwgYi9zcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2VydmljZS90LzAw MV9odHRwX3NlcnZpY2VfZmlsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uZGJiNDVlZTQ5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2h0 dHBfcGdfc2VydmljZS90LzAwMV9odHRwX3NlcnZpY2VfZmlsZS5wbApAQCAtMCwwICsxLDExNyBA QAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIEZpbmRC aW47Cit1c2UgbGliICRGaW5kQmluOjpSZWFsQmluOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwor Cit1c2UgUGdIdHRwU2VydmljZTo6U2VydmVyOworCitpZiAoJEVOVnt3aXRoX2xpYmN1cmx9IG5l ICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0hUVFAgc2VydmljZSBmaWxlIG5vdCBzdXBw b3J0ZWQgYnkgdGhpcyBidWlsZCc7Cit9CisKK2lmICgkRU5We3dpdGhfcHl0aG9ufSBuZSAneWVz JykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdIVFRQIHNlcnZpY2UgdGVzdHMgcmVxdWlyZSAtLXdp dGgtcHl0aG9uIHRvIHJ1bic7Cit9CisKK215ICR0ZCA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz Ojp0ZW1wZGlyOworCitteSAkbm9kZV9kdW1teSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnbm9kZV9kdW1teScpOworJG5vZGVfZHVtbXktPmluaXQ7CisKK215ICRub2RlID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2Rl LT5zdGFydDsKKworIyBXaW5kb3dzIHZzIG5vbi1XaW5kb3dzOiBDUkxGIHZzIExGIGZvciB0aGUg ZmlsZSdzIG5ld2xpbmUsIHJlbHlpbmcgb24KKyMgdGhlIGZhY3QgdGhhdCBsaWJwcSB1c2VzIGZn ZXRzKCkgd2hlbiByZWFkaW5nIHRoZSBsaW5lcyBvZiBhIHNlcnZpY2UgZmlsZS4KK215ICRuZXds aW5lID0gIlxuIjsKKworIyBDcmVhdGUgdGhlIHNldCBvZiBzZXJ2aWNlIGZpbGVzIHVzZWQgaW4g dGhlIHRlc3RzLgorIyBGaWxlIHRoYXQgaW5jbHVkZXMgYSB2YWxpZCBzZXJ2aWNlIG5hbWUsIHRo YXQgdXNlcyBhIGRlY29tcG9zZWQgY29ubmVjdGlvbgorIyBzdHJpbmcgZm9yIGl0cyBjb250ZW50 cywgc3BsaXQgb24gc3BhY2VzLgorbXkgJHNydmZpbGVfdmFsaWQgPSAiJHRkL3BnX3NlcnZpY2Vf dmFsaWQuY29uZiI7CithcHBlbmRfdG9fZmlsZSgkc3J2ZmlsZV92YWxpZCwgIltteV9zcnZdIik7 CithcHBlbmRfdG9fZmlsZSgkc3J2ZmlsZV92YWxpZCwgJG5ld2xpbmUpOworYXBwZW5kX3RvX2Zp bGUoJHNydmZpbGVfdmFsaWQsICJwb3J0PSIpOworYXBwZW5kX3RvX2ZpbGUoJHNydmZpbGVfdmFs aWQsICRub2RlLT5wb3J0KCkpOworYXBwZW5kX3RvX2ZpbGUoJHNydmZpbGVfdmFsaWQsICRuZXds aW5lKTsKK2FwcGVuZF90b19maWxlKCRzcnZmaWxlX3ZhbGlkLCAiaG9zdD0iKTsKK2FwcGVuZF90 b19maWxlKCRzcnZmaWxlX3ZhbGlkLCAkbm9kZS0+aG9zdCgpKTsKK2FwcGVuZF90b19maWxlKCRz cnZmaWxlX3ZhbGlkLCAkbmV3bGluZSk7CithcHBlbmRfdG9fZmlsZSgkc3J2ZmlsZV92YWxpZCwg ImRibmFtZT1wb3N0Z3JlcyIpOworYXBwZW5kX3RvX2ZpbGUoJHNydmZpbGVfdmFsaWQsICRuZXds aW5lKTsKKworIyBGaWxlIGRlZmluZWQgd2l0aCBubyBjb250ZW50cywgdXNlZCBhcyBkZWZhdWx0 IHZhbHVlIGZvciBQR1NFUlZJQ0VGSUxFLAorIyBzbyBhcyBubyBsb29rdXAgaXMgYXR0ZW1wdGVk IGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCitteSAkc3J2ZmlsZV9lbXB0eSA9ICIkdGQv cGdfc2VydmljZV9lbXB0eS5jb25mIjsKK2FwcGVuZF90b19maWxlKCRzcnZmaWxlX2VtcHR5LCAn Jyk7CisKK215ICRzZXJ2ZXIgPSBQZ0h0dHBTZXJ2aWNlOjpTZXJ2ZXItPm5ldygpOworJHNlcnZl ci0+cnVuKCRzcnZmaWxlX3ZhbGlkKTsKKworbXkgJHBvcnQgPSAkc2VydmVyLT5wb3J0OworbXkg JGlzc3VlciA9ICJodHRwOi8vMTI3LjAuMC4xOiRwb3J0IjsKKworIyBTZXQgdGhlIGZhbGxiYWNr IGRpcmVjdG9yeSBsb29rdXAgb2YgdGhlIHNlcnZpY2UgZmlsZSB0byB0aGUgdGVtcG9yYXJ5Cisj IGRpcmVjdG9yeSBvZiB0aGlzIHRlc3QuICBQR1NZU0NPTkZESVIgaXMgdXNlZCBpZiB0aGUgc2Vy dmljZSBmaWxlCisjIGRlZmluZWQgaW4gUEdTRVJWSUNFRklMRSBjYW5ub3QgYmUgZm91bmQsIG9y IHdoZW4gYSBzZXJ2aWNlIGZpbGUgaXMKKyMgZm91bmQgYnV0IG5vdCB0aGUgc2VydmljZSBuYW1l LgorbG9jYWwgJEVOVntQR1NZU0NPTkZESVJ9ID0gJHRkOworCisjIEZvcmNlIFBHU0VSVklDRUZJ TEUgdG8gYSBkZWZhdWx0IGxvY2F0aW9uLCBzbyBhcyB0aGlzIHRlc3QgbmV2ZXIKKyMgdHJpZXMg dG8gbG9vayBhdCBhIGhvbWUgZGlyZWN0b3J5LiAgVGhpcyB2YWx1ZSBuZWVkcyB0byByZW1haW4K KyMgYXQgdGhlIHRvcCBvZiB0aGlzIHNjcmlwdCBiZWZvcmUgcnVubmluZyBhbnkgdGVzdHMsIGFu ZCBzaG91bGQgbmV2ZXIKKyMgYmUgY2hhbmdlZC4KK2xvY2FsICRFTlZ7UEdTRVJWSUNFRklMRX0g PSAiJHNydmZpbGVfZW1wdHkiOworCit7CisJbG9jYWwgJEVOVntQR1NFUlZJQ0VGSUxFfSA9ICRp c3N1ZXI7CisKKwkkbm9kZV9kdW1teS0+Y29ubmVjdF9vaygKKwkJJ3NlcnZpY2U9bXlfc3J2JywK KwkJJ2Nvbm5lY3Rpb24gd2l0aCBjb3JyZWN0ICJzZXJ2aWNlIiBzdHJpbmcgYW5kIFBHU0VSVklD RUZJTEUnLAorCQlzcWwgPT4gIlNFTEVDVCAnY29ubmVjdDFfMSciLAorCQlleHBlY3RlZF9zdGRv dXQgPT4gcXIvY29ubmVjdDFfMS8pOworCisJJG5vZGVfZHVtbXktPmNvbm5lY3Rfb2soCisJCSdw b3N0Z3JlczovLz9zZXJ2aWNlPW15X3NydicsCisJCSdjb25uZWN0aW9uIHdpdGggY29ycmVjdCAi c2VydmljZSIgVVJJIGFuZCBQR1NFUlZJQ0VGSUxFJywKKwkJc3FsID0+ICJTRUxFQ1QgJ2Nvbm5l Y3QxXzInIiwKKwkJZXhwZWN0ZWRfc3Rkb3V0ID0+IHFyL2Nvbm5lY3QxXzIvKTsKKworCSRub2Rl X2R1bW15LT5jb25uZWN0X2ZhaWxzKAorCQknc2VydmljZT1ub25fZXhpc3RhbnRfc2VydmljZScs CisJCSdjb25uZWN0aW9uIHdpdGggaW5jb3JyZWN0IFBHU0VSVklDRSBhbmQgY29ycmVjdCBQR1NF UlZJQ0VGSUxFJywKKwkJZXhwZWN0ZWRfc3Rkb3V0ID0+CisJCSAgcXIvZGVmaW5pdGlvbiBvZiBz ZXJ2aWNlICJ1bmRlZmluZWQtc2VydmljZSIgbm90IGZvdW5kLyk7CisKKwkkbm9kZV9kdW1teS0+ Y29ubmVjdF9mYWlscygKKwkJJycsCisJCSdjb25uZWN0aW9uIHdpdGggYmxhbmsgc3RyaW5nJyk7 CisKKwlsb2NhbCAkRU5We1BHU0VSVklDRX0gPSAnbXlfc3J2JzsKKwkkbm9kZV9kdW1teS0+Y29u bmVjdF9vaygKKwkJJycsCisJCSdjb25uZWN0aW9uIHdpdGggY29ycmVjdCBQR1NFUlZJQ0UgYW5k IFBHU0VSVklDRUZJTEUnLAorCQlzcWwgPT4gIlNFTEVDVCAnY29ubmVjdDFfMyciLAorCQlleHBl Y3RlZF9zdGRvdXQgPT4gcXIvY29ubmVjdDFfMy8pOworCisJbG9jYWwgJEVOVntQR1NFUlZJQ0V9 ID0gJ3VuZGVmaW5lZC1zZXJ2aWNlJzsKKwkkbm9kZV9kdW1teS0+Y29ubmVjdF9mYWlscygKKwkJ JycsCisJCSdjb25uZWN0aW9uIHdpdGggaW5jb3JyZWN0IFBHU0VSVklDRSBhbmQgUEdTRVJWSUNF RklMRScsCisJCWV4cGVjdGVkX3N0ZG91dCA9PgorCQkgIHFyL2RlZmluaXRpb24gb2Ygc2Vydmlj ZSAidW5kZWZpbmVkLXNlcnZpY2UiIG5vdCBmb3VuZC8pOworfQorJHNlcnZlci0+c3RvcDsKKwor JG5vZGUtPnRlYXJkb3duX25vZGU7CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvdC9QZ0h0dHBTZXJ2aWNlL1NlcnZlci5wbSBi L3NyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvUGdIdHRwU2VydmljZS9TZXJ2ZXIu cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUzZDY3YWYzYjMzCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9odHRwX3BnX3NlcnZpY2UvdC9QZ0h0 dHBTZXJ2aWNlL1NlcnZlci5wbQpAQCAtMCwwICsxLDE0MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKz1wb2QKKworPWhlYWQx IE5BTUUKKworUGdIdHRwU2VydmljZTo6U2VydmVyIC0gcnVucyBhIG1vY2sgcGdfc2VydmljZSBI VFRQIHNlcnZlciBmb3IgdGVzdGluZworCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgUGdIdHRw U2VydmljZTo6U2VydmVyOworCisgIG15ICRzZXJ2ZXIgPSBQZ0h0dHBTZXJ2aWNlOjpTZXJ2ZXIt Pm5ldygpOworICAkc2VydmVyLT5ydW47CisKKyAgbXkgJHBvcnQgPSAkc2VydmVyLT5wb3J0Owor ICBteSAkaXNzdWVyID0gImh0dHA6Ly8xMjcuMC4wLjE6JHBvcnQiOworCisgICMgdGVzdCBhZ2Fp bnN0ICRpc3N1ZXIuLi4KKworICAkc2VydmVyLT5zdG9wOworCis9aGVhZDEgREVTQ1JJUFRJT04K KworVGhpcyBpcyBnbHVlIEFQSSBiZXR3ZWVuIHRoZSBQZXJsIHRlc3RzIGFuZCB0aGUgUHl0aG9u IHBnX3NlcnZpY2Ugc2VydmVyCitkYWVtb24gaW1wbGVtZW50ZWQgaW4gdC9odHRwX3NlcnZpY2Vf c2VydmVyLnB5LiAoUHl0aG9uIGhhcyBhIGZhaXJseSB1c2FibGUgSFRUUCBzZXJ2ZXIKK2luIGl0 cyBzdGFuZGFyZCBsaWJyYXJ5LCBzbyB0aGUgaW1wbGVtZW50YXRpb24gd2FzIHBvcnRlZCBmcm9t IFBlcmwuKQorCitUaGlzIHBnX3NlcnZpY2Ugc2VydmVyIGRvZXMgbm90IHVzZSBUTFMgKGl0IGlt cGxlbWVudHMgYSBub25zdGFuZGFyZCwgdW5zYWZlCitpc3N1ZXIgYXQgImh0dHA6Ly8xMjcuMC4w LjE6PHBvcnQ+IiksIHNvIGxpYnBxIGluIHBhcnRpY3VsYXIgd2lsbCBuZWVkIHRvIHNldAorUEdI VFRQU0VSVklDRUJVRz1VTlNBRkUgdG8gYmUgYWJsZSB0byB0YWxrIHRvIGl0LgorCis9Y3V0CisK K3BhY2thZ2UgUGdIdHRwU2VydmljZTo6U2VydmVyOworCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3Ry aWN0OwordXNlIFNjYWxhcjo6VXRpbDsKK3VzZSBUZXN0OjpNb3JlOworCis9cG9kCisKKz1oZWFk MSBNRVRIT0RTCisKKz1vdmVyCisKKz1pdGVtIFBnSHR0cFNlcnZpY2U6OlNlcnZlcjo6U2VydmVy LT5uZXcoKQorCitDcmVhdGUgYSBuZXcgSFRUUCBQRyBTZXJ2aWNlIFNlcnZlciBvYmplY3QuCisK Kz1jdXQKKworc3ViIG5ldworeworCW15ICRjbGFzcyA9IHNoaWZ0OworCisJbXkgJHNlbGYgPSB7 fTsKKwlibGVzcygkc2VsZiwgJGNsYXNzKTsKKworCXJldHVybiAkc2VsZjsKK30KKworPXBvZAor Cis9aXRlbSAkc2VydmVyLT5wb3J0KCkKKworUmV0dXJucyB0aGUgcG9ydCBpbiB1c2UgYnkgdGhl IHNlcnZlci4KKworPWN1dAorCitzdWIgcG9ydAoreworCW15ICRzZWxmID0gc2hpZnQ7CisKKwly ZXR1cm4gJHNlbGYtPnsncG9ydCd9OworfQorCis9cG9kCisKKz1pdGVtICRzZXJ2ZXItPnJ1bigp CisKK1J1bnMgdGhlIGh0dHAgcGcgc2VydmljZSBzZXJ2ZXIgZGFlbW9uIGluIHQvaHR0cF9zZXJ2 aWNlX3NlcnZlci5weS4KKworPWN1dAorCitzdWIgcnVuCit7CisJbXkgJHNlbGYgPSBzaGlmdDsK KwlteSAkc2VydmljZV9maWxlX3BhdGggPSBzaGlmdDsKKwlteSAkcG9ydDsKKworCXByaW50ICRF TlZ7UFlUSE9OfTsKKwlteSAkcGlkID0gb3BlbihteSAkcmVhZF9maCwgIi18IiwgInB5dGhvbiIs ICJ0L2h0dHBfc2VydmljZV9zZXJ2ZXIucHkiLCAkc2VydmljZV9maWxlX3BhdGgpCisJICBvciBk aWUgImZhaWxlZCB0byBzdGFydCBodHRwIHBnX3NlcnZpY2Ugc2VydmVyOiAkISI7CisKKwkjIEdl dCB0aGUgcG9ydCBudW1iZXIgZnJvbSB0aGUgZGFlbW9uLiBJdCBjbG9zZXMgc3Rkb3V0IGFmdGVy d2FyZHM7IHRoYXQgd2F5CisJIyB3ZSBjYW4gc2x1cnAgaW4gdGhlIGVudGlyZSBjb250ZW50cyBo ZXJlIHJhdGhlciB0aGFuIHdvcnJ5aW5nIGFib3V0IHRoZQorCSMgbnVtYmVyIG9mIGJ5dGVzIHRv IHJlYWQuCisJJHBvcnQgPSBkbyB7IGxvY2FsICQvID0gdW5kZWY7IDwkcmVhZF9maD4gfQorCSAg Ly8gZGllICJmYWlsZWQgdG8gcmVhZCBwb3J0IG51bWJlcjogJCEiOworCWNob21wICRwb3J0Owor CWRpZSAic2VydmVyIGRpZCBub3QgYWR2ZXJ0aXNlIGEgdmFsaWQgcG9ydCIKKwkgIHVubGVzcyBT Y2FsYXI6OlV0aWw6Omxvb2tzX2xpa2VfbnVtYmVyKCRwb3J0KTsKKworCSRzZWxmLT57J3BpZCd9 ID0gJHBpZDsKKwkkc2VsZi0+eydwb3J0J30gPSAkcG9ydDsKKwkkc2VsZi0+eydjaGlsZCd9ID0g JHJlYWRfZmg7CisKKwlub3RlKCJIVFRQIHBnX3NlcnZpY2UgKFBJRCAkcGlkKSBpcyBsaXN0ZW5p bmcgb24gcG9ydCAkcG9ydFxuIik7Cit9CisKKz1wb2QKKworPWl0ZW0gJHNlcnZlci0+c3RvcCgp CisKK1NlbmRzIFNJR1RFUk0gdG8gdGhlIGh0dHAgcGdfc2VydmljZSBzZXJ2ZXIgYW5kIHdhaXRz IGZvciBpdCB0byBleGl0LgorCis9Y3V0CisKK3N1YiBzdG9wCit7CisJbXkgJHNlbGYgPSBzaGlm dDsKKworCW5vdGUoIlNlbmRpbmcgU0lHVEVSTSB0byBodHRwIHBnX3NlcnZpY2UgUElEOiAkc2Vs Zi0+eydwaWQnfVxuIik7CisKKwlraWxsKDE1LCAkc2VsZi0+eydwaWQnfSk7CisJJHNlbGYtPnsn cGlkJ30gPSB1bmRlZjsKKworCSMgQ2xvc2luZyB0aGUgcG9wZW4oKSBoYW5kbGUgd2FpdHMgZm9y IHRoZSBwcm9jZXNzIHRvIGV4aXQuCisJY2xvc2UoJHNlbGYtPnsnY2hpbGQnfSk7CisJJHNlbGYt PnsnY2hpbGQnfSA9IHVuZGVmOworfQorCis9cG9kCisKKz1iYWNrCisKKz1jdXQKKworMTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvaHR0cF9zZXJ2aWNl X3NlcnZlci5weSBiL3NyYy90ZXN0L21vZHVsZXMvaHR0cF9wZ19zZXJ2aWNlL3QvaHR0cF9zZXJ2 aWNlX3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmJl MWI5NGU2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL2h0dHBfcGdfc2Vy dmljZS90L2h0dHBfc2VydmljZV9zZXJ2ZXIucHkKQEAgLTAsMCArMSw3MyBAQAorIyEgL3Vzci9i aW4vZW52IHB5dGhvbjMKKyMKKyMgQSBtb2NrIGh0dHAgcGdfc2VydmljZSBzZXJ2ZXIsIGRlc2ln bmVkIHRvIGJlIGludm9rZWQgZnJvbQorIyBQZ0h0dHBTZXJ2aWNlL1NlcnZlci5wbS4gVGhpcyBs aXN0ZW5zIG9uIGFuIGVwaGVtZXJhbCBwb3J0IG51bWJlciAocHJpbnRlZCB0byBzdGRvdXQKKyMg c28gdGhhdCB0aGUgUGVybCB0ZXN0cyBjYW4gY29udGFjdCBpdCkgYW5kIHJ1bnMgYXMgYSBkYWVt b24gdW50aWwgaXQgaXMKKyMgc2lnbmFsZWQuCisjCisKK2ltcG9ydCBodHRwLnNlcnZlcgoraW1w b3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGV4dHdyYXAKKworCitjbGFzcyBTZXJ2aWNlRmls ZUhhbmRsZXIoaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiCisg ICAgQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VydmljZSBmaWxlIHNlcnZlci4gVGhlIEFQ SSBpcworICAgIGluaGVyaXRhbmNlLWJhc2VkLCB3aXRoIGFuIGVudHJ5IHBvaW50IGF0IGRvX0dF VCgpLiBTZWUgdGhlCisgICAgZG9jdW1lbnRhdGlvbiBmb3IgQmFzZUhUVFBSZXF1ZXN0SGFuZGxl ci4KKyAgICAiIiIKKworICAgIEpzb25PYmplY3QgPSBkaWN0W3N0ciwgb2JqZWN0XSAgIyBUeXBl QWxpYXMgaXMgbm90IGF2YWlsYWJsZSB1bnRpbCAzLjEwCisKKworICAgIGRlZiBkb19HRVQoc2Vs Zik6CisgICAgICAgIHNlbGYuX3Jlc3BvbnNlX2NvZGUgPSAyMDAKKworICAgICAgICBzZWxmLl9z ZW5kX3NlcnZpY2VfZmlsZSgpCisKKyAgICBkZWYgX3NlbmRfc2VydmljZV9maWxlKHNlbGYpIC0+ IE5vbmU6CisgICAgICAgICIiIgorICAgICAgICBTZW5kcyB0aGUgcHJvdmlkZWQgSlNPTiBkaWN0 IGFzIGFuIGFwcGxpY2F0aW9uL2pzb24gcmVzcG9uc2UuCisgICAgICAgIHNlbGYuX3Jlc3BvbnNl X2NvZGUgY2FuIGJlIG1vZGlmaWVkIHRvIHNlbmQgSlNPTiBlcnJvciByZXNwb25zZXMuCisgICAg ICAgICIiIgorCisgICAgICAgIHNlcnZpY2VfZmlsZV9wYXRoID0gc3lzLmFyZ3ZbMV0KKyAgICAg ICAgd2l0aCBvcGVuKHNlcnZpY2VfZmlsZV9wYXRoLCAiciIpIGFzIGZpbGU6CisgICAgICAgICAg ICBzZXJ2aWNlX2ZpbGVfY29udGVudCA9IGZpbGUucmVhZCgpCisKKyAgICAgICAgcmVzcCA9IHNl cnZpY2VfZmlsZV9jb250ZW50LmVuY29kZSgpCisgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoInNl bmRpbmcgc3RyaW5nIHJlc3BvbnNlOiAlcyIsIHJlc3ApCisKKyAgICAgICAgc2VsZi5zZW5kX3Jl c3BvbnNlKHNlbGYuX3Jlc3BvbnNlX2NvZGUpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNv bnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIikKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRl cigiQ29udGVudC1MZW5ndGgiLCBzdHIobGVuKHJlc3ApKSkKKyAgICAgICAgc2VsZi5lbmRfaGVh ZGVycygpCisKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwKQorCisKK2RlZiBtYWluKCk6 CisgICAgIiIiCisgICAgU3RhcnRzIHRoZSBQZ0h0dHBTZXJ2aWNlIHNlcnZlciBvbiBsb2NhbGhv c3QuIFRoZSBlcGhlbWVyYWwgcG9ydCBpbiB1c2Ugd2lsbAorICAgIGJlIHByaW50ZWQgdG8gc3Rk b3V0LgorICAgICIiIgorCisgICAgcyA9IGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIoKCIxMjcuMC4w LjEiLCAwKSwgU2VydmljZUZpbGVIYW5kbGVyKQorCisgICAgIyBHaXZlIHRoZSBwYXJlbnQgdGhl IHBvcnQgbnVtYmVyIHRvIGNvbnRhY3QgKHRoaXMgaXMgYWxzbyB0aGUgc2lnbmFsIHRoYXQKKyAg ICAjIHdlJ3JlIHJlYWR5IHRvIHJlY2VpdmUgcmVxdWVzdHMpLgorICAgIHBvcnQgPSBzLnNvY2tl dC5nZXRzb2NrbmFtZSgpWzFdCisgICAgcHJpbnQocG9ydCkKKworICAgICMgc3Rkb3V0IGlzIGNs b3NlZCB0byBhbGxvdyB0aGUgcGFyZW50IHRvIGp1c3QgInJlYWQgdG8gdGhlIGVuZCIuCisgICAg c3Rkb3V0ID0gc3lzLnN0ZG91dC5maWxlbm8oKQorICAgIHN5cy5zdGRvdXQuY2xvc2UoKQorICAg IG9zLmNsb3NlKHN0ZG91dCkKKworICAgIHMuc2VydmVfZm9yZXZlcigpICAjIHdlIGV4cGVjdCBv dXIgcGFyZW50IHRvIHNlbmQgYSB0ZXJtaW5hdGlvbiBzaWduYWwKKworCitpZiBfX25hbWVfXyA9 PSAiX19tYWluX18iOgorICAgIG1haW4oKQotLQoyLjUxLjIKCg== --000000000000734ca0064dcf682c--