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 1wcKDi-003GRe-1v for pgsql-bugs@arkaria.postgresql.org; Wed, 24 Jun 2026 09:48:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wcKCh-00082a-1X for pgsql-bugs@arkaria.postgresql.org; Wed, 24 Jun 2026 09:47:31 +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 1wcKCh-00082R-0T for pgsql-bugs@lists.postgresql.org; Wed, 24 Jun 2026 09:47:31 +0000 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wcKCd-000000000PY-01EP for pgsql-bugs@lists.postgresql.org; Wed, 24 Jun 2026 09:47:29 +0000 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-c8fee9f63d5so265778a12.0 for ; Wed, 24 Jun 2026 02:47:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782294444; cv=none; d=google.com; s=arc-20240605; b=Upd5OaIHTbLIK4pglsb+x02qMJLPLU8Alp3BICbvbUH5/PS18wDW/sQYGKFJBvJ/Te 6Ez+4DldT5aA2z7e22VLFAx4TzA1zeZIEwyGGSVQjh0bBbShrwaGLZOQxFbeEfPG/Y7R Ytl7B0qpnHU7dmHvsHzvHBsCxeYW22HUpuI7grxI7EX3uFbWh9vfxqXy0rfQHHDmeUqM +YHw+7WvObdmvYf0btRExm6bFLLMk31V/U2gYO22u14/6TSGGoSrZ1K5ABO/2x1He+0b flSQ5LXi4WW4gv2Wn4Fka+0Mo7eZWgRh4VuKJGRLtmRfVKv7kTghmEl7x3uFiIb687jY sEVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=fEQPEbihgLgh7j+2AETWq9G9HlyMvWAeqUEPU521R44=; fh=N5EtuwkS0AETHQ4zlAqEaVvMajdlaEie2vzUoXNL6X4=; b=jDtPzoiY2cjxakSXYxISlZ6YRw+vTa0iwecXLECdu2UuGj9fJKP8ByeL9ikPYk6cIE G19iw9Tsu9GKEabK1hHsTPjQddXL6uS4TXjCtx7ysH0PQ/HgvS56freudjwlR7P2y2D/ BsurZdCHBRgzBcIisZF8mtfLNVW8gEeOPcflXVv6HrRhHq1n+kN09T/6uWKGsxxiMCAa 4wnrZKq93xtTp+e+c1yCIGbVTbpY9AotxBGWizFlGiLZgqhXuXULmiwMQqoedDbI/9+y 6fdS1K9KKbfRtQRq8yNScT/jkQm2Ip/+ZHNWdrwZhuFpDzxjB8aQ3ZJUD62XSDtDyTnJ 4ILg==; 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=enterprisedb.com; s=google; t=1782294444; x=1782899244; 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=fEQPEbihgLgh7j+2AETWq9G9HlyMvWAeqUEPU521R44=; b=Vl1gWWs643IKJe9Ya9TpB/+8GCsCiCsBBVOkwnwA22ZSeDgSDVApm5C7AhbyAIPO/c mceNgqIMCYDAp11AIlOpwNhCmQeHVdX7kaklwABHaQj0ZT4nrO0ba+Yls848i9KpO9s0 CCy5YDZP23YPEYOTq+TsSiUzjjUgoCTfe5bVonSM8zXeVGjDelHhwwyZFbFNF97LcnkG FyhMYIISnzdfRIR6RCRKVHIRY3q9hr9voLgd0LHlnWKHUzX/eMkYa/5SShZQHSUuTe9m dIWt+rdHS/s0oY9u9eUo+/DKsPEn2WyurBQsBTqtO9NS1IBEOdzG5QcaQuysKL1TdreB AsXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782294444; x=1782899244; h=cc: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=fEQPEbihgLgh7j+2AETWq9G9HlyMvWAeqUEPU521R44=; b=FfpiK4yUVADEOMulxBi7F3fRuoyftrnE5RX7+4BIzwV6eRaxg32Gy3Y8x5eAHLMOoD t6Sn2eWmwu13h/h0Og79/APnmENLcPMjbXPY5MeWdDJgGy63H/veWf9xjZlyhHzDk9Kq jH8PJJnpi3tPnNmNuBWqi/chu/qYtAZhp5P81hrOi9OQXV9+2U2hnVfnDA20nclxvic/ fssCECnjj1ZZouygHWPDvEKSxRGUgWF5Xdw1vDXwYR/8r9hyehsE3rYN2wO2kerEar3n n03dmWj8IqQitM9bJdv8AgeTxi2w16s/7edCOh5pM5EcFvv1Kr/8TyjFzJ/EqkMnP4Ml rb7w== X-Forwarded-Encrypted: i=1; AFNElJ+Zr4ACniyyxocuMKRe/Lo/qyVHqzaeug4/i3nNtoFFwFVsVOtpo/3FE8wLgWA8Dh4fA1np3juBG+4F@lists.postgresql.org X-Gm-Message-State: AOJu0Yx7fT7ftivIhM77ArPes5cQmlnHk0ikvi0qJaMXR0iTaf2m4Lij IEP4qNhSjRsr//BxpCm9LK0Sp5f2aARSSFuSQNj9BxAUwNuI7yiM6X9AJDZRzF49fQEIIAmuLj+ GRII0/tZOc3e2Opm9KTZhUJRCeur0GKyf37+jqcW3 X-Gm-Gg: AfdE7cmGZ3k1VWbb+gQrlbmdnazL3mRf4tCtsYxI73maHbJ/DR0EY0NEENJd0V7Kjv4 nZD/jL/nw00bmxDx0l6zDzkh+ArGWJTzDHBruKEw93Ygse2+g79jR/uKXoZGgHzHdP0AMgFRlsf EkYrqzLtYUNiqKONycrVo6+0E0CGLyIshS7juS3t0Isal7nx60BszbdJBpqVMIbyiz6+WPDT3/x N8Ijvc8zyoaQLE1zI0qhvP31LBuYUmwKMbw6UE/jSqEiJFbBlNxVDnCjLrHpxehx8UszIVLbA== X-Received: by 2002:a05:6a21:485:b0:3b4:cd6:88b with SMTP id adf61e73a8af0-3bd2d2f08damr3287694637.46.1782294444193; Wed, 24 Jun 2026 02:47:24 -0700 (PDT) MIME-Version: 1.0 References: <19506-9478f3012ecc2328@postgresql.org> <9ef850b9-d127-44db-9a6c-4db64436b056@gmail.com> In-Reply-To: <9ef850b9-d127-44db-9a6c-4db64436b056@gmail.com> From: Gabriele Bartolini Date: Wed, 24 Jun 2026 19:47:11 +1000 X-Gm-Features: AVVi8CdH4PLL99hoPA5TRaHIJ4EfjdX9xoBzhVopO5HlI1ViHkXAWTQxIXbLWWM Message-ID: Subject: Re: BUG #19506: LOAD '$libdir/...' inside extension scripts ignores dynamic_library_path with extension_control_path To: Matheus Alcantara Cc: gabriele.bartolini@gmail.com, pgsql-bugs@lists.postgresql.org, PG Bug reporting form Content-Type: multipart/mixed; boundary="0000000000003b6d1e0654fcc33c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003b6d1e0654fcc33c Content-Type: multipart/alternative; boundary="0000000000003b6d1c0654fcc33a" --0000000000003b6d1c0654fcc33a Content-Type: text/plain; charset="UTF-8" Hi everyone, I realised I hadn't sent this email with the patch. Please find the attached patch. Thanks, Gabriele On Fri, 5 Jun 2026 at 22:12, Matheus Alcantara wrote: > On 03/06/26 19:21, PG Bug reporting form wrote: > > The following bug has been logged on the website: > > > > Bug reference: 19506 > > Logged by: Gabriele Bartolini > > Email address: gabriele.bartolini@gmail.com > > PostgreSQL version: 18.4 > > Operating system: Linux (reproduced under CloudNativePG/Kubernetes) > > Description: > > > > When an extension is installed in a location reached via > > `extension_control_path` / `dynamic_library_path` (rather than the > > compiled-in package library directory), a LOAD '$libdir/foo' hardcoded > > inside an extension's SQL script fails to find the library. PostGIS does > > this in its upgrade scripts, so a PostGIS upgrade fails: > > > > ``` > > app=# SELECT postgis_extensions_upgrade(); > > NOTICE: Updating extension postgis 3.6.1 > > ERROR: could not access file "$libdir/postgis-3": No such file or > directory > > CONTEXT: SQL statement "LOAD '$libdir/postgis-3'" > > extension script file "postgis--ANY--3.6.3.sql", near line 1530 > > ``` > > > > This is a side effect of the fix for bug #18920 (commit f777d773878). > Commit > > 4f7f7b03758 (`extension_control_path`) made the feature work by stripping > > the '$libdir/' prefix so that dynamic_library_path is consulted. #18920 > then > > restricted that stripping to the function-load path so that a user-issued > > `LOAD` keeps the literal '$libdir/' prefix. As a result, a `LOAD` inside > an > > extension script now also keeps the literal prefix, so > > `dynamic_library_path` is never consulted, and the library cannot be > found. > > > > The only reason that it was decided that we should strip the $libdir > was that almost all popular extensions use $libdir prefix on > module_pathname on .control files, so the extension_control_path would > not work and waiting for extensions to change this will make the > extension_control_path almost useless (I hope that we can remove this > in the future once 18 is the minimum supported version). > > I'm not sure if we also want this for the LOAD command, I'm wondering > if the postgis could remove the $libdir prefix from the LOAD command > instead of Postgres striping this, what do you think? IIRC a simple > LOAD 'postgis-3' on versions before 18 will still works. > > I think that extensions should start to remove the $libdir prefix > since extension_control_path is going to the second release cycle, but > I agree that it seems more complicated than it actually is. > > -- > Matheus Alcantara > EDB: https://www.enterprisedb.com > > > -- Gabriele Bartolini VP, Chief Architect, Kubernetes enterprisedb.com / Melbourne, Australia --0000000000003b6d1c0654fcc33a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi everyone,

