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 1vuwJg-00DmC1-2x for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 17:35:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuwJf-002dgr-2r for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 17:35:23 +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 1vuwJf-002dgj-1E for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 17:35:23 +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.98.2) (envelope-from ) id 1vuwJc-000000015c1-06hY for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 17:35:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1771954519; bh=dFHwAA8tq2YffXK1g5PI1RBWNlm+qjk2oT2ASnK/5sI=; h=Message-ID:Date:User-Agent:To:From:Cc:Subject:From; b=Vdy5XkijtX5GjB8taMXWb5l6rzWwUhIEFF1aWSZp+fIlLEy0rXMf70UMg38ISd2BE hccMnIVytJe+odM+Q6l0GO8pD01/4Irr3zHzq5iVX4uLfI+cxNqO9WtPk/MOvlwqL1 NUliW4i2dUEQfY/rddFUsRFOdHtqBLszqO9uWGDbwYrzwsF/BRSRK69w4ZcOVQDjA/ NayjT6LW7DblPywj4MZZZRAtXg0nKF0AY7RQyvYQayGWNYpWWVo0ro9wcb+IxTo53A 8uK3CtYp/KOCshmO3U24oXIsKpvVThHO1D4ZCtaRNjjdw2pfIahoq/WKITTIxgf6pP z6/3ZuKndYEsg== Received: from [172.30.50.246] (debian11-template.l.postgrespro.ru [192.168.2.254]) (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: y.sokolov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id 6713460E62; Tue, 24 Feb 2026 20:35:19 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------ksAyBYDRO99IV8VcV5c7zGem" Message-ID: <7acc94b0-ea82-4657-b1b0-77842cb7a60c@postgrespro.ru> Date: Tue, 24 Feb 2026 20:35:18 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "pgsql-hackers@lists.postgresql.org" From: Yura Sokolov Cc: Heikki Linnakangas , Andres Freund Subject: Fix bug in multixact Oldest*MXactId initialization and access X-KSMG-AntiPhishing: NotDetected, bases: 2026/02/24 16:28:00 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: 2026/02/24 15:42:00 #28220693 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. --------------ksAyBYDRO99IV8VcV5c7zGem Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Good day. multixact.c has bug in initialization and access of OldestMemberMXactId (and partially OldestVisibleMXactId). Size of this arrays is defined as: #define MaxOldestSlot (MaxBackends + max_prepared_xacts) assuming there are only backends and prepared transactions could hold multixacts. This assumption is correct. And in fact there were no bug when this formula were introduced in 2009y [1], since these arrays were indexed but synthetic dummy `dummyBackendId` field of `GlobalTransactionData` struct. But in 2024y [2] field `dummyBackendId` were removed and pgprocno were used instead. But proc structs reserved for two phase commit are placed after auxiliary procs, therefore writes to OldestMemberMXactId[dummy] starts to overwrites slots of OldestVisibleMXactId. Then PostgreSQL 18 increased NUM_AUXILIARY_PROCS due to reserve of workers for AIO. And it is possible to make such test postgresql.conf with so extremely low MaxBackend so writes to OldestMemberMXactId[dummy] overwrites first entry of BufferDescriptors, which are allocated next in shared memory. Patch in attach replaces direct accesses to this arrays with inline functions which include asserts. And changes calculation of MaxOldestSlot to include NUM_AUXILIARY_PROCS. Certainly, it is not clearest patch possible: - may be you will decide to not introduce inline functions, - or will introduce separate inline function for each array, - or will fix slot calculation to remove aux procs from account, - or will revert deletion of dummyBackendId. [1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=cd87b6f8a5084c070c3e56b07794be8fea33647d [2] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ab355e3a88de745607f6dd4c21f0119b5c68f2ad -- regards Yura Sokolov aka funny-falcon --------------ksAyBYDRO99IV8VcV5c7zGem Content-Type: text/x-patch; charset=UTF-8; name="v00-0001-Fix-multixacts-OldestMemberMXactId-and-OldestVis.patch" Content-Disposition: attachment; filename*0="v00-0001-Fix-multixacts-OldestMemberMXactId-and-OldestVis.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmNTE4ZTE0NTRkNWVlMDllZWUxYTg0YWI0M2JlYzExNTAzNjFlNzZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVHVlLCAyNCBGZWIgMjAyNiAyMDoyOTowMSArMDMwMApTdWJqZWN0 OiBbUEFUQ0ggdjAwXSBGaXggbXVsdGl4YWN0cyBPbGRlc3RNZW1iZXJNWGFjdElkIGFuZAog T2xkZXN0VmlzaWJsZU1YYWN0SWQgaW5pdGlhbGl6YXRpb24uCgpEdWUgdG8gWzFdLCBPbGRl c3RNZW1iZXJNWGFjdElkIGlzIG5vIGxvbmdlciBhY2Nlc3NlZCBieSBzeW50aGV0aWMKZHVt bXlCYWNrZW5kSWQsIGJ1dCByYXRoZXIgd2l0aCBwZ3Byb2Nuby4gUHJvY3MgZm9yIHByZXBh cmVkIHhhY3RzIGFyZQpwbGFjZWQgYWZ0ZXIgYXV4aWxpYXJ5IHByb2NzLCB0aGVyZWZvcmUg Y2FsY3VsYXRpb24gZm9yIE1heE9sZGVzdFNsb3QKYmVjYW1lIGludmFsaWQuCgpGaXggTWF4 T2xkZXN0U2xvdCB0byBpbmNsdWRlIE5VTV9BVVhJTElBUllfUFJPQ1MgYW5kIHJlcGxhY2Ug ZGlyZWN0IGFjY2Vzcwp0byB0aGVzZSBhcnJheXMgd2l0aCBpbmxpbmUgZnVuY3Rpb25zLgoK WzFdIGFiMzU1ZTNhODhkZTc0NSAiUmVkZWZpbmUgYmFja2VuZCBJRCB0byBiZSBhbiBpbmRl eCBpbnRvIHRoZSBwcm9jIGFycmF5IgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L211bHRpeGFjdC5jIHwgNTggKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDkwZWM4N2Q5ZGQ2Li4xNWRkOTI4 ZWI5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0 LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTIx MCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIC8qCiAg KiBTaXplIG9mIE9sZGVzdE1lbWJlck1YYWN0SWQgYW5kIE9sZGVzdFZpc2libGVNWGFjdElk IGFycmF5cy4KICAqLwotI2RlZmluZSBNYXhPbGRlc3RTbG90CShNYXhCYWNrZW5kcyArIG1h eF9wcmVwYXJlZF94YWN0cykKKyNkZWZpbmUgTWF4T2xkZXN0U2xvdAkoTWF4QmFja2VuZHMg KyBOVU1fQVVYSUxJQVJZX1BST0NTICsgbWF4X3ByZXBhcmVkX3hhY3RzKQogCiAvKiBQb2lu dGVycyB0byB0aGUgc3RhdGUgZGF0YSBpbiBzaGFyZWQgbWVtb3J5ICovCiBzdGF0aWMgTXVs dGlYYWN0U3RhdGVEYXRhICpNdWx0aVhhY3RTdGF0ZTsKQEAgLTI4NSw2ICsyODUsOSBAQCBz dGF0aWMgdm9pZCBXcml0ZU1UcnVuY2F0ZVhsb2dSZWMoT2lkIG9sZGVzdE11bHRpREIsCiAJ CQkJCQkJCSAgTXVsdGlYYWN0SWQgZW5kVHJ1bmNPZmYsCiAJCQkJCQkJCSAgTXVsdGlYYWN0 T2Zmc2V0IGVuZFRydW5jTWVtYik7CiAKK3N0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQgZ2V0 T2xkZXN0KE11bHRpWGFjdElkICpvbGRlc3QsIFByb2NOdW1iZXIgcHJvY25vKTsKK3N0YXRp YyBpbmxpbmUgYm9vbCB2YWxpZE9sZGVzdChNdWx0aVhhY3RJZCAqb2xkZXN0LCBQcm9jTnVt YmVyIHByb2Nubyk7CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0T2xkZXN0KE11bHRpWGFjdElk ICpvbGRlc3QsIFByb2NOdW1iZXIgcHJvY25vLCBNdWx0aVhhY3RJZCBteGFjdCk7CiAKIC8q CiAgKiBNdWx0aVhhY3RJZENyZWF0ZQpAQCAtMzA4LDcgKzMxMSw3IEBAIE11bHRpWGFjdElk Q3JlYXRlKFRyYW5zYWN0aW9uSWQgeGlkMSwgTXVsdGlYYWN0U3RhdHVzIHN0YXR1czEsCiAJ QXNzZXJ0KCFUcmFuc2FjdGlvbklkRXF1YWxzKHhpZDEsIHhpZDIpIHx8IChzdGF0dXMxICE9 IHN0YXR1czIpKTsKIAogCS8qIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKCkgbXVzdCBo YXZlIGJlZW4gY2FsbGVkIGFscmVhZHkuICovCi0JQXNzZXJ0KE11bHRpWGFjdElkSXNWYWxp ZChPbGRlc3RNZW1iZXJNWGFjdElkW015UHJvY051bWJlcl0pKTsKKwlBc3NlcnQodmFsaWRP bGRlc3QoT2xkZXN0TWVtYmVyTVhhY3RJZCwgTXlQcm9jTnVtYmVyKSk7CiAKIAkvKgogCSAq IE5vdGU6IHVubGlrZSBNdWx0aVhhY3RJZEV4cGFuZCwgd2UgZG9uJ3QgYm90aGVyIHRvIGNo ZWNrIHRoYXQgYm90aCBYSURzCkBAIC0zNjIsNyArMzY1LDcgQEAgTXVsdGlYYWN0SWRFeHBh bmQoTXVsdGlYYWN0SWQgbXVsdGksIFRyYW5zYWN0aW9uSWQgeGlkLCBNdWx0aVhhY3RTdGF0 dXMgc3RhdHVzKQogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIAogCS8q IE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFs cmVhZHkuICovCi0JQXNzZXJ0KE11bHRpWGFjdElkSXNWYWxpZChPbGRlc3RNZW1iZXJNWGFj dElkW015UHJvY051bWJlcl0pKTsKKwlBc3NlcnQodmFsaWRPbGRlc3QoT2xkZXN0TWVtYmVy TVhhY3RJZCwgTXlQcm9jTnVtYmVyKSk7CiAKIAlkZWJ1Z19lbG9nNShERUJVRzIsICJFeHBh bmQ6IHJlY2VpdmVkIG11bHRpICV1LCB4aWQgJXUgc3RhdHVzICVzIiwKIAkJCQltdWx0aSwg eGlkLCBteHN0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CkBAIC01MzYsNyArNTM5LDcgQEAg TXVsdGlYYWN0SWRJc1J1bm5pbmcoTXVsdGlYYWN0SWQgbXVsdGksIGJvb2wgaXNMb2NrT25s eSkKIHZvaWQKIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKHZvaWQpCiB7Ci0JaWYgKCFN dWx0aVhhY3RJZElzVmFsaWQoT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NOdW1iZXJdKSkK KwlpZiAoIXZhbGlkT2xkZXN0KE9sZGVzdE1lbWJlck1YYWN0SWQsIE15UHJvY051bWJlcikp CiAJewogCQlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7CiAKQEAgLTU1OCw3ICs1NjEsNyBAQCBN dWx0aVhhY3RJZFNldE9sZGVzdE1lbWJlcih2b2lkKQogCiAJCW5leHRNWGFjdCA9IE11bHRp WGFjdFN0YXRlLT5uZXh0TVhhY3Q7CiAKLQkJT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NO dW1iZXJdID0gbmV4dE1YYWN0OworCQlzZXRPbGRlc3QoT2xkZXN0TWVtYmVyTVhhY3RJZCwg TXlQcm9jTnVtYmVyLCBuZXh0TVhhY3QpOwogCiAJCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 R2VuTG9jayk7CiAKQEAgLTU4Niw3ICs1ODksNyBAQCBNdWx0aVhhY3RJZFNldE9sZGVzdE1l bWJlcih2b2lkKQogc3RhdGljIHZvaWQKIE11bHRpWGFjdElkU2V0T2xkZXN0VmlzaWJsZSh2 b2lkKQogewotCWlmICghTXVsdGlYYWN0SWRJc1ZhbGlkKE9sZGVzdFZpc2libGVNWGFjdElk W015UHJvY051bWJlcl0pKQorCWlmICghdmFsaWRPbGRlc3QoT2xkZXN0VmlzaWJsZU1YYWN0 SWQsIE15UHJvY051bWJlcikpCiAJewogCQlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAkJ aW50CQkJaTsKQEAgLTYwMyw3ICs2MDYsNyBAQCBNdWx0aVhhY3RJZFNldE9sZGVzdFZpc2li bGUodm9pZCkKIAkJCQlvbGRlc3RNWGFjdCA9IHRoaXNvbGRlc3Q7CiAJCX0KIAotCQlPbGRl c3RWaXNpYmxlTVhhY3RJZFtNeVByb2NOdW1iZXJdID0gb2xkZXN0TVhhY3Q7CisJCXNldE9s ZGVzdChPbGRlc3RWaXNpYmxlTVhhY3RJZCwgTXlQcm9jTnVtYmVyLCBvbGRlc3RNWGFjdCk7 CiAKIAkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIApAQCAtMTE1Miw3ICsx MTU1LDcgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0 aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCSAqIG11bHRpLiAgSXQgY2Fubm90IHBvc3NpYmx5 IHN0aWxsIGJlIHJ1bm5pbmcuCiAJICovCiAJaWYgKGlzTG9ja09ubHkgJiYKLQkJTXVsdGlY YWN0SWRQcmVjZWRlcyhtdWx0aSwgT2xkZXN0VmlzaWJsZU1YYWN0SWRbTXlQcm9jTnVtYmVy XSkpCisJCU11bHRpWGFjdElkUHJlY2VkZXMobXVsdGksIGdldE9sZGVzdChPbGRlc3RWaXNp YmxlTVhhY3RJZCwgTXlQcm9jTnVtYmVyKSkpCiAJewogCQlkZWJ1Z19lbG9nMihERUJVRzIs ICJHZXRNZW1iZXJzOiBhIGxvY2tlci1vbmx5IG11bHRpIGlzIHRvbyBvbGQiKTsKIAkJKm1l bWJlcnMgPSBOVUxMOwpAQCAtMTU3NCw4ICsxNTc3LDggQEAgQXRFT1hhY3RfTXVsdGlYYWN0 KHZvaWQpCiAJICogV2UgYXNzdW1lIHRoYXQgc3RvcmluZyBhIE11bHRpWGFjdElkIGlzIGF0 b21pYyBhbmQgc28gd2UgbmVlZCBub3QgdGFrZQogCSAqIE11bHRpWGFjdEdlbkxvY2sgdG8g ZG8gdGhpcy4KIAkgKi8KLQlPbGRlc3RNZW1iZXJNWGFjdElkW015UHJvY051bWJlcl0gPSBJ bnZhbGlkTXVsdGlYYWN0SWQ7Ci0JT2xkZXN0VmlzaWJsZU1YYWN0SWRbTXlQcm9jTnVtYmVy XSA9IEludmFsaWRNdWx0aVhhY3RJZDsKKwlzZXRPbGRlc3QoT2xkZXN0TWVtYmVyTVhhY3RJ ZCwgTXlQcm9jTnVtYmVyLCBJbnZhbGlkTXVsdGlYYWN0SWQpOworCXNldE9sZGVzdChPbGRl c3RWaXNpYmxlTVhhY3RJZCwgTXlQcm9jTnVtYmVyLCBJbnZhbGlkTXVsdGlYYWN0SWQpOwog CiAJLyoKIAkgKiBEaXNjYXJkIHRoZSBsb2NhbCBNdWx0aVhhY3RJZCBjYWNoZS4gIFNpbmNl IE1YYWN0Q29udGV4dCB3YXMgY3JlYXRlZCBhcwpAQCAtMTU5NSw3ICsxNTk4LDcgQEAgQXRF T1hhY3RfTXVsdGlYYWN0KHZvaWQpCiB2b2lkCiBBdFByZXBhcmVfTXVsdGlYYWN0KHZvaWQp CiB7Ci0JTXVsdGlYYWN0SWQgbXlPbGRlc3RNZW1iZXIgPSBPbGRlc3RNZW1iZXJNWGFjdElk W015UHJvY051bWJlcl07CisJTXVsdGlYYWN0SWQgbXlPbGRlc3RNZW1iZXIgPSBnZXRPbGRl c3QoT2xkZXN0TWVtYmVyTVhhY3RJZCwgTXlQcm9jTnVtYmVyKTsKIAogCWlmIChNdWx0aVhh Y3RJZElzVmFsaWQobXlPbGRlc3RNZW1iZXIpKQogCQlSZWdpc3RlclR3b1BoYXNlUmVjb3Jk KFRXT1BIQVNFX1JNX01VTFRJWEFDVF9JRCwgMCwKQEAgLTE2MTUsNyArMTYxOCw3IEBAIFBv c3RQcmVwYXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogCSAqIFRyYW5z ZmVyIG91ciBPbGRlc3RNZW1iZXJNWGFjdElkIHZhbHVlIHRvIHRoZSBzbG90IHJlc2VydmVk IGZvciB0aGUKIAkgKiBwcmVwYXJlZCB0cmFuc2FjdGlvbi4KIAkgKi8KLQlteU9sZGVzdE1l bWJlciA9IE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVyXTsKKwlteU9sZGVzdE1l bWJlciA9IGdldE9sZGVzdChPbGRlc3RNZW1iZXJNWGFjdElkLCBNeVByb2NOdW1iZXIpOwog CWlmIChNdWx0aVhhY3RJZElzVmFsaWQobXlPbGRlc3RNZW1iZXIpKQogCXsKIAkJUHJvY051 bWJlcglkdW1teVByb2NOdW1iZXIgPSBUd29QaGFzZUdldER1bW15UHJvY051bWJlcihmeGlk LCBmYWxzZSk7CkBAIC0xNjI4LDggKzE2MzEsOCBAQCBQb3N0UHJlcGFyZV9NdWx0aVhhY3Qo RnVsbFRyYW5zYWN0aW9uSWQgZnhpZCkKIAkJICovCiAJCUxXTG9ja0FjcXVpcmUoTXVsdGlY YWN0R2VuTG9jaywgTFdfRVhDTFVTSVZFKTsKIAotCQlPbGRlc3RNZW1iZXJNWGFjdElkW2R1 bW15UHJvY051bWJlcl0gPSBteU9sZGVzdE1lbWJlcjsKLQkJT2xkZXN0TWVtYmVyTVhhY3RJ ZFtNeVByb2NOdW1iZXJdID0gSW52YWxpZE11bHRpWGFjdElkOworCQlzZXRPbGRlc3QoT2xk ZXN0TWVtYmVyTVhhY3RJZCwgZHVtbXlQcm9jTnVtYmVyLCBteU9sZGVzdE1lbWJlcik7CisJ CXNldE9sZGVzdChPbGRlc3RNZW1iZXJNWGFjdElkLCBNeVByb2NOdW1iZXIsIEludmFsaWRN dWx0aVhhY3RJZCk7CiAKIAkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAl9 CkBAIC0xNjQyLDcgKzE2NDUsNyBAQCBQb3N0UHJlcGFyZV9NdWx0aVhhY3QoRnVsbFRyYW5z YWN0aW9uSWQgZnhpZCkKIAkgKiBXZSBhc3N1bWUgdGhhdCBzdG9yaW5nIGEgTXVsdGlYYWN0 SWQgaXMgYXRvbWljIGFuZCBzbyB3ZSBuZWVkIG5vdCB0YWtlCiAJICogTXVsdGlYYWN0R2Vu TG9jayB0byBkbyB0aGlzLgogCSAqLwotCU9sZGVzdFZpc2libGVNWGFjdElkW015UHJvY051 bWJlcl0gPSBJbnZhbGlkTXVsdGlYYWN0SWQ7CisJc2V0T2xkZXN0KE9sZGVzdFZpc2libGVN WGFjdElkLCBNeVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhhY3RJZCk7CiAKIAkvKgogCSAq IERpc2NhcmQgdGhlIGxvY2FsIE11bHRpWGFjdElkIGNhY2hlIGxpa2UgaW4gQXRFT1hhY3Rf TXVsdGlYYWN0LgpAQCAtMTY2OSw3ICsxNjcyLDcgQEAgbXVsdGl4YWN0X3R3b3BoYXNlX3Jl Y292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2IGluZm8sCiAJQXNzZXJ0KGxl biA9PSBzaXplb2YoTXVsdGlYYWN0SWQpKTsKIAlvbGRlc3RNZW1iZXIgPSAqKChNdWx0aVhh Y3RJZCAqKSByZWNkYXRhKTsKIAotCU9sZGVzdE1lbWJlck1YYWN0SWRbZHVtbXlQcm9jTnVt YmVyXSA9IG9sZGVzdE1lbWJlcjsKKwlzZXRPbGRlc3QoT2xkZXN0TWVtYmVyTVhhY3RJZCwg ZHVtbXlQcm9jTnVtYmVyLCBvbGRlc3RNZW1iZXIpOwogfQogCiAvKgpAQCAtMTY4NCw3ICsx Njg3LDcgQEAgbXVsdGl4YWN0X3R3b3BoYXNlX3Bvc3Rjb21taXQoRnVsbFRyYW5zYWN0aW9u SWQgZnhpZCwgdWludDE2IGluZm8sCiAKIAlBc3NlcnQobGVuID09IHNpemVvZihNdWx0aVhh Y3RJZCkpOwogCi0JT2xkZXN0TWVtYmVyTVhhY3RJZFtkdW1teVByb2NOdW1iZXJdID0gSW52 YWxpZE11bHRpWGFjdElkOworCXNldE9sZGVzdChPbGRlc3RNZW1iZXJNWGFjdElkLCBkdW1t eVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhhY3RJZCk7CiB9CiAKIC8qCkBAIC0yOTIyLDMg KzI5MjUsMjQgQEAgbXVsdGl4YWN0bWVtYmVyc3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcg KmZ0YWcsIGNoYXIgKnBhdGgpCiB7CiAJcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhNdWx0aVhh Y3RNZW1iZXJDdGwsIGZ0YWcsIHBhdGgpOwogfQorCitzdGF0aWMgaW5saW5lIE11bHRpWGFj dElkCitnZXRPbGRlc3QoTXVsdGlYYWN0SWQgKm9sZGVzdCwgUHJvY051bWJlciBwcm9jbm8p Cit7CisJQXNzZXJ0KHByb2NubyA8IE1heE9sZGVzdFNsb3QpOworCXJldHVybiBvbGRlc3Rb cHJvY25vXTsKK30KKworc3RhdGljIGlubGluZSBib29sCit2YWxpZE9sZGVzdChNdWx0aVhh Y3RJZCAqb2xkZXN0LCBQcm9jTnVtYmVyIHByb2NubykKK3sKKwlBc3NlcnQocHJvY25vIDwg TWF4T2xkZXN0U2xvdCk7CisJcmV0dXJuIE11bHRpWGFjdElkSXNWYWxpZChvbGRlc3RbcHJv Y25vXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0T2xkZXN0KE11bHRpWGFjdElk ICpvbGRlc3QsIFByb2NOdW1iZXIgcHJvY25vLCBNdWx0aVhhY3RJZCBteGFjdCkKK3sKKwlB c3NlcnQocHJvY25vIDwgTWF4T2xkZXN0U2xvdCk7CisJb2xkZXN0W3Byb2Nub10gPSBteGFj dDsKK30KLS0gCjIuNTEuMAoK --------------ksAyBYDRO99IV8VcV5c7zGem--