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 1tjHQp-008671-0z for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Feb 2025 12:38:03 +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 1tjHQn-001Evo-PA for pgsql-hackers@arkaria.postgresql.org; Sat, 15 Feb 2025 12:38:01 +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.94.2) (envelope-from ) id 1tjHQn-001Evg-Aj for pgsql-hackers@lists.postgresql.org; Sat, 15 Feb 2025 12:38:01 +0000 Received: from mail-io1-xd2d.google.com ([2607:f8b0:4864:20::d2d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tjHQk-000yzF-39 for pgsql-hackers@postgresql.org; Sat, 15 Feb 2025 12:38:00 +0000 Received: by mail-io1-xd2d.google.com with SMTP id ca18e2360f4ac-851c4f1fb18so105317039f.2 for ; Sat, 15 Feb 2025 04:37:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739623077; x=1740227877; 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=+5qjd2/Yi2k1Oy5iHjJv6TjOLJgN2y0e8WupVht/qjE=; b=Wl8XLTGOoN2t4sQ6uLDtnON/TG/8NIJ8OzhboPXyzmcZr/3CoTvJ/hqhqC39fa2OLi /IxxP8f23rNkbXvuDldCBtySqFDbSKse+1UZIo3UVJolfC8uEuHRAaC+ZZJEGh4fVxsl M0o40xngQXgvuKxp+MG/7AWUvqgC/ooSR4IyFnwNe8Sd+4dkk0KdjXAf4U/6kJXeBI9A 6/FzdhL+tr+kBuWxxugv2yKk5oqfNG/HZQxQlR8m9jWbiHKELVSt8J/TnNu9oKgMXJau NwfMi+PDC381ZWszQuQY/dg3XnntbkpRP5pOWOaLXQI9ldDfnJ/gssPak2h8fKRMpFY/ PaXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739623077; x=1740227877; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+5qjd2/Yi2k1Oy5iHjJv6TjOLJgN2y0e8WupVht/qjE=; b=WQXBc7xbtx191lTHmroTBh18VH7ZkWzKPYQ+4ifxzCHpXpDByrfTSsH3fdtL0qtOSX n82MM8karuCbP9zGhKveo0XDVAWLtG54VpjFVYGxDd/ZDBKP0YRTy/qEAT4zAwafF65O 0xHjgT5eI4AisWx+NNWOR/gs7/kLhHS61VT7bbj2s5T/BeTvyKnGjLqaFjzvWIMYmj/1 WO1lvYx62LyKCrtq79f1NHBp52zA0rEYBxpVJt6dszsE6ySGsT52U38f/iFg/8eB8hvr lyPIvtxHm8npFMcYniBCCdJMNh5YlrP1VIeNHZhkZQowU0UkonRKLpzUbZUwdON/ofbR TxAg== X-Forwarded-Encrypted: i=1; AJvYcCWB60yBodjbonT1xDZpUCmEBtHH82UQ15luU2U96Vs5C86iVu6D6NVuC+7jiVP6IPF7QvQKq2GL/7x3xjrG@postgresql.org X-Gm-Message-State: AOJu0YypF0OT0J7eNHD5HS9CBWFs7qxkDrVNWPWdr7YpVkVjpNKYfoCT mwAGsyTHtV3TIK/jHk1yCjpRaaxJO1Z/lXWYMxEmIr1Wa6S10hynlNnRS4aIjLYByAB974ks2vo 2CbnQh/i5oEkAj91ELljiyimEHUU= X-Gm-Gg: ASbGncvRf0D6vyRCqIEd231Z4U4YgodDrHUHplQHQHqzkccm1TCdc9XTnRqm5b1kcZU /0Lfoq9Ss56slCIQ17tLTL5sHIM37LvTkv3tGEvVH+ooyrG/pWrDXA8alMkKPWrVQ1wXGFeiI5k uMt5sg1tZdjblkHi3LznsW+UlNgfwRiW8= X-Google-Smtp-Source: AGHT+IGlznJApuupwWgE20OoWP813xac2XGQERBTw+d9jBuetOmkOTJVUsFu8OCInMgb36c9Kk8hvQ9vFPRH9A0PKaI= X-Received: by 2002:a05:6e02:b2a:b0:3d1:9cee:3d24 with SMTP id e9e14a558f8ab-3d28090697dmr19868355ab.11.1739623077189; Sat, 15 Feb 2025 04:37:57 -0800 (PST) MIME-Version: 1.0 References: <831d7f99-0618-48e5-8557-f3d57137f339@eisentraut.org> <64c2468c-3b69-44d7-863a-165931a70c1d@eisentraut.org> <8be3512a-a23f-4088-a9ec-bf68650a2997@eisentraut.org> <75eb1a6f-d59f-42e6-8a78-124ee808cda7@gmail.com> <8d6a3d4c-f630-4cf9-aced-6cead95776e5@Spark> <12d5cce9-917f-4a99-86d3-715bb3b363bb@Spark> In-Reply-To: From: Dean Rasheed Date: Sat, 15 Feb 2025 12:37:45 +0000 X-Gm-Features: AWEUYZk9Obdmd_hEnPKkVVicmbvXtcJmcFFXG5ovbiIZ8drc1h3X-1HjKf_7pcA Message-ID: Subject: Re: Virtual generated columns To: Peter Eisentraut Cc: jian he , Richard Guo , Zhang Mingli , Alexander Lakhin , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000008f3eec062e2d8f1c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008f3eec062e2d8f1c Content-Type: text/plain; charset="UTF-8" On Fri, 14 Feb 2025 at 10:59, Peter Eisentraut wrote: > > On 13.02.25 14:06, jian he wrote: > > I didn't solve the out join semantic issue. > > i am wondering, can we do the virtual generated column expansion in > > the rewrite stage as is, > > and wrap the expressions in PHVs if the virtual generated > > columns come from the nullable side of an outer join. > > PlaceHolderVar looks like a fitting mechanism for this. But it's so far > a planner node, so it might take some additional consideration if we > want to expand where it's used. It seems pretty baked into how PHVs work that they should only be added by the planner, so I think that I agree with Richard -- virtual generated columns probably have to be expanded in the planner rather than the rewriter. > Maybe a short-term fix would be to error out if we find ourselves about > to expand a Var with varnullingrels != NULL. That would mean you > couldn't use a virtual generated column on the nullable output side of > an outer join, which is annoying but not fatal, and we could fix it > incrementally later. I think that would be rather a sad limitation to have. It would be nice to have this fully working for the next release. Attached is a rough patch that moves the expansion of virtual generated columns to the planner. It needs a lot more testing (and some regression tests), but it does seem to fix all the issues mentioned in this thread. Regards, Dean --0000000000008f3eec062e2d8f1c Content-Type: text/x-patch; charset="US-ASCII"; name="expand-virt-gen-cols-in-planner.patch" Content-Disposition: attachment; filename="expand-virt-gen-cols-in-planner.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m766bvyy0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA3YjFhOGEwLi4wNDFjMTUyCi0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTcxMiw2 ICs3MTIsMTMgQEAgc3VicXVlcnlfcGxhbm5lcihQbGFubmVyR2xvYmFsICpnbG9iLCBRdQogCXRy YW5zZm9ybV9NRVJHRV90b19qb2luKHBhcnNlKTsKIAogCS8qCisJICogRXhwYW5kIGFueSB2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW5zLiAgTm90ZSB0aGF0IHRoaXMgc3RlcCBkb2VzIG5vdAorCSAq IGRlc2NlbmQgaW50byBzdWJxdWVyaWVzOyBpZiB3ZSBwdWxsIHVwIGFueSBzdWJxdWVyaWVzIGJl bG93LCB0aGVpcgorCSAqIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgYXJlIGV4cGFuZGVkIGp1 c3QgYmVmb3JlIHB1bGxpbmcgdGhlbSB1cC4KKwkgKi8KKwlwYXJzZSA9IHJvb3QtPnBhcnNlID0g ZXhwYW5kX3ZpcnR1YWxfZ2VuZXJhdGVkX2NvbHVtbnMocm9vdCwgcGFyc2UpOworCisJLyoKIAkg KiBJZiB0aGUgRlJPTSBjbGF1c2UgaXMgZW1wdHksIHJlcGxhY2UgaXQgd2l0aCBhIGR1bW15IFJU RV9SRVNVTFQgUlRFLCBzbwogCSAqIHRoYXQgd2UgZG9uJ3QgbmVlZCBzbyBtYW55IHNwZWNpYWwg Y2FzZXMgdG8gZGVhbCB3aXRoIHRoYXQgc2l0dWF0aW9uLgogCSAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDky MjVlLi45NWVmM2Y0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJl ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCkBAIC00 LDYgKzQsOCBAQAogICoJICBQbGFubmVyIHByZXByb2Nlc3NpbmcgZm9yIHN1YnF1ZXJpZXMgYW5k IGpvaW4gdHJlZSBtYW5pcHVsYXRpb24uCiAgKgogICogTk9URTogdGhlIGludGVuZGVkIHNlcXVl bmNlIGZvciBpbnZva2luZyB0aGVzZSBvcGVyYXRpb25zIGlzCisgKgkJdHJhbnNmb3JtX01FUkdF X3RvX2pvaW4KKyAqCQlleHBhbmRfdmlydHVhbF9nZW5lcmF0ZWRfY29sdW1ucwogICoJCXJlcGxh Y2VfZW1wdHlfam9pbnRyZWUKICAqCQlwdWxsX3VwX3N1YmxpbmtzCiAgKgkJcHJlcHJvY2Vzc19m dW5jdGlvbl9ydGVzCkBAIC0yNSw2ICsyNyw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMzks OCArNDIsMjUgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5j bHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0 ZU1hbmlwLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisKKwordHlwZWRlZiBzdHJ1Y3QgZXhw YW5kX2dlbmVyYXRlZF90YWJsZV9jb250ZXh0Cit7CisJaW50CQkJbnVtX2F0dHJzOwkJLyogbnVt YmVyIG9mIHRhYmxlIGNvbHVtbnMgKi8KKwlMaXN0CSAgICp0bGlzdDsJCQkvKiB2aXJ0dWFsIGdl bmVyYXRlZCBjb2x1bW4gcmVwbGFjZW1lbnRzICovCisJTm9kZQkgICoqZWdfY2FjaGU7CQkvKiBj YWNoZSBmb3IgcmVzdWx0cyB3aXRoIFBIVnMgKi8KK30gZXhwYW5kX2dlbmVyYXRlZF90YWJsZV9j b250ZXh0OwogCit0eXBlZGVmIHN0cnVjdCBleHBhbmRfZ2VuZXJhdGVkX2NvbnRleHQKK3sKKwlQ bGFubmVySW5mbyAqcm9vdDsKKwlRdWVyeQkgICAqcGFyc2U7CQkJLyogcXVlcnkgYmVpbmcgcmV3 cml0dGVuICovCisJaW50CQkJc3VibGV2ZWxzX3VwOwkvKiAoY3VycmVudCkgbmVzdGluZyBkZXB0 aCAqLworCWV4cGFuZF9nZW5lcmF0ZWRfdGFibGVfY29udGV4dCAqdGJsX2NvbnRleHRzOwkvKiBw ZXIgUlRFIG9mIHF1ZXJ5ICovCit9IGV4cGFuZF9nZW5lcmF0ZWRfY29udGV4dDsKIAogdHlwZWRl ZiBzdHJ1Y3QgbnVsbGluZ3JlbF9pbmZvCiB7CkBAIC04Nyw2ICsxMDcsOCBAQCB0eXBlZGVmIHN0 cnVjdCByZWR1Y2Vfb3V0ZXJfam9pbnNfcGFydGlhCiAJUmVsaWRzCQl1bnJlZHVjZWRfc2lkZTsg LyogcmVsaWRzIGluIGl0cyBzdGlsbC1udWxsYWJsZSBzaWRlICovCiB9IHJlZHVjZV9vdXRlcl9q b2luc19wYXJ0aWFsX3N0YXRlOwogCitzdGF0aWMgTm9kZSAqZXhwYW5kX3ZpcnR1YWxfZ2VuZXJh dGVkX2NvbHVtbnNfY2FsbGJhY2soTm9kZSAqbm9kZSwKKwkJCQkJCQkJCQkJCQkgICBleHBhbmRf Z2VuZXJhdGVkX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIE5vZGUgKnB1bGxfdXBfc3VibGlu a3Nfam9pbnRyZWVfcmVjdXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqanRub2RlLAogCQkJ CQkJCQkJCQkgICBSZWxpZHMgKnJlbGlkcyk7CiBzdGF0aWMgTm9kZSAqcHVsbF91cF9zdWJsaW5r c19xdWFsX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCkBAIC0zNzgsNiAr NDAwLDIyNyBAQCB0cmFuc2Zvcm1fTUVSR0VfdG9fam9pbihRdWVyeSAqcGFyc2UpCiB9CiAKIC8q CisgKiBFeHBhbmQgYWxsIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiByZWZlcmVuY2VzIGluIGEg cXVlcnkuCisgKgorICogTm90ZSB0aGF0IHRoaXMgb25seSBwcm9jZXNzZXMgdmlydHVhbCBnZW5l cmF0ZWQgY29sdW1ucyBpbiByZWxhdGlvbiBSVEVzCisgKiBpbiB0aGUgcXVlcnkncyBydGFibGU7 IGl0IGRvZXMgbm90IGRlc2NlbmQgaW50byBzdWJxdWVyaWVzLgorICovCitRdWVyeSAqCitleHBh bmRfdmlydHVhbF9nZW5lcmF0ZWRfY29sdW1ucyhQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKnBh cnNlKQoreworCWV4cGFuZF9nZW5lcmF0ZWRfY29udGV4dCBlZ2NvbnRleHQ7CisJaW50CQkJcnRf aW5kZXg7CisKKwllZ2NvbnRleHQucm9vdCA9IHJvb3Q7CisJZWdjb250ZXh0LnBhcnNlID0gcGFy c2U7CisJZWdjb250ZXh0LnN1YmxldmVsc191cCA9IDA7CisJZWdjb250ZXh0LnRibF9jb250ZXh0 cyA9IE5VTEw7CisKKwkvKiBTY2FuIHRoZSByYW5nZSB0YWJsZSBmb3IgcmVsYXRpb25zIHdpdGgg dmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyAqLworCXJ0X2luZGV4ID0gMDsKKwlmb3JlYWNoX25v ZGUoUmFuZ2VUYmxFbnRyeSwgcnRlLCBwYXJzZS0+cnRhYmxlKQorCXsKKwkJUmVsYXRpb24JcmVs OworCQlpbnQJCQludW1fYXR0cnM7CisJCUxpc3QJICAgKnRsaXN0OworCisJCSsrcnRfaW5kZXg7 CisKKwkJLyogT25seSBub3JtYWwgcmVsYXRpb25zIGNhbiBoYXZlIHZpcnR1YWwgZ2VuZXJhdGVk IGNvbHVtbnMgKi8KKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250 aW51ZTsKKworCQkvKgorCQkgKiBMb29rIGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLiAg V2UgYXNzdW1lIHRoYXQgcHJldmlvdXMgY29kZQorCQkgKiBhbHJlYWR5IGFjcXVpcmVkIGEgbG9j ayBvbiB0aGUgdGFibGUsIHNvIHdlIG5lZWQgbm8gbG9jayBoZXJlLgorCQkgKi8KKwkJcmVsID0g dGFibGVfb3BlbihydGUtPnJlbGlkLCBOb0xvY2spOworCQludW1fYXR0cnMgPSBSZWxhdGlvbkdl dERlc2NyKHJlbCktPm5hdHRzOworCQl0bGlzdCA9IGdldF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1 bW5zKHJlbCwgcnRfaW5kZXgpOworCQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CisKKwkJaWYg KHRsaXN0KQorCQl7CisJCQlleHBhbmRfZ2VuZXJhdGVkX3RhYmxlX2NvbnRleHQgKnRjdHg7CisK KwkJCS8qCisJCQkgKiBSZWNvcmQgZGV0YWlscyBvZiB0aGlzIHRhYmxlJ3MgdmlydHVhbCBnZW5l cmF0ZWQgY29sdW1ucy4gVGhlCisJCQkgKiBmaXJzdCB0aW1lIHRocm91Z2gsIGJ1aWxkIHRoZSBw ZXItdGFibGUgY29udGV4dCBhcnJheS4KKwkJCSAqLworCQkJaWYgKGVnY29udGV4dC50YmxfY29u dGV4dHMgPT0gTlVMTCkKKwkJCQllZ2NvbnRleHQudGJsX2NvbnRleHRzID0gcGFsbG9jMChsaXN0 X2xlbmd0aChwYXJzZS0+cnRhYmxlKSAqCisJCQkJCQkJCQkJCQkgc2l6ZW9mKGV4cGFuZF9nZW5l cmF0ZWRfdGFibGVfY29udGV4dCkpOworCisJCQl0Y3R4ID0gJmVnY29udGV4dC50YmxfY29udGV4 dHNbcnRfaW5kZXggLSAxXTsKKwkJCXRjdHgtPm51bV9hdHRycyA9IG51bV9hdHRyczsKKwkJCXRj dHgtPnRsaXN0ID0gdGxpc3Q7CisJCQkvKiBQSFYgY2FjaGUgZm9yIGVhY2ggYXR0ciwgcGx1cyB3 aG9sZXJvdyAoYXR0cm51bSA9IDApICovCisJCQl0Y3R4LT5lZ19jYWNoZSA9IHBhbGxvYzAoKG51 bV9hdHRycyArIDEpICogc2l6ZW9mKE5vZGUgKikpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBh bnkgcmVsYXRpb25zIGhhZCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLCBwZXJmb3JtIHRoZSBu ZWNlc3NhcnkKKwkgKiByZXBsYWNlbWVudHMuCisJICovCisJaWYgKGVnY29udGV4dC50YmxfY29u dGV4dHMgIT0gTlVMTCkKKwkJcGFyc2UgPSBxdWVyeV90cmVlX211dGF0b3IocGFyc2UsCisJCQkJ CQkJCSAgIGV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zX2NhbGxiYWNrLAorCQkJCQkJ CQkgICAmZWdjb250ZXh0LAorCQkJCQkJCQkgICAwKTsKKworCXJldHVybiBwYXJzZTsKK30KKwor c3RhdGljIE5vZGUgKgorZXhwYW5kX3ZpcnR1YWxfZ2VuZXJhdGVkX2NvbHVtbnNfY2FsbGJhY2so Tm9kZSAqbm9kZSwKKwkJCQkJCQkJCQkgIGV4cGFuZF9nZW5lcmF0ZWRfY29udGV4dCAqY29udGV4 dCkKK3sKKwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwllbHNlIGlmIChJc0Eo bm9kZSwgVmFyKSkKKwl7CisJCVF1ZXJ5CSAgICpwYXJzZSA9IGNvbnRleHQtPnBhcnNlOworCQlW YXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJLyoKKwkJICogSWYgdGhlIFZhciBpcyBm cm9tIGEgcmVsYXRpb24gd2l0aCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLCB0aGVuCisJCSAq IHJlcGxhY2UgaXQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZXhwcmVzc2lvbiwgaWYgbmVjZXNzYXJ5 LgorCQkgKi8KKwkJaWYgKHZhci0+dmFybGV2ZWxzdXAgPT0gY29udGV4dC0+c3VibGV2ZWxzX3Vw ICYmCisJCQl2YXItPnZhcm5vID4gMCAmJgorCQkJdmFyLT52YXJubyA8PSBsaXN0X2xlbmd0aChw YXJzZS0+cnRhYmxlKSAmJgorCQkJY29udGV4dC0+dGJsX2NvbnRleHRzW3Zhci0+dmFybm8gLSAx XS50bGlzdCkKKwkJeworCQkJZXhwYW5kX2dlbmVyYXRlZF90YWJsZV9jb250ZXh0ICp0Y3R4Owor CQkJTm9kZQkgICAqbmV3bm9kZTsKKworCQkJdGN0eCA9ICZjb250ZXh0LT50YmxfY29udGV4dHNb dmFyLT52YXJubyAtIDFdOworCisJCQkvKgorCQkJICogSWYgdGhlIFZhciBoYXMgbm9uZW1wdHkg dmFybnVsbGluZ3JlbHMsIHRoZSByZXBsYWNlbWVudAorCQkJICogZXhwcmVzc2lvbiAoaWYgYW55 KSBpcyB3cmFwcGVkIGluIGEgUGxhY2VIb2xkZXJWYXIsIHVubGVzcyBpdAorCQkJICogaXMgc2lt cGx5IGFub3RoZXIgVmFyLiAgVGhlc2UgYXJlIGNhY2hlZCB0byBhdm9pZCBnZW5lcmF0aW5nCisJ CQkgKiBpZGVudGljYWwgUEhWcyB3aXRoIGRpZmZlcmVudCBJRHMsIHdoaWNoIHdvdWxkIGxlYWQg dG8KKwkJCSAqIGR1cGxpY2F0ZSBldmFsdWF0aW9ucyBhdCBydW50aW1lLiAgU2VlIHNpbWlsYXIg Y29kZSBpbgorCQkJICogcHVsbHVwX3JlcGxhY2VfdmFyc19jYWxsYmFjaygpLgorCQkJICoKKwkJ CSAqIFRoZSBjYWNoZWQgaXRlbXMgaGF2ZSBwaGxldmVsc3VwID0gMCBhbmQgcGhudWxsaW5ncmVs cyA9IE5VTEwsCisJCQkgKiBzbyB3ZSBuZWVkIHRvIGNvcHkgYW5kIGFkanVzdCB0aGVtLgorCQkJ ICovCisJCQlpZiAodmFyLT52YXJudWxsaW5ncmVscyAhPSBOVUxMICYmCisJCQkJdmFyLT52YXJh dHRubyA+PSBJbnZhbGlkQXR0ck51bWJlciAmJgorCQkJCXZhci0+dmFyYXR0bm8gPD0gdGN0eC0+ bnVtX2F0dHJzICYmCisJCQkJdGN0eC0+ZWdfY2FjaGVbdmFyLT52YXJhdHRub10gIT0gTlVMTCkK KwkJCXsKKwkJCQkvKiBDb3B5IHRoZSBjYWNoZWQgaXRlbSBhbmQgYWRqdXN0IGl0cyB2YXJsZXZl bHN1cCAqLworCQkJCW5ld25vZGUgPSBjb3B5T2JqZWN0KHRjdHgtPmVnX2NhY2hlW3Zhci0+dmFy YXR0bm9dKTsKKwkJCQlpZiAodmFyLT52YXJsZXZlbHN1cCA+IDApCisJCQkJCUluY3JlbWVudFZh clN1YmxldmVsc1VwKG5ld25vZGUsIHZhci0+dmFybGV2ZWxzdXAsIDApOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCS8qCisJCQkJICogR2VuZXJhdGUgdGhlIHJlcGxhY2VtZW50IGV4cHJlc3Np b24uIFRoaXMgdGFrZXMgY2FyZSBvZgorCQkJCSAqIGV4cGFuZGluZyB3aG9sZXJvdyByZWZlcmVu Y2VzLCBhcyB3ZWxsIGFzIGFkanVzdGluZworCQkJCSAqIHZhcmxldmVsc3VwIGFuZCB2YXJyZXR1 cm5pbmd0eXBlLgorCQkJCSAqLworCQkJCW5ld25vZGUgPSBSZXBsYWNlVmFyRnJvbVRhcmdldExp c3QodmFyLAorCQkJCQkJCQkJCQkJICAgcnRfZmV0Y2godmFyLT52YXJubywKKwkJCQkJCQkJCQkJ CQkJCXBhcnNlLT5ydGFibGUpLAorCQkJCQkJCQkJCQkJICAgdGN0eC0+dGxpc3QsCisJCQkJCQkJ CQkJCQkgICBwYXJzZS0+cmVzdWx0UmVsYXRpb24sCisJCQkJCQkJCQkJCQkgICBSRVBMQUNFVkFS U19DSEFOR0VfVkFSTk8sCisJCQkJCQkJCQkJCQkgICB2YXItPnZhcm5vKTsKKworCQkJCS8qIElu c2VydCBQbGFjZUhvbGRlclZhciBpZiBuZWVkZWQgKi8KKwkJCQlpZiAodmFyLT52YXJudWxsaW5n cmVscyAhPSBOVUxMICYmICFJc0EobmV3bm9kZSwgVmFyKSkKKwkJCQl7CisJCQkJCS8qIFhYWDog Q29uc2lkZXIgbm90IHdyYXBwaW5nIGV2ZXJ5IGV4cHJlc3Npb24gKi8KKwkJCQkJbmV3bm9kZSA9 IChOb2RlICopCisJCQkJCQltYWtlX3BsYWNlaG9sZGVyX2V4cHIoY29udGV4dC0+cm9vdCwKKwkJ CQkJCQkJCQkJICAoRXhwciAqKSBuZXdub2RlLAorCQkJCQkJCQkJCQkgIGJtc19tYWtlX3Npbmds ZXRvbih2YXItPnZhcm5vKSk7CisKKwkJCQkJLyoKKwkJCQkJICogQWRqdXN0IHRoZSBQbGFjZUhv bGRlclZhcidzIHBobGV2ZWxzdXAgKHRoZSB3cmFwcGVkCisJCQkJCSAqIGV4cHJlc3Npb24gaXRz ZWxmIGlzIGFscmVhZHkgY29ycmVjdCBhdCB0aGlzIHBvaW50KS4KKwkJCQkJICovCisJCQkJCSgo UGxhY2VIb2xkZXJWYXIgKikgbmV3bm9kZSktPnBobGV2ZWxzdXAgPSB2YXItPnZhcmxldmVsc3Vw OworCisJCQkJCS8qCisJCQkJCSAqIENhY2hlIGl0IGlmIHBvc3NpYmxlIChpZSwgaWYgdGhlIGF0 dG5vIGlzIGluIHJhbmdlLAorCQkJCQkgKiB3aGljaCBpdCBwcm9iYWJseSBhbHdheXMgc2hvdWxk IGJlKSwgZW5zdXJpbmcgdGhhdCB0aGUKKwkJCQkJICogY2FjaGVkIGl0ZW0gaGFzIHBobGV2ZWxz dXAgPSAwLgorCQkJCQkgKi8KKwkJCQkJaWYgKHZhci0+dmFyYXR0bm8gPj0gSW52YWxpZEF0dHJO dW1iZXIgJiYKKwkJCQkJCXZhci0+dmFyYXR0bm8gPD0gdGN0eC0+bnVtX2F0dHJzKQorCQkJCQl7 CisJCQkJCQlOb2RlCSAgICpjYWNoZW5vZGUgPSBjb3B5T2JqZWN0KG5ld25vZGUpOworCisJCQkJ CQlpZiAodmFyLT52YXJsZXZlbHN1cCA+IDApCisJCQkJCQkJSW5jcmVtZW50VmFyU3VibGV2ZWxz VXAoY2FjaGVub2RlLAorCQkJCQkJCQkJCQkJCS0oKGludCkgdmFyLT52YXJsZXZlbHN1cCksCisJ CQkJCQkJCQkJCQkJMCk7CisKKwkJCQkJCXRjdHgtPmVnX2NhY2hlW3Zhci0+dmFyYXR0bm9dID0g Y2FjaGVub2RlOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQkvKiBQcm9wYWdhdGUgYW55IHZh cm51bGxpbmdyZWxzIGludG8gdGhlIHJlcGxhY2VtZW50IGV4cHJlc3Npb24gKi8KKwkJCWlmICh2 YXItPnZhcm51bGxpbmdyZWxzICE9IE5VTEwpCisJCQl7CisJCQkJaWYgKElzQShuZXdub2RlLCBW YXIpKQorCQkJCXsKKwkJCQkJVmFyCQkgICAqbmV3dmFyID0gKFZhciAqKSBuZXdub2RlOworCisJ CQkJCUFzc2VydChuZXd2YXItPnZhcmxldmVsc3VwID09IHZhci0+dmFybGV2ZWxzdXApOworCQkJ CQluZXd2YXItPnZhcm51bGxpbmdyZWxzID0gYm1zX2FkZF9tZW1iZXJzKG5ld3Zhci0+dmFybnVs bGluZ3JlbHMsCisJCQkJCQkJCQkJCQkJCQkgdmFyLT52YXJudWxsaW5ncmVscyk7CisJCQkJfQor CQkJCWVsc2UgaWYgKElzQShuZXdub2RlLCBQbGFjZUhvbGRlclZhcikpCisJCQkJeworCQkJCQlQ bGFjZUhvbGRlclZhciAqbmV3cGh2ID0gKFBsYWNlSG9sZGVyVmFyICopIG5ld25vZGU7CisKKwkJ CQkJQXNzZXJ0KG5ld3Bodi0+cGhsZXZlbHN1cCA9PSB2YXItPnZhcmxldmVsc3VwKTsKKwkJCQkJ bmV3cGh2LT5waG51bGxpbmdyZWxzID0gYm1zX2FkZF9tZW1iZXJzKG5ld3Bodi0+cGhudWxsaW5n cmVscywKKwkJCQkJCQkJCQkJCQkJCXZhci0+dmFybnVsbGluZ3JlbHMpOworCQkJCX0KKwkJCQll bHNlCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBDdXJyZW50bHksIHRoZSBjb2RlIGFib3ZlIHdy YXBzIGFsbCBub24tVmFyIGV4cHJlc3Npb25zCisJCQkJCSAqIGluIFBsYWNlSG9sZGVyVmFycywg c28gd2Ugc2hvdWxkIG5ldmVyIHNlZSBhbnl0aGluZworCQkJCQkgKiBlbHNlIGhlcmUuICBJZiB0 aGF0IGNoYW5nZXMsIHRoaXMgd2lsbCBuZWVkIGNvZGUKKwkJCQkJICogc2ltaWxhciB0byB0aGF0 IGluIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soKS4KKwkJCQkJICovCisJCQkJCWVsb2co RVJST1IsICJ1bmV4cGVjdGVkIGV4cHJlc3Npb24gZm9yIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt biIpOworCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIG5ld25vZGU7CisJCX0KKwl9CisJZWxzZSBp ZiAoSXNBKG5vZGUsIFF1ZXJ5KSkKKwl7CisJCVF1ZXJ5CSAgICpuZXdub2RlOworCisJCWNvbnRl eHQtPnN1YmxldmVsc191cCsrOworCQluZXdub2RlID0gcXVlcnlfdHJlZV9tdXRhdG9yKChRdWVy eSAqKSBub2RlLAorCQkJCQkJCQkJIGV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zX2Nh bGxiYWNrLAorCQkJCQkJCQkJIGNvbnRleHQsCisJCQkJCQkJCQkgMCk7CisJCWNvbnRleHQtPnN1 YmxldmVsc191cC0tOworCisJCXJldHVybiAoTm9kZSAqKSBuZXdub2RlOworCX0KKwlyZXR1cm4g ZXhwcmVzc2lvbl90cmVlX211dGF0b3Iobm9kZSwKKwkJCQkJCQkJICAgZXhwYW5kX3ZpcnR1YWxf Z2VuZXJhdGVkX2NvbHVtbnNfY2FsbGJhY2ssCisJCQkJCQkJCSAgIGNvbnRleHQpOworfQorCisv KgogICogcmVwbGFjZV9lbXB0eV9qb2ludHJlZQogICoJCUlmIHRoZSBRdWVyeSdzIGpvaW50cmVl IGlzIGVtcHR5LCByZXBsYWNlIGl0IHdpdGggYSBkdW1teSBSVEVfUkVTVUxUCiAgKgkJcmVsYXRp b24uCkBAIC0xMTc5LDYgKzE0MjIsMTMgQEAgcHVsbF91cF9zaW1wbGVfc3VicXVlcnkoUGxhbm5l ckluZm8gKnJvbwogCUFzc2VydChzdWJxdWVyeS0+Y3RlTGlzdCA9PSBOSUwpOwogCiAJLyoKKwkg KiBFeHBhbmQgYW55IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgaW4gdGhlIHN1YnF1ZXJ5LCBi ZWZvcmUgd2UgcHVsbCBpdAorCSAqIHVwICh0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBmb3Ig dGhlIHBhcmVudCBxdWVyeSkuCisJICovCisJc3VicXVlcnkgPSBzdWJyb290LT5wYXJzZSA9IGV4 cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zKHN1YnJvb3QsCisJCQkJCQkJCQkJCQkJCQkJ IHN1YnF1ZXJ5KTsKKworCS8qCiAJICogSWYgdGhlIEZST00gY2xhdXNlIGlzIGVtcHR5LCByZXBs YWNlIGl0IHdpdGggYSBkdW1teSBSVEVfUkVTVUxUIFJURSwgc28KIAkgKiB0aGF0IHdlIGRvbid0 IG5lZWQgc28gbWFueSBzcGVjaWFsIGNhc2VzIHRvIGRlYWwgd2l0aCB0aGF0IHNpdHVhdGlvbi4K IAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYyBi L3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBlOTk2YmRjLi5lY2M2OTVmCi0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0 ZUhhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMKQEAg LTk2LDggKzk2LDYgQEAgc3RhdGljIExpc3QgKm1hdGNoTG9ja3MoQ21kVHlwZSBldmVudCwgUgog CQkJCQkJaW50IHZhcm5vLCBRdWVyeSAqcGFyc2V0cmVlLCBib29sICpoYXNVcGRhdGUpOwogc3Rh dGljIFF1ZXJ5ICpmaXJlUklScnVsZXMoUXVlcnkgKnBhcnNldHJlZSwgTGlzdCAqYWN0aXZlUklS cyk7CiBzdGF0aWMgQml0bWFwc2V0ICphZGp1c3Rfdmlld19jb2x1bW5fc2V0KEJpdG1hcHNldCAq Y29scywgTGlzdCAqdGFyZ2V0bGlzdCk7Ci1zdGF0aWMgTm9kZSAqZXhwYW5kX2dlbmVyYXRlZF9j b2x1bW5zX2ludGVybmFsKE5vZGUgKm5vZGUsIFJlbGF0aW9uIHJlbCwgaW50IHJ0X2luZGV4LAot CQkJCQkJCQkJCQkgICBSYW5nZVRibEVudHJ5ICpydGUsIGludCByZXN1bHRfcmVsYXRpb24pOwog CiAKIC8qCkBAIC0yMTkwLDEwICsyMTg4LDYgQEAgZmlyZVJJUnJ1bGVzKFF1ZXJ5ICpwYXJzZXRy ZWUsIExpc3QgKmFjdAogCSAqIHJlcXVpcmVzIHNwZWNpYWwgcmVjdXJzaW9uIGRldGVjdGlvbiBp ZiB0aGUgbmV3IHF1YWxzIGhhdmUgc3VibGluawogCSAqIHN1YnF1ZXJpZXMsIGFuZCBpZiB3ZSBk aWQgaXQgaW4gdGhlIGxvb3AgYWJvdmUgcXVlcnlfdHJlZV93YWxrZXIgd291bGQKIAkgKiB0aGVu IHJlY3Vyc2UgaW50byB0aG9zZSBxdWFscyBhIHNlY29uZCB0aW1lLgotCSAqCi0JICogRmluYWxs eSwgd2UgZXhwYW5kIGFueSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLiAgV2UgZG8gdGhpcyBh ZnRlcgotCSAqIGVhY2ggdGFibGUncyBSTFMgcG9saWNpZXMgYXJlIGFwcGxpZWQgYmVjYXVzZSB0 aGUgUkxTIHBvbGljaWVzIG1pZ2h0Ci0JICogYWxzbyByZWZlciB0byB0aGUgdGFibGUncyB2aXJ0 dWFsIGdlbmVyYXRlZCBjb2x1bW5zLgogCSAqLwogCXJ0X2luZGV4ID0gMDsKIAlmb3JlYWNoKGxj LCBwYXJzZXRyZWUtPnJ0YWJsZSkKQEAgLTIyMDcsMTEgKzIyMDEsMTAgQEAgZmlyZVJJUnJ1bGVz KFF1ZXJ5ICpwYXJzZXRyZWUsIExpc3QgKmFjdAogCiAJCSsrcnRfaW5kZXg7CiAKLQkJLyoKLQkJ ICogT25seSBub3JtYWwgcmVsYXRpb25zIGNhbiBoYXZlIFJMUyBwb2xpY2llcyBvciB2aXJ0dWFs IGdlbmVyYXRlZAotCQkgKiBjb2x1bW5zLgotCQkgKi8KLQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCS8qIE9ubHkgbm9ybWFsIHJlbGF0aW9ucyBjYW4gaGF2ZSBSTFMgcG9s aWNpZXMgKi8KKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04gfHwKKwkJCShydGUt PnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQkJIHJ0ZS0+cmVsa2luZCAhPSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKSkKIAkJCWNvbnRpbnVlOwogCiAJCXJlbCA9IHRhYmxlX29w ZW4ocnRlLT5yZWxpZCwgTm9Mb2NrKTsKQEAgLTIzMDAsMTYgKzIyOTMsNiBAQCBmaXJlUklScnVs ZXMoUXVlcnkgKnBhcnNldHJlZSwgTGlzdCAqYWN0CiAJCWlmIChoYXNTdWJMaW5rcykKIAkJCXBh cnNldHJlZS0+aGFzU3ViTGlua3MgPSB0cnVlOwogCi0JCS8qCi0JCSAqIEV4cGFuZCBhbnkgcmVm ZXJlbmNlcyB0byB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIG9mIHRoaXMgdGFibGUuCi0JCSAq IE5vdGUgdGhhdCBzdWJxdWVyaWVzIGluIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiBleHByZXNz aW9ucyBhcmUKLQkJICogbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIHNvIHRoaXMgY2Fubm90IGFk ZCBhbnkgbW9yZSBzdWJsaW5rcy4KLQkJICovCi0JCXBhcnNldHJlZSA9IChRdWVyeSAqKQotCQkJ ZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zX2ludGVybmFsKChOb2RlICopIHBhcnNldHJlZSwKLQkJ CQkJCQkJCQkJICByZWwsIHJ0X2luZGV4LCBydGUsCi0JCQkJCQkJCQkJCSAgcGFyc2V0cmVlLT5y ZXN1bHRSZWxhdGlvbik7Ci0KIAkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOwogCX0KIApAQCAt NDQyNSwzMSArNDQwOCwyMCBAQCBSZXdyaXRlUXVlcnkoUXVlcnkgKnBhcnNldHJlZSwgTGlzdCAq cmV3CiAKIAogLyoKLSAqIEV4cGFuZCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCi0gKgotICog SWYgdGhlIHRhYmxlIGNvbnRhaW5zIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMsIGJ1aWxkIGEg dGFyZ2V0IGxpc3QKLSAqIGNvbnRhaW5pbmcgdGhlIGV4cGFuZGVkIGV4cHJlc3Npb25zIGFuZCB1 c2UgUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdCgpIHRvCi0gKiBkbyB0aGUgcmVwbGFjZW1lbnRz LgotICoKLSAqIFZhcnMgbWF0Y2hpbmcgcnRfaW5kZXggYXQgdGhlIGN1cnJlbnQgcXVlcnkgbGV2 ZWwgYXJlIHJlcGxhY2VkIGJ5IHRoZQotICogdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIGV4cHJl c3Npb25zIGZyb20gcmVsLCBpZiB0aGVyZSBhcmUgYW55LgorICogR2V0IHRoZSB2aXJ0dWFsIGdl bmVyYXRlZCBjb2x1bW5zIG9mIGEgcmVsYXRpb24uCiAgKgotICogVGhlIGNhbGxlciBtdXN0IGFs c28gcHJvdmlkZSBydGUsIHRoZSBSVEUgZGVzY3JpYmluZyB0aGUgdGFyZ2V0IHJlbGF0aW9uLAot ICogaW4gb3JkZXIgdG8gaGFuZGxlIGFueSB3aG9sZS1yb3cgVmFycyByZWZlcmVuY2luZyB0aGUg dGFyZ2V0LCBhbmQKLSAqIHJlc3VsdF9yZWxhdGlvbiwgdGhlIGluZGV4IG9mIHRoZSByZXN1bHQg cmVsYXRpb24sIGlmIHRoaXMgaXMgcGFydCBvZiBhbgotICogSU5TRVJUL1VQREFURS9ERUxFVEUv TUVSR0UgcXVlcnkuCisgKiBUaGUgcmV0dXJuZWQgbGlzdCBpcyBpbiB0aGUgZm9ybSBvZiBhIHRh cmdldGxpc3QgKG9mIFRhcmdldEVudHJ5IG5vZGVzKQorICogc3VpdGFibGUgZm9yIHVzZSBieSBS ZXBsYWNlVmFyRnJvbVRhcmdldExpc3QvUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdCB0bworICog ZXhwYW5kIHJlZmVyZW5jZXMgdG8gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucy4KICAqLwotc3Rh dGljIE5vZGUgKgotZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zX2ludGVybmFsKE5vZGUgKm5vZGUs IFJlbGF0aW9uIHJlbCwgaW50IHJ0X2luZGV4LAotCQkJCQkJCQkgIFJhbmdlVGJsRW50cnkgKnJ0 ZSwgaW50IHJlc3VsdF9yZWxhdGlvbikKK0xpc3QgKgorZ2V0X3ZpcnR1YWxfZ2VuZXJhdGVkX2Nv bHVtbnMoUmVsYXRpb24gcmVsLCBpbnQgcnRfaW5kZXgpCiB7Ci0JVHVwbGVEZXNjCXR1cGRlc2M7 CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJTGlzdAkgICAq dGxpc3QgPSBOSUw7CiAKLQl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwogCWlmICh0 dXBkZXNjLT5jb25zdHIgJiYgdHVwZGVzYy0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwp CiAJewotCQlMaXN0CSAgICp0bGlzdCA9IE5JTDsKLQogCQlmb3IgKGludCBpID0gMDsgaSA8IHR1 cGRlc2MtPm5hdHRzOyBpKyspCiAJCXsKIAkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBs ZURlc2NBdHRyKHR1cGRlc2MsIGkpOwpAQCAtNDQ5MSwxNCArNDQ2Myw4IEBAIGV4cGFuZF9nZW5l cmF0ZWRfY29sdW1uc19pbnRlcm5hbChOb2RlICoKIAkJfQogCiAJCUFzc2VydChsaXN0X2xlbmd0 aCh0bGlzdCkgPiAwKTsKLQotCQlub2RlID0gUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdChub2Rl LCBydF9pbmRleCwgMCwgcnRlLCB0bGlzdCwKLQkJCQkJCQkJCQkgcmVzdWx0X3JlbGF0aW9uLAot CQkJCQkJCQkJCSBSRVBMQUNFVkFSU19DSEFOR0VfVkFSTk8sIHJ0X2luZGV4LAotCQkJCQkJCQkJ CSBOVUxMKTsKIAl9Ci0KLQlyZXR1cm4gbm9kZTsKKwlyZXR1cm4gdGxpc3Q7CiB9CiAKIC8qCkBA IC00NTE1LDYgKzQ0ODEsNyBAQCBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW5fZXhwcihOb2Rl ICpuCiAJaWYgKHR1cGRlc2MtPmNvbnN0ciAmJiB0dXBkZXNjLT5jb25zdHItPmhhc19nZW5lcmF0 ZWRfdmlydHVhbCkKIAl7CiAJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJTGlzdAkgICAqdGxpc3Q7 CiAKIAkJcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CiAJCS8qIGVyZWYgbmVlZHMgdG8g YmUgc2V0LCBidXQgdGhlIGFjdHVhbCBuYW1lIGRvZXNuJ3QgbWF0dGVyICovCkBAIC00NTIyLDcg KzQ0ODksMTEgQEAgZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zX2luX2V4cHIoTm9kZSAqbgogCQly dGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CiAJCXJ0ZS0+cmVsaWQgPSBSZWxhdGlvbkdldFJl bGlkKHJlbCk7CiAKLQkJbm9kZSA9IGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbnRlcm5hbChu b2RlLCByZWwsIHJ0X2luZGV4LCBydGUsIDApOworCQl0bGlzdCA9IGdldF92aXJ0dWFsX2dlbmVy YXRlZF9jb2x1bW5zKHJlbCwgcnRfaW5kZXgpOworCisJCW5vZGUgPSBSZXBsYWNlVmFyc0Zyb21U YXJnZXRMaXN0KG5vZGUsIHJ0X2luZGV4LCAwLCBydGUsIHRsaXN0LCAwLAorCQkJCQkJCQkJCSBS RVBMQUNFVkFSU19DSEFOR0VfVkFSTk8sIHJ0X2luZGV4LAorCQkJCQkJCQkJCSBOVUxMKTsKIAl9 CiAKIAlyZXR1cm4gbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0 ZU1hbmlwLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGExMTViMjEuLmNjMjY4YTUKLS0tIGEvc3JjL2JhY2tlbmQvcmV3cml0 ZS9yZXdyaXRlTWFuaXAuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5j CkBAIC0xNzM2LDYgKzE3MzYsMjMgQEAgUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdF9jYWxsYmFj ayhWYXIgKgogCQkJCQkJCQkgICByZXBsYWNlX3J0ZV92YXJpYWJsZXNfY29udGV4dCAqY29udGV4 dCkKIHsKIAlSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NvbnRleHQgKnJjb24gPSAoUmVwbGFj ZVZhcnNGcm9tVGFyZ2V0TGlzdF9jb250ZXh0ICopIGNvbnRleHQtPmNhbGxiYWNrX2FyZzsKKwor CXJldHVybiBSZXBsYWNlVmFyRnJvbVRhcmdldExpc3QodmFyLAorCQkJCQkJCQkJcmNvbi0+dGFy Z2V0X3J0ZSwKKwkJCQkJCQkJCXJjb24tPnRhcmdldGxpc3QsCisJCQkJCQkJCQlyY29uLT5yZXN1 bHRfcmVsYXRpb24sCisJCQkJCQkJCQlyY29uLT5ub21hdGNoX29wdGlvbiwKKwkJCQkJCQkJCXJj b24tPm5vbWF0Y2hfdmFybm8pOworfQorCitOb2RlICoKK1JlcGxhY2VWYXJGcm9tVGFyZ2V0TGlz dChWYXIgKnZhciwKKwkJCQkJCSBSYW5nZVRibEVudHJ5ICp0YXJnZXRfcnRlLAorCQkJCQkJIExp c3QgKnRhcmdldGxpc3QsCisJCQkJCQkgaW50IHJlc3VsdF9yZWxhdGlvbiwKKwkJCQkJCSBSZXBs YWNlVmFyc05vTWF0Y2hPcHRpb24gbm9tYXRjaF9vcHRpb24sCisJCQkJCQkgaW50IG5vbWF0Y2hf dmFybm8pCit7CiAJVGFyZ2V0RW50cnkgKnRsZTsKIAogCWlmICh2YXItPnZhcmF0dG5vID09IElu dmFsaWRBdHRyTnVtYmVyKQpAQCAtMTc0NCw2ICsxNzYxLDcgQEAgUmVwbGFjZVZhcnNGcm9tVGFy Z2V0TGlzdF9jYWxsYmFjayhWYXIgKgogCQlSb3dFeHByICAgICpyb3dleHByOwogCQlMaXN0CSAg ICpjb2xuYW1lczsKIAkJTGlzdAkgICAqZmllbGRzOworCQlMaXN0Q2VsbCAgICpsYzsKIAogCQkv KgogCQkgKiBJZiBnZW5lcmF0aW5nIGFuIGV4cGFuc2lvbiBmb3IgYSB2YXIgb2YgYSBuYW1lZCBy b3d0eXBlIChpZSwgdGhpcwpAQCAtMTc1NSwxNSArMTc3MywyNyBAQCBSZXBsYWNlVmFyc0Zyb21U YXJnZXRMaXN0X2NhbGxiYWNrKFZhciAqCiAJCSAqIFRoZSB2YXJyZXR1cm5pbmd0eXBlIGlzIGNv cGllZCBvbnRvIGVhY2ggaW5kaXZpZHVhbCBmaWVsZCBWYXIsIHNvCiAJCSAqIHRoYXQgaXQgaXMg aGFuZGxlZCBjb3JyZWN0bHkgd2hlbiB3ZSByZWN1cnNlLgogCQkgKi8KLQkJZXhwYW5kUlRFKHJj b24tPnRhcmdldF9ydGUsCisJCWV4cGFuZFJURSh0YXJnZXRfcnRlLAogCQkJCSAgdmFyLT52YXJu bywgdmFyLT52YXJsZXZlbHN1cCwgdmFyLT52YXJyZXR1cm5pbmd0eXBlLAogCQkJCSAgdmFyLT5s b2NhdGlvbiwgKHZhci0+dmFydHlwZSAhPSBSRUNPUkRPSUQpLAogCQkJCSAgJmNvbG5hbWVzLCAm ZmllbGRzKTsKIAkJLyogQWRqdXN0IHRoZSBnZW5lcmF0ZWQgcGVyLWZpZWxkIFZhcnMuLi4gKi8K LQkJZmllbGRzID0gKExpc3QgKikgcmVwbGFjZV9ydGVfdmFyaWFibGVzX211dGF0b3IoKE5vZGUg KikgZmllbGRzLAotCQkJCQkJCQkJCQkJCQljb250ZXh0KTsKIAkJcm93ZXhwciA9IG1ha2VOb2Rl KFJvd0V4cHIpOwotCQlyb3dleHByLT5hcmdzID0gZmllbGRzOworCQlyb3dleHByLT5hcmdzID0g TklMOworCQlmb3JlYWNoKGxjLCBmaWVsZHMpCisJCXsKKwkJCU5vZGUJICAgKmZpZWxkID0gbGZp cnN0KGxjKTsKKworCQkJaWYgKGZpZWxkICE9IE5VTEwpCisJCQkJZmllbGQgPSBSZXBsYWNlVmFy RnJvbVRhcmdldExpc3QoKFZhciAqKSBmaWVsZCwKKwkJCQkJCQkJCQkJCSB0YXJnZXRfcnRlLAor CQkJCQkJCQkJCQkJIHRhcmdldGxpc3QsCisJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbGF0aW9uLAor CQkJCQkJCQkJCQkJIG5vbWF0Y2hfb3B0aW9uLAorCQkJCQkJCQkJCQkJIG5vbWF0Y2hfdmFybm8p OworCisJCQlyb3dleHByLT5hcmdzID0gbGFwcGVuZChyb3dleHByLT5hcmdzLCBmaWVsZCk7CisJ CX0KIAkJcm93ZXhwci0+cm93X3R5cGVpZCA9IHZhci0+dmFydHlwZTsKIAkJcm93ZXhwci0+cm93 X2Zvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNUOwogCQlyb3dleHByLT5jb2xuYW1lcyA9ICh2 YXItPnZhcnR5cGUgPT0gUkVDT1JET0lEKSA/IGNvbG5hbWVzIDogTklMOwpAQCAtMTc4NSwxMiAr MTgxNSwxMiBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZhciAqCiAJfQog CiAJLyogTm9ybWFsIGNhc2UgcmVmZXJlbmNpbmcgb25lIHRhcmdldGxpc3QgZWxlbWVudCAqLwot CXRsZSA9IGdldF90bGVfYnlfcmVzbm8ocmNvbi0+dGFyZ2V0bGlzdCwgdmFyLT52YXJhdHRubyk7 CisJdGxlID0gZ2V0X3RsZV9ieV9yZXNubyh0YXJnZXRsaXN0LCB2YXItPnZhcmF0dG5vKTsKIAog CWlmICh0bGUgPT0gTlVMTCB8fCB0bGUtPnJlc2p1bmspCiAJewogCQkvKiBGYWlsZWQgdG8gZmlu ZCBjb2x1bW4gaW4gdGFyZ2V0bGlzdCAqLwotCQlzd2l0Y2ggKHJjb24tPm5vbWF0Y2hfb3B0aW9u KQorCQlzd2l0Y2ggKG5vbWF0Y2hfb3B0aW9uKQogCQl7CiAJCQljYXNlIFJFUExBQ0VWQVJTX1JF UE9SVF9FUlJPUjoKIAkJCQkvKiBmYWxsIHRocm91Z2gsIHRocm93IGVycm9yIGJlbG93ICovCkBA IC0xNzk4LDcgKzE4MjgsNyBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZh ciAqCiAKIAkJCWNhc2UgUkVQTEFDRVZBUlNfQ0hBTkdFX1ZBUk5POgogCQkJCXZhciA9IGNvcHlP YmplY3QodmFyKTsKLQkJCQl2YXItPnZhcm5vID0gcmNvbi0+bm9tYXRjaF92YXJubzsKKwkJCQl2 YXItPnZhcm5vID0gbm9tYXRjaF92YXJubzsKIAkJCQkvKiB3ZSBsZWF2ZSB0aGUgc3ludGFjdGlj IHJlZmVyZW50IGFsb25lICovCiAJCQkJcmV0dXJuIChOb2RlICopIHZhcjsKIApAQCAtMTg1NCwx NSArMTg4NCwxNSBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZhciAqCiAJ CQkgKiBDb3B5IHZhcnJldHVybmluZ3R5cGUgb250byBhbnkgVmFycyBpbiB0aGUgdGxpc3QgaXRl bSB0aGF0CiAJCQkgKiByZWZlciB0byByZXN1bHRfcmVsYXRpb24gKHdoaWNoIGhhZCBiZXR0ZXIg YmUgbm9uLXplcm8pLgogCQkJICovCi0JCQlpZiAocmNvbi0+cmVzdWx0X3JlbGF0aW9uID09IDAp CisJCQlpZiAocmVzdWx0X3JlbGF0aW9uID09IDApCiAJCQkJZWxvZyhFUlJPUiwgInZhcmlhYmxl IHJldHVybmluZyBvbGQvbmV3IGZvdW5kIG91dHNpZGUgUkVUVVJOSU5HIGxpc3QiKTsKIAotCQkJ U2V0VmFyUmV0dXJuaW5nVHlwZSgoTm9kZSAqKSBuZXdub2RlLCByY29uLT5yZXN1bHRfcmVsYXRp b24sCisJCQlTZXRWYXJSZXR1cm5pbmdUeXBlKChOb2RlICopIG5ld25vZGUsIHJlc3VsdF9yZWxh dGlvbiwKIAkJCQkJCQkJdmFyLT52YXJsZXZlbHN1cCwgdmFyLT52YXJyZXR1cm5pbmd0eXBlKTsK IAogCQkJLyogV3JhcCBpdCBpbiBhIFJldHVybmluZ0V4cHIsIGlmIG5lZWRlZCwgcGVyIGNvbW1l bnRzIGFib3ZlICovCiAJCQlpZiAoIUlzQShuZXdub2RlLCBWYXIpIHx8Ci0JCQkJKChWYXIgKikg bmV3bm9kZSktPnZhcm5vICE9IHJjb24tPnJlc3VsdF9yZWxhdGlvbiB8fAorCQkJCSgoVmFyICop IG5ld25vZGUpLT52YXJubyAhPSByZXN1bHRfcmVsYXRpb24gfHwKIAkJCQkoKFZhciAqKSBuZXdu b2RlKS0+dmFybGV2ZWxzdXAgIT0gdmFyLT52YXJsZXZlbHN1cCkKIAkJCXsKIAkJCQlSZXR1cm5p bmdFeHByICpyZXhwciA9IG1ha2VOb2RlKFJldHVybmluZ0V4cHIpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFlNTdlYy4uOWM5MzY0MwotLS0gYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcHJlcC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgK QEAgLTIyLDYgKzIyLDcgQEAKICAqIHByb3RvdHlwZXMgZm9yIHByZXBqb2ludHJlZS5jCiAgKi8K IGV4dGVybiB2b2lkIHRyYW5zZm9ybV9NRVJHRV90b19qb2luKFF1ZXJ5ICpwYXJzZSk7CitleHRl cm4gUXVlcnkgKmV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zKFBsYW5uZXJJbmZvICpy b290LCBRdWVyeSAqcGFyc2UpOwogZXh0ZXJuIHZvaWQgcmVwbGFjZV9lbXB0eV9qb2ludHJlZShR dWVyeSAqcGFyc2UpOwogZXh0ZXJuIHZvaWQgcHVsbF91cF9zdWJsaW5rcyhQbGFubmVySW5mbyAq cm9vdCk7CiBleHRlcm4gdm9pZCBwcmVwcm9jZXNzX2Z1bmN0aW9uX3J0ZXMoUGxhbm5lckluZm8g KnJvb3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5o IGIvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDg4ZmUxM2MuLjIxODc2Y2YKLS0tIGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdy aXRlSGFuZGxlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuaApA QCAtMzgsNiArMzgsNyBAQCBleHRlcm4gdm9pZCBlcnJvcl92aWV3X25vdF91cGRhdGFibGUoUmVs CiAJCQkJCQkJCQkgTGlzdCAqbWVyZ2VBY3Rpb25MaXN0LAogCQkJCQkJCQkJIGNvbnN0IGNoYXIg KmRldGFpbCk7CiAKK2V4dGVybiBMaXN0ICpnZXRfdmlydHVhbF9nZW5lcmF0ZWRfY29sdW1ucyhS ZWxhdGlvbiByZWwsIGludCBydF9pbmRleCk7CiBleHRlcm4gTm9kZSAqZXhwYW5kX2dlbmVyYXRl ZF9jb2x1bW5zX2luX2V4cHIoTm9kZSAqbm9kZSwgUmVsYXRpb24gcmVsLCBpbnQgcnRfaW5kZXgp OwogCiAjZW5kaWYJCQkJCQkJLyogUkVXUklURUhBTkRMRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaCBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3 cml0ZU1hbmlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyODIzMC4uYWZjZTc0Mwot LS0gYS9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCisrKyBiL3NyYy9pbmNsdWRl L3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKQEAgLTg1LDYgKzg1LDEzIEBAIGV4dGVybiBOb2RlICpt YXBfdmFyaWFibGVfYXR0bm9zKE5vZGUgKm4KIAkJCQkJCQkJIGNvbnN0IHN0cnVjdCBBdHRyTWFw ICphdHRub19tYXAsCiAJCQkJCQkJCSBPaWQgdG9fcm93dHlwZSwgYm9vbCAqZm91bmRfd2hvbGVf cm93KTsKIAorZXh0ZXJuIE5vZGUgKlJlcGxhY2VWYXJGcm9tVGFyZ2V0TGlzdChWYXIgKnZhciwK KwkJCQkJCQkJCSAgUmFuZ2VUYmxFbnRyeSAqdGFyZ2V0X3J0ZSwKKwkJCQkJCQkJCSAgTGlzdCAq dGFyZ2V0bGlzdCwKKwkJCQkJCQkJCSAgaW50IHJlc3VsdF9yZWxhdGlvbiwKKwkJCQkJCQkJCSAg UmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uIG5vbWF0Y2hfb3B0aW9uLAorCQkJCQkJCQkJICBpbnQg bm9tYXRjaF92YXJubyk7CisKIGV4dGVybiBOb2RlICpSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0 KE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkgICBpbnQgdGFyZ2V0X3Zhcm5vLCBpbnQgc3VibGV2ZWxz X3VwLAogCQkJCQkJCQkJICAgUmFuZ2VUYmxFbnRyeSAqdGFyZ2V0X3J0ZSwKZGlmZiAtLWdpdCBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZjMTcwYS4uNGQwZmNhYgot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMzQ4NCw2ICszNDg0LDggQEAgZXZhbF9jb25zdF9leHBy ZXNzaW9uc19jb250ZXh0CiBleGVjX3RocmVhZF9hcmcKIGV4ZWN1dGlvbl9zdGF0ZQogZXhpdF9m dW5jdGlvbgorZXhwYW5kX2dlbmVyYXRlZF9jb250ZXh0CitleHBhbmRfZ2VuZXJhdGVkX3RhYmxl X2NvbnRleHQKIGV4cGxhaW5fZ2V0X2luZGV4X25hbWVfaG9va190eXBlCiBmX3NtZ3IKIGZhc3Ro YXNoX3N0YXRlCg== --0000000000008f3eec062e2d8f1c--