I realised I hadn't se= nt this email with the patch. Please find the attached patch.
Thanks,
Gabriele

On Fri, 5 Jun 2026 a= t 22:12, Matheus Alcantara <= matheusssilv97@gmail.com> wrote:
On 03/06/26 19:21, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference:=C2=A0 =C2=A0 =C2=A0 19506
> Logged by:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Gabriele Bartolini
> Email address:=C2=A0 =C2=A0 =C2=A0 gabriele.bartolini@gmail.com
> PostgreSQL version: 18.4
> Operating system:=C2=A0 =C2=A0Linux (reproduced under CloudNativePG/Ku= bernetes)
> Description:
>
> When an extension is installed in a location reached via
> `extension_control_path` / `dynamic_library_path` (rather than the
> compiled-in package library directory), a LOAD '$libdir/foo' h= ardcoded
> inside an extension's SQL script fails to find the library. PostGI= S does
> this in its upgrade scripts, so a PostGIS upgrade fails:
>
> ```
> app=3D# SELECT postgis_extensions_upgrade();
> NOTICE:=C2=A0 Updating extension postgis 3.6.1
> ERROR:=C2=A0 could not access file "$libdir/postgis-3": No s= uch file or directory
> CONTEXT:=C2=A0 SQL statement "LOAD '$libdir/postgis-3'&qu= ot;
> extension script file "postgis--ANY--3.6.3.sql", near line 1= 530
> ```
>
> This is a side effect of the fix for bug #18920 (commit f777d773878). = Commit
> 4f7f7b03758 (`extension_control_path`) made the feature work by stripp= ing
> the '$libdir/' prefix so that dynamic_library_path is consulte= d. #18920 then
> restricted that stripping to the function-load path so that a user-iss= ued
> `LOAD` keeps the literal '$libdir/' prefix. As a result, a `LO= AD` inside an
> extension script now also keeps the literal prefix, so
> `dynamic_library_path` is never consulted, and the library cannot be f= ound.
>

