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 1tFORL-00ClgG-SY for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Nov 2024 02:03:04 +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 1tFORK-00AuH5-Eh for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Nov 2024 02:03:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tFORJ-00AuG9-Pv for pgsql-hackers@lists.postgresql.org; Mon, 25 Nov 2024 02:03:02 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tFORG-003cRx-0h for pgsql-hackers@lists.postgresql.org; Mon, 25 Nov 2024 02:03:00 +0000 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2ffc1009a06so5551131fa.2 for ; Sun, 24 Nov 2024 18:02:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732500176; x=1733104976; darn=lists.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=Y7iOLY6hwRo1lZb/bIv4OvnkKANCTm72dFSUNiTdO/0=; b=iUDEOk2stGPHH2wSBuwQH8N1em7g3nBp7W+zM07fgDYt7fdWwL1qyASDH7t6I16a7T /zhTPMSGtObVwli1o06ue7/h8rbaLHFTSmu+yFjV9YZn+fK7KnoFSrt6q2FdMo72jquu jtwXFUYA1SUwByI8MwHHQ76epdqVKKEoNsMqNVEaOmwueT0E2qNi11pIbPQsOV0g4YST kisktLfvCXeryCOG3lDj2SdGdCwFazQdnUU9DTOLitnh6ExgJHRSbni4LtxPtWlSOiGf cesSpV1nV0hNbmIAtsHfZHTpt0jD8hgAk5QW2QjtG02RbkPEQsK9b8w5wkzU8tDsGIV1 Yd1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732500176; x=1733104976; 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=Y7iOLY6hwRo1lZb/bIv4OvnkKANCTm72dFSUNiTdO/0=; b=YEz6jRXATwY2k1kUb+aNU6WPmhMnUvWcrO/bBB10xi03op4rISvcNCLHfIiJ+0hHtn HBpquArTsYq+D+PD01eVK3Wzj+V6oAteuiMaHkyunEejU0+NqO0/U+KnEYQsIqjzu31E ItsyLyFyO3nJqsIcqF0A18MpKR7DqJMxS/gYCdQoPzq/rCQiZGm6+AG8r7q7Lg33a9HH q8v5KhrefAQ9IrBGz1b0hRmAX4S11Q2rukVHES7HYXA8paegf3rcMflrItV3mx/eMopw racbKe7ITbax+PzN7fEXTJLHDK06AOguvMKfAsHsEK/nfFSdXvT0XSw9tYviFY/+HzzS SI5g== X-Forwarded-Encrypted: i=1; AJvYcCUJHlcKYb5B1//7lI3QwLcvmBJ0LmE7hnTOqBKfJC/kMz3sp2jiNBoSE2aTaj57iqwRzxHX6tTifhJGSJTr@lists.postgresql.org X-Gm-Message-State: AOJu0YymJ3IdTiJu3aU3ji8/Uz95xS2YYPXIlT56h08Lq8Zp4KqBIBgI kw+T4AMhsXxAI3p33wGiTigKuQHhWpRGBsp4Jm212XRU/QVffoD5jvKSmuaPVM9MtYv1S1vqGLW Lc6jwOifOSg1B4lOucbRAuNzKiY4= X-Gm-Gg: ASbGncuwsnniLeDMJB1Zf3NJMBaHWug1YBXm5sMTQLHH7EPCt22OhrysvH8lnmIUhHM R9jyE+uHWbS4ZaODqxGL1BlQSWNwtaVTV X-Google-Smtp-Source: AGHT+IG5z2UYbGJychhU5JnvsRCIdUHDXez1ENDe3LNk1t9dtDTm17ayPBL8AQo2zVBmMnkXSmRUNLQ2SaemwA5ASJ0= X-Received: by 2002:a05:651c:1546:b0:2fa:c0b5:ac8c with SMTP id 38308e7fff4ca-2ffa7124ff6mr67977371fa.21.1732500175409; Sun, 24 Nov 2024 18:02:55 -0800 (PST) MIME-Version: 1.0 References: <1342498.1729444411@sss.pgh.pa.us> <1445998.1729482404@sss.pgh.pa.us> <2062830.1729625620@sss.pgh.pa.us> <2265411.1729699470@sss.pgh.pa.us> <2354718.1729737539@sss.pgh.pa.us> <2581216.1729794746@sss.pgh.pa.us> <1948345.1730500073@sss.pgh.pa.us> <3797606.1732045516@sss.pgh.pa.us> In-Reply-To: From: Michel Pelletier Date: Sun, 24 Nov 2024 18:02:17 -0800 Message-ID: Subject: Re: Using Expanded Objects other than Arrays from plpgsql To: Tom Lane Cc: Pavel Stehule , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000008773920627b32194" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008773920627b32194 Content-Type: multipart/alternative; boundary="0000000000008773910627b32192" --0000000000008773910627b32192 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Nov 19, 2024 at 12:52=E2=80=AFPM Michel Pelletier < pelletier.michel@gmail.com> wrote: > On Tue, Nov 19, 2024 at 11:45=E2=80=AFAM Tom Lane wro= te: > >> Pavel Stehule writes: >> > another position can be src/test/modules - I think so your example is >> > "similar" to plsample >> >> Yeah. I think we've largely adopted the position that contrib should >> contain installable modules that do something potentially useful to >> end-users. A pure skeleton wouldn't be that, but if it's fleshed out >> enough to be test code for some core features then src/test/modules >> could be a reasonable home. >> > > Great! I'll put a patch together that adds the skeleton object to > src/test/modules and I'll write some expected tests that run the expansio= n > through its paces, when the support function feature happens I'll update = it > to include tests for that. > Here's a WIP patch for a pgexpanded example in src/test/modules. The object is very simple and starts with an integer and increments that value every time it is expanded. I added some regression tests that test two sql functions that replicate the expansion issue that I'm seeing with my extension. I considered a more complex data type like a linked list, something that could maybe also showcase subscripting support for expanded objects, but I didn't want to go too far without discussion. -Michel > --0000000000008773910627b32192 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Nov 19, 2024 at 12:52=E2=80=AFPM Michel Pelletier <pelletier.michel@gmail.com> = wrote:
On Tue, Nov 19, 2024 at 11:45=E2=80=AFAM Tom Lane= <tgl@sss.pgh.pa.= us> wrote:
Pavel Stehule <pavel.stehule@gmail.com> writes:
> another position can be src/test/modules - I think so your example is<= br> > "similar" to plsample

