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 1uUyXe-00BKQz-1B for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Jun 2025 02:10:14 +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 1uUyXa-00GDCf-US for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Jun 2025 02:10:11 +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 1uUyXa-00GDCX-FE for pgsql-hackers@lists.postgresql.org; Fri, 27 Jun 2025 02:10:11 +0000 Received: from mail-vk1-xa36.google.com ([2607:f8b0:4864:20::a36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uUyXY-004KHp-2K for pgsql-hackers@postgresql.org; Fri, 27 Jun 2025 02:10:10 +0000 Received: by mail-vk1-xa36.google.com with SMTP id 71dfb90a1353d-53169549df9so975792e0c.1 for ; Thu, 26 Jun 2025 19:10:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750990206; x=1751595006; 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=9OexmC48UgSUlJFp7KsRfBc1hDLRhxvoJLyBFyOFoyk=; b=IQa0zYCer9B34AcYQtLLmOulWN6xclrq4cvfQGyVcVBmeNGyXVcYoEIkSMZ5ZL7VC7 bQ5w4hFIATXyyyf7BEOrbR7ILIlt5RudQgC0GRVUkdvASWsPm5mBeM1H+HGwbjNdZxwU YAr47mWy7LQbGa+rWbSVnoU/xPixEVaU2XP0P2Ip+KPXi1twGA1NC+uG2ojwsVCVR6wL ZWflgVVtiBCvY0CFnzTdDRRWaHKZ2AEbAsXb8kOc1P9iJq9fUmJZNMPYtQudq4UNO8va racmu0XQUe8M1m+AlvZLlHEm0awzLCUz/LOlxH1wq2JmUYVnC4z1xLk43Z38Ko1BGOMm 2R6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750990206; x=1751595006; 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=9OexmC48UgSUlJFp7KsRfBc1hDLRhxvoJLyBFyOFoyk=; b=uH7k3Kf99GfEE0Q3TorYNF8BvLU8GTtKaB2OpVoiTsxZ5azLXltOT3uK5KGUyur0m1 XWBuKH/iwuFT6KqUR2O0Rq01anYtXMC18rnA0Pzf6PmomV3JGfK354GnO5kX43FNwCSu kPZ0fWYaYSMymy9il04E7Ah1503s4YtJyM1/BRlCZeKAQd8RMXmwafXySbDInbKErEVy MAmeoGeK8D4xB4PNDVvW/AYRFDb8WRdBBYTnB+tl1c6ROvt4U6osVopInQz5mDoZ/Cir +pCeKRKjAqYifgXWrDYa5F5f7SzIrAHTCiODF39oF1Jlz/PFZfsf9AIvqaqX7zyV/a8A hRag== X-Forwarded-Encrypted: i=1; AJvYcCVCXId1UrY6RoMBBa/E48EETiTV7/VmAKzgfzTo44PFwFr4EAyqLq2SjslW1nmznTvx6QCq3r0lyMuGfxgy@postgresql.org X-Gm-Message-State: AOJu0YwzBISiU2bxbqxLVk8+E8SFwTVwkCmHddAmOD3zgGfk4jsA7Pk0 9f/Zj3g5CdeA3vIHghk7jH3Z9Si1RL6x9Gsanlgtkwb7BGjJy/kwKgnt2Na+aLkveRDjRzLMnNu v4m+wiiUPlxlTPEGR6Tosirh57gA8MCo= X-Gm-Gg: ASbGncuOQP6eA/LOkwOUB9HcDt362UEZlMoJQaqinkPcwbbM5RRGork1kZt2bVwBbSA FKPE8waNjo34tooBWaG69dsfrZwynjjFSh8Iu3IPNuXkq9paobQLuc/r1IaIZgLgdhjqA8/sh0M xWjtSx0Hw4ikwkOHzknXCdgqRl8xup7iFonE4//1XKOl10w+1VaZsDPGqwfaofdu1xDbteuaOvj Q== X-Google-Smtp-Source: AGHT+IGnbqG6dkSiqoIzKB72eNznnzxyeAMx8BNA6j1e464wK0mebN9ZOOLrEqDVO+Y/0VxFRiiFSJ6DKJI6nMBP51o= X-Received: by 2002:a05:6122:21a4:b0:530:71e7:37eb with SMTP id 71dfb90a1353d-5330c10940bmr1334130e0c.10.1750990204586; Thu, 26 Jun 2025 19:10:04 -0700 (PDT) MIME-Version: 1.0 References: <21fa36b4-6d56-4556-b524-9e3955b922c8@eisentraut.org> In-Reply-To: From: jian he Date: Fri, 27 Jun 2025 10:09:28 +0800 X-Gm-Features: Ac12FXyhNv_P7CqBL-atX8IBiVM50qVfHagXR1DMJ5swpmIcTeOaxKNGxxHykLs Message-ID: Subject: Re: SQL:2023 JSON simplified accessor support To: Alexandra Wang Cc: Nikita Malakhov , Vik Fearing , Mark Dilger , Matheus Alcantara , Peter Eisentraut , Andrew Dunstan , Nikita Glukhov , PostgreSQL Hackers , "David E. Wheeler" Content-Type: multipart/mixed; boundary="0000000000002695040638842d76" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002695040638842d76 Content-Type: text/plain; charset="UTF-8" hi. in gram.y we have: indirection_el: '.' attr_name { $$ = (Node *) makeString($2); } we can be sure that dot notation, following dot is a plain string. then in jsonb_subscript_transform, we can transform the String Node to a TEXTOID Const. with that, most of the v11-0005-Enable-String-node-as-field-accessors-in-generic.patch would be unnecessary. Also in v11-0006-Implement-read-only-dot-notation-for-jsonb.patch all these with pattern ``if (IsA(expr, String)`` can be removed. in transformContainerSubscripts we have: sbsref = makeNode(SubscriptingRef); sbsref->refcontainertype = containerType; sbsref->refelemtype = elementType; sbsref->reftypmod = containerTypMod; sbsref->refexpr = (Expr *) containerBase; sbsref->refassgnexpr = NULL; /* caller will fill if it's an assignment */ sbsroutines->transform(sbsref, indirection, pstate, isSlice, isAssignment); then jsonb_subscript_transform we have sbsref->refjsonbpath = jsonb_subscript_make_jsonpath(pstate, indirection, &sbsref->refupperindexpr, &sbsref->reflowerindexpr); of course sbsref->refupperindexpr, sbsref->reflowerindexpr is NIL since we first called jsonb_subscript_make_jsonpath. so we can simplify the function signature as static void jsonb_subscript_make_jsonpath(pstate, indirection, sbsref) Within jsonb_subscript_make_jsonpath we are going to populate refupperindexpr, reflowerindexpr, refjsonbpath. The attached patch addresses both of these issues, along with additional related refactoring. It consolidates all the changes I think are appropriate, based on patches v1-0001 to v1-0006. This will include patches previously I sent in the earlier thread. --0000000000002695040638842d76 Content-Type: application/octet-stream; name="v11-0001-refactoring-v11_01-to-v11_06.no-cfbot" Content-Disposition: attachment; filename="v11-0001-refactoring-v11_01-to-v11_06.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mce6bsts0 RnJvbSA5ZGM3ZjMyM2I3YTE3NTVmMDMyZGE1NjI3OTA2YzU4MDhlZTgyNzFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjcgSnVuIDIwMjUgMDk6MzM6NTMgKzA4MDAKU3ViamVjdDogW1BBVENIIHYx MSAxLzFdIHJlZmFjdG9yaW5nIHYxMV8wMSB0byB2MTFfMDYKCnJlZmFjdG9yaW5nIFN1YnNjcmlw dGluZ1JlZiBub2RlCnJlZmFjdG9yaW5nIFN1YnNjcmlwdGluZ1JlZiBkZXBhcnNpbmcKb3RoZXIg bXNpYyByZWZhY3RvcmluZyBiYXNlZCBvbiB2MTEtMDAwMSB0byB2MTEtMDAwNgotLS0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMgICAgIHwgIDI0ICsrLS0tLQogc3JjL2JhY2tlbmQv bm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgfCAgNzMgKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfY29sbGF0ZS5jICB8ICAyMSArLS0tLS0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uYnN1YnMuYyAgIHwgMTExICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgIHwgIDEzICsrKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0IHwgIDI0ICsrKysrLQogc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmIuc3FsICAgICAgfCAgIDggKysKIDcgZmlsZXMgY2hhbmdlZCwgMTA3IGluc2Vy dGlvbnMoKyksIDE2NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCBi MDQ1OTAxMTYzOS4uZjE1Njk4NzliNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAtMzMz NiwxNSArMzMzNiw5IEBAIEV4ZWNJbml0U3Vic2NyaXB0aW5nUmVmKEV4cHJFdmFsU3RlcCAqc2Ny YXRjaCwgU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsCiAJCXsKIAkJCXNic3JlZnN0YXRlLT51cHBl cnByb3ZpZGVkW2ldID0gdHJ1ZTsKIAkJCS8qIEVhY2ggc3Vic2NyaXB0IGlzIGV2YWx1YXRlZCBp bnRvIGFwcHJvcHJpYXRlIGFycmF5IGVudHJ5ICovCi0JCQlpZiAoSXNBKGUsIFN0cmluZykpCi0J CQl7Ci0JCQkJc2JzcmVmc3RhdGUtPnVwcGVyaW5kZXhbaV0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KHN0clZhbChlKSk7Ci0JCQkJc2JzcmVmc3RhdGUtPnVwcGVyaW5kZXhudWxsW2ldID0gZmFsc2U7 Ci0JCQl9Ci0JCQllbHNlCi0JCQkJRXhlY0luaXRFeHByUmVjKGUsIHN0YXRlLAotCQkJCQkJCQkm c2JzcmVmc3RhdGUtPnVwcGVyaW5kZXhbaV0sCi0JCQkJCQkJCSZzYnNyZWZzdGF0ZS0+dXBwZXJp bmRleG51bGxbaV0pOworCQkJRXhlY0luaXRFeHByUmVjKGUsIHN0YXRlLAorCQkJCQkJCSZzYnNy ZWZzdGF0ZS0+dXBwZXJpbmRleFtpXSwKKwkJCQkJCQkmc2JzcmVmc3RhdGUtPnVwcGVyaW5kZXhu dWxsW2ldKTsKIAkJfQogCQlpKys7CiAJfQpAQCAtMzM2NSwxNSArMzM1OSw5IEBAIEV4ZWNJbml0 U3Vic2NyaXB0aW5nUmVmKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgU3Vic2NyaXB0aW5nUmVmICpz YnNyZWYsCiAJCXsKIAkJCXNic3JlZnN0YXRlLT5sb3dlcnByb3ZpZGVkW2ldID0gdHJ1ZTsKIAkJ CS8qIEVhY2ggc3Vic2NyaXB0IGlzIGV2YWx1YXRlZCBpbnRvIGFwcHJvcHJpYXRlIGFycmF5IGVu dHJ5ICovCi0JCQlpZiAoSXNBKGUsIFN0cmluZykpCi0JCQl7Ci0JCQkJc2JzcmVmc3RhdGUtPmxv d2VyaW5kZXhbaV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHN0clZhbChlKSk7Ci0JCQkJc2JzcmVm c3RhdGUtPmxvd2VyaW5kZXhudWxsW2ldID0gZmFsc2U7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJRXhl Y0luaXRFeHByUmVjKGUsIHN0YXRlLAotCQkJCQkJCQkmc2JzcmVmc3RhdGUtPmxvd2VyaW5kZXhb aV0sCi0JCQkJCQkJCSZzYnNyZWZzdGF0ZS0+bG93ZXJpbmRleG51bGxbaV0pOworCQkJRXhlY0lu aXRFeHByUmVjKGUsIHN0YXRlLAorCQkJCQkJCSZzYnNyZWZzdGF0ZS0+bG93ZXJpbmRleFtpXSwK KwkJCQkJCQkmc2JzcmVmc3RhdGUtPmxvd2VyaW5kZXhudWxsW2ldKTsKIAkJfQogCQlpKys7CiAJ fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBhOWMyOWFiOGYyOS4uZTUzOTBiZDU5OGMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL25vZGVGdW5jcy5jCkBAIC0yMTgyLDI4ICsyMTgyLDEyIEBAIGV4cHJlc3Npb25fdHJlZV93 YWxrZXJfaW1wbChOb2RlICpub2RlLAogCQljYXNlIFRfU3Vic2NyaXB0aW5nUmVmOgogCQkJewog CQkJCVN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmID0gKFN1YnNjcmlwdGluZ1JlZiAqKSBub2RlOwot CQkJCUxpc3RDZWxsICAgKmxjOwotCi0JCQkJLyoKLQkJCQkgKiBSZWN1cnNlIGRpcmVjdGx5IGZv ciB1cHBlci9sb3dlciBjb250YWluZXIgaW5kZXggbGlzdHMsCi0JCQkJICogc2tpcHBpbmcgU3Ry aW5nIHN1YnNjcmlwdHMgdXNlZCBmb3IgZG90IG5vdGF0aW9uLgotCQkJCSAqLwotCQkJCWZvcmVh Y2gobGMsIHNic3JlZi0+cmVmdXBwZXJpbmRleHByKQotCQkJCXsKLQkJCQkJTm9kZQkgICAqZXhw ciA9IGxmaXJzdChsYyk7Ci0KLQkJCQkJaWYgKGV4cHIgJiYgIUlzQShleHByLCBTdHJpbmcpICYm IFdBTEsoZXhwcikpCi0JCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0KLQkJCQlmb3JlYWNoKGxj LCBzYnNyZWYtPnJlZmxvd2VyaW5kZXhwcikKLQkJCQl7Ci0JCQkJCU5vZGUJICAgKmV4cHIgPSBs Zmlyc3QobGMpOwotCi0JCQkJCWlmIChleHByICYmICFJc0EoZXhwciwgU3RyaW5nKSAmJiBXQUxL KGV4cHIpKQotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQogCisJCQkJLyogcmVjdXJzZSBkaXJl Y3RseSBmb3IgdXBwZXIvbG93ZXIgY29udGFpbmVyIGluZGV4IGxpc3RzICovCisJCQkJaWYgKExJ U1RfV0FMSyhzYnNyZWYtPnJlZnVwcGVyaW5kZXhwcikpCisJCQkJCXJldHVybiB0cnVlOworCQkJ CWlmIChMSVNUX1dBTEsoc2JzcmVmLT5yZWZsb3dlcmluZGV4cHIpKQorCQkJCQlyZXR1cm4gdHJ1 ZTsJCQkJCQogCQkJCS8qIHdhbGtlciBtdXN0IHNlZSB0aGUgcmVmZXhwciBhbmQgcmVmYXNzZ25l eHByLCBob3dldmVyICovCiAJCQkJaWYgKFdBTEsoc2JzcmVmLT5yZWZleHByKSkKIAkJCQkJcmV0 dXJuIHRydWU7CkBAIC0zMDk4LDUxICszMDgyLDEyIEBAIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9y X2ltcGwoTm9kZSAqbm9kZSwKIAkJCXsKIAkJCQlTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiA9IChT dWJzY3JpcHRpbmdSZWYgKikgbm9kZTsKIAkJCQlTdWJzY3JpcHRpbmdSZWYgKm5ld25vZGU7Ci0J CQkJTGlzdENlbGwgICAqbGM7Ci0JCQkJTGlzdAkgICAqZXhwcnMgPSBOSUw7CiAKIAkJCQlGTEFU Q09QWShuZXdub2RlLCBzYnNyZWYsIFN1YnNjcmlwdGluZ1JlZik7Ci0KLQkJCQlmb3JlYWNoKGxj LCBzYnNyZWYtPnJlZnVwcGVyaW5kZXhwcikKLQkJCQl7Ci0JCQkJCU5vZGUJICAgKmV4cHIgPSBs Zmlyc3QobGMpOwotCi0JCQkJCWlmIChleHByICYmIElzQShleHByLCBTdHJpbmcpKQotCQkJCQl7 Ci0JCQkJCQlTdHJpbmcJICAgKnN0cjsKLQotCQkJCQkJRkxBVENPUFkoc3RyLCBleHByLCBTdHJp bmcpOwotCQkJCQkJZXhwciA9IChOb2RlICopIHN0cjsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJ CQlleHByID0gbXV0YXRvcihleHByLCBjb250ZXh0KTsKLQotCQkJCQlleHBycyA9IGxhcHBlbmQo ZXhwcnMsIGV4cHIpOwotCQkJCX0KLQotCQkJCW5ld25vZGUtPnJlZnVwcGVyaW5kZXhwciA9IGV4 cHJzOwotCi0JCQkJZXhwcnMgPSBOSUw7Ci0KLQkJCQlmb3JlYWNoKGxjLCBzYnNyZWYtPnJlZmxv d2VyaW5kZXhwcikKLQkJCQl7Ci0JCQkJCU5vZGUJICAgKmV4cHIgPSBsZmlyc3QobGMpOwotCi0J CQkJCWlmIChleHByICYmIElzQShleHByLCBTdHJpbmcpKQotCQkJCQl7Ci0JCQkJCQlTdHJpbmcJ ICAgKnN0cjsKLQotCQkJCQkJRkxBVENPUFkoc3RyLCBleHByLCBTdHJpbmcpOwotCQkJCQkJZXhw ciA9IChOb2RlICopIHN0cjsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCQlleHByID0gbXV0YXRv cihleHByLCBjb250ZXh0KTsKLQotCQkJCQlleHBycyA9IGxhcHBlbmQoZXhwcnMsIGV4cHIpOwot CQkJCX0KLQotCQkJCW5ld25vZGUtPnJlZmxvd2VyaW5kZXhwciA9IGV4cHJzOwotCisJCQkJTVVU QVRFKG5ld25vZGUtPnJlZnVwcGVyaW5kZXhwciwgc2JzcmVmLT5yZWZ1cHBlcmluZGV4cHIsCisJ CQkJCSAgIExpc3QgKik7CisJCQkJTVVUQVRFKG5ld25vZGUtPnJlZmxvd2VyaW5kZXhwciwgc2Jz cmVmLT5yZWZsb3dlcmluZGV4cHIsCisJCQkJCSAgIExpc3QgKik7CiAJCQkJTVVUQVRFKG5ld25v ZGUtPnJlZmV4cHIsIHNic3JlZi0+cmVmZXhwciwKIAkJCQkJICAgRXhwciAqKTsKIAkJCQlNVVRB VEUobmV3bm9kZS0+cmVmYXNzZ25leHByLCBzYnNyZWYtPnJlZmFzc2duZXhwciwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jb2xsYXRlLmMgYi9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfY29sbGF0ZS5jCmluZGV4IGJlNmRlYTZmZmQyLi5hNzRlNjNhYTU0YyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NvbGxhdGUuYworKysgYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfY29sbGF0ZS5jCkBAIC02ODAsMjQgKzY4MCwxMSBAQCBhc3NpZ25fY29s bGF0aW9uc193YWxrZXIoTm9kZSAqbm9kZSwgYXNzaWduX2NvbGxhdGlvbnNfY29udGV4dCAqY29u dGV4dCkKIAkJCQkJCQkgKiBjb250cmlidXRlIGFueXRoaW5nLikKIAkJCQkJCQkgKi8KIAkJCQkJ CQlTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiA9IChTdWJzY3JpcHRpbmdSZWYgKikgbm9kZTsKLQkJ CQkJCQlMaXN0Q2VsbCAgICpsYzsKIAotCQkJCQkJCS8qIHNraXAgU3RyaW5nIHN1YnNjcmlwdHMg dXNlZCBmb3IgZG90IG5vdGF0aW9uICovCi0JCQkJCQkJZm9yZWFjaChsYywgc2JzcmVmLT5yZWZ1 cHBlcmluZGV4cHIpCi0JCQkJCQkJewotCQkJCQkJCQlOb2RlCSAgICpleHByID0gbGZpcnN0KGxj KTsKLQotCQkJCQkJCQlpZiAoZXhwciAmJiAhSXNBKGV4cHIsIFN0cmluZykpCi0JCQkJCQkJCQlh c3NpZ25fZXhwcl9jb2xsYXRpb25zKGNvbnRleHQtPnBzdGF0ZSwgZXhwcik7Ci0JCQkJCQkJfQot Ci0JCQkJCQkJZm9yZWFjaChsYywgc2JzcmVmLT5yZWZsb3dlcmluZGV4cHIpCi0JCQkJCQkJewot CQkJCQkJCQlOb2RlCSAgICpleHByID0gbGZpcnN0KGxjKTsKLQotCQkJCQkJCQlpZiAoZXhwciAm JiAhSXNBKGV4cHIsIFN0cmluZykpCi0JCQkJCQkJCQlhc3NpZ25fZXhwcl9jb2xsYXRpb25zKGNv bnRleHQtPnBzdGF0ZSwgZXhwcik7Ci0JCQkJCQkJfQorCQkJCQkJCWFzc2lnbl9leHByX2NvbGxh dGlvbnMoY29udGV4dC0+cHN0YXRlLAorCQkJCQkJCQkJCQkJICAgKE5vZGUgKikgc2JzcmVmLT5y ZWZ1cHBlcmluZGV4cHIpOworCQkJCQkJCWFzc2lnbl9leHByX2NvbGxhdGlvbnMoY29udGV4dC0+ cHN0YXRlLAorCQkJCQkJCQkJCQkJICAgKE5vZGUgKikgc2JzcmVmLT5yZWZsb3dlcmluZGV4cHIp OwogCiAJCQkJCQkJKHZvaWQpIGFzc2lnbl9jb2xsYXRpb25zX3dhbGtlcigoTm9kZSAqKSBzYnNy ZWYtPnJlZmV4cHIsCiAJCQkJCQkJCQkJCQkJCQkmbG9jY29udGV4dCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv anNvbmJzdWJzLmMKaW5kZXggMzU4OGExZDA2MmYuLjkwMGFmMWM3MzliIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbmJzdWJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25ic3Vicy5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jl cy5oIgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb25fZC5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL2V4ZWNFeHByLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVk ZSAibm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC0yNSw2ICsyNiw3IEBACiAjaW5jbHVkZSAidXRpbHMv anNvbnBhdGguaCIKIAogCisKIC8qCiAgKiBTdWJzY3JpcHRpbmdSZWZTdGF0ZS53b3Jrc3BhY2Ug Zm9yIGdlbmVyaWMganNvbmIgc3Vic2NyaXB0aW5nIGV4ZWN1dGlvbi4KICAqCkBAIC00MSwxOSAr NDMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbmJTdWJXb3Jrc3BhY2UKIAkJCQkJCQkJICogSnNv blBhdGhRdWVyeSgpICovCiB9IEpzb25iU3ViV29ya3NwYWNlOwogCi1zdGF0aWMgT2lkCi1qc29u Yl9zdWJzY3JpcHRfdHlwZShOb2RlICpleHByKQotewotCWlmIChleHByICYmIElzQShleHByLCBT dHJpbmcpKQotCQlyZXR1cm4gVEVYVE9JRDsKLQotCXJldHVybiBleHByVHlwZShleHByKTsKLX0K LQogc3RhdGljIE5vZGUgKgogY29lcmNlX2pzb25wYXRoX3N1YnNjcmlwdChQYXJzZVN0YXRlICpw c3RhdGUsIE5vZGUgKnN1YkV4cHIsIE9pZCBudW10eXBlKQogewotCU9pZAkJCXN1YkV4cHJUeXBl ID0ganNvbmJfc3Vic2NyaXB0X3R5cGUoc3ViRXhwcik7CisJT2lkCQkJc3ViRXhwclR5cGUgPSBl eHByVHlwZShzdWJFeHByKTsKIAlPaWQJCQl0YXJnZXRUeXBlID0gVU5LTk9XTk9JRDsKIAogCWlm IChzdWJFeHByVHlwZSAhPSBVTktOT1dOT0lEKQpAQCAtMTEwLDEyICsxMDMsNiBAQCBjb2VyY2Vf anNvbnBhdGhfc3Vic2NyaXB0KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqc3ViRXhwciwgT2lk IG51bXR5cGUpCiAJCQkJCQkgIENPRVJDSU9OX0lNUExJQ0lULAogCQkJCQkJICBDT0VSQ0VfSU1Q TElDSVRfQ0FTVCwKIAkJCQkJCSAgLTEpOwotCWlmIChzdWJFeHByID09IE5VTEwpCi0JCWVyZXBv cnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBVFlQRV9NSVNNQVRDSCksCi0JCQkJ IGVycm1zZygianNvbmIgc3Vic2NyaXB0IG11c3QgaGF2ZSB0ZXh0IHR5cGUiKSwKLQkJCQkgcGFy c2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgZXhwckxvY2F0aW9uKHN1YkV4cHIpKSkpOwotCiAJcmV0 dXJuIHN1YkV4cHI7CiB9CiAKQEAgLTE5NiwzMCArMTgzLDIyIEBAIHN0YXRpYyBKc29uUGF0aFBh cnNlSXRlbSAqCiBtYWtlX2pzb25wYXRoX2l0ZW1fZXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIE5v ZGUgKmV4cHIsIExpc3QgKipleHBycykKIHsKIAlDb25zdAkgICAqY25zdDsKKwlpbnQzMgkJdmFs OwogCiAJZXhwciA9IHRyYW5zZm9ybUV4cHIocHN0YXRlLCBleHByLCBwc3RhdGUtPnBfZXhwcl9r aW5kKTsKIAotCWlmICghSXNBKGV4cHIsIENvbnN0KSkKKwlpZiAoKCFJc0EoZXhwciwgQ29uc3Qp KSB8fCAoKChDb25zdCAqKSBleHByKS0+Y29uc3R0eXBlICE9IElOVDRPSUQpKQogCQllcmVwb3J0 KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlTTUFUQ0gpLAotCQkJCSBl cnJtc2coImpzb25iIHNpbXBsaWZpZWQgYWNjZXNzb3Igc3VwcG9ydHMgc3Vic2NyaXB0aW5nIGlu IGNvbnN0IGludDQsIGdvdCB0eXBlOiAlcyIsCi0JCQkJCQlmb3JtYXRfdHlwZV9iZShleHByVHlw ZShleHByKSkpLAotCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24o ZXhwcikpKSk7CisJCQkJZXJyY29kZShFUlJDT0RFX0RBVEFUWVBFX01JU01BVENIKSwKKwkJCQll cnJtc2coIm9ubHkgaW50ZWdlciBjb25zdGFudHMgYXJlIHN1cHBvcnRlZCBpbiBqc29uYiBzaW1w bGlmaWVkIGFjY2Vzc29yIHN1YnNjcmlwdGluZyIpLAorCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihw c3RhdGUsIGV4cHJMb2NhdGlvbihleHByKSkpOwogCiAJY25zdCA9IChDb25zdCAqKSBleHByOwor CUFzc2VydCghY25zdC0+Y29uc3Rpc251bGwpOwogCi0JaWYgKGNuc3QtPmNvbnN0dHlwZSA9PSBJ TlQ0T0lEICYmICFjbnN0LT5jb25zdGlzbnVsbCkKLQl7Ci0JCWludDMyCQl2YWwgPSBEYXR1bUdl dEludDMyKGNuc3QtPmNvbnN0dmFsdWUpOworCXZhbCA9IERhdHVtR2V0SW50MzIoY25zdC0+Y29u c3R2YWx1ZSk7CiAKLQkJcmV0dXJuIG1ha2VfanNvbnBhdGhfaXRlbV9pbnQodmFsLCBleHBycyk7 Ci0JfQotCi0JZXJlcG9ydChFUlJPUiwKLQkJCShlcnJjb2RlKEVSUkNPREVfREFUQVRZUEVfTUlT TUFUQ0gpLAotCQkJIGVycm1zZygianNvbmIgc2ltcGxpZmllZCBhY2Nlc3NvciBzdXBwb3J0cyBz dWJzY3JpcHRpbmcgaW4gdHlwZTogSU5UNCwgZ290IHR5cGU6ICVzIiwKLQkJCQkJZm9ybWF0X3R5 cGVfYmUoY25zdC0+Y29uc3R0eXBlKSksCi0JCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwg ZXhwckxvY2F0aW9uKGV4cHIpKSkpOworCXJldHVybiBtYWtlX2pzb25wYXRoX2l0ZW1faW50KHZh bCwgZXhwcnMpOwogfQogCiAvKgpAQCAtMjM5LDE0ICsyMTgsMTIgQEAgbWFrZV9qc29ucGF0aF9p dGVtX2V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpleHByLCBMaXN0ICoqZXhwcnMpCiAg KiBQYXJhbWV0ZXJzOgogICogLSBwc3RhdGU6IFBhcnNlIHN0YXRlIGNvbnRleHQuCiAgKiAtIGlu ZGlyZWN0aW9uOiBMaXN0IG9mIHN1YnNjcmlwdGluZyBleHByZXNzaW9ucyAobW9kaWZpZWQgaW4t cGxhY2UpLgotICogLSB1ZXhwcnM6IFVwcGVyLWJvdW5kIGV4cHJlc3Npb25zIGV4dHJhY3RlZCBm cm9tIHN1YnNjcmlwdHMuCi0gKiAtIGxleHByczogTG93ZXItYm91bmQgZXhwcmVzc2lvbnMgZXh0 cmFjdGVkIGZyb20gc3Vic2NyaXB0cy4KLSAqIFJldHVybnM6Ci0gKiAtIGEgQ29uc3Qgbm9kZSBj b250YWluaW5nIHRoZSB0cmFuc2Zvcm1lZCBKc29uUGF0aCBleHByZXNzaW9uLgorICogLSBzYnNy ZWY6IFRoZSBTdWJzY3JpcHRpbmdSZWYgbm9kZSB0aGF0IHNvbWUgb2YgaXRzIHN0cnVjdCBmaWVs ZHMKKyAqICAgKHJlZnVwcGVyaW5kZXhwciwgcmVmbG93ZXJpbmRleHByLCByZWZqc29uYnBhdGgp IGJlaW5nIHBvcHVsYXRlZC4KICAqLwotc3RhdGljIE5vZGUgKgorc3RhdGljIHZvaWQKIGpzb25i X3N1YnNjcmlwdF9tYWtlX2pzb25wYXRoKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqKmluZGly ZWN0aW9uLAotCQkJCQkJCSAgTGlzdCAqKnVleHBycywgTGlzdCAqKmxleHBycykKKwkJCQkJCQkg IFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmKQogewogCUpzb25QYXRoUGFyc2VSZXN1bHQganByZXM7 CiAJSnNvblBhdGhQYXJzZUl0ZW0gKnBhdGggPSBtYWtlX2pzb25wYXRoX2l0ZW0oanBpUm9vdCk7 CkBAIC0yNTQsOSArMjMxLDcgQEAganNvbmJfc3Vic2NyaXB0X21ha2VfanNvbnBhdGgoUGFyc2VT dGF0ZSAqcHN0YXRlLCBMaXN0ICoqaW5kaXJlY3Rpb24sCiAJRGF0dW0JCWpzcDsKIAlpbnQJCQlw YXRobGVuID0gMDsKIAotCSp1ZXhwcnMgPSBOSUw7Ci0JKmxleHBycyA9IE5JTDsKLQorCUFzc2Vy dChzYnNyZWYtPnJlZmpzb25icGF0aCA9PSBOVUxMKTsKIAlqcHJlcy5leHByID0gcGF0aDsKIAlq cHJlcy5sYXggPSB0cnVlOwogCkBAIC0yNjgsMTggKzI0MywzMCBAQCBqc29uYl9zdWJzY3JpcHRf bWFrZV9qc29ucGF0aChQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKippbmRpcmVjdGlvbiwKIAkJ aWYgKElzQShhY2Nlc3NvciwgU3RyaW5nKSkKIAkJewogCQkJY2hhcgkgICAqZmllbGQgPSBzdHJW YWwoYWNjZXNzb3IpOworCQkJTm9kZQkgICAqYWNjZXNzb3JfZXhwcjsKIAogCQkJanBpID0gbWFr ZV9qc29ucGF0aF9pdGVtKGpwaUtleSk7CiAJCQlqcGktPnZhbHVlLnN0cmluZy52YWwgPSBmaWVs ZDsKIAkJCWpwaS0+dmFsdWUuc3RyaW5nLmxlbiA9IHN0cmxlbihmaWVsZCk7CiAKLQkJCSp1ZXhw cnMgPSBsYXBwZW5kKCp1ZXhwcnMsIGFjY2Vzc29yKTsKKwkJCS8qCisJCQkgKiBqc29ucGF0aCBk b24ndCBoYXZlIGNvbGxhdGlvbiwgc28gaGVyZSBERUZBVUxUX0NPTExBVElPTl9PSUQKKwkJCSAq IHNob3VsZCBiZSBmaW5lLgorCQkJICogdHJhbnNmb3JtRXhwciBjYW4gbm90IGNvcGUgd2l0aCBT dHJpbmcgbm9kZSwgc28gaGVyZSB3ZSBqdXN0CisJCQkgKiBzaW1wbHkgbWFrZSBhIHRleHQgdHlw ZSBDb25zdC4KKwkJCSAqLworCQkJYWNjZXNzb3JfZXhwciA9IChOb2RlICopIG1ha2VDb25zdChU RVhUT0lELCAtMSwgREVGQVVMVF9DT0xMQVRJT05fT0lELCAtMSwKKwkJCQkJCQkJCQkJICAgQ1N0 cmluZ0dldFRleHREYXR1bShmaWVsZCksCisJCQkJCQkJCQkJCSAgIGZhbHNlLAorCQkJCQkJCQkJ CQkgICBmYWxzZSk7CisKKwkJCXNic3JlZi0+cmVmdXBwZXJpbmRleHByID0gbGFwcGVuZChzYnNy ZWYtPnJlZnVwcGVyaW5kZXhwciwgYWNjZXNzb3JfZXhwcik7CiAJCX0KIAkJZWxzZSBpZiAoSXNB KGFjY2Vzc29yLCBBX1N0YXIpKQogCQl7CiAJCQlqcGkgPSBtYWtlX2pzb25wYXRoX2l0ZW0oanBp QW55S2V5KTsKIAotCQkJKnVleHBycyA9IGxhcHBlbmQoKnVleHBycywgTlVMTCk7CisJCQlzYnNy ZWYtPnJlZnVwcGVyaW5kZXhwciA9IGxhcHBlbmQoc2JzcmVmLT5yZWZ1cHBlcmluZGV4cHIsIE5V TEwpOwogCQl9CiAJCWVsc2UgaWYgKElzQShhY2Nlc3NvciwgQV9JbmRpY2VzKSkKIAkJewpAQCAt MjkxLDI2ICsyNzgsMjYgQEAganNvbmJfc3Vic2NyaXB0X21ha2VfanNvbnBhdGgoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICoqaW5kaXJlY3Rpb24sCiAKIAkJCWlmIChhaS0+aXNfc2xpY2UpCiAJ CQl7Ci0JCQkJd2hpbGUgKGxpc3RfbGVuZ3RoKCpsZXhwcnMpIDwgbGlzdF9sZW5ndGgoKnVleHBy cykpCi0JCQkJCSpsZXhwcnMgPSBsYXBwZW5kKCpsZXhwcnMsIE5VTEwpOworCQkJCXdoaWxlIChs aXN0X2xlbmd0aChzYnNyZWYtPnJlZmxvd2VyaW5kZXhwcikgPCBsaXN0X2xlbmd0aChzYnNyZWYt PnJlZnVwcGVyaW5kZXhwcikpCisJCQkJCXNic3JlZi0+cmVmbG93ZXJpbmRleHByID0gbGFwcGVu ZChzYnNyZWYtPnJlZmxvd2VyaW5kZXhwciwgTlVMTCk7CiAKLQkJCQlpZiAoYWktPmxpZHgpCi0J CQkJCWpwaS0+dmFsdWUuYXJyYXkuZWxlbXNbMF0uZnJvbSA9IG1ha2VfanNvbnBhdGhfaXRlbV9l eHByKHBzdGF0ZSwgYWktPmxpZHgsIGxleHBycyk7CisJCQkJaWYgKGFpLT5saWR4ICE9IE5VTEwp CisJCQkJCWpwaS0+dmFsdWUuYXJyYXkuZWxlbXNbMF0uZnJvbSA9IG1ha2VfanNvbnBhdGhfaXRl bV9leHByKHBzdGF0ZSwgYWktPmxpZHgsICZzYnNyZWYtPnJlZmxvd2VyaW5kZXhwcik7CiAJCQkJ ZWxzZQotCQkJCQlqcGktPnZhbHVlLmFycmF5LmVsZW1zWzBdLmZyb20gPSBtYWtlX2pzb25wYXRo X2l0ZW1faW50KDAsIGxleHBycyk7CisJCQkJCWpwaS0+dmFsdWUuYXJyYXkuZWxlbXNbMF0uZnJv bSA9IG1ha2VfanNvbnBhdGhfaXRlbV9pbnQoMCwgJnNic3JlZi0+cmVmbG93ZXJpbmRleHByKTsK IAotCQkJCWlmIChhaS0+dWlkeCkKLQkJCQkJanBpLT52YWx1ZS5hcnJheS5lbGVtc1swXS50byA9 IG1ha2VfanNvbnBhdGhfaXRlbV9leHByKHBzdGF0ZSwgYWktPnVpZHgsIHVleHBycyk7CisJCQkJ aWYgKGFpLT51aWR4ICE9IE5VTEwpCisJCQkJCWpwaS0+dmFsdWUuYXJyYXkuZWxlbXNbMF0udG8g PSBtYWtlX2pzb25wYXRoX2l0ZW1fZXhwcihwc3RhdGUsIGFpLT51aWR4LCAmc2JzcmVmLT5yZWZ1 cHBlcmluZGV4cHIpOwogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCWpwaS0+dmFsdWUuYXJyYXkuZWxl bXNbMF0udG8gPSBtYWtlX2pzb25wYXRoX2l0ZW0oanBpTGFzdCk7Ci0JCQkJCSp1ZXhwcnMgPSBs YXBwZW5kKCp1ZXhwcnMsIE5VTEwpOworCQkJCQlzYnNyZWYtPnJlZnVwcGVyaW5kZXhwciA9IGxh cHBlbmQoc2JzcmVmLT5yZWZ1cHBlcmluZGV4cHIsIE5VTEwpOwogCQkJCX0KIAkJCX0KIAkJCWVs c2UKIAkJCXsKIAkJCQlBc3NlcnQoYWktPnVpZHggJiYgIWFpLT5saWR4KTsKLQkJCQlqcGktPnZh bHVlLmFycmF5LmVsZW1zWzBdLmZyb20gPSBtYWtlX2pzb25wYXRoX2l0ZW1fZXhwcihwc3RhdGUs IGFpLT51aWR4LCB1ZXhwcnMpOworCQkJCWpwaS0+dmFsdWUuYXJyYXkuZWxlbXNbMF0uZnJvbSA9 IG1ha2VfanNvbnBhdGhfaXRlbV9leHByKHBzdGF0ZSwgYWktPnVpZHgsICZzYnNyZWYtPnJlZnVw cGVyaW5kZXhwcik7CiAJCQkJanBpLT52YWx1ZS5hcnJheS5lbGVtc1swXS50byA9IE5VTEw7CiAJ CQl9CiAJCX0KQEAgLTMyMywxNyArMzEwLDIwIEBAIGpzb25iX3N1YnNjcmlwdF9tYWtlX2pzb25w YXRoKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqKmluZGlyZWN0aW9uLAogCQlwYXRobGVuKys7 CiAJfQogCi0JaWYgKCpsZXhwcnMpCisJaWYgKHNic3JlZi0+cmVmbG93ZXJpbmRleHByICE9IE5J TCkKIAl7Ci0JCXdoaWxlIChsaXN0X2xlbmd0aCgqbGV4cHJzKSA8IGxpc3RfbGVuZ3RoKCp1ZXhw cnMpKQotCQkJKmxleHBycyA9IGxhcHBlbmQoKmxleHBycywgTlVMTCk7CisJCXdoaWxlIChsaXN0 X2xlbmd0aChzYnNyZWYtPnJlZmxvd2VyaW5kZXhwcikgPCBsaXN0X2xlbmd0aChzYnNyZWYtPnJl ZnVwcGVyaW5kZXhwcikpCisJCQlzYnNyZWYtPnJlZmxvd2VyaW5kZXhwciA9IGxhcHBlbmQoc2Jz cmVmLT5yZWZsb3dlcmluZGV4cHIsIE5VTEwpOwogCX0KIAorCWxpc3RfZnJlZSgqaW5kaXJlY3Rp b24pOworCSppbmRpcmVjdGlvbiA9IE5JTDsKKwogCSppbmRpcmVjdGlvbiA9IGxpc3RfZGVsZXRl X2ZpcnN0X24oKmluZGlyZWN0aW9uLCBwYXRobGVuKTsKIAogCWpzcCA9IGpzb25QYXRoRnJvbVBh cnNlUmVzdWx0KCZqcHJlcywgMCwgTlVMTCk7CiAKLQlyZXR1cm4gKE5vZGUgKikgbWFrZUNvbnN0 KEpTT05QQVRIT0lELCAtMSwgSW52YWxpZE9pZCwgLTEsIGpzcCwgZmFsc2UsIGZhbHNlKTsKKwlz YnNyZWYtPnJlZmpzb25icGF0aCA9IChOb2RlICopIG1ha2VDb25zdChKU09OUEFUSE9JRCwgLTEs IEludmFsaWRPaWQsIC0xLCBqc3AsIGZhbHNlLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0zNTgsMTAg KzM0OCw3IEBAIGpzb25iX3N1YnNjcmlwdF90cmFuc2Zvcm0oU3Vic2NyaXB0aW5nUmVmICpzYnNy ZWYsCiAKIAlpZiAoanNvbmJfY2hlY2tfanNvbnBhdGhfbmVlZGVkKCppbmRpcmVjdGlvbikpCiAJ ewotCQlzYnNyZWYtPnJlZmpzb25icGF0aCA9Ci0JCQlqc29uYl9zdWJzY3JpcHRfbWFrZV9qc29u cGF0aChwc3RhdGUsIGluZGlyZWN0aW9uLAotCQkJCQkJCQkJCSAgJnNic3JlZi0+cmVmdXBwZXJp bmRleHByLAotCQkJCQkJCQkJCSAgJnNic3JlZi0+cmVmbG93ZXJpbmRleHByKTsKKwkJanNvbmJf c3Vic2NyaXB0X21ha2VfanNvbnBhdGgocHN0YXRlLCBpbmRpcmVjdGlvbiwgc2JzcmVmKTsKIAkJ cmV0dXJuOwogCX0KIApAQCAtNjI5LDcgKzYxNiw3IEBAIGpzb25iX2V4ZWNfc2V0dXAoY29uc3Qg U3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsCiB7CiAJSnNvbmJTdWJXb3Jrc3BhY2UgKndvcmtzcGFj ZTsKIAlMaXN0Q2VsbCAgICpsYzsKLQlpbnQJCQludXBwZXIgPSBzYnNyZWYtPnJlZnVwcGVyaW5k ZXhwci0+bGVuZ3RoOworCWludAkJCW51cHBlciA9IGxpc3RfbGVuZ3RoKHNic3JlZi0+cmVmdXBw ZXJpbmRleHByKTsKIAljaGFyCSAgICpwdHI7CiAJYm9vbAkJdXNlSnNvbnBhdGggPSBzYnNyZWYt PnJlZmpzb25icGF0aCAhPSBOVUxMOwogCkBAIC02NTgsNyArNjQ1LDcgQEAganNvbmJfZXhlY19z ZXR1cChjb25zdCBTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwKIAkJTm9kZQkgICAqZXhwciA9IGxm aXJzdChsYyk7CiAJCWludAkJCWkgPSBmb3JlYWNoX2N1cnJlbnRfaW5kZXgobGMpOwogCi0JCXdv cmtzcGFjZS0+aW5kZXhPaWRbaV0gPSBqc29uYl9zdWJzY3JpcHRfdHlwZShleHByKTsKKwkJd29y a3NwYWNlLT5pbmRleE9pZFtpXSA9IGV4cHJUeXBlKGV4cHIpOwogCX0KIAogCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggYzE4ZTA4ZGVlMjkuLjk3Yjc5NjcyNjQxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC05MzM0LDYgKzkzMzQsMTAgQEAgZ2V0X3J1bGVfZXhw cihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJICovCiAJCQkJbmVl ZF9wYXJlbnMgPSAhSXNBKHNic3JlZi0+cmVmZXhwciwgVmFyKSAmJgogCQkJCQkhSXNBKHNic3Jl Zi0+cmVmZXhwciwgRmllbGRTZWxlY3QpOworCisJCQkJaWYgKHNic3JlZi0+cmVmanNvbmJwYXRo ICE9IE5VTEwpCisJCQkJCW5lZWRfcGFyZW5zID0gdHJ1ZTsKKwogCQkJCWlmIChuZWVkX3BhcmVu cykKIAkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOwogCQkJCWdldF9ydWxlX2V4 cHIoKE5vZGUgKikgc2JzcmVmLT5yZWZleHByLCBjb250ZXh0LCBzaG93aW1wbGljaXQpOwpAQCAt MTMwMDgsMTAgKzEzMDEyLDE1IEBAIHByaW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNi c3JlZiwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogCXsKIAkJTm9kZQkgICAqdXAgPSAoTm9k ZSAqKSBsZmlyc3QodXBsaXN0X2l0ZW0pOwogCi0JCWlmIChJc0EodXAsIFN0cmluZykpCisJCS8q IERvdCBOb3RhdGF0aW9uIGNhbiBvbmx5IGJlIG5vdC1udWxsIHRleHQgY29uc3QgKi8KKwkJaWYg KCh1cCAhPSBOVUxMICYmIElzQSh1cCwgQ29uc3QpICYmCisJCQkoKENvbnN0ICopIHVwKS0+Y29u c3R0eXBlID09IFRFWFRPSUQpKQogCQl7CisJCQlDb25zdAkgICAqY29uID0gKENvbnN0ICopIHVw OworCisJCQlBc3NlcnQgKCFjb24tPmNvbnN0aXNudWxsKTsKIAkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGJ1ZiwgJy4nKTsKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVu dGlmaWVyKHN0clZhbCh1cCkpKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBUZXh0 RGF0dW1HZXRDU3RyaW5nKGNvbi0+Y29uc3R2YWx1ZSkpOwogCQl9CiAJCWVsc2UKIAkJewpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2pzb25iLm91dAppbmRleCA5MWE3YjgyNTc2NC4uNWQ1MzZlYTVjOTUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0CkBAIC01MTYzLDcgKzUxNjMsNyBAQCBz ZWxlY3QgKCd7ImEiOiAxLCAiYiI6ICJjIiwgImQiOiBbMSwgMiwgM119Jzo6anNvbmIpWydkJ11b J2EnXTsKICgxIHJvdykKIAogc2VsZWN0ICgneyJhIjogMSwgImIiOiAiYyIsICJkIjogWzEsIDIs IDNdfSc6Ompzb25iKS5kWydhJ107Ci1FUlJPUjogIGpzb25iIHNpbXBsaWZpZWQgYWNjZXNzb3Ig c3VwcG9ydHMgc3Vic2NyaXB0aW5nIGluIHR5cGU6IElOVDQsIGdvdCB0eXBlOiB1bmtub3duCitF UlJPUjogIG9ubHkgaW50ZWdlciBjb25zdGFudHMgYXJlIHN1cHBvcnRlZCBpbiBqc29uYiBzaW1w bGlmaWVkIGFjY2Vzc29yIHN1YnNjcmlwdGluZwogTElORSAxOiBzZWxlY3QgKCd7ImEiOiAxLCAi YiI6ICJjIiwgImQiOiBbMSwgMiwgM119Jzo6anNvbmIpLmRbJ2EnXTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIHNlbGVj dCAoJ3siYSI6IDEsICJiIjogImMiLCAiZCI6IFsxLCAyLCAzXX0nOjpqc29uYikuZC5hOwpAQCAt NTIzMyw3ICs1MjMzLDcgQEAgc2VsZWN0ICgneyJhIjogWyJhMSIsIHsiYjEiOiBbImFhYSIsICJi YmIiLCAiY2NjIl19XSwgImIiOiAiYmIifSc6Ompzb25iKS5hWzFdLmIKICgxIHJvdykKIAogc2Vs ZWN0ICgneyJhIjogMX0nOjpqc29uYilbJ2EnOidiJ107IC0tIGZhaWxzCi1FUlJPUjogIGpzb25i IHNpbXBsaWZpZWQgYWNjZXNzb3Igc3VwcG9ydHMgc3Vic2NyaXB0aW5nIGluIHR5cGU6IElOVDQs IGdvdCB0eXBlOiB1bmtub3duCitFUlJPUjogIG9ubHkgaW50ZWdlciBjb25zdGFudHMgYXJlIHN1 cHBvcnRlZCBpbiBqc29uYiBzaW1wbGlmaWVkIGFjY2Vzc29yIHN1YnNjcmlwdGluZwogTElORSAx OiBzZWxlY3QgKCd7ImEiOiAxfSc6Ompzb25iKVsnYSc6J2InXTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXgogc2VsZWN0ICgnWzEsICIyIiwgbnVsbF0nOjpqc29uYilbMToy XTsKQEAgLTYwMzgsNyArNjAzOCw3IEBAIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VM RUNUICh0LmpiKS5hIEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb24gdDsKICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBTZXEgU2NhbiBvbiBwdWJsaWMudGVzdF9qc29u Yl9kb3Rfbm90YXRpb24gdAotICAgT3V0cHV0OiBqYi5hCisgICBPdXRwdXQ6IChqYikuYQogKDIg cm93cykKIAogU0VMRUNUICh0LmpiKS5hIEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb24gdDsK QEAgLTYwNTEsNyArNjA1MSw3IEBAIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNU IChqYikuYVsxXSBGUk9NIHRlc3RfanNvbmJfZG90X25vdGF0aW9uOwogICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAgU2VxIFNjYW4gb24gcHVibGljLnRlc3RfanNvbmJfZG90X25v dGF0aW9uCi0gICBPdXRwdXQ6IGpiLmFbMV0KKyAgIE91dHB1dDogKGpiKS5hWzFdCiAoMiByb3dz KQogCiBTRUxFQ1QgKGpiKS5hWzFdIEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb247CkBAIC02 MDYwLDYgKzYwNjAsMjIgQEAgU0VMRUNUIChqYikuYVsxXSBGUk9NIHRlc3RfanNvbmJfZG90X25v dGF0aW9uOwogIDIKICgxIHJvdykKIAorQ1JFQVRFIFZJRVcgdjEgQVMgU0VMRUNUIChqYikuYVsz XS54LnkgRlJPTSB0ZXN0X2pzb25iX2RvdF9ub3RhdGlvbjsKK0NSRUFURSBWSUVXIHYyIEFTIFNF TEVDVCAoamIpLmFbMzpdLngueVs6LTFdIEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb247CitD UkVBVEUgVklFVyB2MyBBUyBTRUxFQ1QgKGpiKS5hWzozXS54LnlbLTE6XSBGUk9NIHRlc3RfanNv bmJfZG90X25vdGF0aW9uOworXHN2IHYxCitDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1YmxpYy52 MSBBUworIFNFTEVDVCAoamIpLmFbM10ueC55IEFTIHkKKyAgIEZST00gdGVzdF9qc29uYl9kb3Rf bm90YXRpb24KK1xzdiB2MgorQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMudjIgQVMKKyBT RUxFQ1QgKGpiKS5hWzM6XS54LnlbMDonLTEnOjppbnRlZ2VyXSBBUyB5CisgICBGUk9NIHRlc3Rf anNvbmJfZG90X25vdGF0aW9uCitcc3YgdjMKK0NSRUFURSBPUiBSRVBMQUNFIFZJRVcgcHVibGlj LnYzIEFTCisgU0VMRUNUIChqYikuYVswOjNdLngueVsnLTEnOjppbnRlZ2VyOl0gQVMgeQorICAg RlJPTSB0ZXN0X2pzb25iX2RvdF9ub3RhdGlvbgorRFJPUCBWSUVXIHYxLCB2MiwgdjM7CiAtLSBq c29uYiBhcnJheSBhY2Nlc3MgaW4gcGxwZ3NxbAogRE8gJCQKIERFQ0xBUkUKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pz b25iLnNxbAppbmRleCA0YmQzOTkwZmI1NS4uNmFhNzFjN2MzYTQgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29u Yi5zcWwKQEAgLTE2MzQsNiArMTYzNCwxNCBAQCBTRUxFQ1QgKHQuamIpLmEgRlJPTSB0ZXN0X2pz b25iX2RvdF9ub3RhdGlvbiB0OwogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1Qg KGpiKS5hWzFdIEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb247CiBTRUxFQ1QgKGpiKS5hWzFd IEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb247CiAKK0NSRUFURSBWSUVXIHYxIEFTIFNFTEVD VCAoamIpLmFbM10ueC55IEZST00gdGVzdF9qc29uYl9kb3Rfbm90YXRpb247CitDUkVBVEUgVklF VyB2MiBBUyBTRUxFQ1QgKGpiKS5hWzM6XS54LnlbOi0xXSBGUk9NIHRlc3RfanNvbmJfZG90X25v dGF0aW9uOworQ1JFQVRFIFZJRVcgdjMgQVMgU0VMRUNUIChqYikuYVs6M10ueC55Wy0xOl0gRlJP TSB0ZXN0X2pzb25iX2RvdF9ub3RhdGlvbjsKK1xzdiB2MQorXHN2IHYyCitcc3YgdjMKK0RST1Ag VklFVyB2MSwgdjIsIHYzOworCiAtLSBqc29uYiBhcnJheSBhY2Nlc3MgaW4gcGxwZ3NxbAogRE8g JCQKIERFQ0xBUkUKLS0gCjIuMzQuMQoK --0000000000002695040638842d76--