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 1wynnO-003dP6-32 for pgsql-hackers@arkaria.postgresql.org; Tue, 25 Aug 2026 09:50:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wynnN-0078O5-2s for pgsql-hackers@arkaria.postgresql.org; Tue, 25 Aug 2026 09:50:17 +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.96) (envelope-from ) id 1wynnM-0078Nx-21 for pgsql-hackers@lists.postgresql.org; Tue, 25 Aug 2026 09:50:17 +0000 Received: from fout-b7-smtp.messagingengine.com ([202.12.124.150]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wynnK-00000002KBQ-03aw for pgsql-hackers@lists.postgresql.org; Tue, 25 Aug 2026 09:50:15 +0000 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.stl.internal (Postfix) with ESMTP id B87941D00190; Tue, 25 Aug 2026 05:50:12 -0400 (EDT) Received: from phl-imap-02 ([10.202.2.81]) by phl-compute-02.internal (MEProxy); Tue, 25 Aug 2026 05:50:12 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burd.me; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm3; t=1787651412; x=1787737812; bh=IX7G6lNQVO RaDYjHhIVq4HH4J1DHZ8F25qDzA4G/eXY=; b=gHxTD0MW8x/zRulSANfk9pZHPZ A2zygdv+0wddcZb5BRSSDO9wtibAA4HbHV0TCO0Xi6uBqai15tUn+yFtOakK3Zfj f/fOhli4umcqWcSBi3KXyyifIbeTZO6YaG3sOMRbemCfeneTdZGtTgrmkK+C9o7o S9uGa0PQc3TH7qnTsXFZx+1FMB3xY2oxQsdFiFO4ehqcLu6oxcf+wpRxcxcWVL8/ t08a8KBgpEUbpRLZym7+y6MdT/vk35SDaG/Z1kI4dkCrl3Br3OPfvfmAIN+sglZT MJTaTvp9nz+KazN3pAzYahEujwPPGTekqv5dGrNezMST+92j6dxgIQYzim4Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1787651412; x=1787737812; bh=IX7G6lNQVORaDYjHhIVq4HH4J1DHZ8F25qD zA4G/eXY=; b=e1WFBUipvcbgJv80PVuIKWFffuj0vv0x8EczuyPPPGSpERJlI0L z0ilMizOJvQPoLYkGiYunAEjsgUvqpptBrqakCrhyWolDG/ByiLsLopcMgvr/in+ 3DjPJ0HnrCksrT/tJGeymVGTxrtsTshpheDwBknthP4AbgHZgUicZ9jpiH9tFh4d tWute+uRQyoH9OJaaZaHo7IHG8N1fXgoZnMo1v5J4DdMnqlVqiFuUv8CUpolfOr4 Kv3RnNiAvZxPGhJ4f/dqvY3c//szfBWH4mmExw7S2tbJf4kffw+W7qnj/wV2OIRR 6RtVvMRs+1lBq6InExvhht/s46Gn40LqG0w== X-ME-Sender: X-ME-Proxy-Cause: dmFkZTFvqdW9HoY9ZWXYUgpVpnQHoRMVWJB5m9f3CmvMsJtsx51LWEPxTLLwFubBRp+I3Y htUkaM+NUjpGle9uTpSa8RxP5yfhoSuG3wHdHyBTenKhga3GaKUpl724P/lSWt+mo7sXHE Uv1TKMzqJuKEODgYxUqwziYZVzAFAjqJNWyrzOEToekbCOFkG0zsLUYiQ985TwYXFZU74W p6dQjTgNklNRDiGojxP4WSIh6kqVmAMDOvNpFuR+O2LDqhIceE60pc6zGlTI5IdBNYIws5 tmgQq5x2pyb50JDmpwyc0CDASli7wYhldPvSFS0d7dhA86tcBZVsYAiDNZtOppjwYcndYE 8CbiUvgrAkaK5aGHCg4leQWx+FmrQD1wpDKsSgSFvhXHeADisyMz9m5QpgVlrXQfILNsP1 RmmfMAp1tCkLIh6mfHaPS/BnN08AiByFzFdC87aZm+2iySPM9CS6l6emETxMrUWU5djhYE xmW4G7rAbuzmfVakRt8wHUWHzftg7pKy5EGE0dbf9P1xccuYbx/Z3oWe4MSSGclGujVU5D j5X0HdyHi4TN4TfvD2m57XuU5TgQ/KRLjd9Z74xA66azHWX0nNMztEO+NUyKqV58G7mOPH 4Y0+p6Zl8HO6dkQgFHjuHZd0Mzdk+KP+Qzby3sNmWapwpkCDO9RduhtArQ8w X-ME-Proxy: Feedback-ID: i675e48f3:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 615F270006A; Tue, 25 Aug 2026 05:50:12 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AV2wn8fFq74R Date: Tue, 25 Aug 2026 05:49:44 -0400 From: "Greg Burd" To: "Tristan Partin" Cc: "PostgreSQL Hackers" Message-Id: <7ee22a5d-3776-49d5-8309-98097ffb88b1@app.fastmail.com> In-Reply-To: References: Subject: Re: Add a Nix flake Content-Type: multipart/mixed; boundary=7b1e1bceebcb375c9d5ad4c3df9769a494e20c6d List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --7b1e1bceebcb375c9d5ad4c3df9769a494e20c6d Content-Type: text/plain Content-Transfer-Encoding: 7bit On Mon Aug 24, 2026 at 2:39 PM CDT, Tristan Partin wrote: > +1 Thanks Tristan, glad to have another Nix user weigh in. >> A single blessed flake in the tree gives everyone the same reproducible >> starting point [...] > > I am one of the people that has a private copy. I've also been working > on a NixOS-based buildfarm client that includes a derivation for the > buildfarm-client code. That's cool, let's make sure this and that somehow knit up into something useful. Do you want to share it on this thread or start another one? >> One deliberate omission: there is no flake.lock. > > I think the lack of flake.lock makes sense. I would add it to the > .gitignore. Additionally, I would also add `/result` and `/result-*` to > the .gitignore. Done. Added a small "Nix (see flake.nix)" block to the root .gitignore covering /flake.lock, /result, and /result-*. Root-anchored so we don't accidentally ignore a result/ somewhere in the tree. >> To use it you'll need to be in a Nix environment. This means a Nix-based >> OS like NixOS or the macOS/Windows layers [...] > > Can be Linux as well! For instance, I am using Nix on Fedora, which is > available in the Fedora system repositories. Good correction, you're right, and it's an important one. Nix runs anywhere the package manager is installed; it doesn't require NixOS. I'll fix that wording in the commit-message/docs framing rather than the code, since the flake itself is already OS-agnostic and useful in all these locations. As it happens I use Nix on Fedora on one host, Nix on BSD on another, NixOS on a separate host and I'm also working to Nix-ify Illumos [1]. >> Flip any single feature (26 toggles) without a preset: >> nix build --expr '(builtins.getFlake (toString ./.)).packages...' > > I didn't know that this was a thing. What a mouthful! Agreed, it is. It's the escape hatch, not the ergonomic path, most people will want a preset or their own thin wrapper flake with `.override { ... }`. I included it only to show the full toggle surface is reachable without editing the file. I'm also sure there are ways to add simplified common config into the flake but I was starting off with something very bland/effective and hopefully not overly opinionated to gain buy-in. > I think this will also have side benefits of making things easier to > test. For instance, we could start inlining buildfarm client members > configurations as derivations in this repository. [...] Additionally, I > wonder if NixOS VM tests could expose new ways to do automated testing of > Postgres. Both are appealing, and I think they're the real long-term payoff, a derivation library of animal configs under version control, and NixOS VM tests for things that are painful to exercise otherwise (replication topologies, systemd integration, upgrade paths). I'd like to keep v1 to just the flake so it's easy to review and agree on, then build those out as separate patches on top. Happy to collaborate! > Regarding the code, can you explain the reasoning for the packages list > in the development shell? It seems like everything in the list is > already included by the Postgres package. You're right, and thank you, that list was mostly redundant. `inputsFrom = [ postgresql ]` already pulls in the package's nativeBuildInputs and buildInputs, so meson, ninja, bison, flex, perl, python3, tcl, and libxslt were all being listed twice. I've trimmed the devShell down to only what the package does *not* provide: - ccache (a dev convenience, not a build input), and - docbook_xml_dtd_45 + docbook-xsl-nons (the DocBook toolchain, since docs are off in the default package build, so `nix develop` can build docs without a separate override). Verified the trimmed shell still exposes meson/ninja/perl/python3/tcl/libxslt via inputsFrom, so nothing was actually lost. Will include that in v2. Thanks again for the careful read. best. -greg --7b1e1bceebcb375c9d5ad4c3df9769a494e20c6d Content-Disposition: attachment; filename*0="v2-0001-Add-a-Nix-flake-for-reproducible-builds-and-dev-s.pat"; filename*1="ch" Content-Type: text/x-patch; name="=?UTF-8?Q?v2-0001-Add-a-Nix-flake-for-reproducible-builds-and-dev-s.patc?= =?UTF-8?Q?h?=" Content-Transfer-Encoding: base64 RnJvbSAwZTg1MWRhODY5MGU1N2NmZjYyZTc5ZTA3MjJlYmI1ZjJkNTA4NmUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGF0ZTog TW9uLCAyNCBBdWcgMjAyNiAxMjo1MzoxMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIEFk ZCBhIE5peCBmbGFrZSBmb3IgcmVwcm9kdWNpYmxlIGJ1aWxkcyBhbmQgZGV2IHNoZWxscwoK UHJvdmlkZSBhIGZsYWtlLm5peCBhdCB0aGUgcmVwb3NpdG9yeSByb290IHNvIGNvbnRyaWJ1 dG9ycyBvbiBOaXgtYmFzZWQKc3lzdGVtcyAoTGludXgsIG1hY09TLCBhbmQgaW5jcmVhc2lu Z2x5IEJTRCBhbmQgaWxsdW1vcykgZ2V0IGEgc2luZ2xlLAppbi10cmVlIHN0YXJ0aW5nIHBv aW50IGluc3RlYWQgb2YgbWFpbnRhaW5pbmcgcHJpdmF0ZSwgZHJpZnRpbmcgY29waWVzLgoK SXQgZG9lc24ndCBhZGQgYSBidWlsZCBzeXN0ZW06IGBuaXggZGV2ZWxvcGAgZHJvcHMgeW91 IGludG8gYSBzaGVsbCB3aXRoCmJpc29uLCBmbGV4LCBwZXJsLCB0aGUgb3B0aW9uYWwgbGli cmFyaWVzLCBhbmQgdGhlIGRvY3MgdG9vbGNoYWluIG9uIFBBVEgsCndoZXJlIGBtZXNvbiBz ZXR1cGAgKHRoZSBkZWZhdWx0KSBvciBgLi9jb25maWd1cmVgIGp1c3Qgd29ya3M7IGBuaXgg YnVpbGRgCnByb2R1Y2VzIGEgc2VydmVyLgoKRXZlcnkgb3B0aW9uYWwgY29uZmlndXJlL01l c29uIGZlYXR1cmUgaXMgYSBib29sZWFuIHRvZ2dsZSB3aXRoCnBsYXRmb3JtLWFwcHJvcHJp YXRlIGRlZmF1bHRzIChpb191cmluZywgbGlibnVtYSwgc3lzdGVtZCwgUEFNIG9uIExpbnV4 OwpCb25qb3VyIG9uIG1hY09TKSwgc28gaXQgaXMgYSBzdGFydGluZyBwb2ludCwgbm90IGEg cG9saWN5LiBQcmVzZXRzIGNvdmVyCmRlYnVnLCBtaW5pbWFsLCBhbmQgYXV0b2NvbmYgYnVp bGRzLgoKTm8gZmxha2UubG9jayBpcyBjb21taXR0ZWQgb24gcHVycG9zZTogcGlubmluZyBu aXhwa2dzIHdvdWxkIGZyZWV6ZQpjb250cmlidXRvcnMgdG8gb25lIGRlcGVuZGVuY3kgc25h cHNob3QgYW5kIGFkZCBhIGZpbGUgdGhhdCBnb2VzIHN0YWxlIGluCnRoZSB0cmVlLiBUaGUg Zmxha2UgaW5zdGVhZCB0cmFja3Mgd2hhdGV2ZXIgbml4cGtncyB0aGUgZGV2ZWxvcGVyIGFs cmVhZHkKcnVuczsgYW55b25lIG5lZWRpbmcgcmVwcm9kdWNpYmlsaXR5IGNhbiBnZW5lcmF0 ZSBhIGxvY2sgbG9jYWxseS4KLS0tCiAuZ2l0aWdub3JlIHwgICA1ICsrCiBmbGFrZS5uaXgg IHwgMjU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI2MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZmxha2Uubml4CgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25v cmUKaW5kZXggNGU5MTEzOTVmZTMuLmU0NjAwM2NhMDUxIDEwMDY0NAotLS0gYS8uZ2l0aWdu b3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTQzLDMgKzQzLDggQEAgbGliKi5wYwogL1JlbGVh c2UvCiAvdG1wX2luc3RhbGwvCiAvcG9ydGxvY2svCisKKyMgTml4IChzZWUgZmxha2Uubml4 KQorL2ZsYWtlLmxvY2sKKy9yZXN1bHQKKy9yZXN1bHQtKgpkaWZmIC0tZ2l0IGEvZmxha2Uu bml4IGIvZmxha2Uubml4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li43YzExM2NkZWRjOAotLS0gL2Rldi9udWxsCisrKyBiL2ZsYWtlLm5peApAQCAtMCwwICsx LDI1NyBAQAoreworICBkZXNjcmlwdGlvbiA9ICJQb3N0Z3JlU1FMLCBidWlsdCBmcm9tIHRo aXMgc291cmNlIHRyZWUiOworCisgIGlucHV0cy5uaXhwa2dzLnVybCA9ICJnaXRodWI6Tml4 T1Mvbml4cGtncy9uaXhvcy11bnN0YWJsZSI7CisKKyAgb3V0cHV0cyA9CisgICAgeyBzZWxm LCBuaXhwa2dzIH06CisgICAgbGV0CisgICAgICBzeXN0ZW1zID0gWworICAgICAgICAieDg2 XzY0LWxpbnV4IgorICAgICAgICAiYWFyY2g2NC1saW51eCIKKyAgICAgICAgIng4Nl82NC1k YXJ3aW4iCisgICAgICAgICJhYXJjaDY0LWRhcndpbiIKKyAgICAgIF07CisgICAgICBmb3JB bGxTeXN0ZW1zID0gZjogbml4cGtncy5saWIuZ2VuQXR0cnMgc3lzdGVtcyAoc3lzdGVtOiBm IG5peHBrZ3MubGVnYWN5UGFja2FnZXMuJHtzeXN0ZW19KTsKKworICAgICAgIyBBIHNpbmds ZSBidWlsZGVyIGNvdmVyaW5nIGV2ZXJ5IG9wdGlvbmFsIGZlYXR1cmUgLi9jb25maWd1cmUg YW5kCisgICAgICAjIG1lc29uIGV4cG9zZS4gRWFjaCBmZWF0dXJlIGlzIGEgYm9vbGVhbiB0 b2dnbGUgd2lyZWQgdG8gaXRzCisgICAgICAjIGJ1aWxkSW5wdXQgKyBmbGFnOyBmbGlwIGFu eSBvZiB0aGVtIHZpYSAub3ZlcnJpZGUgeyAuLi4gfS4KKyAgICAgICMgUGxhdGZvcm0tc3Bl Y2lmaWMgZmVhdHVyZXMgZGVmYXVsdCB0byB0aGVpciBhdmFpbGFiaWxpdHkuCisgICAgICBw b3N0Z3Jlc3FsRm9yID0KKyAgICAgICAgcGtnczoKKyAgICAgICAgbGV0CisgICAgICAgICAg aW5oZXJpdCAocGtncykgbGliIHN0ZGVudjsKKyAgICAgICAgICBvbkxpbnV4ID0gc3RkZW52 Lmhvc3RQbGF0Zm9ybS5pc0xpbnV4OworICAgICAgICAgIG9uRGFyd2luID0gc3RkZW52Lmhv c3RQbGF0Zm9ybS5pc0RhcndpbjsKKyAgICAgICAgaW4KKyAgICAgICAgbGliLm1ha2VPdmVy cmlkYWJsZSAoCisgICAgICAgICAgeworICAgICAgICAgICAgIyBCdWlsZCBzeXN0ZW06ICJt ZXNvbiIgKG5pbmphKSBvciAiYXV0b2NvbmYiIChjb25maWd1cmUvbWFrZSkuCisgICAgICAg ICAgICAjIE1lc29uIGlzIHRoZSBkZWZhdWx0OyBpdCBpcyB0aGUgcHJvamVjdCdzIGV2ZW50 dWFsIHNvbGUgYnVpbGQgc3lzdGVtLgorICAgICAgICAgICAgYnVpbGRTeXN0ZW0gPyAibWVz b24iLAorCisgICAgICAgICAgICAjIE9wdGlvbmFsIGxpYnJhcnkgZmVhdHVyZXMgKGJ1aWxk SW5wdXQgKyBmbGFnKS4KKyAgICAgICAgICAgIGljdVN1cHBvcnQgPyB0cnVlLAorICAgICAg ICAgICAgcmVhZGxpbmVTdXBwb3J0ID8gdHJ1ZSwKKyAgICAgICAgICAgIHpsaWJTdXBwb3J0 ID8gdHJ1ZSwKKyAgICAgICAgICAgIG9wZW5zc2xTdXBwb3J0ID8gdHJ1ZSwKKyAgICAgICAg ICAgIGxpYnhtbFN1cHBvcnQgPyB0cnVlLAorICAgICAgICAgICAgbGlieHNsdFN1cHBvcnQg PyB0cnVlLAorICAgICAgICAgICAgbHo0U3VwcG9ydCA/IHRydWUsCisgICAgICAgICAgICB6 c3RkU3VwcG9ydCA/IHRydWUsCisgICAgICAgICAgICB1dWlkU3VwcG9ydCA/IHRydWUsCisg ICAgICAgICAgICBjdXJsU3VwcG9ydCA/IHRydWUsCisKKyAgICAgICAgICAgICMgUHJvY2Vk dXJhbCBsYW5ndWFnZXMuCisgICAgICAgICAgICBwZXJsU3VwcG9ydCA/IHRydWUsCisgICAg ICAgICAgICBweXRob25TdXBwb3J0ID8gdHJ1ZSwKKyAgICAgICAgICAgIHRjbFN1cHBvcnQg PyB0cnVlLAorCisgICAgICAgICAgICAjIFBsYXRmb3JtLWdhdGVkIGZlYXR1cmVzLgorICAg ICAgICAgICAgc3lzdGVtZFN1cHBvcnQgPyBvbkxpbnV4LAorICAgICAgICAgICAgc2VsaW51 eFN1cHBvcnQgPyBmYWxzZSwKKyAgICAgICAgICAgIGxpYnVyaW5nU3VwcG9ydCA/IG9uTGlu dXgsCisgICAgICAgICAgICBudW1hU3VwcG9ydCA/IG9uTGludXgsCisgICAgICAgICAgICBn c3NTdXBwb3J0ID8gdHJ1ZSwKKyAgICAgICAgICAgIGxkYXBTdXBwb3J0ID8gZmFsc2UsCisg ICAgICAgICAgICBwYW1TdXBwb3J0ID8gb25MaW51eCwKKyAgICAgICAgICAgIGJvbmpvdXJT dXBwb3J0ID8gb25EYXJ3aW4sCisgICAgICAgICAgICBsbHZtU3VwcG9ydCA/IGZhbHNlLAor CisgICAgICAgICAgICAjIERldmVsb3BlciAvIGJ1aWxkLXNoYXBlIHRvZ2dsZXMgKG5vIGV4 dHJhIGRlcHMpLgorICAgICAgICAgICAgY2Fzc2VydCA/IGZhbHNlLAorICAgICAgICAgICAg ZGVidWdTeW1ib2xzID8gZmFsc2UsCisgICAgICAgICAgICB0YXBUZXN0cyA/IHRydWUsCisg ICAgICAgICAgICBpbmplY3Rpb25Qb2ludHMgPyBmYWxzZSwKKworICAgICAgICAgICAgIyBE b2N1bWVudGF0aW9uIGJ1aWxkIChTR01ML0RvY0Jvb2sgdG9vbGNoYWluKS4KKyAgICAgICAg ICAgIGRvY3MgPyBmYWxzZSwKKyAgICAgICAgICB9OgorICAgICAgICAgIGxldAorICAgICAg ICAgICAgdXNlTWVzb24gPSBidWlsZFN5c3RlbSA9PSAibWVzb24iOworCisgICAgICAgICAg ICAjIGZlYXR1cmUgLT4geyBmbGFnID0gY29uZmlndXJlIGFyZzsgZGVwID0gYnVpbGRJbnB1 dCBvciBudWxsOyB9CisgICAgICAgICAgICBmZWF0dXJlRmxhZyA9IGNvbmQ6IGZsYWc6IGxp Yi5vcHRpb25hbCBjb25kIGZsYWc7CisgICAgICAgICAgICBmZWF0dXJlRGVwID0gY29uZDog ZGVwOiBsaWIub3B0aW9uYWwgY29uZCBkZXA7CisKKyAgICAgICAgICAgIGNvbmZpZ3VyZUZl YXR1cmVzID0gbGliLmZsYXR0ZW4gWworICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgaWN1 U3VwcG9ydCAiLS13aXRoLWljdSIpCisgICAgICAgICAgICAgIChmZWF0dXJlRmxhZyAoIWlj dVN1cHBvcnQpICItLXdpdGhvdXQtaWN1IikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFn ICghcmVhZGxpbmVTdXBwb3J0KSAiLS13aXRob3V0LXJlYWRsaW5lIikKKyAgICAgICAgICAg ICAgKGZlYXR1cmVGbGFnICghemxpYlN1cHBvcnQpICItLXdpdGhvdXQtemxpYiIpCisgICAg ICAgICAgICAgIChmZWF0dXJlRmxhZyBvcGVuc3NsU3VwcG9ydCAiLS13aXRoLXNzbD1vcGVu c3NsIikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIGxpYnhtbFN1cHBvcnQgIi0td2l0 aC1saWJ4bWwiKQorICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgbGlieHNsdFN1cHBvcnQg Ii0td2l0aC1saWJ4c2x0IikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIGx6NFN1cHBv cnQgIi0td2l0aC1sejQiKQorICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgenN0ZFN1cHBv cnQgIi0td2l0aC16c3RkIikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIHV1aWRTdXBw b3J0ICItLXdpdGgtdXVpZD1lMmZzIikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIGN1 cmxTdXBwb3J0ICItLXdpdGgtbGliY3VybCIpCisgICAgICAgICAgICAgIChmZWF0dXJlRmxh ZyBwZXJsU3VwcG9ydCAiLS13aXRoLXBlcmwiKQorICAgICAgICAgICAgICAoZmVhdHVyZUZs YWcgcHl0aG9uU3VwcG9ydCAiLS13aXRoLXB5dGhvbiIpCisgICAgICAgICAgICAgIChmZWF0 dXJlRmxhZyB0Y2xTdXBwb3J0ICItLXdpdGgtdGNsIikKKyAgICAgICAgICAgICAgKGZlYXR1 cmVGbGFnIHN5c3RlbWRTdXBwb3J0ICItLXdpdGgtc3lzdGVtZCIpCisgICAgICAgICAgICAg IChmZWF0dXJlRmxhZyBzZWxpbnV4U3VwcG9ydCAiLS13aXRoLXNlbGludXgiKQorICAgICAg ICAgICAgICAoZmVhdHVyZUZsYWcgbGlidXJpbmdTdXBwb3J0ICItLXdpdGgtbGlidXJpbmci KQorICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgbnVtYVN1cHBvcnQgIi0td2l0aC1saWJu dW1hIikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIGdzc1N1cHBvcnQgIi0td2l0aC1n c3NhcGkiKQorICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgbGRhcFN1cHBvcnQgIi0td2l0 aC1sZGFwIikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIHBhbVN1cHBvcnQgIi0td2l0 aC1wYW0iKQorICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgYm9uam91clN1cHBvcnQgIi0t d2l0aC1ib25qb3VyIikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIGxsdm1TdXBwb3J0 ICItLXdpdGgtbGx2bSIpCisgICAgICAgICAgICAgIChmZWF0dXJlRmxhZyBjYXNzZXJ0ICIt LWVuYWJsZS1jYXNzZXJ0IikKKyAgICAgICAgICAgICAgKGZlYXR1cmVGbGFnIGRlYnVnU3lt Ym9scyAiLS1lbmFibGUtZGVidWciKQorICAgICAgICAgICAgICAoZmVhdHVyZUZsYWcgdGFw VGVzdHMgIi0tZW5hYmxlLXRhcC10ZXN0cyIpCisgICAgICAgICAgICAgIChmZWF0dXJlRmxh ZyBpbmplY3Rpb25Qb2ludHMgIi0tZW5hYmxlLWluamVjdGlvbi1wb2ludHMiKQorICAgICAg ICAgICAgXTsKKworICAgICAgICAgICAgIyBtZXNvbiB1c2VzIC1EZmVhdHVyZT1lbmFibGVk L2Rpc2FibGVkIGluc3RlYWQgb2YgLS13aXRoLSouCisgICAgICAgICAgICBtZXNvbkZlYXR1 cmVzID0gbGliLmZsYXR0ZW4gWworICAgICAgICAgICAgICBbICItRGljdT0ke2lmIGljdVN1 cHBvcnQgdGhlbiAiZW5hYmxlZCIgZWxzZSAiZGlzYWJsZWQifSIgXQorICAgICAgICAgICAg ICBbICItRHJlYWRsaW5lPSR7aWYgcmVhZGxpbmVTdXBwb3J0IHRoZW4gImVuYWJsZWQiIGVs c2UgImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAgICAgWyAiLUR6bGliPSR7aWYgemxpYlN1 cHBvcnQgdGhlbiAiZW5hYmxlZCIgZWxzZSAiZGlzYWJsZWQifSIgXQorICAgICAgICAgICAg ICBbICItRHNzbD0ke2lmIG9wZW5zc2xTdXBwb3J0IHRoZW4gIm9wZW5zc2wiIGVsc2UgIm5v bmUifSIgXQorICAgICAgICAgICAgICBbICItRGxpYnhtbD0ke2lmIGxpYnhtbFN1cHBvcnQg dGhlbiAiZW5hYmxlZCIgZWxzZSAiZGlzYWJsZWQifSIgXQorICAgICAgICAgICAgICBbICIt RGxpYnhzbHQ9JHtpZiBsaWJ4c2x0U3VwcG9ydCB0aGVuICJlbmFibGVkIiBlbHNlICJkaXNh YmxlZCJ9IiBdCisgICAgICAgICAgICAgIFsgIi1EbHo0PSR7aWYgbHo0U3VwcG9ydCB0aGVu ICJlbmFibGVkIiBlbHNlICJkaXNhYmxlZCJ9IiBdCisgICAgICAgICAgICAgIFsgIi1EenN0 ZD0ke2lmIHpzdGRTdXBwb3J0IHRoZW4gImVuYWJsZWQiIGVsc2UgImRpc2FibGVkIn0iIF0K KyAgICAgICAgICAgICAgWyAiLUR1dWlkPSR7aWYgdXVpZFN1cHBvcnQgdGhlbiAiZTJmcyIg ZWxzZSAibm9uZSJ9IiBdCisgICAgICAgICAgICAgIFsgIi1EbGliY3VybD0ke2lmIGN1cmxT dXBwb3J0IHRoZW4gImVuYWJsZWQiIGVsc2UgImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAg ICAgWyAiLURwbHBlcmw9JHtpZiBwZXJsU3VwcG9ydCB0aGVuICJlbmFibGVkIiBlbHNlICJk aXNhYmxlZCJ9IiBdCisgICAgICAgICAgICAgIFsgIi1EcGxweXRob249JHtpZiBweXRob25T dXBwb3J0IHRoZW4gImVuYWJsZWQiIGVsc2UgImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAg ICAgWyAiLURwbHRjbD0ke2lmIHRjbFN1cHBvcnQgdGhlbiAiZW5hYmxlZCIgZWxzZSAiZGlz YWJsZWQifSIgXQorICAgICAgICAgICAgICBbICItRHN5c3RlbWQ9JHtpZiBzeXN0ZW1kU3Vw cG9ydCB0aGVuICJlbmFibGVkIiBlbHNlICJkaXNhYmxlZCJ9IiBdCisgICAgICAgICAgICAg IFsgIi1Ec2VsaW51eD0ke2lmIHNlbGludXhTdXBwb3J0IHRoZW4gImVuYWJsZWQiIGVsc2Ug ImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAgICAgWyAiLURsaWJ1cmluZz0ke2lmIGxpYnVy aW5nU3VwcG9ydCB0aGVuICJlbmFibGVkIiBlbHNlICJkaXNhYmxlZCJ9IiBdCisgICAgICAg ICAgICAgIFsgIi1EbGlibnVtYT0ke2lmIG51bWFTdXBwb3J0IHRoZW4gImVuYWJsZWQiIGVs c2UgImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAgICAgWyAiLURnc3NhcGk9JHtpZiBnc3NT dXBwb3J0IHRoZW4gImVuYWJsZWQiIGVsc2UgImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAg ICAgWyAiLURsZGFwPSR7aWYgbGRhcFN1cHBvcnQgdGhlbiAiZW5hYmxlZCIgZWxzZSAiZGlz YWJsZWQifSIgXQorICAgICAgICAgICAgICBbICItRHBhbT0ke2lmIHBhbVN1cHBvcnQgdGhl biAiZW5hYmxlZCIgZWxzZSAiZGlzYWJsZWQifSIgXQorICAgICAgICAgICAgICBbICItRGJv bmpvdXI9JHtpZiBib25qb3VyU3VwcG9ydCB0aGVuICJlbmFibGVkIiBlbHNlICJkaXNhYmxl ZCJ9IiBdCisgICAgICAgICAgICAgIFsgIi1EbGx2bT0ke2lmIGxsdm1TdXBwb3J0IHRoZW4g ImVuYWJsZWQiIGVsc2UgImRpc2FibGVkIn0iIF0KKyAgICAgICAgICAgICAgWyAiLURjYXNz ZXJ0PSR7bGliLmJvb2xUb1N0cmluZyBjYXNzZXJ0fSIgXQorICAgICAgICAgICAgICBbICIt RHRhcF90ZXN0cz0ke2lmIHRhcFRlc3RzIHRoZW4gImVuYWJsZWQiIGVsc2UgImRpc2FibGVk In0iIF0KKyAgICAgICAgICAgICAgWyAiLURpbmplY3Rpb25fcG9pbnRzPSR7bGliLmJvb2xU b1N0cmluZyBpbmplY3Rpb25Qb2ludHN9IiBdCisgICAgICAgICAgICBdOworCisgICAgICAg ICAgICBidWlsZElucHV0cyA9IGxpYi5mbGF0dGVuICh3aXRoIHBrZ3M7IFsKKyAgICAgICAg ICAgICAgKGZlYXR1cmVEZXAgaWN1U3VwcG9ydCBpY3UpCisgICAgICAgICAgICAgIChmZWF0 dXJlRGVwIHJlYWRsaW5lU3VwcG9ydCByZWFkbGluZSkKKyAgICAgICAgICAgICAgKGZlYXR1 cmVEZXAgemxpYlN1cHBvcnQgemxpYikKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgb3Bl bnNzbFN1cHBvcnQgb3BlbnNzbCkKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgbGlieG1s U3VwcG9ydCBsaWJ4bWwyKQorICAgICAgICAgICAgICAoZmVhdHVyZURlcCBsaWJ4c2x0U3Vw cG9ydCBsaWJ4c2x0KQorICAgICAgICAgICAgICAoZmVhdHVyZURlcCBsejRTdXBwb3J0IGx6 NCkKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgenN0ZFN1cHBvcnQgenN0ZCkKKyAgICAg ICAgICAgICAgKGZlYXR1cmVEZXAgdXVpZFN1cHBvcnQgbGlidXVpZCkKKyAgICAgICAgICAg ICAgKGZlYXR1cmVEZXAgY3VybFN1cHBvcnQgY3VybCkKKyAgICAgICAgICAgICAgKGZlYXR1 cmVEZXAgcGVybFN1cHBvcnQgcGVybCkKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgcHl0 aG9uU3VwcG9ydCBweXRob24zKQorICAgICAgICAgICAgICAoZmVhdHVyZURlcCB0Y2xTdXBw b3J0IHRjbCkKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgc3lzdGVtZFN1cHBvcnQgc3lz dGVtZExpYnMpCisgICAgICAgICAgICAgIChmZWF0dXJlRGVwIHNlbGludXhTdXBwb3J0IGxp YnNlbGludXgpCisgICAgICAgICAgICAgIChmZWF0dXJlRGVwIGxpYnVyaW5nU3VwcG9ydCBs aWJ1cmluZykKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgbnVtYVN1cHBvcnQgbnVtYWN0 bCkKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgZ3NzU3VwcG9ydCBsaWJrcmI1KQorICAg ICAgICAgICAgICAoZmVhdHVyZURlcCBsZGFwU3VwcG9ydCBvcGVubGRhcCkKKyAgICAgICAg ICAgICAgKGZlYXR1cmVEZXAgcGFtU3VwcG9ydCBsaW51eC1wYW0pCisgICAgICAgICAgICAg IChmZWF0dXJlRGVwIGxsdm1TdXBwb3J0IGxsdm1QYWNrYWdlcy5sbHZtKQorICAgICAgICAg ICAgXSk7CisgICAgICAgICAgaW4KKyAgICAgICAgICBzdGRlbnYubWtEZXJpdmF0aW9uIHsK KyAgICAgICAgICAgIHBuYW1lID0gInBvc3RncmVzcWwiOworICAgICAgICAgICAgdmVyc2lv biA9ICIyMGRldmVsIjsKKyAgICAgICAgICAgIHNyYyA9IHNlbGY7CisKKyAgICAgICAgICAg IHN0cmljdERlcHMgPSB0cnVlOworCisgICAgICAgICAgICBuYXRpdmVCdWlsZElucHV0cyA9 IGxpYi5mbGF0dGVuICh3aXRoIHBrZ3M7IFsKKyAgICAgICAgICAgICAgYmlzb24KKyAgICAg ICAgICAgICAgZmxleAorICAgICAgICAgICAgICBwZXJsCisgICAgICAgICAgICAgIHBrZy1j b25maWcKKyAgICAgICAgICAgICAgKGZlYXR1cmVEZXAgdXNlTWVzb24gbWVzb24pCisgICAg ICAgICAgICAgIChmZWF0dXJlRGVwIHVzZU1lc29uIG5pbmphKQorICAgICAgICAgICAgICAo ZmVhdHVyZURlcCBsbHZtU3VwcG9ydCBsbHZtUGFja2FnZXMubGx2bS5kZXYpCisgICAgICAg ICAgICAgIChmZWF0dXJlRGVwIGRvY3MgZG9jYm9vay14c2wtbm9ucykKKyAgICAgICAgICAg ICAgKGZlYXR1cmVEZXAgZG9jcyBkb2Nib29rX3htbF9kdGRfNDUpCisgICAgICAgICAgICAg IChmZWF0dXJlRGVwIGRvY3MgbGlieHNsdCkKKyAgICAgICAgICAgIF0pOworCisgICAgICAg ICAgICBpbmhlcml0IGJ1aWxkSW5wdXRzOworCisgICAgICAgICAgICAjIC0tLS0gYXV0b2Nv bmYgcGF0aCAtLS0tCisgICAgICAgICAgICBjb25maWd1cmVGbGFncyA9IGxpYi5vcHRpb25h bHMgKCF1c2VNZXNvbikgY29uZmlndXJlRmVhdHVyZXM7CisKKyAgICAgICAgICAgICMgLS0t LSBtZXNvbiBwYXRoIC0tLS0KKyAgICAgICAgICAgIG1lc29uQnVpbGRUeXBlID0gInJlbGVh c2UiOworICAgICAgICAgICAgbWVzb25GbGFncyA9IGxpYi5vcHRpb25hbHMgdXNlTWVzb24g bWVzb25GZWF0dXJlczsKKyAgICAgICAgICAgIGRvbnRVc2VNZXNvbkNvbmZpZ3VyZSA9ICF1 c2VNZXNvbjsKKyAgICAgICAgICAgIG1lc29uQXV0b0ZlYXR1cmVzID0gImRpc2FibGVkIjsK KworICAgICAgICAgICAgZW5hYmxlUGFyYWxsZWxCdWlsZGluZyA9IHRydWU7CisgICAgICAg ICAgICBkb0NoZWNrID0gdGFwVGVzdHM7CisKKyAgICAgICAgICAgIG1ldGEgPSB3aXRoIGxp YjsgeworICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJPYmplY3QtcmVsYXRpb25hbCBk YXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSwgYnVpbHQgZnJvbSBzb3VyY2UiOworICAgICAg ICAgICAgICBob21lcGFnZSA9ICJodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy8iOworICAg ICAgICAgICAgICBsaWNlbnNlID0gbGljZW5zZXMucG9zdGdyZXNxbDsKKyAgICAgICAgICAg ICAgcGxhdGZvcm1zID0gcGxhdGZvcm1zLnVuaXg7CisgICAgICAgICAgICAgIG1haW5Qcm9n cmFtID0gInBzcWwiOworICAgICAgICAgICAgfTsKKyAgICAgICAgICB9CisgICAgICAgICkK KyAgICAgICAgeyB9OworICAgIGluCisgICAgeworICAgICAgcGFja2FnZXMgPSBmb3JBbGxT eXN0ZW1zIChwa2dzOiByZWMgeworICAgICAgICBwb3N0Z3Jlc3FsID0gcG9zdGdyZXNxbEZv ciBwa2dzOworICAgICAgICAjIENvbW1vbiBwcmVzZXRzIGJ1aWx0IG9uIHRvcCBvZiB0aGUg ZnVsbHktcGFyYW1ldGVyaXplZCBkZWZhdWx0LgorICAgICAgICBwb3N0Z3Jlc3FsLWF1dG9j b25mID0gcG9zdGdyZXNxbC5vdmVycmlkZSB7IGJ1aWxkU3lzdGVtID0gImF1dG9jb25mIjsg fTsKKyAgICAgICAgcG9zdGdyZXNxbC1kZWJ1ZyA9IHBvc3RncmVzcWwub3ZlcnJpZGUgewor ICAgICAgICAgIGNhc3NlcnQgPSB0cnVlOworICAgICAgICAgIGRlYnVnU3ltYm9scyA9IHRy dWU7CisgICAgICAgICAgaW5qZWN0aW9uUG9pbnRzID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAg ICAgICAgcG9zdGdyZXNxbC1taW5pbWFsID0gcG9zdGdyZXNxbC5vdmVycmlkZSB7CisgICAg ICAgICAgaWN1U3VwcG9ydCA9IGZhbHNlOworICAgICAgICAgIHJlYWRsaW5lU3VwcG9ydCA9 IGZhbHNlOworICAgICAgICAgIHpsaWJTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgb3Bl bnNzbFN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgICBsaWJ4bWxTdXBwb3J0ID0gZmFsc2U7 CisgICAgICAgICAgbGlieHNsdFN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgICBsejRTdXBw b3J0ID0gZmFsc2U7CisgICAgICAgICAgenN0ZFN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAg ICB1dWlkU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAgIGN1cmxTdXBwb3J0ID0gZmFsc2U7 CisgICAgICAgICAgcGVybFN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgICBweXRob25TdXBw b3J0ID0gZmFsc2U7CisgICAgICAgICAgdGNsU3VwcG9ydCA9IGZhbHNlOworICAgICAgICAg IHN5c3RlbWRTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgbGlidXJpbmdTdXBwb3J0ID0g ZmFsc2U7CisgICAgICAgICAgbnVtYVN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgICBnc3NT dXBwb3J0ID0gZmFsc2U7CisgICAgICAgICAgcGFtU3VwcG9ydCA9IGZhbHNlOworICAgICAg ICB9OworICAgICAgICBkZWZhdWx0ID0gcG9zdGdyZXNxbDsKKyAgICAgIH0pOworCisgICAg ICAjIGBuaXggZGV2ZWxvcGA6IHRoZSBwb3N0Z3Jlc3FsIHBhY2thZ2UgYWxyZWFkeSBicmlu Z3MgaW4gdGhlIGZ1bGwKKyAgICAgICMgYnVpbGQgdG9vbGNoYWluIChtZXNvbiwgbmluamEs IGJpc29uLCBmbGV4LCBwZXJsLCBweXRob24zLCB0Y2wsIGFuZAorICAgICAgIyB0aGUgb3B0 aW9uYWwgbGlicmFyaWVzKSB2aWEgaW5wdXRzRnJvbS4gV2UgYWRkIG9ubHkgd2hhdCBhIGRl diBzaGVsbAorICAgICAgIyB3YW50cyBvbiB0b3A6IGNjYWNoZSwgYW5kIHRoZSBEb2NCb29r IHRvb2xjaGFpbiBmb3IgYnVpbGRpbmcgZG9jcworICAgICAgIyAoZG9jcyBhcmUgb2ZmIGlu IHRoZSBkZWZhdWx0IHBhY2thZ2UgYnVpbGQpLgorICAgICAgZGV2U2hlbGxzID0gZm9yQWxs U3lzdGVtcyAocGtnczogeworICAgICAgICBkZWZhdWx0ID0gcGtncy5ta1NoZWxsIHsKKyAg ICAgICAgICBpbnB1dHNGcm9tID0gWyBzZWxmLnBhY2thZ2VzLiR7cGtncy5zdGRlbnYuaG9z dFBsYXRmb3JtLnN5c3RlbX0ucG9zdGdyZXNxbCBdOworICAgICAgICAgIHBhY2thZ2VzID0g d2l0aCBwa2dzOyBbCisgICAgICAgICAgICBjY2FjaGUKKyAgICAgICAgICAgIGRvY2Jvb2tf eG1sX2R0ZF80NQorICAgICAgICAgICAgZG9jYm9vay14c2wtbm9ucworICAgICAgICAgIF07 CisgICAgICAgIH07CisgICAgICB9KTsKKworICAgICAgZm9ybWF0dGVyID0gZm9yQWxsU3lz dGVtcyAocGtnczogcGtncy5uaXhmbXQpOworICAgIH07Cit9Ci0tIAoyLjU0LjAKCg== --7b1e1bceebcb375c9d5ad4c3df9769a494e20c6d--