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 1tklwy-006gdt-Kw for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Feb 2025 15:25:24 +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 1tklwv-009nti-1R for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Feb 2025 15:25:21 +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 1tklwu-009ntU-Ld for pgsql-hackers@lists.postgresql.org; Wed, 19 Feb 2025 15:25:20 +0000 Received: from mail-io1-xd2f.google.com ([2607:f8b0:4864:20::d2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tklws-001mby-1w for pgsql-hackers@postgresql.org; Wed, 19 Feb 2025 15:25:20 +0000 Received: by mail-io1-xd2f.google.com with SMTP id ca18e2360f4ac-855a095094fso70334439f.1 for ; Wed, 19 Feb 2025 07:25:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739978716; x=1740583516; 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=IHFsE4MvUuit0rxjEbLvm7cxmMNyTawrlgoQCZ6LehQ=; b=AEdlWNVuXpcXSBJzkCFre0VfKql28WLJHJeIsoCzPCZKwbdtW8RMuS7RNNYagTGmZ6 Qgt1owT0Ey4kGq82pBHvUMDieYtqQV43VE9nWtnxuvJ2iOXLFZdwt4cUdUA1RQj+xEr+ D7wFei0j4PkPrQ94v9EApUpc5MVd/gTtxYH5qDLjTGmcimC0EhXCyFR75lVHeFdRVgXH xsKqeMdN/0u0b+KBznevobVV1JPdc6i4BvtJ9cEmVDRwWlzjg0fI5lDJc9JfFIX8GF8z aGtmSSLOHSOuyQRa8lIwe2i7q4876RXK50RRXoTcdbgyG60AuX/KKbBxTbEiC6X9UqjA XADQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739978716; x=1740583516; 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=IHFsE4MvUuit0rxjEbLvm7cxmMNyTawrlgoQCZ6LehQ=; b=HfZZ0Rjfq5B1mS4ggUWvBOgBWQruB/6G2QDuYS+wmu9ruR5t3HmkCAKBNRmnuzywvr O7niV+l1TRk70ATORyzNm4cQ1MurL9l5cniD+4J5ll4DrdZzFfgV9rXL6qMoNEiVLJ5E k+HEDDGHV2OqmQsVnm7/XpPmdz0T+GYKOyiAKJ0BUkVMfEI8oi9O5TJFLL8M9y0X3PW5 RZ0y1G/5vISM/45ebgL5a6ImDlIl6/Ug7fDMH5aavx5v2ceR6qK3MTy5molTlHZrFrb4 A52R55BIgNlacZ/jKQ6ZlJhAhdaAhIHFdDAnyM+2gXP7s/Dzg88Aowj8VNMm32U6XtP4 HX+w== X-Forwarded-Encrypted: i=1; AJvYcCXUk7GS+61Ybji/ZBb8aBJW3SwA4BktzO9DHaKn4ktLLkr0LOxmL7SvTV5whwwJuO95wr9dczHG057iQf/K@postgresql.org X-Gm-Message-State: AOJu0Ywcj6SLlT2vy0RbGA3bo91qfZ0EQ5cv5dmMgWQ582/70y0Z3fwg AlKBz/YpG56ncDRXMlrGisLAucsLyaYxPnpuPYrA3M4Zxx10KCKoKlVeRyHLjsPgOBZQuEoF4GV AA4ZN0XUIjr7ODHBNQNSCfT+4T0ysB3fu X-Gm-Gg: ASbGncv3WZNtfWpOk2bwt7CapbK682oPvExuEhU0xm4fHMSmgrxM7IbbJa5ND/phRoR j83/29k0dbnSXreuhfu4bUzEWwkzY31zYk3YNtZYcr27I3b4z3kPxTtUDYKCeYjCpX1qg/bLfTc +670suL7HwlV1N+I9Qkxpt2jCWVc3UHHM= X-Google-Smtp-Source: AGHT+IHvDLH80th+kto4BbzUqEW/ZiWIcggOt0tf8QvQjat9uDAZw4lQ6GKceSDOKFu+SBBfyDmljgMp2mEmWuKyRiQ= X-Received: by 2002:a05:6602:3403:b0:855:ac69:32b6 with SMTP id ca18e2360f4ac-855b396ab59mr409701739f.3.1739978716490; Wed, 19 Feb 2025 07:25:16 -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: Wed, 19 Feb 2025 15:25:05 +0000 X-Gm-Features: AWEUYZlW74Kw5wMD9827DlZ-TayzG1LkXHjGM4ckwnhscLVul03AMAbSO0OSwAU Message-ID: Subject: Re: Virtual generated columns To: Richard Guo Cc: Peter Eisentraut , jian he , Zhang Mingli , Alexander Lakhin , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000507b57062e805d7a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000507b57062e805d7a Content-Type: text/plain; charset="UTF-8" On Wed, 19 Feb 2025 at 01:42, Dean Rasheed wrote: > > One thing I don't like about this is that it's introducing more code > duplication between pullup_replace_vars() and > ReplaceVarsFromTargetList(). Those already had a lot of code in common > before RETURNING OLD/NEW was added, and this is duplicating even more > code. I think it'd be better to refactor so that they share common > code, since it has become quite complex, and it would be better to > have just one place to maintain. Attached is an updated patch doing > that. > I've been doing some more testing of this, and attached is another update, improving a few comments and adding regression tests based on the cases discussed so far here. One of the new regression tests fails, which actually appears to be a pre-existing grouping sets bug, due to the fact that only non-Vars are wrapped in PHVs. This bug can be triggered without virtual generated columns: CREATE TABLE t (a int, b int); INSERT INTO t VALUES (1, 1); SELECT * FROM (SELECT a, a AS b FROM t) AS vt GROUP BY GROUPING SETS (a, b) HAVING b = 1; a | b ---+--- 1 | (1 row) whereas the result should be a | b ---+--- | 1 (1 row) For reference, this code dates back to 90947674fc. Regards, Dean --000000000000507b57062e805d7a Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-Expand-virtual-generated-columns-in-the-planner.patch" Content-Disposition: attachment; filename="v4-0001-Expand-virtual-generated-columns-in-the-planner.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7c1fe8b0 RnJvbSAwNTdkOGE4ZjYzZDdiNmI1ZDhlZmI1ZDRmNTE5Yjg1NTdlMjY0YTM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEZWFuIFJhc2hlZWQgPGRlYW4uYS5yYXNoZWVkQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAxOSBGZWIgMjAyNSAxMDozMDozMyArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djRdIEV4cGFuZCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGluIHRoZSBwbGFubmVyLgoKQ29t bWl0IDgzZWE2YzU0MDI1IGFkZGVkIHN1cHBvcnQgZm9yIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt bnMsIHdoaWNoCndlcmUgZXhwYW5kZWQgaW4gdGhlIHJld3JpdGVyLCBpbiBhIHNpbWlsYXIgd2F5 IHRvIHZpZXcgY29sdW1ucy4KSG93ZXZlciwgdGhhdCBkb2VzIG5vdCBwcm9wYWdhdGUgdmFybnVs bGluZ3JlbHMgb250byB0aGUgcmVwbGFjZW1lbnQKZXhwcmVzc2lvbnMsIHdoaWNoIGlzIE9LIGZv ciB2aWV3IGNvbHVtbnMgYmVjYXVzZSB0aGV5IGFyZSBleHBhbmRlZAppbnNpZGUgYSBzdWJxdWVy eSwgYnV0IGl0IGlzIG5vdCBPSyBmb3IgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucwp3aGljaCBh cmUgZXhwYW5kZWQgZGlyZWN0bHkgaW50byB0aGUgbWFpbiBxdWVyeSBhbmQgc28gbXVzdCBiZQpj b3JyZWN0bHkgbWFya2VkLiBUaGlzIGxlYWQgdG8gdmFyaW91cyBwcm9ibGVtcyB3aXRoIG91dGVy IGpvaW4KcXVlcmllcywgaW5jbHVkaW5nICJ3cm9uZyB2YXJudWxsaW5ncmVscyIgZXJyb3JzLCBp bmNvcnJlY3QgcmVzdWx0cywKYW5kIGltcHJvcGVyIG91dGVyLWpvaW4gcmVtb3ZhbC4KClRvIGZp eCB0aGlzLCBleHBhbmRlZCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIG11c3QgYmUgcHJvcGVy bHkKbWFya2VkLCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgVmFyJ3MgdmFybnVsbGluZ3JlbHMsIGFu ZCBpZiBuZWNlc3NhcnksCndyYXBwZWQgaW4gUGxhY2VIb2xkZXJWYXJzLiBTaW5jZSBQbGFjZUhv bGRlclZhciBpcyBhIHBsYW5uZXIgbm9kZSwKdGhpcyByZWFsbHkgaGFzIHRvIGJlIGRvbmUgaW4g dGhlIHBsYW5uZXIuIFRvIGF2b2lkIGEgbG90IG9mIGNvZGUKZHVwbGljYXRpb24sIHJldXNlIHRo ZSBwbGFubmVyJ3Mgc3VicXVlcnktcHVsbHVwIGNvZGUgZm9yIHRoaXMuCgpTaW5jZSB0aGlzIG5v dyBtZWFucyB0aGF0IHRoZSBzdWJxdWVyeS1wdWxsdXAgY29kZSBtYXkgYmUgZGVhbGluZyB3aXRo ClZhcnMgcmVmZXJyaW5nIHRvIHRoZSByZXN1bHQgcmVsYXRpb24gcmF0aGVyIHRoYW4gYSBzdWJx dWVyeSwgaXQgbXVzdAphbHNvIGJlIHRhdWdodCB0byBoYW5kbGUgVmFycyB3aXRoIG5vbi1kZWZh dWx0IHZhcnJldHVybmluZ3R5cGUKKE9MRC9ORVcgcmVmZXJlbmNlcyBpbiB0aGUgUkVUVVJOSU5H IGxpc3QpLCB3aGljaCBwcmV2aW91c2x5IG9ubHkgdGhlCnJld3JpdGVyIGhhZCB0byB3b3JyeSBh Ym91dC4gVG8gYXZvaWQgZXZlbiBtb3JlIGNvZGUgZHVwbGljYXRpb24KYmV0d2VlbiB0aGlzIGNv ZGUgYW5kIHRoZSByZXdyaXRlciwgYXJyYW5nZSBmb3IgcHVsbHVwX3JlcGxhY2VfdmFycygpCnRv IHJldXNlIFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3QoKSdzIG11dGF0b3IgZnVuY3Rpb24uIFRo aXMKZWxpbWluYXRlcyBhIGxvdCBvZiBleGlzdGluZyBkdXBsaWNhdGVkIGNvZGUgYmV0d2VlbiB0 aGUgcmV3cml0ZXIgYW5kCnRoZSBwbGFubmVyLCBhbmQgYXZvaWRzIGFkZGluZyBldmVuIG1vcmUu Ci0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgfCAgIDYgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgfCAyNjIgKysrKysrKysr KysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jICAgICAg fCAgMjMgKy0KIHNyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMgICAgICAgIHwgIDUw ICsrKystCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oICAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oICAgICAgICB8ICAgNyArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICB8ICA2NiArKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsICAgICAgICAgICAgIHwgIDQzICsrKysKIDggZmlsZXMg Y2hhbmdlZCwgMzUxIGluc2VydGlvbnMoKyksIDEwNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggN2IxYThhMGE5ZjEuLjZiZWI1OGU4ZjA0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC03NDksNiArNzQ5LDEyIEBAIHN1YnF1 ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBQbGFubmVySW5m byAqcGFyZW50X3Jvb3QsCiAJaWYgKHBhcnNlLT5zZXRPcGVyYXRpb25zKQogCQlmbGF0dGVuX3Np bXBsZV91bmlvbl9hbGwocm9vdCk7CiAKKwkvKgorCSAqIFNjYW4gdGhlIHJhbmdldGFibGUgZm9y IHJlbGF0aW9ucyB3aXRoIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMsIGFuZAorCSAqIGV4cGFu ZCB0aGVtLgorCSAqLworCXBhcnNlID0gcm9vdC0+cGFyc2UgPSBleHBhbmRfdmlydHVhbF9nZW5l cmF0ZWRfY29sdW1ucyhyb290KTsKKwogCS8qCiAJICogU3VydmV5IHRoZSByYW5nZXRhYmxlIHRv IHNlZSB3aGF0IGtpbmRzIG9mIGVudHJpZXMgYXJlIHByZXNlbnQuICBXZSBjYW4KIAkgKiBza2lw IHNvbWUgbGF0ZXIgcHJvY2Vzc2luZyBpZiByZWxldmFudCBTUUwgZmVhdHVyZXMgYXJlIG5vdCB1 c2VkOyBmb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2lu dHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKaW5kZXgg NWQ5MjI1ZTk5MDkuLjhmZGNhMzVkMDg3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcHJlcC9wcmVwam9pbnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9w cmVwam9pbnRyZWUuYwpAQCAtOSw2ICs5LDcgQEAKICAqCQlwcmVwcm9jZXNzX2Z1bmN0aW9uX3J0 ZXMKICAqCQlwdWxsX3VwX3N1YnF1ZXJpZXMKICAqCQlmbGF0dGVuX3NpbXBsZV91bmlvbl9hbGwK KyAqCQlleHBhbmRfdmlydHVhbF9nZW5lcmF0ZWRfY29sdW1ucwogICoJCWRvIGV4cHJlc3Npb24g cHJlcHJvY2Vzc2luZyAoaW5jbHVkaW5nIGZsYXR0ZW5pbmcgSk9JTiBhbGlhcyB2YXJzKQogICoJ CXJlZHVjZV9vdXRlcl9qb2lucwogICoJCXJlbW92ZV91c2VsZXNzX3Jlc3VsdF9ydGVzCkBAIC0y NSw2ICsyNiw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZnVu Y2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMzksNyArNDEsOSBAQAogI2luY2x1 ZGUgIm9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5o IgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3Jp dGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKKyNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKIAogCiB0eXBlZGVmIHN0cnVjdCBudWxsaW5ncmVsX2luZm8KQEAgLTU3 LDYgKzYxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcHVsbHVwX3JlcGxhY2VfdmFyc19jb250ZXh0CiB7 CiAJUGxhbm5lckluZm8gKnJvb3Q7CiAJTGlzdAkgICAqdGFyZ2V0bGlzdDsJCS8qIHRsaXN0IG9m IHN1YnF1ZXJ5IGJlaW5nIHB1bGxlZCB1cCAqLworCWludAkJCXJlc3VsdF9yZWxhdGlvbjsJLyog dGhlIGluZGV4IG9mIHRoZSByZXN1bHQgcmVsYXRpb24gKi8KIAlSYW5nZVRibEVudHJ5ICp0YXJn ZXRfcnRlOwkvKiBSVEUgb2Ygc3VicXVlcnkgKi8KIAlSZWxpZHMJCXJlbGlkczsJCQkvKiByZWxp ZHMgd2l0aGluIHN1YnF1ZXJ5LCBhcyBudW1iZXJlZCBhZnRlcgogCQkJCQkJCQkgKiBwdWxsdXAg KHNldCBvbmx5IGlmIHRhcmdldF9ydGUtPmxhdGVyYWwpICovCkBAIC0xMjczLDYgKzEyNzgsNyBA QCBwdWxsX3VwX3NpbXBsZV9zdWJxdWVyeShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqanRub2Rl LCBSYW5nZVRibEVudHJ5ICpydGUsCiAJICovCiAJcnZjb250ZXh0LnJvb3QgPSByb290OwogCXJ2 Y29udGV4dC50YXJnZXRsaXN0ID0gc3VicXVlcnktPnRhcmdldExpc3Q7CisJcnZjb250ZXh0LnJl c3VsdF9yZWxhdGlvbiA9IDA7CiAJcnZjb250ZXh0LnRhcmdldF9ydGUgPSBydGU7CiAJaWYgKHJ0 ZS0+bGF0ZXJhbCkKIAl7CkBAIC0xODMzLDYgKzE4MzksNyBAQCBwdWxsX3VwX3NpbXBsZV92YWx1 ZXMoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9kZSwgUmFuZ2VUYmxFbnRyeSAqcnRlKQog CX0KIAlydmNvbnRleHQucm9vdCA9IHJvb3Q7CiAJcnZjb250ZXh0LnRhcmdldGxpc3QgPSB0bGlz dDsKKwlydmNvbnRleHQucmVzdWx0X3JlbGF0aW9uID0gMDsKIAlydmNvbnRleHQudGFyZ2V0X3J0 ZSA9IHJ0ZTsKIAlydmNvbnRleHQucmVsaWRzID0gTlVMTDsJLyogY2FuJ3QgYmUgYW55IGxhdGVy YWwgcmVmZXJlbmNlcyBoZXJlICovCiAJcnZjb250ZXh0Lm51bGxpbmZvID0gTlVMTDsKQEAgLTE5 OTIsNiArMTk5OSw3IEBAIHB1bGxfdXBfY29uc3RhbnRfZnVuY3Rpb24oUGxhbm5lckluZm8gKnJv b3QsIE5vZGUgKmp0bm9kZSwKIAkJCQkJCQkJCQkJCQkgIDEsCS8qIHJlc25vICovCiAJCQkJCQkJ CQkJCQkJICBOVUxMLCAvKiByZXNuYW1lICovCiAJCQkJCQkJCQkJCQkJICBmYWxzZSkpOwkvKiBy ZXNqdW5rICovCisJcnZjb250ZXh0LnJlc3VsdF9yZWxhdGlvbiA9IDA7CiAJcnZjb250ZXh0LnRh cmdldF9ydGUgPSBydGU7CiAKIAkvKgpAQCAtMjQ5MCw2ICsyNDk4LDEwIEBAIHB1bGx1cF9yZXBs YWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJYm9vbAkJbmVlZF9waHY7CiAJTm9kZQkgICAq bmV3bm9kZTsKIAorCS8qIFN5c3RlbSBjb2x1bW5zIGFyZSBub3QgcmVwbGFjZWQuICovCisJaWYg KHZhcmF0dG5vIDwgSW52YWxpZEF0dHJOdW1iZXIpCisJCXJldHVybiAoTm9kZSAqKSBjb3B5T2Jq ZWN0KHZhcik7CisKIAkvKgogCSAqIFdlIG5lZWQgYSBQbGFjZUhvbGRlclZhciBpZiB0aGUgVmFy LXRvLWJlLXJlcGxhY2VkIGhhcyBub25lbXB0eQogCSAqIHZhcm51bGxpbmdyZWxzICh1bmxlc3Mg d2UgZmluZCBiZWxvdyB0aGF0IHRoZSByZXBsYWNlbWVudCBleHByZXNzaW9uIGlzCkBAIC0yNTE2 LDg1ICsyNTI4LDQzIEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJ CXZhcmF0dG5vIDw9IGxpc3RfbGVuZ3RoKHJjb24tPnRhcmdldGxpc3QpICYmCiAJCXJjb24tPnJ2 X2NhY2hlW3ZhcmF0dG5vXSAhPSBOVUxMKQogCXsKLQkJLyogSnVzdCBjb3B5IHRoZSBlbnRyeSBh bmQgZmFsbCB0aHJvdWdoIHRvIGFkanVzdCBwaGxldmVsc3VwIGV0YyAqLworCQkvKiBDb3B5IHRo ZSBjYWNoZWQgaXRlbSBhbmQgYWRqdXN0IGl0cyB2YXJsZXZlbHN1cCAqLwogCQluZXdub2RlID0g Y29weU9iamVjdChyY29uLT5ydl9jYWNoZVt2YXJhdHRub10pOworCQlpZiAodmFyLT52YXJsZXZl bHN1cCA+IDApCisJCQlJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcChuZXdub2RlLCB2YXItPnZhcmxl dmVsc3VwLCAwKTsKIAl9Ci0JZWxzZSBpZiAodmFyYXR0bm8gPT0gSW52YWxpZEF0dHJOdW1iZXIp CisJZWxzZQogCXsKLQkJLyogTXVzdCBleHBhbmQgd2hvbGUtdHVwbGUgcmVmZXJlbmNlIGludG8g Um93RXhwciAqLwotCQlSb3dFeHByICAgICpyb3dleHByOwotCQlMaXN0CSAgICpjb2xuYW1lczsK LQkJTGlzdAkgICAqZmllbGRzOwotCQlib29sCQlzYXZlX3dyYXBfbm9uX3ZhcnMgPSByY29uLT53 cmFwX25vbl92YXJzOwotCQlpbnQJCQlzYXZlX3N1YmxldmVsc3VwID0gY29udGV4dC0+c3VibGV2 ZWxzX3VwOwotCiAJCS8qCi0JCSAqIElmIGdlbmVyYXRpbmcgYW4gZXhwYW5zaW9uIGZvciBhIHZh ciBvZiBhIG5hbWVkIHJvd3R5cGUgKGllLCB0aGlzCi0JCSAqIGlzIGEgcGxhaW4gcmVsYXRpb24g UlRFKSwgdGhlbiB3ZSBtdXN0IGluY2x1ZGUgZHVtbXkgaXRlbXMgZm9yCi0JCSAqIGRyb3BwZWQg Y29sdW1ucy4gIElmIHRoZSB2YXIgaXMgUkVDT1JEIChpZSwgdGhpcyBpcyBhIEpPSU4pLCB0aGVu Ci0JCSAqIG9taXQgZHJvcHBlZCBjb2x1bW5zLiAgSW4gdGhlIGxhdHRlciBjYXNlLCBhdHRhY2gg Y29sdW1uIG5hbWVzIHRvCi0JCSAqIHRoZSBSb3dFeHByIGZvciB1c2Ugb2YgdGhlIGV4ZWN1dG9y IGFuZCBydWxldXRpbHMuYy4KLQkJICoKLQkJICogSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjYWNo ZSB0aGUgcmVzdWx0cywgd2UgYWx3YXlzIGdlbmVyYXRlIHRoZQotCQkgKiBleHBhbnNpb24gd2l0 aCB2YXJsZXZlbHN1cCA9IDAsIGFuZCB0aGVuIGFkanVzdCBiZWxvdyBpZiBuZWVkZWQuCisJCSAq IEdlbmVyYXRlIHRoZSByZXBsYWNlbWVudCBleHByZXNzaW9uLiBUaGlzIHRha2VzIGNhcmUgb2Yg ZXhwYW5kaW5nCisJCSAqIHdob2xlcm93IHJlZmVyZW5jZXMsIGFzIHdlbGwgYXMgYWRqdXN0aW5n IHZhcmxldmVsc3VwIGFuZCBkZWFsaW5nCisJCSAqIHdpdGggbm9uLWRlZmF1bHQgdmFycmV0dXJu aW5ndHlwZS4KIAkJICovCi0JCWV4cGFuZFJURShyY29uLT50YXJnZXRfcnRlLAotCQkJCSAgdmFy LT52YXJubywgMCAvKiBub3QgdmFybGV2ZWxzdXAgKi8gLAotCQkJCSAgdmFyLT52YXJyZXR1cm5p bmd0eXBlLCB2YXItPmxvY2F0aW9uLAotCQkJCSAgKHZhci0+dmFydHlwZSAhPSBSRUNPUkRPSUQp LAotCQkJCSAgJmNvbG5hbWVzLCAmZmllbGRzKTsKLQkJLyogRXhwYW5kIHRoZSBnZW5lcmF0ZWQg cGVyLWZpZWxkIFZhcnMsIGJ1dCBkb24ndCBpbnNlcnQgUEhWcyB0aGVyZSAqLwotCQlyY29uLT53 cmFwX25vbl92YXJzID0gZmFsc2U7Ci0JCWNvbnRleHQtPnN1YmxldmVsc191cCA9IDA7CS8qIHRv IG1hdGNoIHRoZSBleHBhbmRSVEUgb3V0cHV0ICovCi0JCWZpZWxkcyA9IChMaXN0ICopIHJlcGxh Y2VfcnRlX3ZhcmlhYmxlc19tdXRhdG9yKChOb2RlICopIGZpZWxkcywKLQkJCQkJCQkJCQkJCQkJ Y29udGV4dCk7Ci0JCXJjb24tPndyYXBfbm9uX3ZhcnMgPSBzYXZlX3dyYXBfbm9uX3ZhcnM7Ci0J CWNvbnRleHQtPnN1YmxldmVsc191cCA9IHNhdmVfc3VibGV2ZWxzdXA7Ci0KLQkJcm93ZXhwciA9 IG1ha2VOb2RlKFJvd0V4cHIpOwotCQlyb3dleHByLT5hcmdzID0gZmllbGRzOwotCQlyb3dleHBy LT5yb3dfdHlwZWlkID0gdmFyLT52YXJ0eXBlOwotCQlyb3dleHByLT5yb3dfZm9ybWF0ID0gQ09F UkNFX0lNUExJQ0lUX0NBU1Q7Ci0JCXJvd2V4cHItPmNvbG5hbWVzID0gKHZhci0+dmFydHlwZSA9 PSBSRUNPUkRPSUQpID8gY29sbmFtZXMgOiBOSUw7Ci0JCXJvd2V4cHItPmxvY2F0aW9uID0gdmFy LT5sb2NhdGlvbjsKLQkJbmV3bm9kZSA9IChOb2RlICopIHJvd2V4cHI7Ci0KLQkJLyoKLQkJICog SW5zZXJ0IFBsYWNlSG9sZGVyVmFyIGlmIG5lZWRlZC4gIE5vdGljZSB0aGF0IHdlIGFyZSB3cmFw cGluZyBvbmUKLQkJICogUGxhY2VIb2xkZXJWYXIgYXJvdW5kIHRoZSB3aG9sZSBSb3dFeHByLCBy YXRoZXIgdGhhbiBwdXR0aW5nIG9uZQotCQkgKiBhcm91bmQgZWFjaCBlbGVtZW50IG9mIHRoZSBy b3cuICBUaGlzIGlzIGJlY2F1c2Ugd2UgbmVlZCB0aGUKLQkJICogZXhwcmVzc2lvbiB0byB5aWVs ZCBOVUxMLCBub3QgUk9XKE5VTEwsTlVMTCwuLi4pIHdoZW4gaXQgaXMgZm9yY2VkCi0JCSAqIHRv IG51bGwgYnkgYW4gb3V0ZXIgam9pbi4KLQkJICovCi0JCWlmIChuZWVkX3BodikKLQkJewotCQkJ bmV3bm9kZSA9IChOb2RlICopCi0JCQkJbWFrZV9wbGFjZWhvbGRlcl9leHByKHJjb24tPnJvb3Qs Ci0JCQkJCQkJCQkgIChFeHByICopIG5ld25vZGUsCi0JCQkJCQkJCQkgIGJtc19tYWtlX3Npbmds ZXRvbihyY29uLT52YXJubykpOwotCQkJLyogY2FjaGUgaXQgd2l0aCB0aGUgUEhWLCBhbmQgd2l0 aCBwaGxldmVsc3VwIGV0YyBub3Qgc2V0IHlldCAqLwotCQkJcmNvbi0+cnZfY2FjaGVbSW52YWxp ZEF0dHJOdW1iZXJdID0gY29weU9iamVjdChuZXdub2RlKTsKLQkJfQotCX0KLQllbHNlCi0Jewot CQkvKiBOb3JtYWwgY2FzZSByZWZlcmVuY2luZyBvbmUgdGFyZ2V0bGlzdCBlbGVtZW50ICovCi0J CVRhcmdldEVudHJ5ICp0bGUgPSBnZXRfdGxlX2J5X3Jlc25vKHJjb24tPnRhcmdldGxpc3QsIHZh cmF0dG5vKTsKLQotCQlpZiAodGxlID09IE5VTEwpCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0J CQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgYXR0cmlidXRlICVkIGluIHN1YnF1ZXJ5IHRh cmdldGxpc3QiLAotCQkJCSB2YXJhdHRubyk7Ci0KLQkJLyogTWFrZSBhIGNvcHkgb2YgdGhlIHRs aXN0IGl0ZW0gdG8gcmV0dXJuICovCi0JCW5ld25vZGUgPSAoTm9kZSAqKSBjb3B5T2JqZWN0KHRs ZS0+ZXhwcik7CisJCW5ld25vZGUgPSBSZXBsYWNlVmFyRnJvbVRhcmdldExpc3QodmFyLAorCQkJ CQkJCQkJCSAgIHJjb24tPnRhcmdldF9ydGUsCisJCQkJCQkJCQkJICAgcmNvbi0+dGFyZ2V0bGlz dCwKKwkJCQkJCQkJCQkgICByY29uLT5yZXN1bHRfcmVsYXRpb24sCisJCQkJCQkJCQkJICAgUkVQ TEFDRVZBUlNfUkVQT1JUX0VSUk9SLAorCQkJCQkJCQkJCSAgIDApOwogCiAJCS8qIEluc2VydCBQ bGFjZUhvbGRlclZhciBpZiBuZWVkZWQgKi8KIAkJaWYgKG5lZWRfcGh2KQogCQl7CiAJCQlib29s CQl3cmFwOwogCi0JCQlpZiAobmV3bm9kZSAmJiBJc0EobmV3bm9kZSwgVmFyKSAmJgotCQkJCSgo VmFyICopIG5ld25vZGUpLT52YXJsZXZlbHN1cCA9PSAwKQorCQkJaWYgKHZhcmF0dG5vID09IElu dmFsaWRBdHRyTnVtYmVyKQorCQkJeworCQkJCS8qCisJCQkJICogQSB3aG9sZXJvdyBWYXIgd2ls bCBoYXZlIGJlZW4gZXhwYW5kZWQgdG8gYSBSb3dFeHByLCB3aGljaAorCQkJCSAqIHdlIHdyYXAg d2l0aCBhIHNpbmdsZSBQbGFjZUhvbGRlclZhciwgcmF0aGVyIHRoYW4gcHV0dGluZworCQkJCSAq IG9uZSBhcm91bmQgZWFjaCBlbGVtZW50IG9mIHRoZSByb3cuIFRoaXMgaXMgYmVjYXVzZSB3ZSBu ZWVkCisJCQkJICogdGhlIGV4cHJlc3Npb24gdG8geWllbGQgTlVMTCwgbm90IFJPVyhOVUxMLE5V TEwsLi4uKSB3aGVuCisJCQkJICogaXQgaXMgZm9yY2VkIHRvIG51bGwgYnkgYW4gb3V0ZXIgam9p bi4KKwkJCQkgKi8KKwkJCQl3cmFwID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKG5ld25vZGUg JiYgSXNBKG5ld25vZGUsIFZhcikgJiYKKwkJCQkJICgoVmFyICopIG5ld25vZGUpLT52YXJsZXZl bHN1cCA9PSB2YXItPnZhcmxldmVsc3VwKQogCQkJewogCQkJCS8qCiAJCQkJICogU2ltcGxlIFZh cnMgYWx3YXlzIGVzY2FwZSBiZWluZyB3cmFwcGVkLCB1bmxlc3MgdGhleSBhcmUKQEAgLTI2MTYs NyArMjU4Niw3IEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCQkJ fQogCQkJfQogCQkJZWxzZSBpZiAobmV3bm9kZSAmJiBJc0EobmV3bm9kZSwgUGxhY2VIb2xkZXJW YXIpICYmCi0JCQkJCSAoKFBsYWNlSG9sZGVyVmFyICopIG5ld25vZGUpLT5waGxldmVsc3VwID09 IDApCisJCQkJCSAoKFBsYWNlSG9sZGVyVmFyICopIG5ld25vZGUpLT5waGxldmVsc3VwID09IHZh ci0+dmFybGV2ZWxzdXApCiAJCQl7CiAJCQkJLyogVGhlIHNhbWUgcnVsZXMgYXBwbHkgZm9yIGEg UGxhY2VIb2xkZXJWYXIgKi8KIAkJCQl3cmFwID0gZmFsc2U7CkBAIC0yNzM1LDE0ICsyNzA1LDI1 IEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCQkJCW1ha2VfcGxh Y2Vob2xkZXJfZXhwcihyY29uLT5yb290LAogCQkJCQkJCQkJCSAgKEV4cHIgKikgbmV3bm9kZSwK IAkJCQkJCQkJCQkgIGJtc19tYWtlX3NpbmdsZXRvbihyY29uLT52YXJubykpOworCQkJCSgoUGxh Y2VIb2xkZXJWYXIgKikgbmV3bm9kZSktPnBobGV2ZWxzdXAgPSB2YXItPnZhcmxldmVsc3VwOwog CiAJCQkJLyoKIAkJCQkgKiBDYWNoZSBpdCBpZiBwb3NzaWJsZSAoaWUsIGlmIHRoZSBhdHRubyBp cyBpbiByYW5nZSwgd2hpY2gKLQkJCQkgKiBpdCBwcm9iYWJseSBhbHdheXMgc2hvdWxkIGJlKS4K KwkJCQkgKiBpdCBwcm9iYWJseSBhbHdheXMgc2hvdWxkIGJlKSwgZW5zdXJpbmcgdGhhdCB0aGUg Y2FjaGVkCisJCQkJICogaXRlbSBoYXMgcGhsZXZlbHN1cCA9IDAuCiAJCQkJICovCi0JCQkJaWYg KHZhcmF0dG5vID4gSW52YWxpZEF0dHJOdW1iZXIgJiYKKwkJCQlpZiAodmFyYXR0bm8gPj0gSW52 YWxpZEF0dHJOdW1iZXIgJiYKIAkJCQkJdmFyYXR0bm8gPD0gbGlzdF9sZW5ndGgocmNvbi0+dGFy Z2V0bGlzdCkpCi0JCQkJCXJjb24tPnJ2X2NhY2hlW3ZhcmF0dG5vXSA9IGNvcHlPYmplY3QobmV3 bm9kZSk7CisJCQkJeworCQkJCQlOb2RlCSAgICpjYWNoZW5vZGUgPSBjb3B5T2JqZWN0KG5ld25v ZGUpOworCisJCQkJCWlmICh2YXItPnZhcmxldmVsc3VwID4gMCkKKwkJCQkJCUluY3JlbWVudFZh clN1YmxldmVsc1VwKGNhY2hlbm9kZSwKKwkJCQkJCQkJCQkJCS0oKGludCkgdmFyLT52YXJsZXZl bHN1cCksCisJCQkJCQkJCQkJCQkwKTsKKworCQkJCQlyY29uLT5ydl9jYWNoZVt2YXJhdHRub10g PSBjYWNoZW5vZGU7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMjc1NCw3ICsyNzM1LDcgQEAg cHVsbHVwX3JlcGxhY2VfdmFyc19jYWxsYmFjayhWYXIgKnZhciwKIAkJewogCQkJVmFyCQkgICAq bmV3dmFyID0gKFZhciAqKSBuZXdub2RlOwogCi0JCQlBc3NlcnQobmV3dmFyLT52YXJsZXZlbHN1 cCA9PSAwKTsKKwkJCUFzc2VydChuZXd2YXItPnZhcmxldmVsc3VwID09IHZhci0+dmFybGV2ZWxz dXApOwogCQkJbmV3dmFyLT52YXJudWxsaW5ncmVscyA9IGJtc19hZGRfbWVtYmVycyhuZXd2YXIt PnZhcm51bGxpbmdyZWxzLAogCQkJCQkJCQkJCQkJCSB2YXItPnZhcm51bGxpbmdyZWxzKTsKIAkJ fQpAQCAtMjc2Miw3ICsyNzQzLDcgQEAgcHVsbHVwX3JlcGxhY2VfdmFyc19jYWxsYmFjayhWYXIg KnZhciwKIAkJewogCQkJUGxhY2VIb2xkZXJWYXIgKm5ld3BodiA9IChQbGFjZUhvbGRlclZhciAq KSBuZXdub2RlOwogCi0JCQlBc3NlcnQobmV3cGh2LT5waGxldmVsc3VwID09IDApOworCQkJQXNz ZXJ0KG5ld3Bodi0+cGhsZXZlbHN1cCA9PSB2YXItPnZhcmxldmVsc3VwKTsKIAkJCW5ld3Bodi0+ cGhudWxsaW5ncmVscyA9IGJtc19hZGRfbWVtYmVycyhuZXdwaHYtPnBobnVsbGluZ3JlbHMsCiAJ CQkJCQkJCQkJCQkJdmFyLT52YXJudWxsaW5ncmVscyk7CiAJCX0KQEAgLTI4MjUsMTAgKzI4MDYs NiBAQCBwdWxsdXBfcmVwbGFjZV92YXJzX2NhbGxiYWNrKFZhciAqdmFyLAogCQl9CiAJfQogCi0J LyogTXVzdCBhZGp1c3QgdmFybGV2ZWxzdXAgaWYgcmVwbGFjZWQgVmFyIGlzIHdpdGhpbiBhIHN1 YnF1ZXJ5ICovCi0JaWYgKHZhci0+dmFybGV2ZWxzdXAgPiAwKQotCQlJbmNyZW1lbnRWYXJTdWJs ZXZlbHNVcChuZXdub2RlLCB2YXItPnZhcmxldmVsc3VwLCAwKTsKLQogCXJldHVybiBuZXdub2Rl OwogfQogCkBAIC0yOTQ3LDYgKzI5MjQsMTM1IEBAIGZsYXR0ZW5fc2ltcGxlX3VuaW9uX2FsbChQ bGFubmVySW5mbyAqcm9vdCkKIH0KIAogCisvKgorICogZXhwYW5kX3ZpcnR1YWxfZ2VuZXJhdGVk X2NvbHVtbnMKKyAqCQlFeHBhbmQgYWxsIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiByZWZlcmVu Y2VzIGluIGEgcXVlcnkuCisgKgorICogVGhpcyBzY2FucyB0aGUgcmFuZ2V0YWJsZSBmb3IgcmVs YXRpb25zIHdpdGggdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucywgYW5kCisgKiByZXBsYWNlcyBh bGwgVmFyIG5vZGVzIGluIHRoZSBxdWVyeSB0aGF0IHJlZmVyIHRvIHN1Y2ggY29sdW1ucyB3aXRo IHRoZQorICogYXBwcm9wcmlhdGUgZXhwcmVzc2lvbnMuICBOb3RlIHRoYXQgdGhpcyBoYXBwZW5z IGFmdGVyIHN1YnF1ZXJ5IHB1bGx1cCwgYW5kCisgKiBpdCBkb2VzIG5vdCByZWN1cnNlIGludG8g YW55IHJlbWFpbmluZyBzdWJxdWVyaWVzOyB0aGF0IGlzIHRha2VuIGNhcmUgb2YKKyAqIHdoZW4g dGhvc2Ugc3VicXVlcmllcyBhcmUgcGxhbm5lZC4KKyAqCisgKiBSZXR1cm5zIGEgbW9kaWZpZWQg Y29weSBvZiB0aGUgcXVlcnkgdHJlZSwgaWYgYW55IHJlbGF0aW9ucyB3aXRoIHZpcnR1YWwKKyAq IGdlbmVyYXRlZCBjb2x1bW5zIGFyZSBwcmVzZW50LgorICovCitRdWVyeSAqCitleHBhbmRfdmly dHVhbF9nZW5lcmF0ZWRfY29sdW1ucyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlRdWVyeQkgICAq cGFyc2UgPSByb290LT5wYXJzZTsKKwlpbnQJCQlydF9pbmRleDsKKwlMaXN0Q2VsbCAgICpsYzsK KworCXJ0X2luZGV4ID0gMDsKKwlmb3JlYWNoKGxjLCBwYXJzZS0+cnRhYmxlKQorCXsKKwkJUmFu Z2VUYmxFbnRyeSAqcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0KGxjKTsKKwkJUmVsYXRp b24JcmVsOworCQlUdXBsZURlc2MJdHVwZGVzYzsKKworCQkrK3J0X2luZGV4OworCisJCS8qCisJ CSAqIE9ubHkgbm9ybWFsIHJlbGF0aW9ucyBjYW4gaGF2ZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1 bW5zLgorCQkgKi8KKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250 aW51ZTsKKworCQlyZWwgPSB0YWJsZV9vcGVuKHJ0ZS0+cmVsaWQsIE5vTG9jayk7CisKKwkJdHVw ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJaWYgKHR1cGRlc2MtPmNvbnN0ciAmJiB0 dXBkZXNjLT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCkKKwkJeworCQkJTGlzdAkgICAq dGxpc3QgPSBOSUw7CisJCQlwdWxsdXBfcmVwbGFjZV92YXJzX2NvbnRleHQgcnZjb250ZXh0Owor CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJCQl7CisJCQkJ Rm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCQkJ aW50CQkJYXR0bnVtID0gaSArIDE7CisJCQkJVGFyZ2V0RW50cnkgKnRlOworCisJCQkJaWYgKGF0 dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpCisJCQkJewor CQkJCQlOb2RlCSAgICpkZWZleHByOworCQkJCQlPaWQJCQlhdHRjb2xsaWQ7CisKKwkJCQkJZGVm ZXhwciA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bnVtKTsKKwkJCQkJaWYgKGRlZmV4 cHIgPT0gTlVMTCkKKwkJCQkJCWVsb2coRVJST1IsICJubyBnZW5lcmF0aW9uIGV4cHJlc3Npb24g Zm91bmQgZm9yIGNvbHVtbiBudW1iZXIgJWQgb2YgdGFibGUgXCIlc1wiIiwKKwkJCQkJCQkgYXR0 bnVtLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCQkJCQkvKgorCQkJCQkgKiBJ ZiB0aGUgY29sdW1uIGRlZmluaXRpb24gaGFzIGEgY29sbGF0aW9uIGFuZCBpdCBpcworCQkJCQkg KiBkaWZmZXJlbnQgZnJvbSB0aGUgY29sbGF0aW9uIG9mIHRoZSBnZW5lcmF0aW9uCisJCQkJCSAq IGV4cHJlc3Npb24sIHB1dCBhIENPTExBVEUgY2xhdXNlIGFyb3VuZCB0aGUgZXhwcmVzc2lvbi4K KwkJCQkJICovCisJCQkJCWF0dGNvbGxpZCA9IGF0dHItPmF0dGNvbGxhdGlvbjsKKwkJCQkJaWYg KGF0dGNvbGxpZCAmJiBhdHRjb2xsaWQgIT0gZXhwckNvbGxhdGlvbihkZWZleHByKSkKKwkJCQkJ eworCQkJCQkJQ29sbGF0ZUV4cHIgKmNlID0gbWFrZU5vZGUoQ29sbGF0ZUV4cHIpOworCisJCQkJ CQljZS0+YXJnID0gKEV4cHIgKikgZGVmZXhwcjsKKwkJCQkJCWNlLT5jb2xsT2lkID0gYXR0Y29s bGlkOworCQkJCQkJY2UtPmxvY2F0aW9uID0gLTE7CisKKwkJCQkJCWRlZmV4cHIgPSAoTm9kZSAq KSBjZTsKKwkJCQkJfQorCisJCQkJCUNoYW5nZVZhck5vZGVzKGRlZmV4cHIsIDEsIHJ0X2luZGV4 LCAwKTsKKworCQkJCQl0ZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSBkZWZleHByLCBhdHRu dW0sIDAsIGZhbHNlKTsKKwkJCQkJdGxpc3QgPSBsYXBwZW5kKHRsaXN0LCB0ZSk7CisJCQkJfQor CQkJCWVsc2UKKwkJCQl7CisJCQkJCVZhcgkJICAgKnZhcjsKKworCQkJCQl2YXIgPSBtYWtlVmFy KHJ0X2luZGV4LAorCQkJCQkJCQkgIGF0dG51bSwKKwkJCQkJCQkJICBhdHRyLT5hdHR0eXBpZCwK KwkJCQkJCQkJICBhdHRyLT5hdHR0eXBtb2QsCisJCQkJCQkJCSAgYXR0ci0+YXR0Y29sbGF0aW9u LAorCQkJCQkJCQkgIDApOworCQkJCQl0ZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSB2YXIs IGF0dG51bSwgMCwgZmFsc2UpOworCQkJCQl0bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRlKTsKKwkJ CQl9CisJCQl9CisKKwkJCUFzc2VydChsaXN0X2xlbmd0aCh0bGlzdCkgPiAwKTsKKworCQkJcnZj b250ZXh0LnJvb3QgPSByb290OworCQkJcnZjb250ZXh0LnRhcmdldGxpc3QgPSB0bGlzdDsKKwkJ CXJ2Y29udGV4dC5yZXN1bHRfcmVsYXRpb24gPSBwYXJzZS0+cmVzdWx0UmVsYXRpb247CisJCQly dmNvbnRleHQudGFyZ2V0X3J0ZSA9IHJ0ZTsKKwkJCXJ2Y29udGV4dC5yZWxpZHMgPSBOVUxMOwor CQkJcnZjb250ZXh0Lm51bGxpbmZvID0gTlVMTDsKKwkJCXJ2Y29udGV4dC5vdXRlcl9oYXNTdWJM aW5rcyA9IE5VTEw7CisJCQlydmNvbnRleHQudmFybm8gPSBydF9pbmRleDsKKwkJCXJ2Y29udGV4 dC53cmFwX25vbl92YXJzID0gZmFsc2U7CisJCQlydmNvbnRleHQucnZfY2FjaGUgPSBwYWxsb2Mw KChsaXN0X2xlbmd0aCh0bGlzdCkgKyAxKSAqCisJCQkJCQkJCQkJIHNpemVvZihOb2RlICopKTsK KworCQkJLyoKKwkJCSAqIElmIHRoZSBxdWVyeSB1c2VzIGdyb3VwaW5nIHNldHMsIHdlIG5lZWQg YSBQbGFjZUhvbGRlclZhciBmb3IKKwkJCSAqIGFueXRoaW5nIHRoYXQncyBub3QgYSBzaW1wbGUg VmFyLiAgVGhpcyBlbnN1cmVzIHRoYXQKKwkJCSAqIGV4cHJlc3Npb25zIHJldGFpbiB0aGVpciBz ZXBhcmF0ZSBpZGVudGl0eSBzbyB0aGF0IHRoZXkgd2lsbAorCQkJICogbWF0Y2ggZ3JvdXBpbmcg c2V0IGNvbHVtbnMgd2hlbiBhcHByb3ByaWF0ZS4KKwkJCSAqLworCQkJaWYgKHBhcnNlLT5ncm91 cGluZ1NldHMpCisJCQkJcnZjb250ZXh0LndyYXBfbm9uX3ZhcnMgPSB0cnVlOworCisJCQlwYXJz ZSA9IChRdWVyeSAqKSBwdWxsdXBfcmVwbGFjZV92YXJzKChOb2RlICopIHBhcnNlLCAmcnZjb250 ZXh0KTsKKwkJfQorCisJCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwl9CisKKwlyZXR1cm4g cGFyc2U7Cit9CisKKwogLyoKICAqIHJlZHVjZV9vdXRlcl9qb2lucwogICoJCUF0dGVtcHQgdG8g cmVkdWNlIG91dGVyIGpvaW5zIHRvIHBsYWluIGlubmVyIGpvaW5zLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9y ZXdyaXRlSGFuZGxlci5jCmluZGV4IGU5OTZiZGMwZDIxLi43YTM5YWJkNGQ4NiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5k L3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuYwpAQCAtMjE5MCwxMCArMjE5MCw2IEBAIGZpcmVSSVJy dWxlcyhRdWVyeSAqcGFyc2V0cmVlLCBMaXN0ICphY3RpdmVSSVJzKQogCSAqIHJlcXVpcmVzIHNw ZWNpYWwgcmVjdXJzaW9uIGRldGVjdGlvbiBpZiB0aGUgbmV3IHF1YWxzIGhhdmUgc3VibGluawog CSAqIHN1YnF1ZXJpZXMsIGFuZCBpZiB3ZSBkaWQgaXQgaW4gdGhlIGxvb3AgYWJvdmUgcXVlcnlf dHJlZV93YWxrZXIgd291bGQKIAkgKiB0aGVuIHJlY3Vyc2UgaW50byB0aG9zZSBxdWFscyBhIHNl Y29uZCB0aW1lLgotCSAqCi0JICogRmluYWxseSwgd2UgZXhwYW5kIGFueSB2aXJ0dWFsIGdlbmVy YXRlZCBjb2x1bW5zLiAgV2UgZG8gdGhpcyBhZnRlcgotCSAqIGVhY2ggdGFibGUncyBSTFMgcG9s aWNpZXMgYXJlIGFwcGxpZWQgYmVjYXVzZSB0aGUgUkxTIHBvbGljaWVzIG1pZ2h0Ci0JICogYWxz byByZWZlciB0byB0aGUgdGFibGUncyB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLgogCSAqLwog CXJ0X2luZGV4ID0gMDsKIAlmb3JlYWNoKGxjLCBwYXJzZXRyZWUtPnJ0YWJsZSkKQEAgLTIyMDcs MTEgKzIyMDMsMTAgQEAgZmlyZVJJUnJ1bGVzKFF1ZXJ5ICpwYXJzZXRyZWUsIExpc3QgKmFjdGl2 ZVJJUnMpCiAKIAkJKytydF9pbmRleDsKIAotCQkvKgotCQkgKiBPbmx5IG5vcm1hbCByZWxhdGlv bnMgY2FuIGhhdmUgUkxTIHBvbGljaWVzIG9yIHZpcnR1YWwgZ2VuZXJhdGVkCi0JCSAqIGNvbHVt bnMuCi0JCSAqLwotCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJLyogT25s eSBub3JtYWwgcmVsYXRpb25zIGNhbiBoYXZlIFJMUyBwb2xpY2llcyAqLworCQlpZiAocnRlLT5y dGVraW5kICE9IFJURV9SRUxBVElPTiB8fAorCQkJKHJ0ZS0+cmVsa2luZCAhPSBSRUxLSU5EX1JF TEFUSU9OICYmCisJCQkgcnRlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp KQogCQkJY29udGludWU7CiAKIAkJcmVsID0gdGFibGVfb3BlbihydGUtPnJlbGlkLCBOb0xvY2sp OwpAQCAtMjMwMCwxNiArMjI5NSw2IEBAIGZpcmVSSVJydWxlcyhRdWVyeSAqcGFyc2V0cmVlLCBM aXN0ICphY3RpdmVSSVJzKQogCQlpZiAoaGFzU3ViTGlua3MpCiAJCQlwYXJzZXRyZWUtPmhhc1N1 YkxpbmtzID0gdHJ1ZTsKIAotCQkvKgotCQkgKiBFeHBhbmQgYW55IHJlZmVyZW5jZXMgdG8gdmly dHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBvZiB0aGlzIHRhYmxlLgotCQkgKiBOb3RlIHRoYXQgc3Vi cXVlcmllcyBpbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gZXhwcmVzc2lvbnMgYXJlCi0JCSAq IG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLCBzbyB0aGlzIGNhbm5vdCBhZGQgYW55IG1vcmUgc3Vi bGlua3MuCi0JCSAqLwotCQlwYXJzZXRyZWUgPSAoUXVlcnkgKikKLQkJCWV4cGFuZF9nZW5lcmF0 ZWRfY29sdW1uc19pbnRlcm5hbCgoTm9kZSAqKSBwYXJzZXRyZWUsCi0JCQkJCQkJCQkJCSAgcmVs LCBydF9pbmRleCwgcnRlLAotCQkJCQkJCQkJCQkgIHBhcnNldHJlZS0+cmVzdWx0UmVsYXRpb24p OwotCiAJCXRhYmxlX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3Jp dGVNYW5pcC5jCmluZGV4IDk0MzM1NDhkMjc5Li5lODE2MjRmOWIwOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRl L3Jld3JpdGVNYW5pcC5jCkBAIC0xODE0LDYgKzE4MTQsMjMgQEAgUmVwbGFjZVZhcnNGcm9tVGFy Z2V0TGlzdF9jYWxsYmFjayhWYXIgKnZhciwKIAkJCQkJCQkJICAgcmVwbGFjZV9ydGVfdmFyaWFi bGVzX2NvbnRleHQgKmNvbnRleHQpCiB7CiAJUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdF9jb250 ZXh0ICpyY29uID0gKFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY29udGV4dCAqKSBjb250ZXh0 LT5jYWxsYmFja19hcmc7CisKKwlyZXR1cm4gUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0KHZhciwK KwkJCQkJCQkJCXJjb24tPnRhcmdldF9ydGUsCisJCQkJCQkJCQlyY29uLT50YXJnZXRsaXN0LAor CQkJCQkJCQkJcmNvbi0+cmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJCQkJcmNvbi0+bm9tYXRjaF9v cHRpb24sCisJCQkJCQkJCQlyY29uLT5ub21hdGNoX3Zhcm5vKTsKK30KKworTm9kZSAqCitSZXBs YWNlVmFyRnJvbVRhcmdldExpc3QoVmFyICp2YXIsCisJCQkJCQkgUmFuZ2VUYmxFbnRyeSAqdGFy Z2V0X3J0ZSwKKwkJCQkJCSBMaXN0ICp0YXJnZXRsaXN0LAorCQkJCQkJIGludCByZXN1bHRfcmVs YXRpb24sCisJCQkJCQkgUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uIG5vbWF0Y2hfb3B0aW9uLAor CQkJCQkJIGludCBub21hdGNoX3Zhcm5vKQorewogCVRhcmdldEVudHJ5ICp0bGU7CiAKIAlpZiAo dmFyLT52YXJhdHRubyA9PSBJbnZhbGlkQXR0ck51bWJlcikKQEAgLTE4MjIsNiArMTgzOSw3IEBA IFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY2FsbGJhY2soVmFyICp2YXIsCiAJCVJvd0V4cHIg ICAgKnJvd2V4cHI7CiAJCUxpc3QJICAgKmNvbG5hbWVzOwogCQlMaXN0CSAgICpmaWVsZHM7CisJ CUxpc3RDZWxsICAgKmxjOwogCiAJCS8qCiAJCSAqIElmIGdlbmVyYXRpbmcgYW4gZXhwYW5zaW9u IGZvciBhIHZhciBvZiBhIG5hbWVkIHJvd3R5cGUgKGllLCB0aGlzCkBAIC0xODMzLDE1ICsxODUx LDI3IEBAIFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY2FsbGJhY2soVmFyICp2YXIsCiAJCSAq IFRoZSB2YXJyZXR1cm5pbmd0eXBlIGlzIGNvcGllZCBvbnRvIGVhY2ggaW5kaXZpZHVhbCBmaWVs ZCBWYXIsIHNvCiAJCSAqIHRoYXQgaXQgaXMgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiB3ZSByZWN1 cnNlLgogCQkgKi8KLQkJZXhwYW5kUlRFKHJjb24tPnRhcmdldF9ydGUsCisJCWV4cGFuZFJURSh0 YXJnZXRfcnRlLAogCQkJCSAgdmFyLT52YXJubywgdmFyLT52YXJsZXZlbHN1cCwgdmFyLT52YXJy ZXR1cm5pbmd0eXBlLAogCQkJCSAgdmFyLT5sb2NhdGlvbiwgKHZhci0+dmFydHlwZSAhPSBSRUNP UkRPSUQpLAogCQkJCSAgJmNvbG5hbWVzLCAmZmllbGRzKTsKIAkJLyogQWRqdXN0IHRoZSBnZW5l cmF0ZWQgcGVyLWZpZWxkIFZhcnMuLi4gKi8KLQkJZmllbGRzID0gKExpc3QgKikgcmVwbGFjZV9y dGVfdmFyaWFibGVzX211dGF0b3IoKE5vZGUgKikgZmllbGRzLAotCQkJCQkJCQkJCQkJCQljb250 ZXh0KTsKIAkJcm93ZXhwciA9IG1ha2VOb2RlKFJvd0V4cHIpOwotCQlyb3dleHByLT5hcmdzID0g ZmllbGRzOworCQlyb3dleHByLT5hcmdzID0gTklMOworCQlmb3JlYWNoKGxjLCBmaWVsZHMpCisJ CXsKKwkJCU5vZGUJICAgKmZpZWxkID0gbGZpcnN0KGxjKTsKKworCQkJaWYgKGZpZWxkICE9IE5V TEwpCisJCQkJZmllbGQgPSBSZXBsYWNlVmFyRnJvbVRhcmdldExpc3QoKFZhciAqKSBmaWVsZCwK KwkJCQkJCQkJCQkJCSB0YXJnZXRfcnRlLAorCQkJCQkJCQkJCQkJIHRhcmdldGxpc3QsCisJCQkJ CQkJCQkJCQkgcmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJCQkJCQkJIG5vbWF0Y2hfb3B0aW9uLAor CQkJCQkJCQkJCQkJIG5vbWF0Y2hfdmFybm8pOworCisJCQlyb3dleHByLT5hcmdzID0gbGFwcGVu ZChyb3dleHByLT5hcmdzLCBmaWVsZCk7CisJCX0KIAkJcm93ZXhwci0+cm93X3R5cGVpZCA9IHZh ci0+dmFydHlwZTsKIAkJcm93ZXhwci0+cm93X2Zvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNU OwogCQlyb3dleHByLT5jb2xuYW1lcyA9ICh2YXItPnZhcnR5cGUgPT0gUkVDT1JET0lEKSA/IGNv bG5hbWVzIDogTklMOwpAQCAtMTg2MywxMiArMTg5MywxMiBAQCBSZXBsYWNlVmFyc0Zyb21UYXJn ZXRMaXN0X2NhbGxiYWNrKFZhciAqdmFyLAogCX0KIAogCS8qIE5vcm1hbCBjYXNlIHJlZmVyZW5j aW5nIG9uZSB0YXJnZXRsaXN0IGVsZW1lbnQgKi8KLQl0bGUgPSBnZXRfdGxlX2J5X3Jlc25vKHJj b24tPnRhcmdldGxpc3QsIHZhci0+dmFyYXR0bm8pOworCXRsZSA9IGdldF90bGVfYnlfcmVzbm8o dGFyZ2V0bGlzdCwgdmFyLT52YXJhdHRubyk7CiAKIAlpZiAodGxlID09IE5VTEwgfHwgdGxlLT5y ZXNqdW5rKQogCXsKIAkJLyogRmFpbGVkIHRvIGZpbmQgY29sdW1uIGluIHRhcmdldGxpc3QgKi8K LQkJc3dpdGNoIChyY29uLT5ub21hdGNoX29wdGlvbikKKwkJc3dpdGNoIChub21hdGNoX29wdGlv bikKIAkJewogCQkJY2FzZSBSRVBMQUNFVkFSU19SRVBPUlRfRVJST1I6CiAJCQkJLyogZmFsbCB0 aHJvdWdoLCB0aHJvdyBlcnJvciBiZWxvdyAqLwpAQCAtMTg3Niw3ICsxOTA2LDcgQEAgUmVwbGFj ZVZhcnNGcm9tVGFyZ2V0TGlzdF9jYWxsYmFjayhWYXIgKnZhciwKIAogCQkJY2FzZSBSRVBMQUNF VkFSU19DSEFOR0VfVkFSTk86CiAJCQkJdmFyID0gY29weU9iamVjdCh2YXIpOwotCQkJCXZhci0+ dmFybm8gPSByY29uLT5ub21hdGNoX3Zhcm5vOworCQkJCXZhci0+dmFybm8gPSBub21hdGNoX3Zh cm5vOwogCQkJCS8qIHdlIGxlYXZlIHRoZSBzeW50YWN0aWMgcmVmZXJlbnQgYWxvbmUgKi8KIAkJ CQlyZXR1cm4gKE5vZGUgKikgdmFyOwogCkBAIC0xOTMyLDE1ICsxOTYyLDE1IEBAIFJlcGxhY2VW YXJzRnJvbVRhcmdldExpc3RfY2FsbGJhY2soVmFyICp2YXIsCiAJCQkgKiBDb3B5IHZhcnJldHVy bmluZ3R5cGUgb250byBhbnkgVmFycyBpbiB0aGUgdGxpc3QgaXRlbSB0aGF0CiAJCQkgKiByZWZl ciB0byByZXN1bHRfcmVsYXRpb24gKHdoaWNoIGhhZCBiZXR0ZXIgYmUgbm9uLXplcm8pLgogCQkJ ICovCi0JCQlpZiAocmNvbi0+cmVzdWx0X3JlbGF0aW9uID09IDApCisJCQlpZiAocmVzdWx0X3Jl bGF0aW9uID09IDApCiAJCQkJZWxvZyhFUlJPUiwgInZhcmlhYmxlIHJldHVybmluZyBvbGQvbmV3 IGZvdW5kIG91dHNpZGUgUkVUVVJOSU5HIGxpc3QiKTsKIAotCQkJU2V0VmFyUmV0dXJuaW5nVHlw ZSgoTm9kZSAqKSBuZXdub2RlLCByY29uLT5yZXN1bHRfcmVsYXRpb24sCisJCQlTZXRWYXJSZXR1 cm5pbmdUeXBlKChOb2RlICopIG5ld25vZGUsIHJlc3VsdF9yZWxhdGlvbiwKIAkJCQkJCQkJdmFy LT52YXJsZXZlbHN1cCwgdmFyLT52YXJyZXR1cm5pbmd0eXBlKTsKIAogCQkJLyogV3JhcCBpdCBp biBhIFJldHVybmluZ0V4cHIsIGlmIG5lZWRlZCwgcGVyIGNvbW1lbnRzIGFib3ZlICovCiAJCQlp ZiAoIUlzQShuZXdub2RlLCBWYXIpIHx8Ci0JCQkJKChWYXIgKikgbmV3bm9kZSktPnZhcm5vICE9 IHJjb24tPnJlc3VsdF9yZWxhdGlvbiB8fAorCQkJCSgoVmFyICopIG5ld25vZGUpLT52YXJubyAh PSByZXN1bHRfcmVsYXRpb24gfHwKIAkJCQkoKFZhciAqKSBuZXdub2RlKS0+dmFybGV2ZWxzdXAg IT0gdmFyLT52YXJsZXZlbHN1cCkKIAkJCXsKIAkJCQlSZXR1cm5pbmdFeHByICpyZXhwciA9IG1h a2VOb2RlKFJldHVybmluZ0V4cHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3ByZXAuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgKaW5kZXggMGFlNTdlYzI0YTQu LjZiYzc1YWM5ZjM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oCisr KyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJu IHZvaWQgcHVsbF91cF9zdWJsaW5rcyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBw cmVwcm9jZXNzX2Z1bmN0aW9uX3J0ZXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQg cHVsbF91cF9zdWJxdWVyaWVzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGZsYXR0 ZW5fc2ltcGxlX3VuaW9uX2FsbChQbGFubmVySW5mbyAqcm9vdCk7CitleHRlcm4gUXVlcnkgKmV4 cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVy biB2b2lkIHJlZHVjZV9vdXRlcl9qb2lucyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9p ZCByZW1vdmVfdXNlbGVzc19yZXN1bHRfcnRlcyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4g UmVsaWRzIGdldF9yZWxpZHNfaW5fam9pbnRyZWUoTm9kZSAqanRub2RlLCBib29sIGluY2x1ZGVf b3V0ZXJfam9pbnMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5p cC5oIGIvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaAppbmRleCA1ZWM0NzVjNjNl OS4uOGNhMGZhY2UwNjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1h bmlwLmgKKysrIGIvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaApAQCAtODksNiAr ODksMTMgQEAgZXh0ZXJuIE5vZGUgKm1hcF92YXJpYWJsZV9hdHRub3MoTm9kZSAqbm9kZSwKIAkJ CQkJCQkJIGNvbnN0IHN0cnVjdCBBdHRyTWFwICphdHRub19tYXAsCiAJCQkJCQkJCSBPaWQgdG9f cm93dHlwZSwgYm9vbCAqZm91bmRfd2hvbGVfcm93KTsKIAorZXh0ZXJuIE5vZGUgKlJlcGxhY2VW YXJGcm9tVGFyZ2V0TGlzdChWYXIgKnZhciwKKwkJCQkJCQkJCSAgUmFuZ2VUYmxFbnRyeSAqdGFy Z2V0X3J0ZSwKKwkJCQkJCQkJCSAgTGlzdCAqdGFyZ2V0bGlzdCwKKwkJCQkJCQkJCSAgaW50IHJl c3VsdF9yZWxhdGlvbiwKKwkJCQkJCQkJCSAgUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uIG5vbWF0 Y2hfb3B0aW9uLAorCQkJCQkJCQkJICBpbnQgbm9tYXRjaF92YXJubyk7CisKIGV4dGVybiBOb2Rl ICpSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0KE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkgICBpbnQg dGFyZ2V0X3Zhcm5vLCBpbnQgc3VibGV2ZWxzX3VwLAogCQkJCQkJCQkJICAgUmFuZ2VUYmxFbnRy eSAqdGFyZ2V0X3J0ZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CmluZGV4IGE1N2JiMThj MjRmLi5lNzg3NzkyZWNlMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9q b2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBAIC0zNTE0 LDYgKzM1MTQsNzIgQEAgb3JkZXIgYnkgYy5uYW1lOwogIEMgICAgfCAgICAgIHwgICAgICAgfCAg ICAgIAogKDMgcm93cykKIAorcm9sbGJhY2s7CistLQorLS0gdGVzdCBOVUxMIGJlaGF2aW9yIG9m IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMKKy0tCitiZWdpbjsKK2NyZWF0ZSB0ZW1wIHRhYmxl IHQgKAorICAgICBhIGludCBwcmltYXJ5IGtleSwKKyAgICAgYiBpbnQgZ2VuZXJhdGVkIGFsd2F5 cyBhcyAoMSArIDEpLAorICAgICBjIGludCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhKSwKKyAgICAg ZCBpbnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoYSAqIDEwKSwKKyAgICAgZSBpbnQgZ2VuZXJhdGVk IGFsd2F5cyBhcyAoY29hbGVzY2UoYSwgMTAwKSkKKyk7CitpbnNlcnQgaW50byB0IHZhbHVlcyAo MSksICgyKTsKKy0tIHRlc3QgcHJvcGFndGlvbiBvZiB2YXJudWxsaW5ncmVscworc2VsZWN0IHN1 bSh0Mi5iKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSksCisgICAgICAgc3VtKHQyLmMpIG92ZXIg KHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAgICBzdW0odDIuZCkgb3ZlciAocGFydGl0aW9uIGJ5 IHQyLmEpLAorICAgICAgIHN1bSh0Mi5lKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSkKK2Zyb20g dCBhcyB0MSBsZWZ0IGpvaW4gdCBhcyB0MiBvbiAodDEuYSA9IHQyLmEpCitvcmRlciBieSB0MS5h OworIHN1bSB8IHN1bSB8IHN1bSB8IHN1bSAKKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tCisgICAy IHwgICAxIHwgIDEwIHwgICAxCisgICAyIHwgICAyIHwgIDIwIHwgICAyCisoMiByb3dzKQorCitz ZWxlY3QgdDEuKiwgdDIuKgorZnJvbSB0IGFzIHQxIGxlZnQgam9pbiB0IGFzIHQyIG9uIGZhbHNl CitvcmRlciBieSB0MS5hOworIGEgfCBiIHwgYyB8IGQgIHwgZSB8IGEgfCBiIHwgYyB8IGQgfCBl IAorLS0tKy0tLSstLS0rLS0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLQorIDEgfCAyIHwgMSB8 IDEwIHwgMSB8ICAgfCAgIHwgICB8ICAgfCAgCisgMiB8IDIgfCAyIHwgMjAgfCAyIHwgICB8ICAg fCAgIHwgICB8ICAKKygyIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCB0MS5h Citmcm9tIHQgYXMgdDEgbGVmdCBqb2luIHQgYXMgdDIgb24gKHQxLmEgPSB0Mi5hKQord2hlcmUg Y29hbGVzY2UodDIuZCwgMSkgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoIExlZnQgSm9pbgorICAgSGFzaCBDb25kOiAodDEuYSA9IHQyLmEpCisgICBGaWx0ZXI6IChD T0FMRVNDRSgodDIuYSAqIDEwKSwgMSkgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9uIHQgdDEKKyAg IC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdCB0MgorKDYgcm93cykKKworLS0g Z3JvdXBpbmcgc2V0cyByZXF1aXJlcyBQbGFjZUhvbGRlclZhciBmb3Igbm9uLVZhciBjbGF1c2Vz CitzZWxlY3QgKiBmcm9tIHQKK2dyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIsIGMsIGQsIGUp CitoYXZpbmcgYiA9IDI7CisgYSB8IGIgfCBjIHwgZCB8IGUgCistLS0rLS0tKy0tLSstLS0rLS0t CisgICB8IDIgfCAgIHwgICB8ICAKKygxIHJvdykKKworc2VsZWN0ICogZnJvbSB0Citncm91cCBi eSBncm91cGluZyBzZXRzIChhLCBiLCBjLCBkLCBlKQoraGF2aW5nIGMgPSAyOworIGEgfCBiIHwg YyB8IGQgfCBlIAorLS0tKy0tLSstLS0rLS0tKy0tLQorICAgfCAgIHwgMiB8ICAgfCAgCisoMSBy b3cpCisKIHJvbGxiYWNrOwogLS0KIC0tIHRlc3QgaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHBsYWNl aG9sZGVycyB0aGF0IG9ubHkgYXBwZWFyIGluIHRhcmdldGxpc3RzLApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNx bAppbmRleCBjMjlkMTNiOWZlZC4uODI4Y2JkZmQ5ZGIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCkBA IC0xMDQ0LDYgKzEwNDQsNDkgQEAgb3JkZXIgYnkgYy5uYW1lOwogCiByb2xsYmFjazsKIAorLS0K Ky0tIHRlc3QgTlVMTCBiZWhhdmlvciBvZiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCistLQor YmVnaW47CisKK2NyZWF0ZSB0ZW1wIHRhYmxlIHQgKAorICAgICBhIGludCBwcmltYXJ5IGtleSwK KyAgICAgYiBpbnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoMSArIDEpLAorICAgICBjIGludCBnZW5l cmF0ZWQgYWx3YXlzIGFzIChhKSwKKyAgICAgZCBpbnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoYSAq IDEwKSwKKyAgICAgZSBpbnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyAoY29hbGVzY2UoYSwgMTAwKSkK Kyk7CisKK2luc2VydCBpbnRvIHQgdmFsdWVzICgxKSwgKDIpOworCistLSB0ZXN0IHByb3BhZ3Rp b24gb2YgdmFybnVsbGluZ3JlbHMKK3NlbGVjdCBzdW0odDIuYikgb3ZlciAocGFydGl0aW9uIGJ5 IHQyLmEpLAorICAgICAgIHN1bSh0Mi5jKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSksCisgICAg ICAgc3VtKHQyLmQpIG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAgICBzdW0odDIuZSkg b3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpCitmcm9tIHQgYXMgdDEgbGVmdCBqb2luIHQgYXMgdDIg b24gKHQxLmEgPSB0Mi5hKQorb3JkZXIgYnkgdDEuYTsKKworc2VsZWN0IHQxLiosIHQyLioKK2Zy b20gdCBhcyB0MSBsZWZ0IGpvaW4gdCBhcyB0MiBvbiBmYWxzZQorb3JkZXIgYnkgdDEuYTsKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHQxLmEKK2Zyb20gdCBhcyB0MSBsZWZ0IGpvaW4g dCBhcyB0MiBvbiAodDEuYSA9IHQyLmEpCit3aGVyZSBjb2FsZXNjZSh0Mi5kLCAxKSA9IDE7CisK Ky0tIGdyb3VwaW5nIHNldHMgcmVxdWlyZXMgUGxhY2VIb2xkZXJWYXIgZm9yIG5vbi1WYXIgY2xh dXNlcworc2VsZWN0ICogZnJvbSB0Citncm91cCBieSBncm91cGluZyBzZXRzIChhLCBiLCBjLCBk LCBlKQoraGF2aW5nIGIgPSAyOworCitzZWxlY3QgKiBmcm9tIHQKK2dyb3VwIGJ5IGdyb3VwaW5n IHNldHMgKGEsIGIsIGMsIGQsIGUpCitoYXZpbmcgYyA9IDI7CisKK3JvbGxiYWNrOworCiAtLQog LS0gdGVzdCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcGxhY2Vob2xkZXJzIHRoYXQgb25seSBhcHBl YXIgaW4gdGFyZ2V0bGlzdHMsCiAtLSBwZXIgYnVnICM2MTU0Ci0tIAoyLjQzLjAKCg== --000000000000507b57062e805d7a--