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 1v2Bnu-001BlV-9A for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Sep 2025 17:00:18 +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 1v2Bnr-004ItM-Us for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Sep 2025 17:00: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.94.2) (envelope-from ) id 1v2Bnr-004ItE-Dc for pgsql-hackers@lists.postgresql.org; Fri, 26 Sep 2025 17:00:16 +0000 Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v2Bnp-0003yA-2U for pgsql-hackers@postgresql.org; Fri, 26 Sep 2025 17:00:15 +0000 Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-62fbfeb097eso2307251a12.2 for ; Fri, 26 Sep 2025 10:00:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgguru-net.20230601.gappssmtp.com; s=20230601; t=1758906013; x=1759510813; 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=BIoJMhG2tNBbGFijPyqoApowUh8mBZ1dK5sUjOFm4AE=; b=BEWcNWq99SC7OUsrPOqx1jxB/Gfu42CeEFBJyCbQHqi+++DCbxOSX3PTQlsMdfol95 2MdzSt7v0F+2NkqWJBU1gElPST13mEEyo4t+aAZv0paGwdgHXlAozgias+wW+kPFCiJQ /HUx73ziHGgpRwbUgFcnfv8Giop/maIbn2fls5e2xkgzBY7jPmrOemRoyn/ZoTML2ttr lGSyNZIB0bo9omYDuvQLRTFkE74jlF9wgJUYgzopbFCR4ukZwJDYnXfXjU2hcw3pSDhq /icB5hZiN6YgkZsUXHjMXy19MY7AajBJR7bVKE8Hixx57q0re5Zq8OxhccViMSc5wmhu MHyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758906013; x=1759510813; 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=BIoJMhG2tNBbGFijPyqoApowUh8mBZ1dK5sUjOFm4AE=; b=J2GQI4ffB4KuYKO5/v7T6HVd180934+7xdKZG75PnwZHIS921ijmUuH/+WMQRf2uud Dm0rapDOrWJRNRRcNwsm3BO6fT2ovEdR9R7xNC3kQhMD1KElRkPdP841qASW7OV8Vsiy oIkQQaiwAmIEPHCQBxWUAl3Q9TDHmutE0ozRnTIRa2KTUCy1SMy4PJfIc68Yp9OwEe2B i/o+VqZO/nI8ywai/i/8B3w3Y9opP85yo6vNuvCThjOPXw+GdOdjDc8lzc9aupIcJcoy Tt6C6NQOVQOijReaVDQx6M3TfSZjt8ivXGC9MOFnUCdjEyq3yN5YdP6Zh8m0dzOiq3rv 97Qw== X-Forwarded-Encrypted: i=1; AJvYcCVqhwgtkHi1UuJQWdMGs7n/dFMplmnCGEjd8fmWoioYEgbvpNBvp8wYra7f6D3AqI0gJ186+s0nuAkelKHi@postgresql.org X-Gm-Message-State: AOJu0YwPhDpnCDyq4g4OALpQwV/genXouKdQM4FTmFdc62vLNnB7odCF 54f7iUMOva20LzJmxWP2uKNqGEl+F+Yw9p+uFvNugMC3E6LE8ajPn7NhFlESGtrxOPXi4Oatweu suB5rHGIgsbu380QA+HzrJIsLQpWhEE67sOx+0H3HKg== X-Gm-Gg: ASbGncuIDBS9cDZhOGup1AxQATZ5A9lfiisbHnhGof0TFogrNQvIQ8QWBI09zYJQ2vh aHnFDkFmYwhHzW8+sgD2p/T4NNIfDH5hct1BU3MsdFT8wXnnJYb1+rMlqGjqheC68HdTLhXgdp6 dV11XmnSuB6cUYBlmDXr5oGZ99Ouhj9gTGTcJGua27wLX/xTIQHNPYGMOvG/xsHQUpPyfVDew2s 1qoxeZcf5oxJg5kS14Pri9n6B1IMnGZd798671uiA== X-Google-Smtp-Source: AGHT+IHSz9MMiDzIovkAfoWQMUBaYpfp0itiU2W0NaY8HPTEqspj56Ny4BJhvAtnSEE1z9E9Zhum5RjMFmY4VDyyMbM= X-Received: by 2002:a17:907:7204:b0:afe:9f26:5819 with SMTP id a640c23a62f3a-b34b79c87f5mr889607366b.28.1758906012882; Fri, 26 Sep 2025 10:00:12 -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 12:00:01 -0500 X-Gm-Features: AS18NWDKHBBMdTzZQ3CNONlVny8FxPviQpluPvVmcxqeER8EJsdLwIQjqdCjHwg Message-ID: Subject: Re: [PATCH] GROUP BY ALL To: jian he Cc: Andrey Borodin , Peter Eisentraut , pgsql-hackers , Tom Lane , "David G. Johnston" , Jelte Fennema-Nio Content-Type: multipart/mixed; boundary="00000000000017aa2c063fb73824" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000017aa2c063fb73824 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Version 3 of this patch, incorporating some of the feedback thus far: On Fri, Sep 26, 2025 at 11:56=E2=80=AFAM David Christensen wrote: > > On Fri, Sep 26, 2025 at 11:38=E2=80=AFAM jian he wrote: > > > > On Fri, Sep 26, 2025 at 11:46=E2=80=AFPM David Christensen wrote: > > > > > > > > > > > I=E2=80=99m interested in picking it up again but would appreciate = the review. > > > > > > 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.) > > > > > > > hi. > > I only briefly browse the patch text file, so forgive me. > > seems missing deparse regress tests > > > > i think you may need one test like: > > > > create view v1 as SELECT b, COUNT(*) FROM t1 GROUP BY ALL; > > \sv v1 > > Thanks, good suggestion; not sure the appropriate final location for > this, but it did show a bug in the current patch. > > David --00000000000017aa2c063fb73824 Content-Type: application/octet-stream; name="v3-0001-Add-GROUP-BY-ALL.patch" Content-Disposition: attachment; filename="v3-0001-Add-GROUP-BY-ALL.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg137t500 RnJvbSBjMjRkNWU4NzA5OTNiZWJjMWQ2ZmNiMzVlN2Q4MzY3YjlmY2E2ZGRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBDaHJpc3RlbnNlbiA8ZGF2aWQuY2hyaXN0ZW5zZW5A Y3J1bmNoeWRhdGEuY29tPgpEYXRlOiBNb24sIDExIE1hciAyMDI0IDEwOjM3OjA1IC0wNDAwClN1 YmplY3Q6IFtQQVRDSCB2M10gQWRkIEdST1VQIEJZIEFMTAoKR1JPVVAgQlkgQUxMIGlzIGEgZm9y bSBvZiBHUk9VUCBCWSB3aGljaCBhZGRzIGFueSBUYXJnZXRFeHByIHRoYXQgZG9lcyBub3QKY29u dGFpbiBhbiBBZ2dyZWYgaW50byB0aGUgZ3JvdXBDbGF1c2Ugb2YgdGhlIHF1ZXJ5LCBlZmZlY3Rp dmVseSBtYWtpbmcgaXQKZXhhY3RseSBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgdGhvc2Ugc2Ft ZSBleHByZXNzaW9ucyBpbiBhbiBleHBsaWNpdCBHUk9VUCBCWSBsaXN0LgoKU2luY2UgdGhpcyBp cyBleGNsdXNpdmUgd2l0aCBhbnkgb3RoZXIgR1JPVVAgQlkgZm9ybSwgdGhpcyBpcyBmYWlybHkg c2ltcGxlIHRvCmFkZCBpbnRvIHRoZSBncmFtbWFyIGFuZCBoYW5kbGUgd2l0aG91dCBuZWVkaW5n IHRvIGdldCBpbnRvIGdyb3VwaW5nIHNldHMgb3IKb3RoZXIgbW9yZSBjb21wbGljYXRlZCBmb3Jt cy4KClRoaXMgZ3JlYXRseSBpbXByb3ZlcyBkYXRhIGV4cGxvcmF0aW9uIGluIHBhcnRpY3VsYXIs IGFzIHdlbGwgYXMgbWFraW5nIGl0IHNvCnlvdSBkb24ndCBuZWVkIHRvIHRyaXZpYWxseSB3cmFw IG1vcmUgY29tcGxpY2F0ZWQgcXVlcmllcyBpbiBhIHN1YnF1ZXJ5IG9yCnJlcHJvZHVjZSBsb25n LCBjb21wbGljYXRlZCBleHByZXNzaW9ucyBpbiB0aGUgbGl0ZXJhbCBHUk9VUCBCWS4KLS0tCiBz cmMvYmFja2VuZC9wYXJzZXIvYW5hbHl6ZS5jICAgICAgICAgICAgIHwgIDQwICsrKysrLS0KIHNy Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgfCAgMTYgKystCiBzcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfY2xhdXNlLmMgICAgICAgIHwgICA3ICstCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9w YXJzZW5vZGVzLmggICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9j bGF1c2UuaCAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdh dGVzLm91dCB8IDEzMyArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvYWdncmVnYXRlcy5zcWwgICAgICB8ICA2NiArKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2Vk LCAyNTkgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKaW5k ZXggYjk3NjNlYTE3MTQuLjIyNjJjMGNhZDA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJz ZXIvYW5hbHl6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMKQEAgLTQ4LDYg KzQ4LDcgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdGFyZ2V0LmgiCiAjaW5jbHVkZSAicGFy c2VyL3BhcnNlX3R5cGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVk ZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1dGlscy9iYWNrZW5kX3N0YXR1 cy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgi CkBAIC0xNDE1LDYgKzE0MTYsMjkgQEAgdHJhbnNmb3JtU2VsZWN0U3RtdChQYXJzZVN0YXRlICpw c3RhdGUsIFNlbGVjdFN0bXQgKnN0bXQpCiAJcXJ5LT50YXJnZXRMaXN0ID0gdHJhbnNmb3JtVGFy Z2V0TGlzdChwc3RhdGUsIHN0bXQtPnRhcmdldExpc3QsCiAJCQkJCQkJCQkJICBFWFBSX0tJTkRf U0VMRUNUX1RBUkdFVCk7CiAKKwkvKgorCSAqIElmIGdyb3VwQnlBbGwsIGV4cGFuZCB0YXJnZXRM aXN0IGludG8gZ3JvdXBDbGF1c2UuIEluIHRoaXMgY2FzZSwgd2UKKwkgKiBjYW5ub3QgaGF2ZSBh bnkgb3RoZXIgZ3JvdXAgY2xhdXNlcywgc28gdGhpcyBpcyBzYWZlLgorCSAqLworCisJaWYgKHN0 bXQtPmdyb3VwQWxsKQorCXsKKwkJTGlzdENlbGwgKmwxOworCQkvKgorCQkgKiBJdGVyYXRlIG92 ZXIgdGFyZ2V0cywgYW55IG5vbi1hZ2dyZWdhdGUgZ2V0cyBhZGRlZCBhcyBhIFRhcmdldC4KKwkJ ICogTm90ZSB0aGF0IGl0J3Mgbm90IGVub3VnaCB0byBjaGVjayBmb3IgYSB0b3AtbGV2ZWwgQWdn cmVmOyB3ZSBuZWVkCisJCSAqIHRvIGVuc3VyZSB0aGF0IGFueSBzdWItZXhwcmVzc2lvbiBoZXJl IGRvZXMgbm90IGluY2x1ZGUgYW4gQWdncmVmCisJCSAqIChmb3IgaW5zdGFuY2UgYW4gZXhwcmVz c2lvbiBzdWNoIGFzIGBzdW0oY29sKSArIDRgIHNob3VsZCBub3QgYmUKKwkJICogYWRkZWQgYXMg YSBncm91cGluZyB0YXJnZXQuCisJCSAqLworCQlmb3JlYWNoIChsMSxxcnktPnRhcmdldExpc3Qp CisJCXsKKwkJCVRhcmdldEVudHJ5ICpuID0gKFRhcmdldEVudHJ5KilsZmlyc3QobDEpOworCQkJ aWYgKCFjb250YWluX2FnZ3Nfb2ZfbGV2ZWwoKE5vZGUgKiluLT5leHByLCAwKSkKKwkJCQlxcnkt Pmdyb3VwQ2xhdXNlID0gYWRkVGFyZ2V0VG9Hcm91cExpc3QocHN0YXRlLCBuLCBxcnktPmdyb3Vw Q2xhdXNlLCBxcnktPnRhcmdldExpc3QsIDApOworCQl9CisJfQorCiAJLyogbWFyayBjb2x1bW4g b3JpZ2lucyAqLwogCW1hcmtUYXJnZXRMaXN0T3JpZ2lucyhwc3RhdGUsIHFyeS0+dGFyZ2V0TGlz dCk7CiAKQEAgLTE0MzgsMTQgKzE0NjIsMTYgQEAgdHJhbnNmb3JtU2VsZWN0U3RtdChQYXJzZVN0 YXRlICpwc3RhdGUsIFNlbGVjdFN0bXQgKnN0bXQpCiAJCQkJCQkJCQkJICBFWFBSX0tJTkRfT1JE RVJfQlksCiAJCQkJCQkJCQkJICBmYWxzZSAvKiBhbGxvdyBTUUw5MiBydWxlcyAqLyApOwogCi0J cXJ5LT5ncm91cENsYXVzZSA9IHRyYW5zZm9ybUdyb3VwQ2xhdXNlKHBzdGF0ZSwKLQkJCQkJCQkJ CQkJc3RtdC0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCSZxcnktPmdyb3VwaW5nU2V0cywKLQkJ CQkJCQkJCQkJJnFyeS0+dGFyZ2V0TGlzdCwKLQkJCQkJCQkJCQkJcXJ5LT5zb3J0Q2xhdXNlLAot CQkJCQkJCQkJCQlFWFBSX0tJTkRfR1JPVVBfQlksCi0JCQkJCQkJCQkJCWZhbHNlIC8qIGFsbG93 IFNRTDkyIHJ1bGVzICovICk7CisJaWYgKCFzdG10LT5ncm91cEFsbCkKKwkJcXJ5LT5ncm91cENs YXVzZSA9IHRyYW5zZm9ybUdyb3VwQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCXN0bXQtPmdy b3VwQ2xhdXNlLAorCQkJCQkJCQkJCQkJJnFyeS0+Z3JvdXBpbmdTZXRzLAorCQkJCQkJCQkJCQkJ JnFyeS0+dGFyZ2V0TGlzdCwKKwkJCQkJCQkJCQkJCXFyeS0+c29ydENsYXVzZSwKKwkJCQkJCQkJ CQkJCUVYUFJfS0lORF9HUk9VUF9CWSwKKwkJCQkJCQkJCQkJCWZhbHNlIC8qIGFsbG93IFNRTDky IHJ1bGVzICovICk7CiAJcXJ5LT5ncm91cERpc3RpbmN0ID0gc3RtdC0+Z3JvdXBEaXN0aW5jdDsK KwlxcnktPmdyb3VwQWxsID0gc3RtdC0+Z3JvdXBBbGw7CiAKIAlpZiAoc3RtdC0+ZGlzdGluY3RD bGF1c2UgPT0gTklMKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkg Yi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDlmZDQ4YWNiMWY4Li4zZDk3Y2VkZGMx ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CkBAIC0xMjAsNiArMTIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2VsZWN0 TGltaXQKIHR5cGVkZWYgc3RydWN0IEdyb3VwQ2xhdXNlCiB7CiAJYm9vbAkJZGlzdGluY3Q7CisJ Ym9vbAkJYWxsOwogCUxpc3QJICAgKmxpc3Q7CiB9IEdyb3VwQ2xhdXNlOwogCkBAIC0xMjk5Myw2 ICsxMjk5NCw3IEBAIHNpbXBsZV9zZWxlY3Q6CiAJCQkJCW4tPndoZXJlQ2xhdXNlID0gJDY7CiAJ CQkJCW4tPmdyb3VwQ2xhdXNlID0gKCQ3KS0+bGlzdDsKIAkJCQkJbi0+Z3JvdXBEaXN0aW5jdCA9 ICgkNyktPmRpc3RpbmN0OworCQkJCQluLT5ncm91cEFsbCA9ICgkNyktPmFsbDsKIAkJCQkJbi0+ aGF2aW5nQ2xhdXNlID0gJDg7CiAJCQkJCW4tPndpbmRvd0NsYXVzZSA9ICQ5OwogCQkJCQkkJCA9 IChOb2RlICopIG47CkBAIC0xMzAxMCw2ICsxMzAxMiw3IEBAIHNpbXBsZV9zZWxlY3Q6CiAJCQkJ CW4tPndoZXJlQ2xhdXNlID0gJDY7CiAJCQkJCW4tPmdyb3VwQ2xhdXNlID0gKCQ3KS0+bGlzdDsK IAkJCQkJbi0+Z3JvdXBEaXN0aW5jdCA9ICgkNyktPmRpc3RpbmN0OworCQkJCQluLT5ncm91cEFs bCA9ICgkNyktPmFsbDsKIAkJCQkJbi0+aGF2aW5nQ2xhdXNlID0gJDg7CiAJCQkJCW4tPndpbmRv d0NsYXVzZSA9ICQ5OwogCQkJCQkkJCA9IChOb2RlICopIG47CkBAIC0xMzUwMiwxMiArMTM1MDUs MjEgQEAgZmlyc3Rfb3JfbmV4dDogRklSU1RfUAkJCQkJCQkJeyAkJCA9IDA7IH0KICAqIEdyb3Vw aW5nU2V0IG5vZGUgb2Ygc29tZSB0eXBlLgogICovCiBncm91cF9jbGF1c2U6Ci0JCQlHUk9VUF9Q IEJZIHNldF9xdWFudGlmaWVyIGdyb3VwX2J5X2xpc3QKKwkJCUdST1VQX1AgQlkgQUxMCisJCQkJ eworCQkJCQlHcm91cENsYXVzZSAqbiA9IChHcm91cENsYXVzZSAqKSBwYWxsb2Moc2l6ZW9mKEdy b3VwQ2xhdXNlKSk7CisJCQkJCW4tPmRpc3RpbmN0ID0gZmFsc2U7CisJCQkJCW4tPmxpc3QgPSBO SUw7CisJCQkJCW4tPmFsbCA9IHRydWU7CisJCQkJCSQkID0gbjsKKwkJCQl9CisJCQl8IEdST1VQ X1AgQlkgc2V0X3F1YW50aWZpZXIgZ3JvdXBfYnlfbGlzdAogCQkJCXsKIAkJCQkJR3JvdXBDbGF1 c2UgKm4gPSAoR3JvdXBDbGF1c2UgKikgcGFsbG9jKHNpemVvZihHcm91cENsYXVzZSkpOwogCiAJ CQkJCW4tPmRpc3RpbmN0ID0gJDMgPT0gU0VUX1FVQU5USUZJRVJfRElTVElOQ1Q7CiAJCQkJCW4t Pmxpc3QgPSAkNDsKKwkJCQkJbi0+YWxsID0gZmFsc2U7CiAJCQkJCSQkID0gbjsKIAkJCQl9CiAJ CQl8IC8qRU1QVFkqLwpAQCAtMTM1MTYsNiArMTM1MjgsNyBAQCBncm91cF9jbGF1c2U6CiAKIAkJ CQkJbi0+ZGlzdGluY3QgPSBmYWxzZTsKIAkJCQkJbi0+bGlzdCA9IE5JTDsKKwkJCQkJbi0+YWxs ID0gZmFsc2U7CiAJCQkJCSQkID0gbjsKIAkJCQl9CiAJCTsKQEAgLTE3NjE4LDYgKzE3NjMxLDcg QEAgUExwZ1NRTF9FeHByOiBvcHRfZGlzdGluY3RfY2xhdXNlIG9wdF90YXJnZXRfbGlzdAogCQkJ CQluLT53aGVyZUNsYXVzZSA9ICQ0OwogCQkJCQluLT5ncm91cENsYXVzZSA9ICgkNSktPmxpc3Q7 CiAJCQkJCW4tPmdyb3VwRGlzdGluY3QgPSAoJDUpLT5kaXN0aW5jdDsKKwkJCQkJbi0+Z3JvdXBB bGwgPSAoJDUpLT5hbGw7CiAJCQkJCW4tPmhhdmluZ0NsYXVzZSA9ICQ2OwogCQkJCQluLT53aW5k b3dDbGF1c2UgPSAkNzsKIAkJCQkJbi0+c29ydENsYXVzZSA9ICQ4OwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2NsYXVzZS5jCmluZGV4IDlmMjBhNzBjZTEzLi45YzI2YWZkMWYzYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9jbGF1c2UuYwpAQCAtOTAsOCArOTAsNiBAQCBzdGF0aWMgaW50CWdldF9tYXRjaGluZ19s b2NhdGlvbihpbnQgc29ydGdyb3VwcmVmLAogCQkJCQkJCQkgIExpc3QgKnNvcnRncm91cHJlZnMs IExpc3QgKmV4cHJzKTsKIHN0YXRpYyBMaXN0ICpyZXNvbHZlX3VuaXF1ZV9pbmRleF9leHByKFBh cnNlU3RhdGUgKnBzdGF0ZSwgSW5mZXJDbGF1c2UgKmluZmVyLAogCQkJCQkJCQkJICAgUmVsYXRp b24gaGVhcFJlbCk7Ci1zdGF0aWMgTGlzdCAqYWRkVGFyZ2V0VG9Hcm91cExpc3QoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBUYXJnZXRFbnRyeSAqdGxlLAotCQkJCQkJCQkgIExpc3QgKmdyb3VwbGlzdCwg TGlzdCAqdGFyZ2V0bGlzdCwgaW50IGxvY2F0aW9uKTsKIHN0YXRpYyBXaW5kb3dDbGF1c2UgKmZp bmRXaW5kb3dDbGF1c2UoTGlzdCAqd2NsaXN0LCBjb25zdCBjaGFyICpuYW1lKTsKIHN0YXRpYyBO b2RlICp0cmFuc2Zvcm1GcmFtZU9mZnNldChQYXJzZVN0YXRlICpwc3RhdGUsIGludCBmcmFtZU9w dGlvbnMsCiAJCQkJCQkJCSAgT2lkIHJhbmdlb3BmYW1pbHksIE9pZCByYW5nZW9wY2ludHlwZSwg T2lkICppblJhbmdlRnVuYywKQEAgLTI1OTgsNiArMjU5Niw5IEBAIHRyYW5zZm9ybUdyb3VwaW5n U2V0KExpc3QgKipmbGF0cmVzdWx0LAogICogR1JPVVAgQlkgaXRlbXMgd2lsbCBiZSBhZGRlZCB0 byB0aGUgdGFyZ2V0bGlzdCAoYXMgcmVzanVuayBjb2x1bW5zKQogICogaWYgbm90IGFscmVhZHkg cHJlc2VudCwgc28gdGhlIHRhcmdldGxpc3QgbXVzdCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLgog ICoKKyAqIElmIEdST1VQIEJZIEFMTCBpcyBzcGVjaWZpZWQsIHRoZSBncm91cENsYXVzZSB3aWxs IGJlIGluZmVycmVkIHRvIGJlIGFsbAorICogbm9uLWFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBpbiB0 aGUgdGFyZ2V0TGlzdC4KKyAqCiAgKiBUaGlzIGlzIGFsc28gdXNlZCBmb3Igd2luZG93IFBBUlRJ VElPTiBCWSBjbGF1c2VzICh3aGljaCBhY3QgYWxtb3N0IHRoZQogICogc2FtZSwgYnV0IGFyZSBh bHdheXMgaW50ZXJwcmV0ZWQgcGVyIFNRTDk5IHJ1bGVzKS4KICAqCkBAIC0zNTMzLDcgKzM1MzQs NyBAQCBhZGRUYXJnZXRUb1NvcnRMaXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVGFyZ2V0RW50cnkg KnRsZSwKICAqCiAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIFNvcnRHcm91cENsYXVzZSBsaXN0Lgog ICovCi1zdGF0aWMgTGlzdCAqCitMaXN0ICoKIGFkZFRhcmdldFRvR3JvdXBMaXN0KFBhcnNlU3Rh dGUgKnBzdGF0ZSwgVGFyZ2V0RW50cnkgKnRsZSwKIAkJCQkJIExpc3QgKmdyb3VwbGlzdCwgTGlz dCAqdGFyZ2V0bGlzdCwgaW50IGxvY2F0aW9uKQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CmluZGV4IGRlZmNkYWE4YjM0Li5hYTk3Y2MxMWM3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwpAQCAtNjE4Niw3ICs2MTg2LDEwIEBAIGdldF9iYXNpY19zZWxlY3RfcXVlcnkoUXVlcnkg KnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAJCXNhdmVfaW5ncm91cGJ5ID0gY29u dGV4dC0+aW5Hcm91cEJ5OwogCQljb250ZXh0LT5pbkdyb3VwQnkgPSB0cnVlOwogCi0JCWlmIChx dWVyeS0+Z3JvdXBpbmdTZXRzID09IE5JTCkKKwkJaWYgKHF1ZXJ5LT5ncm91cEFsbCkKKwkJCWFw cGVuZENvbnRleHRLZXl3b3JkKGNvbnRleHQsICIgQUxMICIsCisJCQkJCQkJCSAtUFJFVFRZSU5E RU5UX1NURCwgUFJFVFRZSU5ERU5UX1NURCwgMSk7CisJCWVsc2UgaWYgKHF1ZXJ5LT5ncm91cGlu Z1NldHMgPT0gTklMKQogCQl7CiAJCQlzZXAgPSAiIjsKIAkJCWZvcmVhY2gobCwgcXVlcnktPmdy b3VwQ2xhdXNlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IGYxNzA2ZGY1OGZkLi5iMGMxMjky ZDE2YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMjE1LDYgKzIxNSw3IEBAIHR5cGVkZWYg c3RydWN0IFF1ZXJ5CiAKIAlMaXN0CSAgICpncm91cENsYXVzZTsJLyogYSBsaXN0IG9mIFNvcnRH cm91cENsYXVzZSdzICovCiAJYm9vbAkJZ3JvdXBEaXN0aW5jdDsJLyogaXMgdGhlIGdyb3VwIGJ5 IGNsYXVzZSBkaXN0aW5jdD8gKi8KKwlib29sCQlncm91cEFsbDsJLyogaXMgdGhlIGdyb3VwIGJ5 IGNsYXVzZSBkaXN0aW5jdD8gKi8KIAogCUxpc3QJICAgKmdyb3VwaW5nU2V0czsJLyogYSBsaXN0 IG9mIEdyb3VwaW5nU2V0J3MgaWYgcHJlc2VudCAqLwogCkBAIC0yMTkyLDYgKzIxOTMsNyBAQCB0 eXBlZGVmIHN0cnVjdCBTZWxlY3RTdG10CiAJTm9kZQkgICAqd2hlcmVDbGF1c2U7CS8qIFdIRVJF IHF1YWxpZmljYXRpb24gKi8KIAlMaXN0CSAgICpncm91cENsYXVzZTsJLyogR1JPVVAgQlkgY2xh dXNlcyAqLwogCWJvb2wJCWdyb3VwRGlzdGluY3Q7CS8qIElzIHRoaXMgR1JPVVAgQlkgRElTVElO Q1Q/ICovCisJYm9vbAkJZ3JvdXBBbGw7CQkvKiBJcyB0aGlzIEdST1VQIEJZIEFMTD8gKi8KIAlO b2RlCSAgICpoYXZpbmdDbGF1c2U7CS8qIEhBVklORyBjb25kaXRpb25hbC1leHByZXNzaW9uICov CiAJTGlzdAkgICAqd2luZG93Q2xhdXNlOwkvKiBXSU5ET1cgd2luZG93X25hbWUgQVMgKC4uLiks IC4uLiAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgg Yi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgKaW5kZXggM2U5ODk0OTI2ZGUuLmE4 YThmNzUyMjg3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2VfY2xhdXNlLmgK KysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX2NsYXVzZS5oCkBAIC01MCw2ICs1MCw4IEBA IGV4dGVybiBMaXN0ICphZGRUYXJnZXRUb1NvcnRMaXN0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgVGFy Z2V0RW50cnkgKnRsZSwKIAkJCQkJCQkJIExpc3QgKnNvcnRsaXN0LCBMaXN0ICp0YXJnZXRsaXN0 LCBTb3J0QnkgKnNvcnRieSk7CiBleHRlcm4gSW5kZXggYXNzaWduU29ydEdyb3VwUmVmKFRhcmdl dEVudHJ5ICp0bGUsIExpc3QgKnRsaXN0KTsKIGV4dGVybiBib29sIHRhcmdldElzSW5Tb3J0TGlz dChUYXJnZXRFbnRyeSAqdGxlLCBPaWQgc29ydG9wLCBMaXN0ICpzb3J0TGlzdCk7CitleHRlcm4g TGlzdCAqYWRkVGFyZ2V0VG9Hcm91cExpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBUYXJnZXRFbnRy eSAqdGxlLAorCQkJCQkJCQkgIExpc3QgKmdyb3VwbGlzdCwgTGlzdCAqdGFyZ2V0bGlzdCwgaW50 IGxvY2F0aW9uKTsKIAogLyogZnVuY3Rpb25zIGluIHBhcnNlX2pzb250YWJsZS5jICovCiBleHRl cm4gUGFyc2VOYW1lc3BhY2VJdGVtICp0cmFuc2Zvcm1Kc29uVGFibGUoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBKc29uVGFibGUgKmp0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvYWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMu b3V0CmluZGV4IDFmMjRmNmZmZDFmLi43NGJkZmMyNGJkYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CkBAIC0xNTU3LDYgKzE1NTcsMTM5IEBAIGRyb3AgdGFibGUg dDI7CiBkcm9wIHRhYmxlIHQzOwogZHJvcCB0YWJsZSBwX3QxOwogLS0KKy0tIFRlc3QgR1JPVVAg QlkgQUxMCistLQorQ1JFQVRFIFRFTVAgVEFCTEUgdDEgKAorICBhIGludCwKKyAgYiBpbnQsCisg IGMgaW50CispOworQ09QWSB0MSBGUk9NIFNURElOOworLS0gYmFzaWMgZmllbGQgY2hlY2sKK1NF TEVDVCBiLCBDT1VOVCgqKSBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKyBiIHwgY291bnQgCistLS0r LS0tLS0tLQorIDMgfCAgICAgMgorIDIgfCAgICAgMgorIDEgfCAgICAgMQorKDMgcm93cykKKwor LS0gdGhyb3cgYSBudWxsIGluIHRoZSB2YWx1ZXMgdG9vCitTRUxFQ1QgYSwgQ09VTlQoYSkgRlJP TSB0MSBHUk9VUCBCWSBBTEw7CisgYSB8IGNvdW50IAorLS0tKy0tLS0tLS0KKyAgIHwgICAgIDAK KyAxIHwgICAgIDQKKygyIHJvd3MpCisKKy0tIG11bHRpcGxlIGNvbHVtbnMsIG5vbi1jb25zZWN1 dGl2ZSBvcmRlcgorU0VMRUNUIGEsIFNVTShiKSwgYiBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKyBh IHwgc3VtIHwgYiAKKy0tLSstLS0tLSstLS0KKyAxIHwgICAxIHwgMQorIDEgfCAgIDYgfCAzCisg MSB8ICAgMiB8IDIKKyAgIHwgICAyIHwgMgorKDQgcm93cykKKworLS0gbXVsdGkgY29sdW1ucywg bm8gYWdncmVnYXRlCitTRUxFQ1QgYSArIGIgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisgP2NvbHVt bj8gCistLS0tLS0tLS0tCisgICAgICAgICAKKyAgICAgICAgMworICAgICAgICA0CisgICAgICAg IDIKKyg0IHJvd3MpCisKKy0tIG5vbi10b3AtbGV2ZWwgZXhwcmVzc2lvbgorU0VMRUNUIGEsIFNV TShiKSArIDQgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisgYSB8ID9jb2x1bW4/IAorLS0tKy0tLS0t LS0tLS0KKyAgIHwgICAgICAgIDYKKyAxIHwgICAgICAgMTMKKygyIHJvd3MpCisKKy0tIGluY2x1 ZGluZyBncm91cGVkIGNvbHVtbgorU0VMRUNUIGEsIFNVTShiKSArIGEgRlJPTSB0MSBHUk9VUCBC WSBBTEw7CisgYSB8ID9jb2x1bW4/IAorLS0tKy0tLS0tLS0tLS0KKyAgIHwgICAgICAgICAKKyAx IHwgICAgICAgMTAKKygyIHJvd3MpCisKKy0tIG9vcHMgYWxsIGFnZ3JlZ2F0ZXMKK1NFTEVDVCBD T1VOVChhKSwgU1VNKGIpIEZST00gdDEgR1JPVVAgQlkgQUxMOworIGNvdW50IHwgc3VtIAorLS0t LS0tLSstLS0tLQorICAgICA0IHwgIDExCisoMSByb3cpCisKKy0tIGVtcHR5IGNvbHVtbiBsaXN0 CitTRUxFQ1QgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CistLQorKDUgcm93cykKKworLS0gZmlsdGVy CitTRUxFQ1QgYSwgQ09VTlQoYSkgRklMVEVSKFdIRVJFIGIgPSAyKSBGUk9NIHQxIEdST1VQIEJZ IEFMTDsKKyBhIHwgY291bnQgCistLS0rLS0tLS0tLQorICAgfCAgICAgMAorIDEgfCAgICAgMQor KDIgcm93cykKKworLS0gYWxsIGNvbHMKK1NFTEVDVCAqIEZST00gdDEgR1JPVVAgQlkgQUxMOwor IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgICB8IDIgfCAyCisgMSB8IDMgfCAxCisgMSB8IDIg fCAyCisgMSB8IDEgfCAxCisoNCByb3dzKQorCitTRUxFQ1QgKiwgY291bnQoKikgRlJPTSB0MSBH Uk9VUCBCWSBBTEw7CisgYSB8IGIgfCBjIHwgY291bnQgCistLS0rLS0tKy0tLSstLS0tLS0tCisg ICB8IDIgfCAyIHwgICAgIDEKKyAxIHwgMyB8IDEgfCAgICAgMgorIDEgfCAyIHwgMiB8ICAgICAx CisgMSB8IDEgfCAxIHwgICAgIDEKKyg0IHJvd3MpCisKKy0tIGV4cHJlc3Npb24gd2l0aG91dCBp bmNsdWRpbmcgYWdncmVnYXRlIGNvbHVtbnMKK1NFTEVDVCBhLCBTVU0oYikgKyBjIEZST00gdDEg R1JPVVAgQlkgQUxMOworRVJST1I6ICBjb2x1bW4gInQxLmMiIG11c3QgYXBwZWFyIGluIHRoZSBH Uk9VUCBCWSBjbGF1c2Ugb3IgYmUgdXNlZCBpbiBhbiBhZ2dyZWdhdGUgZnVuY3Rpb24KK0xJTkUg MTogU0VMRUNUIGEsIFNVTShiKSArIGMgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCistLSBzdWJxdWVyeQorU0VMRUNUIChTRUxFQ1QgYSBGUk9NIHQx IExJTUlUIDEpLCBTVU0oYikgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisgYSB8IHN1bSAKKy0tLSst LS0tLQorIDEgfCAgMTEKKygxIHJvdykKKworLS0gY3RlCitXSVRIIGFfcXVlcnkgQVMgKFNFTEVD VCBhLCBTVU0oYikgQVMgc3VtX2IgRlJPTSB0MSBHUk9VUCBCWSBBTEwpCitTRUxFQ1QgQVZHKGEp LCBzdW1fYiAgRlJPTSBhX3F1ZXJ5IEdST1VQIEJZIEFMTDsKKyAgICAgICAgICBhdmcgICAgICAg ICAgIHwgc3VtX2IgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorIDEuMDAwMDAw MDAwMDAwMDAwMDAwMDAgfCAgICAgOQorICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMgor KDIgcm93cykKKworQ1JFQVRFIFZJRVcgdjEgQVMgU0VMRUNUIGIsIENPVU5UKCopIEZST00gdDEg R1JPVVAgQlkgQUxMOworTk9USUNFOiAgdmlldyAidjEiIHdpbGwgYmUgYSB0ZW1wb3Jhcnkgdmll dworXHN2IHYxCitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHBnX3RlbXBfOTMudjEgQVMKKyBTRUxF Q1QgYiwKKyAgICBjb3VudCgqKSBBUyBjb3VudAorICAgRlJPTSB0MQorICBHUk9VUCBCWQorICBB TEwgCitEUk9QIFZJRVcgdjE7CitEUk9QIFRBQkxFIHQxOworLS0KIC0tIFRlc3QgR1JPVVAgQlkg bWF0Y2hpbmcgb2Ygam9pbiBjb2x1bW5zIHRoYXQgYXJlIHR5cGUtY29lcmNlZCBkdWUgdG8gVVNJ TkcKIC0tCiBjcmVhdGUgdGVtcCB0YWJsZSB0MShmMSBpbnQsIGYyIGludCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2FnZ3JlZ2F0ZXMuc3FsCmluZGV4IDYyNTQwYjFmZmE0Li4xMWQ2MTYxY2RmNCAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKQEAgLTU0OSw2ICs1NDksNzIgQEAgZHJvcCB0YWJs ZSB0MjsKIGRyb3AgdGFibGUgdDM7CiBkcm9wIHRhYmxlIHBfdDE7CiAKKworLS0KKy0tIFRlc3Qg R1JPVVAgQlkgQUxMCistLQorCitDUkVBVEUgVEVNUCBUQUJMRSB0MSAoCisgIGEgaW50LAorICBi IGludCwKKyAgYyBpbnQKKyk7CisKK0NPUFkgdDEgRlJPTSBTVERJTjsKKzEJMQkxCisxCTIJMgor MQkzCTEKK1xOCTIJMgorMQkzCTEKK1wuCisKKy0tIGJhc2ljIGZpZWxkIGNoZWNrCitTRUxFQ1Qg YiwgQ09VTlQoKikgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisKKy0tIHRocm93IGEgbnVsbCBpbiB0 aGUgdmFsdWVzIHRvbworU0VMRUNUIGEsIENPVU5UKGEpIEZST00gdDEgR1JPVVAgQlkgQUxMOwor CistLSBtdWx0aXBsZSBjb2x1bW5zLCBub24tY29uc2VjdXRpdmUgb3JkZXIKK1NFTEVDVCBhLCBT VU0oYiksIGIgRlJPTSB0MSBHUk9VUCBCWSBBTEw7CisKKy0tIG11bHRpIGNvbHVtbnMsIG5vIGFn Z3JlZ2F0ZQorU0VMRUNUIGEgKyBiIEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBub24tdG9w LWxldmVsIGV4cHJlc3Npb24KK1NFTEVDVCBhLCBTVU0oYikgKyA0IEZST00gdDEgR1JPVVAgQlkg QUxMOworCistLSBpbmNsdWRpbmcgZ3JvdXBlZCBjb2x1bW4KK1NFTEVDVCBhLCBTVU0oYikgKyBh IEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBvb3BzIGFsbCBhZ2dyZWdhdGVzCitTRUxFQ1Qg Q09VTlQoYSksIFNVTShiKSBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKworLS0gZW1wdHkgY29sdW1u IGxpc3QKK1NFTEVDVCBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKworLS0gZmlsdGVyCitTRUxFQ1Qg YSwgQ09VTlQoYSkgRklMVEVSKFdIRVJFIGIgPSAyKSBGUk9NIHQxIEdST1VQIEJZIEFMTDsKKwor LS0gYWxsIGNvbHMKK1NFTEVDVCAqIEZST00gdDEgR1JPVVAgQlkgQUxMOworU0VMRUNUICosIGNv dW50KCopIEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBleHByZXNzaW9uIHdpdGhvdXQgaW5j bHVkaW5nIGFnZ3JlZ2F0ZSBjb2x1bW5zCitTRUxFQ1QgYSwgU1VNKGIpICsgYyBGUk9NIHQxIEdS T1VQIEJZIEFMTDsKKworLS0gc3VicXVlcnkKK1NFTEVDVCAoU0VMRUNUIGEgRlJPTSB0MSBMSU1J VCAxKSwgU1VNKGIpIEZST00gdDEgR1JPVVAgQlkgQUxMOworCistLSBjdGUKK1dJVEggYV9xdWVy eSBBUyAoU0VMRUNUIGEsIFNVTShiKSBBUyBzdW1fYiBGUk9NIHQxIEdST1VQIEJZIEFMTCkKK1NF TEVDVCBBVkcoYSksIHN1bV9iICBGUk9NIGFfcXVlcnkgR1JPVVAgQlkgQUxMOworCitDUkVBVEUg VklFVyB2MSBBUyBTRUxFQ1QgYiwgQ09VTlQoKikgRlJPTSB0MSBHUk9VUCBCWSBBTEw7Citcc3Yg djEKKworRFJPUCBWSUVXIHYxOworRFJPUCBUQUJMRSB0MTsKKwogLS0KIC0tIFRlc3QgR1JPVVAg QlkgbWF0Y2hpbmcgb2Ygam9pbiBjb2x1bW5zIHRoYXQgYXJlIHR5cGUtY29lcmNlZCBkdWUgdG8g VVNJTkcKIC0tCi0tIAoyLjQ5LjAKCg== --00000000000017aa2c063fb73824--