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.96) (envelope-from ) id 1vgZvL-00FfV8-3D for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Jan 2026 02:50:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgZuL-000EeM-2Z for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Jan 2026 02:49:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgZuL-000EeE-1K for pgsql-hackers@lists.postgresql.org; Fri, 16 Jan 2026 02:49:53 +0000 Received: from mail-ot1-x335.google.com ([2607:f8b0:4864:20::335]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgZuJ-000jrB-1q for pgsql-hackers@postgresql.org; Fri, 16 Jan 2026 02:49:53 +0000 Received: by mail-ot1-x335.google.com with SMTP id 46e09a7af769-7cfd0f2ef93so704374a34.1 for ; Thu, 15 Jan 2026 18:49:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768531790; x=1769136590; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dSp2Lla6QVC49h26JqDG9OOQi7GNfu7uU/yWCmRG2eU=; b=k6+gHs4jpA2DwEjAFiRVMJLMqfz5SbzrGDPE2kThd34LlEyyVrfOlvUUPsbo9v96VC s6iQxrzSxvVK76NHb9mrumTQn2TS7c9C5f92T8YbJMk5Xo5c0z2L7PnVeSqO5do1q/dx KOq/WH5Xklle30m7LTc/pBbh85u44P1fW97qjh+JsXso3BkU6b5ID1pW94yfnMkzQEVx hazvwEarX23Sy4Zp2q4KbsNozk4m51VbrSKoTFqjMdaBBukrf32Z2ASSnJVc2+MUbsc3 UlXaHd+fRpmScNLqTS3vcSZHY1Neb+9DLa/9Yt+nQvAHyi3B05nTji3VY+mNik+vML4y mTKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768531790; x=1769136590; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dSp2Lla6QVC49h26JqDG9OOQi7GNfu7uU/yWCmRG2eU=; b=XiRrCk6UA92Dph82p3I+2sbHLSJfOM8n5otmuf/YMe53/Sx4GMcNt6+ZpBj5+LEhSb X+EVm6cyp8HtXy64gIuWLJcEMFJngq/rDZ1K4tVroAUf3+5Blmvu4o4cJ95QAYO/umFO BiFQyFDHeJJc3q6aEM9l2P0YVSWFUy/4UiGjAvNa0mEZZUCau/6vPEf1Q5vapWdOgI+c 2U+JQBAvgCeLxQdziCobH0jJ8ZdqE/Fph7y6smUUP2uRE06GG0Mm/bMGzra4HxlsfuUE XWCkOhx8ZUsEPY/cctaSWKTLygQbOWOgsG6SF+bJUtGxpWR7JU5VjJXLBJ4lS2rULN9p PScw== X-Gm-Message-State: AOJu0YwPFR9IrdgtHa9PAMqYc9jJjZueO7nXL9QsbqDAGGiNZZax+UDN j/Wr85qKwshFuUvUwQMDHZ8SxpQnRxl7LDWjmxbAlRlrjWgI3pxulM3P+gXSixyZp9jkDO4JdNy sxon+u0OXCb8hSTP0groA/ppJfrny0t0= X-Gm-Gg: AY/fxX4ymLCJoWuOB5+XdCIkr66FMbipZdqSAmgy3rv9LX7zwMFSG2thSBCL8tVy/X0 EerBJK7u6qRncq+xGV7AYP6HxdQH39j/ZNbTMLRdCTPM0iflojYjo1v7vdcyAWO9vNPS9w6AqUD 7jG2hlV5P3SGHxXP9oUWGtPc/lx6NKtitXkB4ZyURjeoOkmHycW4cMFnTl8NuxDQ+m07B41Lmx3 4YiwmOut1D8TVsg5CAdhACuk5x1l50Piv3YMkBWT3CyIZYN2vIHWKRLijV0tbgMzdhzBXi50g== X-Received: by 2002:a05:6820:1787:b0:65b:85d4:66f4 with SMTP id 006d021491bc7-66117933608mr770382eaf.8.1768531789646; Thu, 15 Jan 2026 18:49:49 -0800 (PST) MIME-Version: 1.0 References: <1346382.1725334280@sss.pgh.pa.us> In-Reply-To: From: Richard Guo Date: Fri, 16 Jan 2026 11:49:38 +0900 X-Gm-Features: AZwV_QhlpZISDo-8FyIzLNQKacPmIJkfqfbGnlzKCuzjXfSYkwhG0uOkRevNZwU Message-ID: Subject: Re: Remove no-op PlaceHolderVars To: Tom Lane Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000018ac760648786567" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000018ac760648786567 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Sep 3, 2024 at 5:50=E2=80=AFPM Richard Guo = wrote: > On Tue, Sep 3, 2024 at 11:31=E2=80=AFAM Tom Lane wrot= e: > > Yeah. I've been mulling over how we could do this, and the real > > problem is that the expression containing the PHV *has* been fully > > preprocessed by the time we get to outer join strength reduction > > (cf. file header comment in prepjointree.c). Simply dropping the PHV > > can break various invariants that expression preprocessing is supposed > > to establish, such as "no RelabelType directly above another" or "no > > AND clause directly above another". > Yeah, this is what the problem is. While fixing some performance issues caused by PHVs recently, it struck me again that we should be removing "no-op" PHVs whenever possible, because PHVs can be optimization barriers in several cases. I still do not have a good idea for ensuring that removing the PHV wrapper does not break the expression tree invariants. But maybe we can use a conservative approach: we only strip the PHV if the contained expression is known to be safe (for example, a simple Var). I've also realized that we cannot remove no-op PHVs in every case. For example, deconstruct_distribute_oj_quals() relies on remove_nulling_relids() to temporarily strip out the nullingrels bits that are later restored as we crawl up the join stack. If the PHV were removed, we would be unable to restore its nullingrels bits for next level up. To handle this, I added a new parameter to remove_nulling_relids() so the caller can decide whether to allow removal or not. Attached is a draft patch for the code changes. It currently causes plan changes in 28 regression test queries, which is a surprisingly high number. We'll have to go through these tests one by one, but before doing that, I would like to hear others' thoughts on this patch. - Richard --00000000000018ac760648786567 Content-Type: application/octet-stream; name="v2-0001-Remove-no-op-PlaceHolderVars.patch" Content-Disposition: attachment; filename="v2-0001-Remove-no-op-PlaceHolderVars.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkga5fgr0 RnJvbSBhNDFjMjdiMTQwMDAwYTNiNzJmMWIyNzdkZDIxYjJhM2U5M2Y1NTE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVGh1LCAxNSBKYW4gMjAyNiAxMTo0MzoxNyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IFJlbW92ZSBuby1vcCBQbGFjZUhvbGRlclZhcnMKCldoZW4gcHVsbGluZyB1cCBhIHN1YnF1ZXJ5 LCB3ZSBtYXkgbmVlZCB0byB3cmFwIGl0cyB0YXJnZXRsaXN0IGl0ZW1zCmluIFBsYWNlSG9sZGVy VmFycyBpZiB0aGUgc3VicXVlcnkgaXMgdW5kZXIgYW4gb3V0ZXIgam9pbi4gIFRoaXMKZW5zdXJl cyB0aGF0IHRoZXkgYXJlIGV2YWx1YXRlZCBhdCB0aGUgcmlnaHQgcGxhY2UgYW5kIGFyZSBmb3Jj ZWQgdG8KTlVMTCB3aGVuIHRoZSBvdXRlciBqb2luIHNob3VsZCBkbyBzby4gIEhvd2V2ZXIsIGlm IHRoZSBvdXRlciBqb2luIGlzCmxhdGVyIHJlZHVjZWQgdG8gYW4gaW5uZXIgam9pbiwgdGhlc2Ug UGxhY2VIb2xkZXJWYXJzIGVmZmVjdGl2ZWx5CmJlY29tZSBuby1vcHMgcmVnYXJkaW5nIG51bGxh YmlsaXR5LgoKSXQgaXMgZGVzaXJhYmxlIHRvIHJlbW92ZSB0aGVzZSBuby1vcCBQbGFjZUhvbGRl clZhcnMgYmVjYXVzZSB0aGV5IGNhbgpjb25zdHJhaW4gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRp ZXMsIHN1Y2ggYXMgYmxvY2tpbmcgc3ViZXhwcmVzc2lvbgpmb2xkaW5nIG9yIGZvcmNpbmcgam9p biBvcmRlci4gIFByZXZpb3VzbHksIGhvd2V2ZXIsIHdlIGRpZCBub3QgdHJ5IHRvCnJlbW92ZSB0 aGVtIGJlY2F1c2UgUEhWcyBhcmUgYWxzbyB1c2VkIHRvIGVuZm9yY2Ugc2VwYXJhdGUgaWRlbnRp dHkgb2YKc3ViZXhwcmVzc2lvbnMsIGFuZCB3ZSBjb3VsZCBub3QgZGlzdGluZ3Vpc2ggYmV0d2Vl biB0aGUgdHdvIGNhc2VzLgpBZGRpdGlvbmFsbHksIHNpbXBseSByZW1vdmluZyB0aGUgUEhWIHdy YXBwZXIgY291bGQgZXhwb3NlIHRoZQpjb250YWluZWQgZXhwcmVzc2lvbiBpbiBhIHdheSB0aGF0 IHZpb2xhdGVzIHZhcmlvdXMgaW52YXJpYW50cwplc3RhYmxpc2hlZCBieSBleHByZXNzaW9uIHBy ZXByb2Nlc3NpbmcsIHN1Y2ggYXMgY3JlYXRpbmcgbmVzdGVkIEFORApjbGF1c2VzIG9yIHN0YWNr ZWQgUmVsYWJlbFR5cGUgbm9kZXMuCgpUaGlzIHBhdGNoIHJlbW92ZXMgbm8tb3AgUGxhY2VIb2xk ZXJWYXJzIGJ5IG1hcmtpbmcgUEhWcyBhcyBwcmVzZXJ2ZWQKaWYgdGhleSBhcmUgdXNlZCB0byBl bmZvcmNlIHN1YmV4cHJlc3Npb24gaWRlbnRpdHkuICBGdXJ0aGVybW9yZSwgdG8KZW5zdXJlIHRo YXQgc3RyaXBwaW5nIHRoZSBQSFYgd3JhcHBlciBkb2VzIG5vdCB2aW9sYXRlIGV4cHJlc3Npb24g dHJlZQppbnZhcmlhbnRzLCB3ZSBvbmx5IGRvIHNvIHdoZW4gdGhlIGNvbnRhaW5lZCBleHByZXNz aW9uIGlzIGtub3duIHRvIGJlCnNhZmUgdG8gZXhwb3NlIHRvIHRoZSBzdXJyb3VuZGluZyBleHBy ZXNzaW9uIHN0cnVjdHVyZS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNs YXNzLmMgICB8ICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jICAg ICB8ICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyAgICB8ICA2 ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICB8ICA0ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICB8ICA0ICstCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyB8IDQxICsrKysrKysrKysrLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFjZWhvbGRlci5jICB8IDExICsrLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgICAgIHwgIDQgKy0KIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3RsaXN0LmMgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3Jld3Jp dGUvcmV3cml0ZU1hbmlwLmMgICAgICAgIHwgNjkgKysrKysrKysrKysrKysrKysrKysrLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgIHwgIDggKystCiBzcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICB8ICA4ICsrKwogc3JjL2luY2x1ZGUv cmV3cml0ZS9yZXdyaXRlTWFuaXAuaCAgICAgICAgfCAgMyArLQogMTMgZmlsZXMgY2hhbmdlZCwg MTMyIGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2VxdWl2Y2xhc3MuYwppbmRleCBhNGZjZmNjODZjOC4uZDFkZDZiYTcyNWYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKQEAgLTI0NzEsOCArMjQ3MSw4IEBAIHJl Y29uc2lkZXJfZnVsbF9qb2luX2NsYXVzZShQbGFubmVySW5mbyAqcm9vdCwgT3V0ZXJKb2luQ2xh dXNlSW5mbyAqb2pjaW5mbykKIAkJCQkgKiByZXByZXNlbnRhdGlvbiBmb3IgRlVMTCBKT0lOIFVT SU5HIG91dHB1dCBjb2x1bW5zLCB0aGlzCiAJCQkJICogd291bGRuJ3QgYmUgbmVlZGVkPykKIAkJ CQkgKi8KLQkJCQljZmlyc3QgPSByZW1vdmVfbnVsbGluZ19yZWxpZHMoY2ZpcnN0LCBmanJlbGlk cywgTlVMTCk7Ci0JCQkJY3NlY29uZCA9IHJlbW92ZV9udWxsaW5nX3JlbGlkcyhjc2Vjb25kLCBm anJlbGlkcywgTlVMTCk7CisJCQkJY2ZpcnN0ID0gcmVtb3ZlX251bGxpbmdfcmVsaWRzKGNmaXJz dCwgZmpyZWxpZHMsIE5VTEwsIGZhbHNlKTsKKwkJCQljc2Vjb25kID0gcmVtb3ZlX251bGxpbmdf cmVsaWRzKGNzZWNvbmQsIGZqcmVsaWRzLCBOVUxMLCBmYWxzZSk7CiAKIAkJCQlpZiAoZXF1YWwo bGVmdHZhciwgY2ZpcnN0KSAmJiBlcXVhbChyaWdodHZhciwgY3NlY29uZCkpCiAJCQkJewpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKaW5kZXggNWViNzE2MzVkMTUuLjBiNjEwZTQ2 ZGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMKQEAgLTE0MDgsNyArMTQw OCw3IEBAIG1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzX2V4dGVuZGVkKFBsYW5uZXJJbmZv ICpyb290LAogCQkJc29ydGtleSA9IChFeHByICopCiAJCQkJcmVtb3ZlX251bGxpbmdfcmVsaWRz KChOb2RlICopIHNvcnRrZXksCiAJCQkJCQkJCQkgIGJtc19tYWtlX3NpbmdsZXRvbihyb290LT5n cm91cF9ydGluZGV4KSwKLQkJCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCQkgIE5VTEwsIHRydWUp OwogCQl9CiAJCXBhdGhrZXkgPSBtYWtlX3BhdGhrZXlfZnJvbV9zb3J0b3Aocm9vdCwKIAkJCQkJ CQkJCQkgICBzb3J0a2V5LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v aW5pdHNwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRl eCA5N2VhOTVhNGViOC4uMDcxYjM5ZGYwZDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2lu aXRzcGxhbi5jCkBAIC0yNjQzLDEzICsyNjQzLDE1IEBAIGRlY29uc3RydWN0X2Rpc3RyaWJ1dGVf b2pfcXVhbHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCSAqCiAJCSAqIFdlIGZpcnN0IHN0cmlwIG91 dCBhbGwgdGhlIG51bGxpbmdyZWxzIGJpdHMgY29ycmVzcG9uZGluZyB0bwogCQkgKiBjb21tdXRp bmcgam9pbnMgYmVsb3cgdGhpcyBvbmUsIGFuZCB0aGVuIHN1Y2Nlc3NpdmVseSBwdXQgdGhlbSBi YWNrCi0JCSAqIGFzIHdlIGNyYXdsIHVwIHRoZSBqb2luIHN0YWNrLgorCQkgKiBhcyB3ZSBjcmF3 bCB1cCB0aGUgam9pbiBzdGFjay4gIE5vdGUgdGhhdCB3ZSBkbyBub3QgYWxsb3cgc3RyaXBwaW5n CisJCSAqIG5vLW9wIFBsYWNlSG9sZGVyVmFycyBoZXJlOyBpZiBhIFBIViB3ZXJlIHJlbW92ZWQs IHdlIHdvdWxkIGJlCisJCSAqIHVuYWJsZSB0byByZXN0b3JlIGl0cyBudWxsaW5ncmVscyBiaXRz IGxhdGVyLgogCQkgKi8KIAkJcXVhbHMgPSBqdGl0ZW0tPm9qX2pvaW5jbGF1c2VzOwogCQlpZiAo IWJtc19pc19lbXB0eShqb2luc19iZWxvdykpCiAJCQlxdWFscyA9IChMaXN0ICopIHJlbW92ZV9u dWxsaW5nX3JlbGlkcygoTm9kZSAqKSBxdWFscywKIAkJCQkJCQkJCQkJCSAgIGpvaW5zX2JlbG93 LAotCQkJCQkJCQkJCQkJICAgTlVMTCk7CisJCQkJCQkJCQkJCQkgICBOVUxMLCBmYWxzZSk7CiAK IAkJLyoKIAkJICogV2UnbGwgbmVlZCB0byBtYXJrIHRoZSBsb3dlciB2ZXJzaW9ucyBvZiB0aGUg cXVhbHMgYXMgbm90IHNhZmUgdG8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRl eCA3YTZiOGI3NDlmMi4uOWI4OTc3MjFkZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMKQEAgLTU1ODQsNyArNTU4NCw3IEBAIG1ha2VfZ3JvdXBfaW5wdXRfdGFyZ2V0KFBsYW5u ZXJJbmZvICpyb290LCBQYXRoVGFyZ2V0ICpmaW5hbF90YXJnZXQpCiAJCQkJZXhwciA9IChFeHBy ICopCiAJCQkJCXJlbW92ZV9udWxsaW5nX3JlbGlkcygoTm9kZSAqKSBleHByLAogCQkJCQkJCQkJ CSAgYm1zX21ha2Vfc2luZ2xldG9uKHJvb3QtPmdyb3VwX3J0aW5kZXgpLAotCQkJCQkJCQkJCSAg TlVMTCk7CisJCQkJCQkJCQkJICBOVUxMLCB0cnVlKTsKIAkJCX0KIAkJCWFkZF9jb2x1bW5fdG9f cGF0aHRhcmdldChpbnB1dF90YXJnZXQsIGV4cHIsIHNncmVmKTsKIAkJfQpAQCAtNTYyOCw3ICs1 NjI4LDcgQEAgbWFrZV9ncm91cF9pbnB1dF90YXJnZXQoUGxhbm5lckluZm8gKnJvb3QsIFBhdGhU YXJnZXQgKmZpbmFsX3RhcmdldCkKIAkJbm9uX2dyb3VwX3ZhcnMgPSAoTGlzdCAqKQogCQkJcmVt b3ZlX251bGxpbmdfcmVsaWRzKChOb2RlICopIG5vbl9ncm91cF92YXJzLAogCQkJCQkJCQkgIGJt c19tYWtlX3NpbmdsZXRvbihyb290LT5ncm91cF9ydGluZGV4KSwKLQkJCQkJCQkJICBOVUxMKTsK KwkJCQkJCQkJICBOVUxMLCB0cnVlKTsKIAl9CiAJYWRkX25ld19jb2x1bW5zX3RvX3BhdGh0YXJn ZXQoaW5wdXRfdGFyZ2V0LCBub25fZ3JvdXBfdmFycyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYwppbmRleCAxNmQyMDBjZmI0Ni4uZTYzZDUyZjBkOGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTI1MjMsMTEgKzI1MjMsMTEgQEAgc2V0X3VwcGVyX3Jl ZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sIGludCBydG9mZnNldCkKIAkJ cGxhbi0+dGFyZ2V0bGlzdCA9IChMaXN0ICopCiAJCQlyZW1vdmVfbnVsbGluZ19yZWxpZHMoKE5v ZGUgKikgcGxhbi0+dGFyZ2V0bGlzdCwKIAkJCQkJCQkJICBibXNfbWFrZV9zaW5nbGV0b24ocm9v dC0+Z3JvdXBfcnRpbmRleCksCi0JCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCSAgTlVMTCwgdHJ1 ZSk7CiAJCXBsYW4tPnF1YWwgPSAoTGlzdCAqKQogCQkJcmVtb3ZlX251bGxpbmdfcmVsaWRzKChO b2RlICopIHBsYW4tPnF1YWwsCiAJCQkJCQkJCSAgYm1zX21ha2Vfc2luZ2xldG9uKHJvb3QtPmdy b3VwX3J0aW5kZXgpLAotCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkgIE5VTEwsIHRydWUpOwog CX0KIAogCW91dHB1dF90YXJnZXRsaXN0ID0gTklMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJl cC9wcmVwam9pbnRyZWUuYwppbmRleCBjODBiZmM4OGQ4Mi4uOWU5Mzc3NWQ5MWMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCkBAIC0yNzI1LDggKzI3MjUsOSBA QCBwdWxsdXBfcmVwbGFjZV92YXJzX2NhbGxiYWNrKFZhciAqdmFyLAogCSAqIHJlZmVyZW5jZXMg dG8gdGhlIHNhbWUgc3VicXVlcnkgb3V0cHV0IGFzIGJlaW5nIGVxdWFsKCkuICBTbyBpdCdzIHdv cnRoCiAJICogYSBiaXQgb2YgZXh0cmEgZWZmb3J0IHRvIGF2b2lkIGl0LgogCSAqCi0JICogVGhl IGNhY2hlZCBpdGVtcyBoYXZlIHBobGV2ZWxzdXAgPSAwIGFuZCBwaG51bGxpbmdyZWxzID0gTlVM TDsgd2UnbGwKLQkgKiBjb3B5IHRoZW0gYW5kIGFkanVzdCB0aG9zZSB2YWx1ZXMgZm9yIHRoaXMg cmVmZXJlbmNlIHNpdGUgYmVsb3cuCisJICogVGhlIGNhY2hlZCBpdGVtcyBoYXZlIHBobGV2ZWxz dXAgPSAwLCBwaG51bGxpbmdyZWxzID0gTlVMTCwgYW5kCisJICogcGhwcmVzZXJ2ZWQgPSBmYWxz ZS4gIFdlJ2xsIGNvcHkgdGhlbSBhbmQgYWRqdXN0IHBocHJlc2VydmVkIGhlcmU7IHRoZQorCSAq IG90aGVyIHZhbHVlcyBhcmUgYWRqdXN0ZWQgZm9yIHRoaXMgcmVmZXJlbmNlIHNpdGUgYmVsb3cu CiAJICovCiAJaWYgKG5lZWRfcGh2ICYmCiAJCXZhcmF0dG5vID49IEludmFsaWRBdHRyTnVtYmVy ICYmCkBAIC0yNzM1LDYgKzI3MzYsMTMgQEAgcHVsbHVwX3JlcGxhY2VfdmFyc19jYWxsYmFjayhW YXIgKnZhciwKIAl7CiAJCS8qIEp1c3QgY29weSB0aGUgZW50cnkgYW5kIGZhbGwgdGhyb3VnaCB0 byBhZGp1c3QgcGhsZXZlbHN1cCBldGMgKi8KIAkJbmV3bm9kZSA9IGNvcHlPYmplY3QocmNvbi0+ cnZfY2FjaGVbdmFyYXR0bm9dKTsKKworCQkvKgorCQkgKiBNYXJrIHRoZSBQbGFjZUhvbGRlclZh ciBhcyBwcmVzZXJ2ZWQgaWYgaXQncyB1c2VkIGZvcgorCQkgKiBpZGVudGlmaWNhdGlvbiBwdXJw b3Nlcy4KKwkJICovCisJCWlmIChyY29uLT53cmFwX29wdGlvbiAhPSBSRVBMQUNFX1dSQVBfTk9O RSkKKwkJCSgoUGxhY2VIb2xkZXJWYXIgKikgbmV3bm9kZSktPnBocHJlc2VydmVkID0gdHJ1ZTsK IAl9CiAJZWxzZQogCXsKQEAgLTI5MjAsNiArMjkyOCwxMyBAQCBwdWxsdXBfcmVwbGFjZV92YXJz X2NhbGxiYWNrKFZhciAqdmFyLAogCQkJCWlmICh2YXJhdHRubyA+PSBJbnZhbGlkQXR0ck51bWJl ciAmJgogCQkJCQl2YXJhdHRubyA8PSBsaXN0X2xlbmd0aChyY29uLT50YXJnZXRsaXN0KSkKIAkJ CQkJcmNvbi0+cnZfY2FjaGVbdmFyYXR0bm9dID0gY29weU9iamVjdChuZXdub2RlKTsKKworCQkJ CS8qCisJCQkJICogTWFyayB0aGUgUGxhY2VIb2xkZXJWYXIgYXMgcHJlc2VydmVkIGlmIGl0J3Mg dXNlZCBmb3IKKwkJCQkgKiBpZGVudGlmaWNhdGlvbiBwdXJwb3Nlcy4KKwkJCQkgKi8KKwkJCQlp ZiAocmNvbi0+d3JhcF9vcHRpb24gIT0gUkVQTEFDRV9XUkFQX05PTkUpCisJCQkJCSgoUGxhY2VI b2xkZXJWYXIgKikgbmV3bm9kZSktPnBocHJlc2VydmVkID0gdHJ1ZTsKIAkJCX0KIAkJfQogCX0K QEAgLTMxOTYsMjMgKzMyMTEsMjggQEAgcmVkdWNlX291dGVyX2pvaW5zKFBsYW5uZXJJbmZvICpy b290KQogCSAqIHJlbW92ZSByZWZlcmVuY2VzIHRvIHRob3NlIGpvaW5zIGFzIG51bGxpbmcgcmVs cy4gIFRoaXMgaXMgaGFuZGxlZCBhcwogCSAqIGFuIGFkZGl0aW9uYWwgcGFzcywgZm9yIHNpbXBs aWNpdHkgYW5kIGJlY2F1c2Ugd2UgY2FuIGhhbmRsZSBhbGwKIAkgKiBmdWxseS1yZWR1Y2VkIGpv aW5zIGluIGEgc2luZ2xlIHBhc3Mgb3ZlciB0aGUgcGFyc2UgdHJlZS4KKwkgKgorCSAqIFdlIGFs bG93IHN0cmlwcGluZyBuby1vcCBQbGFjZUhvbGRlclZhcnMgaGVyZSwgYXMgdGhpcyBpcyBhCisJ ICogdHJlZS1zaW1wbGlmaWNhdGlvbiBwYXNzIGFuZCB3ZSB3YW50IHRvIHJlbW92ZSB1c2VsZXNz IHdyYXBwZXJzLgogCSAqLwogCWlmICghYm1zX2lzX2VtcHR5KHN0YXRlMi5pbm5lcl9yZWR1Y2Vk KSkKIAl7CiAJCXJvb3QtPnBhcnNlID0gKFF1ZXJ5ICopCiAJCQlyZW1vdmVfbnVsbGluZ19yZWxp ZHMoKE5vZGUgKikgcm9vdC0+cGFyc2UsCiAJCQkJCQkJCSAgc3RhdGUyLmlubmVyX3JlZHVjZWQs Ci0JCQkJCQkJCSAgTlVMTCk7CisJCQkJCQkJCSAgTlVMTCwgdHJ1ZSk7CiAJCS8qIFRoZXJlIGNv dWxkIGJlIHJlZmVyZW5jZXMgaW4gdGhlIGFwcGVuZF9yZWxfbGlzdCwgdG9vICovCiAJCXJvb3Qt PmFwcGVuZF9yZWxfbGlzdCA9IChMaXN0ICopCiAJCQlyZW1vdmVfbnVsbGluZ19yZWxpZHMoKE5v ZGUgKikgcm9vdC0+YXBwZW5kX3JlbF9saXN0LAogCQkJCQkJCQkgIHN0YXRlMi5pbm5lcl9yZWR1 Y2VkLAotCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkgIE5VTEwsIHRydWUpOwogCX0KIAogCS8q CiAJICogUGFydGlhbGx5LXJlZHVjZWQgZnVsbCBqb2lucyBoYXZlIHRvIGJlIGRvbmUgb25lIGF0 IGEgdGltZSwgc2luY2UKIAkgKiB0aGV5J2xsIGVhY2ggbmVlZCBhIGRpZmZlcmVudCBzZXR0aW5n IG9mIGV4Y2VwdF9yZWxpZHMuCisJICoKKwkgKiBBcyBhYm92ZSwgd2UgYWxsb3cgc3RyaXBwaW5n IG5vLW9wIFBsYWNlSG9sZGVyVmFycy4KIAkgKi8KIAlmb3JlYWNoKGxjLCBzdGF0ZTIucGFydGlh bF9yZWR1Y2VkKQogCXsKQEAgLTMyMjIsMTEgKzMyNDIsMTMgQEAgcmVkdWNlX291dGVyX2pvaW5z KFBsYW5uZXJJbmZvICpyb290KQogCQlyb290LT5wYXJzZSA9IChRdWVyeSAqKQogCQkJcmVtb3Zl X251bGxpbmdfcmVsaWRzKChOb2RlICopIHJvb3QtPnBhcnNlLAogCQkJCQkJCQkgIGZ1bGxfam9p bl9yZWxpZHMsCi0JCQkJCQkJCSAgc3RhdGVwLT51bnJlZHVjZWRfc2lkZSk7CisJCQkJCQkJCSAg c3RhdGVwLT51bnJlZHVjZWRfc2lkZSwKKwkJCQkJCQkJICB0cnVlKTsKIAkJcm9vdC0+YXBwZW5k X3JlbF9saXN0ID0gKExpc3QgKikKIAkJCXJlbW92ZV9udWxsaW5nX3JlbGlkcygoTm9kZSAqKSBy b290LT5hcHBlbmRfcmVsX2xpc3QsCiAJCQkJCQkJCSAgZnVsbF9qb2luX3JlbGlkcywKLQkJCQkJ CQkJICBzdGF0ZXAtPnVucmVkdWNlZF9zaWRlKTsKKwkJCQkJCQkJICBzdGF0ZXAtPnVucmVkdWNl ZF9zaWRlLAorCQkJCQkJCQkgIHRydWUpOwogCX0KIH0KIApAQCAtMzY4MCwxOCArMzcwMiwyMSBA QCByZW1vdmVfdXNlbGVzc19yZXN1bHRfcnRlcyhQbGFubmVySW5mbyAqcm9vdCkKIAkgKiBrbm93 IHRoYXQgc3VjaCBhbiBvdXRlciBqb2luIHdvdWxkbid0IHJlYWxseSBoYXZlIG51bGxlZCBhbnl0 aGluZy4pICBXZQogCSAqIGRvbid0IGRvIHRoaXMgZHVyaW5nIHRoZSBtYWluIHJlY3Vyc2lvbiwg Zm9yIHNpbXBsaWNpdHkgYW5kIGJlY2F1c2Ugd2UKIAkgKiBjYW4gaGFuZGxlIGFsbCBzdWNoIGpv aW5zIGluIGEgc2luZ2xlIHBhc3Mgb3ZlciB0aGUgcGFyc2UgdHJlZS4KKwkgKgorCSAqIFdlIGFs bG93IHN0cmlwcGluZyBuby1vcCBQbGFjZUhvbGRlclZhcnMgaGVyZSwgYXMgdGhpcyBpcyBhCisJ ICogdHJlZS1zaW1wbGlmaWNhdGlvbiBwYXNzIGFuZCB3ZSB3YW50IHRvIHJlbW92ZSB1c2VsZXNz IHdyYXBwZXJzLgogCSAqLwogCWlmICghYm1zX2lzX2VtcHR5KGRyb3BwZWRfb3V0ZXJfam9pbnMp KQogCXsKIAkJcm9vdC0+cGFyc2UgPSAoUXVlcnkgKikKIAkJCXJlbW92ZV9udWxsaW5nX3JlbGlk cygoTm9kZSAqKSByb290LT5wYXJzZSwKIAkJCQkJCQkJICBkcm9wcGVkX291dGVyX2pvaW5zLAot CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkgIE5VTEwsIHRydWUpOwogCQkvKiBUaGVyZSBjb3Vs ZCBiZSByZWZlcmVuY2VzIGluIHRoZSBhcHBlbmRfcmVsX2xpc3QsIHRvbyAqLwogCQlyb290LT5h cHBlbmRfcmVsX2xpc3QgPSAoTGlzdCAqKQogCQkJcmVtb3ZlX251bGxpbmdfcmVsaWRzKChOb2Rl ICopIHJvb3QtPmFwcGVuZF9yZWxfbGlzdCwKIAkJCQkJCQkJICBkcm9wcGVkX291dGVyX2pvaW5z LAotCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkgIE5VTEwsIHRydWUpOwogCX0KIAogCS8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFjZWhvbGRlci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhY2Vob2xkZXIuYwppbmRleCBlMTcwNjM2M2M4OC4u NDI3OWZkODUxMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYWNl aG9sZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhY2Vob2xkZXIuYwpA QCAtNDQsMTEgKzQ0LDExIEBAIHN0YXRpYyBib29sIGNvbnRhaW5fcGxhY2Vob2xkZXJfcmVmZXJl bmNlc193YWxrZXIoTm9kZSAqbm9kZSwKICAqIHBocmVscyBpcyB0aGUgc3ludGFjdGljIGxvY2F0 aW9uIChhcyBhIHNldCBvZiByZWxpZHMpIHRvIGF0dHJpYnV0ZQogICogdG8gdGhlIGV4cHJlc3Np b24uCiAgKgotICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYWRqdXN0aW5nIHBobGV2 ZWxzdXAgYW5kIHBobnVsbGluZ3JlbHMKLSAqIGFzIG5lZWRlZC4gIEJlY2F1c2Ugd2UgZG8gbm90 IGtub3cgaGVyZSB3aGljaCBxdWVyeSBsZXZlbCB0aGUgUEhWCi0gKiB3aWxsIGJlIGFzc29jaWF0 ZWQgd2l0aCwgaXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIHRvdWNoZXMKLSAqIG9u bHkgcm9vdC0+Z2xvYjsgbWVzc2luZyB3aXRoIG90aGVyIHBhcnRzIG9mIFBsYW5uZXJJbmZvIHdv dWxkIGJlCi0gKiBsaWtlbHkgdG8gZG8gdGhlIHdyb25nIHRoaW5nLgorICogVGhlIGNhbGxlciBp cyByZXNwb25zaWJsZSBmb3IgYWRqdXN0aW5nIHBobGV2ZWxzdXAsIHBobnVsbGluZ3JlbHMsIGFu ZAorICogcGhwcmVzZXJ2ZWQgYXMgbmVlZGVkLiAgQmVjYXVzZSB3ZSBkbyBub3Qga25vdyBoZXJl IHdoaWNoIHF1ZXJ5IGxldmVsCisgKiB0aGUgUEhWIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoLCBp dCdzIGltcG9ydGFudCB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIHRvdWNoZXMgb25seSByb290LT5n bG9iOyBtZXNzaW5nIHdpdGggb3RoZXIgcGFydHMgb2YgUGxhbm5lckluZm8KKyAqIHdvdWxkIGJl IGxpa2VseSB0byBkbyB0aGUgd3JvbmcgdGhpbmcuCiAgKi8KIFBsYWNlSG9sZGVyVmFyICoKIG1h a2VfcGxhY2Vob2xkZXJfZXhwcihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwciwgUmVsaWRz IHBocmVscykKQEAgLTU4LDYgKzU4LDcgQEAgbWFrZV9wbGFjZWhvbGRlcl9leHByKFBsYW5uZXJJ bmZvICpyb290LCBFeHByICpleHByLCBSZWxpZHMgcGhyZWxzKQogCXBodi0+cGhleHByID0gZXhw cjsKIAlwaHYtPnBocmVscyA9IHBocmVsczsKIAlwaHYtPnBobnVsbGluZ3JlbHMgPSBOVUxMOwkv KiBjYWxsZXIgbWF5IGNoYW5nZSB0aGlzIGxhdGVyICovCisJcGh2LT5waHByZXNlcnZlZCA9IGZh bHNlOwkvKiBjYWxsZXIgbWF5IGNoYW5nZSB0aGlzIGxhdGVyICovCiAJcGh2LT5waGlkID0gKyso cm9vdC0+Z2xvYi0+bGFzdFBISWQpOwogCXBodi0+cGhsZXZlbHN1cCA9IDA7CQkvKiBjYWxsZXIg bWF5IGNoYW5nZSB0aGlzIGxhdGVyICovCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YwppbmRleCBmNTc2MzFlODc2Zi4uMmQ0NTc0Y2U5MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9yZWxub2RlLmMKQEAgLTIyNjQsMTEgKzIyNjQsMTEgQEAgaGF2ZV9wYXJ0a2V5X2VxdWlfam9p bihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJCWlmIChibXNfb3Zl cmxhcChyZWwxLT5yZWxpZHMsIHJvb3QtPm91dGVyX2pvaW5fcmVscykpCiAJCQkJZXhwcjEgPSAo RXhwciAqKSByZW1vdmVfbnVsbGluZ19yZWxpZHMoKE5vZGUgKikgZXhwcjEsCiAJCQkJCQkJCQkJ CQkJICAgcm9vdC0+b3V0ZXJfam9pbl9yZWxzLAotCQkJCQkJCQkJCQkJCSAgIE5VTEwpOworCQkJ CQkJCQkJCQkJCSAgIE5VTEwsIGZhbHNlKTsKIAkJCWlmIChibXNfb3ZlcmxhcChyZWwyLT5yZWxp ZHMsIHJvb3QtPm91dGVyX2pvaW5fcmVscykpCiAJCQkJZXhwcjIgPSAoRXhwciAqKSByZW1vdmVf bnVsbGluZ19yZWxpZHMoKE5vZGUgKikgZXhwcjIsCiAJCQkJCQkJCQkJCQkJICAgcm9vdC0+b3V0 ZXJfam9pbl9yZWxzLAotCQkJCQkJCQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCQkJCQkJCSAgIE5V TEwsIGZhbHNlKTsKIAkJfQogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC90bGlzdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdGxpc3QuYwppbmRl eCA3NTJlYTkyMjJmNi4uY2E2NmIwNzAwOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3RsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdGxpc3Qu YwpAQCAtMTE2MSw3ICsxMTYxLDcgQEAgc3BsaXRfcGF0aHRhcmdldF93YWxrZXIoTm9kZSAqbm9k ZSwgc3BsaXRfcGF0aHRhcmdldF9jb250ZXh0ICpjb250ZXh0KQogCQlzYW5pdGl6ZWRfbm9kZSA9 CiAJCQlyZW1vdmVfbnVsbGluZ19yZWxpZHMobm9kZSwKIAkJCQkJCQkJICBibXNfbWFrZV9zaW5n bGV0b24oY29udGV4dC0+cm9vdC0+Z3JvdXBfcnRpbmRleCksCi0JCQkJCQkJCSAgTlVMTCk7CisJ CQkJCQkJCSAgTlVMTCwgdHJ1ZSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5p cC5jCmluZGV4IDZmYTE3NDQxMmYyLi4xNmMyOTViMmMxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3Jp dGVNYW5pcC5jCkBAIC01Myw2ICs1Myw3IEBAIHR5cGVkZWYgc3RydWN0CiAJY29uc3QgQml0bWFw c2V0ICpyZW1vdmFibGVfcmVsaWRzOwogCWNvbnN0IEJpdG1hcHNldCAqZXhjZXB0X3JlbGlkczsK IAlpbnQJCQlzdWJsZXZlbHNfdXA7CisJYm9vbAkJcmVtb3ZlX25vb3BfcGh2czsKIH0gcmVtb3Zl X251bGxpbmdfcmVsaWRzX2NvbnRleHQ7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5fYWdnc19vZl9s ZXZlbF93YWxrZXIoTm9kZSAqbm9kZSwKQEAgLTY4LDYgKzY5LDcgQEAgc3RhdGljIE5vZGUgKmFk ZF9udWxsaW5nX3JlbGlkc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkJYWRkX251bGxp bmdfcmVsaWRzX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIE5vZGUgKnJlbW92ZV9udWxsaW5n X3JlbGlkc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkJICAgcmVtb3ZlX251bGxpbmdf cmVsaWRzX2NvbnRleHQgKmNvbnRleHQpOworc3RhdGljIGJvb2wgaXNfc2FmZV90b19zdHJpcF9w YXlsb2FkKE5vZGUgKm5vZGUpOwogCiAKIC8qCkBAIC0xMzIzLDE3ICsxMzI1LDIyIEBAIGFkZF9u dWxsaW5nX3JlbGlkc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAgKiBpbiBWYXIudmFybnVsbGluZ3Jl bHMgYW5kIFBsYWNlSG9sZGVyVmFyLnBobnVsbGluZ3JlbHMgZmllbGRzIHdpdGhpbgogICogdGhl IGdpdmVuIGV4cHJlc3Npb24sIGV4Y2VwdCBpbiBub2RlcyBiZWxvbmdpbmcgdG8gcmVscyBsaXN0 ZWQgaW4KICAqIGV4Y2VwdF9yZWxpZHMuCisgKgorICogSWYgcmVtb3ZlX25vb3BfcGh2cyBpcyB0 cnVlLCB3ZSBhbHNvIGNoZWNrIGlmIFBsYWNlSG9sZGVyVmFycyBiZWNvbWUKKyAqIG5vLW9wcyBh bmQgc3RyaXAgdGhlbSBpZiBzby4KICAqLwogTm9kZSAqCiByZW1vdmVfbnVsbGluZ19yZWxpZHMo Tm9kZSAqbm9kZSwKIAkJCQkJICBjb25zdCBCaXRtYXBzZXQgKnJlbW92YWJsZV9yZWxpZHMsCi0J CQkJCSAgY29uc3QgQml0bWFwc2V0ICpleGNlcHRfcmVsaWRzKQorCQkJCQkgIGNvbnN0IEJpdG1h cHNldCAqZXhjZXB0X3JlbGlkcywKKwkJCQkJICBib29sIHJlbW92ZV9ub29wX3BodnMpCiB7CiAJ cmVtb3ZlX251bGxpbmdfcmVsaWRzX2NvbnRleHQgY29udGV4dDsKIAogCWNvbnRleHQucmVtb3Zh YmxlX3JlbGlkcyA9IHJlbW92YWJsZV9yZWxpZHM7CiAJY29udGV4dC5leGNlcHRfcmVsaWRzID0g ZXhjZXB0X3JlbGlkczsKIAljb250ZXh0LnN1YmxldmVsc191cCA9IDA7CisJY29udGV4dC5yZW1v dmVfbm9vcF9waHZzID0gcmVtb3ZlX25vb3BfcGh2czsKIAlyZXR1cm4gcXVlcnlfb3JfZXhwcmVz c2lvbl90cmVlX211dGF0b3Iobm9kZSwKIAkJCQkJCQkJCQkJcmVtb3ZlX251bGxpbmdfcmVsaWRz X211dGF0b3IsCiAJCQkJCQkJCQkJCSZjb250ZXh0LApAQCAtMTM3MSwxMSArMTM3OCwxNSBAQCBy ZW1vdmVfbnVsbGluZ19yZWxpZHNfbXV0YXRvcihOb2RlICpub2RlLAogCQkJIWJtc19vdmVybGFw KHBodi0+cGhyZWxzLCBjb250ZXh0LT5leGNlcHRfcmVsaWRzKSkKIAkJewogCQkJLyoKLQkJCSAq IE5vdGU6IGl0IG1pZ2h0IHNlZW0gZGVzaXJhYmxlIHRvIHJlbW92ZSB0aGUgUEhWIGFsdG9nZXRo ZXIgaWYKLQkJCSAqIHBobnVsbGluZ3JlbHMgZ29lcyB0byBlbXB0eS4gIEN1cnJlbnRseSB3ZSBk YXJlIG5vdCBkbyB0aGF0Ci0JCQkgKiBiZWNhdXNlIHdlIHVzZSBQSFZzIGluIHNvbWUgY2FzZXMg dG8gZW5mb3JjZSBzZXBhcmF0ZSBpZGVudGl0eQotCQkJICogb2Ygc3ViZXhwcmVzc2lvbnM7IHNl ZSB3cmFwX29wdGlvbiB1c2FnZXMgaW4gcHJlcGpvaW50cmVlLmMuCisJCQkgKiBJZiBwaG51bGxp bmdyZWxzIGdvZXMgdG8gZW1wdHksIHRoZSBQSFYgaXMgbm8gbG9uZ2VyIG5lZWRlZCBmb3IKKwkJ CSAqIG91dGVyLWpvaW4gbnVsbGluZy4gIFdlIGNhbiByZW1vdmUgaXQgaWYgd2UgYXJlIGFsbG93 ZWQgdG8KKwkJCSAqIHJlbW92ZSBuby1vcCBQSFZzLCBwcm92aWRlZCB0aGF0IGl0IGlzIG5vdCBt YXJrZWQgYXMgcHJlc2VydmVkCisJCQkgKiAod2hpY2ggaW5kaWNhdGVzIHRoYXQgaXQgaXMgbmVl ZGVkIHRvIGVuZm9yY2Ugc2VwYXJhdGUgaWRlbnRpdHkKKwkJCSAqIG9mIHN1YmV4cHJlc3Npb25z KSBhbmQgdGhhdCB0aGUgY29udGFpbmVkIGV4cHJlc3Npb24gaXMgc2FmZSB0bworCQkJICogcHVs bCB1cCB3aXRob3V0IGJyZWFraW5nIHZhcmlvdXMgaW52YXJpYW50cyBlc3RhYmxpc2hlZCBieQor CQkJICogZXhwcmVzc2lvbiBwcmVwcm9jZXNzaW5nLgogCQkJICovCisKIAkJCS8qIENvcHkgdGhl IFBsYWNlSG9sZGVyVmFyIGFuZCBtdXRhdGUgd2hhdCdzIGJlbG93IC4uLiAqLwogCQkJcGh2ID0g KFBsYWNlSG9sZGVyVmFyICopCiAJCQkJZXhwcmVzc2lvbl90cmVlX211dGF0b3Iobm9kZSwKQEAg LTEzODgsNiArMTM5OSwxNCBAQCByZW1vdmVfbnVsbGluZ19yZWxpZHNfbXV0YXRvcihOb2RlICpu b2RlLAogCQkJcGh2LT5waHJlbHMgPSBibXNfZGlmZmVyZW5jZShwaHYtPnBocmVscywKIAkJCQkJ CQkJCQkgY29udGV4dC0+cmVtb3ZhYmxlX3JlbGlkcyk7CiAJCQlBc3NlcnQoIWJtc19pc19lbXB0 eShwaHYtPnBocmVscykpOworCisJCQkvKiBTdHJpcCB0aGUgUEhWIGlmIGl0J3Mgc2FmZTsgc2Vl IGNvbW1lbnQgYWJvdmUgKi8KKwkJCWlmIChjb250ZXh0LT5yZW1vdmVfbm9vcF9waHZzICYmCisJ CQkJIXBodi0+cGhwcmVzZXJ2ZWQgJiYKKwkJCQlibXNfaXNfZW1wdHkocGh2LT5waG51bGxpbmdy ZWxzKSAmJgorCQkJCWlzX3NhZmVfdG9fc3RyaXBfcGF5bG9hZCgoTm9kZSAqKSBwaHYtPnBoZXhw cikpCisJCQkJcmV0dXJuIChOb2RlICopIHBodi0+cGhleHByOworCiAJCQlyZXR1cm4gKE5vZGUg KikgcGh2OwogCQl9CiAJCS8qIE90aGVyd2lzZSBmYWxsIHRocm91Z2ggdG8gY29weSB0aGUgUGxh Y2VIb2xkZXJWYXIgbm9ybWFsbHkgKi8KQEAgLTE0MDgsNiArMTQyNyw0NiBAQCByZW1vdmVfbnVs bGluZ19yZWxpZHNfbXV0YXRvcihOb2RlICpub2RlLAogCXJldHVybiBleHByZXNzaW9uX3RyZWVf bXV0YXRvcihub2RlLCByZW1vdmVfbnVsbGluZ19yZWxpZHNfbXV0YXRvciwgY29udGV4dCk7CiB9 CiAKKy8qCisgKiBpc19zYWZlX3RvX3N0cmlwX3BheWxvYWQKKyAqCisgKiBDaGVjayB3aGV0aGVy IHRoZSBnaXZlbiBub2RlIGlzIHNhZmUgdG8gcHVsbCB1cCBpbnRvIHRoZSBzdXJyb3VuZGluZwor ICogZXhwcmVzc2lvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBpcyB1c2VkIHRvIHJlbW92ZSBh IFBsYWNlSG9sZGVyVmFyLiAgRXZlbiBpZiBhIFBsYWNlSG9sZGVyVmFyIGlzIG5vCisgKiBsb25n ZXIgbmVlZGVkLCB3ZSBjYW5ub3Qgc2ltcGx5IHJlbW92ZSBpdCBpZiBkb2luZyBzbyB3b3VsZCBl eHBvc2UgdGhlCisgKiBjb250YWluZWQgZXhwcmVzc2lvbiB0byBhIHBhcmVudCBub2RlIGluIGEg d2F5IHRoYXQgYnJlYWtzIHZhcmlvdXMKKyAqIGludmFyaWFudHMgZXN0YWJsaXNoZWQgYnkgZWFy bGllciBleHByZXNzaW9uIHByZXByb2Nlc3NpbmcuCisgKgorICogU2luY2Ugd2UgZG9uJ3Qga25v dyB3aGF0IHRoZSBwYXJlbnQgbm9kZSBpcywgd2UgbmVlZCB0byBiZSBjb25zZXJ2YXRpdmUuCisg Ki8KK3N0YXRpYyBib29sCitpc19zYWZlX3RvX3N0cmlwX3BheWxvYWQoTm9kZSAqbm9kZSkKK3sK KwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKG5vZGVUYWco bm9kZSkpCisJeworCQljYXNlIFRfVmFyOgorCQljYXNlIFRfUGFyYW06CisJCWNhc2UgVF9Db25z dDoKKwkJY2FzZSBUX1BsYWNlSG9sZGVyVmFyOgorCQkJLyogQXRvbWljIG5vZGVzIHNob3VsZCBi ZSBzYWZlIHRvIGV4cG9zZSAqLworCQkJcmV0dXJuIHRydWU7CisKKwkJY2FzZSBUX09wRXhwcjoK KwkJY2FzZSBUX0Z1bmNFeHByOgorCQljYXNlIFRfQ29hbGVzY2VFeHByOgorCQkJcmV0dXJuIHRy dWU7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKIAogLyoKICAqIHJlcGxhY2VfcnRlX3ZhcmlhYmxlcygpIGZpbmRzIGFsbCBWYXJzIGlu IGFuIGV4cHJlc3Npb24gdHJlZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Nl bGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCAyOWZlYzY1 NTU5My4uZmRmMzI4YzBmYWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0zNjU1LDcg KzM2NTUsNyBAQCBhZGRfdW5pcXVlX2dyb3VwX3ZhcihQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAq dmFyaW5mb3MsCiAJICogZXh0ZW5kZWQgc3RhdGlzdGljcyAoc2VlIGVzdGltYXRlX211bHRpdmFy aWF0ZV9uZGlzdGluY3QpLiAgU28gc3RyaXAKIAkgKiB0aGVtIG91dCBmaXJzdC4KIAkgKi8KLQl2 YXIgPSByZW1vdmVfbnVsbGluZ19yZWxpZHModmFyLCByb290LT5vdXRlcl9qb2luX3JlbHMsIE5V TEwpOworCXZhciA9IHJlbW92ZV9udWxsaW5nX3JlbGlkcyh2YXIsIHJvb3QtPm91dGVyX2pvaW5f cmVscywgTlVMTCwgZmFsc2UpOwogCiAJZm9yZWFjaChsYywgdmFyaW5mb3MpCiAJewpAQCAtNDIz Niw3ICs0MjM2LDggQEAgZXN0aW1hdGVfbXVsdGl2YXJpYXRlX2J1Y2tldHNpemUoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVyLAogCQkJCSAqIENsZWFyIG51bGxpbmdyZWxzIHRv IGNvcnJlY3RseSBtYXRjaCBoYXNoIGtleXMuICBTZWUKIAkJCQkgKiBhZGRfdW5pcXVlX2dyb3Vw X3ZhcigpJ3MgY29tbWVudCBmb3IgZGV0YWlscy4KIAkJCQkgKi8KLQkJCQlleHByID0gcmVtb3Zl X251bGxpbmdfcmVsaWRzKGV4cHIsIHJvb3QtPm91dGVyX2pvaW5fcmVscywgTlVMTCk7CisJCQkJ ZXhwciA9IHJlbW92ZV9udWxsaW5nX3JlbGlkcyhleHByLCByb290LT5vdXRlcl9qb2luX3JlbHMs CisJCQkJCQkJCQkJCSBOVUxMLCBmYWxzZSk7CiAKIAkJCQkvKgogCQkJCSAqIERldGVjdCBhbmQg ZXhjbHVkZSBleGFjdCBkdXBsaWNhdGVzIGZyb20gdGhlIGxpc3Qgb2YgaGFzaApAQCAtNTc2Miw3 ICs1NzYzLDggQEAgZXhhbWluZV92YXJpYWJsZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9k ZSwgaW50IHZhclJlbGlkLAogCQkgKiBleHRlbmRlZCBzdGF0aXN0aWNzLiAgU28gc3RyaXAgdGhl bSBvdXQgZmlyc3QuCiAJCSAqLwogCQlpZiAoYm1zX292ZXJsYXAodmFybm9zLCByb290LT5vdXRl cl9qb2luX3JlbHMpKQotCQkJbm9kZSA9IHJlbW92ZV9udWxsaW5nX3JlbGlkcyhub2RlLCByb290 LT5vdXRlcl9qb2luX3JlbHMsIE5VTEwpOworCQkJbm9kZSA9IHJlbW92ZV9udWxsaW5nX3JlbGlk cyhub2RlLCByb290LT5vdXRlcl9qb2luX3JlbHMsCisJCQkJCQkJCQkJIE5VTEwsIGZhbHNlKTsK IAogCQlmb3JlYWNoKGlsaXN0LCBvbmVyZWwtPmluZGV4bGlzdCkKIAkJewpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaAppbmRleCA0NDk4ODViOTMxOS4uYzQ2NzFlZjM2MmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CkBAIC0yOTg1LDYgKzI5ODUsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTY2FuU2VsQ2FjaGUK ICAqIGxldmVsIG9mIGEgUGxhY2VIb2xkZXJWYXIgbWlnaHQgYmUgYSBqb2luIHJhdGhlciB0aGFu IGEgYmFzZSByZWxhdGlvbi4KICAqIExpa2V3aXNlLCBwaG51bGxpbmdyZWxzIGNvcnJlc3BvbmRz IHRvIHZhcm51bGxpbmdyZWxzLgogICoKKyAqIHBocHJlc2VydmVkIGluZGljYXRlcyB3aGV0aGVy IHRoZSBQbGFjZUhvbGRlclZhciBuZWVkcyB0byBiZSBwcmVzZXJ2ZWQKKyAqIHdoZW4gaXRzIHBo bnVsbGluZ3JlbHMgYmVjb21lcyBlbXB0eS4gIFRoaXMgaXMgc2V0IHRydWUgaW4gY2FzZXMgd2hl cmUKKyAqIHRoZSBQbGFjZUhvbGRlclZhciBpcyB1c2VkIHRvIGVuZm9yY2UgdGhlIHNlcGFyYXRl IGlkZW50aXR5IG9mIHRoZQorICogY29udGFpbmVkIGV4cHJlc3Npb24uCisgKgogICogQWx0aG91 Z2ggdGhlIHBsYW5uZXIgdHJlYXRzIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBub2RlIHR5cGUsIGl0 IGlzIG5vdAogICogcmVjb2duaXplZCBieSB0aGUgcGFyc2VyIG9yIGV4ZWN1dG9yLCBzbyB3ZSBk ZWNsYXJlIGl0IGhlcmUgcmF0aGVyIHRoYW4KICAqIGluIHByaW1ub2Rlcy5oLgpAQCAtMzAxOCw2 ICszMDIzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhY2VIb2xkZXJWYXIKIAkvKiBSVCBpbmRleGVz IG9mIG91dGVyIGpvaW5zIHRoYXQgY2FuIG51bGwgUEhWJ3MgdmFsdWUgKi8KIAlSZWxpZHMJCXBo bnVsbGluZ3JlbHM7CiAKKwkvKiB0cnVlIGlmIFBIViBlbmZvcmNlcyBzZXBhcmF0ZSBpZGVudGl0 eSAqLworCWJvb2wJCXBocHJlc2VydmVkIHBnX25vZGVfYXR0cihlcXVhbF9pZ25vcmUpOworCiAJ LyogSUQgZm9yIFBIViAodW5pcXVlIHdpdGhpbiBwbGFubmVyIHJ1bikgKi8KIAlJbmRleAkJcGhp ZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaCBiL3Ny Yy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKaW5kZXggZjgyMTZjMjJmYjcuLjA1MjQ1 ZmFhNDljIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCisr KyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKQEAgLTg5LDcgKzg5LDggQEAg ZXh0ZXJuIE5vZGUgKmFkZF9udWxsaW5nX3JlbGlkcyhOb2RlICpub2RlLAogCQkJCQkJCQljb25z dCBCaXRtYXBzZXQgKmFkZGVkX3JlbGlkcyk7CiBleHRlcm4gTm9kZSAqcmVtb3ZlX251bGxpbmdf cmVsaWRzKE5vZGUgKm5vZGUsCiAJCQkJCQkJCSAgIGNvbnN0IEJpdG1hcHNldCAqcmVtb3ZhYmxl X3JlbGlkcywKLQkJCQkJCQkJICAgY29uc3QgQml0bWFwc2V0ICpleGNlcHRfcmVsaWRzKTsKKwkJ CQkJCQkJICAgY29uc3QgQml0bWFwc2V0ICpleGNlcHRfcmVsaWRzLAorCQkJCQkJCQkgICBib29s IHJlbW92ZV9ub29wX3BodnMpOwogCiBleHRlcm4gTm9kZSAqcmVwbGFjZV9ydGVfdmFyaWFibGVz KE5vZGUgKm5vZGUsCiAJCQkJCQkJCSAgIGludCB0YXJnZXRfdmFybm8sIGludCBzdWJsZXZlbHNf dXAsCi0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --00000000000018ac760648786567--