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 1w0rMC-002GpM-1n for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 01:30:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0rMA-0017JD-01 for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 01:30:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0rM9-0017J4-1Q for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 01:30:26 +0000 Received: from mail-ot1-x335.google.com ([2607:f8b0:4864:20::335]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0rM7-00000001rOY-0CrW for pgsql-hackers@postgresql.org; Fri, 13 Mar 2026 01:30:25 +0000 Received: by mail-ot1-x335.google.com with SMTP id 46e09a7af769-7d75d698ee6so1000265a34.3 for ; Thu, 12 Mar 2026 18:30:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773365422; cv=none; d=google.com; s=arc-20240605; b=ONPPvUtk9Hy/kM24QXxeNkvxe+n3fhufXhGR2se0oMSHCI/cq0jIhig2z9abQk4H+J pHg9o5ny0+/ywvR0szgJFzCzcUdKI6zEbHEpxLCB1J2+ikaVxLiuf+UsXsLdrWqBkdF6 YsexS1Tz+RAczXxWZ+x1tSKV7swCi8dorEudbsa55Iaeo5hScqFBV4eq+qAAPDPJ5U3C RNDqkXnoOP0M5yq4V97y1YZcp4ZtogXAqqfH9z5LI0ufUFG9uaGPCL+w/HXGK6ae4Wpl auhlKHd+EWUAAuebZCmrYlDRIE0Dfrt31sGLFRyTDnfugvIayp+gsEzvR3/3WLvP3SwQ HwTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=9Z386wDQ1hRdc5M0jDPd02W6xVNeJmcn1g4zhEVOR+g=; fh=znSfkOrsktQxFJJh31gRV6NPGpSVDwdFwe8GEZq3090=; b=QXERMvP/MpmJZw8XbE1IWpMq88kUFpRAgLgT/C3nUsL3IYaHQfJ7TR++UxfYvQ2A2G fnOsn970jgxv4t+HZUSuuEcSL3mjP0WP/W2GZ0kaEurf/AXzoDTiqQ9ZXgsxg3P1Isyh eupUSN4zc5UjgMYE5ZIgks2JA/gR0TOutuaMlS6xwEPXHrRDM7oIEK1dwy1L8/7nGPW3 CaKowsfRkoeDP8ywwF+2XmpYJ2Rb0Ez30V+J8Jw+m8ohckDfO2sCzBWNtb7gH0o3P/TB AIWe0fiG2Vj9HmXubDMri9qWphoCWlxgjudu0+HRNXMfMdJmaCAHsSztPqjG7i/5FCvh 3Vqw==; 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=20230601; t=1773365422; x=1773970222; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9Z386wDQ1hRdc5M0jDPd02W6xVNeJmcn1g4zhEVOR+g=; b=PfeiKs4S48vBg7dVJ4dhw4PvwbZnpvN0kZ1mO9CDMsapvNQINbZOxzGGxGJI1+y5Vz jMeAtrC353Jyqgx+BpNfvykuVRWASJlmDMpKPNpMOmz9u1N+ScO+fv7Pw/W/WIMy9CcM ToxebtouaoKNPEomEdi//g0pqiG/EH40lNp+CxpD//6clLkupyMxy+qLQgi90+r7RZxS 5943wgp30UxMYqODBgWLRbu9PHHw5ztWXUY7gtRGNKyc0m+hgwyMowFUUiBkiZ4A//c5 5WePpJr6XY8Dh6aORUB8QjHYBMWOWLuHj9l2gSYJxZgkLATXzQpgeH8ndaOVbL+FBPB+ sWfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773365422; x=1773970222; h=cc: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=9Z386wDQ1hRdc5M0jDPd02W6xVNeJmcn1g4zhEVOR+g=; b=smi9zbRdmuytIjvStYoGIZzGKo3LHLWpJ1344tWIrVzdHJtawaS17x52PCel1gXpMU bj6Ww/Cljr5d8iJ8sC2Du91AR2w2ln0mqGkdn/qk9i9hm7/BzkhiFSvSfvyPi0EcwdGN 9PXlZ0+62NY9WrTaEJr0u046DfXfiDJAa7yb1TXGos8r8mvI1yAkhfITgrpt7kp2/jGv PbWbvlnJFeou1a4dpfV7SeRW03aB/4R/c0rD19hC8vG6euTw4M1p2Gk8Fm/xrIVxEgTO 6+09/XpM/mnnEu16XfCns94Gvu0J+DnX3WbT9d32jckhKw18lSzj1g2fE7oXP75hOLhS u8yQ== X-Forwarded-Encrypted: i=1; AJvYcCWGS4U+iwIeKNcjtQDWrvNJK6cGSWEZuKi9ogdyP3a3uNKuBQnLARXyOTqNZggBDHOYVuGsxQpuzb0PRWvc@postgresql.org X-Gm-Message-State: AOJu0Yyxzs+Yr3lg1ZMu+QSjpw80AnqGrpb/tuMfcZMAzVcpxjVjTAnq s25oHlIKcAurD+BqMam9VF7z5ctBWvbBhdp7oazoGCVY9RT3C3R3LA6f8cGn9v9nhaXSTkBEPPp kU7+KFog5bcTwizS56DzURbult1fSGO8= X-Gm-Gg: ATEYQzzeCeIwZmmAJ06J7wSiQCsM3PLKc0rOo3m/zIzF2Q+3MFRhehGYaY6PkSuareX +7dzR0Y/Dl+MPsegBpBHtyQ2FM4A6N9O4lae63wCL3MuHnII6xpNIM9MCrGn3SZfebx12rjGpE+ VUGZtdZdazvyeShqtljKTP2w83s3u729bzavq0ZAjl0yCIm4aglZ6L20q3hyIbhKtmf6gvJetmf kmDHW/WH79wOZMm1rLvpxdoqddkF2dHSO2qzYXV X-Received: by 2002:a05:6820:4df3:b0:67b:c02e:bea5 with SMTP id 006d021491bc7-67bdaa2e13bmr973926eaf.44.1773365420377; Thu, 12 Mar 2026 18:30:20 -0700 (PDT) MIME-Version: 1.0 References: <235381750793454@mail.yandex.ru> <817CE6D9-C5E3-4625-B001-4515C72A1DD8@yandex-team.ru> In-Reply-To: <817CE6D9-C5E3-4625-B001-4515C72A1DD8@yandex-team.ru> From: Andrew Jackson Date: Thu, 12 Mar 2026 20:29:44 -0500 X-Gm-Features: AaiRm53Li7_3GHwC5cqut3rkRkOERVemYghzXaKA6HfxhTr8HNDbUxU8JtgdKVA Message-ID: Subject: Re: Add Option To Check All Addresses For Matching target_session_attr To: Andrey Borodin Cc: Navrotskiy Artem , Vladimir Sitnikov , Dave Page , pgsql-hackers , Evgeny Kuzin Content-Type: multipart/mixed; boundary="000000000000f0a8ae064cddcfe6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f0a8ae064cddcfe6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I updated the patch in accordance with your feedback. - The variable name has been changed to try_all_addrs, I think this makes sense as it is shorter and coincides with the variables try_next_addr and try_next_host even though it doesn't perfectly convey its relationship to target_session_attrs. - I fixed the typos and the inaccurate assertion messages in the 008_ test = file - I refactored how the try_all_addrs variable flows in the code to coincide with how load_balance_type is handled. try_all_attrs contains the unparsed value while try_all_addrs_type contains the parsed value of type enum PGTryAddrType. This may be a bit overkill but it addressed a couple of your bulletpoints above, apologies if I judged incorrectly here. - Changed some of the wording in the docs as it was just wrong. Also changed all references in the docs to reference "try" instead of "check". With regards to the correct load balancing behavior I can think of 2 optio= ns: 1. randomly choose a host and then randomly choose an address within that host. If the current addresses session_attr does not match target_session_attr then move on to next address if any remains in that host and move onto the next random host if no addresses remain. 2. Resolve all addresses in all hosts and randomly select an address from that list. I don't believe that any test cases exist that validate the functionality of a combination of multiple hosts, multiple address within each host, and target session attributes. Happy to add test case coverage over this if it helps get this patch moving. I was also thinking should try_all_addrs input be 0/1 or a more human readable disable/enable or both? On Fri, Mar 6, 2026 at 12:44=E2=80=AFAM Andrey Borodin wrote: > > > > > On 16 Aug 2025, at 04:43, Andrew Jackson w= rote: > > > > Attached is the rebased patch. > > I've took a look into the patch again. > > The behavior and integration with the connection state machine look corre= ct, > and the tests + docs are in good shape. Some notes: > 1. Use a dedicated default "0" for check_all_addrs (not DefaultLoadBalanc= eHosts, > this one is used for load balancing, need more "0"). > 2. Guard the two strcmp(conn->check_all_addrs, "1") uses so they are safe= when > conn->check_all_addrs is NULL. > 3. Fix the test typos in 008 (standby_expeect_traffic and the three =E2= =80=9Con node1=E2=80=9D > messages). > 4. Parse check_all_addrs once into a bool (like load_balance_type) and us= e that > in the connection path for consistency and clarity. > > Now about important part: is the name "check_all_addrs" good? > I've asked LLM after explaining it what the feature does. PFA attached ou= tput. > > Personally, I like "try_all_addrs". > > It's a bit unclear to me how randomization (load balancing) on different > addresses should work. > > > Best regards, Andrey Borodin. > --000000000000f0a8ae064cddcfe6 Content-Type: text/x-patch; charset="US-ASCII"; name="0003-Add-option-to-try-all-addrs-for-target_session.patch" Content-Disposition: attachment; filename="0003-Add-option-to-try-all-addrs-for-target_session.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmo7x6qt0 RnJvbSAzM2Y1ZDBjN2Q2MmFiYjFmZmE4YTliZDhmYzY1OWYxNmU1OGVmOTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21tYW5kZXJLZXluZXMgPGFuZHJld2phY2tzb245NDdAZ21h aWwuY29tYT4KRGF0ZTogU2F0LCAxNyBNYXkgMjAyNSAwODoyOTowMSAtMDUwMApTdWJqZWN0OiBb UEFUQ0hdIEFkZCBvcHRpb24gdG8gdHJ5IGFsbCBhZGRycyBmb3IgdGFyZ2V0X3Nlc3Npb24uCgpU aGUgY3VycmVudCBiZWhhdmlvdXIgb2YgbGlicHEgd2l0aCByZWdhcmQgdG8gc2VhcmNoaW5nCmZv ciBhIG1hdGNoaW5nIHRhcmdldF9zZXNzaW9uX2F0dHJzIGluIGEgbGlzdCBvZiBhZGRycyBpcwp0 aGF0IGFmdGVyIHN1Y2Nlc3NmdWxseSBjb25uZWN0aW5nIHRvIGEgc2VydmVyLCBpZiB0aGUgc2Vy dmVycwpzZXNzaW9uX2F0dHIgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVlc3QgdGFyZ2V0X3Nlc3Np b25fYXR0cnMKbm8gZnV0aGVyIGFkZHJlc3MgaXMgY29uc2lkZXJlZCBpbiB0aGF0IGhvc3QuIFRo aXMgYmVoYXZpb3VyCmlzIGV4dHJlbWVseSBpbmNvbnZlbmllbnQgaW4gZW52aXJvbm1lbnRzIHdo ZXJlIHRoZSB1c2VyIGlzCmF0dGVtcHRpbmcgdG8gaW1wbGVtZW50IGEgaGlnaCBhdmFpbGFiaWxp dHkgc2V0dXAgd2l0aG91dCBoYXZpbmcKdG8gbW9kaWZ5IEROUyByZWNvcmRzIGFmdGVyIGEgdG9w b2xvZ3kgY2hhbmdlIG9yIG1haW50YWluIGEKcHJveHkgc2VydmVyIGxheWVyLgoKVGhpcyBQUiBh ZGRzIGEgY2xpZW50IHNpZGUgb3B0aW9uIGNhbGxlZCB0cnlfYWxsX2FkZHJzLgpXaGVuIHNldCB0 byAxIHRoaXMgb3B0aW9uIHdpbGwgdGVsbCBsaWJwcSB0byBjb250aW51ZSBjaGVja2luZwphbnkg cmVtYWluaW5nIGFkZHJlc3NlcyBldmVuIGlmIHRoZXJlIHdhcyBhIHRhcmdldF9zZXNzaW9uX2F0 dHJzCm1pc21hdGNoIG9uIG9uZSBvZiB0aGVtLgoKQXV0aG9yOiBBbmRyZXcgSmFja3NvbgpSZXZp ZXdlZC1ieTogQW5kcmV5IEJvcm9kaW4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNx bC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBS0s1QmtFU1NjNjlzcDJUaVRXSHZ2T0hDVWV5MHJEV1hT clI5cGlueVJxeWZhbVVZZyU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2xpYnBx LnNnbWwgICAgICAgICAgICAgICAgICAgICAgIHwgIDMzICsrKysrCiBzcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1jb25uZWN0LmMgICAgICAgICAgICAgfCAgNDIgKysrKy0tCiBzcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaCAgICAgICAgICAgICAgfCAgMTIgKysKIC4uLi9saWJwcS90LzAw N190YXJnZXRfc2Vzc2lvbl9hdHRyX2Rucy5wbCAgICB8IDEyOSArKysrKysrKysrKysrKysrKysK IC4uLi90LzAwOF9sb2FkX2JhbGFuY2VfZG5zX3RyeV9hbGxfYWRkcnMucGwgICB8IDEyOCArKysr KysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzMzQgaW5zZXJ0aW9ucygrKSwgMTAgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMvbGlicHEvdC8wMDdf dGFyZ2V0X3Nlc3Npb25fYXR0cl9kbnMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW50ZXJm YWNlcy9saWJwcS90LzAwOF9sb2FkX2JhbGFuY2VfZG5zX3RyeV9hbGxfYWRkcnMucGwKCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbCBiL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21s CmluZGV4IDViZjU5YTE5ODU1Li4yZTJmMDBkYWNhNCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L2xpYnBxLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwKQEAgLTI1NjgsNiArMjU2 OCwzOSBAQCBwb3N0Z3Jlc3FsOi8vJTJGdmFyJTJGbGliJTJGcG9zdGdyZXNxbC9kYm5hbWUKICAg ICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9ImxpYnBxLWNvbm5lY3QtdHJ5LWFsbC1hZGRycyIgeHJlZmxhYmVsPSJ0cnlfYWxsX2Fk ZHJzIj4KKyAgICAgIDx0ZXJtPjxsaXRlcmFsPnRyeV9hbGxfYWRkcnM8L2xpdGVyYWw+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBDb250cm9scyB3aGV0 aGVyIG9yIG5vdCBhbGwgYWRkcmVzc2VzIHdpdGhpbiBhIGhvc3RuYW1lIGFyZSB0cmllZCB3aGVu IGF0dGVtcHRpbmcgdG8gCisJbWFrZSBhIGNvbm5lY3Rpb24gd2l0aCBhIG1hdGNoaW5nIDx4cmVm IGxpbmtlbmQ9ImxpYnBxLWNvbm5lY3QtdGFyZ2V0LXNlc3Npb24tYXR0cnMiLz4uCisKKyAgICAg ICAgVGhlcmUgYXJlIHR3byBtb2RlczoKKyAgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+MDwvbGl0ZXJhbD4gKGRl ZmF1bHQpPC90ZXJtPgorICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgPHBhcmE+Cisg ICAgICAgICAgICBJZiBhIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiBpcyBtYWRlIGFuZCB0aGF0IGNv bm5lY3Rpb24gaXMgZm91bmQgdG8gaGF2ZSBhCisgICAgICAgICAgICBtaXNtYXRjaGluZyA8eHJl ZiBsaW5rZW5kPSJsaWJwcS1jb25uZWN0LXRhcmdldC1zZXNzaW9uLWF0dHJzIi8+IGRvIG5vdCB0 cnkKKyAgICAgICAgICAgIGFueSBhZGRpdGlvbmFsIGFkZHJlc3NlcyBhbmQgbW92ZSBvbnRvIHRo ZSBuZXh0IGhvc3QgaWYgb25lIHdhcyBwcm92aWRlZC4KKyAgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx2 YXJsaXN0ZW50cnk+CisgICAgICAgICAgPHRlcm0+PGxpdGVyYWw+MTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIElm IGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIGlzIG1hZGUgYW5kIHRoYXQgY29ubmVjdGlvbiBpcyBm b3VuZCB0byBoYXZlIGEKKyAgICAgICAgICAgIG1pc21hdGNoaW5nIDx4cmVmIGxpbmtlbmQ9Imxp YnBxLWNvbm5lY3QtdGFyZ2V0LXNlc3Npb24tYXR0cnMiLz4gcHJvY2VlZAorICAgICAgICAgICAg dG8gdHJ5IGFueSBhZGRpdGlvbmFsIGFkZHJlc3Nlcy4KKyAgICAgICAgICAgPC9wYXJhPgorICAg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgICAgPC92 YXJpYWJsZWxpc3Q+CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CiAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICA8L3BhcmE+CiAgIDwvc2VjdDI+ CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXggYTNkMTI5MzFmZmYuLmFhYWM0NTY1OTM0 IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC0xMjUsNiArMTI1LDcgQEAgc3RhdGlj IGludAlsZGFwU2VydmljZUxvb2t1cChjb25zdCBjaGFyICpwdXJsLCBQUWNvbm5pbmZvT3B0aW9u ICpvcHRpb25zLAogI2VuZGlmCiAjZGVmaW5lIERlZmF1bHRUYXJnZXRTZXNzaW9uQXR0cnMJImFu eSIKICNkZWZpbmUgRGVmYXVsdExvYWRCYWxhbmNlSG9zdHMJImRpc2FibGUiCisjZGVmaW5lIERl ZmF1bHRUcnlBbGxBZGRycwkiMCIKICNpZmRlZiBVU0VfU1NMCiAjZGVmaW5lIERlZmF1bHRTU0xN b2RlICJwcmVmZXIiCiAjZGVmaW5lIERlZmF1bHRTU0xDZXJ0TW9kZSAiYWxsb3ciCkBAIC0zOTQs NiArMzk1LDExIEBAIHN0YXRpYyBjb25zdCBpbnRlcm5hbFBRY29ubmluZm9PcHRpb24gUFFjb25u aW5mb09wdGlvbnNbXSA9IHsKIAl7InNjcmFtX3NlcnZlcl9rZXkiLCBOVUxMLCBOVUxMLCBOVUxM LCAiU0NSQU0tU2VydmVyLUtleSIsICJEIiwgU0NSQU1fTUFYX0tFWV9MRU4gKiAyLAogCW9mZnNl dG9mKHN0cnVjdCBwZ19jb25uLCBzY3JhbV9zZXJ2ZXJfa2V5KX0sCiAKKwl7InRyeV9hbGxfYWRk cnMiLCAiUEdUUllBTExBRERSUyIsCisJCURlZmF1bHRUcnlBbGxBZGRycywgTlVMTCwKKwkJIlRy eS1BbGwtQWRkcnMiLCAiIiwgMSwKKwlvZmZzZXRvZihzdHJ1Y3QgcGdfY29ubiwgdHJ5X2FsbF9h ZGRycyl9LAorCiAJLyogT0F1dGggdjIgKi8KIAl7Im9hdXRoX2lzc3VlciIsIE5VTEwsIE5VTEws IE5VTEwsCiAJCSJPQXV0aC1Jc3N1ZXIiLCAiIiwgNDAsCkBAIC0yMDE4LDYgKzIwMjQsMjEgQEAg cHFDb25uZWN0T3B0aW9uczIoUEdjb25uICpjb25uKQogCWVsc2UKIAkJY29ubi0+dGFyZ2V0X3Nl cnZlcl90eXBlID0gU0VSVkVSX1RZUEVfQU5ZOwogCisJaWYgKGNvbm4tPnRyeV9hbGxfYWRkcnMp eworCQlpZiAoc3RyY21wKGNvbm4tPnRyeV9hbGxfYWRkcnMsICIwIikgPT0gMCkKKwkJCWNvbm4t PnRyeV9hbGxfYWRkcnNfdHlwZSA9IFRSWV9BTExfQUREUlNfRElTQUJMRTsKKwkJZWxzZSBpZiAo c3RyY21wKGNvbm4tPnRyeV9hbGxfYWRkcnMsICIxIikgPT0gMCkKKwkJCWNvbm4tPnRyeV9hbGxf YWRkcnNfdHlwZSA9IFRSWV9BTExfQUREUlNfRU5BQkxFOworCQllbHNlIHsKKwkJCWNvbm4tPnN0 YXR1cyA9IENPTk5FQ1RJT05fQkFEOworCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwg ImludmFsaWQgJXMgdmFsdWU6IFwiJXNcIiIsCisJCQkJCQkJCQkidHJ5X2FsbF9hZGRycyIsCisJ CQkJCQkJCQljb25uLT50cnlfYWxsX2FkZHJzKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0g ZWxzZQorCQljb25uLT50cnlfYWxsX2FkZHJzX3R5cGUgPSBUUllfQUxMX0FERFJTX0RJU0FCTEU7 CisKIAlpZiAoY29ubi0+c2NyYW1fY2xpZW50X2tleSkKIAl7CiAJCWludAkJCWxlbjsKQEAgLTQ0 MzQsMTEgKzQ0NTUsMTEgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFjayB0 byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX09L OwogCQkJCQkJc2VuZFRlcm1pbmF0ZUNvbm4oY29ubik7CiAKLQkJCQkJCS8qCi0JCQkJCQkgKiBU cnkgbmV4dCBob3N0IGlmIGFueSwgYnV0IHdlIGRvbid0IHdhbnQgdG8gY29uc2lkZXIKLQkJCQkJ CSAqIGFkZGl0aW9uYWwgYWRkcmVzc2VzIGZvciB0aGlzIGhvc3QuCi0JCQkJCQkgKi8KLQkJCQkJ CWNvbm4tPnRyeV9uZXh0X2hvc3QgPSB0cnVlOworCQkJCQkJaWYgKGNvbm4tPnRyeV9hbGxfYWRk cnNfdHlwZSA9PSBUUllfQUxMX0FERFJTX0VOQUJMRSkKKwkJCQkJCQljb25uLT50cnlfbmV4dF9h ZGRyID0gdHJ1ZTsKKwkJCQkJCWVsc2UKKwkJCQkJCQljb25uLT50cnlfbmV4dF9ob3N0ID0gdHJ1 ZTsKKwogCQkJCQkJZ290byBrZWVwX2dvaW5nOwogCQkJCQl9CiAJCQkJfQpAQCAtNDQ4OSwxMSAr NDUxMCwxMSBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUg dW50aWwgdGhlcmUgaXMKIAkJCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fT0s7CiAJCQkJ CQlzZW5kVGVybWluYXRlQ29ubihjb25uKTsKIAotCQkJCQkJLyoKLQkJCQkJCSAqIFRyeSBuZXh0 IGhvc3QgaWYgYW55LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlcgotCQkJCQkJICogYWRk aXRpb25hbCBhZGRyZXNzZXMgZm9yIHRoaXMgaG9zdC4KLQkJCQkJCSAqLwotCQkJCQkJY29ubi0+ dHJ5X25leHRfaG9zdCA9IHRydWU7CisJCQkJCQlpZiAoY29ubi0+dHJ5X2FsbF9hZGRyc190eXBl ID09IFRSWV9BTExfQUREUlNfRU5BQkxFKQorCQkJCQkJCWNvbm4tPnRyeV9uZXh0X2FkZHIgPSB0 cnVlOworCQkJCQkJZWxzZQorCQkJCQkJCWNvbm4tPnRyeV9uZXh0X2hvc3QgPSB0cnVlOworCiAJ CQkJCQlnb3RvIGtlZXBfZ29pbmc7CiAJCQkJCX0KIAkJCQl9CkBAIC01MTI3LDYgKzUxNDgsNyBA QCBmcmVlUEdjb25uKFBHY29ubiAqY29ubikKIAlmcmVlKGNvbm4tPmluQnVmZmVyKTsKIAlmcmVl KGNvbm4tPm91dEJ1ZmZlcik7CiAJZnJlZShjb25uLT5yb3dCdWYpOworCWZyZWUoY29ubi0+dHJ5 X2FsbF9hZGRycyk7CiAJdGVybVBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UpOwogCXRl cm1QUUV4cEJ1ZmZlcigmY29ubi0+d29ya0J1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWludC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50 LmgKaW5kZXggYTcwMWMyNTAzOGEuLmIxNDA2YzlkZmM4IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1p bnQuaApAQCAtMjUwLDYgKzI1MCwxNSBAQCB0eXBlZGVmIGVudW0KIAlMT0FEX0JBTEFOQ0VfUkFO RE9NLAkJLyogUmFuZG9tbHkgc2h1ZmZsZSB0aGUgaG9zdHMgKi8KIH0gUEdMb2FkQmFsYW5jZVR5 cGU7CiAKKy8qIFRyeSBhZGRyZXNzIHR5cGUgKGRlY29kZWQgdmFsdWUgb2YgdHJ5X2FsbF9hZGRy KSAqLwordHlwZWRlZiBlbnVtCit7CisJVFJZX0FMTF9BRERSU19ESVNBQkxFID0gMCwJLyogRG8g bm90IHRyeSBzdWJzZXF1ZW50IGFkZHJlc3NlcyBpbiBob3N0CisJCQkJCQkJCSAqIGFmdGVyIHRh cmdldF9zZXNzaW9uX2F0dHJzIG1pc21hdGNoIChkZWZhdWx0KSAqLworCVRSWV9BTExfQUREUlNf RU5BQkxFLAkJLyogVHJ5IHJlbWFpbmluZyBhZGRyZXNzZXMgaW4gaG9zdCBldmVuIGFmdGVyCisJ CQkJCQkJCSAqIHRhcmdldF9zZXNzaW9uX2F0dHJzIG1pc21hdGNoICovCit9IFBHVHJ5QWRkclR5 cGU7CisKIC8qIEJvb2xlYW4gdmFsdWUgcGx1cyBhIG5vdC1rbm93biBzdGF0ZSwgZm9yIEdVQ3Mg d2UgbWlnaHQgaGF2ZSB0byBmZXRjaCAqLwogdHlwZWRlZiBlbnVtCiB7CkBAIC00MzAsNiArNDM5 LDcgQEAgc3RydWN0IHBnX2Nvbm4KIAljaGFyCSAgICpzY3JhbV9jbGllbnRfa2V5OwkvKiBiYXNl NjQtZW5jb2RlZCBTQ1JBTSBjbGllbnQga2V5ICovCiAJY2hhcgkgICAqc2NyYW1fc2VydmVyX2tl eTsJLyogYmFzZTY0LWVuY29kZWQgU0NSQU0gc2VydmVyIGtleSAqLwogCWNoYXIJICAgKnNzbGtl eWxvZ2ZpbGU7CS8qIHdoZXJlIHNob3VsZCB0aGUgY2xpZW50IHdyaXRlIHNzbCBrZXlsb2dzICov CisJY2hhciAgICAgICAqdHJ5X2FsbF9hZGRyczsgIC8qIHdoZXRoZXIgdG8gdHJ5IGFsbCBpcHMg d2l0aGluIGEgaG9zdCAqLwogCiAJYm9vbAkJY2FuY2VsUmVxdWVzdDsJLyogdHJ1ZSBpZiB0aGlz IGNvbm5lY3Rpb24gaXMgdXNlZCB0byBzZW5kIGEKIAkJCQkJCQkJICogY2FuY2VsIHJlcXVlc3Qs IGluc3RlYWQgb2YgYmVpbmcgYSBub3JtYWwKQEAgLTUzNCw2ICs1NDQsOCBAQCBzdHJ1Y3QgcGdf Y29ubgogCVBHVGFyZ2V0U2VydmVyVHlwZSB0YXJnZXRfc2VydmVyX3R5cGU7CS8qIGRlc2lyZWQg c2Vzc2lvbiBwcm9wZXJ0aWVzICovCiAJUEdMb2FkQmFsYW5jZVR5cGUgbG9hZF9iYWxhbmNlX3R5 cGU7CS8qIGRlc2lyZWQgbG9hZCBiYWxhbmNpbmcKIAkJCQkJCQkJCQkJICogYWxnb3JpdGhtICov CisJUEdUcnlBZGRyVHlwZSB0cnlfYWxsX2FkZHJzX3R5cGU7ICAgICAvKiBwYXJzZWQgcmVwcmVz ZW50YXRpb24gb2YgdHJ5X2FsbF9hZGRycyAqLworCiAJYm9vbAkJdHJ5X25leHRfYWRkcjsJLyog dGltZSB0byBhZHZhbmNlIHRvIG5leHQgYWRkcmVzcy9ob3N0PyAqLwogCWJvb2wJCXRyeV9uZXh0 X2hvc3Q7CS8qIHRpbWUgdG8gYWR2YW5jZSB0byBuZXh0IGNvbm5ob3N0W10/ICovCiAJaW50CQkJ bmFkZHI7CQkJLyogbnVtYmVyIG9mIGFkZHJlc3NlcyByZXR1cm5lZCBieSBnZXRhZGRyaW5mbyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvdC8wMDdfdGFyZ2V0X3Nlc3Npb25f YXR0cl9kbnMucGwgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS90LzAwN190YXJnZXRfc2Vzc2lvbl9h dHRyX2Rucy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzU3MDFi Y2QzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS90LzAwN190YXJn ZXRfc2Vzc2lvbl9hdHRyX2Rucy5wbApAQCAtMCwwICsxLDEyOSBAQAorCisjIENvcHlyaWdodCAo YykgMjAyMy0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAordXNlIHN0 cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBDb25maWc7Cit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBUZXN0OjpNb3JlOworCitpZiAoISRFTlZ7UEdfVEVTVF9FWFRSQX0gfHwgJEVOVntQR19URVNU X0VYVFJBfSAhfiAvXGJsb2FkX2JhbGFuY2VcYi8pCit7CisJcGxhbiBza2lwX2FsbCA9PgorCSAg J1BvdGVudGlhbGx5IHVuc2FmZSB0ZXN0IGxvYWRfYmFsYW5jZSBub3QgZW5hYmxlZCBpbiBQR19U RVNUX0VYVFJBJzsKK30KKworIyBDbHVzdGVyIHNldHVwIHdoaWNoIGlzIHNoYXJlZCBmb3IgdGVz dGluZyBib3RoIGxvYWQgYmFsYW5jaW5nIG1ldGhvZHMKK215ICRjYW5fYmluZF90b18xMjdfMF8w XzIgPQorICAkQ29uZmlne29zbmFtZX0gZXEgJ2xpbnV4JyB8fCAkUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM6OndpbmRvd3Nfb3M7CisKKyMgQ2hlY2tzIGZvciB0aGUgcmVxdWlyZW1lbnRzIGZvciB0 ZXN0aW5nIGxvYWQgYmFsYW5jaW5nIG1ldGhvZCAyCitpZiAoISRjYW5fYmluZF90b18xMjdfMF8w XzIpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnbG9hZF9iYWxhbmNlIHRlc3Qgb25seSBzdXBwb3J0 ZWQgb24gTGludXggYW5kIFdpbmRvd3MnOworfQorCitteSAkaG9zdHNfcGF0aDsKK2lmICgkd2lu ZG93c19vcykKK3sKKwkkaG9zdHNfcGF0aCA9ICdjOlxXaW5kb3dzXFN5c3RlbTMyXERyaXZlcnNc ZXRjXGhvc3RzJzsKK30KK2Vsc2UKK3sKKwkkaG9zdHNfcGF0aCA9ICcvZXRjL2hvc3RzJzsKK30K KworbXkgJGhvc3RzX2NvbnRlbnQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6c2x1cnBfZmls ZSgkaG9zdHNfcGF0aCk7CisKK215ICRob3N0c19jb3VudCA9ICgpID0KKyAgJGhvc3RzX2NvbnRl bnQgPX4gLzEyN1wuMFwuMFwuWzEtM10gcGctbG9hZGJhbGFuY2V0ZXN0L2c7CitpZiAoJGhvc3Rz X2NvdW50ICE9IDMpCit7CisJIyBIb3N0IGZpbGUgaXMgbm90IHByZXBhcmVkIGZvciB0aGlzIHRl c3QKKwlwbGFuIHNraXBfYWxsID0+ICJob3N0cyBmaWxlIHdhcyBub3QgcHJlcGFyZWQgZm9yIERO UyBsb2FkIGJhbGFuY2UgdGVzdCI7Cit9CisKKyRQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOjp1 c2VfdGNwID0gMTsKKyRQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOjp0ZXN0X3BnaG9zdCA9ICcx MjcuMC4wLjEnOworbXkgJHBvcnQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOjpnZXRfZnJl ZV9wb3J0KCk7CisKK215ICRub2RlX3ByaW1hcnkxID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCdwcmltYXJ5MScsIHBvcnQgPT4gJHBvcnQpOworJG5vZGVfcHJpbWFyeTEtPmluaXQo aGFzX2FyY2hpdmluZyA9PiAxLCBhbGxvd3Nfc3RyZWFtaW5nID0+IDEpOworCisjIFN0YXJ0IGl0 Ciskbm9kZV9wcmltYXJ5MS0+c3RhcnQ7CisKKyMgVGFrZSBiYWNrdXAgZnJvbSB3aGljaCBhbGwg b3BlcmF0aW9ucyB3aWxsIGJlIHJ1bgorJG5vZGVfcHJpbWFyeTEtPmJhY2t1cCgnbXlfYmFja3Vw Jyk7CisKK215ICRub2RlX3N0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N0YW5kYnknLCBwb3J0ID0+ICRwb3J0LCBvd25faG9zdCA9PiAxKTsKKyRub2RlX3N0YW5kYnkt PmluaXRfZnJvbV9iYWNrdXAoJG5vZGVfcHJpbWFyeTEsICdteV9iYWNrdXAnLAorCWhhc19yZXN0 b3JpbmcgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5LT5zdGFydCgpOworCitteSAkbm9kZV9wcmltYXJ5 MiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTEnLCBwb3J0ID0+ICRwb3J0 LCBvd25faG9zdCA9PiAxKTsKKyRub2RlX3ByaW1hcnkyIC0+aW5pdCgpOworJG5vZGVfcHJpbWFy eTIgLT5zdGFydCgpOworCisjIHRhcmdldF9zZXNzaW9uX2F0dHJzPXByaW1hcnkgc2hvdWxkIGFs d2F5cyBjaG9vc2UgdGhlIGZpcnN0IG9uZS4KKyRub2RlX3ByaW1hcnkxLT5jb25uZWN0X29rKAor CSJob3N0PXBnLWxvYWRiYWxhbmNldGVzdCBwb3J0PSRwb3J0IHRhcmdldF9zZXNzaW9uX2F0dHJz PXByaW1hcnkgdHJ5X2FsbF9hZGRycz0xIiwKKwkidGFyZ2V0X3Nlc3Npb25fYXR0cnM9cHJpbWFy eSBjb25uZWN0cyB0byB0aGUgZmlyc3Qgbm9kZSIsCisJc3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3Qx JyIsCisJbG9nX2xpa2UgPT4gW3FyL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0MScvXSk7Cisk bm9kZV9wcmltYXJ5MS0+Y29ubmVjdF9vaygKKwkiaG9zdD1wZy1sb2FkYmFsYW5jZXRlc3QgcG9y dD0kcG9ydCB0YXJnZXRfc2Vzc2lvbl9hdHRycz1yZWFkLXdyaXRlIHRyeV9hbGxfYWRkcnM9MSIs CisJInRhcmdldF9zZXNzaW9uX2F0dHJzPXJlYWQtd3JpdGUgY29ubmVjdHMgdG8gdGhlIGZpcnN0 IG5vZGUiLAorCXNxbCA9PiAiU0VMRUNUICdjb25uZWN0MSciLAorCWxvZ19saWtlID0+IFtxci9z dGF0ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdDEnL10pOworJG5vZGVfcHJpbWFyeTEtPmNvbm5lY3Rf b2soCisJImhvc3Q9cGctbG9hZGJhbGFuY2V0ZXN0IHBvcnQ9JHBvcnQgdGFyZ2V0X3Nlc3Npb25f YXR0cnM9YW55IHRyeV9hbGxfYWRkcnM9MSIsCisJInRhcmdldF9zZXNzaW9uX2F0dHJzPWFueSBj b25uZWN0cyB0byB0aGUgZmlyc3Qgbm9kZSIsCisJc3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3QxJyIs CisJbG9nX2xpa2UgPT4gW3FyL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0MScvXSk7Ciskbm9k ZV9zdGFuZGJ5LT5jb25uZWN0X29rKAorCSJob3N0PXBnLWxvYWRiYWxhbmNldGVzdCBwb3J0PSRw b3J0IHRhcmdldF9zZXNzaW9uX2F0dHJzPXN0YW5kYnkgdHJ5X2FsbF9hZGRycz0xIiwKKwkidGFy Z2V0X3Nlc3Npb25fYXR0cnM9c3RhbmRieSBjb25uZWN0cyB0byB0aGUgdGhpcmQgbm9kZSIsCisJ c3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3QxJyIsCisJbG9nX2xpa2UgPT4gW3FyL3N0YXRlbWVudDog U0VMRUNUICdjb25uZWN0MScvXSk7Ciskbm9kZV9zdGFuZGJ5LT5jb25uZWN0X29rKAorCSJob3N0 PXBnLWxvYWRiYWxhbmNldGVzdCBwb3J0PSRwb3J0IHRhcmdldF9zZXNzaW9uX2F0dHJzPXJlYWQt b25seSB0cnlfYWxsX2FkZHJzPTEiLAorCSJ0YXJnZXRfc2Vzc2lvbl9hdHRycz1yZWFkLW9ubHkg Y29ubmVjdHMgdG8gdGhlIHRoaXJkIG5vZGUiLAorCXNxbCA9PiAiU0VMRUNUICdjb25uZWN0MSci LAorCWxvZ19saWtlID0+IFtxci9zdGF0ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdDEnL10pOworCisK KyRub2RlX3ByaW1hcnkxLT5zdG9wKCk7CisKKyMgdGFyZ2V0X3Nlc3Npb25fYXR0cnM9cHJpbWFy eSBzaG91bGQgYWx3YXlzIGNob29zZSB0aGUgZmlyc3Qgb25lLgorJG5vZGVfcHJpbWFyeTItPmNv bm5lY3Rfb2soCisJImhvc3Q9cGctbG9hZGJhbGFuY2V0ZXN0IHBvcnQ9JHBvcnQgdGFyZ2V0X3Nl c3Npb25fYXR0cnM9cHJpbWFyeSB0cnlfYWxsX2FkZHJzPTEiLAorCSJ0YXJnZXRfc2Vzc2lvbl9h dHRycz1wcmltYXJ5IGNvbm5lY3RzIHRvIHRoZSBmaXJzdCBub2RlIiwKKwlzcWwgPT4gIlNFTEVD VCAnY29ubmVjdDEnIiwKKwlsb2dfbGlrZSA9PiBbcXIvc3RhdGVtZW50OiBTRUxFQ1QgJ2Nvbm5l Y3QxJy9dKTsKKyRub2RlX3ByaW1hcnkyLT5jb25uZWN0X29rKAorCSJob3N0PXBnLWxvYWRiYWxh bmNldGVzdCBwb3J0PSRwb3J0IHRhcmdldF9zZXNzaW9uX2F0dHJzPXJlYWQtd3JpdGUgdHJ5X2Fs bF9hZGRycz0xIiwKKwkidGFyZ2V0X3Nlc3Npb25fYXR0cnM9cmVhZC13cml0ZSBjb25uZWN0cyB0 byB0aGUgZmlyc3Qgbm9kZSIsCisJc3FsID0+ICJTRUxFQ1QgJ2Nvbm5lY3QxJyIsCisJbG9nX2xp a2UgPT4gW3FyL3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0MScvXSk7Ciskbm9kZV9zdGFuZGJ5 LT5jb25uZWN0X29rKAorCSJob3N0PXBnLWxvYWRiYWxhbmNldGVzdCBwb3J0PSRwb3J0IHRhcmdl dF9zZXNzaW9uX2F0dHJzPWFueSB0cnlfYWxsX2FkZHJzPTEiLAorCSJ0YXJnZXRfc2Vzc2lvbl9h dHRycz1hbnkgY29ubmVjdHMgdG8gdGhlIGZpcnN0IG5vZGUiLAorCXNxbCA9PiAiU0VMRUNUICdj b25uZWN0MSciLAorCWxvZ19saWtlID0+IFtxci9zdGF0ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdDEn L10pOworJG5vZGVfc3RhbmRieS0+Y29ubmVjdF9vaygKKwkiaG9zdD1wZy1sb2FkYmFsYW5jZXRl c3QgcG9ydD0kcG9ydCB0YXJnZXRfc2Vzc2lvbl9hdHRycz1zdGFuZGJ5IHRyeV9hbGxfYWRkcnM9 MSIsCisJInRhcmdldF9zZXNzaW9uX2F0dHJzPXN0YW5kYnkgY29ubmVjdHMgdG8gdGhlIHRoaXJk IG5vZGUiLAorCXNxbCA9PiAiU0VMRUNUICdjb25uZWN0MSciLAorCWxvZ19saWtlID0+IFtxci9z dGF0ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdDEnL10pOworJG5vZGVfc3RhbmRieS0+Y29ubmVjdF9v aygKKwkiaG9zdD1wZy1sb2FkYmFsYW5jZXRlc3QgcG9ydD0kcG9ydCB0YXJnZXRfc2Vzc2lvbl9h dHRycz1yZWFkLW9ubHkgdHJ5X2FsbF9hZGRycz0xIiwKKwkidGFyZ2V0X3Nlc3Npb25fYXR0cnM9 cmVhZC1vbmx5IGNvbm5lY3RzIHRvIHRoZSB0aGlyZCBub2RlIiwKKwlzcWwgPT4gIlNFTEVDVCAn Y29ubmVjdDEnIiwKKwlsb2dfbGlrZSA9PiBbcXIvc3RhdGVtZW50OiBTRUxFQ1QgJ2Nvbm5lY3Qx Jy9dKTsKKworJG5vZGVfcHJpbWFyeTItPnN0b3AoKTsKKyRub2RlX3N0YW5kYnktPnN0b3AoKTsK KworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL3Qv MDA4X2xvYWRfYmFsYW5jZV9kbnNfdHJ5X2FsbF9hZGRycy5wbCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL3QvMDA4X2xvYWRfYmFsYW5jZV9kbnNfdHJ5X2FsbF9hZGRycy5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTIxOGFiNzg1YTcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW50ZXJmYWNlcy9saWJwcS90LzAwOF9sb2FkX2JhbGFuY2VfZG5zX3RyeV9hbGxfYWRk cnMucGwKQEAgLTAsMCArMSwxMjggQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIzLTIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz IEZBVEFMID0+ICdhbGwnOwordXNlIENvbmZpZzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFRlc3Q6Ok1vcmU7CisKK2lm ICghJEVOVntQR19URVNUX0VYVFJBfSB8fCAkRU5We1BHX1RFU1RfRVhUUkF9ICF+IC9cYmxvYWRf YmFsYW5jZVxiLykKK3sKKwlwbGFuIHNraXBfYWxsID0+CisJICAnUG90ZW50aWFsbHkgdW5zYWZl IHRlc3QgbG9hZF9iYWxhbmNlIG5vdCBlbmFibGVkIGluIFBHX1RFU1RfRVhUUkEnOworfQorCitt eSAkY2FuX2JpbmRfdG9fMTI3XzBfMF8yID0KKyAgJENvbmZpZ3tvc25hbWV9IGVxICdsaW51eCcg fHwgJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp3aW5kb3dzX29zOworCisjIENoZWNrcyBmb3Ig dGhlIHJlcXVpcmVtZW50cyBmb3IgdGVzdGluZyBsb2FkIGJhbGFuY2luZyBtZXRob2QgMgoraWYg KCEkY2FuX2JpbmRfdG9fMTI3XzBfMF8yKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ2xvYWRfYmFs YW5jZSB0ZXN0IG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IGFuZCBXaW5kb3dzJzsKK30KKworbXkg JGhvc3RzX3BhdGg7CitpZiAoJHdpbmRvd3Nfb3MpCit7CisJJGhvc3RzX3BhdGggPSAnYzpcV2lu ZG93c1xTeXN0ZW0zMlxEcml2ZXJzXGV0Y1xob3N0cyc7Cit9CitlbHNlCit7CisJJGhvc3RzX3Bh dGggPSAnL2V0Yy9ob3N0cyc7Cit9CisKK215ICRob3N0c19jb250ZW50ID0gUG9zdGdyZVNRTDo6 VGVzdDo6VXRpbHM6OnNsdXJwX2ZpbGUoJGhvc3RzX3BhdGgpOworCitteSAkaG9zdHNfY291bnQg PSAoKSA9CisgICRob3N0c19jb250ZW50ID1+IC8xMjdcLjBcLjBcLlsxLTNdIHBnLWxvYWRiYWxh bmNldGVzdC9nOworaWYgKCRob3N0c19jb3VudCAhPSAzKQoreworCSMgSG9zdCBmaWxlIGlzIG5v dCBwcmVwYXJlZCBmb3IgdGhpcyB0ZXN0CisJcGxhbiBza2lwX2FsbCA9PiAiaG9zdHMgZmlsZSB3 YXMgbm90IHByZXBhcmVkIGZvciBETlMgbG9hZCBiYWxhbmNlIHRlc3QiOworfQorCiskUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlcjo6dXNlX3RjcCA9IDE7CiskUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlcjo6dGVzdF9wZ2hvc3QgPSAnMTI3LjAuMC4xJzsKKworbXkgJHBvcnQgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOjpnZXRfZnJlZV9wb3J0KCk7Citsb2NhbCAkVGVzdDo6QnVpbGRlcjo6 TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOworbXkgJG5vZGVfcHJpbWFyeTEgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoInByaW1hcnkxIiwgcG9ydCA9PiAkcG9ydCk7 Ciskbm9kZV9wcmltYXJ5MS0+aW5pdChoYXNfYXJjaGl2aW5nID0+IDEsIGFsbG93c19zdHJlYW1p bmcgPT4gMSk7CisKKyMgU3RhcnQgaXQKKyRub2RlX3ByaW1hcnkxLT5zdGFydCgpOworCisjIFRh a2UgYmFja3VwIGZyb20gd2hpY2ggYWxsIG9wZXJhdGlvbnMgd2lsbCBiZSBydW4KKyRub2RlX3By aW1hcnkxLT5iYWNrdXAoIm15X2JhY2t1cCIpOworCitteSAkbm9kZV9zdGFuZGJ5ID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJzdGFuZGJ5IiwgcG9ydCA9PiAkcG9ydCwgb3duX2hv c3QgPT4gMSk7Ciskbm9kZV9zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3VwKCRub2RlX3ByaW1hcnkx LCAibXlfYmFja3VwIiwKKwloYXNfcmVzdG9yaW5nID0+IDEpOworJG5vZGVfc3RhbmRieS0+c3Rh cnQoKTsKKworbXkgJG5vZGVfcHJpbWFyeTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoIm5vZGUxIiwgcG9ydCA9PiAkcG9ydCwgb3duX2hvc3QgPT4gMSk7Ciskbm9kZV9wcmltYXJ5 Mi0+aW5pdCgpOworJG5vZGVfcHJpbWFyeTItPnN0YXJ0KCk7CitzdWIgdGVzdF90YXJnZXRfc2Vz c2lvbl9hdHRyIHsKKwlteSAkdGFyZ2V0X3Nlc3Npb25fYXR0cnMgPSBzaGlmdDsKKwlteSAkdGVz dF9udW0gPSBzaGlmdDsKKwlteSAkcHJpbWFyeTFfZXhwZWN0X3RyYWZmaWMgPSBzaGlmdDsKKwlt eSAkc3RhbmRieV9leHBlY3RfdHJhZmZpYyA9IHNoaWZ0OworCW15ICRwcmltYXJ5Ml9leHBlY3Rf dHJhZmZpYyA9IHNoaWZ0OworCSMgU3RhdGlzdGljYWxseSB0aGUgZm9sbG93aW5nIGxvb3Agd2l0 aCBsb2FkX2JhbGFuY2VfaG9zdHM9cmFuZG9tIHdpbGwgYWxtb3N0CisJIyBjZXJ0YWlubHkgY29u bmVjdCBhdCBsZWFzdCBvbmNlIHRvIGVhY2ggb2YgdGhlIG5vZGVzLiBUaGUgY2hhbmNlIG9mIHRo YXQgbm90CisJIyBoYXBwZW5pbmcgaXMgc28gc21hbGwgdGhhdCBpdCdzIG5lZ2xpZ2libGU6ICgy LzMpXjUwID0gMS41NjgzMjg1NWUtOQorCWZvcmVhY2ggbXkgJGkgKDEgLi4gNTApCisJeworCQkk bm9kZV9wcmltYXJ5MS0+Y29ubmVjdF9vaygKKwkJCSJob3N0PXBnLWxvYWRiYWxhbmNldGVzdCBw b3J0PSRwb3J0IGxvYWRfYmFsYW5jZV9ob3N0cz1yYW5kb20gdGFyZ2V0X3Nlc3Npb25fYXR0cnM9 JHt0YXJnZXRfc2Vzc2lvbl9hdHRyc30gdHJ5X2FsbF9hZGRycz0xIiwKKwkJCSJyZXBlYXRlZCBj b25uZWN0aW9ucyB3aXRoIHJhbmRvbSBsb2FkIGJhbGFuY2luZyIsCisJCQlzcWwgPT4gIlNFTEVD VCAnY29ubmVjdCR7dGVzdF9udW19JyIpOworCX0KKwlteSAkbm9kZV9wcmltYXJ5MV9vY2N1cnJl bmNlcyA9ICgpID0KKwkgICRub2RlX3ByaW1hcnkxLT5sb2dfY29udGVudCgpID1+IC9zdGF0ZW1l bnQ6IFNFTEVDVCAnY29ubmVjdCR7dGVzdF9udW19Jy9nOworCW15ICRub2RlX3N0YW5kYnlfb2Nj dXJyZW5jZXMgPSAoKSA9CisJICAkbm9kZV9zdGFuZGJ5LT5sb2dfY29udGVudCgpID1+IC9zdGF0 ZW1lbnQ6IFNFTEVDVCAnY29ubmVjdCR7dGVzdF9udW19Jy9nOworCW15ICRub2RlX3ByaW1hcnky X29jY3VycmVuY2VzID0gKCkgPQorCSAgJG5vZGVfcHJpbWFyeTItPmxvZ19jb250ZW50KCkgPX4g L3N0YXRlbWVudDogU0VMRUNUICdjb25uZWN0JHt0ZXN0X251bX0nL2c7CisKKwlteSAkdG90YWxf b2NjdXJyZW5jZXMgPQorCSAgJG5vZGVfcHJpbWFyeTFfb2NjdXJyZW5jZXMgKyAkbm9kZV9zdGFu ZGJ5X29jY3VycmVuY2VzICsgJG5vZGVfcHJpbWFyeTJfb2NjdXJyZW5jZXM7CisKKwlpZiAoJHBy aW1hcnkxX2V4cGVjdF90cmFmZmljID09IDEpIHsKKwkJb2soJG5vZGVfcHJpbWFyeTFfb2NjdXJy ZW5jZXMgPiAwLCAicmVjZWl2ZWQgYXQgbGVhc3Qgb25lIGNvbm5lY3Rpb24gb24gbm9kZSBwcmlt YXJ5MSIpOworCX1lbHNleworCQlvaygkbm9kZV9wcmltYXJ5MV9vY2N1cnJlbmNlcyA9PSAwLCAi cmVjZWl2ZWQgbm8gY29ubmVjdGlvbnMgb24gbm9kZSBwcmltYXJ5MSIpOworCX0KKwlpZiAoJHN0 YW5kYnlfZXhwZWN0X3RyYWZmaWMgPT0gMSkgeworCQlvaygkbm9kZV9zdGFuZGJ5X29jY3VycmVu Y2VzID4gMCwgInJlY2VpdmVkIGF0IGxlYXN0IG9uZSBjb25uZWN0aW9uIG9uIG5vZGUgc3RhbmRi eSIpOworCX1lbHNleworCQlvaygkbm9kZV9zdGFuZGJ5X29jY3VycmVuY2VzID09IDAsICJyZWNl aXZlZCBubyBjb25uZWN0aW9ucyBvbiBub2RlIHN0YW5kYnkiKTsKKwl9CisKKwlpZiAoJHByaW1h cnkyX2V4cGVjdF90cmFmZmljID09IDEpIHsKKwkJb2soJG5vZGVfcHJpbWFyeTJfb2NjdXJyZW5j ZXMgPiAwLCAicmVjZWl2ZWQgYXQgbGVhc3Qgb25lIGNvbm5lY3Rpb24gb24gbm9kZSBwcmltYXJ5 MiIpOworCX1lbHNleworCQlvaygkbm9kZV9wcmltYXJ5Ml9vY2N1cnJlbmNlcyA9PSAwLCAicmVj ZWl2ZWQgbm8gY29ubmVjdGlvbnMgb24gcHJpbWFyeTIiKTsKKwl9CisKKwlvaygkdG90YWxfb2Nj dXJyZW5jZXMgPT0gNTAsICJyZWNlaXZlZCA1MCBjb25uZWN0aW9ucyBhY3Jvc3MgYWxsIG5vZGVz Iik7Cit9CisKK3Rlc3RfdGFyZ2V0X3Nlc3Npb25fYXR0cignYW55JywKKwkxLCAxLCAxLCAxKTsK K3Rlc3RfdGFyZ2V0X3Nlc3Npb25fYXR0cigncmVhZC1vbmx5JywKKwkyLCAwLCAxLCAwKTsKK3Rl c3RfdGFyZ2V0X3Nlc3Npb25fYXR0cigncmVhZC13cml0ZScsCisJMywgMSwgMCwgMSk7Cit0ZXN0 X3RhcmdldF9zZXNzaW9uX2F0dHIoJ3ByaW1hcnknLAorCTQsIDEsIDAsIDEpOwordGVzdF90YXJn ZXRfc2Vzc2lvbl9hdHRyKCdzdGFuZGJ5JywKKwk1LCAwLCAxLCAwKTsKKworCiskbm9kZV9wcmlt YXJ5MS0+c3RvcCgpOworJG5vZGVfcHJpbWFyeTItPnN0b3AoKTsKKyRub2RlX3N0YW5kYnktPnN0 b3AoKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQ5LjAKCg== --000000000000f0a8ae064cddcfe6--