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 1qxuwq-004Lf5-7L for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Oct 2023 20:02:48 +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 1qxuwn-0040Pc-9I for pgsql-hackers@arkaria.postgresql.org; Tue, 31 Oct 2023 20:02:45 +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 1qxuwm-0040PT-Ac for pgsql-hackers@lists.postgresql.org; Tue, 31 Oct 2023 20:02:44 +0000 Received: from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qxuwh-003Ky0-Ic for pgsql-hackers@postgresql.org; Tue, 31 Oct 2023 20:02:43 +0000 Received: by mail-oo1-xc34.google.com with SMTP id 006d021491bc7-5842a7fdc61so3295253eaf.3 for ; Tue, 31 Oct 2023 13:02:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=neon-tech.20230601.gappssmtp.com; s=20230601; t=1698782558; x=1699387358; darn=postgresql.org; h=from:to:subject:cc:message-id:date:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Qyl9oBp3qjUnqdNnYDEdHXCZK7ORRgZapDfPXXpTVIg=; b=lakG1wimxOvDl4XuDTLbYuhrjprAgRtOgTL/FGGW5naEode5l/6doHj+ZqD19LO5lN F5h+i1ZuU3vam/rQkTAKHBOqYCSewlfOLWsgis4JjZ1PQmaqHKF9H5twgWvmWTx+B18l ZILiJIC47Qhm9+vEV21Q1py0CilaVd7T3JG7YG8hfjZYOJy38isCa/jDGqSfWyaaSBuQ P/oVsY/KiBNLddL49AmCDsffHIUd518MklYXSI5Lab3UG8fDWqAHJSCDB7VrZBQdhJkZ DKwYaYKucUdG0MC+EVcX9YLnhb4gzzFbS6MB5rrQhNw8Nh/mVCw4myqXHMwyctACCWz8 bKdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698782558; x=1699387358; h=from:to:subject:cc:message-id:date:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Qyl9oBp3qjUnqdNnYDEdHXCZK7ORRgZapDfPXXpTVIg=; b=ramoPV0LCDgSU5pReRQr4Uyp9262Z6X+1fKYkuZXG/Fkt3SMvEM7t8JoeoJgqglTUZ hAFpRyRkBSaYwauTjpEosYZ/twurEJ94Lp+Q3UAfgHkVAEqImn9z4v1ByDyBHg2YreFr itrn1eVa4acagSi7F0NLodlxEYOv74SRZD2FlGv7SG3AHpJYYN+cGZ7v+2C+LPxqEKkB azYjPyP9gQIfnN8XWwu6GGYnE7SLDeNr7CB0lXYCx4GfOCR3js16k3Uxd4NR2HdY0Oi3 nLrhnrc4wjLyA3/9A9kn90F1Sxkix1Bv+x7Cvs9oorY3uwvL/G9k56uOPnU5k3W3sRwO S9Ug== X-Gm-Message-State: AOJu0YwhaxNpeaMvMkVQDaAmiq8kc2JOHvyMdPj3fA6bX+8QNDZ+iuqf IwmPcU5o2sDLvjWz4CpNa9rz4EwiZJy8rt7vj6aNRw== X-Google-Smtp-Source: AGHT+IEZ/Nb610GlC7IUyvazEceYTMpy7P8SzlChamxVJh5Myn61hR1c9XNAuovxStsj/i7CCCkpLA== X-Received: by 2002:a4a:a50c:0:b0:57b:7e41:9f11 with SMTP id v12-20020a4aa50c000000b0057b7e419f11mr11876749ook.2.1698782558199; Tue, 31 Oct 2023 13:02:38 -0700 (PDT) Received: from localhost ([2607:fb90:e62b:4a1c:3996:e070:71ee:42fb]) by smtp.gmail.com with ESMTPSA id q5-20020a4a3305000000b0058151bd7bf5sm389227ooq.11.2023.10.31.13.02.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 31 Oct 2023 13:02:37 -0700 (PDT) Content-Type: multipart/mixed; boundary=3e3672b01d81ec6130a7ba5e256584d10be30508a4c32748714d85345600 Mime-Version: 1.0 Date: Tue, 31 Oct 2023 15:02:36 -0500 Message-Id: Cc: "Joe Conway" , "Heikki Linnakangas" , "Tom Lane" Subject: Use thread-safe locale APIs To: "pgsql-hackers" From: "Tristan Partin" X-Mailer: aerc 0.16.0-45-g09744e9272eb List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --3e3672b01d81ec6130a7ba5e256584d10be30508a4c32748714d85345600 Content-Type: multipart/alternative; boundary=7529cbcb0608d435e0ba1261463824ad433f40c7f9f03fc4e1cb688d90c4 --7529cbcb0608d435e0ba1261463824ad433f40c7f9f03fc4e1cb688d90c4 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed Postgres has been bitten by a few locale-related bugs, most recently via=20 libperl[0]. I had previously submitted this patchset in the bug thread=20 for the aforementioned bug, but here is a standalone submission for the=20 purposes of an eventual commitfest submission, and to get discussion=20 going. I was also flubbing up the commitfest bot with my patches. Sorry=20 Joe! I feel fairly good about the patch, but I think I need some more=20 testing and feedback. Localization is such a fickle beast. I did leave one TODO because I need some input: /* TODO: This does not handle "" as the locale */ check_locale() takes a canonname argument, which the caller expects to=20 be the "canonical name" of the locale the caller passed in. The=20 setlocale() man page is not very explicit about under what conditions=20 the return value is different from the input string, and I haven't found=20 much on the internet. Best I can tell is that the empty string is the=20 only input value that differs from the output value of setlocale(). If=20 that's the case, on Postmaster startup, I can query setlocale() for what=20 the empty string canonicalizes to for all the locale categories we care=20 about, and save them off. The other solution to the problem would be to=20 find the equivalent API in the uselocale() family of functions, but I am=20 under the impression that such an API doesn't exist given I haven't=20 found it yet. Also, should we just remove HAVE_USELOCALE? It seems like Windows is the=20 only platform that doesn't support it. Then we can just use _WIN32=20 instead. I do not think this should be backpatched. Please see Joe's patch in the=20 bug thread as a way to fix the libperl bug on pre-17 versions. [0]: https://www.postgresql.org/message-id/17946-3e84cb577e9551c3%40postgre= sql.org --=20 Tristan Partin Neon (https://neon.tech) --7529cbcb0608d435e0ba1261463824ad433f40c7f9f03fc4e1cb688d90c4-- --3e3672b01d81ec6130a7ba5e256584d10be30508a4c32748714d85345600 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0001-Skip-checking-for-uselocale-on-Windows.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0001-Skip-checking-for-uselocale-on-Windows.patch RnJvbSBkMzM2ZDg0Y2Y2MGIyMjE0N2UxMjM0MjYwYjMxOTlhNTJlOTg2M2UzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IEZyaSwgMzAgSnVuIDIwMjMgMDk6MzE6MDQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxIDEv M10gU2tpcCBjaGVja2luZyBmb3IgdXNlbG9jYWxlIG9uIFdpbmRvd3MKCldpbmRvd3MgZG9lc24n dCBoYXZlIHVzZWxvY2FsZSwgc28gc2tpcCBpdC4KLS0tCiBtZXNvbi5idWlsZCB8IDIgKy0KIDEg ZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBh L21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggMmQ1MTZjOGYzNy4uYWVhZjc1ZDQ1YSAx MDA2NDQKLS0tIGEvbWVzb24uYnVpbGQKKysrIGIvbWVzb24uYnVpbGQKQEAgLTI0NTQsNyArMjQ1 NCw3IEBAIGZ1bmNfY2hlY2tzID0gWwogICBbJ3N0cnNpZ25hbCddLAogICBbJ3N5bmNfZmlsZV9y YW5nZSddLAogICBbJ3N5bmNmcyddLAotICBbJ3VzZWxvY2FsZSddLAorICBbJ3VzZWxvY2FsZScs IHsnc2tpcCc6IGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJ31dLAogICBbJ3djc3RvbWJzX2wnXSwK IF0KIAotLSAKVHJpc3RhbiBQYXJ0aW4KTmVvbiAoaHR0cHM6Ly9uZW9uLnRlY2gpCgo= --3e3672b01d81ec6130a7ba5e256584d10be30508a4c32748714d85345600 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0002-Add-locale_is_c-function.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0002-Add-locale_is_c-function.patch RnJvbSA1NTc4NzBmMTg0Njk5MDI0NmI4MGNhZmRmM2UwNjM0OTMwMmEzOGE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IEZyaSwgMzAgSnVuIDIwMjMgMTE6MTM6MjkgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxIDIv M10gQWRkIGxvY2FsZV9pc19jIGZ1bmN0aW9uCgpJbiBzb21lIHBsYWNlcyB0aHJvdWdob3V0IHRo ZSBjb2RlYmFzZSwgdGhlcmUgYXJlIHN0cmluZyBjb21wYXJpc29ucyBmb3IKbG9jYWxlcyBtYXRj aGluZyBDIG9yIFBPU0lYLiBFbmNhcHN1bGF0ZSB0aGlzIGxvZ2ljIGludG8gYSBzaW5nbGUKZnVu Y3Rpb24gYW5kIHVzZSBpdC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMg fCAzOSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9p bml0L3Bvc3Rpbml0LmMgfCAgNCArLS0tCiBzcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMg ICAgfCAgNSArKy0tCiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaCAgICAgfCAgMSArCiA0 IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBkNTAwM2RhNDE3Li42MWQ1YzVkYzRjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC0xOTUsNiArMTk1LDIzIEBAIHdjc3RvbWJzX2woY2hh ciAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbiwgbG9jYWxlX3QgbG9jKQogfQog I2VuZGlmCiAKKworLyoKKyAqIENoZWNrIGlmIGEgbG9jYWxlIGlzIHRoZSBDIGxvY2FsZQorICoK KyAqIFBPU0lYIGlzIGFuIGFsaWFzIGZvciBDLiBQYXNzaW5nIGluZ29yZV9jYXNlIGFzIHRydWUg d2lsbCB1c2UKKyAqIHBnX3N0cmNhc2VjbXAoKSBpbnN0ZWFkIG9mIHN0cmNtcCgpLgorICovCiti b29sCitsb2NhbGVfaXNfYyhjb25zdCBjaGFyICpsb2NhbGUsIGJvb2wgaWdub3JlX2Nhc2UpCit7 CisJaWYgKCFpZ25vcmVfY2FzZSkKKwkJcmV0dXJuIHN0cmNtcChsb2NhbGUsICJDIikgPT0gMCB8 fCBzdHJjbXAobG9jYWxlLCAiUE9TSVgiKSA9PSAwOworCisJcmV0dXJuIHBnX3N0cmNhc2VjbXAo bG9jYWxlLCAiQyIpID09IDAgfHwgcGdfc3RyY2FzZWNtcChsb2NhbGUsICJQT1NJWCIpID09IDA7 Cit9CisKKwogLyoKICAqIHBnX3Blcm1fc2V0bG9jYWxlCiAgKgpAQCAtMTI4MCwxMCArMTI5Nyw4 IEBAIGxvb2t1cF9jb2xsYXRpb25fY2FjaGUoT2lkIGNvbGxhdGlvbiwgYm9vbCBzZXRfZmxhZ3Mp CiAJCQlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoQ09MTE9JRCwgdHAsIEFudW1fcGdf Y29sbGF0aW9uX2NvbGxjdHlwZSk7CiAJCQljb2xsY3R5cGUgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KGRhdHVtKTsKIAotCQkJY2FjaGVfZW50cnktPmNvbGxhdGVfaXNfYyA9ICgoc3RyY21wKGNvbGxj b2xsYXRlLCAiQyIpID09IDApIHx8Ci0JCQkJCQkJCQkJIChzdHJjbXAoY29sbGNvbGxhdGUsICJQ T1NJWCIpID09IDApKTsKLQkJCWNhY2hlX2VudHJ5LT5jdHlwZV9pc19jID0gKChzdHJjbXAoY29s bGN0eXBlLCAiQyIpID09IDApIHx8Ci0JCQkJCQkJCQkgICAoc3RyY21wKGNvbGxjdHlwZSwgIlBP U0lYIikgPT0gMCkpOworCQkJY2FjaGVfZW50cnktPmNvbGxhdGVfaXNfYyA9IGxvY2FsZV9pc19j KGNvbGxjb2xsYXRlLCBmYWxzZSk7CisJCQljYWNoZV9lbnRyeS0+Y3R5cGVfaXNfYyA9IGxvY2Fs ZV9pc19jKGNvbGxjdHlwZSwgZmFsc2UpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMTMzMSwxMiAr MTM0Niw4IEBAIGxjX2NvbGxhdGVfaXNfYyhPaWQgY29sbGF0aW9uKQogCQlpZiAoIWxvY2FsZXB0 cikKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIExDX0NPTExBVEUgc2V0dGluZyIpOwogCi0JCWlm IChzdHJjbXAobG9jYWxlcHRyLCAiQyIpID09IDApCi0JCQlyZXN1bHQgPSB0cnVlOwotCQllbHNl IGlmIChzdHJjbXAobG9jYWxlcHRyLCAiUE9TSVgiKSA9PSAwKQotCQkJcmVzdWx0ID0gdHJ1ZTsK LQkJZWxzZQotCQkJcmVzdWx0ID0gZmFsc2U7CisJCXJlc3VsdCA9IGxvY2FsZV9pc19jKGxvY2Fs ZXB0ciwgZmFsc2UpOworCiAJCXJldHVybiAoYm9vbCkgcmVzdWx0OwogCX0KIApAQCAtMTM4NCwx MiArMTM5NSw4IEBAIGxjX2N0eXBlX2lzX2MoT2lkIGNvbGxhdGlvbikKIAkJaWYgKCFsb2NhbGVw dHIpCiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBMQ19DVFlQRSBzZXR0aW5nIik7CiAKLQkJaWYg KHN0cmNtcChsb2NhbGVwdHIsICJDIikgPT0gMCkKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCWVsc2Ug aWYgKHN0cmNtcChsb2NhbGVwdHIsICJQT1NJWCIpID09IDApCi0JCQlyZXN1bHQgPSB0cnVlOwot CQllbHNlCi0JCQlyZXN1bHQgPSBmYWxzZTsKKwkJcmVzdWx0ID0gbG9jYWxlX2lzX2MobG9jYWxl cHRyLCBmYWxzZSk7CisKIAkJcmV0dXJuIChib29sKSByZXN1bHQ7CiAJfQogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9p bml0L3Bvc3Rpbml0LmMKaW5kZXggNTUyY2Y5ZDk1MC4uNTQ0MzEyYTA5OSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvcG9zdGluaXQuYwpAQCAtNDE5LDkgKzQxOSw3IEBAIENoZWNrTXlEYXRhYmFzZShjb25z dCBjaGFyICpuYW1lLCBib29sIGFtX3N1cGVydXNlciwgYm9vbCBvdmVycmlkZV9hbGxvd19jb25u ZWN0CiAJCQkJCQkgICAiIHdoaWNoIGlzIG5vdCByZWNvZ25pemVkIGJ5IHNldGxvY2FsZSgpLiIs IGN0eXBlKSwKIAkJCQkgZXJyaGludCgiUmVjcmVhdGUgdGhlIGRhdGFiYXNlIHdpdGggYW5vdGhl ciBsb2NhbGUgb3IgaW5zdGFsbCB0aGUgbWlzc2luZyBsb2NhbGUuIikpKTsKIAotCWlmIChzdHJj bXAoY3R5cGUsICJDIikgPT0gMCB8fAotCQlzdHJjbXAoY3R5cGUsICJQT1NJWCIpID09IDApCi0J CWRhdGFiYXNlX2N0eXBlX2lzX2MgPSB0cnVlOworCWRhdGFiYXNlX2N0eXBlX2lzX2MgPSBsb2Nh bGVfaXNfYyhjdHlwZSwgZmFsc2UpOwogCiAJaWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0g Q09MTFBST1ZJREVSX0lDVSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tYi9t YnV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMKaW5kZXggNjdhMWFiMmFi Mi4uOTk3MTU2NTE1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYwpAQCAtMzksNiArMzksNyBAQAog I2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgog I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidmFyYXR0LmgiCiAKQEAgLTEy MzcsOSArMTIzOCw3IEBAIHBnX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGNvbnN0IGNoYXIgKmRv bWFpbm5hbWUpCiAJaW50CQkJbmV3X21zZ2VuYzsKIAogI2lmbmRlZiBXSU4zMgotCWNvbnN0IGNo YXIgKmN0eXBlID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKLQotCWlmIChwZ19zdHJjYXNl Y21wKGN0eXBlLCAiQyIpID09IDAgfHwgcGdfc3RyY2FzZWNtcChjdHlwZSwgIlBPU0lYIikgPT0g MCkKKwlpZiAobG9jYWxlX2lzX2MobG9jYWxlX2N0eXBlLCB0cnVlKSkKICNlbmRpZgogCQlpZiAo ZW5jb2RpbmcgIT0gUEdfU1FMX0FTQ0lJICYmCiAJCQlyYXdfcGdfYmluZF90ZXh0ZG9tYWluX2Nv ZGVzZXQoZG9tYWlubmFtZSwgZW5jb2RpbmcpKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAppbmRleCA2NDQ3 YmVhOGUwLi5lMDhkOTZlMDk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2Nh bGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtNTQsNiArNTQsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBkYXRhYmFzZV9jdHlwZV9pc19jOwogZXh0ZXJuIGJv b2wgY2hlY2tfbG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlLCBjaGFyICoq Y2Fub25uYW1lKTsKIGV4dGVybiBjaGFyICpwZ19wZXJtX3NldGxvY2FsZShpbnQgY2F0ZWdvcnks IGNvbnN0IGNoYXIgKmxvY2FsZSk7CiAKK2V4dGVybiBib29sIGxvY2FsZV9pc19jKGNvbnN0IGNo YXIgKmxvY2FsZSwgYm9vbCBpZ25vcmVfY2FzZSk7CiBleHRlcm4gYm9vbCBsY19jb2xsYXRlX2lz X2MoT2lkIGNvbGxhdGlvbik7CiBleHRlcm4gYm9vbCBsY19jdHlwZV9pc19jKE9pZCBjb2xsYXRp b24pOwogCi0tIApUcmlzdGFuIFBhcnRpbgpOZW9uIChodHRwczovL25lb24udGVjaCkKCg== --3e3672b01d81ec6130a7ba5e256584d10be30508a4c32748714d85345600 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0003-Use-thread-safe-locale-APIs.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0003-Use-thread-safe-locale-APIs.patch RnJvbSBhNjAxNTYwZDEwZTFmYjgxOGZlOWY3Njg1NTIxYTRmNGQwY2IyOGMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IE1vbiwgMyBKdWwgMjAyMyAwODo1MTo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMy8z XSBVc2UgdGhyZWFkLXNhZmUgbG9jYWxlIEFQSXMKCnNldGxvY2FsZSgpIGhhcyBiZWVuIGEgdGhv cm4gaW4gUG9zdGdyZXMncyBzaWRlIGZvciBhIHdoaWxlLiBNb3N0CnJlY2VudGx5IHRoaXMgaGFz IG1hbmlmZXN0ZWQgaW4gYnVnICMxNzk0NiB3aGVyZSBsb2FkaW5nIGxpYnBlcmwgd291bGQKY2F1 c2UgdGhlIGxvY2FsaXphdGlvbiB0byBjaGFuZ2Ugb3V0IGZyb20gdW5kZXIgUG9zdGdyZXMuIE9u IFdpbmRvd3MsCnVzZSBfRU5BQkxFX1BFUl9USFJFQURfTE9DQUxFLgotLS0KIHNyYy9iYWNrZW5k L21haW4vbWFpbi5jICAgICAgICAgICAgfCAgNTUgKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Nhc2guYyAgICAgICB8ICAyOSArKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5n LmMgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyAgfCAzOTMgKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGlu aXQuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYyAgICAgfCAgIDIg Ky0KIHNyYy9jb21tb24vZXhlYy5jICAgICAgICAgICAgICAgICAgfCAgMTYgLS0KIHNyYy9pbmNs dWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICAgfCAgIDIgKy0KIDggZmlsZXMgY2hhbmdlZCwgMzMw IGluc2VydGlvbnMoKyksIDE4MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9tYWluL21haW4uYyBiL3NyYy9iYWNrZW5kL21haW4vbWFpbi5jCmluZGV4IGVkMTFlOGJlN2Yu LjA5M2RmODhmMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL21haW4vbWFpbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL21haW4vbWFpbi5jCkBAIC01OSw2ICs1OSwxMSBAQCBpbnQKIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlib29sCQlkb19jaGVja19yb290ID0gdHJ1ZTsKKwljaGFy CSAgICpjb2xsYXRlX2xvY2FsZTsKKwljaGFyCSAgICpjdHlwZV9sb2NhbGU7CisjaWZkZWYgTENf TUVTU0FHRVMKKwljaGFyCSAgICptZXNzYWdlc19sb2NhbGU7CisjZW5kaWYKIAogCXJlYWNoZWRf bWFpbiA9IHRydWU7CiAKQEAgLTExMSwxNSArMTE2LDM5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkgKiB0aGVzZSBzZXQgdG8gIkMiIHRoZW4gbWVzc2FnZSBsb2NhbGl6YXRpb24g bWlnaHQgbm90IHdvcmsgd2VsbCBpbiB0aGUKIAkgKiBwb3N0bWFzdGVyLgogCSAqLwotCWluaXRf bG9jYWxlKCJMQ19DT0xMQVRFIiwgTENfQ09MTEFURSwgIiIpOwotCWluaXRfbG9jYWxlKCJMQ19D VFlQRSIsIExDX0NUWVBFLCAiIik7CisKKwkvKgorCSAqIFNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBs b2NhbGUgdmFsdWVzIHByaW9yIHRvIHRoZSBmaXJzdCBjYWxsIG9mCisJICogdXNlbG9jYWxlKCku IFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGNhbGwgcGdfc2V0bG9jYWxlKCkgd2l0aCBhbiBl bXB0eQorCSAqIHN0cmluZy4gU2VlIHRoZSBmdW5jdGlvbiBjb21tZW50IGZvciBwZ19zZXRsb2Nh bGUoKSBmb3IgZnVydGhlcgorCSAqIGV4cGxhbmF0aW9uLiBOb3RlIHRoYXQgdGhpcyByZXN0cmlj dGlvbiBkb2Vzbid0IGV4aXN0IG9uIFdpbmRvd3MsIGJ1dCB3ZQorCSAqIGNhbiB1c2UgdGhlIHNh bWUgY29kZSBwYXRoIGFueXdheS4KKwkgKi8KKwljb2xsYXRlX2xvY2FsZSA9IHNldGxvY2FsZShM Q19DT0xMQVRFLCAiIik7CisJY3R5cGVfbG9jYWxlID0gc2V0bG9jYWxlKExDX0NUWVBFLCAiIik7 CisKKyNpZmRlZiBMQ19NRVNTQUdFUworCW1lc3NhZ2VzX2xvY2FsZSA9IHNldGxvY2FsZShMQ19N RVNTQUdFUywgIiIpOworI2VuZGlmCisKKworI2lmZGVmIEhBVkVfX0NPTkZJR1RIUkVBRExPQ0FM RQorCS8qCisJICogVGhpcyBjYWxsIGNvdWxkIG1vc3QgbGlrZWx5IGhhcHBlbiBzb29uZXIsIGJ1 dCBqdXN0IHRvIGVyciBvbiB0aGUgc2lkZSBvZgorCSAqIGNhdXRpb24sIGNhbGwgaXQgYWZ0ZXIg YWJzb3JiaW5nIGxvY2FsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCisJICovCisJX2NvbmZpZ3Ro cmVhZGxvY2FsZShfRU5BQkxFX1BFUl9USFJFQURfTE9DQUxFKTsKKyNlbmRpZgorCisJaW5pdF9s b2NhbGUoIkxDX0NPTExBVEUiLCBMQ19DT0xMQVRFLCBjb2xsYXRlX2xvY2FsZSk7CisJaW5pdF9s b2NhbGUoIkxDX0NUWVBFIiwgTENfQ1RZUEUsIGN0eXBlX2xvY2FsZSk7CiAKIAkvKgogCSAqIExD X01FU1NBR0VTIHdpbGwgZ2V0IHNldCBsYXRlciBkdXJpbmcgR1VDIG9wdGlvbiBwcm9jZXNzaW5n LCBidXQgd2Ugc2V0CiAJICogaXQgaGVyZSB0byBhbGxvdyBzdGFydHVwIGVycm9yIG1lc3NhZ2Vz IHRvIGJlIGxvY2FsaXplZC4KIAkgKi8KICNpZmRlZiBMQ19NRVNTQUdFUwotCWluaXRfbG9jYWxl KCJMQ19NRVNTQUdFUyIsIExDX01FU1NBR0VTLCAiIik7CisJaW5pdF9sb2NhbGUoIkxDX01FU1NB R0VTIiwgTENfTUVTU0FHRVMsIG1lc3NhZ2VzX2xvY2FsZSk7CiAjZW5kaWYKIAogCS8qCkBAIC0x MzAsMTMgKzE1OSw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpbml0X2xvY2Fs ZSgiTENfTlVNRVJJQyIsIExDX05VTUVSSUMsICJDIik7CiAJaW5pdF9sb2NhbGUoIkxDX1RJTUUi LCBMQ19USU1FLCAiQyIpOwogCi0JLyoKLQkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFic29yYmVkIGFz IG11Y2ggYXMgd2Ugd2lzaCB0byBmcm9tIHRoZSBsb2NhbGUKLQkgKiBlbnZpcm9ubWVudCwgcmVt b3ZlIGFueSBMQ19BTEwgc2V0dGluZywgc28gdGhhdCB0aGUgZW52aXJvbm1lbnQKLQkgKiB2YXJp YWJsZXMgaW5zdGFsbGVkIGJ5IHBnX3Blcm1fc2V0bG9jYWxlIGhhdmUgZm9yY2UuCi0JICovCi0J dW5zZXRlbnYoIkxDX0FMTCIpOwotCiAJLyoKIAkgKiBDYXRjaCBzdGFuZGFyZCBvcHRpb25zIGJl Zm9yZSBkb2luZyBtdWNoIGVsc2UsIGluIHBhcnRpY3VsYXIgYmVmb3JlIHdlCiAJICogaW5zaXN0 IG9uIG5vdCBiZWluZyByb290LgpAQCAtMzA3LDggKzMyOSwxNyBAQCBzdGFydHVwX2hhY2tzKGNv bnN0IGNoYXIgKnByb2duYW1lKQogc3RhdGljIHZvaWQKIGluaXRfbG9jYWxlKGNvbnN0IGNoYXIg KmNhdGVnb3J5bmFtZSwgaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCiB7Ci0JaWYg KHBnX3Blcm1fc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpID09IE5VTEwgJiYKLQkJcGdfcGVy bV9zZXRsb2NhbGUoY2F0ZWdvcnksICJDIikgPT0gTlVMTCkKKwkvKgorCSAqIFNpbmNlIHdlIGFy ZSBpbml0aWFsaXppbmcgZ2xvYmFsIGxvY2FsZXMsIE5VTEwgYW5kIGVtcHR5IHN0cmluZyBhcmUK KwkgKiBpbnZhbGlkIGFyZ3VtZW50cy4gU2VlIHRoZSBwZ19zZXRsb2NhbGUoKSBmdW5jdGlvbiBk ZXNjcmlwdGlvbiBmb3IgbW9yZQorCSAqIGV4cGxhbmF0aW9uIG9uIHRoZSBlbXB0eSBzdHJpbmcu IE5VTEwganVzdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgaW4gdGhpcworCSAqIGNvbnRleHQgb2YgaW5p dGlhbGl6aW5nIGxvY2FsZXMuCisJICovCisJQXNzZXJ0KGxvY2FsZSk7CisJQXNzZXJ0KGxvY2Fs ZVswXSAhPSAnXDAnKTsKKworCWlmIChwZ19zZXRsb2NhbGUoY2F0ZWdvcnksIGxvY2FsZSkgPT0g TlVMTCAmJgorCQlwZ19zZXRsb2NhbGUoY2F0ZWdvcnksICJDIikgPT0gTlVMTCkKIAkJZWxvZyhG QVRBTCwgImNvdWxkIG5vdCBhZG9wdCBcIiVzXCIgbG9jYWxlIG5vciBDIGxvY2FsZSBmb3IgJXMi LAogCQkJIGxvY2FsZSwgY2F0ZWdvcnluYW1lKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9jYXNoLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvY2FzaC5jCmluZGV4IDMy ZmJhZDJmNTcuLjVjMjU0ZDkxMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9j YXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Nhc2guYwpAQCAtMTExLDYgKzExMSwx MSBAQCBjYXNoX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkgICAqY3N5bWJvbDsKIAlzdHJ1Y3Qg bGNvbnYgKmxjb252ZXJ0ID0gUEdMQ19sb2NhbGVjb252KCk7CiAKKwlpZiAobGNvbnZlcnQgPT0g TlVMTCkKKwkJZXJldHVybihlc2NvbnRleHQsIChEYXR1bSkgMCwKKwkJCQkoZXJyY29kZShFUlJD T0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1v cnkgZm9yIGxvY2FsZSBpbmZvcm1hdGlvbiIpKSk7CisKIAkvKgogCSAqIGZyYWNfZGlnaXRzIHdp bGwgYmUgQ0hBUl9NQVggaW4gc29tZSBsb2NhbGVzLCBub3RhYmx5IEMuICBIb3dldmVyLCBqdXN0 CiAJICogdGVzdGluZyBmb3IgPT0gQ0hBUl9NQVggaXMgcmlza3ksIGJlY2F1c2Ugb2YgY29tcGls ZXJzIGxpa2UgZ2NjIHRoYXQKQEAgLTMyNSw2ICszMzAsMTEgQEAgY2FzaF9vdXQoUEdfRlVOQ1RJ T05fQVJHUykKIAkJCQlzZXBfYnlfc3BhY2U7CiAJc3RydWN0IGxjb252ICpsY29udmVydCA9IFBH TENfbG9jYWxlY29udigpOwogCisJaWYgKGxjb252ZXJ0ID09IE5VTEwpCisJCWVyZXR1cm4oZmNp bmZvLT5jb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVN T1JZKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBsb2NhbGUg aW5mb3JtYXRpb24iKSkpOworCiAJLyogc2VlIGNvbW1lbnRzIGFib3V0IGZyYWNfZGlnaXRzIGlu IGNhc2hfaW4oKSAqLwogCXBvaW50cyA9IGxjb252ZXJ0LT5mcmFjX2RpZ2l0czsKIAlpZiAocG9p bnRzIDwgMCB8fCBwb2ludHMgPiAxMCkKQEAgLTEwMzYsNiArMTA0NiwxMSBAQCBjYXNoX251bWVy aWMoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQJCQlmcG9pbnQ7CiAJc3RydWN0IGxjb252ICpsY29u dmVydCA9IFBHTENfbG9jYWxlY29udigpOwogCisJaWYgKGxjb252ZXJ0ID09IE5VTEwpCisJCWVy ZXR1cm4oZmNpbmZvLT5jb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9P VVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZv ciBsb2NhbGUgaW5mb3JtYXRpb24iKSkpOworCiAJLyogc2VlIGNvbW1lbnRzIGFib3V0IGZyYWNf ZGlnaXRzIGluIGNhc2hfaW4oKSAqLwogCWZwb2ludCA9IGxjb252ZXJ0LT5mcmFjX2RpZ2l0czsK IAlpZiAoZnBvaW50IDwgMCB8fCBmcG9pbnQgPiAxMCkKQEAgLTEwOTUsNiArMTExMCwxMSBAQCBu dW1lcmljX2Nhc2goUEdfRlVOQ1RJT05fQVJHUykKIAlEYXR1bQkJbnVtZXJpY19zY2FsZTsKIAlz dHJ1Y3QgbGNvbnYgKmxjb252ZXJ0ID0gUEdMQ19sb2NhbGVjb252KCk7CiAKKwlpZiAobGNvbnZl cnQgPT0gTlVMTCkKKwkJZXJldHVybihmY2luZm8tPmNvbnRleHQsIChEYXR1bSkgMCwKKwkJCQko ZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCBh bGxvY2F0ZSBtZW1vcnkgZm9yIGxvY2FsZSBpbmZvcm1hdGlvbiIpKSk7CisKIAkvKiBzZWUgY29t bWVudHMgYWJvdXQgZnJhY19kaWdpdHMgaW4gY2FzaF9pbigpICovCiAJZnBvaW50ID0gbGNvbnZl cnQtPmZyYWNfZGlnaXRzOwogCWlmIChmcG9pbnQgPCAwIHx8IGZwb2ludCA+IDEwKQpAQCAtMTEy OCw2ICsxMTQ4LDExIEBAIGludDRfY2FzaChQR19GVU5DVElPTl9BUkdTKQogCWludAkJCWk7CiAJ c3RydWN0IGxjb252ICpsY29udmVydCA9IFBHTENfbG9jYWxlY29udigpOwogCisJaWYgKGxjb252 ZXJ0ID09IE5VTEwpCisJCWVyZXR1cm4oZmNpbmZvLT5jb250ZXh0LCAoRGF0dW0pIDAsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qg YWxsb2NhdGUgbWVtb3J5IGZvciBsb2NhbGUgaW5mb3JtYXRpb24iKSkpOworCiAJLyogc2VlIGNv bW1lbnRzIGFib3V0IGZyYWNfZGlnaXRzIGluIGNhc2hfaW4oKSAqLwogCWZwb2ludCA9IGxjb252 ZXJ0LT5mcmFjX2RpZ2l0czsKIAlpZiAoZnBvaW50IDwgMCB8fCBmcG9pbnQgPiAxMCkKQEAgLTEx NTgsNiArMTE4MywxMCBAQCBpbnQ4X2Nhc2goUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQJCQlpOwog CXN0cnVjdCBsY29udiAqbGNvbnZlcnQgPSBQR0xDX2xvY2FsZWNvbnYoKTsKIAorCWVyZXR1cm4o ZmNpbmZvLT5jb250ZXh0LCAoRGF0dW0pIDAsCisJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9N RU1PUlkpLAorCQkJIGVycm1zZygiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbG9jYWxl IGluZm9ybWF0aW9uIikpKTsKKwogCS8qIHNlZSBjb21tZW50cyBhYm91dCBmcmFjX2RpZ2l0cyBp biBjYXNoX2luKCkgKi8KIAlmcG9pbnQgPSBsY29udmVydC0+ZnJhY19kaWdpdHM7CiAJaWYgKGZw b2ludCA8IDAgfHwgZnBvaW50ID4gMTApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0dGluZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwppbmRl eCA4MTMxMDkxZjc5Li42OTViYjJhNDkxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvZm9ybWF0dGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMK QEAgLTUwNDksMTIgKzUwNDksMTIgQEAgTlVNX3ByZXBhcmVfbG9jYWxlKE5VTVByb2MgKk5wKQog CQkvKgogCQkgKiBQb3NpdGl2ZSAvIE5lZ2F0aXZlIG51bWJlciBzaWduCiAJCSAqLwotCQlpZiAo bGNvbnYtPm5lZ2F0aXZlX3NpZ24gJiYgKmxjb252LT5uZWdhdGl2ZV9zaWduKQorCQlpZiAobGNv bnYgJiYgbGNvbnYtPm5lZ2F0aXZlX3NpZ24gJiYgKmxjb252LT5uZWdhdGl2ZV9zaWduKQogCQkJ TnAtPkxfbmVnYXRpdmVfc2lnbiA9IGxjb252LT5uZWdhdGl2ZV9zaWduOwogCQllbHNlCiAJCQlO cC0+TF9uZWdhdGl2ZV9zaWduID0gIi0iOwogCi0JCWlmIChsY29udi0+cG9zaXRpdmVfc2lnbiAm JiAqbGNvbnYtPnBvc2l0aXZlX3NpZ24pCisJCWlmIChsY29udiAmJiBsY29udi0+cG9zaXRpdmVf c2lnbiAmJiAqbGNvbnYtPnBvc2l0aXZlX3NpZ24pCiAJCQlOcC0+TF9wb3NpdGl2ZV9zaWduID0g bGNvbnYtPnBvc2l0aXZlX3NpZ247CiAJCWVsc2UKIAkJCU5wLT5MX3Bvc2l0aXZlX3NpZ24gPSAi KyI7CkBAIC01MDYyLDkgKzUwNjIsOCBAQCBOVU1fcHJlcGFyZV9sb2NhbGUoTlVNUHJvYyAqTnAp CiAJCS8qCiAJCSAqIE51bWJlciBkZWNpbWFsIHBvaW50CiAJCSAqLwotCQlpZiAobGNvbnYtPmRl Y2ltYWxfcG9pbnQgJiYgKmxjb252LT5kZWNpbWFsX3BvaW50KQorCQlpZiAobGNvbnYgJiYgbGNv bnYtPmRlY2ltYWxfcG9pbnQgJiYgKmxjb252LT5kZWNpbWFsX3BvaW50KQogCQkJTnAtPmRlY2lt YWwgPSBsY29udi0+ZGVjaW1hbF9wb2ludDsKLQogCQllbHNlCiAJCQlOcC0+ZGVjaW1hbCA9ICIu IjsKIApAQCAtNTA3OCw3ICs1MDc3LDcgQEAgTlVNX3ByZXBhcmVfbG9jYWxlKE5VTVByb2MgKk5w KQogCQkgKiBidXQgIiIgZm9yIHRob3VzYW5kc19zZXAsIHNvIHdlIHNldCB0aGUgdGhvdXNhbmRz X3NlcCB0b28uCiAJCSAqIGh0dHA6Ly9hcmNoaXZlcy5wb3N0Z3Jlc3FsLm9yZy9wZ3NxbC1oYWNr ZXJzLzIwMDctMTEvbXNnMDA3NzIucGhwCiAJCSAqLwotCQlpZiAobGNvbnYtPnRob3VzYW5kc19z ZXAgJiYgKmxjb252LT50aG91c2FuZHNfc2VwKQorCQlpZiAobGNvbnYgJiYgbGNvbnYtPnRob3Vz YW5kc19zZXAgJiYgKmxjb252LT50aG91c2FuZHNfc2VwKQogCQkJTnAtPkxfdGhvdXNhbmRzX3Nl cCA9IGxjb252LT50aG91c2FuZHNfc2VwOwogCQkvKiBNYWtlIHN1cmUgdGhvdXNhbmRzIHNlcGFy YXRvciBkb2Vzbid0IG1hdGNoIGRlY2ltYWwgcG9pbnQgc3ltYm9sLiAqLwogCQllbHNlIGlmIChz dHJjbXAoTnAtPmRlY2ltYWwsICIsIikgIT0gMCkKQEAgLTUwODksNyArNTA4OCw3IEBAIE5VTV9w cmVwYXJlX2xvY2FsZShOVU1Qcm9jICpOcCkKIAkJLyoKIAkJICogQ3VycmVuY3kgc3ltYm9sCiAJ CSAqLwotCQlpZiAobGNvbnYtPmN1cnJlbmN5X3N5bWJvbCAmJiAqbGNvbnYtPmN1cnJlbmN5X3N5 bWJvbCkKKwkJaWYgKGxjb252ICYmIGxjb252LT5jdXJyZW5jeV9zeW1ib2wgJiYgKmxjb252LT5j dXJyZW5jeV9zeW1ib2wpCiAJCQlOcC0+TF9jdXJyZW5jeV9zeW1ib2wgPSBsY29udi0+Y3VycmVu Y3lfc3ltYm9sOwogCQllbHNlCiAJCQlOcC0+TF9jdXJyZW5jeV9zeW1ib2wgPSAiICI7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMKaW5kZXggNjFkNWM1ZGM0Yy4uN2VhMzhiMTg4MCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGUuYwpAQCAtMTAyLDYgKzEwMiwyMyBAQCBjaGFyCSAgICpsb2Nh bGVfdGltZTsKIAogaW50CQkJaWN1X3ZhbGlkYXRpb25fbGV2ZWwgPSBXQVJOSU5HOwogCisjaWZk ZWYgSEFWRV9VU0VMT0NBTEUKKy8qCisgKiBDdXJyZW50IGxvY2FsZSBzZXR0aW5ncworICoKKyAq IHVzZWxvY2FsZSgpIGFuZCBmcmllbmRzIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCB0byBzZXRs b2NhbGUoY2F0LCBOVUxMKSwgc28KKyAqIGFzIHdlIHNldCBsb2NhbGVzIGZvciB2YXJpb3VzIGNh dGVnb3JpZXMsIHN0YXNoIHRoZW0gZm9yIHJldHJpZXZhbCBhcyBuZWVkZWQuCisgKi8KK3N0YXRp YyBzdHJ1Y3QgeworCWNoYXIgKmNvbGxhdGU7CisJY2hhciAqY3R5cGU7CisJY2hhciAqbWVzc2Fn ZXM7CisJY2hhciAqbW9uZXRhcnk7CisJY2hhciAqbnVtZXJpYzsKKwljaGFyICp0aW1lOworfSBj dXJyX2xvY2FsZXMgPSB7IDAgfTsKKyNlbmRpZiAvKiBIQVZFX1VTRUxPQ0FMRSAqLworCiAvKgog ICogbGNfdGltZSBsb2NhbGl6YXRpb24gY2FjaGUuCiAgKgpAQCAtMjEyLDI4ICsyMjksMTQ5IEBA IGxvY2FsZV9pc19jKGNvbnN0IGNoYXIgKmxvY2FsZSwgYm9vbCBpZ25vcmVfY2FzZSkKIH0KIAog CisjaWZkZWYgSEFWRV9VU0VMT0NBTEUKKy8qCisgKiBUdXJucyBsb2NhbGUgY2F0ZWdvcmllcyBp bnRvIHRoZWlyIG1hc2sgZXF1aXZhbGVudHMgZm9yIHVzZSBpbiBuZXdsb2NhbGUoMykKKyAqCisg KiBHQ0MgaGFzIHRoZSBtYXNrcyBkZWZpbmVkIGFzICgxIDw8IGNhdGVnb3J5KSwgYnV0IHRoaXMg aXNuJ3QgZ3VhcmFudGVlZCB0byBiZQorICogdGhlIHNhbWUgaW4gb3RoZXIgbGliY3MuCisgKi8K K3N0YXRpYyBpbnQKK2NhdGVnb3J5X3RvX21hc2soaW50IGNhdGVnb3J5KQoreworCXN3aXRjaCAo Y2F0ZWdvcnkpCisJeworCQljYXNlIExDX0FMTDoKKwkJCXJldHVybiBMQ19BTExfTUFTSzsKKwkJ Y2FzZSBMQ19DT0xMQVRFOgorCQkJcmV0dXJuIExDX0NPTExBVEVfTUFTSzsKKwkJY2FzZSBMQ19D VFlQRToKKwkJCXJldHVybiBMQ19DVFlQRV9NQVNLOworCSNpZmRlZiBMQ19NRVNTQUdFUworCQlj YXNlIExDX01FU1NBR0VTOgorCQkJcmV0dXJuIExDX01FU1NBR0VTX01BU0s7CisJI2VuZGlmCisJ CWNhc2UgTENfTU9ORVRBUlk6CisJCQlyZXR1cm4gTENfTU9ORVRBUllfTUFTSzsKKwkJY2FzZSBM Q19OVU1FUklDOgorCQkJcmV0dXJuIExDX05VTUVSSUNfTUFTSzsKKwkJY2FzZSBMQ19USU1FOgor CQkJcmV0dXJuIExDX1RJTUVfTUFTSzsKKwl9CisKKwlwZ191bnJlYWNoYWJsZSgpOworfQorCisK K3N0YXRpYyBjaGFyICoKK3BnX2dldGxvY2FsZShpbnQgY2F0ZWdvcnkpCit7CisJc3dpdGNoIChj YXRlZ29yeSkKKwl7CisJCWNhc2UgTENfQ09MTEFURToKKwkJCXJldHVybiBjdXJyX2xvY2FsZXMu Y29sbGF0ZTsKKwkJY2FzZSBMQ19DVFlQRToKKwkJCXJldHVybiBjdXJyX2xvY2FsZXMuY3R5cGU7 CisJCWNhc2UgTENfTUVTU0FHRVM6CisJCQlyZXR1cm4gY3Vycl9sb2NhbGVzLm1lc3NhZ2VzOwor CQljYXNlIExDX01PTkVUQVJZOgorCQkJcmV0dXJuIGN1cnJfbG9jYWxlcy5tb25ldGFyeTsKKwkJ Y2FzZSBMQ19OVU1FUklDOgorCQkJcmV0dXJuIGN1cnJfbG9jYWxlcy5udW1lcmljOworCQljYXNl IExDX1RJTUU6CisJCQlyZXR1cm4gY3Vycl9sb2NhbGVzLnRpbWU7CisJCWRlZmF1bHQ6CisJCQlw Z191bnJlYWNoYWJsZSgpOworCX0KK30KKyNlbmRpZiAvKiBIQVZFX1VTRUxPQ0FMRSAqLworCisK IC8qCi0gKiBwZ19wZXJtX3NldGxvY2FsZQotICoKLSAqIFRoaXMgd3JhcHMgdGhlIGxpYmMgZnVu Y3Rpb24gc2V0bG9jYWxlKCksIHdpdGggdHdvIGFkZGl0aW9ucy4gIEZpcnN0LCB3aGVuCi0gKiBj aGFuZ2luZyBMQ19DVFlQRSwgdXBkYXRlIGdldHRleHQncyBlbmNvZGluZyBmb3IgdGhlIGN1cnJl bnQgbWVzc2FnZQotICogZG9tYWluLiAgR05VIGdldHRleHQgYXV0b21hdGljYWxseSB0cmFja3Mg TENfQ1RZUEUgb24gbW9zdCBwbGF0Zm9ybXMsIGJ1dAotICogbm90IG9uIFdpbmRvd3MuICBTZWNv bmQsIGlmIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvcnJlc3BvbmRpbmcKLSAq IExDX1hYWCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gbWF0Y2guICBCeSBzZXR0aW5n IHRoZSBlbnZpcm9ubWVudAotICogdmFyaWFibGUsIHdlIGVuc3VyZSB0aGF0IGFueSBzdWJzZXF1 ZW50IHVzZSBvZiBzZXRsb2NhbGUoLi4uLCAiIikgd2lsbAotICogcHJlc2VydmUgdGhlIHNldHRp bmdzIG1hZGUgdGhyb3VnaCB0aGlzIHJvdXRpbmUuICBPZiBjb3Vyc2UsIExDX0FMTCBtdXN0Ci0g KiBhbHNvIGJlIHVuc2V0IHRvIGZ1bGx5IGVuc3VyZSB0aGF0LCBidXQgdGhhdCBoYXMgdG8gYmUg ZG9uZSBlbHNld2hlcmUgYWZ0ZXIKLSAqIGFsbCB0aGUgaW5kaXZpZHVhbCBMQ19YWFggdmFyaWFi bGVzIGhhdmUgYmVlbiBzZXQgY29ycmVjdGx5LiAgKFRoYW5rIHlvdQotICogUGVybCBmb3IgbWFr aW5nIHRoaXMga2x1Z2UgbmVjZXNzYXJ5LikKKyAqIHBnX3NldGxvY2FsZQorICoKKyAqIFRoaXMg d3JhcHMgdGhlIGxpYmMgZnVuY3Rpb25zIHVzZWxvY2FsZSgpIG9yIHNldGxvY2FsZSgpIChkZXBl bmRpbmcgb24gdGhlCisgKiBwbGF0Zm9ybSksIHdpdGggYSBzaW5nbGUgYWRkaXRpb24uICBXaGVu IGNoYW5naW5nIExDX0NUWVBFLCB1cGRhdGUgZ2V0dGV4dCdzCisgKiBlbmNvZGluZyBmb3IgdGhl IGN1cnJlbnQgbWVzc2FnZSBkb21haW4uIEdOVSBnZXR0ZXh0IGF1dG9tYXRpY2FsbHkgdHJhY2tz CisgKiBMQ19DVFlQRSBvbiBtb3N0IHBsYXRmb3JtcywgYnV0IG5vdCBvbiBXaW5kb3dzLiAgVGhp cyBmdW5jdGlvbiB3aWxsIGFib3J0IGlmCisgKiBsb2NhbGUgaXMgdGhlIGVtcHR5IHN0cmluZy4g IEEgd29ya2Fyb3VuZCBpcyB0byBwYXNzIHRoZSBvdXRwdXQgb2YKKyAqIHNldGxvY2FsZShjYXRl Z29yeSwgIiIpIHRvIHRoZSBsb2NhbGUgYXJndW1lbnQuCiAgKi8KIGNoYXIgKgotcGdfcGVybV9z ZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCitwZ19zZXRsb2NhbGUo aW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCiB7CiAJY2hhcgkgICAqcmVzdWx0Owot CWNvbnN0IGNoYXIgKmVudnZhcjsKKyNpZmRlZiBIQVZFX1VTRUxPQ0FMRQorCWNoYXIJICAqKnNh dmU7CisJaW50CQkJY2F0ZWdvcnlfbWFzazsKKwlsb2NhbGVfdAlwcmV2X2xvY2FsZTsKKwlsb2Nh bGVfdAl0ZW1wX2xvY2FsZTsKKwlsb2NhbGVfdAl3b3JrX2xvY2FsZTsKKworCWlmIChsb2NhbGUg PT0gTlVMTCkKKwkJcmV0dXJuIHBnX2dldGxvY2FsZShjYXRlZ29yeSk7CisKKwlBc3NlcnQobG9j YWxlWzBdICE9ICdcMCcpOworCisJY2F0ZWdvcnlfbWFzayA9IGNhdGVnb3J5X3RvX21hc2soY2F0 ZWdvcnkpOworCisJcHJldl9sb2NhbGUgPSB1c2Vsb2NhbGUoKGxvY2FsZV90KSAwKTsKKwlBc3Nl cnQocHJldl9sb2NhbGUgIT0gKGxvY2FsZV90KSAwKTsKKworCXJlc3VsdCA9IHN0cmR1cChsb2Nh bGUpOworCXdvcmtfbG9jYWxlID0gZHVwbG9jYWxlKHByZXZfbG9jYWxlKTsKKwlpZiAoIXJlc3Vs dCB8fCB3b3JrX2xvY2FsZSA9PSAobG9jYWxlX3QpIDApIHsKKwkJZXJlcG9ydChFUlJPUiwKKwkJ CQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAorCQkJCSBlcnJtc2coIm91dCBvZiBt ZW1vcnkiKSkpOworCisJCXJldHVybiBOVUxMOworCX0KKworCXRlbXBfbG9jYWxlID0gbmV3bG9j YWxlKGNhdGVnb3J5X21hc2ssIGxvY2FsZSwgd29ya19sb2NhbGUpOworCWlmICh0ZW1wX2xvY2Fs ZSA9PSAobG9jYWxlX3QpIDApCisJeworCQlmcmVlbG9jYWxlKHdvcmtfbG9jYWxlKTsKKworCQly ZXR1cm4gTlVMTDsJCQkvKiBmYWxsIG91dCBpbW1lZGlhdGVseSBvbiBmYWlsdXJlICovCisJfQor CXdvcmtfbG9jYWxlID0gdGVtcF9sb2NhbGU7CisKKwl1c2Vsb2NhbGUod29ya19sb2NhbGUpOwor CWlmIChwcmV2X2xvY2FsZSAhPSBMQ19HTE9CQUxfTE9DQUxFKQorCQlmcmVlbG9jYWxlKHByZXZf bG9jYWxlKTsKKworCS8qCisJICogQ29weWluZyB0aGUgbG9jYWxlIG11c3Qgb2NjdXIgYmVmb3Jl IHdlIHBvdGVudGlhbGx5IGJpbmQgdGhlIHRleHQgZG9tYWluLgorCSAqLworCXN3aXRjaCAoY2F0 ZWdvcnkpCisJeworCQljYXNlIExDX0NPTExBVEU6CisJCQlzYXZlID0gJmN1cnJfbG9jYWxlcy5j b2xsYXRlOworCQkJYnJlYWs7CisJCWNhc2UgTENfQ1RZUEU6CisJCQlzYXZlID0gJmN1cnJfbG9j YWxlcy5jdHlwZTsKKwkJCWJyZWFrOworCQljYXNlIExDX01FU1NBR0VTOgorCQkJc2F2ZSA9ICZj dXJyX2xvY2FsZXMubWVzc2FnZXM7CisJCQlicmVhazsKKwkJY2FzZSBMQ19NT05FVEFSWToKKwkJ CXNhdmUgPSAmY3Vycl9sb2NhbGVzLm1vbmV0YXJ5OworCQkJYnJlYWs7CisJCWNhc2UgTENfTlVN RVJJQzoKKwkJCXNhdmUgPSAmY3Vycl9sb2NhbGVzLm51bWVyaWM7CisJCQlicmVhazsKKwkJY2Fz ZSBMQ19USU1FOgorCQkJc2F2ZSA9ICZjdXJyX2xvY2FsZXMudGltZTsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJcGdfdW5yZWFjaGFibGUoKTsKKwl9CisKKwkvKiBGcmVlIG9sZCBsb2NhbGUg c3RyaW5nLCBhbmQgc3Rhc2ggdGhlIG5ldyBvbmUgKi8KKwlmcmVlKCpzYXZlKTsKKwkqc2F2ZSA9 IHJlc3VsdDsKIAotI2lmbmRlZiBXSU4zMgotCXJlc3VsdCA9IHNldGxvY2FsZShjYXRlZ29yeSwg bG9jYWxlKTsKICNlbHNlCiAKIAkvKgpAQCAtMjUyLDExICszOTAsMTIgQEAgcGdfcGVybV9zZXRs b2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCiAJZWxzZQogI2VuZGlmCiAJ CXJlc3VsdCA9IHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKTsKLSNlbmRpZgkJCQkJCQkvKiBX SU4zMiAqLwogCiAJaWYgKHJlc3VsdCA9PSBOVUxMKQogCQlyZXR1cm4gcmVzdWx0OwkJCS8qIGZh bGwgb3V0IGltbWVkaWF0ZWx5IG9uIGZhaWx1cmUgKi8KIAorI2VuZGlmIC8qIEhBVkVfVVNFTE9D QUxFICovCisKIAkvKgogCSAqIFVzZSB0aGUgcmlnaHQgZW5jb2RpbmcgaW4gdHJhbnNsYXRlZCBt ZXNzYWdlcy4gIFVuZGVyIEVOQUJMRV9OTFMsIGxldAogCSAqIHBnX2JpbmRfdGV4dGRvbWFpbl9j b2Rlc2V0KCkgZmlndXJlIGl0IG91dC4gIFVuZGVyICFFTkFCTEVfTkxTLCBtZXNzYWdlCkBAIC0y NjYsMTEgKzQwNSwxMyBAQCBwZ19wZXJtX3NldGxvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0IGNo YXIgKmxvY2FsZSkKIAkgKi8KIAlpZiAoY2F0ZWdvcnkgPT0gTENfQ1RZUEUpCiAJeworI2lmbmRl ZiBIQVZFX1VTRUxPQ0FMRQogCQlzdGF0aWMgY2hhciBzYXZlX2xjX2N0eXBlW0xPQ0FMRV9OQU1F X0JVRkxFTl07CiAKIAkJLyogY29weSBzZXRsb2NhbGUoKSByZXR1cm4gdmFsdWUgYmVmb3JlIGNh bGxlZSBpbnZva2VzIGl0IGFnYWluICovCiAJCXN0cmxjcHkoc2F2ZV9sY19jdHlwZSwgcmVzdWx0 LCBzaXplb2Yoc2F2ZV9sY19jdHlwZSkpOwogCQlyZXN1bHQgPSBzYXZlX2xjX2N0eXBlOworI2Vu ZGlmCiAKICNpZmRlZiBFTkFCTEVfTkxTCiAJCVNldE1lc3NhZ2VFbmNvZGluZyhwZ19iaW5kX3Rl eHRkb21haW5fY29kZXNldCh0ZXh0ZG9tYWluKE5VTEwpKSk7CkBAIC0yNzksNDIgKzQyMCw2IEBA IHBnX3Blcm1fc2V0bG9jYWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKQogI2Vu ZGlmCiAJfQogCi0Jc3dpdGNoIChjYXRlZ29yeSkKLQl7Ci0JCWNhc2UgTENfQ09MTEFURToKLQkJ CWVudnZhciA9ICJMQ19DT0xMQVRFIjsKLQkJCWJyZWFrOwotCQljYXNlIExDX0NUWVBFOgotCQkJ ZW52dmFyID0gIkxDX0NUWVBFIjsKLQkJCWJyZWFrOwotI2lmZGVmIExDX01FU1NBR0VTCi0JCWNh c2UgTENfTUVTU0FHRVM6Ci0JCQllbnZ2YXIgPSAiTENfTUVTU0FHRVMiOwotI2lmZGVmIFdJTjMy Ci0JCQlyZXN1bHQgPSBJc29Mb2NhbGVOYW1lKGxvY2FsZSk7Ci0JCQlpZiAocmVzdWx0ID09IE5V TEwpCi0JCQkJcmVzdWx0ID0gKGNoYXIgKikgbG9jYWxlOwotCQkJZWxvZyhERUJVRzMsICJJc29M b2NhbGVOYW1lKCkgZXhlY3V0ZWQ7IGxvY2FsZTogXCIlc1wiIiwgcmVzdWx0KTsKLSNlbmRpZgkJ CQkJCQkvKiBXSU4zMiAqLwotCQkJYnJlYWs7Ci0jZW5kaWYJCQkJCQkJLyogTENfTUVTU0FHRVMg Ki8KLQkJY2FzZSBMQ19NT05FVEFSWToKLQkJCWVudnZhciA9ICJMQ19NT05FVEFSWSI7Ci0JCQli cmVhazsKLQkJY2FzZSBMQ19OVU1FUklDOgotCQkJZW52dmFyID0gIkxDX05VTUVSSUMiOwotCQkJ YnJlYWs7Ci0JCWNhc2UgTENfVElNRToKLQkJCWVudnZhciA9ICJMQ19USU1FIjsKLQkJCWJyZWFr OwotCQlkZWZhdWx0OgotCQkJZWxvZyhGQVRBTCwgInVucmVjb2duaXplZCBMQyBjYXRlZ29yeTog JWQiLCBjYXRlZ29yeSk7Ci0JCQlyZXR1cm4gTlVMTDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KLQl9Ci0KLQlpZiAoc2V0ZW52KGVudnZhciwgcmVzdWx0LCAxKSAhPSAwKQotCQlyZXR1cm4g TlVMTDsKLQogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTMzMiw2ICs0MzcsNDggQEAgcGdfcGVy bV9zZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpCiBib29sCiBjaGVj a19sb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKipjYW5vbm5h bWUpCiB7CisjaWZkZWYgSEFWRV9VU0VMT0NBTEUKKwlsb2NhbGVfdAlzYXZlZF9sb2NhbGU7CisJ bG9jYWxlX3QJdGVtcF9sb2NhbGU7CisJbG9jYWxlX3QJd29ya19sb2NhbGU7CisJaW50CQkJY2F0 ZWdvcnlfbWFzazsKKworCWNhdGVnb3J5X21hc2sgPSBjYXRlZ29yeV90b19tYXNrKGNhdGVnb3J5 KTsKKworCWlmIChjYW5vbm5hbWUpCisJCSpjYW5vbm5hbWUgPSBOVUxMOwkJLyogaW4gY2FzZSBv ZiBmYWlsdXJlICovCisKKwlzYXZlZF9sb2NhbGUgPSB1c2Vsb2NhbGUoKGxvY2FsZV90KSAwKTsK Kwl3b3JrX2xvY2FsZSA9IGR1cGxvY2FsZShzYXZlZF9sb2NhbGUpOworCWlmICh3b3JrX2xvY2Fs ZSA9PSAobG9jYWxlX3QpIDApCisJeworCQlpZiAoZXJybm8gPT0gRU5PTUVNKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJIGVy cm1zZygib3V0IG9mIG1lbW9yeSIpKSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXRlbXBf bG9jYWxlID0gbmV3bG9jYWxlKGNhdGVnb3J5X21hc2ssIGxvY2FsZSwgd29ya19sb2NhbGUpOwor CWlmICh0ZW1wX2xvY2FsZSA9PSAobG9jYWxlX3QpIDApIHsKKwkJZnJlZWxvY2FsZSh3b3JrX2xv Y2FsZSk7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwl3b3JrX2xvY2FsZSA9IHRlbXBfbG9jYWxl OworCisJdXNlbG9jYWxlKHdvcmtfbG9jYWxlKTsKKwlpZiAoY2Fub25uYW1lKQorCQkqY2Fub25u YW1lID0gcHN0cmR1cChsb2NhbGUpOyAvKiBUT0RPOiBUaGlzIGRvZXMgbm90IGhhbmRsZSAiIiBh cyB0aGUgbG9jYWxlICovCisKKwl1c2Vsb2NhbGUoc2F2ZWRfbG9jYWxlKTsKKwlmcmVlbG9jYWxl KHdvcmtfbG9jYWxlKTsKKworCXJldHVybiB0cnVlOworCisjZWxzZQorCiAJY2hhcgkgICAqc2F2 ZTsKIAljaGFyCSAgICpyZXM7CiAKQEAgLTM1OCw2ICs1MDUsNyBAQCBjaGVja19sb2NhbGUoaW50 IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKipjYW5vbm5hbWUpCiAJcGZyZWUo c2F2ZSk7CiAKIAlyZXR1cm4gKHJlcyAhPSBOVUxMKTsKKyNlbmRpZiAvKiBIQVZFX1VTRUxPQ0FM RSAqLwogfQogCiAKQEAgLTM3MCw3ICs1MTgsNyBAQCBjaGVja19sb2NhbGUoaW50IGNhdGVnb3J5 LCBjb25zdCBjaGFyICpsb2NhbGUsIGNoYXIgKipjYW5vbm5hbWUpCiAgKgogICogTm90ZTogd2Ug YWNjZXB0IHZhbHVlID0gIiIgYXMgc2VsZWN0aW5nIHRoZSBwb3N0bWFzdGVyJ3MgZW52aXJvbm1l bnQKICAqIHZhbHVlLCB3aGF0ZXZlciBpdCB3YXMgKHNvIGxvbmcgYXMgdGhlIGVudmlyb25tZW50 IHNldHRpbmcgaXMgbGVnYWwpLgotICogVGhpcyB3aWxsIGhhdmUgYmVlbiBsb2NrZWQgZG93biBi eSBhbiBlYXJsaWVyIGNhbGwgdG8gcGdfcGVybV9zZXRsb2NhbGUuCisgKiBUaGlzIHdpbGwgaGF2 ZSBiZWVuIGxvY2tlZCBkb3duIGJ5IGFuIGVhcmxpZXIgY2FsbCB0byBwZ19zZXRsb2NhbGUuCiAg Ki8KIGJvb2wKIGNoZWNrX2xvY2FsZV9tb25ldGFyeShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0 cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCkBAIC00NDksNyArNTk3LDcgQEAgYXNzaWduX2xvY2FsZV9t ZXNzYWdlcyhjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKQogCSAqIFdlIGlnbm9yZSBm YWlsdXJlLCBhcyBwZXIgY29tbWVudCBhYm92ZS4KIAkgKi8KICNpZmRlZiBMQ19NRVNTQUdFUwot CSh2b2lkKSBwZ19wZXJtX3NldGxvY2FsZShMQ19NRVNTQUdFUywgbmV3dmFsKTsKKwkodm9pZCkg cGdfc2V0bG9jYWxlKExDX01FU1NBR0VTLCBuZXd2YWwpOwogI2VuZGlmCiB9CiAKQEAgLTU0NSwx MSArNjkzLDggQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJc3RhdGljIGJvb2wgQ3VycmVudExv Y2FsZUNvbnZBbGxvY2F0ZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgbGNvbnYgKmV4dGxjb252OwogCXN0 cnVjdCBsY29udiB3b3JrbGNvbnY7Ci0JY2hhcgkgICAqc2F2ZV9sY19tb25ldGFyeTsKLQljaGFy CSAgICpzYXZlX2xjX251bWVyaWM7Ci0jaWZkZWYgV0lOMzIKLQljaGFyCSAgICpzYXZlX2xjX2N0 eXBlOwotI2VuZGlmCisJbG9jYWxlX3QJc2F2ZWRfbG9jYWxlOworCWxvY2FsZV90CXdvcmtfbG9j YWxlOwogCiAJLyogRGlkIHdlIGRvIGl0IGFscmVhZHk/ICovCiAJaWYgKEN1cnJlbnRMb2NhbGVD b252VmFsaWQpCkBAIC01NzYsMTYgKzcyMSwxNSBAQCBQR0xDX2xvY2FsZWNvbnYodm9pZCkKIAkg Ki8KIAltZW1zZXQoJndvcmtsY29udiwgMCwgc2l6ZW9mKHdvcmtsY29udikpOwogCi0JLyogU2F2 ZSBwcmV2YWlsaW5nIHZhbHVlcyBvZiBtb25ldGFyeSBhbmQgbnVtZXJpYyBsb2NhbGVzICovCi0J c2F2ZV9sY19tb25ldGFyeSA9IHNldGxvY2FsZShMQ19NT05FVEFSWSwgTlVMTCk7Ci0JaWYgKCFz YXZlX2xjX21vbmV0YXJ5KQotCQllbG9nKEVSUk9SLCAic2V0bG9jYWxlKE5VTEwpIGZhaWxlZCIp OwotCXNhdmVfbGNfbW9uZXRhcnkgPSBwc3RyZHVwKHNhdmVfbGNfbW9uZXRhcnkpOworCS8qIFNh dmUgcHJldmFpbGluZyBsb2NhbGUgKi8KKwlzYXZlZF9sb2NhbGUgPSB1c2Vsb2NhbGUoKGxvY2Fs ZV90KSAwKTsKKwlBc3NlcnQoc2F2ZWRfbG9jYWxlICE9IChsb2NhbGVfdCkgMCk7CiAKLQlzYXZl X2xjX251bWVyaWMgPSBzZXRsb2NhbGUoTENfTlVNRVJJQywgTlVMTCk7Ci0JaWYgKCFzYXZlX2xj X251bWVyaWMpCi0JCWVsb2coRVJST1IsICJzZXRsb2NhbGUoTlVMTCkgZmFpbGVkIik7Ci0Jc2F2 ZV9sY19udW1lcmljID0gcHN0cmR1cChzYXZlX2xjX251bWVyaWMpOworCXdvcmtfbG9jYWxlID0g ZHVwbG9jYWxlKHNhdmVkX2xvY2FsZSk7CisJaWYgKHdvcmtfbG9jYWxlID09IChsb2NhbGVfdCkg MCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkp LAorCQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkpOwogCiAjaWZkZWYgV0lOMzIKIApAQCAt NjAzLDM3ICs3NDcsMzcgQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJICogcmVzdWx0cy4gIEhl bmNlLCB3ZSBtdXN0IHRlbXBvcmFyaWx5IHNldCB0aGF0IGNhdGVnb3J5IGFzIHdlbGwuCiAJICov CiAKLQkvKiBTYXZlIHByZXZhaWxpbmcgdmFsdWUgb2YgY3R5cGUgbG9jYWxlICovCi0Jc2F2ZV9s Y19jdHlwZSA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7Ci0JaWYgKCFzYXZlX2xjX2N0eXBl KQotCQllbG9nKEVSUk9SLCAic2V0bG9jYWxlKE5VTEwpIGZhaWxlZCIpOwotCXNhdmVfbGNfY3R5 cGUgPSBwc3RyZHVwKHNhdmVfbGNfY3R5cGUpOwotCiAJLyogSGVyZSBiZWdpbnMgdGhlIGNyaXRp Y2FsIHNlY3Rpb24gd2hlcmUgd2UgbXVzdCBub3QgdGhyb3cgZXJyb3IgKi8KIAogCS8qIHVzZSBu dW1lcmljIHRvIHNldCB0aGUgY3R5cGUgKi8KLQlzZXRsb2NhbGUoTENfQ1RZUEUsIGxvY2FsZV9u dW1lcmljKTsKKwl3b3JrX2xvY2FsZSA9IG5ld2xvY2FsZShMQ19DVFlQRV9NQVNLLCBsb2NhbGVf bnVtZXJpYywgd29ya19sb2NhbGUpOworCUFzc2VydCh3b3JrX2xvY2FsZSAhPSAobG9jYWxlX3Qp IDApOwogI2VuZGlmCiAKIAkvKiBHZXQgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBmb3IgbnVtZXJp YyAqLwotCXNldGxvY2FsZShMQ19OVU1FUklDLCBsb2NhbGVfbnVtZXJpYyk7CisJd29ya19sb2Nh bGUgPSBuZXdsb2NhbGUoTENfTlVNRVJJQ19NQVNLLCBsb2NhbGVfbnVtZXJpYywgd29ya19sb2Nh bGUpOworCUFzc2VydCh3b3JrX2xvY2FsZSAhPSAobG9jYWxlX3QpIDApOworCXVzZWxvY2FsZSh3 b3JrX2xvY2FsZSk7CiAJZXh0bGNvbnYgPSBsb2NhbGVjb252KCk7CiAKLQkvKiBNdXN0IGNvcHkg ZGF0YSBub3cgaW4gY2FzZSBzZXRsb2NhbGUoKSBvdmVyd3JpdGVzIGl0ICovCisJLyogTXVzdCBj b3B5IGRhdGEgbm93IGluIGNhc2UgdXBkYXRpbmcgdGhlIGxvY2FsZSBvdmVyd3JpdGVzIGl0ICov CiAJd29ya2xjb252LmRlY2ltYWxfcG9pbnQgPSBzdHJkdXAoZXh0bGNvbnYtPmRlY2ltYWxfcG9p bnQpOwogCXdvcmtsY29udi50aG91c2FuZHNfc2VwID0gc3RyZHVwKGV4dGxjb252LT50aG91c2Fu ZHNfc2VwKTsKIAl3b3JrbGNvbnYuZ3JvdXBpbmcgPSBzdHJkdXAoZXh0bGNvbnYtPmdyb3VwaW5n KTsKIAogI2lmZGVmIFdJTjMyCiAJLyogdXNlIG1vbmV0YXJ5IHRvIHNldCB0aGUgY3R5cGUgKi8K LQlzZXRsb2NhbGUoTENfQ1RZUEUsIGxvY2FsZV9tb25ldGFyeSk7CisJd29ya19sb2NhbGUgPSBu ZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgbG9jYWxlX21vbmV0YXJ5LCB3b3JrX2xvY2FsZSk7CisJ QXNzZXJ0KHdvcmtfbG9jYWxlICE9IChsb2NhbGVfdCkgMCk7CiAjZW5kaWYKIAogCS8qIEdldCBm b3JtYXR0aW5nIGluZm9ybWF0aW9uIGZvciBtb25ldGFyeSAqLwotCXNldGxvY2FsZShMQ19NT05F VEFSWSwgbG9jYWxlX21vbmV0YXJ5KTsKKwl3b3JrX2xvY2FsZSA9IG5ld2xvY2FsZShMQ19NT05F VEFSWV9NQVNLLCBsb2NhbGVfbW9uZXRhcnksIHdvcmtfbG9jYWxlKTsKKwlBc3NlcnQod29ya19s b2NhbGUgIT0gKGxvY2FsZV90KSAwKTsKKwl1c2Vsb2NhbGUod29ya19sb2NhbGUpOwogCWV4dGxj b252ID0gbG9jYWxlY29udigpOwogCi0JLyogTXVzdCBjb3B5IGRhdGEgbm93IGluIGNhc2Ugc2V0 bG9jYWxlKCkgb3ZlcndyaXRlcyBpdCAqLworCS8qIE11c3QgY29weSBkYXRhIG5vdyBpbiBjYXNl IHVwZGF0aW5nIHRoZSBsb2NhbGUgb3ZlcndyaXRlcyBpdCAqLwogCXdvcmtsY29udi5pbnRfY3Vy cl9zeW1ib2wgPSBzdHJkdXAoZXh0bGNvbnYtPmludF9jdXJyX3N5bWJvbCk7CiAJd29ya2xjb252 LmN1cnJlbmN5X3N5bWJvbCA9IHN0cmR1cChleHRsY29udi0+Y3VycmVuY3lfc3ltYm9sKTsKIAl3 b3JrbGNvbnYubW9uX2RlY2ltYWxfcG9pbnQgPSBzdHJkdXAoZXh0bGNvbnYtPm1vbl9kZWNpbWFs X3BvaW50KTsKQEAgLTY1MSwyMiArNzk1LDkgQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJd29y a2xjb252LnBfc2lnbl9wb3NuID0gZXh0bGNvbnYtPnBfc2lnbl9wb3NuOwogCXdvcmtsY29udi5u X3NpZ25fcG9zbiA9IGV4dGxjb252LT5uX3NpZ25fcG9zbjsKIAotCS8qCi0JICogUmVzdG9yZSB0 aGUgcHJldmFpbGluZyBsb2NhbGUgc2V0dGluZ3M7IGZhaWx1cmUgdG8gZG8gc28gaXMgZmF0YWwu Ci0JICogUG9zc2libHkgd2UgY291bGQgbGltcCBhbG9uZyB3aXRoIG5vbmRlZmF1bHQgTENfTU9O RVRBUlkgb3IgTENfTlVNRVJJQywKLQkgKiBidXQgcHJvY2VlZGluZyB3aXRoIHRoZSB3cm9uZyB2 YWx1ZSBvZiBMQ19DVFlQRSB3b3VsZCBjZXJ0YWlubHkgYmUgYmFkCi0JICogbmV3czsgYW5kIGNv bnNpZGVyaW5nIHRoYXQgdGhlIHByZXZhaWxpbmcgTENfTU9ORVRBUlkgYW5kIExDX05VTUVSSUMK LQkgKiBhcmUgYWxtb3N0IGNlcnRhaW5seSAiQyIsIHRoZXJlJ3MgcmVhbGx5IG5vIHJlYXNvbiB0 aGF0IHJlc3RvcmluZyB0aG9zZQotCSAqIHNob3VsZCBmYWlsLgotCSAqLwotI2lmZGVmIFdJTjMy Ci0JaWYgKCFzZXRsb2NhbGUoTENfQ1RZUEUsIHNhdmVfbGNfY3R5cGUpKQotCQllbG9nKEZBVEFM LCAiZmFpbGVkIHRvIHJlc3RvcmUgTENfQ1RZUEUgdG8gXCIlc1wiIiwgc2F2ZV9sY19jdHlwZSk7 Ci0jZW5kaWYKLQlpZiAoIXNldGxvY2FsZShMQ19NT05FVEFSWSwgc2F2ZV9sY19tb25ldGFyeSkp Ci0JCWVsb2coRkFUQUwsICJmYWlsZWQgdG8gcmVzdG9yZSBMQ19NT05FVEFSWSB0byBcIiVzXCIi LCBzYXZlX2xjX21vbmV0YXJ5KTsKLQlpZiAoIXNldGxvY2FsZShMQ19OVU1FUklDLCBzYXZlX2xj X251bWVyaWMpKQotCQllbG9nKEZBVEFMLCAiZmFpbGVkIHRvIHJlc3RvcmUgTENfTlVNRVJJQyB0 byBcIiVzXCIiLCBzYXZlX2xjX251bWVyaWMpOworCS8qIFJlc3RvcmUgdGhlIHByZXZhaWxpbmcg bG9jYWxlIHNldHRpbmdzOyBmYWlsdXJlIHRvIGRvIHNvIGlzIGZhdGFsLiAqLworCXVzZWxvY2Fs ZShzYXZlZF9sb2NhbGUpOworCWZyZWVsb2NhbGUod29ya19sb2NhbGUpOwogCiAJLyoKIAkgKiBB dCB0aGlzIHBvaW50IHdlJ3ZlIGRvbmUgb3VyIGJlc3QgdG8gY2xlYW4gdXAsIGFuZCBjYW4gY2Fs bCBmdW5jdGlvbnMKQEAgLTY3NywxMyArODA4LDYgQEAgUEdMQ19sb2NhbGVjb252KHZvaWQpCiAJ ewogCQlpbnQJCQllbmNvZGluZzsKIAotCQkvKiBSZWxlYXNlIHRoZSBwc3RyZHVwJ2QgbG9jYWxl IG5hbWVzICovCi0JCXBmcmVlKHNhdmVfbGNfbW9uZXRhcnkpOwotCQlwZnJlZShzYXZlX2xjX251 bWVyaWMpOwotI2lmZGVmIFdJTjMyCi0JCXBmcmVlKHNhdmVfbGNfY3R5cGUpOwotI2VuZGlmCi0K IAkJLyogSWYgYW55IG9mIHRoZSBwcmVjZWRpbmcgc3RyZHVwIGNhbGxzIGZhaWxlZCwgY29tcGxh aW4gbm93LiAqLwogCQlpZiAoIXN0cnVjdF9sY29udl9pc192YWxpZCgmd29ya2xjb252KSkKIAkJ CWVyZXBvcnQoRVJST1IsCkBAIC04MzAsMTAgKzk1NCw4IEBAIGNhY2hlX2xvY2FsZV90aW1lKHZv aWQpCiAJYm9vbAkJc3RyZnRpbWVmYWlsID0gZmFsc2U7CiAJaW50CQkJZW5jb2Rpbmc7CiAJaW50 CQkJaTsKLQljaGFyCSAgICpzYXZlX2xjX3RpbWU7Ci0jaWZkZWYgV0lOMzIKLQljaGFyCSAgICpz YXZlX2xjX2N0eXBlOwotI2VuZGlmCisJbG9jYWxlX3QJc2F2ZWRfbG9jYWxlOworCWxvY2FsZV90 CXdvcmtfbG9jYWxlOwogCiAJLyogZGlkIHdlIGRvIHRoaXMgYWxyZWFkeT8gKi8KIAlpZiAoQ3Vy cmVudExDVGltZVZhbGlkKQpAQCAtODQ4LDExICs5NzAsMTUgQEAgY2FjaGVfbG9jYWxlX3RpbWUo dm9pZCkKIAkgKiByZXN1bHRzIGFmdGVyd2FyZHMuCiAJICovCiAKLQkvKiBTYXZlIHByZXZhaWxp bmcgdmFsdWUgb2YgdGltZSBsb2NhbGUgKi8KLQlzYXZlX2xjX3RpbWUgPSBzZXRsb2NhbGUoTENf VElNRSwgTlVMTCk7Ci0JaWYgKCFzYXZlX2xjX3RpbWUpCi0JCWVsb2coRVJST1IsICJzZXRsb2Nh bGUoTlVMTCkgZmFpbGVkIik7Ci0Jc2F2ZV9sY190aW1lID0gcHN0cmR1cChzYXZlX2xjX3RpbWUp OworCS8qIFNhdmUgcHJldmFpbGluZyBsb2NhbGUgKi8KKwlzYXZlZF9sb2NhbGUgPSB1c2Vsb2Nh bGUoKGxvY2FsZV90KSAwKTsKKwlBc3NlcnQoc2F2ZWRfbG9jYWxlICE9IChsb2NhbGVfdCkgMCk7 CisKKwl3b3JrX2xvY2FsZSA9IGR1cGxvY2FsZShzYXZlZF9sb2NhbGUpOworCWlmICh3b3JrX2xv Y2FsZSA9PSAobG9jYWxlX3QpIDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJS Q09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsKIAog I2lmZGVmIFdJTjMyCiAKQEAgLTg2MywxNyArOTg5LDE0IEBAIGNhY2hlX2xvY2FsZV90aW1lKHZv aWQpCiAJICogdGhlIGVuY29kaW5nIHdlJ2xsIGdldCBiYWNrIGZyb20gc3RyZnRpbWVfd2luMzIo KS4KIAkgKi8KIAotCS8qIFNhdmUgcHJldmFpbGluZyB2YWx1ZSBvZiBjdHlwZSBsb2NhbGUgKi8K LQlzYXZlX2xjX2N0eXBlID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKLQlpZiAoIXNhdmVf bGNfY3R5cGUpCi0JCWVsb2coRVJST1IsICJzZXRsb2NhbGUoTlVMTCkgZmFpbGVkIik7Ci0Jc2F2 ZV9sY19jdHlwZSA9IHBzdHJkdXAoc2F2ZV9sY19jdHlwZSk7Ci0KIAkvKiB1c2UgbGNfdGltZSB0 byBzZXQgdGhlIGN0eXBlICovCi0Jc2V0bG9jYWxlKExDX0NUWVBFLCBsb2NhbGVfdGltZSk7CisJ d29ya19sb2NhbGUgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgbG9jYWxlX3RpbWUsIHdvcmtf bG9jYWxlKTsKKwlBc3NlcnQod29ya19sb2NhbGUgIT0gKGxvY2FsZV90KSAwKTsKICNlbmRpZgog Ci0Jc2V0bG9jYWxlKExDX1RJTUUsIGxvY2FsZV90aW1lKTsKKwl3b3JrX2xvY2FsZSA9IG5ld2xv Y2FsZShMQ19USU1FX01BU0ssIGxvY2FsZV90aW1lLCB3b3JrX2xvY2FsZSk7CisJQXNzZXJ0KHdv cmtfbG9jYWxlICE9IChsb2NhbGVfdCkgMCk7CisJdXNlbG9jYWxlKHdvcmtfbG9jYWxlKTsKIAog CS8qIFdlIHVzZSB0aW1lcyBjbG9zZSB0byBjdXJyZW50IHRpbWUgYXMgZGF0YSBmb3Igc3RyZnRp bWUoKS4gKi8KIAl0aW1lbm93ID0gdGltZShOVUxMKTsKQEAgLTkyMSwxMiArMTA0NCw4IEBAIGNh Y2hlX2xvY2FsZV90aW1lKHZvaWQpCiAJICogUmVzdG9yZSB0aGUgcHJldmFpbGluZyBsb2NhbGUg c2V0dGluZ3M7IGFzIGluIFBHTENfbG9jYWxlY29udigpLAogCSAqIGZhaWx1cmUgdG8gZG8gc28g aXMgZmF0YWwuCiAJICovCi0jaWZkZWYgV0lOMzIKLQlpZiAoIXNldGxvY2FsZShMQ19DVFlQRSwg c2F2ZV9sY19jdHlwZSkpCi0JCWVsb2coRkFUQUwsICJmYWlsZWQgdG8gcmVzdG9yZSBMQ19DVFlQ RSB0byBcIiVzXCIiLCBzYXZlX2xjX2N0eXBlKTsKLSNlbmRpZgotCWlmICghc2V0bG9jYWxlKExD X1RJTUUsIHNhdmVfbGNfdGltZSkpCi0JCWVsb2coRkFUQUwsICJmYWlsZWQgdG8gcmVzdG9yZSBM Q19USU1FIHRvIFwiJXNcIiIsIHNhdmVfbGNfdGltZSk7CisJdXNlbG9jYWxlKHNhdmVkX2xvY2Fs ZSk7CisJZnJlZWxvY2FsZSh3b3JrX2xvY2FsZSk7CiAKIAkvKgogCSAqIEF0IHRoaXMgcG9pbnQg d2UndmUgZG9uZSBvdXIgYmVzdCB0byBjbGVhbiB1cCwgYW5kIGNhbiB0aHJvdyBlcnJvcnMsIG9y CkBAIC05MzUsMTIgKzEwNTQsNiBAQCBjYWNoZV9sb2NhbGVfdGltZSh2b2lkKQogCWlmIChzdHJm dGltZWZhaWwpCiAJCWVsb2coRVJST1IsICJzdHJmdGltZSgpIGZhaWxlZDogJW0iKTsKIAotCS8q IFJlbGVhc2UgdGhlIHBzdHJkdXAnZCBsb2NhbGUgbmFtZXMgKi8KLQlwZnJlZShzYXZlX2xjX3Rp bWUpOwotI2lmZGVmIFdJTjMyCi0JcGZyZWUoc2F2ZV9sY19jdHlwZSk7Ci0jZW5kaWYKLQogI2lm bmRlZiBXSU4zMgogCiAJLyoKQEAgLTEzMzUsMTggKzE0NDgsMTQgQEAgbGNfY29sbGF0ZV9pc19j KE9pZCBjb2xsYXRpb24pCiAJaWYgKGNvbGxhdGlvbiA9PSBERUZBVUxUX0NPTExBVElPTl9PSUQp CiAJewogCQlzdGF0aWMgaW50CXJlc3VsdCA9IC0xOwotCQljaGFyCSAgICpsb2NhbGVwdHI7CiAK IAkJaWYgKGRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCiAJCQly ZXR1cm4gZmFsc2U7CiAKIAkJaWYgKHJlc3VsdCA+PSAwKQogCQkJcmV0dXJuIChib29sKSByZXN1 bHQ7Ci0JCWxvY2FsZXB0ciA9IHNldGxvY2FsZShMQ19DT0xMQVRFLCBOVUxMKTsKLQkJaWYgKCFs b2NhbGVwdHIpCi0JCQllbG9nKEVSUk9SLCAiaW52YWxpZCBMQ19DT0xMQVRFIHNldHRpbmciKTsK IAotCQlyZXN1bHQgPSBsb2NhbGVfaXNfYyhsb2NhbGVwdHIsIGZhbHNlKTsKKwkJcmVzdWx0ID0g bG9jYWxlX2lzX2MoY3Vycl9sb2NhbGVzLmNvbGxhdGUsIGZhbHNlKTsKIAogCQlyZXR1cm4gKGJv b2wpIHJlc3VsdDsKIAl9CkBAIC0xMzc5LDIzICsxNDg4LDE5IEBAIGxjX2N0eXBlX2lzX2MoT2lk IGNvbGxhdGlvbikKIAogCS8qCiAJICogSWYgd2UncmUgYXNrZWQgYWJvdXQgdGhlIGRlZmF1bHQg Y29sbGF0aW9uLCB3ZSBoYXZlIHRvIGlucXVpcmUgb2YgdGhlIEMKLQkgKiBsaWJyYXJ5LiAgQ2Fj aGUgdGhlIHJlc3VsdCBzbyB3ZSBvbmx5IGhhdmUgdG8gY29tcHV0ZSBpdCBvbmNlLgorCSAqIGxp YnJhcnkuCiAJICovCiAJaWYgKGNvbGxhdGlvbiA9PSBERUZBVUxUX0NPTExBVElPTl9PSUQpCiAJ ewogCQlzdGF0aWMgaW50CXJlc3VsdCA9IC0xOwotCQljaGFyCSAgICpsb2NhbGVwdHI7CiAKIAkJ aWYgKGRlZmF1bHRfbG9jYWxlLnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpCiAJCQlyZXR1 cm4gZmFsc2U7CiAKIAkJaWYgKHJlc3VsdCA+PSAwKQogCQkJcmV0dXJuIChib29sKSByZXN1bHQ7 Ci0JCWxvY2FsZXB0ciA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7Ci0JCWlmICghbG9jYWxl cHRyKQotCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTENfQ1RZUEUgc2V0dGluZyIpOwogCi0JCXJl c3VsdCA9IGxvY2FsZV9pc19jKGxvY2FsZXB0ciwgZmFsc2UpOworCQlyZXN1bHQgPSBsb2NhbGVf aXNfYyhjdXJyX2xvY2FsZXMuY3R5cGUsIGZhbHNlKTsKIAogCQlyZXR1cm4gKGJvb2wpIHJlc3Vs dDsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgYi9z cmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKaW5kZXggNTQ0MzEyYTA5OS4uMjAwOTk5 MTYzNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9wb3N0aW5pdC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwpAQCAtNDA1LDE0ICs0MDUsMTQgQEAg Q2hlY2tNeURhdGFiYXNlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgYW1fc3VwZXJ1c2VyLCBib29s IG92ZXJyaWRlX2FsbG93X2Nvbm5lY3QKIAlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwo REFUQUJBU0VPSUQsIHR1cCwgQW51bV9wZ19kYXRhYmFzZV9kYXRjdHlwZSk7CiAJY3R5cGUgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKTsKIAotCWlmIChwZ19wZXJtX3NldGxvY2FsZShMQ19D T0xMQVRFLCBjb2xsYXRlKSA9PSBOVUxMKQorCWlmIChwZ19zZXRsb2NhbGUoTENfQ09MTEFURSwg Y29sbGF0ZSkgPT0gTlVMTCkKIAkJZXJlcG9ydChGQVRBTCwKIAkJCQkoZXJybXNnKCJkYXRhYmFz ZSBsb2NhbGUgaXMgaW5jb21wYXRpYmxlIHdpdGggb3BlcmF0aW5nIHN5c3RlbSIpLAogCQkJCSBl cnJkZXRhaWwoIlRoZSBkYXRhYmFzZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBMQ19DT0xMQVRFIFwi JXNcIiwgIgogCQkJCQkJICAgIiB3aGljaCBpcyBub3QgcmVjb2duaXplZCBieSBzZXRsb2NhbGUo KS4iLCBjb2xsYXRlKSwKIAkJCQkgZXJyaGludCgiUmVjcmVhdGUgdGhlIGRhdGFiYXNlIHdpdGgg YW5vdGhlciBsb2NhbGUgb3IgaW5zdGFsbCB0aGUgbWlzc2luZyBsb2NhbGUuIikpKTsKIAotCWlm IChwZ19wZXJtX3NldGxvY2FsZShMQ19DVFlQRSwgY3R5cGUpID09IE5VTEwpCisJaWYgKHBnX3Nl dGxvY2FsZShMQ19DVFlQRSwgY3R5cGUpID09IE5VTEwpCiAJCWVyZXBvcnQoRkFUQUwsCiAJCQkJ KGVycm1zZygiZGF0YWJhc2UgbG9jYWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIG9wZXJhdGluZyBz eXN0ZW0iKSwKIAkJCQkgZXJyZGV0YWlsKCJUaGUgZGF0YWJhc2Ugd2FzIGluaXRpYWxpemVkIHdp dGggTENfQ1RZUEUgXCIlc1wiLCAiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tYi9t YnV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMKaW5kZXggOTk3MTU2NTE1 Yy4uOGRjN2RhNDdiZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21iL21idXRpbHMuYwpAQCAtMTIzOCw3ICsxMjM4LDcg QEAgcGdfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoY29uc3QgY2hhciAqZG9tYWlubmFtZSkKIAlp bnQJCQluZXdfbXNnZW5jOwogCiAjaWZuZGVmIFdJTjMyCi0JaWYgKGxvY2FsZV9pc19jKGxvY2Fs ZV9jdHlwZSwgdHJ1ZSkpCisJaWYgKGxvY2FsZV9pc19jKHBnX3NldGxvY2FsZShMQ19DVFlQRSwg TlVMTCksIHRydWUpKQogI2VuZGlmCiAJCWlmIChlbmNvZGluZyAhPSBQR19TUUxfQVNDSUkgJiYK IAkJCXJhd19wZ19iaW5kX3RleHRkb21haW5fY29kZXNldChkb21haW5uYW1lLCBlbmNvZGluZykp CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2V4ZWMuYyBiL3NyYy9jb21tb24vZXhlYy5jCmluZGV4 IGYyMDliOTM0ZGYuLmY3YTk2NDNiZTQgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vZXhlYy5jCisr KyBiL3NyYy9jb21tb24vZXhlYy5jCkBAIC00MzgsMjIgKzQzOCw2IEBAIHNldF9wZ2xvY2FsZV9w Z3NlcnZpY2UoY29uc3QgY2hhciAqYXJndjAsIGNvbnN0IGNoYXIgKmFwcCkKIAljaGFyCQlwYXRo W01BWFBHUEFUSF07CiAJY2hhcgkJbXlfZXhlY19wYXRoW01BWFBHUEFUSF07CiAKLQkvKiBkb24n dCBzZXQgTENfQUxMIGluIHRoZSBiYWNrZW5kICovCi0JaWYgKHN0cmNtcChhcHAsIFBHX1RFWFRE T01BSU4oInBvc3RncmVzIikpICE9IDApCi0JewotCQlzZXRsb2NhbGUoTENfQUxMLCAiIik7Ci0K LQkJLyoKLQkJICogT25lIGNvdWxkIG1ha2UgYSBjYXNlIGZvciByZXByb2R1Y2luZyBoZXJlIFBv c3RtYXN0ZXJNYWluKCkncyB0ZXN0Ci0JCSAqIGZvciB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzIG11 bHRpdGhyZWFkZWQuICBVbmxpa2UgdGhlIHBvc3RtYXN0ZXIsCi0JCSAqIG5vIGZyb250ZW5kIHBy b2dyYW0gY2FsbHMgc2lncHJvY21hc2soKSBvciBvdGhlcndpc2UgcHJvdmlkZXMgZm9yCi0JCSAq IG11dHVhbCBleGNsdXNpb24gYmV0d2VlbiBzaWduYWwgaGFuZGxlcnMuICBXaGlsZSBmcm9udGVu ZHMgdXNpbmcKLQkJICogZm9yaygpLCBpZiBtdWx0aXRocmVhZGVkLCBhcmUgZm9ybWFsbHkgZXhw b3NlZCB0byB1bmRlZmluZWQKLQkJICogYmVoYXZpb3IsIHdlIGhhdmUgbm90IHdpdG5lc3NlZCBh IGNvbmNyZXRlIGJ1Zy4gIFRoZXJlZm9yZSwKLQkJICogY29tcGxhaW5pbmcgYWJvdXQgbXVsdGl0 aHJlYWRpbmcgaGVyZSBtYXkgYmUgbWVyZSBwZWRhbnRyeS4KLQkJICovCi0JfQotCiAJaWYgKGZp bmRfbXlfZXhlYyhhcmd2MCwgbXlfZXhlY19wYXRoKSA8IDApCiAJCXJldHVybjsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9w Z19sb2NhbGUuaAppbmRleCBlMDhkOTZlMDk5Li41ODVjZGQzOTMxIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2Nh bGUuaApAQCAtNTIsNyArNTIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgY2hhciAqbG9jYWxpemVk X2Z1bGxfbW9udGhzW107CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBkYXRhYmFzZV9jdHlwZV9p c19jOwogCiBleHRlcm4gYm9vbCBjaGVja19sb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFy ICpsb2NhbGUsIGNoYXIgKipjYW5vbm5hbWUpOwotZXh0ZXJuIGNoYXIgKnBnX3Blcm1fc2V0bG9j YWxlKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsKK2V4dGVybiBjaGFyICpwZ19z ZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOwogCiBleHRlcm4gYm9v bCBsb2NhbGVfaXNfYyhjb25zdCBjaGFyICpsb2NhbGUsIGJvb2wgaWdub3JlX2Nhc2UpOwogZXh0 ZXJuIGJvb2wgbGNfY29sbGF0ZV9pc19jKE9pZCBjb2xsYXRpb24pOwotLSAKVHJpc3RhbiBQYXJ0 aW4KTmVvbiAoaHR0cHM6Ly9uZW9uLnRlY2gpCgo= --3e3672b01d81ec6130a7ba5e256584d10be30508a4c32748714d85345600--