The only reason that it was decided that we should strip the $libdir
was that almost all popular extensions use $libdir prefix on
module_pathname on .control files, so the extension_control_path would
not work and waiting for extensions to change this will make the
extension_control_path almost useless (I hope that we can remove this
in the future once 18 is the minimum supported version).

I'm not sure if we also want this for the LOAD command, I'm wonderi= ng
if the postgis could remove the $libdir prefix from the LOAD command
instead of Postgres striping this, what do you think? IIRC a simple
LOAD 'postgis-3' on versions before 18 will still works.

I think that extensions should start to remove the $libdir prefix
since extension_control_path is going to the second release cycle, but
I agree that it seems more complicated than it actually is.

--
Matheus Alcantara
EDB: https://www.enterprisedb.com




--
Gabriele Bartolini
VP, Chief Arch= itect, Kubernetes
enterprisedb.com=C2=A0/ Melbourne, Australia
--0000000000003b6d1c0654fcc33a-- --0000000000003b6d1e0654fcc33c Content-Type: application/octet-stream; name="0001-Strip-libdir-from-LOAD-inside-extension-scripts.patch" Content-Disposition: attachment; filename="0001-Strip-libdir-from-LOAD-inside-extension-scripts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqrw2i1v0 RnJvbSAyYmRkZGJiODI3ZTgzZjhlMDZmM2YzMjIzNDlkZDkzMDFlMTM1MzQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJyaWVsZSBCYXJ0b2xpbmkgPGdhYnJpZWxlLmJhcnRvbGlu aUBlbnRlcnByaXNlZGIuY29tPgpEYXRlOiBTYXQsIDMwIE1heSAyMDI2IDAwOjE3OjE3ICsxMDAw ClN1YmplY3Q6IFtQQVRDSF0gU3RyaXAgJGxpYmRpciBmcm9tIExPQUQgaW5zaWRlIGV4dGVuc2lv biBzY3JpcHRzCgpDb21taXQgNGY3ZjdiMDM3NTggaW50cm9kdWNlZCB0aGUgZXh0ZW5zaW9uX2Nv bnRyb2xfcGF0aCBHVUMsIGFuZCB0bwptYWtlIGl0IHdvcmsgdGhlICRsaWJkaXIvIHByZWZpeCBv ZiBhbiBleHRlbnNpb24ncyBtb2R1bGVfcGF0aG5hbWUgaXMKc3RyaXBwZWQgc28gdGhhdCB0aGUg bGlicmFyeSBzZWFyY2ggcGF0aCAoZHluYW1pY19saWJyYXJ5X3BhdGgpIGlzCmNvbnN1bHRlZCwg YWxsb3dpbmcgdGhlIGV4dGVuc2lvbidzIHNoYXJlZCBsaWJyYXJ5IHRvIGJlIGZvdW5kIGluIGEK Y3VzdG9tIGxvY2F0aW9uLiAgQ29tbWl0IGY3NzdkNzczODc4IChidWcgIzE4OTIwKSBsYXRlciBy ZXN0cmljdGVkIHRoYXQKc3RyaXBwaW5nIHRvIHRoZSBmdW5jdGlvbi1sb2FkIHBhdGggc28gdGhh dCBhIExPQUQgY29tbWFuZCBpc3N1ZWQKZGlyZWN0bHkgYnkgYSB1c2VyIGtlZXBzIHRoZSBsaXRl cmFsICRsaWJkaXIvIHByZWZpeC4KCkhvd2V2ZXIsIHNvbWUgZXh0ZW5zaW9ucyBoYXJkY29kZSBh ICJMT0FEICckbGliZGlyL2ZvbyciIGluIHRoZWlyIG93bgpTUUwgc2NyaXB0cyAoUG9zdEdJUyBk b2VzIHRoaXMgaW4gaXRzIHVwZ3JhZGUgc2NyaXB0cywgZm9yIGV4YW1wbGUpLgpTdWNoIGEgTE9B RCBydW5zIHdoaWxlIGNyZWF0aW5nX2V4dGVuc2lvbiBpcyBzZXQsIGFuZCBiZWNhdXNlIHRoZSBw cmVmaXgKaXMgbm8gbG9uZ2VyIHN0cmlwcGVkIG9uIHRoZSBMT0FEIHBhdGgsIHRoZSBsaWJyYXJ5 IHNlYXJjaCBwYXRoIGlzIG5vdApjb25zdWx0ZWQgYW5kIHRoZSBleHRlbnNpb24gZmFpbHMgdG8g bG9hZCB3aGVuIGl0IGxpdmVzIGluIGEgZGlyZWN0b3J5CnJlYWNoZWQgdmlhIGV4dGVuc2lvbl9j b250cm9sX3BhdGggLyBkeW5hbWljX2xpYnJhcnlfcGF0aC4KClN0cmlwIHRoZSAkbGliZGlyLyBw cmVmaXggaW4gbG9hZF9maWxlKCkgYXMgd2VsbCwgYnV0IG9ubHkgd2hpbGUKY3JlYXRpbmdfZXh0 ZW5zaW9uIGlzIHRydWUsIHNvIGEgTE9BRCBpbnNpZGUgYW4gZXh0ZW5zaW9uIHNjcmlwdCBiZWhh dmVzCmxpa2UgdGhlIGV4dGVuc2lvbidzIGZ1bmN0aW9uIGxvYWRzLiAgQSBMT0FEIGlzc3VlZCBk aXJlY3RseSBieSBhIHVzZXIKaXMgbGVmdCB1bnRvdWNoZWQgYW5kIGtlZXBzIHRoZSBidWcgIzE4 OTIwIGJlaGF2aW9yLiAgVGhlIHN0cmlwcGluZyBpcwpmYWN0b3JlZCBvdXQgb2YgbG9hZF9leHRl cm5hbF9mdW5jdGlvbigpIGludG8gYSBuZXcgaGVscGVyLApzdHJpcF9saWJkaXJfcHJlZml4KCks IGFuZCBpcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHJlc3RyaWN0ZWQtbmFtZQpzZWN1cml0eSBjaGVj ayBzbyB0aGF0IGNoZWNrIHN0aWxsIHNlZXMgdGhlIG9yaWdpbmFsIG5hbWUuCgpBZGQgYSBUQVAg dGVzdCBleGVyY2lzaW5nIGJvdGggcGF0aHMuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvZm1nci9k Zm1nci5jICAgICAgICAgICAgICAgIHwgIDUyICsrKysrKy0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZXh0ZW5zaW9ucy9NYWtlZmlsZSAgICAgfCAgIDMgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2V4dGVuc2lvbnMvbWVzb24uYnVpbGQgIHwgICA1ICsKIC4uLi90LzAwMl9sb2FkX2V4dGVuc2lv bl9jb250cm9sX3BhdGgucGwgICAgICB8IDExMSArKysrKysrKysrKysrKysrKysKIDQgZmlsZXMg Y2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL3QvMDAyX2xvYWRfZXh0ZW5z aW9uX2NvbnRyb2xfcGF0aC5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3Iv ZGZtZ3IuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZGZtZ3IuYwppbmRleCBlNjM2Y2M4MWNm OC4uYjQ4MjhiYmYxYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2ZtZ3IvZGZtZ3Iu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9mbWdyL2RmbWdyLmMKQEAgLTIwLDYgKzIwLDcgQEAK ICNpbmNsdWRlIDxkbGZjbi5oPgogI2VuZGlmCQkJCQkJCS8qICFXSU4zMiAqLwogCisjaW5jbHVk ZSAiY29tbWFuZHMvZXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImxp Yi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkBAIC02OCw2ICs2OSw3IEBA IHN0YXRpYyBEeW5hbWljRmlsZUxpc3QgKmZpbGVfdGFpbCA9IE5VTEw7CiAKIGNoYXIJICAgKkR5 bmFtaWNfbGlicmFyeV9wYXRoOwogCitzdGF0aWMgY29uc3QgY2hhciAqc3RyaXBfbGliZGlyX3By ZWZpeChjb25zdCBjaGFyICpmaWxlbmFtZSk7CiBzdGF0aWMgdm9pZCAqaW50ZXJuYWxfbG9hZF9s aWJyYXJ5KGNvbnN0IGNoYXIgKmxpYm5hbWUpOwogcGdfbm9yZXR1cm4gc3RhdGljIHZvaWQgaW5j b21wYXRpYmxlX21vZHVsZV9lcnJvcihjb25zdCBjaGFyICpsaWJuYW1lLAogCQkJCQkJCQkJCQkJ ICBjb25zdCBQZ19hYmlfdmFsdWVzICptb2R1bGVfbWFnaWNfZGF0YSk7CkBAIC03OCw2ICs4MCwy NyBAQCBzdGF0aWMgdm9pZCBjaGVja19yZXN0cmljdGVkX2xpYnJhcnlfbmFtZShjb25zdCBjaGFy ICpuYW1lKTsKIHN0YXRpYyBjb25zdCBQZ19hYmlfdmFsdWVzIG1hZ2ljX2RhdGEgPSBQR19NT0RV TEVfQUJJX0RBVEE7CiAKIAorLyoKKyAqIFN0cmlwIGEgbGVhZGluZyAnJGxpYmRpci8nIHByZWZp eCBmcm9tIGEgaGFyZGNvZGVkIGxpYnJhcnkgbmFtZSBzbyB0aGF0IHRoZQorICogbGlicmFyeSBz ZWFyY2ggcGF0aCAoZHluYW1pY19saWJyYXJ5X3BhdGgpIGlzIGNvbnN1bHRlZCBpbnN0ZWFkIG9m IHJlc29sdmluZworICogJyRsaWJkaXInIHN0cmFpZ2h0IHRvIHRoZSBwYWNrYWdlIGxpYnJhcnkg ZGlyZWN0b3J5LiAgVGhpcyBpcyB3aGF0IGFsbG93cworICogZXh0ZW5zaW9ucyBsb2NhdGVkIHZp YSBleHRlbnNpb25fY29udHJvbF9wYXRoIHRvIGJlIGxvYWRlZC4KKyAqCisgKiBUaGUgc3RyaXBw aW5nIGlzIGRvbmUgb25seSBmb3Igc2ltcGxlIG5hbWVzIChlLmcuLCAiJGxpYmRpci9mb28iKSwg bm90IGZvcgorICogbmVzdGVkIHBhdGhzIChlLmcuLCAiJGxpYmRpci9mb28vYmFyIikuICBGb3Ig bmVzdGVkIHBhdGhzLAorICogZXhwYW5kX2R5bmFtaWNfbGlicmFyeV9uYW1lKCkgZXhwYW5kcyB0 aGUgJyRsaWJkaXInIG1hY3JvIGRpcmVjdGx5LCBzbyB3ZQorICogbGVhdmUgdGhlbSB1bnRvdWNo ZWQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3N0cmlwX2xpYmRpcl9wcmVmaXgoY29uc3Qg Y2hhciAqZmlsZW5hbWUpCit7CisJaWYgKHN0cm5jbXAoZmlsZW5hbWUsICIkbGliZGlyLyIsIDgp ID09IDAgJiYKKwkJZmlyc3RfZGlyX3NlcGFyYXRvcihmaWxlbmFtZSArIDgpID09IE5VTEwpCisJ CWZpbGVuYW1lICs9IDg7CisKKwlyZXR1cm4gZmlsZW5hbWU7Cit9CisKIC8qCiAgKiBMb2FkIHRo ZSBzcGVjaWZpZWQgZHluYW1pYy1saW5rIGxpYnJhcnkgZmlsZSwgYW5kIGxvb2sgZm9yIGEgZnVu Y3Rpb24KICAqIG5hbWVkIGZ1bmNuYW1lIGluIGl0LgpAQCAtMTAwLDE5ICsxMjMsMTIgQEAgbG9h ZF9leHRlcm5hbF9mdW5jdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnVu Y25hbWUsCiAJdm9pZAkgICAqcmV0dmFsOwogCiAJLyoKLQkgKiBGb3IgZXh0ZW5zaW9ucyB3aXRo IGhhcmRjb2RlZCAnJGxpYmRpci8nIGxpYnJhcnkgbmFtZXMsIHdlIHN0cmlwIHRoZQotCSAqIHBy ZWZpeCB0byBhbGxvdyB0aGUgbGlicmFyeSBzZWFyY2ggcGF0aCB0byBiZSB1c2VkLiBUaGlzIGlz IGRvbmUgb25seQotCSAqIGZvciBzaW1wbGUgbmFtZXMgKGUuZy4sICIkbGliZGlyL2ZvbyIpLCBu b3QgZm9yIG5lc3RlZCBwYXRocyAoZS5nLiwKLQkgKiAiJGxpYmRpci9mb28vYmFyIikuCi0JICoK LQkgKiBGb3IgbmVzdGVkIHBhdGhzLCAnZXhwYW5kX2R5bmFtaWNfbGlicmFyeV9uYW1lJyBkaXJl Y3RseSBleHBhbmRzIHRoZQotCSAqICckbGliZGlyJyBtYWNybywgc28gd2UgbGVhdmUgdGhlbSB1 bnRvdWNoZWQuCisJICogRXh0ZW5zaW9ucyB0eXBpY2FsbHkgaGFyZGNvZGUgYSAnJGxpYmRpci8n IHByZWZpeCBpbiB0aGVpciBsaWJyYXJ5CisJICogbmFtZXMgKHZpYSBNT0RVTEVfUEFUSE5BTUUg aW4gdGhlaXIgU1FMIHNjcmlwdHMpLiAgU3RyaXAgaXQgc28gdGhhdCB0aGUKKwkgKiBsaWJyYXJ5 IHNlYXJjaCBwYXRoIGNhbiBiZSB1c2VkLCB3aGljaCBpcyB3aGF0IG1ha2VzIGV4dGVuc2lvbnMg Zm91bmQKKwkgKiB2aWEgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aCB3b3JrLiAgU2VlIHN0cmlwX2xp YmRpcl9wcmVmaXgoKS4KIAkgKi8KLQlpZiAoc3RybmNtcChmaWxlbmFtZSwgIiRsaWJkaXIvIiwg OCkgPT0gMCkKLQl7Ci0JCWlmIChmaXJzdF9kaXJfc2VwYXJhdG9yKGZpbGVuYW1lICsgOCkgPT0g TlVMTCkKLQkJCWZpbGVuYW1lICs9IDg7Ci0JfQorCWZpbGVuYW1lID0gc3RyaXBfbGliZGlyX3By ZWZpeChmaWxlbmFtZSk7CiAKIAkvKiBFeHBhbmQgdGhlIHBvc3NpYmx5LWFiYnJldmlhdGVkIGZp bGVuYW1lIHRvIGFuIGV4YWN0IHBhdGggbmFtZSAqLwogCWZ1bGxuYW1lID0gZXhwYW5kX2R5bmFt aWNfbGlicmFyeV9uYW1lKGZpbGVuYW1lKTsKQEAgLTE1NCw2ICsxNzAsMTggQEAgbG9hZF9maWxl KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBib29sIHJlc3RyaWN0ZWQpCiAJaWYgKHJlc3RyaWN0ZWQp CiAJCWNoZWNrX3Jlc3RyaWN0ZWRfbGlicmFyeV9uYW1lKGZpbGVuYW1lKTsKIAorCS8qCisJICog V2hlbiBhIExPQUQgY29tZXMgZnJvbSB3aXRoaW4gYW4gZXh0ZW5zaW9uIHNjcmlwdCAoZS5nLiwg YSBoYXJkY29kZWQKKwkgKiAiTE9BRCAnJGxpYmRpci9mb28nIiBpbiB0aGUgc2NyaXB0KSwgc3Ry aXAgdGhlICckbGliZGlyLycgcHJlZml4IGp1c3QgYXMKKwkgKiB3ZSBkbyBmb3IgYW4gZXh0ZW5z aW9uJ3MgZnVuY3Rpb25zLCBzbyB0aGF0IGV4dGVuc2lvbnMgZm91bmQgdmlhCisJICogZXh0ZW5z aW9uX2NvbnRyb2xfcGF0aCBjYW4gYmUgbG9hZGVkLiAgQSBMT0FEIGlzc3VlZCBkaXJlY3RseSBi eSBhIHVzZXIKKwkgKiBpcyBsZWZ0IHVudG91Y2hlZCwgc28gdGhhdCBhbiBleHBsaWNpdCAnJGxp YmRpci8nIHByZWZpeCBrZWVwcyByZWZlcnJpbmcKKwkgKiB0byB0aGUgcGFja2FnZSBsaWJyYXJ5 IGRpcmVjdG9yeS4gIFRoZSBzdHJpcCBpcyBkb25lIGFmdGVyIHRoZSBzZWN1cml0eQorCSAqIGNo ZWNrIHNvIHRoYXQgdGhlIGxhdHRlciBzdGlsbCBzZWVzIHRoZSBvcmlnaW5hbCBuYW1lLgorCSAq LworCWlmIChjcmVhdGluZ19leHRlbnNpb24pCisJCWZpbGVuYW1lID0gc3RyaXBfbGliZGlyX3By ZWZpeChmaWxlbmFtZSk7CisKIAkvKiBFeHBhbmQgdGhlIHBvc3NpYmx5LWFiYnJldmlhdGVkIGZp bGVuYW1lIHRvIGFuIGV4YWN0IHBhdGggbmFtZSAqLwogCWZ1bGxuYW1lID0gZXhwYW5kX2R5bmFt aWNfbGlicmFyeV9uYW1lKGZpbGVuYW1lKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2V4dGVuc2lvbnMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5z aW9ucy9NYWtlZmlsZQppbmRleCBkMWIwYjgxZTVmZC4uNGVlNTNkMjAwYzkgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9leHRlbnNpb25zL01ha2VmaWxlCkBAIC0zMyw2ICszMyw5IEBAIERBVEEg PSB0ZXN0X2V4dDEtLTEuMC5zcWwgdGVzdF9leHQyLS0xLjAuc3FsIHRlc3RfZXh0My0tMS4wLnNx bCBcCiBSRUdSRVNTID0gdGVzdF9leHRlbnNpb25zIHRlc3RfZXh0ZGVwZW5kCiBUQVBfVEVTVFMg PSAxCiAKKyMgcmVxdWlyZWQgZm9yIDAwMl9sb2FkX2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwK K2V4cG9ydCBURVNUX0VYVF9MSUIgPSAkKGFic190b3BfYnVpbGRkaXIpL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9leHRlbnNpb25zL3Rlc3RfZXh0JChETFNVRkZJWCkKKwogIyBmb3JjZSBDIGxvY2Fs ZSBmb3Igb3V0cHV0IHN0YWJpbGl0eQogTk9fTE9DQUxFID0gMQogCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9leHRlbnNpb25zL21lc29uLmJ1aWxkCmluZGV4IDJjN2NlYTE4OWUyLi5jYzc1NWEx YjBiOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvbWVzb24u YnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2V4dGVuc2lvbnMvbWVzb24uYnVpbGQK QEAgLTcxLDggKzcxLDEzIEBAIHRlc3RzICs9IHsKICAgICAncmVncmVzc19hcmdzJzogWyctLW5v LWxvY2FsZSddLAogICB9LAogICAndGFwJzogeworICAgICdlbnYnOiB7CisgICAgICAnVEVTVF9F WFRfTElCJzogdGVzdF9leHQuZnVsbF9wYXRoKCksCisgICAgfSwKICAgICAndGVzdHMnOiBbCiAg ICAgICAndC8wMDFfZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC5wbCcsCisgICAgICAndC8wMDJfbG9h ZF9leHRlbnNpb25fY29udHJvbF9wYXRoLnBsJywKICAgICBdLAorICAgICdkZXBzJzogW3Rlc3Rf ZXh0XSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9leHRlbnNp b25zL3QvMDAyX2xvYWRfZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9leHRlbnNpb25zL3QvMDAyX2xvYWRfZXh0ZW5zaW9uX2NvbnRyb2xfcGF0aC5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTA1ODRiZTRjMmEKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZXh0ZW5zaW9ucy90LzAwMl9sb2Fk X2V4dGVuc2lvbl9jb250cm9sX3BhdGgucGwKQEAgLTAsMCArMSwxMTEgQEAKKyMgQ29weXJpZ2h0 IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3Qg dGhhdCBhIExPQUQgY29tbWFuZCB3aXRoIGEgaGFyZGNvZGVkICckbGliZGlyLycgcHJlZml4IGlz c3VlZCBmcm9tCisjIHdpdGhpbiBhbiBleHRlbnNpb24gc2NyaXB0IGhvbm9ycyB0aGUgbGlicmFy eSBzZWFyY2ggcGF0aCwgc28gdGhhdAorIyBleHRlbnNpb25zIGxvY2F0ZWQgdmlhIGV4dGVuc2lv bl9jb250cm9sX3BhdGggY2FuIGJlIGxvYWRlZC4gIFRoaXMgbWlycm9ycworIyB3aGF0IGUuZy4g UG9zdEdJUyBkb2VzIGluIGl0cyB1cGdyYWRlIHNjcmlwdHMgKCJMT0FEICckbGliZGlyL3Bvc3Rn aXMtMyciKS4KKyMKKyMgQSBMT0FEIGlzc3VlZCBkaXJlY3RseSBieSBhIHVzZXIgbXVzdCBrZWVw IHRoZSBsaXRlcmFsICckbGliZGlyLycgcHJlZml4IGFuZAorIyBpcyB0aGVyZWZvcmUgbm90IGFm ZmVjdGVkIChzZWUgY29tbWl0IGY3NzdkNzczODc4IC8gYnVnICMxODkyMCkuCisKK3VzZSBzdHJp Y3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgRmlsZTo6Q29weTsKK3VzZSBG aWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIE1ha2Ugc3Vy ZSB0aGUgdGVzdF9leHQgc2hhcmVkIGxpYnJhcnkgcGF0aCBpcyBwcm92aWRlZC4KK215ICRleHRf bGliX3NvID0gJEVOVntURVNUX0VYVF9MSUJ9CisgIG9yIGRpZSAiY291bGRuJ3QgZ2V0IHRoZSB0 ZXN0X2V4dCBzaGFyZWQgbGlicmFyeSBwYXRoIjsKKworbXkgJGV4dF9uYW1lID0gInRlc3RfZXh0 IjsKKworIyBDcmVhdGUgdGhlIGN1c3RvbSBleHRlbnNpb24gZGlyZWN0b3J5IGxheW91dDoKKyMg ICAkZXh0X2Rpci9leHRlbnNpb24vICAtLSAuY29udHJvbCBhbmQgLnNxbCBmaWxlcworIyAgICRl eHRfZGlyL2xpYi8gICAgICAgIC0tIC5zbyBmaWxlCitteSAkZXh0X2RpciA9IFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyKCk7Citta3BhdGgoIiRleHRfZGlyL2V4dGVuc2lvbiIpOwor bWtwYXRoKCIkZXh0X2Rpci9saWIiKTsKK215ICRleHRfbGliID0gIiRleHRfZGlyL2xpYiI7CisK KyMgQ29weSB0aGUgLnNvIGZpbGUgaW50byB0aGUgbGliLyBzdWJkaXJlY3RvcnkuCitjb3B5KCRl eHRfbGliX3NvLCAkZXh0X2xpYikKKyAgb3IgZGllICJjb3VsZCBub3QgY29weSAnJGV4dF9saWJf c28nIHRvICckZXh0X2xpYic6ICQhIjsKKworY3JlYXRlX2V4dGVuc2lvbl9maWxlcygkZXh0X25h bWUsICRleHRfZGlyKTsKKworbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ25vZGUnKTsKKyRub2RlLT5pbml0OworCisjIFVzZSB0aGUgY29ycmVjdCBzZXBhcmF0b3Ig YW5kIGVzY2FwZSAnXCcgd2hlbiBydW5uaW5nIG9uIFdpbmRvd3MuCitteSAkc2VwID0gJHdpbmRv d3Nfb3MgPyAiOyIgOiAiOiI7CitteSAkZXh0X3BhdGggPSAkd2luZG93c19vcyA/ICgkZXh0X2Rp ciA9fiBzL1xcL1xcXFwvZ3IpIDogJGV4dF9kaXI7CitteSAkZXh0X2xpYl9wYXRoID0gJHdpbmRv d3Nfb3MgPyAoJGV4dF9saWIgPX4gcy9cXC9cXFxcL2dyKSA6ICRleHRfbGliOworCisjIENvbmZp Z3VyZSBleHRlbnNpb25fY29udHJvbF9wYXRoIHNvIHRoZSAuY29udHJvbCBmaWxlIGlzIGZvdW5k IGluIG91cgorIyBleHRlbnNpb24vIGRpcmVjdG9yeSwgYW5kIGR5bmFtaWNfbGlicmFyeV9wYXRo IHNvIHRoZSAuc28gaXMgZm91bmQgaW4gbGliLy4KKyRub2RlLT5hcHBlbmRfY29uZigKKwkncG9z dGdyZXNxbC5jb25mJywgcXEoCitleHRlbnNpb25fY29udHJvbF9wYXRoID0gJ1wkc3lzdGVtJHNl cCRleHRfcGF0aCcKK2R5bmFtaWNfbGlicmFyeV9wYXRoID0gJ1wkbGliZGlyJHNlcCRleHRfbGli X3BhdGgnCispKTsKKworJG5vZGUtPnN0YXJ0OworCisjIENSRUFURSBFWFRFTlNJT04gcnVucyB0 aGUgc2NyaXB0LCB3aGljaCBjb250YWlucyBhIGhhcmRjb2RlZAorIyAiTE9BRCAnXCRsaWJkaXIv dGVzdF9leHQnIi4gIEJlZm9yZSB0aGUgZml4IHRoaXMgZmFpbGVkIGJlY2F1c2UgdGhlCisjICdc JGxpYmRpci8nIHByZWZpeCB3YXMgbm90IHN0cmlwcGVkIGZvciBMT0FELCBzbyB0aGUgbGlicmFy eSBzZWFyY2ggcGF0aAorIyAoYW5kIHRodXMgdGhlIGN1c3RvbSBsaWIvIGRpcmVjdG9yeSkgd2Fz IG5ldmVyIGNvbnN1bHRlZC4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBF WFRFTlNJT04gJGV4dF9uYW1lIik7CisKKyMgVGhlIGZ1bmN0aW9uIGFkZGVkIGJ5IHRoZSBleHRl bnNpb24gZXhlcmNpc2VzIHRoZSBmdW5jdGlvbi1sb2FkIHBhdGgsIHdoaWNoCisjIGFscmVhZHkg c3RyaXBwZWQgJyRsaWJkaXIvJy4KK215ICgkY29kZSwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9k ZS0+cHNxbCgncG9zdGdyZXMnLCAnU0VMRUNUIHRlc3RfZXh0KCknKTsKK2lzKCRjb2RlLCAwLCAn ZXh0ZW5zaW9uIGZ1bmN0aW9uIHdvcmtzJyk7CitsaWtlKCRzdGRlcnIsIHFyL05PVElDRTogIHJ1 bm5pbmcgc3VjY2Vzc2Z1bC8sICdleHRlbnNpb24gZnVuY3Rpb24gbG9hZGVkJyk7CisKKyMgQSBM T0FEIGlzc3VlZCBkaXJlY3RseSBieSBhIHVzZXIgKG91dHNpZGUgYW55IGV4dGVuc2lvbiBzY3Jp cHQpIG11c3Qga2VlcAorIyB0aGUgbGl0ZXJhbCAnJGxpYmRpci8nIHByZWZpeCwgc28gaXQgcmVz b2x2ZXMgdG8gdGhlIHBhY2thZ2UgbGlicmFyeQorIyBkaXJlY3RvcnkgYW5kIGRvZXMgbm90IGZp bmQgdGhlIGxpYnJhcnkgaW5zdGFsbGVkIGluIG91ciBjdXN0b20gbGliLyBkaXIuCisoJGNvZGUs ICRzdGRvdXQsICRzdGRlcnIpID0KKyAgJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgIkxPQUQgJ1wk bGliZGlyLyRleHRfbmFtZSciKTsKK2lzbnQoJGNvZGUsIDAsICdkaXJlY3QgTE9BRCB3aXRoICRs aWJkaXIgcHJlZml4IGlzIG5vdCByZWRpcmVjdGVkIHRvIHRoZSBwYXRoJyk7CitsaWtlKAorCSRz dGRlcnIsCisJcXJ7Y291bGQgbm90IGFjY2VzcyBmaWxlICJcJGxpYmRpci8kZXh0X25hbWUifSwK KwknZGlyZWN0IExPQUQga2VlcHMgdGhlIGxpdGVyYWwgJGxpYmRpciBwcmVmaXgnKTsKKworJG5v ZGUtPnN0b3A7CisKKyMgV3JpdGUgLmNvbnRyb2wgYW5kIC5zcWwgZmlsZXMgaW50byAkZXh0X2Rp ci9leHRlbnNpb24vLgorIyBUaGUgc2NyaXB0IHVzZXMgYSBoYXJkY29kZWQgIkxPQUQgJyRsaWJk aXIvLi4uJyIgYW5kIGEgJyRsaWJkaXIvJyBwcmVmaXhlZAorIyBtb2R1bGVfcGF0aG5hbWUgdG8g cmVwcm9kdWNlIHdoYXQgbW9zdCBleHRlbnNpb25zIGRvIGJ5IGRlZmF1bHQuCitzdWIgY3JlYXRl X2V4dGVuc2lvbl9maWxlcworeworCW15ICgkZXh0X25hbWUsICRleHRfZGlyKSA9IEBfOworCisJ b3BlbiBteSAkY2YsICc+JywgIiRleHRfZGlyL2V4dGVuc2lvbi8kZXh0X25hbWUuY29udHJvbCIK KwkgIG9yIGRpZSAiY291bGQgbm90IGNyZWF0ZSBjb250cm9sIGZpbGU6ICQhIjsKKwlwcmludCAk Y2YgImNvbW1lbnQgPSAnVGVzdCBDIGV4dGVuc2lvbiBmb3IgZXh0ZW5zaW9uX2NvbnRyb2xfcGF0 aCArIExPQUQnXG4iOworCXByaW50ICRjZiAiZGVmYXVsdF92ZXJzaW9uID0gJzEuMCdcbiI7CisJ cHJpbnQgJGNmICJtb2R1bGVfcGF0aG5hbWUgPSAnXCRsaWJkaXIvJGV4dF9uYW1lJ1xuIjsKKwlw cmludCAkY2YgInJlbG9jYXRhYmxlID0gdHJ1ZVxuIjsKKwljbG9zZSAkY2Y7CisKKwlvcGVuIG15 ICRzcWxmLCAnPicsICIkZXh0X2Rpci9leHRlbnNpb24vJGV4dF9uYW1lLS0xLjAuc3FsIgorCSAg b3IgZGllICJjb3VsZCBub3QgY3JlYXRlIFNRTCBmaWxlOiAkISI7CisJcHJpbnQgJHNxbGYgIi8q ICRleHRfbmFtZS0tMS4wLnNxbCAqL1xuIjsKKwlwcmludCAkc3FsZgorCSAgIi0tIGNvbXBsYWlu IGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhU RU5TSU9OXG4iOworCXByaW50ICRzcWxmCisJICBxcSdcXGVjaG8gVXNlICJDUkVBVEUgRVhURU5T SU9OICRleHRfbmFtZSIgdG8gbG9hZCB0aGlzIGZpbGUuIFxccXVpdFxuJzsKKwlwcmludCAkc3Fs ZiAiTE9BRCAnXCRsaWJkaXIvJGV4dF9uYW1lJztcbiI7CisJcHJpbnQgJHNxbGYgIkNSRUFURSBG VU5DVElPTiB0ZXN0X2V4dCgpXG4iOworCXByaW50ICRzcWxmICJSRVRVUk5TIHZvaWQgQVMgJ01P RFVMRV9QQVRITkFNRSdcbiI7CisJcHJpbnQgJHNxbGYgIkxBTkdVQUdFIEM7XG4iOworCWNsb3Nl ICRzcWxmOworfQorCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTQuMAoK --0000000000003b6d1e0654fcc33c--