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 1tx1ZA-001xv8-04 for pgsql-hackers@arkaria.postgresql.org; Tue, 25 Mar 2025 10:31:28 +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 1tx1Z7-0023Hh-Fi for pgsql-hackers@arkaria.postgresql.org; Tue, 25 Mar 2025 10:31:25 +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 1tx1Z6-0023HZ-To for pgsql-hackers@lists.postgresql.org; Tue, 25 Mar 2025 10:31:25 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tx1Z3-0011W1-2i for pgsql-hackers@lists.postgresql.org; Tue, 25 Mar 2025 10:31:24 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-2ff187f027fso11579333a91.1 for ; Tue, 25 Mar 2025 03:31:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742898681; x=1743503481; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ULC5vNNR2IyXkzkKDupsp78bVJK0wP6b/7WrozUcew8=; b=TnvhqwucgYzqOMmoqI7a+Xa5xvPsrJi1oS93Yf3GxSlNkj3Y9+tIIKqI1HFv9Cr/v5 j8LOTtf1eOkW26Ag/t+uOr5CMWRDJmguNsVoPJGrVtPJIT0x5KjntQhudbp9f/qpcehf 6VZ3cwzH4fGoWb6Pc4ks7PXKrGVZwF32njiNPlg7zfmiZR/Ub+XvKrIoaTjutfxdMP7F rP1dETnv4Kv6K4a0PpTQiS1bWgUk92or4UtxOTcGT9ruZTYxSpHoCZPJzArmt/+/f3OF 8QNiCpKRLqzlZaV4xqm3UkCDVn9eOPVhe3hjLvzQshF5yfuKgbeh98myX+6ghfHRT8n1 UyWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742898681; x=1743503481; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ULC5vNNR2IyXkzkKDupsp78bVJK0wP6b/7WrozUcew8=; b=PUDujdQRo7T4me0+3H4vGnxYZ3TpMMNGsGF8h/+TSp5grrfqGNs256a8AWRqjDXiXO Bq/UHZlbcGwPVFsxH0Ho7UzzCb3Zw7lthciueAUdTfT9i590ZdSvIvINJ81kBFYN2Wby zFds6xdrdRIaEe2gCovOUmULgjkJcSJJ/jEHCTMU5sr6PAz0LfQz3SF9ashb1OGdkWnT pmftD7DzLiUvQJ/BtAW23p7LQqesW61/2ELCiwqBN36wVcrvXK9JQtdguAPx1enat+wg nJZI6G1cYwl9Nwt/6k/5/FyhUvpJ9/oeYMpKl8wiEsB7jre/W3FABorFAPTjd/V7bPJT tG5g== X-Forwarded-Encrypted: i=1; AJvYcCU4a6uWAudMGcxrpjaeXiFpDCQ6Zj0y2zvnYEqrcXdi/Xw8WoIt4BtBVwg07hYLracEeOVCon8WZu7RQvlY@lists.postgresql.org X-Gm-Message-State: AOJu0Yy4+YJis4RvT4jwZKtBnPoxLiRpq5GYwWjf3WMiVzabFLFEdAj4 R32ALFyguNQ8DEi9FvR5C+xKK5j1BRO2Y91Qk7jQfbDU/xGEd4Oz3Q7gUCQ7oMDIB2sS2tNKxVh Id+KCHpgGEAjcBCDsijMbxmzJkVs= X-Gm-Gg: ASbGncvKKdBYTdpNoov87xYJw30T/y3YTw8MUgUTbri9l1WXTm7/65hK8vIq/rVjtXq OPrO0gPePFDWcVkpvp3MFmgCCWxxFQ/JgkIewzIA548g8Y1YaixRNgC/O1Q2E26kKOcJgm5vS4M mW04MmiTHtsFMr/jC9Mr2APY+abP/LwSAcVv9FLbLStPpoHbieYCGNDMdbIUKk X-Google-Smtp-Source: AGHT+IE2gC6QQq1dEYBuIvXj3Wl8VfNbTPoWQQZStvgaU7xqsYvUGFDTyM8a7ENtdaGGyaKkiXdQCCKJV5/4qYhZmVA= X-Received: by 2002:a17:90b:2551:b0:2ee:9661:eafb with SMTP id 98e67ed59e1d1-3030f38e57dmr27017011a91.12.1742898680403; Tue, 25 Mar 2025 03:31:20 -0700 (PDT) MIME-Version: 1.0 References: <3660951.1741016970@sss.pgh.pa.us> In-Reply-To: <3660951.1741016970@sss.pgh.pa.us> From: Etsuro Fujita Date: Tue, 25 Mar 2025 11:31:08 +0100 X-Gm-Features: AQ5f1JpycfdDdSSqrAw-QYtNT4C-jRt74Iez4_GccLVWHgGyx9Kfo3_jmbg4lWo Message-ID: Subject: =?UTF-8?Q?Re=3A_Options_to_control_remote_transactions=E2=80=99_access?= =?UTF-8?Q?=2Fdeferrable_modes_in_postgres=5Ffdw?= To: Tom Lane Cc: Ashutosh Bapat , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000b9b1dc0631283851" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b9b1dc0631283851 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 3, 2025 at 4:49=E2=80=AFPM Tom Lane wrote: > Ashutosh Bapat writes: > > On Sun, Mar 2, 2025 at 5:14=E2=80=AFPM Etsuro Fujita wrote: > >> To avoid that, I would like to propose a server option, > >> inherit_read_only, to open the remote transactions in read-only mode > >> if the local transaction is read-only. > > > Why do we need a server option. Either we say that a local READ ONLY > > transaction causing modifications on the foreign server is problematic > > or it's expected. But what's the point in giving that choice to the > > user? If we deem the behaviour problematic it should be considered as > > a bug and we should fix it. Otherwise not fix it. > > I tend to agree with Ashutosh's position here. Reasoning about > issues like this is hard enough already. Having to figure out an > application's behavior under more than one setting makes it harder. > You may argue that "then the application can choose the behavior it > likes, so there's no need to figure out both behaviors". But for a > lot of bits of code, that's not the situation; rather, they have to > be prepared to work under both settings, because someone else is > in charge of what the setting is. (I don't know if either of you > recall our disastrous attempt at server-side autocommit, back around > 7.3. The reason that got reverted was exactly that there was too > much code that had to be prepared to work under either setting, > and it was too hard to make that happen. So now I look with great > suspicion at anything that complicates our transactional behavior.) > > >> I would also like to propose a server option, inherit_deferrable, to > >> open the remote transactions in deferrable mode if the local > >> transaction is deferrable. > > > The documentation about deferrable is quite confusing. It says "The > > DEFERRABLE transaction property has no effect unless the transaction > > is also SERIALIZABLE and READ ONLY." But it doesn't tell what's the > > effect of deferrable transaction. But probably we don't need a server > > option here as well. > > Yeah, same with this: we should either change it or not. Multiple > possible transactional behaviors don't do anyone any favors. I thought some users might rely on the current behavior that remote transactions can write even if the local transaction is READ ONLY, so it would be a good idea to add a server option for backwards compatibility, but I agree that such an option would cause another, more difficult problem you mentioned above. I think the current behavior is not easy to understand, causing unexpected results in a READ ONLY transaction as shown upthread, so I would like to instead propose to fix it (for HEAD only as there are no reports on this issue if I remember correctly). I think those relying on the current behavior should just re-declare their transactions as READ WRITE. Attached is an updated version of the patch, which fixes the deferrable case as well. In the patch I also fixed a bug; I trusted XactReadOnly to see if the local transaction is READ ONLY, but I noticed that that is not 100% correct, because a transaction which started as READ WRITE can show as READ ONLY later within subtransactions, so I modified the patch so that postgres_fdw opens remote transactions in READ ONLY mode if the local transaction has been declared READ ONLY at the top level. Thank you both! Best regards, Etsuro Fujita --000000000000b9b1dc0631283851 Content-Type: application/octet-stream; name="Inherit-xact-properties-in-postgres-fdw-v2.patch" Content-Disposition: attachment; filename="Inherit-xact-properties-in-postgres-fdw-v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8ocuwbz0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCA4YThkM2I0NDgxLi41MmUyNjJjYzE4IDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC04MjIsNiArODIyLDkgQEAgZG9fc3FsX2Nv bW1hbmRfZW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3FsLCBib29sIGNvbnN1bWVfaW5w dXQpCiAgKiB0aG9zZSBzY2Fucy4gIEEgZGlzYWR2YW50YWdlIGlzIHRoYXQgd2UgY2FuJ3QgcHJv dmlkZSBzYW5lIGVtdWxhdGlvbiBvZgogICogUkVBRCBDT01NSVRURUQgYmVoYXZpb3IgLS0tIGl0 IHdvdWxkIGJlIG5pY2UgaWYgd2UgaGFkIHNvbWUgb3RoZXIgd2F5IHRvCiAgKiBjb250cm9sIHdo aWNoIHJlbW90ZSBxdWVyaWVzIHNoYXJlIGEgc25hcHNob3QuCisgKgorICogTm90ZSB0aGF0IHdl IGFsd2F5cyBzdGFydCByZW1vdGUgdHJhbnNhY3Rpb25zIHdpdGggdGhlIHNhbWUgcmVhZC93cml0 ZQorICogYW5kIGRlZmVycmFibGUgcHJvcGVydGllcyBhcyB0aGUgbG9jYWwgKHRvcC1sZXZlbCkg dHJhbnNhY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkCiBiZWdpbl9yZW1vdGVfeGFjdChDb25uQ2Fj aGVFbnRyeSAqZW50cnkpCkBAIC04MzEsMTcgKzgzNCwyMyBAQCBiZWdpbl9yZW1vdGVfeGFjdChD b25uQ2FjaGVFbnRyeSAqZW50cnkpCiAJLyogU3RhcnQgbWFpbiB0cmFuc2FjdGlvbiBpZiB3ZSBo YXZlbid0IHlldCAqLwogCWlmIChlbnRyeS0+eGFjdF9kZXB0aCA8PSAwKQogCXsKLQkJY29uc3Qg Y2hhciAqc3FsOworCQlTdHJpbmdJbmZvRGF0YSBzcWw7CiAKIAkJZWxvZyhERUJVRzMsICJzdGFy dGluZyByZW1vdGUgdHJhbnNhY3Rpb24gb24gY29ubmVjdGlvbiAlcCIsCiAJCQkgZW50cnktPmNv bm4pOwogCisJCWluaXRTdHJpbmdJbmZvKCZzcWwpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZzcWwsICJTVEFSVCBUUkFOU0FDVElPTiBJU09MQVRJT04gTEVWRUwgIik7CiAJCWlmIChJc29s YXRpb25Jc1NlcmlhbGl6YWJsZSgpKQotCQkJc3FsID0gIlNUQVJUIFRSQU5TQUNUSU9OIElTT0xB VElPTiBMRVZFTCBTRVJJQUxJWkFCTEUiOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3Fs LCAiU0VSSUFMSVpBQkxFIik7CiAJCWVsc2UKLQkJCXNxbCA9ICJTVEFSVCBUUkFOU0FDVElPTiBJ U09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEIjsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJnNxbCwgIlJFUEVBVEFCTEUgUkVBRCIpOworCQlpZiAoVG9wVHJhbnNhY3Rpb25Jc1JlYWRP bmx5KCkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzcWwsICIgUkVBRCBPTkxZIik7CisJ CWlmIChYYWN0RGVmZXJyYWJsZSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnNxbCwgIiBE RUZFUlJBQkxFIik7CiAJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gdHJ1ZTsKLQkJZG9f c3FsX2NvbW1hbmQoZW50cnktPmNvbm4sIHNxbCk7CisJCWRvX3NxbF9jb21tYW5kKGVudHJ5LT5j b25uLCBzcWwuZGF0YSk7CiAJCWVudHJ5LT54YWN0X2RlcHRoID0gMTsKIAkJZW50cnktPmNoYW5n aW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKIAl9CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVz X2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhw ZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCA4NDQ3YjI4OWNiLi5iYTNiYjc2NjVhIDEwMDY0 NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0Cisr KyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTEy MjYzLDYgKzEyMjYzLDc4IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJlbW90ZV9hcHBsaWNhdGlv bl9uYW1lCiBEUk9QIEZPUkVJR04gVEFCTEUgcmVtb3RlX2FwcGxpY2F0aW9uX25hbWU7CiBEUk9Q IFZJRVcgbXlfYXBwbGljYXRpb25fbmFtZTsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIHRlc3QgcmVhZC1v bmx5IGFuZC9vciBkZWZlcnJhYmxlIHRyYW5zYWN0aW9ucworLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRF IFRBQkxFIGxvY3QgKGYxIGludCwgZjIgdGV4dCk7CitDUkVBVEUgRlVOQ1RJT04gbG9jZigpIFJF VFVSTlMgU0VUT0YgbG9jdCBMQU5HVUFHRSBTUUwgQVMKKyAgJ1VQREFURSBwdWJsaWMubG9jdCBT RVQgZjIgPSBmMiB8fCBmMiBSRVRVUk5JTkcgKic7CitDUkVBVEUgVklFVyBsb2N2IEFTIFNFTEVD VCB0LiogRlJPTSBsb2NmKCkgdDsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHJlbXQgKGYxIGludCwg ZjIgdGV4dCkKKyAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2xvY3YnKTsK K0lOU0VSVCBJTlRPIGxvY3QgVkFMVUVTICgxLCAnZm9vJyksICgyLCAnYmFyJyk7CitTRUxFQ1Qg KiBGUk9NIGxvY3Q7CisgZjEgfCBmMiAgCistLS0tKy0tLS0tCisgIDEgfCBmb28KKyAgMiB8IGJh cgorKDIgcm93cykKKworU0VMRUNUICogRlJPTSByZW10OyAgLS0gc2hvdWxkIHdvcmsKKyBmMSB8 ICAgZjIgICAKKy0tLS0rLS0tLS0tLS0KKyAgMSB8IGZvb2ZvbworICAyIHwgYmFyYmFyCisoMiBy b3dzKQorCitTRUxFQ1QgKiBGUk9NIGxvY3Q7CisgZjEgfCAgIGYyICAgCistLS0tKy0tLS0tLS0t CisgIDEgfCBmb29mb28KKyAgMiB8IGJhcmJhcgorKDIgcm93cykKKworU1RBUlQgVFJBTlNBQ1RJ T04gUkVBRCBPTkxZOworU0VMRUNUICogRlJPTSByZW10OyAgLS0gc2hvdWxkIGZhaWwKK0VSUk9S OiAgY2Fubm90IGV4ZWN1dGUgVVBEQVRFIGluIGEgcmVhZC1vbmx5IHRyYW5zYWN0aW9uCitDT05U RVhUOiAgU1FMIGZ1bmN0aW9uICJsb2NmIiBzdGF0ZW1lbnQgMQorcmVtb3RlIFNRTCBjb21tYW5k OiBTRUxFQ1QgZjEsIGYyIEZST00gcHVibGljLmxvY3YKK1JPTExCQUNLOworRFJPUCBGT1JFSUdO IFRBQkxFIHJlbXQ7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSByZW10IChmMSBpbnQsIGYyIHRleHQp CisgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdsb2N0Jyk7CitTVEFSVCBU UkFOU0FDVElPTiBJU09MQVRJT04gTEVWRUwgU0VSSUFMSVpBQkxFIFJFQUQgT05MWTsKK1NFTEVD VCAqIEZST00gcmVtdDsKKyBmMSB8ICAgZjIgICAKKy0tLS0rLS0tLS0tLS0KKyAgMSB8IGZvb2Zv bworICAyIHwgYmFyYmFyCisoMiByb3dzKQorCitDT01NSVQ7CitTVEFSVCBUUkFOU0FDVElPTiBJ U09MQVRJT04gTEVWRUwgU0VSSUFMSVpBQkxFIERFRkVSUkFCTEU7CitTRUxFQ1QgKiBGUk9NIHJl bXQ7CisgZjEgfCAgIGYyICAgCistLS0tKy0tLS0tLS0tCisgIDEgfCBmb29mb28KKyAgMiB8IGJh cmJhcgorKDIgcm93cykKKworQ09NTUlUOworU1RBUlQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExF VkVMIFNFUklBTElaQUJMRSBSRUFEIE9OTFkgREVGRVJSQUJMRTsKK1NFTEVDVCAqIEZST00gcmVt dDsKKyBmMSB8ICAgZjIgICAKKy0tLS0rLS0tLS0tLS0KKyAgMSB8IGZvb2ZvbworICAyIHwgYmFy YmFyCisoMiByb3dzKQorCitDT01NSVQ7CistLSBDbGVhbiB1cAorRFJPUCBGT1JFSUdOIFRBQkxF IHJlbXQ7CitEUk9QIFZJRVcgbG9jdjsKK0RST1AgRlVOQ1RJT04gbG9jZigpOworRFJPUCBUQUJM RSBsb2N0OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQogLS0gdGVzdCBwYXJhbGxlbCBjb21taXQgYW5kIHBhcmFs bGVsIGFib3J0CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAo QUREIHBhcmFsbGVsX2NvbW1pdCAndHJ1ZScpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z dGdyZXNfZmR3LnNxbAppbmRleCAxNTk4ZDllMDg2Li4yOTIyODE5ODFjIDEwMDY0NAotLS0gYS9j b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtNDE2NSw2ICs0MTY1LDQ4IEBAIFNF TEVDVCBjb3VudCgqKSBGUk9NIHJlbW90ZV9hcHBsaWNhdGlvbl9uYW1lCiBEUk9QIEZPUkVJR04g VEFCTEUgcmVtb3RlX2FwcGxpY2F0aW9uX25hbWU7CiBEUk9QIFZJRVcgbXlfYXBwbGljYXRpb25f bmFtZTsKIAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0gdGVzdCByZWFkLW9ubHkgYW5kL29yIGRlZmVycmFi bGUgdHJhbnNhY3Rpb25zCistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFCTEUgbG9jdCAoZjEgaW50 LCBmMiB0ZXh0KTsKK0NSRUFURSBGVU5DVElPTiBsb2NmKCkgUkVUVVJOUyBTRVRPRiBsb2N0IExB TkdVQUdFIFNRTCBBUworICAnVVBEQVRFIHB1YmxpYy5sb2N0IFNFVCBmMiA9IGYyIHx8IGYyIFJF VFVSTklORyAqJzsKK0NSRUFURSBWSUVXIGxvY3YgQVMgU0VMRUNUIHQuKiBGUk9NIGxvY2YoKSB0 OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgcmVtdCAoZjEgaW50LCBmMiB0ZXh0KQorICBTRVJWRVIg bG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnbG9jdicpOworCitJTlNFUlQgSU5UTyBsb2N0 IFZBTFVFUyAoMSwgJ2ZvbycpLCAoMiwgJ2JhcicpOworU0VMRUNUICogRlJPTSBsb2N0OworCitT RUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgd29yaworU0VMRUNUICogRlJPTSBsb2N0Owor CitTVEFSVCBUUkFOU0FDVElPTiBSRUFEIE9OTFk7CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBz aG91bGQgZmFpbAorUk9MTEJBQ0s7CisKK0RST1AgRk9SRUlHTiBUQUJMRSByZW10OworQ1JFQVRF IEZPUkVJR04gVEFCTEUgcmVtdCAoZjEgaW50LCBmMiB0ZXh0KQorICBTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAodGFibGVfbmFtZSAnbG9jdCcpOworCitTVEFSVCBUUkFOU0FDVElPTiBJU09MQVRJ T04gTEVWRUwgU0VSSUFMSVpBQkxFIFJFQUQgT05MWTsKK1NFTEVDVCAqIEZST00gcmVtdDsKK0NP TU1JVDsKKworU1RBUlQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRSBE RUZFUlJBQkxFOworU0VMRUNUICogRlJPTSByZW10OworQ09NTUlUOworCitTVEFSVCBUUkFOU0FD VElPTiBJU09MQVRJT04gTEVWRUwgU0VSSUFMSVpBQkxFIFJFQUQgT05MWSBERUZFUlJBQkxFOwor U0VMRUNUICogRlJPTSByZW10OworQ09NTUlUOworCistLSBDbGVhbiB1cAorRFJPUCBGT1JFSUdO IFRBQkxFIHJlbXQ7CitEUk9QIFZJRVcgbG9jdjsKK0RST1AgRlVOQ1RJT04gbG9jZigpOworRFJP UCBUQUJMRSBsb2N0OworCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0IHBhcmFsbGVsIGNvbW1pdCBh bmQgcGFyYWxsZWwgYWJvcnQKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9wb3N0Z3Jlcy1mZHcuc2dtbCBiL2RvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcuc2dtbAppbmRl eCBkMjk5OGMxM2Q1Li4xM2QxOTQ0YWI1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcG9zdGdy ZXMtZmR3LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCkBAIC0xMDcx LDYgKzEwNzEsMjIgQEAgcG9zdGdyZXM9IyBTRUxFQ1QgcG9zdGdyZXNfZmR3X2Rpc2Nvbm5lY3Rf YWxsKCk7CiAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHJlbGVhc2Ug bWlnaHQgbW9kaWZ5IHRoZXNlIHJ1bGVzLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBUaGUg cmVtb3RlIHRyYW5zYWN0aW9uIGlzIG9wZW5lZCBpbiB0aGUgc2FtZSByZWFkL3dyaXRlIG1vZGUg YXMgdGhlIGxvY2FsCisgICB0cmFuc2FjdGlvbjogaWYgdGhlIGxvY2FsIHRyYW5zYWN0aW9uIGhh cyBiZWVuIGRlY2xhcmVkCisgICA8bGl0ZXJhbD5SRUFEIE9OTFk8L2xpdGVyYWw+IGF0IHRoZSB0 b3AgbGV2ZWwsIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24gaXMKKyAgIG9wZW5lZCBpbiA8bGl0ZXJh bD5SRUFEIE9OTFk8L2xpdGVyYWw+IG1vZGUsIG90aGVyd2lzZSBpdCBpcyBvcGVuZWQgaW4KKyAg IDxsaXRlcmFsPlJFQUQgV1JJVEU8L2xpdGVyYWw+IG1vZGUuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFRoZSByZW1vdGUgdHJhbnNhY3Rpb24gaXMgYWxzbyBvcGVuZWQgaW4gdGhlIHNhbWUg ZGVmZXJyYWJsZSBtb2RlIGFzIHRoZQorICAgbG9jYWwgdHJhbnNhY3Rpb246IGlmIHRoZSBsb2Nh bCB0cmFuc2FjdGlvbiBoYXMgYmVlbiBkZWNsYXJlZAorICAgPGxpdGVyYWw+REVGRVJSQUJMRTwv bGl0ZXJhbD4gYXQgdGhlIHRvcCBsZXZlbCwgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbiBpcworICAg b3BlbmVkIGluIDxsaXRlcmFsPkRFRkVSUkFCTEU8L2xpdGVyYWw+IG1vZGUsIG90aGVyd2lzZSBp dCBpcyBvcGVuZWQgaW4KKyAgIDxsaXRlcmFsPk5PVCBERUZFUlJBQkxFPC9saXRlcmFsPiBtb2Rl LgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMgY3VycmVudGx5IG5v dCBzdXBwb3J0ZWQgYnkKICAgIDxmaWxlbmFtZT5wb3N0Z3Jlc19mZHc8L2ZpbGVuYW1lPiB0byBw cmVwYXJlIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24gZm9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0 LmMKaW5kZXggMWI0ZjIxYTg4ZC4uM2U3OTkyMmM4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hh Y3QuYwpAQCAtMTA0Myw2ICsxMDQzLDI3IEBAIFRyYW5zYWN0aW9uU3RhcnRlZER1cmluZ1JlY292 ZXJ5KHZvaWQpCiAJcmV0dXJuIEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlLT5zdGFydGVkSW5SZWNv dmVyeTsKIH0KIAorLyoKKyAqCVRvcFRyYW5zYWN0aW9uSXNSZWFkT25seQorICoKKyAqIFJldHVy bnMgdHJ1ZSBpZiB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gZGVjbGFyZWQgUkVBRCBPTkxZIGF0 IHRoZSB0b3AKKyAqIGxldmVsLgorICovCitib29sCitUb3BUcmFuc2FjdGlvbklzUmVhZE9ubHko dm9pZCkKK3sKKwlUcmFuc2FjdGlvblN0YXRlIHMgPSBDdXJyZW50VHJhbnNhY3Rpb25TdGF0ZTsK KworCWlmIChzLT5uZXN0aW5nTGV2ZWwgPT0gMSkKKwkJcmV0dXJuIFhhY3RSZWFkT25seTsKKwl3 aGlsZSAocy0+bmVzdGluZ0xldmVsID4gMikKKwl7CisJCUFzc2VydChzLT5wYXJlbnQgIT0gTlVM TCk7CisJCXMgPSBzLT5wYXJlbnQ7CisJfQorCXJldHVybiBzLT5wcmV2WGFjdFJlYWRPbmx5Owor fQorCiAvKgogICoJRW50ZXJQYXJhbGxlbE1vZGUKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmgKaW5kZXggYjJiYzEw ZWUwNC4uMDE2MGViMWQ5MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3QuaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCkBAIC00NTgsNiArNDU4LDcgQEAgZXh0ZXJu IFRpbWVzdGFtcFR6IEdldEN1cnJlbnRUcmFuc2FjdGlvblN0b3BUaW1lc3RhbXAodm9pZCk7CiBl eHRlcm4gdm9pZCBTZXRDdXJyZW50U3RhdGVtZW50U3RhcnRUaW1lc3RhbXAodm9pZCk7CiBleHRl cm4gaW50CUdldEN1cnJlbnRUcmFuc2FjdGlvbk5lc3RMZXZlbCh2b2lkKTsKIGV4dGVybiBib29s IFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKFRyYW5zYWN0aW9uSWQgeGlkKTsK K2V4dGVybiBib29sIFRvcFRyYW5zYWN0aW9uSXNSZWFkT25seSh2b2lkKTsKIGV4dGVybiB2b2lk IENvbW1hbmRDb3VudGVySW5jcmVtZW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgRm9yY2VTeW5jQ29t bWl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQodm9pZCk7Cg== --000000000000b9b1dc0631283851--