Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r7hD2-006Kto-BX for pgsql-bugs@arkaria.postgresql.org; Mon, 27 Nov 2023 19:23:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r7hD1-00G6SK-1a for pgsql-bugs@arkaria.postgresql.org; Mon, 27 Nov 2023 19:23:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r7hD0-00G6Rn-Cq for pgsql-bugs@lists.postgresql.org; Mon, 27 Nov 2023 19:23:54 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r7hCs-007eO2-8w for pgsql-bugs@lists.postgresql.org; Mon, 27 Nov 2023 19:23:53 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4SfFqw3mftz49Pwb; Mon, 27 Nov 2023 21:23:37 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1701113021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=2J4DQPozx3LrZr5bM5pXCVB0pH0mHshvAMojSfOA0h8=; b=Fa3zDic1k+PXt/pfGWDpKJKrwHfPiY1skcUU0QrY4OUthAJksSfPQkmYtFebggm5QZCfD0 +9lW7EhJhXKZYfqcOTX96HFGKBwoXwtOA24YD6HmDIdbHO6CrIV9WEGJ4NOmuerh5YZXIl 8lEmhIc9mUxQr9iuUxr2kO0Sy2vyhhkI1nAogu1whveTHmZjrkzEbTEClkuLoY5Qlauqqq R9G29pG1ckY7cIcErN4JII9V6PxuqK9l054pR2/UQ50pYvQ9FrbQAn10wqQXVpPHCqWU01 3HKK9V0PLtoDec7DRwy0+ekaiv2iOlBzptZdnT/o0Z/nAJuToQb/Z7a54MVkmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1701113021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=2J4DQPozx3LrZr5bM5pXCVB0pH0mHshvAMojSfOA0h8=; b=m3l9dKtZZGhVENU64rLQJO5cw6BlLza+hHqYYgzPdR5rOKs4YXJU2pfIvy2rS+1oTxZqrw dkl4RluiaNPi9zGumVhsePfCN1iAFszaWuVAgZUEXx1Y/Db4T10YLQe557eGOX0jYIwtMb YMe9wj1wVE48iaopxJBbqgD/j2kyrAnJ8w13XRRFv7Alr71VakYaa2wkRukQS3gY5TjxhC T3ACcWQl+OFg4LoWS9i31r3NfCzzEVtJVyRTiSFY0jo8zPiaVUMNsQM47s1ixfcF3tUiMv HwmGJOU/1ed6pt3c5bCFBheam3ddU4a0YBhB5n0Im3W9h4r7oi5nMihrSEuVAg== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1701113021; a=rsa-sha256; cv=none; b=dD52R1FokTLQ0NJEnVVa1Jvd41aZY4GvreM+5+yJ7HBZBqU24LytFTvMhrAoBwi3rym0s8 FiU2uqHSwc1GFOV0dxViMALROX2c0oW5lm9BbPw0+8vcWzwnxep+jOhyWxJVBS5N/DsVqt RXG1cPAea/l1miJlP8J7qR2is7bQRe/w9+6kcxabB5fuffWvoD9HyVR7xT7Ys7UEt8xWki 0IQTYGehnF3yaz2CsPz/XbwCTQF3BwM5N9f2txD4WG6GzgrBKJ3MT9iP6uUulbxSncvRBT zT5FfMGttUi/1KlfOT8KrMjd+mZw8OPe8A0ttHgiCtGiPC5M31os7ARLeUkyBQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------FTairs0nJ70JJVHY99JeVMQ3" Message-ID: <0c6e10cd-9288-4dda-b35e-7a64684367d3@iki.fi> Date: Mon, 27 Nov 2023 21:23:37 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Heikki Linnakangas Subject: Re: BUG #17893: Assert failed in heap_update()/_delete() when FK modiified by RI trigger in non-read-committed xact To: Alexander Lakhin , pgsql-bugs@lists.postgresql.org, Andres Freund References: <17893-35847009eec517b5@postgresql.org> <1236e144-d772-7ff4-6e23-4ce91d0923ad@gmail.com> Content-Language: en-US In-Reply-To: <1236e144-d772-7ff4-6e23-4ce91d0923ad@gmail.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. --------------FTairs0nJ70JJVHY99JeVMQ3 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 23/10/2023 09:00, Alexander Lakhin wrote: > Third, with this change applied I immediately got a failure of the next > assert in heap_delete(): > [added more context to show the code better] > if (crosscheck != InvalidSnapshot && result == TM_Ok) > { > /* Perform additional check for transaction-snapshot mode RI updates */ > if (!HeapTupleSatisfiesVisibility(&oldtup, crosscheck, buffer)) > { > result = TM_Updated; > Assert(!ItemPointerEquals(&oldtup.t_self, &oldtup.t_data->t_ctid)); > } > } Yeah that Assert is wrong and should be removed. I think it's trying to assert that if we are deleting a tuple and the visibility check fails, it must be because it was concurrently updated, not because the inserting XID is not visible. But that doesn't hold for this additional check with RI updates, the inserting XID might well be invisible to the crosscheck snapshot. >> which was introduced by 5db6df0c0. > Sorry for my mistake here. I had cited a wrong line. It should be: >         Assert(result != TM_Updated || >                !ItemPointerEquals(&tp.t_self, &tp.t_data->t_ctid)); > As I still can't see, which cases those asserts intended for, but see cases > when they are falsified, I propose removing them. > Please look at the complete patch attached. I propose to attached slight variation, which moves the assertions before the crosscheck snapshot check. The assertions are correct as they are, if you don't need to take the crosscheck into account. I'm a little worried if the callers of tuple_update() might also get confused when tuple_update() returns TM_Updated but xmax is invalid. As you said: > So in the latter case the tuple's xmin is not committed according to the > crosscheck snapshot. Meanwhile, a comment in nodeModifyTable.c says: > * Note: if es_crosscheck_snapshot isn't InvalidSnapshot, we check that > * the row to be updated is visible to that snapshot, and throw a > * can't-serialize error if not. ... > > > And with a non-assert build I really get: > ERROR: could not serialize access due to concurrent update > in these cases. I think you only get that error with REPEATABLE READ or SERIALIZABLE isolation level. I don't quite understand how this works. In READ COMMITTED level, ISTM that ExecUpdate() or ExecDelete() will proceed with EvalPlanQualSlot() and locking the row with table_tuple_lock(). Or do we never use the cross-check snapshot in READ COMMITTED mode? -- Heikki Linnakangas Neon (https://neon.tech) --------------FTairs0nJ70JJVHY99JeVMQ3 Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Fix-assertions-with-RI-triggers-in-heap_update-an.patch" Content-Disposition: attachment; filename*0="v2-0001-Fix-assertions-with-RI-triggers-in-heap_update-an.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkM2Y3MzNlYmIxNWM4ZGY1NzZiMjFlNTlkN2M4NTgyYzc4MWJiNmE3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjcgTm92IDIwMjMgMjE6MTc6NTQgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyIDEvMV0gRml4IGFzc2VydGlvbnMgd2l0aCBSSSB0cmlnZ2Vy cyBpbiBoZWFwX3VwZGF0ZSBhbmQKIGhlYXBfZGVsZXRlLgoKSWYgdGhlIHR1cGxlIGJlaW5n IHVwZGF0ZWQgaXMgbm90IHZpc2libGUgdG8gdGhlIGNyb3NzY2hlY2sgc25hcHNob3QsCndl IHJldHVybiBUTV9VcGRhdGVkIGJ1dCB0aGUgYXNzZXJ0aW9ucyB3b3VsZCBub3QgaG9sZCBp biB0aGF0IGNhc2UuCk1vdmUgdGhlbSB0byBiZWZvcmUgdGhlIGNyb3NzLWNoZWNrLgoKRml4 ZXMgYnVnICMxNzg5My4KCkF1dGhvcjogQWxleGFuZGVyIExha2hpbgpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzE3ODkzLTM1ODQ3MDA5ZWVj NTE3YjUlNDBwb3N0Z3Jlc3FsLm9yZwotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jICAgICAgICAgICAgfCA0MSArKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgfCAgNCArLQogc3JjL3Rlc3Qv aXNvbGF0aW9uL2V4cGVjdGVkL2ZrLXNuYXBzaG90Lm91dCB8IDIyICsrKysrKysrKysrCiBz cmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmstc25hcHNob3Quc3BlYyAgIHwgMTcgKysrKysr KystCiA0IGZpbGVzIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggMTRkZTgxNThkNC4uZjkzODcx NTM1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTI3MDgsMTMgKzI3MDgs NyBAQCBsMToKIAkJCXJlc3VsdCA9IFRNX0RlbGV0ZWQ7CiAJfQogCi0JaWYgKGNyb3NzY2hl Y2sgIT0gSW52YWxpZFNuYXBzaG90ICYmIHJlc3VsdCA9PSBUTV9PaykKLQl7Ci0JCS8qIFBl cmZvcm0gYWRkaXRpb25hbCBjaGVjayBmb3IgdHJhbnNhY3Rpb24tc25hcHNob3QgbW9kZSBS SSB1cGRhdGVzICovCi0JCWlmICghSGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0eSgmdHAs IGNyb3NzY2hlY2ssIGJ1ZmZlcikpCi0JCQlyZXN1bHQgPSBUTV9VcGRhdGVkOwotCX0KLQor CS8qIHNhbml0eSBjaGVjayB0aGUgcmVzdWx0IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0ZSgp IGFuZCB0aGUgbG9naWMgYWJvdmUgKi8KIAlpZiAocmVzdWx0ICE9IFRNX09rKQogCXsKIAkJ QXNzZXJ0KHJlc3VsdCA9PSBUTV9TZWxmTW9kaWZpZWQgfHwKQEAgLTI3MjQsNiArMjcxOCwx NyBAQCBsMToKIAkJQXNzZXJ0KCEodHAudF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9YTUFY X0lOVkFMSUQpKTsKIAkJQXNzZXJ0KHJlc3VsdCAhPSBUTV9VcGRhdGVkIHx8CiAJCQkgICAh SXRlbVBvaW50ZXJFcXVhbHMoJnRwLnRfc2VsZiwgJnRwLnRfZGF0YS0+dF9jdGlkKSk7CisJ fQorCisJaWYgKGNyb3NzY2hlY2sgIT0gSW52YWxpZFNuYXBzaG90ICYmIHJlc3VsdCA9PSBU TV9PaykKKwl7CisJCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBjaGVjayBmb3IgdHJhbnNhY3Rp b24tc25hcHNob3QgbW9kZSBSSSB1cGRhdGVzICovCisJCWlmICghSGVhcFR1cGxlU2F0aXNm aWVzVmlzaWJpbGl0eSgmdHAsIGNyb3NzY2hlY2ssIGJ1ZmZlcikpCisJCQlyZXN1bHQgPSBU TV9VcGRhdGVkOworCX0KKworCWlmIChyZXN1bHQgIT0gVE1fT2spCisJewogCQl0bWZkLT5j dGlkID0gdHAudF9kYXRhLT50X2N0aWQ7CiAJCXRtZmQtPnhtYXggPSBIZWFwVHVwbGVIZWFk ZXJHZXRVcGRhdGVYaWQodHAudF9kYXRhKTsKIAkJaWYgKHJlc3VsdCA9PSBUTV9TZWxmTW9k aWZpZWQpCkBAIC0zMzQyLDE2ICszMzQ3LDcgQEAgbDI6CiAJCQlyZXN1bHQgPSBUTV9EZWxl dGVkOwogCX0KIAotCWlmIChjcm9zc2NoZWNrICE9IEludmFsaWRTbmFwc2hvdCAmJiByZXN1 bHQgPT0gVE1fT2spCi0JewotCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgY2hlY2sgZm9yIHRy YW5zYWN0aW9uLXNuYXBzaG90IG1vZGUgUkkgdXBkYXRlcyAqLwotCQlpZiAoIUhlYXBUdXBs ZVNhdGlzZmllc1Zpc2liaWxpdHkoJm9sZHR1cCwgY3Jvc3NjaGVjaywgYnVmZmVyKSkKLQkJ ewotCQkJcmVzdWx0ID0gVE1fVXBkYXRlZDsKLQkJCUFzc2VydCghSXRlbVBvaW50ZXJFcXVh bHMoJm9sZHR1cC50X3NlbGYsICZvbGR0dXAudF9kYXRhLT50X2N0aWQpKTsKLQkJfQotCX0K LQorCS8qIFNhbml0eSBjaGVjayB0aGUgcmVzdWx0IEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0 ZSgpIGFuZCB0aGUgbG9naWMgYWJvdmUgKi8KIAlpZiAocmVzdWx0ICE9IFRNX09rKQogCXsK IAkJQXNzZXJ0KHJlc3VsdCA9PSBUTV9TZWxmTW9kaWZpZWQgfHwKQEAgLTMzNjEsNiArMzM1 NywxNyBAQCBsMjoKIAkJQXNzZXJ0KCEob2xkdHVwLnRfZGF0YS0+dF9pbmZvbWFzayAmIEhF QVBfWE1BWF9JTlZBTElEKSk7CiAJCUFzc2VydChyZXN1bHQgIT0gVE1fVXBkYXRlZCB8fAog CQkJICAgIUl0ZW1Qb2ludGVyRXF1YWxzKCZvbGR0dXAudF9zZWxmLCAmb2xkdHVwLnRfZGF0 YS0+dF9jdGlkKSk7CisJfQorCisJaWYgKGNyb3NzY2hlY2sgIT0gSW52YWxpZFNuYXBzaG90 ICYmIHJlc3VsdCA9PSBUTV9PaykKKwl7CisJCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBjaGVj ayBmb3IgdHJhbnNhY3Rpb24tc25hcHNob3QgbW9kZSBSSSB1cGRhdGVzICovCisJCWlmICgh SGVhcFR1cGxlU2F0aXNmaWVzVmlzaWJpbGl0eSgmb2xkdHVwLCBjcm9zc2NoZWNrLCBidWZm ZXIpKQorCQkJcmVzdWx0ID0gVE1fVXBkYXRlZDsKKwl9CisKKwlpZiAocmVzdWx0ICE9IFRN X09rKQorCXsKIAkJdG1mZC0+Y3RpZCA9IG9sZHR1cC50X2RhdGEtPnRfY3RpZDsKIAkJdG1m ZC0+eG1heCA9IEhlYXBUdXBsZUhlYWRlckdldFVwZGF0ZVhpZChvbGR0dXAudF9kYXRhKTsK IAkJaWYgKHJlc3VsdCA9PSBUTV9TZWxmTW9kaWZpZWQpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApp bmRleCBkYmI3MDliNTZjLi4xZWJmNWE3NGMzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAg LTE0NzksOCArMTQ3OSw4IEBAIHRhYmxlX211bHRpX2luc2VydChSZWxhdGlvbiByZWwsIFR1 cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBuc2xvdHMsCiAgKiBUTV9CZWluZ01vZGlmaWVk ICh0aGUgbGFzdCBvbmx5IHBvc3NpYmxlIGlmIHdhaXQgPT0gZmFsc2UpLgogICoKICAqIElu IHRoZSBmYWlsdXJlIGNhc2VzLCB0aGUgcm91dGluZSBmaWxscyAqdG1mZCB3aXRoIHRoZSB0 dXBsZSdzIHRfY3RpZCwKLSAqIHRfeG1heCwgYW5kLCBpZiBwb3NzaWJsZSwgYW5kLCBpZiBw b3NzaWJsZSwgdF9jbWF4LiAgU2VlIGNvbW1lbnRzIGZvcgotICogc3RydWN0IFRNX0ZhaWx1 cmVEYXRhIGZvciBhZGRpdGlvbmFsIGluZm8uCisgKiB0X3htYXgsIGFuZCwgaWYgcG9zc2li bGUsIHRfY21heC4gIFNlZSBjb21tZW50cyBmb3Igc3RydWN0CisgKiBUTV9GYWlsdXJlRGF0 YSBmb3IgYWRkaXRpb25hbCBpbmZvLgogICovCiBzdGF0aWMgaW5saW5lIFRNX1Jlc3VsdAog dGFibGVfdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgdGlkLCBDb21t YW5kSWQgY2lkLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2Zr LXNuYXBzaG90Lm91dCBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1zbmFwc2hv dC5vdXQKaW5kZXggNWZhZjgwZDZjZS4uYmRkMjZiYWM2YyAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvaXNvbGF0aW9uL2V4cGVjdGVkL2ZrLXNuYXBzaG90Lm91dAorKysgYi9zcmMvdGVzdC9p c29sYXRpb24vZXhwZWN0ZWQvZmstc25hcHNob3Qub3V0CkBAIC0xMjIsMyArMTIyLDI1IEBA IGEKIDEKICgxIHJvdykKIAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJpcDIgczFicnIg czFpZnAyIHMyYnJyIHMyZHAyIHMxYyBzMmMKK3N0ZXAgczJpcDI6IElOU0VSVCBJTlRPIHBr X25vcGFydGVkIFZBTFVFUyAoMik7CitzdGVwIHMxYnJyOiBCRUdJTiBJU09MQVRJT04gTEVW RUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBzMWlmcDI6IElOU0VSVCBJTlRPIGZrX3BhcnRl ZF9wayBWQUxVRVMgKDIpOworc3RlcCBzMmJycjogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJF UEVBVEFCTEUgUkVBRDsKK3N0ZXAgczJkcDI6IERFTEVURSBGUk9NIHBrX25vcGFydGVkIFdI RVJFIGEgPSAyOyA8d2FpdGluZyAuLi4+CitzdGVwIHMxYzogQ09NTUlUOworc3RlcCBzMmRw MjogPC4uLiBjb21wbGV0ZWQ+CitFUlJPUjogIGNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNz IGR1ZSB0byBjb25jdXJyZW50IHVwZGF0ZQorc3RlcCBzMmM6IENPTU1JVDsKKworc3RhcnRp bmcgcGVybXV0YXRpb246IHMyaXAyIHMxYnJyIHMxaWZuMiBzMmJyciBzMmRwMiBzMWMgczJj CitzdGVwIHMyaXAyOiBJTlNFUlQgSU5UTyBwa19ub3BhcnRlZCBWQUxVRVMgKDIpOworc3Rl cCBzMWJycjogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAg czFpZm4yOiBJTlNFUlQgSU5UTyBma19ub3BhcnRlZF9zbiBWQUxVRVMgKDIpOworc3RlcCBz MmJycjogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgczJk cDI6IERFTEVURSBGUk9NIHBrX25vcGFydGVkIFdIRVJFIGEgPSAyOyA8d2FpdGluZyAuLi4+ CitzdGVwIHMxYzogQ09NTUlUOworc3RlcCBzMmRwMjogPC4uLiBjb21wbGV0ZWQ+CitFUlJP UjogIGNvdWxkIG5vdCBzZXJpYWxpemUgYWNjZXNzIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0 ZQorc3RlcCBzMmM6IENPTU1JVDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9z cGVjcy9may1zbmFwc2hvdC5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2ZrLXNu YXBzaG90LnNwZWMKaW5kZXggMzc4NTA3ZmJjMy4uOWZhZDU3ZTc2OCAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2ZrLXNuYXBzaG90LnNwZWMKKysrIGIvc3JjL3Rl c3QvaXNvbGF0aW9uL3NwZWNzL2ZrLXNuYXBzaG90LnNwZWMKQEAgLTEzLDYgKzEzLDExIEBA IHNldHVwCiAgIENSRUFURSBUQUJMRSBma19ub3BhcnRlZCAoCiAJYQkJCWludAkJUkVGRVJF TkNFUyBma19wYXJ0ZWRfcGsgT04gREVMRVRFIE5PIEFDVElPTiBJTklUSUFMTFkgREVGRVJS RUQKICAgKTsKKworICBDUkVBVEUgVEFCTEUgZmtfbm9wYXJ0ZWRfc24gKAorCWEJCQlpbnQJ CVJFRkVSRU5DRVMgcGtfbm9wYXJ0ZWQgT04gREVMRVRFIFNFVCBOVUxMCisgICk7CisKICAg SU5TRVJUIElOVE8gcGtfbm9wYXJ0ZWQgVkFMVUVTICgxKTsKICAgSU5TRVJUIElOVE8gZmtf cGFydGVkX3BrIFZBTFVFUyAoMSk7CiAgIElOU0VSVCBJTlRPIGZrX25vcGFydGVkIFZBTFVF UyAoMSk7CkBAIC0yMCw3ICsyNSw3IEBAIHNldHVwCiAKIHRlYXJkb3duCiB7Ci0gIERST1Ag VEFCTEUgcGtfbm9wYXJ0ZWQsIGZrX3BhcnRlZF9waywgZmtfbm9wYXJ0ZWQ7CisgIERST1Ag VEFCTEUgcGtfbm9wYXJ0ZWQsIGZrX3BhcnRlZF9waywgZmtfbm9wYXJ0ZWQsIGZrX25vcGFy dGVkX3NuOwogfQogCiBzZXNzaW9uIHMxCkBAIC0yOCw2ICszMyw3IEBAIHN0ZXAgczFicnIJ eyBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CiBzdGVwIHMxYnJj CXsgQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFQUQgQ09NTUlUVEVEOyB9CiBzdGVwIHMxaWZw Mgl7IElOU0VSVCBJTlRPIGZrX3BhcnRlZF9wayBWQUxVRVMgKDIpOyB9CiBzdGVwIHMxaWZw MQl7IElOU0VSVCBJTlRPIGZrX3BhcnRlZF9wayBWQUxVRVMgKDEpOyB9CitzdGVwIHMxaWZu Mgl7IElOU0VSVCBJTlRPIGZrX25vcGFydGVkX3NuIFZBTFVFUyAoMik7IH0KIHN0ZXAgczFk ZnAJeyBERUxFVEUgRlJPTSBma19wYXJ0ZWRfcGsgV0hFUkUgYSA9IDE7IH0KIHN0ZXAgczFj CXsgQ09NTUlUOyB9CiBzdGVwIHMxc2ZwCXsgU0VMRUNUICogRlJPTSBma19wYXJ0ZWRfcGs7 IH0KQEAgLTM4LDYgKzQ0LDcgQEAgc2Vzc2lvbiBzMgogc3RlcCBzMmJycgl7IEJFR0lOIElT T0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7IH0KIHN0ZXAgczJicmMJeyBCRUdJTiBJ U09MQVRJT04gTEVWRUwgUkVBRCBDT01NSVRURUQ7IH0KIHN0ZXAgczJpcDIJeyBJTlNFUlQg SU5UTyBwa19ub3BhcnRlZCBWQUxVRVMgKDIpOyB9CitzdGVwIHMyZHAyCXsgREVMRVRFIEZS T00gcGtfbm9wYXJ0ZWQgV0hFUkUgYSA9IDI7IH0KIHN0ZXAgczJpZm4yCXsgSU5TRVJUIElO VE8gZmtfbm9wYXJ0ZWQgVkFMVUVTICgyKTsgfQogc3RlcCBzMmMJeyBDT01NSVQ7IH0KIHN0 ZXAgczJzZnAJeyBTRUxFQ1QgKiBGUk9NIGZrX3BhcnRlZF9wazsgfQpAQCAtNTksMyArNjYs MTEgQEAgcGVybXV0YXRpb24gczFicmMgczJicmMgczJpcDIgczFzcCBzMmMgczFzcCBzMWlm cDIgczJicmMgczJzZnAgczFjIHMxc2ZwIHMyaWZuMgogIyB0aGUgc2FtZSBubyBtYXR0ZXIg dGhlIHNuYXBzaG90IG1vZGUKIHBlcm11dGF0aW9uIHMxYnJyIHMxZGZwIHMxaWZwMSBzMWMg czFzZm4KIHBlcm11dGF0aW9uIHMxYnJjIHMxZGZwIHMxaWZwMSBzMWMgczFzZm4KKworIyB0 cnlpbmcgdG8gZGVsZXRlIGEgcm93IHRocm91Z2ggREVMRVRFIENBU0NBREUsIHdoaWxzdCB0 aGF0IHJvdyBpcyBkZWxldGVkCisjIGluIGEgY29uY3VycmVudCB0cmFuc2FjdGlvbgorcGVy bXV0YXRpb24gczJpcDIgczFicnIgczFpZnAyIHMyYnJyIHMyZHAyIHMxYyBzMmMKKworIyB0 cnlpbmcgdG8gdXBkYXRlIGEgcm93IHRocm91Z2ggREVMRVRFIFNFVCBOVUxMLCB3aGlsc3Qg dGhhdCByb3cgaXMgZGVsZXRlZAorIyBpbiBhIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24KK3Bl cm11dGF0aW9uIHMyaXAyIHMxYnJyIHMxaWZuMiBzMmJyciBzMmRwMiBzMWMgczJjCi0tIAoy LjM5LjIKCg== --------------FTairs0nJ70JJVHY99JeVMQ3--