Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o0B1u-000735-3i for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Jun 2022 00:00:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o0B1r-0001Hq-Ur for pgsql-hackers@arkaria.postgresql.org; Sun, 12 Jun 2022 00:00:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o0B1r-0001Hg-6l for pgsql-hackers@lists.postgresql.org; Sun, 12 Jun 2022 00:00:31 +0000 Received: from mail-io1-xd34.google.com ([2607:f8b0:4864:20::d34]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1o0B1j-0000yh-3T for pgsql-hackers@postgresql.org; Sun, 12 Jun 2022 00:00:30 +0000 Received: by mail-io1-xd34.google.com with SMTP id 19so2631171iou.12 for ; Sat, 11 Jun 2022 17:00:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zjcSyevAcnMvkaRFrFkkUOLeYGuXSPd1CfIi8cgS1zY=; b=E1k0NNGwENa1LE6qDBOHNo0YrXgXPZBKF/nUYNHlxZAqFO6xZEUrSOJ7Ip8WmEzvHq BbKJNziIIt2IYKB+8mrYJNTEf9QLT9PQpePJ8TUwII8S+U5CW47LC0FUkOn/kcFbGs1d 8/6jE8jveyAChmvmFjJExecrFBQHof3w7br95sAPpG8NUDDt6eF8vfi5Hk1fzjcchtms qEv+70uPZ4U8ZqGfPpQH4b/SPWGybCT05J1uwYDfntd03GXkYzLKqNKvY2zpGoq3Mz8e eETXMx5aONafg9Vm0q8HOhO9aX9omT+NVd+bhLXzvizk22Moix0zlbdxiDyJTVtzdszs PajA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zjcSyevAcnMvkaRFrFkkUOLeYGuXSPd1CfIi8cgS1zY=; b=y9h2gEwjwRBSj7DcgG144SQ+VNvASRutXoq+V7O07vvfZBkUXJEUdFFGg/+4X3iiPg kjrPUi7BeSUxHDfQRLX0qic8YVFoSe1c6lgVw3onMZQJjv1uhBvFNnysBrYgAIcxPN71 8cHsp+2J6j2ecpNwQaDOYffvtSb3llXsEos1UcwJdQXLE/6fRgKrIko4Y4PkuIyycIpw 4d49OZtIq6tXttLc4RToEDQpDN/MYlVksGyQqtXjIl+7xKyHGPpJ8bzLinE1jS1+bcW9 gh/sYOaXDavUb+R5mNMcAya4rGnmi6m6A9tDy1MLZIuLfAoJncAig/VAMyuxQUBtwYKy y5AQ== X-Gm-Message-State: AOAM530YpnqAVnePJpPqGW41W3RSOuIN2Ne8wf3UCClEleckNMoxQ58E 3/24uf5eC0WGuHMwkfEUB+Yv8mQPkU/o/wr73BA= X-Google-Smtp-Source: ABdhPJzLX3NxOspYErQo1/a9iKR0qPnf5+jA3F0C21yozHD+NPir/e0LVSSQz00/MDgzj0hEeQeFeiDD8gYlwsBhK7M= X-Received: by 2002:a05:6638:1924:b0:331:d5de:57ab with SMTP id p36-20020a056638192400b00331d5de57abmr12738190jal.261.1654992021781; Sat, 11 Jun 2022 17:00:21 -0700 (PDT) MIME-Version: 1.0 References: <381977b1-0898-cb6f-a427-3b5d873e81bd@enterprisedb.com> <231072.1654273317@sss.pgh.pa.us> <1874de62-6bec-4bc1-1d14-0a2730b125da@ardentperf.com> <366234.1654289888@sss.pgh.pa.us> <0867fe37-abbd-77ba-aafc-572074978bb0@amazon.com> In-Reply-To: From: Thomas Munro Date: Sun, 12 Jun 2022 11:59:44 +1200 Message-ID: Subject: Re: Collation version tracking for macOS To: Peter Geoghegan Cc: "Finnerty, Jim" , "Nasby, Jim" , Tom Lane , Jeremy Schneider , Peter Eisentraut , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000909fdf05e134dbd8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000909fdf05e134dbd8 Content-Type: text/plain; charset="UTF-8" On Sat, Jun 11, 2022 at 4:21 PM Peter Geoghegan wrote: > What about "time travel collations", but without the time travel part? > That is, what about supporting multiple ICU versions per cluster, but > not per database? So you could upgrade the OS and Postgres, using > standard packages that typically just use the latest ICU version -- > typically, but not always. If you happen to have been on an older > version of ICU on upgrade, then that version of ICU will still work at > the level of a whole database -- your database. Maybe you can create > new databases with old and new ICU versions if you want to. > > That obviously runs into the problem of needing to eventually do a > dump and reload -- but I suppose that "eventually" could be a very > long time. At least the OS package doesn't declare one version of ICU > the blessed version, now and forever, effectively vendoring ICU in a > backdoor fashion. At least old databases have significant runway, > while at the same time new databases that want to use the same > standard Postgres package aren't forced to use the same ancient ICU > version. Hmm. I think that's effectively what you'd get using my "distinct collation" patch (v1, or this much better v3, attached), if you put version prefixes in colliculocale, and updated them in the template database after an OS upgrade to affect new databases. I realise you probably mean something a little more automatic... I think "pinned forever" ICU versions would be useful, because I think there are very few expert users who want fine generalised control over version changes, but almost all other users don't care at all about any of this stuff -- as long as their indexes keep indexing and their constraints keep constraining. So I think you can make a lot of people happy by ignoring the complexities of upgrades and providing a way to nail the version down for the lifetime of the database. Also, it's not *impossible* to move to a later ICU, it's just a bit tricky; the key point is that it's under your control if you want to do that, independently of an OS upgrade, as you said. Based on my reading of that DB2 manual page, I reckon my v3 "distinct collation" patch is about as good as what they have. If you don't choose to use prefixes then later OS upgrades (ie upgrades that change the version of ICU that PostgreSQL is linked against) might corrupt your indexes and constraints -- I think that's what they're saying -- though at least we'll try to warn about that with our weak warning system. If you do choose to use prefixes you'll be stuck on that ICU version forever, even across updates that cause PostgreSQL to be linked to future releases of ICU, unless you're prepared to do a whole bunch of careful upgrading work (perhaps with some future tooling to help with that). Attached is a much more fleshed out version of the "distinct collation" patch (to be clear: v3 descends from v1, while v2 was at attempt at the timelord approach). Main changes: 1. I now also route strTo{Upper,Lower,Title} to the right version of ICU. That requires dlopen'ing a second library. 2. You create distinct collations with optional ICU major version prefixes, along the lines of what Jim was suggesting. For example (and I'm not actually proposing -x-icu67 suffixes, just avoiding a collision in my example): postgres=# create collation "en-x-icu67" (provider = icu , locale = '67:en'); CREATE COLLATION postgres=# create collation "en-x-icu63" (provider = icu , locale = '63:en'); CREATE COLLATION 3. For versions other than the one we are linked against, it tries to open libraries with typical names inside $libdir. An administrator could drop symlinks in there like so: $ ln -s /usr/lib/x86_64-linux-gnu/libicui18n.so.63 ~/install/lib/postgresql/ $ ln -s /usr/lib/x86_64-linux-gnu/libicuuc.so.63 ~/install/lib/postgresql/ What I like about this $libdir scheme is that I imagine that we could ask our friends in the packaging teams to create packages for that. Users would then think of them in much the same way as extensions. You'd just type: $ sudo apt-get install postgresql-16-icu71 Happy to keep trying to figure out the competing and rather more ambitious TT version too (that I sketched some bits of in v2), but I'm a whole lot fuzzier on how that can work and kinda stuck on the problems I raised. --000000000000909fdf05e134dbd8 Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-WIP-multi-ICU-distinct-collations.patch" Content-Disposition: attachment; filename="v3-0001-WIP-multi-ICU-distinct-collations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l4aja0150 RnJvbSBiZjc0OGFmMWIyNTc2YzIzMmJkZWM2MzNmYjg0NjYwOTJmYTdjZTkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgOCBKdW4gMjAyMiAxNzo0Mzo1MyArMTIwMApTdWJqZWN0OiBbUEFUQ0ggdjNd IFdJUDogbXVsdGkgSUNVLCBkaXN0aW5jdCBjb2xsYXRpb25zCgpYWFggVGhpcyBpcyBoaWdobHkg ZXhwZXJpbWVudGFsIGNvZGUKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5j IHwgIDE2ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0dGluZy5jIHwgIDQ5ICsrKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYyAgfCAzNTUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFyLmMgICAgfCAgMTYg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMgICAgfCAgNTQgKystLS0KIHNyYy9p bmNsdWRlL3V0aWxzL3BnX2xvY2FsZS5oICAgICAgfCAgNjkgKysrKysrCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgIHwgICAzICsKIDcgZmlsZXMgY2hhbmdlZCwgNDk4IGluc2Vy dGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hmdW5jLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoZnVuYy5jCmlu ZGV4IGI1N2VkOTQ2YzQuLjBhNjE1MzhlZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hmdW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaGZ1bmMu YwpAQCAtMjk4LDExICsyOTgsMTEgQEAgaGFzaHRleHQoUEdfRlVOQ1RJT05fQVJHUykKIAogCQkJ dWxlbiA9IGljdV90b191Y2hhcigmdWNoYXIsIFZBUkRBVEFfQU5ZKGtleSksIFZBUlNJWkVfQU5Z X0VYSERSKGtleSkpOwogCi0JCQlic2l6ZSA9IHVjb2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5m by5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1bGVuLCBOVUxMLCAwKTsKKwkJCWJzaXplID0g UEdfSUNVX0xJQihteWxvY2FsZSktPmdldFNvcnRLZXkoUEdfSUNVX0NPTChteWxvY2FsZSksCisJ CQkJCQkJCQkJCQkJIHVjaGFyLCB1bGVuLCBOVUxMLCAwKTsKIAkJCWJ1ZiA9IHBhbGxvYyhic2l6 ZSk7Ci0JCQl1Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJ dWNoYXIsIHVsZW4sIGJ1ZiwgYnNpemUpOworCQkJUEdfSUNVX0xJQihteWxvY2FsZSktPmdldFNv cnRLZXkoUEdfSUNVX0NPTChteWxvY2FsZSksCisJCQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwgYnVm LCBic2l6ZSk7CiAKIAkJCXJlc3VsdCA9IGhhc2hfYW55KGJ1ZiwgYnNpemUpOwogCkBAIC0zNTUs MTEgKzM1NSwxMSBAQCBoYXNodGV4dGV4dGVuZGVkKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkJCXVs ZW4gPSBpY3VfdG9fdWNoYXIoJnVjaGFyLCBWQVJEQVRBX0FOWShrZXkpLCBWQVJTSVpFX0FOWV9F WEhEUihrZXkpKTsKIAotCQkJYnNpemUgPSB1Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8u aWN1LnVjb2wsCi0JCQkJCQkJCQl1Y2hhciwgdWxlbiwgTlVMTCwgMCk7CisJCQlic2l6ZSA9IFBH X0lDVV9MSUIobXlsb2NhbGUpLT5nZXRTb3J0S2V5KFBHX0lDVV9DT0wobXlsb2NhbGUpLAorCQkJ CQkJCQkJCQkJCSB1Y2hhciwgdWxlbiwgTlVMTCwgMCk7CiAJCQlidWYgPSBwYWxsb2MoYnNpemUp OwotCQkJdWNvbF9nZXRTb3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCXVj aGFyLCB1bGVuLCBidWYsIGJzaXplKTsKKwkJCVBHX0lDVV9MSUIobXlsb2NhbGUpLT5nZXRTb3J0 S2V5KFBHX0lDVV9DT0wobXlsb2NhbGUpLAorCQkJCQkJCQkJCQkgdWNoYXIsIHVsZW4sIGJ1Ziwg YnNpemUpOwogCiAJCQlyZXN1bHQgPSBoYXNoX2FueV9leHRlbmRlZChidWYsIGJzaXplLCBQR19H RVRBUkdfSU5UNjQoMSkpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0dGluZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwppbmRleCBlOTA5 YzFhMjAwLi4wMmM4Y2M1YjE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9y bWF0dGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKQEAgLTE2 MDIsNiArMTYwMiwxMSBAQCB0eXBlZGVmIGludDMyX3QgKCpJQ1VfQ29udmVydF9GdW5jKSAoVUNo YXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LAogCQkJCQkJCQkJIGNvbnN0IFVDaGFyICpz cmMsIGludDMyX3Qgc3JjTGVuZ3RoLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmxvY2FsZSwKIAkJ CQkJCQkJCSBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKK3R5cGVkZWYgaW50MzJfdCAoKklDVV9D b252ZXJ0X0JJX0Z1bmMpIChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJ CQkJCQkJY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisJCQkJCQkJCQkJVUJy ZWFrSXRlcmF0b3IgKmJpLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkJ CQlVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIAogc3RhdGljIGludDMyX3QKIGljdV9jb252ZXJ0 X2Nhc2UoSUNVX0NvbnZlcnRfRnVuYyBmdW5jLCBwZ19sb2NhbGVfdCBteWxvY2FsZSwKQEAgLTE2 MzAsMTQgKzE2MzUsMzUgQEAgaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMs IHBnX2xvY2FsZV90IG15bG9jYWxlLAogCXJldHVybiBsZW5fZGVzdDsKIH0KIAorLyoKKyAqIExp a2UgaWN1X2NvbnZlcnRfY2FzZSwgYnV0IGZ1bmMgdGFrZXMgYSBicmVhayBpdGVyYXRvciAod2hp Y2ggd2UgZG9uJ3QKKyAqIG1ha2UgdXNlIG9mKS4KKyAqLwogc3RhdGljIGludDMyX3QKLXVfc3Ry VG9UaXRsZV9kZWZhdWx0X0JJKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKLQkJ CQkJCWNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAotCQkJCQkJY29uc3QgY2hh ciAqbG9jYWxlLAotCQkJCQkJVUVycm9yQ29kZSAqcEVycm9yQ29kZSkKK2ljdV9jb252ZXJ0X2Nh c2VfYmkoSUNVX0NvbnZlcnRfQklfRnVuYyBmdW5jLCBwZ19sb2NhbGVfdCBteWxvY2FsZSwKKwkJ CQkJVUNoYXIgKipidWZmX2Rlc3QsIFVDaGFyICpidWZmX3NvdXJjZSwgaW50MzJfdCBsZW5fc291 cmNlKQogewotCXJldHVybiB1X3N0clRvVGl0bGUoZGVzdCwgZGVzdENhcGFjaXR5LCBzcmMsIHNy Y0xlbmd0aCwKLQkJCQkJCU5VTEwsIGxvY2FsZSwgcEVycm9yQ29kZSk7CisJVUVycm9yQ29kZQlz dGF0dXM7CisJaW50MzJfdAkJbGVuX2Rlc3Q7CisKKwlsZW5fZGVzdCA9IGxlbl9zb3VyY2U7CQkv KiB0cnkgZmlyc3Qgd2l0aCBzYW1lIGxlbmd0aCAqLworCSpidWZmX2Rlc3QgPSBwYWxsb2MobGVu X2Rlc3QgKiBzaXplb2YoKipidWZmX2Rlc3QpKTsKKwlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisJ bGVuX2Rlc3QgPSBmdW5jKCpidWZmX2Rlc3QsIGxlbl9kZXN0LCBidWZmX3NvdXJjZSwgbGVuX3Nv dXJjZSwgTlVMTCwKKwkJCQkJbXlsb2NhbGUtPmluZm8uaWN1LmxvY2FsZSwgJnN0YXR1cyk7CisJ aWYgKHN0YXR1cyA9PSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKKwl7CisJCS8qIHRyeSBhZ2Fp biB3aXRoIGFkanVzdGVkIGxlbmd0aCAqLworCQlwZnJlZSgqYnVmZl9kZXN0KTsKKwkJKmJ1ZmZf ZGVzdCA9IHBhbGxvYyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOworCQlzdGF0dXMg PSBVX1pFUk9fRVJST1I7CisJCWxlbl9kZXN0ID0gZnVuYygqYnVmZl9kZXN0LCBsZW5fZGVzdCwg YnVmZl9zb3VyY2UsIGxlbl9zb3VyY2UsIE5VTEwsCisJCQkJCQlteWxvY2FsZS0+aW5mby5pY3Uu bG9jYWxlLCAmc3RhdHVzKTsKKwl9CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJtc2coImNhc2UgY29udmVyc2lvbiBmYWlsZWQ6ICVzIiwgdV9lcnJv ck5hbWUoc3RhdHVzKSkpKTsKKwlyZXR1cm4gbGVuX2Rlc3Q7CiB9CiAKICNlbmRpZgkJCQkJCQkv KiBVU0VfSUNVICovCkBAIC0xNzA1LDcgKzE3MzEsOCBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFy ICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJVUNoYXIJICAgKmJ1ZmZfY29u djsKIAogCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0 ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9Mb3dlciwgbXlsb2Nh bGUsCisJCQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2UoUEdfSUNVX0xJQihteWxvY2FsZSkt PnN0clRvTG93ZXIsCisJCQkJCQkJCQkJbXlsb2NhbGUsCiAJCQkJCQkJCQkJJmJ1ZmZfY29udiwg YnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKIAkJCWljdV9mcm9tX3VjaGFyKCZyZXN1bHQsIGJ1ZmZf Y29udiwgbGVuX2NvbnYpOwogCQkJcGZyZWUoYnVmZl91Y2hhcik7CkBAIC0xODI3LDcgKzE4NTQs OCBAQCBzdHJfdG91cHBlcihjb25zdCBjaGFyICpidWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29s bGlkKQogCQkJVUNoYXIJICAgKmJ1ZmZfY29udjsKIAogCQkJbGVuX3VjaGFyID0gaWN1X3RvX3Vj aGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVy dF9jYXNlKHVfc3RyVG9VcHBlciwgbXlsb2NhbGUsCisJCQlsZW5fY29udiA9IGljdV9jb252ZXJ0 X2Nhc2UoUEdfSUNVX0xJQihteWxvY2FsZSktPnN0clRvVXBwZXIsCisJCQkJCQkJCQkJbXlsb2Nh bGUsCiAJCQkJCQkJCQkJJmJ1ZmZfY29udiwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKIAkJCWlj dV9mcm9tX3VjaGFyKCZyZXN1bHQsIGJ1ZmZfY29udiwgbGVuX2NvbnYpOwogCQkJcGZyZWUoYnVm Zl91Y2hhcik7CkBAIC0xOTUwLDggKzE5NzgsOSBAQCBzdHJfaW5pdGNhcChjb25zdCBjaGFyICpi dWZmLCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJVUNoYXIJICAgKmJ1ZmZfY29udjsK IAogCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMp OwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9UaXRsZV9kZWZhdWx0X0JJ LCBteWxvY2FsZSwKLQkJCQkJCQkJCQkmYnVmZl9jb252LCBidWZmX3VjaGFyLCBsZW5fdWNoYXIp OworCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlX2JpKFBHX0lDVV9MSUIobXlsb2NhbGUp LT5zdHJUb1RpdGxlLAorCQkJCQkJCQkJCSAgIG15bG9jYWxlLAorCQkJCQkJCQkJCSAgICZidWZm X2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7CiAJCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0 LCBidWZmX2NvbnYsIGxlbl9jb252KTsKIAkJCXBmcmVlKGJ1ZmZfdWNoYXIpOwogCQkJcGZyZWUo YnVmZl9jb252KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBhMDQ5MGE3NTIyLi5k ODA4ZmJiMjA1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC01OCw2ICs1OCw3IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbnRyb2wuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZm9ybWF0 dGluZy5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKQEAgLTY4LDYgKzY5LDcgQEAKIAog I2lmZGVmIFVTRV9JQ1UKICNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4KKyNpbmNsdWRlIDx1bmlj b2RlL3VzdHJpbmcuaD4KICNlbmRpZgogCiAjaWZkZWYgX19HTElCQ19fCkBAIC03OCw4ICs4MCwy NyBAQAogI2luY2x1ZGUgPHNobHdhcGkuaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9ETE9QRU4K KyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKICNkZWZpbmUJCU1BWF9MMTBOX0RBVEEJCTgw CiAKKyNpZmRlZiBVU0VfSUNVCisKKy8qCisgKiBXZSBkb24ndCB3YW50IHRvIGNhbGwgaW50byBk bG9wZW4nZCBJQ1UgbGlicmFyaWVzIHRoYXQgYXJlIG5ld2VyIHRoYW4gdGhlCisgKiBvbmUgd2Ug d2VyZSBjb21waWxlZCBhbmQgbGlua2VkIGFnYWluc3QsIGp1c3QgaW4gY2FzZSB0aGVyZSBpcyBh bgorICogaW5jb21wYXRpYmxlIEFQSSBjaGFuZ2UuCisgKi8KKyNkZWZpbmUgUEdfTUFYX0lDVV9N QUpPUl9WRVJTSU9OIFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNCisKKy8qIEFuIG9sZCBJQ1UgcmVs ZWFzZSB0aGF0IHdlIGtub3cgaGFzIHRoZSByaWdodCBBUEkuICovCisvKiBYWFggY2hlY2sgaWYg dGhpcyBpcyBhY3R1YWxseSB0cnVlLCBhbmQgaWYgd2UgY291bGQgZ28gYmFjayBmdXJ0aGVyICov CisjZGVmaW5lIFBHX01JTl9JQ1VfTUFKT1JfVkVSU0lPTiA1NAorCisjZW5kaWYKKwogCiAvKiBH VUMgc2V0dGluZ3MgKi8KIGNoYXIJICAgKmxvY2FsZV9tZXNzYWdlczsKQEAgLTE0MzUsMjkgKzE0 NTYsMzMyIEBAIGxjX2N0eXBlX2lzX2MoT2lkIGNvbGxhdGlvbikKIAlyZXR1cm4gKGxvb2t1cF9j b2xsYXRpb25fY2FjaGUoY29sbGF0aW9uLCB0cnVlKSktPmN0eXBlX2lzX2M7CiB9CiAKKyNpZmRl ZiBVU0VfSUNVCisKIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0IGRlZmF1bHRfbG9jYWxlOwogCisv KiBMaW5rZWQgbGlzdCBvZiBJQ1UgbGlicmFyaWVzIHdlIGhhdmUgbG9hZGVkLiAqLworc3RhdGlj IHBnX2ljdV9saWJyYXJ5ICppY3VfbGlicmFyeV9saXN0ID0gTlVMTDsKKworLyoKKyAqIEZyZWUg YW4gSUNVIGxpYnJhcnkuICBwZ19pY3VfbGlicmFyeSBvYmplY3RzIHRoYXQgYXJlIHN1Y2Nlc3Nm dWxseQorICogY29uc3RydWN0ZWQgc3RpY2sgYXJvdW5kIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhl IGJhY2tlbmQsIGJ1dCB0aGlzIGlzIHVzZWQKKyAqIHRvIGNsZWFuIHVwIGlmIGluaXRpYWxpemF0 aW9uIGZhaWxzLgorICovCitzdGF0aWMgdm9pZAorZnJlZV9pY3VfbGlicmFyeShwZ19pY3VfbGli cmFyeSAqbGliKQoreworCWlmIChsaWItPmxpYmljdWkxOG5faGFuZGxlKQorCQlkbGNsb3NlKGxp Yi0+bGliaWN1aTE4bl9oYW5kbGUpOworCWlmIChsaWItPmxpYmljdXVjX2hhbmRsZSkKKwkJZGxj bG9zZShsaWItPmxpYmljdXVjX2hhbmRsZSk7CisJcGZyZWUobGliKTsKK30KKworc3RhdGljIHZv aWQgKgorZ2V0X2ljdV9mdW5jdGlvbih2b2lkICpoYW5kbGUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9u LCBpbnQgdmVyc2lvbikKK3sKKwljaGFyCQluYW1lWzgwXTsKKworCXNucHJpbnRmKG5hbWUsIHNp emVvZihuYW1lKSwgIiVzXyVkIiwgZnVuY3Rpb24sIHZlcnNpb24pOworCisJcmV0dXJuIGRsc3lt KGhhbmRsZSwgbmFtZSk7Cit9CisKKy8qCisgKiBQcm9iZSBhIGR5bmFtaWNhbGx5IGxvYWRlZCBs aWJyYXJ5IHRvIHNlZSB3aGljaCBtYWpvciB2ZXJzaW9uIG9mIElDVSBpdAorICogY29udGFpbnMu CisgKi8KK3N0YXRpYyBpbnQKK2dldF9pY3VfbGlicmFyeV9tYWpvcl92ZXJzaW9uKHZvaWQgKmhh bmRsZSkKK3sKKwlmb3IgKGludCBpID0gUEdfTUlOX0lDVV9NQUpPUl9WRVJTSU9OOyBpIDw9IFBH X01BWF9JQ1VfTUFKT1JfVkVSU0lPTjsgKytpKQorCQlpZiAoZ2V0X2ljdV9mdW5jdGlvbihoYW5k bGUsICJ1Y29sX29wZW4iLCBpKSB8fAorCQkJZ2V0X2ljdV9mdW5jdGlvbihoYW5kbGUsICJ1X3N0 clRvVXBwZXIiLCBpKSkKKwkJCXJldHVybiBpOworCisJLyoKKwkgKiBJdCdzIGEgbGF0ZXIgdmVy c2lvbiB3ZSBkb24ndCBkYXJlIHVzZSwgYW4gb2xkIHZlcnNpb24gd2UgZG9uJ3QKKwkgKiBzdXBw b3J0LCBhbiBJQ1UgYnVpbGQgd2l0aCBzeW1ib2wgc3VmZml4ZXMgZGlzYWJsZWQsIG9yIG5vdCBJ Q1UuCisJICovCisJcmV0dXJuIC0xOworfQorCisvKgorICogV2UgaGF2ZSB0byBsb2FkIGEgY291 cGxlIG9mIGRpZmZlcmVudCBsaWJyYXJpZXMsIHNvIHdlJ2xsIHJldXNlIHRoZSBjb2RlIHRvCisg KiBkbyB0aGF0LgorICovCitzdGF0aWMgdm9pZCAqCitsb2FkX2ljdV9saWJyYXJ5KHBnX2ljdV9s aWJyYXJ5ICpsaWIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdm9pZAkgICAqaGFuZGxlOworCWlu dAkJCWZvdW5kX21ham9yX3ZlcnNpb247CisKKwloYW5kbGUgPSBkbG9wZW4obmFtZSwgUlRMRF9O T1cgfCBSVExEX0dMT0JBTCk7CisJaWYgKGhhbmRsZSA9PSBOVUxMKQorCXsKKwkJaW50CQkJZXJy bm9fc2F2ZSA9IGVycm5vOworCisJCWZyZWVfaWN1X2xpYnJhcnkobGliKTsKKwkJZXJybm8gPSBl cnJub19zYXZlOworCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGxv YWQgbGlicmFyeSBcIiVzXCI6ICVtIiwgbmFtZSkpKTsKKwl9CisKKwlmb3VuZF9tYWpvcl92ZXJz aW9uID0gZ2V0X2ljdV9saWJyYXJ5X21ham9yX3ZlcnNpb24oaGFuZGxlKTsKKwlpZiAoZm91bmRf bWFqb3JfdmVyc2lvbiA8IDApCisJeworCQlmcmVlX2ljdV9saWJyYXJ5KGxpYik7CisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90IGZpbmQgY29tcGF0aWJsZSBJQ1UgbWFq b3IgdmVyc2lvbiBpbiBsaWJyYXJ5IFwiJXNcIiIsCisJCQkJCQluYW1lKSkpOworCX0KKworCWlm IChmb3VuZF9tYWpvcl92ZXJzaW9uICE9IGxpYi0+bWFqb3JfdmVyc2lvbikKKwl7CisJCWZyZWVf aWN1X2xpYnJhcnkobGliKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJleHBlY3Rl ZCB0byBmaW5kIElDVSBtYWpvciB2ZXJzaW9uICVkIGluIGxpYnJhcnkgXCIlc1wiLCBidXQgZm91 bmQgJWQiLAorCQkJCQkJbGliLT5tYWpvcl92ZXJzaW9uLCBuYW1lLCBmb3VuZF9tYWpvcl92ZXJz aW9uKSkpOworCX0KKworCXJldHVybiBoYW5kbGU7Cit9CisKKy8qCisgKiBHaXZlbiBhbiBJQ1Ug bWFqb3IgdmVyc2lvbiBudW1iZXIsIHJldHVybiB0aGUgb2JqZWN0IHdlIG5lZWQgdG8gYWNjZXNz IGl0LAorICogb3IgZmFpbCB3aGlsZSB0cnlpbmcgdG8gbG9hZCBpdC4KKyAqLworc3RhdGljIHBn X2ljdV9saWJyYXJ5ICoKK2dldF9pY3VfbGlicmFyeShpbnQgbWFqb3JfdmVyc2lvbikKK3sKKwlw Z19pY3VfbGlicmFyeSAqbGliOworCisJQXNzZXJ0KG1ham9yX3ZlcnNpb24gPj0gUEdfTUlOX0lD VV9NQUpPUl9WRVJTSU9OICYmCisJCSAgIG1ham9yX3ZlcnNpb24gPD0gUEdfTUFYX0lDVV9NQUpP Ul9WRVJTSU9OKTsKKworCS8qIFRyeSB0byBmaW5kIGl0IGluIG91ciBsaXN0IG9mIGV4aXN0aW5n IGxpYnJhcmllcy4gKi8KKwlmb3IgKGxpYiA9IGljdV9saWJyYXJ5X2xpc3Q7IGxpYjsgbGliID0g bGliLT5uZXh0KQorCQlpZiAobGliLT5tYWpvcl92ZXJzaW9uID09IG1ham9yX3ZlcnNpb24pCisJ CQlyZXR1cm4gbGliOworCisJLyogTWFrZSBhIG5ldyBlbnRyeS4gKi8KKwlsaWIgPSBNZW1vcnlD b250ZXh0QWxsb2NaZXJvKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZigqbGliKSk7CisJaWYgKG1h am9yX3ZlcnNpb24gPT0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0pCisJeworCQkvKgorCQkgKiBU aGlzIGlzIHRoZSB2ZXJzaW9uIHdlIHdlcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBhZ2FpbnN0LiAg U2ltcGx5CisJCSAqIGFzc2lnbiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMuCisJCSAqCisJCSAqIFRo ZXNlIGFzc2lnbm1lbnRzIHdpbGwgZmFpbCB0byBjb21waWxlIGlmIGFuIGluY29tcGF0aWJsZSBB UEkKKwkJICogY2hhbmdlIGlzIG1hZGUgdG8gc29tZSBmdXR1cmUgdmVyc2lvbiBvZiBJQ1UsIGF0 IHdoaWNoIHBvaW50IHdlCisJCSAqIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgc3BlY2lhbCB0cmVh dG1lbnQgZm9yIGRpZmZlcmVudCBtYWpvcgorCQkgKiB2ZXJzaW9uIHJhbmdlcywgd2l0aCBpbnRl cm1lZGlhdGUgdHJhbXBvbGluZSBmdW5jdGlvbnMuCisJCSAqLworCQlsaWItPm1ham9yX3ZlcnNp b24gPSBtYWpvcl92ZXJzaW9uOworCQlsaWItPm9wZW4gPSB1Y29sX29wZW47CisJCWxpYi0+Y2xv c2UgPSB1Y29sX2Nsb3NlOworCQlsaWItPmdldFZlcnNpb24gPSB1Y29sX2dldFZlcnNpb247CisJ CWxpYi0+dmVyc2lvblRvU3RyaW5nID0gdV92ZXJzaW9uVG9TdHJpbmc7CisJCWxpYi0+c3RyY29s bCA9IHVjb2xfc3RyY29sbDsKKwkJbGliLT5zdHJjb2xsVVRGOCA9IHVjb2xfc3RyY29sbFVURjg7 CisJCWxpYi0+Z2V0U29ydEtleSA9IHVjb2xfZ2V0U29ydEtleTsKKwkJbGliLT5uZXh0U29ydEtl eVBhcnQgPSB1Y29sX25leHRTb3J0S2V5UGFydDsKKwkJbGliLT5lcnJvck5hbWUgPSB1X2Vycm9y TmFtZTsKKwkJbGliLT5zdHJUb1VwcGVyID0gdV9zdHJUb1VwcGVyOworCQlsaWItPnN0clRvTG93 ZXIgPSB1X3N0clRvTG93ZXI7CisJCWxpYi0+c3RyVG9UaXRsZSA9IHVfc3RyVG9UaXRsZTsKKwor CQkvKgorCQkgKiBBbHNvIGFzc2VydCB0aGUgc2l6ZSBvZiBhIGNvdXBsZSBvZiB0eXBlcyB1c2Vk IGFzIG91dHB1dCBidWZmZXJzLAorCQkgKiBhcyBhIGNhbmFyeSB0byB0ZWxsIHVzIHRvIGFkZCBl eHRyYSBwYWRkaW5nIGluIHRoZSAodW5saWtlbHkpIGV2ZW50CisJCSAqIHRoYXQgYSBsYXRlciBy ZWxlYXNlIG1ha2VzIHRoZXNlIHZhbHVlcyBzbWFsbGVyLgorCQkgKi8KKwkJU3RhdGljQXNzZXJ0 U3RtdChVX01BWF9WRVJTSU9OX1NUUklOR19MRU5HVEggPT0gMjAsCisJCQkJCQkgInVfdmVyc2lv blRvU3RyaW5nIG91dHB1dCBidWZmZXIgc2l6ZSBjaGFuZ2VkIGluY29tcGF0aWJseSIpOworCQlT dGF0aWNBc3NlcnRTdG10KFVfTUFYX1ZFUlNJT05fTEVOR1RIID09IDQsCisJCQkJCQkgInVjb2xf Z2V0VmVyc2lvbiBvdXRwdXQgYnVmZmVyIHNpemUgY2hhbmdlZCBpbmNvbXBhdGlibHkiKTsKKwl9 CisJZWxzZQorCXsKKwkJLyogVGhpcyBpcyBhbiBvbGRlciB2ZXJzaW9uLCBzbyB3ZSdsbCBuZWVk IHRvIHVzZSBkbG9wZW4oKS4gKi8KKyNpZmRlZiBIQVZFX0RMT1BFTgorCQljaGFyCQlsaWJpY3Vp MThuX25hbWVbTUFYUEdQQVRIXTsKKwkJY2hhcgkJbGliaWN1dWNfbmFtZVtNQVhQR1BBVEhdOwor CisJCS8qCisJCSAqIFdlIGRvbid0IGxpa2UgdG8gb3BlbiB2ZXJzaW9ucyBuZXdlciB0aGFuIHdo YXQgd2UncmUgbGlua2VkCisJCSAqIGFnYWluc3QsIHRvIHJlZHVjZSB0aGUgcmlzayBvZiBhbiBB UEkgY2hhbmdlIGJpdGluZyB1cy4KKwkJICovCisJCWlmIChtYWpvcl92ZXJzaW9uID4gVV9JQ1Vf VkVSU0lPTl9NQUpPUl9OVU0pCisJCQllbG9nKEVSUk9SLCAiSUNVIG1ham9yIHZlcnNpb24gJWQg aGlnaGVyIHRoYW4gbGlua2VkIHZlcnNpb24gJWQsIHJlZnVzaW5nIHRvIG9wZW4iLAorCQkJCSBt YWpvcl92ZXJzaW9uLCBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSk7CisKKwkJbGliLT5tYWpvcl92 ZXJzaW9uID0gbWFqb3JfdmVyc2lvbjsKKworCQkvKgorCQkgKiBYWFggdXNpbmcgcGtnbGliX3Bh dGggdG8gbG9vayBmb3IgbGlicmFyaWVzLiAgVGhlIGlkZWEgaXMgdGhhdCBhbgorCQkgKiBhZG1p bmlzdHJhdG9yIHdvdWxkIGRyb3Agc3ltbGlua3MgaW4gdGhlcmUuCisJCSAqCisJCSAqIFBlcmhh cHMgc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlIGRmbWdyLmMncyBkeW5hbWljX2xpYnJhcnlfcGF0 aAorCQkgKiBzZWFyY2ggdG8gZmluZCBpdD8KKwkJICovCisKKwkJLyogTG9hZCB0aGUgY29sbGF0 aW9uIGxpYnJhcnkuICovCisJCXNucHJpbnRmKGxpYmljdWkxOG5fbmFtZSwKKwkJCQkgc2l6ZW9m KGxpYmljdWkxOG5fbmFtZSksCisJCQkJICIlcy9saWJpY3VpMThuIiBETFNVRkZJWCAiLiVkIiwK KwkJCQkgcGtnbGliX3BhdGgsCisJCQkJIG1ham9yX3ZlcnNpb24pOworCQlsaWItPmxpYmljdWkx OG5faGFuZGxlID0gbG9hZF9pY3VfbGlicmFyeShsaWIsIGxpYmljdWkxOG5fbmFtZSk7CisKKwkJ LyogTG9hZCB0aGUgY3R5cGUgbGlicmFyeS4gKi8KKwkJc25wcmludGYobGliaWN1dWNfbmFtZSwK KwkJCQkgc2l6ZW9mKGxpYmljdXVjX25hbWUpLAorCQkJCSAiJXMvbGliaWN1dWMiIERMU1VGRklY ICIuJWQiLAorCQkJCSBwa2dsaWJfcGF0aCwKKwkJCQkgbWFqb3JfdmVyc2lvbik7CisJCWxpYi0+ bGliaWN1dWNfaGFuZGxlID0gbG9hZF9pY3VfbGlicmFyeShsaWIsIGxpYmljdXVjX25hbWUpOwor CisJCS8qIExvb2sgdXAgYWxsIHRoZSBmdW5jdGlvbnMgd2UgbmVlZC4gKi8KKwkJbGliLT5vcGVu ID0gZ2V0X2ljdV9mdW5jdGlvbihsaWItPmxpYmljdWkxOG5faGFuZGxlLAorCQkJCQkJCQkJICJ1 Y29sX29wZW4iLAorCQkJCQkJCQkJIG1ham9yX3ZlcnNpb24pOworCQlsaWItPmNsb3NlID0gZ2V0 X2ljdV9mdW5jdGlvbihsaWItPmxpYmljdWkxOG5faGFuZGxlLAorCQkJCQkJCQkJICAidWNvbF9j bG9zZSIsCisJCQkJCQkJCQkgIG1ham9yX3ZlcnNpb24pOworCQlsaWItPmdldFZlcnNpb24gPSBn ZXRfaWN1X2Z1bmN0aW9uKGxpYi0+bGliaWN1aTE4bl9oYW5kbGUsCisJCQkJCQkJCQkJICAgInVj b2xfZ2V0VmVyc2lvbiIsCisJCQkJCQkJCQkJICAgbWFqb3JfdmVyc2lvbik7CisJCWxpYi0+dmVy c2lvblRvU3RyaW5nID0gZ2V0X2ljdV9mdW5jdGlvbihsaWItPmxpYmljdWkxOG5faGFuZGxlLAor CQkJCQkJCQkJCQkJInVfdmVyc2lvblRvU3RyaW5nIiwKKwkJCQkJCQkJCQkJCW1ham9yX3ZlcnNp b24pOworCQlsaWItPnN0cmNvbGwgPSBnZXRfaWN1X2Z1bmN0aW9uKGxpYi0+bGliaWN1aTE4bl9o YW5kbGUsCisJCQkJCQkJCQkJInVjb2xfc3RyY29sbCIsCisJCQkJCQkJCQkJbWFqb3JfdmVyc2lv bik7CisJCWxpYi0+c3RyY29sbFVURjggPSBnZXRfaWN1X2Z1bmN0aW9uKGxpYi0+bGliaWN1aTE4 bl9oYW5kbGUsCisJCQkJCQkJCQkJCSJ1Y29sX3N0cmNvbGxVVEY4IiwKKwkJCQkJCQkJCQkJbWFq b3JfdmVyc2lvbik7CisJCWxpYi0+Z2V0U29ydEtleSA9IGdldF9pY3VfZnVuY3Rpb24obGliLT5s aWJpY3VpMThuX2hhbmRsZSwKKwkJCQkJCQkJCQkgICAidWNvbF9nZXRTb3J0S2V5IiwKKwkJCQkJ CQkJCQkgICBtYWpvcl92ZXJzaW9uKTsKKwkJbGliLT5uZXh0U29ydEtleVBhcnQgPSBnZXRfaWN1 X2Z1bmN0aW9uKGxpYi0+bGliaWN1aTE4bl9oYW5kbGUsCisJCQkJCQkJCQkJCQkidWNvbF9uZXh0 U29ydEtleVBhcnQiLAorCQkJCQkJCQkJCQkJbWFqb3JfdmVyc2lvbik7CisJCWxpYi0+ZXJyb3JO YW1lID0gZ2V0X2ljdV9mdW5jdGlvbihsaWItPmxpYmljdWkxOG5faGFuZGxlLAorCQkJCQkJCQkJ CSAgInVfZXJyb3JOYW1lIiwKKwkJCQkJCQkJCQkgIG1ham9yX3ZlcnNpb24pOworCQlsaWItPnN0 clRvVXBwZXIgPSBnZXRfaWN1X2Z1bmN0aW9uKGxpYi0+bGliaWN1dWNfaGFuZGxlLAorCQkJCQkJ CQkJCSAgICJ1X3N0clRvVXBwZXIiLAorCQkJCQkJCQkJCSAgIG1ham9yX3ZlcnNpb24pOworCQls aWItPnN0clRvTG93ZXIgPSBnZXRfaWN1X2Z1bmN0aW9uKGxpYi0+bGliaWN1dWNfaGFuZGxlLAor CQkJCQkJCQkJCSAgICJ1X3N0clRvTG93ZXIiLAorCQkJCQkJCQkJCSAgIG1ham9yX3ZlcnNpb24p OworCQlsaWItPnN0clRvVGl0bGUgPSBnZXRfaWN1X2Z1bmN0aW9uKGxpYi0+bGliaWN1dWNfaGFu ZGxlLAorCQkJCQkJCQkJCSAgICJ1X3N0clRvVGl0bGUiLAorCQkJCQkJCQkJCSAgIG1ham9yX3Zl cnNpb24pOworCQlpZiAoIWxpYi0+b3BlbiB8fAorCQkJIWxpYi0+Y2xvc2UgfHwKKwkJCSFsaWIt PmdldFZlcnNpb24gfHwKKwkJCSFsaWItPnZlcnNpb25Ub1N0cmluZyB8fAorCQkJIWxpYi0+c3Ry Y29sbCB8fAorCQkJIWxpYi0+c3RyY29sbFVURjggfHwKKwkJCSFsaWItPmdldFNvcnRLZXkgfHwK KwkJCSFsaWItPm5leHRTb3J0S2V5UGFydCB8fAorCQkJIWxpYi0+ZXJyb3JOYW1lIHx8CisJCQkh bGliLT5zdHJUb1VwcGVyIHx8CisJCQkhbGliLT5zdHJUb0xvd2VyIHx8CisJCQkhbGliLT5zdHJU b1RpdGxlKQorCQl7CisJCQlmcmVlX2ljdV9saWJyYXJ5KGxpYik7CisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZmluZCBleHBlY3RlZCBzeW1ib2xzIGluIGxpYnJh cnkgXCIlc1wiIiwKKwkJCQkJCQlsaWJpY3VpMThuX25hbWUpKSk7CisJCX0KKyNlbHNlCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCSBlcnJtc2coImR5bmFtaWNhbGx5IGxvYWRlZCBJQ1UgbGlicmFyaWVzIGFyZSBub3Qg c3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKSkpOworI2VuZGlmCisJfQorCisJbGliLT5uZXh0ID0g aWN1X2xpYnJhcnlfbGlzdDsKKwlpY3VfbGlicmFyeV9saXN0ID0gbGliOworCisJcmV0dXJuIGxp YjsKK30KKworLyoKKyAqIExvb2sgdXAgdGhlIGxpYnJhcnkgdG8gdXNlIGZvciBhIGdpdmVuIGNv bGxjb2xsYXRlIHN0cmluZy4KKyAqLworc3RhdGljIHBnX2ljdV9saWJyYXJ5ICoKK2dldF9pY3Vf bGlicmFyeV9mb3JfY29sbGF0aW9uKGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlLCBjb25zdCBjaGFy ICoqcmVzdCkKK3sKKwlpbnQJCQltYWpvcl92ZXJzaW9uOworCWNoYXIJICAgKnNlcGFyYXRvcjsK KwljaGFyCSAgICphZnRlcl9wcmVmaXg7CisKKwlzZXBhcmF0b3IgPSBzdHJjaHIoY29sbGNvbGxh dGUsICc6Jyk7CisKKwkvKgorCSAqIElmIGl0J3MgYSB0cmFkaXRpb25hbCB2YWx1ZSB3aXRob3V0 IGEgcHJlZml4LCB1c2UgdGhlIGxpYnJhcnkgd2UgYXJlCisJICogbGlua2VkIGFnYWluc3QuCisJ ICovCisJaWYgKHNlcGFyYXRvciA9PSBOVUxMKQorCXsKKwkJKnJlc3QgPSBjb2xsY29sbGF0ZTsK KwkJcmV0dXJuIGdldF9pY3VfbGlicmFyeShVX0lDVV9WRVJTSU9OX01BSk9SX05VTSk7CisJfQor CisJLyogSWYgaXQgaGFzIGEgcHJlZml4LCBpbnRlcnByZXQgaXQgYXMgYW4gSUNVIG1ham9yIHZl cnNpb24uICovCisJbWFqb3JfdmVyc2lvbiA9IHN0cnRvbChjb2xsY29sbGF0ZSwgJmFmdGVyX3By ZWZpeCwgMTApOworCWlmIChhZnRlcl9wcmVmaXggIT0gc2VwYXJhdG9yKQorCQllbG9nKEVSUk9S LAorCQkJICJjb3VsZCBub3QgcGFyc2UgSUNVIG1ham9yIGxpYnJhcnkgdmVyc2lvbjogXCIlc1wi IiwKKwkJCSBjb2xsY29sbGF0ZSk7CisJaWYgKG1ham9yX3ZlcnNpb24gPCBQR19NSU5fSUNVX01B Sk9SX1ZFUlNJT04gfHwKKwkJbWFqb3JfdmVyc2lvbiA+IFBHX01BWF9JQ1VfTUFKT1JfVkVSU0lP TikKKwkJZWxvZyhFUlJPUiwKKwkJCSAiSUNVIG1ham9yIGxpYnJhcnkgdmVyaXNpb24gb3V0IG9m IHN1cHBvcnRlZCByYW5nZTogXCIlc1wiIiwKKwkJCSBjb2xsY29sbGF0ZSk7CisKKwkvKiBUaGUg cGFydCBhZnRlciB0aGUgc2VwYXJhdGUgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpYnJhcnkuICov CisJKnJlc3QgPSBzZXBhcmF0b3IgKyAxOworCisJcmV0dXJuIGdldF9pY3VfbGlicmFyeShtYWpv cl92ZXJzaW9uKTsKK30KKworI2VuZGlmCisKIHZvaWQKIG1ha2VfaWN1X2NvbGxhdG9yKGNvbnN0 IGNoYXIgKmljdWxvY3N0ciwKIAkJCQkgIHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0ICpyZXN1bHRw KQogewogI2lmZGVmIFVTRV9JQ1UKKwlwZ19pY3VfbGlicmFyeSAqbGliOwogCVVDb2xsYXRvciAg KmNvbGxhdG9yOwogCVVFcnJvckNvZGUJc3RhdHVzOwogCisJbGliID0gZ2V0X2ljdV9saWJyYXJ5 X2Zvcl9jb2xsYXRpb24oaWN1bG9jc3RyLCAmaWN1bG9jc3RyKTsKIAlzdGF0dXMgPSBVX1pFUk9f RVJST1I7Ci0JY29sbGF0b3IgPSB1Y29sX29wZW4oaWN1bG9jc3RyLCAmc3RhdHVzKTsKKwljb2xs YXRvciA9IGxpYi0+b3BlbihpY3Vsb2NzdHIsICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUoc3Rh dHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBjb2xs YXRvciBmb3IgbG9jYWxlIFwiJXNcIjogJXMiLAotCQkJCQkJaWN1bG9jc3RyLCB1X2Vycm9yTmFt ZShzdGF0dXMpKSkpOworCQkJCQkJaWN1bG9jc3RyLCBsaWItPmVycm9yTmFtZShzdGF0dXMpKSkp OwogCi0JaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNTQpCisJLyoKKwkgKiBYWFggY2Fu IHdlIGp1c3QgZHJvcCB0aGlzIGNydWZ0IGFuZCBtYWtlIDU0IHRoZSBtaW5pbXVtIHN1cHBvcnRl ZAorCSAqIHZlcnNpb24/CisJICovCisJaWYgKGxpYi0+bWFqb3JfdmVyc2lvbiA8IDU0KQogCQlp Y3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGNvbGxhdG9yLCBpY3Vsb2NzdHIpOwogCiAJLyog V2Ugd2lsbCBsZWFrIHRoaXMgc3RyaW5nIGlmIHRoZSBjYWxsZXIgZXJyb3JzIGxhdGVyIDotKCAq LwogCXJlc3VsdHAtPmluZm8uaWN1LmxvY2FsZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoVG9wTWVt b3J5Q29udGV4dCwgaWN1bG9jc3RyKTsKIAlyZXN1bHRwLT5pbmZvLmljdS51Y29sID0gY29sbGF0 b3I7CisJcmVzdWx0cC0+aW5mby5pY3UubGliID0gbGliOwogI2Vsc2UJCQkJCQkJLyogbm90IFVT RV9JQ1UgKi8KIAkvKiBjb3VsZCBnZXQgaGVyZSBpZiBhIGNvbGxhdGlvbiB3YXMgY3JlYXRlZCBi eSBhIGJ1aWxkIHdpdGggSUNVICovCiAJZXJlcG9ydChFUlJPUiwKQEAgLTE2ODgsMjEgKzIwMTIs MjMgQEAgZ2V0X2NvbGxhdGlvbl9hY3R1YWxfdmVyc2lvbihjaGFyIGNvbGxwcm92aWRlciwgY29u c3QgY2hhciAqY29sbGNvbGxhdGUpCiAjaWZkZWYgVVNFX0lDVQogCWlmIChjb2xscHJvdmlkZXIg PT0gQ09MTFBST1ZJREVSX0lDVSkKIAl7CisJCXBnX2ljdV9saWJyYXJ5ICpsOwogCQlVQ29sbGF0 b3IgICpjb2xsYXRvcjsKIAkJVUVycm9yQ29kZQlzdGF0dXM7CiAJCVVWZXJzaW9uSW5mbyB2ZXJz aW9uaW5mbzsKIAkJY2hhcgkJYnVmW1VfTUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSF07CiAKKwkJ bCA9IGdldF9pY3VfbGlicmFyeV9mb3JfY29sbGF0aW9uKGNvbGxjb2xsYXRlLCAmY29sbGNvbGxh dGUpOwogCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JCWNvbGxhdG9yID0gdWNvbF9vcGVuKGNv bGxjb2xsYXRlLCAmc3RhdHVzKTsKKwkJY29sbGF0b3IgPSBsLT5vcGVuKGNvbGxjb2xsYXRlLCAm c3RhdHVzKTsKIAkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJ CQkJKGVycm1zZygiY291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVz IiwKLQkJCQkJCQljb2xsY29sbGF0ZSwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKLQkJdWNvbF9n ZXRWZXJzaW9uKGNvbGxhdG9yLCB2ZXJzaW9uaW5mbyk7Ci0JCXVjb2xfY2xvc2UoY29sbGF0b3Ip OworCQkJCQkJCWNvbGxjb2xsYXRlLCBsLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJbC0+Z2V0 VmVyc2lvbihjb2xsYXRvciwgdmVyc2lvbmluZm8pOworCQlsLT5jbG9zZShjb2xsYXRvcik7CiAK LQkJdV92ZXJzaW9uVG9TdHJpbmcodmVyc2lvbmluZm8sIGJ1Zik7CisJCWwtPnZlcnNpb25Ub1N0 cmluZyh2ZXJzaW9uaW5mbywgYnVmKTsKIAkJY29sbHZlcnNpb24gPSBwc3RyZHVwKGJ1Zik7CiAJ fQogCWVsc2UKQEAgLTE3NzAsNiArMjA5Niw4IEBAIGdldF9jb2xsYXRpb25fYWN0dWFsX3ZlcnNp b24oY2hhciBjb2xscHJvdmlkZXIsIGNvbnN0IGNoYXIgKmNvbGxjb2xsYXRlKQogCiAKICNpZmRl ZiBVU0VfSUNVCisKKwogLyoKICAqIENvbnZlcnRlciBvYmplY3QgZm9yIGNvbnZlcnRpbmcgYmV0 d2VlbiBJQ1UncyBVQ2hhciBzdHJpbmdzIGFuZCBDIHN0cmluZ3MKICAqIGluIGRhdGFiYXNlIGVu Y29kaW5nLiAgU2luY2UgdGhlIGRhdGFiYXNlIGVuY29kaW5nIGRvZXNuJ3QgY2hhbmdlLCB3ZSBv bmx5CkBAIC0xOTkxLDE5ICsyMzE5LDIyIEBAIHZvaWQKIGNoZWNrX2ljdV9sb2NhbGUoY29uc3Qg Y2hhciAqaWN1X2xvY2FsZSkKIHsKICNpZmRlZiBVU0VfSUNVCisJcGdfaWN1X2xpYnJhcnkgKmxp YjsKIAlVQ29sbGF0b3IgICpjb2xsYXRvcjsKIAlVRXJyb3JDb2RlCXN0YXR1czsKIAorCWxpYiA9 IGdldF9pY3VfbGlicmFyeV9mb3JfY29sbGF0aW9uKGljdV9sb2NhbGUsICZpY3VfbG9jYWxlKTsK IAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JY29sbGF0b3IgPSB1Y29sX29wZW4oaWN1X2xvY2Fs ZSwgJnN0YXR1cyk7CisJY29sbGF0b3IgPSBsaWItPm9wZW4oaWN1X2xvY2FsZSwgJnN0YXR1cyk7 CiAJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2co ImNvdWxkIG5vdCBvcGVuIGNvbGxhdG9yIGZvciBsb2NhbGUgXCIlc1wiOiAlcyIsCi0JCQkJCQlp Y3VfbG9jYWxlLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJaWN1X2xvY2FsZSwgbGli LT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAotCWlmIChVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA8 IDU0KQorCS8qIFhYWCBjYW4gd2UganVzdCBkcm9wIHRoaXMgY3J1ZnQ/ICovCisJaWYgKGxpYi0+ bWFqb3JfdmVyc2lvbiA8IDU0KQogCQlpY3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGNvbGxh dG9yLCBpY3VfbG9jYWxlKTsKLQl1Y29sX2Nsb3NlKGNvbGxhdG9yKTsKKwlsaWItPmNsb3NlKGNv bGxhdG9yKTsKICNlbHNlCiAJZXJlcG9ydChFUlJPUiwKIAkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92 YXJjaGFyLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFyY2hhci5jCmluZGV4IGJiZWIwYTI2 NTMuLjE4N2YwNjY4ODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJjaGFy LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmNoYXIuYwpAQCAtMTAyNSwxMSArMTAy NSwxMSBAQCBoYXNoYnBjaGFyKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkJCXVsZW4gPSBpY3VfdG9f dWNoYXIoJnVjaGFyLCBrZXlkYXRhLCBrZXlsZW4pOwogCi0JCQlic2l6ZSA9IHVjb2xfZ2V0U29y dEtleShteWxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJCXVjaGFyLCB1bGVuLCBOVUxM LCAwKTsKKwkJCWJzaXplID0gUEdfSUNVX0xJQihteWxvY2FsZSktPmdldFNvcnRLZXkoUEdfSUNV X0NPTChteWxvY2FsZSksCisJCQkJCQkJCQkJCQkJIHVjaGFyLCB1bGVuLCBOVUxMLCAwKTsKIAkJ CWJ1ZiA9IHBhbGxvYyhic2l6ZSk7Ci0JCQl1Y29sX2dldFNvcnRLZXkobXlsb2NhbGUtPmluZm8u aWN1LnVjb2wsCi0JCQkJCQkJdWNoYXIsIHVsZW4sIGJ1ZiwgYnNpemUpOworCQkJUEdfSUNVX0xJ QihteWxvY2FsZSktPmdldFNvcnRLZXkoUEdfSUNVX0NPTChteWxvY2FsZSksCisJCQkJCQkJCQkJ CSB1Y2hhciwgdWxlbiwgYnVmLCBic2l6ZSk7CiAKIAkJCXJlc3VsdCA9IGhhc2hfYW55KGJ1Ziwg YnNpemUpOwogCkBAIC0xMDg2LDExICsxMDg2LDExIEBAIGhhc2hicGNoYXJleHRlbmRlZChQR19G VU5DVElPTl9BUkdTKQogCiAJCQl1bGVuID0gaWN1X3RvX3VjaGFyKCZ1Y2hhciwgVkFSREFUQV9B Tlkoa2V5KSwgVkFSU0laRV9BTllfRVhIRFIoa2V5KSk7CiAKLQkJCWJzaXplID0gdWNvbF9nZXRT b3J0S2V5KG15bG9jYWxlLT5pbmZvLmljdS51Y29sLAotCQkJCQkJCQkJdWNoYXIsIHVsZW4sIE5V TEwsIDApOworCQkJYnNpemUgPSBQR19JQ1VfTElCKG15bG9jYWxlKS0+Z2V0U29ydEtleShQR19J Q1VfQ09MKG15bG9jYWxlKSwKKwkJCQkJCQkJCQkJCQkgdWNoYXIsIHVsZW4sIE5VTEwsIDApOwog CQkJYnVmID0gcGFsbG9jKGJzaXplKTsKLQkJCXVjb2xfZ2V0U29ydEtleShteWxvY2FsZS0+aW5m by5pY3UudWNvbCwKLQkJCQkJCQl1Y2hhciwgdWxlbiwgYnVmLCBic2l6ZSk7CisJCQlQR19JQ1Vf TElCKG15bG9jYWxlKS0+Z2V0U29ydEtleShQR19JQ1VfQ09MKG15bG9jYWxlKSwKKwkJCQkJCQkJ CQkJIHVjaGFyLCB1bGVuLCBidWYsIGJzaXplKTsKIAogCQkJcmVzdWx0ID0gaGFzaF9hbnlfZXh0 ZW5kZWQoYnVmLCBic2l6ZSwgUEdfR0VUQVJHX0lOVDY0KDEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJs ZW5hLmMKaW5kZXggOTE5MTM4ZWFmMy4uZTgxZWZiZWI3MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVu YS5jCkBAIC0xNjY2LDEzICsxNjY2LDE0IEBAIHZhcnN0cl9jbXAoY29uc3QgY2hhciAqYXJnMSwg aW50IGxlbjEsIGNvbnN0IGNoYXIgKmFyZzIsIGludCBsZW4yLCBPaWQgY29sbGlkKQogCQkJCQlV RXJyb3JDb2RlCXN0YXR1czsKIAogCQkJCQlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JCQkJCXJl c3VsdCA9IHVjb2xfc3RyY29sbFVURjgobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJ CQkJCSAgYXJnMSwgbGVuMSwKLQkJCQkJCQkJCQkJICBhcmcyLCBsZW4yLAotCQkJCQkJCQkJCQkg ICZzdGF0dXMpOworCQkJCQlyZXN1bHQgPSBQR19JQ1VfTElCKG15bG9jYWxlKS0+c3RyY29sbFVU RjgoUEdfSUNVX0NPTChteWxvY2FsZSksCisJCQkJCQkJCQkJCQkJCQkgICBhcmcxLCBsZW4xLAor CQkJCQkJCQkJCQkJCQkJICAgYXJnMiwgbGVuMiwKKwkJCQkJCQkJCQkJCQkJCSAgICZzdGF0dXMp OwogCQkJCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJ CQkJCQkoZXJybXNnKCJjb2xsYXRpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1cykp KSk7CisJCQkJCQkJCShlcnJtc2coImNvbGxhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCQkJCQlQ R19JQ1VfTElCKG15bG9jYWxlKS0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAJCQkJfQogCQkJCWVs c2UKICNlbmRpZgpAQCAtMTY4NSw5ICsxNjg2LDkgQEAgdmFyc3RyX2NtcChjb25zdCBjaGFyICph cmcxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqYXJnMiwgaW50IGxlbjIsIE9pZCBjb2xsaWQpCiAJ CQkJCXVsZW4xID0gaWN1X3RvX3VjaGFyKCZ1Y2hhcjEsIGFyZzEsIGxlbjEpOwogCQkJCQl1bGVu MiA9IGljdV90b191Y2hhcigmdWNoYXIyLCBhcmcyLCBsZW4yKTsKIAotCQkJCQlyZXN1bHQgPSB1 Y29sX3N0cmNvbGwobXlsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkJICB1Y2hhcjEs IHVsZW4xLAotCQkJCQkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CisJCQkJCXJlc3VsdCA9IFBHX0lD VV9MSUIobXlsb2NhbGUpLT5zdHJjb2xsKFBHX0lDVV9DT0wobXlsb2NhbGUpLAorCQkJCQkJCQkJ CQkJCQkgICB1Y2hhcjEsIHVsZW4xLAorCQkJCQkJCQkJCQkJCQkgICB1Y2hhcjIsIHVsZW4yKTsK IAogCQkJCQlwZnJlZSh1Y2hhcjEpOwogCQkJCQlwZnJlZSh1Y2hhcjIpOwpAQCAtMjM4OSwxMyAr MjM5MCwxNCBAQCB2YXJzdHJmYXN0Y21wX2xvY2FsZShjaGFyICphMXAsIGludCBsZW4xLCBjaGFy ICphMnAsIGludCBsZW4yLCBTb3J0U3VwcG9ydCBzc3VwKQogCQkJCVVFcnJvckNvZGUJc3RhdHVz OwogCiAJCQkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQkJCXJlc3VsdCA9IHVjb2xfc3RyY29s bFVURjgoc3NzLT5sb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkJICBhMXAsIGxlbjEs Ci0JCQkJCQkJCQkJICBhMnAsIGxlbjIsCi0JCQkJCQkJCQkJICAmc3RhdHVzKTsKKwkJCQlyZXN1 bHQgPSBQR19JQ1VfTElCKHNzcy0+bG9jYWxlKS0+c3RyY29sbFVURjgoUEdfSUNVX0NPTChzc3Mt PmxvY2FsZSksCisJCQkJCQkJCQkJCQkJCQkgIGExcCwgbGVuMSwKKwkJCQkJCQkJCQkJCQkJCSAg YTJwLCBsZW4yLAorCQkJCQkJCQkJCQkJCQkJICAmc3RhdHVzKTsKIAkJCQlpZiAoVV9GQUlMVVJF KHN0YXR1cykpCiAJCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJKGVycm1zZygiY29sbGF0aW9u IGZhaWxlZDogJXMiLCB1X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJCShlcnJtc2coImNv bGxhdGlvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCQkJCVBHX0lDVV9MSUIoc3NzLT5sb2NhbGUpLT5l cnJvck5hbWUoc3RhdHVzKSkpKTsKIAkJCX0KIAkJCWVsc2UKICNlbmRpZgpAQCAtMjQwOCw5ICsy NDEwLDkgQEAgdmFyc3RyZmFzdGNtcF9sb2NhbGUoY2hhciAqYTFwLCBpbnQgbGVuMSwgY2hhciAq YTJwLCBpbnQgbGVuMiwgU29ydFN1cHBvcnQgc3N1cCkKIAkJCQl1bGVuMSA9IGljdV90b191Y2hh cigmdWNoYXIxLCBhMXAsIGxlbjEpOwogCQkJCXVsZW4yID0gaWN1X3RvX3VjaGFyKCZ1Y2hhcjIs IGEycCwgbGVuMik7CiAKLQkJCQlyZXN1bHQgPSB1Y29sX3N0cmNvbGwoc3NzLT5sb2NhbGUtPmlu Zm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkgIHVjaGFyMSwgdWxlbjEsCi0JCQkJCQkJCQkgIHVjaGFy MiwgdWxlbjIpOworCQkJCXJlc3VsdCA9IFBHX0lDVV9MSUIoc3NzLT5sb2NhbGUpLT5zdHJjb2xs KFBHX0lDVV9DT0woc3NzLT5sb2NhbGUpLAorCQkJCQkJCQkJCQkJCQkgIHVjaGFyMSwgdWxlbjEs CisJCQkJCQkJCQkJCQkJCSAgdWNoYXIyLCB1bGVuMik7CiAKIAkJCQlwZnJlZSh1Y2hhcjEpOwog CQkJCXBmcmVlKHVjaGFyMik7CkBAIC0yNTc0LDIxICsyNTc2LDIxIEBAIHZhcnN0cl9hYmJyZXZf Y29udmVydChEYXR1bSBvcmlnaW5hbCwgU29ydFN1cHBvcnQgc3N1cCkKIAkJCQkJdWl0ZXJfc2V0 VVRGOCgmaXRlciwgc3NzLT5idWYxLCBsZW4pOwogCQkJCQlzdGF0ZVswXSA9IHN0YXRlWzFdID0g MDsJLyogd29uJ3QgbmVlZCB0aGF0IGFnYWluICovCiAJCQkJCXN0YXR1cyA9IFVfWkVST19FUlJP UjsKLQkJCQkJYnNpemUgPSB1Y29sX25leHRTb3J0S2V5UGFydChzc3MtPmxvY2FsZS0+aW5mby5p Y3UudWNvbCwKLQkJCQkJCQkJCQkJCSAmaXRlciwKLQkJCQkJCQkJCQkJCSBzdGF0ZSwKLQkJCQkJ CQkJCQkJCSAodWludDhfdCAqKSBzc3MtPmJ1ZjIsCi0JCQkJCQkJCQkJCQkgTWluKHNpemVvZihE YXR1bSksIHNzcy0+YnVmbGVuMiksCi0JCQkJCQkJCQkJCQkgJnN0YXR1cyk7CisJCQkJCWJzaXpl ID0gUEdfSUNVX0xJQihzc3MtPmxvY2FsZSktPm5leHRTb3J0S2V5UGFydChQR19JQ1VfQ09MKHNz cy0+bG9jYWxlKSwKKwkJCQkJCQkJCQkJCQkJCQkJICZpdGVyLAorCQkJCQkJCQkJCQkJCQkJCQkg c3RhdGUsCisJCQkJCQkJCQkJCQkJCQkJCSAodWludDhfdCAqKSBzc3MtPmJ1ZjIsCisJCQkJCQkJ CQkJCQkJCQkJCSBNaW4oc2l6ZW9mKERhdHVtKSwgc3NzLT5idWZsZW4yKSwKKwkJCQkJCQkJCQkJ CQkJCQkJICZzdGF0dXMpOwogCQkJCQlpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAJCQkJCQllcmVw b3J0KEVSUk9SLAogCQkJCQkJCQkoZXJybXNnKCJzb3J0IGtleSBnZW5lcmF0aW9uIGZhaWxlZDog JXMiLAotCQkJCQkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQkJCQkJUEdfSUNV X0xJQihzc3MtPmxvY2FsZSktPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCQkJCX0KIAkJCQllbHNl Ci0JCQkJCWJzaXplID0gdWNvbF9nZXRTb3J0S2V5KHNzcy0+bG9jYWxlLT5pbmZvLmljdS51Y29s LAotCQkJCQkJCQkJCQl1Y2hhciwgdWxlbiwKLQkJCQkJCQkJCQkJKHVpbnQ4X3QgKikgc3NzLT5i dWYyLCBzc3MtPmJ1ZmxlbjIpOworCQkJCQlic2l6ZSA9IFBHX0lDVV9MSUIoc3NzLT5sb2NhbGUp LT5nZXRTb3J0S2V5KFBHX0lDVV9DT0woc3NzLT5sb2NhbGUpLAorCQkJCQkJCQkJCQkJCQkJCXVj aGFyLCB1bGVuLAorCQkJCQkJCQkJCQkJCQkJCSh1aW50OF90ICopIHNzcy0+YnVmMiwgc3NzLT5i dWZsZW4yKTsKIAkJCX0KIAkJCWVsc2UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdfbG9jYWxlLmggYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaAppbmRleCBl NzM4NWZhZWY4Li5kNTFhMzAyNmY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wZ19s b2NhbGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGUuaApAQCAtMTcsNiArMTcs NyBAQAogI2VuZGlmCiAjaWZkZWYgVVNFX0lDVQogI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgor I2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJ1dGlscy9ndWMu aCIKQEAgLTc0LDYgKzc1LDY4IEBAIGV4dGVybiBzdHJ1Y3QgbGNvbnYgKlBHTENfbG9jYWxlY29u dih2b2lkKTsKIAogZXh0ZXJuIHZvaWQgY2FjaGVfbG9jYWxlX3RpbWUodm9pZCk7CiAKKyNpZmRl ZiBVU0VfSUNVCisKKy8qCisgKiBBbiBJQ1UgbGlicmFyeSB2ZXJzaW9uIHRoYXQgd2UncmUgZWl0 aGVyIGxpbmtlZCBhZ2FpbnN0IG9yIGhhdmUgbG9hZGVkIGF0CisgKiBydW50aW1lLgorICovCit0 eXBlZGVmIHN0cnVjdCBwZ19pY3VfbGlicmFyeQoreworCWludAkJCW1ham9yX3ZlcnNpb247CisJ dm9pZAkgICAqbGliaWN1aTE4bl9oYW5kbGU7CisJdm9pZAkgICAqbGliaWN1dWNfaGFuZGxlOwor CVVDb2xsYXRvciAgKigqb3BlbikgKGNvbnN0IGNoYXIgKmxvYywgVUVycm9yQ29kZSAqc3RhdHVz KTsKKwl2b2lkCQkoKmNsb3NlKSAoVUNvbGxhdG9yICpjb2xsKTsKKwl2b2lkCQkoKmdldFZlcnNp b24pIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsIFVWZXJzaW9uSW5mbyBpbmZvKTsKKwl2b2lkCQko KnZlcnNpb25Ub1N0cmluZykgKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXksCisJCQkJ CQkJCQljaGFyICp2ZXJzaW9uU3RyaW5nKTsKKwkJCQlVQ29sbGF0aW9uUmVzdWx0KCpzdHJjb2xs KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCQkJCQljb25zdCBVQ2hhciAqc291cmNl LAorCQkJCQkJCQkJCQlpbnQzMl90IHNvdXJjZUxlbmd0aCwKKwkJCQkJCQkJCQkJY29uc3QgVUNo YXIgKnRhcmdldCwKKwkJCQkJCQkJCQkJaW50MzJfdCB0YXJnZXRMZW5ndGgpOworCQkJCVVDb2xs YXRpb25SZXN1bHQoKnN0cmNvbGxVVEY4KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJ CQkJCQkJY29uc3QgY2hhciAqc291cmNlLAorCQkJCQkJCQkJCQkJaW50MzJfdCBzb3VyY2VMZW5n dGgsCisJCQkJCQkJCQkJCQljb25zdCBjaGFyICp0YXJnZXQsCisJCQkJCQkJCQkJCQlpbnQzMl90 IHRhcmdldExlbmd0aCwKKwkJCQkJCQkJCQkJCVVFcnJvckNvZGUgKnN0YXR1cyk7CisJaW50MzJf dAkJKCpnZXRTb3J0S2V5KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCSAgIGNvbnN0 IFVDaGFyICpzb3VyY2UsCisJCQkJCQkJICAgaW50MzJfdCBzb3VyY2VMZW5ndGgsCisJCQkJCQkJ ICAgdWludDhfdCAqcmVzdWx0LAorCQkJCQkJCSAgIGludDMyX3QgcmVzdWx0TGVuZ3RoKTsKKwlp bnQzMl90CQkoKm5leHRTb3J0S2V5UGFydCkgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKwkJCQkJ CQkJCVVDaGFySXRlcmF0b3IgKml0ZXIsCisJCQkJCQkJCQl1aW50MzJfdCBzdGF0ZVsyXSwKKwkJ CQkJCQkJCXVpbnQ4X3QgKmRlc3QsCisJCQkJCQkJCQlpbnQzMl90IGNvdW50LAorCQkJCQkJCQkJ VUVycm9yQ29kZSAqc3RhdHVzKTsKKwljb25zdCBjaGFyICooKmVycm9yTmFtZSkgKFVFcnJvckNv ZGUgY29kZSk7CisJaW50MzJfdAkJKCpzdHJUb1VwcGVyKSAoVUNoYXIgKmRlc3QsCisJCQkJCQkJ ICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJICAgY29uc3QgVUNoYXIgKnNyYywKKwkJ CQkJCQkgICBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpsb2NhbGUs CisJCQkJCQkJICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisJaW50MzJfdAkJKCpzdHJUb0xv d2VyKSAoVUNoYXIgKmRlc3QsCisJCQkJCQkJICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJ CQkJICAgY29uc3QgVUNoYXIgKnNyYywKKwkJCQkJCQkgICBpbnQzMl90IHNyY0xlbmd0aCwKKwkJ CQkJCQkgICBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkJICAgVUVycm9yQ29kZSAqcEVycm9y Q29kZSk7CisJaW50MzJfdAkJKCpzdHJUb1RpdGxlKSAoVUNoYXIgKmRlc3QsCisJCQkJCQkJICAg aW50MzJfdCBkZXN0Q2FwYWNpdHksCisJCQkJCQkJICAgY29uc3QgVUNoYXIgKnNyYywKKwkJCQkJ CQkgICBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkgICBVQnJlYWtJdGVyYXRvciAqdGl0bGVJ dGVyLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkgICBVRXJyb3JDb2Rl ICpwRXJyb3JDb2RlKTsKKwlzdHJ1Y3QgcGdfaWN1X2xpYnJhcnkgKm5leHQ7Cit9IHBnX2ljdV9s aWJyYXJ5OworCisjZW5kaWYKIAogLyoKICAqIFdlIGRlZmluZSBvdXIgb3duIHdyYXBwZXIgYXJv dW5kIGxvY2FsZV90IHNvIHdlIGNhbiBrZWVwIHRoZSBzYW1lCkBAIC05NSwxMiArMTU4LDE4IEBA IHN0cnVjdCBwZ19sb2NhbGVfc3RydWN0CiAJCXsKIAkJCWNvbnN0IGNoYXIgKmxvY2FsZTsKIAkJ CVVDb2xsYXRvciAgKnVjb2w7CisJCQlwZ19pY3VfbGlicmFyeSAqbGliOwogCQl9CQkJaWN1Owog I2VuZGlmCiAJCWludAkJCWR1bW15OwkJLyogaW4gY2FzZSB3ZSBoYXZlIG5laXRoZXIgTE9DQUxF X1Qgbm9yIElDVSAqLwogCX0JCQlpbmZvOwogfTsKIAorI2lmZGVmIFVTRV9JQ1UKKyNkZWZpbmUg UEdfSUNVX0xJQih4KSAoKHgpLT5pbmZvLmljdS5saWIpCisjZGVmaW5lIFBHX0lDVV9DT0woeCkg KCh4KS0+aW5mby5pY3UudWNvbCkKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBwZ19sb2NhbGVf c3RydWN0ICpwZ19sb2NhbGVfdDsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBwZ19sb2Nh bGVfc3RydWN0IGRlZmF1bHRfbG9jYWxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA0 ZmI3NDY5MzBhLi40N2FiYTc2NTRiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTEw MCw2ICsxMTAwLDcgQEAgSGVhcFR1cGxlVGFibGVTbG90CiBIaXN0Q29udHJvbAogSG90U3RhbmRi eVN0YXRlCiBJMzIKK0lDVV9Db252ZXJ0X0JJX0Z1bmMKIElDVV9Db252ZXJ0X0Z1bmMKIElECiBJ TkZJWApAQCAtMjg1OCw2ICsyODU5LDcgQEAgVHlwZU5hbWUKIFUKIFUzMgogVTgKK1VCcmVha0l0 ZXJhdG9yCiBVQ2hhcgogVUNoYXJJdGVyYXRvcgogVUNvbEF0dHJpYnV0ZQpAQCAtMzQ4NSw2ICsz NDg3LDcgQEAgcGdfZnVuY3B0cl90CiBwZ19nc3NpbmZvCiBwZ19obWFjX2N0eAogcGdfaG1hY19l cnJubworcGdfaWN1X2xpYnJhcnkKIHBnX2ludDY0CiBwZ19sb2NhbF90b191dGZfY29tYmluZWQK IHBnX2xvY2FsZV90Ci0tIAoyLjMwLjIKCg== --000000000000909fdf05e134dbd8--