Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vwZbx-00G0Dp-2s for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Mar 2026 05:45:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vwZbv-00CQhw-2n for pgsql-hackers@arkaria.postgresql.org; Sun, 01 Mar 2026 05:44:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vwZbv-00CQhn-1b for pgsql-hackers@lists.postgresql.org; Sun, 01 Mar 2026 05:44:59 +0000 Received: from mail-yx1-xb130.google.com ([2607:f8b0:4864:20::b130]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vwZbs-00000001pUB-2Dwz for pgsql-hackers@lists.postgresql.org; Sun, 01 Mar 2026 05:44:59 +0000 Received: by mail-yx1-xb130.google.com with SMTP id 956f58d0204a3-64937edbc9eso3054641d50.2 for ; Sat, 28 Feb 2026 21:44:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772343894; cv=none; d=google.com; s=arc-20240605; b=bs6JNYt+nCHLglV/RI2lkz8TSQ6asStBLpnjr5tynZcbrjj3R86usNFvfRCKLV5+w1 WyU3K0H739j696vgDVWm7lVrYlYDQjPdlf3eIppmJp3njLlbNJiglHwCtoBCnr34BLEu s1SO0iRwzm7dG45ZyvwlzqJmVKo9KjfdcVlgl1ul/7yXnd0whgFA/fFpU6lDqToF8Srn IwtsDVrJtVT8twHwcynitJkPKskqK3/BmiYa7M34nB53wlR51Fak4vxtb0I1scD7e9p+ zw0fOEpx1rgB+UrUcmpXmaf5V7IdvF2q23wQ/LoPmhrkv+reHSA2YvyTa+Mh07YhfrMt goOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=mdgKcmsp6eZvUA6stx1OMMVOLF2jtNd2qbLWJDG7SZ4=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=Zr0q/1ed9WT3SJiFa501Yzqz+bAMrnXhpH2YPn7bUe6XsGp69i9CbQlvzRmwnhF2D4 hxswPh0CQ99bIYNB7WWVY5PL5QZr2IjG50/7fatYaa8FBZ7r8gUjtaWczjykp1a73ncG ieroyEBhzcV2Ry9eHjJFzyocZRaWHDtXkTMm3qpcoY/hMbxncBhr1GUQmHXNx10+5aI4 cWY79g3Tqq+TcIGRxdsg9u/JN4cynNVw6Pi8ly5ZpC7ZX2dMO9n2eKPHZpQBRakZ9wXQ mgU94OgGtk73U3fZlv+7n9eExY48LwQhw1l1exXiamr1y+c1nTq/FDk9BdTzhMUJ9NDV cUPA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772343894; x=1772948694; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=mdgKcmsp6eZvUA6stx1OMMVOLF2jtNd2qbLWJDG7SZ4=; b=KyBJzG8rOdm2XMdZ5vPpnP7zkqlN1yA/ni6XnVvrvTEm39lQX1yvucRWrtYwYW+izL EPJ964hnCDyn5hfWYAt7doE7Owt4yHGXz6O4GWjKcxeeKrKylg9q+L2rAC0Xw8K0KMgH MOmXV389OrY4f27CvgvASYg+nC/wbVDq47/FlQJl8obXn5BOUaWnSoUIN0/6Nb4eADIc nkecQyjSdZty3rYj3ye4LQmkVyAre0lrI/F111QqRECWwUbO99FqdaU483bNKIVM8b36 OTRlwm2NxKn65hUn+Khbl+rwcXI9IOiiwn877On8AN4/k+OZyzEHLRefN/VtPSjpD7A2 NGFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772343894; x=1772948694; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mdgKcmsp6eZvUA6stx1OMMVOLF2jtNd2qbLWJDG7SZ4=; b=u4eWyYD+diblLEmIbrCLXbSkuCOWpwX2aSL8mGm6ZUVC6ZEU7NUV9ZuKD2IlwA8dD+ hx9Zfpf5vMngr4ICrPrmSw71F7y6fpgsHqYmXB0PS8o0VWSavtOZ9ps5Stij+E5bmzzC OfjaezQ/XtEoVemqWmJ2VR0EyE9zcJJOHKuYdhFZhXZGZH2USMKjUorK3BJIIAWCyV/i FoDiG21hVCsy11echRy7l4V8zMfWFErVODly98liy5mSkz6Vr2xOtjrHXUFEDi263M1f 7Kzt1ELrf2WlTDRKWFlObOdReyT0xDJBcmHu5d/Xv+K8pXgzUkJ3MhpfpwYdZV2O6lp0 ufQw== X-Gm-Message-State: AOJu0Yw1InZWJtCdmWR7uAAZ5H6sekxQC5UBMytlBo87IeWTa7rbnqC2 cMTfr4MQW0m/kc/ECvHv63du0FqsYwMAgKCi0YA/pd/Rhp664N1ruihrPh3YXwlGBHt+ELYBaTj GeR/ApZRpmPI9ydtaUG6vjhdO4Flg2wh5lQ== X-Gm-Gg: ATEYQzw9HHZrGzbIdd4WXStZiOnHCONwGGG3EGZXPYLbQ3JWzJ5aMbls0onckclwIp5 DeoI5WP2NeJXEhaG29AdGHmzvfBu37jCkEp6M5Q6d5ZBc+feScoJ+AZ6qzftya89jSlAN/vhvy4 koQxyElMhAXi/emHgzCMlR+WRxEbZWbuMLyvUs/uflTtxNytFdOf7VcnLjPi5auPCViNtTHdEQR FOgMUu3gkn6Mr2+QM2IgwOmbH/InanhOalCDVA1cNmWn194bPwGds1P9CoTfoerR96vm+y1koAK xYt+VotXOjdGWieeLHwuNxODM0N2t5EbCix+Ks5A8GQaTA0tCb/5/ZCNHjSDgfASdqxl2iim76V I+8jtmuZ7XTsxqqKjS+SrpQT+TPyCeaTAHQCIA/lr9xLa9Fe6P7/OFTla502sSajgXlFG X-Received: by 2002:a53:bbd2:0:b0:64a:f160:2376 with SMTP id 956f58d0204a3-64cc211be31mr5736766d50.30.1772343894529; Sat, 28 Feb 2026 21:44:54 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Pavel Stehule Date: Sun, 1 Mar 2026 06:44:17 +0100 X-Gm-Features: AaiRm52SCNRoNR9DCQZljUzE15SPqPsSQG8r7TDnm2re9zvJE363o5mFyGtU9Rw Message-ID: Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000418ec1064beff8d4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000418ec1064beff8d4 Content-Type: multipart/alternative; boundary="000000000000418ebf064beff8d2" --000000000000418ebf064beff8d2 Content-Type: text/plain; charset="UTF-8" Hi small update Now assignment to plpgsql array variable and json array works. Some minor code cleaning + more regress tests. Regards Pavel --000000000000418ebf064beff8d2 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

small update
Now assignment to plpgsql array variable and json array works.= Some minor code cleaning=C2=A0+ more regress tests.

Regards

Pavel

--000000000000418ebf064beff8d2-- --000000000000418ec1064beff8d4 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260301-2-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Disposition: attachment; filename="v20260301-2-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm7br2dy0 RnJvbSBiMDU1NmMwOGZlMDMxMDI3ZWJkMTBkZmY4ZjlkNGRmNWYxOGFjMjg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDEyOjUzOjQ0ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gRk9SRUFDSCBzY2FsYXIgSU4gSlNPTiBBUlJBWQoKdGhpcyBwYXRjaCBpbnRyb2R1Y2Ug Rk9SRUFDSCBzY2FsYXJfdmFyIElOIEpTT04gQVJSQVkuIFRoZSBkZXNpZ24gaXMgYmFzZWQKb24g YmVoYXZlIG9mIGpzb25iX2FycmF5X2VsZW1lbnRzIGZ1bmN0aW9ucy4gSW4gdGhpcyBjYXNlLCBG T1JFQUNIIGVuZm9yY2UKY2FzdGluZyB0byB0YXJnZXQgdHlwZSAoYmVjYXVzZSB3ZSBrbm93IHRh cmdldCB0eXBlKSBhbmQgdHJ5IHRvIHJlZHVjZQpJTyBjYXN0aW5nLiBBdHRlbnRpb246IElPIGNh c3RpbmcgY2FuIGJlIG1vcmUgc3RyaWN0LCB0aGVuIGNhc3RpbmcgYmFzZWQKb24gY2FzdCBmdW5j dGlvbnMuCgpERUNMQVJFIHQgaW50OwpCRUdJTgogIC0tIHRoaXMgY2FuIHdvcmsgYmVjYXVzZSB3 ZSB1c2UgY2FzdCBudW1lcmljIC0+IGludAogIEZPUkVBQ0ggdCBJTiBKU09OIEFSUkFZICdbMSwy LDMuMTRdJwogIExPT1AKCiAgLS0gdGhpcyBmYWlscywgYmVjYXVzZSBJTyBjYXN0IGlzIHVzZWQs IGFuZCBpbnRlZ2VyIGlucHV0IGZ1bmN0aW9uCiAgLS0gYWxsb3dzIG9ubHkgZGlnaXRzCiAgRk9S RUFDIHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzLCIzLjE0Il0nCiAgTE9PUAoKQ29uY2VwdHVhbCBx dWVzdGlvbiBpcyBpZiBjYXN0aW5nIHNob3VsZCBiZSBzdHJpY3QgbGlrZSAib2xkIiBQb3N0Z3Jl U1FMCmpzb24gZnVuY3Rpb24gb3IgbGF4IGFzICJuZXciIFNRTC9KU09OIGZ1bmN0aW9ucz8gSSBj YW4gaW1hZ2luZSBsYXggbW9kZQphcyBkZWZhdWx0IHdpdGggcG9zc2liaWxpdHkgdG8gc3dpdGNo IHRvIHN0cmljdCBtb2RlICh0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZApub3cpOgoKICBGT1JFQUNI IHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IK ICBMT09QCiAgICAuLi4KClRoZSBwZXJmb3JtYW5jZSAoYmVzdCBjYXNlIGZvciBpdGVyYXRpb24g b3ZlciAxMDAwIGZpZWxkcyBhcnJheSkgaXMgYWJvdXQKNHggYmV0dGVyIHRoYW4gd2hlbiBGT1Ig SU4gU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRzIGlzIHVzZWQuCi0tLQogZG9jL3NyYy9zZ21s L3BscGdzcWwuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDU5ICsrKysKIHNyYy9wbC9wbHBn c3FsL3NyYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogLi4uL3BscGdzcWwv c3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQgIHwgMTkyICsrKysrKysrKysrKwogc3Jj L3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9w bC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgICAgICAgICAgICAgICAgICB8IDI4NyArKysrKysrKysr KysrKysrKysKIHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9mdW5jcy5jICAgICAgICAgICAgICAgICB8 ICAyOSArKwogc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueSAgICAgICAgICAgICAgICAgIHwg IDM5ICsrLQogc3JjL3BsL3BscGdzcWwvc3JjL3BsX3VucmVzZXJ2ZWRfa3dsaXN0LmggICAgIHwg ICAxICsKIHNyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3FsLmggICAgICAgICAgICAgICAgICB8ICAz NiArKy0KIHNyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbCAgICB8IDE1 OSArKysrKysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCA3OTcgaW5zZXJ0aW9ucygrKSwgOCBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQv cGxwZ3NxbF9mb3JlYWNoLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbC9wbHBnc3FsL3Ny Yy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wbHBn c3FsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5zZ21sCmluZGV4IDU2MWY2ZTUwZDYzLi4w MzRmYmQ4YmQ0NSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3BscGdzcWwuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcGxwZ3NxbC5zZ21sCkBAIC0yNzgwLDYgKzI3ODAsNjUgQEAgTk9USUNFOiAg cm93ID0gezEwLDExLDEyfQogICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+CiAKKyAgIDxzZWN0MiBp ZD0icGxwZ3NxbC1mb3JlYWNoLWpzb24tYXJyYXkiPgorICAgIDx0aXRsZT5Mb29waW5nIHRocm91 Z2ggSlNPTiBhcnJheXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgIFRoZSA8bGl0ZXJhbD5G T1JFQUNIPC9saXRlcmFsPiBsb29wIGlzIG11Y2ggbGlrZSBhIDxsaXRlcmFsPkZPUkVBQ0g8L2xp dGVyYWw+IGxvb3AsCisgICAgIGJ1dCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGVsZW1l bnRzIG9mIHRoZSBhcnJheSwKKyAgICAgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudHMg b2YgYW4gSlNPTiBhcnJheSB2YWx1ZQorICAgICAoZXhwcmVzc2lvbiBpcyBpbnRlcm5hbHkgY2Fz dGVkIHRvIGpzb25iIHR5cGUpLgorCis8c3lub3BzaXM+Cis8b3B0aW9uYWw+ICZsdDsmbHQ7PHJl cGxhY2VhYmxlPmxhYmVsPC9yZXBsYWNlYWJsZT4mZ3Q7Jmd0OyA8L29wdGlvbmFsPgorRk9SRUFD SCA8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gSU4gSlNPTiBBUlJBWSA8cmVwbGFj ZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IExPT1AKKyAgICA8cmVwbGFjZWFibGU+c3Rh dGVtZW50czwvcmVwbGFjZWFibGU+CitFTkQgTE9PUCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5s YWJlbDwvcmVwbGFjZWFibGU+IDwvb3B0aW9uYWw+OworPC9zeW5vcHNpcz4KKyAgICA8L3BhcmE+ CisKKyAgICA8cGFyYT4KKyAgICAgVGFyZ2V0IGNhbiBiZSBzY2FsYXIgdmFyaWFibGUsIGNvbXBv c2l0ZSB2YXJpYWJsZSBvciBsaXN0IG9mCisgICAgIHNjYWxhciB2YXJpYWJsZXMuIFdoZW4gdmFy aWFibGUgaXMgbm90IHNjYWxhciwgdGhlbiBhc3NpZ25lZCB2YWx1ZQorICAgICBzaG91bGQgYmUg YSBKU09OIG9iamVjdCBhbmQgdGhlIEpTT04gYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgYnkgbmFt ZXMuCisKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFURSBGVU5DVElPTiBzY2FuX3Jvd3MoanNvbmIp IFJFVFVSTlMgdm9pZCBBUyAkJAorREVDTEFSRQorICB4IGludDsKK0JFR0lOCisgIEZPUkVBQ0gg eCBJTiBKU09OIEFSUkFZICQxCisgIExPT1AKKyAgICBSQUlTRSBOT1RJQ0UgJ3JvdyA9ICUnLCB4 OworICBFTkQgTE9PUDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CisKK1NFTEVDVCBzY2Fu X3Jvd3MoJ1sxLDIsM10nKTsKK05PVElDRTogIHJvdyA9IDEKK05PVElDRTogIHJvdyA9IDIKK05P VElDRTogIHJvdyA9IDMKKworQ1JFQVRFIEZVTkNUSU9OIHNjYW5fcm93cyhqc29uYikgUkVUVVJO UyB2b2lkIEFTICQkCitERUNMQVJFCisgIHggaW50OyB5IHZhcmNoYXI7CitCRUdJTgorICBGT1JF QUNIIHgsIHkgSU4gSlNPTiBBUlJBWSAkMQorICBMT09QCisgICAgUkFJU0UgTk9USUNFICd4OiAl LCB5OiAlJywgeCwgeTsKKyAgRU5EIExPT1A7CitFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsOwor CitTRUxFQ1Qgc2Nhbl9yb3dzKCdbe30seyJ4IjoxMH0seyJ5IjoiSGkifSx7InkiOiJIaSIsICJ4 IjoxMDAwfV0nKTsKK05PVElDRTogIHg6ICZsdDtOVUxMJmd0OywgeTogJmx0O05VTEwmZ3Q7CitO T1RJQ0U6ICB4OiAxMCwgeTogJmx0O05VTEwmZ3Q7CitOT1RJQ0U6ICB4OiAmbHQ7TlVMTCZndDss IHk6IEhpCitOT1RJQ0U6ICB4OiAxMDAwLCB5OiBIaQorPC9wcm9ncmFtbGlzdGluZz4KKyAgICA8 L3BhcmE+CisgICA8L3NlY3QyPgorCiAgICA8c2VjdDIgaWQ9InBscGdzcWwtZXJyb3ItdHJhcHBp bmciPgogICAgIDx0aXRsZT5UcmFwcGluZyBFcnJvcnM8L3RpdGxlPgogCmRpZmYgLS1naXQgYS9z cmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUK aW5kZXggNjNjYjk2ZmFlM2UuLjViZDBjZjMxZGZjIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3Nx bC9zcmMvTWFrZWZpbGUKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL01ha2VmaWxlCkBAIC0zNSw3 ICszNSw3IEBAIFJFR1JFU1NfT1BUUyA9IC0tZGJuYW1lPSQoUExfVEVTVERCKQogUkVHUkVTUyA9 IHBscGdzcWxfYXJyYXkgcGxwZ3NxbF9jYWNoZSBwbHBnc3FsX2NhbGwgcGxwZ3NxbF9jb250cm9s IFwKIAlwbHBnc3FsX2NvcHkgcGxwZ3NxbF9kb21haW4gcGxwZ3NxbF9taXNjIFwKIAlwbHBnc3Fs X3JlY29yZCBwbHBnc3FsX3NpbXBsZSBwbHBnc3FsX3RyYW5zYWN0aW9uIFwKLQlwbHBnc3FsX3Ry YXAgcGxwZ3NxbF90cmlnZ2VyIHBscGdzcWxfdmFycHJvcHMKKwlwbHBnc3FsX3RyYXAgcGxwZ3Nx bF90cmlnZ2VyIHBscGdzcWxfdmFycHJvcHMgcGxwZ3NxbF9mb3JlYWNoCiAKICMgd2hlcmUgdG8g ZmluZCBnZW5fa2V5d29yZGxpc3QucGwgYW5kIHN1YnNpZGlhcnkgZmlsZXMKIFRPT0xTRElSID0g JCh0b3Bfc3JjZGlyKS9zcmMvdG9vbHMKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9l eHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0IGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVk L3BscGdzcWxfZm9yZWFjaC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmJjMzY2ZTc4ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4 cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQKQEAgLTAsMCArMSwxOTIgQEAKKy0tIG51bWVyaWMg dG8gbnVtZXJpYworZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4 IGluIGpzb24gYXJyYXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsXScKKyAgbG9vcAorICAgIHJhaXNl IG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxMAorTk9U SUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzLjE0CitOT1RJQ0U6ICA8TlVMTD4KKy0t IG51bWVyaWMgdG8gaW50IGJ5IGNhc3QKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAg Zm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsXScKKyAgbG9vcAor ICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6 ICAxMAorTk9USUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzCitOT1RJQ0U6ICA8TlVM TD4KKy0tIGNvbnZlcnNpb24gIjMuMTQiIHRvIGludCBzaG91bGQgdG8gZmFpbCBkdWUgSU8gY2Fz dAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJh eSAnWyIxMCIsMjAsMzAsIjMuMTQiXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7 CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxMAorTk9USUNFOiAgMjAKK05PVElD RTogIDMwCitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGludGVnZXI6ICIz LjE0IgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUg NCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBib29sZWFuOwor YmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1t0cnVlLCBmYWxzZV0nCisgIGxvb3AK KyAgaWYgeCB0aGVuCisgICAgcmFpc2Ugbm90aWNlICd0cnVlJzsKKyAgZWxzZQorICAgIHJhaXNl IG5vdGljZSAnZmFsc2UnOworICBlbmQgaWY7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJ Q0U6ICB0cnVlCitOT1RJQ0U6ICBmYWxzZQorLS0ganNvbmIgdG8ganNvbmIKK2RvICQkCitkZWNs YXJlIHgganNvbmI7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEwLDIwLDMw LDMuMTQsIG51bGwsICJIaSJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAg ZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAyMAorTk9USUNFOiAg MzAKK05PVElDRTogIDMuMTQKK05PVElDRTogIG51bGwKK05PVElDRTogICJIaSIKKy0tIGpzb25i IHRvIGpzb24KK2RvICQkCitkZWNsYXJlIHgganNvbjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBq c29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICByYWlz ZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05P VElDRTogIDIwCitOT1RJQ0U6ICAzMAorTk9USUNFOiAgMy4xNAorTk9USUNFOiAgbnVsbAorTk9U SUNFOiAgIkhpIgorLS0gaXRlcmF0aW9uIG92ZXIgY29tcG9zaXRlcworZG8gJCQKK2RlY2xhcmUg eCBpbnQ7IHkgbnVtZXJpYzsgeiB2YXJjaGFyOworYmVnaW4KKyAgZm9yZWFjaCB4LCB5LCB6IGlu IGpzb24gYXJyYXkgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngi OjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6 OiAlJywgeCwgeSwgejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIHg6IDxOVUxM PiwgeTogPE5VTEw+LCB6OiA8TlVMTD4KK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6 OiBIaQorTk9USUNFOiAgeDogPE5VTEw+LCB5OiAzLjE0LCB6OiA8TlVMTD4KK05PVElDRTogIHg6 IDEwLCB5OiAzLjE0LCB6OiBIaQorY3JlYXRlIHR5cGUgdDMgYXMgKHggaW50LCB5IG51bWVyaWMs IHogdmFyY2hhcik7CitkbyAkJAorZGVjbGFyZSBjIHQzOworYmVnaW4KKyAgZm9yZWFjaCBjIGlu IGpzb24gYXJyYXkgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngi OjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6 OiAlJywgYy54LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIHg6 IDxOVUxMPiwgeTogPE5VTEw+LCB6OiA8TlVMTD4KK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5V TEw+LCB6OiBIaQorTk9USUNFOiAgeDogPE5VTEw+LCB5OiAzLjE0LCB6OiA8TlVMTD4KK05PVElD RTogIHg6IDEwLCB5OiAzLjE0LCB6OiBIaQorZG8gJCQKK2RlY2xhcmUgYyB0MzsKK2JlZ2luCisg IGZvcmVhY2ggYy54LCBjLnksIGMueiBpbiBqc29uIGFycmF5ICdbe30sIHsieiI6IkhpIn0sIHsi eSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAgbG9vcAorICAgIHJh aXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIGMueCwgYy55LCBjLno7CisgIGVuZCBsb29w OworZW5kOworJCQ7CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogPE5VTEw+CitO T1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogSGkKK05PVElDRTogIHg6IDxOVUxMPiwg eTogMy4xNCwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiAxMCwgeTogMy4xNCwgejogSGkKK2Ryb3Ag dHlwZSB0MzsKKy0tIHRhcmdldCBjYW4gYmUgYSBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBpbnRb XTsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbWzEsMiwzXSxbNCw1LDZdXScK KyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlICUnLCB4WzFdLCB4WzJdLCB4WzNdOworICBl bmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMSAyIDMKK05PVElDRTogIDQgNSA2CitkbyAk JAorZGVjbGFyZSB4IHZhcmNoYXJbXTsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5 ICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxsbyIsIkhpIl1dJworICBsb29wCisgICAgcmFpc2Ugbm90 aWNlICclICUnLCB4WzFdLCB4WzJdOworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg SGkgSGVsbG8KK05PVElDRTogIEhlbGxvIEhpCitkbyAkJAorZGVjbGFyZSB4IHZhcmNoYXJbXTsK K2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxs byIsIkhpIl1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUnLCB4WzFdLCB4WzJdOwor ICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgSGkgSGVsbG8KK05PVElDRTogIEhlbGxv IEhpCitkbyAkJAorZGVjbGFyZSB4IGludFtdOyB5IHZhcmNoYXI7CitiZWdpbgorICBmb3JlYWNo IHgsIHkgaW4ganNvbiBhcnJheSAnW3sieCI6WzEsMiwzXSwgInkiOiJIaSJ9LCB7IngiOls0LDUs Nl0sICJ5IjoiSGkifV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlLCB5OiAlJywg eFsxXSwgeFsyXSwgeFszXSwgeTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEg MiAzLCB5OiBIaQorTk9USUNFOiAgNCA1IDYsIHk6IEhpCitjcmVhdGUgdHlwZSB0MiBhcyAoeCBp bnRbXSwgeSB2YXJjaGFyKTsKK2RvICQkCitkZWNsYXJlIGMgdDI7CitiZWdpbgorICBmb3JlYWNo IGMgaW4ganNvbiBhcnJheSAnW3sieCI6WzEsMiwzXSwgInkiOiJIaSJ9LCB7IngiOls0LDUsNl0s ICJ5IjoiSGkifV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlLCB5OiAlJywgYy54 WzFdLCBjLnhbMl0sIGMueFszXSwgYy55OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNF OiAgMSAyIDMsIHk6IEhpCitOT1RJQ0U6ICA0IDUgNiwgeTogSGkKK2Ryb3AgdHlwZSB0MjsKZGlm ZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9tZXNvbi5idWlsZCBiL3NyYy9wbC9wbHBnc3Fs L3NyYy9tZXNvbi5idWlsZAppbmRleCA2ZmYyNzAwNmNmYy4uNjA5ZWVkN2EyOGQgMTAwNjQ0Ci0t LSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9tZXNvbi5idWlsZAorKysgYi9zcmMvcGwvcGxwZ3NxbC9z cmMvbWVzb24uYnVpbGQKQEAgLTg4LDYgKzg4LDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3BscGdz cWxfdHJhcCcsCiAgICAgICAncGxwZ3NxbF90cmlnZ2VyJywKICAgICAgICdwbHBnc3FsX3ZhcnBy b3BzJywKKyAgICAgICdwbHBnc3FsX2ZvcmVhY2gnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1n aXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jIGIvc3JjL3BsL3BscGdzcWwvc3JjL3Bs X2V4ZWMuYwppbmRleCA4NDU1MmUzMmM4Ny4uZjk4OGExZDc0YzQgMTAwNjQ0Ci0tLSBhL3NyYy9w bC9wbHBnc3FsL3NyYy9wbF9leGVjLmMKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMu YwpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUg InV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmZ1bmNzLmgiCiAjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKQEAgLTMwNSw2ICszMDcsOCBAQCBzdGF0aWMgaW50CWV4ZWNfc3RtdF9m b3JjKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJCQkJCQkgICBQTHBnU1FMX3N0bXRfZm9y YyAqc3RtdCk7CiBzdGF0aWMgaW50CWV4ZWNfc3RtdF9mb3JlYWNoX2EoUExwZ1NRTF9leGVjc3Rh dGUgKmVzdGF0ZSwKIAkJCQkJCQkJUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqc3RtdCk7CitzdGF0 aWMgaW50CWV4ZWNfc3RtdF9mb3JlYWNoX2pzb25fYShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRl LAorCQkJCQkJCQkJIFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqc3RtdCk7CiBzdGF0aWMg aW50CWV4ZWNfc3RtdF9vcGVuKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJCQkJCQkgICBQ THBnU1FMX3N0bXRfb3BlbiAqc3RtdCk7CiBzdGF0aWMgaW50CWV4ZWNfc3RtdF9mZXRjaChQTHBn U1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLApAQCAtMjA3NSw2ICsyMDc5LDEwIEBAIGV4ZWNfc3RtdHMo UExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwgTGlzdCAqc3RtdHMpCiAJCQkJcmMgPSBleGVjX3N0 bXRfZm9yZWFjaF9hKGVzdGF0ZSwgKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKikgc3RtdCk7CiAJ CQkJYnJlYWs7CiAKKwkJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNPTl9BOgorCQkJCXJj ID0gZXhlY19zdG10X2ZvcmVhY2hfanNvbl9hKGVzdGF0ZSwgKFBMcGdTUUxfc3RtdF9mb3JlYWNo X2pzb25fYSAqKSBzdG10KTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBQTFBHU1FMX1NUTVRfRVhJ VDoKIAkJCQlyYyA9IGV4ZWNfc3RtdF9leGl0KGVzdGF0ZSwgKFBMcGdTUUxfc3RtdF9leGl0ICop IHN0bXQpOwogCQkJCWJyZWFrOwpAQCAtMjk5NSw2ICszMDAzLDI0MCBAQCBleGVjX3N0bXRfZm9y YyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBQTHBnU1FMX3N0bXRfZm9yYyAqc3RtdCkKIH0K IAogCisvKgorICogQ29udmVydCBKc29uYlZhbHVlIHRvIERhdHVtIHRoYXQgY2FuIGJlIGFzc2ln bmVkIHRvIFBMcGdTUUxfdmFyLgorICovCitzdGF0aWMgRGF0dW0KK0pzb25iVmFsdWVUb0RhdHVt KEpzb25iVmFsdWUgKmpidiwKKwkJCQkgIE9pZCAqdHlwaWQsIGludDMyICp0eXBtb2QsIGJvb2wg KmlzbnVsbCwKKwkJCQkgIE9pZCBleHBlY3RlZF90eXBpZCwgaW50MzIgZXhwZWN0ZWRfdHlwbW9k LAorCQkJCSAgdm9pZCAqKmNhY2hlLCBNZW1vcnlDb250ZXh0IG1jeHQpCit7CisJaWYgKGV4cGVj dGVkX3R5cGlkID09IEpTT05CT0lEKQorCXsKKwkJKnR5cGlkID0gSlNPTkJPSUQ7CisJCSp0eXBt b2QgPSAtMTsKKwkJKmlzbnVsbCA9IGZhbHNlOworCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0o SnNvbmJWYWx1ZVRvSnNvbmIoamJ2KSk7CisJfQorCWVsc2UgaWYgKGV4cGVjdGVkX3R5cGlkID09 IEpTT05PSUQpCisJeworCQlKc29uYgkgICAqanNvbmI7CisJCWNoYXIJICAgKnN0cjsKKworCQkv KiBzZXJpYWxpemUgSnNvblZhbHVlIHRvIEpTT04gdGV4dCAqLworCQlqc29uYiA9IEpzb25iVmFs dWVUb0pzb25iKGpidik7CisJCXN0ciA9IEpzb25iVG9DU3RyaW5nKE5VTEwsICZqc29uYi0+cm9v dCwgVkFSU0laRShqc29uYikpOworCisJCSp0eXBpZCA9IFRFWFRPSUQ7CisJCSp0eXBtb2QgPSAt MTsKKwkJKmlzbnVsbCA9IGZhbHNlOworCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oY3N0cmlu Z190b190ZXh0KHN0cikpOworCX0KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2TnVsbCkKKwl7 CisJCSp0eXBpZCA9IGV4cGVjdGVkX3R5cGlkOworCQkqdHlwbW9kID0gLTE7CisJCSppc251bGwg PSB0cnVlOworCisJCXJldHVybiAoRGF0dW0pIDA7CisJfQorCWVsc2UgaWYgKGpidi0+dHlwZSA9 PSBqYnZTdHJpbmcpCisJeworCQkqdHlwaWQgPSBURVhUT0lEOworCQkqdHlwbW9kID0gLTE7CisJ CSppc251bGwgPSBmYWxzZTsKKworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9f dGV4dF93aXRoX2xlbihqYnYtPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkJCQkJCQlqYnYtPnZh bC5zdHJpbmcubGVuKSk7CisJfQorCWVsc2UgaWYgKGpidi0+dHlwZSA9PSBqYnZOdW1lcmljKQor CXsKKwkJKnR5cGlkID0gTlVNRVJJQ09JRDsKKwkJKnR5cG1vZCA9IC0xOworCQkqaXNudWxsID0g ZmFsc2U7CisKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShqYnYtPnZhbC5udW1lcmljKTsKKwl9 CisJZWxzZSBpZiAoamJ2LT50eXBlID09IGpidkJvb2wpCisJeworCQkqdHlwaWQgPSBCT09MT0lE OworCQkqdHlwbW9kID0gLTE7CisJCSppc251bGwgPSBmYWxzZTsKKworCQlyZXR1cm4gQm9vbEdl dERhdHVtKGpidi0+dmFsLmJvb2xlYW4pOworCX0KKwllbHNlCisJeworCQlKc29uYgkqanNvbmI7 CisJCURhdHVtCXJlc3VsdDsKKworCQlqc29uYiA9IEpzb25iVmFsdWVUb0pzb25iKGpidik7CisJ CXJlc3VsdCA9IGpzb25fcG9wdWxhdGVfdHlwZShQb2ludGVyR2V0RGF0dW0oanNvbmIpLCBKU09O Qk9JRCwKKwkJCQkJCQkJCWV4cGVjdGVkX3R5cGlkLCBleHBlY3RlZF90eXBtb2QsCisJCQkJCQkJ CQljYWNoZSwgbWN4dCwKKwkJCQkJCQkJCWlzbnVsbCwgZmFsc2UsIE5VTEwpOworCisJCSp0eXBp ZCA9IGV4cGVjdGVkX3R5cGlkOworCQkqdHlwbW9kID0gZXhwZWN0ZWRfdHlwbW9kOworCisJCXJl dHVybiByZXN1bHQ7CisJfQorfQorCisvKiAtLS0tLS0tLS0tCisgKiBleGVjX3N0bXRfZm9yZWFj aF9qc29uX2EJCQlMb29wIG92ZXIgZWxlbWVudHMgaW4ganNvbiBhcnJheQorICoKKyAqIFdoZW4g dGFyZ2V0IGlzIGEgY29tcG9zaXRlLCB0aGVuIHRhcmdldCBpcyBwb3B1bGF0ZWQgbGlrZSBqc29u X3RvX3BvcHVsYXRlX3JlY29yZC4KKyAqIGpzb25iIGRvZXNuJ3QgcHJlc2VydmUgYXR0cmlidXRl IG9yZGVyLCBzbyBwb3NpdGlvbiBiYXNlZCBtYXBwaW5nIGJldHdlZW4KKyAqIHRhcmdldCBhbmQg c291cmNlIGNhbiBiZSBwb3NzaWJseSBkYW5nZXJvdXMgKHdpdGggdW5leHBlY3RlZCBiZWhhdmUp LgorICogLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50CitleGVjX3N0bXRfZm9yZWFjaF9qc29u X2EoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKKwkJCQkJCSBQTHBnU1FMX3N0bXRfZm9yZWFj aF9qc29uX2EgKnN0bXQpCit7CisJT2lkCQkJZXhwcnR5cGVpZDsKKwlpbnQzMgkJZXhwcnR5cG1v ZDsKKwlEYXR1bQkJZXhwcmRhdHVtOworCVBMcGdTUUxfZGF0dW0gKmxvb3BfdmFyOworCU9pZAkJ CWxvb3BfdmFyX3R5cGlkOworCWludDMyCQlsb29wX3Zhcl90eXBtb2Q7CisJT2lkCQkJbG9vcF92 YXJfY29sbGF0aW9uOworCUpzb25iCSAgICpqYjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29u YlZhbHVlCWpidjsKKwlKc29uYkl0ZXJhdG9yVG9rZW4gcjsKKwlNZW1vcnlDb250ZXh0IHN0bXRf bWNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCU1lbW9yeUNvbnRleHQgdG1w X2N4dDsKKwlib29sCQlmb3VuZCA9IGZhbHNlOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlza2lw TmVzdGVkID0gZmFsc2U7CisJaW50CQkJcmMgPSBQTFBHU1FMX1JDX09LOworCXZvaWQJICAgKmNh Y2hlID0gTlVMTDsKKworCS8qIGdldCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gKi8KKwll eHByZGF0dW0gPSBleGVjX2V2YWxfZXhwcihlc3RhdGUsIHN0bXQtPmV4cHIsICZpc251bGwsCisJ CQkJCQkJICAgJmV4cHJ0eXBlaWQsICZleHBydHlwbW9kKTsKKwlpZiAoaXNudWxsKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCks CisJCQkJIGVycm1zZygiRk9SRUFDSCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwiKSkpOwor CisJLyoKKwkgKiBEbyBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIHRoZSBjb2RlIGJlbG93IGluIHN0 bXRfbWNvbnRleHQsIHRvIGF2b2lkIGFueQorCSAqIGxlYWtzIGZyb20gY2FsbGVkIHN1YnJvdXRp bmVzLiAgV2UgbmVlZCBhIHByaXZhdGUgc3RtdF9tY29udGV4dCBzaW5jZQorCSAqIHdlJ2xsIGJl IGNhbGxpbmcgYXJiaXRyYXJ5IHN0YXRlbWVudCBjb2RlLgorCSAqLworCXN0bXRfbWNvbnRleHQg PSBnZXRfc3RtdF9tY29udGV4dChlc3RhdGUpOworCXB1c2hfc3RtdF9tY29udGV4dChlc3RhdGUp OworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RtdF9tY29udGV4dCk7CisK Kwl0bXBfY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkJIkZPUkVBQ0ggSU4gSlNPTiBBUlJBWSB0ZW1wb3JhcnkgY3h0IiwKKwkJCQkJCQkJ CUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyogY2FzdCB0byBqc29uYiAqLworCWV4cHJk YXR1bSA9IGV4ZWNfY2FzdF92YWx1ZShlc3RhdGUsIGV4cHJkYXR1bSwgJmlzbnVsbCwKKwkJCQkJ CQkJZXhwcnR5cGVpZCwgZXhwcnR5cG1vZCwKKwkJCQkJCQkJSlNPTkJPSUQsIC0xKTsKKworCUFz c2VydCghaXNudWxsKTsKKworCS8qCisJICogV2UgbXVzdCBjb3B5IHRoZSBhcnJheSBpbnRvIHN0 bXRfbWNvbnRleHQsIGVsc2UgaXQgd2lsbCBkaXNhcHBlYXIgaW4KKwkgKiBleGVjX2V2YWxfY2xl YW51cC4gIFRoaXMgaXMgYW5ub3lpbmcsIGJ1dCBjbGVhbnVwIHdpbGwgY2VydGFpbmx5IGhhcHBl bgorCSAqIHdoaWxlIHJ1bm5pbmcgdGhlIGxvb3AgYm9keSwgc28gd2UgaGF2ZSBsaXR0bGUgY2hv aWNlLgorCSAqLworCWpiID0gRGF0dW1HZXRKc29uYlBDb3B5KGV4cHJkYXR1bSk7CisKKwkvKiBD bGVhbiB1cCBhbnkgbGVmdG92ZXIgdGVtcG9yYXJ5IG1lbW9yeSAqLworCWV4ZWNfZXZhbF9jbGVh bnVwKGVzdGF0ZSk7CisKKwkvKgorCSAqIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIGpzb25iX2Fy cmF5X2VsZW1lbnQuIFNRTC9KU09OIGZ1bmN0aW9ucyBhcmUgbm90CisJICogdG9vIHN0cmljdCBs aWtlIFBvc3RncmVTUUwgcHJvcHJpZXRhcnkgKG9sZCBqc29uKSBmdW5jdGlvbnMuIEluIFNRTC9K U09OCisJICogYSBzY2FsYXIgaXMgZXF1YWwgdG8gb25lIGVsZW1lbnQgYXJyYXkuIFRoZSBiYXNp YyBxdWVzdGlvbiBpcyBpZiBGT1JFQUNICisJICogc2hvdWxkIGJlIG1vcmUgcmVzdHJpY3RpdmUg bGlrZSBvbGQgSlNPTiBmdW5jdGlvbiwgb3IgbGVzcyByZXN0cmljdGl2ZQorCSAqIGxpa2UgU1FM L0pTT04gZnVuY3Rpb25zLgorCSAqLworCWlmIChKQl9ST09UX0lTX1NDQUxBUihqYikpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJIGVycm1zZygiY2Fubm90IGV4dHJhY3QgZWxlbWVudHMgZnJvbSBhIHNjYWxhciIp KSk7CisJZWxzZSBpZiAoIUpCX1JPT1RfSVNfQVJSQVkoamIpKQorCQllcmVwb3J0KEVSUk9SLAor CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJt c2coImNhbm5vdCBleHRyYWN0IGVsZW1lbnRzIGZyb20gYW4gb2JqZWN0IikpKTsKKworCS8qIFNl dCB1cCB0aGUgbG9vcCB2YXJpYWJsZSBhbmQgc2VlIGlmIGl0IGlzIG9mIGFuIGFycmF5IHR5cGUg Ki8KKwlsb29wX3ZhciA9IGVzdGF0ZS0+ZGF0dW1zW3N0bXQtPnZhcm5vXTsKKworCXBscGdzcWxf ZXhlY19nZXRfZGF0dW1fdHlwZV9pbmZvKGVzdGF0ZSwgbG9vcF92YXIsCisJCQkJCQkJCQkgJmxv b3BfdmFyX3R5cGlkLCAmbG9vcF92YXJfdHlwbW9kLAorCQkJCQkJCQkJICZsb29wX3Zhcl9jb2xs YXRpb24pOworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdCgmamItPnJvb3QpOworCisJd2hpbGUg KChyID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmamJ2LCBza2lwTmVzdGVkKSkgIT0gV0pCX0RP TkUpCisJeworCQlza2lwTmVzdGVkID0gdHJ1ZTsKKworCQlpZiAociA9PSBXSkJfRUxFTSkKKwkJ eworCQkJRGF0dW0JCXZhbDsKKwkJCU9pZAkJCXZhbHR5cGlkOworCQkJaW50MzIJCXZhbHR5cG1v ZDsKKwkJCWJvb2wJCXZhbGlzbnVsbDsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcF9j eHQpOworCisJCQl2YWwgPSBKc29uYlZhbHVlVG9EYXR1bSgmamJ2LAorCQkJCQkJCQkJJnZhbHR5 cGlkLCAmdmFsdHlwbW9kLCAmdmFsaXNudWxsLAorCQkJCQkJCQkJbG9vcF92YXJfdHlwaWQsIGxv b3BfdmFyX3R5cG1vZCwKKwkJCQkJCQkJCSZjYWNoZSwgc3RtdF9tY29udGV4dCk7CisKKwkJCS8q IGV4ZWNfYXNzaWduX3ZhbHVlIGFuZCBleGVjX3N0bXRzIG11c3QgcnVuIGluIHRoZSBtYWluIGNv bnRleHQgKi8KKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkJLyog QXNzaWduIGN1cnJlbnQgZWxlbWVudC9zbGljZSB0byB0aGUgbG9vcCB2YXJpYWJsZSAqLworCQkJ ZXhlY19hc3NpZ25fdmFsdWUoZXN0YXRlLCBsb29wX3ZhciwgdmFsLAorCQkJCQkJCSAgdmFsaXNu dWxsLCB2YWx0eXBpZCwgdmFsdHlwbW9kKTsKKworCQkJTWVtb3J5Q29udGV4dFJlc2V0KHRtcF9j eHQpOworCisJCQkvKgorCQkJICogRXhlY3V0ZSB0aGUgc3RhdGVtZW50cworCQkJICovCisJCQly YyA9IGV4ZWNfc3RtdHMoZXN0YXRlLCBzdG10LT5ib2R5KTsKKworCQkJTE9PUF9SQ19QUk9DRVNT SU5HKHN0bXQtPmxhYmVsLCBicmVhayk7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdG10 X21jb250ZXh0KTsKKwkJfQorCX0KKworCS8qIFJlc3RvcmUgbWVtb3J5IGNvbnRleHQgc3RhdGUg Ki8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJcG9wX3N0bXRfbWNvbnRl eHQoZXN0YXRlKTsKKworCS8qIFJlbGVhc2UgdGVtcG9yYXJ5IG1lbW9yeSwgaW5jbHVkaW5nIHRo ZSBhcnJheSB2YWx1ZSAqLworCU1lbW9yeUNvbnRleHRSZXNldChzdG10X21jb250ZXh0KTsKKwor CS8qCisJICogU2V0IHRoZSBGT1VORCB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IG9m IGV4ZWN1dGluZyB0aGUgbG9vcAorCSAqIChuYW1lbHksIHdoZXRoZXIgd2UgbG9vcGVkIG9uZSBv ciBtb3JlIHRpbWVzKS4gVGhpcyBtdXN0IGJlIHNldCBoZXJlIHNvCisJICogdGhhdCBpdCBkb2Vz IG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIEZPVU5EIHZhcmlhYmxlIGluc2lk ZQorCSAqIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmLgorCSAqLworCWV4ZWNfc2V0X2ZvdW5k KGVzdGF0ZSwgZm91bmQpOworCisJcmV0dXJuIHJjOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBl eGVjX3N0bXRfZm9yZWFjaF9hCQkJTG9vcCBvdmVyIGVsZW1lbnRzIG9yIHNsaWNlcyBvZiBhbiBh cnJheQogICoKQEAgLTU1MzcsNiArNTc3OSw1MSBAQCBwbHBnc3FsX2V4ZWNfZ2V0X2RhdHVtX3R5 cGVfaW5mbyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCWJyZWFrOwogCQkJfQogCisJ CWNhc2UgUExQR1NRTF9EVFlQRV9ST1c6CisJCQl7CisJCQkJUExwZ1NRTF9yb3cgKnJvdyA9IChQ THBnU1FMX3JvdyAqKSBkYXR1bTsKKworCQkJCWlmICghcm93LT5yb3d0dXBkZXNjKQorCQkJCXsK KwkJCQkJaW50CQkJaTsKKworCQkJCQlyb3ctPnJvd3R1cGRlc2MgPSBDcmVhdGVUZW1wbGF0ZVR1 cGxlRGVzYyhyb3ctPm5maWVsZHMpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCByb3ctPm5maWVs ZHM7IGkrKykKKwkJCQkJeworCQkJCQkJUExwZ1NRTF9kYXR1bSAqdmFyID0gZXN0YXRlLT5kYXR1 bXNbcm93LT52YXJub3NbaV1dOworCQkJCQkJT2lkCQkJdmFydHlwaWQ7CisJCQkJCQlpbnQzMgkJ dmFydHlwbW9kOworCQkJCQkJT2lkCQkJdmFyY29sbGF0aW9uOworCisJCQkJCQkvKgorCQkJCQkJ ICogV2UgY2Fubm90IHRvIHVzZSBmaWVsZG5hbWVzIGZvciB0dXBkZXNjZW50cnksIGJlY2F1c2UK KwkJCQkJCSAqIHRoZXNlIG5hbWVzIGNhbiBiZSBzdWZmaXhlZCBieSBuYW1lIG9mIHJvdyB2YXJp YWJsZS4KKwkJCQkJCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBQTHBnU1FMX3JlY2ZpZWxkIGlzIG5v dCBjYXN0ZWQgdG8KKwkJCQkJCSAqIFBMcGdTUUxfdmFyaWFibGUuCisJCQkJCQkgKi8KKwkJCQkJ CXBscGdzcWxfZXhlY19nZXRfZGF0dW1fdHlwZV9pbmZvKGVzdGF0ZSwgdmFyLAorCQkJCQkJCQkJ CQkJCQkgJnZhcnR5cGlkLCAmdmFydHlwbW9kLAorCQkJCQkJCQkJCQkJCQkgJnZhcmNvbGxhdGlv bik7CisKKwkJCQkJCVR1cGxlRGVzY0luaXRFbnRyeShyb3ctPnJvd3R1cGRlc2MsIGkgKyAxLAor CQkJCQkJCQkJCSAgIHZhci0+cmVmbmFtZSwgdmFydHlwaWQsIHZhcnR5cG1vZCwKKwkJCQkJCQkJ CQkgICAwKTsKKwkJCQkJCVR1cGxlRGVzY0luaXRFbnRyeUNvbGxhdGlvbihyb3ctPnJvd3R1cGRl c2MsIGkgKyAxLAorCQkJCQkJCQkJCQkJCXZhcmNvbGxhdGlvbik7CisJCQkJCX0KKworCQkJCQkv KiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHR5cGUvdHlwbW9kIHNldHRpbmcgKi8KKwkJCQkJ Qmxlc3NUdXBsZURlc2Mocm93LT5yb3d0dXBkZXNjKTsKKwkJCQl9CisKKwkJCQkqdHlwZUlkID0g cm93LT5yb3d0dXBkZXNjLT50ZHR5cGVpZDsKKwkJCQkqdHlwTW9kID0gcm93LT5yb3d0dXBkZXNj LT50ZHR5cG1vZDsKKwkJCQkvKiBjb21wb3NpdGUgdHlwZXMgYXJlIG5ldmVyIGNvbGxhdGFibGUg Ki8KKwkJCQkqY29sbGF0aW9uID0gSW52YWxpZE9pZDsKKwkJCQlicmVhazsKKwkJCX0KKwogCQlj YXNlIFBMUEdTUUxfRFRZUEVfUkVDOgogCQkJewogCQkJCVBMcGdTUUxfcmVjICpyZWMgPSAoUExw Z1NRTF9yZWMgKikgZGF0dW07CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZnVu Y3MuYyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9mdW5jcy5jCmluZGV4IDkyY2Q5MTE2YzBlLi43 NTExZmFiN2U2OCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMKKysr IGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMKQEAgLTI1Myw2ICsyNTMsOCBAQCBwbHBn c3FsX3N0bXRfdHlwZW5hbWUoUExwZ1NRTF9zdG10ICpzdG10KQogCQkJcmV0dXJuIF8oIkZPUiBv dmVyIGN1cnNvciIpOwogCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0E6CiAJCQlyZXR1cm4g XygiRk9SRUFDSCBvdmVyIGFycmF5Iik7CisJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNP Tl9BOgorCQkJcmV0dXJuIF8oIkZPUkVBQ0ggb3ZlciBqc29uIGFycmF5Iik7CiAJCWNhc2UgUExQ R1NRTF9TVE1UX0VYSVQ6CiAJCQlyZXR1cm4gKChQTHBnU1FMX3N0bXRfZXhpdCAqKSBzdG10KS0+ aXNfZXhpdCA/ICJFWElUIiA6ICJDT05USU5VRSI7CiAJCWNhc2UgUExQR1NRTF9TVE1UX1JFVFVS TjoKQEAgLTQ2Nyw2ICs0NjksMTQgQEAgcGxwZ3NxbF9zdGF0ZW1lbnRfdHJlZV93YWxrZXJfaW1w bChQTHBnU1FMX3N0bXQgKnN0bXQsCiAJCQl7CiAJCQkJUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAq ZnN0bXQgPSAoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqKSBzdG10OwogCisJCQkJRV9XQUxLKGZz dG10LT5leHByKTsKKwkJCQlTX0xJU1RfV0FMSyhmc3RtdC0+Ym9keSk7CisJCQkJYnJlYWs7CisJ CQl9CisJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNPTl9BOgorCQkJeworCQkJCVBMcGdT UUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqZnN0bXQgPSAoUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNv bl9hICopIHN0bXQ7CisKIAkJCQlFX1dBTEsoZnN0bXQtPmV4cHIpOwogCQkJCVNfTElTVF9XQUxL KGZzdG10LT5ib2R5KTsKIAkJCQlicmVhazsKQEAgLTc5NSw2ICs4MDUsNyBAQCBzdGF0aWMgdm9p ZCBkdW1wX2ZvcmkoUExwZ1NRTF9zdG10X2ZvcmkgKnN0bXQpOwogc3RhdGljIHZvaWQgZHVtcF9m b3JzKFBMcGdTUUxfc3RtdF9mb3JzICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfZm9yYyhQTHBn U1FMX3N0bXRfZm9yYyAqc3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1wX2ZvcmVhY2hfYShQTHBnU1FM X3N0bXRfZm9yZWFjaF9hICpzdG10KTsKK3N0YXRpYyB2b2lkIGR1bXBfZm9yZWFjaF9qc29uX2Eo UExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfZXhp dChQTHBnU1FMX3N0bXRfZXhpdCAqc3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1wX3JldHVybihQTHBn U1FMX3N0bXRfcmV0dXJuICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfcmV0dXJuX25leHQoUExw Z1NRTF9zdG10X3JldHVybl9uZXh0ICpzdG10KTsKQEAgLTg2MSw2ICs4NzIsOSBAQCBkdW1wX3N0 bXQoUExwZ1NRTF9zdG10ICpzdG10KQogCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0E6CiAJ CQlkdW1wX2ZvcmVhY2hfYSgoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqKSBzdG10KTsKIAkJCWJy ZWFrOworCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0pTT05fQToKKwkJCWR1bXBfZm9yZWFj aF9qc29uX2EoKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqKSBzdG10KTsKKwkJCWJyZWFr OwogCQljYXNlIFBMUEdTUUxfU1RNVF9FWElUOgogCQkJZHVtcF9leGl0KChQTHBnU1FMX3N0bXRf ZXhpdCAqKSBzdG10KTsKIAkJCWJyZWFrOwpAQCAtMTE1Nyw2ICsxMTcxLDIxIEBAIGR1bXBfZm9y ZWFjaF9hKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKnN0bXQpCiAJcHJpbnRmKCIgICAgRU5ERk9S RUFDSEEiKTsKIH0KIAorc3RhdGljIHZvaWQKK2R1bXBfZm9yZWFjaF9qc29uX2EoUExwZ1NRTF9z dG10X2ZvcmVhY2hfanNvbl9hICpzdG10KQoreworCWR1bXBfaW5kKCk7CisJcHJpbnRmKCJGT1JF QUNIQSB2YXIgJWQgIiwgc3RtdC0+dmFybm8pOworCXByaW50ZigiSU4gSlNPTiBBUlJBWSAiKTsK KwlkdW1wX2V4cHIoc3RtdC0+ZXhwcik7CisJcHJpbnRmKCJcbiIpOworCisJZHVtcF9zdG10cyhz dG10LT5ib2R5KTsKKworCWR1bXBfaW5kKCk7CisJcHJpbnRmKCIgICAgRU5ERk9SRUFDSEEiKTsK K30KKwogc3RhdGljIHZvaWQKIGR1bXBfb3BlbihQTHBnU1FMX3N0bXRfb3BlbiAqc3RtdCkKIHsK ZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9ncmFtLnkgYi9zcmMvcGwvcGxwZ3Nx bC9zcmMvcGxfZ3JhbS55CmluZGV4IDUwMDllNTlhNzhmLi4yM2I0NjViMTBkNSAxMDA2NDQKLS0t IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueQorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxfZ3JhbS55CkBAIC0xNzgsNiArMTc4LDcgQEAgc3RhdGljCXZvaWQJCQljaGVja19yYWlzZV9w YXJhbWV0ZXJzKFBMcGdTUUxfc3RtdF9yYWlzZSAqc3RtdCk7CiAJUExwZ1NRTF9kaWFnX2l0ZW0g KmRpYWdpdGVtOwogCVBMcGdTUUxfc3RtdF9mZXRjaCAqZmV0Y2g7CiAJUExwZ1NRTF9jYXNlX3do ZW4gKmNhc2V3aGVuOworCVBMcGdTUUxfc3RtdF9mb3JlYWNoICpmb3JlYWNoOwogfQogCiAldHlw ZSA8ZGVjbGhkcj4gZGVjbF9zZWN0CkBAIC0yMjAsNiArMjIxLDcgQEAgc3RhdGljCXZvaWQJCQlj aGVja19yYWlzZV9wYXJhbWV0ZXJzKFBMcGdTUUxfc3RtdF9yYWlzZSAqc3RtdCk7CiAKICV0eXBl IDxjYXNld2hlbj4JY2FzZV93aGVuCiAldHlwZSA8bGlzdD4JY2FzZV93aGVuX2xpc3Qgb3B0X2Nh c2VfZWxzZQorJXR5cGUgPGZvcmVhY2g+CWZvcmVhY2hfdHlwZQogCiAldHlwZSA8Ym9vbGVhbj4J Z2V0ZGlhZ19hcmVhX29wdAogJXR5cGUgPGxpc3Q+CWdldGRpYWdfbGlzdApAQCAtMzQxLDYgKzM0 Myw3IEBAIHN0YXRpYwl2b2lkCQkJY2hlY2tfcmFpc2VfcGFyYW1ldGVycyhQTHBnU1FMX3N0bXRf cmFpc2UgKnN0bXQpOwogJXRva2VuIDxrZXl3b3JkPglLX1BSSU5UX1NUUklDVF9QQVJBTVMKICV0 b2tlbiA8a2V5d29yZD4JS19QUklPUgogJXRva2VuIDxrZXl3b3JkPglLX1FVRVJZCisldG9rZW4g PGtleXdvcmQ+CUtfSlNPTgogJXRva2VuIDxrZXl3b3JkPglLX1JBSVNFCiAldG9rZW4gPGtleXdv cmQ+CUtfUkVMQVRJVkUKICV0b2tlbiA8a2V5d29yZD4JS19SRVRVUk4KQEAgLTE2NzEsMTYgKzE2 NzQsMjkgQEAgZm9yX3ZhcmlhYmxlCTogVF9EQVRVTQogCQkJCQl9CiAJCQkJOwogCi1zdG10X2Zv cmVhY2hfYQk6IG9wdF9sb29wX2xhYmVsIEtfRk9SRUFDSCBmb3JfdmFyaWFibGUgZm9yZWFjaF9z bGljZSBLX0lOIEtfQVJSQVkgZXhwcl91bnRpbF9sb29wIGxvb3BfYm9keQorc3RtdF9mb3JlYWNo X2EJOiBvcHRfbG9vcF9sYWJlbCBLX0ZPUkVBQ0ggZm9yX3ZhcmlhYmxlIGZvcmVhY2hfc2xpY2Ug S19JTiBmb3JlYWNoX3R5cGUgZXhwcl91bnRpbF9sb29wIGxvb3BfYm9keQogCQkJCQl7Ci0JCQkJ CQlQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICpuZXc7CisJCQkJCQlQTHBnU1FMX3N0bXRfZm9yZWFj aCAqbmV3OwogCi0JCQkJCQluZXcgPSBwYWxsb2MwX29iamVjdChQTHBnU1FMX3N0bXRfZm9yZWFj aF9hKTsKLQkJCQkJCW5ldy0+Y21kX3R5cGUgPSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9BOworCQkJ CQkJbmV3ID0gJDY7CiAJCQkJCQluZXctPmxpbmVubyA9IHBscGdzcWxfbG9jYXRpb25fdG9fbGlu ZW5vKEAyLCB5eXNjYW5uZXIpOwogCQkJCQkJbmV3LT5zdG10aWQgPSArK3BscGdzcWxfY3Vycl9j b21waWxlLT5uc3RhdGVtZW50czsKIAkJCQkJCW5ldy0+bGFiZWwgPSAkMTsKLQkJCQkJCW5ldy0+ c2xpY2UgPSAkNDsKKworCQkJCQkJaWYgKCQ0ID4gMCkKKwkJCQkJCXsKKwkJCQkJCQkvKiBzbGlj aW5nIGlzIHN1cHBvcnRlZCBvbmx5IGJ5IEZPUkVBQ0ggSU4gQVJSQVkgKi8KKwkJCQkJCQlpZiAo bmV3LT5jbWRfdHlwZSA9PSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9BKQorCQkJCQkJCXsKKwkJCQkJ CQkJKChQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICopIG5ldyktPnNsaWNlID0gJDQ7CisJCQkJCQkJ fQorCQkJCQkJCWVsc2UKKwkJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJCQkJIGVycm1zZygibm90IHplcm8gc2xp Y2UgaXMgYWxsb3dlZCBvbmx5IGZvciBhcnJheXMiKSwKKwkJCQkJCQkJCQkJCSBwYXJzZXJfZXJy cG9zaXRpb24oQDQpKSk7CisJCQkJCQl9CisKIAkJCQkJCW5ldy0+ZXhwciA9ICQ3OwogCQkJCQkJ bmV3LT5ib2R5ID0gJDguc3RtdHM7CiAKQEAgLTE3MTksNiArMTczNSwxOSBAQCBmb3JlYWNoX3Ns aWNlCToKIAkJCQkJfQogCQkJCTsKIAorZm9yZWFjaF90eXBlCToKKwkJCQkgIEtfQVJSQVkKKwkJ CQkJeworCQkJCQkJJCQgPSAoUExwZ1NRTF9zdG10X2ZvcmVhY2ggKikgcGFsbG9jMF9vYmplY3Qo UExwZ1NRTF9zdG10X2ZvcmVhY2hfYSk7CisJCQkJCQkkJC0+Y21kX3R5cGUgPSBQTFBHU1FMX1NU TVRfRk9SRUFDSF9BOworCQkJCQl9CisJCQkJfCBLX0pTT04gS19BUlJBWQorCQkJCQl7CisJCQkJ CQkkJCA9IChQTHBnU1FMX3N0bXRfZm9yZWFjaCAqKSBwYWxsb2MwX29iamVjdChQTHBnU1FMX3N0 bXRfZm9yZWFjaF9qc29uX2EpOworCQkJCQkJJCQtPmNtZF90eXBlID0gUExQR1NRTF9TVE1UX0ZP UkVBQ0hfSlNPTl9BOworCQkJCQl9CisJCQkJOworCiBzdG10X2V4aXQJCTogZXhpdF90eXBlIG9w dF9sYWJlbCBvcHRfZXhpdGNvbmQKIAkJCQkJewogCQkJCQkJUExwZ1NRTF9zdG10X2V4aXQgKm5l dzsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF91bnJlc2VydmVkX2t3bGlzdC5o IGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX3VucmVzZXJ2ZWRfa3dsaXN0LmgKaW5kZXggNjM3OWU4 NmM4Y2IuLmQ3NTg4ZDNiNGFkIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5y ZXNlcnZlZF9rd2xpc3QuaAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9r d2xpc3QuaApAQCAtNjksNiArNjksNyBAQCBQR19LRVlXT1JEKCJpbXBvcnQiLCBLX0lNUE9SVCkK IFBHX0tFWVdPUkQoImluZm8iLCBLX0lORk8pCiBQR19LRVlXT1JEKCJpbnNlcnQiLCBLX0lOU0VS VCkKIFBHX0tFWVdPUkQoImlzIiwgS19JUykKK1BHX0tFWVdPUkQoImpzb24iLCBLX0pTT04pCiBQ R19LRVlXT1JEKCJsYXN0IiwgS19MQVNUKQogUEdfS0VZV09SRCgibG9nIiwgS19MT0cpCiBQR19L RVlXT1JEKCJtZXJnZSIsIEtfTUVSR0UpCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxwZ3NxbC5oIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaAppbmRleCBhZGRiMTRhOTk1 OS4uYzU3YjFkYTliOTUgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3FsLmgK KysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaApAQCAtMTEyLDYgKzExMiw3IEBAIHR5 cGVkZWYgZW51bSBQTHBnU1FMX3N0bXRfdHlwZQogCVBMUEdTUUxfU1RNVF9GT1JTLAogCVBMUEdT UUxfU1RNVF9GT1JDLAogCVBMUEdTUUxfU1RNVF9GT1JFQUNIX0EsCisJUExQR1NRTF9TVE1UX0ZP UkVBQ0hfSlNPTl9BLAogCVBMUEdTUUxfU1RNVF9FWElULAogCVBMUEdTUUxfU1RNVF9SRVRVUk4s CiAJUExQR1NRTF9TVE1UX1JFVFVSTl9ORVhULApAQCAtMjk5LDYgKzMwMCw3IEBAIHR5cGVkZWYg c3RydWN0IFBMcGdTUUxfZGF0dW0KIHsKIAlQTHBnU1FMX2RhdHVtX3R5cGUgZHR5cGU7CiAJaW50 CQkJZG5vOworCWNoYXIJICAgKnJlZm5hbWU7CiB9IFBMcGdTUUxfZGF0dW07CiAKIC8qCkBAIC00 NDQsOSArNDQ2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9yZWNmaWVsZAogewogCVBMcGdT UUxfZGF0dW1fdHlwZSBkdHlwZTsKIAlpbnQJCQlkbm87CisJY2hhcgkgICAqZmllbGRuYW1lOwkJ LyogbmFtZSBvZiBmaWVsZCAqLwogCS8qIGVuZCBvZiBQTHBnU1FMX2RhdHVtIGZpZWxkcyAqLwog Ci0JY2hhcgkgICAqZmllbGRuYW1lOwkJLyogbmFtZSBvZiBmaWVsZCAqLwogCWludAkJCXJlY3Bh cmVudG5vOwkvKiBkbm8gb2YgcGFyZW50IHJlY29yZCAqLwogCWludAkJCW5leHRmaWVsZDsJCS8q IGRubyBvZiBuZXh0IGNoaWxkLCBvciAtMSBpZiBub25lICovCiAJdWludDY0CQlyZWN0dXBsZWRl c2NpZDsgLyogcmVjb3JkJ3MgdHVwbGVkZXNjIElEIGFzIG9mIGxhc3QgbG9va3VwICovCkBAIC03 NjYsNiArNzY4LDIwIEBAIHR5cGVkZWYgc3RydWN0IFBMcGdTUUxfc3RtdF9keW5mb3JzCiAJTGlz dAkgICAqcGFyYW1zOwkJCS8qIFVTSU5HIGV4cHJlc3Npb25zICovCiB9IFBMcGdTUUxfc3RtdF9k eW5mb3JzOwogCisvKgorICogRk9SRUFDSCBsb29wIChhbmNlc3RvciBJTiBBUlJBWSBhbmQgSU4g SlNPTiBBUlJBWSBsb29wKQorICovCit0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3N0bXRfZm9yZWFj aAoreworCVBMcGdTUUxfc3RtdF90eXBlIGNtZF90eXBlOworCWludAkJCWxpbmVubzsKKwl1bnNp Z25lZCBpbnQgc3RtdGlkOworCWNoYXIJICAgKmxhYmVsOworCWludAkJCXZhcm5vOwkJCS8qIGxv b3AgdGFyZ2V0IHZhcmlhYmxlICovCisJUExwZ1NRTF9leHByICpleHByOwkJCS8qIHNldCBleHBy ZXNzaW9uICovCisJTGlzdAkgICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0YXRlbWVudHMgKi8KK30g UExwZ1NRTF9zdG10X2ZvcmVhY2g7CisKIC8qCiAgKiBGT1JFQUNIIGl0ZW0gaW4gYXJyYXkgbG9v cAogICovCkBAIC03NzYsMTEgKzc5MiwyNyBAQCB0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3N0bXRf Zm9yZWFjaF9hCiAJdW5zaWduZWQgaW50IHN0bXRpZDsKIAljaGFyCSAgICpsYWJlbDsKIAlpbnQJ CQl2YXJubzsJCQkvKiBsb29wIHRhcmdldCB2YXJpYWJsZSAqLwotCWludAkJCXNsaWNlOwkJCS8q IHNsaWNlIGRpbWVuc2lvbiwgb3IgMCAqLwogCVBMcGdTUUxfZXhwciAqZXhwcjsJCQkvKiBhcnJh eSBleHByZXNzaW9uICovCiAJTGlzdAkgICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0YXRlbWVudHMg Ki8KKwkvKiBlbmQgb2YgZmllbGRzIHRoYXQgbXVzdCBtYXRjaCBQTHBnU1FMX3N0bXRfZm9yZWFj aCAqLworCWludAkJCXNsaWNlOwkJCS8qIHNsaWNlIGRpbWVuc2lvbiwgb3IgMCAqLwogfSBQTHBn U1FMX3N0bXRfZm9yZWFjaF9hOwogCisvKgorICogRk9SRUFDSCBpdGVtIGluIGFycmF5IGxvb3AK KyAqLwordHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hCit7CisJUExw Z1NRTF9zdG10X3R5cGUgY21kX3R5cGU7CisJaW50CQkJbGluZW5vOworCXVuc2lnbmVkIGludCBz dG10aWQ7CisJY2hhcgkgICAqbGFiZWw7CisJaW50CQkJdmFybm87CQkJLyogbG9vcCB0YXJnZXQg dmFyaWFibGUgKi8KKwlQTHBnU1FMX2V4cHIgKmV4cHI7CQkJLyogYXJyYXkgZXhwcmVzc2lvbiAq LworCUxpc3QJICAgKmJvZHk7CQkJLyogTGlzdCBvZiBzdGF0ZW1lbnRzICovCisJLyogZW5kIG9m IGZpZWxkcyB0aGF0IG11c3QgbWF0Y2ggUExwZ1NRTF9zdG10X2ZvcmVhY2ggKi8KK30gUExwZ1NR TF9zdG10X2ZvcmVhY2hfanNvbl9hOworCiAvKgogICogT1BFTiBhIGN1cnZhcgogICovCmRpZmYg LS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwgYi9zcmMv cGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzYWNiOGY5MjRjCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsCkBAIC0wLDAgKzEsMTU5IEBA CistLSBudW1lcmljIHRvIG51bWVyaWMKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2lu CisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxv b3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCist LSBudW1lcmljIHRvIGludCBieSBjYXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisg IGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxvb3AK KyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBj b252ZXJzaW9uICIzLjE0IiB0byBpbnQgc2hvdWxkIHRvIGZhaWwgZHVlIElPIGNhc3QKK2RvICQk CitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1siMTAi LDIwLDMwLCIzLjE0Il0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQg bG9vcDsKK2VuZDsKKyQkOworCitkbyAkJAorZGVjbGFyZSB4IGJvb2xlYW47CitiZWdpbgorICBm b3JlYWNoIHggaW4ganNvbiBhcnJheSAnW3RydWUsIGZhbHNlXScKKyAgbG9vcAorICBpZiB4IHRo ZW4KKyAgICByYWlzZSBub3RpY2UgJ3RydWUnOworICBlbHNlCisgICAgcmFpc2Ugbm90aWNlICdm YWxzZSc7CisgIGVuZCBpZjsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0ganNvbmIgdG8g anNvbmIKK2RvICQkCitkZWNsYXJlIHgganNvbmI7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNv biBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGwsICJIaSJdJworICBsb29wCisgICAgcmFpc2Ug bm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0ganNvbmIgdG8ganNv bgorZG8gJCQKK2RlY2xhcmUgeCBqc29uOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJy YXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGlj ZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKy0tIGl0ZXJhdGlvbiBvdmVyIGNv bXBvc2l0ZXMKK2RvICQkCitkZWNsYXJlIHggaW50OyB5IG51bWVyaWM7IHogdmFyY2hhcjsKK2Jl Z2luCisgIGZvcmVhY2ggeCwgeSwgeiBpbiBqc29uIGFycmF5ICdbe30sIHsieiI6IkhpIn0sIHsi eSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAgbG9vcAorICAgIHJh aXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIHgsIHksIHo7CisgIGVuZCBsb29wOworZW5k OworJCQ7CisKK2NyZWF0ZSB0eXBlIHQzIGFzICh4IGludCwgeSBudW1lcmljLCB6IHZhcmNoYXIp OworCitkbyAkJAorZGVjbGFyZSBjIHQzOworYmVnaW4KKyAgZm9yZWFjaCBjIGluIGpzb24gYXJy YXkgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6 My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgYy54 LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgYyB0 MzsKK2JlZ2luCisgIGZvcmVhY2ggYy54LCBjLnksIGMueiBpbiBqc29uIGFycmF5ICdbe30sIHsi eiI6IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAg bG9vcAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIGMueCwgYy55LCBjLno7 CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2Ryb3AgdHlwZSB0MzsKKworLS0gdGFyZ2V0IGNh biBiZSBhIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IGludFtdOworYmVnaW4KKyAgZm9yZWFjaCB4 IGluIGpzb24gYXJyYXkgJ1tbMSwyLDNdLFs0LDUsNl1dJworICBsb29wCisgICAgcmFpc2Ugbm90 aWNlICclICUgJScsIHhbMV0sIHhbMl0sIHhbM107CisgIGVuZCBsb29wOworZW5kOworJCQ7CisK K2RvICQkCitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24g YXJyYXkgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0nCisgIGxvb3AKKyAgICByYWlz ZSBub3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2Rv ICQkCitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJy YXkgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0nCisgIGxvb3AKKyAgICByYWlzZSBu b3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKworZG8g JCQKK2RlY2xhcmUgeCBpbnRbXTsgeSB2YXJjaGFyOworYmVnaW4KKyAgZm9yZWFjaCB4LCB5IGlu IGpzb24gYXJyYXkgJ1t7IngiOlsxLDIsM10sICJ5IjoiSGkifSwgeyJ4IjpbNCw1LDZdLCAieSI6 IkhpIn1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJSwgeTogJScsIHhbMV0sIHhb Ml0sIHhbM10sIHk7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2NyZWF0ZSB0eXBlIHQyIGFz ICh4IGludFtdLCB5IHZhcmNoYXIpOworCitkbyAkJAorZGVjbGFyZSBjIHQyOworYmVnaW4KKyAg Zm9yZWFjaCBjIGluIGpzb24gYXJyYXkgJ1t7IngiOlsxLDIsM10sICJ5IjoiSGkifSwgeyJ4Ijpb NCw1LDZdLCAieSI6IkhpIn1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJSwgeTog JScsIGMueFsxXSwgYy54WzJdLCBjLnhbM10sIGMueTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsK KworZHJvcCB0eXBlIHQyOwotLSAKMi41My4wCgo= --000000000000418ec1064beff8d4--