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 1tjwAo-00EvaV-I5 for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Feb 2025 08:08:14 +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 1tjwAm-00EHZg-JD for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Feb 2025 08:08:12 +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 1tjwAm-00EHZY-0T for pgsql-hackers@lists.postgresql.org; Mon, 17 Feb 2025 08:08:12 +0000 Received: from forward501a.mail.yandex.net ([178.154.239.81]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tjwAh-001GiJ-32 for pgsql-hackers@lists.postgresql.org; Mon, 17 Feb 2025 08:08:11 +0000 Received: from mail-nwsmtp-smtp-production-main-39.vla.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-39.vla.yp-c.yandex.net [IPv6:2a02:6b8:c15:290e:0:640:bc0:0]) by forward501a.mail.yandex.net (Yandex) with ESMTPS id B250B61316; Mon, 17 Feb 2025 11:08:01 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-39.vla.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id s7PYQviOh8c0-YLRLFZXW; Mon, 17 Feb 2025 11:07:59 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tantorlabs.com; s=mail; t=1739779681; bh=yF61W6dX+T9ljZ5eDnSvrqwz/EvMKQ+2q4nwlrubbGg=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=FCCJ9yKunUDNGifYdkznaS2uu/7goY8lD0McbeKNYUUa/Q95u3FgBioomPgM7bQEF jzPy25/kXU2ZwRCtdc76299HZwFyzy8J2hkzLgxpKz3xr5/6oz2rJp2O1oNzbwCYn9 gK/0HpoVvT0PvOR2M4lk2lYmwERMvpRuwn8YYJFE= Authentication-Results: mail-nwsmtp-smtp-production-main-39.vla.yp-c.yandex.net; dkim=pass header.i=@tantorlabs.com Content-Type: multipart/mixed; boundary="------------JSYDzoiBtR0OayS5afTmCzRw" Message-ID: <01ec86c1-e04b-4cbe-b641-22cae8b87604@tantorlabs.com> Date: Mon, 17 Feb 2025 11:07:54 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: explain analyze rows=%.0f To: Andrei Lepikhov , Robert Haas Cc: pgsql-hackers@lists.postgresql.org, Tom Lane , Matheus Alcantara , Guillaume Lelarge , Daniel Gustafsson , Ibrar Ahmed , "Gregory Stark (as CFM)" , Amit Kapila , Justin Pryzby , Peter Geoghegan , vignesh C , "David G. Johnston" , Alena Rybakina References: <55695d15-c738-4401-8883-58bc855c9b03@tantorlabs.com> <58bb3a5b-c92a-408c-b02a-f47aedc1c0e2@tantorlabs.com> <70bc1af0-6910-4f71-84ba-fa02095fe9ba@tantorlabs.com> <3212947.1739306803@sss.pgh.pa.us> <3365160.1739385615@sss.pgh.pa.us> <0e4c813a-18eb-41e2-8edb-89b78d43c82d@gmail.com> Content-Language: en-US From: Ilia Evdokimov In-Reply-To: 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. --------------JSYDzoiBtR0OayS5afTmCzRw Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 15.02.2025 11:46, Andrei Lepikhov wrote: > On 13/2/2025 21:42, Robert Haas wrote: >> On Thu, Feb 13, 2025 at 4:05 AM Ilia Evdokimov >> wrote: >>> 1. Documentation >>> (v9-0001-Clarify-display-of-rows-as-decimal-fractions-DOC.patch) >>> >>> One thing that bothers me is that the documentation explains how to >>> compute total time, but it does not clarify how to compute total >>> rows. Maybe this was obvious to others before, but now that we are >>> displaying rows as a fraction, we should explicitly document how to >>> interpret it alongside total time. >>> >>> I believe it would be helpful to show a non-integer rows value in an >>> example query. However, to achieve this, we need the index scan >>> results to vary across iterations. One way to accomplish this is by >>> using the condition t1.unique2 > t2.unique2. Additionally, I suggest >>> making loops a round number (e.g., 100) for better readability, >>> which can be achieved using t1.thousand < 10. The final query would >>> look like this: >>> >>> EXPLAIN ANALYZE SELECT * >>> FROM tenk1 t1, tenk2 t2 >>> WHERE t1.thousand < 10 AND t1.unique2 > t2.unique2; >>> >>> I believe this is an ideal example for the documentation because it >>> not only demonstrates fractional rows, but also keeps the execution >>> plan nearly unchanged. While the estimated and actual average row >>> counts become slightly rounded, I don't see another way to ensure >>> different results for each index scan. >> >> Anyone else have an opinion on this? I see Ilia's point, but a >> non-equality join is probably an atypical case. > For me, it is ok: it demonstrates the feature and may legally happen. > But this patch should be the second one, isn't it? I didn't want to introduce a new table instead of tenk1 and tenk2, as the entire page already uses them. Moreover, if we use = in the join condition, the number of rows will always be the same. So, I couldn't find a better option than t1.unique > t2.unique. Regarding the order of the patches, I made this one first because, as Tom mentioned earlier, we need to finalize the documentation first. However, in order to check tests in CirrusCI, it should be really the second. >> >>> 2. Code and tests >>> (v9-0002-Clarify-display-of-rows-as-decimal-fractions.patch) >>> >>> I left the code and tests unchanged since we agreed on a fixed >>> format of two decimal places. >> >> This still has the HAS_DECIMAL() thing to which I objected. > I don't understand why using math.h and the floor() routine is > necessary. I personally prefer x%y!=0 expression. > You're right—floor shouldn't be used since it behaves differently across platforms, as Tom also pointed out earlier. I like the idea of using %, but since the compiler doesn't allow this operation with double, we need to cast it to int64. I checked how nloops and ntuples are modified - they are only incremented by 1. So that the casting might be safe. If I missed anything or if there's a reason why this casting wouldn't be safe, please let me know. -- Best regards, Ilia Evdokimov, Tantor Labs LLC. --------------JSYDzoiBtR0OayS5afTmCzRw Content-Type: text/x-patch; charset=UTF-8; name="v10-0002-Clarify-display-of-rows-as-decimal-fractions-DOC.patch" Content-Disposition: attachment; filename*0="v10-0002-Clarify-display-of-rows-as-decimal-fractions-DOC.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjMTQ5NGY4ODE1YjBlNjk0NzlkMTllNzRlMTA5NzBhNTRjOGU2ZGU2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogTW9uLCAxNyBGZWIgMjAyNSAxMTowMjozMyArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjEwIDIvMl0gQ2xhcmlmeSBkaXNwbGF5IG9mIHJvd3MgYXMgZGVj aW1hbCBmcmFjdGlvbnMKCldoZW4gbG9vcHMgPiAxLCB0aGUgYXZlcmFnZSByb3dzIHZhbHVl IGlzIG5vdyBkaXNwbGF5ZWQgYXMgYSBkZWNpbWFsIGZyYWN0aW9uCndpdGggdHdvIGRpZ2l0 cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBpbiBFWFBMQUlOIEFOQUxZWkUuCgpQcmV2aW91 c2x5LCB0aGUgYXZlcmFnZSByb3dzIHZhbHVlIHdhcyBhbHdheXMgcm91bmRlZCB0byBhbiBp bnRlZ2VyLAp3aGljaCBjb3VsZCBsZWFkIHRvIG1pc2xlYWRpbmcgcmVzdWx0cyB3aGVuIGVz dGltYXRpbmcgdG90YWwgcm93cwpieSBtdWx0aXBseWluZyByb3dzIGJ5IGxvb3AuIFRoaXMg Y2hhbmdlIGVuc3VyZXMgdGhhdCB1c2VycwpnZXQgYSBtb3JlIGFjY3VyYXRlIHJlcHJlc2Vu dGF0aW9uIG9mIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBleGVjdXRpb24gbm9kZXMuCi0tLQog ZG9jL3NyYy9zZ21sL3BlcmZvcm0uc2dtbCB8IDM5ICsrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDE5 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZXJmb3JtLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcGVyZm9ybS5zZ21sCmluZGV4IGE1MDJhMmFhYmEuLjU4OGVlNmQ1 YWEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wZXJmb3JtLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3BlcmZvcm0uc2dtbApAQCAtNzE3LDI2ICs3MTcsMjYgQEAgRlJPTSB0ZW5rMSB0 MSBXSEVSRSB0MS50ZW4gPSAoU0VMRUNUIChyYW5kb20oKSAqIDEwKTo6aW50ZWdlcik7CiA8 c2NyZWVuPgogRVhQTEFJTiBBTkFMWVpFIFNFTEVDVCAqCiBGUk9NIHRlbmsxIHQxLCB0ZW5r MiB0MgotV0hFUkUgdDEudW5pcXVlMSAmbHQ7IDEwIEFORCB0MS51bmlxdWUyID0gdDIudW5p cXVlMjsKK1dIRVJFIHQxLnRob3VzYW5kICZsdDsgMTAgQU5EIHQxLnVuaXF1ZTIgJmd0OyB0 Mi51bmlxdWUyOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mendzcDstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIE5lc3RlZCBMb29wICAoY29zdD00LjY1Li4xMTguNTAgcm93cz0xMCB3aWR0aD00 ODgpIChhY3R1YWwgdGltZT0wLjAxNy4uMC4wNTEgcm93cz0xMCBsb29wcz0xKQotICAgQnVm ZmVyczogc2hhcmVkIGhpdD0zNiByZWFkPTYKLSAgIC0mZ3Q7ICBCaXRtYXAgSGVhcCBTY2Fu IG9uIHRlbmsxIHQxICAoY29zdD00LjM2Li4zOS4zOCByb3dzPTEwIHdpZHRoPTI0NCkgKGFj dHVhbCB0aW1lPTAuMDA5Li4wLjAxNyByb3dzPTEwIGxvb3BzPTEpCi0gICAgICAgICBSZWNo ZWNrIENvbmQ6ICh1bmlxdWUxICZsdDsgMTApCi0gICAgICAgICBIZWFwIEJsb2NrczogZXhh Y3Q9MTAKLSAgICAgICAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MyByZWFkPTUgd3JpdHRlbj00 Ci0gICAgICAgICAtJmd0OyAgQml0bWFwIEluZGV4IFNjYW4gb24gdGVuazFfdW5pcXVlMSAg KGNvc3Q9MC4wMC4uNC4zNiByb3dzPTEwIHdpZHRoPTApIChhY3R1YWwgdGltZT0wLjAwNC4u MC4wMDQgcm93cz0xMCBsb29wcz0xKQotICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKHVu aXF1ZTEgJmx0OyAxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSZ6 d3NwOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCAgKGNvc3Q9NS40MC4uMTE1 NzEuNDQgcm93cz0zNTY2Njcgd2lkdGg9NDg4KSAoYWN0dWFsIHRpbWU9MC4wNDIuLjExNy4y MDUgcm93cz01MTM4MzIgbG9vcHM9MSkKKyAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MTkzNzcg cmVhZD0yOQorICAgLSZndDsgIEJpdG1hcCBIZWFwIFNjYW4gb24gdGVuazEgdDEgIChjb3N0 PTUuMTEuLjIzMy42MCByb3dzPTEwNyB3aWR0aD0yNDQpIChhY3R1YWwgdGltZT0wLjAyMS4u MC4xMDMgcm93cz0xMDAgbG9vcHM9MSkKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKHRob3Vz YW5kICZsdDsgMTApCisgICAgICAgICBIZWFwIEJsb2NrczogZXhhY3Q9OTAKKyAgICAgICAg IEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9OTIKKyAgICAgICAgIC0mZ3Q7ICBCaXRtYXAgSW5kZXgg U2NhbiBvbiB0ZW5rMV90aG91c190ZW50aG91cyAgKGNvc3Q9MC4wMC4uNS4wOSByb3dzPTEw NyB3aWR0aD0wKSAoYWN0dWFsIHRpbWU9MC4wMTAuLjAuMDEwIHJvd3M9MTAwIGxvb3BzPTEp CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAodGhvdXNhbmQgJmx0OyAxMCkKICAgICAg ICAgICAgICAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MgotICAgLSZndDsgIEluZGV4IFNjYW4g dXNpbmcgdGVuazJfdW5pcXVlMiBvbiB0ZW5rMiB0MiAgKGNvc3Q9MC4yOS4uNy45MCByb3dz PTEgd2lkdGg9MjQ0KSAoYWN0dWFsIHRpbWU9MC4wMDMuLjAuMDAzIHJvd3M9MSBsb29wcz0x MCkKLSAgICAgICAgIEluZGV4IENvbmQ6ICh1bmlxdWUyID0gdDEudW5pcXVlMikKLSAgICAg ICAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MjQgcmVhZD02CisgICAtJmd0OyAgSW5kZXggU2Nh biB1c2luZyB0ZW5rMl91bmlxdWUyIG9uIHRlbmsyIHQyICAoY29zdD0wLjI5Li43Mi42MyBy b3dzPTMzMzMgd2lkdGg9MjQ0KSAoYWN0dWFsIHRpbWU9MC4wMDYuLjAuNDEwIHJvd3M9NTEz OC4zMiBsb29wcz0xMDApCisgICAgICAgICBJbmRleCBDb25kOiAodW5pcXVlMiAmbHQ7IHQx LnVuaXF1ZTIpCisgICAgICAgICBCdWZmZXJzOiBzaGFyZWQgaGl0PTE5Mjg1IHJlYWQ9MjkK ICBQbGFubmluZzoKLSAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MTUgZGlydGllZD05Ci0gUGxh bm5pbmcgVGltZTogMC40ODUgbXMKLSBFeGVjdXRpb24gVGltZTogMC4wNzMgbXMKKyAgIEJ1 ZmZlcnM6IHNoYXJlZCBoaXQ9MjU4IHJlYWQ9OSBkaXJ0aWVkPTIKKyBQbGFubmluZyBUaW1l OiAwLjUxOSBtcworIEV4ZWN1dGlvbiBUaW1lOiAxMzEuMzc4IG1zCiA8L3NjcmVlbj4KIAog ICAgIE5vdGUgdGhhdCB0aGUgPHF1b3RlPmFjdHVhbCB0aW1lPC9xdW90ZT4gdmFsdWVzIGFy ZSBpbiBtaWxsaXNlY29uZHMgb2YKQEAgLTc1Niw4ICs3NTYsOSBAQCBXSEVSRSB0MS51bmlx dWUxICZsdDsgMTAgQU5EIHQxLnVuaXF1ZTIgPSB0Mi51bmlxdWUyOwogICAgIHZhbHVlcyBz aG93biBhcmUgYXZlcmFnZXMgcGVyLWV4ZWN1dGlvbi4gIFRoaXMgaXMgZG9uZSB0byBtYWtl IHRoZSBudW1iZXJzCiAgICAgY29tcGFyYWJsZSB3aXRoIHRoZSB3YXkgdGhhdCB0aGUgY29z dCBlc3RpbWF0ZXMgYXJlIHNob3duLiAgTXVsdGlwbHkgYnkKICAgICB0aGUgPGxpdGVyYWw+ bG9vcHM8L2xpdGVyYWw+IHZhbHVlIHRvIGdldCB0aGUgdG90YWwgdGltZSBhY3R1YWxseSBz cGVudCBpbgotICAgIHRoZSBub2RlLiAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHdlIHNwZW50 IGEgdG90YWwgb2YgMC4wMzAgbWlsbGlzZWNvbmRzCi0gICAgZXhlY3V0aW5nIHRoZSBpbmRl eCBzY2FucyBvbiA8bGl0ZXJhbD50ZW5rMjwvbGl0ZXJhbD4uCisgICAgdGhlIG5vZGUsIGFu ZCB0byBnZXQgdGhlIHRvdGFsIHJvd3MgcHJvY2Vzc2VkIGluIHRoZSBub2RlLiBJbiB0aGUg YWJvdmUgZXhhbXBsZSwKKyAgICB3ZSBzcGVudCBhIHRvdGFsIG9mIDQxIG1pbGxpc2Vjb25k cyBleGVjdXRpbmcgdGhlIGluZGV4IHNjYW5zLAorICAgIGFuZCB0aGUgbm9kZSBwcm9jZXNz ZWQgYSB0b3RhbCBvZiA1MTM4MzIgcm93cyBvbiA8bGl0ZXJhbD50ZW5rMjwvbGl0ZXJhbD4u CiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgotLSAKMi4zNC4xCgo= --------------JSYDzoiBtR0OayS5afTmCzRw Content-Type: text/x-patch; charset=UTF-8; name="v10-0001-Clarify-display-of-rows-as-decimal-fractions.patch" Content-Disposition: attachment; filename*0="v10-0001-Clarify-display-of-rows-as-decimal-fractions.patch" Content-Transfer-Encoding: base64 RnJvbSAwYmE3MDY5NTM0YWZjZjU0Y2QzOWZjNGJjMjFhYTQ0ZDViZjNlMzQzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJbGlhIEV2ZG9raW1vdiA8aWx5YS5ldmRva2ltb3ZA dGFudG9ybGFicy5ydT4KRGF0ZTogTW9uLCAxNyBGZWIgMjAyNSAxMDo1OTo1MCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjEwIDEvMl0gQ2xhcmlmeSBkaXNwbGF5IG9mIHJvd3MgYXMgZGVj aW1hbCBmcmFjdGlvbnMKCldoZW4gbG9vcHMgPiAxLCB0aGUgYXZlcmFnZSByb3dzIHZhbHVl IGlzIG5vdyBkaXNwbGF5ZWQgYXMgYSBkZWNpbWFsIGZyYWN0aW9uCndpdGggdHdvIGRpZ2l0 cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBpbiBFWFBMQUlOIEFOQUxZWkUuCgpQcmV2aW91 c2x5LCB0aGUgYXZlcmFnZSByb3dzIHZhbHVlIHdhcyBhbHdheXMgcm91bmRlZCB0byBhbiBp bnRlZ2VyLAp3aGljaCBjb3VsZCBsZWFkIHRvIG1pc2xlYWRpbmcgcmVzdWx0cyB3aGVuIGVz dGltYXRpbmcgdG90YWwgcm93cwpieSBtdWx0aXBseWluZyByb3dzIGJ5IGxvb3AuIFRoaXMg Y2hhbmdlIGVuc3VyZXMgdGhhdCB1c2VycwpnZXQgYSBtb3JlIGFjY3VyYXRlIHJlcHJlc2Vu dGF0aW9uIG9mIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCBleGVjdXRpb24gbm9kZXMuCi0tLQog c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jICAgICAgICAgICAgICAgIHwgNTQgKysr KysrKysrKysrKy0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25f cHJ1bmUub3V0IHwgMTggKysrLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9u X3BydW5lLnNxbCAgICAgIHwgIDIgKy0KIDMgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9u cygrKSwgMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGRj NGJlZjlhYjguLjUwYjNiMjI0YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTE5 NzgsMTcgKzE5NzgsMjAgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExp c3QgKmFuY2VzdG9ycywKIAkJZG91YmxlCQlzdGFydHVwX21zID0gMTAwMC4wICogcGxhbnN0 YXRlLT5pbnN0cnVtZW50LT5zdGFydHVwIC8gbmxvb3BzOwogCQlkb3VibGUJCXRvdGFsX21z ID0gMTAwMC4wICogcGxhbnN0YXRlLT5pbnN0cnVtZW50LT50b3RhbCAvIG5sb29wczsKIAkJ ZG91YmxlCQlyb3dzID0gcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzIC8gbmxvb3Bz OworCQlib29sCQlyb3dzX2lzX2ZyYWN0b25hbCA9IChpbnQ2NClwbGFuc3RhdGUtPmluc3Ry dW1lbnQtPm50dXBsZXMgJQorCQkJCQkJCQkJCShpbnQ2NClubG9vcHM7CiAKIAkJaWYgKGVz LT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKIAkJeworCQkJYXBwZW5kU3RyaW5n SW5mbyhlcy0+c3RyLCAiIChhY3R1YWwgIik7CisKIAkJCWlmIChlcy0+dGltaW5nKQotCQkJ CWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKLQkJCQkJCQkJICIgKGFjdHVhbCB0aW1lPSUu M2YuLiUuM2Ygcm93cz0lLjBmIGxvb3BzPSUuMGYpIiwKLQkJCQkJCQkJIHN0YXJ0dXBfbXMs IHRvdGFsX21zLCByb3dzLCBubG9vcHMpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0 ciwgInRpbWU9JS4zZi4uJS4zZiAiLCBzdGFydHVwX21zLCB0b3RhbF9tcyk7CisKKwkJCWlm IChubG9vcHMgPiAxICYmIHJvd3NfaXNfZnJhY3RvbmFsKQorCQkJCWFwcGVuZFN0cmluZ0lu Zm8oZXMtPnN0ciwgInJvd3M9JS4yZiBsb29wcz0lLjBmKSIsIHJvd3MsIG5sb29wcyk7CiAJ CQllbHNlCi0JCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLAotCQkJCQkJCQkgIiAoYWN0 dWFsIHJvd3M9JS4wZiBsb29wcz0lLjBmKSIsCi0JCQkJCQkJCSByb3dzLCBubG9vcHMpOwor CQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgInJvd3M9JS4wZiBsb29wcz0lLjBmKSIs IHJvd3MsIG5sb29wcyk7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC0xOTk5LDggKzIwMDIsMTYg QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFRvdGFsIFRpbWUiLCAibXMiLCB0 b3RhbF9tcywKIAkJCQkJCQkJCSAzLCBlcyk7CiAJCQl9Ci0JCQlFeHBsYWluUHJvcGVydHlG bG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAwLCBlcyk7Ci0JCQlFeHBsYWluUHJv cGVydHlGbG9hdCgiQWN0dWFsIExvb3BzIiwgTlVMTCwgbmxvb3BzLCAwLCBlcyk7CisJCQlp ZiAobmxvb3BzID4gMSAmJiByb3dzX2lzX2ZyYWN0b25hbCkKKwkJCXsKKwkJCQlFeHBsYWlu UHJvcGVydHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAyLCBlcyk7CisJCQkJ RXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBMb29wcyIsIE5VTEwsIG5sb29wcywgMCwg ZXMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJB Y3R1YWwgUm93cyIsIE5VTEwsIHJvd3MsIDAsIGVzKTsKKwkJCQlFeHBsYWluUHJvcGVydHlG bG9hdCgiQWN0dWFsIExvb3BzIiwgTlVMTCwgbmxvb3BzLCAwLCBlcyk7CisJCQl9CiAJCX0K IAl9CiAJZWxzZSBpZiAoZXMtPmFuYWx5emUpCkBAIC0yMDQwLDI2ICsyMDUxLDI4IEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlk b3VibGUJCXN0YXJ0dXBfbXM7CiAJCQlkb3VibGUJCXRvdGFsX21zOwogCQkJZG91YmxlCQly b3dzOworCQkJYm9vbAkJcm93c19pc19mcmFjdG9uYWw7CiAKIAkJCWlmIChubG9vcHMgPD0g MCkKIAkJCQljb250aW51ZTsKIAkJCXN0YXJ0dXBfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50 LT5zdGFydHVwIC8gbmxvb3BzOwogCQkJdG90YWxfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50 LT50b3RhbCAvIG5sb29wczsKIAkJCXJvd3MgPSBpbnN0cnVtZW50LT5udHVwbGVzIC8gbmxv b3BzOworCQkJcm93c19pc19mcmFjdG9uYWwgPSAoaW50NjQpaW5zdHJ1bWVudC0+bnR1cGxl cyAlIChpbnQ2NClubG9vcHM7CiAKIAkJCUV4cGxhaW5PcGVuV29ya2VyKG4sIGVzKTsKIAog CQkJaWYgKGVzLT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKIAkJCXsKIAkJCQlF eHBsYWluSW5kZW50VGV4dChlcyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLCAi YWN0dWFsICIpOwogCQkJCWlmIChlcy0+dGltaW5nKQotCQkJCQlhcHBlbmRTdHJpbmdJbmZv KGVzLT5zdHIsCi0JCQkJCQkJCQkgImFjdHVhbCB0aW1lPSUuM2YuLiUuM2Ygcm93cz0lLjBm IGxvb3BzPSUuMGZcbiIsCi0JCQkJCQkJCQkgc3RhcnR1cF9tcywgdG90YWxfbXMsIHJvd3Ms IG5sb29wcyk7CisJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgInRpbWU9JS4zZi4u JS4zZiIsIHN0YXJ0dXBfbXMsIHRvdGFsX21zKTsKKworCQkJCWlmIChubG9vcHMgPiAxICYm IHJvd3NfaXNfZnJhY3RvbmFsKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5zdHIsICJy b3dzPSUuMmYgbG9vcHM9JS4wZlxuIiwgcm93cywgbmxvb3BzKTsKIAkJCQllbHNlCi0JCQkJ CWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKLQkJCQkJCQkJCSAiYWN0dWFsIHJvd3M9JS4w ZiBsb29wcz0lLjBmXG4iLAotCQkJCQkJCQkJIHJvd3MsIG5sb29wcyk7CisJCQkJCWFwcGVu ZFN0cmluZ0luZm8oZXMtPnN0ciwgInJvd3M9JS4wZiBsb29wcz0lLjBmXG4iLCByb3dzLCBu bG9vcHMpOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtMjA3MCw4ICsyMDgzLDE3IEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJ CUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgVG90YWwgVGltZSIsICJtcyIsCiAJCQkJ CQkJCQkJIHRvdGFsX21zLCAzLCBlcyk7CiAJCQkJfQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZs b2F0KCJBY3R1YWwgUm93cyIsIE5VTEwsIHJvd3MsIDAsIGVzKTsKLQkJCQlFeHBsYWluUHJv cGVydHlGbG9hdCgiQWN0dWFsIExvb3BzIiwgTlVMTCwgbmxvb3BzLCAwLCBlcyk7CisKKwkJ CQlpZiAobmxvb3BzID4gMSAmJiByb3dzX2lzX2ZyYWN0b25hbCkKKwkJCQl7CisJCQkJCUV4 cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgUm93cyIsIE5VTEwsIHJvd3MsIDIsIGVzKTsK KwkJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBMb29wcyIsIE5VTEwsIG5sb29w cywgMCwgZXMpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlFeHBsYWluUHJvcGVy dHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAwLCBlcyk7CisJCQkJCUV4cGxh aW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgTG9vcHMiLCBOVUxMLCBubG9vcHMsIDAsIGVzKTsK KwkJCQl9CiAJCQl9CiAKIAkJCUV4cGxhaW5DbG9zZVdvcmtlcihuLCBlcyk7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQKaW5kZXggNmY4 MGI2MmEzYi4uMWU5Y2VlZTU5MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcGFydGl0aW9uX3BydW5lLm91dApAQCAtMjM2Nyw3ICsyMzY3LDcgQEAgYmVnaW4KICAg ICAgICAgICAgICQxKQogICAgIGxvb3AKICAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2Uo bG4sICdXb3JrZXJzIExhdW5jaGVkOiBcZCsnLCAnV29ya2VycyBMYXVuY2hlZDogTicpOwot ICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ2FjdHVhbCByb3dzPVxkKyBsb29w cz1cZCsnLCAnYWN0dWFsIHJvd3M9TiBsb29wcz1OJyk7CisgICAgICAgIGxuIDo9IHJlZ2V4 cF9yZXBsYWNlKGxuLCAnYWN0dWFsIHJvd3M9XGQrKD86XC5cZCspPyBsb29wcz1cZCsnLCAn YWN0dWFsIHJvd3M9TiBsb29wcz1OJyk7CiAgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNl KGxuLCAnUm93cyBSZW1vdmVkIGJ5IEZpbHRlcjogXGQrJywgJ1Jvd3MgUmVtb3ZlZCBieSBG aWx0ZXI6IE4nKTsKICAgICAgICAgcmV0dXJuIG5leHQgbG47CiAgICAgZW5kIGxvb3A7CkBA IC0zMDQ5LDE0ICszMDQ5LDE0IEBAIG9yZGVyIGJ5IHRibDEuY29sMSwgdHBydC5jb2wxOwog aW5zZXJ0IGludG8gdGJsMSB2YWx1ZXMgKDEwMDEpLCAoMTAxMCksICgxMDExKTsKIGV4cGxh aW4gKGFuYWx5emUsIGNvc3RzIG9mZiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYsIGJ1ZmZl cnMgb2ZmKQogc2VsZWN0ICogZnJvbSB0YmwxIGlubmVyIGpvaW4gdHBydCBvbiB0YmwxLmNv bDEgPiB0cHJ0LmNvbDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogIE5lc3RlZCBMb29wIChhY3R1YWwgcm93cz0yMyBsb29wcz0xKQogICAgLT4gIFNlcSBT Y2FuIG9uIHRibDEgKGFjdHVhbCByb3dzPTUgbG9vcHM9MSkKLSAgIC0+ICBBcHBlbmQgKGFj dHVhbCByb3dzPTUgbG9vcHM9NSkKKyAgIC0+ICBBcHBlbmQgKGFjdHVhbCByb3dzPTQuNjAg bG9vcHM9NSkKICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHRwcnQxX2lkeCBvbiB0 cHJ0XzEgKGFjdHVhbCByb3dzPTIgbG9vcHM9NSkKICAgICAgICAgICAgICAgIEluZGV4IENv bmQ6IChjb2wxIDwgdGJsMS5jb2wxKQotICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg dHBydDJfaWR4IG9uIHRwcnRfMiAoYWN0dWFsIHJvd3M9MyBsb29wcz00KQorICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgdHBydDJfaWR4IG9uIHRwcnRfMiAoYWN0dWFsIHJvd3M9 Mi43NSBsb29wcz00KQogICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGNvbDEgPCB0Ymwx LmNvbDEpCiAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0cHJ0M19pZHggb24gdHBy dF8zIChhY3R1YWwgcm93cz0xIGxvb3BzPTIpCiAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoY29sMSA8IHRibDEuY29sMSkKQEAgLTMwNzAsMTYgKzMwNzAsMTYgQEAgc2VsZWN0ICog ZnJvbSB0YmwxIGlubmVyIGpvaW4gdHBydCBvbiB0YmwxLmNvbDEgPiB0cHJ0LmNvbDE7CiAK IGV4cGxhaW4gKGFuYWx5emUsIGNvc3RzIG9mZiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYs IGJ1ZmZlcnMgb2ZmKQogc2VsZWN0ICogZnJvbSB0YmwxIGlubmVyIGpvaW4gdHBydCBvbiB0 YmwxLmNvbDEgPSB0cHJ0LmNvbDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogIE5lc3RlZCBMb29wIChhY3R1YWwgcm93cz0zIGxvb3BzPTEpCiAgICAtPiAg U2VxIFNjYW4gb24gdGJsMSAoYWN0dWFsIHJvd3M9NSBsb29wcz0xKQotICAgLT4gIEFwcGVu ZCAoYWN0dWFsIHJvd3M9MSBsb29wcz01KQorICAgLT4gIEFwcGVuZCAoYWN0dWFsIHJvd3M9 MC42MCBsb29wcz01KQogICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdHBydDFfaWR4 IG9uIHRwcnRfMSAobmV2ZXIgZXhlY3V0ZWQpCiAgICAgICAgICAgICAgICBJbmRleCBDb25k OiAoY29sMSA9IHRibDEuY29sMSkKICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHRw cnQyX2lkeCBvbiB0cHJ0XzIgKGFjdHVhbCByb3dzPTEgbG9vcHM9MikKICAgICAgICAgICAg ICAgIEluZGV4IENvbmQ6IChjb2wxID0gdGJsMS5jb2wxKQotICAgICAgICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgdHBydDNfaWR4IG9uIHRwcnRfMyAoYWN0dWFsIHJvd3M9MCBsb29wcz0z KQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdHBydDNfaWR4IG9uIHRwcnRfMyAo YWN0dWFsIHJvd3M9MC4zMyBsb29wcz0zKQogICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGNvbDEgPSB0YmwxLmNvbDEpCiAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyB0cHJ0 NF9pZHggb24gdHBydF80IChuZXZlciBleGVjdXRlZCkKICAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChjb2wxID0gdGJsMS5jb2wxKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRp dGlvbl9wcnVuZS5zcWwKaW5kZXggODY2MjFkY2VjMC4uNmFhZDAyMTU2YyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5lLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCkBAIC01ODYsNyArNTg2LDcg QEAgYmVnaW4KICAgICAgICAgICAgICQxKQogICAgIGxvb3AKICAgICAgICAgbG4gOj0gcmVn ZXhwX3JlcGxhY2UobG4sICdXb3JrZXJzIExhdW5jaGVkOiBcZCsnLCAnV29ya2VycyBMYXVu Y2hlZDogTicpOwotICAgICAgICBsbiA6PSByZWdleHBfcmVwbGFjZShsbiwgJ2FjdHVhbCBy b3dzPVxkKyBsb29wcz1cZCsnLCAnYWN0dWFsIHJvd3M9TiBsb29wcz1OJyk7CisgICAgICAg IGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAnYWN0dWFsIHJvd3M9XGQrKD86XC5cZCspPyBs b29wcz1cZCsnLCAnYWN0dWFsIHJvd3M9TiBsb29wcz1OJyk7CiAgICAgICAgIGxuIDo9IHJl Z2V4cF9yZXBsYWNlKGxuLCAnUm93cyBSZW1vdmVkIGJ5IEZpbHRlcjogXGQrJywgJ1Jvd3Mg UmVtb3ZlZCBieSBGaWx0ZXI6IE4nKTsKICAgICAgICAgcmV0dXJuIG5leHQgbG47CiAgICAg ZW5kIGxvb3A7Ci0tIAoyLjM0LjEKCg== --------------JSYDzoiBtR0OayS5afTmCzRw--