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 1v2AeF-0011IC-Ig for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Sep 2025 15:46:16 +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 1v2AeC-003Diz-K1 for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Sep 2025 15:46:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v2AeC-003Diq-40 for pgsql-hackers@lists.postgresql.org; Fri, 26 Sep 2025 15:46:12 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v2Ae7-000FP4-1P for pgsql-hackers@postgresql.org; Fri, 26 Sep 2025 15:46:12 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-63486ff378cso4807239a12.0 for ; Fri, 26 Sep 2025 08:46:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgguru-net.20230601.gappssmtp.com; s=20230601; t=1758901566; x=1759506366; darn=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=7Y8qIdQ0BbPcSofk2yS3/08wG1YIQ6fA4nl1XVbUIw0=; b=oVAXDKxw9Hq7NjLyYqFKcFm6bZGPe5+7JD5S2MDm7jqkrt2n/aOoJx8Ic1dhCDgThU FALaJw4C6nqesO6ti3dC/idv9le3cWVE3AaFU9OO58Q4ENBuQzR4NhTkCnriLaGFMmS0 7S4/F/W8rma9Fezs4l78UCVS/IegSCP+loSmiDLbYOB6aoNEJ7wIZ8w2RjEFJdepplJa wmYIHrwXfJBtJJhdf1wzahrXg3NznceaDc74Uz+Fc2U7fyiTBM+yvmAgdyYHR0bU7H4F P9xuyj8uA/VeFeJryObKj5q37uiVYQCCJt/Odhhw4XQuXjK29LzAR5Jdwm+3oruR0X1o 8b4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758901566; x=1759506366; 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=7Y8qIdQ0BbPcSofk2yS3/08wG1YIQ6fA4nl1XVbUIw0=; b=gvTd/6XDNOq1b7bevGvPCdu3JQwEhH1nHA35/x9e6NxedFTd/UGe7pQR3e+0Bur8zx vs8hcCUSk4YOKfTG7mDCFAtjkmmEJGM7UOTLh31tT+Ty3+iwROt4eVTh20x1CrY88m5Q DKs7prOiI86u4MjAKrdIMc9dwA9JvP4o9Tc5UduwjP5WbMWWzsmJH5yfsicco35PqbhG BvuBQfAyuEnvJYrxoGUj7ruGQLmeshrKVi16QG9R+QEaxTRfOZo2J2uuojMlCEEafqA2 quT0RvraiXd2ukDt+hCIGv8TL5wHzcynKe4z59tKJXhBPE3J/QTWDZ6MKKO08slfMgYG 5VdQ== X-Forwarded-Encrypted: i=1; AJvYcCVe5HMKsEVC8IzJZuUmpZsbBtL1SElrDfO2mVL2vIJAcV0Te/FiwA4ylm5PZhqPP16EFCzUresoPZE9n/2T@postgresql.org X-Gm-Message-State: AOJu0Yw/h492BW72vkQtabUtRXpbhk17z6iOyHfXre9sU5+4yHta9Feb zD3pAuTxQsatlXmTfBhWrJDXgtGqF12+IH/e6fnw8bBOXlVd30lbX03U23OlvC+eFPpel5qkpdY +BqNeGkYg/NNTyld51MN2b6fartc0kjuEgGdNrOywHA== X-Gm-Gg: ASbGncs8JxjzDAsXlwtELSmAczhglKS+N5LL2gfqw08N5Ei1gsfNRcoF9IAUnohAzoU cJ4VoLptCYLec7C0olka5E/F892I2De7JRzp53OwAivOZNV7Nx2+O19jmfHqDc//z4x1mlZ4oBQ hu42XItbA+/SrhaMKudUPuxh8N86INRDbFGBZx0/GCQ3e4EmYi0pMuSSz84VIQpx57o4LOK0Ica 1vxVMcCKBS+LI5Yr+HdpjkrWLa6aR7AKfdLfCas1A== X-Google-Smtp-Source: AGHT+IHmKGdHgygZn97fxAyZ52Cc27EEdXo7UvJqiyP2uqKSNZnF7Utey0ri4mWaL4GPNPxXxa/inTK4liiHDYeBGN4= X-Received: by 2002:a17:907:7207:b0:b2d:257a:4315 with SMTP id a640c23a62f3a-b354c7313e0mr833902266b.26.1758901565812; Fri, 26 Sep 2025 08:46:05 -0700 (PDT) MIME-Version: 1.0 References: <4D2047B0-E8D8-472B-B7E8-61206B1E6AFA@yandex-team.ru> In-Reply-To: From: David Christensen Date: Fri, 26 Sep 2025 10:45:53 -0500 X-Gm-Features: AS18NWCY_YxyZWtKqJFDQS2JcF-WAqXz8IGp3_YKuU6ERVrkNKT0XeZ4SzDz1O8 Message-ID: Subject: Re: [PATCH] GROUP BY ALL To: Andrey Borodin Cc: Peter Eisentraut , pgsql-hackers , Tom Lane , "David G. Johnston" , Jelte Fennema-Nio Content-Type: multipart/mixed; boundary="00000000000006bda7063fb62f12" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000006bda7063fb62f12 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Sep 26, 2025 at 6:16=E2=80=AFAM David Christensen wrote: > > > > > On Sep 26, 2025, at 3:45=E2=80=AFAM, Andrey Borodin wrote: > > > > =EF=BB=BF > > > >> On 26 Sep 2025, at 12:02, Peter Eisentraut wrot= e: > >> > >> maybe someone wants to take this up again. > > > > I've compared my old patch with David's, and his version looks better. > > If David is not going to work on this in nearest future - I'l like to p= ick up the work. > > Either way I'll join as reviewer. > > > > Thanks! > > I=E2=80=99m interested in picking it up again but would appreciate the re= view. Here is a rebased version with a few more tests. I also changed the main check here to using `!contain_agg_clause` instead of `!IsA(Aggref))` directly. (This was defined in `optimizer/clauses.h`, but we already are pulling in `optimizer.h`, so it felt valid to me.) David --00000000000006bda7063fb62f12 Content-Type: application/octet-stream; name="v2-0001-Add-GROUP-BY-ALL.patch" Content-Disposition: attachment; filename="v2-0001-Add-GROUP-BY-ALL.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg10k49t0 RnJvbSAwY2I0NzQxMjNjYjIwNmZhYzUzMDA0YjM4YjgzZmE2YjA1YzE4NDI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBDaHJpc3RlbnNlbiA8ZGF2aWQuY2hyaXN0ZW5zZW5A Y3J1bmNoeWRhdGEuY29tPgpEYXRlOiBNb24sIDExIE1hciAyMDI0IDEwOjM3OjA1IC0wNDAwClN1 YmplY3Q6IFtQQVRDSCB2Ml0gQWRkIEdST1VQIEJZIEFMTAoKR1JPVVAgQlkgQUxMIGlzIGEgZm9y bSBvZiBHUk9VUCBCWSB3aGljaCBhZGRzIGFueSBUYXJnZXRFeHByIHRoYXQgZG9lcyBub3QKY29u dGFpbiBhbiBBZ2dyZWYgaW50byB0aGUgZ3JvdXBDbGF1c2Ugb2YgdGhlIHF1ZXJ5LCBlZmZlY3Rp dmVseSBtYWtpbmcgaXQKZXhhY3RseSBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgdGhvc2Ugc2Ft ZSBleHByZXNzaW9ucyBpbiBhbiBleHBsaWNpdCBHUk9VUCBCWSBsaXN0LgoKU2luY2UgdGhpcyBp cyBleGNsdXNpdmUgd2l0aCBhbnkgb3RoZXIgR1JPVVAgQlkgZm9ybSwgdGhpcyBpcyBmYWlybHkg c2ltcGxlIHRvCmFkZCBpbnRvIHRoZSBncmFtbWFyIGFuZCBoYW5kbGUgd2l0aG91dCBuZWVkaW5n IHRvIGdldCBpbnRvIGdyb3VwaW5nIHNldHMgb3IKb3RoZXIgbW9yZSBjb21wbGljYXRlZCBmb3Jt cy4KClRoaXMgZ3JlYXRseSBpbXByb3ZlcyBkYXRhIGV4cGxvcmF0aW9uIGluIHBhcnRpY3VsYXIs IGFzIHdlbGwgYXMgbWFraW5nIGl0IHNvCnlvdSBkb24ndCBuZWVkIHRvIHRyaXZpYWxseSB3cmFw IG1vcmUgY29tcGxpY2F0ZWQgcXVlcmllcyBpbiBhIHN1YnF1ZXJ5IG9yCnJlcHJvZHVjZSBsb25n LCBjb21wbGljYXRlZCBleHByZXNzaW9ucyBpbiB0aGUgbGl0ZXJhbCBHUk9VUCBCWS4KLS0tCiBz cmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jICAgICAgICAgICAgIHwgNDAgKysrKysrKysrKy0t CiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgIHwgMTYgKysrKy0KIHNy Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYyAgICAgICAgfCAgNyArLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICB8ICAzICsKIHNyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaCAgICAgICAgICAgfCAgMiArCiBzcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vf Y2xhdXNlLmggICAgICAgIHwgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdh dGVzLm91dCB8IDgyICsrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvYWdncmVnYXRlcy5zcWwgICAgICB8IDQ3ICsrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5n ZWQsIDE4OCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpp bmRleCBiOTc2M2VhMTcxNC4uNGE2MzNiYjkzMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bh cnNlci9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYwpAQCAtMzIs NiArMzIsNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVz L25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisjaW5jbHVkZSAi b3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAj aW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfYWdnLmgi CkBAIC0xNDE1LDYgKzE0MTYsMjkgQEAgdHJhbnNmb3JtU2VsZWN0U3RtdChQYXJzZVN0YXRlICpw c3RhdGUsIFNlbGVjdFN0bXQgKnN0bXQpCiAJcXJ5LT50YXJnZXRMaXN0ID0gdHJhbnNmb3JtVGFy Z2V0TGlzdChwc3RhdGUsIHN0bXQtPnRhcmdldExpc3QsCiAJCQkJCQkJCQkJICBFWFBSX0tJTkRf U0VMRUNUX1RBUkdFVCk7CiAKKwkvKgorCSAqIElmIGdyb3VwQnlBbGwsIGV4cGFuZCB0YXJnZXRM aXN0IGludG8gZ3JvdXBDbGF1c2UuIEluIHRoaXMgY2FzZSwgd2UKKwkgKiBjYW5ub3QgaGF2ZSBh bnkgb3RoZXIgZ3JvdXAgY2xhdXNlcywgc28gdGhpcyBpcyBzYWZlLgorCSAqLworCisJaWYgKHN0 bXQtPmdyb3VwQWxsKQorCXsKKwkJTGlzdENlbGwgKmwxOworCQkvKgorCQkgKiBJdGVyYXRlIG92 ZXIgdGFyZ2V0cywgYW55IG5vbi1hZ2dyZWdhdGUgZ2V0cyBhZGRlZCBhcyBhIFRhcmdldC4KKwkJ ICogTm90ZSB0aGF0IGl0J3Mgbm90IGVub3VnaCB0byBjaGVjayBmb3IgYSB0b3AtbGV2ZWwgQWdn cmVmOyB3ZSBuZWVkCisJCSAqIHRvIGVuc3VyZSB0aGF0IGFueSBzdWItZXhwcmVzc2lvbiBoZXJl IGRvZXMgbm90IGluY2x1ZGUgYW4gQWdncmVmCisJCSAqIChmb3IgaW5zdGFuY2UgYW4gZXhwcmVz c2lvbiBzdWNoIGFzIGBzdW0oY29sKSArIDRgIHNob3VsZCBub3QgYmUKKwkJICogYWRkZWQgYXMg YSBncm91cGluZyB0YXJnZXQuCisJCSAqLworCQlmb3JlYWNoIChsMSxxcnktPnRhcmdldExpc3Qp CisJCXsKKwkJCVRhcmdldEVudHJ5ICpuID0gKFRhcmdldEVudHJ5KilsZmlyc3QobDEpOworCQkJ aWYgKCFjb250YWluX2FnZ19jbGF1c2UoKE5vZGUgKiluLT5leHByKSkKKwkJCQlxcnktPmdyb3Vw Q2xhdXNlID0gYWRkVGFyZ2V0VG9Hcm91cExpc3QocHN0YXRlLCBuLCBxcnktPmdyb3VwQ2xhdXNl LCBxcnktPnRhcmdldExpc3QsIDApOworCQl9CisJfQorCiAJLyogbWFyayBjb2x1bW4gb3JpZ2lu cyAqLwogCW1hcmtUYXJnZXRMaXN0T3JpZ2lucyhwc3RhdGUsIHFyeS0+dGFyZ2V0TGlzdCk7CiAK QEAgLTE0MzgsMTQgKzE0NjIsMTYgQEAgdHJhbnNmb3JtU2VsZWN0U3RtdChQYXJzZVN0YXRlICpw c3RhdGUsIFNlbGVjdFN0bXQgKnN0bXQpCiAJCQkJCQkJCQkJICBFWFBSX0tJTkRfT1JERVJfQlks CiAJCQkJCQkJCQkJICBmYWxzZSAvKiBhbGxvdyBTUUw5MiBydWxlcyAqLyApOwogCi0JcXJ5LT5n cm91cENsYXVzZSA9IHRyYW5zZm9ybUdyb3VwQ2xhdXNlKHBzdGF0ZSwKLQkJCQkJCQkJCQkJc3Rt dC0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCSZxcnktPmdyb3VwaW5nU2V0cywKLQkJCQkJCQkJ CQkJJnFyeS0+dGFyZ2V0TGlzdCwKLQkJCQkJCQkJCQkJcXJ5LT5zb3J0Q2xhdXNlLAotCQkJCQkJ CQkJCQlFWFBSX0tJTkRfR1JPVVBfQlksCi0JCQkJCQkJCQkJCWZhbHNlIC8qIGFsbG93IFNRTDky IHJ1bGVzICovICk7CisJaWYgKCFzdG10LT5ncm91cEFsbCkKKwkJcXJ5LT5ncm91cENsYXVzZSA9 IHRyYW5zZm9ybUdyb3VwQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCXN0bXQtPmdyb3VwQ2xh dXNlLAorCQkJCQkJCQkJCQkJJnFyeS0+Z3JvdXBpbmdTZXRzLAorCQkJCQkJCQkJCQkJJnFyeS0+ dGFyZ2V0TGlzdCwKKwkJCQkJCQkJCQkJCXFyeS0+c29ydENsYXVzZSwKKwkJCQkJCQkJCQkJCUVY UFJfS0lORF9HUk9VUF9CWSwKKwkJCQkJCQkJCQkJCWZhbHNlIC8qIGFsbG93IFNRTDkyIHJ1bGVz ICovICk7CiAJcXJ5LT5ncm91cERpc3RpbmN0ID0gc3RtdC0+Z3JvdXBEaXN0aW5jdDsKKwlxcnkt Pmdyb3VwQWxsID0gc3RtdC0+Z3JvdXBBbGw7CiAKIAlpZiAoc3RtdC0+ZGlzdGluY3RDbGF1c2Ug PT0gTklMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMv YmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDlmZDQ4YWNiMWY4Li4zZDk3Y2VkZGMxZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55CkBAIC0xMjAsNiArMTIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2VsZWN0TGltaXQK IHR5cGVkZWYgc3RydWN0IEdyb3VwQ2xhdXNlCiB7CiAJYm9vbAkJZGlzdGluY3Q7CisJYm9vbAkJ YWxsOwogCUxpc3QJICAgKmxpc3Q7CiB9IEdyb3VwQ2xhdXNlOwogCkBAIC0xMjk5Myw2ICsxMjk5 NCw3IEBAIHNpbXBsZV9zZWxlY3Q6CiAJCQkJCW4tPndoZXJlQ2xhdXNlID0gJDY7CiAJCQkJCW4t Pmdyb3VwQ2xhdXNlID0gKCQ3KS0+bGlzdDsKIAkJCQkJbi0+Z3JvdXBEaXN0aW5jdCA9ICgkNykt PmRpc3RpbmN0OworCQkJCQluLT5ncm91cEFsbCA9ICgkNyktPmFsbDsKIAkJCQkJbi0+aGF2aW5n Q2xhdXNlID0gJDg7CiAJCQkJCW4tPndpbmRvd0NsYXVzZSA9ICQ5OwogCQkJCQkkJCA9IChOb2Rl ICopIG47CkBAIC0xMzAxMCw2ICsxMzAxMiw3IEBAIHNpbXBsZV9zZWxlY3Q6CiAJCQkJCW4tPndo ZXJlQ2xhdXNlID0gJDY7CiAJCQkJCW4tPmdyb3VwQ2xhdXNlID0gKCQ3KS0+bGlzdDsKIAkJCQkJ bi0+Z3JvdXBEaXN0aW5jdCA9ICgkNyktPmRpc3RpbmN0OworCQkJCQluLT5ncm91cEFsbCA9ICgk NyktPmFsbDsKIAkJCQkJbi0+aGF2aW5nQ2xhdXNlID0gJDg7CiAJCQkJCW4tPndpbmRvd0NsYXVz ZSA9ICQ5OwogCQkJCQkkJCA9IChOb2RlICopIG47CkBAIC0xMzUwMiwxMiArMTM1MDUsMjEgQEAg Zmlyc3Rfb3JfbmV4dDogRklSU1RfUAkJCQkJCQkJeyAkJCA9IDA7IH0KICAqIEdyb3VwaW5nU2V0 IG5vZGUgb2Ygc29tZSB0eXBlLgogICovCiBncm91cF9jbGF1c2U6Ci0JCQlHUk9VUF9QIEJZIHNl dF9xdWFudGlmaWVyIGdyb3VwX2J5X2xpc3QKKwkJCUdST1VQX1AgQlkgQUxMCisJCQkJeworCQkJ CQlHcm91cENsYXVzZSAqbiA9IChHcm91cENsYXVzZSAqKSBwYWxsb2Moc2l6ZW9mKEdyb3VwQ2xh dXNlKSk7CisJCQkJCW4tPmRpc3RpbmN0ID0gZmFsc2U7CisJCQkJCW4tPmxpc3QgPSBOSUw7CisJ CQkJCW4tPmFsbCA9IHRydWU7CisJCQkJCSQkID0gbjsKKwkJCQl9CisJCQl8IEdST1VQX1AgQlkg c2V0X3F1YW50aWZpZXIgZ3JvdXBfYnlfbGlzdAogCQkJCXsKIAkJCQkJR3JvdXBDbGF1c2UgKm4g PSAoR3JvdXBDbGF1c2UgKikgcGFsbG9jKHNpemVvZihHcm91cENsYXVzZSkpOwogCiAJCQkJCW4t PmRpc3RpbmN0ID0gJDMgPT0gU0VUX1FVQU5USUZJRVJfRElTVElOQ1Q7CiAJCQkJCW4tPmxpc3Qg PSAkNDsKKwkJCQkJbi0+YWxsID0gZmFsc2U7CiAJCQkJCSQkID0gbjsKIAkJCQl9CiAJCQl8IC8q RU1QVFkqLwpAQCAtMTM1MTYsNiArMTM1MjgsNyBAQCBncm91cF9jbGF1c2U6CiAKIAkJCQkJbi0+ ZGlzdGluY3QgPSBmYWxzZTsKIAkJCQkJbi0+bGlzdCA9IE5JTDsKKwkJCQkJbi0+YWxsID0gZmFs c2U7CiAJCQkJCSQkID0gbjsKIAkJCQl9CiAJCTsKQEAgLTE3NjE4LDYgKzE3NjMxLDcgQEAgUExw Z1NRTF9FeHByOiBvcHRfZGlzdGluY3RfY2xhdXNlIG9wdF90YXJnZXRfbGlzdAogCQkJCQluLT53 aGVyZUNsYXVzZSA9ICQ0OwogCQkJCQluLT5ncm91cENsYXVzZSA9ICgkNSktPmxpc3Q7CiAJCQkJ CW4tPmdyb3VwRGlzdGluY3QgPSAoJDUpLT5kaXN0aW5jdDsKKwkJCQkJbi0+Z3JvdXBBbGwgPSAo JDUpLT5hbGw7CiAJCQkJCW4tPmhhdmluZ0NsYXVzZSA9ICQ2OwogCQkJCQluLT53aW5kb3dDbGF1 c2UgPSAkNzsKIAkJCQkJbi0+c29ydENsYXVzZSA9ICQ4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVz ZS5jCmluZGV4IDlmMjBhNzBjZTEzLi45YzI2YWZkMWYzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9j bGF1c2UuYwpAQCAtOTAsOCArOTAsNiBAQCBzdGF0aWMgaW50CWdldF9tYXRjaGluZ19sb2NhdGlv bihpbnQgc29ydGdyb3VwcmVmLAogCQkJCQkJCQkgIExpc3QgKnNvcnRncm91cHJlZnMsIExpc3Qg KmV4cHJzKTsKIHN0YXRpYyBMaXN0ICpyZXNvbHZlX3VuaXF1ZV9pbmRleF9leHByKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgSW5mZXJDbGF1c2UgKmluZmVyLAogCQkJCQkJCQkJICAgUmVsYXRpb24gaGVh cFJlbCk7Ci1zdGF0aWMgTGlzdCAqYWRkVGFyZ2V0VG9Hcm91cExpc3QoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAotCQkJCQkJCQkgIExpc3QgKmdyb3VwbGlzdCwgTGlzdCAq dGFyZ2V0bGlzdCwgaW50IGxvY2F0aW9uKTsKIHN0YXRpYyBXaW5kb3dDbGF1c2UgKmZpbmRXaW5k b3dDbGF1c2UoTGlzdCAqd2NsaXN0LCBjb25zdCBjaGFyICpuYW1lKTsKIHN0YXRpYyBOb2RlICp0 cmFuc2Zvcm1GcmFtZU9mZnNldChQYXJzZVN0YXRlICpwc3RhdGUsIGludCBmcmFtZU9wdGlvbnMs CiAJCQkJCQkJCSAgT2lkIHJhbmdlb3BmYW1pbHksIE9pZCByYW5nZW9wY2ludHlwZSwgT2lkICpp blJhbmdlRnVuYywKQEAgLTI1OTgsNiArMjU5Niw5IEBAIHRyYW5zZm9ybUdyb3VwaW5nU2V0KExp c3QgKipmbGF0cmVzdWx0LAogICogR1JPVVAgQlkgaXRlbXMgd2lsbCBiZSBhZGRlZCB0byB0aGUg dGFyZ2V0bGlzdCAoYXMgcmVzanVuayBjb2x1bW5zKQogICogaWYgbm90IGFscmVhZHkgcHJlc2Vu dCwgc28gdGhlIHRhcmdldGxpc3QgbXVzdCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLgogICoKKyAq IElmIEdST1VQIEJZIEFMTCBpcyBzcGVjaWZpZWQsIHRoZSBncm91cENsYXVzZSB3aWxsIGJlIGlu ZmVycmVkIHRvIGJlIGFsbAorICogbm9uLWFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBpbiB0aGUgdGFy Z2V0TGlzdC4KKyAqCiAgKiBUaGlzIGlzIGFsc28gdXNlZCBmb3Igd2luZG93IFBBUlRJVElPTiBC WSBjbGF1c2VzICh3aGljaCBhY3QgYWxtb3N0IHRoZQogICogc2FtZSwgYnV0IGFyZSBhbHdheXMg aW50ZXJwcmV0ZWQgcGVyIFNRTDk5IHJ1bGVzKS4KICAqCkBAIC0zNTMzLDcgKzM1MzQsNyBAQCBh ZGRUYXJnZXRUb1NvcnRMaXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVGFyZ2V0RW50cnkgKnRsZSwK ICAqCiAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIFNvcnRHcm91cENsYXVzZSBsaXN0LgogICovCi1z dGF0aWMgTGlzdCAqCitMaXN0ICoKIGFkZFRhcmdldFRvR3JvdXBMaXN0KFBhcnNlU3RhdGUgKnBz dGF0ZSwgVGFyZ2V0RW50cnkgKnRsZSwKIAkJCQkJIExpc3QgKmdyb3VwbGlzdCwgTGlzdCAqdGFy Z2V0bGlzdCwgaW50IGxvY2F0aW9uKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4 IGRlZmNkYWE4YjM0Li4wODI3YjFlMjYyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpA QCAtNjE5OSw2ICs2MTk5LDkgQEAgZ2V0X2Jhc2ljX3NlbGVjdF9xdWVyeShRdWVyeSAqcXVlcnks IGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKIAkJCQlzZXAgPSAiLCAiOwogCQkJfQogCQl9CisJ CWlmIChxdWVyeS0+Z3JvdXBBbGwpCisJCQlhcHBlbmRDb250ZXh0S2V5d29yZChjb250ZXh0LCAi IEFMTCAiLAorCQkJCQkJCQkgLVBSRVRUWUlOREVOVF9TVEQsIFBSRVRUWUlOREVOVF9TVEQsIDEp OwogCQllbHNlCiAJCXsKIAkJCXNlcCA9ICIiOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9k ZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDRl ZDE0ZmM1Yjc4Li5hZTFhOTU0YWZlYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjE1LDYg KzIxNSw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXJ5CiAKIAlMaXN0CSAgICpncm91cENsYXVzZTsJ LyogYSBsaXN0IG9mIFNvcnRHcm91cENsYXVzZSdzICovCiAJYm9vbAkJZ3JvdXBEaXN0aW5jdDsJ LyogaXMgdGhlIGdyb3VwIGJ5IGNsYXVzZSBkaXN0aW5jdD8gKi8KKwlib29sCQlncm91cEFsbDsJ LyogaXMgdGhlIGdyb3VwIGJ5IGNsYXVzZSBkaXN0aW5jdD8gKi8KIAogCUxpc3QJICAgKmdyb3Vw aW5nU2V0czsJLyogYSBsaXN0IG9mIEdyb3VwaW5nU2V0J3MgaWYgcHJlc2VudCAqLwogCkBAIC0y MTkyLDYgKzIxOTMsNyBAQCB0eXBlZGVmIHN0cnVjdCBTZWxlY3RTdG10CiAJTm9kZQkgICAqd2hl cmVDbGF1c2U7CS8qIFdIRVJFIHF1YWxpZmljYXRpb24gKi8KIAlMaXN0CSAgICpncm91cENsYXVz ZTsJLyogR1JPVVAgQlkgY2xhdXNlcyAqLwogCWJvb2wJCWdyb3VwRGlzdGluY3Q7CS8qIElzIHRo aXMgR1JPVVAgQlkgRElTVElOQ1Q/ICovCisJYm9vbAkJZ3JvdXBBbGw7CQkvKiBJcyB0aGlzIEdS T1VQIEJZIEFMTD8gKi8KIAlOb2RlCSAgICpoYXZpbmdDbGF1c2U7CS8qIEhBVklORyBjb25kaXRp b25hbC1leHByZXNzaW9uICovCiAJTGlzdAkgICAqd2luZG93Q2xhdXNlOwkvKiBXSU5ET1cgd2lu ZG93X25hbWUgQVMgKC4uLiksIC4uLiAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJz ZXIvcGFyc2VfY2xhdXNlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgKaW5k ZXggM2U5ODk0OTI2ZGUuLmE4YThmNzUyMjg3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJz ZXIvcGFyc2VfY2xhdXNlLmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5o CkBAIC01MCw2ICs1MCw4IEBAIGV4dGVybiBMaXN0ICphZGRUYXJnZXRUb1NvcnRMaXN0KFBhcnNl U3RhdGUgKnBzdGF0ZSwgVGFyZ2V0RW50cnkgKnRsZSwKIAkJCQkJCQkJIExpc3QgKnNvcnRsaXN0 LCBMaXN0ICp0YXJnZXRsaXN0LCBTb3J0QnkgKnNvcnRieSk7CiBleHRlcm4gSW5kZXggYXNzaWdu U29ydEdyb3VwUmVmKFRhcmdldEVudHJ5ICp0bGUsIExpc3QgKnRsaXN0KTsKIGV4dGVybiBib29s IHRhcmdldElzSW5Tb3J0TGlzdChUYXJnZXRFbnRyeSAqdGxlLCBPaWQgc29ydG9wLCBMaXN0ICpz b3J0TGlzdCk7CitleHRlcm4gTGlzdCAqYWRkVGFyZ2V0VG9Hcm91cExpc3QoUGFyc2VTdGF0ZSAq cHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAorCQkJCQkJCQkgIExpc3QgKmdyb3VwbGlzdCwgTGlz dCAqdGFyZ2V0bGlzdCwgaW50IGxvY2F0aW9uKTsKIAogLyogZnVuY3Rpb25zIGluIHBhcnNlX2pz b250YWJsZS5jICovCiBleHRlcm4gUGFyc2VOYW1lc3BhY2VJdGVtICp0cmFuc2Zvcm1Kc29uVGFi bGUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uVGFibGUgKmp0KTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CmluZGV4IDFmMjRmNmZmZDFmLi4wZjA0ZTg5OTM2NSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CkBAIC0xNTU3LDYgKzE1NTcs ODggQEAgZHJvcCB0YWJsZSB0MjsKIGRyb3AgdGFibGUgdDM7CiBkcm9wIHRhYmxlIHBfdDE7CiAt LQorLS0gVGVzdCBHUk9VUCBCWSBBTEwKKy0tCitDUkVBVEUgVEVNUCBUQUJMRSB0MSAoCisgIGEg aW50LAorICBiIGludAorKTsKK0NPUFkgdDEgRlJPTSBTVERJTjsKKy0tIGJhc2ljIGZpZWxkIGNo ZWNrCitTRUxFQ1QgYiwgQ09VTlQoKikgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisgYiB8IGNvdW50 IAorLS0tKy0tLS0tLS0KKyAzIHwgICAgIDIKKyAyIHwgICAgIDIKKyAxIHwgICAgIDEKKygzIHJv d3MpCisKKy0tIHRocm93IGEgbnVsbCBpbiB0aGUgdmFsdWVzIHRvbworU0VMRUNUIGEsIENPVU5U KGEpIEZST00gdDEgR1JPVVAgQlkgQUxMOworIGEgfCBjb3VudCAKKy0tLSstLS0tLS0tCisgICB8 ICAgICAwCisgMSB8ICAgICA0CisoMiByb3dzKQorCistLSBtdWx0aXBsZSBjb2x1bW5zLCBub24t Y29uc2VjdXRpdmUgb3JkZXIKK1NFTEVDVCBhLCBTVU0oYiksIGIgRlJPTSB0MSBHUk9VUCBCWSBB TEw7CisgYSB8IHN1bSB8IGIgCistLS0rLS0tLS0rLS0tCisgMSB8ICAgMSB8IDEKKyAxIHwgICA2 IHwgMworIDEgfCAgIDIgfCAyCisgICB8ICAgMiB8IDIKKyg0IHJvd3MpCisKKy0tIG11bHRpIGNv bHVtbnMsIG5vIGFnZ3JlZ2F0ZQorU0VMRUNUIGEgKyBiIEZST00gdDEgR1JPVVAgQlkgQUxMOwor ID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgICAgCisgICAgICAgIDMKKyAgICAgICAgNAor ICAgICAgICAyCisoNCByb3dzKQorCistLSBub24tdG9wLWxldmVsIGV4cHJlc3Npb24KK1NFTEVD VCBhLCBTVU0oYikgKyA0IEZST00gdDEgR1JPVVAgQlkgQUxMOworIGEgfCA/Y29sdW1uPyAKKy0t LSstLS0tLS0tLS0tCisgICB8ICAgICAgICA2CisgMSB8ICAgICAgIDEzCisoMiByb3dzKQorCist LSBpbmNsdWRpbmcgZ3JvdXBlZCBjb2x1bW4KK1NFTEVDVCBhLCBTVU0oYikgKyBhIEZST00gdDEg R1JPVVAgQlkgQUxMOworIGEgfCA/Y29sdW1uPyAKKy0tLSstLS0tLS0tLS0tCisgICB8ICAgICAg ICAgCisgMSB8ICAgICAgIDEwCisoMiByb3dzKQorCistLSBvb3BzIGFsbCBhZ2dyZWdhdGVzCitT RUxFQ1QgQ09VTlQoYSksIFNVTShiKSBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKyBjb3VudCB8IHN1 bSAKKy0tLS0tLS0rLS0tLS0KKyAgICAgNCB8ICAxMQorKDEgcm93KQorCistLSBlbXB0eSBjb2x1 bW4gbGlzdAorU0VMRUNUIEZST00gdDEgR1JPVVAgQlkgQUxMOworLS0KKyg1IHJvd3MpCisKKy0t IGZpbHRlcgorU0VMRUNUIGEsIENPVU5UKGEpIEZJTFRFUihXSEVSRSBiID0gMikgRlJPTSB0MSBH Uk9VUCBCWSBBTEw7CisgYSB8IGNvdW50IAorLS0tKy0tLS0tLS0KKyAgIHwgICAgIDAKKyAxIHwg ICAgIDEKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgdDE7CistLQogLS0gVGVzdCBHUk9VUCBCWSBt YXRjaGluZyBvZiBqb2luIGNvbHVtbnMgdGhhdCBhcmUgdHlwZS1jb2VyY2VkIGR1ZSB0byBVU0lO RwogLS0KIGNyZWF0ZSB0ZW1wIHRhYmxlIHQxKGYxIGludCwgZjIgaW50KTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvYWdncmVnYXRlcy5zcWwKaW5kZXggNjI1NDBiMWZmYTQuLjFmNGMyODJkYzYyIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbApAQCAtNTQ5LDYgKzU0OSw1MyBAQCBkcm9wIHRhYmxl IHQyOwogZHJvcCB0YWJsZSB0MzsKIGRyb3AgdGFibGUgcF90MTsKIAorCistLQorLS0gVGVzdCBH Uk9VUCBCWSBBTEwKKy0tCisKK0NSRUFURSBURU1QIFRBQkxFIHQxICgKKyAgYSBpbnQsCisgIGIg aW50CispOworCitDT1BZIHQxIEZST00gU1RESU47CisxCTEKKzEJMgorMQkzCitcTgkyCisxCTMK K1wuCisKKy0tIGJhc2ljIGZpZWxkIGNoZWNrCitTRUxFQ1QgYiwgQ09VTlQoKikgRlJPTSB0MSBH Uk9VUCBCWSBBTEw7CisKKy0tIHRocm93IGEgbnVsbCBpbiB0aGUgdmFsdWVzIHRvbworU0VMRUNU IGEsIENPVU5UKGEpIEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBtdWx0aXBsZSBjb2x1bW5z LCBub24tY29uc2VjdXRpdmUgb3JkZXIKK1NFTEVDVCBhLCBTVU0oYiksIGIgRlJPTSB0MSBHUk9V UCBCWSBBTEw7CisKKy0tIG11bHRpIGNvbHVtbnMsIG5vIGFnZ3JlZ2F0ZQorU0VMRUNUIGEgKyBi IEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBub24tdG9wLWxldmVsIGV4cHJlc3Npb24KK1NF TEVDVCBhLCBTVU0oYikgKyA0IEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBpbmNsdWRpbmcg Z3JvdXBlZCBjb2x1bW4KK1NFTEVDVCBhLCBTVU0oYikgKyBhIEZST00gdDEgR1JPVVAgQlkgQUxM OworCistLSBvb3BzIGFsbCBhZ2dyZWdhdGVzCitTRUxFQ1QgQ09VTlQoYSksIFNVTShiKSBGUk9N IHQxIEdST1VQIEJZIEFMTDsKKworLS0gZW1wdHkgY29sdW1uIGxpc3QKK1NFTEVDVCBGUk9NIHQx IEdST1VQIEJZIEFMTDsKKworLS0gZmlsdGVyCitTRUxFQ1QgYSwgQ09VTlQoYSkgRklMVEVSKFdI RVJFIGIgPSAyKSBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKworRFJPUCBUQUJMRSB0MTsKKwogLS0K IC0tIFRlc3QgR1JPVVAgQlkgbWF0Y2hpbmcgb2Ygam9pbiBjb2x1bW5zIHRoYXQgYXJlIHR5cGUt Y29lcmNlZCBkdWUgdG8gVVNJTkcKIC0tCi0tIAoyLjQ5LjAKCg== --00000000000006bda7063fb62f12--