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 1tb2t0-007VYx-RC for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Jan 2025 19:29:07 +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 1tb2sz-003CWd-R0 for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Jan 2025 19:29:05 +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 1tb2sz-003CWV-6o for pgsql-hackers@lists.postgresql.org; Thu, 23 Jan 2025 19:29:05 +0000 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tb2sw-00192X-0U for pgsql-hackers@postgresql.org; Thu, 23 Jan 2025 19:29:04 +0000 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-2eec9b3a1bbso2019992a91.3 for ; Thu, 23 Jan 2025 11:29:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1737660542; x=1738265342; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=Lwpav6BcNndahMZVLCW7lVRVYrBp6jp8m9xsAWlosyI=; b=T97OMq9LoN9YLb9gWNX76xAlSob1wF3JP56k3UFp8JyQdGW1p7HO+EPFQfWyLA9r0F jtMeuiHIuDe0ckd2rsfCq4jni4w3k1o7dVOErvg3s0NxwceWeBGZTNxODiGDb1ptqXev QSFBrO83BMmMRU93LmNZjtRdZ+g/WLy5oYdReDdcYjUc1J1ZuXn7alKGndQ0MEEsCfmH zCpy0kdeV6WZaiEWCQiITeywIblZPH1jVM08QZEOQD61HqQPwVYTx/cy8Os+5sdZ02u5 Y5Og79lAWfB9GrhSksBhOo1zZe2rgKk6NuREX2qi0XOacoAuCTJWMqUH4eoSZeigYqxj Uvhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737660542; x=1738265342; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Lwpav6BcNndahMZVLCW7lVRVYrBp6jp8m9xsAWlosyI=; b=VjvqWxO6KvOI7uwmTbo924zYmlqercuMn1HYsm+/VDUZp3NLm5DV/8+90Z2Svm+AeE hv5URYEG946Vg0mlwI4MmEpfVp3YqoCKdARVmueWozsVJBGv3a20V0tclL2iymsD2hy6 WLs4HxvO3pYK54I+ubTjcBHaGO+JJaL8EMXciLi+BqYsq4k9HMeGWgzSgCJAr5OgWBlB D3sLkttyTWA3LubsAE9RfxBv3YZqQurpAU/xhdSBam7xobaAUh+CK5aZwzb8oicuHGcw r6IS8U7uOBiS/6zhxV5dLnE5Xgfx5aEDdvLTKxRXCnN3f8boYseSmEDYDcDGi18ZIG3b ayZg== X-Gm-Message-State: AOJu0YxOXqffp75b27kyyOxGRKMc1/pILsXCBFc5gybH7gAahNijPh9p 2PapXMBue/FxA+LHyBit7Y4DzfahCs+TgI8e6T5Swyx5o5Vlf1NQHqjwTFqQAA== X-Gm-Gg: ASbGncuKhWrnEYjhvZYgi1qjKT2ag1jYzoAO6h0+oJG7s9cIio6a5ruoUkDjF0Bcpfn QCH6CrAA5cH+9GkD47NEucZTjXXgZcTsHum/crSQE9kUeL53Bg90hGIsHNvxXchok2Axf4zPnTn /86v9nLY1KG7cRyuusv011MkJMerM5rr5M7Z+Opm4+SEsT0qqSbxcwg3wL1jA7Y5aCOH7xn636e Gb+y4l0El5Jb3A/rh9ysmyuwiyY0f7/KxH8PHCfWUjImMdnGz96t5/g/ycT3zzfSXW2Bm7BHhGN j6RAOImLzP+81aY/3y/acscCaKRw+AZnjyaTcfL2hhZxmKs= X-Google-Smtp-Source: AGHT+IGWV34z6EuetFHvQOwTCt5ugc8XzAtCAfWr67i2l7WFFPJgdPi2jtAnyNCexItu+YHaShLtGw== X-Received: by 2002:a17:90b:3a05:b0:2ee:ed1c:e451 with SMTP id 98e67ed59e1d1-2f782cb083dmr41878432a91.15.1737660540198; Thu, 23 Jan 2025 11:29:00 -0800 (PST) Received: from jeff-laptop.lan (c-76-102-242-158.hsd1.ca.comcast.net. [76.102.242.158]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2f7ffa5c5fbsm78535a91.20.2025.01.23.11.28.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jan 2025 11:28:59 -0800 (PST) Message-ID: Subject: Re: Add CASEFOLD() function. From: Jeff Davis To: Peter Eisentraut , Joe Conway , Ian Lawrence Barwick Cc: pgsql-hackers@postgresql.org Date: Thu, 23 Jan 2025 11:28:58 -0800 In-Reply-To: <7134f83a3242a1f04cf91c259ec98ecfe56367ed.camel@j-davis.com> References: <47716a78-eb0b-4728-8991-fc0d958a01c9@joeconway.com> <8c384b0d-00f2-4515-8e60-ff7d0d4c093a@eisentraut.org> <898752524b1ad658c5fdae789f823a0dc52e6171.camel@j-davis.com> <610a56de2bd958e96c149ca60420db30e7d51588.camel@j-davis.com> <7134f83a3242a1f04cf91c259ec98ecfe56367ed.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-Z7bg8ef7qC/dFSa64HW7" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-Z7bg8ef7qC/dFSa64HW7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 2025-01-17 at 16:34 -0800, Jeff Davis wrote: > v5 attached. v6 attached. I plan to commit this soon. A couple things to note: * The ICU API for lower/title/uppercasing is slightly different from folding. The former accept a locale, while the latter just has an option which is relevant only to languages 'az' and 'tr'. So the patch checks for those two languages to enable the option, so that ICU is consistently locale-aware for all the functions. I also added ICU tests. * I'm leaving out the normalization, which is not required for Unicode Default Caseless Matchinng, as mentioned in the last email. That simplifies the SQL function as well as the implementation. There was some discussion on normalization upthread. Regards, Jeff Davis --=-Z7bg8ef7qC/dFSa64HW7 Content-Disposition: attachment; filename="v6-0001-Add-SQL-function-CASEFOLD.patch" Content-Type: text/x-patch; name="v6-0001-Add-SQL-function-CASEFOLD.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiNWUyNWUzYjFiMDc1YzViNzk2ODJlM2M4MTJkZjk3M2Q5ZDIyMDQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDExIERlYyAyMDI0IDIzOjQ2OjQzIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2Nl0gQWRkIFNR TCBmdW5jdGlvbiBDQVNFRk9MRCgpLgoKLS0tIENBVFZFUlNJT04gLS0tCgpVc2VmdWwgZm9yIGNh c2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24uIEF2b2lkcyBzb21lIG9mIHRoZQplZGdl LWNhc2UgcHJvYmxlbXMgd2l0aCB1c2luZyBMT1dFUigpIGZvciB0aGF0IHB1cnBvc2UuCgpEaXNj dXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2ExODg2ZGRmY2Q4ZjYwY2IzZTkwNWM5MzAwOWI2 NDZiNGNmYjc0YzUuY2FtZWwlNDBqLWRhdmlzLmNvbQpSZXZpZXdlZC1ieTogSWFuIExhd3JlbmNl IEJhcndpY2sKLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgICAgICAg ICAgfCA0NCArKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMg ICAgICAgICAgICB8IDY5ICsrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9vcmFjbGVfY29tcGF0LmMgICAgICAgICB8IDE2ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvcGdfbG9jYWxlLmMgICAgICAgICAgICAgfCAyNCArKysrKysrCiBzcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyAgICAgfCAxMCArKysKIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9wZ19sb2NhbGVfaWN1LmMgICAgICAgICB8IDU4ICsrKysrKysrKysrKysrKysKIHNyYy9p bmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oICAgICAgICAgICAgICB8ICAyICstCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgMyArCiBzcmMvaW5jbHVk ZS91dGlscy9mb3JtYXR0aW5nLmggICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvaW5jbHVkZS91 dGlscy9wZ19sb2NhbGUuaCAgICAgICAgICAgICAgICAgfCAgMyArCiAuLi4vcmVncmVzcy9leHBl Y3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dCAgICAgfCAxMiArKysrCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NvbGxhdGUudXRmOC5vdXQgICAgfCAxNCArKysrCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9jb2xsYXRlLmljdS51dGY4LnNxbCAgICAgfCAgMyArCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9jb2xsYXRlLnV0Zjguc3FsICAgICAgICAgfCAgNiArKwogMTQgZmlsZXMgY2hhbmdlZCwgMjYy IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2Z1bmMuc2dtbCBiL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggNTY3OGU3NjIxYTUuLmFj YzE0OTM0NzIxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9mdW5jLnNnbWwKQEAgLTI1OTYsNyArMjU5Niw3IEBAIFNFTEVDVCBOT1QoUk9XKHRh YmxlLiopIElTIE5PVCBOVUxMKSBGUk9NIFRBQkxFOyAtLSBkZXRlY3QgYXQgbGVhc3Qgb25lIG51 bGwgaW4KIAogICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgotICAgICAgICA8aW5kZXh0ZXJtPgorICAg ICAgICA8aW5kZXh0ZXJtIGlkPSJmdW5jdGlvbi1sb3dlciI+CiAgICAgICAgICA8cHJpbWFyeT5s b3dlcjwvcHJpbWFyeT4KICAgICAgICAgPC9pbmRleHRlcm0+CiAgICAgICAgIDxmdW5jdGlvbj5s b3dlcjwvZnVuY3Rpb24+ICggPHR5cGU+dGV4dDwvdHlwZT4gKQpAQCAtMjY1Nyw3ICsyNjU3LDcg QEAgU0VMRUNUIE5PVChST1codGFibGUuKikgSVMgTk9UIE5VTEwpIEZST00gVEFCTEU7IC0tIGRl dGVjdCBhdCBsZWFzdCBvbmUgbnVsbCBpbgogCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSBy b2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+Ci0gICAg ICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxpbmRleHRlcm0gaWQ9ImZ1bmN0aW9uLW5vcm1hbGl6 ZSI+CiAgICAgICAgICA8cHJpbWFyeT5ub3JtYWxpemU8L3ByaW1hcnk+CiAgICAgICAgIDwvaW5k ZXh0ZXJtPgogICAgICAgICA8aW5kZXh0ZXJtPgpAQCAtMzEwOSw2ICszMTA5LDQ2IEBAIFNFTEVD VCBOT1QoUk9XKHRhYmxlLiopIElTIE5PVCBOVUxMKSBGUk9NIFRBQkxFOyAtLSBkZXRlY3QgYXQg bGVhc3Qgb25lIG51bGwgaW4KICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93Pgog CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8 cHJpbWFyeT5jYXNlZm9sZDwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAg IDxmdW5jdGlvbj5jYXNlZm9sZDwvZnVuY3Rpb24+ICggPHR5cGU+dGV4dDwvdHlwZT4gKQorICAg ICAgICA8cmV0dXJudmFsdWU+dGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAg ICAgIDxwYXJhPgorICAgICAgICBQZXJmb3JtcyBjYXNlIGZvbGRpbmcgb2YgdGhlIGlucHV0IHN0 cmluZyBhY2NvcmRpbmcgdG8gdGhlIGNvbGxhdGlvbi4KKyAgICAgICAgQ2FzZSBmb2xkaW5nIGlz IHNpbWlsYXIgdG8gY2FzZSBjb252ZXJzaW9uLCBidXQgdGhlIHB1cnBvc2Ugb2YgY2FzZQorICAg ICAgICBmb2xkaW5nIGlzIHRvIGZhY2lsaXRhdGUgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29u IG9mIHN0cmluZ3MsCisgICAgICAgIHdoZXJlYXMgdGhlIHB1cnBvc2Ugb2YgY2FzZSBjb252ZXJz aW9uIGlzIHRvIGNvbnZlcnQgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgIGNhc2VkIGZvcm0uICBU aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgc2VydmVyIGVuY29kaW5nCisg ICAgICAgIGlzIDxsaXRlcmFsPlVURjg8L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgT3JkaW5hcmlseSwgY2FzZSBmb2xkaW5nIHNpbXBseSBjb252ZXJ0 cyB0byBsb3dlcmNhc2UsIGJ1dCB0aGVyZSBhcmUgYQorICAgICAgICBmZXcgbm90YWJsZSBleGNl cHRpb25zLiAgRm9yIGluc3RhbmNlLCB0aGUgY2hhcmFjdGVyCisgICAgICAgIDxsaXRlcmFsPs6j PC9saXRlcmFsPiAoVSswM0EzKSBoYXMgdHdvIGxvd2VyY2FzZSBmb3JtczoKKyAgICAgICAgPGxp dGVyYWw+z4M8L2xpdGVyYWw+IChVKzAzQzMpIGFuZCA8bGl0ZXJhbD7PgjwvbGl0ZXJhbD4gKFUr MDNDMik7IGNhc2UKKyAgICAgICAgZm9sZGluZyBpbiB0aGUgPGxpdGVyYWw+UEdfQ19VVEY4PC9s aXRlcmFsPiBjb2xsYXRpb24gbWFwcyBhbGwgdGhyZWUKKyAgICAgICAgZm9ybXMgdG8gPGxpdGVy YWw+z4M8L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg QW5vdGhlciBiZW5lZml0IG9mIGNhc2UgZm9sZGluZyBpcyB0aGF0IHRoZSByZXN1bHRzIGRvbid0 IGNoYW5nZSBmb3IKKyAgICAgICAgZXhpc3RpbmcgY2hhcmFjdGVycyBpbiBuZXcgdmVyc2lvbnMg b2YgVW5pY29kZS4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5j dGlvbj5jYXNlZm9sZDwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGZvciBVbmljb2RlIERlZmF1bHQg Q2FzZWxlc3MKKyAgICAgICAgTWF0Y2hpbmcuICBJdCBkb2VzIG5vdCBhbHdheXMgcHJlc2VydmUg dGhlIG5vcm1hbGl6ZWQgZm9ybSBvZiB0aGUKKyAgICAgICAgaW5wdXQgc3RyaW5nIChzZWUgPHhy ZWYgbGlua2VuZD0iZnVuY3Rpb24tbm9ybWFsaXplIi8+KS4KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFRoZSA8bGl0ZXJhbD5saWJjPC9saXRlcmFsPiBwcm92aWRlciBk b2Vzbid0IHN1cHBvcnQgY2FzZSBmb2xkaW5nLCBzbworICAgICAgICA8ZnVuY3Rpb24+Y2FzZWZv bGQ8L2Z1bmN0aW9uPiBpcyBpZGVudGljYWwgdG8gPHhyZWYKKyAgICAgICAgbGlua2VuZD0iZnVu Y3Rpb24tbG93ZXIiLz4uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKwog ICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEg cm9sZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9mb3JtYXR0aW5nLmMKaW5kZXggN2M0YzRhYTA3ZDUuLjI3MjBkMzkwMmFiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9mb3JtYXR0aW5nLmMKQEAgLTE4MTksNiArMTgxOSw3NSBAQCBzdHJfaW5pdGNhcChj b25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCXJldHVybiByZXN1 bHQ7CiB9CiAKKy8qCisgKiBjb2xsYXRpb24tYXdhcmUsIHdpZGUtY2hhcmFjdGVyLWF3YXJlIGNh c2UgZm9sZGluZworICoKKyAqIFdlIHBhc3MgdGhlIG51bWJlciBvZiBieXRlcyBzbyB3ZSBjYW4g cGFzcyB2YXJsZW5hIGFuZCBjaGFyKgorICogdG8gdGhpcyBmdW5jdGlvbi4gIFRoZSByZXN1bHQg aXMgYSBwYWxsb2MnZCwgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqLworY2hhciAqCitzdHJf Y2FzZWZvbGQoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcywgT2lkIGNvbGxpZCkKK3sK KwljaGFyCSAgICpyZXN1bHQ7CisJcGdfbG9jYWxlX3QgbXlsb2NhbGU7CisKKwlpZiAoIWJ1ZmYp CisJCXJldHVybiBOVUxMOworCisJaWYgKCFPaWRJc1ZhbGlkKGNvbGxpZCkpCisJeworCQkvKgor CQkgKiBUaGlzIHR5cGljYWxseSBtZWFucyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IHJlc29s dmUgYSBjb25mbGljdAorCQkgKiBvZiBpbXBsaWNpdCBjb2xsYXRpb25zLCBzbyByZXBvcnQgaXQg dGhhdCB3YXkuCisJCSAqLworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf SU5ERVRFUk1JTkFURV9DT0xMQVRJT04pLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1p bmUgd2hpY2ggY29sbGF0aW9uIHRvIHVzZSBmb3IgJXMgZnVuY3Rpb24iLAorCQkJCQkJImxvd2Vy KCkiKSwKKwkJCQkgZXJyaGludCgiVXNlIHRoZSBDT0xMQVRFIGNsYXVzZSB0byBzZXQgdGhlIGNv bGxhdGlvbiBleHBsaWNpdGx5LiIpKSk7CisJfQorCisJaWYgKEdldERhdGFiYXNlRW5jb2Rpbmco KSAhPSBQR19VVEY4KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKKwkJCQkgZXJybXNnKCJVbmljb2RlIGNhc2UgZm9sZGluZyBjYW4gb25seSBi ZSBwZXJmb3JtZWQgaWYgc2VydmVyIGVuY29kaW5nIGlzIFVURjgiKSkpOworCisJbXlsb2NhbGUg PSBwZ19uZXdsb2NhbGVfZnJvbV9jb2xsYXRpb24oY29sbGlkKTsKKworCS8qIEMvUE9TSVggY29s bGF0aW9ucyB1c2UgdGhpcyBwYXRoIHJlZ2FyZGxlc3Mgb2YgZGF0YWJhc2UgZW5jb2RpbmcgKi8K KwlpZiAobXlsb2NhbGUtPmN0eXBlX2lzX2MpCisJeworCQlyZXN1bHQgPSBhc2NfdG9sb3dlcihi dWZmLCBuYnl0ZXMpOworCX0KKwllbHNlCisJeworCQljb25zdCBjaGFyICpzcmMgPSBidWZmOwor CQlzaXplX3QJCXNyY2xlbiA9IG5ieXRlczsKKwkJc2l6ZV90CQlkc3RzaXplOworCQljaGFyCSAg ICpkc3Q7CisJCXNpemVfdAkJbmVlZGVkOworCisJCS8qIGZpcnN0IHRyeSBidWZmZXIgb2YgZXF1 YWwgc2l6ZSBwbHVzIHRlcm1pbmF0aW5nIE5VTCAqLworCQlkc3RzaXplID0gc3JjbGVuICsgMTsK KwkJZHN0ID0gcGFsbG9jKGRzdHNpemUpOworCisJCW5lZWRlZCA9IHBnX3N0cmZvbGQoZHN0LCBk c3RzaXplLCBzcmMsIHNyY2xlbiwgbXlsb2NhbGUpOworCQlpZiAobmVlZGVkICsgMSA+IGRzdHNp emUpCisJCXsKKwkJCS8qIGdyb3cgYnVmZmVyIGlmIG5lZWRlZCBhbmQgcmV0cnkgKi8KKwkJCWRz dHNpemUgPSBuZWVkZWQgKyAxOworCQkJZHN0ID0gcmVwYWxsb2MoZHN0LCBkc3RzaXplKTsKKwkJ CW5lZWRlZCA9IHBnX3N0cmZvbGQoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbXlsb2NhbGUp OworCQkJQXNzZXJ0KG5lZWRlZCArIDEgPD0gZHN0c2l6ZSk7CisJCX0KKworCQlBc3NlcnQoZHN0 W25lZWRlZF0gPT0gJ1wwJyk7CisJCXJlc3VsdCA9IGRzdDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCiAvKgogICogQVNDSUktb25seSBsb3dlciBmdW5jdGlvbgogICoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9vcmFjbGVfY29tcGF0LmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvb3JhY2xlX2NvbXBhdC5jCmluZGV4IDJjYmE3Y2QxNjIxLi5hMjRhMmQyMDhmYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L29yYWNsZV9jb21wYXQuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvb3JhY2xlX2NvbXBhdC5jCkBAIC0xMjYsNiArMTI2LDIyIEBAIGlu aXRjYXAoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CiB9CiAK K0RhdHVtCitjYXNlZm9sZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJICAgKmluX3N0cmlu ZyA9IFBHX0dFVEFSR19URVhUX1BQKDApOworCWNoYXIJICAgKm91dF9zdHJpbmc7CisJdGV4dAkg ICAqcmVzdWx0OworCisJb3V0X3N0cmluZyA9IHN0cl9jYXNlZm9sZChWQVJEQVRBX0FOWShpbl9z dHJpbmcpLAorCQkJCQkJCSAgVkFSU0laRV9BTllfRVhIRFIoaW5fc3RyaW5nKSwKKwkJCQkJCQkg IFBHX0dFVF9DT0xMQVRJT04oKSk7CisJcmVzdWx0ID0gY3N0cmluZ190b190ZXh0KG91dF9zdHJp bmcpOworCXBmcmVlKG91dF9zdHJpbmcpOworCisJUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOwor fQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCA5 NDQ0NGFjZDJjNS4uN2Q5MmY1ODBhNTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKQEAg LTEwNiw2ICsxMDYsOCBAQCBleHRlcm4gc2l6ZV90IHN0cnRpdGxlX2J1aWx0aW4oY2hhciAqZHN0 LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCQkJCQkJCSAgIHNzaXplX3Qgc3Jj bGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIHNpemVfdCBzdHJ1cHBlcl9idWlsdGlu KGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJCQkJCQkgICBz c2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBzaXplX3Qgc3RyZm9s ZF9idWlsdGluKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKKwkJ CQkJCQkgIHNzaXplX3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogCiBleHRlcm4gc2l6 ZV90IHN0cmxvd2VyX2ljdShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpz cmMsCiAJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKQEAgLTEx Myw2ICsxMTUsOCBAQCBleHRlcm4gc2l6ZV90IHN0cnRpdGxlX2ljdShjaGFyICpkc3QsIHNpemVf dCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCiAJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdf bG9jYWxlX3QgbG9jYWxlKTsKIGV4dGVybiBzaXplX3Qgc3RydXBwZXJfaWN1KGNoYXIgKmRzdCwg c2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJCQkJCSAgIHNzaXplX3Qgc3JjbGVu LCBwZ19sb2NhbGVfdCBsb2NhbGUpOworZXh0ZXJuIHNpemVfdCBzdHJmb2xkX2ljdShjaGFyICpk c3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCQkgIHNzaXplX3Qgc3Jj bGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwogCiBleHRlcm4gc2l6ZV90IHN0cmxvd2VyX2xpYmMo Y2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAogCQkJCQkJCXNzaXpl X3Qgc3JjbGVuLCBwZ19sb2NhbGVfdCBsb2NhbGUpOwpAQCAtMTQ0Nyw2ICsxNDUxLDI2IEBAIHBn X3N0cnVwcGVyKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3Np emVfdCBzcmNsZW4sCiAJcmV0dXJuIDA7CQkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9 CiAKK3NpemVfdAorcGdfc3RyZm9sZChjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBj aGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkgICBwZ19sb2NhbGVfdCBsb2NhbGUpCit7CisJ aWYgKGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxUSU4pCisJCXJldHVybiBz dHJmb2xkX2J1aWx0aW4oZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxlKTsKKyNpZmRl ZiBVU0VfSUNVCisJZWxzZSBpZiAobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNV KQorCQlyZXR1cm4gc3RyZm9sZF9pY3UoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgbG9jYWxl KTsKKyNlbmRpZgorCS8qIGZvciBsaWJjLCBqdXN0IHVzZSBzdHJsb3dlciAqLworCWVsc2UgaWYg KGxvY2FsZS0+cHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0xJQkMpCisJCXJldHVybiBzdHJsb3dl cl9saWJjKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIGxvY2FsZSk7CisJZWxzZQorCQkvKiBz aG91bGRuJ3QgaGFwcGVuICovCisJCVBHTE9DQUxFX1NVUFBPUlRfRVJST1IobG9jYWxlLT5wcm92 aWRlcik7CisKKwlyZXR1cm4gMDsJCQkJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KK30KKwog LyoKICAqIHBnX3N0cmNvbGwKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv cGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVp bHRpbi5jCmluZGV4IDQzNmUzMmMwY2EwLi4zM2FkMjBiYmYwNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAgLTMxLDYgKzMxLDggQEAgZXh0ZXJuIHNpemVf dCBzdHJ0aXRsZV9idWlsdGluKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIg KnNyYywKIAkJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKIGV4 dGVybiBzaXplX3Qgc3RydXBwZXJfYnVpbHRpbihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBj b25zdCBjaGFyICpzcmMsCiAJCQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxv Y2FsZSk7CitleHRlcm4gc2l6ZV90IHN0cmZvbGRfYnVpbHRpbihjaGFyICpkc3QsIHNpemVfdCBk c3RzaXplLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCQkJICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9j YWxlX3QgbG9jYWxlKTsKIAogCiBzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUKQEAgLTEwNyw2ICsx MDksMTQgQEAgc3RydXBwZXJfYnVpbHRpbihjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsIGNv bnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAJCQkJCQkJbG9jYWxlLT5pbmZvLmJ1aWx0 aW4uY2FzZW1hcF9mdWxsKTsKIH0KIAorc2l6ZV90CitzdHJmb2xkX2J1aWx0aW4oY2hhciAqZGVz dCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAorCQkJ CXBnX2xvY2FsZV90IGxvY2FsZSkKK3sKKwlyZXR1cm4gdW5pY29kZV9zdHJmb2xkKGRlc3QsIGRl c3RzaXplLCBzcmMsIHNyY2xlbiwKKwkJCQkJCSAgIGxvY2FsZS0+aW5mby5idWlsdGluLmNhc2Vt YXBfZnVsbCk7Cit9CisKIHBnX2xvY2FsZV90CiBjcmVhdGVfcGdfbG9jYWxlX2J1aWx0aW4oT2lk IGNvbGxpZCwgTWVtb3J5Q29udGV4dCBjb250ZXh0KQogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9pY3UuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19s b2NhbGVfaWN1LmMKaW5kZXggNTE4NWIwZjcyODkuLmIwYzczZjJlNDNkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2ljdS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ19sb2NhbGVfaWN1LmMKQEAgLTU0LDYgKzU0LDggQEAgZXh0ZXJuIHNpemVfdCBz dHJ0aXRsZV9pY3UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAog CQkJCQkJICAgc3NpemVfdCBzcmNsZW4sIHBnX2xvY2FsZV90IGxvY2FsZSk7CiBleHRlcm4gc2l6 ZV90IHN0cnVwcGVyX2ljdShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpz cmMsCiAJCQkJCQkgICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVy biBzaXplX3Qgc3RyZm9sZF9pY3UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hh ciAqc3JjLAorCQkJCQkJICBzc2l6ZV90IHNyY2xlbiwgcGdfbG9jYWxlX3QgbG9jYWxlKTsKIAog I2lmZGVmIFVTRV9JQ1UKIApAQCAtMTE3LDYgKzExOSwxMCBAQCBzdGF0aWMgaW50MzJfdCB1X3N0 clRvVGl0bGVfZGVmYXVsdF9CSShVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAJ CQkJCQkJCQkgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKIAkJCQkJCQkJ CSAgIGNvbnN0IGNoYXIgKmxvY2FsZSwKIAkJCQkJCQkJCSAgIFVFcnJvckNvZGUgKnBFcnJvckNv ZGUpOworc3RhdGljIGludDMyX3QgdV9zdHJGb2xkQ2FzZV9kZWZhdWx0KFVDaGFyICpkZXN0LCBp bnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkJCSBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90 IHNyY0xlbmd0aCwKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkJCQkgVUVy cm9yQ29kZSAqcEVycm9yQ29kZSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sbGF0ZV9tZXRo b2RzIGNvbGxhdGVfbWV0aG9kc19pY3UgPSB7CiAJLnN0cm5jb2xsID0gc3RybmNvbGxfaWN1LApA QCAtNDM5LDYgKzQ0NSwyNiBAQCBzdHJ1cHBlcl9pY3UoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rz aXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCXJldHVybiByZXN1bHRfbGVu OwogfQogCitzaXplX3QKK3N0cmZvbGRfaWN1KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwg Y29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKKwkJCXBnX2xvY2FsZV90IGxvY2FsZSkK K3sKKwlpbnQzMl90CQlsZW5fdWNoYXI7CisJaW50MzJfdAkJbGVuX2NvbnY7CisJVUNoYXIJICAg KmJ1ZmZfdWNoYXI7CisJVUNoYXIJICAgKmJ1ZmZfY29udjsKKwlzaXplX3QJCXJlc3VsdF9sZW47 CisKKwlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1ZmZfdWNoYXIsIHNyYywgc3JjbGVuKTsK KwlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2UodV9zdHJGb2xkQ2FzZV9kZWZhdWx0LCBsb2Nh bGUsCisJCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7CisJcmVzdWx0 X2xlbiA9IGljdV9mcm9tX3VjaGFyKGRlc3QsIGRlc3RzaXplLCBidWZmX2NvbnYsIGxlbl9jb252 KTsKKwlwZnJlZShidWZmX3VjaGFyKTsKKwlwZnJlZShidWZmX2NvbnYpOworCisJcmV0dXJuIHJl c3VsdF9sZW47Cit9CisKIC8qCiAgKiBzdHJuY29sbF9pY3VfdXRmOAogICoKQEAgLTY3Myw2ICs2 OTksMzggQEAgdV9zdHJUb1RpdGxlX2RlZmF1bHRfQkkoVUNoYXIgKmRlc3QsIGludDMyX3QgZGVz dENhcGFjaXR5LAogCQkJCQkJTlVMTCwgbG9jYWxlLCBwRXJyb3JDb2RlKTsKIH0KIAorc3RhdGlj IGludDMyX3QKK3Vfc3RyRm9sZENhc2VfZGVmYXVsdChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0 Q2FwYWNpdHksCisJCQkJCSAgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisJ CQkJCSAgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUp Cit7CisJdWludDMyCQlvcHRpb25zID0gVV9GT0xEX0NBU0VfREVGQVVMVDsKKwljaGFyCQlsYW5n WzNdOworCVVFcnJvckNvZGUJc3RhdHVzOworCisJLyoKKwkgKiBVbmxpa2UgdGhlIElDVSBBUElz IGZvciBsb3dlcmNhc2luZywgdGl0bGVjYXNpbmcsIGFuZCB1cHBlcmNhc2luZywgY2FzZQorCSAq IGZvbGRpbmcgZG9lcyBub3QgYWNjZXB0IGEgbG9jYWxlLiBJbnN0ZWFkIGl0IGp1c3Qgc3VwcG9y dHMgYSBzaW5nbGUKKwkgKiBvcHRpb24gcmVsZXZhbnQgdG8gVHVya2ljIGxhbmd1YWdlcyAnYXon IGFuZCAndHInOyBjaGVjayBmb3IgdGhvc2UKKwkgKiBsYW5ndWFnZXMgdG8gZW5hYmxlIHRoZSBv cHRpb24uCisJICovCisJc3RhdHVzID0gVV9aRVJPX0VSUk9SOworCXVsb2NfZ2V0TGFuZ3VhZ2Uo bG9jYWxlLCBsYW5nLCAzLCAmc3RhdHVzKTsKKwlpZiAoVV9TVUNDRVNTKHN0YXR1cykpCisJewor CQkvKgorCQkgKiBUaGUgb3B0aW9uIG5hbWUgaXMgY29uZnVzaW5nLCBidXQgaXQgY2F1c2VzIHVf c3RyRm9sZENhc2UgdG8gdXNlCisJCSAqIHRoZSAnVCcgbWFwcGluZ3MsIHdoaWNoIGFyZSBpZ25v cmVkIGZvciBVX0ZPTERfQ0FTRV9ERUZBVUxULgorCQkgKi8KKwkJaWYgKHN0cmNtcChsYW5nLCAi dHIiKSA9PSAwIHx8IHN0cmNtcChsYW5nLCAiYXoiKSA9PSAwKQorCQkJb3B0aW9ucyA9IFVfRk9M RF9DQVNFX0VYQ0xVREVfU1BFQ0lBTF9JOworCX0KKworCXJldHVybiB1X3N0ckZvbGRDYXNlKGRl c3QsIGRlc3RDYXBhY2l0eSwgc3JjLCBzcmNMZW5ndGgsCisJCQkJCQkgb3B0aW9ucywgcEVycm9y Q29kZSk7Cit9CisKIC8qCiAgKiBzdHJuY29sbF9pY3UKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lv bi5oCmluZGV4IDU4NmI4M2YyZjRkLi5lM2EzMDgwMjRkZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJz aW9uLmgKQEAgLTU3LDYgKzU3LDYgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNk ZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjUwMTIzMQorI2RlZmluZSBDQVRBTE9HX1ZFUlNJ T05fTk8JMjAyNTAxMjMyCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMTg1 NjA3NTVkMjYuLjJhYWZkYmMzZTkzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTM2MjMs NiArMzYyMyw5IEBACiB7IG9pZCA9PiAnODcyJywgZGVzY3IgPT4gJ2NhcGl0YWxpemUgZWFjaCB3 b3JkJywKICAgcHJvbmFtZSA9PiAnaW5pdGNhcCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9h cmd0eXBlcyA9PiAndGV4dCcsCiAgIHByb3NyYyA9PiAnaW5pdGNhcCcgfSwKK3sgb2lkID0+ICc5 NTY5JywgZGVzY3IgPT4gJ2ZvbGQgY2FzZScsCisgIHByb25hbWUgPT4gJ2Nhc2Vmb2xkJywgcHJv cmV0dHlwZSA9PiAndGV4dCcsIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywKKyAgcHJvc3JjID0+ICdj YXNlZm9sZCcgfSwKIHsgb2lkID0+ICc4NzMnLCBkZXNjciA9PiAnbGVmdC1wYWQgc3RyaW5nIHRv IGxlbmd0aCcsCiAgIHByb25hbWUgPT4gJ2xwYWQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJv YXJndHlwZXMgPT4gJ3RleHQgaW50NCB0ZXh0JywKICAgcHJvc3JjID0+ICdscGFkJyB9LApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvZm9ybWF0dGluZy5oCmluZGV4IDVmYTQ5NTM5YWFhLi44MzUzMDdkYWMwOSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvZm9ybWF0dGluZy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2Zvcm1hdHRpbmcuaApAQCAtMjEsNiArMjEsNyBAQAogZXh0ZXJuIGNoYXIgKnN0cl90b2xvd2Vy KGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNo YXIgKnN0cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xs aWQpOwogZXh0ZXJuIGNoYXIgKnN0cl9pbml0Y2FwKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBu Ynl0ZXMsIE9pZCBjb2xsaWQpOworZXh0ZXJuIGNoYXIgKnN0cl9jYXNlZm9sZChjb25zdCBjaGFy ICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKTsKIAogZXh0ZXJuIGNoYXIgKmFzY190 b2xvd2VyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMpOwogZXh0ZXJuIGNoYXIgKmFz Y190b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2Nh bGUuaAppbmRleCAyYmMzYTdkZjJkOS4uMGQ1ZjA1MTNjZWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL3BnX2xvY2FsZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5o CkBAIC0xMzQsNiArMTM0LDkgQEAgZXh0ZXJuIHNpemVfdCBwZ19zdHJ0aXRsZShjaGFyICpkZXN0 LCBzaXplX3QgZGVzdHNpemUsCiBleHRlcm4gc2l6ZV90IHBnX3N0cnVwcGVyKGNoYXIgKmRlc3Qs IHNpemVfdCBkZXN0c2l6ZSwKIAkJCQkJCSAgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xl biwKIAkJCQkJCSAgcGdfbG9jYWxlX3QgbG9jYWxlKTsKK2V4dGVybiBzaXplX3QgcGdfc3RyZm9s ZChjaGFyICpkZXN0LCBzaXplX3QgZGVzdHNpemUsCisJCQkJCQkgY29uc3QgY2hhciAqc3JjLCBz c2l6ZV90IHNyY2xlbiwKKwkJCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpOwogZXh0ZXJuIGludAlw Z19zdHJjb2xsKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIHBnX2xvY2FsZV90 IGxvY2FsZSk7CiBleHRlcm4gaW50CXBnX3N0cm5jb2xsKGNvbnN0IGNoYXIgKmFyZzEsIHNzaXpl X3QgbGVuMSwKIAkJCQkJCWNvbnN0IGNoYXIgKmFyZzIsIHNzaXplX3QgbGVuMiwgcGdfbG9jYWxl X3QgbG9jYWxlKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0 ZS5pY3UudXRmOC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0 Zjgub3V0CmluZGV4IGQ0ZjMyNzYzNmZkLi5kMTZiNDZmZWNhNyAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9jb2xsYXRlLmljdS51dGY4Lm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUuaWN1LnV0Zjgub3V0CkBAIC0yNTUsNiArMjU1LDE4IEBA IFNFTEVDVCBhLCB4LCB5IEZST00gY29sbGF0ZV90ZXN0MTAgT1JERVIgQlkgbG93ZXIoeSksIGE7 CiAgMSB8IGhpaiB8IGhpagogKDIgcm93cykKIAorU0VMRUNUIGNhc2Vmb2xkKCdBYkNkIDEyMyAj JCUgxLFpScSwIOG6niDDnyDHhMeFx4YgzqPPg8+CJyBDT0xMQVRFICJlbi14LWljdSIpOworICAg ICAgICAgICAgY2FzZWZvbGQgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBhYmNkIDEyMyAjJCUgxLFpaWnMhyBzcyBzcyDHhseGx4Ygz4PPg8+DCisoMSBy b3cpCisKK1NFTEVDVCBjYXNlZm9sZCgnQWJDZCAxMjMgIyQlIMSxaUnEsCDhup4gw58gx4THhceG IM6jz4PPgicgQ09MTEFURSAidHIteC1pY3UiKTsKKyAgICAgICAgICAgIGNhc2Vmb2xkICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgYWJjZCAxMjMgIyQl IMSxacSxaSBzcyBzcyDHhseGx4Ygz4PPg8+DCisoMSByb3cpCisKIC0tIExJS0UvSUxJS0UKIFNF TEVDVCAqIEZST00gY29sbGF0ZV90ZXN0MSBXSEVSRSBiIExJS0UgJ2FiYyc7CiAgYSB8ICBiICAK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS51dGY4Lm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS51dGY4Lm91dAppbmRleCA4YjcxNzZh Mjc1Ni4uNTUwODYyMmIxNmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y29sbGF0ZS51dGY4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUu dXRmOC5vdXQKQEAgLTE2MCw2ICsxNjAsMTMgQEAgU0VMRUNUICfOtCcgfiogJ1vOky3Om10nIENP TExBVEUgUEdfQ19VVEY4OyAtLSBzYW1lIGFzIGFib3ZlIHdpdGggY2FzZXMgcmV2ZXJzZWQKICB0 CiAoMSByb3cpCiAKKy0tIGNhc2UgZm9sZGluZworc2VsZWN0IGNhc2Vmb2xkKCdBYkNkIDEyMyAj JCUgxLFpScSwIOG6niDDnyDHhMeFx4YgzqPPg8+CJyBjb2xsYXRlIFBHX0NfVVRGOCk7CisgICAg ICAgICAgIGNhc2Vmb2xkICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgYWJjZCAxMjMgIyQlIMSxaWnEsCDDnyDDnyDHhseGx4Ygz4PPg8+DCisoMSByb3cpCisK IC0tCiAtLSBUZXN0IFBHX1VOSUNPREVfRkFTVAogLS0KQEAgLTMyMCwzICszMjcsMTAgQEAgU0VM RUNUICfOtCcgfiogJ1vOky3Om10nIENPTExBVEUgUEdfVU5JQ09ERV9GQVNUOyAtLSBzYW1lIGFz IGFib3ZlIHdpdGggY2FzZXMgcmUKICB0CiAoMSByb3cpCiAKKy0tIGNhc2UgZm9sZGluZworc2Vs ZWN0IGNhc2Vmb2xkKCdBYkNkIDEyMyAjJCUgxLFpScSwIOG6niDDnyDHhMeFx4YgzqPPg8+CJyBj b2xsYXRlIFBHX1VOSUNPREVfRkFTVCk7CisgICAgICAgICAgICBjYXNlZm9sZCAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGFiY2QgMTIzICMkJSDEsWlp acyHIHNzIHNzIMeGx4bHhiDPg8+Dz4MKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29sbGF0ZS5pY3UudXRmOC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b2xsYXRlLmljdS51dGY4LnNxbAppbmRleCA1ZWUyZGE0ZTBlMC4uNTQ5NWMyYTFmZTEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbGxhdGUuaWN1LnV0Zjguc3FsCkBAIC0xMTYsNiArMTE2LDkg QEAgU0VMRUNUIGEsIGxvd2VyKHggQ09MTEFURSAiQyIpLCBsb3dlcih5IENPTExBVEUgIkMiKSBG Uk9NIGNvbGxhdGVfdGVzdDEwOwogCiBTRUxFQ1QgYSwgeCwgeSBGUk9NIGNvbGxhdGVfdGVzdDEw IE9SREVSIEJZIGxvd2VyKHkpLCBhOwogCitTRUxFQ1QgY2FzZWZvbGQoJ0FiQ2QgMTIzICMkJSDE sWlJxLAg4bqeIMOfIMeEx4XHhiDOo8+Dz4InIENPTExBVEUgImVuLXgtaWN1Iik7CitTRUxFQ1Qg Y2FzZWZvbGQoJ0FiQ2QgMTIzICMkJSDEsWlJxLAg4bqeIMOfIMeEx4XHhiDOo8+Dz4InIENPTExB VEUgInRyLXgtaWN1Iik7CisKIC0tIExJS0UvSUxJS0UKIAogU0VMRUNUICogRlJPTSBjb2xsYXRl X3Rlc3QxIFdIRVJFIGIgTElLRSAnYWJjJzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvbGxhdGUudXRmOC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb2xsYXRlLnV0Zjgu c3FsCmluZGV4IDQ2ZTljNTIzMmFkLi42YzdjN2FlYzllYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29sbGF0ZS51dGY4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j b2xsYXRlLnV0Zjguc3FsCkBAIC04MSw2ICs4MSw5IEBAIFNFTEVDVCAneEFiJyAhfiogJ1tjLWRd JyBDT0xMQVRFIFBHX0NfVVRGODsKIFNFTEVDVCAnzpQnIH4qICdbzrMtzrtdJyBDT0xMQVRFIFBH X0NfVVRGODsKIFNFTEVDVCAnzrQnIH4qICdbzpMtzptdJyBDT0xMQVRFIFBHX0NfVVRGODsgLS0g c2FtZSBhcyBhYm92ZSB3aXRoIGNhc2VzIHJldmVyc2VkCiAKKy0tIGNhc2UgZm9sZGluZworc2Vs ZWN0IGNhc2Vmb2xkKCdBYkNkIDEyMyAjJCUgxLFpScSwIOG6niDDnyDHhMeFx4YgzqPPg8+CJyBj b2xsYXRlIFBHX0NfVVRGOCk7CisKIC0tCiAtLSBUZXN0IFBHX1VOSUNPREVfRkFTVAogLS0KQEAg LTE0MCwzICsxNDMsNiBAQCBTRUxFQ1QgJ3hBYicgfiogJ1tXLVldJyBDT0xMQVRFIFBHX1VOSUNP REVfRkFTVDsKIFNFTEVDVCAneEFiJyAhfiogJ1tjLWRdJyBDT0xMQVRFIFBHX1VOSUNPREVfRkFT VDsKIFNFTEVDVCAnzpQnIH4qICdbzrMtzrtdJyBDT0xMQVRFIFBHX1VOSUNPREVfRkFTVDsKIFNF TEVDVCAnzrQnIH4qICdbzpMtzptdJyBDT0xMQVRFIFBHX1VOSUNPREVfRkFTVDsgLS0gc2FtZSBh cyBhYm92ZSB3aXRoIGNhc2VzIHJldmVyc2VkCisKKy0tIGNhc2UgZm9sZGluZworc2VsZWN0IGNh c2Vmb2xkKCdBYkNkIDEyMyAjJCUgxLFpScSwIOG6niDDnyDHhMeFx4YgzqPPg8+CJyBjb2xsYXRl IFBHX1VOSUNPREVfRkFTVCk7Ci0tIAoyLjM0LjEKCg== --=-Z7bg8ef7qC/dFSa64HW7--