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 1u2XFV-0025hw-GN for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Apr 2025 15:21:58 +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 1u2XFT-004Axp-14 for pgsql-hackers@arkaria.postgresql.org; Wed, 09 Apr 2025 15:21:55 +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.94.2) (envelope-from ) id 1u2XFS-004AlG-GR for pgsql-hackers@lists.postgresql.org; Wed, 09 Apr 2025 15:21:55 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1u2XFQ-004MNw-0g for pgsql-hackers@postgresql.org; Wed, 09 Apr 2025 15:21:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1744212110; bh=DvspIwC8QItvWGzwzzE4k5Evun9YinWynAnAT+HTvBo=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=g2M0l7mbJg7UknzggefDktvy96k+QkF6+zXmRZzrodrHTTWkLITJjvyIyM1iHOFqH /qo/Fy24WfLXmV2uHvU8iwtpwFFkOaUaANNkPkNJxzaNZEvGEUOo7T70ajM5WbCmEj awzAkmKJFrgJkxYHh1kCK/sZoyyJg5Pqn5n41nj3VWvsU+Ju6ogpNmf2+inzB++DoC 6ciY/I31zLTfiF+wtcHg0ErVDfb+6AGCASuVUN7VebrOwCH6ro4Z17qYHK6NQx3SMK nrLDJ7iz0XG4m1sHklzFPry2vHs3nRq82iheKtgmo+dG2pD186Ybn+dMkLSot48xiE msjs5HQVqsjQw== Received: from [172.30.49.230] (unknown [93.174.131.138]) (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) (Client did not present a certificate) (Authenticated sender: m.melnikov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id 62A415FF34; Wed, 9 Apr 2025 18:21:50 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------AB2XUp2AOMDPj2oM0hMvMmiR" Message-ID: <69541672-0fa2-41ea-af52-6e6110bf7235@postgrespro.ru> Date: Wed, 9 Apr 2025 18:21:50 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: sync_standbys_defined read/write race on startup To: Michael Paquier Cc: Kirill Reshke , PostgreSQL Hackers References: <163fcbec-900b-4b07-beaa-d2ead8634bec@postgrespro.ru> Content-Language: en-US From: "Maksim.Melnikov" In-Reply-To: X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/04/09 12:35:00 #27868154 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 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. --------------AB2XUp2AOMDPj2oM0hMvMmiR Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Michael, thanks for your answer. Test 041_checkpoint_at_promote.pl is really good example of using injection points, but anyway, I still don't see how injection points can help us here. In failed test case we started postgres, immediately open psql connection and commit prepared transaction. Postgres, on start, before accepting connections, fork checkpointer and checkpointer initialize shared parameter sync_standbys_defined in CheckpointerMain, before process loop. So, in most attempts, we can't call injection_points_attach in psql before macro INJECTION_POINT() code will be executed in checkpointer(I mean INJECTION_POINT() code instead sleep()), bacause checkpointer process is forking before database system is ready to accept connections. The manual execution of checkpoint can't help us too. P.S. sorry for style errors, I am new in postgres, so can miss some rules. Anyway, to avoid any community rules mistakes, attached patch with correct naming. Thanks. Best regards, Maksim Melnikov --------------AB2XUp2AOMDPj2oM0hMvMmiR Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-Fix-sync_standbys_defined-race-on-startup.patch" Content-Disposition: attachment; filename="v4-0001-Fix-sync_standbys_defined-race-on-startup.patch" Content-Transfer-Encoding: base64 RnJvbSA4ODA0ODY3YTcwYzljMWM5NDY2ODNiOWI5YzQ1NWRhMmQxNTA0YWEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYWtzaW0gTWVsbmlrb3YgPG0ubWVsbmlrb3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IFdlZCwgMjYgTWFyIDIwMjUgMTY6NDQ6MDkgKzAzMDAKU3Vi amVjdDogW1BBVENIIHY0XSBGaXggc3luY19zdGFuZGJ5c19kZWZpbmVkIHJhY2Ugb24gc3Rh cnR1cC4KCldhbFNuZEN0bC0+c3luY19zdGFuZGJ5c19kZWZpbmVkLCBjYW4gYmUgdXBkYXRl ZApieSBjaGVja3BvaW50ZXIgcHJvY2VzcyBvbmx5IGFuZCBpbiBiYWNrZW5kcyBpdApjYW4g YmUgcmVhZC4gU28sIG9uIHBvc3RncmVzIHN0YXJ0dXAsIHdlIGhhdmUgcmFjZQpiZXR3ZWVu IGNoZWNrcG9pbnRlciBwcm9jZXNzIGFuZCBiYWNrZW5kcywgdGhhdCBjaGVjawpzeW5jX3N0 YW5kYnlzX2RlZmluZWQgZm9yIHN5bmMgcmVwbGljYXRpb25zLgoKVG8gYXZvaWQgdGhpcywg bm93IHdlIGFyZSB3b3JraW5nIHdpdGggc3luY19zdGFuZGJ5c19kZWZpbmVkCm5vdCBhcyBi b29sIGZpZWxkLCBidXQgYXMgYml0bWFzaywgd2hlcmUgN3RoIGJpdCBjaGVjawpzdGFuZGJ5 c19kZWZpbmVkIG9yIG5vdCwgOHRoIGJpdCBjaGVjawpXYWxTbmRDdGxEYXRhLT5zeW5jX3N0 YW5kYnlzX2RlZmluZWQgZmllbGQgaGFzIGJlZW4KaW5pdGlhbGl6ZWQgYnkgY2hlY2twb2lu dGVyLiBTbyBpZiBpbiBzeW5jaHJvbm91cyByZXBsaWNhdGlvbiBmdW5jdGlvbnMKd2FzIGRl dGVjdGVkIHRoYXQgc3luY19zdGFuZGJ5c19kZWZpbmVkIGlzIG5vdCBpbml0aWFsaXplZCwK Y2hlY2sgU3luY1N0YW5kYnlzRGVmaW5lZCgpIHZhbHVlLgotLS0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3N5bmNyZXAuYyAgICAgICAgICAgfCAzMiArKysrKysrKysrKysrKysrKy0t LS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jICAgICAgICAgfCAgMiAr LQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyX3ByaXZhdGUuaCB8IDE4ICsr KysrKysrKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCA4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAuYwppbmRleCBkNzVlMzk2ODAz NS4uYzA0OWU4MjI4NmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5 bmNyZXAuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zeW5jcmVwLmMKQEAgLTg1 LDYgKzg1LDcgQEAKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRp bHMvZ3VjX2hvb2tzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCisjaW5jbHVk ZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAKIC8qIFVzZXItc2V0dGFibGUgcGFyYW1l dGVycyBmb3Igc3luYyByZXAgKi8KIGNoYXIJICAgKlN5bmNSZXBTdGFuZGJ5TmFtZXM7CkBA IC0xNDgsNiArMTQ5LDcgQEAgdm9pZAogU3luY1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0ciBs c24sIGJvb2wgY29tbWl0KQogewogCWludAkJCW1vZGU7CisJYm9vbAkJc3luY19zdGFuZGJ5 c19kZWZpbmVkOwogCiAJLyoKIAkgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hpbGUgaG9s ZGluZyBpbnRlcnJ1cHRzIGR1cmluZyBhIHRyYW5zYWN0aW9uCkBAIC0xNzAsNyArMTcyLDcg QEAgU3luY1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGJvb2wgY29tbWl0KQogCSAq IGl0J3MgZmFsc2UsIHRoZSBsb2NrIGlzIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24n dCB0b3VjaCB0aGUgcXVldWUuCiAJICovCiAJaWYgKCFTeW5jUmVwUmVxdWVzdGVkKCkgfHwK LQkJISgodm9sYXRpbGUgV2FsU25kQ3RsRGF0YSAqKSBXYWxTbmRDdGwpLT5zeW5jX3N0YW5k YnlzX2RlZmluZWQpCisJCUlTX1NZTkNTVEFOREJZU19JTklUSUFMSVpFRF9PTkxZKCgodm9s YXRpbGUgV2FsU25kQ3RsRGF0YSAqKSBXYWxTbmRDdGwpLT5zeW5jX3N0YW5kYnlzX2RlZmlu ZWQpKQogCQlyZXR1cm47CiAKIAkvKiBDYXAgdGhlIGxldmVsIGZvciBhbnl0aGluZyBvdGhl ciB0aGFuIGNvbW1pdCB0byByZW1vdGUgZmx1c2ggb25seS4gKi8KQEAgLTE4NCw2ICsxODYs OCBAQCBTeW5jUmVwV2FpdEZvckxTTihYTG9nUmVjUHRyIGxzbiwgYm9vbCBjb21taXQpCiAK IAlMV0xvY2tBY3F1aXJlKFN5bmNSZXBMb2NrLCBMV19FWENMVVNJVkUpOwogCUFzc2VydChN eVByb2MtPnN5bmNSZXBTdGF0ZSA9PSBTWU5DX1JFUF9OT1RfV0FJVElORyk7CisJc3luY19z dGFuZGJ5c19kZWZpbmVkID0gV2FsU25kQ3RsLT5zeW5jX3N0YW5kYnlzX2RlZmluZWQgJiBT WU5DU1RBTkRCWVNJTklUSUFMSVpFRAorCQk/IChXYWxTbmRDdGwtPnN5bmNfc3RhbmRieXNf ZGVmaW5lZCAmIFNZTkNTVEFOREJZU0RFRklORUQpIDogU3luY1N0YW5kYnlzRGVmaW5lZCgp OwogCiAJLyoKIAkgKiBXZSBkb24ndCB3YWl0IGZvciBzeW5jIHJlcCBpZiBXYWxTbmRDdGwt PnN5bmNfc3RhbmRieXNfZGVmaW5lZCBpcyBub3QKQEAgLTE5Myw3ICsxOTcsNyBAQCBTeW5j UmVwV2FpdEZvckxTTihYTG9nUmVjUHRyIGxzbiwgYm9vbCBjb21taXQpCiAJICogY29uZGl0 aW9uIGJ1dCB3ZSdsbCBiZSBmZXRjaGluZyB0aGF0IGNhY2hlIGxpbmUgYW55d2F5IHNvIGl0 J3MgbGlrZWx5CiAJICogdG8gYmUgYSBsb3cgY29zdCBjaGVjay4KIAkgKi8KLQlpZiAoIVdh bFNuZEN0bC0+c3luY19zdGFuZGJ5c19kZWZpbmVkIHx8CisJaWYgKCFzeW5jX3N0YW5kYnlz X2RlZmluZWQgfHwKIAkJbHNuIDw9IFdhbFNuZEN0bC0+bHNuW21vZGVdKQogCXsKIAkJTFdM b2NrUmVsZWFzZShTeW5jUmVwTG9jayk7CkBAIC05MjAsOSArOTI0LDEwIEBAIFN5bmNSZXBX YWtlUXVldWUoYm9vbCBhbGwsIGludCBtb2RlKQogdm9pZAogU3luY1JlcFVwZGF0ZVN5bmNT dGFuZGJ5c0RlZmluZWQodm9pZCkKIHsKLQlib29sCQlzeW5jX3N0YW5kYnlzX2RlZmluZWQg PSBTeW5jU3RhbmRieXNEZWZpbmVkKCk7CisJYm9vbAkJbmV3X3N5bmNfc3RhbmRieXNfZGVm aW5lZCA9IFN5bmNTdGFuZGJ5c0RlZmluZWQoKTsKKwlib29sCQlvbGRfc3luY19zdGFuZGJ5 c19kZWZpbmVkID0gKFdhbFNuZEN0bC0+c3luY19zdGFuZGJ5c19kZWZpbmVkICYgU1lOQ1NU QU5EQllTREVGSU5FRCk7CiAKLQlpZiAoc3luY19zdGFuZGJ5c19kZWZpbmVkICE9IFdhbFNu ZEN0bC0+c3luY19zdGFuZGJ5c19kZWZpbmVkKQorCWlmIChuZXdfc3luY19zdGFuZGJ5c19k ZWZpbmVkICE9IG9sZF9zeW5jX3N0YW5kYnlzX2RlZmluZWQpCiAJewogCQlMV0xvY2tBY3F1 aXJlKFN5bmNSZXBMb2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC05MzEsNyArOTM2LDcgQEAg U3luY1JlcFVwZGF0ZVN5bmNTdGFuZGJ5c0RlZmluZWQodm9pZCkKIAkJICogZm9yIGJhY2tl bmRzIHRvIGNvbnRpbnVlIHdhaXRpbmcuICBTaW5jZSB0aGUgdXNlciBubyBsb25nZXIgd2Fu dHMKIAkJICogc3luY2hyb25vdXMgcmVwbGljYXRpb24sIHdlJ2QgYmV0dGVyIHdha2UgdGhl bSB1cC4KIAkJICovCi0JCWlmICghc3luY19zdGFuZGJ5c19kZWZpbmVkKQorCQlpZiAoIW5l d19zeW5jX3N0YW5kYnlzX2RlZmluZWQpCiAJCXsKIAkJCWludAkJCWk7CiAKQEAgLTk0Niw4 ICs5NTEsMjMgQEAgU3luY1JlcFVwZGF0ZVN5bmNTdGFuZGJ5c0RlZmluZWQodm9pZCkKIAkJ ICogYmFja2VuZCB0aGF0IGhhc24ndCB5ZXQgcmVsb2FkZWQgaXRzIGNvbmZpZyBtaWdodCBn byB0byBzbGVlcCBvbgogCQkgKiB0aGUgcXVldWUgKGFuZCBuZXZlciB3YWtlIHVwKS4gIFRo aXMgcHJldmVudHMgdGhhdC4KIAkJICovCi0JCVdhbFNuZEN0bC0+c3luY19zdGFuZGJ5c19k ZWZpbmVkID0gc3luY19zdGFuZGJ5c19kZWZpbmVkOwogCisJCVdhbFNuZEN0bC0+c3luY19z dGFuZGJ5c19kZWZpbmVkID0gbmV3X3N5bmNfc3RhbmRieXNfZGVmaW5lZAorCQkJPyBTRVRf U1lOQ1NUQU5EQllTX0RFRklORUQoV2FsU25kQ3RsLT5zeW5jX3N0YW5kYnlzX2RlZmluZWQp CisJCQk6IFJFU0VUX1NZTkNTVEFOREJZU19ERUZJTkVEKFdhbFNuZEN0bC0+c3luY19zdGFu ZGJ5c19kZWZpbmVkKTsKKworCQlMV0xvY2tSZWxlYXNlKFN5bmNSZXBMb2NrKTsKKwl9CisJ ZWxzZSBpZiAoIShXYWxTbmRDdGwtPnN5bmNfc3RhbmRieXNfZGVmaW5lZCAmIFNZTkNTVEFO REJZU0lOSVRJQUxJWkVEKSkKKwl7CisJCS8qCisJCSAqIEV2ZW4gaWYgbmV3X3N5bmNfc3Rh bmRieXNfZGVmaW5lZCA9PSBvbGRfc3luY19zdGFuZGJ5c19kZWZpbmVkLCB3ZQorCQkgKiBz aG91bGQgY2hlY2sgV2FsU25kQ3RsLT5zeW5jX3N0YW5kYnlzX2RlZmluZWQgaXMgaW5pdGlh bGl6ZWQgYW5kCisJCSAqIHNldCBpdHMgaW5pdGlhbGl6ZSBiaXQsIGlmIGl0IHJlc2V0LiBB bnl3YXkgdGhpcyBiaXQgc2hvdWxkIGJlIHNldAorCQkgKiBvbmx5IG9uIHN0YXJ0IGFuZCB0 aGVuIGl0IHdpbGwgYmUgYWx3YXlzIHNldHRlZC4KKwkJICovCisJCUxXTG9ja0FjcXVpcmUo U3luY1JlcExvY2ssIExXX0VYQ0xVU0lWRSk7CisJCVdhbFNuZEN0bC0+c3luY19zdGFuZGJ5 c19kZWZpbmVkID0gU0VUX1NZTkNTVEFOREJZU19JTklUSUFMSVpFRChXYWxTbmRDdGwtPnN5 bmNfc3RhbmRieXNfZGVmaW5lZCk7CiAJCUxXTG9ja1JlbGVhc2UoU3luY1JlcExvY2spOwog CX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggMTAyODkxOWFl Y2IuLmMxODFjN2VlOTc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpA QCAtMTY3Niw3ICsxNjc2LDcgQEAgV2FsU25kVXBkYXRlUHJvZ3Jlc3MoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjUHRyIGxzbiwgVHJhbnNhY3Rpb25JZAogCSAqLwog CWlmIChza2lwcGVkX3hhY3QgJiYKIAkJU3luY1JlcFJlcXVlc3RlZCgpICYmCi0JCSgodm9s YXRpbGUgV2FsU25kQ3RsRGF0YSAqKSBXYWxTbmRDdGwpLT5zeW5jX3N0YW5kYnlzX2RlZmlu ZWQpCisJCSgoKHZvbGF0aWxlIFdhbFNuZEN0bERhdGEgKikgV2FsU25kQ3RsKS0+c3luY19z dGFuZGJ5c19kZWZpbmVkICYgU1lOQ1NUQU5EQllTREVGSU5FRCkpCiAJewogCQlXYWxTbmRL ZWVwYWxpdmUoZmFsc2UsIGxzbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3dhbHNlbmRlcl9wcml2YXRlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 YWxzZW5kZXJfcHJpdmF0ZS5oCmluZGV4IDBmYzc3ZjFiNGFmLi5kZDkzMWI4MWU0ZiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyX3ByaXZhdGUuaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXJfcHJpdmF0ZS5oCkBAIC0x MDAsNyArMTAwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAkgKiBjb25maWcgZmlsZSBzYWZlbHks IHNvIGNoZWNrcG9pbnRlciB1cGRhdGVzIHRoaXMgdmFsdWUgYXMgbmVlZGVkLgogCSAqIFBy b3RlY3RlZCBieSBTeW5jUmVwTG9jay4KIAkgKi8KLQlib29sCQlzeW5jX3N0YW5kYnlzX2Rl ZmluZWQ7CisJdWludDgJCXN5bmNfc3RhbmRieXNfZGVmaW5lZDsKIAogCS8qIHVzZWQgYXMg YSByZWdpc3RyeSBvZiBwaHlzaWNhbCAvIGxvZ2ljYWwgd2Fsc2VuZGVycyB0byB3YWtlICov CiAJQ29uZGl0aW9uVmFyaWFibGUgd2FsX2ZsdXNoX2N2OwpAQCAtMTE2LDYgKzExNiwyMiBA QCB0eXBlZGVmIHN0cnVjdAogCVdhbFNuZAkJd2Fsc25kc1tGTEVYSUJMRV9BUlJBWV9NRU1C RVJdOwogfSBXYWxTbmRDdGxEYXRhOwogCisvKgorICogV2FsU25kQ3RsRGF0YS0+c3luY19z dGFuZGJ5c19kZWZpbmVkIGJpdCBmbGFncy4gN3RoIGJpdCBjaGVjayBzdGFuZGJ5c19kZWZp bmVkIG9yIG5vdCwKKyAqIDh0aCBiaXQgY2hlY2sgV2FsU25kQ3RsRGF0YS0+c3luY19zdGFu ZGJ5c19kZWZpbmVkIGZpZWxkIGhhcyBiZWVuIGluaXRpYWxpemVkLgorICovCisjZGVmaW5l IFNZTkNTVEFOREJZU0lOSVRJQUxJWkVECSgxIDw8IDApCisjZGVmaW5lIFNZTkNTVEFOREJZ U0RFRklORUQJCSgxIDw8IDEpCisKKyNkZWZpbmUgU0VUX1NZTkNTVEFOREJZU19JTklUSUFM SVpFRChzeW5jX3N0YW5kYnlzKQlcCisJKHN5bmNfc3RhbmRieXMgfCBTWU5DU1RBTkRCWVNJ TklUSUFMSVpFRCkKKyNkZWZpbmUgU0VUX1NZTkNTVEFOREJZU19ERUZJTkVEKHN5bmNfc3Rh bmRieXMpCVwKKwkoc3luY19zdGFuZGJ5cyB8IFNZTkNTVEFOREJZU0lOSVRJQUxJWkVEIHwg U1lOQ1NUQU5EQllTREVGSU5FRCkKKyNkZWZpbmUgUkVTRVRfU1lOQ1NUQU5EQllTX0RFRklO RUQoc3luY19zdGFuZGJ5cykJXAorCShTRVRfU1lOQ1NUQU5EQllTX0lOSVRJQUxJWkVEKHN5 bmNfc3RhbmRieXMpICYgKH5TWU5DU1RBTkRCWVNERUZJTkVEKSkKKyNkZWZpbmUgSVNfU1lO Q1NUQU5EQllTX0lOSVRJQUxJWkVEX09OTFkoc3luY19zdGFuZGJ5cykJXAorCSgoc3luY19z dGFuZGJ5cyAmIChTWU5DU1RBTkRCWVNJTklUSUFMSVpFRCB8IFNZTkNTVEFOREJZU0RFRklO RUQpKSA9PSBTWU5DU1RBTkRCWVNJTklUSUFMSVpFRCkKKwogZXh0ZXJuIFBHRExMSU1QT1JU IFdhbFNuZEN0bERhdGEgKldhbFNuZEN0bDsKIAogCi0tIAoyLjQzLjAKCg== --------------AB2XUp2AOMDPj2oM0hMvMmiR--