Yeah.=C2=A0 I think we've largely adopted the position that contrib sho= uld
contain installable modules that do something potentially useful to
end-users.=C2=A0 A pure skeleton wouldn't be that, but if it's fles= hed out
enough to be test code for some core features then src/test/modules
could be a reasonable home.

Great!=C2= =A0 I'll put a patch together that adds the skeleton object to src/test= /modules and I'll write some expected tests that run the expansion thro= ugh its paces, when the support function feature happens I'll update it= to include tests for that.

Here's a WIP patch for a pgexpanded=C2=A0example in src/test/modules= .=C2=A0 The object is very simple and starts with an integer and increments= that value every time it is expanded.=C2=A0 I added some regression tests = that test two sql functions that replicate the expansion issue that I'm= seeing with my extension.=C2=A0

I considered a mo= re complex=C2=A0data type like a linked list, something that could maybe al= so showcase subscripting support for expanded objects, but I didn't wan= t to go too far without discussion.

-Michel
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">
--0000000000008773910627b32192-- --0000000000008773920627b32194 Content-Type: text/x-patch; charset="UTF-8"; name="0001-Add-example-test-module-for-expanded-objects.patch" Content-Disposition: attachment; filename="0001-Add-example-test-module-for-expanded-objects.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3wdtssf0 RnJvbSBiZmY4NzlhNzZhMTZkMjhiYmE0YTM4NTlhZDExNjUwYTY0MjkxN2QyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWNoZWwgUGVsbGV0aWVyIDxtaWNoZWxAb25lc3BhcnNlLmNv bT4KRGF0ZTogU2F0LCAyMyBOb3YgMjAyNCAyMTowMToyOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0hd IEFkZCBleGFtcGxlIHRlc3QgbW9kdWxlIGZvciBleHBhbmRlZCBvYmplY3RzLgoKVGhpcyBpcyBh IHZlcnkgc2ltcGxlIHRlbXBsYXRlIGZvciBjcmVhdGluZyBleHBhbmRlZCBvYmplY3RzCnRoYXQg a2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiB0aW1lcyBpdCBoYXMgYmVlbiBleHBhbmRlZC4K CkZ1dHVyZSBmZWF0dXJlIHN1cHBvcnQgZm9yIGV4cGFuZGVkIG9iamVjdHMgc2hvdWxkIHNob3dl Y2FzZQp0aG9zZSBmZWF0dXJlcyBoZXJlLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdy ZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUN4dSUzRHZKTk1qMU1xcVVpd0FUdWF6b2V3aXJlYU4lM0Q3 bnNrRDVWLUNCRWNyc19LNlZnJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvdGVzdC9tb2R1bGVz L3BnZXhwYW5kZWQvLmdpdGlnbm9yZSAgICAgICAgfCAgIDMgKwogc3JjL3Rlc3QvbW9kdWxlcy9w Z2V4cGFuZGVkL01ha2VmaWxlICAgICAgICAgIHwgIDIxICsrKwogc3JjL3Rlc3QvbW9kdWxlcy9w Z2V4cGFuZGVkL1JFQURNRS5tZCAgICAgICAgIHwgIDIxICsrKwogLi4uL3BnZXhwYW5kZWQvZXhw ZWN0ZWQvcGdleHBhbmRlZC5vdXQgICAgICAgIHwgIDkyICsrKysrKysrKwogLi4uL21vZHVsZXMv cGdleHBhbmRlZC9wZ2V4cGFuZGVkLS0xLjAuc3FsICAgIHwgIDQ4ICsrKysrCiBzcmMvdGVzdC9t b2R1bGVzL3BnZXhwYW5kZWQvcGdleHBhbmRlZC5jICAgICAgfCAxNzcgKysrKysrKysrKysrKysr KysrCiAuLi4vbW9kdWxlcy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQuY29udHJvbCAgICAgfCAgIDUg Kwogc3JjL3Rlc3QvbW9kdWxlcy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQuaCAgICAgIHwgIDg3ICsr KysrKysrKwogLi4uL21vZHVsZXMvcGdleHBhbmRlZC9zcWwvcGdleHBhbmRlZC5zcWwgICAgIHwg ICA1ICsKIDkgZmlsZXMgY2hhbmdlZCwgNDU5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9SRUFETUUubWQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvZXhwZWN0ZWQvcGdleHBhbmRlZC5v dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvcGdleHBh bmRlZC0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcGdleHBh bmRlZC9wZ2V4cGFuZGVkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Bn ZXhwYW5kZWQvcGdleHBhbmRlZC5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9zcWwvcGdleHBhbmRlZC5zcWwKCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvLmdpdGlnbm9yZSBiL3NyYy90ZXN0L21vZHVsZXMv cGdleHBhbmRlZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjQ0ZDExOWNmY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhw YW5kZWQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9y aWVzCisvbG9nLworL3Jlc3VsdHMvCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3BnZXhw YW5kZWQvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvTWFrZWZpbGUKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMjdhYTU1ZGRhYQotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9NYWtlZmlsZQpAQCAtMCwwICsx LDIxIEBACisjIHNyYy90ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9NYWtlZmlsZQorCitNT0RVTEVT ID0gcGdleHBhbmRlZAorCitFWFRFTlNJT04gPSBwZ2V4cGFuZGVkCitEQVRBID0gcGdleHBhbmRl ZC0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJwZ2V4cGFuZGVkIC0gdGVtcGxhdGUgZm9yIGV4cGFu ZGVkIGRhdHVtIgorCitSRUdSRVNTID0gcGdleHBhbmRlZAorCitpZmRlZiBVU0VfUEdYUworUEdf Q09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykK K2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy9wZ2V4cGFu ZGVkCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikv c3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJp Yi1nbG9iYWwubWsKK2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcGdleHBh bmRlZC9SRUFETUUubWQgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvUkVBRE1FLm1kCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjIwYjExYmM2OTAKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvUkVBRE1FLm1kCkBAIC0wLDAg KzEsMjEgQEAKKyMgcGdleHBhbmRlZAorCitUaGlzIGlzIGFuIGV4YW1wbGUgcG9zdGdyZXMgZXh0 ZW5zaW9uIHRoYXQgc2hvd3MgaG93IHRvIGltcGxlbWVudCBhbgorImV4cGFuZGVkIiBkYXRhIHR5 cGUgaW4gQyBhcyBkZXNjcmliZWQgW2luIHRoaXMKK2RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC94dHlwZXMuaHRtbCk6CisKKyoiQW5vdGhlciBm ZWF0dXJlIHRoYXQncyBlbmFibGVkIGJ5IFRPQVNUIHN1cHBvcnQgaXMgdGhlIHBvc3NpYmlsaXR5 IG9mCitoYXZpbmcgYW4gZXhwYW5kZWQgaW4tbWVtb3J5IGRhdGEgcmVwcmVzZW50YXRpb24gdGhh dCBpcyBtb3JlCitjb252ZW5pZW50IHRvIHdvcmsgd2l0aCB0aGFuIHRoZSBmb3JtYXQgdGhhdCBp cyBzdG9yZWQgb24gZGlzay4gVGhlCityZWd1bGFyIG9yIOKAnGZsYXTigJ0gdmFybGVuYSBzdG9y YWdlIGZvcm1hdCBpcyB1bHRpbWF0ZWx5IGp1c3QgYSBibG9iIG9mCitieXRlczsgaXQgY2Fubm90 IGZvciBleGFtcGxlIGNvbnRhaW4gcG9pbnRlcnMsIHNpbmNlIGl0IG1heSBnZXQgY29waWVkCit0 byBvdGhlciBsb2NhdGlvbnMgaW4gbWVtb3J5LiBGb3IgY29tcGxleCBkYXRhIHR5cGVzLCB0aGUg ZmxhdCBmb3JtYXQKK21heSBiZSBxdWl0ZSBleHBlbnNpdmUgdG8gd29yayB3aXRoLCBzbyBQb3N0 Z3JlU1FMIHByb3ZpZGVzIGEgd2F5IHRvCivigJxleHBhbmTigJ0gdGhlIGZsYXQgZm9ybWF0IGlu dG8gYSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIG1vcmUgc3VpdGVkIHRvCitjb21wdXRhdGlvbiwg YW5kIHRoZW4gcGFzcyB0aGF0IGZvcm1hdCBpbi1tZW1vcnkgYmV0d2VlbiBmdW5jdGlvbnMgb2YK K3RoZSBkYXRhIHR5cGUuIioKKworVGhpcyByZXBvc2l0b3J5IHByb3ZpZGVzIGEgc2ltcGxlLCBj b21waWxhYmxlIGFuZCBydW5uYWJsZSBleGFtcGxlCitleHBhbmRlZCBkYXRhIHR5cGUgdGhhdCBj YW4gYmUgdXNlZCBhcyBhIGJhc2lzIGZvciBvdGhlciBleHRlbnNpb25zLgorQnkgd2F5IG9mIHRy aXZpYWwgZXhhbXBsZSwgaXQgc2hvd3MgaG93IHRvIGV4cGFuZCBhIGRhdGEgdHlwZSB0aGF0Citr ZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGV4cGFuc2lvbnMgaXQncyBnb25lIHRocm91Z2gu CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvZXhwZWN0ZWQvcGdleHBh bmRlZC5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvZXhwZWN0ZWQvcGdleHBhbmRl ZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzQ4ZGJjN2YzNgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9leHBlY3RlZC9w Z2V4cGFuZGVkLm91dApAQCAtMCwwICsxLDkyIEBACitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdkZWJ1ZzEnOworQ1JFQVRFIEVYVEVOU0lPTiBwZ2V4cGFuZGVkOworREVCVUc6ICBleGVjdXRp bmcgZXh0ZW5zaW9uIHNjcmlwdCBmb3IgInBnZXhwYW5kZWQiIHZlcnNpb24gJzEuMCcKK1NFTEVD VCAnMCc6OmV4b2JqOworREVCVUc6ICBleG9ial9pbgorTElORSAxOiBTRUxFQ1QgJzAnOjpleG9i ajsKKyAgICAgICAgICAgICAgIF4KK0RFQlVHOiAgbmV3X2V4cGFuZGVkX2V4b2JqCitMSU5FIDE6 IFNFTEVDVCAnMCc6OmV4b2JqOworICAgICAgICAgICAgICAgXgorREVCVUc6ICBleG9ial9nZXRf ZmxhdF9zaXplCitMSU5FIDE6IFNFTEVDVCAnMCc6OmV4b2JqOworICAgICAgICAgICAgICAgXgor REVCVUc6ICBleG9ial9mbGF0dGVuX2ludG8KK0xJTkUgMTogU0VMRUNUICcwJzo6ZXhvYmo7Cisg ICAgICAgICAgICAgICBeCitERUJVRzogIERhdHVtR2V0RXhvYmoKK0RFQlVHOiAgbmV3X2V4cGFu ZGVkX2V4b2JqCitERUJVRzogIGV4b2JqX291dAorREVCVUc6ICBjb250ZXh0X2NhbGxiYWNrX2V4 b2JqX2ZyZWUKK0RFQlVHOiAgY29udGV4dF9jYWxsYmFja19leG9ial9mcmVlCisgZXhvYmogCist LS0tLS0tCisgMgorKDEgcm93KQorCitTRUxFQ1QgdGVzdF9leHBhbmQoJzAnOjpleG9iaik7CitE RUJVRzogIGV4b2JqX2luCitMSU5FIDE6IFNFTEVDVCB0ZXN0X2V4cGFuZCgnMCc6OmV4b2JqKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RFQlVHOiAgbmV3X2V4cGFuZGVkX2V4b2Jq CitMSU5FIDE6IFNFTEVDVCB0ZXN0X2V4cGFuZCgnMCc6OmV4b2JqKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KK0RFQlVHOiAgZXhvYmpfZ2V0X2ZsYXRfc2l6ZQorTElORSAxOiBTRUxF Q1QgdGVzdF9leHBhbmQoJzAnOjpleG9iaik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBe CitERUJVRzogIGV4b2JqX2ZsYXR0ZW5faW50bworTElORSAxOiBTRUxFQ1QgdGVzdF9leHBhbmQo JzAnOjpleG9iaik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitERUJVRzogIGV4b2Jq X2luZm8KK0RFQlVHOiAgRGF0dW1HZXRFeG9iagorREVCVUc6ICBuZXdfZXhwYW5kZWRfZXhvYmoK K0RFQlVHOiAgY29udGV4dF9jYWxsYmFja19leG9ial9mcmVlCitOT1RJQ0U6ICBleHBhbmQgY291 bnQgMgorREVCVUc6ICBEYXR1bUdldEV4b2JqCitERUJVRzogIG5ld19leHBhbmRlZF9leG9iagor REVCVUc6ICBleG9ial9vdXQKK0RFQlVHOiAgY29udGV4dF9jYWxsYmFja19leG9ial9mcmVlCitE RUJVRzogIGNvbnRleHRfY2FsbGJhY2tfZXhvYmpfZnJlZQorIHRlc3RfZXhwYW5kIAorLS0tLS0t LS0tLS0tLQorIDIKKygxIHJvdykKKworU0VMRUNUIHRlc3RfZXhwYW5kX2V4cGFuZCgnMCc6OmV4 b2JqKTsKK0RFQlVHOiAgZXhvYmpfaW4KK0xJTkUgMTogU0VMRUNUIHRlc3RfZXhwYW5kX2V4cGFu ZCgnMCc6OmV4b2JqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitERUJV RzogIG5ld19leHBhbmRlZF9leG9iagorTElORSAxOiBTRUxFQ1QgdGVzdF9leHBhbmRfZXhwYW5k KCcwJzo6ZXhvYmopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RFQlVH OiAgZXhvYmpfZ2V0X2ZsYXRfc2l6ZQorTElORSAxOiBTRUxFQ1QgdGVzdF9leHBhbmRfZXhwYW5k KCcwJzo6ZXhvYmopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0RFQlVH OiAgZXhvYmpfZmxhdHRlbl9pbnRvCitMSU5FIDE6IFNFTEVDVCB0ZXN0X2V4cGFuZF9leHBhbmQo JzAnOjpleG9iaik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorREVCVUc6 ICBleG9ial9pbmZvCitERUJVRzogIERhdHVtR2V0RXhvYmoKK0RFQlVHOiAgbmV3X2V4cGFuZGVk X2V4b2JqCitERUJVRzogIGNvbnRleHRfY2FsbGJhY2tfZXhvYmpfZnJlZQorTk9USUNFOiAgZXhw YW5kIGV4cGFuZCBjb3VudCAyCitERUJVRzogIGV4b2JqX2luZm8KK0RFQlVHOiAgRGF0dW1HZXRF eG9iagorREVCVUc6ICBuZXdfZXhwYW5kZWRfZXhvYmoKK0RFQlVHOiAgY29udGV4dF9jYWxsYmFj a19leG9ial9mcmVlCitOT1RJQ0U6ICBleHBhbmQgY291bnQgMgorREVCVUc6ICBleG9ial9pbmZv CitERUJVRzogIERhdHVtR2V0RXhvYmoKK0RFQlVHOiAgbmV3X2V4cGFuZGVkX2V4b2JqCitERUJV RzogIGNvbnRleHRfY2FsbGJhY2tfZXhvYmpfZnJlZQorTk9USUNFOiAgZXhwYW5kIGNvdW50IDIK K0RFQlVHOiAgRGF0dW1HZXRFeG9iagorREVCVUc6ICBuZXdfZXhwYW5kZWRfZXhvYmoKK0RFQlVH OiAgZXhvYmpfb3V0CitERUJVRzogIGNvbnRleHRfY2FsbGJhY2tfZXhvYmpfZnJlZQorREVCVUc6 ICBjb250ZXh0X2NhbGxiYWNrX2V4b2JqX2ZyZWUKKyB0ZXN0X2V4cGFuZF9leHBhbmQgCistLS0t LS0tLS0tLS0tLS0tLS0tLQorIDIKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Bn ZXhwYW5kZWQvcGdleHBhbmRlZC0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi43ZjVkN2U3NWFkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQtLTEuMC5zcWwKQEAgLTAsMCArMSw0OCBAQAorLS0gY29t cGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFU RSBFWFRFTlNJT04KK1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ2V4cGFuZGVkIiB0byBs b2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIFRZUEUgZXhvYmo7CisKK0NSRUFURSBGVU5D VElPTiBleG9ial9pbihjc3RyaW5nKQorUkVUVVJOUyBleG9iagorQVMgJyRsaWJkaXIvcGdleHBh bmRlZCcsICdleG9ial9pbicKK0xBTkdVQUdFIEMgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRF IEZVTkNUSU9OIGV4b2JqX291dChleG9iaikKK1JFVFVSTlMgY3N0cmluZworQVMgJyRsaWJkaXIv cGdleHBhbmRlZCcsICdleG9ial9vdXQnCitMQU5HVUFHRSBDIElNTVVUQUJMRSBTVFJJQ1Q7CisK K0NSRUFURSBUWVBFIGV4b2JqICgKKyAgICBpbnB1dCA9IGV4b2JqX2luLAorICAgIG91dHB1dCA9 IGV4b2JqX291dCwKKyAgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgIHN0b3JhZ2UgPSAnZXh0ZW5k ZWQnLAorICAgIGludGVybmFsbGVuZ3RoID0gLTEKKyk7CisKK0NSRUFURSBGVU5DVElPTiBpbmZv KGV4b2JqKQorUkVUVVJOUyBiaWdpbnQKK0FTICckbGliZGlyL3BnZXhwYW5kZWQnLCAnZXhvYmpf aW5mbycKK0xBTkdVQUdFIEMgU1RBQkxFOworCitjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiB0 ZXN0X2V4cGFuZChvYmogZXhvYmopIHJldHVybnMgZXhvYmogbGFuZ3VhZ2UgcGxwZ3NxbCBhcwor ICAgICQkCisgICAgZGVjbGFyZQorICAgICAgICBpIGJpZ2ludCA9IGluZm8ob2JqKTsKKyAgICBi ZWdpbgorICAgICAgICByYWlzZSBub3RpY2UgJ2V4cGFuZCBjb3VudCAlJywgaTsKKyAgICAgICAg cmV0dXJuIG9iajsKKyAgICBlbmQ7CisgICAgJCQ7CisKK2NyZWF0ZSBvciByZXBsYWNlIGZ1bmN0 aW9uIHRlc3RfZXhwYW5kX2V4cGFuZChvYmogZXhvYmopIHJldHVybnMgZXhvYmogbGFuZ3VhZ2Ug cGxwZ3NxbCBhcworICAgICQkCisgICAgZGVjbGFyZQorICAgICAgICBpIGJpZ2ludCA9IGluZm8o b2JqKTsKKyAgICBiZWdpbgorICAgICAgICByYWlzZSBub3RpY2UgJ2V4cGFuZCBleHBhbmQgY291 bnQgJScsIGk7CisgICAgICAgIG9iaiA9IHRlc3RfZXhwYW5kKG9iaik7CisgICAgICAgIHJldHVy biB0ZXN0X2V4cGFuZChvYmopOworICAgIGVuZDsKKyAgICAkJDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9wZ2V4cGFuZGVkLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Bn ZXhwYW5kZWQvcGdleHBhbmRlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjU2MmExZjI4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhw YW5kZWQvcGdleHBhbmRlZC5jCkBAIC0wLDAgKzEsMTc3IEBACisjaW5jbHVkZSAicGdleHBhbmRl ZC5oIgorUEdfTU9EVUxFX01BR0lDOworCisvKiBDb21wdXRlIGZsYXR0ZW5lZCBzaXplIG9mIHN0 b3JhZ2UgbmVlZGVkIGZvciBhIGV4b2JqICovCitzdGF0aWMgU2l6ZQorZXhvYmpfZ2V0X2ZsYXRf c2l6ZShFeHBhbmRlZE9iamVjdEhlYWRlciAqZW9ocHRyKSB7CisJcGdleHBhbmRlZF9FeG9iaiAq QSA9IChwZ2V4cGFuZGVkX0V4b2JqKikgZW9ocHRyOworCVNpemUgbmJ5dGVzOworCisJTE9HRigp OworCisJLyogVGhpcyBpcyBhIHNhbml0eSBjaGVjayB0aGF0IHRoZSBvYmplY3QgaXMgaW5pdGlh bGl6ZWQgKi8KKwlBc3NlcnQoQS0+ZW1fbWFnaWMgPT0gZXhvYmpfTUFHSUMpOworCisJLyogVXNl IGNhY2hlZCB2YWx1ZSBpZiBhbHJlYWR5IGNvbXB1dGVkICovCisJaWYgKEEtPmZsYXRfc2l6ZSkg eworCQlyZXR1cm4gQS0+ZmxhdF9zaXplOworCX0KKworCS8vIEFkZCB0aGUgb3ZlcmhlYWQgb2Yg dGhlIGZsYXQgaGVhZGVyIHRvIHRoZSBzaXplIG9mIHRoZSBkYXRhCisJLy8gcGF5bG9hZAorCW5i eXRlcyA9IFBHRVhQQU5ERURfRVhPQkpfT1ZFUkhFQUQoKTsKKwluYnl0ZXMgKz0gc2l6ZW9mKHVp bnQ2NF90KTsKKworCS8qIENhY2hlIHRoaXMgdmFsdWUgaW4gdGhlIGV4cGFuZGVkIG9iamVjdCAq LworCUEtPmZsYXRfc2l6ZSA9IG5ieXRlczsKKwlyZXR1cm4gbmJ5dGVzOworfQorCisvKiBGbGF0 dGVuIGV4b2JqIGludG8gYSBwcmUtYWxsb2NhdGVkIHJlc3VsdCBidWZmZXIgdGhhdCBpcworICAg YWxsb2NhdGVkX3NpemUgaW4gYnl0ZXMuICAqLworc3RhdGljIHZvaWQKK2V4b2JqX2ZsYXR0ZW5f aW50byhFeHBhbmRlZE9iamVjdEhlYWRlciAqZW9ocHRyLAorCQkJCSAgIHZvaWQgKnJlc3VsdCwg U2l6ZSBhbGxvY2F0ZWRfc2l6ZSkgIHsKKwl2b2lkICpkYXRhOworCisJLyogQ2FzdCBFT0ggcG9p bnRlciB0byBleHBhbmRlZCBvYmplY3QsIGFuZCByZXN1bHQgcG9pbnRlciB0byBmbGF0CisJICAg b2JqZWN0ICovCisJcGdleHBhbmRlZF9FeG9iaiAqQSA9IChwZ2V4cGFuZGVkX0V4b2JqICopIGVv aHB0cjsKKwlwZ2V4cGFuZGVkX0ZsYXRFeG9iaiAqZmxhdCA9IChwZ2V4cGFuZGVkX0ZsYXRFeG9i aiAqKSByZXN1bHQ7CisKKwlMT0dGKCk7CisKKwkvKiBTYW5pdHkgY2hlY2sgdGhlIG9iamVjdCBp cyB2YWxpZCAqLworCUFzc2VydChBLT5lbV9tYWdpYyA9PSBleG9ial9NQUdJQyk7CisJQXNzZXJ0 KGFsbG9jYXRlZF9zaXplID09IEEtPmZsYXRfc2l6ZSk7CisKKwkvKiBaZXJvIG91dCB0aGUgd2hv bGUgYWxsb2NhdGVkIGJ1ZmZlciAqLworCW1lbXNldChmbGF0LCAwLCBhbGxvY2F0ZWRfc2l6ZSk7 CisKKwkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmbGF0dGVuZWQgZGF0 YSBhbmQgY29weSB0aGUKKwkgICBleHBhbmRlZCB2YWx1ZSBpbnRvIGl0ICovCisJZGF0YSA9IFBH RVhQQU5ERURfRVhPQkpfREFUQShmbGF0KTsKKwltZW1jcHkoZGF0YSwgQS0+dmFsdWUsIHNpemVv ZihpbnQ2NF90KSk7CisKKwkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIHZhcmxlbmEgb2JqZWN0ICov CisJU0VUX1ZBUlNJWkUoZmxhdCwgYWxsb2NhdGVkX3NpemUpOworfQorCisvKiBFeHBhbmQgYSBm bGF0IGV4b2JqIGluIHRvIGFuIEV4cGFuZGVkIG9uZSwgcmV0dXJuIGFzIFBvc3RncmVzIERhdHVt LiAqLworcGdleHBhbmRlZF9FeG9iaiAqCituZXdfZXhwYW5kZWRfZXhvYmooaW50NjRfdCB2YWx1 ZSwgTWVtb3J5Q29udGV4dCBwYXJlbnRjb250ZXh0KSB7CisJcGdleHBhbmRlZF9FeG9iaiAqQTsK KworCU1lbW9yeUNvbnRleHQgb2JqY3h0LCBvbGRjeHQ7CisJTWVtb3J5Q29udGV4dENhbGxiYWNr ICpjdHhjYjsKKworCUxPR0YoKTsKKworCS8qIENyZWF0ZSBhIG5ldyBjb250ZXh0IHRoYXQgd2ls bCBob2xkIHRoZSBleHBhbmRlZCBvYmplY3QuICovCisJb2JqY3h0ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKHBhcmVudGNvbnRleHQsCisJCQkJCQkJCSAgICJleHBhbmRlZCBleG9iaiIsCisJCQkJ CQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJLyogQWxsb2NhdGUgYSBuZXcgZXhw YW5kZWQgZXhvYmogKi8KKwlBID0gKHBnZXhwYW5kZWRfRXhvYmoqKU1lbW9yeUNvbnRleHRBbGxv YyhvYmpjeHQsCisJCQkJCQkJCQkJCSAgc2l6ZW9mKHBnZXhwYW5kZWRfRXhvYmopKTsKKworCS8q IEluaXRpYWxpemUgdGhlIEV4cGFuZGVkT2JqZWN0SGVhZGVyIG1lbWJlciB3aXRoIGZsYXR0ZW5p bmcKKwkgKiBtZXRob2RzIGFuZCB0aGUgbmV3IG9iamVjdCBjb250ZXh0ICovCisJRU9IX2luaXRf aGVhZGVyKCZBLT5oZHIsICZleG9ial9tZXRob2RzLCBvYmpjeHQpOworCisJLyogVXNlZCBmb3Ig ZGVidWdnaW5nIGNoZWNrcyAqLworCUEtPmVtX21hZ2ljID0gZXhvYmpfTUFHSUM7CisKKwkvKiBT d2l0Y2ggdG8gbmV3IG9iamVjdCBjb250ZXh0ICovCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9iamN4dCk7CisKKwkvKiBHZXQgdmFsdWUgZnJvbSBmbGF0IG9iamVjdCBhbmQgaW5j cmVtZW50IGl0ICovCisJQS0+dmFsdWUgPSBwYWxsb2Moc2l6ZW9mKGludDY0X3QpKTsKKwkqKEEt PnZhbHVlKSA9IHZhbHVlICsgMTsKKworCS8qIFNldHRpbmcgZmxhdCBzaXplIHRvIHplcm8gdGVs bHMgdXMgdGhlIG9iamVjdCBoYXMgYmVlbiB3cml0dGVuLiAqLworCUEtPmZsYXRfc2l6ZSA9IDA7 CisKKwkvKiBDcmVhdGUgYSBjb250ZXh0IGNhbGxiYWNrIHRvIGZyZWUgZXhvYmogd2hlbiBjb250 ZXh0IGlzIGNsZWFyZWQgKi8KKwljdHhjYiA9IE1lbW9yeUNvbnRleHRBbGxvYyhvYmpjeHQsIHNp emVvZihNZW1vcnlDb250ZXh0Q2FsbGJhY2spKTsKKworCWN0eGNiLT5mdW5jID0gY29udGV4dF9j YWxsYmFja19leG9ial9mcmVlOworCWN0eGNiLT5hcmcgPSBBOworCU1lbW9yeUNvbnRleHRSZWdp c3RlclJlc2V0Q2FsbGJhY2sob2JqY3h0LCBjdHhjYik7CisKKwkvKiBTd2l0Y2ggYmFjayB0byBv bGQgY29udGV4dCAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCXJldHVybiBB OworfQorCisvKiBNZW1vcnlDb250ZXh0Q2FsbGJhY2sgZnVuY3Rpb24gdG8gZnJlZSBleG9iaiBk YXRhIHdoZW4gdGhlaXIKKyAgIGNvbnRleHQgZ29lcyBvdXQgb2Ygc2NvcGUuICovCitzdGF0aWMg dm9pZAorY29udGV4dF9jYWxsYmFja19leG9ial9mcmVlKHZvaWQqIHB0cikgeworCXBnZXhwYW5k ZWRfRXhvYmogKkEgPSAocGdleHBhbmRlZF9FeG9iaiAqKSBwdHI7CisJTE9HRigpOworCXBmcmVl KEEtPnZhbHVlKTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGFsd2F5cyBleHBhbmRlZCBk YXR1bQorCisgICBUaGlzIGlzIHVzZWQgYnkgUEdfR0VUQVJHX0VYT0JKICovCitwZ2V4cGFuZGVk X0V4b2JqICoKK0RhdHVtR2V0RXhvYmooRGF0dW0gZCkgeworCXBnZXhwYW5kZWRfRXhvYmogKkE7 CisJcGdleHBhbmRlZF9GbGF0RXhvYmogKmZsYXQ7CisJaW50NjRfdCAqdmFsdWU7CisKKwlMT0dG KCk7CisJaWYgKFZBUkFUVF9JU19FWFRFUk5BTF9FWFBBTkRFRChEYXR1bUdldFBvaW50ZXIoZCkp KSB7CisJCUEgPSBFeG9iakdldEVPSFAoZCk7CisJCUFzc2VydChBLT5lbV9tYWdpYyA9PSBleG9i al9NQUdJQyk7CisJCXJldHVybiBBOworCX0KKwlmbGF0ID0gKHBnZXhwYW5kZWRfRmxhdEV4b2Jq KilQR19ERVRPQVNUX0RBVFVNKGQpOworCXZhbHVlID0gUEdFWFBBTkRFRF9FWE9CSl9EQVRBKGZs YXQpOworCUEgPSBuZXdfZXhwYW5kZWRfZXhvYmooKnZhbHVlLCBDdXJyZW50TWVtb3J5Q29udGV4 dCk7CisJcmV0dXJuIEE7Cit9CisKK0RhdHVtCitleG9ial9pbihQR19GVU5DVElPTl9BUkdTKSB7 CisJY2hhciAqaW5wdXQ7CisJcGdleHBhbmRlZF9FeG9iaiAqcmVzdWx0OworCWludDY0X3QgdmFs dWU7CisJTE9HRigpOworCWlucHV0ID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CisJdmFsdWUgPSBz dHJ0b2xsKGlucHV0LCBOVUxMLCAxMCk7CisJcmVzdWx0ID0gbmV3X2V4cGFuZGVkX2V4b2JqKHZh bHVlLCBDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJUEdFWFBBTkRFRF9SRVRVUk5fRVhPQkoocmVz dWx0KTsKK30KKworRGF0dW0KK2V4b2JqX291dChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIg KnJlc3VsdDsKKwlwZ2V4cGFuZGVkX0V4b2JqICpBID0gUEdFWFBBTkRFRF9HRVRBUkdfRVhPQkoo MCk7CisJTE9HRigpOworCXJlc3VsdCA9IHBhbGxvYygzMik7CisJc25wcmludGYocmVzdWx0LCBz aXplb2YocmVzdWx0KSwgIiVsbGQiLCAobG9uZyBsb25nIGludCkgKkEtPnZhbHVlKTsKKwlQR19S RVRVUk5fQ1NUUklORyhyZXN1bHQpOworfQorCitEYXR1bQorZXhvYmpfaW5mbyhQR19GVU5DVElP Tl9BUkdTKSB7CisJcGdleHBhbmRlZF9FeG9iaiAqQTsKKwlMT0dGKCk7CisJQSA9IFBHRVhQQU5E RURfR0VUQVJHX0VYT0JKKDApOworCXJldHVybiBJbnQ2NEdldERhdHVtKCpBLT52YWx1ZSk7Cit9 CisKK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJTE9HRigpOworfQorLyogTG9jYWwgVmFyaWFi bGVzOiAqLworLyogbW9kZTogYyAqLworLyogYy1maWxlLXN0eWxlOiAicG9zdGdyZXNxbCIgKi8K Ky8qIEVuZDogKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcGdleHBhbmRlZC9wZ2V4 cGFuZGVkLmNvbnRyb2wgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvcGdleHBhbmRlZC5j b250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJlOWQxMzM0ODQK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvcGdleHBhbmRl ZC5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyBwZ2V4cGFuZGVkIGV4dGVuc2lvbgorY29tbWVu dCA9ICdFeGFtcGxlIFBvc3RncmVzIGV4dGVuc2lvbiBmb3IgZXhwYW5kZWQgZGF0YSB0eXBlcy4n CitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworcmVsb2NhdGFibGUgPSB0cnVlCityZXF1aXJlcyA9 ICcnCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvcGdleHBhbmRlZC5o IGIvc3JjL3Rlc3QvbW9kdWxlcy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40YWRlYmFjZTVmCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy9wZ2V4cGFuZGVkL3BnZXhwYW5kZWQuaApAQCAtMCwwICsxLDg3IEBA CisjaWZuZGVmIFBHRVhQQU5ERURfSAorI2RlZmluZSBQR0VYUEFOREVEX0gKKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgInV0aWxzL2V4cGFu ZGVkZGF0dW0uaCIKKworLyogSUQgZm9yIGRlYnVnZ2luZyBjcm9zc2NoZWNrcyAqLworI2RlZmlu ZSBleG9ial9NQUdJQyA2ODkyNzY4MTMKKworI2RlZmluZSBMT0dGKCkgZWxvZyhERUJVRzEsIF9f ZnVuY19fKQorCisvKiBGbGF0dGVuZWQgcmVwcmVzZW50YXRpb24gb2YgZXhvYmosIHVzZWQgdG8g c3RvcmUgdG8gZGlzay4KKworICAgVGhlIGZpcnN0IDMyIGJpdHMgbXVzdCB0aGUgbGVuZ3RoIG9m IHRoZSBkYXRhLiAgQWN0dWFsIGZsYXR0ZW5lZCBkYXRhCisgICBpcyBhcHBlbmRlZCBhZnRlciB0 aGlzIHN0cnVjdCBhbmQgY2Fubm90IGV4Y2VlZCAxR0IuCisqLwordHlwZWRlZiBzdHJ1Y3QgcGdl eHBhbmRlZF9GbGF0RXhvYmogeworCWludDMyIHZsX2xlbl87Cit9IHBnZXhwYW5kZWRfRmxhdEV4 b2JqOworCisvKiBFeHBhbmRlZCByZXByZXNlbnRhdGlvbiBvZiBleG9iai4KKworICAgV2hlbiBs b2FkZWQgZnJvbSBzdG9yYWdlLCB0aGUgZmxhdHRlbmVkIHJlcHJlc2VudGF0aW9uIGlzIHVzZWQg dG8KKyAgIGJ1aWxkIHRoZSBleG9iai4gIEluIHRoaXMgY2FzZSwgaXQncyBqdXN0IGEgcG9pbnRl ciB0byBhbiBpbnRlZ2VyLgorKi8KK3R5cGVkZWYgc3RydWN0IHBnZXhwYW5kZWRfRXhvYmogIHsK KwlFeHBhbmRlZE9iamVjdEhlYWRlciBoZHI7CisJaW50IGVtX21hZ2ljOworCVNpemUgZmxhdF9z aXplOworCWludDY0X3QgKnZhbHVlOworfSBwZ2V4cGFuZGVkX0V4b2JqOworCisvKiBDYWxsYmFj ayBmdW5jdGlvbiBmb3IgZnJlZWluZyBleG9iaiBhcnJheXMuICovCitzdGF0aWMgdm9pZAorY29u dGV4dF9jYWxsYmFja19leG9ial9mcmVlKHZvaWQqKTsKKworLyogRXhwYW5kZWQgT2JqZWN0IEhl YWRlciAibWV0aG9kcyIgZm9yIGZsYXR0ZW5pbmcgZm9yIHN0b3JhZ2UgKi8KK3N0YXRpYyBTaXpl CitleG9ial9nZXRfZmxhdF9zaXplKEV4cGFuZGVkT2JqZWN0SGVhZGVyICplb2hwdHIpOworCitz dGF0aWMgdm9pZAorZXhvYmpfZmxhdHRlbl9pbnRvKEV4cGFuZGVkT2JqZWN0SGVhZGVyICplb2hw dHIsCisJCQkJICAgdm9pZCAqcmVzdWx0LCBTaXplIGFsbG9jYXRlZF9zaXplKTsKKworc3RhdGlj IGNvbnN0IEV4cGFuZGVkT2JqZWN0TWV0aG9kcyBleG9ial9tZXRob2RzID0geworCWV4b2JqX2dl dF9mbGF0X3NpemUsCisJZXhvYmpfZmxhdHRlbl9pbnRvCit9OworCisvKiBDcmVhdGUgYSBuZXcg ZXhvYmogZGF0dW0uICovCitwZ2V4cGFuZGVkX0V4b2JqICoKK25ld19leHBhbmRlZF9leG9iaihp bnQ2NF90IHZhbHVlLCAgTWVtb3J5Q29udGV4dCBwYXJlbnRjb250ZXh0KTsKKworLyogSGVscGVy IGZ1bmN0aW9uIHRoYXQgZWl0aGVyIGRldG9hc3RzIG9yIGV4cGFuZHMuICovCitwZ2V4cGFuZGVk X0V4b2JqICpEYXR1bUdldEV4b2JqKERhdHVtIGQpOworCisvKiBIZWxwZXIgbWFjcm8gdG8gZGV0 b2FzdCBhbmQgZXhwYW5kIGV4b2JqcyBhcmd1bWVudHMgKi8KKyNkZWZpbmUgUEdFWFBBTkRFRF9H RVRBUkdfRVhPQkoobikgIERhdHVtR2V0RXhvYmooUEdfR0VUQVJHX0RBVFVNKG4pKQorCisvKiBI ZWxwZXIgbWFjcm8gdG8gcmV0dXJuIEV4cGFuZGVkIE9iamVjdCBIZWFkZXIgUG9pbnRlciBmcm9t IGV4b2JqLiAqLworI2RlZmluZSBQR0VYUEFOREVEX1JFVFVSTl9FWE9CSihBKSByZXR1cm4gRU9I UEdldFJXRGF0dW0oJihBKS0+aGRyKQorCisvKiBIZWxwZXIgbWFjcm8gdG8gY29tcHV0ZSBmbGF0 IGV4b2JqIGhlYWRlciBzaXplICovCisjZGVmaW5lIFBHRVhQQU5ERURfRVhPQkpfT1ZFUkhFQUQo KSBNQVhBTElHTihzaXplb2YocGdleHBhbmRlZF9GbGF0RXhvYmopKQorCisvKiBIZWxwZXIgbWFj cm8gdG8gZ2V0IHBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIGV4b2JqIGRhdGEuICovCisjZGVmaW5l IFBHRVhQQU5ERURfRVhPQkpfREFUQShhKSAoKGludDY0X3QgKikoKChjaGFyICopIChhKSkgKyBQ R0VYUEFOREVEX0VYT0JKX09WRVJIRUFEKCkpKQorCisvKiBIZWxwIG1hY3JvIHRvIGNhc3QgZ2Vu ZXJpYyBEYXR1bSBoZWFkZXIgcG9pbnRlciB0byBleHBhbmRlZCBFeG9iaiAqLworI2RlZmluZSBF eG9iakdldEVPSFAoZCkgKHBnZXhwYW5kZWRfRXhvYmogKikgRGF0dW1HZXRFT0hQKGQpOworCisv KiBQdWJsaWMgQVBJIGZ1bmN0aW9ucyAqLworCitQR19GVU5DVElPTl9JTkZPX1YxKGV4b2JqKTsK K1BHX0ZVTkNUSU9OX0lORk9fVjEoZXhvYmpfaW4pOworUEdfRlVOQ1RJT05fSU5GT19WMShleG9i al9vdXQpOworUEdfRlVOQ1RJT05fSU5GT19WMShleG9ial9pbmZvKTsKKwordm9pZAorX1BHX2lu aXQodm9pZCk7CisKKyNlbmRpZiAvKiBQR0VYUEFOREVEX0ggKi8KKy8qIExvY2FsIFZhcmlhYmxl czogKi8KKy8qIG1vZGU6IGMgKi8KKy8qIGMtZmlsZS1zdHlsZTogInBvc3RncmVzcWwiICovCisv KiBFbmQ6ICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3BnZXhwYW5kZWQvc3FsL3Bn ZXhwYW5kZWQuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy9wZ2V4cGFuZGVkL3NxbC9wZ2V4cGFuZGVk LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44ODU4ODUxYjMyCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9wZ2V4cGFuZGVkL3NxbC9wZ2V4cGFu ZGVkLnNxbApAQCAtMCwwICsxLDUgQEAKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ2RlYnVn MSc7CitDUkVBVEUgRVhURU5TSU9OIHBnZXhwYW5kZWQ7CitTRUxFQ1QgJzAnOjpleG9iajsKK1NF TEVDVCB0ZXN0X2V4cGFuZCgnMCc6OmV4b2JqKTsKK1NFTEVDVCB0ZXN0X2V4cGFuZF9leHBhbmQo JzAnOjpleG9iaik7Ci0tIAoyLjM0LjEKCg== --0000000000008773920627b32194--