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 1vve82-00BmaK-0L for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 16:22:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vve80-00E9Ct-1W for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 16:22:16 +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 1vve7z-00E9Cf-2T for pgsql-hackers@lists.postgresql.org; Thu, 26 Feb 2026 16:22:16 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vve7t-00000001KKA-3WgB for pgsql-hackers@lists.postgresql.org; Thu, 26 Feb 2026 16:22:14 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1772122927; bh=ZC2Fxt6KigSRW1CgefW02iyGDafLh1CBVLf89YdfMP0=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=Pdcr3wXidI6y09a/1d8OxcEj3SzmgreOF82KLm4IIoZZtXuhMUgAjjSIOubjuWwon qoaMhFfJVncTOJMmbIHN3ltuYoNEhfwE3QPNHSDrg13uoUzy1Hyc40KCm5KNBlO2S3 woqNTo9Igl4s/WcZfUxQCnn8guv711ExWD+ZRMwNgsXArR64+ey6ryGcQBTTehYWLm 8QR+Y00JPhaxoTds0AesBdIoafKE7f5pEfHFBS3PWvdSHbPrOwXlN87ZJHURCBDWjW PzK2b4S7IjA5RSu3TRR/jFZmlJkPKFDJ/oeaHovt0aczPziKyFtxPsNLz0yfWkKbWw usfLxEfkI1+cw== Received: from [172.30.49.242] (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 BD3016074E; Thu, 26 Feb 2026 19:22:06 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------tIlWys0r5FAMPCQmmnTd4Xgr" Message-ID: Date: Thu, 26 Feb 2026 19:22:06 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Fix bug in multixact Oldest*MXactId initialization and access To: "pgsql-hackers@lists.postgresql.org" Cc: Heikki Linnakangas , Andres Freund , Sami Imseih , Chao Li References: <7acc94b0-ea82-4657-b1b0-77842cb7a60c@postgrespro.ru> <93F0BD0A-0B8B-4592-9D4B-53F405A86F6A@gmail.com> Content-Language: en-US From: Yura Sokolov 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: 2026/02/26 12:17:00 #28227073 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. --------------tIlWys0r5FAMPCQmmnTd4Xgr Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Good day. Sami Imseih, I've introduced new precalculated variables: MaxChildren = MaxBackends + NUM_AUXILIARY_PROCS; TotalProcs = MaxChildren + max_prepared_xacts; TotalXactProcs = MaxBackends + max_prepared_xacts; and spread their usage through the sources. I don't know how committers will accept this change. But they will certainly make their own version of patch, so I don't bother much. But I still use inline procs for access to the arrays. Asserts cost nothing in release build. And new version of functions doesn't branch. And you're right: looks like there were mistake in previous version so GetOldestVisibleMXactId became unused. New version has no this mistake. Chao Li, new access functions doen't branch because I've made separate functions to store at slots for prepared transactions. -- regards Yura Sokolov aka funny-falcon --------------tIlWys0r5FAMPCQmmnTd4Xgr Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-Add-precalculated-proc-counts-to-reduce-repetitio.patch" Content-Disposition: attachment; filename*0="v4-0001-Add-precalculated-proc-counts-to-reduce-repetitio.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhOWRiOTVkNmY5NzMwMGQ0OWM1YzNmOGFjMWVjYjg3YzlkN2NmNDI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVGh1LCAyNiBGZWIgMjAyNiAxNzo0MTo0MCArMDMwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMS8yXSBBZGQgcHJlY2FsY3VsYXRlZCBwcm9jIGNvdW50cyB0byByZWR1 Y2UgcmVwZXRpdGlvbi4KCkxldHMgbmFtZSBjb21tb24gc3VtczoKTWF4QmFja2VuZHMgKyBO VU1fQVVYSUxJQVJZX1BST0NTID0+IE1heENoaWxkcmVuCk1heEJhY2tlbmRzICsgTlVNX0FV WElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0cyA9PiBUb3RhbFByb2NzCk1heEJh Y2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzID0+IFRvdGFsWGFjdFByb2NzCgpJdCBhbHNv IG1heSBzaW1wbGlmeSBhcGkgZm9yIGV4dGVuc2lvbi4KLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2d3YWl0LmMgICAgICAgfCAgNyArKystLS0tCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgICAgIHwgIDQgKysrKwogc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvX2luaXQuYyAgICAgICAgICB8ICA0ICsrLS0KIHNyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jICAgfCAgMiArLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc2ludmFsYWR0LmMgICAgICAgICB8ICAyICstCiBzcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvbG9jay5jICAgICAgICAgICAgIHwgIDkgKysrKy0tLS0tCiBzcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgIHwgMTMgKysrKystLS0tLS0tLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgICAgICB8IDEzICsrKyst LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMg fCAgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAgICAgICAgICB8 ICA3ICsrKysrLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYyAgICAgICAg ICAgfCAgOSArKysrKysrLS0KIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAg ICAgICAgICAgfCAgMyArKysKIDE2IGZpbGVzIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKyks IDM5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0 LmMKaW5kZXggOTBlYzg3ZDlkZDYuLmEzNTY3MWVhMzQ2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtMjEwLDcgKzIxMCw3IEBAIHR5cGVkZWYgc3Ry dWN0IE11bHRpWGFjdFN0YXRlRGF0YQogLyoKICAqIFNpemUgb2YgT2xkZXN0TWVtYmVyTVhh Y3RJZCBhbmQgT2xkZXN0VmlzaWJsZU1YYWN0SWQgYXJyYXlzLgogICovCi0jZGVmaW5lIE1h eE9sZGVzdFNsb3QJKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKQorI2RlZmlu ZSBNYXhPbGRlc3RTbG90CVRvdGFsWGFjdFByb2NzCiAKIC8qIFBvaW50ZXJzIHRvIHRoZSBz dGF0ZSBkYXRhIGluIHNoYXJlZCBtZW1vcnkgKi8KIHN0YXRpYyBNdWx0aVhhY3RTdGF0ZURh dGEgKk11bHRpWGFjdFN0YXRlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3dhaXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d3YWl0 LmMKaW5kZXggZDI4NmZmNjMxMjMuLjRjMmYzMDg1ZTM0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nd2FpdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2d3YWl0LmMKQEAgLTExNSw3ICsxMTUsNyBAQCBXYWl0TFNOU2htZW1T aXplKHZvaWQpCiAJU2l6ZQkJc2l6ZTsKIAogCXNpemUgPSBvZmZzZXRvZihXYWl0TFNOU3Rh dGUsIHByb2NJbmZvcyk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE1heEJh Y2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUywgc2l6ZW9mKFdhaXRMU05Qcm9jSW5mbykp KTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTWF4Q2hpbGRyZW4sIHNpemVv ZihXYWl0TFNOUHJvY0luZm8pKSk7CiAJcmV0dXJuIHNpemU7CiB9CiAKQEAgLTE0MCw4ICsx NDAsNyBAQCBXYWl0TFNOU2htZW1Jbml0KHZvaWQpCiAJCX0KIAogCQkvKiBJbml0aWFsaXpl IHByb2Nlc3MgaW5mbyBhcnJheSAqLwotCQltZW1zZXQoJndhaXRMU05TdGF0ZS0+cHJvY0lu Zm9zLCAwLAotCQkJICAgKE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUykgKiBz aXplb2YoV2FpdExTTlByb2NJbmZvKSk7CisJCW1lbXNldCgmd2FpdExTTlN0YXRlLT5wcm9j SW5mb3MsIDAsIE1heENoaWxkcmVuICogc2l6ZW9mKFdhaXRMU05Qcm9jSW5mbykpOwogCX0K IH0KIApAQCAtMzgyLDcgKzM4MSw3IEBAIFdhaXRGb3JMU04oV2FpdExTTlR5cGUgbHNuVHlw ZSwgWExvZ1JlY1B0ciB0YXJnZXRMU04sIGludDY0IHRpbWVvdXQpCiAJQXNzZXJ0KHdhaXRM U05TdGF0ZSk7CiAKIAkvKiBTaG91bGQgaGF2ZSBhIHZhbGlkIHByb2MgbnVtYmVyICovCi0J QXNzZXJ0KE15UHJvY051bWJlciA+PSAwICYmIE15UHJvY051bWJlciA8IE1heEJhY2tlbmRz ICsgTlVNX0FVWElMSUFSWV9QUk9DUyk7CisJQXNzZXJ0KE15UHJvY051bWJlciA+PSAwICYm IE15UHJvY051bWJlciA8IE1heENoaWxkcmVuKTsKIAogCWlmICh0aW1lb3V0ID4gMCkKIAl7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKaW5kZXggZTkxMzRi OTc1MWIuLjFiNWM1YjdmNTUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2xhdW5jaF9iYWNrZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hf YmFja2VuZC5jCkBAIC02Miw2ICs2Miw3IEBACiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAor I2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImNvbW1vbi9maWxlX3V0 aWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHds b2NrLmgiCkBAIC0xMDEwLDYgKzEwMTEsOSBAQCByZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVz KEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSkKIAltYXhfc2FmZV9mZHMgPSBwYXJhbS0+bWF4 X3NhZmVfZmRzOwogCiAJTWF4QmFja2VuZHMgPSBwYXJhbS0+TWF4QmFja2VuZHM7CisJTWF4 Q2hpbGRyZW4gPSBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1M7CisJVG90YWxQ cm9jcyA9IE1heENoaWxkcmVuICsgbWF4X3ByZXBhcmVkX3hhY3RzOworCVRvdGFsWGFjdFBy b2NzID0gTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHM7CiAJbnVtX3BtY2hpbGRf c2xvdHMgPSBwYXJhbS0+bnVtX3BtY2hpbGRfc2xvdHM7CiAKICNpZmRlZiBXSU4zMgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKaW5kZXggZDNjNjhkOGIwNGMuLmRmMWU3NTBl ODAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0LmMKQEAgLTQyLDcgKzQyLDcg QEAgQWlvUHJvY3Modm9pZCkKIAkgKiBndWFyYW50ZWUgdGhhdCBub3RoaW5nIGdldHMgYXNz aWduZWQgdG8gYW4gSU8gd29ya2VyJ3MgUHJvY051bWJlciBpZiB3ZQogCSAqIGp1c3Qgc3Vi dHJhY3RlZCBNQVhfSU9fV09SS0VSUy4KIAkgKi8KLQlyZXR1cm4gTWF4QmFja2VuZHMgKyBO VU1fQVVYSUxJQVJZX1BST0NTOworCXJldHVybiBNYXhDaGlsZHJlbjsKIH0KIAogc3RhdGlj IFNpemUKQEAgLTEwMCw3ICsxMDAsNyBAQCBBaW9DaG9vc2VNYXhDb25jdXJyZW5jeSh2b2lk KQogCWludAkJCW1heF9wcm9wb3J0aW9uYWxfcGluczsKIAogCS8qIFNpbWlsYXIgbG9naWMg dG8gTGltaXRBZGRpdGlvbmFsUGlucygpICovCi0JbWF4X2JhY2tlbmRzID0gTWF4QmFja2Vu ZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTOworCW1heF9iYWNrZW5kcyA9IE1heENoaWxkcmVu OwogCW1heF9wcm9wb3J0aW9uYWxfcGlucyA9IE5CdWZmZXJzIC8gbWF4X2JhY2tlbmRzOwog CiAJbWF4X3Byb3BvcnRpb25hbF9waW5zID0gTWF4KG1heF9wcm9wb3J0aW9uYWxfcGlucywg MSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCmluZGV4 IGVkNmU3MWJjZDQ2Li45MDRkZWViNzI0ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTEzMSw3ICsxMzEsNyBAQCBwZ2Fpb191cmluZ19w cm9jcyh2b2lkKQogCSAqIFdlIGNhbiBzdWJ0cmFjdCBNQVhfSU9fV09SS0VSUyBoZXJlIGFz IGlvIHdvcmtlcnMgYXJlIG5ldmVyIHVzZWQgYXQgdGhlCiAJICogc2FtZSB0aW1lIGFzIGlv X21ldGhvZD1pb191cmluZy4KIAkgKi8KLQlyZXR1cm4gTWF4QmFja2VuZHMgKyBOVU1fQVVY SUxJQVJZX1BST0NTIC0gTUFYX0lPX1dPUktFUlM7CisJcmV0dXJuIE1heENoaWxkcmVuIC0g TUFYX0lPX1dPUktFUlM7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1n ci5jCmluZGV4IGQxYmFiYWZmMDIzLi5jMWQ2MzA2YTA3MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMKQEAgLTQxMjksNyArNDEyOSw3IEBAIEluaXRCdWZmZXJNYW5h Z2VyQWNjZXNzKHZvaWQpCiAJICogYWxsb3cgcGxlbnR5IG9mIHBpbnMuICBMaW1pdEFkZGl0 aW9uYWxQaW5zKCkgYW5kCiAJICogR2V0QWRkaXRpb25hbFBpbkxpbWl0KCkgY2FuIGJlIHVz ZWQgdG8gY2hlY2sgdGhlIHJlbWFpbmluZyBiYWxhbmNlLgogCSAqLwotCU1heFByb3BvcnRp b25hbFBpbnMgPSBOQnVmZmVycyAvIChNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJP Q1MpOworCU1heFByb3BvcnRpb25hbFBpbnMgPSBOQnVmZmVycyAvIE1heENoaWxkcmVuOwog CiAJbWVtc2V0KCZQcml2YXRlUmVmQ291bnRBcnJheSwgMCwgc2l6ZW9mKFByaXZhdGVSZWZD b3VudEFycmF5KSk7CiAJbWVtc2V0KCZQcml2YXRlUmVmQ291bnRBcnJheUtleXMsIDAsIHNp emVvZihQcml2YXRlUmVmQ291bnRBcnJheUtleXMpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY2FycmF5LmMKaW5kZXggNDAzMTJkZjJjYWMuLjgwN2MyOTJmNDgxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwpAQCAtMzgxLDcgKzM4MSw3IEBAIFByb2NBcnJh eVNobWVtU2l6ZSh2b2lkKQogCVNpemUJCXNpemU7CiAKIAkvKiBTaXplIG9mIHRoZSBQcm9j QXJyYXkgc3RydWN0dXJlIGl0c2VsZiAqLwotI2RlZmluZSBQUk9DQVJSQVlfTUFYUFJPQ1MJ KE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKQorI2RlZmluZSBQUk9DQVJSQVlf TUFYUFJPQ1MJVG90YWxYYWN0UHJvY3MKIAogCXNpemUgPSBvZmZzZXRvZihQcm9jQXJyYXlT dHJ1Y3QsIHBncHJvY25vcyk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNp emVvZihpbnQpLCBQUk9DQVJSQVlfTUFYUFJPQ1MpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYwppbmRleCA3NTA1YzlkM2EzNy4uNDY5NGY2NDU4MDUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTkzLDcgKzkzLDcgQEAgc3RydWN0 IFByb2NTaWduYWxIZWFkZXIKICAqIG1vcmUgdGhhbiBvbmUgb2YgYW55IGF1eGlsaWFyeSBw cm9jZXNzIHR5cGUgYXQgYSB0aW1lLCBleGNlcHQgZm9yCiAgKiBJTyB3b3JrZXJzLikKICAq LwotI2RlZmluZSBOdW1Qcm9jU2lnbmFsU2xvdHMJKE1heEJhY2tlbmRzICsgTlVNX0FVWElM SUFSWV9QUk9DUykKKyNkZWZpbmUgTnVtUHJvY1NpZ25hbFNsb3RzCU1heENoaWxkcmVuCiAK IC8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbGV2YW50IHR5cGUgYml0IGlzIHNldCBpbiB0aGUg ZmxhZ3MuICovCiAjZGVmaW5lIEJBUlJJRVJfU0hPVUxEX0NIRUNLKGZsYWdzLCB0eXBlKSBc CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCmluZGV4IGE3YTdjYzRmMGE5Li5l YzAzMGI5NDY2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFs YWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKQEAgLTIw MSw3ICsyMDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBTSVNlZwogICogbW9yZSB0aGFuIG9uZSBv ZiBhbnkgYXV4aWxpYXJ5IHByb2Nlc3MgdHlwZSBhdCBhIHRpbWUsIGV4Y2VwdCBmb3IKICAq IElPIHdvcmtlcnMuKQogICovCi0jZGVmaW5lIE51bVByb2NTdGF0ZVNsb3RzCShNYXhCYWNr ZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpCisjZGVmaW5lIE51bVByb2NTdGF0ZVNsb3Rz CU1heENoaWxkcmVuCiAKIHN0YXRpYyBTSVNlZyAqc2htSW52YWxCdWZmZXI7CS8qIHBvaW50 ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s b2NrLmMKaW5kZXggZDkzMGM2NmNkYmQuLmQzMjk0MjAwYzJjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9sb2NrLmMKQEAgLTUzLDggKzUzLDcgQEAKIGludAkJCW1heF9sb2Nrc19wZXJfeGFj dDsgLyogdXNlZCB0byBzZXQgdGhlIGxvY2sgdGFibGUgc2l6ZSAqLwogYm9vbAkJbG9nX2xv Y2tfZmFpbHVyZXMgPSBmYWxzZTsKIAotI2RlZmluZSBOTE9DS0VOVFMoKSBcCi0JbXVsX3Np emUobWF4X2xvY2tzX3Blcl94YWN0LCBhZGRfc2l6ZShNYXhCYWNrZW5kcywgbWF4X3ByZXBh cmVkX3hhY3RzKSkKKyNkZWZpbmUgTkxPQ0tFTlRTKCkgbXVsX3NpemUobWF4X2xvY2tzX3Bl cl94YWN0LCBUb3RhbFhhY3RQcm9jcykKIAogCiAvKgpAQCAtMzA5NywxMCArMzA5NiwxMCBA QCBHZXRMb2NrQ29uZmxpY3RzKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsIExPQ0tNT0RFIGxv Y2ttb2RlLCBpbnQgKmNvdW50cCkKIAkJCXZ4aWRzID0gKFZpcnR1YWxUcmFuc2FjdGlvbklk ICopCiAJCQkJTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsCiAJCQkJCQkJ CSAgIHNpemVvZihWaXJ0dWFsVHJhbnNhY3Rpb25JZCkgKgotCQkJCQkJCQkgICAoTWF4QmFj a2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMgKyAxKSk7CisJCQkJCQkJCSAgIChUb3RhbFhh Y3RQcm9jcyArIDEpKTsKIAl9CiAJZWxzZQotCQl2eGlkcyA9IHBhbGxvYzBfYXJyYXkoVmly dHVhbFRyYW5zYWN0aW9uSWQsIChNYXhCYWNrZW5kcyArIG1heF9wcmVwYXJlZF94YWN0cyAr IDEpKTsKKwkJdnhpZHMgPSBwYWxsb2MwX2FycmF5KFZpcnR1YWxUcmFuc2FjdGlvbklkLCAo VG90YWxYYWN0UHJvY3MgKyAxKSk7CiAKIAkvKiBDb21wdXRlIGhhc2ggY29kZSBhbmQgcGFy dGl0aW9uIGxvY2ssIGFuZCBsb29rIHVwIGNvbmZsaWN0aW5nIG1vZGVzLiAqLwogCWhhc2hj b2RlID0gTG9ja1RhZ0hhc2hDb2RlKGxvY2t0YWcpOwpAQCAtMzI1OSw3ICszMjU4LDcgQEAg R2V0TG9ja0NvbmZsaWN0cyhjb25zdCBMT0NLVEFHICpsb2NrdGFnLCBMT0NLTU9ERSBsb2Nr bW9kZSwgaW50ICpjb3VudHApCiAKIAlMV0xvY2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOwog Ci0JaWYgKGNvdW50ID4gTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCS8qIHNo b3VsZCBuZXZlciBoYXBwZW4gKi8KKwlpZiAoY291bnQgPiBUb3RhbFhhY3RQcm9jcykJLyog c2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQllbG9nKFBBTklDLCAidG9vIG1hbnkgY29uZmxp Y3RpbmcgbG9ja3MgZm91bmQiKTsKIAogCXZ4aWRzW2NvdW50XS5wcm9jTnVtYmVyID0gSU5W QUxJRF9QUk9DX05VTUJFUjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpp bmRleCBmZTc1ZWFkMzUwMS4uNWExNDQyMmFkNGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJlZGljYXRlLmMKQEAgLTI2MSw4ICsyNjEsNyBAQAogI2RlZmluZSBQcmVkaWNhdGVM b2NrSGFzaFBhcnRpdGlvbkxvY2tCeUluZGV4KGkpIFwKIAkoJk1haW5MV0xvY2tBcnJheVtQ UkVESUNBVEVMT0NLX01BTkFHRVJfTFdMT0NLX09GRlNFVCArIChpKV0ubG9jaykKIAotI2Rl ZmluZSBOUFJFRElDQVRFTE9DS1RBUkdFVEVOVFMoKSBcCi0JbXVsX3NpemUobWF4X3ByZWRp Y2F0ZV9sb2Nrc19wZXJfeGFjdCwgYWRkX3NpemUoTWF4QmFja2VuZHMsIG1heF9wcmVwYXJl ZF94YWN0cykpCisjZGVmaW5lIE5QUkVESUNBVEVMT0NLVEFSR0VURU5UUygpIG11bF9zaXpl KG1heF9wcmVkaWNhdGVfbG9ja3NfcGVyX3hhY3QsIFRvdGFsWGFjdFByb2NzKQogCiAjZGVm aW5lIFN4YWN0SXNPbkZpbmlzaGVkTGlzdChzeGFjdCkgKCFkbGlzdF9ub2RlX2lzX2RldGFj aGVkKCYoc3hhY3QpLT5maW5pc2hlZExpbmspKQogCkBAIC0xMjE0LDcgKzEyMTMsNyBAQCBQ cmVkaWNhdGVMb2NrU2htZW1Jbml0KHZvaWQpCiAJICogQ29tcHV0ZSBzaXplIGZvciBzZXJp YWxpemFibGUgdHJhbnNhY3Rpb24gaGFzaHRhYmxlLiBOb3RlIHRoZXNlCiAJICogY2FsY3Vs YXRpb25zIG11c3QgYWdyZWUgd2l0aCBQcmVkaWNhdGVMb2NrU2htZW1TaXplIQogCSAqLwot CW1heF90YWJsZV9zaXplID0gKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKTsK KwltYXhfdGFibGVfc2l6ZSA9IFRvdGFsWGFjdFByb2NzOwogCiAJLyoKIAkgKiBBbGxvY2F0 ZSBhIGxpc3QgdG8gaG9sZCBpbmZvcm1hdGlvbiBvbiB0cmFuc2FjdGlvbnMgcGFydGljaXBh dGluZyBpbgpAQCAtMTM3Niw3ICsxMzc1LDcgQEAgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2 b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplIC8gMTApOwogCiAJLyogdHJhbnNh Y3Rpb24gbGlzdCAqLwotCW1heF90YWJsZV9zaXplID0gTWF4QmFja2VuZHMgKyBtYXhfcHJl cGFyZWRfeGFjdHM7CisJbWF4X3RhYmxlX3NpemUgPSBUb3RhbFhhY3RQcm9jczsKIAltYXhf dGFibGVfc2l6ZSAqPSAxMDsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJlZFhhY3RMaXN0 RGF0YVNpemUpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZSgoU2l6ZSkgbWF4 X3RhYmxlX3NpemUsCkBAIC0xOTAyLDggKzE5MDEsNyBAQCBHZXRTZXJpYWxpemFibGVUcmFu c2FjdGlvblNuYXBzaG90SW50KFNuYXBzaG90IHNuYXBzaG90LAogCWVsc2UKIAl7CiAJCSsr KFByZWRYYWN0LT5Xcml0YWJsZVN4YWN0Q291bnQpOwotCQlBc3NlcnQoUHJlZFhhY3QtPldy aXRhYmxlU3hhY3RDb3VudCA8PQotCQkJICAgKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVk X3hhY3RzKSk7CisJCUFzc2VydChQcmVkWGFjdC0+V3JpdGFibGVTeGFjdENvdW50IDw9IFRv dGFsWGFjdFByb2NzKTsKIAl9CiAKIAkvKiBNYWludGFpbiBzZXJpYWxpemFibGUgZ2xvYmFs IHhtaW4gaW5mby4gKi8KQEAgLTQ5NjUsOCArNDk2Myw3IEBAIHByZWRpY2F0ZWxvY2tfdHdv cGhhc2VfcmVjb3ZlcihGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1aW50MTYgaW5mbywKIAkJ aWYgKCFTeGFjdElzUmVhZE9ubHkoc3hhY3QpKQogCQl7CiAJCQkrKyhQcmVkWGFjdC0+V3Jp dGFibGVTeGFjdENvdW50KTsKLQkJCUFzc2VydChQcmVkWGFjdC0+V3JpdGFibGVTeGFjdENv dW50IDw9Ci0JCQkJICAgKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKSk7CisJ CQlBc3NlcnQoUHJlZFhhY3QtPldyaXRhYmxlU3hhY3RDb3VudCA8PSBUb3RhbFhhY3RQcm9j cyk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggNzcxYjAw NmI1MjIuLjUyY2MzYzdjNzAyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTg3 LDggKzg3LDYgQEAgc3RhdGljIFNpemUKIFBHUHJvY1NobWVtU2l6ZSh2b2lkKQogewogCVNp emUJCXNpemUgPSAwOwotCVNpemUJCVRvdGFsUHJvY3MgPQotCQlhZGRfc2l6ZShNYXhCYWNr ZW5kcywgYWRkX3NpemUoTlVNX0FVWElMSUFSWV9QUk9DUywgbWF4X3ByZXBhcmVkX3hhY3Rz KSk7CiAKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6 ZW9mKFBHUFJPQykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQ cm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSkpOwpAQCAtMTA1LDggKzEwMyw2IEBA IHN0YXRpYyBTaXplCiBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIHsKIAlTaXplCQlz aXplID0gMDsKLQlTaXplCQlUb3RhbFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMs IGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwog CVNpemUJCWZwTG9ja0JpdHNTaXplLAogCQkJCWZwUmVsSWRTaXplOwogCkBAIC0xNTEsNyAr MTQ3LDcgQEAgUHJvY0dsb2JhbFNlbWFzKHZvaWQpCiAJICogV2UgbmVlZCBhIHNlbWEgcGVy IGJhY2tlbmQgKGluY2x1ZGluZyBhdXRvdmFjdXVtKSwgcGx1cyBvbmUgZm9yIGVhY2gKIAkg KiBhdXhpbGlhcnkgcHJvY2Vzcy4KIAkgKi8KLQlyZXR1cm4gTWF4QmFja2VuZHMgKyBOVU1f QVVYSUxJQVJZX1BST0NTOworCXJldHVybiBNYXhDaGlsZHJlbjsKIH0KIAogLyoKQEAgLTE4 Niw3ICsxODIsNiBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCWludAkJCWksCiAJCQkJajsK IAlib29sCQlmb3VuZDsKLQl1aW50MzIJCVRvdGFsUHJvY3MgPSBNYXhCYWNrZW5kcyArIE5V TV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7CiAKIAkvKiBVc2VkIGZv ciBzZXR1cCBvZiBwZXItYmFja2VuZCBmYXN0LXBhdGggc2xvdHMuICovCiAJY2hhcgkgICAq ZnBQdHIsCkBAIC0yMzgsNyArMjMzLDcgQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAogCVBy b2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3VudCBpc24n dCByZWFsbHkgYWxsIG9mIHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3RzICovCi0J UHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50ID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZ X1BST0NTOworCVByb2NHbG9iYWwtPmFsbFByb2NDb3VudCA9IE1heENoaWxkcmVuOwogCiAJ LyoKIAkgKiBBbGxvY2F0ZSBhcnJheXMgbWlycm9yaW5nIFBHUFJPQyBmaWVsZHMgaW4gYSBk ZW5zZSBtYW5uZXIuIFNlZQpAQCAtMzA0LDcgKzI5OSw3IEBAIEluaXRQcm9jR2xvYmFsKHZv aWQpCiAJCSAqIGR1bW15IFBHUFJPQ3MgZG9uJ3QgbmVlZCB0aGVzZSB0aG91Z2ggLSB0aGV5 J3JlIG5ldmVyIGFzc29jaWF0ZWQKIAkJICogd2l0aCBhIHJlYWwgcHJvY2VzcwogCQkgKi8K LQkJaWYgKGkgPCBNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpCisJCWlmIChp IDwgTWF4Q2hpbGRyZW4pCiAJCXsKIAkJCXByb2MtPnNlbSA9IFBHU2VtYXBob3JlQ3JlYXRl KCk7CiAJCQlJbml0U2hhcmVkTGF0Y2goJihwcm9jLT5wcm9jTGF0Y2gpKTsKQEAgLTM2OSw3 ICszNjQsNyBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCSAqIHByb2Nlc3NlcyBhbmQgcHJl cGFyZWQgdHJhbnNhY3Rpb25zLgogCSAqLwogCUF1eGlsaWFyeVByb2NzID0gJnByb2NzW01h eEJhY2tlbmRzXTsKLQlQcmVwYXJlZFhhY3RQcm9jcyA9ICZwcm9jc1tNYXhCYWNrZW5kcyAr IE5VTV9BVVhJTElBUllfUFJPQ1NdOworCVByZXBhcmVkWGFjdFByb2NzID0gJnByb2NzW01h eENoaWxkcmVuXTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9i YWNrZW5kX3N0YXR1cy5jCmluZGV4IGNkMDg3MTI5NDY5Li5lZDc5N2RhNmJlZSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNrZW5kX3N0YXR1cy5jCkBAIC0zMiw3 ICszMiw3IEBACiAgKiByZWFsIHByb2Nlc3Nlcy4pCiAgKiAtLS0tLS0tLS0tCiAgKi8KLSNk ZWZpbmUgTnVtQmFja2VuZFN0YXRTbG90cyAoTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZ X1BST0NTKQorI2RlZmluZSBOdW1CYWNrZW5kU3RhdFNsb3RzIE1heENoaWxkcmVuCiAKIAog LyogLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9i YWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCAzNmFkNzA4 YjM2MC4uMWZiZWY4MjZhOGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0x MzYsMTQgKzEzNiwxNyBAQCBpbnQJCQltYXhfcGFyYWxsZWxfbWFpbnRlbmFuY2Vfd29ya2Vy cyA9IDI7CiAvKgogICogUHJpbWFyeSBkZXRlcm1pbmFudHMgb2Ygc2l6ZXMgb2Ygc2hhcmVk LW1lbW9yeSBzdHJ1Y3R1cmVzLgogICoKLSAqIE1heEJhY2tlbmRzIGlzIGNvbXB1dGVkIGJ5 IFBvc3RtYXN0ZXJNYWluIGFmdGVyIG1vZHVsZXMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8KLSAq IHJlZ2lzdGVyIGJhY2tncm91bmQgd29ya2Vycy4KKyAqIE1heEJhY2tlbmRzLCBNYXhDaGls ZHJlbiBhbmQgVG90YWxQcm9jcyBhcmUgY29tcHV0ZWQgYnkgUG9zdG1hc3Rlck1haW4gYWZ0 ZXIKKyAqIG1vZHVsZXMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gcmVnaXN0ZXIgYmFja2dyb3Vu ZCB3b3JrZXJzLgogICovCiBpbnQJCQlOQnVmZmVycyA9IDE2Mzg0OwogaW50CQkJTWF4Q29u bmVjdGlvbnMgPSAxMDA7CiBpbnQJCQltYXhfd29ya2VyX3Byb2Nlc3NlcyA9IDg7CiBpbnQJ CQltYXhfcGFyYWxsZWxfd29ya2VycyA9IDg7CiBpbnQJCQlNYXhCYWNrZW5kcyA9IDA7Citp bnQJCQlNYXhDaGlsZHJlbiA9IDA7CitpbnQJCQlUb3RhbFByb2NzID0gMDsKK2ludAkJCVRv dGFsWGFjdFByb2NzID0gMDsKIAogLyogR1VDIHBhcmFtZXRlcnMgZm9yIHZhY3V1bSAqLwog aW50CQkJVmFjdXVtQnVmZmVyVXNhZ2VMaW1pdCA9IDIwNDg7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0 L3Bvc3Rpbml0LmMKaW5kZXggYjU5ZTA4NjA1Y2MuLmNjMjk1ODc4ODY4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvaW5pdC9wb3N0aW5pdC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiYWNj ZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9zZXNzaW9uLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIK ICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKQEAgLTU2MywxNCArNTY0LDE4IEBAIElu aXRpYWxpemVNYXhCYWNrZW5kcyh2b2lkKQogCU1heEJhY2tlbmRzID0gTWF4Q29ubmVjdGlv bnMgKyBhdXRvdmFjdXVtX3dvcmtlcl9zbG90cyArCiAJCW1heF93b3JrZXJfcHJvY2Vzc2Vz ICsgbWF4X3dhbF9zZW5kZXJzICsgTlVNX1NQRUNJQUxfV09SS0VSX1BST0NTOwogCi0JaWYg KE1heEJhY2tlbmRzID4gTUFYX0JBQ0tFTkRTKQorCU1heENoaWxkcmVuID0gTWF4QmFja2Vu ZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTOworCWlmIChNYXhDaGlsZHJlbiA+IE1BWF9CQUNL RU5EUykKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJ0b28gbWFueSBzZXJ2ZXIgcHJvY2Vz c2VzIGNvbmZpZ3VyZWQiKSwKIAkJCQkgZXJyZGV0YWlsKCJcIm1heF9jb25uZWN0aW9uc1wi ICglZCkgcGx1cyBcImF1dG92YWN1dW1fd29ya2VyX3Nsb3RzXCIgKCVkKSBwbHVzIFwibWF4 X3dvcmtlcl9wcm9jZXNzZXNcIiAoJWQpIHBsdXMgXCJtYXhfd2FsX3NlbmRlcnNcIiAoJWQp IG11c3QgYmUgbGVzcyB0aGFuICVkLiIsCiAJCQkJCQkgICBNYXhDb25uZWN0aW9ucywgYXV0 b3ZhY3V1bV93b3JrZXJfc2xvdHMsCiAJCQkJCQkgICBtYXhfd29ya2VyX3Byb2Nlc3Nlcywg bWF4X3dhbF9zZW5kZXJzLAotCQkJCQkJICAgTUFYX0JBQ0tFTkRTIC0gKE5VTV9TUEVDSUFM X1dPUktFUl9QUk9DUyAtIDEpKSkpOworCQkJCQkJICAgTUFYX0JBQ0tFTkRTIC0gTlVNX0FV WElMSUFSWV9QUk9DUyAtIChOVU1fU1BFQ0lBTF9XT1JLRVJfUFJPQ1MgLSAxKSkpKTsKKwor CVRvdGFsUHJvY3MgPSBNYXhDaGlsZHJlbiArIG1heF9wcmVwYXJlZF94YWN0czsKKwlUb3Rh bFhhY3RQcm9jcyA9IE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAppbmRleCBmMTZmMzU2NTliOS4uYjI0OTg0NTVlYTQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o CkBAIC0xNzUsNiArMTc1LDkgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBkYXRhX2RpcmVj dG9yeV9tb2RlOwogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IE5CdWZmZXJzOwogZXh0ZXJu IFBHRExMSU1QT1JUIGludCBNYXhCYWNrZW5kczsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQg TWF4Q2hpbGRyZW47CitleHRlcm4gUEdETExJTVBPUlQgaW50IFRvdGFsUHJvY3M7CitleHRl cm4gUEdETExJTVBPUlQgaW50IFRvdGFsWGFjdFByb2NzOwogZXh0ZXJuIFBHRExMSU1QT1JU IGludCBNYXhDb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3dvcmtl cl9wcm9jZXNzZXM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3Jr ZXJzOwotLSAKMi41MS4wCgo= --------------tIlWys0r5FAMPCQmmnTd4Xgr Content-Type: text/x-patch; charset=UTF-8; name="v4-0002-Fix-multixacts-OldestMemberMXactId-and-OldestVisi.patch" Content-Disposition: attachment; filename*0="v4-0002-Fix-multixacts-OldestMemberMXactId-and-OldestVisi.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkM2MyYmI3MmRlMGI0ZjVlMzE0OWNkOGYwMTQ5M2MzNzMxNTA2N2NlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogVGh1LCAyNiBGZWIgMjAyNiAxOTowODo1NyArMDMwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMi8yXSBGaXggbXVsdGl4YWN0cyBPbGRlc3RNZW1iZXJNWGFjdElkIGFu ZAogT2xkZXN0VmlzaWJsZU1YYWN0SWQgdXNhZ2UKCkR1ZSB0byBbMV0sIE9sZGVzdE1lbWJl ck1YYWN0SWQgaXMgbm8gbG9uZ2VyIGFjY2Vzc2VkIGJ5IHN5bnRoZXRpYwpkdW1teUJhY2tl bmRJZCwgYnV0IHJhdGhlciB3aXRoIHBncHJvY25vLiBQcm9jcyBmb3IgcHJlcGFyZWQgeGFj dHMgYXJlCnBsYWNlZCBhZnRlciBhdXhpbGlhcnkgcHJvY3MsIHRoZXJlZm9yZSBjYWxjdWxh dGlvbiBmb3IgTWF4T2xkZXN0U2xvdApiZWNhbWUgaW52YWxpZC4KCk9uIHRoZSBvdGhlciBo YW5kLCBPbGRlc3RWaXNpYmxlTVhhY3RJZCBpcyB1c2VkIG9ubHkgZm9yIHJlYWwgYmFja2Vu ZHMsCmFuZCBzbyBuZXZlciBhY2Nlc3NlZCBhdCBpbmRleCBncmVhdGVyIHRoYW4gTWF4QmFj a2VuZHMuCgpMZXRzIHNlcGFyYXRlIHNpemUgY2FsY3VsYXRpb24gZm9yIGFycmF5cyBhbmQg dXNlIGNvbnZlcnRlZCBpbmRleCB0bwpzdG9yZSBvbGRlc3QgbWVtYmVyIG14YWN0IGZvciBw cmVwYXJlZCB0cmFuc2FjdGlvbnMuCgpbMV0gYWIzNTVlM2E4OGRlNzQ1ICJSZWRlZmluZSBi YWNrZW5kIElEIHRvIGJlIGFuIGluZGV4IGludG8gdGhlIHByb2MgYXJyYXkiCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgfCAxMDQgKysrKysrKysrKysr KysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKyksIDMyIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211 bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5k ZXggYTM1NjcxZWEzNDYuLjQyODU5ODI4NTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwpAQCAtMTYyLDEwICsxNjIsNiBAQCB0eXBlZGVmIHN0cnVjdCBN dWx0aVhhY3RTdGF0ZURhdGEKIAkgKiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIE11bHRp WGFjdFN0YXRlRGF0YSBzdHJ1Y3QuIEVhY2ggaXMgaW5kZXhlZCBieQogCSAqIFByb2NOdW1i ZXIuCiAJICoKLQkgKiBJbiBib3RoIGFycmF5cywgdGhlcmUncyBhIHNsb3QgZm9yIGFsbCBu b3JtYWwgYmFja2VuZHMKLQkgKiAoMC4uTWF4QmFja2VuZHMtMSkgZm9sbG93ZWQgYnkgYSBz bG90IGZvciBtYXhfcHJlcGFyZWRfeGFjdHMgcHJlcGFyZWQKLQkgKiB0cmFuc2FjdGlvbnMu Ci0JICoKIAkgKiBPbGRlc3RNZW1iZXJNWGFjdElkW2tdIGlzIHRoZSBvbGRlc3QgTXVsdGlY YWN0SWQgZWFjaCBiYWNrZW5kJ3MgY3VycmVudAogCSAqIHRyYW5zYWN0aW9uKHMpIGNvdWxk IHBvc3NpYmx5IGJlIGEgbWVtYmVyIG9mLCBvciBJbnZhbGlkTXVsdGlYYWN0SWQKIAkgKiB3 aGVuIHRoZSBiYWNrZW5kIGhhcyBubyBsaXZlIHRyYW5zYWN0aW9uIHRoYXQgY291bGQgcG9z c2libHkgYmUgYQpAQCAtMTc2LDYgKzE3MiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhh Y3RTdGF0ZURhdGEKIAkgKiBtZW1iZXIgb2YgYSBNdWx0aVhhY3QsIGFuZCB0aGF0IE11bHRp WGFjdCB3b3VsZCBoYXZlIHRvIGJlIGNyZWF0ZWQKIAkgKiBkdXJpbmcgb3IgYWZ0ZXIgdGhl IGxvY2sgYWNxdWlzaXRpb24uKQogCSAqCisJICogSW4gT2xkZXN0TWVtYmVyTVhhY3RJZCBh cnJheSwgdGhlcmUncyBhIHNsb3QgZm9yIGFsbCBub3JtYWwgYmFja2VuZHMKKwkgKiAoMC4u TWF4QmFja2VuZHMtMSkgZm9sbG93ZWQgYnkgYSBzbG90IGZvciBtYXhfcHJlcGFyZWRfeGFj dHMgcHJlcGFyZWQKKwkgKiB0cmFuc2FjdGlvbnMuCisJICoKIAkgKiBPbGRlc3RWaXNpYmxl TVhhY3RJZFtrXSBpcyB0aGUgb2xkZXN0IE11bHRpWGFjdElkIGVhY2ggYmFja2VuZCdzCiAJ ICogY3VycmVudCB0cmFuc2FjdGlvbihzKSB0aGluayBpcyBwb3RlbnRpYWxseSBsaXZlLCBv ciBJbnZhbGlkTXVsdGlYYWN0SWQKIAkgKiB3aGVuIG5vdCBpbiBhIHRyYW5zYWN0aW9uIG9y IG5vdCBpbiBhIHRyYW5zYWN0aW9uIHRoYXQncyBwYWlkIGFueQpAQCAtMTg3LDYgKzE4Nyw5 IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCSAqIHRoYW4gaXRzIG93 biBPbGRlc3RWaXNpYmxlTVhhY3RJZFtdIHNldHRpbmc7IHRoaXMgaXMgbmVjZXNzYXJ5IGJl Y2F1c2UKIAkgKiB0aGUgcmVsZXZhbnQgU0xSVSBkYXRhIGNhbiBiZSBjb25jdXJyZW50bHkg dHJ1bmNhdGVkIGF3YXkuCiAJICoKKwkgKiBJbiBPbGRlc3RWaXNpYmxlTVhhY3RJZCBhcnJh eSwgdGhlcmUncyBhIHNsb3QgZm9yIGFsbCBub3JtYWwgYmFja2VuZHMKKwkgKiAoMC4uTWF4 QmFja2VuZHMtMSkgb25seS4gTm8gc2xvdHMgZm9yIHByZXBhcmVkIHRyYW5zYWN0aW9ucy4K KwkgKgogCSAqIFRoZSBvbGRlc3QgdmFsaWQgdmFsdWUgYW1vbmcgYWxsIG9mIHRoZSBPbGRl c3RNZW1iZXJNWGFjdElkW10gYW5kCiAJICogT2xkZXN0VmlzaWJsZU1YYWN0SWRbXSBlbnRy aWVzIGlzIGNvbnNpZGVyZWQgYnkgdmFjdXVtIGFzIHRoZSBlYXJsaWVzdAogCSAqIHBvc3Np YmxlIHZhbHVlIHN0aWxsIGhhdmluZyBhbnkgbGl2ZSBtZW1iZXIgdHJhbnNhY3Rpb24gLS0g T2xkZXN0TXhhY3QuCkBAIC0yMTAsMTMgKzIxMyw1NCBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0 aVhhY3RTdGF0ZURhdGEKIC8qCiAgKiBTaXplIG9mIE9sZGVzdE1lbWJlck1YYWN0SWQgYW5k IE9sZGVzdFZpc2libGVNWGFjdElkIGFycmF5cy4KICAqLwotI2RlZmluZSBNYXhPbGRlc3RT bG90CVRvdGFsWGFjdFByb2NzCisjZGVmaW5lIE1heE1lbWJlclNsb3QJVG90YWxYYWN0UHJv Y3MKKyNkZWZpbmUgTWF4VmlzaWJsZVNsb3QJTWF4QmFja2VuZHMKKy8qCisgKiBUb3RhbCBz aXplIG9mIHBlckJhY2tlbmRYYWN0SWRzLgorICovCisjZGVmaW5lIE1heE9sZGVzdFNsb3QJ KE1heE1lbWJlclNsb3QgKyBNYXhWaXNpYmxlU2xvdCkKIAogLyogUG9pbnRlcnMgdG8gdGhl IHN0YXRlIGRhdGEgaW4gc2hhcmVkIG1lbW9yeSAqLwogc3RhdGljIE11bHRpWGFjdFN0YXRl RGF0YSAqTXVsdGlYYWN0U3RhdGU7CiBzdGF0aWMgTXVsdGlYYWN0SWQgKk9sZGVzdE1lbWJl ck1YYWN0SWQ7CiBzdGF0aWMgTXVsdGlYYWN0SWQgKk9sZGVzdFZpc2libGVNWGFjdElkOwog CitzdGF0aWMgaW5saW5lIE11bHRpWGFjdElkCitHZXRPbGRlc3RNZW1iZXJNWGFjdElkKFBy b2NOdW1iZXIgcHJvY25vKQoreworCUFzc2VydChwcm9jbm8gPj0gMCAmJiBwcm9jbm8gPCBN YXhCYWNrZW5kcyk7CisJcmV0dXJuIE9sZGVzdE1lbWJlck1YYWN0SWRbcHJvY25vXTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkCitTZXRPbGRlc3RNZW1iZXJNWGFjdElkKFByb2NOdW1i ZXIgcHJvY25vLCBNdWx0aVhhY3RJZCBteGFjdCkKK3sKKwlBc3NlcnQocHJvY25vID49IDAg JiYgcHJvY25vIDwgTWF4QmFja2VuZHMpOworCU9sZGVzdE1lbWJlck1YYWN0SWRbcHJvY25v XSA9IG14YWN0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1NldE9sZGVzdFByZXBhcmVk TVhhY3RJZChQcm9jTnVtYmVyIHByb2NubywgTXVsdGlYYWN0SWQgbXhhY3QpCit7CisJQXNz ZXJ0KHByb2NubyA+PSBNYXhDaGlsZHJlbiAmJiBwcm9jbm8gPCBUb3RhbFByb2NzKTsKKwkv KiBUaGlzIGNoZWNrIGxvb2tzIHJlZHVuZGFudCwgYnV0IGl0IGlzIGZ1dHVyZSBwcm9vZi4g Ki8KKwlBc3NlcnQocHJvY25vIC0gTWF4Q2hpbGRyZW4gKyBNYXhCYWNrZW5kcyA8IE1heE1l bWJlclNsb3QpOworCU9sZGVzdE1lbWJlck1YYWN0SWRbcHJvY25vIC0gTWF4Q2hpbGRyZW4g KyBNYXhCYWNrZW5kc10gPSBteGFjdDsKK30KKworc3RhdGljIGlubGluZSBNdWx0aVhhY3RJ ZAorR2V0T2xkZXN0VmlzaWJsZU1YYWN0SWQoUHJvY051bWJlciBwcm9jbm8pCit7CisJQXNz ZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IE1heFZpc2libGVTbG90KTsKKwlyZXR1cm4g T2xkZXN0VmlzaWJsZU1YYWN0SWRbcHJvY25vXTsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitTZXRPbGRlc3RWaXNpYmxlTVhhY3RJZChQcm9jTnVtYmVyIHByb2NubywgTXVsdGlYYWN0 SWQgbXhhY3QpCit7CisJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IE1heFZpc2li bGVTbG90KTsKKwlPbGRlc3RWaXNpYmxlTVhhY3RJZFtwcm9jbm9dID0gbXhhY3Q7Cit9CiAK IC8qCiAgKiBEZWZpbml0aW9ucyBmb3IgdGhlIGJhY2tlbmQtbG9jYWwgTXVsdGlYYWN0SWQg Y2FjaGUuCkBAIC0zMDgsNyArMzUyLDcgQEAgTXVsdGlYYWN0SWRDcmVhdGUoVHJhbnNhY3Rp b25JZCB4aWQxLCBNdWx0aVhhY3RTdGF0dXMgc3RhdHVzMSwKIAlBc3NlcnQoIVRyYW5zYWN0 aW9uSWRFcXVhbHMoeGlkMSwgeGlkMikgfHwgKHN0YXR1czEgIT0gc3RhdHVzMikpOwogCiAJ LyogTXVsdGlYYWN0SWRTZXRPbGRlc3RNZW1iZXIoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQg YWxyZWFkeS4gKi8KLQlBc3NlcnQoTXVsdGlYYWN0SWRJc1ZhbGlkKE9sZGVzdE1lbWJlck1Y YWN0SWRbTXlQcm9jTnVtYmVyXSkpOworCUFzc2VydChNdWx0aVhhY3RJZElzVmFsaWQoR2V0 T2xkZXN0TWVtYmVyTVhhY3RJZChNeVByb2NOdW1iZXIpKSk7CiAKIAkvKgogCSAqIE5vdGU6 IHVubGlrZSBNdWx0aVhhY3RJZEV4cGFuZCwgd2UgZG9uJ3QgYm90aGVyIHRvIGNoZWNrIHRo YXQgYm90aCBYSURzCkBAIC0zNjIsNyArNDA2LDcgQEAgTXVsdGlYYWN0SWRFeHBhbmQoTXVs dGlYYWN0SWQgbXVsdGksIFRyYW5zYWN0aW9uSWQgeGlkLCBNdWx0aVhhY3RTdGF0dXMgc3Rh dHVzKQogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIAogCS8qIE11bHRp WGFjdElkU2V0T2xkZXN0TWVtYmVyKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGFscmVhZHku ICovCi0JQXNzZXJ0KE11bHRpWGFjdElkSXNWYWxpZChPbGRlc3RNZW1iZXJNWGFjdElkW015 UHJvY051bWJlcl0pKTsKKwlBc3NlcnQoTXVsdGlYYWN0SWRJc1ZhbGlkKEdldE9sZGVzdE1l bWJlck1YYWN0SWQoTXlQcm9jTnVtYmVyKSkpOwogCiAJZGVidWdfZWxvZzUoREVCVUcyLCAi RXhwYW5kOiByZWNlaXZlZCBtdWx0aSAldSwgeGlkICV1IHN0YXR1cyAlcyIsCiAJCQkJbXVs dGksIHhpZCwgbXhzdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwpAQCAtNTM2LDcgKzU4MCw3 IEBAIE11bHRpWGFjdElkSXNSdW5uaW5nKE11bHRpWGFjdElkIG11bHRpLCBib29sIGlzTG9j a09ubHkpCiB2b2lkCiBNdWx0aVhhY3RJZFNldE9sZGVzdE1lbWJlcih2b2lkKQogewotCWlm ICghTXVsdGlYYWN0SWRJc1ZhbGlkKE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVy XSkpCisJaWYgKCFNdWx0aVhhY3RJZElzVmFsaWQoR2V0T2xkZXN0TWVtYmVyTVhhY3RJZChN eVByb2NOdW1iZXIpKSkKIAl7CiAJCU11bHRpWGFjdElkIG5leHRNWGFjdDsKIApAQCAtNTU4 LDcgKzYwMiw3IEBAIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKHZvaWQpCiAKIAkJbmV4 dE1YYWN0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdDsKIAotCQlPbGRlc3RNZW1iZXJN WGFjdElkW015UHJvY051bWJlcl0gPSBuZXh0TVhhY3Q7CisJCVNldE9sZGVzdE1lbWJlck1Y YWN0SWQoTXlQcm9jTnVtYmVyLCBuZXh0TVhhY3QpOwogCiAJCUxXTG9ja1JlbGVhc2UoTXVs dGlYYWN0R2VuTG9jayk7CiAKQEAgLTU4Niw3ICs2MzAsNyBAQCBNdWx0aVhhY3RJZFNldE9s ZGVzdE1lbWJlcih2b2lkKQogc3RhdGljIHZvaWQKIE11bHRpWGFjdElkU2V0T2xkZXN0Vmlz aWJsZSh2b2lkKQogewotCWlmICghTXVsdGlYYWN0SWRJc1ZhbGlkKE9sZGVzdFZpc2libGVN WGFjdElkW015UHJvY051bWJlcl0pKQorCWlmICghTXVsdGlYYWN0SWRJc1ZhbGlkKEdldE9s ZGVzdFZpc2libGVNWGFjdElkKE15UHJvY051bWJlcikpKQogCXsKIAkJTXVsdGlYYWN0SWQg b2xkZXN0TVhhY3Q7CiAJCWludAkJCWk7CkBAIC01OTQsNyArNjM4LDcgQEAgTXVsdGlYYWN0 SWRTZXRPbGRlc3RWaXNpYmxlKHZvaWQpCiAJCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2Vu TG9jaywgTFdfRVhDTFVTSVZFKTsKIAogCQlvbGRlc3RNWGFjdCA9IE11bHRpWGFjdFN0YXRl LT5uZXh0TVhhY3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBNYXhPbGRlc3RTbG90OyBpKyspCisJ CWZvciAoaSA9IDA7IGkgPCBNYXhNZW1iZXJTbG90OyBpKyspCiAJCXsKIAkJCU11bHRpWGFj dElkIHRoaXNvbGRlc3QgPSBPbGRlc3RNZW1iZXJNWGFjdElkW2ldOwogCkBAIC02MDMsNyAr NjQ3LDcgQEAgTXVsdGlYYWN0SWRTZXRPbGRlc3RWaXNpYmxlKHZvaWQpCiAJCQkJb2xkZXN0 TVhhY3QgPSB0aGlzb2xkZXN0OwogCQl9CiAKLQkJT2xkZXN0VmlzaWJsZU1YYWN0SWRbTXlQ cm9jTnVtYmVyXSA9IG9sZGVzdE1YYWN0OworCQlTZXRPbGRlc3RWaXNpYmxlTVhhY3RJZChN eVByb2NOdW1iZXIsIG9sZGVzdE1YYWN0KTsKIAogCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFj dEdlbkxvY2spOwogCkBAIC0xMTUyLDcgKzExOTYsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJl cnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJICog bXVsdGkuICBJdCBjYW5ub3QgcG9zc2libHkgc3RpbGwgYmUgcnVubmluZy4KIAkgKi8KIAlp ZiAoaXNMb2NrT25seSAmJgotCQlNdWx0aVhhY3RJZFByZWNlZGVzKG11bHRpLCBPbGRlc3RW aXNpYmxlTVhhY3RJZFtNeVByb2NOdW1iZXJdKSkKKwkJTXVsdGlYYWN0SWRQcmVjZWRlcyht dWx0aSwgR2V0T2xkZXN0VmlzaWJsZU1YYWN0SWQoTXlQcm9jTnVtYmVyKSkpCiAJewogCQlk ZWJ1Z19lbG9nMihERUJVRzIsICJHZXRNZW1iZXJzOiBhIGxvY2tlci1vbmx5IG11bHRpIGlz IHRvbyBvbGQiKTsKIAkJKm1lbWJlcnMgPSBOVUxMOwpAQCAtMTU3NCw4ICsxNjE4LDggQEAg QXRFT1hhY3RfTXVsdGlYYWN0KHZvaWQpCiAJICogV2UgYXNzdW1lIHRoYXQgc3RvcmluZyBh IE11bHRpWGFjdElkIGlzIGF0b21pYyBhbmQgc28gd2UgbmVlZCBub3QgdGFrZQogCSAqIE11 bHRpWGFjdEdlbkxvY2sgdG8gZG8gdGhpcy4KIAkgKi8KLQlPbGRlc3RNZW1iZXJNWGFjdElk W015UHJvY051bWJlcl0gPSBJbnZhbGlkTXVsdGlYYWN0SWQ7Ci0JT2xkZXN0VmlzaWJsZU1Y YWN0SWRbTXlQcm9jTnVtYmVyXSA9IEludmFsaWRNdWx0aVhhY3RJZDsKKwlTZXRPbGRlc3RN ZW1iZXJNWGFjdElkKE15UHJvY051bWJlciwgSW52YWxpZE11bHRpWGFjdElkKTsKKwlTZXRP bGRlc3RWaXNpYmxlTVhhY3RJZChNeVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhhY3RJZCk7 CiAKIAkvKgogCSAqIERpc2NhcmQgdGhlIGxvY2FsIE11bHRpWGFjdElkIGNhY2hlLiAgU2lu Y2UgTVhhY3RDb250ZXh0IHdhcyBjcmVhdGVkIGFzCkBAIC0xNTk1LDcgKzE2MzksNyBAQCBB dEVPWGFjdF9NdWx0aVhhY3Qodm9pZCkKIHZvaWQKIEF0UHJlcGFyZV9NdWx0aVhhY3Qodm9p ZCkKIHsKLQlNdWx0aVhhY3RJZCBteU9sZGVzdE1lbWJlciA9IE9sZGVzdE1lbWJlck1YYWN0 SWRbTXlQcm9jTnVtYmVyXTsKKwlNdWx0aVhhY3RJZCBteU9sZGVzdE1lbWJlciA9IEdldE9s ZGVzdE1lbWJlck1YYWN0SWQoTXlQcm9jTnVtYmVyKTsKIAogCWlmIChNdWx0aVhhY3RJZElz VmFsaWQobXlPbGRlc3RNZW1iZXIpKQogCQlSZWdpc3RlclR3b1BoYXNlUmVjb3JkKFRXT1BI QVNFX1JNX01VTFRJWEFDVF9JRCwgMCwKQEAgLTE2MTUsNyArMTY1OSw3IEBAIFBvc3RQcmVw YXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogCSAqIFRyYW5zZmVyIG91 ciBPbGRlc3RNZW1iZXJNWGFjdElkIHZhbHVlIHRvIHRoZSBzbG90IHJlc2VydmVkIGZvciB0 aGUKIAkgKiBwcmVwYXJlZCB0cmFuc2FjdGlvbi4KIAkgKi8KLQlteU9sZGVzdE1lbWJlciA9 IE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVyXTsKKwlteU9sZGVzdE1lbWJlciA9 IEdldE9sZGVzdE1lbWJlck1YYWN0SWQoTXlQcm9jTnVtYmVyKTsKIAlpZiAoTXVsdGlYYWN0 SWRJc1ZhbGlkKG15T2xkZXN0TWVtYmVyKSkKIAl7CiAJCVByb2NOdW1iZXIJZHVtbXlQcm9j TnVtYmVyID0gVHdvUGhhc2VHZXREdW1teVByb2NOdW1iZXIoZnhpZCwgZmFsc2UpOwpAQCAt MTYyOCw4ICsxNjcyLDggQEAgUG9zdFByZXBhcmVfTXVsdGlYYWN0KEZ1bGxUcmFuc2FjdGlv bklkIGZ4aWQpCiAJCSAqLwogCQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExX X0VYQ0xVU0lWRSk7CiAKLQkJT2xkZXN0TWVtYmVyTVhhY3RJZFtkdW1teVByb2NOdW1iZXJd ID0gbXlPbGRlc3RNZW1iZXI7Ci0JCU9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVy XSA9IEludmFsaWRNdWx0aVhhY3RJZDsKKwkJU2V0T2xkZXN0UHJlcGFyZWRNWGFjdElkKGR1 bW15UHJvY051bWJlciwgbXlPbGRlc3RNZW1iZXIpOworCQlTZXRPbGRlc3RNZW1iZXJNWGFj dElkKE15UHJvY051bWJlciwgSW52YWxpZE11bHRpWGFjdElkKTsKIAogCQlMV0xvY2tSZWxl YXNlKE11bHRpWGFjdEdlbkxvY2spOwogCX0KQEAgLTE2NDIsNyArMTY4Niw3IEBAIFBvc3RQ cmVwYXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogCSAqIFdlIGFzc3Vt ZSB0aGF0IHN0b3JpbmcgYSBNdWx0aVhhY3RJZCBpcyBhdG9taWMgYW5kIHNvIHdlIG5lZWQg bm90IHRha2UKIAkgKiBNdWx0aVhhY3RHZW5Mb2NrIHRvIGRvIHRoaXMuCiAJICovCi0JT2xk ZXN0VmlzaWJsZU1YYWN0SWRbTXlQcm9jTnVtYmVyXSA9IEludmFsaWRNdWx0aVhhY3RJZDsK KwlTZXRPbGRlc3RWaXNpYmxlTVhhY3RJZChNeVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhh Y3RJZCk7CiAKIAkvKgogCSAqIERpc2NhcmQgdGhlIGxvY2FsIE11bHRpWGFjdElkIGNhY2hl IGxpa2UgaW4gQXRFT1hhY3RfTXVsdGlYYWN0LgpAQCAtMTY2OSw3ICsxNzEzLDcgQEAgbXVs dGl4YWN0X3R3b3BoYXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2 IGluZm8sCiAJQXNzZXJ0KGxlbiA9PSBzaXplb2YoTXVsdGlYYWN0SWQpKTsKIAlvbGRlc3RN ZW1iZXIgPSAqKChNdWx0aVhhY3RJZCAqKSByZWNkYXRhKTsKIAotCU9sZGVzdE1lbWJlck1Y YWN0SWRbZHVtbXlQcm9jTnVtYmVyXSA9IG9sZGVzdE1lbWJlcjsKKwlTZXRPbGRlc3RQcmVw YXJlZE1YYWN0SWQoZHVtbXlQcm9jTnVtYmVyLCBvbGRlc3RNZW1iZXIpOwogfQogCiAvKgpA QCAtMTY4NCw3ICsxNzI4LDcgQEAgbXVsdGl4YWN0X3R3b3BoYXNlX3Bvc3Rjb21taXQoRnVs bFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2IGluZm8sCiAKIAlBc3NlcnQobGVuID09IHNp emVvZihNdWx0aVhhY3RJZCkpOwogCi0JT2xkZXN0TWVtYmVyTVhhY3RJZFtkdW1teVByb2NO dW1iZXJdID0gSW52YWxpZE11bHRpWGFjdElkOworCVNldE9sZGVzdFByZXBhcmVkTVhhY3RJ ZChkdW1teVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhhY3RJZCk7CiB9CiAKIC8qCkBAIC0x NzA4LDEwICsxNzUyLDkgQEAgTXVsdGlYYWN0U2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJ c2l6ZTsKIAotCS8qIFdlIG5lZWQgMipNYXhPbGRlc3RTbG90IHBlckJhY2tlbmRYYWN0SWRz W10gZW50cmllcyAqLwogI2RlZmluZSBTSEFSRURfTVVMVElYQUNUX1NUQVRFX1NJWkUgXAog CWFkZF9zaXplKG9mZnNldG9mKE11bHRpWGFjdFN0YXRlRGF0YSwgcGVyQmFja2VuZFhhY3RJ ZHMpLCBcCi0JCQkgbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElkKSAqIDIsIE1heE9sZGVz dFNsb3QpKQorCQkJIG11bF9zaXplKHNpemVvZihNdWx0aVhhY3RJZCksIE1heE9sZGVzdFNs b3QpKQogCiAJc2l6ZSA9IFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVfU0laRTsKIAlzaXplID0g YWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKG11bHRpeGFjdF9vZmZzZXRfYnVm ZmVycywgMCkpOwpAQCAtMTc2Myw3ICsxODA2LDcgQEAgTXVsdGlYYWN0U2htZW1Jbml0KHZv aWQpCiAJICogU2V0IHVwIGFycmF5IHBvaW50ZXJzLgogCSAqLwogCU9sZGVzdE1lbWJlck1Y YWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+cGVyQmFja2VuZFhhY3RJZHM7Ci0JT2xkZXN0Vmlz aWJsZU1YYWN0SWQgPSBPbGRlc3RNZW1iZXJNWGFjdElkICsgTWF4T2xkZXN0U2xvdDsKKwlP bGRlc3RWaXNpYmxlTVhhY3RJZCA9IE9sZGVzdE1lbWJlck1YYWN0SWQgKyBNYXhNZW1iZXJT bG90OwogfQogCiAvKgpAQCAtMjMwMyw2ICsyMzQ2LDggQEAgTXVsdGlYYWN0SWQKIEdldE9s ZGVzdE11bHRpWGFjdElkKHZvaWQpCiB7CiAJTXVsdGlYYWN0SWQgb2xkZXN0TVhhY3Q7CisJ TXVsdGlYYWN0SWQgdGhpc29sZGVzdDsKKwlNdWx0aVhhY3RJZAkqYWxsT2xkZXN0OwogCWlu dAkJCWk7CiAKIAkvKgpAQCAtMjMxMSwxNSArMjM1NiwxMCBAQCBHZXRPbGRlc3RNdWx0aVhh Y3RJZCh2b2lkKQogCSAqLwogCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywgTFdf U0hBUkVEKTsKIAlvbGRlc3RNWGFjdCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3Q7CisJ YWxsT2xkZXN0ID0gTXVsdGlYYWN0U3RhdGUtPnBlckJhY2tlbmRYYWN0SWRzOwogCWZvciAo aSA9IDA7IGkgPCBNYXhPbGRlc3RTbG90OyBpKyspCiAJewotCQlNdWx0aVhhY3RJZCB0aGlz b2xkZXN0OwotCi0JCXRoaXNvbGRlc3QgPSBPbGRlc3RNZW1iZXJNWGFjdElkW2ldOwotCQlp ZiAoTXVsdGlYYWN0SWRJc1ZhbGlkKHRoaXNvbGRlc3QpICYmCi0JCQlNdWx0aVhhY3RJZFBy ZWNlZGVzKHRoaXNvbGRlc3QsIG9sZGVzdE1YYWN0KSkKLQkJCW9sZGVzdE1YYWN0ID0gdGhp c29sZGVzdDsKLQkJdGhpc29sZGVzdCA9IE9sZGVzdFZpc2libGVNWGFjdElkW2ldOworCQl0 aGlzb2xkZXN0ID0gYWxsT2xkZXN0W2ldOwogCQlpZiAoTXVsdGlYYWN0SWRJc1ZhbGlkKHRo aXNvbGRlc3QpICYmCiAJCQlNdWx0aVhhY3RJZFByZWNlZGVzKHRoaXNvbGRlc3QsIG9sZGVz dE1YYWN0KSkKIAkJCW9sZGVzdE1YYWN0ID0gdGhpc29sZGVzdDsKLS0gCjIuNTEuMAoK --------------tIlWys0r5FAMPCQmmnTd4Xgr--