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 1x3aCT-006WXF-1u for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Sep 2026 14:19:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1x3aCS-001vFL-1r for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Sep 2026 14:19:56 +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 1x3aCS-001vFA-0Y for pgsql-hackers@lists.postgresql.org; Mon, 07 Sep 2026 14:19:56 +0000 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x3aCP-00000003Pzb-3X7j for pgsql-hackers@lists.postgresql.org; Mon, 07 Sep 2026 14:19:55 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-c262bc686d9so336775166b.2 for ; Mon, 07 Sep 2026 07:19:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1788790782; x=1789395582; darn=lists.postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=pWzYagmtHEVv8iJZQLQHI9O/76cv6xGlonxm2kCdLt4=; b=gDGXmSreWNK9CBgs3b4PhVBOdg0cZ7lRrvqIVjR40qvWF/otKRKW8FcmfXNrBljJt0 E2OqH9XkP3DuthQPRrSPrOpOLwWNqmbjxVcRkyYdK/tuDxhsDMOHMXzgJ2kCT25+a4og shr0ALLqimI7CErvdX9zXhmch0CD29ZtXotE5ibMWC18A5hyNc6b8R3K8Yz9IZpvGbNu lgSImIBmmNPFkCX/3O1UJXWS0d5oHLqTSYwoNzJbNQ6q3IioPUIKdIu7FRMrC+nv0xoW S9BhPIbzL/GVio8dwor3Ym9Aj6YUjRtnm7EVM6VfGDyDgsZifd3yVX5IJwz/HaXliip+ boGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788790782; x=1789395582; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pWzYagmtHEVv8iJZQLQHI9O/76cv6xGlonxm2kCdLt4=; b=sJmqWtARatOrZQMtg0cMV5f/NkZ3Z0xomFYhqzV9N9MP+e2kL0ypnRZALBHu/lq5jz RBqF0oaSIpjOpSd4Su2ZZ7pJqoU0azno87jFjSsy6h/hLgGLsWyyPnhAuriiBbagRulT V16frbpsSdZFPTDhcRKqWn0rl2J7vxYRj0ayLuWSm7adfs4lTG12v/mJHwmrBtz3PNi2 gaRn37zV/Xrsgx3AvF2VUFusVJ9QnQAFyuuA/CipHBXzog2zMx3rXGJTo+oof2zXnXzi YYNupCG0QEAlE5pcPZCx+NSYb4YPUJ8QKchr2wO2LGr36TugEUovKHauHHcGp3jARJEe 10YA== X-Forwarded-Encrypted: i=1; AKwUvBwrIH9aE3vj+cdAaylL8AEOrxRyj5VrUDw45yZIOJBDTco5yYnN/36mnDkOFW06ZG5UOJFpJvOez4vRq0ZD@lists.postgresql.org X-Gm-Message-State: AFuF++lbL69TKLhDnClPNNul+tzAWwOjo1H6v9v5/J7Z0UKE83RycY5S +XX7WiF+w59Au0D4FYuIw8qrN3MZvKnHm25wbFObU/eoEVO8WJakyzxI6iFFnaKZPg== X-Gm-Gg: AYBFou3ps0aRAydeCMCiIst+f8dZ7qcEYXgqU/usHAIf8+bVYmBnXERQce+UxCSAlhT Gpl1ZIoI7/zoi50KW/IcQ67bwUKI71NrkRz6tFYxJFSdQnvNYEzi3has/wR49OG1Dmthkk4nr4C vvYtVvO8IhdIgA8WiWiiqk4BrYPDXocp/f3xBW+AH93RBTlRnG140azxzkLNtgXLUbDTI4plZ6v De9AlNu4wr21M/ME1Kh0rONhzOaoCNY2uUHMvb7Tzppt+QWU1d7VeYjPj6mWJ6GK/uMYBifvS29 brZ0yiCNZwM6tiU8vVdJkinlXADuxMHB/aMSBh5dadkjwoSKTGZCB2bALC+pVY65VHVDPQRgOeU +9d4nt6HnsoAl+QX22uXM7TQzs6np69ZiHJAR/Vq+RGbZVfJLStqsJB8yd9CR4ZEtUINfwrUuFc 9iGgRISbYaHnpeRE/PfFDP3nzjmVbVdhom65JsKgjYOSoLOaJi4c38C8ABxE9iKmr7VW3vtlK/u n6Ou17c5mfCKwN+TVHZ/qjBL5hUG70NeLTzHhDnc0UOX/Bcy+5S6dvCXCBQ/aw97cvtrbpvH4Kz /UJg X-Received: by 2002:a17:907:3f15:b0:c1c:2007:298e with SMTP id a640c23a62f3a-c260cb450c9mr932392766b.24.1788790782443; Mon, 07 Sep 2026 07:19:42 -0700 (PDT) Received: from [100.119.41.140] ([163.116.177.176]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c260d575fccsm495307966b.37.2026.09.07.07.19.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Sep 2026 07:19:41 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------yw1NOeCUzFwUVM2IUta1EN79" Message-ID: <0cab2102-4786-416a-ae50-b606a495d01b@enterprisedb.com> Date: Mon, 7 Sep 2026 15:19:40 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Possible race condition in pg_basebackup From: Nick Ivanov To: Andrey Borodin Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , pgsql-hackers mailing list References: <5516902D-65A5-4C61-8568-E32F111C89EF@yandex-team.ru> <99DF8255-F6B8-4B10-85A2-B6984B3DD16C@yandex-team.ru> <999caa0e-d015-42da-9b79-001087e719b8@enterprisedb.com> Content-Language: en-US In-Reply-To: <999caa0e-d015-42da-9b79-001087e719b8@enterprisedb.com> 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. --------------yw1NOeCUzFwUVM2IUta1EN79 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, I'm attaching an updated patch. As suggested, I now attempt to reserve the WAL earlier in the process, before the call to do_pg_backup_start(), and I moved the injection point closer towards to make the test stricter towards the race window. As a side effect, WAL reservation behaviour change won't apply when the SQL interface (pg_backup_start()) is invoked, which was highlighted earlier. Since the bug I intend to fix here has simple workarounds, I don't think it's necessary to consider backporting the patch to earlier versions, and the introduction of a new GUC should therefore be acceptable. The patch is rebased on top of the master as of approximately 2026-09-07 14:50:00 UTC. I agree that a separate patch for pg_basebackup, to make it request the slot creation earlier, would be beneficial, and make a separate patch for that. Cheers Nick On 31/08/2026 13:32, Nick Ivanov wrote: > Hello Andrey, > > Thank you for your comments, they are very helpful. > > On 29/08/2026 15:18, Andrey Borodin wrote: >> RegisterBackupStartpoint() is called after the starting checkpoint has >> selected the startpoint.  Another checkpoint can remove WAL between >> reading >> ControlFile and registering that LSN.  The test stops later, after >> registration, so it does not exercise this window. >> ... >> Avoiding this requires registering a conservative current insert or >> replay >> position before requesting the starting checkpoint.  If the selected >> startpoint is older, as can happen on a standby, the horizon then has >> to be >> lowered.  Alternatively, selection and registration need an interlock >> with >> WAL removal. > I did consider this gap, but thought it wasn't wide enough to be of > great risk. However, you're right in that, when fixing a race > condition we should close the gap completely and not resort to a > half-measure. I will update the test and see where it takes me. >> For a backpatch, I think a new postmaster GUC is a non-starter.  It >> adds a >> user-visible limit and shared-memory sizing decisions to a >> minor-version bug >> fix, while concurrent BASE_BACKUP sessions are already bounded by >> max_wal_senders.  Unconditionally registering in do_pg_backup_start() >> also >> changes SQL-level pg_backup_start(). > I didn't like introducing a new GUC myself, but I thought recycling > max_wal_senders (or max_replication_slots or whatever) would be > confusing. I believe this race condition can affect `pg_basebackup > --wal-method=fetch` as well as `--wal-method=stream`, so tying this to > replication seemed wrong to me. On the other hand, I didn't fully > consider back-porting the patch, so this needs more thought obviously. >> I suggested server-owned retention upthread, but after reading the >> patch I >> think your original client-side proposal deserves another look. Creating >> the requested slot before sending BASE_BACKUP directly fixes the >> reported >> --create-slot case, is much smaller to backpatch, and also works when >> a new >> pg_basebackup connects to an older server.  Existing slots with a NULL >> restart_lsn, idle_replication_slot_timeout, and server-fetched WAL >> can be >> treated as separate server-side problems.  WDYT? > I suspect this won't address the `--wal-method=fetch` situation, which > I think is subject to the same WAL removal/recycling risk. > --------------yw1NOeCUzFwUVM2IUta1EN79 Content-Type: text/plain; charset=UTF-8; name="v2-0001-Fix-WAL-recycle-race-in-pg_basebackup.patch" Content-Disposition: attachment; filename="v2-0001-Fix-WAL-recycle-race-in-pg_basebackup.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZDZhMjZiNWQyNzFiYWI0NjI3ZDNiZTI4ZGRhZjI4NTM2Y2I3YTYyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWNrIEl2YW5vdiA8bmljay5pdmFub3ZAZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogU3VuLCA2IFNlcCAyMDI2IDEzOjMxOjEyICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2Ml0gRml4IFdBTCByZWN5Y2xlIHJhY2UgaW4gcGdfYmFzZWJhY2t1cAoK SW50cm9kdWNlIGEgbmV3IHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIHRvIGtlZXAgdGhlIFdB TCBzdGFydCBwb2ludCBmb3IgZWFjaCBiYWNrdXAgaW4gcHJvZ3Jlc3MgYW5kIHRoZSBjb3Jy ZXNwb25kaW5nIGFjY2Vzc29yIGZ1bmN0aW9ucyB0byBpbmZvcm0gdGhlIGNoZWNrcG9pbnRl ciBvZiBXQUwgc2VnbWVudHMgd2Ugd2FudCB0byBrZWVwIHdoaWxlIHRoZSBiYWNrdXBzIGFy ZSBydW5uaW5nLiBSZXNlcnZlIHRoZSBXQUwgZWFybHkgaW4gdGhlIHByb2Nlc3MsIGJlZm9y ZSBpbnZva2luZyBkb19wZ19iYWNrdXBfc3RhcnQoKSwgdG8gZW5zdXJlIGl0IGhhcHBlbnMg YmVmb3JlIHRoZSBjaGVja3BvaW50LgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2cuYyAgICAgICAgICAgICB8ICA0MCArKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ2JhY2t1cC5jICAgICAgIHwgMTQ4ICsrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyAgICAgICAgICAgICAgIHwgICA5ICsrCiAu Li4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA4ICsK IHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMiAr CiBzcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2JhY2t1cC5oICAgICAgICAgICAgICAgfCAgNDAg KysrKysKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaCAgICAgICAgICAg fCAgIDEgKwogc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAg IHwgICAxICsKIC4uLi9yZWNvdmVyeS90LzA1N19iYXNlYmFja3VwX3Nsb3RfcmFjZS5wbCAg ICB8IDEzNSArKysrKysrKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAzODYgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlY292ZXJ5L3QvMDU3X2Jh c2ViYWNrdXBfc2xvdF9yYWNlLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmlu ZGV4IDMyMDNmMmZkNGVlLi4zYzg3OGZkMmI3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2cuYwpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxv Z2FyY2hpdmUuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2JhY2t1cC5oIgogI2luY2x1ZGUg ImFjY2Vzcy94bG9naW5zZXJ0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlY292ZXJ5LmgiCkBAIC04NTM3LDYgKzg1MzgsNyBA QCBLZWVwTG9nU2VnKFhMb2dSZWNQdHIgcmVjcHRyLCBYTG9nU2VnTm8gKmxvZ1NlZ05vKQog CVhMb2dTZWdObwljdXJyU2VnTm87CiAJWExvZ1NlZ05vCXNlZ25vOwogCVhMb2dSZWNQdHIJ a2VlcDsKKwlYTG9nUmVjUHRyCWtlZXBfZm9yX2JhY2t1cHM7CiAKIAlYTEJ5dGVUb1NlZyhy ZWNwdHIsIGN1cnJTZWdObywgd2FsX3NlZ21lbnRfc2l6ZSk7CiAJc2Vnbm8gPSBjdXJyU2Vn Tm87CkBAIC04NTQ0LDkgKzg1NDYsMjIgQEAgS2VlcExvZ1NlZyhYTG9nUmVjUHRyIHJlY3B0 ciwgWExvZ1NlZ05vICpsb2dTZWdObykKIAkvKiBDYWxjdWxhdGUgaG93IG1hbnkgc2VnbWVu dHMgYXJlIGtlcHQgYnkgc2xvdHMuICovCiAJa2VlcCA9IFhMb2dHZXRSZXBsaWNhdGlvblNs b3RNaW5pbXVtTFNOKCk7CiAJaWYgKFhMb2dSZWNQdHJJc1ZhbGlkKGtlZXApICYmIGtlZXAg PCByZWNwdHIpCisJCVhMQnl0ZVRvU2VnKGtlZXAsIHNlZ25vLCB3YWxfc2VnbWVudF9zaXpl KTsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBrZWVwIG1vcmUgc2VnbWVudHMg Zm9yIGluLXByb2dyZXNzIGJhY2t1cHMuCisJICogVGhpcyB3aWxsIGFsc28gYmUgc3ViamVj dCB0byBtYXhfc2xvdF93YWxfa2VlcF9zaXplX21iLCBpZiBzZXQuCisJICovCisJa2VlcF9m b3JfYmFja3VwcyA9IEdldE9sZGVzdEJhY2t1cFN0YXJ0TFNOKCk7CisJaWYgKFhMb2dSZWNQ dHJJc1ZhbGlkKGtlZXBfZm9yX2JhY2t1cHMpICYmCisJCSghWExvZ1JlY1B0cklzVmFsaWQo a2VlcCkgfHwga2VlcF9mb3JfYmFja3VwcyA8IGtlZXApKQogCXsKKwkJa2VlcCA9IGtlZXBf Zm9yX2JhY2t1cHM7CiAJCVhMQnl0ZVRvU2VnKGtlZXAsIHNlZ25vLCB3YWxfc2VnbWVudF9z aXplKTsKKwl9CiAKKwlpZiAoc2Vnbm8gPCBjdXJyU2VnTm8pCisJewogCQkvKgogCQkgKiBB Y2NvdW50IGZvciBtYXhfc2xvdF93YWxfa2VlcF9zaXplIHRvIGF2b2lkIGtlZXBpbmcgbW9y ZSB0aGFuCiAJCSAqIGNvbmZpZ3VyZWQuICBIb3dldmVyLCBkb24ndCBkbyB0aGF0IGR1cmlu ZyBhIGJpbmFyeSB1cGdyYWRlOiBpZgpAQCAtOTY5NSw2ICs5NzEwLDI1IEBAIGRvX3BnX2Jh Y2t1cF9zdGFydChjb25zdCBjaGFyICpiYWNrdXBpZHN0ciwgYm9vbCBmYXN0LCBMaXN0ICoq dGFibGVzcGFjZXMsCiAJCQlXQUxJbnNlcnRMb2NrUmVsZWFzZSgpOwogCQl9IHdoaWxlICgh Z290VW5pcXVlU3RhcnRwb2ludCk7CiAKKwkJLyoKKwkJICogVGhlIHN0YXJ0cG9pbnQgaGFz IGJlZW4gc2VsZWN0ZWQsIGJ1dCB0aGUgY2xpZW50IGRvZXMgbm90IGtub3cgaXQKKwkJICog eWV0IGFuZCB0aGVyZWZvcmUgY2Fubm90IGhhdmUgY3JlYXRlZCB0aGUgcmVxdWVzdGVkIHNs b3QuCisJCSAqLworCQlJTkpFQ1RJT05fUE9JTlQoImJhc2ViYWNrdXAtYmVmb3JlLXNlbmQt c3RhcnRwb2ludCIsIE5VTEwpOworCisJCS8qCisJCSAqIElmIHdlIGFyZSBpbnZva2VkIGJ5 IGJhc2ViYWNrdXAsIGl0IG1heSBoYXZlIGFscmVhZHkgcmVzZXJ2ZWQgYSBXQUwKKwkJICog c3RhcnQgcG9pbnQuIElmIHRoYXQgaXMgbmV3ZXIgdGhhbiB3aGF0J3Mgc2VsZWN0ZWQgaGVy ZSwgdXBkYXRlCisJCSAqIHRoZSByZXNlcnZhdGlvbi4KKwkJICovCisJCWlmIChNeUJhY2t1 cEluUHJvZ3Jlc3MgIT0gTlVMTCAmJgorCQkJWExvZ1JlY1B0cklzVmFsaWQoTXlCYWNrdXBJ blByb2dyZXNzLT5zdGFydHBvaW50KSAmJgorCQkJc3RhdGUtPnN0YXJ0cG9pbnQgPCBNeUJh Y2t1cEluUHJvZ3Jlc3MtPnN0YXJ0cG9pbnQpCisJCXsKKwkJCQlVbnJlZ2lzdGVyQmFja3Vw U3RhcnRwb2ludCgpOworCQkJCVJlZ2lzdGVyQmFja3VwU3RhcnRwb2ludChzdGF0ZS0+c3Rh cnRwb2ludCk7CisJCX0KKwogCQkvKgogCQkgKiBDb25zdHJ1Y3QgdGFibGVzcGFjZV9tYXAg ZmlsZS4KIAkJICovCkBAIC05ODk5LDYgKzk5MzMsOSBAQCBkb19wZ19iYWNrdXBfc3RvcChC YWNrdXBTdGF0ZSAqc3RhdGUsIGJvb2wgd2FpdGZvcmFyY2hpdmUpCiAKIAlXQUxJbnNlcnRM b2NrUmVsZWFzZSgpOwogCisJLyogVW5yZWdpc3RlciBmcm9tIHRoZSBzaGFyZWQgY29udHJv bCBzdHJ1Y3R1cmUgKi8KKwlVbnJlZ2lzdGVyQmFja3VwU3RhcnRwb2ludCgpOworCiAJLyoK IAkgKiBJZiB3ZSBhcmUgdGFraW5nIGFuIG9ubGluZSBiYWNrdXAgZnJvbSB0aGUgc3RhbmRi eSwgd2UgY29uZmlybSB0aGF0IHRoZQogCSAqIHN0YW5kYnkgaGFzIG5vdCBiZWVuIHByb21v dGVkIGR1cmluZyB0aGUgYmFja3VwLgpAQCAtMTAxMzQsNiArMTAxNzEsOSBAQCBkb19wZ19h Ym9ydF9iYWNrdXAoaW50IGNvZGUsIERhdHVtIGFyZykKIAkJc2Vzc2lvbkJhY2t1cFN0YXRl ID0gU0VTU0lPTl9CQUNLVVBfTk9ORTsKIAkJV0FMSW5zZXJ0TG9ja1JlbGVhc2UoKTsKIAor CQkvKiBVbnJlZ2lzdGVyIGZyb20gdGhlIHNoYXJlZCBjb250cm9sIHN0cnVjdHVyZSAqLwor CQlVbnJlZ2lzdGVyQmFja3VwU3RhcnRwb2ludCgpOworCiAJCWlmICghZHVyaW5nX2JhY2t1 cF9zdGFydCkKIAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJZXJybXNnKCJhYm9ydGluZyBi YWNrdXAgZHVlIHRvIGJhY2tlbmQgZXhpdGluZyBiZWZvcmUgcGdfYmFja3VwX3N0b3Agd2Fz IGNhbGxlZCIpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2diYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYwpp bmRleCBjZjVjYzhlYWQ5Ni4uMTA4OGViMmQ5NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nYmFja3VwLmMKQEAgLTE2LDYgKzE2LDE1NCBAQAogI2luY2x1ZGUgImFj Y2Vzcy94bG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2dfaW50ZXJuYWwuaCIKICNpbmNs dWRlICJhY2Nlc3MveGxvZ2JhY2t1cC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorCisvKiBDb250cm9sIGFycmF5IGZvciBp bi1wcm9ncmVzcyBiYWNrdXBzICovCitCYWNrdXBDdGxEYXRhICpCYWNrdXBDdGwgPSBOVUxM OworCitzdGF0aWMgdm9pZCBCYWNrdXBDdGxTaG1lbVJlcXVlc3Qodm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIEJhY2t1cEN0bFNobWVtSW5pdCh2b2lkICphcmcpOworCitjb25zdCBTaG1l bUNhbGxiYWNrcyBCYWNrdXBDdGxTaG1lbUNhbGxiYWNrcyA9IHsKKwkucmVxdWVzdF9mbiA9 IEJhY2t1cEN0bFNobWVtUmVxdWVzdCwKKwkuaW5pdF9mbiA9IEJhY2t1cEN0bFNobWVtSW5p dCwKK307CisKKy8qIFRoaXMgYmFja2VuZCdzIGJhY2t1cCBjb250cm9sIHN0cnVjdHVyZSBp biB0aGUgc2hhcmVkIG1lbW9yeSBhcnJheSAqLworQmFja3VwSW5Qcm9ncmVzcyAqTXlCYWNr dXBJblByb2dyZXNzID0gTlVMTDsKKworLyogR1VDICovCitpbnQgbWF4X2NvbmN1cnJlbnRf YmFja3VwcyA9IDEwOyAvKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBiYWNr dXBzICovCisKKy8qCisgKiBSZWdpc3RlciBzaGFyZWQgbWVtb3J5IHNwYWNlIGZvciB0aGUg YmFja3VwIGNvbnRyb2wgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIEJhY2t1cEN0bFNo bWVtUmVxdWVzdCh2b2lkICphcmcpCit7CisJU2l6ZSBzaXplOworCisJLyogbWF4X2NvbmN1 cnJlbnRfYmFja3VwcyBpcyBhdCBsZWFzdCAxICovCisJQXNzZXJ0KG1heF9jb25jdXJyZW50 X2JhY2t1cHMgPiAwKTsKKworCXNpemUgPSBvZmZzZXRvZihCYWNrdXBDdGxEYXRhLCBiYWNr dXBzKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUobWF4X2NvbmN1cnJlbnRf YmFja3Vwcywgc2l6ZW9mKEJhY2t1cEluUHJvZ3Jlc3MpKSk7CisJU2htZW1SZXF1ZXN0U3Ry dWN0KC5uYW1lID0gIkJhY2t1cCBDdGwiLAorCQkuc2l6ZSA9IHNpemUsCisJCS5wdHIgPSAo dm9pZCAqKikmQmFja3VwQ3RsKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIG1l bW9yeSBmb3IgdGhlIGJhY2t1cCBjb250cm9sIHN0cnVjdHVyZS4KKyAqCisgKiBObyBjbGVh bnVwIGlzIG5lZWRlZCBvbiBzaG1lbV9leGl0LgorICovCitzdGF0aWMgdm9pZCBCYWNrdXBD dGxTaG1lbUluaXQodm9pZCAqYXJnKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8 IG1heF9jb25jdXJyZW50X2JhY2t1cHM7IGkrKykKKwl7CisJCUJhY2t1cEN0bC0+YmFja3Vw c1tpXS5zdGFydHBvaW50ID0gSW52YWxpZFhMb2dSZWNQdHI7CisJfQorCUJhY2t1cEN0bC0+ b2xkZXN0U3RhcnRwb2ludCA9IEludmFsaWRYTG9nUmVjUHRyOworfQorCisvKgorICogUmVn aXN0ZXIgdGhpcyBiYWNrdXAncyBzdGFydHBvaW50LgorICoKKyAqIFdlIHVwZGF0ZSB0aGUg b2xkZXN0IHN0YXJ0cG9pbnQgYWNyb3NzIGFsbCBpbi1wcm9ncmVzcyBiYWNrdXBzIGhlcmUu CisgKgorICovCisKK3ZvaWQKK1JlZ2lzdGVyQmFja3VwU3RhcnRwb2ludChYTG9nUmVjUHRy IHN0YXJ0cG9pbnQpCit7CisJaW50IGk7CisKKwlBc3NlcnQoQmFja3VwQ3RsICE9IE5VTEwp OworCUFzc2VydChNeUJhY2t1cEluUHJvZ3Jlc3MgPT0gTlVMTCk7CisKKwlMV0xvY2tBY3F1 aXJlKEJhY2t1cENvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOworCWZvciAoaSA9IDA7IGkg PCBtYXhfY29uY3VycmVudF9iYWNrdXBzOyBpKyspCisJeworCQkvKiBGaW5kIHRoZSBmaXJz dCB1bnVzZWQgZW50cnkgKi8KKwkJaWYgKEJhY2t1cEN0bC0+YmFja3Vwc1tpXS5zdGFydHBv aW50ID09IEludmFsaWRYTG9nUmVjUHRyKQorCQl7CisJCQlCYWNrdXBDdGwtPmJhY2t1cHNb aV0uc3RhcnRwb2ludCA9IHN0YXJ0cG9pbnQ7CisJCQlNeUJhY2t1cEluUHJvZ3Jlc3MgPSAm QmFja3VwQ3RsLT5iYWNrdXBzW2ldOworCQkJLyogVXBkYXRlIHRoZSBvbGRlc3Qgc3RhcnRw b2ludCBpZiBuZWNlc3NhcnkgKi8KKwkJCWlmICghWExvZ1JlY1B0cklzVmFsaWQoQmFja3Vw Q3RsLT5vbGRlc3RTdGFydHBvaW50KSB8fAorCQkJCXN0YXJ0cG9pbnQgPCBCYWNrdXBDdGwt Pm9sZGVzdFN0YXJ0cG9pbnQpCisJCQkJCUJhY2t1cEN0bC0+b2xkZXN0U3RhcnRwb2ludCA9 IHN0YXJ0cG9pbnQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlMV0xvY2tSZWxlYXNlKEJhY2t1 cENvbnRyb2xMb2NrKTsKKworCS8qIElmIHRoZSBhcnJheSBpcyBmdWxsLCBiYWlsIG91dCAq LworCWlmIChpID09IG1heF9jb25jdXJyZW50X2JhY2t1cHMpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwK KwkJCQkgZXJybXNnKCJtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IGJhY2t1cHMgcmVh Y2hlZCIpLAorCQkJCSBlcnJoaW50KCJXYWl0IGZvciBhbm90aGVyIGJhY2t1cCB0byBmaW5p c2gsIG9yIGluY3JlYXNlIG1heF9jb25jdXJyZW50X2JhY2t1cHMuIikpKTsKK30KKworLyoK KyAqIFVucmVnaXN0ZXIgdGhpcyBiYWNrdXAuCisgKgorICogV2UgYWxzbyByZWNhbGN1bGF0 ZSB0aGUgb2xkZXN0IHN0YXJ0cG9pbnQgYWNyb3NzIGFsbCByZW1haW5pbmcKKyAqIGluLXBy b2dyZXNzIGJhY2t1cHMuCisgKgorICovCisKK3ZvaWQKK1VucmVnaXN0ZXJCYWNrdXBTdGFy dHBvaW50KHZvaWQpCit7CisJWExvZ1JlY1B0ciBjYW5kaWRhdGVfc3RhcnRwb2ludDsKKwor CWlmIChNeUJhY2t1cEluUHJvZ3Jlc3MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQXNzZXJ0 KEJhY2t1cEN0bCAhPSBOVUxMKTsKKworCUxXTG9ja0FjcXVpcmUoQmFja3VwQ29udHJvbExv Y2ssIExXX0VYQ0xVU0lWRSk7CisKKwlNeUJhY2t1cEluUHJvZ3Jlc3MtPnN0YXJ0cG9pbnQg PSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCS8qIEludmFsaWRhdGUgdGhlIG9sZGVzdCBzdGFy dHBvaW50ICovCisJQmFja3VwQ3RsLT5vbGRlc3RTdGFydHBvaW50ID0gSW52YWxpZFhMb2dS ZWNQdHI7CisJLyogU2NhbiB0aGUgYXJyYXkgdG8gZmluZCB0aGUgbmV3IG9sZGVzdCBzdGFy dHBvaW50ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfY29uY3VycmVudF9iYWNrdXBz OyBpKyspCisJeworCQljYW5kaWRhdGVfc3RhcnRwb2ludCA9IEJhY2t1cEN0bC0+YmFja3Vw c1tpXS5zdGFydHBvaW50OworCQlpZiAoWExvZ1JlY1B0cklzVmFsaWQoY2FuZGlkYXRlX3N0 YXJ0cG9pbnQpICYmCisJCQkoIVhMb2dSZWNQdHJJc1ZhbGlkKEJhY2t1cEN0bC0+b2xkZXN0 U3RhcnRwb2ludCkgfHwKKwkJCSBjYW5kaWRhdGVfc3RhcnRwb2ludCA8IEJhY2t1cEN0bC0+ b2xkZXN0U3RhcnRwb2ludCkpCisJCQlCYWNrdXBDdGwtPm9sZGVzdFN0YXJ0cG9pbnQgID0g Y2FuZGlkYXRlX3N0YXJ0cG9pbnQ7CisJfQorCisJTFdMb2NrUmVsZWFzZShCYWNrdXBDb250 cm9sTG9jayk7CisKKwlNeUJhY2t1cEluUHJvZ3Jlc3MgPSBOVUxMOworfQorCisvKgorICog UmV0dXJuIHRoZSBwcmVjb21wdXRlZCBtaW5pbXVtIHN0YXJ0cG9pbnQgYWNyb3NzIGFsbCBp bi1wcm9ncmVzcyBiYWNrdXBzCisgKiB0byB1c2Ugd2hlbiBkZXRlcm1pbmluZyB3aGF0IFdB TCBzZWdtZW50cyB0byBrZWVwLgorICovCisKK1hMb2dSZWNQdHIKK0dldE9sZGVzdEJhY2t1 cFN0YXJ0TFNOKHZvaWQpCit7CisJWExvZ1JlY1B0cglyZXR2YWw7CisKKwlMV0xvY2tBY3F1 aXJlKEJhY2t1cENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCXJldHZhbCA9IEJhY2t1cEN0 bC0+b2xkZXN0U3RhcnRwb2ludDsKKwlMV0xvY2tSZWxlYXNlKEJhY2t1cENvbnRyb2xMb2Nr KTsKKworCXJldHVybiByZXR2YWw7Cit9CiAKIC8qCiAgKiBCdWlsZCBjb250ZW50cyBmb3Ig YmFja3VwX2xhYmVsIG9yIGJhY2t1cCBoaXN0b3J5IGZpbGUuCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jIGIvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2Vi YWNrdXAuYwppbmRleCBlM2MwNGVjZDgxMC4uOGJkYmIzNTViN2YgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3VwLmMKKysrIGIvc3JjL2JhY2tlbmQvYmFja3Vw L2Jhc2ViYWNrdXAuYwpAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2dfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2JhY2t1cC5oIgorI2luY2x1 ZGUgImFjY2Vzcy94bG9ncmVjb3ZlcnkuaCIKICNpbmNsdWRlICJiYWNrdXAvYmFja3VwX21h bmlmZXN0LmgiCiAjaW5jbHVkZSAiYmFja3VwL2Jhc2ViYWNrdXAuaCIKICNpbmNsdWRlICJi YWNrdXAvYmFzZWJhY2t1cF9pbmNyZW1lbnRhbC5oIgpAQCAtMjQ0LDYgKzI0NSw3IEBAIHBl cmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpvcHQsIGJic2luayAqc2lu aywKIHsKIAliYnNpbmtfc3RhdGUgc3RhdGU7CiAJWExvZ1JlY1B0cgllbmRwdHI7CisJWExv Z1JlY1B0cglyZXNlcnZlX3B0cjsKIAlUaW1lTGluZUlECWVuZHRsaTsKIAliYWNrdXBfbWFu aWZlc3RfaW5mbyBtYW5pZmVzdDsKIAlCYWNrdXBTdGF0ZSAqYmFja3VwX3N0YXRlOwpAQCAt MjY0LDYgKzI2NiwxMyBAQCBwZXJmb3JtX2Jhc2VfYmFja3VwKGJhc2ViYWNrdXBfb3B0aW9u cyAqb3B0LCBiYnNpbmsgKnNpbmssCiAKIAliYWNrdXBfc3RhcnRlZF9pbl9yZWNvdmVyeSA9 IFJlY292ZXJ5SW5Qcm9ncmVzcygpOwogCisJLyogUmVzZXJ2ZSB0aGUgWExvZyBiZWZvcmUg c3RhcnRpbmcgdGhlIGJhY2t1cCAqLworCWlmIChiYWNrdXBfc3RhcnRlZF9pbl9yZWNvdmVy eSkKKwkJcmVzZXJ2ZV9wdHIgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCWVsc2UK KwkJcmVzZXJ2ZV9wdHIgPSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisJUmVnaXN0ZXJCYWNr dXBTdGFydHBvaW50KHJlc2VydmVfcHRyKTsKKwogCUluaXRpYWxpemVCYWNrdXBNYW5pZmVz dCgmbWFuaWZlc3QsIG9wdC0+bWFuaWZlc3QsCiAJCQkJCQkJIG9wdC0+bWFuaWZlc3RfY2hl Y2tzdW1fdHlwZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5 L3dhaXRfZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudF9uYW1lcy50eHQKaW5kZXggMGE3MGNmZmEwODEuLmJiMDFmY2Y3ZjFhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dApAQCAtMzcxLDYgKzM3MSw3IEBAIFdhaXRMU04JIldhaXRpbmcgdG8gcmVhZCBvciB1cGRh dGUgc2hhcmVkIFdhaXQtZm9yLUxTTiBzdGF0ZS4iCiBMb2dpY2FsRGVjb2RpbmdDb250cm9s CSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIGxvZ2ljYWwgZGVjb2Rpbmcgc3RhdHVzIGlu Zm9ybWF0aW9uLiIKIERhdGFDaGVja3N1bXNXb3JrZXIJIldhaXRpbmcgZm9yIGRhdGEgY2hl Y2tzdW1zIHdvcmtlci4iCiBBaW9Xb3JrZXJDb250cm9sCSJXYWl0aW5nIHRvIHVwZGF0ZSBB SU8gd29ya2VyIGluZm9ybWF0aW9uLiIKK0JhY2t1cENvbnRyb2wJIldhaXRpbmcgdG8gdXBk YXRlIGJhc2ViYWNrdXAgc3RhdGUuIgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9D S1MgKERPIE5PVCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAzYzVlMTZhZDFlNy4uMjBkYmUzOTQ2ZWMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0Cisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xOTgz LDYgKzE5ODMsMTQgQEAKICAgbWF4ID0+ICdNQVhfQkFDS0VORFMnLAogfSwKIAoreyBuYW1l ID0+ICdtYXhfY29uY3VycmVudF9iYWNrdXBzJywgdHlwZSA9PiAnaW50JywgY29udGV4dCA9 PiAnUEdDX1BPU1RNQVNURVInLCBncm91cCA9PiAnUkVQTElDQVRJT05fU0VORElORycsCisg IHNob3J0X2Rlc2MgPT4gJ1NldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuZW91 c2x5IHJ1bm5pbmcgYmFzZWJhY2t1cHMuJywKKyAgdmFyaWFibGUgPT4gJ21heF9jb25jdXJy ZW50X2JhY2t1cHMnLAorICBib290X3ZhbCA9PiAnMTAnLAorICBtaW4gPT4gJzEnLAorICBt YXggPT4gJ01BWF9CQUNLRU5EUycsCit9LAorCiB7IG5hbWUgPT4gJ21heF9jb25uZWN0aW9u cycsIHR5cGUgPT4gJ2ludCcsIGNvbnRleHQgPT4gJ1BHQ19QT1NUTUFTVEVSJywgZ3JvdXAg PT4gJ0NPTk5fQVVUSF9TRVRUSU5HUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1NldHMgdGhlIG1h eGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMuJywKICAgdmFyaWFibGUg PT4gJ01heENvbm5lY3Rpb25zJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBlNzU5ZjA2YjUwZi4uMTg2YTI3NzRlZjQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUK QEAgLTI3NSw2ICsyNzUsOCBAQAogI2NvbW1pdF9kZWxheSA9IDAgICAgICAgICAgICAgICAg ICAgICAgICMgcmFuZ2UgMC0xMDAwMDAsIGluIG1pY3Jvc2Vjb25kcwogI2NvbW1pdF9zaWJs aW5ncyA9IDUgICAgICAgICAgICAgICAgICAgICMgcmFuZ2UgMC0xMDAwCiAKKyNtYXhfY29u Y3VycmVudF9iYWNrdXBzID0gMTAgICAgICAgICAgICAjIHJhbmdlIDEtTUFYX0JBQ0tFTkRT ICAKKwogIyAtIENoZWNrcG9pbnRzIC0KIAogI2NoZWNrcG9pbnRfdGltZW91dCA9IDVtaW4g ICAgICAgICAgICAgICMgcmFuZ2UgMzBzLTFkCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MveGxvZ2JhY2t1cC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2diYWNrdXAuaApp bmRleCAyY2MyZjg1ZDlmMC4uNWQ5OTdjYmZjZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy94bG9nYmFja3VwLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2diYWNr dXAuaApAQCAtMzcsNiArMzcsNDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQmFja3VwU3RhdGUKIAlw Z190aW1lX3QJc3RvcHRpbWU7CQkvKiBiYWNrdXAgc3RvcCB0aW1lICovCiB9IEJhY2t1cFN0 YXRlOwogCisvKgorICogU2hhcmVkIG1lbW9yeSBzdGF0ZSBvZiBhIGJhY2t1cCBpbiBwcm9n cmVzcy4gSGVyZSB3ZSBrZWVwIHRyYWNrIG9mIGl0cworICogc3RhcnQgTFNOIHRvIGVuc3Vy ZSBjaGVja3BvaW50cyBkb24ndCByZWN5Y2xlIG9yIHJlbW92ZSB0aGUgY29ycmVzcG9uZGlu ZworICogV0FMIHNlZ21lbnRzIHVudGlsIHdlJ3JlIGRvbmUuCisgKgorICogVXNpbmcgYSBz dHJ1Y3QgaW5zdGVhZCBvZiBhIGJhcmUgWExvZ1JlY1B0ciB0byBhbGxvdyBmdXR1cmUgZXh0 ZW5zaW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmFja3VwSW5Qcm9ncmVzcyB7CisJLyoK KwkgKiBFYWNoIGJhY2t1cCB0cmlnZ2VycyBpdHMgb3duIGNoZWNrcG9pbnQsIHNvIHRoZWly IHN0YXJ0cG9pbnRzIGFyZQorCSAqIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLCBhbmQgd2Ug Y2FuIHVzZSBJbnZhbGlkWExvZ1JlY1B0ciB0byBpbmRpY2F0ZQorCSAqIGFuIGF2YWlsYWJs ZSBlbnRyeQorCSAqLworCVhMb2dSZWNQdHIJc3RhcnRwb2ludDsKK30gQmFja3VwSW5Qcm9n cmVzczsKKworLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgZm9yIGFsbCBpbi1wcm9ncmVz cyBiYWNrdXBzCisgKgorICogSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSBMV0xvY2sgQmFja3Vw Q29udHJvbExvY2s7IGV4Y2x1c2l2ZQorICogZm9yIHdyaXRlcnMsIHNoYXJlZCBmb3IgcmVh ZGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmFja3VwQ3RsRGF0YSB7CisJLyogTWluaW11 bSBzdGFydHBvaW50IG9mIGFsbCBpbi1wcm9ncmVzcyBiYWNrdXBzICovCisJWExvZ1JlY1B0 cgkJCW9sZGVzdFN0YXJ0cG9pbnQ7CisJQmFja3VwSW5Qcm9ncmVzcyAJYmFja3Vwc1tGTEVY SUJMRV9BUlJBWV9NRU1CRVJdOworfSBCYWNrdXBDdGxEYXRhOworCisvKgorICogUG9pbnRl ciB0byBzaGFyZWQgbWVtb3J5CisgKi8KK2V4dGVybiBQR0RMTElNUE9SVCBCYWNrdXBDdGxE YXRhICpCYWNrdXBDdGw7CitleHRlcm4gUEdETExJTVBPUlQgQmFja3VwSW5Qcm9ncmVzcyAq TXlCYWNrdXBJblByb2dyZXNzOworCisvKiBHVUNzICovCitleHRlcm4gUEdETExJTVBPUlQg aW50IG1heF9jb25jdXJyZW50X2JhY2t1cHM7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyQmFj a3VwU3RhcnRwb2ludChYTG9nUmVjUHRyIHN0YXJ0cG9pbnQpOworZXh0ZXJuIHZvaWQgVW5y ZWdpc3RlckJhY2t1cFN0YXJ0cG9pbnQodm9pZCk7CitleHRlcm4gWExvZ1JlY1B0ciBHZXRP bGRlc3RCYWNrdXBTdGFydExTTih2b2lkKTsKKwogZXh0ZXJuIGNoYXIgKmJ1aWxkX2JhY2t1 cF9jb250ZW50KEJhY2t1cFN0YXRlICpzdGF0ZSwKIAkJCQkJCQkJICBib29sIGlzaGlzdG9y eWZpbGUpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3Qu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IGQ3ZWI2NDhiZDI3 Li44MGRmYzU3NzVhMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2ts aXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTg5LDYg Kzg5LDcgQEAgUEdfTFdMT0NLKDU0LCBXYWl0TFNOKQogUEdfTFdMT0NLKDU1LCBMb2dpY2Fs RGVjb2RpbmdDb250cm9sKQogUEdfTFdMT0NLKDU2LCBEYXRhQ2hlY2tzdW1zV29ya2VyKQog UEdfTFdMT0NLKDU3LCBBaW9Xb3JrZXJDb250cm9sKQorUEdfTFdMT0NLKDU4LCBCYWNrdXBD b250cm9sKQogCiAvKgogICogVGhlcmUgYWxzbyBleGlzdCBzZXZlcmFsIGJ1aWx0LWluIExX TG9jayB0cmFuY2hlcy4gIEFzIHdpdGggdGhlIHByZWRlZmluZWQKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc3Vic3lzdGVtbGlzdC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdWJzeXN0ZW1saXN0LmgKaW5kZXggOWFkNjE5MDgwYmUuLmQ4ZDFjNDY5MjI2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaAorKysgYi9zcmMv aW5jbHVkZS9zdG9yYWdlL3N1YnN5c3RlbWxpc3QuaApAQCAtODUsNiArODUsNyBAQCBQR19T SE1FTV9TVUJTWVNURU0oSW5qZWN0aW9uUG9pbnRTaG1lbUNhbGxiYWNrcykKIFBHX1NITUVN X1NVQlNZU1RFTShXYWl0TFNOU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0o TG9naWNhbERlY29kaW5nQ3RsU2htZW1DYWxsYmFja3MpCiBQR19TSE1FTV9TVUJTWVNURU0o RGF0YUNoZWNrc3Vtc1NobWVtQ2FsbGJhY2tzKQorUEdfU0hNRU1fU1VCU1lTVEVNKEJhY2t1 cEN0bFNobWVtQ2FsbGJhY2tzKQogCiAvKiBBSU8gc3Vic3lzdGVtLiBUaGlzIGRlbGVnYXRl cyB0byB0aGUgbWV0aG9kLXNwZWNpZmljIGNhbGxiYWNrcyAqLwogUEdfU0hNRU1fU1VCU1lT VEVNKEFpb1NobWVtQ2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3Zlcnkv bWVzb24uYnVpbGQgYi9zcmMvdGVzdC9yZWNvdmVyeS9tZXNvbi5idWlsZAppbmRleCA3MjEx M2M1YWM2ZS4uZGIwNDVmOWNjMWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlY292ZXJ5L21l c29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkCkBAIC02NSw2 ICs2NSw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzA1NF91bmxvZ2dlZF9zZXF1ZW5jZV9w cm9tb3Rpb24ucGwnLAogICAgICAgJ3QvMDU1X2Nhc2NhZGVfcmVjb25uZWN0LnBsJywKICAg ICAgICd0LzA1Nl9zdGFuZGJ5X3NuYXBzaG90X2V4cG9ydC5wbCcsCisgICAgICAndC8wNTdf YmFzZWJhY2t1cF9zbG90X3JhY2UucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWNvdmVyeS90LzA1N19iYXNlYmFja3VwX3Nsb3RfcmFjZS5wbCBiL3Ny Yy90ZXN0L3JlY292ZXJ5L3QvMDU3X2Jhc2ViYWNrdXBfc2xvdF9yYWNlLnBsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZTgzZjgyNWNhZQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDU3X2Jhc2ViYWNrdXBfc2xvdF9yYWNl LnBsCkBAIC0wLDAgKzEsMTM1IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBWZXJpZnkgdGhhdCBhIGJhc2UgYmFj a3VwJ3Mgc3RhcnRwb2ludCBzdXJ2aXZlcyBXQUwgcmVjeWNsaW5nIHRyaWdnZXJlZCBieQor IyBhIGNvbmN1cnJlbnQgY2hlY2twb2ludCwgZXZlbiBiZWZvcmUgcGdfYmFzZWJhY2t1cCBo YXMgY3JlYXRlZCBpdHMgb3duCisjIHJlcGxpY2F0aW9uIHNsb3QuCisjCisjIFRoZSBpbmpl Y3Rpb24gcG9pbnQgc3RvcHMgQkFTRV9CQUNLVVAgYWZ0ZXIgY2hvb3NpbmcgaXRzIHN0YXJ0 cG9pbnQgYnV0CisjIGJlZm9yZSBzZW5kaW5nIGl0IHRvIHRoZSBjbGllbnQuICBUaGUgdGVz dCByZWN5Y2xlcyBXQUwgdXAgdG8gYW5kIGluY2x1ZGluZworIyB0aGUgc3RhcnRwb2ludCdz IHNlZ21lbnQgd2hpbGUgQkFTRV9CQUNLVVAgaXMgcGF1c2VkIHRoZXJlLCB0aGVuIGxldHMK KyMgcGdfYmFzZWJhY2t1cCBjcmVhdGUgaXRzIHNsb3QgYW5kIHN0YXJ0IHN0cmVhbWluZy4g IFRoZSB0ZXN0IHBhc3NlcyB3aGVuCisjIHRoZSBzdGFydHBvaW50J3MgV0FMIHNlZ21lbnQg aXMgc3RpbGwgb24gZGlzayBhbmQgcGdfYmFzZWJhY2t1cCBzdWNjZWVkcywKKyMgcHJvdmlu ZyB0aGF0IGRvX3BnX2JhY2t1cF9zdGFydCgpIHByb3RlY3RzIHRoZSBzZWdtZW50IGJlZm9y ZSB0aGUgc2xvdAorIyBleGlzdHMuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFU QUwgPT4gJ2FsbCc7Cit1c2UgRmlsZTo6UGF0aCBxdyhybXRyZWUpOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2Ug VGVzdDo6TW9yZTsKKworaWYgKCRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IG5lICd5 ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0luamVjdGlvbiBwb2ludHMgbm90IHN1cHBv cnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworIyBTbWFsbCBXQUwgc2VnbWVudHMgbWFrZSBy ZWN5Y2xpbmcgY2hlYXAuCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygncHJpbWFyeScpOworJG5vZGUtPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAxLCBl eHRyYSA9PiBbICctLXdhbC1zZWdzaXplJywgJzEnIF0pOworJG5vZGUtPmFwcGVuZF9jb25m KAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxWword2FsX2tlZXBfc2l6ZSA9IDAKK21pbl93YWxf c2l6ZSA9IDJNQgorbWF4X3dhbF9zaXplID0gNE1CCitjaGVja3BvaW50X3RpbWVvdXQgPSAx aAorXSk7Ciskbm9kZS0+c3RhcnQ7CisKKyMgaW5qZWN0aW9uX3BvaW50cyBtYXkgbm90IGJl IGluc3RhbGxlZCB1bmRlciBpbnN0YWxsY2hlY2suCitpZiAoISRub2RlLT5jaGVja19leHRl bnNpb24oJ2luamVjdGlvbl9wb2ludHMnKSkKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdFeHRl bnNpb24gaW5qZWN0aW9uX3BvaW50cyBub3QgaW5zdGFsbGVkJzsKK30KKyRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gaW5qZWN0aW9uX3BvaW50czsn KTsKKworIyBTdG9wIEJBU0VfQkFDS1VQIGJlZm9yZSBpdCBzZW5kcyB0aGUgc2VsZWN0ZWQg c3RhcnRwb2ludCB0byB0aGUgY2xpZW50LgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ2Jhc2ViYWNrdXAtYmVmb3Jl LXNlbmQtc3RhcnRwb2ludCcsICd3YWl0Jyk7IgorKTsKKworbXkgJGJhY2t1cGRpciA9ICRu b2RlLT5iYWNrdXBfZGlyIC4gJy9iYXNlYmFja3VwX3JhY2UnOworbXkgKCRiYl9zdGRvdXQs ICRiYl9zdGRlcnIpID0gKCcnLCAnJyk7CitteSAkYmJfdGltZW91dCA9CisgIElQQzo6UnVu Ojp0aW1lb3V0KDMgKiAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVs dCk7CitteSAkYmIgPSBJUEM6OlJ1bjo6c3RhcnQoCisJWworCQkncGdfYmFzZWJhY2t1cCcs CisJCSctLXBnZGF0YScgPT4gJGJhY2t1cGRpciwKKwkJJy0td2FsLW1ldGhvZCcgPT4gJ3N0 cmVhbScsCisJCSctLXNsb3QnID0+ICdiYXNlYmFja3VwX3JhY2UnLAorCQknLS1jcmVhdGUt c2xvdCcsCisJCSctLWNoZWNrcG9pbnQnID0+ICdmYXN0JywKKwkJJy0tbm8tc3luYycsCisJ CSctZCcgPT4gJG5vZGUtPmNvbm5zdHIoJ3Bvc3RncmVzJykKKwldLAorCSc+JyA9PiBcJGJi X3N0ZG91dCwKKwknMj4nID0+IFwkYmJfc3RkZXJyLAorCSRiYl90aW1lb3V0KTsKKworJG5v ZGUtPndhaXRfZm9yX2V2ZW50KCd3YWxzZW5kZXInLCAnYmFzZWJhY2t1cC1iZWZvcmUtc2Vu ZC1zdGFydHBvaW50Jyk7CisKKyMgVGhlIGNsaWVudCBjYW5ub3QgaGF2ZSBjcmVhdGVkIGl0 cyBzbG90IHlldCwgc2luY2UgaXQgaGFzbid0IHJlY2VpdmVkIHRoZQorIyBzdGFydHBvaW50 OyB0aGUgYmFja3VwJ3Mgc3RhcnRwb2ludCBpcyBpbnN0ZWFkIHByb3RlY3RlZCBieSB0aGUg c2hhcmVkCisjIGluLXByb2dyZXNzLWJhY2t1cCByZWdpc3RyeSBhdCB0aGlzIHBvaW50Lgor aXMoICRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsICdTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90czsnKSwKKwknMCcsCisJJ25vIHJlcGxpY2F0aW9u IHNsb3QgZXhpc3RzIHlldCB3aGlsZSBzdGFydHBvaW50IGlzIGhlbGQgb25seSBieSB0aGUg JworCSAgLiAnYmFja3VwIHJlZ2lzdHJ5Jyk7CisKKyMgZG9fcGdfYmFja3VwX3N0YXJ0KCkg dXNlZCB0aGUgY3VycmVudCBjaGVja3BvaW50J3MgUkVETyBwb2ludGVyLgorbXkgJHN0YXJ0 cG9pbnRfd2FsID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSdTRUxFQ1QgcGdf d2FsZmlsZV9uYW1lKHJlZG9fbHNuKSBGUk9NIHBnX2NvbnRyb2xfY2hlY2twb2ludCgpOycp Oworbm90ZSAiYmFja3VwIHN0YXJ0cG9pbnQgaXMgaW4gV0FMIHNlZ21lbnQgJHN0YXJ0cG9p bnRfd2FsIjsKKworaXMoICRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19sc193YWxkaXIoKSBXSEVSRSBuYW1lID0gJyRzdGFy dHBvaW50X3dhbCc7IgorCSksCisJJzEnLAorCSdXQUwgc2VnbWVudCBjb250YWluaW5nIHRo ZSBiYWNrdXAgc3RhcnRwb2ludCBleGlzdHMgd2hpbGUgd2FpdGluZycpOworCisjIEZvcmNl IGVub3VnaCBXQUwgYWN0aXZpdHkgYW5kIGEgY2hlY2twb2ludCB0byBtYWtlIHRoZSBzZXJ2 ZXIgd2FudCB0bworIyByZWN5Y2xlIHRoZSBzdGFydHBvaW50J3Mgc2VnbWVudC4gIFRoZSBi YWNrdXAgcmVnaXN0cnkgc2hvdWxkIGtlZXAgaXQKKyMgYXJvdW5kIGFueXdheSwgZXZlbiB0 aG91Z2ggbm8gcmVwbGljYXRpb24gc2xvdCBwcm90ZWN0cyBpdCB5ZXQuCiskbm9kZS0+YWR2 YW5jZV93YWwoMTApOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ0hFQ0tQT0lO VDsnKTsKK2lzKCAkbm9kZS0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLAorCQkiU0VMRUNU IGNvdW50KCopIEZST00gcGdfbHNfd2FsZGlyKCkgV0hFUkUgbmFtZSA9ICckc3RhcnRwb2lu dF93YWwnOyIKKwkpLAorCScxJywKKwknV0FMIHNlZ21lbnQgY29udGFpbmluZyB0aGUgYmFj a3VwIHN0YXJ0cG9pbnQgc3Vydml2ZXMgYSBjb25jdXJyZW50ICcKKwkgIC4gJ2NoZWNrcG9p bnQnCispOworCisjIExldCBwZ19iYXNlYmFja3VwIGNyZWF0ZSB0aGUgc2xvdCBhbmQgcmVx dWVzdCBXQUwgc3RhcnRpbmcgYXQgdGhlCisjIChzdGlsbC1wcmVzZW50KSBzdGFydHBvaW50 LgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5qZWN0aW9uX3Bv aW50c193YWtldXAoJ2Jhc2ViYWNrdXAtYmVmb3JlLXNlbmQtc3RhcnRwb2ludCcpOyIpOwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50 c19kZXRhY2goJ2Jhc2ViYWNrdXAtYmVmb3JlLXNlbmQtc3RhcnRwb2ludCcpOyIpOworCisk YmItPmZpbmlzaDsKK25vdGUgInBnX2Jhc2ViYWNrdXAgc3RkZXJyOlxuJGJiX3N0ZGVyciI7 CisKK2lzKCRiYi0+cmVzdWx0KDApLCAwLCAncGdfYmFzZWJhY2t1cCBzdWNjZWVkZWQgZGVz cGl0ZSBjb25jdXJyZW50IFdBTCByZWN5Y2xpbmcnKQorICBvciBkaWFnICJwZ19iYXNlYmFj a3VwIHN0ZG91dDogJGJiX3N0ZG91dFxucGdfYmFzZWJhY2t1cCBzdGRlcnI6ICRiYl9zdGRl cnIiOworCisjIFRoZSBzbG90IHJlcXVlc3RlZCB2aWEgLS1jcmVhdGUtc2xvdCBzaG91bGQg bm93IGV4aXN0LgoraXMoICRub2RlLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyBXSEVSRSBzbG90X25h bWUgPSAiCisJCSAgLiAiJ2Jhc2ViYWNrdXBfcmFjZSc7IiksCisJJzEnLAorCSdyZXBsaWNh dGlvbiBzbG90IHdhcyBjcmVhdGVkIG9uY2UgcGdfYmFzZWJhY2t1cCByZWNlaXZlZCB0aGUg c3RhcnRwb2ludCcKKyk7CisKK3JtdHJlZSgkYmFja3VwZGlyKTsKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdChzbG90 X25hbWUpIEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMgIgorCSAgLiAiV0hFUkUgc2xvdF9u YW1lID0gJ2Jhc2ViYWNrdXBfcmFjZSc7IgorKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoy LjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --------------yw1NOeCUzFwUVM2IUta1EN79--